From a7835be42634e42db869fb7fa6d198909666c3dd Mon Sep 17 00:00:00 2001 From: Roman Timashev Date: Tue, 4 Nov 2014 21:47:42 +0300 Subject: [PATCH] node_modules removed from index --- node_modules/.bin/_mocha | 1 - node_modules/.bin/express | 1 - node_modules/.bin/gulp | 1 - node_modules/.bin/jade | 1 - node_modules/.bin/mocha | 1 - node_modules/consolidate/.npmignore | 4 - node_modules/consolidate/History.md | 86 - node_modules/consolidate/Makefile | 9 - node_modules/consolidate/Readme.md | 155 - node_modules/consolidate/index.js | 1 - node_modules/consolidate/lib/consolidate.js | 764 - node_modules/consolidate/package.json | 67 - node_modules/express/.npmignore | 9 - node_modules/express/.travis.yml | 4 - node_modules/express/History.md | 1274 - node_modules/express/LICENSE | 22 - node_modules/express/Makefile | 34 - node_modules/express/Readme.md | 126 - node_modules/express/benchmarks/Makefile | 13 - node_modules/express/benchmarks/middleware.js | 23 - node_modules/express/benchmarks/run | 16 - node_modules/express/bin/express | 423 - node_modules/express/index.js | 4 - node_modules/express/lib/application.js | 534 - node_modules/express/lib/express.js | 82 - node_modules/express/lib/middleware.js | 32 - node_modules/express/lib/request.js | 529 - node_modules/express/lib/response.js | 799 - node_modules/express/lib/router/index.js | 321 - node_modules/express/lib/router/route.js | 78 - node_modules/express/lib/utils.js | 314 - node_modules/express/lib/view.js | 77 - .../node_modules/buffer-crc32/.npmignore | 1 - .../node_modules/buffer-crc32/.travis.yml | 8 - .../node_modules/buffer-crc32/README.md | 47 - .../node_modules/buffer-crc32/index.js | 88 - .../node_modules/buffer-crc32/package.json | 43 - .../buffer-crc32/tests/crc.test.js | 89 - .../express/node_modules/commander/History.md | 174 - .../express/node_modules/commander/Readme.md | 276 - .../express/node_modules/commander/index.js | 1160 - .../commander/node_modules/keypress/README.md | 101 - .../commander/node_modules/keypress/index.js | 346 - .../node_modules/keypress/package.json | 32 - .../commander/node_modules/keypress/test.js | 28 - .../node_modules/commander/package.json | 45 - .../express/node_modules/connect/.npmignore | 12 - .../express/node_modules/connect/.travis.yml | 4 - .../express/node_modules/connect/LICENSE | 24 - .../express/node_modules/connect/Readme.md | 84 - .../express/node_modules/connect/index.js | 4 - .../express/node_modules/connect/lib/cache.js | 81 - .../node_modules/connect/lib/connect.js | 92 - .../express/node_modules/connect/lib/index.js | 50 - .../connect/lib/middleware/basicAuth.js | 106 - .../connect/lib/middleware/bodyParser.js | 68 - .../connect/lib/middleware/compress.js | 192 - .../connect/lib/middleware/cookieParser.js | 67 - .../connect/lib/middleware/cookieSession.js | 122 - .../connect/lib/middleware/csrf.js | 163 - .../connect/lib/middleware/directory.js | 330 - .../connect/lib/middleware/errorHandler.js | 86 - .../connect/lib/middleware/favicon.js | 80 - .../connect/lib/middleware/json.js | 87 - .../connect/lib/middleware/limit.js | 89 - .../connect/lib/middleware/logger.js | 342 - .../connect/lib/middleware/methodOverride.js | 58 - .../connect/lib/middleware/multipart.js | 171 - .../connect/lib/middleware/query.js | 47 - .../connect/lib/middleware/responseTime.js | 32 - .../connect/lib/middleware/session.js | 358 - .../connect/lib/middleware/session/cookie.js | 128 - .../connect/lib/middleware/session/memory.js | 129 - .../connect/lib/middleware/session/session.js | 116 - .../connect/lib/middleware/session/store.js | 84 - .../connect/lib/middleware/static.js | 102 - .../connect/lib/middleware/staticCache.js | 238 - .../connect/lib/middleware/timeout.js | 55 - .../connect/lib/middleware/urlencoded.js | 77 - .../connect/lib/middleware/vhost.js | 40 - .../express/node_modules/connect/lib/patch.js | 89 - .../express/node_modules/connect/lib/proto.js | 233 - .../connect/lib/public/directory.html | 82 - .../connect/lib/public/error.html | 14 - .../connect/lib/public/favicon.ico | Bin 1406 -> 0 bytes .../connect/lib/public/icons/folder.png | Bin 634 -> 0 bytes .../connect/lib/public/icons/page.png | Bin 635 -> 0 bytes .../connect/lib/public/icons/page_add.png | Bin 739 -> 0 bytes .../connect/lib/public/icons/page_attach.png | Bin 794 -> 0 bytes .../connect/lib/public/icons/page_code.png | Bin 818 -> 0 bytes .../connect/lib/public/icons/page_copy.png | Bin 663 -> 0 bytes .../connect/lib/public/icons/page_delete.png | Bin 740 -> 0 bytes .../connect/lib/public/icons/page_edit.png | Bin 807 -> 0 bytes .../connect/lib/public/icons/page_error.png | Bin 793 -> 0 bytes .../connect/lib/public/icons/page_excel.png | Bin 817 -> 0 bytes .../connect/lib/public/icons/page_find.png | Bin 879 -> 0 bytes .../connect/lib/public/icons/page_gear.png | Bin 833 -> 0 bytes .../connect/lib/public/icons/page_go.png | Bin 779 -> 0 bytes .../connect/lib/public/icons/page_green.png | Bin 621 -> 0 bytes .../connect/lib/public/icons/page_key.png | Bin 801 -> 0 bytes .../lib/public/icons/page_lightning.png | Bin 839 -> 0 bytes .../connect/lib/public/icons/page_link.png | Bin 830 -> 0 bytes .../lib/public/icons/page_paintbrush.png | Bin 813 -> 0 bytes .../connect/lib/public/icons/page_paste.png | Bin 703 -> 0 bytes .../connect/lib/public/icons/page_red.png | Bin 641 -> 0 bytes .../connect/lib/public/icons/page_refresh.png | Bin 858 -> 0 bytes .../connect/lib/public/icons/page_save.png | Bin 774 -> 0 bytes .../connect/lib/public/icons/page_white.png | Bin 294 -> 0 bytes .../lib/public/icons/page_white_acrobat.png | Bin 591 -> 0 bytes .../public/icons/page_white_actionscript.png | Bin 664 -> 0 bytes .../lib/public/icons/page_white_add.png | Bin 512 -> 0 bytes .../connect/lib/public/icons/page_white_c.png | Bin 587 -> 0 bytes .../lib/public/icons/page_white_camera.png | Bin 656 -> 0 bytes .../lib/public/icons/page_white_cd.png | Bin 666 -> 0 bytes .../lib/public/icons/page_white_code.png | Bin 603 -> 0 bytes .../lib/public/icons/page_white_code_red.png | Bin 587 -> 0 bytes .../public/icons/page_white_coldfusion.png | Bin 592 -> 0 bytes .../public/icons/page_white_compressed.png | Bin 724 -> 0 bytes .../lib/public/icons/page_white_copy.png | Bin 309 -> 0 bytes .../lib/public/icons/page_white_cplusplus.png | Bin 621 -> 0 bytes .../lib/public/icons/page_white_csharp.png | Bin 700 -> 0 bytes .../lib/public/icons/page_white_cup.png | Bin 639 -> 0 bytes .../lib/public/icons/page_white_database.png | Bin 579 -> 0 bytes .../lib/public/icons/page_white_delete.png | Bin 536 -> 0 bytes .../lib/public/icons/page_white_dvd.png | Bin 638 -> 0 bytes .../lib/public/icons/page_white_edit.png | Bin 618 -> 0 bytes .../lib/public/icons/page_white_error.png | Bin 623 -> 0 bytes .../lib/public/icons/page_white_excel.png | Bin 663 -> 0 bytes .../lib/public/icons/page_white_find.png | Bin 676 -> 0 bytes .../lib/public/icons/page_white_flash.png | Bin 582 -> 0 bytes .../lib/public/icons/page_white_freehand.png | Bin 639 -> 0 bytes .../lib/public/icons/page_white_gear.png | Bin 402 -> 0 bytes .../lib/public/icons/page_white_get.png | Bin 516 -> 0 bytes .../lib/public/icons/page_white_go.png | Bin 612 -> 0 bytes .../connect/lib/public/icons/page_white_h.png | Bin 603 -> 0 bytes .../public/icons/page_white_horizontal.png | Bin 296 -> 0 bytes .../lib/public/icons/page_white_key.png | Bin 616 -> 0 bytes .../lib/public/icons/page_white_lightning.png | Bin 669 -> 0 bytes .../lib/public/icons/page_white_link.png | Bin 614 -> 0 bytes .../lib/public/icons/page_white_magnify.png | Bin 554 -> 0 bytes .../lib/public/icons/page_white_medal.png | Bin 706 -> 0 bytes .../lib/public/icons/page_white_office.png | Bin 779 -> 0 bytes .../lib/public/icons/page_white_paint.png | Bin 688 -> 0 bytes .../public/icons/page_white_paintbrush.png | Bin 618 -> 0 bytes .../lib/public/icons/page_white_paste.png | Bin 620 -> 0 bytes .../lib/public/icons/page_white_php.png | Bin 538 -> 0 bytes .../lib/public/icons/page_white_picture.png | Bin 650 -> 0 bytes .../public/icons/page_white_powerpoint.png | Bin 588 -> 0 bytes .../lib/public/icons/page_white_put.png | Bin 523 -> 0 bytes .../lib/public/icons/page_white_ruby.png | Bin 626 -> 0 bytes .../lib/public/icons/page_white_stack.png | Bin 317 -> 0 bytes .../lib/public/icons/page_white_star.png | Bin 565 -> 0 bytes .../lib/public/icons/page_white_swoosh.png | Bin 634 -> 0 bytes .../lib/public/icons/page_white_text.png | Bin 342 -> 0 bytes .../public/icons/page_white_text_width.png | Bin 315 -> 0 bytes .../lib/public/icons/page_white_tux.png | Bin 668 -> 0 bytes .../lib/public/icons/page_white_vector.png | Bin 644 -> 0 bytes .../public/icons/page_white_visualstudio.png | Bin 702 -> 0 bytes .../lib/public/icons/page_white_width.png | Bin 309 -> 0 bytes .../lib/public/icons/page_white_word.png | Bin 651 -> 0 bytes .../lib/public/icons/page_white_world.png | Bin 734 -> 0 bytes .../lib/public/icons/page_white_wrench.png | Bin 613 -> 0 bytes .../lib/public/icons/page_white_zip.png | Bin 386 -> 0 bytes .../connect/lib/public/icons/page_word.png | Bin 777 -> 0 bytes .../connect/lib/public/icons/page_world.png | Bin 903 -> 0 bytes .../node_modules/connect/lib/public/style.css | 257 - .../express/node_modules/connect/lib/utils.js | 408 - .../connect/node_modules/batch/.npmignore | 4 - .../connect/node_modules/batch/History.md | 66 - .../connect/node_modules/batch/Makefile | 6 - .../connect/node_modules/batch/Readme.md | 74 - .../connect/node_modules/batch/component.json | 14 - .../connect/node_modules/batch/index.js | 158 - .../connect/node_modules/batch/package.json | 22 - .../connect/node_modules/bytes/.npmignore | 1 - .../connect/node_modules/bytes/History.md | 15 - .../connect/node_modules/bytes/Makefile | 7 - .../connect/node_modules/bytes/Readme.md | 51 - .../connect/node_modules/bytes/component.json | 7 - .../connect/node_modules/bytes/index.js | 39 - .../connect/node_modules/bytes/package.json | 29 - .../connect/node_modules/multiparty/.jshintrc | 70 - .../node_modules/multiparty/.npmignore | 1 - .../node_modules/multiparty/.travis.yml | 6 - .../node_modules/multiparty/CHANGELOG.md | 191 - .../connect/node_modules/multiparty/LICENSE | 7 - .../connect/node_modules/multiparty/README.md | 177 - .../multiparty/examples/azureblobstorage.js | 41 - .../node_modules/multiparty/examples/s3.js | 74 - .../multiparty/examples/upload.js | 37 - .../connect/node_modules/multiparty/index.js | 618 - .../node_modules/readable-stream/.npmignore | 5 - .../node_modules/readable-stream/LICENSE | 18 - .../node_modules/readable-stream/README.md | 768 - .../node_modules/readable-stream/duplex.js | 1 - .../node_modules/readable-stream/float.patch | 923 - .../readable-stream/lib/_stream_duplex.js | 69 - .../lib/_stream_passthrough.js | 41 - .../readable-stream/lib/_stream_readable.js | 924 - .../readable-stream/lib/_stream_transform.js | 210 - .../readable-stream/lib/_stream_writable.js | 460 - .../node_modules/core-util-is/README.md | 3 - .../node_modules/core-util-is/float.patch | 604 - .../node_modules/core-util-is/lib/util.js | 107 - .../node_modules/core-util-is/package.json | 35 - .../node_modules/core-util-is/util.js | 106 - .../node_modules/debuglog/LICENSE | 19 - .../node_modules/debuglog/README.md | 40 - .../node_modules/debuglog/debuglog.js | 22 - .../node_modules/debuglog/package.json | 30 - .../node_modules/readable-stream/package.json | 42 - .../readable-stream/passthrough.js | 1 - .../node_modules/readable-stream/readable.js | 7 - .../node_modules/readable-stream/transform.js | 1 - .../node_modules/readable-stream/writable.js | 1 - .../node_modules/stream-counter/.npmignore | 1 - .../node_modules/stream-counter/README.md | 14 - .../node_modules/stream-counter/index.js | 16 - .../node_modules/stream-counter/package.json | 32 - .../node_modules/stream-counter/test/test.js | 20 - .../node_modules/stream-counter/test/test.txt | 1 - .../node_modules/multiparty/package.json | 47 - .../multiparty/test/bench-multipart-parser.js | 76 - .../test/fixture/file/beta-sticker-1.png | Bin 1660 -> 0 bytes .../test/fixture/file/binaryfile.tar.gz | Bin 301 -> 0 bytes .../multiparty/test/fixture/file/blank.gif | Bin 49 -> 0 bytes .../test/fixture/file/funkyfilename.txt | 1 - .../test/fixture/file/menu_separator.png | Bin 931 -> 0 bytes .../multiparty/test/fixture/file/pf1y5.png | Bin 768323 -> 0 bytes .../multiparty/test/fixture/file/plain.txt | 1 - .../http/encoding/beta-sticker-1.png.http | 12 - .../http/encoding/binaryfile.tar.gz.http | 12 - .../test/fixture/http/encoding/blank.gif.http | 12 - .../http/encoding/menu_seperator.png.http | 12 - .../test/fixture/http/encoding/pf1y5.png.http | Bin 769113 -> 0 bytes .../test/fixture/http/encoding/plain.txt.http | 13 - .../http/no-filename/filename-name.http | 13 - .../fixture/http/no-filename/generic.http | 13 - .../test/fixture/http/preamble/crlf.http | 13 - .../test/fixture/http/preamble/preamble.http | 13 - .../http/special-chars-in-filename/info.md | 3 - .../osx-chrome-13.http | 26 - .../osx-firefox-3.6.http | 24 - .../osx-safari-5.http | 23 - .../xp-chrome-12.http | 24 - .../special-chars-in-filename/xp-ie-7.http | 22 - .../special-chars-in-filename/xp-ie-8.http | 22 - .../xp-safari-5.http | 22 - .../http/workarounds/missing-hyphens1.http | 12 - .../http/workarounds/missing-hyphens2.http | 12 - .../multiparty/test/fixture/js/encoding.js | 69 - .../multiparty/test/fixture/js/no-filename.js | 9 - .../multiparty/test/fixture/js/preamble.js | 9 - .../fixture/js/special-chars-in-filename.js | 30 - .../multiparty/test/fixture/js/workarounds.js | 8 - .../test/fixture/multi_video.upload | Bin 1953781 -> 0 bytes .../multiparty/test/fixture/multipart.js | 72 - .../node_modules/multiparty/test/record.js | 47 - .../standalone/test-connection-aborted.js | 27 - .../test-content-transfer-encoding.js | 52 - .../test/standalone/test-invalid.js | 35 - .../test/standalone/test-issue-15.js | 88 - .../test/standalone/test-issue-19.js | 44 - .../test/standalone/test-issue-21.js | 66 - .../test/standalone/test-issue-4.js | 51 - .../test/standalone/test-issue-46.js | 49 - .../test/standalone/test-issue-5.js | 39 - .../node_modules/multiparty/test/test.js | 117 - .../connect/node_modules/negotiator/LICENSE | 27 - .../negotiator/examples/accept.js | 47 - .../negotiator/examples/charset.js | 52 - .../negotiator/examples/encoding.js | 48 - .../negotiator/examples/language.js | 44 - .../node_modules/negotiator/lib/charset.js | 71 - .../node_modules/negotiator/lib/encoding.js | 89 - .../node_modules/negotiator/lib/language.js | 92 - .../node_modules/negotiator/lib/mediaType.js | 101 - .../node_modules/negotiator/lib/negotiator.js | 29 - .../node_modules/negotiator/package.json | 54 - .../connect/node_modules/negotiator/readme.md | 132 - .../node_modules/negotiator/test/charset.js | 62 - .../node_modules/negotiator/test/encoding.js | 70 - .../node_modules/negotiator/test/language.js | 70 - .../node_modules/negotiator/test/mediaType.js | 70 - .../connect/node_modules/pause/.npmignore | 4 - .../connect/node_modules/pause/History.md | 5 - .../connect/node_modules/pause/Makefile | 7 - .../connect/node_modules/pause/Readme.md | 29 - .../connect/node_modules/pause/index.js | 29 - .../connect/node_modules/pause/package.json | 24 - .../connect/node_modules/qs/.gitmodules | 6 - .../connect/node_modules/qs/.npmignore | 7 - .../connect/node_modules/qs/Readme.md | 58 - .../connect/node_modules/qs/index.js | 366 - .../connect/node_modules/qs/package.json | 42 - .../connect/node_modules/raw-body/.npmignore | 1 - .../connect/node_modules/raw-body/.travis.yml | 8 - .../connect/node_modules/raw-body/Makefile | 13 - .../connect/node_modules/raw-body/README.md | 96 - .../connect/node_modules/raw-body/index.js | 160 - .../node_modules/raw-body/package.json | 45 - .../connect/node_modules/uid2/LICENSE | 21 - .../connect/node_modules/uid2/index.js | 55 - .../connect/node_modules/uid2/package.json | 16 - .../express/node_modules/connect/package.json | 69 - .../node_modules/cookie-signature/.npmignore | 4 - .../node_modules/cookie-signature/History.md | 11 - .../node_modules/cookie-signature/Makefile | 7 - .../node_modules/cookie-signature/Readme.md | 42 - .../node_modules/cookie-signature/index.js | 42 - .../cookie-signature/package.json | 28 - .../express/node_modules/cookie/.npmignore | 1 - .../express/node_modules/cookie/.travis.yml | 5 - .../express/node_modules/cookie/LICENSE | 9 - .../express/node_modules/cookie/README.md | 44 - .../express/node_modules/cookie/index.js | 70 - .../express/node_modules/cookie/package.json | 41 - .../node_modules/cookie/test/mocha.opts | 1 - .../express/node_modules/cookie/test/parse.js | 44 - .../node_modules/cookie/test/serialize.js | 64 - .../express/node_modules/debug/Readme.md | 115 - .../express/node_modules/debug/debug.js | 137 - .../express/node_modules/debug/index.js | 5 - .../express/node_modules/debug/lib/debug.js | 147 - .../express/node_modules/debug/package.json | 46 - .../express/node_modules/fresh/.npmignore | 1 - .../express/node_modules/fresh/History.md | 5 - .../express/node_modules/fresh/Makefile | 7 - .../express/node_modules/fresh/Readme.md | 57 - .../express/node_modules/fresh/index.js | 53 - .../express/node_modules/fresh/package.json | 32 - .../node_modules/merge-descriptors/.npmignore | 59 - .../node_modules/merge-descriptors/README.md | 49 - .../merge-descriptors/component.json | 10 - .../node_modules/merge-descriptors/index.js | 8 - .../merge-descriptors/package.json | 30 - .../express/node_modules/methods/History.md | 5 - .../express/node_modules/methods/Readme.md | 4 - .../express/node_modules/methods/index.js | 37 - .../express/node_modules/methods/package.json | 33 - .../express/node_modules/mkdirp/.npmignore | 2 - .../express/node_modules/mkdirp/.travis.yml | 5 - .../express/node_modules/mkdirp/LICENSE | 21 - .../node_modules/mkdirp/examples/pow.js | 6 - .../express/node_modules/mkdirp/index.js | 82 - .../express/node_modules/mkdirp/package.json | 34 - .../node_modules/mkdirp/readme.markdown | 63 - .../express/node_modules/mkdirp/test/chmod.js | 38 - .../node_modules/mkdirp/test/clobber.js | 37 - .../node_modules/mkdirp/test/mkdirp.js | 28 - .../express/node_modules/mkdirp/test/perm.js | 32 - .../node_modules/mkdirp/test/perm_sync.js | 39 - .../express/node_modules/mkdirp/test/race.js | 41 - .../express/node_modules/mkdirp/test/rel.js | 32 - .../node_modules/mkdirp/test/return.js | 25 - .../node_modules/mkdirp/test/return_sync.js | 24 - .../express/node_modules/mkdirp/test/root.js | 18 - .../express/node_modules/mkdirp/test/sync.js | 32 - .../express/node_modules/mkdirp/test/umask.js | 28 - .../node_modules/mkdirp/test/umask_sync.js | 32 - .../node_modules/range-parser/.npmignore | 1 - .../node_modules/range-parser/History.md | 15 - .../node_modules/range-parser/Makefile | 7 - .../node_modules/range-parser/Readme.md | 28 - .../node_modules/range-parser/index.js | 49 - .../node_modules/range-parser/package.json | 24 - .../express/node_modules/send/.npmignore | 4 - .../express/node_modules/send/History.md | 40 - .../express/node_modules/send/Makefile | 8 - .../express/node_modules/send/Readme.md | 128 - .../express/node_modules/send/index.js | 2 - .../express/node_modules/send/lib/send.js | 474 - .../express/node_modules/send/lib/utils.js | 47 - .../send/node_modules/mime/LICENSE | 19 - .../send/node_modules/mime/README.md | 66 - .../send/node_modules/mime/mime.js | 114 - .../send/node_modules/mime/package.json | 36 - .../send/node_modules/mime/test.js | 84 - .../send/node_modules/mime/types/mime.types | 1588 -- .../send/node_modules/mime/types/node.types | 77 - .../express/node_modules/send/package.json | 46 - node_modules/express/package.json | 91 - 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 - node_modules/gulp-imagemin/index.js | 56 - .../node_modules/filesize/.npmignore | 8 - .../node_modules/filesize/LICENSE | 27 - .../node_modules/filesize/README.md | 47 - .../node_modules/filesize/lib/filesize.js | 141 - .../node_modules/filesize/package.json | 55 - .../node_modules/graceful-fs/.npmignore | 1 - .../node_modules/graceful-fs/LICENSE | 27 - .../node_modules/graceful-fs/README.md | 26 - .../node_modules/graceful-fs/graceful-fs.js | 159 - .../node_modules/graceful-fs/package.json | 53 - .../node_modules/graceful-fs/polyfills.js | 228 - .../node_modules/graceful-fs/test/open.js | 39 - .../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 | 62 - .../chalk/node_modules/ansi-styles/readme.md | 65 - .../chalk/node_modules/has-color/has-color.js | 24 - .../chalk/node_modules/has-color/package.json | 59 - .../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 | 68 - .../chalk/node_modules/strip-ansi/readme.md | 46 - .../gulp-util/node_modules/chalk/package.json | 65 - .../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 | 44 - .../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 | 49 - .../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 | 49 - .../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 | 49 - .../node_modules/lodash.defaults/package.json | 60 - .../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 | 49 - .../lodash._escapehtmlchar/package.json | 52 - .../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 | 49 - .../lodash._reunescapedhtml/package.json | 53 - .../node_modules/lodash.escape/package.json | 61 - .../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 | 49 - .../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 | 50 - .../lodash._shimkeys/package.json | 52 - .../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 | 50 - .../node_modules/lodash.isobject/package.json | 59 - .../node_modules/lodash.keys/package.json | 61 - .../lodash.templatesettings/LICENSE.txt | 22 - .../lodash.templatesettings/README.md | 15 - .../lodash.templatesettings/index.js | 73 - .../lodash.templatesettings/package.json | 60 - .../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 | 59 - .../node_modules/lodash.template/package.json | 65 - .../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 | 54 - .../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 | 297 - .../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 | 10 - .../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 | 41 - .../node_modules/duplexer2/test/tests.js | 161 - .../node_modules/multipipe/package.json | 30 - .../node_modules/multipipe/test/multipipe.js | 85 - .../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 | 768 - .../node_modules/readable-stream/duplex.js | 1 - .../node_modules/readable-stream/float.patch | 68 - .../readable-stream/lib/_stream_duplex.js | 69 - .../lib/_stream_passthrough.js | 41 - .../readable-stream/lib/_stream_readable.js | 927 - .../readable-stream/lib/_stream_transform.js | 205 - .../readable-stream/lib/_stream_writable.js | 371 - .../node_modules/string_decoder/.npmignore | 1 - .../node_modules/string_decoder/LICENSE | 20 - .../node_modules/string_decoder/README.md | 7 - .../string_decoder/build/.npmignore | 1 - .../string_decoder/build/build.js | 94 - .../string_decoder/build/files.js | 36 - .../string_decoder/build/package.json | 12 - .../string_decoder/build/test-replacements.js | 24 - .../node_modules/string_decoder/index.js | 200 - .../node_modules/string_decoder/package.json | 36 - .../string_decoder/test/common.js | 200 - .../test/simple/test-string-decoder-end.js | 75 - .../test/simple/test-string-decoder.js | 163 - .../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 | 60 - .../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 | 76 - .../through2/node_modules/xtend/test.js | 63 - .../node_modules/through2/package.json | 48 - .../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 | 43 - .../vinyl/node_modules/clone-stats/test.js | 36 - .../gulp-util/node_modules/vinyl/package.json | 55 - .../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 | 62 - .../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/image-min/README.md | 73 - .../node_modules/image-min/imagemin.js | 190 - .../image-min/node_modules/.bin/gifsicle | 1 - .../image-min/node_modules/.bin/jpegtran | 1 - .../image-min/node_modules/.bin/optipng | 1 - .../node_modules/cache-file/README.md | 54 - .../node_modules/cache-file/index.js | 95 - .../cache-file/node_modules/.bin/rimraf | 1 - .../node_modules/hash-file/README.md | 25 - .../node_modules/hash-file/index.js | 16 - .../node_modules/hash-file/package.json | 45 - .../cache-file/node_modules/rimraf/AUTHORS | 6 - .../cache-file/node_modules/rimraf/LICENSE | 23 - .../cache-file/node_modules/rimraf/README.md | 30 - .../cache-file/node_modules/rimraf/bin.js | 33 - .../node_modules/rimraf/package.json | 60 - .../cache-file/node_modules/rimraf/rimraf.js | 178 - .../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/cache-file/package.json | 50 - .../node_modules/gifsicle/bin/gifsicle.js | 8 - .../node_modules/gifsicle/lib/check.js | 24 - .../node_modules/gifsicle/lib/gifsicle.js | 49 - .../node_modules/bin-wrapper/README.md | 67 - .../node_modules/bin-wrapper/bin-wrapper.js | 222 - .../bin-wrapper/node_modules/.bin/rimraf | 1 - .../bin-wrapper/node_modules/.bin/which | 1 - .../node_modules/download/README.md | 84 - .../node_modules/download/download.js | 100 - .../node_modules/decompress/README.md | 71 - .../node_modules/decompress/decompress.js | 168 - .../adm-zip/.idea/scopes/scope_settings.xml | 5 - .../node_modules/adm-zip/MIT-LICENSE.txt | 21 - .../decompress/node_modules/adm-zip/README.md | 64 - .../node_modules/adm-zip/adm-zip.js | 404 - .../adm-zip/headers/entryHeader.js | 261 - .../node_modules/adm-zip/headers/index.js | 2 - .../adm-zip/headers/mainHeader.js | 80 - .../node_modules/adm-zip/methods/deflater.js | 1578 -- .../node_modules/adm-zip/methods/index.js | 2 - .../node_modules/adm-zip/methods/inflater.js | 448 - .../node_modules/adm-zip/package.json | 43 - .../adm-zip/test/assets/attributes_test.zip | Bin 4189 -> 0 bytes .../attributes_test/New folder/hidden.txt | 17 - .../New folder/hidden_readonly.txt | 17 - .../attributes_test/New folder/readonly.txt | 17 - .../attributes_test/New folder/somefile.txt | 17 - .../attributes_test/asd/New Text Document.txt | 0 .../assets/attributes_test/blank file.txt | 0 .../node_modules/adm-zip/test/assets/fast.zip | Bin 4194 -> 0 bytes .../adm-zip/test/assets/fastest.zip | Bin 4194 -> 0 bytes .../adm-zip/test/assets/linux_arc.zip | Bin 415 -> 0 bytes .../adm-zip/test/assets/maximum.zip | Bin 4086 -> 0 bytes .../adm-zip/test/assets/normal.zip | Bin 4170 -> 0 bytes .../adm-zip/test/assets/store.zip | Bin 5878 -> 0 bytes .../adm-zip/test/assets/ultra.zip | Bin 4086 -> 0 bytes .../node_modules/adm-zip/test/index.js | 5 - .../node_modules/adm-zip/util/constants.js | 84 - .../node_modules/adm-zip/util/errors.js | 35 - .../node_modules/adm-zip/util/fattr.js | 84 - .../node_modules/adm-zip/util/index.js | 4 - .../node_modules/adm-zip/util/utils.js | 145 - .../node_modules/adm-zip/zipEntry.js | 224 - .../node_modules/adm-zip/zipFile.js | 311 - .../node_modules/stream-combiner/.npmignore | 3 - .../node_modules/stream-combiner/.travis.yml | 4 - .../node_modules/stream-combiner/LICENSE | 22 - .../node_modules/stream-combiner/README.md | 29 - .../node_modules/stream-combiner/index.js | 39 - .../node_modules/duplexer/.npmignore | 3 - .../node_modules/duplexer/.travis.yml | 6 - .../node_modules/duplexer/LICENCE | 19 - .../node_modules/duplexer/README.md | 47 - .../node_modules/duplexer/index.js | 87 - .../node_modules/duplexer/package.json | 61 - .../node_modules/duplexer/test/index.js | 31 - .../node_modules/stream-combiner/package.json | 37 - .../stream-combiner/test/index.js | 52 - .../decompress/node_modules/tar/.npmignore | 5 - .../decompress/node_modules/tar/.travis.yml | 3 - .../decompress/node_modules/tar/LICENCE | 25 - .../decompress/node_modules/tar/README.md | 46 - .../node_modules/tar/examples/extracter.js | 11 - .../node_modules/tar/examples/reader.js | 36 - .../node_modules/tar/lib/buffer-entry.js | 30 - .../node_modules/tar/lib/entry-writer.js | 169 - .../decompress/node_modules/tar/lib/entry.js | 213 - .../tar/lib/extended-header-writer.js | 191 - .../node_modules/tar/lib/extended-header.js | 140 - .../node_modules/tar/lib/extract.js | 78 - .../tar/lib/global-header-writer.js | 14 - .../decompress/node_modules/tar/lib/header.js | 385 - .../decompress/node_modules/tar/lib/pack.js | 231 - .../decompress/node_modules/tar/lib/parse.js | 270 - .../tar/node_modules/block-stream/LICENCE | 25 - .../tar/node_modules/block-stream/README.md | 14 - .../block-stream/bench/block-stream-pause.js | 70 - .../block-stream/bench/block-stream.js | 68 - .../block-stream/bench/dropper-pause.js | 70 - .../block-stream/bench/dropper.js | 68 - .../node_modules/block-stream/block-stream.js | 209 - .../node_modules/block-stream/package.json | 40 - .../node_modules/block-stream/test/basic.js | 27 - .../block-stream/test/nopad-thorough.js | 68 - .../node_modules/block-stream/test/nopad.js | 57 - .../block-stream/test/pause-resume.js | 73 - .../block-stream/test/thorough.js | 68 - .../block-stream/test/two-stream.js | 59 - .../tar/node_modules/fstream/.npmignore | 5 - .../tar/node_modules/fstream/.travis.yml | 3 - .../tar/node_modules/fstream/LICENSE | 27 - .../tar/node_modules/fstream/README.md | 76 - .../fstream/examples/filter-pipe.js | 131 - .../tar/node_modules/fstream/examples/pipe.js | 115 - .../node_modules/fstream/examples/reader.js | 54 - .../fstream/examples/symlink-write.js | 24 - .../tar/node_modules/fstream/fstream.js | 31 - .../tar/node_modules/fstream/lib/abstract.js | 85 - .../tar/node_modules/fstream/lib/collect.js | 67 - .../node_modules/fstream/lib/dir-reader.js | 251 - .../node_modules/fstream/lib/dir-writer.js | 171 - .../node_modules/fstream/lib/file-reader.js | 147 - .../node_modules/fstream/lib/file-writer.js | 100 - .../tar/node_modules/fstream/lib/get-type.js | 32 - .../node_modules/fstream/lib/link-reader.js | 54 - .../node_modules/fstream/lib/link-writer.js | 95 - .../node_modules/fstream/lib/proxy-reader.js | 93 - .../node_modules/fstream/lib/proxy-writer.js | 109 - .../tar/node_modules/fstream/lib/reader.js | 260 - .../node_modules/fstream/lib/socket-reader.js | 38 - .../tar/node_modules/fstream/lib/writer.js | 389 - .../tar/node_modules/fstream/package.json | 43 - .../tar/node_modules/inherits/LICENSE | 16 - .../tar/node_modules/inherits/README.md | 42 - .../tar/node_modules/inherits/inherits.js | 1 - .../node_modules/inherits/inherits_browser.js | 23 - .../tar/node_modules/inherits/package.json | 37 - .../tar/node_modules/inherits/test.js | 25 - .../decompress/node_modules/tar/package.json | 40 - .../decompress/node_modules/tar/tar.js | 173 - .../tar/test/00-setup-fixtures.js | 53 - .../node_modules/tar/test/extract.js | 358 - .../node_modules/tar/test/fixtures.tgz | Bin 19205 -> 0 bytes .../node_modules/tar/test/header.js | 183 - .../tar/test/pack-no-proprietary.js | 854 - .../decompress/node_modules/tar/test/pack.js | 897 - .../decompress/node_modules/tar/test/parse.js | 359 - .../node_modules/tar/test/zz-cleanup.js | 20 - .../decompress/node_modules/tempfile/index.js | 8 - .../tempfile/node_modules/uuid/.npmignore | 2 - .../tempfile/node_modules/uuid/.travis.yml | 5 - .../tempfile/node_modules/uuid/LICENSE.md | 2 - .../tempfile/node_modules/uuid/README.md | 204 - .../node_modules/uuid/benchmark/README.md | 53 - .../node_modules/uuid/benchmark/bench.gnu | 174 - .../node_modules/uuid/benchmark/bench.sh | 34 - .../uuid/benchmark/benchmark-native.c | 34 - .../node_modules/uuid/benchmark/benchmark.js | 84 - .../node_modules/uuid/misc/compare.js | 62 - .../tempfile/node_modules/uuid/misc/perf.js | 102 - .../tempfile/node_modules/uuid/package.json | 56 - .../tempfile/node_modules/uuid/rng-browser.js | 31 - .../tempfile/node_modules/uuid/rng.js | 4 - .../node_modules/uuid/test/mocha.opts | 1 - .../tempfile/node_modules/uuid/test/test.js | 105 - .../tempfile/node_modules/uuid/uuid.js | 187 - .../node_modules/tempfile/package.json | 52 - .../node_modules/tempfile/readme.md | 36 - .../node_modules/decompress/package.json | 55 - .../node_modules/each-async/each-async.js | 72 - .../node_modules/each-async/package.json | 54 - .../node_modules/each-async/readme.md | 78 - .../download/node_modules/request/.npmignore | 2 - .../download/node_modules/request/.travis.yml | 12 - .../download/node_modules/request/LICENSE | 55 - .../download/node_modules/request/README.md | 366 - .../node_modules/request/dns-request.js | 7 - .../download/node_modules/request/index.js | 157 - .../download/node_modules/request/lib/copy.js | 8 - .../node_modules/request/lib/debug.js | 7 - .../node_modules/request/lib/getSafe.js | 34 - .../node_modules/request/lib/optional.js | 5 - .../request/node_modules/aws-sign2/LICENSE | 55 - .../request/node_modules/aws-sign2/README.md | 4 - .../request/node_modules/aws-sign2/index.js | 202 - .../node_modules/aws-sign2/package.json | 32 - .../node_modules/forever-agent/LICENSE | 55 - .../node_modules/forever-agent/README.md | 4 - .../node_modules/forever-agent/index.js | 119 - .../node_modules/forever-agent/package.json | 32 - .../request/node_modules/form-data/License | 19 - .../request/node_modules/form-data/Readme.md | 163 - .../node_modules/form-data/lib/form_data.js | 325 - .../form-data/node_modules/async/LICENSE | 19 - .../form-data/node_modules/async/README.md | 1425 - .../node_modules/async/component.json | 11 - .../form-data/node_modules/async/lib/async.js | 958 - .../form-data/node_modules/async/package.json | 47 - .../node_modules/combined-stream/.npmignore | 3 - .../node_modules/combined-stream/License | 19 - .../node_modules/combined-stream/Makefile | 7 - .../node_modules/combined-stream/Readme.md | 132 - .../combined-stream/lib/combined_stream.js | 185 - .../node_modules/delayed-stream/.npmignore | 2 - .../node_modules/delayed-stream/License | 19 - .../node_modules/delayed-stream/Makefile | 7 - .../node_modules/delayed-stream/Readme.md | 154 - .../delayed-stream/lib/delayed_stream.js | 99 - .../node_modules/delayed-stream/package.json | 35 - .../delayed-stream/test/common.js | 6 - .../integration/test-delayed-http-upload.js | 38 - .../test-delayed-stream-auto-pause.js | 21 - .../integration/test-delayed-stream-pause.js | 14 - .../test/integration/test-delayed-stream.js | 48 - .../integration/test-handle-source-errors.js | 15 - .../test/integration/test-max-data-size.js | 18 - .../test/integration/test-pipe-resumes.js | 13 - .../test/integration/test-proxy-readable.js | 13 - .../node_modules/delayed-stream/test/run.js | 7 - .../node_modules/combined-stream/package.json | 36 - .../combined-stream/test/common.js | 23 - .../combined-stream/test/fixture/file1.txt | 256 - .../combined-stream/test/fixture/file2.txt | 256 - .../test/integration/test-callback-streams.js | 27 - .../test/integration/test-data-size.js | 34 - ...delayed-streams-and-buffers-and-strings.js | 38 - .../test/integration/test-delayed-streams.js | 35 - .../test/integration/test-empty-string.js | 39 - .../test/integration/test-is-stream-like.js | 17 - .../test/integration/test-max-data-size.js | 24 - .../test/integration/test-unpaused-streams.js | 30 - .../node_modules/combined-stream/test/run.js | 7 - .../node_modules/form-data/package.json | 50 - .../request/node_modules/hawk/.npmignore | 18 - .../request/node_modules/hawk/.travis.yml | 5 - .../request/node_modules/hawk/LICENSE | 24 - .../request/node_modules/hawk/Makefile | 10 - .../request/node_modules/hawk/README.md | 627 - .../node_modules/hawk/example/usage.js | 78 - .../request/node_modules/hawk/images/hawk.png | Bin 6945 -> 0 bytes .../request/node_modules/hawk/images/logo.png | Bin 71732 -> 0 bytes .../request/node_modules/hawk/index.js | 1 - .../request/node_modules/hawk/lib/browser.js | 485 - .../request/node_modules/hawk/lib/client.js | 367 - .../request/node_modules/hawk/lib/crypto.js | 111 - .../request/node_modules/hawk/lib/index.js | 15 - .../request/node_modules/hawk/lib/server.js | 524 - .../request/node_modules/hawk/lib/utils.js | 183 - .../hawk/node_modules/boom/.npmignore | 18 - .../hawk/node_modules/boom/.travis.yml | 5 - .../hawk/node_modules/boom/LICENSE | 24 - .../hawk/node_modules/boom/Makefile | 11 - .../hawk/node_modules/boom/README.md | 6 - .../hawk/node_modules/boom/images/boom.png | Bin 29479 -> 0 bytes .../hawk/node_modules/boom/index.js | 1 - .../hawk/node_modules/boom/lib/index.js | 207 - .../hawk/node_modules/boom/package.json | 51 - .../hawk/node_modules/boom/test/index.js | 245 - .../hawk/node_modules/cryptiles/.npmignore | 18 - .../hawk/node_modules/cryptiles/.travis.yml | 5 - .../hawk/node_modules/cryptiles/LICENSE | 24 - .../hawk/node_modules/cryptiles/Makefile | 11 - .../hawk/node_modules/cryptiles/README.md | 6 - .../hawk/node_modules/cryptiles/index.js | 1 - .../hawk/node_modules/cryptiles/lib/index.js | 68 - .../hawk/node_modules/cryptiles/package.json | 52 - .../hawk/node_modules/cryptiles/test/index.js | 101 - .../hawk/node_modules/hoek/.npmignore | 18 - .../hawk/node_modules/hoek/.travis.yml | 5 - .../hawk/node_modules/hoek/LICENSE | 33 - .../hawk/node_modules/hoek/Makefile | 10 - .../hawk/node_modules/hoek/README.md | 436 - .../hawk/node_modules/hoek/images/hoek.png | Bin 37939 -> 0 bytes .../hawk/node_modules/hoek/index.js | 1 - .../hawk/node_modules/hoek/lib/escape.js | 132 - .../hawk/node_modules/hoek/lib/index.js | 585 - .../hawk/node_modules/hoek/package.json | 53 - .../hawk/node_modules/hoek/test/escaper.js | 86 - .../hawk/node_modules/hoek/test/index.js | 1078 - .../node_modules/hoek/test/modules/test1.js | 1 - .../node_modules/hoek/test/modules/test2.js | 1 - .../node_modules/hoek/test/modules/test3.js | 1 - .../hawk/node_modules/sntp/.npmignore | 18 - .../hawk/node_modules/sntp/.travis.yml | 5 - .../hawk/node_modules/sntp/LICENSE | 24 - .../hawk/node_modules/sntp/Makefile | 11 - .../hawk/node_modules/sntp/README.md | 68 - .../hawk/node_modules/sntp/examples/offset.js | 16 - .../hawk/node_modules/sntp/examples/time.js | 25 - .../hawk/node_modules/sntp/index.js | 1 - .../hawk/node_modules/sntp/lib/index.js | 409 - .../hawk/node_modules/sntp/package.json | 52 - .../hawk/node_modules/sntp/test/index.js | 359 - .../request/node_modules/hawk/package.json | 57 - .../request/node_modules/hawk/test/browser.js | 771 - .../request/node_modules/hawk/test/client.js | 206 - .../request/node_modules/hawk/test/crypto.js | 86 - .../request/node_modules/hawk/test/index.js | 316 - .../request/node_modules/hawk/test/message.js | 246 - .../request/node_modules/hawk/test/readme.js | 98 - .../request/node_modules/hawk/test/server.js | 686 - .../request/node_modules/hawk/test/uri.js | 456 - .../request/node_modules/hawk/test/utils.js | 120 - .../http-signature/.dir-locals.el | 6 - .../node_modules/http-signature/.npmignore | 7 - .../node_modules/http-signature/LICENSE | 18 - .../node_modules/http-signature/README.md | 75 - .../http-signature/http_signing.md | 296 - .../node_modules/http-signature/lib/index.js | 25 - .../node_modules/http-signature/lib/parser.js | 304 - .../node_modules/http-signature/lib/signer.js | 179 - .../node_modules/http-signature/lib/util.js | 249 - .../node_modules/http-signature/lib/verify.js | 42 - .../node_modules/asn1/.npmignore | 2 - .../http-signature/node_modules/asn1/LICENSE | 19 - .../node_modules/asn1/README.md | 50 - .../node_modules/asn1/lib/ber/errors.js | 13 - .../node_modules/asn1/lib/ber/index.js | 27 - .../node_modules/asn1/lib/ber/reader.js | 267 - .../node_modules/asn1/lib/ber/types.js | 36 - .../node_modules/asn1/lib/ber/writer.js | 317 - .../node_modules/asn1/lib/index.js | 20 - .../node_modules/asn1/package.json | 47 - .../node_modules/asn1/tst/ber/reader.test.js | 172 - .../node_modules/asn1/tst/ber/writer.test.js | 296 - .../node_modules/assert-plus/README.md | 126 - .../node_modules/assert-plus/assert.js | 196 - .../node_modules/assert-plus/package.json | 24 - .../node_modules/ctype/CHANGELOG | 71 - .../http-signature/node_modules/ctype/LICENSE | 24 - .../http-signature/node_modules/ctype/README | 82 - .../node_modules/ctype/README.old | 298 - .../http-signature/node_modules/ctype/ctf.js | 245 - .../http-signature/node_modules/ctype/ctio.js | 1485 - .../node_modules/ctype/ctype.js | 944 - .../ctype/man/man3ctype/ctio.3ctype | 241 - .../node_modules/ctype/package.json | 22 - .../node_modules/ctype/tools/jsl.conf | 129 - .../node_modules/ctype/tools/jsstyle | 839 - .../node_modules/ctype/tst/ctf/float.json | 13 - .../node_modules/ctype/tst/ctf/int.json | 13 - .../node_modules/ctype/tst/ctf/psinfo.json | 104 - .../node_modules/ctype/tst/ctf/struct.json | 19 - .../node_modules/ctype/tst/ctf/tst.fail.js | 39 - .../node_modules/ctype/tst/ctf/tst.float.js | 14 - .../node_modules/ctype/tst/ctf/tst.int.js | 14 - .../node_modules/ctype/tst/ctf/tst.psinfo.js | 17 - .../node_modules/ctype/tst/ctf/tst.struct.js | 18 - .../node_modules/ctype/tst/ctf/tst.typedef.js | 15 - .../node_modules/ctype/tst/ctf/typedef.json | 14 - .../ctype/tst/ctio/float/tst.rfloat.js | 767 - .../ctype/tst/ctio/float/tst.wfloat.js | 753 - .../node_modules/ctype/tst/ctio/int/tst.64.js | 638 - .../ctype/tst/ctio/int/tst.rint.js | 101 - .../ctype/tst/ctio/int/tst.wbounds.js | 53 - .../ctype/tst/ctio/int/tst.wint.js | 92 - .../ctype/tst/ctio/uint/tst.64.js | 451 - .../ctype/tst/ctio/uint/tst.roundtrip.js | 81 - .../ctype/tst/ctio/uint/tst.ruint.js | 95 - .../ctype/tst/ctio/uint/tst.wuint.js | 156 - .../ctype/tst/ctype/tst.basicr.js | 50 - .../ctype/tst/ctype/tst.basicw.js | 44 - .../node_modules/ctype/tst/ctype/tst.char.js | 42 - .../ctype/tst/ctype/tst.endian.js | 45 - .../ctype/tst/ctype/tst.oldwrite.js | 28 - .../ctype/tst/ctype/tst.readSize.js | 128 - .../ctype/tst/ctype/tst.structw.js | 28 - .../ctype/tst/ctype/tst.writeStruct.js | 31 - .../node_modules/http-signature/package.json | 40 - .../node_modules/json-stringify-safe/LICENSE | 27 - .../json-stringify-safe/README.md | 49 - .../json-stringify-safe/package.json | 37 - .../json-stringify-safe/stringify.js | 39 - .../node_modules/json-stringify-safe/test.js | 128 - .../request/node_modules/mime/LICENSE | 19 - .../request/node_modules/mime/README.md | 66 - .../request/node_modules/mime/mime.js | 114 - .../request/node_modules/mime/package.json | 36 - .../request/node_modules/mime/test.js | 84 - .../node_modules/mime/types/mime.types | 1588 -- .../node_modules/mime/types/node.types | 77 - .../request/node_modules/node-uuid/.npmignore | 2 - .../request/node_modules/node-uuid/LICENSE.md | 2 - .../request/node_modules/node-uuid/README.md | 207 - .../node-uuid/benchmark/README.md | 53 - .../node-uuid/benchmark/bench.gnu | 174 - .../node_modules/node-uuid/benchmark/bench.sh | 34 - .../node-uuid/benchmark/benchmark-native.c | 34 - .../node-uuid/benchmark/benchmark.js | 84 - .../node_modules/node-uuid/component.json | 18 - .../node_modules/node-uuid/package.json | 39 - .../node_modules/node-uuid/test/compare_v1.js | 63 - .../node_modules/node-uuid/test/test.html | 17 - .../node_modules/node-uuid/test/test.js | 228 - .../request/node_modules/node-uuid/uuid.js | 245 - .../request/node_modules/oauth-sign/LICENSE | 55 - .../request/node_modules/oauth-sign/README.md | 4 - .../request/node_modules/oauth-sign/index.js | 43 - .../node_modules/oauth-sign/package.json | 35 - .../request/node_modules/oauth-sign/test.js | 49 - .../request/node_modules/qs/.gitmodules | 6 - .../request/node_modules/qs/.npmignore | 7 - .../request/node_modules/qs/Readme.md | 58 - .../request/node_modules/qs/index.js | 366 - .../request/node_modules/qs/package.json | 38 - .../node_modules/tough-cookie/.jshintrc | 72 - .../node_modules/tough-cookie/.npmignore | 3 - .../request/node_modules/tough-cookie/LICENSE | 78 - .../node_modules/tough-cookie/README.md | 380 - .../tough-cookie/generate-pubsuffix.js | 230 - .../node_modules/tough-cookie/lib/cookie.js | 947 - .../node_modules/tough-cookie/lib/memstore.js | 102 - .../tough-cookie/lib/pubsuffix.js | 69 - .../node_modules/punycode/LICENSE-GPL.txt | 278 - .../node_modules/punycode/LICENSE-MIT.txt | 20 - .../node_modules/punycode/package.json | 77 - .../node_modules/punycode/punycode.js | 508 - .../node_modules/punycode/punycode.min.js | 2 - .../punycode/vendor/docdown/LICENSE.txt | 20 - .../punycode/vendor/docdown/README.md | 35 - .../punycode/vendor/docdown/doc/README.md | 69 - .../punycode/vendor/docdown/doc/parse.php | 35 - .../punycode/vendor/docdown/docdown.php | 38 - .../vendor/docdown/src/DocDown/Alias.php | 226 - .../vendor/docdown/src/DocDown/Entry.php | 442 - .../vendor/docdown/src/DocDown/Generator.php | 563 - .../node_modules/tough-cookie/package.json | 50 - .../tough-cookie/public-suffix.txt | 5229 ---- .../request/node_modules/tough-cookie/test.js | 1340 - .../request/node_modules/tunnel-agent/LICENSE | 55 - .../node_modules/tunnel-agent/README.md | 4 - .../node_modules/tunnel-agent/index.js | 227 - .../node_modules/tunnel-agent/package.json | 32 - .../node_modules/request/package.json | 61 - .../download/node_modules/request/request.js | 1260 - .../download/node_modules/through2/.jshintrc | 59 - .../download/node_modules/through2/.npmignore | 1 - .../node_modules/through2/.travis.yml | 17 - .../download/node_modules/through2/LICENSE | 39 - .../download/node_modules/through2/README.md | 131 - .../node_modules/readable-stream/.npmignore | 5 - .../node_modules/readable-stream/LICENSE | 27 - .../node_modules/readable-stream/README.md | 768 - .../node_modules/readable-stream/duplex.js | 1 - .../node_modules/readable-stream/float.patch | 68 - .../readable-stream/lib/_stream_duplex.js | 69 - .../lib/_stream_passthrough.js | 41 - .../readable-stream/lib/_stream_readable.js | 927 - .../readable-stream/lib/_stream_transform.js | 205 - .../readable-stream/lib/_stream_writable.js | 371 - .../node_modules/string_decoder/.npmignore | 1 - .../node_modules/string_decoder/LICENSE | 20 - .../node_modules/string_decoder/README.md | 7 - .../string_decoder/build/.npmignore | 1 - .../string_decoder/build/build.js | 94 - .../string_decoder/build/files.js | 36 - .../string_decoder/build/package.json | 12 - .../string_decoder/build/test-replacements.js | 24 - .../node_modules/string_decoder/index.js | 200 - .../node_modules/string_decoder/package.json | 36 - .../string_decoder/test/common.js | 200 - .../test/simple/test-string-decoder-end.js | 75 - .../test/simple/test-string-decoder.js | 163 - .../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 | 60 - .../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 | 76 - .../through2/node_modules/xtend/test.js | 63 - .../node_modules/through2/package.json | 48 - .../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 - .../node_modules/download/package.json | 55 - .../bin-wrapper/node_modules/isbin/.npmignore | 1 - .../node_modules/isbin/.travis.yml | 3 - .../bin-wrapper/node_modules/isbin/History.md | 20 - .../bin-wrapper/node_modules/isbin/Makefile | 6 - .../bin-wrapper/node_modules/isbin/README.md | 59 - .../bin-wrapper/node_modules/isbin/index.js | 1 - .../node_modules/isbin/lib/index.js | 51 - .../isbin/node_modules/async/.gitmodules | 9 - .../isbin/node_modules/async/.npmignore | 4 - .../isbin/node_modules/async/LICENSE | 19 - .../isbin/node_modules/async/Makefile | 25 - .../isbin/node_modules/async/README.md | 1021 - .../isbin/node_modules/async/index.js | 3 - .../isbin/node_modules/async/lib/async.js | 692 - .../isbin/node_modules/async/package.json | 36 - .../node_modules/isbin/package.json | 45 - .../node_modules/isbin/test/isbin.js | 39 - .../node_modules/isbin/test/mocha.opts | 4 - .../node_modules/mout/.editorconfig | 20 - .../bin-wrapper/node_modules/mout/.jshintrc | 69 - .../bin-wrapper/node_modules/mout/.npmignore | 30 - .../bin-wrapper/node_modules/mout/.travis.yml | 13 - .../node_modules/mout/CHANGELOG.md | 93 - .../node_modules/mout/CONTRIBUTING.md | 61 - .../bin-wrapper/node_modules/mout/LICENSE.md | 21 - .../bin-wrapper/node_modules/mout/README.md | 63 - .../bin-wrapper/node_modules/mout/array.js | 46 - .../node_modules/mout/array/append.js | 21 - .../node_modules/mout/array/collect.js | 27 - .../node_modules/mout/array/combine.js | 22 - .../node_modules/mout/array/compact.js | 13 - .../node_modules/mout/array/contains.js | 10 - .../node_modules/mout/array/difference.js | 22 - .../node_modules/mout/array/every.js | 27 - .../node_modules/mout/array/filter.js | 27 - .../node_modules/mout/array/find.js | 13 - .../node_modules/mout/array/findIndex.js | 23 - .../node_modules/mout/array/flatten.js | 43 - .../node_modules/mout/array/forEach.js | 23 - .../node_modules/mout/array/indexOf.js | 28 - .../node_modules/mout/array/insert.js | 15 - .../node_modules/mout/array/intersection.js | 23 - .../node_modules/mout/array/invoke.js | 23 - .../node_modules/mout/array/join.js | 17 - .../node_modules/mout/array/lastIndexOf.js | 28 - .../node_modules/mout/array/map.js | 23 - .../node_modules/mout/array/max.js | 35 - .../node_modules/mout/array/min.js | 35 - .../node_modules/mout/array/pick.js | 14 - .../node_modules/mout/array/pluck.js | 12 - .../node_modules/mout/array/range.js | 27 - .../node_modules/mout/array/reduce.js | 33 - .../node_modules/mout/array/reduceRight.js | 34 - .../node_modules/mout/array/reject.js | 26 - .../node_modules/mout/array/remove.js | 13 - .../node_modules/mout/array/removeAll.js | 15 - .../node_modules/mout/array/shuffle.js | 29 - .../node_modules/mout/array/some.js | 27 - .../node_modules/mout/array/sort.js | 55 - .../node_modules/mout/array/split.js | 35 - .../node_modules/mout/array/toLookup.js | 28 - .../node_modules/mout/array/union.js | 19 - .../node_modules/mout/array/unique.js | 17 - .../node_modules/mout/array/xor.js | 26 - .../node_modules/mout/array/zip.js | 29 - .../node_modules/mout/collection.js | 22 - .../node_modules/mout/collection/contains.js | 9 - .../node_modules/mout/collection/every.js | 9 - .../node_modules/mout/collection/filter.js | 23 - .../node_modules/mout/collection/find.js | 10 - .../node_modules/mout/collection/forEach.js | 9 - .../node_modules/mout/collection/make_.js | 19 - .../node_modules/mout/collection/map.js | 23 - .../node_modules/mout/collection/max.js | 10 - .../node_modules/mout/collection/min.js | 10 - .../node_modules/mout/collection/pluck.js | 14 - .../node_modules/mout/collection/reduce.js | 9 - .../node_modules/mout/collection/reject.js | 16 - .../node_modules/mout/collection/size.js | 19 - .../node_modules/mout/collection/some.js | 9 - .../bin-wrapper/node_modules/mout/date.js | 21 - .../node_modules/mout/date/dayOfTheYear.js | 13 - .../node_modules/mout/date/diff.js | 130 - .../node_modules/mout/date/i18n/en-US.js | 61 - .../node_modules/mout/date/i18n/pt-BR.js | 61 - .../node_modules/mout/date/i18n_.js | 14 - .../node_modules/mout/date/isLeapYear.js | 15 - .../node_modules/mout/date/isSame.js | 16 - .../node_modules/mout/date/parseIso.js | 146 - .../node_modules/mout/date/startOf.js | 54 - .../node_modules/mout/date/strftime.js | 118 - .../node_modules/mout/date/timezoneAbbr.js | 17 - .../node_modules/mout/date/timezoneOffset.js | 16 - .../mout/date/totalDaysInMonth.js | 25 - .../node_modules/mout/date/totalDaysInYear.js | 13 - .../node_modules/mout/date/weekOfTheYear.js | 16 - .../node_modules/mout/doc/array.md | 773 - .../node_modules/mout/doc/collection.md | 233 - .../bin-wrapper/node_modules/mout/doc/date.md | 295 - .../node_modules/mout/doc/function.md | 174 - .../bin-wrapper/node_modules/mout/doc/lang.md | 385 - .../bin-wrapper/node_modules/mout/doc/math.md | 298 - .../node_modules/mout/doc/number.md | 225 - .../node_modules/mout/doc/object.md | 780 - .../node_modules/mout/doc/queryString.md | 115 - .../node_modules/mout/doc/random.md | 218 - .../node_modules/mout/doc/string.md | 594 - .../bin-wrapper/node_modules/mout/doc/time.md | 64 - .../bin-wrapper/node_modules/mout/function.js | 18 - .../node_modules/mout/function/bind.js | 23 - .../node_modules/mout/function/compose.js | 23 - .../node_modules/mout/function/debounce.js | 29 - .../node_modules/mout/function/func.js | 14 - .../mout/function/makeIterator_.js | 34 - .../node_modules/mout/function/partial.js | 19 - .../node_modules/mout/function/prop.js | 14 - .../node_modules/mout/function/series.js | 22 - .../node_modules/mout/function/throttle.js | 32 - .../node_modules/mout/function/timeout.js | 21 - .../bin-wrapper/node_modules/mout/index.js | 24 - .../bin-wrapper/node_modules/mout/lang.js | 36 - .../node_modules/mout/lang/clone.js | 49 - .../node_modules/mout/lang/createObject.js | 18 - .../node_modules/mout/lang/ctorApply.js | 17 - .../node_modules/mout/lang/deepClone.js | 48 - .../node_modules/mout/lang/defaults.js | 17 - .../mout/lang/inheritPrototype.js | 16 - .../bin-wrapper/node_modules/mout/lang/is.js | 23 - .../node_modules/mout/lang/isArguments.js | 15 - .../node_modules/mout/lang/isArray.js | 8 - .../node_modules/mout/lang/isBoolean.js | 8 - .../node_modules/mout/lang/isDate.js | 8 - .../node_modules/mout/lang/isEmpty.js | 24 - .../node_modules/mout/lang/isFinite.js | 21 - .../node_modules/mout/lang/isFunction.js | 8 - .../node_modules/mout/lang/isInteger.js | 12 - .../node_modules/mout/lang/isKind.js | 9 - .../node_modules/mout/lang/isNaN.js | 15 - .../node_modules/mout/lang/isNull.js | 9 - .../node_modules/mout/lang/isNumber.js | 8 - .../node_modules/mout/lang/isObject.js | 8 - .../node_modules/mout/lang/isPlainObject.js | 14 - .../node_modules/mout/lang/isRegExp.js | 8 - .../node_modules/mout/lang/isString.js | 8 - .../node_modules/mout/lang/isUndefined.js | 10 - .../node_modules/mout/lang/isnt.js | 12 - .../node_modules/mout/lang/kindOf.js | 20 - .../node_modules/mout/lang/toArray.js | 31 - .../node_modules/mout/lang/toString.js | 13 - .../bin-wrapper/node_modules/mout/math.js | 19 - .../node_modules/mout/math/ceil.js | 11 - .../node_modules/mout/math/clamp.js | 9 - .../node_modules/mout/math/countSteps.js | 16 - .../node_modules/mout/math/floor.js | 10 - .../node_modules/mout/math/inRange.js | 11 - .../node_modules/mout/math/isNear.js | 9 - .../node_modules/mout/math/lerp.js | 11 - .../node_modules/mout/math/loop.js | 10 - .../bin-wrapper/node_modules/mout/math/map.js | 11 - .../node_modules/mout/math/norm.js | 9 - .../node_modules/mout/math/round.js | 12 - .../bin-wrapper/node_modules/mout/number.js | 21 - .../node_modules/mout/number/MAX_INT.js | 6 - .../node_modules/mout/number/MAX_UINT.js | 6 - .../node_modules/mout/number/MIN_INT.js | 6 - .../node_modules/mout/number/abbreviate.js | 35 - .../mout/number/currencyFormat.js | 26 - .../mout/number/enforcePrecision.js | 13 - .../node_modules/mout/number/pad.js | 12 - .../node_modules/mout/number/rol.js | 10 - .../node_modules/mout/number/ror.js | 10 - .../node_modules/mout/number/sign.js | 15 - .../node_modules/mout/number/toInt.js | 15 - .../node_modules/mout/number/toUInt.js | 13 - .../node_modules/mout/number/toUInt31.js | 13 - .../bin-wrapper/node_modules/mout/object.js | 42 - .../node_modules/mout/object/bindAll.js | 18 - .../node_modules/mout/object/contains.js | 13 - .../node_modules/mout/object/deepEquals.js | 27 - .../node_modules/mout/object/deepFillIn.js | 32 - .../node_modules/mout/object/deepMatches.js | 55 - .../node_modules/mout/object/deepMixIn.js | 34 - .../node_modules/mout/object/equals.js | 36 - .../node_modules/mout/object/every.js | 23 - .../node_modules/mout/object/fillIn.js | 20 - .../node_modules/mout/object/filter.js | 20 - .../node_modules/mout/object/find.js | 21 - .../node_modules/mout/object/forIn.js | 62 - .../node_modules/mout/object/forOwn.js | 19 - .../node_modules/mout/object/functions.js | 18 - .../node_modules/mout/object/get.js | 20 - .../node_modules/mout/object/has.js | 15 - .../node_modules/mout/object/hasOwn.js | 12 - .../node_modules/mout/object/keys.js | 16 - .../node_modules/mout/object/map.js | 18 - .../node_modules/mout/object/matches.js | 20 - .../node_modules/mout/object/max.js | 12 - .../node_modules/mout/object/merge.js | 40 - .../node_modules/mout/object/min.js | 12 - .../node_modules/mout/object/mixIn.js | 28 - .../node_modules/mout/object/namespace.js | 19 - .../node_modules/mout/object/pick.js | 18 - .../node_modules/mout/object/pluck.js | 13 - .../node_modules/mout/object/reduce.js | 29 - .../node_modules/mout/object/reject.js | 16 - .../node_modules/mout/object/set.js | 17 - .../node_modules/mout/object/size.js | 16 - .../node_modules/mout/object/some.js | 21 - .../node_modules/mout/object/unset.js | 23 - .../node_modules/mout/object/values.js | 16 - .../node_modules/mout/package.json | 123 - .../node_modules/mout/queryString.js | 15 - .../node_modules/mout/queryString/contains.js | 12 - .../node_modules/mout/queryString/decode.js | 21 - .../node_modules/mout/queryString/encode.js | 15 - .../node_modules/mout/queryString/getParam.js | 15 - .../node_modules/mout/queryString/getQuery.js | 13 - .../node_modules/mout/queryString/parse.js | 13 - .../node_modules/mout/queryString/setParam.js | 28 - .../bin-wrapper/node_modules/mout/random.js | 16 - .../node_modules/mout/random/choice.js | 15 - .../node_modules/mout/random/guid.js | 24 - .../node_modules/mout/random/rand.js | 15 - .../node_modules/mout/random/randBit.js | 11 - .../node_modules/mout/random/randHex.js | 19 - .../node_modules/mout/random/randInt.js | 18 - .../node_modules/mout/random/randSign.js | 11 - .../node_modules/mout/random/random.js | 18 - .../node_modules/mout/src/array.js | 46 - .../node_modules/mout/src/array/append.js | 21 - .../node_modules/mout/src/array/collect.js | 26 - .../node_modules/mout/src/array/combine.js | 22 - .../node_modules/mout/src/array/compact.js | 13 - .../node_modules/mout/src/array/contains.js | 10 - .../node_modules/mout/src/array/difference.js | 19 - .../node_modules/mout/src/array/every.js | 27 - .../node_modules/mout/src/array/filter.js | 26 - .../node_modules/mout/src/array/find.js | 13 - .../node_modules/mout/src/array/findIndex.js | 23 - .../node_modules/mout/src/array/flatten.js | 42 - .../node_modules/mout/src/array/forEach.js | 23 - .../node_modules/mout/src/array/indexOf.js | 28 - .../node_modules/mout/src/array/insert.js | 14 - .../mout/src/array/intersection.js | 20 - .../node_modules/mout/src/array/invoke.js | 23 - .../node_modules/mout/src/array/join.js | 17 - .../mout/src/array/lastIndexOf.js | 28 - .../node_modules/mout/src/array/map.js | 22 - .../node_modules/mout/src/array/max.js | 34 - .../node_modules/mout/src/array/min.js | 34 - .../node_modules/mout/src/array/pick.js | 14 - .../node_modules/mout/src/array/pluck.js | 12 - .../node_modules/mout/src/array/range.js | 27 - .../node_modules/mout/src/array/reduce.js | 33 - .../mout/src/array/reduceRight.js | 34 - .../node_modules/mout/src/array/reject.js | 25 - .../node_modules/mout/src/array/remove.js | 13 - .../node_modules/mout/src/array/removeAll.js | 15 - .../node_modules/mout/src/array/shuffle.js | 28 - .../node_modules/mout/src/array/some.js | 27 - .../node_modules/mout/src/array/sort.js | 55 - .../node_modules/mout/src/array/split.js | 35 - .../node_modules/mout/src/array/toLookup.js | 28 - .../node_modules/mout/src/array/union.js | 18 - .../node_modules/mout/src/array/unique.js | 16 - .../node_modules/mout/src/array/xor.js | 24 - .../node_modules/mout/src/array/zip.js | 27 - .../node_modules/mout/src/collection.js | 22 - .../mout/src/collection/contains.js | 7 - .../node_modules/mout/src/collection/every.js | 7 - .../mout/src/collection/filter.js | 22 - .../node_modules/mout/src/collection/find.js | 8 - .../mout/src/collection/forEach.js | 7 - .../node_modules/mout/src/collection/make_.js | 19 - .../node_modules/mout/src/collection/map.js | 20 - .../node_modules/mout/src/collection/max.js | 8 - .../node_modules/mout/src/collection/min.js | 8 - .../node_modules/mout/src/collection/pluck.js | 14 - .../mout/src/collection/reduce.js | 7 - .../mout/src/collection/reject.js | 15 - .../node_modules/mout/src/collection/size.js | 18 - .../node_modules/mout/src/collection/some.js | 7 - .../bin-wrapper/node_modules/mout/src/date.js | 21 - .../mout/src/date/dayOfTheYear.js | 13 - .../node_modules/mout/src/date/diff.js | 128 - .../node_modules/mout/src/date/i18n/en-US.js | 61 - .../node_modules/mout/src/date/i18n/pt-BR.js | 61 - .../node_modules/mout/src/date/i18n_.js | 13 - .../node_modules/mout/src/date/isLeapYear.js | 15 - .../node_modules/mout/src/date/isSame.js | 16 - .../node_modules/mout/src/date/parseIso.js | 146 - .../node_modules/mout/src/date/startOf.js | 54 - .../node_modules/mout/src/date/strftime.js | 113 - .../mout/src/date/timezoneAbbr.js | 17 - .../mout/src/date/timezoneOffset.js | 16 - .../mout/src/date/totalDaysInMonth.js | 24 - .../mout/src/date/totalDaysInYear.js | 13 - .../mout/src/date/weekOfTheYear.js | 16 - .../node_modules/mout/src/function.js | 18 - .../node_modules/mout/src/function/bind.js | 23 - .../node_modules/mout/src/function/compose.js | 23 - .../mout/src/function/debounce.js | 29 - .../node_modules/mout/src/function/func.js | 14 - .../mout/src/function/makeIterator_.js | 33 - .../node_modules/mout/src/function/partial.js | 19 - .../node_modules/mout/src/function/prop.js | 14 - .../node_modules/mout/src/function/series.js | 22 - .../mout/src/function/throttle.js | 32 - .../node_modules/mout/src/function/timeout.js | 21 - .../node_modules/mout/src/index.js | 24 - .../bin-wrapper/node_modules/mout/src/lang.js | 36 - .../node_modules/mout/src/lang/clone.js | 47 - .../mout/src/lang/createObject.js | 18 - .../node_modules/mout/src/lang/ctorApply.js | 17 - .../node_modules/mout/src/lang/deepClone.js | 45 - .../node_modules/mout/src/lang/defaults.js | 16 - .../mout/src/lang/inheritPrototype.js | 16 - .../node_modules/mout/src/lang/is.js | 23 - .../node_modules/mout/src/lang/isArguments.js | 15 - .../node_modules/mout/src/lang/isArray.js | 8 - .../node_modules/mout/src/lang/isBoolean.js | 8 - .../node_modules/mout/src/lang/isDate.js | 8 - .../node_modules/mout/src/lang/isEmpty.js | 23 - .../node_modules/mout/src/lang/isFinite.js | 21 - .../node_modules/mout/src/lang/isFunction.js | 8 - .../node_modules/mout/src/lang/isInteger.js | 12 - .../node_modules/mout/src/lang/isKind.js | 9 - .../node_modules/mout/src/lang/isNaN.js | 15 - .../node_modules/mout/src/lang/isNull.js | 9 - .../node_modules/mout/src/lang/isNumber.js | 8 - .../node_modules/mout/src/lang/isObject.js | 8 - .../mout/src/lang/isPlainObject.js | 14 - .../node_modules/mout/src/lang/isRegExp.js | 8 - .../node_modules/mout/src/lang/isString.js | 8 - .../node_modules/mout/src/lang/isUndefined.js | 10 - .../node_modules/mout/src/lang/isnt.js | 12 - .../node_modules/mout/src/lang/kindOf.js | 20 - .../node_modules/mout/src/lang/toArray.js | 31 - .../node_modules/mout/src/lang/toString.js | 13 - .../bin-wrapper/node_modules/mout/src/math.js | 19 - .../node_modules/mout/src/math/ceil.js | 11 - .../node_modules/mout/src/math/clamp.js | 9 - .../node_modules/mout/src/math/countSteps.js | 16 - .../node_modules/mout/src/math/floor.js | 10 - .../node_modules/mout/src/math/inRange.js | 11 - .../node_modules/mout/src/math/isNear.js | 9 - .../node_modules/mout/src/math/lerp.js | 11 - .../node_modules/mout/src/math/loop.js | 10 - .../node_modules/mout/src/math/map.js | 10 - .../node_modules/mout/src/math/norm.js | 9 - .../node_modules/mout/src/math/round.js | 12 - .../node_modules/mout/src/number.js | 21 - .../node_modules/mout/src/number/MAX_INT.js | 6 - .../node_modules/mout/src/number/MAX_UINT.js | 6 - .../node_modules/mout/src/number/MIN_INT.js | 6 - .../mout/src/number/abbreviate.js | 35 - .../mout/src/number/currencyFormat.js | 26 - .../mout/src/number/enforcePrecision.js | 13 - .../node_modules/mout/src/number/pad.js | 12 - .../node_modules/mout/src/number/rol.js | 10 - .../node_modules/mout/src/number/ror.js | 10 - .../node_modules/mout/src/number/sign.js | 15 - .../node_modules/mout/src/number/toInt.js | 15 - .../node_modules/mout/src/number/toUInt.js | 13 - .../node_modules/mout/src/number/toUInt31.js | 13 - .../node_modules/mout/src/object.js | 42 - .../node_modules/mout/src/object/bindAll.js | 16 - .../node_modules/mout/src/object/contains.js | 13 - .../mout/src/object/deepEquals.js | 26 - .../mout/src/object/deepFillIn.js | 31 - .../mout/src/object/deepMatches.js | 54 - .../node_modules/mout/src/object/deepMixIn.js | 33 - .../node_modules/mout/src/object/equals.js | 34 - .../node_modules/mout/src/object/every.js | 22 - .../node_modules/mout/src/object/fillIn.js | 19 - .../node_modules/mout/src/object/filter.js | 19 - .../node_modules/mout/src/object/find.js | 20 - .../node_modules/mout/src/object/forIn.js | 62 - .../node_modules/mout/src/object/forOwn.js | 18 - .../node_modules/mout/src/object/functions.js | 18 - .../node_modules/mout/src/object/get.js | 20 - .../node_modules/mout/src/object/has.js | 15 - .../node_modules/mout/src/object/hasOwn.js | 12 - .../node_modules/mout/src/object/keys.js | 16 - .../node_modules/mout/src/object/map.js | 17 - .../node_modules/mout/src/object/matches.js | 20 - .../node_modules/mout/src/object/max.js | 11 - .../node_modules/mout/src/object/merge.js | 38 - .../node_modules/mout/src/object/min.js | 11 - .../node_modules/mout/src/object/mixIn.js | 28 - .../node_modules/mout/src/object/namespace.js | 19 - .../node_modules/mout/src/object/pick.js | 18 - .../node_modules/mout/src/object/pluck.js | 12 - .../node_modules/mout/src/object/reduce.js | 28 - .../node_modules/mout/src/object/reject.js | 15 - .../node_modules/mout/src/object/set.js | 17 - .../node_modules/mout/src/object/size.js | 16 - .../node_modules/mout/src/object/some.js | 20 - .../node_modules/mout/src/object/unset.js | 23 - .../node_modules/mout/src/object/values.js | 16 - .../node_modules/mout/src/queryString.js | 15 - .../mout/src/queryString/contains.js | 12 - .../mout/src/queryString/decode.js | 20 - .../mout/src/queryString/encode.js | 15 - .../mout/src/queryString/getParam.js | 14 - .../mout/src/queryString/getQuery.js | 13 - .../mout/src/queryString/parse.js | 12 - .../mout/src/queryString/setParam.js | 28 - .../node_modules/mout/src/random.js | 16 - .../node_modules/mout/src/random/choice.js | 14 - .../node_modules/mout/src/random/guid.js | 23 - .../node_modules/mout/src/random/rand.js | 13 - .../node_modules/mout/src/random/randBit.js | 11 - .../node_modules/mout/src/random/randHex.js | 19 - .../node_modules/mout/src/random/randInt.js | 16 - .../node_modules/mout/src/random/randSign.js | 11 - .../node_modules/mout/src/random/random.js | 18 - .../node_modules/mout/src/string.js | 45 - .../mout/src/string/WHITE_SPACES.js | 12 - .../node_modules/mout/src/string/camelCase.js | 16 - .../node_modules/mout/src/string/contains.js | 14 - .../node_modules/mout/src/string/crop.js | 11 - .../node_modules/mout/src/string/endsWith.js | 13 - .../mout/src/string/escapeHtml.js | 18 - .../mout/src/string/escapeRegExp.js | 15 - .../mout/src/string/escapeUnicode.js | 21 - .../node_modules/mout/src/string/hyphenate.js | 12 - .../mout/src/string/interpolate.js | 18 - .../node_modules/mout/src/string/lowerCase.js | 11 - .../node_modules/mout/src/string/lpad.js | 16 - .../node_modules/mout/src/string/ltrim.js | 33 - .../node_modules/mout/src/string/makePath.js | 13 - .../mout/src/string/normalizeLineBreaks.js | 18 - .../mout/src/string/pascalCase.js | 11 - .../mout/src/string/properCase.js | 11 - .../mout/src/string/removeNonASCII.js | 14 - .../mout/src/string/removeNonWord.js | 11 - .../node_modules/mout/src/string/repeat.js | 13 - .../node_modules/mout/src/string/replace.js | 32 - .../mout/src/string/replaceAccents.js | 36 - .../node_modules/mout/src/string/rpad.js | 14 - .../node_modules/mout/src/string/rtrim.js | 32 - .../mout/src/string/sentenceCase.js | 13 - .../node_modules/mout/src/string/slugify.js | 21 - .../mout/src/string/startsWith.js | 13 - .../mout/src/string/stripHtmlTags.js | 11 - .../node_modules/mout/src/string/trim.js | 12 - .../node_modules/mout/src/string/truncate.js | 20 - .../node_modules/mout/src/string/typecast.js | 29 - .../mout/src/string/unCamelCase.js | 23 - .../mout/src/string/underscore.js | 11 - .../mout/src/string/unescapeHtml.js | 18 - .../mout/src/string/unescapeUnicode.js | 16 - .../mout/src/string/unhyphenate.js | 10 - .../node_modules/mout/src/string/upperCase.js | 10 - .../bin-wrapper/node_modules/mout/src/time.js | 12 - .../node_modules/mout/src/time/convert.js | 41 - .../node_modules/mout/src/time/now.js | 12 - .../node_modules/mout/src/time/parseMs.js | 17 - .../mout/src/time/toTimeString.js | 23 - .../bin-wrapper/node_modules/mout/string.js | 45 - .../node_modules/mout/string/WHITE_SPACES.js | 12 - .../node_modules/mout/string/camelCase.js | 20 - .../node_modules/mout/string/contains.js | 14 - .../node_modules/mout/string/crop.js | 12 - .../node_modules/mout/string/endsWith.js | 13 - .../node_modules/mout/string/escapeHtml.js | 18 - .../node_modules/mout/string/escapeRegExp.js | 15 - .../node_modules/mout/string/escapeUnicode.js | 21 - .../node_modules/mout/string/hyphenate.js | 14 - .../node_modules/mout/string/interpolate.js | 18 - .../node_modules/mout/string/lowerCase.js | 11 - .../node_modules/mout/string/lpad.js | 17 - .../node_modules/mout/string/ltrim.js | 34 - .../node_modules/mout/string/makePath.js | 13 - .../mout/string/normalizeLineBreaks.js | 18 - .../node_modules/mout/string/pascalCase.js | 13 - .../node_modules/mout/string/properCase.js | 13 - .../mout/string/removeNonASCII.js | 14 - .../node_modules/mout/string/removeNonWord.js | 11 - .../node_modules/mout/string/repeat.js | 13 - .../node_modules/mout/string/replace.js | 33 - .../mout/string/replaceAccents.js | 36 - .../node_modules/mout/string/rpad.js | 15 - .../node_modules/mout/string/rtrim.js | 33 - .../node_modules/mout/string/sentenceCase.js | 15 - .../node_modules/mout/string/slugify.js | 24 - .../node_modules/mout/string/startsWith.js | 13 - .../node_modules/mout/string/stripHtmlTags.js | 11 - .../node_modules/mout/string/trim.js | 15 - .../node_modules/mout/string/truncate.js | 21 - .../node_modules/mout/string/typecast.js | 29 - .../node_modules/mout/string/unCamelCase.js | 23 - .../node_modules/mout/string/underscore.js | 13 - .../node_modules/mout/string/unescapeHtml.js | 18 - .../mout/string/unescapeUnicode.js | 16 - .../node_modules/mout/string/unhyphenate.js | 10 - .../node_modules/mout/string/upperCase.js | 10 - .../bin-wrapper/node_modules/mout/time.js | 12 - .../node_modules/mout/time/convert.js | 41 - .../bin-wrapper/node_modules/mout/time/now.js | 12 - .../node_modules/mout/time/parseMs.js | 17 - .../node_modules/mout/time/toTimeString.js | 24 - .../node_modules/progress/.npmignore | 4 - .../node_modules/progress/History.md | 42 - .../node_modules/progress/Makefile | 5 - .../node_modules/progress/Readme.md | 117 - .../node_modules/progress/index.js | 1 - .../progress/lib/node-progress.js | 183 - .../node_modules/progress/package.json | 34 - .../bin-wrapper/node_modules/rimraf/AUTHORS | 6 - .../bin-wrapper/node_modules/rimraf/LICENSE | 23 - .../bin-wrapper/node_modules/rimraf/README.md | 30 - .../bin-wrapper/node_modules/rimraf/bin.js | 33 - .../node_modules/rimraf/package.json | 60 - .../bin-wrapper/node_modules/rimraf/rimraf.js | 178 - .../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 - .../bin-wrapper/node_modules/which/LICENSE | 23 - .../bin-wrapper/node_modules/which/README.md | 5 - .../bin-wrapper/node_modules/which/bin/which | 14 - .../node_modules/which/package.json | 35 - .../bin-wrapper/node_modules/which/which.js | 104 - .../node_modules/bin-wrapper/package.json | 54 - .../gifsicle/node_modules/chalk/chalk.js | 62 - .../node_modules/ansi-styles/ansi-styles.js | 29 - .../node_modules/ansi-styles/package.json | 62 - .../chalk/node_modules/ansi-styles/readme.md | 65 - .../chalk/node_modules/has-color/has-color.js | 24 - .../chalk/node_modules/has-color/package.json | 59 - .../chalk/node_modules/has-color/readme.md | 28 - .../gifsicle/node_modules/chalk/package.json | 65 - .../gifsicle/node_modules/chalk/readme.md | 130 - .../node_modules/gifsicle/package.json | 57 - .../image-min/node_modules/gifsicle/readme.md | 50 - .../node_modules/gifsicle/vendor/gifsicle | Bin 170964 -> 0 bytes .../node_modules/jpegtran-bin/bin/jpegtran.js | 8 - .../node_modules/jpegtran-bin/lib/check.js | 32 - .../node_modules/jpegtran-bin/lib/jpegtran.js | 56 - .../node_modules/bin-wrapper/README.md | 67 - .../node_modules/bin-wrapper/bin-wrapper.js | 222 - .../bin-wrapper/node_modules/.bin/rimraf | 1 - .../bin-wrapper/node_modules/.bin/which | 1 - .../node_modules/download/README.md | 84 - .../node_modules/download/download.js | 100 - .../node_modules/decompress/README.md | 71 - .../node_modules/decompress/decompress.js | 168 - .../adm-zip/.idea/scopes/scope_settings.xml | 5 - .../node_modules/adm-zip/MIT-LICENSE.txt | 21 - .../decompress/node_modules/adm-zip/README.md | 64 - .../node_modules/adm-zip/adm-zip.js | 404 - .../adm-zip/headers/entryHeader.js | 261 - .../node_modules/adm-zip/headers/index.js | 2 - .../adm-zip/headers/mainHeader.js | 80 - .../node_modules/adm-zip/methods/deflater.js | 1578 -- .../node_modules/adm-zip/methods/index.js | 2 - .../node_modules/adm-zip/methods/inflater.js | 448 - .../node_modules/adm-zip/package.json | 43 - .../adm-zip/test/assets/attributes_test.zip | Bin 4189 -> 0 bytes .../attributes_test/New folder/hidden.txt | 17 - .../New folder/hidden_readonly.txt | 17 - .../attributes_test/New folder/readonly.txt | 17 - .../attributes_test/New folder/somefile.txt | 17 - .../attributes_test/asd/New Text Document.txt | 0 .../assets/attributes_test/blank file.txt | 0 .../node_modules/adm-zip/test/assets/fast.zip | Bin 4194 -> 0 bytes .../adm-zip/test/assets/fastest.zip | Bin 4194 -> 0 bytes .../adm-zip/test/assets/linux_arc.zip | Bin 415 -> 0 bytes .../adm-zip/test/assets/maximum.zip | Bin 4086 -> 0 bytes .../adm-zip/test/assets/normal.zip | Bin 4170 -> 0 bytes .../adm-zip/test/assets/store.zip | Bin 5878 -> 0 bytes .../adm-zip/test/assets/ultra.zip | Bin 4086 -> 0 bytes .../node_modules/adm-zip/test/index.js | 5 - .../node_modules/adm-zip/util/constants.js | 84 - .../node_modules/adm-zip/util/errors.js | 35 - .../node_modules/adm-zip/util/fattr.js | 84 - .../node_modules/adm-zip/util/index.js | 4 - .../node_modules/adm-zip/util/utils.js | 145 - .../node_modules/adm-zip/zipEntry.js | 224 - .../node_modules/adm-zip/zipFile.js | 311 - .../node_modules/stream-combiner/.npmignore | 3 - .../node_modules/stream-combiner/.travis.yml | 4 - .../node_modules/stream-combiner/LICENSE | 22 - .../node_modules/stream-combiner/README.md | 29 - .../node_modules/stream-combiner/index.js | 39 - .../node_modules/duplexer/.npmignore | 3 - .../node_modules/duplexer/.travis.yml | 6 - .../node_modules/duplexer/LICENCE | 19 - .../node_modules/duplexer/README.md | 47 - .../node_modules/duplexer/index.js | 87 - .../node_modules/duplexer/package.json | 61 - .../node_modules/duplexer/test/index.js | 31 - .../node_modules/stream-combiner/package.json | 37 - .../stream-combiner/test/index.js | 52 - .../decompress/node_modules/tar/.npmignore | 5 - .../decompress/node_modules/tar/.travis.yml | 3 - .../decompress/node_modules/tar/LICENCE | 25 - .../decompress/node_modules/tar/README.md | 46 - .../node_modules/tar/examples/extracter.js | 11 - .../node_modules/tar/examples/reader.js | 36 - .../node_modules/tar/lib/buffer-entry.js | 30 - .../node_modules/tar/lib/entry-writer.js | 169 - .../decompress/node_modules/tar/lib/entry.js | 213 - .../tar/lib/extended-header-writer.js | 191 - .../node_modules/tar/lib/extended-header.js | 140 - .../node_modules/tar/lib/extract.js | 78 - .../tar/lib/global-header-writer.js | 14 - .../decompress/node_modules/tar/lib/header.js | 385 - .../decompress/node_modules/tar/lib/pack.js | 231 - .../decompress/node_modules/tar/lib/parse.js | 270 - .../tar/node_modules/block-stream/LICENCE | 25 - .../tar/node_modules/block-stream/README.md | 14 - .../block-stream/bench/block-stream-pause.js | 70 - .../block-stream/bench/block-stream.js | 68 - .../block-stream/bench/dropper-pause.js | 70 - .../block-stream/bench/dropper.js | 68 - .../node_modules/block-stream/block-stream.js | 209 - .../node_modules/block-stream/package.json | 40 - .../node_modules/block-stream/test/basic.js | 27 - .../block-stream/test/nopad-thorough.js | 68 - .../node_modules/block-stream/test/nopad.js | 57 - .../block-stream/test/pause-resume.js | 73 - .../block-stream/test/thorough.js | 68 - .../block-stream/test/two-stream.js | 59 - .../tar/node_modules/fstream/.npmignore | 5 - .../tar/node_modules/fstream/.travis.yml | 3 - .../tar/node_modules/fstream/LICENSE | 27 - .../tar/node_modules/fstream/README.md | 76 - .../fstream/examples/filter-pipe.js | 131 - .../tar/node_modules/fstream/examples/pipe.js | 115 - .../node_modules/fstream/examples/reader.js | 54 - .../fstream/examples/symlink-write.js | 24 - .../tar/node_modules/fstream/fstream.js | 31 - .../tar/node_modules/fstream/lib/abstract.js | 85 - .../tar/node_modules/fstream/lib/collect.js | 67 - .../node_modules/fstream/lib/dir-reader.js | 251 - .../node_modules/fstream/lib/dir-writer.js | 171 - .../node_modules/fstream/lib/file-reader.js | 147 - .../node_modules/fstream/lib/file-writer.js | 100 - .../tar/node_modules/fstream/lib/get-type.js | 32 - .../node_modules/fstream/lib/link-reader.js | 54 - .../node_modules/fstream/lib/link-writer.js | 95 - .../node_modules/fstream/lib/proxy-reader.js | 93 - .../node_modules/fstream/lib/proxy-writer.js | 109 - .../tar/node_modules/fstream/lib/reader.js | 260 - .../node_modules/fstream/lib/socket-reader.js | 38 - .../tar/node_modules/fstream/lib/writer.js | 389 - .../tar/node_modules/fstream/package.json | 43 - .../tar/node_modules/inherits/LICENSE | 16 - .../tar/node_modules/inherits/README.md | 42 - .../tar/node_modules/inherits/inherits.js | 1 - .../node_modules/inherits/inherits_browser.js | 23 - .../tar/node_modules/inherits/package.json | 37 - .../tar/node_modules/inherits/test.js | 25 - .../decompress/node_modules/tar/package.json | 40 - .../decompress/node_modules/tar/tar.js | 173 - .../tar/test/00-setup-fixtures.js | 53 - .../node_modules/tar/test/extract.js | 358 - .../node_modules/tar/test/fixtures.tgz | Bin 19205 -> 0 bytes .../node_modules/tar/test/header.js | 183 - .../tar/test/pack-no-proprietary.js | 854 - .../decompress/node_modules/tar/test/pack.js | 897 - .../decompress/node_modules/tar/test/parse.js | 359 - .../node_modules/tar/test/zz-cleanup.js | 20 - .../decompress/node_modules/tempfile/index.js | 8 - .../tempfile/node_modules/uuid/.npmignore | 2 - .../tempfile/node_modules/uuid/.travis.yml | 5 - .../tempfile/node_modules/uuid/LICENSE.md | 2 - .../tempfile/node_modules/uuid/README.md | 204 - .../node_modules/uuid/benchmark/README.md | 53 - .../node_modules/uuid/benchmark/bench.gnu | 174 - .../node_modules/uuid/benchmark/bench.sh | 34 - .../uuid/benchmark/benchmark-native.c | 34 - .../node_modules/uuid/benchmark/benchmark.js | 84 - .../node_modules/uuid/misc/compare.js | 62 - .../tempfile/node_modules/uuid/misc/perf.js | 102 - .../tempfile/node_modules/uuid/package.json | 56 - .../tempfile/node_modules/uuid/rng-browser.js | 31 - .../tempfile/node_modules/uuid/rng.js | 4 - .../node_modules/uuid/test/mocha.opts | 1 - .../tempfile/node_modules/uuid/test/test.js | 105 - .../tempfile/node_modules/uuid/uuid.js | 187 - .../node_modules/tempfile/package.json | 52 - .../node_modules/tempfile/readme.md | 36 - .../node_modules/decompress/package.json | 55 - .../node_modules/each-async/each-async.js | 72 - .../node_modules/each-async/package.json | 54 - .../node_modules/each-async/readme.md | 78 - .../download/node_modules/request/.npmignore | 2 - .../download/node_modules/request/.travis.yml | 12 - .../download/node_modules/request/LICENSE | 55 - .../download/node_modules/request/README.md | 366 - .../node_modules/request/dns-request.js | 7 - .../download/node_modules/request/index.js | 157 - .../download/node_modules/request/lib/copy.js | 8 - .../node_modules/request/lib/debug.js | 7 - .../node_modules/request/lib/getSafe.js | 34 - .../node_modules/request/lib/optional.js | 5 - .../request/node_modules/aws-sign2/LICENSE | 55 - .../request/node_modules/aws-sign2/README.md | 4 - .../request/node_modules/aws-sign2/index.js | 202 - .../node_modules/aws-sign2/package.json | 32 - .../node_modules/forever-agent/LICENSE | 55 - .../node_modules/forever-agent/README.md | 4 - .../node_modules/forever-agent/index.js | 119 - .../node_modules/forever-agent/package.json | 32 - .../request/node_modules/form-data/License | 19 - .../request/node_modules/form-data/Readme.md | 163 - .../node_modules/form-data/lib/form_data.js | 325 - .../form-data/node_modules/async/LICENSE | 19 - .../form-data/node_modules/async/README.md | 1425 - .../node_modules/async/component.json | 11 - .../form-data/node_modules/async/lib/async.js | 958 - .../form-data/node_modules/async/package.json | 47 - .../node_modules/combined-stream/.npmignore | 3 - .../node_modules/combined-stream/License | 19 - .../node_modules/combined-stream/Makefile | 7 - .../node_modules/combined-stream/Readme.md | 132 - .../combined-stream/lib/combined_stream.js | 185 - .../node_modules/delayed-stream/.npmignore | 2 - .../node_modules/delayed-stream/License | 19 - .../node_modules/delayed-stream/Makefile | 7 - .../node_modules/delayed-stream/Readme.md | 154 - .../delayed-stream/lib/delayed_stream.js | 99 - .../node_modules/delayed-stream/package.json | 35 - .../delayed-stream/test/common.js | 6 - .../integration/test-delayed-http-upload.js | 38 - .../test-delayed-stream-auto-pause.js | 21 - .../integration/test-delayed-stream-pause.js | 14 - .../test/integration/test-delayed-stream.js | 48 - .../integration/test-handle-source-errors.js | 15 - .../test/integration/test-max-data-size.js | 18 - .../test/integration/test-pipe-resumes.js | 13 - .../test/integration/test-proxy-readable.js | 13 - .../node_modules/delayed-stream/test/run.js | 7 - .../node_modules/combined-stream/package.json | 36 - .../combined-stream/test/common.js | 23 - .../combined-stream/test/fixture/file1.txt | 256 - .../combined-stream/test/fixture/file2.txt | 256 - .../test/integration/test-callback-streams.js | 27 - .../test/integration/test-data-size.js | 34 - ...delayed-streams-and-buffers-and-strings.js | 38 - .../test/integration/test-delayed-streams.js | 35 - .../test/integration/test-empty-string.js | 39 - .../test/integration/test-is-stream-like.js | 17 - .../test/integration/test-max-data-size.js | 24 - .../test/integration/test-unpaused-streams.js | 30 - .../node_modules/combined-stream/test/run.js | 7 - .../node_modules/form-data/package.json | 50 - .../request/node_modules/hawk/.npmignore | 18 - .../request/node_modules/hawk/.travis.yml | 5 - .../request/node_modules/hawk/LICENSE | 24 - .../request/node_modules/hawk/Makefile | 10 - .../request/node_modules/hawk/README.md | 627 - .../node_modules/hawk/example/usage.js | 78 - .../request/node_modules/hawk/images/hawk.png | Bin 6945 -> 0 bytes .../request/node_modules/hawk/images/logo.png | Bin 71732 -> 0 bytes .../request/node_modules/hawk/index.js | 1 - .../request/node_modules/hawk/lib/browser.js | 485 - .../request/node_modules/hawk/lib/client.js | 367 - .../request/node_modules/hawk/lib/crypto.js | 111 - .../request/node_modules/hawk/lib/index.js | 15 - .../request/node_modules/hawk/lib/server.js | 524 - .../request/node_modules/hawk/lib/utils.js | 183 - .../hawk/node_modules/boom/.npmignore | 18 - .../hawk/node_modules/boom/.travis.yml | 5 - .../hawk/node_modules/boom/LICENSE | 24 - .../hawk/node_modules/boom/Makefile | 11 - .../hawk/node_modules/boom/README.md | 6 - .../hawk/node_modules/boom/images/boom.png | Bin 29479 -> 0 bytes .../hawk/node_modules/boom/index.js | 1 - .../hawk/node_modules/boom/lib/index.js | 207 - .../hawk/node_modules/boom/package.json | 51 - .../hawk/node_modules/boom/test/index.js | 245 - .../hawk/node_modules/cryptiles/.npmignore | 18 - .../hawk/node_modules/cryptiles/.travis.yml | 5 - .../hawk/node_modules/cryptiles/LICENSE | 24 - .../hawk/node_modules/cryptiles/Makefile | 11 - .../hawk/node_modules/cryptiles/README.md | 6 - .../hawk/node_modules/cryptiles/index.js | 1 - .../hawk/node_modules/cryptiles/lib/index.js | 68 - .../hawk/node_modules/cryptiles/package.json | 52 - .../hawk/node_modules/cryptiles/test/index.js | 101 - .../hawk/node_modules/hoek/.npmignore | 18 - .../hawk/node_modules/hoek/.travis.yml | 5 - .../hawk/node_modules/hoek/LICENSE | 33 - .../hawk/node_modules/hoek/Makefile | 10 - .../hawk/node_modules/hoek/README.md | 436 - .../hawk/node_modules/hoek/images/hoek.png | Bin 37939 -> 0 bytes .../hawk/node_modules/hoek/index.js | 1 - .../hawk/node_modules/hoek/lib/escape.js | 132 - .../hawk/node_modules/hoek/lib/index.js | 585 - .../hawk/node_modules/hoek/package.json | 53 - .../hawk/node_modules/hoek/test/escaper.js | 86 - .../hawk/node_modules/hoek/test/index.js | 1078 - .../node_modules/hoek/test/modules/test1.js | 1 - .../node_modules/hoek/test/modules/test2.js | 1 - .../node_modules/hoek/test/modules/test3.js | 1 - .../hawk/node_modules/sntp/.npmignore | 18 - .../hawk/node_modules/sntp/.travis.yml | 5 - .../hawk/node_modules/sntp/LICENSE | 24 - .../hawk/node_modules/sntp/Makefile | 11 - .../hawk/node_modules/sntp/README.md | 68 - .../hawk/node_modules/sntp/examples/offset.js | 16 - .../hawk/node_modules/sntp/examples/time.js | 25 - .../hawk/node_modules/sntp/index.js | 1 - .../hawk/node_modules/sntp/lib/index.js | 409 - .../hawk/node_modules/sntp/package.json | 52 - .../hawk/node_modules/sntp/test/index.js | 359 - .../request/node_modules/hawk/package.json | 57 - .../request/node_modules/hawk/test/browser.js | 771 - .../request/node_modules/hawk/test/client.js | 206 - .../request/node_modules/hawk/test/crypto.js | 86 - .../request/node_modules/hawk/test/index.js | 316 - .../request/node_modules/hawk/test/message.js | 246 - .../request/node_modules/hawk/test/readme.js | 98 - .../request/node_modules/hawk/test/server.js | 686 - .../request/node_modules/hawk/test/uri.js | 456 - .../request/node_modules/hawk/test/utils.js | 120 - .../http-signature/.dir-locals.el | 6 - .../node_modules/http-signature/.npmignore | 7 - .../node_modules/http-signature/LICENSE | 18 - .../node_modules/http-signature/README.md | 75 - .../http-signature/http_signing.md | 296 - .../node_modules/http-signature/lib/index.js | 25 - .../node_modules/http-signature/lib/parser.js | 304 - .../node_modules/http-signature/lib/signer.js | 179 - .../node_modules/http-signature/lib/util.js | 249 - .../node_modules/http-signature/lib/verify.js | 42 - .../node_modules/asn1/.npmignore | 2 - .../http-signature/node_modules/asn1/LICENSE | 19 - .../node_modules/asn1/README.md | 50 - .../node_modules/asn1/lib/ber/errors.js | 13 - .../node_modules/asn1/lib/ber/index.js | 27 - .../node_modules/asn1/lib/ber/reader.js | 267 - .../node_modules/asn1/lib/ber/types.js | 36 - .../node_modules/asn1/lib/ber/writer.js | 317 - .../node_modules/asn1/lib/index.js | 20 - .../node_modules/asn1/package.json | 47 - .../node_modules/asn1/tst/ber/reader.test.js | 172 - .../node_modules/asn1/tst/ber/writer.test.js | 296 - .../node_modules/assert-plus/README.md | 126 - .../node_modules/assert-plus/assert.js | 196 - .../node_modules/assert-plus/package.json | 24 - .../node_modules/ctype/CHANGELOG | 71 - .../http-signature/node_modules/ctype/LICENSE | 24 - .../http-signature/node_modules/ctype/README | 82 - .../node_modules/ctype/README.old | 298 - .../http-signature/node_modules/ctype/ctf.js | 245 - .../http-signature/node_modules/ctype/ctio.js | 1485 - .../node_modules/ctype/ctype.js | 944 - .../ctype/man/man3ctype/ctio.3ctype | 241 - .../node_modules/ctype/package.json | 22 - .../node_modules/ctype/tools/jsl.conf | 129 - .../node_modules/ctype/tools/jsstyle | 839 - .../node_modules/ctype/tst/ctf/float.json | 13 - .../node_modules/ctype/tst/ctf/int.json | 13 - .../node_modules/ctype/tst/ctf/psinfo.json | 104 - .../node_modules/ctype/tst/ctf/struct.json | 19 - .../node_modules/ctype/tst/ctf/tst.fail.js | 39 - .../node_modules/ctype/tst/ctf/tst.float.js | 14 - .../node_modules/ctype/tst/ctf/tst.int.js | 14 - .../node_modules/ctype/tst/ctf/tst.psinfo.js | 17 - .../node_modules/ctype/tst/ctf/tst.struct.js | 18 - .../node_modules/ctype/tst/ctf/tst.typedef.js | 15 - .../node_modules/ctype/tst/ctf/typedef.json | 14 - .../ctype/tst/ctio/float/tst.rfloat.js | 767 - .../ctype/tst/ctio/float/tst.wfloat.js | 753 - .../node_modules/ctype/tst/ctio/int/tst.64.js | 638 - .../ctype/tst/ctio/int/tst.rint.js | 101 - .../ctype/tst/ctio/int/tst.wbounds.js | 53 - .../ctype/tst/ctio/int/tst.wint.js | 92 - .../ctype/tst/ctio/uint/tst.64.js | 451 - .../ctype/tst/ctio/uint/tst.roundtrip.js | 81 - .../ctype/tst/ctio/uint/tst.ruint.js | 95 - .../ctype/tst/ctio/uint/tst.wuint.js | 156 - .../ctype/tst/ctype/tst.basicr.js | 50 - .../ctype/tst/ctype/tst.basicw.js | 44 - .../node_modules/ctype/tst/ctype/tst.char.js | 42 - .../ctype/tst/ctype/tst.endian.js | 45 - .../ctype/tst/ctype/tst.oldwrite.js | 28 - .../ctype/tst/ctype/tst.readSize.js | 128 - .../ctype/tst/ctype/tst.structw.js | 28 - .../ctype/tst/ctype/tst.writeStruct.js | 31 - .../node_modules/http-signature/package.json | 40 - .../node_modules/json-stringify-safe/LICENSE | 27 - .../json-stringify-safe/README.md | 49 - .../json-stringify-safe/package.json | 37 - .../json-stringify-safe/stringify.js | 39 - .../node_modules/json-stringify-safe/test.js | 128 - .../request/node_modules/mime/LICENSE | 19 - .../request/node_modules/mime/README.md | 66 - .../request/node_modules/mime/mime.js | 114 - .../request/node_modules/mime/package.json | 36 - .../request/node_modules/mime/test.js | 84 - .../node_modules/mime/types/mime.types | 1588 -- .../node_modules/mime/types/node.types | 77 - .../request/node_modules/node-uuid/.npmignore | 2 - .../request/node_modules/node-uuid/LICENSE.md | 2 - .../request/node_modules/node-uuid/README.md | 207 - .../node-uuid/benchmark/README.md | 53 - .../node-uuid/benchmark/bench.gnu | 174 - .../node_modules/node-uuid/benchmark/bench.sh | 34 - .../node-uuid/benchmark/benchmark-native.c | 34 - .../node-uuid/benchmark/benchmark.js | 84 - .../node_modules/node-uuid/component.json | 18 - .../node_modules/node-uuid/package.json | 39 - .../node_modules/node-uuid/test/compare_v1.js | 63 - .../node_modules/node-uuid/test/test.html | 17 - .../node_modules/node-uuid/test/test.js | 228 - .../request/node_modules/node-uuid/uuid.js | 245 - .../request/node_modules/oauth-sign/LICENSE | 55 - .../request/node_modules/oauth-sign/README.md | 4 - .../request/node_modules/oauth-sign/index.js | 43 - .../node_modules/oauth-sign/package.json | 35 - .../request/node_modules/oauth-sign/test.js | 49 - .../request/node_modules/qs/.gitmodules | 6 - .../request/node_modules/qs/.npmignore | 7 - .../request/node_modules/qs/Readme.md | 58 - .../request/node_modules/qs/index.js | 366 - .../request/node_modules/qs/package.json | 38 - .../node_modules/tough-cookie/.jshintrc | 72 - .../node_modules/tough-cookie/.npmignore | 3 - .../request/node_modules/tough-cookie/LICENSE | 78 - .../node_modules/tough-cookie/README.md | 380 - .../tough-cookie/generate-pubsuffix.js | 230 - .../node_modules/tough-cookie/lib/cookie.js | 947 - .../node_modules/tough-cookie/lib/memstore.js | 102 - .../tough-cookie/lib/pubsuffix.js | 69 - .../node_modules/punycode/LICENSE-GPL.txt | 278 - .../node_modules/punycode/LICENSE-MIT.txt | 20 - .../node_modules/punycode/package.json | 77 - .../node_modules/punycode/punycode.js | 508 - .../node_modules/punycode/punycode.min.js | 2 - .../punycode/vendor/docdown/LICENSE.txt | 20 - .../punycode/vendor/docdown/README.md | 35 - .../punycode/vendor/docdown/doc/README.md | 69 - .../punycode/vendor/docdown/doc/parse.php | 35 - .../punycode/vendor/docdown/docdown.php | 38 - .../vendor/docdown/src/DocDown/Alias.php | 226 - .../vendor/docdown/src/DocDown/Entry.php | 442 - .../vendor/docdown/src/DocDown/Generator.php | 563 - .../node_modules/tough-cookie/package.json | 50 - .../tough-cookie/public-suffix.txt | 5229 ---- .../request/node_modules/tough-cookie/test.js | 1340 - .../request/node_modules/tunnel-agent/LICENSE | 55 - .../node_modules/tunnel-agent/README.md | 4 - .../node_modules/tunnel-agent/index.js | 227 - .../node_modules/tunnel-agent/package.json | 32 - .../node_modules/request/package.json | 61 - .../download/node_modules/request/request.js | 1260 - .../download/node_modules/through2/.jshintrc | 59 - .../download/node_modules/through2/.npmignore | 1 - .../node_modules/through2/.travis.yml | 17 - .../download/node_modules/through2/LICENSE | 39 - .../download/node_modules/through2/README.md | 131 - .../node_modules/readable-stream/.npmignore | 5 - .../node_modules/readable-stream/LICENSE | 27 - .../node_modules/readable-stream/README.md | 768 - .../node_modules/readable-stream/duplex.js | 1 - .../node_modules/readable-stream/float.patch | 68 - .../readable-stream/lib/_stream_duplex.js | 69 - .../lib/_stream_passthrough.js | 41 - .../readable-stream/lib/_stream_readable.js | 927 - .../readable-stream/lib/_stream_transform.js | 205 - .../readable-stream/lib/_stream_writable.js | 371 - .../node_modules/string_decoder/.npmignore | 1 - .../node_modules/string_decoder/LICENSE | 20 - .../node_modules/string_decoder/README.md | 7 - .../string_decoder/build/.npmignore | 1 - .../string_decoder/build/build.js | 94 - .../string_decoder/build/files.js | 36 - .../string_decoder/build/package.json | 12 - .../string_decoder/build/test-replacements.js | 24 - .../node_modules/string_decoder/index.js | 200 - .../node_modules/string_decoder/package.json | 36 - .../string_decoder/test/common.js | 200 - .../test/simple/test-string-decoder-end.js | 75 - .../test/simple/test-string-decoder.js | 163 - .../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 | 60 - .../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 | 76 - .../through2/node_modules/xtend/test.js | 63 - .../node_modules/through2/package.json | 48 - .../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 - .../node_modules/download/package.json | 55 - .../bin-wrapper/node_modules/isbin/.npmignore | 1 - .../node_modules/isbin/.travis.yml | 3 - .../bin-wrapper/node_modules/isbin/History.md | 20 - .../bin-wrapper/node_modules/isbin/Makefile | 6 - .../bin-wrapper/node_modules/isbin/README.md | 59 - .../bin-wrapper/node_modules/isbin/index.js | 1 - .../node_modules/isbin/lib/index.js | 51 - .../isbin/node_modules/async/.gitmodules | 9 - .../isbin/node_modules/async/.npmignore | 4 - .../isbin/node_modules/async/LICENSE | 19 - .../isbin/node_modules/async/Makefile | 25 - .../isbin/node_modules/async/README.md | 1021 - .../isbin/node_modules/async/index.js | 3 - .../isbin/node_modules/async/lib/async.js | 692 - .../isbin/node_modules/async/package.json | 36 - .../node_modules/isbin/package.json | 45 - .../node_modules/isbin/test/isbin.js | 39 - .../node_modules/isbin/test/mocha.opts | 4 - .../node_modules/mout/.editorconfig | 20 - .../bin-wrapper/node_modules/mout/.jshintrc | 69 - .../bin-wrapper/node_modules/mout/.npmignore | 30 - .../bin-wrapper/node_modules/mout/.travis.yml | 13 - .../node_modules/mout/CHANGELOG.md | 93 - .../node_modules/mout/CONTRIBUTING.md | 61 - .../bin-wrapper/node_modules/mout/LICENSE.md | 21 - .../bin-wrapper/node_modules/mout/README.md | 63 - .../bin-wrapper/node_modules/mout/array.js | 46 - .../node_modules/mout/array/append.js | 21 - .../node_modules/mout/array/collect.js | 27 - .../node_modules/mout/array/combine.js | 22 - .../node_modules/mout/array/compact.js | 13 - .../node_modules/mout/array/contains.js | 10 - .../node_modules/mout/array/difference.js | 22 - .../node_modules/mout/array/every.js | 27 - .../node_modules/mout/array/filter.js | 27 - .../node_modules/mout/array/find.js | 13 - .../node_modules/mout/array/findIndex.js | 23 - .../node_modules/mout/array/flatten.js | 43 - .../node_modules/mout/array/forEach.js | 23 - .../node_modules/mout/array/indexOf.js | 28 - .../node_modules/mout/array/insert.js | 15 - .../node_modules/mout/array/intersection.js | 23 - .../node_modules/mout/array/invoke.js | 23 - .../node_modules/mout/array/join.js | 17 - .../node_modules/mout/array/lastIndexOf.js | 28 - .../node_modules/mout/array/map.js | 23 - .../node_modules/mout/array/max.js | 35 - .../node_modules/mout/array/min.js | 35 - .../node_modules/mout/array/pick.js | 14 - .../node_modules/mout/array/pluck.js | 12 - .../node_modules/mout/array/range.js | 27 - .../node_modules/mout/array/reduce.js | 33 - .../node_modules/mout/array/reduceRight.js | 34 - .../node_modules/mout/array/reject.js | 26 - .../node_modules/mout/array/remove.js | 13 - .../node_modules/mout/array/removeAll.js | 15 - .../node_modules/mout/array/shuffle.js | 29 - .../node_modules/mout/array/some.js | 27 - .../node_modules/mout/array/sort.js | 55 - .../node_modules/mout/array/split.js | 35 - .../node_modules/mout/array/toLookup.js | 28 - .../node_modules/mout/array/union.js | 19 - .../node_modules/mout/array/unique.js | 17 - .../node_modules/mout/array/xor.js | 26 - .../node_modules/mout/array/zip.js | 29 - .../node_modules/mout/collection.js | 22 - .../node_modules/mout/collection/contains.js | 9 - .../node_modules/mout/collection/every.js | 9 - .../node_modules/mout/collection/filter.js | 23 - .../node_modules/mout/collection/find.js | 10 - .../node_modules/mout/collection/forEach.js | 9 - .../node_modules/mout/collection/make_.js | 19 - .../node_modules/mout/collection/map.js | 23 - .../node_modules/mout/collection/max.js | 10 - .../node_modules/mout/collection/min.js | 10 - .../node_modules/mout/collection/pluck.js | 14 - .../node_modules/mout/collection/reduce.js | 9 - .../node_modules/mout/collection/reject.js | 16 - .../node_modules/mout/collection/size.js | 19 - .../node_modules/mout/collection/some.js | 9 - .../bin-wrapper/node_modules/mout/date.js | 21 - .../node_modules/mout/date/dayOfTheYear.js | 13 - .../node_modules/mout/date/diff.js | 130 - .../node_modules/mout/date/i18n/en-US.js | 61 - .../node_modules/mout/date/i18n/pt-BR.js | 61 - .../node_modules/mout/date/i18n_.js | 14 - .../node_modules/mout/date/isLeapYear.js | 15 - .../node_modules/mout/date/isSame.js | 16 - .../node_modules/mout/date/parseIso.js | 146 - .../node_modules/mout/date/startOf.js | 54 - .../node_modules/mout/date/strftime.js | 118 - .../node_modules/mout/date/timezoneAbbr.js | 17 - .../node_modules/mout/date/timezoneOffset.js | 16 - .../mout/date/totalDaysInMonth.js | 25 - .../node_modules/mout/date/totalDaysInYear.js | 13 - .../node_modules/mout/date/weekOfTheYear.js | 16 - .../node_modules/mout/doc/array.md | 773 - .../node_modules/mout/doc/collection.md | 233 - .../bin-wrapper/node_modules/mout/doc/date.md | 295 - .../node_modules/mout/doc/function.md | 174 - .../bin-wrapper/node_modules/mout/doc/lang.md | 385 - .../bin-wrapper/node_modules/mout/doc/math.md | 298 - .../node_modules/mout/doc/number.md | 225 - .../node_modules/mout/doc/object.md | 780 - .../node_modules/mout/doc/queryString.md | 115 - .../node_modules/mout/doc/random.md | 218 - .../node_modules/mout/doc/string.md | 594 - .../bin-wrapper/node_modules/mout/doc/time.md | 64 - .../bin-wrapper/node_modules/mout/function.js | 18 - .../node_modules/mout/function/bind.js | 23 - .../node_modules/mout/function/compose.js | 23 - .../node_modules/mout/function/debounce.js | 29 - .../node_modules/mout/function/func.js | 14 - .../mout/function/makeIterator_.js | 34 - .../node_modules/mout/function/partial.js | 19 - .../node_modules/mout/function/prop.js | 14 - .../node_modules/mout/function/series.js | 22 - .../node_modules/mout/function/throttle.js | 32 - .../node_modules/mout/function/timeout.js | 21 - .../bin-wrapper/node_modules/mout/index.js | 24 - .../bin-wrapper/node_modules/mout/lang.js | 36 - .../node_modules/mout/lang/clone.js | 49 - .../node_modules/mout/lang/createObject.js | 18 - .../node_modules/mout/lang/ctorApply.js | 17 - .../node_modules/mout/lang/deepClone.js | 48 - .../node_modules/mout/lang/defaults.js | 17 - .../mout/lang/inheritPrototype.js | 16 - .../bin-wrapper/node_modules/mout/lang/is.js | 23 - .../node_modules/mout/lang/isArguments.js | 15 - .../node_modules/mout/lang/isArray.js | 8 - .../node_modules/mout/lang/isBoolean.js | 8 - .../node_modules/mout/lang/isDate.js | 8 - .../node_modules/mout/lang/isEmpty.js | 24 - .../node_modules/mout/lang/isFinite.js | 21 - .../node_modules/mout/lang/isFunction.js | 8 - .../node_modules/mout/lang/isInteger.js | 12 - .../node_modules/mout/lang/isKind.js | 9 - .../node_modules/mout/lang/isNaN.js | 15 - .../node_modules/mout/lang/isNull.js | 9 - .../node_modules/mout/lang/isNumber.js | 8 - .../node_modules/mout/lang/isObject.js | 8 - .../node_modules/mout/lang/isPlainObject.js | 14 - .../node_modules/mout/lang/isRegExp.js | 8 - .../node_modules/mout/lang/isString.js | 8 - .../node_modules/mout/lang/isUndefined.js | 10 - .../node_modules/mout/lang/isnt.js | 12 - .../node_modules/mout/lang/kindOf.js | 20 - .../node_modules/mout/lang/toArray.js | 31 - .../node_modules/mout/lang/toString.js | 13 - .../bin-wrapper/node_modules/mout/math.js | 19 - .../node_modules/mout/math/ceil.js | 11 - .../node_modules/mout/math/clamp.js | 9 - .../node_modules/mout/math/countSteps.js | 16 - .../node_modules/mout/math/floor.js | 10 - .../node_modules/mout/math/inRange.js | 11 - .../node_modules/mout/math/isNear.js | 9 - .../node_modules/mout/math/lerp.js | 11 - .../node_modules/mout/math/loop.js | 10 - .../bin-wrapper/node_modules/mout/math/map.js | 11 - .../node_modules/mout/math/norm.js | 9 - .../node_modules/mout/math/round.js | 12 - .../bin-wrapper/node_modules/mout/number.js | 21 - .../node_modules/mout/number/MAX_INT.js | 6 - .../node_modules/mout/number/MAX_UINT.js | 6 - .../node_modules/mout/number/MIN_INT.js | 6 - .../node_modules/mout/number/abbreviate.js | 35 - .../mout/number/currencyFormat.js | 26 - .../mout/number/enforcePrecision.js | 13 - .../node_modules/mout/number/pad.js | 12 - .../node_modules/mout/number/rol.js | 10 - .../node_modules/mout/number/ror.js | 10 - .../node_modules/mout/number/sign.js | 15 - .../node_modules/mout/number/toInt.js | 15 - .../node_modules/mout/number/toUInt.js | 13 - .../node_modules/mout/number/toUInt31.js | 13 - .../bin-wrapper/node_modules/mout/object.js | 42 - .../node_modules/mout/object/bindAll.js | 18 - .../node_modules/mout/object/contains.js | 13 - .../node_modules/mout/object/deepEquals.js | 27 - .../node_modules/mout/object/deepFillIn.js | 32 - .../node_modules/mout/object/deepMatches.js | 55 - .../node_modules/mout/object/deepMixIn.js | 34 - .../node_modules/mout/object/equals.js | 36 - .../node_modules/mout/object/every.js | 23 - .../node_modules/mout/object/fillIn.js | 20 - .../node_modules/mout/object/filter.js | 20 - .../node_modules/mout/object/find.js | 21 - .../node_modules/mout/object/forIn.js | 62 - .../node_modules/mout/object/forOwn.js | 19 - .../node_modules/mout/object/functions.js | 18 - .../node_modules/mout/object/get.js | 20 - .../node_modules/mout/object/has.js | 15 - .../node_modules/mout/object/hasOwn.js | 12 - .../node_modules/mout/object/keys.js | 16 - .../node_modules/mout/object/map.js | 18 - .../node_modules/mout/object/matches.js | 20 - .../node_modules/mout/object/max.js | 12 - .../node_modules/mout/object/merge.js | 40 - .../node_modules/mout/object/min.js | 12 - .../node_modules/mout/object/mixIn.js | 28 - .../node_modules/mout/object/namespace.js | 19 - .../node_modules/mout/object/pick.js | 18 - .../node_modules/mout/object/pluck.js | 13 - .../node_modules/mout/object/reduce.js | 29 - .../node_modules/mout/object/reject.js | 16 - .../node_modules/mout/object/set.js | 17 - .../node_modules/mout/object/size.js | 16 - .../node_modules/mout/object/some.js | 21 - .../node_modules/mout/object/unset.js | 23 - .../node_modules/mout/object/values.js | 16 - .../node_modules/mout/package.json | 123 - .../node_modules/mout/queryString.js | 15 - .../node_modules/mout/queryString/contains.js | 12 - .../node_modules/mout/queryString/decode.js | 21 - .../node_modules/mout/queryString/encode.js | 15 - .../node_modules/mout/queryString/getParam.js | 15 - .../node_modules/mout/queryString/getQuery.js | 13 - .../node_modules/mout/queryString/parse.js | 13 - .../node_modules/mout/queryString/setParam.js | 28 - .../bin-wrapper/node_modules/mout/random.js | 16 - .../node_modules/mout/random/choice.js | 15 - .../node_modules/mout/random/guid.js | 24 - .../node_modules/mout/random/rand.js | 15 - .../node_modules/mout/random/randBit.js | 11 - .../node_modules/mout/random/randHex.js | 19 - .../node_modules/mout/random/randInt.js | 18 - .../node_modules/mout/random/randSign.js | 11 - .../node_modules/mout/random/random.js | 18 - .../node_modules/mout/src/array.js | 46 - .../node_modules/mout/src/array/append.js | 21 - .../node_modules/mout/src/array/collect.js | 26 - .../node_modules/mout/src/array/combine.js | 22 - .../node_modules/mout/src/array/compact.js | 13 - .../node_modules/mout/src/array/contains.js | 10 - .../node_modules/mout/src/array/difference.js | 19 - .../node_modules/mout/src/array/every.js | 27 - .../node_modules/mout/src/array/filter.js | 26 - .../node_modules/mout/src/array/find.js | 13 - .../node_modules/mout/src/array/findIndex.js | 23 - .../node_modules/mout/src/array/flatten.js | 42 - .../node_modules/mout/src/array/forEach.js | 23 - .../node_modules/mout/src/array/indexOf.js | 28 - .../node_modules/mout/src/array/insert.js | 14 - .../mout/src/array/intersection.js | 20 - .../node_modules/mout/src/array/invoke.js | 23 - .../node_modules/mout/src/array/join.js | 17 - .../mout/src/array/lastIndexOf.js | 28 - .../node_modules/mout/src/array/map.js | 22 - .../node_modules/mout/src/array/max.js | 34 - .../node_modules/mout/src/array/min.js | 34 - .../node_modules/mout/src/array/pick.js | 14 - .../node_modules/mout/src/array/pluck.js | 12 - .../node_modules/mout/src/array/range.js | 27 - .../node_modules/mout/src/array/reduce.js | 33 - .../mout/src/array/reduceRight.js | 34 - .../node_modules/mout/src/array/reject.js | 25 - .../node_modules/mout/src/array/remove.js | 13 - .../node_modules/mout/src/array/removeAll.js | 15 - .../node_modules/mout/src/array/shuffle.js | 28 - .../node_modules/mout/src/array/some.js | 27 - .../node_modules/mout/src/array/sort.js | 55 - .../node_modules/mout/src/array/split.js | 35 - .../node_modules/mout/src/array/toLookup.js | 28 - .../node_modules/mout/src/array/union.js | 18 - .../node_modules/mout/src/array/unique.js | 16 - .../node_modules/mout/src/array/xor.js | 24 - .../node_modules/mout/src/array/zip.js | 27 - .../node_modules/mout/src/collection.js | 22 - .../mout/src/collection/contains.js | 7 - .../node_modules/mout/src/collection/every.js | 7 - .../mout/src/collection/filter.js | 22 - .../node_modules/mout/src/collection/find.js | 8 - .../mout/src/collection/forEach.js | 7 - .../node_modules/mout/src/collection/make_.js | 19 - .../node_modules/mout/src/collection/map.js | 20 - .../node_modules/mout/src/collection/max.js | 8 - .../node_modules/mout/src/collection/min.js | 8 - .../node_modules/mout/src/collection/pluck.js | 14 - .../mout/src/collection/reduce.js | 7 - .../mout/src/collection/reject.js | 15 - .../node_modules/mout/src/collection/size.js | 18 - .../node_modules/mout/src/collection/some.js | 7 - .../bin-wrapper/node_modules/mout/src/date.js | 21 - .../mout/src/date/dayOfTheYear.js | 13 - .../node_modules/mout/src/date/diff.js | 128 - .../node_modules/mout/src/date/i18n/en-US.js | 61 - .../node_modules/mout/src/date/i18n/pt-BR.js | 61 - .../node_modules/mout/src/date/i18n_.js | 13 - .../node_modules/mout/src/date/isLeapYear.js | 15 - .../node_modules/mout/src/date/isSame.js | 16 - .../node_modules/mout/src/date/parseIso.js | 146 - .../node_modules/mout/src/date/startOf.js | 54 - .../node_modules/mout/src/date/strftime.js | 113 - .../mout/src/date/timezoneAbbr.js | 17 - .../mout/src/date/timezoneOffset.js | 16 - .../mout/src/date/totalDaysInMonth.js | 24 - .../mout/src/date/totalDaysInYear.js | 13 - .../mout/src/date/weekOfTheYear.js | 16 - .../node_modules/mout/src/function.js | 18 - .../node_modules/mout/src/function/bind.js | 23 - .../node_modules/mout/src/function/compose.js | 23 - .../mout/src/function/debounce.js | 29 - .../node_modules/mout/src/function/func.js | 14 - .../mout/src/function/makeIterator_.js | 33 - .../node_modules/mout/src/function/partial.js | 19 - .../node_modules/mout/src/function/prop.js | 14 - .../node_modules/mout/src/function/series.js | 22 - .../mout/src/function/throttle.js | 32 - .../node_modules/mout/src/function/timeout.js | 21 - .../node_modules/mout/src/index.js | 24 - .../bin-wrapper/node_modules/mout/src/lang.js | 36 - .../node_modules/mout/src/lang/clone.js | 47 - .../mout/src/lang/createObject.js | 18 - .../node_modules/mout/src/lang/ctorApply.js | 17 - .../node_modules/mout/src/lang/deepClone.js | 45 - .../node_modules/mout/src/lang/defaults.js | 16 - .../mout/src/lang/inheritPrototype.js | 16 - .../node_modules/mout/src/lang/is.js | 23 - .../node_modules/mout/src/lang/isArguments.js | 15 - .../node_modules/mout/src/lang/isArray.js | 8 - .../node_modules/mout/src/lang/isBoolean.js | 8 - .../node_modules/mout/src/lang/isDate.js | 8 - .../node_modules/mout/src/lang/isEmpty.js | 23 - .../node_modules/mout/src/lang/isFinite.js | 21 - .../node_modules/mout/src/lang/isFunction.js | 8 - .../node_modules/mout/src/lang/isInteger.js | 12 - .../node_modules/mout/src/lang/isKind.js | 9 - .../node_modules/mout/src/lang/isNaN.js | 15 - .../node_modules/mout/src/lang/isNull.js | 9 - .../node_modules/mout/src/lang/isNumber.js | 8 - .../node_modules/mout/src/lang/isObject.js | 8 - .../mout/src/lang/isPlainObject.js | 14 - .../node_modules/mout/src/lang/isRegExp.js | 8 - .../node_modules/mout/src/lang/isString.js | 8 - .../node_modules/mout/src/lang/isUndefined.js | 10 - .../node_modules/mout/src/lang/isnt.js | 12 - .../node_modules/mout/src/lang/kindOf.js | 20 - .../node_modules/mout/src/lang/toArray.js | 31 - .../node_modules/mout/src/lang/toString.js | 13 - .../bin-wrapper/node_modules/mout/src/math.js | 19 - .../node_modules/mout/src/math/ceil.js | 11 - .../node_modules/mout/src/math/clamp.js | 9 - .../node_modules/mout/src/math/countSteps.js | 16 - .../node_modules/mout/src/math/floor.js | 10 - .../node_modules/mout/src/math/inRange.js | 11 - .../node_modules/mout/src/math/isNear.js | 9 - .../node_modules/mout/src/math/lerp.js | 11 - .../node_modules/mout/src/math/loop.js | 10 - .../node_modules/mout/src/math/map.js | 10 - .../node_modules/mout/src/math/norm.js | 9 - .../node_modules/mout/src/math/round.js | 12 - .../node_modules/mout/src/number.js | 21 - .../node_modules/mout/src/number/MAX_INT.js | 6 - .../node_modules/mout/src/number/MAX_UINT.js | 6 - .../node_modules/mout/src/number/MIN_INT.js | 6 - .../mout/src/number/abbreviate.js | 35 - .../mout/src/number/currencyFormat.js | 26 - .../mout/src/number/enforcePrecision.js | 13 - .../node_modules/mout/src/number/pad.js | 12 - .../node_modules/mout/src/number/rol.js | 10 - .../node_modules/mout/src/number/ror.js | 10 - .../node_modules/mout/src/number/sign.js | 15 - .../node_modules/mout/src/number/toInt.js | 15 - .../node_modules/mout/src/number/toUInt.js | 13 - .../node_modules/mout/src/number/toUInt31.js | 13 - .../node_modules/mout/src/object.js | 42 - .../node_modules/mout/src/object/bindAll.js | 16 - .../node_modules/mout/src/object/contains.js | 13 - .../mout/src/object/deepEquals.js | 26 - .../mout/src/object/deepFillIn.js | 31 - .../mout/src/object/deepMatches.js | 54 - .../node_modules/mout/src/object/deepMixIn.js | 33 - .../node_modules/mout/src/object/equals.js | 34 - .../node_modules/mout/src/object/every.js | 22 - .../node_modules/mout/src/object/fillIn.js | 19 - .../node_modules/mout/src/object/filter.js | 19 - .../node_modules/mout/src/object/find.js | 20 - .../node_modules/mout/src/object/forIn.js | 62 - .../node_modules/mout/src/object/forOwn.js | 18 - .../node_modules/mout/src/object/functions.js | 18 - .../node_modules/mout/src/object/get.js | 20 - .../node_modules/mout/src/object/has.js | 15 - .../node_modules/mout/src/object/hasOwn.js | 12 - .../node_modules/mout/src/object/keys.js | 16 - .../node_modules/mout/src/object/map.js | 17 - .../node_modules/mout/src/object/matches.js | 20 - .../node_modules/mout/src/object/max.js | 11 - .../node_modules/mout/src/object/merge.js | 38 - .../node_modules/mout/src/object/min.js | 11 - .../node_modules/mout/src/object/mixIn.js | 28 - .../node_modules/mout/src/object/namespace.js | 19 - .../node_modules/mout/src/object/pick.js | 18 - .../node_modules/mout/src/object/pluck.js | 12 - .../node_modules/mout/src/object/reduce.js | 28 - .../node_modules/mout/src/object/reject.js | 15 - .../node_modules/mout/src/object/set.js | 17 - .../node_modules/mout/src/object/size.js | 16 - .../node_modules/mout/src/object/some.js | 20 - .../node_modules/mout/src/object/unset.js | 23 - .../node_modules/mout/src/object/values.js | 16 - .../node_modules/mout/src/queryString.js | 15 - .../mout/src/queryString/contains.js | 12 - .../mout/src/queryString/decode.js | 20 - .../mout/src/queryString/encode.js | 15 - .../mout/src/queryString/getParam.js | 14 - .../mout/src/queryString/getQuery.js | 13 - .../mout/src/queryString/parse.js | 12 - .../mout/src/queryString/setParam.js | 28 - .../node_modules/mout/src/random.js | 16 - .../node_modules/mout/src/random/choice.js | 14 - .../node_modules/mout/src/random/guid.js | 23 - .../node_modules/mout/src/random/rand.js | 13 - .../node_modules/mout/src/random/randBit.js | 11 - .../node_modules/mout/src/random/randHex.js | 19 - .../node_modules/mout/src/random/randInt.js | 16 - .../node_modules/mout/src/random/randSign.js | 11 - .../node_modules/mout/src/random/random.js | 18 - .../node_modules/mout/src/string.js | 45 - .../mout/src/string/WHITE_SPACES.js | 12 - .../node_modules/mout/src/string/camelCase.js | 16 - .../node_modules/mout/src/string/contains.js | 14 - .../node_modules/mout/src/string/crop.js | 11 - .../node_modules/mout/src/string/endsWith.js | 13 - .../mout/src/string/escapeHtml.js | 18 - .../mout/src/string/escapeRegExp.js | 15 - .../mout/src/string/escapeUnicode.js | 21 - .../node_modules/mout/src/string/hyphenate.js | 12 - .../mout/src/string/interpolate.js | 18 - .../node_modules/mout/src/string/lowerCase.js | 11 - .../node_modules/mout/src/string/lpad.js | 16 - .../node_modules/mout/src/string/ltrim.js | 33 - .../node_modules/mout/src/string/makePath.js | 13 - .../mout/src/string/normalizeLineBreaks.js | 18 - .../mout/src/string/pascalCase.js | 11 - .../mout/src/string/properCase.js | 11 - .../mout/src/string/removeNonASCII.js | 14 - .../mout/src/string/removeNonWord.js | 11 - .../node_modules/mout/src/string/repeat.js | 13 - .../node_modules/mout/src/string/replace.js | 32 - .../mout/src/string/replaceAccents.js | 36 - .../node_modules/mout/src/string/rpad.js | 14 - .../node_modules/mout/src/string/rtrim.js | 32 - .../mout/src/string/sentenceCase.js | 13 - .../node_modules/mout/src/string/slugify.js | 21 - .../mout/src/string/startsWith.js | 13 - .../mout/src/string/stripHtmlTags.js | 11 - .../node_modules/mout/src/string/trim.js | 12 - .../node_modules/mout/src/string/truncate.js | 20 - .../node_modules/mout/src/string/typecast.js | 29 - .../mout/src/string/unCamelCase.js | 23 - .../mout/src/string/underscore.js | 11 - .../mout/src/string/unescapeHtml.js | 18 - .../mout/src/string/unescapeUnicode.js | 16 - .../mout/src/string/unhyphenate.js | 10 - .../node_modules/mout/src/string/upperCase.js | 10 - .../bin-wrapper/node_modules/mout/src/time.js | 12 - .../node_modules/mout/src/time/convert.js | 41 - .../node_modules/mout/src/time/now.js | 12 - .../node_modules/mout/src/time/parseMs.js | 17 - .../mout/src/time/toTimeString.js | 23 - .../bin-wrapper/node_modules/mout/string.js | 45 - .../node_modules/mout/string/WHITE_SPACES.js | 12 - .../node_modules/mout/string/camelCase.js | 20 - .../node_modules/mout/string/contains.js | 14 - .../node_modules/mout/string/crop.js | 12 - .../node_modules/mout/string/endsWith.js | 13 - .../node_modules/mout/string/escapeHtml.js | 18 - .../node_modules/mout/string/escapeRegExp.js | 15 - .../node_modules/mout/string/escapeUnicode.js | 21 - .../node_modules/mout/string/hyphenate.js | 14 - .../node_modules/mout/string/interpolate.js | 18 - .../node_modules/mout/string/lowerCase.js | 11 - .../node_modules/mout/string/lpad.js | 17 - .../node_modules/mout/string/ltrim.js | 34 - .../node_modules/mout/string/makePath.js | 13 - .../mout/string/normalizeLineBreaks.js | 18 - .../node_modules/mout/string/pascalCase.js | 13 - .../node_modules/mout/string/properCase.js | 13 - .../mout/string/removeNonASCII.js | 14 - .../node_modules/mout/string/removeNonWord.js | 11 - .../node_modules/mout/string/repeat.js | 13 - .../node_modules/mout/string/replace.js | 33 - .../mout/string/replaceAccents.js | 36 - .../node_modules/mout/string/rpad.js | 15 - .../node_modules/mout/string/rtrim.js | 33 - .../node_modules/mout/string/sentenceCase.js | 15 - .../node_modules/mout/string/slugify.js | 24 - .../node_modules/mout/string/startsWith.js | 13 - .../node_modules/mout/string/stripHtmlTags.js | 11 - .../node_modules/mout/string/trim.js | 15 - .../node_modules/mout/string/truncate.js | 21 - .../node_modules/mout/string/typecast.js | 29 - .../node_modules/mout/string/unCamelCase.js | 23 - .../node_modules/mout/string/underscore.js | 13 - .../node_modules/mout/string/unescapeHtml.js | 18 - .../mout/string/unescapeUnicode.js | 16 - .../node_modules/mout/string/unhyphenate.js | 10 - .../node_modules/mout/string/upperCase.js | 10 - .../bin-wrapper/node_modules/mout/time.js | 12 - .../node_modules/mout/time/convert.js | 41 - .../bin-wrapper/node_modules/mout/time/now.js | 12 - .../node_modules/mout/time/parseMs.js | 17 - .../node_modules/mout/time/toTimeString.js | 24 - .../node_modules/progress/.npmignore | 4 - .../node_modules/progress/History.md | 42 - .../node_modules/progress/Makefile | 5 - .../node_modules/progress/Readme.md | 117 - .../node_modules/progress/index.js | 1 - .../progress/lib/node-progress.js | 183 - .../node_modules/progress/package.json | 34 - .../bin-wrapper/node_modules/rimraf/AUTHORS | 6 - .../bin-wrapper/node_modules/rimraf/LICENSE | 23 - .../bin-wrapper/node_modules/rimraf/README.md | 30 - .../bin-wrapper/node_modules/rimraf/bin.js | 33 - .../node_modules/rimraf/package.json | 60 - .../bin-wrapper/node_modules/rimraf/rimraf.js | 178 - .../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 - .../bin-wrapper/node_modules/which/LICENSE | 23 - .../bin-wrapper/node_modules/which/README.md | 5 - .../bin-wrapper/node_modules/which/bin/which | 14 - .../node_modules/which/package.json | 35 - .../bin-wrapper/node_modules/which/which.js | 104 - .../node_modules/bin-wrapper/package.json | 54 - .../jpegtran-bin/node_modules/chalk/chalk.js | 62 - .../node_modules/ansi-styles/ansi-styles.js | 29 - .../node_modules/ansi-styles/package.json | 62 - .../chalk/node_modules/ansi-styles/readme.md | 65 - .../chalk/node_modules/has-color/has-color.js | 24 - .../chalk/node_modules/has-color/package.json | 59 - .../chalk/node_modules/has-color/readme.md | 28 - .../node_modules/chalk/package.json | 65 - .../jpegtran-bin/node_modules/chalk/readme.md | 130 - .../node_modules/jpegtran-bin/package.json | 69 - .../node_modules/jpegtran-bin/readme.md | 52 - .../jpegtran-bin/test/fixtures/test.jpg | Bin 2139 -> 0 bytes .../jpegtran-bin/test/minified.jpg | Bin 927 -> 0 bytes .../jpegtran-bin/test/test-build.js | 30 - .../jpegtran-bin/test/test-path.js | 49 - .../node_modules/jpegtran-bin/vendor/jpegtran | Bin 137944 -> 0 bytes .../image-min/node_modules/mkdirp/.npmignore | 2 - .../image-min/node_modules/mkdirp/.travis.yml | 5 - .../image-min/node_modules/mkdirp/LICENSE | 21 - .../node_modules/mkdirp/examples/pow.js | 6 - .../image-min/node_modules/mkdirp/index.js | 82 - .../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 - .../node_modules/mkdirp/test/perm.js | 32 - .../node_modules/mkdirp/test/perm_sync.js | 39 - .../node_modules/mkdirp/test/race.js | 41 - .../image-min/node_modules/mkdirp/test/rel.js | 32 - .../node_modules/mkdirp/test/return.js | 25 - .../node_modules/mkdirp/test/return_sync.js | 24 - .../node_modules/mkdirp/test/root.js | 18 - .../node_modules/mkdirp/test/sync.js | 32 - .../node_modules/mkdirp/test/umask.js | 28 - .../node_modules/mkdirp/test/umask_sync.js | 32 - .../image-min/node_modules/mout/.editorconfig | 20 - .../image-min/node_modules/mout/.jshintrc | 69 - .../image-min/node_modules/mout/.npmignore | 30 - .../image-min/node_modules/mout/.travis.yml | 15 - .../image-min/node_modules/mout/CHANGELOG.md | 116 - .../node_modules/mout/CONTRIBUTING.md | 61 - .../image-min/node_modules/mout/LICENSE.md | 21 - .../image-min/node_modules/mout/README.md | 63 - .../image-min/node_modules/mout/array.js | 46 - .../node_modules/mout/array/append.js | 21 - .../node_modules/mout/array/collect.js | 27 - .../node_modules/mout/array/combine.js | 22 - .../node_modules/mout/array/compact.js | 13 - .../node_modules/mout/array/contains.js | 10 - .../node_modules/mout/array/difference.js | 22 - .../node_modules/mout/array/every.js | 27 - .../node_modules/mout/array/filter.js | 26 - .../image-min/node_modules/mout/array/find.js | 13 - .../node_modules/mout/array/findIndex.js | 23 - .../node_modules/mout/array/flatten.js | 43 - .../node_modules/mout/array/forEach.js | 23 - .../node_modules/mout/array/indexOf.js | 28 - .../node_modules/mout/array/insert.js | 15 - .../node_modules/mout/array/intersection.js | 23 - .../node_modules/mout/array/invoke.js | 23 - .../image-min/node_modules/mout/array/join.js | 17 - .../node_modules/mout/array/lastIndexOf.js | 28 - .../image-min/node_modules/mout/array/map.js | 22 - .../image-min/node_modules/mout/array/max.js | 34 - .../image-min/node_modules/mout/array/min.js | 34 - .../image-min/node_modules/mout/array/pick.js | 31 - .../node_modules/mout/array/pluck.js | 12 - .../node_modules/mout/array/range.js | 27 - .../node_modules/mout/array/reduce.js | 33 - .../node_modules/mout/array/reduceRight.js | 34 - .../node_modules/mout/array/reject.js | 25 - .../node_modules/mout/array/remove.js | 13 - .../node_modules/mout/array/removeAll.js | 15 - .../node_modules/mout/array/shuffle.js | 28 - .../image-min/node_modules/mout/array/some.js | 27 - .../image-min/node_modules/mout/array/sort.js | 55 - .../node_modules/mout/array/split.js | 35 - .../node_modules/mout/array/toLookup.js | 28 - .../node_modules/mout/array/union.js | 19 - .../node_modules/mout/array/unique.js | 17 - .../image-min/node_modules/mout/array/xor.js | 26 - .../image-min/node_modules/mout/array/zip.js | 28 - .../image-min/node_modules/mout/collection.js | 22 - .../node_modules/mout/collection/contains.js | 9 - .../node_modules/mout/collection/every.js | 9 - .../node_modules/mout/collection/filter.js | 23 - .../node_modules/mout/collection/find.js | 10 - .../node_modules/mout/collection/forEach.js | 9 - .../node_modules/mout/collection/make_.js | 19 - .../node_modules/mout/collection/map.js | 23 - .../node_modules/mout/collection/max.js | 10 - .../node_modules/mout/collection/min.js | 10 - .../node_modules/mout/collection/pluck.js | 14 - .../node_modules/mout/collection/reduce.js | 9 - .../node_modules/mout/collection/reject.js | 16 - .../node_modules/mout/collection/size.js | 19 - .../node_modules/mout/collection/some.js | 9 - .../image-min/node_modules/mout/date.js | 21 - .../node_modules/mout/date/dayOfTheYear.js | 13 - .../image-min/node_modules/mout/date/diff.js | 130 - .../node_modules/mout/date/i18n/de-DE.js | 61 - .../node_modules/mout/date/i18n/en-US.js | 61 - .../node_modules/mout/date/i18n/pt-BR.js | 61 - .../image-min/node_modules/mout/date/i18n_.js | 14 - .../node_modules/mout/date/isLeapYear.js | 15 - .../node_modules/mout/date/isSame.js | 16 - .../node_modules/mout/date/parseIso.js | 146 - .../node_modules/mout/date/startOf.js | 54 - .../node_modules/mout/date/strftime.js | 118 - .../node_modules/mout/date/timezoneAbbr.js | 17 - .../node_modules/mout/date/timezoneOffset.js | 16 - .../mout/date/totalDaysInMonth.js | 25 - .../node_modules/mout/date/totalDaysInYear.js | 13 - .../node_modules/mout/date/weekOfTheYear.js | 16 - .../image-min/node_modules/mout/doc/array.md | 781 - .../node_modules/mout/doc/collection.md | 233 - .../image-min/node_modules/mout/doc/date.md | 295 - .../node_modules/mout/doc/function.md | 210 - .../image-min/node_modules/mout/doc/lang.md | 464 - .../image-min/node_modules/mout/doc/math.md | 298 - .../image-min/node_modules/mout/doc/number.md | 225 - .../image-min/node_modules/mout/doc/object.md | 780 - .../node_modules/mout/doc/queryString.md | 115 - .../image-min/node_modules/mout/doc/random.md | 218 - .../image-min/node_modules/mout/doc/string.md | 606 - .../image-min/node_modules/mout/doc/time.md | 64 - .../image-min/node_modules/mout/function.js | 19 - .../node_modules/mout/function/bind.js | 23 - .../node_modules/mout/function/compose.js | 23 - .../node_modules/mout/function/debounce.js | 32 - .../node_modules/mout/function/func.js | 14 - .../mout/function/makeIterator_.js | 31 - .../node_modules/mout/function/partial.js | 19 - .../node_modules/mout/function/prop.js | 14 - .../node_modules/mout/function/series.js | 22 - .../node_modules/mout/function/throttle.js | 35 - .../node_modules/mout/function/timeout.js | 21 - .../node_modules/mout/function/times.js | 17 - .../image-min/node_modules/mout/index.js | 25 - .../image-min/node_modules/mout/lang.js | 37 - .../image-min/node_modules/mout/lang/clone.js | 49 - .../node_modules/mout/lang/createObject.js | 18 - .../node_modules/mout/lang/ctorApply.js | 17 - .../node_modules/mout/lang/deepClone.js | 48 - .../node_modules/mout/lang/defaults.js | 17 - .../mout/lang/inheritPrototype.js | 17 - .../image-min/node_modules/mout/lang/is.js | 23 - .../node_modules/mout/lang/isArguments.js | 15 - .../node_modules/mout/lang/isArray.js | 8 - .../node_modules/mout/lang/isBoolean.js | 8 - .../node_modules/mout/lang/isDate.js | 8 - .../node_modules/mout/lang/isEmpty.js | 24 - .../node_modules/mout/lang/isFinite.js | 21 - .../node_modules/mout/lang/isFunction.js | 8 - .../node_modules/mout/lang/isInteger.js | 12 - .../node_modules/mout/lang/isKind.js | 9 - .../image-min/node_modules/mout/lang/isNaN.js | 16 - .../node_modules/mout/lang/isNull.js | 9 - .../node_modules/mout/lang/isNumber.js | 8 - .../node_modules/mout/lang/isObject.js | 8 - .../node_modules/mout/lang/isPlainObject.js | 13 - .../node_modules/mout/lang/isRegExp.js | 8 - .../node_modules/mout/lang/isString.js | 8 - .../node_modules/mout/lang/isUndefined.js | 10 - .../image-min/node_modules/mout/lang/isnt.js | 12 - .../node_modules/mout/lang/kindOf.js | 20 - .../node_modules/mout/lang/toArray.js | 31 - .../node_modules/mout/lang/toNumber.js | 20 - .../node_modules/mout/lang/toString.js | 13 - .../image-min/node_modules/mout/math.js | 19 - .../image-min/node_modules/mout/math/ceil.js | 11 - .../image-min/node_modules/mout/math/clamp.js | 9 - .../node_modules/mout/math/countSteps.js | 16 - .../image-min/node_modules/mout/math/floor.js | 10 - .../node_modules/mout/math/inRange.js | 11 - .../node_modules/mout/math/isNear.js | 9 - .../image-min/node_modules/mout/math/lerp.js | 11 - .../image-min/node_modules/mout/math/loop.js | 10 - .../image-min/node_modules/mout/math/map.js | 11 - .../image-min/node_modules/mout/math/norm.js | 9 - .../image-min/node_modules/mout/math/round.js | 12 - .../image-min/node_modules/mout/number.js | 21 - .../node_modules/mout/number/MAX_INT.js | 6 - .../node_modules/mout/number/MAX_UINT.js | 6 - .../node_modules/mout/number/MIN_INT.js | 6 - .../node_modules/mout/number/abbreviate.js | 35 - .../mout/number/currencyFormat.js | 27 - .../mout/number/enforcePrecision.js | 12 - .../image-min/node_modules/mout/number/pad.js | 14 - .../image-min/node_modules/mout/number/rol.js | 10 - .../image-min/node_modules/mout/number/ror.js | 10 - .../node_modules/mout/number/sign.js | 15 - .../node_modules/mout/number/toInt.js | 17 - .../node_modules/mout/number/toUInt.js | 15 - .../node_modules/mout/number/toUInt31.js | 15 - .../image-min/node_modules/mout/object.js | 42 - .../node_modules/mout/object/bindAll.js | 18 - .../node_modules/mout/object/contains.js | 13 - .../node_modules/mout/object/deepEquals.js | 27 - .../node_modules/mout/object/deepFillIn.js | 33 - .../node_modules/mout/object/deepMatches.js | 55 - .../node_modules/mout/object/deepMixIn.js | 34 - .../node_modules/mout/object/equals.js | 36 - .../node_modules/mout/object/every.js | 23 - .../node_modules/mout/object/fillIn.js | 20 - .../node_modules/mout/object/filter.js | 20 - .../node_modules/mout/object/find.js | 21 - .../node_modules/mout/object/forIn.js | 62 - .../node_modules/mout/object/forOwn.js | 19 - .../node_modules/mout/object/functions.js | 18 - .../image-min/node_modules/mout/object/get.js | 20 - .../image-min/node_modules/mout/object/has.js | 15 - .../node_modules/mout/object/hasOwn.js | 12 - .../node_modules/mout/object/keys.js | 16 - .../image-min/node_modules/mout/object/map.js | 18 - .../node_modules/mout/object/matches.js | 20 - .../image-min/node_modules/mout/object/max.js | 12 - .../node_modules/mout/object/merge.js | 40 - .../image-min/node_modules/mout/object/min.js | 12 - .../node_modules/mout/object/mixIn.js | 28 - .../node_modules/mout/object/namespace.js | 19 - .../node_modules/mout/object/pick.js | 18 - .../node_modules/mout/object/pluck.js | 13 - .../node_modules/mout/object/reduce.js | 29 - .../node_modules/mout/object/reject.js | 16 - .../image-min/node_modules/mout/object/set.js | 17 - .../node_modules/mout/object/size.js | 16 - .../node_modules/mout/object/some.js | 21 - .../node_modules/mout/object/unset.js | 23 - .../node_modules/mout/object/values.js | 16 - .../image-min/node_modules/mout/package.json | 124 - .../node_modules/mout/queryString.js | 15 - .../node_modules/mout/queryString/contains.js | 12 - .../node_modules/mout/queryString/decode.js | 38 - .../node_modules/mout/queryString/encode.js | 27 - .../node_modules/mout/queryString/getParam.js | 15 - .../node_modules/mout/queryString/getQuery.js | 13 - .../node_modules/mout/queryString/parse.js | 13 - .../node_modules/mout/queryString/setParam.js | 28 - .../image-min/node_modules/mout/random.js | 16 - .../node_modules/mout/random/choice.js | 15 - .../node_modules/mout/random/guid.js | 24 - .../node_modules/mout/random/rand.js | 15 - .../node_modules/mout/random/randBit.js | 11 - .../node_modules/mout/random/randHex.js | 19 - .../node_modules/mout/random/randInt.js | 18 - .../node_modules/mout/random/randSign.js | 11 - .../node_modules/mout/random/random.js | 18 - .../image-min/node_modules/mout/src/array.js | 46 - .../node_modules/mout/src/array/append.js | 21 - .../node_modules/mout/src/array/collect.js | 26 - .../node_modules/mout/src/array/combine.js | 22 - .../node_modules/mout/src/array/compact.js | 13 - .../node_modules/mout/src/array/contains.js | 10 - .../node_modules/mout/src/array/difference.js | 19 - .../node_modules/mout/src/array/every.js | 27 - .../node_modules/mout/src/array/filter.js | 26 - .../node_modules/mout/src/array/find.js | 13 - .../node_modules/mout/src/array/findIndex.js | 23 - .../node_modules/mout/src/array/flatten.js | 42 - .../node_modules/mout/src/array/forEach.js | 23 - .../node_modules/mout/src/array/indexOf.js | 28 - .../node_modules/mout/src/array/insert.js | 14 - .../mout/src/array/intersection.js | 20 - .../node_modules/mout/src/array/invoke.js | 23 - .../node_modules/mout/src/array/join.js | 17 - .../mout/src/array/lastIndexOf.js | 28 - .../node_modules/mout/src/array/map.js | 22 - .../node_modules/mout/src/array/max.js | 34 - .../node_modules/mout/src/array/min.js | 34 - .../node_modules/mout/src/array/pick.js | 31 - .../node_modules/mout/src/array/pluck.js | 12 - .../node_modules/mout/src/array/range.js | 27 - .../node_modules/mout/src/array/reduce.js | 33 - .../mout/src/array/reduceRight.js | 34 - .../node_modules/mout/src/array/reject.js | 25 - .../node_modules/mout/src/array/remove.js | 13 - .../node_modules/mout/src/array/removeAll.js | 15 - .../node_modules/mout/src/array/shuffle.js | 28 - .../node_modules/mout/src/array/some.js | 27 - .../node_modules/mout/src/array/sort.js | 55 - .../node_modules/mout/src/array/split.js | 35 - .../node_modules/mout/src/array/toLookup.js | 28 - .../node_modules/mout/src/array/union.js | 18 - .../node_modules/mout/src/array/unique.js | 16 - .../node_modules/mout/src/array/xor.js | 24 - .../node_modules/mout/src/array/zip.js | 27 - .../node_modules/mout/src/collection.js | 22 - .../mout/src/collection/contains.js | 7 - .../node_modules/mout/src/collection/every.js | 7 - .../mout/src/collection/filter.js | 22 - .../node_modules/mout/src/collection/find.js | 8 - .../mout/src/collection/forEach.js | 7 - .../node_modules/mout/src/collection/make_.js | 19 - .../node_modules/mout/src/collection/map.js | 20 - .../node_modules/mout/src/collection/max.js | 8 - .../node_modules/mout/src/collection/min.js | 8 - .../node_modules/mout/src/collection/pluck.js | 14 - .../mout/src/collection/reduce.js | 7 - .../mout/src/collection/reject.js | 15 - .../node_modules/mout/src/collection/size.js | 18 - .../node_modules/mout/src/collection/some.js | 7 - .../image-min/node_modules/mout/src/date.js | 21 - .../mout/src/date/dayOfTheYear.js | 13 - .../node_modules/mout/src/date/diff.js | 128 - .../node_modules/mout/src/date/i18n/de-DE.js | 61 - .../node_modules/mout/src/date/i18n/en-US.js | 61 - .../node_modules/mout/src/date/i18n/pt-BR.js | 61 - .../node_modules/mout/src/date/i18n_.js | 13 - .../node_modules/mout/src/date/isLeapYear.js | 15 - .../node_modules/mout/src/date/isSame.js | 16 - .../node_modules/mout/src/date/parseIso.js | 146 - .../node_modules/mout/src/date/startOf.js | 54 - .../node_modules/mout/src/date/strftime.js | 113 - .../mout/src/date/timezoneAbbr.js | 17 - .../mout/src/date/timezoneOffset.js | 16 - .../mout/src/date/totalDaysInMonth.js | 24 - .../mout/src/date/totalDaysInYear.js | 13 - .../mout/src/date/weekOfTheYear.js | 16 - .../node_modules/mout/src/function.js | 19 - .../node_modules/mout/src/function/bind.js | 23 - .../node_modules/mout/src/function/compose.js | 23 - .../mout/src/function/debounce.js | 32 - .../node_modules/mout/src/function/func.js | 14 - .../mout/src/function/makeIterator_.js | 30 - .../node_modules/mout/src/function/partial.js | 19 - .../node_modules/mout/src/function/prop.js | 14 - .../node_modules/mout/src/function/series.js | 22 - .../mout/src/function/throttle.js | 35 - .../node_modules/mout/src/function/timeout.js | 21 - .../node_modules/mout/src/function/times.js | 17 - .../image-min/node_modules/mout/src/index.js | 25 - .../image-min/node_modules/mout/src/lang.js | 37 - .../node_modules/mout/src/lang/clone.js | 47 - .../mout/src/lang/createObject.js | 18 - .../node_modules/mout/src/lang/ctorApply.js | 17 - .../node_modules/mout/src/lang/deepClone.js | 45 - .../node_modules/mout/src/lang/defaults.js | 16 - .../mout/src/lang/inheritPrototype.js | 17 - .../node_modules/mout/src/lang/is.js | 23 - .../node_modules/mout/src/lang/isArguments.js | 15 - .../node_modules/mout/src/lang/isArray.js | 8 - .../node_modules/mout/src/lang/isBoolean.js | 8 - .../node_modules/mout/src/lang/isDate.js | 8 - .../node_modules/mout/src/lang/isEmpty.js | 23 - .../node_modules/mout/src/lang/isFinite.js | 21 - .../node_modules/mout/src/lang/isFunction.js | 8 - .../node_modules/mout/src/lang/isInteger.js | 12 - .../node_modules/mout/src/lang/isKind.js | 9 - .../node_modules/mout/src/lang/isNaN.js | 16 - .../node_modules/mout/src/lang/isNull.js | 9 - .../node_modules/mout/src/lang/isNumber.js | 8 - .../node_modules/mout/src/lang/isObject.js | 8 - .../mout/src/lang/isPlainObject.js | 13 - .../node_modules/mout/src/lang/isRegExp.js | 8 - .../node_modules/mout/src/lang/isString.js | 8 - .../node_modules/mout/src/lang/isUndefined.js | 10 - .../node_modules/mout/src/lang/isnt.js | 12 - .../node_modules/mout/src/lang/kindOf.js | 20 - .../node_modules/mout/src/lang/toArray.js | 31 - .../node_modules/mout/src/lang/toNumber.js | 20 - .../node_modules/mout/src/lang/toString.js | 13 - .../image-min/node_modules/mout/src/math.js | 19 - .../node_modules/mout/src/math/ceil.js | 11 - .../node_modules/mout/src/math/clamp.js | 9 - .../node_modules/mout/src/math/countSteps.js | 16 - .../node_modules/mout/src/math/floor.js | 10 - .../node_modules/mout/src/math/inRange.js | 11 - .../node_modules/mout/src/math/isNear.js | 9 - .../node_modules/mout/src/math/lerp.js | 11 - .../node_modules/mout/src/math/loop.js | 10 - .../node_modules/mout/src/math/map.js | 10 - .../node_modules/mout/src/math/norm.js | 9 - .../node_modules/mout/src/math/round.js | 12 - .../image-min/node_modules/mout/src/number.js | 21 - .../node_modules/mout/src/number/MAX_INT.js | 6 - .../node_modules/mout/src/number/MAX_UINT.js | 6 - .../node_modules/mout/src/number/MIN_INT.js | 6 - .../mout/src/number/abbreviate.js | 35 - .../mout/src/number/currencyFormat.js | 27 - .../mout/src/number/enforcePrecision.js | 12 - .../node_modules/mout/src/number/pad.js | 13 - .../node_modules/mout/src/number/rol.js | 10 - .../node_modules/mout/src/number/ror.js | 10 - .../node_modules/mout/src/number/sign.js | 15 - .../node_modules/mout/src/number/toInt.js | 17 - .../node_modules/mout/src/number/toUInt.js | 15 - .../node_modules/mout/src/number/toUInt31.js | 15 - .../image-min/node_modules/mout/src/object.js | 42 - .../node_modules/mout/src/object/bindAll.js | 16 - .../node_modules/mout/src/object/contains.js | 13 - .../mout/src/object/deepEquals.js | 26 - .../mout/src/object/deepFillIn.js | 32 - .../mout/src/object/deepMatches.js | 54 - .../node_modules/mout/src/object/deepMixIn.js | 33 - .../node_modules/mout/src/object/equals.js | 34 - .../node_modules/mout/src/object/every.js | 22 - .../node_modules/mout/src/object/fillIn.js | 19 - .../node_modules/mout/src/object/filter.js | 19 - .../node_modules/mout/src/object/find.js | 20 - .../node_modules/mout/src/object/forIn.js | 62 - .../node_modules/mout/src/object/forOwn.js | 18 - .../node_modules/mout/src/object/functions.js | 18 - .../node_modules/mout/src/object/get.js | 20 - .../node_modules/mout/src/object/has.js | 15 - .../node_modules/mout/src/object/hasOwn.js | 12 - .../node_modules/mout/src/object/keys.js | 16 - .../node_modules/mout/src/object/map.js | 17 - .../node_modules/mout/src/object/matches.js | 20 - .../node_modules/mout/src/object/max.js | 11 - .../node_modules/mout/src/object/merge.js | 38 - .../node_modules/mout/src/object/min.js | 11 - .../node_modules/mout/src/object/mixIn.js | 28 - .../node_modules/mout/src/object/namespace.js | 19 - .../node_modules/mout/src/object/pick.js | 18 - .../node_modules/mout/src/object/pluck.js | 12 - .../node_modules/mout/src/object/reduce.js | 28 - .../node_modules/mout/src/object/reject.js | 15 - .../node_modules/mout/src/object/set.js | 17 - .../node_modules/mout/src/object/size.js | 16 - .../node_modules/mout/src/object/some.js | 20 - .../node_modules/mout/src/object/unset.js | 23 - .../node_modules/mout/src/object/values.js | 16 - .../node_modules/mout/src/queryString.js | 15 - .../mout/src/queryString/contains.js | 12 - .../mout/src/queryString/decode.js | 35 - .../mout/src/queryString/encode.js | 25 - .../mout/src/queryString/getParam.js | 14 - .../mout/src/queryString/getQuery.js | 13 - .../mout/src/queryString/parse.js | 12 - .../mout/src/queryString/setParam.js | 28 - .../image-min/node_modules/mout/src/random.js | 16 - .../node_modules/mout/src/random/choice.js | 14 - .../node_modules/mout/src/random/guid.js | 23 - .../node_modules/mout/src/random/rand.js | 13 - .../node_modules/mout/src/random/randBit.js | 11 - .../node_modules/mout/src/random/randHex.js | 19 - .../node_modules/mout/src/random/randInt.js | 16 - .../node_modules/mout/src/random/randSign.js | 11 - .../node_modules/mout/src/random/random.js | 18 - .../image-min/node_modules/mout/src/string.js | 46 - .../mout/src/string/WHITE_SPACES.js | 12 - .../node_modules/mout/src/string/camelCase.js | 16 - .../node_modules/mout/src/string/contains.js | 14 - .../node_modules/mout/src/string/crop.js | 11 - .../node_modules/mout/src/string/endsWith.js | 13 - .../mout/src/string/escapeHtml.js | 18 - .../mout/src/string/escapeRegExp.js | 15 - .../mout/src/string/escapeUnicode.js | 21 - .../node_modules/mout/src/string/hyphenate.js | 12 - .../node_modules/mout/src/string/insert.js | 20 - .../mout/src/string/interpolate.js | 18 - .../node_modules/mout/src/string/lowerCase.js | 11 - .../node_modules/mout/src/string/lpad.js | 16 - .../node_modules/mout/src/string/ltrim.js | 33 - .../node_modules/mout/src/string/makePath.js | 14 - .../mout/src/string/normalizeLineBreaks.js | 18 - .../mout/src/string/pascalCase.js | 11 - .../mout/src/string/properCase.js | 11 - .../mout/src/string/removeNonASCII.js | 14 - .../mout/src/string/removeNonWord.js | 11 - .../node_modules/mout/src/string/repeat.js | 13 - .../node_modules/mout/src/string/replace.js | 32 - .../mout/src/string/replaceAccents.js | 36 - .../node_modules/mout/src/string/rpad.js | 14 - .../node_modules/mout/src/string/rtrim.js | 32 - .../mout/src/string/sentenceCase.js | 13 - .../node_modules/mout/src/string/slugify.js | 21 - .../mout/src/string/startsWith.js | 13 - .../mout/src/string/stripHtmlTags.js | 11 - .../node_modules/mout/src/string/trim.js | 12 - .../node_modules/mout/src/string/truncate.js | 20 - .../node_modules/mout/src/string/typecast.js | 29 - .../mout/src/string/unCamelCase.js | 23 - .../mout/src/string/underscore.js | 11 - .../mout/src/string/unescapeHtml.js | 18 - .../mout/src/string/unescapeUnicode.js | 16 - .../mout/src/string/unhyphenate.js | 10 - .../node_modules/mout/src/string/upperCase.js | 10 - .../image-min/node_modules/mout/src/time.js | 12 - .../node_modules/mout/src/time/convert.js | 41 - .../node_modules/mout/src/time/now.js | 12 - .../node_modules/mout/src/time/parseMs.js | 17 - .../mout/src/time/toTimeString.js | 23 - .../image-min/node_modules/mout/string.js | 46 - .../node_modules/mout/string/WHITE_SPACES.js | 12 - .../node_modules/mout/string/camelCase.js | 20 - .../node_modules/mout/string/contains.js | 14 - .../node_modules/mout/string/crop.js | 12 - .../node_modules/mout/string/endsWith.js | 13 - .../node_modules/mout/string/escapeHtml.js | 18 - .../node_modules/mout/string/escapeRegExp.js | 15 - .../node_modules/mout/string/escapeUnicode.js | 21 - .../node_modules/mout/string/hyphenate.js | 14 - .../node_modules/mout/string/insert.js | 21 - .../node_modules/mout/string/interpolate.js | 18 - .../node_modules/mout/string/lowerCase.js | 11 - .../node_modules/mout/string/lpad.js | 17 - .../node_modules/mout/string/ltrim.js | 34 - .../node_modules/mout/string/makePath.js | 14 - .../mout/string/normalizeLineBreaks.js | 18 - .../node_modules/mout/string/pascalCase.js | 13 - .../node_modules/mout/string/properCase.js | 13 - .../mout/string/removeNonASCII.js | 14 - .../node_modules/mout/string/removeNonWord.js | 11 - .../node_modules/mout/string/repeat.js | 13 - .../node_modules/mout/string/replace.js | 33 - .../mout/string/replaceAccents.js | 36 - .../node_modules/mout/string/rpad.js | 15 - .../node_modules/mout/string/rtrim.js | 33 - .../node_modules/mout/string/sentenceCase.js | 15 - .../node_modules/mout/string/slugify.js | 24 - .../node_modules/mout/string/startsWith.js | 13 - .../node_modules/mout/string/stripHtmlTags.js | 11 - .../node_modules/mout/string/trim.js | 15 - .../node_modules/mout/string/truncate.js | 21 - .../node_modules/mout/string/typecast.js | 29 - .../node_modules/mout/string/unCamelCase.js | 23 - .../node_modules/mout/string/underscore.js | 13 - .../node_modules/mout/string/unescapeHtml.js | 18 - .../mout/string/unescapeUnicode.js | 16 - .../node_modules/mout/string/unhyphenate.js | 10 - .../node_modules/mout/string/upperCase.js | 10 - .../image-min/node_modules/mout/time.js | 12 - .../node_modules/mout/time/convert.js | 41 - .../image-min/node_modules/mout/time/now.js | 12 - .../node_modules/mout/time/parseMs.js | 17 - .../node_modules/mout/time/toTimeString.js | 24 - .../node_modules/optipng-bin/bin/optipng.js | 8 - .../node_modules/optipng-bin/lib/check.js | 24 - .../node_modules/optipng-bin/lib/optipng.js | 46 - .../node_modules/bin-wrapper/README.md | 67 - .../node_modules/bin-wrapper/bin-wrapper.js | 222 - .../bin-wrapper/node_modules/.bin/rimraf | 1 - .../bin-wrapper/node_modules/.bin/which | 1 - .../node_modules/download/README.md | 84 - .../node_modules/download/download.js | 100 - .../node_modules/decompress/README.md | 71 - .../node_modules/decompress/decompress.js | 168 - .../adm-zip/.idea/scopes/scope_settings.xml | 5 - .../node_modules/adm-zip/MIT-LICENSE.txt | 21 - .../decompress/node_modules/adm-zip/README.md | 64 - .../node_modules/adm-zip/adm-zip.js | 404 - .../adm-zip/headers/entryHeader.js | 261 - .../node_modules/adm-zip/headers/index.js | 2 - .../adm-zip/headers/mainHeader.js | 80 - .../node_modules/adm-zip/methods/deflater.js | 1578 -- .../node_modules/adm-zip/methods/index.js | 2 - .../node_modules/adm-zip/methods/inflater.js | 448 - .../node_modules/adm-zip/package.json | 43 - .../adm-zip/test/assets/attributes_test.zip | Bin 4189 -> 0 bytes .../attributes_test/New folder/hidden.txt | 17 - .../New folder/hidden_readonly.txt | 17 - .../attributes_test/New folder/readonly.txt | 17 - .../attributes_test/New folder/somefile.txt | 17 - .../attributes_test/asd/New Text Document.txt | 0 .../assets/attributes_test/blank file.txt | 0 .../node_modules/adm-zip/test/assets/fast.zip | Bin 4194 -> 0 bytes .../adm-zip/test/assets/fastest.zip | Bin 4194 -> 0 bytes .../adm-zip/test/assets/linux_arc.zip | Bin 415 -> 0 bytes .../adm-zip/test/assets/maximum.zip | Bin 4086 -> 0 bytes .../adm-zip/test/assets/normal.zip | Bin 4170 -> 0 bytes .../adm-zip/test/assets/store.zip | Bin 5878 -> 0 bytes .../adm-zip/test/assets/ultra.zip | Bin 4086 -> 0 bytes .../node_modules/adm-zip/test/index.js | 5 - .../node_modules/adm-zip/util/constants.js | 84 - .../node_modules/adm-zip/util/errors.js | 35 - .../node_modules/adm-zip/util/fattr.js | 84 - .../node_modules/adm-zip/util/index.js | 4 - .../node_modules/adm-zip/util/utils.js | 145 - .../node_modules/adm-zip/zipEntry.js | 224 - .../node_modules/adm-zip/zipFile.js | 311 - .../node_modules/stream-combiner/.npmignore | 3 - .../node_modules/stream-combiner/.travis.yml | 4 - .../node_modules/stream-combiner/LICENSE | 22 - .../node_modules/stream-combiner/README.md | 29 - .../node_modules/stream-combiner/index.js | 39 - .../node_modules/duplexer/.npmignore | 3 - .../node_modules/duplexer/.travis.yml | 6 - .../node_modules/duplexer/LICENCE | 19 - .../node_modules/duplexer/README.md | 47 - .../node_modules/duplexer/index.js | 87 - .../node_modules/duplexer/package.json | 61 - .../node_modules/duplexer/test/index.js | 31 - .../node_modules/stream-combiner/package.json | 37 - .../stream-combiner/test/index.js | 52 - .../decompress/node_modules/tar/.npmignore | 5 - .../decompress/node_modules/tar/.travis.yml | 3 - .../decompress/node_modules/tar/LICENCE | 25 - .../decompress/node_modules/tar/README.md | 46 - .../node_modules/tar/examples/extracter.js | 11 - .../node_modules/tar/examples/reader.js | 36 - .../node_modules/tar/lib/buffer-entry.js | 30 - .../node_modules/tar/lib/entry-writer.js | 169 - .../decompress/node_modules/tar/lib/entry.js | 213 - .../tar/lib/extended-header-writer.js | 191 - .../node_modules/tar/lib/extended-header.js | 140 - .../node_modules/tar/lib/extract.js | 78 - .../tar/lib/global-header-writer.js | 14 - .../decompress/node_modules/tar/lib/header.js | 385 - .../decompress/node_modules/tar/lib/pack.js | 231 - .../decompress/node_modules/tar/lib/parse.js | 270 - .../tar/node_modules/block-stream/LICENCE | 25 - .../tar/node_modules/block-stream/README.md | 14 - .../block-stream/bench/block-stream-pause.js | 70 - .../block-stream/bench/block-stream.js | 68 - .../block-stream/bench/dropper-pause.js | 70 - .../block-stream/bench/dropper.js | 68 - .../node_modules/block-stream/block-stream.js | 209 - .../node_modules/block-stream/package.json | 40 - .../node_modules/block-stream/test/basic.js | 27 - .../block-stream/test/nopad-thorough.js | 68 - .../node_modules/block-stream/test/nopad.js | 57 - .../block-stream/test/pause-resume.js | 73 - .../block-stream/test/thorough.js | 68 - .../block-stream/test/two-stream.js | 59 - .../tar/node_modules/fstream/.npmignore | 5 - .../tar/node_modules/fstream/.travis.yml | 3 - .../tar/node_modules/fstream/LICENSE | 27 - .../tar/node_modules/fstream/README.md | 76 - .../fstream/examples/filter-pipe.js | 131 - .../tar/node_modules/fstream/examples/pipe.js | 115 - .../node_modules/fstream/examples/reader.js | 54 - .../fstream/examples/symlink-write.js | 24 - .../tar/node_modules/fstream/fstream.js | 31 - .../tar/node_modules/fstream/lib/abstract.js | 85 - .../tar/node_modules/fstream/lib/collect.js | 67 - .../node_modules/fstream/lib/dir-reader.js | 251 - .../node_modules/fstream/lib/dir-writer.js | 171 - .../node_modules/fstream/lib/file-reader.js | 147 - .../node_modules/fstream/lib/file-writer.js | 100 - .../tar/node_modules/fstream/lib/get-type.js | 32 - .../node_modules/fstream/lib/link-reader.js | 54 - .../node_modules/fstream/lib/link-writer.js | 95 - .../node_modules/fstream/lib/proxy-reader.js | 93 - .../node_modules/fstream/lib/proxy-writer.js | 109 - .../tar/node_modules/fstream/lib/reader.js | 260 - .../node_modules/fstream/lib/socket-reader.js | 38 - .../tar/node_modules/fstream/lib/writer.js | 389 - .../tar/node_modules/fstream/package.json | 43 - .../tar/node_modules/inherits/LICENSE | 16 - .../tar/node_modules/inherits/README.md | 42 - .../tar/node_modules/inherits/inherits.js | 1 - .../node_modules/inherits/inherits_browser.js | 23 - .../tar/node_modules/inherits/package.json | 37 - .../tar/node_modules/inherits/test.js | 25 - .../decompress/node_modules/tar/package.json | 40 - .../decompress/node_modules/tar/tar.js | 173 - .../tar/test/00-setup-fixtures.js | 53 - .../node_modules/tar/test/extract.js | 358 - .../node_modules/tar/test/fixtures.tgz | Bin 19205 -> 0 bytes .../node_modules/tar/test/header.js | 183 - .../tar/test/pack-no-proprietary.js | 854 - .../decompress/node_modules/tar/test/pack.js | 897 - .../decompress/node_modules/tar/test/parse.js | 359 - .../node_modules/tar/test/zz-cleanup.js | 20 - .../decompress/node_modules/tempfile/index.js | 8 - .../tempfile/node_modules/uuid/.npmignore | 2 - .../tempfile/node_modules/uuid/.travis.yml | 5 - .../tempfile/node_modules/uuid/LICENSE.md | 2 - .../tempfile/node_modules/uuid/README.md | 204 - .../node_modules/uuid/benchmark/README.md | 53 - .../node_modules/uuid/benchmark/bench.gnu | 174 - .../node_modules/uuid/benchmark/bench.sh | 34 - .../uuid/benchmark/benchmark-native.c | 34 - .../node_modules/uuid/benchmark/benchmark.js | 84 - .../node_modules/uuid/misc/compare.js | 62 - .../tempfile/node_modules/uuid/misc/perf.js | 102 - .../tempfile/node_modules/uuid/package.json | 56 - .../tempfile/node_modules/uuid/rng-browser.js | 31 - .../tempfile/node_modules/uuid/rng.js | 4 - .../node_modules/uuid/test/mocha.opts | 1 - .../tempfile/node_modules/uuid/test/test.js | 105 - .../tempfile/node_modules/uuid/uuid.js | 187 - .../node_modules/tempfile/package.json | 52 - .../node_modules/tempfile/readme.md | 36 - .../node_modules/decompress/package.json | 55 - .../node_modules/each-async/each-async.js | 72 - .../node_modules/each-async/package.json | 54 - .../node_modules/each-async/readme.md | 78 - .../download/node_modules/request/.npmignore | 2 - .../download/node_modules/request/.travis.yml | 12 - .../download/node_modules/request/LICENSE | 55 - .../download/node_modules/request/README.md | 366 - .../node_modules/request/dns-request.js | 7 - .../download/node_modules/request/index.js | 157 - .../download/node_modules/request/lib/copy.js | 8 - .../node_modules/request/lib/debug.js | 7 - .../node_modules/request/lib/getSafe.js | 34 - .../node_modules/request/lib/optional.js | 5 - .../request/node_modules/aws-sign2/LICENSE | 55 - .../request/node_modules/aws-sign2/README.md | 4 - .../request/node_modules/aws-sign2/index.js | 202 - .../node_modules/aws-sign2/package.json | 32 - .../node_modules/forever-agent/LICENSE | 55 - .../node_modules/forever-agent/README.md | 4 - .../node_modules/forever-agent/index.js | 119 - .../node_modules/forever-agent/package.json | 32 - .../request/node_modules/form-data/License | 19 - .../request/node_modules/form-data/Readme.md | 163 - .../node_modules/form-data/lib/form_data.js | 325 - .../form-data/node_modules/async/LICENSE | 19 - .../form-data/node_modules/async/README.md | 1425 - .../node_modules/async/component.json | 11 - .../form-data/node_modules/async/lib/async.js | 958 - .../form-data/node_modules/async/package.json | 47 - .../node_modules/combined-stream/.npmignore | 3 - .../node_modules/combined-stream/License | 19 - .../node_modules/combined-stream/Makefile | 7 - .../node_modules/combined-stream/Readme.md | 132 - .../combined-stream/lib/combined_stream.js | 185 - .../node_modules/delayed-stream/.npmignore | 2 - .../node_modules/delayed-stream/License | 19 - .../node_modules/delayed-stream/Makefile | 7 - .../node_modules/delayed-stream/Readme.md | 154 - .../delayed-stream/lib/delayed_stream.js | 99 - .../node_modules/delayed-stream/package.json | 35 - .../delayed-stream/test/common.js | 6 - .../integration/test-delayed-http-upload.js | 38 - .../test-delayed-stream-auto-pause.js | 21 - .../integration/test-delayed-stream-pause.js | 14 - .../test/integration/test-delayed-stream.js | 48 - .../integration/test-handle-source-errors.js | 15 - .../test/integration/test-max-data-size.js | 18 - .../test/integration/test-pipe-resumes.js | 13 - .../test/integration/test-proxy-readable.js | 13 - .../node_modules/delayed-stream/test/run.js | 7 - .../node_modules/combined-stream/package.json | 36 - .../combined-stream/test/common.js | 23 - .../combined-stream/test/fixture/file1.txt | 256 - .../combined-stream/test/fixture/file2.txt | 256 - .../test/integration/test-callback-streams.js | 27 - .../test/integration/test-data-size.js | 34 - ...delayed-streams-and-buffers-and-strings.js | 38 - .../test/integration/test-delayed-streams.js | 35 - .../test/integration/test-empty-string.js | 39 - .../test/integration/test-is-stream-like.js | 17 - .../test/integration/test-max-data-size.js | 24 - .../test/integration/test-unpaused-streams.js | 30 - .../node_modules/combined-stream/test/run.js | 7 - .../node_modules/form-data/package.json | 50 - .../request/node_modules/hawk/.npmignore | 18 - .../request/node_modules/hawk/.travis.yml | 5 - .../request/node_modules/hawk/LICENSE | 24 - .../request/node_modules/hawk/Makefile | 10 - .../request/node_modules/hawk/README.md | 627 - .../node_modules/hawk/example/usage.js | 78 - .../request/node_modules/hawk/images/hawk.png | Bin 6945 -> 0 bytes .../request/node_modules/hawk/images/logo.png | Bin 71732 -> 0 bytes .../request/node_modules/hawk/index.js | 1 - .../request/node_modules/hawk/lib/browser.js | 485 - .../request/node_modules/hawk/lib/client.js | 367 - .../request/node_modules/hawk/lib/crypto.js | 111 - .../request/node_modules/hawk/lib/index.js | 15 - .../request/node_modules/hawk/lib/server.js | 524 - .../request/node_modules/hawk/lib/utils.js | 183 - .../hawk/node_modules/boom/.npmignore | 18 - .../hawk/node_modules/boom/.travis.yml | 5 - .../hawk/node_modules/boom/LICENSE | 24 - .../hawk/node_modules/boom/Makefile | 11 - .../hawk/node_modules/boom/README.md | 6 - .../hawk/node_modules/boom/images/boom.png | Bin 29479 -> 0 bytes .../hawk/node_modules/boom/index.js | 1 - .../hawk/node_modules/boom/lib/index.js | 207 - .../hawk/node_modules/boom/package.json | 51 - .../hawk/node_modules/boom/test/index.js | 245 - .../hawk/node_modules/cryptiles/.npmignore | 18 - .../hawk/node_modules/cryptiles/.travis.yml | 5 - .../hawk/node_modules/cryptiles/LICENSE | 24 - .../hawk/node_modules/cryptiles/Makefile | 11 - .../hawk/node_modules/cryptiles/README.md | 6 - .../hawk/node_modules/cryptiles/index.js | 1 - .../hawk/node_modules/cryptiles/lib/index.js | 68 - .../hawk/node_modules/cryptiles/package.json | 52 - .../hawk/node_modules/cryptiles/test/index.js | 101 - .../hawk/node_modules/hoek/.npmignore | 18 - .../hawk/node_modules/hoek/.travis.yml | 5 - .../hawk/node_modules/hoek/LICENSE | 33 - .../hawk/node_modules/hoek/Makefile | 10 - .../hawk/node_modules/hoek/README.md | 436 - .../hawk/node_modules/hoek/images/hoek.png | Bin 37939 -> 0 bytes .../hawk/node_modules/hoek/index.js | 1 - .../hawk/node_modules/hoek/lib/escape.js | 132 - .../hawk/node_modules/hoek/lib/index.js | 585 - .../hawk/node_modules/hoek/package.json | 53 - .../hawk/node_modules/hoek/test/escaper.js | 86 - .../hawk/node_modules/hoek/test/index.js | 1078 - .../node_modules/hoek/test/modules/test1.js | 1 - .../node_modules/hoek/test/modules/test2.js | 1 - .../node_modules/hoek/test/modules/test3.js | 1 - .../hawk/node_modules/sntp/.npmignore | 18 - .../hawk/node_modules/sntp/.travis.yml | 5 - .../hawk/node_modules/sntp/LICENSE | 24 - .../hawk/node_modules/sntp/Makefile | 11 - .../hawk/node_modules/sntp/README.md | 68 - .../hawk/node_modules/sntp/examples/offset.js | 16 - .../hawk/node_modules/sntp/examples/time.js | 25 - .../hawk/node_modules/sntp/index.js | 1 - .../hawk/node_modules/sntp/lib/index.js | 409 - .../hawk/node_modules/sntp/package.json | 52 - .../hawk/node_modules/sntp/test/index.js | 359 - .../request/node_modules/hawk/package.json | 57 - .../request/node_modules/hawk/test/browser.js | 771 - .../request/node_modules/hawk/test/client.js | 206 - .../request/node_modules/hawk/test/crypto.js | 86 - .../request/node_modules/hawk/test/index.js | 316 - .../request/node_modules/hawk/test/message.js | 246 - .../request/node_modules/hawk/test/readme.js | 98 - .../request/node_modules/hawk/test/server.js | 686 - .../request/node_modules/hawk/test/uri.js | 456 - .../request/node_modules/hawk/test/utils.js | 120 - .../http-signature/.dir-locals.el | 6 - .../node_modules/http-signature/.npmignore | 7 - .../node_modules/http-signature/LICENSE | 18 - .../node_modules/http-signature/README.md | 75 - .../http-signature/http_signing.md | 296 - .../node_modules/http-signature/lib/index.js | 25 - .../node_modules/http-signature/lib/parser.js | 304 - .../node_modules/http-signature/lib/signer.js | 179 - .../node_modules/http-signature/lib/util.js | 249 - .../node_modules/http-signature/lib/verify.js | 42 - .../node_modules/asn1/.npmignore | 2 - .../http-signature/node_modules/asn1/LICENSE | 19 - .../node_modules/asn1/README.md | 50 - .../node_modules/asn1/lib/ber/errors.js | 13 - .../node_modules/asn1/lib/ber/index.js | 27 - .../node_modules/asn1/lib/ber/reader.js | 267 - .../node_modules/asn1/lib/ber/types.js | 36 - .../node_modules/asn1/lib/ber/writer.js | 317 - .../node_modules/asn1/lib/index.js | 20 - .../node_modules/asn1/package.json | 47 - .../node_modules/asn1/tst/ber/reader.test.js | 172 - .../node_modules/asn1/tst/ber/writer.test.js | 296 - .../node_modules/assert-plus/README.md | 126 - .../node_modules/assert-plus/assert.js | 196 - .../node_modules/assert-plus/package.json | 24 - .../node_modules/ctype/CHANGELOG | 71 - .../http-signature/node_modules/ctype/LICENSE | 24 - .../http-signature/node_modules/ctype/README | 82 - .../node_modules/ctype/README.old | 298 - .../http-signature/node_modules/ctype/ctf.js | 245 - .../http-signature/node_modules/ctype/ctio.js | 1485 - .../node_modules/ctype/ctype.js | 944 - .../ctype/man/man3ctype/ctio.3ctype | 241 - .../node_modules/ctype/package.json | 22 - .../node_modules/ctype/tools/jsl.conf | 129 - .../node_modules/ctype/tools/jsstyle | 839 - .../node_modules/ctype/tst/ctf/float.json | 13 - .../node_modules/ctype/tst/ctf/int.json | 13 - .../node_modules/ctype/tst/ctf/psinfo.json | 104 - .../node_modules/ctype/tst/ctf/struct.json | 19 - .../node_modules/ctype/tst/ctf/tst.fail.js | 39 - .../node_modules/ctype/tst/ctf/tst.float.js | 14 - .../node_modules/ctype/tst/ctf/tst.int.js | 14 - .../node_modules/ctype/tst/ctf/tst.psinfo.js | 17 - .../node_modules/ctype/tst/ctf/tst.struct.js | 18 - .../node_modules/ctype/tst/ctf/tst.typedef.js | 15 - .../node_modules/ctype/tst/ctf/typedef.json | 14 - .../ctype/tst/ctio/float/tst.rfloat.js | 767 - .../ctype/tst/ctio/float/tst.wfloat.js | 753 - .../node_modules/ctype/tst/ctio/int/tst.64.js | 638 - .../ctype/tst/ctio/int/tst.rint.js | 101 - .../ctype/tst/ctio/int/tst.wbounds.js | 53 - .../ctype/tst/ctio/int/tst.wint.js | 92 - .../ctype/tst/ctio/uint/tst.64.js | 451 - .../ctype/tst/ctio/uint/tst.roundtrip.js | 81 - .../ctype/tst/ctio/uint/tst.ruint.js | 95 - .../ctype/tst/ctio/uint/tst.wuint.js | 156 - .../ctype/tst/ctype/tst.basicr.js | 50 - .../ctype/tst/ctype/tst.basicw.js | 44 - .../node_modules/ctype/tst/ctype/tst.char.js | 42 - .../ctype/tst/ctype/tst.endian.js | 45 - .../ctype/tst/ctype/tst.oldwrite.js | 28 - .../ctype/tst/ctype/tst.readSize.js | 128 - .../ctype/tst/ctype/tst.structw.js | 28 - .../ctype/tst/ctype/tst.writeStruct.js | 31 - .../node_modules/http-signature/package.json | 40 - .../node_modules/json-stringify-safe/LICENSE | 27 - .../json-stringify-safe/README.md | 49 - .../json-stringify-safe/package.json | 37 - .../json-stringify-safe/stringify.js | 39 - .../node_modules/json-stringify-safe/test.js | 128 - .../request/node_modules/mime/LICENSE | 19 - .../request/node_modules/mime/README.md | 66 - .../request/node_modules/mime/mime.js | 114 - .../request/node_modules/mime/package.json | 36 - .../request/node_modules/mime/test.js | 84 - .../node_modules/mime/types/mime.types | 1588 -- .../node_modules/mime/types/node.types | 77 - .../request/node_modules/node-uuid/.npmignore | 2 - .../request/node_modules/node-uuid/LICENSE.md | 2 - .../request/node_modules/node-uuid/README.md | 207 - .../node-uuid/benchmark/README.md | 53 - .../node-uuid/benchmark/bench.gnu | 174 - .../node_modules/node-uuid/benchmark/bench.sh | 34 - .../node-uuid/benchmark/benchmark-native.c | 34 - .../node-uuid/benchmark/benchmark.js | 84 - .../node_modules/node-uuid/component.json | 18 - .../node_modules/node-uuid/package.json | 39 - .../node_modules/node-uuid/test/compare_v1.js | 63 - .../node_modules/node-uuid/test/test.html | 17 - .../node_modules/node-uuid/test/test.js | 228 - .../request/node_modules/node-uuid/uuid.js | 245 - .../request/node_modules/oauth-sign/LICENSE | 55 - .../request/node_modules/oauth-sign/README.md | 4 - .../request/node_modules/oauth-sign/index.js | 43 - .../node_modules/oauth-sign/package.json | 35 - .../request/node_modules/oauth-sign/test.js | 49 - .../request/node_modules/qs/.gitmodules | 6 - .../request/node_modules/qs/.npmignore | 7 - .../request/node_modules/qs/Readme.md | 58 - .../request/node_modules/qs/index.js | 366 - .../request/node_modules/qs/package.json | 38 - .../node_modules/tough-cookie/.jshintrc | 72 - .../node_modules/tough-cookie/.npmignore | 3 - .../request/node_modules/tough-cookie/LICENSE | 78 - .../node_modules/tough-cookie/README.md | 380 - .../tough-cookie/generate-pubsuffix.js | 230 - .../node_modules/tough-cookie/lib/cookie.js | 947 - .../node_modules/tough-cookie/lib/memstore.js | 102 - .../tough-cookie/lib/pubsuffix.js | 69 - .../node_modules/punycode/LICENSE-GPL.txt | 278 - .../node_modules/punycode/LICENSE-MIT.txt | 20 - .../node_modules/punycode/package.json | 77 - .../node_modules/punycode/punycode.js | 508 - .../node_modules/punycode/punycode.min.js | 2 - .../punycode/vendor/docdown/LICENSE.txt | 20 - .../punycode/vendor/docdown/README.md | 35 - .../punycode/vendor/docdown/doc/README.md | 69 - .../punycode/vendor/docdown/doc/parse.php | 35 - .../punycode/vendor/docdown/docdown.php | 38 - .../vendor/docdown/src/DocDown/Alias.php | 226 - .../vendor/docdown/src/DocDown/Entry.php | 442 - .../vendor/docdown/src/DocDown/Generator.php | 563 - .../node_modules/tough-cookie/package.json | 50 - .../tough-cookie/public-suffix.txt | 5229 ---- .../request/node_modules/tough-cookie/test.js | 1340 - .../request/node_modules/tunnel-agent/LICENSE | 55 - .../node_modules/tunnel-agent/README.md | 4 - .../node_modules/tunnel-agent/index.js | 227 - .../node_modules/tunnel-agent/package.json | 32 - .../node_modules/request/package.json | 61 - .../download/node_modules/request/request.js | 1260 - .../download/node_modules/through2/.jshintrc | 59 - .../download/node_modules/through2/.npmignore | 1 - .../node_modules/through2/.travis.yml | 17 - .../download/node_modules/through2/LICENSE | 39 - .../download/node_modules/through2/README.md | 131 - .../node_modules/readable-stream/.npmignore | 5 - .../node_modules/readable-stream/LICENSE | 27 - .../node_modules/readable-stream/README.md | 768 - .../node_modules/readable-stream/duplex.js | 1 - .../node_modules/readable-stream/float.patch | 68 - .../readable-stream/lib/_stream_duplex.js | 69 - .../lib/_stream_passthrough.js | 41 - .../readable-stream/lib/_stream_readable.js | 927 - .../readable-stream/lib/_stream_transform.js | 205 - .../readable-stream/lib/_stream_writable.js | 371 - .../node_modules/string_decoder/.npmignore | 1 - .../node_modules/string_decoder/LICENSE | 20 - .../node_modules/string_decoder/README.md | 7 - .../string_decoder/build/.npmignore | 1 - .../string_decoder/build/build.js | 94 - .../string_decoder/build/files.js | 36 - .../string_decoder/build/package.json | 12 - .../string_decoder/build/test-replacements.js | 24 - .../node_modules/string_decoder/index.js | 200 - .../node_modules/string_decoder/package.json | 36 - .../string_decoder/test/common.js | 200 - .../test/simple/test-string-decoder-end.js | 75 - .../test/simple/test-string-decoder.js | 163 - .../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 | 60 - .../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 | 76 - .../through2/node_modules/xtend/test.js | 63 - .../node_modules/through2/package.json | 48 - .../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 - .../node_modules/download/package.json | 55 - .../bin-wrapper/node_modules/isbin/.npmignore | 1 - .../node_modules/isbin/.travis.yml | 3 - .../bin-wrapper/node_modules/isbin/History.md | 20 - .../bin-wrapper/node_modules/isbin/Makefile | 6 - .../bin-wrapper/node_modules/isbin/README.md | 59 - .../bin-wrapper/node_modules/isbin/index.js | 1 - .../node_modules/isbin/lib/index.js | 51 - .../isbin/node_modules/async/.gitmodules | 9 - .../isbin/node_modules/async/.npmignore | 4 - .../isbin/node_modules/async/LICENSE | 19 - .../isbin/node_modules/async/Makefile | 25 - .../isbin/node_modules/async/README.md | 1021 - .../isbin/node_modules/async/index.js | 3 - .../isbin/node_modules/async/lib/async.js | 692 - .../isbin/node_modules/async/package.json | 36 - .../node_modules/isbin/package.json | 45 - .../node_modules/isbin/test/isbin.js | 39 - .../node_modules/isbin/test/mocha.opts | 4 - .../node_modules/mout/.editorconfig | 20 - .../bin-wrapper/node_modules/mout/.jshintrc | 69 - .../bin-wrapper/node_modules/mout/.npmignore | 30 - .../bin-wrapper/node_modules/mout/.travis.yml | 13 - .../node_modules/mout/CHANGELOG.md | 93 - .../node_modules/mout/CONTRIBUTING.md | 61 - .../bin-wrapper/node_modules/mout/LICENSE.md | 21 - .../bin-wrapper/node_modules/mout/README.md | 63 - .../bin-wrapper/node_modules/mout/array.js | 46 - .../node_modules/mout/array/append.js | 21 - .../node_modules/mout/array/collect.js | 27 - .../node_modules/mout/array/combine.js | 22 - .../node_modules/mout/array/compact.js | 13 - .../node_modules/mout/array/contains.js | 10 - .../node_modules/mout/array/difference.js | 22 - .../node_modules/mout/array/every.js | 27 - .../node_modules/mout/array/filter.js | 27 - .../node_modules/mout/array/find.js | 13 - .../node_modules/mout/array/findIndex.js | 23 - .../node_modules/mout/array/flatten.js | 43 - .../node_modules/mout/array/forEach.js | 23 - .../node_modules/mout/array/indexOf.js | 28 - .../node_modules/mout/array/insert.js | 15 - .../node_modules/mout/array/intersection.js | 23 - .../node_modules/mout/array/invoke.js | 23 - .../node_modules/mout/array/join.js | 17 - .../node_modules/mout/array/lastIndexOf.js | 28 - .../node_modules/mout/array/map.js | 23 - .../node_modules/mout/array/max.js | 35 - .../node_modules/mout/array/min.js | 35 - .../node_modules/mout/array/pick.js | 14 - .../node_modules/mout/array/pluck.js | 12 - .../node_modules/mout/array/range.js | 27 - .../node_modules/mout/array/reduce.js | 33 - .../node_modules/mout/array/reduceRight.js | 34 - .../node_modules/mout/array/reject.js | 26 - .../node_modules/mout/array/remove.js | 13 - .../node_modules/mout/array/removeAll.js | 15 - .../node_modules/mout/array/shuffle.js | 29 - .../node_modules/mout/array/some.js | 27 - .../node_modules/mout/array/sort.js | 55 - .../node_modules/mout/array/split.js | 35 - .../node_modules/mout/array/toLookup.js | 28 - .../node_modules/mout/array/union.js | 19 - .../node_modules/mout/array/unique.js | 17 - .../node_modules/mout/array/xor.js | 26 - .../node_modules/mout/array/zip.js | 29 - .../node_modules/mout/collection.js | 22 - .../node_modules/mout/collection/contains.js | 9 - .../node_modules/mout/collection/every.js | 9 - .../node_modules/mout/collection/filter.js | 23 - .../node_modules/mout/collection/find.js | 10 - .../node_modules/mout/collection/forEach.js | 9 - .../node_modules/mout/collection/make_.js | 19 - .../node_modules/mout/collection/map.js | 23 - .../node_modules/mout/collection/max.js | 10 - .../node_modules/mout/collection/min.js | 10 - .../node_modules/mout/collection/pluck.js | 14 - .../node_modules/mout/collection/reduce.js | 9 - .../node_modules/mout/collection/reject.js | 16 - .../node_modules/mout/collection/size.js | 19 - .../node_modules/mout/collection/some.js | 9 - .../bin-wrapper/node_modules/mout/date.js | 21 - .../node_modules/mout/date/dayOfTheYear.js | 13 - .../node_modules/mout/date/diff.js | 130 - .../node_modules/mout/date/i18n/en-US.js | 61 - .../node_modules/mout/date/i18n/pt-BR.js | 61 - .../node_modules/mout/date/i18n_.js | 14 - .../node_modules/mout/date/isLeapYear.js | 15 - .../node_modules/mout/date/isSame.js | 16 - .../node_modules/mout/date/parseIso.js | 146 - .../node_modules/mout/date/startOf.js | 54 - .../node_modules/mout/date/strftime.js | 118 - .../node_modules/mout/date/timezoneAbbr.js | 17 - .../node_modules/mout/date/timezoneOffset.js | 16 - .../mout/date/totalDaysInMonth.js | 25 - .../node_modules/mout/date/totalDaysInYear.js | 13 - .../node_modules/mout/date/weekOfTheYear.js | 16 - .../node_modules/mout/doc/array.md | 773 - .../node_modules/mout/doc/collection.md | 233 - .../bin-wrapper/node_modules/mout/doc/date.md | 295 - .../node_modules/mout/doc/function.md | 174 - .../bin-wrapper/node_modules/mout/doc/lang.md | 385 - .../bin-wrapper/node_modules/mout/doc/math.md | 298 - .../node_modules/mout/doc/number.md | 225 - .../node_modules/mout/doc/object.md | 780 - .../node_modules/mout/doc/queryString.md | 115 - .../node_modules/mout/doc/random.md | 218 - .../node_modules/mout/doc/string.md | 594 - .../bin-wrapper/node_modules/mout/doc/time.md | 64 - .../bin-wrapper/node_modules/mout/function.js | 18 - .../node_modules/mout/function/bind.js | 23 - .../node_modules/mout/function/compose.js | 23 - .../node_modules/mout/function/debounce.js | 29 - .../node_modules/mout/function/func.js | 14 - .../mout/function/makeIterator_.js | 34 - .../node_modules/mout/function/partial.js | 19 - .../node_modules/mout/function/prop.js | 14 - .../node_modules/mout/function/series.js | 22 - .../node_modules/mout/function/throttle.js | 32 - .../node_modules/mout/function/timeout.js | 21 - .../bin-wrapper/node_modules/mout/index.js | 24 - .../bin-wrapper/node_modules/mout/lang.js | 36 - .../node_modules/mout/lang/clone.js | 49 - .../node_modules/mout/lang/createObject.js | 18 - .../node_modules/mout/lang/ctorApply.js | 17 - .../node_modules/mout/lang/deepClone.js | 48 - .../node_modules/mout/lang/defaults.js | 17 - .../mout/lang/inheritPrototype.js | 16 - .../bin-wrapper/node_modules/mout/lang/is.js | 23 - .../node_modules/mout/lang/isArguments.js | 15 - .../node_modules/mout/lang/isArray.js | 8 - .../node_modules/mout/lang/isBoolean.js | 8 - .../node_modules/mout/lang/isDate.js | 8 - .../node_modules/mout/lang/isEmpty.js | 24 - .../node_modules/mout/lang/isFinite.js | 21 - .../node_modules/mout/lang/isFunction.js | 8 - .../node_modules/mout/lang/isInteger.js | 12 - .../node_modules/mout/lang/isKind.js | 9 - .../node_modules/mout/lang/isNaN.js | 15 - .../node_modules/mout/lang/isNull.js | 9 - .../node_modules/mout/lang/isNumber.js | 8 - .../node_modules/mout/lang/isObject.js | 8 - .../node_modules/mout/lang/isPlainObject.js | 14 - .../node_modules/mout/lang/isRegExp.js | 8 - .../node_modules/mout/lang/isString.js | 8 - .../node_modules/mout/lang/isUndefined.js | 10 - .../node_modules/mout/lang/isnt.js | 12 - .../node_modules/mout/lang/kindOf.js | 20 - .../node_modules/mout/lang/toArray.js | 31 - .../node_modules/mout/lang/toString.js | 13 - .../bin-wrapper/node_modules/mout/math.js | 19 - .../node_modules/mout/math/ceil.js | 11 - .../node_modules/mout/math/clamp.js | 9 - .../node_modules/mout/math/countSteps.js | 16 - .../node_modules/mout/math/floor.js | 10 - .../node_modules/mout/math/inRange.js | 11 - .../node_modules/mout/math/isNear.js | 9 - .../node_modules/mout/math/lerp.js | 11 - .../node_modules/mout/math/loop.js | 10 - .../bin-wrapper/node_modules/mout/math/map.js | 11 - .../node_modules/mout/math/norm.js | 9 - .../node_modules/mout/math/round.js | 12 - .../bin-wrapper/node_modules/mout/number.js | 21 - .../node_modules/mout/number/MAX_INT.js | 6 - .../node_modules/mout/number/MAX_UINT.js | 6 - .../node_modules/mout/number/MIN_INT.js | 6 - .../node_modules/mout/number/abbreviate.js | 35 - .../mout/number/currencyFormat.js | 26 - .../mout/number/enforcePrecision.js | 13 - .../node_modules/mout/number/pad.js | 12 - .../node_modules/mout/number/rol.js | 10 - .../node_modules/mout/number/ror.js | 10 - .../node_modules/mout/number/sign.js | 15 - .../node_modules/mout/number/toInt.js | 15 - .../node_modules/mout/number/toUInt.js | 13 - .../node_modules/mout/number/toUInt31.js | 13 - .../bin-wrapper/node_modules/mout/object.js | 42 - .../node_modules/mout/object/bindAll.js | 18 - .../node_modules/mout/object/contains.js | 13 - .../node_modules/mout/object/deepEquals.js | 27 - .../node_modules/mout/object/deepFillIn.js | 32 - .../node_modules/mout/object/deepMatches.js | 55 - .../node_modules/mout/object/deepMixIn.js | 34 - .../node_modules/mout/object/equals.js | 36 - .../node_modules/mout/object/every.js | 23 - .../node_modules/mout/object/fillIn.js | 20 - .../node_modules/mout/object/filter.js | 20 - .../node_modules/mout/object/find.js | 21 - .../node_modules/mout/object/forIn.js | 62 - .../node_modules/mout/object/forOwn.js | 19 - .../node_modules/mout/object/functions.js | 18 - .../node_modules/mout/object/get.js | 20 - .../node_modules/mout/object/has.js | 15 - .../node_modules/mout/object/hasOwn.js | 12 - .../node_modules/mout/object/keys.js | 16 - .../node_modules/mout/object/map.js | 18 - .../node_modules/mout/object/matches.js | 20 - .../node_modules/mout/object/max.js | 12 - .../node_modules/mout/object/merge.js | 40 - .../node_modules/mout/object/min.js | 12 - .../node_modules/mout/object/mixIn.js | 28 - .../node_modules/mout/object/namespace.js | 19 - .../node_modules/mout/object/pick.js | 18 - .../node_modules/mout/object/pluck.js | 13 - .../node_modules/mout/object/reduce.js | 29 - .../node_modules/mout/object/reject.js | 16 - .../node_modules/mout/object/set.js | 17 - .../node_modules/mout/object/size.js | 16 - .../node_modules/mout/object/some.js | 21 - .../node_modules/mout/object/unset.js | 23 - .../node_modules/mout/object/values.js | 16 - .../node_modules/mout/package.json | 123 - .../node_modules/mout/queryString.js | 15 - .../node_modules/mout/queryString/contains.js | 12 - .../node_modules/mout/queryString/decode.js | 21 - .../node_modules/mout/queryString/encode.js | 15 - .../node_modules/mout/queryString/getParam.js | 15 - .../node_modules/mout/queryString/getQuery.js | 13 - .../node_modules/mout/queryString/parse.js | 13 - .../node_modules/mout/queryString/setParam.js | 28 - .../bin-wrapper/node_modules/mout/random.js | 16 - .../node_modules/mout/random/choice.js | 15 - .../node_modules/mout/random/guid.js | 24 - .../node_modules/mout/random/rand.js | 15 - .../node_modules/mout/random/randBit.js | 11 - .../node_modules/mout/random/randHex.js | 19 - .../node_modules/mout/random/randInt.js | 18 - .../node_modules/mout/random/randSign.js | 11 - .../node_modules/mout/random/random.js | 18 - .../node_modules/mout/src/array.js | 46 - .../node_modules/mout/src/array/append.js | 21 - .../node_modules/mout/src/array/collect.js | 26 - .../node_modules/mout/src/array/combine.js | 22 - .../node_modules/mout/src/array/compact.js | 13 - .../node_modules/mout/src/array/contains.js | 10 - .../node_modules/mout/src/array/difference.js | 19 - .../node_modules/mout/src/array/every.js | 27 - .../node_modules/mout/src/array/filter.js | 26 - .../node_modules/mout/src/array/find.js | 13 - .../node_modules/mout/src/array/findIndex.js | 23 - .../node_modules/mout/src/array/flatten.js | 42 - .../node_modules/mout/src/array/forEach.js | 23 - .../node_modules/mout/src/array/indexOf.js | 28 - .../node_modules/mout/src/array/insert.js | 14 - .../mout/src/array/intersection.js | 20 - .../node_modules/mout/src/array/invoke.js | 23 - .../node_modules/mout/src/array/join.js | 17 - .../mout/src/array/lastIndexOf.js | 28 - .../node_modules/mout/src/array/map.js | 22 - .../node_modules/mout/src/array/max.js | 34 - .../node_modules/mout/src/array/min.js | 34 - .../node_modules/mout/src/array/pick.js | 14 - .../node_modules/mout/src/array/pluck.js | 12 - .../node_modules/mout/src/array/range.js | 27 - .../node_modules/mout/src/array/reduce.js | 33 - .../mout/src/array/reduceRight.js | 34 - .../node_modules/mout/src/array/reject.js | 25 - .../node_modules/mout/src/array/remove.js | 13 - .../node_modules/mout/src/array/removeAll.js | 15 - .../node_modules/mout/src/array/shuffle.js | 28 - .../node_modules/mout/src/array/some.js | 27 - .../node_modules/mout/src/array/sort.js | 55 - .../node_modules/mout/src/array/split.js | 35 - .../node_modules/mout/src/array/toLookup.js | 28 - .../node_modules/mout/src/array/union.js | 18 - .../node_modules/mout/src/array/unique.js | 16 - .../node_modules/mout/src/array/xor.js | 24 - .../node_modules/mout/src/array/zip.js | 27 - .../node_modules/mout/src/collection.js | 22 - .../mout/src/collection/contains.js | 7 - .../node_modules/mout/src/collection/every.js | 7 - .../mout/src/collection/filter.js | 22 - .../node_modules/mout/src/collection/find.js | 8 - .../mout/src/collection/forEach.js | 7 - .../node_modules/mout/src/collection/make_.js | 19 - .../node_modules/mout/src/collection/map.js | 20 - .../node_modules/mout/src/collection/max.js | 8 - .../node_modules/mout/src/collection/min.js | 8 - .../node_modules/mout/src/collection/pluck.js | 14 - .../mout/src/collection/reduce.js | 7 - .../mout/src/collection/reject.js | 15 - .../node_modules/mout/src/collection/size.js | 18 - .../node_modules/mout/src/collection/some.js | 7 - .../bin-wrapper/node_modules/mout/src/date.js | 21 - .../mout/src/date/dayOfTheYear.js | 13 - .../node_modules/mout/src/date/diff.js | 128 - .../node_modules/mout/src/date/i18n/en-US.js | 61 - .../node_modules/mout/src/date/i18n/pt-BR.js | 61 - .../node_modules/mout/src/date/i18n_.js | 13 - .../node_modules/mout/src/date/isLeapYear.js | 15 - .../node_modules/mout/src/date/isSame.js | 16 - .../node_modules/mout/src/date/parseIso.js | 146 - .../node_modules/mout/src/date/startOf.js | 54 - .../node_modules/mout/src/date/strftime.js | 113 - .../mout/src/date/timezoneAbbr.js | 17 - .../mout/src/date/timezoneOffset.js | 16 - .../mout/src/date/totalDaysInMonth.js | 24 - .../mout/src/date/totalDaysInYear.js | 13 - .../mout/src/date/weekOfTheYear.js | 16 - .../node_modules/mout/src/function.js | 18 - .../node_modules/mout/src/function/bind.js | 23 - .../node_modules/mout/src/function/compose.js | 23 - .../mout/src/function/debounce.js | 29 - .../node_modules/mout/src/function/func.js | 14 - .../mout/src/function/makeIterator_.js | 33 - .../node_modules/mout/src/function/partial.js | 19 - .../node_modules/mout/src/function/prop.js | 14 - .../node_modules/mout/src/function/series.js | 22 - .../mout/src/function/throttle.js | 32 - .../node_modules/mout/src/function/timeout.js | 21 - .../node_modules/mout/src/index.js | 24 - .../bin-wrapper/node_modules/mout/src/lang.js | 36 - .../node_modules/mout/src/lang/clone.js | 47 - .../mout/src/lang/createObject.js | 18 - .../node_modules/mout/src/lang/ctorApply.js | 17 - .../node_modules/mout/src/lang/deepClone.js | 45 - .../node_modules/mout/src/lang/defaults.js | 16 - .../mout/src/lang/inheritPrototype.js | 16 - .../node_modules/mout/src/lang/is.js | 23 - .../node_modules/mout/src/lang/isArguments.js | 15 - .../node_modules/mout/src/lang/isArray.js | 8 - .../node_modules/mout/src/lang/isBoolean.js | 8 - .../node_modules/mout/src/lang/isDate.js | 8 - .../node_modules/mout/src/lang/isEmpty.js | 23 - .../node_modules/mout/src/lang/isFinite.js | 21 - .../node_modules/mout/src/lang/isFunction.js | 8 - .../node_modules/mout/src/lang/isInteger.js | 12 - .../node_modules/mout/src/lang/isKind.js | 9 - .../node_modules/mout/src/lang/isNaN.js | 15 - .../node_modules/mout/src/lang/isNull.js | 9 - .../node_modules/mout/src/lang/isNumber.js | 8 - .../node_modules/mout/src/lang/isObject.js | 8 - .../mout/src/lang/isPlainObject.js | 14 - .../node_modules/mout/src/lang/isRegExp.js | 8 - .../node_modules/mout/src/lang/isString.js | 8 - .../node_modules/mout/src/lang/isUndefined.js | 10 - .../node_modules/mout/src/lang/isnt.js | 12 - .../node_modules/mout/src/lang/kindOf.js | 20 - .../node_modules/mout/src/lang/toArray.js | 31 - .../node_modules/mout/src/lang/toString.js | 13 - .../bin-wrapper/node_modules/mout/src/math.js | 19 - .../node_modules/mout/src/math/ceil.js | 11 - .../node_modules/mout/src/math/clamp.js | 9 - .../node_modules/mout/src/math/countSteps.js | 16 - .../node_modules/mout/src/math/floor.js | 10 - .../node_modules/mout/src/math/inRange.js | 11 - .../node_modules/mout/src/math/isNear.js | 9 - .../node_modules/mout/src/math/lerp.js | 11 - .../node_modules/mout/src/math/loop.js | 10 - .../node_modules/mout/src/math/map.js | 10 - .../node_modules/mout/src/math/norm.js | 9 - .../node_modules/mout/src/math/round.js | 12 - .../node_modules/mout/src/number.js | 21 - .../node_modules/mout/src/number/MAX_INT.js | 6 - .../node_modules/mout/src/number/MAX_UINT.js | 6 - .../node_modules/mout/src/number/MIN_INT.js | 6 - .../mout/src/number/abbreviate.js | 35 - .../mout/src/number/currencyFormat.js | 26 - .../mout/src/number/enforcePrecision.js | 13 - .../node_modules/mout/src/number/pad.js | 12 - .../node_modules/mout/src/number/rol.js | 10 - .../node_modules/mout/src/number/ror.js | 10 - .../node_modules/mout/src/number/sign.js | 15 - .../node_modules/mout/src/number/toInt.js | 15 - .../node_modules/mout/src/number/toUInt.js | 13 - .../node_modules/mout/src/number/toUInt31.js | 13 - .../node_modules/mout/src/object.js | 42 - .../node_modules/mout/src/object/bindAll.js | 16 - .../node_modules/mout/src/object/contains.js | 13 - .../mout/src/object/deepEquals.js | 26 - .../mout/src/object/deepFillIn.js | 31 - .../mout/src/object/deepMatches.js | 54 - .../node_modules/mout/src/object/deepMixIn.js | 33 - .../node_modules/mout/src/object/equals.js | 34 - .../node_modules/mout/src/object/every.js | 22 - .../node_modules/mout/src/object/fillIn.js | 19 - .../node_modules/mout/src/object/filter.js | 19 - .../node_modules/mout/src/object/find.js | 20 - .../node_modules/mout/src/object/forIn.js | 62 - .../node_modules/mout/src/object/forOwn.js | 18 - .../node_modules/mout/src/object/functions.js | 18 - .../node_modules/mout/src/object/get.js | 20 - .../node_modules/mout/src/object/has.js | 15 - .../node_modules/mout/src/object/hasOwn.js | 12 - .../node_modules/mout/src/object/keys.js | 16 - .../node_modules/mout/src/object/map.js | 17 - .../node_modules/mout/src/object/matches.js | 20 - .../node_modules/mout/src/object/max.js | 11 - .../node_modules/mout/src/object/merge.js | 38 - .../node_modules/mout/src/object/min.js | 11 - .../node_modules/mout/src/object/mixIn.js | 28 - .../node_modules/mout/src/object/namespace.js | 19 - .../node_modules/mout/src/object/pick.js | 18 - .../node_modules/mout/src/object/pluck.js | 12 - .../node_modules/mout/src/object/reduce.js | 28 - .../node_modules/mout/src/object/reject.js | 15 - .../node_modules/mout/src/object/set.js | 17 - .../node_modules/mout/src/object/size.js | 16 - .../node_modules/mout/src/object/some.js | 20 - .../node_modules/mout/src/object/unset.js | 23 - .../node_modules/mout/src/object/values.js | 16 - .../node_modules/mout/src/queryString.js | 15 - .../mout/src/queryString/contains.js | 12 - .../mout/src/queryString/decode.js | 20 - .../mout/src/queryString/encode.js | 15 - .../mout/src/queryString/getParam.js | 14 - .../mout/src/queryString/getQuery.js | 13 - .../mout/src/queryString/parse.js | 12 - .../mout/src/queryString/setParam.js | 28 - .../node_modules/mout/src/random.js | 16 - .../node_modules/mout/src/random/choice.js | 14 - .../node_modules/mout/src/random/guid.js | 23 - .../node_modules/mout/src/random/rand.js | 13 - .../node_modules/mout/src/random/randBit.js | 11 - .../node_modules/mout/src/random/randHex.js | 19 - .../node_modules/mout/src/random/randInt.js | 16 - .../node_modules/mout/src/random/randSign.js | 11 - .../node_modules/mout/src/random/random.js | 18 - .../node_modules/mout/src/string.js | 45 - .../mout/src/string/WHITE_SPACES.js | 12 - .../node_modules/mout/src/string/camelCase.js | 16 - .../node_modules/mout/src/string/contains.js | 14 - .../node_modules/mout/src/string/crop.js | 11 - .../node_modules/mout/src/string/endsWith.js | 13 - .../mout/src/string/escapeHtml.js | 18 - .../mout/src/string/escapeRegExp.js | 15 - .../mout/src/string/escapeUnicode.js | 21 - .../node_modules/mout/src/string/hyphenate.js | 12 - .../mout/src/string/interpolate.js | 18 - .../node_modules/mout/src/string/lowerCase.js | 11 - .../node_modules/mout/src/string/lpad.js | 16 - .../node_modules/mout/src/string/ltrim.js | 33 - .../node_modules/mout/src/string/makePath.js | 13 - .../mout/src/string/normalizeLineBreaks.js | 18 - .../mout/src/string/pascalCase.js | 11 - .../mout/src/string/properCase.js | 11 - .../mout/src/string/removeNonASCII.js | 14 - .../mout/src/string/removeNonWord.js | 11 - .../node_modules/mout/src/string/repeat.js | 13 - .../node_modules/mout/src/string/replace.js | 32 - .../mout/src/string/replaceAccents.js | 36 - .../node_modules/mout/src/string/rpad.js | 14 - .../node_modules/mout/src/string/rtrim.js | 32 - .../mout/src/string/sentenceCase.js | 13 - .../node_modules/mout/src/string/slugify.js | 21 - .../mout/src/string/startsWith.js | 13 - .../mout/src/string/stripHtmlTags.js | 11 - .../node_modules/mout/src/string/trim.js | 12 - .../node_modules/mout/src/string/truncate.js | 20 - .../node_modules/mout/src/string/typecast.js | 29 - .../mout/src/string/unCamelCase.js | 23 - .../mout/src/string/underscore.js | 11 - .../mout/src/string/unescapeHtml.js | 18 - .../mout/src/string/unescapeUnicode.js | 16 - .../mout/src/string/unhyphenate.js | 10 - .../node_modules/mout/src/string/upperCase.js | 10 - .../bin-wrapper/node_modules/mout/src/time.js | 12 - .../node_modules/mout/src/time/convert.js | 41 - .../node_modules/mout/src/time/now.js | 12 - .../node_modules/mout/src/time/parseMs.js | 17 - .../mout/src/time/toTimeString.js | 23 - .../bin-wrapper/node_modules/mout/string.js | 45 - .../node_modules/mout/string/WHITE_SPACES.js | 12 - .../node_modules/mout/string/camelCase.js | 20 - .../node_modules/mout/string/contains.js | 14 - .../node_modules/mout/string/crop.js | 12 - .../node_modules/mout/string/endsWith.js | 13 - .../node_modules/mout/string/escapeHtml.js | 18 - .../node_modules/mout/string/escapeRegExp.js | 15 - .../node_modules/mout/string/escapeUnicode.js | 21 - .../node_modules/mout/string/hyphenate.js | 14 - .../node_modules/mout/string/interpolate.js | 18 - .../node_modules/mout/string/lowerCase.js | 11 - .../node_modules/mout/string/lpad.js | 17 - .../node_modules/mout/string/ltrim.js | 34 - .../node_modules/mout/string/makePath.js | 13 - .../mout/string/normalizeLineBreaks.js | 18 - .../node_modules/mout/string/pascalCase.js | 13 - .../node_modules/mout/string/properCase.js | 13 - .../mout/string/removeNonASCII.js | 14 - .../node_modules/mout/string/removeNonWord.js | 11 - .../node_modules/mout/string/repeat.js | 13 - .../node_modules/mout/string/replace.js | 33 - .../mout/string/replaceAccents.js | 36 - .../node_modules/mout/string/rpad.js | 15 - .../node_modules/mout/string/rtrim.js | 33 - .../node_modules/mout/string/sentenceCase.js | 15 - .../node_modules/mout/string/slugify.js | 24 - .../node_modules/mout/string/startsWith.js | 13 - .../node_modules/mout/string/stripHtmlTags.js | 11 - .../node_modules/mout/string/trim.js | 15 - .../node_modules/mout/string/truncate.js | 21 - .../node_modules/mout/string/typecast.js | 29 - .../node_modules/mout/string/unCamelCase.js | 23 - .../node_modules/mout/string/underscore.js | 13 - .../node_modules/mout/string/unescapeHtml.js | 18 - .../mout/string/unescapeUnicode.js | 16 - .../node_modules/mout/string/unhyphenate.js | 10 - .../node_modules/mout/string/upperCase.js | 10 - .../bin-wrapper/node_modules/mout/time.js | 12 - .../node_modules/mout/time/convert.js | 41 - .../bin-wrapper/node_modules/mout/time/now.js | 12 - .../node_modules/mout/time/parseMs.js | 17 - .../node_modules/mout/time/toTimeString.js | 24 - .../node_modules/progress/.npmignore | 4 - .../node_modules/progress/History.md | 42 - .../node_modules/progress/Makefile | 5 - .../node_modules/progress/Readme.md | 117 - .../node_modules/progress/index.js | 1 - .../progress/lib/node-progress.js | 183 - .../node_modules/progress/package.json | 34 - .../bin-wrapper/node_modules/rimraf/AUTHORS | 6 - .../bin-wrapper/node_modules/rimraf/LICENSE | 23 - .../bin-wrapper/node_modules/rimraf/README.md | 30 - .../bin-wrapper/node_modules/rimraf/bin.js | 33 - .../node_modules/rimraf/package.json | 60 - .../bin-wrapper/node_modules/rimraf/rimraf.js | 178 - .../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 - .../bin-wrapper/node_modules/which/LICENSE | 23 - .../bin-wrapper/node_modules/which/README.md | 5 - .../bin-wrapper/node_modules/which/bin/which | 14 - .../node_modules/which/package.json | 35 - .../bin-wrapper/node_modules/which/which.js | 104 - .../node_modules/bin-wrapper/package.json | 54 - .../optipng-bin/node_modules/chalk/chalk.js | 62 - .../node_modules/ansi-styles/ansi-styles.js | 29 - .../node_modules/ansi-styles/package.json | 62 - .../chalk/node_modules/ansi-styles/readme.md | 65 - .../chalk/node_modules/has-color/has-color.js | 24 - .../chalk/node_modules/has-color/package.json | 59 - .../chalk/node_modules/has-color/readme.md | 28 - .../node_modules/chalk/package.json | 65 - .../optipng-bin/node_modules/chalk/readme.md | 130 - .../node_modules/optipng-bin/package.json | 71 - .../node_modules/optipng-bin/readme.md | 30 - .../node_modules/optipng-bin/vendor/optipng | Bin 171784 -> 0 bytes .../node_modules/image-min/package.json | 65 - .../node_modules/map-stream/.npmignore | 3 - .../node_modules/map-stream/.travis.yml | 4 - .../node_modules/map-stream/LICENCE | 22 - .../map-stream/examples/pretty.js | 26 - .../node_modules/map-stream/index.js | 145 - .../node_modules/map-stream/package.json | 38 - .../node_modules/map-stream/readme.markdown | 37 - .../map-stream/test/simple-map.asynct.js | 318 - .../node_modules/temp-write/index.js | 44 - .../temp-write/node_modules/mkdirp/.npmignore | 2 - .../node_modules/mkdirp/.travis.yml | 5 - .../temp-write/node_modules/mkdirp/LICENSE | 21 - .../node_modules/mkdirp/examples/pow.js | 6 - .../temp-write/node_modules/mkdirp/index.js | 82 - .../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 - .../node_modules/mkdirp/test/perm.js | 32 - .../node_modules/mkdirp/test/perm_sync.js | 39 - .../node_modules/mkdirp/test/race.js | 41 - .../node_modules/mkdirp/test/rel.js | 32 - .../node_modules/mkdirp/test/return.js | 25 - .../node_modules/mkdirp/test/return_sync.js | 24 - .../node_modules/mkdirp/test/root.js | 18 - .../node_modules/mkdirp/test/sync.js | 32 - .../node_modules/mkdirp/test/umask.js | 28 - .../node_modules/mkdirp/test/umask_sync.js | 32 - .../temp-write/node_modules/uuid/.npmignore | 2 - .../temp-write/node_modules/uuid/.travis.yml | 5 - .../temp-write/node_modules/uuid/LICENSE.md | 2 - .../temp-write/node_modules/uuid/README.md | 204 - .../node_modules/uuid/benchmark/README.md | 53 - .../node_modules/uuid/benchmark/bench.gnu | 174 - .../node_modules/uuid/benchmark/bench.sh | 34 - .../uuid/benchmark/benchmark-native.c | 34 - .../node_modules/uuid/benchmark/benchmark.js | 84 - .../node_modules/uuid/misc/compare.js | 62 - .../temp-write/node_modules/uuid/misc/perf.js | 102 - .../temp-write/node_modules/uuid/package.json | 56 - .../node_modules/uuid/rng-browser.js | 31 - .../temp-write/node_modules/uuid/rng.js | 4 - .../node_modules/uuid/test/mocha.opts | 1 - .../temp-write/node_modules/uuid/test/test.js | 105 - .../temp-write/node_modules/uuid/uuid.js | 187 - .../node_modules/temp-write/package.json | 59 - .../node_modules/temp-write/readme.md | 58 - node_modules/gulp-imagemin/package.json | 58 - node_modules/gulp-imagemin/readme.md | 40 - node_modules/gulp-minify-css/.npmignore | 6 - node_modules/gulp-minify-css/.travis.yml | 4 - node_modules/gulp-minify-css/LICENSE | 20 - node_modules/gulp-minify-css/README.md | 68 - node_modules/gulp-minify-css/index.js | 52 - .../node_modules/.bin/cleancss | 1 - .../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/clean-css/History.md | 379 - .../node_modules/clean-css/LICENSE | 19 - .../node_modules/clean-css/README.md | 187 - .../node_modules/clean-css/bin/cleancss | 138 - .../node_modules/clean-css/index.js | 1 - .../node_modules/clean-css/lib/clean.js | 329 - .../clean-css/lib/colors/hsl-to-hex.js | 64 - .../clean-css/lib/colors/long-to-short-hex.js | 12 - .../clean-css/lib/colors/rgb-to-hex.js | 16 - .../clean-css/lib/colors/shortener.js | 174 - .../clean-css/lib/images/url-rebase.js | 34 - .../clean-css/lib/images/url-rewriter.js | 53 - .../clean-css/lib/imports/inliner.js | 152 - .../clean-css/lib/properties/optimizer.js | 228 - .../lib/properties/shorthand-notations.js | 50 - .../clean-css/lib/selectors/empty-removal.js | 30 - .../clean-css/lib/selectors/optimizer.js | 221 - .../clean-css/lib/selectors/tokenizer.js | 129 - .../clean-css/lib/text/comments.js | 59 - .../clean-css/lib/text/escape-store.js | 32 - .../clean-css/lib/text/expressions.js | 69 - .../node_modules/clean-css/lib/text/free.js | 76 - .../node_modules/clean-css/lib/text/urls.js | 39 - .../node_modules/commander/History.md | 179 - .../node_modules/commander/Readme.md | 195 - .../clean-css/node_modules/commander/index.js | 847 - .../node_modules/commander/package.json | 38 - .../node_modules/clean-css/package.json | 72 - .../node_modules/clone/.npmignore | 1 - .../node_modules/clone/.travis.yml | 5 - .../node_modules/clone/LICENSE | 18 - .../node_modules/clone/README.md | 124 - .../node_modules/clone/clone.js | 159 - .../node_modules/clone/package.json | 89 - .../node_modules/clone/test.js | 217 - .../node_modules/event-stream/.npmignore | 3 - .../node_modules/event-stream/.travis.yml | 4 - .../node_modules/event-stream/LICENCE | 22 - .../event-stream/examples/pretty.js | 25 - .../node_modules/event-stream/index.js | 302 - .../node_modules/duplexer/.npmignore | 3 - .../node_modules/duplexer/.travis.yml | 6 - .../node_modules/duplexer/LICENCE | 19 - .../node_modules/duplexer/README.md | 47 - .../node_modules/duplexer/index.js | 87 - .../node_modules/duplexer/package.json | 57 - .../node_modules/duplexer/test/index.js | 31 - .../event-stream/node_modules/from/.npmignore | 1 - .../node_modules/from/LICENSE.APACHE2 | 15 - .../node_modules/from/LICENSE.MIT | 24 - .../event-stream/node_modules/from/index.js | 68 - .../node_modules/from/package.json | 38 - .../node_modules/from/readme.markdown | 38 - .../node_modules/from/test/index.js | 141 - .../node_modules/map-stream/.npmignore | 3 - .../node_modules/map-stream/.travis.yml | 4 - .../node_modules/map-stream/LICENCE | 22 - .../map-stream/examples/pretty.js | 26 - .../node_modules/map-stream/index.js | 145 - .../node_modules/map-stream/package.json | 34 - .../node_modules/map-stream/readme.markdown | 37 - .../map-stream/test/simple-map.asynct.js | 318 - .../node_modules/pause-stream/.npmignore | 3 - .../node_modules/pause-stream/LICENSE | 231 - .../node_modules/pause-stream/index.js | 3 - .../node_modules/pause-stream/package.json | 47 - .../node_modules/pause-stream/readme.markdown | 29 - .../node_modules/pause-stream/test/index.js | 17 - .../pause-stream/test/pause-end.js | 33 - .../node_modules/split/.npmignore | 3 - .../node_modules/split/.travis.yml | 4 - .../event-stream/node_modules/split/LICENCE | 22 - .../node_modules/split/examples/pretty.js | 26 - .../event-stream/node_modules/split/index.js | 59 - .../node_modules/split/package.json | 39 - .../node_modules/split/readme.markdown | 39 - .../split/test/partitioned_unicode.js | 34 - .../node_modules/split/test/split.asynct.js | 85 - .../split/test/try_catch.asynct.js | 51 - .../node_modules/stream-combiner/.npmignore | 3 - .../node_modules/stream-combiner/.travis.yml | 4 - .../node_modules/stream-combiner/LICENSE | 22 - .../node_modules/stream-combiner/README.md | 29 - .../node_modules/stream-combiner/index.js | 39 - .../node_modules/stream-combiner/package.json | 33 - .../stream-combiner/test/index.js | 52 - .../node_modules/through/.travis.yml | 5 - .../node_modules/through/LICENSE.APACHE2 | 15 - .../node_modules/through/LICENSE.MIT | 24 - .../node_modules/through/index.js | 108 - .../node_modules/through/package.json | 46 - .../node_modules/through/readme.markdown | 63 - .../node_modules/through/test/auto-destroy.js | 30 - .../node_modules/through/test/buffering.js | 71 - .../node_modules/through/test/end.js | 45 - .../node_modules/through/test/index.js | 114 - .../node_modules/event-stream/package.json | 63 - .../node_modules/event-stream/readme.markdown | 323 - .../event-stream/test/connect.asynct.js | 86 - .../event-stream/test/helper/index.js | 12 - .../event-stream/test/merge.asynct.js | 21 - .../event-stream/test/pause.asynct.js | 39 - .../event-stream/test/pipeline.asynct.js | 52 - .../event-stream/test/readArray.asynct.js | 89 - .../event-stream/test/readable.asynct.js | 175 - .../event-stream/test/replace.asynct.js | 51 - .../event-stream/test/simple-map.asynct.js | 343 - .../event-stream/test/spec.asynct.js | 86 - .../event-stream/test/split.asynct.js | 47 - .../event-stream/test/stringify.js | 15 - .../event-stream/test/writeArray.asynct.js | 31 - .../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 | 297 - .../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 | 10 - .../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 | 85 - .../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 | 768 - .../node_modules/readable-stream/duplex.js | 1 - .../node_modules/readable-stream/float.patch | 68 - .../readable-stream/lib/_stream_duplex.js | 69 - .../lib/_stream_passthrough.js | 41 - .../readable-stream/lib/_stream_readable.js | 927 - .../readable-stream/lib/_stream_transform.js | 205 - .../readable-stream/lib/_stream_writable.js | 371 - .../node_modules/string_decoder/.npmignore | 1 - .../node_modules/string_decoder/LICENSE | 20 - .../node_modules/string_decoder/README.md | 7 - .../string_decoder/build/.npmignore | 1 - .../string_decoder/build/build.js | 94 - .../string_decoder/build/files.js | 36 - .../string_decoder/build/package.json | 12 - .../string_decoder/build/test-replacements.js | 24 - .../node_modules/string_decoder/index.js | 200 - .../node_modules/string_decoder/package.json | 32 - .../string_decoder/test/common.js | 200 - .../test/simple/test-string-decoder-end.js | 75 - .../test/simple/test-string-decoder.js | 163 - .../node_modules/readable-stream/package.json | 38 - .../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-minify-css/package.json | 46 - .../gulp-minify-css/test/fixture/index.css | 81 - node_modules/gulp-minify-css/test/minify.js | 64 - node_modules/gulp-sass/.npmignore | 15 - node_modules/gulp-sass/.travis.yml | 3 - node_modules/gulp-sass/LICENSE | 20 - node_modules/gulp-sass/README.md | 73 - node_modules/gulp-sass/index.js | 62 - .../gulp-sass/node_modules/.bin/node-sass | 1 - .../node_modules/gulp-util/.npmignore | 6 - .../node_modules/gulp-util/.travis.yml | 6 - .../gulp-sass/node_modules/gulp-util/LICENSE | 20 - .../node_modules/gulp-util/README.md | 166 - .../gulp-sass/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 | 297 - .../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 | 10 - .../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 | 85 - .../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 | 768 - .../node_modules/readable-stream/duplex.js | 1 - .../node_modules/readable-stream/float.patch | 68 - .../readable-stream/lib/_stream_duplex.js | 69 - .../lib/_stream_passthrough.js | 41 - .../readable-stream/lib/_stream_readable.js | 927 - .../readable-stream/lib/_stream_transform.js | 205 - .../readable-stream/lib/_stream_writable.js | 371 - .../node_modules/string_decoder/.npmignore | 1 - .../node_modules/string_decoder/LICENSE | 20 - .../node_modules/string_decoder/README.md | 7 - .../string_decoder/build/.npmignore | 1 - .../string_decoder/build/build.js | 94 - .../string_decoder/build/files.js | 36 - .../string_decoder/build/package.json | 12 - .../string_decoder/build/test-replacements.js | 24 - .../node_modules/string_decoder/index.js | 200 - .../node_modules/string_decoder/package.json | 32 - .../string_decoder/test/common.js | 200 - .../test/simple/test-string-decoder-end.js | 75 - .../test/simple/test-string-decoder.js | 163 - .../node_modules/readable-stream/package.json | 38 - .../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/map-stream/.npmignore | 3 - .../node_modules/map-stream/.travis.yml | 4 - .../gulp-sass/node_modules/map-stream/LICENCE | 22 - .../map-stream/examples/pretty.js | 26 - .../node_modules/map-stream/index.js | 145 - .../node_modules/map-stream/package.json | 34 - .../node_modules/map-stream/readme.markdown | 37 - .../map-stream/test/simple-map.asynct.js | 318 - .../node_modules/node-sass/.editorconfig | 11 - .../node_modules/node-sass/.gitmodules | 3 - .../node_modules/node-sass/.jshintignore | 1 - .../node_modules/node-sass/.jshintrc | 15 - .../node_modules/node-sass/.npmignore | 1 - .../node_modules/node-sass/.travis.yml | 3 - .../node_modules/node-sass/CONTRIBUTING.md | 6 - .../gulp-sass/node_modules/node-sass/LICENSE | 20 - .../node_modules/node-sass/README.md | 189 - .../bin/darwin-x64-v8-3.14/binding.node | Bin 1304540 -> 0 bytes .../bin/darwin-x64-v8-3.22/binding.node | Bin 1309548 -> 0 bytes .../bin/linux-ia32-v8-3.14/binding.node | Bin 1171214 -> 0 bytes .../bin/linux-x64-v8-3.14/binding.node | Bin 1189254 -> 0 bytes .../node_modules/node-sass/bin/node-sass | 15 - .../bin/win32-ia32-v8-3.14/binding.node | Bin 556032 -> 0 bytes .../bin/win32-x64-v8-3.14/binding.node | Bin 677888 -> 0 bytes .../node_modules/node-sass/binding.cpp | 208 - .../node_modules/node-sass/binding.gyp | 59 - .../gulp-sass/node_modules/node-sass/build.js | 101 - .../node_modules/node-sass/build/Makefile | 350 - .../Release/.deps/Release/binding.node.d | 1 - .../Release/obj.target/binding/binding.o.d | 34 - .../obj.target/binding/libsass/ast.o.d | 28 - .../obj.target/binding/libsass/base64vlq.o.d | 5 - .../obj.target/binding/libsass/bind.o.d | 31 - .../obj.target/binding/libsass/constants.o.d | 5 - .../obj.target/binding/libsass/context.o.d | 48 - .../binding/libsass/contextualize.o.d | 35 - .../obj.target/binding/libsass/copy_c_str.o.d | 4 - .../binding/libsass/error_handling.o.d | 10 - .../obj.target/binding/libsass/eval.o.d | 36 - .../obj.target/binding/libsass/expand.o.d | 35 - .../obj.target/binding/libsass/extend.o.d | 32 - .../obj.target/binding/libsass/file.o.d | 28 - .../obj.target/binding/libsass/functions.o.d | 37 - .../obj.target/binding/libsass/inspect.o.d | 28 - .../binding/libsass/output_compressed.o.d | 30 - .../binding/libsass/output_nested.o.d | 30 - .../obj.target/binding/libsass/parser.o.d | 34 - .../obj.target/binding/libsass/prelexer.o.d | 6 - .../obj.target/binding/libsass/sass.o.d | 26 - .../binding/libsass/sass_interface.o.d | 28 - .../obj.target/binding/libsass/source_map.o.d | 27 - .../obj.target/binding/libsass/to_c.o.d | 19 - .../obj.target/binding/libsass/to_string.o.d | 29 - .../obj.target/binding/libsass/units.o.d | 5 - .../binding/sass_context_wrapper.o.d | 34 - .../node-sass/build/Release/linker.lock | 0 .../Release/obj.target/binding/binding.o | Bin 144412 -> 0 bytes .../Release/obj.target/binding/libsass/ast.o | Bin 215832 -> 0 bytes .../obj.target/binding/libsass/base64vlq.o | Bin 23464 -> 0 bytes .../Release/obj.target/binding/libsass/bind.o | Bin 430052 -> 0 bytes .../obj.target/binding/libsass/constants.o | Bin 25292 -> 0 bytes .../obj.target/binding/libsass/context.o | Bin 918252 -> 0 bytes .../binding/libsass/contextualize.o | Bin 403336 -> 0 bytes .../obj.target/binding/libsass/copy_c_str.o | Bin 3100 -> 0 bytes .../binding/libsass/error_handling.o | Bin 96276 -> 0 bytes .../Release/obj.target/binding/libsass/eval.o | Bin 1209700 -> 0 bytes .../obj.target/binding/libsass/expand.o | Bin 993712 -> 0 bytes .../obj.target/binding/libsass/extend.o | Bin 347048 -> 0 bytes .../Release/obj.target/binding/libsass/file.o | Bin 128900 -> 0 bytes .../obj.target/binding/libsass/functions.o | Bin 1202804 -> 0 bytes .../obj.target/binding/libsass/inspect.o | Bin 604572 -> 0 bytes .../binding/libsass/output_compressed.o | Bin 270240 -> 0 bytes .../binding/libsass/output_nested.o | Bin 242872 -> 0 bytes .../obj.target/binding/libsass/parser.o | Bin 1718884 -> 0 bytes .../obj.target/binding/libsass/prelexer.o | Bin 240656 -> 0 bytes .../Release/obj.target/binding/libsass/sass.o | Bin 276772 -> 0 bytes .../binding/libsass/sass_interface.o | Bin 374200 -> 0 bytes .../obj.target/binding/libsass/source_map.o | Bin 130084 -> 0 bytes .../Release/obj.target/binding/libsass/to_c.o | Bin 212528 -> 0 bytes .../obj.target/binding/libsass/to_string.o | Bin 163616 -> 0 bytes .../obj.target/binding/libsass/units.o | Bin 20204 -> 0 bytes .../obj.target/binding/sass_context_wrapper.o | Bin 66680 -> 0 bytes .../node-sass/build/binding.Makefile | 6 - .../node-sass/build/binding.target.mk | 177 - .../node_modules/node-sass/build/config.gypi | 119 - .../node_modules/node-sass/build/gyp-mac-tool | 265 - .../node-sass/examples/middleware.js | 23 - .../node-sass/examples/public/.npmignore | 1 - .../node_modules/node-sass/examples/test.scss | 13 - .../node_modules/node-sass/lib/cli.js | 156 - .../node_modules/node-sass/lib/middleware.js | 207 - .../node_modules/node-sass/lib/render.js | 53 - .../node_modules/node-sass/libsass/.npmignore | 50 - .../node-sass/libsass/.travis.yml | 18 - .../node_modules/node-sass/libsass/COPYING | 25 - .../node_modules/node-sass/libsass/INSTALL | 370 - .../node_modules/node-sass/libsass/LICENSE | 25 - .../node_modules/node-sass/libsass/Makefile | 60 - .../node-sass/libsass/Makefile.am | 57 - .../node_modules/node-sass/libsass/Readme.md | 113 - .../node_modules/node-sass/libsass/ast.cpp | 76 - .../node_modules/node-sass/libsass/ast.hpp | 1234 - .../node-sass/libsass/ast_def_macros.hpp | 16 - .../node-sass/libsass/ast_factory.hpp | 82 - .../node-sass/libsass/ast_fwd_decl.hpp | 66 - .../node-sass/libsass/backtrace.hpp | 61 - .../node-sass/libsass/base64vlq.cpp | 43 - .../node-sass/libsass/base64vlq.hpp | 28 - .../node_modules/node-sass/libsass/bind.cpp | 160 - .../node_modules/node-sass/libsass/bind.hpp | 18 - .../node-sass/libsass/color_names.hpp | 311 - .../node-sass/libsass/configure.ac | 73 - .../node-sass/libsass/constants.cpp | 132 - .../node-sass/libsass/constants.hpp | 132 - .../node-sass/libsass/context.cpp | 394 - .../node-sass/libsass/context.hpp | 93 - .../node-sass/libsass/contextualize.cpp | 137 - .../node-sass/libsass/contextualize.hpp | 65 - .../node-sass/libsass/copy_c_str.cpp | 13 - .../node-sass/libsass/copy_c_str.hpp | 5 - .../node-sass/libsass/environment.hpp | 56 - .../node-sass/libsass/error_handling.cpp | 28 - .../node-sass/libsass/error_handling.hpp | 28 - .../node_modules/node-sass/libsass/eval.cpp | 853 - .../node_modules/node-sass/libsass/eval.hpp | 77 - .../node_modules/node-sass/libsass/expand.cpp | 334 - .../node_modules/node-sass/libsass/expand.hpp | 76 - .../node_modules/node-sass/libsass/extconf.rb | 6 - .../node_modules/node-sass/libsass/extend.cpp | 116 - .../node_modules/node-sass/libsass/extend.hpp | 47 - .../node_modules/node-sass/libsass/file.cpp | 144 - .../node_modules/node-sass/libsass/file.hpp | 16 - .../node-sass/libsass/functions.cpp | 978 - .../node-sass/libsass/functions.hpp | 141 - .../node-sass/libsass/inspect.cpp | 640 - .../node-sass/libsass/inspect.hpp | 99 - .../node-sass/libsass/kwd_arg_macros.hpp | 23 - .../node-sass/libsass/m4/.gitkeep | 0 .../node-sass/libsass/mapping.hpp | 17 - .../node-sass/libsass/memory_manager.hpp | 54 - .../node-sass/libsass/operation.hpp | 141 - .../node-sass/libsass/output_compressed.cpp | 249 - .../node-sass/libsass/output_compressed.hpp | 87 - .../node-sass/libsass/output_nested.cpp | 225 - .../node-sass/libsass/output_nested.hpp | 98 - .../node_modules/node-sass/libsass/parser.cpp | 1610 -- .../node_modules/node-sass/libsass/parser.hpp | 239 - .../node-sass/libsass/position.hpp | 22 - .../node-sass/libsass/prelexer.cpp | 479 - .../node-sass/libsass/prelexer.hpp | 472 - .../node_modules/node-sass/libsass/sass.cpp | 154 - .../node_modules/node-sass/libsass/sass.h | 130 - .../node-sass/libsass/sass_interface.cpp | 187 - .../node-sass/libsass/sass_interface.h | 74 - .../node-sass/libsass/sassc++.cpp | 40 - .../node-sass/libsass/source_map.cpp | 99 - .../node-sass/libsass/source_map.hpp | 49 - .../node-sass/libsass/support/libsass.pc.in | 11 - .../node-sass/libsass/test-driver | 127 - .../node_modules/node-sass/libsass/to_c.cpp | 47 - .../node_modules/node-sass/libsass/to_c.hpp | 44 - .../node-sass/libsass/to_string.cpp | 29 - .../node-sass/libsass/to_string.hpp | 32 - .../node_modules/node-sass/libsass/token.hpp | 32 - .../node_modules/node-sass/libsass/travis.sh | 15 - .../node_modules/node-sass/libsass/units.cpp | 44 - .../node_modules/node-sass/libsass/units.hpp | 11 - .../node-sass/node_modules/.bin/_mocha | 1 - .../node-sass/node_modules/.bin/mocha | 1 - .../node-sass/node_modules/chalk/chalk.js | 64 - .../node_modules/ansi-styles/ansi-styles.js | 29 - .../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 - .../node-sass/node_modules/chalk/package.json | 61 - .../node-sass/node_modules/chalk/readme.md | 134 - .../node-sass/node_modules/mkdirp/.npmignore | 2 - .../node-sass/node_modules/mkdirp/.travis.yml | 5 - .../node-sass/node_modules/mkdirp/LICENSE | 21 - .../node_modules/mkdirp/examples/pow.js | 6 - .../node-sass/node_modules/mkdirp/index.js | 82 - .../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 - .../node_modules/mkdirp/test/perm.js | 32 - .../node_modules/mkdirp/test/perm_sync.js | 39 - .../node_modules/mkdirp/test/race.js | 41 - .../node-sass/node_modules/mkdirp/test/rel.js | 32 - .../node_modules/mkdirp/test/return.js | 25 - .../node_modules/mkdirp/test/return_sync.js | 24 - .../node_modules/mkdirp/test/root.js | 18 - .../node_modules/mkdirp/test/sync.js | 32 - .../node_modules/mkdirp/test/umask.js | 28 - .../node_modules/mkdirp/test/umask_sync.js | 32 - .../node-sass/node_modules/mocha/Readme.md | 124 - .../node-sass/node_modules/mocha/bin/_mocha | 448 - .../node-sass/node_modules/mocha/bin/mocha | 51 - .../node_modules/mocha/images/error.png | Bin 412 -> 0 bytes .../node_modules/mocha/images/ok.png | Bin 388 -> 0 bytes .../node-sass/node_modules/mocha/index.js | 4 - .../node_modules/mocha/lib/browser/debug.js | 5 - .../node_modules/mocha/lib/browser/events.js | 178 - .../node_modules/mocha/lib/browser/fs.js | 0 .../node_modules/mocha/lib/browser/path.js | 0 .../mocha/lib/browser/progress.js | 125 - .../node_modules/mocha/lib/browser/tty.js | 13 - .../node_modules/mocha/lib/context.js | 69 - .../node-sass/node_modules/mocha/lib/hook.js | 49 - .../node_modules/mocha/lib/interfaces/bdd.js | 135 - .../mocha/lib/interfaces/exports.js | 60 - .../mocha/lib/interfaces/index.js | 5 - .../mocha/lib/interfaces/qunit.js | 122 - .../node_modules/mocha/lib/interfaces/tdd.js | 138 - .../node-sass/node_modules/mocha/lib/mocha.js | 317 - .../node-sass/node_modules/mocha/lib/ms.js | 111 - .../node_modules/mocha/lib/reporters/base.js | 401 - .../node_modules/mocha/lib/reporters/doc.js | 56 - .../node_modules/mocha/lib/reporters/dot.js | 62 - .../mocha/lib/reporters/html-cov.js | 51 - .../node_modules/mocha/lib/reporters/html.js | 253 - .../node_modules/mocha/lib/reporters/index.js | 19 - .../mocha/lib/reporters/json-cov.js | 153 - .../mocha/lib/reporters/json-stream.js | 61 - .../node_modules/mocha/lib/reporters/json.js | 70 - .../mocha/lib/reporters/landing.js | 97 - .../node_modules/mocha/lib/reporters/list.js | 64 - .../mocha/lib/reporters/markdown.js | 91 - .../node_modules/mocha/lib/reporters/min.js | 38 - .../node_modules/mocha/lib/reporters/nyan.js | 260 - .../mocha/lib/reporters/progress.js | 86 - .../node_modules/mocha/lib/reporters/spec.js | 87 - .../node_modules/mocha/lib/reporters/tap.js | 73 - .../mocha/lib/reporters/teamcity.js | 65 - .../lib/reporters/templates/coverage.jade | 50 - .../mocha/lib/reporters/templates/menu.jade | 13 - .../mocha/lib/reporters/templates/script.html | 34 - .../mocha/lib/reporters/templates/style.html | 320 - .../node_modules/mocha/lib/reporters/xunit.js | 115 - .../node_modules/mocha/lib/runnable.js | 217 - .../node_modules/mocha/lib/runner.js | 561 - .../node-sass/node_modules/mocha/lib/suite.js | 296 - .../node_modules/mocha/lib/template.html | 18 - .../node-sass/node_modules/mocha/lib/test.js | 32 - .../node-sass/node_modules/mocha/lib/utils.js | 281 - .../node-sass/node_modules/mocha/mocha.css | 260 - .../node-sass/node_modules/mocha/mocha.js | 5554 ---- .../node_modules/mocha/node_modules/.bin/jade | 1 - .../mocha/node_modules/commander/.npmignore | 4 - .../mocha/node_modules/commander/.travis.yml | 4 - .../mocha/node_modules/commander/History.md | 107 - .../mocha/node_modules/commander/Makefile | 7 - .../mocha/node_modules/commander/Readme.md | 262 - .../mocha/node_modules/commander/index.js | 2 - .../node_modules/commander/lib/commander.js | 1026 - .../mocha/node_modules/commander/package.json | 39 - .../mocha/node_modules/debug/Readme.md | 115 - .../mocha/node_modules/debug/debug.js | 137 - .../mocha/node_modules/debug/index.js | 5 - .../mocha/node_modules/debug/lib/debug.js | 147 - .../mocha/node_modules/debug/package.json | 46 - .../mocha/node_modules/diff/README.md | 101 - .../mocha/node_modules/diff/diff.js | 354 - .../mocha/node_modules/diff/package.json | 51 - .../mocha/node_modules/glob/.npmignore | 2 - .../mocha/node_modules/glob/.travis.yml | 3 - .../mocha/node_modules/glob/LICENSE | 27 - .../mocha/node_modules/glob/README.md | 250 - .../mocha/node_modules/glob/examples/g.js | 9 - .../node_modules/glob/examples/usr-local.js | 9 - .../mocha/node_modules/glob/glob.js | 675 - .../glob/node_modules/graceful-fs/.npmignore | 1 - .../glob/node_modules/graceful-fs/LICENSE | 27 - .../glob/node_modules/graceful-fs/README.md | 26 - .../node_modules/graceful-fs/graceful-fs.js | 159 - .../node_modules/graceful-fs/package.json | 49 - .../node_modules/graceful-fs/polyfills.js | 228 - .../node_modules/graceful-fs/test/open.js | 39 - .../glob/node_modules/inherits/LICENSE | 16 - .../glob/node_modules/inherits/README.md | 42 - .../glob/node_modules/inherits/inherits.js | 1 - .../node_modules/inherits/inherits_browser.js | 23 - .../glob/node_modules/inherits/package.json | 33 - .../glob/node_modules/inherits/test.js | 25 - .../glob/node_modules/minimatch/.npmignore | 1 - .../glob/node_modules/minimatch/LICENSE | 23 - .../glob/node_modules/minimatch/README.md | 218 - .../glob/node_modules/minimatch/minimatch.js | 1055 - .../node_modules/lru-cache/.npmignore | 1 - .../node_modules/lru-cache/CONTRIBUTORS | 14 - .../minimatch/node_modules/lru-cache/LICENSE | 23 - .../node_modules/lru-cache/README.md | 97 - .../node_modules/lru-cache/lib/lru-cache.js | 252 - .../node_modules/lru-cache/package.json | 33 - .../node_modules/lru-cache/test/basic.js | 369 - .../node_modules/lru-cache/test/foreach.js | 52 - .../lru-cache/test/memory-leak.js | 50 - .../minimatch/node_modules/sigmund/LICENSE | 27 - .../minimatch/node_modules/sigmund/README.md | 53 - .../minimatch/node_modules/sigmund/bench.js | 283 - .../node_modules/sigmund/package.json | 42 - .../minimatch/node_modules/sigmund/sigmund.js | 39 - .../node_modules/sigmund/test/basic.js | 24 - .../glob/node_modules/minimatch/package.json | 40 - .../glob/node_modules/minimatch/test/basic.js | 399 - .../minimatch/test/brace-expand.js | 33 - .../node_modules/minimatch/test/caching.js | 14 - .../node_modules/minimatch/test/defaults.js | 274 - .../test/extglob-ending-with-state-char.js | 8 - .../mocha/node_modules/glob/package.json | 40 - .../mocha/node_modules/glob/test/00-setup.js | 176 - .../node_modules/glob/test/bash-comparison.js | 63 - .../node_modules/glob/test/bash-results.json | 350 - .../mocha/node_modules/glob/test/cwd-test.js | 55 - .../node_modules/glob/test/globstar-match.js | 19 - .../mocha/node_modules/glob/test/mark.js | 74 - .../node_modules/glob/test/nocase-nomagic.js | 113 - .../node_modules/glob/test/pause-resume.js | 73 - .../node_modules/glob/test/root-nomount.js | 39 - .../mocha/node_modules/glob/test/root.js | 46 - .../mocha/node_modules/glob/test/stat.js | 32 - .../node_modules/glob/test/zz-cleanup.js | 11 - .../mocha/node_modules/growl/History.md | 63 - .../mocha/node_modules/growl/Readme.md | 99 - .../mocha/node_modules/growl/lib/growl.js | 234 - .../mocha/node_modules/growl/package.json | 14 - .../mocha/node_modules/growl/test.js | 20 - .../mocha/node_modules/jade/.npmignore | 15 - .../mocha/node_modules/jade/LICENSE | 22 - .../mocha/node_modules/jade/bin/jade | 147 - .../mocha/node_modules/jade/index.js | 4 - .../mocha/node_modules/jade/jade.js | 3586 --- .../mocha/node_modules/jade/jade.md | 510 - .../mocha/node_modules/jade/jade.min.js | 2 - .../mocha/node_modules/jade/lib/compiler.js | 642 - .../mocha/node_modules/jade/lib/doctypes.js | 18 - .../mocha/node_modules/jade/lib/filters.js | 97 - .../node_modules/jade/lib/inline-tags.js | 28 - .../mocha/node_modules/jade/lib/jade.js | 237 - .../mocha/node_modules/jade/lib/lexer.js | 771 - .../node_modules/jade/lib/nodes/attrs.js | 77 - .../jade/lib/nodes/block-comment.js | 33 - .../node_modules/jade/lib/nodes/block.js | 121 - .../mocha/node_modules/jade/lib/nodes/case.js | 43 - .../mocha/node_modules/jade/lib/nodes/code.js | 35 - .../node_modules/jade/lib/nodes/comment.js | 32 - .../node_modules/jade/lib/nodes/doctype.js | 29 - .../mocha/node_modules/jade/lib/nodes/each.js | 35 - .../node_modules/jade/lib/nodes/filter.js | 35 - .../node_modules/jade/lib/nodes/index.js | 20 - .../node_modules/jade/lib/nodes/literal.js | 32 - .../node_modules/jade/lib/nodes/mixin.js | 36 - .../mocha/node_modules/jade/lib/nodes/node.js | 25 - .../mocha/node_modules/jade/lib/nodes/tag.js | 95 - .../mocha/node_modules/jade/lib/nodes/text.js | 36 - .../mocha/node_modules/jade/lib/parser.js | 710 - .../mocha/node_modules/jade/lib/runtime.js | 174 - .../node_modules/jade/lib/self-closing.js | 19 - .../mocha/node_modules/jade/lib/utils.js | 49 - .../jade/node_modules/mkdirp/.gitignore.orig | 2 - .../jade/node_modules/mkdirp/.gitignore.rej | 5 - .../jade/node_modules/mkdirp/.npmignore | 2 - .../jade/node_modules/mkdirp/LICENSE | 21 - .../jade/node_modules/mkdirp/README.markdown | 54 - .../jade/node_modules/mkdirp/examples/pow.js | 6 - .../node_modules/mkdirp/examples/pow.js.orig | 6 - .../node_modules/mkdirp/examples/pow.js.rej | 19 - .../jade/node_modules/mkdirp/index.js | 79 - .../jade/node_modules/mkdirp/package.json | 37 - .../jade/node_modules/mkdirp/test/chmod.js | 38 - .../jade/node_modules/mkdirp/test/clobber.js | 37 - .../jade/node_modules/mkdirp/test/mkdirp.js | 28 - .../jade/node_modules/mkdirp/test/perm.js | 32 - .../node_modules/mkdirp/test/perm_sync.js | 39 - .../jade/node_modules/mkdirp/test/race.js | 41 - .../jade/node_modules/mkdirp/test/rel.js | 32 - .../jade/node_modules/mkdirp/test/sync.js | 27 - .../jade/node_modules/mkdirp/test/umask.js | 28 - .../node_modules/mkdirp/test/umask_sync.js | 27 - .../mocha/node_modules/jade/package.json | 48 - .../mocha/node_modules/jade/runtime.js | 179 - .../mocha/node_modules/jade/runtime.min.js | 1 - .../mocha/node_modules/jade/test.jade | 7 - .../mocha/node_modules/jade/testing/head.jade | 5 - .../node_modules/jade/testing/index.jade | 22 - .../mocha/node_modules/jade/testing/index.js | 11 - .../node_modules/jade/testing/layout.jade | 6 - .../mocha/node_modules/jade/testing/user.jade | 7 - .../mocha/node_modules/jade/testing/user.js | 27 - .../node-sass/node_modules/mocha/package.json | 60 - .../node-sass/node_modules/nan/LICENSE | 43 - .../node-sass/node_modules/nan/README.md | 792 - .../node_modules/nan/build/config.gypi | 38 - .../node_modules/nan/include_dirs.js | 1 - .../node-sass/node_modules/nan/nan.h | 1102 - .../node-sass/node_modules/nan/package.json | 41 - .../node-sass/node_modules/node-watch/LICENSE | 22 - .../node_modules/node-watch/README.md | 74 - .../node_modules/node-watch/index.js | 1 - .../node_modules/node-watch/lib/watch.js | 245 - .../node_modules/node-watch/package.json | 29 - .../node_modules/optimist/.travis.yml | 4 - .../node-sass/node_modules/optimist/LICENSE | 21 - .../node_modules/optimist/example/bool.js | 10 - .../optimist/example/boolean_double.js | 7 - .../optimist/example/boolean_single.js | 7 - .../optimist/example/default_hash.js | 8 - .../optimist/example/default_singles.js | 7 - .../node_modules/optimist/example/divide.js | 8 - .../optimist/example/line_count.js | 20 - .../optimist/example/line_count_options.js | 29 - .../optimist/example/line_count_wrap.js | 29 - .../node_modules/optimist/example/nonopt.js | 4 - .../node_modules/optimist/example/reflect.js | 2 - .../node_modules/optimist/example/short.js | 3 - .../node_modules/optimist/example/string.js | 11 - .../optimist/example/usage-options.js | 19 - .../node_modules/optimist/example/xup.js | 10 - .../node-sass/node_modules/optimist/index.js | 343 - .../node_modules/minimist/.travis.yml | 4 - .../optimist/node_modules/minimist/LICENSE | 18 - .../node_modules/minimist/example/parse.js | 2 - .../optimist/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 | 297 - .../minimist/test/parse_modified.js | 9 - .../node_modules/minimist/test/short.js | 67 - .../node_modules/minimist/test/whitespace.js | 8 - .../optimist/node_modules/wordwrap/.npmignore | 1 - .../node_modules/wordwrap/README.markdown | 70 - .../node_modules/wordwrap/example/center.js | 10 - .../node_modules/wordwrap/example/meat.js | 3 - .../optimist/node_modules/wordwrap/index.js | 76 - .../node_modules/wordwrap/package.json | 45 - .../node_modules/wordwrap/test/break.js | 30 - .../node_modules/wordwrap/test/idleness.txt | 63 - .../node_modules/wordwrap/test/wrap.js | 31 - .../node_modules/optimist/package.json | 47 - .../node_modules/optimist/readme.markdown | 513 - .../node-sass/node_modules/optimist/test/_.js | 71 - .../node_modules/optimist/test/_/argv.js | 2 - .../node_modules/optimist/test/_/bin.js | 3 - .../node_modules/optimist/test/dash.js | 31 - .../node_modules/optimist/test/parse.js | 446 - .../optimist/test/parse_modified.js | 14 - .../node_modules/optimist/test/short.js | 16 - .../node_modules/optimist/test/usage.js | 292 - .../node_modules/optimist/test/whitespace.js | 8 - .../node_modules/node-sass/package.json | 58 - .../gulp-sass/node_modules/node-sass/sass.js | 101 - .../node-sass/sass_context_wrapper.cpp | 22 - .../node-sass/sass_context_wrapper.h | 21 - .../node-sass/scripts/prepublish.sh | 12 - .../node_modules/node-sass/test/cli.js | 159 - .../node-sass/test/functions/colorBlue.scss | 3 - .../node-sass/test/include_path.scss | 4 - .../node-sass/test/large_test.scss | 11869 -------- .../node_modules/node-sass/test/lib/vars.scss | 1 - .../node-sass/test/mem_test_render.js | 19 - .../node-sass/test/mem_test_renderSync.js | 12 - .../node_modules/node-sass/test/sample.scss | 13 - .../node-sass/test/source_comments_spec.js | 36 - .../node_modules/node-sass/test/test.js | 174 - node_modules/gulp-sass/package.json | 42 - .../gulp-sass/test/ref/inheritance.css | 10 - node_modules/gulp-sass/test/ref/mixins.css | 8 - node_modules/gulp-sass/test/ref/nesting.css | 9 - node_modules/gulp-sass/test/ref/variables.css | 8 - .../gulp-sass/test/scss/includes/_cats.scss | 2 - .../gulp-sass/test/scss/inheritance.scss | 16 - node_modules/gulp-sass/test/scss/mixins.scss | 17 - node_modules/gulp-sass/test/scss/nesting.scss | 14 - .../gulp-sass/test/scss/variables.scss | 14 - node_modules/gulp-sass/test/test.js | 109 - node_modules/gulp-uglify/.jshintrc | 18 - node_modules/gulp-uglify/.npmignore | 3 - node_modules/gulp-uglify/.travis.yml | 4 - node_modules/gulp-uglify/CHANGELOG.md | 8 - node_modules/gulp-uglify/LICENSE.md | 20 - node_modules/gulp-uglify/README.md | 81 - node_modules/gulp-uglify/index.js | 70 - node_modules/gulp-uglify/lib/error.js | 7 - .../gulp-uglify/node_modules/.bin/uglifyjs | 1 - .../node_modules/deepmerge/.npmignore | 4 - .../node_modules/deepmerge/README.markdown | 64 - .../node_modules/deepmerge/example/merge.js | 5 - .../node_modules/deepmerge/index.js | 40 - .../node_modules/deepmerge/license.txt | 21 - .../node_modules/deepmerge/package.json | 35 - .../node_modules/deepmerge/test/merge.js | 211 - .../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 - .../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/through2/.jshintrc | 59 - .../node_modules/through2/.npmignore | 1 - .../node_modules/through2/.travis.yml | 17 - .../gulp-uglify/node_modules/through2/LICENSE | 39 - .../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 | 38 - .../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 - .../node_modules/uglify-js/.npmignore | 2 - .../node_modules/uglify-js/.travis.yml | 6 - .../node_modules/uglify-js/LICENSE | 29 - .../node_modules/uglify-js/README.md | 640 - .../node_modules/uglify-js/bin/uglifyjs | 458 - .../node_modules/uglify-js/lib/ast.js | 984 - .../node_modules/uglify-js/lib/compress.js | 2374 -- .../node_modules/uglify-js/lib/mozilla-ast.js | 267 - .../node_modules/uglify-js/lib/output.js | 1300 - .../node_modules/uglify-js/lib/parse.js | 1457 - .../node_modules/uglify-js/lib/scope.js | 567 - .../node_modules/uglify-js/lib/sourcemap.js | 87 - .../node_modules/uglify-js/lib/transform.js | 218 - .../node_modules/uglify-js/lib/utils.js | 302 - .../uglify-js/node_modules/async/LICENSE | 19 - .../uglify-js/node_modules/async/README.md | 1425 - .../node_modules/async/component.json | 11 - .../uglify-js/node_modules/async/lib/async.js | 958 - .../uglify-js/node_modules/async/package.json | 43 - .../node_modules/optimist/.travis.yml | 4 - .../uglify-js/node_modules/optimist/LICENSE | 21 - .../node_modules/optimist/example/bool.js | 10 - .../optimist/example/boolean_double.js | 7 - .../optimist/example/boolean_single.js | 7 - .../optimist/example/default_hash.js | 8 - .../optimist/example/default_singles.js | 7 - .../node_modules/optimist/example/divide.js | 8 - .../optimist/example/line_count.js | 20 - .../optimist/example/line_count_options.js | 29 - .../optimist/example/line_count_wrap.js | 29 - .../node_modules/optimist/example/nonopt.js | 4 - .../node_modules/optimist/example/reflect.js | 2 - .../node_modules/optimist/example/short.js | 3 - .../node_modules/optimist/example/string.js | 11 - .../optimist/example/usage-options.js | 19 - .../node_modules/optimist/example/xup.js | 10 - .../uglify-js/node_modules/optimist/index.js | 478 - .../optimist/node_modules/wordwrap/.npmignore | 1 - .../node_modules/wordwrap/README.markdown | 70 - .../node_modules/wordwrap/example/center.js | 10 - .../node_modules/wordwrap/example/meat.js | 3 - .../optimist/node_modules/wordwrap/index.js | 76 - .../node_modules/wordwrap/package.json | 45 - .../node_modules/wordwrap/test/break.js | 30 - .../node_modules/wordwrap/test/idleness.txt | 63 - .../node_modules/wordwrap/test/wrap.js | 31 - .../node_modules/optimist/package.json | 46 - .../node_modules/optimist/readme.markdown | 487 - .../uglify-js/node_modules/optimist/test/_.js | 71 - .../node_modules/optimist/test/_/argv.js | 2 - .../node_modules/optimist/test/_/bin.js | 3 - .../node_modules/optimist/test/parse.js | 446 - .../node_modules/optimist/test/usage.js | 292 - .../node_modules/source-map/.npmignore | 2 - .../node_modules/source-map/.travis.yml | 4 - .../node_modules/source-map/CHANGELOG.md | 130 - .../uglify-js/node_modules/source-map/LICENSE | 28 - .../source-map/Makefile.dryice.js | 166 - .../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 - .../uglify-to-browserify/.npmignore | 14 - .../uglify-to-browserify/.travis.yml | 3 - .../node_modules/uglify-to-browserify/LICENSE | 19 - .../uglify-to-browserify/README.md | 15 - .../uglify-to-browserify/index.js | 49 - .../uglify-to-browserify/package.json | 30 - .../uglify-to-browserify/test/index.js | 22 - .../node_modules/uglify-js/package.json | 45 - .../uglify-js/test/compress/arrays.js | 74 - .../uglify-js/test/compress/blocks.js | 49 - .../uglify-js/test/compress/concat-strings.js | 22 - .../uglify-js/test/compress/conditionals.js | 234 - .../uglify-js/test/compress/dead-code.js | 89 - .../uglify-js/test/compress/debugger.js | 24 - .../uglify-js/test/compress/drop-unused.js | 165 - .../uglify-js/test/compress/issue-105.js | 25 - .../uglify-js/test/compress/issue-12.js | 11 - .../uglify-js/test/compress/issue-126.js | 24 - .../uglify-js/test/compress/issue-143.js | 48 - .../uglify-js/test/compress/issue-22.js | 17 - .../uglify-js/test/compress/issue-267.js | 11 - .../uglify-js/test/compress/issue-269.js | 66 - .../uglify-js/test/compress/issue-44.js | 31 - .../uglify-js/test/compress/issue-59.js | 30 - .../uglify-js/test/compress/labels.js | 163 - .../uglify-js/test/compress/loops.js | 123 - .../uglify-js/test/compress/negate-iife.js | 76 - .../uglify-js/test/compress/properties.js | 54 - .../uglify-js/test/compress/sequences.js | 163 - .../uglify-js/test/compress/switch.js | 260 - .../uglify-js/test/compress/typeof.js | 25 - .../node_modules/uglify-js/test/run-tests.js | 179 - .../node_modules/uglify-js/tools/node.js | 182 - .../gulp-uglify/node_modules/vinyl/.npmignore | 6 - .../node_modules/vinyl/.travis.yml | 6 - .../gulp-uglify/node_modules/vinyl/LICENSE | 20 - .../gulp-uglify/node_modules/vinyl/README.md | 123 - .../gulp-uglify/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 - .../node_modules/vinyl/package.json | 51 - .../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-uglify/package.json | 46 - node_modules/gulp-uglify/test/err.js | 35 - node_modules/gulp-uglify/test/minify.js | 33 - node_modules/gulp-uglify/test/null.js | 30 - node_modules/gulp-uglify/test/streams.js | 45 - node_modules/gulp/.jshintrc | 12 - node_modules/gulp/.npmignore | 12 - node_modules/gulp/.travis.yml | 6 - node_modules/gulp/CHANGELOG.md | 128 - node_modules/gulp/LICENSE | 20 - node_modules/gulp/README.md | 77 - node_modules/gulp/bin/gulp.js | 202 - node_modules/gulp/completion/README.md | 12 - node_modules/gulp/completion/bash | 29 - node_modules/gulp/completion/zsh | 27 - node_modules/gulp/docs/API.md | 232 - node_modules/gulp/docs/CLI.md | 25 - node_modules/gulp/docs/FAQ.md | 50 - node_modules/gulp/docs/README.md | 30 - node_modules/gulp/docs/getting-started.md | 46 - .../combining-streams-to-handle-errors.md | 38 - .../recipes/mocha-test-runner-with-gulp.md | 69 - .../only-pass-through-changed-files.md | 27 - .../gulp/docs/recipes/pass-params-from-cli.md | 28 - .../recipes/rebuild-only-files-that-change.md | 16 - .../docs/recipes/running-tasks-in-series.md | 34 - .../gulp/docs/recipes/specifying-a-cwd.md | 37 - .../using-coffee-script-for-gulpfile.md | 23 - .../recipes/using-external-config-file.md | 49 - .../using-multiple-sources-in-one-task.md | 17 - .../gulp/docs/writing-a-plugin/README.md | 53 - .../writing-a-plugin/dealing-with-streams.md | 83 - .../gulp/docs/writing-a-plugin/guidelines.md | 97 - .../writing-a-plugin/readme-conventions.md | 218 - .../gulp/docs/writing-a-plugin/testing.md | 95 - .../docs/writing-a-plugin/using-buffers.md | 72 - node_modules/gulp/gulpfile.js | 27 - node_modules/gulp/index.js | 51 - node_modules/gulp/lib/completion.js | 16 - node_modules/gulp/lib/taskTree.js | 11 - node_modules/gulp/node_modules/.bin/semver | 1 - .../gulp/node_modules/archy/.travis.yml | 4 - .../gulp/node_modules/archy/README.markdown | 92 - .../gulp/node_modules/archy/examples/beep.js | 24 - .../node_modules/archy/examples/multi_line.js | 25 - node_modules/gulp/node_modules/archy/index.js | 35 - .../gulp/node_modules/archy/package.json | 49 - .../gulp/node_modules/archy/test/beep.js | 40 - .../node_modules/archy/test/multi_line.js | 45 - .../node_modules/archy/test/non_unicode.js | 40 - .../gulp/node_modules/deprecated/.npmignore | 6 - .../gulp/node_modules/deprecated/.travis.yml | 6 - .../gulp/node_modules/deprecated/LICENSE | 20 - .../gulp/node_modules/deprecated/README.md | 51 - .../gulp/node_modules/deprecated/index.js | 39 - .../gulp/node_modules/deprecated/package.json | 50 - .../node_modules/deprecated/test/field.js | 44 - .../node_modules/deprecated/test/method.js | 32 - .../gulp/node_modules/findup-sync/.jshintrc | 16 - .../gulp/node_modules/findup-sync/.npmignore | 0 .../node_modules/findup-sync/Gruntfile.js | 25 - .../gulp/node_modules/findup-sync/LICENSE-MIT | 22 - .../gulp/node_modules/findup-sync/README.md | 44 - .../findup-sync/lib/findup-sync.js | 46 - .../findup-sync/node_modules/glob/.npmignore | 2 - .../findup-sync/node_modules/glob/.travis.yml | 3 - .../findup-sync/node_modules/glob/LICENSE | 27 - .../findup-sync/node_modules/glob/README.md | 233 - .../node_modules/glob/examples/g.js | 9 - .../node_modules/glob/examples/usr-local.js | 9 - .../findup-sync/node_modules/glob/glob.js | 643 - .../glob/node_modules/graceful-fs/.npmignore | 1 - .../glob/node_modules/graceful-fs/LICENSE | 27 - .../glob/node_modules/graceful-fs/README.md | 33 - .../node_modules/graceful-fs/graceful-fs.js | 442 - .../node_modules/graceful-fs/package.json | 49 - .../node_modules/graceful-fs/test/open.js | 46 - .../node_modules/graceful-fs/test/ulimit.js | 158 - .../glob/node_modules/inherits/README.md | 51 - .../glob/node_modules/inherits/inherits.js | 29 - .../glob/node_modules/inherits/package.json | 30 - .../glob/node_modules/minimatch/.npmignore | 1 - .../glob/node_modules/minimatch/LICENSE | 23 - .../glob/node_modules/minimatch/README.md | 218 - .../glob/node_modules/minimatch/minimatch.js | 1055 - .../node_modules/lru-cache/.npmignore | 1 - .../node_modules/lru-cache/CONTRIBUTORS | 14 - .../minimatch/node_modules/lru-cache/LICENSE | 23 - .../node_modules/lru-cache/README.md | 97 - .../node_modules/lru-cache/lib/lru-cache.js | 252 - .../node_modules/lru-cache/package.json | 33 - .../node_modules/lru-cache/test/basic.js | 369 - .../node_modules/lru-cache/test/foreach.js | 52 - .../lru-cache/test/memory-leak.js | 50 - .../minimatch/node_modules/sigmund/LICENSE | 27 - .../minimatch/node_modules/sigmund/README.md | 53 - .../minimatch/node_modules/sigmund/bench.js | 283 - .../node_modules/sigmund/package.json | 42 - .../minimatch/node_modules/sigmund/sigmund.js | 39 - .../node_modules/sigmund/test/basic.js | 24 - .../glob/node_modules/minimatch/package.json | 40 - .../glob/node_modules/minimatch/test/basic.js | 399 - .../minimatch/test/brace-expand.js | 33 - .../node_modules/minimatch/test/caching.js | 14 - .../node_modules/minimatch/test/defaults.js | 274 - .../test/extglob-ending-with-state-char.js | 8 - .../node_modules/glob/package.json | 40 - .../node_modules/glob/test/00-setup.js | 176 - .../node_modules/glob/test/bash-comparison.js | 63 - .../node_modules/glob/test/bash-results.json | 348 - .../node_modules/glob/test/cwd-test.js | 55 - .../node_modules/glob/test/mark.js | 74 - .../node_modules/glob/test/nocase-nomagic.js | 113 - .../node_modules/glob/test/pause-resume.js | 73 - .../node_modules/glob/test/root-nomount.js | 39 - .../node_modules/glob/test/root.js | 46 - .../node_modules/glob/test/zz-cleanup.js | 11 - .../findup-sync/node_modules/lodash/README.md | 164 - .../node_modules/lodash/dist/lodash.compat.js | 5152 ---- .../lodash/dist/lodash.compat.min.js | 42 - .../node_modules/lodash/dist/lodash.js | 4983 ---- .../node_modules/lodash/dist/lodash.min.js | 40 - .../lodash/dist/lodash.underscore.js | 4307 --- .../lodash/dist/lodash.underscore.min.js | 34 - .../node_modules/lodash/package.json | 62 - .../node_modules/findup-sync/package.json | 48 - .../findup-sync/test/findup-sync_test.js | 48 - .../findup-sync/test/fixtures/a.txt | 0 .../findup-sync/test/fixtures/a/b/bar.txt | 0 .../findup-sync/test/fixtures/a/foo.txt | 0 .../findup-sync/test/fixtures/aaa.txt | 0 .../gulp/node_modules/gulp-util/.npmignore | 6 - .../gulp/node_modules/gulp-util/.travis.yml | 6 - .../gulp/node_modules/gulp-util/LICENSE | 20 - .../gulp/node_modules/gulp-util/README.md | 166 - .../gulp/node_modules/gulp-util/index.js | 18 - .../gulp/node_modules/gulp-util/lib/File.js | 1 - .../node_modules/gulp-util/lib/PluginError.js | 65 - .../gulp/node_modules/gulp-util/lib/beep.js | 3 - .../gulp/node_modules/gulp-util/lib/buffer.js | 15 - .../gulp/node_modules/gulp-util/lib/colors.js | 1 - .../node_modules/gulp-util/lib/combine.js | 11 - .../gulp/node_modules/gulp-util/lib/date.js | 1 - .../gulp/node_modules/gulp-util/lib/env.js | 4 - .../node_modules/gulp-util/lib/isBuffer.js | 7 - .../gulp/node_modules/gulp-util/lib/isNull.js | 3 - .../node_modules/gulp-util/lib/isStream.js | 5 - .../node_modules/gulp-util/lib/linefeed.js | 1 - .../gulp/node_modules/gulp-util/lib/log.js | 9 - .../gulp/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 | 62 - .../chalk/node_modules/ansi-styles/readme.md | 65 - .../chalk/node_modules/has-color/has-color.js | 24 - .../chalk/node_modules/has-color/package.json | 59 - .../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 | 68 - .../chalk/node_modules/strip-ansi/readme.md | 46 - .../gulp-util/node_modules/chalk/package.json | 65 - .../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 | 44 - .../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 | 49 - .../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 | 49 - .../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 | 49 - .../node_modules/lodash.defaults/package.json | 60 - .../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 | 49 - .../lodash._escapehtmlchar/package.json | 52 - .../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 | 49 - .../lodash._reunescapedhtml/package.json | 53 - .../node_modules/lodash.escape/package.json | 61 - .../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 | 49 - .../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 | 50 - .../lodash._shimkeys/package.json | 52 - .../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 | 50 - .../node_modules/lodash.isobject/package.json | 59 - .../node_modules/lodash.keys/package.json | 61 - .../lodash.templatesettings/LICENSE.txt | 22 - .../lodash.templatesettings/README.md | 15 - .../lodash.templatesettings/index.js | 73 - .../lodash.templatesettings/package.json | 60 - .../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 | 59 - .../node_modules/lodash.template/package.json | 65 - .../node_modules/multipipe/.npmignore | 1 - .../node_modules/multipipe/.travis.yml | 3 - .../node_modules/multipipe/History.md | 10 - .../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 | 41 - .../node_modules/duplexer2/test/tests.js | 161 - .../node_modules/multipipe/package.json | 30 - .../node_modules/multipipe/test/multipipe.js | 85 - .../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 | 768 - .../node_modules/readable-stream/duplex.js | 1 - .../node_modules/readable-stream/float.patch | 68 - .../readable-stream/lib/_stream_duplex.js | 69 - .../lib/_stream_passthrough.js | 41 - .../readable-stream/lib/_stream_readable.js | 927 - .../readable-stream/lib/_stream_transform.js | 205 - .../readable-stream/lib/_stream_writable.js | 371 - .../node_modules/string_decoder/.npmignore | 1 - .../node_modules/string_decoder/LICENSE | 20 - .../node_modules/string_decoder/README.md | 7 - .../string_decoder/build/.npmignore | 1 - .../string_decoder/build/build.js | 94 - .../string_decoder/build/files.js | 36 - .../string_decoder/build/package.json | 12 - .../string_decoder/build/test-replacements.js | 24 - .../node_modules/string_decoder/index.js | 200 - .../node_modules/string_decoder/package.json | 32 - .../string_decoder/test/common.js | 200 - .../test/simple/test-string-decoder-end.js | 75 - .../test/simple/test-string-decoder.js | 163 - .../node_modules/readable-stream/package.json | 38 - .../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 | 60 - .../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 | 76 - .../through2/node_modules/xtend/test.js | 63 - .../node_modules/through2/package.json | 48 - .../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 | 43 - .../vinyl/node_modules/clone-stats/test.js | 36 - .../gulp-util/node_modules/vinyl/package.json | 55 - .../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 - .../gulp/node_modules/gulp-util/package.json | 62 - .../gulp/node_modules/gulp-util/test/File.js | 46 - .../gulp-util/test/PluginError.js | 70 - .../gulp/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 - .../gulp/node_modules/gulp-util/test/date.js | 17 - .../gulp/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 - .../gulp/node_modules/gulp-util/test/log.js | 23 - .../gulp/node_modules/gulp-util/test/noop.js | 24 - .../gulp-util/test/replaceExtension.js | 34 - .../node_modules/gulp-util/test/template.js | 99 - .../gulp/node_modules/minimist/.travis.yml | 4 - .../gulp/node_modules/minimist/LICENSE | 18 - .../node_modules/minimist/example/parse.js | 2 - .../gulp/node_modules/minimist/index.js | 187 - .../gulp/node_modules/minimist/package.json | 54 - .../node_modules/minimist/readme.markdown | 73 - .../gulp/node_modules/minimist/test/dash.js | 24 - .../minimist/test/default_bool.js | 20 - .../gulp/node_modules/minimist/test/dotted.js | 16 - .../gulp/node_modules/minimist/test/long.js | 31 - .../gulp/node_modules/minimist/test/parse.js | 297 - .../minimist/test/parse_modified.js | 9 - .../gulp/node_modules/minimist/test/short.js | 67 - .../node_modules/minimist/test/whitespace.js | 8 - .../gulp/node_modules/orchestrator/.npmignore | 10 - .../gulp/node_modules/orchestrator/LICENSE | 20 - .../gulp/node_modules/orchestrator/README.md | 286 - .../gulp/node_modules/orchestrator/index.js | 304 - .../node_modules/orchestrator/lib/runTask.js | 66 - .../node_modules/sequencify/.npmignore | 9 - .../node_modules/sequencify/.travis.yml | 6 - .../node_modules/sequencify/LICENSE | 20 - .../node_modules/sequencify/README.md | 68 - .../node_modules/sequencify/index.js | 46 - .../node_modules/sequencify/package.json | 48 - .../node_modules/orchestrator/package.json | 54 - .../node_modules/pretty-hrtime/.npmignore | 10 - .../gulp/node_modules/pretty-hrtime/LICENSE | 20 - .../gulp/node_modules/pretty-hrtime/README.md | 54 - .../gulp/node_modules/pretty-hrtime/index.js | 75 - .../node_modules/pretty-hrtime/package.json | 46 - .../gulp/node_modules/resolve/.travis.yml | 4 - .../gulp/node_modules/resolve/LICENSE | 18 - .../node_modules/resolve/example/async.js | 5 - .../gulp/node_modules/resolve/example/sync.js | 3 - .../gulp/node_modules/resolve/index.js | 5 - .../gulp/node_modules/resolve/lib/async.js | 124 - .../gulp/node_modules/resolve/lib/caller.js | 8 - .../gulp/node_modules/resolve/lib/core.js | 4 - .../gulp/node_modules/resolve/lib/core.json | 38 - .../resolve/lib/node-modules-paths.js | 25 - .../gulp/node_modules/resolve/lib/sync.js | 80 - .../gulp/node_modules/resolve/package.json | 36 - .../gulp/node_modules/resolve/readme.markdown | 144 - .../gulp/node_modules/resolve/test/core.js | 12 - .../gulp/node_modules/resolve/test/filter.js | 18 - .../node_modules/resolve/test/filter_sync.js | 15 - .../gulp/node_modules/resolve/test/mock.js | 142 - .../node_modules/resolve/test/mock_sync.js | 68 - .../node_modules/resolve/test/resolver.js | 281 - .../resolver/bar/node_modules/foo/index.js | 1 - .../resolve/test/resolver/baz/doom.js | 0 .../resolve/test/resolver/baz/package.json | 3 - .../resolve/test/resolver/baz/quux.js | 1 - .../biz/node_modules/garply/lib/index.js | 1 - .../biz/node_modules/garply/package.json | 3 - .../resolver/biz/node_modules/grux/index.js | 1 - .../resolver/biz/node_modules/tiv/index.js | 1 - .../resolve/test/resolver/cup.coffee | 1 - .../node_modules/resolve/test/resolver/foo.js | 1 - .../test/resolver/incorrect_main/index.js | 2 - .../test/resolver/incorrect_main/package.json | 3 - .../resolve/test/resolver/mug.coffee | 0 .../node_modules/resolve/test/resolver/mug.js | 0 .../test/resolver/other_path/lib/other-lib.js | 0 .../resolve/test/resolver/other_path/root.js | 0 .../punycode/node_modules/punycode/index.js | 0 .../resolve/test/resolver/quux/foo/index.js | 1 - .../test/resolver/without_basedir/main.js | 6 - .../without_basedir/node_modules/mymodule.js | 1 - .../resolve/test/resolver_sync.js | 180 - .../gulp/node_modules/semver/.npmignore | 1 - node_modules/gulp/node_modules/semver/LICENSE | 27 - .../gulp/node_modules/semver/Makefile | 24 - .../gulp/node_modules/semver/README.md | 142 - .../gulp/node_modules/semver/bin/semver | 124 - node_modules/gulp/node_modules/semver/foot.js | 6 - node_modules/gulp/node_modules/semver/head.js | 2 - .../gulp/node_modules/semver/package.json | 36 - .../node_modules/semver/semver.browser.js | 1007 - .../node_modules/semver/semver.browser.js.gz | Bin 6903 -> 0 bytes .../gulp/node_modules/semver/semver.js | 1011 - .../gulp/node_modules/semver/semver.min.js | 1 - .../gulp/node_modules/semver/semver.min.js.gz | Bin 3231 -> 0 bytes .../gulp/node_modules/semver/test/amd.js | 15 - .../gulp/node_modules/semver/test/gtr.js | 173 - .../gulp/node_modules/semver/test/index.js | 556 - .../gulp/node_modules/semver/test/ltr.js | 174 - .../node_modules/semver/test/no-module.js | 19 - .../gulp/node_modules/vinyl-fs/.npmignore | 7 - .../gulp/node_modules/vinyl-fs/.travis.yml | 6 - .../gulp/node_modules/vinyl-fs/LICENSE | 20 - .../gulp/node_modules/vinyl-fs/README.md | 85 - .../gulp/node_modules/vinyl-fs/index.js | 5 - .../node_modules/vinyl-fs/lib/dest/index.js | 31 - .../vinyl-fs/lib/dest/writeBuffer.js | 5 - .../vinyl-fs/lib/dest/writeContents.js | 30 - .../vinyl-fs/lib/dest/writeDir.js | 5 - .../vinyl-fs/lib/dest/writeStream.js | 10 - .../vinyl-fs/lib/src/bufferFile.js | 10 - .../vinyl-fs/lib/src/getContents.js | 22 - .../node_modules/vinyl-fs/lib/src/getStats.js | 13 - .../node_modules/vinyl-fs/lib/src/index.js | 25 - .../node_modules/vinyl-fs/lib/src/readDir.js | 4 - .../vinyl-fs/lib/src/streamFile.js | 6 - .../node_modules/glob-stream/.npmignore | 6 - .../node_modules/glob-stream/.travis.yml | 6 - .../vinyl-fs/node_modules/glob-stream/LICENSE | 20 - .../node_modules/glob-stream/README.md | 67 - .../node_modules/glob-stream/index.js | 118 - .../glob-stream/node_modules/glob/.npmignore | 2 - .../glob-stream/node_modules/glob/.travis.yml | 3 - .../glob-stream/node_modules/glob/LICENSE | 27 - .../glob-stream/node_modules/glob/README.md | 250 - .../node_modules/glob/examples/g.js | 9 - .../node_modules/glob/examples/usr-local.js | 9 - .../glob-stream/node_modules/glob/glob.js | 690 - .../glob/node_modules/inherits/LICENSE | 16 - .../glob/node_modules/inherits/README.md | 42 - .../glob/node_modules/inherits/inherits.js | 1 - .../node_modules/inherits/inherits_browser.js | 23 - .../glob/node_modules/inherits/package.json | 33 - .../glob/node_modules/inherits/test.js | 25 - .../node_modules/glob/package.json | 43 - .../node_modules/glob/test/00-setup.js | 176 - .../node_modules/glob/test/bash-comparison.js | 63 - .../node_modules/glob/test/bash-results.json | 350 - .../node_modules/glob/test/cwd-test.js | 55 - .../node_modules/glob/test/globstar-match.js | 19 - .../node_modules/glob/test/mark.js | 82 - .../glob/test/new-glob-optional-options.js | 10 - .../node_modules/glob/test/nocase-nomagic.js | 113 - .../node_modules/glob/test/pause-resume.js | 73 - .../node_modules/glob/test/root-nomount.js | 39 - .../node_modules/glob/test/root.js | 46 - .../node_modules/glob/test/stat.js | 32 - .../node_modules/glob/test/zz-cleanup.js | 11 - .../node_modules/glob2base/.npmignore | 6 - .../node_modules/glob2base/.travis.yml | 7 - .../node_modules/glob2base/LICENSE | 20 - .../node_modules/glob2base/README.md | 56 - .../node_modules/glob2base/index.js | 51 - .../node_modules/glob2base/package.json | 45 - .../node_modules/glob2base/test/main.js | 50 - .../node_modules/minimatch/.npmignore | 1 - .../node_modules/minimatch/LICENSE | 23 - .../node_modules/minimatch/README.md | 218 - .../node_modules/minimatch/minimatch.js | 1055 - .../node_modules/lru-cache/.npmignore | 1 - .../node_modules/lru-cache/CONTRIBUTORS | 14 - .../minimatch/node_modules/lru-cache/LICENSE | 23 - .../node_modules/lru-cache/README.md | 97 - .../node_modules/lru-cache/lib/lru-cache.js | 252 - .../node_modules/lru-cache/package.json | 33 - .../node_modules/lru-cache/test/basic.js | 369 - .../node_modules/lru-cache/test/foreach.js | 52 - .../lru-cache/test/memory-leak.js | 50 - .../minimatch/node_modules/sigmund/LICENSE | 27 - .../minimatch/node_modules/sigmund/README.md | 53 - .../minimatch/node_modules/sigmund/bench.js | 283 - .../node_modules/sigmund/package.json | 42 - .../minimatch/node_modules/sigmund/sigmund.js | 39 - .../node_modules/sigmund/test/basic.js | 24 - .../node_modules/minimatch/package.json | 40 - .../node_modules/minimatch/test/basic.js | 399 - .../minimatch/test/brace-expand.js | 33 - .../node_modules/minimatch/test/caching.js | 14 - .../node_modules/minimatch/test/defaults.js | 274 - .../test/extglob-ending-with-state-char.js | 8 - .../ordered-read-streams/.npmignore | 16 - .../ordered-read-streams/.travis.yml | 5 - .../node_modules/ordered-read-streams/LICENSE | 20 - .../ordered-read-streams/README.md | 65 - .../ordered-read-streams/index.js | 65 - .../ordered-read-streams/package.json | 36 - .../ordered-read-streams/test/main.js | 160 - .../node_modules/through/.travis.yml | 5 - .../node_modules/through/LICENSE.APACHE2 | 15 - .../node_modules/through/LICENSE.MIT | 24 - .../glob-stream/node_modules/through/index.js | 108 - .../node_modules/through/package.json | 46 - .../node_modules/through/readme.markdown | 63 - .../node_modules/through/test/auto-destroy.js | 30 - .../node_modules/through/test/buffering.js | 71 - .../node_modules/through/test/end.js | 45 - .../node_modules/through/test/index.js | 114 - .../node_modules/unique-stream/.npmignore | 3 - .../node_modules/unique-stream/.travis.yml | 4 - .../node_modules/unique-stream/README.md | 89 - .../node_modules/unique-stream/index.js | 54 - .../node_modules/unique-stream/package.json | 42 - .../node_modules/unique-stream/test/index.js | 108 - .../node_modules/glob-stream/package.json | 58 - .../glob-stream/test/fixtures/stuff/run.dmc | 0 .../glob-stream/test/fixtures/stuff/test.dmc | 0 .../glob-stream/test/fixtures/test.coffee | 1 - .../hey/isaidhey/whatsgoingon/test.txt | 1 - .../test/fixtures/whatsgoingon/test.js | 1 - .../node_modules/glob-stream/test/main.js | 381 - .../node_modules/glob-watcher/.npmignore | 6 - .../node_modules/glob-watcher/.travis.yml | 6 - .../node_modules/glob-watcher/LICENSE | 20 - .../node_modules/glob-watcher/README.md | 53 - .../node_modules/glob-watcher/index.js | 40 - .../node_modules/gaze/.editorconfig | 13 - .../glob-watcher/node_modules/gaze/.jshintrc | 13 - .../glob-watcher/node_modules/gaze/.npmignore | 1 - .../node_modules/gaze/.travis.yml | 6 - .../glob-watcher/node_modules/gaze/AUTHORS | 10 - .../node_modules/gaze/Gruntfile.js | 32 - .../node_modules/gaze/LICENSE-MIT | 22 - .../glob-watcher/node_modules/gaze/README.md | 177 - .../node_modules/gaze/benchmarks/gaze100s.js | 46 - .../node_modules/gaze/lib/gaze.js | 417 - .../node_modules/gaze/lib/helper.js | 67 - .../gaze/node_modules/globule/.jshintrc | 15 - .../gaze/node_modules/globule/.npmignore | 1 - .../gaze/node_modules/globule/.travis.yml | 6 - .../gaze/node_modules/globule/Gruntfile.js | 48 - .../gaze/node_modules/globule/LICENSE-MIT | 22 - .../gaze/node_modules/globule/README.md | 117 - .../gaze/node_modules/globule/lib/globule.js | 172 - .../globule/node_modules/glob/.npmignore | 2 - .../globule/node_modules/glob/.travis.yml | 3 - .../globule/node_modules/glob/LICENSE | 27 - .../globule/node_modules/glob/README.md | 233 - .../globule/node_modules/glob/examples/g.js | 9 - .../node_modules/glob/examples/usr-local.js | 9 - .../globule/node_modules/glob/glob.js | 643 - .../glob/node_modules/graceful-fs/.npmignore | 1 - .../glob/node_modules/graceful-fs/LICENSE | 27 - .../glob/node_modules/graceful-fs/README.md | 33 - .../node_modules/graceful-fs/graceful-fs.js | 442 - .../node_modules/graceful-fs/package.json | 49 - .../node_modules/graceful-fs/test/open.js | 46 - .../node_modules/graceful-fs/test/ulimit.js | 158 - .../glob/node_modules/inherits/README.md | 51 - .../glob/node_modules/inherits/inherits.js | 29 - .../glob/node_modules/inherits/package.json | 31 - .../globule/node_modules/glob/package.json | 40 - .../node_modules/glob/test/00-setup.js | 176 - .../node_modules/glob/test/bash-comparison.js | 63 - .../node_modules/glob/test/bash-results.json | 348 - .../node_modules/glob/test/cwd-test.js | 55 - .../globule/node_modules/glob/test/mark.js | 74 - .../node_modules/glob/test/nocase-nomagic.js | 113 - .../node_modules/glob/test/pause-resume.js | 73 - .../node_modules/glob/test/root-nomount.js | 39 - .../globule/node_modules/glob/test/root.js | 46 - .../node_modules/glob/test/zz-cleanup.js | 11 - .../globule/node_modules/lodash/README.md | 164 - .../node_modules/lodash/dist/lodash.compat.js | 5152 ---- .../lodash/dist/lodash.compat.min.js | 42 - .../node_modules/lodash/dist/lodash.js | 4983 ---- .../node_modules/lodash/dist/lodash.min.js | 40 - .../lodash/dist/lodash.underscore.js | 4307 --- .../lodash/dist/lodash.underscore.min.js | 34 - .../globule/node_modules/lodash/package.json | 63 - .../globule/node_modules/minimatch/.npmignore | 1 - .../globule/node_modules/minimatch/LICENSE | 23 - .../globule/node_modules/minimatch/README.md | 218 - .../node_modules/minimatch/minimatch.js | 1055 - .../node_modules/lru-cache/.npmignore | 1 - .../node_modules/lru-cache/CONTRIBUTORS | 14 - .../minimatch/node_modules/lru-cache/LICENSE | 23 - .../node_modules/lru-cache/README.md | 97 - .../node_modules/lru-cache/lib/lru-cache.js | 252 - .../node_modules/lru-cache/package.json | 33 - .../node_modules/lru-cache/test/basic.js | 369 - .../node_modules/lru-cache/test/foreach.js | 52 - .../lru-cache/test/memory-leak.js | 50 - .../minimatch/node_modules/sigmund/LICENSE | 27 - .../minimatch/node_modules/sigmund/README.md | 53 - .../minimatch/node_modules/sigmund/bench.js | 283 - .../node_modules/sigmund/package.json | 42 - .../minimatch/node_modules/sigmund/sigmund.js | 39 - .../node_modules/sigmund/test/basic.js | 24 - .../node_modules/minimatch/package.json | 40 - .../node_modules/minimatch/test/basic.js | 399 - .../minimatch/test/brace-expand.js | 33 - .../node_modules/minimatch/test/caching.js | 14 - .../node_modules/minimatch/test/defaults.js | 274 - .../test/extglob-ending-with-state-char.js | 8 - .../gaze/node_modules/globule/package.json | 60 - .../globule/test/fixtures/expand/README.md | 0 .../globule/test/fixtures/expand/css/baz.css | 0 .../globule/test/fixtures/expand/css/qux.css | 0 .../test/fixtures/expand/deep/deep.txt | 0 .../fixtures/expand/deep/deeper/deeper.txt | 0 .../expand/deep/deeper/deepest/deepest.txt | 0 .../globule/test/fixtures/expand/js/bar.js | 0 .../globule/test/fixtures/expand/js/foo.js | 0 .../node_modules/globule/test/globule_test.js | 486 - .../node_modules/gaze/package.json | 92 - .../node_modules/gaze/test/add_test.js | 69 - .../node_modules/gaze/test/api_test.js | 38 - .../node_modules/gaze/test/file_poller.js | 27 - .../gaze/test/fixtures/Project (LO)/one.js | 1 - .../gaze/test/fixtures/nested/one.js | 1 - .../gaze/test/fixtures/nested/sub/two.js | 1 - .../gaze/test/fixtures/nested/sub2/two.js | 1 - .../gaze/test/fixtures/nested/three.js | 1 - .../node_modules/gaze/test/fixtures/one.js | 1 - .../gaze/test/fixtures/sub/one.js | 1 - .../gaze/test/fixtures/sub/two.js | 1 - .../node_modules/gaze/test/helper.js | 21 - .../node_modules/gaze/test/matching_test.js | 95 - .../node_modules/gaze/test/patterns_test.js | 42 - .../node_modules/gaze/test/relative_test.js | 28 - .../node_modules/gaze/test/rename_test.js | 40 - .../node_modules/gaze/test/safewrite_test.js | 58 - .../node_modules/gaze/test/watch_race_test.js | 84 - .../node_modules/gaze/test/watch_test.js | 314 - .../node_modules/glob-watcher/package.json | 52 - .../glob-watcher/test/fixtures/test.coffee | 1 - .../node_modules/glob-watcher/test/main.js | 74 - .../node_modules/graceful-fs/.npmignore | 1 - .../vinyl-fs/node_modules/graceful-fs/LICENSE | 27 - .../node_modules/graceful-fs/README.md | 26 - .../node_modules/graceful-fs/graceful-fs.js | 159 - .../node_modules/graceful-fs/package.json | 49 - .../node_modules/graceful-fs/polyfills.js | 228 - .../node_modules/graceful-fs/test/open.js | 39 - .../node_modules/map-stream/.npmignore | 3 - .../node_modules/map-stream/.travis.yml | 4 - .../vinyl-fs/node_modules/map-stream/LICENCE | 22 - .../map-stream/examples/pretty.js | 26 - .../vinyl-fs/node_modules/map-stream/index.js | 145 - .../node_modules/map-stream/package.json | 38 - .../node_modules/map-stream/readme.markdown | 37 - .../map-stream/test/simple-map.asynct.js | 318 - .../vinyl-fs/node_modules/mkdirp/.npmignore | 2 - .../vinyl-fs/node_modules/mkdirp/.travis.yml | 5 - .../vinyl-fs/node_modules/mkdirp/LICENSE | 21 - .../node_modules/mkdirp/examples/pow.js | 6 - .../vinyl-fs/node_modules/mkdirp/index.js | 82 - .../vinyl-fs/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 - .../vinyl-fs/node_modules/mkdirp/test/perm.js | 32 - .../node_modules/mkdirp/test/perm_sync.js | 39 - .../vinyl-fs/node_modules/mkdirp/test/race.js | 41 - .../vinyl-fs/node_modules/mkdirp/test/rel.js | 32 - .../node_modules/mkdirp/test/return.js | 25 - .../node_modules/mkdirp/test/return_sync.js | 24 - .../vinyl-fs/node_modules/mkdirp/test/root.js | 18 - .../vinyl-fs/node_modules/mkdirp/test/sync.js | 32 - .../node_modules/mkdirp/test/umask.js | 28 - .../node_modules/mkdirp/test/umask_sync.js | 32 - .../vinyl-fs/node_modules/vinyl/.npmignore | 6 - .../vinyl-fs/node_modules/vinyl/.travis.yml | 6 - .../vinyl-fs/node_modules/vinyl/LICENSE | 20 - .../vinyl-fs/node_modules/vinyl/README.md | 123 - .../vinyl-fs/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 - .../vinyl-fs/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 | 43 - .../vinyl/node_modules/clone-stats/test.js | 36 - .../vinyl-fs/node_modules/vinyl/package.json | 55 - .../vinyl-fs/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 - .../gulp/node_modules/vinyl-fs/package.json | 59 - .../gulp/node_modules/vinyl-fs/test/dest.js | 261 - .../vinyl-fs/test/fixtures/test.coffee | 1 - .../vinyl-fs/test/fixtures/wow/suchempty | 1 - .../gulp/node_modules/vinyl-fs/test/src.js | 154 - node_modules/gulp/package.json | 74 - node_modules/gulp/test/dest.js | 132 - .../gulp/test/fixtures/copy/example.txt | 1 - node_modules/gulp/test/fixtures/stuff/run.dmc | 0 .../gulp/test/fixtures/stuff/test.dmc | 0 node_modules/gulp/test/fixtures/test.coffee | 1 - node_modules/gulp/test/fixtures/test/run.jade | 1 - node_modules/gulp/test/src.js | 174 - node_modules/gulp/test/taskTree.js | 43 - node_modules/gulp/test/tasks.js | 157 - node_modules/gulp/test/watch.js | 111 - node_modules/jade/.npmignore | 14 - node_modules/jade/LICENSE | 22 - node_modules/jade/README.md | 161 - node_modules/jade/Readme_zh-cn.md | 1285 - node_modules/jade/bin/jade.js | 179 - node_modules/jade/component.json | 16 - node_modules/jade/index.js | 4 - node_modules/jade/jade-language.md | 1023 - node_modules/jade/jade.js | 22894 ---------------- node_modules/jade/jade.md | 510 - node_modules/jade/lib/compiler.js | 672 - node_modules/jade/lib/doctypes.js | 12 - node_modules/jade/lib/filters-client.js | 14 - node_modules/jade/lib/filters.js | 18 - node_modules/jade/lib/inline-tags.js | 23 - node_modules/jade/lib/jade.js | 323 - node_modules/jade/lib/lexer.js | 865 - node_modules/jade/lib/nodes/attrs.js | 79 - node_modules/jade/lib/nodes/block-comment.js | 24 - node_modules/jade/lib/nodes/block.js | 112 - node_modules/jade/lib/nodes/case.js | 33 - node_modules/jade/lib/nodes/code.js | 26 - node_modules/jade/lib/nodes/comment.js | 23 - node_modules/jade/lib/nodes/doctype.js | 20 - node_modules/jade/lib/nodes/each.js | 26 - node_modules/jade/lib/nodes/filter.js | 25 - node_modules/jade/lib/nodes/index.js | 16 - node_modules/jade/lib/nodes/literal.js | 20 - node_modules/jade/lib/nodes/mixin-block.js | 18 - node_modules/jade/lib/nodes/mixin.js | 27 - node_modules/jade/lib/nodes/node.js | 16 - node_modules/jade/lib/nodes/tag.js | 87 - node_modules/jade/lib/nodes/text.js | 27 - node_modules/jade/lib/parser.js | 790 - node_modules/jade/lib/runtime.js | 203 - node_modules/jade/lib/self-closing.js | 22 - node_modules/jade/lib/utils.js | 16 - .../node_modules/character-parser/.npmignore | 2 - .../node_modules/character-parser/LICENSE | 19 - .../node_modules/character-parser/README.md | 142 - .../node_modules/character-parser/index.js | 217 - .../character-parser/package.json | 43 - .../jade/node_modules/commander/Readme.md | 195 - .../jade/node_modules/commander/index.js | 851 - .../jade/node_modules/commander/package.json | 45 - .../constantinople/.gitattributes | 22 - .../node_modules/constantinople/.npmignore | 13 - .../node_modules/constantinople/.travis.yml | 4 - .../jade/node_modules/constantinople/LICENSE | 19 - .../node_modules/constantinople/README.md | 35 - .../jade/node_modules/constantinople/index.js | 35 - .../constantinople/node_modules/.bin/uglifyjs | 1 - .../node_modules/uglify-js/.npmignore | 2 - .../node_modules/uglify-js/.travis.yml | 6 - .../node_modules/uglify-js/LICENSE | 29 - .../node_modules/uglify-js/README.md | 636 - .../node_modules/uglify-js/bin/uglifyjs | 445 - .../node_modules/uglify-js/lib/ast.js | 984 - .../node_modules/uglify-js/lib/compress.js | 2358 -- .../node_modules/uglify-js/lib/mozilla-ast.js | 267 - .../node_modules/uglify-js/lib/output.js | 1300 - .../node_modules/uglify-js/lib/parse.js | 1457 - .../node_modules/uglify-js/lib/scope.js | 563 - .../node_modules/uglify-js/lib/sourcemap.js | 84 - .../node_modules/uglify-js/lib/transform.js | 218 - .../node_modules/uglify-js/lib/utils.js | 302 - .../uglify-js/node_modules/async/LICENSE | 19 - .../uglify-js/node_modules/async/README.md | 1425 - .../node_modules/async/component.json | 11 - .../uglify-js/node_modules/async/lib/async.js | 958 - .../uglify-js/node_modules/async/package.json | 43 - .../node_modules/optimist/.travis.yml | 4 - .../uglify-js/node_modules/optimist/LICENSE | 21 - .../node_modules/optimist/example/bool.js | 10 - .../optimist/example/boolean_double.js | 7 - .../optimist/example/boolean_single.js | 7 - .../optimist/example/default_hash.js | 8 - .../optimist/example/default_singles.js | 7 - .../node_modules/optimist/example/divide.js | 8 - .../optimist/example/line_count.js | 20 - .../optimist/example/line_count_options.js | 29 - .../optimist/example/line_count_wrap.js | 29 - .../node_modules/optimist/example/nonopt.js | 4 - .../node_modules/optimist/example/reflect.js | 2 - .../node_modules/optimist/example/short.js | 3 - .../node_modules/optimist/example/string.js | 11 - .../optimist/example/usage-options.js | 19 - .../node_modules/optimist/example/xup.js | 10 - .../uglify-js/node_modules/optimist/index.js | 478 - .../optimist/node_modules/wordwrap/.npmignore | 1 - .../node_modules/wordwrap/README.markdown | 70 - .../node_modules/wordwrap/example/center.js | 10 - .../node_modules/wordwrap/example/meat.js | 3 - .../optimist/node_modules/wordwrap/index.js | 76 - .../node_modules/wordwrap/package.json | 45 - .../node_modules/wordwrap/test/break.js | 30 - .../node_modules/wordwrap/test/idleness.txt | 63 - .../node_modules/wordwrap/test/wrap.js | 31 - .../node_modules/optimist/package.json | 46 - .../node_modules/optimist/readme.markdown | 487 - .../uglify-js/node_modules/optimist/test/_.js | 71 - .../node_modules/optimist/test/_/argv.js | 2 - .../node_modules/optimist/test/_/bin.js | 3 - .../node_modules/optimist/test/parse.js | 446 - .../node_modules/optimist/test/usage.js | 292 - .../node_modules/source-map/.npmignore | 2 - .../node_modules/source-map/.travis.yml | 4 - .../node_modules/source-map/CHANGELOG.md | 112 - .../uglify-js/node_modules/source-map/LICENSE | 28 - .../source-map/Makefile.dryice.js | 166 - .../node_modules/source-map/README.md | 434 - .../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 | 477 - .../lib/source-map/source-map-generator.js | 380 - .../source-map/lib/source-map/source-node.js | 371 - .../source-map/lib/source-map/util.js | 205 - .../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 | 37 - .../node_modules/source-map/package.json | 110 - .../node_modules/source-map/test/run-tests.js | 71 - .../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 | 72 - .../source-map/test-source-map-consumer.js | 451 - .../source-map/test-source-map-generator.js | 417 - .../test/source-map/test-source-node.js | 365 - .../source-map/test/source-map/util.js | 161 - .../uglify-to-browserify/.npmignore | 14 - .../uglify-to-browserify/.travis.yml | 3 - .../node_modules/uglify-to-browserify/LICENSE | 19 - .../uglify-to-browserify/README.md | 15 - .../uglify-to-browserify/index.js | 49 - .../uglify-to-browserify/package.json | 34 - .../uglify-to-browserify/test/index.js | 22 - .../node_modules/uglify-js/package.json | 45 - .../uglify-js/test/compress/arrays.js | 74 - .../uglify-js/test/compress/blocks.js | 49 - .../uglify-js/test/compress/concat-strings.js | 22 - .../uglify-js/test/compress/conditionals.js | 207 - .../uglify-js/test/compress/dead-code.js | 89 - .../uglify-js/test/compress/debugger.js | 24 - .../uglify-js/test/compress/drop-unused.js | 165 - .../uglify-js/test/compress/issue-105.js | 25 - .../uglify-js/test/compress/issue-12.js | 11 - .../uglify-js/test/compress/issue-126.js | 24 - .../uglify-js/test/compress/issue-143.js | 48 - .../uglify-js/test/compress/issue-22.js | 17 - .../uglify-js/test/compress/issue-267.js | 11 - .../uglify-js/test/compress/issue-269.js | 66 - .../uglify-js/test/compress/issue-44.js | 31 - .../uglify-js/test/compress/issue-59.js | 30 - .../uglify-js/test/compress/labels.js | 163 - .../uglify-js/test/compress/loops.js | 123 - .../uglify-js/test/compress/negate-iife.js | 76 - .../uglify-js/test/compress/properties.js | 54 - .../uglify-js/test/compress/sequences.js | 163 - .../uglify-js/test/compress/switch.js | 260 - .../uglify-js/test/compress/typeof.js | 25 - .../node_modules/uglify-js/test/run-tests.js | 179 - .../node_modules/uglify-js/tools/node.js | 172 - .../node_modules/constantinople/package.json | 31 - .../node_modules/constantinople/test/index.js | 51 - .../jade/node_modules/mkdirp/.npmignore | 2 - .../jade/node_modules/mkdirp/.travis.yml | 5 - node_modules/jade/node_modules/mkdirp/LICENSE | 21 - .../jade/node_modules/mkdirp/examples/pow.js | 6 - .../jade/node_modules/mkdirp/index.js | 82 - .../jade/node_modules/mkdirp/package.json | 34 - .../jade/node_modules/mkdirp/readme.markdown | 63 - .../jade/node_modules/mkdirp/test/chmod.js | 38 - .../jade/node_modules/mkdirp/test/clobber.js | 37 - .../jade/node_modules/mkdirp/test/mkdirp.js | 28 - .../jade/node_modules/mkdirp/test/perm.js | 32 - .../node_modules/mkdirp/test/perm_sync.js | 39 - .../jade/node_modules/mkdirp/test/race.js | 41 - .../jade/node_modules/mkdirp/test/rel.js | 32 - .../jade/node_modules/mkdirp/test/return.js | 25 - .../node_modules/mkdirp/test/return_sync.js | 24 - .../jade/node_modules/mkdirp/test/root.js | 18 - .../jade/node_modules/mkdirp/test/sync.js | 32 - .../jade/node_modules/mkdirp/test/umask.js | 28 - .../node_modules/mkdirp/test/umask_sync.js | 32 - .../jade/node_modules/monocle/.npmignore | 3 - .../jade/node_modules/monocle/LICENSE | 23 - .../jade/node_modules/monocle/README.md | 84 - .../jade/node_modules/monocle/monocle.js | 187 - .../monocle/node_modules/readdirp/.npmignore | 15 - .../monocle/node_modules/readdirp/.travis.yml | 5 - .../monocle/node_modules/readdirp/LICENSE | 18 - .../monocle/node_modules/readdirp/README.md | 227 - .../node_modules/readdirp/examples/Readme.md | 37 - .../readdirp/examples/callback-api.js | 10 - .../node_modules/readdirp/examples/grep.js | 73 - .../node_modules/event-stream/.npmignore | 3 - .../node_modules/event-stream/.travis.yml | 4 - .../node_modules/event-stream/LICENCE | 22 - .../event-stream/examples/pretty.js | 25 - .../node_modules/event-stream/index.js | 341 - .../node_modules/duplexer/.npmignore | 3 - .../node_modules/duplexer/.travis.yml | 3 - .../node_modules/duplexer/LICENCE | 19 - .../node_modules/duplexer/Makefile | 4 - .../node_modules/duplexer/README.md | 36 - .../node_modules/duplexer/index.js | 87 - .../node_modules/duplexer/package.json | 41 - .../node_modules/duplexer/test.js | 27 - .../node_modules/from/LICENSE.APACHE2 | 15 - .../node_modules/from/LICENSE.MIT | 24 - .../event-stream/node_modules/from/index.js | 62 - .../node_modules/from/package.json | 33 - .../node_modules/from/readme.markdown | 6 - .../node_modules/from/test/index.js | 141 - .../node_modules/map-stream/.npmignore | 3 - .../node_modules/map-stream/.travis.yml | 4 - .../node_modules/map-stream/LICENCE | 22 - .../map-stream/examples/pretty.js | 25 - .../node_modules/map-stream/index.js | 105 - .../node_modules/map-stream/package.json | 30 - .../node_modules/map-stream/readme.markdown | 35 - .../map-stream/test/simple-map.asynct.js | 295 - .../node_modules/optimist/.npmignore | 4 - .../node_modules/optimist/LICENSE | 21 - .../node_modules/optimist/README.markdown | 474 - .../node_modules/optimist/examples/bool.js | 10 - .../optimist/examples/boolean_double.js | 7 - .../optimist/examples/boolean_single.js | 7 - .../optimist/examples/default_hash.js | 8 - .../optimist/examples/default_singles.js | 7 - .../node_modules/optimist/examples/divide.js | 8 - .../optimist/examples/line_count.js | 20 - .../optimist/examples/line_count_options.js | 29 - .../optimist/examples/line_count_wrap.js | 29 - .../node_modules/optimist/examples/nonopt.js | 4 - .../node_modules/optimist/examples/reflect.js | 2 - .../node_modules/optimist/examples/short.js | 3 - .../node_modules/optimist/examples/string.js | 11 - .../optimist/examples/usage-options.js | 19 - .../node_modules/optimist/examples/xup.js | 10 - .../node_modules/optimist/index.js | 457 - .../optimist/node_modules/wordwrap/.npmignore | 1 - .../node_modules/wordwrap/README.markdown | 70 - .../node_modules/wordwrap/example/center.js | 10 - .../node_modules/wordwrap/example/meat.js | 3 - .../optimist/node_modules/wordwrap/index.js | 76 - .../node_modules/wordwrap/package.json | 40 - .../node_modules/wordwrap/test/break.js | 30 - .../node_modules/wordwrap/test/idleness.txt | 63 - .../node_modules/wordwrap/test/wrap.js | 31 - .../node_modules/optimist/package.json | 46 - .../node_modules/optimist/test/_.js | 66 - .../node_modules/optimist/test/_/argv.js | 2 - .../node_modules/optimist/test/_/bin.js | 3 - .../node_modules/optimist/test/parse.js | 304 - .../node_modules/optimist/test/usage.js | 256 - .../node_modules/pause-stream/.npmignore | 3 - .../node_modules/pause-stream/index.js | 76 - .../node_modules/pause-stream/package.json | 38 - .../node_modules/pause-stream/readme.markdown | 24 - .../node_modules/pause-stream/test/index.js | 17 - .../pause-stream/test/pause-end.js | 33 - .../node_modules/split/.npmignore | 3 - .../node_modules/split/.travis.yml | 4 - .../event-stream/node_modules/split/LICENCE | 22 - .../node_modules/split/examples/pretty.js | 25 - .../event-stream/node_modules/split/index.js | 35 - .../split/node_modules/through/.travis.yml | 4 - .../node_modules/through/LICENSE.APACHE2 | 15 - .../split/node_modules/through/LICENSE.MIT | 24 - .../split/node_modules/through/index.js | 65 - .../split/node_modules/through/package.json | 29 - .../node_modules/through/readme.markdown | 26 - .../split/node_modules/through/test/index.js | 113 - .../node_modules/split/package.json | 35 - .../node_modules/split/readme.markdown | 20 - .../node_modules/split/test/split.asynct.js | 47 - .../node_modules/through/.travis.yml | 4 - .../node_modules/through/LICENSE.APACHE2 | 15 - .../node_modules/through/LICENSE.MIT | 24 - .../node_modules/through/index.js | 100 - .../node_modules/through/package.json | 34 - .../node_modules/through/readme.markdown | 44 - .../node_modules/through/test/buffering.js | 37 - .../node_modules/through/test/end.js | 27 - .../node_modules/through/test/index.js | 113 - .../node_modules/event-stream/package.json | 40 - .../node_modules/event-stream/readme.markdown | 286 - .../event-stream/test/connect.asynct.js | 82 - .../event-stream/test/merge.asynct.js | 20 - .../event-stream/test/pause.asynct.js | 38 - .../event-stream/test/pipeline.asynct.js | 51 - .../event-stream/test/readArray.asynct.js | 88 - .../event-stream/test/readable.asynct.js | 167 - .../event-stream/test/replace.asynct.js | 50 - .../event-stream/test/simple-map.asynct.js | 342 - .../event-stream/test/spec.asynct.js | 85 - .../event-stream/test/split.asynct.js | 46 - .../event-stream/test/stringify.js | 14 - .../event-stream/test/writeArray.asynct.js | 30 - .../node_modules/tap-stream/.npmignore | 1 - .../node_modules/tap-stream/.travis.yml | 5 - .../node_modules/tap-stream/README.md | 98 - .../tap-stream/examples/tap-nested-objects.js | 38 - .../examples/node_modules/tap-stream/index.js | 56 - .../node_modules/through/.travis.yml | 4 - .../node_modules/through/LICENSE.APACHE2 | 15 - .../node_modules/through/LICENSE.MIT | 24 - .../tap-stream/node_modules/through/index.js | 100 - .../node_modules/through/package.json | 34 - .../node_modules/through/readme.markdown | 44 - .../node_modules/through/test/buffering.js | 37 - .../node_modules/through/test/end.js | 27 - .../node_modules/through/test/index.js | 113 - .../node_modules/tap-stream/package.json | 38 - .../tap-stream/test/tap-stream.js | 104 - .../readdirp/examples/package.json | 9 - .../readdirp/examples/stream-api-pipe.js | 13 - .../readdirp/examples/stream-api.js | 15 - .../node_modules/minimatch/.npmignore | 1 - .../readdirp/node_modules/minimatch/LICENSE | 23 - .../readdirp/node_modules/minimatch/README.md | 218 - .../node_modules/minimatch/minimatch.js | 1055 - .../node_modules/lru-cache/.npmignore | 1 - .../node_modules/lru-cache/CONTRIBUTORS | 14 - .../minimatch/node_modules/lru-cache/LICENSE | 23 - .../node_modules/lru-cache/README.md | 97 - .../node_modules/lru-cache/lib/lru-cache.js | 252 - .../node_modules/lru-cache/package.json | 33 - .../node_modules/lru-cache/test/basic.js | 369 - .../node_modules/lru-cache/test/foreach.js | 52 - .../lru-cache/test/memory-leak.js | 50 - .../minimatch/node_modules/sigmund/LICENSE | 27 - .../minimatch/node_modules/sigmund/README.md | 53 - .../minimatch/node_modules/sigmund/bench.js | 283 - .../node_modules/sigmund/package.json | 42 - .../minimatch/node_modules/sigmund/sigmund.js | 39 - .../node_modules/sigmund/test/basic.js | 24 - .../node_modules/minimatch/package.json | 40 - .../node_modules/minimatch/test/basic.js | 399 - .../minimatch/test/brace-expand.js | 33 - .../node_modules/minimatch/test/caching.js | 14 - .../node_modules/minimatch/test/defaults.js | 274 - .../test/extglob-ending-with-state-char.js | 8 - .../node_modules/readdirp/package.json | 49 - .../monocle/node_modules/readdirp/readdirp.js | 276 - .../node_modules/readdirp/stream-api.js | 86 - .../test/bed/root_dir1/root_dir1_file1.ext1 | 0 .../test/bed/root_dir1/root_dir1_file2.ext2 | 0 .../test/bed/root_dir1/root_dir1_file3.ext3 | 0 .../root1_dir1_subdir1_file1.ext1 | 0 .../test/bed/root_dir2/root_dir2_file1.ext1 | 0 .../test/bed/root_dir2/root_dir2_file2.ext2 | 0 .../readdirp/test/bed/root_file1.ext1 | 0 .../readdirp/test/bed/root_file2.ext2 | 0 .../readdirp/test/bed/root_file3.ext3 | 0 .../readdirp/test/readdirp-stream.js | 215 - .../node_modules/readdirp/test/readdirp.js | 252 - .../jade/node_modules/monocle/package.json | 44 - .../jade/node_modules/transformers/.npmignore | 2 - .../jade/node_modules/transformers/README.md | 141 - .../jade/node_modules/transformers/history.md | 77 - .../node_modules/transformers/lib/shared.js | 162 - .../transformers/lib/transformers.js | 604 - .../transformers/node_modules/.bin/uglifyjs | 1 - .../transformers/node_modules/css/.npmignore | 4 - .../transformers/node_modules/css/History.md | 20 - .../transformers/node_modules/css/Makefile | 8 - .../transformers/node_modules/css/Readme.md | 77 - .../node_modules/css/benchmark.js | 36 - .../node_modules/css/component.json | 13 - .../transformers/node_modules/css/index.js | 3 - .../css/node_modules/css-parse/.npmignore | 6 - .../css/node_modules/css-parse/History.md | 30 - .../css/node_modules/css-parse/Makefile | 7 - .../css/node_modules/css-parse/Readme.md | 62 - .../css/node_modules/css-parse/component.json | 8 - .../css/node_modules/css-parse/index.js | 265 - .../css/node_modules/css-parse/package.json | 27 - .../css/node_modules/css-stringify/.npmignore | 6 - .../css/node_modules/css-stringify/History.md | 30 - .../css/node_modules/css-stringify/Makefile | 7 - .../css/node_modules/css-stringify/Readme.md | 33 - .../node_modules/css-stringify/component.json | 8 - .../css/node_modules/css-stringify/index.js | 182 - .../node_modules/css-stringify/package.json | 28 - .../node_modules/css/package.json | 23 - .../transformers/node_modules/css/test.js | 6 - .../node_modules/promise/.npmignore | 6 - .../node_modules/promise/Readme.md | 85 - .../node_modules/promise/index.js | 164 - .../node_modules/is-promise/.npmignore | 6 - .../promise/node_modules/is-promise/index.js | 5 - .../node_modules/is-promise/package.json | 29 - .../promise/node_modules/is-promise/readme.md | 29 - .../node_modules/promise/package.json | 33 - .../node_modules/uglify-js/.npmignore | 2 - .../node_modules/uglify-js/README.md | 544 - .../node_modules/uglify-js/bin/uglifyjs | 370 - .../node_modules/uglify-js/lib/ast.js | 964 - .../node_modules/uglify-js/lib/compress.js | 1968 -- .../node_modules/uglify-js/lib/mozilla-ast.js | 265 - .../node_modules/uglify-js/lib/output.js | 1220 - .../node_modules/uglify-js/lib/parse.js | 1407 - .../node_modules/uglify-js/lib/scope.js | 580 - .../node_modules/uglify-js/lib/sourcemap.js | 81 - .../node_modules/uglify-js/lib/transform.js | 218 - .../node_modules/uglify-js/lib/utils.js | 288 - .../node_modules/optimist/.travis.yml | 4 - .../uglify-js/node_modules/optimist/LICENSE | 21 - .../node_modules/optimist/example/bool.js | 10 - .../optimist/example/boolean_double.js | 7 - .../optimist/example/boolean_single.js | 7 - .../optimist/example/default_hash.js | 8 - .../optimist/example/default_singles.js | 7 - .../node_modules/optimist/example/divide.js | 8 - .../optimist/example/line_count.js | 20 - .../optimist/example/line_count_options.js | 29 - .../optimist/example/line_count_wrap.js | 29 - .../node_modules/optimist/example/nonopt.js | 4 - .../node_modules/optimist/example/reflect.js | 2 - .../node_modules/optimist/example/short.js | 3 - .../node_modules/optimist/example/string.js | 11 - .../optimist/example/usage-options.js | 19 - .../node_modules/optimist/example/xup.js | 10 - .../uglify-js/node_modules/optimist/index.js | 478 - .../optimist/node_modules/wordwrap/.npmignore | 1 - .../node_modules/wordwrap/README.markdown | 70 - .../node_modules/wordwrap/example/center.js | 10 - .../node_modules/wordwrap/example/meat.js | 3 - .../optimist/node_modules/wordwrap/index.js | 76 - .../node_modules/wordwrap/package.json | 45 - .../node_modules/wordwrap/test/break.js | 30 - .../node_modules/wordwrap/test/idleness.txt | 63 - .../node_modules/wordwrap/test/wrap.js | 31 - .../node_modules/optimist/package.json | 46 - .../node_modules/optimist/readme.markdown | 487 - .../uglify-js/node_modules/optimist/test/_.js | 71 - .../node_modules/optimist/test/_/argv.js | 2 - .../node_modules/optimist/test/_/bin.js | 3 - .../node_modules/optimist/test/parse.js | 446 - .../node_modules/optimist/test/usage.js | 292 - .../node_modules/source-map/.npmignore | 2 - .../node_modules/source-map/.travis.yml | 4 - .../node_modules/source-map/CHANGELOG.md | 112 - .../uglify-js/node_modules/source-map/LICENSE | 28 - .../source-map/Makefile.dryice.js | 166 - .../node_modules/source-map/README.md | 434 - .../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 | 477 - .../lib/source-map/source-map-generator.js | 380 - .../source-map/lib/source-map/source-node.js | 371 - .../source-map/lib/source-map/util.js | 205 - .../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 | 110 - .../node_modules/source-map/test/run-tests.js | 71 - .../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 | 72 - .../source-map/test-source-map-consumer.js | 451 - .../source-map/test-source-map-generator.js | 417 - .../test/source-map/test-source-node.js | 365 - .../source-map/test/source-map/util.js | 161 - .../node_modules/uglify-js/package.json | 44 - .../uglify-js/test/compress/arrays.js | 12 - .../uglify-js/test/compress/blocks.js | 49 - .../uglify-js/test/compress/conditionals.js | 143 - .../uglify-js/test/compress/dead-code.js | 89 - .../uglify-js/test/compress/debugger.js | 24 - .../uglify-js/test/compress/drop-unused.js | 97 - .../uglify-js/test/compress/issue-105.js | 17 - .../uglify-js/test/compress/issue-12.js | 11 - .../uglify-js/test/compress/issue-22.js | 17 - .../uglify-js/test/compress/issue-44.js | 31 - .../uglify-js/test/compress/issue-59.js | 30 - .../uglify-js/test/compress/labels.js | 163 - .../uglify-js/test/compress/loops.js | 123 - .../uglify-js/test/compress/properties.js | 25 - .../uglify-js/test/compress/sequences.js | 161 - .../uglify-js/test/compress/switch.js | 210 - .../node_modules/uglify-js/test/run-tests.js | 170 - .../node_modules/uglify-js/tools/node.js | 164 - .../node_modules/transformers/package.json | 81 - .../jade/node_modules/with/.npmignore | 2 - node_modules/jade/node_modules/with/LICENSE | 19 - node_modules/jade/node_modules/with/README.md | 61 - node_modules/jade/node_modules/with/index.js | 46 - .../with/node_modules/.bin/uglifyjs | 1 - .../with/node_modules/uglify-js/.npmignore | 2 - .../with/node_modules/uglify-js/.travis.yml | 7 - .../with/node_modules/uglify-js/LICENSE | 29 - .../with/node_modules/uglify-js/README.md | 593 - .../with/node_modules/uglify-js/bin/uglifyjs | 421 - .../with/node_modules/uglify-js/lib/ast.js | 988 - .../node_modules/uglify-js/lib/compress.js | 2068 -- .../node_modules/uglify-js/lib/mozilla-ast.js | 267 - .../with/node_modules/uglify-js/lib/output.js | 1229 - .../with/node_modules/uglify-js/lib/parse.js | 1410 - .../with/node_modules/uglify-js/lib/scope.js | 581 - .../node_modules/uglify-js/lib/sourcemap.js | 81 - .../node_modules/uglify-js/lib/transform.js | 218 - .../with/node_modules/uglify-js/lib/utils.js | 295 - .../uglify-js/node_modules/async/LICENSE | 19 - .../uglify-js/node_modules/async/README.md | 1425 - .../node_modules/async/component.json | 11 - .../uglify-js/node_modules/async/lib/async.js | 958 - .../uglify-js/node_modules/async/package.json | 43 - .../node_modules/optimist/.travis.yml | 4 - .../uglify-js/node_modules/optimist/LICENSE | 21 - .../node_modules/optimist/example/bool.js | 10 - .../optimist/example/boolean_double.js | 7 - .../optimist/example/boolean_single.js | 7 - .../optimist/example/default_hash.js | 8 - .../optimist/example/default_singles.js | 7 - .../node_modules/optimist/example/divide.js | 8 - .../optimist/example/line_count.js | 20 - .../optimist/example/line_count_options.js | 29 - .../optimist/example/line_count_wrap.js | 29 - .../node_modules/optimist/example/nonopt.js | 4 - .../node_modules/optimist/example/reflect.js | 2 - .../node_modules/optimist/example/short.js | 3 - .../node_modules/optimist/example/string.js | 11 - .../optimist/example/usage-options.js | 19 - .../node_modules/optimist/example/xup.js | 10 - .../uglify-js/node_modules/optimist/index.js | 478 - .../optimist/node_modules/wordwrap/.npmignore | 1 - .../node_modules/wordwrap/README.markdown | 70 - .../node_modules/wordwrap/example/center.js | 10 - .../node_modules/wordwrap/example/meat.js | 3 - .../optimist/node_modules/wordwrap/index.js | 76 - .../node_modules/wordwrap/package.json | 45 - .../node_modules/wordwrap/test/break.js | 30 - .../node_modules/wordwrap/test/idleness.txt | 63 - .../node_modules/wordwrap/test/wrap.js | 31 - .../node_modules/optimist/package.json | 46 - .../node_modules/optimist/readme.markdown | 487 - .../uglify-js/node_modules/optimist/test/_.js | 71 - .../node_modules/optimist/test/_/argv.js | 2 - .../node_modules/optimist/test/_/bin.js | 3 - .../node_modules/optimist/test/parse.js | 446 - .../node_modules/optimist/test/usage.js | 292 - .../node_modules/source-map/.npmignore | 2 - .../node_modules/source-map/.travis.yml | 4 - .../node_modules/source-map/CHANGELOG.md | 112 - .../uglify-js/node_modules/source-map/LICENSE | 28 - .../source-map/Makefile.dryice.js | 166 - .../node_modules/source-map/README.md | 434 - .../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 | 477 - .../lib/source-map/source-map-generator.js | 380 - .../source-map/lib/source-map/source-node.js | 371 - .../source-map/lib/source-map/util.js | 205 - .../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 | 37 - .../node_modules/source-map/package.json | 110 - .../node_modules/source-map/test/run-tests.js | 71 - .../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 | 72 - .../source-map/test-source-map-consumer.js | 451 - .../source-map/test-source-map-generator.js | 417 - .../test/source-map/test-source-node.js | 365 - .../source-map/test/source-map/util.js | 161 - .../uglify-to-browserify/.npmignore | 14 - .../uglify-to-browserify/.travis.yml | 3 - .../node_modules/uglify-to-browserify/LICENSE | 19 - .../uglify-to-browserify/README.md | 15 - .../uglify-to-browserify/index.js | 49 - .../uglify-to-browserify/package.json | 34 - .../uglify-to-browserify/test/index.js | 22 - .../with/node_modules/uglify-js/package.json | 49 - .../uglify-js/test/compress/arrays.js | 14 - .../uglify-js/test/compress/blocks.js | 49 - .../uglify-js/test/compress/conditionals.js | 143 - .../uglify-js/test/compress/dead-code.js | 89 - .../uglify-js/test/compress/debugger.js | 24 - .../uglify-js/test/compress/drop-unused.js | 121 - .../uglify-js/test/compress/issue-105.js | 25 - .../uglify-js/test/compress/issue-12.js | 11 - .../uglify-js/test/compress/issue-143.js | 48 - .../uglify-js/test/compress/issue-22.js | 17 - .../uglify-js/test/compress/issue-44.js | 31 - .../uglify-js/test/compress/issue-59.js | 30 - .../uglify-js/test/compress/labels.js | 163 - .../uglify-js/test/compress/loops.js | 123 - .../uglify-js/test/compress/negate-iife.js | 76 - .../uglify-js/test/compress/properties.js | 54 - .../uglify-js/test/compress/sequences.js | 161 - .../uglify-js/test/compress/switch.js | 260 - .../uglify-js/test/compress/typeof.js | 25 - .../node_modules/uglify-js/test/run-tests.js | 170 - .../with/node_modules/uglify-js/tools/node.js | 167 - .../jade/node_modules/with/package.json | 35 - node_modules/jade/node_modules/with/vars.js | 587 - node_modules/jade/package.json | 68 - node_modules/jade/runtime.js | 210 - node_modules/mocha/Readme.md | 172 - node_modules/mocha/bin/_mocha | 467 - node_modules/mocha/bin/mocha | 51 - node_modules/mocha/images/error.png | Bin 412 -> 0 bytes node_modules/mocha/images/ok.png | Bin 388 -> 0 bytes node_modules/mocha/index.js | 4 - node_modules/mocha/lib/browser/debug.js | 5 - node_modules/mocha/lib/browser/diff.js | 354 - node_modules/mocha/lib/browser/events.js | 178 - node_modules/mocha/lib/browser/fs.js | 0 node_modules/mocha/lib/browser/path.js | 0 node_modules/mocha/lib/browser/progress.js | 125 - node_modules/mocha/lib/browser/tty.js | 13 - node_modules/mocha/lib/context.js | 69 - node_modules/mocha/lib/hook.js | 49 - node_modules/mocha/lib/interfaces/bdd.js | 137 - node_modules/mocha/lib/interfaces/exports.js | 60 - node_modules/mocha/lib/interfaces/index.js | 5 - node_modules/mocha/lib/interfaces/qunit.js | 122 - node_modules/mocha/lib/interfaces/tdd.js | 138 - node_modules/mocha/lib/mocha.js | 369 - node_modules/mocha/lib/ms.js | 109 - node_modules/mocha/lib/reporters/base.js | 507 - node_modules/mocha/lib/reporters/doc.js | 56 - node_modules/mocha/lib/reporters/dot.js | 62 - node_modules/mocha/lib/reporters/html-cov.js | 51 - node_modules/mocha/lib/reporters/html.js | 274 - node_modules/mocha/lib/reporters/index.js | 18 - node_modules/mocha/lib/reporters/json-cov.js | 153 - .../mocha/lib/reporters/json-stream.js | 61 - node_modules/mocha/lib/reporters/json.js | 70 - node_modules/mocha/lib/reporters/landing.js | 97 - node_modules/mocha/lib/reporters/list.js | 64 - node_modules/mocha/lib/reporters/markdown.js | 91 - node_modules/mocha/lib/reporters/min.js | 38 - node_modules/mocha/lib/reporters/nyan.js | 260 - node_modules/mocha/lib/reporters/progress.js | 86 - node_modules/mocha/lib/reporters/spec.js | 83 - node_modules/mocha/lib/reporters/tap.js | 73 - .../lib/reporters/templates/coverage.jade | 50 - .../mocha/lib/reporters/templates/menu.jade | 13 - .../mocha/lib/reporters/templates/script.html | 34 - .../mocha/lib/reporters/templates/style.html | 320 - node_modules/mocha/lib/reporters/xunit.js | 119 - node_modules/mocha/lib/runnable.js | 227 - node_modules/mocha/lib/runner.js | 661 - node_modules/mocha/lib/suite.js | 296 - node_modules/mocha/lib/template.html | 18 - node_modules/mocha/lib/test.js | 32 - node_modules/mocha/lib/utils.js | 299 - node_modules/mocha/mocha.css | 270 - node_modules/mocha/mocha.js | 5812 ---- node_modules/mocha/node_modules/.bin/jade | 1 - .../mocha/node_modules/commander/History.md | 179 - .../mocha/node_modules/commander/Readme.md | 195 - .../mocha/node_modules/commander/index.js | 847 - .../mocha/node_modules/commander/package.json | 38 - .../mocha/node_modules/debug/Readme.md | 115 - .../mocha/node_modules/debug/debug.js | 137 - .../mocha/node_modules/debug/index.js | 5 - .../mocha/node_modules/debug/lib/debug.js | 147 - .../mocha/node_modules/debug/package.json | 46 - .../mocha/node_modules/diff/README.md | 101 - node_modules/mocha/node_modules/diff/diff.js | 354 - .../mocha/node_modules/diff/package.json | 51 - .../mocha/node_modules/glob/.npmignore | 2 - .../mocha/node_modules/glob/.travis.yml | 3 - node_modules/mocha/node_modules/glob/LICENSE | 27 - .../mocha/node_modules/glob/README.md | 250 - .../mocha/node_modules/glob/examples/g.js | 9 - .../node_modules/glob/examples/usr-local.js | 9 - node_modules/mocha/node_modules/glob/glob.js | 675 - .../glob/node_modules/graceful-fs/.npmignore | 1 - .../glob/node_modules/graceful-fs/LICENSE | 27 - .../glob/node_modules/graceful-fs/README.md | 26 - .../node_modules/graceful-fs/graceful-fs.js | 159 - .../node_modules/graceful-fs/package.json | 49 - .../node_modules/graceful-fs/polyfills.js | 228 - .../node_modules/graceful-fs/test/open.js | 39 - .../glob/node_modules/inherits/LICENSE | 16 - .../glob/node_modules/inherits/README.md | 42 - .../glob/node_modules/inherits/inherits.js | 1 - .../node_modules/inherits/inherits_browser.js | 23 - .../glob/node_modules/inherits/package.json | 33 - .../glob/node_modules/inherits/test.js | 25 - .../glob/node_modules/minimatch/.npmignore | 1 - .../glob/node_modules/minimatch/LICENSE | 23 - .../glob/node_modules/minimatch/README.md | 218 - .../glob/node_modules/minimatch/minimatch.js | 1055 - .../node_modules/lru-cache/.npmignore | 1 - .../node_modules/lru-cache/CONTRIBUTORS | 14 - .../minimatch/node_modules/lru-cache/LICENSE | 23 - .../node_modules/lru-cache/README.md | 97 - .../node_modules/lru-cache/lib/lru-cache.js | 252 - .../node_modules/lru-cache/package.json | 33 - .../node_modules/lru-cache/test/basic.js | 369 - .../node_modules/lru-cache/test/foreach.js | 52 - .../lru-cache/test/memory-leak.js | 50 - .../minimatch/node_modules/sigmund/LICENSE | 27 - .../minimatch/node_modules/sigmund/README.md | 53 - .../minimatch/node_modules/sigmund/bench.js | 283 - .../node_modules/sigmund/package.json | 42 - .../minimatch/node_modules/sigmund/sigmund.js | 39 - .../node_modules/sigmund/test/basic.js | 24 - .../glob/node_modules/minimatch/package.json | 40 - .../glob/node_modules/minimatch/test/basic.js | 399 - .../minimatch/test/brace-expand.js | 33 - .../node_modules/minimatch/test/caching.js | 14 - .../node_modules/minimatch/test/defaults.js | 274 - .../test/extglob-ending-with-state-char.js | 8 - .../mocha/node_modules/glob/package.json | 40 - .../mocha/node_modules/glob/test/00-setup.js | 176 - .../node_modules/glob/test/bash-comparison.js | 63 - .../node_modules/glob/test/bash-results.json | 350 - .../mocha/node_modules/glob/test/cwd-test.js | 55 - .../node_modules/glob/test/globstar-match.js | 19 - .../mocha/node_modules/glob/test/mark.js | 74 - .../node_modules/glob/test/nocase-nomagic.js | 113 - .../node_modules/glob/test/pause-resume.js | 73 - .../node_modules/glob/test/root-nomount.js | 39 - .../mocha/node_modules/glob/test/root.js | 46 - .../mocha/node_modules/glob/test/stat.js | 32 - .../node_modules/glob/test/zz-cleanup.js | 11 - .../mocha/node_modules/growl/History.md | 63 - .../mocha/node_modules/growl/Readme.md | 99 - .../mocha/node_modules/growl/lib/growl.js | 234 - .../mocha/node_modules/growl/package.json | 14 - node_modules/mocha/node_modules/growl/test.js | 20 - .../mocha/node_modules/jade/.npmignore | 15 - node_modules/mocha/node_modules/jade/LICENSE | 22 - node_modules/mocha/node_modules/jade/bin/jade | 147 - node_modules/mocha/node_modules/jade/index.js | 4 - node_modules/mocha/node_modules/jade/jade.js | 3586 --- node_modules/mocha/node_modules/jade/jade.md | 510 - .../mocha/node_modules/jade/jade.min.js | 2 - .../mocha/node_modules/jade/lib/compiler.js | 642 - .../mocha/node_modules/jade/lib/doctypes.js | 18 - .../mocha/node_modules/jade/lib/filters.js | 97 - .../node_modules/jade/lib/inline-tags.js | 28 - .../mocha/node_modules/jade/lib/jade.js | 237 - .../mocha/node_modules/jade/lib/lexer.js | 771 - .../node_modules/jade/lib/nodes/attrs.js | 77 - .../jade/lib/nodes/block-comment.js | 33 - .../node_modules/jade/lib/nodes/block.js | 121 - .../mocha/node_modules/jade/lib/nodes/case.js | 43 - .../mocha/node_modules/jade/lib/nodes/code.js | 35 - .../node_modules/jade/lib/nodes/comment.js | 32 - .../node_modules/jade/lib/nodes/doctype.js | 29 - .../mocha/node_modules/jade/lib/nodes/each.js | 35 - .../node_modules/jade/lib/nodes/filter.js | 35 - .../node_modules/jade/lib/nodes/index.js | 20 - .../node_modules/jade/lib/nodes/literal.js | 32 - .../node_modules/jade/lib/nodes/mixin.js | 36 - .../mocha/node_modules/jade/lib/nodes/node.js | 25 - .../mocha/node_modules/jade/lib/nodes/tag.js | 95 - .../mocha/node_modules/jade/lib/nodes/text.js | 36 - .../mocha/node_modules/jade/lib/parser.js | 710 - .../mocha/node_modules/jade/lib/runtime.js | 174 - .../node_modules/jade/lib/self-closing.js | 19 - .../mocha/node_modules/jade/lib/utils.js | 49 - .../jade/node_modules/commander/.npmignore | 4 - .../jade/node_modules/commander/.travis.yml | 4 - .../jade/node_modules/commander/History.md | 107 - .../jade/node_modules/commander/Makefile | 7 - .../jade/node_modules/commander/Readme.md | 262 - .../jade/node_modules/commander/index.js | 2 - .../node_modules/commander/lib/commander.js | 1026 - .../jade/node_modules/commander/package.json | 39 - .../jade/node_modules/mkdirp/.gitignore.orig | 2 - .../jade/node_modules/mkdirp/.gitignore.rej | 5 - .../jade/node_modules/mkdirp/.npmignore | 2 - .../jade/node_modules/mkdirp/LICENSE | 21 - .../jade/node_modules/mkdirp/README.markdown | 54 - .../jade/node_modules/mkdirp/examples/pow.js | 6 - .../node_modules/mkdirp/examples/pow.js.orig | 6 - .../node_modules/mkdirp/examples/pow.js.rej | 19 - .../jade/node_modules/mkdirp/index.js | 79 - .../jade/node_modules/mkdirp/package.json | 37 - .../jade/node_modules/mkdirp/test/chmod.js | 38 - .../jade/node_modules/mkdirp/test/clobber.js | 37 - .../jade/node_modules/mkdirp/test/mkdirp.js | 28 - .../jade/node_modules/mkdirp/test/perm.js | 32 - .../node_modules/mkdirp/test/perm_sync.js | 39 - .../jade/node_modules/mkdirp/test/race.js | 41 - .../jade/node_modules/mkdirp/test/rel.js | 32 - .../jade/node_modules/mkdirp/test/sync.js | 27 - .../jade/node_modules/mkdirp/test/umask.js | 28 - .../node_modules/mkdirp/test/umask_sync.js | 27 - .../mocha/node_modules/jade/package.json | 48 - .../mocha/node_modules/jade/runtime.js | 179 - .../mocha/node_modules/jade/runtime.min.js | 1 - .../mocha/node_modules/jade/test.jade | 7 - .../mocha/node_modules/jade/testing/head.jade | 5 - .../node_modules/jade/testing/index.jade | 22 - .../mocha/node_modules/jade/testing/index.js | 11 - .../node_modules/jade/testing/layout.jade | 6 - .../mocha/node_modules/jade/testing/user.jade | 7 - .../mocha/node_modules/jade/testing/user.js | 27 - .../mocha/node_modules/mkdirp/.npmignore | 2 - .../mocha/node_modules/mkdirp/.travis.yml | 5 - .../mocha/node_modules/mkdirp/LICENSE | 21 - .../mocha/node_modules/mkdirp/examples/pow.js | 6 - .../mocha/node_modules/mkdirp/index.js | 82 - .../mocha/node_modules/mkdirp/package.json | 34 - .../mocha/node_modules/mkdirp/readme.markdown | 63 - .../mocha/node_modules/mkdirp/test/chmod.js | 38 - .../mocha/node_modules/mkdirp/test/clobber.js | 37 - .../mocha/node_modules/mkdirp/test/mkdirp.js | 28 - .../mocha/node_modules/mkdirp/test/perm.js | 32 - .../node_modules/mkdirp/test/perm_sync.js | 39 - .../mocha/node_modules/mkdirp/test/race.js | 41 - .../mocha/node_modules/mkdirp/test/rel.js | 32 - .../mocha/node_modules/mkdirp/test/return.js | 25 - .../node_modules/mkdirp/test/return_sync.js | 24 - .../mocha/node_modules/mkdirp/test/root.js | 18 - .../mocha/node_modules/mkdirp/test/sync.js | 32 - .../mocha/node_modules/mkdirp/test/umask.js | 28 - .../node_modules/mkdirp/test/umask_sync.js | 32 - node_modules/mocha/package.json | 60 - node_modules/should/.idea/.name | 1 - .../should/.idea/codeStyleSettings.xml | 29 - node_modules/should/.idea/encodings.xml | 5 - .../inspectionProfiles/Project_Default.xml | 7 - .../inspectionProfiles/profiles_settings.xml | 7 - .../should/.idea/jsLibraryMappings.xml | 7 - .../should/.idea/jsLinters/jshint.xml | 68 - .../Node_js_Dependencies_for_should_js.xml | 13 - node_modules/should/.idea/misc.xml | 5 - node_modules/should/.idea/modules.xml | 9 - .../should/.idea/scopes/scope_settings.xml | 5 - node_modules/should/.idea/should.js.iml | 12 - node_modules/should/.idea/vcs.xml | 7 - node_modules/should/.idea/workspace.xml | 763 - node_modules/should/.npmignore | 2 - node_modules/should/History.md | 222 - node_modules/should/Makefile | 10 - node_modules/should/Readme.md | 644 - node_modules/should/index.js | 2 - node_modules/should/lib/browser.js | 23 - node_modules/should/lib/eql.js | 102 - node_modules/should/lib/ext/assert.js | 57 - node_modules/should/lib/ext/bool.js | 21 - node_modules/should/lib/ext/browser/jquery.js | 229 - node_modules/should/lib/ext/chain.js | 18 - node_modules/should/lib/ext/deprecated.js | 33 - node_modules/should/lib/ext/eql.js | 23 - node_modules/should/lib/ext/error.js | 51 - node_modules/should/lib/ext/http.js | 33 - node_modules/should/lib/ext/match.js | 112 - node_modules/should/lib/ext/number.js | 50 - node_modules/should/lib/ext/property.js | 215 - node_modules/should/lib/ext/string.js | 19 - node_modules/should/lib/ext/type.js | 77 - node_modules/should/lib/node.js | 23 - node_modules/should/lib/should.js | 169 - node_modules/should/lib/util.js | 119 - node_modules/should/package.json | 38 - node_modules/should/should.js | 2321 -- node_modules/should/should.js.for-tests | 2321 -- node_modules/should/should.min.js | 55 - 7837 files changed, 684384 deletions(-) delete mode 120000 node_modules/.bin/_mocha delete mode 120000 node_modules/.bin/express delete mode 120000 node_modules/.bin/gulp delete mode 120000 node_modules/.bin/jade delete mode 120000 node_modules/.bin/mocha delete mode 100644 node_modules/consolidate/.npmignore delete mode 100644 node_modules/consolidate/History.md delete mode 100644 node_modules/consolidate/Makefile delete mode 100644 node_modules/consolidate/Readme.md delete mode 100644 node_modules/consolidate/index.js delete mode 100644 node_modules/consolidate/lib/consolidate.js delete mode 100644 node_modules/consolidate/package.json delete mode 100644 node_modules/express/.npmignore delete mode 100644 node_modules/express/.travis.yml delete mode 100644 node_modules/express/History.md delete mode 100644 node_modules/express/LICENSE delete mode 100644 node_modules/express/Makefile delete mode 100644 node_modules/express/Readme.md delete mode 100644 node_modules/express/benchmarks/Makefile delete mode 100644 node_modules/express/benchmarks/middleware.js delete mode 100755 node_modules/express/benchmarks/run delete mode 100755 node_modules/express/bin/express delete mode 100644 node_modules/express/index.js delete mode 100644 node_modules/express/lib/application.js delete mode 100644 node_modules/express/lib/express.js delete mode 100644 node_modules/express/lib/middleware.js delete mode 100644 node_modules/express/lib/request.js delete mode 100644 node_modules/express/lib/response.js delete mode 100644 node_modules/express/lib/router/index.js delete mode 100644 node_modules/express/lib/router/route.js delete mode 100644 node_modules/express/lib/utils.js delete mode 100644 node_modules/express/lib/view.js delete mode 100644 node_modules/express/node_modules/buffer-crc32/.npmignore delete mode 100644 node_modules/express/node_modules/buffer-crc32/.travis.yml delete mode 100644 node_modules/express/node_modules/buffer-crc32/README.md delete mode 100644 node_modules/express/node_modules/buffer-crc32/index.js delete mode 100644 node_modules/express/node_modules/buffer-crc32/package.json delete mode 100644 node_modules/express/node_modules/buffer-crc32/tests/crc.test.js delete mode 100644 node_modules/express/node_modules/commander/History.md delete mode 100644 node_modules/express/node_modules/commander/Readme.md delete mode 100644 node_modules/express/node_modules/commander/index.js delete mode 100644 node_modules/express/node_modules/commander/node_modules/keypress/README.md delete mode 100644 node_modules/express/node_modules/commander/node_modules/keypress/index.js delete mode 100644 node_modules/express/node_modules/commander/node_modules/keypress/package.json delete mode 100644 node_modules/express/node_modules/commander/node_modules/keypress/test.js delete mode 100644 node_modules/express/node_modules/commander/package.json delete mode 100644 node_modules/express/node_modules/connect/.npmignore delete mode 100644 node_modules/express/node_modules/connect/.travis.yml delete mode 100644 node_modules/express/node_modules/connect/LICENSE delete mode 100644 node_modules/express/node_modules/connect/Readme.md delete mode 100644 node_modules/express/node_modules/connect/index.js delete mode 100644 node_modules/express/node_modules/connect/lib/cache.js delete mode 100644 node_modules/express/node_modules/connect/lib/connect.js delete mode 100644 node_modules/express/node_modules/connect/lib/index.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/basicAuth.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/bodyParser.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/compress.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/cookieParser.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/cookieSession.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/csrf.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/directory.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/errorHandler.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/favicon.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/json.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/limit.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/logger.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/methodOverride.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/multipart.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/query.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/responseTime.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/session.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/session/cookie.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/session/memory.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/session/session.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/session/store.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/static.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/staticCache.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/timeout.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/urlencoded.js delete mode 100644 node_modules/express/node_modules/connect/lib/middleware/vhost.js delete mode 100644 node_modules/express/node_modules/connect/lib/patch.js delete mode 100644 node_modules/express/node_modules/connect/lib/proto.js delete mode 100644 node_modules/express/node_modules/connect/lib/public/directory.html delete mode 100644 node_modules/express/node_modules/connect/lib/public/error.html delete mode 100644 node_modules/express/node_modules/connect/lib/public/favicon.ico delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/folder.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_add.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_attach.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_code.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_copy.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_delete.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_edit.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_error.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_excel.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_find.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_gear.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_go.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_green.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_key.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_link.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_paste.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_red.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_save.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_add.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_c.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_camera.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_cd.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_compressed.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_cplusplus.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_csharp.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_cup.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_database.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_delete.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_dvd.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_error.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_flash.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_go.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_h.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_horizontal.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_lightning.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_medal.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_paintbrush.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_paste.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_php.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_put.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_text.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_text_width.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_tux.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_vector.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_visualstudio.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_word.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/icons/page_world.png delete mode 100644 node_modules/express/node_modules/connect/lib/public/style.css delete mode 100644 node_modules/express/node_modules/connect/lib/utils.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/batch/.npmignore delete mode 100644 node_modules/express/node_modules/connect/node_modules/batch/History.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/batch/Makefile delete mode 100644 node_modules/express/node_modules/connect/node_modules/batch/Readme.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/batch/component.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/batch/index.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/batch/package.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/bytes/.npmignore delete mode 100644 node_modules/express/node_modules/connect/node_modules/bytes/History.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/bytes/Makefile delete mode 100644 node_modules/express/node_modules/connect/node_modules/bytes/Readme.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/bytes/component.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/bytes/index.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/bytes/package.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/.jshintrc delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/.npmignore delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/.travis.yml delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/CHANGELOG.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/LICENSE delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/README.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/examples/azureblobstorage.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/examples/s3.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/examples/upload.js delete mode 100755 node_modules/express/node_modules/connect/node_modules/multiparty/index.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/README.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/float.patch delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/README.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/float.patch delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/lib/util.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/package.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/util.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/LICENSE delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/README.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/debuglog.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/package.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/package.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/readable.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/transform.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/writable.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/.npmignore delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/README.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/index.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/package.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/test/test.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/test/test.txt delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/package.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/bench-multipart-parser.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/beta-sticker-1.png delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/binaryfile.tar.gz delete mode 100755 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/blank.gif delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/funkyfilename.txt delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/menu_separator.png delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/pf1y5.png delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/plain.txt delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/beta-sticker-1.png.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/binaryfile.tar.gz.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/blank.gif.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/menu_seperator.png.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/pf1y5.png.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/plain.txt.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/no-filename/filename-name.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/no-filename/generic.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/preamble/crlf.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/preamble/preamble.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/info.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/osx-chrome-13.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/osx-firefox-3.6.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/osx-safari-5.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-chrome-12.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-ie-7.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-ie-8.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-safari-5.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/workarounds/missing-hyphens1.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/workarounds/missing-hyphens2.http delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/encoding.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/no-filename.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/preamble.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/special-chars-in-filename.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/workarounds.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/multi_video.upload delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/multipart.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/record.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-connection-aborted.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-content-transfer-encoding.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-invalid.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-15.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-19.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-21.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-4.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-46.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-5.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/multiparty/test/test.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/LICENSE delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/examples/accept.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/examples/charset.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/examples/encoding.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/examples/language.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/lib/charset.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/lib/encoding.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/lib/language.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/lib/mediaType.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/lib/negotiator.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/package.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/readme.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/test/charset.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/test/encoding.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/test/language.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/negotiator/test/mediaType.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/pause/.npmignore delete mode 100644 node_modules/express/node_modules/connect/node_modules/pause/History.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/pause/Makefile delete mode 100644 node_modules/express/node_modules/connect/node_modules/pause/Readme.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/pause/index.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/pause/package.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/qs/.gitmodules delete mode 100644 node_modules/express/node_modules/connect/node_modules/qs/.npmignore delete mode 100644 node_modules/express/node_modules/connect/node_modules/qs/Readme.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/qs/index.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/qs/package.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/raw-body/.npmignore delete mode 100644 node_modules/express/node_modules/connect/node_modules/raw-body/.travis.yml delete mode 100644 node_modules/express/node_modules/connect/node_modules/raw-body/Makefile delete mode 100644 node_modules/express/node_modules/connect/node_modules/raw-body/README.md delete mode 100644 node_modules/express/node_modules/connect/node_modules/raw-body/index.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/raw-body/package.json delete mode 100644 node_modules/express/node_modules/connect/node_modules/uid2/LICENSE delete mode 100644 node_modules/express/node_modules/connect/node_modules/uid2/index.js delete mode 100644 node_modules/express/node_modules/connect/node_modules/uid2/package.json delete mode 100644 node_modules/express/node_modules/connect/package.json delete mode 100644 node_modules/express/node_modules/cookie-signature/.npmignore delete mode 100644 node_modules/express/node_modules/cookie-signature/History.md delete mode 100644 node_modules/express/node_modules/cookie-signature/Makefile delete mode 100644 node_modules/express/node_modules/cookie-signature/Readme.md delete mode 100644 node_modules/express/node_modules/cookie-signature/index.js delete mode 100644 node_modules/express/node_modules/cookie-signature/package.json delete mode 100644 node_modules/express/node_modules/cookie/.npmignore delete mode 100644 node_modules/express/node_modules/cookie/.travis.yml delete mode 100644 node_modules/express/node_modules/cookie/LICENSE delete mode 100644 node_modules/express/node_modules/cookie/README.md delete mode 100644 node_modules/express/node_modules/cookie/index.js delete mode 100644 node_modules/express/node_modules/cookie/package.json delete mode 100644 node_modules/express/node_modules/cookie/test/mocha.opts delete mode 100644 node_modules/express/node_modules/cookie/test/parse.js delete mode 100644 node_modules/express/node_modules/cookie/test/serialize.js delete mode 100644 node_modules/express/node_modules/debug/Readme.md delete mode 100644 node_modules/express/node_modules/debug/debug.js delete mode 100644 node_modules/express/node_modules/debug/index.js delete mode 100644 node_modules/express/node_modules/debug/lib/debug.js delete mode 100644 node_modules/express/node_modules/debug/package.json delete mode 100644 node_modules/express/node_modules/fresh/.npmignore delete mode 100644 node_modules/express/node_modules/fresh/History.md delete mode 100644 node_modules/express/node_modules/fresh/Makefile delete mode 100644 node_modules/express/node_modules/fresh/Readme.md delete mode 100644 node_modules/express/node_modules/fresh/index.js delete mode 100644 node_modules/express/node_modules/fresh/package.json delete mode 100644 node_modules/express/node_modules/merge-descriptors/.npmignore delete mode 100644 node_modules/express/node_modules/merge-descriptors/README.md delete mode 100644 node_modules/express/node_modules/merge-descriptors/component.json delete mode 100644 node_modules/express/node_modules/merge-descriptors/index.js delete mode 100644 node_modules/express/node_modules/merge-descriptors/package.json delete mode 100644 node_modules/express/node_modules/methods/History.md delete mode 100644 node_modules/express/node_modules/methods/Readme.md delete mode 100644 node_modules/express/node_modules/methods/index.js delete mode 100644 node_modules/express/node_modules/methods/package.json delete mode 100644 node_modules/express/node_modules/mkdirp/.npmignore delete mode 100644 node_modules/express/node_modules/mkdirp/.travis.yml delete mode 100644 node_modules/express/node_modules/mkdirp/LICENSE delete mode 100644 node_modules/express/node_modules/mkdirp/examples/pow.js delete mode 100644 node_modules/express/node_modules/mkdirp/index.js delete mode 100644 node_modules/express/node_modules/mkdirp/package.json delete mode 100644 node_modules/express/node_modules/mkdirp/readme.markdown delete mode 100644 node_modules/express/node_modules/mkdirp/test/chmod.js delete mode 100644 node_modules/express/node_modules/mkdirp/test/clobber.js delete mode 100644 node_modules/express/node_modules/mkdirp/test/mkdirp.js delete mode 100644 node_modules/express/node_modules/mkdirp/test/perm.js delete mode 100644 node_modules/express/node_modules/mkdirp/test/perm_sync.js delete mode 100644 node_modules/express/node_modules/mkdirp/test/race.js delete mode 100644 node_modules/express/node_modules/mkdirp/test/rel.js delete mode 100644 node_modules/express/node_modules/mkdirp/test/return.js delete mode 100644 node_modules/express/node_modules/mkdirp/test/return_sync.js delete mode 100644 node_modules/express/node_modules/mkdirp/test/root.js delete mode 100644 node_modules/express/node_modules/mkdirp/test/sync.js delete mode 100644 node_modules/express/node_modules/mkdirp/test/umask.js delete mode 100644 node_modules/express/node_modules/mkdirp/test/umask_sync.js delete mode 100644 node_modules/express/node_modules/range-parser/.npmignore delete mode 100644 node_modules/express/node_modules/range-parser/History.md delete mode 100644 node_modules/express/node_modules/range-parser/Makefile delete mode 100644 node_modules/express/node_modules/range-parser/Readme.md delete mode 100644 node_modules/express/node_modules/range-parser/index.js delete mode 100644 node_modules/express/node_modules/range-parser/package.json delete mode 100644 node_modules/express/node_modules/send/.npmignore delete mode 100644 node_modules/express/node_modules/send/History.md delete mode 100644 node_modules/express/node_modules/send/Makefile delete mode 100644 node_modules/express/node_modules/send/Readme.md delete mode 100644 node_modules/express/node_modules/send/index.js delete mode 100644 node_modules/express/node_modules/send/lib/send.js delete mode 100644 node_modules/express/node_modules/send/lib/utils.js delete mode 100644 node_modules/express/node_modules/send/node_modules/mime/LICENSE delete mode 100644 node_modules/express/node_modules/send/node_modules/mime/README.md delete mode 100644 node_modules/express/node_modules/send/node_modules/mime/mime.js delete mode 100644 node_modules/express/node_modules/send/node_modules/mime/package.json delete mode 100644 node_modules/express/node_modules/send/node_modules/mime/test.js delete mode 100644 node_modules/express/node_modules/send/node_modules/mime/types/mime.types delete mode 100644 node_modules/express/node_modules/send/node_modules/mime/types/node.types delete mode 100644 node_modules/express/node_modules/send/package.json delete mode 100644 node_modules/express/package.json delete mode 100644 node_modules/gulp-autoprefixer/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/README.md delete mode 100644 node_modules/gulp-autoprefixer/index.js delete mode 120000 node_modules/gulp-autoprefixer/node_modules/.bin/autoprefixer delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/ChangeLog.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/README.md delete mode 100755 node_modules/gulp-autoprefixer/node_modules/autoprefixer/bin/autoprefixer delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/data/browsers.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/data/prefixes.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/autoprefixer.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/binary.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/browsers.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/declaration.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-content.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-items.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-self.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/border-image.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/border-radius.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/display-flex.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/fill-available.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/filter.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-basis.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-direction.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-flow.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-grow.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-shrink.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-spec.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-wrap.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/fullscreen.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/gradient.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/justify-content.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/order.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/placeholder.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/transform.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/transition.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/info.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/keyframes.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/old-value.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/prefixer.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/prefixes.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/processor.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/selector.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/updater.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/utils.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/value.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/CHANGELOG.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/copy.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/create.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/json.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/mkdir.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/output.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/remove.js delete mode 120000 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/.bin/ncp delete mode 120000 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/.bin/rimraf delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/CHANGELOG.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/lib/jsonfile.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/.travis.yml delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/examples/pow.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/readme.markdown delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/chmod.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/clobber.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/mkdirp.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/perm.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/perm_sync.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/race.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/rel.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/return.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/return_sync.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/root.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/sync.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/umask.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/umask_sync.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/.travis.yml delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/LICENSE.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/README.md delete mode 100755 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/bin/ncp delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/lib/ncp.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/a delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/b delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/c delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/d delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/e delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/f delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/sub/a delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/sub/b delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/ncp-test.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/AUTHORS delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/README.md delete mode 100755 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/bin.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/rimraf.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/run.sh delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/setup.sh delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/test-async.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/test-sync.js delete mode 100755 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/ChangeLog.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/at-rule.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/container.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/declaration.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/generate-map.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/list.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/node.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/parse.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/postcss.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/raw.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/result.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/root.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/rule.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/syntax-error.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/vendor.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/.travis.yml delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/CHANGELOG.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/Makefile.dryice.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/assert-shim.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/mini-require.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/prefix-source-map.jsm delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/prefix-utils.jsm delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-browser.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-source-map.jsm delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-utils.jsm delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/test-prefix.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/test-suffix.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/array-set.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/base64-vlq.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/base64.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/binary-search.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-generator.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-node.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/util.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/amdefine.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/intercept.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/package.json delete mode 100755 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/run-tests.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-api.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-array-set.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-base64-vlq.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-base64.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-binary-search.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-dog-fooding.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-consumer.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-generator.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-node.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-util.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/util.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/updaters/browsers.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/updaters/prefixes.js delete mode 100755 node_modules/gulp-autoprefixer/node_modules/bufferstreams/.npmignore delete mode 100755 node_modules/gulp-autoprefixer/node_modules/bufferstreams/.travis.yml delete mode 100755 node_modules/gulp-autoprefixer/node_modules/bufferstreams/LICENCE delete mode 100755 node_modules/gulp-autoprefixer/node_modules/bufferstreams/README.md delete mode 100755 node_modules/gulp-autoprefixer/node_modules/bufferstreams/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/bufferstreams/src/index.js delete mode 100755 node_modules/gulp-autoprefixer/node_modules/bufferstreams/tests/index.mocha.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/.travis.yml delete mode 100755 node_modules/gulp-autoprefixer/node_modules/gulp-util/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/File.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/PluginError.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/beep.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/buffer.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/colors.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/combine.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/date.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/env.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/isBuffer.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/isNull.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/isStream.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/linefeed.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/log.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/noop.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/replaceExtension.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/template.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/index.js delete mode 120000 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md delete mode 100755 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/readme.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/Readme.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/basic.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js delete 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 delete 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 delete 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 delete 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 delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js delete 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 delete 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 delete 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 delete 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 delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js delete 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 delete 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 delete 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 delete 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 delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js delete 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 delete 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 delete 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 delete 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 delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/.travis.yml delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/example/parse.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/readme.markdown delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/dash.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/default_bool.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/dotted.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/long.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/parse.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/short.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/whitespace.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/.travis.yml delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/History.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/Makefile delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/Readme.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md delete mode 100755 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.jshintrc delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.travis.yml delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/basic-test.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/bench.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/sauce.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/test.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/through2.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/.npmignore delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/.travis.yml delete mode 100755 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/LICENSE delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/File.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isNull.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isStream.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/package.json delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/File.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/PluginError.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/beep.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/buffer.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/colors.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/combine.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/date.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/env.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isBuffer.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isNull.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isStream.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/linefeed.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/log.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/noop.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/replaceExtension.js delete mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/template.js delete mode 100644 node_modules/gulp-autoprefixer/package.json delete mode 100644 node_modules/gulp-autoprefixer/test/test.css delete mode 100644 node_modules/gulp-autoprefixer/test/test.js delete mode 100644 node_modules/gulp-imagemin/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/filesize/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/filesize/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/filesize/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/filesize/lib/filesize.js delete mode 100644 node_modules/gulp-imagemin/node_modules/filesize/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/graceful-fs/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/graceful-fs/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/graceful-fs/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/graceful-fs/graceful-fs.js delete mode 100644 node_modules/gulp-imagemin/node_modules/graceful-fs/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/graceful-fs/polyfills.js delete mode 100644 node_modules/gulp-imagemin/node_modules/graceful-fs/test/open.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/gulp-util/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/File.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/PluginError.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/beep.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/buffer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/colors.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/combine.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/date.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/env.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/isBuffer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/isNull.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/isStream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/linefeed.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/log.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/noop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/replaceExtension.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/lib/template.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/index.js delete mode 120000 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md delete mode 100755 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/basic.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/example/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/readme.markdown delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/dash.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/default_bool.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/dotted.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/long.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/short.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/whitespace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/History.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/.jshintrc delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/basic-test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/bench.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/sauce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/through2.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/File.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/isNull.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/isStream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/File.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/PluginError.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/beep.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/buffer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/colors.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/combine.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/date.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/env.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/isBuffer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/isNull.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/isStream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/linefeed.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/log.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/noop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/replaceExtension.js delete mode 100644 node_modules/gulp-imagemin/node_modules/gulp-util/test/template.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/imagemin.js delete mode 120000 node_modules/gulp-imagemin/node_modules/image-min/node_modules/.bin/gifsicle delete mode 120000 node_modules/gulp-imagemin/node_modules/image-min/node_modules/.bin/jpegtran delete mode 120000 node_modules/gulp-imagemin/node_modules/image-min/node_modules/.bin/optipng delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/index.js delete mode 120000 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/.bin/rimraf delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/hash-file/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/hash-file/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/hash-file/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/AUTHORS delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/bin.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/rimraf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/run.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/setup.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/test-async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/test-sync.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/bin/gifsicle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/lib/check.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/lib/gifsicle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/bin-wrapper.js delete mode 120000 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/.bin/rimraf delete mode 120000 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/.bin/which delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/download.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/decompress.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/.idea/scopes/scope_settings.xml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/MIT-LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/adm-zip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/entryHeader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/mainHeader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/deflater.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/inflater.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/blank file.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fast.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fastest.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/linux_arc.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/maximum.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/normal.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/store.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/ultra.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/constants.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/errors.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/fattr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/utils.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipEntry.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipFile.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/extracter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/buffer-entry.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extract.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/global-header-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/header.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/pack.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream-pause.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper-pause.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/block-stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/basic.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad-thorough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/pause-resume.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/thorough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/two-stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/filter-pipe.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/pipe.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/symlink-write.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/fstream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/abstract.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/collect.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/get-type.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/socket-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits_browser.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/tar.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/00-setup-fixtures.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/extract.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/fixtures.tgz delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/header.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack-no-proprietary.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/zz-cleanup.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.gnu delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark-native.c delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/compare.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/perf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng-browser.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/mocha.opts delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/uuid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/each-async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/dns-request.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/copy.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/debug.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/getSafe.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/optional.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/License delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/lib/form_data.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/component.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/License delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/Makefile delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/example/usage.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/hawk.png delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/logo.png delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/browser.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/client.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/crypto.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/server.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/utils.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/Makefile delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/images/boom.png delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/images/hoek.png delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/browser.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/client.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/crypto.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/message.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/readme.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/server.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/uri.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/utils.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.dir-locals.el delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/http_signing.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/parser.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/signer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/util.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/verify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/stringify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/mime.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/mime.types delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/node.types delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/component.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/compare_v1.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.html delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/uuid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.gitmodules delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.jshintrc delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/cookie.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/memstore.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/public-suffix.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/request.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.jshintrc delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/float.patch delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/readable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/transform.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/writable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/has-keys.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/mutable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/basic-test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/bench.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/sauce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/through2.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/History.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/lib/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.gitmodules delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/lib/async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/test/isbin.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/test/mocha.opts delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.editorconfig delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.jshintrc delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/CHANGELOG.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/CONTRIBUTING.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/append.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/collect.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/combine.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/compact.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/difference.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/findIndex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/flatten.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/indexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/insert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/intersection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/invoke.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/join.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/lastIndexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/range.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/reduceRight.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/remove.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/removeAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/shuffle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/sort.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/split.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/toLookup.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/union.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/unique.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/xor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/zip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/make_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/dayOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/diff.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/i18n/en-US.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/i18n/pt-BR.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/i18n_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/isLeapYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/isSame.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/parseIso.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/startOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/strftime.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/timezoneAbbr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/timezoneOffset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInMonth.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/weekOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/array.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/collection.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/date.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/function.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/lang.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/math.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/number.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/object.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/queryString.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/random.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/string.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/time.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/bind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/compose.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/debounce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/func.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/makeIterator_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/partial.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/prop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/series.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/throttle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/timeout.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/clone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/createObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/ctorApply.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/deepClone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/defaults.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/inheritPrototype.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/is.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isBoolean.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isDate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isEmpty.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isFinite.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isFunction.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isInteger.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isKind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isNaN.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isNull.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isNumber.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isPlainObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isUndefined.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isnt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/kindOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/toArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/toString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/ceil.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/clamp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/countSteps.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/floor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/inRange.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/isNear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/lerp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/loop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/norm.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/round.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/MAX_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/MAX_UINT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/MIN_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/abbreviate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/currencyFormat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/enforcePrecision.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/pad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/rol.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/ror.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/sign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/toInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/toUInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/toUInt31.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/bindAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepEquals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepFillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepMatches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepMixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/equals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/fillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/forIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/forOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/functions.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/get.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/has.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/hasOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/keys.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/matches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/merge.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/mixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/namespace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/set.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/unset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/values.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/decode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/encode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/getParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/getQuery.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/setParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/choice.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/guid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/rand.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randBit.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randHex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randSign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/append.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/collect.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/combine.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/compact.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/difference.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/findIndex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/flatten.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/indexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/insert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/intersection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/invoke.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/join.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/lastIndexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/range.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/reduceRight.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/remove.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/removeAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/shuffle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/sort.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/split.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/toLookup.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/union.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/unique.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/xor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/zip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/make_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/dayOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/diff.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/en-US.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/pt-BR.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/i18n_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/isLeapYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/isSame.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/parseIso.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/startOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/strftime.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneAbbr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneOffset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInMonth.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/weekOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/bind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/compose.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/debounce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/func.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/makeIterator_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/partial.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/prop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/series.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/throttle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/timeout.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/clone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/createObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/ctorApply.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/deepClone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/defaults.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/inheritPrototype.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/is.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isBoolean.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isDate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isEmpty.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isFinite.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isFunction.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isInteger.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isKind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isNaN.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isNull.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isNumber.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isPlainObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isUndefined.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isnt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/kindOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/toArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/toString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/ceil.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/clamp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/countSteps.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/floor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/inRange.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/isNear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/lerp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/loop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/norm.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/round.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_UINT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/MIN_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/abbreviate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/currencyFormat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/enforcePrecision.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/pad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/rol.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/ror.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/sign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/toInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt31.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/bindAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepEquals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepFillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepMatches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepMixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/equals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/fillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/forIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/forOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/functions.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/get.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/has.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/hasOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/keys.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/matches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/merge.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/mixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/namespace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/set.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/unset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/values.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/decode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/encode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/getParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/getQuery.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/setParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/choice.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/guid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/rand.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randBit.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randHex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randSign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/WHITE_SPACES.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/camelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/crop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/endsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/escapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/escapeRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/escapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/hyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/interpolate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/lowerCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/lpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/ltrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/makePath.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/normalizeLineBreaks.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/pascalCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/properCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonASCII.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonWord.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/repeat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/replace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/replaceAccents.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/rpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/rtrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/sentenceCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/slugify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/startsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/stripHtmlTags.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/trim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/truncate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/typecast.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unCamelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/underscore.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unhyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/upperCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/convert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/now.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/parseMs.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/toTimeString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/WHITE_SPACES.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/camelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/crop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/endsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/escapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/escapeRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/escapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/hyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/interpolate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/lowerCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/lpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/ltrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/makePath.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/normalizeLineBreaks.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/pascalCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/properCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/removeNonASCII.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/removeNonWord.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/repeat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/replace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/replaceAccents.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/rpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/rtrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/sentenceCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/slugify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/startsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/stripHtmlTags.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/trim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/truncate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/typecast.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unCamelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/underscore.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unescapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unescapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unhyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/upperCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/convert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/now.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/parseMs.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/toTimeString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/History.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/lib/node-progress.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/AUTHORS delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/bin.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/rimraf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/run.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/setup.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/test-async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/test-sync.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/bin/which delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/which.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/chalk.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/ansi-styles/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/has-color/has-color.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/has-color/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/has-color/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/readme.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/vendor/gifsicle delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/bin/jpegtran.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/lib/check.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/lib/jpegtran.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/bin-wrapper.js delete mode 120000 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/.bin/rimraf delete mode 120000 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/.bin/which delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/download.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/decompress.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/.idea/scopes/scope_settings.xml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/MIT-LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/adm-zip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/entryHeader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/mainHeader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/deflater.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/inflater.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/blank file.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fast.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fastest.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/linux_arc.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/maximum.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/normal.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/store.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/ultra.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/constants.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/errors.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/fattr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/utils.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipEntry.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipFile.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/extracter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/buffer-entry.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extract.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/global-header-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/header.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/pack.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream-pause.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper-pause.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/block-stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/basic.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad-thorough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/pause-resume.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/thorough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/two-stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/filter-pipe.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/pipe.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/symlink-write.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/fstream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/abstract.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/collect.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/get-type.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/socket-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits_browser.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/tar.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/00-setup-fixtures.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/extract.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/fixtures.tgz delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/header.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack-no-proprietary.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/zz-cleanup.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.gnu delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark-native.c delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/compare.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/perf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng-browser.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/mocha.opts delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/uuid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/each-async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/dns-request.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/copy.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/debug.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/getSafe.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/optional.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/License delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/lib/form_data.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/component.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/License delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/Makefile delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/example/usage.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/hawk.png delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/logo.png delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/browser.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/client.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/crypto.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/server.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/utils.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/Makefile delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/images/boom.png delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/images/hoek.png delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/browser.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/client.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/crypto.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/message.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/readme.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/server.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/uri.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/utils.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.dir-locals.el delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/http_signing.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/parser.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/signer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/util.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/verify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/stringify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/mime.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/mime.types delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/node.types delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/component.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/compare_v1.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.html delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/uuid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.gitmodules delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.jshintrc delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/cookie.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/memstore.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/public-suffix.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/request.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.jshintrc delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/float.patch delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/readable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/transform.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/writable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/has-keys.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/mutable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/basic-test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/bench.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/sauce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/through2.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/History.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/lib/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.gitmodules delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/lib/async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/test/isbin.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/test/mocha.opts delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.editorconfig delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.jshintrc delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/CHANGELOG.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/CONTRIBUTING.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/append.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/collect.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/combine.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/compact.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/difference.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/findIndex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/flatten.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/indexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/insert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/intersection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/invoke.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/join.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/lastIndexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/range.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/reduceRight.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/remove.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/removeAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/shuffle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/sort.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/split.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/toLookup.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/union.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/unique.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/xor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/zip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/make_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/dayOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/diff.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/en-US.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/pt-BR.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/isLeapYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/isSame.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/parseIso.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/startOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/strftime.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneAbbr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneOffset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInMonth.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/weekOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/array.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/collection.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/date.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/function.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/lang.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/math.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/number.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/object.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/queryString.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/random.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/string.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/time.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/bind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/compose.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/debounce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/func.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/makeIterator_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/partial.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/prop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/series.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/throttle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/timeout.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/clone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/createObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/ctorApply.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/deepClone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/defaults.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/inheritPrototype.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/is.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isBoolean.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isDate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isEmpty.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFinite.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFunction.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isInteger.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isKind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNaN.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNull.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNumber.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isPlainObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isUndefined.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isnt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/kindOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/toArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/toString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/ceil.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/clamp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/countSteps.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/floor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/inRange.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/isNear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/lerp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/loop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/norm.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/round.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_UINT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/MIN_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/abbreviate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/currencyFormat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/enforcePrecision.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/pad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/rol.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/ror.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/sign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/toInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt31.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/bindAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepEquals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepFillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMatches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/equals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/fillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/forIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/forOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/functions.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/get.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/has.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/hasOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/keys.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/matches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/merge.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/mixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/namespace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/set.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/unset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/values.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/decode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/encode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getQuery.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/setParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/choice.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/guid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/rand.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randBit.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randHex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randSign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/append.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/collect.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/combine.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/compact.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/difference.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/findIndex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/flatten.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/indexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/insert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/intersection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/invoke.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/join.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/lastIndexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/range.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduceRight.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/remove.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/removeAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/shuffle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/sort.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/split.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/toLookup.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/union.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/unique.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/xor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/zip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/make_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/dayOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/diff.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/en-US.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/pt-BR.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isLeapYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isSame.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/parseIso.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/startOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/strftime.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneAbbr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneOffset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInMonth.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/weekOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/bind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/compose.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/debounce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/func.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/makeIterator_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/partial.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/prop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/series.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/throttle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/timeout.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/clone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/createObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/ctorApply.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/deepClone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/defaults.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/inheritPrototype.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/is.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isBoolean.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isDate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isEmpty.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFinite.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFunction.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isInteger.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isKind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNaN.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNull.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNumber.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isPlainObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isUndefined.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isnt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/kindOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/ceil.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/clamp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/countSteps.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/floor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/inRange.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/isNear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/lerp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/loop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/norm.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/round.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_UINT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MIN_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/abbreviate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/currencyFormat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/enforcePrecision.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/pad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/rol.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/ror.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/sign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt31.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/bindAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepEquals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepFillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMatches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/equals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/fillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/functions.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/get.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/has.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/hasOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/keys.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/matches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/merge.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/mixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/namespace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/set.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/unset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/values.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/decode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/encode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getQuery.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/setParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/choice.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/guid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/rand.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randBit.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randHex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randSign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/WHITE_SPACES.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/camelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/crop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/endsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/hyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/interpolate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lowerCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/ltrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/makePath.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/normalizeLineBreaks.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/pascalCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/properCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonASCII.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonWord.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/repeat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replaceAccents.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rtrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/sentenceCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/slugify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/startsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/stripHtmlTags.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/trim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/truncate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/typecast.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unCamelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/underscore.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unhyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/upperCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/convert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/now.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/parseMs.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/toTimeString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/WHITE_SPACES.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/camelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/crop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/endsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/hyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/interpolate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/lowerCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/lpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/ltrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/makePath.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/normalizeLineBreaks.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/pascalCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/properCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonASCII.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonWord.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/repeat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/replace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/replaceAccents.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/rpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/rtrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/sentenceCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/slugify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/startsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/stripHtmlTags.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/trim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/truncate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/typecast.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unCamelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/underscore.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unhyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/upperCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/convert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/now.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/parseMs.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/toTimeString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/History.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/lib/node-progress.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/AUTHORS delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/bin.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/rimraf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/run.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/setup.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-sync.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/bin/which delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/which.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/chalk.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/ansi-styles/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/has-color/has-color.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/has-color/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/has-color/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/fixtures/test.jpg delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/minified.jpg delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/test-build.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/test-path.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/vendor/jpegtran delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/examples/pow.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/readme.markdown delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/chmod.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/clobber.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/mkdirp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/perm.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/perm_sync.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/race.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/rel.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/return.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/return_sync.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/root.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/sync.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/umask.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/umask_sync.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.editorconfig delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.jshintrc delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/CHANGELOG.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/CONTRIBUTING.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/append.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/collect.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/combine.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/compact.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/difference.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/findIndex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/flatten.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/indexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/insert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/intersection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/invoke.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/join.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/lastIndexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/range.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/reduceRight.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/remove.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/removeAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/shuffle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/sort.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/split.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/toLookup.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/union.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/unique.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/xor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/zip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/make_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/dayOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/diff.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n/de-DE.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n/en-US.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n/pt-BR.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/isLeapYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/isSame.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/parseIso.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/startOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/strftime.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/timezoneAbbr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/timezoneOffset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/totalDaysInMonth.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/totalDaysInYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/weekOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/array.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/collection.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/date.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/function.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/lang.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/math.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/number.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/object.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/queryString.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/random.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/string.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/time.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/bind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/compose.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/debounce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/func.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/makeIterator_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/partial.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/prop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/series.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/throttle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/timeout.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/times.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/clone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/createObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/ctorApply.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/deepClone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/defaults.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/inheritPrototype.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/is.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isBoolean.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isDate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isEmpty.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isFinite.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isFunction.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isInteger.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isKind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isNaN.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isNull.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isNumber.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isPlainObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isUndefined.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isnt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/kindOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/toArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/toNumber.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/toString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/ceil.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/clamp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/countSteps.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/floor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/inRange.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/isNear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/lerp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/loop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/norm.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/round.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/MAX_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/MAX_UINT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/MIN_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/abbreviate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/currencyFormat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/enforcePrecision.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/pad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/rol.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/ror.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/sign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/toInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/toUInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/toUInt31.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/bindAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepEquals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepFillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepMatches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepMixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/equals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/fillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/forIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/forOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/functions.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/get.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/has.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/hasOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/keys.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/matches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/merge.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/mixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/namespace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/set.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/unset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/values.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/decode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/encode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/getParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/getQuery.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/setParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/choice.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/guid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/rand.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randBit.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randHex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randSign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/append.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/collect.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/combine.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/compact.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/difference.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/findIndex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/flatten.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/indexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/insert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/intersection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/invoke.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/join.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/lastIndexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/range.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/reduceRight.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/remove.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/removeAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/shuffle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/sort.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/split.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/toLookup.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/union.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/unique.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/xor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/zip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/make_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/dayOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/diff.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n/de-DE.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n/en-US.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n/pt-BR.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/isLeapYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/isSame.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/parseIso.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/startOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/strftime.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/timezoneAbbr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/timezoneOffset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/totalDaysInMonth.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/totalDaysInYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/weekOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/bind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/compose.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/debounce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/func.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/makeIterator_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/partial.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/prop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/series.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/throttle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/timeout.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/times.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/clone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/createObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/ctorApply.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/deepClone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/defaults.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/inheritPrototype.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/is.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isBoolean.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isDate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isEmpty.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isFinite.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isFunction.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isInteger.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isKind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isNaN.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isNull.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isNumber.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isPlainObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isUndefined.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isnt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/kindOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/toArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/toNumber.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/toString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/ceil.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/clamp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/countSteps.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/floor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/inRange.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/isNear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/lerp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/loop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/norm.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/round.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/MAX_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/MAX_UINT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/MIN_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/abbreviate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/currencyFormat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/enforcePrecision.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/pad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/rol.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/ror.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/sign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/toInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/toUInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/toUInt31.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/bindAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepEquals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepFillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepMatches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepMixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/equals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/fillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/forIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/forOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/functions.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/get.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/has.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/hasOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/keys.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/matches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/merge.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/mixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/namespace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/set.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/unset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/values.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/decode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/encode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/getParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/getQuery.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/setParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/choice.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/guid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/rand.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randBit.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randHex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randSign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/WHITE_SPACES.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/camelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/crop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/endsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/escapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/escapeRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/escapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/hyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/insert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/interpolate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/lowerCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/lpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/ltrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/makePath.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/normalizeLineBreaks.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/pascalCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/properCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/removeNonASCII.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/removeNonWord.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/repeat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/replace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/replaceAccents.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/rpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/rtrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/sentenceCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/slugify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/startsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/stripHtmlTags.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/trim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/truncate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/typecast.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unCamelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/underscore.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unescapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unescapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unhyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/upperCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/convert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/now.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/parseMs.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/toTimeString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/WHITE_SPACES.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/camelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/crop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/endsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/escapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/escapeRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/escapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/hyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/insert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/interpolate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/lowerCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/lpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/ltrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/makePath.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/normalizeLineBreaks.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/pascalCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/properCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/removeNonASCII.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/removeNonWord.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/repeat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/replace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/replaceAccents.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/rpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/rtrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/sentenceCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/slugify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/startsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/stripHtmlTags.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/trim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/truncate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/typecast.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unCamelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/underscore.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unescapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unescapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unhyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/upperCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/convert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/now.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/parseMs.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/toTimeString.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/bin/optipng.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/lib/check.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/lib/optipng.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/bin-wrapper.js delete mode 120000 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/.bin/rimraf delete mode 120000 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/.bin/which delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/download.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/decompress.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/.idea/scopes/scope_settings.xml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/MIT-LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/adm-zip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/entryHeader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/mainHeader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/deflater.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/inflater.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/blank file.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fast.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fastest.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/linux_arc.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/maximum.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/normal.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/store.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/ultra.zip delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/constants.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/errors.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/fattr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/utils.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipEntry.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipFile.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/extracter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/buffer-entry.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extract.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/global-header-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/header.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/pack.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream-pause.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper-pause.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/block-stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/basic.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad-thorough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/pause-resume.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/thorough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/two-stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/filter-pipe.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/pipe.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/symlink-write.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/fstream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/abstract.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/collect.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/get-type.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/socket-reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits_browser.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/tar.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/00-setup-fixtures.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/extract.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/fixtures.tgz delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/header.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack-no-proprietary.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/zz-cleanup.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.gnu delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark-native.c delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/compare.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/perf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng-browser.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/mocha.opts delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/uuid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/each-async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/dns-request.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/copy.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/debug.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/getSafe.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/optional.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/License delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/lib/form_data.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/component.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/License delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/Makefile delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/example/usage.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/hawk.png delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/logo.png delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/browser.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/client.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/crypto.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/server.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/utils.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/Makefile delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/images/boom.png delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/images/hoek.png delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/browser.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/client.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/crypto.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/index.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/message.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/readme.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/server.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/uri.js delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/utils.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.dir-locals.el delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/http_signing.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/parser.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/signer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/util.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/verify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/stringify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/mime.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/mime.types delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/node.types delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/component.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/compare_v1.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.html delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/uuid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.gitmodules delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.jshintrc delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/cookie.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/memstore.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/public-suffix.txt delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/package.json delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/request.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.jshintrc delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/float.patch delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/readable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/transform.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/writable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/has-keys.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/mutable.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/basic-test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/bench.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/sauce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/through2.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/History.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/lib/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.gitmodules delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/lib/async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/test/isbin.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/test/mocha.opts delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.editorconfig delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.jshintrc delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/CHANGELOG.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/CONTRIBUTING.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/append.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/collect.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/combine.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/compact.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/difference.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/findIndex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/flatten.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/indexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/insert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/intersection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/invoke.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/join.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/lastIndexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/range.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/reduceRight.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/remove.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/removeAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/shuffle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/sort.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/split.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/toLookup.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/union.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/unique.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/xor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/zip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/make_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/dayOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/diff.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/en-US.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/pt-BR.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/isLeapYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/isSame.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/parseIso.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/startOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/strftime.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneAbbr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneOffset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInMonth.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/weekOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/array.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/collection.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/date.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/function.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/lang.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/math.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/number.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/object.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/queryString.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/random.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/string.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/time.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/bind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/compose.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/debounce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/func.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/makeIterator_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/partial.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/prop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/series.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/throttle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/timeout.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/clone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/createObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/ctorApply.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/deepClone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/defaults.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/inheritPrototype.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/is.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isBoolean.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isDate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isEmpty.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFinite.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFunction.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isInteger.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isKind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNaN.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNull.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNumber.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isPlainObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isUndefined.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isnt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/kindOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/toArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/toString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/ceil.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/clamp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/countSteps.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/floor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/inRange.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/isNear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/lerp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/loop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/norm.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/round.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_UINT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/MIN_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/abbreviate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/currencyFormat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/enforcePrecision.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/pad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/rol.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/ror.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/sign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/toInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt31.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/bindAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepEquals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepFillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMatches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/equals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/fillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/forIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/forOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/functions.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/get.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/has.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/hasOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/keys.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/matches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/merge.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/mixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/namespace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/set.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/unset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/values.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/decode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/encode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getQuery.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/setParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/choice.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/guid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/rand.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randBit.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randHex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randSign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/append.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/collect.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/combine.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/compact.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/difference.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/findIndex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/flatten.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/indexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/insert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/intersection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/invoke.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/join.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/lastIndexOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/range.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduceRight.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/remove.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/removeAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/shuffle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/sort.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/split.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/toLookup.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/union.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/unique.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/xor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/zip.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/forEach.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/make_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/dayOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/diff.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/en-US.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/pt-BR.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isLeapYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isSame.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/parseIso.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/startOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/strftime.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneAbbr.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneOffset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInMonth.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/weekOfTheYear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/bind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/compose.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/debounce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/func.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/makeIterator_.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/partial.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/prop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/series.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/throttle.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/timeout.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/clone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/createObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/ctorApply.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/deepClone.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/defaults.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/inheritPrototype.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/is.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArguments.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isBoolean.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isDate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isEmpty.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFinite.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFunction.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isInteger.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isKind.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNaN.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNull.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNumber.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isPlainObject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isUndefined.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isnt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/kindOf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toArray.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/ceil.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/clamp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/countSteps.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/floor.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/inRange.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/isNear.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/lerp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/loop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/norm.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/round.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_UINT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MIN_INT.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/abbreviate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/currencyFormat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/enforcePrecision.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/pad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/rol.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/ror.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/sign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt31.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/bindAll.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepEquals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepFillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMatches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/equals.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/every.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/fillIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/filter.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/find.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/functions.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/get.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/has.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/hasOwn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/keys.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/map.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/matches.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/max.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/merge.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/min.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/mixIn.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/namespace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pick.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pluck.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reduce.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reject.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/set.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/size.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/some.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/unset.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/values.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/decode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/encode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getQuery.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/parse.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/setParam.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/choice.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/guid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/rand.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randBit.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randHex.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randInt.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randSign.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/random.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/WHITE_SPACES.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/camelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/crop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/endsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/hyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/interpolate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lowerCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/ltrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/makePath.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/normalizeLineBreaks.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/pascalCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/properCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonASCII.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonWord.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/repeat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replaceAccents.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rtrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/sentenceCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/slugify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/startsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/stripHtmlTags.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/trim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/truncate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/typecast.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unCamelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/underscore.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unhyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/upperCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/convert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/now.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/parseMs.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/toTimeString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/WHITE_SPACES.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/camelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/contains.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/crop.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/endsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeRegExp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/hyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/interpolate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/lowerCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/lpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/ltrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/makePath.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/normalizeLineBreaks.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/pascalCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/properCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonASCII.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonWord.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/repeat.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/replace.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/replaceAccents.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/rpad.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/rtrim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/sentenceCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/slugify.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/startsWith.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/stripHtmlTags.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/trim.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/truncate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/typecast.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unCamelCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/underscore.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeHtml.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeUnicode.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unhyphenate.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/upperCase.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/convert.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/now.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/parseMs.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/toTimeString.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/History.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/Makefile delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/Readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/lib/node-progress.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/AUTHORS delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/bin.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/rimraf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/run.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/setup.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-async.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-sync.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/README.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/bin/which delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/which.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/chalk.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/ansi-styles/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/has-color/has-color.js delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/has-color/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/has-color/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/readme.md delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/readme.md delete mode 100755 node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/vendor/optipng delete mode 100644 node_modules/gulp-imagemin/node_modules/image-min/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/map-stream/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/map-stream/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/map-stream/LICENCE delete mode 100644 node_modules/gulp-imagemin/node_modules/map-stream/examples/pretty.js delete mode 100644 node_modules/gulp-imagemin/node_modules/map-stream/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/map-stream/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/map-stream/readme.markdown delete mode 100644 node_modules/gulp-imagemin/node_modules/map-stream/test/simple-map.asynct.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/LICENSE delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/examples/pow.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/index.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/readme.markdown delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/chmod.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/clobber.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/mkdirp.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/perm.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/perm_sync.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/race.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/rel.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/return.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/return_sync.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/root.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/sync.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/umask.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/umask_sync.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/.npmignore delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/.travis.yml delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/LICENSE.md delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/README.md delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/bench.gnu delete mode 100755 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/bench.sh delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/benchmark-native.c delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/benchmark.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/misc/compare.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/misc/perf.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/rng-browser.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/rng.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/test/mocha.opts delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/test/test.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/uuid.js delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/package.json delete mode 100644 node_modules/gulp-imagemin/node_modules/temp-write/readme.md delete mode 100644 node_modules/gulp-imagemin/package.json delete mode 100644 node_modules/gulp-imagemin/readme.md delete mode 100644 node_modules/gulp-minify-css/.npmignore delete mode 100644 node_modules/gulp-minify-css/.travis.yml delete mode 100755 node_modules/gulp-minify-css/LICENSE delete mode 100644 node_modules/gulp-minify-css/README.md delete mode 100644 node_modules/gulp-minify-css/index.js delete mode 120000 node_modules/gulp-minify-css/node_modules/.bin/cleancss delete mode 100755 node_modules/gulp-minify-css/node_modules/bufferstreams/.npmignore delete mode 100755 node_modules/gulp-minify-css/node_modules/bufferstreams/.travis.yml delete mode 100755 node_modules/gulp-minify-css/node_modules/bufferstreams/LICENCE delete mode 100755 node_modules/gulp-minify-css/node_modules/bufferstreams/README.md delete mode 100755 node_modules/gulp-minify-css/node_modules/bufferstreams/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/bufferstreams/src/index.js delete mode 100755 node_modules/gulp-minify-css/node_modules/bufferstreams/tests/index.mocha.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/History.md delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/LICENSE delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/README.md delete mode 100755 node_modules/gulp-minify-css/node_modules/clean-css/bin/cleancss delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/clean.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/hsl-to-hex.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/long-to-short-hex.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/rgb-to-hex.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/shortener.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/images/url-rebase.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/images/url-rewriter.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/imports/inliner.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/properties/optimizer.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/properties/shorthand-notations.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/selectors/empty-removal.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/selectors/optimizer.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/selectors/tokenizer.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/text/comments.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/text/escape-store.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/text/expressions.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/text/free.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/lib/text/urls.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/History.md delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/Readme.md delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/clean-css/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/clone/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/clone/.travis.yml delete mode 100644 node_modules/gulp-minify-css/node_modules/clone/LICENSE delete mode 100644 node_modules/gulp-minify-css/node_modules/clone/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/clone/clone.js delete mode 100644 node_modules/gulp-minify-css/node_modules/clone/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/clone/test.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/.travis.yml delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/LICENCE delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/examples/pretty.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/.travis.yml delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/LICENCE delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/test/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/LICENSE.APACHE2 delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/LICENSE.MIT delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/readme.markdown delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/test/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/.travis.yml delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/LICENCE delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/examples/pretty.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/readme.markdown delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/test/simple-map.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/LICENSE delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/readme.markdown delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/test/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/test/pause-end.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/.travis.yml delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/LICENCE delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/examples/pretty.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/readme.markdown delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/test/partitioned_unicode.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/test/split.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/test/try_catch.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/.travis.yml delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/LICENSE delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/test/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/.travis.yml delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/LICENSE.APACHE2 delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/LICENSE.MIT delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/readme.markdown delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/auto-destroy.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/buffering.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/end.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/readme.markdown delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/connect.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/helper/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/merge.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/pause.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/pipeline.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/readArray.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/readable.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/replace.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/simple-map.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/spec.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/split.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/stringify.js delete mode 100644 node_modules/gulp-minify-css/node_modules/event-stream/test/writeArray.asynct.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/.travis.yml delete mode 100755 node_modules/gulp-minify-css/node_modules/gulp-util/LICENSE delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/File.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/PluginError.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/beep.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/buffer.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/colors.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/combine.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/date.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/env.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/isBuffer.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/isNull.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/isStream.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/linefeed.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/log.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/noop.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/replaceExtension.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/lib/template.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/index.js delete mode 120000 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md delete mode 100755 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/readme.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/LICENSE delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/Readme.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/basic.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/.travis.yml delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/LICENSE delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/example/parse.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/readme.markdown delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/dash.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/default_bool.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/dotted.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/long.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/parse.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/short.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/whitespace.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/.travis.yml delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/History.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/Makefile delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/Readme.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md delete mode 100755 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/.jshintrc delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/.travis.yml delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/LICENSE delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore delete mode 100755 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/test/basic-test.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/test/bench.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/test/sauce.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/test/test.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/through2.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/.npmignore delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/.travis.yml delete mode 100755 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/LICENSE delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/File.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/isNull.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/isStream.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/package.json delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/File.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/PluginError.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/beep.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/buffer.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/colors.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/combine.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/date.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/env.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/isBuffer.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/isNull.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/isStream.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/linefeed.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/log.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/noop.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/replaceExtension.js delete mode 100644 node_modules/gulp-minify-css/node_modules/gulp-util/test/template.js delete mode 100644 node_modules/gulp-minify-css/package.json delete mode 100644 node_modules/gulp-minify-css/test/fixture/index.css delete mode 100644 node_modules/gulp-minify-css/test/minify.js delete mode 100644 node_modules/gulp-sass/.npmignore delete mode 100644 node_modules/gulp-sass/.travis.yml delete mode 100644 node_modules/gulp-sass/LICENSE delete mode 100644 node_modules/gulp-sass/README.md delete mode 100644 node_modules/gulp-sass/index.js delete mode 120000 node_modules/gulp-sass/node_modules/.bin/node-sass delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/.travis.yml delete mode 100755 node_modules/gulp-sass/node_modules/gulp-util/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/File.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/PluginError.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/beep.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/buffer.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/colors.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/combine.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/date.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/env.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/isBuffer.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/isNull.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/isStream.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/linefeed.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/log.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/noop.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/replaceExtension.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/lib/template.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/index.js delete mode 120000 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md delete mode 100755 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/readme.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/Readme.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/basic.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/example/parse.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/readme.markdown delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/dash.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/default_bool.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/dotted.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/long.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/parse.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/short.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/whitespace.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/History.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/Makefile delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/Readme.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md delete mode 100755 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/.jshintrc delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore delete mode 100755 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/test/basic-test.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/test/bench.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/test/sauce.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/test/test.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/through2.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/.travis.yml delete mode 100755 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/File.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/isNull.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/isStream.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/package.json delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/File.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/PluginError.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/beep.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/buffer.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/colors.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/combine.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/date.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/env.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/isBuffer.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/isNull.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/isStream.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/linefeed.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/log.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/noop.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/replaceExtension.js delete mode 100644 node_modules/gulp-sass/node_modules/gulp-util/test/template.js delete mode 100644 node_modules/gulp-sass/node_modules/map-stream/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/map-stream/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/map-stream/LICENCE delete mode 100644 node_modules/gulp-sass/node_modules/map-stream/examples/pretty.js delete mode 100644 node_modules/gulp-sass/node_modules/map-stream/index.js delete mode 100644 node_modules/gulp-sass/node_modules/map-stream/package.json delete mode 100644 node_modules/gulp-sass/node_modules/map-stream/readme.markdown delete mode 100644 node_modules/gulp-sass/node_modules/map-stream/test/simple-map.asynct.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/.editorconfig delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/.gitmodules delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/.jshintignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/.jshintrc delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/CONTRIBUTING.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/README.md delete mode 100755 node_modules/gulp-sass/node_modules/node-sass/bin/darwin-x64-v8-3.14/binding.node delete mode 100755 node_modules/gulp-sass/node_modules/node-sass/bin/darwin-x64-v8-3.22/binding.node delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/bin/linux-ia32-v8-3.14/binding.node delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/bin/linux-x64-v8-3.14/binding.node delete mode 100755 node_modules/gulp-sass/node_modules/node-sass/bin/node-sass delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/bin/win32-ia32-v8-3.14/binding.node delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/bin/win32-x64-v8-3.14/binding.node delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/binding.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/binding.gyp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Makefile delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/binding.node.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/binding.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/ast.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/base64vlq.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/bind.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/constants.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/context.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/contextualize.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/copy_c_str.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/error_handling.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/eval.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/expand.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/extend.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/file.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/functions.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/inspect.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/output_compressed.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/output_nested.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/parser.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/prelexer.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/sass.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/sass_interface.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/source_map.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/to_c.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/to_string.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/units.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/sass_context_wrapper.o.d delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/linker.lock delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/binding.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/ast.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/base64vlq.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/bind.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/constants.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/context.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/contextualize.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/copy_c_str.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/error_handling.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/eval.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/expand.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/extend.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/file.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/functions.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/inspect.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/output_compressed.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/output_nested.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/parser.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/prelexer.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/sass.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/sass_interface.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/source_map.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/to_c.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/to_string.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/units.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/sass_context_wrapper.o delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/binding.Makefile delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/binding.target.mk delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/build/config.gypi delete mode 100755 node_modules/gulp-sass/node_modules/node-sass/build/gyp-mac-tool delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/examples/middleware.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/examples/public/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/examples/test.scss delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/lib/cli.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/lib/middleware.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/lib/render.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/COPYING delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/INSTALL delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/Makefile delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/Makefile.am delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/Readme.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/ast.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/ast.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/ast_def_macros.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/ast_factory.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/ast_fwd_decl.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/backtrace.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/base64vlq.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/base64vlq.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/bind.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/bind.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/color_names.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/configure.ac delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/constants.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/constants.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/context.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/context.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/contextualize.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/contextualize.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/copy_c_str.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/copy_c_str.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/environment.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/error_handling.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/error_handling.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/eval.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/eval.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/expand.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/expand.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/extconf.rb delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/extend.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/extend.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/file.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/file.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/functions.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/functions.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/inspect.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/inspect.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/kwd_arg_macros.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/m4/.gitkeep delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/mapping.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/memory_manager.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/operation.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/output_compressed.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/output_compressed.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/output_nested.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/output_nested.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/parser.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/parser.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/position.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/prelexer.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/prelexer.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/sass.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/sass.h delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/sass_interface.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/sass_interface.h delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/sassc++.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/source_map.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/source_map.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/support/libsass.pc.in delete mode 100755 node_modules/gulp-sass/node_modules/node-sass/libsass/test-driver delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/to_c.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/to_c.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/to_string.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/to_string.hpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/token.hpp delete mode 100755 node_modules/gulp-sass/node_modules/node-sass/libsass/travis.sh delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/units.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/libsass/units.hpp delete mode 120000 node_modules/gulp-sass/node_modules/node-sass/node_modules/.bin/_mocha delete mode 120000 node_modules/gulp-sass/node_modules/node-sass/node_modules/.bin/mocha delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/chalk.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/ansi-styles/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/has-color/has-color.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/has-color/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/has-color/readme.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/readme.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/examples/pow.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/readme.markdown delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/chmod.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/clobber.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/mkdirp.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/perm.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/perm_sync.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/race.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/rel.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/return.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/return_sync.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/root.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/sync.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/umask.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/umask_sync.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/Readme.md delete mode 100755 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/bin/_mocha delete mode 100755 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/bin/mocha delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/images/error.png delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/images/ok.png delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/debug.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/events.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/fs.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/path.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/progress.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/tty.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/context.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/hook.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/bdd.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/exports.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/qunit.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/tdd.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/mocha.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/ms.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/base.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/doc.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/dot.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/html-cov.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/html.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/json-cov.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/json-stream.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/json.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/landing.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/list.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/markdown.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/min.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/nyan.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/progress.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/spec.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/tap.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/teamcity.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/coverage.jade delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/menu.jade delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/script.html delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/style.html delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/xunit.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/runnable.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/runner.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/suite.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/template.html delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/test.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/utils.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/mocha.css delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/mocha.js delete mode 120000 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/.bin/jade delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/History.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/Makefile delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/Readme.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/lib/commander.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/Readme.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/debug.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/lib/debug.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/diff/README.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/diff/diff.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/diff/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/README.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/examples/g.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/examples/usr-local.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/glob.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/README.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/graceful-fs.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/polyfills.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/test/open.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/README.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits_browser.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/test.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/README.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/minimatch.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/basic.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/brace-expand.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/caching.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/defaults.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/00-setup.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/bash-comparison.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/bash-results.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/cwd-test.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/globstar-match.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/mark.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/nocase-nomagic.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/pause-resume.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/root-nomount.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/root.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/stat.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/zz-cleanup.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/History.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/Readme.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/lib/growl.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/test.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/LICENSE delete mode 100755 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/bin/jade delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/jade.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/jade.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/jade.min.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/compiler.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/doctypes.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/filters.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/inline-tags.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/jade.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/lexer.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/attrs.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/block-comment.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/block.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/case.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/code.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/comment.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/doctype.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/each.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/filter.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/literal.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/mixin.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/node.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/tag.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/text.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/parser.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/runtime.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/self-closing.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/utils.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.orig delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.rej delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/README.markdown delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.orig delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.rej delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/chmod.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/clobber.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/mkdirp.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm_sync.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/race.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/rel.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/sync.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask_sync.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/runtime.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/runtime.min.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/test.jade delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/head.jade delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/index.jade delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/layout.jade delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/user.jade delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/user.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/README.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/build/config.gypi delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/include_dirs.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/nan.h delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/README.md delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/lib/watch.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/bool.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/boolean_double.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/boolean_single.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/default_hash.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/default_singles.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/divide.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/line_count.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/line_count_options.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/line_count_wrap.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/nonopt.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/reflect.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/short.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/string.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/usage-options.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/xup.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/.travis.yml delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/LICENSE delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/example/parse.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/readme.markdown delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/dash.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/default_bool.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/dotted.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/long.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/parse.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/parse_modified.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/short.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/whitespace.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/.npmignore delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/README.markdown delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/example/center.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/example/meat.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/index.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/test/break.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/test/idleness.txt delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/test/wrap.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/readme.markdown delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/_.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/_/argv.js delete mode 100755 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/_/bin.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/dash.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/parse.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/parse_modified.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/short.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/usage.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/whitespace.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/package.json delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/sass.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/sass_context_wrapper.cpp delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/sass_context_wrapper.h delete mode 100755 node_modules/gulp-sass/node_modules/node-sass/scripts/prepublish.sh delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/test/cli.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/test/functions/colorBlue.scss delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/test/include_path.scss delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/test/large_test.scss delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/test/lib/vars.scss delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/test/mem_test_render.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/test/mem_test_renderSync.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/test/sample.scss delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/test/source_comments_spec.js delete mode 100644 node_modules/gulp-sass/node_modules/node-sass/test/test.js delete mode 100644 node_modules/gulp-sass/package.json delete mode 100644 node_modules/gulp-sass/test/ref/inheritance.css delete mode 100644 node_modules/gulp-sass/test/ref/mixins.css delete mode 100644 node_modules/gulp-sass/test/ref/nesting.css delete mode 100644 node_modules/gulp-sass/test/ref/variables.css delete mode 100644 node_modules/gulp-sass/test/scss/includes/_cats.scss delete mode 100644 node_modules/gulp-sass/test/scss/inheritance.scss delete mode 100644 node_modules/gulp-sass/test/scss/mixins.scss delete mode 100644 node_modules/gulp-sass/test/scss/nesting.scss delete mode 100644 node_modules/gulp-sass/test/scss/variables.scss delete mode 100644 node_modules/gulp-sass/test/test.js delete mode 100644 node_modules/gulp-uglify/.jshintrc delete mode 100644 node_modules/gulp-uglify/.npmignore delete mode 100644 node_modules/gulp-uglify/.travis.yml delete mode 100644 node_modules/gulp-uglify/CHANGELOG.md delete mode 100644 node_modules/gulp-uglify/LICENSE.md delete mode 100644 node_modules/gulp-uglify/README.md delete mode 100644 node_modules/gulp-uglify/index.js delete mode 100644 node_modules/gulp-uglify/lib/error.js delete mode 120000 node_modules/gulp-uglify/node_modules/.bin/uglifyjs delete mode 100644 node_modules/gulp-uglify/node_modules/deepmerge/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/deepmerge/README.markdown delete mode 100644 node_modules/gulp-uglify/node_modules/deepmerge/example/merge.js delete mode 100644 node_modules/gulp-uglify/node_modules/deepmerge/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/deepmerge/license.txt delete mode 100644 node_modules/gulp-uglify/node_modules/deepmerge/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/deepmerge/test/merge.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/.travis.yml delete mode 100755 node_modules/gulp-uglify/node_modules/gulp-util/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/File.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/PluginError.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/beep.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/buffer.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/colors.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/combine.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/date.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/env.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/isBuffer.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/isNull.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/isStream.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/linefeed.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/log.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/noop.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/replaceExtension.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/lib/template.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/index.js delete mode 120000 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md delete mode 100755 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/readme.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/dateformat/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/dateformat/Readme.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/dateformat/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/dateformat/test/basic.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/lodash.template/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/.travis.yml delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/example/parse.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/readme.markdown delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/test/dash.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/test/default_bool.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/test/dotted.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/test/long.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/test/parse.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/test/short.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/minimist/test/whitespace.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/.travis.yml delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/History.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/Makefile delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/Readme.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md delete mode 100755 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/File.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/PluginError.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/beep.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/buffer.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/colors.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/combine.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/date.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/env.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/isBuffer.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/isNull.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/isStream.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/linefeed.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/log.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/noop.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/replaceExtension.js delete mode 100644 node_modules/gulp-uglify/node_modules/gulp-util/test/template.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/.jshintrc delete mode 100644 node_modules/gulp-uglify/node_modules/through2/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/through2/.travis.yml delete mode 100644 node_modules/gulp-uglify/node_modules/through2/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/through2/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/readable.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/transform.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/writable.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/LICENCE delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/Makefile delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/has-keys.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/mutable.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/through2/node_modules/xtend/test.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/through2/test/basic-test.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/test/bench.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/test/sauce.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/test/test.js delete mode 100644 node_modules/gulp-uglify/node_modules/through2/through2.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/.travis.yml delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/README.md delete mode 100755 node_modules/gulp-uglify/node_modules/uglify-js/bin/uglifyjs delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/lib/ast.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/lib/compress.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/lib/mozilla-ast.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/lib/output.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/lib/parse.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/lib/scope.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/lib/sourcemap.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/lib/transform.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/lib/utils.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/async/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/async/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/async/component.json delete mode 100755 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/async/lib/async.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/async/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/.travis.yml delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/bool.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/boolean_double.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/boolean_single.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/default_hash.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/default_singles.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/divide.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/line_count.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/line_count_options.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/line_count_wrap.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/nonopt.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/reflect.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/short.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/string.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/usage-options.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/example/xup.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/README.markdown delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/example/center.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/example/meat.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/break.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/idleness.txt delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/wrap.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/readme.markdown delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/test/_.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/test/_/argv.js delete mode 100755 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/test/_/bin.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/test/parse.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/optimist/test/usage.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/.travis.yml delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/Makefile.dryice.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/build/assert-shim.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/build/mini-require.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/build/prefix-source-map.jsm delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/build/prefix-utils.jsm delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/build/suffix-browser.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/build/suffix-source-map.jsm delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/build/suffix-utils.jsm delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/build/test-prefix.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/build/test-suffix.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/array-set.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64-vlq.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/binary-search.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-node.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/util.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/amdefine.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/intercept.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/package.json delete mode 100755 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/test/run-tests.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-api.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-array-set.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64-vlq.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-binary-search.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-dog-fooding.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-consumer.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-generator.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-node.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-util.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/util.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/.travis.yml delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/test/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/arrays.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/blocks.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/concat-strings.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/conditionals.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/dead-code.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/debugger.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/drop-unused.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/issue-105.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/issue-12.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/issue-126.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/issue-143.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/issue-22.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/issue-267.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/issue-269.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/issue-44.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/issue-59.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/labels.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/loops.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/negate-iife.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/properties.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/sequences.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/switch.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/test/compress/typeof.js delete mode 100755 node_modules/gulp-uglify/node_modules/uglify-js/test/run-tests.js delete mode 100644 node_modules/gulp-uglify/node_modules/uglify-js/tools/node.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/.npmignore delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/.travis.yml delete mode 100755 node_modules/gulp-uglify/node_modules/vinyl/LICENSE delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/lib/cloneBuffer.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/lib/inspectStream.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/lib/isBuffer.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/lib/isNull.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/lib/isStream.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/node_modules/clone-stats/LICENSE.md delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/node_modules/clone-stats/README.md delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/node_modules/clone-stats/index.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/node_modules/clone-stats/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/node_modules/clone-stats/test.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/package.json delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/test/File.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/test/cloneBuffer.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/test/inspectStream.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/test/isBuffer.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/test/isNull.js delete mode 100644 node_modules/gulp-uglify/node_modules/vinyl/test/isStream.js delete mode 100644 node_modules/gulp-uglify/package.json delete mode 100644 node_modules/gulp-uglify/test/err.js delete mode 100644 node_modules/gulp-uglify/test/minify.js delete mode 100644 node_modules/gulp-uglify/test/null.js delete mode 100644 node_modules/gulp-uglify/test/streams.js delete mode 100644 node_modules/gulp/.jshintrc delete mode 100644 node_modules/gulp/.npmignore delete mode 100644 node_modules/gulp/.travis.yml delete mode 100644 node_modules/gulp/CHANGELOG.md delete mode 100755 node_modules/gulp/LICENSE delete mode 100644 node_modules/gulp/README.md delete mode 100755 node_modules/gulp/bin/gulp.js delete mode 100644 node_modules/gulp/completion/README.md delete mode 100644 node_modules/gulp/completion/bash delete mode 100644 node_modules/gulp/completion/zsh delete mode 100644 node_modules/gulp/docs/API.md delete mode 100644 node_modules/gulp/docs/CLI.md delete mode 100644 node_modules/gulp/docs/FAQ.md delete mode 100644 node_modules/gulp/docs/README.md delete mode 100644 node_modules/gulp/docs/getting-started.md delete mode 100644 node_modules/gulp/docs/recipes/combining-streams-to-handle-errors.md delete mode 100644 node_modules/gulp/docs/recipes/mocha-test-runner-with-gulp.md delete mode 100644 node_modules/gulp/docs/recipes/only-pass-through-changed-files.md delete mode 100644 node_modules/gulp/docs/recipes/pass-params-from-cli.md delete mode 100644 node_modules/gulp/docs/recipes/rebuild-only-files-that-change.md delete mode 100644 node_modules/gulp/docs/recipes/running-tasks-in-series.md delete mode 100644 node_modules/gulp/docs/recipes/specifying-a-cwd.md delete mode 100644 node_modules/gulp/docs/recipes/using-coffee-script-for-gulpfile.md delete mode 100644 node_modules/gulp/docs/recipes/using-external-config-file.md delete mode 100644 node_modules/gulp/docs/recipes/using-multiple-sources-in-one-task.md delete mode 100644 node_modules/gulp/docs/writing-a-plugin/README.md delete mode 100644 node_modules/gulp/docs/writing-a-plugin/dealing-with-streams.md delete mode 100644 node_modules/gulp/docs/writing-a-plugin/guidelines.md delete mode 100644 node_modules/gulp/docs/writing-a-plugin/readme-conventions.md delete mode 100644 node_modules/gulp/docs/writing-a-plugin/testing.md delete mode 100644 node_modules/gulp/docs/writing-a-plugin/using-buffers.md delete mode 100644 node_modules/gulp/gulpfile.js delete mode 100644 node_modules/gulp/index.js delete mode 100644 node_modules/gulp/lib/completion.js delete mode 100644 node_modules/gulp/lib/taskTree.js delete mode 120000 node_modules/gulp/node_modules/.bin/semver delete mode 100644 node_modules/gulp/node_modules/archy/.travis.yml delete mode 100644 node_modules/gulp/node_modules/archy/README.markdown delete mode 100644 node_modules/gulp/node_modules/archy/examples/beep.js delete mode 100644 node_modules/gulp/node_modules/archy/examples/multi_line.js delete mode 100644 node_modules/gulp/node_modules/archy/index.js delete mode 100644 node_modules/gulp/node_modules/archy/package.json delete mode 100644 node_modules/gulp/node_modules/archy/test/beep.js delete mode 100644 node_modules/gulp/node_modules/archy/test/multi_line.js delete mode 100644 node_modules/gulp/node_modules/archy/test/non_unicode.js delete mode 100644 node_modules/gulp/node_modules/deprecated/.npmignore delete mode 100644 node_modules/gulp/node_modules/deprecated/.travis.yml delete mode 100755 node_modules/gulp/node_modules/deprecated/LICENSE delete mode 100644 node_modules/gulp/node_modules/deprecated/README.md delete mode 100644 node_modules/gulp/node_modules/deprecated/index.js delete mode 100644 node_modules/gulp/node_modules/deprecated/package.json delete mode 100644 node_modules/gulp/node_modules/deprecated/test/field.js delete mode 100644 node_modules/gulp/node_modules/deprecated/test/method.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/.jshintrc delete mode 100644 node_modules/gulp/node_modules/findup-sync/.npmignore delete mode 100644 node_modules/gulp/node_modules/findup-sync/Gruntfile.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/LICENSE-MIT delete mode 100644 node_modules/gulp/node_modules/findup-sync/README.md delete mode 100644 node_modules/gulp/node_modules/findup-sync/lib/findup-sync.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/.npmignore delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/.travis.yml delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/LICENSE delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/README.md delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/examples/g.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/examples/usr-local.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/glob.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/graceful-fs/.npmignore delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/graceful-fs/LICENSE delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/graceful-fs/README.md delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/graceful-fs/graceful-fs.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/graceful-fs/package.json delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/graceful-fs/test/open.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/graceful-fs/test/ulimit.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/inherits/README.md delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/inherits/inherits.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/inherits/package.json delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/.npmignore delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/LICENSE delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/README.md delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/minimatch.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/package.json delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/basic.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/brace-expand.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/caching.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/defaults.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/package.json delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/test/00-setup.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/test/bash-comparison.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/test/bash-results.json delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/test/cwd-test.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/test/mark.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/test/nocase-nomagic.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/test/pause-resume.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/test/root-nomount.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/test/root.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/glob/test/zz-cleanup.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/lodash/README.md delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.min.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/lodash/dist/lodash.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/lodash/dist/lodash.min.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/lodash/dist/lodash.underscore.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/lodash/dist/lodash.underscore.min.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/node_modules/lodash/package.json delete mode 100644 node_modules/gulp/node_modules/findup-sync/package.json delete mode 100644 node_modules/gulp/node_modules/findup-sync/test/findup-sync_test.js delete mode 100644 node_modules/gulp/node_modules/findup-sync/test/fixtures/a.txt delete mode 100644 node_modules/gulp/node_modules/findup-sync/test/fixtures/a/b/bar.txt delete mode 100644 node_modules/gulp/node_modules/findup-sync/test/fixtures/a/foo.txt delete mode 100644 node_modules/gulp/node_modules/findup-sync/test/fixtures/aaa.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/.npmignore delete mode 100644 node_modules/gulp/node_modules/gulp-util/.travis.yml delete mode 100755 node_modules/gulp/node_modules/gulp-util/LICENSE delete mode 100644 node_modules/gulp/node_modules/gulp-util/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/File.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/PluginError.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/beep.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/buffer.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/colors.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/combine.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/date.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/env.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/isBuffer.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/isNull.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/isStream.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/linefeed.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/log.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/noop.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/replaceExtension.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/lib/template.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/index.js delete mode 120000 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md delete mode 100755 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/chalk/readme.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/dateformat/LICENSE delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/dateformat/Readme.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/dateformat/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/dateformat/test/basic.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/lodash.template/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/.npmignore delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/.travis.yml delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/History.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/Makefile delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/Readme.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md delete mode 100755 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/.jshintrc delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/.npmignore delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/.travis.yml delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/LICENSE delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore delete mode 100755 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/test/basic-test.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/test/bench.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/test/sauce.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/test/test.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/through2.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/.npmignore delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/.travis.yml delete mode 100755 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/LICENSE delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/test/File.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/test/isNull.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/test/isStream.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/package.json delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/File.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/PluginError.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/beep.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/buffer.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/colors.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/combine.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/date.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/env.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/isBuffer.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/isNull.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/isStream.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/linefeed.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/log.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/noop.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/replaceExtension.js delete mode 100644 node_modules/gulp/node_modules/gulp-util/test/template.js delete mode 100644 node_modules/gulp/node_modules/minimist/.travis.yml delete mode 100644 node_modules/gulp/node_modules/minimist/LICENSE delete mode 100644 node_modules/gulp/node_modules/minimist/example/parse.js delete mode 100644 node_modules/gulp/node_modules/minimist/index.js delete mode 100644 node_modules/gulp/node_modules/minimist/package.json delete mode 100644 node_modules/gulp/node_modules/minimist/readme.markdown delete mode 100644 node_modules/gulp/node_modules/minimist/test/dash.js delete mode 100644 node_modules/gulp/node_modules/minimist/test/default_bool.js delete mode 100644 node_modules/gulp/node_modules/minimist/test/dotted.js delete mode 100644 node_modules/gulp/node_modules/minimist/test/long.js delete mode 100644 node_modules/gulp/node_modules/minimist/test/parse.js delete mode 100644 node_modules/gulp/node_modules/minimist/test/parse_modified.js delete mode 100644 node_modules/gulp/node_modules/minimist/test/short.js delete mode 100644 node_modules/gulp/node_modules/minimist/test/whitespace.js delete mode 100644 node_modules/gulp/node_modules/orchestrator/.npmignore delete mode 100644 node_modules/gulp/node_modules/orchestrator/LICENSE delete mode 100644 node_modules/gulp/node_modules/orchestrator/README.md delete mode 100644 node_modules/gulp/node_modules/orchestrator/index.js delete mode 100644 node_modules/gulp/node_modules/orchestrator/lib/runTask.js delete mode 100644 node_modules/gulp/node_modules/orchestrator/node_modules/sequencify/.npmignore delete mode 100644 node_modules/gulp/node_modules/orchestrator/node_modules/sequencify/.travis.yml delete mode 100644 node_modules/gulp/node_modules/orchestrator/node_modules/sequencify/LICENSE delete mode 100644 node_modules/gulp/node_modules/orchestrator/node_modules/sequencify/README.md delete mode 100644 node_modules/gulp/node_modules/orchestrator/node_modules/sequencify/index.js delete mode 100644 node_modules/gulp/node_modules/orchestrator/node_modules/sequencify/package.json delete mode 100644 node_modules/gulp/node_modules/orchestrator/package.json delete mode 100644 node_modules/gulp/node_modules/pretty-hrtime/.npmignore delete mode 100644 node_modules/gulp/node_modules/pretty-hrtime/LICENSE delete mode 100644 node_modules/gulp/node_modules/pretty-hrtime/README.md delete mode 100644 node_modules/gulp/node_modules/pretty-hrtime/index.js delete mode 100644 node_modules/gulp/node_modules/pretty-hrtime/package.json delete mode 100644 node_modules/gulp/node_modules/resolve/.travis.yml delete mode 100644 node_modules/gulp/node_modules/resolve/LICENSE delete mode 100644 node_modules/gulp/node_modules/resolve/example/async.js delete mode 100644 node_modules/gulp/node_modules/resolve/example/sync.js delete mode 100644 node_modules/gulp/node_modules/resolve/index.js delete mode 100644 node_modules/gulp/node_modules/resolve/lib/async.js delete mode 100644 node_modules/gulp/node_modules/resolve/lib/caller.js delete mode 100644 node_modules/gulp/node_modules/resolve/lib/core.js delete mode 100644 node_modules/gulp/node_modules/resolve/lib/core.json delete mode 100644 node_modules/gulp/node_modules/resolve/lib/node-modules-paths.js delete mode 100644 node_modules/gulp/node_modules/resolve/lib/sync.js delete mode 100644 node_modules/gulp/node_modules/resolve/package.json delete mode 100644 node_modules/gulp/node_modules/resolve/readme.markdown delete mode 100644 node_modules/gulp/node_modules/resolve/test/core.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/filter.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/filter_sync.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/mock.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/mock_sync.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/baz/doom.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/baz/package.json delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/baz/quux.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/biz/node_modules/garply/lib/index.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/biz/node_modules/garply/package.json delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/cup.coffee delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/foo.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/incorrect_main/index.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/incorrect_main/package.json delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/mug.coffee delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/mug.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/other_path/lib/other-lib.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/other_path/root.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/punycode/node_modules/punycode/index.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/quux/foo/index.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/without_basedir/main.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver/without_basedir/node_modules/mymodule.js delete mode 100644 node_modules/gulp/node_modules/resolve/test/resolver_sync.js delete mode 100644 node_modules/gulp/node_modules/semver/.npmignore delete mode 100644 node_modules/gulp/node_modules/semver/LICENSE delete mode 100644 node_modules/gulp/node_modules/semver/Makefile delete mode 100644 node_modules/gulp/node_modules/semver/README.md delete mode 100755 node_modules/gulp/node_modules/semver/bin/semver delete mode 100644 node_modules/gulp/node_modules/semver/foot.js delete mode 100644 node_modules/gulp/node_modules/semver/head.js delete mode 100644 node_modules/gulp/node_modules/semver/package.json delete mode 100644 node_modules/gulp/node_modules/semver/semver.browser.js delete mode 100644 node_modules/gulp/node_modules/semver/semver.browser.js.gz delete mode 100644 node_modules/gulp/node_modules/semver/semver.js delete mode 100644 node_modules/gulp/node_modules/semver/semver.min.js delete mode 100644 node_modules/gulp/node_modules/semver/semver.min.js.gz delete mode 100644 node_modules/gulp/node_modules/semver/test/amd.js delete mode 100644 node_modules/gulp/node_modules/semver/test/gtr.js delete mode 100644 node_modules/gulp/node_modules/semver/test/index.js delete mode 100644 node_modules/gulp/node_modules/semver/test/ltr.js delete mode 100644 node_modules/gulp/node_modules/semver/test/no-module.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/.travis.yml delete mode 100755 node_modules/gulp/node_modules/vinyl-fs/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/lib/dest/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/lib/dest/writeBuffer.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/lib/dest/writeContents.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/lib/dest/writeDir.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/lib/dest/writeStream.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/lib/src/bufferFile.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/lib/src/getContents.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/lib/src/getStats.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/lib/src/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/lib/src/readDir.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/lib/src/streamFile.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/.travis.yml delete mode 100755 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/.travis.yml delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/examples/g.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/examples/usr-local.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/glob.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/node_modules/inherits/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/node_modules/inherits/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/node_modules/inherits/inherits.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/node_modules/inherits/inherits_browser.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/node_modules/inherits/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/node_modules/inherits/test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/00-setup.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/bash-comparison.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/bash-results.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/cwd-test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/globstar-match.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/mark.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/new-glob-optional-options.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/nocase-nomagic.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/pause-resume.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/root-nomount.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/root.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/stat.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/test/zz-cleanup.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob2base/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob2base/.travis.yml delete mode 100755 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob2base/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob2base/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob2base/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob2base/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob2base/test/main.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/minimatch.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/lru-cache/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/lru-cache/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/lru-cache/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/lru-cache/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/lru-cache/test/basic.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/lru-cache/test/foreach.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/sigmund/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/sigmund/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/sigmund/bench.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/sigmund/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/sigmund/sigmund.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/node_modules/sigmund/test/basic.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/test/basic.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/test/brace-expand.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/test/caching.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/test/defaults.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/minimatch/test/extglob-ending-with-state-char.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/ordered-read-streams/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/ordered-read-streams/.travis.yml delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/ordered-read-streams/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/ordered-read-streams/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/ordered-read-streams/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/ordered-read-streams/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/ordered-read-streams/test/main.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through/.travis.yml delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through/LICENSE.APACHE2 delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through/LICENSE.MIT delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through/readme.markdown delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through/test/auto-destroy.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through/test/buffering.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through/test/end.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through/test/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/unique-stream/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/unique-stream/.travis.yml delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/unique-stream/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/unique-stream/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/unique-stream/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/unique-stream/test/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/test/fixtures/stuff/run.dmc delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/test/fixtures/stuff/test.dmc delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/test/fixtures/test.coffee delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/test/fixtures/whatsgoingon/hey/isaidhey/whatsgoingon/test.txt delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/test/fixtures/whatsgoingon/test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/test/main.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/.travis.yml delete mode 100755 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/.editorconfig delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/.jshintrc delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/.travis.yml delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/AUTHORS delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/Gruntfile.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/LICENSE-MIT delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/benchmarks/gaze100s.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/helper.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/.jshintrc delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/.travis.yml delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/Gruntfile.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/LICENSE-MIT delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/lib/globule.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/.travis.yml delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/examples/g.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/examples/usr-local.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/glob.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/graceful-fs.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/test/open.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/test/ulimit.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/inherits/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/inherits/inherits.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/inherits/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/test/00-setup.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/test/bash-comparison.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/test/bash-results.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/test/cwd-test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/test/mark.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/test/nocase-nomagic.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/test/pause-resume.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/test/root-nomount.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/test/root.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/glob/test/zz-cleanup.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/lodash/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.compat.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.compat.min.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.min.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.underscore.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.underscore.min.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/lodash/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/minimatch.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/test/basic.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/test/foreach.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/sigmund/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/sigmund/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/sigmund/bench.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/sigmund/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/sigmund/sigmund.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/sigmund/test/basic.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/test/basic.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/test/brace-expand.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/test/caching.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/test/defaults.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/node_modules/minimatch/test/extglob-ending-with-state-char.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/test/fixtures/expand/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/test/fixtures/expand/css/baz.css delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/test/fixtures/expand/css/qux.css delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/test/fixtures/expand/deep/deep.txt delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/test/fixtures/expand/deep/deeper/deeper.txt delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/test/fixtures/expand/deep/deeper/deepest/deepest.txt delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/test/fixtures/expand/js/bar.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/test/fixtures/expand/js/foo.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/node_modules/globule/test/globule_test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/add_test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/api_test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/file_poller.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/fixtures/Project (LO)/one.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/fixtures/nested/one.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/fixtures/nested/sub/two.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/fixtures/nested/sub2/two.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/fixtures/nested/three.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/fixtures/one.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/fixtures/sub/one.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/fixtures/sub/two.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/helper.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/matching_test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/patterns_test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/relative_test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/rename_test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/safewrite_test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/watch_race_test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/test/watch_test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/test/fixtures/test.coffee delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/test/main.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/graceful-fs/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/graceful-fs/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/graceful-fs/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/graceful-fs/graceful-fs.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/graceful-fs/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/graceful-fs/polyfills.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/graceful-fs/test/open.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/.travis.yml delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/LICENCE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/examples/pretty.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/readme.markdown delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/test/simple-map.asynct.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/.travis.yml delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/examples/pow.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/readme.markdown delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/chmod.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/clobber.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/mkdirp.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/perm.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/perm_sync.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/race.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/rel.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/return.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/return_sync.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/root.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/sync.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/umask.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/mkdirp/test/umask_sync.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/.npmignore delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/.travis.yml delete mode 100755 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/LICENSE delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/lib/cloneBuffer.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/lib/inspectStream.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/lib/isBuffer.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/lib/isNull.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/lib/isStream.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/node_modules/clone-stats/LICENSE.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/node_modules/clone-stats/README.md delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/node_modules/clone-stats/index.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/node_modules/clone-stats/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/node_modules/clone-stats/test.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/test/File.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/test/cloneBuffer.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/test/inspectStream.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/test/isBuffer.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/test/isNull.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/node_modules/vinyl/test/isStream.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/package.json delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/test/dest.js delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/test/fixtures/test.coffee delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/test/fixtures/wow/suchempty delete mode 100644 node_modules/gulp/node_modules/vinyl-fs/test/src.js delete mode 100644 node_modules/gulp/package.json delete mode 100644 node_modules/gulp/test/dest.js delete mode 100644 node_modules/gulp/test/fixtures/copy/example.txt delete mode 100644 node_modules/gulp/test/fixtures/stuff/run.dmc delete mode 100644 node_modules/gulp/test/fixtures/stuff/test.dmc delete mode 100644 node_modules/gulp/test/fixtures/test.coffee delete mode 100644 node_modules/gulp/test/fixtures/test/run.jade delete mode 100644 node_modules/gulp/test/src.js delete mode 100644 node_modules/gulp/test/taskTree.js delete mode 100644 node_modules/gulp/test/tasks.js delete mode 100644 node_modules/gulp/test/watch.js delete mode 100644 node_modules/jade/.npmignore delete mode 100644 node_modules/jade/LICENSE delete mode 100644 node_modules/jade/README.md delete mode 100644 node_modules/jade/Readme_zh-cn.md delete mode 100755 node_modules/jade/bin/jade.js delete mode 100644 node_modules/jade/component.json delete mode 100644 node_modules/jade/index.js delete mode 100644 node_modules/jade/jade-language.md delete mode 100644 node_modules/jade/jade.js delete mode 100644 node_modules/jade/jade.md delete mode 100644 node_modules/jade/lib/compiler.js delete mode 100644 node_modules/jade/lib/doctypes.js delete mode 100644 node_modules/jade/lib/filters-client.js delete mode 100644 node_modules/jade/lib/filters.js delete mode 100644 node_modules/jade/lib/inline-tags.js delete mode 100644 node_modules/jade/lib/jade.js delete mode 100644 node_modules/jade/lib/lexer.js delete mode 100644 node_modules/jade/lib/nodes/attrs.js delete mode 100644 node_modules/jade/lib/nodes/block-comment.js delete mode 100644 node_modules/jade/lib/nodes/block.js delete mode 100644 node_modules/jade/lib/nodes/case.js delete mode 100644 node_modules/jade/lib/nodes/code.js delete mode 100644 node_modules/jade/lib/nodes/comment.js delete mode 100644 node_modules/jade/lib/nodes/doctype.js delete mode 100644 node_modules/jade/lib/nodes/each.js delete mode 100644 node_modules/jade/lib/nodes/filter.js delete mode 100644 node_modules/jade/lib/nodes/index.js delete mode 100644 node_modules/jade/lib/nodes/literal.js delete mode 100644 node_modules/jade/lib/nodes/mixin-block.js delete mode 100644 node_modules/jade/lib/nodes/mixin.js delete mode 100644 node_modules/jade/lib/nodes/node.js delete mode 100644 node_modules/jade/lib/nodes/tag.js delete mode 100644 node_modules/jade/lib/nodes/text.js delete mode 100644 node_modules/jade/lib/parser.js delete mode 100644 node_modules/jade/lib/runtime.js delete mode 100644 node_modules/jade/lib/self-closing.js delete mode 100644 node_modules/jade/lib/utils.js delete mode 100644 node_modules/jade/node_modules/character-parser/.npmignore delete mode 100644 node_modules/jade/node_modules/character-parser/LICENSE delete mode 100644 node_modules/jade/node_modules/character-parser/README.md delete mode 100644 node_modules/jade/node_modules/character-parser/index.js delete mode 100644 node_modules/jade/node_modules/character-parser/package.json delete mode 100644 node_modules/jade/node_modules/commander/Readme.md delete mode 100644 node_modules/jade/node_modules/commander/index.js delete mode 100644 node_modules/jade/node_modules/commander/package.json delete mode 100644 node_modules/jade/node_modules/constantinople/.gitattributes delete mode 100644 node_modules/jade/node_modules/constantinople/.npmignore delete mode 100644 node_modules/jade/node_modules/constantinople/.travis.yml delete mode 100644 node_modules/jade/node_modules/constantinople/LICENSE delete mode 100644 node_modules/jade/node_modules/constantinople/README.md delete mode 100644 node_modules/jade/node_modules/constantinople/index.js delete mode 120000 node_modules/jade/node_modules/constantinople/node_modules/.bin/uglifyjs delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/.npmignore delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/.travis.yml delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/LICENSE delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/README.md delete mode 100755 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/bin/uglifyjs delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/lib/ast.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/lib/compress.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/lib/mozilla-ast.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/lib/output.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/lib/parse.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/lib/scope.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/lib/sourcemap.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/lib/transform.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/lib/utils.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/async/LICENSE delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/async/README.md delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/async/component.json delete mode 100755 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/async/lib/async.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/async/package.json delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/.travis.yml delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/LICENSE delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/bool.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/boolean_double.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/boolean_single.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/default_hash.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/default_singles.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/divide.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/line_count.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/line_count_options.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/line_count_wrap.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/nonopt.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/reflect.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/short.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/string.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/usage-options.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/example/xup.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/index.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/.npmignore delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/README.markdown delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/example/center.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/example/meat.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/index.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/package.json delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/break.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/idleness.txt delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/wrap.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/package.json delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/readme.markdown delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/test/_.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/test/_/argv.js delete mode 100755 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/test/_/bin.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/test/parse.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/test/usage.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/.npmignore delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/.travis.yml delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/LICENSE delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/Makefile.dryice.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/README.md delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/build/assert-shim.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/build/mini-require.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/build/prefix-source-map.jsm delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/build/prefix-utils.jsm delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/build/suffix-browser.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/build/suffix-source-map.jsm delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/build/suffix-utils.jsm delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/build/test-prefix.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/build/test-suffix.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/array-set.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64-vlq.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/binary-search.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-node.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/util.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/LICENSE delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/README.md delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/amdefine.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/intercept.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/package.json delete mode 100755 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/run-tests.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/source-map/test-api.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/source-map/test-array-set.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64-vlq.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/source-map/test-binary-search.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/source-map/test-dog-fooding.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-consumer.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-generator.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-node.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/source-map/util.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/.npmignore delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/.travis.yml delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/LICENSE delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/README.md delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/index.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/package.json delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/test/index.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/package.json delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/arrays.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/blocks.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/concat-strings.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/conditionals.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/dead-code.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/debugger.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/drop-unused.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/issue-105.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/issue-12.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/issue-126.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/issue-143.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/issue-22.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/issue-267.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/issue-269.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/issue-44.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/issue-59.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/labels.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/loops.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/negate-iife.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/properties.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/sequences.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/switch.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/compress/typeof.js delete mode 100755 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/test/run-tests.js delete mode 100644 node_modules/jade/node_modules/constantinople/node_modules/uglify-js/tools/node.js delete mode 100644 node_modules/jade/node_modules/constantinople/package.json delete mode 100644 node_modules/jade/node_modules/constantinople/test/index.js delete mode 100644 node_modules/jade/node_modules/mkdirp/.npmignore delete mode 100644 node_modules/jade/node_modules/mkdirp/.travis.yml delete mode 100644 node_modules/jade/node_modules/mkdirp/LICENSE delete mode 100644 node_modules/jade/node_modules/mkdirp/examples/pow.js delete mode 100644 node_modules/jade/node_modules/mkdirp/index.js delete mode 100644 node_modules/jade/node_modules/mkdirp/package.json delete mode 100644 node_modules/jade/node_modules/mkdirp/readme.markdown delete mode 100644 node_modules/jade/node_modules/mkdirp/test/chmod.js delete mode 100644 node_modules/jade/node_modules/mkdirp/test/clobber.js delete mode 100644 node_modules/jade/node_modules/mkdirp/test/mkdirp.js delete mode 100644 node_modules/jade/node_modules/mkdirp/test/perm.js delete mode 100644 node_modules/jade/node_modules/mkdirp/test/perm_sync.js delete mode 100644 node_modules/jade/node_modules/mkdirp/test/race.js delete mode 100644 node_modules/jade/node_modules/mkdirp/test/rel.js delete mode 100644 node_modules/jade/node_modules/mkdirp/test/return.js delete mode 100644 node_modules/jade/node_modules/mkdirp/test/return_sync.js delete mode 100644 node_modules/jade/node_modules/mkdirp/test/root.js delete mode 100644 node_modules/jade/node_modules/mkdirp/test/sync.js delete mode 100644 node_modules/jade/node_modules/mkdirp/test/umask.js delete mode 100644 node_modules/jade/node_modules/mkdirp/test/umask_sync.js delete mode 100644 node_modules/jade/node_modules/monocle/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/LICENSE delete mode 100644 node_modules/jade/node_modules/monocle/README.md delete mode 100644 node_modules/jade/node_modules/monocle/monocle.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/LICENSE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/README.md delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/Readme.md delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/callback-api.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/grep.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/LICENCE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/examples/pretty.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/LICENCE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/Makefile delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/README.md delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/test.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/LICENSE.APACHE2 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/LICENSE.MIT delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/test/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/LICENCE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/examples/pretty.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/test/simple-map.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/LICENSE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/README.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/bool.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/boolean_double.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/boolean_single.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/default_hash.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/default_singles.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/divide.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count_options.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count_wrap.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/nonopt.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/reflect.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/short.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/string.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/usage-options.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/xup.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/README.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/example/center.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/example/meat.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/break.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/idleness.txt delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/wrap.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_/argv.js delete mode 100755 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_/bin.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/parse.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/usage.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/test/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/test/pause-end.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/LICENCE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/examples/pretty.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/LICENSE.APACHE2 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/LICENSE.MIT delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/test/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/test/split.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/LICENSE.APACHE2 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/LICENSE.MIT delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/buffering.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/end.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/connect.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/merge.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/pause.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/pipeline.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/readArray.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/readable.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/replace.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/simple-map.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/spec.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/split.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/stringify.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/writeArray.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/README.md delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/examples/tap-nested-objects.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/LICENSE.APACHE2 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/LICENSE.MIT delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/buffering.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/end.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/test/tap-stream.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/stream-api-pipe.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/stream-api.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/LICENSE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/README.md delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/minimatch.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/lru-cache/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/lru-cache/LICENSE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/lru-cache/README.md delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/lru-cache/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/lru-cache/test/basic.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/lru-cache/test/foreach.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/sigmund/LICENSE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/sigmund/README.md delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/sigmund/bench.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/sigmund/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/sigmund/sigmund.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/node_modules/sigmund/test/basic.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/test/basic.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/test/brace-expand.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/test/caching.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/test/defaults.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/node_modules/minimatch/test/extglob-ending-with-state-char.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/readdirp.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/stream-api.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/test/bed/root_dir1/root_dir1_file1.ext1 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/test/bed/root_dir1/root_dir1_file2.ext2 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/test/bed/root_dir1/root_dir1_file3.ext3 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/test/bed/root_dir1/root_dir1_subdir1/root1_dir1_subdir1_file1.ext1 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/test/bed/root_dir2/root_dir2_file1.ext1 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/test/bed/root_dir2/root_dir2_file2.ext2 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/test/bed/root_file1.ext1 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/test/bed/root_file2.ext2 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/test/bed/root_file3.ext3 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/test/readdirp-stream.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/test/readdirp.js delete mode 100644 node_modules/jade/node_modules/monocle/package.json delete mode 100644 node_modules/jade/node_modules/transformers/.npmignore delete mode 100644 node_modules/jade/node_modules/transformers/README.md delete mode 100644 node_modules/jade/node_modules/transformers/history.md delete mode 100644 node_modules/jade/node_modules/transformers/lib/shared.js delete mode 100644 node_modules/jade/node_modules/transformers/lib/transformers.js delete mode 120000 node_modules/jade/node_modules/transformers/node_modules/.bin/uglifyjs delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/.npmignore delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/History.md delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/Makefile delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/Readme.md delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/benchmark.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/component.json delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/index.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-parse/.npmignore delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-parse/History.md delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-parse/Makefile delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-parse/Readme.md delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-parse/component.json delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-parse/index.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-parse/package.json delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-stringify/.npmignore delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-stringify/History.md delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-stringify/Makefile delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-stringify/Readme.md delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-stringify/component.json delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-stringify/index.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-stringify/package.json delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/package.json delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/css/test.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/promise/.npmignore delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/promise/Readme.md delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/promise/index.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/promise/node_modules/is-promise/.npmignore delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/promise/node_modules/is-promise/index.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/promise/node_modules/is-promise/package.json delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/promise/node_modules/is-promise/readme.md delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/promise/package.json delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/.npmignore delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/README.md delete mode 100755 node_modules/jade/node_modules/transformers/node_modules/uglify-js/bin/uglifyjs delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/lib/ast.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/lib/compress.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/lib/mozilla-ast.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/lib/output.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/lib/parse.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/lib/scope.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/lib/sourcemap.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/lib/transform.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/lib/utils.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/.travis.yml delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/LICENSE delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/bool.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/boolean_double.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/boolean_single.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/default_hash.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/default_singles.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/divide.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/line_count.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/line_count_options.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/line_count_wrap.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/nonopt.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/reflect.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/short.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/string.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/usage-options.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/example/xup.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/index.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/.npmignore delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/README.markdown delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/example/center.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/example/meat.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/index.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/package.json delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/break.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/idleness.txt delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/wrap.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/package.json delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/readme.markdown delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/test/_.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/test/_/argv.js delete mode 100755 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/test/_/bin.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/test/parse.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/optimist/test/usage.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/.npmignore delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/.travis.yml delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/LICENSE delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/Makefile.dryice.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/README.md delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/build/assert-shim.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/build/mini-require.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/build/prefix-source-map.jsm delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/build/prefix-utils.jsm delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/build/suffix-browser.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/build/suffix-source-map.jsm delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/build/suffix-utils.jsm delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/build/test-prefix.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/build/test-suffix.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/array-set.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64-vlq.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/binary-search.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-node.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/util.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/LICENSE delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/README.md delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/amdefine.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/intercept.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/package.json delete mode 100755 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/run-tests.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/source-map/test-api.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/source-map/test-array-set.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64-vlq.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/source-map/test-binary-search.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/source-map/test-dog-fooding.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-consumer.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-generator.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-node.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/source-map/util.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/package.json delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/arrays.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/blocks.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/conditionals.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/dead-code.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/debugger.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/drop-unused.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/issue-105.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/issue-12.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/issue-22.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/issue-44.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/issue-59.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/labels.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/loops.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/properties.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/sequences.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/compress/switch.js delete mode 100755 node_modules/jade/node_modules/transformers/node_modules/uglify-js/test/run-tests.js delete mode 100644 node_modules/jade/node_modules/transformers/node_modules/uglify-js/tools/node.js delete mode 100644 node_modules/jade/node_modules/transformers/package.json delete mode 100644 node_modules/jade/node_modules/with/.npmignore delete mode 100644 node_modules/jade/node_modules/with/LICENSE delete mode 100644 node_modules/jade/node_modules/with/README.md delete mode 100644 node_modules/jade/node_modules/with/index.js delete mode 120000 node_modules/jade/node_modules/with/node_modules/.bin/uglifyjs delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/.npmignore delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/.travis.yml delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/LICENSE delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/README.md delete mode 100755 node_modules/jade/node_modules/with/node_modules/uglify-js/bin/uglifyjs delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/lib/ast.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/lib/compress.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/lib/mozilla-ast.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/lib/output.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/lib/parse.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/lib/scope.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/lib/sourcemap.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/lib/transform.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/lib/utils.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/async/LICENSE delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/async/README.md delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/async/component.json delete mode 100755 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/async/lib/async.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/async/package.json delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/.travis.yml delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/LICENSE delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/bool.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/boolean_double.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/boolean_single.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/default_hash.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/default_singles.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/divide.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/line_count.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/line_count_options.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/line_count_wrap.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/nonopt.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/reflect.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/short.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/string.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/usage-options.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/example/xup.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/index.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/.npmignore delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/README.markdown delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/example/center.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/example/meat.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/index.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/package.json delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/break.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/idleness.txt delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/wrap.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/package.json delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/readme.markdown delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/test/_.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/test/_/argv.js delete mode 100755 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/test/_/bin.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/test/parse.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/optimist/test/usage.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/.npmignore delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/.travis.yml delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/LICENSE delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/Makefile.dryice.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/README.md delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/build/assert-shim.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/build/mini-require.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/build/prefix-source-map.jsm delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/build/prefix-utils.jsm delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/build/suffix-browser.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/build/suffix-source-map.jsm delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/build/suffix-utils.jsm delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/build/test-prefix.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/build/test-suffix.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/array-set.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64-vlq.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/binary-search.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-node.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/util.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/LICENSE delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/README.md delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/amdefine.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/intercept.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/package.json delete mode 100755 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/run-tests.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/source-map/test-api.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/source-map/test-array-set.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64-vlq.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/source-map/test-binary-search.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/source-map/test-dog-fooding.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-consumer.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-generator.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-node.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/source-map/util.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/.npmignore delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/.travis.yml delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/LICENSE delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/README.md delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/index.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/package.json delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/test/index.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/package.json delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/arrays.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/blocks.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/conditionals.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/dead-code.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/debugger.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/drop-unused.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/issue-105.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/issue-12.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/issue-143.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/issue-22.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/issue-44.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/issue-59.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/labels.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/loops.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/negate-iife.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/properties.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/sequences.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/switch.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/test/compress/typeof.js delete mode 100755 node_modules/jade/node_modules/with/node_modules/uglify-js/test/run-tests.js delete mode 100644 node_modules/jade/node_modules/with/node_modules/uglify-js/tools/node.js delete mode 100644 node_modules/jade/node_modules/with/package.json delete mode 100644 node_modules/jade/node_modules/with/vars.js delete mode 100644 node_modules/jade/package.json delete mode 100644 node_modules/jade/runtime.js delete mode 100644 node_modules/mocha/Readme.md delete mode 100755 node_modules/mocha/bin/_mocha delete mode 100755 node_modules/mocha/bin/mocha delete mode 100644 node_modules/mocha/images/error.png delete mode 100644 node_modules/mocha/images/ok.png delete mode 100644 node_modules/mocha/index.js delete mode 100644 node_modules/mocha/lib/browser/debug.js delete mode 100644 node_modules/mocha/lib/browser/diff.js delete mode 100644 node_modules/mocha/lib/browser/events.js delete mode 100644 node_modules/mocha/lib/browser/fs.js delete mode 100644 node_modules/mocha/lib/browser/path.js delete mode 100644 node_modules/mocha/lib/browser/progress.js delete mode 100644 node_modules/mocha/lib/browser/tty.js delete mode 100644 node_modules/mocha/lib/context.js delete mode 100644 node_modules/mocha/lib/hook.js delete mode 100644 node_modules/mocha/lib/interfaces/bdd.js delete mode 100644 node_modules/mocha/lib/interfaces/exports.js delete mode 100644 node_modules/mocha/lib/interfaces/index.js delete mode 100644 node_modules/mocha/lib/interfaces/qunit.js delete mode 100644 node_modules/mocha/lib/interfaces/tdd.js delete mode 100644 node_modules/mocha/lib/mocha.js delete mode 100644 node_modules/mocha/lib/ms.js delete mode 100644 node_modules/mocha/lib/reporters/base.js delete mode 100644 node_modules/mocha/lib/reporters/doc.js delete mode 100644 node_modules/mocha/lib/reporters/dot.js delete mode 100644 node_modules/mocha/lib/reporters/html-cov.js delete mode 100644 node_modules/mocha/lib/reporters/html.js delete mode 100644 node_modules/mocha/lib/reporters/index.js delete mode 100644 node_modules/mocha/lib/reporters/json-cov.js delete mode 100644 node_modules/mocha/lib/reporters/json-stream.js delete mode 100644 node_modules/mocha/lib/reporters/json.js delete mode 100644 node_modules/mocha/lib/reporters/landing.js delete mode 100644 node_modules/mocha/lib/reporters/list.js delete mode 100644 node_modules/mocha/lib/reporters/markdown.js delete mode 100644 node_modules/mocha/lib/reporters/min.js delete mode 100644 node_modules/mocha/lib/reporters/nyan.js delete mode 100644 node_modules/mocha/lib/reporters/progress.js delete mode 100644 node_modules/mocha/lib/reporters/spec.js delete mode 100644 node_modules/mocha/lib/reporters/tap.js delete mode 100644 node_modules/mocha/lib/reporters/templates/coverage.jade delete mode 100644 node_modules/mocha/lib/reporters/templates/menu.jade delete mode 100644 node_modules/mocha/lib/reporters/templates/script.html delete mode 100644 node_modules/mocha/lib/reporters/templates/style.html delete mode 100644 node_modules/mocha/lib/reporters/xunit.js delete mode 100644 node_modules/mocha/lib/runnable.js delete mode 100644 node_modules/mocha/lib/runner.js delete mode 100644 node_modules/mocha/lib/suite.js delete mode 100644 node_modules/mocha/lib/template.html delete mode 100644 node_modules/mocha/lib/test.js delete mode 100644 node_modules/mocha/lib/utils.js delete mode 100644 node_modules/mocha/mocha.css delete mode 100644 node_modules/mocha/mocha.js delete mode 120000 node_modules/mocha/node_modules/.bin/jade delete mode 100644 node_modules/mocha/node_modules/commander/History.md delete mode 100644 node_modules/mocha/node_modules/commander/Readme.md delete mode 100644 node_modules/mocha/node_modules/commander/index.js delete mode 100644 node_modules/mocha/node_modules/commander/package.json delete mode 100644 node_modules/mocha/node_modules/debug/Readme.md delete mode 100644 node_modules/mocha/node_modules/debug/debug.js delete mode 100644 node_modules/mocha/node_modules/debug/index.js delete mode 100644 node_modules/mocha/node_modules/debug/lib/debug.js delete mode 100644 node_modules/mocha/node_modules/debug/package.json delete mode 100644 node_modules/mocha/node_modules/diff/README.md delete mode 100644 node_modules/mocha/node_modules/diff/diff.js delete mode 100644 node_modules/mocha/node_modules/diff/package.json delete mode 100644 node_modules/mocha/node_modules/glob/.npmignore delete mode 100644 node_modules/mocha/node_modules/glob/.travis.yml delete mode 100644 node_modules/mocha/node_modules/glob/LICENSE delete mode 100644 node_modules/mocha/node_modules/glob/README.md delete mode 100644 node_modules/mocha/node_modules/glob/examples/g.js delete mode 100644 node_modules/mocha/node_modules/glob/examples/usr-local.js delete mode 100644 node_modules/mocha/node_modules/glob/glob.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/graceful-fs/.npmignore delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/graceful-fs/LICENSE delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/graceful-fs/README.md delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/graceful-fs/graceful-fs.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/graceful-fs/package.json delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/graceful-fs/polyfills.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/graceful-fs/test/open.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/inherits/LICENSE delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/inherits/README.md delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/inherits/inherits.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/inherits/inherits_browser.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/inherits/package.json delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/inherits/test.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/.npmignore delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/LICENSE delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/README.md delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/minimatch.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/package.json delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/test/basic.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/test/brace-expand.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/test/caching.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/test/defaults.js delete mode 100644 node_modules/mocha/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js delete mode 100644 node_modules/mocha/node_modules/glob/package.json delete mode 100644 node_modules/mocha/node_modules/glob/test/00-setup.js delete mode 100644 node_modules/mocha/node_modules/glob/test/bash-comparison.js delete mode 100644 node_modules/mocha/node_modules/glob/test/bash-results.json delete mode 100644 node_modules/mocha/node_modules/glob/test/cwd-test.js delete mode 100644 node_modules/mocha/node_modules/glob/test/globstar-match.js delete mode 100644 node_modules/mocha/node_modules/glob/test/mark.js delete mode 100644 node_modules/mocha/node_modules/glob/test/nocase-nomagic.js delete mode 100644 node_modules/mocha/node_modules/glob/test/pause-resume.js delete mode 100644 node_modules/mocha/node_modules/glob/test/root-nomount.js delete mode 100644 node_modules/mocha/node_modules/glob/test/root.js delete mode 100644 node_modules/mocha/node_modules/glob/test/stat.js delete mode 100644 node_modules/mocha/node_modules/glob/test/zz-cleanup.js delete mode 100644 node_modules/mocha/node_modules/growl/History.md delete mode 100644 node_modules/mocha/node_modules/growl/Readme.md delete mode 100644 node_modules/mocha/node_modules/growl/lib/growl.js delete mode 100644 node_modules/mocha/node_modules/growl/package.json delete mode 100644 node_modules/mocha/node_modules/growl/test.js delete mode 100644 node_modules/mocha/node_modules/jade/.npmignore delete mode 100644 node_modules/mocha/node_modules/jade/LICENSE delete mode 100755 node_modules/mocha/node_modules/jade/bin/jade delete mode 100644 node_modules/mocha/node_modules/jade/index.js delete mode 100644 node_modules/mocha/node_modules/jade/jade.js delete mode 100644 node_modules/mocha/node_modules/jade/jade.md delete mode 100644 node_modules/mocha/node_modules/jade/jade.min.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/compiler.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/doctypes.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/filters.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/inline-tags.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/jade.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/lexer.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/attrs.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/block-comment.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/block.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/case.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/code.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/comment.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/doctype.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/each.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/filter.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/index.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/literal.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/mixin.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/node.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/tag.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/nodes/text.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/parser.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/runtime.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/self-closing.js delete mode 100644 node_modules/mocha/node_modules/jade/lib/utils.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/commander/.npmignore delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/commander/.travis.yml delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/commander/History.md delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/commander/Makefile delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/commander/Readme.md delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/commander/index.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/commander/lib/commander.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/commander/package.json delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.orig delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.rej delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/.npmignore delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/LICENSE delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/README.markdown delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.orig delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.rej delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/index.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/package.json delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/chmod.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/clobber.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/mkdirp.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm_sync.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/race.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/rel.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/sync.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask.js delete mode 100644 node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask_sync.js delete mode 100644 node_modules/mocha/node_modules/jade/package.json delete mode 100644 node_modules/mocha/node_modules/jade/runtime.js delete mode 100644 node_modules/mocha/node_modules/jade/runtime.min.js delete mode 100644 node_modules/mocha/node_modules/jade/test.jade delete mode 100644 node_modules/mocha/node_modules/jade/testing/head.jade delete mode 100644 node_modules/mocha/node_modules/jade/testing/index.jade delete mode 100644 node_modules/mocha/node_modules/jade/testing/index.js delete mode 100644 node_modules/mocha/node_modules/jade/testing/layout.jade delete mode 100644 node_modules/mocha/node_modules/jade/testing/user.jade delete mode 100644 node_modules/mocha/node_modules/jade/testing/user.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/.npmignore delete mode 100644 node_modules/mocha/node_modules/mkdirp/.travis.yml delete mode 100644 node_modules/mocha/node_modules/mkdirp/LICENSE delete mode 100644 node_modules/mocha/node_modules/mkdirp/examples/pow.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/index.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/package.json delete mode 100644 node_modules/mocha/node_modules/mkdirp/readme.markdown delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/chmod.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/clobber.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/mkdirp.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/perm.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/perm_sync.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/race.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/rel.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/return.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/return_sync.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/root.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/sync.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/umask.js delete mode 100644 node_modules/mocha/node_modules/mkdirp/test/umask_sync.js delete mode 100644 node_modules/mocha/package.json delete mode 100644 node_modules/should/.idea/.name delete mode 100644 node_modules/should/.idea/codeStyleSettings.xml delete mode 100644 node_modules/should/.idea/encodings.xml delete mode 100644 node_modules/should/.idea/inspectionProfiles/Project_Default.xml delete mode 100644 node_modules/should/.idea/inspectionProfiles/profiles_settings.xml delete mode 100644 node_modules/should/.idea/jsLibraryMappings.xml delete mode 100644 node_modules/should/.idea/jsLinters/jshint.xml delete mode 100644 node_modules/should/.idea/libraries/Node_js_Dependencies_for_should_js.xml delete mode 100644 node_modules/should/.idea/misc.xml delete mode 100644 node_modules/should/.idea/modules.xml delete mode 100644 node_modules/should/.idea/scopes/scope_settings.xml delete mode 100644 node_modules/should/.idea/should.js.iml delete mode 100644 node_modules/should/.idea/vcs.xml delete mode 100644 node_modules/should/.idea/workspace.xml delete mode 100644 node_modules/should/.npmignore delete mode 100644 node_modules/should/History.md delete mode 100644 node_modules/should/Makefile delete mode 100644 node_modules/should/Readme.md delete mode 100644 node_modules/should/index.js delete mode 100644 node_modules/should/lib/browser.js delete mode 100644 node_modules/should/lib/eql.js delete mode 100644 node_modules/should/lib/ext/assert.js delete mode 100644 node_modules/should/lib/ext/bool.js delete mode 100644 node_modules/should/lib/ext/browser/jquery.js delete mode 100644 node_modules/should/lib/ext/chain.js delete mode 100644 node_modules/should/lib/ext/deprecated.js delete mode 100644 node_modules/should/lib/ext/eql.js delete mode 100644 node_modules/should/lib/ext/error.js delete mode 100644 node_modules/should/lib/ext/http.js delete mode 100644 node_modules/should/lib/ext/match.js delete mode 100644 node_modules/should/lib/ext/number.js delete mode 100644 node_modules/should/lib/ext/property.js delete mode 100644 node_modules/should/lib/ext/string.js delete mode 100644 node_modules/should/lib/ext/type.js delete mode 100644 node_modules/should/lib/node.js delete mode 100644 node_modules/should/lib/should.js delete mode 100644 node_modules/should/lib/util.js delete mode 100644 node_modules/should/package.json delete mode 100644 node_modules/should/should.js delete mode 100644 node_modules/should/should.js.for-tests delete mode 100644 node_modules/should/should.min.js diff --git a/node_modules/.bin/_mocha b/node_modules/.bin/_mocha deleted file mode 120000 index f2a54ffd..00000000 --- a/node_modules/.bin/_mocha +++ /dev/null @@ -1 +0,0 @@ -../mocha/bin/_mocha \ No newline at end of file diff --git a/node_modules/.bin/express b/node_modules/.bin/express deleted file mode 120000 index b741d99c..00000000 --- a/node_modules/.bin/express +++ /dev/null @@ -1 +0,0 @@ -../express/bin/express \ No newline at end of file diff --git a/node_modules/.bin/gulp b/node_modules/.bin/gulp deleted file mode 120000 index 5de73328..00000000 --- a/node_modules/.bin/gulp +++ /dev/null @@ -1 +0,0 @@ -../gulp/bin/gulp.js \ No newline at end of file diff --git a/node_modules/.bin/jade b/node_modules/.bin/jade deleted file mode 120000 index 65a3bac6..00000000 --- a/node_modules/.bin/jade +++ /dev/null @@ -1 +0,0 @@ -../jade/bin/jade.js \ No newline at end of file diff --git a/node_modules/.bin/mocha b/node_modules/.bin/mocha deleted file mode 120000 index 43c668d9..00000000 --- a/node_modules/.bin/mocha +++ /dev/null @@ -1 +0,0 @@ -../mocha/bin/mocha \ No newline at end of file diff --git a/node_modules/consolidate/.npmignore b/node_modules/consolidate/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/node_modules/consolidate/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/consolidate/History.md b/node_modules/consolidate/History.md deleted file mode 100644 index 66908b31..00000000 --- a/node_modules/consolidate/History.md +++ /dev/null @@ -1,86 +0,0 @@ - -0.10.0 / 2013-11-23 -================== - - * add lodash support - * add nunjucks support - -0.9.1 / 2013-04-29 -================== - - * Update ECT version - * Added support for Handlebars helpers with test. - * Invalidates built-in dust cache if caching disabled - -0.9.0 / 2013-03-28 -================== - - * dust-helpers support, latest version of dust - * Re-add doT - global leaks fixed - * improving templayed support - -0.8.0 / 2013-01-23 -================== - - * add templayed support - * add `then-jade` as an alternative to `jade` - -0.7.0 / 2012-12-28 -================== - - * add atpl support - -0.6.0 2012-12-22 -================== - - * add partials support - * add support for toffee templates - * remove dot it still leaks and the author has not fixed it - -0.5.0 / 2012-10-29 -================== - - * add `mote` support - * add support to `dust` partials - * add support for `ECT` - * add support for rendering without file - * add support for `JUST` - * improve Haml-Coffee caching. - -0.4.0 / 2012-07-30 -================== - - * add doT support [sannis] - * add mustache support [ForbesLindesay] - * add walrus support [kagd] - -0.3.1 / 2012-06-28 -================== - - * add QEJS support - * add underscore support - * change whiskers to use pre-defined `.__express` - * remove engines. Closes #37 - * remove kernel, cannot comply with our caching - -0.3.0 / 2012-04-18 -================== - - * Added partials loading for whiskers [gsf] - * Added dustjs-linkedin support - -0.2.0 / 2012-04-04 -================== - - * Added support for dust [fatjonny] - * Added handlebars support [jstewmon] - -0.1.0 / 2012-01-03 -================== - - * Added support for several more engines - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/consolidate/Makefile b/node_modules/consolidate/Makefile deleted file mode 100644 index 2bc56b4c..00000000 --- a/node_modules/consolidate/Makefile +++ /dev/null @@ -1,9 +0,0 @@ - -REPORTER = spec - -test: - @./node_modules/.bin/mocha \ - --slow 30 \ - --reporter $(REPORTER) - -.PHONY: test \ No newline at end of file diff --git a/node_modules/consolidate/Readme.md b/node_modules/consolidate/Readme.md deleted file mode 100644 index d43647e1..00000000 --- a/node_modules/consolidate/Readme.md +++ /dev/null @@ -1,155 +0,0 @@ -# Consolidate.js - - Template engine consolidation library. - -## Installation - - $ npm install consolidate - -## Supported template engines - - - [atpl](https://github.com/soywiz/atpl.js) - - [dust](https://github.com/akdubya/dustjs) [(website)](http://akdubya.github.com/dustjs/) - - [eco](https://github.com/sstephenson/eco) - - [ect](https://github.com/baryshev/ect) [(website)](http://ectjs.com/) - - [ejs](https://github.com/visionmedia/ejs) - - [haml](https://github.com/visionmedia/haml.js) [(website)](http://haml-lang.com/) - - [haml-coffee](https://github.com/9elements/haml-coffee) [(website)](http://haml-lang.com/) - - [handlebars](https://github.com/wycats/handlebars.js/) [(website)](http://handlebarsjs.com/) - - [hogan](https://github.com/twitter/hogan.js) [(website)](http://twitter.github.com/hogan.js/) - - [jade](https://github.com/visionmedia/jade) [(website)](http://jade-lang.com/) - - [jazz](https://github.com/shinetech/jazz) - - [jqtpl](https://github.com/kof/node-jqtpl) [(website)](http://api.jquery.com/category/plugins/templates/) - - [JUST](https://github.com/baryshev/just) - - [liquor](https://github.com/chjj/liquor) - - [lodash](https://github.com/bestiejs/lodash) [(website)](http://lodash.com/) - - [mustache](https://github.com/janl/mustache.js) - - [QEJS](https://github.com/jepso/QEJS) - - [ractive](https://github.com/Rich-Harris/Ractive) - - [swig](https://github.com/paularmstrong/swig) [(website)](http://paularmstrong.github.com/swig/) - - [templayed](http://archan937.github.com/templayed.js/) - - [toffee](https://github.com/malgorithms/toffee) - - [underscore](https://github.com/documentcloud/underscore) [(website)](http://documentcloud.github.com/underscore/) - - [walrus](https://github.com/jeremyruppel/walrus) [(website)](http://documentup.com/jeremyruppel/walrus/) - - [whiskers](https://github.com/gsf/whiskers.js/tree/) - -__NOTE__: you must still install the engines you wish to use, add them to your package.json dependencies. - -## API - - All templates supported by this library may be rendered using the signature `(path[, locals], callback)` as shown below, which happens to be the signature that Express 3.x supports so any of these engines may be used within Express. - -__NOTE__: All this example code uses cons.swig for the swig template engine. Replace swig with whatever templating you are using. For example, use cons.hogan for hogan.js, cons.jade for jade, etc. `console.log(cons)` for the full list of identifiers. - -```js -var cons = require('consolidate'); -cons.swig('views/page.html', { user: 'tobi' }, function(err, html){ - if (err) throw err; - console.log(html); -}); -``` - - Or without options / local variables: - -```js -var cons = require('consolidate'); -cons.swig('views/page.html', function(err, html){ - if (err) throw err; - console.log(html); -}); -``` - - To dynamically pass the engine, simply use the subscript operator and a variable: - -```js -var cons = require('consolidate') - , name = 'swig'; - -cons[name]('views/page.html', { user: 'tobi' }, function(err, html){ - if (err) throw err; - console.log(html); -}); -``` - -## Caching - - To enable caching simply pass `{ cache: true }`. Engines _may_ use this option to cache things reading the file contents, compiled `Function`s etc. Engines which do _not_ support this may simply ignore it. All engines that consolidate.js implements I/O for will cache the file contents, ideal for production environments. - -```js -var cons = require('consolidate'); -cons.swig('views/page.html', { user: 'tobi' }, function(err, html){ - if (err) throw err; - console.log(html); -}); -``` - -## Express 3.x example - -```js -var express = require('express') - , cons = require('consolidate') - , app = express(); - -// assign the swig engine to .html files -app.engine('html', cons.swig); - -// set .html as the default extension -app.set('view engine', 'html'); -app.set('views', __dirname + '/views'); - -var users = []; -users.push({ name: 'tobi' }); -users.push({ name: 'loki' }); -users.push({ name: 'jane' }); - -app.get('/', function(req, res){ - res.render('index', { - title: 'Consolidate.js' - }); -}); - -app.get('/users', function(req, res){ - res.render('users', { - title: 'Users', - users: users - }); -}); - -app.listen(3000); -console.log('Express server listening on port 3000'); -``` - -## Running tests - - Install dev deps: - - $ npm install -d - - Run the tests: - - $ make test - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> - -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/consolidate/index.js b/node_modules/consolidate/index.js deleted file mode 100644 index 4a0df174..00000000 --- a/node_modules/consolidate/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/consolidate'); \ No newline at end of file diff --git a/node_modules/consolidate/lib/consolidate.js b/node_modules/consolidate/lib/consolidate.js deleted file mode 100644 index 279b7f46..00000000 --- a/node_modules/consolidate/lib/consolidate.js +++ /dev/null @@ -1,764 +0,0 @@ -/*! - * consolidate - * Copyright(c) 2012 TJ Holowaychuk - * MIT Licensed - * - * Engines which do not support caching of their file contents - * should use the `read()` function defined in consolidate.js - * On top of this, when an engine compiles to a `Function`, - * these functions should either be cached within consolidate.js - * or the engine itself via `options.cache`. This will allow - * users and frameworks to pass `options.cache = true` for - * `NODE_ENV=production`, however edit the file(s) without - * re-loading the application in development. - */ - -/** - * Module dependencies. - */ - -var fs = require('fs') - , path = require('path') - , join = path.join - , extname = path.extname - , dirname = path.dirname; - -var readCache = {}; - -/** - * Require cache. - */ - -var cacheStore = {}; - -/** - * Require cache. - */ - -var requires = {}; - -/** - * Clear the cache. - * - * @api public - */ - -exports.clearCache = function(){ - cacheStore = {}; -}; - -/** - * Conditionally cache `compiled` template based - * on the `options` filename and `.cache` boolean. - * - * @param {Object} options - * @param {Function} compiled - * @return {Function} - * @api private - */ - -function cache(options, compiled) { - // cachable - if (compiled && options.filename && options.cache) { - delete readCache[options.filename]; - cacheStore[options.filename] = compiled; - return compiled; - } - - // check cache - if (options.filename && options.cache) { - return cacheStore[options.filename]; - } - - return compiled; -} - -/** - * Read `path` with `options` with - * callback `(err, str)`. When `options.cache` - * is true the template string will be cached. - * - * @param {String} options - * @param {Function} fn - * @api private - */ - -function read(path, options, fn) { - var str = readCache[path]; - var cached = options.cache && str && 'string' == typeof str; - - // cached (only if cached is a string and not a compiled template function) - if (cached) return fn(null, str); - - // read - fs.readFile(path, 'utf8', function(err, str){ - if (err) return fn(err); - // remove extraneous utf8 BOM marker - str = str.replace(/^\uFEFF/, ''); - if (options.cache) readCache[path] = str; - fn(null, str); - }); -} - -/** - * Read `path` with `options` with - * callback `(err, str)`. When `options.cache` - * is true the partial string will be cached. - * - * @param {String} options - * @param {Function} fn - * @api private - */ - -function readPartials(path, options, fn) { - if (!options.partials) return fn(); - var partials = options.partials; - var keys = Object.keys(partials); - - function next(index) { - if (index == keys.length) return fn(null); - var key = keys[index]; - var file = join(dirname(path), partials[key] + extname(path)); - read(file, options, function(err, str){ - if (err) return fn(err); - options.partials[key] = str; - next(++index); - }); - } - - next(0); -} - -/** - * fromStringRenderer - */ - -function fromStringRenderer(name) { - return function(path, options, fn){ - options.filename = path; - readPartials(path, options, function (err) { - if (err) return fn(err); - if (cache(options)) { - exports[name].render('', options, fn); - } else { - read(path, options, function(err, str){ - if (err) return fn(err); - exports[name].render(str, options, fn); - }); - } - }); - }; -} - -/** - * Jade support. - */ - -exports.jade = function(path, options, fn){ - var engine = requires.jade; - if (!engine) { - try { - engine = requires.jade = require('jade'); - } catch (err) { - engine = requires.jade = require('then-jade'); - } - } - engine.renderFile(path, options, fn); -}; - -/** - * Jade string support. - */ - -exports.jade.render = function(str, options, fn){ - var engine = requires.jade; - if (!engine) { - try { - engine = requires.jade = require('jade'); - } catch (err) { - engine = requires.jade = require('then-jade'); - } - } - engine.render(str, options, fn); -}; - -/** - * Dust support. - */ - -exports.dust = fromStringRenderer('dust'); - -/** - * Dust string support. - */ - -exports.dust.render = function(str, options, fn){ - var engine = requires.dust; - if (!engine) { - try { - engine = requires.dust = require('dust'); - } catch (err) { - try { - engine = requires.dust = require('dustjs-helpers'); - } catch (err) { - engine = requires.dust = require('dustjs-linkedin'); - } - } - } - - var ext = 'dust' - , views = '.'; - - if (options) { - if (options.ext) ext = options.ext; - if (options.views) views = options.views; - if (options.settings && options.settings.views) views = options.settings.views; - } - if (!options || (options && !options.cache)) engine.cache = {}; - - engine.onLoad = function(path, callback){ - if ('' == extname(path)) path += '.' + ext; - if ('/' !== path[0]) path = views + '/' + path; - read(path, options, callback); - }; - - try { - var tmpl = cache(options) || cache(options, engine.compileFn(str)); - tmpl(options, fn); - } catch (err) { - fn(err); - } -}; - -/** - * Swig support. - */ - -exports.swig = fromStringRenderer('swig'); - -/** - * Swig string support. - */ - -exports.swig.render = function(str, options, fn){ - var engine = requires.swig || (requires.swig = require('swig')); - try { - var tmpl = cache(options) || cache(options, engine.compile(str, options)); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Atpl support. - */ - -exports.atpl = fromStringRenderer('atpl'); - -/** - * Atpl string support. - */ - -exports.atpl.render = function(str, options, fn){ - var engine = requires.atpl || (requires.atpl = require('atpl')); - try { - var tmpl = cache(options) || cache(options, engine.compile(str, options)); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Liquor support, - */ - -exports.liquor = fromStringRenderer('liquor'); - -/** - * Liquor string support. - */ - -exports.liquor.render = function(str, options, fn){ - var engine = requires.liquor || (requires.liquor = require('liquor')); - try { - var tmpl = cache(options) || cache(options, engine.compile(str, options)); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * EJS support. - */ - -exports.ejs = fromStringRenderer('ejs'); - -/** - * EJS string support. - */ - -exports.ejs.render = function(str, options, fn){ - var engine = requires.ejs || (requires.ejs = require('ejs')); - try { - var tmpl = cache(options) || cache(options, engine.compile(str, options)); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - - -/** - * Eco support. - */ - -exports.eco = fromStringRenderer('eco'); - -/** - * Eco string support. - */ - -exports.eco.render = function(str, options, fn){ - var engine = requires.eco || (requires.eco = require('eco')); - try { - fn(null, engine.render(str, options)); - } catch (err) { - fn(err); - } -}; - -/** - * Jazz support. - */ - -exports.jazz = fromStringRenderer('jazz'); - -/** - * Jazz string support. - */ - -exports.jazz.render = function(str, options, fn){ - var engine = requires.jazz || (requires.jazz = require('jazz')); - try { - var tmpl = cache(options) || cache(options, engine.compile(str, options)); - tmpl.eval(options, function(str){ - fn(null, str); - }); - } catch (err) { - fn(err); - } -}; - -/** - * JQTPL support. - */ - -exports.jqtpl = fromStringRenderer('jqtpl'); - -/** - * JQTPL string support. - */ - -exports.jqtpl.render = function(str, options, fn){ - var engine = requires.jqtpl || (requires.jqtpl = require('jqtpl')); - try { - engine.template(str, str); - fn(null, engine.tmpl(str, options)); - } catch (err) { - fn(err); - } -}; - -/** - * Haml support. - */ - -exports.haml = fromStringRenderer('haml'); - -/** - * Haml string support. - */ - -exports.haml.render = function(str, options, fn){ - var engine = requires.hamljs || (requires.hamljs = require('hamljs')); - try { - options.locals = options; - fn(null, engine.render(str, options).trimLeft()); - } catch (err) { - fn(err); - } -}; - -/** - * Whiskers support. - */ - -exports.whiskers = function(path, options, fn){ - var engine = requires.whiskers || (requires.whiskers = require('whiskers')); - engine.__express(path, options, fn); -}; - -/** - * Whiskers string support. - */ - -exports.whiskers.render = function(str, options, fn){ - var engine = requires.whiskers || (requires.whiskers = require('whiskers')); - try { - fn(null, engine.render(str, options)); - } catch (err) { - fn(err); - } -}; - -/** - * Coffee-HAML support. - */ - -exports['haml-coffee'] = fromStringRenderer('haml-coffee'); - -/** - * Coffee-HAML string support. - */ - -exports['haml-coffee'].render = function(str, options, fn){ - var engine = requires.HAMLCoffee || (requires.HAMLCoffee = require('haml-coffee')); - try { - var tmpl = cache(options) || cache(options, engine.compile(str, options)); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Hogan support. - */ - -exports.hogan = fromStringRenderer('hogan'); - -/** - * Hogan string support. - */ - -exports.hogan.render = function(str, options, fn){ - var engine = requires.hogan || (requires.hogan = require('hogan.js')); - try { - var tmpl = cache(options) || cache(options, engine.compile(str, options)); - fn(null, tmpl.render(options, options.partials)); - } catch (err) { - fn(err); - } -}; - -/** - * templayed.js support. - */ - -exports.templayed = fromStringRenderer('templayed'); - -/** - * templayed.js string support. - */ - -exports.templayed.render = function(str, options, fn){ - var engine = requires.templayed || (requires.templayed = require('templayed')); - try { - var tmpl = cache(options) || cache(options, engine(str)); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Handlebars support. - */ - -exports.handlebars = fromStringRenderer('handlebars'); - -/** - * Handlebars string support. - */ - -exports.handlebars.render = function(str, options, fn) { - var engine = requires.handlebars || (requires.handlebars = require('handlebars')); - try { - for (var partial in options.partials) { - engine.registerPartial(partial, options.partials[partial]); - } - for (var helper in options.helpers) { - engine.registerHelper(helper, options.helpers[helper]); - } - var tmpl = cache(options) || cache(options, engine.compile(str, options)); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -} - -/** - * Underscore support. - */ - -exports.underscore = fromStringRenderer('underscore'); - -/** - * Underscore string support. - */ - -exports.underscore.render = function(str, options, fn) { - var engine = requires.underscore || (requires.underscore = require('underscore')); - try { - var tmpl = cache(options) || cache(options, engine.template(str, null, options)); - fn(null, tmpl(options).replace(/\n$/, '')); - } catch (err) { - fn(err); - } -}; - - -/** - * Lodash support. - */ - -exports.lodash = fromStringRenderer('lodash'); - -/** - * Lodash string support. - */ - -exports.lodash.render = function(str, options, fn) { - var engine = requires.lodash || (requires.lodash = require('lodash')); - try { - var tmpl = cache(options) || cache(options, engine.template(str, null, options)); - fn(null, tmpl(options).replace(/\n$/, '')); - } catch (err) { - fn(err); - } -}; - - -/** - * QEJS support. - */ - -exports.qejs = function (path, options, fn) { - try { - var engine = requires.qejs || (requires.qejs = require('qejs')); - engine.renderFile(path, options).nodeify(fn); - } catch (err) { - fn(err); - } -}; - -/** - * QEJS string support. - */ - -exports.qejs.render = function (str, options, fn) { - try { - var engine = requires.qejs || (requires.qejs = require('qejs')); - engine.render(str, options).then(function (result) { - fn(null, result); - }, function (err) { - fn(err); - }).end(); - } catch (err) { - fn(err); - } -}; - - -/** - * Walrus support. - */ - -exports.walrus = fromStringRenderer('walrus'); - -/** - * Walrus string support. - */ - -exports.walrus.render = function (str, options, fn) { - var engine = requires.walrus || (requires.walrus = require('walrus')); - try { - var tmpl = cache(options) || cache(options, engine.parse(str)); - fn(null, tmpl.compile(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Mustache support. - */ - -exports.mustache = fromStringRenderer('mustache'); - -/** - * Mustache string support. - */ - -exports.mustache.render = function(str, options, fn) { - var engine = requires.mustache || (requires.mustache = require('mustache')); - try { - fn(null, engine.to_html(str, options, options.partials)); - } catch (err) { - fn(err); - } -}; - -/** - * Just support. - */ - -exports.just = function(path, options, fn){ - var engine = requires.just; - if (!engine) { - var JUST = require('just'); - engine = requires.just = new JUST(); - } - engine.configure({ useCache: options.cache }); - engine.render(path, options, fn); -}; - -/** - * Just string support. - */ - -exports.just.render = function(str, options, fn){ - var JUST = require('just'); - var engine = new JUST({ root: { page: str }}); - engine.render('page', options, fn); -}; - -/** - * ECT support. - */ - -exports.ect = function(path, options, fn){ - var engine = requires.ect; - if (!engine) { - var ECT = require('ect'); - engine = requires.ect = new ECT(); - } - engine.configure({ cache: options.cache }); - engine.render(path, options, fn); -}; - -/** - * ECT string support. - */ - -exports.ect.render = function(str, options, fn){ - var ECT = require('ect'); - var engine = new ECT({ root: { page: str }}); - engine.render('page', options, fn); -}; - -/** - * mote support. - */ - -exports.mote = fromStringRenderer('mote'); - -/** - * mote string support. - */ - -exports.mote.render = function(str, options, fn){ - var engine = requires.mote || (requires.mote = require('mote')); - try { - var tmpl = cache(options) || cache(options, engine.compile(str)); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Toffee support. - */ - -exports.toffee = function(path, options, fn){ - var toffee = requires.toffee || (requires.toffee = require('toffee')); - toffee.__consolidate_engine_render(path, options, fn); -}; - -/** - * Toffee string support. - */ - -exports.toffee.render = function(str, options, fn) { - var engine = requires.toffee || (requires.toffee = require('toffee')); - try { - engine.str_render(str, options,fn); - } catch (err) { - fn(err); - } -}; - -/** - * doT support. - */ - -exports.dot = fromStringRenderer('dot'); - -/** - * doT string support. - */ - -exports.dot.render = function (str, options, fn) { - var engine = requires.dot || (requires.dot = require('dot')); - try { - var tmpl = cache(options) || cache(options, engine.compile(str, options && options._def)); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Ractive support. - */ - -exports.ractive = fromStringRenderer('ractive'); - -/** - * Ractive string support. - */ - -exports.ractive.render = function(str, options, fn){ - var engine = requires.ractive || (requires.ractive = require('ractive')); - - options.template = str; - if (options.data === null || options.data === undefined) - { - options.data = options; - } - - try { - fn(null, new engine(options).renderHTML()); - } catch (err) { - fn(err); - } -}; - -/** - * Nunjucks support. - */ - -exports.nunjucks = fromStringRenderer('nunjucks'); - -/** - * Nunjucks string support. - */ - -exports.nunjucks.render = function(str, options, fn) { - var engine = requires.nunjucks || (requires.nunjucks = require('nunjucks')); - engine.renderString(str, options, fn); -}; diff --git a/node_modules/consolidate/package.json b/node_modules/consolidate/package.json deleted file mode 100644 index 2923fe14..00000000 --- a/node_modules/consolidate/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "consolidate", - "version": "0.10.0", - "description": "Template engine consolidation library", - "keywords": [ - "template", - "engine", - "view" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "devDependencies": { - "mocha": "*", - "should": "*", - "jade": "0.26.0", - "ejs": "0.7.1", - "eco": "1.1.0-rc-3", - "swig": "0.12.0", - "jazz": "0.0.18", - "jqtpl": "1.1.0", - "liquor": "0.0.4", - "lodash": "1.2.0", - "hamljs": "0.6.1", - "whiskers": "0.2.2", - "haml-coffee": "1.4.0", - "hogan.js": "2.0.0", - "dust": "0.3.0", - "dustjs-linkedin": "1.2", - "dustjs-helpers": "1.1.1", - "handlebars": "1.0.7", - "underscore": "1.3.3", - "qejs": "0.0.1", - "walrus": "0.9.0", - "mustache": "0.4.0", - "just": "0.1.8", - "ect": "0.3.5", - "mote": "0.2.0", - "toffee": "0.0.52", - "atpl": ">=0.5.5", - "templayed": ">=0.2.3", - "dot": "1.0.1", - "ractive": "0.3.7", - "nunjucks": "~1.0.0" - }, - "main": "index", - "repository": { - "type": "git", - "url": "https://github.com/visionmedia/consolidate.js.git" - }, - "scripts": { - "test": "mocha" - }, - "readme": "# Consolidate.js\n\n Template engine consolidation library.\n\n## Installation\n\n $ npm install consolidate\n\n## Supported template engines\n\n - [atpl](https://github.com/soywiz/atpl.js)\n - [dust](https://github.com/akdubya/dustjs) [(website)](http://akdubya.github.com/dustjs/)\n - [eco](https://github.com/sstephenson/eco)\n - [ect](https://github.com/baryshev/ect) [(website)](http://ectjs.com/)\n - [ejs](https://github.com/visionmedia/ejs)\n - [haml](https://github.com/visionmedia/haml.js) [(website)](http://haml-lang.com/)\n - [haml-coffee](https://github.com/9elements/haml-coffee) [(website)](http://haml-lang.com/)\n - [handlebars](https://github.com/wycats/handlebars.js/) [(website)](http://handlebarsjs.com/)\n - [hogan](https://github.com/twitter/hogan.js) [(website)](http://twitter.github.com/hogan.js/)\n - [jade](https://github.com/visionmedia/jade) [(website)](http://jade-lang.com/)\n - [jazz](https://github.com/shinetech/jazz)\n - [jqtpl](https://github.com/kof/node-jqtpl) [(website)](http://api.jquery.com/category/plugins/templates/)\n - [JUST](https://github.com/baryshev/just)\n - [liquor](https://github.com/chjj/liquor)\n - [lodash](https://github.com/bestiejs/lodash) [(website)](http://lodash.com/)\n - [mustache](https://github.com/janl/mustache.js)\n - [QEJS](https://github.com/jepso/QEJS)\n - [ractive](https://github.com/Rich-Harris/Ractive)\n - [swig](https://github.com/paularmstrong/swig) [(website)](http://paularmstrong.github.com/swig/)\n - [templayed](http://archan937.github.com/templayed.js/)\n - [toffee](https://github.com/malgorithms/toffee)\n - [underscore](https://github.com/documentcloud/underscore) [(website)](http://documentcloud.github.com/underscore/)\n - [walrus](https://github.com/jeremyruppel/walrus) [(website)](http://documentup.com/jeremyruppel/walrus/)\n - [whiskers](https://github.com/gsf/whiskers.js/tree/)\n\n__NOTE__: you must still install the engines you wish to use, add them to your package.json dependencies.\n\n## API\n\n All templates supported by this library may be rendered using the signature `(path[, locals], callback)` as shown below, which happens to be the signature that Express 3.x supports so any of these engines may be used within Express.\n\n__NOTE__: All this example code uses cons.swig for the swig template engine. Replace swig with whatever templating you are using. For example, use cons.hogan for hogan.js, cons.jade for jade, etc. `console.log(cons)` for the full list of identifiers.\n\n```js\nvar cons = require('consolidate');\ncons.swig('views/page.html', { user: 'tobi' }, function(err, html){\n if (err) throw err;\n console.log(html);\n});\n```\n\n Or without options / local variables:\n\n```js\nvar cons = require('consolidate');\ncons.swig('views/page.html', function(err, html){\n if (err) throw err;\n console.log(html);\n});\n```\n\n To dynamically pass the engine, simply use the subscript operator and a variable:\n\n```js\nvar cons = require('consolidate')\n , name = 'swig';\n\ncons[name]('views/page.html', { user: 'tobi' }, function(err, html){\n if (err) throw err;\n console.log(html);\n});\n```\n\n## Caching\n\n To enable caching simply pass `{ cache: true }`. Engines _may_ use this option to cache things reading the file contents, compiled `Function`s etc. Engines which do _not_ support this may simply ignore it. All engines that consolidate.js implements I/O for will cache the file contents, ideal for production environments.\n\n```js\nvar cons = require('consolidate');\ncons.swig('views/page.html', { user: 'tobi' }, function(err, html){\n if (err) throw err;\n console.log(html);\n});\n```\n\n## Express 3.x example\n\n```js\nvar express = require('express')\n , cons = require('consolidate')\n , app = express();\n\n// assign the swig engine to .html files\napp.engine('html', cons.swig);\n\n// set .html as the default extension \napp.set('view engine', 'html');\napp.set('views', __dirname + '/views');\n\nvar users = [];\nusers.push({ name: 'tobi' });\nusers.push({ name: 'loki' });\nusers.push({ name: 'jane' });\n\napp.get('/', function(req, res){\n res.render('index', {\n title: 'Consolidate.js'\n });\n});\n\napp.get('/users', function(req, res){\n res.render('users', {\n title: 'Users',\n users: users\n });\n});\n\napp.listen(3000);\nconsole.log('Express server listening on port 3000');\n```\n\n## Running tests\n\n Install dev deps:\n \n $ npm install -d\n\n Run the tests:\n\n $ make test\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/consolidate.js/issues" - }, - "homepage": "https://github.com/visionmedia/consolidate.js", - "_id": "consolidate@0.10.0", - "dist": { - "shasum": "81f1a6ceba1247df9cef7a261ce527c2ce538f7a" - }, - "_from": "consolidate@", - "_resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.10.0.tgz" -} diff --git a/node_modules/express/.npmignore b/node_modules/express/.npmignore deleted file mode 100644 index caf574de..00000000 --- a/node_modules/express/.npmignore +++ /dev/null @@ -1,9 +0,0 @@ -.git* -docs/ -examples/ -support/ -test/ -testing.js -.DS_Store -coverage.html -lib-cov diff --git a/node_modules/express/.travis.yml b/node_modules/express/.travis.yml deleted file mode 100644 index a12e3f0f..00000000 --- a/node_modules/express/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" \ No newline at end of file diff --git a/node_modules/express/History.md b/node_modules/express/History.md deleted file mode 100644 index 9d53bef4..00000000 --- a/node_modules/express/History.md +++ /dev/null @@ -1,1274 +0,0 @@ -4.0.0 / -================== - - * remove: - - express(1) - moved to [express-generator](https://github.com/expressjs/generator) - - `req.accepted*` - use `req.accepts*()` instead - - `app.configure` - use logic in your own app code - * change: - - `req.accepts*` -> `req.accepts*s` - i.e. `req.acceptsEncoding` -> `req.acceptsEncodings` - - `req.params` is now an object instead of an array - - `json spaces` no longer enabled by default in development - * refactor: - - `req.accepts*` with [accepts](https://github.com/expressjs/accepts) - - `req.is` with [type-is](https://github.com/expressjs/type-is) - -3.4.8 / 2014-01-13 -================== - - * prevent incorrect automatic OPTIONS responses #1868 @dpatti - * update binary and examples for jade 1.0 #1876 @yossi, #1877 @reqshark, #1892 @matheusazzi - * throw 400 in case of malformed paths @rlidwka - -3.4.7 / 2013-12-10 -================== - - * update connect - -3.4.6 / 2013-12-01 -================== - - * update connect (raw-body) - -3.4.5 / 2013-11-27 -================== - - * update connect - * res.location: remove leading ./ #1802 @kapouer - * res.redirect: fix `res.redirect('toString') #1829 @michaelficarra - * res.send: always send ETag when content-length > 0 - * router: add Router.all() method - -3.4.4 / 2013-10-29 -================== - - * update connect - * update supertest - * update methods - * express(1): replace bodyParser() with urlencoded() and json() #1795 @chirag04 - -3.4.3 / 2013-10-23 -================== - - * update connect - -3.4.2 / 2013-10-18 -================== - - * update connect - * downgrade commander - -3.4.1 / 2013-10-15 -================== - - * update connect - * update commander - * jsonp: check if callback is a function - * router: wrap encodeURIComponent in a try/catch #1735 (@lxe) - * res.format: now includes chraset @1747 (@sorribas) - * res.links: allow multiple calls @1746 (@sorribas) - -3.4.0 / 2013-09-07 -================== - - * add res.vary(). Closes #1682 - * update connect - -3.3.8 / 2013-09-02 -================== - - * update connect - -3.3.7 / 2013-08-28 -================== - - * update connect - -3.3.6 / 2013-08-27 -================== - - * Revert "remove charset from json responses. Closes #1631" (causes issues in some clients) - * add: req.accepts take an argument list - -3.3.4 / 2013-07-08 -================== - - * update send and connect - -3.3.3 / 2013-07-04 -================== - - * update connect - -3.3.2 / 2013-07-03 -================== - - * update connect - * update send - * remove .version export - -3.3.1 / 2013-06-27 -================== - - * update connect - -3.3.0 / 2013-06-26 -================== - - * update connect - * add support for multiple X-Forwarded-Proto values. Closes #1646 - * change: remove charset from json responses. Closes #1631 - * change: return actual booleans from req.accept* functions - * fix jsonp callback array throw - -3.2.6 / 2013-06-02 -================== - - * update connect - -3.2.5 / 2013-05-21 -================== - - * update connect - * update node-cookie - * add: throw a meaningful error when there is no default engine - * change generation of ETags with res.send() to GET requests only. Closes #1619 - -3.2.4 / 2013-05-09 -================== - - * fix `req.subdomains` when no Host is present - * fix `req.host` when no Host is present, return undefined - -3.2.3 / 2013-05-07 -================== - - * update connect / qs - -3.2.2 / 2013-05-03 -================== - - * update qs - -3.2.1 / 2013-04-29 -================== - - * add app.VERB() paths array deprecation warning - * update connect - * update qs and remove all ~ semver crap - * fix: accept number as value of Signed Cookie - -3.2.0 / 2013-04-15 -================== - - * add "view" constructor setting to override view behaviour - * add req.acceptsEncoding(name) - * add req.acceptedEncodings - * revert cookie signature change causing session race conditions - * fix sorting of Accept values of the same quality - -3.1.2 / 2013-04-12 -================== - - * add support for custom Accept parameters - * update cookie-signature - -3.1.1 / 2013-04-01 -================== - - * add X-Forwarded-Host support to `req.host` - * fix relative redirects - * update mkdirp - * update buffer-crc32 - * remove legacy app.configure() method from app template. - -3.1.0 / 2013-01-25 -================== - - * add support for leading "." in "view engine" setting - * add array support to `res.set()` - * add node 0.8.x to travis.yml - * add "subdomain offset" setting for tweaking `req.subdomains` - * add `res.location(url)` implementing `res.redirect()`-like setting of Location - * use app.get() for x-powered-by setting for inheritance - * fix colons in passwords for `req.auth` - -3.0.6 / 2013-01-04 -================== - - * add http verb methods to Router - * update connect - * fix mangling of the `res.cookie()` options object - * fix jsonp whitespace escape. Closes #1132 - -3.0.5 / 2012-12-19 -================== - - * add throwing when a non-function is passed to a route - * fix: explicitly remove Transfer-Encoding header from 204 and 304 responses - * revert "add 'etag' option" - -3.0.4 / 2012-12-05 -================== - - * add 'etag' option to disable `res.send()` Etags - * add escaping of urls in text/plain in `res.redirect()` - for old browsers interpreting as html - * change crc32 module for a more liberal license - * update connect - -3.0.3 / 2012-11-13 -================== - - * update connect - * update cookie module - * fix cookie max-age - -3.0.2 / 2012-11-08 -================== - - * add OPTIONS to cors example. Closes #1398 - * fix route chaining regression. Closes #1397 - -3.0.1 / 2012-11-01 -================== - - * update connect - -3.0.0 / 2012-10-23 -================== - - * add `make clean` - * add "Basic" check to req.auth - * add `req.auth` test coverage - * add cb && cb(payload) to `res.jsonp()`. Closes #1374 - * add backwards compat for `res.redirect()` status. Closes #1336 - * add support for `res.json()` to retain previously defined Content-Types. Closes #1349 - * update connect - * change `res.redirect()` to utilize a pathname-relative Location again. Closes #1382 - * remove non-primitive string support for `res.send()` - * fix view-locals example. Closes #1370 - * fix route-separation example - -3.0.0rc5 / 2012-09-18 -================== - - * update connect - * add redis search example - * add static-files example - * add "x-powered-by" setting (`app.disable('x-powered-by')`) - * add "application/octet-stream" redirect Accept test case. Closes #1317 - -3.0.0rc4 / 2012-08-30 -================== - - * add `res.jsonp()`. Closes #1307 - * add "verbose errors" option to error-pages example - * add another route example to express(1) so people are not so confused - * add redis online user activity tracking example - * update connect dep - * fix etag quoting. Closes #1310 - * fix error-pages 404 status - * fix jsonp callback char restrictions - * remove old OPTIONS default response - -3.0.0rc3 / 2012-08-13 -================== - - * update connect dep - * fix signed cookies to work with `connect.cookieParser()` ("s:" prefix was missing) [tnydwrds] - * fix `res.render()` clobbering of "locals" - -3.0.0rc2 / 2012-08-03 -================== - - * add CORS example - * update connect dep - * deprecate `.createServer()` & remove old stale examples - * fix: escape `res.redirect()` link - * fix vhost example - -3.0.0rc1 / 2012-07-24 -================== - - * add more examples to view-locals - * add scheme-relative redirects (`res.redirect("//foo.com")`) support - * update cookie dep - * update connect dep - * update send dep - * fix `express(1)` -h flag, use -H for hogan. Closes #1245 - * fix `res.sendfile()` socket error handling regression - -3.0.0beta7 / 2012-07-16 -================== - - * update connect dep for `send()` root normalization regression - -3.0.0beta6 / 2012-07-13 -================== - - * add `err.view` property for view errors. Closes #1226 - * add "jsonp callback name" setting - * add support for "/foo/:bar*" non-greedy matches - * change `res.sendfile()` to use `send()` module - * change `res.send` to use "response-send" module - * remove `app.locals.use` and `res.locals.use`, use regular middleware - -3.0.0beta5 / 2012-07-03 -================== - - * add "make check" support - * add route-map example - * add `res.json(obj, status)` support back for BC - * add "methods" dep, remove internal methods module - * update connect dep - * update auth example to utilize cores pbkdf2 - * updated tests to use "supertest" - -3.0.0beta4 / 2012-06-25 -================== - - * Added `req.auth` - * Added `req.range(size)` - * Added `res.links(obj)` - * Added `res.send(body, status)` support back for backwards compat - * Added `.default()` support to `res.format()` - * Added 2xx / 304 check to `req.fresh` - * Revert "Added + support to the router" - * Fixed `res.send()` freshness check, respect res.statusCode - -3.0.0beta3 / 2012-06-15 -================== - - * Added hogan `--hjs` to express(1) [nullfirm] - * Added another example to content-negotiation - * Added `fresh` dep - * Changed: `res.send()` always checks freshness - * Fixed: expose connects mime module. Cloases #1165 - -3.0.0beta2 / 2012-06-06 -================== - - * Added `+` support to the router - * Added `req.host` - * Changed `req.param()` to check route first - * Update connect dep - -3.0.0beta1 / 2012-06-01 -================== - - * Added `res.format()` callback to override default 406 behaviour - * Fixed `res.redirect()` 406. Closes #1154 - -3.0.0alpha5 / 2012-05-30 -================== - - * Added `req.ip` - * Added `{ signed: true }` option to `res.cookie()` - * Removed `res.signedCookie()` - * Changed: dont reverse `req.ips` - * Fixed "trust proxy" setting check for `req.ips` - -3.0.0alpha4 / 2012-05-09 -================== - - * Added: allow `[]` in jsonp callback. Closes #1128 - * Added `PORT` env var support in generated template. Closes #1118 [benatkin] - * Updated: connect 2.2.2 - -3.0.0alpha3 / 2012-05-04 -================== - - * Added public `app.routes`. Closes #887 - * Added _view-locals_ example - * Added _mvc_ example - * Added `res.locals.use()`. Closes #1120 - * Added conditional-GET support to `res.send()` - * Added: coerce `res.set()` values to strings - * Changed: moved `static()` in generated apps below router - * Changed: `res.send()` only set ETag when not previously set - * Changed connect 2.2.1 dep - * Changed: `make test` now runs unit / acceptance tests - * Fixed req/res proto inheritance - -3.0.0alpha2 / 2012-04-26 -================== - - * Added `make benchmark` back - * Added `res.send()` support for `String` objects - * Added client-side data exposing example - * Added `res.header()` and `req.header()` aliases for BC - * Added `express.createServer()` for BC - * Perf: memoize parsed urls - * Perf: connect 2.2.0 dep - * Changed: make `expressInit()` middleware self-aware - * Fixed: use app.get() for all core settings - * Fixed redis session example - * Fixed session example. Closes #1105 - * Fixed generated express dep. Closes #1078 - -3.0.0alpha1 / 2012-04-15 -================== - - * Added `app.locals.use(callback)` - * Added `app.locals` object - * Added `app.locals(obj)` - * Added `res.locals` object - * Added `res.locals(obj)` - * Added `res.format()` for content-negotiation - * Added `app.engine()` - * Added `res.cookie()` JSON cookie support - * Added "trust proxy" setting - * Added `req.subdomains` - * Added `req.protocol` - * Added `req.secure` - * Added `req.path` - * Added `req.ips` - * Added `req.fresh` - * Added `req.stale` - * Added comma-delmited / array support for `req.accepts()` - * Added debug instrumentation - * Added `res.set(obj)` - * Added `res.set(field, value)` - * Added `res.get(field)` - * Added `app.get(setting)`. Closes #842 - * Added `req.acceptsLanguage()` - * Added `req.acceptsCharset()` - * Added `req.accepted` - * Added `req.acceptedLanguages` - * Added `req.acceptedCharsets` - * Added "json replacer" setting - * Added "json spaces" setting - * Added X-Forwarded-Proto support to `res.redirect()`. Closes #92 - * Added `--less` support to express(1) - * Added `express.response` prototype - * Added `express.request` prototype - * Added `express.application` prototype - * Added `app.path()` - * Added `app.render()` - * Added `res.type()` to replace `res.contentType()` - * Changed: `res.redirect()` to add relative support - * Changed: enable "jsonp callback" by default - * Changed: renamed "case sensitive routes" to "case sensitive routing" - * Rewrite of all tests with mocha - * Removed "root" setting - * Removed `res.redirect('home')` support - * Removed `req.notify()` - * Removed `app.register()` - * Removed `app.redirect()` - * Removed `app.is()` - * Removed `app.helpers()` - * Removed `app.dynamicHelpers()` - * Fixed `res.sendfile()` with non-GET. Closes #723 - * Fixed express(1) public dir for windows. Closes #866 - -2.5.9/ 2012-04-02 -================== - - * Added support for PURGE request method [pbuyle] - * Fixed `express(1)` generated app `app.address()` before `listening` [mmalecki] - -2.5.8 / 2012-02-08 -================== - - * Update mkdirp dep. Closes #991 - -2.5.7 / 2012-02-06 -================== - - * Fixed `app.all` duplicate DELETE requests [mscdex] - -2.5.6 / 2012-01-13 -================== - - * Updated hamljs dev dep. Closes #953 - -2.5.5 / 2012-01-08 -================== - - * Fixed: set `filename` on cached templates [matthewleon] - -2.5.4 / 2012-01-02 -================== - - * Fixed `express(1)` eol on 0.4.x. Closes #947 - -2.5.3 / 2011-12-30 -================== - - * Fixed `req.is()` when a charset is present - -2.5.2 / 2011-12-10 -================== - - * Fixed: express(1) LF -> CRLF for windows - -2.5.1 / 2011-11-17 -================== - - * Changed: updated connect to 1.8.x - * Removed sass.js support from express(1) - -2.5.0 / 2011-10-24 -================== - - * Added ./routes dir for generated app by default - * Added npm install reminder to express(1) app gen - * Added 0.5.x support - * Removed `make test-cov` since it wont work with node 0.5.x - * Fixed express(1) public dir for windows. Closes #866 - -2.4.7 / 2011-10-05 -================== - - * Added mkdirp to express(1). Closes #795 - * Added simple _json-config_ example - * Added shorthand for the parsed request's pathname via `req.path` - * Changed connect dep to 1.7.x to fix npm issue... - * Fixed `res.redirect()` __HEAD__ support. [reported by xerox] - * Fixed `req.flash()`, only escape args - * Fixed absolute path checking on windows. Closes #829 [reported by andrewpmckenzie] - -2.4.6 / 2011-08-22 -================== - - * Fixed multiple param callback regression. Closes #824 [reported by TroyGoode] - -2.4.5 / 2011-08-19 -================== - - * Added support for routes to handle errors. Closes #809 - * Added `app.routes.all()`. Closes #803 - * Added "basepath" setting to work in conjunction with reverse proxies etc. - * Refactored `Route` to use a single array of callbacks - * Added support for multiple callbacks for `app.param()`. Closes #801 -Closes #805 - * Changed: removed .call(self) for route callbacks - * Dependency: `qs >= 0.3.1` - * Fixed `res.redirect()` on windows due to `join()` usage. Closes #808 - -2.4.4 / 2011-08-05 -================== - - * Fixed `res.header()` intention of a set, even when `undefined` - * Fixed `*`, value no longer required - * Fixed `res.send(204)` support. Closes #771 - -2.4.3 / 2011-07-14 -================== - - * Added docs for `status` option special-case. Closes #739 - * Fixed `options.filename`, exposing the view path to template engines - -2.4.2. / 2011-07-06 -================== - - * Revert "removed jsonp stripping" for XSS - -2.4.1 / 2011-07-06 -================== - - * Added `res.json()` JSONP support. Closes #737 - * Added _extending-templates_ example. Closes #730 - * Added "strict routing" setting for trailing slashes - * Added support for multiple envs in `app.configure()` calls. Closes #735 - * Changed: `res.send()` using `res.json()` - * Changed: when cookie `path === null` don't default it - * Changed; default cookie path to "home" setting. Closes #731 - * Removed _pids/logs_ creation from express(1) - -2.4.0 / 2011-06-28 -================== - - * Added chainable `res.status(code)` - * Added `res.json()`, an explicit version of `res.send(obj)` - * Added simple web-service example - -2.3.12 / 2011-06-22 -================== - - * \#express is now on freenode! come join! - * Added `req.get(field, param)` - * Added links to Japanese documentation, thanks @hideyukisaito! - * Added; the `express(1)` generated app outputs the env - * Added `content-negotiation` example - * Dependency: connect >= 1.5.1 < 2.0.0 - * Fixed view layout bug. Closes #720 - * Fixed; ignore body on 304. Closes #701 - -2.3.11 / 2011-06-04 -================== - - * Added `npm test` - * Removed generation of dummy test file from `express(1)` - * Fixed; `express(1)` adds express as a dep - * Fixed; prune on `prepublish` - -2.3.10 / 2011-05-27 -================== - - * Added `req.route`, exposing the current route - * Added _package.json_ generation support to `express(1)` - * Fixed call to `app.param()` function for optional params. Closes #682 - -2.3.9 / 2011-05-25 -================== - - * Fixed bug-ish with `../' in `res.partial()` calls - -2.3.8 / 2011-05-24 -================== - - * Fixed `app.options()` - -2.3.7 / 2011-05-23 -================== - - * Added route `Collection`, ex: `app.get('/user/:id').remove();` - * Added support for `app.param(fn)` to define param logic - * Removed `app.param()` support for callback with return value - * Removed module.parent check from express(1) generated app. Closes #670 - * Refactored router. Closes #639 - -2.3.6 / 2011-05-20 -================== - - * Changed; using devDependencies instead of git submodules - * Fixed redis session example - * Fixed markdown example - * Fixed view caching, should not be enabled in development - -2.3.5 / 2011-05-20 -================== - - * Added export `.view` as alias for `.View` - -2.3.4 / 2011-05-08 -================== - - * Added `./examples/say` - * Fixed `res.sendfile()` bug preventing the transfer of files with spaces - -2.3.3 / 2011-05-03 -================== - - * Added "case sensitive routes" option. - * Changed; split methods supported per rfc [slaskis] - * Fixed route-specific middleware when using the same callback function several times - -2.3.2 / 2011-04-27 -================== - - * Fixed view hints - -2.3.1 / 2011-04-26 -================== - - * Added `app.match()` as `app.match.all()` - * Added `app.lookup()` as `app.lookup.all()` - * Added `app.remove()` for `app.remove.all()` - * Added `app.remove.VERB()` - * Fixed template caching collision issue. Closes #644 - * Moved router over from connect and started refactor - -2.3.0 / 2011-04-25 -================== - - * Added options support to `res.clearCookie()` - * Added `res.helpers()` as alias of `res.locals()` - * Added; json defaults to UTF-8 with `res.send()`. Closes #632. [Daniel * Dependency `connect >= 1.4.0` - * Changed; auto set Content-Type in res.attachement [Aaron Heckmann] - * Renamed "cache views" to "view cache". Closes #628 - * Fixed caching of views when using several apps. Closes #637 - * Fixed gotcha invoking `app.param()` callbacks once per route middleware. -Closes #638 - * Fixed partial lookup precedence. Closes #631 -Shaw] - -2.2.2 / 2011-04-12 -================== - - * Added second callback support for `res.download()` connection errors - * Fixed `filename` option passing to template engine - -2.2.1 / 2011-04-04 -================== - - * Added `layout(path)` helper to change the layout within a view. Closes #610 - * Fixed `partial()` collection object support. - Previously only anything with `.length` would work. - When `.length` is present one must still be aware of holes, - however now `{ collection: {foo: 'bar'}}` is valid, exposes - `keyInCollection` and `keysInCollection`. - - * Performance improved with better view caching - * Removed `request` and `response` locals - * Changed; errorHandler page title is now `Express` instead of `Connect` - -2.2.0 / 2011-03-30 -================== - - * Added `app.lookup.VERB()`, ex `app.lookup.put('/user/:id')`. Closes #606 - * Added `app.match.VERB()`, ex `app.match.put('/user/12')`. Closes #606 - * Added `app.VERB(path)` as alias of `app.lookup.VERB()`. - * Dependency `connect >= 1.2.0` - -2.1.1 / 2011-03-29 -================== - - * Added; expose `err.view` object when failing to locate a view - * Fixed `res.partial()` call `next(err)` when no callback is given [reported by aheckmann] - * Fixed; `res.send(undefined)` responds with 204 [aheckmann] - -2.1.0 / 2011-03-24 -================== - - * Added `/_?` partial lookup support. Closes #447 - * Added `request`, `response`, and `app` local variables - * Added `settings` local variable, containing the app's settings - * Added `req.flash()` exception if `req.session` is not available - * Added `res.send(bool)` support (json response) - * Fixed stylus example for latest version - * Fixed; wrap try/catch around `res.render()` - -2.0.0 / 2011-03-17 -================== - - * Fixed up index view path alternative. - * Changed; `res.locals()` without object returns the locals - -2.0.0rc3 / 2011-03-17 -================== - - * Added `res.locals(obj)` to compliment `res.local(key, val)` - * Added `res.partial()` callback support - * Fixed recursive error reporting issue in `res.render()` - -2.0.0rc2 / 2011-03-17 -================== - - * Changed; `partial()` "locals" are now optional - * Fixed `SlowBuffer` support. Closes #584 [reported by tyrda01] - * Fixed .filename view engine option [reported by drudge] - * Fixed blog example - * Fixed `{req,res}.app` reference when mounting [Ben Weaver] - -2.0.0rc / 2011-03-14 -================== - - * Fixed; expose `HTTPSServer` constructor - * Fixed express(1) default test charset. Closes #579 [reported by secoif] - * Fixed; default charset to utf-8 instead of utf8 for lame IE [reported by NickP] - -2.0.0beta3 / 2011-03-09 -================== - - * Added support for `res.contentType()` literal - The original `res.contentType('.json')`, - `res.contentType('application/json')`, and `res.contentType('json')` - will work now. - * Added `res.render()` status option support back - * Added charset option for `res.render()` - * Added `.charset` support (via connect 1.0.4) - * Added view resolution hints when in development and a lookup fails - * Added layout lookup support relative to the page view. - For example while rendering `./views/user/index.jade` if you create - `./views/user/layout.jade` it will be used in favour of the root layout. - * Fixed `res.redirect()`. RFC states absolute url [reported by unlink] - * Fixed; default `res.send()` string charset to utf8 - * Removed `Partial` constructor (not currently used) - -2.0.0beta2 / 2011-03-07 -================== - - * Added res.render() `.locals` support back to aid in migration process - * Fixed flash example - -2.0.0beta / 2011-03-03 -================== - - * Added HTTPS support - * Added `res.cookie()` maxAge support - * Added `req.header()` _Referrer_ / _Referer_ special-case, either works - * Added mount support for `res.redirect()`, now respects the mount-point - * Added `union()` util, taking place of `merge(clone())` combo - * Added stylus support to express(1) generated app - * Added secret to session middleware used in examples and generated app - * Added `res.local(name, val)` for progressive view locals - * Added default param support to `req.param(name, default)` - * Added `app.disabled()` and `app.enabled()` - * Added `app.register()` support for omitting leading ".", either works - * Added `res.partial()`, using the same interface as `partial()` within a view. Closes #539 - * Added `app.param()` to map route params to async/sync logic - * Added; aliased `app.helpers()` as `app.locals()`. Closes #481 - * Added extname with no leading "." support to `res.contentType()` - * Added `cache views` setting, defaulting to enabled in "production" env - * Added index file partial resolution, eg: partial('user') may try _views/user/index.jade_. - * Added `req.accepts()` support for extensions - * Changed; `res.download()` and `res.sendfile()` now utilize Connect's - static file server `connect.static.send()`. - * Changed; replaced `connect.utils.mime()` with npm _mime_ module - * Changed; allow `req.query` to be pre-defined (via middleware or other parent - * Changed view partial resolution, now relative to parent view - * Changed view engine signature. no longer `engine.render(str, options, callback)`, now `engine.compile(str, options) -> Function`, the returned function accepts `fn(locals)`. - * Fixed `req.param()` bug returning Array.prototype methods. Closes #552 - * Fixed; using `Stream#pipe()` instead of `sys.pump()` in `res.sendfile()` - * Fixed; using _qs_ module instead of _querystring_ - * Fixed; strip unsafe chars from jsonp callbacks - * Removed "stream threshold" setting - -1.0.8 / 2011-03-01 -================== - - * Allow `req.query` to be pre-defined (via middleware or other parent app) - * "connect": ">= 0.5.0 < 1.0.0". Closes #547 - * Removed the long deprecated __EXPRESS_ENV__ support - -1.0.7 / 2011-02-07 -================== - - * Fixed `render()` setting inheritance. - Mounted apps would not inherit "view engine" - -1.0.6 / 2011-02-07 -================== - - * Fixed `view engine` setting bug when period is in dirname - -1.0.5 / 2011-02-05 -================== - - * Added secret to generated app `session()` call - -1.0.4 / 2011-02-05 -================== - - * Added `qs` dependency to _package.json_ - * Fixed namespaced `require()`s for latest connect support - -1.0.3 / 2011-01-13 -================== - - * Remove unsafe characters from JSONP callback names [Ryan Grove] - -1.0.2 / 2011-01-10 -================== - - * Removed nested require, using `connect.router` - -1.0.1 / 2010-12-29 -================== - - * Fixed for middleware stacked via `createServer()` - previously the `foo` middleware passed to `createServer(foo)` - would not have access to Express methods such as `res.send()` - or props like `req.query` etc. - -1.0.0 / 2010-11-16 -================== - - * Added; deduce partial object names from the last segment. - For example by default `partial('forum/post', postObject)` will - give you the _post_ object, providing a meaningful default. - * Added http status code string representation to `res.redirect()` body - * Added; `res.redirect()` supporting _text/plain_ and _text/html_ via __Accept__. - * Added `req.is()` to aid in content negotiation - * Added partial local inheritance [suggested by masylum]. Closes #102 - providing access to parent template locals. - * Added _-s, --session[s]_ flag to express(1) to add session related middleware - * Added _--template_ flag to express(1) to specify the - template engine to use. - * Added _--css_ flag to express(1) to specify the - stylesheet engine to use (or just plain css by default). - * Added `app.all()` support [thanks aheckmann] - * Added partial direct object support. - You may now `partial('user', user)` providing the "user" local, - vs previously `partial('user', { object: user })`. - * Added _route-separation_ example since many people question ways - to do this with CommonJS modules. Also view the _blog_ example for - an alternative. - * Performance; caching view path derived partial object names - * Fixed partial local inheritance precedence. [reported by Nick Poulden] Closes #454 - * Fixed jsonp support; _text/javascript_ as per mailinglist discussion - -1.0.0rc4 / 2010-10-14 -================== - - * Added _NODE_ENV_ support, _EXPRESS_ENV_ is deprecated and will be removed in 1.0.0 - * Added route-middleware support (very helpful, see the [docs](http://expressjs.com/guide.html#Route-Middleware)) - * Added _jsonp callback_ setting to enable/disable jsonp autowrapping [Dav Glass] - * Added callback query check on response.send to autowrap JSON objects for simple webservice implementations [Dav Glass] - * Added `partial()` support for array-like collections. Closes #434 - * Added support for swappable querystring parsers - * Added session usage docs. Closes #443 - * Added dynamic helper caching. Closes #439 [suggested by maritz] - * Added authentication example - * Added basic Range support to `res.sendfile()` (and `res.download()` etc) - * Changed; `express(1)` generated app using 2 spaces instead of 4 - * Default env to "development" again [aheckmann] - * Removed _context_ option is no more, use "scope" - * Fixed; exposing _./support_ libs to examples so they can run without installs - * Fixed mvc example - -1.0.0rc3 / 2010-09-20 -================== - - * Added confirmation for `express(1)` app generation. Closes #391 - * Added extending of flash formatters via `app.flashFormatters` - * Added flash formatter support. Closes #411 - * Added streaming support to `res.sendfile()` using `sys.pump()` when >= "stream threshold" - * Added _stream threshold_ setting for `res.sendfile()` - * Added `res.send()` __HEAD__ support - * Added `res.clearCookie()` - * Added `res.cookie()` - * Added `res.render()` headers option - * Added `res.redirect()` response bodies - * Added `res.render()` status option support. Closes #425 [thanks aheckmann] - * Fixed `res.sendfile()` responding with 403 on malicious path - * Fixed `res.download()` bug; when an error occurs remove _Content-Disposition_ - * Fixed; mounted apps settings now inherit from parent app [aheckmann] - * Fixed; stripping Content-Length / Content-Type when 204 - * Fixed `res.send()` 204. Closes #419 - * Fixed multiple _Set-Cookie_ headers via `res.header()`. Closes #402 - * Fixed bug messing with error handlers when `listenFD()` is called instead of `listen()`. [thanks guillermo] - - -1.0.0rc2 / 2010-08-17 -================== - - * Added `app.register()` for template engine mapping. Closes #390 - * Added `res.render()` callback support as second argument (no options) - * Added callback support to `res.download()` - * Added callback support for `res.sendfile()` - * Added support for middleware access via `express.middlewareName()` vs `connect.middlewareName()` - * Added "partials" setting to docs - * Added default expresso tests to `express(1)` generated app. Closes #384 - * Fixed `res.sendfile()` error handling, defer via `next()` - * Fixed `res.render()` callback when a layout is used [thanks guillermo] - * Fixed; `make install` creating ~/.node_libraries when not present - * Fixed issue preventing error handlers from being defined anywhere. Closes #387 - -1.0.0rc / 2010-07-28 -================== - - * Added mounted hook. Closes #369 - * Added connect dependency to _package.json_ - - * Removed "reload views" setting and support code - development env never caches, production always caches. - - * Removed _param_ in route callbacks, signature is now - simply (req, res, next), previously (req, res, params, next). - Use _req.params_ for path captures, _req.query_ for GET params. - - * Fixed "home" setting - * Fixed middleware/router precedence issue. Closes #366 - * Fixed; _configure()_ callbacks called immediately. Closes #368 - -1.0.0beta2 / 2010-07-23 -================== - - * Added more examples - * Added; exporting `Server` constructor - * Added `Server#helpers()` for view locals - * Added `Server#dynamicHelpers()` for dynamic view locals. Closes #349 - * Added support for absolute view paths - * Added; _home_ setting defaults to `Server#route` for mounted apps. Closes #363 - * Added Guillermo Rauch to the contributor list - * Added support for "as" for non-collection partials. Closes #341 - * Fixed _install.sh_, ensuring _~/.node_libraries_ exists. Closes #362 [thanks jf] - * Fixed `res.render()` exceptions, now passed to `next()` when no callback is given [thanks guillermo] - * Fixed instanceof `Array` checks, now `Array.isArray()` - * Fixed express(1) expansion of public dirs. Closes #348 - * Fixed middleware precedence. Closes #345 - * Fixed view watcher, now async [thanks aheckmann] - -1.0.0beta / 2010-07-15 -================== - - * Re-write - - much faster - - much lighter - - Check [ExpressJS.com](http://expressjs.com) for migration guide and updated docs - -0.14.0 / 2010-06-15 -================== - - * Utilize relative requires - * Added Static bufferSize option [aheckmann] - * Fixed caching of view and partial subdirectories [aheckmann] - * Fixed mime.type() comments now that ".ext" is not supported - * Updated haml submodule - * Updated class submodule - * Removed bin/express - -0.13.0 / 2010-06-01 -================== - - * Added node v0.1.97 compatibility - * Added support for deleting cookies via Request#cookie('key', null) - * Updated haml submodule - * Fixed not-found page, now using using charset utf-8 - * Fixed show-exceptions page, now using using charset utf-8 - * Fixed view support due to fs.readFile Buffers - * Changed; mime.type() no longer accepts ".type" due to node extname() changes - -0.12.0 / 2010-05-22 -================== - - * Added node v0.1.96 compatibility - * Added view `helpers` export which act as additional local variables - * Updated haml submodule - * Changed ETag; removed inode, modified time only - * Fixed LF to CRLF for setting multiple cookies - * Fixed cookie complation; values are now urlencoded - * Fixed cookies parsing; accepts quoted values and url escaped cookies - -0.11.0 / 2010-05-06 -================== - - * Added support for layouts using different engines - - this.render('page.html.haml', { layout: 'super-cool-layout.html.ejs' }) - - this.render('page.html.haml', { layout: 'foo' }) // assumes 'foo.html.haml' - - this.render('page.html.haml', { layout: false }) // no layout - * Updated ext submodule - * Updated haml submodule - * Fixed EJS partial support by passing along the context. Issue #307 - -0.10.1 / 2010-05-03 -================== - - * Fixed binary uploads. - -0.10.0 / 2010-04-30 -================== - - * Added charset support via Request#charset (automatically assigned to 'UTF-8' when respond()'s - encoding is set to 'utf8' or 'utf-8'. - * Added "encoding" option to Request#render(). Closes #299 - * Added "dump exceptions" setting, which is enabled by default. - * Added simple ejs template engine support - * Added error reponse support for text/plain, application/json. Closes #297 - * Added callback function param to Request#error() - * Added Request#sendHead() - * Added Request#stream() - * Added support for Request#respond(304, null) for empty response bodies - * Added ETag support to Request#sendfile() - * Added options to Request#sendfile(), passed to fs.createReadStream() - * Added filename arg to Request#download() - * Performance enhanced due to pre-reversing plugins so that plugins.reverse() is not called on each request - * Performance enhanced by preventing several calls to toLowerCase() in Router#match() - * Changed; Request#sendfile() now streams - * Changed; Renamed Request#halt() to Request#respond(). Closes #289 - * Changed; Using sys.inspect() instead of JSON.encode() for error output - * Changed; run() returns the http.Server instance. Closes #298 - * Changed; Defaulting Server#host to null (INADDR_ANY) - * Changed; Logger "common" format scale of 0.4f - * Removed Logger "request" format - * Fixed; Catching ENOENT in view caching, preventing error when "views/partials" is not found - * Fixed several issues with http client - * Fixed Logger Content-Length output - * Fixed bug preventing Opera from retaining the generated session id. Closes #292 - -0.9.0 / 2010-04-14 -================== - - * Added DSL level error() route support - * Added DSL level notFound() route support - * Added Request#error() - * Added Request#notFound() - * Added Request#render() callback function. Closes #258 - * Added "max upload size" setting - * Added "magic" variables to collection partials (\_\_index\_\_, \_\_length\_\_, \_\_isFirst\_\_, \_\_isLast\_\_). Closes #254 - * Added [haml.js](http://github.com/visionmedia/haml.js) submodule; removed haml-js - * Added callback function support to Request#halt() as 3rd/4th arg - * Added preprocessing of route param wildcards using param(). Closes #251 - * Added view partial support (with collections etc) - * Fixed bug preventing falsey params (such as ?page=0). Closes #286 - * Fixed setting of multiple cookies. Closes #199 - * Changed; view naming convention is now NAME.TYPE.ENGINE (for example page.html.haml) - * Changed; session cookie is now httpOnly - * Changed; Request is no longer global - * Changed; Event is no longer global - * Changed; "sys" module is no longer global - * Changed; moved Request#download to Static plugin where it belongs - * Changed; Request instance created before body parsing. Closes #262 - * Changed; Pre-caching views in memory when "cache view contents" is enabled. Closes #253 - * Changed; Pre-caching view partials in memory when "cache view partials" is enabled - * Updated support to node --version 0.1.90 - * Updated dependencies - * Removed set("session cookie") in favour of use(Session, { cookie: { ... }}) - * Removed utils.mixin(); use Object#mergeDeep() - -0.8.0 / 2010-03-19 -================== - - * Added coffeescript example app. Closes #242 - * Changed; cache api now async friendly. Closes #240 - * Removed deprecated 'express/static' support. Use 'express/plugins/static' - -0.7.6 / 2010-03-19 -================== - - * Added Request#isXHR. Closes #229 - * Added `make install` (for the executable) - * Added `express` executable for setting up simple app templates - * Added "GET /public/*" to Static plugin, defaulting to /public - * Added Static plugin - * Fixed; Request#render() only calls cache.get() once - * Fixed; Namespacing View caches with "view:" - * Fixed; Namespacing Static caches with "static:" - * Fixed; Both example apps now use the Static plugin - * Fixed set("views"). Closes #239 - * Fixed missing space for combined log format - * Deprecated Request#sendfile() and 'express/static' - * Removed Server#running - -0.7.5 / 2010-03-16 -================== - - * Added Request#flash() support without args, now returns all flashes - * Updated ext submodule - -0.7.4 / 2010-03-16 -================== - - * Fixed session reaper - * Changed; class.js replacing js-oo Class implementation (quite a bit faster, no browser cruft) - -0.7.3 / 2010-03-16 -================== - - * Added package.json - * Fixed requiring of haml / sass due to kiwi removal - -0.7.2 / 2010-03-16 -================== - - * Fixed GIT submodules (HAH!) - -0.7.1 / 2010-03-16 -================== - - * Changed; Express now using submodules again until a PM is adopted - * Changed; chat example using millisecond conversions from ext - -0.7.0 / 2010-03-15 -================== - - * Added Request#pass() support (finds the next matching route, or the given path) - * Added Logger plugin (default "common" format replaces CommonLogger) - * Removed Profiler plugin - * Removed CommonLogger plugin - -0.6.0 / 2010-03-11 -================== - - * Added seed.yml for kiwi package management support - * Added HTTP client query string support when method is GET. Closes #205 - - * Added support for arbitrary view engines. - For example "foo.engine.html" will now require('engine'), - the exports from this module are cached after the first require(). - - * Added async plugin support - - * Removed usage of RESTful route funcs as http client - get() etc, use http.get() and friends - - * Removed custom exceptions - -0.5.0 / 2010-03-10 -================== - - * Added ext dependency (library of js extensions) - * Removed extname() / basename() utils. Use path module - * Removed toArray() util. Use arguments.values - * Removed escapeRegexp() util. Use RegExp.escape() - * Removed process.mixin() dependency. Use utils.mixin() - * Removed Collection - * Removed ElementCollection - * Shameless self promotion of ebook "Advanced JavaScript" (http://dev-mag.com) ;) - -0.4.0 / 2010-02-11 -================== - - * Added flash() example to sample upload app - * Added high level restful http client module (express/http) - * Changed; RESTful route functions double as HTTP clients. Closes #69 - * Changed; throwing error when routes are added at runtime - * Changed; defaulting render() context to the current Request. Closes #197 - * Updated haml submodule - -0.3.0 / 2010-02-11 -================== - - * Updated haml / sass submodules. Closes #200 - * Added flash message support. Closes #64 - * Added accepts() now allows multiple args. fixes #117 - * Added support for plugins to halt. Closes #189 - * Added alternate layout support. Closes #119 - * Removed Route#run(). Closes #188 - * Fixed broken specs due to use(Cookie) missing - -0.2.1 / 2010-02-05 -================== - - * Added "plot" format option for Profiler (for gnuplot processing) - * Added request number to Profiler plugin - * Fixed binary encoding for multi-part file uploads, was previously defaulting to UTF8 - * Fixed issue with routes not firing when not files are present. Closes #184 - * Fixed process.Promise -> events.Promise - -0.2.0 / 2010-02-03 -================== - - * Added parseParam() support for name[] etc. (allows for file inputs with "multiple" attr) Closes #180 - * Added Both Cache and Session option "reapInterval" may be "reapEvery". Closes #174 - * Added expiration support to cache api with reaper. Closes #133 - * Added cache Store.Memory#reap() - * Added Cache; cache api now uses first class Cache instances - * Added abstract session Store. Closes #172 - * Changed; cache Memory.Store#get() utilizing Collection - * Renamed MemoryStore -> Store.Memory - * Fixed use() of the same plugin several time will always use latest options. Closes #176 - -0.1.0 / 2010-02-03 -================== - - * Changed; Hooks (before / after) pass request as arg as well as evaluated in their context - * Updated node support to 0.1.27 Closes #169 - * Updated dirname(__filename) -> __dirname - * Updated libxmljs support to v0.2.0 - * Added session support with memory store / reaping - * Added quick uid() helper - * Added multi-part upload support - * Added Sass.js support / submodule - * Added production env caching view contents and static files - * Added static file caching. Closes #136 - * Added cache plugin with memory stores - * Added support to StaticFile so that it works with non-textual files. - * Removed dirname() helper - * Removed several globals (now their modules must be required) - -0.0.2 / 2010-01-10 -================== - - * Added view benchmarks; currently haml vs ejs - * Added Request#attachment() specs. Closes #116 - * Added use of node's parseQuery() util. Closes #123 - * Added `make init` for submodules - * Updated Haml - * Updated sample chat app to show messages on load - * Updated libxmljs parseString -> parseHtmlString - * Fixed `make init` to work with older versions of git - * Fixed specs can now run independant specs for those who cant build deps. Closes #127 - * Fixed issues introduced by the node url module changes. Closes 126. - * Fixed two assertions failing due to Collection#keys() returning strings - * Fixed faulty Collection#toArray() spec due to keys() returning strings - * Fixed `make test` now builds libxmljs.node before testing - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/express/LICENSE b/node_modules/express/LICENSE deleted file mode 100644 index d23e93ce..00000000 --- a/node_modules/express/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2009-2013 TJ Holowaychuk - -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/express/Makefile b/node_modules/express/Makefile deleted file mode 100644 index a1f33a70..00000000 --- a/node_modules/express/Makefile +++ /dev/null @@ -1,34 +0,0 @@ - -MOCHA_OPTS= --check-leaks -REPORTER = dot - -check: test - -test: test-unit test-acceptance - -test-unit: - @NODE_ENV=test ./node_modules/.bin/mocha \ - --reporter $(REPORTER) \ - --globals setImmediate,clearImmediate \ - $(MOCHA_OPTS) - -test-acceptance: - @NODE_ENV=test ./node_modules/.bin/mocha \ - --reporter $(REPORTER) \ - --bail \ - test/acceptance/*.js - -test-cov: lib-cov - @EXPRESS_COV=1 $(MAKE) test REPORTER=html-cov > coverage.html - -lib-cov: - @jscoverage lib lib-cov - -bench: - @$(MAKE) -C benchmarks - -clean: - rm -f coverage.html - rm -fr lib-cov - -.PHONY: test test-unit test-acceptance bench clean diff --git a/node_modules/express/Readme.md b/node_modules/express/Readme.md deleted file mode 100644 index e1e3f7e9..00000000 --- a/node_modules/express/Readme.md +++ /dev/null @@ -1,126 +0,0 @@ -[![express logo](http://f.cl.ly/items/0V2S1n0K1i3y1c122g04/Screen%20Shot%202012-04-11%20at%209.59.42%20AM.png)](http://expressjs.com/) - - Fast, unopinionated, minimalist web framework for [node](http://nodejs.org). - - [![Build Status](https://secure.travis-ci.org/visionmedia/express.png)](http://travis-ci.org/visionmedia/express) [![Gittip](http://img.shields.io/gittip/visionmedia.png)](https://www.gittip.com/visionmedia/) - -```js -var express = require('express'); -var app = express(); - -app.get('/', function(req, res){ - res.send('Hello World'); -}); - -app.listen(3000); -``` - -## Installation - - $ npm install -g express - -## Quick Start - - The quickest way to get started with express is to utilize the executable `express(1)` to generate an application as shown below: - - Create the app: - - $ npm install -g express - $ express /tmp/foo && cd /tmp/foo - - Install dependencies: - - $ npm install - - Start the server: - - $ node app - -## Features - - * Built on [Connect](http://github.com/senchalabs/connect) - * Robust routing - * HTTP helpers (redirection, caching, etc) - * View system supporting 14+ template engines - * Content negotiation - * Focus on high performance - * Environment based configuration - * Executable for generating applications quickly - * High test coverage - -## Philosophy - - The Express philosophy is to provide small, robust tooling for HTTP servers, making - it a great solution for single page applications, web sites, hybrids, or public - HTTP APIs. - - Built on Connect, you can use _only_ what you need, and nothing more. Applications - can be as big or as small as you like, even a single file. Express does - not force you to use any specific ORM or template engine. With support for over - 14 template engines via [Consolidate.js](http://github.com/visionmedia/consolidate.js), - you can quickly craft your perfect framework. - -## More Information - - * [Website and Documentation](http://expressjs.com/) stored at [visionmedia/expressjs.com](https://github.com/visionmedia/expressjs.com) - * Join #express on freenode - * [Google Group](http://groups.google.com/group/express-js) for discussion - * Follow [tjholowaychuk](http://twitter.com/tjholowaychuk) on twitter for updates - * Visit the [Wiki](http://github.com/visionmedia/express/wiki) - * [Русскоязычная документация](http://jsman.ru/express/) - * Run express examples [online](https://runnable.com/express) - -## Viewing Examples - -Clone the Express repo, then install the dev dependencies to install all the example / test suite dependencies: - - $ git clone git://github.com/visionmedia/express.git --depth 1 - $ cd express - $ npm install - -Then run whichever tests you want: - - $ node examples/content-negotiation - -You can also view live examples here: - - - -## Running Tests - -To run the test suite, first invoke the following command within the repo, installing the development dependencies: - - $ npm install - -Then run the tests: - - $ make test - -## Contributors - - https://github.com/visionmedia/express/graphs/contributors - -## License - -(The MIT License) - -Copyright (c) 2009-2012 TJ Holowaychuk <tj@vision-media.ca> - -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/express/benchmarks/Makefile b/node_modules/express/benchmarks/Makefile deleted file mode 100644 index baf0d6fc..00000000 --- a/node_modules/express/benchmarks/Makefile +++ /dev/null @@ -1,13 +0,0 @@ - -all: - @./run 1 middleware - @./run 5 middleware - @./run 10 middleware - @./run 15 middleware - @./run 20 middleware - @./run 30 middleware - @./run 50 middleware - @./run 100 middleware - @echo - -.PHONY: all diff --git a/node_modules/express/benchmarks/middleware.js b/node_modules/express/benchmarks/middleware.js deleted file mode 100644 index 3aa7a8b4..00000000 --- a/node_modules/express/benchmarks/middleware.js +++ /dev/null @@ -1,23 +0,0 @@ - -var http = require('http'); -var express = require('..'); -var app = express(); - -// number of middleware - -var n = parseInt(process.env.MW || '1', 10); -console.log(' %s middleware', n); - -while (n--) { - app.use(function(req, res, next){ - next(); - }); -} - -var body = new Buffer('Hello World'); - -app.use(function(req, res, next){ - res.send(body); -}); - -app.listen(3333); diff --git a/node_modules/express/benchmarks/run b/node_modules/express/benchmarks/run deleted file mode 100755 index 93b5bc52..00000000 --- a/node_modules/express/benchmarks/run +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -echo -MW=$1 node $2 & -pid=$! - -sleep 2 - -wrk 'http://localhost:3333/?foo[bar]=baz' \ - -d 3 \ - -c 50 \ - -t 8 \ - | grep 'Requests/sec' \ - | awk '{ print " " $2 }' - -kill $pid diff --git a/node_modules/express/bin/express b/node_modules/express/bin/express deleted file mode 100755 index cb979288..00000000 --- a/node_modules/express/bin/express +++ /dev/null @@ -1,423 +0,0 @@ -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('commander') - , mkdirp = require('mkdirp') - , pkg = require('../package.json') - , version = pkg.version - , os = require('os') - , fs = require('fs'); - -// CLI - -program - .version(version) - .usage('[options] [dir]') - .option('-s, --sessions', 'add session support') - .option('-e, --ejs', 'add ejs engine support (defaults to jade)') - .option('-J, --jshtml', 'add jshtml engine support (defaults to jade)') - .option('-H, --hogan', 'add hogan.js engine support') - .option('-c, --css ', 'add stylesheet support (less|stylus) (defaults to plain css)') - .option('-f, --force', 'force on non-empty directory') - .parse(process.argv); - -// Path - -var path = program.args.shift() || '.'; - -// end-of-line code - -var eol = os.EOL - -// Template engine - -program.template = 'jade'; -if (program.ejs) program.template = 'ejs'; -if (program.jshtml) program.template = 'jshtml'; -if (program.hogan) program.template = 'hjs'; - -/** - * Routes index template. - */ - -var index = [ - '' - , '/*' - , ' * GET home page.' - , ' */' - , '' - , 'exports.index = function(req, res){' - , ' res.render(\'index\', { title: \'Express\' });' - , '};' -].join(eol); - -/** - * Routes users template. - */ - -var users = [ - '' - , '/*' - , ' * GET users listing.' - , ' */' - , '' - , 'exports.list = function(req, res){' - , ' res.send("respond with a resource");' - , '};' -].join(eol); - -/** - * Jade layout template. - */ - -var jadeLayout = [ - 'doctype html' - , 'html' - , ' head' - , ' title= title' - , ' link(rel=\'stylesheet\', href=\'/stylesheets/style.css\')' - , ' body' - , ' block content' -].join(eol); - -/** - * Jade index template. - */ - -var jadeIndex = [ - 'extends layout' - , '' - , 'block content' - , ' h1= title' - , ' p Welcome to #{title}' -].join(eol); - -/** - * EJS index template. - */ - -var ejsIndex = [ - '' - , '' - , ' ' - , ' <%= title %>' - , ' ' - , ' ' - , ' ' - , '

<%= title %>

' - , '

Welcome to <%= title %>

' - , ' ' - , '' -].join(eol); - -/** - * JSHTML layout template. - */ - -var jshtmlLayout = [ - '' - , '' - , ' ' - , ' @write(title) ' - , ' ' - , ' ' - , ' ' - , ' @write(body)' - , ' ' - , '' -].join(eol); - -/** - * JSHTML index template. - */ - -var jshtmlIndex = [ - '

@write(title)

' - , '

Welcome to @write(title)

' -].join(eol); - -/** - * Hogan.js index template. - */ -var hoganIndex = [ - '' - , '' - , ' ' - , ' {{ title }}' - , ' ' - , ' ' - , ' ' - , '

{{ title }}

' - , '

Welcome to {{ title }}

' - , ' ' - , '' -].join(eol); - -/** - * Default css template. - */ - -var css = [ - 'body {' - , ' padding: 50px;' - , ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;' - , '}' - , '' - , 'a {' - , ' color: #00B7FF;' - , '}' -].join(eol); - -/** - * Default less template. - */ - -var less = [ - 'body {' - , ' padding: 50px;' - , ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;' - , '}' - , '' - , 'a {' - , ' color: #00B7FF;' - , '}' -].join(eol); - -/** - * Default stylus template. - */ - -var stylus = [ - 'body' - , ' padding: 50px' - , ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif' - , 'a' - , ' color: #00B7FF' -].join(eol); - -/** - * App template. - */ - -var app = [ - '' - , '/**' - , ' * Module dependencies.' - , ' */' - , '' - , 'var express = require(\'express\');' - , 'var routes = require(\'./routes\');' - , 'var user = require(\'./routes/user\');' - , 'var http = require(\'http\');' - , 'var path = require(\'path\');' - , '' - , 'var app = express();' - , '' - , '// all environments' - , 'app.set(\'port\', process.env.PORT || 3000);' - , 'app.set(\'views\', path.join(__dirname, \'views\'));' - , 'app.set(\'view engine\', \':TEMPLATE\');' - , 'app.use(express.favicon());' - , 'app.use(express.logger(\'dev\'));' - , 'app.use(express.json());' - , 'app.use(express.urlencoded());' - , 'app.use(express.methodOverride());{sess}' - , 'app.use(app.router);{css}' - , 'app.use(express.static(path.join(__dirname, \'public\')));' - , '' - , '// development only' - , 'if (\'development\' == app.get(\'env\')) {' - , ' app.use(express.errorHandler());' - , '}' - , '' - , 'app.get(\'/\', routes.index);' - , 'app.get(\'/users\', user.list);' - , '' - , 'http.createServer(app).listen(app.get(\'port\'), function(){' - , ' console.log(\'Express server listening on port \' + app.get(\'port\'));' - , '});' - , '' -].join(eol); - -// Generate application - -(function createApplication(path) { - emptyDirectory(path, function(empty){ - if (empty || program.force) { - createApplicationAt(path); - } else { - program.confirm('destination is not empty, continue? ', function(ok){ - if (ok) { - process.stdin.destroy(); - createApplicationAt(path); - } else { - abort('aborting'); - } - }); - } - }); -})(path); - -/** - * Create application at the given directory `path`. - * - * @param {String} path - */ - -function createApplicationAt(path) { - console.log(); - process.on('exit', function(){ - console.log(); - console.log(' install dependencies:'); - console.log(' $ cd %s && npm install', path); - console.log(); - console.log(' run the app:'); - console.log(' $ node app'); - console.log(); - }); - - mkdir(path, function(){ - mkdir(path + '/public'); - mkdir(path + '/public/javascripts'); - mkdir(path + '/public/images'); - mkdir(path + '/public/stylesheets', function(){ - switch (program.css) { - case 'less': - write(path + '/public/stylesheets/style.less', less); - break; - case 'stylus': - write(path + '/public/stylesheets/style.styl', stylus); - break; - default: - write(path + '/public/stylesheets/style.css', css); - } - }); - - mkdir(path + '/routes', function(){ - write(path + '/routes/index.js', index); - write(path + '/routes/user.js', users); - }); - - mkdir(path + '/views', function(){ - switch (program.template) { - case 'ejs': - write(path + '/views/index.ejs', ejsIndex); - break; - case 'jade': - write(path + '/views/layout.jade', jadeLayout); - write(path + '/views/index.jade', jadeIndex); - break; - case 'jshtml': - write(path + '/views/layout.jshtml', jshtmlLayout); - write(path + '/views/index.jshtml', jshtmlIndex); - break; - case 'hjs': - write(path + '/views/index.hjs', hoganIndex); - break; - - } - }); - - // CSS Engine support - switch (program.css) { - case 'less': - app = app.replace('{css}', eol + 'app.use(require(\'less-middleware\')({ src: path.join(__dirname, \'public\') }));'); - break; - case 'stylus': - app = app.replace('{css}', eol + 'app.use(require(\'stylus\').middleware(path.join(__dirname, \'public\')));'); - break; - default: - app = app.replace('{css}', ''); - } - - // Session support - app = app.replace('{sess}', program.sessions - ? eol + 'app.use(express.cookieParser(\'your secret here\'));' + eol + 'app.use(express.session());' - : ''); - - // Template support - app = app.replace(':TEMPLATE', program.template); - - // package.json - var pkg = { - name: 'application-name' - , version: '0.0.1' - , private: true - , scripts: { start: 'node app.js' } - , dependencies: { - express: version - } - } - - if (program.template) pkg.dependencies[program.template] = '*'; - - // CSS Engine support - switch (program.css) { - case 'less': - pkg.dependencies['less-middleware'] = '*'; - break; - default: - if (program.css) { - pkg.dependencies[program.css] = '*'; - } - } - - write(path + '/package.json', JSON.stringify(pkg, null, 2)); - write(path + '/app.js', app); - }); -} - -/** - * Check if the given directory `path` is empty. - * - * @param {String} path - * @param {Function} fn - */ - -function emptyDirectory(path, fn) { - fs.readdir(path, function(err, files){ - if (err && 'ENOENT' != err.code) throw err; - fn(!files || !files.length); - }); -} - -/** - * echo str > path. - * - * @param {String} path - * @param {String} str - */ - -function write(path, str) { - fs.writeFile(path, str); - console.log(' \x1b[36mcreate\x1b[0m : ' + path); -} - -/** - * Mkdir -p. - * - * @param {String} path - * @param {Function} fn - */ - -function mkdir(path, fn) { - mkdirp(path, 0755, function(err){ - if (err) throw err; - console.log(' \033[36mcreate\033[0m : ' + path); - fn && fn(); - }); -} - -/** - * Exit with the given `str`. - * - * @param {String} str - */ - -function abort(str) { - console.error(str); - process.exit(1); -} diff --git a/node_modules/express/index.js b/node_modules/express/index.js deleted file mode 100644 index bfe99345..00000000 --- a/node_modules/express/index.js +++ /dev/null @@ -1,4 +0,0 @@ - -module.exports = process.env.EXPRESS_COV - ? require('./lib-cov/express') - : require('./lib/express'); \ No newline at end of file diff --git a/node_modules/express/lib/application.js b/node_modules/express/lib/application.js deleted file mode 100644 index 865e1e02..00000000 --- a/node_modules/express/lib/application.js +++ /dev/null @@ -1,534 +0,0 @@ -/** - * Module dependencies. - */ - -var connect = require('connect') - , Router = require('./router') - , methods = require('methods') - , middleware = require('./middleware') - , debug = require('debug')('express:application') - , locals = require('./utils').locals - , View = require('./view') - , utils = connect.utils - , http = require('http'); - -/** - * Application prototype. - */ - -var app = exports = module.exports = {}; - -/** - * Initialize the server. - * - * - setup default configuration - * - setup default middleware - * - setup route reflection methods - * - * @api private - */ - -app.init = function(){ - this.cache = {}; - this.settings = {}; - this.engines = {}; - this.defaultConfiguration(); -}; - -/** - * Initialize application configuration. - * - * @api private - */ - -app.defaultConfiguration = function(){ - // default settings - this.enable('x-powered-by'); - this.enable('etag'); - this.set('env', process.env.NODE_ENV || 'development'); - this.set('subdomain offset', 2); - debug('booting in %s mode', this.get('env')); - - // implicit middleware - this.use(connect.query()); - this.use(middleware.init(this)); - - // inherit protos - this.on('mount', function(parent){ - this.request.__proto__ = parent.request; - this.response.__proto__ = parent.response; - this.engines.__proto__ = parent.engines; - this.settings.__proto__ = parent.settings; - }); - - // router - this._router = new Router(this); - this.routes = this._router.map; - this.__defineGetter__('router', function(){ - this._usedRouter = true; - this._router.caseSensitive = this.enabled('case sensitive routing'); - this._router.strict = this.enabled('strict routing'); - return this._router.middleware; - }); - - // setup locals - this.locals = locals(this); - - // default locals - this.locals.settings = this.settings; - - // default configuration - this.set('view', View); - this.set('views', process.cwd() + '/views'); - this.set('jsonp callback name', 'callback'); - - this.configure('development', function(){ - this.set('json spaces', 2); - }); - - this.configure('production', function(){ - this.enable('view cache'); - }); -}; - -/** - * Proxy `connect#use()` to apply settings to - * mounted applications. - * - * @param {String|Function|Server} route - * @param {Function|Server} fn - * @return {app} for chaining - * @api public - */ - -app.use = function(route, fn){ - var app; - - // default route to '/' - if ('string' != typeof route) fn = route, route = '/'; - - // express app - if (fn.handle && fn.set) app = fn; - - // restore .app property on req and res - if (app) { - app.route = route; - fn = function(req, res, next) { - var orig = req.app; - app.handle(req, res, function(err){ - req.__proto__ = orig.request; - res.__proto__ = orig.response; - next(err); - }); - }; - } - - connect.proto.use.call(this, route, fn); - - // mounted an app - if (app) { - app.parent = this; - app.emit('mount', this); - } - - return this; -}; - -/** - * Register the given template engine callback `fn` - * as `ext`. - * - * By default will `require()` the engine based on the - * file extension. For example if you try to render - * a "foo.jade" file Express will invoke the following internally: - * - * app.engine('jade', require('jade').__express); - * - * For engines that do not provide `.__express` out of the box, - * or if you wish to "map" a different extension to the template engine - * you may use this method. For example mapping the EJS template engine to - * ".html" files: - * - * app.engine('html', require('ejs').renderFile); - * - * In this case EJS provides a `.renderFile()` method with - * the same signature that Express expects: `(path, options, callback)`, - * though note that it aliases this method as `ejs.__express` internally - * so if you're using ".ejs" extensions you dont need to do anything. - * - * Some template engines do not follow this convention, the - * [Consolidate.js](https://github.com/visionmedia/consolidate.js) - * library was created to map all of node's popular template - * engines to follow this convention, thus allowing them to - * work seamlessly within Express. - * - * @param {String} ext - * @param {Function} fn - * @return {app} for chaining - * @api public - */ - -app.engine = function(ext, fn){ - if ('function' != typeof fn) throw new Error('callback function required'); - if ('.' != ext[0]) ext = '.' + ext; - this.engines[ext] = fn; - return this; -}; - -/** - * Map the given param placeholder `name`(s) to the given callback(s). - * - * Parameter mapping is used to provide pre-conditions to routes - * which use normalized placeholders. For example a _:user_id_ parameter - * could automatically load a user's information from the database without - * any additional code, - * - * The callback uses the same signature as middleware, the only difference - * being that the value of the placeholder is passed, in this case the _id_ - * of the user. Once the `next()` function is invoked, just like middleware - * it will continue on to execute the route, or subsequent parameter functions. - * - * app.param('user_id', function(req, res, next, id){ - * User.find(id, function(err, user){ - * if (err) { - * next(err); - * } else if (user) { - * req.user = user; - * next(); - * } else { - * next(new Error('failed to load user')); - * } - * }); - * }); - * - * @param {String|Array} name - * @param {Function} fn - * @return {app} for chaining - * @api public - */ - -app.param = function(name, fn){ - var self = this - , fns = [].slice.call(arguments, 1); - - // array - if (Array.isArray(name)) { - name.forEach(function(name){ - fns.forEach(function(fn){ - self.param(name, fn); - }); - }); - // param logic - } else if ('function' == typeof name) { - this._router.param(name); - // single - } else { - if (':' == name[0]) name = name.substr(1); - fns.forEach(function(fn){ - self._router.param(name, fn); - }); - } - - return this; -}; - -/** - * Assign `setting` to `val`, or return `setting`'s value. - * - * app.set('foo', 'bar'); - * app.get('foo'); - * // => "bar" - * - * Mounted servers inherit their parent server's settings. - * - * @param {String} setting - * @param {String} val - * @return {Server} for chaining - * @api public - */ - -app.set = function(setting, val){ - if (1 == arguments.length) { - return this.settings[setting]; - } else { - this.settings[setting] = val; - return this; - } -}; - -/** - * Return the app's absolute pathname - * based on the parent(s) that have - * mounted it. - * - * For example if the application was - * mounted as "/admin", which itself - * was mounted as "/blog" then the - * return value would be "/blog/admin". - * - * @return {String} - * @api private - */ - -app.path = function(){ - return this.parent - ? this.parent.path() + this.route - : ''; -}; - -/** - * Check if `setting` is enabled (truthy). - * - * app.enabled('foo') - * // => false - * - * app.enable('foo') - * app.enabled('foo') - * // => true - * - * @param {String} setting - * @return {Boolean} - * @api public - */ - -app.enabled = function(setting){ - return !!this.set(setting); -}; - -/** - * Check if `setting` is disabled. - * - * app.disabled('foo') - * // => true - * - * app.enable('foo') - * app.disabled('foo') - * // => false - * - * @param {String} setting - * @return {Boolean} - * @api public - */ - -app.disabled = function(setting){ - return !this.set(setting); -}; - -/** - * Enable `setting`. - * - * @param {String} setting - * @return {app} for chaining - * @api public - */ - -app.enable = function(setting){ - return this.set(setting, true); -}; - -/** - * Disable `setting`. - * - * @param {String} setting - * @return {app} for chaining - * @api public - */ - -app.disable = function(setting){ - return this.set(setting, false); -}; - -/** - * Configure callback for zero or more envs, - * when no `env` is specified that callback will - * be invoked for all environments. Any combination - * can be used multiple times, in any order desired. - * - * Examples: - * - * app.configure(function(){ - * // executed for all envs - * }); - * - * app.configure('stage', function(){ - * // executed staging env - * }); - * - * app.configure('stage', 'production', function(){ - * // executed for stage and production - * }); - * - * Note: - * - * These callbacks are invoked immediately, and - * are effectively sugar for the following: - * - * var env = process.env.NODE_ENV || 'development'; - * - * switch (env) { - * case 'development': - * ... - * break; - * case 'stage': - * ... - * break; - * case 'production': - * ... - * break; - * } - * - * @param {String} env... - * @param {Function} fn - * @return {app} for chaining - * @api public - */ - -app.configure = function(env, fn){ - var envs = 'all' - , args = [].slice.call(arguments); - fn = args.pop(); - if (args.length) envs = args; - if ('all' == envs || ~envs.indexOf(this.settings.env)) fn.call(this); - return this; -}; - -/** - * Delegate `.VERB(...)` calls to `router.VERB(...)`. - */ - -methods.forEach(function(method){ - app[method] = function(path){ - if ('get' == method && 1 == arguments.length) return this.set(path); - - // deprecated - if (Array.isArray(path)) { - console.trace('passing an array to app.VERB() is deprecated and will be removed in 4.0'); - } - - // if no router attached yet, attach the router - if (!this._usedRouter) this.use(this.router); - - // setup route - this._router[method].apply(this._router, arguments); - return this; - }; -}); - -/** - * Special-cased "all" method, applying the given route `path`, - * middleware, and callback to _every_ HTTP method. - * - * @param {String} path - * @param {Function} ... - * @return {app} for chaining - * @api public - */ - -app.all = function(path){ - var args = arguments; - methods.forEach(function(method){ - app[method].apply(this, args); - }, this); - return this; -}; - -// del -> delete alias - -app.del = app.delete; - -/** - * Render the given view `name` name with `options` - * and a callback accepting an error and the - * rendered template string. - * - * Example: - * - * app.render('email', { name: 'Tobi' }, function(err, html){ - * // ... - * }) - * - * @param {String} name - * @param {String|Function} options or fn - * @param {Function} fn - * @api public - */ - -app.render = function(name, options, fn){ - var opts = {} - , cache = this.cache - , engines = this.engines - , view; - - // support callback function as second arg - if ('function' == typeof options) { - fn = options, options = {}; - } - - // merge app.locals - utils.merge(opts, this.locals); - - // merge options._locals - if (options._locals) utils.merge(opts, options._locals); - - // merge options - utils.merge(opts, options); - - // set .cache unless explicitly provided - opts.cache = null == opts.cache - ? this.enabled('view cache') - : opts.cache; - - // primed cache - if (opts.cache) view = cache[name]; - - // view - if (!view) { - view = new (this.get('view'))(name, { - defaultEngine: this.get('view engine'), - root: this.get('views'), - engines: engines - }); - - if (!view.path) { - var err = new Error('Failed to lookup view "' + name + '" in views directory "' + view.root + '"'); - err.view = view; - return fn(err); - } - - // prime the cache - if (opts.cache) cache[name] = view; - } - - // render - try { - view.render(opts, fn); - } catch (err) { - fn(err); - } -}; - -/** - * Listen for connections. - * - * A node `http.Server` is returned, with this - * application (which is a `Function`) as its - * callback. If you wish to create both an HTTP - * and HTTPS server you may do so with the "http" - * and "https" modules as shown here: - * - * var http = require('http') - * , https = require('https') - * , express = require('express') - * , app = express(); - * - * http.createServer(app).listen(80); - * https.createServer({ ... }, app).listen(443); - * - * @return {http.Server} - * @api public - */ - -app.listen = function(){ - var server = http.createServer(this); - return server.listen.apply(server, arguments); -}; diff --git a/node_modules/express/lib/express.js b/node_modules/express/lib/express.js deleted file mode 100644 index 4f61cdbd..00000000 --- a/node_modules/express/lib/express.js +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Module dependencies. - */ - -var merge = require('merge-descriptors'); -var connect = require('connect') - , proto = require('./application') - , Route = require('./router/route') - , Router = require('./router') - , req = require('./request') - , res = require('./response') - , utils = connect.utils; - -/** - * Expose `createApplication()`. - */ - -exports = module.exports = createApplication; - -/** - * Expose mime. - */ - -exports.mime = connect.mime; - -/** - * Create an express application. - * - * @return {Function} - * @api public - */ - -function createApplication() { - var app = connect(); - utils.merge(app, proto); - app.request = { __proto__: req, app: app }; - app.response = { __proto__: res, app: app }; - app.init(); - return app; -} - -/** - * Expose connect.middleware as express.* - * for example `express.logger` etc. - */ - -merge(exports, connect.middleware); - -/** - * Error on createServer(). - */ - -exports.createServer = function(){ - console.warn('Warning: express.createServer() is deprecated, express'); - console.warn('applications no longer inherit from http.Server,'); - console.warn('please use:'); - console.warn(''); - console.warn(' var express = require("express");'); - console.warn(' var app = express();'); - console.warn(''); - return createApplication(); -}; - -/** - * Expose the prototypes. - */ - -exports.application = proto; -exports.request = req; -exports.response = res; - -/** - * Expose constructors. - */ - -exports.Route = Route; -exports.Router = Router; - -// Error handler title - -exports.errorHandler.title = 'Express'; - diff --git a/node_modules/express/lib/middleware.js b/node_modules/express/lib/middleware.js deleted file mode 100644 index e07dd4cd..00000000 --- a/node_modules/express/lib/middleware.js +++ /dev/null @@ -1,32 +0,0 @@ - -/** - * Module dependencies. - */ - -var utils = require('./utils'); - -/** - * Initialization middleware, exposing the - * request and response to eachother, as well - * as defaulting the X-Powered-By header field. - * - * @param {Function} app - * @return {Function} - * @api private - */ - -exports.init = function(app){ - return function expressInit(req, res, next){ - if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express'); - req.res = res; - res.req = req; - req.next = next; - - req.__proto__ = app.request; - res.__proto__ = app.response; - - res.locals = res.locals || utils.locals(res); - - next(); - } -}; diff --git a/node_modules/express/lib/request.js b/node_modules/express/lib/request.js deleted file mode 100644 index 3d41617e..00000000 --- a/node_modules/express/lib/request.js +++ /dev/null @@ -1,529 +0,0 @@ - -/** - * Module dependencies. - */ - -var http = require('http') - , utils = require('./utils') - , connect = require('connect') - , fresh = require('fresh') - , parseRange = require('range-parser') - , parse = connect.utils.parseUrl - , mime = connect.mime; - -/** - * Request prototype. - */ - -var req = exports = module.exports = { - __proto__: http.IncomingMessage.prototype -}; - -/** - * Return request header. - * - * The `Referrer` header field is special-cased, - * both `Referrer` and `Referer` are interchangeable. - * - * Examples: - * - * req.get('Content-Type'); - * // => "text/plain" - * - * req.get('content-type'); - * // => "text/plain" - * - * req.get('Something'); - * // => undefined - * - * Aliased as `req.header()`. - * - * @param {String} name - * @return {String} - * @api public - */ - -req.get = -req.header = function(name){ - switch (name = name.toLowerCase()) { - case 'referer': - case 'referrer': - return this.headers.referrer - || this.headers.referer; - default: - return this.headers[name]; - } -}; - -/** - * Check if the given `type(s)` is acceptable, returning - * the best match when true, otherwise `undefined`, in which - * case you should respond with 406 "Not Acceptable". - * - * The `type` value may be a single mime type string - * such as "application/json", the extension name - * such as "json", a comma-delimted list such as "json, html, text/plain", - * an argument list such as `"json", "html", "text/plain"`, - * or an array `["json", "html", "text/plain"]`. When a list - * or array is given the _best_ match, if any is returned. - * - * Examples: - * - * // Accept: text/html - * req.accepts('html'); - * // => "html" - * - * // Accept: text/*, application/json - * req.accepts('html'); - * // => "html" - * req.accepts('text/html'); - * // => "text/html" - * req.accepts('json, text'); - * // => "json" - * req.accepts('application/json'); - * // => "application/json" - * - * // Accept: text/*, application/json - * req.accepts('image/png'); - * req.accepts('png'); - * // => undefined - * - * // Accept: text/*;q=.5, application/json - * req.accepts(['html', 'json']); - * req.accepts('html', 'json'); - * req.accepts('html, json'); - * // => "json" - * - * @param {String|Array} type(s) - * @return {String} - * @api public - */ - -req.accepts = function(type){ - var args = arguments.length > 1 ? [].slice.apply(arguments) : type; - return utils.accepts(args, this.get('Accept')); -}; - -/** - * Check if the given `encoding` is accepted. - * - * @param {String} encoding - * @return {Boolean} - * @api public - */ - -req.acceptsEncoding = function(encoding){ - return !! ~this.acceptedEncodings.indexOf(encoding); -}; - -/** - * Check if the given `charset` is acceptable, - * otherwise you should respond with 406 "Not Acceptable". - * - * @param {String} charset - * @return {Boolean} - * @api public - */ - -req.acceptsCharset = function(charset){ - var accepted = this.acceptedCharsets; - return accepted.length - ? !! ~accepted.indexOf(charset) - : true; -}; - -/** - * Check if the given `lang` is acceptable, - * otherwise you should respond with 406 "Not Acceptable". - * - * @param {String} lang - * @return {Boolean} - * @api public - */ - -req.acceptsLanguage = function(lang){ - var accepted = this.acceptedLanguages; - return accepted.length - ? !! ~accepted.indexOf(lang) - : true; -}; - -/** - * Parse Range header field, - * capping to the given `size`. - * - * Unspecified ranges such as "0-" require - * knowledge of your resource length. In - * the case of a byte range this is of course - * the total number of bytes. If the Range - * header field is not given `null` is returned, - * `-1` when unsatisfiable, `-2` when syntactically invalid. - * - * NOTE: remember that ranges are inclusive, so - * for example "Range: users=0-3" should respond - * with 4 users when available, not 3. - * - * @param {Number} size - * @return {Array} - * @api public - */ - -req.range = function(size){ - var range = this.get('Range'); - if (!range) return; - return parseRange(size, range); -}; - -/** - * Return an array of encodings. - * - * Examples: - * - * ['gzip', 'deflate'] - * - * @return {Array} - * @api public - */ - -req.__defineGetter__('acceptedEncodings', function(){ - var accept = this.get('Accept-Encoding'); - return accept - ? accept.trim().split(/ *, */) - : []; -}); - -/** - * Return an array of Accepted media types - * ordered from highest quality to lowest. - * - * Examples: - * - * [ { value: 'application/json', - * quality: 1, - * type: 'application', - * subtype: 'json' }, - * { value: 'text/html', - * quality: 0.5, - * type: 'text', - * subtype: 'html' } ] - * - * @return {Array} - * @api public - */ - -req.__defineGetter__('accepted', function(){ - var accept = this.get('Accept'); - return accept - ? utils.parseAccept(accept) - : []; -}); - -/** - * Return an array of Accepted languages - * ordered from highest quality to lowest. - * - * Examples: - * - * Accept-Language: en;q=.5, en-us - * ['en-us', 'en'] - * - * @return {Array} - * @api public - */ - -req.__defineGetter__('acceptedLanguages', function(){ - var accept = this.get('Accept-Language'); - return accept - ? utils - .parseParams(accept) - .map(function(obj){ - return obj.value; - }) - : []; -}); - -/** - * Return an array of Accepted charsets - * ordered from highest quality to lowest. - * - * Examples: - * - * Accept-Charset: iso-8859-5;q=.2, unicode-1-1;q=0.8 - * ['unicode-1-1', 'iso-8859-5'] - * - * @return {Array} - * @api public - */ - -req.__defineGetter__('acceptedCharsets', function(){ - var accept = this.get('Accept-Charset'); - return accept - ? utils - .parseParams(accept) - .map(function(obj){ - return obj.value; - }) - : []; -}); - -/** - * Return the value of param `name` when present or `defaultValue`. - * - * - Checks route placeholders, ex: _/user/:id_ - * - Checks body params, ex: id=12, {"id":12} - * - Checks query string params, ex: ?id=12 - * - * To utilize request bodies, `req.body` - * should be an object. This can be done by using - * the `connect.bodyParser()` middleware. - * - * @param {String} name - * @param {Mixed} [defaultValue] - * @return {String} - * @api public - */ - -req.param = function(name, defaultValue){ - var params = this.params || {}; - var body = this.body || {}; - var query = this.query || {}; - if (null != params[name] && params.hasOwnProperty(name)) return params[name]; - if (null != body[name]) return body[name]; - if (null != query[name]) return query[name]; - return defaultValue; -}; - -/** - * Check if the incoming request contains the "Content-Type" - * header field, and it contains the give mime `type`. - * - * Examples: - * - * // With Content-Type: text/html; charset=utf-8 - * req.is('html'); - * req.is('text/html'); - * req.is('text/*'); - * // => true - * - * // When Content-Type is application/json - * req.is('json'); - * req.is('application/json'); - * req.is('application/*'); - * // => true - * - * req.is('html'); - * // => false - * - * @param {String} type - * @return {Boolean} - * @api public - */ - -req.is = function(type){ - var ct = this.get('Content-Type'); - if (!ct) return false; - ct = ct.split(';')[0]; - if (!~type.indexOf('/')) type = mime.lookup(type); - if (~type.indexOf('*')) { - type = type.split('/'); - ct = ct.split('/'); - if ('*' == type[0] && type[1] == ct[1]) return true; - if ('*' == type[1] && type[0] == ct[0]) return true; - return false; - } - return !! ~ct.indexOf(type); -}; - -/** - * Return the protocol string "http" or "https" - * when requested with TLS. When the "trust proxy" - * setting is enabled the "X-Forwarded-Proto" header - * field will be trusted. If you're running behind - * a reverse proxy that supplies https for you this - * may be enabled. - * - * @return {String} - * @api public - */ - -req.__defineGetter__('protocol', function(){ - var trustProxy = this.app.get('trust proxy'); - if (this.connection.encrypted) return 'https'; - if (!trustProxy) return 'http'; - var proto = this.get('X-Forwarded-Proto') || 'http'; - return proto.split(/\s*,\s*/)[0]; -}); - -/** - * Short-hand for: - * - * req.protocol == 'https' - * - * @return {Boolean} - * @api public - */ - -req.__defineGetter__('secure', function(){ - return 'https' == this.protocol; -}); - -/** - * Return the remote address, or when - * "trust proxy" is `true` return - * the upstream addr. - * - * @return {String} - * @api public - */ - -req.__defineGetter__('ip', function(){ - return this.ips[0] || this.connection.remoteAddress; -}); - -/** - * When "trust proxy" is `true`, parse - * the "X-Forwarded-For" ip address list. - * - * For example if the value were "client, proxy1, proxy2" - * you would receive the array `["client", "proxy1", "proxy2"]` - * where "proxy2" is the furthest down-stream. - * - * @return {Array} - * @api public - */ - -req.__defineGetter__('ips', function(){ - var trustProxy = this.app.get('trust proxy'); - var val = this.get('X-Forwarded-For'); - return trustProxy && val - ? val.split(/ *, */) - : []; -}); - -/** - * Return basic auth credentials. - * - * Examples: - * - * // http://tobi:hello@example.com - * req.auth - * // => { username: 'tobi', password: 'hello' } - * - * @return {Object} or undefined - * @api public - */ - -req.__defineGetter__('auth', function(){ - // missing - var auth = this.get('Authorization'); - if (!auth) return; - - // malformed - var parts = auth.split(' '); - if ('basic' != parts[0].toLowerCase()) return; - if (!parts[1]) return; - auth = parts[1]; - - // credentials - auth = new Buffer(auth, 'base64').toString().match(/^([^:]*):(.*)$/); - if (!auth) return; - return { username: auth[1], password: auth[2] }; -}); - -/** - * Return subdomains as an array. - * - * Subdomains are the dot-separated parts of the host before the main domain of - * the app. By default, the domain of the app is assumed to be the last two - * parts of the host. This can be changed by setting "subdomain offset". - * - * For example, if the domain is "tobi.ferrets.example.com": - * If "subdomain offset" is not set, req.subdomains is `["ferrets", "tobi"]`. - * If "subdomain offset" is 3, req.subdomains is `["tobi"]`. - * - * @return {Array} - * @api public - */ - -req.__defineGetter__('subdomains', function(){ - var offset = this.app.get('subdomain offset'); - return (this.host || '') - .split('.') - .reverse() - .slice(offset); -}); - -/** - * Short-hand for `url.parse(req.url).pathname`. - * - * @return {String} - * @api public - */ - -req.__defineGetter__('path', function(){ - return parse(this).pathname; -}); - -/** - * Parse the "Host" header field hostname. - * - * @return {String} - * @api public - */ - -req.__defineGetter__('host', function(){ - var trustProxy = this.app.get('trust proxy'); - var host = trustProxy && this.get('X-Forwarded-Host'); - host = host || this.get('Host'); - if (!host) return; - return host.split(':')[0]; -}); - -/** - * Check if the request is fresh, aka - * Last-Modified and/or the ETag - * still match. - * - * @return {Boolean} - * @api public - */ - -req.__defineGetter__('fresh', function(){ - var method = this.method; - var s = this.res.statusCode; - - // GET or HEAD for weak freshness validation only - if ('GET' != method && 'HEAD' != method) return false; - - // 2xx or 304 as per rfc2616 14.26 - if ((s >= 200 && s < 300) || 304 == s) { - return fresh(this.headers, this.res._headers); - } - - return false; -}); - -/** - * Check if the request is stale, aka - * "Last-Modified" and / or the "ETag" for the - * resource has changed. - * - * @return {Boolean} - * @api public - */ - -req.__defineGetter__('stale', function(){ - return !this.fresh; -}); - -/** - * Check if the request was an _XMLHttpRequest_. - * - * @return {Boolean} - * @api public - */ - -req.__defineGetter__('xhr', function(){ - var val = this.get('X-Requested-With') || ''; - return 'xmlhttprequest' == val.toLowerCase(); -}); diff --git a/node_modules/express/lib/response.js b/node_modules/express/lib/response.js deleted file mode 100644 index 31c79c0d..00000000 --- a/node_modules/express/lib/response.js +++ /dev/null @@ -1,799 +0,0 @@ -/** - * Module dependencies. - */ - -var http = require('http') - , path = require('path') - , connect = require('connect') - , utils = connect.utils - , sign = require('cookie-signature').sign - , normalizeType = require('./utils').normalizeType - , normalizeTypes = require('./utils').normalizeTypes - , etag = require('./utils').etag - , statusCodes = http.STATUS_CODES - , cookie = require('cookie') - , send = require('send') - , mime = connect.mime - , resolve = require('url').resolve - , basename = path.basename - , extname = path.extname; - -/** - * Response prototype. - */ - -var res = module.exports = { - __proto__: http.ServerResponse.prototype -}; - -/** - * Set status `code`. - * - * @param {Number} code - * @return {ServerResponse} - * @api public - */ - -res.status = function(code){ - this.statusCode = code; - return this; -}; - -/** - * Set Link header field with the given `links`. - * - * Examples: - * - * res.links({ - * next: 'http://api.example.com/users?page=2', - * last: 'http://api.example.com/users?page=5' - * }); - * - * @param {Object} links - * @return {ServerResponse} - * @api public - */ - -res.links = function(links){ - var link = this.get('Link') || ''; - if (link) link += ', '; - return this.set('Link', link + Object.keys(links).map(function(rel){ - return '<' + links[rel] + '>; rel="' + rel + '"'; - }).join(', ')); -}; - -/** - * Send a response. - * - * Examples: - * - * res.send(new Buffer('wahoo')); - * res.send({ some: 'json' }); - * res.send('

some html

'); - * res.send(404, 'Sorry, cant find that'); - * res.send(404); - * - * @param {Mixed} body or status - * @param {Mixed} body - * @return {ServerResponse} - * @api public - */ - -res.send = function(body){ - var req = this.req; - var head = 'HEAD' == req.method; - var len; - - // settings - var app = this.app; - - // allow status / body - if (2 == arguments.length) { - // res.send(body, status) backwards compat - if ('number' != typeof body && 'number' == typeof arguments[1]) { - this.statusCode = arguments[1]; - } else { - this.statusCode = body; - body = arguments[1]; - } - } - - switch (typeof body) { - // response status - case 'number': - this.get('Content-Type') || this.type('txt'); - this.statusCode = body; - body = http.STATUS_CODES[body]; - break; - // string defaulting to html - case 'string': - if (!this.get('Content-Type')) { - this.charset = this.charset || 'utf-8'; - this.type('html'); - } - break; - case 'boolean': - case 'object': - if (null == body) { - body = ''; - } else if (Buffer.isBuffer(body)) { - this.get('Content-Type') || this.type('bin'); - } else { - return this.json(body); - } - break; - } - - // populate Content-Length - if (undefined !== body && !this.get('Content-Length')) { - this.set('Content-Length', len = Buffer.isBuffer(body) - ? body.length - : Buffer.byteLength(body)); - } - - // ETag support - // TODO: W/ support - if (app.settings.etag && len && 'GET' == req.method) { - if (!this.get('ETag')) { - this.set('ETag', etag(body)); - } - } - - // freshness - if (req.fresh) this.statusCode = 304; - - // strip irrelevant headers - if (204 == this.statusCode || 304 == this.statusCode) { - this.removeHeader('Content-Type'); - this.removeHeader('Content-Length'); - this.removeHeader('Transfer-Encoding'); - body = ''; - } - - // respond - this.end(head ? null : body); - return this; -}; - -/** - * Send JSON response. - * - * Examples: - * - * res.json(null); - * res.json({ user: 'tj' }); - * res.json(500, 'oh noes!'); - * res.json(404, 'I dont have that'); - * - * @param {Mixed} obj or status - * @param {Mixed} obj - * @return {ServerResponse} - * @api public - */ - -res.json = function(obj){ - // allow status / body - if (2 == arguments.length) { - // res.json(body, status) backwards compat - if ('number' == typeof arguments[1]) { - this.statusCode = arguments[1]; - } else { - this.statusCode = obj; - obj = arguments[1]; - } - } - - // settings - var app = this.app; - var replacer = app.get('json replacer'); - var spaces = app.get('json spaces'); - var body = JSON.stringify(obj, replacer, spaces); - - // content-type - this.charset = this.charset || 'utf-8'; - this.get('Content-Type') || this.set('Content-Type', 'application/json'); - - return this.send(body); -}; - -/** - * Send JSON response with JSONP callback support. - * - * Examples: - * - * res.jsonp(null); - * res.jsonp({ user: 'tj' }); - * res.jsonp(500, 'oh noes!'); - * res.jsonp(404, 'I dont have that'); - * - * @param {Mixed} obj or status - * @param {Mixed} obj - * @return {ServerResponse} - * @api public - */ - -res.jsonp = function(obj){ - // allow status / body - if (2 == arguments.length) { - // res.json(body, status) backwards compat - if ('number' == typeof arguments[1]) { - this.statusCode = arguments[1]; - } else { - this.statusCode = obj; - obj = arguments[1]; - } - } - - // settings - var app = this.app; - var replacer = app.get('json replacer'); - var spaces = app.get('json spaces'); - var body = JSON.stringify(obj, replacer, spaces) - .replace(/\u2028/g, '\\u2028') - .replace(/\u2029/g, '\\u2029'); - var callback = this.req.query[app.get('jsonp callback name')]; - - // content-type - this.charset = this.charset || 'utf-8'; - this.set('Content-Type', 'application/json'); - - // jsonp - if (callback) { - if (Array.isArray(callback)) callback = callback[0]; - this.set('Content-Type', 'text/javascript'); - var cb = callback.replace(/[^\[\]\w$.]/g, ''); - body = 'typeof ' + cb + ' === \'function\' && ' + cb + '(' + body + ');'; - } - - return this.send(body); -}; - -/** - * Transfer the file at the given `path`. - * - * Automatically sets the _Content-Type_ response header field. - * The callback `fn(err)` is invoked when the transfer is complete - * or when an error occurs. Be sure to check `res.sentHeader` - * if you wish to attempt responding, as the header and some data - * may have already been transferred. - * - * Options: - * - * - `maxAge` defaulting to 0 - * - `root` root directory for relative filenames - * - * Examples: - * - * The following example illustrates how `res.sendfile()` may - * be used as an alternative for the `static()` middleware for - * dynamic situations. The code backing `res.sendfile()` is actually - * the same code, so HTTP cache support etc is identical. - * - * app.get('/user/:uid/photos/:file', function(req, res){ - * var uid = req.params.uid - * , file = req.params.file; - * - * req.user.mayViewFilesFrom(uid, function(yes){ - * if (yes) { - * res.sendfile('/uploads/' + uid + '/' + file); - * } else { - * res.send(403, 'Sorry! you cant see that.'); - * } - * }); - * }); - * - * @param {String} path - * @param {Object|Function} options or fn - * @param {Function} fn - * @api public - */ - -res.sendfile = function(path, options, fn){ - var self = this - , req = self.req - , next = this.req.next - , options = options || {} - , done; - - // support function as second arg - if ('function' == typeof options) { - fn = options; - options = {}; - } - - // socket errors - req.socket.on('error', error); - - // errors - function error(err) { - if (done) return; - done = true; - - // clean up - cleanup(); - if (!self.headerSent) self.removeHeader('Content-Disposition'); - - // callback available - if (fn) return fn(err); - - // list in limbo if there's no callback - if (self.headerSent) return; - - // delegate - next(err); - } - - // streaming - function stream(stream) { - if (done) return; - cleanup(); - if (fn) stream.on('end', fn); - } - - // cleanup - function cleanup() { - req.socket.removeListener('error', error); - } - - // transfer - var file = send(req, path); - if (options.root) file.root(options.root); - file.maxage(options.maxAge || 0); - file.on('error', error); - file.on('directory', next); - file.on('stream', stream); - file.pipe(this); - this.on('finish', cleanup); -}; - -/** - * Transfer the file at the given `path` as an attachment. - * - * Optionally providing an alternate attachment `filename`, - * and optional callback `fn(err)`. The callback is invoked - * when the data transfer is complete, or when an error has - * ocurred. Be sure to check `res.headerSent` if you plan to respond. - * - * This method uses `res.sendfile()`. - * - * @param {String} path - * @param {String|Function} filename or fn - * @param {Function} fn - * @api public - */ - -res.download = function(path, filename, fn){ - // support function as second arg - if ('function' == typeof filename) { - fn = filename; - filename = null; - } - - filename = filename || path; - this.set('Content-Disposition', 'attachment; filename="' + basename(filename) + '"'); - return this.sendfile(path, fn); -}; - -/** - * Set _Content-Type_ response header with `type` through `mime.lookup()` - * when it does not contain "/", or set the Content-Type to `type` otherwise. - * - * Examples: - * - * res.type('.html'); - * res.type('html'); - * res.type('json'); - * res.type('application/json'); - * res.type('png'); - * - * @param {String} type - * @return {ServerResponse} for chaining - * @api public - */ - -res.contentType = -res.type = function(type){ - return this.set('Content-Type', ~type.indexOf('/') - ? type - : mime.lookup(type)); -}; - -/** - * Respond to the Acceptable formats using an `obj` - * of mime-type callbacks. - * - * This method uses `req.accepted`, an array of - * acceptable types ordered by their quality values. - * When "Accept" is not present the _first_ callback - * is invoked, otherwise the first match is used. When - * no match is performed the server responds with - * 406 "Not Acceptable". - * - * Content-Type is set for you, however if you choose - * you may alter this within the callback using `res.type()` - * or `res.set('Content-Type', ...)`. - * - * res.format({ - * 'text/plain': function(){ - * res.send('hey'); - * }, - * - * 'text/html': function(){ - * res.send('

hey

'); - * }, - * - * 'appliation/json': function(){ - * res.send({ message: 'hey' }); - * } - * }); - * - * In addition to canonicalized MIME types you may - * also use extnames mapped to these types: - * - * res.format({ - * text: function(){ - * res.send('hey'); - * }, - * - * html: function(){ - * res.send('

hey

'); - * }, - * - * json: function(){ - * res.send({ message: 'hey' }); - * } - * }); - * - * By default Express passes an `Error` - * with a `.status` of 406 to `next(err)` - * if a match is not made. If you provide - * a `.default` callback it will be invoked - * instead. - * - * @param {Object} obj - * @return {ServerResponse} for chaining - * @api public - */ - -res.format = function(obj){ - var req = this.req - , next = req.next; - - var fn = obj.default; - if (fn) delete obj.default; - var keys = Object.keys(obj); - - var key = req.accepts(keys); - - this.vary("Accept"); - - if (key) { - var type = normalizeType(key).value; - var charset = mime.charsets.lookup(type); - if (charset) type += '; charset=' + charset; - this.set('Content-Type', type); - obj[key](req, this, next); - } else if (fn) { - fn(); - } else { - var err = new Error('Not Acceptable'); - err.status = 406; - err.types = normalizeTypes(keys).map(function(o){ return o.value }); - next(err); - } - - return this; -}; - -/** - * Set _Content-Disposition_ header to _attachment_ with optional `filename`. - * - * @param {String} filename - * @return {ServerResponse} - * @api public - */ - -res.attachment = function(filename){ - if (filename) this.type(extname(filename)); - this.set('Content-Disposition', filename - ? 'attachment; filename="' + basename(filename) + '"' - : 'attachment'); - return this; -}; - -/** - * Set header `field` to `val`, or pass - * an object of header fields. - * - * Examples: - * - * res.set('Foo', ['bar', 'baz']); - * res.set('Accept', 'application/json'); - * res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' }); - * - * Aliased as `res.header()`. - * - * @param {String|Object|Array} field - * @param {String} val - * @return {ServerResponse} for chaining - * @api public - */ - -res.set = -res.header = function(field, val){ - if (2 == arguments.length) { - if (Array.isArray(val)) val = val.map(String); - else val = String(val); - this.setHeader(field, val); - } else { - for (var key in field) { - this.set(key, field[key]); - } - } - return this; -}; - -/** - * Get value for header `field`. - * - * @param {String} field - * @return {String} - * @api public - */ - -res.get = function(field){ - return this.getHeader(field); -}; - -/** - * Clear cookie `name`. - * - * @param {String} name - * @param {Object} options - * @param {ServerResponse} for chaining - * @api public - */ - -res.clearCookie = function(name, options){ - var opts = { expires: new Date(1), path: '/' }; - return this.cookie(name, '', options - ? utils.merge(opts, options) - : opts); -}; - -/** - * Set cookie `name` to `val`, with the given `options`. - * - * Options: - * - * - `maxAge` max-age in milliseconds, converted to `expires` - * - `signed` sign the cookie - * - `path` defaults to "/" - * - * Examples: - * - * // "Remember Me" for 15 minutes - * res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true }); - * - * // save as above - * res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true }) - * - * @param {String} name - * @param {String|Object} val - * @param {Options} options - * @api public - */ - -res.cookie = function(name, val, options){ - options = utils.merge({}, options); - var secret = this.req.secret; - var signed = options.signed; - if (signed && !secret) throw new Error('connect.cookieParser("secret") required for signed cookies'); - if ('number' == typeof val) val = val.toString(); - if ('object' == typeof val) val = 'j:' + JSON.stringify(val); - if (signed) val = 's:' + sign(val, secret); - if ('maxAge' in options) { - options.expires = new Date(Date.now() + options.maxAge); - options.maxAge /= 1000; - } - if (null == options.path) options.path = '/'; - this.set('Set-Cookie', cookie.serialize(name, String(val), options)); - return this; -}; - - -/** - * Set the location header to `url`. - * - * The given `url` can also be "back", which redirects - * to the _Referrer_ or _Referer_ headers or "/". - * - * Examples: - * - * res.location('/foo/bar').; - * res.location('http://example.com'); - * res.location('../login'); // /blog/post/1 -> /blog/login - * - * Mounting: - * - * When an application is mounted and `res.location()` - * is given a path that does _not_ lead with "/" it becomes - * relative to the mount-point. For example if the application - * is mounted at "/blog", the following would become "/blog/login". - * - * res.location('login'); - * - * While the leading slash would result in a location of "/login": - * - * res.location('/login'); - * - * @param {String} url - * @api public - */ - -res.location = function(url){ - var app = this.app - , req = this.req - , path; - - // "back" is an alias for the referrer - if ('back' == url) url = req.get('Referrer') || '/'; - - // relative - if (!~url.indexOf('://') && 0 != url.indexOf('//')) { - // relative to path - if ('.' == url[0]) { - path = req.originalUrl.split('?')[0]; - path = path + ('/' == path[path.length - 1] ? '' : '/'); - url = resolve(path, url); - // relative to mount-point - } else if ('/' != url[0]) { - path = app.path(); - url = path + '/' + url; - } - } - - // Respond - this.set('Location', url); - return this; -}; - -/** - * Redirect to the given `url` with optional response `status` - * defaulting to 302. - * - * The resulting `url` is determined by `res.location()`, so - * it will play nicely with mounted apps, relative paths, - * `"back"` etc. - * - * Examples: - * - * res.redirect('/foo/bar'); - * res.redirect('http://example.com'); - * res.redirect(301, 'http://example.com'); - * res.redirect('http://example.com', 301); - * res.redirect('../login'); // /blog/post/1 -> /blog/login - * - * @param {String} url - * @param {Number} code - * @api public - */ - -res.redirect = function(url){ - var head = 'HEAD' == this.req.method - , status = 302 - , body; - - // allow status / url - if (2 == arguments.length) { - if ('number' == typeof url) { - status = url; - url = arguments[1]; - } else { - status = arguments[1]; - } - } - - // Set location header - this.location(url); - url = this.get('Location'); - - // Support text/{plain,html} by default - this.format({ - text: function(){ - body = statusCodes[status] + '. Redirecting to ' + encodeURI(url); - }, - - html: function(){ - var u = utils.escape(url); - body = '

' + statusCodes[status] + '. Redirecting to ' + u + '

'; - }, - - default: function(){ - body = ''; - } - }); - - // Respond - this.statusCode = status; - this.set('Content-Length', Buffer.byteLength(body)); - this.end(head ? null : body); -}; - -/** - * Add `field` to Vary. If already present in the Vary set, then - * this call is simply ignored. - * - * @param {Array|String} field - * @param {ServerResponse} for chaining - * @api public - */ - -res.vary = function(field){ - var self = this; - - // nothing - if (!field) return this; - - // array - if (Array.isArray(field)) { - field.forEach(function(field){ - self.vary(field); - }); - return; - } - - var vary = this.get('Vary'); - - // append - if (vary) { - vary = vary.split(/ *, */); - if (!~vary.indexOf(field)) vary.push(field); - this.set('Vary', vary.join(', ')); - return this; - } - - // set - this.set('Vary', field); - return this; -}; - -/** - * Render `view` with the given `options` and optional callback `fn`. - * When a callback function is given a response will _not_ be made - * automatically, otherwise a response of _200_ and _text/html_ is given. - * - * Options: - * - * - `cache` boolean hinting to the engine it should cache - * - `filename` filename of the view being rendered - * - * @param {String} view - * @param {Object|Function} options or callback function - * @param {Function} fn - * @api public - */ - -res.render = function(view, options, fn){ - var self = this - , options = options || {} - , req = this.req - , app = req.app; - - // support callback function as second arg - if ('function' == typeof options) { - fn = options, options = {}; - } - - // merge res.locals - options._locals = self.locals; - - // default callback to respond - fn = fn || function(err, str){ - if (err) return req.next(err); - self.send(str); - }; - - // render - app.render(view, options, fn); -}; diff --git a/node_modules/express/lib/router/index.js b/node_modules/express/lib/router/index.js deleted file mode 100644 index cd2f2693..00000000 --- a/node_modules/express/lib/router/index.js +++ /dev/null @@ -1,321 +0,0 @@ -/** - * Module dependencies. - */ - -var Route = require('./route') - , utils = require('../utils') - , methods = require('methods') - , debug = require('debug')('express:router') - , parse = require('connect').utils.parseUrl; - -/** - * Expose `Router` constructor. - */ - -exports = module.exports = Router; - -/** - * Initialize a new `Router` with the given `options`. - * - * @param {Object} options - * @api private - */ - -function Router(options) { - options = options || {}; - var self = this; - this.map = {}; - this.params = {}; - this._params = []; - this.caseSensitive = options.caseSensitive; - this.strict = options.strict; - this.middleware = function router(req, res, next){ - self._dispatch(req, res, next); - }; -} - -/** - * Register a param callback `fn` for the given `name`. - * - * @param {String|Function} name - * @param {Function} fn - * @return {Router} for chaining - * @api public - */ - -Router.prototype.param = function(name, fn){ - // param logic - if ('function' == typeof name) { - this._params.push(name); - return; - } - - // apply param functions - var params = this._params - , len = params.length - , ret; - - for (var i = 0; i < len; ++i) { - if (ret = params[i](name, fn)) { - fn = ret; - } - } - - // ensure we end up with a - // middleware function - if ('function' != typeof fn) { - throw new Error('invalid param() call for ' + name + ', got ' + fn); - } - - (this.params[name] = this.params[name] || []).push(fn); - return this; -}; - -/** - * Route dispatcher aka the route "middleware". - * - * @param {IncomingMessage} req - * @param {ServerResponse} res - * @param {Function} next - * @api private - */ - -Router.prototype._dispatch = function(req, res, next){ - var params = this.params - , self = this; - - debug('dispatching %s %s (%s)', req.method, req.url, req.originalUrl); - - // route dispatch - (function pass(i, err){ - var paramCallbacks - , paramIndex = 0 - , paramVal - , route - , keys - , key; - - // match next route - function nextRoute(err) { - pass(req._route_index + 1, err); - } - - // match route - req.route = route = self.matchRequest(req, i); - - // implied OPTIONS - if (!route && 'OPTIONS' == req.method) return self._options(req, res, next); - - // no route - if (!route) return next(err); - debug('matched %s %s', route.method, route.path); - - // we have a route - // start at param 0 - req.params = route.params; - keys = route.keys; - i = 0; - - // param callbacks - function param(err) { - paramIndex = 0; - key = keys[i++]; - paramVal = key && req.params[key.name]; - paramCallbacks = key && params[key.name]; - - try { - if ('route' == err) { - nextRoute(); - } else if (err) { - i = 0; - callbacks(err); - } else if (paramCallbacks && undefined !== paramVal) { - paramCallback(); - } else if (key) { - param(); - } else { - i = 0; - callbacks(); - } - } catch (err) { - param(err); - } - }; - - param(err); - - // single param callbacks - function paramCallback(err) { - var fn = paramCallbacks[paramIndex++]; - if (err || !fn) return param(err); - fn(req, res, paramCallback, paramVal, key.name); - } - - // invoke route callbacks - function callbacks(err) { - var fn = route.callbacks[i++]; - try { - if ('route' == err) { - nextRoute(); - } else if (err && fn) { - if (fn.length < 4) return callbacks(err); - fn(err, req, res, callbacks); - } else if (fn) { - if (fn.length < 4) return fn(req, res, callbacks); - callbacks(); - } else { - nextRoute(err); - } - } catch (err) { - callbacks(err); - } - } - })(0); -}; - -/** - * Respond to __OPTIONS__ method. - * - * @param {IncomingMessage} req - * @param {ServerResponse} res - * @api private - */ - -Router.prototype._options = function(req, res, next){ - var path = parse(req).pathname - , body = this._optionsFor(path).join(','); - if (!body) return next(); - res.set('Allow', body).send(body); -}; - -/** - * Return an array of HTTP verbs or "options" for `path`. - * - * @param {String} path - * @return {Array} - * @api private - */ - -Router.prototype._optionsFor = function(path){ - var self = this; - return methods.filter(function(method){ - var routes = self.map[method]; - if (!routes || 'options' == method) return; - for (var i = 0, len = routes.length; i < len; ++i) { - if (routes[i].match(path)) return true; - } - }).map(function(method){ - return method.toUpperCase(); - }); -}; - -/** - * Attempt to match a route for `req` - * with optional starting index of `i` - * defaulting to 0. - * - * @param {IncomingMessage} req - * @param {Number} i - * @return {Route} - * @api private - */ - -Router.prototype.matchRequest = function(req, i, head){ - var method = req.method.toLowerCase() - , url = parse(req) - , path = url.pathname - , routes = this.map - , i = i || 0 - , route; - - // HEAD support - if (!head && 'head' == method) { - route = this.matchRequest(req, i, true); - if (route) return route; - method = 'get'; - } - - // routes for this method - if (routes = routes[method]) { - - // matching routes - for (var len = routes.length; i < len; ++i) { - route = routes[i]; - if (route.match(path)) { - req._route_index = i; - return route; - } - } - } -}; - -/** - * Attempt to match a route for `method` - * and `url` with optional starting - * index of `i` defaulting to 0. - * - * @param {String} method - * @param {String} url - * @param {Number} i - * @return {Route} - * @api private - */ - -Router.prototype.match = function(method, url, i, head){ - var req = { method: method, url: url }; - return this.matchRequest(req, i, head); -}; - -/** - * Route `method`, `path`, and one or more callbacks. - * - * @param {String} method - * @param {String} path - * @param {Function} callback... - * @return {Router} for chaining - * @api private - */ - -Router.prototype.route = function(method, path, callbacks){ - var method = method.toLowerCase() - , callbacks = utils.flatten([].slice.call(arguments, 2)); - - // ensure path was given - if (!path) throw new Error('Router#' + method + '() requires a path'); - - // ensure all callbacks are functions - callbacks.forEach(function(fn){ - if ('function' == typeof fn) return; - var type = {}.toString.call(fn); - var msg = '.' + method + '() requires callback functions but got a ' + type; - throw new Error(msg); - }); - - // create the route - debug('defined %s %s', method, path); - var route = new Route(method, path, callbacks, { - sensitive: this.caseSensitive, - strict: this.strict - }); - - // add it - (this.map[method] = this.map[method] || []).push(route); - return this; -}; - -Router.prototype.all = function(path) { - var self = this; - var args = [].slice.call(arguments); - methods.forEach(function(method){ - self.route.apply(self, [method].concat(args)); - }); - return this; -}; - -methods.forEach(function(method){ - Router.prototype[method] = function(path){ - var args = [method].concat([].slice.call(arguments)); - this.route.apply(this, args); - return this; - }; -}); diff --git a/node_modules/express/lib/router/route.js b/node_modules/express/lib/router/route.js deleted file mode 100644 index d7ec88d2..00000000 --- a/node_modules/express/lib/router/route.js +++ /dev/null @@ -1,78 +0,0 @@ - -/** - * Module dependencies. - */ - -var utils = require('../utils'); - -/** - * Expose `Route`. - */ - -module.exports = Route; - -/** - * Initialize `Route` with the given HTTP `method`, `path`, - * and an array of `callbacks` and `options`. - * - * Options: - * - * - `sensitive` enable case-sensitive routes - * - `strict` enable strict matching for trailing slashes - * - * @param {String} method - * @param {String} path - * @param {Array} callbacks - * @param {Object} options. - * @api private - */ - -function Route(method, path, callbacks, options) { - options = options || {}; - this.path = path; - this.method = method; - this.callbacks = callbacks; - this.regexp = utils.pathRegexp(path - , this.keys = [] - , options.sensitive - , options.strict); -} - -/** - * Check if this route matches `path`, if so - * populate `.params`. - * - * @param {String} path - * @return {Boolean} - * @api private - */ - -Route.prototype.match = function(path){ - var keys = this.keys - , params = this.params = [] - , m = this.regexp.exec(path); - - if (!m) return false; - - for (var i = 1, len = m.length; i < len; ++i) { - var key = keys[i - 1]; - - try { - var val = 'string' == typeof m[i] - ? decodeURIComponent(m[i]) - : m[i]; - } catch(e) { - var err = new Error("Failed to decode param '" + m[i] + "'"); - err.status = 400; - throw err; - } - - if (key) { - params[key.name] = val; - } else { - params.push(val); - } - } - - return true; -}; diff --git a/node_modules/express/lib/utils.js b/node_modules/express/lib/utils.js deleted file mode 100644 index b30873a8..00000000 --- a/node_modules/express/lib/utils.js +++ /dev/null @@ -1,314 +0,0 @@ - -/** - * Module dependencies. - */ - -var mime = require('connect').mime - , crc32 = require('buffer-crc32'); - -/** - * toString ref. - */ - -var toString = {}.toString; - -/** - * Return ETag for `body`. - * - * @param {String|Buffer} body - * @return {String} - * @api private - */ - -exports.etag = function(body){ - return '"' + crc32.signed(body) + '"'; -}; - -/** - * Make `locals()` bound to the given `obj`. - * - * This is used for `app.locals` and `res.locals`. - * - * @param {Object} obj - * @return {Function} - * @api private - */ - -exports.locals = function(){ - function locals(obj){ - for (var key in obj) locals[key] = obj[key]; - return obj; - }; - - return locals; -}; - -/** - * Check if `path` looks absolute. - * - * @param {String} path - * @return {Boolean} - * @api private - */ - -exports.isAbsolute = function(path){ - if ('/' == path[0]) return true; - if (':' == path[1] && '\\' == path[2]) return true; - if ('\\\\' == path.substring(0, 2)) return true; // Microsoft Azure absolute path -}; - -/** - * Flatten the given `arr`. - * - * @param {Array} arr - * @return {Array} - * @api private - */ - -exports.flatten = function(arr, ret){ - var ret = ret || [] - , len = arr.length; - for (var i = 0; i < len; ++i) { - if (Array.isArray(arr[i])) { - exports.flatten(arr[i], ret); - } else { - ret.push(arr[i]); - } - } - return ret; -}; - -/** - * Normalize the given `type`, for example "html" becomes "text/html". - * - * @param {String} type - * @return {Object} - * @api private - */ - -exports.normalizeType = function(type){ - return ~type.indexOf('/') - ? acceptParams(type) - : { value: mime.lookup(type), params: {} }; -}; - -/** - * Normalize `types`, for example "html" becomes "text/html". - * - * @param {Array} types - * @return {Array} - * @api private - */ - -exports.normalizeTypes = function(types){ - var ret = []; - - for (var i = 0; i < types.length; ++i) { - ret.push(exports.normalizeType(types[i])); - } - - return ret; -}; - -/** - * Return the acceptable type in `types`, if any. - * - * @param {Array} types - * @param {String} str - * @return {String} - * @api private - */ - -exports.acceptsArray = function(types, str){ - // accept anything when Accept is not present - if (!str) return types[0]; - - // parse - var accepted = exports.parseAccept(str) - , normalized = exports.normalizeTypes(types) - , len = accepted.length; - - for (var i = 0; i < len; ++i) { - for (var j = 0, jlen = types.length; j < jlen; ++j) { - if (exports.accept(normalized[j], accepted[i])) { - return types[j]; - } - } - } -}; - -/** - * Check if `type(s)` are acceptable based on - * the given `str`. - * - * @param {String|Array} type(s) - * @param {String} str - * @return {Boolean|String} - * @api private - */ - -exports.accepts = function(type, str){ - if ('string' == typeof type) type = type.split(/ *, */); - return exports.acceptsArray(type, str); -}; - -/** - * Check if `type` array is acceptable for `other`. - * - * @param {Object} type - * @param {Object} other - * @return {Boolean} - * @api private - */ - -exports.accept = function(type, other){ - var t = type.value.split('/'); - return (t[0] == other.type || '*' == other.type) - && (t[1] == other.subtype || '*' == other.subtype) - && paramsEqual(type.params, other.params); -}; - -/** - * Check if accept params are equal. - * - * @param {Object} a - * @param {Object} b - * @return {Boolean} - * @api private - */ - -function paramsEqual(a, b){ - return !Object.keys(a).some(function(k) { - return a[k] != b[k]; - }); -} - -/** - * Parse accept `str`, returning - * an array objects containing - * `.type` and `.subtype` along - * with the values provided by - * `parseQuality()`. - * - * @param {Type} name - * @return {Type} - * @api private - */ - -exports.parseAccept = function(str){ - return exports - .parseParams(str) - .map(function(obj){ - var parts = obj.value.split('/'); - obj.type = parts[0]; - obj.subtype = parts[1]; - return obj; - }); -}; - -/** - * Parse quality `str`, returning an - * array of objects with `.value`, - * `.quality` and optional `.params` - * - * @param {String} str - * @return {Array} - * @api private - */ - -exports.parseParams = function(str){ - return str - .split(/ *, */) - .map(acceptParams) - .filter(function(obj){ - return obj.quality; - }) - .sort(function(a, b){ - if (a.quality === b.quality) { - return a.originalIndex - b.originalIndex; - } else { - return b.quality - a.quality; - } - }); -}; - -/** - * Parse accept params `str` returning an - * object with `.value`, `.quality` and `.params`. - * also includes `.originalIndex` for stable sorting - * - * @param {String} str - * @return {Object} - * @api private - */ - -function acceptParams(str, index) { - var parts = str.split(/ *; */); - var ret = { value: parts[0], quality: 1, params: {}, originalIndex: index }; - - for (var i = 1; i < parts.length; ++i) { - var pms = parts[i].split(/ *= */); - if ('q' == pms[0]) { - ret.quality = parseFloat(pms[1]); - } else { - ret.params[pms[0]] = pms[1]; - } - } - - return ret; -} - -/** - * Escape special characters in the given string of html. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function(html) { - return String(html) - .replace(/&/g, '&') - .replace(/"/g, '"') - .replace(//g, '>'); -}; - -/** - * Normalize the given path string, - * returning a regular expression. - * - * An empty array should be passed, - * which will contain the placeholder - * key names. For example "/user/:id" will - * then contain ["id"]. - * - * @param {String|RegExp|Array} path - * @param {Array} keys - * @param {Boolean} sensitive - * @param {Boolean} strict - * @return {RegExp} - * @api private - */ - -exports.pathRegexp = function(path, keys, sensitive, strict) { - if (toString.call(path) == '[object RegExp]') return path; - if (Array.isArray(path)) path = '(' + path.join('|') + ')'; - path = path - .concat(strict ? '' : '/?') - .replace(/\/\(/g, '(?:/') - .replace(/(\/)?(\.)?:(\w+)(?:(\(.*?\)))?(\?)?(\*)?/g, function(_, slash, format, key, capture, optional, star){ - keys.push({ name: key, optional: !! optional }); - slash = slash || ''; - return '' - + (optional ? '' : slash) - + '(?:' - + (optional ? slash : '') - + (format || '') + (capture || (format && '([^/.]+?)' || '([^/]+?)')) + ')' - + (optional || '') - + (star ? '(/*)?' : ''); - }) - .replace(/([\/.])/g, '\\$1') - .replace(/\*/g, '(.*)'); - return new RegExp('^' + path + '$', sensitive ? '' : 'i'); -} diff --git a/node_modules/express/lib/view.js b/node_modules/express/lib/view.js deleted file mode 100644 index b9dc69e0..00000000 --- a/node_modules/express/lib/view.js +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Module dependencies. - */ - -var path = require('path') - , fs = require('fs') - , utils = require('./utils') - , dirname = path.dirname - , basename = path.basename - , extname = path.extname - , exists = fs.existsSync || path.existsSync - , join = path.join; - -/** - * Expose `View`. - */ - -module.exports = View; - -/** - * Initialize a new `View` with the given `name`. - * - * Options: - * - * - `defaultEngine` the default template engine name - * - `engines` template engine require() cache - * - `root` root path for view lookup - * - * @param {String} name - * @param {Object} options - * @api private - */ - -function View(name, options) { - options = options || {}; - this.name = name; - this.root = options.root; - var engines = options.engines; - this.defaultEngine = options.defaultEngine; - var ext = this.ext = extname(name); - if (!ext && !this.defaultEngine) throw new Error('No default engine was specified and no extension was provided.'); - if (!ext) name += (ext = this.ext = ('.' != this.defaultEngine[0] ? '.' : '') + this.defaultEngine); - this.engine = engines[ext] || (engines[ext] = require(ext.slice(1)).__express); - this.path = this.lookup(name); -} - -/** - * Lookup view by the given `path` - * - * @param {String} path - * @return {String} - * @api private - */ - -View.prototype.lookup = function(path){ - var ext = this.ext; - - // . - if (!utils.isAbsolute(path)) path = join(this.root, path); - if (exists(path)) return path; - - // /index. - path = join(dirname(path), basename(path, ext), 'index' + ext); - if (exists(path)) return path; -}; - -/** - * Render with the given `options` and callback `fn(err, str)`. - * - * @param {Object} options - * @param {Function} fn - * @api private - */ - -View.prototype.render = function(options, fn){ - this.engine(this.path, options, fn); -}; diff --git a/node_modules/express/node_modules/buffer-crc32/.npmignore b/node_modules/express/node_modules/buffer-crc32/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/express/node_modules/buffer-crc32/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/express/node_modules/buffer-crc32/.travis.yml b/node_modules/express/node_modules/buffer-crc32/.travis.yml deleted file mode 100644 index 7a902e8c..00000000 --- a/node_modules/express/node_modules/buffer-crc32/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 -notifications: - email: - recipients: - - brianloveswords@gmail.com \ No newline at end of file diff --git a/node_modules/express/node_modules/buffer-crc32/README.md b/node_modules/express/node_modules/buffer-crc32/README.md deleted file mode 100644 index 0d9d8b83..00000000 --- a/node_modules/express/node_modules/buffer-crc32/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# buffer-crc32 - -[![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32) - -crc32 that works with binary data and fancy character sets, outputs -buffer, signed or unsigned data and has tests. - -Derived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix - -# install -``` -npm install buffer-crc32 -``` - -# example -```js -var crc32 = require('buffer-crc32'); -// works with buffers -var buf = Buffer([0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00]) -crc32(buf) // -> - -// has convenience methods for getting signed or unsigned ints -crc32.signed(buf) // -> -1805997238 -crc32.unsigned(buf) // -> 2488970058 - -// will cast to buffer if given a string, so you can -// directly use foreign characters safely -crc32('自動販売機') // -> - -// and works in append mode too -var partialCrc = crc32('hey'); -var partialCrc = crc32(' ', partialCrc); -var partialCrc = crc32('sup', partialCrc); -var partialCrc = crc32(' ', partialCrc); -var finalCrc = crc32('bros', partialCrc); // -> -``` - -# tests -This was tested against the output of zlib's crc32 method. You can run -the tests with`npm test` (requires tap) - -# see also -https://github.com/alexgorbatchev/node-crc, `crc.buffer.crc32` also -supports buffer inputs and return unsigned ints (thanks @tjholowaychuk). - -# license -MIT/X11 diff --git a/node_modules/express/node_modules/buffer-crc32/index.js b/node_modules/express/node_modules/buffer-crc32/index.js deleted file mode 100644 index e29ce3eb..00000000 --- a/node_modules/express/node_modules/buffer-crc32/index.js +++ /dev/null @@ -1,88 +0,0 @@ -var Buffer = require('buffer').Buffer; - -var CRC_TABLE = [ - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d -]; - -function bufferizeInt(num) { - var tmp = Buffer(4); - tmp.writeInt32BE(num, 0); - return tmp; -} - -function _crc32(buf, previous) { - if (!Buffer.isBuffer(buf)) { - buf = Buffer(buf); - } - if (Buffer.isBuffer(previous)) { - previous = previous.readUInt32BE(0); - } - var crc = ~~previous ^ -1; - for (var n = 0; n < buf.length; n++) { - crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8); - } - return (crc ^ -1); -} - -function crc32() { - return bufferizeInt(_crc32.apply(null, arguments)); -} -crc32.signed = function () { - return _crc32.apply(null, arguments); -}; -crc32.unsigned = function () { - return _crc32.apply(null, arguments) >>> 0; -}; - -module.exports = crc32; diff --git a/node_modules/express/node_modules/buffer-crc32/package.json b/node_modules/express/node_modules/buffer-crc32/package.json deleted file mode 100644 index 0ce14940..00000000 --- a/node_modules/express/node_modules/buffer-crc32/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "author": { - "name": "Brian J. Brennan", - "email": "brianloveswords@gmail.com", - "url": "http://bjb.io" - }, - "name": "buffer-crc32", - "description": "A pure javascript CRC32 algorithm that plays nice with binary data", - "version": "0.2.1", - "contributors": [ - { - "name": "Vladimir Kuznetsov" - } - ], - "homepage": "https://github.com/brianloveswords/buffer-crc32", - "repository": { - "type": "git", - "url": "git://github.com/brianloveswords/buffer-crc32.git" - }, - "main": "index.js", - "scripts": { - "test": "tap tests/*.test.js" - }, - "dependencies": {}, - "devDependencies": { - "tap": "~0.2.5" - }, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "# buffer-crc32\n\n[![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32)\n\ncrc32 that works with binary data and fancy character sets, outputs\nbuffer, signed or unsigned data and has tests.\n\nDerived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix\n\n# install\n```\nnpm install buffer-crc32\n```\n\n# example\n```js\nvar crc32 = require('buffer-crc32');\n// works with buffers\nvar buf = Buffer([0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00])\ncrc32(buf) // -> \n\n// has convenience methods for getting signed or unsigned ints\ncrc32.signed(buf) // -> -1805997238\ncrc32.unsigned(buf) // -> 2488970058\n\n// will cast to buffer if given a string, so you can\n// directly use foreign characters safely\ncrc32('自動販売機') // -> \n\n// and works in append mode too\nvar partialCrc = crc32('hey');\nvar partialCrc = crc32(' ', partialCrc);\nvar partialCrc = crc32('sup', partialCrc);\nvar partialCrc = crc32(' ', partialCrc);\nvar finalCrc = crc32('bros', partialCrc); // -> \n```\n\n# tests\nThis was tested against the output of zlib's crc32 method. You can run\nthe tests with`npm test` (requires tap)\n\n# see also\nhttps://github.com/alexgorbatchev/node-crc, `crc.buffer.crc32` also\nsupports buffer inputs and return unsigned ints (thanks @tjholowaychuk).\n\n# license\nMIT/X11\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/brianloveswords/buffer-crc32/issues" - }, - "_id": "buffer-crc32@0.2.1", - "dist": { - "shasum": "be3e5382fc02b6d6324956ac1af98aa98b08534c" - }, - "_from": "buffer-crc32@0.2.1", - "_resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz" -} diff --git a/node_modules/express/node_modules/buffer-crc32/tests/crc.test.js b/node_modules/express/node_modules/buffer-crc32/tests/crc.test.js deleted file mode 100644 index bb0f9efc..00000000 --- a/node_modules/express/node_modules/buffer-crc32/tests/crc.test.js +++ /dev/null @@ -1,89 +0,0 @@ -var crc32 = require('..'); -var test = require('tap').test; - -test('simple crc32 is no problem', function (t) { - var input = Buffer('hey sup bros'); - var expected = Buffer([0x47, 0xfa, 0x55, 0x70]); - t.same(crc32(input), expected); - t.end(); -}); - -test('another simple one', function (t) { - var input = Buffer('IEND'); - var expected = Buffer([0xae, 0x42, 0x60, 0x82]); - t.same(crc32(input), expected); - t.end(); -}); - -test('slightly more complex', function (t) { - var input = Buffer([0x00, 0x00, 0x00]); - var expected = Buffer([0xff, 0x41, 0xd9, 0x12]); - t.same(crc32(input), expected); - t.end(); -}); - -test('complex crc32 gets calculated like a champ', function (t) { - var input = Buffer('शीर्षक'); - var expected = Buffer([0x17, 0xb8, 0xaf, 0xf1]); - t.same(crc32(input), expected); - t.end(); -}); - -test('casts to buffer if necessary', function (t) { - var input = 'शीर्षक'; - var expected = Buffer([0x17, 0xb8, 0xaf, 0xf1]); - t.same(crc32(input), expected); - t.end(); -}); - -test('can do signed', function (t) { - var input = 'ham sandwich'; - var expected = -1891873021; - t.same(crc32.signed(input), expected); - t.end(); -}); - -test('can do unsigned', function (t) { - var input = 'bear sandwich'; - var expected = 3711466352; - t.same(crc32.unsigned(input), expected); - t.end(); -}); - - -test('simple crc32 in append mode', function (t) { - var input = [Buffer('hey'), Buffer(' '), Buffer('sup'), Buffer(' '), Buffer('bros')]; - var expected = Buffer([0x47, 0xfa, 0x55, 0x70]); - for (var crc = 0, i = 0; i < input.length; i++) { - crc = crc32(input[i], crc); - } - t.same(crc, expected); - t.end(); -}); - - -test('can do signed in append mode', function (t) { - var input1 = 'ham'; - var input2 = ' '; - var input3 = 'sandwich'; - var expected = -1891873021; - - var crc = crc32.signed(input1); - crc = crc32.signed(input2, crc); - crc = crc32.signed(input3, crc); - - t.same(crc, expected); - t.end(); -}); - -test('can do unsigned in append mode', function (t) { - var input1 = 'bear san'; - var input2 = 'dwich'; - var expected = 3711466352; - - var crc = crc32.unsigned(input1); - crc = crc32.unsigned(input2, crc); - t.same(crc, expected); - t.end(); -}); - diff --git a/node_modules/express/node_modules/commander/History.md b/node_modules/express/node_modules/commander/History.md deleted file mode 100644 index ce046f6f..00000000 --- a/node_modules/express/node_modules/commander/History.md +++ /dev/null @@ -1,174 +0,0 @@ - -1.3.2 / 2013-07-18 -================== - - * add support for sub-commands to co-exist with the original command - -1.3.1 / 2013-07-18 -================== - - * add quick .runningCommand hack so you can opt-out of other logic when running a sub command - -1.3.0 / 2013-07-09 -================== - - * add EACCES error handling - * fix sub-command --help - -1.2.0 / 2013-06-13 -================== - - * allow "-" hyphen as an option argument - * support for RegExp coercion - -1.1.1 / 2012-11-20 -================== - - * add more sub-command padding - * fix .usage() when args are present. Closes #106 - -1.1.0 / 2012-11-16 -================== - - * add git-style executable subcommand support. Closes #94 - -1.0.5 / 2012-10-09 -================== - - * fix `--name` clobbering. Closes #92 - * fix examples/help. Closes #89 - -1.0.4 / 2012-09-03 -================== - - * add `outputHelp()` method. - -1.0.3 / 2012-08-30 -================== - - * remove invalid .version() defaulting - -1.0.2 / 2012-08-24 -================== - - * add `--foo=bar` support [arv] - * fix password on node 0.8.8. Make backward compatible with 0.6 [focusaurus] - -1.0.1 / 2012-08-03 -================== - - * fix issue #56 - * fix tty.setRawMode(mode) was moved to tty.ReadStream#setRawMode() (i.e. process.stdin.setRawMode()) - -1.0.0 / 2012-07-05 -================== - - * add support for optional option descriptions - * add defaulting of `.version()` to package.json's version - -0.6.1 / 2012-06-01 -================== - - * Added: append (yes or no) on confirmation - * Added: allow node.js v0.7.x - -0.6.0 / 2012-04-10 -================== - - * Added `.prompt(obj, callback)` support. Closes #49 - * Added default support to .choose(). Closes #41 - * Fixed the choice example - -0.5.1 / 2011-12-20 -================== - - * Fixed `password()` for recent nodes. Closes #36 - -0.5.0 / 2011-12-04 -================== - - * Added sub-command option support [itay] - -0.4.3 / 2011-12-04 -================== - - * Fixed custom help ordering. Closes #32 - -0.4.2 / 2011-11-24 -================== - - * Added travis support - * Fixed: line-buffered input automatically trimmed. Closes #31 - -0.4.1 / 2011-11-18 -================== - - * Removed listening for "close" on --help - -0.4.0 / 2011-11-15 -================== - - * Added support for `--`. Closes #24 - -0.3.3 / 2011-11-14 -================== - - * Fixed: wait for close event when writing help info [Jerry Hamlet] - -0.3.2 / 2011-11-01 -================== - - * Fixed long flag definitions with values [felixge] - -0.3.1 / 2011-10-31 -================== - - * Changed `--version` short flag to `-V` from `-v` - * Changed `.version()` so it's configurable [felixge] - -0.3.0 / 2011-10-31 -================== - - * Added support for long flags only. Closes #18 - -0.2.1 / 2011-10-24 -================== - - * "node": ">= 0.4.x < 0.7.0". Closes #20 - -0.2.0 / 2011-09-26 -================== - - * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs] - -0.1.0 / 2011-08-24 -================== - - * Added support for custom `--help` output - -0.0.5 / 2011-08-18 -================== - - * Changed: when the user enters nothing prompt for password again - * Fixed issue with passwords beginning with numbers [NuckChorris] - -0.0.4 / 2011-08-15 -================== - - * Fixed `Commander#args` - -0.0.3 / 2011-08-15 -================== - - * Added default option value support - -0.0.2 / 2011-08-15 -================== - - * Added mask support to `Command#password(str[, mask], fn)` - * Added `Command#password(str, fn)` - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/express/node_modules/commander/Readme.md b/node_modules/express/node_modules/commander/Readme.md deleted file mode 100644 index ed0aeb2c..00000000 --- a/node_modules/express/node_modules/commander/Readme.md +++ /dev/null @@ -1,276 +0,0 @@ -# Commander.js - - The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander). - - [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js) - -## Installation - - $ npm install commander - -## Option parsing - - Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('commander'); - -program - .version('0.0.1') - .option('-p, --peppers', 'Add peppers') - .option('-P, --pineapple', 'Add pineapple') - .option('-b, --bbq', 'Add bbq sauce') - .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') - .parse(process.argv); - -console.log('you ordered a pizza with:'); -if (program.peppers) console.log(' - peppers'); -if (program.pineapple) console.log(' - pineapple'); -if (program.bbq) console.log(' - bbq'); -console.log(' - %s cheese', program.cheese); -``` - - Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. - -## Automated --help - - The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free: - -``` - $ ./examples/pizza --help - - Usage: pizza [options] - - Options: - - -V, --version output the version number - -p, --peppers Add peppers - -P, --pineapple Add pineapple - -b, --bbq Add bbq sauce - -c, --cheese Add the specified type of cheese [marble] - -h, --help output usage information - -``` - -## Coercion - -```js -function range(val) { - return val.split('..').map(Number); -} - -function list(val) { - return val.split(','); -} - -program - .version('0.0.1') - .usage('[options] ') - .option('-i, --integer ', 'An integer argument', parseInt) - .option('-f, --float ', 'A float argument', parseFloat) - .option('-r, --range ..', 'A range', range) - .option('-l, --list ', 'A list', list) - .option('-o, --optional [value]', 'An optional value') - .parse(process.argv); - -console.log(' int: %j', program.integer); -console.log(' float: %j', program.float); -console.log(' optional: %j', program.optional); -program.range = program.range || []; -console.log(' range: %j..%j', program.range[0], program.range[1]); -console.log(' list: %j', program.list); -console.log(' args: %j', program.args); -``` - -## Custom help - - You can display arbitrary `-h, --help` information - by listening for "--help". Commander will automatically - exit once you are done so that the remainder of your program - does not execute causing undesired behaviours, for example - in the following executable "stuff" will not output when - `--help` is used. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('../'); - -function list(val) { - return val.split(',').map(Number); -} - -program - .version('0.0.1') - .option('-f, --foo', 'enable some foo') - .option('-b, --bar', 'enable some bar') - .option('-B, --baz', 'enable some baz'); - -// must be before .parse() since -// node's emit() is immediate - -program.on('--help', function(){ - console.log(' Examples:'); - console.log(''); - console.log(' $ custom-help --help'); - console.log(' $ custom-help -h'); - console.log(''); -}); - -program.parse(process.argv); - -console.log('stuff'); -``` - -yielding the following help output: - -``` - -Usage: custom-help [options] - -Options: - - -h, --help output usage information - -V, --version output the version number - -f, --foo enable some foo - -b, --bar enable some bar - -B, --baz enable some baz - -Examples: - - $ custom-help --help - $ custom-help -h - -``` - -## .prompt(msg, fn) - - Single-line prompt: - -```js -program.prompt('name: ', function(name){ - console.log('hi %s', name); -}); -``` - - Multi-line prompt: - -```js -program.prompt('description:', function(name){ - console.log('hi %s', name); -}); -``` - - Coercion: - -```js -program.prompt('Age: ', Number, function(age){ - console.log('age: %j', age); -}); -``` - -```js -program.prompt('Birthdate: ', Date, function(date){ - console.log('date: %s', date); -}); -``` - -```js -program.prompt('Email: ', /^.+@.+\..+$/, function(email){ - console.log('email: %j', email); -}); -``` - -## .password(msg[, mask], fn) - -Prompt for password without echoing: - -```js -program.password('Password: ', function(pass){ - console.log('got "%s"', pass); - process.stdin.destroy(); -}); -``` - -Prompt for password with mask char "*": - -```js -program.password('Password: ', '*', function(pass){ - console.log('got "%s"', pass); - process.stdin.destroy(); -}); -``` - -## .confirm(msg, fn) - - Confirm with the given `msg`: - -```js -program.confirm('continue? ', function(ok){ - console.log(' got %j', ok); -}); -``` - -## .choose(list, fn) - - Let the user choose from a `list`: - -```js -var list = ['tobi', 'loki', 'jane', 'manny', 'luna']; - -console.log('Choose the coolest pet:'); -program.choose(list, function(i){ - console.log('you chose %d "%s"', i, list[i]); -}); -``` - -## .outputHelp() - - Output help information without exiting. - -## .help() - - Output help information and exit immediately. - -## Links - - - [API documentation](http://visionmedia.github.com/commander.js/) - - [ascii tables](https://github.com/LearnBoost/cli-table) - - [progress bars](https://github.com/visionmedia/node-progress) - - [more progress bars](https://github.com/substack/node-multimeter) - - [examples](https://github.com/visionmedia/commander.js/tree/master/examples) - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> - -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/express/node_modules/commander/index.js b/node_modules/express/node_modules/commander/index.js deleted file mode 100644 index d9634e34..00000000 --- a/node_modules/express/node_modules/commander/index.js +++ /dev/null @@ -1,1160 +0,0 @@ -/*! - * commander - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , spawn = require('child_process').spawn - , keypress = require('keypress') - , fs = require('fs') - , exists = fs.existsSync - , path = require('path') - , tty = require('tty') - , dirname = path.dirname - , basename = path.basename; - -/** - * Expose the root command. - */ - -exports = module.exports = new Command; - -/** - * Expose `Command`. - */ - -exports.Command = Command; - -/** - * Expose `Option`. - */ - -exports.Option = Option; - -/** - * Initialize a new `Option` with the given `flags` and `description`. - * - * @param {String} flags - * @param {String} description - * @api public - */ - -function Option(flags, description) { - this.flags = flags; - this.required = ~flags.indexOf('<'); - this.optional = ~flags.indexOf('['); - this.bool = !~flags.indexOf('-no-'); - flags = flags.split(/[ ,|]+/); - if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift(); - this.long = flags.shift(); - this.description = description || ''; -} - -/** - * Return option name. - * - * @return {String} - * @api private - */ - -Option.prototype.name = function(){ - return this.long - .replace('--', '') - .replace('no-', ''); -}; - -/** - * Check if `arg` matches the short or long flag. - * - * @param {String} arg - * @return {Boolean} - * @api private - */ - -Option.prototype.is = function(arg){ - return arg == this.short - || arg == this.long; -}; - -/** - * Initialize a new `Command`. - * - * @param {String} name - * @api public - */ - -function Command(name) { - this.commands = []; - this.options = []; - this._execs = []; - this._args = []; - this._name = name; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Command.prototype.__proto__ = EventEmitter.prototype; - -/** - * Add command `name`. - * - * The `.action()` callback is invoked when the - * command `name` is specified via __ARGV__, - * and the remaining arguments are applied to the - * function for access. - * - * When the `name` is "*" an un-matched command - * will be passed as the first arg, followed by - * the rest of __ARGV__ remaining. - * - * Examples: - * - * program - * .version('0.0.1') - * .option('-C, --chdir ', 'change the working directory') - * .option('-c, --config ', 'set config path. defaults to ./deploy.conf') - * .option('-T, --no-tests', 'ignore test hook') - * - * program - * .command('setup') - * .description('run remote setup commands') - * .action(function(){ - * console.log('setup'); - * }); - * - * program - * .command('exec ') - * .description('run the given remote command') - * .action(function(cmd){ - * console.log('exec "%s"', cmd); - * }); - * - * program - * .command('*') - * .description('deploy the given env') - * .action(function(env){ - * console.log('deploying "%s"', env); - * }); - * - * program.parse(process.argv); - * - * @param {String} name - * @param {String} [desc] - * @return {Command} the new command - * @api public - */ - -Command.prototype.command = function(name, desc){ - var args = name.split(/ +/); - var cmd = new Command(args.shift()); - if (desc) cmd.description(desc); - if (desc) this.executables = true; - if (desc) this._execs[cmd._name] = true; - this.commands.push(cmd); - cmd.parseExpectedArgs(args); - cmd.parent = this; - if (desc) return this; - return cmd; -}; - -/** - * Add an implicit `help [cmd]` subcommand - * which invokes `--help` for the given command. - * - * @api private - */ - -Command.prototype.addImplicitHelpCommand = function() { - this.command('help [cmd]', 'display help for [cmd]'); -}; - -/** - * Parse expected `args`. - * - * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. - * - * @param {Array} args - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parseExpectedArgs = function(args){ - if (!args.length) return; - var self = this; - args.forEach(function(arg){ - switch (arg[0]) { - case '<': - self._args.push({ required: true, name: arg.slice(1, -1) }); - break; - case '[': - self._args.push({ required: false, name: arg.slice(1, -1) }); - break; - } - }); - return this; -}; - -/** - * Register callback `fn` for the command. - * - * Examples: - * - * program - * .command('help') - * .description('display verbose help') - * .action(function(){ - * // output help here - * }); - * - * @param {Function} fn - * @return {Command} for chaining - * @api public - */ - -Command.prototype.action = function(fn){ - var self = this; - this.parent.on(this._name, function(args, unknown){ - // Parse any so-far unknown options - unknown = unknown || []; - var parsed = self.parseOptions(unknown); - - // Output help if necessary - outputHelpIfNecessary(self, parsed.unknown); - - // If there are still any unknown options, then we simply - // die, unless someone asked for help, in which case we give it - // to them, and then we die. - if (parsed.unknown.length > 0) { - self.unknownOption(parsed.unknown[0]); - } - - // Leftover arguments need to be pushed back. Fixes issue #56 - if (parsed.args.length) args = parsed.args.concat(args); - - self._args.forEach(function(arg, i){ - if (arg.required && null == args[i]) { - self.missingArgument(arg.name); - } - }); - - // Always append ourselves to the end of the arguments, - // to make sure we match the number of arguments the user - // expects - if (self._args.length) { - args[self._args.length] = self; - } else { - args.push(self); - } - - fn.apply(this, args); - }); - return this; -}; - -/** - * Define option with `flags`, `description` and optional - * coercion `fn`. - * - * The `flags` string should contain both the short and long flags, - * separated by comma, a pipe or space. The following are all valid - * all will output this way when `--help` is used. - * - * "-p, --pepper" - * "-p|--pepper" - * "-p --pepper" - * - * Examples: - * - * // simple boolean defaulting to false - * program.option('-p, --pepper', 'add pepper'); - * - * --pepper - * program.pepper - * // => Boolean - * - * // simple boolean defaulting to false - * program.option('-C, --no-cheese', 'remove cheese'); - * - * program.cheese - * // => true - * - * --no-cheese - * program.cheese - * // => true - * - * // required argument - * program.option('-C, --chdir ', 'change the working directory'); - * - * --chdir /tmp - * program.chdir - * // => "/tmp" - * - * // optional argument - * program.option('-c, --cheese [type]', 'add cheese [marble]'); - * - * @param {String} flags - * @param {String} description - * @param {Function|Mixed} fn or default - * @param {Mixed} defaultValue - * @return {Command} for chaining - * @api public - */ - -Command.prototype.option = function(flags, description, fn, defaultValue){ - var self = this - , option = new Option(flags, description) - , oname = option.name() - , name = camelcase(oname); - - // default as 3rd arg - if ('function' != typeof fn) defaultValue = fn, fn = null; - - // preassign default value only for --no-*, [optional], or - if (false == option.bool || option.optional || option.required) { - // when --no-* we make sure default is true - if (false == option.bool) defaultValue = true; - // preassign only if we have a default - if (undefined !== defaultValue) self[name] = defaultValue; - } - - // register the option - this.options.push(option); - - // when it's passed assign the value - // and conditionally invoke the callback - this.on(oname, function(val){ - // coercion - if (null != val && fn) val = fn(val); - - // unassigned or bool - if ('boolean' == typeof self[name] || 'undefined' == typeof self[name]) { - // if no value, bool true, and we have a default, then use it! - if (null == val) { - self[name] = option.bool - ? defaultValue || true - : false; - } else { - self[name] = val; - } - } else if (null !== val) { - // reassign - self[name] = val; - } - }); - - return this; -}; - -/** - * Parse `argv`, settings options and invoking commands when defined. - * - * @param {Array} argv - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parse = function(argv){ - // implicit help - if (this.executables) this.addImplicitHelpCommand(); - - // store raw args - this.rawArgs = argv; - - // guess name - this._name = this._name || basename(argv[1]); - - // process argv - var parsed = this.parseOptions(this.normalize(argv.slice(2))); - var args = this.args = parsed.args; - - var result = this.parseArgs(this.args, parsed.unknown); - - // executable sub-commands - var name = result.args[0]; - if (this._execs[name]) return this.executeSubCommand(argv, args, parsed.unknown); - - return result; -}; - -/** - * Execute a sub-command executable. - * - * @param {Array} argv - * @param {Array} args - * @param {Array} unknown - * @api private - */ - -Command.prototype.executeSubCommand = function(argv, args, unknown) { - args = args.concat(unknown); - - if (!args.length) this.help(); - if ('help' == args[0] && 1 == args.length) this.help(); - - // --help - if ('help' == args[0]) { - args[0] = args[1]; - args[1] = '--help'; - } - - // executable - var dir = dirname(argv[1]); - var bin = basename(argv[1]) + '-' + args[0]; - - // check for ./ first - var local = path.join(dir, bin); - - // run it - args = args.slice(1); - var proc = spawn(local, args, { stdio: 'inherit', customFds: [0, 1, 2] }); - proc.on('error', function(err){ - if (err.code == "ENOENT") { - console.error('\n %s(1) does not exist, try --help\n', bin); - } else if (err.code == "EACCES") { - console.error('\n %s(1) not executable. try chmod or run with root\n', bin); - } - }); - - this.runningCommand = proc; -}; - -/** - * Normalize `args`, splitting joined short flags. For example - * the arg "-abc" is equivalent to "-a -b -c". - * This also normalizes equal sign and splits "--abc=def" into "--abc def". - * - * @param {Array} args - * @return {Array} - * @api private - */ - -Command.prototype.normalize = function(args){ - var ret = [] - , arg - , index; - - for (var i = 0, len = args.length; i < len; ++i) { - arg = args[i]; - if (arg.length > 1 && '-' == arg[0] && '-' != arg[1]) { - arg.slice(1).split('').forEach(function(c){ - ret.push('-' + c); - }); - } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) { - ret.push(arg.slice(0, index), arg.slice(index + 1)); - } else { - ret.push(arg); - } - } - - return ret; -}; - -/** - * Parse command `args`. - * - * When listener(s) are available those - * callbacks are invoked, otherwise the "*" - * event is emitted and those actions are invoked. - * - * @param {Array} args - * @return {Command} for chaining - * @api private - */ - -Command.prototype.parseArgs = function(args, unknown){ - var cmds = this.commands - , len = cmds.length - , name; - - if (args.length) { - name = args[0]; - if (this.listeners(name).length) { - this.emit(args.shift(), args, unknown); - } else { - this.emit('*', args); - } - } else { - outputHelpIfNecessary(this, unknown); - - // If there were no args and we have unknown options, - // then they are extraneous and we need to error. - if (unknown.length > 0) { - this.unknownOption(unknown[0]); - } - } - - return this; -}; - -/** - * Return an option matching `arg` if any. - * - * @param {String} arg - * @return {Option} - * @api private - */ - -Command.prototype.optionFor = function(arg){ - for (var i = 0, len = this.options.length; i < len; ++i) { - if (this.options[i].is(arg)) { - return this.options[i]; - } - } -}; - -/** - * Parse options from `argv` returning `argv` - * void of these options. - * - * @param {Array} argv - * @return {Array} - * @api public - */ - -Command.prototype.parseOptions = function(argv){ - var args = [] - , len = argv.length - , literal - , option - , arg; - - var unknownOptions = []; - - // parse options - for (var i = 0; i < len; ++i) { - arg = argv[i]; - - // literal args after -- - if ('--' == arg) { - literal = true; - continue; - } - - if (literal) { - args.push(arg); - continue; - } - - // find matching Option - option = this.optionFor(arg); - - // option is defined - if (option) { - // requires arg - if (option.required) { - arg = argv[++i]; - if (null == arg) return this.optionMissingArgument(option); - if ('-' == arg[0] && '-' != arg) return this.optionMissingArgument(option, arg); - this.emit(option.name(), arg); - // optional arg - } else if (option.optional) { - arg = argv[i+1]; - if (null == arg || ('-' == arg[0] && '-' != arg)) { - arg = null; - } else { - ++i; - } - this.emit(option.name(), arg); - // bool - } else { - this.emit(option.name()); - } - continue; - } - - // looks like an option - if (arg.length > 1 && '-' == arg[0]) { - unknownOptions.push(arg); - - // If the next argument looks like it might be - // an argument for this option, we pass it on. - // If it isn't, then it'll simply be ignored - if (argv[i+1] && '-' != argv[i+1][0]) { - unknownOptions.push(argv[++i]); - } - continue; - } - - // arg - args.push(arg); - } - - return { args: args, unknown: unknownOptions }; -}; - -/** - * Argument `name` is missing. - * - * @param {String} name - * @api private - */ - -Command.prototype.missingArgument = function(name){ - console.error(); - console.error(" error: missing required argument `%s'", name); - console.error(); - process.exit(1); -}; - -/** - * `Option` is missing an argument, but received `flag` or nothing. - * - * @param {String} option - * @param {String} flag - * @api private - */ - -Command.prototype.optionMissingArgument = function(option, flag){ - console.error(); - if (flag) { - console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag); - } else { - console.error(" error: option `%s' argument missing", option.flags); - } - console.error(); - process.exit(1); -}; - -/** - * Unknown option `flag`. - * - * @param {String} flag - * @api private - */ - -Command.prototype.unknownOption = function(flag){ - console.error(); - console.error(" error: unknown option `%s'", flag); - console.error(); - process.exit(1); -}; - - -/** - * Set the program version to `str`. - * - * This method auto-registers the "-V, --version" flag - * which will print the version number when passed. - * - * @param {String} str - * @param {String} flags - * @return {Command} for chaining - * @api public - */ - -Command.prototype.version = function(str, flags){ - if (0 == arguments.length) return this._version; - this._version = str; - flags = flags || '-V, --version'; - this.option(flags, 'output the version number'); - this.on('version', function(){ - console.log(str); - process.exit(0); - }); - return this; -}; - -/** - * Set the description `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.description = function(str){ - if (0 == arguments.length) return this._description; - this._description = str; - return this; -}; - -/** - * Set / get the command usage `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.usage = function(str){ - var args = this._args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }); - - var usage = '[options' - + (this.commands.length ? '] [command' : '') - + ']' - + (this._args.length ? ' ' + args : ''); - - if (0 == arguments.length) return this._usage || usage; - this._usage = str; - - return this; -}; - -/** - * Return the largest option length. - * - * @return {Number} - * @api private - */ - -Command.prototype.largestOptionLength = function(){ - return this.options.reduce(function(max, option){ - return Math.max(max, option.flags.length); - }, 0); -}; - -/** - * Return help for options. - * - * @return {String} - * @api private - */ - -Command.prototype.optionHelp = function(){ - var width = this.largestOptionLength(); - - // Prepend the help information - return [pad('-h, --help', width) + ' ' + 'output usage information'] - .concat(this.options.map(function(option){ - return pad(option.flags, width) - + ' ' + option.description; - })) - .join('\n'); -}; - -/** - * Return command help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.commandHelp = function(){ - if (!this.commands.length) return ''; - return [ - '' - , ' Commands:' - , '' - , this.commands.map(function(cmd){ - var args = cmd._args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }).join(' '); - - return pad(cmd._name - + (cmd.options.length - ? ' [options]' - : '') + ' ' + args, 22) - + (cmd.description() - ? ' ' + cmd.description() - : ''); - }).join('\n').replace(/^/gm, ' ') - , '' - ].join('\n'); -}; - -/** - * Return program help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.helpInformation = function(){ - return [ - '' - , ' Usage: ' + this._name + ' ' + this.usage() - , '' + this.commandHelp() - , ' Options:' - , '' - , '' + this.optionHelp().replace(/^/gm, ' ') - , '' - , '' - ].join('\n'); -}; - -/** - * Prompt for a `Number`. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptForNumber = function(str, fn){ - var self = this; - this.promptSingleLine(str, function parseNumber(val){ - val = Number(val); - if (isNaN(val)) return self.promptSingleLine(str + '(must be a number) ', parseNumber); - fn(val); - }); -}; - -/** - * Prompt for a `Date`. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptForDate = function(str, fn){ - var self = this; - this.promptSingleLine(str, function parseDate(val){ - val = new Date(val); - if (isNaN(val.getTime())) return self.promptSingleLine(str + '(must be a date) ', parseDate); - fn(val); - }); -}; - - -/** - * Prompt for a `Regular Expression`. - * - * @param {String} str - * @param {Object} pattern regular expression object to test - * @param {Function} fn - * @api private - */ - -Command.prototype.promptForRegexp = function(str, pattern, fn){ - var self = this; - this.promptSingleLine(str, function parseRegexp(val){ - if(!pattern.test(val)) return self.promptSingleLine(str + '(regular expression mismatch) ', parseRegexp); - fn(val); - }); -}; - - -/** - * Single-line prompt. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptSingleLine = function(str, fn){ - // determine if the 2nd argument is a regular expression - if (arguments[1].global !== undefined && arguments[1].multiline !== undefined) { - return this.promptForRegexp(str, arguments[1], arguments[2]); - } else if ('function' == typeof arguments[2]) { - return this['promptFor' + (fn.name || fn)](str, arguments[2]); - } - - process.stdout.write(str); - process.stdin.setEncoding('utf8'); - process.stdin.once('data', function(val){ - fn(val.trim()); - }).resume(); -}; - -/** - * Multi-line prompt. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptMultiLine = function(str, fn){ - var buf = []; - console.log(str); - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function(val){ - if ('\n' == val || '\r\n' == val) { - process.stdin.removeAllListeners('data'); - fn(buf.join('\n')); - } else { - buf.push(val.trimRight()); - } - }).resume(); -}; - -/** - * Prompt `str` and callback `fn(val)` - * - * Commander supports single-line and multi-line prompts. - * To issue a single-line prompt simply add white-space - * to the end of `str`, something like "name: ", whereas - * for a multi-line prompt omit this "description:". - * - * - * Examples: - * - * program.prompt('Username: ', function(name){ - * console.log('hi %s', name); - * }); - * - * program.prompt('Description:', function(desc){ - * console.log('description was "%s"', desc.trim()); - * }); - * - * @param {String|Object} str - * @param {Function} fn - * @api public - */ - -Command.prototype.prompt = function(str, fn){ - var self = this; - if ('string' == typeof str) { - if (/ $/.test(str)) return this.promptSingleLine.apply(this, arguments); - this.promptMultiLine(str, fn); - } else { - var keys = Object.keys(str) - , obj = {}; - - function next() { - var key = keys.shift() - , label = str[key]; - - if (!key) return fn(obj); - self.prompt(label, function(val){ - obj[key] = val; - next(); - }); - } - - next(); - } -}; - -/** - * Prompt for password with `str`, `mask` char and callback `fn(val)`. - * - * The mask string defaults to '', aka no output is - * written while typing, you may want to use "*" etc. - * - * Examples: - * - * program.password('Password: ', function(pass){ - * console.log('got "%s"', pass); - * process.stdin.destroy(); - * }); - * - * program.password('Password: ', '*', function(pass){ - * console.log('got "%s"', pass); - * process.stdin.destroy(); - * }); - * - * @param {String} str - * @param {String} mask - * @param {Function} fn - * @api public - */ - -Command.prototype.password = function(str, mask, fn){ - var self = this - , buf = ''; - - // default mask - if ('function' == typeof mask) { - fn = mask; - mask = ''; - } - - keypress(process.stdin); - - function setRawMode(mode) { - if (process.stdin.setRawMode) { - process.stdin.setRawMode(mode); - } else { - tty.setRawMode(mode); - } - }; - setRawMode(true); - process.stdout.write(str); - - // keypress - process.stdin.on('keypress', function(c, key){ - if (key && 'enter' == key.name) { - console.log(); - process.stdin.pause(); - process.stdin.removeAllListeners('keypress'); - setRawMode(false); - if (!buf.trim().length) return self.password(str, mask, fn); - fn(buf); - return; - } - - if (key && key.ctrl && 'c' == key.name) { - console.log('%s', buf); - process.exit(); - } - - process.stdout.write(mask); - buf += c; - }).resume(); -}; - -/** - * Confirmation prompt with `str` and callback `fn(bool)` - * - * Examples: - * - * program.confirm('continue? ', function(ok){ - * console.log(' got %j', ok); - * process.stdin.destroy(); - * }); - * - * @param {String} str - * @param {Function} fn - * @api public - */ - - -Command.prototype.confirm = function(str, fn, verbose){ - var self = this; - this.prompt(str, function(ok){ - if (!ok.trim()) { - if (!verbose) str += '(yes or no) '; - return self.confirm(str, fn, true); - } - fn(parseBool(ok)); - }); -}; - -/** - * Choice prompt with `list` of items and callback `fn(index, item)` - * - * Examples: - * - * var list = ['tobi', 'loki', 'jane', 'manny', 'luna']; - * - * console.log('Choose the coolest pet:'); - * program.choose(list, function(i){ - * console.log('you chose %d "%s"', i, list[i]); - * process.stdin.destroy(); - * }); - * - * @param {Array} list - * @param {Number|Function} index or fn - * @param {Function} fn - * @api public - */ - -Command.prototype.choose = function(list, index, fn){ - var self = this - , hasDefault = 'number' == typeof index; - - if (!hasDefault) { - fn = index; - index = null; - } - - list.forEach(function(item, i){ - if (hasDefault && i == index) { - console.log('* %d) %s', i + 1, item); - } else { - console.log(' %d) %s', i + 1, item); - } - }); - - function again() { - self.prompt(' : ', function(val){ - val = parseInt(val, 10) - 1; - if (hasDefault && isNaN(val)) val = index; - - if (null == list[val]) { - again(); - } else { - fn(val, list[val]); - } - }); - } - - again(); -}; - - -/** - * Output help information for this command - * - * @api public - */ - -Command.prototype.outputHelp = function(){ - process.stdout.write(this.helpInformation()); - this.emit('--help'); -}; - -/** - * Output help information and exit. - * - * @api public - */ - -Command.prototype.help = function(){ - this.outputHelp(); - process.exit(); -}; - -/** - * Camel-case the given `flag` - * - * @param {String} flag - * @return {String} - * @api private - */ - -function camelcase(flag) { - return flag.split('-').reduce(function(str, word){ - return str + word[0].toUpperCase() + word.slice(1); - }); -} - -/** - * Parse a boolean `str`. - * - * @param {String} str - * @return {Boolean} - * @api private - */ - -function parseBool(str) { - return /^y|yes|ok|true$/i.test(str); -} - -/** - * Pad `str` to `width`. - * - * @param {String} str - * @param {Number} width - * @return {String} - * @api private - */ - -function pad(str, width) { - var len = Math.max(0, width - str.length); - return str + Array(len + 1).join(' '); -} - -/** - * Output help information if necessary - * - * @param {Command} command to output help for - * @param {Array} array of options to search for -h or --help - * @api private - */ - -function outputHelpIfNecessary(cmd, options) { - options = options || []; - for (var i = 0; i < options.length; i++) { - if (options[i] == '--help' || options[i] == '-h') { - cmd.outputHelp(); - process.exit(0); - } - } -} diff --git a/node_modules/express/node_modules/commander/node_modules/keypress/README.md b/node_modules/express/node_modules/commander/node_modules/keypress/README.md deleted file mode 100644 index a768e8f5..00000000 --- a/node_modules/express/node_modules/commander/node_modules/keypress/README.md +++ /dev/null @@ -1,101 +0,0 @@ -keypress -======== -### Make any Node ReadableStream emit "keypress" events - - -Previous to Node `v0.8.x`, there was an undocumented `"keypress"` event that -`process.stdin` would emit when it was a TTY. Some people discovered this hidden -gem, and started using it in their own code. - -Now in Node `v0.8.x`, this `"keypress"` event does not get emitted by default, -but rather only when it is being used in conjuction with the `readline` (or by -extension, the `repl`) module. - -This module is the exact logic from the node `v0.8.x` releases ripped out into its -own module. - -__Bonus:__ Now with mouse support! - -Installation ------------- - -Install with `npm`: - -``` bash -$ npm install keypress -``` - -Or add it to the `"dependencies"` section of your _package.json_ file. - - -Example -------- - -#### Listening for "keypress" events - -``` js -var keypress = require('keypress'); - -// make `process.stdin` begin emitting "keypress" events -keypress(process.stdin); - -// listen for the "keypress" event -process.stdin.on('keypress', function (ch, key) { - console.log('got "keypress"', key); - if (key && key.ctrl && key.name == 'c') { - process.stdin.pause(); - } -}); - -process.stdin.setRawMode(true); -process.stdin.resume(); -``` - -#### Listening for "mousepress" events - -``` js -var keypress = require('keypress'); - -// make `process.stdin` begin emitting "mousepress" (and "keypress") events -keypress(process.stdin); - -// you must enable the mouse events before they will begin firing -keypress.enableMouse(process.stdout); - -process.stdin.on('mousepress', function (info) { - console.log('got "mousepress" event at %d x %d', info.x, info.y); -}); - -process.on('exit', function () { - // disable mouse on exit, so that the state - // is back to normal for the terminal - keypress.disableMouse(process.stdout); -}); -``` - - -License -------- - -(The MIT License) - -Copyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net> - -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/express/node_modules/commander/node_modules/keypress/index.js b/node_modules/express/node_modules/commander/node_modules/keypress/index.js deleted file mode 100644 index c2ba488b..00000000 --- a/node_modules/express/node_modules/commander/node_modules/keypress/index.js +++ /dev/null @@ -1,346 +0,0 @@ - -/** - * This module offers the internal "keypress" functionality from node-core's - * `readline` module, for your own programs and modules to use. - * - * Usage: - * - * require('keypress')(process.stdin); - * - * process.stdin.on('keypress', function (ch, key) { - * console.log(ch, key); - * if (key.ctrl && key.name == 'c') { - * process.stdin.pause(); - * } - * }); - * proces.stdin.resume(); - */ -var exports = module.exports = keypress; - -exports.enableMouse = function (stream) { - stream.write('\x1b' +'[?1000h') -} - -exports.disableMouse = function (stream) { - stream.write('\x1b' +'[?1000l') -} - - -/** - * accepts a readable Stream instance and makes it emit "keypress" events - */ - -function keypress(stream) { - if (isEmittingKeypress(stream)) return; - stream._emitKeypress = true; - - function onData(b) { - if (stream.listeners('keypress').length > 0) { - emitKey(stream, b); - } else { - // Nobody's watching anyway - stream.removeListener('data', onData); - stream.on('newListener', onNewListener); - } - } - - function onNewListener(event) { - if (event == 'keypress') { - stream.on('data', onData); - stream.removeListener('newListener', onNewListener); - } - } - - if (stream.listeners('keypress').length > 0) { - stream.on('data', onData); - } else { - stream.on('newListener', onNewListener); - } -} - -/** - * Returns `true` if the stream is already emitting "keypress" events. - * `false` otherwise. - */ - -function isEmittingKeypress(stream) { - var rtn = stream._emitKeypress; - if (!rtn) { - // hack: check for the v0.6.x "data" event - stream.listeners('data').forEach(function (l) { - if (l.name == 'onData' && /emitKey/.test(l.toString())) { - rtn = true; - stream._emitKeypress = true; - } - }); - } - if (!rtn) { - // hack: check for the v0.6.x "newListener" event - stream.listeners('newListener').forEach(function (l) { - if (l.name == 'onNewListener' && /keypress/.test(l.toString())) { - rtn = true; - stream._emitKeypress = true; - } - }); - } - return rtn; -} - - -/* - Some patterns seen in terminal key escape codes, derived from combos seen - at http://www.midnight-commander.org/browser/lib/tty/key.c - - ESC letter - ESC [ letter - ESC [ modifier letter - ESC [ 1 ; modifier letter - ESC [ num char - ESC [ num ; modifier char - ESC O letter - ESC O modifier letter - ESC O 1 ; modifier letter - ESC N letter - ESC [ [ num ; modifier char - ESC [ [ 1 ; modifier letter - ESC ESC [ num char - ESC ESC O letter - - - char is usually ~ but $ and ^ also happen with rxvt - - modifier is 1 + - (shift * 1) + - (left_alt * 2) + - (ctrl * 4) + - (right_alt * 8) - - two leading ESCs apparently mean the same as one leading ESC -*/ - -// Regexes used for ansi escape code splitting -var metaKeyCodeRe = /^(?:\x1b)([a-zA-Z0-9])$/; -var functionKeyCodeRe = - /^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/; - -function emitKey(stream, s) { - var ch, - key = { - name: undefined, - ctrl: false, - meta: false, - shift: false - }, - parts; - - if (Buffer.isBuffer(s)) { - if (s[0] > 127 && s[1] === undefined) { - s[0] -= 128; - s = '\x1b' + s.toString(stream.encoding || 'utf-8'); - } else { - s = s.toString(stream.encoding || 'utf-8'); - } - } - - key.sequence = s; - - if (s === '\r' || s === '\n') { - // enter - key.name = 'enter'; - - } else if (s === '\t') { - // tab - key.name = 'tab'; - - } else if (s === '\b' || s === '\x7f' || - s === '\x1b\x7f' || s === '\x1b\b') { - // backspace or ctrl+h - key.name = 'backspace'; - key.meta = (s.charAt(0) === '\x1b'); - - } else if (s === '\x1b' || s === '\x1b\x1b') { - // escape key - key.name = 'escape'; - key.meta = (s.length === 2); - - } else if (s === ' ' || s === '\x1b ') { - key.name = 'space'; - key.meta = (s.length === 2); - - } else if (s <= '\x1a') { - // ctrl+letter - key.name = String.fromCharCode(s.charCodeAt(0) + 'a'.charCodeAt(0) - 1); - key.ctrl = true; - - } else if (s.length === 1 && s >= 'a' && s <= 'z') { - // lowercase letter - key.name = s; - - } else if (s.length === 1 && s >= 'A' && s <= 'Z') { - // shift+letter - key.name = s.toLowerCase(); - key.shift = true; - - } else if (parts = metaKeyCodeRe.exec(s)) { - // meta+character key - key.name = parts[1].toLowerCase(); - key.meta = true; - key.shift = /^[A-Z]$/.test(parts[1]); - - } else if (parts = functionKeyCodeRe.exec(s)) { - // ansi escape sequence - - // reassemble the key code leaving out leading \x1b's, - // the modifier key bitflag and any meaningless "1;" sequence - var code = (parts[1] || '') + (parts[2] || '') + - (parts[4] || '') + (parts[6] || ''), - modifier = (parts[3] || parts[5] || 1) - 1; - - // Parse the key modifier - key.ctrl = !!(modifier & 4); - key.meta = !!(modifier & 10); - key.shift = !!(modifier & 1); - key.code = code; - - // Parse the key itself - switch (code) { - /* xterm/gnome ESC O letter */ - case 'OP': key.name = 'f1'; break; - case 'OQ': key.name = 'f2'; break; - case 'OR': key.name = 'f3'; break; - case 'OS': key.name = 'f4'; break; - - /* xterm/rxvt ESC [ number ~ */ - case '[11~': key.name = 'f1'; break; - case '[12~': key.name = 'f2'; break; - case '[13~': key.name = 'f3'; break; - case '[14~': key.name = 'f4'; break; - - /* from Cygwin and used in libuv */ - case '[[A': key.name = 'f1'; break; - case '[[B': key.name = 'f2'; break; - case '[[C': key.name = 'f3'; break; - case '[[D': key.name = 'f4'; break; - case '[[E': key.name = 'f5'; break; - - /* common */ - case '[15~': key.name = 'f5'; break; - case '[17~': key.name = 'f6'; break; - case '[18~': key.name = 'f7'; break; - case '[19~': key.name = 'f8'; break; - case '[20~': key.name = 'f9'; break; - case '[21~': key.name = 'f10'; break; - case '[23~': key.name = 'f11'; break; - case '[24~': key.name = 'f12'; break; - - /* xterm ESC [ letter */ - case '[A': key.name = 'up'; break; - case '[B': key.name = 'down'; break; - case '[C': key.name = 'right'; break; - case '[D': key.name = 'left'; break; - case '[E': key.name = 'clear'; break; - case '[F': key.name = 'end'; break; - case '[H': key.name = 'home'; break; - - /* xterm/gnome ESC O letter */ - case 'OA': key.name = 'up'; break; - case 'OB': key.name = 'down'; break; - case 'OC': key.name = 'right'; break; - case 'OD': key.name = 'left'; break; - case 'OE': key.name = 'clear'; break; - case 'OF': key.name = 'end'; break; - case 'OH': key.name = 'home'; break; - - /* xterm/rxvt ESC [ number ~ */ - case '[1~': key.name = 'home'; break; - case '[2~': key.name = 'insert'; break; - case '[3~': key.name = 'delete'; break; - case '[4~': key.name = 'end'; break; - case '[5~': key.name = 'pageup'; break; - case '[6~': key.name = 'pagedown'; break; - - /* putty */ - case '[[5~': key.name = 'pageup'; break; - case '[[6~': key.name = 'pagedown'; break; - - /* rxvt */ - case '[7~': key.name = 'home'; break; - case '[8~': key.name = 'end'; break; - - /* rxvt keys with modifiers */ - case '[a': key.name = 'up'; key.shift = true; break; - case '[b': key.name = 'down'; key.shift = true; break; - case '[c': key.name = 'right'; key.shift = true; break; - case '[d': key.name = 'left'; key.shift = true; break; - case '[e': key.name = 'clear'; key.shift = true; break; - - case '[2$': key.name = 'insert'; key.shift = true; break; - case '[3$': key.name = 'delete'; key.shift = true; break; - case '[5$': key.name = 'pageup'; key.shift = true; break; - case '[6$': key.name = 'pagedown'; key.shift = true; break; - case '[7$': key.name = 'home'; key.shift = true; break; - case '[8$': key.name = 'end'; key.shift = true; break; - - case 'Oa': key.name = 'up'; key.ctrl = true; break; - case 'Ob': key.name = 'down'; key.ctrl = true; break; - case 'Oc': key.name = 'right'; key.ctrl = true; break; - case 'Od': key.name = 'left'; key.ctrl = true; break; - case 'Oe': key.name = 'clear'; key.ctrl = true; break; - - case '[2^': key.name = 'insert'; key.ctrl = true; break; - case '[3^': key.name = 'delete'; key.ctrl = true; break; - case '[5^': key.name = 'pageup'; key.ctrl = true; break; - case '[6^': key.name = 'pagedown'; key.ctrl = true; break; - case '[7^': key.name = 'home'; key.ctrl = true; break; - case '[8^': key.name = 'end'; key.ctrl = true; break; - - /* misc. */ - case '[Z': key.name = 'tab'; key.shift = true; break; - default: key.name = 'undefined'; break; - - } - } else if (s.length > 1 && s[0] !== '\x1b') { - // Got a longer-than-one string of characters. - // Probably a paste, since it wasn't a control sequence. - Array.prototype.forEach.call(s, function(c) { - emitKey(stream, c); - }); - return; - } - - if (key.code == '[M') { - key.name = 'mouse'; - var s = key.sequence; - var b = s.charCodeAt(3); - key.x = s.charCodeAt(4) - 040; - key.y = s.charCodeAt(5) - 040; - - key.scroll = 0; - - key.ctrl = !!(1<<4 & b); - key.meta = !!(1<<3 & b); - key.shift = !!(1<<2 & b); - - key.release = (3 & b) === 3; - - if (1<<6 & b) { //scroll - key.scroll = 1 & b ? 1 : -1; - } - - if (!key.release && !key.scroll) { - key.button = b & 3; - } - } - - // Don't emit a key if no name was found - if (key.name === undefined) { - key = undefined; - } - - if (s.length === 1) { - ch = s; - } - - if (key && key.name == 'mouse') { - stream.emit('mousepress', key) - } else if (key || ch) { - stream.emit('keypress', ch, key); - } -} diff --git a/node_modules/express/node_modules/commander/node_modules/keypress/package.json b/node_modules/express/node_modules/commander/node_modules/keypress/package.json deleted file mode 100644 index c5462052..00000000 --- a/node_modules/express/node_modules/commander/node_modules/keypress/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "keypress", - "version": "0.1.0", - "description": "Make any Node ReadableStream emit \"keypress\" events", - "author": { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net", - "url": "http://tootallnate.net" - }, - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git://github.com/TooTallNate/keypress.git" - }, - "keywords": [ - "keypress", - "readline", - "core" - ], - "license": "MIT", - "readme": "keypress\n========\n### Make any Node ReadableStream emit \"keypress\" events\n\n\nPrevious to Node `v0.8.x`, there was an undocumented `\"keypress\"` event that\n`process.stdin` would emit when it was a TTY. Some people discovered this hidden\ngem, and started using it in their own code.\n\nNow in Node `v0.8.x`, this `\"keypress\"` event does not get emitted by default,\nbut rather only when it is being used in conjuction with the `readline` (or by\nextension, the `repl`) module.\n\nThis module is the exact logic from the node `v0.8.x` releases ripped out into its\nown module.\n\n__Bonus:__ Now with mouse support!\n\nInstallation\n------------\n\nInstall with `npm`:\n\n``` bash\n$ npm install keypress\n```\n\nOr add it to the `\"dependencies\"` section of your _package.json_ file.\n\n\nExample\n-------\n\n#### Listening for \"keypress\" events\n\n``` js\nvar keypress = require('keypress');\n\n// make `process.stdin` begin emitting \"keypress\" events\nkeypress(process.stdin);\n\n// listen for the \"keypress\" event\nprocess.stdin.on('keypress', function (ch, key) {\n console.log('got \"keypress\"', key);\n if (key && key.ctrl && key.name == 'c') {\n process.stdin.pause();\n }\n});\n\nprocess.stdin.setRawMode(true);\nprocess.stdin.resume();\n```\n\n#### Listening for \"mousepress\" events\n\n``` js\nvar keypress = require('keypress');\n\n// make `process.stdin` begin emitting \"mousepress\" (and \"keypress\") events\nkeypress(process.stdin);\n\n// you must enable the mouse events before they will begin firing\nkeypress.enableMouse(process.stdout);\n\nprocess.stdin.on('mousepress', function (info) {\n console.log('got \"mousepress\" event at %d x %d', info.x, info.y);\n});\n\nprocess.on('exit', function () {\n // disable mouse on exit, so that the state\n // is back to normal for the terminal\n keypress.disableMouse(process.stdout);\n});\n```\n\n\nLicense\n-------\n\n(The MIT License)\n\nCopyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/TooTallNate/keypress/issues" - }, - "homepage": "https://github.com/TooTallNate/keypress", - "_id": "keypress@0.1.0", - "_from": "keypress@0.1.x" -} diff --git a/node_modules/express/node_modules/commander/node_modules/keypress/test.js b/node_modules/express/node_modules/commander/node_modules/keypress/test.js deleted file mode 100644 index c3f61d79..00000000 --- a/node_modules/express/node_modules/commander/node_modules/keypress/test.js +++ /dev/null @@ -1,28 +0,0 @@ - -var keypress = require('./') -keypress(process.stdin) - -if (process.stdin.setRawMode) - process.stdin.setRawMode(true) -else - require('tty').setRawMode(true) - -process.stdin.on('keypress', function (c, key) { - console.log(0, c, key) - if (key && key.ctrl && key.name == 'c') { - process.stdin.pause() - } -}) -process.stdin.on('mousepress', function (mouse) { - console.log(mouse) -}) - -keypress.enableMouse(process.stdout) -process.on('exit', function () { - //disable mouse on exit, so that the state is back to normal - //for the terminal. - keypress.disableMouse(process.stdout) -}) - -process.stdin.resume() - diff --git a/node_modules/express/node_modules/commander/package.json b/node_modules/express/node_modules/commander/package.json deleted file mode 100644 index b1f5fcd4..00000000 --- a/node_modules/express/node_modules/commander/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "commander", - "version": "1.3.2", - "description": "the complete solution for node.js command-line programs", - "keywords": [ - "command", - "option", - "parser", - "prompt", - "stdin" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "repository": { - "type": "git", - "url": "https://github.com/visionmedia/commander.js.git" - }, - "dependencies": { - "keypress": "0.1.x" - }, - "devDependencies": { - "should": ">= 0.0.1" - }, - "scripts": { - "test": "make test" - }, - "main": "index", - "engines": { - "node": ">= 0.6.x" - }, - "readme": "# Commander.js\n\n The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander).\n\n [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js)\n\n## Installation\n\n $ npm install commander\n\n## Option parsing\n\n Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('commander');\n\nprogram\n .version('0.0.1')\n .option('-p, --peppers', 'Add peppers')\n .option('-P, --pineapple', 'Add pineapple')\n .option('-b, --bbq', 'Add bbq sauce')\n .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')\n .parse(process.argv);\n\nconsole.log('you ordered a pizza with:');\nif (program.peppers) console.log(' - peppers');\nif (program.pineapple) console.log(' - pineapple');\nif (program.bbq) console.log(' - bbq');\nconsole.log(' - %s cheese', program.cheese);\n```\n\n Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as \"--template-engine\" are camel-cased, becoming `program.templateEngine` etc.\n\n## Automated --help\n\n The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:\n\n``` \n $ ./examples/pizza --help\n\n Usage: pizza [options]\n\n Options:\n\n -V, --version output the version number\n -p, --peppers Add peppers\n -P, --pineapple Add pineapple\n -b, --bbq Add bbq sauce\n -c, --cheese Add the specified type of cheese [marble]\n -h, --help output usage information\n\n```\n\n## Coercion\n\n```js\nfunction range(val) {\n return val.split('..').map(Number);\n}\n\nfunction list(val) {\n return val.split(',');\n}\n\nprogram\n .version('0.0.1')\n .usage('[options] ')\n .option('-i, --integer ', 'An integer argument', parseInt)\n .option('-f, --float ', 'A float argument', parseFloat)\n .option('-r, --range ..', 'A range', range)\n .option('-l, --list ', 'A list', list)\n .option('-o, --optional [value]', 'An optional value')\n .parse(process.argv);\n\nconsole.log(' int: %j', program.integer);\nconsole.log(' float: %j', program.float);\nconsole.log(' optional: %j', program.optional);\nprogram.range = program.range || [];\nconsole.log(' range: %j..%j', program.range[0], program.range[1]);\nconsole.log(' list: %j', program.list);\nconsole.log(' args: %j', program.args);\n```\n\n## Custom help\n\n You can display arbitrary `-h, --help` information\n by listening for \"--help\". Commander will automatically\n exit once you are done so that the remainder of your program\n does not execute causing undesired behaviours, for example\n in the following executable \"stuff\" will not output when\n `--help` is used.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('../');\n\nfunction list(val) {\n return val.split(',').map(Number);\n}\n\nprogram\n .version('0.0.1')\n .option('-f, --foo', 'enable some foo')\n .option('-b, --bar', 'enable some bar')\n .option('-B, --baz', 'enable some baz');\n\n// must be before .parse() since\n// node's emit() is immediate\n\nprogram.on('--help', function(){\n console.log(' Examples:');\n console.log('');\n console.log(' $ custom-help --help');\n console.log(' $ custom-help -h');\n console.log('');\n});\n\nprogram.parse(process.argv);\n\nconsole.log('stuff');\n```\n\nyielding the following help output:\n\n```\n\nUsage: custom-help [options]\n\nOptions:\n\n -h, --help output usage information\n -V, --version output the version number\n -f, --foo enable some foo\n -b, --bar enable some bar\n -B, --baz enable some baz\n\nExamples:\n\n $ custom-help --help\n $ custom-help -h\n\n```\n\n## .prompt(msg, fn)\n\n Single-line prompt:\n\n```js\nprogram.prompt('name: ', function(name){\n console.log('hi %s', name);\n});\n```\n\n Multi-line prompt:\n\n```js\nprogram.prompt('description:', function(name){\n console.log('hi %s', name);\n});\n```\n\n Coercion:\n\n```js\nprogram.prompt('Age: ', Number, function(age){\n console.log('age: %j', age);\n});\n```\n\n```js\nprogram.prompt('Birthdate: ', Date, function(date){\n console.log('date: %s', date);\n});\n```\n\n```js\nprogram.prompt('Email: ', /^.+@.+\\..+$/, function(email){\n console.log('email: %j', email);\n});\n```\n\n## .password(msg[, mask], fn)\n\nPrompt for password without echoing:\n\n```js\nprogram.password('Password: ', function(pass){\n console.log('got \"%s\"', pass);\n process.stdin.destroy();\n});\n```\n\nPrompt for password with mask char \"*\":\n\n```js\nprogram.password('Password: ', '*', function(pass){\n console.log('got \"%s\"', pass);\n process.stdin.destroy();\n});\n```\n\n## .confirm(msg, fn)\n\n Confirm with the given `msg`:\n\n```js\nprogram.confirm('continue? ', function(ok){\n console.log(' got %j', ok);\n});\n```\n\n## .choose(list, fn)\n\n Let the user choose from a `list`:\n\n```js\nvar list = ['tobi', 'loki', 'jane', 'manny', 'luna'];\n\nconsole.log('Choose the coolest pet:');\nprogram.choose(list, function(i){\n console.log('you chose %d \"%s\"', i, list[i]);\n});\n```\n\n## .outputHelp()\n\n Output help information without exiting.\n\n## .help()\n\n Output help information and exit immediately.\n\n## Links\n\n - [API documentation](http://visionmedia.github.com/commander.js/)\n - [ascii tables](https://github.com/LearnBoost/cli-table)\n - [progress bars](https://github.com/visionmedia/node-progress)\n - [more progress bars](https://github.com/substack/node-multimeter)\n - [examples](https://github.com/visionmedia/commander.js/tree/master/examples)\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/commander.js/issues" - }, - "homepage": "https://github.com/visionmedia/commander.js", - "_id": "commander@1.3.2", - "dist": { - "shasum": "8a8f30ec670a6fdd64af52f1914b907d79ead5b5" - }, - "_from": "commander@1.3.2", - "_resolved": "https://registry.npmjs.org/commander/-/commander-1.3.2.tgz" -} diff --git a/node_modules/express/node_modules/connect/.npmignore b/node_modules/express/node_modules/connect/.npmignore deleted file mode 100644 index 9046dde5..00000000 --- a/node_modules/express/node_modules/connect/.npmignore +++ /dev/null @@ -1,12 +0,0 @@ -*.markdown -*.md -.git* -Makefile -benchmarks/ -docs/ -examples/ -install.sh -support/ -test/ -.DS_Store -coverage.html diff --git a/node_modules/express/node_modules/connect/.travis.yml b/node_modules/express/node_modules/connect/.travis.yml deleted file mode 100644 index a12e3f0f..00000000 --- a/node_modules/express/node_modules/connect/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/LICENSE b/node_modules/express/node_modules/connect/LICENSE deleted file mode 100644 index 0c5d22d9..00000000 --- a/node_modules/express/node_modules/connect/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -(The MIT License) - -Copyright (c) 2010 Sencha Inc. -Copyright (c) 2011 LearnBoost -Copyright (c) 2011 TJ Holowaychuk - -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/express/node_modules/connect/Readme.md b/node_modules/express/node_modules/connect/Readme.md deleted file mode 100644 index e38a3263..00000000 --- a/node_modules/express/node_modules/connect/Readme.md +++ /dev/null @@ -1,84 +0,0 @@ -# Connect [![build status](https://secure.travis-ci.org/senchalabs/connect.png)](http://travis-ci.org/senchalabs/connect) - - Connect is an extensible HTTP server framework for [node](http://nodejs.org), providing high performance "plugins" known as _middleware_. - - Connect is bundled with over _20_ commonly used middleware, including - a logger, session support, cookie parser, and [more](http://senchalabs.github.com/connect). Be sure to view the 2.x [documentation](http://senchalabs.github.com/connect/). - -```js -var connect = require('connect') - , http = require('http'); - -var app = connect() - .use(connect.favicon()) - .use(connect.logger('dev')) - .use(connect.static('public')) - .use(connect.directory('public')) - .use(connect.cookieParser()) - .use(connect.session({ secret: 'my secret here' })) - .use(function(req, res){ - res.end('Hello from Connect!\n'); - }); - -http.createServer(app).listen(3000); -``` - -## Middleware - - - [basicAuth](http://www.senchalabs.org/connect/basicAuth.html) - - [bodyParser](http://www.senchalabs.org/connect/bodyParser.html) - - [compress](http://www.senchalabs.org/connect/compress.html) - - [cookieParser](http://www.senchalabs.org/connect/cookieParser.html) - - [cookieSession](http://www.senchalabs.org/connect/cookieSession.html) - - [csrf](http://www.senchalabs.org/connect/csrf.html) - - [directory](http://www.senchalabs.org/connect/directory.html) - - [errorHandler](http://www.senchalabs.org/connect/errorHandler.html) - - [favicon](http://www.senchalabs.org/connect/favicon.html) - - [json](http://www.senchalabs.org/connect/json.html) - - [limit](http://www.senchalabs.org/connect/limit.html) - - [logger](http://www.senchalabs.org/connect/logger.html) - - [methodOverride](http://www.senchalabs.org/connect/methodOverride.html) - - [multipart](http://www.senchalabs.org/connect/multipart.html) - - [urlencoded](http://www.senchalabs.org/connect/urlencoded.html) - - [query](http://www.senchalabs.org/connect/query.html) - - [responseTime](http://www.senchalabs.org/connect/responseTime.html) - - [session](http://www.senchalabs.org/connect/session.html) - - [static](http://www.senchalabs.org/connect/static.html) - - [staticCache](http://www.senchalabs.org/connect/staticCache.html) - - [subdomains](http://www.senchalabs.org/connect/subdomains.html) - - [vhost](http://www.senchalabs.org/connect/vhost.html) - -## Running Tests - -first: - - $ npm install -d - -then: - - $ make test - -## Contributors - - https://github.com/senchalabs/connect/graphs/contributors - -## Node Compatibility - - Connect `< 1.x` is compatible with node 0.2.x - - - Connect `1.x` is compatible with node 0.4.x - - - Connect `2.x` is compatible with node 0.6.x - - - Connect (_master_) is compatible with node 0.8.x - -## CLA - - [http://sencha.com/cla](http://sencha.com/cla) - -## License - -View the [LICENSE](https://github.com/senchalabs/connect/blob/master/LICENSE) file. The [Silk](http://www.famfamfam.com/lab/icons/silk/) icons used by the `directory` middleware created by/copyright of [FAMFAMFAM](http://www.famfamfam.com/). diff --git a/node_modules/express/node_modules/connect/index.js b/node_modules/express/node_modules/connect/index.js deleted file mode 100644 index 23240eed..00000000 --- a/node_modules/express/node_modules/connect/index.js +++ /dev/null @@ -1,4 +0,0 @@ - -module.exports = process.env.CONNECT_COV - ? require('./lib-cov/connect') - : require('./lib/connect'); \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/lib/cache.js b/node_modules/express/node_modules/connect/lib/cache.js deleted file mode 100644 index 052fcdb3..00000000 --- a/node_modules/express/node_modules/connect/lib/cache.js +++ /dev/null @@ -1,81 +0,0 @@ - -/*! - * Connect - Cache - * Copyright(c) 2011 Sencha Inc. - * MIT Licensed - */ - -/** - * Expose `Cache`. - */ - -module.exports = Cache; - -/** - * LRU cache store. - * - * @param {Number} limit - * @api private - */ - -function Cache(limit) { - this.store = {}; - this.keys = []; - this.limit = limit; -} - -/** - * Touch `key`, promoting the object. - * - * @param {String} key - * @param {Number} i - * @api private - */ - -Cache.prototype.touch = function(key, i){ - this.keys.splice(i,1); - this.keys.push(key); -}; - -/** - * Remove `key`. - * - * @param {String} key - * @api private - */ - -Cache.prototype.remove = function(key){ - delete this.store[key]; -}; - -/** - * Get the object stored for `key`. - * - * @param {String} key - * @return {Array} - * @api private - */ - -Cache.prototype.get = function(key){ - return this.store[key]; -}; - -/** - * Add a cache `key`. - * - * @param {String} key - * @return {Array} - * @api private - */ - -Cache.prototype.add = function(key){ - // initialize store - var len = this.keys.push(key); - - // limit reached, invalidate LRU - if (len > this.limit) this.remove(this.keys.shift()); - - var arr = this.store[key] = []; - arr.createdAt = new Date; - return arr; -}; diff --git a/node_modules/express/node_modules/connect/lib/connect.js b/node_modules/express/node_modules/connect/lib/connect.js deleted file mode 100644 index 72961dca..00000000 --- a/node_modules/express/node_modules/connect/lib/connect.js +++ /dev/null @@ -1,92 +0,0 @@ -/*! - * Connect - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , proto = require('./proto') - , utils = require('./utils') - , path = require('path') - , basename = path.basename - , fs = require('fs'); - -// node patches - -require('./patch'); - -// expose createServer() as the module - -exports = module.exports = createServer; - -/** - * Framework version. - */ - -exports.version = '2.7.11'; - -/** - * Expose mime module. - */ - -exports.mime = require('./middleware/static').mime; - -/** - * Expose the prototype. - */ - -exports.proto = proto; - -/** - * Auto-load middleware getters. - */ - -exports.middleware = {}; - -/** - * Expose utilities. - */ - -exports.utils = utils; - -/** - * Create a new connect server. - * - * @return {Function} - * @api public - */ - -function createServer() { - function app(req, res, next){ app.handle(req, res, next); } - utils.merge(app, proto); - utils.merge(app, EventEmitter.prototype); - app.route = '/'; - app.stack = []; - for (var i = 0; i < arguments.length; ++i) { - app.use(arguments[i]); - } - return app; -}; - -/** - * Support old `.createServer()` method. - */ - -createServer.createServer = createServer; - -/** - * Auto-load bundled middleware with getters. - */ - -fs.readdirSync(__dirname + '/middleware').forEach(function(filename){ - if (!/\.js$/.test(filename)) return; - var name = basename(filename, '.js'); - function load(){ return require('./middleware/' + name); } - exports.middleware.__defineGetter__(name, load); - exports.__defineGetter__(name, load); -}); diff --git a/node_modules/express/node_modules/connect/lib/index.js b/node_modules/express/node_modules/connect/lib/index.js deleted file mode 100644 index 5938c753..00000000 --- a/node_modules/express/node_modules/connect/lib/index.js +++ /dev/null @@ -1,50 +0,0 @@ - -/** - * Connect is a middleware framework for node, - * shipping with over 18 bundled middleware and a rich selection of - * 3rd-party middleware. - * - * var app = connect() - * .use(connect.logger('dev')) - * .use(connect.static('public')) - * .use(function(req, res){ - * res.end('hello world\n'); - * }) - * - * http.createServer(app).listen(3000); - * - * Installation: - * - * $ npm install connect - * - * Middleware: - * - * - [logger](logger.html) request logger with custom format support - * - [csrf](csrf.html) Cross-site request forgery protection - * - [compress](compress.html) Gzip compression middleware - * - [basicAuth](basicAuth.html) basic http authentication - * - [bodyParser](bodyParser.html) extensible request body parser - * - [json](json.html) application/json parser - * - [urlencoded](urlencoded.html) application/x-www-form-urlencoded parser - * - [multipart](multipart.html) multipart/form-data parser - * - [timeout](timeout.html) request timeouts - * - [cookieParser](cookieParser.html) cookie parser - * - [session](session.html) session management support with bundled MemoryStore - * - [cookieSession](cookieSession.html) cookie-based session support - * - [methodOverride](methodOverride.html) faux HTTP method support - * - [responseTime](responseTime.html) calculates response-time and exposes via X-Response-Time - * - [staticCache](staticCache.html) memory cache layer for the static() middleware - * - [static](static.html) streaming static file server supporting `Range` and more - * - [directory](directory.html) directory listing middleware - * - [vhost](vhost.html) virtual host sub-domain mapping middleware - * - [favicon](favicon.html) efficient favicon server (with default icon) - * - [limit](limit.html) limit the bytesize of request bodies - * - [query](query.html) automatic querystring parser, populating `req.query` - * - [errorHandler](errorHandler.html) flexible error handler - * - * Links: - * - * - list of [3rd-party](https://github.com/senchalabs/connect/wiki) middleware - * - GitHub [repository](http://github.com/senchalabs/connect) - * - */ \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/lib/middleware/basicAuth.js b/node_modules/express/node_modules/connect/lib/middleware/basicAuth.js deleted file mode 100644 index 8af07ca0..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/basicAuth.js +++ /dev/null @@ -1,106 +0,0 @@ -/*! - * Connect - basicAuth - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils') - , unauthorized = utils.unauthorized; - -/** - * Basic Auth: - * - * Status: Deprecated. No bug reports or pull requests are welcomed - * for this middleware. However, this middleware will not be removed. - * Instead, you should use [basic-auth](https://github.com/visionmedia/node-basic-auth). - * - * Enfore basic authentication by providing a `callback(user, pass)`, - * which must return `true` in order to gain access. Alternatively an async - * method is provided as well, invoking `callback(user, pass, callback)`. Populates - * `req.user`. The final alternative is simply passing username / password - * strings. - * - * Simple username and password - * - * connect(connect.basicAuth('username', 'password')); - * - * Callback verification - * - * connect() - * .use(connect.basicAuth(function(user, pass){ - * return 'tj' == user && 'wahoo' == pass; - * })) - * - * Async callback verification, accepting `fn(err, user)`. - * - * connect() - * .use(connect.basicAuth(function(user, pass, fn){ - * User.authenticate({ user: user, pass: pass }, fn); - * })) - * - * @param {Function|String} callback or username - * @param {String} realm - * @api public - */ - -module.exports = function basicAuth(callback, realm) { - var username, password; - - // user / pass strings - if ('string' == typeof callback) { - username = callback; - password = realm; - if ('string' != typeof password) throw new Error('password argument required'); - realm = arguments[2]; - callback = function(user, pass){ - return user == username && pass == password; - } - } - - realm = realm || 'Authorization Required'; - - return function(req, res, next) { - var authorization = req.headers.authorization; - - if (req.user) return next(); - if (!authorization) return unauthorized(res, realm); - - var parts = authorization.split(' '); - - if (parts.length !== 2) return next(utils.error(400)); - - var scheme = parts[0] - , credentials = new Buffer(parts[1], 'base64').toString() - , index = credentials.indexOf(':'); - - if ('Basic' != scheme || index < 0) return next(utils.error(400)); - - var user = credentials.slice(0, index) - , pass = credentials.slice(index + 1); - - // async - if (callback.length >= 3) { - var pause = utils.pause(req); - callback(user, pass, function(err, user){ - if (err || !user) return unauthorized(res, realm); - req.user = req.remoteUser = user; - next(); - pause.resume(); - }); - // sync - } else { - if (callback(user, pass)) { - req.user = req.remoteUser = user; - next(); - } else { - unauthorized(res, realm); - } - } - } -}; - diff --git a/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js b/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js deleted file mode 100644 index 14481f56..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js +++ /dev/null @@ -1,68 +0,0 @@ - -/*! - * Connect - bodyParser - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var multipart = require('./multipart') - , urlencoded = require('./urlencoded') - , json = require('./json'); - -/** - * Body parser: - * - * Status: the multipart body parser will be removed in Connect 3. - * - * Parse request bodies, supports _application/json_, - * _application/x-www-form-urlencoded_, and _multipart/form-data_. - * - * This is equivalent to: - * - * app.use(connect.json()); - * app.use(connect.urlencoded()); - * app.use(connect.multipart()); - * - * Examples: - * - * connect() - * .use(connect.bodyParser()) - * .use(function(req, res) { - * res.end('viewing user ' + req.body.user.name); - * }); - * - * $ curl -d 'user[name]=tj' http://local/ - * $ curl -d '{"user":{"name":"tj"}}' -H "Content-Type: application/json" http://local/ - * - * View [json](json.html), [urlencoded](urlencoded.html), and [multipart](multipart.html) for more info. - * - * If you wish to create your own body parser, you may be interested in: - * - * - [raw-body](https://github.com/stream-utils/raw-body) - * - [body](https://github.com/raynos/body) - * - * @param {Object} options - * @return {Function} - * @api public - */ - -exports = module.exports = function bodyParser(options){ - var _urlencoded = urlencoded(options) - , _multipart = multipart(options) - , _json = json(options); - - return function bodyParser(req, res, next) { - _json(req, res, function(err){ - if (err) return next(err); - _urlencoded(req, res, function(err){ - if (err) return next(err); - _multipart(req, res, next); - }); - }); - } -}; \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/lib/middleware/compress.js b/node_modules/express/node_modules/connect/lib/middleware/compress.js deleted file mode 100644 index a300e530..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/compress.js +++ /dev/null @@ -1,192 +0,0 @@ -/*! - * Connect - compress - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var zlib = require('zlib'); -var utils = require('../utils'); -var Negotiator = require('negotiator'); - -/** - * Supported content-encoding methods. - */ - -exports.methods = { - gzip: zlib.createGzip - , deflate: zlib.createDeflate -}; - -/** - * Default filter function. - */ - -exports.filter = function(req, res){ - return /json|text|javascript|dart|image\/svg\+xml|application\/x-font-ttf|application\/vnd\.ms-opentype|application\/vnd\.ms-fontobject/.test(res.getHeader('Content-Type')); -}; - -/** - * Compress: - * - * Compress response data with gzip/deflate. - * - * Filter: - * - * A `filter` callback function may be passed to - * replace the default logic of: - * - * exports.filter = function(req, res){ - * return /json|text|javascript/.test(res.getHeader('Content-Type')); - * }; - * - * Threshold: - * - * Only compress the response if the byte size is at or above a threshold. - * Always compress while streaming. - * - * - `threshold` - string representation of size or bytes as an integer. - * - * Options: - * - * All remaining options are passed to the gzip/deflate - * creation functions. Consult node's docs for additional details. - * - * - `chunkSize` (default: 16*1024) - * - `windowBits` - * - `level`: 0-9 where 0 is no compression, and 9 is slow but best compression - * - `memLevel`: 1-9 low is slower but uses less memory, high is fast but uses more - * - `strategy`: compression strategy - * - * @param {Object} options - * @return {Function} - * @api public - */ - -module.exports = function compress(options) { - options = options || {}; - var filter = options.filter || exports.filter; - var threshold; - - if (false === options.threshold || 0 === options.threshold) { - threshold = 0 - } else if ('string' === typeof options.threshold) { - threshold = utils.parseBytes(options.threshold) - } else { - threshold = options.threshold || 1024 - } - - return function compress(req, res, next){ - var accept = req.headers['accept-encoding'] - , write = res.write - , end = res.end - , compress = true - , stream; - - // see #724 - req.on('close', function(){ - res.write = res.end = function(){}; - }); - - // flush is noop by default - res.flush = noop; - - // proxy - - res.write = function(chunk, encoding){ - if (!this.headerSent) { - // if content-length is set and is lower - // than the threshold, don't compress - var length = res.getHeader('content-length'); - if (!isNaN(length) && length < threshold) compress = false; - this._implicitHeader(); - } - return stream - ? stream.write(new Buffer(chunk, encoding)) - : write.call(res, chunk, encoding); - }; - - res.end = function(chunk, encoding){ - if (chunk) { - if (!this.headerSent && getSize(chunk) < threshold) compress = false; - this.write(chunk, encoding); - } else if (!this.headerSent) { - // response size === 0 - compress = false; - } - return stream - ? stream.end() - : end.call(res); - }; - - res.on('header', function(){ - // default request filter - if (!filter(req, res)) return; - - // vary - var vary = res.getHeader('Vary'); - if (!vary) { - res.setHeader('Vary', 'Accept-Encoding'); - } else if (!~vary.indexOf('Accept-Encoding')) { - res.setHeader('Vary', vary + ', Accept-Encoding'); - } - - if (!compress) return; - - var encoding = res.getHeader('Content-Encoding') || 'identity'; - - // already encoded - if ('identity' != encoding) return; - - // SHOULD use identity - if (!accept) return; - - // head - if ('HEAD' == req.method) return; - - // compression method - var method = new Negotiator(req).preferredEncoding(['gzip', 'deflate', 'identity']); - // negotiation failed - if (method === 'identity') return; - - // compression stream - stream = exports.methods[method](options); - - // overwrite the flush method - res.flush = function(){ - stream.flush(); - } - - // header fields - res.setHeader('Content-Encoding', method); - res.removeHeader('Content-Length'); - - // compression - stream.on('data', function(chunk){ - write.call(res, chunk); - }); - - stream.on('end', function(){ - end.call(res); - }); - - stream.on('drain', function() { - res.emit('drain'); - }); - }); - - next(); - }; -}; - -function getSize(chunk) { - return Buffer.isBuffer(chunk) - ? chunk.length - : Buffer.byteLength(chunk); -} - -function noop(){} diff --git a/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js b/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js deleted file mode 100644 index 665226c4..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js +++ /dev/null @@ -1,67 +0,0 @@ - -/*! - * Connect - cookieParser - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('./../utils') - , cookie = require('cookie'); - -/** - * Cookie parser: - * - * Status: Deprecated. This middleware will be removed in - * Connect 3.0 and will be replaced by a `cookies` middleware, - * which will use [cookies](http://github.com/jed/cookies) - * and [keygrip](https://github.com/jed/keygrip). - * - * Parse _Cookie_ header and populate `req.cookies` - * with an object keyed by the cookie names. Optionally - * you may enabled signed cookie support by passing - * a `secret` string, which assigns `req.secret` so - * it may be used by other middleware. - * - * Examples: - * - * connect() - * .use(connect.cookieParser('optional secret string')) - * .use(function(req, res, next){ - * res.end(JSON.stringify(req.cookies)); - * }) - * - * @param {String} secret - * @return {Function} - * @api public - */ - -module.exports = function cookieParser(secret, opt){ - return function cookieParser(req, res, next) { - if (req.cookies) return next(); - var cookies = req.headers.cookie; - - req.secret = secret; - req.cookies = {}; - req.signedCookies = {}; - - if (cookies) { - try { - req.cookies = cookie.parse(cookies, opt); - if (secret) { - req.signedCookies = utils.parseSignedCookies(req.cookies, secret); - req.signedCookies = utils.parseJSONCookies(req.signedCookies); - } - req.cookies = utils.parseJSONCookies(req.cookies); - } catch (err) { - err.status = 400; - return next(err); - } - } - next(); - }; -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/cookieSession.js b/node_modules/express/node_modules/connect/lib/middleware/cookieSession.js deleted file mode 100644 index 663f2b97..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/cookieSession.js +++ /dev/null @@ -1,122 +0,0 @@ -/*! - * Connect - cookieSession - * Copyright(c) 2011 Sencha Inc. - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('./../utils') - , Cookie = require('./session/cookie') - , debug = require('debug')('connect:cookieSession') - , signature = require('cookie-signature') - , crc32 = require('buffer-crc32') - , url = require('url'); - -/** - * Cookie Session: - * - * Cookie session middleware. - * - * var app = connect(); - * app.use(connect.cookieParser()); - * app.use(connect.cookieSession({ secret: 'tobo!', cookie: { maxAge: 60 * 60 * 1000 }})); - * - * Options: - * - * - `key` cookie name defaulting to `connect.sess` - * - `secret` prevents cookie tampering - * - `cookie` session cookie settings, defaulting to `{ path: '/', httpOnly: true, maxAge: null }` - * - `proxy` trust the reverse proxy when setting secure cookies (via "x-forwarded-proto") - * - * Clearing sessions: - * - * To clear the session simply set its value to `null`, - * `cookieSession()` will then respond with a 1970 Set-Cookie. - * - * req.session = null; - * - * If you are interested in more sophisticated solutions, - * you may be interested in: - * - * - [client-sessions](https://github.com/mozilla/node-client-sessions) - * - * @param {Object} options - * @return {Function} - * @api public - */ - -module.exports = function cookieSession(options){ - // TODO: utilize Session/Cookie to unify API - options = options || {}; - var key = options.key || 'connect.sess' - , trustProxy = options.proxy; - - return function cookieSession(req, res, next) { - - // req.secret is for backwards compatibility - var secret = options.secret || req.secret; - if (!secret) throw new Error('`secret` option required for cookie sessions'); - - // default session - req.session = {}; - var cookie = req.session.cookie = new Cookie(options.cookie); - - // pathname mismatch - var originalPath = url.parse(req.originalUrl).pathname; - if (0 != originalPath.indexOf(cookie.path)) return next(); - - // cookieParser secret - if (!options.secret && req.secret) { - req.session = req.signedCookies[key] || {}; - req.session.cookie = cookie; - } else { - // TODO: refactor - var rawCookie = req.cookies[key]; - if (rawCookie) { - var unsigned = utils.parseSignedCookie(rawCookie, secret); - if (unsigned) { - var originalHash = crc32.signed(unsigned); - req.session = utils.parseJSONCookie(unsigned) || {}; - req.session.cookie = cookie; - } - } - } - - res.on('header', function(){ - // removed - if (!req.session) { - debug('clear session'); - cookie.expires = new Date(0); - res.setHeader('Set-Cookie', cookie.serialize(key, '')); - return; - } - - delete req.session.cookie; - - // check security - var proto = (req.headers['x-forwarded-proto'] || '').toLowerCase() - , tls = req.connection.encrypted || (trustProxy && 'https' == proto.split(/\s*,\s*/)[0]); - - // only send secure cookies via https - if (cookie.secure && !tls) return debug('not secured'); - - // serialize - debug('serializing %j', req.session); - var val = 'j:' + JSON.stringify(req.session); - - // compare hashes, no need to set-cookie if unchanged - if (originalHash == crc32.signed(val)) return debug('unmodified session'); - - // set-cookie - val = 's:' + signature.sign(val, secret); - val = cookie.serialize(key, val); - debug('set-cookie %j', cookie); - res.setHeader('Set-Cookie', val); - }); - - next(); - }; -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/csrf.js b/node_modules/express/node_modules/connect/lib/middleware/csrf.js deleted file mode 100644 index 1c3854b4..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/csrf.js +++ /dev/null @@ -1,163 +0,0 @@ -/*! - * Connect - csrf - * Copyright(c) 2011 Sencha Inc. - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils'); -var uid = require('uid2'); -var crypto = require('crypto'); - -/** - * Anti CSRF: - * - * CSRF protection middleware. - * - * This middleware adds a `req.csrfToken()` function to make a token - * which should be added to requests which mutate - * state, within a hidden form field, query-string etc. This - * token is validated against the visitor's session. - * - * The default `value` function checks `req.body` generated - * by the `bodyParser()` middleware, `req.query` generated - * by `query()`, and the "X-CSRF-Token" header field. - * - * This middleware requires session support, thus should be added - * somewhere _below_ `session()` and `cookieParser()`. - * - * Options: - * - * - `value` a function accepting the request, returning the token - * - * @param {Object} options - * @api public - */ - -module.exports = function csrf(options) { - options = options || {}; - var value = options.value || defaultValue; - - return function(req, res, next){ - - // already have one - var secret = req.session._csrfSecret; - if (secret) return createToken(secret); - - // generate secret - uid(24, function(err, secret){ - if (err) return next(err); - req.session._csrfSecret = secret; - createToken(secret); - }); - - // generate the token - function createToken(secret) { - var token; - - // lazy-load token - req.csrfToken = function csrfToken() { - return token || (token = saltedToken(secret)); - }; - - // compatibility with old middleware - Object.defineProperty(req.session, '_csrf', { - configurable: true, - get: function() { - console.warn('req.session._csrf is deprecated, use req.csrfToken() instead'); - return req.csrfToken(); - } - }); - - // ignore these methods - if ('GET' == req.method || 'HEAD' == req.method || 'OPTIONS' == req.method) return next(); - - // determine user-submitted value - var val = value(req); - - // check - if (!checkToken(val, secret)) return next(utils.error(403)); - - next(); - } - } -}; - -/** - * Default value function, checking the `req.body` - * and `req.query` for the CSRF token. - * - * @param {IncomingMessage} req - * @return {String} - * @api private - */ - -function defaultValue(req) { - return (req.body && req.body._csrf) - || (req.query && req.query._csrf) - || (req.headers['x-csrf-token']) - || (req.headers['x-xsrf-token']); -} - -/** - * Return salted token. - * - * @param {String} secret - * @return {String} - * @api private - */ - -function saltedToken(secret) { - return createToken(generateSalt(10), secret); -} - -/** - * Creates a CSRF token from a given salt and secret. - * - * @param {String} salt (should be 10 characters) - * @param {String} secret - * @return {String} - * @api private - */ - -function createToken(salt, secret) { - return salt + crypto - .createHash('sha1') - .update(salt + secret) - .digest('base64'); -} - -/** - * Checks if a given CSRF token matches the given secret. - * - * @param {String} token - * @param {String} secret - * @return {Boolean} - * @api private - */ - -function checkToken(token, secret) { - if ('string' != typeof token) return false; - return token === createToken(token.slice(0, 10), secret); -} - -/** - * Generates a random salt, using a fast non-blocking PRNG (Math.random()). - * - * @param {Number} length - * @return {String} - * @api private - */ - -function generateSalt(length) { - var i, r = []; - for (i = 0; i < length; ++i) { - r.push(SALTCHARS[Math.floor(Math.random() * SALTCHARS.length)]); - } - return r.join(''); -} - -var SALTCHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; diff --git a/node_modules/express/node_modules/connect/lib/middleware/directory.js b/node_modules/express/node_modules/connect/lib/middleware/directory.js deleted file mode 100644 index ac8ea7a5..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/directory.js +++ /dev/null @@ -1,330 +0,0 @@ - -/*! - * Connect - directory - * Copyright(c) 2011 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -// TODO: arrow key navigation -// TODO: make icons extensible - -/** - * Module dependencies. - */ - -var fs = require('fs') - , parse = require('url').parse - , utils = require('../utils') - , path = require('path') - , normalize = path.normalize - , sep = path.sep - , extname = path.extname - , join = path.join; -var Batch = require('batch'); -var Negotiator = require('negotiator'); - -/*! - * Icon cache. - */ - -var cache = {}; - -/** - * Media types and the map for content negotiation. - */ - -var mediaTypes = [ - 'text/html', - 'text/plain', - 'application/json' -]; - -var mediaType = { - 'text/html': 'html', - 'text/plain': 'plain', - 'application/json': 'json' -}; - -/** - * Directory: - * - * Serve directory listings with the given `root` path. - * - * Options: - * - * - `hidden` display hidden (dot) files. Defaults to false. - * - `icons` display icons. Defaults to false. - * - `filter` Apply this filter function to files. Defaults to false. - * - * @param {String} root - * @param {Object} options - * @return {Function} - * @api public - */ - -exports = module.exports = function directory(root, options){ - options = options || {}; - - // root required - if (!root) throw new Error('directory() root path required'); - var hidden = options.hidden - , icons = options.icons - , view = options.view || 'tiles' - , filter = options.filter - , root = normalize(root + sep); - - return function directory(req, res, next) { - if ('GET' != req.method && 'HEAD' != req.method) return next(); - - var url = parse(req.url) - , dir = decodeURIComponent(url.pathname) - , path = normalize(join(root, dir)) - , originalUrl = parse(req.originalUrl) - , originalDir = decodeURIComponent(originalUrl.pathname) - , showUp = path != root; - - // null byte(s), bad request - if (~path.indexOf('\0')) return next(utils.error(400)); - - // malicious path, forbidden - if (0 != path.indexOf(root)) return next(utils.error(403)); - - // check if we have a directory - fs.stat(path, function(err, stat){ - if (err) return 'ENOENT' == err.code - ? next() - : next(err); - - if (!stat.isDirectory()) return next(); - - // fetch files - fs.readdir(path, function(err, files){ - if (err) return next(err); - if (!hidden) files = removeHidden(files); - if (filter) files = files.filter(filter); - files.sort(); - - // content-negotiation - var type = new Negotiator(req).preferredMediaType(mediaTypes); - - // not acceptable - if (!type) return next(utils.error(406)); - exports[mediaType[type]](req, res, files, next, originalDir, showUp, icons, path, view); - }); - }); - }; -}; - -/** - * Respond with text/html. - */ - -exports.html = function(req, res, files, next, dir, showUp, icons, path, view){ - fs.readFile(__dirname + '/../public/directory.html', 'utf8', function(err, str){ - if (err) return next(err); - fs.readFile(__dirname + '/../public/style.css', 'utf8', function(err, style){ - if (err) return next(err); - stat(path, files, function(err, stats){ - if (err) return next(err); - files = files.map(function(file, i){ return { name: file, stat: stats[i] }; }); - files.sort(fileSort); - if (showUp) files.unshift({ name: '..' }); - str = str - .replace('{style}', style.concat(iconStyle(files, icons))) - .replace('{files}', html(files, dir, icons, view)) - .replace('{directory}', dir) - .replace('{linked-path}', htmlPath(dir)); - res.setHeader('Content-Type', 'text/html'); - res.setHeader('Content-Length', str.length); - res.end(str); - }); - }); - }); -}; - -/** - * Respond with application/json. - */ - -exports.json = function(req, res, files){ - files = JSON.stringify(files); - res.setHeader('Content-Type', 'application/json'); - res.setHeader('Content-Length', files.length); - res.end(files); -}; - -/** - * Respond with text/plain. - */ - -exports.plain = function(req, res, files){ - files = files.join('\n') + '\n'; - res.setHeader('Content-Type', 'text/plain'); - res.setHeader('Content-Length', files.length); - res.end(files); -}; - -/** - * Sort function for with directories first. - */ - -function fileSort(a, b) { - return Number(b.stat && b.stat.isDirectory()) - Number(a.stat && a.stat.isDirectory()) || - String(a.name).toLocaleLowerCase().localeCompare(String(b.name).toLocaleLowerCase()); -} - -/** - * Map html `dir`, returning a linked path. - */ - -function htmlPath(dir) { - var curr = []; - return dir.split('/').map(function(part){ - curr.push(encodeURIComponent(part)); - return part ? '' + part + '' : ''; - }).join(' / '); -} - -/** - * Load icon images, return css string. - */ - -function iconStyle (files, useIcons) { - if (!useIcons) return ''; - var data = {}; - var views = { tiles: [], details: [], mobile: [] }; - - for (var i=0; i < files.length; i++) { - var file = files[i]; - if (file.name == '..') continue; - - var isDir = '..' == file.name || (file.stat && file.stat.isDirectory()); - var icon = isDir ? icons.folder : icons[extname(file.name)] || icons.default; - - var ext = extname(file.name); - ext = isDir ? '.directory' : (icons[ext] ? ext : '.default'); - - if (data[icon]) continue; - data[icon] = ext + ' .name{background-image: url(data:image/png;base64,' + load(icon)+');}'; - views.tiles.push('.view-tiles ' + data[icon]); - views.details.push('.view-details ' + data[icon]); - views.mobile.push('#files ' + data[icon]); - } - - var style = views.tiles.join('\n') - + '\n'+views.details.join('\n') - + '\n@media (max-width: 768px) {\n\t' - + views.mobile.join('\n\t') - + '\n}'; - return style; -} - -/** - * Map html `files`, returning an html unordered list. - */ - -function html(files, dir, useIcons, view) { - return '
    ' - + (view == 'details' ? ( - '
  • ' - + 'Name' - + 'Size' - + 'Modified' - + '
  • ') : '') - + files.map(function(file){ - var isDir - , classes = [] - , path = dir.split('/').map(function (c) { return encodeURIComponent(c); }); - - if (useIcons) { - var ext = extname(file.name); - isDir = '..' == file.name || (file.stat && file.stat.isDirectory()); - ext = isDir ? '.directory' : (icons[ext] ? ext : '.default'); - classes.push('icon'); - classes.push(ext.replace('.','')); - } - - path.push(encodeURIComponent(file.name)); - - var date = file.name == '..' ? '' - : file.stat.mtime.toDateString()+' '+file.stat.mtime.toLocaleTimeString(); - var size = file.name == '..' ? '' : file.stat.size; - - return '
  • ' - + ''+file.name+'' - + ''+size+'' - + ''+date+'' - + '
  • '; - - }).join('\n') + '
'; -} - -/** - * Load and cache the given `icon`. - * - * @param {String} icon - * @return {String} - * @api private - */ - -function load(icon) { - if (cache[icon]) return cache[icon]; - return cache[icon] = fs.readFileSync(__dirname + '/../public/icons/' + icon, 'base64'); -} - -/** - * Filter "hidden" `files`, aka files - * beginning with a `.`. - * - * @param {Array} files - * @return {Array} - * @api private - */ - -function removeHidden(files) { - return files.filter(function(file){ - return '.' != file[0]; - }); -} - -/** - * Stat all files and return array of stat - * in same order. - */ - -function stat(dir, files, cb) { - var batch = new Batch(); - - batch.concurrency(10); - - files.forEach(function(file, i){ - batch.push(function(done){ - fs.stat(join(dir, file), done); - }); - }); - - batch.end(cb); -} - -/** - * Icon map. - */ - -var icons = { - '.js': 'page_white_code_red.png' - , '.c': 'page_white_c.png' - , '.h': 'page_white_h.png' - , '.cc': 'page_white_cplusplus.png' - , '.php': 'page_white_php.png' - , '.rb': 'page_white_ruby.png' - , '.cpp': 'page_white_cplusplus.png' - , '.swf': 'page_white_flash.png' - , '.pdf': 'page_white_acrobat.png' - , 'folder': 'folder.png' - , 'default': 'page_white.png' -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js b/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js deleted file mode 100644 index 56e96830..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js +++ /dev/null @@ -1,86 +0,0 @@ -/*! - * Connect - errorHandler - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils') - , fs = require('fs'); - -// environment - -var env = process.env.NODE_ENV || 'development'; - -/** - * Error handler: - * - * Development error handler, providing stack traces - * and error message responses for requests accepting text, html, - * or json. - * - * Text: - * - * By default, and when _text/plain_ is accepted a simple stack trace - * or error message will be returned. - * - * JSON: - * - * When _application/json_ is accepted, connect will respond with - * an object in the form of `{ "error": error }`. - * - * HTML: - * - * When accepted connect will output a nice html stack trace. - * - * @return {Function} - * @api public - */ - -exports = module.exports = function errorHandler(){ - return function errorHandler(err, req, res, next){ - if (err.status) res.statusCode = err.status; - if (res.statusCode < 400) res.statusCode = 500; - if ('test' != env) console.error(err.stack); - var accept = req.headers.accept || ''; - // html - if (~accept.indexOf('html')) { - fs.readFile(__dirname + '/../public/style.css', 'utf8', function(e, style){ - fs.readFile(__dirname + '/../public/error.html', 'utf8', function(e, html){ - var stack = (err.stack || '') - .split('\n').slice(1) - .map(function(v){ return '
  • ' + v + '
  • '; }).join(''); - html = html - .replace('{style}', style) - .replace('{stack}', stack) - .replace('{title}', exports.title) - .replace('{statusCode}', res.statusCode) - .replace(/\{error\}/g, utils.escape(err.toString().replace(/\n/g, '
    '))); - res.setHeader('Content-Type', 'text/html; charset=utf-8'); - res.end(html); - }); - }); - // json - } else if (~accept.indexOf('json')) { - var error = { message: err.message, stack: err.stack }; - for (var prop in err) error[prop] = err[prop]; - var json = JSON.stringify({ error: error }); - res.setHeader('Content-Type', 'application/json'); - res.end(json); - // plain text - } else { - res.setHeader('Content-Type', 'text/plain'); - res.end(err.stack); - } - }; -}; - -/** - * Template title, framework authors may override this value. - */ - -exports.title = 'Connect'; diff --git a/node_modules/express/node_modules/connect/lib/middleware/favicon.js b/node_modules/express/node_modules/connect/lib/middleware/favicon.js deleted file mode 100644 index ef543544..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/favicon.js +++ /dev/null @@ -1,80 +0,0 @@ -/*! - * Connect - favicon - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var fs = require('fs') - , utils = require('../utils'); - -/** - * Favicon: - * - * By default serves the connect favicon, or the favicon - * located by the given `path`. - * - * Options: - * - * - `maxAge` cache-control max-age directive, defaulting to 1 day - * - * Examples: - * - * Serve default favicon: - * - * connect() - * .use(connect.favicon()) - * - * Serve favicon before logging for brevity: - * - * connect() - * .use(connect.favicon()) - * .use(connect.logger('dev')) - * - * Serve custom favicon: - * - * connect() - * .use(connect.favicon('public/favicon.ico')) - * - * @param {String} path - * @param {Object} options - * @return {Function} - * @api public - */ - -module.exports = function favicon(path, options){ - var options = options || {} - , path = path || __dirname + '/../public/favicon.ico' - , maxAge = options.maxAge || 86400000 - , icon; // favicon cache - - return function favicon(req, res, next){ - if ('/favicon.ico' == req.url) { - if (icon) { - res.writeHead(200, icon.headers); - res.end(icon.body); - } else { - fs.readFile(path, function(err, buf){ - if (err) return next(err); - icon = { - headers: { - 'Content-Type': 'image/x-icon' - , 'Content-Length': buf.length - , 'ETag': '"' + utils.md5(buf) + '"' - , 'Cache-Control': 'public, max-age=' + (maxAge / 1000) - }, - body: buf - }; - res.writeHead(200, icon.headers); - res.end(icon.body); - }); - } - } else { - next(); - } - }; -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/json.js b/node_modules/express/node_modules/connect/lib/middleware/json.js deleted file mode 100644 index ef489852..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/json.js +++ /dev/null @@ -1,87 +0,0 @@ - -/*! - * Connect - json - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils'); -var getBody = require('raw-body'); - -/** - * JSON: - * - * Parse JSON request bodies, providing the - * parsed object as `req.body`. - * - * Options: - * - * - `strict` when `false` anything `JSON.parse()` accepts will be parsed - * - `reviver` used as the second "reviver" argument for JSON.parse - * - `limit` byte limit [1mb] - * - * @param {Object} options - * @return {Function} - * @api public - */ - -exports = module.exports = function(options){ - options = options || {}; - var strict = options.strict !== false; - var verify = typeof options.verify === 'function' && options.verify; - - return function json(req, res, next) { - if (req._body) return next(); - req.body = req.body || {}; - - if (!utils.hasBody(req)) return next(); - - // check Content-Type - if (!exports.regexp.test(utils.mime(req))) return next(); - - // flag as parsed - req._body = true; - - // parse - getBody(req, { - limit: options.limit || '1mb', - length: req.headers['content-length'], - encoding: 'utf8' - }, function (err, buf) { - if (err) return next(err); - - if (verify) { - try { - verify(req, res, buf) - } catch (err) { - if (!err.status) err.status = 403; - return next(err); - } - } - - var first = buf.trim()[0]; - - if (0 == buf.length) { - return next(utils.error(400, 'invalid json, empty body')); - } - - if (strict && '{' != first && '[' != first) return next(utils.error(400, 'invalid json')); - try { - req.body = JSON.parse(buf, options.reviver); - } catch (err){ - err.body = buf; - err.status = 400; - return next(err); - } - next(); - }) - }; -}; - -exports.regexp = /^application\/([\w!#\$%&\*`\-\.\^~]*\+)?json$/i; - diff --git a/node_modules/express/node_modules/connect/lib/middleware/limit.js b/node_modules/express/node_modules/connect/lib/middleware/limit.js deleted file mode 100644 index 2b895f97..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/limit.js +++ /dev/null @@ -1,89 +0,0 @@ - -/*! - * Connect - limit - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils'), - brokenPause = utils.brokenPause; - -/** - * Limit: - * - * Status: Deprecated. This middleware will be removed in Connect 3.0. - * If you still wish to use some type of limit middleware, - * you may be interested in: - * - * - [raw-body](https://github.com/stream-utils/raw-body) - * - * Limit request bodies to the given size in `bytes`. - * - * A string representation of the bytesize may also be passed, - * for example "5mb", "200kb", "1gb", etc. - * - * connect() - * .use(connect.limit('5.5mb')) - * .use(handleImageUpload) - * - * @param {Number|String} bytes - * @return {Function} - * @api public - */ - -module.exports = function limit(bytes){ - if ('string' == typeof bytes) bytes = utils.parseBytes(bytes); - if ('number' != typeof bytes) throw new Error('limit() bytes required'); - - if (process.env.NODE_ENV !== 'test') { - console.warn('connect.limit() will be removed in connect 3.0'); - } - - return function limit(req, res, next){ - var received = 0 - , len = req.headers['content-length'] - ? parseInt(req.headers['content-length'], 10) - : null; - - // self-awareness - if (req._limit) return next(); - req._limit = true; - - // limit by content-length - if (len && len > bytes) return next(utils.error(413)); - - // limit - if (brokenPause) { - listen(); - } else { - req.on('newListener', function handler(event) { - if (event !== 'data') return; - - req.removeListener('newListener', handler); - // Start listening at the end of the current loop - // otherwise the request will be consumed too early. - // Sideaffect is `limit` will miss the first chunk, - // but that's not a big deal. - // Unfortunately, the tests don't have large enough - // request bodies to test this. - process.nextTick(listen); - }); - }; - - next(); - - function listen() { - req.on('data', function(chunk) { - received += Buffer.isBuffer(chunk) - ? chunk.length : - Buffer.byteLength(chunk); - - if (received > bytes) req.destroy(); - }); - }; - }; -}; \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/lib/middleware/logger.js b/node_modules/express/node_modules/connect/lib/middleware/logger.js deleted file mode 100644 index fba43e41..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/logger.js +++ /dev/null @@ -1,342 +0,0 @@ -/*! - * Connect - logger - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var bytes = require('bytes'); - -/*! - * Log buffer. - */ - -var buf = []; - -/*! - * Default log buffer duration. - */ - -var defaultBufferDuration = 1000; - -/** - * Logger: - * - * Log requests with the given `options` or a `format` string. - * - * Options: - * - * - `format` Format string, see below for tokens - * - `stream` Output stream, defaults to _stdout_ - * - `buffer` Buffer duration, defaults to 1000ms when _true_ - * - `immediate` Write log line on request instead of response (for response times) - * - * Tokens: - * - * - `:req[header]` ex: `:req[Accept]` - * - `:res[header]` ex: `:res[Content-Length]` - * - `:http-version` - * - `:response-time` - * - `:remote-addr` - * - `:date` - * - `:method` - * - `:url` - * - `:referrer` - * - `:user-agent` - * - `:status` - * - * Formats: - * - * Pre-defined formats that ship with connect: - * - * - `default` ':remote-addr - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"' - * - `short` ':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms' - * - `tiny` ':method :url :status :res[content-length] - :response-time ms' - * - `dev` concise output colored by response status for development use - * - * Examples: - * - * connect.logger() // default - * connect.logger('short') - * connect.logger('tiny') - * connect.logger({ immediate: true, format: 'dev' }) - * connect.logger(':method :url - :referrer') - * connect.logger(':req[content-type] -> :res[content-type]') - * connect.logger(function(tokens, req, res){ return 'some format string' }) - * - * Defining Tokens: - * - * To define a token, simply invoke `connect.logger.token()` with the - * name and a callback function. The value returned is then available - * as ":type" in this case. - * - * connect.logger.token('type', function(req, res){ return req.headers['content-type']; }) - * - * Defining Formats: - * - * All default formats are defined this way, however it's public API as well: - * - * connect.logger.format('name', 'string or function') - * - * @param {String|Function|Object} format or options - * @return {Function} - * @api public - */ - -exports = module.exports = function logger(options) { - if ('object' == typeof options) { - options = options || {}; - } else if (options) { - options = { format: options }; - } else { - options = {}; - } - - // output on request instead of response - var immediate = options.immediate; - - // format name - var fmt = exports[options.format] || options.format || exports.default; - - // compile format - if ('function' != typeof fmt) fmt = compile(fmt); - - // options - var stream = options.stream || process.stdout - , buffer = options.buffer; - - // buffering support - if (buffer) { - var realStream = stream - , interval = 'number' == typeof buffer - ? buffer - : defaultBufferDuration; - - // flush interval - setInterval(function(){ - if (buf.length) { - realStream.write(buf.join('')); - buf.length = 0; - } - }, interval); - - // swap the stream - stream = { - write: function(str){ - buf.push(str); - } - }; - } - - return function logger(req, res, next) { - var sock = req.socket; - req._startTime = new Date; - req._remoteAddress = sock.socket ? sock.socket.remoteAddress : sock.remoteAddress; - - function logRequest(){ - res.removeListener('finish', logRequest); - res.removeListener('close', logRequest); - var line = fmt(exports, req, res); - if (null == line) return; - stream.write(line + '\n'); - }; - - // immediate - if (immediate) { - logRequest(); - // proxy end to output logging - } else { - res.on('finish', logRequest); - res.on('close', logRequest); - } - - - next(); - }; -}; - -/** - * Compile `fmt` into a function. - * - * @param {String} fmt - * @return {Function} - * @api private - */ - -function compile(fmt) { - fmt = fmt.replace(/"/g, '\\"'); - var js = ' return "' + fmt.replace(/:([-\w]{2,})(?:\[([^\]]+)\])?/g, function(_, name, arg){ - return '"\n + (tokens["' + name + '"](req, res, "' + arg + '") || "-") + "'; - }) + '";' - return new Function('tokens, req, res', js); -}; - -/** - * Define a token function with the given `name`, - * and callback `fn(req, res)`. - * - * @param {String} name - * @param {Function} fn - * @return {Object} exports for chaining - * @api public - */ - -exports.token = function(name, fn) { - exports[name] = fn; - return this; -}; - -/** - * Define a `fmt` with the given `name`. - * - * @param {String} name - * @param {String|Function} fmt - * @return {Object} exports for chaining - * @api public - */ - -exports.format = function(name, str){ - exports[name] = str; - return this; -}; - -/** - * Default format. - */ - -exports.format('default', ':remote-addr - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"'); - -/** - * Short format. - */ - -exports.format('short', ':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms'); - -/** - * Tiny format. - */ - -exports.format('tiny', ':method :url :status :res[content-length] - :response-time ms'); - -/** - * dev (colored) - */ - -exports.format('dev', function(tokens, req, res){ - var status = res.statusCode - , len = parseInt(res.getHeader('Content-Length'), 10) - , color = 32; - - if (status >= 500) color = 31 - else if (status >= 400) color = 33 - else if (status >= 300) color = 36; - - len = isNaN(len) - ? '' - : len = ' - ' + bytes(len); - - return '\x1b[90m' + req.method - + ' ' + req.originalUrl + ' ' - + '\x1b[' + color + 'm' + res.statusCode - + ' \x1b[90m' - + (new Date - req._startTime) - + 'ms' + len - + '\x1b[0m'; -}); - -/** - * request url - */ - -exports.token('url', function(req){ - return req.originalUrl || req.url; -}); - -/** - * request method - */ - -exports.token('method', function(req){ - return req.method; -}); - -/** - * response time in milliseconds - */ - -exports.token('response-time', function(req){ - return String(Date.now() - req._startTime); -}); - -/** - * UTC date - */ - -exports.token('date', function(){ - return new Date().toUTCString(); -}); - -/** - * response status code - */ - -exports.token('status', function(req, res){ - return res.headerSent ? res.statusCode : null; -}); - -/** - * normalized referrer - */ - -exports.token('referrer', function(req){ - return req.headers['referer'] || req.headers['referrer']; -}); - -/** - * remote address - */ - -exports.token('remote-addr', function(req){ - if (req.ip) return req.ip; - if (req._remoteAddress) return req._remoteAddress; - var sock = req.socket; - if (sock.socket) return sock.socket.remoteAddress; - return sock.remoteAddress; -}); - -/** - * HTTP version - */ - -exports.token('http-version', function(req){ - return req.httpVersionMajor + '.' + req.httpVersionMinor; -}); - -/** - * UA string - */ - -exports.token('user-agent', function(req){ - return req.headers['user-agent']; -}); - -/** - * request header - */ - -exports.token('req', function(req, res, field){ - return req.headers[field.toLowerCase()]; -}); - -/** - * response header - */ - -exports.token('res', function(req, res, field){ - return (res._headers || {})[field.toLowerCase()]; -}); - diff --git a/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js b/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js deleted file mode 100644 index a729d136..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js +++ /dev/null @@ -1,58 +0,0 @@ -/*! - * Connect - methodOverride - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var methods = require('methods'); - -/** - * Method Override: - * - * Provides faux HTTP method support. - * - * Pass an optional `key` to use when checking for - * a method override, otherwise defaults to _\_method_. - * The original method is available via `req.originalMethod`. - * - * @param {String} key - * @return {Function} - * @api public - */ - -module.exports = function methodOverride(key){ - key = key || "_method"; - return function methodOverride(req, res, next) { - var method; - req.originalMethod = req.originalMethod || req.method; - - // req.body - if (req.body && typeof req.body === 'object' && key in req.body) { - method = req.body[key].toLowerCase(); - delete req.body[key]; - } - - // check X-HTTP-Method-Override - if (req.headers['x-http-method-override']) { - method = req.headers['x-http-method-override'].toLowerCase(); - } - - // replace - if (supports(method)) req.method = method.toUpperCase(); - - next(); - }; -}; - -/** - * Check if node supports `method`. - */ - -function supports(method) { - return ~methods.indexOf(method); -} diff --git a/node_modules/express/node_modules/connect/lib/middleware/multipart.js b/node_modules/express/node_modules/connect/lib/middleware/multipart.js deleted file mode 100644 index 8bf66389..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/multipart.js +++ /dev/null @@ -1,171 +0,0 @@ -/*! - * Connect - multipart - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var multiparty = require('multiparty') - , _limit = require('./limit') - , utils = require('../utils') - , qs = require('qs'); - -/** - * Multipart: - * - * Status: Deprecated. The multipart parser will be removed in Connect 3.0. - * Please use one of the following parsers/middleware directly: - * - * - [formidable](https://github.com/felixge/node-formidable) - * - [connect-multiparty](https://github.com/superjoe30/connect-multiparty) or [multiparty] - * - [connect-busboy](https://github.com/mscdex/connect-busboy) or [busboy](https://github.com/mscdex/busboy) - * - * Parse multipart/form-data request bodies, - * providing the parsed object as `req.body` - * and `req.files`. - * - * Configuration: - * - * The options passed are merged with [multiparty](https://github.com/superjoe30/node-multiparty)'s - * `Form` object, allowing you to configure the upload directory, - * size limits, etc. For example if you wish to change the upload dir do the following. - * - * app.use(connect.multipart({ uploadDir: path })); - * - * Options: - * - * - `limit` byte limit defaulting to [100mb] - * - `defer` defers processing and exposes the multiparty form object as `req.form`. - * `next()` is called without waiting for the form's "end" event. - * This option is useful if you need to bind to the "progress" or "part" events, for example. - * - * Temporary Files: - * - * By default temporary files are used, stored in `os.tmpDir()`. These - * are not automatically garbage collected, you are in charge of moving them - * or deleting them. When `defer` is not used and these files are created you - * may refernce them via the `req.files` object. - * - * req.files.images.forEach(function(file){ - * console.log(' uploaded : %s %skb : %s', file.originalFilename, file.size / 1024 | 0, file.path); - * }); - * - * It is highly recommended to monitor and clean up tempfiles in any production - * environment, you may use tools like [reap](https://github.com/visionmedia/reap) - * to do so. - * - * Streaming: - * - * When `defer` is used files are _not_ streamed to tmpfiles, you may - * access them via the "part" events and stream them accordingly: - * - * req.form.on('part', function(part){ - * // transfer to s3 etc - * console.log('upload %s %s', part.name, part.filename); - * var out = fs.createWriteStream('/tmp/' + part.filename); - * part.pipe(out); - * }); - * - * req.form.on('close', function(){ - * res.end('uploaded!'); - * }); - * - * @param {Object} options - * @return {Function} - * @api public - */ - -exports = module.exports = function(options){ - options = options || {}; - - if (process.env.NODE_ENV !== 'test') { - console.warn('connect.multipart() will be removed in connect 3.0'); - console.warn('visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives'); - } - - var limit = _limit(options.limit || '100mb'); - - return function multipart(req, res, next) { - if (req._body) return next(); - req.body = req.body || {}; - req.files = req.files || {}; - - if (!utils.hasBody(req)) return next(); - - // ignore GET - if ('GET' == req.method || 'HEAD' == req.method) return next(); - - // check Content-Type - if ('multipart/form-data' != utils.mime(req)) return next(); - - // flag as parsed - req._body = true; - - // parse - limit(req, res, function(err){ - if (err) return next(err); - - var form = new multiparty.Form(options) - , data = {} - , files = {} - , done; - - Object.keys(options).forEach(function(key){ - form[key] = options[key]; - }); - - function ondata(name, val, data){ - if (Array.isArray(data[name])) { - data[name].push(val); - } else if (data[name]) { - data[name] = [data[name], val]; - } else { - data[name] = val; - } - } - - form.on('field', function(name, val){ - ondata(name, val, data); - }); - - if (!options.defer) { - form.on('file', function(name, val){ - val.name = val.originalFilename; - val.type = val.headers['content-type'] || null; - ondata(name, val, files); - }); - } - - form.on('error', function(err){ - if (!options.defer) { - err.status = 400; - next(err); - } - done = true; - }); - - form.on('close', function(){ - if (done) return; - try { - req.body = qs.parse(data); - req.files = qs.parse(files); - } catch (err) { - form.emit('error', err); - return; - } - if (!options.defer) next(); - }); - - form.parse(req); - - if (options.defer) { - req.form = form; - next(); - } - }); - } -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/query.js b/node_modules/express/node_modules/connect/lib/middleware/query.js deleted file mode 100644 index f0fb50fc..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/query.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Connect - query - * Copyright(c) 2011 TJ Holowaychuk - * Copyright(c) 2011 Sencha Inc. - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var qs = require('qs') - , parse = require('../utils').parseUrl; - -/** - * Query: - * - * Automatically parse the query-string when available, - * populating the `req.query` object using - * [qs](https://github.com/visionmedia/node-querystring). - * - * Examples: - * - * connect() - * .use(connect.query()) - * .use(function(req, res){ - * res.end(JSON.stringify(req.query)); - * }); - * - * The `options` passed are provided to qs.parse function. - * - * @param {Object} options - * @return {Function} - * @api public - */ - -module.exports = function query(options){ - return function query(req, res, next){ - if (!req.query) { - req.query = ~req.url.indexOf('?') - ? qs.parse(parse(req).query, options) - : {}; - } - - next(); - }; -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/responseTime.js b/node_modules/express/node_modules/connect/lib/middleware/responseTime.js deleted file mode 100644 index 62abc049..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/responseTime.js +++ /dev/null @@ -1,32 +0,0 @@ - -/*! - * Connect - responseTime - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Reponse time: - * - * Adds the `X-Response-Time` header displaying the response - * duration in milliseconds. - * - * @return {Function} - * @api public - */ - -module.exports = function responseTime(){ - return function(req, res, next){ - var start = new Date; - - if (res._responseTime) return next(); - res._responseTime = true; - - res.on('header', function(){ - var duration = new Date - start; - res.setHeader('X-Response-Time', duration + 'ms'); - }); - - next(); - }; -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/session.js b/node_modules/express/node_modules/connect/lib/middleware/session.js deleted file mode 100644 index 128bc591..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/session.js +++ /dev/null @@ -1,358 +0,0 @@ -/*! - * Connect - session - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Session = require('./session/session') - , debug = require('debug')('connect:session') - , MemoryStore = require('./session/memory') - , signature = require('cookie-signature') - , Cookie = require('./session/cookie') - , Store = require('./session/store') - , utils = require('./../utils') - , uid = require('uid2') - , crc32 = require('buffer-crc32') - , parse = require('url').parse; - -// environment - -var env = process.env.NODE_ENV; - -/** - * Expose the middleware. - */ - -exports = module.exports = session; - -/** - * Expose constructors. - */ - -exports.Store = Store; -exports.Cookie = Cookie; -exports.Session = Session; -exports.MemoryStore = MemoryStore; - -/** - * Warning message for `MemoryStore` usage in production. - */ - -var warning = 'Warning: connection.session() MemoryStore is not\n' - + 'designed for a production environment, as it will leak\n' - + 'memory, and will not scale past a single process.'; - -/** - * Session: - * - * Setup session store with the given `options`. - * - * Session data is _not_ saved in the cookie itself, however - * cookies are used, so we must use the [cookieParser()](cookieParser.html) - * middleware _before_ `session()`. - * - * Examples: - * - * connect() - * .use(connect.cookieParser()) - * .use(connect.session({ secret: 'keyboard cat', key: 'sid', cookie: { secure: true }})) - * - * Options: - * - * - `key` cookie name defaulting to `connect.sid` - * - `store` session store instance - * - `secret` session cookie is signed with this secret to prevent tampering - * - `cookie` session cookie settings, defaulting to `{ path: '/', httpOnly: true, maxAge: null }` - * - `proxy` trust the reverse proxy when setting secure cookies (via "x-forwarded-proto") - * - * Cookie option: - * - * By default `cookie.maxAge` is `null`, meaning no "expires" parameter is set - * so the cookie becomes a browser-session cookie. When the user closes the - * browser the cookie (and session) will be removed. - * - * ## req.session - * - * To store or access session data, simply use the request property `req.session`, - * which is (generally) serialized as JSON by the store, so nested objects - * are typically fine. For example below is a user-specific view counter: - * - * connect() - * .use(connect.favicon()) - * .use(connect.cookieParser()) - * .use(connect.session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }})) - * .use(function(req, res, next){ - * var sess = req.session; - * if (sess.views) { - * res.setHeader('Content-Type', 'text/html'); - * res.write('

    views: ' + sess.views + '

    '); - * res.write('

    expires in: ' + (sess.cookie.maxAge / 1000) + 's

    '); - * res.end(); - * sess.views++; - * } else { - * sess.views = 1; - * res.end('welcome to the session demo. refresh!'); - * } - * } - * )).listen(3000); - * - * ## Session#regenerate() - * - * To regenerate the session simply invoke the method, once complete - * a new SID and `Session` instance will be initialized at `req.session`. - * - * req.session.regenerate(function(err){ - * // will have a new session here - * }); - * - * ## Session#destroy() - * - * Destroys the session, removing `req.session`, will be re-generated next request. - * - * req.session.destroy(function(err){ - * // cannot access session here - * }); - * - * ## Session#reload() - * - * Reloads the session data. - * - * req.session.reload(function(err){ - * // session updated - * }); - * - * ## Session#save() - * - * Save the session. - * - * req.session.save(function(err){ - * // session saved - * }); - * - * ## Session#touch() - * - * Updates the `.maxAge` property. Typically this is - * not necessary to call, as the session middleware does this for you. - * - * ## Session#cookie - * - * Each session has a unique cookie object accompany it. This allows - * you to alter the session cookie per visitor. For example we can - * set `req.session.cookie.expires` to `false` to enable the cookie - * to remain for only the duration of the user-agent. - * - * ## Session#maxAge - * - * Alternatively `req.session.cookie.maxAge` will return the time - * remaining in milliseconds, which we may also re-assign a new value - * to adjust the `.expires` property appropriately. The following - * are essentially equivalent - * - * var hour = 3600000; - * req.session.cookie.expires = new Date(Date.now() + hour); - * req.session.cookie.maxAge = hour; - * - * For example when `maxAge` is set to `60000` (one minute), and 30 seconds - * has elapsed it will return `30000` until the current request has completed, - * at which time `req.session.touch()` is called to reset `req.session.maxAge` - * to its original value. - * - * req.session.cookie.maxAge; - * // => 30000 - * - * Session Store Implementation: - * - * Every session store _must_ implement the following methods - * - * - `.get(sid, callback)` - * - `.set(sid, session, callback)` - * - `.destroy(sid, callback)` - * - * Recommended methods include, but are not limited to: - * - * - `.length(callback)` - * - `.clear(callback)` - * - * For an example implementation view the [connect-redis](http://github.com/visionmedia/connect-redis) repo. - * - * @param {Object} options - * @return {Function} - * @api public - */ - -function session(options){ - var options = options || {} - , key = options.key || 'connect.sid' - , store = options.store || new MemoryStore - , cookie = options.cookie || {} - , trustProxy = options.proxy - , storeReady = true - , rollingSessions = options.rolling || false; - - // notify user that this store is not - // meant for a production environment - if ('production' == env && store instanceof MemoryStore) { - console.warn(warning); - } - - // generates the new session - store.generate = function(req){ - req.sessionID = uid(24); - req.session = new Session(req); - req.session.cookie = new Cookie(cookie); - }; - - store.on('disconnect', function(){ storeReady = false; }); - store.on('connect', function(){ storeReady = true; }); - - return function session(req, res, next) { - // self-awareness - if (req.session) return next(); - - // Handle connection as if there is no session if - // the store has temporarily disconnected etc - if (!storeReady) return debug('store is disconnected'), next(); - - // pathname mismatch - var originalPath = parse(req.originalUrl).pathname; - if (0 != originalPath.indexOf(cookie.path || '/')) return next(); - - // backwards compatibility for signed cookies - // req.secret is passed from the cookie parser middleware - var secret = options.secret || req.secret; - - // ensure secret is available or bail - if (!secret) throw new Error('`secret` option required for sessions'); - - var originalHash - , originalId; - - // expose store - req.sessionStore = store; - - // grab the session cookie value and check the signature - var rawCookie = req.cookies[key]; - - // get signedCookies for backwards compat with signed cookies - var unsignedCookie = req.signedCookies[key]; - - if (!unsignedCookie && rawCookie) { - unsignedCookie = utils.parseSignedCookie(rawCookie, secret); - } - - // set-cookie - res.on('header', function(){ - if (!req.session) return; - var cookie = req.session.cookie - , proto = (req.headers['x-forwarded-proto'] || '').split(',')[0].toLowerCase().trim() - , tls = req.connection.encrypted || (trustProxy && 'https' == proto) - , isNew = unsignedCookie != req.sessionID; - - // only send secure cookies via https - if (cookie.secure && !tls) return debug('not secured'); - - // in case of rolling session, always reset the cookie - if (!rollingSessions) { - - // browser-session length cookie - if (null == cookie.expires) { - if (!isNew) return debug('already set browser-session cookie'); - // compare hashes and ids - } else if (originalHash == hash(req.session) && originalId == req.session.id) { - return debug('unmodified session'); - } - - } - - var val = 's:' + signature.sign(req.sessionID, secret); - val = cookie.serialize(key, val); - debug('set-cookie %s', val); - res.setHeader('Set-Cookie', val); - }); - - // proxy end() to commit the session - var end = res.end; - res.end = function(data, encoding){ - res.end = end; - if (!req.session) return res.end(data, encoding); - debug('saving'); - req.session.resetMaxAge(); - req.session.save(function(err){ - if (err) console.error(err.stack); - debug('saved'); - res.end(data, encoding); - }); - }; - - // generate the session - function generate() { - store.generate(req); - } - - // get the sessionID from the cookie - req.sessionID = unsignedCookie; - - // generate a session if the browser doesn't send a sessionID - if (!req.sessionID) { - debug('no SID sent, generating session'); - generate(); - next(); - return; - } - - // generate the session object - var pause = utils.pause(req); - debug('fetching %s', req.sessionID); - store.get(req.sessionID, function(err, sess){ - // proxy to resume() events - var _next = next; - next = function(err){ - _next(err); - pause.resume(); - }; - - // error handling - if (err) { - debug('error %j', err); - if ('ENOENT' == err.code) { - generate(); - next(); - } else { - next(err); - } - // no session - } else if (!sess) { - debug('no session found'); - generate(); - next(); - // populate req.session - } else { - debug('session found'); - store.createSession(req, sess); - originalId = req.sessionID; - originalHash = hash(sess); - next(); - } - }); - }; -}; - -/** - * Hash the given `sess` object omitting changes - * to `.cookie`. - * - * @param {Object} sess - * @return {String} - * @api private - */ - -function hash(sess) { - return crc32.signed(JSON.stringify(sess, function(key, val){ - if ('cookie' != key) return val; - })); -} diff --git a/node_modules/express/node_modules/connect/lib/middleware/session/cookie.js b/node_modules/express/node_modules/connect/lib/middleware/session/cookie.js deleted file mode 100644 index 3125410d..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/session/cookie.js +++ /dev/null @@ -1,128 +0,0 @@ - -/*! - * Connect - session - Cookie - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../../utils') - , cookie = require('cookie'); - -/** - * Initialize a new `Cookie` with the given `options`. - * - * @param {IncomingMessage} req - * @param {Object} options - * @api private - */ - -var Cookie = module.exports = function Cookie(options) { - this.path = '/'; - this.maxAge = null; - this.httpOnly = true; - if (options) utils.merge(this, options); - this.originalMaxAge = undefined == this.originalMaxAge - ? this.maxAge - : this.originalMaxAge; -}; - -/*! - * Prototype. - */ - -Cookie.prototype = { - - /** - * Set expires `date`. - * - * @param {Date} date - * @api public - */ - - set expires(date) { - this._expires = date; - this.originalMaxAge = this.maxAge; - }, - - /** - * Get expires `date`. - * - * @return {Date} - * @api public - */ - - get expires() { - return this._expires; - }, - - /** - * Set expires via max-age in `ms`. - * - * @param {Number} ms - * @api public - */ - - set maxAge(ms) { - this.expires = 'number' == typeof ms - ? new Date(Date.now() + ms) - : ms; - }, - - /** - * Get expires max-age in `ms`. - * - * @return {Number} - * @api public - */ - - get maxAge() { - return this.expires instanceof Date - ? this.expires.valueOf() - Date.now() - : this.expires; - }, - - /** - * Return cookie data object. - * - * @return {Object} - * @api private - */ - - get data() { - return { - originalMaxAge: this.originalMaxAge - , expires: this._expires - , secure: this.secure - , httpOnly: this.httpOnly - , domain: this.domain - , path: this.path - } - }, - - /** - * Return a serialized cookie string. - * - * @return {String} - * @api public - */ - - serialize: function(name, val){ - return cookie.serialize(name, val, this.data); - }, - - /** - * Return JSON representation of this cookie. - * - * @return {Object} - * @api private - */ - - toJSON: function(){ - return this.data; - } -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/session/memory.js b/node_modules/express/node_modules/connect/lib/middleware/session/memory.js deleted file mode 100644 index fb939392..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/session/memory.js +++ /dev/null @@ -1,129 +0,0 @@ - -/*! - * Connect - session - MemoryStore - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Store = require('./store'); - -/** - * Initialize a new `MemoryStore`. - * - * @api public - */ - -var MemoryStore = module.exports = function MemoryStore() { - this.sessions = {}; -}; - -/** - * Inherit from `Store.prototype`. - */ - -MemoryStore.prototype.__proto__ = Store.prototype; - -/** - * Attempt to fetch session by the given `sid`. - * - * @param {String} sid - * @param {Function} fn - * @api public - */ - -MemoryStore.prototype.get = function(sid, fn){ - var self = this; - process.nextTick(function(){ - var expires - , sess = self.sessions[sid]; - if (sess) { - sess = JSON.parse(sess); - expires = 'string' == typeof sess.cookie.expires - ? new Date(sess.cookie.expires) - : sess.cookie.expires; - if (!expires || new Date < expires) { - fn(null, sess); - } else { - self.destroy(sid, fn); - } - } else { - fn(); - } - }); -}; - -/** - * Commit the given `sess` object associated with the given `sid`. - * - * @param {String} sid - * @param {Session} sess - * @param {Function} fn - * @api public - */ - -MemoryStore.prototype.set = function(sid, sess, fn){ - var self = this; - process.nextTick(function(){ - self.sessions[sid] = JSON.stringify(sess); - fn && fn(); - }); -}; - -/** - * Destroy the session associated with the given `sid`. - * - * @param {String} sid - * @api public - */ - -MemoryStore.prototype.destroy = function(sid, fn){ - var self = this; - process.nextTick(function(){ - delete self.sessions[sid]; - fn && fn(); - }); -}; - -/** - * Invoke the given callback `fn` with all active sessions. - * - * @param {Function} fn - * @api public - */ - -MemoryStore.prototype.all = function(fn){ - var arr = [] - , keys = Object.keys(this.sessions); - for (var i = 0, len = keys.length; i < len; ++i) { - arr.push(this.sessions[keys[i]]); - } - fn(null, arr); -}; - -/** - * Clear all sessions. - * - * @param {Function} fn - * @api public - */ - -MemoryStore.prototype.clear = function(fn){ - this.sessions = {}; - fn && fn(); -}; - -/** - * Fetch number of sessions. - * - * @param {Function} fn - * @api public - */ - -MemoryStore.prototype.length = function(fn){ - fn(null, Object.keys(this.sessions).length); -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/session/session.js b/node_modules/express/node_modules/connect/lib/middleware/session/session.js deleted file mode 100644 index 0dd4b400..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/session/session.js +++ /dev/null @@ -1,116 +0,0 @@ - -/*! - * Connect - session - Session - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../../utils'); - -/** - * Create a new `Session` with the given request and `data`. - * - * @param {IncomingRequest} req - * @param {Object} data - * @api private - */ - -var Session = module.exports = function Session(req, data) { - Object.defineProperty(this, 'req', { value: req }); - Object.defineProperty(this, 'id', { value: req.sessionID }); - if ('object' == typeof data) utils.merge(this, data); -}; - -/** - * Update reset `.cookie.maxAge` to prevent - * the cookie from expiring when the - * session is still active. - * - * @return {Session} for chaining - * @api public - */ - -Session.prototype.touch = function(){ - return this.resetMaxAge(); -}; - -/** - * Reset `.maxAge` to `.originalMaxAge`. - * - * @return {Session} for chaining - * @api public - */ - -Session.prototype.resetMaxAge = function(){ - this.cookie.maxAge = this.cookie.originalMaxAge; - return this; -}; - -/** - * Save the session data with optional callback `fn(err)`. - * - * @param {Function} fn - * @return {Session} for chaining - * @api public - */ - -Session.prototype.save = function(fn){ - this.req.sessionStore.set(this.id, this, fn || function(){}); - return this; -}; - -/** - * Re-loads the session data _without_ altering - * the maxAge properties. Invokes the callback `fn(err)`, - * after which time if no exception has occurred the - * `req.session` property will be a new `Session` object, - * although representing the same session. - * - * @param {Function} fn - * @return {Session} for chaining - * @api public - */ - -Session.prototype.reload = function(fn){ - var req = this.req - , store = this.req.sessionStore; - store.get(this.id, function(err, sess){ - if (err) return fn(err); - if (!sess) return fn(new Error('failed to load session')); - store.createSession(req, sess); - fn(); - }); - return this; -}; - -/** - * Destroy `this` session. - * - * @param {Function} fn - * @return {Session} for chaining - * @api public - */ - -Session.prototype.destroy = function(fn){ - delete this.req.session; - this.req.sessionStore.destroy(this.id, fn); - return this; -}; - -/** - * Regenerate this request's session. - * - * @param {Function} fn - * @return {Session} for chaining - * @api public - */ - -Session.prototype.regenerate = function(fn){ - this.req.sessionStore.regenerate(this.req, fn); - return this; -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/session/store.js b/node_modules/express/node_modules/connect/lib/middleware/session/store.js deleted file mode 100644 index 54294cbd..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/session/store.js +++ /dev/null @@ -1,84 +0,0 @@ - -/*! - * Connect - session - Store - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , Session = require('./session') - , Cookie = require('./cookie'); - -/** - * Initialize abstract `Store`. - * - * @api private - */ - -var Store = module.exports = function Store(options){}; - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Store.prototype.__proto__ = EventEmitter.prototype; - -/** - * Re-generate the given requests's session. - * - * @param {IncomingRequest} req - * @return {Function} fn - * @api public - */ - -Store.prototype.regenerate = function(req, fn){ - var self = this; - this.destroy(req.sessionID, function(err){ - self.generate(req); - fn(err); - }); -}; - -/** - * Load a `Session` instance via the given `sid` - * and invoke the callback `fn(err, sess)`. - * - * @param {String} sid - * @param {Function} fn - * @api public - */ - -Store.prototype.load = function(sid, fn){ - var self = this; - this.get(sid, function(err, sess){ - if (err) return fn(err); - if (!sess) return fn(); - var req = { sessionID: sid, sessionStore: self }; - sess = self.createSession(req, sess); - fn(null, sess); - }); -}; - -/** - * Create session from JSON `sess` data. - * - * @param {IncomingRequest} req - * @param {Object} sess - * @return {Session} - * @api private - */ - -Store.prototype.createSession = function(req, sess){ - var expires = sess.cookie.expires - , orig = sess.cookie.originalMaxAge; - sess.cookie = new Cookie(sess.cookie); - if ('string' == typeof expires) sess.cookie.expires = new Date(expires); - sess.cookie.originalMaxAge = orig; - req.session = new Session(req, sess); - return req.session; -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/static.js b/node_modules/express/node_modules/connect/lib/middleware/static.js deleted file mode 100644 index 67970dab..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/static.js +++ /dev/null @@ -1,102 +0,0 @@ -/*! - * Connect - static - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var send = require('send') - , utils = require('../utils') - , parse = utils.parseUrl - , url = require('url'); - -/** - * Static: - * - * Static file server with the given `root` path. - * - * Examples: - * - * var oneDay = 86400000; - * - * connect() - * .use(connect.static(__dirname + '/public')) - * - * connect() - * .use(connect.static(__dirname + '/public', { maxAge: oneDay })) - * - * Options: - * - * - `maxAge` Browser cache maxAge in milliseconds. defaults to 0 - * - `hidden` Allow transfer of hidden files. defaults to false - * - `redirect` Redirect to trailing "/" when the pathname is a dir. defaults to true - * - `index` Default file name, defaults to 'index.html' - * - * @param {String} root - * @param {Object} options - * @return {Function} - * @api public - */ - -exports = module.exports = function(root, options){ - options = options || {}; - - // root required - if (!root) throw new Error('static() root path required'); - - // default redirect - var redirect = false !== options.redirect; - - return function staticMiddleware(req, res, next) { - if ('GET' != req.method && 'HEAD' != req.method) return next(); - var originalUrl = url.parse(req.originalUrl); - var path = parse(req).pathname; - var pause = utils.pause(req); - - if (path == '/' && originalUrl.pathname[originalUrl.pathname.length - 1] != '/') { - return directory(); - } - - function resume() { - next(); - pause.resume(); - } - - function directory() { - if (!redirect) return resume(); - var target; - originalUrl.pathname += '/'; - target = url.format(originalUrl); - res.statusCode = 303; - res.setHeader('Location', target); - res.end('Redirecting to ' + utils.escape(target)); - } - - function error(err) { - if (404 == err.status) return resume(); - next(err); - } - - send(req, path) - .maxage(options.maxAge || 0) - .root(root) - .index(options.index || 'index.html') - .hidden(options.hidden) - .on('error', error) - .on('directory', directory) - .pipe(res); - }; -}; - -/** - * Expose mime module. - * - * If you wish to extend the mime table use this - * reference to the "mime" module in the npm registry. - */ - -exports.mime = send.mime; diff --git a/node_modules/express/node_modules/connect/lib/middleware/staticCache.js b/node_modules/express/node_modules/connect/lib/middleware/staticCache.js deleted file mode 100644 index 66d3c1f6..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/staticCache.js +++ /dev/null @@ -1,238 +0,0 @@ - -/*! - * Connect - staticCache - * Copyright(c) 2011 Sencha Inc. - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils') - , Cache = require('../cache') - , fresh = require('fresh'); - -/** - * Static cache: - * - * Status: Deprecated. This middleware will be removed in - * Connect 3.0. You may be interested in: - * - * - [st](https://github.com/isaacs/st) - * - * Enables a memory cache layer on top of - * the `static()` middleware, serving popular - * static files. - * - * By default a maximum of 128 objects are - * held in cache, with a max of 256k each, - * totalling ~32mb. - * - * A Least-Recently-Used (LRU) cache algo - * is implemented through the `Cache` object, - * simply rotating cache objects as they are - * hit. This means that increasingly popular - * objects maintain their positions while - * others get shoved out of the stack and - * garbage collected. - * - * Benchmarks: - * - * static(): 2700 rps - * node-static: 5300 rps - * static() + staticCache(): 7500 rps - * - * Options: - * - * - `maxObjects` max cache objects [128] - * - `maxLength` max cache object length 256kb - * - * @param {Object} options - * @return {Function} - * @api public - */ - -module.exports = function staticCache(options){ - var options = options || {} - , cache = new Cache(options.maxObjects || 128) - , maxlen = options.maxLength || 1024 * 256; - - if (process.env.NODE_ENV !== 'test') { - console.warn('connect.staticCache() is deprecated and will be removed in 3.0'); - console.warn('use varnish or similar reverse proxy caches.'); - } - - return function staticCache(req, res, next){ - var key = cacheKey(req) - , ranges = req.headers.range - , hasCookies = req.headers.cookie - , hit = cache.get(key); - - // cache static - // TODO: change from staticCache() -> cache() - // and make this work for any request - req.on('static', function(stream){ - var headers = res._headers - , cc = utils.parseCacheControl(headers['cache-control'] || '') - , contentLength = headers['content-length'] - , hit; - - // dont cache set-cookie responses - if (headers['set-cookie']) return hasCookies = true; - - // dont cache when cookies are present - if (hasCookies) return; - - // ignore larger files - if (!contentLength || contentLength > maxlen) return; - - // don't cache partial files - if (headers['content-range']) return; - - // dont cache items we shouldn't be - // TODO: real support for must-revalidate / no-cache - if ( cc['no-cache'] - || cc['no-store'] - || cc['private'] - || cc['must-revalidate']) return; - - // if already in cache then validate - if (hit = cache.get(key)){ - if (headers.etag == hit[0].etag) { - hit[0].date = new Date; - return; - } else { - cache.remove(key); - } - } - - // validation notifiactions don't contain a steam - if (null == stream) return; - - // add the cache object - var arr = []; - - // store the chunks - stream.on('data', function(chunk){ - arr.push(chunk); - }); - - // flag it as complete - stream.on('end', function(){ - var cacheEntry = cache.add(key); - delete headers['x-cache']; // Clean up (TODO: others) - cacheEntry.push(200); - cacheEntry.push(headers); - cacheEntry.push.apply(cacheEntry, arr); - }); - }); - - if (req.method == 'GET' || req.method == 'HEAD') { - if (ranges) { - next(); - } else if (!hasCookies && hit && !mustRevalidate(req, hit)) { - res.setHeader('X-Cache', 'HIT'); - respondFromCache(req, res, hit); - } else { - res.setHeader('X-Cache', 'MISS'); - next(); - } - } else { - next(); - } - } -}; - -/** - * Respond with the provided cached value. - * TODO: Assume 200 code, that's iffy. - * - * @param {Object} req - * @param {Object} res - * @param {Object} cacheEntry - * @return {String} - * @api private - */ - -function respondFromCache(req, res, cacheEntry) { - var status = cacheEntry[0] - , headers = utils.merge({}, cacheEntry[1]) - , content = cacheEntry.slice(2); - - headers.age = (new Date - new Date(headers.date)) / 1000 || 0; - - switch (req.method) { - case 'HEAD': - res.writeHead(status, headers); - res.end(); - break; - case 'GET': - if (utils.conditionalGET(req) && fresh(req.headers, headers)) { - headers['content-length'] = 0; - res.writeHead(304, headers); - res.end(); - } else { - res.writeHead(status, headers); - - function write() { - while (content.length) { - if (false === res.write(content.shift())) { - res.once('drain', write); - return; - } - } - res.end(); - } - - write(); - } - break; - default: - // This should never happen. - res.writeHead(500, ''); - res.end(); - } -} - -/** - * Determine whether or not a cached value must be revalidated. - * - * @param {Object} req - * @param {Object} cacheEntry - * @return {String} - * @api private - */ - -function mustRevalidate(req, cacheEntry) { - var cacheHeaders = cacheEntry[1] - , reqCC = utils.parseCacheControl(req.headers['cache-control'] || '') - , cacheCC = utils.parseCacheControl(cacheHeaders['cache-control'] || '') - , cacheAge = (new Date - new Date(cacheHeaders.date)) / 1000 || 0; - - if ( cacheCC['no-cache'] - || cacheCC['must-revalidate'] - || cacheCC['proxy-revalidate']) return true; - - if (reqCC['no-cache']) return true; - - if (null != reqCC['max-age']) return reqCC['max-age'] < cacheAge; - - if (null != cacheCC['max-age']) return cacheCC['max-age'] < cacheAge; - - return false; -} - -/** - * The key to use in the cache. For now, this is the URL path and query. - * - * 'http://example.com?key=value' -> '/?key=value' - * - * @param {Object} req - * @return {String} - * @api private - */ - -function cacheKey(req) { - return utils.parseUrl(req).path; -} diff --git a/node_modules/express/node_modules/connect/lib/middleware/timeout.js b/node_modules/express/node_modules/connect/lib/middleware/timeout.js deleted file mode 100644 index 5496c024..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/timeout.js +++ /dev/null @@ -1,55 +0,0 @@ -/*! - * Connect - timeout - * Ported from https://github.com/LearnBoost/connect-timeout - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var debug = require('debug')('connect:timeout'); - -/** - * Timeout: - * - * Times out the request in `ms`, defaulting to `5000`. The - * method `req.clearTimeout()` is added to revert this behaviour - * programmatically within your application's middleware, routes, etc. - * - * The timeout error is passed to `next()` so that you may customize - * the response behaviour. This error has the `.timeout` property as - * well as `.status == 503`. - * - * @param {Number} ms - * @return {Function} - * @api public - */ - -module.exports = function timeout(ms) { - ms = ms || 5000; - - return function(req, res, next) { - var id = setTimeout(function(){ - req.emit('timeout', ms); - }, ms); - - req.on('timeout', function(){ - if (res.headerSent) return debug('response started, cannot timeout'); - var err = new Error('Response timeout'); - err.timeout = ms; - err.status = 503; - next(err); - }); - - req.clearTimeout = function(){ - clearTimeout(id); - }; - - res.on('header', function(){ - clearTimeout(id); - }); - - next(); - }; -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/urlencoded.js b/node_modules/express/node_modules/connect/lib/middleware/urlencoded.js deleted file mode 100644 index ebc6f5fc..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/urlencoded.js +++ /dev/null @@ -1,77 +0,0 @@ - -/*! - * Connect - urlencoded - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils'); -var getBody = require('raw-body'); -var qs = require('qs'); - -/** - * Urlencoded: - * - * Parse x-ww-form-urlencoded request bodies, - * providing the parsed object as `req.body` using - * [qs](https://github.com/visionmedia/node-querystring). - * - * Options: - * - * - `limit` byte limit [1mb] - * - * @param {Object} options - * @return {Function} - * @api public - */ - -exports = module.exports = function(options){ - options = options || {}; - var verify = typeof options.verify === 'function' && options.verify; - - return function urlencoded(req, res, next) { - if (req._body) return next(); - req.body = req.body || {}; - - if (!utils.hasBody(req)) return next(); - - // check Content-Type - if ('application/x-www-form-urlencoded' != utils.mime(req)) return next(); - - // flag as parsed - req._body = true; - - // parse - getBody(req, { - limit: options.limit || '1mb', - length: req.headers['content-length'], - encoding: 'utf8' - }, function (err, buf) { - if (err) return next(err); - - if (verify) { - try { - verify(req, res, buf) - } catch (err) { - if (!err.status) err.status = 403; - return next(err); - } - } - - try { - req.body = buf.length - ? qs.parse(buf, options) - : {}; - } catch (err){ - err.body = buf; - return next(err); - } - next(); - }) - } -}; diff --git a/node_modules/express/node_modules/connect/lib/middleware/vhost.js b/node_modules/express/node_modules/connect/lib/middleware/vhost.js deleted file mode 100644 index abbb0500..00000000 --- a/node_modules/express/node_modules/connect/lib/middleware/vhost.js +++ /dev/null @@ -1,40 +0,0 @@ - -/*! - * Connect - vhost - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Vhost: - * - * Setup vhost for the given `hostname` and `server`. - * - * connect() - * .use(connect.vhost('foo.com', fooApp)) - * .use(connect.vhost('bar.com', barApp)) - * .use(connect.vhost('*.com', mainApp)) - * - * The `server` may be a Connect server or - * a regular Node `http.Server`. - * - * @param {String} hostname - * @param {Server} server - * @return {Function} - * @api public - */ - -module.exports = function vhost(hostname, server){ - if (!hostname) throw new Error('vhost hostname required'); - if (!server) throw new Error('vhost server required'); - var regexp = new RegExp('^' + hostname.replace(/[^*\w]/g, '\\$&').replace(/[*]/g, '(?:.*?)') + '$', 'i'); - if (server.onvhost) server.onvhost(hostname); - return function vhost(req, res, next){ - if (!req.headers.host) return next(); - var host = req.headers.host.split(':')[0]; - if (!regexp.test(host)) return next(); - if ('function' == typeof server) return server(req, res, next); - server.emit('request', req, res); - }; -}; diff --git a/node_modules/express/node_modules/connect/lib/patch.js b/node_modules/express/node_modules/connect/lib/patch.js deleted file mode 100644 index 22bcbc62..00000000 --- a/node_modules/express/node_modules/connect/lib/patch.js +++ /dev/null @@ -1,89 +0,0 @@ - -/*! - * Connect - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var http = require('http') - , res = http.ServerResponse.prototype - , setHeader = res.setHeader - , _renderHeaders = res._renderHeaders - , writeHead = res.writeHead; - -// apply only once - -if (!res._hasConnectPatch) { - - /** - * Provide a public "header sent" flag - * until node does. - * - * @return {Boolean} - * @api public - */ - - res.__defineGetter__('headerSent', function(){ - return this._header; - }); - - /** - * Set header `field` to `val`, special-casing - * the `Set-Cookie` field for multiple support. - * - * @param {String} field - * @param {String} val - * @api public - */ - - res.setHeader = function(field, val){ - var key = field.toLowerCase() - , prev; - - // special-case Set-Cookie - if (this._headers && 'set-cookie' == key) { - if (prev = this.getHeader(field)) { - if (Array.isArray(prev)) { - val = prev.concat(val); - } else if (Array.isArray(val)) { - val = val.concat(prev); - } else { - val = [prev, val]; - } - } - // charset - } else if ('content-type' == key && this.charset) { - val += '; charset=' + this.charset; - } - - return setHeader.call(this, field, val); - }; - - /** - * Proxy to emit "header" event. - */ - - res._renderHeaders = function(){ - if (!this._emittedHeader) this.emit('header'); - this._emittedHeader = true; - return _renderHeaders.call(this); - }; - - res.writeHead = function(statusCode, reasonPhrase, headers){ - if (typeof reasonPhrase === 'object') headers = reasonPhrase; - if (typeof headers === 'object') { - Object.keys(headers).forEach(function(key){ - this.setHeader(key, headers[key]); - }, this); - } - if (!this._emittedHeader) this.emit('header'); - this._emittedHeader = true; - return writeHead.call(this, statusCode, reasonPhrase); - }; - - res._hasConnectPatch = true; -} diff --git a/node_modules/express/node_modules/connect/lib/proto.js b/node_modules/express/node_modules/connect/lib/proto.js deleted file mode 100644 index a945bc28..00000000 --- a/node_modules/express/node_modules/connect/lib/proto.js +++ /dev/null @@ -1,233 +0,0 @@ -/*! - * Connect - HTTPServer - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var http = require('http') - , utils = require('./utils') - , debug = require('debug')('connect:dispatcher'); - -// prototype - -var app = module.exports = {}; - -// environment - -var env = process.env.NODE_ENV || 'development'; - -/** - * Utilize the given middleware `handle` to the given `route`, - * defaulting to _/_. This "route" is the mount-point for the - * middleware, when given a value other than _/_ the middleware - * is only effective when that segment is present in the request's - * pathname. - * - * For example if we were to mount a function at _/admin_, it would - * be invoked on _/admin_, and _/admin/settings_, however it would - * not be invoked for _/_, or _/posts_. - * - * Examples: - * - * var app = connect(); - * app.use(connect.favicon()); - * app.use(connect.logger()); - * app.use(connect.static(__dirname + '/public')); - * - * If we wanted to prefix static files with _/public_, we could - * "mount" the `static()` middleware: - * - * app.use('/public', connect.static(__dirname + '/public')); - * - * This api is chainable, so the following is valid: - * - * connect() - * .use(connect.favicon()) - * .use(connect.logger()) - * .use(connect.static(__dirname + '/public')) - * .listen(3000); - * - * @param {String|Function|Server} route, callback or server - * @param {Function|Server} callback or server - * @return {Server} for chaining - * @api public - */ - -app.use = function(route, fn){ - // default route to '/' - if ('string' != typeof route) { - fn = route; - route = '/'; - } - - // wrap sub-apps - if ('function' == typeof fn.handle) { - var server = fn; - fn.route = route; - fn = function(req, res, next){ - server.handle(req, res, next); - }; - } - - // wrap vanilla http.Servers - if (fn instanceof http.Server) { - fn = fn.listeners('request')[0]; - } - - // strip trailing slash - if ('/' == route[route.length - 1]) { - route = route.slice(0, -1); - } - - // add the middleware - debug('use %s %s', route || '/', fn.name || 'anonymous'); - this.stack.push({ route: route, handle: fn }); - - return this; -}; - -/** - * Handle server requests, punting them down - * the middleware stack. - * - * @api private - */ - -app.handle = function(req, res, out) { - var stack = this.stack - , search = 1 + req.url.indexOf('?') - , pathlength = search ? search - 1 : req.url.length - , fqdn = 1 + req.url.substr(0, pathlength).indexOf('://') - , protohost = fqdn ? req.url.substr(0, req.url.indexOf('/', 2 + fqdn)) : '' - , removed = '' - , slashAdded = false - , index = 0; - - function next(err) { - var layer, path, c; - - if (slashAdded) { - req.url = req.url.substr(1); - slashAdded = false; - } - - req.url = protohost + removed + req.url.substr(protohost.length); - req.originalUrl = req.originalUrl || req.url; - removed = ''; - - // next callback - layer = stack[index++]; - - // all done - if (!layer || res.headerSent) { - // delegate to parent - if (out) return out(err); - - // unhandled error - if (err) { - // default to 500 - if (res.statusCode < 400) res.statusCode = 500; - debug('default %s', res.statusCode); - - // respect err.status - if (err.status) res.statusCode = err.status; - - // production gets a basic error message - var msg = 'production' == env - ? http.STATUS_CODES[res.statusCode] - : err.stack || err.toString(); - msg = utils.escape(msg); - - // log to stderr in a non-test env - if ('test' != env) console.error(err.stack || err.toString()); - if (res.headerSent) return req.socket.destroy(); - res.setHeader('Content-Type', 'text/html'); - res.setHeader('Content-Length', Buffer.byteLength(msg)); - if ('HEAD' == req.method) return res.end(); - res.end(msg); - } else { - debug('default 404'); - res.statusCode = 404; - res.setHeader('Content-Type', 'text/html'); - if ('HEAD' == req.method) return res.end(); - res.end('Cannot ' + utils.escape(req.method) + ' ' + utils.escape(req.originalUrl) + '\n'); - } - return; - } - - try { - path = utils.parseUrl(req).pathname; - if (undefined == path) path = '/'; - - // skip this layer if the route doesn't match. - if (0 != path.toLowerCase().indexOf(layer.route.toLowerCase())) return next(err); - - c = path[layer.route.length]; - if (c && '/' != c && '.' != c) return next(err); - - // Call the layer handler - // Trim off the part of the url that matches the route - removed = layer.route; - req.url = protohost + req.url.substr(protohost.length + removed.length); - - // Ensure leading slash - if (!fqdn && '/' != req.url[0]) { - req.url = '/' + req.url; - slashAdded = true; - } - - debug('%s %s : %s', layer.handle.name || 'anonymous', layer.route, req.originalUrl); - var arity = layer.handle.length; - if (err) { - if (arity === 4) { - layer.handle(err, req, res, next); - } else { - next(err); - } - } else if (arity < 4) { - layer.handle(req, res, next); - } else { - next(); - } - } catch (e) { - next(e); - } - } - next(); -}; - -/** - * Listen for connections. - * - * This method takes the same arguments - * as node's `http.Server#listen()`. - * - * HTTP and HTTPS: - * - * If you run your application both as HTTP - * and HTTPS you may wrap them individually, - * since your Connect "server" is really just - * a JavaScript `Function`. - * - * var connect = require('connect') - * , http = require('http') - * , https = require('https'); - * - * var app = connect(); - * - * http.createServer(app).listen(80); - * https.createServer(options, app).listen(443); - * - * @return {http.Server} - * @api public - */ - -app.listen = function(){ - var server = http.createServer(this); - return server.listen.apply(server, arguments); -}; diff --git a/node_modules/express/node_modules/connect/lib/public/directory.html b/node_modules/express/node_modules/connect/lib/public/directory.html deleted file mode 100644 index 8ed8b4ae..00000000 --- a/node_modules/express/node_modules/connect/lib/public/directory.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - listing directory {directory} - - - - - -
    -

    {linked-path}

    - {files} -
    - - \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/lib/public/error.html b/node_modules/express/node_modules/connect/lib/public/error.html deleted file mode 100644 index a6d3fafd..00000000 --- a/node_modules/express/node_modules/connect/lib/public/error.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - {error} - - - -
    -

    {title}

    -

    {statusCode} {error}

    -
      {stack}
    -
    - - diff --git a/node_modules/express/node_modules/connect/lib/public/favicon.ico b/node_modules/express/node_modules/connect/lib/public/favicon.ico deleted file mode 100644 index 895fc96a76b68b4924f1c51d022e1b82fa0f461f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmZQzU<5(|0R}M0U}azs1F|%L7$l?s#Ec9aKoZP=&}i&OouUjIY8@C}uZw4x5z5N2 zvEG^C^vXtt_xtJ?p3O32c(KTx;lsgZhW%5M85Sf}k-mf`L80)|7ga~M{a znlL=>m1Q`#uoPkbC~GtXMnhnDh5$DU1D6mx+;2QAKt3ZQFH}H~1y~00GcqzVg9QXw z_<%(a7y$V|wJgF=E>MgE#Aid|14}IyCM5MhEnxFF;pTzOK(>#80puP=gnOXwAd33` mpMe2}f66m3eB@_fcnmb^7!b1nO#opK8zcsj1F3ph+MhN1^33zoMD^Qf+OIbI z_vzZRHrl2)_1={G_UPKGHvRhX{`~jauQl4MHQJ#z@6?p>&M@@WPy6!9|NZ*z&vNe1 zcIC=+{`~Ov-**4~_}ZE_{`~gl&3W(8didmy*|aqN{{8galk(9!_1RtU%O?2h!v6g6 z@6v$ShAi&Ri1pr);lf_`?X&*+@B8=a>A`dH&}{P1Iqk}7_~w-M;jG)XJpcav^w(GX_Sp8| zeD>+d|NQmh!(aL7q50{g`taQP?5y|Wi}BKO^V3K9=$!J?dHCj)_~nuG-KX{2W%k~7 z_u_^3;eqtqp7hsL^3;F!-g5KWmi5|W^Vp8_*M|Q4?%I?!*^V>*{PNg`E&luOc;lI#g?V|#d$J3Kmj3P0WE89Ckq2LIayw2pn#a5gpo&Z zVQHa4ab7tqP=LQ&$tt8Y(8pAfn~9ADC?Kw4<`Nkj738QR#l^@06i_yI4UbPrP71Km zmgHmy3go+mC8TC%r^k5N=}PAV1qvb()3S1MGvcB>ZS@L34yh=rfP$h5Ln6Ee02${e U&JJnEtpET307*qoM6N<$g314QZvX%Q diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page.png b/node_modules/express/node_modules/connect/lib/public/icons/page.png deleted file mode 100644 index 03ddd799fa0a3aec561c75d4221f195db65d6eb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 635 zcmV->0)+jEP);68^d)m`eN0o>(5%D`Q(1;j>g@G;xlf`0VBQ`PFY?6)!N&f?*K}$p; zB!U=NBn{eB8${1}&-2_L*HuZp@ZP1@clS@cHp)4iM1ewzw59vko7eMM{e9z|%NNdX z0V;`?KKSzTCvTm5bc{L^CIKLUxc2X{i{ISz$8Sgf{q)1nXTP{`{s?9mQ$4&hPiKC- zY8q7(Y1Xu5iCf33=O4Vy(+|zQ?rW#gkKB0f%}?+6{G*qT22|DQB-73`YzA{N4W^=s zq0kQYcbtFfz zLz)H<&|z(Y4kBG67=JY6c|L1R-#TR>fC$3^Y%QEnYO1xHsf)+GU`3F<{J0kR(;pbF3)zyg$H+idfnl-wl5Wkh!vUH z4Z32YP=l_}1rZd1W_D&^$A($A+&a0e&P?xx0!ctY2}*<#p+qPVN*B(YzvAWXa*%bzq z7Fz41LKILT(GWohi9|LgIzSZBhb*Zf6R6O}WYQ4GOi&71s9lmll0x6;8&ILOl$j(c z0Z1T(6Tg09{?wd{moFHNN6PS?$|e>1MxSJ(0Z7o2)J-Zv|>acY@f`(Y@g7GwsEj5NLQo+q|HsxQ5}XSX_d@*^A9ZT9=A{W~j+$GyI1 zc4oqTHx@1FlRjw4XWyPN5i2~l_F3@aBk!0yu^aoRDvXy}8@HCjUVQUsuSH4$T5|r< zzZOn^?Wfa6y|Q($Hx4{ws+)wX6-HP4zo!S?4KJ@7PG@G3G{CjXs(p*kIrj6rHs7_y z+=<-=Q62s9FuWa^X~WKgJIAAZJR&XBB002ovPDHLkV1jCMPILeO diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_attach.png b/node_modules/express/node_modules/connect/lib/public/icons/page_attach.png deleted file mode 100644 index 89ee2da0753040d1ba0a3487473a715a8fe89322..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 794 zcmV+#1LgdQP)i_t#ewV_0K6;=bl;e_Jt7$~$sQ)q$+ia<4Ec+jeaGt9oWH@O|2`W6&O0t!k{B9sUvLWxkCaPsd9W(`fa z;j-|^ZI^2XnzhgZWYRW-kP&J>DWPo`%;JaBX}or79k=+Jo@h%4Eo72tqev+cB?PjP zO<|ByL#>Tehyq$jR74O$B9WDW1`tK`LzYyL3A9iAcRxLkJ`I)n}v%Od-3H>j$OTBtk>(k-9o?8PqI=0 zB&f-+KOXVnjyKJlf4iHOtnuiE_4+ZVJ$dHjU<^o^YCjQ-wt^!;rPpBv(@pFO{9rdw98 z_s@3+yta93oyfL>7AD5}r=|`zS3Gm$_|(iSl8XBd9k%=91J0j2=ivT5cJ18ZmDjh{ z$-RMd{jQ#X79#Sc diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_code.png b/node_modules/express/node_modules/connect/lib/public/icons/page_code.png deleted file mode 100644 index f7ea90419d950f9e69d977a1f5847456d96a5f0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 818 zcmV-21I_%2P)@LCln44|RX7Ti z0HI3&7jPq){odH{?_{%nYVq_;n_c4WbUpvU(&Cvnj!vq|kVC-vpF6vp^;;e0mm6HW z+WPzA`AZ|;pPp$&dNjzrc??4rt`k%Q1l*u-BPD0MQ}Fbm8jnsyezNt7+u{23>t7Em zJtETY?ja9KrVs^!LJ$xEMF3-bAZO;-IQJavE60KA7fO$VY_%N)R6s>g5mW>fL4&aR z*EVgKKTBXm!=L?S0?xM zYqL@C$|EDF2q*3zWW7;PDZ}SK*IE8;i!3U62=qn80C&*I1Le7WwNP5EcX;_oh2dJn zf#HgBe4@r$GcjHjmj2vAfT%(YN?}kK=(*+1*DkNNc1H5R++vfBMhACi<5uFUU+N4+ z<&U*CPmWi}REa7C6-t>2im1CWv5Jkefxa6>)dEj-CAW wWa{_}BJ!}~75?MkfaCnj>Dn=~vkLS70Pk`;z)@TQj{pDw07*qoM6N<$f@imYHUIzs diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_copy.png b/node_modules/express/node_modules/connect/lib/public/icons/page_copy.png deleted file mode 100644 index 195dc6d6c365d298e466026b37c1959d96119ea7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-k-P)^@R5;6Z z(>-WZK@^7J_sq=QY_e{46@P+~LNG}sRzZsxQHvCsN*h5ir6^j7pq-$xu$N#V1gx}9 zClV7;5)7zih-s3DB)G=7|99>ji@So7-P24n=VQ(@GctDX!^_@$bj%oviY6e4Dh;od zooe%Wvs8LEKQ&&bL&@bwi=STIAI@!-gB2jC5+?y?VR~VkrNxam-`6*8&po|RZ5LpS zNKdJ%c4bTX`XjKsnecf%W>1%6WT?pKNdLLq{=(f(Col?P1+oq@R>)W(n=x!|*BIIh z6DJGw_w`)u6yN|vAhMteYK5#b%r5^v+VCFl1IGssaclZZMS{vs-LJ2$)n7DAr6==K z<29#%AXsBsDoO}SBaXR#_Ap!JKx)(1)3O2pj0_dYWz5By*X74fRT01$Fk%P_RzOMDtV?GU{nsYq#K8iy zb6qzLYDj`_f5$BwC*WE(t0m#xYJ*=jC2|HQYHh=pf#QG7oowi`h!L!{DB$8|qY{~X zu8@sU1tWq;n$XThR0%;45mdqXM892|{CJ@0DS*}>?ami06Q_^tvM~Y3K(_-`#m!8f z8f!QIrH4y#61;0Ym0cCoLl8{IPombPHtnn7%SbTdI&G-d>ZQo!_wBMF9nzX!g8HVY xYTJPGciz9XMh3w2fmZ(7v{)r*QZD48?mrio{~IaoqP z|1Ep}yDQG09bP~E^Dk?@JiKQJ z6-pO(3~IOP)IYisL6D6;oAEd;E%zR}{U$rMRNuD6nQV7nesKS>)yLo7JuDCrD>Abi zbj3uW23?^GA}9jQ{M^8v?ejL?HaT7AX5WPZNkBmfN`w-jL?{tT7ykZt$%Yln?p_m~ z-?>&d(LD(jAd}h=LPltPQbO$*Wbyl@G-_k5jXbb#qffHY03>M1jfEqoPJQ6Mr=Byp=^jfzePZV1 zLjCmNi31hdIJHa%e;5g=1(`u3BRzfeExY%=VCu{loOr{`%2hUR*x>tL^W_TTaj);0 zpPR6CUD1+0>4TQ6zVfH3TQ;%l6#(_%yspK@3gcmG#Q4!WCPyLU93nMKk7E2pcA=l45({2jNho>sdF*A~bA zxX?-cp~y_z_kFf+yqu3m#QiB}03?Z&9vvR5TNgj<)($Vm)xq5G>|o2sFMag&6aNF+ WAT1?sQBYt20000iHtsh1EzPArg^Q zIZrOk#rNsfjaSbMAL;<4h;Z=jvu8dzyz8N&Nb7=z03ZUw?9z%8KQEa6yM5=kUnka& z3?FJk2}L7q>na=T#;<7U*P91xfF`;`6%pVgWgRy0?1ZryL@%z52=-!fGXWGEn4M351L4<+7eDgwo|moqXT+s1&Kmn>-uQQ8mL7XY)w5Zk*(g+<3Y3tmkR!bL zOUKaUtj_pX26sH+=Iorwu}MGd`_%O-_sS}8VpG#fJA)Fcs#ezwtZf?q?Ac70mDv`rVs{$od?VPKeqf<-kUjNtS6ecB*mq<&M97K^6IVsDO zt2$Ru!b+>2S<}_H>$RcInusU_8PMNdf(W{sNlJ3FkrwMJPeBPO#d}Y^a{9TH(#{Y) l0D?dWAV4eUJX#h`!2gmISk&ZKd4B)^002ovPDHLkV1g&sd|Lnj diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_error.png b/node_modules/express/node_modules/connect/lib/public/icons/page_error.png deleted file mode 100644 index f07f449a44ff2761bfc7b752db3d08d0e1238b02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 793 zcmV+!1LpjRP)lHwhvrAu0-@MQwt}+5~MQTtu}C0%;W( z1<{R?aHBz*g;pk%AyQVBR_Zu5m~;ES_vxI-O!vIF|H*|T{l`n#garr?$RMk>)?Y48 z(ZF2yTneKb};DNWF+jK)IF`6_IfJ{i|F3o%Q+l&4_HGBD|ACE8na_6>L z=s{^>-C(a7J$6=8A_%h5W!1K6dcL!D?XX+Ndk)oei?UundDpX_E&1Y&`)3P8#Ny0s z2Ag7_&ZPhyGj%)g&S6V2LNun1;iBQm#Fwlfv zgyESZR$X}2P;=RW!2zid1r$hBL{K7>2qi*f7>pT1=RdT3@-anEoH{ z={KFOO;Dh#bV*jaN>}M>RZqQd`S=6O9C3KpI~I>l%QFYfo;jqQYe5fcn`)+)zMm6P z4X&L(>gnN0!%J4^rhX->?$S5bY<=GEU%jc!KLL8sww-Eg;h z`H-yBHa)yfojYT}&G*GFc$<(Yja_q=lZvj66DC^O5%$B)|Z(CeD=n`|eM04SP; z>-=-l+xdJjA~vR6^xB#o{ehf~tSM`iwaQv$O<8NIHA}W_WOw*~ XD^gE}t;YAo00000NkvXXu0mjfl6ZQ> diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_excel.png b/node_modules/express/node_modules/connect/lib/public/icons/page_excel.png deleted file mode 100644 index eb6158eb5ca9c4b64c81e70e0fd894dbc8e2bed9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 817 zcmV-11J3-3P)hdKqhFO_H1|Vn1E?(=|cjAh_&P}y{{^`u< zcYD@PK?$)4i~7o9*6F_$F$4lR(d4AAvrez^(88Hk+)+B7E)M3jc=Ewl4$S^`_qwSF zA%qz@=c2EOsz@0qB1IqsqJU)HaG&+}%`-OM8YqW{K85hqj@4&V9vz!Cm_n0-W#f;# zeEpJde%vdgRn5?(+PY=W*z~|lT2-mtown({ll8&3S5+lWz5K}LTRW{k{eJn3Qz!SU zQ`@qI_n2;K?RG~pYJ9=dj-RWgG;P&wEuoAxL~Q)<>x0b=dED^Outj&xQ^rA;u3pw| zca_ClTh_d9cxXg_U!lLRl0`xU@$=UXO|_dRdtXfKwPawmnf(LC7u}-U>8k6}3u|{8 zs9LHr>MIJZGD^r9h|q2yF24Wuh+PM^yMN9GP1$khlDkdyCY}D{kg}jEf-(kW5jBY> z0rB29ZhG-r=i_R{;+1k0?A-sBM;AP6(k1i9ZuixR4?MqXOvphQgCYj~RnXKKL~J9Q zIDNz~XMfO{ZhUg&BTtMyXJqDVqc<x643?SvKHx004lTvR=0a5$dUw z>Xb470000$S;ka1sfH4I-R8njUol7M4dtApOahDylptpYswf1hD#CwFoz6oEA>(SIECU&IQ%a}GXdnC!9$70`0uH1B00000NkvXXu0mjf!8w72 diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_find.png b/node_modules/express/node_modules/connect/lib/public/icons/page_find.png deleted file mode 100644 index 2f193889f7ea091c292acdd684c595dcb206b5c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmV-#1CacQP)@+1&aazfGU7ezSm^v zpACwO+tu0su66!(dT=`e05DeeCnCFJW(8|RKtKa{4LGONnx2V85A4m%PEQ?MEtR-esdM$pB-`H542D0)N2zSC6Imf)4L8?>%ZrW+H>xCKi$unm zvGZq-*Q%Aahx;C*=l+K%-?>XB)6TB$-L$r*`RUvlA`xP1NG2?)ge8@TQ4EN|Jks0u zcDg;oFC#-#R`YbWB`D?Q`1#y7l$LXhjSLf8AvQuB84}i#j0^!#g{VE#(K7h@5pFHy zSenl=@XBEdxp`h2Ji>CR%=qXJ7!e|?paKet-~;#ok#jETyeB(5&Bkhp;!+;51~G=) zH?L7xmDUu_h+a$+xuWom;AWW!mS$%%+436Rjc@}y?l1134kgD0AOf$OmjOR zstUlshZk$ZC!bAyIg{Y29z#&@3SJ;6D4+_eFume9^#TmMccC5u0J!ZCTnO6m$lnD| z5JeFHf`Xs~1vP>RLKI1GKDY<~pjr2&bi(fX;6Nj-ss@Ds0CcoO0H{JsEQkm{q03skAA);_bv3q{k31qwVo&s-q`Z?_e+j^w(WL? zl+uETs5+~xBU2};OqEE9ETLGwsMGe1%iTRNue)9}|0~E4B*@5#oRXZ9oRXZ9TqRep zPrGZuoOON4n@=uPbyP1y4G=+HktC6l(gZoFD>@_lXDrN?wo+zozGt3P=Qh+3L7+}q z2!WK7geXLnO3Vw;o12Skp%_E#+N#9;DDWP?Q-VS3B$v~Ha)dDzWn0zG~O(^_1!n0HYp-( z+;wPIdoFgQlpYV!10V>5@a)1LyGBMvoa}miyp(bxbMTM-FYNyx;V@TfYddyT00000 LNkvXXu0mjf90!wr diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_go.png b/node_modules/express/node_modules/connect/lib/public/icons/page_go.png deleted file mode 100644 index 80fe1ed0cc75fbb67e9398ae686641f8fb287238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 779 zcmV+m1N8ifP)JNR2Ufr z!Apo%Wf%b9=l#x^8AolrB&K9H?Pg_|78WA8(M3toqE%3B#7*srcF`i*xhupr27%Nr ziguah1+mN)U5GNmyEfQ3-e%_i&-vb-Co#(>FJ+EhQEwjRYVQ(&UYy{U@%vbY||>@4x=B^vIqabI?L* z;-S&DS^V3-ni4^fl|HMkOEbgX)(390>A}|VIypb5Xee4g;7ck zwKh^A3Mi1Mh@eC$5lV!}Fw%sP623U`g3pd_Hr5sunLvTskx4}&Gm%Q6L}(l4x}jCe z*81q1_4-O*ffi~_nMslo?EQ8t*&Ec(pzEw$vc}pKn_Qp0>D7Jr>ATNC3w@9f|Y+U&+)#!t7l&wKp+nP{PQsb+fb=Yf!Fu&5j8vpRj{FT>jD z>d>$sx;A&+`n$HcF}&sYKSyR;=(=9tvvOj@hUG;~4qTYk^_@E=?$*^_pVh_bGnOt~ z;pEw)j{SK$XVc;qy181rT655gW9NG{(yeablViIL>cDI_ux8m>Pp{tY$J0lgo4#ax za?j0EA3s0S!f>{~ykN9h_RhM&g3K(E`q(dE(Rd49+%xMeR9{qlWnmd{s#(SQ>PmFtSQqUjAtB;_Vvt6}AS_5YgM`Uqu`yva+H8^=4U$e4gHb}u zAQ2N{V3A%pO|?Pv?tb6z=jC}SiRa$G^v3q?*6XcYz$p|cq{uLj@#~Fi`J(>5{@&&N zy%T^+;>8cXx%|o77anP?&W1?1A(>-T49z9pyeCl@7YI+Si zKti7=B~``}TImz(G{0PnlQA3P#MAd}sorMjkP!50B7$nAkU^%#nl{Q9lW0@}9fE-> zN(q7tRuiC_T1r|BBtVBTlQ2+70$Rf;eF`Z;lx46Cpu-rEgb)EBKq(b^W8l<^We(`D z43?0=01z<3G6+UUv6`CsWCk6^93!#+<;ws7007{zS3k2k9-zZKFO~(k`>s0y006+1 zgF_jyIhsL-`FMf~JL~C=cV75(CrJ|q;MVO961G=O zm9d)YpJg5g(4i_HKL75eSE}mq$Y}r}hyVdcV~p>6a}oXr80q`oj%+s700000NkvXX Hu0mjfPs|!l diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_key.png b/node_modules/express/node_modules/connect/lib/public/icons/page_key.png deleted file mode 100644 index d6626cb09eb11a298b90a8a27b0d8eab41f49a82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 801 zcmV++1K#|JP)$lC4gU2-`f*>nhR-;k6IP7e>YO!0^w)WK%3$w02v-#>5Ep64PCP| zJihT#O|N+nT7XR2h7dAB?UEAOhJF^mol1i`QtQB`HSY}RE7=r! z)zaVIHr5?>v2Gz&fdYw&2ug$!p+txby(aWZ7(4QT)l2`jX7eMQ{>)lG6ev(fWKxmH zOr%mM5$6B%u~qGtCf40#`mbGj3s!n+^%wnJ&#rl>g<4Z)lB5J6f!?|AP275)Zswr* z%T}4~{;_(?waU!#?JabbF3Cy-kf0{R{z}6$e=5yMQKt3BPcl2>zoTPMqMwF;3!_n|>sT?~bK_-2O_m+o>GJ6h zt=+g$4n7y%1qVJI7*5Yw(hqM=JusY{d}*?U(Oj*gT655eZ>Ksn(qrd7v3}DX1}C>` z+X+8@+4-pVq_fxG zlU}~Ye!0+%>J+pPk+0wV{GM$QaYM?5ux)w2z59=S&H2+K?;gH$bZGzL&g5>G ft+noNiyiPkP9r@8gT|RZ00000NkvXXu0mjfuqTIu diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png b/node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png deleted file mode 100644 index 7e568703d6432c530224e443771a04fc1e2e59c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmV-N1GxN&P)73{`^;G#xwAtHz%LU)4b zqTRU=ve1RNa3QT=ZM7C`iJ~QFQ*9t7<~pX$d^7W%^M8FFCkcQj-~0ZRTBCB(J0^iD z-~e!d9LR`f3#|=(>$bPvx_D-~2jC%pJ=n_e_OK zeJ_2b-KdDDh@@UlzBSMC;EPygH_MwjWBnPGQegihBV73D?-x9PlHL9A=(Vg=8^d<4 z<9r=UkxuIm)*CO=9e###7PztDxUv}e?$0)rQicmYhV`pQ%S!g@;K(?TVfhM#E?bM| z=B0gfb6h@a8bf5FVT-SV~6}?X}9lK@@Yynoty&1zdZP@?RfODsl=2XzzU% zS8gIN43How+9%bK2S@Xbc`O>`z5`%^;pXGy8^4f>9^3!Sp@|O&)m;dOa3q6d;4P-l zca|=H_{G&m?D_+&-}r{u-J$5T=(X4R&)q|O^gN8cgv;s#@5sEPT5_Z)oFo9Ac>l+I zc4ng5zHpps|9)<_Rw>5bKzE(M1j)dFWI_%OH$BJSz0?T+02W0)_a>#vFqb!*d|5wB zzBUN|M&ty51O@=i?kiDrjQ{{}e|^rU?OS|RdxxP1p5mAw36cX72#`R6UsoeCQFI~! z0ATITp!vfeYyQ?Dr=^5BAshfEa0nB~JG?nUa2Aur006MC*<9`)86SPS(W^`H2n+xi ztOWohsFfVfVWrI7PSKW}BmkyPoj(-|J?ES|BGd-}fIxr{00@ANnO*ZR`#)pee4I5T Rmm>fG002ovPDHLkV1i|Hc$okI diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_link.png b/node_modules/express/node_modules/connect/lib/public/icons/page_link.png deleted file mode 100644 index 312eab0914ab59271384686255d1be913a6b3add..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 830 zcmV-E1Ht@>P)VWgGzD=Y79#JI$lhEn`|2MpRa?Bt#-nSD~P0P(mbVe{KrOBoKnSsk>m|ML{6l zBosu@om4j#WzNLRAk+{k1JRvL(MfE&vvbb->v>W{*z*1_uMP}0cIRX*?mz+wk%*#O z%0D-+$B*g1nRkvI+_3E8Pr1NC6@5M&4vWaLCnNlr;lNlr4i91z&)eBGqL{L{GNu;Fof}GS9{gM5BJuH;2QWk8yuOZdB3pGR#s8bd~ zAmt<>3Q=YH$t5YJ5;7@+8Uh6=ktBgY6#6Pa%2F?h910?U8cLT43KAj$Z1*==ra&gILO{WkHfs(--F=bly9l~${z@AT>V$oat!YAD@M zBE0v_F{`g#^wOSP-u~!wvlmXdd*uqFqoZ0^{&nEMDU+=!>({S0wrQhFmoB}Yq1)~0 z^{A)L8Xjzdr(W4_exYO6u3a{4*kIeXZMJUR>Q=ksjW_p!rAwDKYUs90>6Q|C>56o@ zbrSq^Xk7Gq#>dAsn@un`Hz$?w$;Ss`%jV7L%9ShgHFV~C)6M>B`Tp%|nqPc&G*A3| z)Qe+}vT4-x^t1~XE@(6wR;^lPWMo9n*~E!cy~)YRsT2{`?fqeIw-e7N@mOA%UcCIq z_kH(_EK7|>pM*1Wt2^DaDAp|cvp*@(ZZDKpYkKC^?97(`0sb&XTXy7N#sB~S07*qo IM6N<$f;YmCWB>pF diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png b/node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png deleted file mode 100644 index 246a2f0b426faa0c7f5ba009e32b1deaf88d1288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)otxGRZMDZ!_a~nK|b_-`n%VosaL{KDuPV10`(1LIen8kX2Xff$3BE zah#djvFGJ&eE^89Pk*-O^+&d>FC~^GjRYVQ(uuPJyS|-v?9lxA-+tM5>1Qu*n+Ir1 z6KhA>X4$XDH6?-|E5oe1E?pQ5-M;2xw_ex!x}I2+b=}mPFW$U%^;o(Zg*LP!K^1kP%8ynsD^= z1y^6xD1#GLjO{VLdh@0GKY7;d$+NGukV)GRLPn^=q=dF%B#XaJrNP`0E6=}e&Gj3d zKJbQre*WXt!60_DnIzgMQc6S#fvjXxsE1v7;T;njHkdy2miIqAS(nX~o%cO+q+b#h z5tIleLWvL=dQE8OC#{%y*Tnku&K`Tuub&_ELI0t_ea{@3f>Jv&sYqld(%}3_GY3Dm z;O{3*Y?v^A`a|D;^qrM=ykI)U6QHd%WhO~VF!SGjGn0GOZrc3mGZudNl9{Q#X5&-F zuGwVReFLBjE5jr!!^-5*L%!I%PkYH#Hs5rMrEBl^)9)9XTD;xjHFxVZMc3~Dw6#k$ z(-S}RE$bgMHv6Z`mS5|u$$78sp4G-8b@lVkl`HtEv+MGn!F&bKcHPi$$oP_;=BrPf z$(~b3&p3CsuQxhoV$%jIR;`lB-s7FDX)xCTXuJ7ZyIQk96uIR=HBt%-P?N*bp`)EF zq14c}QM+O70NTOa@V~_)&GMZ$^cQDlkyOCa(H3Mf+6xhCuZh`VSN{cQBl5Ys9{cp( rh`2H3A^=GuC6HjQ*7|*0>;m{7QlnX3z3MSD00000NkvXXu0mjfR5FYo diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_paste.png b/node_modules/express/node_modules/connect/lib/public/icons/page_paste.png deleted file mode 100644 index 968f073fdddc1cc0f0800b1ac4001cd9a55f053d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmV;w0zmzVP)AVs!l4K}n~L(tL`6d4Up4iSWnZ3Qg~4n+_J zDGk-qQdogO5JUtO-d5pRp7Nd7_r1^a|M&Zq%mn9Oe((|e0sw%Ur!K7T1pojj=U#f? zQM`qbQrM^DPkwa?DK_be^~z<~RgSMIa<`xP_4P7gg2jCwJ{9^k!fsU=#Ti|%I3p;>90Qd+7|~0h&mIklA#nb>ATL2+v$&u)OBgB z;nsHb)I&QRKeX40H~~cIZxCd}5C} z=79lXoXK%6YlyLtsV$~bSm?Upq|DJh#{|*a7XMm`4QJWZ>s6nL2R1|&J z0VPEwJ9?!n`o5PKAjc->P1Gi8BY*%!5&FVp=#)$mMJYul1Jton}gujiUf??eOy!x&!tsjxy;=Q3_DdcXx=a^OBhW0N~`A@4xB0a*%F? l+@c^sQA%W+?pa#c`9H5UNfS6T{e=Jk002ovPDHLkV1grvM=byV diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_red.png b/node_modules/express/node_modules/connect/lib/public/icons/page_red.png deleted file mode 100644 index 0b18247da5850f3c2486373a3e179acd2772e8aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 641 zcmV-{0)G98P);68^@7JE5sw#jpE*579S@TLkU(6yap1yN*Zuy>-hV%Q_v4Ar&!63c8OBr(ZRhFu z_kWs36-AmgZCT>x!RqM;Zu9tqvoHI~k@UmYo_g(*J3c%2{N8}7I+|qKPQzv}7t>%W zsu&9G)UmCzkDYSw{fBnuW4j;1fKV_nicw`$8C6D=F_qu`zUiK$2Oc?5UVY+D(`I@R zW`KlwqLftWHH3Z2_XVNfKn>VgT~k=@- z+N>c>0|@A_HbI9Jn`v0~7cfIF(TS69zaomDS1QtgvaBBfGEPLHccO2~3jc>n^6}^HAEh-2#VxC7YYcDXv!L9X= z-R*SOUvIs;n`8(LxP4~^2|JsiN^hq6cU}5dn4v1~Kl{eT7pm&f$PoY`hyVe%y8G*S bxB&kH@RuR86sIAS00000NkvXXu0mjfZBi!% diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png b/node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png deleted file mode 100644 index cf347c7d4685128a4a447abb9fb8e939417644f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmV-g1Eu_lP)`6pHR2Ufr z!EI=jWf;Km|8+n2IrHqe<9xxFVk)&(Nh?w$Xk`TAyvb=#e=0aySC z00NkRDM597_LiNIJ2M^qhuTvB004REvvU8@of{r?P8tmo3;+Pk0F0@*jAMhdOkS&1 zhJPPfQa;pP0|4+Yk%#j>X}o-s#EF1_DMV93FsfPP`G*>Ks>L&)Q}w2g%slu0kBfW1 z+*$*0BC^oTl6>OGIq(9BgG4|C90Dk-N_mPazGrQ7uHZ|>BLD!-KmZ)z1e^#?1Sf(M z!6m}K(^b|i%$TcA5bC}r$tAA?0C)g1@CgWliJ;NAk&ZF+-w#}$`-3nZ32C6IVKrHp zr+(!L2hRfF&AsTw>_@ z1y23;E%Oz}?q^Q2d($ayO;-sON2t7$w(Z|o0Pw1YnSp^}0PI+I5HnDNsFCA?oorkG z5sUIGIq=FSyxcj+xlhkm0en=52Bx3@02o12gdAU$_i?v6iyFMuc7P9#zQ-Hf; zVuV$t9P5`m)F2w1?t6{<8%wk{w-PP#Sj#%1MbsjrSI6n;D_@8q9`~W98dNQf$j=iI z6~hpgww&be%X_HI50Hhx@W==u4TLPB;ei-J-1}G8wH}|{i#Lk-WZAyfv}k4y0|fvU zZTy^$u6L>2nWo(NDSV2@MRD}JQ4(c%G%=dG@_vxH?>gcH#*Ue2HC}9sapf8X?R$Z;XEnm&g zW99mh)5jNw008mK8)r^`_{yH0rNn%u1|SpC(tjf#om=+r#lh+?Kb>DVb9`|C0Bvbv zN3U(>f4-tAC1hosRoA7p(b(hL*V}(j>ug<`&U)|l$6o$)!>PBQ9RQSwn9asj2p*|xhU*R^vq?*Twb0t!lm5}`yW5lRy-U0ZYK?8to!;o!r!XeOE$ z0HB3T+6EEoI4PlR=wonwqJ+TvCoWh&$?CAPVYcU= zD{DS0?AkOtb@-hh^ZLq~FMjxYf19X?pa_YqtgZGvv2TaxcF#KT?O%=_*a-kW_;N|D zakkWsOe!)HsT5WRBiC+p;N-c>0Qwy(1D2MDBC595oXSiR07)sKNk-%9*rDBOO^HUD zZW#;)R&EZpqha<(HK$(tZYU#V29<@0qCXgU{gXeGpc_|pTqQD-WO|}%yKZbeX7k*H z2W~CK$v8NBAq~czrc5A(v51g0Wma7`G8}f=ZcuAiYYxZan@gP(;Ku66M6?bquGiHe z3Q0ya)%Lvk@kLixZfZyU@#UFbv+>pYhcj8TRKSr_sWG8i^X~UA**LvbD3(_Lba3xm ziYcpup*A9qJ$?AA=Og05lndxfwr`!C+O~h|B~4 z01q8H`StcY);%&mId7_+)76ovRpeNWRp&4M?#jx@|E-)x%P*A6t^fc407*qoM6N<$ Ef@ddc(f|Me diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white.png deleted file mode 100644 index 8b8b1ca0000bc8fa8d0379926736029f8fabe364..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-&H;pyTSqH(@-Vl>|&1p(LP>kg~E zYiz5X^`c$+%8#zC{u)yfe-5 zmgid={Z3k(ERKCKrE7DF;=x4^O+ pzO8rLO8p|Ip=x)jHOtWj`bJBmKdh_V<`47(gQu&X%Q~loCIFbEay|e6 diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png deleted file mode 100644 index 8f8095e46fa4965700afe1f9d065d8a37b101676..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmV-V0~O9lw>B8WRlD)Gm}Jrz31u-X&&gn2lvjs=i{7nIaL6v2==uw+8Lcs(8j27 z;|c`rmSv@Lx!heopGP^^Ieb3f=R!%Lpp$}iMS-&P3EJ)s48wrJ_Ni0~k|c47D2nj= z{jS6bt|kFpFf|p5cM`_&0Zh|`rfEp0(}=}lT#(6RpzAsUfxv^LSYX>WlAaN$>)*J5 z0#sE+JRUD8iT9*fz{)_^7@6P&!sEjTcD+I9Z4YjT1`wH@fV{cEvneYGFU%maIEU2s55&K(LixD|{p-uiS@?KNj zk-Go8G$hH6g002ovPDHLkV1hVj1#|!a diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png deleted file mode 100644 index 159b24075191fc259cfd80c797a1b0d74c168422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmV;J0%!e+P)7Z7t2}reCh0o`+ zAlt$F2tW%oO@m<=(B8a-_VgLl#~yUMUDWG!0qFPppd^03e+x1WpkO1NhIaKD2A)-@ z=Py8(Wi%R%JtYZG#sTKH@6Z+&!S3Edf8jFJJNKuva#KJQD3X^7;H^fd2di znEN&c58aUG>`>P{Vqq$kLb+TP{?I!d4(|o59X_%|nVEZq2Rk60n7072SWJ{64CV?3 zgS!EB=eYxwQ>P2&$}(iT6UMvuFgHHIEdNA29!EBtg=v~X!DxxEH~}L2zn|52%xalaq@DTdhh{EVwv0IaQ=!?daer zTKp4I`l8SDt;d{8Q`5Ko;BXUi&oAG1l4}59P-{|^S(Rmord5s6qsh<&m@Ab^wqCD) zHyRD}lKLDzpYN&@q5&*47mGzGiqcXpmqR9#K|CH8kXS4RNs`(iEF%HjP%f8ItyaZK z6$%Apvsok(2>~dTO5jTZfq;N?0ch4l01f$k9?4{~Youl-#x{UDMr#AFIkz@SDwPtQ z$gQ^$2|*(Ps9LQiav_8o8Ne<=Zx1*M*syo80sEO1tB%>5 zfdHB`1z+!R@?ghPRKmL)hWEvZE$=*54ose*0JiUNTM_)cMDXhxEKg(?-pD=y<)L4J zT0dSyD0&NhJ$^_8Ko9uom%-ZM4BTM{Tw$9qyPj=-9W;N(Wi@3*-Q4pq`Gcp}^vvNr zyd&PsmG>fpCSZz?K}UIEd;HGgG%0MG>ymxKPwy{>wy(m*Atq7)0000~7 zMNw2LQirBVQoa8G3P(rY+l;L4iy+JwSqmy$9JlSkk z&*$^Eg+c)@!R|v4gdc8+TTn&eWHO0VD&>$!B%o;;WLf4CNs=Inq9d`xA4otCWHK38 zmc{pkX`0Y=9g3oGK{}lVy~OYL|C5lQ&U^l;wrg|7w=BcA9L4-r411?K7f`@348&rw zXD#uW)DK;H`hxO}u%=@Cj{;#u#_;bb1_KgUOT2Hp6;)MvC6P$vQP3=g1O5#aU%I!K zZ1dc@f}YvG&*Spnplm2rIp^VdA^HydZ0X1axdms2!RKi5x-SFA4p@ zC@N|PI$ryHL@t-(!zBsf2-+sYAukhDHU7Lxm88-p zDk^c;sHj}OKUc4lGZU}6umlGVNAJx0%sKDOFwQx|V2pVvxhYKe|L9TNk!~md3BVrm zYPDL8Hk*yU-ER3~LGwJ7N`0ZV&nOhBI{~~A;@ND*=kxg?#^W&`4u`zk?Mg_e)8XlK z`T#M+OaR1!<#Nf_>$S`xrqd}OjYhoJ>q)?3vEX8pY&I()ERjfjrXM$k7e+-Qs3Ihj zNyOuEQ2EGYG7ro!o6VOBQEwuV2z)*tR8>WxP{616FY)p1Pn1d}#9}cxolZC$4n(6- z35hJq0;FlHC{ zp*iF(lgUK(E`($(s9pJ8Kn?(M734H_63WHtf}6SQQ_MXEP!#0|&@>J8dL5TfG&tBw z#tYn{TCGZvAr>cca%YYn^!t73tg8OOJ2FvJ(`YpCyVZi*?Ur+1uUA$hAg8-aK)c;e zQ<)!XwHh|n&ND=$@^)>aF-`~n}#*WMkD*M|f8r$i*z7+W! qF|A!t*4fE(R`<_YIkN&?Jng?3oQ|aAqClPi0000t>5xmo{nArfL4CJwMMm+N`pQ3p^Le$?rMud6Rbxz!-yG7bz2z$^USP5(;udf(gfQ zG~f68y^)EvcNWp#bUoDt2=h+^%o-?-|mo~iieWqLNP<0m@2PTB7ftyb= z@H`K$>v9Pr5X`L|rw&CEN2(9SB7A2SE;d|j9@*F}sd(@*2l|P*fWfK>1drZUrtUA7 zNXO~pKn1cjf~~TLbje1g>EPPzN2GH#UIBxJ{}S9=E`{zs-w#hO?vcH+hJxroI5v?j zD!4lP0WXq8zUx3RAP@|Gq$}6wXCjFLZY^YSWBxN9#&g)ro$%5}aYn#y=tJ_aIT%4d z5d4u`rlp!};XGmbZkJE*kYJoi&N0pd*yxY{0${xD;;Q1h^8f$<07*qoM6N<$f(}t7 Ae*gdg diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png deleted file mode 100644 index 0c76bd1297751b66230f74719504b2adb02b1615..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmV-h0;K(kP)^~*-1fljz_B$LUvK}k?BNXe#Y!m=zM!!V#}8bncK5m;8VP zw86G*RI63?Cd%b9bX|ueNlZ|wR6rj|r_)VIP@r2imh3?SN+^{|kY%~8B{maJ@F*OK z&VH9LwOeGt#DRjj0~v~8`>iO7!Ybi;zE$va`A^T#yW`y44;k^#O~K5*jD=qcUhPSc zvyy~q;5H_1WT1l~cqje9yfa+l!hu6xjdOJ8s;8E^+=QQ$tw p?%p!Hy#YapB=@+^9(46X{{RQg%9y;OKjr`c002ovPDHLkV1g7l326WT diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png deleted file mode 100644 index 87a69145075afd8f8fd8b391c5da1249ec8b2889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)LWh{^|hy<@Q*xw+qo|KpY<+vaXbbW{L4q( zTsjXEJvb}e%bgb=o%W0h?4u1;^bWTqH8}5Th002ovPDHLkV1nrS0P+9; diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png deleted file mode 100644 index c66011fb0fbdcbf210483d676b7131542a0e282b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmV-W0k7R5;6x zlV4BMP#DI+Z{WQcKZBTk0lfkj5F$ztWhP#lcuyb@0@rA^#Kpu5KLA&Rgc}o#aSmis zrZC__xY^&#cI&!!{c|4Q_tcec*#b>|Y15wPcY2=o3;-Bl=(t4;6Ok*pL)-{*A;GX^ zS(@WGp6j~k1wBVR9)BB_gar`}HyRBXh7nM!)u5^>N~MyN6bc0-5{W?44iB<`2biXb zR;wk?jIQg@G!5l)SqhrXCU}x$GU-dY1sra}0uCq@153FUULT=jNwSk}0WBjKz}Jdu z<5gB*<^XtpAmp3m^ZEXQZWd1krhft}CoYaF4cSMvTJ01}X3X37KYdx-D0$c{doUe8 ztY{vlGr-e*;N!WAV%_hgUawyYrhegW>^F)pv%uUTFslHn; zvJ)l{%w(~{!O4`KTmK{Q{zCYltLfs&4?nz|6IdlqHCvX;|HGv~!QW?8P~_d#e0$v$ z)5XHEz{3>qMiH`1+qNYf?huS+@L`J9_$cjJF)Hf?@pu;)`9}BXwGUM{2!{y-4|Z{L zG>z?O%Cp8P5T#j1DID7u_*(Jg?7iss8AZQ+&;u_J{FmILf((9eoiL5nGUe>Fgq*U$z0000 zJ3A|*qoWOonz+4ZQ0KNhDB07SX1?#FrNy8%K)_l}y&kh`*KYdy`Y99&tgNgMLSSrc z?B?+B@HO@P-jS~z2Rgc6yy~Y~%>oJpBxsb$5<&nRLqiuR7K=@0SZj~jTs|sv_jWVX zGe?WflejOaq|Vec=s9+ahmXbyJ|T)Sl*?s82sr2H?Ce~HD5WI+Sz&tmWrN()wI2}+ zKqg92t*l^-#ae~;9%KFlWkmwnY=-UK`_|%ICZ#P1gdjK<2n38VXsuC7{WiU!fZFmm zW~Sda9(Qi@pxO}$ARY+;t##Ao27usOqNt7Hwq6K7G1il@xitj=LIM&{N&#SuX;x4x zmG6FhCg-$PI;hQ=;1iZ>F>^~@)IPi;l}fX?SZ!QiO=X<|pSVkNpJuLHzW(FT_~W-v z?vFpkyE>8ee4d=7wKauH5~dd_M7d2Aa=ICC{Nj7Blqv&DQEP#j_VeWV&WXL>c=LLK zsmYg^_JiDb;%U!UxO%qjFAvsDFj-kzT2$GbV(ZopPM$i$z`!7jvEk07BcC=6FMt4` z*0u3Sy`0b~%#(0000K diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png deleted file mode 100644 index a9f31a278e17993d8d4e13beac2f9d5f7b42d08f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmV-50m}Y~P)sF~CC`eaI+m%Y8jfzomMvZQaNUIT3LIrJ$h)_W{ zwF|LDNlB-g`Hb_G$;>3F$9JF3WYR|3fy2C+_wH}*xp!_4fF2UN4lt#d26oXwru}hT z0+0%Vz-l&|Tdh_L-Ng1G2*RBtBncRx;99K)&+}s0whhxXp{go}$g&Jk6k|vfypI5M z!1sNGVaV?!*L7i87Bo%cfO@?S`bajL{R<($@$|PtgBRcCGIJ_2a|&kO>G-s2aR3E4 zjssoScUa;zIdOeGHBnH13G)W-zt$kUQgNfG;96b=v&4NzRt&@7nN%v3HsG`<<+F$cumMs448N!W3r&2Z*b~D5^$^d6Jxn@SFK5Q8*uKSR7x{I|H-_N1f+AD zSYC5@2K4OKL$==F9U@CH;ONNL(W}oZICHn;d?~pw?GRIsH*x-68Oy6SuK`)`{E)46 z9^3(-HXa#X89SBv?u_YP)WjsQrp;}0X?Bxrvf12IKW8>3t`e~W9|JS<{btTNbNT@EQIWBSNJTX8AMGXD z-SsH|s#>j9Xf~VMtyT-YMD}5^SWHTY5->o`k|d#AE_YQd79j`%GMS7FNvG3b7^Vy9 zn0HYCJy5MyQLoqKnW|JOp-?D*<2V^msZ>BOv0ANd2n7t@{=V;sZrQ>3c})5_%ms4z z7!qXwHHe~!QFj8aR~&*-3F?O|;#(ESIXP~Os%|~y^7c15*q5`gz2-5ol!fU92NIGT z_ves+>+Tf3gfcL?!nimYmR}cw*|BGULzI^7!;k#3K^YO#;!+vM@N~(99+<;fdqr zYPJm+pXYFYk;neQyXXEcTQDNQx57i`Okp9A#n?<7!{#tnKJdsF>utb@JH7dU01gfL zEK2hoPZAnO5+je3&^i*hWM`qCW^vLK!O*?U-#IvXV?#6koWqrwnD{j&K`7N>^tR3G z8zr1(qVOzcF#nF1&0MZ5C$l8*E^Uth0000zE0Ay_3@1Z_7#f-XWL#E{8Al7>L$ z0Rx7lnddoqAyfT%&#`$;v0@*5YdW3w z7mLNoa=FAshK% zDiy@zakyMAxr-H?iQDZi^!t5;Eno2A=?>mMx`Vg(Z!?<53LHLvfTPa`$mjDcX*Qdv zR;ylN4OH+m)fVX&Z#yZpUae;ss@a$K&})gHovkhr@w#xyPVlfVgXti1_357y%I-UHDvRWYvPEX+#g+j4Q9ayba zh7uQN1j%HQgA=Fp9DfODAU^*3*FCs^6IpO7xg`RUXyP)(;=d!ly=#I^l3e0Cub`{H Z`5PU3+D2e&<<>s`J(VpX#y^kqzQ;#=2x({YMw9Q&ndHT&`BD$#%Ql?{+)-OuSA`r}MWJ zVg+2Gc(GW}a=BERPNy^;kEz$|38dTYlFQ{%5S!g@|8f8D_!Nu9_Ni2glF1}xG8xi! zorc39&F6EPOeWOt_XS`W2H_Bo$MXugy}SEctJQj=(TLXTHL(jRXfzs>NF=0SHk;94 zF!&HjdZNX(3U3;LY64IMX__Xv%_wjLC!J2`0Jw?X=zPK$C$`&dYPDKaC={e16bcE@ zgun^<0k;ak*=xLE)@(Lqu~MmsFoMCLY&0Qog`NO(h@kyxaA%EbwJLy8sU*Vi`~52K zX0wrqW;_LmMq@evX4iAM9Od(Q0eHP$1%L|xAh@vrqB`HPQLon}f3aAka=9!3hr=O- z5F9`#J_7Jhah=U(4RjaRhkS4Xkk98kDz-`i!r|~~AQ1TFcDw(@<8g{aBE)l)PNxNE zI(RPyc>9e{@WGSMU%i7*v{!&P$WLz25)0oc=Dl-yy%xYZAm4b-rttL7UjR#%`#j_F R;_m(?iiXTHIMmcoLoO94I8;j@ zv^2DJ5#orqydFJX|Gm$_Bi_vyew+j6{r}$Qc@D1%fQqeAhJj)1!z4pP83k2MV2~s! zSt^w(<#HLFVBg_#xz1W8ioi(WY&Hu~6zil?DI^jJgu`K35(hkP)H%@Imesbg#5!Ps_$Ni*SiR8&sKb9?M`0-mH)gtg&YgRX#*TXz@Z+| z;|2H@xzE0TfuORhuO2k6#K8#sW^J`mQ0+E@$K`QkFV+DTlI$w{GJ;zid{*v9xeIe_ z$|Bp`@iKkgoFK3{4Z)#DWKV~W4K@5WZN+Ql_7%YxNqSx7%cWud&cX>)_PvD*UzxZg a%Kia9Rjz_59@~-t0000)l$0ECbfb-0$}>7z|u>IvuoHEmW&j4lzv=KA+EpIObc7e7{sGA)QVmnM@*^ z%|h38^m;wC+ilpk%>l#V5LCqP_y2_Cayd^XlX;j*r54R*lW!zbqtSpQNyz8(JVmWm zyV4S$2{Uhyc{Cb0QQbf{ZGT{Kr zvJi{K_&f+q^Pv4MK$hhS4TgFj_FD*rLOePdE-E^T7ZzTFCRUB`*?9&h(a#C!-v8lWG#k3AOJQaUey6Oasked^kDPe=Khg@7s584 zg`XfS1)&u*_c;I76#%`kkBfiZgKKo@0)9d6vZw=ExQUtV?eW{Y1Xv}=4X(2zy85d> Y0C^(qLv?Ui{{R3007*qoM6N<$f-gW7od5s; diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png deleted file mode 100644 index b93e77600def75c9a144d3d0a5088a62c02cbb0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmV-w0+s!VP)$>5Y&axjp2O=VLu>*f>1L;s0)kkvKC!*u?s6CVL=HJ6oP~pNfZc; zsKr=bq;7MITw8NXw{SZm%59TId2x_9BQ zV86`NuvGI!>o^V!Na!=$7GJE{Cq`b+XwknM{UcGHFTTfmuS+ zm-zYC!P3+zmY;SG$?!fYkOih`QYaLxyF}A86h$GGN}kFj)_o*0e zjPMP%zTG7FYMAfO2Nn1D`D0Cj?Wl>5q%@CE10nX)KxpNmwk+!IWkzywiYD( zqUXiYYIq3qcRyMGJ;IY`(Gz~E$J$zu2+R{)xGlE*88b3WK6V*J>}2iPY1HH|tER0W z_+^^FdppY?o)Gt5M2`%xwRDH@R3G}^i1l4|6uchm0X0f!@&YdVLB5K&dd7Rv{)DXX zt^&vP;}kqj3f>94j+4xd93>s|Q!Ezi>?r8(Il$P}PFxSqu{d*!Y%*#cX(R0f|Juz# z3o0_xI14Al->1uky@W-rCI_%l&>PK^TXNSN{byMk2AI5vbwp!K-%-@!-vPR3iikL1L7HA!^!~ChCFU#lnGzp88=I z67V8PHBo4(l$u?-AKmT8?#_0rKW9dUNRbpLc`}piywAM9$xZ-3fR1C75T(BjCn-l* zjUcci2oXXo-}iqun@#)+`W@kL_-U&|2>MxZy~3IdmRm&8b)9!2%ksg3R)nNnT*TJOC=6{2hG86Dz+<^p6qfG5$i^UNUh+u)CD7O2 zK>Ioazn;U|+X0x$=feveYZL1W*Fm%e5P1sajd#eW#^5(ddx76*pt$^)b}$Q4oPabL zLc^HF>Z{8za;f$LtN0P$6C?1{X*jtXkRJ8IEeyiSzencvH3Ux_y>y^}wfJrRCQN#9 z?&e+C>sSAfrE%mZD5RfZ`gSndD)=P?+nG5Oq$zmY&-v+gc7R6c0u8^Ke#|XOq?gF@othF3zFpM8Il<8BJrWqBtF>b#_ye4{0)Xbu6j&@UIhRE002ov JPDHLkV1nWI9dZBw diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png deleted file mode 100644 index b977d7e52e2446ea01201c5c7209ac3a05f12c9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-k-P)^@R5;6x zlTS!gQ5431_q{u#M2 zg&W%y6a}>qj1Z|7Vu&-DW6d~k-n;jnHsjb-q#u0C^W!_5^C=MlKq<8oNCQ6qS00!X z5eI;XP=g!^f}j{hku}E1zZ?XCjE;`p19k(Rh%^AQQ54xysU+ocx$c#f61Z4HnT#3u~FR(3>BnZniMIF4DouI8Hi4u>cAK%EN)5PO(ip3(% zIgBx+QYirR){Z8QwV$9Z(Mpt=L-Or3#bf-G@66}txq0yc*T(zNTBDT0T8rO^JeNbSI-Tzf5!pBioy4NwAN^?iN#{;fH1Jke4Xa`^fR8m z%h6dq%xX)S?7`zae))(Xst^Scp6B8FejQW?RLTM8@0=vnnntuRGBM2dpo>gbCnTD= z^<;=JuqdSf@O>Z8^XdR?s+KEfhDdB_#ahFj^giCtzT(s8kA$AViyTqaAR;KGaLzUU z<=GqA4bRwpX|IG~*x>pZ!@zLr`XQ`od>m(`;jz|M_*1GDO#$7;n74ppb8=eiqh760 x0yt}J1#p`gw$`o!R{d7zU9~!Un@nJV{4bstt4Au+Up@c;002ovPDHLkV1kWhGjjj{ diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png deleted file mode 100644 index 581843637079359a6a58fcdccf0763690c67b063..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmV;V0$crwP)_k3`4d{s8lK_6bi^@vq&To98fNoK}7)fx$e2^Y&@<^jR_Ee+8}KG;X`@ z@bCyiolqX>bb1ZIs%QGnjzFU~L8H~d?e;*XP(h(S262}XyZ3a0h07r{KV?E70l+e- zE`%3x|M5#q+;HOC(h@A^M)7Rn13dm0&>K$j%k_F4wOWlsNCIH+!c_#{eS&TL8v4yc zcpnPEY`cQzZ$ILq{U-MA6Z6Z|1p!FZjQ}tXSb25J@HphEqX-6Hqo?-_Zn@{d#>2Ml zJGhxTAd&emK$lV-QK&VM&ix0Xy{GyS3Wp(+E1^8BhD3T0a)m-Lw@Lu4zQRrP)9(3F z^>$hh@N>OAXrmPYunLi|fJ$_*5i`46;M>~*5D{bp>-OL3{+!MJa`3kv~Q#QfQ%c z)1s}QE<_XaYBG;IuRF=td#+}fi4h(6HgoUyJLi0t(*dA^B)%@8kkG&bdM5P5^Z5WF z%d%>m^SbN0XeV)wbUOXn5Ag#A$gJx+7-OCkMM1S%MWIlTkbFLmOeW(&n&wUd&;`>p zVcRy$Z{K0=?SpNnP^;BYEEXleFbq(UY&LrXX$6qkJ~)8+b{=jj3HEXds;Z(?D%}}L zX3`39&dy=Zyar!ehA}e>w)(*vrCct{PI9^2Jpj&OZS8<3-@{0(gNv%1{)zAiLY+_^ zl}e>Ofd4&#Irj#7>=o=Uhv5IJ@?sN0^J|(WL2Uun$4}si6}TG-s3T#p&6GE<<2W)O zf{^Y2HlO#*QDvTp3v&d@;8*}aUC4lisG9(w7@d5Y8y)}U#FwCkqp*Mcgme4{&gGRf zlBfd`nF9cQBKB2_L{F8G2)7pAf$i)Ds`|}-c>pc^LRW{w4SQ)3N^BbZx)6BlCZts! zKph%`(m#xg-q3I7=(us;9<)*2%iuQ1J`oV3gU6V~T}^JU5714JN33&GwEEru0d}Uo U{MPL+lmGw#07*qoM6N<$f^vibe*gdg diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png deleted file mode 100644 index 8d719df5205f7415ce657e5c277db4533c82f346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmV-_0)YLAP)p{{sC7)XB-g4w*W1a1)XtvxrMYa1o?wn&v~3 zHnC|#(>B_M1d`_7gfzLiHy=0c<2kQQdXu*33(xYN_xYW39(cz9jEVT%VokB8|DoF~ z8u%Q5sdl@4VB7X#uh+v_;yOGY&pRi?378ghv)P1cngiAAb<}D#l*?rWDV0j_dc6Zk z-|P~AJZQCA=yWcQjG8fYnimzj*3KqTfN0Cy!G^$7)+bQ$+mHVd1J zvwOR^5Lm<|R+uyB1Nu4vL?d4qa3tn?9H7SZH@~u=fFHEDfSH|bHU6kh0O3%cLdyny z{`9S2Sw~WMy0MPy!64i`jdk4Z3>^+KIL_fN2V_d&ywBt`^IJpxUI$=YAph~5`;xCe Z{s%Y0vkUXDnO6V+002ovPDHLkV1loX8z=w( diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png deleted file mode 100644 index 106f5aa3611a4807ec8c21701c631730275089a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmV;D0d4+?P)<@FR}JvtGRKa0_WfK^c7uXaFH3q@Y!Hnl8VySc`OtkPN3;#l*y*l23+99h*9JzA00}rAC!#M1dZ#v9YOBH|eC*${MmzzYjBu!!-< zK8tujf&(6i)1biy*F>4{f*Kd(IU-JsG&#b_@NgTnx@40)2@2%c;*=?-2Za=}O}7&( w%_K#(S>e1j&gfY?mR})n>>0+8p`iTe2d1K2h8#$+)&Kwi07*qoM6N<$f(2cptN;K2 diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png deleted file mode 100644 index e4a1ecba1b60e54f3777717ed105cdde745b7184..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmV+f0{i`mP)o)wchR-92qq~y6`XqbKmElbB3z{pkZs0VPF`CFvS?7jDn^mFo>d9Y&06* z&1MsS!M-CH3ee+h_sy)Ms%B*ec3R0RpVi9?*mU84yoq(Bw8 z<4(999dJJE!V%pWT~HGRIAb;(#O%2K3?uRpz}AfgE8e9q&OSdr^e^}lC$QXZz;S2A z)w>^oHy>?v)q--`!pmuBe96PxP0u*inQvyFW(llfv9 zXV1s*Jh`y2H%B3ZTA(AzpsQ?hb6_PyZ=c1?_B4fbl>G%!@ubJln=!)x0000#DY{xaiib^#X=YT4@yE_&2#eBulEdzjE`u&@G%2(&u{J-<}d(^uY4W_kMfEX z@!X)AR9F&FL?RJyJRUzvBoeqN{5kY`z3wcM0+du73~_0|*lac! z42Dw(Eg1o{Ash}P8jXrqN+1w`*XxDD;ShmPCZC7#4;wWbHoMvBl$=zF-`?*9j*Nbjd=v@OWt_BgKxP-3wd zy37?ATx&$b+&zRM!K;BD%Okw`Sb@&Pak8$KRX19jWZmC0&n*Ggv%j8nvSPDFw zEkV65AGOoBQ8kf`R|}Px*&INNS%osq9b{Fq2I(x6@xM>tg=vRLF?I`0rWzHyRc>}g~)F_Qn`A>)C_iwK%Z zrIJ;xR)UI1Y4Ozts|-Nho;q zVk9-bX)%F~!;63iu$Fk=VJn3~fmb5S@@)ZqjBT2{f`vT`b2}zxb0$o;EF@G3&BHK^ zc)`1kUzo^Qkk$?KFKHNBD?nP-MJ3b@&4fg;g5l2wMi^g?9qj+~@b;62o_U1_S1J`g z7m^UMg25FX1MJ5AQxAJ5F5WDt=$=-@JV-!LHA2vuxl9kN>PS8x??^AINH6LjF*#nbk4}=n3gfWp$kEX5IpHS zYiQ{@d7Nl&d$#+7-TckP&Q}N91e-C#5QQ<|d}62BjvZR2H60wE-&H<>}%WqH(_V;zPbB1rgSSSC(0? zWlQ#?N3UgnJ9m2C29w!SwoOo5_2Iq!<8vCyEoDoj@#oV($oJEg6Bj@;nD|2g8 s%L|>IZ381yx9RvPhV4J)*SeoEV4lyr#k*`nfWBbxboFyt=akR{0DpOPi2wiq diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png deleted file mode 100644 index d61648452284da1bc28b10385f95b5d2bf027901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)-tZUVHjYHp;RjQ0M0pRlXN=mLv{hk9Ebp9&~+Wj-T9IkpzWPWd#fZ)d=zV^~S`;LE*!&u-?g42^wwN&Xr1~#d5ifl_2*B1OoS}CDno^8a50ArfE8;stQF>AP54J@H~%T zFz84s;dO!QJKD36(~!QOg!t_^gfFcSKDU4yK0+Ypg$NT^mIYcQ6bk*3P(lBLh7Df_ zTu=2xC#+-_%)|{Cv8zz0t|0y4D5M`xAc{gwOKc`ou<*&VjUREFHs1qd<_xSkKeTBt zgyCi=@jj;&Ns^GsWWaIUl0Y2azcDlF@u{(P*!+EH;lnU~b|Lv{4|4Hdkh!qoQHiE$ zY#y>KFA0QEw=4Z|uV{0A^`Y=D}hB$GP&<$bi8q(u;p^0(my3Rz7fP}|# zGZ&#uor4@c3q9r|f?H6-UZmfgKx(iV(MQ`MPWB>iC~SxnN5H*zb*A3#zWwgu&c|}3 zn^g87H{pdeasl%Lhmab&jC?lES}7C?4BFDNA<}20hoY@w_IU%i*T;}}wh!589}7~7 z#Ug`-R~4j&+K_y4kW@X7qLr-)S5qVKU)tO;+kXJ++{vPI@{hVK|PhMVVx_`)vx~zUs}c9O-Ok{00000NkvXXu0mjf DS5_-g diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png deleted file mode 100644 index bf7bd1c9bfd78d689c73ba67cf914182933ee68c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-61ZP)OOAS;jTeL{ZSdz-%)SMH9tDF;N4B6%j=d15J&5qy`F#vB?Ar zqS1nH@%ny_XSI*Y>) z1f5QYdmzT>YciP<3WehS<{GovEaLGv27>{*-7f0&I$yJ^L%ZGPv1YT$V|u;*+ZCWz ztHI~CDVsuy($SfR6-`N~K?9GTB#l%%0h7 z-q`K-y~E)+s8lMyTrPL8^_pUo)9G|SluG5pPqw6!LJB_PzyJUM07*qoM6N<$f^=yZ AYybcN diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png deleted file mode 100644 index f6b74cc40f82fc83e4dfa6e9647ccc1b34e6ed7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmV+_0@eMAP)Vb2f>2}Fa82O3m(Ob=t*sniin`NpInLyMJgI`saru@YOPfh zy4g0#G*cV!#N%;Gq9_VH9?v%kjS3Rb1j8^;C={$Gp=lbj z*(?%?geA!5^Pok%UauwjA)v4g2`HedDw4_Mk4hhBQt?e7YJ5(hcj|3dNu^TOPGnjB zTTsqd3GIZ=Bb`n=7no)dflv&K(lsWw?lH6T1Yht0F9qgIuzh}ym0%n<3d3EBWB*pg z+G!I0lbAEXyd>k|QNuwr4=KX1D+tLPv)j@C1=N4sA4NF9A>HcO3G47*Y6!+SrUH-7 z1hb;^#S=r|`aMh>J#dWruAEf}gcR(DRUC`ZUev&$Sbh0SgLiTXeeHEU<$_YV;9281 zym`igIE%Sm8DpDw7@71Tv^EB5xSdUR*0$Mqp+Wq8OoaZtOg52&)zZ;;M=7#C1Yd6x svjx>8ad4e2x|*xHHwRjcjs6zA0XLDUqKT6dS^xk507*qoM6N<$f*wetruo^Ag2=LamM1T#~4RmC^m`_ zs}H7d&XJ}mg+hU?tu0noRvyjI&o2SRAeYZFesYkts79I^jJ7!A7%6nJwq8O?iT55M z1OQ` zbL{!Cp5o*IRmE9PInMCSPjTwfT~J+EYkz}tjxY=fg5Yf6EQ@DG$0kMJ9h^&$W}9BU zP1oj2;?MWVkKIEl)r=Y;L^Cx2q|>!)qJJ8zE7-V*-Cf7V8_2#1c0N975t~+&QUpQJ z5(uo(-O_`%Rj@U@t>JYAgd!>L?0Idxtd#oW2gc!jinsAEva8|kF4#Ic**mmml_{d^$s}Q5Q)KCys4sfck5bP1SyeHwh2`A<@N&t2j0^lgHC_^(pAAPCNjwl+>AN%C4Ll>_8Hjda%9 oS~i=#*e)>KsPlg0=2)Qg6BCqJ=F8HdGXMYp07*qoM6N<$f@i)wr~m)} diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png deleted file mode 100644 index a65bcb3e1e9613cd9e4950850db43d7025a5fdf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 779 zcmV+m1N8ifP)JNR5;6x zll@CmQ5eTZ^k*a#RQf}fVOdd`5NJh6S(>6Cf$wEW#f&JyAR#GAn9>Gml;nOf3WCDa z5({5&UB$(IF?G#$x4X@Ickg!Y-HU!Z_rzX=qAq-XI_LS^=lOCT0|0{#{kBkYDS7{3 zD`iu%E=`cDX_^#^#n$5SIQ|4Zhsk8>N|zXHXG@*41$i-7`Jr{8`3S_OEcmY|RF48wXkk?WpdVM4OePBSbfh z#4_=eXJg@3epx~gi>QbUmO}Bm(ENN3+@c?jWiKvSrm(o|W}Ud*?vy~fn1!V~Cl4kB zI-;c!8f~-v)jX82%EG($>?;KSD$64f2&4qQ#=Yyrcpy$57RAVuV#vKMP)0hT$r6m# zc^F^XaJ8R9Q|}x^NoJYIvYZkq-z}Tnj@UJK2l2H zG}p+VvtjP2Z%bsb$~7QLJ9#pC0dKi`ppOd^_V;ME6tdzC0PtV|r=@e@37O`%0k^=5^`%cf$eu00N17Ro!{^30krz>a%3j34C?*{Mt2^a4~ zK=P+Qq%|f;Tc&+9ps;@Mw`EE%rgs&#y=j6BUGg96oIqdwj9-fiy*N(|@o)eD002ov JPDHLkV1j#pUPb@_ diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png deleted file mode 100644 index 23a37b891c2f5faa3b8128d45373ceab794ca609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmV;h0#E&kP)PK^TXt2QS_@2qt2T|9~baC-vaPn=ziepcfAwB$0!O2Q)E}1e8!q+9)KT5JVKU z7HNY}h##OS-BxWHWjD0wrPDeEfUClHs%Q6&2u@FTOJkKMQN|_Rlw6rQz$gPzqGNtj z#ruSeFeh835JJFiM6vp@6M5bXj%k7CMt%SIwfbF_fD-3*Os`9Ly_Q3WQ_SX33E{pX z9_WIeeTCGQ3wYALpBcK+P-iuw;3i&7xCua37k5# z`>c`M@sGeC7cdsdz`aE9lOz!hPholbyz%T85LYf6O*@SA+9&+^7k>+4M8$A8iNQq{ zQvn8k?-+dU`Z@gK0z$EtPV#+`^OH`R@cE-cuE&_!D)SZGxmQxeobP_Zwq zMEgi6ePN45N`|V1so0uE8^}1xw8s;VM%Ai@7} z2-&Cyvez_-O4?6uv{zTaj|YeYEk34i~K@`8YW2g{x* zc;7z3lItpVy_et{Z-ZZ)<@*%{l7Ao8mu@V7*gz<_1##mwW*%LEwCdzNsVLYx2*T-J z#HeQ*_a=R~KDdVNk$EVgAIRl$oQi_(`_IrdJciDpH|Xe{K-YsMtc!cRnFi$qzsr4z z5*$;ecov%3->1{YNy6-Gf(Ecy&_I$CjI#laeuE+S120^|Vjsf)W&i*H07*qoM6N<$ Ef)^4A_ab^avY?n0hpS-#mn_4{O$e%cm-@NH=3`90Wq+3`~HKArSdfX`&Z12 z(CY$VW-MNtXX4xy%yUeE?}*~0-|iByA@ZrwXgph4S*bhcc5{HB!DFVm_v}P*g7+Q~K}7K0lcp(^N@X>U zV`{ZpeIf${R6Hgg4FL^`X$Eu75k(PE6ycl$AW0Ic)#@rR7Z(7;V?i-dR1K935Jgcx zPfkwK>2wGokf!Nih^ARp6-6arYFG#(9Ta!x93nFEjoA==z(g?#sDg?Owk?Mg7K+>l zWYsf(<`#+$h9Sp6gFOg_dd+80SkUpk&xM7h0`Sov9W73spU;GP073|VfZ&Gd$J$*0<~TV5aPS|qWH57|VJz+d0000vYep8SaFV10Q$h+;hIUPX_=v5b}%>Tm<(&j1&5;I!55C)oN0s(P%ZB zP3Q#ahfpXKWF@S?jm4U#fv)QovMhrriclyNs6-G12#3R##4PSZ0VY(dRWJ;Lwuq{# zAW0Gwi$yA^R4RZ!;W+L`f&%x{=D^VK#BBWL4Ys{;*!A7Q;!=dN<&D8*GzGaF4`hV4 zDbY0{NrMX>ZqF=0((gR5-zL$kC*b)!fwu{Euru|XrG<$^n#@)7i_>rCmRxnDq>$Y%gJaCkRd|tE*a2x05Pe!I^e13o69#&RQZ36s0 zB=O|K2Yi(jsMqThn}9t?f5E-)L^naZ+db$&%M$!bCdm=jv7?t_lB?3&%Ltq(>ESw? c;MI421LCcoDG!2@;{X5v07*qoM6N<$f`UZt7XSbN diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png deleted file mode 100644 index 134b6693687b2fa5fe36d48a9c0b8001f937c741..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 650 zcmV;50(Jd~P)VHAd+bMNh~)LLRqN>D)-jd9UvB%+hyKX5U|&4t0)fzgD-MPpQ$nHU%yoz=vI zMGb>1Xu!6Hw$NT~@Au<4P-+{9;Uw?&oj31uzH>xX0T7Xkz!(tn|Ed9-s_FqyReC13 z(ll)vW1O{Ck5ihay12Ob2ABc@RUI;zHpaMiyRDs0r>|D4rHw{ItJSJnYjt~jTbGuW z`X(~}?!&86q40R8<4zYw;$qi0^3ec=c&<&H;r`8W%H=Xymf^i;Wo6~<+}zx2UMzpC z*6MZN?(FMv`n|KO3(KFiUaucP0;Z!@LcUNa%8#vGK5aZ>wDgB0Gi=t*argWJcdlMQ z2#MpEX0wU+9&0U?N(F#OgpviU_Y{jYMsj65U3|PjwUOY}lUYj?MTiK_Il}NCVx-Eh zDx-TzMk7se+M#W_>?A1-x}ZXw3kkyz5kW)_hkjsi@RhKadN#H$Hq)$07*qoM6N<$f}lhwPXGV_ diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png deleted file mode 100644 index c4eff0387d5888c638ba09473ba6d2369f7b56f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmV-S0<-;zP)HU2HvUSp%6 z*n}iP63IK?dpo;h@sj9~pcxo;VVTc-XLiP@DgefqE#NE=@oyUd-&HjLpsLIuSFXV-EMck)oQ(A`s%*^&wf0(rNiNHsU%=0Rw;WC z(kbc37l6fo`-0uR!pYkYv8U^3?nsh^@pw!K0TH3uYyx1_2>|JbXPmfskJ|1YAw9w! z9`N)1^Aesr;y5Nr5-ODn)oOL|CGi}f9!&iVwpK$khlIX10X$H6^A_stBJqvLhU$?V`QXqKme*s~gVDJ4A;LTs_e15jhc1;By a82kqHEPVYFAD2!50000JNR5;6( zlS@kiVHAe7MZY2;Xi-5)WxDDgv@tCUl*&p14T@Z~3ThM5LP4tuQfLu@EnG;nXc<8S z6&3BN?fx-cv-Kp6>HRiNTHE>$X( zD&=w+?GWC>?RLAGC6Yix;an~UmSt)tSf}1VS6N1N2ONORdD? zaj}w6DAZZdOud9Ep?M?{iQWbE5^9HLLZZF|1kdy0Tu4InEuboP9@nvbZ-P0n4AZTy zyMRIxRDmUE#LdqYuD=-Qz4N^bC`_#S7vcLn1M}{J(Wl3#c4VWczu&)AjUlh(11>gp>f`wv{KnjF%!aA*Jk N002ovPDHLkV1kkt*XsZP diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png deleted file mode 100644 index f59b7c4365fa1720af1aa04eb47167ddaa6eeed4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmV-&0*(ENP)ZS(e|#C2>JN4>y}l*tQ*E7zP@R2CCJnkW?xa6bgk%(hgtZ z0=~d?U3i`+Mvi4!&~+WPT1^NX#{u6&QIx+DE(oR{&T5&-ovF?@wGw)P&AtpHZa|G%V*GUUqL@@!d4V$`8=##4)ytY959JG zdc&Kho)&AL70^i z!PEmeeDWCB-UbK(*4JST44^tV2z_J(dn~+vBMJT97_7rzFio=~XczIv?PQ5$v%u~y zu(bteXb5I1h2zCV{Jc2~V{{yzZipgsP6;k264$*#5q?GzCm|CPa9CKqm4b116h3Pu z?+%Cm52plC8|5P0@igf2GV1KkCfk{Zecu=G@VNrf>s%g9c5D%@cfxVb6$nY`1IW=4 zt10QqSps_2JLp0f3I0j0u>#qA;v!+T))KEbCg|mo3q0pG{OR}p0fPds8+K~d>Hq)$ M07*qoM6N<$g1S2e3jhEB diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png deleted file mode 100644 index 44084add79b9a0fc3354d16bbd4b4b5ff8095da7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$R@9E+gqH(@-qA%AW0|7U8+xDRI z0k`B18}ImRw2g{jTGP$Pmx3yI6F_2s&$|`cJ!i0UN zB3H;=r{#{FwLaNVJ&hZl9+MTHGx1T^-A=Q0?hRb#8a~x50X%;`b6ik3cw=#XdxWy= zgrpBoDjpwP&g9<9h3x!k_B!?vuTJVkmIJ-U N;OXk;vd$@?2>|rNdMN+^ diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png deleted file mode 100644 index 3a1441c9a12062a4bb3d706000d3ca14399aebca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?Pe~P)SCZIX8XZzY2l?gCw6LlgWJ5Avz#QX4|&mI8LN)w~J1vgL=KLAhlWz*=#m~gyvxa z&;iC6gb?aZvMdXxX`<0+D1hs_pqJ!wxqlEH;CJ)je~uL(gpi@v>!I0f_Kl=E(E+Tq z26na*9gribxx-Oft(HnstyXUUy!39&E-cI%J5Rsy;(PGZH{g{ty!HVC&yGPT3H8x# zw{^gBPW)O0FMoh{k%l<`1a|To_Wl&u&-GXm8izU|&<&utILc4wc6s@u1bmTz6x{qg zTw@7=FQRcg&r`h+gcR$*Jbv+*DPk7v)B@e0o2 z6IlBXW&8xh@9)YKiV~2>+z&XKd24JT55YWz&JtfvCg4r^~bLP79-yS@n$OW00000NkvXXu0mjf DStt2z diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png deleted file mode 100644 index e7708292adabf4821612bfca032cbd019c63180b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 634 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 diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png deleted file mode 100644 index 1eb880947ddf3e745c29e8d9dc90f09c7e6e323c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$R?&;zfqH(@;q9b3Efq-lM(nr^( z=EYR73-9e)UYMWsXy%?aZsD68Yyv^2$~6QgEcljw%kx>O(f-gQ?@fOOx3A-0+Qw?O zRx~W)kn~Qe2d6f9nMG#g9Q04Mk==M~N!Dglvxk!fgVh#w@ZV$IY1+Xc`d{d2UcaP~ zfWp)_Ivqj}l2SPy^9ZWy6rG9Yx4v67_uA&&9|XA~5-#3)W3%em1peD8RWH^#O%XoM zxMPud%}GTj#~*+7JMxTd!`{^Q+>(D3*|@KV`*G2;{QnANOxu1$r2xIe;OXk;vd$@? F2>@zac~<}c diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png deleted file mode 100644 index ae8ecbf47672a874c0958d0d113a56162c2bd364..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AX}P)hkjP zNW|QGv-YFNLN^qH@tJycPNG5ti6B7;r4mEr#lr@*T8*M85D`{ZR^BWwF23T<%MYIh zdC)S*p=|xk^!~H=+HSZ183~y8v4|mYmZxt&)5{{~>J`>E223Q5>T$=~mtA71q-jdG z+eJhOAyBW^0k9Gk1+rX8)zFx((CG^&tDY>6XaS~Fy!WJON|Gdujg5^~Vzt@o%BcYLiNiTQSD`zL^ociBz_>bDlpw3kriQ@Z`bVsGz-_6N>$&gTDiKDTKR^ z-hB*tHa^>!oD~5TK^0UK5rZ}RBm50Bv}S-yA%s=Ha5RYb{)!z2N&$&64gfhybBu8p lh~_|?8^bu;BRYt{<}Yrwd83Y=s?Goa002ovPDHLkV1l%3CP4rI diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png deleted file mode 100644 index 6ed2490ed1432d5d667a76235360824a1088e928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 zcmV<40wMj0P)JT{hN;C#tgf#9krG=I>5!<*aE1_(spcgF}<`n4i zJi-}^6UUeU4jUFwdCiVPDm%`Zx^UBa8J(mnR6wEgz^}o8;)M*Y(@l_!Kfv)}4+NuM zaPXE50z)r)9=D=SR|RIqfQ^j}Hu!fzMeQBo+@PZk1G8hOw|vBTvkx`HM)Xe9q3xao z@`p0`NO!2904FHSLA6E@Y-O6zH$DQzvq@aHsz}}<(!v(Z_+EodX%R&NZW75g+nENo zV0020rxE^;7d!067AN>6*+&YLp$9uH6F-=In`XC{Cn%+o|5)b&boEPr02w@|P*oGm QmjD0&07*qoM6N<$g78X0Q~&?~ diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png deleted file mode 100644 index fecadd08afed92536be91ab12d8e37b6bf410d5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 613 zcmV-r0-F7aP)wK%m(L+9IV|s|#(WRl-O^4GvaQsnHq|OstfO zIJ3}3<01}YGARE4m!7=)QisvlHUo!Qymx-@-t*p_129Ko-#pVI)6#!*kLj-AGXWNR zyA_{wKii_amK7^YT-v z6#plaNm#8`-kz@OvjIt^4%IN{@J3bR zRI}ME1Mv85p|%;RK>ViR>APPLB4;;BpCtqE@P+*7!G>I4UjNx~e>r3HA^tWCQ@S)l z{BslcSwL-CxQ&_ZZSv_g0Tu{yi*X){Mt|W7)lbE`SQxFP00000NkvXXu0mjf;)M*S diff --git a/node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png b/node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png deleted file mode 100644 index fd4bbccdf1643f4ff5022fbc59b82546e259317e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 386 zcmV-|0e$|7P)_QM!1S$Bhw4w+iRuFWf;tfR6D%SMJrb+tx zC9R6{2>Ou6#juIy6u(I?|;&Owi$sRB4^20apB5xE2 z#B9XekY66S6lzfCL!eEQRgo0LokTA55@Y#%_wN!TXPw^Q4IIXsG~v#u_4t;x_HM16EQ@QRY+rut&97&UefsPmLrQ5P zBC2kcbux9L%2bJz$P$XV$*zSxb2e@6_3O#;&!FD<&hLjGn%~%en;7)djE^d6!t$lW7GyIOKlQ46hr`Z zjLNuRDP_53dNoN?wd&HMgL^m1DXFU<5dQsrceN>fSz00000)O9XRTN^$%%`*Fg>ryDtc(lF@?b>dE!20r+y z#Q*>(wbV5H`-E4Do={CJp7=ERhw15hgZi)?jRG88 zzVz(5;g?Td1izJyO33bhjg2Qc7FVY@f9!o)Gu?DII~vm-Dc?}3M!fsgjP?F(7`rgg z+xOk8XD)e?Zl=5+un`5!7kr?F=eq)K-5uqr%yU$1hLv){Vlm=)*5~`lwMciiXFu*g z)*Jkz6AF>#zb(Vx`Iv{bdGZHtlW)v(y5k^|xgSUc9%0}S20nrYrO}78ofk?bV!5)4 z=Ngz@+$9N1>>mA%IWx`Fqa240bWkiW;2TZgd8CZS0U}@mknC;!2;wi$eI@`h0y2JS`Eae0CW}q(2(%!m8 zWq$`PDU>LT1_y*bBv#P5<@q0@ttz$hIH}YMDvAigCc=y*)jY-VOpTd;A8@3t7Xh4r z0KTWOk;N2Ox4!&&^4B*no$WtTX!BXB)rg!y8dvGgKBQKLJNXRRp0}Bsjd1|LNQX~c zbC~fjrk2iL@4dYF*vt;}dFn(%h)n_-vzEIHMOKRkdF%3Lq|zBgKm_h>TEq!))nWjq zzn;B!?!(dQcHu$#=JF`cS&W~C`WHFW^B!~MI#k)>1Vk&eQy8P1O`J6V04{D@|7d6^ zyBABnh-d^H0FX&L07M||E0n_dp4v&Q%PSE9p#R#Hq)`5I_(B5CE#q dxjPz0{s-<+c#AC!i7@~G002ovPDHLkV1iPlpuqqD diff --git a/node_modules/express/node_modules/connect/lib/public/style.css b/node_modules/express/node_modules/connect/lib/public/style.css deleted file mode 100644 index 0709908a..00000000 --- a/node_modules/express/node_modules/connect/lib/public/style.css +++ /dev/null @@ -1,257 +0,0 @@ -* { - margin: 0; - padding: 0; - outline: 0; -} - -body { - padding: 80px 100px; - font: 13px "Helvetica Neue", "Lucida Grande", "Arial"; - background: #ECE9E9 -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#ECE9E9)); - background: #ECE9E9 -moz-linear-gradient(top, #fff, #ECE9E9); - background-repeat: no-repeat; - color: #555; - -webkit-font-smoothing: antialiased; -} -h1, h2, h3 { - font-size: 22px; - color: #343434; -} -h1 em, h2 em { - padding: 0 5px; - font-weight: normal; -} -h1 { - font-size: 60px; -} -h2 { - margin-top: 10px; -} -h3 { - margin: 5px 0 10px 0; - padding-bottom: 5px; - border-bottom: 1px solid #eee; - font-size: 18px; -} -ul li { - list-style: none; -} -ul li:hover { - cursor: pointer; - color: #2e2e2e; -} -ul li .path { - padding-left: 5px; - font-weight: bold; -} -ul li .line { - padding-right: 5px; - font-style: italic; -} -ul li:first-child .path { - padding-left: 0; -} -p { - line-height: 1.5; -} -a { - color: #555; - text-decoration: none; -} -a:hover { - color: #303030; -} -#stacktrace { - margin-top: 15px; -} -.directory h1 { - margin-bottom: 15px; - font-size: 18px; -} -ul#files { - width: 100%; - height: 100%; - overflow: hidden; -} -ul#files li { - float: left; - width: 30%; - line-height: 25px; - margin: 1px; -} -ul#files li a { - display: block; - height: 25px; - border: 1px solid transparent; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; - overflow: hidden; - white-space: nowrap; -} -ul#files li a:focus, -ul#files li a:hover { - background: rgba(255,255,255,0.65); - border: 1px solid #ececec; -} -ul#files li a.highlight { - -webkit-transition: background .4s ease-in-out; - background: #ffff4f; - border-color: #E9DC51; -} -#search { - display: block; - position: fixed; - top: 20px; - right: 20px; - width: 90px; - -webkit-transition: width ease 0.2s, opacity ease 0.4s; - -moz-transition: width ease 0.2s, opacity ease 0.4s; - -webkit-border-radius: 32px; - -moz-border-radius: 32px; - -webkit-box-shadow: inset 0px 0px 3px rgba(0, 0, 0, 0.25), inset 0px 1px 3px rgba(0, 0, 0, 0.7), 0px 1px 0px rgba(255, 255, 255, 0.03); - -moz-box-shadow: inset 0px 0px 3px rgba(0, 0, 0, 0.25), inset 0px 1px 3px rgba(0, 0, 0, 0.7), 0px 1px 0px rgba(255, 255, 255, 0.03); - -webkit-font-smoothing: antialiased; - text-align: left; - font: 13px "Helvetica Neue", Arial, sans-serif; - padding: 4px 10px; - border: none; - background: transparent; - margin-bottom: 0; - outline: none; - opacity: 0.7; - color: #888; -} -#search:focus { - width: 120px; - opacity: 1.0; -} - -/*views*/ -#files span { - display: inline-block; - overflow: hidden; - text-overflow: ellipsis; - text-indent: 10px; -} -#files .name { - background-repeat: no-repeat; -} -#files .icon .name { - text-indent: 28px; -} - -/*tiles*/ -.view-tiles .name { - width: 100%; - background-position: 8px 5px; -} -.view-tiles .size, -.view-tiles .date { - display: none; -} - -/*details*/ -ul#files.view-details li { - float: none; - display: block; - width: 90%; -} -ul#files.view-details li.header { - height: 25px; - background: #000; - color: #fff; - font-weight: bold; -} -.view-details .header { - border-radius: 5px; -} -.view-details .name { - width: 60%; - background-position: 8px 5px; -} -.view-details .size { - width: 10%; -} -.view-details .date { - width: 30%; -} -.view-details .size, -.view-details .date { - text-align: right; - direction: rtl; -} - -/*mobile*/ -@media (max-width: 768px) { - body { - font-size: 13px; - line-height: 16px; - padding: 0; - } - #search { - position: static; - width: 100%; - font-size: 2em; - line-height: 1.8em; - text-indent: 10px; - border: 0; - border-radius: 0; - padding: 10px 0; - margin: 0; - } - #search:focus { - width: 100%; - border: 0; - opacity: 1; - } - .directory h1 { - font-size: 2em; - line-height: 1.5em; - color: #fff; - background: #000; - padding: 15px 10px; - margin: 0; - } - ul#files { - border-top: 1px solid #cacaca; - } - ul#files li { - float: none; - width: auto !important; - display: block; - border-bottom: 1px solid #cacaca; - font-size: 2em; - line-height: 1.2em; - text-indent: 0; - margin: 0; - } - ul#files li:nth-child(odd) { - background: #e0e0e0; - } - ul#files li a { - height: auto; - border: 0; - border-radius: 0; - padding: 15px 10px; - } - ul#files li a:focus, - ul#files li a:hover { - border: 0; - } - #files .header, - #files .size, - #files .date { - display: none !important; - } - #files .name { - float: none; - display: inline-block; - width: 100%; - text-indent: 0; - background-position: 0 0; - } - #files .icon .name { - text-indent: 41px; - } -} diff --git a/node_modules/express/node_modules/connect/lib/utils.js b/node_modules/express/node_modules/connect/lib/utils.js deleted file mode 100644 index 9839bc33..00000000 --- a/node_modules/express/node_modules/connect/lib/utils.js +++ /dev/null @@ -1,408 +0,0 @@ - -/*! - * Connect - utils - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var http = require('http') - , crypto = require('crypto') - , parse = require('url').parse - , sep = require('path').sep - , signature = require('cookie-signature') - , nodeVersion = process.versions.node.split('.'); - -// pause is broken in node < 0.10 -exports.brokenPause = parseInt(nodeVersion[0], 10) === 0 - && parseInt(nodeVersion[1], 10) < 10; - -/** - * Return `true` if the request has a body, otherwise return `false`. - * - * @param {IncomingMessage} req - * @return {Boolean} - * @api private - */ - -exports.hasBody = function(req) { - var encoding = 'transfer-encoding' in req.headers; - var length = 'content-length' in req.headers && req.headers['content-length'] !== '0'; - return encoding || length; -}; - -/** - * Extract the mime type from the given request's - * _Content-Type_ header. - * - * @param {IncomingMessage} req - * @return {String} - * @api private - */ - -exports.mime = function(req) { - var str = req.headers['content-type'] || ''; - return str.split(';')[0]; -}; - -/** - * Generate an `Error` from the given status `code` - * and optional `msg`. - * - * @param {Number} code - * @param {String} msg - * @return {Error} - * @api private - */ - -exports.error = function(code, msg){ - var err = new Error(msg || http.STATUS_CODES[code]); - err.status = code; - return err; -}; - -/** - * Return md5 hash of the given string and optional encoding, - * defaulting to hex. - * - * utils.md5('wahoo'); - * // => "e493298061761236c96b02ea6aa8a2ad" - * - * @param {String} str - * @param {String} encoding - * @return {String} - * @api private - */ - -exports.md5 = function(str, encoding){ - return crypto - .createHash('md5') - .update(str, 'utf8') - .digest(encoding || 'hex'); -}; - -/** - * Merge object b with object a. - * - * var a = { foo: 'bar' } - * , b = { bar: 'baz' }; - * - * utils.merge(a, b); - * // => { foo: 'bar', bar: 'baz' } - * - * @param {Object} a - * @param {Object} b - * @return {Object} - * @api private - */ - -exports.merge = function(a, b){ - if (a && b) { - for (var key in b) { - a[key] = b[key]; - } - } - return a; -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function(html){ - return String(html) - .replace(/&(?!\w+;)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; - -/** - * Sign the given `val` with `secret`. - * - * @param {String} val - * @param {String} secret - * @return {String} - * @api private - */ - -exports.sign = function(val, secret){ - console.warn('do not use utils.sign(), use https://github.com/visionmedia/node-cookie-signature') - return val + '.' + crypto - .createHmac('sha256', secret) - .update(val) - .digest('base64') - .replace(/=+$/, ''); -}; - -/** - * Unsign and decode the given `val` with `secret`, - * returning `false` if the signature is invalid. - * - * @param {String} val - * @param {String} secret - * @return {String|Boolean} - * @api private - */ - -exports.unsign = function(val, secret){ - console.warn('do not use utils.unsign(), use https://github.com/visionmedia/node-cookie-signature') - var str = val.slice(0, val.lastIndexOf('.')); - return exports.sign(str, secret) == val - ? str - : false; -}; - -/** - * Parse signed cookies, returning an object - * containing the decoded key/value pairs, - * while removing the signed key from `obj`. - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -exports.parseSignedCookies = function(obj, secret){ - var ret = {}; - Object.keys(obj).forEach(function(key){ - var val = obj[key]; - if (0 == val.indexOf('s:')) { - val = signature.unsign(val.slice(2), secret); - if (val) { - ret[key] = val; - delete obj[key]; - } - } - }); - return ret; -}; - -/** - * Parse a signed cookie string, return the decoded value - * - * @param {String} str signed cookie string - * @param {String} secret - * @return {String} decoded value - * @api private - */ - -exports.parseSignedCookie = function(str, secret){ - return 0 == str.indexOf('s:') - ? signature.unsign(str.slice(2), secret) - : str; -}; - -/** - * Parse JSON cookies. - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -exports.parseJSONCookies = function(obj){ - Object.keys(obj).forEach(function(key){ - var val = obj[key]; - var res = exports.parseJSONCookie(val); - if (res) obj[key] = res; - }); - return obj; -}; - -/** - * Parse JSON cookie string - * - * @param {String} str - * @return {Object} Parsed object or null if not json cookie - * @api private - */ - -exports.parseJSONCookie = function(str) { - if (0 == str.indexOf('j:')) { - try { - return JSON.parse(str.slice(2)); - } catch (err) { - // no op - } - } -}; - -/** - * Pause `data` and `end` events on the given `obj`. - * Middleware performing async tasks _should_ utilize - * this utility (or similar), to re-emit data once - * the async operation has completed, otherwise these - * events may be lost. Pause is only required for - * node versions less than 10, and is replaced with - * noop's otherwise. - * - * var pause = utils.pause(req); - * fs.readFile(path, function(){ - * next(); - * pause.resume(); - * }); - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -exports.pause = exports.brokenPause - ? require('pause') - : function () { - return { - end: noop, - resume: noop - } - } - -/** - * Strip `Content-*` headers from `res`. - * - * @param {ServerResponse} res - * @api private - */ - -exports.removeContentHeaders = function(res){ - if (!res._headers) return; - Object.keys(res._headers).forEach(function(field){ - if (0 == field.indexOf('content')) { - res.removeHeader(field); - } - }); -}; - -/** - * Check if `req` is a conditional GET request. - * - * @param {IncomingMessage} req - * @return {Boolean} - * @api private - */ - -exports.conditionalGET = function(req) { - return req.headers['if-modified-since'] - || req.headers['if-none-match']; -}; - -/** - * Respond with 401 "Unauthorized". - * - * @param {ServerResponse} res - * @param {String} realm - * @api private - */ - -exports.unauthorized = function(res, realm) { - res.statusCode = 401; - res.setHeader('WWW-Authenticate', 'Basic realm="' + realm + '"'); - res.end('Unauthorized'); -}; - -/** - * Respond with 304 "Not Modified". - * - * @param {ServerResponse} res - * @param {Object} headers - * @api private - */ - -exports.notModified = function(res) { - exports.removeContentHeaders(res); - res.statusCode = 304; - res.end(); -}; - -/** - * Return an ETag in the form of `"-"` - * from the given `stat`. - * - * @param {Object} stat - * @return {String} - * @api private - */ - -exports.etag = function(stat) { - return '"' + stat.size + '-' + Number(stat.mtime) + '"'; -}; - -/** - * Parse the given Cache-Control `str`. - * - * @param {String} str - * @return {Object} - * @api private - */ - -exports.parseCacheControl = function(str){ - var directives = str.split(',') - , obj = {}; - - for(var i = 0, len = directives.length; i < len; i++) { - var parts = directives[i].split('=') - , key = parts.shift().trim() - , val = parseInt(parts.shift(), 10); - - obj[key] = isNaN(val) ? true : val; - } - - return obj; -}; - -/** - * Parse the `req` url with memoization. - * - * @param {ServerRequest} req - * @return {Object} - * @api private - */ - -exports.parseUrl = function(req){ - var parsed = req._parsedUrl; - if (parsed && parsed.href == req.url) { - return parsed; - } else { - parsed = parse(req.url); - - if (parsed.auth && !parsed.protocol && ~parsed.href.indexOf('//')) { - // This parses pathnames, and a strange pathname like //r@e should work - parsed = parse(req.url.replace(/@/g, '%40')); - } - - return req._parsedUrl = parsed; - } -}; - -/** - * Parse byte `size` string. - * - * @param {String} size - * @return {Number} - * @api private - */ - -exports.parseBytes = require('bytes'); - -/** - * Normalizes the path separator from system separator - * to URL separator, aka `/`. - * - * @param {String} path - * @return {String} - * @api private - */ - -exports.normalizeSlashes = function normalizeSlashes(path) { - return path.split(sep).join('/'); -}; - -function noop() {} diff --git a/node_modules/express/node_modules/connect/node_modules/batch/.npmignore b/node_modules/express/node_modules/connect/node_modules/batch/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/node_modules/express/node_modules/connect/node_modules/batch/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/express/node_modules/connect/node_modules/batch/History.md b/node_modules/express/node_modules/connect/node_modules/batch/History.md deleted file mode 100644 index b1b77526..00000000 --- a/node_modules/express/node_modules/connect/node_modules/batch/History.md +++ /dev/null @@ -1,66 +0,0 @@ - -0.5.0 / 2013-07-29 -================== - - * add `.throws(true)` to opt-in to responding with an array of error objects - * make `new` optional - -0.4.0 / 2013-06-05 -================== - - * add catching of immediate callback errors - -0.3.2 / 2013-03-15 -================== - - * remove Emitter call in constructor - -0.3.1 / 2013-03-13 -================== - - * add Emitter() mixin for client. Closes #8 - -0.3.0 / 2013-03-13 -================== - - * add component.json - * add result example - * add .concurrency support - * add concurrency example - * add parallel example - -0.2.1 / 2012-11-08 -================== - - * add .start, .end, and .duration properties - * change dependencies to devDependencies - -0.2.0 / 2012-10-04 -================== - - * add progress events. Closes #5 (__BREAKING CHANGE__) - -0.1.1 / 2012-07-03 -================== - - * change "complete" event to "progress" - -0.1.0 / 2012-07-03 -================== - - * add Emitter inheritance and emit "complete" [burcu] - -0.0.3 / 2012-06-02 -================== - - * Callback results should be in the order of the queued functions. - -0.0.2 / 2012-02-12 -================== - - * any node - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/express/node_modules/connect/node_modules/batch/Makefile b/node_modules/express/node_modules/connect/node_modules/batch/Makefile deleted file mode 100644 index 634e3721..00000000 --- a/node_modules/express/node_modules/connect/node_modules/batch/Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --require should - -.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/batch/Readme.md b/node_modules/express/node_modules/connect/node_modules/batch/Readme.md deleted file mode 100644 index f2345c67..00000000 --- a/node_modules/express/node_modules/connect/node_modules/batch/Readme.md +++ /dev/null @@ -1,74 +0,0 @@ - -# batch - - Simple async batch with concurrency control and progress reporting. - -## Installation - -``` -$ npm install batch -``` - -## API - -```js -var Batch = require('batch') - , batch = new Batch; - -batch.concurrency(4); - -ids.forEach(function(id){ - batch.push(function(done){ - User.get(id, done); - }); -}); - -batch.on('progress', function(e){ - -}); - -batch.end(function(err, users){ - -}); -``` - -### Progress events - - Contain the "job" index, response value, duration information, and completion data. - -```js -{ index: 1, - value: 'bar', - pending: 2, - total: 3, - complete: 2, - percent: 66, - start: Thu Oct 04 2012 12:25:53 GMT-0700 (PDT), - end: Thu Oct 04 2012 12:25:53 GMT-0700 (PDT), - duration: 0 } -``` - -## License - -(The MIT License) - -Copyright (c) 2013 TJ Holowaychuk <tj@vision-media.ca> - -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/express/node_modules/connect/node_modules/batch/component.json b/node_modules/express/node_modules/connect/node_modules/batch/component.json deleted file mode 100644 index 0ea7e582..00000000 --- a/node_modules/express/node_modules/connect/node_modules/batch/component.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "batch", - "repo": "visionmedia/batch", - "description": "Async task batching", - "version": "0.5.0", - "keywords": ["batch", "async", "utility", "concurrency", "concurrent"], - "dependencies": { - "component/emitter": "*" - }, - "development": {}, - "scripts": [ - "index.js" - ] -} diff --git a/node_modules/express/node_modules/connect/node_modules/batch/index.js b/node_modules/express/node_modules/connect/node_modules/batch/index.js deleted file mode 100644 index 932d4045..00000000 --- a/node_modules/express/node_modules/connect/node_modules/batch/index.js +++ /dev/null @@ -1,158 +0,0 @@ -/** - * Module dependencies. - */ - -try { - var EventEmitter = require('events').EventEmitter; -} catch (err) { - var Emitter = require('emitter'); -} - -/** - * Noop. - */ - -function noop(){} - -/** - * Expose `Batch`. - */ - -module.exports = Batch; - -/** - * Create a new Batch. - */ - -function Batch() { - if (!(this instanceof Batch)) return new Batch; - this.fns = []; - this.concurrency(Infinity); - this.throws(true); - for (var i = 0, len = arguments.length; i < len; ++i) { - this.push(arguments[i]); - } -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -if (EventEmitter) { - Batch.prototype.__proto__ = EventEmitter.prototype; -} else { - Emitter(Batch.prototype); -} - -/** - * Set concurrency to `n`. - * - * @param {Number} n - * @return {Batch} - * @api public - */ - -Batch.prototype.concurrency = function(n){ - this.n = n; - return this; -}; - -/** - * Queue a function. - * - * @param {Function} fn - * @return {Batch} - * @api public - */ - -Batch.prototype.push = function(fn){ - this.fns.push(fn); - return this; -}; - -/** - * Set wether Batch will or will not throw up. - * - * @param {Boolean} throws - * @return {Batch} - * @api public - */ -Batch.prototype.throws = function(throws) { - this.e = !!throws; - return this; -}; - -/** - * Execute all queued functions in parallel, - * executing `cb(err, results)`. - * - * @param {Function} cb - * @return {Batch} - * @api public - */ - -Batch.prototype.end = function(cb){ - var self = this - , total = this.fns.length - , pending = total - , results = [] - , errors = [] - , cb = cb || noop - , fns = this.fns - , max = this.n - , throws = this.e - , index = 0 - , done; - - // empty - if (!fns.length) return cb(null, results); - - // process - function next() { - var i = index++; - var fn = fns[i]; - if (!fn) return; - var start = new Date; - - try { - fn(callback); - } catch (err) { - callback(err); - } - - function callback(err, res){ - if (done) return; - if (err && throws) return done = true, cb(err); - var complete = total - pending + 1; - var end = new Date; - - results[i] = res; - errors[i] = err; - - self.emit('progress', { - index: i, - value: res, - error: err, - pending: pending, - total: total, - complete: complete, - percent: complete / total * 100 | 0, - start: start, - end: end, - duration: end - start - }); - - if (--pending) next() - else if(!throws) cb(errors, results); - else cb(null, results); - } - } - - // concurrency - for (var i = 0; i < fns.length; i++) { - if (i == max) break; - next(); - } - - return this; -}; diff --git a/node_modules/express/node_modules/connect/node_modules/batch/package.json b/node_modules/express/node_modules/connect/node_modules/batch/package.json deleted file mode 100644 index 4c2c1758..00000000 --- a/node_modules/express/node_modules/connect/node_modules/batch/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "batch", - "version": "0.5.0", - "description": "Simple async batch", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "main": "index", - "readme": "\n# batch\n\n Simple async batch with concurrency control and progress reporting.\n\n## Installation\n\n```\n$ npm install batch\n```\n\n## API\n\n```js\nvar Batch = require('batch')\n , batch = new Batch;\n\nbatch.concurrency(4);\n\nids.forEach(function(id){\n batch.push(function(done){\n User.get(id, done);\n });\n});\n\nbatch.on('progress', function(e){\n\n});\n\nbatch.end(function(err, users){\n\n});\n```\n\n### Progress events\n\n Contain the \"job\" index, response value, duration information, and completion data.\n\n```js\n{ index: 1,\n value: 'bar',\n pending: 2,\n total: 3,\n complete: 2,\n percent: 66,\n start: Thu Oct 04 2012 12:25:53 GMT-0700 (PDT),\n end: Thu Oct 04 2012 12:25:53 GMT-0700 (PDT),\n duration: 0 }\n```\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2013 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "_id": "batch@0.5.0", - "dist": { - "shasum": "4f41ac9cbe3be6cd5aaa900854ac3ce7b627fa21" - }, - "_from": "batch@0.5.0", - "_resolved": "https://registry.npmjs.org/batch/-/batch-0.5.0.tgz" -} diff --git a/node_modules/express/node_modules/connect/node_modules/bytes/.npmignore b/node_modules/express/node_modules/connect/node_modules/bytes/.npmignore deleted file mode 100644 index 9daeafb9..00000000 --- a/node_modules/express/node_modules/connect/node_modules/bytes/.npmignore +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/node_modules/express/node_modules/connect/node_modules/bytes/History.md b/node_modules/express/node_modules/connect/node_modules/bytes/History.md deleted file mode 100644 index f233ed16..00000000 --- a/node_modules/express/node_modules/connect/node_modules/bytes/History.md +++ /dev/null @@ -1,15 +0,0 @@ - -0.2.1 / 2013-04-01 -================== - - * add .component - -0.2.0 / 2012-10-28 -================== - - * bytes(200).should.eql('200b') - -0.1.0 / 2012-07-04 -================== - - * add bytes to string conversion [yields] diff --git a/node_modules/express/node_modules/connect/node_modules/bytes/Makefile b/node_modules/express/node_modules/connect/node_modules/bytes/Makefile deleted file mode 100644 index 8e8640f2..00000000 --- a/node_modules/express/node_modules/connect/node_modules/bytes/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --reporter spec \ - --require should - -.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/bytes/Readme.md b/node_modules/express/node_modules/connect/node_modules/bytes/Readme.md deleted file mode 100644 index 9325d5bf..00000000 --- a/node_modules/express/node_modules/connect/node_modules/bytes/Readme.md +++ /dev/null @@ -1,51 +0,0 @@ -# node-bytes - - Byte string parser / formatter. - -## Example: - -```js -bytes('1kb') -// => 1024 - -bytes('2mb') -// => 2097152 - -bytes('1gb') -// => 1073741824 - -bytes(1073741824) -// => 1gb -``` - -## Installation - -``` -$ npm install bytes -$ component install visionmedia/bytes.js -``` - -## License - -(The MIT License) - -Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> - -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/express/node_modules/connect/node_modules/bytes/component.json b/node_modules/express/node_modules/connect/node_modules/bytes/component.json deleted file mode 100644 index 2929c25d..00000000 --- a/node_modules/express/node_modules/connect/node_modules/bytes/component.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "bytes", - "description": "byte size string parser / serializer", - "keywords": ["bytes", "utility"], - "version": "0.2.1", - "scripts": ["index.js"] -} diff --git a/node_modules/express/node_modules/connect/node_modules/bytes/index.js b/node_modules/express/node_modules/connect/node_modules/bytes/index.js deleted file mode 100644 index 70b2e01a..00000000 --- a/node_modules/express/node_modules/connect/node_modules/bytes/index.js +++ /dev/null @@ -1,39 +0,0 @@ - -/** - * Parse byte `size` string. - * - * @param {String} size - * @return {Number} - * @api public - */ - -module.exports = function(size) { - if ('number' == typeof size) return convert(size); - var parts = size.match(/^(\d+(?:\.\d+)?) *(kb|mb|gb)$/) - , n = parseFloat(parts[1]) - , type = parts[2]; - - var map = { - kb: 1 << 10 - , mb: 1 << 20 - , gb: 1 << 30 - }; - - return map[type] * n; -}; - -/** - * convert bytes into string. - * - * @param {Number} b - bytes to convert - * @return {String} - * @api public - */ - -function convert (b) { - var gb = 1 << 30, mb = 1 << 20, kb = 1 << 10; - if (b >= gb) return (Math.round(b / gb * 100) / 100) + 'gb'; - if (b >= mb) return (Math.round(b / mb * 100) / 100) + 'mb'; - if (b >= kb) return (Math.round(b / kb * 100) / 100) + 'kb'; - return b + 'b'; -} diff --git a/node_modules/express/node_modules/connect/node_modules/bytes/package.json b/node_modules/express/node_modules/connect/node_modules/bytes/package.json deleted file mode 100644 index 601b1102..00000000 --- a/node_modules/express/node_modules/connect/node_modules/bytes/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "bytes", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "description": "byte size string parser / serializer", - "version": "0.2.1", - "main": "index.js", - "dependencies": {}, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "component": { - "scripts": { - "bytes/index.js": "index.js" - } - }, - "readme": "# node-bytes\n\n Byte string parser / formatter.\n\n## Example:\n\n```js\nbytes('1kb')\n// => 1024\n\nbytes('2mb')\n// => 2097152\n\nbytes('1gb')\n// => 1073741824\n\nbytes(1073741824)\n// => 1gb\n```\n\n## Installation\n\n```\n$ npm install bytes\n$ component install visionmedia/bytes.js\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "_id": "bytes@0.2.1", - "dist": { - "shasum": "586572818c283774f959f5c5762ece7bdf522f03" - }, - "_from": "bytes@0.2.1", - "_resolved": "https://registry.npmjs.org/bytes/-/bytes-0.2.1.tgz" -} diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/.jshintrc b/node_modules/express/node_modules/connect/node_modules/multiparty/.jshintrc deleted file mode 100644 index a93b50cf..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/.jshintrc +++ /dev/null @@ -1,70 +0,0 @@ -{ - // Settings - "passfail" : false, // Stop on first error. - "maxerr" : 100, // Maximum errors before stopping. - - - // Predefined globals whom JSHint will ignore. - "browser" : false, // Standard browser globals e.g. `window`, `document`. - - "node" : true, - "rhino" : false, - "couch" : false, - "wsh" : false, // Windows Scripting Host. - - "jquery" : false, - "prototypejs" : false, - "mootools" : false, - "dojo" : false, - - - "predef" : [ - "describe", "it", "before", "after" - ], - - // Development. - "debug" : true, // Allow debugger statements e.g. browser breakpoints. - "devel" : true, // Allow development statements e.g. `console.log();`. - - - // EcmaScript 5. - "es5" : true, // Allow EcmaScript 5 syntax. - "strict" : false, // Require `use strict` pragma in every file. - "globalstrict" : true, // Allow global "use strict" (also enables 'strict'). - - - // The Good Parts. - "asi" : true, // Tolerate Automatic Semicolon Insertion (no semicolons). - "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. - "laxcomma" : true, - "bitwise" : false, // Prohibit bitwise operators (&, |, ^, etc.). - "boss" : true, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. - "curly" : false, // Require {} for every new block or scope. - "eqeqeq" : true, // Require triple equals i.e. `===`. - "eqnull" : true, // Tolerate use of `== null`. - "evil" : false, // Tolerate use of `eval`. - "expr" : false, // Tolerate `ExpressionStatement` as Programs. - "forin" : false, // Prohibt `for in` loops without `hasOwnProperty`. - "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` - "latedef" : false, // Prohibit variable use before definition. - "loopfunc" : false, // Allow functions to be defined within loops. - "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. - "regexp" : false, // Prohibit `.` and `[^...]` in regular expressions. - "regexdash" : false, // Tolerate unescaped last dash i.e. `[-...]`. - "scripturl" : false, // Tolerate script-targeted URLs. - "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. - "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. - "undef" : true, // Require all non-global variables be declared before they are used. - - - // Persone styling prefrences. - "newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`. - "noempty" : true, // Prohibit use of empty blocks. - "nonew" : true, // Prohibit use of constructors for side-effects. - "nomen" : false, // Prohibit use of initial or trailing underbars in names. - "onevar" : false, // Allow only one `var` statement per function. - "plusplus" : false, // Prohibit use of `++` & `--`. - "sub" : false, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. - "trailing" : true, // Prohibit trailing whitespaces. - "white" : false // Check against strict whitespace and indentation rules. -} diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/.npmignore b/node_modules/express/node_modules/connect/node_modules/multiparty/.npmignore deleted file mode 100644 index 07e6e472..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/.travis.yml b/node_modules/express/node_modules/connect/node_modules/multiparty/.travis.yml deleted file mode 100644 index b1fc4b01..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" -before_script: - - ulimit -n 500 diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/CHANGELOG.md b/node_modules/express/node_modules/connect/node_modules/multiparty/CHANGELOG.md deleted file mode 100644 index ea54d9a1..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/CHANGELOG.md +++ /dev/null @@ -1,191 +0,0 @@ -### 2.2.0 - - * additional callback API to support multiple files with same field name - * fix assertion crash when max field count is exceeded - * fix assertion crash when client aborts an invalid request - * (>=v0.10 only) unpipe the request when an error occurs to save resources. - * update readable-stream to ~1.1.9 - * fix assertion crash when EMFILE occurrs - * (no more assertions - only 'error' events) - -### 2.1.9 - - * relax content-type detection regex. (thanks amitaibu) - -### 2.1.8 - - * replace deprecated Buffer.write(). (thanks hueniverse) - -### 2.1.7 - - * add repository field to package.json - -### 2.1.6 - - * expose `hash` as an option to `Form`. (thanks wookiehangover) - -### 2.1.5 - - * fix possible 'close' event before all temp files are done - -### 2.1.4 - - * fix crash for invalid requests - -### 2.1.3 - - * add `file.size` - -### 2.1.2 - - * proper backpressure support - * update s3 example - -### 2.1.1 - - * fix uploads larger than 2KB - * fix both s3 and upload example - * add part.byteCount and part.byteOffset - -### 2.1.0 (recalled) - - * Complete rewrite. See README for changes and new API. - -### v1.0.13 - -* Only update hash if update method exists (Sven Lito) -* According to travis v0.10 needs to go quoted (Sven Lito) -* Bumping build node versions (Sven Lito) -* Additional fix for empty requests (Eugene Girshov) -* Change the default to 1000, to match the new Node behaviour. (OrangeDog) -* Add ability to control maxKeys in the querystring parser. (OrangeDog) -* Adjust test case to work with node 0.9.x (Eugene Girshov) -* Update package.json (Sven Lito) -* Path adjustment according to eb4468b (Markus Ast) - -### v1.0.12 - -* Emit error on aborted connections (Eugene Girshov) -* Add support for empty requests (Eugene Girshov) -* Fix name/filename handling in Content-Disposition (jesperp) -* Tolerate malformed closing boundary in multipart (Eugene Girshov) -* Ignore preamble in multipart messages (Eugene Girshov) -* Add support for application/json (Mike Frey, Carlos Rodriguez) -* Add support for Base64 encoding (Elmer Bulthuis) -* Add File#toJSON (TJ Holowaychuk) -* Remove support for Node.js 0.4 & 0.6 (Andrew Kelley) -* Documentation improvements (Sven Lito, Andre Azevedo) -* Add support for application/octet-stream (Ion Lupascu, Chris Scribner) -* Use os.tmpDir() to get tmp directory (Andrew Kelley) -* Improve package.json (Andrew Kelley, Sven Lito) -* Fix benchmark script (Andrew Kelley) -* Fix scope issue in incoming_forms (Sven Lito) -* Fix file handle leak on error (OrangeDog) - -### v1.0.11 - -* Calculate checksums for incoming files (sreuter) -* Add definition parameters to "IncomingForm" as an argument (Math-) - -### v1.0.10 - -* Make parts to be proper Streams (Matt Robenolt) - -### v1.0.9 - -* Emit progress when content length header parsed (Tim Koschützki) -* Fix Readme syntax due to GitHub changes (goob) -* Replace references to old 'sys' module in Readme with 'util' (Peter Sugihara) - -### v1.0.8 - -* Strip potentially unsafe characters when using `keepExtensions: true`. -* Switch to utest / urun for testing -* Add travis build - -### v1.0.7 - -* Remove file from package that was causing problems when installing on windows. (#102) -* Fix typos in Readme (Jason Davies). - -### v1.0.6 - -* Do not default to the default to the field name for file uploads where - filename="". - -### v1.0.5 - -* Support filename="" in multipart parts -* Explain unexpected end() errors in parser better - -**Note:** Starting with this version, formidable emits 'file' events for empty -file input fields. Previously those were incorrectly emitted as regular file -input fields with value = "". - -### v1.0.4 - -* Detect a good default tmp directory regardless of platform. (#88) - -### v1.0.3 - -* Fix problems with utf8 characters (#84) / semicolons in filenames (#58) -* Small performance improvements -* New test suite and fixture system - -### v1.0.2 - -* Exclude node\_modules folder from git -* Implement new `'aborted'` event -* Fix files in example folder to work with recent node versions -* Make gently a devDependency - -[See Commits](https://github.com/felixge/node-formidable/compare/v1.0.1...v1.0.2) - -### v1.0.1 - -* Fix package.json to refer to proper main directory. (#68, Dean Landolt) - -[See Commits](https://github.com/felixge/node-formidable/compare/v1.0.0...v1.0.1) - -### v1.0.0 - -* Add support for multipart boundaries that are quoted strings. (Jeff Craig) - -This marks the beginning of development on version 2.0 which will include -several architectural improvements. - -[See Commits](https://github.com/felixge/node-formidable/compare/v0.9.11...v1.0.0) - -### v0.9.11 - -* Emit `'progress'` event when receiving data, regardless of parsing it. (Tim Koschützki) -* Use [W3C FileAPI Draft](http://dev.w3.org/2006/webapi/FileAPI/) properties for File class - -**Important:** The old property names of the File class will be removed in a -future release. - -[See Commits](https://github.com/felixge/node-formidable/compare/v0.9.10...v0.9.11) - -### Older releases - -These releases were done before starting to maintain the above Changelog: - -* [v0.9.10](https://github.com/felixge/node-formidable/compare/v0.9.9...v0.9.10) -* [v0.9.9](https://github.com/felixge/node-formidable/compare/v0.9.8...v0.9.9) -* [v0.9.8](https://github.com/felixge/node-formidable/compare/v0.9.7...v0.9.8) -* [v0.9.7](https://github.com/felixge/node-formidable/compare/v0.9.6...v0.9.7) -* [v0.9.6](https://github.com/felixge/node-formidable/compare/v0.9.5...v0.9.6) -* [v0.9.5](https://github.com/felixge/node-formidable/compare/v0.9.4...v0.9.5) -* [v0.9.4](https://github.com/felixge/node-formidable/compare/v0.9.3...v0.9.4) -* [v0.9.3](https://github.com/felixge/node-formidable/compare/v0.9.2...v0.9.3) -* [v0.9.2](https://github.com/felixge/node-formidable/compare/v0.9.1...v0.9.2) -* [v0.9.1](https://github.com/felixge/node-formidable/compare/v0.9.0...v0.9.1) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.1.0](https://github.com/felixge/node-formidable/commits/v0.1.0) diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/LICENSE b/node_modules/express/node_modules/connect/node_modules/multiparty/LICENSE deleted file mode 100644 index 8488a405..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (C) 2011-2013 Felix Geisendörfer, Andrew Kelley - -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/express/node_modules/connect/node_modules/multiparty/README.md b/node_modules/express/node_modules/connect/node_modules/multiparty/README.md deleted file mode 100644 index f149ac04..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/README.md +++ /dev/null @@ -1,177 +0,0 @@ -[![Build Status](https://travis-ci.org/superjoe30/node-multiparty.png?branch=master)](https://travis-ci.org/superjoe30/node-multiparty) -# multiparty - -Parse http requests with content-type `multipart/form-data`, also known as file uploads. - -See also [busboy](https://github.com/mscdex/busboy) - a -[faster](https://github.com/mscdex/dicer/wiki/Benchmarks) alternative -which may be worth looking into. - -### Why the fork? - - * This module uses the Node.js v0.10 streams properly, *even in Node.js v0.8* - * It will not create a temp file for you unless you want it to. - * Counts bytes and does math to help you figure out the `Content-Length` of - each part. - * You can easily stream uploads to s3 with - [knox](https://github.com/LearnBoost/knox), for [example](examples/s3.js). - * Less bugs. This code is simpler, has all deprecated functionality removed, - has cleaner tests, and does not try to do anything beyond multipart stream - parsing. - -## Installation - -``` -npm install multiparty -``` - -## Usage - - * See [examples](examples). - -Parse an incoming `multipart/form-data` request. - -```js -var multiparty = require('multiparty') - , http = require('http') - , util = require('util') - -http.createServer(function(req, res) { - if (req.url === '/upload' && req.method === 'POST') { - // parse a file upload - var form = new multiparty.Form(); - - form.parse(req, function(err, fields, files) { - res.writeHead(200, {'content-type': 'text/plain'}); - res.write('received upload:\n\n'); - res.end(util.inspect({fields: fields, files: files})); - }); - - return; - } - - // show a file upload form - res.writeHead(200, {'content-type': 'text/html'}); - res.end( - '
    '+ - '
    '+ - '
    '+ - ''+ - '
    ' - ); -}).listen(8080); -``` - -## API - -### multiparty.Form -```js -var form = new multiparty.Form(options) -``` -Creates a new form. Options: - - * `encoding` - sets encoding for the incoming form fields. Defaults to `utf8`. - * `maxFieldSize` - Limits the amount of memory a field (not a file) can - allocate in bytes. If this value is exceeded, an `error` event is emitted. - The default size is 2MB. - * `maxFields` - Limits the number of fields that will be parsed before - emitting an `error` event. A file counts as a field in this case. - Defaults to 1000. - * `autoFields` - Enables `field` events. This is automatically set to `true` - if you add a `field` listener. - * `autoFiles` - Enables `file` events. This is automatically set to `true` - if you add a `file` listener. - * `uploadDir` - Only relevant when `autoFiles` is `true`. The directory for - placing file uploads in. You can move them later using `fs.rename()`. - Defaults to `os.tmpDir()`. - * `hash` - Only relevant when `autoFiles` is `true`. If you want checksums - calculated for incoming files, set this to either `sha1` or `md5`. - Defaults to off. - -#### form.parse(request, [cb]) - -Parses an incoming node.js `request` containing form data. If `cb` is -provided, `autoFields` and `autoFiles` are set to `true` and all fields and -files are collected and passed to the callback: - -```js -form.parse(req, function(err, fieldsObject, filesObject, fieldsList, filesList) { - // ... -}); -``` - -It is often convenient to access a field or file by name. In this situation, -use `fieldsObject` or `filesObject`. However sometimes, as in the case of a -`` the multipart stream will contain -multiple files of the same input name, and you are interested in all of them. -In this case, use `filesList`. - -Another example is when you do not care what the field name of a file is; you -are merely interested in a single upload. In this case, set `maxFields` to 1 -(assuming no other fields expected besides the file) and use `filesList[0]`. - -#### form.bytesReceived - -The amount of bytes received for this form so far. - -#### form.bytesExpected - -The expected number of bytes in this form. - -### Events - -#### 'error' (err) - -You definitely want to handle this event. If not your server *will* crash when -users submit bogus multipart requests! - -#### 'part' (part) - -Emitted when a part is encountered in the request. `part` is a -`ReadableStream`. It also has the following properties: - - * `headers` - the headers for this part. For example, you may be interested - in `content-type`. - * `name` - the field name for this part - * `filename` - only if the part is an incoming file - * `byteOffset` - the byte offset of this part in the request body - * `byteCount` - assuming that this is the last part in the request, - this is the size of this part in bytes. You could use this, for - example, to set the `Content-Length` header if uploading to S3. - If the part had a `Content-Length` header then that value is used - here instead. - -#### 'aborted' - -Emitted when the request is aborted. This event will be followed shortly -by an `error` event. In practice you do not need to handle this event. - -#### 'progress' (bytesReceived, bytesExpected) - -#### 'close' - -Emitted after all parts have been parsed and emitted. Not emitted if an `error` -event is emitted. This is typically when you would send your response. - -#### 'file' (name, file) - -**By default multiparty will not touch your hard drive.** But if you add this -listener, multiparty automatically sets `form.autoFiles` to `true` and will -stream uploads to disk for you. - - * `name` - the field name for this file - * `file` - an object with these properties: - - `fieldName` - same as `name` - the field name for this file - - `originalFilename` - the filename that the user reports for the file - - `path` - the absolute path of the uploaded file on disk - - `headers` - the HTTP headers that were sent along with this file - - `size` - size of the file in bytes - -If you set the `form.hash` option, then `file` will also contain a `hash` -property which is the checksum of the file. - -#### 'field' (name, value) - - * `name` - field name - * `value` - string field value - diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/examples/azureblobstorage.js b/node_modules/express/node_modules/connect/node_modules/multiparty/examples/azureblobstorage.js deleted file mode 100644 index 273c3321..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/examples/azureblobstorage.js +++ /dev/null @@ -1,41 +0,0 @@ -var http = require('http') - , util = require('util') - , multiparty = require('../') - , azure = require('azure') - , PORT = process.env.PORT || 27372 - -var server = http.createServer(function(req, res) { - if (req.url === '/') { - res.writeHead(200, {'content-type': 'text/html'}); - res.end( - '
    '+ - '
    '+ - '
    '+ - ''+ - '
    ' - ); - } else if (req.url === '/upload') { - - var blobService = azure.createBlobService(); - var form = new multiparty.Form(); - form.on('part', function(part) { - if (!part.filename) return; - - var size = part.byteCount - part.byteOffset; - var name = part.filename; - var container = 'blobContainerName'; - - blobService.createBlockBlobFromStream(container, name, part, size, function(error) { - if (error) { - // error handling - } - }); - }); - form.parse(req); - - res.send('File uploaded successfully'); - } -}); -server.listen(PORT, function() { - console.info('listening on http://0.0.0.0:'+PORT+'/'); -}); diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/examples/s3.js b/node_modules/express/node_modules/connect/node_modules/multiparty/examples/s3.js deleted file mode 100644 index 60617ba2..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/examples/s3.js +++ /dev/null @@ -1,74 +0,0 @@ -var http = require('http') - , util = require('util') - , multiparty = require('../') - , knox = require('knox') - , Batch = require('batch') - , PORT = process.env.PORT || 27372 - -var s3Client = knox.createClient({ - secure: false, - key: process.env.S3_KEY, - secret: process.env.S3_SECRET, - bucket: process.env.S3_BUCKET, -}); - -var server = http.createServer(function(req, res) { - if (req.url === '/') { - res.writeHead(200, {'content-type': 'text/html'}); - res.end( - '
    '+ - '
    '+ - '
    '+ - ''+ - '
    ' - ); - } else if (req.url === '/upload') { - var headers = { - 'x-amz-acl': 'public-read', - }; - var form = new multiparty.Form(); - var batch = new Batch(); - batch.push(function(cb) { - form.on('field', function(name, value) { - if (name === 'path') { - var destPath = value; - if (destPath[0] !== '/') destPath = '/' + destPath; - cb(null, destPath); - } - }); - }); - batch.push(function(cb) { - form.on('part', function(part) { - if (! part.filename) return; - cb(null, part); - }); - }); - batch.end(function(err, results) { - if (err) throw err; - form.removeListener('close', onEnd); - var destPath = results[0] - , part = results[1]; - - headers['Content-Length'] = part.byteCount; - s3Client.putStream(part, destPath, headers, function(err, s3Response) { - if (err) throw err; - res.statusCode = s3Response.statusCode; - s3Response.pipe(res); - console.log("https://s3.amazonaws.com/" + process.env.S3_BUCKET + destPath); - }); - }); - form.on('close', onEnd); - form.parse(req); - - } else { - res.writeHead(404, {'content-type': 'text/plain'}); - res.end('404'); - } - - function onEnd() { - throw new Error("no uploaded file"); - } -}); -server.listen(PORT, function() { - console.info('listening on http://0.0.0.0:'+PORT+'/'); -}); diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/examples/upload.js b/node_modules/express/node_modules/connect/node_modules/multiparty/examples/upload.js deleted file mode 100644 index 5dd39268..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/examples/upload.js +++ /dev/null @@ -1,37 +0,0 @@ -var http = require('http') - , util = require('util') - , multiparty = require('../') - , PORT = process.env.PORT || 27372 - -var server = http.createServer(function(req, res) { - if (req.url === '/') { - res.writeHead(200, {'content-type': 'text/html'}); - res.end( - '
    '+ - '
    '+ - '
    '+ - ''+ - '
    ' - ); - } else if (req.url === '/upload') { - var form = new multiparty.Form(); - - form.parse(req, function(err, fields, files) { - if (err) { - res.writeHead(400, {'content-type': 'text/plain'}); - res.end("invalid request: " + err.message); - return; - } - res.writeHead(200, {'content-type': 'text/plain'}); - res.write('received fields:\n\n '+util.inspect(fields)); - res.write('\n\n'); - res.end('received files:\n\n '+util.inspect(files)); - }); - } else { - res.writeHead(404, {'content-type': 'text/plain'}); - res.end('404'); - } -}); -server.listen(PORT, function() { - console.info('listening on http://0.0.0.0:'+PORT+'/'); -}); diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/index.js b/node_modules/express/node_modules/connect/node_modules/multiparty/index.js deleted file mode 100755 index 71c88ae3..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/index.js +++ /dev/null @@ -1,618 +0,0 @@ -exports.Form = Form; - -var stream = require('readable-stream') - , util = require('util') - , fs = require('fs') - , crypto = require('crypto') - , path = require('path') - , os = require('os') - , StringDecoder = require('string_decoder').StringDecoder - , StreamCounter = require('stream-counter') - -var START = 0 - , START_BOUNDARY = 1 - , HEADER_FIELD_START = 2 - , HEADER_FIELD = 3 - , HEADER_VALUE_START = 4 - , HEADER_VALUE = 5 - , HEADER_VALUE_ALMOST_DONE = 6 - , HEADERS_ALMOST_DONE = 7 - , PART_DATA_START = 8 - , PART_DATA = 9 - , PART_END = 10 - , END = 11 - - , LF = 10 - , CR = 13 - , SPACE = 32 - , HYPHEN = 45 - , COLON = 58 - , A = 97 - , Z = 122 - -var CONTENT_TYPE_RE = /^multipart\/(form-data|related);\s*boundary=(?:"([^"]+)"|([^;]+))$/i; -var FILE_EXT_RE = /(\.[_\-a-zA-Z0-9]{0,16}).*/; -var LAST_BOUNDARY_SUFFIX_LEN = 4; // --\r\n - -util.inherits(Form, stream.Writable); -function Form(options) { - var self = this; - stream.Writable.call(self); - - options = options || {}; - - self.error = null; - self.finished = false; - - self.autoFields = !!options.autoFields; - self.autoFiles = !!options.autoFields; - - self.maxFields = options.maxFields || 1000; - self.maxFieldsSize = options.maxFieldsSize || 2 * 1024 * 1024; - self.uploadDir = options.uploadDir || os.tmpDir(); - self.encoding = options.encoding || 'utf8'; - self.hash = options.hash || false; - - self.bytesReceived = 0; - self.bytesExpected = null; - - self.openedFiles = []; - self.totalFieldSize = 0; - self.totalFieldCount = 0; - self.flushing = 0; - - self.backpressure = false; - self.writeCbs = []; - - if (options.boundary) setUpParser(self, options.boundary); - - self.on('newListener', function(eventName) { - if (eventName === 'file') { - self.autoFiles = true; - } else if (eventName === 'field') { - self.autoFields = true; - } - }); -} - -Form.prototype.parse = function(req, cb) { - var self = this; - - // if the user supplies a callback, this implies autoFields and autoFiles - if (cb) { - self.autoFields = true; - self.autoFiles = true; - } - - self.handleError = handleError; - self.bytesExpected = getBytesExpected(req.headers); - - req.on('error', handleError); - req.on('aborted', onReqAborted); - - var contentType = req.headers['content-type']; - if (!contentType) { - handleError(new Error('missing content-type header')); - return; - } - - var m = contentType.match(CONTENT_TYPE_RE); - if (!m) { - handleError(new Error('unrecognized content-type: ' + contentType)); - return; - } - var boundary = m[2] || m[3]; - setUpParser(self, boundary); - req.pipe(self); - - if (cb) { - var fieldsTable = {}; - var filesTable = {}; - var fieldsList = []; - var filesList = []; - self.on('error', function(err) { - cb(err); - }); - self.on('field', function(name, value) { - fieldsTable[name] = value; - fieldsList.push({name: name, value: value}); - }); - self.on('file', function(name, file) { - filesTable[name] = file; - filesList.push(file); - }); - self.on('close', function() { - cb(null, fieldsTable, filesTable, fieldsList, filesList); - }); - } - - function onReqAborted() { - self.emit('aborted'); - handleError(new Error("Request aborted")); - } - - function handleError(err) { - var first = !self.error; - if (first) { - self.error = err; - req.removeListener('aborted', onReqAborted); - - // welp. 0.8 doesn't support unpipe, too bad so sad. - // let's drop support for 0.8 soon. - if (req.unpipe) { - req.unpipe(self); - } - } - - self.openedFiles.forEach(function(file) { - file.ws.destroy(); - fs.unlink(file.path, function(err) { - // this is already an error condition, ignore 2nd error - }); - }); - self.openedFiles = []; - - if (first) { - self.emit('error', err); - } - } - -}; - -Form.prototype._write = function(buffer, encoding, cb) { - var self = this - , i = 0 - , len = buffer.length - , prevIndex = self.index - , index = self.index - , state = self.state - , lookbehind = self.lookbehind - , boundary = self.boundary - , boundaryChars = self.boundaryChars - , boundaryLength = self.boundary.length - , boundaryEnd = boundaryLength - 1 - , bufferLength = buffer.length - , c - , cl - - for (i = 0; i < len; i++) { - c = buffer[i]; - switch (state) { - case START: - index = 0; - state = START_BOUNDARY; - /* falls through */ - case START_BOUNDARY: - if (index === boundaryLength - 2) { - if (c !== CR) return self.handleError(new Error("Expected CR Received " + c)); - index++; - break; - } else if (index === boundaryLength - 1) { - if (c !== LF) return self.handleError(new Error("Expected LF Received " + c)); - index = 0; - self.onParsePartBegin(); - state = HEADER_FIELD_START; - break; - } - - if (c !== boundary[index+2]) index = -2; - if (c === boundary[index+2]) index++; - break; - case HEADER_FIELD_START: - state = HEADER_FIELD; - self.headerFieldMark = i; - index = 0; - /* falls through */ - case HEADER_FIELD: - if (c === CR) { - self.headerFieldMark = null; - state = HEADERS_ALMOST_DONE; - break; - } - - index++; - if (c === HYPHEN) break; - - if (c === COLON) { - if (index === 1) { - // empty header field - self.handleError(new Error("Empty header field")); - return; - } - self.onParseHeaderField(buffer.slice(self.headerFieldMark, i)); - self.headerFieldMark = null; - state = HEADER_VALUE_START; - break; - } - - cl = lower(c); - if (cl < A || cl > Z) { - self.handleError(new Error("Expected alphabetic character, received " + c)); - return; - } - break; - case HEADER_VALUE_START: - if (c === SPACE) break; - - self.headerValueMark = i; - state = HEADER_VALUE; - /* falls through */ - case HEADER_VALUE: - if (c === CR) { - self.onParseHeaderValue(buffer.slice(self.headerValueMark, i)); - self.headerValueMark = null; - self.onParseHeaderEnd(); - state = HEADER_VALUE_ALMOST_DONE; - } - break; - case HEADER_VALUE_ALMOST_DONE: - if (c !== LF) return self.handleError(new Error("Expected LF Received " + c)); - state = HEADER_FIELD_START; - break; - case HEADERS_ALMOST_DONE: - if (c !== LF) return self.handleError(new Error("Expected LF Received " + c)); - var err = self.onParseHeadersEnd(i + 1); - if (err) return self.handleError(err); - state = PART_DATA_START; - break; - case PART_DATA_START: - state = PART_DATA; - self.partDataMark = i; - /* falls through */ - case PART_DATA: - prevIndex = index; - - if (index === 0) { - // boyer-moore derrived algorithm to safely skip non-boundary data - i += boundaryEnd; - while (i < bufferLength && !(buffer[i] in boundaryChars)) { - i += boundaryLength; - } - i -= boundaryEnd; - c = buffer[i]; - } - - if (index < boundaryLength) { - if (boundary[index] === c) { - if (index === 0) { - self.onParsePartData(buffer.slice(self.partDataMark, i)); - self.partDataMark = null; - } - index++; - } else { - index = 0; - } - } else if (index === boundaryLength) { - index++; - if (c === CR) { - // CR = part boundary - self.partBoundaryFlag = true; - } else if (c === HYPHEN) { - // HYPHEN = end boundary - self.lastBoundaryFlag = true; - } else { - index = 0; - } - } else if (index - 1 === boundaryLength) { - if (self.partBoundaryFlag) { - index = 0; - if (c === LF) { - self.partBoundaryFlag = false; - self.onParsePartEnd(); - self.onParsePartBegin(); - state = HEADER_FIELD_START; - break; - } - } else if (self.lastBoundaryFlag) { - if (c === HYPHEN) { - self.onParsePartEnd(); - self.end(); - state = END; - } else { - index = 0; - } - } else { - index = 0; - } - } - - if (index > 0) { - // when matching a possible boundary, keep a lookbehind reference - // in case it turns out to be a false lead - lookbehind[index-1] = c; - } else if (prevIndex > 0) { - // if our boundary turned out to be rubbish, the captured lookbehind - // belongs to partData - self.onParsePartData(lookbehind.slice(0, prevIndex)); - prevIndex = 0; - self.partDataMark = i; - - // reconsider the current character even so it interrupted the sequence - // it could be the beginning of a new sequence - i--; - } - - break; - case END: - break; - default: - self.handleError(new Error("Parser has invalid state.")); - return; - } - } - - if (self.headerFieldMark != null) { - self.onParseHeaderField(buffer.slice(self.headerFieldMark)); - self.headerFieldMark = 0; - } - if (self.headerValueMark != null) { - self.onParseHeaderValue(buffer.slice(self.headerValueMark)); - self.headerValueMark = 0; - } - if (self.partDataMark != null) { - self.onParsePartData(buffer.slice(self.partDataMark)); - self.partDataMark = 0; - } - - self.index = index; - self.state = state; - - self.bytesReceived += buffer.length; - self.emit('progress', self.bytesReceived, self.bytesExpected); - - if (self.backpressure) { - self.writeCbs.push(cb); - } else { - cb(); - } -}; - -Form.prototype.onParsePartBegin = function() { - clearPartVars(this); -} - -Form.prototype.onParseHeaderField = function(b) { - this.headerField += this.headerFieldDecoder.write(b); -} - -Form.prototype.onParseHeaderValue = function(b) { - this.headerValue += this.headerValueDecoder.write(b); -} - -Form.prototype.onParseHeaderEnd = function() { - this.headerField = this.headerField.toLowerCase(); - this.partHeaders[this.headerField] = this.headerValue; - - var m; - if (this.headerField === 'content-disposition') { - if (m = this.headerValue.match(/\bname="([^"]+)"/i)) { - this.partName = m[1]; - } - this.partFilename = parseFilename(this.headerValue); - } else if (this.headerField === 'content-transfer-encoding') { - this.partTransferEncoding = this.headerValue.toLowerCase(); - } - - this.headerFieldDecoder = new StringDecoder(this.encoding); - this.headerField = ''; - this.headerValueDecoder = new StringDecoder(this.encoding); - this.headerValue = ''; -} - -Form.prototype.onParsePartData = function(b) { - if (this.partTransferEncoding === 'base64') { - this.backpressure = ! this.destStream.write(b.toString('ascii'), 'base64'); - } else { - this.backpressure = ! this.destStream.write(b); - } -} - -Form.prototype.onParsePartEnd = function() { - if (this.destStream) { - flushWriteCbs(this); - var s = this.destStream; - process.nextTick(function() { - s.end(); - }); - } - clearPartVars(this); -} - -Form.prototype.onParseHeadersEnd = function(offset) { - var self = this; - switch(self.partTransferEncoding){ - case 'binary': - case '7bit': - case '8bit': - self.partTransferEncoding = 'binary'; - break; - - case 'base64': break; - default: - return new Error("unknown transfer-encoding: " + self.partTransferEncoding); - } - - self.totalFieldCount += 1; - if (self.totalFieldCount >= self.maxFields) { - return new Error("maxFields " + self.maxFields + " exceeded."); - } - - self.destStream = new stream.PassThrough(); - self.destStream.on('drain', function() { - flushWriteCbs(self); - }); - self.destStream.headers = self.partHeaders; - self.destStream.name = self.partName; - self.destStream.filename = self.partFilename; - self.destStream.byteOffset = self.bytesReceived + offset; - var partContentLength = self.destStream.headers['content-length']; - self.destStream.byteCount = partContentLength ? - parseInt(partContentLength, 10) : - (self.bytesExpected - self.destStream.byteOffset - - self.boundary.length - LAST_BOUNDARY_SUFFIX_LEN); - - self.emit('part', self.destStream); - if (self.destStream.filename == null && self.autoFields) { - handleField(self, self.destStream); - } else if (self.destStream.filename != null && self.autoFiles) { - handleFile(self, self.destStream); - } -} - -function flushWriteCbs(self) { - self.writeCbs.forEach(function(cb) { - process.nextTick(cb); - }); - self.writeCbs = []; - self.backpressure = false; -} - -function getBytesExpected(headers) { - var contentLength = headers['content-length']; - if (contentLength) { - return parseInt(contentLength, 10); - } else if (headers['transfer-encoding'] == null) { - return 0; - } else { - return null; - } -} - -function beginFlush(self) { - self.flushing += 1; -} - -function endFlush(self) { - self.flushing -= 1; - maybeClose(self); -} - -function maybeClose(self) { - if (!self.flushing && self.finished && !self.error) { - self.emit('close'); - } -} - -function handleFile(self, fileStream) { - beginFlush(self); - var file = { - fieldName: fileStream.name, - originalFilename: fileStream.filename, - path: uploadPath(self.uploadDir, fileStream.filename), - headers: fileStream.headers, - }; - file.ws = fs.createWriteStream(file.path); - self.openedFiles.push(file); - fileStream.pipe(file.ws); - var counter = new StreamCounter(); - fileStream.pipe(counter); - var hashWorkaroundStream - , hash = null; - if (self.hash) { - // workaround stream because https://github.com/joyent/node/issues/5216 - hashWorkaroundStream = stream.Writable(); - hash = crypto.createHash(self.hash); - hashWorkaroundStream._write = function(buffer, encoding, callback) { - hash.update(buffer); - callback(); - }; - fileStream.pipe(hashWorkaroundStream); - } - file.ws.on('error', function(err) { - if (!self.error) self.handleError(err); - }); - file.ws.on('close', function() { - if (hash) file.hash = hash.digest('hex'); - file.size = counter.bytes; - self.emit('file', fileStream.name, file); - endFlush(self); - }); -} - -function handleField(self, fieldStream) { - var value = ''; - var decoder = new StringDecoder(self.encoding); - - beginFlush(self); - fieldStream.on('readable', function() { - var buffer = fieldStream.read(); - if (!buffer) return; - - self.totalFieldSize += buffer.length; - if (self.totalFieldSize > self.maxFieldsSize) { - self.handleError(new Error("maxFieldsSize " + self.maxFieldsSize + " exceeded")); - return; - } - value += decoder.write(buffer); - }); - - fieldStream.on('end', function() { - self.emit('field', fieldStream.name, value); - endFlush(self); - }); -} - -function clearPartVars(self) { - self.partHeaders = {}; - self.partName = null; - self.partFilename = null; - self.partTransferEncoding = 'binary'; - self.destStream = null; - - self.headerFieldDecoder = new StringDecoder(self.encoding); - self.headerField = ""; - self.headerValueDecoder = new StringDecoder(self.encoding); - self.headerValue = ""; -} - -function setUpParser(self, boundary) { - self.boundary = new Buffer(boundary.length + 4); - self.boundary.write('\r\n--', 0, boundary.length + 4, 'ascii'); - self.boundary.write(boundary, 4, boundary.length, 'ascii'); - self.lookbehind = new Buffer(self.boundary.length + 8); - self.state = START; - self.boundaryChars = {}; - for (var i = 0; i < self.boundary.length; i++) { - self.boundaryChars[self.boundary[i]] = true; - } - - self.index = null; - self.partBoundaryFlag = false; - self.lastBoundaryFlag = false; - - self.on('finish', function() { - if ((self.state === HEADER_FIELD_START && self.index === 0) || - (self.state === PART_DATA && self.index === self.boundary.length)) - { - self.onParsePartEnd(); - } else if (self.state !== END) { - self.handleError(new Error('stream ended unexpectedly')); - } - self.finished = true; - maybeClose(self); - }); -} - -function uploadPath(baseDir, filename) { - var ext = path.extname(filename).replace(FILE_EXT_RE, '$1'); - var name = process.pid + '-' + - (Math.random() * 0x100000000 + 1).toString(36) + ext; - return path.join(baseDir, name); -} - -function parseFilename(headerValue) { - var m = headerValue.match(/\bfilename="(.*?)"($|; )/i); - if (!m) return; - - var filename = m[1].substr(m[1].lastIndexOf('\\') + 1); - filename = filename.replace(/%22/g, '"'); - filename = filename.replace(/&#([\d]{4});/g, function(m, code) { - return String.fromCharCode(code); - }); - return filename; -} - -function lower(c) { - return c | 0x20; -} - diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/.npmignore b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/.npmignore deleted file mode 100644 index 38344f87..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -build/ -test/ -examples/ -fs.js -zlib.js \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/LICENSE b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/LICENSE deleted file mode 100644 index e3d4e695..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. and other Node contributors. 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/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/README.md b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/README.md deleted file mode 100644 index be976683..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/README.md +++ /dev/null @@ -1,768 +0,0 @@ -# readable-stream - -A new class of streams for Node.js - -This module provides the new Stream base classes introduced in Node -v0.10, for use in Node v0.8. You can use it to have programs that -have to work with node v0.8, while being forward-compatible for v0.10 -and beyond. When you drop support for v0.8, you can remove this -module, and only use the native streams. - -This is almost exactly the same codebase as appears in Node v0.10. -However: - -1. The exported object is actually the Readable class. Decorating the - native `stream` module would be global pollution. -2. In v0.10, you can safely use `base64` as an argument to - `setEncoding` in Readable streams. However, in v0.8, the - StringDecoder class has no `end()` method, which is problematic for - Base64. So, don't use that, because it'll break and be weird. - -Other than that, the API is the same as `require('stream')` in v0.10, -so the API docs are reproduced below. - ----------- - - Stability: 2 - Unstable - -A stream is an abstract interface implemented by various objects in -Node. For example a request to an HTTP server is a stream, as is -stdout. Streams are readable, writable, or both. All streams are -instances of [EventEmitter][] - -You can load the Stream base classes by doing `require('stream')`. -There are base classes provided for Readable streams, Writable -streams, Duplex streams, and Transform streams. - -## Compatibility - -In earlier versions of Node, the Readable stream interface was -simpler, but also less powerful and less useful. - -* Rather than waiting for you to call the `read()` method, `'data'` - events would start emitting immediately. If you needed to do some - I/O to decide how to handle data, then you had to store the chunks - in some kind of buffer so that they would not be lost. -* The `pause()` method was advisory, rather than guaranteed. This - meant that you still had to be prepared to receive `'data'` events - even when the stream was in a paused state. - -In Node v0.10, the Readable class described below was added. For -backwards compatibility with older Node programs, Readable streams -switch into "old mode" when a `'data'` event handler is added, or when -the `pause()` or `resume()` methods are called. The effect is that, -even if you are not using the new `read()` method and `'readable'` -event, you no longer have to worry about losing `'data'` chunks. - -Most programs will continue to function normally. However, this -introduces an edge case in the following conditions: - -* No `'data'` event handler is added. -* The `pause()` and `resume()` methods are never called. - -For example, consider the following code: - -```javascript -// WARNING! BROKEN! -net.createServer(function(socket) { - - // we add an 'end' method, but never consume the data - socket.on('end', function() { - // It will never get here. - socket.end('I got your message (but didnt read it)\n'); - }); - -}).listen(1337); -``` - -In versions of node prior to v0.10, the incoming message data would be -simply discarded. However, in Node v0.10 and beyond, the socket will -remain paused forever. - -The workaround in this situation is to call the `resume()` method to -trigger "old mode" behavior: - -```javascript -// Workaround -net.createServer(function(socket) { - - socket.on('end', function() { - socket.end('I got your message (but didnt read it)\n'); - }); - - // start the flow of data, discarding it. - socket.resume(); - -}).listen(1337); -``` - -In addition to new Readable streams switching into old-mode, pre-v0.10 -style streams can be wrapped in a Readable class using the `wrap()` -method. - -## Class: stream.Readable - - - -A `Readable Stream` has the following methods, members, and events. - -Note that `stream.Readable` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -method. (See below.) - -### new stream.Readable([options]) - -* `options` {Object} - * `highWaterMark` {Number} The maximum number of bytes to store in - the internal buffer before ceasing to read from the underlying - resource. Default=16kb - * `encoding` {String} If specified, then buffers will be decoded to - strings using the specified encoding. Default=null - * `objectMode` {Boolean} Whether this stream should behave - as a stream of objects. Meaning that stream.read(n) returns - a single value instead of a Buffer of size n - -In classes that extend the Readable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### readable.\_read(size) - -* `size` {Number} Number of bytes to read asynchronously - -Note: **This function should NOT be called directly.** It should be -implemented by child classes, and called by the internal Readable -class methods only. - -All Readable stream implementations must provide a `_read` method -to fetch data from the underlying resource. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -When data is available, put it into the read queue by calling -`readable.push(chunk)`. If `push` returns false, then you should stop -reading. When `_read` is called again, you should start pushing more -data. - -The `size` argument is advisory. Implementations where a "read" is a -single call that returns data can use this to know how much data to -fetch. Implementations where that is not relevant, such as TCP or -TLS, may ignore this argument, and simply provide data whenever it -becomes available. There is no need, for example to "wait" until -`size` bytes are available before calling `stream.push(chunk)`. - -### readable.push(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to push into the read queue -* return {Boolean} Whether or not more pushes should be performed - -Note: **This function should be called by Readable implementors, NOT -by consumers of Readable subclasses.** The `_read()` function will not -be called again until at least one `push(chunk)` call is made. If no -data is available, then you MAY call `push('')` (an empty string) to -allow a future `_read` call, without adding any data to the queue. - -The `Readable` class works by putting data into a read queue to be -pulled out later by calling the `read()` method when the `'readable'` -event fires. - -The `push()` method will explicitly insert some data into the read -queue. If it is called with `null` then it will signal the end of the -data. - -In some cases, you may be wrapping a lower-level source which has some -sort of pause/resume mechanism, and a data callback. In those cases, -you could wrap the low-level source object by doing something like -this: - -```javascript -// source is an object with readStop() and readStart() methods, -// and an `ondata` member that gets called when it has data, and -// an `onend` member that gets called when the data is over. - -var stream = new Readable(); - -source.ondata = function(chunk) { - // if push() returns false, then we need to stop reading from source - if (!stream.push(chunk)) - source.readStop(); -}; - -source.onend = function() { - stream.push(null); -}; - -// _read will be called when the stream wants to pull more data in -// the advisory size argument is ignored in this case. -stream._read = function(n) { - source.readStart(); -}; -``` - -### readable.unshift(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue -* return {Boolean} Whether or not more pushes should be performed - -This is the corollary of `readable.push(chunk)`. Rather than putting -the data at the *end* of the read queue, it puts it at the *front* of -the read queue. - -This is useful in certain use-cases where a stream is being consumed -by a parser, which needs to "un-consume" some data that it has -optimistically pulled out of the source. - -```javascript -// A parser for a simple data protocol. -// The "header" is a JSON object, followed by 2 \n characters, and -// then a message body. -// -// Note: This can be done more simply as a Transform stream. See below. - -function SimpleProtocol(source, options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Readable.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - - // source is a readable stream, such as a socket or file - this._source = source; - - var self = this; - source.on('end', function() { - self.push(null); - }); - - // give it a kick whenever the source is readable - // read(0) will not consume any bytes - source.on('readable', function() { - self.read(0); - }); - - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Readable.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._read = function(n) { - if (!this._inBody) { - var chunk = this._source.read(); - - // if the source doesn't have data, we don't have data yet. - if (chunk === null) - return this.push(''); - - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - this.push(''); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // now, because we got some extra data, unshift the rest - // back into the read queue so that our consumer will see it. - var b = chunk.slice(split); - this.unshift(b); - - // and let them know that we are done parsing the header. - this.emit('header', this.header); - } - } else { - // from there on, just provide the data to our consumer. - // careful not to push(null), since that would indicate EOF. - var chunk = this._source.read(); - if (chunk) this.push(chunk); - } -}; - -// Usage: -var parser = new SimpleProtocol(source); -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - -### readable.wrap(stream) - -* `stream` {Stream} An "old style" readable stream - -If you are using an older Node library that emits `'data'` events and -has a `pause()` method that is advisory only, then you can use the -`wrap()` method to create a Readable stream that uses the old stream -as its data source. - -For example: - -```javascript -var OldReader = require('./old-api-module.js').OldReader; -var oreader = new OldReader; -var Readable = require('stream').Readable; -var myReader = new Readable().wrap(oreader); - -myReader.on('readable', function() { - myReader.read(); // etc. -}); -``` - -### Event: 'readable' - -When there is data ready to be consumed, this event will fire. - -When this event emits, call the `read()` method to consume the data. - -### Event: 'end' - -Emitted when the stream has received an EOF (FIN in TCP terminology). -Indicates that no more `'data'` events will happen. If the stream is -also writable, it may be possible to continue writing. - -### Event: 'data' - -The `'data'` event emits either a `Buffer` (by default) or a string if -`setEncoding()` was used. - -Note that adding a `'data'` event listener will switch the Readable -stream into "old mode", where data is emitted as soon as it is -available, rather than waiting for you to call `read()` to consume it. - -### Event: 'error' - -Emitted if there was an error receiving data. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### readable.setEncoding(encoding) - -Makes the `'data'` event emit a string instead of a `Buffer`. `encoding` -can be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`. - -The encoding can also be set by specifying an `encoding` field to the -constructor. - -### readable.read([size]) - -* `size` {Number | null} Optional number of bytes to read. -* Return: {Buffer | String | null} - -Note: **This function SHOULD be called by Readable stream users.** - -Call this method to consume data once the `'readable'` event is -emitted. - -The `size` argument will set a minimum number of bytes that you are -interested in. If not set, then the entire content of the internal -buffer is returned. - -If there is no data to consume, or if there are fewer bytes in the -internal buffer than the `size` argument, then `null` is returned, and -a future `'readable'` event will be emitted when more is available. - -Calling `stream.read(0)` will always return `null`, and will trigger a -refresh of the internal buffer, but otherwise be a no-op. - -### readable.pipe(destination, [options]) - -* `destination` {Writable Stream} -* `options` {Object} Optional - * `end` {Boolean} Default=true - -Connects this readable stream to `destination` WriteStream. Incoming -data on this stream gets written to `destination`. Properly manages -back-pressure so that a slow destination will not be overwhelmed by a -fast readable stream. - -This function returns the `destination` stream. - -For example, emulating the Unix `cat` command: - - process.stdin.pipe(process.stdout); - -By default `end()` is called on the destination when the source stream -emits `end`, so that `destination` is no longer writable. Pass `{ end: -false }` as `options` to keep the destination stream open. - -This keeps `writer` open so that "Goodbye" can be written at the -end. - - reader.pipe(writer, { end: false }); - reader.on("end", function() { - writer.end("Goodbye\n"); - }); - -Note that `process.stderr` and `process.stdout` are never closed until -the process exits, regardless of the specified options. - -### readable.unpipe([destination]) - -* `destination` {Writable Stream} Optional - -Undo a previously established `pipe()`. If no destination is -provided, then all previously established pipes are removed. - -### readable.pause() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Ceases the flow of data. No `'data'` events are emitted while the -stream is in a paused state. - -### readable.resume() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Resumes the incoming `'data'` events after a `pause()`. - - -## Class: stream.Writable - - - -A `Writable` Stream has the following methods, members, and events. - -Note that `stream.Writable` is an abstract class designed to be -extended with an underlying implementation of the -`_write(chunk, encoding, cb)` method. (See below.) - -### new stream.Writable([options]) - -* `options` {Object} - * `highWaterMark` {Number} Buffer level when `write()` starts - returning false. Default=16kb - * `decodeStrings` {Boolean} Whether or not to decode strings into - Buffers before passing them to `_write()`. Default=true - -In classes that extend the Writable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### writable.\_write(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be written. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. Ignore chunk is a buffer. Note that chunk will - **always** be a buffer unless the `decodeStrings` option is - explicitly set to `false`. -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -All Writable stream implementations must provide a `_write` method to -send data to the underlying resource. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Writable -class methods only. - -Call the callback using the standard `callback(error)` pattern to -signal that the write completed successfully or with an error. - -If the `decodeStrings` flag is set in the constructor options, then -`chunk` may be a string rather than a Buffer, and `encoding` will -indicate the sort of string that it is. This is to support -implementations that have an optimized handling for certain string -data encodings. If you do not explicitly set the `decodeStrings` -option to `false`, then you can safely ignore the `encoding` argument, -and assume that `chunk` will always be a Buffer. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - - -### writable.write(chunk, [encoding], [callback]) - -* `chunk` {Buffer | String} Data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when this chunk is - successfully written. -* Returns {Boolean} - -Writes `chunk` to the stream. Returns `true` if the data has been -flushed to the underlying resource. Returns `false` to indicate that -the buffer is full, and the data will be sent out in the future. The -`'drain'` event will indicate when the buffer is empty again. - -The specifics of when `write()` will return false, is determined by -the `highWaterMark` option provided to the constructor. - -### writable.end([chunk], [encoding], [callback]) - -* `chunk` {Buffer | String} Optional final data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when the final chunk is - successfully written. - -Call this method to signal the end of the data being written to the -stream. - -### Event: 'drain' - -Emitted when the stream's write queue empties and it's safe to write -without buffering again. Listen for it when `stream.write()` returns -`false`. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### Event: 'finish' - -When `end()` is called and there are no more chunks to write, this -event is emitted. - -### Event: 'pipe' - -* `source` {Readable Stream} - -Emitted when the stream is passed to a readable stream's pipe method. - -### Event 'unpipe' - -* `source` {Readable Stream} - -Emitted when a previously established `pipe()` is removed using the -source Readable stream's `unpipe()` method. - -## Class: stream.Duplex - - - -A "duplex" stream is one that is both Readable and Writable, such as a -TCP socket connection. - -Note that `stream.Duplex` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -and `_write(chunk, encoding, callback)` methods as you would with a Readable or -Writable stream class. - -Since JavaScript doesn't have multiple prototypal inheritance, this -class prototypally inherits from Readable, and then parasitically from -Writable. It is thus up to the user to implement both the lowlevel -`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method -on extension duplex classes. - -### new stream.Duplex(options) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then - the stream will automatically end the readable side when the - writable side ends and vice versa. - -In classes that extend the Duplex class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -## Class: stream.Transform - -A "transform" stream is a duplex stream where the output is causally -connected in some way to the input, such as a zlib stream or a crypto -stream. - -There is no requirement that the output be the same size as the input, -the same number of chunks, or arrive at the same time. For example, a -Hash stream will only ever have a single chunk of output which is -provided when the input is ended. A zlib stream will either produce -much smaller or much larger than its input. - -Rather than implement the `_read()` and `_write()` methods, Transform -classes must implement the `_transform()` method, and may optionally -also implement the `_flush()` method. (See below.) - -### new stream.Transform([options]) - -* `options` {Object} Passed to both Writable and Readable - constructors. - -In classes that extend the Transform class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### transform.\_transform(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be transformed. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. (Ignore if `decodeStrings` chunk is a buffer.) -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Transform -class methods only. - -All Transform stream implementations must provide a `_transform` -method to accept input and produce output. - -`_transform` should do whatever has to be done in this specific -Transform class, to handle the bytes being written, and pass them off -to the readable portion of the interface. Do asynchronous I/O, -process things, and so on. - -Call `transform.push(outputChunk)` 0 or more times to generate output -from this input chunk, depending on how much data you want to output -as a result of this chunk. - -Call the callback function only when the current chunk is completely -consumed. Note that there may or may not be output as a result of any -particular input chunk. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### transform.\_flush(callback) - -* `callback` {Function} Call this function (optionally with an error - argument) when you are done flushing any remaining data. - -Note: **This function MUST NOT be called directly.** It MAY be implemented -by child classes, and if so, will be called by the internal Transform -class methods only. - -In some cases, your transform operation may need to emit a bit more -data at the end of the stream. For example, a `Zlib` compression -stream will store up some internal state so that it can optimally -compress the output. At the end, however, it needs to do the best it -can with what is left, so that the data will be complete. - -In those cases, you can implement a `_flush` method, which will be -called at the very end, after all the written data is consumed, but -before emitting `end` to signal the end of the readable side. Just -like with `_transform`, call `transform.push(chunk)` zero or more -times, as appropriate, and call `callback` when the flush operation is -complete. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### Example: `SimpleProtocol` parser - -The example above of a simple protocol parser can be implemented much -more simply by using the higher level `Transform` stream class. - -In this example, rather than providing the input as an argument, it -would be piped into the parser, which is a more idiomatic Node stream -approach. - -```javascript -function SimpleProtocol(options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Transform.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Transform.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._transform = function(chunk, encoding, done) { - if (!this._inBody) { - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // and let them know that we are done parsing the header. - this.emit('header', this.header); - - // now, because we got some extra data, emit this first. - this.push(b); - } - } else { - // from there on, just provide the data to our consumer as-is. - this.push(b); - } - done(); -}; - -var parser = new SimpleProtocol(); -source.pipe(parser) - -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - - -## Class: stream.PassThrough - -This is a trivial implementation of a `Transform` stream that simply -passes the input bytes across to the output. Its purpose is mainly -for examples and testing, but there are occasionally use cases where -it can come in handy. - - -[EventEmitter]: events.html#events_class_events_eventemitter diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/duplex.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/duplex.js deleted file mode 100644 index ca807af8..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/float.patch b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/float.patch deleted file mode 100644 index b984607a..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/float.patch +++ /dev/null @@ -1,923 +0,0 @@ -diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js -index c5a741c..a2e0d8e 100644 ---- a/lib/_stream_duplex.js -+++ b/lib/_stream_duplex.js -@@ -26,8 +26,8 @@ - - module.exports = Duplex; - var util = require('util'); --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('./_stream_readable'); -+var Writable = require('./_stream_writable'); - - util.inherits(Duplex, Readable); - -diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js -index a5e9864..330c247 100644 ---- a/lib/_stream_passthrough.js -+++ b/lib/_stream_passthrough.js -@@ -25,7 +25,7 @@ - - module.exports = PassThrough; - --var Transform = require('_stream_transform'); -+var Transform = require('./_stream_transform'); - var util = require('util'); - util.inherits(PassThrough, Transform); - -diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js -index 0c3fe3e..90a8298 100644 ---- a/lib/_stream_readable.js -+++ b/lib/_stream_readable.js -@@ -23,10 +23,34 @@ module.exports = Readable; - Readable.ReadableState = ReadableState; - - var EE = require('events').EventEmitter; -+if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { -+ return emitter.listeners(type).length; -+}; -+ -+if (!global.setImmediate) global.setImmediate = function setImmediate(fn) { -+ return setTimeout(fn, 0); -+}; -+if (!global.clearImmediate) global.clearImmediate = function clearImmediate(i) { -+ return clearTimeout(i); -+}; -+ - var Stream = require('stream'); - var util = require('util'); -+if (!util.isUndefined) { -+ var utilIs = require('core-util-is'); -+ for (var f in utilIs) { -+ util[f] = utilIs[f]; -+ } -+} - var StringDecoder; --var debug = util.debuglog('stream'); -+var debug; -+if (util.debuglog) -+ debug = util.debuglog('stream'); -+else try { -+ debug = require('debuglog')('stream'); -+} catch (er) { -+ debug = function() {}; -+} - - util.inherits(Readable, Stream); - -@@ -380,7 +404,7 @@ function chunkInvalid(state, chunk) { - - - function onEofChunk(stream, state) { -- if (state.decoder && !state.ended) { -+ if (state.decoder && !state.ended && state.decoder.end) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); -diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js -index b1f9fcc..b0caf57 100644 ---- a/lib/_stream_transform.js -+++ b/lib/_stream_transform.js -@@ -64,8 +64,14 @@ - - module.exports = Transform; - --var Duplex = require('_stream_duplex'); -+var Duplex = require('./_stream_duplex'); - var util = require('util'); -+if (!util.isUndefined) { -+ var utilIs = require('core-util-is'); -+ for (var f in utilIs) { -+ util[f] = utilIs[f]; -+ } -+} - util.inherits(Transform, Duplex); - - -diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js -index ba2e920..f49288b 100644 ---- a/lib/_stream_writable.js -+++ b/lib/_stream_writable.js -@@ -27,6 +27,12 @@ module.exports = Writable; - Writable.WritableState = WritableState; - - var util = require('util'); -+if (!util.isUndefined) { -+ var utilIs = require('core-util-is'); -+ for (var f in utilIs) { -+ util[f] = utilIs[f]; -+ } -+} - var Stream = require('stream'); - - util.inherits(Writable, Stream); -@@ -119,7 +125,7 @@ function WritableState(options, stream) { - function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. -- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex)) -+ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex'))) - return new Writable(options); - - this._writableState = new WritableState(options, this); -diff --git a/test/simple/test-stream-big-push.js b/test/simple/test-stream-big-push.js -index e3787e4..8cd2127 100644 ---- a/test/simple/test-stream-big-push.js -+++ b/test/simple/test-stream-big-push.js -@@ -21,7 +21,7 @@ - - var common = require('../common'); - var assert = require('assert'); --var stream = require('stream'); -+var stream = require('../../'); - var str = 'asdfasdfasdfasdfasdf'; - - var r = new stream.Readable({ -diff --git a/test/simple/test-stream-end-paused.js b/test/simple/test-stream-end-paused.js -index bb73777..d40efc7 100644 ---- a/test/simple/test-stream-end-paused.js -+++ b/test/simple/test-stream-end-paused.js -@@ -25,7 +25,7 @@ var gotEnd = false; - - // Make sure we don't miss the end event for paused 0-length streams - --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - var stream = new Readable(); - var calledRead = false; - stream._read = function() { -diff --git a/test/simple/test-stream-pipe-after-end.js b/test/simple/test-stream-pipe-after-end.js -index b46ee90..0be8366 100644 ---- a/test/simple/test-stream-pipe-after-end.js -+++ b/test/simple/test-stream-pipe-after-end.js -@@ -22,8 +22,8 @@ - var common = require('../common'); - var assert = require('assert'); - --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('../../lib/_stream_readable'); -+var Writable = require('../../lib/_stream_writable'); - var util = require('util'); - - util.inherits(TestReadable, Readable); -diff --git a/test/simple/test-stream-pipe-cleanup.js b/test/simple/test-stream-pipe-cleanup.js -deleted file mode 100644 -index f689358..0000000 ---- a/test/simple/test-stream-pipe-cleanup.js -+++ /dev/null -@@ -1,122 +0,0 @@ --// 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. -- --// This test asserts that Stream.prototype.pipe does not leave listeners --// hanging on the source or dest. -- --var common = require('../common'); --var stream = require('stream'); --var assert = require('assert'); --var util = require('util'); -- --function Writable() { -- this.writable = true; -- this.endCalls = 0; -- stream.Stream.call(this); --} --util.inherits(Writable, stream.Stream); --Writable.prototype.end = function() { -- this.endCalls++; --}; -- --Writable.prototype.destroy = function() { -- this.endCalls++; --}; -- --function Readable() { -- this.readable = true; -- stream.Stream.call(this); --} --util.inherits(Readable, stream.Stream); -- --function Duplex() { -- this.readable = true; -- Writable.call(this); --} --util.inherits(Duplex, Writable); -- --var i = 0; --var limit = 100; -- --var w = new Writable(); -- --var r; -- --for (i = 0; i < limit; i++) { -- r = new Readable(); -- r.pipe(w); -- r.emit('end'); --} --assert.equal(0, r.listeners('end').length); --assert.equal(limit, w.endCalls); -- --w.endCalls = 0; -- --for (i = 0; i < limit; i++) { -- r = new Readable(); -- r.pipe(w); -- r.emit('close'); --} --assert.equal(0, r.listeners('close').length); --assert.equal(limit, w.endCalls); -- --w.endCalls = 0; -- --r = new Readable(); -- --for (i = 0; i < limit; i++) { -- w = new Writable(); -- r.pipe(w); -- w.emit('close'); --} --assert.equal(0, w.listeners('close').length); -- --r = new Readable(); --w = new Writable(); --var d = new Duplex(); --r.pipe(d); // pipeline A --d.pipe(w); // pipeline B --assert.equal(r.listeners('end').length, 2); // A.onend, A.cleanup --assert.equal(r.listeners('close').length, 2); // A.onclose, A.cleanup --assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup --assert.equal(d.listeners('close').length, 3); // A.cleanup, B.onclose, B.cleanup --assert.equal(w.listeners('end').length, 0); --assert.equal(w.listeners('close').length, 1); // B.cleanup -- --r.emit('end'); --assert.equal(d.endCalls, 1); --assert.equal(w.endCalls, 0); --assert.equal(r.listeners('end').length, 0); --assert.equal(r.listeners('close').length, 0); --assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup --assert.equal(d.listeners('close').length, 2); // B.onclose, B.cleanup --assert.equal(w.listeners('end').length, 0); --assert.equal(w.listeners('close').length, 1); // B.cleanup -- --d.emit('end'); --assert.equal(d.endCalls, 1); --assert.equal(w.endCalls, 1); --assert.equal(r.listeners('end').length, 0); --assert.equal(r.listeners('close').length, 0); --assert.equal(d.listeners('end').length, 0); --assert.equal(d.listeners('close').length, 0); --assert.equal(w.listeners('end').length, 0); --assert.equal(w.listeners('close').length, 0); -diff --git a/test/simple/test-stream-pipe-error-handling.js b/test/simple/test-stream-pipe-error-handling.js -index c5d724b..c7d6b7d 100644 ---- a/test/simple/test-stream-pipe-error-handling.js -+++ b/test/simple/test-stream-pipe-error-handling.js -@@ -21,7 +21,7 @@ - - var common = require('../common'); - var assert = require('assert'); --var Stream = require('stream').Stream; -+var Stream = require('../../').Stream; - - (function testErrorListenerCatches() { - var source = new Stream(); -diff --git a/test/simple/test-stream-pipe-event.js b/test/simple/test-stream-pipe-event.js -index cb9d5fe..56f8d61 100644 ---- a/test/simple/test-stream-pipe-event.js -+++ b/test/simple/test-stream-pipe-event.js -@@ -20,7 +20,7 @@ - // USE OR OTHER DEALINGS IN THE SOFTWARE. - - var common = require('../common'); --var stream = require('stream'); -+var stream = require('../../'); - var assert = require('assert'); - var util = require('util'); - -diff --git a/test/simple/test-stream-push-order.js b/test/simple/test-stream-push-order.js -index f2e6ec2..a5c9bf9 100644 ---- a/test/simple/test-stream-push-order.js -+++ b/test/simple/test-stream-push-order.js -@@ -20,7 +20,7 @@ - // USE OR OTHER DEALINGS IN THE SOFTWARE. - - var common = require('../common.js'); --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - var assert = require('assert'); - - var s = new Readable({ -diff --git a/test/simple/test-stream-push-strings.js b/test/simple/test-stream-push-strings.js -index 06f43dc..1701a9a 100644 ---- a/test/simple/test-stream-push-strings.js -+++ b/test/simple/test-stream-push-strings.js -@@ -22,7 +22,7 @@ - var common = require('../common'); - var assert = require('assert'); - --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - var util = require('util'); - - util.inherits(MyStream, Readable); -diff --git a/test/simple/test-stream-readable-event.js b/test/simple/test-stream-readable-event.js -index ba6a577..a8e6f7b 100644 ---- a/test/simple/test-stream-readable-event.js -+++ b/test/simple/test-stream-readable-event.js -@@ -22,7 +22,7 @@ - var common = require('../common'); - var assert = require('assert'); - --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - - (function first() { - // First test, not reading when the readable is added. -diff --git a/test/simple/test-stream-readable-flow-recursion.js b/test/simple/test-stream-readable-flow-recursion.js -index 2891ad6..11689ba 100644 ---- a/test/simple/test-stream-readable-flow-recursion.js -+++ b/test/simple/test-stream-readable-flow-recursion.js -@@ -27,7 +27,7 @@ var assert = require('assert'); - // more data continuously, but without triggering a nextTick - // warning or RangeError. - --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - - // throw an error if we trigger a nextTick warning. - process.throwDeprecation = true; -diff --git a/test/simple/test-stream-unshift-empty-chunk.js b/test/simple/test-stream-unshift-empty-chunk.js -index 0c96476..7827538 100644 ---- a/test/simple/test-stream-unshift-empty-chunk.js -+++ b/test/simple/test-stream-unshift-empty-chunk.js -@@ -24,7 +24,7 @@ var assert = require('assert'); - - // This test verifies that stream.unshift(Buffer(0)) or - // stream.unshift('') does not set state.reading=false. --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - - var r = new Readable(); - var nChunks = 10; -diff --git a/test/simple/test-stream-unshift-read-race.js b/test/simple/test-stream-unshift-read-race.js -index 83fd9fa..17c18aa 100644 ---- a/test/simple/test-stream-unshift-read-race.js -+++ b/test/simple/test-stream-unshift-read-race.js -@@ -29,7 +29,7 @@ var assert = require('assert'); - // 3. push() after the EOF signaling null is an error. - // 4. _read() is not called after pushing the EOF null chunk. - --var stream = require('stream'); -+var stream = require('../../'); - var hwm = 10; - var r = stream.Readable({ highWaterMark: hwm }); - var chunks = 10; -@@ -51,7 +51,14 @@ r._read = function(n) { - - function push(fast) { - assert(!pushedNull, 'push() after null push'); -- var c = pos >= data.length ? null : data.slice(pos, pos + n); -+ var c; -+ if (pos >= data.length) -+ c = null; -+ else { -+ if (n + pos > data.length) -+ n = data.length - pos; -+ c = data.slice(pos, pos + n); -+ } - pushedNull = c === null; - if (fast) { - pos += n; -diff --git a/test/simple/test-stream-writev.js b/test/simple/test-stream-writev.js -index 5b49e6e..b5321f3 100644 ---- a/test/simple/test-stream-writev.js -+++ b/test/simple/test-stream-writev.js -@@ -22,7 +22,7 @@ - var common = require('../common'); - var assert = require('assert'); - --var stream = require('stream'); -+var stream = require('../../'); - - var queue = []; - for (var decode = 0; decode < 2; decode++) { -diff --git a/test/simple/test-stream2-basic.js b/test/simple/test-stream2-basic.js -index 3814bf0..248c1be 100644 ---- a/test/simple/test-stream2-basic.js -+++ b/test/simple/test-stream2-basic.js -@@ -21,7 +21,7 @@ - - - var common = require('../common.js'); --var R = require('_stream_readable'); -+var R = require('../../lib/_stream_readable'); - var assert = require('assert'); - - var util = require('util'); -diff --git a/test/simple/test-stream2-compatibility.js b/test/simple/test-stream2-compatibility.js -index 6cdd4e9..f0fa84b 100644 ---- a/test/simple/test-stream2-compatibility.js -+++ b/test/simple/test-stream2-compatibility.js -@@ -21,7 +21,7 @@ - - - var common = require('../common.js'); --var R = require('_stream_readable'); -+var R = require('../../lib/_stream_readable'); - var assert = require('assert'); - - var util = require('util'); -diff --git a/test/simple/test-stream2-finish-pipe.js b/test/simple/test-stream2-finish-pipe.js -index 39b274f..006a19b 100644 ---- a/test/simple/test-stream2-finish-pipe.js -+++ b/test/simple/test-stream2-finish-pipe.js -@@ -20,7 +20,7 @@ - // USE OR OTHER DEALINGS IN THE SOFTWARE. - - var common = require('../common.js'); --var stream = require('stream'); -+var stream = require('../../'); - var Buffer = require('buffer').Buffer; - - var r = new stream.Readable(); -diff --git a/test/simple/test-stream2-fs.js b/test/simple/test-stream2-fs.js -deleted file mode 100644 -index e162406..0000000 ---- a/test/simple/test-stream2-fs.js -+++ /dev/null -@@ -1,72 +0,0 @@ --// 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 common = require('../common.js'); --var R = require('_stream_readable'); --var assert = require('assert'); -- --var fs = require('fs'); --var FSReadable = fs.ReadStream; -- --var path = require('path'); --var file = path.resolve(common.fixturesDir, 'x1024.txt'); -- --var size = fs.statSync(file).size; -- --var expectLengths = [1024]; -- --var util = require('util'); --var Stream = require('stream'); -- --util.inherits(TestWriter, Stream); -- --function TestWriter() { -- Stream.apply(this); -- this.buffer = []; -- this.length = 0; --} -- --TestWriter.prototype.write = function(c) { -- this.buffer.push(c.toString()); -- this.length += c.length; -- return true; --}; -- --TestWriter.prototype.end = function(c) { -- if (c) this.buffer.push(c.toString()); -- this.emit('results', this.buffer); --} -- --var r = new FSReadable(file); --var w = new TestWriter(); -- --w.on('results', function(res) { -- console.error(res, w.length); -- assert.equal(w.length, size); -- var l = 0; -- assert.deepEqual(res.map(function (c) { -- return c.length; -- }), expectLengths); -- console.log('ok'); --}); -- --r.pipe(w); -diff --git a/test/simple/test-stream2-httpclient-response-end.js b/test/simple/test-stream2-httpclient-response-end.js -deleted file mode 100644 -index 15cffc2..0000000 ---- a/test/simple/test-stream2-httpclient-response-end.js -+++ /dev/null -@@ -1,52 +0,0 @@ --// 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 common = require('../common.js'); --var assert = require('assert'); --var http = require('http'); --var msg = 'Hello'; --var readable_event = false; --var end_event = false; --var server = http.createServer(function(req, res) { -- res.writeHead(200, {'Content-Type': 'text/plain'}); -- res.end(msg); --}).listen(common.PORT, function() { -- http.get({port: common.PORT}, function(res) { -- var data = ''; -- res.on('readable', function() { -- console.log('readable event'); -- readable_event = true; -- data += res.read(); -- }); -- res.on('end', function() { -- console.log('end event'); -- end_event = true; -- assert.strictEqual(msg, data); -- server.close(); -- }); -- }); --}); -- --process.on('exit', function() { -- assert(readable_event); -- assert(end_event); --}); -- -diff --git a/test/simple/test-stream2-large-read-stall.js b/test/simple/test-stream2-large-read-stall.js -index 2fbfbca..667985b 100644 ---- a/test/simple/test-stream2-large-read-stall.js -+++ b/test/simple/test-stream2-large-read-stall.js -@@ -30,7 +30,7 @@ var PUSHSIZE = 20; - var PUSHCOUNT = 1000; - var HWM = 50; - --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - var r = new Readable({ - highWaterMark: HWM - }); -@@ -39,23 +39,23 @@ var rs = r._readableState; - r._read = push; - - r.on('readable', function() { -- console.error('>> readable'); -+ //console.error('>> readable'); - do { -- console.error(' > read(%d)', READSIZE); -+ //console.error(' > read(%d)', READSIZE); - var ret = r.read(READSIZE); -- console.error(' < %j (%d remain)', ret && ret.length, rs.length); -+ //console.error(' < %j (%d remain)', ret && ret.length, rs.length); - } while (ret && ret.length === READSIZE); - -- console.error('<< after read()', -- ret && ret.length, -- rs.needReadable, -- rs.length); -+ //console.error('<< after read()', -+ // ret && ret.length, -+ // rs.needReadable, -+ // rs.length); - }); - - var endEmitted = false; - r.on('end', function() { - endEmitted = true; -- console.error('end'); -+ //console.error('end'); - }); - - var pushes = 0; -@@ -64,11 +64,11 @@ function push() { - return; - - if (pushes++ === PUSHCOUNT) { -- console.error(' push(EOF)'); -+ //console.error(' push(EOF)'); - return r.push(null); - } - -- console.error(' push #%d', pushes); -+ //console.error(' push #%d', pushes); - if (r.push(new Buffer(PUSHSIZE))) - setTimeout(push); - } -diff --git a/test/simple/test-stream2-objects.js b/test/simple/test-stream2-objects.js -index 3e6931d..ff47d89 100644 ---- a/test/simple/test-stream2-objects.js -+++ b/test/simple/test-stream2-objects.js -@@ -21,8 +21,8 @@ - - - var common = require('../common.js'); --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('../../lib/_stream_readable'); -+var Writable = require('../../lib/_stream_writable'); - var assert = require('assert'); - - // tiny node-tap lookalike. -diff --git a/test/simple/test-stream2-pipe-error-handling.js b/test/simple/test-stream2-pipe-error-handling.js -index cf7531c..e3f3e4e 100644 ---- a/test/simple/test-stream2-pipe-error-handling.js -+++ b/test/simple/test-stream2-pipe-error-handling.js -@@ -21,7 +21,7 @@ - - var common = require('../common'); - var assert = require('assert'); --var stream = require('stream'); -+var stream = require('../../'); - - (function testErrorListenerCatches() { - var count = 1000; -diff --git a/test/simple/test-stream2-pipe-error-once-listener.js b/test/simple/test-stream2-pipe-error-once-listener.js -index 5e8e3cb..53b2616 100755 ---- a/test/simple/test-stream2-pipe-error-once-listener.js -+++ b/test/simple/test-stream2-pipe-error-once-listener.js -@@ -24,7 +24,7 @@ var common = require('../common.js'); - var assert = require('assert'); - - var util = require('util'); --var stream = require('stream'); -+var stream = require('../../'); - - - var Read = function() { -diff --git a/test/simple/test-stream2-push.js b/test/simple/test-stream2-push.js -index b63edc3..eb2b0e9 100644 ---- a/test/simple/test-stream2-push.js -+++ b/test/simple/test-stream2-push.js -@@ -20,7 +20,7 @@ - // USE OR OTHER DEALINGS IN THE SOFTWARE. - - var common = require('../common.js'); --var stream = require('stream'); -+var stream = require('../../'); - var Readable = stream.Readable; - var Writable = stream.Writable; - var assert = require('assert'); -diff --git a/test/simple/test-stream2-read-sync-stack.js b/test/simple/test-stream2-read-sync-stack.js -index e8a7305..9740a47 100644 ---- a/test/simple/test-stream2-read-sync-stack.js -+++ b/test/simple/test-stream2-read-sync-stack.js -@@ -21,7 +21,7 @@ - - var common = require('../common'); - var assert = require('assert'); --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - var r = new Readable(); - var N = 256 * 1024; - -diff --git a/test/simple/test-stream2-readable-empty-buffer-no-eof.js b/test/simple/test-stream2-readable-empty-buffer-no-eof.js -index cd30178..4b1659d 100644 ---- a/test/simple/test-stream2-readable-empty-buffer-no-eof.js -+++ b/test/simple/test-stream2-readable-empty-buffer-no-eof.js -@@ -22,10 +22,9 @@ - var common = require('../common'); - var assert = require('assert'); - --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - - test1(); --test2(); - - function test1() { - var r = new Readable(); -@@ -88,31 +87,3 @@ function test1() { - console.log('ok'); - }); - } -- --function test2() { -- var r = new Readable({ encoding: 'base64' }); -- var reads = 5; -- r._read = function(n) { -- if (!reads--) -- return r.push(null); // EOF -- else -- return r.push(new Buffer('x')); -- }; -- -- var results = []; -- function flow() { -- var chunk; -- while (null !== (chunk = r.read())) -- results.push(chunk + ''); -- } -- r.on('readable', flow); -- r.on('end', function() { -- results.push('EOF'); -- }); -- flow(); -- -- process.on('exit', function() { -- assert.deepEqual(results, [ 'eHh4', 'eHg=', 'EOF' ]); -- console.log('ok'); -- }); --} -diff --git a/test/simple/test-stream2-readable-from-list.js b/test/simple/test-stream2-readable-from-list.js -index 7c96ffe..04a96f5 100644 ---- a/test/simple/test-stream2-readable-from-list.js -+++ b/test/simple/test-stream2-readable-from-list.js -@@ -21,7 +21,7 @@ - - var assert = require('assert'); - var common = require('../common.js'); --var fromList = require('_stream_readable')._fromList; -+var fromList = require('../../lib/_stream_readable')._fromList; - - // tiny node-tap lookalike. - var tests = []; -diff --git a/test/simple/test-stream2-readable-legacy-drain.js b/test/simple/test-stream2-readable-legacy-drain.js -index 675da8e..51fd3d5 100644 ---- a/test/simple/test-stream2-readable-legacy-drain.js -+++ b/test/simple/test-stream2-readable-legacy-drain.js -@@ -22,7 +22,7 @@ - var common = require('../common'); - var assert = require('assert'); - --var Stream = require('stream'); -+var Stream = require('../../'); - var Readable = Stream.Readable; - - var r = new Readable(); -diff --git a/test/simple/test-stream2-readable-non-empty-end.js b/test/simple/test-stream2-readable-non-empty-end.js -index 7314ae7..c971898 100644 ---- a/test/simple/test-stream2-readable-non-empty-end.js -+++ b/test/simple/test-stream2-readable-non-empty-end.js -@@ -21,7 +21,7 @@ - - var assert = require('assert'); - var common = require('../common.js'); --var Readable = require('_stream_readable'); -+var Readable = require('../../lib/_stream_readable'); - - var len = 0; - var chunks = new Array(10); -diff --git a/test/simple/test-stream2-readable-wrap-empty.js b/test/simple/test-stream2-readable-wrap-empty.js -index 2e5cf25..fd8a3dc 100644 ---- a/test/simple/test-stream2-readable-wrap-empty.js -+++ b/test/simple/test-stream2-readable-wrap-empty.js -@@ -22,7 +22,7 @@ - var common = require('../common'); - var assert = require('assert'); - --var Readable = require('_stream_readable'); -+var Readable = require('../../lib/_stream_readable'); - var EE = require('events').EventEmitter; - - var oldStream = new EE(); -diff --git a/test/simple/test-stream2-readable-wrap.js b/test/simple/test-stream2-readable-wrap.js -index 90eea01..6b177f7 100644 ---- a/test/simple/test-stream2-readable-wrap.js -+++ b/test/simple/test-stream2-readable-wrap.js -@@ -22,8 +22,8 @@ - var common = require('../common'); - var assert = require('assert'); - --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('../../lib/_stream_readable'); -+var Writable = require('../../lib/_stream_writable'); - var EE = require('events').EventEmitter; - - var testRuns = 0, completedRuns = 0; -diff --git a/test/simple/test-stream2-set-encoding.js b/test/simple/test-stream2-set-encoding.js -index 5d2c32a..685531b 100644 ---- a/test/simple/test-stream2-set-encoding.js -+++ b/test/simple/test-stream2-set-encoding.js -@@ -22,7 +22,7 @@ - - var common = require('../common.js'); - var assert = require('assert'); --var R = require('_stream_readable'); -+var R = require('../../lib/_stream_readable'); - var util = require('util'); - - // tiny node-tap lookalike. -diff --git a/test/simple/test-stream2-transform.js b/test/simple/test-stream2-transform.js -index 9c9ddd8..a0cacc6 100644 ---- a/test/simple/test-stream2-transform.js -+++ b/test/simple/test-stream2-transform.js -@@ -21,8 +21,8 @@ - - var assert = require('assert'); - var common = require('../common.js'); --var PassThrough = require('_stream_passthrough'); --var Transform = require('_stream_transform'); -+var PassThrough = require('../../').PassThrough; -+var Transform = require('../../').Transform; - - // tiny node-tap lookalike. - var tests = []; -diff --git a/test/simple/test-stream2-unpipe-drain.js b/test/simple/test-stream2-unpipe-drain.js -index d66dc3c..365b327 100644 ---- a/test/simple/test-stream2-unpipe-drain.js -+++ b/test/simple/test-stream2-unpipe-drain.js -@@ -22,7 +22,7 @@ - - var common = require('../common.js'); - var assert = require('assert'); --var stream = require('stream'); -+var stream = require('../../'); - var crypto = require('crypto'); - - var util = require('util'); -diff --git a/test/simple/test-stream2-unpipe-leak.js b/test/simple/test-stream2-unpipe-leak.js -index 99f8746..17c92ae 100644 ---- a/test/simple/test-stream2-unpipe-leak.js -+++ b/test/simple/test-stream2-unpipe-leak.js -@@ -22,7 +22,7 @@ - - var common = require('../common.js'); - var assert = require('assert'); --var stream = require('stream'); -+var stream = require('../../'); - - var chunk = new Buffer('hallo'); - -diff --git a/test/simple/test-stream2-writable.js b/test/simple/test-stream2-writable.js -index 704100c..209c3a6 100644 ---- a/test/simple/test-stream2-writable.js -+++ b/test/simple/test-stream2-writable.js -@@ -20,8 +20,8 @@ - // USE OR OTHER DEALINGS IN THE SOFTWARE. - - var common = require('../common.js'); --var W = require('_stream_writable'); --var D = require('_stream_duplex'); -+var W = require('../../').Writable; -+var D = require('../../').Duplex; - var assert = require('assert'); - - var util = require('util'); -diff --git a/test/simple/test-stream3-pause-then-read.js b/test/simple/test-stream3-pause-then-read.js -index b91bde3..2f72c15 100644 ---- a/test/simple/test-stream3-pause-then-read.js -+++ b/test/simple/test-stream3-pause-then-read.js -@@ -22,7 +22,7 @@ - var common = require('../common'); - var assert = require('assert'); - --var stream = require('stream'); -+var stream = require('../../'); - var Readable = stream.Readable; - var Writable = stream.Writable; - diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index a2e0d8e0..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,69 +0,0 @@ -// 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/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 330c247d..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,41 +0,0 @@ -// 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/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 2d00efb4..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,924 +0,0 @@ -// 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; -}; - -if (!global.setImmediate) global.setImmediate = function setImmediate(fn) { - return setTimeout(fn, 0); -}; -if (!global.clearImmediate) global.clearImmediate = function clearImmediate(i) { - return clearTimeout(i); -}; - -var Stream = require('stream'); -var util = require('util'); -if (!util.isUndefined) { - var utilIs = require('core-util-is'); - for (var f in utilIs) { - util[f] = utilIs[f]; - } -} -var StringDecoder; -var debug; -if (util.debuglog) - debug = util.debuglog('stream'); -else try { - debug = require('debuglog')('stream'); -} catch (er) { - debug = function() {}; -} - -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; - var defaultHwm = options.objectMode ? 16 : 16 * 1024; - this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; - - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; - - this.buffer = []; - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = 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, because 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 (util.isString(chunk) && !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 (util.isNullOrUndefined(chunk)) { - 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); - - if (!addToFront) - state.reading = false; - - // if we want the data now, just emit it. - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit('data', chunk); - stream.read(0); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) - state.buffer.unshift(chunk); - else - 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; - return this; -}; - -// 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) || util.isNull(n)) { - // 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) { - debug('read', n); - var state = this._readableState; - var nOrig = n; - - if (!util.isNumber(n) || 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)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) - endReadable(this); - else - 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; - debug('need readable', doRead); - - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } - - // 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; - debug('reading or ended', doRead); - } - - if (doRead) { - debug('do read'); - 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 pushed data 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 (util.isNull(ret)) { - 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 tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended && state.length === 0) - endReadable(this); - - if (!util.isNull(ret)) - this.emit('data', ret); - - return ret; -}; - -function chunkInvalid(state, chunk) { - var er = null; - if (!util.isBuffer(chunk) && - !util.isString(chunk) && - !util.isNullOrUndefined(chunk) && - !state.objectMode && - !er) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} - - -function onEofChunk(stream, state) { - if (state.decoder && !state.ended && state.decoder.end) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - - // emit 'readable' now to make sure it gets picked up. - emitReadable(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) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - if (state.sync) - process.nextTick(function() { - emitReadable_(stream); - }); - else - emitReadable_(stream); - } -} - -function emitReadable_(stream) { - debug('emit readable'); - stream.emit('readable'); - flow(stream); -} - - -// 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) { - debug('maybeReadMore read 0'); - 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; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - - 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) { - debug('onunpipe'); - if (readable === src) { - cleanup(); - } - } - - function onend() { - debug('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() { - debug('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); - src.removeListener('data', ondata); - - // 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 (state.awaitDrain && - (!dest._writableState || dest._writableState.needDrain)) - ondrain(); - } - - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - var ret = dest.write(chunk); - if (false === ret) { - debug('false write response, pause', - src._readableState.awaitDrain); - src._readableState.awaitDrain++; - src.pause(); - } - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('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() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - - function unpipe() { - debug('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) { - debug('pipe resume'); - src.resume(); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function() { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) - state.awaitDrain--; - if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} - - -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; - 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; - 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 listening to data, and it has not explicitly been paused, - // then call resume to start the flow of data on the next tick. - if (ev === 'data' && false !== this._readableState.flowing) { - this.resume(); - } - - if (ev === 'readable' && this.readable) { - var state = this._readableState; - if (!state.readableListening) { - state.readableListening = true; - state.emittedReadable = false; - state.needReadable = true; - if (!state.reading) { - var self = this; - process.nextTick(function() { - debug('readable nexttick read 0'); - self.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() { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - state.flowing = true; - if (!state.reading) { - debug('resume read 0'); - this.read(0); - } - resume(this, state); - } - return this; -}; - -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - process.nextTick(function() { - resume_(stream, state); - }); - } -} - -function resume_(stream, state) { - state.resumeScheduled = false; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) - stream.read(0); -} - -Readable.prototype.pause = function() { - debug('call pause flowing=%j', this._readableState.flowing); - if (false !== this._readableState.flowing) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - if (state.flowing) { - do { - var chunk = stream.read(); - } while (null !== chunk && state.flowing); - } -} - -// 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() { - debug('wrapped end'); - 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) { - debug('wrapped data'); - 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 (util.isFunction(stream[i]) && util.isUndefined(this[i])) { - 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) { - debug('wrapped _read', 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.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/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index b0caf57d..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,210 +0,0 @@ -// 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'); -if (!util.isUndefined) { - var utilIs = require('core-util-is'); - for (var f in utilIs) { - util[f] = utilIs[f]; - } -} -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 (!util.isNullOrUndefined(data)) - 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); - - 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('prefinish', function() { - if (util.isFunction(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 (!util.isNull(ts.writechunk) && 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 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/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index 1dfca70d..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,460 +0,0 @@ -// 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'); -if (!util.isUndefined) { - var utilIs = require('core-util-is'); - for (var f in utilIs) { - util[f] = utilIs[f]; - } -} -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; - var defaultHwm = options.objectMode ? 16 : 16 * 1024; - this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; - - // 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; - - // when true all writes will be buffered until .uncork() call - this.corked = 0; - - // 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, because 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 = []; - - // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; - - // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - this.prefinished = false; -} - -function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof require('./_stream_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 (!util.isBuffer(chunk) && - !util.isString(chunk) && - !util.isNullOrUndefined(chunk) && - !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 (util.isFunction(encoding)) { - cb = encoding; - encoding = null; - } - - if (util.isBuffer(chunk)) - encoding = 'buffer'; - else if (!encoding) - encoding = state.defaultEncoding; - - if (!util.isFunction(cb)) - cb = function() {}; - - if (state.ended) - writeAfterEnd(this, state, cb); - else if (validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, chunk, encoding, cb); - } - - return ret; -}; - -Writable.prototype.cork = function() { - var state = this._writableState; - - state.corked++; -}; - -Writable.prototype.uncork = function() { - var state = this._writableState; - - if (state.corked) { - state.corked--; - - if (!state.writing && - !state.corked && - !state.finished && - !state.bufferProcessing && - state.buffer.length) - clearBuffer(this, state); - } -}; - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && - state.decodeStrings !== false && - util.isString(chunk)) { - 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 (util.isBuffer(chunk)) - encoding = 'buffer'; - var len = state.objectMode ? 1 : chunk.length; - - state.length += len; - - var ret = state.length < state.highWaterMark; - state.needDrain = !ret; - - if (state.writing || state.corked) - state.buffer.push(new WriteReq(chunk, encoding, cb)); - else - doWrite(stream, state, false, len, chunk, encoding, cb); - - return ret; -} - -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (writev) - stream._writev(chunk, state.onwrite); - else - stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - if (sync) - process.nextTick(function() { - state.pendingcb--; - cb(er); - }); - else { - state.pendingcb--; - cb(er); - } - - 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.corked && - !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); - state.pendingcb--; - cb(); - 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; - - if (stream._writev && state.buffer.length > 1) { - // Fast case, write everything using _writev() - var cbs = []; - for (var c = 0; c < state.buffer.length; c++) - cbs.push(state.buffer[c].callback); - - // count the one we are adding, as well. - // TODO(isaacs) clean this up - state.pendingcb++; - doWrite(stream, state, true, state.length, state.buffer, '', function(err) { - for (var i = 0; i < cbs.length; i++) { - state.pendingcb--; - cbs[i](err); - } - }); - - // Clear buffer - state.buffer = []; - } else { - // Slow case, write chunks one-by-one - 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, false, 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; - } - } - - if (c < state.buffer.length) - state.buffer = state.buffer.slice(c); - else - state.buffer.length = 0; - } - - state.bufferProcessing = false; -} - -Writable.prototype._write = function(chunk, encoding, cb) { - cb(new Error('not implemented')); - -}; - -Writable.prototype._writev = null; - -Writable.prototype.end = function(chunk, encoding, cb) { - var state = this._writableState; - - if (util.isFunction(chunk)) { - cb = chunk; - chunk = null; - encoding = null; - } else if (util.isFunction(encoding)) { - cb = encoding; - encoding = null; - } - - if (!util.isNullOrUndefined(chunk)) - this.write(chunk, encoding); - - // .end() fully uncorks - if (state.corked) { - state.corked = 1; - this.uncork(); - } - - // 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 prefinish(stream, state) { - if (!state.prefinished) { - state.prefinished = true; - stream.emit('prefinish'); - } -} - -function finishMaybe(stream, state) { - var need = needFinish(stream, state); - if (need) { - if (state.pendingcb === 0) { - prefinish(stream, state); - state.finished = true; - stream.emit('finish'); - } else - prefinish(stream, state); - } - 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/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/README.md b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/README.md deleted file mode 100644 index 5a76b414..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# core-util-is - -The `util.is*` functions introduced in Node v0.12. diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/float.patch b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/float.patch deleted file mode 100644 index a06d5c05..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/float.patch +++ /dev/null @@ -1,604 +0,0 @@ -diff --git a/lib/util.js b/lib/util.js -index a03e874..9074e8e 100644 ---- a/lib/util.js -+++ b/lib/util.js -@@ -19,430 +19,6 @@ - // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - // USE OR OTHER DEALINGS IN THE SOFTWARE. - --var formatRegExp = /%[sdj%]/g; --exports.format = function(f) { -- if (!isString(f)) { -- var objects = []; -- for (var i = 0; i < arguments.length; i++) { -- objects.push(inspect(arguments[i])); -- } -- return objects.join(' '); -- } -- -- var i = 1; -- var args = arguments; -- var len = args.length; -- var str = String(f).replace(formatRegExp, function(x) { -- if (x === '%%') return '%'; -- if (i >= len) return x; -- switch (x) { -- case '%s': return String(args[i++]); -- case '%d': return Number(args[i++]); -- case '%j': -- try { -- return JSON.stringify(args[i++]); -- } catch (_) { -- return '[Circular]'; -- } -- default: -- return x; -- } -- }); -- for (var x = args[i]; i < len; x = args[++i]) { -- if (isNull(x) || !isObject(x)) { -- str += ' ' + x; -- } else { -- str += ' ' + inspect(x); -- } -- } -- return str; --}; -- -- --// Mark that a method should not be used. --// Returns a modified function which warns once by default. --// If --no-deprecation is set, then it is a no-op. --exports.deprecate = function(fn, msg) { -- // Allow for deprecating things in the process of starting up. -- if (isUndefined(global.process)) { -- return function() { -- return exports.deprecate(fn, msg).apply(this, arguments); -- }; -- } -- -- if (process.noDeprecation === true) { -- return fn; -- } -- -- var warned = false; -- function deprecated() { -- if (!warned) { -- if (process.throwDeprecation) { -- throw new Error(msg); -- } else if (process.traceDeprecation) { -- console.trace(msg); -- } else { -- console.error(msg); -- } -- warned = true; -- } -- return fn.apply(this, arguments); -- } -- -- return deprecated; --}; -- -- --var debugs = {}; --var debugEnviron; --exports.debuglog = function(set) { -- if (isUndefined(debugEnviron)) -- debugEnviron = process.env.NODE_DEBUG || ''; -- set = set.toUpperCase(); -- if (!debugs[set]) { -- if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { -- var pid = process.pid; -- debugs[set] = function() { -- var msg = exports.format.apply(exports, arguments); -- console.error('%s %d: %s', set, pid, msg); -- }; -- } else { -- debugs[set] = function() {}; -- } -- } -- return debugs[set]; --}; -- -- --/** -- * Echos the value of a value. Trys to print the value out -- * in the best way possible given the different types. -- * -- * @param {Object} obj The object to print out. -- * @param {Object} opts Optional options object that alters the output. -- */ --/* legacy: obj, showHidden, depth, colors*/ --function inspect(obj, opts) { -- // default options -- var ctx = { -- seen: [], -- stylize: stylizeNoColor -- }; -- // legacy... -- if (arguments.length >= 3) ctx.depth = arguments[2]; -- if (arguments.length >= 4) ctx.colors = arguments[3]; -- if (isBoolean(opts)) { -- // legacy... -- ctx.showHidden = opts; -- } else if (opts) { -- // got an "options" object -- exports._extend(ctx, opts); -- } -- // set default options -- if (isUndefined(ctx.showHidden)) ctx.showHidden = false; -- if (isUndefined(ctx.depth)) ctx.depth = 2; -- if (isUndefined(ctx.colors)) ctx.colors = false; -- if (isUndefined(ctx.customInspect)) ctx.customInspect = true; -- if (ctx.colors) ctx.stylize = stylizeWithColor; -- return formatValue(ctx, obj, ctx.depth); --} --exports.inspect = inspect; -- -- --// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics --inspect.colors = { -- 'bold' : [1, 22], -- 'italic' : [3, 23], -- 'underline' : [4, 24], -- 'inverse' : [7, 27], -- 'white' : [37, 39], -- 'grey' : [90, 39], -- 'black' : [30, 39], -- 'blue' : [34, 39], -- 'cyan' : [36, 39], -- 'green' : [32, 39], -- 'magenta' : [35, 39], -- 'red' : [31, 39], -- 'yellow' : [33, 39] --}; -- --// Don't use 'blue' not visible on cmd.exe --inspect.styles = { -- 'special': 'cyan', -- 'number': 'yellow', -- 'boolean': 'yellow', -- 'undefined': 'grey', -- 'null': 'bold', -- 'string': 'green', -- 'date': 'magenta', -- // "name": intentionally not styling -- 'regexp': 'red' --}; -- -- --function stylizeWithColor(str, styleType) { -- var style = inspect.styles[styleType]; -- -- if (style) { -- return '\u001b[' + inspect.colors[style][0] + 'm' + str + -- '\u001b[' + inspect.colors[style][1] + 'm'; -- } else { -- return str; -- } --} -- -- --function stylizeNoColor(str, styleType) { -- return str; --} -- -- --function arrayToHash(array) { -- var hash = {}; -- -- array.forEach(function(val, idx) { -- hash[val] = true; -- }); -- -- return hash; --} -- -- --function formatValue(ctx, value, recurseTimes) { -- // Provide a hook for user-specified inspect functions. -- // Check that value is an object with an inspect function on it -- if (ctx.customInspect && -- value && -- isFunction(value.inspect) && -- // Filter out the util module, it's inspect function is special -- value.inspect !== exports.inspect && -- // Also filter out any prototype objects using the circular check. -- !(value.constructor && value.constructor.prototype === value)) { -- var ret = value.inspect(recurseTimes, ctx); -- if (!isString(ret)) { -- ret = formatValue(ctx, ret, recurseTimes); -- } -- return ret; -- } -- -- // Primitive types cannot have properties -- var primitive = formatPrimitive(ctx, value); -- if (primitive) { -- return primitive; -- } -- -- // Look up the keys of the object. -- var keys = Object.keys(value); -- var visibleKeys = arrayToHash(keys); -- -- if (ctx.showHidden) { -- keys = Object.getOwnPropertyNames(value); -- } -- -- // Some type of object without properties can be shortcutted. -- if (keys.length === 0) { -- if (isFunction(value)) { -- var name = value.name ? ': ' + value.name : ''; -- return ctx.stylize('[Function' + name + ']', 'special'); -- } -- if (isRegExp(value)) { -- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); -- } -- if (isDate(value)) { -- return ctx.stylize(Date.prototype.toString.call(value), 'date'); -- } -- if (isError(value)) { -- return formatError(value); -- } -- } -- -- var base = '', array = false, braces = ['{', '}']; -- -- // Make Array say that they are Array -- if (isArray(value)) { -- array = true; -- braces = ['[', ']']; -- } -- -- // Make functions say that they are functions -- if (isFunction(value)) { -- var n = value.name ? ': ' + value.name : ''; -- base = ' [Function' + n + ']'; -- } -- -- // Make RegExps say that they are RegExps -- if (isRegExp(value)) { -- base = ' ' + RegExp.prototype.toString.call(value); -- } -- -- // Make dates with properties first say the date -- if (isDate(value)) { -- base = ' ' + Date.prototype.toUTCString.call(value); -- } -- -- // Make error with message first say the error -- if (isError(value)) { -- base = ' ' + formatError(value); -- } -- -- if (keys.length === 0 && (!array || value.length == 0)) { -- return braces[0] + base + braces[1]; -- } -- -- if (recurseTimes < 0) { -- if (isRegExp(value)) { -- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); -- } else { -- return ctx.stylize('[Object]', 'special'); -- } -- } -- -- ctx.seen.push(value); -- -- var output; -- if (array) { -- output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); -- } else { -- output = keys.map(function(key) { -- return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); -- }); -- } -- -- ctx.seen.pop(); -- -- return reduceToSingleString(output, base, braces); --} -- -- --function formatPrimitive(ctx, value) { -- if (isUndefined(value)) -- return ctx.stylize('undefined', 'undefined'); -- if (isString(value)) { -- var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') -- .replace(/'/g, "\\'") -- .replace(/\\"/g, '"') + '\''; -- return ctx.stylize(simple, 'string'); -- } -- if (isNumber(value)) { -- // Format -0 as '-0'. Strict equality won't distinguish 0 from -0, -- // so instead we use the fact that 1 / -0 < 0 whereas 1 / 0 > 0 . -- if (value === 0 && 1 / value < 0) -- return ctx.stylize('-0', 'number'); -- return ctx.stylize('' + value, 'number'); -- } -- if (isBoolean(value)) -- return ctx.stylize('' + value, 'boolean'); -- // For some reason typeof null is "object", so special case here. -- if (isNull(value)) -- return ctx.stylize('null', 'null'); --} -- -- --function formatError(value) { -- return '[' + Error.prototype.toString.call(value) + ']'; --} -- -- --function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { -- var output = []; -- for (var i = 0, l = value.length; i < l; ++i) { -- if (hasOwnProperty(value, String(i))) { -- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, -- String(i), true)); -- } else { -- output.push(''); -- } -- } -- keys.forEach(function(key) { -- if (!key.match(/^\d+$/)) { -- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, -- key, true)); -- } -- }); -- return output; --} -- -- --function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { -- var name, str, desc; -- desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; -- if (desc.get) { -- if (desc.set) { -- str = ctx.stylize('[Getter/Setter]', 'special'); -- } else { -- str = ctx.stylize('[Getter]', 'special'); -- } -- } else { -- if (desc.set) { -- str = ctx.stylize('[Setter]', 'special'); -- } -- } -- if (!hasOwnProperty(visibleKeys, key)) { -- name = '[' + key + ']'; -- } -- if (!str) { -- if (ctx.seen.indexOf(desc.value) < 0) { -- if (isNull(recurseTimes)) { -- str = formatValue(ctx, desc.value, null); -- } else { -- str = formatValue(ctx, desc.value, recurseTimes - 1); -- } -- if (str.indexOf('\n') > -1) { -- if (array) { -- str = str.split('\n').map(function(line) { -- return ' ' + line; -- }).join('\n').substr(2); -- } else { -- str = '\n' + str.split('\n').map(function(line) { -- return ' ' + line; -- }).join('\n'); -- } -- } -- } else { -- str = ctx.stylize('[Circular]', 'special'); -- } -- } -- if (isUndefined(name)) { -- if (array && key.match(/^\d+$/)) { -- return str; -- } -- name = JSON.stringify('' + key); -- if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { -- name = name.substr(1, name.length - 2); -- name = ctx.stylize(name, 'name'); -- } else { -- name = name.replace(/'/g, "\\'") -- .replace(/\\"/g, '"') -- .replace(/(^"|"$)/g, "'"); -- name = ctx.stylize(name, 'string'); -- } -- } -- -- return name + ': ' + str; --} -- -- --function reduceToSingleString(output, base, braces) { -- var numLinesEst = 0; -- var length = output.reduce(function(prev, cur) { -- numLinesEst++; -- if (cur.indexOf('\n') >= 0) numLinesEst++; -- return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; -- }, 0); -- -- if (length > 60) { -- return braces[0] + -- (base === '' ? '' : base + '\n ') + -- ' ' + -- output.join(',\n ') + -- ' ' + -- braces[1]; -- } -- -- return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; --} -- -- - // NOTE: These type checking functions intentionally don't use `instanceof` - // because it is fragile and can be easily faked with `Object.create()`. - function isArray(ar) { -@@ -522,166 +98,10 @@ function isPrimitive(arg) { - exports.isPrimitive = isPrimitive; - - function isBuffer(arg) { -- return arg instanceof Buffer; -+ return Buffer.isBuffer(arg); - } - exports.isBuffer = isBuffer; - - function objectToString(o) { - return Object.prototype.toString.call(o); --} -- -- --function pad(n) { -- return n < 10 ? '0' + n.toString(10) : n.toString(10); --} -- -- --var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', -- 'Oct', 'Nov', 'Dec']; -- --// 26 Feb 16:19:34 --function timestamp() { -- var d = new Date(); -- var time = [pad(d.getHours()), -- pad(d.getMinutes()), -- pad(d.getSeconds())].join(':'); -- return [d.getDate(), months[d.getMonth()], time].join(' '); --} -- -- --// log is just a thin wrapper to console.log that prepends a timestamp --exports.log = function() { -- console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); --}; -- -- --/** -- * Inherit the prototype methods from one constructor into another. -- * -- * The Function.prototype.inherits from lang.js rewritten as a standalone -- * function (not on Function.prototype). NOTE: If this file is to be loaded -- * during bootstrapping this function needs to be rewritten using some native -- * functions as prototype setup using normal JavaScript does not work as -- * expected during bootstrapping (see mirror.js in r114903). -- * -- * @param {function} ctor Constructor function which needs to inherit the -- * prototype. -- * @param {function} superCtor Constructor function to inherit prototype from. -- */ --exports.inherits = function(ctor, superCtor) { -- ctor.super_ = superCtor; -- ctor.prototype = Object.create(superCtor.prototype, { -- constructor: { -- value: ctor, -- enumerable: false, -- writable: true, -- configurable: true -- } -- }); --}; -- --exports._extend = function(origin, add) { -- // Don't do anything if add isn't an object -- if (!add || !isObject(add)) return origin; -- -- var keys = Object.keys(add); -- var i = keys.length; -- while (i--) { -- origin[keys[i]] = add[keys[i]]; -- } -- return origin; --}; -- --function hasOwnProperty(obj, prop) { -- return Object.prototype.hasOwnProperty.call(obj, prop); --} -- -- --// Deprecated old stuff. -- --exports.p = exports.deprecate(function() { -- for (var i = 0, len = arguments.length; i < len; ++i) { -- console.error(exports.inspect(arguments[i])); -- } --}, 'util.p: Use console.error() instead'); -- -- --exports.exec = exports.deprecate(function() { -- return require('child_process').exec.apply(this, arguments); --}, 'util.exec is now called `child_process.exec`.'); -- -- --exports.print = exports.deprecate(function() { -- for (var i = 0, len = arguments.length; i < len; ++i) { -- process.stdout.write(String(arguments[i])); -- } --}, 'util.print: Use console.log instead'); -- -- --exports.puts = exports.deprecate(function() { -- for (var i = 0, len = arguments.length; i < len; ++i) { -- process.stdout.write(arguments[i] + '\n'); -- } --}, 'util.puts: Use console.log instead'); -- -- --exports.debug = exports.deprecate(function(x) { -- process.stderr.write('DEBUG: ' + x + '\n'); --}, 'util.debug: Use console.error instead'); -- -- --exports.error = exports.deprecate(function(x) { -- for (var i = 0, len = arguments.length; i < len; ++i) { -- process.stderr.write(arguments[i] + '\n'); -- } --}, 'util.error: Use console.error instead'); -- -- --exports.pump = exports.deprecate(function(readStream, writeStream, callback) { -- var callbackCalled = false; -- -- function call(a, b, c) { -- if (callback && !callbackCalled) { -- callback(a, b, c); -- callbackCalled = true; -- } -- } -- -- readStream.addListener('data', function(chunk) { -- if (writeStream.write(chunk) === false) readStream.pause(); -- }); -- -- writeStream.addListener('drain', function() { -- readStream.resume(); -- }); -- -- readStream.addListener('end', function() { -- writeStream.end(); -- }); -- -- readStream.addListener('close', function() { -- call(); -- }); -- -- readStream.addListener('error', function(err) { -- writeStream.end(); -- call(err); -- }); -- -- writeStream.addListener('error', function(err) { -- readStream.destroy(); -- call(err); -- }); --}, 'util.pump(): Use readableStream.pipe() instead'); -- -- --var uv; --exports._errnoException = function(err, syscall) { -- if (isUndefined(uv)) uv = process.binding('uv'); -- var errname = uv.errname(err); -- var e = new Error(syscall + ' ' + errname); -- e.code = errname; -- e.errno = errname; -- e.syscall = syscall; -- return e; --}; -+} \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/lib/util.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/lib/util.js deleted file mode 100644 index 9074e8eb..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/lib/util.js +++ /dev/null @@ -1,107 +0,0 @@ -// 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. - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -function isBuffer(arg) { - return Buffer.isBuffer(arg); -} -exports.isBuffer = isBuffer; - -function objectToString(o) { - return Object.prototype.toString.call(o); -} \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/package.json b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/package.json deleted file mode 100644 index cb9aa927..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "core-util-is", - "version": "1.0.1", - "description": "The `util.is*` functions introduced in Node v0.12.", - "main": "lib/util.js", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/core-util-is" - }, - "keywords": [ - "util", - "isBuffer", - "isArray", - "isNumber", - "isString", - "isRegExp", - "isThis", - "isThat", - "polyfill" - ], - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/isaacs/core-util-is/issues" - }, - "readme": "# core-util-is\n\nThe `util.is*` functions introduced in Node v0.12.\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/isaacs/core-util-is", - "_id": "core-util-is@1.0.1", - "_from": "core-util-is@~1.0.0" -} diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/util.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/util.js deleted file mode 100644 index 007fa105..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/core-util-is/util.js +++ /dev/null @@ -1,106 +0,0 @@ -// 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. - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return isObject(e) && objectToString(e) === '[object Error]'; -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -function isBuffer(arg) { - return arg instanceof Buffer; -} -exports.isBuffer = isBuffer; - -function objectToString(o) { - return Object.prototype.toString.call(o); -} diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/LICENSE b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/LICENSE deleted file mode 100644 index a3187cc1..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright Joyent, Inc. and other Node contributors. 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/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/README.md b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/README.md deleted file mode 100644 index dc6fccec..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# debuglog - backport of util.debuglog() from node v0.11 - -To facilitate using the `util.debuglog()` function that will be available when -node v0.12 is released now, this is a copy extracted from the source. - -## require('debuglog') - -Return `util.debuglog`, if it exists, otherwise it will return an internal copy -of the implementation from node v0.11. - -## debuglog(section) - -* `section` {String} The section of the program to be debugged -* Returns: {Function} The logging function - -This is used to create a function which conditionally writes to stderr -based on the existence of a `NODE_DEBUG` environment variable. If the -`section` name appears in that environment variable, then the returned -function will be similar to `console.error()`. If not, then the -returned function is a no-op. - -For example: - -```javascript -var debuglog = util.debuglog('foo'); - -var bar = 123; -debuglog('hello from foo [%d]', bar); -``` - -If this program is run with `NODE_DEBUG=foo` in the environment, then -it will output something like: - - FOO 3245: hello from foo [123] - -where `3245` is the process id. If it is not run with that -environment variable set, then it will not print anything. - -You may separate multiple `NODE_DEBUG` environment variables with a -comma. For example, `NODE_DEBUG=fs,net,tls`. diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/debuglog.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/debuglog.js deleted file mode 100644 index da465c29..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/debuglog.js +++ /dev/null @@ -1,22 +0,0 @@ -var util = require('util'); - -module.exports = util.debuglog || debuglog; - -var debugs = {}; -var debugEnviron = process.env.NODE_DEBUG || ''; - -function debuglog(set) { - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = util.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/package.json b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/package.json deleted file mode 100644 index f9c64a99..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "debuglog", - "version": "0.0.2", - "description": "backport of util.debuglog from node v0.11", - "license": "MIT", - "main": "debuglog.js", - "repository": { - "type": "git", - "url": "https://github.com/sam-github/node-debuglog.git" - }, - "author": { - "name": "Sam Roberts", - "email": "sam@strongloop.com" - }, - "engines": { - "node": "*" - }, - "readme": "# debuglog - backport of util.debuglog() from node v0.11\n\nTo facilitate using the `util.debuglog()` function that will be available when\nnode v0.12 is released now, this is a copy extracted from the source.\n\n## require('debuglog')\n\nReturn `util.debuglog`, if it exists, otherwise it will return an internal copy\nof the implementation from node v0.11.\n\n## debuglog(section)\n\n* `section` {String} The section of the program to be debugged\n* Returns: {Function} The logging function\n\nThis is used to create a function which conditionally writes to stderr\nbased on the existence of a `NODE_DEBUG` environment variable. If the\n`section` name appears in that environment variable, then the returned\nfunction will be similar to `console.error()`. If not, then the\nreturned function is a no-op.\n\nFor example:\n\n```javascript\nvar debuglog = util.debuglog('foo');\n\nvar bar = 123;\ndebuglog('hello from foo [%d]', bar);\n```\n\nIf this program is run with `NODE_DEBUG=foo` in the environment, then\nit will output something like:\n\n FOO 3245: hello from foo [123]\n\nwhere `3245` is the process id. If it is not run with that\nenvironment variable set, then it will not print anything.\n\nYou may separate multiple `NODE_DEBUG` environment variables with a\ncomma. For example, `NODE_DEBUG=fs,net,tls`.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/sam-github/node-debuglog/issues" - }, - "homepage": "https://github.com/sam-github/node-debuglog", - "_id": "debuglog@0.0.2", - "dist": { - "shasum": "a0e439ca87738aff3813659190fd30842ffea6f4" - }, - "_from": "debuglog@0.0.2", - "_resolved": "https://registry.npmjs.org/debuglog/-/debuglog-0.0.2.tgz" -} diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/package.json b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/package.json deleted file mode 100644 index 49566cdb..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "readable-stream", - "version": "1.1.10", - "description": "An exploration of a new kind of readable streams for Node.js", - "main": "readable.js", - "dependencies": { - "core-util-is": "~1.0.0", - "debuglog": "0.0.2" - }, - "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": "MIT", - "optionalDependencies": { - "debuglog": "0.0.2" - }, - "readme": "# readable-stream\n\nA new class of streams for Node.js\n\nThis module provides the new Stream base classes introduced in Node\nv0.10, for use in Node v0.8. You can use it to have programs that\nhave to work with node v0.8, while being forward-compatible for v0.10\nand beyond. When you drop support for v0.8, you can remove this\nmodule, and only use the native streams.\n\nThis is almost exactly the same codebase as appears in Node v0.10.\nHowever:\n\n1. The exported object is actually the Readable class. Decorating the\n native `stream` module would be global pollution.\n2. In v0.10, you can safely use `base64` as an argument to\n `setEncoding` in Readable streams. However, in v0.8, the\n StringDecoder class has no `end()` method, which is problematic for\n Base64. So, don't use that, because it'll break and be weird.\n\nOther than that, the API is the same as `require('stream')` in v0.10,\nso the API docs are reproduced below.\n\n----------\n\n Stability: 2 - Unstable\n\nA stream is an abstract interface implemented by various objects in\nNode. For example a request to an HTTP server is a stream, as is\nstdout. Streams are readable, writable, or both. All streams are\ninstances of [EventEmitter][]\n\nYou can load the Stream base classes by doing `require('stream')`.\nThere are base classes provided for Readable streams, Writable\nstreams, Duplex streams, and Transform streams.\n\n## Compatibility\n\nIn earlier versions of Node, the Readable stream interface was\nsimpler, but also less powerful and less useful.\n\n* Rather than waiting for you to call the `read()` method, `'data'`\n events would start emitting immediately. If you needed to do some\n I/O to decide how to handle data, then you had to store the chunks\n in some kind of buffer so that they would not be lost.\n* The `pause()` method was advisory, rather than guaranteed. This\n meant that you still had to be prepared to receive `'data'` events\n even when the stream was in a paused state.\n\nIn Node v0.10, the Readable class described below was added. For\nbackwards compatibility with older Node programs, Readable streams\nswitch into \"old mode\" when a `'data'` event handler is added, or when\nthe `pause()` or `resume()` methods are called. The effect is that,\neven if you are not using the new `read()` method and `'readable'`\nevent, you no longer have to worry about losing `'data'` chunks.\n\nMost programs will continue to function normally. However, this\nintroduces an edge case in the following conditions:\n\n* No `'data'` event handler is added.\n* The `pause()` and `resume()` methods are never called.\n\nFor example, consider the following code:\n\n```javascript\n// WARNING! BROKEN!\nnet.createServer(function(socket) {\n\n // we add an 'end' method, but never consume the data\n socket.on('end', function() {\n // It will never get here.\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n}).listen(1337);\n```\n\nIn versions of node prior to v0.10, the incoming message data would be\nsimply discarded. However, in Node v0.10 and beyond, the socket will\nremain paused forever.\n\nThe workaround in this situation is to call the `resume()` method to\ntrigger \"old mode\" behavior:\n\n```javascript\n// Workaround\nnet.createServer(function(socket) {\n\n socket.on('end', function() {\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n // start the flow of data, discarding it.\n socket.resume();\n\n}).listen(1337);\n```\n\nIn addition to new Readable streams switching into old-mode, pre-v0.10\nstyle streams can be wrapped in a Readable class using the `wrap()`\nmethod.\n\n## Class: stream.Readable\n\n\n\nA `Readable Stream` has the following methods, members, and events.\n\nNote that `stream.Readable` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nmethod. (See below.)\n\n### new stream.Readable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} The maximum number of bytes to store in\n the internal buffer before ceasing to read from the underlying\n resource. Default=16kb\n * `encoding` {String} If specified, then buffers will be decoded to\n strings using the specified encoding. Default=null\n * `objectMode` {Boolean} Whether this stream should behave\n as a stream of objects. Meaning that stream.read(n) returns\n a single value instead of a Buffer of size n\n\nIn classes that extend the Readable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### readable.\\_read(size)\n\n* `size` {Number} Number of bytes to read asynchronously\n\nNote: **This function should NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Readable\nclass methods only.\n\nAll Readable stream implementations must provide a `_read` method\nto fetch data from the underlying resource.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\nWhen data is available, put it into the read queue by calling\n`readable.push(chunk)`. If `push` returns false, then you should stop\nreading. When `_read` is called again, you should start pushing more\ndata.\n\nThe `size` argument is advisory. Implementations where a \"read\" is a\nsingle call that returns data can use this to know how much data to\nfetch. Implementations where that is not relevant, such as TCP or\nTLS, may ignore this argument, and simply provide data whenever it\nbecomes available. There is no need, for example to \"wait\" until\n`size` bytes are available before calling `stream.push(chunk)`.\n\n### readable.push(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to push into the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nNote: **This function should be called by Readable implementors, NOT\nby consumers of Readable subclasses.** The `_read()` function will not\nbe called again until at least one `push(chunk)` call is made. If no\ndata is available, then you MAY call `push('')` (an empty string) to\nallow a future `_read` call, without adding any data to the queue.\n\nThe `Readable` class works by putting data into a read queue to be\npulled out later by calling the `read()` method when the `'readable'`\nevent fires.\n\nThe `push()` method will explicitly insert some data into the read\nqueue. If it is called with `null` then it will signal the end of the\ndata.\n\nIn some cases, you may be wrapping a lower-level source which has some\nsort of pause/resume mechanism, and a data callback. In those cases,\nyou could wrap the low-level source object by doing something like\nthis:\n\n```javascript\n// source is an object with readStop() and readStart() methods,\n// and an `ondata` member that gets called when it has data, and\n// an `onend` member that gets called when the data is over.\n\nvar stream = new Readable();\n\nsource.ondata = function(chunk) {\n // if push() returns false, then we need to stop reading from source\n if (!stream.push(chunk))\n source.readStop();\n};\n\nsource.onend = function() {\n stream.push(null);\n};\n\n// _read will be called when the stream wants to pull more data in\n// the advisory size argument is ignored in this case.\nstream._read = function(n) {\n source.readStart();\n};\n```\n\n### readable.unshift(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nThis is the corollary of `readable.push(chunk)`. Rather than putting\nthe data at the *end* of the read queue, it puts it at the *front* of\nthe read queue.\n\nThis is useful in certain use-cases where a stream is being consumed\nby a parser, which needs to \"un-consume\" some data that it has\noptimistically pulled out of the source.\n\n```javascript\n// A parser for a simple data protocol.\n// The \"header\" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// Note: This can be done more simply as a Transform stream. See below.\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Readable.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\nvar parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n### readable.wrap(stream)\n\n* `stream` {Stream} An \"old style\" readable stream\n\nIf you are using an older Node library that emits `'data'` events and\nhas a `pause()` method that is advisory only, then you can use the\n`wrap()` method to create a Readable stream that uses the old stream\nas its data source.\n\nFor example:\n\n```javascript\nvar OldReader = require('./old-api-module.js').OldReader;\nvar oreader = new OldReader;\nvar Readable = require('stream').Readable;\nvar myReader = new Readable().wrap(oreader);\n\nmyReader.on('readable', function() {\n myReader.read(); // etc.\n});\n```\n\n### Event: 'readable'\n\nWhen there is data ready to be consumed, this event will fire.\n\nWhen this event emits, call the `read()` method to consume the data.\n\n### Event: 'end'\n\nEmitted when the stream has received an EOF (FIN in TCP terminology).\nIndicates that no more `'data'` events will happen. If the stream is\nalso writable, it may be possible to continue writing.\n\n### Event: 'data'\n\nThe `'data'` event emits either a `Buffer` (by default) or a string if\n`setEncoding()` was used.\n\nNote that adding a `'data'` event listener will switch the Readable\nstream into \"old mode\", where data is emitted as soon as it is\navailable, rather than waiting for you to call `read()` to consume it.\n\n### Event: 'error'\n\nEmitted if there was an error receiving data.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### readable.setEncoding(encoding)\n\nMakes the `'data'` event emit a string instead of a `Buffer`. `encoding`\ncan be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`.\n\nThe encoding can also be set by specifying an `encoding` field to the\nconstructor.\n\n### readable.read([size])\n\n* `size` {Number | null} Optional number of bytes to read.\n* Return: {Buffer | String | null}\n\nNote: **This function SHOULD be called by Readable stream users.**\n\nCall this method to consume data once the `'readable'` event is\nemitted.\n\nThe `size` argument will set a minimum number of bytes that you are\ninterested in. If not set, then the entire content of the internal\nbuffer is returned.\n\nIf there is no data to consume, or if there are fewer bytes in the\ninternal buffer than the `size` argument, then `null` is returned, and\na future `'readable'` event will be emitted when more is available.\n\nCalling `stream.read(0)` will always return `null`, and will trigger a\nrefresh of the internal buffer, but otherwise be a no-op.\n\n### readable.pipe(destination, [options])\n\n* `destination` {Writable Stream}\n* `options` {Object} Optional\n * `end` {Boolean} Default=true\n\nConnects this readable stream to `destination` WriteStream. Incoming\ndata on this stream gets written to `destination`. Properly manages\nback-pressure so that a slow destination will not be overwhelmed by a\nfast readable stream.\n\nThis function returns the `destination` stream.\n\nFor example, emulating the Unix `cat` command:\n\n process.stdin.pipe(process.stdout);\n\nBy default `end()` is called on the destination when the source stream\nemits `end`, so that `destination` is no longer writable. Pass `{ end:\nfalse }` as `options` to keep the destination stream open.\n\nThis keeps `writer` open so that \"Goodbye\" can be written at the\nend.\n\n reader.pipe(writer, { end: false });\n reader.on(\"end\", function() {\n writer.end(\"Goodbye\\n\");\n });\n\nNote that `process.stderr` and `process.stdout` are never closed until\nthe process exits, regardless of the specified options.\n\n### readable.unpipe([destination])\n\n* `destination` {Writable Stream} Optional\n\nUndo a previously established `pipe()`. If no destination is\nprovided, then all previously established pipes are removed.\n\n### readable.pause()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nCeases the flow of data. No `'data'` events are emitted while the\nstream is in a paused state.\n\n### readable.resume()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nResumes the incoming `'data'` events after a `pause()`.\n\n\n## Class: stream.Writable\n\n\n\nA `Writable` Stream has the following methods, members, and events.\n\nNote that `stream.Writable` is an abstract class designed to be\nextended with an underlying implementation of the\n`_write(chunk, encoding, cb)` method. (See below.)\n\n### new stream.Writable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} Buffer level when `write()` starts\n returning false. Default=16kb\n * `decodeStrings` {Boolean} Whether or not to decode strings into\n Buffers before passing them to `_write()`. Default=true\n\nIn classes that extend the Writable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### writable.\\_write(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be written. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. Ignore chunk is a buffer. Note that chunk will\n **always** be a buffer unless the `decodeStrings` option is\n explicitly set to `false`.\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nAll Writable stream implementations must provide a `_write` method to\nsend data to the underlying resource.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Writable\nclass methods only.\n\nCall the callback using the standard `callback(error)` pattern to\nsignal that the write completed successfully or with an error.\n\nIf the `decodeStrings` flag is set in the constructor options, then\n`chunk` may be a string rather than a Buffer, and `encoding` will\nindicate the sort of string that it is. This is to support\nimplementations that have an optimized handling for certain string\ndata encodings. If you do not explicitly set the `decodeStrings`\noption to `false`, then you can safely ignore the `encoding` argument,\nand assume that `chunk` will always be a Buffer.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n\n### writable.write(chunk, [encoding], [callback])\n\n* `chunk` {Buffer | String} Data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when this chunk is\n successfully written.\n* Returns {Boolean}\n\nWrites `chunk` to the stream. Returns `true` if the data has been\nflushed to the underlying resource. Returns `false` to indicate that\nthe buffer is full, and the data will be sent out in the future. The\n`'drain'` event will indicate when the buffer is empty again.\n\nThe specifics of when `write()` will return false, is determined by\nthe `highWaterMark` option provided to the constructor.\n\n### writable.end([chunk], [encoding], [callback])\n\n* `chunk` {Buffer | String} Optional final data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when the final chunk is\n successfully written.\n\nCall this method to signal the end of the data being written to the\nstream.\n\n### Event: 'drain'\n\nEmitted when the stream's write queue empties and it's safe to write\nwithout buffering again. Listen for it when `stream.write()` returns\n`false`.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### Event: 'finish'\n\nWhen `end()` is called and there are no more chunks to write, this\nevent is emitted.\n\n### Event: 'pipe'\n\n* `source` {Readable Stream}\n\nEmitted when the stream is passed to a readable stream's pipe method.\n\n### Event 'unpipe'\n\n* `source` {Readable Stream}\n\nEmitted when a previously established `pipe()` is removed using the\nsource Readable stream's `unpipe()` method.\n\n## Class: stream.Duplex\n\n\n\nA \"duplex\" stream is one that is both Readable and Writable, such as a\nTCP socket connection.\n\nNote that `stream.Duplex` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nand `_write(chunk, encoding, callback)` methods as you would with a Readable or\nWritable stream class.\n\nSince JavaScript doesn't have multiple prototypal inheritance, this\nclass prototypally inherits from Readable, and then parasitically from\nWritable. It is thus up to the user to implement both the lowlevel\n`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method\non extension duplex classes.\n\n### new stream.Duplex(options)\n\n* `options` {Object} Passed to both Writable and Readable\n constructors. Also has the following fields:\n * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then\n the stream will automatically end the readable side when the\n writable side ends and vice versa.\n\nIn classes that extend the Duplex class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n## Class: stream.Transform\n\nA \"transform\" stream is a duplex stream where the output is causally\nconnected in some way to the input, such as a zlib stream or a crypto\nstream.\n\nThere is no requirement that the output be the same size as the input,\nthe same number of chunks, or arrive at the same time. For example, a\nHash stream will only ever have a single chunk of output which is\nprovided when the input is ended. A zlib stream will either produce\nmuch smaller or much larger than its input.\n\nRather than implement the `_read()` and `_write()` methods, Transform\nclasses must implement the `_transform()` method, and may optionally\nalso implement the `_flush()` method. (See below.)\n\n### new stream.Transform([options])\n\n* `options` {Object} Passed to both Writable and Readable\n constructors.\n\nIn classes that extend the Transform class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### transform.\\_transform(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be transformed. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. (Ignore if `decodeStrings` chunk is a buffer.)\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Transform\nclass methods only.\n\nAll Transform stream implementations must provide a `_transform`\nmethod to accept input and produce output.\n\n`_transform` should do whatever has to be done in this specific\nTransform class, to handle the bytes being written, and pass them off\nto the readable portion of the interface. Do asynchronous I/O,\nprocess things, and so on.\n\nCall `transform.push(outputChunk)` 0 or more times to generate output\nfrom this input chunk, depending on how much data you want to output\nas a result of this chunk.\n\nCall the callback function only when the current chunk is completely\nconsumed. Note that there may or may not be output as a result of any\nparticular input chunk.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### transform.\\_flush(callback)\n\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done flushing any remaining data.\n\nNote: **This function MUST NOT be called directly.** It MAY be implemented\nby child classes, and if so, will be called by the internal Transform\nclass methods only.\n\nIn some cases, your transform operation may need to emit a bit more\ndata at the end of the stream. For example, a `Zlib` compression\nstream will store up some internal state so that it can optimally\ncompress the output. At the end, however, it needs to do the best it\ncan with what is left, so that the data will be complete.\n\nIn those cases, you can implement a `_flush` method, which will be\ncalled at the very end, after all the written data is consumed, but\nbefore emitting `end` to signal the end of the readable side. Just\nlike with `_transform`, call `transform.push(chunk)` zero or more\ntimes, as appropriate, and call `callback` when the flush operation is\ncomplete.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### Example: `SimpleProtocol` parser\n\nThe example above of a simple protocol parser can be implemented much\nmore simply by using the higher level `Transform` stream class.\n\nIn this example, rather than providing the input as an argument, it\nwould be piped into the parser, which is a more idiomatic Node stream\napproach.\n\n```javascript\nfunction SimpleProtocol(options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Transform.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Transform.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._transform = function(chunk, encoding, done) {\n if (!this._inBody) {\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n\n // now, because we got some extra data, emit this first.\n this.push(b);\n }\n } else {\n // from there on, just provide the data to our consumer as-is.\n this.push(b);\n }\n done();\n};\n\nvar parser = new SimpleProtocol();\nsource.pipe(parser)\n\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n\n## Class: stream.PassThrough\n\nThis is a trivial implementation of a `Transform` stream that simply\npasses the input bytes across to the output. Its purpose is mainly\nfor examples and testing, but there are occasionally use cases where\nit can come in handy.\n\n\n[EventEmitter]: events.html#events_class_events_eventemitter\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/readable-stream/issues" - }, - "homepage": "https://github.com/isaacs/readable-stream", - "_id": "readable-stream@1.1.10", - "_from": "readable-stream@~1.1.9" -} diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/passthrough.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/passthrough.js deleted file mode 100644 index 27e8d8a5..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/readable.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/readable.js deleted file mode 100644 index 09b8bf50..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,7 +0,0 @@ -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = require('stream'); -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/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/transform.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/transform.js deleted file mode 100644 index 5d482f07..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/writable.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/writable.js deleted file mode 100644 index e1e9efdf..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/writable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/.npmignore b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/.npmignore deleted file mode 100644 index 07e6e472..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/README.md b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/README.md deleted file mode 100644 index 8d6a1928..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# stream-counter - -Keep track of how many bytes have been written to a stream. - -## Usage - -```js -var StreamCounter = require('stream-counter'); -var counter = new StreamCounter(); -counter.on('progress', function() { - console.log("progress", counter.bytes); -}); -fs.createReadStream('foo.txt').pipe(counter); -``` diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/index.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/index.js deleted file mode 100644 index c490c2db..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/index.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = ByteCounter; - -var Writable = require('readable-stream').Writable; -var util = require('util'); - -util.inherits(ByteCounter, Writable); -function ByteCounter(options) { - Writable.call(this, options); - this.bytes = 0; -} - -ByteCounter.prototype._write = function(chunk, encoding, cb) { - this.bytes += chunk.length; - this.emit('progress'); - cb(); -}; diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/package.json b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/package.json deleted file mode 100644 index 1453933a..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "stream-counter", - "version": "0.2.0", - "description": "keeps track of how many bytes have been written to a stream", - "main": "index.js", - "scripts": { - "test": "node test/test.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/superjoe30/node-stream-counter.git" - }, - "author": { - "name": "Andrew Kelley", - "email": "superjoe30@gmail.com" - }, - "license": "BSD", - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "readable-stream": "~1.1.8" - }, - "readme": "# stream-counter\n\nKeep track of how many bytes have been written to a stream.\n\n## Usage\n\n```js\nvar StreamCounter = require('stream-counter');\nvar counter = new StreamCounter();\ncounter.on('progress', function() {\n console.log(\"progress\", counter.bytes);\n});\nfs.createReadStream('foo.txt').pipe(counter);\n```\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/superjoe30/node-stream-counter/issues" - }, - "homepage": "https://github.com/superjoe30/node-stream-counter", - "_id": "stream-counter@0.2.0", - "_from": "stream-counter@~0.2.0" -} diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/test/test.js b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/test/test.js deleted file mode 100644 index 0da95660..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/test/test.js +++ /dev/null @@ -1,20 +0,0 @@ -var ByteCounter = require('../'); -var fs = require('fs'); -var path = require('path'); -var assert = require('assert'); - -var counter = new ByteCounter(); -var remainingTests = 2; -counter.once('progress', function() { - assert.strictEqual(counter.bytes, 5); - remainingTests -= 1; -}); -var is = fs.createReadStream(path.join(__dirname, 'test.txt')); -is.pipe(counter); -is.on('end', function() { - remainingTests -= 1; - assert.strictEqual(counter.bytes, 5); -}); -process.on('exit', function() { - assert.strictEqual(remainingTests, 0); -}); diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/test/test.txt b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/test/test.txt deleted file mode 100644 index 81c545ef..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/stream-counter/test/test.txt +++ /dev/null @@ -1 +0,0 @@ -1234 diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/package.json b/node_modules/express/node_modules/connect/node_modules/multiparty/package.json deleted file mode 100644 index a1d429c7..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "multiparty", - "version": "2.2.0", - "description": "multipart/form-data parser which supports streaming", - "repository": { - "type": "git", - "url": "git@github.com:superjoe30/node-multiparty.git" - }, - "keywords": [ - "file", - "upload", - "formidable", - "stream", - "s3" - ], - "devDependencies": { - "findit": "0.1.1", - "hashish": "0.0.4", - "mocha": "~1.8.2", - "request": "~2.16.6", - "mkdirp": "~0.3.5", - "superagent": "~0.14.1" - }, - "scripts": { - "test": "ulimit -n 500 && mocha --timeout 4000 --reporter spec --recursive test/test.js" - }, - "engines": { - "node": ">=0.8.0" - }, - "license": "MIT", - "dependencies": { - "readable-stream": "~1.1.9", - "stream-counter": "~0.2.0" - }, - "readme": "[![Build Status](https://travis-ci.org/superjoe30/node-multiparty.png?branch=master)](https://travis-ci.org/superjoe30/node-multiparty)\n# multiparty\n\nParse http requests with content-type `multipart/form-data`, also known as file uploads.\n\nSee also [busboy](https://github.com/mscdex/busboy) - a\n[faster](https://github.com/mscdex/dicer/wiki/Benchmarks) alternative\nwhich may be worth looking into.\n\n### Why the fork?\n\n * This module uses the Node.js v0.10 streams properly, *even in Node.js v0.8*\n * It will not create a temp file for you unless you want it to.\n * Counts bytes and does math to help you figure out the `Content-Length` of\n each part.\n * You can easily stream uploads to s3 with\n [knox](https://github.com/LearnBoost/knox), for [example](examples/s3.js).\n * Less bugs. This code is simpler, has all deprecated functionality removed,\n has cleaner tests, and does not try to do anything beyond multipart stream\n parsing.\n\n## Installation\n\n```\nnpm install multiparty\n```\n\n## Usage\n\n * See [examples](examples).\n\nParse an incoming `multipart/form-data` request.\n\n```js\nvar multiparty = require('multiparty')\n , http = require('http')\n , util = require('util')\n\nhttp.createServer(function(req, res) {\n if (req.url === '/upload' && req.method === 'POST') {\n // parse a file upload\n var form = new multiparty.Form();\n\n form.parse(req, function(err, fields, files) {\n res.writeHead(200, {'content-type': 'text/plain'});\n res.write('received upload:\\n\\n');\n res.end(util.inspect({fields: fields, files: files}));\n });\n\n return;\n }\n\n // show a file upload form\n res.writeHead(200, {'content-type': 'text/html'});\n res.end(\n '
    '+\n '
    '+\n '
    '+\n ''+\n '
    '\n );\n}).listen(8080);\n```\n\n## API\n\n### multiparty.Form\n```js\nvar form = new multiparty.Form(options)\n```\nCreates a new form. Options:\n\n * `encoding` - sets encoding for the incoming form fields. Defaults to `utf8`.\n * `maxFieldSize` - Limits the amount of memory a field (not a file) can\n allocate in bytes. If this value is exceeded, an `error` event is emitted.\n The default size is 2MB.\n * `maxFields` - Limits the number of fields that will be parsed before\n emitting an `error` event. A file counts as a field in this case.\n Defaults to 1000.\n * `autoFields` - Enables `field` events. This is automatically set to `true`\n if you add a `field` listener.\n * `autoFiles` - Enables `file` events. This is automatically set to `true`\n if you add a `file` listener.\n * `uploadDir` - Only relevant when `autoFiles` is `true`. The directory for\n placing file uploads in. You can move them later using `fs.rename()`.\n Defaults to `os.tmpDir()`.\n * `hash` - Only relevant when `autoFiles` is `true`. If you want checksums\n calculated for incoming files, set this to either `sha1` or `md5`.\n Defaults to off.\n\n#### form.parse(request, [cb])\n\nParses an incoming node.js `request` containing form data. If `cb` is\nprovided, `autoFields` and `autoFiles` are set to `true` and all fields and\nfiles are collected and passed to the callback:\n\n```js\nform.parse(req, function(err, fieldsObject, filesObject, fieldsList, filesList) {\n // ...\n});\n```\n\nIt is often convenient to access a field or file by name. In this situation,\nuse `fieldsObject` or `filesObject`. However sometimes, as in the case of a\n`` the multipart stream will contain\nmultiple files of the same input name, and you are interested in all of them.\nIn this case, use `filesList`.\n\nAnother example is when you do not care what the field name of a file is; you\nare merely interested in a single upload. In this case, set `maxFields` to 1\n(assuming no other fields expected besides the file) and use `filesList[0]`.\n\n#### form.bytesReceived\n\nThe amount of bytes received for this form so far.\n\n#### form.bytesExpected\n\nThe expected number of bytes in this form.\n\n### Events\n\n#### 'error' (err)\n\nYou definitely want to handle this event. If not your server *will* crash when\nusers submit bogus multipart requests!\n\n#### 'part' (part)\n\nEmitted when a part is encountered in the request. `part` is a\n`ReadableStream`. It also has the following properties:\n\n * `headers` - the headers for this part. For example, you may be interested\n in `content-type`.\n * `name` - the field name for this part\n * `filename` - only if the part is an incoming file\n * `byteOffset` - the byte offset of this part in the request body\n * `byteCount` - assuming that this is the last part in the request,\n this is the size of this part in bytes. You could use this, for\n example, to set the `Content-Length` header if uploading to S3.\n If the part had a `Content-Length` header then that value is used\n here instead.\n\n#### 'aborted'\n\nEmitted when the request is aborted. This event will be followed shortly\nby an `error` event. In practice you do not need to handle this event.\n\n#### 'progress' (bytesReceived, bytesExpected)\n\n#### 'close'\n\nEmitted after all parts have been parsed and emitted. Not emitted if an `error`\nevent is emitted. This is typically when you would send your response.\n\n#### 'file' (name, file)\n\n**By default multiparty will not touch your hard drive.** But if you add this\nlistener, multiparty automatically sets `form.autoFiles` to `true` and will\nstream uploads to disk for you. \n\n * `name` - the field name for this file\n * `file` - an object with these properties:\n - `fieldName` - same as `name` - the field name for this file\n - `originalFilename` - the filename that the user reports for the file\n - `path` - the absolute path of the uploaded file on disk\n - `headers` - the HTTP headers that were sent along with this file\n - `size` - size of the file in bytes\n\nIf you set the `form.hash` option, then `file` will also contain a `hash`\nproperty which is the checksum of the file.\n\n#### 'field' (name, value)\n\n * `name` - field name\n * `value` - string field value\n\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/superjoe30/node-multiparty/issues" - }, - "homepage": "https://github.com/superjoe30/node-multiparty", - "_id": "multiparty@2.2.0", - "dist": { - "shasum": "6f771955f8cffe3d08937a9592db04e1573bfb34" - }, - "_from": "multiparty@2.2.0", - "_resolved": "https://registry.npmjs.org/multiparty/-/multiparty-2.2.0.tgz" -} diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/bench-multipart-parser.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/bench-multipart-parser.js deleted file mode 100644 index ee5dbad4..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/bench-multipart-parser.js +++ /dev/null @@ -1,76 +0,0 @@ -var assert = require('assert') - , Form = require('../').Form - , boundary = '-----------------------------168072824752491622650073' - , mb = 100 - , buffer = createMultipartBuffer(boundary, mb * 1024 * 1024) - -var callbacks = { - partBegin: -1, - partEnd: -1, - headerField: -1, - headerValue: -1, - partData: -1, - end: -1, -}; - -var form = new Form({ boundary: boundary }); - -hijack('onParseHeaderField', function() { - callbacks.headerField++; -}); - -hijack('onParseHeaderValue', function() { - callbacks.headerValue++; -}); - -hijack('onParsePartBegin', function() { - callbacks.partBegin++; -}); - -hijack('onParsePartData', function() { - callbacks.partData++; -}); - -hijack('onParsePartEnd', function() { - callbacks.partEnd++; -}); - -form.on('finish', function() { - callbacks.end++; -}); - -var start = new Date(); -form.write(buffer, function(err) { - var duration = new Date() - start; - assert.ifError(err); - var mbPerSec = (mb / (duration / 1000)).toFixed(2); - console.log(mbPerSec+' mb/sec'); -}); - -process.on('exit', function() { - for (var k in callbacks) { - assert.equal(0, callbacks[k], k+' count off by '+callbacks[k]); - } -}); - -function createMultipartBuffer(boundary, size) { - var head = - '--'+boundary+'\r\n' + - 'content-disposition: form-data; name="field1"\r\n' + - '\r\n' - , tail = '\r\n--'+boundary+'--\r\n' - , buffer = new Buffer(size); - - buffer.write(head, 'ascii', 0); - buffer.write(tail, 'ascii', buffer.length - tail.length); - return buffer; -} - -function hijack(name, fn) { - var oldFn = form[name]; - form[name] = function() { - fn(); - return oldFn.apply(this, arguments); - }; -} - diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/beta-sticker-1.png b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/beta-sticker-1.png deleted file mode 100644 index 20b1a7f177927900e120c24f97d9514d3325873f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1660 zcmV-?27~#DP)3JV+!|TB%7InihJI zi%oiz5`4wPD(5TE#Clfmyz`#@W}LZ>>+E@k7CP{;vvaq*zx`hGeT&flY)Jpowfx+# zF#k`0B<>n%i|hRykUvy7X`3KSRI;Na0P)F={!qZAZGfn#s5xQh>_6;*UJByn#3z8; zG&CW=u!m}>XtDJ5^&Lz}N!jo9dR0E3PxAZM?>|01e)rh1V|QTc0daHUp~B#VJ|+c$ z;XyEjuBD}APenz=$*8EP!zz_ZPwq%T_@l?;Sy@U2uTeogKh9w7xlft=0P-+D;F|CAOxNsr& z`0?ZCqobn_OVT=js7E~Dx~$^j;{27BmEZ2&yJwd<{w80N12M-XFc&Xg%q=Y~?bYdY zN&Lft0f^SZ!or>{C@3g>^5ltWXlTgBMW0XZPildwh`-d<*2Xt9G@K6=Mg+yr!RK^& zd3iZzvw2{Ce%{GNpPz%;;6u!BbRdxv6BDh>XF~NCr8WNi!Gj0i6c!eK1gA?N%OI=N z*@-`?1R<_%ZEf8XA0J;AibjHIPri;vdU|?!Wo2awOe3&0sYL<_Rt`kMyt=yju_I%p$sD z`kl=G0ewW)@i_mv3EjOtMdtIfR`koyQ}ADh5N_YTed!cN!)Zv;$irT**FVQD#8H9g zEJ}JWo5}IBmhVyTjWsei^kRN0XkrrG{B9WOqasj7)-H4ow3Bym52`qt zi;9k9qM}za&N@qBK25$TUa5SX`58OVQ%hB65t z9_PADXnDzj%4>4a-N8u_jHtW`MAn8XZ*FexzEWu4F-@RyLpwRocwrZ+f4vYDANT|r zUiy^y5eEFAsUJO`m56=-v%UM~SLDCUk9Z$?`0(MBXg}lg5BB&Sr%#{GICJKVk-Y`f zI*8BK^2{6RxqPj@zP|4I_3PuX^e4^Qc;j{PKw6qTqhV(@X|>u!48v|9a`dN#vD@vB zp}2bumKLcj(bB}N;&xiL^SYsixeApaayT5wX0zcNAg9xb+-^6~7y}jMnNY^?@bFKv zVl7bKs%3eI)Iw8JQ1ngUVCbY;S>d$fmYYn} zefno-XPup$ohHzjF*`f^835ZI9v)7hu*NVH_AC5AwOWmfFh#RjtyT+E5of_vRtjU| zY9SAMrdpxnL|k9x85tQ_0yPgpaW#;ipP!bLl(Z9~FrY2$SET$@fSQ?^F;`VpogEt+ z`-6kwwc{0)ut=f%^s*icZfI?9Z@&q<^>|uZT4F*%!cGjsw1i=xQV2i+ti8X#|BI56 zk}qYNVZP(yVEn<_Aby|G(4?uOMHS9fkyx6WoA=k$)HFcdy&IblYYkv=s;~?U3|wt% zYr75FU8E1UbK>AyA>UR&q855X!$^y(2r4_ERVst%(?Ysffb2UlIy$;U-`+*d;^4%| z`Hfe!b%fg6t2vGFVBu7BoC~lv+QoIPYl39x52bTeYPWea@?Z>3!vXn%^!7d_nC*Ta zQUX)U3Uz)f^2ok~__q39^fX`4Bn9V}WI+C>`9Acw00RIQn|MJlIvG3w0000C3%>5t zidr%inNpJrrOWk}o?bo`LL3TPGX8LmGr|Nex)~wfXj5t5$CAq--YK`!ZrA66XG4Cp zNAorG(h%OxqAiuau^-NH&_!(J^LR0~)=HZ(o`*BhTmP2vf46?}{IFN8_QblI zaR`~MHq*UKQ*|Hoq3fAlfBP>300000000000000000000z<=}(t;CCo04M+egQt(w diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/blank.gif b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/blank.gif deleted file mode 100755 index 75b945d2553848b8b6f41fe5e24599c0687b8472..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49 zcmZ?wbhEHbWMp7unE0RJ|Ns9C3=9Vj8~~DvKUo+V7?>DzfNY>Fh|Ltj$Y2csQN9XW diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/funkyfilename.txt b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/funkyfilename.txt deleted file mode 100644 index e7a4785e..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/funkyfilename.txt +++ /dev/null @@ -1 +0,0 @@ -I am a text file with a funky name! diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/menu_separator.png b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/menu_separator.png deleted file mode 100644 index 1c16a71ed41bb17dabbf11eeecc76f3ca03d3f24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 931 zcmaJ=&u-H&9L|6Pnly1_aI&&1P3)vyR;ytuO~)cgRkamVTp&%{HtHN_iA&QS;e-U- zd5OKiBqk0Vcm-}q+!2BY!0wuk10|AU|E%x(et-R@-FmpQeRo??lpXij>4^QBSi3jn z|M`dW_hP%ln|T35jm!Y8(R8C2hEg9b|psA#Yhz#$%-Nz4mwc*Qk0a^)z{ zM0j>c8oeapQOYP-ri`P_vA~UbD{iV?FpJ7So=J zv7UUR7vf3WcAa`J|2jDR{`=RvpM!z&`qQJW8@tM_v#pO$-hO^2pN-pWIcE=Ey!r!8 CR~}#h diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/pf1y5.png b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/pf1y5.png deleted file mode 100644 index 44d601759608a9f9de35e3d2debad76116897e15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768323 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 z 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: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
    fyZ#7vEFd$_C?P_lx;ReGq~VGCaHFv}ZuKOr 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%0AHxU@#s5 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

    D_5Rvt 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 z%0D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 yy?$nH{FNZnWB(#H%$8%^fzN*3$@@JMhp=6xQb& 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≷j2+MIC@@&iB$gJ?;Dy@@#@WMrl7V}+1!%?MT< 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

    0;yIH6{G8 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 z%0A7)M@-H|2+LEwD!Vqg{P|sW@s#WkA|c_U4@mG$)ljhEd)aySCztMM4aXq_xiY6E zW3~EBi`0xA3>69VH9j<6g0S@Un%qWgYRsdIR76TSFQ=?wfEj_tZw!T#jftQhqqis` zLZ7wlUNz17(HblX4)Zsgs}F9>vf2T*7$A=dze6~vpr?w+_G0Fxa}RsFjp6Me9~qPy z6VF_Y^}hLx!lB;;5Z_48hBMZyFSL}%iBZFd*$6MXE>{~3O-h-5FS-DfFR|d@mV}s% z5O?#udL2e-PFEGw$$rQGTo7OP15UoCx>7RcJ;uj4=6*(kJn@BnzA~iFZKTYdGK}z}$Y!uTHkB{jMp) zKPa1guvRl4Ea=$b5n0c?DDdda+0!79SpICx9P8X;(-$8FF~qI{@Dt&%;hHC!7wWp> zpW(MLILbk{Wae9`?Tw5iO-pCe@TQ>W_F8Ld<0W)bZgLB3nAx40^552!UQmY?JNnu9 zA-_P*3{@4EKvW!wUBwPavBNR3;`iviQ&ME2RJ05Qi|!50x2e7ieX#Yko+Ix&mq$lE z4*$TTAR0BmF(Lu_w-2})tX+5egE+R0uX!a=|4s<;c0erye+Y&&c>GZrfK_rGrS~&HCX>DEGa3eYy~r5vM(dV3^;n#ybQ-0Oo8YYF^dLp zKaTKUr_sx9L0=j}R;hmAAw>A&X;dM1>1%f0za6TzY#%Hw%N5>wIjTKqRvWICnz-`` zdK%;7-!48GA!rW0`@P3jlnR&nU`=3z6>6?{($G_TMLzBhAa|MPM|3CT`7ayTE2^g_ zp4zVV-GBX-%m{fWz~?(Egk@lb3k~vq7F2pi3ZSZ~oE!=Q-x0g)3up!jQ8x?y-K07; zGg{dbjX^${!Z2x22M#v?C}oXNk3#(Jg$Ji?1M}|I$;nO8k6SnV#=T0@BiIdT0TR5# zYtA-~LtgS^zU#mM$=Lrm6qZgp)LYKKJXP^_ZcTXz8T(kja}hFbLeloec&d3B@d+b; zI!*_E5c1Lo%CuC<;O2F_jc@`R=9|-OAg4QyD`#Y zH5yGTLjhFAAZu7MGV18@d?^4?QM>8_%k_LZZZ&5x)+eLYWCT3cXpxSHghPPdaCh%d zKeN?^-$gYzWSD}AYD`{Ic5Y4rZ^m2I(n5fv5e0Nq9@y9eE*1u_HX$(uxUeyLfl5qA zoc?il4#n4=#T0UhV)zGgy92;?DRXxLrnbtww2Q!1PtPe8`A6c6)M%0omOD9akd4<+ z19i-oTuv83WQDzhB4B#b`c>u0z6wl_ZQ})E2kC$JUcNv28L!@J?Pdf-4&@mE?I-Spcn+v(fr}l)9dNB{}HpU;#jO# zoL6^t224-K#zyu}=;q=*+rXD0w?ZnC*bL#=LQZu-2whE!fZOW2E<_O^y}uf=)%uJj zL`?u%gd0(pdwSjVB9!I!idF$m>3mkF%==@q2zBo0^fSnIl6d|Uq3DjOq7OS8M+yPRZNQ)Ch44I@nwyjq&|h`ucZ)zgyw} z_PmLL^ol__vo*n+9`)#0RaM#bYK!-^klw$3Kv+loy5}`v@ZU|xi7gNY%CYQkYPzr8 zcWkW_W0M0c=4O`Ugm}KYl5O>}e+7@1E z1INaPyKi8tXvSy+xm`b>_XGE!I21MMJ-&P7JTIGJ{C~QRww^F<0!2GR=kCN(iG5rm z)!~nZjB|5|-U=V;9qx3AZl9n|C23x#k4DLChz)_9`Okx_Uq-{dQHFI~m$oCWl1aM3 znEtKe;^fi>h3W`#viC+4BG}GA(o;|Tj(C6p&_3=a;0*gJISt;)8&xBFxu5_vyNas~ zG?HaN)J8&(F%=aBE~2yPM$5y?d;Ye)ohuKybomn7jA_s#CNX?#wE^cDV7TXi6?qS{ zjLF2XF9lQ)^Yj+J5d^Myn2g2>>(r^WgD67i0D@*&x7ypzH5gestHX&PLq&pVp+aCd z3jGFvi-47beBr>7eLUW6KKsi8l9wms^!SCYeOyP6gK%LlRZ4TTPi{0m-romi<-P^9 zE@rMn^b0CCM|=2JxnK>6irJsDjwKOz9zmBX#CP=IK(}h?{WjWTW4Fj@vP$wcRVL(D z9`-Exj=~?Imsu9!#Dbt1c4XCp^ehb0aFdTEL8~#KZ}<*RIs3WA7sPGP-@#X0vj4nQ z^0t2x@G6pIz9j;vbJ^-OEDZF4Qdz*pqDRA=j)>S_(1oL;)rGNt6bZ3_7J^B>;#3(NIjBzOOI<$#Q$1+T^<@(H?%kBlM(u3EL=0K8|O|MSE#xQAB|qx1f%KFI~+?j1o> z69CXQEiDo8c{)hSOvb<{JW{+pDyy>x4Z#laeWsnJ?|rSJqyldOP<7%OqFf}5>SaP7 zgt2nz;bWKBTl@x|DF%kLPnw%{nirpyR_~>fg0uk9skP-(11YGH@)cOLJqx_levoQDS3-)K^bTed{A-{0m z&tTSj+;@cf|bqog0oVoKQwlOcRwS=^uYDSPq&iP-|CBULapHtk++k6Du-Q4!8$?Tlr! z*n|=2?LAVWI$R+Ct%3j1_`gy)!b6*yrnqs?3c8q#jr7PG+FtRQeQb{MvQ;u zZNndb^$eDQ@Yo^y?LT!wn44hdDXMGe=x7DVtq~DRIN6A@MGl>Bc4$&!f6-!>k5d;P z1(|~2=`oSAvH|BJrbnRR(d_b~9ls9x_D|{oy&2-X+`ZKb@`GSGU2TAV{%pTtAq$0) zBxI(92LYd3I4D8@bXve;PG<`w;)FOHln8hCaBrs_XY+k~D8rc6)X`d+yHmG?xjnCbsgXv{-4~m3+_<*Bs8>(OgQ#teC;I7U5{_B zmz0{!mDRFmg>UgVx4e-PDoc!yt_KTYG{E>vQ^HN@dLEaVb9Qq4^t9wD|GK+a%=uHP z>7l2opz~dP6`F;R+mN=$F+NsO(oW7yg@!3G$D$pRO;1gSb!1jJ-)5*I>LM)=HZk|m z>jcZj%vk>i`~I-!!Yh`C%d@GZe0+AiGCE1A(HF5dR2}X$2S2Nu#dPDn_~Qpy+JvGQ zkuwi?liLOVmdC6yJpbr)zcZi|!_7i2R;ttUG3(7qOi`@JU%eG#d1-l_E}evg9s>h= z&+8O*y|hYCVDWn$I-{EL9gT;k=Kfv$K`5d1`w?q!G(>YKYl)7fu4eIwQq4)&ihU)8pj&rP0TY3D(g5LiIH zxL-H^zTtx++rK#0=UZYN=SNgNiv?PU1yZDJ&1nN0%cUac3pGg?9-8ZYONw_p@pkt$#~IvHj%ne)R=efoWl-Cs=nms{IH|1#A<5oAWP-^1%N2 zf`lYnXp-UBv6)E)d6g)5C^Rp&BhP)HgFgLjL2(1wpnNJOiweuu;ITSrh+}d9 zDOLv6Cy2D|KlCP2wu2nHkp|FvQBo2$k!+Agl-hYi{=-p^i9(2_qNclAFCAgPVSf3b ze|t<3uX&Z6@20?t#R2HRsB4NaaZvkG9n(3q5~fNGJdFY4y^Xz=S>uf*J&L9y;UUzG z9+mpp{$_trnA+aO&nu}=MSSp@I{@C@2_(5wwnV_Wd>Bu(03~*zvY%+XK5M)Q*ANW^ z5L=Lp=?54xaL46*}@w__8r-svvLpxRgYy zaay4L^VLGBTwsf}F|7KCdw?AZLGG;)obx4k|oMGDKc=6e9Ahv(_Cm*UCiVa+(8BPm+KKr!Q$Vf`ziiUYHP1)=JZSi^i& zOcydhvX5kd!Y(A1zn~XtD*ZWcC%)>lWW(Ov07%$B2$wD!2~a~8b5xIpigk0kAZY*~ zHQd)>?C|ihFGBdA*60|}&6pe`NBs$+Tie>ynuCZnM&P}GP2w~x%H!iex5>Y#4+8_L zDGj&`)Bb9Hh++4(dWZz*jyJ2tWxljA&`=fCmFL{@B-ETTvUS!QE|NK?sz{ianz4Wp z^-bYn0B~&QV&O5kk_XV+-~bk+yc;Q z(dkS&f@QR);FU`|0VGt5KgR(*)+hEgLi`_7?6rN>fTbjse$(f3hxU^HlSGalApLaF zPRs1+9o3*bif(oc(h2o`*3=8*LB>ICw!SwAQzaBQ{y44@td?&`L4BH9cq%5mlW}RV z2lK|jR@Yy~uKjx4m$AELn$!(|e2jlb-{Urm{IbfAH6ky$%0<#4f{%XcVotZ`(=JEj|?%ZzA;U=p7dqc7Jq% z_L=$I^D}bBz|c|aMH@79mt=-+3kdLkCS{Iz3qu_bUF_}}&@o{T6k0VeywV}!^SRSw zGG$DGMn1iVz;FavtR%vy_7Sa?m;Pu&LOxH4=-X_2fw~j}gnhmnvZ212YWmp1f>II` z59A*bBuBXdY>X)pG2|@=a}>A8+aL0SB`#A<>7cq3`g3q4=U?Klt!ek6;IICqh1Fmm zQC}7z*sAo;^rW2_V{D-$rw}hWM!tAceI)ay=#%{ukOl&upABbW6}DFJdk_%6*OIV> zkE9FiffW)9LaoLz=AU!b{C_zFxZ+pMB?z+6Z1+^uzKp@=OAIK%RJ=}ulS21BS^ZX`+z40FIbW35ryvb?3|Gs9< zY)f2(gu8YAIQ95mo{W~lxYAOMTFi;y$aCMDj{ga2E-NX~&?&3h+CQt>Xq1h5|Ng#q zB$WxRWf`H_rVR%x{yyYCF~>ol+Nvud?O_0X4Q6M2URKeN3N3mWyzO>VE+VyOwtiDn zEiqy-xjoMAe-^B;<0CsyPe{FxS7-7&ZbT$}766)UHE6r#j}Aa2F6IUQn!do+-FpJz zDgt0i<}G3pI}7>;5?4g!@NErDbu_gzv$Nn+?lAiY7TCw7#-%TZ1DXNJ5`z#S{2cCG zovlhUi)N#%NJH-6GxR&)$pJnrnO231`Pw=rvUwk>J1aU~@0UOL;TzHLP@#;uXXBgz z%;3Qkd2fvI?@t-0%hzFlHXs_0gjzAMj@++!H7{&DLelQy?rnorc_{>)L_{vku=lnM;_Az+|z@*j{3+It0Sk2(QzU|#Pb`ZJo2|)-@!vmT&rwk zJZ^@nUREI|FW=dA-Nf;Nl^B;Ap?}<%xfvnpk8EabE&b&Ue$QVOEhe)?dCKq*Ny zv9>M=&Jv_!PO6=HCZLFj8%CjMR*5qqZJ&4agx>N|x^8YlqX1H~pEg6phCezc?Y=aE z@1@0~z~gP4C@tfeO_ehqH_Y!XvoW&#J_Ru`NzjNX9l6Oi>4h7@1U>~EZAeZFpAqZu zG>#y4v9nAZ=kNR}A{CSL{HFkNc35IELLxM)EZ-BFV8O8n+yiKM@LH{x+u7oVDHL%r zRIAIKiRf{$&?K$;7lsv|!(2e+w?K3XPS6hw>!Em+FDTP3R*OBtpXhp9(h4Qd^465ef`teJ=N(zp{hs$E!Y;9R2++80jpJBL1t>csMI zzr+bw7K6Dlc09829->xgBB?Y`jaj#cp5>v51EK&qh&6&Z(ra-Gd@(fRDdNn7oXV`R z*`1%)f{knn0{m`d(GU@dmR{Iaz{#6b(;2q_UJsc`;uJn(CXLF$WHy5>RK?jRV$Y5~ zkxF>Gy`WCc;WCUgbW~qgHTyOvKXR1c_Jzko_JdG9((IIt=|2a7#Hnc6Wu5rxE_g*0 zGZ8K7H3G9T^$}=rbo)?+XAMF%M)_nU-=r>Q*J9axo9+F3PzjgDSt^eIH!JP^Af2Po zu`_;wD`RDapTxH88^^%(e_KoGi$F zlIO-Db{(CBKDuG#jA%k=AL`zqkoKEmJlsPwyB!W30Dc9YF4!v~CubZ18tGNO*<09D4^*I3xYy{s zeq7N`t5(FH$7salqAV==uhW6Iyt}9S*F1Yrgqy%)tfBo?xK8ihx4dxtv&|0Aj%vIC zK1enqqvV;--hS?^UT;xixHDdc}b^cutWs)qKNKW%_3%;zGzzv z+xKjfjFEYP;y(kv76bnZ{%GWmiEs@dm&h%p;s!Ypj=5lr-GI-AlRQpXZrp%ML;OFi zefHM3#lnwDePxNBTR(*Kl;xF-V~!<;VO5^#LJiX<$C*jih9NM@FYHk0=I#$@^851X z5@ioYlOVnILO>XFKs-1RGvkwOMH^=s7U_nFaF4|H3B(nSa^D=wXMF9LP5ww=Y9sEy zfI7u1R=CHEcz?i{gMi5ubREWzOkSm4&bugon*kv)(C94X9D=2{0&r2;(^;4``ybai zklUd|4pe^Y%le%eE4LR)NfB}zNX!{WGUErWDPV`#l-fy18EIIp2P!w8rB~K z{f4^#9_0Qh!LY+-Obid43$t^r>c$n6h0L_(M|jI;reRCgI{Dbl7WrgEKGZ5a2h;PiFD%^h7~(^euGgwSP4~u^e*Bz zpZo}d@zX?azpSoes{#oPfAPS^tjed$@Q#}t?u$3Qv?)xRws*bkXKn61#u4edi^T>{ z=ILR$;TR>W(td%K#x>`ceJF0~zp)i}%}|JIXY)Yu5M=O-`FM0ca4ikQOL8ZCJq)#& z!P*t@`2Xgc7UXcwDF-k@H`LjU(}bjt;ZrC4pa{#@#7nhPWdlMg`vS*;zMb0)K*I7s z9m3vDn}7daU1+sr6F_WyxK>8lus4`gy+DY8A2@_$YkP|V$ZQ^X5vpTrTYy(A0-ZOU z0iF-Jx#EkxSn5$KR;5v2hDMB%;f^v#GmVRD)c-$5=QDtR8tOG6BN<-dmG&&FNLb(7 z=!``Lk>9-?Dlv&)ztw{|*mmL8*Mc2;eug}RbAWW@U}oH#CX0GsMc(L(@)tnD5b{H? z>ho~8_!L=tk-uChV>Qy<{&st~o;~+Xq?Oe~;qtPq^uhXOTBmk)Cn4evUX-KZ?d3|Z z6$um{6;uRp?jUzah>z3C%9J}V%Q(--DF1!wv2@4V#j5OEaw-sKFVC}sA{dp&F;%9Ts4(4G}fU%#Y z85S+^)BIm~k3b-$Dbyp(9MO7j9E*DZ-XP_MDgp`VA*|!W=zasOR40yv4cJIaT_zZq zFsLSdG67Zf%iGFKV$Qg;ee{-vZ%xtG~!TO4Z-HnR-11)C>$KF-#witJ#MINio65z`%`gI%+Nx@iU;G>62%ehBwWc#hI?_yYkHgM}RSL&ds z_3rpq_2?1DO5NE&QAHu<TYMqTYfluBPkS4W8f$?v_AscMriexOfiMW6p=XQyJCdEFz& zY{AL&#NycD5@FXr#6hjjP)%<#;D0VDV*L{IpbhbNkr;Zju2xS#R}(peNsh-c{pe?V zcTk7yw*h9{j^FH?x_(j{&oPI{)P&)%8%W$Xd@!;hzWqn49-V zs0V7OEDNUj6{;@;efMaA2vbK&eT%i;=1k~Z>PD2v_In4iENZU{bzXQ-M-h~a==JkD ztWx|KyR)g=X-);@V);&w2R+2M`;0RJ_v(3}MQMDuC=_O^sr-&)W3kd+blyiWv}jg@ zAWo)h@X&c*T2|ew!RDILwNM$ZT+gO8YKbwe8+j+{3(9EnXbS08Si7hDEj|eCKVT>r zlrhi`qaIXFR?LH4u-D3xaB<*F&u|SAF$CInTo2=i1I;n9>T@_(M#kizNc}`%5*!M2 z(D8g!`tHA~>zS1b&FBxf7pw5-_SZ|TmQXH8mlEnlTko_SQa9U<|9I)&F+8P_lwuU( zaKG3DRoBMoY1K8)KHbQECLdM|B{6UR z>#_0J>bG|4p)nHv4`?g=cF7A9(*8ema6sh|W6U+1Y8vWj4P2=j%3&z6-Hm%np9w8( zdHXHb&uC{I+0v!Upll*C1f84>HPX#S^|_OO&%?9Noo$d`RZf}-HmMFAEVCrRF@aA>DCuEG6(ItfAdCJ5Gx2K)N6B3*TmVB%fiHPGd5+a zw0HF>B@$x2$>K|0`q@xez=sz$J2@FQd7IZ+lgln?&RuZ{4+@5+u+voYwz<8(G-;NU zot_TC2R(Fyl`fWH=0UC2o7w&5@I}mwP?GXCV~P8sJ*R87+v+eNOSe*2&w!bleEISm z3HpjA(O`hb;UyF5$K!ZCn)t0c6~#uZ5h#%f?RmXE-4sIO?Dfr>!!Gtz|Jon58vpID zf1CU!+mKpV4Jvkto<{D%mG)g^;G;ICu} zv&6$g!3&-f3Jj>%tat*KQPai62gxEJVN;tBL5ml9foFSxqwZ0@Y#~S97N^9g0-8WI z8cP=+%%I4Da$I&`vao;$MPKG5(VG?!uYh{hL&!S=kZrdU)WfDQ2(Uq9ci;v7WCaqM8Z9=5h5XFt&y-jiOdOe} zm)BPWY51CxIh}74y@CxIhTiC`L9o499|Pb`c5|2=?|;0uP*X?zruuw7!dK29LG zpdx`xP0fpb+uN-wxOqD7F>S)=0Z0NMChF@;j{-tRPky5ZdE~=F9h9Yc++3+>SB5Cm zx67}Q%-MQdZQZcnR-gFV(s@^o&zeqK%kHOb1U0%5=lz!1Y#__VwmNfnnw%%lr!gv7n!7zh)FQMAn}1jj5FQ#V&z6S!XxPrf7Jr0YfQwmynO13k4L><>10}11o<5P%q;$ck`DLs1(A@0XZdid}&UfG*n^_`>zHS?M_rykSDw7E? z%SHO-Z6TKNG3_#52xdDBB~sVLx+bJIH|Xj+G{a(8-TK41@#&)y+yqSYjtL0roRr{Q ziLe(5>_&X~7Z+z&+x9a_iIN)v_~4zP=-}=7NUfxxl!N_hGro`r7lQujx$l4-TI*2P z`sx;XM@FI{!-Z~+>>%*A3E9PwJAly7Nm8bIF?Xr*dDE`@hti>_H~ZgQsy-jsf1Mg) z1~g|CevmgG?Iv3iEPReziT;BpTOplh?xhtKveAl66O(v1;=*|^;b(AKf+c+!VYy=WiPZIVMW#JG6x&FY znY;dXsZ5x(&xjGd<@}_tx`M01atgnUmRn~oAo?G`YfhIF&mGL2q&)~Wb!lc+hO9r@ z#5!jCcIWNFHJZu#b4WR7JYNDvq3jCln-PYBenqvZofN0lf2O%}g>f0=2%dhJ*YJ-4 zh^R|`ZiloC``i?H;T4!^jh?o`dh*adCN%z0^S$;k^}?7;Yfo4dA*m_!q{q!8WVS#; z7@=!O-i1C=Qu4~-$CI(G4RYkS00YKB_`oQif&>Az^JH%stS7hNVi5&x2_2ko_A_PX z+-8xuRxu5?>>_eugT_tP3pbMI7)&?0zxpf9<{x35Zm2!m zlK{ajFF>8wXQ(^J?Q8`~`>THzdPzS;N=I+V;0)I(ND_&5KMML1zWZXDgGr#HrH=k5 z>I!|Eokok+GI!wzCk^yJ?IkrJ%ndEXZ&qL55-Gd8z(7eTU-voh6Xzm}Xnby4KMh_V z(qh5V3T>GM4qCEPNp4o;nJJLt_gT9Mq`FGGCFbT+X$=A{m!aW0BaD+?mO)&6Tw!@l zA|^oi^yt=v%&ryTilG zP@gj0#AJVD)aC1DojC-WYbXAMXgI&yUmz0ecDluV7RfwiOwmHw_4*5Zs_{!X;^=WS z&|T1O=F5=>BdIVw!H5r;S04PmE;KBQK9z^IPvJA1d@g$HEH~unhmne&S9S#P=QJ!Ba&MZc52qD7b-)KTGM=; zsXlZRt47XNyhdD)8(6_xE-Sx2e)L*ji`5WXA^CnIm9HFx2r1p(!I7T6Q3fBH-#N= zhz=B)d4?aTn9|rbS7#qY<>}T@7?OL~W-dbqu z!a{8I^hhA>PBj;@_cp!`gWr}~)k6TSh?3p8WE<7JN znKoNMgKCGE%$HobL+>#kTS$56Ud#eM)HR1}{1JWl^}IJy-vgEljRpw&BqdIUFRbnM zQ9e5S`2$ae_ui7;PA0sMy%sU_Svxq)G4CUzHYJ|8$D{mwqLiHBP-;D;(K0kmMsK zpw7B_#XU0rrB4F_a2JqlVf}l;{ZqT^){X>DP#mXdEMg2}dZV1KLL!!|B6pdKn&IT3 z84lsdj>doF?zfYu$1l;H)8}cSPQ%OK`ag$TaG^)dYU<_XrKtDlt+nr_2!!WHCy@Jr z`#`dp>Fc3Y9cYA)eMp&L-1bL$c9c+uayU+8$6H9vBh5FaPl=-ue(xviU8jqWBNwcK zPhh^s?HkHdOAjsH+%6hY-KX6H@b>IE3bUPX*W)%=@cxJKc{k&>NV~}ywmqrvhQn%v z$AX$#-say_^c+!FmA^(TaIV@cHv6rtvutesT@{j3Mie+A3{wUy zRuwo0xWpT^^qfME`-v6Ib{*}4?%ft^ewS`tLw3aV2T(e>Xu!~A@exSr2Qi?7HM``Hb=66RVi68 zNvW-&?e6LQr=da0miTx=kSTZyL{M)|9th*SIWU#A_AlrPe`2Qcf1aVu-M8?HWfX+U zN2n9PLv!~b7bylm0spZI9~I^e5M$VD$m$)XrmgE}Z3xekkl#JM*3=BhS%hp$dH;O; zxAP<&zg0I`Q#wnpdDNl&gO~g2Bg;CAPkkHbb_gUp-Z_ZbMSt)holJ%=KRxMX2l^v^ zo6fDT{2`&xytCr+hYyP5E!MQWdokyI+<1n-Y}}q4ypnM?{rs84->h*0WTIjfzhg`r z-1YhlwbV77oXjJljr5-%FQHXkgQK6bj#O%oiw@X@@C2T#5!zjW9Bd?g5Y39|RUt_x}{Ou@@cUQ2>yz2Tl zy0BY*pxD$Y2kvh6gIhZ=VmkUaNYGPv)f;(S3KW9dy~^gydRD9xY)up8IxJPv-kE#O zUD=)wCNsGk*qQA%JH1U#3n3nK0ObPP|YUnuAd$+d!OeIQxVK;YZa5dHbw>b#Sibz=bH%M5skEp zQNcWluY||kY%))TD5gJ-JVKjul^F|@<<3BvaWhTl{JPW+}6rhsk>~xoICaE zxxwpEr@hB=)|elIF*Wib+8??^(mts^^dLHIHD|4#5i1}J&zkj>`3yrT@5ANry$fAO zTus2|B(egANmAVod2PTki(k{+SIJY!rOTp{!j(z4bqBL| zNVdgdy%r)Q=mNniTTTL9sNJQfx_dLK=yra7;X>c>;Naza=vemfKHFk-Hx>0Foki8{ zpusEl*|B91bSvif6Fyk5=NTSTtJUbZQ!NrkRB5+!Arc9d%-ebmX4fso;IO>BVykCg z&gJ>sW|sM1|1fwal8a=GX}y*~i0*!Nr=jTEx7#H~y-tV6n5Lj;FD6k_V7LvE^BuVL z=RBz{^^X}a+wt?t+~s*<>dM85)-k|T%$+B#Jo&4 z#@!8>G1nL8bmZE`Q|TIgz-nlp10cqy_QMz~v16?wK zxtXQx2G46~n6=_1IVA=kQzrM6?e6VbEKJ#G12l|im_B|A!b|x6&0t(9;I$`?9J4(<1l0 zi>Iru{3P3v68}aqpK21DH*|R+pw=p0k61Z<1Jv*b6Tpb3;4TQJ?DZ8$$PuKbCsbF} z5S@SknemLQI-;8`5C|aJC9SloWbb`bPhN$JMv$scSTl}-mzosSfNT7~qsKE=g?jBn zAmgzA@OY13OO^=$7l41JeoW0a($`4N+|zm1f$%^_5&lAVA*))G2L~(c0s4KDM*F0G z_14S&tQM)tIiJ`wbjr3k z&n+&Y+}&q-y5Z#g=O33zL}TGzA|Gf%u9yxv5gM|?A^ga0bv9?+)xMinaG zJRv6yy1A4E33J`anmL}NS*pa=&`?+V+6k>z>k=QFL*y9>DKxeyz0ioTA7-eS*&{uf zMbYhqq8g#$=KS2t{T07U&;=e_Y*+F$Ap2=NjDmV3Vz1mSmrj-vQMEb$K=Q)#bCQ^N z2#u|$lU^xK#0&G`xGibyj7$taFh39)mM-upzg8YhN<}N8KJ9->iG~hAuO|@`K^=hYW!DiM+8A1m>o5UTJ69DEM8 z`T51D1U_!%B_#mc-2F-Td$ogKe=O>w$woOYUl)S@?Mzv&1LC3VM>+m(f6>bXpWanfN5)e-nSH{5! zzV>RIx4TAtL_Xc@aT9%OfwGsaUEWJYcCiV&#&KF%hU(hX(|Ga_gm6MQm0T=NgkZ`&9^!ppV; zboX%=eonobrYQ8$?TOE8I}dW|hzW2UUXgEidwc4754#OE?xSkS+FY|z>S2DPIJi%| z$nNk3WTNjkgHYp1w=dSpP1ZvGl-o{knH3g_he|0`Ei)U4wdT=*QPGCvnp$h0Tj{8m$O^IU;4J^96Hf2f0llsFMYcoTzZlzV>=-1@n6Ptbls}ifv9e1UCLMbJT8~ zHdoqh5*(f|UyiCz7fI0^VZ2`4VRz!Ha#(#7zK}?CFE6{hpSk`0tq5*7lS@?%4Sdtl zeF=YzOegG&dN)C0b4SEICM9$2dA&FZD$2sxdE zs}78vESXH}N600YEMB>lr350p-g4)$LSWL#=X`$M(Yu zBT?%4D>n@lJuS6*F^u*;c=L<5!zI#^igw_mnVpS)*nDbSN zlxG>}*K-gg{q*N779JZ?

    8X*;knft(#BrHoc*$Cz3UOVD}gz;63gi%WFnoFe>jV z?MT-b@^*ba`+cKt&$UsI3E67xWXt5(G;8j^6KCgU(oW2oaIq@-Yz@X;9h)UfHr(C? zatchsr6rx2*2GtPO|CUoZsm3}ZvhG3cnhy|L^~8nptn`f0|LUcuaGZ981E1Xqk4Tx zZroy~IXNO?Ox+hKvRfFBtkCrY7JCWL8oqde%s=kDR;lNkA% z)aF#7lff(3H9z21u2-Exr-HUiJXtzOtFqn^n-RZ*DsrDqB7|S$Ew|)uR7;wF$bI+J zAFISaweKQtiKF*&0&WAe=n)`9)Kkf6G`!Tlr|X>aNoa`&pDu*`?lOe`MYQ0TmA1N_ z+;pilX5MXWdcX?p9_KJ`c6WoN@^b|Mk>28kq0hdEWH;|y)RWY9bYtU}*`4r0ecyz9 z>2V_%AFbB!+vv+^iD)LjsP4R#$!=3k6_R6!Y)eiDQ}6v`mpk~qY}%uw>&K;#L90Y| z^+1XB%WgL*?EyNQG%WR*A0kRO22F80<8l8T+L*OYIRSqh@M-oimJ~&P=te6;bc)Ou zurK8SG>IR@@9h~x2*zu;&D5C@Nl4B(&hucdRZRsjHS5TW-PdIcwBm(=2d8_jIdj#zcYMqbptQ<6S+b3c-no} z08R|VG7%ALt|wO)k3?i%mLWnYTu5X=i^*XK1qQs_4J@ zyk>#KWH*BA+1 zo%<;dT~TiNA3dT*H-(#re*Q%HF>@2cnn&6ldaWJmUYiqPm@H2ERXJAH^c}DU^O=%) z3En_7I(npwc8|;?zyYwZxKR9up_Tbv|Lw4k6HXGtMN?qB&vti9mOBJV)pi2nc6-6T zynG1f;5l*2A4{A%ImZdSWH0R*pG0b$qY*&aM(a%Mds=2k*B(;6H ze?wWOo@slmP)-!|nlgc{8kU}akft^45&~jlJg1p|*Hpi|IloXEBkDv?DU1VW=N@;l zl7`X7HoXu505{ng+mrV`( zkPnPLv0j5fARizY`KfP;%|@yGId>02Xx;{F3Xdgxp+6*(#MgFXDA#dwRV!fsCR zY`e+YK$?56H_Q%$Jt4sV^;Ju~UTF8P~r$bHA++ zXxVf)W8#T@o-7lky$;V^b3I>DDQ-<@J4A6I1BSk|__!%mOL(g?2zPM{cO|x`NWi}1 zOOO*NF2xd&_{q!4ux1-mG$hSGd?nWxA$A#UXLqeNb=BmBX#^egI%PkDkIZI6`M97X z`nU$z|Ji~%wR-qr&cDRWP#7^lL%ZmJCmwz^YyejA(0ZRd@nJ4R`DmdY$d^&Yx9Im9 z@bc>Umh5;X?s7Vxrq4ARU$<>2u!etYobg~~rA99eknCmLKNS%n!iP z0MR_0DsxucPvTe3XG~1Y??=Fj;fXDc8lKiJwbYmvbbw=_TDEpOf!h7=H= zg-l0ubex(PFHS0K5T~*2d3k)s841%Abi~t7EkRmM20y&e@ZG!s4-flqxqOaINwq=} zzeDr+QtikGZaZ8gq~k=hwX*9ulRnB<7-62xN|#7z9uG7d$>R9*?CjWsT_kTwaQ?p3z8NbHSauJ$0f_fkjXLGZW(FN4FVxOBb1kyQ4-KGvdys_=*R!WF7Cbmw)S zuOCNea4JYk`JUdKfPC=c+^tXFUb5DA4hrOHV#Z~rJME7+B6(~Tw#+U#*be#emQpct zls$MF4wqML{Gjp?&VFoUOcjSnzvL<8u(?07#$?6J*5 zY*HeonQeS(q}_YJvJr$7vccmb4gKLHC8sYm(zdO%y{*H6z^Hd66ZPzWR(UvCA72}m z>_`RiJns7Emaxp^zD?iV+P|{+z1ENo{+Nryt&K!dU|g&BeckMFWUK#j%zdgSfujuJ<>bZW2@ETI&Bu1aS|r`=H(~-lv^&<2@M4US*!D6m&0Y49?s`*@pPovFIfaHe%moU( zzOD81yGbpHO#c~D4Wy2qO;ldj@AP`#PZo%F^j)eWsKA}jI#m7jD?UC8`aX|&DxS?} zbLFj$d4cG0jKnZuGJWXn5n;X-0<5&J)+S|uME$|CppS*)fd@=heGA%ml16+@sJz|KrhMd zeU-%Xsn(!2_YP2Y9ZiejhRR1xG9=~0%C*rN%}U|BieyODIGY^Vd%`ZyMr1PAR3lYu zN#MPk+-V$fESYAnYH_S&RF?}fcw~wT^z%3x!4(!HK{feFrm55wCh-y!*cr@}>iaK&R@uWjS0>ctwmYNQRrJybj-BEK9o5U$lM)HBaHI2v_GE!T~wVru#>qJ5I?uv`?Jqs-!TL4202j*goICBgxpTRIXYYJk3e-G_mCX zV=;J4+1U9kerRP>l%Yds7B#Y%YLs%DrOO$K1tN5CH{jbHX(_NhlA%!f3#lm zY(LHll{F;s_vgYPi-zwuVw!m`VCPDe*zGb^cWWgzC4OwP2VL4 z{7#m7+poE{8k$gQZ9GmHLw1c(4}!M6|8I#R$H6=yAw52mWO|8pm4_AO-hTh@TEa#v zl_K1SLq@Aco5b*jnYgMkTp(wDuLzxL?{N=p5BvgAA#|a#X`H8L z{8X3qLqi6J=k`@~<`IV#b4EJ8IXEpBj_3!87Jy<^HQ{3Xg22&$H(}AudgKLP9-!WA zR;)9UW&T=@9!`OFpL*K^5^nFs& zQ4-@x%m6;gPvKd6Ro;%caWw~4n5ncP8Jd>(RYl>p-eyNvibB~={ILNT-?;aU3gaSz zOynlT(&FJzn)M@cm`1&sx4%5`X7U#m>RV3I;4?W6d^cDNGr?w^J&-*Z2A$xyUJ-aw zqD6$$VluIj;eJY{jub-lcrZF-x&nmIEtD)cXrEB(}qyXbNQi^ktkT?roR(*sSJ@s(4=gTd(Znfp-8b17( zJ$qqhmU%dq5irTw57@w%(fn;7pPYE>FD|I(@xAUtDB7pU{_2L4vAlXYk|`~Ite>j} ztrTL9yKrqGXi5SREa$ zOVcLH9ik*U3UtgdM=k4s5lK{%4I(@*(l9G=x_+997cpbTw=uJel`L!TSoE%csj>PUKbtPmA<5j&<0rp8}snX zcYiQD@=!3z0>m+F`iss~hjRBZPAMbyCV<0MmXT!EPOQxhLF(3VIYPDku@qv0EX}te zLav`o5x$Dm#P1wpY}RCxwVcd$_Z%w?Z)Jrju&qH(-^Y6VLT9<;XW#qxlnN_L{{aG`Y<05N%n4wn ze5A=`HkgPg;r-3SVe4TEI{xb9WJTP+KK~v(y&TgWfwZ6svCx zP?l!w0#Z_0CcB{^`moqgrc6b*;a>FgGV9@K{BX~XZk7(j2cqZ8?=Y>H-GXImF+MJnM z{}`T+r^dF3HMU=2@zj^Z_Vh6T$SMlfYZ z*MH-|R4U)ZyqMUVYE|!kBz^YCuS>Kf$ACUrp(}{Y`S>rrD{WN6&y7zl)tmc|_bQWB zbq)wKp;?8y?u^>Rn3yN6-8D%vMqTg26XEz)ClFVIgAV=5Rw?(}*H_l^{ z3#@sOCZll$8_|OppLQG{dh4wUlvcZ~23csYRaX;RnudbyAkv_Ac&-I{S|Iqdik*8q z&aP@h(b&i&Hl_=(H7jA$wFQ&{fd5wt2=n|u-4SLd6hU)uZ7SP$>2;;yAH1`J!i@Go10N=X|sC@`kmy;hCAtpxKhq=fan|QnaG+R1mK;f}T$FJw^=3Y#ADU*!MX1Pf^4#uRRgfYYA zZ4@l&TLTrYyB>k}bc?dRUadGghhhF#>|)}<9Y_CahZr*#Dhz}tp4rn$u?V$vmF7Er zDqhaklhT3|d^-LP#Q1awc6hg#kll291^LxJz=RxsqFsGz=h%p+cn4(=mG0mdPby}j z^8!U@%~=O%`V{$pi9$o$kd;i#iQbuX4#mjXamI+F-?htOh z*!-$4?MwDbnjZ!z6hD{?{Deyv703)DPMfXxGbT#SB0i^KABO5KghON;&=!a1{Aguf zf!#@J9A{0Z!Ow;uTG#6faI;=k*48$&{+zw3=GH=#; z&$JhXwwztN-yXNcmC#0UkEI6 z0(EZIBA~!Y%u53_*Z)%V6>i-}m#oKPzVW&bJbqB)z;|=0A17qDuv^w}Zm{n6^!9iP z(~l^hW~R4sEi*wtn5gr2|CgamgYm?#;3N0O&;~Uv<@`Zo``7FgKK9p`95N7FG%(~q ziKV2;#Z(bI+~Qj-22DnWYKLeUTwfAdE`N4mD!wzpc_OtvI?~Yzt@{Z%>~Js&W>>>` zc6B{R5l*F{#@=?F@#~0-5ASlE3*2M}mOwXKD&F`ib=H5`P4VU)nPQx`y&#wXLr> zbKLf@4l$i@@vfK z&1}7f#@)W;f_d>l*GHN5AG>oHD5&4;^82ZV6$rQ5eb(%4WmGMG`iC;NvRasOIAnl# zdLR$pH>MS}Ug>w>x9yo`r)OyG?tOnlh4v@i^4KAs^(CDs{>v`j(cuA_Eg`3+fJ3`W z5e(tpwdxd!a8f_y_YiivgJ8HUr(qJ!7Wr7$bR-Cf%eH|a*jAJD6<9nuDpq;XJeop+~B-HS_PoC@lNG5e!EP%Ct zFKL+Dlj+`pJ%1SY?5|bee+!WF6n@U;4DkPle@95jB2@3rl;$E_llJ& z>M3n>ow>%eXQo|YSqcrMOPfsl@(!{JD7mJ-O>#j5 zH51g>yV8bYE!LxD)E!MA$Go8u6#a))K>vL-NdFZ#Qd;l}Q|kP`Z+XlZeungkd8^vQ zSFrqW`O1MrawIrFz|W-ZNOw2IXi0&s-DLH;)O(&93wVCG$!-sM$~!G-LmOJ-kl##7 zPA)GkjXUe~I^lCV?kv#3z{emux*bg%`FqV}8-6B2RcbH(OZ|s{0;~Q<*Whd05r5Kw ztO8Qj(~+?e>=f9k-Dggem0ZgT*}2%OF|&fz+}}-XLlvm+qECwn+SNfX&a8ywZpJfa z!?_PZi%!MOn7g&F=+*CRO$}(i!|Y!HjpyT07_={5@N9R;rkFctjg|Uh(a%x%X{pJH zIdP7^m!w;UtBKJ=8Ni#@<6E*a&^=<2yT~#@e|7M;Aq$!G+hr=5{CQPhCmhV4ubrT^ z`UKbmEL~rxs;tCzR5fS1kM{S=l?@QcOse@fP6xYsCj03ZWn0#tjARgpVx%2!vbKt* z=+dVGF8wAA54|)<-$809`Uso^B3sGLInMwNqlFprAkHZItJh!JV?!QxoDe|H9`ZR} zge?nkP4*l5H0F@p8=vu(NF2K9|4NeoUByN-)lNt({oSr7vygf=kDCr5?{53odeMTA zdqN?(4bJgYtt{{OHQ z-nwPSTCyS{Ld~lKFR49avi`(seE-t>)0_$WYODZf- zawtR8*yx%kEP&M?bYVL7i$ggSRZ);9*34qsLYrwvAeKe9E;O}1w-LY_>$`d#QAY9= z^_sS5Cl663DzAUV0t9zlH!NMteH7A{kC6g}R6sJ*6TgkW-T;RAzt^K)n>o)f10JS&zRx zpTZVX@oW_JpBT_ZL*?E783xdYW>Q|42N>Oyuxl}g>?3B!(5Lt&KL-cwi!B)}TXV64 z)mVIr_Z5*Wgm~@2$qijYtD2^Gpp72aOxjrdsKq_hasn-Uq8Ku+3Ri*N<2Ag%6k;rJ za5Zjrx9BY1h{_gld#r+Afy-$x-?$K%r#Q4fA1Z#DN`OJsYTt)SCz_7_kXEVE-~rW8 zB;|x$0&JK)+gPz8vr@<`FsyK?oR{SmQbW))%RFd@q0gM<(-zKs9YUkuLJzOtC+kW5Wc#A2)@`GDWxa7Ombv+stur^1i%V zm&&BMdcD9J^*?W8#YUVg*=A843kNg43K*RC$i@5}p{~Z^iQbjSfq_*B!xv9C@ zWSuRbpr>Tdrr+?I$onbx=_9w962O=;sO3Fo0uj6rF5LMBPz=Y;#p~JVQSP44-%mR| zDrK9Q6`dli>ra%>^Yy?~RZJN&`a`^cf02y1_iCFVF~O!UA@4vpt|j~6(nIFWvV!Cc zqwc1c3jWaFm1+{=I~=FbSRG*=Pcx(W9-^rsFkYkSC&pS`9YsBK48}v7{Xa|Q$0ll% zPA+aEoYB{-z8h+A>4dWsDg0BtTU9nL>yRDjl2)%yJth_)?Yq=VpvB0raO5{_N-L+TfbhU`kUPMz^XrVR%kiy_$rf# z0qT+lqeL1L(Aze{`O^j726M62o0RTEyZ?U1{gI#O{36N`%PBkSfOqVQeZdl7MWAi2 znp9BkH#M!dGYyGz-}7%+eCG^d^TB3KTGqHA@*vVh;KNk-U_HT0xx z{oePGv?22TB-k>-7`$)AK^6TDtt}|Xg3bMGVve*ZBAH~Cz(2C_!4WezAoCT(^ipVA z2=2C;P*ka*>?@o6(OK%SpCv0b&)xn?`MI*f$W;H_wtGJgNGGjy`(s<8&+3sDw}$QN-GTwzVFyICXuY!?62yF37Uw3=fp-9__j(;Rcszo=T(vXNol zMdRoJFW)!sd16)}(x$q@%IL$Tm%6oU{qM#Hg+p} z`(ET2wQqHSCUquBjTQGjl`WJ0g;|}Ec;5CH2d8AdoZWFGB0inEm`2}%7AftUsfl^) zC&8;HY$b9}QMk^*CBQQH{tdoCJKbcZ)U$fW|Fa=AP^6b=7Cnxi&x_IZ=KP(;OMF)T z!otSMp)hO z!5sbI-nOUS#^n16ns2Oe6%Iy3`rEVrNCtBDrF9sJUeGMA|8i^zBN~elZfEY={+JKr z^z1M77b&!i^;(y==+2=a-HSlwd?+@1M^n#PSb{lzVPgJ3h@8Rr-tdz#ENl1%3#(3$ zIbTI3)g}ak?7c>?*FE?WZqbZ@I%G^L8B`;ff#Vs!oZynU)QiZXil2%?!C^L*k#N^bZr{}-H_mi`_S*9|MpKL~)|Bwx)t!F98 zf9SrxIc|-O{&_d$ZnN9BHG*cgf@ zs5meZqdxWH#;a=MsYOMlvAF5m9>)eX-_iKoH+8;qeFx1fF453IEZle1?aABf5+@(M z#AhBNH?fROO}g5j`M$;{D`$y{Cu){P^f7K z9pJ-CJo;`_E(_%~Mpml<7RMQG*Z|ifW9EM{eav(*Lpd0LzabQ&QmnsD{ z<^6ck1t(4_4~guZz#W=M##KA-4w_oc0lSxDnEys6{RM}_@1u_7vy+K6$&rYCsUgz= zD4VO-m;O9&;)*H%q4cOMu3FFNDxb*r@(+oKFz^g%$29KwQ62_vSex6>ttf<#)#-&6 z_GomJt8kHa>{xuK7u;g6{NU1(l7T>RlKxmfAH@HMajEEVg)IYcH-=dzdMzEv+xlL# zL9^i>UNjd;n$X`Prk+KM$>b;DX6o67MPufkVge;f(~EOo9-b?V4Sr6}yzEZu6B&jK zn&ccXSo7hs=|;GG0Db)q4~kEE7q z(~ZrzZyqlGt(czd8Lw1v*6E*RVCHl?vtHt#;%|S1h!^@oq zjx!K<)dM8C*v7EaR%N_AUj?0{UY=Hv&7&??x!kF?%U*jvbT>b;rgWSyw~PZC4eOgK zo2E1b3+FshErW)Aa+uTgx{?!+nw#Dnmy#9^*?=%nEt!`^Ytwoo*f~uEWO}=E6bpxh49{THV3ehx9KbGWa=ct4FUH&x zKcw=pSN-usPk{@x2v_9UBIfABa58+#GxMZGv`)05ZZ-t4J@5)>)*I%L&{kyNhqnUKlY83sWoV0%V z3YeL5A$Hcoi_-Y{CS}R0>xI3}v6~~m+k^HG{5q@;=K$l?8zKf8aa2EHFd#Fe7b}0t zV&&@N9O;RjlxktXqD6vh`sjWDBSw~!JNBu(tjfsDxY7B!=x6rS0O@KPFU*6x*F~4W z=K{;T%*79$)@_f^dzBkLKZGXI?UuBl)o<;ga`fvR-Y<0$lfcHVVi}~W=Wq^)5oqvh z)M({j{=AN$Olf;MeBeH@v$5<(+rt9gA>mVK4fMZ2@jy3dpYK}2{xfX93s}{lR!(qy zDz>*me71>D2yOD0hNtJPzIN@&3$v;yy^gpiTOr;(!k*xAt@6Tr=f`FiI4UswAvzcX zD#Jb1$FCsFYJEFi$Mh?&3E`h4yks2axQ@quwytTHi)nY>KiXD-ZFa<&rkEd#mV!3` z+X^%4xjF8UXA)jd9_~#t0@~ddT)d%5BZHD+1_c>Xe}$&_8_U-(S@=cgj_TM$g^21M z|F*%WTAlv%hK|jDO>eZsN5`c%36Dm}Zsqs9k!T(hsXU31}^&7u9Mx+OMh4>uX`eOGFDzb7-qB-%3;6*zFNm3v08d%onxyNSURHO2q; zFJeNhW#Vo$4Nf1U$-6H|@IB0*`C9@<1j+Kh+XA75#h#WDBwX-Zn0q8+VtaUq$~7iS zWfOHNsc$Np1ZT{@X0Z{~vk&s*#9_g6Cxx_r)&J}!T4&&(;HR_nXiZ0Y#VoXV39)M-s-Re5=JkK0@O-QUtVHfyxs-7pKcMiKx#YRO!le|SUn z$JAQ}->!~K3V)_juUfN5Pza4x{32ZsDRCCh?o96vz#XUKY9K|LhA0@KIQ@1i{N*Pv zW2#4i=~SEL>ECCN-Ah=E<_+~%d<-$0g<5=5A1tDQ{^Ev~0>k1*5*U*<#CPdn zjR|{;^*T-*b0HaFEi!L2yy`TWwFVLwzP9$bBlsTs_uH#2ax8=SiqNfe(C&#^sVQ)_ zyBjR&=D_Gs6!*TmoHv?%*+)O`HP5dW%oT-(rsHm+K$=z&Q16f*T*BX?F&<=&Q*w+% zbV-zvR9aeuV2~$>&37+Am)ubmhX?rgzzx=F?E72q9_ZEQqPPzBa- zqj@OP-3pYJBG_Cgt`g#Q8BY4(82BaA<8W|x=B;)o(QQdECz{W1FP_1PckwR+-R{?U z1ts6e0PSqqe7UNEwrM{}Wt&?hB9qc=iOBJ6DOf?z!+nzH7mrUJpRh3aUf!V}Lxpb@ znyEYhs>p5}^`t78-O-M6%D&fZX#BZKdLJ^J^Ut{ys~0rO)D#AmVX-#Z@&r3V(aMvabH?&^InuE&cZ|(AztZWU;kG2wYSjPgf-tS)a|3 zHsnP+sbLlKES+LvyC)Cd*`}u#vA(^Jjg7H7I+pXez%QfoS|snr&{?9uzpDz!lO4Ee zTJk&`Ek41uQfp6o#|*M!`8zYlutg7lHVyqs)HZZ%iJO^Sh@IwER&IEBV2W2N4F$<+ zIdndNttVh5!!h2yzcxYB0LrgsZ64!@js1=8sw0~aA-PdAalwa?q*-eNN<|Wgy%LIJ z%zY@?!v^gcjjXfj1XaC3-GkDGhdj^D5mi#dct|B;w3IUJ$#pDcvC~2mSEj+@JmHX@ zSz|Mv3ZvHjDh56LNktnIPvz%K=7}eb0h9bkh46xXFEJB*Ei)^&-SC3dQhmUc>lZ@pr;nNj;%e!_lG@e zy@Fn>*U+%G4hwTDQm-pnos0#N_7XDSZ;)peU6-9H3%A<>O6Gqz+H4#3#r50o6d2ov?zxmYI`l@<7p0 zBygU?ufOVtXLpbX_V0*HdC1kH&JsiPV?av z7f;q^AwOKC3J|&hzd^zqYg801t8lpNgdx$Iw}APaY!IC#-cA=hb$Q|U9Qm7e%H zzkSRqi;9vH-_ksI#(w>d!uRzEGDovI*}79}%evjxs9|D&#y!d>At{H8VN=2b_DdVJ zt4tIz)SB_YHp7SDyeiq!01A!;ihp|Y;^Khx46*Qu4^K`iqx9dtyX|ZVO%tyWpP^vf zV*i|s3*?QC#!3`F(*{JbV?;3rW?Jd0#1ac`qEmV}sd+8bQ?kF_k8!5gm9|5s$?rA~ zvDU3{7XnDF1mfW^McOVk{1TL&;+2L?qKEEfW@d%tg+#S^9d9qW^jh*nQm}IxN*2rB}{L!lEs2T1(CObe#TE_ci1!4ZEm_7 z9sZQm&{?|53~noOb5cLV{v0I&3w(yYy5vpoGKx(La#M8Z@X{9s-aslm3{ZEwfx{Da z1laRsb{U1H1&Jv-RCuA2l2DwGhv~-p0utqnl;^cs`D~x%8VSX1pMKyB{h6=@8>m;D zqcd9buZGy@*vG&f=9yh(qTy80(2+y^CoIBdX~g&N-*oPXf_ud=HM8`4`#5i-9Knr?;4yhaZua z4{;n5nfHG}WuU)y>2&cQa*!|JvZETi+;#cY(+Zk4G-^hFh1hy3{>Q#bX#xlx51;~cu6^o zViJ|X#YoC2Dz3x7+|SKUs>J0!7#PSBvrPsj#Hbf!{>cVBpF$knv$B4 zS80v9iwsCI)ZuSb6vLW)`JSZg2JP=QH@!>_C4Rs8rxh7FsdK5>J`19@3KQp%r-wwJ zy)r%q82AN{&lMQn0W-U@!Y{#kHahOd%UC@0>cZl3bCc`SL(l0b>q{P{Y%55Pn}cS3 z4qgg@nyIQywrn;PCGoYpK@EXxShx1SQicfvF#kv4$ev^Aze^KGbNmk;O)#KK_1j1_9c2D@ZL8 zhsnzU5H!nQO#$=s?ujlRQD(^b&HZR5Rk)D@{`Bh{`Vx)1EXIFYP#m@aJs=zG@nR2K zG(=~`zK)1tYu?FEw_XfK(o}a79GJX-Se4Wc10&UVzCO z?ySbA{PyaAZ49dfkhDSplGdhdQX`qFm;_>Cl9$^k$US2@X2+D<&H@Y@1Ss-CGgT)7 zGF-#+VdA7ipYk>FshAUbZ0kSV6K8BSpT+;Cpi}ex`--gp=+1YjiRsye1fx7TO+VFc z+14qvu7A&+Mf=I$MBK?isiHkUusLQisDx`Pc*6&u}pTL%0lE3bp z*hwhW<&?I!%RM5Q_NptK@;`&~;oKx6pLh-NsZse8;bMR>5iEnpJ}_JHlb?TntUASR zk{Cj%N4=D7Z$pKl08FgCFbaoD`ljEdmBh{;X$DNA3SRg@udItULx%Zeko-`!7jsQJ ztVmdup=dQ3skO1bYB;jgZlzJVDsGOkzIL2$vfcfG4IeY2P&2C|;>Mrm_hgvYRShPs z9OrwQAsZ|{KH?&CTAXl~-40I$<1q*!V|^L%gidQv_oUy*c+MOT!?kGt%bD8L5C#vQ zfZP3CSG8&RSkRntlHNaX7tf&-dEpnQU;@zgalP(8Z$u}}z{G%xKZGQQMzPZ*O!|f) zYLT{LD0B%m5Ai=1VK+q7-Lxscv&vyK-Y`=u8TJK#E6cRQBo1*yI{ln2GF(qS#*JaF zz&rM))h&Z2o71(=Y5AwCmbV2dh}{;JiW+!-L8BT7;%&XTpPf);znYoZI3#S2_LR$K2>u03IBO!)93rnpwC&_$>+rMWwd` zub>uDvwV=fItK!=*9wSh6g6S9uY{vl-PySS1%WJYVBI$H6dX5_^=PG4eAOhoiXWW(oRH`d4uxPME9 z%ZbeXg^I_XfOoiy8+(b6U;5wOmsHEW;yKl?QKuAQeFDlDyZk!`dENLUTGd;zFIco5 zq%|UXiH^A+{ja}5S;ybiA<+6(hx-D%l+y^=G(Lg}fApu1n zh_b+-ydh+JR}@vX$;K$D1(t-oo`V&f%BuG3X`d1ST2cUtV!v8q=r;uPWJFhw@Q~18 zDUlL`Q*hb@CTaxqa;9*?O3{5PtInTTQQ=`}^BA!tPzpK$az1DYL<0n$RMH|CEdefI zLZ)~bisCnD(Pd;FGR5<%L}rM=_O(NdEyBMUu?i5_wX6_d5IA1$8Gg2a@Rfpp3KJNG zFb`2=8naXc6N&uLOd%w;ufe-Dpgn|@`7>pQ(68(>46Q9;S<_=z=fmisT3_*r z2|X$FijfGENZS1AAd(AfA^8vPAMV@~W+H+nb~_j(N9!V4BNM`3Fb*Kh;Uz}`mQJ4X z4*Rwh{ey=)EpMutP6RBU;!mmEU2pFY0OS6}o;T&`je}&!R>TphDqyw{j3a5H?5BjBB7v|Ad-qZSh0f5#UAj|LV)tl7$ ziJLFenT{H%t_-(a zPGYy8u;28>dGEGta{dirPE_PU-U8d&c<67)GbBbB)-X^ay;8m9D9UQ+c*dRb8+w z_7mmj_}}Wfw|N$nhFM~slX4lF!|-&4#=wVGV<)ob!Zp3;cRpd8jcWFt{v_Fd!zQ@a z^)AAsN+$goqo5oXAwAW-3jtj%ja@Hzcggrg^*3e}e-DD>CCZN%5^Tis1{l(kH~x(} znEY5&LSU!p{C&E85t{g5DJ?D5U&Q3tWTo;?Nnv?E1~#yVYezn&@%FmIY1)u}QK|Pg zJw9Hp)XXa^r->fowEDAYzD#uUN}a%Ml_cEkJEW2ht~($|AIB$MVb0>%aG}a6Y4O{I zRUt1G4%Vz*HnQ{XfQfexL&ucEzD_X}Rvr%de@MT;LvE^_j5^zCStMdHdzfS@^ymE! z-=JKm$V&v#x*Qn@qbTnuGuFFWfUa*)=yWepqtchkDL8(dw)->F`(Nm0VX6HE00=(+ zp$T<}eM|rDj`Kd-06$o_a*p3T71_{~z}%e`n|pv49CT_Xz2Lr1`)XvVF_OJCK2v0x zp7hns_G)*y6n(!c(D$I@#BNb<`-zdL`>E4n0e8At;m&9t!(M#N$Won3J<*57X|tPY z)F|&Q`WP2SHsz?KtSSm7Ano{&AAOoQ01j@viXt!=1KJ&Xagj-T=0Sz+E+9`hTsfT( zFS+gNYcQe~goakcp!82EEEsIXAgd+FA;ohn)4?-NU^bZ6Ga5aI{!Zmf4+VwnN=Xhw z13O$9dyj-dMX*d4Dg7WW!N=Gk^%4}@p_`)VPd0e>H9nEh>5fIyy*Jn`2Vn-Rd@9iq za^VPtl;f?1SY*rgBJVHCCoq-eKBU6TEz%?2Ai}-vD_OSIelulQJ?CJ4Pp0A;N6OJ- zfQwBL?K{+x9yde8%-25@E4H~30EV*@rjQ5`qo{a*mg3I~X`_isE-)#Kyd!i>xmK-w z|I#!4hH7lI9^^^5kOmmM`BLGAGqZM=A@kENwh4P@Kf8O2>A`QH<$N<3K^(LweigDi zT_s%uR@U)Z2@qqb#d#!*)IZpH1kXMeKMm8GizLE>nK~L@02h!8F!jieI!@Can z)rP!z97ml~{3kaVQot(gf3gAj?eWqko}4qc)ze&+y|tjad5g(n;AjwM z-p~zoc&pF36(%$a>32n?aXaW=-bs>n-4<%XruAIz|57Mg8K6jnm9c!xqmj!?qGofy z^8g!17{pU#Ys!}caitYOE)E99)ZL?{&J})d))(_3eA&=rGyFJsd=g`q^CXDSWm!_h zWf-epP5l17+2VK1E8YCj-9l$^*TG>m|Ls+2_hTV>k%S@P5nRd0i0aw*s z=&R>B0G`m8JCUb?E` zOoMv@U(YZrJ9F>UW9#B396<8xzy*!g4iG{YZ9#1f?|%WjU1H;N{P|??JFsuix&~Qm z!Q3w_E|Hq;96Fl*>)nMQ5q=LsDyr04oocAV+I`{lO7dUu5NAb-Ojv&U4l4`gd0Wuo zYn8v6Rxh@5mS)T2?J9mu%k|b4P{#gYN}wqmM?pgP zO6#;&bf4G|#VlXLnK}OOKb0mb-*a`vR>&0ne3QlCGNx*lS-b3TH!Z~Jo_1dsl6z+# z);l*zm%MOy8XFm2@7@Ig{$HmRq^Mqq|36d$+&cjm0s}B~#$I7aFBF&=AxLQffaf2- zDheP`;_G%}Ag2EPOSS#qw%1=`t%=!H5a7^LK>P8FMGNNcB))glsi87)Y>*rC;6Q~c z<OgEb8+X(-9upBz&KoE7QJqTw>yDLu^sA)VTb^@C+QBBPu&`CV~S9+D$ViU9QLj zDar+O9rz!RtAcQzG|}F2Mk&#t0a#K@gC{%T&n?cS)|rR_%}4!fTf;T4tR$JxIMSGcCeVtF6%z%wF4Nh)qfc8 zTWcABj02v|6H}u&99|7X-5X(n`sWnwT>QgQGW8kEmhU$k-cxUw5iq$~UO$ZTp8}os zuvQ!E61165)s%Q;r|cr2bOobE1TV_X|hyQ)JXvAzC0-+)9C$ls1rD$<F+1-vi?~K8OTM*m6)8!8$yEWE{_j;2J8&{jT+OqJ^M#I zHSn;5U0%{s5U^MM6-$Dffz6R0-FL!_R+qh=5ivTik;9Koz!&!akw+ZA;kP?puIHC` z7t0Ar^TfdjP59{f|Cab5{A07r_TNR@=-|kq7kGbP^T04QZ7WnQ6sn zZkD|R5!~W9!uUlo43}?)mVqXC60A}`XUTg!Ml0M)$J6Ck_l$q1c1LoG<;Wuv@Vej8 z>7s4mii{S!f2`1k!76`x>W(m>hkN!K)zclVAk}><1b9g2JI{cIk=Ee$j)0&R(-VX8QVv7*LYDr_|z;QY`jZ%u6tLv|mP_Z~jqKOA_|DJ)B8O z>oge3u%cCSLMLL$q&m;Nk>HGe;}fxp+YzitRJ&8;prPY+Ahri7K-}k zKhCv2j7vbqfFve=!QRHZ3|w7C*t23|KpZ>cDzlANE|)PkR=3M{9+^^tc(g9N#T_uA z_tE*yKMRJ0icKI|bcTx)(UeN`^FP?#uj_}RR7o*^&SKlIf5+Q3^zUxihu&xN#lcHs z&Y3TdlvMN|xOnt&*+iEIQ@aFn?5j?@gBP%@jt#+oQZqLj<|Ym>CFJC!a7<*Eb5vO8 zCyLaz`0bx}QpYq8N!heGX7z`CdZM$4wY@}gwYbG#105L;u~xA$UYeA)vet$AMd06` zu2Wx?RBi59DJ{CkBC~{HgIr%DZEH678tCW8P=;Zzr|m;Rd%*B_2)~W9)}OMoL9B=% zPOqzrd_}Q~md3N>f8JeuPitEh{*jXXVV}MhpDaT6H6AvK8Phre;04_N`1pk}{Q0Y$ zZALJ6b`5Q~cYWsZqZDDgKe0b~B3bSp&+In!`vMs^9WSHQaUsqQ_P6~*(d)%!lXI3c zgwIRpI$Z7zqours+^jC5%#!nI-vaQo7)gmgDb4(eLN&n*#G6)`V9i<)uQr2gV*os4 z1MQzH5~SZxBC*>h7Nn0?q`BNCr=)6p9AI1gvHo&0f}lv`KNPvcdghSFg)*tR|C_?& zZV+AIsW*#no$UhZ_zwPJY3xqaFc;wY!r-iDcZ^F&Mq`=l1!QAA9RFZ(bjZwUc$;H< ztj8x27tie9k;jP{fjQsN;;>M9)(uowy{x9wTwH5RK6;_!>QH)u+pZ#0~6PSt!EVp*9!)=%GfosN2YczcJ)Sh>D&dun}j}#BQ|| zZ>6_0T`uj-lHgGC`<3EkPpR6r4XN6Gr^x6x0JnXIUkpQ<3xHi|^5-m^^L4C-5 zDDz%}Z+!hQn#+#T;&Q?F6CQ2{RX!m>O^1FH1)s#&M4B4pMTG508Y(O69EivR%`~$?LEHL?bc&H*Gt>~INy}F+KkK=I=9cGM43%|+Hy{Yk7*k5wr|%-3Xzuhz45 zoaqx$aBx_Lbt(w*TYtN_@0R|@gE0wz4chB|e2fg?LKruPFteR&U^If#L162rwKr9u zQDKo`vGISE#>xmQrl&2xorYW2E&|Yh5&P_A@uGTDYK@hm zRJBkAMlIO;aAZX2rQl))q)e75Q5P-{!ozJmiFVZ_Sxn$#LN88iJ;Kl}|t^YO@3MyF(EXt+gc79<(5*Fnkei)3iGl&e8 z_)=wd2Rp43aRg8_A6cb$_l&n=F=LxbsL92qTkuZp0Ru6{*Mww|vFTcYKMa>FNSm4yt6Z<|Pp>fxVQ zMPu&x7xJ%+K8Wq|&rPNuxtS0oELxXKTN_L4On+ExWv7e56iQ^$m>r+1`9*_8C!Ihs z2?TUIdrn28X4E)TrYl=c=ILQ+r*v2UXum85L7R8zbfGhK#w74~ z+&Q>^|5g3|uM;`r35G5_4Y%IW3>kl7Y_KxBwD1|f+MGN9)N@tKFS4h<2an83hvZ5g zI3OVDhV3JX%Pm2Q4``Gb)^5z%BnK2d4iD5fi(Ez#D`m=Sv zili5oHu#fpK4ia8XKzVx>6r;~2FLC=+d8ttbOBm`<&P!g25|~6=!Q@g?seqLney|7 z@s?>y7*iZB)BVmlRVzGBh8R7MKhgm@KZkmHX#6Rn-`r;ybhBH2WYcF7W_3$q%64Ua z!}%2iC~^?fwq?^H(nc(P8F-aEW5$OMK|!@^Tj695X~n3jsz^#mpx)uVxmnCj?x%1~ zH8nOiI%?L~u)*6SJUy3|mMSQ!1XjXlGGGDQS)DRNiPpdB2@c=Z_^j z^ZE3Roq>iJZj@)_osVapR}#7N3^FFF$kS4OoKOcyo&I^3L+B;sROnvpL9&zZmyiSmd^%svYvHYRhm|UR zYeL?=PrLRCzc;b!{)v=FR6EpCnA?=(n7&An=#P$PbBB!SGV%iHtyhjV2Lz8ha1nRg zhs6NQI~5jIJk2)Vc9%|DE7#CCH#1iJiSq^rw0iWnT(7*bqjD3pQ0+EwZAcZ*@T0oP zD$joa|Ji0XDAyX%rR>T!!JK*D?BdlFDe34>Wtl;k>o8S5;E2;P5L$# ziC(nLh&(9WEC;_dbU;U)>41|W10F}9`Z`K^2r&!BpL`f8`I?j6hR1824$-~q74)8m zl*-#!fNB4zKB7_hgHBFY(C(HEMgk4@;rpfn_yl zUE~fjh-8I@eP57h#at@s7^s*ntkpAgB>w2ZT$>9Fe~OK#4pbRdYju^%wiBm;j>Z#M zFlAUZ#pe<%jqa0cN_?j2l2JN4ZjMI^*Phi{-HL(~XBB%1-*895yKrQkHhQ~<`CHk1 z;*@ugqy?2E9#Ol3d+RM%gcA}IMrf$maOg-mk(3=t5tz4(t*J-~{EQ6eRv2HcGQ;YL zD5mC%cxivh6p@o*4;J1^!3z;S^Lg?v>stU~3V(jDDoUDYBxFJs*M_RnnImixGc zbq%Gx^=4yfPf`=6^)8L#C)D*VA#T|3L_-PRqT0V~QB=do;V+p(G0fBm#{b(5<+G+$ zc)iRt1VYa8^#sF*$p5ZPf=+1EoBr6@%}kL8sneKQED$J9x>HOoC@(Pc4lO&*@qD<` z9~cO%RJj|+h-)H8ISC*aP`6eTh!m8G8ekP%zU~)>tlYT1^;y0QY?1~C0gT<<$S?4Y z>0H`V<4OC$(nsi+bR;H-=c+yyi!vQB!t9HFv%axCK$`W;!OT6sj+*;$=0_q!L1 zG!$C@qF-b&r{V4)r~oE>r{SrApHUIP*^S0)0Pd0(<+;92iFNMomAuL1D z867-~iL?h>3Wd3awYo<}F(03YmAjb%$Rx{LE9n|d3{>>4cCX+#pXWPD*Ypkn1I|R4 z)7cQ;y9NsE2&7I*q5Jeos=ptN z@M~U?+(Db*6T)*UXW{{-*oDlywwK8tl#wR?g=FE*7lF6l?nWkhGP^y4H{};bgyKXD z48W5Cd)>IW=&pOgeV>RE`dOdw)Iu5Xa;hfeL%^EtU}-5uSoumo`1N^hztG_8AhhUI z^*U+Xu!#*%W(^Foxgg5fON86sB66*^W9FPpZY3Cfp)w@)nD(=zw@HPB^sVdho*0ym zN8XI$Dh(ICIjfJPAM%e6IQ``kD$rK!uze%ZvEpo(Pt@bc7$PNAWgq63ZIe~>dsx!= z95bG;yE-cabAIc7LH)2NiinyL`5mO+KP00{?~;MTD2yrlQ{!klr!4Pl^vV!R`Zq`? z*e`So@NQlb=&rGvPBDoIN(v|GEzM+JiUt;+jKX%aObH7MeIAf^XRqSBxdk=H50&D; zJ+Am$3CU%TuDB#7ITasMzF3cjjur-u=l4`{eDbeQx!LKNm-{#T<5O5!JcR^R)ZGhf zy^Stg&bw7RMv1e-{9Yw7n$mKZj>jZeQ^NxhyV<@cnD91pMFZ*X+WvY$dY1V?nc4_LZ2sO*d0978p$UTNL^d;WxwyCS80g4jPjMwv(VaT z9KqY^B&oePxWZ4<$}Oq=C?Vkbn1Rqk(hCsK^hoTpIlgVGbo<3jF>Jb3XhVIa8=bPA z-qI6bV$0-Sc5=Mr_c9nyp0?5PmKWCEYGGg2=ZR_hEC<~NG?2dgpSmGc2)f<|E+J)V z^3xd(l1EQzK|-rYgkn&@XOiaY_c#e7d;nnY4 z^TVA9BIoVC?*Yxec#L}ZsK_`9h-x6_p+4rl^d@Blyl(;&a^#g+=7l=>kBkp&f=AuH zQc_WRIKEe{HH7BCymWg|R2QTqr(&Lf3S+792ytUG-S=vpOjDwD z6uf*xWODGZhgI04zl2d!cgblVr>Dlq3Doj+x_Iud1NpmqD>oHmvRZjGAtE{*H&3RL zDGU?}0=;$l!sD8(oj83^J+|yZ;~U8P`wYv|EW-H!0r@q)Nni;71T!w`OH^3 zETE?Zs`7KANzm;ibYRdE4iefkLjLv8-N8 z_UC++>s3aQs?^c@6XtLZ-~bXCxk;t<*r^J@zUzaT=lEN3T5#{cAJ<^LY6zIjvBJ`R z=y>9>m=4^PgTh*^oLq^dmodJ3Yvr`5B&ik*?8-7rg-eCqB8<3u4G)hvIXQBIKszbh zaN6M?TeX%=S{Z#Fwy-%J*7^q+Mm|JeW*J~5@>+6GpN~zrhoz+|D@z+MW{H8Y(l=8h zW8&(9n6K$6u?eG9m5rDC*I73B+Eax?$u&o+mzBJ?s_L4v!qsPQFAUnyCU5q%rs<{@ zR0C}BAQD|z(B)k?NP~gU4xj)0oL}6`+}x6z+lY0YL`j@2k?id5K9X_=ZtD(gwW$kT zbJbmMvq)v^^O=>Oo1Km?RSF!*<}#afFu>U>c?a^g{;rCUiwo&L4Y3(>s*ILPU8ua7lsWPURd!)-ZMoy-7s&V`FpaO%Ph06H&yG}4V20| z(A#-N!xNdW<`a(>r@?89{O-3l;P}gGwJ#ry(9DQBIBwm<`Q-t{p#_mpSy36|gQ~`l z6vmaIcd43k)gBfXv2@~%pOx}{uc8$0{Z9agC z!`Ui-C8w9#0Dj83_e3|tiynjxEO)(&6&72QL<4o z8L7r$LA>uLD`%!>s!u#_$mD=Ydo(Hp4h)oH7{WkzM@2+@rd`*$#achj?^IDcAJ-uUDfN=YN${?yZw|)%Ya398_-l?z?ggL%}i8G^vQ&`)w#J; zr=emb|#94t&9>)~sXeOz_pqBbi7d|n83JUP0~esbRJF)+N!%5J-%L_&Y;j=GcsZ zO8xTu+Uw12bf(&ZIH5&h!MS3UHW^kH4lFFQ+$#95)*cGO?9JC+fi)) zn=YfvV6s)1;@?CX2^}f#@?>Cf){pX-z)VL_7cbpKMQ>zTo0*%`YJ56MRmQdp#KnBQ zIm(juBGB<*jFwRY8;34yzN}6AhKzRV?FC^3?(!;6w?E4o8q0RaJe}{?r=bXM6;1WE z$E)qZjro;@{zy4VX(?|XE9v&Ia<}_b6b$SRyOgh!_~#k;E9a}%J~4osL%|Iv&GB;m zFA#WV1)gQ&y+cAmV%HD_;JSKpr*TD$F7{}5X1qSx(9l9Q%)WiR=qcd##wx9?Z8ba) z>y(*cVLN&r(i1bs9bG_Pd_C-Rapf1ku<%<^Wkh!B-hIy#2nV$58l2j3*ZzTZ__mU| z;H~N8_IvOB`#r~?fj|@X4`uE^>7=@?zkTWg%sWHSSdjFP(!-fhk@r((tGK{LQ&w8# z>ag=$OtCC3ElfqcodyUgIl!*seJTzMdRc%hwl$~9_L0$cC&=i$IUm*9Y&U;=2RB

    ULkE&k)eyeiz&?|))8h(aT21irGPWLu_`${c|Xii|ruw2uraZ|#5bonV6A z;GKwk@smySwo)YPhkL(wIzbY5x82mp4to)!CrzDlyTQeH0CdnAoV_pv_|J@1Tz&ny zkLHrsn6Bn%E$K+P-%B%ZZ@ZqNrq7e^#Q@y-ygS<2r5^-XcpX=(@so=U+|KsV_ynys z`WuIw!cq%NR>5jVPj0%nJ<|{Ma6O(p&UNt@aqbn%PJ9@qj@5u~M(ezG6I(Dd+pbA( zYRXQ{PuKZ-s{emXy<>D<;kGv1B#mvWY1G(_)!1%q+qP}nO&U9CZ0Ct>+t#=CIs3fh zTfg!v&ln4H&U;?!RWoKwZpByA;@!Ky85Ewo9_7uvB=Hut~K0>}0Tj{uIV~PC6IbhGoTgb;d zi)#kYUH%-^G8@d-j_1gh|-IQ0c7+pY_@$1C%A!S+*TQ2?2?tDc#;$6;l7 z+$bSEJicstg_Gt9J-f^1c&~M~C(2)YOg2W&sNT|e-zboOaeA7AeaUq@tty`{EG{L% z!pwlxsN$bDWofz%`rjXam#kbw+#%gWBqbAu+%J3HF){2J{NIL}embB3G0elpCt8<( zMF7ng0jTxE&SdiS$9dSKD%Z$DLIW+8x0~k zdnwje4Q*{JbG>W5ljXAcP0oQa{x%}+?k=J!?E&ri=}b?!X?WIY&22X2WIf>hrSusx zGb39w=C+0dQ-@#WVp}b-5;OZ}yGs0NGc`4p)fVI6%%Coe)J<<|wM|maftId>p1|hR z;L&<-Yih{p+akucxVc$Q$8ULx{#IlPrg&~ew|Ks$tf~kX0s9r}0MoCusxSm6J(D(< zG1U~hvaawQdYt`|K5tVCo*vHlQ|1a6hu8r;41Ivcg+ zVc|A&{4J}BK??sa3=BB#D*zD<7C76U4o>Dacs=;p_W{vn!0=-bKvopai-qk zN8@TeJ~b&5jcs7|wzU>*4_~_KdV2IO0E#)AJLnKfJmqu}2y^|?^?=)bxgUy}li1!w z=;8D*m=-*1_0Rd~X={JKgYxjB(_%RW(d`6Q7yn0|+Svkz z_@Pyj7BGi0HDd+!C)R4tVsUA3tzxh)Z*tJ{z-c$1Y1H50>dK<;n|7Ph*P$LR_GOn$ zh(gO5S<@!ciHY5>J?`I+k*Ft4HlFONF8cgJRbL=lulVy3n;zD0>S&A_2($E zE_S&a7Z6~}G_P_TL@@vu23(*Nf7-k*XP6KLEYnA5O*5hQg=6aSo(MKF1QP9kM=lOd}(I2<8TfdbR4Qlh_4`FSN z^L20{nIrCRbh!MBQW~N!SM!PNF)p}e$NxBN;P39CE$`>HFljs=WHjo&yPm>(^r`|5ELIt6ll{l@^tWm)-RQb@I^l=7 z9*z)f2JZ<{64Pa%sy07XLDytRZ>^^<>0<$X5kdXgQ*z15Nu_Nuji*OfW0U+WdM#BDA!E7La1d+v1(b=*?~2zS?-Y}TmH1xZPB7mlHXT&`c-p_2l=-Xq~7InFlD zxO%Op2D>g%hw^sEySk8nF_rwq&qNU+ZvN;x+dv?a!DnQDr=f>KX}LWU1cnU1$$X#^ zI{7T$5BZ_mcyd^G`98BNK>x;n{8%2c7VwcJ3fukMM$bF0HCs4KhX2w$^sx~esjYbn zqGM2Tp0}iA(E91rR?x1cDtmF%;Rq-tX(+~{;RdHPra{wfR}Zoh3L`}q!h+L&6g4;1 z_cps?7zdbVZ=1P3mw*}f>dc16`ea z`i(T-B^V3T+P3Srh)wV|rk6bq#19$?2@-E5J-tVebP(*&p@M3Z6Z3)TugHfFxqbPB5#MnO&G7XS9>RvS?)&;%`x5!gBp z6B+zbiH98UXVx{Ux&TWYWCP6o;lElxo65e~BQ69mRa9CEd)T=#+d40MOVp@RjOrmbYy7jSka?*r}Yhi?bC^x6;z+7ODG+$L>}FVLeNQnNzJYv@SZ z)rqI#X<+y+e*XLja4z3AxCm`oPV&F&(?;cb^bZ8ENvYE=^i+CI(5?FO&$G>qTp?*^ zuc~YA8SS^bk8+Nz)YhZ704Ds`PxjxD(7uwgeeF3ZFE4c^n$Y4}Z0Jb$uSG5M%W2a~ zi7wO*+f2Q`RmDUlI{K2;wtaGmQU%#?I2xS6rSVw3#&@+y&uj{eip09@_$=PwTmDf> zsv6~0W%M)*LnIg=EEiQmPbZ30JBOP(qe8%{p5W(9WkJQ;@p&ksHXFCoMP5nLd@zi_#GwTqj3`KuBdgk`=35oPZ#YItdT#hO=*=I zRsf&9*Kcl@9uZV5lmJUlScUeMN23)qIbg&8G6+=!?h#NL>P<Zt+pRY>I6B|P-^LOx6k$!HM5Yhad8C!3OE_ylUvd8 z@Jl}!8ftNFf$?(lU3Z?U%`8a(^;X$pTf@}*KN8>p02mc36WLo!Dgit3Pwz*kh(?5}^E4}V=eE9;6Sb^NJywXCneWoSzg(6{ zww%3nxmHH72qvUh@R)h%e(Q7`EDDu*(hybi6`Fm5udFFCeGyJw(nIdRUh!c%`D%7b zDMIsD!Vj9Mz|iN=^Ro~_ejZ3h`Ig6PFPjV9p&7$ut^bF!4@*|t7OCJpGTQfbro$K1BL5=lZjNfinFqiw0)f#d#%6O!j*|SCCUELUSJqE*QCZoTu?;8o%=edV$Ezw} zVT$`xzbQ1S;m*0b-be%7;9`0cQp;PX1A4J&>1%g#tBPmBNGm_x=)~x=>mg~JQsRS& z+e!F{Q5ArxmeA#BD`|Ilzvlv*$2}v3%_Wqe!^1st%I^syOO8(0x^6DnUIl+Bj-|DE z;6cl^A96WVchQLAT)MEtkj!<=^=kCpOJ~|$RulW&TLXh5NLs?-Ebn(w2x}Bk!_qQc zfEwsoSwY?YqRrSM18<}jHhs;pR-Dcb$91Kyk1h6XzkSrb%y` z>)nA&dw&R|*Kp(aS8Rn)Oj#%oT~#i2;mBYrtU*~UxjHocOspc5idwkFA^mWVbo(c~ z_rKB_FfgPd-CYf#?O}sj)z52w_DpZPQ=%)%;{l;5`CLJ&-=2tPni`58(Npn|Qyc0e z-@~TJSp%=;z^Zi76MLMyuLOa{>dLVGmLY%mbs;|yJ#91y3M$bGfq?Uuq~r-uxPqU9 z-<%Ml5OKBGSRtDI1~EYZ?C=YXqUyrNHn%+r0hV}+@3#W3TK3;RWifX+fE3(*|H(by z{c-`@_2fi`Do=1`q&EEAiZ)3lSoLc}^v97Y+UvzB_mQ^`E$;B)Dp-wFXTo33Llvy$u5?X?$|Z^Xty%^+uiJAlpE` zmxdmpFt6RjQ^w>JDG5?lQKg3((*8_wCJ;ay2R(jEWeeo0M%kX8b(`gBv9q!ahNCPe zC8Su`nj)5~|I+*8W|AfCKpn<+(zp((_>ONo$W;gjghv0luKst4SsAjRkp5a<83`K;?rUPYGt_^KdmOlvxp&-SP+OJT+Hc!rWo4tN zpo5BuCm1qJL)B1U2fY6=Fy%^Y84WBd3Q8lB!`~3yCTQ)NiBJXg-_-5CpO>`CQi=!L zy6J^|X?7vB*EVH-d=pmWuJ}{*ReVCH6$R$>u5-6&MNL8k_ln26wltuix7c^;V1JLD zR*z2Gnq|x-88f-1DOHbxp1CADdSKl6w(arq{(9gaN32fVwL~fL^|ZYa8@shFQdK;u z{#)_*eHW@g$Oz3a0Jl_^RSmu~IPUs;f#vTTnH-`V>ZWU;I0f`QYeG{;=xu(fi<*F8 zpvwOcd=rt);1Auh+VvMLX=z$qTLFLj9}9$AK0eRg$H~X#b1^@#8%$0}cY%n#&{LFT zeSKTRs%cVZgfFefnK-H{$`qnQyGaw`qvt)y7*0MeRgd+}AD3Ran?BNtDJn@Ulai1Uff)INhOYR*eUTuMeZz+`2Pva1heHzPTN-;J<8}|I z3iD4BfdOMrk`vV{@zD;NqYw3fw9+T6cS&SgbHi*uGE^qBRV(~D^LP+F_zyZe;ghIvf{ zo0lkkd0f9KEM7iZ4NKmz={+uqvs2x+1@EIw5+VFAivI}~0IqI-r%qC8^0JEZI=zX6 zx|ta=ts!h62g{0Ga|$G&B5b|4SG!+qoGP2O+aaDo7YZG`urQZEj3xjh6@d9bUQ}Ke zfgSBM+r#peovfj%$QRZ}5rOYke+Gtwmpqz3COR=YIZ(z$bm7po(@0zt&Zg~eMY+|k z8He6e9%VC8zt}*+oywfbeH4PI9DZ(M`nmH~3n;1^%%$4p8(DLs83mrklY4syLECi_bs>2Y=Q66Xyh69}og?|A|Ly`p1ff-tTQ;r&;f30=g?E`~WGy-Nbnb;a}+85#TM0 zyQ`=w2jIiPjzC(bQ2i}G`?OR;T3obqc6JuEXzPsc$-;y;GBTbd=Iy&g58MSpq&LA> zw|xVr5Fxih=h~pWkx1OhkSUcF)b>r28*ZcF_TAD+Is)Q6RL~S>W~6-7VQp;Ow9B@0 zQqv@#b^t@IbRJg?732AE?NGshXLolJc_4o2d;xK*Qdsi=z>%+$4YdojJ)9xbx{y0@ z2AL|NA|ptNvsWBhSqRlQSePixKe8~;W9^Yk^w2o~V5FTED4Hj@xL*d*1X(-LKd*Li zCHRYf^>ghrn+Hj|X{ySr?p%L8I>JA8JVLR@z_5cR^ALRjBYvjKvxjuLDivUsH5P#k z1g(hq^INuyXSwa6pCRxi3jd!1f$JmW}(;L@IFor7RaBR$(z7H<+X zJ^cx4Bm*ln)+(vg4K5}-h!I`G0wFB9<1vc~JcS5^rvA^TN79|&R$g9Smq6Zwch1De z$8~XX9Qh_E@w!$!OQD*iruDQK`58}U-ZWn7cK~>rTz*+8V{xY?rDTk$Va{PSEw9L; zg>ap%s59ThnlWZ^cOWF9WX=$D3t(sMp|b-%sgIvE6J>uLoy_*mZx`K?loA!Yoq=IL zIQ#yYtds>7em@Ig&Gvqn+K~I7)9c&h;XnsvuPFj;isK{w*5G9a0|O)95B49dJAJp! ziybF#TFuS11}GmKZlpz?5%w&UQj$Bmoxs%A^zjcLg_eez%=3;R0hy+}{3-^1>2 z0?NTHr@_gr;lkU++H7g8zwHe%lmAMqaat(N)W|W7?a0U|x%DUK9-2~soJHKVS;#&Z z&0XBF!*umVGT|cQB2UDN((?R4sSKVUajC3+GGg4Yu;DFNN250pZD!f6aK_+8*h$A@ z2WdA7F589Uy#6&gxt15^p#!d7}&CEouz&pn`38K}qTo+?nSd zD>VM^BOrOp6Ttc}ItZfrLAx-QqAyY7V!fuSsWkRU#YtMGxtX&yU3t3*=Wu%}swE+T zPw82MhYSmI5WIv&`UYp_EQ2VlR0tH#-$JDbcK3V1@rgq}U5?$RKHY6hV)E1NomHHH zbw@--1mIHPLvPdN1=)X%W4mkSdOd$0mBh+RwnirQTW?s7B{d}_=_V|(6gA*`C&hPd z9+wb=@yYIY)xYND*az5F+V$Z-#(<6v(6UHcTZVCT^khvQ-V|mb4Vs!8jqH*KzE@>; z{xoX$q)e@9_R7V;#yZBw2d^5H9K%S)G~P3!8Kbe={<*TXo^val$p z?Sy~0QD(Y`&lejB4-b~joDhQ+iWGKx@=+grnhGR%daS?dTPVVzqy`0jE$p;-Em_+k#QI~%NUZH-NUquvmAP$<`w%cw# zv~jtu*$FG{7Cug0E9vl>gXJL%YjCc7soVY_eOsR6V4`K9lM35;T61&!Tt3Ui;`-;* zdhyv%^haDqY4@q=y?Ij0+`VJKZj8t1B*5=#6TBD;M{z8wVd}rx852fP7 z2*<16zki{?{x)dpNcye0=H|`hhH~VlZg%0xmX6D5;B#Zvn(m`Zoqx9XEh3ZHj4MwV z?ZGloN`ITbZCL5MfGtG?d}R0ia|b0DpAUF!!Y&$a5KRdD&`CPKCg;-d@aXqJinz;w zZ%sAz3CW3&q=4&4yTc(4_$%}x&>cx7uETGKChtC<%1YWqg%o#2Dnsi-WjgKdq8|S~ zT4bCUJvcBs9znaWN`JQIT@DTU! z8ygoTc&uh@I<|KH!YfFWQnQ1!VpZo{UEQMpiS|UBmuP^VB9}vaNA35sH~xKVg>Y(H z=|ZP{`}HL-B!%K5qB1!uix!2DngFe+mxG5f$cZsvHe5=J(-=$;`jPAAYGs}Cg6NTc z{m%V1z6c^NGn>VC?r!WeXJTYrRaxQ2{W*tq8H$5vG|wp|Cfj@LR8mp8J*uLjAMo)B=eJv#6dT*BO`C;( ziLvUl26%NCWsL6K@qR<)(#W-W#WH7}&dU7q(VI0kxVswJ74w@qFs|Rf$qxuh8;h)Z zN^)Yv>Tp2!`(8wf6FFef&ey=&Wst%WNqTToAYr3?tyxK=*jTMPnkw)V7k&YWIlwWc zTkNDV5s-vj?8q14HN6j!A%UE$Z0Kt_@7vaGz)1RR)FA0YeTtlzbDc56K_lYi4*AR? zS6%j}Eb90~b{(RA1zy3MDz zk?aSTG!!quee;Fn@4_&>JCJr8;3m$K;4?^uSjJ$&AqL6(D*S1MlEQac)?Fw5M;~1| zWm)<5#3WqSi3>;O9&QDiHBdsT9_2CpTg@%K!U05rVuHp?+i{RD=y*ds7wZ-Pp-BVP_1T-rYM}GcV8yK}|$rJyv&|pcauOG2@I;-7g6l~D%Atef9 z*xANT!@BQ59Lhg5`Ihn58!Mi+*wy_1#J_wb z#6X>=OY0{K6SJvF!E;h~0VQ8>RPpZ-tqhv=-M~HzW>nR8r?Xx!FRc7)p(`nS4r-Vy zM|mvJpivN4~z+%lW55t=&n=O7tW-I?|F2ZQRnd#UKMnLJ*|qjGXE zE!!i)bf%b?G))8_a~pocu+Il+&=S{9A~BiN*HM7-NRaU{>>=#3?VY3NfHKKK(1F zSk<{^jbZ2?h+td@!8#x@^XaOHeU(Wd|0`+jjrH5<-C=o+eZ-qn+guV5)1@S1S^Tetmgk{nO%e8Ix?XTse$79&wxv8jJrmA?l_jZY)1HBl%gBrKW7UNjqukaa~%7Ue=R>CPr_(p^y((sSJ{n`bi_xnCtKEN6NSqiW;onaTM7&MaRsI#;nfX zr6jsZx^^ERi7WJIIgdSQZMi>t$fknJX<$_KIioH1tGOk|SI2po@w!kI#;n5a=SV9B zTH`6xNsSQ_a_>bG%xdFUv!Fiw2IQlK+BB@cQ}R)5vXOK2R2dCnp?`!COWw{?N5w*a z9wgT6Qn&9j(DgwEzJwuq(8i}bS?d>u%PAbd;<%C#SMD~Zo#M+(4sT~dL9v|&Okh(S zJPi9uV+UsAOsnL^cY^Pq;>Rd`vi-mN2j1(-iHi*qY)+CL8~@|WXeaB51sFb4JYz|t zJ@G3bBieX{iyYfQzku{=iP@2!;m{?^v(iu`y0ghABdH%|k)Dz63|XipSUW(Ng0E{Z zsH4J(R9e=oJiIxVP$hB&^5tytn^1E2Y66DehC(O6MX!ABA=u1-K$hHUDZyGSUv2s>8ye4qve4QQO+#ZJlBP0rLv-`%^ zav}tRsR@C8U=fJkJ6#8t!zdYKHyN{~#%O>;kykUgboPR0B*;sB zIBN4JcCZx4j8KiG5%o4^O-{&oZtW9a?~8zq3zcFy^2k$T}-r`oh<0y~pt zJjA_PEI{`#X1;X%-wvD^80>8h90rDHm3$iFuTZ8SY7pn$=}0m^I0b8*T+#h^$fvzu zhH%tcOi_m76TnH(kK{!$lyt?Sluq`HTp#+&hTnuygb_2yO3B?nKAC>jW0a1lCX}D? z6m_p-@}+5Dt;lPsMsw~o)i!ZV0m}%iXNqwtY7kz4F$q$Fa91wmGQ!rt5PeYZn>Mac z@AE!H?M`tap~8Tvu&Nv^9H)|cf6eb5m3F0K8kh`QH9MyUdR9X*Zc(aOk@lOp9>gkX={;kDGQJYG(V!jZ zhm~IUfVcxq-R$uSV!`2444op#oCrMGM-Q;Tii4|L;S8_e-7Zt0kO$UAC3fvweRjHM zw8yhhiDdnZeu>PFZO?RX11G`)se5pAX6+2Ek!jYd9tVk4Y&-1bZwvAG+7L})m|@FW4@a*_ z?{paShz(O~5JQ??!Tfto&R&yEttKmj7^5Kgr_1?N)^(OL)srSo8ZZ-0rK7Na+Kk&X z#y*K2-(DIk=jD!IIh5LunFnamN?J}i>;Amj_f+W)7icXfsY#o8)fwvrS+s6oGHbV0 z-7)ltShDhPkZ8%>$}Bg+{K|v-RNX}too#^Bh`;Ng$`}|grFuiBi=Jlh;Gbqcw{{Fl zi<=`wT&Y?3k>1qgr#~}m4>AHRSgfR|YM8#~ZLP2+j{Q)mV#QR0*F>#;ip%}-zpX6j zl4yJZ#773BNkux((92=!QQf?^HS^!kWa!}+j}8wQkMhw0ugMRBKStF!kSPDqtQ7I{?4i0 zK~@ZNn#QEF#g>t*+J4Pe0i$5F?n~EU%L@m#G7>WK>uYxKh7hS!Zw!i~Vr#cF2<+RO^0)Jb*<{JF0^Da(_b}vRJoG+1c0@Q>!;? z7sJr?4Vz|_E0oKz3tenX@#Ymp&z0WeMcRf2|Nq}3>*=WR@2Ds%UWS+kXJ=eCOKlLo zD^4y(VP~XxVE!R1VNgKw=+~f6sQ=uu|GNmg8KJmJ2)08*8Y;%~!pXSqPRfn*{+5^N zXvwFc5beJ2HD1;?w@|KLR`uNUlo#^00Af6Yq-l`}y+=XsDB5wNoGx_@<){;c|Nck6 z@3s`v?Ytj!ULClwuzpRIr%ugpE06~(h!C`TVuk%z2%L_X@12wymf7FP{XfXlvA$NXx-Lt=w--@Q&qxW;&_(1$?~|L_tgpqhms9?= zSMQEzG=|i)g@=nWgQfssc6?f~a<6GGxZT*NQ^|~sAw`IG%JU|+?!mBg1Cu`AY)4@F z7B?Yvc8Yhh&%My}WEAF_ExY=HbR+L%|F1KM;c+3I|5NNPrQJ$WasRffq+3K_Ka!-= ze|wch+E(TRVChz35`WfylsBFPw%kU(d^TxJ=Lf9fWmc+H%R7ta;R8C5zb@}31^EY` zC%ezwC8Cn$KbFnY-P1W`kkF%PdMjY1PL3G# zc}~(=4k_dKvNbK&Z0U#_&AdKitATV)z&mk8yvtw94p@e~{rtj0T35fj{@=w2Ndtii zI~E{90iZbO1>4H9gFl&Ll9K#9Ue6GFF>`ogP(ck^#YO|9m=XW)sUnMmy$3?5*A+To z1S4r*Yo_{w%{#KBm7c=$pJBCP%~BF>$sa}vP7(b$Qd-Bg(`-$j!wo5b(C&2dcch2;8C5=t@nU#B)}zFqZEel7y`4;vx-{=|H*9S=4x+y<=k!~n@YHv7;XP?QwB z^$wmu+$|UmUk4XxQJvCRwJJ4ox10%SM)kJw6jZvRfAXOJFs;!H3>Mm4!_k^W?^0D$ z;Xsp7)v@Vr(LX1w=#f*`26)ep3tiZo>z+_VoOefa*7CV752_X#cmTN>xMiU}8(0s= z@XxA%5TP>boG#mH*~&#){%QZcl)0+}R^H}&jCXSk;j0sLKfuSrP)T-}sqbw6^g6Fm z6H(`k1$VRGJChK_GAYNi$UBsdmTGIiG*Wcpfmp;_Wr87p&G9s4ZD4a`sSo6P(&n=( zZ*Pdog~mi|vhU^`fh)Nfr!B_g8?Ggxn*V0Bj~~S%!Ei8MZ}ZpxK^5Mp`WTsgMFq^HKywQjZFURi z@QazHBsOS(6F(8W>3XZ3u=L$3Mpm2asN{tBXT}TS%*i1i6*Yx_`{gMgRk|m`x8G3XW^-Ww8wF6o7aK#u}>#Zhp8|T3x%5O3tmh(A1#C;*kPENJTp> zQ#UTVH2-gQX1oYr_U$R04Db0)Kta}BMMA(gMBZ~Fp=bD=isi25KON@Q*46;;G^0rr zdr@al^?V^VcS^~H1K0Gz_V1T#V8PfvPM{9S*$w-2jE8^ryEDEB)K_^~*X0Yw0q`mT zcNPt(Hoz(d!_IlAXt^$@jC9z<*_q7^_3cguv6)tDYAm}ce`9c$8-T$9vY@IYR~X2& zpG1mswQ=`AMNKu{9wR9kVKseDd9goOG@cYN8815WKss)AfSw#*T%=+ z-r+`mUI_i^GFSx`7I0o8S9j;cmB;^4apk$>6BwDMM0AzKNWs#9rg@ zw+IuLD_{D!y*(|wlW`+8#1TLBwV2iY^s5N1Ng3neN^w~rD~&qe*c4HaV4|kK-n$^n z-FSxa^d}nA66Ca_%cOb^;*APE3~C^9U!lFzXIYEtz>1rIl-sIS@^qdzHB6(h;;$JFK%25Z;6ZOYnJop#{5EHGU)H8UC-4! zql!~Sv^qGuqG_7bof_j!_!aWxTSkdtQP*||=C=qn`buP=ZK(oO*A*oViNmZ2Rp z=t^I_Yu4zfX~E^@8`uDnpj4zJR;%py=lGOlFnDb?y6B0+2kO6N8{CffKvD@H)M9q1 zTdg9RW}0JZVx^pKiSB2rV}!65-vJak@UL%WR8(?H=^*%yis^KjjfVc)D} zh@b9m7lW0%*pcvX(RAYrglj_O`MO%Z0uO4cgjRx8g`Gj~+pQV`eD#YAkc$(Ji$O0? z4mgaUee-TjRq}qXFygxfI;N>m{UPoOYeJogKc-)zlr#ACbNlu;zT(6T=?tfB_stE}xN{UKKii&DzNXiO=v8o^#niiV?4&M|*6!PBx zEF^+=D7kzor1OaSd%HsY(-{^2luSkSUjV3vWOC{L6g+&^X7zAADYwqkszF~2Y5*=j2hNyA7g=}in)fQrLP6=2P`NWP(}Zl zD4$UM#&b0TCOn%kurMyx?l{s+HCI;y6rMFpF6N5K(niHXL}7x&LV_&KECDn7ee}Q% zbI;qZ*oznMeFh_GND)W~^u8;SJ%c)PtEFc#1^w-h32t@Tl;Uh>@)miDTD%lUac zI6XQ;{nKk>@^ye(PA?OR4L2tkqJeL`Amp&l^v`68CEj(R;-b)!@Df4r+;a#}q=ErxCls!F zx~#XShI7Nz)Z~b`EaJ@r4Vi`*uMAw|gh9Ur-zh%ZM{O}YhU!8CA2-z@>bZ}~FXd?Q+($YKrosAW;h zxmuuE*CZ`$cph>m>WAQ;cXoVWJ>o|qS~Fq}Z9lt*nI9}ret6JR6&RS@F+r7@A8!97 z`ihO56Tb?}PY(6ov~xJ*N)+%~OSG$I^;A}E?P~YAIys@O)n<8Wad^1z>veDQct8j^ zNoO6WCe0Nzj;&EfjgF0UcpTgmWd< zyU$$!f-WG4&(>-)J2AuF+kfr+aI+h`m_eHywK%T+tF85Fc6zL;qDqg)LBmFEJb5A_ zJlJ-4c(BgpdOuPLog6e{bklyUggv1suPhxS$5UsWdx^hhp`#({aa_%RZ-2@_N{xz+ zMV?fA&&|&HcvMkRrl6zxuy+s`QRmQH+XsO6eGo!TRm(|<;g@qzG!5xv2d&Z0scLc1 zNsphMg)M(zr16W5i&L$Bum9uou2KBrJmq-b+hZ8Ae|WIT>wCU@9{N2IaoSMevXb)g z=HqJ_GBEuoWOh1DZq@efW9$QAG<;7(RR%()-%)(h@R4dvUI&rf0K=BC(cE>f-wHZ> zX5);;&hvm$#dpDKlH7qwuW0p(y3m@7%a5O9QZsQ_?G|jmOp3RM=H{nyu5hMnGTQl( zVE?~t%TF(FVpnW#qaE=n=SWH?2QuAfcOa}TRI2m!>g`O+N0CU1M|%h%Sxx@R^VEB9 zYMnedi=x$H6$(&uD6`FtN{vBmyb^tQtEo$LbOaglmP-F-)YefTB_}~=iy!_#*P!G7g_KSc)0p}MC0k#XSJT)t`y;+*( z{WK8^=3-R`VVb=+PJ$~ zt{Ew_i3rI}KT-Jbdo$XZam4LIP9r^I3CgYiV4s{mK0o6tB!ycz7-u*XGr4OBWI zH%d!1O8dBLXc##-$x}`H5E8Vx`q=OCy$phQ#Bcb%gtY`F)1M<9g>im`4W33WWJmLi z-H@bb`}1PVF48t$f&`Bium4neZ8hvcBN$0Qb;?=4Az61#(}So~u`iMe55q1ZW2(>k zh#Y;}_gbGX1^357RHSq{FA3l3^_}9J7oh2CYjRuMq(S&z8luAsMMYoFP+mSiias2z zp3Zva4mA@y*&nmpto(8ud#D%nh>KOV(V8{Y`>f=*Rb2%AZZH9qalOI59Rg1Rt{h#l zxlJFJ$mGVw4KHFp*aGg78hYQr@x{0m!FctKy2G{@?RZ-d7l|}hSNDueOifLuL4tjk z^QEOZ-8ah>*Z`cq+<3N)E=sg&kFs`^<9xo__t{r!>PqZ-vTVGUWM7hU5IH#Ujrg9J zoeH#inQQ4wT}I`v`1|fw5_^&FAG?jptbA_0MSNDkTQd5gV1r&41MFXRRaNDvG@gf8 z;ng80M;Zn?&3a>qFt4-RK)_@XLJVo!PA#`bmR|dP7?zg>9| z_kkH*HHOWGhvtD(fh@?=l<0J(FD+{CJ>U- z9YVA%e#JCyDwv<)k}2nhHn^--rbQz6Xfk?+So1O0N+ODj1UQDM`ots!yxi)7^C!@=+#^NvY`-yuswkKw*ho zi|e+is>UE-OV^aW+-$H$V1per@4ir$nWjJVx$*goc)?xF$UwY%i?H2lavf&Ad%0W0 zOi7>Cxj)yLyvtd{^>Bvvbbb5xpB!+EIjGbnk>P$SMm-?TYIukpjTj|G7yD?x ztUm4#O}WihqrlMRd%4Fu7&WK`q(+roTU-oMVw&>O08>cxT)JE7V_24#3$P~de8phg zYPA^|XM>M@>x2(t`0$oV{otKC=S#^=++6e~`J`b{WguX89xnt?c-qU0W5E`*jvI z!AhM@??7$r(qP{zZ9XdxWA|Wh4pWrviS<(BH+tP?w5IPXQbu}IA^PplqM;kw-@lUs zs}a*m-5)dzrM4zkR^}7{cQi4+(Q^KBuOVOfvMRd2=P69g8+PF7M=Wq!Y>|+XG~VsB zx0tlz=XqSjM8}$P!sXg}%khQSc!8tJ1G8Q8hx(M;oC_m}>^bEPMT$#G@N)fh*B3n6fa_VN|$zMhPq(WBx($%M!)ztn2}CeWLkQH5u4@ zkR3`#!bc-qKhqk33#4cxCSVr-kSaHtiActmqrbJ(I9TL9C$t)(ziWTD?J(5qns^E5 zLAlkBtqE0_EviNdMsjOjyy~&w(qO3Cz&hb8MwJZ@ckU2Fla^L*(^78}(#;3SvUF5v z{OA;*+4GJM$QZ0KN7vc(i6cPYym2s!ScQZWjW^F(`}wj&ac4e<8^}_WR7BvO#@hJw ziI-*&gS^h)FgY&N4~u>t(KQHt&{XeN)F#k#y?{d)dnF!K!;jBE4N25$*0YTVmH z@+9|^y>k6+EDu$vDoB~j;P`~KcO#Z*p{ z*=UyBr9EMKM26(lM~65htALw)8bFz^;fz3tuCcF!E<3?HQeRe=BVv8Hsn0yXI)G)m zW=Cp5?a`ONPkGKxRlAMLNoaaMkNhTWmPKF$P5u;1iv*yR@VS zyKBrWk{YfzSA3iwTd&#i(Q(c@7iG#<8T1tZ`i$=CMZh)nIDP7p2g-lNW5rQ*mtJxo z6LWAX$HC<@91t2OcoDVxz!l-6Vw|uKdaufL@&0=c%gf#2>W!9QrwI3H? zP=Xe7Y49ry*m$#=U%$9&(hC<&2PDpxJU#IF6Spcadp1JO3^Z>*ZsJZi=fm2%H z$SAz@zIyNR7b%=UMiqf-{!>r~+?d+mLaJ)L%Zv#zT^$uwC8j3ESXiV*j=uRu>VBQX zkT{h%mO942Rpl|&U2MN%^6X9VgRyNd|gbZ-8Q1&ZnBy05B|c3-sNk{dz7Px}j9 zR@(#ECj~`?$+1!D;R!PGhnod55UI5K#qnJISlhd=&Wi8JmGUMAKRi_Be=>Y86#<(@)aGL2_aq<3c16H>lFVbHQVFd3JYnz&nTa ztEXeES%=q+-R-XCy1vwnHto5ql}7me)cx@7ZW21FFt`#^4s0S&f}2IYg1h4^8Ti_;h>NZ50_og&xpc8hH;KR^?6Hu($-^3jO_(MTsRzIZ058m7OC# zA?0B=Ckf}89B>;b%8nKR+!gYOXSTK&02!L!$hqmmH48O0`TTI}9)uY3Ip?3L0#ugr zAAiRyR{ZzeHYmSAT+zUJ-we)8B~R{-?gZ@L69)-d&@^DBHU{XZVnD=Hua5*G@1q+ z!J}~oT(NY?pOD{W*Wo8z8N6#yUT#kWY`3=4KC9_?noXY0yE(uAVc>>qcviB8^E5ps zrV5t;_43M%Yz#3dL?Ff#_2ZOb!x`G16E6a=cQ>(FW@$USiXEQ3fOxyfs&q{Co3doU>5w=+! z%+{cmrK=-nO<(fSPT3!M1d&$`M)QuTf@=V+dZ5jHzM3Ue8oUcPka8T4tE{AHu&Cqs zpzqVI%d6RGCu?HNmo$;=9!8^0rm?VOj07&lVi3p43U zW(6jWtsKqa5d7i1L6qTsAb?o>e@wk&aHLVUHartfoJ?%nww+9jj&0laB$*f!+vwPu z*tTuk`TBXzIrY8wkNikis#3e}z1P~;x`2X1#g|)Lj57rp1#?(nT}-!L?*$xx!F z(|mTW+ALKGH16d>x{^5K7Jtg3y72Z7yp)<5FrWRieOZ5G?X86%qW_3GIM<^QIOXoQD4aIUQd7N)#8X>fX9X9QRvw79RKV z+ern(YHi(5HRKmV*7VV;Yf4D&7tls}+{g-5I15ek9^2Qk*C;U7gH6+4O(#|J-z+51 z)CZ^lD4{;zu^_2qa4{^^|DeI`S__xPcDHu^$&X~2ZHvG)09!GiXCj<^)O@c|pHeK1 zhQ3(J^EM~*`5!p^pCImZJ_|

    5I3dt(>ixR0~EP*68GLonxInUsrWkc2l;zj|*Lk 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 diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/plain.txt b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/plain.txt deleted file mode 100644 index 9b6903e2..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/file/plain.txt +++ /dev/null @@ -1 +0,0 @@ -I am a plain text file diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/beta-sticker-1.png.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/beta-sticker-1.png.http deleted file mode 100644 index 833b83ca..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/beta-sticker-1.png.http +++ /dev/null @@ -1,12 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Content-Type: multipart/form-data; boundary=\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ -Content-Length: 2483 - ---\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ -Content-Disposition: form-data; name="sticker"; filename="beta-sticker-1.png" -Content-Type: image/png -Content-Transfer-Encoding: base64 - -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 ---\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/binaryfile.tar.gz.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/binaryfile.tar.gz.http deleted file mode 100644 index 4f4fadb0..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/binaryfile.tar.gz.http +++ /dev/null @@ -1,12 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Content-Type: multipart/form-data; boundary=\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ -Content-Length: 676 - ---\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ -Content-Disposition: form-data; name="file"; filename="binaryfile.tar.gz" -Content-Type: application/x-gzip -Content-Transfer-Encoding: base64 - -H4sIAGiNIU8AA+3R0W6CMBQGYK59iobLZantRDG73osUOGqnFNJWM2N897UghG1ZdmWWLf93U/jP4bRAq8q92hJ/dY1J7kQEqyyLq8yXYrp2ltkqkTKXYiEykYc++ZTLVcLEvQ40dXReWcYSV1pdnL/v+6n+R11mjKVG1ZQ+s3TT2FpXqjhQ+hjzE1mnGxNLkgu+7tOKWjIVmVKTC6XL9ZaeXj4VQhwKWzL+cI4zwgQuuhkh3mhTad/Hkssh3im3027X54JnQ360R/M19OT8kC7SEN7Ooi2VvrEfznHQRWzl83gxttZKmzGehzPRW/+W8X+3fvL8sFet9sS6m3EIma02071MU3Uf9KHrmV1/+y8DAAAAAAAAAAAAAAAAAAAAAMB/9A6txIuJACgAAA== ---\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/blank.gif.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/blank.gif.http deleted file mode 100644 index 7426f5b6..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/blank.gif.http +++ /dev/null @@ -1,12 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Content-Type: multipart/form-data; boundary=\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ -Content-Length: 323 - ---\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ -Content-Disposition: form-data; name="file"; filename="blank.gif" -Content-Type: image/gif -Content-Transfer-Encoding: base64 - -R0lGODlhAQABAJH/AP///wAAAMDAwAAAACH5BAEAAAIALAAAAAABAAEAAAICVAEAOw== ---\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/menu_seperator.png.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/menu_seperator.png.http deleted file mode 100644 index d08fd37e..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/menu_seperator.png.http +++ /dev/null @@ -1,12 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Content-Type: multipart/form-data; boundary=\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ -Content-Length: 1509 - ---\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ -Content-Disposition: form-data; name="image"; filename="menu_separator.png" -Content-Type: image/png -Content-Transfer-Encoding: base64 - -iVBORw0KGgoAAAANSUhEUgAAAAIAAAAYCAIAAABfmbuOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDcxODNBNzJERDcyMTFFMUFBOEVFNDQzOTA0MDJDMjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDcxODNBNzNERDcyMTFFMUFBOEVFNDQzOTA0MDJDMjQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNzE4M0E3MERENzIxMUUxQUE4RUU0NDM5MDQwMkMyNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowNzE4M0E3MURENzIxMUUxQUE4RUU0NDM5MDQwMkMyNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmvhbb8AAAAXSURBVHjaYnHk9PON8WJiAIPBSwEEGAAPrgG+VozFWgAAAABJRU5ErkJggg== ---\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/pf1y5.png.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/pf1y5.png.http deleted file mode 100644 index 20c2c2dfcb8622e6e92eb3a3371044cd3477aeac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769113 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�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 iH@M#C+ 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 qN?fLo}ZtjDY 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

    JTH7q_Y;1^c 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≷R8oot%b;dISqYsSI zB~pXyLQb_Ob2No!_V!KgbBse#Hl^=RhobuXx2RSBQ7%b)G+W>udsmbRwcRTyQaA;l zux+61EB#WT9b@Kcw%B`mW=E9P{2vFO$IykECxD~qQemnX0}Bt8D4PG;ZvO4}#83^4 zg8G2mt9en?-+vYPUbjcZ^TW$pq4M4qR+PR)a#cf_H>rEZVZ*!&gR^nahBrk1k&?`A~Zkt-!S>B}T9?#sskyVpZ7uwf4gJVg?6a8v#2 z&%!Lp`s%D^rm~+}RmT!;4ReFNBVy-mVMj-nVcYPH-9AAM7A81Xx8w@c+bYgMw0X$j z7sww#4{lo^zFGGuTCbD}tz8gr(()Zo+XUI&cp!23i5o@lF8R39xJ4UD{7OXQZ7Fs6ie#YLdQItH+$>&$p%@8a5=n33p8B>m2io&kQ-B<1;)D zn%v?Fuk-Pda+J&U20KR3vO_2%0`UqQJvQ!IOmpL7SVcad#Lz%j`U7ZUdc->&_nl@v ztpc=T+fyc7Q;(ldnR<6p@eKdE%-2nGeV+DNL$hi2k{pF`@_8O%*hB z_D8_|9iD=qJhbGavbyS@oxM>Jpc}9?Gj!kUX4Qa#YI0|%EG!hW*)*Iw{^vINl_Zw? zkz^@RjYr{Dr_~cc=!Nq+fkT7hWq{sJSwp*5WgXz@l>z)+_OPTl6hKp3;wigHh4I$x?N{Ii8yXKSsI72m;&~{3EkI_ z3~srt8uTu)_YY(6ap8EYp*=9<*zfeH(AY(^vi=?>FeCHMs;Y<-JuDhtPLri?#xSZq zUu=198-pJuUx75+nIh<(U(uH3X+myF>N=}kXCXCbq0cT9^ffy=)zmz~IwIH}yEOHM z<#DL!SJ`rl;1H}6bN;)$#8c2n9D?(V|B#iQId7T{eba)I8O7k z^JVLdP?b2N9A@HceM2Mh%9X2z0USxKDwE57gR>j7S_;+3-EHZV8XkN;|^nK=>Gjrxnejg29? zHi{xm3ln`puD7Egg1cYPG^g{%#Hn4*DQcnZeuZ1N)Rx$o-rglPZ0`}$~yzIUS9;3K^5;UPDdD&xs>D-YjcaqF!@&BUAj|gxcPD85bns1W&I$*u7=yhm%rKT zH3+1oNWb(vonEV2gcnpvcYZGszY2cbho*d>{H%pF@m)v|W@nAP088aW94Em|Wqu=p zILt~NFOj4Y;Mw_X0kP zHI{Q63EfR`1ex$w;1a;(-2>7@Q0OHHjlx5$5V5ndhHy6xCb zC(ut#q>O;NVdF*huoSAjsto#G<}i45ROUf?1#SdTO?`t(O1kh`w4WH{^JYKWbOeGS2<|blJ5pf+}Bh0~* z4YvZYD0cX(&w8X9snD;#q+m%YVGLIkObP!iJtIWgOwiZPzz>!LKd;rj8iYO5=GO>> zH_e?4Cx^FK2c(LYU2~B)=S=NvV<53bH~sEgJEHj6W8V+~CjE4P{+{?pCd@Zqq-1Ud z4xV!C-rr843M}ZtZL4YIgnl8#j(>L>qe%Ry0=8d^brL2ntSmfbazMBoyZIjL=O;NG z_fKnylQ=~WC1{(d%BU}e z>EC=(gWau8l+d*1aH3;6bWSaVEDVt%?B>v&A?>DW_+biU4j34G1QGr zNI!oM+RDWC{&40;)l{a&)zw?{yjj1@^3%V~eiJv7->a2|DTPL63kND2cp{8hR<}xZ zK++k7ZhM1EL##JZ&y2~q2|}}7qzYf~Wx#&1(R6{x&4eMbXJGvfC; z_~HR?nh7rV-s6{0`1o&}-JgXLdCs0lk(UD+`)YtS2n%X?zUS1s`$zJ98Up-mt?-wQ z6ZNmM+YFmWmIQc4?R{P{HbucTeK= zt(PrH$Ctrzdq=Meny6^659%G~!c99vQa+~~cAxAmMfwC!>FVLHfc?V`BY-BIUb3en zPT1aOZWF{3=d}G@S7>Ogh2J&v8QrVnR`leaEyj#E)82|FmIskQEvf$Ee~Qj{d~Mx3 zbE$ zxEuf}#NlG~aER!pAmipEwPsL4vQtpQv7GP?Ee+0{5b1Zej~e`03)u4IdFdk|CBlp+ z%JDe5>H?b1(^;9s+{DcBw+ms3F0a>z9RylD^DfR?U0oD6rw3?qszU>N4{WKlf3*Md zK+Yj}QFe~M=6(scexUSwrKReoYr(D}P)@!WKZE9$xO{DH)HxOg=kV%(%&vW15rVH| ztQ4^#MkqmS;A(T+4~PnAKdXQP&Oosh-B~AhveBq{N;^EnYZ6!e%j$Ywarf@t3Lkx@ zKGZ#&-IZt&bwt!sp}yhNYEy&EgiNmfUY@I6q%(VYQtz;Vn)>4}i}Ir10GAr)EWz(8 z;vM1F5n?jwgY?+hthsxt&bc9O)w&}j`7^$C2}%GOQFdlQbA_90Ac1{8l+%0u8Q{6# z583V3?C=SyaQT7--oK`~#&hAuLxCq>S8h&DSj;Bii?`?!)CZ`)wV};~6o39=C@Bo1 zOZ^*ov7DytS24ZB`zNz@H$9~e{STlN=g#K80j9U(i`RzCBc?L5(*Lh1vI)U+P;d3* zZzBX|$R_rK++tR+`LB#@*p=QkGB1E7z(*j=zuzTS85RbJ^ahgl;o2mUAr*1?DR1xe zb!K!~oAOu~wzigrs};&%eZtuSPh8t40Pb<@A4dl{4=zkA3uov;Ps$o}qqnw9`?y3r z{MCluGe5N%x1c#@@3vdPT@)?HkW%8F9BWD>>K5VJjBH#8|2iE=hRcd$O}_o=&gY0X z!efmpxARoAjUQpZ6xtkO(heRu{Sg!4WEVAq3QC!QK!pl{MSKg=Wt}!C1}8E3430|@ z!u4tP9Wa1wc2_2K?LihtbYoQI{LAl5nOj%@} z^V#A@KVN+yVOYMF{{ZY$OHT@yYtoTK;{5XK# zN!rL|QyD|j|8qenFRz-7&r1-@Qy5sR8n_4%i&-1X!DY~x8<^Or{!VAP@qa>=p%`2i zyp_((>kZVc7QQQ&@ok9MWviGi|0%3WcQ))6c9Df5DUxgVFa#{JxGoE(Y=je&;^04u zM!uo2vU}ZLLGei}E_pGGF`JP2R+Jfhrs#-9OQj!`7(;rUN8^3DPfo-w6<(g-q@(7@ z31Np{Q)yG9!hATfVVsTGeIaU{97ym$zdf#Nb?uRShASo>Y3Jo2FZcAm! zZ5rdNqWz3f(LF8=Bd!QFa;HxcUZCMz)_iu;6RpmTvW>Ax|*Us$|*yb z8>{dD?9jSHNB2qC4Gt47B$CY`<>FOxs+Wh6E&H09f`(rxX~C|;<1zd7>~yxh7lx)v z36(}#PDJ44pe?;tMhc1_3k;S_kPc0|g*NThN2}bDkAs4XH)m%icAlfHyLUiUuFlt8 zG`#XLHD!r7z{S8An&YBrb)kuEkKUX#KP z3&MXm{*ox18+6oJ+FB;Wrwk=y&B=c;5IjqF8|aU(-kh@C(n(DdH|PYju`Rj9gkaUB z?-MxKBUBz~i|ciJ1lzM>h<{x?RK1fk&|{o{>az85*g0L;0Qpt;@U*7*UaV@ZAy;nd z@9Lik*$$S%?ZtjJBe8Oe69vsYet|EOSuiHNO;5!o5BO`HZxUn>&l~2}?1YLfDFn*jUi!;TON{BL;!b*mqff zTxAHhF_Cowh{M(90()jhrQ(s%E9zRT&_>Ml#aYDVzSw()QRl3cGbN!1rTC|>eX>JVJHB`?5O4}P(>~btzXI?gC93pb`LlpU-hX%F_P|!x zKIdEzkenGkd!BnucZleSd($PgI-Gd~3&HcAtibqg47_Ns_AZWE*QQj(`;4y*XP8!D z9$*3b3eBrMHby~fJYJ2@z0bv8WF!GEoC7A+h00j)O+%a?z{U#Sw$kEpdn~xPvFI}dsskgqkgQ*&BNpA}IR`OIUifdV3t`2CnuFg8JEh*@SiF zkbD$Cd`g;%h;+?Hdvv^#!R_OjhFv6IX}^l4$cr;Z37S5g;v@fMU=+T7^?w`Jei$Bx zbZ!`ub>eQoLskNEe$er+yh_vlz23p`g?Jl>i?(^c$k=!^ zvY&0StLX{)fM2RzKAHc09dBGz74ZfD&V;Gv9%v6ZlHb5e9Bx^8X*RXpDY-ZXTTY5v znEhycD|9SUM$`pKhtbrQ+YjXul->5gcSU7M!=fJ-vX!3(#M1*aRnXNjz_PwxGts^O zs{6w(4|*%;p>J)=ktEV%86-I5}hx&gX{Z!HDI?SKm0HeQ7kL)lM=`1TvA)3tQn*f z9Mn|R#3=;6%@#JtiBjYb=XUgaKFXLrb=3uq`uXG%9f6+w8z>~#Sh;!GX;{7Qcl3n6 zgmk)JLEIk?t%1rAkLfpm2vAUm8(TuZ-4PV_*!XePv$`4?ssx0p$Tor-cWF{>07WJ@!QxTE_2e{1p zg80V!DqSD8UWiCqL=tlei-HK(_IOUQ=!zn8$S61Q4udkT?`F*}cMWDeGauGZ6CanX zG;<6i0~7E&maD34CWnr?@pvkS$AXcXTK1?n@(^)vnb4E6)u{{2ZIqLIn z!<-SbC3i{T)iIz?UkU$P@GkITQ8pCReqciQo|x%Ab^qbwSH)Gjnh?p|&E`iBc(LA# zcoS{r1O1^4t86Hk%q@Z_0={~B-alGsywku1v7f5QQrLLrRxPvqF&IqrUm@^Is|tul zU=3ssEF&Pkh>AAH8u5?O8QPT!w+D(dihI)%BjcTqz$Uh|PLh(Ao2IlFFZ5HRGJ$ad zMKRLz-lQ*$qEXl8{A2O}3f54nk)k;>mmVI^0apO9O5hv=n?OE*k|Zt24mQ`NL$@>r zR-dG6f6fIy#se>DYhtj12Xc=;RyA444BU9Y$e8Y|-^yKuv-$M*PSO)n1NJR!msmN= zJd~uuYU?u@Ozf>XyY%MimE8z9ihlUh!mc)V<-Le~qJ64Ea8m!5M!$o-x`yqRry{%w z6AKgCEO|lAQH~9d!_jXcV+jQ;5n)*ww%){Lw09qX(8kwtETaQ(nU_Aqu?QK3OFr3z z;t9P-)Z6pJnU)B%sjbERJuN%_EkmvK6NzQTL5}1N5jWFERv)57S-_mu=sHO zj^V2MqbAROX9fp36Cxv@Ed(iXpwK_<~`Jy@$s}F=+4c;j2hWC>0vquu`_LC;N!F{T_$B+8Jcc;#0VMYaoZ!5QZE(e_! zlDyB@4~z6ZTA%xaeW58fFHD(2<|E_p!k^$*hwt?akh$;m;ziYTB3g~sM8iMR==hb8{%S~iNAlqzLaq#WBVfCTTFohJMJ^{eV9`Eqra>Su7c&tI@eBf`?k3UhOd%aXsupIq>^xCgjD z3>cK`Och3djBPf(aNF(iZIl2GwC6JjAwL@evcih$DkvBi1k__U43Y# zE_23S9C8aLpHFyUmM+1#4NKfP7dhMA@BTEwrVc?f4%#`k`CJi>C@S?xmCXe3T%zYJR2gpiR`bn;Kf6=EHhflqc8g&s#nN3w`sc3Mo@S&%tued^W3^d~pN)sB^M9#z<xr+ zn{!lFI|Ce(DS4H_V~C*my{t)_jhu{3|B?}wl2sQkq{(8gGW_>qTg`{rPlH)u zR&Wa2v90a3v=gC^B<)&c`tZPBdnO1N{LQR5SwOmY25>>mT>Ewk8 zs&V+lUes0`dV>IC{3c5{b5ZU~!fY~+@9pQo-wUy5*grnRqJWr&{C+f}rQY0!&QC>6 znIl%o?w&;j_4Dw&vxOEfX~0-Mp(DmtqPMp{sQq4xQ<#das;W3y`F8uQUe-`+?1_7a zgucAzokgoWh?}HaFhcoH0?MlWZp3r^l-|tA1!g0=p`rK|-;>9@$`W;`v^gT)IC(}+ zvN32+RYi$zNt*RQ-05lp#>TPO&sf%3qvfn(#QiT`J9w^W%Y)FR3YD=Lc9ryCBZcBa z?Ty_a|J91OTV0ji~H5R{!pkhsmJ>(%|A>1f0cqp7DC`EFp3M_E*4F-oUh{0jb&&`0rnW?)=GnbZN)gB=6%Ale?JcoSre0;XU@czB%!#=(GLE;v4L$HI zYfx|)Mv*(SYY|6t87=7Ozz+afBOmF&2x~-w6b35|`MLtWgi#^26ihGdJB_AK7>M3L zY>i)C;!Iav(TZsYVO#q*od0IRg*<-l_y4mu10;=zW$*J&NTGxqEyDba7}}+I628mR zsjg@MKa3f2cKvPenqjx2AIDbHd++Wb!?fDZx5!M1zNs>_G_Et;z)M2bLVIY`dAJ5Z zQ?rju5Ar`{K4Loxz+!hTHgzHFUBlWiU{M2tM5gu0n%gkHD$-$^JtG9qV$%<71VEt& zc*cR*ySn1+X0Lr-Tx^&qJX~_M^tIk@q?~tTWpM-6&P||+iH!IZt=5wa`k_e}?bh(L z2!;!55x5Bb6SIu?#MPd4L@nOcc8@0r@8q$G#l;aJRyyPkC?1XLy;ZHFs+X)TWL5=V z-#TlG?JokvB*Y2m89^#RD=~~0m0JSH<71ImihC-wy*>8Iv*=AkwSiexUx$TX< zs=bL4oaj%*Wi6$J#DAAoR$H4N++E)^&#X-i=BXnZDN{SEN5|Qk5rh6V5=Q>e*odNPC6ihJC>e#NPl>pN6avK_CX~fe?a1H_ z14u-r1=XP(ikcpis{;yNAgIhP@T*7%_Mi(t_pSbUxBBWM?PEscLA4Y*c=wgLFb< zkP}K&4O`}K&(ud;X?cLm^!i$Tt_#9Yf0wXRg0%h)8$&E$zyAv3#SzMU$Hoa3r1v7U zjrcZ7LI)pDf`eo|K3%%b!^-wLBO!b#hr2|PEAU}0(c3nR6zc1EO&G&1!tH3`ASwD? z+A}mbK}QsyZ46I64MI+Q?m92mG@$0?^ice#`hig!Voe^xvSA44P$V_CoXMAZOOMq2itvNIyMp+3z zu>}d~H5}0ZNh6Mmv;$DV16@d4Zcay}Q)sE+_>d}$&RC510Ola5EIvKqzXaL|R@7At zaFclW2iNz$ul!SS{LY0VN|Zl%ZkjowLlpC@&d%#*@rY?v*=!$wF&Ibr>6V+gu9z~E zVz3{;_f2fH(XQW+m{;q{KN3{On~1kDU%sOHMsG5X4|jHgmXF=%)=Lzutj!rGN2;q0 zsMtDuA0pcS z{M_33i3`dL)e2Q${y2DD@N6uI-L@6%@Nm3|2kI3G9fqk>(FEO5JWgFe#ojO!15qr!~^O&0X!HYA1)Jd*__nN~9D^U;Cp zgfApQ9r|mJ^sW^1G7h(4h||GoE8NJ0M1roZ8IP2t<$u=Spo=TsVzYH?oab(Ix=3S> zoP??>s<$eMtA>|;@I{Q+ml4LxSooMTUU-f%|H%DnN?K&h>Wl{mxw`I=W~Kk zygUQ0Ssz*0e()IRjMx*S1ZWMtf?CB01y!|n1_fL+MpADWtYckla?rDYMHs}iK) z{{A5dRpx>(RQPG;O4V4&!G_N8(ey21yQ^r6S4vz@$i5}(*<2HqyvHQ2GTvMeccXWz39hc6LV`CW_b}E5gLK$PWSz!q~6a4+8#cu82}GR*#kq zF)4vo8lkt?)Ngxt)!E^NA745DyrKTc>EL8!oRazed9Yn|3!~5pPOoXQYd|lZ(e$d9 z$Ma3B?grkDvwK2CS9Is&eoeiTtfmCY6OP_9BX@{-hN?N>Pd;$Y%V?8Rn_eX**3Z9N zy4DC*XNxie!$jh;#2p$vOh$jHn_XpT#r)bbX*7{QdU=Ue<~cJlUm!Lg3elIwI}~rw zthzKPe*C8&2H=X>q@Z`Z+6c%TP)Em?YgyQl8M+aLobZiBbVWbJC9y;tiP;n-b?!gz z!8D-UQ+BHQ24mYj_6f&Fy`ra|6;+vdaXP`qq zr}b}&$XCLNY6r!p-j7F%XVT0;?XY59HgAq+(T3Y+TK(>U$Z6^sT|RzB zmd`$U8h+?MB*Wv2Y#djNn#>|1f~#OTz$s7Q@_z1lqhz+t-wrPtMzlhHe!%}rB9{U` zHQb|H%?`<>#*bBc$!FA}Ou=>o=F2Oxqdn1u3*gOlRr)tt@@edG83npwVYpMiJSFB& zgoB9^zNU?ZW&9*2sq3OdP&vvo9kUlo6G3AIJ?`ti`0M^p_GVx(vI`RgZJLqof3PZLmnNZE&+*RRTI z;i*&(=8q+GX?g;pwAVho(ffX%mRU$-qFm^_1mqFDoa+D%I;yET*>h7HoSf8uS=g6c z{0x=U5f#7L37S=CshIPY3NrG+$+^H7_|x#uF-vhO&Hs=KxKa>0^#Nz_k8 z6?ym=sh59m;;Le0jsDsHDka^0SoOuf>rg%UkaoWGMiHi5_ss~&#mZMyR`~cnK8K}Y z80{OEkCm^RM!~?+?%1c=q#Tk}#AvYzUdr)!{`NPJ7rlx`Tvb#f`FNU$8z}(#xCF6$ z6buM}e>c5?>$v+OE!0HOUN|%m*bdf+) z!GXyA2~lN>^)v7@Hp#{nzVr(xs>Yn}ZK|7gy<|q9rV^ zuK%{O)KFC{EX}W|sETO*RoCjj=zBLkxcUOP9mVn{j3LM<0r@{sp5jh?rF@6ZU&l|G zn}O+Xf2W+b{AhG|BzYgZ)WW>K6B#NC{bu`s1@te%V$@ITDgd%_GVI3*M^`W9A|k~2 z(35)-Bni4r<6+@cd=P3#@JiT7+Ngf#qNzVeGiXEb0#fLh9l-0#VHEneHg+3eJHACn zL6MyEF-Gtsj#+-fZ1-7m+E`m$uiREo<$O9M;g}v>Xtbhz>b5zal0U)f6S*6$c$}Xt z{za&T< z{dNMoy5#kOHUN=dtIM(59pCZ8dlNWHGcohX$Xc5N1@p??ar4$uwGmacDfdxR+7Fg5 zEK|Z=9td8|#9t7Fc|4!N=kUh}0w5*b+$LeXnnzv7b)`6_QuYr?^vCeJCs)S)o%L^D zMN^b)f7Jsg>6BpmjsC!(JC>3IbL2(5{q$@-=}_eii(`yC@-viB*4=I~bZk6YK*$r1 zix54aZ>dGW2u20R+dyK{FlC-ugymWc30s+qZTiWzX& z|KEwfT_7SYJ*4nsQ6Wv(aBp(LBc#J?O8dmPu(~imbNs=qvA#}<9Ueaw@5uO&gUwKG zHdS}F1&y0>wu85tX2U_XzhX6ZMsHCf38J_J58 zPKmA73f+tKn8iEv#Oa0Xvkt6_vg>#-{D(hytf+yf^ef1+F)D-C{h;w4$n$b#dim&d zIcrW!P_@#j-p~R8k%hVByim`GCbc}?hJn4AZ`3BZ%3y~ss!$s4+q6)|lCn|Mi-%#J zY`4>QBwHVBE`$BX8B6Amvu#I?2!<%`65r7paK?s5k8zI;p8F9QWiMYzFBd$%r8~cD zEyX|v%?AAbtXtCE@-4QUj=U$G^D?wDP9Ak4gHhn*=EOR}4)}dStR#h9tYEW#P%h?I z-o<@^dm!j@jZ)s=aU#_2L0~5N(?(R;kb;g|Su2tp0!9QrNKEb^RM4_fPMgR3YI*0B zPg4#FX@xdT(Aa~#IJA!Y&_=t_XsmU$>=fNZNvH~U+P{e;I_J!IWr&MBj-Th`Ui`@H z?a$zyBS|8D*7V|P0CN;V3?Zju{?_#mW?Nxm?xnHb5w08Ks}0A_I&KD?dSk}Y4vuPE zPLTqB_<2NcVD|}rQR{jEBecAvXX@*Dbl32*`XVHrnY94}ZV~HkbGuO{*luU}(iC}Q ztBYhedXsj~rZqD*FCwSKPDZI&`V9|pu!Egj_5HfQSeTy!jbyCU>1OqbYL1362MV=J zhW-jJ_o=r4!Dp^hhr{)@Y_$xZnuY<=$(CK5lV~Dn`>SSC)-Y^VmSjyj_{2(+$J*1t zoX#LSXGten%3ofjppde+HEHHH1rlMSKQO8PfE00jOM)*~hrau}g-MR>i%ehvWpuQr z^>zJNcIzd1jhpt%U`O$R@jmT-vO+QzbT)H?f6Xm_VW$jrB1d~oqPgAmoDi^cF=|}_ zPgN%OhvYV>&#@CgBi;p|9}|;+3!8SwU3i~5cy%P6Lw2v#rydM6RsSo=yBjH~iEw(b z6$7(R9||3`2PPM2?pSv$KC9EzC^I7nSvLYWO`KQiMCSO^C9=NamI)Uh1iG9AI|#DE9T;&Om0vbmyw>e%W{cvtRtBk{ZkkDYN`PLb=$ooY-0W!I8;95f7?dC zfNDa(t;}oc3CJVlLm@u)JdB7g(3uE5-Syhv7Whrt*np^y&*ym;C-qJZ2Kd6Zc*gL# zUIjH2=v;)R0||ij+9gf8k{Z0Eu>S<5fn(#?2^j=;Wd&%CTd(K1xsGS*Ou6QM!Dm+* z35|{ARVH{FYd}5a>Y>RiR&(R3E-1PZ2;c1H&8Z?c%F0KW3qV^@AHZW97yG(eb4Hp@ zizr*(zAm9Er?meOQ*wHn*+Su%Uufd|x9sOej=SD+T%KEa%u}i-_1nTh_AOlJ6YLFJ z-pkMBaaQijL=khht+hp`=Lz<$rLdxniK&XRiq6jf!p{^SM8mjQNmZFhz~iaG5NG_N z0&t-Jf$)QrlI0r;1;QL47npefj6&CMuay;*YDkWQ@N;M6AYNe8OQ-u+2?KH~_MQBy zt1AB%|Bb;fKEOHvOpc~LoD1`+@+yn4jB)O4b&$?P&CSil5fVa|AX3Lm=T#SSHwp{3 z+N7t5pZn8Xz|??gLFDzrn^?C4sW76&37ij78u^;vIT+teCj16wA$t07 zJwKZ?7PccZ>MtSOyrGGX`kXr1LcYQ7Y<>pwGLscPDA4*4LjYb5k zUyZe5??7FUP6raBt<y_Z{2Zxg0^08GdqrEvU>IH!Csh$$E23Ka=qDL}9b_92!#o zraTT8cDE5G?ALf6Z_~#?0dE_QbD4~i**VIdMvOm*r2Pwtu8|eA0&?_wc=Y=EwA1Z2 z@14i)jRru*5Jl0Xy!F5+P_i=_Z;e(;@cm3zb28ckJ)w*2pHO|4RBUcTlA-8^T-8K` zb|t?B>Cl7@dW04{T$UkoHP{z-wxDW`sLG2yc2Ai0@)4Iw|?G|80r2CLi_Gh z{Yh|UiM{LGkajI1hu;(X(d}+5&eb*B{@?Y-CPH!whx7$eEYms!NfgBHPek~sEe|hZ zPvdE`-w1zY&v9WB_!Y^qVZL7@F~fg-Qh+q}F5XV?b22?#thTiIP)ZNHhKm<$m%g#b zRQ@UyzaDn=Pmc2pRyIX*CMgNkRJ>mogj2HlXOSd+2rAH(tHv~@R{u+D zaG%N+{E2d0vqZKTX&Rd$^tZLv;$bvc!yM0+7^dp&WDQe$^UvxjzO&ptSwU#v+3s8Z z`TTfL*z(^<6Zte@K~ABS;dR_!KUIH~ZD`?a`{}%lW8J2@ko1?gR<)|iDSKai<(|f& zdLCFYPfHD0y=&+rOa>2v3HD%2=N%>NSVMQ+ik2b|B6dPSj{HR zVf#JG1A}wadoG}Yv;fq^`ejOXt;mXg4yO_Wz;u?8G1@EG9E<88y;bu)v@PJT$?Tgs z2c?DG+-jCE;PREZ>J6KLnyB&%I+iFKJ>e^0ts&e^OUs6Qg^EMSYjap=kX>+ER!%dX z0d0Zed7lk3k@6zr>=&1|YLWb&<45_}iJB8!WI3`AM~~WWf7~89U}$iJf+@hx4tu?I`WB;~@-hrIKR+shO^sj*lO0J@MLt0`Gm(YRT`?{e6B+zmwlxw~w3{ zoc^-5vxo4RY`{cgZ!N=H8qvbs!lulU!@0(RSaAQnLuBU_wsw`es$g_iCYkCIiY8tN z)cLQE$}9Oh+wwSlNBmq!O8 zUQMYIPW<>(yU!`i+y5~$72Dfc<-_bc_49U#!P)|dJ$?VU`PrW}u{!g>$!`#uRA8-P ze-auYQ=_Y(Alu?_-o6xYa$$Wj(}N}?J=M_A$Qqwx_=RFCB)HwH>0wE(VS!WHmAonu z?Dl4-F5%E)N>yoiVmJmVJjw&-;bDZ{Pgzab^Ystt_;2=TSr{wFjgI(z(atY_WmXON5YYurLAo&TzI?7?r%%WjG{p2>4cQ_Gh))`OeJX4HOH3>mjlqFa(Gg+9@fC-le4wW;@k^kW3qQx*R`5HU1UmJ{{7MyzvpUrpFSo zdJnt->6+6)86`~I?CKz~1 z^uxwv(DJ{sx<7O8Q`$t_mTYkrV(R0Sb!vdYIZ)C9aymqtegLAyFnpRzhaY-w}x-UMKghQL|aF*N>VOq?^+DYH!*i_fpsgsRypq=Oi%3)NNC z(d~Bl{^$TH7>VA5!~*KNzch!&FEB{3F&<9ecR_0YRqp4WOB0TTWg+P;9ShNWDOdLv z_p|obxLoen`E%WKhr_obAqw7n_=Bj}}DwT!Y9-!|tSr?DF$UvWEBf&vcVg zmo-*V?4`tvBxp8;y(tb=V2gIpIUl>foWcJdGOE36Gvn&@aXrfK?y$v@%C?N#9bfFt zp`=iRH4HY@M2)2!;Y(K}-Mqi`wHE$%{8juW6s8I-h+qlR3u#Z%FOU?Td^gh4haw*` zZG_;P6M3$$NeGR(dW2DjQ7C1HO5AQ)(2*_c~d3~ulChP^<`3znjtW3>H~=Z(#yKR0k2N^O-F4!0qZb0n1Z?E04E zg|)w2_v`=_!K|~Z8%zB8PXC*!{tacT$UvC=T^r9kpJ3)2!K8L~MrQ{ojEA5I>Xuvh zF&%xqf!N01GApUvk$;ePl~G2N4%xmWgLw2P`R328%CB+LPLvtx9V{d%(OFfOf~6_P!J`lek=Zh2FFc1x;oci$ppX7TOv3LvI8b2c z0#Z=-V_5G|b%Pz2$A6@8oE)4au^Fo{VHs)WSnSt_#MYfStQ8hum$?PZa37J1`Wd zKn{;5(El`0%x+3)gZrVD)2P?M08^K6@Ff{4{LQtSUbV|7Cjm%L5uOPc0Zbs-5?rmrXyLgASxa;cH+IL ztgRmTst-*xxfVHFw#fMOqNiXYaE(#g>~c})@6Z_teYTGIb@DW2Uct$>V+ zsw`_6r}5qIZ}#WZ;aIstCXxN=X+%?ph^Yt}QItn04A`Ul2+ z^phCH{b(e2n|_@@(qo<^J2a+S$e6RagMvU;6a6*rk6jq4J7@< zB_xC;S!ZbyryW3HNps;5P?NU$4}z{EOS?!RW<#LyJJH2VP|a*ZMe|7l(=+!`Pz+7t zA8tapyqh}C$Ry^rkwQoB6y``!iMe#cmz5T#jnKpWwlMXSh3elW*}p;2miWYD^My-I z;vM(}pe=hLV9GFr(=0%u@Mq(m{m)kh{OTLl(7Dq&*lo^br1DlWGDK~Qn;mJ3gK5F) zC7un7Q0@4}L~oGTfza=o5Q7H?cg}Fu`EQv^^2HaL1A{SP%XJYEV&9cbMRh7cO&J*_ z7ua3%Zn~*e)0-Y0FeZTZ&_Y@@ZCD=uKT9TX8uZf%(j1aUx`*^r8Tgm|_xF!sN>q>F zmg&B-9)YyW+08*Lruxj3n#Y1`)ra57eG(Z?I84S%XCXRUu4p$THPFt+#k4sKl)>-e z;zLWT4uj1P3ny=90n6Bp5BIr1ZQ7q|$JJyuu|ZXI0$d zrOnxIUWYZ;fX*WQ`}ye{!!4B@0+zoNbS`_*^`J@sg6oy6Ld;@oiZhsR@_{H>hGV>mZFQAVFW z0Y1hl!yRp9__ORM4yhizvp0A|dk`237ID#oP}-+k1Bw3ZSqSM;Zyfx0#-Jnx$v=-W zK4%yLExbfElR8*>(C`NN@S^zFjIzYE1ddzjC(uZw2aQxs9JH-$%VE+O-_R*8E{2&{OhlLjO^Blsw9N?{4XFx{ zRFK^Rq7oBm!$eQJI2B(1@}7#eZCfEH2&O&924y#(&EZ;}-PF*7+X?b4L@Dp;c ztq5t&rUB#FElFBW%`MF^#%WpjKkC~~et>NaF}F|hvalvu=7BW!Xq7Jqi&5yiu=cp5>KKvidjF0 zONRE0#+1HJ2PN|lvOly?<8c@sde~7lEed$c=EmdO1_oAj|mv59fnJRCpgFwMp}`x;WRfCA< z)YjEhYgBuJ_c&TVl+qV@_Iw7Bn2_n?c+m`SDc+KNcl5Xm@hEdp>5uM5sos(}9eaIb zI}ax#6G3{swsDcuak;dk zczS*JBIn?f7;q5~CDHVZG}CWnWy3l;h*D=znq%+Rw*AJDk*OK!bQhrxsAJw=2N-O7 z0!z1#M%~v^xH+7c<}BSh##iQrRrza*TDiFC_FtWLG9qXaBKp_`^OxFhkgxoL5>%gI zX&GZkfHT3)-Q!h*E_vwr*Ne-BckSD;E%CZEx6gp=v@eOa$${})0qS*b*R1yTL6>cQ zXwFi(%}AUXcW4(o{_FNOP0PWhMaUR`RF{ODzq|NuM%FJ<01>Sy+?P z_@&vPgpw`wARmWjP2tgYI}H(gC*64lC|@lQ8vLT&xLW)!OH?UQOZ4dd=tgY)%T(N$R#jK ze3q%+`M(Q&LQqwHX{G;uBLJ53%a;JP2>cE{wu%QB`GviMZtEW4mjIn}IhzGFn1WTCez6hB-GD1e~~-#d)oLiaPjCZc5=u=iwB3s|_Z zLsd;jqRkAzkO7&n3E`gEFhR-s$Q)tDP&cgHygW{i)#gI@x`U!75p7T+B8I-VfV|)( zF1&xaz+tnH{wgbPgDI9MoP2lXFjy&hR6Ld3x8ZK^>)m_#`D)Q15CtUR6#0Z@{YFHu z6%?!ho)S1kXW!Z^j{Owhim5*ShYfg+!$lkkWhaKEhD(TXlvz5=)kfDejN|=h+(PmF zOjLF?3r2xILU6l(Dnq`s_UlsOm&;<+!bDKd71abC$RYTqcFWZ^mr;1>FG9SVhlQ^3 zook>G%lp`2w>gZdo!c3dh81_kt*D{f=CU1|E-Ur=AgilO3u}r|?l~DrsA4Ml&fVS@HddZT zp04sxM8>1W1tW@sCJ#L3TWUX72oiW{cP!b6VQckF%xs7XNzGnQES|U-+$}M1uyR1^eN5|i zc)ehL`|AVA!H}$<+f7+JUo!eT1T-a`}-8{iblC`15h98R9egrfU17}9ZIcDIFX5;Y%dARzx z;+WX&;(49m+KLe88TAm?mgtw7$~8XbbHJGza52`kFN3s z%jmTBeDb@^oKez0fpkuIhbg%!AU$HJ9mg&x)WLSP&aR)lI;}ddY6ZZi-S97+m=4#(F*dZCnVPUGVc3!Nw=DZA zy&?7Ok>jnqMesA;Rnvrn1jEyw&~9Q1{HvpY;0m5EnsoJonN^+lyEutky@qxJ-U}%MAq6@r$Bf1QucOrv*ySIKLk5Rk33*#T7=T2z zknI}5@oIb<7L_?*>ec#nMIubJD!UuqTbIu}mUqt_3k|i+c8K`~lxzu+oszuuaF4&J zCE+tb?-75iPESY6>2r-NZ)Rk}{VRDNkY(MxZFTs3`$i^;noBTyavB`!t^V`ll0VjQ zxYX>iSq|01Nap!oLot09>yDR!jS)s~b!K&TaB$d)$&2Z#`c_LYKfB!Fw)mBBt@FzT zPy^dRZG${<9zWgQwv0Lu!M2X7bb}3n7@9Aim+*?v*Go8#_bDAKOXEgx3$23Q^hmxpIt<~ruL z%LUzPU2X-tEu_|+_4Sp!ZroD|6|M2;0oJOTrIZw4pi2cW>ir(SQ5h>P|NO}s0CKn* z-nIeg=%C0numeJ)%^u2Vuo(fjeeKJ3b>0Hd5d@lJC^m9??KNeUt(;^SR77yifp6m%h~GT8Ak zH?z zI5`TfWlyB|-$(H#_!#*Ayw`UGtZ;uE8wg#1O3dx2IsaiQSW!0i<0?%k5Mf_VXyq*& zeN3gyDPoUxO}Os=yB$0eZ;lr#B90*8H9ywJPDYQSt@Tug(D}s5L4s!$W253F5g3hQw;D_i-# z&>sx0vv|b?-iqO=0aPtBH}}n6ePfHS^BqAR{bIxLo?PYi%kw6u3(n7<@!3(NcA}!j zsrcV>r`ffDT>!!73)3y^9E%7NUA@xI|1NhE@<9R8!#=fLGF%FRNOxg_N^A(2iltHrNgvF(o3_}(APw~piNwKg_35d9ac4HRXYK659JkFGcxIQDd# zg~K;6h3`|^gGf?<`Yc8N+$^CXxF}2PyM#Awzl2l`qsf!ITQEwa_&yf*2vc6b($ws7DG4b zd4G|PjS*LGWNkoR`Xd)NHCXTb-VLv)yzZdgMYI=?BiKTzh7S<5Igy-{ zmX|smFL>crXH#fg8-NDAD}zqsj7M2iMLV@V1~31{{9l_+iIwxGyp6F@dcK@PV!GP0 znemk$*?J%+z9LYTXXcxn4lsN_txxrnFjK#!L;^q!4otavZrZ9wF-4JK)P8pm)X3;K z-5J0ythtgdEJMomhL zi=})XoSTISLvnp(3|`D0cSBEFnwoJ3MfY6RdO}AWadu{Q?df~VLwaDXS+4vI6$53n ztE=E->rQ1rG0e=?TqiMZ+%NfGDmr2+-`heO*16$Nb8}N-j$lZgX-s`DZETJ84N#xh z!L(DcQe2&#)3`JWpAcxHO)w5*91}o<9PIuARmN)!_HWD>PVM7j<2HHh@9x2;U0km$jV%pd7cKw<0REZ!~ly3Kw7mLX5j7kkW`U?^9BOv(yPhh6;zpX?>)uyYND+h>3iYzVIv93kZ3FXA%#xRME^|6qz#bT3A~e=>1Scc& z!0f01+L?QEVTkx0!_b?fo)NT5Wg;4no{Y}K*y8oZ6C}PZs}rC4+ss741{kX_TxCpX z7pM&AagBlo^LRtP1+-Oev~{E%^DH99B?YU*f4ozPBTSeZC=4 z|FQ5+Hb?8MWN0(8)>8s6+H)~rI1kuG_025%mdp-~b{~njC=u*IQqs}c*cy4fB{IaE zLcix1R5X?qZSMpC!A5kGlPe_cubvnthm#Yic`d546ZHkCxGbNLd7;MNfyl`L)1?%S zX&ooW)8(bLNPZxe3_uJLaHml`u@@jd4TVxX9&i}badV@)X)jge;l+{6%{m*GPAo|a|_;2 zb94}5Vo<5wPxRaUC7{6RAZlK=T?T{d$U#8|H{D50OqqgQzc6H@Kg6%`H3R|kg0KdA>c{1pB< zfIdiWj2E9n{uV*;6LFO!%$USp(3p-tJ}r?Ib!Jpyo%IoBIXG08XQREaMwKWULUt5f#F8%sDZG|_fedL3 zv0`5d1~Fc*Fu6A*h7C&_+e;2ZWW~yA9<;j~LEHzgn|uuZ&4}_7s%8)~ow&lVa~EoYwb4EKJcx z^nw!`lNd@qPzRBGOO7wV01S3dRRE0NV2yk0fr&$*kh~Nwi)_Hwof3f(??wQh#NqHMxKm8+{14iB z0HB?sGIumj3?<6wB;JMS z;dKqczPo$Pg?Op=J6Ub?-6m+6z`^24soM_vUZ61O-@P=*vwo8S%S%J0TOZVirj|yR z%b6u_dXK90V2uj#UbDQ$V#pJOA-&LYC2K3sx(;yzoa_z1VGZi6i(|`Kv7qC5Ta61$ zjUSmgzkkOTZJ-YI zLkP5~Zws}?4+!|9k9!+SW9xw^4juI?-zmn+^<*lP*@(VfJ=nin=P9M41Ee9Ml8q?| zEM2fHPReN>ij;Xfg{w58b%ln4ga0>h1dyXRK*NHp0bypRy{fgbq5wdVrN#e}g+Yac zc6xW%z9B^|*Zx#gKA@{}Y?L#AQWfu)8YZi+wTXm_tf=G{?S}K(@iO~2ghAu?sXCqK z<|qq>3yQO@xyHG=8^q}pkky%$5CVe>f-49}$8|bTZ}1l_2OY_Fx!r3W9$43y95-7H zH_LtJes2a#V=r-bn+#J7%F0U3j)L$rlqtnQa#BJLz^QNl@oJzixwCH9Y@60&Yq9fT z#&xP;d3NRw8K~D80~hs}#*C;P*5&E1 z91rz0x5a)(T*{WrGB1$>!Ur$A<8s%7l_II77xdqez?5h;afQm%8N2aAIfr|qivB6Y z4;f{Vg}2EDD_|>W!qXipq{lneJ42I79W+JKlw8c{-9i)N&}Fdl&q9Bgvw+8tj5QY( z8bv{zIKNKem2Pwn-EAo^&SAIMhel`N_uQtNzw|O)?O3^CgP{LxWCg+FL1yQL&|hmq zR8&^^cpVb^Qo5qXJu}yP-*a*tIrvvZ&~kEKHYi_Pqzjm7zLEGGChdnG)Z z#TQx#FM|$@D$cSopLBcL^>{l{N+l=@284s8kDWHuv>zKtFOft;=T?bnYv-8j7wsY~ z8_n%-lhFR;SB5951kFLlzgHkObC@Nv#R|ykI8&mu3sn56w5I(WhY5#kvB{CN}#T%};9aKTNcTR&ZX)W_TGuQscKSP5JHj#9PF zWhbVP1>{sK>=%z9QlB}gg+Vr?@CA7K#!D=u&U>%>$1NxL0K|ryds+ByfqJLwGaHka zL9qKId+oe)d;;$&Ln+U96r2HwjMA5t60Xx3k4Y!iG?m70QqW>>Yao6FKL$|+_DBu% z^c^5HFuSkGqmzkH`O`ytbu1Z_m}u4K{PO^aC%HjHTM;`KWxVjP=#U(he_}DzKzIM> z<9V`{MJ;(hQ9<(QqVDY|Jvcsm+zS!>;Fq5@g6}i&l?^3U^_J;Sj}G5w!}6ZAsUmF^ ztm#WcZWm_2?MGYzMpT+v$7-wI&o{4*pR* zhi{5`nuGZaP>Eg$Hr`H-4h0YgARyq5Jly=JKUh+O(&3Yqv?LcSj@-8Irfc7NZhO`z zJse-Ass)Q2u0=*C?Sk(>NS%k06OuCj7}tE{fo60$OW#Em==J#R?MErN5({!N%A&;y z!uSil4w8sT+rlSaGo&4W4Q*Ow<+tl@+{IsYFNbqD240qF3x@3c?{p7Pxwm(Am1=OS zYw@fVQxsEEQUj71=n@{o6`xQN&YXLFm`gF(y)_SQL2)20|L$#6)4cyKfcg%Fh+#3Q z+!z>(Sz~E<@2S=iV$~T~H%^7xH^UvRCA#d9d>tMfHhP{Klb5;#Dc~X$ghH_i{CS8} z`R+=;797KX=o4x&xcVX>tKM&ew!5IPyB`RxC%dn7!mcZN&SJqGtlDp@0kjsuhEU3V ze@8!PfK3u(W94evEjF?O0|2E}n)aq|+v>aFr)Y~VP3SAbq4KsL`%a26Nm_36{7;fo zs9_E3PtLg`ZC@@4k|H`fMmn2n(HNc;eKf zSQ4ert<=gu($5$vXrkhhe5NI@{(^^bfuBFg21(x=KI~jwyXEm%&%MIeVSpq5PDm0H4t)3ZUoIkBIRvv{!0`qpz}X;Y2|x&P;Gbso=9MEzVx1s^ z(FRADkOPqyH^j}Y2GJNX)d*G)B1mlf_W&;iq;^A=`~5~NYLh6E zUsCgp2*yi2YO+v6*6}>HluJS&agc(9?y(|K^e=Q_%HKaXIelGg|6cu%^-iR;{{_~E zYI+!q`p??BDZKo~_+b%K?DdGvW2fmM#ANFKc{c@wT=)iXps39Q#spI!X5^r@)I zI~Qc55tX>Y=t{!w4=~`g`6L!qe*vqW@b*MZONM3`J6~iUYm$I=1nhpM6zWRVRMgzoi}u zrSzG2|Fv^EpV-_p%I zD}G~inu`URx+=dKL=l@^?>TxD(U2g`VfSa?muHX$)!HU7pyF)6#%@R0P!}F-<{_us zR@T(U#l?FzB$V+R5IF?&r^Fd4f2lSxcTz-c~Z!sO>?NN&E_CI_Z?$E$DDNww?Tt$eya z?>a{v^(n;2X)+snroPE2UlpT!8{C2W@dbO>%xLRzg)t;#vdp&rILD+rQca5fMHgtG zLTYyWKL;MFI9j>yMb5*E5qq>Be1<}0i!?BPhEiv#iEDJ^_4e-Z?RTrECkTPw^VWA} z2Udp9_sMhou=Zy{0X;2^OXj6)y%(s|I+EulHk(amf2YH166v#wB(;guxo@*;B z3mj&PjoWOkW_LPs3(NYeYap)$?UPkePGa3_)3Fx#_^~%KuM3lxAI)9436JjmXcSyMYRMFdsrR9IUFrI5iFb>D<+a4P7;` zqIKH$kM%mS0&s<1E{)8R(oKh7abukmlGNx3*j)@~vY`m2$0a7yyIr@h-&E~{A7%vs5ffe09I92w(@GS zyiUV})#BbcR4kFtu(kEcJXW1hpZnm5l)Ts1PDEk_^$BO~qD<|z#KCowXZqirfMq27 zU&<=!tM;S5v);jsN?iOJe}Lr(XlSBBsdz!VUK4eFmYWk9a;M4adc5z%^4J8590rB!v8QyXAd=5eM@we zZ;{x>u>-bqyJm6bw{9TFaxd8IFyD$Nq=d5={#9qUk78zS|ePBWSFayVD z1Ix}pF_5<~>r}$u<62r$FD;bLlUY*`dHX{l&WYzSgdfnxRMC^+vH7$Gxd;GpNn$F^ z+y0{&u*kTbQot-GAlTQH9x;w{6>2@hf=8{)UZ#jU{(9t=r+06{#r`G$CjVhFQjZJz)0c@7w>@iZ`7|;HG410AcBNcJbs_s!l>mO z?e;!&;h~a3FB|QwBw=Fpi6XONF`}kQb4&QU+k2C>K&2BK+cgzc_Py20io`kX0F;Sv zbz(3@3+fJK4u)x9x#q|C?Crn#H`K8X4CIEl|E#pI0?Rsoivy|ID3#;xw7`@8ro@u^ zSq7T1I&|N7!U^hm$ZvC-G|q9AYjlcHz|K;_%jt(938R#`5KS0&4fPF8xIaBRIidf8 zv-j+#9IXw0hR?*LsMyON4zjSYEy3jG*Wz5f%1_FXk-Z9B^BsSsD`zSyaS5n3tcd)C zog|#xPTOlc_K)m(R26agTyOjR<|1g-jti&<34|HhA?73!bx+QIFE9W}EHNP~DX?3A zzrX0)=kvtDGo>hX>hCO05kaC1XphO5q$r)Y}-)MPY%TuF8pM3VWzI5F5nvp%PznEQU#~ zfHE#s+dIHYA6#?LKH4*L)_THdfBqu_+Ud{lV6`*jfQxq!k%QRyd4mk~A*$6PCS=l_ zctqo31=UgPZ*)0{f(l%`M9Lq>Gr+?oFw>Gs{g{Xi{^8CaAUa(!Uu;VuJ130o z7-sA>$XP= zDJZspgV4Z+pm6Jfl;%qDk|PDtZ#8A>vPy-RNScWW9DW;NdF70Xl2@89sFKGeSn5di z4W2ZO>J(oFfV4wN8hE%%X$EcJWsfkco%hJMGL}qDT(iG%v*zm4XDsr%H@CAAk#UZ` z2kJyg=vaRUb|_hfHIN30xaW9i$mv`C{=_!_3!>VP@9;~Vfhp(MIDrz0{RK+g8WB`- z4+yWAC1s$vL38iI7zk`zFjcj0@pW*fmU#E#K|~|eBTh`J8G3oqyd(Kv@_)H<6I0Lc z1I<1a5Tk5uY?nAVWFo@*y5i!ae&1jpq=aZ_8so>^3UY@+=5dW0Y}BD=Z9vB52#9Fq z#w+le;}ILm!o-R99FZ2Yv$39Jrt3qR!;jspSD3Y-IKxlK9rI zcUO&_*jQkEMs&uTJu((lWooxdl6*C7E!e(XE&z7v?P8bfs}zCWNFp$*;9}$ZovI@u zU)ne$h+B%2Hfe|$Fqe&|p25DfO!D^_M54p#%eqD?gS&)`dtkoUTwh__ zlViLrY`ss6R3#b-LfdPIzpVFzxQ{4-s#{gaWAJu;p73outLN80XQAf{`$k>Xs-0hl zCt3)PYPo_s=^u{MOZ3={_7MdEQBX+R%a}@t9y3fC;uGR-Dwft1bOilD>;44$&kE}h z`NJb{#Vh2Z+rNlQO`8R_4Ac9hGZX_Fl{jCQg2)g36 zu(bvYVRm#>o}2q_4bBvEIZ#qjt)!$KNjMK*qNE_F)llF1yNsC1VxZ~hBGv~2XI0$* zYJNLuQ&5z)>DMB$Gh3v_U!IfwAd(A6uIU$p%a`o8l_*5hMA-1RWvetVwNUNGrpDRg zRvmxm7=)DTwbz^XrWKB_v9WON$$z@4G-iMR-#TAY|<`I=Q_a-pj zUwSG~QnPK*4=Z%sI@12kj3$etp*0D8bJ=4O{ZuU~V&Z$f&}r}J2!1se%iPe&{4RR@L_$3D7>VPF)@g4I!riNX@~btD9~ zS6E7ZGqxzn(Aj9JWn_u!$v{C;;#R3WyTKjV=j~f27^5P@><_x*w*$Khib^Rly*U2J zxP=`EwlPJ;LXR%hH?~ks%tUf?7R+J;A46zr5=1B}E>8b@d>t5#Kan@Czwb7dUyP9q zE-o~^a+A5aewEwd=`am=sk6jTvw(b8_-28VFTX%2S4DgUD35dqTdB(gko!_RqAxGtI zE5@Pvsi-}9~Fd4 zZf~GNzmJ-12Lf_=t0)RYlpl4{4i)e?W22h{4227{2DwJ)ASZU1fzf;t)ITTZ{tOp3 zwqTatXHE@_BzSs8P9lX_1;ln3#V_HqRj&=khQ?N8rDcl0lSvH0h3tkpJv+=s*CP89 ziIRq$HidD>4T0$IF@OERakz^i?#N(m|1u3bmZZcD?+b7iQCtSWACh96UDRTWB?7uO z=x{6zVg)H`@hF)f{D4#D^X*742Z@1G#?(?%^7TPRDNqQT}%;~`r9RU+x2}nNjjB< z@F_H(pwRxPeDnVEw%HTmxUAGM4%5z(-tlAZh_nHn0l-d*=yw105ZY}(K^-N;>Vp}V zAL;~R7j<4gIM%wH0e56Z-*A|OO9pK(2aSc`@GzEgT(xIp?opVZl(j zBcc93I3gwIv6eewWnP1WgGGqrm!UpAW9vr?TktnSlbxWN19?zJ;@}+jv4|%O6_mH# ztBiEcDRj?SdP4l|UyWZ*9VsIiT(ZeaT)zM7q-GWhKqV(+P0!*-8?N|)v#0Ql+x!GV zeZ&eDlbX{zWHZag2cw-@&UqokbD|GSaPY4KJTsE)B`V7m7OntzE z9?9g;VipG5)JW$e(_f;YTZ^pnhu-h(%9?77f5c_Qj3zrpXO_BHU-h|@IM&bXmX ztypL#Y{j+b9>9l>KmV|k5tFBOl~~%EdwbknJ&QE}FZ4?3@ge%O^wh*D48I`gNT=H$ z+&*U+#R&m+JBUhg7yCJ|hC96Wpsmq_zzMj#wZv|_TQ&C{C~7(a*SM`SF&HZ~r3JE zX|JQ3a>=OJ>nwG9l-(OANdwF|i1}qYIKR)(z6D)%`!uGsi*K+A!m01;=%El-M*PhG zH}Cl0Y+arc(U=JjCJ12nBuy<1Xv3RDe+`5U3!m886@My8M;to&qqG&n+mh8kMb?XB zl4BudA2GT_U~(7UrQ&VaaRPL^O|{LMC-;u9GL^7BIg65Pmb(h>aGi15@De%le{+3T z!ToyE5%-vOhDS4I)|^g=lJ)z0Dq}*tZxcWVg{&6|V((YdSA~-&$2yIw4*(&6&*rO^ zG_d&pF{`c9D*L4=6vBg)|22Duz}6%}9_#v@qdvcxo{Sh%?$40cRzI!Z**=HIA=o;o zPY_{OYx}jkk4tsK@E@TZ5@7nmmawN+?0xNXAA!w<#7uT>X1<(~S}r0S@VfRqbAl`G z4btFod=-Unh_vyCM0P%Q5O^ZGLrHbFxi;{2rQg!p zak+WV*d8#stA6DP;e#1qwEJ{I9kFbE5_Qo5JSOKF%U1d)thd33B_-lL2(28_m4HTG$CVgR#oKL$#`Fn1PaDPHAHL{vMemuG%*Ir z5*W6E`8@-A-u5!SzOn!9hKh~J;E9PUmcXhBWJkn5X7XM;Xh&L9k2fK{`G7jL6%-Xw zgJNZ8qlRP?ybHnm!mq3?2lxx@JS1GNrv->viGi4)VO&cqp;V@a3Q{)ap=)dvo1vJ* zgd{1T#p-&K7EVkYIQ06O4W}xn*=;`(%yibyeHbDJtYf}T_pZXOE)|5e^{yTb>e3?M zMsa_s6)6kV-tuWFgxNSf06XsF)Xs1Riv4p&+kg)_y z9AB#{uLglK6N*r+YcCRpxQ3Dx9U7^&zP<8PT7dyiVG=ThTTjVYegj7_NlC9?i;Fc~Z4JIh zkr+LC;BvqfS&3NI0r!o9$~NtvZeD@*)4 zfgb1gths(e|M$x;-x-#ZCYKlTsz4^)96ZrLbTlPzSF$86y>JmJ9KM$7PoG=Ew8vbgkcEky%UzGvY!x zKVVhSNAZco$mK4J(_;Jfbh5nP@kKR7v*F=r=iyKu*=`B=^XGqE(oGpHo-_82TJ^!p zKxN+U)r)++@o?~s&rG`y%(fYmmK)BnQg=q(tx>LH!z znYnaNc*h-cjGY+?6L~?mL+tjTpNXt+-Zd`^i+lzo$0SH!iPKaDk5A!~=I*ZCxzT15 z5|WxOtgycLm1lh8XNk0}Irp5ye>z%2S`>$lj;716^$M|D(5*f(w-xOnpKj1)twx7H zU~M0|{d-~SQS*Irhlt#0hqc|rsO}Pdk7t<)KQ|lyYH&l}QKFd~H*leDwfep$Tn-W< zOoajaYh&}{-wYIz+j5vy6lROCOw{6L{?(PP=L^T^CL2YY?ixPC=R_)l97obB@H2X~ zVVqJixhFXvfU^*-N6bgjrN*T3`9i~abC9y09Y%nZ1ADDAXGlKVLu=@rM(SheHA2eP zJ;J`cFje27T>8h2-!MwAetl-1E6*Y?020?cZ&xAo|1tHB!I6er*Kmx9ZF^!{6FZsM zwr$(CJ+W=uwrxB4`keDVRbN&A=s&Hy?%sP}YpuQ3Zx-?b<;>;X%DjJi4E?R(riO9x z%ZA+|gGCgj<#4kcAGaDO*V_0yoj;R9$`T@F0F?&R*Qk=D#xEg!Bc8#R0aYGjIPEIE z8$aV1$G*L{`z`qfB+b~Xn8*m;W@}%-YfEX<2iVun*J@rEQ(?9~9=$v+{2$sZcXyCk zPJ01+6<4J%6vM+e+7EK>=5GKyA;J9i7?m)&-Es+--n}6l@d7@1=0$e9r=sB9*VlDz z88K#V-iw~EQrR1xbrp5<;rq5#(p9^~T5F0Ia&NiS9v?Axbu3EAU_^(YU0rT!$%)c@j$M27$l%La;{3}Q(uRe8qlTS?DLNTYIDW+$ zoauF%&dzZ4{7g-3xHh1{q6O5O2C&zBe+!ZPz=cdluQ>rwIF?yLg*-*O+5bKj7|4ZP zQeI++ToNsZYi-Wp$ZviQO@iH5v{`CTE-svkUPw)sK3><(>~8nv>3HE#>#V}6XZ%eH zqLqY-wz9O;q%7(JepXYw+^zT_XG3tC1VDv(ayrNgJ6c+-mMqp%Sm`iqw>z9*KB;L* z8s2x{#2>lnu8odjdWb>($XW3NHSC7Nl#~uqs344JTK#UvuVmK-m4=Pi%iY z9T(`DB+%)WijhLLieDFynMu7-!tUBC8ZX3HDpFf%1wb`qw#gP@P~O9 zw6ySYFpa8=F-g<4lQts-69h7yDK3<=<#lSa0}a3|gC5Inch%1$Afs$irJAIUJG4mG zG6Cur#s*_Q9mHYz{3Y=3MA$>hPfj|NaQ;*k4=7=q$)Co1UGt>^9v3^q`Ts5>R^BA= z*5Fi=UbnXpHq7iyhD|?dV$1^laqgzTTn1s9bl^>OTASIw1d7eoU@&Qykq6zT%+(Gs zmPKy{5ePwPUUM!!b)Q#1kqr2FT+&X`04QyQqEi9bgdL|j_-2Uq3O=ja^78g*r_7Wp z&6wQt+sz^66*~q>b{t!Um%{6>1@@4V0WPO&x2r+lwBHuzaBeS$Xw85OKf!p(P?tQr z#;H}k+}?oAcNX{hdxtI0m#96fJ!_76HBs5)wgzhMLU@#N!@Ak6e`{MshAgeA7P)|I z=GxiVBc-M#!~VF>X~6CHyNr^z>q$UVWq5Vcs4@Dj2?YcA&Zf(AFa%lxXsR0xe+Uo0 z9F(QouAYS$Ala8b&%~q#5Fs63@*1MUW{-9Y_J%fDok2vt9v9(67nzvAStrx6y^6zy zq0xF>5PKbBd$pd(8xzxKu5nc_1ksqoXhL(uB!};3sp?*SzGn2&^$x^C<6}71C^y zoL6Srz`GoHxx*sc3P=gxntkEBs@F52_^QtZzqU<}RL|%2CrdmpUlZz1o>1dJBXHk$ z`qTHXEghA=ze%Vq&p7x<$ar@fZtNTvQmQm$v{^2`lezgVEI-U2<-(#XC~JUz|K3r_ z*Q~jY&(bbxSYYOMzL;;9xtKc`!QW~}kW*CF#5;X&2~)e=!T0v07@<&3N@XS*OfF@V zrv~gO{S^M;hg&MT2_Fg;NfYipXpz+g#sJ(BdQ6&H-kx%j8ox<6ua3_qZ1MS4Sg~P` znRiGG!8hjR6yY`_4mQu{3vqU_w&LPs0H%Vj7h8C7U612fB%T+OOD(ZFPFHI(vVz~5 zZm4XS9r?<-UiKYuy%G{Vj@KDD8Rj0hc7c_R(ligO!TCvtqj9iE#WvnUc~_`#32H4c z2-f7VSEh)?Wl*kPbuxx&J!iNmL_tmeJ zt|8YDSO84nd|3Ve{Mb6=?X4)u?T53#5&OyZ3I3%2E%KVx z;xi{;fm^Id_S;5|g30=Rpd@a|nt{~*p$GPP_{f8 zrtAS<`0wRm`5Y7A{$ESQ=G8ADUn@8iViTvJ&kx~IXEI{{B44A!B=!u<(+NAIdw?CA zr+5_Ek6>P4$~u;Xe!axOM=U6+q@kwZ_CDL(s%T#P5^zb8i;5;Nv@~b2;AqWhauBq( zrd=__K|yEr-TLc{S0xoXQ}5Q2Pftbj*P_ON$pv-Nz__U7!^6ipgMG?lKdAq+-(1Rs zVsO~K%RTl-i*b^Eb>9B-pZzfz85x`6<%HD4e8OJ=cO~(lC!-D`lBmRPivLt^TDov3 zC|X(?6`N9?O)t{Op>gRc@u=v7c`7;@kd}}bEMN#F6N~n9psBQ4@kQvN)57Hz<%{Jy zaTP=kh`4MP!JR<{PCA9MYzK1%b78%I>p*Zcu8?e)g+e5ir+#; zLrO&HmS6HKQ-KpYPzhs?Rte^{0N4>%q5U_aCLSeH>=J(C-4!GEd2KVjAWq%#geniyieD!)=(ndwO;5tRSsW#Psv zK*jz1f=^tA%uiFglThI&lj)gr${6KWJ`z5Ny#G#!%O;|QygPkdK2=rMM8iRnkNIcgQBGto3b${LzDlz@T)!TdK_3KFRaIm(nJ8F^-sa;Qybc={8ayA*%()#4 zLaJTjT6~?v4`bIgGO3GDQew=C!=Eq%9L)=KjMH)bt@?5x<{*tr#dRL& z-0M|R&=@7S=2d@J17psq-Z1vOz+T;`$yP(!LwMy0qEgKz4vDEBBq0k9<6=E6At4tL z^JRWR&zIKZ?CmhwvS@oJaR0OUhcq`J(!?wdRxWb(8bvZF3-F&1_Nn6_%ZujDrU%T6 zWFuY}kUc^z(=aYJcV3U3^_9|0a3Q2t1f2&AsH1PGBtm zspmq4rmu@uY_AV&feDkIq2(^|+na$_hfMl|WPu4DV`8F-Sz!XC?9PK@J8%8Yc6uu` zX{@p%sIltW+TOc2*_&re6CHBrrqS8lOUsKnoA&axsTCC!&tFZTx(+|%cy@?S+KB<|LxD&a0yT8odHi;$+DJ+09&K!7i1!ej^xB!Fn2&W#W$ z*XQ=)ic+j1YH-oE4+)k@|Jw_TlcU4+7j)z?qqo;9YM0onz=)CfR%|=e4WWJei|O%Z zttJ-<8znLJm6-kJf)V>v;b?3h0@E)C!xHJ+)|XDeu}J;cR!OFa6#q9!^rt>x>e!p^x(_oQQS{`4q{9!X*8YBmikRg1IHjyqdOc4Os{MPC4%=(qjLc~p z1w3FR2QGP4iU26-^>6uxYeG%>I8zTV0|lF$G**Js2CQKWiTpNailDwih-Y91F7?fD4QY z3X|!Oj{%qSe+O?2u#0dM8r%^wZ@JALebZjk+!7Qen;NSquiDphoNJSa$rzflP^2ZeA;(Z6ZxbrPnC-2~>V_e^$5uYPdX#hb9$ zHzYRXYrI!vkI0Ja`r-i=;gr;L+U|A_PoO8l9C?`_yi4ykJUuUKOP;niFs}L49JP1H zeK66E0c&Vy5dZ0S=8BEgRlg~CbVqqNb z?;9Liba(+K-v&M=F?L@RnEtD;+Kv`t28S=D7}-PmZnvlT5a{GLS-EIOhZsgD{t0g# z%iH`eB0-?-vCZXC0a`__h;8wrdU>OH4O4TQzN(hk=YOP4RQ_rJwhy$#od#2Z(ons_ ztHT9m$V<>q(AZXLHC)UVuD(uwc5r9+A3thF%p6yyB@P3>m|ZuppZY+Ll2I$DD~P>8 zZ*ci^)pg*b_(iJ zCa``g*!*n3aVZ(0@b4G#WD5k<`ee1q=v!4#X&{#z8#f{=<>m5Zou@z~;q#=X?;|-W zpZzK(A~#~StdCDlmmGmlm!N{gs0!6fnF>hHD{8DAop=hq!HLz_&N7!KU+}nABB@}s zHYzUc1ij8}?VS>y%lA}$BJyaKI`+E|f>|LK9k$EO=&?lM=p7n{UXZ*8P$_In_x5Js#^cE@ zEG;eKuuB^(y&Q71N&MV@Y(OAeSHU!tmNGxC$ulcJ=HHr00+@|dsz2)+edyy1y~6yxNf$g?q0v$pX0?4SJ}=0 zcKKm8x2)Ll6wmOcQ$e;pd3!uAdK0;AT=Cs_+?YHsbO8;UQv+ky;gDrHLZwPmPOC|6 z#>p)bo%Z!U8t80oGE?8mnvRSFZ|~s7>(NTY{A|;g4d@x3PA3rHaX+2PzA8KLd+W+! z?WXJGfx6|aZ9f;7cC3Uh_3=JP1UYx?BjV`iTh_qVreE%I&H%mr?;-C14V0$fpFFVJ zXe68JBm6YfeVlnSdnD+r`xrz=;-ymrn>R}Kc;D81a8Z<@zjC21dvNoi*!!WjxU4h+ z0Y0|GdqaKvxo>(jkKE(pjG#er zcXzGFZ#f38@FzI;i@bAm=7t{{KL0gZks=pC*Nfk42qg%rNFZ7syLemQN01l{_Tf1E zFekodoltn4p}hjsg;qfnr|h4d&;iWx98N1y^nn@3;;bKO`a47jB~}l^n$}Vfvpn<( zage^bdO9rzg80N(JHHn|r$W4eUIUVGbGD7FD8XnSphJ#2)AI%G}Hbo z&ob|F+0ijm`z7ACdEks`;Mlj1L^uwiBBG&{KzMhCgRYvC)RxmT6qL60{_>|2=d)v5 zQ0si|4Zlbi?~uI?h5SE+G(`dDsO3Cue7G#yy5e8{L&}6 z1XA|-)BUWoX5Y#9EVDY&AI)~j5GewTH-0RY;M~-2bm8YaPo7152s-eT8!CjnB`qB^ zH|&El;Byj86iw7V=R?G2%TMWg$zZ4Op7gi|8$L-u9NRF_ThW2+jOk`(0b6az}$1B*x zkSCihCVxYFeS*~NOBJLZ4#}z4D=ej}2A^+HVDt>miypo0kjr?lnVe38TQ39X35h9M z()v10+MKAy`G@L=-D3$9u%`mvST`}?pqKRdl$c4oXk zfp+Y4o-`AtaWGk$B&mqc$NPR2Ank3TJos7axD8kEwN96dVA1CVideML<;9byX(Uuc zXD6D)Zq;o9yo1fQSqS@|IRhmd!{AR>>N+9b?5%8<2d;KIzB#J~{_VC@a*NigCsr2G zhcS%k>c(rgJ;GOzBl1G;Ckxb}?BaMqmh5Sg1pv(!nn6Xws| zU1a|y?!#H43hsud+Z;9_fwOm4nxCF;3xXux26v^JS&P%QcH>yU1)iPWsE>`fFK4A1 zP@Hy57JA%(ehhB2RdZ&D{Sdgb_g0!8B0sxpQvV-9wI~p?gI;}6fpvlV1B^*45|SgI z6|_ZGw@2}?F=13?O;C4F3lNd1ls{;!>-2HlFcHvD*j8)_Yaj++dQT#Zo|a`8wTzyk zACUVdy#g1H1z&;wJjqC`I!awud)Y#x_xi&-6_D`k4!pj_q&=gv2B_UQxT*A*M@AQK zr&yTeDGlT`-0pfiooI|cf`j;Tz#{Yda;E$3O<5L*k)rgqaxD_diz_4 zWo4?1ov6q?*!ACF=wrrC6CSdJck6P#BP7G^pq|0|GioEXvpIfq-+@2E?!Ro1SA~C6 z1K|a~r=Z)YG4CGLPlZFxV7g0gC6e_rPYDy{s|gBxN`Ljt9YemW|JtE(5goMzw>kEw z&wqkZ&Llwg>>lInCZiRt&%~9KtP!>gGuAR@p(4YkDbNuwxHqMT2%q{*dVHVrGwHr^ zfNRNf0r!`7KO`*TM@c9XB|=s99Rn!s&eG(H@BwVCxfkO z;}7=pbWAXx+hfmSJqFtiNjtyDDOo8XRz7gnW+w390Ql1!3-6Ant2WbXUCuJ``T5zI z?@i6Ztjdv@OxWc&M*lqo*`0so|G<#9?JovHA?f*fy&)0Tov;3JiBFhpliGP3JkifgM<%jzvvEWs|J8xHKysak6M|jE0n!dAPC}bH?f9+ z7HFr&d^xjLnQ#YOFkifs3=?u&%51b^;_e#EL^&JhS#;un1~i7i-?x4gNMr`sD=OU2 zL=H}kY9(dnV&1{=py6Q7iIzvlFNt@8V(Vpcsi(_e?TCtEKMp-e(J}huYYDNNv|k}Q zqU6c0QJsybUh389U9`zU7|KY(Nb&J|p8Q-h?`Qbu^_d8TuBScCU+N~PzV0j!q=#R^ z(k`&mneQ|$ge(69TugU$*tWU2eH@~x^}Yfk@&ft1yuAD<{rk~?c77e z{4GjGO0alDm3RZe2{>7Y|9+{(gT{w3NS3z2+W<$IT#GB^s?}6E3@LLf{JCTPc~E*B3u~ETo5*`_NfsdS+^2+K(MWtUY7P z4j2CJ_tBJ$Y6YjPXbK7NNql$TORVmZXc1R+8n0d&p9wlV{nof~lVL1fCLNxa$K2Y( zoaGnefY@rr%d!gfG&RS^i_aw_4xuz)WJTSeN<~W+eg)&_a_p*yh1SMpb`Cg_h9tda z;@o<=l##~^#1pwNGczuquk$wfd)_CK+1CqPl~b!%j${BC!KpvYYIVuWODeB?lj{qk0&2Im~t&-o3! zN*^E=-M0LPrY01k%eFhJafzWpe+om08Sima(%yN;R>v!)ZgRpEE*TCNZT$!f8vU#l zL+z(SXZ(C{S?&8TGGB6aO(5ey-V3vabJZHq29gxwR+#2}L%H(m-XLb{<`S)Rb)4Ou zzvy1sImxeYeqzk9;9_n~#C8Kzl|}y~=#8KrAL<`TXTh*yJLCO!He;W+@0^Hd&T~;L zy(?X|iiWGK+4|Z>;mIDPbOBvBNPwe_hak@<1DJX+`Vj4kL&a)%oa(ZAZ>{2m;MBIA`2GFMp+W?lnp%)Ma6#2u5dnzVu2)IIPj`6A_c}S`=JWSWes8wB}`F zwtRmo$OwIj6CBE-T3ZI>1S)pfS?c;nRNTV#JBRY)u zpn!WemL^m0Yyb2-Vd>gCDi{9Nd^ay)eL%$c-FM3IS0*Yl`c=;rH<@V0-7T%19r`wKVogcMATQ3V)R$nSoN{uEZe<&OeVX+fWXV$nx;dlxWddNbN`PJ55-fn!M;-!R4(zC^9*WKJcJnFHS<*Ra?)>zP9|0_vO zjmJ9eDh;S*W=|IcRVm5B(gH7KW}a!e!*@TUGa+CJx0G%EF9CjMLVRlW`wDT(Mr`ia zN#%U8p@J-5s*jcYV4lLTG|O#6OUiFzlxQD--{0T*`D_oDXlSSt%j9)EYeMNC*W6_8 z<_1l!0hhZ*&yi}s`>_jjGX%WP&jKk4{krZo2D&;>k4cwr7HFS2I0lfb8L#7&BWO zuh>G#(pteZ?j*_#xj&4Vuh8XsJTI9jA>Uy&>~CJt2)pbZDVkCe?puFA?6}HanHO)g*0^7auXTE znyWq|1~k2QJly#_Xi4bV9T(*KTq^+ZMKGs3W=x5{jg>&!&&P~KAVk_~hU?kZ z*X;h(zXgWl_31>`CDs9oDD~EpnrM_`P$CYxTsTaiK=#!MjK~7;H24Wq1l*DvuR~%? z85DHc1Lo4LF^2}{H-PB<(@y?UNI&G z4s=e!#Yjg3JBZpv!vF)G@zF3dDFAs19FO@!7~^HY@TLcU`c5YK=v(Ibjjv0wiP!;;g%S&&tRc9&r)!Vi+Q17cDuk zED;kc+MwNz;pvqj*gTsFbPAx7U^@6i0&d^S0diAD$?uYo7!+nU%Qb6^r28dM?1wc7 z%&Yb?#G0CaFga&mgh5jO7u$#X|3Jp*m!7!H4M|Egi1#C6SjAJ|1S@3n`wq0kBxaF1 zrbAa#@^|C_D^IM1;)Pb9AU7=@y8$fh(XqsxCb&rPu|K3f|N4^2woN5FVc6#Ae}o-| zhZGOIXD_8Sd8+pyk|S&v*f34Prca5$ax3{zL;?olUf&5V(vZE0z!GJq1f#WsC4BA# zlz#&e(`_`Xro<=8yyb{1$>`e%a#0+k?vf4-jzEaryH?4Q>-#_AapYrZ#(KDa5w*S@ z6^|@ahpxL`WhJJBd&Ybz>FfA-82nOgdi9mmFD>3L&CN~se0enZJi#q{ynyZ(9y zWuIo@BPQn}gypGTm0cTL{`@YxcuIB%k&y7w2PF8WYAD$7z3jaElS_BBhT{-|T$$67 zv08nmMQX+lhKdCG8Xp=jL0I~FO>QGLHRe%9Dk7zvms8d-z>GlSH-^H=#zat$(OVP| zq0d@&ubO84XbqMGhxwb$)dx3bS?vH@43I~K-ys}S&{IWZdolCUxre>o#_)EKj|@tU ziD$0Hdf$9T;m~gah;O84!x`(<7g|c>#HeA!Y=jqGm#dA2CZ$Zj7hM3#msoIcOG3;> zh`V`Sy$+)^r>hF;WWVEoE{L!D0ViKmT`3v!9^+#ib3Y?Np7>0Ar%AX^VpCCIX2AZu zJvUMR>mCA~#O8|k;^!Kr0N|VwI28ioMMWw-|Eu=pxr7=N4prOLr6t54Ud0??X}e24EPpm;j&<&_>5Gqo7-ClectkjCxaNuGg}Uze zXZURlj&jf~nfX>~dm|%B)6$vr_+tYxGc#IWon_Zl^Y*?|laYVdJb1FgJrR4Y(lPXs znxNMb&6dkt7(=oZQ;_a(`v4XvFIF0&8taN>&~Ku1_&s{>loXjL6)i)-qI*O0ZK^LrA8b9X=g9lc<ono%am5 zujTit6c! zr?#to_g}vyGeX`8@cE7kVHsHALW8`Y1(n{B0;p;#Cx?Q-cf>CH0-8ZW)XhSFH>r-z zj8^tUV~|g#FiaZMfx`^|N?BvnqY%G);lXL!z`VP4a&lAjaC*GWI_Xg{6}Y^_KH5PgT5~TT>oF#y-~XT!f69khHxqo@!o3e8R|| zj?;l3guL{DGA)%dxOp9KBb>m7`Q|hm$mx#b${E?I-TlXvxj0oNsJBzdYG!1`M8kt< zS~0#ZFI8z?)rAEOdpGKqUk_y{z3w-iaBF4hTGBTwIey*Wr}-q8w3Fm(TI)VZ7wZF$ zZ0sabf^D?9+xKqTcSpFqC+IILOIn>jwsZ)E6dQgIdm@_k3hZ18(mtWr*=e+CFfKI* zPy`?qJLt5U%U`d8^(%x|`GNfQJS#F-qJLJL_uX@m80rXM;0Jr;6>%=l9!?+O_&T^| zjYiYTPym%N$QqW6j5>NeUkX4})ULX~ay_4pTg@4a^~q>883B(qTBIW);SiuV+}-=r z&un$!cTo)v8K$738k3ilotu-uoAFk)v=HEEL;)R@2R8PAi-p0fO-M`uHf)Supc2y& zr+?g?L-Dm|F@;>B82*9W?f~#z%G_OmsjV_E?ILj1({oBi{*gE%HJW6D2$-Iwgtq~ZXgaE?4k^PaY+(b;}foT55G zo=t-^APS^`&bQH7o7Q}7F>ds#ImA=S_MJ1r_E*Co!J6|Lk@;lz&H~blLbvPE*=zAz?+Ui&Y_||OZ ze@b(Il@LO0vh3jlzSi+-0YLB>GA<0w_&8@52&k+? z#1@aj9kRR~knXpZ0sIl>Myzb*MACa2sad~-iyY@qm(cWZMbc&d{D%9yjTams0BZ!z_>Z(T|BjBiUP=WJV7P`B#MF{K z_;Ofi=J==nG2CDfdPC$H!>T^BT+rw#!iq^F4f&1ve8B3$JBIi%oxuSMT^U$N+>LcD zYpY-wKX3(d%8ar=-K$S9>oJCh&#V(hI_lP_Q}Q-6HA38i4mOuaV|+iBzW!a{@0K`# zJ#V5Qy<$+#Y)$Z{M?E@LRaJJq+TwjJr1!5M5Y`dD?s-iZ{CCrFVhemtn4 zz_Ib+?i<)DnlTzdZr9J}{lGma4n<9RkMABi&&y^Q|DUd-ttX6|K+(?7xjV5`Vjq`C zb@-zpMc%_K zV=^)9O955HJiUc)1c56aCZn;!I(2I8Ac_z=fS_5{t@gHa4MvvE>Tn{+P?2C-s1O*A zLcamvB4FhpUpTO2ACGsN&;GK2mC_vTlN*hX_xFKWxo-ij zi<#>X{esHP(H{O)E?7gNV)o~(V@U*_N6@7T@f|%l(5+f}zm4|T*e!CJtdhJ_2an zyzQR^yow~5Z;1fvT()`*3j=+iR2Fbz(W7BbM?~x|=)%#_>cZGRiiB9bKKTth%h-vj zk>{VH`pxS<0}_j1Y%Kpar1>Bw3hMZNH>UY8*8EG-I*|Vzz^wp)4+}a`2=0XM@EqXSFKub0Nyjt|9RpV+`}t~(RqJWpX7pZ_l}^c z2>@uDmX?V4JRKxuCSza}9x2`)mDSmUhG2*IKGROq_r6w9Qh_%Cs5)^CQ7#fj^)jIk z!dSWV@UctmEq(*f6az!rC(TVe&5O@UD|fPDvmZj)$ldb#djy0W5PZZpqob&7PAalv z&!QGx?@AgQhF{)db~~&Lfr#uRNQnah0ew6QfL-mv%NJ_jFM2x90ohLv!DKWWk@g_oSl3K$DD$xYJ*74EpdU zh&YMXQLRL041p`?%1OyRj_zP?amsNBZZ~UXstDD0;4Pasyv;ehGLoX?{L~{J&x?nr zw)(o>`bk}zQPK}(F{SK;$q+uTEbdSHls$QX#B2f6kt&!Pn|3d^$E-<^s0e4WcE++< zY{Cfi_8uuw9WIdn*1-R0{9maY;h{}UQ`|Uc1zk+Wae4{9Xm$h9V`c1p<%qMj-(BZI ze=7RG2Z(Y%rLSmtb32cY)sO!eyMwFcMtWoo?JodwtJ2VtDbTpI_{2v+(W&zmp zws;{RZiZC2mVY=kK2_V%t0N=FMOu$zvV2APd!6%_s+urgDsjnO}BgVh- zw&9PzdIrltcP^P91dxMJ4=|PiZg^>CcVe`O9UmP4K8}bs>L`( zb7K4Au=~*!YC9K6uDr5pendHD-fq6Idd(gk@zK323WMPk2O`K(6zKCytkb*XmKRK5 zzz53Vni_F3jkBZfu@R#)Ahg2WAEr9`eWcDM4r8gOi@t@}F>?F6xO=QDFM~|80-c*XGHY`qUC`XE4V1xthqH^AMld+AbOT?hDv|0g%?f;*Hx2@UNc6OO$ZUpq;2*W;V( zC8Z{FWwq>C;afb;EpOz6$`a$F>%l@84KV)FlyFnJp2ub8oShs$JuP|4zwRy;bN*Cn zdgy5?=zJGng=Qh-Hl*!wjE|L+w39PapE9rGuHpXzCY}_@QUT(@@y(8ADSi=Ke-(87_%$1mlO1S2zHTP3pIZn`Fjf_>1HA#hPPO1$T<~LS z5FnF1O)k^yoFl)aor{^OxH3Pc`sS|CboLuh--xw@gZ*dBSGBF>bCYLS+Ii3=1Qt*) z?$?dKZ}_0d_Aie0`IZ>R`4N@RVu2Q7ffOlQbK1ZLIVOkuSI0X$i%0>;Pk8}I$J6bj z$SnkWGn*|5E!r6lfV@Rj_2{(1wpnNJOiweuu;ITSrh+}d9 zDOLv6Cy2D|KlCP2wu2nHkp|FvQBo2$k!+Agl-hYi{=-p^i9(2_qNclAFCAgPVSf3b ze|t<3uX&Z6@20?t#R2HRsB4NaaZvkG9n(3q5~fNGJdFY4y^Xz=S>uf*J&L9y;UUzG z9+mpp{$_trnA+aO&nu}=MSSp@I{@C@2_(5wwnV_Wd>Bu(03~*zvY%+XK5M)Q*ANW^ z5L=Lp=?54xaL46*}@w__8r-svvLpxRgYy zaay4L^VLGBTwsf}F|7KCdw?AZLGG;)obx4k|oMGDKc=6e9Ahv(_Cm*UCiVa+(8BPm+KKr!Q$Vf`ziiUYHP1)=JZSi^i& zOcydhvX5kd!Y(A1zn~XtD*ZWcC%)>lWW(Ov07%$B2$wD!2~a~8b5xIpigk0kAZY*~ zHQd)>?C|ihFGBdA*60|}&6pe`NBs$+Tie>ynuCZnM&P}GP2w~x%H!iex5>Y#4+8_L zDGj&`)Bb9Hh++4(dWZz*jyJ2tWxljA&`=fCmFL{@B-ETTvUS!QE|NK?sz{ianz4Wp z^-bYn0I+Q5V&O5kk_XV+-~bk+yc;Q z(dkS&f@QR);FU`|0VGt5KgR(*)+hEgLi`_7?6rN>fI~?v{ie_74(%oXCy5+AK>F#T zotD|tJE}o>6y59?q!a4>tf?2qgN%dPY<+JKrb;Mq{Bc|*SS{a>g8DSI@Kj8AC*#s! z59W=5t**a}UHkR8FJpJhG^rZ^`56C>zQ=7A`DK+KYeZghncIWiVdJmTxs;F3{26&O zpRb~|KSQ_e6;hM^(sX}!CuIkP&GqA|lY@{8{X6Q1TTYe}!3*XWce53!OV^SII` z59A*bBuBXdY>X)pG2|@=a}>A8+aL0SB`#A<>7cq3`g3q4=U?Klt!ek6;IICqh1Fmm zQC}7z*sAo;^rW2_V{D-$rw}hWM!tAceI)ay=#%{ukOl&upABbW6}DFJdk_%6*OIV> zkE9FiffW)9LaoLz=AU!b{C_zFxZ+pMB?z+6Z1+^uzKp@=OAIK%RJ=}ulS21BS^ZX`+z40FIbW35ryvb?3|Gs9< zY)f2(gu8YAIQ95mo{W~lxYAOMTFi;y$aCMDj{ga2E-NX~&?&3h+CQt>Xq1h5|Ng#q zB$WxRWf`H_rVR%x{yyYCF~>ol+Nvud?O_1?4Q6M2URKeN3N3mWyzO>VE+VyOwtiDn zEiqy-xjoMAe-^B;<0CsyPe{FxS7-7&ZbT$}766)UHE6r#j}Aa2F6IUQn!do+-FpJz zDgt0i<}G3pI}7>;5?4g!@NErDbu_gzv$Nn+?lAiY7TCw7#-%TZ1DXNJ5`z#S{2cCG zovlhUi)N#%NJH-6GxR&)$pJnrnO231`Pw=rvUwk>J1aU~@0UOL;TzHLP@#;uXXBgz z%;3Qkd2fvI?@t-0%hzFlHXs_0gjzAMj@++!H7{&DLelQy?rnorc_{>)L_{vku=lnM;_Az+|z@*j{3+It0Sk2(QzU|#Pb`ZJo2|)-@!vmT&rwk zJZ^@nUREI|FW=dA-Nf;Nl^B;Ap?}<%xfvnpk8EabE&b&Ue$QVOEhe)?dCKq*Ny zv9>M=&Jv_!PO6=HCZLFj8%CjMR*5qqZJ&4agx>N|x^8YlqX1H~pEg6phCezc?Y=aE z@1@0~z~gP4C@tfeO_ehqH_Y!XvoW&#J_Ru`NzjNX9l6Oi>4h7@1U>~EZAeZFpAqZu zG>#y4v9nAZ=kNR}A{CSL{HFkNc35IELLxM)EZ-BFV8O8n+yiKM@LH{x+u7oVDHL%r zRIAIKiRf{$&?K$;7lsv|!(2e+w?K3XPS6hw>!Em+FDTP3R*OBtpXhp9(h4Qd^465ef`teJ=N(zp{hs$E!Y;9R2++80jpJBL1t>csMI zzr+bw7K6Dlc09829->xgBB?Y`jaj#cp5>v51EK&qh&6&Z(ra-Gd@(fRDdNn7oXV`R z*`1%)f{knn0{m`d(GU@dmR{Iaz{;Cc(;2q_UJsc`;uJn(CXLF$WHy5>RK?jRV$Y5~ zkxF>Gy`WCc;WCUgbW~qgHTyOvKXR1c_Jzko_JdG9((IIt=|2a7#Hnc6Wu5rxE_g*0 zGZ8K7H3G9T^$}=rbo)?+XAMF%M)_nU-=r>Q*J9axo9+F3PzjgDSt^eIH!JP^Af2Po zu`_;wD`RDapTxH88^^%(e_KoGi$F zlIO-Db{(CBKDuG#jAEP~6z70^_6 zPuh!4MG!LqaS~_}mq;OZVb^Vl^zZPrm!qopEdl!+55l%%Ro4q9U+7<`@PW9I7kkeI zF5ng}BK%8ef2ezdLfUVN@o*2#>~=VC0C)>LU9eX~PR=+2G}5blv$wFR9;iU6aIevM z{kWo?R;`FXkI{(9MOj$#U#A0ad3R6uuX*;M2seSpSVQ}(aGl=0Z+YSPXPX_K9o2XP ze2{EJM#(duz5U!-z24F+bmAS!LymHZu}&#Y79%E^@{&%?V2KFoMG@V%nnlbwebKfU zw(r>{86)!o#eW8TEe8G-{L#oA6X6;_E|FVG#SL;I9CN`Ky8)jKCwZK(+_(XihWLM2 z`|Pc6i-jMR`pObLw|)reDa$Jv#~e!x!>T;fg&L+!jx&?24MSj*U)Z70&D|f+VfOv2sX2vJmiZ;$NEYb}T;U0E9oOemBxr?W6?_CKz3 zAh$z_9H{)(m-Ra{R&Fnpk|N|bkeD-$WX2C#Q@{?fDYcW3GTzkiaNuUaJc$SVG^{@e z`VDpeJ;?o2f?3>77iQ;L)r~7C3z=!nkMNeyOwGtLIFayg3q;1m1q!M^{qDYL z1IcazI<0a2mlRJFCMm)n;CPVo*V1zBqO&*~dVRSBzMwN4^DeX@#F~>tU#)@u2zRep zxLKmO2EWK=Bm*0}S(x_B;52xo66wY-3@7RV*m!cKe`TnWp+&r;{05_Vuo9{Q>0QKc zKKT&@xrwK_P!>3O8K@pa*iI-}p$_9i~_63dweLJ@qfQ03N zI)uHQHvj&;y3lILCV<%ZaIK88VQ(<0dVvrFKX3@i*7grLwg9hK1Uhdx z13VvcbHx{XvDBkftV*N442>8i!yRRgW*QgQsQ-VA&SwDsG}LQCMl!s@EA3fUk+8nE z(HV;hBENe(RALgpeyay_u@Z( z)#u@G@hP(QB7eD1#%iRy{q6Q}J$vq(NGq#}!sTUI>4Wvnv`+2pPC~>TyeLP*+sl<+ zD-tL^DyRtH+(GV;5Fe+Nl__^#mT{huQU3eVtDF{-uJ?JU2E}1po>GzulQKFVw9CWV5A)L z#nY;sD@7_lEh|?bM>8o^vU*sN=)9l)~k-wsfm?nd?+7-TyMrETGc zTk105;KX2UxH5!s)Q*2CETxCj)cySe+K+^1ON)zJgO|wP`qbav-hMp|1A+~-pFqlL zd+ZZ74-$b&s={ji$`jQV+Wx~TlA)FbJP6K{y|?}q-@~j@zL~B!{DqZ)>nw@q>v?$i zHYS>eAH;1gs1Pi3T+-*K1Ae0rW3=6reTctJP_}2+h%G?rm#3-^MN)80Jg#Ku@KsT9 z^4;%g?0V}7*dBtBXBRc*XuLMQa_sM63UB?FbbV;TJkYn*VJJT0W+rl;OmVAjmVY5! zO)esLkJ7LLM~EIh2hdf&JP)Rx8h^<1O_2o?rN6hmg!^CH zATt@c2lCN1#QIG=2=}fR{@0ifPASQ?*K9BGAqmrcra(F7zkg4UcvNFTJ)hz>UlY&G zJefz4q-={NJ)M3U2Ny`xkSB0St%-&ezDl2w$8TD+>VJwIG-Ynl=X>4Vt(a!o@W?S+ zbTU1)IB~dw-}4V~P^&Xk)0+(VpGt~IzXUC4Qyd~3Luc02>Ivv-A_FtZaXY3Ti?w$L zb;y1nV8ZG6&9R737sn*+^5sg#bhyuxe|4^1$?QOBn3m2*=f|3!veqKja zil1V4w{$zrDWO~}@7c+qhxksPaYo>NJr6V~jqetL!fZ8_KM-v!R@;j%`tXOA%!=T} zNp%e#J0D8Rs(Uq9T{F5CE5nuRS+zzj(WiAI??rrp8BHEdA>9h=5469<2ci83bOnPl zdb(kh!^+8u1&|BYdRY<QT%YAIR<8Z4#(=qm>d+TpD0X%MTRaq zUWiKH`&V@{yIP?c{Q>844GzuzX1Uc8$_43CK(%Naot8uDW;^kpuKYWOr!dS;E?sMedT2j$ z$K&VmKF--wnetdg)Frn$mY{uy7pJM)X0l!jPla?-w`^~EdWy7B<~UB&iW zBCZn1q|thD&he%pvRh_EF|r-#P>*^wW-0UqE`lHT?&`uEEW<2*Hi1)qRXE_km`OmgWvgvS{XNDOKf#yD#hw`^sxZJyMk&Bo+Wq4V-SOz$ zWW~px#}}V_+aSNnU3l_u5uz{Yi3#1qh%azR|V%}e?4M87+xms5sb0?{&Qp|^i*#M#BnPw!pPHlGu4X>pU&eQ7!x_~mfH^1 z0S=@Je=_H8-r_zzdKle&q5;PYm@ zbb4Z>jocXkKf@ygA!X*v2wKpdmW$(b0Np&o6iN;o7YxsA+bYq_kIqilX>b*8>xlgL zz!~ICMS~Ip7h6?ZGooq^+Vc1DJuJ?x#XEBjraP%T}LQ#uq%8%4@hCv$4UQ zic3gwb@GTRA;l$ddD<>$T3n=RPLX}EeI7SccllkEGMk&`uLRY;Kv8b_bNY_^O9#VQ z1I@0CkP!xm8|mUd2A%P#E-xa}?XRq)4%&797L2mMR$vUM*5-k>iK8i(nUVf>Y|2z= z|N3)EB-nb3*_W#Hi=hy|56{Q!WZ;MqSO*<_39f(kv-E zI~#%vdh7-%U9P|^09&oMvir^9ikKLnB;{SkGS_8$PS;$w)loo}Zl$iC0TUJ3%GCuT zw2CIypohceAr#Y&_RD3J;6dA&W~7DDap_05{YF85Xc+8?(X|Lw1T znhI5n{88g)AEqBABy2B2+5PWnhUNjq^~Ae@CT6Q<Ay+J!}dc9}7r&4_f3)Rv@OX(PDL2%+GxJLV>Bl$ew9> zb#slMhNn51)A>HpE6|`}=#9ogh);}n>v81(Rbq8U(aQ&l#CQKS&~JCS+BQFZ213(0 z^l81Svhs{}*U_k+6u@fOKrFOf+ll9wTik9|n7w!l3#qKjP*(dj>gyy5k|nSY^1jt; zbP}yts)EkfwHqyFB~>n}BI({PF))v@h;CwC?U}bNooDsryy>j9>|xqgfb7EmaBi4G!>U%nR^3&>Gld(DzGS7l z^>)(^#<}Tq?*02$~tc16PoVWuGK+EFZPFxqyg7q6YJpyV~{?vjL zw-p;Xas55v?agf2{t3tulcpb~73O)e+ywfroZO5C0HKWV$qmh8!c|`U3X_ct@mh2a zRG!f5WK&o)LA6Gt15$MUpv+i7R%25+edMnY7B$GI+(S*E6MZ>XB1xg0K!k~VLI@Yr zdVQQM>1u&83k9wRnN^JU>vV36X6c|Z-hMN1$Qe;7&`RAB z_*xK`@Uc)_+FPv9v~ZGYy}Nbq_4ZjWsp5)|iDZ$LfT%Yd9e%t5*sS#0<0fn11mL#P5iJ;7CZ^l#OS1y)YrmvqPGhjr8I5uiFONJGGIU%47u0 zaguy}UyNmVO1p{|gxLv0j?{Irt_kVQ4Z8jT^{^OLxBhTpeDANbuzyUCUq6HlgxWdQE~inP}UVNQ-=2%!*a-=ewO0^+r`=q`I76&r)7nyk;O zDc^p4zbO!yfSFKD1eu03pmXA9_jty~pVZn4cwynKPC*|2 z%%-%<8lXWOnfw)?8kZR>&;+{gW`mGS{Un~j@PgRGT*Y!bY`BxMKi?N8c1&OKXC$U9 z)^05&`VXFNhjf~`msV8BMk_K-Oyb^(3+26rpTlYil=NkU<%&KeQq|WLnf7p#?;uiS z?)l%RGGfrYAVl<*^O3yi3akmqDf}{8X`Q_U>wf^PJ6%n@bTD<2^uXKHrI}e7vixil z?U?J^Td)h)XeRB?A>o+yd<__dvMVg_M(7Iq71gG8QXE$QiRLa8#$}Kqxcgz=!aoHd zpe*~j9nsJqaFOSQS74+ydfE!<$wT{?Q2R$sNbOPTr7@}2zK{rfQd8(@kDEuxT!DlT zeAke?3tgn7QbhL&Hj&PlVB;jcHS%wW zuF-bbsI_P;a~FSdP(%OIUQz=>T+l@PcJ1vwk)pc`G$RS+>%QcD=2&7DiO+58r^f9= zTq;;zr75$(Moo4q$<2y9H=SYseco;YuCCHWWe^u1S6E(? zh=E_lsR>@>z}gsK)&KwN&wG)3vFkIN{FA$D(JKN?uk7SxMCU2qWdiw=B)A*$var`tI z=q_M4`}Np^fkcQ7e?$u($NO!!C)8qugyPSV0=};EW$^6@roX(^J|(l@OOWH^05Zuo zx<|TJ#3%Rz0FnoZKJ&S9S#V1Y^^1EO0JR%+Io7YcokTGK+E zsXlZSt47XtyhdD)8%V)hE-Sx2e>W^|G3%n-@)2G{UH@{UpRWG)wwmkeyKkgjMPaGX zL~VJ!cHg-5?(PJ|2I{Mzg)i<`bo~5U3))SLzEkXiu5-j#+YQk&{wJS5Jp@@>p8h0O z>=@CMwb~}lJF%7-wT7q1;Y;0iT>)L*jVSkW=M!z7IYh))cWWy8(!I8;6Q3iCw}c$9 z2@e&SxQ8Dp8Piy|n9U6lpDik&pc7Q0cpHrypUbPs$M_A}g(?BW6vsDN4(I4iR|2=e zWvS|Z9>C@=1|Q3C(WgEj>AA}M;C`m|0$AqmqBq)53`^O#Ff@oG+t22I-?MJ(ytB~O z{Rpt%nWz6T^18VwNgNlKgyUtHho zqj+-o^9PO;7t)g6PAYVOwH`6_MLRgmG4B(DHU+M@$CLa*qLiH-O&L5{Zgp%1gY&nyzVoP>=F z3+lgroqO=H+};m9iaUXz=FGp%lpUyV4Bm;GBgfvXIby1IT zzqqHxur=gZR8$whlR(@CiwmzlLzSf&O~&tOpK-+D#hESzUHx{|Rf1a^hG4r*5{};Yg-|#Gfz# zb=K9Z?veSgeHvhZJHKQL%imKjG3~B9J7QP?aqOb8h%xl(&2ribiCEH#+!anL`qRf| zSomW*YX6b@-%cVPzeIM=UZw>*4X=Xh{~T?@h8{Posh5|RqCB9r)hFx76GtQbAg3E$XG>2bmn;I$ zAl|2)TZ%JF4=tYDE@~3p=eu48n@3vU~Gug`vWiLgRgI*9exgBBF=@72je3!&9D`si4 zd9iS@s0IfB8;y#uFrP(CDc^srZNwIW$YYeKTJ|W0%;Pwc4vs~crP*j$9Z3V$q+~(F zrM8B)duI=yhXyHH;^PT`rl2Vxe!V$aAdK_Yz*N@yzo2WpiP_5kX@<7;-oqKaZ@7Z6ZK`Y%qFQLAo1(JxuYsfu|(cG8eTyy}GWw-s0WrqX!Vfqa@eP^JiQ~mq&F%sH1^C|@$NqpFs zOuqhS@delk(}uF;1ZCKFN?MvFY(0y^$ioF9ubG&r7t~+gV!JB*?I=$6RiRdk zuv&g1+teus?rrshT078VI{G(>(Ng!+8@XKy6oT8m%I3{_R;?3kO%vrhELGAVOg$H_ ztS^U?nOqHQOm>rzuyTjvHIBX6xggpB@iepXX0gVT^2R6_foo1_ijK50K`IE%+Y@Mq0%v zAa2Dsf)g%QnP&oI)1Sv4q0PC<^aQ`c!hXr^x!<(>bdi^@HV79(N_aXqn`7dAjP#!l zD#a^D3+tiQ!WvbNz#7(Zwm__oeea+;4(Gl)7DNMYs9sWLjUfuPwenW#u9&anPQ7_< z@_5u~?=zn_=EtBAI_b9IU2Z)#G1Yq%LIlQjot zTP)RUA%KG};jOaeB+vxgU3#j!x1x&f78VvS^&JlnUoVDEWRD)QE!Or@Q7+S&RoxC7 zykcJ*TLyu5qJCmeLIJqL0w zFBdj*O#k|aL9>yZ#OsV3we*6t4|BT>Mc=>QEi>qKIy}WR1x0%?ikQxX+aNmMgIdKF zNOY-w&VpD^URLL?E)r8Er%0?TYW<;y+FImZ|0JQMS6%Dj()SVDxEFO*# zho{#%PIXdU-LCESGr|);COX*gS@JJX7gz7^}Xqm*)kbZqSg*j70 zJ<<5|Hq(=NSOdd~cw%A`eqXtOQlZ63hz{xS*doX}Q|Y;m#RfBR8wh!J-!REH%mt}d zWI9|y9iJ7aw+Pr-GP=FH-{yF5T}cs7TooFI`Q#8@-P?0cIZC(F%2G=0-ghWtqv0Rp zz|%Ebey;#F(7MEA=8~O~(1eZz+;mi-s*MjZFI)OQgy_1}t`Pj5Helb^H3gU!xtBd$ zU3KMW*^ZR>ck+c)li0kWt4n^hR`Gg-%IVt~4Sx_mj7SR3qCm=iUx9=ierkF`byW@F zDG-nu&%mN1veg0x1EO8hN~=otAzOO#DwNa$lzl>)apXKyBq#=)mLFc zhW&@fd;D6mOaM3lymR#vD%O#{Mlz6ji}C|0&nmn-B6?78asi; zG@Fv*yqx3=LEmBfB(NUD&TieyTrnQ)90&@6v8+{S+-LMYs8^3!%o9a7dsC@H; zoHX$EN){-@c`s|`c$#LZ5?ez}RqbmhxK^!8ba(-lr!OSe*rxD8CB%B1rDS4@^kfo2 zvlEPJgqoZ4ajo=M{4PP`e`>K^&C>uMq;WF{=n;#)akX4ISxQ9J=KKT73oXn`V&K9z zww_ITr8p5SE`;N>q_HtD(*MNxKwwz9$gTWVc{nK*t%&k`@Hr(Kx&)0g(+sx!1oBXj zQA{;+$K-2o6mKH!o1oH&f)eoAm$m2!(Yw3TVcM~}pgaU&XWntDai#W?OcnNn0~cP=@lhZ1lhyGRC*nLM_#6owkjGD=*8J{GA@?6Pzf7gqDA-#DhX8!xypf*jX1A zmZB1Pxs;cc0Ic&5r{R!l2fzMUlqbiX)A09xxz25`#m_K2o;J=_5}eBk9lI!@OcbYcHsw?SzAW{TMyMLe=t1wc)ct zmP?W?mxx&ZCLuUAlwnTx0grJoK``2Q2K@yAJ|6>ogwTmNu;P5c3&~`2t?~PFZQnxG z=ZmfNJ97?{bW+KF66Cf`OC*#)U`C@_vZbJF+BS4}n_vsK1bnh{vIy{rriv@$UZS}Z`ythEv%hoRM-zZK~*XfvA%Dtkr?<@t3&lgFl&V&k3`AS=XhA5bLvl^6wJ)u-KL&mG z_QzYKeHS$lo27a%S1D8!Y?Hqi zFv&*LNgvv-wq;kxi|ioUIq-fT{4TEzpnNW*NG@^g57n{(L7-m;8_%846jO3jUofnq<-(nXvvg6%LCK|CR z3xR2e*WO3a`ao$~g;z{$CW}jBw3?QsmW=hsH0wkIHE*VtcbDe&VzY&#xN*K%dv2oM zTJ>N0wioO=(XW4&f1xdZe;8csz{H(8{~JQhsv0WjwxjzB z?gWWe$Qk8+g4pJskZVjz=En18X%bkJg}%k>?KxHKqQJ)m>#J`01zt!69QS7BEAa+nPERXE4V{z20AgTlU>YtD}~Fm z4D{>S@sq^-If{kGh7>tO8AlFOW<%>1QoK!XDeDPkjUU-OhVXe#`p5E`(H4!$yGlFK z^##3M-_C#E>f3W}7G#3ATRT}Z*|*G^`|risxEQq)b0%D@ioRHbaMs4=NRthB_GUQv zCt=f)&P{9LtGy=I8!NYSyP39U@ZWg~uXRK^6o{d(RnQ|m{EM%kFIWio2ob${V@ht^ zVzxOsB4SM4cSd-xFdj*v>lq~a8lE+L`3hcm+I_2NX_#ZxY>ms_| z8M!ofO=0^|gPGnlYQVO~?c?)i*8NzS2XqeL?Q9Kx@1h9k^TY#pJ6%3Y(NTB`qwfof zY{6h-rBcksEg4J6%gu3oi=q9qRL)}o-$y%XQ#q1bn;+1(M7;KV7kfv=1&j3amr`I8 z5(g9brMSu$X5r&T7yRu}@Zru?kes{}mEw!#T*3(c@k!|27%C#L*?Rj>$CX41eGkBg zMf@5pbv48JZ<2b?Ny=ULI%Zr__e#jecVC3lZpB3@kUZ_ zO$5s|lvl5(Sm+hg#PpxBHUBTpd18fm(w!RyE+H0HP8!;W8^0Fol&OeoWCg{_jarn; zaDYd<>xi5}>PT>_A#|7d0z3P++jXl}2VHk(S8XaPWpor-MX3|(4P=uBo(=aT2EHb> zc~$6U@X8I%4>*+@RcFwxpzRXRmJZUYEcZlaL=a#_?u$u;(5t-Vw%o01N%K#+AD;SS zm3U|NU1TkBbY4y~I{+;@crYQ=RB{?M50&rP2FF4YYU1JNOCi7e455D!EqG<6t!}5c zT`G;4_uE?@9|iYLa+tQdyFpU?x-uF<>dCLFyYFSPJCsv}Waz>>lGDLd`(kWzhrd@$dz5tjI2AHzlt`~1 zDKLN8?Ioo>LU)sfrM~ciMQF#ME^g=C?!QADvoeXoG{+*nB!3s;;?eT z;c}Q8emAHq4Hn5GUH*Q_o}fn5du8K&VHr#5(Loz8t@R)zB=8Mn-Yi8ka@aQe;+w-i z;D;t2Uo`J;^%plAi=ab+SxH*j%N%Y*L5h>J%5%DxK}2xdn?!_JZ6oIO-BsmxIGVbr zMQx-n5OmvyC$TZQv8ya@x1&c72dZUl-kCQq%cI?~6qmb$i!?$6L1C=goo@YkwHT6)SaW!;Tpla5%X?NM8rIWg%BP3Aon{db?Y zETE{I z2-d-K;*KwtD0On4W9Evjv}b%0v2mV9n&3OPJba>O2GS^bq;F4Wscu`-)c9DD)&14) z?UV7}(sH<1@ZTC-MkV%t1yO}muzpqP z3oZzN-s1CzM;FvgWPB(45MBK_-@qxnSCOM4?mw#p1mapQg0^%U{7;C>6)=YdvXK$U zcReoW^GT2;(mA+9!Q!cE$1r=DmqqkA0>Ohm(m9N zGZ={QoL^x+LLrLx&BGTz@&bR zQ@Gj4vdgZ70s=U$iKXz^I9L{cEN_;-H_{~@Ji?)c&KFaXkuW{l!yQ?Sx2P)YUn;AwMiA+l+;RxZ}mvU z!uI=&(&U`BQR#y0whT7Dzv;6JCeS9Bds2*$Fa5!EWjUAn+9Db|MWCH=^Q$xW`zpSc zO@}iEuIQJ^G7*}a@Z5FRi)EGK)`YerWEawz(AO3pH>GL`Z&iAsE-s<2#P$@4j}SZw zGJM75SVCeyd082jY-93=)3n*<2_uCv-(0 z=K$M3TVSVF4^8gdI- zS-aSl9k0Y$N$1t{xk2Uawhf)B;oBZ(I9y$=(Mtm)dl~mnMMTJOX1G~YZ4dmoE@%lr zFb}89oD=tx_?7bo0|Vp7@l3_=#I{BacWakgYD^0nz_HD~2`62v-buE^w`3i^7Xg~B_Pl%p;*Ad1+_O2Rqy9vW6>b$M%c*a6ig6uSZ=tHO}~fL z)fPSuQ1!4krSX!_P?J&fm58RsKu<}RZ^nwZoA>fABm}i{$8q!Nwdt|O!4tt#;04Un zeWzsW8k6-p@3l7r4Apz+^LU2iEkrnz%F7EspH;KB-~ffxa}nv@Io$y^efei+ z5f&EqCne<>Ch3I-xRg{Ee?0HJKL-|Vej|h0wq7-7uP3g}b;^%3c6CrExNxz%yWWw5 z;!Ag~?+X_`$1L$Jy}~DK>IqHgHE_?&3o-F2>i+Exk&J0-hO1v>nL$1X@hv9mo-!#b ztsMal!Jf6D{UJC_FFR2=T#*bFe{T1P-}dTyGPULUV*j|>-(pkZ`tiLd1iFKU1Q4Hv zL`!&llA0JVP9kIwr?KOCb#l%T3DXpG%-v5VK~hZ$H@w*J!@K|&7wd1ie2z^?wL%h~ zL-WOQ?Z^i%I~+vBlSH%ivYUC6K8iOOA?~e8mq@4|57ZmU;^gEQ|G1|UgjZ82(`KY* zyADZ#OuhlVhOzH>h!l2P0={4l&A521yeo9*Sq;bP*$SDMO;sV(bZ~*3Di@E|hP}_5%9oIusMaRkF>>%kNxS?3yb!YKaam zTf7TlwWR)7_X(Cj!c!Nm9{meTTcNEX7}0=>h=ZPA08#Xs=g{hUU%L&#EkEh1*qz_A zPH7Ix&bnsG+R4Knt0cuJ>B+!C$`c1&$IygjYX*(b%Br~EGq94Aoypjoq#;vGG{kRn zxhRh|b6K?BMeJ|EwnYDuE2wwX4(`UP19$o#-9L741)nebX-=0GyXV%|wA5?7PJNck z^ZYm{SQj?L5?^#L(E(pc>ZBqn{{cVue^(GgvtTGQAa-XPvm@5s@1C8RRr7hcJOq_6 z}Q3*@O|#$~2E?T^_bxos7;%`VwlkN9wxQ_*vj zJ-8c=R@Q9%pyMO#gV@NJDt6(>-GS!7CmxUf3CWlo!<=lGFu<3I1|X#DaUDEB23^=yCExH(v!-Wrze zNCa>_?)&GLG0o(@Pv76!zcKs0)sPPUoR7n)jYL#nSg-ee+v;&-t^az$b*3li-P~B{ z98_c}%CRVn-qX+#`Kh!!=L<7R=8tytU9Q8gz?slGQvLNSK0XUtpT|5G&*iha z@>Iuh;H)x54Wls7&@$5gIGw489ButVdMT7zABI&&qcZE&8onF}zCB6>_)Z%Q2{H*S z`D>M!RZf4MOK%dSBvY*;CF}YrEG+y;$ltOtV+DI8idH%LN)dF~$Y@c^r@62ni6Qn23>TDs_cPyvNYt-V-d?1$JR# zzGd5X8q+y<<^xJZkUlwf1~aDm{!5@y_HfRX2{pOv&S-WOxiW$!DCI-}qar=;T%4U! z?Y91^yjA)bj+NPD)poOSY16Qr5Q;c9!4xpLjNa1)I)Gh<)&Az!(9E!$z13~C71H>4 zP>#OgsJVni>=Y;?`AFBAM(7M2yGsdfW~P0v?bgZIYVAk-LUqrZ*3YVp-G- zMukacKK);CG(H?k&c)evje#Xpqj0HYf7BxuGYd_hCTi3Y{Xr0&ki@~o#`UE;-Y9vo zA7_D%H6;XoYQ4}zZp%B!u?WPf9-O^QZLLhNXa5`e4OR(%1`rYV7#9Yr5|=HAR#Q3%}#2vom9z5yHUasVkwoQVkee$eQWFNMdMBZ%HbCM0JG^M8Q={Xj`P^}B>**Bk0VbIW(2?wg<6K=giu}!pR;Y4?hn}ch z-#W$k>8~F1oMd_2>xa-hhJ)5V^Da4JguV$cjFJ;+Ya&i(Iqaultb5v_@8hESJ}K$Q ziSfi{0H5UN@T~nRZ%3TCnnNp$R2tz7O-sD0qHtSpv*T+;!E7hK*Z}nJTn9#laS=f# za+9KI@vz9v`Vl#dquxwAU!Qq0`HBklEhnk*7##@jWR} zBf@Dg7+FbiJ||N}3LcFJ8>P zy$}=g0xa_gi1_^H$H17;{GAzIIq}wCoKVdpr0zo~>gUM*>W0&?ym~p}DJ?!su{DEM za?z(=FJTiQtG2LV zjhjN+e2ofqGD=^xj+Vxy zX^Z(DK@tray5^X@mSw<*I4a2o0geZ8n1v`^KTSmxD**PttFb$*k8=01jg~e7b~~k@ zHmt6Z6V3NPeJ}|bO4%kvx05o$!sKOWcKV3M_P(vq(t4z?o`jd_Pj9z%bne=7M-U+f zy;%N+b0sHaR}Hcdk2OrLl&OacOS7`P>z4>tx4$>n6!d!qwy+u`o2F2d$oz=iun+zN zE89!Xs`QEq&91d!S%oRd$bM`_CDP#94e@8=@2QBq?sTGeqM~UuSJ|Vq$tvp8Ii2h7IZ+zk&I(arT?d~*#(Mlh=eXozVkDbrkU2gMA~3L% zDBH}`I-0$9F#%R_OGcS&7mJGe`@XxCo|2gTh_*>-Z6ZvGnNu{a*p{|3+zKWS+@Efn zGTxo|5tsi$6SJ(~gWV-qUPRn-ebFapK|^F7q4-@JyvrSd{*QSEx=#DQ5W0Sbt$FY4 zY?0nBX2|%ZQan*_HCvoq+xB-*-3Z|0z1U}~JXu+Rrw^Htj|93rn|Qtj`YR2`C&puA z<6U~*-BgPcwoK|RmpgTg$`W~uqjRo1R&PRG*DrjXeIFnx6;_u11Nem5>ZEU(6El_a zktSE!AVR_f$h(Kb_T#EbZ}h&Mg5NfOJ7f?@j6OB-?37;KUOwRPp+pA*c}Vnoon0R< z@w}E@a{sgLZ^17!V(_CMphs-i{KKukgs^bw;Ais-cVRYQTP3}-)HdUz9%LpIvu_Mg zmS*e%R8mu8SA~Ny zl$FC>JrI6AhI#AfgWq0U7h1Q&xZAnD1&AiroF)1BE-f)+Iu(o;A_!`zO;lAGp-*ry z+S$)8kUhflx7$E{lYW|>DL7}_OQG?vF--IXMuAr%^t}w)H;yU8^;EH|sbjH9zU|JV zCLED5-3Njcc5>*WprXU!auLb0qdIzEISh1}Z4jwf9z6J?;pvQ{cnz*$!HR|vOxf|x z-*^zE%6CyOMz*F})%%}GUp(^b5-rKlp(QIcf=HcD{?fV9L^X(Qer~DWI(T|enXIaF zfS(P`D%^8t&?dsbIECvp@Lk}XSzMS^R?{H-ZFO^gyU8cX)YS%bbiI3D(pz`qI3d2o zTo7(D8dtCpIgIgX$M&JK-mXAywcBoxh4xx?HL;|r$ypC04QhwyTcEcEj5nv)xxee| zsx}mjg+y#)y7;kXHEg=JfPx?J|55=V?*BJ;gxL*+*W6#9%JyA;TW$CUHYd^LB;k#d zGw6AnuBdj?`?$67ba4A}*|WeA&T!pxvDJBX%hKEM!bED&Y{}pOIqLS)5AFzz?aqTq zH)eBN6E)B{QjGOmZ%X$j+NnRwmW~-vcxuw|>$$&u5EWX^Bqg<3X_AhEF=;4a$Z&Zd z1xfnWKnK@dPcsj+OR~LQt=PLqVgA=_qT<0F$Ny@F7%~?t41^|L*wRTb3AA*T7CL<@ zUe7m@(t;FxI{psC_;d(#c(<64-gbKh`PDwcgq(b)S$l40-;5`R05b?nckzlR6*JLz zW<=)9Sq7;46#0IMKvP=bNBmrRa&EDQNi{z+O8-y2e{6v%qtw>o<+=_l_$68Q@ONIU zepOfYCHp1Kj|1e2AI$m1VADnTGsB3|<|_V-iBK_%&uiF+p|}fT6B-A!#o;Gi9aIwL}rsqeOZ>PI=Lz4tdTeaS^ z?M0z2=Qr+mCoOuJgzVNz>e|Km`EzBGsU4}d31SLYf~TNf;*A5~K?2S0-@NHd{w0nX zo!j*YC~y+<+5q+SzY=+a-SE*R?Xg&Byy*jtAJ#bV-d^d)3ED00l{H)#Z1_FDKb^t! zBgm(j>22P~OyCnF>ij+UWhm2NJn<{|*u62dK}}0Jf6&FXB&%g!^-iN>bD%BEJbzTl-};3ufzKnqL_ zw==9mL@QLh;)<11I?@o;*H(JTpGe*zQ-z;vfsQE|kTn0B2bW~k4 zSFfRQe;~PNUVPZ~Nv8eh-aI-o%6Gf`e#&75g6(#nb$eSGRSPlyP^MNE3sZK74A5>5 z_|f~;w4&B4{T}qbGu!O+0?pmMA8sj8|D;=|uj1N|OQPh}dm3)`G7$D0wYxazzz9-|D7^93beSkimCR@)lq zFBnO<(4mUeW>de_5%rEBgJ4;HXTB38r!G%SHF{~2x76~_H}T;>ukB^q0viVTq3BPb zXI*XGub5w1=FGhJQzl=xJr@@02{aGpsr`FJ z&D5Su3z_Np!?16EqXPGvpNzZkOEyP<|3AEY0z&8W`6{*4hqqxA%hfVHUHAJp%v2Fi zX``FWb;f-&?F!3Ms3~3AWZG8<&?>Bi^pTd4o|f&qPh-_$nUHIsAMBQgCQ~-?B_UKy zP-E{(6NTS9AA~hE9@_3uw9`c-bR?>z#w9YQSm6V)Z zURoM=-syG9>vYmtpo5NwPI!DbnmF?JhSN6uT$r-dUi_E(Pksd!{ZFpJH?|}GBm-Fm zBrInmVhikmU^YTwYRA*@XesJ_E&-vEsl<5B1|uU>Gh_eiD~yXTFS`l8VRs$F+0W&%Y?zvi@Ww1KAZL?Rb*4RWwDG zKNoQ7H)(k2rGfhnQ$x{4U?mV(OKvZ?2e26|%#a4LN73HA{?eQna_ zTXw7^DjLSTXCFrpWd` zJ}Jqh|5vB(nj`#oU}l*9#v!s7c(VdwCevOmO;&oBBE|d7H{*nek5Ab4^THeOcwbQy zAH?NUQ8Fj>8+}&^Q#G<8kVsw%(b<JR~rV{3JJqMB8FRPwT zz2BzqnMBU_A65hb(I*FA5$R^%0`qq&A=r^$_azx7j_@abTt(VL+(9pqV%7L_VaBte z+e^q|GM1&B_6rS?K(LHU&tE_4;B?}fGC$qhVkR~Epnd4fDC#7y#MeN-eW4|tWeZlO z2bEu*Mf-9vCcGRr4~g}iL#uxbunso5ozf|zzegUi#4pYHN8Dr&Lzugzn7<1Fr6zmv_Bs#a+ZvZ{G-LD4}nS`73nFZLaE*r zz)-}bc^&;M>D^ix(84p42uzU8F-aVjr5BQekkU(CDTk!H<8`LW*}Y3<9k4`s6Ta|K zs+v6aM@iK@4F3Jc;Iwe8KmT`HMctaelhBYZTDU1Xgqz}|F+_?kvbnc#^&VI=$9$3T z;@G-U#Lv;{ov!|E_A#nQ$sShP$Maxz8SD>G1{#j1U(CfJ{qHytlq!m;B((L;%1zDH zChKeg1w92@HrlmLd5K`rkw6Nuo2aG}mOfMPgyE>_PL}`=p)(xX?EhIZKQ>XD zbaHVU;fTIo_1#c|O(&QoPvM*DB}?@rr6_I`vELB=Z~t{5w#ca<$kjLhWPIZ@^c<5a z0I8CSV#Bw;B896)aQp^*gHHr>;2EE}w7wH6a5+L28SE}_dp7)DrmBKs2OW0ki%}}p z^x}Z!PqA632RlthEb`th&{tmP+C207Jr07oB;6}8r^NXufNSjrYm*&wmdUd+MnH(Y zNQ>f zskg~P5>a4LHPSw;@16~TTYvcgvSAt7o9^T->9bPdZ~c1V>hE$t0;~SeTA}8+0KyBL$=T8@S8_dO8Z&J7u?*97~_eXxB^Q#DZEQjo@1Maaa)&+Bb6~4B) zYEnVD-_*3;&h!`T`<{QpVmoK>s~^KL=*ObE7>`XF--WBgBn^@GC&88x#^8M`4ytH(sBJ+(7Od`P6LTa*5y`}}`2LZN4~`hQ0hzBL#+O3V zLU6a$grZ6fWnbCkkIqtu{VZ9@dA2qX$vL+$W2Wz+z5`<90G8dvYC~F=RclbwVoU1d z#A;Je+LSZHrT%;eHVN(QU<-YA0>#mKwHK=R==e;NY5MPl!r{j}ysb9mQ{#FI z-wd8aN_TiilNlD~nlz?L-!v*~!@hx#zIo;hp-I&zG_=ukAE#TvMkV+Pp=mtn+5IF~ z{b9ds*N>Q;0kLp-OU>LXS4XH-sJ(9qtzT+=`L!iO>>M%|DtMD%SQTn z7mcF_+7pX=rzq&EsqOO`N=OXD^=GlJrwU zmGz>8k$m>f;cU%*fv?+=tFc-iG+FFS(CT$cyx0G=LY;DqJzujL%ka%Kh;w_#FEt`= zB)&`YPZa4<@zs^h{fY-U`VI9@r%JT$wV6utRH6dhhhC!hhrcI1L%_%0OgnKVCjYg# zuVNQ0@P(~>u^sPs=2XbY-efD!wz>#4+8K*U&DBmIM>jn=E3+ND#EdOR>Pmw;QJkNG z!B>6O-;;W zKk;8ZVJeY&io$gcE&-OokMD2|+UX`MrJmJ0{+|u0fx^9nvuJUAyj~2hH|OuvUShNI zAI^m6|IN=k#p*>2Ok&R~i*GdyA-V?$QZTGVtnY5=xo_-R(sIW_UTl2fBOb`vm)4;#dO@|g{>#24gkUU6u${SU`*S{w z!?VBCU%1dR)@xnfqC1D2WG@1R9aTMNVF~*9g^}q4K5_>AN5e0Mu&m)5Ow2j~ zrhFBZRGScV()SvHUiaWj*hMpZs*o|sWKfMj2DWGXa)L|ZQZE9tDqbowHA8yGu<|G* z-j~jZf_ZTL;4Lms7FwdfniS>|KC2){H@&c;sGq6ETmGL}+MTbX))hE{bC-n>X) z>d$KTx;!wZQRS*5dV0D`Rl7G6M3|s8A||IMJw5*ozMq`c%`%p;|6(=b_=jXLZ9Pjt z_EY!u&2ejN^v@fjfII#N=zKI&brN|bb4;33D#cRbgeZhPo#1`Hs8cQY;|wvlXCS z`G9%yNmns)+BUm1(XY4AR+BKTX^-AUmG2#qIz(vt9-kfmdblX$jI~rZtBA@O-u#K| z(c)lnTUYnB3UeG+&#8tc3mSf!6>X78u8z z9Cc`CuXIf8VcT|rV9lx96Qz=(YKXh-R-dte4~n7x^T2lFRAPLqt~T6Or$<{tL7}D{ zbbtpV{^;ZJlP-;C-Ylam$ZeZ^s=OUJ_I4+36@nL%a&AOfab7VgItvn#(W`R3l8j5ZerOx{yS9RjH`B@9aOcN12!+mF#nBCx(jyk-$xzEXD1VD5+f1&l0&8g zkTzGZFa3GmL={v1L+MdjoVA|ORX&mLItJ4cD zY|&`QSK-3#Sh09cFF3_s`N5?nB?EzC#Qm{;J_!F0<5JP#3|j`^ZgjIuv|3u?xAnbf zgJ#1&Jg6=b)SoABoqjxQ6UqteBFRx2IA+(m!ITUA)hWtf{^)^>Vl z4hm$X$z~fJnw>ak{M2yPBKa~~M3Xvy3zctKv9784zS$PKKR-XC?YT|RTwL9{cqF+@ zlWuIrb@OoXZ^iUv&v>PZqfY-U10$!~ndK7i6mR=uej!JK|u?!ma$ze*@>q<^QY;JmUTuNFvWCg-RwPaob-Co-GJVli48{;oVMUtBc z2wk*WTR_(W$K+Gbu2c_a8ys#$c^&I!ALCoHcu)GL zG^xSAHrQ>rkK@T(D2GS#i|&@~U3I4mYTwfeov4#F0jBiWW*oz#l4jm3rmo9-$FcL@w5=_PITqb+5?4F^^j2%g zRJ;dEu4SiYQ*>P6HR!uLcQ+$FrwlgBlbADWiAAKF8)rfgg4J>t#1y}P6hqvgZ5*Tir-3qIJ{ zqmNdchSy3G#m`FAelHC72(|ilFc&_|Rlx&7~K1B~;gU6N}^2pmY_~AA917Vg} zgCHy%IsUedSay9spRvh=Vza_ELI4b@)D)l6#FZRxK;E9lZ;8QQsflW$VSl+sT8z0T zdPwDEtNP=KmI51S5w6I+Ma1)up#=~BKI_otJ<7}F?FcA)hPN$IcZ7x z@|&4+B6QZniBS9bCS}R0>xI3}v6&;i+k^HG{5q@;=K$l?8$x<&F%&-`Fd#Fe7c+m# zV&&@N9Px>bgmPiPqD7o@`sjWDJw}#;EB2|ptjfsDxY7B!=vVgC0Lf|^5A=h(*F_iq z=K}M*%*9Xc)@_f^dzBkrKlmn+?UuBl)$i@0a&+q*-Y<3HlfcHVVi}~W=Wq^)5vcKM z)M(^i{=AMLPicEPeBeB>u`=&Q+rt3eA;D8<4b;Ctu|PK{pC4L6{xht<3s}@3S5B~f zDz>*me6|UZ32gG0hNtJPzIE-%3$dsuy^gpiTOr&%!kpl6uJSKiXD-X?Db(CZ8XRmV`3^ z+X^%4xjF8UXB1jb9_~#t0@~dd9NeKwBZHD+dIcF0e}$&_8_U%y3=zBzCB6~Q9$~8ty zWfOHt$?qzf_-9N~vseh~*#~)YVld#jlY&}O^}o6a*Xh|QIj!cE!&9ckc>qnK`t%2Bux2-+y2(HKe{q|~$4AWq~B6KSqw0ojfY6_g~ z?gmTRIWSse#l3GX=Z$7x_tDOK&GV}Taz&t^Xt|om5vNu7)jQ+|m+-czjR%?HlpG@w zToPp@l$I7D=;iTa^W6*3Bz9EA-~j$TaD%lP`~KGZICS)<9r8;rI8KRFI)a@gf$-~o zg0gCNy?n?No2uTJl$f#@Ixyhr##>>|fL-mB7(2}Ahu|~;Q)d2u*c5nf8!I6sWPvs8 zXdd!(w*rNwFcv4WtGJk5hLb)xI$p{2I4rE4d8^$?bXyYiiRSa$i)V1+UHr>HxBGQo zLCJSgKs#GDU#_a4ZQ4&<+2$6Bz^F7^B78hs3RckbaG&J))#FpgCoBxEmuKkbP~lsJ zW-2#;DzX_zJ*f(0ceEp)vh6h+8h@^m+=mS3{BthF>;=s-Hif|{m-~t-w?voBlT;P6 zT}g+$QPukGItYtdaaN6v!rk7ktgA~M`o`s|rT>-!y}biT7F$aMz(w`(bX8)J_1PS0 zLsqnt8dfpS+$k!$d-Cvub$WUc^ZWbQ*cgkWV>!1A+%g)EMe=S8ttB$tyDGmt>4BT3 zCHKS8;uCBumG-1}%peP@=6Ma>K&|W4uynC`eYz zq4NQ3JpnTrmf`OGwF!zEP<}OQa~nr&>~C~e9od8k%8i%~~5!C=x^Lm5?7} z>_f^PHfYaiWSvbXsOk;s9+Wmb zH8$g}FlybeqSwQlRJ1Wc3i^$HPlWXs`@MBj2_aPM^6;+*cQ1AL8}{!>>DBh}V3Om1GD(kDJPvQp{80SY=~KJMg1>hQ!$d~&=WPz_Ys2rBq$nK(En4-^fB z1LxWO`m26=b_aQY|0j7@(~@F})q_ip+VvBR(Q(USwt@o0>t_$QnaZ3viJF6Pnh&oy zxUx12`QgGgLHcjs-FCLPrioXG&rmQ< zv42j+1=2=GVU5~Md-$znpHfXLcFzv8E|JM01wKPvUGk)N8O5drxhXnycSl#@n zoFo;MjPZbW`(BXS1BeUI-e@sqapsIJ=a|#$Cx&P>z6VFh{EKAbMNggn%UjgU!;etQ zhbWGb)cZf7GSFYUbh`MDaehPL{&<`usXu9goU-OEGdD9RHukt7^K3o*QnvMK|Orx*{F+hKqYT7$0$U1}bt=x~;eO+u+u4yrdXL zHi^pMWFX-X5!2yY?&o47QQ~wT3=E{N-l|PwLt}O@k}O+T$F9xQ;q|^Hl!&ZLO-aqj ztF%VhMFJ!l>TowIieXK@yibyLgZ6iun_eb|;=kYg(~69o)H&5`p9N4_g^2RV(nF%p zUKt((4EzGf<_Zk&fSFxcK}w*Wm6q%AG8PxDy0Ez1+~oT7&~rM<`jVS5+v*GZ%|Ww1 zI}bU3%~aJUYc{KjlGxhapa%anj9dF(Ny7ww=>MZ|WY018-=&G6I{pWbCYV_K{1iu; zq-k!H?N!Lt&F9NEnSphLKve#rXHiiR(A>LqCsJr_XKG6s&MqN0AAi3%0}ti86{Hr4 z&FJL-2%6=urhxf*_e7VMFf-)*=6*DjGTg`kZ~Ao(ZHd}l7X3dhC^qYW9*_<8c(I2i z5~8zWUq?v4HSgr7TQ7<&VXC_c4oqG^tV(K!fstxFZy!hWojvQMxGb5SVjp@(`)9+} zF;Ts@&dpQ?20I^;@7+#4psn?%mHtsy8sze#wdsg(G`z-RjnB>EJ@#Vg-ULWifBu_x zBi32*yw|Y$@Tu*G(TEzE7;f`C?+_3A0V7BIWd2^)>5b;lHRQ)V87zyYsTM`na(mrb zcUI$5etUJmI)+&SNLnEQNo!L!iIGfIOac)R@yl)0mpx-SCdZW9&H{8Bcu2BBGgT*i zQXIqcVWOl%pYk=ashATwEbBj96KAY7pT+;Cpi=Yw`--gp=+1YjiR#&f1S3B=O+VFc z+1Mr)_hgvYRSgD> z9LIZ_Au9|X9>OA1TAWaq-41sJ!!ZaxV|^LngjQ=%_oUy*c+MOb-L+`{>zUfr5IQ$6 zzuWy>SG8&RSkRntlHNaX7tf&-d7&4lV0_T_alP(8Zv-dJz{G%xKLo^wMzPbxjQWNl zYLT|0$g~MH5Ai=2VK#)--Lxrwu*jh|-Y`)q8TJK#FUz#UAPR9qJpG(4GF(qS#))C7 zz&-Y+(Jg}_ozu0?Y5AwCmbdjq0IMx56(#Wgf?72Y#M63nKRcnyb~Q7zb!2yUQuw3V zY8_2Kq+ihhM#I@dPTT1*Rb~x?l;FuXu5$XrkEzkC06aJlo7J)oG_!C4|62qSl2UI6 zPC+fA#<{msC+D9%Mqt!u(PGlX1I{boYe9+aH^sN%FaJXl$W=H07J+EK?8j6Irfm|H z8V3aJU`KrFkuvtj_;-2C2}$z0{>fWJM|1lv`@wK>K_nY29lI4no~Bd;p7sf!z0c9+ z@TFmyWEQcg1wioUToFcT1Z%N&W)Fl4kr|o?wlSH2?tDdzcbdkY5Mi2ID6u1KkjY}i z(&uOLs139UuAp^n_D?}e-^G>GAu}5L)X|CuH6t&Mak>(FB0|D9LK|KOyRk+l!2Me? zTuylQFJwH{1f0WN+}KNm{L=sKz9d`j70)T9Mx9cK^zkWT?DFp%4#S7;d}b`@rXUGpPDCmrgZ)`q*a-NZ^M37Y);B>+cX8zD!y*DM;KfmcrrI&D~(boy1^=oj$QV*bg$Kqk({|Lwxc+ z5JiDOc|*wdt_X^1lZ{bQ3k)$?Jv$3HrB&^>(>^79)T97p#eTKK(C_eQ$q23<;US^H zlENhhr{FXRj8yPw<&5D3l_L9;R-L~vqr$_|=Fww`Ar*826vb{(qsvG=WQyli3C$3K?Q4e^T7-TxU>3l$X;~q>z_Y*H)BkD#;VA|G62dnM zVHzUOG-j>{CKUdunL*QDkd`!wM;_@TGL@w=R@nESYPpq z3O*_HiW2jeNZ9=8Ae0MhA^s2UAMV@~VkCqjayu9#L+v77BNfD3Fb*Kd;UPl=mQJ4X z4*Rwh{ey=)EpMutPWa59Vo#}DU2pFY0OS6}o-D%)sqkq8{ixV&Z=pPOvC@~t!Lqd~ z!~(A{eR;&SB$NB}D-?#vVw#Az37BDVlRVZ?YkD6Cd#$td@#r_HSg*u{Y>^dWnK5Jo zsDs2WLRpEp>T>)ee}&xQ>ab5^qyw{j3a5H?5BjBB7v|Ac-qZSh0f5#UAj|LV)tl7$ ziJ33cnvNQ&OZfsP~7)0H&_Z1#VUz5OQ(*(IlXr3B-99sXYmRi`>t_+u4 zPGYy8kl*yhdGEGta{=N+@BLXIj&-ocFAeeSI)r~=PLyP%yzh10+uRFE!^|U#FM~BM*!8KcrvaAve`dMxFJvEE1uZEleU6>hpew zcTg@=_$7jHU5*rlUX=HX3G-boK-V`Ybh?+YQR!>t6f7Th+x?m8y%d^RSZaR(0D{kd zXhI%h-O|0gW53Tfzzx=|oZ~f5MK&}gFm-3e<{sb%2c4QpFSxJMyc$_*jAU<(&lH)a zCw()sz1kfvMcc0m^gZY}v0K#Jeqtc(e(JPXz?p7VxHFnZw-;M8vQ(#3PxN7S+U#Z= zHOhO7KE}b8O*twltBQgSNIO2{Lz^ZFfQ22eA`c8khjPbSTx8Uqc~D`!3&;}+S57Cu zO>VpT7L1?;p`jHqDE&(k6BEIa$FdIzk8I7Jp{h;)vgM>tKr67Z* zh8eDmy+=f*#9yY3lztEs=Vj=Sd+K9%VB zW#I^!g#E3BNO;TkBJVHqCoq-eKBPj=Ez%*}Ai%!uD_OSIemA9GJ!fZnPp0G?N6gWq zhmB1U={wYt9yde4$k#sX7 zx=OMJtgPd+5+KG@9~If zg85`empl+f_u5+c6U13B^_dkJfOjMO%Vr&xhr|<_gPDOKcZ__wwY%g8p&;T(Xw8FK z2g%OD9JN3bzW1pjVEaMm8$SzLE>%K~L@02jbJV!jieI!@Can z)rP!z9DAKp{3jPFV!$fQf3gAj?eWqk?wm8X)ze&+y|tjcd5g)SXKxT= z+RzPkc&pF36(TSS>32n;c01@_-bs>n-4<-ZqVZhr|5_+g8K6jrnX!D#t&z(^tY&k+ z^8gb^5X4<%Ys#AgaitYOCI$w^*xjS0&KZ7h))(_3blK2jGyFJsd=g`q^CSS@Wm!_h zX&9?tP4xbw+2VK1EA9Nz-9l$^*TG>m-|bat_hTVhk+>nj5kcP9+$k{2Hpg|3lb(&e zWc76(hWTRYc+3kzmqGojo@HD?z4ROdeX>qnU z6fiIMU)^5n19ocxWQAUxz$}PV%RKQPfc|8v_~ zL-}w9z#FNmnP08SKnm*DMS63bhDrKG^Hepy@f7v_q&NPQ4j;Q`ELF4bp3J|AhPmm*uxsQu>$9$md+Dl% zGYzf@JUzp#?99DWkFATFZ~)1#0~at_JAe;ev<0;_y#EF8cJYnR@#mAlAHcpr>l$RO z1%1D;xI|*MbLeRLuXh)MSm-?nv8YmOb*iBbbN7YAE6IPsLyQG6GGY1Y2aGJF=WRiU zv+a%hw*XwsDQr&L|3T5kqJe2K&JHX!>2ec-ciU^FB-AxkI6or$;%~E^t*L}WO#0HG z<*URdzhN<5CNc%sgMFv#)m;9OfnjmA#-i~)N{(#K!)NLVu#FlPB0*39vz|EV-#`JSsQmO`e;=bJ1#r!i%-%-Us#yJ;bI_q6-Epxis# zu->^zy2ORM)7Z%HdiO2}@c%lkAVKj$`2V32;NA(i;2(gdHTDWad?Clk2tiB>06hQr zRFMIR5^uK~JrUJ!Db@CW+g^W(v?gX(L4ZR~0nLXLvljH-Nqq09Q$uCq*dQ0i!GQ{8 zo-tMpY1HQ}h9ex5N%%e)XQqAaxcJ1khS;KJ$#MCI;Tc$1M-(=sOn3(nl$&Nux?GV5 zVw4N$I`BUrR|Wn&X`;R5j6%FY1F)o+22Xavn_HYqtuqk?#(U$XONA5miWF-z{fCp# z@+%ECEfW7LLqi8LoOC335MoEodkA2bVPr?ecW@VIIj{y^uw0$8<(@JUs3qoj?@&yW zH6yQev9i!ksL>4GDbxwEuBDC5Y-!MK7P}D!h2@NUxUjo@Lda%qqZE@)PC+p+=H0W5 zN<~G5fq?;hgHV(gZVn@oGOBa(){8|d082fw9PkbcaC>fV?O-;UUDkcjYX>l1tN$?G zx7IQM83#O_C#FWR*}WPFyEnoD_0P%MIr)YqW$H7SEZ=W7yr4d^6Ve+ z)WF3Gc6mulfyY|)S1bu`1~x~2v_A+kT3z;fMnq}7Mh-tV0bkhvM;>wfj@RyZxt?F% zT`VUk%^e3VIN_t`|6BZn;E&BN>wgz*qk|*sD$V4`FtO4mj|7K@{;@(G2CMw#sXM}m7Vg<=R8M=ff>`&x5a1!5?>KvIt>jrl(NvKa4O*lN z?1`PQ0oi>L%M9LM7BCkJ7UdNo*v+{1yx7n`2*{COse43z3_l%@#wOETA z60W~=Hk`4auoWwIXR++0n~s7eJZNv>M{{gR#N--Hw(9L=-4;I;`Q{&awFE(r+rycJ zv`&Me44ZxywMkCBuV|BZH=aDGHiAL+PTigK? zdLNzNe6wJPC|LL+MQ1qJ5lyLtzy5>W{kncCN|qG!Sp?i13I`lr9FAiQB zbIyEuq@bkxz`>=9%O<=$nA*jkV_S9F9lU^Hacl_wlbX5NFgJ04AucB;iESdgoTI`r zKT)K%#b^J#lRBn(NW!YcKC3_M(-WOVr0pe~tHmV>6X?irh`EY|{?eqhm9;L|FAVqo zbe;ODq-t}=LSfN87MUdk6Xg0DX&J#8Nn+5?8SL-2i^rT&zS6=Fpg zVR~I%_#3iav^1_I-}CO`ds^G7(9e|Y5Bv1B_+(+)Z}BiuOc>S)059P7=Z6&f@TXKe z>x@9|>>BED@A}N+M=AVve`0^~M6%pHuGwwsj|EaLS{??;<3j8mtnd4WBG-${Cg;p& z@Sm4ZbvRrbMoW1MxmjI=nI-4bz6IcEF%sf`QkwY^1#5!oi8ie=!J4%qUTp@~#sGN8 z2FgEII7q*rSbVolG)Nz}NOQSOPD$1HIKZ~}WBui11YVKQe<*T?<;)?E6M0f||2MhE z-5?tOQ*RdUI_m}G@g3a7(%7AdVJ^V)g~ndb?id%Bh{iP63&_TNIR44(=#ZJy@HWTr zSdT|6CYIU1Baa<30)4)t#eSb;X>?4{rn&r9vpV$W*hifzxj!b0X@MTnZIap3ZtDk9 zH(7kDJTi^=ZDXUJY8kDTY!upM~ z5Cf8#G3Au4(Tz($-w6RXuy ztd-8rbip($7ww-YRFIe#()-i#!Z481gD}m8oQb@fl$9M%{!unqDC!sM5`sPylh+?a z)n~&lMYo}AlHw=E!WnB<0J(sYr4DG8SVo6-FEWeOOtAr(Q#Egc;p^MO-xu9>i_4PI zy$!9+r_Q@+mf2$UY~WP>#(NrjKUrI9&I+OG>9rT|c-ULxB?fLEaBa@HB^sb8g8Gp9 zkmtPy-+23>HJ2Tw#pHtTCp_E^s(eC%nhyOY%JDPWZTF^I0V89hVxyWCaG0TGbx)V` z)7PLg>`}y@zy6-r0GyhmCVXg|tk?|b+j~5#+pWiZ&X>0TalR>UwHcW$bY?q2J3sjx zIcOA!7mYHHhfr zIMOGgU|}&0>r~+7xBhl<-7Wo(2V)Z68kE=l_!uetg%C~-L1sJWz-R=81OL`9Yj4Ux zqrxJ?V&nfRjg=8*Oix>WJ2ja+IH`R1+pF`=Vl0twLJOo9tvX6$49nLmKBIwvXC{7) z`0o8uvy!p-7+_HUX1D!{Ck7LQj)C5AKEG36QL}1#!`}zJT?C;2!uHwAVny|)R2nNq zscNAL3|cVv;YbKjOToqTh?&e$A}*XD_=nqgV(qF)(wM;8G!;oMK-E2`~$_O_>u!HtbCw*K3Y$S9;OFvypR+xdkFNthIacwx}a&LC10 zqD#s34g1%L%S|o1<AW~$_<~SRTk1GzHK5Zs)v7K z7LB>%UC6&O_#m{)KR20vnyzd)nWu-Pozh6 zap&OvL#q1yUnf$=6Etmj8cw~V84}*a*kEOLY2hnK32yiD5fy(Eyp&`m=Sv zii8)YHu#fJ{+E8i&fb#X(lZmJ4EEh|)^#L@=>pUM%b!a~4PxY8Pz|9fTt?t7%%;mE$m*8BknPI) zjx7}gC~^?ewq?^H(nc(#47^I7G2+9AAR*het*|qPv|?0MRV2j4QSNZx+$`oM_ft5h zni?A$9W`rgSmEs9pPoxgOBEDV0xRJ%8obtevoYJ7lGME8l(a^6DsMC)z2DBK^T(2% zd42lE&Ok%-H_9{e&c`#)D~Vir1{o7oWN9fsPpASUPyf8j!S@pIa@?Qa9#pcm7d;*{ zw(liRs>~?E5KYl-nUN|?3jo!5Z`DZ=qT5O$Ds(UQAlXUiYe)h-9<8tDwb0hO!%7vO zH384wr(Ju6-9P1H8u_xUjqJ z!(sr&oeDDxu4WrgyGy67m1}66n;8q<#Cd}QYCYOpu2}NkSC+2nEqwDAyX^f5~by_6r66)q>&R~7y#b%yTFNV1j@aT)8DCVd-= zL@%0V1a9PR<^w4W9neu{I^d*8kINpYzK&cTLd1;zCm&i;zUE}N;qh9hLuBuI1+C{H z`6iq(PSM4-BI6=)UinSO3ldanEAe%Qp;Hv0!)sdVo^%oSB|dqeMs2V6VJS2`u&f5P zi_Ad=fwZu&?<*pWs7oa+JtdQcwR(n*_#Zv!YjghLPtozzfhxmlt*%npcA_-U(Rczg zh760Q*j$38(S34FiO)1`GID3f&GAU#+Ot}#TTzhWtYR<08_r007q+a^MsN2pUn{Fm zobnE$w1ATMBT83rZ@uM;P(otD2sI@uHZ2JUqOv0iJkyr3H6?L@pON9*3d5^aW>`HT z`P6(74~>*e5g94gVBxJKoFKt7uP4v4z6Btr@aOZYqM(jOL?U2zZKx`pIl>}Fm6Ll@ z*HGG9Z#I_pBr#!J@6srKLRsGua{Y;HO{J-5$UTYeK z*UL;pAml7xPau4V?C;7X=!9Cm>5rY=%oJIWI<=X_0>1L3JNeXt@&Xgj(6Zwk_lG;( zfdT(YmAi3_m?lz`6F*V`Rcl3oa6y@f0cOGF>waO#%8lz=pXJNICP{D*z}Vf5{0iro z&Z#{${&ZKrL<~=wiXu)A&cZ;?RX~j_>!i2K9xA&h$2>lv-;rgil}Ct`oz?krzk9Jr zO|JDX`b8FF8ulK75@4ct`C~78PxwX9Es^n2@lC%mZENoKWaG=u{gz+;TDYtg!aNk6 z(ZS7-NOQ2IP?%d-t9xV=^YM9Dxtke)M7+$olCIH2Pf6!$_X>{vdA_4`P3I6W;7o`y zoelA$YoNdmU-G0Bs!y+^`p3~Yw!87aAdH?S|Mz{@IS!_!1m+Le4CN<>>4b}rGEG9- z^puz%U^PYy1e;AooOsL@j#emoXXjv5sJ=vkg^+7q6xe?B;1nE6tV+WML_F3Ef9t~q zzU39k9kdBN!9S;RBpzUhUdX&_dzt(}9%=GlNEYgR;eYGxZe*k*wc9gzQ+{E9FHS^9 z2Rs?D){Tpc?z$J;_X#}i9!B& zD?wE5>^HL^Y0tE?iPo_F;b6Hd#fthbfK6 zKI8eitFtmN=eO<`)DLr_h@dH+-$C-@Ln5m5E*UtCLKw2YG>)co%JRNNuM9D#fB)hH z^Obf1&dp04%{5ljDJC&NN#P{DrJ2-A(ZJ%9LC9{FF=1h$&*RJ8*{j%YZb8lQL!}sS zk1PIGLUh@qEiQ>kPQ}BJFV>@`rGZA}{ymi(pDYzBH#RdW1_U0M#^@t6c-YIq=QH{16F9o}ZHXdvBP+g~q0$2{NX@%C(w zN`Uj#&7!$fA5^&sd3y=k-AGt~@ALc;b_WN!M*N8gQrA{|+3$PkRT`oyqj=@@EVMQn zhxc|mNop?+uJF^ea!YDIN(i_vVUj&GYP-F`7s^qX!K+K}I9N2jc( zxAgcKSu?qoog6RuybQ*Zr)_k+<%P7jTG*ELxnr6>%R#pR4J7aWr*4Q90!J}^9 zC@3jB9N(+f8bWiRU%EZWs|!++Q!!3Jg|Sq)1URvoajXU}13Y8i(B3aR?t8UPrYX@n z3SPb;GC8Kf&AUQm79t&S*<+k5MiB;n{R(--u1!EbNsD1EVy>yj%zSqHTX^DSYT*A zbUbmHO$YAEL1C>{POgN~%jiG6wQ|~2l2i)@c4e6)!zIIR;YZxPhKEO-oE$kopq-R$ zSncqSty;?_t&BboTbP^6@vM zF;R6v%(wKE*o4ul%Ert6>ns~Q?Ww|{htR%*oNP2d6A4#zTyLAV)+SG-n zx$3UBS)?-d`OLz{#YW4UDhZBgbD2#t7~t%cyz}L@{;rCElNM#?jZX}SWz-^%nx0)6 zk)1&Jd^>o&frlFn>s*IHO5+Zb7lH{HURd!)+A~Ew-7s&V{(G{T%Ota}H&yG}4V20| z(A#-N!xO2m<`cIUhrwx!{O6vmaF=@G`k)gBfXv2r)%obB>{udX2C@Z9ag4 z&Cx1s!!Z*NMwLXdo&6JHZ-JS82mtYM@2+@rd`*$#aci0?<=vXVA&%n zhYh=Iu?$9_10-Oz4=c)&1yZUgUYwl?a=VbgeN3s03Eu>$pP&3?vGg0@J|`xtedcVJ z`$2!_5_2eZYIYLtvA-!(Q&4co3&as^zJ;}a$jjWQ(O}Y^)O{cS9s9+Cy@HIr&|^UJ zGQqBBTTJ@FW>^^XcAJ-uRn_a&YN${?yZw|)Lyt*&8_-l?z>s_D%|uvC_{oU7)w#J; zr=em1wz94t&9>)~yZeOz_pq%tc5d|n82JlVU>esSFG(bK=m%5Jd4TRF-^di85^IbE&iY801^mVsSOi8Wn}jg63)AEvW=L>-%L_&Y;jf(%ZIG}MixR$8UHW^kH4lFFlYf=?8WVPOO?jhG+fi)) zn>M4%V6s(+{NF?xF)azt@?>Cf*3a^oz)VL_7Z2@4MQ>zTo0*&BYJ56!RmQdp#KnBQ zIr5VBBGB=mkCssZ8;34y-mFdghKzQq?FAutuJS5Rw?E4o8q0Ra+@0^&r=jp~6;1WE z$E)qZjro;@{)jnAX(?|XE9v$ya<}`G4}-+`u~`Er|`PMZf&?p8rxRWsIeQXvEA6VZQHh+GC69&-)L4fx!C} zj~Wt6W6#qJ6s@0yV|a6WQTo7(Nm^QxIJLvyZ}0A4eo9PJltniE1sd@ z>__vT*SOB+SZ(QOIn~AKx3?W{5%cFs&r$&HeBK%D=rjxgEWD1Y)%nRq`)_7?Y5YP~ z8UszkPN07XOjbeb#7=Iwc|6k(c5^)(Kg@RWmvHWu%1(S3r;pWuZN%!nc9B}Ku-LCk zZ)nL*&4KCyy)}B(jMPar;Gzyk4A9oa`fYF77m>|(uK={$u~h`5J06Zh#22M*(iKpH4i zY3jQYFz4NAgBlSN{UR>7Y+CZmCsT)re^mgJxj>B4F!+CMgOCyuvZfPD2O-n`S;QwL zDN88S7Stt_dt{%EkQ#=LQ4ha*`cgDbeL>2$>%#5v$~<1M{ghc0K&I`gXJ+nkSQ#ES zN=OfnFPmQBqM7b;a9oXR!gkJ%>LP~5`WrEO-*IB#W*-Ks0$-?)7x5YlazCyr7NK)usJn& zwBFmA8glx!h_NkhZkE&WTb`o76`6u5o?Fo^p06pZD#As;e#JV#^ee3@48cjyq|Iea zHHEIMEWI77B`hHr)n#)6AjLJpAaiSdKw-JAu{3|B)y6-dY`RELIA}+Y|eE*t@YybBdoz z+CVV*?&(K-IW_Q3p~JnUqN1>DXy%K{xy-o906>i7ynnTpo^1i+E5GnQw)=+qS>`@| zXqBV|%%M!pSV8@XwVJb7TpC=f7_7^i9P~VJ+RbMg^>?_svgrG!-KO+)sE3Pv*(DPq zo<2?UKztQM=SSRKw!4OU#Tmf1;QeBQ1?2)#hng0T$Gs?}Q&!aiO0Tg%@cw80If|@{ zUGByO1lTgos~iVW3;>1!7bwM_Hm}RsCmyl^WYT zgR`>@tu6pRh}{L*P#&^U=%kRBB^CKvrMb5CI9aW^o~2Io5l2WAG&A3M{@zmb$1UyFZ)HV;+Wh!KSexT~ z9h^w!i2EBIF8`vGhUm-Hd?I^{3vSu*KMouCyL)KM`}xep*mS<@Zry)XIsFqp_tA(* z+PuYOg^(XSo<~OdKKZRGufDS9KtkdA^;pWkR6E~lS3Z8FMP=e;cRfKJzVw$)_#v)` zBLthldxDh2bQ!3s&5u>kH5t-d>*-7SSU_JyP=EH6T(WXfXCx5LB!5+Ir<2{7 zP2B-;o6F3~w9WFKd!0ia_Y?ub-L)p0HR^LgQqtUoV<;h)>lb(Eq(HCtNcc#OvyC&Z zUhApBu1nORyxsAxF63WKC4ccVQACKFKf2B~5Qt>(8QI@y=;2UWZqEdPA;WJnAE<;* zKFjw*eyBE{9M)aF&+H1&zwsYGmWQkbd}N8jc0ae#^NwrH7S594zcdehY{W)tYuu#UL18e0!m35it%W;!6}Vt&~)3?gRF$YNYRC`;Itn_%}w>a z&8`^60p{7;X0FdAV8*>Vv*Gc$ZF}Wk?1%11XHX2C`F}&KDhLr_V`q!561~ zBh7aS#samr?fNZZ6TFS-Wsd{#gGNGvgdq1)@Uen*;?(Q}bey3Z&bhAI;Ait2+if97 zI-*p%Hz^_OksZM_0jdbmWLWxwwSte0nJ+e-!fJ(4P*b_ZzdgFuMidJ)L5pJqw$8&u z27grIAqV`-x<*wOV2OilfVn^XSLat#ZQ( z;IsGo&F#`7f{KL_VCe~~(BATBw1OrFZ1`UWp^Csg0!l-@DJfA*cYE1*6n-w0vY5@q z@!3G^d^7Y(Z{|upH9)=!i5$Cxr+zGp@#2 z=?6nYEzT`4USs+3cKS?Nzl8xIwNthoBh3ZEg#lg=-1jHtrbZ~37)Uyqb!JT&Aup}o zl=MUgOZzIy$|J+ub)!=w&_Q6IUzg)n@ZO{|PexA`A9G~YS!e%bm*vF!Kq>6FWE1qT z%`t=xLdjR38nBmL1#nxTbiOkmr!Ofys5MlOZ9(H`94G$Z|DcIX>)whG>ZB>;G_C8U z{`jTvJ^VY=lCVua8?JQ5Aj8iWgkg8cvz8Gh2DX-j2&0fVnpBd^G$Kcp@vId8T*(Og zlpO>IRq4sN5%-_hNj=`9npO4b{pb|Yh){K&X2tH@*0*w^mX)c;3Q;rjUHbQz%QDH9 zv$rnS$_N(0gcJ)NGY{QwosNS=p)yYzqH4ZEvrq7qH6^Am!l_Go$Q{@#K1?TH%}yyr zXdX-WK{FK?`W$+G7DC9+1IdUS)vq7gc8mk-;QieBsEUqs!_QH?nB0N6z!F#5#UY!1m$k{{CqPW|Z0`bjP-D;qPm;l!T#{<7_ORRt_e zaewMJg(fxJIak*kX@DDCOm9MJdFymQFBUC*?M`l0@k|(L<)<5+7=3m1}hp zJCJGb4}tU=Zv6g=tq_VS3+17!%Ec}m8BB#WD2pXmho+y2RfJMe3)eWLAMTNE|AhDc zS6TxGhE$}xt0A;KY*4HEdCkwB>1}sPbVYeQAT%YPD@gU*6Y)$_L(wC8DjsrbL!IP% z*c3Ty;ME*hl`eW>k8}5xAkbJ{8P?x22%JOK(<@N@8+ z6G9Xst`-|BM6=%@CJ2BXexXrRUD(*>wnrhr5^wSSR=`!u{`;pa<_-stg4^#ux#zoI zE?~Q!oXAk+3C@hvhM!x}CaEN=+3GM*GJHO^O#sU_o)7eb-Qnh!UG=zszRxa_Ld>yA zN@_ybQ>E_Bt}YlTNPh9Huq`DNJL*SbAa}cc7fAy`!kM@9L#2P4HU1iHE5NRsQswqL z@Zu=XsU+^A!QaAn=dQp06PJ_(S539npeZGRZegppVIU=qPfmG$-TA!UsB;`-8_4(4 z&?6M)wVQa#n4BUdL8>aM^iV_EpDE4+0%+r)$8V`@fn3!n+tagdvpg+!R+hnVl;xy^ z6boBZ#B%jtdVkzZvZNiT!}v}b*C7?(@lEQnreXL^8c~Yb8Bd+y?kn2T5SI9GYkciT4!DA;Gzhh}jU{)GUo5w&baE2} zJ{lWasu5s&E8OnpuCba_k*hZ&VPnC4O-y%&`j2ss19vj_j(ZGht8!cWZJVsDY!nrA zP%-fYLxyRn8tUtS_df=vT!}5Cfkj0@X=HNv8=~6;tz9z_s-XUxy50Bll2%zt@nBmw zy|6FME`;{lrp%9T!iwA#e~P|}Pw2Fwz?|N7?iQ`6Nr>QH@p#vk1{Cxb`%WF~@3GVB z(P>+=jJYIZCbu-D>QT@$mt;o|j2qv!Jzm~l5B%eZ)rq^7C?&q0wl`v9x3)#9iYL{7 zD;~e^LKO%Zp&16?mg=&q!FLA7U4JjI{Cy*nLzF|^bPW`zfWBuP%`bIP6EF-^ z`5%IBBC;9$p<7nF{-Px$;YMYvA+4^(kpkg@%BY)7)6+gHy5+t&3_)z8`WwhmRNWy$eV^3toIi z!b>ua$8lJ*61Cy?zovU~a*@n!+P!+$hVvN96`{_+d<4Gw_?$^Bj(f4M0ON(Af@tus zxEEsxB{Dm0PJ5lXRJ(j5Yi=~7z|(kgZ|@*zyG~*p^kwO=D9pY(F?nbp!2YVRK!Odr zW99JRuiAg&oPg^CLICbR@n}u|Skch?y)EoC>-|hXcg2JsAO*OaI4>dm3%xr6yk&8B z6;Bjg6aj*>+B9 zn&i_CV5pVO#s*g_{WY%DE1f_cF<%VqAy^?&vbeAkWN>n0?e|;B9MWg z6)~UuJ9|MQOq`P`nT(#e_)^TDA(G1)ejWe;j5VWK0rlXUvl|Q9%vne9YDbQ6RVR;#6SvqHpx5YCDc)f&+;S7bMbbIN_!f#E2`+KOo zY`QaP6pN)6dF0pXMOSFA(`$}r9I3FJphxpU<=US7`HT=;+ViY)5UgpWXWPo+O@gMU zKS7OTV1>q7C6&6t#bgIDqH94ak-{d4-*J@`eRFl-So)#lN#B?5sU>cEBg~@v~;4?60Gf+1~l>qFa(uqGGo*Fzg3s z-#?R;vcSUcXCbWF-Vak7a{qIBeVaTS=%DO1MW9V_e5BtRyzF3LVC4J3{)2U=@3wid z8bU5*!@jF zIk@FCIGHtEc)M7eEsgcJy&-1uUuiW?3#FMFIi|5485t$F{^Z<4Qwor?h`Tlm*$1P! zi#v9huHHx{Tx4A2iFi?3o^d_RsEV~uX7`zBO>3HlQ z?MA_6yKtP>za}Tw^1?in;M>5j+7)LP@XG*vL_#`mbYZ+jjbR>Cu%0qcg2lrlcg@ge8`u27K?N_^!?4 z5`r*3+5N8i*SsA20NYBtKK#cR(9r=}7D;Q%FpiF%tjWWh!YrggQ*)z{UGl*9s_f36 zM(v)Isa4Hhxfs}3$N2c*Rilz)7|EE%dqy;4GVr>Hfdo&F^;dlhML3kyprEgXoffYpi~FRz zYdwXAj|>2{E(HV2^7K?(Qlc`8HI|mSJGQZqZi_PN@{hnP)DQEkh~f^!L6h5d+s%hI zF1Iy1VWr)|$Ej;29bR*=JcMBl&Xq59+aIKF%X1t|vQKeRQew&-T7WWD=WkvU;?78AXnm+mr`=uDc92%A>YS^qTl7ECo@nzD4bW5Ma)|G!{eJewzi+J&PHih) z=(KOYz66G(P<%vGCP!t_q7YIOpcVCU@Gu5BF$Te}6FjAr@ux>p@;phJ}fhy@u#00uhs^CI#s|W3#*UC|P)9i_BP&{9&*2D*Pc< zyLhWAskVj?{%_MS+cn%XXW?KJHQ#w?)3%P@EZE1d>cgM@Sw1#sNBglcB?qo)v+yr5 zR(;k0uMVS((Y-s~Z>U@vxi+s@=FHPsnO{D7v&IH@S0lS(ep3g=_4_yZ0YPbFkyTGg zPK;O`4(NX0i%4-I2Q1q88d$pwQdlBM4{i!1Y?QAxD~S{vt5ru+1)k!q)krQ*SGiEqwM4a3qpIPLp z%l?!_9iONUnj+AHS;LGM1^YgINE-Qb;5AARM|#<^;G6d(?ZTti@d+%N4%%{-)qbsK@ zE8m`&gv&Z{;mF*>tw6H|N=VhCJf?rExusV)fJjhG(0FM(4)SGOdX8NZbwcCt>4f;K#L}3g& z+t_JX_dSS1`G=+)MUk2j0)6MHo2#(OIYaDbB-aP?(R7!>Y2p8lR46DuFisA~`DPUCL!GR`+g{D6sA$3t$nMhb(Z6pFYM zF9N%6bVfj2vHIaMu4PF!<};UDX7e>dQ>XqMB!j9uv)=w-PP7bDJ zdqkMd6cdxCiQr>y!*3Y&`5+Bi;@U|hCX@O)3Q!&iGCqbqftBK`bO?woXNLUHQ( zG^ejgf&1{BAqf8`Xb zI@hc*4E+NUj0+)H2P9@bT@|sfG702=C9S=&emlK8EU&STcynr-O9EoLlw@qYbNoj= zjoh8p{2wi|YfxNACiEdSP+b2RaEXm^*J#fj$5NNg2>**xbVK~-Yyo1NHz~O1s&shW zpvyb1OAFDI=2 zVLxf?z-*jpmE8DF@cmQ#7^P3P|9AhudtEtku|a~(NwQ<(e|#D3WIeF}!)J{>E^}{UEGt!+Q3$+Am2MAN}bqxk} zR5+1J%bJykH|G+nM6N)-oGpG6N)BI5!0_8p=mfavHPU=ONO_>A;AfVkfdA_6uI~*W z`UMM)MH2rLr<8{(4iLdz}NJ0C}Ey5kuxDcfA|*L!A>R zIcdIPI;A+d5)%G<)^ejkcZu8mY*HK<7~OzY6XsL+q#l&sd`6}P-u=112|C&I*Uu1g@N~vjd#l<4|CPM8R!#-}qW? zcI;*iU_uh%%n){6ZznG`A)>)2C4=lHW46>74R9#(Y6h3iUhs?rd8rRa zZT`d#mI9d(s=pM$*myZA2finYxz0HBcz!0sHPec3_$`nKm;=DT@N#+NqV2zV2y8jOOwD-#p zj#`T;%20d)I0^cZyeNi}u2_`P$)1txLx0)un=pznVg^|$x%I z?sZJQG!3j3c`emw&Yh;(CXOj!8G-doF)l?7!V54aK}rzr%7t7;*cuq359)o>#ue&) z-iN5&DJ~>b7%&x9m4k)jR8sG+`Msmku2f88vq%8)QY;!P_)Cn=a~paZB)k^7F34xj zrX-nh;=799&~=NM(Sj_}(=y9cacs%bKVr3-us`o{^bt+np0$PCg_fqv*rm`KY3mcr zW`Z^u#JiX1u~nL;+cSZlp&u$e_7+6XYAD7nN);>8elypDSS2mJXG~DWSK>Arv;+OH z((4`&cc7`8Jzha9IDCqsQv{h4fhYUu0Tx(saCIx3;q|-QWeODXz}l$9u6?V|PWO!V zcor&=te?>@k@>OhneJ`iL|7no501{PouM@{&05vtAhC*#hoJi5MA!y@93hi+-xa^_ zaN7FRy%jXF=c8w0AfwC4hKKGwgsfdil3bv8!+-cMMMCXuAs$~FqA3hBY+38!=r!q` z4uc-CVQLLxNYg8rf3L~eYqF`;WMvRz6a@ctIiJe9&Qhj&(xgcPW}>Nd6!uS>aeKzt zC(+~EOJn7{+z~8?Qu{IU04-Wc%PD8wpI7^yD&64%t>q*&X)~`nW4$1Y)(uQ%?Y62r zh8_`1Rvr!#ExB8nBvsMSw#xnKUbl?7cA zjW2-s$Y3<7Naq=PIjkNGEN*L@(hNFhR(=K3<1s~0tbw}z%cBPuV)63=%5k1ExAj{? z3VC(QEG9>8!$9a;h>WqVkoOVC0@ri#X$7VDOQlL~*>PVubl_Tqc*ktK5E6za3DYpI z4@mPeUAlJRb5H|Ex>aCNUYr~9NqB2}FN96%a^PMdf^Aa-->6ks6G~w;I>*7^Ikh{; zieXOEm~^(-GLlu>uh}YK6pYq=={jtA;lNf#LPmal%?{oWB6aGGL2*=U?Un`s-SWMN z-n9+RFXtKG8Y}qsX$u9)&tIs0@6x_%xg7l)8%)C%k%ArIbk>?)BkJ!L~%fa6VlW`YhWTC`i*~UOnc$f z<;s`eb=9YlU=SB-)026|-l=R;_Exr|L_bYR=dSNvC8%lFT_P1bKwrF1+hEKZnBpOo zt$CgCM?WcavPYw(dn7#psknz;yAv$WL78{1-P^=9p2 z7`nb;)2woZayfRPi;XGXyrSs2(tEr}+tA?u|9fOT9X0+P6=lWC5Yyo7jLT-J4Z?TD z$;Bw_j1&*dKV&5g3P>LP8uSVEpIi2S7hyLe6juqsc4$aL#duyg8Q0xOxpCg#@-iJQ z`7{)w-S@r5%lhUP%GJxNo|~TXLf#fYjAxKEEi$3^DCiwUJ5H3-rLLhIb%OBUfAsrq zOEKNf`$6Z`feQ=k*Hn4B`5qxhOAq;rL6_O2{uILdt(i^@79qs#v~)>Zm~mxc+lp@7 zGREY1g39s z6H;fVcqjYZ3r$Z(VXoP-t1n15@=o^uI)fM<7t;AZ#qLtttt1uqZ@WsmMFjRENjm+v zS6QTOWj+9wZY3u1XYEIM<4Iu4ZRE>mlg4y@z$#v5rCPPTvuGYZpac2q@?KJqfAD#- z`@H@M$OZib+(m+c%*lOY6X3|{<*UA9ne$R2Dp~$x**x7nol^!0J({Ms0#@qeh(Vv{ zB(3F;GLA1>({jz0j=0gx>oc|*NY@0s6IaB${I%?WWysslFD#^W^}Fl;U5t=45SXxI z0U{Itii2LTtt>nElQ||S$P`sxR2QBTHK8DLnrfRx8#lCE=F*VWi*`(T^jgbzD2m*7P~tkOBzp&bYU*&pXGZ zH=$e(Br=nyn|&K?WmT2y-;B32U8Vp&gEPmC$Fy_}vpcPpQ>S;Z?>iNLhua{Y&v~65 zcaKs?t{)|#6odbDYP06sRUhT&B4Gcp5wh=3%=g;yVB^AVz&cM1knCf#5A6X(Nx@t1 z;0eUtg5mIWaDf)pDV6VYN3G#keh*97V5Ks^>7UT ztO^JbDznb%vaOb_T%_fn_TNjHyGmf?ZNA5NH^&gZIzjgXd@Kx=WQUph&h}5Q^BOe~ zboLhv%{2^-q8!dAmq#X$ozZ-R8mf6u%t_B{MlOOrcmy ze9pPNgvOYslcokJHQn^5u8aP(U@e9$q=)v^OQc@Ls!FEP2ReVmAn$%?*k_BRO0}sT zuj3fFl8bTLVm!X#S`w=HZ$|t0Q7jS+2jlfNfBhd+;f<<~k=a*Nz)T7>w~*0hw{Q-> zm|03qU~wYiQ;PKbYIydch;9P&|7Q~0-Ep7K$pdoq0cjaCu( zIJt4(_VP5UJw2-6xYk}4%dk!Xh<9MDv5Mg4hkK>fwHvAA+?oqb4O%Q7DIkPYw9_(m z({WZhLH1bjo}JvS11hTo}J?pprSVQy`04e(AgnnbY| zbp}<>7h-d#lw3G)O)qT!ez^t~jP2tD>X4k>uusQ$_-DU6vGCShfSQF+1yay?qm>~X|<-tvYYZZ26wpu7#tuAs!DQ&flT{J zq$pP#cMnw5RO9V2l9CZt)8~{I`-4T}Ndc4bq9YHa<7Nlw$??Ud{{F1r))2h^stDm7 zZsg~M(4Q`YRbXKO=QVP5cTQYRb#+bv{lKO8Ycn8d0-^j-9w7-rqoMgB6&V4^w@uPu zFFrO(RsO^OCOJMiK0Y-uA;ku#v>Y%(Z?CH>0AKT~%`0ic8#(th?~3>_T6c4kcRe~h zA~7b(l3vj^BwhEex_h2VWl->*@~w3mzR2$*Hs(m2_i>YUXo2hNCH`-L=C!x<>vsZn zDimU}51VnXLTV)mOX$^FrJ+YWkeGrxH7Ui%QB@$HEkB$Lj%uDVB(>z5$Z1OKH4cA^ zFmbu^rH|X&)51F$H&R0!@l#)mS=~>+iqM*rF&?fImj$xYsPm0Y5d{e*YWnNF3$ome zXBba^qA@K&PCL3xs^=iysNln(1|s(r+Bg7r*RAQxM&gNB7vTHi#kC5W{0}f zDxztoIhH0?%K4V)ex^D`2z&7zK#>FgDpyfinVghxcCz9*(sWPg={nC2nvj%${$*03 z9pp-JyBN>Dh#-_N{R6N-nD61;avZoy2QYDF#zhSh3pr%S_C0JG18T7v0sv*EvzsLZ&IN`V$^aAC8 z!wA|p@77c$@AnELzFVMUnhMn);;yhJ)S38W`XxHPtEu&?VO`n_g=iZEREP;hUV6>) zZ+CNQGe4E&ngPFVG!IlUhV!U=nTm&C%TVV(9d7D%d?Ye-u9TJV0rf}#Oc^q-0H z3Ds{rS2JM3vk3zW<6`ZOBh6HEbu~cYS+nF~u9z%sR4hakCP*wK$kNObFtguB59~1a zyzPp;c=6t6Fp`E8frLQsyCT^$s57@(dKOdA-~O23R;NuV&UPkWltly+lwRsIAVUN1 zjSW2+EzhQ5uiU7Y*c?AvMCT6Rf6-ogzg%4Ur4uwV#=DQPm#f?1>ai-gQI|5u$Kob- z3mI%^HTkQ!9Guu%Z0c5iTK=EU-Wgy^Jd&n|krJN_$-$$ol4$SNZ)s_1ull!~pT~pK zqchY$y*4Ia2dG7Egm02?k$wD&#}g6*te5wHx@%^3&~BVBhpGq1ZyB2yXW5tl9V0r{ zg#7G`oAd4TGNIUTbAlln_{IxD4(m++OqN*UT^A}Y3M~mQ5d_aYhX6$?7=U&{;i{+0 zdV6X(H%v`Uj)==5-aOEdX^8R4z(r0N)GQ;YB4&zIi3TNr*E6WdILq)70u@djts)OO zm+UQY8rG*0i4LN}Ch*nY(n8BXRq|w&dz(Phy9z#|PFUek7tbBj(WdvwN8N!2;!n2R&7Rfyo^cRH^yl_D`a( z*vL8YtFZj!Q14AUheNJJ0k5@0yJ}WXW!2WMcAu-06WUsBmZuhnhx@)>_co6Qgn*ND z)^TdmTtVa58fDbz*hq)R!A)W2BT%6Qp2{~D9*E}T)O4%s>Si40=7NqqHi*Pzh*C4N z>6F0`t5jVU_%7`}>#O>p)mJnS3ARNC8)_QC2MCEULL_VKmwqm*FR9C1@N;n@Ehe=4 z+yx-$0)qH#tv0h0Gwi+n*Uk?&yRnNIw8>G6k>s+q)BbCs}K{G}-?Z-;k6N>W6(lK&8b=J9;_-htA8loP@)%^GNrwpXjsOVVa zNyYcv?3|BB6(wZ~I;szQ2Z0fF4$ZZF0C?XAA=Fg0oRk=TIR{14kUn zzLp^a(|mB4=7c97px}99hmfrR6fczbAWej4WrXSyb%ogWGI z|I4=g^ztTl#pX8J5ub97q;zs1(|vXa!s@;u{!Z_abb~RWzF)bdNNw9^`A$i4sbVMmtJyjjmUS5 zen{eXhvqHMMd88AAD%jnuX4k(L+Ilqj+O75DarMjoXq_low z=MO*BNXl#N9IN|O*0Nqz(rR3FMvu!?NN~huOVaM#k^eiD_j^Y z77k$-Th<&kUxq^YhaVHDn5LX6I{nc8aL-s#Zej>O-|qu$FjE1wdY4xMSMZmLRL4-< z2hc~bABhfqnaFS-;ror|Wei*4%zCE!c%T6FfXi#Y2pAM_e!&o6yWq-GvohP8rD@(z z6R}_}R&_9r_<_lc#-@nIw)JDg;P%_03RSywop}YnY5i@TLpK8#6#}acXpNwayQ}4z zkusZzklgeWg%7_sqn#N?+&<(q(leHz-1-mp$?4>@Iz`mB%0 z(YJlC_4!h8e=I~rN|*DJ@U33oDb9HTny$7cx5Z5wgzu#xI=oO+^z{to<@2NH!_n&L ztY_{}GqIEXF}uymFUPTmdQp$KSXCRXSyR2wN`70_MbPgC6F?c)8|>R5@Fd{M(G{E9 z^l^zyZd}~(BKCtV;4Z15_YE9hj9U?mSMR7hY>Uy3w*_&LNMm(%&&b5o)MOeY*mpT! zTAI^+vs{4%$PG>rve700C!%YNoRoox8dYM>yhHqw5bUl!cZZBg3AvxV4 zMBCz5Oyj14`57*m@*X#$R{@5!Nu?GEC4=wz9%Q}{?9KI~Qznc}Qj$tj&dTk}hhz6f zd!v-tRGQu4+kHjD_z1j-)#FN+(YO_ebX>F9>F%!W%39|&6?J>-K89W!e8bnn<<`Ho zalc?wm0WZvcg6kdp22nqrW7zTv_F}Wbj+{%w7NarU3VcLW#X8WnqI*hOs)(RmdLfZ zZi}jF3<9=vP1(!M25SU1*g^B|3uT#U`a_=^pU;RF+{KIx#Jjf$+pQ+oVdlG+yG6{D z^l6>@bDhb%oJCv@XJ}8?w}1c10mqnwO5KB2m+KxG?x$kZ1LCZPhuG1GQBriVkM_&z z;||f3+iW!o3|+pLd%S~DgIYjpRLQl)#ULf7DK8B$g+$M#yOlnMWqG*(Yx2%l492Zi zn~`xg_}I5j_#lQ4Z<*8&-l=oGl-$J4MQ@T%8WvRs0(R%|LI72sWf_{he|q1mYDCBW z>i+r<0iR?f;Y+xNYd4#*YD^QSdHPKRoag~X5AnOeX5C)3Ge=Ag_rKdeRqE^-~KEbx}p93J2|i# zF|E}7LBmjLYhq<(P62R76XP2#=P&mf@`W#}qWgQE!o<8`2cCY!0;k0m2`NeA-A;Rp zNh^My$3;wZtSKj4uC2EmUxMK@pCe^fF&bi{YYS-OI|YG#&qK8A_=aj~xoaMFJtZoMDU&B`Ufs*tLvNdIk)FjO zxrWdszsvMk32&fyrOe<@FWI+zApUL+dLlcjEKYm5?^e}%W&9OP32-vry&2Nu$x6aZ z{n~l2FfEVIZoPK88cQOlZZ@9$RrF6PWYsTSjmwqap)jldLXXYL9uU_jnqO6ufxQRW zp>!mCG{W^WtpT_|iZ)^bX7LZHa-*4uWPCaLTT6|DMecJ#t0DTk_IKM3L%ptvmw+CW zTm9IYP=(o|YLs9kx8}vG9t$oFhN=y$6TV_p+3;}Z4ly)oY4tWO^)?~he2^?lM}@|Z zP63)d@A!a>!5VXPolT!O0`$!r2cw8pNI21W^PIJxFH016=5x4#EJaC01nz09jZdF= zX$CRK>--Iq<3jzg=;sk#gU|;}^?pTdk`1*EK@Z!n=T8PR-*CaWHeYS@doLe4w`g7xbzZjb@9k4eFq+qj&BruRdBH5(0XfF-$#UA5Wa6lvOrkBN7ET*>hi`~>;#XrXJG zYU4xv^96=vRe)G4k&1?a!{=aceir)`eW0|We5Ip$Y#zPEhT|J!P!s_^(K)+IOM0-o z#>^tA;d*n$$N91KnjIe<=e%=KrhJt_Ujd-c=&oJ_TvLzJr!IM*{8v0y994JeCHFBg z2d8ozTt34Ap>cv2QM(UZ5k4x$3HzY;s$3WEzxS}b+#RmoXbDD6lfj}!mJ}$T{zWuk z4XOQl-|li#aMh@5?k+>aaPU5s%(p5498jE%-17ynlKaRCM; zXfZb)4ovlJzv3bgqt~48Hz&P4p6uDUueYZKH$D({q=&bahW_&z8X8@u;@}=~dHj*^ zy#2FfXHqx;DW8~}Xl-kYiHUImsx*|)uhlj!eT>x!uyj}Fta2`oeY#3R$^8OlzqAFS zHjMe`gvXHoRIu^T-A*ZzMCdhYb~d_dc$1ytL`r@G&Zw z7TkW&=1#%DTy=4IdwRlb3HW6w^iAM|q<8gos!ovwkV@j2>uyF5Kum#}JMS4dr4^2h z!b|U~_a1+d!Wm>#5vb-r1$DrUsr@aas@A*Am=M#|QBhT5YGRCqMOx(On{TA<*GUYC zQ;B1#WBglH9#h@L_A6HYCgXQTpsumIh@eg9=HFPLm~O87sw!#sMH?=;5hVPyztCm1 zJ%D{uP*j*48>JqeAR~XcSs(+EN~>QS&()8$z5D8{_?}E2kNx_W$WqG;-A=x>iu#k# zuPVMXB1A*q#>a=L?pRc;j{RetHCj!Sn3InJ%&sv&1@HGi4~ zDN)FrW1~N|6(T<3^M|T;$@+bJDkXl0P=A8 zf4YizVIkj@8>Y+f?x-N!`=b4#{|V4qI{88S*SPL66!xb(_ok1z2>82v#*+={kvwXX z8fbfuB1zcZ8$N(xX>(ougZH8J!iE;WCff@39TB6Yh@7ZOPDm&(`H9~qRed2wpQ~rr zd@-rRg{(F7h@Xz3W{QBeL(J-MgJZ|yHU|>W{RB9JzP9|$3VksbJZ6_?cSi@jb6CH6 zI>wrHc-`3D?rN^3E3CITh6S>!9YJAP8~2K0i@ zn$`V&MY7Lsb8CuEw};(Ukr7nr0nMe6_rPIQ-oy=yO8~CW-!EB|Sdx^J1f^KnIpPyi z9(Hq*aIVP#w}GPUXc53&A&+=wYl{Jpq4|xRn?78#P*ao754Y|?h#{YI{+TL3Whwvh zcf4Z7f6r}$@*BkU-nca_5ZV(Qa*F}-Y877u?d*M{VG~vmf!+Hy$3V5`xHS!pO{CT4 z{5rl*(1}@s8ZY?ym?g&?uPZ)^6-|>D9Pk|zuiG25FIR1GZZ!TsrN-YMwQ^z|%$ zarq>xDVs45yq&G>rF|W`$Sw%z?YTdhu7?oaExCx{%@Xzk$E&D2i3?%LlQpYD5abNu zutSB{(=$Q93f1Mai%KX6>>Z1clBryM?YajGUvWK!5d!A>cKbUme&*?m$^1@#lIbu% zkX_f-db2EVhsR@2D}E7t5-}KH1iQ)?x*76`l~+{LQql5DLPbOfjd%bE4(n!Ppiwh3 z0*-80k(l^Iq&0-Ur~1EW`DS+Vq|BYeWkwvOZ^0dHnpA{Y=Y3X+@qDjqE00j4UjWx( zgZVBxV69n~|7f>J?)z^0)_eRorSrG4veB*qvRW)O`1W?NG5nyt$}sGZo|`T(SHsiO z(ou7)y&_9*hX&hEpBtSS^G80p=%9^yOK0qB-oEcAkNtH8K;QkQO8{d%^w9@e>tE_! zd;Q1;`(~M&xlXN;ly~g0?;Gkwx-?&JlX}}RY z8fU;2OPBl!`CWD$e!`W(yY~Mv^_D?(1>4qWf(D1+?(Xg$Jh;2NyIarz!QI_q;{+$T zySux)^VT`{-g@8q!4Il-LG@nUbM}}+pnN=@@Yrwdr~OvbaI~AeU3arJ+R(6nYk60( z{pM?WOh^$e2F}YX57JSD;83AxbCi!$R)RbW>$mP5?>HnnU*NCU8|+i_WZ5TxF!~NX zxVN&%7*1j?V*oM}tvSP=Q$ZFUzLQ1&k1u5b%Qfk(b144 zt{Bj!_36nG))4|e@6K_@Akp6P`{0(Il-M$$51m|%d5iND966g&&0*daw0Ks2>r+IE zjEu0)>|n8-`nz;>ilZzL56aKs1|7wWSX6Pe8o#1pDw!g9bM=euL@f2zA-BiOTAs4ddI60iU>{+cvEXsePe6zr zY3PHV_$8wf9m`&x_HYpHaNa1&cs~f3SfJog@#Pj5<4i(E!W7t^iP`^hwaFqG)& zG@qWSG)q>3jC;5cIj{8$UM2%CXb-Q;0C^cwnM(~ z-_YBN$Y&*`Pe1*Ac=%vN1ix`Y+b7?+uEhqY;lD>thZnmP#l@<+v+fqd{ZgHU$G!A= zT*0tXTlZZR`Pq;)eWdD&5|aBF*hmlSSt0VLA&K6jdphdNYrP#b>P%;9blaGt^Zyg5`*8#Gl1O#4W7gXg*x-TmkQz?*$=TEHYAG`bX^SZPUP)NOIm^(!7}jIZC|^FT2!050n4skKdl?XoU@q z%qH)iUzK1yK)RQdmv()`8io7BkymirR%mi7FUZVDvo*9|k5#dBgb61t4EUymuiH9D ziB1XYeZYZXAmwqtwEQ%b$|TU{1aEwMw_?MwFhz2^-iz6kg%4nh2p)%UI8Hwdj>3<3 z5yt)q3V6~>x0b;S2OQc}cLWQRSCu)Q45y82^Q_QN(Z)whYzX>T&JNcC&|l!CAaLSJ zK!zeve!us-38l2{?jDJ&2Qq-yDPn${;|GevXKo1?pOYw`KFqMNY{>&GbGx9I%JnX6 zP#Th6tVFgr#8&HyVs^rxm5g|M>WT^;7k7%wVNozraLAa0NW`9wg(z*d-l3i-__+AE zi=7pjv`cU%Y;!(WybGA%`|!mUSF^2!sh40vr0)!(&{R~^Wq}0XfHeheW>6+ zKzZPj_zg{g7bE_Fw#q3gCfw8M-cDCuEK}QJ_v{N71n0?0x`_`knx6R${d=QV*AXgS zSqchys;`s2W_n_xoCzcpnN~@z4}VY62I)-&OsjYwj_8PgyA}Dv-C>>JoSbe(VHS~} za#%^q%!$mOf9qn@g?v0 z*YlFNaFa!UAbPcu?vw7QksmM!9}jl69RV*;GMPX14E3D9qtx((=MAp0skcXMHnGkV zlgUOgwJ0daIXN@o)pIAMC*cs&%t*kW!8S_DNcp&1@wkA<0WW|%hJreXwui2wsyeP) z%S0`3{XXhWRKwJ@H4tJ=;A~!MUEbyOrlhFJOv}z1;NA(HQ&oEu#!zQ%<+I_F%He+i zxHx?Ag>rmbX)_0vjOX0nY%6p0cj`vL9J0e{*X$VuZN`}0tDF6 z8keu<$<8u>xujWQ6GWPch5UHx{OC5T2W7Q0Ax^0)d%Aw6Ir1vsWc9rD0152TkD2+! zWgj2M)?(!SXHk_z`fHb0vRx&dlR5(OT#gimmiFfyc26I&yivcacE0>(hG~}5f6(BQ z(Nh$lr8geQ*PJFs5daAo*gRCts)sv3lK4dNYB?_RW6^AU_lOJ92EX0>}zNO{imU;|F|f6bBLU$6G=hmLoFvHJUlSJ2Il6eS0p z(^BGe8uf8``pH*9A7@r)kHQNt-K>UilkbAT$gw0ko^zb0n4x=15EzmBEpEeYVT>Lj z-*yH<#a&M?Z=U8o@%QbxcyRkF~*7%+0eP2AtRri6bBT(yZWezr4PEj#_rYQf%l^;vc9>-wd@()t1 zvx~!zgT=eJdI}reH@Mu#>to!>dl_Iv7$guVe3sGV<|g?^UJ2l*0Fye8YYf%f9t+-c zAk#u%KabOe-QDX6#kr1+B4Ao2O4eLRT+M8TMP5NSOqLM3+(^nWF29Z?A*2iIf%>ZN zfZqhc-|;-~bjgrH?c8mROD{G{U0b^%uL2zx2m9#tMO?WsA%XJrsw996XVy|oK1D^dt-g=ol(&k% z0BTaHX-9Yre^!h~RYgG)Y^4RhTGGfF>p)~<|a*D-r47QNvN}kv#X$@1e7|Yn3(%3-?{0zOJv=5$_p7p)#<7jKd?&vGB;09B4cD^BEu}t#qFIy9A@1Jt{>QTK(DFz5~$?TzotZs|6E- zQcrSnI*6627JWuSiNkalj7*<$T6E4Gihc?4j0S7`8+zngAvIeOGJpwLDk?OcLoHz_ z92gk)FO)w+b$-r=-?uue&FS*Q_Udh?)_H}8XO}`gwbnsROFI3QvgBslN%8u#3A8w~ zaN~B%Q{x#kgyQ2e7#P)Xx4kJ=}+QybC!J{ zJKdWl$V==R`==}9B^0W{%}zm8`Tp^y!}nvQ_fs0lmxh`~uhSJ_Yge5UB-o5k6uIH; z^Ee&V5JhYpnjwpm5TELE%@{aJM8`w@t0Fx8zL&}@sII*%7fw{MtpvR2wVob ziP?YmciCMI`G02)3uyUMAYVf7DHyX&=SqcrT+RkD?KcJd$Un}L3d~_|;X>u`ii#)h zom}{v9|=hgSIw&}jx7-CvH1Ni5~JqW0_?8-0{?wqu-uUV}OHFxqLicLe9Im(iQy8(PKB~7SK|P(u*T-5T+%h?Vs+D^VR(f zIQ7qB9AkVlev=f!j{OXIr~EPQ=wWFt;6Jj+_-mIr%T|za`W2&bD)?O(*9Mrdeix8rKJr!NURZqTJkzv@X1Uo3yt z>o7M13265j9Ak2mH_i_Y-ed|s32s#ZkkK%aW5bmI{iw9Y;q@*_S#5&#e0{!Dsu#d| z6!Io{7)Z4E#-p(-C_t&!D{UEy2~aeU=re5gi*;59Kfe4i*c3A0PD)HVBj`HeF7!`G z9`J&?pNUt>-1PJFyhYi*VzJ!R+Bxl(gL;LG0AnkmEV0d~b$SRTull*_%!Oz0^=;j^ zbIFfpXcW_4PTFT?m_FM%!Vx z95-r#aYiFh8?V3}0|nmqt*lJoplfex&sGWpH5yvz-nAhM6yZT02 zenojG+Cd|qMY;;`%h|WMEavE5_up8=#C9Dismf?RQVK+%t|LC zWr*2-n7D~XqfaS359!Kd??=$_OEldX7spJ}jd{A<3b6Sz*A33xceYWQ z0PlE^M*RBAlEKp3@R_!mzcL;Pw^-9@=l3mcMIlK9zpAt{O5$mH=Jav&B^R zQC!9NnIK($FNtZ1;N6HCi+8vp*=OMc1_$n6PJ?^Qpm|Td6jCD+5}`T zVb!jms=icp&53Ew7$(r*+_k|MkCw$qs_&$PZXsOHO5(%MyAIZ049y?7G(RGmz;I@& zT`mmPicOP0GcFKF4fN&4<{iWB=$oIw zs|Z=WXZ$55ljWT)^uCS{7`lEBiI zsCX5fJpK?x)Y%)AxL6buCa^vlDz*s_nO^X2!GB?=OL0@V;~G68EUfQH6&V)QP0_|U ze~ZtA=kTv|JC)+rKY=x9jHdP_UXKiC72}*)`r3e~;W#3aIK*wpAc$CFBd*tr(a3Il zd3ZrO{raDQ5nqKKG6RQk*XCqsMylnczi{vLwr zYR2QY^by@3i&sa4{WFdvPA#V{7T?vmT_e(Bt%r-4r@G85n(rlgQPM7Op@g#N2p7AM zf^2@`EwRim?ZWv-QJCJ`^kTx~D}1b8H#ykVAzE3FSI*aXV^p5U%W)TXSXuwNYe8jV zo+74Z$H;@ zaBy<1ZlC)f+exXuowVZ3==zJjehn&1`uI7In%5eKmPs1J+|ircmD>hss$OY?e-bLH z;8xDv@p?uFuP_nru>c7>OnwN@j+J0N2n7b#BR_vx;P#Gpi>5BJ*>6w$ue2(x|_%F2c!C(XlED zjM#sw>a}#UK{2-39)UGZ-tKSF=>^{2BV71aN*<{`#fk%WId!7$av zEQ6+g)^#uZuS)qFo#8h$Rd&@(_0lROqQO&-Km1dcQq=buY_L~P5gx**@VJ~~l5$C} z_fcSWO4Z4E;&KYDc|P1GMa9RQOz}0+n1NvLrhsWq658TY3u6j_bp-|)1vxIv-6Hh0 z2nG=lPWh`Z4nkR5hH52Um=!;@9BKU?#EMU^O6)61%HMsF7ZPrsUoM zumPg`kTHTDiSmFy>_6jt1270f)&BP4sztm&X2P-}5uT`4G z4WY%r9vY{g@ZkT7@VrG>5MNwYm6eiEQkBk_W41G|6?Nh?E&#N`dV0JV4gNx@cTA`0@7e(CNz0D zL-S0GE#$vik8A?&^uH!2|3_&jdUKjuSR5apFs#2ywejWFlb=)v8A9GTJF&YqqL3a1 zMR)q?c$ob0P|44nRE~SS2YNqzaNoXfT6gO5jGVM32hWLDOU%n&HTLK?i4ZRpL3iqE z|6OqiCg2P+HiKka54&MT-+fBa{)*rkj`uvGR<8C<$vGVLZN%;`dhQ(vnbP~`c!cB; z;TbU!D}+;{+oTyM^dV!9$H@L;&0S*PEiTgK)yvMu_P(~IPp}OpoD(^(Y1o$pTBdQg zm`aVMEC`hS0lV4i?B1rM%Ex55VO@c;iUIqjN6kz<31}LGjdrObzVVA#tz9rekmm5Ab+d@ zhLA1!rme5nKRkjQgZ;lxLX^!fji10!4If@Z(r?2Nwf_s@^x0|I>b&#cfufv2mgka| zzFFnea16i;>s>+MhDT;+jKu|8_wvfy1OuuzIdenev?;u)aZf2-kNqfwP-?vD07Lto zK6TD0_r&fk?KhzovOT~eh{f{7dPQpGUR}O~h!e>|0h`CTMrC!z`=2_VW7Buc zWF{4NwvE=Gw*AY4-_^CZWg-8VInx|7{$eAN{vWHPw*~{}CHM2}wGOA#vU$=LR%`)7 z6%7T+dGC?w*O-rO;kqoYw-S+1m`5xgV}J?F|62@Cf% z64FlEF*}*1;Y{y|Ui&H~ehU^Nm+tFd=$~jea@`67|4v!#U^{7u|1t(2br#;O{#xUc zwQZ10rg)zp#ykSCNDS2}J^bdPoigIs&c@Jz$x>x_RZi8&?c$oiG{-ZrmP+$e+oH(p zd8?x=^3v5&3BFSoM@F;|NX=JkF^bOyTz#g#?KIGF{FWoJ{UIb2&_u)McN7zw*k|$s z_J8G2V&J={XY=#(tV*+RH?%oI;fjr-BB5ELkk8LnCu=K?1}KgHf;rh+>d5%jm$=;& zg^5Gneu*g>#=)v1Q1jw%l~j`rz9L3S-Rzs!NX?>ohTYhh5q_-gtvYX_&C zSd@XMt6q?l0WOf;EZ@r62W%t)cc5TU9WY@o&qVr<;0fWyJ*@ z<2kCKSCO{CHlkFZI`vTI;blNJH>UNzNIfD7OBtf`lYGS2Aw`${`NOqGAsA)%Tu4PG znbrGXifh%}KR<#iZvSvML~lyWo@+cMWEQ0OgLBF3`WbB+n(|m;>kMlBMW#!&Xdrre zon-`3(^Sz_nu0y^P_zP0ECK-+ERy6kRGEVRE);^86e;II?@yiRXX!}{lNHU&=$~Bj zpo+3=EL0@c>_WeGX|9^O8J1E!0Ts-zkRXr#-)Xdn&QE2=3njDM{dT@lIh51?^ip9Au;Dv}w<$#VPBdqPdnBnjd`I1?vhuqY?AKx?onJfd z-`Hg|dL)V97U=zt?oN^>OLQrbtYDB%zZ|Pyt~ea-Dz_0bfP4ix?dL^QuFdFWZNTs- zC$hxfxNY7_m658KLjJBhds)sjp-VO#PwKkk>$k(XdG1+(UkHnSqmk8RIZcbn(hVPF zU-j;QdL%v?FsnBQ>3N(M+^-THj)E>rOJSqqzOn|Auc`?;`8z+4XVtROtF)9ubc9B8 z@;ZLT+s2OKhhhHEyt#ps3pnBk!?Kh;Zp2Mo#)iKUt$#OR9+b2?)4)IWN4FOudKO*T z{8tR3y%|V+o1*_@YmQ{$y-helQGVO8D#gS=W0HvnA~)Dw?QHA5fV}#NKxBG0FXvd9 zLR1x{XqcF+c53}>y8qB}qbFz4Mf@YJ)csFc5~WQgA820;(ZBxZ$+OFs_|&_Iu5Oao zo3~#xxSv3vZLWH^eigok=p@*9U9e-MqhiakbG&*JJmCKi8&+y^ws+e0Xekbl91#@! zxO$oOFCki27S(u{osB(8J1txy0bF z9=?v=pJPn`{bJWlgUx>3Xuc3~>ltuG@3nRhe2K{taJ=mDmpie9I_a``O~0HvVd3iWy-4}e3@PGiJ zz)BNUXWLqgBO*xH3bte2Pij&i0&W|i@R}1hP|JOZN5f`0+ z<{U}HptsJpRohnP%SW9K3GTYeJM8!l(ilFk4r(JA`hZxttoq~g--&M-7;Kc81sQn1>sC~8)fx!G5!DW?`)^MNC)4J-3`C-#QEn>@}f zohfLaO`TO)x17tx1o?h&v3q*pyL@ml%DWKr*_II>8@vbc-#xxf36(KEkmlBzjFv)0 zO*#or|0Q@oiRm(cfto>0O)>eM?nf|BVHaQE2MKh8%}cl>U=bkn2y0QSM#AcfWoZiv zpipbx;S#@%(4FZ88SIDo95b4{mvN89viSW=`8mU|WMh&WR9NF977~I-9uAT+|A@>UWvy^nX}Ogc)C+p$S@C6{-qzgos&N^$@)ZpN ze#QTCS5!Cq{ObxKqYzvpeH>L#Dho)PKYwj$S_v`u!%Zrz189%!XVBaQSjxpIyzwMs7)BRIA{l>&{%ACu&t$n=Im{8oL zcJyfQ+x6+>pu=+GByU%IOoJKJ4#xLUqJDXRl=B@I+gM<>ZiZI;4-OUwTf{d+>-ju{ z($90}&kzWR=T>jjP4O_XU&8*20_*+yzY$}=Jew>wDQMV4?zZ6`#eN;;=&#bVWnf^U zv)Ubyk)i+3`6|fF#Bs}j@()(JAtZ-@ikkM?lkY%NN2y0qq(ZO^x^^nq@gN@`zV3vS z;6umNf!RYtE~qjA$ATt|Q>PPKP&{jl#s zkP~m^;`r#Hm$UnC(r?QchB)Hw*84laGLWz1IY82k!&67iOI%U$`fMJ~xF;X@WO{=o z%t@EeYdR9+X2eNOR@(he_5Dc)?tCK~$uE&VI2=z;C%S502cvBZ$#BJ|^Rv!AubRr* ztlR?E6&33B$>YMBig_qWBO?FvwdO)bF&d}@peF){m6#OdFc>~^u%>dr(5R2Vgqbrk zub=q6DX>zes)b!F!oM%bPxIeQ*GBaZMZQkWF`OW>m+$7GpGdYHHHEu`6$TUm6)0G4 zGQasFakT?yM*o_}qkrWELDxoiSxa)BK=6JRPjmD@dm>9uLjf5D zFF7q6rn9cq!S{L~i682&$@5Lb<@4ZL=GtbH-s)hR(R$s->(wx;Xy2)FkRdAjrn_)E7-U3&84J?lh(TCX!r=pUQ2YW73l~sl1KC zv*Lg^xt{*ojq|PCIZt|8vVh0f6-vTDF&TyK^DSL2B$YJ{RfQtB!a~?#Q&Wsy#4tKL zv9*=(Oj)h^UMN912bStXVYPg$1{bN5Nb_3!ZLQs1&|f?#G&#njectmh!P~NFWr1@P z#1qMnsa=P?%Gk;3h2e#{e9u1YIQkdxtk`Aqz}uA09%jvq$-(f()(A6sD%kzIit$L= z#@dDSUNrvUcUK3Hv207|4tsUe29~~*9%Nap;CeJ``Au0iQR6BDJgCTxS!_~zOQ_g9 z!6wg0dP9RNBmQl8r9U(it9u5zAnjx7xgMx-ONTYj35_WTE&cKXZ-W!5vAU_RTL=6= z43h}upv62UhZs2B(m~Had2wY&EHf>0lq`Zbv!t(~;=JD9m-?ca&%oPLZ%lhF{Vs`? zc0-%;J%peF@Ur!819BX>E`xh8mIt0nQrs0pgq4z6q$3( zp?c56?0qgMX2aF4n``Y|OMbtcg|3MGk;!X~6S@5h4~zxerA-u$)Xn7~9i=2okwO)P zL7A?7yP}g=Z(A;meN;cfUA%(7^|8H-zah^!%g{=_u>+$HxZG^q#dlTPnaY z_aw;Z|G`F8>XwJv%O< zip29$xkq1mp#t+eU2gP4H4(!4qF?jtyQkUFG5=RXbOX-7fPS04og7py!edaS5OXey zAH)8ju_A2qZ-QtBeLTO#0bftg(<^MMRss?%eMzd1y# zz-6GAY9Biey$xfWY{%Y(C4XAo#vN~Y0Zn8?qHR>(&kctmFQbM9R30|yWmsyBUm~Fb zMB`9AJ;Sj6jAlEaK(X(BcIoN5W3}iUHF_?{3YZ)>#Pn-lvGIfP>p4y}H)15-e5-!8vk2~)msrd%QiM0tfqQ3$ z#zM-C@hRyqz2ASS$T?_qDv;*XxK#X6B*QZ{I82>8DobRaWjZsuxYDcBD4pU3AIk29 zVlM<>FBxfmM>T05rGPNTr`f?_(WFs)Gwy|x!tSs9{-+}Z{&(ya1}Zu#4W=s*{OTW` zZs!{nt1;^M8&)e782}R#0APS*S(#UP0D+3QS#$6~dith!$tl23j!>t2HxMvzOdz4y zXbfNQ2pN?qPT@keh!kCh3iNmzCKN`Gx>r8 z+0SoeT%5Yrws(->sQ(&r^$7%7VP&DpvYN~%*4UG70KKhlScH%)5L{18Jb?yZnH-TNWFGH>biqoI(g(RcBT+B_-UKKMN8WOF|g}G`#=! zpzJ znlJ1}W{008U~j`f$X8YX;xz5&V|TrX%s?_7lLcIrpF3s$v#DI)jDm{)DD5P4_qO0B zr_17g9zSa@K1KsW)cz2#E~`zHpsp5g{iR27QEgUg217(D7l#}fX!!t)k6VH z46W;DABD6-PJ(ZR9gmm#x_syQ?WmHk1L(OEn2&_eMWCgw=j(oLK;36CRjDW~@?EjQ zpsV|F0VIrg+niX8#^$^pugFT#+44%qE#SD*gWbmX*$TMbOp3`y#s6YppF~Tl1jcs)x3I+r&%9v2_U=nBlNd6yVXDDi!5cU6w>$tb z=NQ@!IDiA$Y|F}4rxqRp?W>C=>3>?%+u1KVHGQC!3MT4&j2=cd{sSs%%M%M%;E1{# z`yKq6DippMV_&_Yst<$o?ZNdLj1yQzK<9?$E>uE6CI%TsT&|W)2>T}@YOysE7#Z(S z?06sLI+CV0u^~Rt>e5!_m$%-J<&|z-SxZa=2&%SN6`1|xt1(H)QRohMay{Ryj|bP1 zwi{nU#r>^;j+{A7gGU#AM_+34#}4iH zQ)k0ZWaGze}nPu%*Flzo2S{Q>D!mjxZ>W_rJrGuTzU^hJ()>#%g;> zH5>G*rd}Y!`b0b+#=Tz*7xS}0=LCOXkv}Bp7c;(%sQ;tT>YPdXlo$8;GB~MW&v-N87&f?;*qC zjxvdMNf`%yOn^$ug47C3Zu(L*cwGOb-Q)~U=ISe_Scn+V0O_x}gJIHs18G!0K@)NC zX)P*rS>c49hwhA{I&PCm4bVE@sLfWLc7!3M{GsrVuj(C{@;9 z3h|MyZorEOn>$|~{@tcD6PA!spw7^8P0MNY0)ma$?`xcFD03sPk-XP$gX;cM7`txt z{CGOy>Q9A+kt1F4*;4cBOw77uR2YnvF|l9+zmoOdGAfJyq@$X+Bu(Z0{jX>Z)GOeq$2Yqn+tfsGm58bHV zk>`~Idyw7$?RRY%{~;#F+|P9^PLX|5F@JJ_!Tl@c;qTItd=SutPG5qj%dgpxEFhL| zhb44(+^X*c$t@&c)Wp@{A0mG1h7cTtumAB71iN0_L`+H6fHcfh43S9UH?947L&!z@ zk_&kw|3*dWXR5Nj4I%T7$8U!4nqF^+7(shb>=9C-Bhoxxv|q5m^K`IE_>lP*Ee{9 zy@|BJNB>ckQed6p$B%KY;cWJbaz!bjS%Y{CR0x0uLUITnGl)8ATfoG*_=rfD&NEQ&wBzMhn10M;D}pmGcnFh$@$UIO(P@HLMa_lr}82# zO~F!5py)gWOa2QCU7H37KPPl2XStD33+T=e5uv+1ZO;d6p`Ydy`vr_=a^d;G+0h%yf|Xz z{d3x{?(_MY6+mQ#IWm2~en-j+{n%41SL`_YOY$u7-<$SR64C38IfQuFB9#xZE|9i^ zbdQuzR?&WjhhR(pVaisPr_Nrv@qF-X* z>e=UN1anpXyE^pu7ES%y_*7h(BchL+hx+=g-fM{z2|4C2uRUPFU#lci0E6i|99Y=> z>x^d0?Yjfx2TB6{uSM!kLXpV0DC4x$$1^3oC}jn*C5Sj$ z>2V@qHhOXle^V+Y(7WQ}VU}s<6$09e9CIsaOn%BpTQ1kqSMnvMn7&F4s5_ZjL(XTx z_3CDjSn!ASZlkAA)yM|dWotZJfk9qje(j+V@zHa$t$#|vPNxX~bLO&{l6b2#rlrai z{g$?fJ>34oxt&MMUu>83nFbzyxJ$>yn1V2E)L3fMN%nO?WQpD&mR3Ttd3^gW^c#`B zrARV?7YLG^l{pI1Q<~QlmygI;k1D*A>O=*Lqv0EzlNc+5x-X4oAez~9XFfJZB5H$> zGU^Iklfb@Nfl=uGYm{Sq=9x!J)gXBloH0znY;>j(FuMX-=U(paWhWiljtN za*xrAPGgtS)?YjiDrikMvodlD7*tm*p3aLSYF<7~iEu)dFitQ#Z%Z2p7CSjQJ;4U3 z_`c~0N$(fiqmbHaj_mCDqCE&WSlr8gG=gA?R0DwE^pc+j6@**CK@_2I%KkX2?iQNlGkE__j+8z8I>f!}B_k3cfD7qM}x)dy26fyCq45*51=c!t51EDWBb?ke**6u~j%Jr?>s@ zGkFPrnP4CM{omUTu9~V!kP69*)RdCT_2W!Qu9L9J%ArePwN~V(X5x4UhI6fj~HGvF6LU)=AvtF+0c_b5Y2T%7R8$s72R zDXyfY`@mJ12aFJJ6lV&%#;ln#fL7AXk6oEF{ta^e7J;PK${5zzhn%~vh>?GNKYlu} z+?T|O5Ql=aD|H9X)Tc1~L**K!RhMfmFKYy=!%1v@#F3>nF6USbB%m~}m%it}Huig2 ztOdz#EeI)28nh8d=p_{|n31mGjU^W5qeMcO9wc-CwNfFI7+c{7V)) ztE>!Z8Joalm|4<$A~eN$TAjVtbCdQ){uAoEb)tnZZZ0DyWJ;xm#Z& z1jX3lwuycjFZy)NvfG>%F zJSWbRToog+%=0>Pykb*>KfbXn^=eIo%Uh{KoWpuHzIXfYif{6ugHZILBUh`TDCHmP zeB(XiT}jj~4V#}Bp%D?Hlpp__K}AHQlEtF#uY&ns{8&Wy@&XI=RYK}F-4c%of})N} zVPWN%2fGlyG;*XRb|s5GGEDfWM+C)?)Yio$tyu)T=Vz?@aj z4RHq&e`tJU+p3gR4?(qB%TJHM2>Sj-d#L@Roa8+TTe?OWvAk)Cc10!P0y(V4#o*0> zBOff^YRZ?2&^0WGnY3A@5e@@u-09mY!^$zp!8~aiH(h*Ms7?3R=B$jkh4_<^^!sfXj{%JQdL+79b`(H#}`1m42 zOj8h-hq;2vh!#g~+mavqWq@HpCK1sPnV?F)TP3Y98+z14qg`~YZ*rWzt7&_n%PHWQ zzh0Yt9KEiy_}bRWU{`ZfU~w0?PwM*4h==dQQa{hmR%dk<0HhYugYVAIwX`g^&_UpI zA6}yyN(MD0P6w~i{X>!jxY0?WphhVNc7_y3Xg1|ph@sRuDv1B{5dQDi4F)Ds734Um zW9P=9p0JIKpu@1zBM*vVJ`GY+RHYx9l!(d|^AAC^FgwjHo*0*Sp~anowFuTXD*Uy0 zU-c5ZZ^YItGksISy9cN2L~H%-_%EH}-xRD{5xn?x*^vpcX0GU0g@WQj+5m@SkzrPw za45V2O+n!P(elMTFs+fZ7f>>qvTW>S!_?EVSa8J(~Q4$NR4B%SHou>Iy^-E%QR@|^i?pJK; zGFk0rlP1JpSQjl+-OWFRX#Wpn`!CYwC+31XB_pAaIsG+|nu&m$jGb7jnIM4%kjOX+ z5HiB~MhbBQRLMK|Q)Z2?3SQDWBt{VQFSt2{%JMOq@B5^{yKVu=CbEuKrqH<47+r~G zR<6?krp1G{=ODA)jh|AWc~wijZHCBY(vnz3*6)})*g$ASV>?0Kq7$#NM>mojJ}cwT zbKd>=VCx1X;`v_4uw^31A_wE?CuW?E3xY1AkBbeNOyp9DL{Thgffn()iC zO1@-~E%LY0Ce#Q4GIF=DjG6gfO5y~qlO{zG2~%N<(`~;9yh2#UX^V>*Q()r&IFIj$ z_4nzJVR`HWb~+_&(+ygR81eND`4rdqE&_`qP=)5FrjxTgu;yuJ*>x6&RJMB5P|41yF%260+kXu!u>4SLwgp zrC@z;s_tz*2M=z?2edNFrN{Fe`BZkzCivw?!O?Uq*j~ygmQs5vKk(U~59cxRW9C{T zAJQE!p{(j-hgNgq7DG~SW^A_0?N(WzuU8gl@Nhem48CogHVYbewkZPW9}vGm9sX3( zbRec0P`f{q*T4^l%@(5%6&d{3nYP!05_ut5fRhjq&`tEj*V+9%p6RW!D8xuk48#0O zppcxxnzeOOR9l{tpBkI_7sfj}1HYMqzw60y5%GJH@0&gj+MiC^_HQtPbj#HM>LJ;N zY!&g4#dG#zy{Qe7pCHaw<3M^vyZ{lQ^Sa)?Ed~>I4*$D+&#dOJuS;bQ8Q&)I`)AZs zIXp4l`R7kYgrJI|qUZLr-|MD#h%%!dFmgOjAY|f4EtE>M41i4f%VC~sC@6wfr8d97 z{U%`{ZFF3?e>Bc|-ug!I@-Q?$d*13oCPU}`8%0n=8CALaeLJIMC1PLRbCx7X8cw8i zMUzzF+nc$~+=-|*(k7408mG1G4cS(`VedGetJ4PLY8xkBP8D~n zsIqpXB$NH@O+BOi`mK-i>F6y5eUz9d2ZyEE{)<=Q)gxuVSL0BEzkVlykG!$qRA79X zwf3`~t8I@R8+spC$ZHkWN!hO^0`?=WgC#`!!<37y50_GWeM@JdqB^C=+9TbS7TyzSA$X;XDL~t6ZXOcg| z+RqF-k+l7)&8ZF)IMc4vF%3?xmJ_$aQDS?!Q|}6li+bxRThxC~^nlFK*^1cxs`ULO z_Ze9op2b%TBhpPW&dzh-sfeuSX_!_LpiDQJLwM)V4ozT z#2}`!tZX%X;2-gc0~OOy=x~4(*Fq0l;iu21INMma30@gsH%8+B<+C zxYXVT%o6Q&WhG?s+8+DzhMh~sae1>!iA}>WX6PpGa>|quh@)_@sHth`SL?hMBgXR? zDH&6za~(x(J7(^QRxv;o$pXO7lyN$kk@ZfKps4q6mH0s=&d-=_DR#k$+U-7dLCU=h zKbzFWlv?bUlSf?oXvt79x86sayGJ}#+gu#_IYtKCzaKkT?7O|3)#nEykqf0(KGb7S z|4=N2joLVo%tK=LJ{TToZk$L0O=Q21g&N=?#td4MzU7swmOT6h^#ADq_X6vc%livB zkNJB1G%Ll*nr|{*jzz7*z{RM)eRdOG>aR{xsMi+HoK5qByrLv5T=_YDQFZUZ=Ykx) zc3;;+7?1q2sz#&F0|`ufT|u`_!}A|1gOB)&Ay*n;era@G)E8%y5Z+_Xi#pE>dWO8#nnLYwd9- z5ET$+6@xNCBl`kf*I&%q|0z%rw+`0&EX~4D^YkT=)EM4}S8lL{{WOUS3xNAXSy}o^ zJ(Za5V&kMfTdEku*p#z(K)Sv_n34djgh z)VlIgQRW;dg+|u^LT5H-AVZ<|3$l6-3#g0}CPo;&!^8}|`4@7F(mpn-=x3_vf7EJN z09Ab{KwJLteHIE2REMm11d+IGafET9OF;%>A_|!CKVLt!#$;*p+3Kv7 zG`FQL$HiB5`^}CTe&46RC6Tq|I* zimJ#-nj<1cUUV}AUVJ^@uKV|vXI19s!qqu0HXmm8t0Wq7lxrj+Ig%!+n^KuQpSW0i z95qAyEBpTbuvd@K#{9@&cA7~P9OHFk)~&ZLSc?#L52Lvj&C(nF?Ij-i|55dwQB8$Q zv;qQ36{U$38z5apx+J0k0s_)|m)=A=0RkdjKzb+i-g`%S@4fdH2%!cDBzfn)d*6?D ze&i2pWt|n~n{Q^%-g_z{$6xeBSXoW{al;oDu)e-c2(qx%W7_Cv1L zZWPzkgb>V^3`>e1!QD~mZHwVZu(em}m+4GBu0YLIbl8)J(3RWc?<)&AlzOXQlfbEN zmD@0{%eH3kCtIgOH=W@sf$s+5P7Cr2OU3Gk7bcGqM|)$N2AB72C?G3nQ`gpJPxQqm zN`<(_>F&u+E#smq`b6Nlugs!4%-9nyWcT6L9fRot1HvLlL)@iOWoU|!hcKXQ_tI_ z2{-P=QAUp^`xGEFjUqC!+M>rxagh$pIJ&6m%re)MB4UH8jy)@Fh918k!v=It>g`6z z%0MSi60aF0QsRIaakCw6s{ohRbR?J@j-;t+K_Q+IbUx>3;8F$qbIcJ(@sDLV(b#!v zHsrMO>Raj7#4#?M+V%sVE;>O?5IrfbZ#vEmcFL1}v|vT{ zswadZ?6uWIdfYB)mrvkukLt9VV^yVzc7;6X*CQ zlDGG44VQi|iSr`Wi14TFCxkg)e)VNfsdk+^4V(Nf!+lO<4CtQ&!Wc-PmOTSd<_9EF z(_A$nn(oPXGNA1U2p%YJj!OweR`F}+KcY@t=3`0`bO=kIn1;{Z^rv^}s2 zsGfSq93kWoz$#t4M~lJIudN@}ddyVPQNqYstX;4xYU3IQuJ+7EAUMFMxGdEwS*kR% zO3btG60Ry^1`X!%EVP*E*r*mSsbR1@W3!#THXHO^0O7ZQE^+pY3;S}P@PAS03bUC|n<+}q*5)EaWbtK=uA0W^Ca0-&1*+eL=_I=e*9Wm< zTcCVpd`CLFIAlkpN(*kU&1q44<2vAlSU^HD#`W;lAold* zLh3bMclbU6j9;}XG0=yTy25Th*ULH9q7&2bu+46JTbb)B{{pX6ewSiAu7n|n+V$9h zaelxjO|RKm;KXx1F4l2|2jzINQ1zo_Gg+}EK>d;Z?rDaKoYYqWnC$fpLl>1gNbn)kKM`-nwMy8?e4U=o=CATDvAf5N2lqlE&^BgTC6oR?ch!Q=r10w$c0Q^ zdI`}9m5I!c9r6%o!pk-E-iGZYv)(_iJpE-K{8RVa9ya+{wHU8fw+H)vtwdX{Ch1bABL`my&{FYWiH*{KctDtLVrAHM05frnb|JT59LjSK3Y@Gn-{$oG< z;9yb_M*#gP@GfYgg>k9Nz;daB{?9uXgWH?PQOI%Pb(=p^ldHP2y42Ebw=dVf`QZ7- ziB=4{QX9?tPaePQW=p4t_;p=874s%z9nhs_u57Y?S|(?hjvx>HoTN~NE#%K^^N=Fy zcQ^?mto(F8@(v!J@yqP|XVitN(JMS5ZQ7W`g@L<^yb~q8%2mN(A@fysy{H#W(%~$a zHFRoV-I4jDwvDJ>5z;F-@_Zc6({rh1L`x4YP#zJAp(|}f4@o-G%BLN`*T^RJ_V&+N z-X8C?<%E6$7{*IXdf5k5G8nGE>opglC4sK{@PnMZT)AhACAX}r+Hw!k!G)=-<)qp>Q{QKUI-@UF*5yFg? z5ObO`pCg*;LW!@)-aUz;hFRQf3AkBIm18G(inwxy2K&h|%w%@qx}tH^bWqP;s#4L} zpV&V&lkslCjg@zatM<;ZS-2KCq3+ew%TrdnkNB<0TH*YblW+emmMsuLgzF0n92b*Z z?j4^VEaVaY-2%K)ygaXKRYvWu8{F|gv5xmpxTEct#}V{XLMgA!2Tl-y)fZ0E3Jk6m zh!NM1((bz7hsI8RZC?WwU^J~loBQbmVDIqz{J!wbmd9v2<~`H$hhW>UVs|}mocFn2 zRj8EN0iL@2gseN;#Awfhr32T$|Biy?KYnGrQW0grEH#TC62eW!%CWy2R21yM$^!BL zCFCmNTOC!LI=AKR~#;kImjG4M6|Co;-rJxu0E0;*D3o>m5$}{PKp^M(l&8 z;p;D}#j*VnW!T~gTi;)DK{!f#_ICJ{#|3%MNRpGwtiju)H)IP69SRNwm1lt2{cBlx zu#wZH-ycy1D?5#CI7{MjvBdcceG0o}^u_VjR@df<%@H`Y#w9Y%S0CU_>1%0)GIgso z-hDt9p!q`UZ74*f-UYGhxIZGmUdP1797|1yNVseR#!U(U$>jVz7!q$oc7FOOKCt80 z^Vhq*uN44lSaJkF`>U))OOWuAMzc(i%!V|e2F=A0lq<(75d+}|@I;!mmh z_dc_#VEzNEM^f?(EzooPH$m#3y(#U!PjKfFp}AOmuu|TX66f(u|0Qc27j2#(i0xsE ze`?;r8onRhs)cHd>ccmWcm_iaK%zUl+cmfnzfep(ZHdm07-2eOyhqABeRA(EN6{-f zIvP38x>+AkJd2+B{mVnYgG>Rr_UY!;{Cn+e0?I#PVqQ5J-98_i86O$wJOAlIiD9-8 zvDfw)73xGwMcA$IV_K?evuVaQf=I&h%`Kj?0-F9}iTREC-*av}OtunES)9?Y`9muR zq_A)7x27^XI$Tmk?~@=0 z=nf#LXGZ0KGl6K|HruT}9P7ErGWqb%9hezSTzUYvQ%ulza?w)j3Xt4aBfInk7THmS3nF`mD{f7i z6YH{cB=oVaEI7bfQ$Wyihnr05@&6mBLCOuDURC{Xq$UvsnY+Wc8m}I4X&_ET^U%oa zg5uU!WvE{XvC~`dyD}6q7(TifJr;)Y-%ToDTm#ard+#6c`q0<6%^$V1>7d z+IV3SX^lZ96Y6&#^oPUF&IdPsz(b5hmkDIMN=gGn1W{v)bVKC_5BZ_-=mIG&07D;JtMMI$QK!rRaFFrAt{H9$9dEK2L~uy zas<=u6kN&9MFG$!GzN%D2dgOSKF|2R?xiF_MP=}dOj5GDD^u{!Q~nRazVDA^-Drqb z(H;ksb}c^-JrjO#ysKFEScTg@!;^R}dhE7c1_*mL*19)wsm;gkn-FsOuro#bfhm2X zFg>s+ig9VS|L9TQasTj5XkF=y(AzzceAorlHK!)C{I3O@5_u<))ctV>Ws3+>iKQlQ zCwx}X#rZQ?*|b%UdW%6$uTKQWU1+q|v8{u{$pS|xaRPZ_on8NLk!Yb|{R_Y|d7(B4 z{z9*oRra~Q$I_SiFiktz0epoVHZ~2eQMYct2V5CiT+yjG<{DA2?tWBsV{Q*H>J9e1 zC-X(-%fqTCpV2#Fqf8Z|ju(UK5@-`jzSxOxDKVxvf})P~AB8g^=MOBuh<&{Yv7Ad; z8=;S$d8>W%qEKCPvLz}>mCJRyLV*00Z8MRn zbyJ#KL8T<>(Fiz$*c^dal_?(E$E8LRHU{($n)OP3hRlf(_yLITuASzN#hI^xOM9X{K%cCl%%dd@p$g>Kwa}zp zs=YyTxG*81JkRiL^ZOqrmlFWFl1ChU399#w|4aBQ5P+Nkc}TVT8WbW3kjZsoyG?>A zLbuMYN<^!@a7%Hl{YH0NI~;Cz61lo1C1cI4JwfYZ?GCM>Rv#+HTyr3+C>Wqs06k+O13)^ zU-0xcK(Wv7ov-g(R~Twf(hegG+SpeJ!!Wl4Bken#rpaPE{OtW3K5PUDxmJ4?!MOW{ z&u$Lh7)AP&|7V0fNE?#MjiY7K_VYZ#K(ZeC8F%>F&JFF!i}McbCM~J? zpF~R~VE)U*0L*{yE9;9ok(?t<%rvL$m!3XjTbb=Hddi2}@Qv2mPs9vkuS{m)pDqiL)udw)Qt7QE{> z!&k^+L-DL-xy5}_bHBiFmP0Wo_$%zd)jsXx{e6I)B{x$RbdTJ%{Lvw5_{*T1(;4&=jwrZM1V6P{`mNzasLo{!vL`dj^p{sv6B9dyeItG7 z^IOD3s`d4IZy>w$aqLV?272CrJbJnS_Z~ez4}IfnX~IAPBA$g>G(ZmCAbWmlQ0Yh> zF*-Or@L0r@@#OtmVX|z4dgoXSml%idH(-8c=&(B^aQy7ZHy|AO`pc~jbA-7wIwbb> z&lX`?^3;#0-4)j4peJA{EDNT4`x&$)0xZT1t_R4jT-Pcdb5DCqB@)4j&+M|t^aHb&n}y6gD6)Z2gkx&>Ok zWR$JSW+A#BVj$u*4xb=DzFjgf2bfbmid6{>-|e)27EVe_D~SVkt+Pi<`6XG1{f!D& zjDphfZ$F*O+`OC!M(}_qyes=Edy*IznZwXDYxm-Y6C{YG1ZE^X;a?TLhLD9WHQ5DT zqylW9jUQjaG1WQ@IY)Eqn}vA3L!(^F%a%H|pj1}f-y;vx@Lpx*mv>QccI6CIxqb7; zdqIRJv*Kpa^s4>1wk5(AoDi8LI0fuw9(3rx-%l5j_E6*3nol~kmMNvdxINo_vOQn? zxiB}sc-GY7&-FIRCmI*@V+SMG2LRG>SIE9F<>2%vczBAnYS}+B91OS*w_$V+)8>Ox zYr8q^<=y261*lZnxWpZ&sLuf1&v(=B?jjA_+xOx^U|^@rr(kGTwu7#7X;aHtf2y?H z@63DJm)L^gt?sJ#jJoYNF#W}ng}Qxl`Un!oNuhip=Y7Vk9`cPWW6=9Lud@%|be!eM zD+T&8mrrQ&wsK-Y(6z3(O~|DlT8#CL$Xnstj`rx}2*k2$#kt}>g+-<_(9`I*nqvwH zl6@E0K6l4S8$`xnfwcA{0x|Ek&iB{x`?ptA{}`%;xL;o#mbS6+rP_kbe<~RnseTbo zr$3niXy@?={W`0**SJ05=eT3!Gnz^1@9{a(SA^nsCdlGC&Xe<@RCQls)4n`5$xIlj z;ioL&(&o82Aek6xPSG866tGzMf(AWH$wV{MSw23b(^S^gEm^_brsC7svVq?>d$#T% zj|8kcNuWY}?%~gWBMlZ@t`S)mTn&hl=5Edz&uD!}P;3MXU@QW7K^+L$#(dc0dnsYG zzgitDvsd?TV5P5Wg$EoAX7L=^=%V zQ3F$?KsI3E@;irpnJ7F4Nw3Qdt~|F1fPWHN?PtujVea|jm7mGZJxA?K|NT5$mV!%M z2xc0o7jv`Lqc`y&i=IfpCk_*P+AM89ewt48)&hg~mn+^j_Z->`{-?4vB zM}K+ag@ej30=az%WbVC1|BW5Y4FZ+FnUT4O$-dJWaKX~pmdHQ%yiu9@W1lY{k%&*} zz;aI03@{xrKPfKKY#**X1`Yk!dC)E1=(fBMkCw;8C?=2!-lQBq5xoF^+E7n?%4 zOo}u@u&Zq5Gi(gp5G$50LrhJ{57w@xKU@kM0E4b**LfQ?wb);`_-qFpDF0SqrTu(d z?IlbGmOty+eD`-3K&I}Ew>MY2mZWv@RO?;V^Zcqk`yqHmZ4VEfM6RT)j$KDcs}alW zP>u_XAs5;%F;yDhkBAc!1(jyo{%&{Xm4SrSjeY}isn;GmTdtI8%3r<(_e-z_DyCi? z!fl^#sSck8>edtW#~MZd$JFV(wj$mgn@J{i=lNM+5X=1+r&gH{82@i21$@-}7R*Ip zmb@~pFUc6G0=~W;9337U>4Q%-E#4cf05rPU!nhMN_l5?M#QEHoMhe(FRCkGV(B{2+ zU~y`7@ ze6=j*rCN+k3`)A1pOqS7<#t{r5RlLxTu(fAQ;|x1bXoY#V|f3 zZFWzZ`Dci}w-LA5IU%0JGe#1DDiO}Y!lASYb!Vf`y+?Wr&iu}vw$duWfWAULDCDf# zHMb{i%J!rH@qqF3fXv`dz%?$2JT%+H8(>qt|GDrRFdO`yV>;C={qdP_cDnLC3VZ|< zIZ;|v5FN(EdbcF0c`?29{&)q5f|q(b;v=xh_tq)h%AZcIokA%)83g8nCJqpL|9hze z+TQJK7a7SX8Nbg17XI``%@XWM;L`n0l7hlXSZ28pY$~RZpjA0CC9AkcGp||`Ul}_^ z?LgO=NTnFUmPze@6%fa=hv6vyIhYyLP9g~UoUemA(>S=~$b!-|p@%!0Bzpyi7wahE zt0P(bR-Zq^Y5+V?fM~1#a>e}jLgd{iMbau7JhJj%IA4k7CU+=lj2aOvfrbCN!Kf^x z)AJNVDQqoCy2kU}`JH)&%fd^8MoxXh{v(+G|DHRB5S&&MFVn%aP`03sJX47sfk#^- z=3cj@5p9E(2ura6IipZiR#%4L?o6sEpoE1wUVQv)_P~V_RIfEnVx|!wZ$V+ zdx8FlXqjTKlI3^MgJ?83fhmPOqj`u_n?BOWp~|Vdom& zKb&G}@)Li_t`xrT=!^S7BW2Sb1ZlUw_lqmQ;mf34Yvq@v-h`*9cO!+KrtP|f%ywT( z15||S;(4HKCIZIAg)DDFeN1u$wR!8b+$A)w9>a1E&h3vU~TaC>z>)v|b-Z zRjMQ&(sbjq$s}me7c5o&@PAE;5OsdFL3eX=6`7m&%88&l)z_BpJWi^gN)+Aa_Jd&&?0Ol(l-Ua@m>1AwvO4ytl5 zhf>n~>svZ5TEEH>8^Ta8MUcW@vJ~AjA+2Kii?(r-Tvq60R4}z zw4uFY!hhc&Kk)>AA3Pw`@q5#_YtQV7}tl zAHuNFG9yUXVy)He@cD`VlWs}>dM8=K9~#Q+HevBjGo|8P-_eG@`O4rlkI)R92L0!m zfIBDXxko~dyVb{^gqYYOJ%A_XHze)liRR>e-k4-#0eVCjs9H_Sv|v?a`SSPYfdPXQ za`row7j2pJV~5&rBn}HTzP)1;9uMO=(Mc?OzHnBg>;CabwZXW<-n8Y^G@dfjFN)JQ zOYjqexJwlHC7YzasH*ebN%6Jldso4a?t593viqyt(IkE+<9HB2kYwkLv3goZ0k#h{ z0?}`gI!(3}vWj>iC+wF+W$bxEzgJW-a-}OSwajH$vlG?^I!mtPCxp*FL#vq9?bqV| zE+~{W5$byL?TC{q{wMBUD+}v>aX9{h)j}SmN|5IW z)}*cZ&8LbJeb4mqt19|qP&^TJ{xXIBP^-+ktFxQoBhA!FosL?|GSr+DfT%mT@~~! z7bfa2k0k~QIm^qc<`02v;R;{Iw09>vM2-igkp$V7rnyiWkTKZLWPZ{S(Vv|fXBM1q zt}pLHPYh@N`e>PD^o}jgfkcAot@6YXtYISC-(l3~C)_?B+wv8H!ET+FT=mg+v5*Ka z{aFl3`jZg+`57~>Uz~@rC#%+5YSY0fT6VTiKgRA0IzAJo?++|7JlE*hkK=MljdLW^ z2=WMriF4!$Be54^$IsrTUt-^6wjDns{nDDAXkfFj$O=F-&X77X`Zx97n*oNJ&4x>V z5`ywglQkmJ-UIs7i}edg84C#T5xUbq#NDGklxDop;`sC91bUw9QyVcf__{DtSyY`L zFab=8>Dc)}TdE^y7Shm|8!$-RYa&MZh>9Ou=cMJ9^5o&AIn~u7|{fP71Z#Qv7R&(rN$dg6OvDjJHYfoJbgSw|} z|1QqrO%^Gs-ps11#?aYnTe9_uOrwECQN2&i+kZfNPY3{9e2Tv~9+qr=vnT1T-IK{j$)?Ug4B~N;whPqm~pU|5Tw}Q<>nspU+Gx|G~vzE}~pB->K5D zs?%vNft&h_fp+*pI$!0Cu<)D4NcTfZG?_(yb}^v!{hIOKgu8HOlg4ei0um2;K}2-p zO?i5@8+-hnDgr=0YLRB}&BJ|5K|q zr!>RPdA+f=6g9F*j1_Y~IrlY@PZE;Pq=kI+=|PG(e#y#FfIuWKBV}( ziw!PJg>IB2#Db0UBcu5xZu2&yx&DrQTfA$@1=%^S&h;#W=>WUpap%2mg`-#7x*vAl z<-vP{Y6rr;>y@13wQFF`<}O^{?0(g3dLxKitYdxuYHMSB(*OFp2xX(~XgFBP`sDA+ z|M@ib;k}-^-Z^4Aq`SIF2bq{D0N@xYjydWfOmmt8u<4^0EMD#Esy8~z1)!{A1%m?j zTZ`Y?A0)i7O@X6iPXzWvYz*ssy`HxQekSyneQ&2ApSqZ?6`fn6lkYIy%%p2m%sd?n zI0u_z$d8ZjV^A%F|5je)X}#>}lEmJVk^d5v-$q0Z7kX@12L?RJ$^`{qeWH4 zwVb8A*Cr-cxSMa;{`HPdj*~C_oNiE|8_^bV&S>%@y;70Z$V2|cQ>QDfyDkyG8rV4r zt=|KFQf40|YFn1JdFrSB3?Z_>Vru-1Aj9^6vgfi?c#?%r=eh%0(w}-i&wQ%(*@GBw zzeOhS?}u0SGcH#kl{bjx?eM{E)Xz~Ea29GdmtFzhVy3QJiagY(hmN7CW$_1a@S`Twc3PtWcB@%bkN=AxvWRU7hHMDgsDa5D#B+#hoMt>j5o@)xkY*E4@$q6>?Tar) z0fqV=!>xZ@Wa3>u(zK&LwfvT^#=g=$&EZgh+h+el?mahf>E$r?-&QChRs)6Xq^5dy zWKcRfF$6kB5%67KiKaQFXcp&;-m0G}FS1^`*{{?$xU7ee%W1@x&}-$Wf5illPc=d> zCSn)sip47M@d>7lg0*j@FIg5IwK=ZG%v)Mo>XObaZGKnzv2)e$ZjwiPkGw#$#j2#2 znUhiJd?qYes8mm}#Y8U~27a0SL9-9>qz;8t&=;}B&Ogd~Z7)DoXScFc@3y^TYCWLZ z+@?GXcZOBYtXjuUqaivNYeT~in(H46&%>F7V^Yc;_p6~Ivj&C)T1IiChOUDkbTi(Gg`eU4BPriUE^b9tSfeKL76M^hp%nblw=$2c)?Bcckh7A+4sYqVm{8*=K7o z*dBO^J9j`)aY-KQha!E?=o~i}oEba*h8`fht9G9SGNy(MP&{c{Tpv?)5)F|U_X_nD zHyYV;7%hvyOWN+c*J?a^eXc?`#vzL6XSXM0wO`(*37?Y_^UpIlDZrY!yMfEjlg-HQ z*DzDn#aJDE+fq}kIhQ_GH-L}7D!s0J99n{VUyV#piKA63IgQdHUAiqAjUUmf_FRd& zKZtcN*c`l{yiuy(%Ao&x>G4Q=3_*dbGK=S7Mpr!o4mPn;qvWGbtK{O)+o15PHZ}^p zWK#ZAq*-!0F;BXjRJZL&SC-P|G!*riuh!mH=!4jHx)h!ID{eo{6e+tvNLP|~!$&oN zElFn9$Q6zz*?;5mO?1^erhb1yL0q(;^{q869?%T^A7UTA(^)PF^q%D9|l9_7&Oz@<;v1Rrs(nbtK;I;>%0jWK~Mfm2^$5Dq<#chd9)8>HF&HjHcIRO za9@Q9{~`e5wC~e7CUds?j1D_nJ$_b_oGRk(aU9WBL>U?zWPx+pRn9?*yX^ICB%bXm zq~(BaTg+F}2+-$D0^crb!R|0P#o;t^C+ta>ju6)aWy8qR`-(+JbVh*H5LOfMG>ok#Nt=g)G{8^ zDpJ;~LlZC(7Rn%6Kb~8mw(D0%ZDGmk#lsbMgZ1AG%Z&waNh@p;J6s&3A|W=b_0Ge$ z+dUJGrSFjEr|nyqlLJB0{P1d;Ru^3D`C+I*9*&tQtK^mIq`OSi+tuyAOfP?WU%+RB z&PZF(1{IsO^NR_wis-Oh+^-0Wr$jF}uo^3WP8>AxY{5i|8ToCF9*6@fMp{-s;~OrQ zjq^dd>xmwbw@L$wZByA!>l=%-#VB_y{TI2m&vI?wfh*xZ5B(qZWROnrXNQ~1xj^Rn zyhE>#S<(2}RH1qA>?W6*>gEFBK??WRMhGIN`E;wl9F3S%g_jI|j=NZfhI!P;#Wut< z$XU2)7TF;JhM0tS>`o?m7$EmcEPK^+UJNG61z`JMx;~&$VHJk9rjV5@+teI)_>YM` zzFR}g?QPFd!cJpch|XZvYE|P9WDxz^nU6oJ@w5$!R1YeBm@=y4t6m%~o2n-1ch83_ zgvi4`dUiuC=!3~w?uyxIp5_F2D@cZ=1iZ(pXyx&>Y}cK;t)agC^p;9jvHwEjz+}QD zN{Ds^HXu;Q3#z}Kb~Tus2n1yjtA>ZosIznr=ItK0k}A*eEwnjYbp+dA-d;tTv()i? zb+}~9%VGMu;)>dOjC992Od(^fR0n0To>RKjAdCL56=R?!cmW`XKCJXzksWu_4<1dVsY0Z;LGStfAqW9_EC>-mt zft=}g68V-~q4TgFN`)53-p$Y&X0IQ|ODFsfX|ltU6T0F-u;gPEA)#m z=#g}~up8YG=2JX2T5G}O*DpV;?i;a}?}rfXt+!elaL8ahLIh2zL-gJT(DmH zM(ykRgXrCVgT!MZQ*QChd_=%<)e1gVQBY9e{rg*qLfE2^ea_+6f!n-|%NX6Z?-$?~ z>_oeyrTS$v8h+kMZ=KE)u*^0rEvwh~rbZ+I*fH?CAyNOM^M0M#Qr%QR&lEIfX}f0z>SLKf2=?}(kH?4w^CAFoNuF3}jHe;36 zP0VG@>n1)Lyt-J|rRv2xyC(ObkOB|*+zA&QpTw0&1SiUUGk3XP^Hr>|391WmeDxVq zX&-2Qas2CyCt|!n^*2Qj$I|tt_?N{Ij2f4LsOx&iepM;u0qEMIir2Qy?lSK3Zz630*j=tnS{O`UaEKFSM}0gTw)SwQZ9`ATcM=?`K`dOw3{{k zcAua;&L(f45i+|Uag^v^4Eln3Me4OM`B;8jjZ#r=grJ8kR|r450;^qcgie#?SKNA) zw4&uyVEBs1geNe7^d?tmcP`bxgyW}3p4pQ;^j5Pb~jsBg)d%7}2c> zO%~@?ZyIy~J8P~ZkXY@IhJnP7uBf#P2N{T3PI{`6wvJ6^IP(~6Z+!TYhPj6 za7ngIw(XGTPYe~!x91YXPlB0os%1ugOvxLy#oEx5!)va1UTN@y(x)zestlOf zemR05QPr4ni<-X>|0-7tomDy5PZ^J{#xl@6NsU?KJ>zsXR&hBTY5ZWVDp%W5L?fBQ zFb=6hevCya818_cw%{2yOri?=!ih$bCX033Jd{RxirP-UuD**`>n)}MmFZQW{X6U3 z;sG88J6oW3_|jJHiS7n<>&~-F7d#F)olrc-&~q+YjoFCv*KCirIUL5J`rG+hydyfq zlX~54C|`q?$tbXrB6VTF>9K8Cyhj0HNppVul~U*Kbee_ahq&-4$q(UTk||b)^KHe> z`+;U&8F~u&e-~|yTiEpRKh5ea2t1oIIHgxoddD}e9EASF%}08oEbXu2O=BfFaO(18 z^?V+T@XU3dT-K>$x0BI)Z#!~kt5cj%rKxnJ-@Q2%2EHMitF~%!K6PBr+_1zi_^$kN zhhtaBZs`ZJ@m#t?C*nyh#T7gcsF(7>nd^jIPKpeyK+3L*3&VqEeB2K9{dNW}$kX{I zsOMP~ri99i$gVbLYvP)eIW*1FouY>6sXmFcE%6@We!NmK4xqV*iq+YHr#1t1gzN>Z zme0@dS{A?yhdmch6zmB@so^4-t07Rj;ndfkrHP=cWk1HB+pa=eK3Mbt z`=j*ymLJz)#`0Q@{2^6NuhV|Z?`HQm0h?E((ad8Wg}LQQQ+!-#p5cf z_Nid6qN7ImO;ERYp->JG*+W*@FyCXLME8B&P^x)=n>L@;o=$eL z5Z{^2n8Y!fD;l_E{L*W6YnyrDtacwdzuw{{7OiUk2uELlMJyV5ZDJRNU2mNNVZ^rH zD zaHU)9NdhGI$QUPG$4(PxSnOLFX6zS}$j{in#^Yzl*}Hfg7Z90pE|qyJ&Nl>_dSuRV zk4F<1z>V(Tr-WdND6Pc{3www0V3!Lm0_};FSJnc1`N!w+ z=sdo_i_kjB-5vHqsUg%wa*mHr1oVI>uO9Y@{S~W<|>zG%A z6C%z&#s(btgf(4j43;w{=#URDdXqcZ{#i_Op!`|ME`bQ6ZjuZR2_QMQju8;;wXdXrWxl2S;7@fmFIb*d@I=wS} zkSZg)Qo(LylF}Qm?84Svwpi>P{7NfRrYRnKCAfUYYiDZT4|17U!2G77ovX2qGMp~D zHm|JU{ok00a`&uCrAu}Z+V6zBqnC(s7$ssEeAv4>JuzzV6dH}If*IU2OU4 z%rFH@9DfM+)F4L`{K=414^#f6DdO5+V8R|{L;CSk$0uNUpUB0i!y_9PA&uzqm9FJQ zAzPI;vykd^hJ7GIOzrYjTVIE5HWcQU2G7@V&10J_f`fJ!n}zGm+s@~9=Zsyo9BLh{ zKQ2L&iy3qZyGU(y@)igc%5}cuJg9HX7$;$G3#@NI`?r)pW2=0?rrU&3JRnN z@0fSFzNPD`ZlztNa({sHyNvC`9yHeNEoC|;?;6-*J!0HgeJ%}eEL6cSF z>ukL-6$G)r z<}Si(R1VwY_#{>6>m^Wa@a@M~&`MieI5+O=ftl;k(zTfzw2uAy6G=>1;oq2Y6_OZ_ zFs5eb?FB{c)|vAfjpb-g-J?)$LqQ`5jE)RZe=;^Jj4NW*-pl+ITCbZE1rasFcyoOz+No+()8A<-~Hiy{1Q-Xt$o z%sCgRoBe+I)t1h$vASzVF2JBjfj6AJ6pR%IMmuxM&qclW@|W|()fQ*$YQc)Ka|N<& zm9jCDNr%rO)ASqKWF`5^zW3iZ_oy5w;4?m_g6N7%pPwley2s_i)kf1qz19yK*puHw zP+R-={jed$${e|N!`oGKG~utbUuMp=rpf>Sa^Wb+G^bvJ({{Y8Td|9;Gf&o1ss8-Ca6(6;tjX~J zwH`yjA?6Ab{b@5euxRgj$q}9X@G_3`0jsC z4BFkmyQYeIog6mwCcTFoZSD8_;TqdybAWZUrD)d-{+>J?ffkSJfpk8o6Ud=et@6AD zwU^?3X!XcJQKsg=-el4jwu&JWT@#X&{Y=fN{?cfft)^aX$yL#JYz#nxrw_p2I0Vst zY-KAAUU}CC2vnDC-HodCd9G=Z8qA?+cG_)EBJ@IaFTW_B7glL!-cV#nZs4)LunmkT zuloyJX-orftD3Bfsv!mr>+0}fS$qsGLo%< zTRihj@^aKEGB0y-oObIx=>Dp^TubJ+?OdghKcl3X2c*t&=_j1b@m6>1=|T-#CM+qL z-3_uboxg{4NRIC#XfA@-HzHr8oJ#Vzgd#rA{w*JCXqpvpK1PN8)2Pu}RKV$#H%cTgpZ+*vkN)JTL* z9blDHITQ+;c%$!_zei1R2Jtk8RDAV6HK5oNcQ{@>h%e@SKs#YS@meEwzS7DI$j7T# zRF*dkrHp(0z=CJY8;1P>gam)W)Rb!8+x!f#69_W+lT?X8rEIGGW%9czHMOIqR*cq- zD>HU=({>ecdRxTPdUTty{LyuN$lcXh`B1y~d-#;TqRQk1{x5vQC?(sno|Zl3Yd_|d zR@>Q6&UQHWKvx!T^hqt!S=|JeJ1E^`gYq8&Ehpi#b~adq?4Ay|{Y^T2JM#0s)Uz6; zk@LF?KhZ^;cws3EP?^RbsOEzMs|IRL<-T1P5T-obC*9|~9#!8Jo8)rY$K0*oWNWFy z*zlk&>GQ2;NL(P$?;&;tX5EXu0sM)*6b41_1p}uaCuXM&j9-*pSVi~(N|gC~>|&g9 zfI6>em(STtdEVoy%z58>du|WY6s6|ue3k_QLw8cp$H^lsD-EfOWNM8OqiWYhJby6Z z^-(!Ut)_pR*UF|xVqWL<3l&n+0B=!Dh9?G%gBbT$&!ZMJa?~&8p^Bb+^X$uMnl`TY z7Zk}$F&3BvV(SR4rnU2mM@755X=2_<{8AU!(6hMu+;;a?M^zgSCp&LdO5jEe^)8>G z)C2W-iT;fS@F6@?!rF4BCJcj?`H%xsj z%IWQnisZLDyQw-44;4E|X%2_6nDiLWwFVA@7{)au%qZoLrGo*-U>{Z;kRE zZNcQ)o}0eI@ULx<*$l%?CXID`G1_D&zo+b-BmW065n!%lWo0!S$WjiQQfiQLvS@z| z5oqwFce-qWZq}VM1v^I-~>F$OZVqoBR{CuC^_w&Bj`&{q(1J0be=A3=@*?aA^?sc!VLp!{Pyl)3;kHwdd zkW)6W77)=rl*waf2o-5i?TvHI%*?d&Lx1K0k125%fzz zuztQ_8ekaKE|_X>a5)OtkFL;&x^dGt3<(u1oF(rYQqx9Q7uwM(ik>W~EqlXFu>pO^ zBaQhwkbJaz5DYOyAL5co@x69~qL=)k>}H=+SQ_KD$%4FSuOcmEQCAHekb4vq4~E#N zjUI1&okK?RCb_L~eeQgD+f*zvowuaV>3x>780qf28f8fj*0C9zoCN}xPLj$?E&ID$ z;kBi+2`P1XcUqBldJV{h-AXS~H>rE;Fj9p`AVgAl*LOIG9%nAYUz(=75FbSHMsZ={ zDwa}>P9k%-W$kW0<{FOaH|LkVINY&+gzeP){;vAP1&lC<_WQGf^StBYwAMl2;V)~N zb)koE)-s!strO?bS09rvpC9S-d~~gh08w%qn4!i6GgmVKQ(kp}_L$(}mqZo4eOY2F zCzp!rL>6DvX5mzUquG6?j2u2C7v#gyXKFAA0ueEH1>m{h&tK^08e6XQ zP+bF*+!kM}OcErzg3w;#FzPC&`*h?WwOKy<}^`O!3fr`6^*n}*{UWM1rUTdTscweB6-U#?<^e`I7%-1x2 zUr!6ESR45fI;r=F1(ruN!XFS8!Mvz1TNR&TS`Iy8lX&r;4^`>;MHjj3-gW_QhW-cL z-ArBYJ9U%5|gPqvHs?I~}ux+2(~=)6L0hrCuux0~Jg zeY7E+>{(YDB$d*1+-EVuVmnW)o4-;$03N25vT|%P=XX*4h#-aNA)Ko3Li(=={-z2$R}QZaRoHV4c^SPvegh`P2< zSxTF%pmbi$f(42U^w(Ovim`1z2hls}Wf8F+`!(%W7Cz5U9YYj>NB+F{NNt!CQ3$bZ z>!j9|^175->RjFK*Ad(cinb^={sjjtF2klJyY}M_4FUQnMvVVxa;LN}Ajw*D1QvL| zvOg(k;EDL9b_>RJ9wEaMU7n_kY{X=6hv$8oCoAISU2B!sG2*Kx3m-OOf4f-$l|-uh zP0Ekvdt4Io@O%1v%e-ionIl=2qsT8-bB7UM#1o+_^R?0RZUXV9@_=Q`}6uy_f zi*c8pKHbl(b}n0oX(U9q+62uj|Znu3~_YDV(W=_K9X zPc^Y9-IsIE&>>&n`}L@J0YJ0Vw*#P9&Bbb(YIyJCUF^ls*spK=?q1*PXXkZJmRwIU z_=ve2?|C0ZF%iodx_BUZTK)DV#iAelI18=D;C=kH{I0Q)|?vsV}N;E?Dlg?M5kLm7ze9JRI1UGFI zGl7Dw%Ahrz#Kqbqozgn&RgmsfVx?1_s?jv;3XV-Gm= zSc#BDZ-@3!mJvGh(Lb+btDF08Wf4Md3zG>A)&1ZCk=;n*>$7bJ5lhpNR&2l#J*L^6 zZ1cm$!X`4{*_`+!Mb2(lVt(GO8t(f`S560;c1#onr#jK9Wew0d)r$76A3J9=JaOgPwzEuP@U(dPDa}`gw>K2(@>bE#`*?@~J%n>)CiRV+> zQfdt3H@$(wCV50pN+_m}ou7N386LM2PrsG$YlmBZv@V>2hBE=4w6WB^>eWxbV_?uu z1=L8T3z=zW3$dxI=q27>y5C{uLGvG!ZTu)%QDl%rFKqHk%%e$Zq zxG|5weC|UQl%(7-Bpa^NvT@M{JJW_;k6Yc@MUf{?kNkLkbBj!!i; zS7=5?HjudW8T#_~=P%i?7|_R*>>PrcQv$i1#6QkM)b)v$NP!3P6C8!9Lzc&KN@PUC z>BoCr1DA`?qY_9u(ebQXWH+^nq}=bFA1j$e1|#OC#s5Zwr}roih!?|EJ0OJxwIt^( zfx|PH9v^>ab)3?)Fo}3q_O?myPI9z*3c|BM)e|S@);DI&tkwMbp~gz$NtQik%F=NK zjP|=M6!Ft%!dx8;wUAHV*Q|M`{CV#6Dk&~|t!9bf8&KVonSCeY3iCz1%>mnm{239R zc+ zykKU7*@x_T75(nVs`wf|Nd;$Ey7KFoz#XoXfJj+ViDHw09ZZA@e#m!INulG)mJQ%~uoo&XnDsqi;B7k` ze=`K1Xphg|>>V%qgk%Y{>4QH*)id$iIQcko)ikK|muL0Tj0m1_@Nx?(R?>zbnSJ-G z!j3eu?>i*4*mDmw>|@(1eKUCh&Hinc zdoqTd%B^#8U!fmI+BYC$PYy~nsdCI!v<`B2471v;`~U!}u~PbjeD2-(>yK*>*q2xb zZ|9s>b`4f7n^+L`rEm3 z#BfQhC^9qnDbo#fb@yj3)Wx?xM`4|)seSw6bV1enLURMIHUF*|D`|2iWYdO1;_~|Z zbYvNxF1~Qr?7fK>c4^D$2xY&KQs7LPyjUFGi+3!t5Ih`xi#i*-_Yt(%l&W+qPN;a- zmWT5E@;PWui#P>zwU{RHyd+uJd_ABP+O(Y{#IA0AdAFY(rv|>CT#vW!zzZt!)9Bb0 zw#r`wU%!pQzbpkg+AH2j1&^ek?7d74pH|)zQsqgyqbhDl&SNIyz}dT10`YDbwO6nU z@45TW^f;g*c0Psa7Vk2D`#^Y8xf(dr*`ZLL+?Yu=`P72?!;uJP()B@T77cvUssQbbUV8j!fz*YP?xhkF?Gd3T}!B9Ur6=l`v3XJryGfpO|I9V~`+Q zD6u*o)BSo@dvdDwD40EwV?aii`^Fh z)ilWsCh=}`Ir>Y4?tPWp_R(GReetq)vHRd+br##J4D>kftq)w8dEyW+15wqNsa6CN%?EAKG(E|U=Z$~0mx zY9Ms`m%;R3mw)M~PKa+F?|kZz3#HU*T>!UyBV#;VNcujjme}j`s;$j%CbtZ>MA~{j z7h4pilg0gqDZIo!{LM$!M^B8iA+}yWaUskP(a^rDmP)K)`4@jepUYsQVMJ~9m%&66 zSiG|V`c%J0t!L)UtSe)!KyjMXs9)p?mwRr$kju@<8A?0>+ExLyx8z(8HB>Zh{vFZ{ zsX`#X2wdr)kxdSz0m%lhlp3EoX zl?0+**k?r>z4x#Xg2E|JeKrGvJo?M_`yTioF7My|voPIkV&Ns4yoH8!8|vEEIiipN zNe?J7EC}OB3dD$*1be!MA$3;{?>jh z6rc?(*SMbNoKt#>p2GnYh+jd)Zs~M0Kn|}YskTbl%wtAsh@Kx2TPqd>IQWvjdz->@ z$0`ezR#TpqKmRgoF717+!(7a3K}*Xu!!+z~AN+kZhyy^N6)v+v;k>U>>VpR~3`Bxk z4(2yg(2;b-kX_+9a~IFuWJvrjZ=kWS>BU7So71p$aE^tO>~a6(omjAzB8%2}dYzDV`Q~EfQxyj9 z{NKMvzQjiQt)jx@(mgvlP)({ujILB3hfX!*&J@)+|)V1i~q*ndHRJ>&?S^O{)XE5F5j@F3VW>-dGyM5JkouwcoZ-1G!WL9uRnLr zdH8)eyP;{|Q|vG}G;GBk*TCfyaYwCUVjsr34n~M)jyve;!1ZK{jneMT4_O;^0->_Z z{_rHIVxEijHPLs(7{{T*vmbu15T{*)C8fDb3F6imq~d6?oZkIW;u@21p!V*MUQ9;$ z{&-y;Xsn4CT^YH( zV}NuUMyuZ7_@{aU!;DrnMJWWM3kUY5`%zZoimCae>j1-h2QOFf?j6m#CIrj0yNGV( zrH_IS!`4<;5tdnrRT1rI|)V6&2-hgQ>4!CiMg(PNI7C z0`sY$L5Py***JEgnD}Ca)vioeEtlSAQHy>+)8$J$*Ed094f3u#=;lbjR;x`gmTI)YPbV)PZ!xcr_2|Qi{-jEWr*#Jw?wXkCOCI^0p`n5L;J{?eax2Nq=&fXu-l~gIswzj>kY>^OocALW zJv?c}wxuUW{$jyDGAR5X7q&UtP$ z#ys4~s!6t8KgR=G#j+d&3Y$v%@Y6WoqC~w4+)h8RF6O&XgdO9Q%JQG5qPbMh0P~P# zHZjRUm8)sQX@cNO;tkG2)H6Khp%j4?zZG$Gc};h(|I2UD#Br$ba3Ik%iHF} zXW`6SSZv61XqS&-PuDbP+TVH;{5&_!@J9NW8g}+{M$5qS*%+!|y2BQ7#B?|(5?6UU@RdJp!xUHXZGrK=gG*^B46TxfOHS99#E$?f$WLl?-0PO>v=>(mI(%01grwww*^sMRy3#p;#Zb9h^q|}8O4oaC{mFuqAAOqw z%iEUV)hUR10+eU#*gG^Str5eCgD^MRH)&py9r=xFRuozz=K_AD_r*fVrXh*tlcXz} zTV>+5uKAzh5n7{dkI*04T`tOe2}7J~VK!V}rBnAP({bsC_b_H>q6b?C*#>#poIjSt zhVRDsuEtRg>Pyj|hMm0CBa!VXNe3|{Z8*`?8os|{ z5^*Sb^0cdnXb0@Bl!LlBP4m&$h0xSLze3Z>G&W6=?xKu1mGfKlAEeXSBWJ%(CnCgB zS-4t^&9RE0NNsn>;jb<@BA{kme+unLq}3%Cgb? zTh4lHdy#QqyI6ks3ng?b0*t2&CTJ3qDL+s2v-(PW)ZIfq&4j*?T;&Ohrlpd=h7k@; zaE(T)jstd6v|n=)OPjS)$xKrOeO3)-D3egCXEjZzD!E#jeyNNKYj-%K@DS;{daU1; zzcBtMQuLo$;s5v-h8SJ3gFyVPMnpcSw~YR*9M+2sY%r7`+$jk8=Dtf!>YX5fs-O(} z13#Ig?tU<^>~QE>Dq*Y(>-lZlRn^|pS|f?y;;rLQ4l9-2a?x#+Y08N*Z0s+Z1NJH~ zI@w%Gfvdat_Qi9XO5*}f8%?o478;tf^Y%sR%8E(vzdGp!VD?zK9Z|7L0O1KV|N45z zLr)ltZR0=f{QEa{^w+52j6DsjL<@b}YDJ*@!StIwUG-?Ya5uAwDe@nn%3dw_7_GMK zz$+KA`k=CC$Y~>I40TacXQvmCRj`9BFNAhq9jLHaf{B~RQyT>TtWCtJi_lL6VwSxn>M z-lg<0{cK9?J5R&l!6%8qBpjT=P09>i%ZqxKJ7K=Kp>+OvpPZX(Tl8+#b%VIfH9-$r zHS%?pg<%m-4|bw_q9L>(CS?IM2%cNdhSI=Ru zh)-uXm#Js1NinlTSS+V6%szl~Ai{%sD%IkivTGh|J=QeUKf~H3OUAM?cB>wF&lq%1&f9UbZ zRTZZ6_URXs*Yzj2Yrza?JR=W{*a7y0-8j=CqLZ34Vg+~$&d#R`LG5yQ*jNu`{$_Ul zBhvJ&Y$9x&;uK5~n8V!Oh zG||8{J=r*)e_Sv$w2t52uIN0pLCm3&ckTT1l=qfZpC5k4{-RD05sHL%$$K^rTIYQ` zNXTyRnVj1@6)jU@m9<}8C2Qe-+!ts=?j$cP0m-y5uYO==2xQdHDGinpY`b8a68b#m zX0R3`$G&LSrP30xu38Hg`U;{{94nx04$8i|dq*}>P~gU$Qa^f{I*e~IG!jE!NKdja zI5Et@Aj)sh)amUwP!_*YNgySHoL%NMz>#+$I)FvTiwD$-;| zdD?XTHIeCB@8+4Cfh$pt5qh!G%~x84oYJ3DQY~_%8^Zbg!RTng{?F2ldwv>41=U;C zXkQ=jt+8_hc`z#cXncBI>Q1g{1zy<9zW%DEXwQxZwmCiEv#gM#KNkH7iXL7}QMKcJ z$H9j8ALnM|h6aUR4Ig;oeM@%Arbh0wJYil4mGsPlN{qtVz6>h6) z2WepVWxj$AJ_uToIZL~l1&~q{14f3YIiMo1XEWA?oz-y8msI$^?RZjXB@} z|LE&4REwVFBPN4*1hNR^M;aj?yS`t2-O6bw9KyH8+T*sfCURIh#l)5*_v^t%5avkqER z={Ne|?_21x9xqml%9~l)k1xFfVYgwyTG+ixEeVn&5e(TC?#xpstscBLi{tM?}a$4?WcjfzI*wjg(!;E|ZVC zj%#XxhoGf36wP;61pp^MtfKOO=tI%CwJ&QD!|--1yWeY00Lw9t#hN%cf1p@V+|b4gRGUhJs z&%LAKf}&#;Dey>p{e+#GnllZMgLI7G{YS-*D(#r*_TIi;!w_`3iQd#4ghTH{_i;&m zHgHI7PsYE3vs5Qyq&GY4S2^6Ugj3P_NfH%I+RYiLiq}GzJF!BA- zWr{1>8vw9qy0xsIV46S+n&@{kZ9>|f@+*imZ752Ne*%kSAr_eGApDgni-UuXKhwt6 za@vdNNEan}^m(yMu+YQQO|hFziz=Zj0~*?2w}YxQban6BkiJ>l^TQcehRjj^I;^AL?kw`Wt242zQ6s7@X*)X+Aj#tNOU#m{FSG9Ht> zDS2>aY^Z{TNm$7f`GszuD@(cN>fnVn-32_wD(TxZCqnTj8B}>EAu4e@CDOaLS$_ji zV2yK|@VUk6rNYFqJYfJeRpH?oZ!8|~jKeM5 zfwStgP}uolPCINnOlW05^G-5i-W;F7<19()tS~akI_J;cPt$!rZ-;OTHFZ8;psE6{ zWYU*i?G`>tE_hq($hndA%MlyN9j%CZw=f__r-OdSjzgQ%s^<8pR2BkH%3bZ(C1$5K zt_bbl?awm93s<|s>J;UPdr%jeD_(6B_NC~jhlA}4YxK3gMa%T-CFF{7)+8I`y(oujxUQ0ZWT7tZb~o9unl+SJMMZBeq#7^{Rf_~Hy4d95iD^qOEf z9jMYgSm*M7i-Z20dS=%(PAppjtjxr)*gc=L z%9i^*@VbXJ0LAf5O>WKHl$=(KU-u040@P*ko2Z`nHu@5q;b6DNmG`$7JH&qGJTIy9g`Wbhw zKE%3;Ya0zsMxrZJ15JH7WEB>1`Y^a`CW_s&uMGxlJoY0Qf{K7RQKb5gt?szO(Q9uF zl+%3Qm$;J~`wf-ZhZYRX9P9!!aE0NIBjEk~E7CYyQ1tMiShR$Uw5%))f21nD0)Az2 zeit6hIW}G&`Kl7SXI?k3Oi+U{Cm#PRM6Qf{RNl~|1dQr0Ib;Q{;{z;;|6UF_lKC&~ z^*^WmAAe?Odw0Q=PLWzewf~SeHB`SwcDLGm>Ux2m(akZ@yeKL6R^^9k<%g&7=CkTZ zc@?5d_&n)>?xV_dpGw-r46u|+lhE;zSZF+6{DfXXek(ZtuP#NC!TF3M?fMIKw!YfKa2sIj?^I6JYIHL2 z6b;LofwNnTq>c0N%h3kGKHGwX_hLD?tX)zmfKTdRH0;I8pIXSNchv5ob4u^0pn<-*GRs>sdUD>BB0& zUEZ5b4Lx4VK~KvnC1L~zW%=P3m`A9c@HgEf`9=Y~sh9Zaj$_e=XU)Dk@7)WqpLJS=X*vBi*c~uSl`SoQcjOWeYCO(P?H7gI( zsbF)OwnIt}2VQGxV7{wB98(+Tu0lJiVJNH>+oBj#4(y`fM(+3Y6UW%Hfo1ZJR=H3| zfe6W*Wr|Q%(R0TV$BB*fA?R7<0=mKyGLQPZ9IR!~iT#n!KxSW~ZEjuRm$hEPiI~V| zG9&y%waNdO@YrXLn7n6B4a%Ec-`wm-`Fx2J*`KLy@@Jz==X0$ z#Tb98Oi9<=%orUx$x=OGyAbyD8h~|?yx~&lE|57JXXwE{s?m_63;l!r?8q+Tkj^W0 zWc(w+8kuNx5qV4T>T>kH8tL}?ewJ1mQvH{$X~yyqa#?Xmb8ON2De(r>MmT*O0fh6^Nv#v|`anFq^k6N6yk!_$FRRPe4 zY8eg^+2uP!?UC76#$2DvpiHyQ`K4TfKN*I|#ys2W9)KErgof%;t@Cx>TnMk8Z;HEP z30Tcwc9r>+uDMaj9<@HEdd>Y^>OUj+E+Sp7k!l$OO&W5*#pxEWfw59bMX@+y-{*`4 zTPVbp-629l%Si7}^ggu?4yPal)m!CZuQTxPwvI)}_S&plHt$t$!J}rz^spvgXUAs4 zM3d#xhcp3z%l|sH{(HvX@aVtt*P_`qdHC4>4jBCl!+HRO3l4rwl%6jI6bN~N>cN8r z)^y0qrt7EA0NAVOUNy!X%xQF=Pi?RgQ1;kccK;s`*yJxL`>!xQ7-ANI&tVkLjJxQ^ z88e@~6g!LKXmfIw9IWq_4OQhmd-9& zSD&ZUn1oHIbKVdOKT{;3DU&1SP^+ATLe?Lxt|oX(7lTFd7%Y=EokZIZi?H?AN9*2~ z7qd(?v_njOcBn>ELJ8hE7e$wQyDDa_D`T1u#g1WJ&(1-<>yY2(k$ZV&ql-AD^Xu5(JpP@*xGA+#)xvB&QBiikvBlOm&2J+V=rQpVD^=uneqk-oIj z3}|zPy{s?)H(d&JfqzpVL_zp#1h_046K=2@7)vIq1(Gd0At{jp%D`mP2}T>v>-+|% zS=fV}ZCZ=LB4~%?X#Sx8O_}W_0McleYYTADlhbfu)a)rw3G8lU5b$`%vxAoBN>`!mN4AFzEJ;8x= z9Z@hIADrR`?~;H-y`MKon8_fdqSGv?Io7p~$++&7f6<3darnNZ>xz3>>+WGYwyATR zk0KseJtc6Hc#5x@FUHfx#asP{npN}!FPPIZD1JdCCz>1Pvl6SSdKmJose!*75x=Xo zENZT#AVKz0El=o)!Csl*jP}<B=hqoXf|%l>5Dh1Tdi3=MU(K+%|3z|JoU5R zLl@c6wBM#B@udR3Xl%!luzspIh*d}W-7z#0u3asvHn08d2Sqtm*-{ykfJb;-|9>JN jBq}P*%frjdBP1j$D9SG&z{|tWBP=SwE6Bz52=D&@Kjw)c diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/plain.txt.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/plain.txt.http deleted file mode 100644 index 5e85ad6b..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/encoding/plain.txt.http +++ /dev/null @@ -1,13 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Content-Type: multipart/form-data; boundary=----TLV0SrKD4z1TRxRhAPUvZ -Content-Length: 221 - -------TLV0SrKD4z1TRxRhAPUvZ -Content-Disposition: form-data; name="file"; filename="plain.txt" -Content-Type: text/plain -Content-Transfer-Encoding: 7bit - -I am a plain text file - -------TLV0SrKD4z1TRxRhAPUvZ-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/no-filename/filename-name.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/no-filename/filename-name.http deleted file mode 100644 index 43672a32..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/no-filename/filename-name.http +++ /dev/null @@ -1,13 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Content-Type: multipart/form-data; boundary=----WebKitFormBoundarytyE4wkKlZ5CQJVTG -Content-Length: 1000 - -------WebKitFormBoundarytyE4wkKlZ5CQJVTG -Content-Disposition: form-data; filename="plain.txt"; name="upload" -Content-Type: text/plain - -I am a plain text file - -------WebKitFormBoundarytyE4wkKlZ5CQJVTG-- - diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/no-filename/generic.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/no-filename/generic.http deleted file mode 100644 index e0dee27c..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/no-filename/generic.http +++ /dev/null @@ -1,13 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Content-Type: multipart/form-data; boundary=----WebKitFormBoundarytyE4wkKlZ5CQJVTG -Content-Length: 1000 - -------WebKitFormBoundarytyE4wkKlZ5CQJVTG -Content-Disposition: form-data; name="upload"; filename="" -Content-Type: text/plain - -I am a plain text file - -------WebKitFormBoundarytyE4wkKlZ5CQJVTG-- - diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/preamble/crlf.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/preamble/crlf.http deleted file mode 100644 index 1d5f7095..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/preamble/crlf.http +++ /dev/null @@ -1,13 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Content-Type: multipart/form-data; boundary=----TLV0SrKD4z1TRxRhAPUvZ -Content-Length: 184 - - -------TLV0SrKD4z1TRxRhAPUvZ -Content-Disposition: form-data; name="upload"; filename="plain.txt" -Content-Type: text/plain - -I am a plain text file - -------TLV0SrKD4z1TRxRhAPUvZ-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/preamble/preamble.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/preamble/preamble.http deleted file mode 100644 index d14d4330..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/preamble/preamble.http +++ /dev/null @@ -1,13 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Content-Type: multipart/form-data; boundary=----TLV0SrKD4z1TRxRhAPUvZ -Content-Length: 226 - -This is a preamble which should be ignored -------TLV0SrKD4z1TRxRhAPUvZ -Content-Disposition: form-data; name="upload"; filename="plain.txt" -Content-Type: text/plain - -I am a plain text file - -------TLV0SrKD4z1TRxRhAPUvZ-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/info.md b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/info.md deleted file mode 100644 index 3c9dbe3d..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/info.md +++ /dev/null @@ -1,3 +0,0 @@ -* Opera does not allow submitting this file, it shows a warning to the - user that the file could not be found instead. Tested in 9.8, 11.51 on OSX. - Reported to Opera on 08.09.2011 (tracking email DSK-346009@bugs.opera.com). diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/osx-chrome-13.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/osx-chrome-13.http deleted file mode 100644 index 4ef39172..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/osx-chrome-13.http +++ /dev/null @@ -1,26 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Connection: keep-alive -Referer: http://localhost:8080/ -Content-Length: 383 -Cache-Control: max-age=0 -Origin: http://localhost:8080 -User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1 -Content-Type: multipart/form-data; boundary=----WebKitFormBoundarytyE4wkKlZ5CQJVTG -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 -Accept-Encoding: gzip,deflate,sdch -Accept-Language: en-US,en;q=0.8 -Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 -Cookie: jqCookieJar_tablesorter=%7B%22showListTable%22%3A%5B%5B5%2C1%5D%2C%5B1%2C0%5D%5D%7D - -------WebKitFormBoundarytyE4wkKlZ5CQJVTG -Content-Disposition: form-data; name="title" - -Weird filename -------WebKitFormBoundarytyE4wkKlZ5CQJVTG -Content-Disposition: form-data; name="upload"; filename=": \ ? % * | %22 < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt" -Content-Type: text/plain - -I am a text file with a funky name! - -------WebKitFormBoundarytyE4wkKlZ5CQJVTG-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/osx-firefox-3.6.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/osx-firefox-3.6.http deleted file mode 100644 index bf49f85f..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/osx-firefox-3.6.http +++ /dev/null @@ -1,24 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22 -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 -Accept-Language: en-us,en;q=0.5 -Accept-Encoding: gzip,deflate -Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 -Keep-Alive: 115 -Connection: keep-alive -Referer: http://localhost:8080/ -Content-Type: multipart/form-data; boundary=---------------------------9849436581144108930470211272 -Content-Length: 438 - ------------------------------9849436581144108930470211272 -Content-Disposition: form-data; name="title" - -Weird filename ------------------------------9849436581144108930470211272 -Content-Disposition: form-data; name="upload"; filename=": \ ? % * | " < > . ☃ ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt" -Content-Type: text/plain - -I am a text file with a funky name! - ------------------------------9849436581144108930470211272-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/osx-safari-5.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/osx-safari-5.http deleted file mode 100644 index ff158a43..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/osx-safari-5.http +++ /dev/null @@ -1,23 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Origin: http://localhost:8080 -Content-Length: 383 -User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1 -Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryQJZ1gvhvdgfisJPJ -Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 -Referer: http://localhost:8080/ -Accept-Language: en-us -Accept-Encoding: gzip, deflate -Connection: keep-alive - -------WebKitFormBoundaryQJZ1gvhvdgfisJPJ -Content-Disposition: form-data; name="title" - -Weird filename -------WebKitFormBoundaryQJZ1gvhvdgfisJPJ -Content-Disposition: form-data; name="upload"; filename=": \ ? % * | %22 < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt" -Content-Type: text/plain - -I am a text file with a funky name! - -------WebKitFormBoundaryQJZ1gvhvdgfisJPJ-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-chrome-12.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-chrome-12.http deleted file mode 100644 index f0fc533a..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-chrome-12.http +++ /dev/null @@ -1,24 +0,0 @@ -POST /upload HTTP/1.1 -Host: 192.168.56.1:8080 -Connection: keep-alive -Referer: http://192.168.56.1:8080/ -Content-Length: 344 -Cache-Control: max-age=0 -Origin: http://192.168.56.1:8080 -User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30 -Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryEvqBNplR3ByrwQPa -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 -Accept-Encoding: gzip,deflate,sdch -Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4 -Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 - -------WebKitFormBoundaryEvqBNplR3ByrwQPa -Content-Disposition: form-data; name="title" - -Weird filename -------WebKitFormBoundaryEvqBNplR3ByrwQPa -Content-Disposition: form-data; name="upload"; filename=" ? % * | %22 < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt" -Content-Type: text/plain - - -------WebKitFormBoundaryEvqBNplR3ByrwQPa-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-ie-7.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-ie-7.http deleted file mode 100644 index 2e2c61c7..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-ie-7.http +++ /dev/null @@ -1,22 +0,0 @@ -POST /upload HTTP/1.1 -Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, */* -Referer: http://192.168.56.1:8080/ -Accept-Language: de -User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) -Content-Type: multipart/form-data; boundary=---------------------------7db1fe232017c -Accept-Encoding: gzip, deflate -Host: 192.168.56.1:8080 -Content-Length: 368 -Connection: Keep-Alive -Cache-Control: no-cache - ------------------------------7db1fe232017c -Content-Disposition: form-data; name="title" - -Weird filename ------------------------------7db1fe232017c -Content-Disposition: form-data; name="upload"; filename=" ? % * | " < > . ☃ ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt" -Content-Type: application/octet-stream - - ------------------------------7db1fe232017c-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-ie-8.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-ie-8.http deleted file mode 100644 index e2b94fae..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-ie-8.http +++ /dev/null @@ -1,22 +0,0 @@ -POST /upload HTTP/1.1 -Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, */* -Referer: http://192.168.56.1:8080/ -Accept-Language: de -User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) -Content-Type: multipart/form-data; boundary=---------------------------7db3a8372017c -Accept-Encoding: gzip, deflate -Host: 192.168.56.1:8080 -Content-Length: 368 -Connection: Keep-Alive -Cache-Control: no-cache - ------------------------------7db3a8372017c -Content-Disposition: form-data; name="title" - -Weird filename ------------------------------7db3a8372017c -Content-Disposition: form-data; name="upload"; filename=" ? % * | " < > . ☃ ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt" -Content-Type: application/octet-stream - - ------------------------------7db3a8372017c-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-safari-5.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-safari-5.http deleted file mode 100644 index 6379ac01..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/special-chars-in-filename/xp-safari-5.http +++ /dev/null @@ -1,22 +0,0 @@ -POST /upload HTTP/1.1 -Host: 192.168.56.1:8080 -Referer: http://192.168.56.1:8080/ -Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 -Accept-Language: en-US -Origin: http://192.168.56.1:8080 -User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4 -Accept-Encoding: gzip, deflate -Content-Type: multipart/form-data; boundary=----WebKitFormBoundarykmaWSUbu697WN9TM -Content-Length: 344 -Connection: keep-alive - -------WebKitFormBoundarykmaWSUbu697WN9TM -Content-Disposition: form-data; name="title" - -Weird filename -------WebKitFormBoundarykmaWSUbu697WN9TM -Content-Disposition: form-data; name="upload"; filename=" ? % * | %22 < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt" -Content-Type: text/plain - - -------WebKitFormBoundarykmaWSUbu697WN9TM-- diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/workarounds/missing-hyphens1.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/workarounds/missing-hyphens1.http deleted file mode 100644 index 28268903..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/workarounds/missing-hyphens1.http +++ /dev/null @@ -1,12 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Content-Type: multipart/form-data; boundary=----TLV0SrKD4z1TRxRhAPUvZ -Content-Length: 178 - -------TLV0SrKD4z1TRxRhAPUvZ -Content-Disposition: form-data; name="upload"; filename="plain.txt" -Content-Type: text/plain - -I am a plain text file - -------TLV0SrKD4z1TRxRhAPUvZ diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/workarounds/missing-hyphens2.http b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/workarounds/missing-hyphens2.http deleted file mode 100644 index 8e181947..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/http/workarounds/missing-hyphens2.http +++ /dev/null @@ -1,12 +0,0 @@ -POST /upload HTTP/1.1 -Host: localhost:8080 -Content-Type: multipart/form-data; boundary=----TLV0SrKD4z1TRxRhAPUvZ -Content-Length: 180 - -------TLV0SrKD4z1TRxRhAPUvZ -Content-Disposition: form-data; name="upload"; filename="plain.txt" -Content-Type: text/plain - -I am a plain text file - -------TLV0SrKD4z1TRxRhAPUvZ diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/encoding.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/encoding.js deleted file mode 100644 index 1ade9656..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/encoding.js +++ /dev/null @@ -1,69 +0,0 @@ -module.exports['menu_seperator.png.http'] = [ - { - type: 'file', - name: 'image', - filename: 'menu_separator.png', - fixture: 'menu_separator.png', - sha1: 'c845ca3ea794be298f2a1b79769b71939eaf4e54', - size: 931, - } -]; - -module.exports['beta-sticker-1.png.http'] = [ - { - type: 'file', - name: 'sticker', - filename: 'beta-sticker-1.png', - fixture: 'beta-sticker-1.png', - sha1: '6abbcffd12b4ada5a6a084fe9e4584f846331bc4', - size: 1660, - } -]; - -module.exports['blank.gif.http'] = [ - { - type: 'file', - name: 'file', - filename: 'blank.gif', - fixture: 'blank.gif', - sha1: 'a1fdee122b95748d81cee426d717c05b5174fe96', - size: 49, - } -]; - -module.exports['binaryfile.tar.gz.http'] = [ - { - type: 'file', - name: 'file', - filename: 'binaryfile.tar.gz', - fixture: 'binaryfile.tar.gz', - sha1: 'cfabe13b348e5e69287d677860880c52a69d2155', - size: 301, - } -]; - -module.exports['plain.txt.http'] = [ - { - type: 'file', - name: 'file', - filename: 'plain.txt', - fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872', - size: 23, - } -]; - -module.exports['pf1y5.png.http'] = [ - { - type: 'field', - name: 'path', - }, - { - type: 'file', - name: 'upload', - filename: 'pf1y5.png', - fixture: 'pf1y5.png', - sha1: '805cc640c5b182e86f2b5c8ebf34ecf063cd34fd', - size: 768323, - } -]; diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/no-filename.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/no-filename.js deleted file mode 100644 index f03b4f01..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/no-filename.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports['generic.http'] = [ - {type: 'file', name: 'upload', filename: '', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'}, -]; - -module.exports['filename-name.http'] = [ - {type: 'file', name: 'upload', filename: 'plain.txt', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'}, -]; diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/preamble.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/preamble.js deleted file mode 100644 index d2e4cfdb..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/preamble.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports['crlf.http'] = [ - {type: 'file', name: 'upload', filename: 'plain.txt', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'}, -]; - -module.exports['preamble.http'] = [ - {type: 'file', name: 'upload', filename: 'plain.txt', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'}, -]; diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/special-chars-in-filename.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/special-chars-in-filename.js deleted file mode 100644 index aa0b79f3..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/special-chars-in-filename.js +++ /dev/null @@ -1,30 +0,0 @@ -var properFilename = 'funkyfilename.txt'; - -function expect(filename) { - return [ - { - type: 'field', - name: 'title', - value: 'Weird filename', - }, - { - type: 'file', - name: 'upload', - filename: filename, - fixture: properFilename, - }, - ]; -} - -var webkit = " ? % * | \" < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"; -var ffOrIe = " ? % * | \" < > . ☃ ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"; - -module.exports = { - 'osx-chrome-13.http' : expect(webkit), - 'osx-firefox-3.6.http' : expect(ffOrIe), - 'osx-safari-5.http' : expect(webkit), - 'xp-chrome-12.http' : expect(webkit), - 'xp-ie-7.http' : expect(ffOrIe), - 'xp-ie-8.http' : expect(ffOrIe), - 'xp-safari-5.http' : expect(webkit), -}; diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/workarounds.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/workarounds.js deleted file mode 100644 index e59c5b26..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/js/workarounds.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports['missing-hyphens1.http'] = [ - {type: 'file', name: 'upload', filename: 'plain.txt', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'}, -]; -module.exports['missing-hyphens2.http'] = [ - {type: 'file', name: 'upload', filename: 'plain.txt', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'}, -]; diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/multi_video.upload b/node_modules/express/node_modules/connect/node_modules/multiparty/test/fixture/multi_video.upload deleted file mode 100644 index 9c82ba3661ffd71eb0cf2d9690639c45c4ddf1bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1953781 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 z

    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 z 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%0D?APKzDpDs;KJx_Yo7 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

    *55^Fg%qi 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

    S_+t+CSIEBugJ0re?Uz=8)< zOPO0&mKvx9ZM?srPi}-p#%yk6{?3DTo+pL-w{e;Jk9`L#M8gv9(d4L+^*neZTLBCacYDTT2wSar`4&^*LF`!+jUp4#qlwg zGFedgPV4sjtS@CQHN~USw|YW;RYwGRCQf3+M@}YDO&6jAfkG1l1GnV=Bu>WP1o^*) zz#4-c#(_EwDN7l{M0#`&Da?ruzUf3P>1Q;;<)Wv$B?Ie%fsf$0*lae34z-8S%VfWXoTg+bum-vIwg9Etxeosh)O;poTCC(V3`s$HAqg?C6Nd$*$M zdsTZ|)WMsYhd|Fn#$_f!B|ORPRd|UZqur%*-LTym&LVvNhnZGfgf~REUEknhLaD3p zu`9Uatd5Grq0KWio^tu8CJ%=YrezFfKO!~jgQJrVylUE{B+gJ8$GeW5$&p5nwcjqN zd(i1;lKVr++pKvt%4JKM8p;m0_+N>k)9B&tplY`Gy=Cdxgi?GjiPLtT&AEW(Y~A+S zyz+B~r*`(eT5btF4Wt_!B*Ys*HQi=VG}1aO%$B2Uj{F4nrfO;Ejy(E;dxuhcan>** zjDQOViXdI00o=ocqD5zJz378wWQY>Frpt~`Nzz)#BdH|sWTk3iz4lvTT9g5OYTBin zLxBHkczu$^J5O+h>UOu(!45GMY2dr;6L}ByqzVBs_LsV66ooJEl^*LlD=-%XO#qCz zYWeirw>kx5maFwD?9Q{Clp z3&zWSMM!~1zve}!xGTIsD720}`{UYBqs*cgbh8>*^<2#|6znKxrl0MM;!7d|oOv-m zR%iQIt_KmT0`}WJF_{hGCr^zMi=qAR?JO;B5-{q;Lx2SB;)gGqrg1go4(E}H=Z7%038mwTshaOo&+@62eR-Gk%!Ay6kcMTXs;1(GK#=1{EvgFVwq?V;6k zrZmr(dR}7qC3mC3g6mV9SG&Q%-Q6g}c=P3Qz$f|JQbbskbG=apZ)_zC$0f-tO$?V+SskMUZ?{2ec0ROo?>kdm&k{EP45=ZT(=eYu}1E004_;m@BgnfyQ9|9m86t0%8znN-M<6$emEf9$# z`KqYWn$10L!qj(qJw89m}VDL!*f3`;abr8gAK-#4Sug z&C&O&RyNhcSbfPWc&oo&&)>dHiEh5CjF)yjePR>?c#1Jd8tI;?iEo;7_2!TkpL!Hq z#;n3&bc^3KZ}-~fs|#V@D`d{~+8#4s?*Ylo<99o5wcSq7LrjfkqE_{T!ap9>Y9x%D zQefwLqL~2})(BA-0;V4<2$>yM;i@~^8OsSH9U;Y_4qsndG=}tMn~YJ(#zgw!Xo(ly z@l2Nl|Yv%KS;GJPtz-CV9JyV?SKL zB+i8`HI|b=m~&*YgpIz}u$>O)?RFd3F7i0qiVsJp2XN6YYR%}NL+ihbHG>Q~#l<~c zj#XNFfSDz(a}4wpTQLrpi+$Fe`LwC2v&l(Htw%7W^yi%>?!Q8WUBg2t@d^XmRgq6M zDe1&k(jLt7%Dbv=J^xk;DA&YU;!Ab5M6q{)gFY~9eLpjTHyFJM*-x&#h-=TdGVx{vp zUFiT=gV^YXEVic0FRUD^kxOqVsp>Yz(KdV|7drc?;E_LqCkBz4gXUP_F%{CbnjrgE z)ACn_%P(9{Ro(152Oj|;U&&8ieihZ;pNU?PlJl~Ox%IjVN#@?ePs!F}L`4f>c3F~Y zJlwxqN5dc3DA(6Rqy#Ka33e>+nF5&wtPy=->^gkjZaEJ=%8M-q^^JL+ngdd-b}$0q z<6|`!j@94SzON0B2W>ol{21xF3diQaam)2$vij<75XdpG(feQ&0Bx_~<9m zCnFRD_VaNF>50&y;a(ANr@tqU_2>I6dmvDc zVV<_u*4DHW;(PHW;WtIry!8GYlcsG}j={;yTiylB5(_)K2ll`oDVfFc*3tf_)VhwH z!TvfSn0nldmnc`b*+VJJc3k`wmVO>)0s^^(mIhYM5`Wl@3R_Ya21iy;-7E~d6(f(5Lt{1YhS1p%b?$%JY^m6D9fo^e zPLZI=mFCw8#LK)qomP6JV7R%?S0nf>KZknFjBLUTg%=AbhnAp!*gdfij6fKC z{xSV=_@aTMVWr2DCjMfo_?zt^`wYGYOGAOfv?D9B$BhR;(fH(as+YAL z+NE_(t+zkBX&fU%U@DZ^W|DeJ@)4(S%eZT0oT0j{^qP33VBZ$O2&W}0lP9qaA$T?? zO@hwC;A9Y1iV$KIaHFnh=3=pAKol?}{f!iEK#F`nhT8kI>D3W+Y%=69IpQAipqD?- zQWM6{(s}Nc+eV}1&javB@VN_z=+z1Bl43%lX8;_zZYa4`w8g>aQ~Hi*2u{p@6rmo5 zY19nRt*q$SC>r@_bE6EiSo4Cy%7ES4ZtmFF2$;utY5F=J)X2k7G{0f5ngA2*vC=#* z!}6ZVq5?uW$r+sfvgBnOGW=Y63)6^VZ!|A$^$DhxHhIT0tduDk!-HCx#hw-Ec{N8A z|NPL=IwH)O*d*qgLgJmK$Sm-RjBGB>XOoSQP?{f_(wxP;IEPEaCU*2;@x9 z2;O(|vz46Tj0)H@HN0z>_mc~Cla_+|+b`pK`IP&?d6U*#Rlg`jl0zAk3$6Frg-nD{ z9$t$?C{L%JIms^U*;+HI14F(0_udojBEwhi5g`P_E4#R_)X00j_%H-4)bW|rd$gjC zUgCUT4lF~qU1O&ZoSI2#6XMWYkf#>ZtGtGX?mFTsAdwVYgri&jXXI2Dacmby-}Ay8 zqrr614rdyl^%dB)qmrjNyh^3TYrP6-SY_nDm2DadPb(z+2@!YZbLGJ(_l~n>>Ts+m zmb`9F-6GwozbCn_!kgsp!k_6qeK<-#nT8%mI|I`+GJVcF^`aeD%?<~i?k5L-`CaD; z1}r2_8PQvmPZPKc^wq`DhA1MuU3}502kGK5v%q+92SIm){yp}Ww@2z8=}4fpimj|W zO)6PTE74jV7le`jxh+ba1|u{n@Hp4@*zP>e)E;TCBtQN~5pDqrp#HmT{*~RzXT=mL zX&&HK&iSxuY(JQy*Cg6S$B^ib82RzQT(-tSl!J-PpDqM}!{iNw6C_y}ULqGy_ zRRM7PfY33YDd&)QjW1km0S6vY$^qQH&cK4_N(RP1PNM&(&4+v8KRzLeTkS4?>%6q$ z?+2`r>eU?(h8weU@2!6^K36b^-c+|#uH;3v{9{ewY-KUf(6n4}`yUYTV471Zcs4nC zwp;GYVokEYd$7zQo(9L_fzE^;7Ip2fP_zf7^a*7)?fbOSZf8o zp*yg%%naVgA=&HrIa91bHu)!ZY?9Phv^)p9A>UEzrCg#Kh`=+W)HV+mFUA;GDOtao*8rCzfKQ=Eu(1XyVn-~J}@Un{E zEoKE%zsoUMmzvmKhqM4e0Ww#Zfk9yGZ-9SguJnI0_hRlh`i56@@8`m2%OyjKJrW&! zY!B&zz?vq6`SLEXsEE&3QDJ3YCr>ZeDSa4h zmh?n0bAkXLEHhQH?ru;#+b-ygq6TS*8LtFY?j?aEs*70OuEn+-z~6%qVGfO_#m<(T zR{4o3t_Jn2(IeUnY^Ack#!Q+z*=Ks6m9*XaI>pKSXZzyHZ=|rRTK#%;4MOED9fCV4 z#Gg+}rU)-+sP+b~jHauaoa!2S&Kf)X3WRC#)W_#<>*&$xsTqZ^IEPlMgwb9!-+5j7 z_Yn!98&Ma*@ZLg!@dq{Zea*n9$9G=X-+s5&?d_W6CgU(1QeZ1#^uwEl)7T}3VuePl zT5{e4GO1hajHOZbM?Bn{hJoxK7=j{IcH#UlWEld9k(a z6VD{iEFJ4qT@0i$YD^|1HX97@_MB@1JA>&6A~#?8AEHJ^4N2X*F8T|xc$(s4M^A~G0;v7zMvz25^qeKto{zZ=m#H& z0;5i*dBp!58*cfMRt9(s=0dynbgZSOM=wnFKC)G&CipU4GCVu37;b5#DR&SZXRE;< zzpeY87iJ1N*{&G2Rpq_R=#tBKX|#(?x|=h4sT>pwI2SQqGK*!9Ifz{C{vgIEXHfvB zReo`cHF0027gsXzAJ2EMoEU7j+G;>P*vK%o{@Sjy6k+P&?%{Fz3s}VhRa=WUw>zTk z`9w@O<5>`CrK2u|%wvRi0QF=$a!bJ~KPw`_MJ-^h=intjzyJ8QyRKJ*2pJOBtK0Rg&R-J=;BT*EUb;Tzk`mo* zH=d@g%2F)FN7FEcFSnFLIkS5A6^bz#FB$UNpL@XOH<|~E+23{*1n@7Pwq;_jJb$yq zc^hEfN*iyxvUKf9l2?22Q`Ewql8AH;h@o)zs^)1()ID&2yduA@bI6_{3!N@?A{Vhi z8R=01%;uMc57I@L-8h(IR&zL+I8=F-%_M9soj?o$w2ik1_cfm`b%!%EZ8~!?#IU=9 zp*C`im-1D40c=`|J03t!UA|&Cj5c(j-z%~30W2<5d6odP65!9uwh1INEguqA*2}@l z2sd}4aC3>Lph&Qyij?N`73a+@XufvuG zm>Ph7c;Hp;O?hPi+7;fQ{IyR2{4N6kc>-6W>I!(=U{?wfXcxi~ve% z3E=q79*FTSxq^j75mV3}M%~Nv$xGn~#uD1C2v4STF}4eUgOFUem=gg0F>4Xy$lh(y zrTDAq?WdodNf0 zU%PNd-dc+Z5X%dT6UOQn_O`qW_?*h#g18s}h6Z>JFvL6uF~dxx_)w{_*Z29DV-6Uk z{=(7#j2Ax(7eG;DuTBNvG1Zr^_+(-f5nw!01D z9?#MxAAK;18D|uoxcu$DLM3l=7ZuLFvV$YW-@};Bub8-q`|Hrt7K$h94eSYTOY?^= zU+NCu%;SvhhD*D0#m4vp>?SeB7*}@hm+U>UAr9v}zkTVdo_u7~*{89qDO?gLkax^{ zCHuU&3Iq9kw0+9My)MedIw>ftz_@;GDYeZJX3d&h(0&_ zk6~8s3n~R?98&Nt)3E3OJ{zW&5rtA8Sck2RfA#v#TXnQlA-#XG9tO<5&ghYvx{el4 z86N`Q{7qu;G9?XdM4o;+DGCJD~dQ4N5 zi|E*9XRtIZ7!_9rCB0ePA`jP{_RZ;EgCvivWDu!N;g0FA;Ot$sNtRK1WQ9r0{Vmco zE+Dkd8s-d66p7=I2I!uD?V~`h@8Q9cw;;vZ>a1Vn&N-ygG?>nh*a2MJcm{lT(i!8R z^D?4WA05~56oJRK#s-dMfT8vdM#KNd)44b@{r!J@ZgU%RE9N$Gr`+W>cjc06h{`o` zt2CD~_qnIsN>q?Gnz};mdo7td-whRem{S~j=gu@=R9A}=kvjF zZY`5;WIg&!J{}q$8|t$1adfH*B<&0zMW06miikj;ZUg>z=x;p0+Nk0EiU`#Bc&86U zDU6~Y^MGXfpK{|sB1~H`DkCg^AJYsbO8G%2)o93u!*DYUBjC`3zSUi$Mp~qDhUXTb zB!3vY*IqWOWR2i3E0ua2GWgzUx6Z%-_TVh-ibLF`TNe<3Spgq6Pj6yOAMR_Pcu}O* zm5T7*p$A``r#9$rk+=Rd;fQvM1}o|R^75n)kmH$Hv@QMs36~t&LN708;-z}%YGsNZ zN}YM3_pET8>R{65IIK7sEd&PH=B?0oR%c*&9HzaT%1*K@R)@CnLF#A|FstO+%jQJA z{?;Pss}HQqX7Mg74ov-*h9A$Ql=ayG+rFDkB28s^jeVhV`*)@pn)lxqm+9@A*Df~n zpZdMtS;^}u1L~upwml?+`m032?pR<73Z&*Q?WSl_(R^X`2&&O95q9Q{ZoY)@jmloV zpWP>sTF9tkHZULtSnY4ae{H%E zCPOPnGhPTaRHtTi>;pg-ziN1O@T2J1BHer9^E#gLb#~+3PV1` zvd#t!<_8{u!vuOAB}3?46l+u(b*%K&!q(9RJK7Wd!{POdnj`9)QW|`wHE3_r1T32 zv2$nhQxXcw5O`5bP21&HmI&uKFIJ(v(3aMRfgA4#Wqo%QI0TB9N%{MJI~j>icWj2` zaisgecz%unajRWdxdAsJ(W4utdX8=pgq9L_Md1_-n<0kjl%A7RgTU7NQ9TH#O`R9` zb?`zL)TQ1gAk|sWy*jDPTy?hIm?kc#*R%MLXUmtqN`M}UM7Ui=?k2vlGhDF)D6~mG z$hAYZDV7JWYgOc4Mcdtj{hIa#^vh0`BSyH*=Z|^)Jg)4mgZ=!-g4b4KA1MdD6Wt)+ zBBK#K_Te;s`T5)m{e@JzgK&L!{2}d2Z?M#IH8AQK^-+%K}@w~+SCAKUqn&SHM3 zWp?gg;E-uTTaIYv06mw!i<>y$0Xyd0@>IX6348PMf}O*wbBHLGAYKfACZHlR`_XT0 z>~_r`|7`G3B2ZqVFA;X=hvBB-6uwp%Bgo0)@gUkIY^~wEJ*pTA7}{=2w+zP|7c(pt}ERkI_Z6JB`2Jv;#Kn<>HiC z=N`)fYK>A^HrNZ#!ircxpN!R9P25R%w_|ZGKXkJ?uQY_EU$oi4i0~%<0=ie9u`t2l zlst0viKlHNJeQLinIoS0OsnYVCS(Raet%6O_$esAmiwMGr;q;EEYtLiZm$f73^O~^ z9>|fYwv@wtZy12K(bA=ILtgwLw;7p>JH;la%WOoPf>`LqP--l`A#GH39Pd?~ipw(; zkjvb7WVE!k?oY3J9W(wrY^`DbZ5eRKXY39b>PkpQ^prgGki0ZqWtb60gMUdpOF6(M z!rCG=+;T*LV&aICS2o9Qo=(+Z%nDyK09g5EOMo?R(c0XV>6x3;{JHrS3u&ri zXr;3b7N@n4pp*m@!e4|<76~71&0q3<$y5FejFu=K*rSOEvZb&gcQxyAYV{y2q)*Dz z8fPmG6CTM0!b8^yFvQ~dJf~nO1~mOFZymEj=KK_>Hx-;zDv8qK;%hlAAG6sPGN%8V zOn~)=yNRM|HYR5mHbKNSMCp9{dpc5{{?f3NzGN(^kmdcAzh;TGYzu8ErWg)gDL# zb+iAe#$H_PHN~$JoPRJR!cP=%*Sjle{W)9*Ih`PPmMP2v`&1$|4c2&)D_tV|{&(-i z4fYL=E9bjNp;z@x^afw{d;{EcEh(QL41ULF<13>-^LpwTJ2f80n(R%grF|A<$N$rB zl(u2*2i2pW3Uw`A=Vz=MpbJ&Kq5x2xd~u9#~h~&yKjMp?N=|*m(|_#gn(U9Tpetw9c*&!P)NN z$DTTtcymG&F=A+ym>*f2|t_(UCP?$k<5hU$P?e22z2&PHx=4cgipX)AoPJmn=D zGS<{40a2Zm+o?ZaX4w#1FWoz?_H5E>$|&%?p54m8j8 zRUKN-hE`~z!e&&DXk@JEgjq&V4^MV=)LsP!GQ$C}+uiKEgF!8xq_>%in}bekiT-0u z&a-Bo;~Q;!sxTCAfVr(OV^}uW=ZP3y`$(A&XD~ic80qROwjAerQPP}FCnQCng{A(J zG7oxmo2O<~NSIfL^sPnt+U;=#s|G}4&u)VH(w!wr1i>LXg(Tv8c_~4Y)*>@*F7$9s z>FDeev1>(O#|YM^Jg63h?lIC>#&RN+&fQublxb5ux817IL5q94HPD^(V?D!vWqs;< z{&pt@NIg!=Ug0`d`MN*jgq_h;um;ASa~qG5xyQUtsi+;F)14J=(^J++*X<ymZe&@&eFt~6`g#Bmnqb$Sv$gs?ymH0k%JK1EA@M{{&oK}X zW84;LY5&%>9(L&yo7q#(xPpQ9d3_JI*X=w!YmHAMECvY=vqsuBQx?9?D!moNDTVlj z+^AsSEvzigj_P;oFD-^em!@(~N>}TJHxEXF9}=P5#R0KY}H!##BHH1}~|5 z-b2>Fm9eQWIqpkeRpNEp=WmU^ClmfTp+{>g9|4Bg$netv*ZUjAGup|B&_2HFGGn@m z>yHwtfu~7@qsGLh?qB>>8W>H=QP)h|u?ghxR)$s4d$PQMh%GDg0s<%t-ajL5%7N~w|h^u80(eE-i*UNx?_7nXZ7xZE7plPk7%~j*_ zSrb#41%X@KpvP)J;1o&yC&DwtzC5CRKG=xP>*uL)boKVTinvm7hD(jmzJLQ!`4*?__#-@{8$FPdgy#*$-3`=zWIN?rJes@APGc!!~dxO3>y;f3zd@fmj&Om z@{@&F0TiiV^h1a>HpL>7saMuU(*N_fNM*~Ccg2czto3q*@1ONw{(86F64d+A$5Fa= zC6ieihel6=DtU*$;l(v7OP(qiDFbpr>YlA}zW!|96(C=0eC?`QS?(>b4(sbq0i{nH zW1b@(cTLru^;{`)U9OqHPGsnQ5}Dh+#LhpXmy_`!Gt@8RpJWi%P^o5}x^&vS!YcF0 zMzo^=G_&~Zzf$)kM5u)ycLZKP+lQ6M4o429m23W8ASZ~A2gJYocY%KeUB&+hy2i`V zk&I&vL+~waKJ;lVSaP}1Wd5-uhVA4OTI^zWf5|j6Jgb>`xDTDR^^_6cb+KBtN7hcL z?-w{{H=5HgYA?w`?kvg*HKGO`I&!`eFJYl(DN2FHJ9q-fXQ^}Xk`)oXvFC+MlPsi{ zo-a)F3HMXRb9c#piWifu&D4PAa4OK{u>bn>1vT>gvP-609%EUmH|42l%B~J%|CI)D zLah93ntO)-2NVD3H6{ zIH}|XE;~~XDPhpXJi&U`HKRw|1AzYOM?B-sTU3XH@AZCEw?u0=q*}1ntu-k-^ID8| z+)vXjLrTsKRtIt~RtB4d@GYFFNMfL7e^W@CK0vLu&Trka{YE7NDi+kSphE{m^XB#Q zJ@)oypT?P@O{jk`*d8~usS78YaX`mUMn5u*hlND_8;E6l?wST-)6mE8SGO4X0yy9=e_)=V`m?!8R?4_mPdLz z8vcui=85;x-Y2XdZ>@;oH{cx`GhYv4OmgCW9vEy)sd6D9EdjFkr$LTsZ;hEVnZ?o1 zq#EHYraLlhrW>mxtK-efpb3UYFf{X0gBOIayD~)(&CfSQfJ2B+)7bpq&GIQUty=-S zH_(DFd!i?wA~+Q^4V>u5gmvgCX&2xsyHsn}$^*-&7=QmMvwhT(hmc9xh!F>8?U7E;#4H}iis>_2t<)eJG%GUu2E1(d9VzoBu(h>3 z`r;|H@MdqqteC@6a+;?g?SxOE%X%6*SQ5RvFlO-?psZ5IET*t?sd^9T@e8%g$!-=z z>Y>d;r^m+68GF3|8w!0J47%55Eh(G|TJpI+lS+{QGii%}0qW6zZvHiVit0?2z3h$v zE`WzolJsvCk?G=VSr#_{)4^eQp%?eFQ;Q$nE3>$KuK!{sLe`o|P(oD%R5|*L9Ytg7 z)`|Sbg2HdXk+U0$aTSG?2iSkJ6QXiln~DfY!3&ci{IG}JF<)~<1osm1*k z7CltAm|)JA^+TA5uWFd`EQ3THUHwUmPu%~mBDz#`fw3LpzhveB;j*ag)h|kP0`R5} z27K!}ZCUEOvTmPqR8<4?bfpw^MdPjd;l;XO5w_>Py&B435I}ALit5eK0fEa&^UDQ%s4`aX!Uq*|e zUE1ukf3aeCkol)RO%mSVYW$r&2{QatmEsMnk8n}iWmp9V>XndEUdxR055T&dw)(L~ znrxYG0ER^o6?ibMg>V|GEEeENpw6d$v2(Kz;0Ii%J0f;nxY(FE4y7g)cBZsHy^=q~ zvYgr^T0R7Nfet4PF~frGi$ON;4K$fqnkpw4z|=sq3c0(!wAK|uexLiIuYd=4^=kS? z-Z*fC00PpTRJRY0OR4h?Y?@q7Rkr!u)T3_E3g6UmP%E2ek@n5^d}eCJ0Fe7@RVk*t z0aEzOSe7{xw{cbH%*nXu`Aaa4ne;EA^@81SMbx6jz$5CSa z^STY!#<${Kqt~WErY?L=7W`+Ym_RmanII#N>?}Z8O9hb+YR2H5(0i^-)h$V+1!$$9 z<_n*`%A*IMSoy$;Nv_qh#jGhRz9~hjS-O<%3XE4OCz92s3h73PAyiH0Dtx~O{e-cN!uzhL> za{)ej3P{~V8*}K2_)m5l}y+4x8au8RK(e|DCVxwnXRq(H5G#pE=D}NEZEq-Q zOI>`L>%eV&9+u&QY(+H~Z;Lgr1eW+<6K};5cgXVzE8fI7#(@}Vci%D7GofoP7tYwt z<^J`#KU_+R`W`L;4Br5~aMTN&a)P8DTc!5eDo2C`)Ugm{A&thUS-RCgPK`b_R-(58IWf^$uV@zk$cul+GcI2mV`LoVb0QTdVh zaEc=T@T-EwM6hor2Asxi6^0@bc50U{kt=|!Dlh~4jSA^}@MG2_K9Q@drdF~MTo%gin7OsM~NM)ys z!sYk9G7Z8K{Zf^_@IFmX^O<#_)q)5XE(5jkK_#zd*6 zDA5i5wcy^eDsCq}Enf<8aa2R@UMNvJByeS+_tC!My?Ph=C~J{-s!3bul)4M9CTaqi zYf&BaIhhyqJk9-eY|raODKT(3QEhVi*CSWdpOIWHS1McrbBQS86s`<5cM~wSu7@_H z>fX!YbZXz@l|cPEou@w~33#dRmR57pCF96c^6xJK8f^2I724+%Oy^rMjM_WC5&OC| zw)jVnfGw5JGTVK=7?z`=ri%H%we`UOY@?{{IA$3_L9GO@=V!>g9SRtOhZ2@VR4mDz z=TqPdi05u@S0Lj?ByC<3_>lwey#$8_UuJoKoc0T0(~slUOKNdq1Bnue;#h(%>p&8g z@C{#KOj3x;Y}+ss6+C}h&PSJVz!Tm2;~dmb7cksT8EkPGL$L=pq|ep(r08&ETuRj1 z-}5BmtWu>X{E-3ug5OHMzH8NOvrhM-jxLTE4qm6f8P#d1yE#b@_<1`c zpr)p#iLpz4Xw;AU&12L(bK~|w&5F*axClY}GR84xeSLVMzlTTeT5Z(K=kcy8v9C=f zpm%g&z`HT3nCy=y+}j@b3Dz<=ZaesJ%UmIA5kY=HP_PKcA7nbryy}~J*E~a_4ke-z z6V^7C-sQkUd;pvDr@*JUGcd>cczddF|Ml2#pe7wcf!5Biwl*|E24N4$U3YEQ2}kr> zZ@3Vl^MpH#kDNqBlp140fSSZ*1%#RULv6qOfR!qJkGHDz{UQq-w;mq6~U~BSrBTofa{De;OuR2}qd0jbaCgGmcGONB6mP0tLr${zU zi)%w-2}aXh&kd9!vEIv(x}0H#^`DS!vI_vE`^{U%5soxCyFq-=)mh&0aZuMHHvCtR z$&sBS<&T(`AvHLutJc|bH-Mct4m(xE&~ZMg_i@P{Xvr{<_s|)O=6v6oaoK%hNDDPx zEnP6DTh)ny6>~p}`5H&zj%+Wj+4yZ}f+9E+yj!08?%u^6H#3&BZ~rg)v^DU)IlI?? zO08poFQbHXuS^RWn3J;w97me5v%kRw@4-<*vs!q2<+vHU1<&Zts2n%i6!Eer-MC+D z_T$gx1p3_k#zYs8oVt<3sL?5qO}%FoiGZ8mN25~uI5gl*6acc4{!y1wix&i9 zz~N+@f%JUL>v~&a=+AjnbjnCc2jWga5aG30x)6!djt!YYVV)9*QxpXTOFl=ZIc&mRdjd99~zWNsJ?Ri&*EapQ+tDk>_clahcFC5gT^`R)39gZpFM6>bDO zB5f^UIi`dCt|RY;F{a^EBxy)`Lr6YfuD-U8{R_{#NmQ zD}S__!jk7$blN}Mi2J1#*}Go2I;qb9%#<4;^-EbjnHeTiqR#4Vnnu3b>W&x6GB8h8 z^V$w>u;|W4-=fdQMwRQzxEpQq2qr&{V>d=*ZJ5vAqJM)pbhXX2Br$&U&mU<9@W#g} zSp=5Pc~ZI$DDAo-WBW1q3ZsZuUEf+myvSwi@4`0{HvzrJmQfB#*Z-ItNfLO|QAL4@ z-@yY_{dkJaR~1QE_uhK>+?NA~xc9R%A>kXOLW8LNWrJ|OxcSWuI-G$9f%ruJqwWas z{nZBkqwbLJJ=|59()g(y4EMXQBYRyQjI_75stE!`vMHkdYVu{@^gP#(^z>q40$=p3 z{Na4#rL|B*FlXID4x~o$qbrEhNE7ULJwselJUICDO(Mzp*C~!1E^$A#khRrUv7sQd zc3s(3IkW4%uTL>ljn8?U2^3Y&brk@g|gHc*inpBCFLI-Nm0k$*?xTR*AzqVkedS>Kr}@o*#G z-z8xu=Yd826+bvZ0#bh$_*eWm{lC2w$7+pyMf2_yF@Q>TiPk)#lzcf#&9!9&$l4e? z|JGU#xc}m{eD9DlD}Ete=DCC|^`nQjl)s2;$M=IV{)sd>rrr1p@Lj&ns89as&UOyk zsneFdQJPMOb`S7gABPCkWhE0;$l4riV*MF(ztV(c@~5eRzf8!q_4ui|iKMTXp4_jg zOvW!wp}yG81LSqrgdlWip|`flMLQU$GAo*c%Qq!?TX6VuXQC1I#fLa+=3=poSnd

    FR-G9zZ_X`C?P7F${ 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

    f0h0-IBRd=fsEEzm9YB^$kUlhIWR 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

    eSA&^# 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 z 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ꪊZXMa=WQ@=sXxk8 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

    f?oJ=7P4vWJfYH=_px?rQWT)!@Dj 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

    *$6! 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 +uZiwqR03 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≥Ow@oYktQ%;lNN{$*b<48SRqsZm1VW6i{6;o-)*vW@(O-vQNm5c`?3 zH3}wGYgS0_Yqv=!h#Sl)i9ItG+`s?=Bdt!+GN41eHIx@XB6_^hi@!M&ZB>%O_f$Hx z_urrOF#%m3;bWxL{jVT2>Zf8Pw=lT7l#EJwU`xd%!cTCK00;jO4YWWFoU>7THHOzt zlO$ER9;`qOKRU6Ii(Mb4Jd$el9)C#bifGAT=^|C!b9sB1p(!K#R-CC*X5Q*g(Jbs6$odB)r^c{>(q`Hg{?< zKYwFZ3mC*&cLsm3G9HFU22eB9qj;G;K>!ghpi+^?CssWo^db;J9Yc|?{2Dz|zit}> z2oUtk><@4ze@#~-et9C+s)_G~46Y-ozkHCzjyVnysYz>bdnE7C7sgPwBAcchOPq92 zq%q-lDKl-(%GAl$9%lCL6ByWwj03qygVPKBRu1OIChU6fb;elSULk5pwJPhVjg4ct z`FbkE({K~ZQ3|(xmuz_Y934T=^hX3|hzs0;^s6)&Xrbv{X}QPL+*K}=kl-*BP{XOT zM`;#b|SF zpI10ndvnKUrazoMh*Z2SddvzSm3k#K%I;}k=}}FXCZ=txL=LkAYlz@c0NnVv_Z@jn z=c7X*_=KH%_eT2{YHH#Bp@PGiok)SJz9dmEXPFiBD4ScrnP*?UOjp2{n(}RNZWd9I zc%wTVVs%ykl@b$cxoz9PvP3MaDwHBoBQ~zMlet))0{3E~IN%)>jc5MwYp=Ua0T>^B ziimvt3{GRVFJ7n@pKQO$K~eOtb%NLBkXGws@vHCSS-$X`2AvW#{auX@CM)<(yjT_3 zYq^z}B`~zjxWPfz3!*08g}(Jw#s2dsB-xX{=wWN~#IOH{FSpbz3Sitw`HV)xath`& zAa_`HbY+SWPoxn|ZGpQT5SS}FQxJ647;064@2A-~(GxEMyAMKf0d@Bz4_oM2$uI;3 z9!!7loY0XnO(>gTOiMQO&YeA7W1ziAEDc!-sy}u$`W~TdVyP%Z-X zf%x;oGwX{kT7lP}Eyswt!KzzuqLm){^n6}i3w>%zIk(1ZfGT3VzZ9r^a9H0XVzPUA z(kt>?<^{;544vaeyUK2ss@L4B*^cG`sJt4ZbJq#c57S>c?F>f>r;Gv|v|w_J!mAr8 zaqu7&$O|jgPo%q6f0t!urfIb&- zIsSK>kk~W@K+Bv+Mhu*Yhp*KRT1R3Bb?VZWqNacbD-xf3iiC$aWArQM$Q@$5yGPW6 z2?f#fajt76KQ2g&?m@<#colAY8AGoY&?mKIuh|#;$cNsaQvcW8B#xjEZM%brK6`f2 zQ;TvR6ZKV`)zVs489(78S+_-}N!d-m;-~b7A_pUp`;0Q{aF~??=)%$+1VOlCWT643 zjf7ovjXx2A73~X5@W2v@wl4@|7N?#J!M&Gw_UC1l9j{5NBghD;r!J5^a*rb&{80bfULp_EyMC;FLzxw~rlTro??IwG z6}$Cr^{E~E2WRvF+2!pte%fg{E#j--Vmz~znwiN^L8^eo=wLSrLR)h|Wa2td{rPi< zSC?L5>a^gp*v(@49iN+cw>$nFe16i1(}Z_?VHxQug5nTlLpZ!hKz!=xVTe20cv?H; z*nVnBfZh03s~5s}jl&yuZ7a=E`EI9pE}?S=_9itIK0v14F<0v_D`a)tqT|$cVJw&HJBwh(TUDnL%lhcVzT&?A{tJ}`SWNq%$1~$6| zTu}>%F#>x7_$^{=qK+5)8F{Feu+!i0k&Y9=3GrGPF=ipT+?4fTR#GQlMQ1mEeR$%vGe z!J|N=A@Ln4In{U)97r5qaxkQ1ojLXV_sLZ#!Vt)O+Uimms_ibeR;LLw7kg;Jz3wK1 zP{GqKi!*s^xVTNp^#AuVKVp95D8%CUar5IAkUuSs{0aFJc=sm+0 %s', req.method, req.url, socket.filename); - - req.on('end', function() { - if (req.url !== '/') { - res.end(JSON.stringify({ - method: req.method, - url: req.url, - filename: socket.filename, - })); - return; - } - - res.writeHead(200, {'content-type': 'text/html'}); - res.end( - '

    '+ - '
    '+ - '
    '+ - ''+ - '' - ); - }); -}); - -server.on('connection', function(socket) { - connections++; - - socket.id = connections; - socket.filename = 'connection-' + socket.id + '.http'; - socket.file = fs.createWriteStream(socket.filename); - socket.pipe(socket.file); - - console.log('--> %s', socket.filename); - socket.on('close', function() { - console.log('<-- %s', socket.filename); - }); -}); - -var port = process.env.PORT || 8080; -server.listen(port, function() { - console.log('Recording connections on port %s', port); -}); diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-connection-aborted.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-connection-aborted.js deleted file mode 100644 index bd83e1d6..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-connection-aborted.js +++ /dev/null @@ -1,27 +0,0 @@ -var assert = require('assert'); -var http = require('http'); -var net = require('net'); -var multiparty = require('../../'); - -var server = http.createServer(function (req, res) { - var form = new multiparty.Form(); - var aborted_received = false; - form.on('aborted', function () { - aborted_received = true; - }); - form.on('error', function () { - assert(aborted_received, 'Error event should follow aborted'); - server.close(); - }); - form.on('end', function () { - throw new Error('Unexpected "end" event'); - }); - form.parse(req); -}).listen(0, 'localhost', function () { - var client = net.connect(server.address().port); - client.write( - "POST / HTTP/1.1\r\n" + - "Content-Length: 70\r\n" + - "Content-Type: multipart/form-data; boundary=foo\r\n\r\n"); - client.end(); -}); diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-content-transfer-encoding.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-content-transfer-encoding.js deleted file mode 100644 index 35e5a1f8..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-content-transfer-encoding.js +++ /dev/null @@ -1,52 +0,0 @@ -var assert = require('assert') - , multiparty = require('../../') - , http = require('http') - , path = require('path') - , TMP_PATH = path.join(__dirname, '..', 'tmp') - -var server = http.createServer(function(req, res) { - var form = new multiparty.Form(); - form.uploadDir = TMP_PATH; - form.on('close', function () { - throw new Error('Unexpected "close" event'); - }); - form.on('end', function () { - throw new Error('Unexpected "end" event'); - }); - form.on('error', function (e) { - res.writeHead(500); - res.end(e.message); - }); - form.parse(req); -}); - -server.listen(0, function() { - var body = - '--foo\r\n' + - 'Content-Disposition: form-data; name="file1"; filename="file1"\r\n' + - 'Content-Type: application/octet-stream\r\n' + - '\r\nThis is the first file\r\n' + - '--foo\r\n' + - 'Content-Type: application/octet-stream\r\n' + - 'Content-Disposition: form-data; name="file2"; filename="file2"\r\n' + - 'Content-Transfer-Encoding: unknown\r\n' + - '\r\nThis is the second file\r\n' + - '--foo--\r\n'; - - var req = http.request({ - method: 'POST', - port: server.address().port, - headers: { - 'Content-Length': body.length, - 'Content-Type': 'multipart/form-data; boundary=foo' - } - }); - req.on('response', function (res) { - assert.equal(res.statusCode, 500); - res.on('data', function () {}); - res.on('end', function () { - server.close(); - }); - }); - req.end(body); -}); diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-invalid.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-invalid.js deleted file mode 100644 index ede541da..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-invalid.js +++ /dev/null @@ -1,35 +0,0 @@ -var superagent = require('superagent') - , multiparty = require('../../') - , http = require('http') - -var server = http.createServer(function(req, resp) { - var form = new multiparty.Form(); - - var errCount = 0; - form.on('error', function(err) { - errCount += 1; - resp.end(); - }); - form.on('file', function(name, file) { - }); - form.on('field', function(name, file) { - }); - - form.parse(req); -}); -server.listen(function() { - var url = 'http://localhost:' + server.address().port + '/' - var req = superagent.post(url) - req.set('Content-Type', 'multipart/form-data; boundary=foo') - req.write('--foo\r\n') - req.write('Content-filename="foo.txt"\r\n') - req.write('\r\n') - req.write('some text here') - req.write('Content-Disposition: form-data; name="text"; filename="bar.txt"\r\n') - req.write('\r\n') - req.write('some more text stuff') - req.write('\r\n--foo--') - req.end(function(err, resp) { - server.close(); - }); -}); diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-15.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-15.js deleted file mode 100644 index 43982fa7..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-15.js +++ /dev/null @@ -1,88 +0,0 @@ -var http = require('http') - , multiparty = require('../../') - , assert = require('assert') - , superagent = require('superagent') - , path = require('path') - -var server = http.createServer(function(req, res) { - assert.strictEqual(req.url, '/upload'); - assert.strictEqual(req.method, 'POST'); - - var form = new multiparty.Form({autoFields:true,autoFiles:true}); - - form.on('error', function(err) { - console.log(err); - }); - - form.on('close', function() { - }); - - var fileCount = 0; - form.on('file', function(name, file) { - fileCount += 1; - }); - - form.parse(req, function(err, fields, files) { - var objFileCount = 0; - for (var file in files) { - objFileCount += 1; - } - // multiparty does NOT try to do intelligent things based on - // the part name. - assert.strictEqual(fileCount, 2); - assert.strictEqual(objFileCount, 1); - res.end(); - }); -}); -server.listen(function() { - var url = 'http://localhost:' + server.address().port + '/upload'; - var req = superagent.post(url); - req.attach('files[]', fixture('pf1y5.png'), 'SOG2.JPG'); - req.attach('files[]', fixture('binaryfile.tar.gz'), 'BenF364_LIB353.zip'); - - // Get the existing boundary. - var contentType = req.get('content-type'); - var split = contentType.split(' '); - - // Set the content-type. - req.set('content-type', split.join('')); - - req.end(function(err, resp) { - assert.ifError(err); - resp.on('end', function() { - server.close(); - }); - }); - - // No space. - createRequest(''); - - // Single space. - createRequest(' '); - - // Multiple spaces. - createRequest(' '); -}); - -function createRequest(separator) { - var url = 'http://localhost:' + server.address().port + '/upload'; - var req = superagent.post(url); - req.attach('files[]', fixture('pf1y5.png'), 'SOG2.JPG'); - req.attach('files[]', fixture('binaryfile.tar.gz'), 'BenF364_LIB353.zip'); - - // Get the existing boundary. - var contentType = req.get('content-type'); - var split = contentType.split(' '); - - // Set the content-type. - req.set('content-type', split.join(separator)); - - req.end(function(err, resp) { - assert.ifError(err); - // We don't close the server, to allow other requests to pass. - }); -} - -function fixture(name) { - return path.join(__dirname, '..', 'fixture', 'file', name) -} diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-19.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-19.js deleted file mode 100644 index d7da0cfb..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-19.js +++ /dev/null @@ -1,44 +0,0 @@ -var assert = require('assert'); -var http = require('http'); -var net = require('net'); -var multiparty = require('../../'); - -var client; -var server = http.createServer(function (req, res) { - var form = new multiparty.Form({maxFields: 1}); - form.on('aborted', function () { - throw new Error("did not expect aborted"); - }); - var first = true; - form.on('error', function (err) { - assert.ok(first); - first = false; - client.end(); - assert.ok(/maxFields/.test(err.message)); - server.close(); - }); - form.on('end', function () { - throw new Error('Unexpected "end" event'); - }); - form.parse(req); -}); -server.listen(function() { - client = net.connect(server.address().port); - - client.write("POST /upload HTTP/1.1\r\n" + - "Content-Length: 728\r\n" + - "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvfUZhxgsZDO7FXLF\r\n" + - "\r\n" + - "------WebKitFormBoundaryvfUZhxgsZDO7FXLF\r\n" + - "Content-Disposition: form-data; name=\"title\"\r\n" + - "\r\n" + - "foofoo" + - "\r\n" + - "------WebKitFormBoundaryvfUZhxgsZDO7FXLF\r\n" + - "Content-Disposition: form-data; name=\"upload\"; filename=\"blah1.txt\"\r\n" + - "Content-Type: text/plain\r\n" + - "\r\n" + - "hi1\r\n" + - "\r\n" + - "------WebKitFormBoundaryvfUZhxgsZDO7FXLF\r\n"); -}); diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-21.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-21.js deleted file mode 100644 index 155fba05..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-21.js +++ /dev/null @@ -1,66 +0,0 @@ -var assert = require('assert'); -var http = require('http'); -var net = require('net'); -var multiparty = require('../../'); - -var client; -var server = http.createServer(function(req, res) { - var form = new multiparty.Form(); - - form.parse(req, function(err, fieldsTable, filesTable, fieldsList, filesList) { - if (err) { - console.error(err.stack); - return; - } - assert.strictEqual(fieldsList.length, 1); - assert.strictEqual(fieldsList[0].name, "title"); - assert.strictEqual(fieldsList[0].value, "foofoo"); - assert.strictEqual(filesList.length, 4); - assert.strictEqual(filesList[0].fieldName, "upload"); - assert.strictEqual(filesList[1].fieldName, "upload"); - assert.strictEqual(filesList[2].fieldName, "upload"); - assert.strictEqual(filesList[3].fieldName, "upload"); - res.end(); - client.end(); - server.close(); - }); -}); -server.listen(function() { - client = net.connect(server.address().port); - - client.write("POST /upload HTTP/1.1\r\n" + - "Content-Length: 728\r\n" + - "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvfUZhxgsZDO7FXLF\r\n" + - "\r\n" + - "------WebKitFormBoundaryvfUZhxgsZDO7FXLF\r\n" + - "Content-Disposition: form-data; name=\"title\"\r\n" + - "\r\n" + - "foofoo" + - "\r\n" + - "------WebKitFormBoundaryvfUZhxgsZDO7FXLF\r\n" + - "Content-Disposition: form-data; name=\"upload\"; filename=\"blah1.txt\"\r\n" + - "Content-Type: text/plain\r\n" + - "\r\n" + - "hi1\r\n" + - "\r\n" + - "------WebKitFormBoundaryvfUZhxgsZDO7FXLF\r\n" + - "Content-Disposition: form-data; name=\"upload\"; filename=\"blah2.txt\"\r\n" + - "Content-Type: text/plain\r\n" + - "\r\n" + - "hi2\r\n" + - "\r\n" + - "------WebKitFormBoundaryvfUZhxgsZDO7FXLF\r\n" + - "Content-Disposition: form-data; name=\"upload\"; filename=\"blah3.txt\"\r\n" + - "Content-Type: text/plain\r\n" + - "\r\n" + - "hi3\r\n" + - "\r\n" + - "------WebKitFormBoundaryvfUZhxgsZDO7FXLF\r\n" + - "Content-Disposition: form-data; name=\"upload\"; filename=\"blah4.txt\"\r\n" + - "Content-Type: text/plain\r\n" + - "\r\n" + - "hi4\r\n" + - "\r\n" + - "------WebKitFormBoundaryvfUZhxgsZDO7FXLF--\r\n" - ); -}); diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-4.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-4.js deleted file mode 100644 index 66b2a690..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-4.js +++ /dev/null @@ -1,51 +0,0 @@ -var http = require('http') - , multiparty = require('../../') - , assert = require('assert') - , superagent = require('superagent') - , path = require('path') - -var server = http.createServer(function(req, res) { - assert.strictEqual(req.url, '/upload'); - assert.strictEqual(req.method, 'POST'); - - var form = new multiparty.Form({autoFields:true,autoFiles:true}); - - form.on('error', function(err) { - console.log(err); - }); - - form.on('close', function() { - }); - - var fileCount = 0; - form.on('file', function(name, file) { - fileCount += 1; - }); - - form.parse(req, function(err, fields, files) { - var objFileCount = 0; - for (var file in files) { - objFileCount += 1; - } - // multiparty does NOT try to do intelligent things based on - // the part name. - assert.strictEqual(fileCount, 2); - assert.strictEqual(objFileCount, 1); - res.end(); - }); -}); -server.listen(function() { - var url = 'http://localhost:' + server.address().port + '/upload'; - var req = superagent.post(url); - req.attach('files[]', fixture('pf1y5.png'), 'SOG2.JPG'); - req.attach('files[]', fixture('binaryfile.tar.gz'), 'BenF364_LIB353.zip'); - req.end(function(err, resp) { - assert.ifError(err); - resp.on('end', function() { - server.close(); - }); - }); -}); -function fixture(name) { - return path.join(__dirname, '..', 'fixture', 'file', name) -} diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-46.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-46.js deleted file mode 100644 index 676b8709..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-46.js +++ /dev/null @@ -1,49 +0,0 @@ -var http = require('http'), - multiparty = require('../../'), - request = require('request'), - assert = require('assert'); - -var host = 'localhost'; - -var index = [ - '
    ', - ' ', - ' ', - '
    ' -].join("\n"); - -var server = http.createServer(function(req, res) { - - // Show a form for testing purposes. - if (req.method === 'GET') { - res.writeHead(200, {'content-type': 'text/html'}); - res.end(index); - return; - } - - // Parse form and write results to response. - var form = new multiparty.Form(); - form.parse(req, function(err, fields, files) { - res.writeHead(200, {'content-type': 'text/plain'}); - res.write(JSON.stringify({err: err, fields: fields, files: files})); - res.end(); - }); - -}).listen(0, host, function() { - - //console.log("Server up and running..."); - - var server = this, - url = 'http://' + host + ':' + server.address().port; - - var parts = [ - {'Content-Disposition': 'form-data; name="foo"', 'body': 'bar'} - ] - - var req = request({method: 'POST', url: url, multipart: parts}, function(e, res, body) { - var obj = JSON.parse(body); - assert.equal("bar", obj.fields.foo); - server.close(); - }); - -}); diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-5.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-5.js deleted file mode 100644 index 80eadf20..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/standalone/test-issue-5.js +++ /dev/null @@ -1,39 +0,0 @@ -var assert = require('assert'); -var http = require('http'); -var net = require('net'); -var multiparty = require('../../'); - -var client; -var attachmentCount = 510; -var server = http.createServer(function(req, res) { - var form = new multiparty.Form({maxFields: 10000}); - - form.parse(req, function(err, fieldsTable, filesTable, fieldsList, filesList) { - assert.strictEqual(err.code, "EMFILE"); - res.end(); - client.end(); - server.close(); - }); -}); -server.listen(function() { - client = net.connect(server.address().port); - - var boundary = "------WebKitFormBoundaryvfUZhxgsZDO7FXLF\r\n"; - var oneAttachment = boundary + - "Content-Disposition: form-data; name=\"upload\"; filename=\"blah1.txt\"\r\n" + - "Content-Type: text/plain\r\n" + - "\r\n" + - "hi1\r\n" + - "\r\n"; - var payloadSize = oneAttachment.length * attachmentCount + boundary.length; - - client.write("POST /upload HTTP/1.1\r\n" + - "Content-Length: " + payloadSize + "\r\n" + - "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvfUZhxgsZDO7FXLF\r\n" + - "\r\n"); - - for (var i = 0; i < attachmentCount; i += 1) { - client.write(oneAttachment); - } - client.write(boundary); -}); diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/test/test.js b/node_modules/express/node_modules/connect/node_modules/multiparty/test/test.js deleted file mode 100644 index 199d5cdd..00000000 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/test/test.js +++ /dev/null @@ -1,117 +0,0 @@ -var spawn = require('child_process').spawn - , findit = require('findit') - , path = require('path') - , hashish = require('hashish') - , fs = require('fs') - , http = require('http') - , net = require('net') - , assert = require('assert') - , multiparty = require('../') - , mkdirp = require('mkdirp') - , STANDALONE_PATH = path.join(__dirname, 'standalone') - , server = http.createServer() - , PORT = 13532 - , FIXTURE_PATH = path.join(__dirname, 'fixture') - , TMP_PATH = path.join(__dirname, 'tmp') - -mkdirp.sync(TMP_PATH); - -describe("fixtures", function() { - before(function(done) { - server.listen(PORT, done); - }); - var fixtures = []; - findit - .sync(path.join(FIXTURE_PATH, 'js')) - .forEach(function(jsPath) { - if (!/\.js$/.test(jsPath)) return; - var group = path.basename(jsPath, '.js'); - hashish.forEach(require(jsPath), function(fixture, name) { - it(group + '/' + name, createTest({ - name : group + '/' + name, - fixture : fixture, - })); - }); - }); -}); - -describe("standalone", function() { - findit - .sync(STANDALONE_PATH) - .forEach(function(jsPath) { - if (!/\.js$/.test(jsPath)) return; - it(path.basename(jsPath, '.js'), function(done) { - var child = spawn(process.execPath, [jsPath], { stdio: 'inherit' }); - child.on('error', function(err) { - done(err); - }); - child.on('exit', function(code) { - if (code) return done(new Error("exited with code " + code)); - done(); - }); - }); - }); -}); - -function createTest(fixture) { - var name = fixture.name; - fixture = fixture.fixture; - return function(done) { - uploadFixture(name, function(err, parts) { - if (err) return done(err); - fixture.forEach(function(expectedPart, i) { - var parsedPart = parts[i]; - assert.equal(parsedPart.type, expectedPart.type); - assert.equal(parsedPart.name, expectedPart.name); - - if (parsedPart.type === 'file') { - var file = parsedPart.value; - assert.equal(file.originalFilename, expectedPart.filename); - if(expectedPart.sha1) assert.strictEqual(file.hash, expectedPart.sha1); - if(expectedPart.size) assert.strictEqual(file.size, expectedPart.size); - } - }); - done(); - }); - }; - -} - -function uploadFixture(name, cb) { - server.once('request', function(req, res) { - var parts = []; - var form = new multiparty.Form({ - autoFields: true, - autoFiles: true, - }); - form.uploadDir = TMP_PATH; - form.hash = "sha1"; - - form.on('error', callback); - form.on('file', function(name, value) { - parts.push({type: 'file', name: name, value: value}); - }); - form.on('field', function(name, value) { - parts.push({type: 'field', name: name, value: value}); - }); - form.on('close', function() { - res.end('OK'); - callback(null, parts); - }); - form.parse(req); - - function callback() { - var realCallback = cb; - cb = function() {}; - realCallback.apply(null, arguments); - } - }); - - var socket = net.createConnection(PORT); - var file = fs.createReadStream(FIXTURE_PATH + '/http/' + name); - - file.pipe(socket, {end: false}); - socket.on('data', function () { - socket.end(); - }); -} diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/LICENSE b/node_modules/express/node_modules/connect/node_modules/negotiator/LICENSE deleted file mode 100644 index 42ca2e7d..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Original "Negotiator" program Copyright Federico Romero -Port to JavaScript Copyright Isaac Z. Schlueter - -All rights reserved. - -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/express/node_modules/connect/node_modules/negotiator/examples/accept.js b/node_modules/express/node_modules/connect/node_modules/negotiator/examples/accept.js deleted file mode 100644 index 2a180391..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/examples/accept.js +++ /dev/null @@ -1,47 +0,0 @@ -(function() { - var Negotiator, availableMediaTypes, http, key, representations, server, val; - - Negotiator = require('../lib/negotiator').Negotiator; - - http = require('http'); - - representations = { - 'text/html': '

    Hello world!

    ', - 'text/plain': 'Hello World!', - 'application/json': JSON.stringify({ - hello: 'world!' - }) - }; - - availableMediaTypes = (function() { - var _results; - _results = []; - for (key in representations) { - val = representations[key]; - _results.push(key); - } - return _results; - })(); - - server = http.createServer(function(req, res) { - var mediaType, negotiator; - negotiator = new Negotiator(req); - console.log("Accept: " + req.headers['accept']); - console.log("Preferred: " + (negotiator.preferredMediaTypes())); - console.log("Possible: " + (negotiator.preferredMediaTypes(availableMediaTypes))); - mediaType = negotiator.preferredMediaType(availableMediaTypes); - console.log("Selected: " + mediaType); - if (mediaType) { - res.writeHead(200, { - 'Content-Type': mediaType - }); - return res.end(representations[mediaType]); - } else { - res.writeHead(406); - return res.end(); - } - }); - - server.listen(8080); - -}).call(this); diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/examples/charset.js b/node_modules/express/node_modules/connect/node_modules/negotiator/examples/charset.js deleted file mode 100644 index 6455effa..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/examples/charset.js +++ /dev/null @@ -1,52 +0,0 @@ -(function() { - var Buffer, Iconv, Negotiator, availableCharsets, http, iconv, key, message, messages, server, val; - - Negotiator = require('../lib/negotiator').Negotiator; - - http = require('http'); - - Buffer = require('buffer').Buffer; - - Iconv = require('iconv').Iconv; - - iconv = new Iconv('UTF-8', 'ISO-8859-1'); - - message = "ë"; - - messages = { - 'utf-8': message, - 'iso-8859-1': iconv.convert(new Buffer(message)) - }; - - availableCharsets = (function() { - var _results; - _results = []; - for (key in messages) { - val = messages[key]; - _results.push(key); - } - return _results; - })(); - - server = http.createServer(function(req, res) { - var charset, negotiator; - negotiator = new Negotiator(req); - console.log("Accept-Charset: " + req.headers['accept-charset']); - console.log("Preferred: " + (negotiator.preferredCharsets())); - console.log("Possible: " + (negotiator.preferredCharsets(availableCharsets))); - charset = negotiator.preferredCharset(availableCharsets); - console.log("Selected: " + charset); - if (charset) { - res.writeHead(200, { - 'Content-Type': "text/html; charset=" + charset - }); - return res.end(messages[charset]); - } else { - res.writeHead(406); - return res.end(); - } - }); - - server.listen(8080); - -}).call(this); diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/examples/encoding.js b/node_modules/express/node_modules/connect/node_modules/negotiator/examples/encoding.js deleted file mode 100644 index a02d0f46..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/examples/encoding.js +++ /dev/null @@ -1,48 +0,0 @@ -(function() { - var Negotiator, gbuf, http, messages; - - Negotiator = require('../lib/negotiator').Negotiator; - - http = require('http'); - - gbuf = require('gzip-buffer'); - - messages = { - identity: 'Hello World' - }; - - gbuf.gzip(messages.identity, function(zipped) { - var availableEncodings, key, server, val; - messages.gzip = zipped; - availableEncodings = (function() { - var _results; - _results = []; - for (key in messages) { - val = messages[key]; - _results.push(key); - } - return _results; - })(); - console.log(availableEncodings); - server = http.createServer(function(req, res) { - var encoding, negotiator; - negotiator = new Negotiator(req); - console.log("Accept-Encoding: " + req.headers['accept-encoding']); - console.log("Preferred: " + (negotiator.preferredEncodings())); - console.log("Possible: " + (negotiator.preferredEncodings(availableEncodings))); - encoding = negotiator.preferredEncoding(availableEncodings); - console.log("Selected: " + encoding); - if (encoding) { - res.writeHead(200, { - 'Content-Encoding': encoding - }); - return res.end(messages[encoding]); - } else { - res.writeHead(406); - return res.end(); - } - }); - return server.listen(8080); - }); - -}).call(this); diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/examples/language.js b/node_modules/express/node_modules/connect/node_modules/negotiator/examples/language.js deleted file mode 100644 index f161743f..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/examples/language.js +++ /dev/null @@ -1,44 +0,0 @@ -(function() { - var Negotiator, availableLanguages, http, key, messages, server, val; - - Negotiator = require('../lib/negotiator').Negotiator; - - http = require('http'); - - messages = { - es: "¡Hola Mundo!", - en: "Hello World!" - }; - - availableLanguages = (function() { - var _results; - _results = []; - for (key in messages) { - val = messages[key]; - _results.push(key); - } - return _results; - })(); - - server = http.createServer(function(req, res) { - var language, negotiator; - negotiator = new Negotiator(req); - console.log("Accept-Language: " + req.headers['accept-language']); - console.log("Preferred: " + (negotiator.preferredLanguages())); - console.log("Possible: " + (negotiator.preferredLanguages(availableLanguages))); - language = negotiator.preferredLanguage(availableLanguages); - console.log("Selected: " + language); - if (language) { - res.writeHead(200, { - 'Content-Language': language - }); - return res.end(messages[language]); - } else { - res.writeHead(406); - return res.end(); - } - }); - - server.listen(8080); - -}).call(this); diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/lib/charset.js b/node_modules/express/node_modules/connect/node_modules/negotiator/lib/charset.js deleted file mode 100644 index 33004572..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/lib/charset.js +++ /dev/null @@ -1,71 +0,0 @@ -module.exports = preferredCharsets; -preferredCharsets.preferredCharsets = preferredCharsets; - -function parseAcceptCharset(accept) { - return accept.split(',').map(function(e) { - return parseCharset(e.trim()); - }).filter(function(e) { - return e && e.q > 0; - }); -} - -function parseCharset(s) { - var match = s.match(/^\s*(\S+?)\s*(?:;(.*))?$/); - if (!match) return null; - - var charset = match[1]; - var q = 1; - if (match[2]) { - var params = match[2].split(';') - for (var i = 0; i < params.length; i ++) { - var p = params[i].trim().split('='); - if (p[0] === 'q') { - q = parseFloat(p[1]); - break; - } - } - } - - return { - charset: charset, - q: q - }; -} - -function getCharsetPriority(charset, accepted) { - return (accepted.filter(function(a) { - return specify(charset, a); - }).sort(function (a, b) { - // revsort - return a.q === b.q ? 0 : a.q > b.q ? -1 : 1; - })[0] || {q:0}).q; -} - -function specify(charset, spec) { - if (spec.charset === '*' || spec.charset === charset) { - return spec; - } -}; - -function preferredCharsets(accept, provided) { - accept = parseAcceptCharset(accept || ''); - if (provided) { - return provided.map(function(type) { - return [type, getCharsetPriority(type, accept)]; - }).filter(function(pair) { - return pair[1] > 0; - }).sort(function(a, b) { - // revsort - return a[1] === b[1] ? 0 : a[1] > b[1] ? -1 : 1; - }).map(function(pair) { - return pair[0]; - }); - } else { - return accept.sort(function (a, b) { - // revsort - return a.q < b.q ? 1 : -1; - }).map(function(type) { - return type.charset; - }); - } -} diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/lib/encoding.js b/node_modules/express/node_modules/connect/node_modules/negotiator/lib/encoding.js deleted file mode 100644 index b4fc889f..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/lib/encoding.js +++ /dev/null @@ -1,89 +0,0 @@ -module.exports = preferredEncodings; -preferredEncodings.preferredEncodings = preferredEncodings; - -function parseAcceptEncoding(accept) { - var acceptableEncodings; - - if (accept) { - acceptableEncodings = accept.split(',').map(function(e) { - return parseEncoding(e.trim()); - }); - } else { - acceptableEncodings = []; - } - - if (!acceptableEncodings.some(function(e) { - return e && e.encoding === 'identity'; - })) { - acceptableEncodings.push({ - encoding: 'identity', - q: 0.1 - }); - } - - return acceptableEncodings.filter(function(e) { - return e && e.q > 0; - }); -} - -function parseEncoding(s) { - var match = s.match(/^\s*(\S+?)\s*(?:;(.*))?$/); - - if (!match) return null; - - var encoding = match[1]; - var q = 1; - if (match[2]) { - var params = match[2].split(';'); - for (var i = 0; i < params.length; i ++) { - var p = params[i].trim().split('='); - if (p[0] === 'q') { - q = parseFloat(p[1]); - break; - } - } - } - - return { - encoding: encoding, - q: q - }; -} - -function getEncodingPriority(encoding, accepted) { - return (accepted.filter(function(a) { - return specify(encoding, a); - }).sort(function (a, b) { - // revsort - return a.q === b.q ? 0 : a.q > b.q ? -1 : 1; - })[0] || {q:0}).q; -} - -function specify(encoding, spec) { - if (spec.encoding === '*' || spec.encoding === encoding) { - return spec; - } -} - -function preferredEncodings(accept, provided) { - accept = parseAcceptEncoding(accept || ''); - if (provided) { - return provided.map(function(type) { - return [type, getEncodingPriority(type, accept)]; - }).filter(function(pair) { - return pair[1] > 0; - }).sort(function(a, b) { - // revsort - return a[1] === b[1] ? 0 : a[1] > b[1] ? -1 : 1; - }).map(function(pair) { - return pair[0]; - }); - } else { - return accept.sort(function (a, b) { - // revsort - return a.q < b.q ? 1 : -1; - }).map(function(type) { - return type.encoding; - }); - } -} diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/lib/language.js b/node_modules/express/node_modules/connect/node_modules/negotiator/lib/language.js deleted file mode 100644 index 432b7026..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/lib/language.js +++ /dev/null @@ -1,92 +0,0 @@ -module.exports = preferredLanguages; -preferredLanguages.preferredLanguages = preferredLanguages; - -function parseAcceptLanguage(accept) { - return accept.split(',').map(function(e) { - return parseLanguage(e.trim()); - }).filter(function(e) { - return e && e.q > 0; - }); -} - -function parseLanguage(s) { - var match = s.match(/^\s*(\S+?)(?:-(\S+?))?\s*(?:;(.*))?$/); - if (!match) return null; - - var prefix = match[1], - suffix = match[2], - full = prefix; - - if (suffix) full += "-" + suffix; - - var q = 1; - if (match[3]) { - var params = match[3].split(';') - for (var i = 0; i < params.length; i ++) { - var p = params[i].split('='); - if (p[0] === 'q') q = parseFloat(p[1]); - } - } - - return { - prefix: prefix, - suffix: suffix, - q: q, - full: full - }; -} - -function getLanguagePriority(language, accepted) { - var match = getClosestMatch(language, accepted); - return match ? match.q : 0; -} - -function getClosestMatch(language, accepted) { - var parsed = parseLanguage(language); - - var matches = accepted.filter(function(a) { - return a.full === parsed.full; - }); - if (matches.length) return matches[0]; - - matches = accepted.filter(function(a) { - return a.prefix === parsed.prefix && !a.suffix; - }); - if (matches.length) return matches[0]; - - matches = accepted.filter(function(a) { - return a.prefix === parsed.prefix; - }); - if (matches.length) return matches[0]; - - matches = accepted.filter(function(a) { - return a.prefix === '*'; - }); - return matches[0]; -} - -function preferredLanguages(accept, provided) { - accept = parseAcceptLanguage(accept || ''); - if (provided) { - - var ret = provided.map(function(type) { - return [type, getLanguagePriority(type, accept)]; - }).filter(function(pair) { - return pair[1] > 0; - }).sort(function(a, b) { - // revsort - return a[1] === b[1] ? 0 : a[1] > b[1] ? -1 : 1; - }).map(function(pair) { - return pair[0]; - }); - return ret; - - } else { - return accept.sort(function (a, b) { - // revsort - return a.q < b.q ? 1 : -1; - }).map(function(type) { - return type.full; - }); - } -} diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/lib/mediaType.js b/node_modules/express/node_modules/connect/node_modules/negotiator/lib/mediaType.js deleted file mode 100644 index 3dc017fd..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/lib/mediaType.js +++ /dev/null @@ -1,101 +0,0 @@ -module.exports = preferredMediaTypes; -preferredMediaTypes.preferredMediaTypes = preferredMediaTypes; - -function parseAccept(accept) { - return accept.split(',').map(function(e) { - return parseMediaType(e.trim()); - }).filter(function(e) { - return e && e.q > 0; - }); -}; - -function parseMediaType(s) { - var match = s.match(/\s*(\S+)\/([^;\s]+)\s*(?:;(.*))?/); - if (!match) return null; - - var type = match[1], - subtype = match[2], - full = "" + type + "/" + subtype, - params = {}, - q = 1; - - if (match[3]) { - params = match[3].split(';').map(function(s) { - return s.trim().split('='); - }).reduce(function (set, p) { - set[p[0]] = p[1]; - return set - }, params); - - if (params.q != null) { - q = parseFloat(params.q); - delete params.q; - } - } - - return { - type: type, - subtype: subtype, - params: params, - q: q, - full: full - }; -} - -function getMediaTypePriority(type, accepted) { - return (accepted.filter(function(a) { - return specify(type, a); - }).sort(function (a, b) { - // revsort - return a.q > b.q ? -1 : 1; - })[0] || {q:0}).q; -} - -function specifies(spec, type) { - return spec === '*' || spec === type; -} - -function specify(type, spec) { - var p = parseMediaType(type); - - if (spec.params) { - var keys = Object.keys(spec.params); - if (keys.some(function (k) { - return !specifies(spec.params[k], p.params[k]); - })) { - // some didn't specify. - return null; - } - } - - if (specifies(spec.type, p.type) && - specifies(spec.subtype, p.subtype)) { - return spec; - } -} - -function preferredMediaTypes(accept, provided) { - accept = parseAccept(accept || ''); - if (provided) { - return provided.map(function(type) { - return [type, getMediaTypePriority(type, accept)]; - }).filter(function(pair) { - return pair[1] > 0; - }).sort(function(a, b) { - // revsort - return a[1] === b[1] ? 0 : a[1] > b[1] ? -1 : 1; - }).map(function(pair) { - return pair[0]; - }); - - } else { - return accept.sort(function (a, b) { - // revsort - return a.q < b.q ? 1 : -1; - }).map(function(type) { - return type.full; - }); - } -} - - diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/lib/negotiator.js b/node_modules/express/node_modules/connect/node_modules/negotiator/lib/negotiator.js deleted file mode 100644 index fe0e58a5..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/lib/negotiator.js +++ /dev/null @@ -1,29 +0,0 @@ -module.exports = Negotiator; -Negotiator.Negotiator = Negotiator; - -function Negotiator(request) { - if (!(this instanceof Negotiator)) return new Negotiator(request); - this.request = request; -} - -var set = { preferredCharset: [require('./charset.js'), 'accept-charset'], - preferredEncoding: [require('./encoding.js'), 'accept-encoding'], - preferredLanguage: [require('./language.js'), 'accept-language'], - preferredMediaType: [require('./mediaType.js'), 'accept'] }; - -Object.keys(set).forEach(function (k) { - var mh = set[k], - method = mh[0], - header = mh[1], - singular = k, - plural = k + 's'; - - Negotiator.prototype[plural] = function (available) { - return method(this.request.headers[header], available); - }; - - Negotiator.prototype[singular] = function(available) { - var set = this[plural](available); - if (set) return set[0]; - }; -}) diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/package.json b/node_modules/express/node_modules/connect/node_modules/negotiator/package.json deleted file mode 100644 index 62a98115..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "negotiator", - "description": "HTTP content negotiation", - "version": "0.3.0", - "author": { - "name": "Federico Romero", - "email": "federico.romero@outboxlabs.com" - }, - "contributors": [ - { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - } - ], - "repository": { - "type": "git", - "url": "git://github.com/federomero/negotiator.git" - }, - "keywords": [ - "http", - "content negotiation", - "accept", - "accept-language", - "accept-encoding", - "accept-charset" - ], - "engine": "node >= 0.6", - "license": "MIT", - "devDependencies": { - "nodeunit": "0.6.x" - }, - "scripts": { - "test": "nodeunit test" - }, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "main": "lib/negotiator.js", - "readme": "# Negotiator\n\nAn HTTP content negotiator for node.js written in javascript.\n\n# Accept Negotiation\n\n Negotiator = require('negotiator')\n\n availableMediaTypes = ['text/html', 'text/plain', 'application/json']\n\n // The negotiator constructor receives a request object\n negotiator = new Negotiator(request)\n\n // Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8'\n\n negotiator.preferredMediaTypes()\n // -> ['text/html', 'image/jpeg', 'application/*']\n\n negotiator.preferredMediaTypes(availableMediaTypes)\n // -> ['text/html', 'application/json']\n\n negotiator.preferredMediaType(availableMediaTypes)\n // -> 'text/html'\n\nYou can check a working example at `examples/accept.js`.\n\n## Methods\n\n`preferredMediaTypes(availableMediaTypes)`:\n\nReturns an array of preferred media types ordered by priority from a list of available media types.\n\n`preferredMediaType(availableMediaType)`:\n\nReturns the top preferred media type from a list of available media types.\n\n# Accept-Language Negotiation\n\n Negotiator = require('negotiator')\n\n negotiator = new Negotiator(request)\n\n availableLanguages = 'en', 'es', 'fr'\n\n // Let's say Accept-Language header is 'en;q=0.8, es, pt'\n\n negotiator.preferredLanguages()\n // -> ['es', 'pt', 'en']\n\n negotiator.preferredLanguages(availableLanguages)\n // -> ['es', 'en']\n\n language = negotiator.preferredLanguage(availableLanguages)\n // -> 'es'\n\nYou can check a working example at `examples/language.js`.\n\n## Methods\n\n`preferredLanguages(availableLanguages)`:\n\nReturns an array of preferred languages ordered by priority from a list of available languages.\n\n`preferredLanguage(availableLanguages)`:\n\nReturns the top preferred language from a list of available languages.\n\n# Accept-Charset Negotiation\n\n Negotiator = require('negotiator')\n\n availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']\n\n negotiator = new Negotiator(request)\n\n // Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'\n\n negotiator.preferredCharsets()\n // -> ['utf-8', 'iso-8859-1', 'utf-7']\n\n negotiator.preferredCharsets(availableCharsets)\n // -> ['utf-8', 'iso-8859-1']\n\n negotiator.preferredCharset(availableCharsets)\n // -> 'utf-8'\n\nYou can check a working example at `examples/charset.js`.\n\n## Methods\n\n`preferredCharsets(availableCharsets)`:\n\nReturns an array of preferred charsets ordered by priority from a list of available charsets.\n\n`preferredCharset(availableCharsets)`:\n\nReturns the top preferred charset from a list of available charsets.\n\n# Accept-Encoding Negotiation\n\n Negotiator = require('negotiator').Negotiator\n\n availableEncodings = ['identity', 'gzip']\n\n negotiator = new Negotiator(request)\n\n // Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'\n\n negotiator.preferredEncodings()\n // -> ['gzip', 'identity', 'compress']\n\n negotiator.preferredEncodings(availableEncodings)\n // -> ['gzip', 'identity']\n\n negotiator.preferredEncoding(availableEncodings)\n // -> 'gzip'\n\nYou can check a working example at `examples/encoding.js`.\n\n## Methods\n\n`preferredEncodings(availableEncodings)`:\n\nReturns an array of preferred encodings ordered by priority from a list of available encodings.\n\n`preferredEncoding(availableEncodings)`:\n\nReturns the top preferred encoding from a list of available encodings.\n\n# License\n\nMIT\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/federomero/negotiator/issues" - }, - "homepage": "https://github.com/federomero/negotiator", - "dependencies": {}, - "_id": "negotiator@0.3.0", - "dist": { - "shasum": "706d692efeddf574d57ea9fb1ab89a4fa7ee8f60" - }, - "_from": "negotiator@0.3.0", - "_resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.3.0.tgz" -} diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/readme.md b/node_modules/express/node_modules/connect/node_modules/negotiator/readme.md deleted file mode 100644 index 0a077bbe..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/readme.md +++ /dev/null @@ -1,132 +0,0 @@ -# Negotiator - -An HTTP content negotiator for node.js written in javascript. - -# Accept Negotiation - - Negotiator = require('negotiator') - - availableMediaTypes = ['text/html', 'text/plain', 'application/json'] - - // The negotiator constructor receives a request object - negotiator = new Negotiator(request) - - // Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8' - - negotiator.preferredMediaTypes() - // -> ['text/html', 'image/jpeg', 'application/*'] - - negotiator.preferredMediaTypes(availableMediaTypes) - // -> ['text/html', 'application/json'] - - negotiator.preferredMediaType(availableMediaTypes) - // -> 'text/html' - -You can check a working example at `examples/accept.js`. - -## Methods - -`preferredMediaTypes(availableMediaTypes)`: - -Returns an array of preferred media types ordered by priority from a list of available media types. - -`preferredMediaType(availableMediaType)`: - -Returns the top preferred media type from a list of available media types. - -# Accept-Language Negotiation - - Negotiator = require('negotiator') - - negotiator = new Negotiator(request) - - availableLanguages = 'en', 'es', 'fr' - - // Let's say Accept-Language header is 'en;q=0.8, es, pt' - - negotiator.preferredLanguages() - // -> ['es', 'pt', 'en'] - - negotiator.preferredLanguages(availableLanguages) - // -> ['es', 'en'] - - language = negotiator.preferredLanguage(availableLanguages) - // -> 'es' - -You can check a working example at `examples/language.js`. - -## Methods - -`preferredLanguages(availableLanguages)`: - -Returns an array of preferred languages ordered by priority from a list of available languages. - -`preferredLanguage(availableLanguages)`: - -Returns the top preferred language from a list of available languages. - -# Accept-Charset Negotiation - - Negotiator = require('negotiator') - - availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5'] - - negotiator = new Negotiator(request) - - // Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2' - - negotiator.preferredCharsets() - // -> ['utf-8', 'iso-8859-1', 'utf-7'] - - negotiator.preferredCharsets(availableCharsets) - // -> ['utf-8', 'iso-8859-1'] - - negotiator.preferredCharset(availableCharsets) - // -> 'utf-8' - -You can check a working example at `examples/charset.js`. - -## Methods - -`preferredCharsets(availableCharsets)`: - -Returns an array of preferred charsets ordered by priority from a list of available charsets. - -`preferredCharset(availableCharsets)`: - -Returns the top preferred charset from a list of available charsets. - -# Accept-Encoding Negotiation - - Negotiator = require('negotiator').Negotiator - - availableEncodings = ['identity', 'gzip'] - - negotiator = new Negotiator(request) - - // Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5' - - negotiator.preferredEncodings() - // -> ['gzip', 'identity', 'compress'] - - negotiator.preferredEncodings(availableEncodings) - // -> ['gzip', 'identity'] - - negotiator.preferredEncoding(availableEncodings) - // -> 'gzip' - -You can check a working example at `examples/encoding.js`. - -## Methods - -`preferredEncodings(availableEncodings)`: - -Returns an array of preferred encodings ordered by priority from a list of available encodings. - -`preferredEncoding(availableEncodings)`: - -Returns the top preferred encoding from a list of available encodings. - -# License - -MIT diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/test/charset.js b/node_modules/express/node_modules/connect/node_modules/negotiator/test/charset.js deleted file mode 100644 index 79224a75..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/test/charset.js +++ /dev/null @@ -1,62 +0,0 @@ -(function() { - var configuration, preferredCharsets, testConfigurations, testCorrectCharset, _i, _len, - _this = this; - - preferredCharsets = require('../lib/charset').preferredCharsets; - - this["Should not return a charset when no charset is provided"] = function(test) { - test.deepEqual(preferredCharsets('*', []), []); - return test.done(); - }; - - this["Should not return a charset when no charset is acceptable"] = function(test) { - test.deepEqual(preferredCharsets('ISO-8859-1', ['utf-8']), []); - return test.done(); - }; - - this["Should not return a charset with q = 0"] = function(test) { - test.deepEqual(preferredCharsets('utf-8;q=0', ['utf-8']), []); - return test.done(); - }; - - testCorrectCharset = function(c) { - return _this["Should return " + c.selected + " for accept-charset header " + c.accept + " with provided charset " + c.provided] = function(test) { - test.deepEqual(preferredCharsets(c.accept, c.provided), c.selected); - return test.done(); - }; - }; - - testConfigurations = [ - { - accept: 'utf-8', - provided: ['utf-8'], - selected: ['utf-8'] - }, { - accept: '*', - provided: ['utf-8'], - selected: ['utf-8'] - }, { - accept: 'utf-8', - provided: ['utf-8', 'ISO-8859-1'], - selected: ['utf-8'] - }, { - accept: 'utf-8, ISO-8859-1', - provided: ['utf-8'], - selected: ['utf-8'] - }, { - accept: 'utf-8;q=0.8, ISO-8859-1', - provided: ['utf-8', 'ISO-8859-1'], - selected: ['ISO-8859-1', 'utf-8'] - }, { - accept: 'utf-8;q=0.8, ISO-8859-1', - provided: null, - selected: ['ISO-8859-1', 'utf-8'] - } - ]; - - for (_i = 0, _len = testConfigurations.length; _i < _len; _i++) { - configuration = testConfigurations[_i]; - testCorrectCharset(configuration); - } - -}).call(this); diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/test/encoding.js b/node_modules/express/node_modules/connect/node_modules/negotiator/test/encoding.js deleted file mode 100644 index 7859d5e4..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/test/encoding.js +++ /dev/null @@ -1,70 +0,0 @@ -(function() { - var configuration, preferredEncodings, testConfigurations, testCorrectEncoding, _i, _len, - _this = this; - - preferredEncodings = require('../lib/encoding').preferredEncodings; - - this["Should return identity encoding when no encoding is provided"] = function(test) { - test.deepEqual(preferredEncodings(null), ['identity']); - return test.done(); - }; - - this["Should include the identity encoding even if not explicity listed"] = function(test) { - test.ok(preferredEncodings('gzip').indexOf('identity') !== -1); - return test.done(); - }; - - this["Should not return identity encoding if q = 0"] = function(test) { - test.ok(preferredEncodings('identity;q=0').indexOf('identity') === -1); - return test.done(); - }; - - testCorrectEncoding = function(c) { - return _this["Should return " + c.selected + " for accept-encoding header " + c.accept + " with provided encoding " + c.provided] = function(test) { - test.deepEqual(preferredEncodings(c.accept, c.provided), c.selected); - return test.done(); - }; - }; - - testConfigurations = [ - { - accept: 'gzip', - provided: ['identity', 'gzip'], - selected: ['gzip', 'identity'] - }, { - accept: 'gzip, compress', - provided: ['compress'], - selected: ['compress'] - }, { - accept: 'deflate', - provided: ['gzip', 'identity'], - selected: ['identity'] - }, { - accept: '*', - provided: ['identity', 'gzip'], - selected: ['identity', 'gzip'] - }, { - accept: 'gzip, compress', - provided: ['compress', 'identity'], - selected: ['compress', 'identity'] - }, { - accept: 'gzip;q=0.8, identity;q=0.5, *;q=0.3', - provided: ['identity', 'gzip', 'compress'], - selected: ['gzip', 'identity', 'compress'] - }, { - accept: 'gzip;q=0.8, compress', - provided: ['gzip', 'compress'], - selected: ['compress', 'gzip'] - }, { - accept: 'gzip;q=0.8, compress', - provided: null, - selected: ['compress', 'gzip', 'identity'] - } - ]; - - for (_i = 0, _len = testConfigurations.length; _i < _len; _i++) { - configuration = testConfigurations[_i]; - testCorrectEncoding(configuration); - } - -}).call(this); diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/test/language.js b/node_modules/express/node_modules/connect/node_modules/negotiator/test/language.js deleted file mode 100644 index d98f26de..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/test/language.js +++ /dev/null @@ -1,70 +0,0 @@ -(function() { - var configuration, preferredLanguages, testConfigurations, testCorrectType, _i, _len, - _this = this; - - preferredLanguages = require('../lib/language').preferredLanguages; - - this["Should not return a language when no is provided"] = function(test) { - test.deepEqual(preferredLanguages('*', []), []); - return test.done(); - }; - - this["Should not return a language when no language is acceptable"] = function(test) { - test.deepEqual(preferredLanguages('en', ['es']), []); - return test.done(); - }; - - this["Should not return a language with q = 0"] = function(test) { - test.deepEqual(preferredLanguages('en;q=0', ['en']), []); - return test.done(); - }; - - testCorrectType = function(c) { - return _this["Should return " + c.selected + " for accept-language header " + c.accept + " with provided language " + c.provided] = function(test) { - test.deepEqual(preferredLanguages(c.accept, c.provided), c.selected); - return test.done(); - }; - }; - - testConfigurations = [ - { - accept: 'en', - provided: ['en'], - selected: ['en'] - }, { - accept: '*', - provided: ['en'], - selected: ['en'] - }, { - accept: 'en-US, en;q=0.8', - provided: ['en-US', 'en-GB'], - selected: ['en-US', 'en-GB'] - }, { - accept: 'en-US, en-GB', - provided: ['en-US'], - selected: ['en-US'] - }, { - accept: 'en', - provided: ['en-US'], - selected: ['en-US'] - }, { - accept: 'en;q=0.8, es', - provided: ['en', 'es'], - selected: ['es', 'en'] - }, { - accept: 'en-US;q=0.8, es', - provided: ['en', 'es'], - selected: ['es', 'en'] - }, { - accept: 'en-US;q=0.8, es', - provided: null, - selected: ['es', 'en-US'] - } - ]; - - for (_i = 0, _len = testConfigurations.length; _i < _len; _i++) { - configuration = testConfigurations[_i]; - testCorrectType(configuration); - } - -}).call(this); diff --git a/node_modules/express/node_modules/connect/node_modules/negotiator/test/mediaType.js b/node_modules/express/node_modules/connect/node_modules/negotiator/test/mediaType.js deleted file mode 100644 index 08e49231..00000000 --- a/node_modules/express/node_modules/connect/node_modules/negotiator/test/mediaType.js +++ /dev/null @@ -1,70 +0,0 @@ -(function() { - var configuration, preferredMediaTypes, testConfigurations, testCorrectType, _i, _len, - _this = this; - - preferredMediaTypes = require('../lib/mediaType').preferredMediaTypes; - - this["Should not return a media type when no media type provided"] = function(test) { - test.deepEqual(preferredMediaTypes('*/*', []), []); - return test.done(); - }; - - this["Should not return a media type when no media type is acceptable"] = function(test) { - test.deepEqual(preferredMediaTypes('application/json', ['text/html']), []); - return test.done(); - }; - - this["Should not return a media type with q = 0"] = function(test) { - test.deepEqual(preferredMediaTypes('text/html;q=0', ['text/html']), []); - return test.done(); - }; - - testCorrectType = function(c) { - return _this["Should return " + c.selected + " for access header " + c.accept + " with provided types " + c.provided] = function(test) { - test.deepEqual(preferredMediaTypes(c.accept, c.provided), c.selected); - return test.done(); - }; - }; - - testConfigurations = [ - { - accept: 'text/html', - provided: ['text/html'], - selected: ['text/html'] - }, { - accept: '*/*', - provided: ['text/html'], - selected: ['text/html'] - }, { - accept: 'text/*', - provided: ['text/html'], - selected: ['text/html'] - }, { - accept: 'application/json, text/html', - provided: ['text/html'], - selected: ['text/html'] - }, { - accept: 'text/html;q=0.1', - provided: ['text/html'], - selected: ['text/html'] - }, { - accept: 'application/json, text/html', - provided: ['application/json', 'text/html'], - selected: ['application/json', 'text/html'] - }, { - accept: 'application/json;q=0.2, text/html', - provided: ['application/json', 'text/html'], - selected: ['text/html', 'application/json'] - }, { - accept: 'application/json;q=0.2, text/html', - provided: null, - selected: ['text/html', 'application/json'] - } - ]; - - for (_i = 0, _len = testConfigurations.length; _i < _len; _i++) { - configuration = testConfigurations[_i]; - testCorrectType(configuration); - } - -}).call(this); diff --git a/node_modules/express/node_modules/connect/node_modules/pause/.npmignore b/node_modules/express/node_modules/connect/node_modules/pause/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/node_modules/express/node_modules/connect/node_modules/pause/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/express/node_modules/connect/node_modules/pause/History.md b/node_modules/express/node_modules/connect/node_modules/pause/History.md deleted file mode 100644 index c8aa68fa..00000000 --- a/node_modules/express/node_modules/connect/node_modules/pause/History.md +++ /dev/null @@ -1,5 +0,0 @@ - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/express/node_modules/connect/node_modules/pause/Makefile b/node_modules/express/node_modules/connect/node_modules/pause/Makefile deleted file mode 100644 index 4e9c8d36..00000000 --- a/node_modules/express/node_modules/connect/node_modules/pause/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --require should \ - --reporter spec - -.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/pause/Readme.md b/node_modules/express/node_modules/connect/node_modules/pause/Readme.md deleted file mode 100644 index 1cdd68a2..00000000 --- a/node_modules/express/node_modules/connect/node_modules/pause/Readme.md +++ /dev/null @@ -1,29 +0,0 @@ - -# pause - - Pause streams... - -## License - -(The MIT License) - -Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> - -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/express/node_modules/connect/node_modules/pause/index.js b/node_modules/express/node_modules/connect/node_modules/pause/index.js deleted file mode 100644 index 1b7b3794..00000000 --- a/node_modules/express/node_modules/connect/node_modules/pause/index.js +++ /dev/null @@ -1,29 +0,0 @@ - -module.exports = function(obj){ - var onData - , onEnd - , events = []; - - // buffer data - obj.on('data', onData = function(data, encoding){ - events.push(['data', data, encoding]); - }); - - // buffer end - obj.on('end', onEnd = function(data, encoding){ - events.push(['end', data, encoding]); - }); - - return { - end: function(){ - obj.removeListener('data', onData); - obj.removeListener('end', onEnd); - }, - resume: function(){ - this.end(); - for (var i = 0, len = events.length; i < len; ++i) { - obj.emit.apply(obj, events[i]); - } - } - }; -}; \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/pause/package.json b/node_modules/express/node_modules/connect/node_modules/pause/package.json deleted file mode 100644 index 9296b245..00000000 --- a/node_modules/express/node_modules/connect/node_modules/pause/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "pause", - "version": "0.0.1", - "description": "Pause streams...", - "keywords": [], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "dependencies": {}, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "main": "index", - "readme": "\n# pause\n\n Pause streams...\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "_id": "pause@0.0.1", - "dist": { - "shasum": "1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" - }, - "_from": "pause@0.0.1", - "_resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz" -} diff --git a/node_modules/express/node_modules/connect/node_modules/qs/.gitmodules b/node_modules/express/node_modules/connect/node_modules/qs/.gitmodules deleted file mode 100644 index 49e31dac..00000000 --- a/node_modules/express/node_modules/connect/node_modules/qs/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "support/expresso"] - path = support/expresso - url = git://github.com/visionmedia/expresso.git -[submodule "support/should"] - path = support/should - url = git://github.com/visionmedia/should.js.git diff --git a/node_modules/express/node_modules/connect/node_modules/qs/.npmignore b/node_modules/express/node_modules/connect/node_modules/qs/.npmignore deleted file mode 100644 index e85ce2af..00000000 --- a/node_modules/express/node_modules/connect/node_modules/qs/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -test -.travis.yml -benchmark.js -component.json -examples.js -History.md -Makefile diff --git a/node_modules/express/node_modules/connect/node_modules/qs/Readme.md b/node_modules/express/node_modules/connect/node_modules/qs/Readme.md deleted file mode 100644 index 27e54a4a..00000000 --- a/node_modules/express/node_modules/connect/node_modules/qs/Readme.md +++ /dev/null @@ -1,58 +0,0 @@ -# node-querystring - - query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others. - -## Installation - - $ npm install qs - -## Examples - -```js -var qs = require('qs'); - -qs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com'); -// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } } - -qs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }}) -// => user[name]=Tobi&user[email]=tobi%40learnboost.com -``` - -## Testing - -Install dev dependencies: - - $ npm install -d - -and execute: - - $ make test - -browser: - - $ open test/browser/index.html - -## License - -(The MIT License) - -Copyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca> - -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/express/node_modules/connect/node_modules/qs/index.js b/node_modules/express/node_modules/connect/node_modules/qs/index.js deleted file mode 100644 index b05938ac..00000000 --- a/node_modules/express/node_modules/connect/node_modules/qs/index.js +++ /dev/null @@ -1,366 +0,0 @@ -/** - * Object#toString() ref for stringify(). - */ - -var toString = Object.prototype.toString; - -/** - * Object#hasOwnProperty ref - */ - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * Array#indexOf shim. - */ - -var indexOf = typeof Array.prototype.indexOf === 'function' - ? function(arr, el) { return arr.indexOf(el); } - : function(arr, el) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === el) return i; - } - return -1; - }; - -/** - * Array.isArray shim. - */ - -var isArray = Array.isArray || function(arr) { - return toString.call(arr) == '[object Array]'; -}; - -/** - * Object.keys shim. - */ - -var objectKeys = Object.keys || function(obj) { - var ret = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - ret.push(key); - } - } - return ret; -}; - -/** - * Array#forEach shim. - */ - -var forEach = typeof Array.prototype.forEach === 'function' - ? function(arr, fn) { return arr.forEach(fn); } - : function(arr, fn) { - for (var i = 0; i < arr.length; i++) fn(arr[i]); - }; - -/** - * Array#reduce shim. - */ - -var reduce = function(arr, fn, initial) { - if (typeof arr.reduce === 'function') return arr.reduce(fn, initial); - var res = initial; - for (var i = 0; i < arr.length; i++) res = fn(res, arr[i]); - return res; -}; - -/** - * Cache non-integer test regexp. - */ - -var isint = /^[0-9]+$/; - -function promote(parent, key) { - if (parent[key].length == 0) return parent[key] = {} - var t = {}; - for (var i in parent[key]) { - if (hasOwnProperty.call(parent[key], i)) { - t[i] = parent[key][i]; - } - } - parent[key] = t; - return t; -} - -function parse(parts, parent, key, val) { - var part = parts.shift(); - - // illegal - if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return; - - // end - if (!part) { - if (isArray(parent[key])) { - parent[key].push(val); - } else if ('object' == typeof parent[key]) { - parent[key] = val; - } else if ('undefined' == typeof parent[key]) { - parent[key] = val; - } else { - parent[key] = [parent[key], val]; - } - // array - } else { - var obj = parent[key] = parent[key] || []; - if (']' == part) { - if (isArray(obj)) { - if ('' != val) obj.push(val); - } else if ('object' == typeof obj) { - obj[objectKeys(obj).length] = val; - } else { - obj = parent[key] = [parent[key], val]; - } - // prop - } else if (~indexOf(part, ']')) { - part = part.substr(0, part.length - 1); - if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - // key - } else { - if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - } - } -} - -/** - * Merge parent key/val pair. - */ - -function merge(parent, key, val){ - if (~indexOf(key, ']')) { - var parts = key.split('[') - , len = parts.length - , last = len - 1; - parse(parts, parent, 'base', val); - // optimize - } else { - if (!isint.test(key) && isArray(parent.base)) { - var t = {}; - for (var k in parent.base) t[k] = parent.base[k]; - parent.base = t; - } - set(parent.base, key, val); - } - - return parent; -} - -/** - * Compact sparse arrays. - */ - -function compact(obj) { - if ('object' != typeof obj) return obj; - - if (isArray(obj)) { - var ret = []; - - for (var i in obj) { - if (hasOwnProperty.call(obj, i)) { - ret.push(obj[i]); - } - } - - return ret; - } - - for (var key in obj) { - obj[key] = compact(obj[key]); - } - - return obj; -} - -/** - * Parse the given obj. - */ - -function parseObject(obj){ - var ret = { base: {} }; - - forEach(objectKeys(obj), function(name){ - merge(ret, name, obj[name]); - }); - - return compact(ret.base); -} - -/** - * Parse the given str. - */ - -function parseString(str){ - var ret = reduce(String(str).split('&'), function(ret, pair){ - var eql = indexOf(pair, '=') - , brace = lastBraceInKey(pair) - , key = pair.substr(0, brace || eql) - , val = pair.substr(brace || eql, pair.length) - , val = val.substr(indexOf(val, '=') + 1, val.length); - - // ?foo - if ('' == key) key = pair, val = ''; - if ('' == key) return ret; - - return merge(ret, decode(key), decode(val)); - }, { base: {} }).base; - - return compact(ret); -} - -/** - * Parse the given query `str` or `obj`, returning an object. - * - * @param {String} str | {Object} obj - * @return {Object} - * @api public - */ - -exports.parse = function(str){ - if (null == str || '' == str) return {}; - return 'object' == typeof str - ? parseObject(str) - : parseString(str); -}; - -/** - * Turn the given `obj` into a query string - * - * @param {Object} obj - * @return {String} - * @api public - */ - -var stringify = exports.stringify = function(obj, prefix) { - if (isArray(obj)) { - return stringifyArray(obj, prefix); - } else if ('[object Object]' == toString.call(obj)) { - return stringifyObject(obj, prefix); - } else if ('string' == typeof obj) { - return stringifyString(obj, prefix); - } else { - return prefix + '=' + encodeURIComponent(String(obj)); - } -}; - -/** - * Stringify the given `str`. - * - * @param {String} str - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyString(str, prefix) { - if (!prefix) throw new TypeError('stringify expects an object'); - return prefix + '=' + encodeURIComponent(str); -} - -/** - * Stringify the given `arr`. - * - * @param {Array} arr - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyArray(arr, prefix) { - var ret = []; - if (!prefix) throw new TypeError('stringify expects an object'); - for (var i = 0; i < arr.length; i++) { - ret.push(stringify(arr[i], prefix + '[' + i + ']')); - } - return ret.join('&'); -} - -/** - * Stringify the given `obj`. - * - * @param {Object} obj - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyObject(obj, prefix) { - var ret = [] - , keys = objectKeys(obj) - , key; - - for (var i = 0, len = keys.length; i < len; ++i) { - key = keys[i]; - if ('' == key) continue; - if (null == obj[key]) { - ret.push(encodeURIComponent(key) + '='); - } else { - ret.push(stringify(obj[key], prefix - ? prefix + '[' + encodeURIComponent(key) + ']' - : encodeURIComponent(key))); - } - } - - return ret.join('&'); -} - -/** - * Set `obj`'s `key` to `val` respecting - * the weird and wonderful syntax of a qs, - * where "foo=bar&foo=baz" becomes an array. - * - * @param {Object} obj - * @param {String} key - * @param {String} val - * @api private - */ - -function set(obj, key, val) { - var v = obj[key]; - if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return; - if (undefined === v) { - obj[key] = val; - } else if (isArray(v)) { - v.push(val); - } else { - obj[key] = [v, val]; - } -} - -/** - * Locate last brace in `str` within the key. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function lastBraceInKey(str) { - var len = str.length - , brace - , c; - for (var i = 0; i < len; ++i) { - c = str[i]; - if (']' == c) brace = false; - if ('[' == c) brace = true; - if ('=' == c && !brace) return i; - } -} - -/** - * Decode `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -function decode(str) { - try { - return decodeURIComponent(str.replace(/\+/g, ' ')); - } catch (err) { - return str; - } -} diff --git a/node_modules/express/node_modules/connect/node_modules/qs/package.json b/node_modules/express/node_modules/connect/node_modules/qs/package.json deleted file mode 100644 index d2a9c9b2..00000000 --- a/node_modules/express/node_modules/connect/node_modules/qs/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "qs", - "description": "querystring parser", - "version": "0.6.6", - "keywords": [ - "query string", - "parser", - "component" - ], - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/node-querystring.git" - }, - "devDependencies": { - "mocha": "*", - "expect.js": "*" - }, - "scripts": { - "test": "make test" - }, - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "main": "index", - "engines": { - "node": "*" - }, - "readme": "# node-querystring\n\n query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others.\n\n## Installation\n\n $ npm install qs\n\n## Examples\n\n```js\nvar qs = require('qs');\n\nqs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com');\n// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } }\n\nqs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }})\n// => user[name]=Tobi&user[email]=tobi%40learnboost.com\n```\n\n## Testing\n\nInstall dev dependencies:\n\n $ npm install -d\n\nand execute:\n\n $ make test\n\nbrowser:\n\n $ open test/browser/index.html\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/node-querystring/issues" - }, - "homepage": "https://github.com/visionmedia/node-querystring", - "_id": "qs@0.6.6", - "dist": { - "shasum": "6e015098ff51968b8a3c819001d5f2c89bc4b107" - }, - "_from": "qs@0.6.6", - "_resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz" -} diff --git a/node_modules/express/node_modules/connect/node_modules/raw-body/.npmignore b/node_modules/express/node_modules/connect/node_modules/raw-body/.npmignore deleted file mode 100644 index b59f7e3a..00000000 --- a/node_modules/express/node_modules/connect/node_modules/raw-body/.npmignore +++ /dev/null @@ -1 +0,0 @@ -test/ \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/raw-body/.travis.yml b/node_modules/express/node_modules/connect/node_modules/raw-body/.travis.yml deleted file mode 100644 index 595ded21..00000000 --- a/node_modules/express/node_modules/connect/node_modules/raw-body/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -node_js: -- "0.8" -- "0.10" -- "0.11" -language: node_js -matrix: - allow_failures: - - node_js: "0.11" \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/raw-body/Makefile b/node_modules/express/node_modules/connect/node_modules/raw-body/Makefile deleted file mode 100644 index 642d6a64..00000000 --- a/node_modules/express/node_modules/connect/node_modules/raw-body/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -NODE ?= node -BIN = ./node_modules/.bin/ - -test: - @${NODE} ${BIN}mocha \ - --reporter spec \ - --bail \ - ./test/index.js - -clean: - @rm -rf node_modules - -.PHONY: test clean diff --git a/node_modules/express/node_modules/connect/node_modules/raw-body/README.md b/node_modules/express/node_modules/connect/node_modules/raw-body/README.md deleted file mode 100644 index 049ef641..00000000 --- a/node_modules/express/node_modules/connect/node_modules/raw-body/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# Raw Body [![Build Status](https://travis-ci.org/stream-utils/raw-body.png)](https://travis-ci.org/stream-utils/raw-body) - -Gets the entire buffer of a stream either as a `Buffer` or a string. -Validates the stream's length against an expected length and maximum limit. -Ideal for parsing request bodies. - -## API - -```js -var getRawBody = require('raw-body') - -app.use(function (req, res, next) { - getRawBody(req, { - length: req.headers['content-length'], - limit: '1mb', - encoding: 'utf8' - }, function (err, string) { - if (err) - return next(err) - - req.text = string - next() - }) -}) -``` - -or in a Koa generator: - -```js -app.use(function* (next) { - var string = yield getRawBody(this.req, { - length: this.length, - limit: '1mb', - encoding: 'utf8' - }) -}) -``` - -### getRawBody(stream, [options], [callback]) - -Returns a thunk for yielding with generators. - -Options: - -- `length` - The length length of the stream. - If the contents of the stream do not add up to this length, - an `400` error code is returned. -- `limit` - The byte limit of the body. - If the body ends up being larger than this limit, - a `413` error code is returned. -- `encoding` - The requested encoding. - By default, a `Buffer` instance will be returned. - Most likely, you want `utf8`. - You can use any type of encoding supported by [StringDecoder](http://nodejs.org/api/string_decoder.html). - You can also pass `true` which sets it to the default `utf8` - -`callback(err, res)`: - -- `err` - the following attributes will be defined if applicable: - - - `limit` - the limit in bytes - - `length` and `expected` - the expected length of the stream - - `received` - the received bytes - - `status` and `statusCode` - the corresponding status code for the error - - `type` - either `entity.too.large`, `request.size.invalid`, or `stream.encoding.set` - -- `res` - the result, either as a `String` if an encoding was set or a `Buffer` otherwise. - -If an error occurs, the stream will be paused, -and you are responsible for correctly disposing the stream. -For HTTP requests, no handling is required if you send a response. -For streams that use file descriptors, you should `stream.destroy()` or `stream.close()` to prevent leaks. - -## License - -The MIT License (MIT) - -Copyright (c) 2013 Jonathan Ong me@jongleberry.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/express/node_modules/connect/node_modules/raw-body/index.js b/node_modules/express/node_modules/connect/node_modules/raw-body/index.js deleted file mode 100644 index b1798654..00000000 --- a/node_modules/express/node_modules/connect/node_modules/raw-body/index.js +++ /dev/null @@ -1,160 +0,0 @@ -var StringDecoder = require('string_decoder').StringDecoder -var bytes = require('bytes') - -module.exports = function (stream, options, done) { - if (typeof options === 'function') { - done = options - options = {} - } else if (!options) { - options = {} - } - - // convert the limit to an integer - var limit = null - if (typeof options.limit === 'number') - limit = options.limit - if (typeof options.limit === 'string') - limit = bytes(options.limit) - - // convert the expected length to an integer - var length = null - if (!isNaN(options.length)) - length = parseInt(options.length, 10) - - // check the length and limit options. - // note: we intentionally leave the stream paused, - // so users should handle the stream themselves. - if (limit !== null && length !== null && length > limit) { - if (typeof stream.pause === 'function') - stream.pause() - - process.nextTick(function () { - var err = makeError('request entity too large', 'entity.too.large') - err.status = err.statusCode = 413 - err.length = err.expected = length - err.limit = limit - done(err) - }) - return defer - } - - var state = stream._readableState - // streams2+: assert the stream encoding is buffer. - if (state && state.encoding != null) { - if (typeof stream.pause === 'function') - stream.pause() - - process.nextTick(function () { - var err = makeError('stream encoding should not be set', - 'stream.encoding.set') - // developer error - err.status = err.statusCode = 500 - done(err) - }) - return defer - } - - var received = 0 - // note: we delegate any invalid encodings to the constructor - var decoder = options.encoding - ? new StringDecoder(options.encoding === true ? 'utf8' : options.encoding) - : null - var buffer = decoder - ? '' - : [] - - stream.on('data', onData) - stream.once('end', onEnd) - stream.once('error', onEnd) - stream.once('close', cleanup) - - return defer - - // yieldable support - function defer(fn) { - done = fn - } - - function onData(chunk) { - received += chunk.length - decoder - ? buffer += decoder.write(chunk) - : buffer.push(chunk) - - if (limit !== null && received > limit) { - if (typeof stream.pause === 'function') - stream.pause() - var err = makeError('request entity too large', 'entity.too.large') - err.status = err.statusCode = 413 - err.received = received - err.limit = limit - done(err) - cleanup() - } - } - - function onEnd(err) { - if (err) { - if (typeof stream.pause === 'function') - stream.pause() - done(err) - } else if (length !== null && received !== length) { - err = makeError('request size did not match content length', - 'request.size.invalid') - err.status = err.statusCode = 400 - err.received = received - err.length = err.expected = length - done(err) - } else { - done(null, decoder - ? buffer + endStringDecoder(decoder) - : Buffer.concat(buffer) - ) - } - - cleanup() - } - - function cleanup() { - received = buffer = null - - stream.removeListener('data', onData) - stream.removeListener('end', onEnd) - stream.removeListener('error', onEnd) - stream.removeListener('close', cleanup) - } -} - -// to create serializable errors you must re-set message so -// that it is enumerable and you must re configure the type -// property so that is writable and enumerable -function makeError(message, type) { - var error = new Error() - error.message = message - Object.defineProperty(error, 'type', { - value: type, - enumerable: true, - writable: true, - configurable: true - }) - return error -} - -// https://github.com/Raynos/body/blob/2512ced39e31776e5a2f7492b907330badac3a40/index.js#L72 -// bug fix for missing `StringDecoder.end` in v0.8.x -function endStringDecoder(decoder) { - if (decoder.end) { - return decoder.end() - } - - var res = "" - - if (decoder.charReceived) { - var cr = decoder.charReceived - var buf = decoder.charBuffer - var enc = decoder.encoding - res += buf.slice(0, cr).toString(enc) - } - - return res -} diff --git a/node_modules/express/node_modules/connect/node_modules/raw-body/package.json b/node_modules/express/node_modules/connect/node_modules/raw-body/package.json deleted file mode 100644 index 9f080c17..00000000 --- a/node_modules/express/node_modules/connect/node_modules/raw-body/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "raw-body", - "description": "Get and validate the raw body of a readable stream.", - "version": "1.1.2", - "author": { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/stream-utils/raw-body.git" - }, - "bugs": { - "url": "https://github.com/stream-utils/raw-body/issues" - }, - "dependencies": { - "bytes": "~0.2.1" - }, - "devDependencies": { - "readable-stream": "~1.0.17", - "co": "2", - "gnode": "~0.0.4", - "mocha": "~1.14.0", - "through": "~2.3.4", - "request": "~2.27.0", - "assert-tap": "~0.1.4" - }, - "scripts": { - "test": "NODE=gnode make test && node ./test/acceptance.js" - }, - "engines": { - "node": ">= 0.8.0" - }, - "readme": "# Raw Body [![Build Status](https://travis-ci.org/stream-utils/raw-body.png)](https://travis-ci.org/stream-utils/raw-body)\n\nGets the entire buffer of a stream either as a `Buffer` or a string.\nValidates the stream's length against an expected length and maximum limit.\nIdeal for parsing request bodies.\n\n## API\n\n```js\nvar getRawBody = require('raw-body')\n\napp.use(function (req, res, next) {\n getRawBody(req, {\n length: req.headers['content-length'],\n limit: '1mb',\n encoding: 'utf8'\n }, function (err, string) {\n if (err)\n return next(err)\n\n req.text = string\n next()\n })\n})\n```\n\nor in a Koa generator:\n\n```js\napp.use(function* (next) {\n var string = yield getRawBody(this.req, {\n length: this.length,\n limit: '1mb',\n encoding: 'utf8'\n })\n})\n```\n\n### getRawBody(stream, [options], [callback])\n\nReturns a thunk for yielding with generators.\n\nOptions:\n\n- `length` - The length length of the stream.\n If the contents of the stream do not add up to this length,\n an `400` error code is returned.\n- `limit` - The byte limit of the body.\n If the body ends up being larger than this limit,\n a `413` error code is returned.\n- `encoding` - The requested encoding.\n By default, a `Buffer` instance will be returned.\n Most likely, you want `utf8`.\n You can use any type of encoding supported by [StringDecoder](http://nodejs.org/api/string_decoder.html).\n You can also pass `true` which sets it to the default `utf8`\n\n`callback(err, res)`:\n\n- `err` - the following attributes will be defined if applicable:\n\n - `limit` - the limit in bytes\n - `length` and `expected` - the expected length of the stream\n - `received` - the received bytes\n - `status` and `statusCode` - the corresponding status code for the error\n - `type` - either `entity.too.large`, `request.size.invalid`, or `stream.encoding.set`\n\n- `res` - the result, either as a `String` if an encoding was set or a `Buffer` otherwise.\n\nIf an error occurs, the stream will be paused,\nand you are responsible for correctly disposing the stream.\nFor HTTP requests, no handling is required if you send a response.\nFor streams that use file descriptors, you should `stream.destroy()` or `stream.close()` to prevent leaks.\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2013 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/stream-utils/raw-body", - "_id": "raw-body@1.1.2", - "dist": { - "shasum": "c74b3004dea5defd1696171106ac740ec31d62be" - }, - "_from": "raw-body@1.1.2", - "_resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.2.tgz" -} diff --git a/node_modules/express/node_modules/connect/node_modules/uid2/LICENSE b/node_modules/express/node_modules/connect/node_modules/uid2/LICENSE deleted file mode 100644 index bdfab69b..00000000 --- a/node_modules/express/node_modules/connect/node_modules/uid2/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Marco Aurelio - -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/express/node_modules/connect/node_modules/uid2/index.js b/node_modules/express/node_modules/connect/node_modules/uid2/index.js deleted file mode 100644 index 6240b308..00000000 --- a/node_modules/express/node_modules/connect/node_modules/uid2/index.js +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Module dependencies - */ - -var crypto = require('crypto'); - -/** - * 62 characters in the ascii range that can be used in URLs without special - * encoding. - */ -var UIDCHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; - -/** - * Make a Buffer into a string ready for use in URLs - * - * @param {String} - * @returns {String} - * @api private - */ -function tostr(bytes) { - var chars, r, i; - - r = []; - for (i = 0; i < bytes.length; i++) { - r.push(UIDCHARS[bytes[i] % UIDCHARS.length]); - } - - return r.join(''); -} - -/** - * Generate an Unique Id - * - * @param {Number} length The number of chars of the uid - * @param {Number} cb (optional) Callback for async uid generation - * @api public - */ - -function uid(length, cb) { - - if (typeof cb === 'undefined') { - return tostr(crypto.pseudoRandomBytes(length)); - } else { - crypto.pseudoRandomBytes(length, function(err, bytes) { - if (err) return cb(err); - cb(null, tostr(bytes)); - }) - } -} - -/** - * Exports - */ - -module.exports = uid; diff --git a/node_modules/express/node_modules/connect/node_modules/uid2/package.json b/node_modules/express/node_modules/connect/node_modules/uid2/package.json deleted file mode 100644 index 08af7a10..00000000 --- a/node_modules/express/node_modules/connect/node_modules/uid2/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "uid2", - "description": "strong uid", - "tags": [ - "uid" - ], - "version": "0.0.3", - "dependencies": {}, - "readme": "ERROR: No README data found!", - "_id": "uid2@0.0.3", - "dist": { - "shasum": "837bfbe18583ae394e1e2b803f8bc13c47f942ef" - }, - "_from": "uid2@0.0.3", - "_resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz" -} diff --git a/node_modules/express/node_modules/connect/package.json b/node_modules/express/node_modules/connect/package.json deleted file mode 100644 index 1ac08cc4..00000000 --- a/node_modules/express/node_modules/connect/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "connect", - "version": "2.12.0", - "description": "High performance middleware framework", - "keywords": [ - "framework", - "web", - "middleware", - "connect", - "rack" - ], - "repository": { - "type": "git", - "url": "git://github.com/senchalabs/connect.git" - }, - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "dependencies": { - "batch": "0.5.0", - "qs": "0.6.6", - "cookie-signature": "1.0.1", - "buffer-crc32": "0.2.1", - "cookie": "0.1.0", - "send": "0.1.4", - "bytes": "0.2.1", - "fresh": "0.2.0", - "pause": "0.0.1", - "uid2": "0.0.3", - "debug": ">= 0.7.3 < 1", - "methods": "0.1.0", - "raw-body": "1.1.2", - "negotiator": "0.3.0", - "multiparty": "2.2.0" - }, - "devDependencies": { - "should": ">= 2.0.2 < 3", - "mocha": ">= 1.13.0 < 2", - "jade": ">= 0.35.0 < 1", - "dox": ">= 0.4.4 < 1" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://raw.github.com/senchalabs/connect/master/LICENSE" - } - ], - "main": "index", - "engines": { - "node": ">= 0.8.0" - }, - "scripts": { - "test": "make" - }, - "readme": "# Connect [![build status](https://secure.travis-ci.org/senchalabs/connect.png)](http://travis-ci.org/senchalabs/connect)\n\n Connect is an extensible HTTP server framework for [node](http://nodejs.org), providing high performance \"plugins\" known as _middleware_.\n\n Connect is bundled with over _20_ commonly used middleware, including\n a logger, session support, cookie parser, and [more](http://senchalabs.github.com/connect). Be sure to view the 2.x [documentation](http://senchalabs.github.com/connect/).\n\n```js\nvar connect = require('connect')\n , http = require('http');\n\nvar app = connect()\n .use(connect.favicon())\n .use(connect.logger('dev'))\n .use(connect.static('public'))\n .use(connect.directory('public'))\n .use(connect.cookieParser())\n .use(connect.session({ secret: 'my secret here' }))\n .use(function(req, res){\n res.end('Hello from Connect!\\n');\n });\n\nhttp.createServer(app).listen(3000);\n```\n\n## Middleware\n\n - [basicAuth](http://www.senchalabs.org/connect/basicAuth.html)\n - [bodyParser](http://www.senchalabs.org/connect/bodyParser.html)\n - [compress](http://www.senchalabs.org/connect/compress.html)\n - [cookieParser](http://www.senchalabs.org/connect/cookieParser.html)\n - [cookieSession](http://www.senchalabs.org/connect/cookieSession.html)\n - [csrf](http://www.senchalabs.org/connect/csrf.html)\n - [directory](http://www.senchalabs.org/connect/directory.html)\n - [errorHandler](http://www.senchalabs.org/connect/errorHandler.html)\n - [favicon](http://www.senchalabs.org/connect/favicon.html)\n - [json](http://www.senchalabs.org/connect/json.html)\n - [limit](http://www.senchalabs.org/connect/limit.html)\n - [logger](http://www.senchalabs.org/connect/logger.html)\n - [methodOverride](http://www.senchalabs.org/connect/methodOverride.html)\n - [multipart](http://www.senchalabs.org/connect/multipart.html)\n - [urlencoded](http://www.senchalabs.org/connect/urlencoded.html)\n - [query](http://www.senchalabs.org/connect/query.html)\n - [responseTime](http://www.senchalabs.org/connect/responseTime.html)\n - [session](http://www.senchalabs.org/connect/session.html)\n - [static](http://www.senchalabs.org/connect/static.html)\n - [staticCache](http://www.senchalabs.org/connect/staticCache.html)\n - [subdomains](http://www.senchalabs.org/connect/subdomains.html)\n - [vhost](http://www.senchalabs.org/connect/vhost.html)\n\n## Running Tests\n\nfirst:\n\n $ npm install -d\n\nthen:\n\n $ make test\n\n## Contributors\n\n https://github.com/senchalabs/connect/graphs/contributors\n\n## Node Compatibility\n\n Connect `< 1.x` is compatible with node 0.2.x\n\n\n Connect `1.x` is compatible with node 0.4.x\n\n\n Connect `2.x` is compatible with node 0.6.x\n\n\n Connect (_master_) is compatible with node 0.8.x\n\n## CLA\n\n [http://sencha.com/cla](http://sencha.com/cla)\n\n## License\n\nView the [LICENSE](https://github.com/senchalabs/connect/blob/master/LICENSE) file. The [Silk](http://www.famfamfam.com/lab/icons/silk/) icons used by the `directory` middleware created by/copyright of [FAMFAMFAM](http://www.famfamfam.com/).\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/senchalabs/connect/issues" - }, - "homepage": "https://github.com/senchalabs/connect", - "_id": "connect@2.12.0", - "dist": { - "shasum": "31d8fa0dcacdf1908d822bd2923be8a2d2a7ed9a" - }, - "_from": "connect@2.12.0", - "_resolved": "https://registry.npmjs.org/connect/-/connect-2.12.0.tgz" -} diff --git a/node_modules/express/node_modules/cookie-signature/.npmignore b/node_modules/express/node_modules/cookie-signature/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/node_modules/express/node_modules/cookie-signature/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/express/node_modules/cookie-signature/History.md b/node_modules/express/node_modules/cookie-signature/History.md deleted file mode 100644 index 9e301799..00000000 --- a/node_modules/express/node_modules/cookie-signature/History.md +++ /dev/null @@ -1,11 +0,0 @@ - -1.0.1 / 2013-04-15 -================== - - * Revert "Changed underlying HMAC algo. to sha512." - * Revert "Fix for timing attacks on MAC verification." - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/express/node_modules/cookie-signature/Makefile b/node_modules/express/node_modules/cookie-signature/Makefile deleted file mode 100644 index 4e9c8d36..00000000 --- a/node_modules/express/node_modules/cookie-signature/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --require should \ - --reporter spec - -.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/cookie-signature/Readme.md b/node_modules/express/node_modules/cookie-signature/Readme.md deleted file mode 100644 index 2559e841..00000000 --- a/node_modules/express/node_modules/cookie-signature/Readme.md +++ /dev/null @@ -1,42 +0,0 @@ - -# cookie-signature - - Sign and unsign cookies. - -## Example - -```js -var cookie = require('cookie-signature'); - -var val = cookie.sign('hello', 'tobiiscool'); -val.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI'); - -var val = cookie.sign('hello', 'tobiiscool'); -cookie.unsign(val, 'tobiiscool').should.equal('hello'); -cookie.unsign(val, 'luna').should.be.false; -``` - -## License - -(The MIT License) - -Copyright (c) 2012 LearnBoost <tj@learnboost.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/express/node_modules/cookie-signature/index.js b/node_modules/express/node_modules/cookie-signature/index.js deleted file mode 100644 index ed62814e..00000000 --- a/node_modules/express/node_modules/cookie-signature/index.js +++ /dev/null @@ -1,42 +0,0 @@ - -/** - * Module dependencies. - */ - -var crypto = require('crypto'); - -/** - * Sign the given `val` with `secret`. - * - * @param {String} val - * @param {String} secret - * @return {String} - * @api private - */ - -exports.sign = function(val, secret){ - if ('string' != typeof val) throw new TypeError('cookie required'); - if ('string' != typeof secret) throw new TypeError('secret required'); - return val + '.' + crypto - .createHmac('sha256', secret) - .update(val) - .digest('base64') - .replace(/\=+$/, ''); -}; - -/** - * Unsign and decode the given `val` with `secret`, - * returning `false` if the signature is invalid. - * - * @param {String} val - * @param {String} secret - * @return {String|Boolean} - * @api private - */ - -exports.unsign = function(val, secret){ - if ('string' != typeof val) throw new TypeError('cookie required'); - if ('string' != typeof secret) throw new TypeError('secret required'); - var str = val.slice(0, val.lastIndexOf('.')); - return exports.sign(str, secret) == val ? str : false; -}; diff --git a/node_modules/express/node_modules/cookie-signature/package.json b/node_modules/express/node_modules/cookie-signature/package.json deleted file mode 100644 index 5203d81a..00000000 --- a/node_modules/express/node_modules/cookie-signature/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "cookie-signature", - "version": "1.0.1", - "description": "Sign and unsign cookies", - "keywords": [ - "cookie", - "sign", - "unsign" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@learnboost.com" - }, - "dependencies": {}, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "main": "index", - "readme": "\n# cookie-signature\n\n Sign and unsign cookies.\n\n## Example\n\n```js\nvar cookie = require('cookie-signature');\n\nvar val = cookie.sign('hello', 'tobiiscool');\nval.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI');\n\nvar val = cookie.sign('hello', 'tobiiscool');\ncookie.unsign(val, 'tobiiscool').should.equal('hello');\ncookie.unsign(val, 'luna').should.be.false;\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 LearnBoost <tj@learnboost.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "_id": "cookie-signature@1.0.1", - "dist": { - "shasum": "44e072148af01e6e8e24afbf12690d68ae698ecb" - }, - "_from": "cookie-signature@1.0.1", - "_resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.1.tgz" -} diff --git a/node_modules/express/node_modules/cookie/.npmignore b/node_modules/express/node_modules/cookie/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/express/node_modules/cookie/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/express/node_modules/cookie/.travis.yml b/node_modules/express/node_modules/cookie/.travis.yml deleted file mode 100644 index 9400c118..00000000 --- a/node_modules/express/node_modules/cookie/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.6" - - "0.8" - - "0.10" diff --git a/node_modules/express/node_modules/cookie/LICENSE b/node_modules/express/node_modules/cookie/LICENSE deleted file mode 100644 index 249d9def..00000000 --- a/node_modules/express/node_modules/cookie/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -// MIT License - -Copyright (C) Roman Shtylman - -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/express/node_modules/cookie/README.md b/node_modules/express/node_modules/cookie/README.md deleted file mode 100644 index 5187ed1c..00000000 --- a/node_modules/express/node_modules/cookie/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# cookie [![Build Status](https://secure.travis-ci.org/shtylman/node-cookie.png?branch=master)](http://travis-ci.org/shtylman/node-cookie) # - -cookie is a basic cookie parser and serializer. It doesn't make assumptions about how you are going to deal with your cookies. It basically just provides a way to read and write the HTTP cookie headers. - -See [RFC6265](http://tools.ietf.org/html/rfc6265) for details about the http header for cookies. - -## how? - -``` -npm install cookie -``` - -```javascript -var cookie = require('cookie'); - -var hdr = cookie.serialize('foo', 'bar'); -// hdr = 'foo=bar'; - -var cookies = cookie.parse('foo=bar; cat=meow; dog=ruff'); -// cookies = { foo: 'bar', cat: 'meow', dog: 'ruff' }; -``` - -## more - -The serialize function takes a third parameter, an object, to set cookie options. See the RFC for valid values. - -### path -> cookie path - -### expires -> absolute expiration date for the cookie (Date object) - -### maxAge -> relative max age of the cookie from when the client receives it (seconds) - -### domain -> domain for the cookie - -### secure -> true or false - -### httpOnly -> true or false - diff --git a/node_modules/express/node_modules/cookie/index.js b/node_modules/express/node_modules/cookie/index.js deleted file mode 100644 index 16bdb65d..00000000 --- a/node_modules/express/node_modules/cookie/index.js +++ /dev/null @@ -1,70 +0,0 @@ - -/// Serialize the a name value pair into a cookie string suitable for -/// http headers. An optional options object specified cookie parameters -/// -/// serialize('foo', 'bar', { httpOnly: true }) -/// => "foo=bar; httpOnly" -/// -/// @param {String} name -/// @param {String} val -/// @param {Object} options -/// @return {String} -var serialize = function(name, val, opt){ - opt = opt || {}; - var enc = opt.encode || encode; - var pairs = [name + '=' + enc(val)]; - - if (opt.maxAge) pairs.push('Max-Age=' + opt.maxAge); - if (opt.domain) pairs.push('Domain=' + opt.domain); - if (opt.path) pairs.push('Path=' + opt.path); - if (opt.expires) pairs.push('Expires=' + opt.expires.toUTCString()); - if (opt.httpOnly) pairs.push('HttpOnly'); - if (opt.secure) pairs.push('Secure'); - - return pairs.join('; '); -}; - -/// Parse the given cookie header string into an object -/// The object has the various cookies as keys(names) => values -/// @param {String} str -/// @return {Object} -var parse = function(str, opt) { - opt = opt || {}; - var obj = {} - var pairs = str.split(/[;,] */); - var dec = opt.decode || decode; - - pairs.forEach(function(pair) { - var eq_idx = pair.indexOf('=') - - // skip things that don't look like key=value - if (eq_idx < 0) { - return; - } - - var key = pair.substr(0, eq_idx).trim() - var val = pair.substr(++eq_idx, pair.length).trim(); - - // quoted values - if ('"' == val[0]) { - val = val.slice(1, -1); - } - - // only assign once - if (undefined == obj[key]) { - try { - obj[key] = dec(val); - } catch (e) { - obj[key] = val; - } - } - }); - - return obj; -}; - -var encode = encodeURIComponent; -var decode = decodeURIComponent; - -module.exports.serialize = serialize; -module.exports.parse = parse; diff --git a/node_modules/express/node_modules/cookie/package.json b/node_modules/express/node_modules/cookie/package.json deleted file mode 100644 index 8da1c04e..00000000 --- a/node_modules/express/node_modules/cookie/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "author": { - "name": "Roman Shtylman", - "email": "shtylman@gmail.com" - }, - "name": "cookie", - "description": "cookie parsing and serialization", - "version": "0.1.0", - "repository": { - "type": "git", - "url": "git://github.com/shtylman/node-cookie.git" - }, - "keywords": [ - "cookie", - "cookies" - ], - "main": "index.js", - "scripts": { - "test": "mocha" - }, - "dependencies": {}, - "devDependencies": { - "mocha": "1.x.x" - }, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "# cookie [![Build Status](https://secure.travis-ci.org/shtylman/node-cookie.png?branch=master)](http://travis-ci.org/shtylman/node-cookie) #\n\ncookie is a basic cookie parser and serializer. It doesn't make assumptions about how you are going to deal with your cookies. It basically just provides a way to read and write the HTTP cookie headers.\n\nSee [RFC6265](http://tools.ietf.org/html/rfc6265) for details about the http header for cookies.\n\n## how?\n\n```\nnpm install cookie\n```\n\n```javascript\nvar cookie = require('cookie');\n\nvar hdr = cookie.serialize('foo', 'bar');\n// hdr = 'foo=bar';\n\nvar cookies = cookie.parse('foo=bar; cat=meow; dog=ruff');\n// cookies = { foo: 'bar', cat: 'meow', dog: 'ruff' };\n```\n\n## more\n\nThe serialize function takes a third parameter, an object, to set cookie options. See the RFC for valid values.\n\n### path\n> cookie path\n\n### expires\n> absolute expiration date for the cookie (Date object)\n\n### maxAge\n> relative max age of the cookie from when the client receives it (seconds)\n\n### domain\n> domain for the cookie\n\n### secure\n> true or false\n\n### httpOnly\n> true or false\n\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/shtylman/node-cookie/issues" - }, - "homepage": "https://github.com/shtylman/node-cookie", - "_id": "cookie@0.1.0", - "dist": { - "shasum": "90eb469ddce905c866de687efc43131d8801f9d0" - }, - "_from": "cookie@0.1.0", - "_resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.0.tgz" -} diff --git a/node_modules/express/node_modules/cookie/test/mocha.opts b/node_modules/express/node_modules/cookie/test/mocha.opts deleted file mode 100644 index e2bfcc5a..00000000 --- a/node_modules/express/node_modules/cookie/test/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---ui qunit diff --git a/node_modules/express/node_modules/cookie/test/parse.js b/node_modules/express/node_modules/cookie/test/parse.js deleted file mode 100644 index c6c27a20..00000000 --- a/node_modules/express/node_modules/cookie/test/parse.js +++ /dev/null @@ -1,44 +0,0 @@ - -var assert = require('assert'); - -var cookie = require('..'); - -suite('parse'); - -test('basic', function() { - assert.deepEqual({ foo: 'bar' }, cookie.parse('foo=bar')); - assert.deepEqual({ foo: '123' }, cookie.parse('foo=123')); -}); - -test('ignore spaces', function() { - assert.deepEqual({ FOO: 'bar', baz: 'raz' }, - cookie.parse('FOO = bar; baz = raz')); -}); - -test('escaping', function() { - assert.deepEqual({ foo: 'bar=123456789&name=Magic+Mouse' }, - cookie.parse('foo="bar=123456789&name=Magic+Mouse"')); - - assert.deepEqual({ email: ' ",;/' }, - cookie.parse('email=%20%22%2c%3b%2f')); -}); - -test('ignore escaping error and return original value', function() { - assert.deepEqual({ foo: '%1', bar: 'bar' }, cookie.parse('foo=%1;bar=bar')); -}); - -test('ignore non values', function() { - assert.deepEqual({ foo: '%1', bar: 'bar' }, cookie.parse('foo=%1;bar=bar;HttpOnly;Secure')); -}); - -test('unencoded', function() { - assert.deepEqual({ foo: 'bar=123456789&name=Magic+Mouse' }, - cookie.parse('foo="bar=123456789&name=Magic+Mouse"',{ - decode: function(value) { return value; } - })); - - assert.deepEqual({ email: '%20%22%2c%3b%2f' }, - cookie.parse('email=%20%22%2c%3b%2f',{ - decode: function(value) { return value; } - })); -}) diff --git a/node_modules/express/node_modules/cookie/test/serialize.js b/node_modules/express/node_modules/cookie/test/serialize.js deleted file mode 100644 index 86bb8c93..00000000 --- a/node_modules/express/node_modules/cookie/test/serialize.js +++ /dev/null @@ -1,64 +0,0 @@ -// builtin -var assert = require('assert'); - -var cookie = require('..'); - -suite('serialize'); - -test('basic', function() { - assert.equal('foo=bar', cookie.serialize('foo', 'bar')); - assert.equal('foo=bar%20baz', cookie.serialize('foo', 'bar baz')); -}); - -test('path', function() { - assert.equal('foo=bar; Path=/', cookie.serialize('foo', 'bar', { - path: '/' - })); -}); - -test('secure', function() { - assert.equal('foo=bar; Secure', cookie.serialize('foo', 'bar', { - secure: true - })); - - assert.equal('foo=bar', cookie.serialize('foo', 'bar', { - secure: false - })); -}); - -test('domain', function() { - assert.equal('foo=bar; Domain=example.com', cookie.serialize('foo', 'bar', { - domain: 'example.com' - })); -}); - -test('httpOnly', function() { - assert.equal('foo=bar; HttpOnly', cookie.serialize('foo', 'bar', { - httpOnly: true - })); -}); - -test('maxAge', function() { - assert.equal('foo=bar; Max-Age=1000', cookie.serialize('foo', 'bar', { - maxAge: 1000 - })); -}); - -test('escaping', function() { - assert.deepEqual('cat=%2B%20', cookie.serialize('cat', '+ ')); -}); - -test('parse->serialize', function() { - - assert.deepEqual({ cat: 'foo=123&name=baz five' }, cookie.parse( - cookie.serialize('cat', 'foo=123&name=baz five'))); - - assert.deepEqual({ cat: ' ";/' }, cookie.parse( - cookie.serialize('cat', ' ";/'))); -}); - -test('unencoded', function() { - assert.deepEqual('cat=+ ', cookie.serialize('cat', '+ ', { - encode: function(value) { return value; } - })); -}) diff --git a/node_modules/express/node_modules/debug/Readme.md b/node_modules/express/node_modules/debug/Readme.md deleted file mode 100644 index c5a34e8b..00000000 --- a/node_modules/express/node_modules/debug/Readme.md +++ /dev/null @@ -1,115 +0,0 @@ -# debug - - tiny node.js debugging utility modelled after node core's debugging technique. - -## Installation - -``` -$ npm install debug -``` - -## Usage - - With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility. - -Example _app.js_: - -```js -var debug = require('debug')('http') - , http = require('http') - , name = 'My App'; - -// fake app - -debug('booting %s', name); - -http.createServer(function(req, res){ - debug(req.method + ' ' + req.url); - res.end('hello\n'); -}).listen(3000, function(){ - debug('listening'); -}); - -// fake worker of some kind - -require('./worker'); -``` - -Example _worker.js_: - -```js -var debug = require('debug')('worker'); - -setInterval(function(){ - debug('doing some work'); -}, 1000); -``` - - The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples: - - ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png) - - ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png) - -## Millisecond diff - - When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. - - ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) - - When stderr is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below: - _(NOTE: Debug now uses stderr instead of stdout, so the correct shell command for this example is actually `DEBUG=* node example/worker 2> out &`)_ - - ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) - -## Conventions - - If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". - -## Wildcards - - The "*" character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect.compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. - - You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=* -connect:*` would include all debuggers except those starting with "connect:". - -## Browser support - - Debug works in the browser as well, currently persisted by `localStorage`. For example if you have `worker:a` and `worker:b` as shown below, and wish to debug both type `debug.enable('worker:*')` in the console and refresh the page, this will remain until you disable with `debug.disable()`. - -```js -a = debug('worker:a'); -b = debug('worker:b'); - -setInterval(function(){ - a('doing some work'); -}, 1000); - -setInterval(function(){ - a('doing some work'); -}, 1200); -``` - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> - -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/express/node_modules/debug/debug.js b/node_modules/express/node_modules/debug/debug.js deleted file mode 100644 index 509dc0de..00000000 --- a/node_modules/express/node_modules/debug/debug.js +++ /dev/null @@ -1,137 +0,0 @@ - -/** - * Expose `debug()` as the module. - */ - -module.exports = debug; - -/** - * Create a debugger with the given `name`. - * - * @param {String} name - * @return {Type} - * @api public - */ - -function debug(name) { - if (!debug.enabled(name)) return function(){}; - - return function(fmt){ - fmt = coerce(fmt); - - var curr = new Date; - var ms = curr - (debug[name] || curr); - debug[name] = curr; - - fmt = name - + ' ' - + fmt - + ' +' + debug.humanize(ms); - - // This hackery is required for IE8 - // where `console.log` doesn't have 'apply' - window.console - && console.log - && Function.prototype.apply.call(console.log, console, arguments); - } -} - -/** - * The currently active debug mode names. - */ - -debug.names = []; -debug.skips = []; - -/** - * Enables a debug mode by name. This can include modes - * separated by a colon and wildcards. - * - * @param {String} name - * @api public - */ - -debug.enable = function(name) { - try { - localStorage.debug = name; - } catch(e){} - - var split = (name || '').split(/[\s,]+/) - , len = split.length; - - for (var i = 0; i < len; i++) { - name = split[i].replace('*', '.*?'); - if (name[0] === '-') { - debug.skips.push(new RegExp('^' + name.substr(1) + '$')); - } - else { - debug.names.push(new RegExp('^' + name + '$')); - } - } -}; - -/** - * Disable debug output. - * - * @api public - */ - -debug.disable = function(){ - debug.enable(''); -}; - -/** - * Humanize the given `ms`. - * - * @param {Number} m - * @return {String} - * @api private - */ - -debug.humanize = function(ms) { - var sec = 1000 - , min = 60 * 1000 - , hour = 60 * min; - - if (ms >= hour) return (ms / hour).toFixed(1) + 'h'; - if (ms >= min) return (ms / min).toFixed(1) + 'm'; - if (ms >= sec) return (ms / sec | 0) + 's'; - return ms + 'ms'; -}; - -/** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - -debug.enabled = function(name) { - for (var i = 0, len = debug.skips.length; i < len; i++) { - if (debug.skips[i].test(name)) { - return false; - } - } - for (var i = 0, len = debug.names.length; i < len; i++) { - if (debug.names[i].test(name)) { - return true; - } - } - return false; -}; - -/** - * Coerce `val`. - */ - -function coerce(val) { - if (val instanceof Error) return val.stack || val.message; - return val; -} - -// persist - -try { - if (window.localStorage) debug.enable(localStorage.debug); -} catch(e){} diff --git a/node_modules/express/node_modules/debug/index.js b/node_modules/express/node_modules/debug/index.js deleted file mode 100644 index e02c13b7..00000000 --- a/node_modules/express/node_modules/debug/index.js +++ /dev/null @@ -1,5 +0,0 @@ -if ('undefined' == typeof window) { - module.exports = require('./lib/debug'); -} else { - module.exports = require('./debug'); -} diff --git a/node_modules/express/node_modules/debug/lib/debug.js b/node_modules/express/node_modules/debug/lib/debug.js deleted file mode 100644 index 3b0a9183..00000000 --- a/node_modules/express/node_modules/debug/lib/debug.js +++ /dev/null @@ -1,147 +0,0 @@ -/** - * Module dependencies. - */ - -var tty = require('tty'); - -/** - * Expose `debug()` as the module. - */ - -module.exports = debug; - -/** - * Enabled debuggers. - */ - -var names = [] - , skips = []; - -(process.env.DEBUG || '') - .split(/[\s,]+/) - .forEach(function(name){ - name = name.replace('*', '.*?'); - if (name[0] === '-') { - skips.push(new RegExp('^' + name.substr(1) + '$')); - } else { - names.push(new RegExp('^' + name + '$')); - } - }); - -/** - * Colors. - */ - -var colors = [6, 2, 3, 4, 5, 1]; - -/** - * Previous debug() call. - */ - -var prev = {}; - -/** - * Previously assigned color. - */ - -var prevColor = 0; - -/** - * Is stdout a TTY? Colored output is disabled when `true`. - */ - -var isatty = tty.isatty(2); - -/** - * Select a color. - * - * @return {Number} - * @api private - */ - -function color() { - return colors[prevColor++ % colors.length]; -} - -/** - * Humanize the given `ms`. - * - * @param {Number} m - * @return {String} - * @api private - */ - -function humanize(ms) { - var sec = 1000 - , min = 60 * 1000 - , hour = 60 * min; - - if (ms >= hour) return (ms / hour).toFixed(1) + 'h'; - if (ms >= min) return (ms / min).toFixed(1) + 'm'; - if (ms >= sec) return (ms / sec | 0) + 's'; - return ms + 'ms'; -} - -/** - * Create a debugger with the given `name`. - * - * @param {String} name - * @return {Type} - * @api public - */ - -function debug(name) { - function disabled(){} - disabled.enabled = false; - - var match = skips.some(function(re){ - return re.test(name); - }); - - if (match) return disabled; - - match = names.some(function(re){ - return re.test(name); - }); - - if (!match) return disabled; - var c = color(); - - function colored(fmt) { - fmt = coerce(fmt); - - var curr = new Date; - var ms = curr - (prev[name] || curr); - prev[name] = curr; - - fmt = ' \u001b[9' + c + 'm' + name + ' ' - + '\u001b[3' + c + 'm\u001b[90m' - + fmt + '\u001b[3' + c + 'm' - + ' +' + humanize(ms) + '\u001b[0m'; - - console.error.apply(this, arguments); - } - - function plain(fmt) { - fmt = coerce(fmt); - - fmt = new Date().toUTCString() - + ' ' + name + ' ' + fmt; - console.error.apply(this, arguments); - } - - colored.enabled = plain.enabled = true; - - return isatty || process.env.DEBUG_COLORS - ? colored - : plain; -} - -/** - * Coerce `val`. - */ - -function coerce(val) { - if (val instanceof Error) return val.stack || val.message; - return val; -} diff --git a/node_modules/express/node_modules/debug/package.json b/node_modules/express/node_modules/debug/package.json deleted file mode 100644 index 24abce64..00000000 --- a/node_modules/express/node_modules/debug/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "debug", - "version": "0.7.4", - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/debug.git" - }, - "description": "small debugging utility", - "keywords": [ - "debug", - "log", - "debugger" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "dependencies": {}, - "devDependencies": { - "mocha": "*" - }, - "main": "lib/debug.js", - "browser": "./debug.js", - "engines": { - "node": "*" - }, - "files": [ - "lib/debug.js", - "debug.js", - "index.js" - ], - "component": { - "scripts": { - "debug/index.js": "index.js", - "debug/debug.js": "debug.js" - } - }, - "readme": "# debug\n\n tiny node.js debugging utility modelled after node core's debugging technique.\n\n## Installation\n\n```\n$ npm install debug\n```\n\n## Usage\n\n With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility.\n \nExample _app.js_:\n\n```js\nvar debug = require('debug')('http')\n , http = require('http')\n , name = 'My App';\n\n// fake app\n\ndebug('booting %s', name);\n\nhttp.createServer(function(req, res){\n debug(req.method + ' ' + req.url);\n res.end('hello\\n');\n}).listen(3000, function(){\n debug('listening');\n});\n\n// fake worker of some kind\n\nrequire('./worker');\n```\n\nExample _worker.js_:\n\n```js\nvar debug = require('debug')('worker');\n\nsetInterval(function(){\n debug('doing some work');\n}, 1000);\n```\n\n The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:\n\n ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png)\n\n ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png)\n\n## Millisecond diff\n\n When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the \"+NNNms\" will show you how much time was spent between calls.\n\n ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png)\n\n When stderr is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:\n _(NOTE: Debug now uses stderr instead of stdout, so the correct shell command for this example is actually `DEBUG=* node example/worker 2> out &`)_\n \n ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png)\n \n## Conventions\n\n If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use \":\" to separate features. For example \"bodyParser\" from Connect would then be \"connect:bodyParser\". \n\n## Wildcards\n\n The \"*\" character may be used as a wildcard. Suppose for example your library has debuggers named \"connect:bodyParser\", \"connect:compress\", \"connect:session\", instead of listing all three with `DEBUG=connect:bodyParser,connect.compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.\n\n You can also exclude specific debuggers by prefixing them with a \"-\" character. For example, `DEBUG=* -connect:*` would include all debuggers except those starting with \"connect:\".\n\n## Browser support\n\n Debug works in the browser as well, currently persisted by `localStorage`. For example if you have `worker:a` and `worker:b` as shown below, and wish to debug both type `debug.enable('worker:*')` in the console and refresh the page, this will remain until you disable with `debug.disable()`. \n\n```js\na = debug('worker:a');\nb = debug('worker:b');\n\nsetInterval(function(){\n a('doing some work');\n}, 1000);\n\nsetInterval(function(){\n a('doing some work');\n}, 1200);\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/debug/issues" - }, - "homepage": "https://github.com/visionmedia/debug", - "_id": "debug@0.7.4", - "_from": "debug@>= 0.7.3 < 1" -} diff --git a/node_modules/express/node_modules/fresh/.npmignore b/node_modules/express/node_modules/fresh/.npmignore deleted file mode 100644 index 9daeafb9..00000000 --- a/node_modules/express/node_modules/fresh/.npmignore +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/node_modules/express/node_modules/fresh/History.md b/node_modules/express/node_modules/fresh/History.md deleted file mode 100644 index 60a2903f..00000000 --- a/node_modules/express/node_modules/fresh/History.md +++ /dev/null @@ -1,5 +0,0 @@ - -0.2.0 / 2013-08-11 -================== - - * fix: return false for no-cache diff --git a/node_modules/express/node_modules/fresh/Makefile b/node_modules/express/node_modules/fresh/Makefile deleted file mode 100644 index 8e8640f2..00000000 --- a/node_modules/express/node_modules/fresh/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --reporter spec \ - --require should - -.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/fresh/Readme.md b/node_modules/express/node_modules/fresh/Readme.md deleted file mode 100644 index 61366c57..00000000 --- a/node_modules/express/node_modules/fresh/Readme.md +++ /dev/null @@ -1,57 +0,0 @@ - -# node-fresh - - HTTP response freshness testing - -## fresh(req, res) - - Check freshness of `req` and `res` headers. - - When the cache is "fresh" __true__ is returned, - otherwise __false__ is returned to indicate that - the cache is now stale. - -## Example: - -```js -var req = { 'if-none-match': 'tobi' }; -var res = { 'etag': 'luna' }; -fresh(req, res); -// => false - -var req = { 'if-none-match': 'tobi' }; -var res = { 'etag': 'tobi' }; -fresh(req, res); -// => true -``` - -## Installation - -``` -$ npm install fresh -``` - -## License - -(The MIT License) - -Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> - -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/express/node_modules/fresh/index.js b/node_modules/express/node_modules/fresh/index.js deleted file mode 100644 index 9c3f47d1..00000000 --- a/node_modules/express/node_modules/fresh/index.js +++ /dev/null @@ -1,53 +0,0 @@ - -/** - * Expose `fresh()`. - */ - -module.exports = fresh; - -/** - * Check freshness of `req` and `res` headers. - * - * When the cache is "fresh" __true__ is returned, - * otherwise __false__ is returned to indicate that - * the cache is now stale. - * - * @param {Object} req - * @param {Object} res - * @return {Boolean} - * @api public - */ - -function fresh(req, res) { - // defaults - var etagMatches = true; - var notModified = true; - - // fields - var modifiedSince = req['if-modified-since']; - var noneMatch = req['if-none-match']; - var lastModified = res['last-modified']; - var etag = res['etag']; - var cc = req['cache-control']; - - // unconditional request - if (!modifiedSince && !noneMatch) return false; - - // check for no-cache cache request directive - if (cc && cc.indexOf('no-cache') !== -1) return false; - - // parse if-none-match - if (noneMatch) noneMatch = noneMatch.split(/ *, */); - - // if-none-match - if (noneMatch) etagMatches = ~noneMatch.indexOf(etag) || '*' == noneMatch[0]; - - // if-modified-since - if (modifiedSince) { - modifiedSince = new Date(modifiedSince); - lastModified = new Date(lastModified); - notModified = lastModified <= modifiedSince; - } - - return !! (etagMatches && notModified); -} \ No newline at end of file diff --git a/node_modules/express/node_modules/fresh/package.json b/node_modules/express/node_modules/fresh/package.json deleted file mode 100644 index 8300673a..00000000 --- a/node_modules/express/node_modules/fresh/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "fresh", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "description": "HTTP response freshness testing", - "version": "0.2.0", - "main": "index.js", - "repository": { - "type": "git", - "url": "https://github.com/visionmedia/node-fresh.git" - }, - "dependencies": {}, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "readme": "\n# node-fresh\n\n HTTP response freshness testing\n\n## fresh(req, res)\n\n Check freshness of `req` and `res` headers.\n\n When the cache is \"fresh\" __true__ is returned,\n otherwise __false__ is returned to indicate that\n the cache is now stale.\n\n## Example:\n\n```js\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'luna' };\nfresh(req, res);\n// => false\n\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'tobi' };\nfresh(req, res);\n// => true\n```\n\n## Installation\n\n```\n$ npm install fresh\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/node-fresh/issues" - }, - "homepage": "https://github.com/visionmedia/node-fresh", - "_id": "fresh@0.2.0", - "dist": { - "shasum": "bfd9402cf3df12c4a4c310c79f99a3dde13d34a7" - }, - "_from": "fresh@0.2.0", - "_resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.0.tgz" -} diff --git a/node_modules/express/node_modules/merge-descriptors/.npmignore b/node_modules/express/node_modules/merge-descriptors/.npmignore deleted file mode 100644 index f62e6050..00000000 --- a/node_modules/express/node_modules/merge-descriptors/.npmignore +++ /dev/null @@ -1,59 +0,0 @@ -# Compiled source # -################### -*.com -*.class -*.dll -*.exe -*.o -*.so - -# Packages # -############ -# it's better to unpack these files and commit the raw source -# git has its own built in compression methods -*.7z -*.dmg -*.gz -*.iso -*.jar -*.rar -*.tar -*.zip - -# Logs and databases # -###################### -*.log -*.sql -*.sqlite - -# OS generated files # -###################### -.DS_Store* -ehthumbs.db -Icon? -Thumbs.db - -# Node.js # -########### -lib-cov -*.seed -*.log -*.csv -*.dat -*.out -*.pid -*.gz - -pids -logs -results - -node_modules -npm-debug.log - -# Components # -############## - -/build -/components -/vendors \ No newline at end of file diff --git a/node_modules/express/node_modules/merge-descriptors/README.md b/node_modules/express/node_modules/merge-descriptors/README.md deleted file mode 100644 index 34d715df..00000000 --- a/node_modules/express/node_modules/merge-descriptors/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# Merge Descriptors [![Build Status](https://travis-ci.org/jonathanong/merge-descriptors.png)](https://travis-ci.org/jonathanong/merge-descriptors) - -Merge objects using descriptors. - -```js -var thing = { - get name() { - return 'jon' - } -} - -var animal = { - -} - -merge(animal, thing) - -animal.name === 'jon' -``` - -## API - -### merge(destination, source) - -Overwrites `destination`'s descriptors with `source`'s. - -## License - -The MIT License (MIT) - -Copyright (c) 2013 Jonathan Ong me@jongleberry.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/express/node_modules/merge-descriptors/component.json b/node_modules/express/node_modules/merge-descriptors/component.json deleted file mode 100644 index 26b1b8e8..00000000 --- a/node_modules/express/node_modules/merge-descriptors/component.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "merge-descriptors", - "description": "Merge objects using descriptors", - "version": "0.0.1", - "scripts": [ - "index.js" - ], - "repo": "jonathanong/merge-descriptors", - "license": "MIT" -} \ No newline at end of file diff --git a/node_modules/express/node_modules/merge-descriptors/index.js b/node_modules/express/node_modules/merge-descriptors/index.js deleted file mode 100644 index e4e23793..00000000 --- a/node_modules/express/node_modules/merge-descriptors/index.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = function (dest, src) { - Object.getOwnPropertyNames(src).forEach(function (name) { - var descriptor = Object.getOwnPropertyDescriptor(src, name) - Object.defineProperty(dest, name, descriptor) - }) - - return dest -} \ No newline at end of file diff --git a/node_modules/express/node_modules/merge-descriptors/package.json b/node_modules/express/node_modules/merge-descriptors/package.json deleted file mode 100644 index 059520b1..00000000 --- a/node_modules/express/node_modules/merge-descriptors/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "merge-descriptors", - "description": "Merge objects using descriptors", - "version": "0.0.1", - "author": { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/jonathanong/merge-descriptors.git" - }, - "bugs": { - "url": "https://github.com/jonathanong/merge-descriptors/issues" - }, - "scripts": { - "test": "make test;" - }, - "readme": "# Merge Descriptors [![Build Status](https://travis-ci.org/jonathanong/merge-descriptors.png)](https://travis-ci.org/jonathanong/merge-descriptors)\n\nMerge objects using descriptors.\n\n```js\nvar thing = {\n get name() {\n return 'jon'\n }\n}\n\nvar animal = {\n\n}\n\nmerge(animal, thing)\n\nanimal.name === 'jon'\n```\n\n## API\n\n### merge(destination, source)\n\nOverwrites `destination`'s descriptors with `source`'s.\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2013 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.", - "readmeFilename": "README.md", - "homepage": "https://github.com/jonathanong/merge-descriptors", - "_id": "merge-descriptors@0.0.1", - "dist": { - "shasum": "2ff0980c924cf81d0b5d1fb601177cb8bb56c0d0" - }, - "_from": "merge-descriptors@0.0.1", - "_resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.1.tgz" -} diff --git a/node_modules/express/node_modules/methods/History.md b/node_modules/express/node_modules/methods/History.md deleted file mode 100644 index 1d0e229f..00000000 --- a/node_modules/express/node_modules/methods/History.md +++ /dev/null @@ -1,5 +0,0 @@ - -0.1.0 / 2013-10-28 -================== - - * add http.METHODS support diff --git a/node_modules/express/node_modules/methods/Readme.md b/node_modules/express/node_modules/methods/Readme.md deleted file mode 100644 index ac0658e2..00000000 --- a/node_modules/express/node_modules/methods/Readme.md +++ /dev/null @@ -1,4 +0,0 @@ - -# Methods - - HTTP verbs that node core's parser supports. diff --git a/node_modules/express/node_modules/methods/index.js b/node_modules/express/node_modules/methods/index.js deleted file mode 100644 index 95b93f5f..00000000 --- a/node_modules/express/node_modules/methods/index.js +++ /dev/null @@ -1,37 +0,0 @@ - -var http = require('http'); - -if (http.METHODS) { - module.exports = http.METHODS.map(function(method){ - return method.toLowerCase(); - }); - - return; -} - -module.exports = [ - 'get', - 'post', - 'put', - 'head', - 'delete', - 'options', - 'trace', - 'copy', - 'lock', - 'mkcol', - 'move', - 'propfind', - 'proppatch', - 'unlock', - 'report', - 'mkactivity', - 'checkout', - 'merge', - 'm-search', - 'notify', - 'subscribe', - 'unsubscribe', - 'patch', - 'search' -]; diff --git a/node_modules/express/node_modules/methods/package.json b/node_modules/express/node_modules/methods/package.json deleted file mode 100644 index e328b9dd..00000000 --- a/node_modules/express/node_modules/methods/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "methods", - "version": "0.1.0", - "description": "HTTP methods that node supports", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [ - "http", - "methods" - ], - "author": { - "name": "TJ Holowaychuk" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/node-methods.git" - }, - "readme": "\n# Methods\n\n HTTP verbs that node core's parser supports.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/node-methods/issues" - }, - "homepage": "https://github.com/visionmedia/node-methods", - "_id": "methods@0.1.0", - "dist": { - "shasum": "335d429eefd21b7bacf2e9c922a8d2bd14a30e4f" - }, - "_from": "methods@0.1.0", - "_resolved": "https://registry.npmjs.org/methods/-/methods-0.1.0.tgz" -} diff --git a/node_modules/express/node_modules/mkdirp/.npmignore b/node_modules/express/node_modules/mkdirp/.npmignore deleted file mode 100644 index 9303c347..00000000 --- a/node_modules/express/node_modules/mkdirp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/node_modules/express/node_modules/mkdirp/.travis.yml b/node_modules/express/node_modules/mkdirp/.travis.yml deleted file mode 100644 index 84fd7ca2..00000000 --- a/node_modules/express/node_modules/mkdirp/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.9 diff --git a/node_modules/express/node_modules/mkdirp/LICENSE b/node_modules/express/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb..00000000 --- a/node_modules/express/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/express/node_modules/mkdirp/examples/pow.js b/node_modules/express/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e6924212..00000000 --- a/node_modules/express/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -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/express/node_modules/mkdirp/index.js b/node_modules/express/node_modules/mkdirp/index.js deleted file mode 100644 index fda6de8a..00000000 --- a/node_modules/express/node_modules/mkdirp/index.js +++ /dev/null @@ -1,82 +0,0 @@ -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/express/node_modules/mkdirp/package.json b/node_modules/express/node_modules/mkdirp/package.json deleted file mode 100644 index 221a22e3..00000000 --- a/node_modules/express/node_modules/mkdirp/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "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.5" -} diff --git a/node_modules/express/node_modules/mkdirp/readme.markdown b/node_modules/express/node_modules/mkdirp/readme.markdown deleted file mode 100644 index 83b0216a..00000000 --- a/node_modules/express/node_modules/mkdirp/readme.markdown +++ /dev/null @@ -1,63 +0,0 @@ -# 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/express/node_modules/mkdirp/test/chmod.js b/node_modules/express/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 520dcb8e..00000000 --- a/node_modules/express/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,38 +0,0 @@ -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/express/node_modules/mkdirp/test/clobber.js b/node_modules/express/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 0eb70998..00000000 --- a/node_modules/express/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -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/express/node_modules/mkdirp/test/mkdirp.js b/node_modules/express/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index b07cd70c..00000000 --- a/node_modules/express/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -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/express/node_modules/mkdirp/test/perm.js b/node_modules/express/node_modules/mkdirp/test/perm.js deleted file mode 100644 index 23a7abbd..00000000 --- a/node_modules/express/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -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/express/node_modules/mkdirp/test/perm_sync.js b/node_modules/express/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index f685f609..00000000 --- a/node_modules/express/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,39 +0,0 @@ -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/express/node_modules/mkdirp/test/race.js b/node_modules/express/node_modules/mkdirp/test/race.js deleted file mode 100644 index 96a04476..00000000 --- a/node_modules/express/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,41 +0,0 @@ -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/express/node_modules/mkdirp/test/rel.js b/node_modules/express/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 79858243..00000000 --- a/node_modules/express/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -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/express/node_modules/mkdirp/test/return.js b/node_modules/express/node_modules/mkdirp/test/return.js deleted file mode 100644 index bce68e56..00000000 --- a/node_modules/express/node_modules/mkdirp/test/return.js +++ /dev/null @@ -1,25 +0,0 @@ -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/express/node_modules/mkdirp/test/return_sync.js b/node_modules/express/node_modules/mkdirp/test/return_sync.js deleted file mode 100644 index 7c222d35..00000000 --- a/node_modules/express/node_modules/mkdirp/test/return_sync.js +++ /dev/null @@ -1,24 +0,0 @@ -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/express/node_modules/mkdirp/test/root.js b/node_modules/express/node_modules/mkdirp/test/root.js deleted file mode 100644 index 97ad7a2f..00000000 --- a/node_modules/express/node_modules/mkdirp/test/root.js +++ /dev/null @@ -1,18 +0,0 @@ -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/express/node_modules/mkdirp/test/sync.js b/node_modules/express/node_modules/mkdirp/test/sync.js deleted file mode 100644 index 7530cada..00000000 --- a/node_modules/express/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,32 +0,0 @@ -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/express/node_modules/mkdirp/test/umask.js b/node_modules/express/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 64ccafe2..00000000 --- a/node_modules/express/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -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/express/node_modules/mkdirp/test/umask_sync.js b/node_modules/express/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index 35bd5cbb..00000000 --- a/node_modules/express/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,32 +0,0 @@ -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/express/node_modules/range-parser/.npmignore b/node_modules/express/node_modules/range-parser/.npmignore deleted file mode 100644 index 9daeafb9..00000000 --- a/node_modules/express/node_modules/range-parser/.npmignore +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/node_modules/express/node_modules/range-parser/History.md b/node_modules/express/node_modules/range-parser/History.md deleted file mode 100644 index 82df7b1e..00000000 --- a/node_modules/express/node_modules/range-parser/History.md +++ /dev/null @@ -1,15 +0,0 @@ - -0.0.4 / 2012-06-17 -================== - - * changed: ret -1 for unsatisfiable and -2 when invalid - -0.0.3 / 2012-06-17 -================== - - * fix last-byte-pos default to len - 1 - -0.0.2 / 2012-06-14 -================== - - * add `.type` diff --git a/node_modules/express/node_modules/range-parser/Makefile b/node_modules/express/node_modules/range-parser/Makefile deleted file mode 100644 index 8e8640f2..00000000 --- a/node_modules/express/node_modules/range-parser/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --reporter spec \ - --require should - -.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/range-parser/Readme.md b/node_modules/express/node_modules/range-parser/Readme.md deleted file mode 100644 index b2a67fe8..00000000 --- a/node_modules/express/node_modules/range-parser/Readme.md +++ /dev/null @@ -1,28 +0,0 @@ - -# node-range-parser - - Range header field parser. - -## Example: - -```js -assert(-1 == parse(200, 'bytes=500-20')); -assert(-2 == parse(200, 'bytes=malformed')); -parse(200, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 199 }])); -parse(1000, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 499 }])); -parse(1000, 'bytes=40-80').should.eql(arr('bytes', [{ start: 40, end: 80 }])); -parse(1000, 'bytes=-500').should.eql(arr('bytes', [{ start: 500, end: 999 }])); -parse(1000, 'bytes=-400').should.eql(arr('bytes', [{ start: 600, end: 999 }])); -parse(1000, 'bytes=500-').should.eql(arr('bytes', [{ start: 500, end: 999 }])); -parse(1000, 'bytes=400-').should.eql(arr('bytes', [{ start: 400, end: 999 }])); -parse(1000, 'bytes=0-0').should.eql(arr('bytes', [{ start: 0, end: 0 }])); -parse(1000, 'bytes=-1').should.eql(arr('bytes', [{ start: 999, end: 999 }])); -parse(1000, 'items=0-5').should.eql(arr('items', [{ start: 0, end: 5 }])); -parse(1000, 'bytes=40-80,-1').should.eql(arr('bytes', [{ start: 40, end: 80 }, { start: 999, end: 999 }])); -``` - -## Installation - -``` -$ npm install range-parser -``` \ No newline at end of file diff --git a/node_modules/express/node_modules/range-parser/index.js b/node_modules/express/node_modules/range-parser/index.js deleted file mode 100644 index 9b0f7a8e..00000000 --- a/node_modules/express/node_modules/range-parser/index.js +++ /dev/null @@ -1,49 +0,0 @@ - -/** - * Parse "Range" header `str` relative to the given file `size`. - * - * @param {Number} size - * @param {String} str - * @return {Array} - * @api public - */ - -module.exports = function(size, str){ - var valid = true; - var i = str.indexOf('='); - - if (-1 == i) return -2; - - var arr = str.slice(i + 1).split(',').map(function(range){ - var range = range.split('-') - , start = parseInt(range[0], 10) - , end = parseInt(range[1], 10); - - // -nnn - if (isNaN(start)) { - start = size - end; - end = size - 1; - // nnn- - } else if (isNaN(end)) { - end = size - 1; - } - - // limit last-byte-pos to current length - if (end > size - 1) end = size - 1; - - // invalid - if (isNaN(start) - || isNaN(end) - || start > end - || start < 0) valid = false; - - return { - start: start, - end: end - }; - }); - - arr.type = str.slice(0, i); - - return valid ? arr : -1; -}; \ No newline at end of file diff --git a/node_modules/express/node_modules/range-parser/package.json b/node_modules/express/node_modules/range-parser/package.json deleted file mode 100644 index 0e048f77..00000000 --- a/node_modules/express/node_modules/range-parser/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "range-parser", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "description": "Range header field string parser", - "version": "0.0.4", - "main": "index.js", - "dependencies": {}, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "readme": "\n# node-range-parser\n\n Range header field parser.\n\n## Example:\n\n```js\nassert(-1 == parse(200, 'bytes=500-20'));\nassert(-2 == parse(200, 'bytes=malformed'));\nparse(200, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 199 }]));\nparse(1000, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 499 }]));\nparse(1000, 'bytes=40-80').should.eql(arr('bytes', [{ start: 40, end: 80 }]));\nparse(1000, 'bytes=-500').should.eql(arr('bytes', [{ start: 500, end: 999 }]));\nparse(1000, 'bytes=-400').should.eql(arr('bytes', [{ start: 600, end: 999 }]));\nparse(1000, 'bytes=500-').should.eql(arr('bytes', [{ start: 500, end: 999 }]));\nparse(1000, 'bytes=400-').should.eql(arr('bytes', [{ start: 400, end: 999 }]));\nparse(1000, 'bytes=0-0').should.eql(arr('bytes', [{ start: 0, end: 0 }]));\nparse(1000, 'bytes=-1').should.eql(arr('bytes', [{ start: 999, end: 999 }]));\nparse(1000, 'items=0-5').should.eql(arr('items', [{ start: 0, end: 5 }]));\nparse(1000, 'bytes=40-80,-1').should.eql(arr('bytes', [{ start: 40, end: 80 }, { start: 999, end: 999 }]));\n```\n\n## Installation\n\n```\n$ npm install range-parser\n```", - "readmeFilename": "Readme.md", - "_id": "range-parser@0.0.4", - "dist": { - "shasum": "c0427ffef51c10acba0782a46c9602e744ff620b" - }, - "_from": "range-parser@0.0.4", - "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz" -} diff --git a/node_modules/express/node_modules/send/.npmignore b/node_modules/express/node_modules/send/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/node_modules/express/node_modules/send/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/express/node_modules/send/History.md b/node_modules/express/node_modules/send/History.md deleted file mode 100644 index 55c4af74..00000000 --- a/node_modules/express/node_modules/send/History.md +++ /dev/null @@ -1,40 +0,0 @@ - -0.1.4 / 2013-08-11 -================== - - * update fresh - -0.1.3 / 2013-07-08 -================== - - * Revert "Fix fd leak" - -0.1.2 / 2013-07-03 -================== - - * Fix fd leak - -0.1.0 / 2012-08-25 -================== - - * add options parameter to send() that is passed to fs.createReadStream() [kanongil] - -0.0.4 / 2012-08-16 -================== - - * allow custom "Accept-Ranges" definition - -0.0.3 / 2012-07-16 -================== - - * fix normalization of the root directory. Closes #3 - -0.0.2 / 2012-07-09 -================== - - * add passing of req explicitly for now (YUCK) - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/express/node_modules/send/Makefile b/node_modules/express/node_modules/send/Makefile deleted file mode 100644 index a9dcfd50..00000000 --- a/node_modules/express/node_modules/send/Makefile +++ /dev/null @@ -1,8 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --require should \ - --reporter spec \ - --bail - -.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/send/Readme.md b/node_modules/express/node_modules/send/Readme.md deleted file mode 100644 index ea7b2341..00000000 --- a/node_modules/express/node_modules/send/Readme.md +++ /dev/null @@ -1,128 +0,0 @@ -# send - - Send is Connect's `static()` extracted for generalized use, a streaming static file - server supporting partial responses (Ranges), conditional-GET negotiation, high test coverage, and granular events which may be leveraged to take appropriate actions in your application or framework. - -## Installation - - $ npm install send - -## Examples - - Small: - -```js -var http = require('http'); -var send = require('send'); - -var app = http.createServer(function(req, res){ - send(req, req.url).pipe(res); -}).listen(3000); -``` - - Serving from a root directory with custom error-handling: - -```js -var http = require('http'); -var send = require('send'); -var url = require('url'); - -var app = http.createServer(function(req, res){ - // your custom error-handling logic: - function error(err) { - res.statusCode = err.status || 500; - res.end(err.message); - } - - // your custom directory handling logic: - function redirect() { - res.statusCode = 301; - res.setHeader('Location', req.url + '/'); - res.end('Redirecting to ' + req.url + '/'); - } - - // transfer arbitrary files from within - // /www/example.com/public/* - send(req, url.parse(req.url).pathname) - .root('/www/example.com/public') - .on('error', error) - .on('directory', redirect) - .pipe(res); -}).listen(3000); -``` - -## API - -### Events - - - `error` an error occurred `(err)` - - `directory` a directory was requested - - `file` a file was requested `(path, stat)` - - `stream` file streaming has started `(stream)` - - `end` streaming has completed - -### .root(dir) - - Serve files relative to `path`. Aliased as `.from(dir)`. - -### .index(path) - - By default send supports "index.html" files, to disable this - invoke `.index(false)` or to supply a new index pass a string. - -### .maxage(ms) - - Provide a max-age in milliseconds for http caching, defaults to 0. - -### .hidden(bool) - - Enable or disable transfer of hidden files, defaults to false. - -## Error-handling - - By default when no `error` listeners are present an automatic response will be made, otherwise you have full control over the response, aka you may show a 5xx page etc. - -## Caching - - It does _not_ perform internal caching, you should use a reverse proxy cache such - as Varnish for this, or those fancy things called CDNs. If your application is small enough that it would benefit from single-node memory caching, it's small enough that it does not need caching at all ;). - -## Debugging - - To enable `debug()` instrumentation output export __DEBUG__: - -``` -$ DEBUG=send node app -``` - -## Running tests - -``` -$ npm install -$ make test -``` - -## License - -(The MIT License) - -Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> - -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/express/node_modules/send/index.js b/node_modules/express/node_modules/send/index.js deleted file mode 100644 index f17158d8..00000000 --- a/node_modules/express/node_modules/send/index.js +++ /dev/null @@ -1,2 +0,0 @@ - -module.exports = require('./lib/send'); \ No newline at end of file diff --git a/node_modules/express/node_modules/send/lib/send.js b/node_modules/express/node_modules/send/lib/send.js deleted file mode 100644 index a3d94a69..00000000 --- a/node_modules/express/node_modules/send/lib/send.js +++ /dev/null @@ -1,474 +0,0 @@ - -/** - * Module dependencies. - */ - -var debug = require('debug')('send') - , parseRange = require('range-parser') - , Stream = require('stream') - , mime = require('mime') - , fresh = require('fresh') - , path = require('path') - , http = require('http') - , fs = require('fs') - , basename = path.basename - , normalize = path.normalize - , join = path.join - , utils = require('./utils'); - -/** - * Expose `send`. - */ - -exports = module.exports = send; - -/** - * Expose mime module. - */ - -exports.mime = mime; - -/** - * Return a `SendStream` for `req` and `path`. - * - * @param {Request} req - * @param {String} path - * @param {Object} options - * @return {SendStream} - * @api public - */ - -function send(req, path, options) { - return new SendStream(req, path, options); -} - -/** - * Initialize a `SendStream` with the given `path`. - * - * Events: - * - * - `error` an error occurred - * - `stream` file streaming has started - * - `end` streaming has completed - * - `directory` a directory was requested - * - * @param {Request} req - * @param {String} path - * @param {Object} options - * @api private - */ - -function SendStream(req, path, options) { - var self = this; - this.req = req; - this.path = path; - this.options = options || {}; - this.maxage(0); - this.hidden(false); - this.index('index.html'); -} - -/** - * Inherits from `Stream.prototype`. - */ - -SendStream.prototype.__proto__ = Stream.prototype; - -/** - * Enable or disable "hidden" (dot) files. - * - * @param {Boolean} path - * @return {SendStream} - * @api public - */ - -SendStream.prototype.hidden = function(val){ - debug('hidden %s', val); - this._hidden = val; - return this; -}; - -/** - * Set index `path`, set to a falsy - * value to disable index support. - * - * @param {String|Boolean} path - * @return {SendStream} - * @api public - */ - -SendStream.prototype.index = function(path){ - debug('index %s', path); - this._index = path; - return this; -}; - -/** - * Set root `path`. - * - * @param {String} path - * @return {SendStream} - * @api public - */ - -SendStream.prototype.root = -SendStream.prototype.from = function(path){ - this._root = normalize(path); - return this; -}; - -/** - * Set max-age to `ms`. - * - * @param {Number} ms - * @return {SendStream} - * @api public - */ - -SendStream.prototype.maxage = function(ms){ - if (Infinity == ms) ms = 60 * 60 * 24 * 365 * 1000; - debug('max-age %d', ms); - this._maxage = ms; - return this; -}; - -/** - * Emit error with `status`. - * - * @param {Number} status - * @api private - */ - -SendStream.prototype.error = function(status, err){ - var res = this.res; - var msg = http.STATUS_CODES[status]; - err = err || new Error(msg); - err.status = status; - if (this.listeners('error').length) return this.emit('error', err); - res.statusCode = err.status; - res.end(msg); -}; - -/** - * Check if the pathname is potentially malicious. - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.isMalicious = function(){ - return !this._root && ~this.path.indexOf('..'); -}; - -/** - * Check if the pathname ends with "/". - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.hasTrailingSlash = function(){ - return '/' == this.path[this.path.length - 1]; -}; - -/** - * Check if the basename leads with ".". - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.hasLeadingDot = function(){ - return '.' == basename(this.path)[0]; -}; - -/** - * Check if this is a conditional GET request. - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.isConditionalGET = function(){ - return this.req.headers['if-none-match'] - || this.req.headers['if-modified-since']; -}; - -/** - * Strip content-* header fields. - * - * @api private - */ - -SendStream.prototype.removeContentHeaderFields = function(){ - var res = this.res; - Object.keys(res._headers).forEach(function(field){ - if (0 == field.indexOf('content')) { - res.removeHeader(field); - } - }); -}; - -/** - * Respond with 304 not modified. - * - * @api private - */ - -SendStream.prototype.notModified = function(){ - var res = this.res; - debug('not modified'); - this.removeContentHeaderFields(); - res.statusCode = 304; - res.end(); -}; - -/** - * Check if the request is cacheable, aka - * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}). - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.isCachable = function(){ - var res = this.res; - return (res.statusCode >= 200 && res.statusCode < 300) || 304 == res.statusCode; -}; - -/** - * Handle stat() error. - * - * @param {Error} err - * @api private - */ - -SendStream.prototype.onStatError = function(err){ - var notfound = ['ENOENT', 'ENAMETOOLONG', 'ENOTDIR']; - if (~notfound.indexOf(err.code)) return this.error(404, err); - this.error(500, err); -}; - -/** - * Check if the cache is fresh. - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.isFresh = function(){ - return fresh(this.req.headers, this.res._headers); -}; - -/** - * Redirect to `path`. - * - * @param {String} path - * @api private - */ - -SendStream.prototype.redirect = function(path){ - if (this.listeners('directory').length) return this.emit('directory'); - var res = this.res; - path += '/'; - res.statusCode = 301; - res.setHeader('Location', path); - res.end('Redirecting to ' + utils.escape(path)); -}; - -/** - * Pipe to `res. - * - * @param {Stream} res - * @return {Stream} res - * @api public - */ - -SendStream.prototype.pipe = function(res){ - var self = this - , args = arguments - , path = this.path - , root = this._root; - - // references - this.res = res; - - // invalid request uri - path = utils.decode(path); - if (-1 == path) return this.error(400); - - // null byte(s) - if (~path.indexOf('\0')) return this.error(400); - - // join / normalize from optional root dir - if (root) path = normalize(join(this._root, path)); - - // ".." is malicious without "root" - if (this.isMalicious()) return this.error(403); - - // malicious path - if (root && 0 != path.indexOf(root)) return this.error(403); - - // hidden file support - if (!this._hidden && this.hasLeadingDot()) return this.error(404); - - // index file support - if (this._index && this.hasTrailingSlash()) path += this._index; - - debug('stat "%s"', path); - fs.stat(path, function(err, stat){ - if (err) return self.onStatError(err); - if (stat.isDirectory()) return self.redirect(self.path); - self.emit('file', path, stat); - self.send(path, stat); - }); - - return res; -}; - -/** - * Transfer `path`. - * - * @param {String} path - * @api public - */ - -SendStream.prototype.send = function(path, stat){ - var options = this.options; - var len = stat.size; - var res = this.res; - var req = this.req; - var ranges = req.headers.range; - var offset = options.start || 0; - - // set header fields - this.setHeader(stat); - - // set content-type - this.type(path); - - // conditional GET support - if (this.isConditionalGET() - && this.isCachable() - && this.isFresh()) { - return this.notModified(); - } - - // adjust len to start/end options - len = Math.max(0, len - offset); - if (options.end !== undefined) { - var bytes = options.end - offset + 1; - if (len > bytes) len = bytes; - } - - // Range support - if (ranges) { - ranges = parseRange(len, ranges); - - // unsatisfiable - if (-1 == ranges) { - res.setHeader('Content-Range', 'bytes */' + stat.size); - return this.error(416); - } - - // valid (syntactically invalid ranges are treated as a regular response) - if (-2 != ranges) { - options.start = offset + ranges[0].start; - options.end = offset + ranges[0].end; - - // Content-Range - res.statusCode = 206; - res.setHeader('Content-Range', 'bytes ' - + ranges[0].start - + '-' - + ranges[0].end - + '/' - + len); - len = options.end - options.start + 1; - } - } - - // content-length - res.setHeader('Content-Length', len); - - // HEAD support - if ('HEAD' == req.method) return res.end(); - - this.stream(path, options); -}; - -/** - * Stream `path` to the response. - * - * @param {String} path - * @param {Object} options - * @api private - */ - -SendStream.prototype.stream = function(path, options){ - // TODO: this is all lame, refactor meeee - var self = this; - var res = this.res; - var req = this.req; - - // pipe - var stream = fs.createReadStream(path, options); - this.emit('stream', stream); - stream.pipe(res); - - // socket closed, done with the fd - req.on('close', stream.destroy.bind(stream)); - - // error handling code-smell - stream.on('error', function(err){ - // no hope in responding - if (res._header) { - console.error(err.stack); - req.destroy(); - return; - } - - // 500 - err.status = 500; - self.emit('error', err); - }); - - // end - stream.on('end', function(){ - self.emit('end'); - }); -}; - -/** - * Set content-type based on `path` - * if it hasn't been explicitly set. - * - * @param {String} path - * @api private - */ - -SendStream.prototype.type = function(path){ - var res = this.res; - if (res.getHeader('Content-Type')) return; - var type = mime.lookup(path); - var charset = mime.charsets.lookup(type); - debug('content-type %s', type); - res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : '')); -}; - -/** - * Set reaponse header fields, most - * fields may be pre-defined. - * - * @param {Object} stat - * @api private - */ - -SendStream.prototype.setHeader = function(stat){ - var res = this.res; - if (!res.getHeader('Accept-Ranges')) res.setHeader('Accept-Ranges', 'bytes'); - if (!res.getHeader('ETag')) res.setHeader('ETag', utils.etag(stat)); - if (!res.getHeader('Date')) res.setHeader('Date', new Date().toUTCString()); - if (!res.getHeader('Cache-Control')) res.setHeader('Cache-Control', 'public, max-age=' + (this._maxage / 1000)); - if (!res.getHeader('Last-Modified')) res.setHeader('Last-Modified', stat.mtime.toUTCString()); -}; diff --git a/node_modules/express/node_modules/send/lib/utils.js b/node_modules/express/node_modules/send/lib/utils.js deleted file mode 100644 index 950e5a2c..00000000 --- a/node_modules/express/node_modules/send/lib/utils.js +++ /dev/null @@ -1,47 +0,0 @@ - -/** - * Return an ETag in the form of `"-"` - * from the given `stat`. - * - * @param {Object} stat - * @return {String} - * @api private - */ - -exports.etag = function(stat) { - return '"' + stat.size + '-' + Number(stat.mtime) + '"'; -}; - -/** - * decodeURIComponent. - * - * Allows V8 to only deoptimize this fn instead of all - * of send(). - * - * @param {String} path - * @api private - */ - -exports.decode = function(path){ - try { - return decodeURIComponent(path); - } catch (err) { - return -1; - } -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function(html){ - return String(html) - .replace(/&(?!\w+;)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; \ No newline at end of file diff --git a/node_modules/express/node_modules/send/node_modules/mime/LICENSE b/node_modules/express/node_modules/send/node_modules/mime/LICENSE deleted file mode 100644 index 451fc455..00000000 --- a/node_modules/express/node_modules/send/node_modules/mime/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -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/express/node_modules/send/node_modules/mime/README.md b/node_modules/express/node_modules/send/node_modules/mime/README.md deleted file mode 100644 index 6ca19bd1..00000000 --- a/node_modules/express/node_modules/send/node_modules/mime/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# mime - -Comprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community. - -## Install - -Install with [npm](http://github.com/isaacs/npm): - - npm install mime - -## API - Queries - -### mime.lookup(path) -Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. - - var mime = require('mime'); - - mime.lookup('/path/to/file.txt'); // => 'text/plain' - mime.lookup('file.txt'); // => 'text/plain' - mime.lookup('.TXT'); // => 'text/plain' - mime.lookup('htm'); // => 'text/html' - -### mime.default_type -Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) - -### mime.extension(type) -Get the default extension for `type` - - mime.extension('text/html'); // => 'html' - mime.extension('application/octet-stream'); // => 'bin' - -### mime.charsets.lookup() - -Map mime-type to charset - - mime.charsets.lookup('text/plain'); // => 'UTF-8' - -(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) - -## API - Defining Custom Types - -The following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types). - -### mime.define() - -Add custom mime/extension mappings - - mime.define({ - 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], - 'application/x-my-type': ['x-mt', 'x-mtt'], - // etc ... - }); - - mime.lookup('x-sft'); // => 'text/x-some-format' - -The first entry in the extensions array is returned by `mime.extension()`. E.g. - - mime.extension('text/x-some-format'); // => 'x-sf' - -### mime.load(filepath) - -Load mappings from an Apache ".types" format file - - mime.load('./my_project.types'); - -The .types file format is simple - See the `types` dir for examples. diff --git a/node_modules/express/node_modules/send/node_modules/mime/mime.js b/node_modules/express/node_modules/send/node_modules/mime/mime.js deleted file mode 100644 index 48be0c5e..00000000 --- a/node_modules/express/node_modules/send/node_modules/mime/mime.js +++ /dev/null @@ -1,114 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -function Mime() { - // Map of extension -> mime type - this.types = Object.create(null); - - // Map of mime type -> extension - this.extensions = Object.create(null); -} - -/** - * Define mimetype -> extension mappings. Each key is a mime-type that maps - * to an array of extensions associated with the type. The first extension is - * used as the default extension for the type. - * - * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); - * - * @param map (Object) type definitions - */ -Mime.prototype.define = function (map) { - for (var type in map) { - var exts = map[type]; - - for (var i = 0; i < exts.length; i++) { - if (process.env.DEBUG_MIME && this.types[exts]) { - console.warn(this._loading.replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + - this.types[exts] + ' to ' + type); - } - - this.types[exts[i]] = type; - } - - // Default extension is the first one we encounter - if (!this.extensions[type]) { - this.extensions[type] = exts[0]; - } - } -}; - -/** - * Load an Apache2-style ".types" file - * - * This may be called multiple times (it's expected). Where files declare - * overlapping types/extensions, the last file wins. - * - * @param file (String) path of file to load. - */ -Mime.prototype.load = function(file) { - - this._loading = file; - // Read file and split into lines - var map = {}, - content = fs.readFileSync(file, 'ascii'), - lines = content.split(/[\r\n]+/); - - lines.forEach(function(line) { - // Clean up whitespace/comments, and split into fields - var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); - map[fields.shift()] = fields; - }); - - this.define(map); - - this._loading = null; -}; - -/** - * Lookup a mime type based on extension - */ -Mime.prototype.lookup = function(path, fallback) { - var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase(); - - return this.types[ext] || fallback || this.default_type; -}; - -/** - * Return file extension associated with a mime type - */ -Mime.prototype.extension = function(mimeType) { - var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); - return this.extensions[type]; -}; - -// Default instance -var mime = new Mime(); - -// Load local copy of -// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types -mime.load(path.join(__dirname, 'types/mime.types')); - -// Load additional types from node.js community -mime.load(path.join(__dirname, 'types/node.types')); - -// Default type -mime.default_type = mime.lookup('bin'); - -// -// Additional API specific to the default instance -// - -mime.Mime = Mime; - -/** - * Lookup a charset based on mime type. - */ -mime.charsets = { - lookup: function(mimeType, fallback) { - // Assume text types are utf8 - return (/^text\//).test(mimeType) ? 'UTF-8' : fallback; - } -}; - -module.exports = mime; diff --git a/node_modules/express/node_modules/send/node_modules/mime/package.json b/node_modules/express/node_modules/send/node_modules/mime/package.json deleted file mode 100644 index a9759392..00000000 --- a/node_modules/express/node_modules/send/node_modules/mime/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com", - "url": "http://github.com/broofa" - }, - "contributors": [ - { - "name": "Benjamin Thomas", - "email": "benjamin@benjaminthomas.org", - "url": "http://github.com/bentomas" - } - ], - "dependencies": {}, - "description": "A comprehensive library for mime-type mapping", - "devDependencies": {}, - "keywords": [ - "util", - "mime" - ], - "main": "mime.js", - "name": "mime", - "repository": { - "url": "https://github.com/broofa/node-mime", - "type": "git" - }, - "version": "1.2.11", - "readme": "# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.\n\n var mime = require('mime');\n\n mime.lookup('/path/to/file.txt'); // => 'text/plain'\n mime.lookup('file.txt'); // => 'text/plain'\n mime.lookup('.TXT'); // => 'text/plain'\n mime.lookup('htm'); // => 'text/html'\n\n### mime.default_type\nSets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension('text/html'); // => 'html'\n mime.extension('application/octet-stream'); // => 'bin'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup('text/plain'); // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n 'application/x-my-type': ['x-mt', 'x-mtt'],\n // etc ...\n });\n\n mime.lookup('x-sft'); // => 'text/x-some-format'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n mime.load('./my_project.types');\n\nThe .types file format is simple - See the `types` dir for examples.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/broofa/node-mime/issues" - }, - "homepage": "https://github.com/broofa/node-mime", - "_id": "mime@1.2.11", - "_from": "mime@~1.2.9" -} diff --git a/node_modules/express/node_modules/send/node_modules/mime/test.js b/node_modules/express/node_modules/send/node_modules/mime/test.js deleted file mode 100644 index 2cda1c7a..00000000 --- a/node_modules/express/node_modules/send/node_modules/mime/test.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Usage: node test.js - */ - -var mime = require('./mime'); -var assert = require('assert'); -var path = require('path'); - -function eq(a, b) { - console.log('Test: ' + a + ' === ' + b); - assert.strictEqual.apply(null, arguments); -} - -console.log(Object.keys(mime.extensions).length + ' types'); -console.log(Object.keys(mime.types).length + ' extensions\n'); - -// -// Test mime lookups -// - -eq('text/plain', mime.lookup('text.txt')); // normal file -eq('text/plain', mime.lookup('TEXT.TXT')); // uppercase -eq('text/plain', mime.lookup('dir/text.txt')); // dir + file -eq('text/plain', mime.lookup('.text.txt')); // hidden file -eq('text/plain', mime.lookup('.txt')); // nameless -eq('text/plain', mime.lookup('txt')); // extension-only -eq('text/plain', mime.lookup('/txt')); // extension-less () -eq('text/plain', mime.lookup('\\txt')); // Windows, extension-less -eq('application/octet-stream', mime.lookup('text.nope')); // unrecognized -eq('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default - -// -// Test extensions -// - -eq('txt', mime.extension(mime.types.text)); -eq('html', mime.extension(mime.types.htm)); -eq('bin', mime.extension('application/octet-stream')); -eq('bin', mime.extension('application/octet-stream ')); -eq('html', mime.extension(' text/html; charset=UTF-8')); -eq('html', mime.extension('text/html; charset=UTF-8 ')); -eq('html', mime.extension('text/html; charset=UTF-8')); -eq('html', mime.extension('text/html ; charset=UTF-8')); -eq('html', mime.extension('text/html;charset=UTF-8')); -eq('html', mime.extension('text/Html;charset=UTF-8')); -eq(undefined, mime.extension('unrecognized')); - -// -// Test node.types lookups -// - -eq('application/font-woff', mime.lookup('file.woff')); -eq('application/octet-stream', mime.lookup('file.buffer')); -eq('audio/mp4', mime.lookup('file.m4a')); -eq('font/opentype', mime.lookup('file.otf')); - -// -// Test charsets -// - -eq('UTF-8', mime.charsets.lookup('text/plain')); -eq(undefined, mime.charsets.lookup(mime.types.js)); -eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); - -// -// Test for overlaps between mime.types and node.types -// - -var apacheTypes = new mime.Mime(), nodeTypes = new mime.Mime(); -apacheTypes.load(path.join(__dirname, 'types/mime.types')); -nodeTypes.load(path.join(__dirname, 'types/node.types')); - -var keys = [].concat(Object.keys(apacheTypes.types)) - .concat(Object.keys(nodeTypes.types)); -keys.sort(); -for (var i = 1; i < keys.length; i++) { - if (keys[i] == keys[i-1]) { - console.warn('Warning: ' + - 'node.types defines ' + keys[i] + '->' + nodeTypes.types[keys[i]] + - ', mime.types defines ' + keys[i] + '->' + apacheTypes.types[keys[i]]); - } -} - -console.log('\nOK'); diff --git a/node_modules/express/node_modules/send/node_modules/mime/types/mime.types b/node_modules/express/node_modules/send/node_modules/mime/types/mime.types deleted file mode 100644 index da8cd691..00000000 --- a/node_modules/express/node_modules/send/node_modules/mime/types/mime.types +++ /dev/null @@ -1,1588 +0,0 @@ -# This file maps Internet media types to unique file extension(s). -# Although created for httpd, this file is used by many software systems -# and has been placed in the public domain for unlimited redisribution. -# -# The table below contains both registered and (common) unregistered types. -# A type that has no unique extension can be ignored -- they are listed -# here to guide configurations toward known types and to make it easier to -# identify "new" types. File extensions are also commonly used to indicate -# content languages and encodings, so choose them carefully. -# -# Internet media types should be registered as described in RFC 4288. -# The registry is at . -# -# MIME type (lowercased) Extensions -# ============================================ ========== -# application/1d-interleaved-parityfec -# application/3gpp-ims+xml -# application/activemessage -application/andrew-inset ez -# application/applefile -application/applixware aw -application/atom+xml atom -application/atomcat+xml atomcat -# application/atomicmail -application/atomsvc+xml atomsvc -# application/auth-policy+xml -# application/batch-smtp -# application/beep+xml -# application/calendar+xml -# application/cals-1840 -# application/ccmp+xml -application/ccxml+xml ccxml -application/cdmi-capability cdmia -application/cdmi-container cdmic -application/cdmi-domain cdmid -application/cdmi-object cdmio -application/cdmi-queue cdmiq -# application/cea-2018+xml -# application/cellml+xml -# application/cfw -# application/cnrp+xml -# application/commonground -# application/conference-info+xml -# application/cpl+xml -# application/csta+xml -# application/cstadata+xml -application/cu-seeme cu -# application/cybercash -application/davmount+xml davmount -# application/dca-rft -# application/dec-dx -# application/dialog-info+xml -# application/dicom -# application/dns -application/docbook+xml dbk -# application/dskpp+xml -application/dssc+der dssc -application/dssc+xml xdssc -# application/dvcs -application/ecmascript ecma -# application/edi-consent -# application/edi-x12 -# application/edifact -application/emma+xml emma -# application/epp+xml -application/epub+zip epub -# application/eshop -# application/example -application/exi exi -# application/fastinfoset -# application/fastsoap -# application/fits -application/font-tdpfr pfr -# application/framework-attributes+xml -application/gml+xml gml -application/gpx+xml gpx -application/gxf gxf -# application/h224 -# application/held+xml -# application/http -application/hyperstudio stk -# application/ibe-key-request+xml -# application/ibe-pkg-reply+xml -# application/ibe-pp-data -# application/iges -# application/im-iscomposing+xml -# application/index -# application/index.cmd -# application/index.obj -# application/index.response -# application/index.vnd -application/inkml+xml ink inkml -# application/iotp -application/ipfix ipfix -# application/ipp -# application/isup -application/java-archive jar -application/java-serialized-object ser -application/java-vm class -application/javascript js -application/json json -application/jsonml+json jsonml -# application/kpml-request+xml -# application/kpml-response+xml -application/lost+xml lostxml -application/mac-binhex40 hqx -application/mac-compactpro cpt -# application/macwriteii -application/mads+xml mads -application/marc mrc -application/marcxml+xml mrcx -application/mathematica ma nb mb -# application/mathml-content+xml -# application/mathml-presentation+xml -application/mathml+xml mathml -# application/mbms-associated-procedure-description+xml -# application/mbms-deregister+xml -# application/mbms-envelope+xml -# application/mbms-msk+xml -# application/mbms-msk-response+xml -# application/mbms-protection-description+xml -# application/mbms-reception-report+xml -# application/mbms-register+xml -# application/mbms-register-response+xml -# application/mbms-user-service-description+xml -application/mbox mbox -# application/media_control+xml -application/mediaservercontrol+xml mscml -application/metalink+xml metalink -application/metalink4+xml meta4 -application/mets+xml mets -# application/mikey -application/mods+xml mods -# application/moss-keys -# application/moss-signature -# application/mosskey-data -# application/mosskey-request -application/mp21 m21 mp21 -application/mp4 mp4s -# application/mpeg4-generic -# application/mpeg4-iod -# application/mpeg4-iod-xmt -# application/msc-ivr+xml -# application/msc-mixer+xml -application/msword doc dot -application/mxf mxf -# application/nasdata -# application/news-checkgroups -# application/news-groupinfo -# application/news-transmission -# application/nss -# application/ocsp-request -# application/ocsp-response -application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy -application/oda oda -application/oebps-package+xml opf -application/ogg ogx -application/omdoc+xml omdoc -application/onenote onetoc onetoc2 onetmp onepkg -application/oxps oxps -# application/parityfec -application/patch-ops-error+xml xer -application/pdf pdf -application/pgp-encrypted pgp -# application/pgp-keys -application/pgp-signature asc sig -application/pics-rules prf -# application/pidf+xml -# application/pidf-diff+xml -application/pkcs10 p10 -application/pkcs7-mime p7m p7c -application/pkcs7-signature p7s -application/pkcs8 p8 -application/pkix-attr-cert ac -application/pkix-cert cer -application/pkix-crl crl -application/pkix-pkipath pkipath -application/pkixcmp pki -application/pls+xml pls -# application/poc-settings+xml -application/postscript ai eps ps -# application/prs.alvestrand.titrax-sheet -application/prs.cww cww -# application/prs.nprend -# application/prs.plucker -# application/prs.rdf-xml-crypt -# application/prs.xsf+xml -application/pskc+xml pskcxml -# application/qsig -application/rdf+xml rdf -application/reginfo+xml rif -application/relax-ng-compact-syntax rnc -# application/remote-printing -application/resource-lists+xml rl -application/resource-lists-diff+xml rld -# application/riscos -# application/rlmi+xml -application/rls-services+xml rs -application/rpki-ghostbusters gbr -application/rpki-manifest mft -application/rpki-roa roa -# application/rpki-updown -application/rsd+xml rsd -application/rss+xml rss -application/rtf rtf -# application/rtx -# application/samlassertion+xml -# application/samlmetadata+xml -application/sbml+xml sbml -application/scvp-cv-request scq -application/scvp-cv-response scs -application/scvp-vp-request spq -application/scvp-vp-response spp -application/sdp sdp -# application/set-payment -application/set-payment-initiation setpay -# application/set-registration -application/set-registration-initiation setreg -# application/sgml -# application/sgml-open-catalog -application/shf+xml shf -# application/sieve -# application/simple-filter+xml -# application/simple-message-summary -# application/simplesymbolcontainer -# application/slate -# application/smil -application/smil+xml smi smil -# application/soap+fastinfoset -# application/soap+xml -application/sparql-query rq -application/sparql-results+xml srx -# application/spirits-event+xml -application/srgs gram -application/srgs+xml grxml -application/sru+xml sru -application/ssdl+xml ssdl -application/ssml+xml ssml -# application/tamp-apex-update -# application/tamp-apex-update-confirm -# application/tamp-community-update -# application/tamp-community-update-confirm -# application/tamp-error -# application/tamp-sequence-adjust -# application/tamp-sequence-adjust-confirm -# application/tamp-status-query -# application/tamp-status-response -# application/tamp-update -# application/tamp-update-confirm -application/tei+xml tei teicorpus -application/thraud+xml tfi -# application/timestamp-query -# application/timestamp-reply -application/timestamped-data tsd -# application/tve-trigger -# application/ulpfec -# application/vcard+xml -# application/vemmi -# application/vividence.scriptfile -# application/vnd.3gpp.bsf+xml -application/vnd.3gpp.pic-bw-large plb -application/vnd.3gpp.pic-bw-small psb -application/vnd.3gpp.pic-bw-var pvb -# application/vnd.3gpp.sms -# application/vnd.3gpp2.bcmcsinfo+xml -# application/vnd.3gpp2.sms -application/vnd.3gpp2.tcap tcap -application/vnd.3m.post-it-notes pwn -application/vnd.accpac.simply.aso aso -application/vnd.accpac.simply.imp imp -application/vnd.acucobol acu -application/vnd.acucorp atc acutc -application/vnd.adobe.air-application-installer-package+zip air -application/vnd.adobe.formscentral.fcdt fcdt -application/vnd.adobe.fxp fxp fxpl -# application/vnd.adobe.partial-upload -application/vnd.adobe.xdp+xml xdp -application/vnd.adobe.xfdf xfdf -# application/vnd.aether.imp -# application/vnd.ah-barcode -application/vnd.ahead.space ahead -application/vnd.airzip.filesecure.azf azf -application/vnd.airzip.filesecure.azs azs -application/vnd.amazon.ebook azw -application/vnd.americandynamics.acc acc -application/vnd.amiga.ami ami -# application/vnd.amundsen.maze+xml -application/vnd.android.package-archive apk -application/vnd.anser-web-certificate-issue-initiation cii -application/vnd.anser-web-funds-transfer-initiation fti -application/vnd.antix.game-component atx -application/vnd.apple.installer+xml mpkg -application/vnd.apple.mpegurl m3u8 -# application/vnd.arastra.swi -application/vnd.aristanetworks.swi swi -application/vnd.astraea-software.iota iota -application/vnd.audiograph aep -# application/vnd.autopackage -# application/vnd.avistar+xml -application/vnd.blueice.multipass mpm -# application/vnd.bluetooth.ep.oob -application/vnd.bmi bmi -application/vnd.businessobjects rep -# application/vnd.cab-jscript -# application/vnd.canon-cpdl -# application/vnd.canon-lips -# application/vnd.cendio.thinlinc.clientconf -application/vnd.chemdraw+xml cdxml -application/vnd.chipnuts.karaoke-mmd mmd -application/vnd.cinderella cdy -# application/vnd.cirpack.isdn-ext -application/vnd.claymore cla -application/vnd.cloanto.rp9 rp9 -application/vnd.clonk.c4group c4g c4d c4f c4p c4u -application/vnd.cluetrust.cartomobile-config c11amc -application/vnd.cluetrust.cartomobile-config-pkg c11amz -# application/vnd.collection+json -# application/vnd.commerce-battelle -application/vnd.commonspace csp -application/vnd.contact.cmsg cdbcmsg -application/vnd.cosmocaller cmc -application/vnd.crick.clicker clkx -application/vnd.crick.clicker.keyboard clkk -application/vnd.crick.clicker.palette clkp -application/vnd.crick.clicker.template clkt -application/vnd.crick.clicker.wordbank clkw -application/vnd.criticaltools.wbs+xml wbs -application/vnd.ctc-posml pml -# application/vnd.ctct.ws+xml -# application/vnd.cups-pdf -# application/vnd.cups-postscript -application/vnd.cups-ppd ppd -# application/vnd.cups-raster -# application/vnd.cups-raw -# application/vnd.curl -application/vnd.curl.car car -application/vnd.curl.pcurl pcurl -# application/vnd.cybank -application/vnd.dart dart -application/vnd.data-vision.rdz rdz -application/vnd.dece.data uvf uvvf uvd uvvd -application/vnd.dece.ttml+xml uvt uvvt -application/vnd.dece.unspecified uvx uvvx -application/vnd.dece.zip uvz uvvz -application/vnd.denovo.fcselayout-link fe_launch -# application/vnd.dir-bi.plate-dl-nosuffix -application/vnd.dna dna -application/vnd.dolby.mlp mlp -# application/vnd.dolby.mobile.1 -# application/vnd.dolby.mobile.2 -application/vnd.dpgraph dpg -application/vnd.dreamfactory dfac -application/vnd.ds-keypoint kpxx -application/vnd.dvb.ait ait -# application/vnd.dvb.dvbj -# application/vnd.dvb.esgcontainer -# application/vnd.dvb.ipdcdftnotifaccess -# application/vnd.dvb.ipdcesgaccess -# application/vnd.dvb.ipdcesgaccess2 -# application/vnd.dvb.ipdcesgpdd -# application/vnd.dvb.ipdcroaming -# application/vnd.dvb.iptv.alfec-base -# application/vnd.dvb.iptv.alfec-enhancement -# application/vnd.dvb.notif-aggregate-root+xml -# application/vnd.dvb.notif-container+xml -# application/vnd.dvb.notif-generic+xml -# application/vnd.dvb.notif-ia-msglist+xml -# application/vnd.dvb.notif-ia-registration-request+xml -# application/vnd.dvb.notif-ia-registration-response+xml -# application/vnd.dvb.notif-init+xml -# application/vnd.dvb.pfr -application/vnd.dvb.service svc -# application/vnd.dxr -application/vnd.dynageo geo -# application/vnd.easykaraoke.cdgdownload -# application/vnd.ecdis-update -application/vnd.ecowin.chart mag -# application/vnd.ecowin.filerequest -# application/vnd.ecowin.fileupdate -# application/vnd.ecowin.series -# application/vnd.ecowin.seriesrequest -# application/vnd.ecowin.seriesupdate -# application/vnd.emclient.accessrequest+xml -application/vnd.enliven nml -# application/vnd.eprints.data+xml -application/vnd.epson.esf esf -application/vnd.epson.msf msf -application/vnd.epson.quickanime qam -application/vnd.epson.salt slt -application/vnd.epson.ssf ssf -# application/vnd.ericsson.quickcall -application/vnd.eszigno3+xml es3 et3 -# application/vnd.etsi.aoc+xml -# application/vnd.etsi.cug+xml -# application/vnd.etsi.iptvcommand+xml -# application/vnd.etsi.iptvdiscovery+xml -# application/vnd.etsi.iptvprofile+xml -# application/vnd.etsi.iptvsad-bc+xml -# application/vnd.etsi.iptvsad-cod+xml -# application/vnd.etsi.iptvsad-npvr+xml -# application/vnd.etsi.iptvservice+xml -# application/vnd.etsi.iptvsync+xml -# application/vnd.etsi.iptvueprofile+xml -# application/vnd.etsi.mcid+xml -# application/vnd.etsi.overload-control-policy-dataset+xml -# application/vnd.etsi.sci+xml -# application/vnd.etsi.simservs+xml -# application/vnd.etsi.tsl+xml -# application/vnd.etsi.tsl.der -# application/vnd.eudora.data -application/vnd.ezpix-album ez2 -application/vnd.ezpix-package ez3 -# application/vnd.f-secure.mobile -application/vnd.fdf fdf -application/vnd.fdsn.mseed mseed -application/vnd.fdsn.seed seed dataless -# application/vnd.ffsns -# application/vnd.fints -application/vnd.flographit gph -application/vnd.fluxtime.clip ftc -# application/vnd.font-fontforge-sfd -application/vnd.framemaker fm frame maker book -application/vnd.frogans.fnc fnc -application/vnd.frogans.ltf ltf -application/vnd.fsc.weblaunch fsc -application/vnd.fujitsu.oasys oas -application/vnd.fujitsu.oasys2 oa2 -application/vnd.fujitsu.oasys3 oa3 -application/vnd.fujitsu.oasysgp fg5 -application/vnd.fujitsu.oasysprs bh2 -# application/vnd.fujixerox.art-ex -# application/vnd.fujixerox.art4 -# application/vnd.fujixerox.hbpl -application/vnd.fujixerox.ddd ddd -application/vnd.fujixerox.docuworks xdw -application/vnd.fujixerox.docuworks.binder xbd -# application/vnd.fut-misnet -application/vnd.fuzzysheet fzs -application/vnd.genomatix.tuxedo txd -# application/vnd.geocube+xml -application/vnd.geogebra.file ggb -application/vnd.geogebra.tool ggt -application/vnd.geometry-explorer gex gre -application/vnd.geonext gxt -application/vnd.geoplan g2w -application/vnd.geospace g3w -# application/vnd.globalplatform.card-content-mgt -# application/vnd.globalplatform.card-content-mgt-response -application/vnd.gmx gmx -application/vnd.google-earth.kml+xml kml -application/vnd.google-earth.kmz kmz -application/vnd.grafeq gqf gqs -# application/vnd.gridmp -application/vnd.groove-account gac -application/vnd.groove-help ghf -application/vnd.groove-identity-message gim -application/vnd.groove-injector grv -application/vnd.groove-tool-message gtm -application/vnd.groove-tool-template tpl -application/vnd.groove-vcard vcg -# application/vnd.hal+json -application/vnd.hal+xml hal -application/vnd.handheld-entertainment+xml zmm -application/vnd.hbci hbci -# application/vnd.hcl-bireports -application/vnd.hhe.lesson-player les -application/vnd.hp-hpgl hpgl -application/vnd.hp-hpid hpid -application/vnd.hp-hps hps -application/vnd.hp-jlyt jlt -application/vnd.hp-pcl pcl -application/vnd.hp-pclxl pclxl -# application/vnd.httphone -application/vnd.hydrostatix.sof-data sfd-hdstx -# application/vnd.hzn-3d-crossword -# application/vnd.ibm.afplinedata -# application/vnd.ibm.electronic-media -application/vnd.ibm.minipay mpy -application/vnd.ibm.modcap afp listafp list3820 -application/vnd.ibm.rights-management irm -application/vnd.ibm.secure-container sc -application/vnd.iccprofile icc icm -application/vnd.igloader igl -application/vnd.immervision-ivp ivp -application/vnd.immervision-ivu ivu -# application/vnd.informedcontrol.rms+xml -# application/vnd.informix-visionary -# application/vnd.infotech.project -# application/vnd.infotech.project+xml -# application/vnd.innopath.wamp.notification -application/vnd.insors.igm igm -application/vnd.intercon.formnet xpw xpx -application/vnd.intergeo i2g -# application/vnd.intertrust.digibox -# application/vnd.intertrust.nncp -application/vnd.intu.qbo qbo -application/vnd.intu.qfx qfx -# application/vnd.iptc.g2.conceptitem+xml -# application/vnd.iptc.g2.knowledgeitem+xml -# application/vnd.iptc.g2.newsitem+xml -# application/vnd.iptc.g2.newsmessage+xml -# application/vnd.iptc.g2.packageitem+xml -# application/vnd.iptc.g2.planningitem+xml -application/vnd.ipunplugged.rcprofile rcprofile -application/vnd.irepository.package+xml irp -application/vnd.is-xpr xpr -application/vnd.isac.fcs fcs -application/vnd.jam jam -# application/vnd.japannet-directory-service -# application/vnd.japannet-jpnstore-wakeup -# application/vnd.japannet-payment-wakeup -# application/vnd.japannet-registration -# application/vnd.japannet-registration-wakeup -# application/vnd.japannet-setstore-wakeup -# application/vnd.japannet-verification -# application/vnd.japannet-verification-wakeup -application/vnd.jcp.javame.midlet-rms rms -application/vnd.jisp jisp -application/vnd.joost.joda-archive joda -application/vnd.kahootz ktz ktr -application/vnd.kde.karbon karbon -application/vnd.kde.kchart chrt -application/vnd.kde.kformula kfo -application/vnd.kde.kivio flw -application/vnd.kde.kontour kon -application/vnd.kde.kpresenter kpr kpt -application/vnd.kde.kspread ksp -application/vnd.kde.kword kwd kwt -application/vnd.kenameaapp htke -application/vnd.kidspiration kia -application/vnd.kinar kne knp -application/vnd.koan skp skd skt skm -application/vnd.kodak-descriptor sse -application/vnd.las.las+xml lasxml -# application/vnd.liberty-request+xml -application/vnd.llamagraphics.life-balance.desktop lbd -application/vnd.llamagraphics.life-balance.exchange+xml lbe -application/vnd.lotus-1-2-3 123 -application/vnd.lotus-approach apr -application/vnd.lotus-freelance pre -application/vnd.lotus-notes nsf -application/vnd.lotus-organizer org -application/vnd.lotus-screencam scm -application/vnd.lotus-wordpro lwp -application/vnd.macports.portpkg portpkg -# application/vnd.marlin.drm.actiontoken+xml -# application/vnd.marlin.drm.conftoken+xml -# application/vnd.marlin.drm.license+xml -# application/vnd.marlin.drm.mdcf -application/vnd.mcd mcd -application/vnd.medcalcdata mc1 -application/vnd.mediastation.cdkey cdkey -# application/vnd.meridian-slingshot -application/vnd.mfer mwf -application/vnd.mfmp mfm -application/vnd.micrografx.flo flo -application/vnd.micrografx.igx igx -application/vnd.mif mif -# application/vnd.minisoft-hp3000-save -# application/vnd.mitsubishi.misty-guard.trustweb -application/vnd.mobius.daf daf -application/vnd.mobius.dis dis -application/vnd.mobius.mbk mbk -application/vnd.mobius.mqy mqy -application/vnd.mobius.msl msl -application/vnd.mobius.plc plc -application/vnd.mobius.txf txf -application/vnd.mophun.application mpn -application/vnd.mophun.certificate mpc -# application/vnd.motorola.flexsuite -# application/vnd.motorola.flexsuite.adsi -# application/vnd.motorola.flexsuite.fis -# application/vnd.motorola.flexsuite.gotap -# application/vnd.motorola.flexsuite.kmr -# application/vnd.motorola.flexsuite.ttc -# application/vnd.motorola.flexsuite.wem -# application/vnd.motorola.iprm -application/vnd.mozilla.xul+xml xul -application/vnd.ms-artgalry cil -# application/vnd.ms-asf -application/vnd.ms-cab-compressed cab -# application/vnd.ms-color.iccprofile -application/vnd.ms-excel xls xlm xla xlc xlt xlw -application/vnd.ms-excel.addin.macroenabled.12 xlam -application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb -application/vnd.ms-excel.sheet.macroenabled.12 xlsm -application/vnd.ms-excel.template.macroenabled.12 xltm -application/vnd.ms-fontobject eot -application/vnd.ms-htmlhelp chm -application/vnd.ms-ims ims -application/vnd.ms-lrm lrm -# application/vnd.ms-office.activex+xml -application/vnd.ms-officetheme thmx -# application/vnd.ms-opentype -# application/vnd.ms-package.obfuscated-opentype -application/vnd.ms-pki.seccat cat -application/vnd.ms-pki.stl stl -# application/vnd.ms-playready.initiator+xml -application/vnd.ms-powerpoint ppt pps pot -application/vnd.ms-powerpoint.addin.macroenabled.12 ppam -application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm -application/vnd.ms-powerpoint.slide.macroenabled.12 sldm -application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm -application/vnd.ms-powerpoint.template.macroenabled.12 potm -# application/vnd.ms-printing.printticket+xml -application/vnd.ms-project mpp mpt -# application/vnd.ms-tnef -# application/vnd.ms-wmdrm.lic-chlg-req -# application/vnd.ms-wmdrm.lic-resp -# application/vnd.ms-wmdrm.meter-chlg-req -# application/vnd.ms-wmdrm.meter-resp -application/vnd.ms-word.document.macroenabled.12 docm -application/vnd.ms-word.template.macroenabled.12 dotm -application/vnd.ms-works wps wks wcm wdb -application/vnd.ms-wpl wpl -application/vnd.ms-xpsdocument xps -application/vnd.mseq mseq -# application/vnd.msign -# application/vnd.multiad.creator -# application/vnd.multiad.creator.cif -# application/vnd.music-niff -application/vnd.musician mus -application/vnd.muvee.style msty -application/vnd.mynfc taglet -# application/vnd.ncd.control -# application/vnd.ncd.reference -# application/vnd.nervana -# application/vnd.netfpx -application/vnd.neurolanguage.nlu nlu -application/vnd.nitf ntf nitf -application/vnd.noblenet-directory nnd -application/vnd.noblenet-sealer nns -application/vnd.noblenet-web nnw -# application/vnd.nokia.catalogs -# application/vnd.nokia.conml+wbxml -# application/vnd.nokia.conml+xml -# application/vnd.nokia.isds-radio-presets -# application/vnd.nokia.iptv.config+xml -# application/vnd.nokia.landmark+wbxml -# application/vnd.nokia.landmark+xml -# application/vnd.nokia.landmarkcollection+xml -# application/vnd.nokia.n-gage.ac+xml -application/vnd.nokia.n-gage.data ngdat -application/vnd.nokia.n-gage.symbian.install n-gage -# application/vnd.nokia.ncd -# application/vnd.nokia.pcd+wbxml -# application/vnd.nokia.pcd+xml -application/vnd.nokia.radio-preset rpst -application/vnd.nokia.radio-presets rpss -application/vnd.novadigm.edm edm -application/vnd.novadigm.edx edx -application/vnd.novadigm.ext ext -# application/vnd.ntt-local.file-transfer -# application/vnd.ntt-local.sip-ta_remote -# application/vnd.ntt-local.sip-ta_tcp_stream -application/vnd.oasis.opendocument.chart odc -application/vnd.oasis.opendocument.chart-template otc -application/vnd.oasis.opendocument.database odb -application/vnd.oasis.opendocument.formula odf -application/vnd.oasis.opendocument.formula-template odft -application/vnd.oasis.opendocument.graphics odg -application/vnd.oasis.opendocument.graphics-template otg -application/vnd.oasis.opendocument.image odi -application/vnd.oasis.opendocument.image-template oti -application/vnd.oasis.opendocument.presentation odp -application/vnd.oasis.opendocument.presentation-template otp -application/vnd.oasis.opendocument.spreadsheet ods -application/vnd.oasis.opendocument.spreadsheet-template ots -application/vnd.oasis.opendocument.text odt -application/vnd.oasis.opendocument.text-master odm -application/vnd.oasis.opendocument.text-template ott -application/vnd.oasis.opendocument.text-web oth -# application/vnd.obn -# application/vnd.oftn.l10n+json -# application/vnd.oipf.contentaccessdownload+xml -# application/vnd.oipf.contentaccessstreaming+xml -# application/vnd.oipf.cspg-hexbinary -# application/vnd.oipf.dae.svg+xml -# application/vnd.oipf.dae.xhtml+xml -# application/vnd.oipf.mippvcontrolmessage+xml -# application/vnd.oipf.pae.gem -# application/vnd.oipf.spdiscovery+xml -# application/vnd.oipf.spdlist+xml -# application/vnd.oipf.ueprofile+xml -# application/vnd.oipf.userprofile+xml -application/vnd.olpc-sugar xo -# application/vnd.oma-scws-config -# application/vnd.oma-scws-http-request -# application/vnd.oma-scws-http-response -# application/vnd.oma.bcast.associated-procedure-parameter+xml -# application/vnd.oma.bcast.drm-trigger+xml -# application/vnd.oma.bcast.imd+xml -# application/vnd.oma.bcast.ltkm -# application/vnd.oma.bcast.notification+xml -# application/vnd.oma.bcast.provisioningtrigger -# application/vnd.oma.bcast.sgboot -# application/vnd.oma.bcast.sgdd+xml -# application/vnd.oma.bcast.sgdu -# application/vnd.oma.bcast.simple-symbol-container -# application/vnd.oma.bcast.smartcard-trigger+xml -# application/vnd.oma.bcast.sprov+xml -# application/vnd.oma.bcast.stkm -# application/vnd.oma.cab-address-book+xml -# application/vnd.oma.cab-feature-handler+xml -# application/vnd.oma.cab-pcc+xml -# application/vnd.oma.cab-user-prefs+xml -# application/vnd.oma.dcd -# application/vnd.oma.dcdc -application/vnd.oma.dd2+xml dd2 -# application/vnd.oma.drm.risd+xml -# application/vnd.oma.group-usage-list+xml -# application/vnd.oma.pal+xml -# application/vnd.oma.poc.detailed-progress-report+xml -# application/vnd.oma.poc.final-report+xml -# application/vnd.oma.poc.groups+xml -# application/vnd.oma.poc.invocation-descriptor+xml -# application/vnd.oma.poc.optimized-progress-report+xml -# application/vnd.oma.push -# application/vnd.oma.scidm.messages+xml -# application/vnd.oma.xcap-directory+xml -# application/vnd.omads-email+xml -# application/vnd.omads-file+xml -# application/vnd.omads-folder+xml -# application/vnd.omaloc-supl-init -application/vnd.openofficeorg.extension oxt -# application/vnd.openxmlformats-officedocument.custom-properties+xml -# application/vnd.openxmlformats-officedocument.customxmlproperties+xml -# application/vnd.openxmlformats-officedocument.drawing+xml -# application/vnd.openxmlformats-officedocument.drawingml.chart+xml -# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml -# application/vnd.openxmlformats-officedocument.extended-properties+xml -# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml -# application/vnd.openxmlformats-officedocument.presentationml.comments+xml -# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml -# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml -# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml -application/vnd.openxmlformats-officedocument.presentationml.presentation pptx -# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml -application/vnd.openxmlformats-officedocument.presentationml.slide sldx -# application/vnd.openxmlformats-officedocument.presentationml.slide+xml -# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml -# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml -application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx -# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml -# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml -# application/vnd.openxmlformats-officedocument.presentationml.tags+xml -application/vnd.openxmlformats-officedocument.presentationml.template potx -# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx -# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx -# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml -# application/vnd.openxmlformats-officedocument.theme+xml -# application/vnd.openxmlformats-officedocument.themeoverride+xml -# application/vnd.openxmlformats-officedocument.vmldrawing -# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.document docx -# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx -# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml -# application/vnd.openxmlformats-package.core-properties+xml -# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml -# application/vnd.openxmlformats-package.relationships+xml -# application/vnd.quobject-quoxdocument -# application/vnd.osa.netdeploy -application/vnd.osgeo.mapguide.package mgp -# application/vnd.osgi.bundle -application/vnd.osgi.dp dp -application/vnd.osgi.subsystem esa -# application/vnd.otps.ct-kip+xml -application/vnd.palm pdb pqa oprc -# application/vnd.paos.xml -application/vnd.pawaafile paw -application/vnd.pg.format str -application/vnd.pg.osasli ei6 -# application/vnd.piaccess.application-licence -application/vnd.picsel efif -application/vnd.pmi.widget wg -# application/vnd.poc.group-advertisement+xml -application/vnd.pocketlearn plf -application/vnd.powerbuilder6 pbd -# application/vnd.powerbuilder6-s -# application/vnd.powerbuilder7 -# application/vnd.powerbuilder7-s -# application/vnd.powerbuilder75 -# application/vnd.powerbuilder75-s -# application/vnd.preminet -application/vnd.previewsystems.box box -application/vnd.proteus.magazine mgz -application/vnd.publishare-delta-tree qps -application/vnd.pvi.ptid1 ptid -# application/vnd.pwg-multiplexed -# application/vnd.pwg-xhtml-print+xml -# application/vnd.qualcomm.brew-app-res -application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb -# application/vnd.radisys.moml+xml -# application/vnd.radisys.msml+xml -# application/vnd.radisys.msml-audit+xml -# application/vnd.radisys.msml-audit-conf+xml -# application/vnd.radisys.msml-audit-conn+xml -# application/vnd.radisys.msml-audit-dialog+xml -# application/vnd.radisys.msml-audit-stream+xml -# application/vnd.radisys.msml-conf+xml -# application/vnd.radisys.msml-dialog+xml -# application/vnd.radisys.msml-dialog-base+xml -# application/vnd.radisys.msml-dialog-fax-detect+xml -# application/vnd.radisys.msml-dialog-fax-sendrecv+xml -# application/vnd.radisys.msml-dialog-group+xml -# application/vnd.radisys.msml-dialog-speech+xml -# application/vnd.radisys.msml-dialog-transform+xml -# application/vnd.rainstor.data -# application/vnd.rapid -application/vnd.realvnc.bed bed -application/vnd.recordare.musicxml mxl -application/vnd.recordare.musicxml+xml musicxml -# application/vnd.renlearn.rlprint -application/vnd.rig.cryptonote cryptonote -application/vnd.rim.cod cod -application/vnd.rn-realmedia rm -application/vnd.rn-realmedia-vbr rmvb -application/vnd.route66.link66+xml link66 -# application/vnd.rs-274x -# application/vnd.ruckus.download -# application/vnd.s3sms -application/vnd.sailingtracker.track st -# application/vnd.sbm.cid -# application/vnd.sbm.mid2 -# application/vnd.scribus -# application/vnd.sealed.3df -# application/vnd.sealed.csf -# application/vnd.sealed.doc -# application/vnd.sealed.eml -# application/vnd.sealed.mht -# application/vnd.sealed.net -# application/vnd.sealed.ppt -# application/vnd.sealed.tiff -# application/vnd.sealed.xls -# application/vnd.sealedmedia.softseal.html -# application/vnd.sealedmedia.softseal.pdf -application/vnd.seemail see -application/vnd.sema sema -application/vnd.semd semd -application/vnd.semf semf -application/vnd.shana.informed.formdata ifm -application/vnd.shana.informed.formtemplate itp -application/vnd.shana.informed.interchange iif -application/vnd.shana.informed.package ipk -application/vnd.simtech-mindmapper twd twds -application/vnd.smaf mmf -# application/vnd.smart.notebook -application/vnd.smart.teacher teacher -# application/vnd.software602.filler.form+xml -# application/vnd.software602.filler.form-xml-zip -application/vnd.solent.sdkm+xml sdkm sdkd -application/vnd.spotfire.dxp dxp -application/vnd.spotfire.sfs sfs -# application/vnd.sss-cod -# application/vnd.sss-dtf -# application/vnd.sss-ntf -application/vnd.stardivision.calc sdc -application/vnd.stardivision.draw sda -application/vnd.stardivision.impress sdd -application/vnd.stardivision.math smf -application/vnd.stardivision.writer sdw vor -application/vnd.stardivision.writer-global sgl -application/vnd.stepmania.package smzip -application/vnd.stepmania.stepchart sm -# application/vnd.street-stream -application/vnd.sun.xml.calc sxc -application/vnd.sun.xml.calc.template stc -application/vnd.sun.xml.draw sxd -application/vnd.sun.xml.draw.template std -application/vnd.sun.xml.impress sxi -application/vnd.sun.xml.impress.template sti -application/vnd.sun.xml.math sxm -application/vnd.sun.xml.writer sxw -application/vnd.sun.xml.writer.global sxg -application/vnd.sun.xml.writer.template stw -# application/vnd.sun.wadl+xml -application/vnd.sus-calendar sus susp -application/vnd.svd svd -# application/vnd.swiftview-ics -application/vnd.symbian.install sis sisx -application/vnd.syncml+xml xsm -application/vnd.syncml.dm+wbxml bdm -application/vnd.syncml.dm+xml xdm -# application/vnd.syncml.dm.notification -# application/vnd.syncml.ds.notification -application/vnd.tao.intent-module-archive tao -application/vnd.tcpdump.pcap pcap cap dmp -application/vnd.tmobile-livetv tmo -application/vnd.trid.tpt tpt -application/vnd.triscape.mxs mxs -application/vnd.trueapp tra -# application/vnd.truedoc -# application/vnd.ubisoft.webplayer -application/vnd.ufdl ufd ufdl -application/vnd.uiq.theme utz -application/vnd.umajin umj -application/vnd.unity unityweb -application/vnd.uoml+xml uoml -# application/vnd.uplanet.alert -# application/vnd.uplanet.alert-wbxml -# application/vnd.uplanet.bearer-choice -# application/vnd.uplanet.bearer-choice-wbxml -# application/vnd.uplanet.cacheop -# application/vnd.uplanet.cacheop-wbxml -# application/vnd.uplanet.channel -# application/vnd.uplanet.channel-wbxml -# application/vnd.uplanet.list -# application/vnd.uplanet.list-wbxml -# application/vnd.uplanet.listcmd -# application/vnd.uplanet.listcmd-wbxml -# application/vnd.uplanet.signal -application/vnd.vcx vcx -# application/vnd.vd-study -# application/vnd.vectorworks -# application/vnd.verimatrix.vcas -# application/vnd.vidsoft.vidconference -application/vnd.visio vsd vst vss vsw -application/vnd.visionary vis -# application/vnd.vividence.scriptfile -application/vnd.vsf vsf -# application/vnd.wap.sic -# application/vnd.wap.slc -application/vnd.wap.wbxml wbxml -application/vnd.wap.wmlc wmlc -application/vnd.wap.wmlscriptc wmlsc -application/vnd.webturbo wtb -# application/vnd.wfa.wsc -# application/vnd.wmc -# application/vnd.wmf.bootstrap -# application/vnd.wolfram.mathematica -# application/vnd.wolfram.mathematica.package -application/vnd.wolfram.player nbp -application/vnd.wordperfect wpd -application/vnd.wqd wqd -# application/vnd.wrq-hp3000-labelled -application/vnd.wt.stf stf -# application/vnd.wv.csp+wbxml -# application/vnd.wv.csp+xml -# application/vnd.wv.ssp+xml -application/vnd.xara xar -application/vnd.xfdl xfdl -# application/vnd.xfdl.webform -# application/vnd.xmi+xml -# application/vnd.xmpie.cpkg -# application/vnd.xmpie.dpkg -# application/vnd.xmpie.plan -# application/vnd.xmpie.ppkg -# application/vnd.xmpie.xlim -application/vnd.yamaha.hv-dic hvd -application/vnd.yamaha.hv-script hvs -application/vnd.yamaha.hv-voice hvp -application/vnd.yamaha.openscoreformat osf -application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg -# application/vnd.yamaha.remote-setup -application/vnd.yamaha.smaf-audio saf -application/vnd.yamaha.smaf-phrase spf -# application/vnd.yamaha.through-ngn -# application/vnd.yamaha.tunnel-udpencap -application/vnd.yellowriver-custom-menu cmp -application/vnd.zul zir zirz -application/vnd.zzazz.deck+xml zaz -application/voicexml+xml vxml -# application/vq-rtcpxr -# application/watcherinfo+xml -# application/whoispp-query -# application/whoispp-response -application/widget wgt -application/winhlp hlp -# application/wita -# application/wordperfect5.1 -application/wsdl+xml wsdl -application/wspolicy+xml wspolicy -application/x-7z-compressed 7z -application/x-abiword abw -application/x-ace-compressed ace -# application/x-amf -application/x-apple-diskimage dmg -application/x-authorware-bin aab x32 u32 vox -application/x-authorware-map aam -application/x-authorware-seg aas -application/x-bcpio bcpio -application/x-bittorrent torrent -application/x-blorb blb blorb -application/x-bzip bz -application/x-bzip2 bz2 boz -application/x-cbr cbr cba cbt cbz cb7 -application/x-cdlink vcd -application/x-cfs-compressed cfs -application/x-chat chat -application/x-chess-pgn pgn -application/x-conference nsc -# application/x-compress -application/x-cpio cpio -application/x-csh csh -application/x-debian-package deb udeb -application/x-dgc-compressed dgc -application/x-director dir dcr dxr cst cct cxt w3d fgd swa -application/x-doom wad -application/x-dtbncx+xml ncx -application/x-dtbook+xml dtb -application/x-dtbresource+xml res -application/x-dvi dvi -application/x-envoy evy -application/x-eva eva -application/x-font-bdf bdf -# application/x-font-dos -# application/x-font-framemaker -application/x-font-ghostscript gsf -# application/x-font-libgrx -application/x-font-linux-psf psf -application/x-font-otf otf -application/x-font-pcf pcf -application/x-font-snf snf -# application/x-font-speedo -# application/x-font-sunos-news -application/x-font-ttf ttf ttc -application/x-font-type1 pfa pfb pfm afm -application/font-woff woff -# application/x-font-vfont -application/x-freearc arc -application/x-futuresplash spl -application/x-gca-compressed gca -application/x-glulx ulx -application/x-gnumeric gnumeric -application/x-gramps-xml gramps -application/x-gtar gtar -# application/x-gzip -application/x-hdf hdf -application/x-install-instructions install -application/x-iso9660-image iso -application/x-java-jnlp-file jnlp -application/x-latex latex -application/x-lzh-compressed lzh lha -application/x-mie mie -application/x-mobipocket-ebook prc mobi -application/x-ms-application application -application/x-ms-shortcut lnk -application/x-ms-wmd wmd -application/x-ms-wmz wmz -application/x-ms-xbap xbap -application/x-msaccess mdb -application/x-msbinder obd -application/x-mscardfile crd -application/x-msclip clp -application/x-msdownload exe dll com bat msi -application/x-msmediaview mvb m13 m14 -application/x-msmetafile wmf wmz emf emz -application/x-msmoney mny -application/x-mspublisher pub -application/x-msschedule scd -application/x-msterminal trm -application/x-mswrite wri -application/x-netcdf nc cdf -application/x-nzb nzb -application/x-pkcs12 p12 pfx -application/x-pkcs7-certificates p7b spc -application/x-pkcs7-certreqresp p7r -application/x-rar-compressed rar -application/x-research-info-systems ris -application/x-sh sh -application/x-shar shar -application/x-shockwave-flash swf -application/x-silverlight-app xap -application/x-sql sql -application/x-stuffit sit -application/x-stuffitx sitx -application/x-subrip srt -application/x-sv4cpio sv4cpio -application/x-sv4crc sv4crc -application/x-t3vm-image t3 -application/x-tads gam -application/x-tar tar -application/x-tcl tcl -application/x-tex tex -application/x-tex-tfm tfm -application/x-texinfo texinfo texi -application/x-tgif obj -application/x-ustar ustar -application/x-wais-source src -application/x-x509-ca-cert der crt -application/x-xfig fig -application/x-xliff+xml xlf -application/x-xpinstall xpi -application/x-xz xz -application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8 -# application/x400-bp -application/xaml+xml xaml -# application/xcap-att+xml -# application/xcap-caps+xml -application/xcap-diff+xml xdf -# application/xcap-el+xml -# application/xcap-error+xml -# application/xcap-ns+xml -# application/xcon-conference-info-diff+xml -# application/xcon-conference-info+xml -application/xenc+xml xenc -application/xhtml+xml xhtml xht -# application/xhtml-voice+xml -application/xml xml xsl -application/xml-dtd dtd -# application/xml-external-parsed-entity -# application/xmpp+xml -application/xop+xml xop -application/xproc+xml xpl -application/xslt+xml xslt -application/xspf+xml xspf -application/xv+xml mxml xhvml xvml xvm -application/yang yang -application/yin+xml yin -application/zip zip -# audio/1d-interleaved-parityfec -# audio/32kadpcm -# audio/3gpp -# audio/3gpp2 -# audio/ac3 -audio/adpcm adp -# audio/amr -# audio/amr-wb -# audio/amr-wb+ -# audio/asc -# audio/atrac-advanced-lossless -# audio/atrac-x -# audio/atrac3 -audio/basic au snd -# audio/bv16 -# audio/bv32 -# audio/clearmode -# audio/cn -# audio/dat12 -# audio/dls -# audio/dsr-es201108 -# audio/dsr-es202050 -# audio/dsr-es202211 -# audio/dsr-es202212 -# audio/dv -# audio/dvi4 -# audio/eac3 -# audio/evrc -# audio/evrc-qcp -# audio/evrc0 -# audio/evrc1 -# audio/evrcb -# audio/evrcb0 -# audio/evrcb1 -# audio/evrcwb -# audio/evrcwb0 -# audio/evrcwb1 -# audio/example -# audio/fwdred -# audio/g719 -# audio/g722 -# audio/g7221 -# audio/g723 -# audio/g726-16 -# audio/g726-24 -# audio/g726-32 -# audio/g726-40 -# audio/g728 -# audio/g729 -# audio/g7291 -# audio/g729d -# audio/g729e -# audio/gsm -# audio/gsm-efr -# audio/gsm-hr-08 -# audio/ilbc -# audio/ip-mr_v2.5 -# audio/isac -# audio/l16 -# audio/l20 -# audio/l24 -# audio/l8 -# audio/lpc -audio/midi mid midi kar rmi -# audio/mobile-xmf -audio/mp4 mp4a -# audio/mp4a-latm -# audio/mpa -# audio/mpa-robust -audio/mpeg mpga mp2 mp2a mp3 m2a m3a -# audio/mpeg4-generic -# audio/musepack -audio/ogg oga ogg spx -# audio/opus -# audio/parityfec -# audio/pcma -# audio/pcma-wb -# audio/pcmu-wb -# audio/pcmu -# audio/prs.sid -# audio/qcelp -# audio/red -# audio/rtp-enc-aescm128 -# audio/rtp-midi -# audio/rtx -audio/s3m s3m -audio/silk sil -# audio/smv -# audio/smv0 -# audio/smv-qcp -# audio/sp-midi -# audio/speex -# audio/t140c -# audio/t38 -# audio/telephone-event -# audio/tone -# audio/uemclip -# audio/ulpfec -# audio/vdvi -# audio/vmr-wb -# audio/vnd.3gpp.iufp -# audio/vnd.4sb -# audio/vnd.audiokoz -# audio/vnd.celp -# audio/vnd.cisco.nse -# audio/vnd.cmles.radio-events -# audio/vnd.cns.anp1 -# audio/vnd.cns.inf1 -audio/vnd.dece.audio uva uvva -audio/vnd.digital-winds eol -# audio/vnd.dlna.adts -# audio/vnd.dolby.heaac.1 -# audio/vnd.dolby.heaac.2 -# audio/vnd.dolby.mlp -# audio/vnd.dolby.mps -# audio/vnd.dolby.pl2 -# audio/vnd.dolby.pl2x -# audio/vnd.dolby.pl2z -# audio/vnd.dolby.pulse.1 -audio/vnd.dra dra -audio/vnd.dts dts -audio/vnd.dts.hd dtshd -# audio/vnd.dvb.file -# audio/vnd.everad.plj -# audio/vnd.hns.audio -audio/vnd.lucent.voice lvp -audio/vnd.ms-playready.media.pya pya -# audio/vnd.nokia.mobile-xmf -# audio/vnd.nortel.vbk -audio/vnd.nuera.ecelp4800 ecelp4800 -audio/vnd.nuera.ecelp7470 ecelp7470 -audio/vnd.nuera.ecelp9600 ecelp9600 -# audio/vnd.octel.sbc -# audio/vnd.qcelp -# audio/vnd.rhetorex.32kadpcm -audio/vnd.rip rip -# audio/vnd.sealedmedia.softseal.mpeg -# audio/vnd.vmx.cvsd -# audio/vorbis -# audio/vorbis-config -audio/webm weba -audio/x-aac aac -audio/x-aiff aif aiff aifc -audio/x-caf caf -audio/x-flac flac -audio/x-matroska mka -audio/x-mpegurl m3u -audio/x-ms-wax wax -audio/x-ms-wma wma -audio/x-pn-realaudio ram ra -audio/x-pn-realaudio-plugin rmp -# audio/x-tta -audio/x-wav wav -audio/xm xm -chemical/x-cdx cdx -chemical/x-cif cif -chemical/x-cmdf cmdf -chemical/x-cml cml -chemical/x-csml csml -# chemical/x-pdb -chemical/x-xyz xyz -image/bmp bmp -image/cgm cgm -# image/example -# image/fits -image/g3fax g3 -image/gif gif -image/ief ief -# image/jp2 -image/jpeg jpeg jpg jpe -# image/jpm -# image/jpx -image/ktx ktx -# image/naplps -image/png png -image/prs.btif btif -# image/prs.pti -image/sgi sgi -image/svg+xml svg svgz -# image/t38 -image/tiff tiff tif -# image/tiff-fx -image/vnd.adobe.photoshop psd -# image/vnd.cns.inf2 -image/vnd.dece.graphic uvi uvvi uvg uvvg -image/vnd.dvb.subtitle sub -image/vnd.djvu djvu djv -image/vnd.dwg dwg -image/vnd.dxf dxf -image/vnd.fastbidsheet fbs -image/vnd.fpx fpx -image/vnd.fst fst -image/vnd.fujixerox.edmics-mmr mmr -image/vnd.fujixerox.edmics-rlc rlc -# image/vnd.globalgraphics.pgb -# image/vnd.microsoft.icon -# image/vnd.mix -image/vnd.ms-modi mdi -image/vnd.ms-photo wdp -image/vnd.net-fpx npx -# image/vnd.radiance -# image/vnd.sealed.png -# image/vnd.sealedmedia.softseal.gif -# image/vnd.sealedmedia.softseal.jpg -# image/vnd.svf -image/vnd.wap.wbmp wbmp -image/vnd.xiff xif -image/webp webp -image/x-3ds 3ds -image/x-cmu-raster ras -image/x-cmx cmx -image/x-freehand fh fhc fh4 fh5 fh7 -image/x-icon ico -image/x-mrsid-image sid -image/x-pcx pcx -image/x-pict pic pct -image/x-portable-anymap pnm -image/x-portable-bitmap pbm -image/x-portable-graymap pgm -image/x-portable-pixmap ppm -image/x-rgb rgb -image/x-tga tga -image/x-xbitmap xbm -image/x-xpixmap xpm -image/x-xwindowdump xwd -# message/cpim -# message/delivery-status -# message/disposition-notification -# message/example -# message/external-body -# message/feedback-report -# message/global -# message/global-delivery-status -# message/global-disposition-notification -# message/global-headers -# message/http -# message/imdn+xml -# message/news -# message/partial -message/rfc822 eml mime -# message/s-http -# message/sip -# message/sipfrag -# message/tracking-status -# message/vnd.si.simp -# model/example -model/iges igs iges -model/mesh msh mesh silo -model/vnd.collada+xml dae -model/vnd.dwf dwf -# model/vnd.flatland.3dml -model/vnd.gdl gdl -# model/vnd.gs-gdl -# model/vnd.gs.gdl -model/vnd.gtw gtw -# model/vnd.moml+xml -model/vnd.mts mts -# model/vnd.parasolid.transmit.binary -# model/vnd.parasolid.transmit.text -model/vnd.vtu vtu -model/vrml wrl vrml -model/x3d+binary x3db x3dbz -model/x3d+vrml x3dv x3dvz -model/x3d+xml x3d x3dz -# multipart/alternative -# multipart/appledouble -# multipart/byteranges -# multipart/digest -# multipart/encrypted -# multipart/example -# multipart/form-data -# multipart/header-set -# multipart/mixed -# multipart/parallel -# multipart/related -# multipart/report -# multipart/signed -# multipart/voice-message -# text/1d-interleaved-parityfec -text/cache-manifest appcache -text/calendar ics ifb -text/css css -text/csv csv -# text/directory -# text/dns -# text/ecmascript -# text/enriched -# text/example -# text/fwdred -text/html html htm -# text/javascript -text/n3 n3 -# text/parityfec -text/plain txt text conf def list log in -# text/prs.fallenstein.rst -text/prs.lines.tag dsc -# text/vnd.radisys.msml-basic-layout -# text/red -# text/rfc822-headers -text/richtext rtx -# text/rtf -# text/rtp-enc-aescm128 -# text/rtx -text/sgml sgml sgm -# text/t140 -text/tab-separated-values tsv -text/troff t tr roff man me ms -text/turtle ttl -# text/ulpfec -text/uri-list uri uris urls -text/vcard vcard -# text/vnd.abc -text/vnd.curl curl -text/vnd.curl.dcurl dcurl -text/vnd.curl.scurl scurl -text/vnd.curl.mcurl mcurl -# text/vnd.dmclientscript -text/vnd.dvb.subtitle sub -# text/vnd.esmertec.theme-descriptor -text/vnd.fly fly -text/vnd.fmi.flexstor flx -text/vnd.graphviz gv -text/vnd.in3d.3dml 3dml -text/vnd.in3d.spot spot -# text/vnd.iptc.newsml -# text/vnd.iptc.nitf -# text/vnd.latex-z -# text/vnd.motorola.reflex -# text/vnd.ms-mediapackage -# text/vnd.net2phone.commcenter.command -# text/vnd.si.uricatalogue -text/vnd.sun.j2me.app-descriptor jad -# text/vnd.trolltech.linguist -# text/vnd.wap.si -# text/vnd.wap.sl -text/vnd.wap.wml wml -text/vnd.wap.wmlscript wmls -text/x-asm s asm -text/x-c c cc cxx cpp h hh dic -text/x-fortran f for f77 f90 -text/x-java-source java -text/x-opml opml -text/x-pascal p pas -text/x-nfo nfo -text/x-setext etx -text/x-sfv sfv -text/x-uuencode uu -text/x-vcalendar vcs -text/x-vcard vcf -# text/xml -# text/xml-external-parsed-entity -# video/1d-interleaved-parityfec -video/3gpp 3gp -# video/3gpp-tt -video/3gpp2 3g2 -# video/bmpeg -# video/bt656 -# video/celb -# video/dv -# video/example -video/h261 h261 -video/h263 h263 -# video/h263-1998 -# video/h263-2000 -video/h264 h264 -# video/h264-rcdo -# video/h264-svc -video/jpeg jpgv -# video/jpeg2000 -video/jpm jpm jpgm -video/mj2 mj2 mjp2 -# video/mp1s -# video/mp2p -# video/mp2t -video/mp4 mp4 mp4v mpg4 -# video/mp4v-es -video/mpeg mpeg mpg mpe m1v m2v -# video/mpeg4-generic -# video/mpv -# video/nv -video/ogg ogv -# video/parityfec -# video/pointer -video/quicktime qt mov -# video/raw -# video/rtp-enc-aescm128 -# video/rtx -# video/smpte292m -# video/ulpfec -# video/vc1 -# video/vnd.cctv -video/vnd.dece.hd uvh uvvh -video/vnd.dece.mobile uvm uvvm -# video/vnd.dece.mp4 -video/vnd.dece.pd uvp uvvp -video/vnd.dece.sd uvs uvvs -video/vnd.dece.video uvv uvvv -# video/vnd.directv.mpeg -# video/vnd.directv.mpeg-tts -# video/vnd.dlna.mpeg-tts -video/vnd.dvb.file dvb -video/vnd.fvt fvt -# video/vnd.hns.video -# video/vnd.iptvforum.1dparityfec-1010 -# video/vnd.iptvforum.1dparityfec-2005 -# video/vnd.iptvforum.2dparityfec-1010 -# video/vnd.iptvforum.2dparityfec-2005 -# video/vnd.iptvforum.ttsavc -# video/vnd.iptvforum.ttsmpeg2 -# video/vnd.motorola.video -# video/vnd.motorola.videop -video/vnd.mpegurl mxu m4u -video/vnd.ms-playready.media.pyv pyv -# video/vnd.nokia.interleaved-multimedia -# video/vnd.nokia.videovoip -# video/vnd.objectvideo -# video/vnd.sealed.mpeg1 -# video/vnd.sealed.mpeg4 -# video/vnd.sealed.swf -# video/vnd.sealedmedia.softseal.mov -video/vnd.uvvu.mp4 uvu uvvu -video/vnd.vivo viv -video/webm webm -video/x-f4v f4v -video/x-fli fli -video/x-flv flv -video/x-m4v m4v -video/x-matroska mkv mk3d mks -video/x-mng mng -video/x-ms-asf asf asx -video/x-ms-vob vob -video/x-ms-wm wm -video/x-ms-wmv wmv -video/x-ms-wmx wmx -video/x-ms-wvx wvx -video/x-msvideo avi -video/x-sgi-movie movie -video/x-smv smv -x-conference/x-cooltalk ice diff --git a/node_modules/express/node_modules/send/node_modules/mime/types/node.types b/node_modules/express/node_modules/send/node_modules/mime/types/node.types deleted file mode 100644 index 55b2cf79..00000000 --- a/node_modules/express/node_modules/send/node_modules/mime/types/node.types +++ /dev/null @@ -1,77 +0,0 @@ -# What: WebVTT -# Why: To allow formats intended for marking up external text track resources. -# http://dev.w3.org/html5/webvtt/ -# Added by: niftylettuce -text/vtt vtt - -# What: Google Chrome Extension -# Why: To allow apps to (work) be served with the right content type header. -# http://codereview.chromium.org/2830017 -# Added by: niftylettuce -application/x-chrome-extension crx - -# What: HTC support -# Why: To properly render .htc files such as CSS3PIE -# Added by: niftylettuce -text/x-component htc - -# What: HTML5 application cache manifes ('.manifest' extension) -# Why: De-facto standard. Required by Mozilla browser when serving HTML5 apps -# per https://developer.mozilla.org/en/offline_resources_in_firefox -# Added by: louisremi -text/cache-manifest manifest - -# What: node binary buffer format -# Why: semi-standard extension w/in the node community -# Added by: tootallnate -application/octet-stream buffer - -# What: The "protected" MP-4 formats used by iTunes. -# Why: Required for streaming music to browsers (?) -# Added by: broofa -application/mp4 m4p -audio/mp4 m4a - -# What: Video format, Part of RFC1890 -# Why: See https://github.com/bentomas/node-mime/pull/6 -# Added by: mjrusso -video/MP2T ts - -# What: EventSource mime type -# Why: mime type of Server-Sent Events stream -# http://www.w3.org/TR/eventsource/#text-event-stream -# Added by: francois2metz -text/event-stream event-stream - -# What: Mozilla App manifest mime type -# Why: https://developer.mozilla.org/en/Apps/Manifest#Serving_manifests -# Added by: ednapiranha -application/x-web-app-manifest+json webapp - -# What: Lua file types -# Why: Googling around shows de-facto consensus on these -# Added by: creationix (Issue #45) -text/x-lua lua -application/x-lua-bytecode luac - -# What: Markdown files, as per http://daringfireball.net/projects/markdown/syntax -# Why: http://stackoverflow.com/questions/10701983/what-is-the-mime-type-for-markdown -# Added by: avoidwork -text/x-markdown markdown md mkd - -# What: ini files -# Why: because they're just text files -# Added by: Matthew Kastor -text/plain ini - -# What: DASH Adaptive Streaming manifest -# Why: https://developer.mozilla.org/en-US/docs/DASH_Adaptive_Streaming_for_HTML_5_Video -# Added by: eelcocramer -application/dash+xml mdp - -# What: OpenType font files - http://www.microsoft.com/typography/otspec/ -# Why: Browsers usually ignore the font MIME types and sniff the content, -# but Chrome, shows a warning if OpenType fonts aren't served with -# the `font/opentype` MIME type: http://i.imgur.com/8c5RN8M.png. -# Added by: alrra -font/opentype otf diff --git a/node_modules/express/node_modules/send/package.json b/node_modules/express/node_modules/send/package.json deleted file mode 100644 index 607f5806..00000000 --- a/node_modules/express/node_modules/send/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "send", - "version": "0.1.4", - "description": "Better streaming static file server with Range and conditional-GET support", - "keywords": [ - "static", - "file", - "server" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "dependencies": { - "debug": "*", - "mime": "~1.2.9", - "fresh": "0.2.0", - "range-parser": "0.0.4" - }, - "devDependencies": { - "mocha": "*", - "should": "*", - "supertest": "0.0.1", - "connect": "2.x" - }, - "scripts": { - "test": "make test" - }, - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/send.git" - }, - "main": "index", - "readme": "# send\n\n Send is Connect's `static()` extracted for generalized use, a streaming static file\n server supporting partial responses (Ranges), conditional-GET negotiation, high test coverage, and granular events which may be leveraged to take appropriate actions in your application or framework.\n\n## Installation\n\n $ npm install send\n\n## Examples\n\n Small:\n\n```js\nvar http = require('http');\nvar send = require('send');\n\nvar app = http.createServer(function(req, res){\n send(req, req.url).pipe(res);\n}).listen(3000);\n```\n\n Serving from a root directory with custom error-handling:\n\n```js\nvar http = require('http');\nvar send = require('send');\nvar url = require('url');\n\nvar app = http.createServer(function(req, res){\n // your custom error-handling logic:\n function error(err) {\n res.statusCode = err.status || 500;\n res.end(err.message);\n }\n\n // your custom directory handling logic:\n function redirect() {\n res.statusCode = 301;\n res.setHeader('Location', req.url + '/');\n res.end('Redirecting to ' + req.url + '/');\n }\n\n // transfer arbitrary files from within\n // /www/example.com/public/*\n send(req, url.parse(req.url).pathname)\n .root('/www/example.com/public')\n .on('error', error)\n .on('directory', redirect)\n .pipe(res);\n}).listen(3000);\n```\n\n## API\n\n### Events\n\n - `error` an error occurred `(err)`\n - `directory` a directory was requested\n - `file` a file was requested `(path, stat)`\n - `stream` file streaming has started `(stream)`\n - `end` streaming has completed\n\n### .root(dir)\n\n Serve files relative to `path`. Aliased as `.from(dir)`.\n\n### .index(path)\n\n By default send supports \"index.html\" files, to disable this\n invoke `.index(false)` or to supply a new index pass a string.\n\n### .maxage(ms)\n\n Provide a max-age in milliseconds for http caching, defaults to 0.\n\n### .hidden(bool)\n\n Enable or disable transfer of hidden files, defaults to false.\n\n## Error-handling\n\n By default when no `error` listeners are present an automatic response will be made, otherwise you have full control over the response, aka you may show a 5xx page etc.\n\n## Caching\n\n It does _not_ perform internal caching, you should use a reverse proxy cache such\n as Varnish for this, or those fancy things called CDNs. If your application is small enough that it would benefit from single-node memory caching, it's small enough that it does not need caching at all ;).\n\n## Debugging\n\n To enable `debug()` instrumentation output export __DEBUG__:\n\n```\n$ DEBUG=send node app\n```\n\n## Running tests\n\n```\n$ npm install\n$ make test\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/send/issues" - }, - "homepage": "https://github.com/visionmedia/send", - "_id": "send@0.1.4", - "dist": { - "shasum": "be70d8d1be01de61821af13780b50345a4f71abd" - }, - "_from": "send@0.1.4", - "_resolved": "https://registry.npmjs.org/send/-/send-0.1.4.tgz" -} diff --git a/node_modules/express/package.json b/node_modules/express/package.json deleted file mode 100644 index fc43276c..00000000 --- a/node_modules/express/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "express", - "description": "Sinatra inspired web development framework", - "version": "3.4.8", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "contributors": [ - { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - { - "name": "Aaron Heckmann", - "email": "aaron.heckmann+github@gmail.com" - }, - { - "name": "Ciaran Jessup", - "email": "ciaranj@gmail.com" - }, - { - "name": "Guillermo Rauch", - "email": "rauchg@gmail.com" - } - ], - "dependencies": { - "connect": "2.12.0", - "commander": "1.3.2", - "range-parser": "0.0.4", - "mkdirp": "0.3.5", - "cookie": "0.1.0", - "buffer-crc32": "0.2.1", - "fresh": "0.2.0", - "methods": "0.1.0", - "send": "0.1.4", - "cookie-signature": "1.0.1", - "merge-descriptors": "0.0.1", - "debug": ">= 0.7.3 < 1" - }, - "devDependencies": { - "ejs": "~0.8.4", - "mocha": "~1.15.1", - "jade": "~0.30.0", - "hjs": "~0.0.6", - "stylus": "~0.40.0", - "should": "~2.1.1", - "connect-redis": "~1.4.5", - "marked": "0.2.10", - "supertest": "~0.8.1" - }, - "keywords": [ - "express", - "framework", - "sinatra", - "web", - "rest", - "restful", - "router", - "app", - "api" - ], - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/express" - }, - "main": "index", - "bin": { - "express": "./bin/express" - }, - "scripts": { - "prepublish": "npm prune", - "test": "make test" - }, - "engines": { - "node": ">= 0.8.0" - }, - "license": "MIT", - "readme": "[![express logo](http://f.cl.ly/items/0V2S1n0K1i3y1c122g04/Screen%20Shot%202012-04-11%20at%209.59.42%20AM.png)](http://expressjs.com/)\n\n Fast, unopinionated, minimalist web framework for [node](http://nodejs.org).\n\n [![Build Status](https://secure.travis-ci.org/visionmedia/express.png)](http://travis-ci.org/visionmedia/express) [![Gittip](http://img.shields.io/gittip/visionmedia.png)](https://www.gittip.com/visionmedia/)\n\n```js\nvar express = require('express');\nvar app = express();\n\napp.get('/', function(req, res){\n res.send('Hello World');\n});\n\napp.listen(3000);\n```\n\n## Installation\n\n $ npm install -g express\n\n## Quick Start\n\n The quickest way to get started with express is to utilize the executable `express(1)` to generate an application as shown below:\n\n Create the app:\n\n $ npm install -g express\n $ express /tmp/foo && cd /tmp/foo\n\n Install dependencies:\n\n $ npm install\n\n Start the server:\n\n $ node app\n\n## Features\n\n * Built on [Connect](http://github.com/senchalabs/connect)\n * Robust routing\n * HTTP helpers (redirection, caching, etc)\n * View system supporting 14+ template engines\n * Content negotiation\n * Focus on high performance\n * Environment based configuration\n * Executable for generating applications quickly\n * High test coverage\n\n## Philosophy\n\n The Express philosophy is to provide small, robust tooling for HTTP servers, making\n it a great solution for single page applications, web sites, hybrids, or public\n HTTP APIs.\n\n Built on Connect, you can use _only_ what you need, and nothing more. Applications\n can be as big or as small as you like, even a single file. Express does\n not force you to use any specific ORM or template engine. With support for over\n 14 template engines via [Consolidate.js](http://github.com/visionmedia/consolidate.js),\n you can quickly craft your perfect framework.\n\n## More Information\n\n * [Website and Documentation](http://expressjs.com/) stored at [visionmedia/expressjs.com](https://github.com/visionmedia/expressjs.com)\n * Join #express on freenode\n * [Google Group](http://groups.google.com/group/express-js) for discussion\n * Follow [tjholowaychuk](http://twitter.com/tjholowaychuk) on twitter for updates\n * Visit the [Wiki](http://github.com/visionmedia/express/wiki)\n * [Русскоязычная документация](http://jsman.ru/express/)\n * Run express examples [online](https://runnable.com/express)\n\n## Viewing Examples\n\nClone the Express repo, then install the dev dependencies to install all the example / test suite dependencies:\n\n $ git clone git://github.com/visionmedia/express.git --depth 1\n $ cd express\n $ npm install\n\nThen run whichever tests you want:\n\n $ node examples/content-negotiation\n\nYou can also view live examples here:\n\n
    \n\n## Running Tests\n\nTo run the test suite, first invoke the following command within the repo, installing the development dependencies:\n\n $ npm install\n\nThen run the tests:\n\n $ make test\n\n## Contributors\n\n https://github.com/visionmedia/express/graphs/contributors\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2009-2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/express/issues" - }, - "homepage": "https://github.com/visionmedia/express", - "_id": "express@3.4.8", - "dist": { - "shasum": "aa7a8986de07053337f4bc5ed9a6453d9cc8e2e1" - }, - "_from": "express@", - "_resolved": "https://registry.npmjs.org/express/-/express-3.4.8.tgz" -} diff --git a/node_modules/gulp-autoprefixer/.npmignore b/node_modules/gulp-autoprefixer/.npmignore deleted file mode 100644 index 40b878db..00000000 --- a/node_modules/gulp-autoprefixer/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/LICENSE b/node_modules/gulp-autoprefixer/LICENSE deleted file mode 100644 index 9b0f1756..00000000 --- a/node_modules/gulp-autoprefixer/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index ffeccb20..00000000 --- a/node_modules/gulp-autoprefixer/README.md +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index 12c491e3..00000000 --- a/node_modules/gulp-autoprefixer/index.js +++ /dev/null @@ -1,58 +0,0 @@ -/* 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 deleted file mode 120000 index e876d81c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/.bin/autoprefixer +++ /dev/null @@ -1 +0,0 @@ -../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 deleted file mode 100644 index f7098f9c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/ChangeLog.md +++ /dev/null @@ -1,276 +0,0 @@ -## 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 deleted file mode 100644 index da057b45..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index 276ab1b2..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/README.md +++ /dev/null @@ -1,474 +0,0 @@ -# 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 deleted file mode 100755 index f98e533b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/bin/autoprefixer +++ /dev/null @@ -1,13 +0,0 @@ -#!/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 deleted file mode 100644 index 9b80c63a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/data/browsers.js +++ /dev/null @@ -1,50 +0,0 @@ -(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 deleted file mode 100644 index 5c14021a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/data/prefixes.js +++ /dev/null @@ -1,311 +0,0 @@ -(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 deleted file mode 100644 index cbbf547b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/autoprefixer.js +++ /dev/null @@ -1,117 +0,0 @@ -(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 deleted file mode 100644 index 6c6bf271..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/binary.js +++ /dev/null @@ -1,326 +0,0 @@ -(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 deleted file mode 100644 index a8b8b3c5..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/browsers.js +++ /dev/null @@ -1,190 +0,0 @@ -(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 deleted file mode 100644 index 439a9050..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/declaration.js +++ /dev/null @@ -1,81 +0,0 @@ -(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 deleted file mode 100644 index 74885370..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-content.js +++ /dev/null @@ -1,57 +0,0 @@ -(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 deleted file mode 100644 index 71144d55..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-items.js +++ /dev/null @@ -1,57 +0,0 @@ -(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 deleted file mode 100644 index fa7e81ce..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-self.js +++ /dev/null @@ -1,55 +0,0 @@ -(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 deleted file mode 100644 index 95b430fa..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/border-image.js +++ /dev/null @@ -1,28 +0,0 @@ -(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 deleted file mode 100644 index 97bcfa31..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/border-radius.js +++ /dev/null @@ -1,56 +0,0 @@ -(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 deleted file mode 100644 index 4529e356..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/display-flex.js +++ /dev/null @@ -1,70 +0,0 @@ -(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 deleted file mode 100644 index f9594652..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/fill-available.js +++ /dev/null @@ -1,41 +0,0 @@ -(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 deleted file mode 100644 index 7a109a78..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/filter.js +++ /dev/null @@ -1,29 +0,0 @@ -(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 deleted file mode 100644 index 4231c0fe..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-basis.js +++ /dev/null @@ -1,51 +0,0 @@ -(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 deleted file mode 100644 index d4ec3036..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-direction.js +++ /dev/null @@ -1,65 +0,0 @@ -(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 deleted file mode 100644 index 011199b4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-flow.js +++ /dev/null @@ -1,35 +0,0 @@ -(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 deleted file mode 100644 index c275f15b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-grow.js +++ /dev/null @@ -1,41 +0,0 @@ -(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 deleted file mode 100644 index d7bd77e5..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-shrink.js +++ /dev/null @@ -1,51 +0,0 @@ -(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 deleted file mode 100644 index 59ec38e9..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-spec.js +++ /dev/null @@ -1,11 +0,0 @@ -(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 deleted file mode 100644 index f7ffddc8..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-wrap.js +++ /dev/null @@ -1,33 +0,0 @@ -(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 deleted file mode 100644 index 8ad2e0b5..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex.js +++ /dev/null @@ -1,50 +0,0 @@ -(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 deleted file mode 100644 index f8a601f5..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/fullscreen.js +++ /dev/null @@ -1,33 +0,0 @@ -(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 deleted file mode 100644 index 3701fbce..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/gradient.js +++ /dev/null @@ -1,213 +0,0 @@ -(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 deleted file mode 100644 index 1a7554b8..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/justify-content.js +++ /dev/null @@ -1,62 +0,0 @@ -(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 deleted file mode 100644 index 4a1c619c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/order.js +++ /dev/null @@ -1,52 +0,0 @@ -(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 deleted file mode 100644 index 51d3bf9a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/placeholder.js +++ /dev/null @@ -1,35 +0,0 @@ -(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 deleted file mode 100644 index dd1e456a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/transform.js +++ /dev/null @@ -1,31 +0,0 @@ -(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 deleted file mode 100644 index 70306f30..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/transition.js +++ /dev/null @@ -1,37 +0,0 @@ -(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 deleted file mode 100644 index c097a1b2..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/info.js +++ /dev/null @@ -1,114 +0,0 @@ -(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 deleted file mode 100644 index 60f2850e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/keyframes.js +++ /dev/null @@ -1,40 +0,0 @@ -(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 deleted file mode 100644 index 38819e2c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/old-value.js +++ /dev/null @@ -1,29 +0,0 @@ -(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 deleted file mode 100644 index 72a0c411..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/prefixer.js +++ /dev/null @@ -1,84 +0,0 @@ -(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 deleted file mode 100644 index a6d7762a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/prefixes.js +++ /dev/null @@ -1,315 +0,0 @@ -(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 deleted file mode 100644 index 4062f3eb..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/processor.js +++ /dev/null @@ -1,105 +0,0 @@ -(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 deleted file mode 100644 index bf3f09ee..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/selector.js +++ /dev/null @@ -1,75 +0,0 @@ -(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 deleted file mode 100644 index f8ab33e5..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/updater.js +++ /dev/null @@ -1,225 +0,0 @@ -(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 deleted file mode 100644 index 32568164..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/utils.js +++ /dev/null @@ -1,41 +0,0 @@ -(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 deleted file mode 100644 index 242c14b4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/value.js +++ /dev/null @@ -1,97 +0,0 @@ -(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 deleted file mode 100644 index cefaa67a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index 73c222b8..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/CHANGELOG.md +++ /dev/null @@ -1,112 +0,0 @@ -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 deleted file mode 100644 index c73f7930..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ - -(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 deleted file mode 100644 index 8fda86af..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/README.md +++ /dev/null @@ -1,332 +0,0 @@ - -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 deleted file mode 100644 index 7a29f3ec..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/copy.js +++ /dev/null @@ -1,79 +0,0 @@ -"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 deleted file mode 100644 index cf3a34bd..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/create.js +++ /dev/null @@ -1,55 +0,0 @@ -"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 deleted file mode 100644 index 2ad3923d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/index.js +++ /dev/null @@ -1,110 +0,0 @@ -"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 deleted file mode 100644 index a0b8c2a4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/json.js +++ /dev/null @@ -1,30 +0,0 @@ -"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 deleted file mode 100644 index e0b16253..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/mkdir.js +++ /dev/null @@ -1,8 +0,0 @@ -"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 deleted file mode 100644 index 85840aa7..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/output.js +++ /dev/null @@ -1,37 +0,0 @@ -"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 deleted file mode 100644 index 9d5573b1..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/remove.js +++ /dev/null @@ -1,19 +0,0 @@ -"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 deleted file mode 120000 index 1c026480..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/.bin/ncp +++ /dev/null @@ -1 +0,0 @@ -../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 deleted file mode 120000 index 4cd49a49..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/.bin/rimraf +++ /dev/null @@ -1 +0,0 @@ -../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 deleted file mode 100644 index cefaa67a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index fb9ec881..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/CHANGELOG.md +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index 83642bff..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -(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 deleted file mode 100644 index 489b3945..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/README.md +++ /dev/null @@ -1,121 +0,0 @@ -[![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 deleted file mode 100644 index 011a7756..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/lib/jsonfile.js +++ /dev/null @@ -1,47 +0,0 @@ -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 deleted file mode 100644 index bf18753c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "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 deleted file mode 100644 index 9303c347..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index 84fd7ca2..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 432d1aeb..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index e6924212..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -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 deleted file mode 100644 index fda6de8a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/index.js +++ /dev/null @@ -1,82 +0,0 @@ -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 deleted file mode 100644 index dc434821..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "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 deleted file mode 100644 index 83b0216a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/readme.markdown +++ /dev/null @@ -1,63 +0,0 @@ -# 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 deleted file mode 100644 index 520dcb8e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,38 +0,0 @@ -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 deleted file mode 100644 index 0eb70998..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -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 deleted file mode 100644 index b07cd70c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -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 deleted file mode 100644 index 23a7abbd..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -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 deleted file mode 100644 index f685f609..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,39 +0,0 @@ -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 deleted file mode 100644 index 96a04476..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,41 +0,0 @@ -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 deleted file mode 100644 index 79858243..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -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 deleted file mode 100644 index bce68e56..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/return.js +++ /dev/null @@ -1,25 +0,0 @@ -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 deleted file mode 100644 index 7c222d35..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/return_sync.js +++ /dev/null @@ -1,24 +0,0 @@ -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 deleted file mode 100644 index 97ad7a2f..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/root.js +++ /dev/null @@ -1,18 +0,0 @@ -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 deleted file mode 100644 index 7530cada..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,32 +0,0 @@ -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 deleted file mode 100644 index 64ccafe2..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -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 deleted file mode 100644 index 35bd5cbb..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,32 +0,0 @@ -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 deleted file mode 100644 index 9ecd205c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index f686c49b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index e2b9b413..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -# 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 deleted file mode 100644 index 79ad086c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# 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 deleted file mode 100755 index 388eaba6..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/bin/ncp +++ /dev/null @@ -1,48 +0,0 @@ -#!/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 deleted file mode 100644 index d871e009..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/lib/ncp.js +++ /dev/null @@ -1,222 +0,0 @@ -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 deleted file mode 100644 index 7c87da71..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "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 deleted file mode 100644 index 802992c4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/a +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 9f6bb185..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/b +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index e69de29b..00000000 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 deleted file mode 100644 index e69de29b..00000000 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 deleted file mode 100644 index e69de29b..00000000 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 deleted file mode 100644 index e69de29b..00000000 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 deleted file mode 100644 index cf291b5e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/sub/a +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index e69de29b..00000000 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 deleted file mode 100644 index 3c613f77..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/ncp-test.js +++ /dev/null @@ -1,86 +0,0 @@ -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 deleted file mode 100644 index 247b7543..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/AUTHORS +++ /dev/null @@ -1,6 +0,0 @@ -# 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 deleted file mode 100644 index 05a40109..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -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 deleted file mode 100644 index cd123b65..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/README.md +++ /dev/null @@ -1,30 +0,0 @@ -`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 deleted file mode 100755 index 29bfa8a6..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/bin.js +++ /dev/null @@ -1,33 +0,0 @@ -#!/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 deleted file mode 100644 index 71f7dea0..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "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 deleted file mode 100644 index ce62051f..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/rimraf.js +++ /dev/null @@ -1,178 +0,0 @@ -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 deleted file mode 100644 index 598f0163..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/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 deleted file mode 100644 index 2602e631..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/setup.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/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 deleted file mode 100644 index 9c2e0b7b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/test-async.js +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index eb71f104..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/test-sync.js +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100755 index 03491b04..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "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 deleted file mode 100644 index a073af2e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/ChangeLog.md +++ /dev/null @@ -1,12 +0,0 @@ -## 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 deleted file mode 100644 index da057b45..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index 32a70b42..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/README.md +++ /dev/null @@ -1,571 +0,0 @@ -# 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 deleted file mode 100644 index 973259df..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/at-rule.js +++ /dev/null @@ -1,72 +0,0 @@ -(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 deleted file mode 100644 index 62e4c394..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/container.js +++ /dev/null @@ -1,243 +0,0 @@ -(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 deleted file mode 100644 index 8d130e0b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/declaration.js +++ /dev/null @@ -1,55 +0,0 @@ -(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 deleted file mode 100644 index 8b36570e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/generate-map.js +++ /dev/null @@ -1,65 +0,0 @@ -(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 deleted file mode 100644 index 5f984c8d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/list.js +++ /dev/null @@ -1,64 +0,0 @@ -(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 deleted file mode 100644 index 6f5edfe9..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/node.js +++ /dev/null @@ -1,126 +0,0 @@ -(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 deleted file mode 100644 index abce7316..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/parse.js +++ /dev/null @@ -1,422 +0,0 @@ -(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 deleted file mode 100644 index 18bac9c0..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/postcss.js +++ /dev/null @@ -1,78 +0,0 @@ -(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 deleted file mode 100644 index 9217b1de..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/raw.js +++ /dev/null @@ -1,38 +0,0 @@ -(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 deleted file mode 100644 index 810a005b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/result.js +++ /dev/null @@ -1,20 +0,0 @@ -(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 deleted file mode 100644 index 68f7d0d0..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/root.js +++ /dev/null @@ -1,38 +0,0 @@ -(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 deleted file mode 100644 index ec326c24..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/rule.js +++ /dev/null @@ -1,32 +0,0 @@ -(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 deleted file mode 100644 index 349dfae9..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/syntax-error.js +++ /dev/null @@ -1,27 +0,0 @@ -(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 deleted file mode 100644 index a1a8223b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/vendor.js +++ /dev/null @@ -1,27 +0,0 @@ -(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 deleted file mode 100644 index 3dddf3f6..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index ddc9c4f9..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index a0e1b9c4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/CHANGELOG.md +++ /dev/null @@ -1,130 +0,0 @@ -# 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 deleted file mode 100644 index ed1b7cf2..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ - -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 deleted file mode 100644 index d6fc26a7..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/Makefile.dryice.js +++ /dev/null @@ -1,166 +0,0 @@ -/* -*- 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 deleted file mode 100644 index b00e970c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/README.md +++ /dev/null @@ -1,446 +0,0 @@ -# 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 deleted file mode 100644 index daa1a623..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/assert-shim.js +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 0daf4537..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/mini-require.js +++ /dev/null @@ -1,152 +0,0 @@ -/* -*- 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 deleted file mode 100644 index ee2539d8..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/prefix-source-map.jsm +++ /dev/null @@ -1,20 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 80341d45..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/prefix-utils.jsm +++ /dev/null @@ -1,18 +0,0 @@ -/* -*- 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 deleted file mode 100644 index fb29ff5f..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-browser.js +++ /dev/null @@ -1,8 +0,0 @@ -/* -*- 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 deleted file mode 100644 index cf3c2d8d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-source-map.jsm +++ /dev/null @@ -1,6 +0,0 @@ -/* -*- 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 deleted file mode 100644 index b31b84cb..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-utils.jsm +++ /dev/null @@ -1,21 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 1b13f300..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/test-prefix.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - * 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 deleted file mode 100644 index bec2de3f..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/test-suffix.js +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index 121ad241..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - * 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 deleted file mode 100644 index 40f9a18b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/array-set.js +++ /dev/null @@ -1,97 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 1b67bb37..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/base64-vlq.js +++ /dev/null @@ -1,144 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 863cc465..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/base64.js +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- 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 deleted file mode 100644 index ff347c68..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/binary-search.js +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 5214d5e7..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js +++ /dev/null @@ -1,478 +0,0 @@ -/* -*- 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 deleted file mode 100644 index d555f08c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-generator.js +++ /dev/null @@ -1,397 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 1d98123b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-node.js +++ /dev/null @@ -1,387 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 4316445f..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/util.js +++ /dev/null @@ -1,302 +0,0 @@ -/* -*- 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 deleted file mode 100644 index f33d665d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/LICENSE +++ /dev/null @@ -1,58 +0,0 @@ -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 deleted file mode 100644 index c6995c07..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/README.md +++ /dev/null @@ -1,171 +0,0 @@ -# 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 deleted file mode 100644 index 53bf5a68..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/amdefine.js +++ /dev/null @@ -1,299 +0,0 @@ -/** 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 deleted file mode 100644 index 771a9830..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/intercept.js +++ /dev/null @@ -1,36 +0,0 @@ -/*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 deleted file mode 100644 index 8caf15c5..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "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 deleted file mode 100644 index 132d4562..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/package.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "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 deleted file mode 100755 index 64a7c3a3..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/run-tests.js +++ /dev/null @@ -1,62 +0,0 @@ -#!/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 deleted file mode 100644 index 3801233c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-api.js +++ /dev/null @@ -1,26 +0,0 @@ -/* -*- 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 deleted file mode 100644 index b5797edd..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-array-set.js +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 653a874e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-base64-vlq.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -*- 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 deleted file mode 100644 index ff3a2445..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-base64.js +++ /dev/null @@ -1,35 +0,0 @@ -/* -*- 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 deleted file mode 100644 index ee306830..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-binary-search.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 26757b2d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-dog-fooding.js +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- 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 deleted file mode 100644 index acd24d5e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-consumer.js +++ /dev/null @@ -1,475 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 16241dd3..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-generator.js +++ /dev/null @@ -1,540 +0,0 @@ -/* -*- 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 deleted file mode 100644 index e7afc4e7..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-node.js +++ /dev/null @@ -1,439 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 22e9a9e3..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-util.js +++ /dev/null @@ -1,127 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 288046bf..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/util.js +++ /dev/null @@ -1,161 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 10d9fd06..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "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 deleted file mode 100644 index d8c453b3..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "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 deleted file mode 100644 index afa4f7c1..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/updaters/browsers.js +++ /dev/null @@ -1,69 +0,0 @@ -(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 deleted file mode 100644 index 5d2e7755..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/updaters/prefixes.js +++ /dev/null @@ -1,238 +0,0 @@ -(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 deleted file mode 100755 index 31f2e87a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -*~ -*.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 deleted file mode 100755 index b2178387..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -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 deleted file mode 100755 index 454ab9d0..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/LICENCE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100755 index 85fc9bd1..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# 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 deleted file mode 100755 index fd607d19..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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 deleted file mode 100644 index a19a0f96..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/src/index.js +++ /dev/null @@ -1,45 +0,0 @@ -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 deleted file mode 100755 index 7b0ccc32..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/tests/index.mocha.js +++ /dev/null @@ -1,111 +0,0 @@ -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 deleted file mode 100644 index b5ef13a3..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.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 deleted file mode 100644 index 33ad9f8c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -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 deleted file mode 100755 index 7cbe012c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index fd0e506e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/README.md +++ /dev/null @@ -1,166 +0,0 @@ -# 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 deleted file mode 100644 index 6746ee4b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/index.js +++ /dev/null @@ -1,18 +0,0 @@ -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 deleted file mode 100644 index 690a508a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/File.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 96555672..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/PluginError.js +++ /dev/null @@ -1,65 +0,0 @@ -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 deleted file mode 100644 index 5473d754..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/beep.js +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index 4cb064ac..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/buffer.js +++ /dev/null @@ -1,15 +0,0 @@ -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 deleted file mode 100644 index bc804940..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/colors.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index f20712d2..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/combine.js +++ /dev/null @@ -1,11 +0,0 @@ -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 deleted file mode 100644 index 935793cc..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/date.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index ea1e03e4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/env.js +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index 0e23782c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/isBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index 403bb30e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/isNull.js +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index 9ce0929b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/isStream.js +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 5b0dfa4b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/linefeed.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index cdbb22fc..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/log.js +++ /dev/null @@ -1,9 +0,0 @@ -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 deleted file mode 100644 index 7862cb16..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/noop.js +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 3f76938e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/replaceExtension.js +++ /dev/null @@ -1,9 +0,0 @@ -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 deleted file mode 100644 index c467820f..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/template.js +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index a21f7022..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/index.js +++ /dev/null @@ -1,63 +0,0 @@ -'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 deleted file mode 120000 index b65c9f81..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi +++ /dev/null @@ -1 +0,0 @@ -../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 deleted file mode 100644 index 3da548c4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js +++ /dev/null @@ -1,38 +0,0 @@ -'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 deleted file mode 100644 index 2d61dabe..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "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 deleted file mode 100644 index 4ac8cbd0..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,65 +0,0 @@ -# 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 deleted file mode 100644 index 27316b1f..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js +++ /dev/null @@ -1,24 +0,0 @@ -'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 deleted file mode 100644 index e55a6244..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "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 deleted file mode 100644 index 0918c851..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# 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 deleted file mode 100755 index f8019cda..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js +++ /dev/null @@ -1,27 +0,0 @@ -#!/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 deleted file mode 100644 index 62320c59..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'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 deleted file mode 100644 index 7ca2b5d1..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "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 deleted file mode 100644 index eb661b3d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# 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 deleted file mode 100644 index 853b0144..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "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 deleted file mode 100644 index 46813acf..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/readme.md +++ /dev/null @@ -1,158 +0,0 @@ -# <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 deleted file mode 100644 index 57d44e2a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -(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 deleted file mode 100644 index 12f9872d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/Readme.md +++ /dev/null @@ -1,79 +0,0 @@ -# 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 deleted file mode 100644 index e1c38245..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js +++ /dev/null @@ -1,183 +0,0 @@ -/* - * 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 deleted file mode 100644 index deee5fee..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "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 deleted file mode 100644 index 9602a72a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/basic.js +++ /dev/null @@ -1,45 +0,0 @@ -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 deleted file mode 100644 index 07780fa8..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js +++ /dev/null @@ -1,10 +0,0 @@ -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 deleted file mode 100644 index d1ddbe81..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index 3c3e69b3..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index d362e36d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index 0bf92a5c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * 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 deleted file mode 100644 index 85f64e7b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index e89bd0db..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index 230f8ee8..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/index.js +++ /dev/null @@ -1,216 +0,0 @@ -/** - * 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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 6191a196..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index f3b8c438..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * 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 deleted file mode 100644 index 600f622a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index da283fc4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index 52eec906..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * 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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 16de7300..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index da17c6cd..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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 deleted file mode 100644 index ab0f1e6d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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 deleted file mode 100644 index 53559bd9..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 7cbc6538..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index 343a4156..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index eef7f9c6..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index ce4e6d8e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * 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 deleted file mode 100644 index 49869bba..00000000 --- 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 +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 9957cefa..00000000 --- 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 +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index f69503d4..00000000 --- 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 +++ /dev/null @@ -1,26 +0,0 @@ -/** - * 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 deleted file mode 100644 index 29c83d94..00000000 --- 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 +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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 deleted file mode 100644 index 00c07f7b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index c6ca90c4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index fa870474..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * 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 deleted file mode 100644 index 49869bba..00000000 --- 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 +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 9957cefa..00000000 --- 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 +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index f69503d4..00000000 --- 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 +++ /dev/null @@ -1,26 +0,0 @@ -/** - * 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 deleted file mode 100644 index 29c83d94..00000000 --- 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 +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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 deleted file mode 100644 index 74a4f272..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "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 deleted file mode 100644 index 254ecb1e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index bee29a8d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index 139568a2..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * 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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index fbcaad2f..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index b34a3500..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * 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 deleted file mode 100644 index 5e652af4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 23f3000b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index 12be0bf1..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * 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 deleted file mode 100644 index 49869bba..00000000 --- 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 +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 16de7300..00000000 --- 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 +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index da17c6cd..00000000 --- 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 +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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 deleted file mode 100644 index 21b0fd84..00000000 --- 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 +++ /dev/null @@ -1,46 +0,0 @@ -{ - "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 deleted file mode 100644 index a51388c1..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index eeb0a78b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index 3596ac34..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * 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 deleted file mode 100644 index 49869bba..00000000 --- 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 +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 16de7300..00000000 --- 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 +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index da17c6cd..00000000 --- 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 +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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 deleted file mode 100644 index 21b0fd84..00000000 --- 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 +++ /dev/null @@ -1,46 +0,0 @@ -{ - "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 deleted file mode 100644 index 698a9eaf..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "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 deleted file mode 100644 index cd3c29bd..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index d9ce72bc..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index bba7e231..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * 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 deleted file mode 100644 index f08cd47d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "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 deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 33f028da..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index ccf622fa..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * 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 deleted file mode 100644 index 8e864ab7..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "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 deleted file mode 100644 index a42d1163..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "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 deleted file mode 100644 index cc4dba29..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index ee27ba4b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -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 deleted file mode 100644 index abff3e8e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/example/parse.js +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index 584f551a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/index.js +++ /dev/null @@ -1,187 +0,0 @@ -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 deleted file mode 100644 index 6cb96be8..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "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 deleted file mode 100644 index c2563532..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/readme.markdown +++ /dev/null @@ -1,73 +0,0 @@ -# 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 deleted file mode 100644 index 8b034b99..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/dash.js +++ /dev/null @@ -1,24 +0,0 @@ -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 deleted file mode 100644 index f0041ee4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/default_bool.js +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index ef0ae349..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/dotted.js +++ /dev/null @@ -1,16 +0,0 @@ -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 deleted file mode 100644 index 5d3a1e09..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/long.js +++ /dev/null @@ -1,31 +0,0 @@ -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 deleted file mode 100644 index 8a906466..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/parse.js +++ /dev/null @@ -1,318 +0,0 @@ -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 deleted file mode 100644 index 21851b03..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js +++ /dev/null @@ -1,9 +0,0 @@ -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 deleted file mode 100644 index d513a1c2..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/short.js +++ /dev/null @@ -1,67 +0,0 @@ -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 deleted file mode 100644 index 8a52a58c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/whitespace.js +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/.npmignore +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 6e5919de..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index da69e925..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/History.md +++ /dev/null @@ -1,15 +0,0 @@ - -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 deleted file mode 100644 index d1df0ab3..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/Makefile +++ /dev/null @@ -1,10 +0,0 @@ - -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 deleted file mode 100644 index e8f432ec..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/Readme.md +++ /dev/null @@ -1,74 +0,0 @@ -# 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 deleted file mode 100644 index 1fefb4a4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/index.js +++ /dev/null @@ -1,57 +0,0 @@ - -/** - * 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 deleted file mode 100644 index 07e6e472..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/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 deleted file mode 100644 index 6e5919de..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index 547189a6..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index e39e1e9e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md +++ /dev/null @@ -1,129 +0,0 @@ -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 deleted file mode 100755 index ad537a04..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js +++ /dev/null @@ -1,49 +0,0 @@ -#!/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 deleted file mode 100644 index 90b261b4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js +++ /dev/null @@ -1,62 +0,0 @@ -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 deleted file mode 100644 index 1949be68..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "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 deleted file mode 100644 index fe3b2560..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js +++ /dev/null @@ -1,161 +0,0 @@ -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 deleted file mode 100644 index 10d6dd98..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "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 deleted file mode 100644 index 9d276510..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js +++ /dev/null @@ -1,108 +0,0 @@ -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 deleted file mode 100644 index c8ef3ca4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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 deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.npmignore +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 12b1a310..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -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 deleted file mode 100644 index f6a0029d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -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 deleted file mode 100644 index c9388b38..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/README.md +++ /dev/null @@ -1,131 +0,0 @@ -# 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 deleted file mode 100644 index 38344f87..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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 deleted file mode 100644 index 34c11897..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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 deleted file mode 100644 index ca807af8..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index a2e0d8e0..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,69 +0,0 @@ -// 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 deleted file mode 100644 index 330c247d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,41 +0,0 @@ -// 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 deleted file mode 100644 index 9a57f147..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,928 +0,0 @@ -// 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 deleted file mode 100644 index 707e4b3b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,205 +0,0 @@ -// 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 deleted file mode 100644 index 32fbab77..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,378 +0,0 @@ -// 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 deleted file mode 100644 index 206320cc..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index 6de584a4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index 4d2aa001..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md +++ /dev/null @@ -1,7 +0,0 @@ -**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 deleted file mode 100644 index 2e44a03e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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 deleted file mode 100644 index 7f5d0011..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "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 deleted file mode 100644 index 3723fdf3..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "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 deleted file mode 100644 index 27e8d8a5..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 4d1ddfc7..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,6 +0,0 @@ -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 deleted file mode 100644 index 5d482f07..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index e1e9efdf..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index a23e08a8..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index d583fcf4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index 389adae3..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# 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 deleted file mode 100644 index 62391e78..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index 20937d19..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js +++ /dev/null @@ -1,25 +0,0 @@ -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 deleted file mode 100644 index 17454ae4..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js +++ /dev/null @@ -1,25 +0,0 @@ -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 deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 60d00ce1..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index ab32d0ad..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md +++ /dev/null @@ -1,39 +0,0 @@ -#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 deleted file mode 100644 index db32d458..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js +++ /dev/null @@ -1,40 +0,0 @@ -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 deleted file mode 100644 index f5b24b6d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index 74a09897..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js +++ /dev/null @@ -1,16 +0,0 @@ -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 deleted file mode 100644 index 1de9cbb3..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "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 deleted file mode 100644 index b88421be..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js +++ /dev/null @@ -1,62 +0,0 @@ -(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 deleted file mode 100644 index f29f065a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js +++ /dev/null @@ -1,156 +0,0 @@ -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 deleted file mode 100644 index 8b77b1fc..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js +++ /dev/null @@ -1,6 +0,0 @@ - -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 deleted file mode 100644 index 62a07c2d..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js +++ /dev/null @@ -1,10 +0,0 @@ -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 deleted file mode 100644 index 9d932712..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js +++ /dev/null @@ -1,134 +0,0 @@ -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 deleted file mode 100644 index c52e4efc..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "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 deleted file mode 100644 index 3369d796..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js +++ /dev/null @@ -1,63 +0,0 @@ -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 deleted file mode 100644 index 3d0e0c8b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "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 deleted file mode 100644 index 9d137c7f..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/basic-test.js +++ /dev/null @@ -1,334 +0,0 @@ -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 deleted file mode 100644 index cc10868b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/bench.js +++ /dev/null @@ -1,42 +0,0 @@ -/* -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 deleted file mode 100644 index a6d28625..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/sauce.js +++ /dev/null @@ -1,38 +0,0 @@ -#!/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 deleted file mode 100644 index aa9b4877..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/test.js +++ /dev/null @@ -1,9 +0,0 @@ -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 deleted file mode 100644 index c1104848..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/through2.js +++ /dev/null @@ -1,78 +0,0 @@ -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 deleted file mode 100644 index b5ef13a3..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.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 deleted file mode 100644 index 33ad9f8c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -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 deleted file mode 100755 index 4f482f9b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index 3f97efc5..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/README.md +++ /dev/null @@ -1,123 +0,0 @@ -# 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 deleted file mode 100644 index 97f5c752..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/index.js +++ /dev/null @@ -1,128 +0,0 @@ -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 deleted file mode 100644 index 3a861f22..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index 2c906789..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js +++ /dev/null @@ -1,12 +0,0 @@ -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 deleted file mode 100644 index 0e23782c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index 403bb30e..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index 9ce0929b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 146cb32a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -## 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 deleted file mode 100644 index 8b12b6fa..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# 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 deleted file mode 100644 index e797cfe6..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js +++ /dev/null @@ -1,13 +0,0 @@ -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 deleted file mode 100644 index f7dc15d9..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "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 deleted file mode 100644 index e4bb2814..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js +++ /dev/null @@ -1,36 +0,0 @@ -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 deleted file mode 100644 index 4ef0f631..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "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 deleted file mode 100644 index 1f2a83a0..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/File.js +++ /dev/null @@ -1,540 +0,0 @@ -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 deleted file mode 100644 index 7d286814..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js +++ /dev/null @@ -1,28 +0,0 @@ -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 deleted file mode 100644 index fe1802c5..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js +++ /dev/null @@ -1,53 +0,0 @@ -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 deleted file mode 100644 index 5bb1cb91..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js +++ /dev/null @@ -1,29 +0,0 @@ -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 deleted file mode 100644 index db70c013..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isNull.js +++ /dev/null @@ -1,23 +0,0 @@ -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 deleted file mode 100644 index f22584c5..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isStream.js +++ /dev/null @@ -1,29 +0,0 @@ -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 deleted file mode 100644 index 8c5bb404..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "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 deleted file mode 100644 index 53544075..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/File.js +++ /dev/null @@ -1,46 +0,0 @@ -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 deleted file mode 100644 index 6dc23c0c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/PluginError.js +++ /dev/null @@ -1,70 +0,0 @@ -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 deleted file mode 100644 index e3e71073..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/beep.js +++ /dev/null @@ -1,23 +0,0 @@ -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 deleted file mode 100644 index 6b4de67f..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/buffer.js +++ /dev/null @@ -1,36 +0,0 @@ -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 deleted file mode 100644 index 970367e2..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/colors.js +++ /dev/null @@ -1,11 +0,0 @@ -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 deleted file mode 100644 index a54f0012..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/combine.js +++ /dev/null @@ -1,38 +0,0 @@ -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 deleted file mode 100644 index 21f52ee9..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/date.js +++ /dev/null @@ -1,17 +0,0 @@ -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 deleted file mode 100644 index d3942940..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/env.js +++ /dev/null @@ -1,12 +0,0 @@ -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 deleted file mode 100644 index ad09bbf5..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isBuffer.js +++ /dev/null @@ -1,16 +0,0 @@ -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 deleted file mode 100644 index 841fc46b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isNull.js +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index 3935324b..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isStream.js +++ /dev/null @@ -1,16 +0,0 @@ -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 deleted file mode 100644 index 72f61ca0..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/linefeed.js +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 71c6417a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/log.js +++ /dev/null @@ -1,23 +0,0 @@ -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 deleted file mode 100644 index 0d75b35c..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/noop.js +++ /dev/null @@ -1,24 +0,0 @@ -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 deleted file mode 100644 index b9c65662..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/replaceExtension.js +++ /dev/null @@ -1,34 +0,0 @@ -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 deleted file mode 100644 index 7664620a..00000000 --- a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/template.js +++ /dev/null @@ -1,99 +0,0 @@ -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 deleted file mode 100644 index 741dbc3d..00000000 --- a/node_modules/gulp-autoprefixer/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "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 deleted file mode 100644 index 7afc16f8..00000000 --- a/node_modules/gulp-autoprefixer/test/test.css +++ /dev/null @@ -1,3 +0,0 @@ -.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 deleted file mode 100644 index 39d45f3b..00000000 --- a/node_modules/gulp-autoprefixer/test/test.js +++ /dev/null @@ -1,106 +0,0 @@ -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/node_modules/gulp-imagemin/index.js b/node_modules/gulp-imagemin/index.js deleted file mode 100644 index 41b4b110..00000000 --- a/node_modules/gulp-imagemin/index.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; -var path = require('path'); -var fs = require('graceful-fs'); -var gutil = require('gulp-util'); -var map = require('map-stream'); -var filesize = require('filesize'); -var tempWrite = require('temp-write'); -var imagemin = require('image-min'); - -module.exports = function (options) { - return map(function (file, cb) { - if (file.isNull()) { - return cb(null, file); - } - - if (file.isStream()) { - return cb(new gutil.PluginError('gulp-imagemin', 'Streaming not supported')); - } - - if (['.jpg', '.jpeg', '.png', '.gif'].indexOf(path.extname(file.path).toLowerCase()) === -1) { - gutil.log('gulp-imagemin: Skipping unsupported image ' + gutil.colors.blue(file.relative)); - return cb(null, file); - } - - tempWrite(file.contents, path.basename(file.path), function (err, tempFile) { - if (err) { - return cb(new gutil.PluginError('gulp-imagemin', err)); - } - - // workaround: https://github.com/kevva/image-min/issues/8 - fs.stat(tempFile, function (err, stats) { - if (err) { - return cb(new gutil.PluginError('gulp-imagemin', err)); - } - - var origSize = stats.size; - - imagemin(tempFile, tempFile, options, function () { - fs.readFile(tempFile, function (err, data) { - if (err) { - return cb(new gutil.PluginError('gulp-imagemin', err)); - } - - var saved = origSize - data.length; - var savedMsg = saved > 0 ? 'saved ' + filesize(saved, {round: 1}) : 'already optimized'; - - gutil.log('gulp-imagemin:', gutil.colors.green('✔ ') + file.relative + gutil.colors.gray(' (' + savedMsg + ')')); - - file.contents = data; - cb(null, file); - }); - }); - }); - }); - }); -}; diff --git a/node_modules/gulp-imagemin/node_modules/filesize/.npmignore b/node_modules/gulp-imagemin/node_modules/filesize/.npmignore deleted file mode 100644 index 9cacf8da..00000000 --- a/node_modules/gulp-imagemin/node_modules/filesize/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -/node_modules/ -/lib/filesize.min.js -/lib/filesize.map -/src/ -/test/ -.jshintrc -.travis.yml -Gruntfile.js diff --git a/node_modules/gulp-imagemin/node_modules/filesize/LICENSE b/node_modules/gulp-imagemin/node_modules/filesize/LICENSE deleted file mode 100644 index c6f00fdd..00000000 --- a/node_modules/gulp-imagemin/node_modules/filesize/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2013, Jason Mulligan -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 {organization} 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 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-imagemin/node_modules/filesize/README.md b/node_modules/gulp-imagemin/node_modules/filesize/README.md deleted file mode 100644 index 62b6fea4..00000000 --- a/node_modules/gulp-imagemin/node_modules/filesize/README.md +++ /dev/null @@ -1,47 +0,0 @@ -[![build status](https://secure.travis-ci.org/avoidwork/filesize.js.png)](http://travis-ci.org/avoidwork/filesize.js) -# filesize.js - -filesize.js provides a simple way to get a human readable file size string from a number (float or integer) or string. - -## Optional settings - -`filesize()` accepts an optional descriptor Object as a second argument, so you can customize the output. - -### bits -_***(boolean)***_ Enables `bit` sizes, default is `false` - -### unix -_***(boolean)***_ Enables unix style human readable output, e.g `ls -lh`, default is `false` - -### base -_***(number)***_ Number base, default is `10` - -### round -_***(number)***_ Decimal place, default is `2` - -### spacer -_***(string)***_ Character between the `result` and `suffix`, default is `" "` - -## Examples - -```javascript -filesize(500); // "500 B" -filesize(500, {bits: true}); // "4.00 kb" -filesize(265318); // "265.32 kB" -filesize(265318, {base: 2}); // "259.10 kB" -filesize(265318, {base: 2, round: 1}); // "259.1 kB" -``` - -## How can I load filesize.js? - -filesize.js supports AMD loaders (require.js, curl.js, etc.), node.js & npm (npm install filesize), or using a script tag. - -## Support - -If you're having problems, use the support forum at CodersClan. - -<a href="http://codersclan.net/forum/index.php?repo_id=11"><img src="http://www.codersclan.net/graphics/getSupport_blue_big.png" width="160"></a> - -## License -Copyright (c) 2013 Jason Mulligan -Licensed under the BSD-3 license. diff --git a/node_modules/gulp-imagemin/node_modules/filesize/lib/filesize.js b/node_modules/gulp-imagemin/node_modules/filesize/lib/filesize.js deleted file mode 100644 index 74f60006..00000000 --- a/node_modules/gulp-imagemin/node_modules/filesize/lib/filesize.js +++ /dev/null @@ -1,141 +0,0 @@ -/** - * filesize - * - * @author Jason Mulligan <jason.mulligan@avoidwork.com> - * @copyright 2013 Jason Mulligan - * @license BSD-3 <https://raw.github.com/avoidwork/filesize.js/master/LICENSE> - * @link http://filesizejs.com - * @module filesize - * @version 2.0.0 - */ -( function ( global ) { -"use strict"; - -var bit = /b$/, - bite = /^B$/, - radix = 10, - right = /\.(.*)/, - zero = /^0$/; - -/** - * filesize - * - * @method filesize - * @param {Mixed} arg String, Int or Float to transform - * @param {Object} descriptor [Optional] Flags - * @return {String} Readable file size String - */ -function filesize ( arg, descriptor ) { - var result = "", - skip = false, - i = 6, - base, bits, neg, num, round, size, sizes, unix, spacer, suffix, z; - - if ( isNaN( arg ) ) { - throw new Error( "Invalid arguments" ); - } - - descriptor = descriptor || {}; - bits = ( descriptor.bits === true ); - unix = ( descriptor.unix === true ); - base = descriptor.base !== undefined ? descriptor.base : unix ? 2 : 10; - round = descriptor.round !== undefined ? descriptor.round : unix ? 1 : 2; - spacer = descriptor.spacer !== undefined ? descriptor.spacer : unix ? "" : " "; - num = Number( arg ); - neg = ( num < 0 ); - - // Flipping a negative number to determine the size - if ( neg ) { - num = -num; - } - - // Zero is now a special case because bytes divide by 1 - if ( num === 0 ) { - if ( unix ) { - result = "0"; - } - else { - result = "0" + spacer + "B"; - } - } - else { - sizes = options[base][bits ? "bits" : "bytes"]; - - while ( i-- ) { - size = sizes[i][1]; - suffix = sizes[i][0]; - - if ( num >= size ) { - // Treating bytes as cardinal - if ( bite.test( suffix ) ) { - skip = true; - round = 0; - } - - result = ( num / size ).toFixed( round ); - - if ( !skip && unix ) { - if ( bits && bit.test( suffix ) ) { - suffix = suffix.toLowerCase(); - } - - suffix = suffix.charAt( 0 ); - z = right.exec( result ); - - if ( !bits && suffix === "k" ) { - suffix = "K"; - } - - if ( z !== null && z[1] !== undefined && zero.test( z[1] ) ) { - result = parseInt( result, radix ); - } - - result += spacer + suffix; - } - else if ( !unix ) { - result += spacer + suffix; - } - - break; - } - } - } - - // Decorating a 'diff' - if ( neg ) { - result = "-" + result; - } - - return result; -} - -/** - * Size options - * - * @type {Object} - */ -var options = { - 2 : { - bits : [["B", 1], ["kb", 128], ["Mb", 131072], ["Gb", 134217728], ["Tb", 137438953472], ["Pb", 140737488355328]], - bytes : [["B", 1], ["kB", 1024], ["MB", 1048576], ["GB", 1073741824], ["TB", 1099511627776], ["PB", 1125899906842624]] - }, - 10 : { - bits : [["B", 1], ["kb", 125], ["Mb", 125000], ["Gb", 125000000], ["Tb", 125000000000], ["Pb", 125000000000000]], - bytes : [["B", 1], ["kB", 1000], ["MB", 1000000], ["GB", 1000000000], ["TB", 1000000000000], ["PB", 1000000000000000]] - } -}; - -// CommonJS, AMD, script tag -if ( typeof exports !== "undefined" ) { - module.exports = filesize; -} -else if ( typeof define === "function" ) { - define( function () { - return filesize; - } ); -} -else { - global.filesize = filesize; -} - -} )( this ); diff --git a/node_modules/gulp-imagemin/node_modules/filesize/package.json b/node_modules/gulp-imagemin/node_modules/filesize/package.json deleted file mode 100644 index d39de5af..00000000 --- a/node_modules/gulp-imagemin/node_modules/filesize/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "filesize", - "description": "JavaScript library to generate a human readable String describing the file size", - "version": "2.0.0", - "homepage": "http://filesizejs.com", - "author": { - "name": "Jason Mulligan", - "email": "jason.mulligan@avoidwork.com" - }, - "repository": { - "type": "git", - "url": "git://github.com/avoidwork/filesize.js.git" - }, - "bugs": { - "url": "https://github.com/avoidwork/filesize.js/issues" - }, - "licenses": [ - { - "type": "BSD-3", - "url": "https://raw.github.com/avoidwork/filesize.js/master/LICENSE" - } - ], - "main": "lib/filesize", - "engines": { - "node": ">= 0.4.0" - }, - "scripts": { - "test": "grunt test" - }, - "devDependencies": { - "grunt": "~0.4.1", - "grunt-cli": "~0.1.6", - "grunt-exec": "~0.4", - "grunt-sed": "~0.1", - "grunt-contrib-concat": "~0.1.3", - "grunt-contrib-jshint": "~0.1", - "grunt-contrib-nodeunit": "~0.1.2", - "grunt-contrib-watch": "~0.2" - }, - "keywords": [ - "file", - "filesize", - "size", - "readable", - "file system" - ], - "readme": "[![build status](https://secure.travis-ci.org/avoidwork/filesize.js.png)](http://travis-ci.org/avoidwork/filesize.js)\n# filesize.js\n\nfilesize.js provides a simple way to get a human readable file size string from a number (float or integer) or string.\n\n## Optional settings\n\n`filesize()` accepts an optional descriptor Object as a second argument, so you can customize the output.\n\n### bits\n_***(boolean)***_ Enables `bit` sizes, default is `false`\n\n### unix\n_***(boolean)***_ Enables unix style human readable output, e.g `ls -lh`, default is `false`\n\n### base\n_***(number)***_ Number base, default is `10`\n\n### round\n_***(number)***_ Decimal place, default is `2`\n\n### spacer\n_***(string)***_ Character between the `result` and `suffix`, default is `\" \"`\n\n## Examples\n\n```javascript\nfilesize(500); // \"500 B\"\nfilesize(500, {bits: true}); // \"4.00 kb\"\nfilesize(265318); // \"265.32 kB\"\nfilesize(265318, {base: 2}); // \"259.10 kB\"\nfilesize(265318, {base: 2, round: 1}); // \"259.1 kB\"\n```\n\n## How can I load filesize.js?\n\nfilesize.js supports AMD loaders (require.js, curl.js, etc.), node.js & npm (npm install filesize), or using a script tag.\n\n## Support\n\nIf you're having problems, use the support forum at CodersClan.\n\n<a href=\"http://codersclan.net/forum/index.php?repo_id=11\"><img src=\"http://www.codersclan.net/graphics/getSupport_blue_big.png\" width=\"160\"></a>\n\n## License\nCopyright (c) 2013 Jason Mulligan \nLicensed under the BSD-3 license.\n", - "readmeFilename": "README.md", - "_id": "filesize@2.0.0", - "dist": { - "shasum": "4242899128eebf8c96804d05ef2da04e20ad09f6" - }, - "_from": "filesize@~2.0.0", - "_resolved": "https://registry.npmjs.org/filesize/-/filesize-2.0.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/graceful-fs/.npmignore b/node_modules/gulp-imagemin/node_modules/graceful-fs/.npmignore deleted file mode 100644 index c2658d7d..00000000 --- a/node_modules/gulp-imagemin/node_modules/graceful-fs/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/node_modules/gulp-imagemin/node_modules/graceful-fs/LICENSE b/node_modules/gulp-imagemin/node_modules/graceful-fs/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-imagemin/node_modules/graceful-fs/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-imagemin/node_modules/graceful-fs/README.md b/node_modules/gulp-imagemin/node_modules/graceful-fs/README.md deleted file mode 100644 index eb1a1093..00000000 --- a/node_modules/gulp-imagemin/node_modules/graceful-fs/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# graceful-fs - -graceful-fs functions as a drop-in replacement for the fs module, -making various improvements. - -The improvements are meant to normalize behavior across different -platforms and environments, and to make filesystem access more -resilient to errors. - -## Improvements over fs module - -graceful-fs: - -* Queues up `open` and `readdir` calls, and retries them once - something closes if there is an EMFILE error from too many file - descriptors. -* fixes `lchmod` for Node versions prior to 0.6.2. -* implements `fs.lutimes` if possible. Otherwise it becomes a noop. -* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or - `lchown` if the user isn't root. -* makes `lchmod` and `lchown` become noops, if not available. -* retries reading a file if `read` results in EAGAIN error. - -On Windows, it retries renaming a file for up to one second if `EACCESS` -or `EPERM` error occurs, likely because antivirus software has locked -the directory. diff --git a/node_modules/gulp-imagemin/node_modules/graceful-fs/graceful-fs.js b/node_modules/gulp-imagemin/node_modules/graceful-fs/graceful-fs.js deleted file mode 100644 index 1865f92c..00000000 --- a/node_modules/gulp-imagemin/node_modules/graceful-fs/graceful-fs.js +++ /dev/null @@ -1,159 +0,0 @@ -// Monkey-patching the fs module. -// It's ugly, but there is simply no other way to do this. -var fs = module.exports = require('fs') - -var assert = require('assert') - -// fix up some busted stuff, mostly on windows and old nodes -require('./polyfills.js') - -// The EMFILE enqueuing stuff - -var util = require('util') - -function noop () {} - -var debug = noop -var util = require('util') -if (util.debuglog) - debug = util.debuglog('gfs') -else if (/\bgfs\b/i.test(process.env.NODE_DEBUG || '')) - debug = function() { - var m = util.format.apply(util, arguments) - m = 'GFS: ' + m.split(/\n/).join('\nGFS: ') - console.error(m) - } - -if (/\bgfs\b/i.test(process.env.NODE_DEBUG || '')) { - process.on('exit', function() { - debug('fds', fds) - debug(queue) - assert.equal(queue.length, 0) - }) -} - - -var originalOpen = fs.open -fs.open = open - -function open(path, flags, mode, cb) { - if (typeof mode === "function") cb = mode, mode = null - if (typeof cb !== "function") cb = noop - new OpenReq(path, flags, mode, cb) -} - -function OpenReq(path, flags, mode, cb) { - this.path = path - this.flags = flags - this.mode = mode - this.cb = cb - Req.call(this) -} - -util.inherits(OpenReq, Req) - -OpenReq.prototype.process = function() { - originalOpen.call(fs, this.path, this.flags, this.mode, this.done) -} - -var fds = {} -OpenReq.prototype.done = function(er, fd) { - debug('open done', er, fd) - if (fd) - fds['fd' + fd] = this.path - Req.prototype.done.call(this, er, fd) -} - - -var originalReaddir = fs.readdir -fs.readdir = readdir - -function readdir(path, cb) { - if (typeof cb !== "function") cb = noop - new ReaddirReq(path, cb) -} - -function ReaddirReq(path, cb) { - this.path = path - this.cb = cb - Req.call(this) -} - -util.inherits(ReaddirReq, Req) - -ReaddirReq.prototype.process = function() { - originalReaddir.call(fs, this.path, this.done) -} - -ReaddirReq.prototype.done = function(er, files) { - Req.prototype.done.call(this, er, files) - onclose() -} - - -var originalClose = fs.close -fs.close = close - -function close (fd, cb) { - debug('close', fd) - if (typeof cb !== "function") cb = noop - delete fds['fd' + fd] - originalClose.call(fs, fd, function(er) { - onclose() - cb(er) - }) -} - - -var originalCloseSync = fs.closeSync -fs.closeSync = closeSync - -function closeSync (fd) { - try { - return originalCloseSync(fd) - } finally { - onclose() - } -} - - -// Req class -function Req () { - // start processing - this.done = this.done.bind(this) - this.failures = 0 - this.process() -} - -Req.prototype.done = function (er, result) { - var tryAgain = false - if (er) { - var code = er.code - var tryAgain = code === "EMFILE" - if (process.platform === "win32") - tryAgain = tryAgain || code === "OK" - } - - if (tryAgain) { - this.failures ++ - enqueue(this) - } else { - var cb = this.cb - cb(er, result) - } -} - -var queue = [] - -function enqueue(req) { - queue.push(req) - debug('enqueue %d %s', queue.length, req.constructor.name, req) -} - -function onclose() { - var req = queue.shift() - if (req) { - debug('process', req.constructor.name, req) - req.process() - } -} diff --git a/node_modules/gulp-imagemin/node_modules/graceful-fs/package.json b/node_modules/gulp-imagemin/node_modules/graceful-fs/package.json deleted file mode 100644 index 3e4131e8..00000000 --- a/node_modules/gulp-imagemin/node_modules/graceful-fs/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "graceful-fs", - "description": "A drop-in replacement for fs, making various improvements.", - "version": "2.0.1", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-graceful-fs.git" - }, - "main": "graceful-fs.js", - "engines": { - "node": ">=0.4.0" - }, - "directories": { - "test": "test" - }, - "scripts": { - "test": "tap test/*.js" - }, - "keywords": [ - "fs", - "module", - "reading", - "retry", - "retries", - "queue", - "error", - "errors", - "handling", - "EMFILE", - "EAGAIN", - "EINVAL", - "EPERM", - "EACCESS" - ], - "license": "BSD", - "readme": "# graceful-fs\n\ngraceful-fs functions as a drop-in replacement for the fs module,\nmaking various improvements.\n\nThe improvements are meant to normalize behavior across different\nplatforms and environments, and to make filesystem access more\nresilient to errors.\n\n## Improvements over fs module\n\ngraceful-fs:\n\n* Queues up `open` and `readdir` calls, and retries them once\n something closes if there is an EMFILE error from too many file\n descriptors.\n* fixes `lchmod` for Node versions prior to 0.6.2.\n* implements `fs.lutimes` if possible. Otherwise it becomes a noop.\n* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or\n `lchown` if the user isn't root.\n* makes `lchmod` and `lchown` become noops, if not available.\n* retries reading a file if `read` results in EAGAIN error.\n\nOn Windows, it retries renaming a file for up to one second if `EACCESS`\nor `EPERM` error occurs, likely because antivirus software has locked\nthe directory.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-graceful-fs/issues" - }, - "homepage": "https://github.com/isaacs/node-graceful-fs", - "_id": "graceful-fs@2.0.1", - "dist": { - "shasum": "ec829a5953ea8ab7c1ba4c5de223ad6a44432ad6" - }, - "_from": "graceful-fs@~2.0.0", - "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/graceful-fs/polyfills.js b/node_modules/gulp-imagemin/node_modules/graceful-fs/polyfills.js deleted file mode 100644 index afc83b3f..00000000 --- a/node_modules/gulp-imagemin/node_modules/graceful-fs/polyfills.js +++ /dev/null @@ -1,228 +0,0 @@ -var fs = require('fs') -var constants = require('constants') - -var origCwd = process.cwd -var cwd = null -process.cwd = function() { - if (!cwd) - cwd = origCwd.call(process) - return cwd -} -var chdir = process.chdir -process.chdir = function(d) { - cwd = null - chdir.call(process, d) -} - -// (re-)implement some things that are known busted or missing. - -// lchmod, broken prior to 0.6.2 -// back-port the fix here. -if (constants.hasOwnProperty('O_SYMLINK') && - process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) { - fs.lchmod = function (path, mode, callback) { - callback = callback || noop - fs.open( path - , constants.O_WRONLY | constants.O_SYMLINK - , mode - , function (err, fd) { - if (err) { - callback(err) - return - } - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - fs.fchmod(fd, mode, function (err) { - fs.close(fd, function(err2) { - callback(err || err2) - }) - }) - }) - } - - fs.lchmodSync = function (path, mode) { - var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode) - - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - var err, err2 - try { - var ret = fs.fchmodSync(fd, mode) - } catch (er) { - err = er - } - try { - fs.closeSync(fd) - } catch (er) { - err2 = er - } - if (err || err2) throw (err || err2) - return ret - } -} - - -// lutimes implementation, or no-op -if (!fs.lutimes) { - if (constants.hasOwnProperty("O_SYMLINK")) { - fs.lutimes = function (path, at, mt, cb) { - fs.open(path, constants.O_SYMLINK, function (er, fd) { - cb = cb || noop - if (er) return cb(er) - fs.futimes(fd, at, mt, function (er) { - fs.close(fd, function (er2) { - return cb(er || er2) - }) - }) - }) - } - - fs.lutimesSync = function (path, at, mt) { - var fd = fs.openSync(path, constants.O_SYMLINK) - , err - , err2 - , ret - - try { - var ret = fs.futimesSync(fd, at, mt) - } catch (er) { - err = er - } - try { - fs.closeSync(fd) - } catch (er) { - err2 = er - } - if (err || err2) throw (err || err2) - return ret - } - - } else if (fs.utimensat && constants.hasOwnProperty("AT_SYMLINK_NOFOLLOW")) { - // maybe utimensat will be bound soonish? - fs.lutimes = function (path, at, mt, cb) { - fs.utimensat(path, at, mt, constants.AT_SYMLINK_NOFOLLOW, cb) - } - - fs.lutimesSync = function (path, at, mt) { - return fs.utimensatSync(path, at, mt, constants.AT_SYMLINK_NOFOLLOW) - } - - } else { - fs.lutimes = function (_a, _b, _c, cb) { process.nextTick(cb) } - fs.lutimesSync = function () {} - } -} - - -// https://github.com/isaacs/node-graceful-fs/issues/4 -// Chown should not fail on einval or eperm if non-root. - -fs.chown = chownFix(fs.chown) -fs.fchown = chownFix(fs.fchown) -fs.lchown = chownFix(fs.lchown) - -fs.chownSync = chownFixSync(fs.chownSync) -fs.fchownSync = chownFixSync(fs.fchownSync) -fs.lchownSync = chownFixSync(fs.lchownSync) - -function chownFix (orig) { - if (!orig) return orig - return function (target, uid, gid, cb) { - return orig.call(fs, target, uid, gid, function (er, res) { - if (chownErOk(er)) er = null - cb(er, res) - }) - } -} - -function chownFixSync (orig) { - if (!orig) return orig - return function (target, uid, gid) { - try { - return orig.call(fs, target, uid, gid) - } catch (er) { - if (!chownErOk(er)) throw er - } - } -} - -function chownErOk (er) { - // if there's no getuid, or if getuid() is something other than 0, - // and the error is EINVAL or EPERM, then just ignore it. - // This specific case is a silent failure in cp, install, tar, - // and most other unix tools that manage permissions. - // When running as root, or if other types of errors are encountered, - // then it's strict. - if (!er || (!process.getuid || process.getuid() !== 0) - && (er.code === "EINVAL" || er.code === "EPERM")) return true -} - - -// if lchmod/lchown do not exist, then make them no-ops -if (!fs.lchmod) { - fs.lchmod = function (path, mode, cb) { - process.nextTick(cb) - } - fs.lchmodSync = function () {} -} -if (!fs.lchown) { - fs.lchown = function (path, uid, gid, cb) { - process.nextTick(cb) - } - fs.lchownSync = function () {} -} - - - -// on Windows, A/V software can lock the directory, causing this -// to fail with an EACCES or EPERM if the directory contains newly -// created files. Try again on failure, for up to 1 second. -if (process.platform === "win32") { - var rename_ = fs.rename - fs.rename = function rename (from, to, cb) { - var start = Date.now() - rename_(from, to, function CB (er) { - if (er - && (er.code === "EACCES" || er.code === "EPERM") - && Date.now() - start < 1000) { - return rename_(from, to, CB) - } - cb(er) - }) - } -} - - -// if read() returns EAGAIN, then just try it again. -var read = fs.read -fs.read = function (fd, buffer, offset, length, position, callback_) { - var callback - if (callback_ && typeof callback_ === 'function') { - var eagCounter = 0 - callback = function (er, _, __) { - if (er && er.code === 'EAGAIN' && eagCounter < 10) { - eagCounter ++ - return read.call(fs, fd, buffer, offset, length, position, callback) - } - callback_.apply(this, arguments) - } - } - return read.call(fs, fd, buffer, offset, length, position, callback) -} - -var readSync = fs.readSync -fs.readSync = function (fd, buffer, offset, length, position) { - var eagCounter = 0 - while (true) { - try { - return readSync.call(fs, fd, buffer, offset, length, position) - } catch (er) { - if (er.code === 'EAGAIN' && eagCounter < 10) { - eagCounter ++ - continue - } - throw er - } - } -} - diff --git a/node_modules/gulp-imagemin/node_modules/graceful-fs/test/open.js b/node_modules/gulp-imagemin/node_modules/graceful-fs/test/open.js deleted file mode 100644 index 104f36b0..00000000 --- a/node_modules/gulp-imagemin/node_modules/graceful-fs/test/open.js +++ /dev/null @@ -1,39 +0,0 @@ -var test = require('tap').test -var fs = require('../graceful-fs.js') - -test('graceful fs is monkeypatched fs', function (t) { - t.equal(fs, require('fs')) - t.end() -}) - -test('open an existing file works', function (t) { - var fd = fs.openSync(__filename, 'r') - fs.closeSync(fd) - fs.open(__filename, 'r', function (er, fd) { - if (er) throw er - fs.close(fd, function (er) { - if (er) throw er - t.pass('works') - t.end() - }) - }) -}) - -test('open a non-existing file throws', function (t) { - var er - try { - var fd = fs.openSync('this file does not exist', 'r') - } catch (x) { - er = x - } - t.ok(er, 'should throw') - t.notOk(fd, 'should not get an fd') - t.equal(er.code, 'ENOENT') - - fs.open('neither does this file', 'r', function (er, fd) { - t.ok(er, 'should throw') - t.notOk(fd, 'should not get an fd') - t.equal(er.code, 'ENOENT') - t.end() - }) -}) diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/.npmignore b/node_modules/gulp-imagemin/node_modules/gulp-util/.npmignore deleted file mode 100644 index b5ef13a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.DS_Store -*.log -node_modules -build -*.node -components \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/.travis.yml b/node_modules/gulp-imagemin/node_modules/gulp-util/.travis.yml deleted file mode 100644 index 33ad9f8c..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -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-imagemin/node_modules/gulp-util/LICENSE b/node_modules/gulp-imagemin/node_modules/gulp-util/LICENSE deleted file mode 100755 index 7cbe012c..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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-imagemin/node_modules/gulp-util/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/README.md deleted file mode 100644 index fd0e506e..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/README.md +++ /dev/null @@ -1,166 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/index.js deleted file mode 100644 index 6746ee4b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/index.js +++ /dev/null @@ -1,18 +0,0 @@ -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-imagemin/node_modules/gulp-util/lib/File.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/File.js deleted file mode 100644 index 690a508a..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/File.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('vinyl'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/PluginError.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/PluginError.js deleted file mode 100644 index 96555672..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/PluginError.js +++ /dev/null @@ -1,65 +0,0 @@ -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-imagemin/node_modules/gulp-util/lib/beep.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/beep.js deleted file mode 100644 index 5473d754..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/beep.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function() { - process.stdout.write('\x07'); -}; diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/buffer.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/buffer.js deleted file mode 100644 index 4cb064ac..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/buffer.js +++ /dev/null @@ -1,15 +0,0 @@ -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-imagemin/node_modules/gulp-util/lib/colors.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/colors.js deleted file mode 100644 index bc804940..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/colors.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('chalk'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/combine.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/combine.js deleted file mode 100644 index f20712d2..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/combine.js +++ /dev/null @@ -1,11 +0,0 @@ -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-imagemin/node_modules/gulp-util/lib/date.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/date.js deleted file mode 100644 index 935793cc..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/date.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('dateformat'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/env.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/env.js deleted file mode 100644 index ea1e03e4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/env.js +++ /dev/null @@ -1,4 +0,0 @@ -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-imagemin/node_modules/gulp-util/lib/isBuffer.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/isBuffer.js deleted file mode 100644 index 0e23782c..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/isBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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-imagemin/node_modules/gulp-util/lib/isNull.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/isNull.js deleted file mode 100644 index 403bb30e..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/isNull.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(v) { - return v === null; -}; \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/isStream.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/isStream.js deleted file mode 100644 index 9ce0929b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/isStream.js +++ /dev/null @@ -1,5 +0,0 @@ -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-imagemin/node_modules/gulp-util/lib/linefeed.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/linefeed.js deleted file mode 100644 index 5b0dfa4b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/linefeed.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = '\n'; \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/log.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/log.js deleted file mode 100644 index cdbb22fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/log.js +++ /dev/null @@ -1,9 +0,0 @@ -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-imagemin/node_modules/gulp-util/lib/noop.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/noop.js deleted file mode 100644 index 7862cb16..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/noop.js +++ /dev/null @@ -1,5 +0,0 @@ -var through = require('through2'); - -module.exports = function () { - return through.obj(); -}; diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/replaceExtension.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/replaceExtension.js deleted file mode 100644 index 3f76938e..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/replaceExtension.js +++ /dev/null @@ -1,9 +0,0 @@ -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-imagemin/node_modules/gulp-util/lib/template.js b/node_modules/gulp-imagemin/node_modules/gulp-util/lib/template.js deleted file mode 100644 index c467820f..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/lib/template.js +++ /dev/null @@ -1,19 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/chalk/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/index.js deleted file mode 100644 index a21f7022..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/index.js +++ /dev/null @@ -1,63 +0,0 @@ -'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-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi deleted file mode 120000 index b65c9f81..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi +++ /dev/null @@ -1 +0,0 @@ -../strip-ansi/cli.js \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js deleted file mode 100644 index 3da548c4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js +++ /dev/null @@ -1,38 +0,0 @@ -'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-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json deleted file mode 100644 index 633d5e9b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "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", - "dist": { - "shasum": "cb102df1c56f5123eab8b67cd7b98027a0279178" - }, - "_from": "ansi-styles@~1.0.0", - "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md deleted file mode 100644 index 4ac8cbd0..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,65 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js deleted file mode 100644 index 27316b1f..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js +++ /dev/null @@ -1,24 +0,0 @@ -'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-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json deleted file mode 100644 index d60b2d0a..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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", - "dist": { - "shasum": "d1dadeea5b9e8b446bf08603532333710c95a290" - }, - "_from": "has-color@~0.1.0", - "_resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md deleted file mode 100644 index 0918c851..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js deleted file mode 100755 index f8019cda..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js +++ /dev/null @@ -1,27 +0,0 @@ -#!/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-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js deleted file mode 100644 index 62320c59..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'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-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json deleted file mode 100644 index 459be932..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "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", - "dist": { - "shasum": "39e8a98d044d150660abe4a6808acf70bb7bc991" - }, - "_from": "strip-ansi@~0.1.0", - "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md deleted file mode 100644 index eb661b3d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/chalk/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/package.json deleted file mode 100644 index 5ed4c5d5..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "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", - "dist": { - "shasum": "5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" - }, - "_from": "chalk@~0.4.0", - "_resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/readme.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/readme.md deleted file mode 100644 index 46813acf..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/chalk/readme.md +++ /dev/null @@ -1,158 +0,0 @@ -# <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-imagemin/node_modules/gulp-util/node_modules/dateformat/LICENSE b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/LICENSE deleted file mode 100644 index 57d44e2a..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -(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-imagemin/node_modules/gulp-util/node_modules/dateformat/Readme.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/Readme.md deleted file mode 100644 index 12f9872d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/Readme.md +++ /dev/null @@ -1,79 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js deleted file mode 100644 index e1c38245..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js +++ /dev/null @@ -1,183 +0,0 @@ -/* - * 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-imagemin/node_modules/gulp-util/node_modules/dateformat/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/package.json deleted file mode 100644 index c1f687e9..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "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", - "dist": { - "shasum": "ee94157a2b1444b4a0cdc48dd6fe1ce67592e62d" - }, - "_from": "dateformat@~1.0.7-1.2.3", - "_resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.7-1.2.3.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/basic.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/basic.js deleted file mode 100644 index 9602a72a..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/basic.js +++ /dev/null @@ -1,45 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js deleted file mode 100644 index 07780fa8..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js +++ /dev/null @@ -1,10 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js deleted file mode 100644 index d1ddbe81..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js +++ /dev/null @@ -1,4 +0,0 @@ -var dateFormat = require('../lib/dateformat.js'); - -var val = process.argv[2] || new Date(); -console.log(dateFormat(val, 'W')); diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh deleted file mode 100644 index 3c3e69b3..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/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-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md deleted file mode 100644 index d362e36d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js deleted file mode 100644 index 0bf92a5c..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * 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-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json deleted file mode 100644 index 2f3da035..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "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", - "dist": { - "shasum": "4f1227aa5a8711fc632f5b07a1f4607aab8b3222" - }, - "_from": "lodash._reinterpolate@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/README.md deleted file mode 100644 index e89bd0db..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/index.js deleted file mode 100644 index 230f8ee8..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/index.js +++ /dev/null @@ -1,216 +0,0 @@ -/** - * 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md deleted file mode 100644 index 6191a196..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js deleted file mode 100644 index f3b8c438..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json deleted file mode 100644 index a12ffa73..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "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", - "dist": { - "shasum": "ecfe22618a2ade50bfeea43937e51df66f0edb72" - }, - "_from": "lodash._escapestringchar@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md deleted file mode 100644 index da283fc4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js deleted file mode 100644 index 52eec906..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md deleted file mode 100644 index 16de7300..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js deleted file mode 100644 index da17c6cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json deleted file mode 100644 index f5b3de80..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "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", - "dist": { - "shasum": "7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" - }, - "_from": "lodash._objecttypes@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json deleted file mode 100644 index dde9277d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "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", - "dist": { - "shasum": "a7e8885f05e68851144b6e12a8f3678026bc4c54" - }, - "_from": "lodash.defaults@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md deleted file mode 100644 index 7cbc6538..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js deleted file mode 100644 index 343a4156..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md deleted file mode 100644 index eef7f9c6..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js deleted file mode 100644 index ce4e6d8e..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * 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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md deleted file mode 100644 index 9957cefa..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js deleted file mode 100644 index f69503d4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * 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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json deleted file mode 100644 index f685854b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "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", - "dist": { - "shasum": "32d14bf0844b6de6f8b62a051b4f67c228b624cb" - }, - "_from": "lodash._htmlescapes@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json deleted file mode 100644 index 7fc7a4e9..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "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", - "dist": { - "shasum": "df67c3bb6b7e8e1e831ab48bfa0795b92afe899d" - }, - "_from": "lodash._escapehtmlchar@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md deleted file mode 100644 index c6ca90c4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js deleted file mode 100644 index fa870474..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * 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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md deleted file mode 100644 index 9957cefa..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js deleted file mode 100644 index f69503d4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * 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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json deleted file mode 100644 index f685854b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "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", - "dist": { - "shasum": "32d14bf0844b6de6f8b62a051b4f67c228b624cb" - }, - "_from": "lodash._htmlescapes@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json deleted file mode 100644 index 55cfe20b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "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", - "dist": { - "shasum": "747c4fc40103eb3bb8a0976e571f7a2659e93ba7" - }, - "_from": "lodash._reunescapedhtml@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json deleted file mode 100644 index efe2e729..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "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", - "dist": { - "shasum": "2ce12c5e084db0a57dda5e5d1eeeb9f5d175a3b4" - }, - "_from": "lodash.escape@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md deleted file mode 100644 index bee29a8d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js deleted file mode 100644 index 139568a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md deleted file mode 100644 index fbcaad2f..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js deleted file mode 100644 index b34a3500..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json deleted file mode 100644 index aeff6347..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "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", - "dist": { - "shasum": "3ea6404b784a7be836c7b57580e1cdf79b14832c" - }, - "_from": "lodash._isnative@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md deleted file mode 100644 index 23f3000b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js deleted file mode 100644 index 12be0bf1..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * 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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md deleted file mode 100644 index 16de7300..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js deleted file mode 100644 index da17c6cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json deleted file mode 100644 index 4ee6604f..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "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", - "dist": { - "shasum": "7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" - }, - "_from": "lodash._objecttypes@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", - "scripts": {} -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json deleted file mode 100644 index 5684f2cc..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "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", - "dist": { - "shasum": "6e9cc9666ff081f0b5a6c978b83e242e6949d203" - }, - "_from": "lodash._shimkeys@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md deleted file mode 100644 index eeb0a78b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js deleted file mode 100644 index 3596ac34..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * 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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md deleted file mode 100644 index 16de7300..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js deleted file mode 100644 index da17c6cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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-imagemin/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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json deleted file mode 100644 index 4ee6604f..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "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", - "dist": { - "shasum": "7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" - }, - "_from": "lodash._objecttypes@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", - "scripts": {} -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json deleted file mode 100644 index 8def4942..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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", - "dist": { - "shasum": "5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" - }, - "_from": "lodash.isobject@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json deleted file mode 100644 index 21aac6a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "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", - "dist": { - "shasum": "48dea46df8ff7632b10d706b8acb26591e2b3727" - }, - "_from": "lodash.keys@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md deleted file mode 100644 index d9ce72bc..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js deleted file mode 100644 index bba7e231..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json deleted file mode 100644 index 4df2c9fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "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", - "dist": { - "shasum": "ea76c75d11eb86d4dbe89a83893bb861929ac699" - }, - "_from": "lodash.templatesettings@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md deleted file mode 100644 index 33f028da..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js deleted file mode 100644 index ccf622fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * 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-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json deleted file mode 100644 index 82ec70fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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", - "dist": { - "shasum": "abf514436b3cb705001627978cbcf30b1280eea4" - }, - "_from": "lodash.values@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/package.json deleted file mode 100644 index 6133269f..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/lodash.template/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "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", - "dist": { - "shasum": "9e611007edf629129a974ab3c48b817b3e1cf20d" - }, - "_from": "lodash.template@~2.4.1", - "_resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/.travis.yml b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/.travis.yml deleted file mode 100644 index cc4dba29..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/LICENSE b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/LICENSE deleted file mode 100644 index ee27ba4b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/minimist/example/parse.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/example/parse.js deleted file mode 100644 index abff3e8e..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/example/parse.js +++ /dev/null @@ -1,2 +0,0 @@ -var argv = require('../')(process.argv.slice(2)); -console.dir(argv); diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/index.js deleted file mode 100644 index 2aa95140..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/index.js +++ /dev/null @@ -1,187 +0,0 @@ -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, 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], 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, 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-imagemin/node_modules/gulp-util/node_modules/minimist/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/package.json deleted file mode 100644 index d0d35f82..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "minimist", - "version": "0.0.7", - "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.7", - "dist": { - "shasum": "5e1aa4da48e55dcfd52b66fdacd054d19dd64fce" - }, - "_from": "minimist@~0.0.5", - "_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.7.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/readme.markdown b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/readme.markdown deleted file mode 100644 index c2563532..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/readme.markdown +++ /dev/null @@ -1,73 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/minimist/test/dash.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/dash.js deleted file mode 100644 index 8b034b99..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/dash.js +++ /dev/null @@ -1,24 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/minimist/test/default_bool.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/default_bool.js deleted file mode 100644 index f0041ee4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/default_bool.js +++ /dev/null @@ -1,20 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/minimist/test/dotted.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/dotted.js deleted file mode 100644 index ef0ae349..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/dotted.js +++ /dev/null @@ -1,16 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/minimist/test/long.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/long.js deleted file mode 100644 index 5d3a1e09..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/long.js +++ /dev/null @@ -1,31 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/minimist/test/parse.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/parse.js deleted file mode 100644 index 7c4348a4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/parse.js +++ /dev/null @@ -1,297 +0,0 @@ -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('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-imagemin/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js deleted file mode 100644 index 21851b03..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js +++ /dev/null @@ -1,9 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/minimist/test/short.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/short.js deleted file mode 100644 index d513a1c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/short.js +++ /dev/null @@ -1,67 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/minimist/test/whitespace.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/whitespace.js deleted file mode 100644 index 8a52a58c..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/minimist/test/whitespace.js +++ /dev/null @@ -1,8 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/multipipe/.npmignore b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/.travis.yml b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/.travis.yml deleted file mode 100644 index 6e5919de..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/History.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/History.md deleted file mode 100644 index 4174056f..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/History.md +++ /dev/null @@ -1,10 +0,0 @@ - -0.0.1 / 2013-01-15 -================== - -* fix error bubbling - -0.0.0 / 2013-01-13 -================== - -* initial release diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/Makefile b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/Makefile deleted file mode 100644 index d1df0ab3..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/Makefile +++ /dev/null @@ -1,10 +0,0 @@ - -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-imagemin/node_modules/gulp-util/node_modules/multipipe/Readme.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/Readme.md deleted file mode 100644 index e8f432ec..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/Readme.md +++ /dev/null @@ -1,74 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/multipipe/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/index.js deleted file mode 100644 index 5292417c..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/index.js +++ /dev/null @@ -1,57 +0,0 @@ - -/** - * 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); - stream.on('error', ret.emit.bind(ret, 'error')); - }); - - return ret; -} - diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore deleted file mode 100644 index 07e6e472..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml deleted file mode 100644 index 6e5919de..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md deleted file mode 100644 index 547189a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md +++ /dev/null @@ -1,26 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md deleted file mode 100644 index e39e1e9e..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md +++ /dev/null @@ -1,129 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js deleted file mode 100755 index ad537a04..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js +++ /dev/null @@ -1,49 +0,0 @@ -#!/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-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js deleted file mode 100644 index 90b261b4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js +++ /dev/null @@ -1,62 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json deleted file mode 100644 index 2c190c20..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "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", - "dist": { - "shasum": "f8a276687b0b122a466e2bbc8f6a22043cb15d26" - }, - "_from": "duplexer2@0.0.1", - "_resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js deleted file mode 100644 index fe3b2560..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js +++ /dev/null @@ -1,161 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/multipipe/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/package.json deleted file mode 100644 index 9d5bb7d7..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "multipipe", - "version": "0.0.1", - "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.1", - "dist": { - "shasum": "537286e6edfcfc85e9f7e568e1f50d82381b6196" - }, - "_from": "multipipe@~0.0.1", - "_resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.0.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js deleted file mode 100644 index 57fd1886..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js +++ /dev/null @@ -1,85 +0,0 @@ -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)); - }); - - it('should aggregate errors', 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); - }); -}); - -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-imagemin/node_modules/gulp-util/node_modules/through2/.jshintrc b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/.jshintrc deleted file mode 100644 index c8ef3ca4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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-imagemin/node_modules/gulp-util/node_modules/through2/.npmignore b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/.travis.yml b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/.travis.yml deleted file mode 100644 index 12b1a310..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/LICENSE b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/LICENSE deleted file mode 100644 index f6a0029d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/README.md deleted file mode 100644 index c9388b38..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/README.md +++ /dev/null @@ -1,131 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore deleted file mode 100644 index 38344f87..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -build/ -test/ -examples/ -fs.js -zlib.js \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md deleted file mode 100644 index be976683..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md +++ /dev/null @@ -1,768 +0,0 @@ -# readable-stream - -A new class of streams for Node.js - -This module provides the new Stream base classes introduced in Node -v0.10, for use in Node v0.8. You can use it to have programs that -have to work with node v0.8, while being forward-compatible for v0.10 -and beyond. When you drop support for v0.8, you can remove this -module, and only use the native streams. - -This is almost exactly the same codebase as appears in Node v0.10. -However: - -1. The exported object is actually the Readable class. Decorating the - native `stream` module would be global pollution. -2. In v0.10, you can safely use `base64` as an argument to - `setEncoding` in Readable streams. However, in v0.8, the - StringDecoder class has no `end()` method, which is problematic for - Base64. So, don't use that, because it'll break and be weird. - -Other than that, the API is the same as `require('stream')` in v0.10, -so the API docs are reproduced below. - ----------- - - Stability: 2 - Unstable - -A stream is an abstract interface implemented by various objects in -Node. For example a request to an HTTP server is a stream, as is -stdout. Streams are readable, writable, or both. All streams are -instances of [EventEmitter][] - -You can load the Stream base classes by doing `require('stream')`. -There are base classes provided for Readable streams, Writable -streams, Duplex streams, and Transform streams. - -## Compatibility - -In earlier versions of Node, the Readable stream interface was -simpler, but also less powerful and less useful. - -* Rather than waiting for you to call the `read()` method, `'data'` - events would start emitting immediately. If you needed to do some - I/O to decide how to handle data, then you had to store the chunks - in some kind of buffer so that they would not be lost. -* The `pause()` method was advisory, rather than guaranteed. This - meant that you still had to be prepared to receive `'data'` events - even when the stream was in a paused state. - -In Node v0.10, the Readable class described below was added. For -backwards compatibility with older Node programs, Readable streams -switch into "old mode" when a `'data'` event handler is added, or when -the `pause()` or `resume()` methods are called. The effect is that, -even if you are not using the new `read()` method and `'readable'` -event, you no longer have to worry about losing `'data'` chunks. - -Most programs will continue to function normally. However, this -introduces an edge case in the following conditions: - -* No `'data'` event handler is added. -* The `pause()` and `resume()` methods are never called. - -For example, consider the following code: - -```javascript -// WARNING! BROKEN! -net.createServer(function(socket) { - - // we add an 'end' method, but never consume the data - socket.on('end', function() { - // It will never get here. - socket.end('I got your message (but didnt read it)\n'); - }); - -}).listen(1337); -``` - -In versions of node prior to v0.10, the incoming message data would be -simply discarded. However, in Node v0.10 and beyond, the socket will -remain paused forever. - -The workaround in this situation is to call the `resume()` method to -trigger "old mode" behavior: - -```javascript -// Workaround -net.createServer(function(socket) { - - socket.on('end', function() { - socket.end('I got your message (but didnt read it)\n'); - }); - - // start the flow of data, discarding it. - socket.resume(); - -}).listen(1337); -``` - -In addition to new Readable streams switching into old-mode, pre-v0.10 -style streams can be wrapped in a Readable class using the `wrap()` -method. - -## Class: stream.Readable - -<!--type=class--> - -A `Readable Stream` has the following methods, members, and events. - -Note that `stream.Readable` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -method. (See below.) - -### new stream.Readable([options]) - -* `options` {Object} - * `highWaterMark` {Number} The maximum number of bytes to store in - the internal buffer before ceasing to read from the underlying - resource. Default=16kb - * `encoding` {String} If specified, then buffers will be decoded to - strings using the specified encoding. Default=null - * `objectMode` {Boolean} Whether this stream should behave - as a stream of objects. Meaning that stream.read(n) returns - a single value instead of a Buffer of size n - -In classes that extend the Readable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### readable.\_read(size) - -* `size` {Number} Number of bytes to read asynchronously - -Note: **This function should NOT be called directly.** It should be -implemented by child classes, and called by the internal Readable -class methods only. - -All Readable stream implementations must provide a `_read` method -to fetch data from the underlying resource. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -When data is available, put it into the read queue by calling -`readable.push(chunk)`. If `push` returns false, then you should stop -reading. When `_read` is called again, you should start pushing more -data. - -The `size` argument is advisory. Implementations where a "read" is a -single call that returns data can use this to know how much data to -fetch. Implementations where that is not relevant, such as TCP or -TLS, may ignore this argument, and simply provide data whenever it -becomes available. There is no need, for example to "wait" until -`size` bytes are available before calling `stream.push(chunk)`. - -### readable.push(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to push into the read queue -* return {Boolean} Whether or not more pushes should be performed - -Note: **This function should be called by Readable implementors, NOT -by consumers of Readable subclasses.** The `_read()` function will not -be called again until at least one `push(chunk)` call is made. If no -data is available, then you MAY call `push('')` (an empty string) to -allow a future `_read` call, without adding any data to the queue. - -The `Readable` class works by putting data into a read queue to be -pulled out later by calling the `read()` method when the `'readable'` -event fires. - -The `push()` method will explicitly insert some data into the read -queue. If it is called with `null` then it will signal the end of the -data. - -In some cases, you may be wrapping a lower-level source which has some -sort of pause/resume mechanism, and a data callback. In those cases, -you could wrap the low-level source object by doing something like -this: - -```javascript -// source is an object with readStop() and readStart() methods, -// and an `ondata` member that gets called when it has data, and -// an `onend` member that gets called when the data is over. - -var stream = new Readable(); - -source.ondata = function(chunk) { - // if push() returns false, then we need to stop reading from source - if (!stream.push(chunk)) - source.readStop(); -}; - -source.onend = function() { - stream.push(null); -}; - -// _read will be called when the stream wants to pull more data in -// the advisory size argument is ignored in this case. -stream._read = function(n) { - source.readStart(); -}; -``` - -### readable.unshift(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue -* return {Boolean} Whether or not more pushes should be performed - -This is the corollary of `readable.push(chunk)`. Rather than putting -the data at the *end* of the read queue, it puts it at the *front* of -the read queue. - -This is useful in certain use-cases where a stream is being consumed -by a parser, which needs to "un-consume" some data that it has -optimistically pulled out of the source. - -```javascript -// A parser for a simple data protocol. -// The "header" is a JSON object, followed by 2 \n characters, and -// then a message body. -// -// Note: This can be done more simply as a Transform stream. See below. - -function SimpleProtocol(source, options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Readable.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - - // source is a readable stream, such as a socket or file - this._source = source; - - var self = this; - source.on('end', function() { - self.push(null); - }); - - // give it a kick whenever the source is readable - // read(0) will not consume any bytes - source.on('readable', function() { - self.read(0); - }); - - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Readable.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._read = function(n) { - if (!this._inBody) { - var chunk = this._source.read(); - - // if the source doesn't have data, we don't have data yet. - if (chunk === null) - return this.push(''); - - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - this.push(''); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // now, because we got some extra data, unshift the rest - // back into the read queue so that our consumer will see it. - var b = chunk.slice(split); - this.unshift(b); - - // and let them know that we are done parsing the header. - this.emit('header', this.header); - } - } else { - // from there on, just provide the data to our consumer. - // careful not to push(null), since that would indicate EOF. - var chunk = this._source.read(); - if (chunk) this.push(chunk); - } -}; - -// Usage: -var parser = new SimpleProtocol(source); -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - -### readable.wrap(stream) - -* `stream` {Stream} An "old style" readable stream - -If you are using an older Node library that emits `'data'` events and -has a `pause()` method that is advisory only, then you can use the -`wrap()` method to create a Readable stream that uses the old stream -as its data source. - -For example: - -```javascript -var OldReader = require('./old-api-module.js').OldReader; -var oreader = new OldReader; -var Readable = require('stream').Readable; -var myReader = new Readable().wrap(oreader); - -myReader.on('readable', function() { - myReader.read(); // etc. -}); -``` - -### Event: 'readable' - -When there is data ready to be consumed, this event will fire. - -When this event emits, call the `read()` method to consume the data. - -### Event: 'end' - -Emitted when the stream has received an EOF (FIN in TCP terminology). -Indicates that no more `'data'` events will happen. If the stream is -also writable, it may be possible to continue writing. - -### Event: 'data' - -The `'data'` event emits either a `Buffer` (by default) or a string if -`setEncoding()` was used. - -Note that adding a `'data'` event listener will switch the Readable -stream into "old mode", where data is emitted as soon as it is -available, rather than waiting for you to call `read()` to consume it. - -### Event: 'error' - -Emitted if there was an error receiving data. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### readable.setEncoding(encoding) - -Makes the `'data'` event emit a string instead of a `Buffer`. `encoding` -can be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`. - -The encoding can also be set by specifying an `encoding` field to the -constructor. - -### readable.read([size]) - -* `size` {Number | null} Optional number of bytes to read. -* Return: {Buffer | String | null} - -Note: **This function SHOULD be called by Readable stream users.** - -Call this method to consume data once the `'readable'` event is -emitted. - -The `size` argument will set a minimum number of bytes that you are -interested in. If not set, then the entire content of the internal -buffer is returned. - -If there is no data to consume, or if there are fewer bytes in the -internal buffer than the `size` argument, then `null` is returned, and -a future `'readable'` event will be emitted when more is available. - -Calling `stream.read(0)` will always return `null`, and will trigger a -refresh of the internal buffer, but otherwise be a no-op. - -### readable.pipe(destination, [options]) - -* `destination` {Writable Stream} -* `options` {Object} Optional - * `end` {Boolean} Default=true - -Connects this readable stream to `destination` WriteStream. Incoming -data on this stream gets written to `destination`. Properly manages -back-pressure so that a slow destination will not be overwhelmed by a -fast readable stream. - -This function returns the `destination` stream. - -For example, emulating the Unix `cat` command: - - process.stdin.pipe(process.stdout); - -By default `end()` is called on the destination when the source stream -emits `end`, so that `destination` is no longer writable. Pass `{ end: -false }` as `options` to keep the destination stream open. - -This keeps `writer` open so that "Goodbye" can be written at the -end. - - reader.pipe(writer, { end: false }); - reader.on("end", function() { - writer.end("Goodbye\n"); - }); - -Note that `process.stderr` and `process.stdout` are never closed until -the process exits, regardless of the specified options. - -### readable.unpipe([destination]) - -* `destination` {Writable Stream} Optional - -Undo a previously established `pipe()`. If no destination is -provided, then all previously established pipes are removed. - -### readable.pause() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Ceases the flow of data. No `'data'` events are emitted while the -stream is in a paused state. - -### readable.resume() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Resumes the incoming `'data'` events after a `pause()`. - - -## Class: stream.Writable - -<!--type=class--> - -A `Writable` Stream has the following methods, members, and events. - -Note that `stream.Writable` is an abstract class designed to be -extended with an underlying implementation of the -`_write(chunk, encoding, cb)` method. (See below.) - -### new stream.Writable([options]) - -* `options` {Object} - * `highWaterMark` {Number} Buffer level when `write()` starts - returning false. Default=16kb - * `decodeStrings` {Boolean} Whether or not to decode strings into - Buffers before passing them to `_write()`. Default=true - -In classes that extend the Writable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### writable.\_write(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be written. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. Ignore chunk is a buffer. Note that chunk will - **always** be a buffer unless the `decodeStrings` option is - explicitly set to `false`. -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -All Writable stream implementations must provide a `_write` method to -send data to the underlying resource. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Writable -class methods only. - -Call the callback using the standard `callback(error)` pattern to -signal that the write completed successfully or with an error. - -If the `decodeStrings` flag is set in the constructor options, then -`chunk` may be a string rather than a Buffer, and `encoding` will -indicate the sort of string that it is. This is to support -implementations that have an optimized handling for certain string -data encodings. If you do not explicitly set the `decodeStrings` -option to `false`, then you can safely ignore the `encoding` argument, -and assume that `chunk` will always be a Buffer. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - - -### writable.write(chunk, [encoding], [callback]) - -* `chunk` {Buffer | String} Data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when this chunk is - successfully written. -* Returns {Boolean} - -Writes `chunk` to the stream. Returns `true` if the data has been -flushed to the underlying resource. Returns `false` to indicate that -the buffer is full, and the data will be sent out in the future. The -`'drain'` event will indicate when the buffer is empty again. - -The specifics of when `write()` will return false, is determined by -the `highWaterMark` option provided to the constructor. - -### writable.end([chunk], [encoding], [callback]) - -* `chunk` {Buffer | String} Optional final data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when the final chunk is - successfully written. - -Call this method to signal the end of the data being written to the -stream. - -### Event: 'drain' - -Emitted when the stream's write queue empties and it's safe to write -without buffering again. Listen for it when `stream.write()` returns -`false`. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### Event: 'finish' - -When `end()` is called and there are no more chunks to write, this -event is emitted. - -### Event: 'pipe' - -* `source` {Readable Stream} - -Emitted when the stream is passed to a readable stream's pipe method. - -### Event 'unpipe' - -* `source` {Readable Stream} - -Emitted when a previously established `pipe()` is removed using the -source Readable stream's `unpipe()` method. - -## Class: stream.Duplex - -<!--type=class--> - -A "duplex" stream is one that is both Readable and Writable, such as a -TCP socket connection. - -Note that `stream.Duplex` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -and `_write(chunk, encoding, callback)` methods as you would with a Readable or -Writable stream class. - -Since JavaScript doesn't have multiple prototypal inheritance, this -class prototypally inherits from Readable, and then parasitically from -Writable. It is thus up to the user to implement both the lowlevel -`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method -on extension duplex classes. - -### new stream.Duplex(options) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then - the stream will automatically end the readable side when the - writable side ends and vice versa. - -In classes that extend the Duplex class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -## Class: stream.Transform - -A "transform" stream is a duplex stream where the output is causally -connected in some way to the input, such as a zlib stream or a crypto -stream. - -There is no requirement that the output be the same size as the input, -the same number of chunks, or arrive at the same time. For example, a -Hash stream will only ever have a single chunk of output which is -provided when the input is ended. A zlib stream will either produce -much smaller or much larger than its input. - -Rather than implement the `_read()` and `_write()` methods, Transform -classes must implement the `_transform()` method, and may optionally -also implement the `_flush()` method. (See below.) - -### new stream.Transform([options]) - -* `options` {Object} Passed to both Writable and Readable - constructors. - -In classes that extend the Transform class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### transform.\_transform(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be transformed. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. (Ignore if `decodeStrings` chunk is a buffer.) -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Transform -class methods only. - -All Transform stream implementations must provide a `_transform` -method to accept input and produce output. - -`_transform` should do whatever has to be done in this specific -Transform class, to handle the bytes being written, and pass them off -to the readable portion of the interface. Do asynchronous I/O, -process things, and so on. - -Call `transform.push(outputChunk)` 0 or more times to generate output -from this input chunk, depending on how much data you want to output -as a result of this chunk. - -Call the callback function only when the current chunk is completely -consumed. Note that there may or may not be output as a result of any -particular input chunk. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### transform.\_flush(callback) - -* `callback` {Function} Call this function (optionally with an error - argument) when you are done flushing any remaining data. - -Note: **This function MUST NOT be called directly.** It MAY be implemented -by child classes, and if so, will be called by the internal Transform -class methods only. - -In some cases, your transform operation may need to emit a bit more -data at the end of the stream. For example, a `Zlib` compression -stream will store up some internal state so that it can optimally -compress the output. At the end, however, it needs to do the best it -can with what is left, so that the data will be complete. - -In those cases, you can implement a `_flush` method, which will be -called at the very end, after all the written data is consumed, but -before emitting `end` to signal the end of the readable side. Just -like with `_transform`, call `transform.push(chunk)` zero or more -times, as appropriate, and call `callback` when the flush operation is -complete. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### Example: `SimpleProtocol` parser - -The example above of a simple protocol parser can be implemented much -more simply by using the higher level `Transform` stream class. - -In this example, rather than providing the input as an argument, it -would be piped into the parser, which is a more idiomatic Node stream -approach. - -```javascript -function SimpleProtocol(options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Transform.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Transform.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._transform = function(chunk, encoding, done) { - if (!this._inBody) { - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // and let them know that we are done parsing the header. - this.emit('header', this.header); - - // now, because we got some extra data, emit this first. - this.push(b); - } - } else { - // from there on, just provide the data to our consumer as-is. - this.push(b); - } - done(); -}; - -var parser = new SimpleProtocol(); -source.pipe(parser) - -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - - -## Class: stream.PassThrough - -This is a trivial implementation of a `Transform` stream that simply -passes the input bytes across to the output. Its purpose is mainly -for examples and testing, but there are occasionally use cases where -it can come in handy. - - -[EventEmitter]: events.html#events_class_events_eventemitter diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js deleted file mode 100644 index ca807af8..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch deleted file mode 100644 index 0ad71a1f..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch +++ /dev/null @@ -1,68 +0,0 @@ -diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js -index c5a741c..a2e0d8e 100644 ---- a/lib/_stream_duplex.js -+++ b/lib/_stream_duplex.js -@@ -26,8 +26,8 @@ - - module.exports = Duplex; - var util = require('util'); --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('./_stream_readable'); -+var Writable = require('./_stream_writable'); - - util.inherits(Duplex, Readable); - -diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js -index a5e9864..330c247 100644 ---- a/lib/_stream_passthrough.js -+++ b/lib/_stream_passthrough.js -@@ -25,7 +25,7 @@ - - module.exports = PassThrough; - --var Transform = require('_stream_transform'); -+var Transform = require('./_stream_transform'); - var util = require('util'); - util.inherits(PassThrough, Transform); - -diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js -index 2259d2e..e6681ee 100644 ---- a/lib/_stream_readable.js -+++ b/lib/_stream_readable.js -@@ -23,6 +23,9 @@ 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 StringDecoder; -diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js -index e925b4b..f08b05e 100644 ---- a/lib/_stream_transform.js -+++ b/lib/_stream_transform.js -@@ -64,7 +64,7 @@ - - module.exports = Transform; - --var Duplex = require('_stream_duplex'); -+var Duplex = require('./_stream_duplex'); - var util = require('util'); - util.inherits(Transform, Duplex); - -diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js -index a26f711..56ca47d 100644 ---- a/lib/_stream_writable.js -+++ b/lib/_stream_writable.js -@@ -109,7 +109,7 @@ function WritableState(options, stream) { - function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. -- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex)) -+ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex'))) - return new Writable(options); - - this._writableState = new WritableState(options, this); diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index a2e0d8e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,69 +0,0 @@ -// 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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 330c247d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,41 +0,0 @@ -// 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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 323f3305..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,927 +0,0 @@ -// 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 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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index 707e4b3b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,205 +0,0 @@ -// 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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index 9eaf4ec2..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,371 +0,0 @@ -// 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 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 = []; -} - -function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof require('./_stream_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.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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE deleted file mode 100644 index 6de584a4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md deleted file mode 100644 index 4d2aa001..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md +++ /dev/null @@ -1,7 +0,0 @@ -**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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js deleted file mode 100755 index 46470cfd..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env node - -const hyperquest = require('hyperzip')(require('hyperdirect')) - , bl = require('bl') - , fs = require('fs') - , path = require('path') - , cheerio = require('cheerio') - - , files = require('./files') - , testReplace = require('./test-replacements') - - , srcurlpfx = 'https://raw.github.com/joyent/node/v' + process.argv[2] + '-release/' - , libsrcurl = srcurlpfx + 'lib/' - , testsrcurl = srcurlpfx + 'test/simple/' - , testlisturl = 'https://github.com/joyent/node/tree/v' + process.argv[2] + '-release/test/simple' - , libourroot = path.join(__dirname, '../') - , testourroot = path.join(__dirname, '../test/simple/') - - -function processFile (url, out, replacements) { - hyperquest(url).pipe(bl(function (err, data) { - if (err) - throw err - - data = data.toString() - replacements.forEach(function (replacement) { - data = data.replace.apply(data, replacement) - }) - - fs.writeFile(out, data, 'utf8', function (err) { - if (err) - throw err - - console.log('Wrote', out) - }) - })) -} - -function processLibFile (file) { - var replacements = files[file] - , url = libsrcurl + file - , out = path.join(libourroot, replacements.out || file) - - processFile(url, out, replacements) -} - - -function processTestFile (file) { - var replacements = testReplace.all - , url = testsrcurl + file - , out = path.join(testourroot, file) - - if (testReplace[file]) - replacements = replacements.concat(testReplace[file]) - - processFile(url, out, replacements) -} - - -if (!/0\.1\d\.\d+/.test(process.argv[2])) { - console.log('Usage: build.js <node version>') - return process.exit(-1) -} - - -//-------------------------------------------------------------------- -// Grab & process files in ../lib/ - -Object.keys(files).forEach(processLibFile) - -//-------------------------------------------------------------------- -// Discover, grab and process all test-string-decoder* files on joyent/node - -hyperquest(testlisturl).pipe(bl(function (err, data) { - if (err) - throw err - - var $ = cheerio.load(data.toString()) - - $('table.files .js-directory-link').each(function () { - var file = $(this).text() - if (/^test-string-decoder/.test(file) || file == 'common.js') - processTestFile(file) - }) -})) - -//-------------------------------------------------------------------- -// Grab the joyent/node test/common.js - -processFile( - testsrcurl + '../common.js' - , path.join(testourroot, '../common.js') - , testReplace['common.js'] -) \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js deleted file mode 100644 index 7396a4f4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js +++ /dev/null @@ -1,36 +0,0 @@ -/* This file lists the files to be fetched from the node repo - * in the /lib/ directory which will be placed in the ../lib/ - * directory after having each of the "replacements" in the - * array for that file applied to it. The replacements are - * simply the arguments to String#replace, so they can be - * strings, regexes, functions. - */ - -module.exports['string_decoder.js'] = [ - - // pull in Bufer as a require - // add Buffer.isEncoding where missing - [ - /^(\/\/ USE OR OTHER DEALINGS IN THE SOFTWARE\.)/m - , '$1\n\nvar Buffer = require(\'buffer\').Buffer;' - + '\n' - + '\nvar isBufferEncoding = Buffer.isEncoding' - + '\n || function(encoding) {' - + '\n switch (encoding && encoding.toLowerCase()) {' - + '\n 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;' - + '\n default: return false;' - + '\n }' - + '\n }' - + '\n' - - ] - - // use custom Buffer.isEncoding reference - , [ - /Buffer\.isEncoding\(/g - , 'isBufferEncoding\(' - ] - -] - -module.exports['string_decoder.js'].out = 'index.js' \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json deleted file mode 100644 index f7ee6a46..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "string_decoder-build", - "version": "0.0.0", - "description": "", - "main": "build.js", - "dependencies": { - "bl": "~0.6.0", - "hyperzip": "0.0.0", - "hyperdirect": "0.0.0", - "cheerio": "~0.13.1" - } -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js deleted file mode 100644 index 5bbf6028..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports.all = [ - [ - /require\(['"]string_decoder['"]\)/g - , 'require(\'../../\')' - ] - -] - -module.exports['common.js'] = [ - [ - /^ setImmediate,$/m - , ' typeof setImmediate == \'undefined\' ? null : setImmediate,' - ] - - , [ - /^ clearImmediate,$/m - , ' typeof clearImmediate == \'undefined\' ? null : clearImmediate,' - ] - - , [ - /^ global];$/m - , ' global].filter(Boolean);' - ] -] diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js deleted file mode 100644 index 2e44a03e..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json deleted file mode 100644 index c7cac1a5..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "string_decoder", - "version": "0.10.25", - "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", - "dist": { - "shasum": "aa026a29a0177ff13c8df4472dcda2f26d646900" - }, - "_from": "string_decoder@~0.10.x", - "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.25.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js deleted file mode 100644 index ed5ff08d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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 path = require('path'); -var assert = require('assert'); - -exports.testDir = path.dirname(__filename); -exports.fixturesDir = path.join(exports.testDir, 'fixtures'); -exports.libDir = path.join(exports.testDir, '../lib'); -exports.tmpDir = path.join(exports.testDir, 'tmp'); -exports.PORT = +process.env.NODE_COMMON_PORT || 12346; - -if (process.platform === 'win32') { - exports.PIPE = '\\\\.\\pipe\\libuv-test'; -} else { - exports.PIPE = exports.tmpDir + '/test.sock'; -} - -var util = require('util'); -for (var i in util) exports[i] = util[i]; -//for (var i in exports) global[i] = exports[i]; - -function protoCtrChain(o) { - var result = []; - for (; o; o = o.__proto__) { result.push(o.constructor); } - return result.join(); -} - -exports.indirectInstanceOf = function(obj, cls) { - if (obj instanceof cls) { return true; } - var clsChain = protoCtrChain(cls.prototype); - var objChain = protoCtrChain(obj); - return objChain.slice(-clsChain.length) === clsChain; -}; - - -exports.ddCommand = function(filename, kilobytes) { - if (process.platform === 'win32') { - var p = path.resolve(exports.fixturesDir, 'create-file.js'); - return '"' + process.argv[0] + '" "' + p + '" "' + - filename + '" ' + (kilobytes * 1024); - } else { - return 'dd if=/dev/zero of="' + filename + '" bs=1024 count=' + kilobytes; - } -}; - - -exports.spawnCat = function(options) { - var spawn = require('child_process').spawn; - - if (process.platform === 'win32') { - return spawn('more', [], options); - } else { - return spawn('cat', [], options); - } -}; - - -exports.spawnPwd = function(options) { - var spawn = require('child_process').spawn; - - if (process.platform === 'win32') { - return spawn('cmd.exe', ['/c', 'cd'], options); - } else { - return spawn('pwd', [], options); - } -}; - - -// Turn this off if the test should not check for global leaks. -exports.globalCheck = true; - -process.on('exit', function() { - if (!exports.globalCheck) return; - var knownGlobals = [setTimeout, - setInterval, - typeof setImmediate == 'undefined' ? null : setImmediate, - clearTimeout, - clearInterval, - typeof clearImmediate == 'undefined' ? null : clearImmediate, - console, - Buffer, - process, - global].filter(Boolean); - - if (global.gc) { - knownGlobals.push(gc); - } - - if (global.DTRACE_HTTP_SERVER_RESPONSE) { - knownGlobals.push(DTRACE_HTTP_SERVER_RESPONSE); - knownGlobals.push(DTRACE_HTTP_SERVER_REQUEST); - knownGlobals.push(DTRACE_HTTP_CLIENT_RESPONSE); - knownGlobals.push(DTRACE_HTTP_CLIENT_REQUEST); - knownGlobals.push(DTRACE_NET_STREAM_END); - knownGlobals.push(DTRACE_NET_SERVER_CONNECTION); - knownGlobals.push(DTRACE_NET_SOCKET_READ); - knownGlobals.push(DTRACE_NET_SOCKET_WRITE); - } - if (global.COUNTER_NET_SERVER_CONNECTION) { - knownGlobals.push(COUNTER_NET_SERVER_CONNECTION); - knownGlobals.push(COUNTER_NET_SERVER_CONNECTION_CLOSE); - knownGlobals.push(COUNTER_HTTP_SERVER_REQUEST); - knownGlobals.push(COUNTER_HTTP_SERVER_RESPONSE); - knownGlobals.push(COUNTER_HTTP_CLIENT_REQUEST); - knownGlobals.push(COUNTER_HTTP_CLIENT_RESPONSE); - } - - if (global.ArrayBuffer) { - knownGlobals.push(ArrayBuffer); - knownGlobals.push(Int8Array); - knownGlobals.push(Uint8Array); - knownGlobals.push(Uint8ClampedArray); - knownGlobals.push(Int16Array); - knownGlobals.push(Uint16Array); - knownGlobals.push(Int32Array); - knownGlobals.push(Uint32Array); - knownGlobals.push(Float32Array); - knownGlobals.push(Float64Array); - knownGlobals.push(DataView); - } - - for (var x in global) { - var found = false; - - for (var y in knownGlobals) { - if (global[x] === knownGlobals[y]) { - found = true; - break; - } - } - - if (!found) { - console.error('Unknown global: %s', x); - assert.ok(false, 'Unknown global found'); - } - } -}); - - -var mustCallChecks = []; - - -function runCallChecks(exitCode) { - if (exitCode !== 0) return; - - var failed = mustCallChecks.filter(function(context) { - return context.actual !== context.expected; - }); - - failed.forEach(function(context) { - console.log('Mismatched %s function calls. Expected %d, actual %d.', - context.name, - context.expected, - context.actual); - console.log(context.stack.split('\n').slice(2).join('\n')); - }); - - if (failed.length) process.exit(1); -} - - -exports.mustCall = function(fn, expected) { - if (typeof expected !== 'number') expected = 1; - - var context = { - expected: expected, - actual: 0, - stack: (new Error).stack, - name: fn.name || '<anonymous>' - }; - - // add the exit listener only once to avoid listener leak warnings - if (mustCallChecks.length === 0) process.on('exit', runCallChecks); - - mustCallChecks.push(context); - - return function() { - context.actual++; - return fn.apply(this, arguments); - }; -}; diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js deleted file mode 100644 index 869a4116..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js +++ /dev/null @@ -1,75 +0,0 @@ -// 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. - -// verify that the string decoder works getting 1 byte at a time, -// the whole buffer at once, and that both match the .toString(enc) -// result of the entire buffer. - -var assert = require('assert'); -var SD = require('../../').StringDecoder; -var encodings = ['base64', 'hex', 'utf8', 'utf16le', 'ucs2']; - -var bufs = [ '☃💩', 'asdf' ].map(function(b) { - return new Buffer(b); -}); - -// also test just arbitrary bytes from 0-15. -for (var i = 1; i <= 16; i++) { - var bytes = new Array(i).join('.').split('.').map(function(_, j) { - return j + 0x78; - }); - bufs.push(new Buffer(bytes)); -} - -encodings.forEach(testEncoding); - -console.log('ok'); - -function testEncoding(encoding) { - bufs.forEach(function(buf) { - testBuf(encoding, buf); - }); -} - -function testBuf(encoding, buf) { - console.error('# %s', encoding, buf); - - // write one byte at a time. - var s = new SD(encoding); - var res1 = ''; - for (var i = 0; i < buf.length; i++) { - res1 += s.write(buf.slice(i, i + 1)); - } - res1 += s.end(); - - // write the whole buffer at once. - var res2 = ''; - var s = new SD(encoding); - res2 += s.write(buf); - res2 += s.end(); - - // .toString() on the buffer - var res3 = buf.toString(encoding); - - console.log('expect=%j', res3); - assert.equal(res1, res3, 'one byte at a time should match toString'); - assert.equal(res2, res3, 'all bytes at once should match toString'); -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js deleted file mode 100644 index 7f69f7ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js +++ /dev/null @@ -1,163 +0,0 @@ -// 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 common = require('../common'); -var assert = require('assert'); -var StringDecoder = require('../../').StringDecoder; -var decoder = new StringDecoder('utf8'); - - - -var buffer = new Buffer('$'); -assert.deepEqual('$', decoder.write(buffer)); - -buffer = new Buffer('¢'); -assert.deepEqual('', decoder.write(buffer.slice(0, 1))); -assert.deepEqual('¢', decoder.write(buffer.slice(1, 2))); - -buffer = new Buffer('€'); -assert.deepEqual('', decoder.write(buffer.slice(0, 1))); -assert.deepEqual('', decoder.write(buffer.slice(1, 2))); -assert.deepEqual('€', decoder.write(buffer.slice(2, 3))); - -buffer = new Buffer([0xF0, 0xA4, 0xAD, 0xA2]); -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); -s += decoder.write(buffer.slice(2, 3)); -s += decoder.write(buffer.slice(3, 4)); -assert.ok(s.length > 0); - -// CESU-8 -buffer = new Buffer('EDA0BDEDB18D', 'hex'); // THUMBS UP SIGN (in CESU-8) -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); -s += decoder.write(buffer.slice(2, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 4)); -s += decoder.write(buffer.slice(4, 5)); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 2)); -s += decoder.write(buffer.slice(2, 4)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(4, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 4)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(4, 5)); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 5)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 6)); -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - - -// UCS-2 -decoder = new StringDecoder('ucs2'); -buffer = new Buffer('ab', 'ucs2'); -assert.equal(decoder.write(buffer), 'ab'); // 2 complete chars -buffer = new Buffer('abc', 'ucs2'); -assert.equal(decoder.write(buffer.slice(0, 3)), 'a'); // 'a' and first of 'b' -assert.equal(decoder.write(buffer.slice(3, 6)), 'bc'); // second of 'b' and 'c' - - -// UTF-16LE -buffer = new Buffer('3DD84DDC', 'hex'); // THUMBS UP SIGN (in CESU-8) -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(2, 3)); -s += decoder.write(buffer.slice(3, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 2)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(2, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 4)); -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - - -// A mixed ascii and non-ascii string -// Test stolen from deps/v8/test/cctest/test-strings.cc -// U+02E4 -> CB A4 -// U+0064 -> 64 -// U+12E4 -> E1 8B A4 -// U+0030 -> 30 -// U+3045 -> E3 81 85 -var expected = '\u02e4\u0064\u12e4\u0030\u3045'; -var buffer = new Buffer([0xCB, 0xA4, 0x64, 0xE1, 0x8B, 0xA4, - 0x30, 0xE3, 0x81, 0x85]); -var charLengths = [0, 0, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5]; - -// Split the buffer into 3 segments -// |----|------|-------| -// 0 i j buffer.length -// Scan through every possible 3 segment combination -// and make sure that the string is always parsed. -common.print('scanning '); -for (var j = 2; j < buffer.length; j++) { - for (var i = 1; i < j; i++) { - var decoder = new StringDecoder('utf8'); - - var sum = decoder.write(buffer.slice(0, i)); - - // just check that we've received the right amount - // after the first write - assert.equal(charLengths[i], sum.length); - - sum += decoder.write(buffer.slice(i, j)); - sum += decoder.write(buffer.slice(j, buffer.length)); - assert.equal(expected, sum); - common.print('.'); - } -} -console.log(' crayon!'); - diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json deleted file mode 100644 index c9e268d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "readable-stream", - "version": "1.0.25", - "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\nA new class of streams for Node.js\n\nThis module provides the new Stream base classes introduced in Node\nv0.10, for use in Node v0.8. You can use it to have programs that\nhave to work with node v0.8, while being forward-compatible for v0.10\nand beyond. When you drop support for v0.8, you can remove this\nmodule, and only use the native streams.\n\nThis is almost exactly the same codebase as appears in Node v0.10.\nHowever:\n\n1. The exported object is actually the Readable class. Decorating the\n native `stream` module would be global pollution.\n2. In v0.10, you can safely use `base64` as an argument to\n `setEncoding` in Readable streams. However, in v0.8, the\n StringDecoder class has no `end()` method, which is problematic for\n Base64. So, don't use that, because it'll break and be weird.\n\nOther than that, the API is the same as `require('stream')` in v0.10,\nso the API docs are reproduced below.\n\n----------\n\n Stability: 2 - Unstable\n\nA stream is an abstract interface implemented by various objects in\nNode. For example a request to an HTTP server is a stream, as is\nstdout. Streams are readable, writable, or both. All streams are\ninstances of [EventEmitter][]\n\nYou can load the Stream base classes by doing `require('stream')`.\nThere are base classes provided for Readable streams, Writable\nstreams, Duplex streams, and Transform streams.\n\n## Compatibility\n\nIn earlier versions of Node, the Readable stream interface was\nsimpler, but also less powerful and less useful.\n\n* Rather than waiting for you to call the `read()` method, `'data'`\n events would start emitting immediately. If you needed to do some\n I/O to decide how to handle data, then you had to store the chunks\n in some kind of buffer so that they would not be lost.\n* The `pause()` method was advisory, rather than guaranteed. This\n meant that you still had to be prepared to receive `'data'` events\n even when the stream was in a paused state.\n\nIn Node v0.10, the Readable class described below was added. For\nbackwards compatibility with older Node programs, Readable streams\nswitch into \"old mode\" when a `'data'` event handler is added, or when\nthe `pause()` or `resume()` methods are called. The effect is that,\neven if you are not using the new `read()` method and `'readable'`\nevent, you no longer have to worry about losing `'data'` chunks.\n\nMost programs will continue to function normally. However, this\nintroduces an edge case in the following conditions:\n\n* No `'data'` event handler is added.\n* The `pause()` and `resume()` methods are never called.\n\nFor example, consider the following code:\n\n```javascript\n// WARNING! BROKEN!\nnet.createServer(function(socket) {\n\n // we add an 'end' method, but never consume the data\n socket.on('end', function() {\n // It will never get here.\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n}).listen(1337);\n```\n\nIn versions of node prior to v0.10, the incoming message data would be\nsimply discarded. However, in Node v0.10 and beyond, the socket will\nremain paused forever.\n\nThe workaround in this situation is to call the `resume()` method to\ntrigger \"old mode\" behavior:\n\n```javascript\n// Workaround\nnet.createServer(function(socket) {\n\n socket.on('end', function() {\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n // start the flow of data, discarding it.\n socket.resume();\n\n}).listen(1337);\n```\n\nIn addition to new Readable streams switching into old-mode, pre-v0.10\nstyle streams can be wrapped in a Readable class using the `wrap()`\nmethod.\n\n## Class: stream.Readable\n\n<!--type=class-->\n\nA `Readable Stream` has the following methods, members, and events.\n\nNote that `stream.Readable` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nmethod. (See below.)\n\n### new stream.Readable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} The maximum number of bytes to store in\n the internal buffer before ceasing to read from the underlying\n resource. Default=16kb\n * `encoding` {String} If specified, then buffers will be decoded to\n strings using the specified encoding. Default=null\n * `objectMode` {Boolean} Whether this stream should behave\n as a stream of objects. Meaning that stream.read(n) returns\n a single value instead of a Buffer of size n\n\nIn classes that extend the Readable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### readable.\\_read(size)\n\n* `size` {Number} Number of bytes to read asynchronously\n\nNote: **This function should NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Readable\nclass methods only.\n\nAll Readable stream implementations must provide a `_read` method\nto fetch data from the underlying resource.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\nWhen data is available, put it into the read queue by calling\n`readable.push(chunk)`. If `push` returns false, then you should stop\nreading. When `_read` is called again, you should start pushing more\ndata.\n\nThe `size` argument is advisory. Implementations where a \"read\" is a\nsingle call that returns data can use this to know how much data to\nfetch. Implementations where that is not relevant, such as TCP or\nTLS, may ignore this argument, and simply provide data whenever it\nbecomes available. There is no need, for example to \"wait\" until\n`size` bytes are available before calling `stream.push(chunk)`.\n\n### readable.push(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to push into the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nNote: **This function should be called by Readable implementors, NOT\nby consumers of Readable subclasses.** The `_read()` function will not\nbe called again until at least one `push(chunk)` call is made. If no\ndata is available, then you MAY call `push('')` (an empty string) to\nallow a future `_read` call, without adding any data to the queue.\n\nThe `Readable` class works by putting data into a read queue to be\npulled out later by calling the `read()` method when the `'readable'`\nevent fires.\n\nThe `push()` method will explicitly insert some data into the read\nqueue. If it is called with `null` then it will signal the end of the\ndata.\n\nIn some cases, you may be wrapping a lower-level source which has some\nsort of pause/resume mechanism, and a data callback. In those cases,\nyou could wrap the low-level source object by doing something like\nthis:\n\n```javascript\n// source is an object with readStop() and readStart() methods,\n// and an `ondata` member that gets called when it has data, and\n// an `onend` member that gets called when the data is over.\n\nvar stream = new Readable();\n\nsource.ondata = function(chunk) {\n // if push() returns false, then we need to stop reading from source\n if (!stream.push(chunk))\n source.readStop();\n};\n\nsource.onend = function() {\n stream.push(null);\n};\n\n// _read will be called when the stream wants to pull more data in\n// the advisory size argument is ignored in this case.\nstream._read = function(n) {\n source.readStart();\n};\n```\n\n### readable.unshift(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nThis is the corollary of `readable.push(chunk)`. Rather than putting\nthe data at the *end* of the read queue, it puts it at the *front* of\nthe read queue.\n\nThis is useful in certain use-cases where a stream is being consumed\nby a parser, which needs to \"un-consume\" some data that it has\noptimistically pulled out of the source.\n\n```javascript\n// A parser for a simple data protocol.\n// The \"header\" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// Note: This can be done more simply as a Transform stream. See below.\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Readable.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\nvar parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n### readable.wrap(stream)\n\n* `stream` {Stream} An \"old style\" readable stream\n\nIf you are using an older Node library that emits `'data'` events and\nhas a `pause()` method that is advisory only, then you can use the\n`wrap()` method to create a Readable stream that uses the old stream\nas its data source.\n\nFor example:\n\n```javascript\nvar OldReader = require('./old-api-module.js').OldReader;\nvar oreader = new OldReader;\nvar Readable = require('stream').Readable;\nvar myReader = new Readable().wrap(oreader);\n\nmyReader.on('readable', function() {\n myReader.read(); // etc.\n});\n```\n\n### Event: 'readable'\n\nWhen there is data ready to be consumed, this event will fire.\n\nWhen this event emits, call the `read()` method to consume the data.\n\n### Event: 'end'\n\nEmitted when the stream has received an EOF (FIN in TCP terminology).\nIndicates that no more `'data'` events will happen. If the stream is\nalso writable, it may be possible to continue writing.\n\n### Event: 'data'\n\nThe `'data'` event emits either a `Buffer` (by default) or a string if\n`setEncoding()` was used.\n\nNote that adding a `'data'` event listener will switch the Readable\nstream into \"old mode\", where data is emitted as soon as it is\navailable, rather than waiting for you to call `read()` to consume it.\n\n### Event: 'error'\n\nEmitted if there was an error receiving data.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### readable.setEncoding(encoding)\n\nMakes the `'data'` event emit a string instead of a `Buffer`. `encoding`\ncan be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`.\n\nThe encoding can also be set by specifying an `encoding` field to the\nconstructor.\n\n### readable.read([size])\n\n* `size` {Number | null} Optional number of bytes to read.\n* Return: {Buffer | String | null}\n\nNote: **This function SHOULD be called by Readable stream users.**\n\nCall this method to consume data once the `'readable'` event is\nemitted.\n\nThe `size` argument will set a minimum number of bytes that you are\ninterested in. If not set, then the entire content of the internal\nbuffer is returned.\n\nIf there is no data to consume, or if there are fewer bytes in the\ninternal buffer than the `size` argument, then `null` is returned, and\na future `'readable'` event will be emitted when more is available.\n\nCalling `stream.read(0)` will always return `null`, and will trigger a\nrefresh of the internal buffer, but otherwise be a no-op.\n\n### readable.pipe(destination, [options])\n\n* `destination` {Writable Stream}\n* `options` {Object} Optional\n * `end` {Boolean} Default=true\n\nConnects this readable stream to `destination` WriteStream. Incoming\ndata on this stream gets written to `destination`. Properly manages\nback-pressure so that a slow destination will not be overwhelmed by a\nfast readable stream.\n\nThis function returns the `destination` stream.\n\nFor example, emulating the Unix `cat` command:\n\n process.stdin.pipe(process.stdout);\n\nBy default `end()` is called on the destination when the source stream\nemits `end`, so that `destination` is no longer writable. Pass `{ end:\nfalse }` as `options` to keep the destination stream open.\n\nThis keeps `writer` open so that \"Goodbye\" can be written at the\nend.\n\n reader.pipe(writer, { end: false });\n reader.on(\"end\", function() {\n writer.end(\"Goodbye\\n\");\n });\n\nNote that `process.stderr` and `process.stdout` are never closed until\nthe process exits, regardless of the specified options.\n\n### readable.unpipe([destination])\n\n* `destination` {Writable Stream} Optional\n\nUndo a previously established `pipe()`. If no destination is\nprovided, then all previously established pipes are removed.\n\n### readable.pause()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nCeases the flow of data. No `'data'` events are emitted while the\nstream is in a paused state.\n\n### readable.resume()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nResumes the incoming `'data'` events after a `pause()`.\n\n\n## Class: stream.Writable\n\n<!--type=class-->\n\nA `Writable` Stream has the following methods, members, and events.\n\nNote that `stream.Writable` is an abstract class designed to be\nextended with an underlying implementation of the\n`_write(chunk, encoding, cb)` method. (See below.)\n\n### new stream.Writable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} Buffer level when `write()` starts\n returning false. Default=16kb\n * `decodeStrings` {Boolean} Whether or not to decode strings into\n Buffers before passing them to `_write()`. Default=true\n\nIn classes that extend the Writable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### writable.\\_write(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be written. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. Ignore chunk is a buffer. Note that chunk will\n **always** be a buffer unless the `decodeStrings` option is\n explicitly set to `false`.\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nAll Writable stream implementations must provide a `_write` method to\nsend data to the underlying resource.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Writable\nclass methods only.\n\nCall the callback using the standard `callback(error)` pattern to\nsignal that the write completed successfully or with an error.\n\nIf the `decodeStrings` flag is set in the constructor options, then\n`chunk` may be a string rather than a Buffer, and `encoding` will\nindicate the sort of string that it is. This is to support\nimplementations that have an optimized handling for certain string\ndata encodings. If you do not explicitly set the `decodeStrings`\noption to `false`, then you can safely ignore the `encoding` argument,\nand assume that `chunk` will always be a Buffer.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n\n### writable.write(chunk, [encoding], [callback])\n\n* `chunk` {Buffer | String} Data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when this chunk is\n successfully written.\n* Returns {Boolean}\n\nWrites `chunk` to the stream. Returns `true` if the data has been\nflushed to the underlying resource. Returns `false` to indicate that\nthe buffer is full, and the data will be sent out in the future. The\n`'drain'` event will indicate when the buffer is empty again.\n\nThe specifics of when `write()` will return false, is determined by\nthe `highWaterMark` option provided to the constructor.\n\n### writable.end([chunk], [encoding], [callback])\n\n* `chunk` {Buffer | String} Optional final data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when the final chunk is\n successfully written.\n\nCall this method to signal the end of the data being written to the\nstream.\n\n### Event: 'drain'\n\nEmitted when the stream's write queue empties and it's safe to write\nwithout buffering again. Listen for it when `stream.write()` returns\n`false`.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### Event: 'finish'\n\nWhen `end()` is called and there are no more chunks to write, this\nevent is emitted.\n\n### Event: 'pipe'\n\n* `source` {Readable Stream}\n\nEmitted when the stream is passed to a readable stream's pipe method.\n\n### Event 'unpipe'\n\n* `source` {Readable Stream}\n\nEmitted when a previously established `pipe()` is removed using the\nsource Readable stream's `unpipe()` method.\n\n## Class: stream.Duplex\n\n<!--type=class-->\n\nA \"duplex\" stream is one that is both Readable and Writable, such as a\nTCP socket connection.\n\nNote that `stream.Duplex` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nand `_write(chunk, encoding, callback)` methods as you would with a Readable or\nWritable stream class.\n\nSince JavaScript doesn't have multiple prototypal inheritance, this\nclass prototypally inherits from Readable, and then parasitically from\nWritable. It is thus up to the user to implement both the lowlevel\n`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method\non extension duplex classes.\n\n### new stream.Duplex(options)\n\n* `options` {Object} Passed to both Writable and Readable\n constructors. Also has the following fields:\n * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then\n the stream will automatically end the readable side when the\n writable side ends and vice versa.\n\nIn classes that extend the Duplex class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n## Class: stream.Transform\n\nA \"transform\" stream is a duplex stream where the output is causally\nconnected in some way to the input, such as a zlib stream or a crypto\nstream.\n\nThere is no requirement that the output be the same size as the input,\nthe same number of chunks, or arrive at the same time. For example, a\nHash stream will only ever have a single chunk of output which is\nprovided when the input is ended. A zlib stream will either produce\nmuch smaller or much larger than its input.\n\nRather than implement the `_read()` and `_write()` methods, Transform\nclasses must implement the `_transform()` method, and may optionally\nalso implement the `_flush()` method. (See below.)\n\n### new stream.Transform([options])\n\n* `options` {Object} Passed to both Writable and Readable\n constructors.\n\nIn classes that extend the Transform class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### transform.\\_transform(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be transformed. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. (Ignore if `decodeStrings` chunk is a buffer.)\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Transform\nclass methods only.\n\nAll Transform stream implementations must provide a `_transform`\nmethod to accept input and produce output.\n\n`_transform` should do whatever has to be done in this specific\nTransform class, to handle the bytes being written, and pass them off\nto the readable portion of the interface. Do asynchronous I/O,\nprocess things, and so on.\n\nCall `transform.push(outputChunk)` 0 or more times to generate output\nfrom this input chunk, depending on how much data you want to output\nas a result of this chunk.\n\nCall the callback function only when the current chunk is completely\nconsumed. Note that there may or may not be output as a result of any\nparticular input chunk.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### transform.\\_flush(callback)\n\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done flushing any remaining data.\n\nNote: **This function MUST NOT be called directly.** It MAY be implemented\nby child classes, and if so, will be called by the internal Transform\nclass methods only.\n\nIn some cases, your transform operation may need to emit a bit more\ndata at the end of the stream. For example, a `Zlib` compression\nstream will store up some internal state so that it can optimally\ncompress the output. At the end, however, it needs to do the best it\ncan with what is left, so that the data will be complete.\n\nIn those cases, you can implement a `_flush` method, which will be\ncalled at the very end, after all the written data is consumed, but\nbefore emitting `end` to signal the end of the readable side. Just\nlike with `_transform`, call `transform.push(chunk)` zero or more\ntimes, as appropriate, and call `callback` when the flush operation is\ncomplete.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### Example: `SimpleProtocol` parser\n\nThe example above of a simple protocol parser can be implemented much\nmore simply by using the higher level `Transform` stream class.\n\nIn this example, rather than providing the input as an argument, it\nwould be piped into the parser, which is a more idiomatic Node stream\napproach.\n\n```javascript\nfunction SimpleProtocol(options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Transform.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Transform.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._transform = function(chunk, encoding, done) {\n if (!this._inBody) {\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n\n // now, because we got some extra data, emit this first.\n this.push(b);\n }\n } else {\n // from there on, just provide the data to our consumer as-is.\n this.push(b);\n }\n done();\n};\n\nvar parser = new SimpleProtocol();\nsource.pipe(parser)\n\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n\n## Class: stream.PassThrough\n\nThis is a trivial implementation of a `Transform` stream that simply\npasses the input bytes across to the output. Its purpose is mainly\nfor examples and testing, but there are occasionally use cases where\nit can come in handy.\n\n\n[EventEmitter]: events.html#events_class_events_eventemitter\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.25", - "dist": { - "shasum": "3d234b55fd2a25db8327618f088e50a32044df50" - }, - "_from": "readable-stream@~1.0.17", - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.25.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js deleted file mode 100644 index 27e8d8a5..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js deleted file mode 100644 index 4d1ddfc7..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,6 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js deleted file mode 100644 index 5d482f07..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js deleted file mode 100644 index e1e9efdf..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE deleted file mode 100644 index a23e08a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md deleted file mode 100644 index 389adae3..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js deleted file mode 100644 index 62391e78..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = hasKeys - -function hasKeys(source) { - return source !== null && - (typeof source === "object" || - typeof source === "function") -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js deleted file mode 100644 index 20937d19..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js +++ /dev/null @@ -1,25 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js deleted file mode 100644 index 17454ae4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js +++ /dev/null @@ -1,25 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml deleted file mode 100644 index 60d00ce1..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.8" - - "0.6" diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md deleted file mode 100644 index ab32d0ad..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md +++ /dev/null @@ -1,39 +0,0 @@ -#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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js deleted file mode 100644 index db32d458..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js +++ /dev/null @@ -1,40 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js deleted file mode 100644 index f5b24b6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js +++ /dev/null @@ -1,2 +0,0 @@ -module.exports = Object.keys || require('./shim'); - diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js deleted file mode 100644 index 74a09897..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js +++ /dev/null @@ -1,16 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json deleted file mode 100644 index 9dfda8dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "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", - "dist": { - "shasum": "28a6aae7428dd2c3a92f3d95f21335dd204e0336" - }, - "_from": "object-keys@~0.4.0", - "_resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js deleted file mode 100644 index b88421be..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js +++ /dev/null @@ -1,62 +0,0 @@ -(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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js deleted file mode 100644 index f29f065a..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js +++ /dev/null @@ -1,156 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js deleted file mode 100644 index 8b77b1fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js +++ /dev/null @@ -1,6 +0,0 @@ - -require('./foreach'); -require('./isArguments'); - -require('./shim'); - diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js deleted file mode 100644 index 62a07c2d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js +++ /dev/null @@ -1,10 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js deleted file mode 100644 index 9d932712..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js +++ /dev/null @@ -1,134 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json deleted file mode 100644 index a761197d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "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", - "dist": { - "shasum": "5e8f75d1b0d9ca976fee0f1aa88f80c7619210d5" - }, - "_from": "xtend@~2.1.1", - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js deleted file mode 100644 index 3369d796..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js +++ /dev/null @@ -1,63 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/package.json deleted file mode 100644 index 9612fee2..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "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", - "dist": { - "shasum": "48772c8b50c4955c25e7cdbe69f4220f4138178b" - }, - "_from": "through2@~0.4.0", - "_resolved": "https://registry.npmjs.org/through2/-/through2-0.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/basic-test.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/basic-test.js deleted file mode 100644 index 9d137c7f..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/basic-test.js +++ /dev/null @@ -1,334 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/test/bench.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/bench.js deleted file mode 100644 index cc10868b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/bench.js +++ /dev/null @@ -1,42 +0,0 @@ -/* -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-imagemin/node_modules/gulp-util/node_modules/through2/test/sauce.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/sauce.js deleted file mode 100644 index a6d28625..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/sauce.js +++ /dev/null @@ -1,38 +0,0 @@ -#!/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-imagemin/node_modules/gulp-util/node_modules/through2/test/test.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/test.js deleted file mode 100644 index aa9b4877..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/test/test.js +++ /dev/null @@ -1,9 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/through2/through2.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/through2.js deleted file mode 100644 index c1104848..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/through2/through2.js +++ /dev/null @@ -1,78 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/.npmignore b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/.npmignore deleted file mode 100644 index b5ef13a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.DS_Store -*.log -node_modules -build -*.node -components \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/.travis.yml b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/.travis.yml deleted file mode 100644 index 33ad9f8c..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/LICENSE b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/LICENSE deleted file mode 100755 index 4f482f9b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/README.md deleted file mode 100644 index 3f97efc5..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/README.md +++ /dev/null @@ -1,123 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/vinyl/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/index.js deleted file mode 100644 index 97f5c752..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/index.js +++ /dev/null @@ -1,128 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js deleted file mode 100644 index 3a861f22..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js deleted file mode 100644 index 2c906789..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js +++ /dev/null @@ -1,12 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js deleted file mode 100644 index 0e23782c..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js deleted file mode 100644 index 403bb30e..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(v) { - return v === null; -}; \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js deleted file mode 100644 index 9ce0929b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js +++ /dev/null @@ -1,5 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md deleted file mode 100644 index 146cb32a..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -## 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-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md deleted file mode 100644 index 8b12b6fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# 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-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js deleted file mode 100644 index e797cfe6..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js +++ /dev/null @@ -1,13 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json deleted file mode 100644 index c77c62c4..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "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", - "dist": { - "shasum": "b88f94a82cf38b8791d58046ea4029ad88ca99d1" - }, - "_from": "clone-stats@~0.0.1", - "_resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js deleted file mode 100644 index e4bb2814..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js +++ /dev/null @@ -1,36 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/package.json deleted file mode 100644 index a2a3bc40..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "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", - "dist": { - "shasum": "bca938209582ec5a49ad538a00fa1f125e513252" - }, - "_from": "vinyl@~0.2.1", - "_resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/File.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/File.js deleted file mode 100644 index 1f2a83a0..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/File.js +++ /dev/null @@ -1,540 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js deleted file mode 100644 index 7d286814..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js +++ /dev/null @@ -1,28 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js deleted file mode 100644 index fe1802c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js +++ /dev/null @@ -1,53 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js deleted file mode 100644 index 5bb1cb91..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js +++ /dev/null @@ -1,29 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/test/isNull.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/isNull.js deleted file mode 100644 index db70c013..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/isNull.js +++ /dev/null @@ -1,23 +0,0 @@ -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-imagemin/node_modules/gulp-util/node_modules/vinyl/test/isStream.js b/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/isStream.js deleted file mode 100644 index f22584c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/node_modules/vinyl/test/isStream.js +++ /dev/null @@ -1,29 +0,0 @@ -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-imagemin/node_modules/gulp-util/package.json b/node_modules/gulp-imagemin/node_modules/gulp-util/package.json deleted file mode 100644 index 0853a28d..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "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", - "dist": { - "shasum": "705a44e3624a7e44f5fdf70a3e91f3087ff83ba1" - }, - "_from": "gulp-util@~2.2.0", - "_resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.14.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/test/File.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/File.js deleted file mode 100644 index 53544075..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/File.js +++ /dev/null @@ -1,46 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/PluginError.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/PluginError.js deleted file mode 100644 index 6dc23c0c..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/PluginError.js +++ /dev/null @@ -1,70 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/beep.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/beep.js deleted file mode 100644 index e3e71073..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/beep.js +++ /dev/null @@ -1,23 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/buffer.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/buffer.js deleted file mode 100644 index 6b4de67f..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/buffer.js +++ /dev/null @@ -1,36 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/colors.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/colors.js deleted file mode 100644 index 970367e2..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/colors.js +++ /dev/null @@ -1,11 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/combine.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/combine.js deleted file mode 100644 index a54f0012..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/combine.js +++ /dev/null @@ -1,38 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/date.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/date.js deleted file mode 100644 index 21f52ee9..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/date.js +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/env.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/env.js deleted file mode 100644 index d3942940..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/env.js +++ /dev/null @@ -1,12 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/isBuffer.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/isBuffer.js deleted file mode 100644 index ad09bbf5..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/isBuffer.js +++ /dev/null @@ -1,16 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/isNull.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/isNull.js deleted file mode 100644 index 841fc46b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/isNull.js +++ /dev/null @@ -1,20 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/isStream.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/isStream.js deleted file mode 100644 index 3935324b..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/isStream.js +++ /dev/null @@ -1,16 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/linefeed.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/linefeed.js deleted file mode 100644 index 72f61ca0..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/linefeed.js +++ /dev/null @@ -1,5 +0,0 @@ -var util = require('../'); -var should = require('should'); -var path = require('path'); -require('mocha'); - diff --git a/node_modules/gulp-imagemin/node_modules/gulp-util/test/log.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/log.js deleted file mode 100644 index 71c6417a..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/log.js +++ /dev/null @@ -1,23 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/noop.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/noop.js deleted file mode 100644 index 0d75b35c..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/noop.js +++ /dev/null @@ -1,24 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/replaceExtension.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/replaceExtension.js deleted file mode 100644 index b9c65662..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/replaceExtension.js +++ /dev/null @@ -1,34 +0,0 @@ -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-imagemin/node_modules/gulp-util/test/template.js b/node_modules/gulp-imagemin/node_modules/gulp-util/test/template.js deleted file mode 100644 index 7664620a..00000000 --- a/node_modules/gulp-imagemin/node_modules/gulp-util/test/template.js +++ /dev/null @@ -1,99 +0,0 @@ -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-imagemin/node_modules/image-min/README.md b/node_modules/gulp-imagemin/node_modules/image-min/README.md deleted file mode 100644 index 3f096408..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# image-min [![Build Status](https://secure.travis-ci.org/kevva/image-min.png?branch=master)](http://travis-ci.org/kevva/image-min) - -Minify GIF, JPEG and PNG images seamlessly with Node.js. - -## Getting started - -Install with [npm](https://npmjs.org/package/image-min): `npm install image-min` - -## Examples - -`data` returns information about how much optimization was done. - -```js -var imagemin = require('image-min'); - -imagemin(img.gif, img-minified.gif, function (err, data) { - console.log('Saved ' + data.diffSize); -}); - -imagemin(img.jpg, img-minified.jpg, { progressive: true }, function (err, data) { - console.log('Saved ' + data.diffSize); -}); - -imagemin(img.png, img-minified.png, { optimizationLevel: 4 }, function (err, data) { - console.log('Saved ' + data.diffSize); -}); -``` - -## API - -### imagemin(src, dest, opts, cb) - -Optimize a `GIF`, `JPEG`, or `PNG` image by providing a `src` and `dest`. Use the -options below (optionally) to configure how your images are optimized. - -## Options - -### cache - -Type: `Boolean` -Default: `false` - -Whether to cache optimized images. - -### interlaced (GIF only) - -Type: `Boolean` -Default: `false` - -Interlace gif for progressive rendering. - -### optimizationLevel (PNG only) - -Type: `Number` -Default: `2` - -Select a optimization level between 0 and 7. - -### progressive (JPEG only) - -Type: `Boolean` -Default: `false` - -Lossless conversion to progressive. - -## Used by - -* [gulp-imagemin](https://github.com/sindresorhus/gulp-imagemin) -* [grunt-contrib-imagemin](https://github.com/gruntjs/grunt-contrib-imagemin) - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/imagemin.js b/node_modules/gulp-imagemin/node_modules/image-min/imagemin.js deleted file mode 100644 index b93d6b4e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/imagemin.js +++ /dev/null @@ -1,190 +0,0 @@ -'use strict'; - -var cache = require('cache-file'); -var endsWith = require('mout/string/endsWith'); -var filesize = require('filesize'); -var find = require('mout/array/find'); -var fs = require('fs'); -var isFunction = require('mout/lang/isFunction'); -var mkdir = require('mkdirp'); -var path = require('path'); -var spawn = require('child_process').spawn; - -/** - * Initialize `Imagemin` with options - * - * @param {String} src - * @param {String} dest - * @param {Object} opts - * @api private - */ - -function Imagemin(src, dest, opts) { - opts = opts || {}; - this.opts = opts; - this.src = src; - this.dest = dest; - this.optimizers = { - '.gif': this._optimizeGif, - '.jpg': this._optimizeJpeg, - '.jpeg': this._optimizeJpeg, - '.png': this._optimizePng - }; - this.optimizerTypes = Object.keys(this.optimizers); - this.optimizer = this._getOptimizer(this.src); -} - -/** - * Optimize GIF, JPEG, and PNG images - * - * @param {Function} cb - * @api public - */ - -Imagemin.prototype.optimize = function (cb) { - if (!cb || !isFunction(cb)) { - cb = function () {}; - } - - if (!fs.existsSync(path.dirname(this.dest))) { - mkdir.sync(path.dirname(this.dest)); - } - - if (this.opts.cache && cache.check(this.src)) { - cache.get(this.src, this.dest); - return cb(null, this._process()); - } - - if (!isFunction(this.optimizer)) { - return cb(); - } - - var self = this; - var optimizer = this.optimizer(this.src, this.dest, cb); - - optimizer.on('error', function (err) { - return cb(new Error(err)); - }); - - optimizer.stderr.on('data', function (data) { - return cb(new Error(data.toString())); - }); - - optimizer.once('close', function (code) { - if (code === 0) { - return cb(null, self._process()); - } - }); -}; - -/** - * Get the optimizer for a desired file - * - * @param {String} src - * @api private - */ - -Imagemin.prototype._getOptimizer = function (src) { - src = src.toLowerCase(); - - var ext = find(this.optimizerTypes, function (ext) { - return endsWith(src, ext); - }); - - return ext ? this.optimizers[ext] : null; -}; - -/** - * Optimize a GIF image - * - * @param {String} src - * @param {String} dest - * @api private - */ - -Imagemin.prototype._optimizeGif = function (src, dest) { - var args = ['-w']; - var gifsicle = require('gifsicle').path; - - if (this.opts.interlaced) { - args.push('--interlace'); - } - - return spawn(gifsicle, args.concat(['-o', dest, src])); -}; - -/** - * Optimize a JPEG image - * - * @param {String} src - * @param {String} dest - * @api private - */ - -Imagemin.prototype._optimizeJpeg = function (src, dest) { - var args = ['-copy', 'none', '-optimize']; - var jpegtran = require('jpegtran-bin').path; - - if (this.opts.progressive) { - args.push('-progressive'); - } - - return spawn(jpegtran, args.concat(['-outfile', dest, src])); -}; - -/** - * Optimize a PNG image - * - * @param {String} src - * @param {String} dest - * @api private - */ - -Imagemin.prototype._optimizePng = function (src, dest) { - var args = ['-strip', 'all', '-quiet']; - var optipng = require('optipng-bin').path; - - if (typeof this.opts.optimizationLevel === 'number') { - args.push('-o', this.opts.optimizationLevel); - } - - return spawn(optipng, args.concat(['-out', dest, src])); -}; - -/** - * Process optimized images - * - * @api private - */ - -Imagemin.prototype._process = function () { - var size = fs.statSync(this.src).size; - var saved = size - fs.statSync(this.dest).size; - - if (this.opts.cache && !cache.check(this.src)) { - cache.store(this.dest, this.src); - } - - var data = { - origSize: filesize(size), - origSizeRaw: size, - diffSize: filesize(saved), - diffSizeRaw: saved - }; - - return data; -}; - -/** - * Module exports - */ - -module.exports = function (src, dest, opts, cb) { - if (!cb && isFunction(opts)) { - cb = opts; - opts = {}; - } - - var imagemin = new Imagemin(src, dest, opts); - return imagemin.optimize(cb); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/.bin/gifsicle b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/.bin/gifsicle deleted file mode 120000 index a098fdb4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/.bin/gifsicle +++ /dev/null @@ -1 +0,0 @@ -../gifsicle/bin/gifsicle.js \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/.bin/jpegtran b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/.bin/jpegtran deleted file mode 120000 index 16214f3c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/.bin/jpegtran +++ /dev/null @@ -1 +0,0 @@ -../jpegtran-bin/bin/jpegtran.js \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/.bin/optipng b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/.bin/optipng deleted file mode 120000 index 1297372d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/.bin/optipng +++ /dev/null @@ -1 +0,0 @@ -../optipng-bin/bin/optipng.js \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/README.md deleted file mode 100644 index 7bae2146..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# cache-file [![Build Status](https://secure.travis-ci.org/kevva/cache-file.png?branch=master)](http://travis-ci.org/kevva/cache-file) - -Store and get files from cache with Node.js. - -## Getting started - -Install with [npm](https://npmjs.org/package/cache-file): `npm install cache-file` - -## Examples - -```js -var cache = require('cache-file'); - -// store test.jpg inside a test folder in cache -cache.store('test.jpg'); - -// get test.jpg from cache and save it as test-restored.jpg -cache.get('test.jpg', 'test-restored.jpg'); - -// check if test.jpg exists in cache -cache.check('test.jpg'); - -// get the path to test.jpg in cache -cache.path('test.jpg'); - -// remove test.jpg from cache -cache.clean('test.jpg'); -``` - -## API - -### .store(src, dest) - -Store a file inside cache. Use `dest` to specify a custom name. - -### .get(src, dest) - -Get a cached file and save it to a desired location. - -### .check(src) - -Check if a cached file exists. - -### .path(src) - -Get the path to a cached file. - -### .clean(src) - -Remove a file from cache. - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/index.js deleted file mode 100644 index b87cb782..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/index.js +++ /dev/null @@ -1,95 +0,0 @@ -'use strict'; - -var fs = require('fs'); -var hashfile = require('hash-file'); -var mkdir = require('mkdirp'); -var path = require('path'); -var rm = require('rimraf'); -var tmp = require('os').tmpdir(); - -/** - * Cache a file - * - * @param {String} src - * @param {String} dest - * @api public - */ - -module.exports.store = function (src, dest) { - var cache = dest ? path.join(tmp, hashfile(dest)) : path.join(tmp, hashfile(src)); - - if (!fs.existsSync(cache)) { - if (!fs.existsSync(path.dirname(cache))) { - mkdir.sync(path.dirname(cache)); - } - - fs.createReadStream(src).pipe(fs.createWriteStream(cache)); - } -}; - -/** - * Get a cached file - * - * @param {String} src - * @param {String} dest - * @api public - */ - -module.exports.get = function (src, dest) { - var cache = path.join(tmp, hashfile(src)); - - if (fs.existsSync(cache)) { - if (!fs.existsSync(path.dirname(dest))) { - mkdir.sync(path.dirname(dest)); - } - - fs.createReadStream(cache).pipe(fs.createWriteStream(dest)); - } -}; - -/** - * Check if a file exists in cache - * - * @param {String} src - * @api public - */ - -module.exports.check = function (src) { - var cache = path.join(tmp, hashfile(src)); - - if (fs.existsSync(cache)) { - return true; - } - - return false; -}; - -/** - * Get the path to a cached file - * - * @param {String} src - * @api public - */ - -module.exports.path = function (src) { - var cache = path.join(tmp, hashfile(src)); - - if (fs.existsSync(cache)) { - return path.resolve(cache); - } -}; - -/** - * Clean cache - * - * @param {String} src - * @api public - */ - -module.exports.clean = function (src) { - var cache = path.join(tmp, hashfile(src)); - - if (fs.existsSync(cache)) { - rm.sync(cache); - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/.bin/rimraf b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/.bin/rimraf deleted file mode 120000 index 4cd49a49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/.bin/rimraf +++ /dev/null @@ -1 +0,0 @@ -../rimraf/bin.js \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/hash-file/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/hash-file/README.md deleted file mode 100644 index 95a89599..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/hash-file/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# hash-file [![Build Status](https://secure.travis-ci.org/kevva/hash-file.png?branch=master)](http://travis-ci.org/kevva/hash-file) - -Create a hashed file name with Node.js. - -## Getting started - -Install with [npm](https://npmjs.org/package/hash-file): `npm install hash-file` - -## Examples - -```js -var hashfile = require('hash-file'); - -hashfile('test.zip'); -``` - -## API - -### hashfile(src) - -Create a hashed file name from a files content. - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/hash-file/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/hash-file/index.js deleted file mode 100644 index 52a32f25..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/hash-file/index.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var crypto = require('crypto'); -var fs = require('fs'); - -module.exports = function (src) { - var data; - - if (Buffer.isBuffer(src)) { - data = src.toString('utf8'); - } else { - data = fs.readFileSync(String(src), 'utf8'); - } - - return crypto.createHash('sha1').update(data).digest('hex'); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/hash-file/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/hash-file/package.json deleted file mode 100644 index c1364af7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/hash-file/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "hash-file", - "version": "0.1.0", - "description": "Create a hashed file name", - "keywords": [ - "file", - "hash", - "name" - ], - "homepage": "https://github.com/kevva/hash-file", - "bugs": { - "url": "https://github.com/kevva/hash-file/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/kevva/hash-file.git" - }, - "scripts": { - "test": "mocha --reporter list" - }, - "main": "index.js", - "files": [ - "index.js" - ], - "devDependencies": { - "mocha": "~1.17.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "readme": "# hash-file [![Build Status](https://secure.travis-ci.org/kevva/hash-file.png?branch=master)](http://travis-ci.org/kevva/hash-file)\n\nCreate a hashed file name with Node.js.\n\n## Getting started\n\nInstall with [npm](https://npmjs.org/package/hash-file): `npm install hash-file`\n\n## Examples\n\n```js\nvar hashfile = require('hash-file');\n\nhashfile('test.zip');\n```\n\n## API\n\n### hashfile(src)\n\nCreate a hashed file name from a files content.\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com)\n", - "readmeFilename": "README.md", - "_id": "hash-file@0.1.0", - "dist": { - "shasum": "3bbce661e2589c56aeae6c3f06738071e9704618" - }, - "_from": "hash-file@~0.1.0", - "_resolved": "https://registry.npmjs.org/hash-file/-/hash-file-0.1.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/AUTHORS b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/AUTHORS deleted file mode 100644 index 247b7543..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/AUTHORS +++ /dev/null @@ -1,6 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/LICENSE deleted file mode 100644 index 05a40109..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/README.md deleted file mode 100644 index cd123b65..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/README.md +++ /dev/null @@ -1,30 +0,0 @@ -`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-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/bin.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/bin.js deleted file mode 100755 index 29bfa8a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/bin.js +++ /dev/null @@ -1,33 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/package.json deleted file mode 100644 index 749964b9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "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", - "dist": { - "shasum": "7ada6a6d39b2301af3c8fe7b936c2e46e7c4463d" - }, - "_from": "rimraf@~2.2.2", - "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/rimraf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/rimraf.js deleted file mode 100644 index ce62051f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/rimraf.js +++ /dev/null @@ -1,178 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/run.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/run.sh deleted file mode 100644 index 598f0163..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/setup.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/setup.sh deleted file mode 100644 index 2602e631..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/setup.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/test-async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/test-async.js deleted file mode 100644 index 9c2e0b7b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/test-async.js +++ /dev/null @@ -1,5 +0,0 @@ -var rimraf = require("../rimraf") - , path = require("path") -rimraf(path.join(__dirname, "target"), function (er) { - if (er) throw er -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/test-sync.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/test-sync.js deleted file mode 100644 index eb71f104..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/node_modules/rimraf/test/test-sync.js +++ /dev/null @@ -1,3 +0,0 @@ -var rimraf = require("../rimraf") - , path = require("path") -rimraf.sync(path.join(__dirname, "target")) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/package.json deleted file mode 100644 index f3fc68ad..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/cache-file/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "cache-file", - "version": "0.1.4", - "description": "Store and get files from cache", - "keywords": [ - "cache", - "store" - ], - "homepage": "https://github.com/kevva/cache-file", - "bugs": { - "url": "https://github.com/kevva/cache-file/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/kevva/cache-file.git" - }, - "scripts": { - "test": "mocha --reporter list" - }, - "main": "index.js", - "files": [ - "index.js" - ], - "dependencies": { - "hash-file": "~0.1.0", - "mkdirp": "~0.3.5", - "rimraf": "~2.2.2" - }, - "devDependencies": { - "mocha": "~1.12.0", - "each-async": "~0.1.1" - }, - "engines": { - "node": ">=0.10.0" - }, - "readme": "# cache-file [![Build Status](https://secure.travis-ci.org/kevva/cache-file.png?branch=master)](http://travis-ci.org/kevva/cache-file)\n\nStore and get files from cache with Node.js.\n\n## Getting started\n\nInstall with [npm](https://npmjs.org/package/cache-file): `npm install cache-file`\n\n## Examples\n\n```js\nvar cache = require('cache-file');\n\n// store test.jpg inside a test folder in cache\ncache.store('test.jpg');\n\n// get test.jpg from cache and save it as test-restored.jpg\ncache.get('test.jpg', 'test-restored.jpg');\n\n// check if test.jpg exists in cache\ncache.check('test.jpg');\n\n// get the path to test.jpg in cache\ncache.path('test.jpg');\n\n// remove test.jpg from cache\ncache.clean('test.jpg');\n```\n\n## API\n\n### .store(src, dest)\n\nStore a file inside cache. Use `dest` to specify a custom name.\n\n### .get(src, dest)\n\nGet a cached file and save it to a desired location.\n\n### .check(src)\n\nCheck if a cached file exists.\n\n### .path(src)\n\nGet the path to a cached file.\n\n### .clean(src)\n\nRemove a file from cache.\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com)\n", - "readmeFilename": "README.md", - "_id": "cache-file@0.1.4", - "dist": { - "shasum": "532cb94bbc700b6496007ddd330539115b8937f7" - }, - "_from": "cache-file@~0.1.1", - "_resolved": "https://registry.npmjs.org/cache-file/-/cache-file-0.1.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/bin/gifsicle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/bin/gifsicle.js deleted file mode 100755 index 16935475..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/bin/gifsicle.js +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -var binPath = require('../lib/gifsicle').path; -var spawn = require('child_process').spawn; - -spawn(binPath, process.argv.slice(2), { stdio: 'inherit' }) - .on('exit', process.exit); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/lib/check.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/lib/check.js deleted file mode 100644 index 725e38af..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/lib/check.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var bin = require('./gifsicle').bin; -var chalk = require('chalk'); - -bin.check(function (w) { - if (!w) { - console.log(chalk.red('✗ pre-build test failed, compiling from source...')); - - if (process.platform === 'win32') { - throw new Error('building is not supported on ' + process.platform); - } - - return bin.build(function (err) { - if (err) { - return console.log(chalk.red('✗ ' + err.message)); - } - - console.log(chalk.green('✓ gifsicle rebuilt successfully')); - }); - } - - console.log(chalk.green('✓ pre-build test passed successfully')); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/lib/gifsicle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/lib/gifsicle.js deleted file mode 100644 index e216b386..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/lib/gifsicle.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict'; - -var Bin = require('bin-wrapper'); -var path = require('path'); - -var options = { - name: 'gifsicle', - bin: 'gifsicle', - path: path.join(__dirname, '../vendor'), - src: 'http://www.lcdf.org/gifsicle/gifsicle-1.71.tar.gz', - buildScript: './configure --disable-gifview --disable-gifdiff ' + - '--bindir="' + path.join(__dirname, '../vendor') + '" && ' + - 'make install', - platform: { - darwin: { - url: 'https://raw.github.com/yeoman/node-gifsicle/master/vendor/osx/gifsicle' - }, - linux: { - url: 'https://raw.github.com/yeoman/node-gifsicle/master/vendor/linux/x86/gifsicle', - arch: { - x64: { - url: 'https://raw.github.com/yeoman/node-gifsicle/master/vendor/linux/x64/gifsicle' - } - } - }, - freebsd: { - url: 'https://raw.github.com/yeoman/node-gifsicle/master/vendor/freebsd/x86/gifsicle', - arch: { - x64: { - url: 'https://raw.github.com/yeoman/node-gifsicle/master/vendor/freebsd/x64/gifsicle' - } - } - }, - win32: { - bin: 'gifsicle.exe', - url: 'https://raw.github.com/yeoman/node-gifsicle/master/vendor/win/x86/gifsicle.exe', - arch: { - x64: { - url: 'https://raw.github.com/yeoman/node-gifsicle/master/vendor/win/x64/gifsicle.exe' - } - } - } - } -}; -var bin = new Bin(options); - -exports.bin = bin; -exports.options = options; -exports.path = bin.path; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/README.md deleted file mode 100644 index 05419cd4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# bin-wrapper [![Build Status](https://secure.travis-ci.org/kevva/bin-wrapper.png?branch=master)](http://travis-ci.org/kevva/bin-wrapper) - -Binary wrapper for Node.js that makes your programs seamlessly available as local dependencies - -## Getting started - -Install with [npm](https://npmjs.org/package/bin-wrapper): `npm install bin-wrapper` - -## Examples - -All `platform` and `arch` specific options takes precedence over the base -options. See [test.js](test.js) for a full fleshed example. - -```js -var Bin = require('bin-wrapper'); - -var opts = { - name: 'Gifsicle', - bin: 'gifsicle', - path: 'vendor', - url: 'http://url/to/gifsicle', - src: 'http://www.lcdf.org/gifsicle/gifsicle-1.71.tar.gz', - buildScript: './configure --bindir="vendor" && make install', - platform: { - win32: { - bin: 'gifsicle.exe', - url: [ - 'http://url/to/gifsicle.exe' - 'http://url/to/gifsicle.dll' - ] - } - } -} -var bin = new Bin(opts); - -bin.check('--version', function (works) { - if (!works) { - console.log('Pre-build test failed, compiling from source'); - return bin.build(); - } - - console.log('Binary passed the test'); -}); -``` - -Get the path to your binary with `bin.path`. - -```js -console.log(bin.path); -// => path/to/vendor/gifsicle -``` - -## API - -### .check(cmd, cb) - -Check if a binary is present and working. If it isn't, download and test it by -running the binary with `cmd` and see if it exits correctly. - -### .build(cb) - -Download the source archive defined in the `src` property and build it using the -build script defined in the `buildScript` property. - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/bin-wrapper.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/bin-wrapper.js deleted file mode 100644 index ccfe9342..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/bin-wrapper.js +++ /dev/null @@ -1,222 +0,0 @@ -'use strict'; - -var download = require('download'); -var exec = require('child_process').exec; -var fs = require('fs'); -var hasOwn = require('mout/object/hasOwn'); -var isbin = require('isbin'); -var isFunction = require('mout/lang/isFunction'); -var mixIn = require('mout/object/mixIn'); -var os = require('os'); -var path = require('path'); -var ProgressBar = require('progress'); -var rm = require('rimraf'); -var spawn = require('child_process').spawn; -var which = require('which'); - -/** - * Initialize BinWrapper with options - * - * @param {Object} opts - * @api public - */ - -function BinWrapper(opts) { - opts = opts || {}; - this.opts = this._parse(opts); - this.name = this.opts.name; - this.bin = this.opts.bin; - this.dest = this.opts.path; - this.path = this._path() || path.join(this.dest, this.bin); - this.url = this.opts.url; - this.src = this.opts.src; - this.buildScript = this.opts.buildScript; - this.proxy = process.env.http_proxy || - process.env.HTTP_PROXY || - process.env.https_proxy || - process.env.HTTPS_PROXY || - null; -} - -/** - * Check if a binary is present and working - * - * @param {String|Array} cmd - * @param {Function} cb - * @api public - */ - -BinWrapper.prototype.check = function (cmd, cb) { - var self = this; - - if (!cb && isFunction(cmd)) { - cb = cmd; - cmd = ['--help']; - } - - cmd = cmd; - cmd = Array.isArray(cmd) ? cmd : [cmd]; - - if (this._path()) { - return self._test(cmd, cb); - } - - this._download(this.url, this.dest, { mode: '0755', proxy: this.proxy }) - .on('close', function () { - return self._test(cmd, cb); - }); -}; - -/** - * Download source and build a binary - * - * @param {Function} cb - * @api public - */ - -BinWrapper.prototype.build = function (cb) { - var self = this; - var tmpDir = os.tmpdir ? os.tmpdir() : os.tmpDir(); - var tmp = path.join(tmpDir, this.name); - var get = this._download(this.src, tmp, { mode: '0777', extract: true, strip: '1', proxy: this.proxy }); - - if (!cb || !isFunction(cb)) { - cb = function () {}; - } - - get.on('close', function () { - exec(self.buildScript, { cwd: tmp }, function (err) { - if (err) { - return cb(err); - } - - rm.sync(tmp); - - return cb(); - }); - }); -}; - -/** - * Download a string or an array of files - * - * @param {String|Array} src - * @param {String} dest - * @param {Object} opts - * @api private - */ - -BinWrapper.prototype._download = function (src, dest, opts) { - var get = download(src, dest, opts); - - get.on('response', function (res) { - var len = parseInt(res.headers['content-length'], 10); - var bar = new ProgressBar(' ' + path.basename(src) + ': downloading [:bar] :percent :etas', { - complete: '=', - incomplete: ' ', - width: 20, - total: len - }); - - res.on('data', function (data) { - bar.tick(data.length); - }); - - res.on('end', function () { - console.log('\n'); - }); - }); - - return get; -}; - -/** - * If a binary exists, get its path - * - * @api private - */ - -BinWrapper.prototype._path = function () { - var self = this; - - if (fs.existsSync(path.join(this.dest, this.bin))) { - return path.join(self.dest, self.bin); - } - - if (isbin(this.bin)) { - if (which.sync(self.bin).indexOf('node_modules/.bin') === -1) { - return which.sync(self.bin); - } - } - - return false; -}; - -/** - * Test if a binary is working by checking its exit code - * - * @param {Array} cmd - * @param {Function} cb - * @api private - */ - -BinWrapper.prototype._test = function (cmd, cb) { - var working; - var bin = spawn(this.path, cmd); - - bin.on('error', function () { - working = false; - return cb(working); - }); - - bin.on('exit', function (code) { - working = code === 0; - return cb(working); - }); -}; - -/** - * Parse options - * - * @param {Object} opts - * @api private - */ - -BinWrapper.prototype._parse = function (opts) { - opts.platform = opts.platform || {}; - opts.arch = opts.arch || {}; - - var platform = process.platform; - var arch = process.arch === 'x64' ? 'x64' : process.arch === 'arm' ? 'arm' : 'x86'; - var required = [ - 'bin', - 'name', - 'path', - 'url' - ]; - - if (hasOwn(opts.platform, [platform])) { - opts = mixIn(opts, opts.platform[platform]); - } - - if (hasOwn(opts.arch, [arch])) { - opts = mixIn(opts, opts.arch[arch]); - } - - required.forEach(function (val) { - if (!hasOwn(opts, val)) { - throw new Error(val + ' option is required'); - } - }); - - delete opts.platform; - delete opts.arch; - - return opts; -}; - -/** - * Module exports - */ - -module.exports = BinWrapper; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/.bin/rimraf b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/.bin/rimraf deleted file mode 120000 index 4cd49a49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/.bin/rimraf +++ /dev/null @@ -1 +0,0 @@ -../rimraf/bin.js \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/.bin/which b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/.bin/which deleted file mode 120000 index f62471c8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/.bin/which +++ /dev/null @@ -1 +0,0 @@ -../which/bin/which \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/README.md deleted file mode 100644 index f57b2f41..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# download [![Build Status](https://secure.travis-ci.org/kevva/download.png?branch=master)](http://travis-ci.org/kevva/download) - -Download and extract files effortlessly in Node.js. - -## Getting started - -Install with [npm](https://npmjs.org/package/download): `npm install download` - -## Examples - -If you're fetching an archive you can set `extract: true` in options and -it'll extract it for you. - -```js -var download = require('download'); - -// download and extract `foo.tar.gz` into `bar/` -download('foo.tar.gz', 'bar', { extract: true }); - -// download and save `foo.exe` into `bar/foo.exe` with mode `0755` -download('foo.exe', 'bar', { mode: '0755' }); - -// download and save `foo.zip` into `bar/foobar.zip` -download({ url: 'foo.zip', name: 'foobar.zip' }, 'bar'); - -// download and save an array of files in `bar/` -var files = ['foo.jpg', 'bar.jpg', 'cat.jpg']; -download(files, 'bar'); - -// download, save and rename an array of files in `bar/` -var files = [{ - url: 'foo.jpg', - name: 'foobar.jpg' -}, { - url: 'cat.jpg', - name: 'dog.jpg' -}]; -download(files, 'bar'); -``` - -## API - -### download(url, dest, opts) - -Download a file or an array of files to a given destination. Returns an EventEmitter -that emits the following possible events: - -* `response` — Relayed when the underlying `http.ClientRequest` emits the same -event. Listeners called with a `http.IncomingMessage` instance. -* `data` — Relayed when the underlying `http.IncomingMessage` emits the same -event. Listeners called with a `Buffer` instance. -* `error` — Relayed when the underlying `http.ClientRequest` emits the same event -or when the response status code is not in the 200s. Listeners called with an -`Error` instance (in the first case) or the response status code. -* `close` — Relayed when the underlying `stream.Duplex` emits the same event. - -## Options - -You can define options accepted by the [request](https://github.com/mikeal/request/) module besides from the options below. - -### extract - -Type: `Boolean` -Default: `false` - -If set to `true`, try extracting the file using [decompress](https://github.com/kevva/decompress/). - -### mode - -Type: `String` -Default: `undefined` - -Set mode on the downloaded files. - -### strip - -Type: `Number` -Default: `0` - -Equivalent to `--strip-components` for tar. - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/download.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/download.js deleted file mode 100644 index 4b9c05e2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/download.js +++ /dev/null @@ -1,100 +0,0 @@ -'use strict'; - -var decompress = require('decompress'); -var eachAsync = require('each-async'); -var fs = require('fs'); -var mkdir = require('mkdirp'); -var path = require('path'); -var request = require('request'); -var through = require('through2'); - -/** - * Download a file to a given destination - * - * Options: - * - * - `extract` Try extracting the file - * - `mode` Set mode on the downloaded files - * - `strip` Equivalent to --strip-components for tar - * - * @param {String|Array|Object} url - * @param {String} dest - * @param {Object} opts - * @api public - */ - -module.exports = function (url, dest, opts) { - url = Array.isArray(url) ? url : [url]; - opts = opts || {}; - - var stream = through(); - var strip = opts.strip || '0'; - - eachAsync(url, function (url, index, done) { - opts.url = url; - var target = path.join(dest, path.basename(url)); - - if (url.url && url.name) { - target = path.join(dest, url.name); - opts.url = url.url; - } - - var req = request.get(opts) - .on('response', function (res) { - stream.emit('response', res); - }) - .on('data', function (data) { - stream.emit('data', data); - }) - .on('error', function (err) { - stream.emit('error', err); - }); - - req.on('response', function (res) { - var mime = res.headers['content-type']; - var status = res.statusCode; - var end; - - if (status < 200 || status >= 300) { - stream.emit('error', status); - return; - } - - if (opts.extract && decompress.canExtract(url, mime)) { - var ext; - - if (decompress.canExtract(url)) { - ext = url; - } else { - ext = mime; - } - - end = decompress.extract({ - ext: ext, - path: dest, - strip: strip - }); - } else { - if (!fs.existsSync(dest)) { - mkdir.sync(dest); - } - - end = fs.createWriteStream(target); - } - - req.pipe(end); - - end.on('close', function () { - if (!opts.extract && opts.mode) { - fs.chmodSync(target, opts.mode); - } - - done(); - }); - }); - }, function () { - stream.emit('close'); - }); - - return stream; -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/README.md deleted file mode 100644 index 4226d3f5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# decompress [![Build Status](https://secure.travis-ci.org/kevva/decompress.png?branch=master)](http://travis-ci.org/kevva/decompress) - -Easily extract `.zip`, `.tar` and `.tar.gz` archives. Based on the extract -utility in [Bower](https://github.com/bower/bower). - -## Getting started - -Install with [npm](https://npmjs.org/package/decompress): `npm install decompress` - -## Examples - -You'll only need to pass a type into `ext` and it'll figure the rest out for -you. - -```js -var decompress = require('decompress'); -var fs = require('fs'); - -var src = fs.createReadStream('foo.tar.gz'); -var dest = decompress.extract({ ext: '.tar.gz' }); - -src.pipe(dest); -``` - -## API - -### .extract(opts) - -Extract an archive using the `ext` option to determine which extractor to use. -If no `path` is specified it'll extract it to your current location. - -### .canExtract(src, mime) - -Determine if a file can be extracted or not by checking the file extension -and/or the MIME type. - -```js -decompress.canExtract('foo.zip'); -// => true - -decompress.canExtract('application/zip'); -// => true -``` - -## Options - -### `ext` - -Type: `String` -Default: `''` - -String that can be a file name, URL, MIME type etc. - -### `path` - -Type: `String` -Default: `process.cwd()` - -Path to extract the archive to. If no `path` is defined it'll extract it to your -current location. - -### strip - -Type: `Number` -Default: `0` - -Equivalent to `--strip-components` for tar. - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/decompress.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/decompress.js deleted file mode 100644 index e110d93c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/decompress.js +++ /dev/null @@ -1,168 +0,0 @@ -'use strict'; - -var AdmZip = require('adm-zip'); -var endsWith = require('mout/string/endsWith'); -var find = require('mout/array/find'); -var fs = require('fs'); -var mkdir = require('mkdirp'); -var path = require('path'); -var pipeline = require('stream-combiner'); -var rm = require('rimraf'); -var tar = require('tar'); -var tempfile = require('tempfile'); -var zlib = require('zlib'); - -/** - * Initialize Decompress with options - * - * Options: - * - * - `ext` String with file name, MIME type, etc - * - `path` Path to extract to - * - * @param {Object} opts - * @api private - */ - -function Decompress(opts) { - opts = opts || {}; - opts.strip = opts.strip || 0; - this.opts = opts; - this.path = opts.path || process.cwd(); - this.ext = opts.ext || ''; - this.strip = opts.strip >= 0 ? opts.strip : 0; - this.extractors = { - '.zip': this._extractZip, - '.tar': this._extractTar, - '.tar.gz': this._extractTarGz, - '.tgz': this._extractTarGz, - 'application/zip': this._extractZip, - 'application/x-tar': this._extractTar, - 'application/x-tgz': this._extractTarGz - }; - this.extractorTypes = Object.keys(this.extractors); - this.extractor = this._getExtractor(this.ext); -} - -/** - * Extract an archive - * - * @api public - */ - -Decompress.prototype.extract = function () { - var self = this; - var stream = this.extractor(); - - if (!fs.existsSync(this.path)) { - mkdir.sync(self.path); - } - - return stream; -}; - -/** - * Check if a file can be extracted - * - * @param {String} src - * @param {String} mime - * @api public - */ - -Decompress.prototype.canExtract = function (src, mime) { - if (this._getExtractor(src)) { - return true; - } - - if (mime && this._getExtractor(mime)) { - return true; - } - - return false; -}; - -/** - * Get the extractor for a desired file - * - * @param {String} src - * @api private - */ - -Decompress.prototype._getExtractor = function (src) { - src = src.toLowerCase(); - - var ext = find(this.extractorTypes, function (ext) { - return endsWith(src, ext); - }); - - return ext ? this.extractors[ext] : null; -}; - -/** - * Extract a zip file - * - * @api private - */ - -Decompress.prototype._extractZip = function () { - var self = this; - var tmp = tempfile('.zip'); - - var stream = fs.createWriteStream(tmp).on('close', function () { - var zip = new AdmZip(tmp); - var zipEntries = zip.getEntries(); - - zipEntries.forEach(function (entry) { - if (!entry.isDirectory) { - var entryFile = path.basename(entry.entryName.toString()); - var entryDir = path.dirname(entry.entryName.toString().split('/').slice(self.strip).join('/')); - var dest = path.join(self.path, entryDir, entryFile); - - mkdir.sync(path.dirname(dest)); - fs.writeFileSync(dest, entry.getData()); - } - }); - }); - - return stream.on('close', function () { - rm.sync(tmp); - }); -}; - -/** - * Extract a tar file - * - * @api private - */ - -Decompress.prototype._extractTar = function () { - var stream = tar.Extract(this.opts); - return stream; -}; - -/** - * Extract a tar.gz file - * - * @api private - */ - -Decompress.prototype._extractTarGz = function () { - var stream = zlib.Unzip(); - var dest = tar.Extract(this.opts); - - return pipeline(stream, dest); -}; - -/** - * Module exports - */ - -module.exports.extract = function (opts) { - var decompress = new Decompress(opts); - return decompress.extract(); -}; - -module.exports.canExtract = function (src, mime) { - var decompress = new Decompress(); - return decompress.canExtract(src, mime); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/.idea/scopes/scope_settings.xml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/.idea/scopes/scope_settings.xml deleted file mode 100644 index 0d5175ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/.idea/scopes/scope_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ -<component name="DependencyValidationManager"> - <state> - <option name="SKIP_IMPORT_STATEMENTS" value="false" /> - </state> -</component> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/MIT-LICENSE.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/MIT-LICENSE.txt deleted file mode 100644 index 14c3ee5c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/MIT-LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2012 Another-D-Mention Software and other contributors, -http://www.another-d-mention.ro/ - -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/README.md deleted file mode 100644 index 030fab8a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# ADM-ZIP for NodeJS - -ADM-ZIP is a pure JavaScript implementation for zip data compression for [NodeJS](http://nodejs.org/). - -# Installation - -With [npm](http://npmjs.org) do: - - $ npm install adm-zip - -## What is it good for? -The library allows you to: - -* decompress zip files directly to disk or in memory buffers -* compress files and store them to disk in .zip format or in compressed buffers -* update content of/add new/delete files from an existing .zip - -# Dependencies -There are no other nodeJS libraries that ADM-ZIP is dependent of - -# Examples - -## Basic usage -```javascript - - var AdmZip = require('adm-zip'); - - // reading archives - var zip = new AdmZip("./my_file.zip"); - var zipEntries = zip.getEntries(); // an array of ZipEntry records - - zipEntries.forEach(function(zipEntry) { - console.log(zipEntry.toString()); // outputs zip entries information - if (zipEntry.entryName == "my_file.txt") { - console.log(zipEntry.data.toString('utf8')); - } - }); - // outputs the content of some_folder/my_file.txt - console.log(zip.readAsText("some_folder/my_file.txt")); - // extracts the specified file to the specified location - zip.extractEntryTo(/*entry name*/"some_folder/my_file.txt", /*target path*/"/home/me/tempfolder", /*maintainEntryPath*/false, /*overwrite*/true); - // extracts everything - zip.extractAllTo(/*target path*/"/home/me/zipcontent/", /*overwrite*/true); - - - // creating archives - var zip = new AdmZip(); - - // add file directly - zip.addFile("test.txt", new Buffer("inner content of the file"), "entry comment goes here"); - // add local file - zip.addLocalFile("/home/me/some_picture.png"); - // get everything as a buffer - var willSendthis = zip.toBuffer(); - // or write everything to disk - zip.writeZip(/*target file name*/"/home/me/files.zip"); - - - // ... more examples in the wiki -``` - -For more detailed information please check out the [wiki](https://github.com/cthackers/adm-zip/wiki). - -[![build status](https://secure.travis-ci.org/cthackers/adm-zip.png)](http://travis-ci.org/cthackers/adm-zip) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/adm-zip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/adm-zip.js deleted file mode 100644 index 46595fc5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/adm-zip.js +++ /dev/null @@ -1,404 +0,0 @@ -var fs = require("fs"), - pth = require("path"); - -fs.existsSync = fs.existsSync || pth.existsSync; - -var ZipEntry = require("./zipEntry"), - ZipFile = require("./zipFile"), - Utils = require("./util"); - -module.exports = function(/*String*/input) { - var _zip = undefined, - _filename = ""; - - if (input && typeof input === "string") { // load zip file - if (fs.existsSync(input)) { - _filename = input; - _zip = new ZipFile(input, Utils.Constants.FILE); - } else { - throw Utils.Errors.INVALID_FILENAME; - } - } else if(input && Buffer.isBuffer(input)) { // load buffer - _zip = new ZipFile(input, Utils.Constants.BUFFER); - } else { // create new zip file - _zip = new ZipFile(null, Utils.Constants.NONE); - } - - function getEntry(/*Object*/entry) { - if (entry && _zip) { - var item; - // If entry was given as a file name - if (typeof entry === "string") - item = _zip.getEntry(entry); - // if entry was given as a ZipEntry object - if (typeof entry === "object" && entry.entryName != undefined && entry.header != undefined) - item = _zip.getEntry(entry.entryName); - - if (item) { - return item; - } - } - return null; - } - - return { - /** - * Extracts the given entry from the archive and returns the content as a Buffer object - * @param entry ZipEntry object or String with the full path of the entry - * - * @return Buffer or Null in case of error - */ - readFile : function(/*Object*/entry) { - var item = getEntry(entry); - return item && item.getData() || null; - }, - - /** - * Asynchronous readFile - * @param entry ZipEntry object or String with the full path of the entry - * @param callback - * - * @return Buffer or Null in case of error - */ - readFileAsync : function(/*Object*/entry, /*Function*/callback) { - var item = getEntry(entry); - if (item) { - item.getDataAsync(callback); - } else { - callback(null,"getEntry failed for:" + entry) - } - }, - - /** - * Extracts the given entry from the archive and returns the content as plain text in the given encoding - * @param entry ZipEntry object or String with the full path of the entry - * @param encoding Optional. If no encoding is specified utf8 is used - * - * @return String - */ - readAsText : function(/*Object*/entry, /*String - Optional*/encoding) { - var item = getEntry(entry); - if (item) { - var data = item.getData(); - if (data && data.length) { - return data.toString(encoding || "utf8"); - } - } - return ""; - }, - - /** - * Asynchronous readAsText - * @param entry ZipEntry object or String with the full path of the entry - * @param callback - * @param encoding Optional. If no encoding is specified utf8 is used - * - * @return String - */ - readAsTextAsync : function(/*Object*/entry, /*Function*/callback, /*String - Optional*/encoding) { - var item = getEntry(entry); - if (item) { - item.getDataAsync(function(data) { - if (data && data.length) { - callback(data.toString(encoding || "utf8")); - } else { - callback(""); - } - }) - } else { - callback(""); - } - }, - - /** - * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory - * - * @param entry - */ - deleteFile : function(/*Object*/entry) { // @TODO: test deleteFile - var item = getEntry(entry); - if (item) { - _zip.deleteEntry(item.entryName); - } - }, - - /** - * Adds a comment to the zip. The zip must be rewritten after adding the comment. - * - * @param comment - */ - addZipComment : function(/*String*/comment) { // @TODO: test addZipComment - _zip.comment = comment; - }, - - /** - * Returns the zip comment - * - * @return String - */ - getZipComment : function() { - return _zip.comment || ''; - }, - - /** - * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment - * The comment cannot exceed 65535 characters in length - * - * @param entry - * @param comment - */ - addZipEntryComment : function(/*Object*/entry,/*String*/comment) { - var item = getEntry(entry); - if (item) { - item.comment = comment; - } - }, - - /** - * Returns the comment of the specified entry - * - * @param entry - * @return String - */ - getZipEntryComment : function(/*Object*/entry) { - var item = getEntry(entry); - if (item) { - return item.comment || ''; - } - return '' - }, - - /** - * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content - * - * @param entry - * @param content - */ - updateFile : function(/*Object*/entry, /*Buffer*/content) { - var item = getEntry(entry); - if (item) { - item.setData(content); - } - }, - - /** - * Adds a file from the disk to the archive - * - * @param localPath - */ - addLocalFile : function(/*String*/localPath, /*String*/zipPath) { - if (fs.existsSync(localPath)) { - if(zipPath){ - zipPath=zipPath.split("\\").join("/"); - if(zipPath.charAt(zipPath.length - 1) != "/"){ - zipPath += "/"; - } - }else{ - zipPath=""; - } - var p = localPath.split("\\").join("/").split("/").pop(); - - this.addFile(zipPath+p, fs.readFileSync(localPath), "", 0) - } else { - throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); - } - }, - - /** - * Adds a local directory and all its nested files and directories to the archive - * - * @param localPath - */ - addLocalFolder : function(/*String*/localPath, /*String*/zipPath) { - if(zipPath){ - zipPath=zipPath.split("\\").join("/"); - if(zipPath.charAt(zipPath.length - 1) != "/"){ - zipPath += "/"; - } - }else{ - zipPath=""; - } - localPath = localPath.split("\\").join("/"); //windows fix - if (localPath.charAt(localPath.length - 1) != "/") - localPath += "/"; - - if (fs.existsSync(localPath)) { - - var items = Utils.findFiles(localPath), - self = this; - - if (items.length) { - items.forEach(function(path) { - var p = path.split("\\").join("/").replace(localPath, ""); //windows fix - if (p.charAt(p.length - 1) !== "/") { - self.addFile(zipPath+p, fs.readFileSync(path), "", 0) - } else { - self.addFile(zipPath+p, new Buffer(0), "", 0) - } - }); - } - } else { - throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); - } - }, - - /** - * Allows you to create a entry (file or directory) in the zip file. - * If you want to create a directory the entryName must end in / and a null buffer should be provided. - * Comment and attributes are optional - * - * @param entryName - * @param content - * @param comment - * @param attr - */ - addFile : function(/*String*/entryName, /*Buffer*/content, /*String*/comment, /*Number*/attr) { - var entry = new ZipEntry(); - entry.entryName = entryName; - entry.comment = comment || ""; - entry.attr = attr || 438; //0666; - if (entry.isDirectory && content.length) { - // throw Utils.Errors.DIRECTORY_CONTENT_ERROR; - } - entry.setData(content); - _zip.setEntry(entry); - }, - - /** - * Returns an array of ZipEntry objects representing the files and folders inside the archive - * - * @return Array - */ - getEntries : function() { - if (_zip) { - return _zip.entries; - } else { - return []; - } - }, - - /** - * Returns a ZipEntry object representing the file or folder specified by ``name``. - * - * @param name - * @return ZipEntry - */ - getEntry : function(/*String*/name) { - return getEntry(name); - }, - - /** - * Extracts the given entry to the given targetPath - * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted - * - * @param entry ZipEntry object or String with the full path of the entry - * @param targetPath Target folder where to write the file - * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder - * will be created in targetPath as well. Default is TRUE - * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. - * Default is FALSE - * - * @return Boolean - */ - extractEntryTo : function(/*Object*/entry, /*String*/targetPath, /*Boolean*/maintainEntryPath, /*Boolean*/overwrite) { - overwrite = overwrite || false; - maintainEntryPath = typeof maintainEntryPath == "undefined" ? true : maintainEntryPath; - - var item = getEntry(entry); - if (!item) { - throw Utils.Errors.NO_ENTRY; - } - - var target = pth.resolve(targetPath, maintainEntryPath ? item.entryName : pth.basename(item.entryName)); - - if (item.isDirectory) { - target = pth.resolve(target, ".."); - var children = _zip.getEntryChildren(item); - children.forEach(function(child) { - if (child.isDirectory) return; - var content = child.getData(); - if (!content) { - throw Utils.Errors.CANT_EXTRACT_FILE; - } - Utils.writeFileTo(pth.resolve(targetPath, maintainEntryPath ? child.entryName : child.entryName.substr(item.entryName.length)), content, overwrite); - }); - return true; - } - - var content = item.getData(); - if (!content) throw Utils.Errors.CANT_EXTRACT_FILE; - - if (fs.existsSync(targetPath) && !overwrite) { - throw Utils.Errors.CANT_OVERRIDE; - } - Utils.writeFileTo(target, content, overwrite); - - return true; - }, - - /** - * Extracts the entire archive to the given location - * - * @param targetPath Target location - * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. - * Default is FALSE - */ - extractAllTo : function(/*String*/targetPath, /*Boolean*/overwrite) { - overwrite = overwrite || false; - if (!_zip) { - throw Utils.Errors.NO_ZIP; - } - - _zip.entries.forEach(function(entry) { - if (entry.isDirectory) { - Utils.makeDir(pth.resolve(targetPath, entry.entryName.toString())); - return; - } - var content = entry.getData(); - if (!content) { - throw Utils.Errors.CANT_EXTRACT_FILE + "2"; - } - Utils.writeFileTo(pth.resolve(targetPath, entry.entryName.toString()), content, overwrite); - }) - }, - - /** - * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip - * - * @param targetFileName - * @param callback - */ - writeZip : function(/*String*/targetFileName, /*Function*/callback) { - if (arguments.length == 1) { - if (typeof targetFileName == "function") { - callback = targetFileName; - targetFileName = ""; - } - } - - if (!targetFileName && _filename) { - targetFileName = _filename; - } - if (!targetFileName) return; - - var zipData = _zip.compressToBuffer(); - if (zipData) { - Utils.writeFileTo(targetFileName, zipData, true); - } - }, - - /** - * Returns the content of the entire zip file as a Buffer object - * - * @return Buffer - */ - toBuffer : function(/*Function*/onSuccess,/*Function*/onFail,/*Function*/onItemStart,/*Function*/onItemEnd) { - this.valueOf = 2; - if (typeof onSuccess == "function") { - _zip.toAsyncBuffer(onSuccess,onFail,onItemStart,onItemEnd); - return null; - } - return _zip.compressToBuffer() - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/entryHeader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/entryHeader.js deleted file mode 100644 index a29c70f1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/entryHeader.js +++ /dev/null @@ -1,261 +0,0 @@ -var Utils = require("../util"), - Constants = Utils.Constants; - -/* The central directory file header */ -module.exports = function () { - var _verMade = 0x0A, - _version = 0x0A, - _flags = 0, - _method = 0, - _time = 0, - _crc = 0, - _compressedSize = 0, - _size = 0, - _fnameLen = 0, - _extraLen = 0, - - _comLen = 0, - _diskStart = 0, - _inattr = 0, - _attr = 0, - _offset = 0; - - var _dataHeader = {}; - - function setTime(val) { - var val = new Date(val); - _time = (val.getFullYear() - 1980 & 0x7f) << 25 // b09-16 years from 1980 - | (val.getMonth() + 1) << 21 // b05-08 month - | val.getDay() << 16 // b00-04 hour - - // 2 bytes time - | val.getHours() << 11 // b11-15 hour - | val.getMinutes() << 5 // b05-10 minute - | val.getSeconds() >> 1; // b00-04 seconds divided by 2 - } - - setTime(+new Date()); - - return { - get made () { return _verMade; }, - set made (val) { _verMade = val; }, - - get version () { return _version; }, - set version (val) { _version = val }, - - get flags () { return _flags }, - set flags (val) { _flags = val; }, - - get method () { return _method; }, - set method (val) { _method = val; }, - - get time () { return new Date( - ((_time >> 25) & 0x7f) + 1980, - ((_time >> 21) & 0x0f) - 1, - (_time >> 16) & 0x1f, - (_time >> 11) & 0x1f, - (_time >> 5) & 0x3f, - (_time & 0x1f) << 1 - ); - }, - set time (val) { - setTime(val); - }, - - get crc () { return _crc; }, - set crc (val) { _crc = val; }, - - get compressedSize () { return _compressedSize; }, - set compressedSize (val) { _compressedSize = val; }, - - get size () { return _size; }, - set size (val) { _size = val; }, - - get fileNameLength () { return _fnameLen; }, - set fileNameLength (val) { _fnameLen = val; }, - - get extraLength () { return _extraLen }, - set extraLength (val) { _extraLen = val; }, - - get commentLength () { return _comLen }, - set commentLength (val) { _comLen = val }, - - get diskNumStart () { return _diskStart }, - set diskNumStart (val) { _diskStart = val }, - - get inAttr () { return _inattr }, - set inAttr (val) { _inattr = val }, - - get attr () { return _attr }, - set attr (val) { _attr = val }, - - get offset () { return _offset }, - set offset (val) { _offset = val }, - - get encripted () { return (_flags & 1) == 1 }, - - get entryHeaderSize () { - return Constants.CENHDR + _fnameLen + _extraLen + _comLen; - }, - - get realDataOffset () { - return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen; - }, - - get dataHeader () { - return _dataHeader; - }, - - loadDataHeaderFromBinary : function(/*Buffer*/input) { - var data = input.slice(_offset, _offset + Constants.LOCHDR); - // 30 bytes and should start with "PK\003\004" - if (data.readUInt32LE(0) != Constants.LOCSIG) { - throw Utils.Errors.INVALID_LOC; - } - _dataHeader = { - // version needed to extract - version : data.readUInt16LE(Constants.LOCVER), - // general purpose bit flag - flags : data.readUInt16LE(Constants.LOCFLG), - // compression method - method : data.readUInt16LE(Constants.LOCHOW), - // modification time (2 bytes time, 2 bytes date) - time : data.readUInt32LE(Constants.LOCTIM), - // uncompressed file crc-32 value - crc : data.readUInt32LE(Constants.LOCCRC), - // compressed size - compressedSize : data.readUInt32LE(Constants.LOCSIZ), - // uncompressed size - size : data.readUInt32LE(Constants.LOCLEN), - // filename length - fnameLen : data.readUInt16LE(Constants.LOCNAM), - // extra field length - extraLen : data.readUInt16LE(Constants.LOCEXT) - } - }, - - loadFromBinary : function(/*Buffer*/data) { - // data should be 46 bytes and start with "PK 01 02" - if (data.length != Constants.CENHDR || data.readUInt32LE(0) != Constants.CENSIG) { - throw Utils.Errors.INVALID_CEN; - } - // version made by - _verMade = data.readUInt16LE(Constants.CENVEM); - // version needed to extract - _version = data.readUInt16LE(Constants.CENVER); - // encrypt, decrypt flags - _flags = data.readUInt16LE(Constants.CENFLG); - // compression method - _method = data.readUInt16LE(Constants.CENHOW); - // modification time (2 bytes time, 2 bytes date) - _time = data.readUInt32LE(Constants.CENTIM); - // uncompressed file crc-32 value - _crc = data.readUInt32LE(Constants.CENCRC); - // compressed size - _compressedSize = data.readUInt32LE(Constants.CENSIZ); - // uncompressed size - _size = data.readUInt32LE(Constants.CENLEN); - // filename length - _fnameLen = data.readUInt16LE(Constants.CENNAM); - // extra field length - _extraLen = data.readUInt16LE(Constants.CENEXT); - // file comment length - _comLen = data.readUInt16LE(Constants.CENCOM); - // volume number start - _diskStart = data.readUInt16LE(Constants.CENDSK); - // internal file attributes - _inattr = data.readUInt16LE(Constants.CENATT); - // external file attributes - _attr = data.readUInt32LE(Constants.CENATX); - // LOC header offset - _offset = data.readUInt32LE(Constants.CENOFF); - }, - - dataHeaderToBinary : function() { - // LOC header size (30 bytes) - var data = new Buffer(Constants.LOCHDR); - // "PK\003\004" - data.writeUInt32LE(Constants.LOCSIG, 0); - // version needed to extract - data.writeUInt16LE(_version, Constants.LOCVER); - // general purpose bit flag - data.writeUInt16LE(_flags, Constants.LOCFLG); - // compression method - data.writeUInt16LE(_method, Constants.LOCHOW); - // modification time (2 bytes time, 2 bytes date) - data.writeUInt32LE(_time, Constants.LOCTIM); - // uncompressed file crc-32 value - data.writeUInt32LE(_crc, Constants.LOCCRC); - // compressed size - data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); - // uncompressed size - data.writeUInt32LE(_size, Constants.LOCLEN); - // filename length - data.writeUInt16LE(_fnameLen, Constants.LOCNAM); - // extra field length - data.writeUInt16LE(_extraLen, Constants.LOCEXT); - return data; - }, - - entryHeaderToBinary : function() { - // CEN header size (46 bytes) - var data = new Buffer(Constants.CENHDR + _fnameLen + _extraLen + _comLen); - // "PK\001\002" - data.writeUInt32LE(Constants.CENSIG, 0); - // version made by - data.writeUInt16LE(_verMade, Constants.CENVEM); - // version needed to extract - data.writeUInt16LE(_version, Constants.CENVER); - // encrypt, decrypt flags - data.writeUInt16LE(_flags, Constants.CENFLG); - // compression method - data.writeUInt16LE(_method, Constants.CENHOW); - // modification time (2 bytes time, 2 bytes date) - data.writeUInt32LE(_time, Constants.CENTIM); - // uncompressed file crc-32 value - data.writeInt32LE(_crc, Constants.CENCRC, true); - // compressed size - data.writeUInt32LE(_compressedSize, Constants.CENSIZ); - // uncompressed size - data.writeUInt32LE(_size, Constants.CENLEN); - // filename length - data.writeUInt16LE(_fnameLen, Constants.CENNAM); - // extra field length - data.writeUInt16LE(_extraLen, Constants.CENEXT); - // file comment length - data.writeUInt16LE(_comLen, Constants.CENCOM); - // volume number start - data.writeUInt16LE(_diskStart, Constants.CENDSK); - // internal file attributes - data.writeUInt16LE(_inattr, Constants.CENATT); - // external file attributes - data.writeUInt32LE(_attr, Constants.CENATX); - // LOC header offset - data.writeUInt32LE(_offset, Constants.CENOFF); - // fill all with - data.fill(0x00, Constants.CENHDR); - return data; - }, - - toString : function() { - return '{\n' + - '\t"made" : ' + _verMade + ",\n" + - '\t"version" : ' + _version + ",\n" + - '\t"flags" : ' + _flags + ",\n" + - '\t"method" : ' + Utils.methodToString(_method) + ",\n" + - '\t"time" : ' + _time + ",\n" + - '\t"crc" : 0x' + _crc.toString(16).toUpperCase() + ",\n" + - '\t"compressedSize" : ' + _compressedSize + " bytes,\n" + - '\t"size" : ' + _size + " bytes,\n" + - '\t"fileNameLength" : ' + _fnameLen + ",\n" + - '\t"extraLength" : ' + _extraLen + " bytes,\n" + - '\t"commentLength" : ' + _comLen + " bytes,\n" + - '\t"diskNumStart" : ' + _diskStart + ",\n" + - '\t"inAttr" : ' + _inattr + ",\n" + - '\t"attr" : ' + _attr + ",\n" + - '\t"offset" : ' + _offset + ",\n" + - '\t"entryHeaderSize" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + " bytes\n" + - '}'; - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/index.js deleted file mode 100644 index b8c67b96..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.EntryHeader = require("./entryHeader"); -exports.MainHeader = require("./mainHeader"); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/mainHeader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/mainHeader.js deleted file mode 100644 index 002bc8a7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/mainHeader.js +++ /dev/null @@ -1,80 +0,0 @@ -var Utils = require("../util"), - Constants = Utils.Constants; - -/* The entries in the end of central directory */ -module.exports = function () { - var _volumeEntries = 0, - _totalEntries = 0, - _size = 0, - _offset = 0, - _commentLength = 0; - - return { - get diskEntries () { return _volumeEntries }, - set diskEntries (/*Number*/val) { _volumeEntries = _totalEntries = val; }, - - get totalEntries () { return _totalEntries }, - set totalEntries (/*Number*/val) { _totalEntries = _volumeEntries = val; }, - - get size () { return _size }, - set size (/*Number*/val) { _size = val; }, - - get offset () { return _offset }, - set offset (/*Number*/val) { _offset = val; }, - - get commentLength () { return _commentLength }, - set commentLength (/*Number*/val) { _commentLength = val; }, - - get mainHeaderSize () { - return Constants.ENDHDR + _commentLength; - }, - - loadFromBinary : function(/*Buffer*/data) { - // data should be 22 bytes and start with "PK 05 06" - if (data.length != Constants.ENDHDR || data.readUInt32LE(0) != Constants.ENDSIG) - throw Utils.Errors.INVALID_END; - - // number of entries on this volume - _volumeEntries = data.readUInt16LE(Constants.ENDSUB); - // total number of entries - _totalEntries = data.readUInt16LE(Constants.ENDTOT); - // central directory size in bytes - _size = data.readUInt32LE(Constants.ENDSIZ); - // offset of first CEN header - _offset = data.readUInt32LE(Constants.ENDOFF); - // zip file comment length - _commentLength = data.readUInt16LE(Constants.ENDCOM); - }, - - toBinary : function() { - var b = new Buffer(Constants.ENDHDR + _commentLength); - // "PK 05 06" signature - b.writeUInt32LE(Constants.ENDSIG, 0); - b.writeUInt32LE(0, 4); - // number of entries on this volume - b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); - // total number of entries - b.writeUInt16LE(_totalEntries, Constants.ENDTOT); - // central directory size in bytes - b.writeUInt32LE(_size, Constants.ENDSIZ); - // offset of first CEN header - b.writeUInt32LE(_offset, Constants.ENDOFF); - // zip file comment length - b.writeUInt16LE(_commentLength, Constants.ENDCOM); - // fill comment memory with spaces so no garbage is left there - b.fill(" ", Constants.ENDHDR); - - return b; - }, - - toString : function() { - return '{\n' + - '\t"diskEntries" : ' + _volumeEntries + ",\n" + - '\t"totalEntries" : ' + _totalEntries + ",\n" + - '\t"size" : ' + _size + " bytes,\n" + - '\t"offset" : 0x' + _offset.toString(16).toUpperCase() + ",\n" + - '\t"commentLength" : 0x' + _commentLength + "\n" + - '}'; - } - } -}; \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/deflater.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/deflater.js deleted file mode 100644 index 32679434..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/deflater.js +++ /dev/null @@ -1,1578 +0,0 @@ -/* - * $Id: rawdeflate.js,v 0.5 2013/04/09 14:25:38 dankogai Exp dankogai $ - * - * GNU General Public License, version 2 (GPL-2.0) - * http://opensource.org/licenses/GPL-2.0 - * Original: - * http://www.onicos.com/staff/iz/amuse/javascript/expert/deflate.txt - */ -function JSDeflater(/*inbuff*/inbuf) { - - /* Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp> - * Version: 1.0.1 - * LastModified: Dec 25 1999 - */ - - var WSIZE = 32768, // Sliding Window size - zip_STORED_BLOCK = 0, - zip_STATIC_TREES = 1, - zip_DYN_TREES = 2, - zip_DEFAULT_LEVEL = 6, - zip_FULL_SEARCH = true, - zip_INBUFSIZ = 32768, // Input buffer size - zip_INBUF_EXTRA = 64, // Extra buffer - zip_OUTBUFSIZ = 1024 * 8, - zip_window_size = 2 * WSIZE, - MIN_MATCH = 3, - MAX_MATCH = 258, - zip_BITS = 16, - LIT_BUFSIZE = 0x2000, - zip_HASH_BITS = 13, - zip_DIST_BUFSIZE = LIT_BUFSIZE, - zip_HASH_SIZE = 1 << zip_HASH_BITS, - zip_HASH_MASK = zip_HASH_SIZE - 1, - zip_WMASK = WSIZE - 1, - zip_NIL = 0, // Tail of hash chains - zip_TOO_FAR = 4096, - zip_MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1, - zip_MAX_DIST = WSIZE - zip_MIN_LOOKAHEAD, - zip_SMALLEST = 1, - zip_MAX_BITS = 15, - zip_MAX_BL_BITS = 7, - zip_LENGTH_CODES = 29, - zip_LITERALS = 256, - zip_END_BLOCK = 256, - zip_L_CODES = zip_LITERALS + 1 + zip_LENGTH_CODES, - zip_D_CODES = 30, - zip_BL_CODES = 19, - zip_REP_3_6 = 16, - zip_REPZ_3_10 = 17, - zip_REPZ_11_138 = 18, - zip_HEAP_SIZE = 2 * zip_L_CODES + 1, - zip_H_SHIFT = parseInt((zip_HASH_BITS + MIN_MATCH - 1) / MIN_MATCH); - - var zip_free_queue, zip_qhead, zip_qtail, zip_initflag, zip_outbuf = null, zip_outcnt, zip_outoff, zip_complete, - zip_window, zip_d_buf, zip_l_buf, zip_prev, zip_bi_buf, zip_bi_valid, zip_block_start, zip_ins_h, zip_hash_head, - zip_prev_match, zip_match_available, zip_match_length, zip_prev_length, zip_strstart, zip_match_start, zip_eofile, - zip_lookahead, zip_max_chain_length, zip_max_lazy_match, zip_compr_level, zip_good_match, zip_nice_match, - zip_dyn_ltree, zip_dyn_dtree, zip_static_ltree, zip_static_dtree, zip_bl_tree, zip_l_desc, zip_d_desc, zip_bl_desc, - zip_bl_count, zip_heap, zip_heap_len, zip_heap_max, zip_depth, zip_length_code, zip_dist_code, zip_base_length, - zip_base_dist, zip_flag_buf, zip_last_lit, zip_last_dist, zip_last_flags, zip_flags, zip_flag_bit, zip_opt_len, - zip_static_len, zip_deflate_data, zip_deflate_pos; - - var zip_DeflateCT = function () { - this.fc = 0; // frequency count or bit string - this.dl = 0; // father node in Huffman tree or length of bit string - }; - - var zip_DeflateTreeDesc = function () { - this.dyn_tree = null; // the dynamic tree - this.static_tree = null; // corresponding static tree or NULL - this.extra_bits = null; // extra bits for each code or NULL - this.extra_base = 0; // base index for extra_bits - this.elems = 0; // max number of elements in the tree - this.max_length = 0; // max bit length for the codes - this.max_code = 0; // largest code with non zero frequency - }; - - /* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ - var zip_DeflateConfiguration = function (a, b, c, d) { - this.good_length = a; // reduce lazy search above this match length - this.max_lazy = b; // do not perform lazy search above this match length - this.nice_length = c; // quit search above this match length - this.max_chain = d; - }; - - var zip_DeflateBuffer = function () { - this.next = null; - this.len = 0; - this.ptr = new Array(zip_OUTBUFSIZ); - this.off = 0; - }; - - /* constant tables */ - var zip_extra_lbits = new Array( - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0); - var zip_extra_dbits = new Array( - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13); - var zip_extra_blbits = new Array( - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7); - var zip_bl_order = new Array( - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15); - var zip_configuration_table = new Array( - new zip_DeflateConfiguration(0, 0, 0, 0), - new zip_DeflateConfiguration(4, 4, 8, 4), - new zip_DeflateConfiguration(4, 5, 16, 8), - new zip_DeflateConfiguration(4, 6, 32, 32), - new zip_DeflateConfiguration(4, 4, 16, 16), - new zip_DeflateConfiguration(8, 16, 32, 32), - new zip_DeflateConfiguration(8, 16, 128, 128), - new zip_DeflateConfiguration(8, 32, 128, 256), - new zip_DeflateConfiguration(32, 128, 258, 1024), - new zip_DeflateConfiguration(32, 258, 258, 4096)); - - - /* routines (deflate) */ - - var zip_deflate_start = function (level) { - var i; - - if (!level) - level = zip_DEFAULT_LEVEL; - else if (level < 1) - level = 1; - else if (level > 9) - level = 9; - - zip_compr_level = level; - zip_initflag = false; - zip_eofile = false; - if (zip_outbuf != null) - return; - - zip_free_queue = zip_qhead = zip_qtail = null; - zip_outbuf = new Array(zip_OUTBUFSIZ); - zip_window = new Array(zip_window_size); - zip_d_buf = new Array(zip_DIST_BUFSIZE); - zip_l_buf = new Array(zip_INBUFSIZ + zip_INBUF_EXTRA); - zip_prev = new Array(1 << zip_BITS); - zip_dyn_ltree = new Array(zip_HEAP_SIZE); - for (i = 0; i < zip_HEAP_SIZE; i++) zip_dyn_ltree[i] = new zip_DeflateCT(); - zip_dyn_dtree = new Array(2 * zip_D_CODES + 1); - for (i = 0; i < 2 * zip_D_CODES + 1; i++) zip_dyn_dtree[i] = new zip_DeflateCT(); - zip_static_ltree = new Array(zip_L_CODES + 2); - for (i = 0; i < zip_L_CODES + 2; i++) zip_static_ltree[i] = new zip_DeflateCT(); - zip_static_dtree = new Array(zip_D_CODES); - for (i = 0; i < zip_D_CODES; i++) zip_static_dtree[i] = new zip_DeflateCT(); - zip_bl_tree = new Array(2 * zip_BL_CODES + 1); - for (i = 0; i < 2 * zip_BL_CODES + 1; i++) zip_bl_tree[i] = new zip_DeflateCT(); - zip_l_desc = new zip_DeflateTreeDesc(); - zip_d_desc = new zip_DeflateTreeDesc(); - zip_bl_desc = new zip_DeflateTreeDesc(); - zip_bl_count = new Array(zip_MAX_BITS + 1); - zip_heap = new Array(2 * zip_L_CODES + 1); - zip_depth = new Array(2 * zip_L_CODES + 1); - zip_length_code = new Array(MAX_MATCH - MIN_MATCH + 1); - zip_dist_code = new Array(512); - zip_base_length = new Array(zip_LENGTH_CODES); - zip_base_dist = new Array(zip_D_CODES); - zip_flag_buf = new Array(parseInt(LIT_BUFSIZE / 8)); - }; - - var zip_deflate_end = function () { - zip_free_queue = zip_qhead = zip_qtail = null; - zip_outbuf = null; - zip_window = null; - zip_d_buf = null; - zip_l_buf = null; - zip_prev = null; - zip_dyn_ltree = null; - zip_dyn_dtree = null; - zip_static_ltree = null; - zip_static_dtree = null; - zip_bl_tree = null; - zip_l_desc = null; - zip_d_desc = null; - zip_bl_desc = null; - zip_bl_count = null; - zip_heap = null; - zip_depth = null; - zip_length_code = null; - zip_dist_code = null; - zip_base_length = null; - zip_base_dist = null; - zip_flag_buf = null; - }; - - var zip_reuse_queue = function (p) { - p.next = zip_free_queue; - zip_free_queue = p; - }; - - var zip_new_queue = function () { - var p; - - if (zip_free_queue != null) { - p = zip_free_queue; - zip_free_queue = zip_free_queue.next; - } - else - p = new zip_DeflateBuffer(); - p.next = null; - p.len = p.off = 0; - - return p; - }; - - var zip_head1 = function (i) { - return zip_prev[WSIZE + i]; - }; - - var zip_head2 = function (i, val) { - return zip_prev[WSIZE + i] = val; - }; - - /* put_byte is used for the compressed output, put_ubyte for the - * uncompressed output. However unlzw() uses window for its - * suffix table instead of its output buffer, so it does not use put_ubyte - * (to be cleaned up). - */ - var zip_put_byte = function (c) { - zip_outbuf[zip_outoff + zip_outcnt++] = c; - if (zip_outoff + zip_outcnt == zip_OUTBUFSIZ) - zip_qoutbuf(); - }; - - /* Output a 16 bit value, lsb first */ - var zip_put_short = function (w) { - w &= 0xffff; - if (zip_outoff + zip_outcnt < zip_OUTBUFSIZ - 2) { - zip_outbuf[zip_outoff + zip_outcnt++] = (w & 0xff); - zip_outbuf[zip_outoff + zip_outcnt++] = (w >>> 8); - } else { - zip_put_byte(w & 0xff); - zip_put_byte(w >>> 8); - } - }; - - /* ========================================================================== - * Insert string s in the dictionary and set match_head to the previous head - * of the hash chain (the most recent string with same hash key). Return - * the previous length of the hash chain. - * IN assertion: all calls to to INSERT_STRING are made with consecutive - * input characters and the first MIN_MATCH bytes of s are valid - * (except for the last MIN_MATCH-1 bytes of the input file). - */ - var zip_INSERT_STRING = function () { - zip_ins_h = ((zip_ins_h << zip_H_SHIFT) - ^ (zip_window[zip_strstart + MIN_MATCH - 1] & 0xff)) - & zip_HASH_MASK; - zip_hash_head = zip_head1(zip_ins_h); - zip_prev[zip_strstart & zip_WMASK] = zip_hash_head; - zip_head2(zip_ins_h, zip_strstart); - }; - - /* Send a code of the given tree. c and tree must not have side effects */ - var zip_SEND_CODE = function (c, tree) { - zip_send_bits(tree[c].fc, tree[c].dl); - }; - - /* Mapping from a distance to a distance code. dist is the distance - 1 and - * must not have side effects. dist_code[256] and dist_code[257] are never - * used. - */ - var zip_D_CODE = function (dist) { - return (dist < 256 ? zip_dist_code[dist] - : zip_dist_code[256 + (dist >> 7)]) & 0xff; - }; - - /* ========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ - var zip_SMALLER = function (tree, n, m) { - return tree[n].fc < tree[m].fc || - (tree[n].fc == tree[m].fc && zip_depth[n] <= zip_depth[m]); - }; - - /* ========================================================================== - * read string data - */ - var zip_read_buff = function (buff, offset, n) { - var i; - for (i = 0; i < n && zip_deflate_pos < zip_deflate_data.length; i++) - buff[offset + i] = - zip_deflate_data[zip_deflate_pos++] & 0xff; - return i; - }; - - /* ========================================================================== - * Initialize the "longest match" routines for a new file - */ - var zip_lm_init = function () { - var j; - - /* Initialize the hash table. */ - for (j = 0; j < zip_HASH_SIZE; j++) - zip_prev[WSIZE + j] = 0; - zip_max_lazy_match = zip_configuration_table[zip_compr_level].max_lazy; - zip_good_match = zip_configuration_table[zip_compr_level].good_length; - if (!zip_FULL_SEARCH) - zip_nice_match = zip_configuration_table[zip_compr_level].nice_length; - zip_max_chain_length = zip_configuration_table[zip_compr_level].max_chain; - - zip_strstart = 0; - zip_block_start = 0; - - zip_lookahead = zip_read_buff(zip_window, 0, 2 * WSIZE); - if (zip_lookahead <= 0) { - zip_eofile = true; - zip_lookahead = 0; - return; - } - zip_eofile = false; - /* Make sure that we always have enough lookahead. This is important - * if input comes from a device such as a tty. - */ - while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) - zip_fill_window(); - - /* If lookahead < MIN_MATCH, ins_h is garbage, but this is - * not important since only literal bytes will be emitted. - */ - zip_ins_h = 0; - for (j = 0; j < MIN_MATCH - 1; j++) { - zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[j] & 0xff)) & zip_HASH_MASK; - } - }; - - /* ========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - */ - var zip_longest_match = function (cur_match) { - var chain_length = zip_max_chain_length; // max hash chain length - var scanp = zip_strstart; // current string - var matchp; // matched string - var len; // length of current match - var best_len = zip_prev_length; // best match length so far - - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - var limit = (zip_strstart > zip_MAX_DIST ? zip_strstart - zip_MAX_DIST : zip_NIL); - - var strendp = zip_strstart + MAX_MATCH; - var scan_end1 = zip_window[scanp + best_len - 1]; - var scan_end = zip_window[scanp + best_len]; - - /* Do not waste too much time if we already have a good match: */ - if (zip_prev_length >= zip_good_match) - chain_length >>= 2; - - do { - matchp = cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2: - */ - if (zip_window[matchp + best_len] != scan_end || - zip_window[matchp + best_len - 1] != scan_end1 || - zip_window[matchp] != zip_window[scanp] || - zip_window[++matchp] != zip_window[scanp + 1]) { - continue; - } - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scanp += 2; - matchp++; - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - } while (zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - scanp < strendp); - - len = MAX_MATCH - (strendp - scanp); - scanp = strendp - MAX_MATCH; - - if (len > best_len) { - zip_match_start = cur_match; - best_len = len; - if (zip_FULL_SEARCH) { - if (len >= MAX_MATCH) break; - } else { - if (len >= zip_nice_match) break; - } - - scan_end1 = zip_window[scanp + best_len - 1]; - scan_end = zip_window[scanp + best_len]; - } - } while ((cur_match = zip_prev[cur_match & zip_WMASK]) > limit - && --chain_length != 0); - - return best_len; - }; - - /* ========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead, and sets eofile if end of input file. - * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0 - * OUT assertions: at least one byte has been read, or eofile is set; - * file reads are performed for at least two bytes (required for the - * translate_eol option). - */ - var zip_fill_window = function () { - var n, m; - - // Amount of free space at the end of the window. - var more = zip_window_size - zip_lookahead - zip_strstart; - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (more == -1) { - /* Very unlikely, but possible on 16 bit machine if strstart == 0 - * and lookahead == 1 (input done one byte at time) - */ - more--; - } else if (zip_strstart >= WSIZE + zip_MAX_DIST) { - /* By the IN assertion, the window is not empty so we can't confuse - * more == 0 with more == 64K on a 16 bit machine. - */ - for (n = 0; n < WSIZE; n++) - zip_window[n] = zip_window[n + WSIZE]; - - zip_match_start -= WSIZE; - zip_strstart -= WSIZE; - /* we now have strstart >= MAX_DIST: */ - zip_block_start -= WSIZE; - - for (n = 0; n < zip_HASH_SIZE; n++) { - m = zip_head1(n); - zip_head2(n, m >= WSIZE ? m - WSIZE : zip_NIL); - } - for (n = 0; n < WSIZE; n++) { - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - m = zip_prev[n]; - zip_prev[n] = (m >= WSIZE ? m - WSIZE : zip_NIL); - } - more += WSIZE; - } - // At this point, more >= 2 - if (!zip_eofile) { - n = zip_read_buff(zip_window, zip_strstart + zip_lookahead, more); - if (n <= 0) - zip_eofile = true; - else - zip_lookahead += n; - } - }; - - /* ========================================================================== - * Processes a new input file and return its compressed length. This - * function does not perform lazy evaluationof matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ - var zip_deflate_fast = function () { - while (zip_lookahead != 0 && zip_qhead == null) { - var flush; // set if current block must be flushed - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - zip_INSERT_STRING(); - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if (zip_hash_head != zip_NIL && - zip_strstart - zip_hash_head <= zip_MAX_DIST) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - zip_match_length = zip_longest_match(zip_hash_head); - /* longest_match() sets match_start */ - if (zip_match_length > zip_lookahead) - zip_match_length = zip_lookahead; - } - if (zip_match_length >= MIN_MATCH) { - flush = zip_ct_tally(zip_strstart - zip_match_start, - zip_match_length - MIN_MATCH); - zip_lookahead -= zip_match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ - if (zip_match_length <= zip_max_lazy_match) { - zip_match_length--; // string at strstart already in hash table - do { - zip_strstart++; - zip_INSERT_STRING(); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH - * these bytes are garbage, but it does not matter since - * the next lookahead bytes will be emitted as literals. - */ - } while (--zip_match_length != 0); - zip_strstart++; - } else { - zip_strstart += zip_match_length; - zip_match_length = 0; - zip_ins_h = zip_window[zip_strstart] & 0xff; - zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[zip_strstart + 1] & 0xff)) & zip_HASH_MASK; - } - } else { - /* No match, output a literal byte */ - flush = zip_ct_tally(0, zip_window[zip_strstart] & 0xff); - zip_lookahead--; - zip_strstart++; - } - if (flush) { - zip_flush_block(0); - zip_block_start = zip_strstart; - } - - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) - zip_fill_window(); - } - }; - - var zip_deflate_better = function () { - /* Process the input block. */ - while (zip_lookahead != 0 && zip_qhead == null) { - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - zip_INSERT_STRING(); - - /* Find the longest match, discarding those <= prev_length. - */ - zip_prev_length = zip_match_length; - zip_prev_match = zip_match_start; - zip_match_length = MIN_MATCH - 1; - - if (zip_hash_head != zip_NIL && - zip_prev_length < zip_max_lazy_match && - zip_strstart - zip_hash_head <= zip_MAX_DIST) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - zip_match_length = zip_longest_match(zip_hash_head); - /* longest_match() sets match_start */ - if (zip_match_length > zip_lookahead) - zip_match_length = zip_lookahead; - - /* Ignore a length 3 match if it is too distant: */ - if (zip_match_length == MIN_MATCH && - zip_strstart - zip_match_start > zip_TOO_FAR) { - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - zip_match_length--; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if (zip_prev_length >= MIN_MATCH && - zip_match_length <= zip_prev_length) { - var flush; // set if current block must be flushed - flush = zip_ct_tally(zip_strstart - 1 - zip_prev_match, - zip_prev_length - MIN_MATCH); - - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. - */ - zip_lookahead -= zip_prev_length - 1; - zip_prev_length -= 2; - do { - zip_strstart++; - zip_INSERT_STRING(); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH - * these bytes are garbage, but it does not matter since the - * next lookahead bytes will always be emitted as literals. - */ - } while (--zip_prev_length != 0); - zip_match_available = 0; - zip_match_length = MIN_MATCH - 1; - zip_strstart++; - if (flush) { - zip_flush_block(0); - zip_block_start = zip_strstart; - } - } else if (zip_match_available != 0) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - if (zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff)) { - zip_flush_block(0); - zip_block_start = zip_strstart; - } - zip_strstart++; - zip_lookahead--; - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - zip_match_available = 1; - zip_strstart++; - zip_lookahead--; - } - - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) - zip_fill_window(); - } - }; - - var zip_init_deflate = function () { - if (zip_eofile) - return; - zip_bi_buf = 0; - zip_bi_valid = 0; - zip_ct_init(); - zip_lm_init(); - - zip_qhead = null; - zip_outcnt = 0; - zip_outoff = 0; - zip_match_available = 0; - - if (zip_compr_level <= 3) { - zip_prev_length = MIN_MATCH - 1; - zip_match_length = 0; - } - else { - zip_match_length = MIN_MATCH - 1; - zip_match_available = 0; - zip_match_available = 0; - } - - zip_complete = false; - }; - - /* ========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ - var zip_deflate_internal = function (buff, off, buff_size) { - var n; - - if (!zip_initflag) { - zip_init_deflate(); - zip_initflag = true; - if (zip_lookahead == 0) { // empty - zip_complete = true; - return 0; - } - } - - if ((n = zip_qcopy(buff, off, buff_size)) == buff_size) - return buff_size; - - if (zip_complete) - return n; - - if (zip_compr_level <= 3) // optimized for speed - zip_deflate_fast(); - else - zip_deflate_better(); - if (zip_lookahead == 0) { - if (zip_match_available != 0) - zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff); - zip_flush_block(1); - zip_complete = true; - } - return n + zip_qcopy(buff, n + off, buff_size - n); - }; - - var zip_qcopy = function (buff, off, buff_size) { - var n, i, j; - - n = 0; - while (zip_qhead != null && n < buff_size) { - i = buff_size - n; - if (i > zip_qhead.len) - i = zip_qhead.len; - for (j = 0; j < i; j++) - buff[off + n + j] = zip_qhead.ptr[zip_qhead.off + j]; - - zip_qhead.off += i; - zip_qhead.len -= i; - n += i; - if (zip_qhead.len == 0) { - var p; - p = zip_qhead; - zip_qhead = zip_qhead.next; - zip_reuse_queue(p); - } - } - - if (n == buff_size) - return n; - - if (zip_outoff < zip_outcnt) { - i = buff_size - n; - if (i > zip_outcnt - zip_outoff) - i = zip_outcnt - zip_outoff; - // System.arraycopy(outbuf, outoff, buff, off + n, i); - for (j = 0; j < i; j++) - buff[off + n + j] = zip_outbuf[zip_outoff + j]; - zip_outoff += i; - n += i; - if (zip_outcnt == zip_outoff) - zip_outcnt = zip_outoff = 0; - } - return n; - }; - - /* ========================================================================== - * Allocate the match buffer, initialize the various tables and save the - * location of the internal file attribute (ascii/binary) and method - * (DEFLATE/STORE). - */ - var zip_ct_init = function () { - var n; // iterates over tree elements - var bits; // bit counter - var length; // length value - var code; // code value - var dist; // distance index - - if (zip_static_dtree[0].dl != 0) return; // ct_init already called - - zip_l_desc.dyn_tree = zip_dyn_ltree; - zip_l_desc.static_tree = zip_static_ltree; - zip_l_desc.extra_bits = zip_extra_lbits; - zip_l_desc.extra_base = zip_LITERALS + 1; - zip_l_desc.elems = zip_L_CODES; - zip_l_desc.max_length = zip_MAX_BITS; - zip_l_desc.max_code = 0; - - zip_d_desc.dyn_tree = zip_dyn_dtree; - zip_d_desc.static_tree = zip_static_dtree; - zip_d_desc.extra_bits = zip_extra_dbits; - zip_d_desc.extra_base = 0; - zip_d_desc.elems = zip_D_CODES; - zip_d_desc.max_length = zip_MAX_BITS; - zip_d_desc.max_code = 0; - - zip_bl_desc.dyn_tree = zip_bl_tree; - zip_bl_desc.static_tree = null; - zip_bl_desc.extra_bits = zip_extra_blbits; - zip_bl_desc.extra_base = 0; - zip_bl_desc.elems = zip_BL_CODES; - zip_bl_desc.max_length = zip_MAX_BL_BITS; - zip_bl_desc.max_code = 0; - - // Initialize the mapping length (0..255) -> length code (0..28) - length = 0; - for (code = 0; code < zip_LENGTH_CODES - 1; code++) { - zip_base_length[code] = length; - for (n = 0; n < (1 << zip_extra_lbits[code]); n++) - zip_length_code[length++] = code; - } - /* Note that the length 255 (match length 258) can be represented - * in two different ways: code 284 + 5 bits or code 285, so we - * overwrite length_code[255] to use the best encoding: - */ - zip_length_code[length - 1] = code; - - /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ - dist = 0; - for (code = 0; code < 16; code++) { - zip_base_dist[code] = dist; - for (n = 0; n < (1 << zip_extra_dbits[code]); n++) { - zip_dist_code[dist++] = code; - } - } - dist >>= 7; // from now on, all distances are divided by 128 - for (; code < zip_D_CODES; code++) { - zip_base_dist[code] = dist << 7; - for (n = 0; n < (1 << (zip_extra_dbits[code] - 7)); n++) - zip_dist_code[256 + dist++] = code; - } - // Construct the codes of the static literal tree - for (bits = 0; bits <= zip_MAX_BITS; bits++) - zip_bl_count[bits] = 0; - n = 0; - while (n <= 143) { - zip_static_ltree[n++].dl = 8; - zip_bl_count[8]++; - } - while (n <= 255) { - zip_static_ltree[n++].dl = 9; - zip_bl_count[9]++; - } - while (n <= 279) { - zip_static_ltree[n++].dl = 7; - zip_bl_count[7]++; - } - while (n <= 287) { - zip_static_ltree[n++].dl = 8; - zip_bl_count[8]++; - } - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - zip_gen_codes(zip_static_ltree, zip_L_CODES + 1); - - /* The static distance tree is trivial: */ - for (n = 0; n < zip_D_CODES; n++) { - zip_static_dtree[n].dl = 5; - zip_static_dtree[n].fc = zip_bi_reverse(n, 5); - } - - // Initialize the first block of the first file: - zip_init_block(); - }; - - /* ========================================================================== - * Initialize a new block. - */ - var zip_init_block = function () { - var n; // iterates over tree elements - - // Initialize the trees. - for (n = 0; n < zip_L_CODES; n++) zip_dyn_ltree[n].fc = 0; - for (n = 0; n < zip_D_CODES; n++) zip_dyn_dtree[n].fc = 0; - for (n = 0; n < zip_BL_CODES; n++) zip_bl_tree[n].fc = 0; - - zip_dyn_ltree[zip_END_BLOCK].fc = 1; - zip_opt_len = zip_static_len = 0; - zip_last_lit = zip_last_dist = zip_last_flags = 0; - zip_flags = 0; - zip_flag_bit = 1; - }; - - /* ========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ - var zip_pqdownheap = function (tree, // the tree to restore - k) { // node to move down - var v = zip_heap[k]; - var j = k << 1; // left son of k - - while (j <= zip_heap_len) { - // Set j to the smallest of the two sons: - if (j < zip_heap_len && - zip_SMALLER(tree, zip_heap[j + 1], zip_heap[j])) - j++; - - // Exit if v is smaller than both sons - if (zip_SMALLER(tree, v, zip_heap[j])) - break; - - // Exchange v with the smallest son - zip_heap[k] = zip_heap[j]; - k = j; - - // And continue down the tree, setting j to the left son of k - j <<= 1; - } - zip_heap[k] = v; - }; - - /* ========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ - var zip_gen_bitlen = function (desc) { // the tree descriptor - var tree = desc.dyn_tree; - var extra = desc.extra_bits; - var base = desc.extra_base; - var max_code = desc.max_code; - var max_length = desc.max_length; - var stree = desc.static_tree; - var h; // heap index - var n, m; // iterate over the tree elements - var bits; // bit length - var xbits; // extra bits - var f; // frequency - var overflow = 0; // number of elements with bit length too large - - for (bits = 0; bits <= zip_MAX_BITS; bits++) - zip_bl_count[bits] = 0; - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[zip_heap[zip_heap_max]].dl = 0; // root of the heap - - for (h = zip_heap_max + 1; h < zip_HEAP_SIZE; h++) { - n = zip_heap[h]; - bits = tree[tree[n].dl].dl + 1; - if (bits > max_length) { - bits = max_length; - overflow++; - } - tree[n].dl = bits; - // We overwrite tree[n].dl which is no longer needed - - if (n > max_code) - continue; // not a leaf node - - zip_bl_count[bits]++; - xbits = 0; - if (n >= base) - xbits = extra[n - base]; - f = tree[n].fc; - zip_opt_len += f * (bits + xbits); - if (stree != null) - zip_static_len += f * (stree[n].dl + xbits); - } - if (overflow == 0) - return; - - // This happens for example on obj2 and pic of the Calgary corpus - - // Find the first bit length which could increase: - do { - bits = max_length - 1; - while (zip_bl_count[bits] == 0) - bits--; - zip_bl_count[bits]--; // move one leaf down the tree - zip_bl_count[bits + 1] += 2; // move one overflow item as its brother - zip_bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits != 0; bits--) { - n = zip_bl_count[bits]; - while (n != 0) { - m = zip_heap[--h]; - if (m > max_code) - continue; - if (tree[m].dl != bits) { - zip_opt_len += (bits - tree[m].dl) * tree[m].fc; - tree[m].fc = bits; - } - n--; - } - } - }; - - /* ========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ - var zip_gen_codes = function (tree, // the tree to decorate - max_code) { // largest code with non zero frequency - var next_code = new Array(zip_MAX_BITS + 1); // next code value for each bit length - var code = 0; // running code value - var bits; // bit index - var n; // code index - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= zip_MAX_BITS; bits++) { - code = ((code + zip_bl_count[bits - 1]) << 1); - next_code[bits] = code; - } - - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - for (n = 0; n <= max_code; n++) { - var len = tree[n].dl; - if (len == 0) - continue; - // Now reverse the bits - tree[n].fc = zip_bi_reverse(next_code[len]++, len); - } - }; - - /* ========================================================================== - * Construct one Huffman tree and assigns the code bit strings and lengths. - * Update the total bit length for the current block. - * IN assertion: the field freq is set for all tree elements. - * OUT assertions: the fields len and code are set to the optimal bit length - * and corresponding code. The length opt_len is updated; static_len is - * also updated if stree is not null. The field max_code is set. - */ - var zip_build_tree = function (desc) { // the tree descriptor - var tree = desc.dyn_tree; - var stree = desc.static_tree; - var elems = desc.elems; - var n, m; // iterate over heap elements - var max_code = -1; // largest code with non zero frequency - var node = elems; // next internal node of the tree - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - zip_heap_len = 0; - zip_heap_max = zip_HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n].fc != 0) { - zip_heap[++zip_heap_len] = max_code = n; - zip_depth[n] = 0; - } else - tree[n].dl = 0; - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (zip_heap_len < 2) { - var xnew = zip_heap[++zip_heap_len] = (max_code < 2 ? ++max_code : 0); - tree[xnew].fc = 1; - zip_depth[xnew] = 0; - zip_opt_len--; - if (stree != null) - zip_static_len -= stree[xnew].dl; - // new is 0 or 1 so it does not have extra bits - } - desc.max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = zip_heap_len >> 1; n >= 1; n--) - zip_pqdownheap(tree, n); - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - do { - n = zip_heap[zip_SMALLEST]; - zip_heap[zip_SMALLEST] = zip_heap[zip_heap_len--]; - zip_pqdownheap(tree, zip_SMALLEST); - - m = zip_heap[zip_SMALLEST]; // m = node of next least frequency - - // keep the nodes sorted by frequency - zip_heap[--zip_heap_max] = n; - zip_heap[--zip_heap_max] = m; - - // Create a new node father of n and m - tree[node].fc = tree[n].fc + tree[m].fc; - if (zip_depth[n] > zip_depth[m] + 1) - zip_depth[node] = zip_depth[n]; - else - zip_depth[node] = zip_depth[m] + 1; - tree[n].dl = tree[m].dl = node; - - // and insert the new node in the heap - zip_heap[zip_SMALLEST] = node++; - zip_pqdownheap(tree, zip_SMALLEST); - - } while (zip_heap_len >= 2); - - zip_heap[--zip_heap_max] = zip_heap[zip_SMALLEST]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - zip_gen_bitlen(desc); - - // The field len is now set, we can generate the bit codes - zip_gen_codes(tree, max_code); - }; - - /* ========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. Updates opt_len to take into account the repeat - * counts. (The contribution of the bit length codes will be added later - * during the construction of bl_tree.) - */ - var zip_scan_tree = function (tree,// the tree to be scanned - max_code) { // and its largest code of non zero frequency - var n; // iterates over all tree elements - var prevlen = -1; // last emitted length - var curlen; // length of current code - var nextlen = tree[0].dl; // length of next code - var count = 0; // repeat count of the current code - var max_count = 7; // max repeat count - var min_count = 4; // min repeat count - - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } - tree[max_code + 1].dl = 0xffff; // guard - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[n + 1].dl; - if (++count < max_count && curlen == nextlen) - continue; - else if (count < min_count) - zip_bl_tree[curlen].fc += count; - else if (curlen != 0) { - if (curlen != prevlen) - zip_bl_tree[curlen].fc++; - zip_bl_tree[zip_REP_3_6].fc++; - } else if (count <= 10) - zip_bl_tree[zip_REPZ_3_10].fc++; - else - zip_bl_tree[zip_REPZ_11_138].fc++; - count = 0; - prevlen = curlen; - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } else if (curlen == nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } - }; - - /* ========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ - var zip_send_tree = function (tree, // the tree to be scanned - max_code) { // and its largest code of non zero frequency - var n; // iterates over all tree elements - var prevlen = -1; // last emitted length - var curlen; // length of current code - var nextlen = tree[0].dl; // length of next code - var count = 0; // repeat count of the current code - var max_count = 7; // max repeat count - var min_count = 4; // min repeat count - - /* tree[max_code+1].dl = -1; */ - /* guard already set */ - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[n + 1].dl; - if (++count < max_count && curlen == nextlen) { - continue; - } else if (count < min_count) { - do { - zip_SEND_CODE(curlen, zip_bl_tree); - } while (--count != 0); - } else if (curlen != 0) { - if (curlen != prevlen) { - zip_SEND_CODE(curlen, zip_bl_tree); - count--; - } - // Assert(count >= 3 && count <= 6, " 3_6?"); - zip_SEND_CODE(zip_REP_3_6, zip_bl_tree); - zip_send_bits(count - 3, 2); - } else if (count <= 10) { - zip_SEND_CODE(zip_REPZ_3_10, zip_bl_tree); - zip_send_bits(count - 3, 3); - } else { - zip_SEND_CODE(zip_REPZ_11_138, zip_bl_tree); - zip_send_bits(count - 11, 7); - } - count = 0; - prevlen = curlen; - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } else if (curlen == nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } - }; - - /* ========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ - var zip_build_bl_tree = function () { - var max_blindex; // index of last bit length code of non zero freq - - // Determine the bit length frequencies for literal and distance trees - zip_scan_tree(zip_dyn_ltree, zip_l_desc.max_code); - zip_scan_tree(zip_dyn_dtree, zip_d_desc.max_code); - - // Build the bit length tree: - zip_build_tree(zip_bl_desc); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = zip_BL_CODES - 1; max_blindex >= 3; max_blindex--) { - if (zip_bl_tree[zip_bl_order[max_blindex]].dl != 0) break; - } - /* Update opt_len to include the bit length tree and counts */ - zip_opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - return max_blindex; - }; - - /* ========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ - var zip_send_all_trees = function (lcodes, dcodes, blcodes) { // number of codes for each tree - var rank; // index in bl_order - zip_send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt - zip_send_bits(dcodes - 1, 5); - zip_send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt - for (rank = 0; rank < blcodes; rank++) { - zip_send_bits(zip_bl_tree[zip_bl_order[rank]].dl, 3); - } - - // send the literal tree - zip_send_tree(zip_dyn_ltree, lcodes - 1); - - // send the distance tree - zip_send_tree(zip_dyn_dtree, dcodes - 1); - }; - - /* ========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ - var zip_flush_block = function (eof) { // true if this is the last block for a file - var opt_lenb, static_lenb; // opt_len and static_len in bytes - var max_blindex; // index of last bit length code of non zero freq - var stored_len; // length of input block - - stored_len = zip_strstart - zip_block_start; - zip_flag_buf[zip_last_flags] = zip_flags; // Save the flags for the last 8 items - - // Construct the literal and distance trees - zip_build_tree(zip_l_desc); - zip_build_tree(zip_d_desc); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = zip_build_bl_tree(); - - // Determine the best encoding. Compute first the block length in bytes - opt_lenb = (zip_opt_len + 3 + 7) >> 3; - static_lenb = (zip_static_len + 3 + 7) >> 3; - if (static_lenb <= opt_lenb) - opt_lenb = static_lenb; - if (stored_len + 4 <= opt_lenb // 4: two words for the lengths - && zip_block_start >= 0) { - var i; - - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - zip_send_bits((zip_STORED_BLOCK << 1) + eof, 3); - /* send block type */ - zip_bi_windup(); - /* align on byte boundary */ - zip_put_short(stored_len); - zip_put_short(~stored_len); - - // copy block - for (i = 0; i < stored_len; i++) - zip_put_byte(zip_window[zip_block_start + i]); - - } else if (static_lenb == opt_lenb) { - zip_send_bits((zip_STATIC_TREES << 1) + eof, 3); - zip_compress_block(zip_static_ltree, zip_static_dtree); - } else { - zip_send_bits((zip_DYN_TREES << 1) + eof, 3); - zip_send_all_trees(zip_l_desc.max_code + 1, - zip_d_desc.max_code + 1, - max_blindex + 1); - zip_compress_block(zip_dyn_ltree, zip_dyn_dtree); - } - - zip_init_block(); - - if (eof != 0) - zip_bi_windup(); - }; - - /* ========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ - var zip_ct_tally = function (dist, // distance of matched string - lc) { // match length-MIN_MATCH or unmatched char (if dist==0) - zip_l_buf[zip_last_lit++] = lc; - if (dist == 0) { - // lc is the unmatched char - zip_dyn_ltree[lc].fc++; - } else { - // Here, lc is the match length - MIN_MATCH - dist--; // dist = match distance - 1 - zip_dyn_ltree[zip_length_code[lc] + zip_LITERALS + 1].fc++; - zip_dyn_dtree[zip_D_CODE(dist)].fc++; - - zip_d_buf[zip_last_dist++] = dist; - zip_flags |= zip_flag_bit; - } - zip_flag_bit <<= 1; - - // Output the flags if they fill a byte - if ((zip_last_lit & 7) == 0) { - zip_flag_buf[zip_last_flags++] = zip_flags; - zip_flags = 0; - zip_flag_bit = 1; - } - // Try to guess if it is profitable to stop the current block here - if (zip_compr_level > 2 && (zip_last_lit & 0xfff) == 0) { - // Compute an upper bound for the compressed length - var out_length = zip_last_lit * 8; - var in_length = zip_strstart - zip_block_start; - var dcode; - - for (dcode = 0; dcode < zip_D_CODES; dcode++) { - out_length += zip_dyn_dtree[dcode].fc * (5 + zip_extra_dbits[dcode]); - } - out_length >>= 3; - if (zip_last_dist < parseInt(zip_last_lit / 2) && - out_length < parseInt(in_length / 2)) - return true; - } - return (zip_last_lit == LIT_BUFSIZE - 1 || - zip_last_dist == zip_DIST_BUFSIZE); - /* We avoid equality with LIT_BUFSIZE because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ - }; - - /* ========================================================================== - * Send the block data compressed using the given Huffman trees - */ - var zip_compress_block = function (ltree, // literal tree - dtree) { // distance tree - var dist; // distance of matched string - var lc; // match length or unmatched char (if dist == 0) - var lx = 0; // running index in l_buf - var dx = 0; // running index in d_buf - var fx = 0; // running index in flag_buf - var flag = 0; // current flags - var code; // the code to send - var extra; // number of extra bits to send - - if (zip_last_lit != 0) do { - if ((lx & 7) == 0) - flag = zip_flag_buf[fx++]; - lc = zip_l_buf[lx++] & 0xff; - if ((flag & 1) == 0) { - zip_SEND_CODE(lc, ltree); - /* send a literal byte */ - } else { - // Here, lc is the match length - MIN_MATCH - code = zip_length_code[lc]; - zip_SEND_CODE(code + zip_LITERALS + 1, ltree); // send the length code - extra = zip_extra_lbits[code]; - if (extra != 0) { - lc -= zip_base_length[code]; - zip_send_bits(lc, extra); // send the extra length bits - } - dist = zip_d_buf[dx++]; - // Here, dist is the match distance - 1 - code = zip_D_CODE(dist); - zip_SEND_CODE(code, dtree); // send the distance code - extra = zip_extra_dbits[code]; - if (extra != 0) { - dist -= zip_base_dist[code]; - zip_send_bits(dist, extra); // send the extra distance bits - } - } // literal or match pair ? - flag >>= 1; - } while (lx < zip_last_lit); - - zip_SEND_CODE(zip_END_BLOCK, ltree); - }; - - /* ========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ - var zip_Buf_size = 16; // bit size of bi_buf - var zip_send_bits = function (value, // value to send - length) { // number of bits - /* If not enough room in bi_buf, use (valid) bits from bi_buf and - * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) - * unused bits in value. - */ - if (zip_bi_valid > zip_Buf_size - length) { - zip_bi_buf |= (value << zip_bi_valid); - zip_put_short(zip_bi_buf); - zip_bi_buf = (value >> (zip_Buf_size - zip_bi_valid)); - zip_bi_valid += length - zip_Buf_size; - } else { - zip_bi_buf |= value << zip_bi_valid; - zip_bi_valid += length; - } - }; - - /* ========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ - var zip_bi_reverse = function (code, // the value to invert - len) { // its bit length - var res = 0; - do { - res |= code & 1; - code >>= 1; - res <<= 1; - } while (--len > 0); - return res >> 1; - }; - - /* ========================================================================== - * Write out any remaining bits in an incomplete byte. - */ - var zip_bi_windup = function () { - if (zip_bi_valid > 8) { - zip_put_short(zip_bi_buf); - } else if (zip_bi_valid > 0) { - zip_put_byte(zip_bi_buf); - } - zip_bi_buf = 0; - zip_bi_valid = 0; - }; - - var zip_qoutbuf = function () { - if (zip_outcnt != 0) { - var q, i; - q = zip_new_queue(); - if (zip_qhead == null) - zip_qhead = zip_qtail = q; - else - zip_qtail = zip_qtail.next = q; - q.len = zip_outcnt - zip_outoff; - for (i = 0; i < q.len; i++) - q.ptr[i] = zip_outbuf[zip_outoff + i]; - zip_outcnt = zip_outoff = 0; - } - }; - - function deflate(buffData, level) { - zip_deflate_data = buffData; - zip_deflate_pos = 0; - zip_deflate_start(level); - - var buff = new Array(1024), - pages = [], - totalSize = 0, - i; - - for (i = 0; i < 1024; i++) buff[i] = 0; - while ((i = zip_deflate_internal(buff, 0, buff.length)) > 0) { - var buf = new Buffer(buff.slice(0, i)); - pages.push(buf); - totalSize += buf.length; - } - - if (pages.length == 1) { - return pages[0]; - } - - var result = new Buffer(totalSize), - index = 0; - - for (i = 0; i < pages.length; i++) { - pages[i].copy(result, index); - index = index + pages[i].length - } - - return result; - } - - return { - deflate: function () { - return deflate(inbuf, 8); - } - } -} - -module.exports = function (/*Buffer*/inbuf) { - - var zlib = require("zlib"); - - return { - deflate: function () { - return new JSDeflater(inbuf).deflate(); - }, - - deflateAsync: function (/*Function*/callback) { - var tmp = zlib.createDeflateRaw({chunkSize:(parseInt(inbuf.length / 1024) + 1)*1024}), - parts = [], total = 0; - tmp.on('data', function(data) { - parts.push(data); - total += data.length; - }); - tmp.on('end', function() { - var buf = new Buffer(total), written = 0; - buf.fill(0); - - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - part.copy(buf, written); - written += part.length; - } - callback && callback(buf); - }); - tmp.end(inbuf); - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/index.js deleted file mode 100644 index ddcbba60..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.Deflater = require("./deflater"); -exports.Inflater = require("./inflater"); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/inflater.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/inflater.js deleted file mode 100644 index 59536c90..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/inflater.js +++ /dev/null @@ -1,448 +0,0 @@ -var Buffer = require("buffer").Buffer; - -function JSInflater(/*Buffer*/input) { - - var WSIZE = 0x8000, - slide = new Buffer(0x10000), - windowPos = 0, - fixedTableList = null, - fixedTableDist, - fixedLookup, - bitBuf = 0, - bitLen = 0, - method = -1, - eof = false, - copyLen = 0, - copyDist = 0, - tblList, tblDist, bitList, bitdist, - - inputPosition = 0, - - MASK_BITS = [0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff], - LENS = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], - LEXT = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99], - DISTS = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577], - DEXT = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], - BITORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; - - function HuffTable(clen, cnum, cval, blist, elist, lookupm) { - - this.status = 0; - this.root = null; - this.maxbit = 0; - - var el, f, tail, - offsets = [], - countTbl = [], - sTbl = [], - values = [], - tentry = {extra: 0, bitcnt: 0, lbase: 0, next: null}; - - tail = this.root = null; - for(var i = 0; i < 0x11; i++) { countTbl[i] = 0; sTbl[i] = 0; offsets[i] = 0; } - for(i = 0; i < 0x120; i++) values[i] = 0; - - el = cnum > 256 ? clen[256] : 16; - - var pidx = -1; - while (++pidx < cnum) countTbl[clen[pidx]]++; - - if(countTbl[0] == cnum) return; - - for(var j = 1; j <= 16; j++) if(countTbl[j] != 0) break; - var bitLen = j; - for(i = 16; i != 0; i--) if(countTbl[i] != 0) break; - var maxLen = i; - - lookupm < j && (lookupm = j); - - var dCodes = 1 << j; - for(; j < i; j++, dCodes <<= 1) - if((dCodes -= countTbl[j]) < 0) { - this.status = 2; - this.maxbit = lookupm; - return; - } - - if((dCodes -= countTbl[i]) < 0) { - this.status = 2; - this.maxbit = lookupm; - return; - } - - countTbl[i] += dCodes; - offsets[1] = j = 0; - pidx = 1; - var xp = 2; - while(--i > 0) offsets[xp++] = (j += countTbl[pidx++]); - pidx = 0; - i = 0; - do { - (j = clen[pidx++]) && (values[offsets[j]++] = i); - } while(++i < cnum); - cnum = offsets[maxLen]; - offsets[0] = i = 0; - pidx = 0; - - var level = -1, - w = sTbl[0] = 0, - cnode = null, - tblCnt = 0, - tblStack = []; - - for(; bitLen <= maxLen; bitLen++) { - var kccnt = countTbl[bitLen]; - while(kccnt-- > 0) { - while(bitLen > w + sTbl[1 + level]) { - w += sTbl[1 + level]; - level++; - tblCnt = (tblCnt = maxLen - w) > lookupm ? lookupm : tblCnt; - if((f = 1 << (j = bitLen - w)) > kccnt + 1) { - f -= kccnt + 1; - xp = bitLen; - while(++j < tblCnt) { - if((f <<= 1) <= countTbl[++xp]) break; - f -= countTbl[xp]; - } - } - if(w + j > el && w < el) j = el - w; - tblCnt = 1 << j; - sTbl[1 + level] = j; - cnode = []; - while (cnode.length < tblCnt) cnode.push({extra: 0, bitcnt: 0, lbase: 0, next: null}); - if (tail == null) { - tail = this.root = {next:null, list:null}; - } else { - tail = tail.next = {next:null, list:null} - } - tail.next = null; - tail.list = cnode; - - tblStack[level] = cnode; - - if(level > 0) { - offsets[level] = i; - tentry.bitcnt = sTbl[level]; - tentry.extra = 16 + j; - tentry.next = cnode; - j = (i & ((1 << w) - 1)) >> (w - sTbl[level]); - - tblStack[level-1][j].extra = tentry.extra; - tblStack[level-1][j].bitcnt = tentry.bitcnt; - tblStack[level-1][j].lbase = tentry.lbase; - tblStack[level-1][j].next = tentry.next; - } - } - tentry.bitcnt = bitLen - w; - if(pidx >= cnum) - tentry.extra = 99; - else if(values[pidx] < cval) { - tentry.extra = (values[pidx] < 256 ? 16 : 15); - tentry.lbase = values[pidx++]; - } else { - tentry.extra = elist[values[pidx] - cval]; - tentry.lbase = blist[values[pidx++] - cval]; - } - - f = 1 << (bitLen - w); - for(j = i >> w; j < tblCnt; j += f) { - cnode[j].extra = tentry.extra; - cnode[j].bitcnt = tentry.bitcnt; - cnode[j].lbase = tentry.lbase; - cnode[j].next = tentry.next; - } - for(j = 1 << (bitLen - 1); (i & j) != 0; j >>= 1) - i ^= j; - i ^= j; - while((i & ((1 << w) - 1)) != offsets[level]) { - w -= sTbl[level]; - level--; - } - } - } - - this.maxbit = sTbl[1]; - this.status = ((dCodes != 0 && maxLen != 1) ? 1 : 0); - } - - function addBits(n) { - while(bitLen < n) { - bitBuf |= input[inputPosition++] << bitLen; - bitLen += 8; - } - return bitBuf; - } - - function cutBits(n) { - bitLen -= n; - return bitBuf >>= n; - } - - function maskBits(n) { - while(bitLen < n) { - bitBuf |= input[inputPosition++] << bitLen; - bitLen += 8; - } - var res = bitBuf & MASK_BITS[n]; - bitBuf >>= n; - bitLen -= n; - return res; - } - - function codes(buff, off, size) { - var e, t; - if(size == 0) return 0; - - var n = 0; - for(;;) { - t = tblList.list[addBits(bitList) & MASK_BITS[bitList]]; - e = t.extra; - while(e > 16) { - if(e == 99) return -1; - cutBits(t.bitcnt); - e -= 16; - t = t.next[addBits(e) & MASK_BITS[e]]; - e = t.extra; - } - cutBits(t.bitcnt); - if(e == 16) { - windowPos &= WSIZE - 1; - buff[off + n++] = slide[windowPos++] = t.lbase; - if(n == size) return size; - continue; - } - if(e == 15) break; - - copyLen = t.lbase + maskBits(e); - t = tblDist.list[addBits(bitdist) & MASK_BITS[bitdist]]; - e = t.extra; - - while(e > 16) { - if(e == 99) return -1; - cutBits(t.bitcnt); - e -= 16; - t = t.next[addBits(e) & MASK_BITS[e]]; - e = t.extra - } - cutBits(t.bitcnt); - copyDist = windowPos - t.lbase - maskBits(e); - - while(copyLen > 0 && n < size) { - copyLen--; - copyDist &= WSIZE - 1; - windowPos &= WSIZE - 1; - buff[off + n++] = slide[windowPos++] = slide[copyDist++]; - } - - if(n == size) return size; - } - - method = -1; // done - return n; - } - - function stored(buff, off, size) { - cutBits(bitLen & 7); - var n = maskBits(0x10); - if(n != ((~maskBits(0x10)) & 0xffff)) return -1; - copyLen = n; - - n = 0; - while(copyLen > 0 && n < size) { - copyLen--; - windowPos &= WSIZE - 1; - buff[off + n++] = slide[windowPos++] = maskBits(8); - } - - if(copyLen == 0) method = -1; - return n; - } - - function fixed(buff, off, size) { - var fixed_bd = 0; - if(fixedTableList == null) { - var lengths = []; - - for(var symbol = 0; symbol < 144; symbol++) lengths[symbol] = 8; - for(; symbol < 256; symbol++) lengths[symbol] = 9; - for(; symbol < 280; symbol++) lengths[symbol] = 7; - for(; symbol < 288; symbol++) lengths[symbol] = 8; - - fixedLookup = 7; - - var htbl = new HuffTable(lengths, 288, 257, LENS, LEXT, fixedLookup); - - if(htbl.status != 0) return -1; - - fixedTableList = htbl.root; - fixedLookup = htbl.maxbit; - - for(symbol = 0; symbol < 30; symbol++) lengths[symbol] = 5; - fixed_bd = 5; - - htbl = new HuffTable(lengths, 30, 0, DISTS, DEXT, fixed_bd); - if(htbl.status > 1) { - fixedTableList = null; - return -1; - } - fixedTableDist = htbl.root; - fixed_bd = htbl.maxbit; - } - - tblList = fixedTableList; - tblDist = fixedTableDist; - bitList = fixedLookup; - bitdist = fixed_bd; - return codes(buff, off, size); - } - - function dynamic(buff, off, size) { - var ll = new Array(0x023C); - - for (var m = 0; m < 0x023C; m++) ll[m] = 0; - - var llencnt = 257 + maskBits(5), - dcodescnt = 1 + maskBits(5), - bitlencnt = 4 + maskBits(4); - - if(llencnt > 286 || dcodescnt > 30) return -1; - - for(var j = 0; j < bitlencnt; j++) ll[BITORDER[j]] = maskBits(3); - for(; j < 19; j++) ll[BITORDER[j]] = 0; - - // build decoding table for trees--single level, 7 bit lookup - bitList = 7; - var hufTable = new HuffTable(ll, 19, 19, null, null, bitList); - if(hufTable.status != 0) - return -1; // incomplete code set - - tblList = hufTable.root; - bitList = hufTable.maxbit; - var lencnt = llencnt + dcodescnt, - i = 0, - lastLen = 0; - while(i < lencnt) { - var hufLcode = tblList.list[addBits(bitList) & MASK_BITS[bitList]]; - j = hufLcode.bitcnt; - cutBits(j); - j = hufLcode.lbase; - if(j < 16) - ll[i++] = lastLen = j; - else if(j == 16) { - j = 3 + maskBits(2); - if(i + j > lencnt) return -1; - while(j-- > 0) ll[i++] = lastLen; - } else if(j == 17) { - j = 3 + maskBits(3); - if(i + j > lencnt) return -1; - while(j-- > 0) ll[i++] = 0; - lastLen = 0; - } else { - j = 11 + maskBits(7); - if(i + j > lencnt) return -1; - while(j-- > 0) ll[i++] = 0; - lastLen = 0; - } - } - bitList = 9; - hufTable = new HuffTable(ll, llencnt, 257, LENS, LEXT, bitList); - bitList == 0 && (hufTable.status = 1); - - if (hufTable.status != 0) return -1; - - tblList = hufTable.root; - bitList = hufTable.maxbit; - - for(i = 0; i < dcodescnt; i++) ll[i] = ll[i + llencnt]; - bitdist = 6; - hufTable = new HuffTable(ll, dcodescnt, 0, DISTS, DEXT, bitdist); - tblDist = hufTable.root; - bitdist = hufTable.maxbit; - - if((bitdist == 0 && llencnt > 257) || hufTable.status != 0) return -1; - - return codes(buff, off, size); - } - - return { - inflate : function(/*Buffer*/outputBuffer) { - tblList = null; - - var size = outputBuffer.length, - offset = 0, i; - - while(offset < size) { - if(eof && method == -1) return; - if(copyLen > 0) { - if(method != 0) { - while(copyLen > 0 && offset < size) { - copyLen--; - copyDist &= WSIZE - 1; - windowPos &= WSIZE - 1; - outputBuffer[offset++] = (slide[windowPos++] = slide[copyDist++]); - } - } else { - while(copyLen > 0 && offset < size) { - copyLen--; - windowPos &= WSIZE - 1; - outputBuffer[offset++] = (slide[windowPos++] = maskBits(8)); - } - copyLen == 0 && (method = -1); // done - } - if (offset == size) return; - } - - if(method == -1) { - if(eof) break; - eof = maskBits(1) != 0; - method = maskBits(2); - tblList = null; - copyLen = 0; - } - switch(method) { - case 0: i = stored(outputBuffer, offset, size - offset); break; - case 1: i = tblList != null ? codes(outputBuffer, offset, size - offset) : fixed(outputBuffer, offset, size - offset); break; - case 2: i = tblList != null ? codes(outputBuffer, offset, size - offset) : dynamic(outputBuffer, offset, size - offset); break; - default: i = -1; break; - } - - if(i == -1) return; - offset += i; - } - } - }; -} - -module.exports = function(/*Buffer*/inbuf) { - var zlib = require("zlib"); - return { - inflateAsync : function(/*Function*/callback) { - var tmp = zlib.createInflateRaw(), - parts = [], total = 0; - tmp.on('data', function(data) { - parts.push(data); - total += data.length; - }); - tmp.on('end', function() { - var buf = new Buffer(total), written = 0; - buf.fill(0); - - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - part.copy(buf, written); - written += part.length; - } - callback && callback(buf); - }); - tmp.end(inbuf) - }, - - inflate : function(/*Buffer*/outputBuffer) { - var x = { - x: new JSInflater(inbuf) - }; - x.x.inflate(outputBuffer); - delete(x.x); - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/package.json deleted file mode 100644 index 807d3cd1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "adm-zip", - "version": "0.4.4", - "description": "A Javascript implementation of zip for nodejs. Allows user to create or extract zip files both in memory or to/from disk", - "keywords": [ - "zip", - "methods", - "archive", - "unzip" - ], - "homepage": "http://github.com/cthackers/adm-zip", - "author": { - "name": "Nasca Iacob", - "email": "sy@another-d-mention.ro", - "url": "https://github.com/cthackers" - }, - "bugs": { - "url": "https://github.com/cthackers/adm-zip/issues", - "email": "sy@another-d-mention.ro" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://raw.github.com/cthackers/adm-zip/master/MIT-LICENSE.txt" - } - ], - "main": "adm-zip.js", - "repository": { - "type": "git", - "url": "https://github.com/cthackers/adm-zip.git" - }, - "engines": { - "node": ">=0.3.0" - }, - "readme": "# ADM-ZIP for NodeJS\r\n\r\nADM-ZIP is a pure JavaScript implementation for zip data compression for [NodeJS](http://nodejs.org/). \r\n\r\n# Installation\r\n\r\nWith [npm](http://npmjs.org) do:\r\n\r\n $ npm install adm-zip\r\n\t\r\n## What is it good for?\r\nThe library allows you to:\r\n\r\n* decompress zip files directly to disk or in memory buffers\r\n* compress files and store them to disk in .zip format or in compressed buffers\r\n* update content of/add new/delete files from an existing .zip\r\n\r\n# Dependencies\r\nThere are no other nodeJS libraries that ADM-ZIP is dependent of\r\n\r\n# Examples\r\n\r\n## Basic usage\r\n```javascript\r\n\r\n\tvar AdmZip = require('adm-zip');\r\n\r\n\t// reading archives\r\n\tvar zip = new AdmZip(\"./my_file.zip\");\r\n\tvar zipEntries = zip.getEntries(); // an array of ZipEntry records\r\n\r\n\tzipEntries.forEach(function(zipEntry) {\r\n\t console.log(zipEntry.toString()); // outputs zip entries information\r\n\t\tif (zipEntry.entryName == \"my_file.txt\") {\r\n\t\t console.log(zipEntry.data.toString('utf8')); \r\n\t\t}\r\n\t});\r\n\t// outputs the content of some_folder/my_file.txt\r\n\tconsole.log(zip.readAsText(\"some_folder/my_file.txt\")); \r\n\t// extracts the specified file to the specified location\r\n\tzip.extractEntryTo(/*entry name*/\"some_folder/my_file.txt\", /*target path*/\"/home/me/tempfolder\", /*maintainEntryPath*/false, /*overwrite*/true);\r\n\t// extracts everything\r\n\tzip.extractAllTo(/*target path*/\"/home/me/zipcontent/\", /*overwrite*/true);\r\n\t\r\n\t\r\n\t// creating archives\r\n\tvar zip = new AdmZip();\r\n\t\r\n\t// add file directly\r\n\tzip.addFile(\"test.txt\", new Buffer(\"inner content of the file\"), \"entry comment goes here\");\r\n\t// add local file\r\n\tzip.addLocalFile(\"/home/me/some_picture.png\");\r\n\t// get everything as a buffer\r\n\tvar willSendthis = zip.toBuffer();\r\n\t// or write everything to disk\r\n\tzip.writeZip(/*target file name*/\"/home/me/files.zip\");\r\n\t\r\n\t\r\n\t// ... more examples in the wiki\r\n```\r\n\r\nFor more detailed information please check out the [wiki](https://github.com/cthackers/adm-zip/wiki).\r\n\r\n[![build status](https://secure.travis-ci.org/cthackers/adm-zip.png)](http://travis-ci.org/cthackers/adm-zip)\r\n", - "readmeFilename": "README.md", - "_id": "adm-zip@0.4.4", - "dist": { - "shasum": "b493a1464b82a89ecd8c77b99faa046d8f03ded4" - }, - "_from": "adm-zip@~0.4.3", - "_resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test.zip deleted file mode 100644 index d57bfc075800e3f49b0a3e0ceca9a199d82c4c7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4189 zcmWIWW@h1H00FMbOb0LnN(cby#FCPt%%swi)Z%y`F3}HwtL8vcErLaLVsQ!{9hx|F z_@$OBgrruKD7fS&m*%GCmFSgJlprkrS%K<IIV{E`<s{~1E2L%Sq@wEmgQiy&x8D4m zl++?5*DIj;R~m~}kjv8$8buhG7&sWjfEtf9@wEjpF);jNW?)douQ4MtB_%Zv<m}kM zvwgD-1onLvSv)6-Gxz;o%Lgp08zvT-ot@agxsIc6L*|zJ`;wFHUJY|{nm6-({xYM_ zSF7^xvRpfykXBsReEN>h!4ktSn++dSWwfX5n<3HEoL1F5d!{YZ9ZQq4O_y1vGVZ?B zJ#^AQp|`wthxz7%5Ba3t$7V}EX+F30^i`jQoJ+3XzF6@?jE#Brug)7a@vc^vdnV3p zsCuuv<F>&L)dM*-GjhFU3~#KIo!)1&XS;j#R)5x}^WThE<P~2&GGzSO^YE3`?aTMq zY|J}dxuvdS;bxcGI3_V$(P(2quHruh#udhWf<_Tv_NM(U*?w-qS7}`noA4(qi{$To z%@%sSxNfHU6cg=b#XB~Ie(cX=4$at8{`kc^k+r44>6#P&OS(!$pS}6lG<%w<oR8ju ztL>~-2i|^Ob$*)stiqPfm3lm-Z$$!M+Me_IWcT1<uJNI>XIJ0*Zx|n7|2W|ETsxzq zj#mOSe`*EIJJfdd$Gsy3B36^xc`X)3tn^nXKX6L;k5H-<^Z!`Qxa$g`DqULQGTDoK zJ~?Zhvds|;_u}2D(c%`Q+sHCMr0Kd#Si#hkA1Tojxof)?&%K~p_-+Xkn`m&9O8Xqm z6@05EnY#ZJ$@C6<C$j28)AV1gp&Qx$h{^|~>zw!0N@6cre?nemla=Pi^Cl@q{+43f zW#(?oJtrR|p>=YmMv_P5!EZILo+*KXy|#A_8a@tDvTciB)T*QDrsTc$gJiPTQu_t& zfuAL22$|}pEKd=1-{R+TVk%3aYW;=_s~(<qEoiydKC529=~QH2OvSuUr+>!%V+3U) z?1@s3m_!+0l$w~5pO;fPnmR{QCp}ZAI{wr-nk+{P&4DO12_(zn{M=Mn6J)e5AFa!& zU6(U5i7?=5xvKz6Ob`II;Xwes9nZy}02XItkYL!5|8C>gzh@X>w1M9C*&u#^H^K(Y z);_Wg*jf*uwm-5h1>LM0K&Haz3BqA32-%{^0J8<;+5{j*_Xo%pto;RiR>Pct>_N<4 z1+vx4u~?1T$3V94z`N1~Ag`g*$o66OL}2!TqU<ql`yky5Wa|WGJzWg44xL7}4zu@y zY@Hk<X2>G-Wsog<a4hx|$TAoWOEeJ6us1GMq0z|5pak?+IDX3z{U2m&9S$Bm0J1hg z!TS(0jn7&=xV6eaYu^C7Ug)U@$&V0gQChfI?O*PH0&G8&#%I4e+<rx%{atK$?MH6I zV6*tcC!wPti(xcz7ApWPR^-HMF>)=1&Ef@>M>m5khS34utU#XtM+<<kf`x%$2R8$Q YI73NBX0ZYg<yL}w-3rP1xuBjq04-@*$N&HU diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt deleted file mode 100644 index 3c3ca551..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt deleted file mode 100644 index 3c3ca551..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt deleted file mode 100644 index 3c3ca551..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt deleted file mode 100644 index 3c3ca551..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/blank file.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/blank file.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fast.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fast.zip deleted file mode 100644 index f4ed17b98c9d7bcd21efc4523ce75fbe2b071d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4194 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPu^^f#DxB1A{7ljTxCK zDXDoNXU7Jf?VD{Nu<x_T;yF>Ax$pN{9*kVW<aX?)iF=(-fonmF@8a6u=O(1Aj^*S$ zTk-7o>`Q0FU+*myj^J;e>HC@Q`ObMwFOy!RCm;BFf$wXLnIQ}N*DrkG#?>(ezAN6Q zEH}P#Vb|;GmdS|@67PQ%tWIw}EPLhN?rYaN*ym<X@1E%-+p&K8;*TG6dDzUZCMSQc zRekAW>sIDu!hBwR$4!GBst0mvX5@NH7~WVZJH5}uX1;s%Mt-)a`EM&Z?3^wfUCew* z^6=5pZOivZ=EhD>+fvuDa5KwY9md)7X04r>!Cm{Oz_`M=Pf#i1%HFEK>+|L+zMR4P z$zJKxm7TorKHcp68o2+Aa8Qy)%Jsw)?Z@($*<M|!cz^8T-4ju-mz|rW{NK3C#O`YE z@9Z%B)wVNY99EWdmNbMO`MauL-TumB4&I{mjf(5%DrMQeU9fxUM@Ihq*MjTv;(qSC zRpa<?inHqXUnfM^107dBne9=*BpsHxxAUP!i59<9fzw8(`3~<IMb&?(cB!!a+a0oJ zmBT8JC#h-{-&{7H=IhjmOYE+0y)vOQCWGawP{#*GRf~6T6`yBKPdd3xN%)tDd-X!@ zLwCGcdAycwxgl$`Y=O;+pfH)2!Y#Tk8^cc=Dvo<0o^n*~gSpNEugGbFp-1>u#7(rj zaq`oWBiXAIr$!#yxbx|Xo?PR)<xau7dpd2}TAsd{dPQ?W$08-E-K(3EPpx#V;n_b| zY?Fetb!0|sYLDL3e-XA_UB?ehS)nmu@1#nZz&Se_l{uQKS@$mvxRUK4FMd#P6@SJr zP7cm=$)tysUH;Fjf3m|eF=pD-BPMOe7o{eq<mcs7jwaI4L^=S8R2_dJ9Zj91Md$z) zp#)NAaei(ptX(o%!H-t(G^*eknd}*Gwdz%X<tGS$+V>!U-UjDlPymZFGDt9l|M}3p z*6=JNjDGOyJ(wThjoSth24owsH7P*-0%TiM+99^UXyF71A7Trx-UG}QkZTiw7~LNr zTd?*ekgYE0X5H}h?-@pz)i4^_YRn!7venD6SdH5MK(_C|yV3<9`<N^tUWC!e0gBm6 zf!PO&vd6gXgLFNRtrM8_bTP;}({&K*U^KFI=>0xvl=zcl#0*)aeh#u_PJe%b69<fj zB^rcfm@Q6KxMfN}e}&_>4AD12w$|a`!2=*a8asUjTMwi0S*r)PRvBpRXJEGsJ@p{@ z5n?S$vlpBFtAf9Q?T69$>{o}|uL!h%1{+@cky|v_ELKeY4z?IZ6KAmk&|))AycQ!@ dR@f|tMKp{K@MZ=2gn@wz2rF0^7_M-GcmP+qZUz7V diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fastest.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fastest.zip deleted file mode 100644 index f4ed17b98c9d7bcd21efc4523ce75fbe2b071d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4194 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPu^^f#DxB1A{7ljTxCK zDXDoNXU7Jf?VD{Nu<x_T;yF>Ax$pN{9*kVW<aX?)iF=(-fonmF@8a6u=O(1Aj^*S$ zTk-7o>`Q0FU+*myj^J;e>HC@Q`ObMwFOy!RCm;BFf$wXLnIQ}N*DrkG#?>(ezAN6Q zEH}P#Vb|;GmdS|@67PQ%tWIw}EPLhN?rYaN*ym<X@1E%-+p&K8;*TG6dDzUZCMSQc zRekAW>sIDu!hBwR$4!GBst0mvX5@NH7~WVZJH5}uX1;s%Mt-)a`EM&Z?3^wfUCew* z^6=5pZOivZ=EhD>+fvuDa5KwY9md)7X04r>!Cm{Oz_`M=Pf#i1%HFEK>+|L+zMR4P z$zJKxm7TorKHcp68o2+Aa8Qy)%Jsw)?Z@($*<M|!cz^8T-4ju-mz|rW{NK3C#O`YE z@9Z%B)wVNY99EWdmNbMO`MauL-TumB4&I{mjf(5%DrMQeU9fxUM@Ihq*MjTv;(qSC zRpa<?inHqXUnfM^107dBne9=*BpsHxxAUP!i59<9fzw8(`3~<IMb&?(cB!!a+a0oJ zmBT8JC#h-{-&{7H=IhjmOYE+0y)vOQCWGawP{#*GRf~6T6`yBKPdd3xN%)tDd-X!@ zLwCGcdAycwxgl$`Y=O;+pfH)2!Y#Tk8^cc=Dvo<0o^n*~gSpNEugGbFp-1>u#7(rj zaq`oWBiXAIr$!#yxbx|Xo?PR)<xau7dpd2}TAsd{dPQ?W$08-E-K(3EPpx#V;n_b| zY?Fetb!0|sYLDL3e-XA_UB?ehS)nmu@1#nZz&Se_l{uQKS@$mvxRUK4FMd#P6@SJr zP7cm=$)tysUH;Fjf3m|eF=pD-BPMOe7o{eq<mcs7jwaI4L^=S8R2_dJ9Zj91Md$z) zp#)NAaei(ptX(o%!H-t(G^*eknd}*Gwdz%X<tGS$+V>!U-UjDlPymZFGDt9l|M}3p z*6=JNjDGOyJ(wThjoSth24owsH7P*-0%TiM+99^UXyF71A7Trx-UG}QkZTiw7~LNr zTd?*ekgYE0X5H}h?-@pz)i4^_YRn!7venD6SdH5MK(_C|yV3<9`<N^tUWC!e0gBm6 zf!PO&vd6gXgLFNRtrM8_bTP;}({&K*U^KFI=>0xvl=zcl#0*)aeh#u_PJe%b69<fj zB^rcfm@Q6KxMfN}e}&_>4AD12w$|a`!2=*a8asUjTMwi0S*r)PRvBpRXJEGsJ@p{@ z5n?S$vlpBFtAf9Q?T69$>{o}|uL!h%1{+@cky|v_ELKeY4z?IZ6KAmk&|))AycQ!@ dR@f|tMKp{K@MZ=2gn@wz2rF0^7_M-GcmP+qZUz7V diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/linux_arc.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/linux_arc.zip deleted file mode 100644 index 188eccbe8bdb2b5b288857de8a397b77ff8e7414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmWIWW@Zs#U|`^2P@7ZZFx{>BaWati9*FrEWEe_Pi%axDgkExfURr1fCj+yAMzOy( z5SLbPGcdBeU}j(d6I0I|<ZLkDakyB$`~_1P^FiAq&Q}7Me3dg@3aUhxT$mmAzunx; zNHaw3`LPw7^8fM5uJNfXYM*p)&V}!93wvx9PusoumgEef6sbiXJ|`SBbq<M6)!}lx z)U@^AVV-W&bHe)s#RGs&<pMg4fk7PTR4@Zdu)>@QcA+THb;_774De=Tl4Hi@R|&9D zj6iZrBZ!Iab5@AY(R>Xt6PKePW->4cF#L5~4Kp(|1ZWh<i5Nz)vVkmS0>b$~`W1-7 F004HEX6gU{ diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/maximum.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/maximum.zip deleted file mode 100644 index 86a8ec776107c075ce2c7f803472aa97dc25cbf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4086 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKug#8$f#DxB1A{7ljTxCK zDXDoNXNLrOXB{!%x%*orDNL7T*LzK_x2!VJeW5bi5k-gZ?Avsb=Zu!4|9kcN#M_=N zJD50Aa(3KH%-*MUj5Wxa#ZO>UzO>!~o_+To9#C_85NaE`O1grh=FZ&QEHlZ6OP1$n zoEF@}!TxC(`$Xsa8&_R_IDN%}1GCdwZht?zW3T_@j(rxZ3^uT{sAoP~cOhU)poA26 z0Pj-w(;r&6-<DYNR4vwBZ6W-&>GYYM2hL5r^yAT*(l1*lJYiMheYtftZz>OSSaPqN z{2hl4BI#T$OmpHcos|uc+iv*(wTqEj`m?`VIXk`ghHgG`vXke~<&Wacw^G)r>$RQ_ z)Gg>Wkvh4&*q-g@)c*x#Grum_6m>;1(eA*<nyc(8H>Wdc$FU#Iu+Qs}E4{VhzkYX4 zkaAn1#-8(<N7fv^<JdVh;>yMz9sgOW(_5XqZ~qRqG+=f<I9vVCzUA}h$J_t;eVe_e zw(k3$`s6rUd!dlX9Cy_RT&_=#H8RC)*tM@`!)Dh^wtvosw;4AvJY$ZtXcv63RpTnx zBIbNm!^+;zbD|#XIrL<o4qK<WS^KO8_IrUoTMwIEvfOo~Q~0(aA9wV-Gp-^6T&q6b z5z?Bn%vGzhrXc6po)yb4xZPYg@0IC-+1x7xgI@(Qn{_YRYd>SD%&BaXj!8_Fg-RYh z!HeWd`ApTH<hC?OuPfPgMAJ%TUpagAlDJouFY?W%y-BvPo4rfspv&9DyE`v&tcdyT zBsMiyW=UkZM|(;9vdKm3q~_@<RlN#($=KpBV@~MZKPCHK%foUiW&+eBCIQA5r6#82 z=jBw6ro_>dNUM~njz1-iCc)9dkk*AEfh1U*pPLG6MvT_SqxCT*^)VxpJp-<mwhFK$ z1OZT+8wAkX#as*uU~xtU35M`LAG+5Xo@Ip54_>_o^8>tb+aSV#Yy-9y0I02wY>P@e z#1<GWoB-iNY{Au{huH#hZ2}OZ`vYVP*7iNJ)dk(G8@~QM!w9n)Mk8B|*$Y6ndN~%W zQTqhQ_8oXvx&UM!lO@E9Fd8{PF?$X$`#@3l7`J_p?f|lN0<)ej23cpi4q_dQMz#*U zFD8u=e{zhNA&b=aK(@^3?@w^zfYGo-gRl&<fv5_%ObO_(aQv1b`YXuRIvhNB0OUtw zr>|h^VKhE#_2AYj1FgLQ>?)zB9wa|PtVL<1VzYl$@HepiFdCoz>TvrNf%Ye{;k6&R zZGz2W#nkU$i(xcz7ApWPe#(K@V&obLo5iq*hS34utU#YIFmM531q%a11~-TY0JSC= A-v9sr diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/normal.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/normal.zip deleted file mode 100644 index b4602c94ee000ee54c71c9302b9db956b3fd9f0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4170 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPvB~f#DxB1A{7ljTxCK zDXDoNXQu|9?VD{Nu<x_T;yF>Ax$pN{9*kVW<aX?)i93_p4ke3CzKi$N9zW;5dzFZ0 zMcTgoGox;9F7ul$xurQUvUJbEliN0j*K#$7a-Ctgd*jw*uY=MV&!uCglyVrj-+vW( zUOi)>@$~4X$#pJL>1_46YY#n?i+b*}Jo-uVy^_<BXZL+|%)c<X=)=)|uCTMr8-Gc; zR$cY$oTvC@p6-q;`&mbuL(fIuW$hFBa>v)ZUoP&g=ls%;9f#N2_1;tU*kv)*ZNBCl z-}UVu)+enwT{LHlbnuJP1$KIJ-FhO{rpj7Rex&JGnEG-WWqgs{^slshzT@je^A-Oi zCUQ@GopEk{TH)oB8*WIdh93FC7A_`Qzw%tNY9D{vtTUpE7rxwiU2)>?c`8EDZ!i7{ zGxY9Z-~2JdG-8MRgHO9&ZGL*JY}SJna@@hTbt((L^dvX$`CL(P*RR0P?8RU4&%9rY zxp?oNvK17GVBY#bUT3l78jt4pp<LB!#rq~V2sed%VyNL>Vs(H&ELHQu{H+UonPXJe ztl@Uscx;vL#?ujB`Ld6M#yB1HQkxi3<Zw`3bg{33_R1SieyC)J8B}^q)}0*s;7$=E zOO}$#?KfOX3+{E!G8cJjyku>}R?!ts-ccvbLyk&a;IDC*Jb4jE5a-Q>)q;Nxwq0jG zc(0h#Qs1cSsHtmuO6&y%QRiH)L#ITHf+m$q1<FLaG$r$wZ#bW+!D`#Izc*#iAqkIo z&&Km2!CXI^-bFeGD>RuVDn=hXZE~=bjfG!@G5q2Qp>W>+aV+kSs;^%VS4^2Aa^kAO zkIO&r{bPV-U(8ggM@*`WFG@{J$<NEF98I31$&;?hQyqWu98H&_#pZw%n*`Ejaei(p ztQ9g^osU-MRIkn%nd}*Gwcb^LWhMxK+VLQO-qz+~PymZFGDt9l|M}3p*6=JNjDGOy zJ(wThjoSth24owsH6TFke`H%!+99^UXyF71A7TrxUINS(kZTiw7~LNrTd?*SkgYE0 zX5H}h?-@pz)i4^_YRsMmvenD6SdH4xK(_C|yV3<9`<N^tUWC!e0gBlhf!PO&vd6gX zgLE;FtrM8_bTP;}({&K*U^KFI=>0osl=zcl#0*)a{tU8ZPJe%b69<fjB^rcfnC(kd zxMfN}e}&_>4ABQdw$|a`!2=*a8asUjTMwi0S*r)PRvBpRTVVGKJ@p{@5n?S$BNv<f ztAf9Q?T69$>{o}|uL!iihYhd&$gLP`7AvNH2U`rIiL+P%Xt4?>UW<{dDQp(QA{s^q Vc(Ve1!oa`<gcU3d412giJOGZ1Gxh)g diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/store.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/store.zip deleted file mode 100644 index e2add30dc0e3129dc89e20a71abe7314052d0002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5878 zcmeI0PmkMF5Wv0tgTRNXf(jv3RMVxaQprk%5C^!hPU38=b!^La8Wst)PW-ZY;MgnM zVRvu90S^5Fh!YYABqS<6LMw5E?|?vDH~^P|Dz%82=Q!(Rlh8ZPt~2rToB7SmvqtZY zy?gfDC5b-ozISh1{Fr`SMCoT)!uykqrML0QZrUqnla0mMei{f3Sy+7bW4<kZOuufR zT&7{NL-5#92F-Xd8M7#>Wk(r-b2E=Vnm2Q0iJ5-rM<2kDhpf=eLwvlT`|@htI1E^_ zCf>_SRLS$<iDK^Wix~FzpIrF#pR<xg*VcN)5f1_u3Ab4?=4r~~2zUx3mazUY>?eMd zu|R=g!WhIu7>xX6pDB>V;77-Bz>*Xd;(q4yh)4V2!yrC5mT_h_LNjSR%ntp8;p71P zG>r$`M|%)VbM0ruqs*o7YBpl9=}t8^ZwN@h{7~i*T4PW=f<vB-;z<Sxz9R`AkPQWR zGzcdF`A|F#`Iu)pfz%VeKgv=WJ)fi)0r{!GI1c!bBokpBO!^^DM+yX-Ow+5VKuUuH z7LgXlaWhUJWnn0z1&)4;SWmnYb0|NU8{|(@l+wuIC?3y8!c%!TNg_mIQgB8PW6A{a zeKyEwggnPZ4&y@#Z4gHRr+Cx1WZA<<en0+@iC9E<5XBj~D$*?$Ksb@F>hw`M^1~4N zY??6S@<^tkA{>lv(oZv7c<zUA5GR7S7-kLmZ4F$j<@HoY1KkDNv2N*2tqGf|i}#xf z^mMOnbv?itj%s>)V6{Ls_h45yn+j;}*pBA9U^%khu?=0rG2Lt!-KK8tKppi=%L7C2 z=pGvNEFj?2l&+y(3p$$9XrpDdt{b|yr^qecGs$MlazF)Jbv(V%HB<-eu47xShWI9$ zHFdM)AVuqFrdLBMj)8UyZ@_J<hCwJ<?V|S%`3DWl-gESwwg+v?XlgiE*U&SyZfH3Q zgK8M6-cg{bcGMm6&H)RpI5JJky@Os`qaos{_}}n!%cL+GmgzZot6-FlH&gBDuBL$M z=q@Fs<yaj>rgWkPT1O+OXKJ|>O0`JPY(;PiC9I1<7rsDKQw_9*%VW+hU+tveEf$d4 z(-e@~3G;(E3XiKwQdN?wl2nxhi-xpVNv^N2BvlEiHY3$$q}q&VYc?bQQ9{yq%x1^1 z>O7-Bb)Eq_tySll|KE9L<ILOAs!r22+MeKtdQS9N><h^fi17{SC8_uL&%58g_Txq& zfBNkYac}RgCR~!rgk>iv>Q$8~*FMWBg?!;oexFlTb+if!d3y)1#W;wvw7*qGAKX3v z-NPq8Y!v81meHrXU}f~zOVIN@u`=)e?~^ZycjnDJ#6p%6db)E~@My_?S<TDaVP)LK zFMj=saBtkpafK}77JHGG=hpAa#_7zKdT(V|{mCQoaul+7Y09}=+!k-mV4E0MZ$0d! zUsuL%KX`DTVtl>+P~Z!>4qKaHUqS5W=hw!VW9Lr!%lO~8e+hme*YU5<_*aqt^K)zY w<+H&u@KyG=02lJ<z<}Vb3v0pU9mO(mvCxIIch5hARwWt#j?PKa=y|&P7yOI$IRF3v diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/ultra.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/ultra.zip deleted file mode 100644 index 86a8ec776107c075ce2c7f803472aa97dc25cbf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4086 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKug#8$f#DxB1A{7ljTxCK zDXDoNXNLrOXB{!%x%*orDNL7T*LzK_x2!VJeW5bi5k-gZ?Avsb=Zu!4|9kcN#M_=N zJD50Aa(3KH%-*MUj5Wxa#ZO>UzO>!~o_+To9#C_85NaE`O1grh=FZ&QEHlZ6OP1$n zoEF@}!TxC(`$Xsa8&_R_IDN%}1GCdwZht?zW3T_@j(rxZ3^uT{sAoP~cOhU)poA26 z0Pj-w(;r&6-<DYNR4vwBZ6W-&>GYYM2hL5r^yAT*(l1*lJYiMheYtftZz>OSSaPqN z{2hl4BI#T$OmpHcos|uc+iv*(wTqEj`m?`VIXk`ghHgG`vXke~<&Wacw^G)r>$RQ_ z)Gg>Wkvh4&*q-g@)c*x#Grum_6m>;1(eA*<nyc(8H>Wdc$FU#Iu+Qs}E4{VhzkYX4 zkaAn1#-8(<N7fv^<JdVh;>yMz9sgOW(_5XqZ~qRqG+=f<I9vVCzUA}h$J_t;eVe_e zw(k3$`s6rUd!dlX9Cy_RT&_=#H8RC)*tM@`!)Dh^wtvosw;4AvJY$ZtXcv63RpTnx zBIbNm!^+;zbD|#XIrL<o4qK<WS^KO8_IrUoTMwIEvfOo~Q~0(aA9wV-Gp-^6T&q6b z5z?Bn%vGzhrXc6po)yb4xZPYg@0IC-+1x7xgI@(Qn{_YRYd>SD%&BaXj!8_Fg-RYh z!HeWd`ApTH<hC?OuPfPgMAJ%TUpagAlDJouFY?W%y-BvPo4rfspv&9DyE`v&tcdyT zBsMiyW=UkZM|(;9vdKm3q~_@<RlN#($=KpBV@~MZKPCHK%foUiW&+eBCIQA5r6#82 z=jBw6ro_>dNUM~njz1-iCc)9dkk*AEfh1U*pPLG6MvT_SqxCT*^)VxpJp-<mwhFK$ z1OZT+8wAkX#as*uU~xtU35M`LAG+5Xo@Ip54_>_o^8>tb+aSV#Yy-9y0I02wY>P@e z#1<GWoB-iNY{Au{huH#hZ2}OZ`vYVP*7iNJ)dk(G8@~QM!w9n)Mk8B|*$Y6ndN~%W zQTqhQ_8oXvx&UM!lO@E9Fd8{PF?$X$`#@3l7`J_p?f|lN0<)ej23cpi4q_dQMz#*U zFD8u=e{zhNA&b=aK(@^3?@w^zfYGo-gRl&<fv5_%ObO_(aQv1b`YXuRIvhNB0OUtw zr>|h^VKhE#_2AYj1FgLQ>?)zB9wa|PtVL<1VzYl$@HepiFdCoz>TvrNf%Ye{;k6&R zZGz2W#nkU$i(xcz7ApWPe#(K@V&obLo5iq*hS34utU#YIFmM531q%a11~-TY0JSC= A-v9sr diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/index.js deleted file mode 100644 index 70acb517..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/index.js +++ /dev/null @@ -1,5 +0,0 @@ -var Attr = require("../util").FileAttr, - Zip = require("../adm-zip"), - fs = require("fs"); - -//zip.addLocalFile("./test/readonly.txt"); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/constants.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/constants.js deleted file mode 100644 index 05480541..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/constants.js +++ /dev/null @@ -1,84 +0,0 @@ -module.exports = { - /* The local file header */ - LOCHDR : 30, // LOC header size - LOCSIG : 0x04034b50, // "PK\003\004" - LOCVER : 4, // version needed to extract - LOCFLG : 6, // general purpose bit flag - LOCHOW : 8, // compression method - LOCTIM : 10, // modification time (2 bytes time, 2 bytes date) - LOCCRC : 14, // uncompressed file crc-32 value - LOCSIZ : 18, // compressed size - LOCLEN : 22, // uncompressed size - LOCNAM : 26, // filename length - LOCEXT : 28, // extra field length - - /* The Data descriptor */ - EXTSIG : 0x08074b50, // "PK\007\008" - EXTHDR : 16, // EXT header size - EXTCRC : 4, // uncompressed file crc-32 value - EXTSIZ : 8, // compressed size - EXTLEN : 12, // uncompressed size - - /* The central directory file header */ - CENHDR : 46, // CEN header size - CENSIG : 0x02014b50, // "PK\001\002" - CENVEM : 4, // version made by - CENVER : 6, // version needed to extract - CENFLG : 8, // encrypt, decrypt flags - CENHOW : 10, // compression method - CENTIM : 12, // modification time (2 bytes time, 2 bytes date) - CENCRC : 16, // uncompressed file crc-32 value - CENSIZ : 20, // compressed size - CENLEN : 24, // uncompressed size - CENNAM : 28, // filename length - CENEXT : 30, // extra field length - CENCOM : 32, // file comment length - CENDSK : 34, // volume number start - CENATT : 36, // internal file attributes - CENATX : 38, // external file attributes (host system dependent) - CENOFF : 42, // LOC header offset - - /* The entries in the end of central directory */ - ENDHDR : 22, // END header size - ENDSIG : 0x06054b50, // "PK\005\006" - ENDSUB : 8, // number of entries on this disk - ENDTOT : 10, // total number of entries - ENDSIZ : 12, // central directory size in bytes - ENDOFF : 16, // offset of first CEN header - ENDCOM : 20, // zip file comment length - - /* Compression methods */ - STORED : 0, // no compression - SHRUNK : 1, // shrunk - REDUCED1 : 2, // reduced with compression factor 1 - REDUCED2 : 3, // reduced with compression factor 2 - REDUCED3 : 4, // reduced with compression factor 3 - REDUCED4 : 5, // reduced with compression factor 4 - IMPLODED : 6, // imploded - // 7 reserved - DEFLATED : 8, // deflated - ENHANCED_DEFLATED: 9, // enhanced deflated - PKWARE : 10,// PKWare DCL imploded - // 11 reserved - BZIP2 : 12, // compressed using BZIP2 - // 13 reserved - LZMA : 14, // LZMA - // 15-17 reserved - IBM_TERSE : 18, // compressed using IBM TERSE - IBM_LZ77 : 19, //IBM LZ77 z - - /* General purpose bit flag */ - FLG_ENC : 0, // encripted file - FLG_COMP1 : 1, // compression option - FLG_COMP2 : 2, // compression option - FLG_DESC : 4, // data descriptor - FLG_ENH : 8, // enhanced deflation - FLG_STR : 16, // strong encryption - FLG_LNG : 1024, // language encoding - FLG_MSK : 4096, // mask header values - - /* Load type */ - FILE : 0, - BUFFER : 1, - NONE : 2 -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/errors.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/errors.js deleted file mode 100644 index db5d69e9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/errors.js +++ /dev/null @@ -1,35 +0,0 @@ -module.exports = { - /* Header error messages */ - "INVALID_LOC" : "Invalid LOC header (bad signature)", - "INVALID_CEN" : "Invalid CEN header (bad signature)", - "INVALID_END" : "Invalid END header (bad signature)", - - /* ZipEntry error messages*/ - "NO_DATA" : "Nothing to decompress", - "BAD_CRC" : "CRC32 checksum failed", - "FILE_IN_THE_WAY" : "There is a file in the way: %s", - "UNKNOWN_METHOD" : "Invalid/unsupported compression method", - - /* Inflater error messages */ - "AVAIL_DATA" : "inflate::Available inflate data did not terminate", - "INVALID_DISTANCE" : "inflate::Invalid literal/length or distance code in fixed or dynamic block", - "TO_MANY_CODES" : "inflate::Dynamic block code description: too many length or distance codes", - "INVALID_REPEAT_LEN" : "inflate::Dynamic block code description: repeat more than specified lengths", - "INVALID_REPEAT_FIRST" : "inflate::Dynamic block code description: repeat lengths with no first length", - "INCOMPLETE_CODES" : "inflate::Dynamic block code description: code lengths codes incomplete", - "INVALID_DYN_DISTANCE": "inflate::Dynamic block code description: invalid distance code lengths", - "INVALID_CODES_LEN": "inflate::Dynamic block code description: invalid literal/length code lengths", - "INVALID_STORE_BLOCK" : "inflate::Stored block length did not match one's complement", - "INVALID_BLOCK_TYPE" : "inflate::Invalid block type (type == 3)", - - /* ADM-ZIP error messages */ - "CANT_EXTRACT_FILE" : "Could not extract the file", - "CANT_OVERRIDE" : "Target file already exists", - "NO_ZIP" : "No zip file was loaded", - "NO_ENTRY" : "Entry doesn't exist", - "DIRECTORY_CONTENT_ERROR" : "A directory cannot have content", - "FILE_NOT_FOUND" : "File not found: %s", - "NOT_IMPLEMENTED" : "Not implemented", - "INVALID_FILENAME" : "Invalid filename", - "INVALID_FORMAT" : "Invalid or unsupported zip format. No END header found" -}; \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/fattr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/fattr.js deleted file mode 100644 index 2191ec1c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/fattr.js +++ /dev/null @@ -1,84 +0,0 @@ -var fs = require("fs"), - pth = require("path"); - -fs.existsSync = fs.existsSync || pth.existsSync; - -module.exports = function(/*String*/path) { - - var _path = path || "", - _permissions = 0, - _obj = newAttr(), - _stat = null; - - function newAttr() { - return { - directory : false, - readonly : false, - hidden : false, - executable : false, - mtime : 0, - atime : 0 - } - } - - if (_path && fs.existsSync(_path)) { - _stat = fs.statSync(_path); - _obj.directory = _stat.isDirectory(); - _obj.mtime = _stat.mtime; - _obj.atime = _stat.atime; - _obj.executable = !!(1 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); - _obj.readonly = !!(2 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); - _obj.hidden = pth.basename(_path)[0] === "."; - } else { - console.warn("Invalid path: " + _path) - } - - return { - - get directory () { - return _obj.directory; - }, - - get readOnly () { - return _obj.readonly; - }, - - get hidden () { - return _obj.hidden; - }, - - get mtime () { - return _obj.mtime; - }, - - get atime () { - return _obj.atime; - }, - - - get executable () { - return _obj.executable; - }, - - decodeAttributes : function(val) { - - }, - - encodeAttributes : function (val) { - - }, - - toString : function() { - return '{\n' + - '\t"path" : "' + _path + ",\n" + - '\t"isDirectory" : ' + _obj.directory + ",\n" + - '\t"isReadOnly" : ' + _obj.readonly + ",\n" + - '\t"isHidden" : ' + _obj.hidden + ",\n" + - '\t"isExecutable" : ' + _obj.executable + ",\n" + - '\t"mTime" : ' + _obj.mtime + "\n" + - '\t"aTime" : ' + _obj.atime + "\n" + - '}'; - } - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/index.js deleted file mode 100644 index 935fc1a4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = require("./utils"); -module.exports.Constants = require("./constants"); -module.exports.Errors = require("./errors"); -module.exports.FileAttr = require("./fattr"); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/utils.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/utils.js deleted file mode 100644 index b14db8c1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/utils.js +++ /dev/null @@ -1,145 +0,0 @@ -var fs = require("fs"), - pth = require('path'); - -fs.existsSync = fs.existsSync || pth.existsSync; - -module.exports = (function() { - - var crcTable = [], - Constants = require('./constants'), - Errors = require('./errors'), - - PATH_SEPARATOR = pth.normalize("/"); - - - function mkdirSync(/*String*/path) { - var resolvedPath = path.split(PATH_SEPARATOR)[0]; - path.split(PATH_SEPARATOR).forEach(function(name) { - if (!name || name.substr(-1,1) == ":") return; - resolvedPath += PATH_SEPARATOR + name; - var stat; - try { - stat = fs.statSync(resolvedPath); - } catch (e) { - fs.mkdirSync(resolvedPath); - } - if (stat && stat.isFile()) - throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath); - }); - } - - function findSync(/*String*/root, /*RegExp*/pattern, /*Boolean*/recoursive) { - if (typeof pattern === 'boolean') { - recoursive = pattern; - pattern = undefined; - } - var files = []; - fs.readdirSync(root).forEach(function(file) { - var path = pth.join(root, file); - - if (fs.statSync(path).isDirectory() && recoursive) - files = files.concat(findSync(path, pattern, recoursive)); - - if (!pattern || pattern.test(path)) { - files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : "")); - } - - }); - return files; - } - - return { - makeDir : function(/*String*/path) { - mkdirSync(path); - }, - - crc32 : function(buf) { - var b = new Buffer(4); - if (!crcTable.length) { - for (var n = 0; n < 256; n++) { - var c = n; - for (var k = 8; --k >= 0;) // - if ((c & 1) != 0) { c = 0xedb88320 ^ (c >>> 1); } else { c = c >>> 1; } - if (c < 0) { - b.writeInt32LE(c, 0); - c = b.readUInt32LE(0); - } - crcTable[n] = c; - } - } - var crc = 0, off = 0, len = buf.length, c1 = ~crc; - while(--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ (c1 >>> 8); - crc = ~c1; - b.writeInt32LE(crc & 0xffffffff, 0); - return b.readUInt32LE(0); - }, - - methodToString : function(/*Number*/method) { - switch (method) { - case Constants.STORED: - return 'STORED (' + method + ')'; - case Constants.DEFLATED: - return 'DEFLATED (' + method + ')'; - default: - return 'UNSUPPORTED (' + method + ')' - } - - }, - - writeFileTo : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr) { - if (fs.existsSync(path)) { - if (!overwrite) - return false; // cannot overwite - - var stat = fs.statSync(path); - if (stat.isDirectory()) { - return false; - } - } - var folder = pth.dirname(path); - if (!fs.existsSync(folder)) { - mkdirSync(folder); - } - - var fd; - try { - fd = fs.openSync(path, 'w', 438); // 0666 - } catch(e) { - fs.chmodSync(path, 438); - fd = fs.openSync(path, 'w', 438); - } - if (fd) { - fs.writeSync(fd, content, 0, content.length, 0); - fs.closeSync(fd); - } - fs.chmodSync(path, attr || 438); - return true; - }, - - findFiles : function(/*String*/path) { - return findSync(path, true); - }, - - getAttributes : function(/*String*/path) { - - }, - - setAttributes : function(/*String*/path) { - - }, - - toBuffer : function(input) { - if (Buffer.isBuffer(input)) { - return input; - } else { - if (input.length == 0) { - return new Buffer(0) - } - return new Buffer(input, 'utf8'); - } - }, - - Constants : Constants, - Errors : Errors - } -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipEntry.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipEntry.js deleted file mode 100644 index 02c31725..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipEntry.js +++ /dev/null @@ -1,224 +0,0 @@ -var Utils = require("./util"), - Headers = require("./headers"), - Constants = Utils.Constants, - Methods = require("./methods"); - -module.exports = function (/*Buffer*/input) { - - var _entryHeader = new Headers.EntryHeader(), - _entryName = new Buffer(0), - _comment = new Buffer(0), - _isDirectory = false, - uncompressedData = null, - _extra = new Buffer(0); - - function getCompressedDataFromZip() { - if (!input || !Buffer.isBuffer(input)) { - return new Buffer(0); - } - _entryHeader.loadDataHeaderFromBinary(input); - return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize) - } - - function crc32OK(data) { - // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written - if (_entryHeader.flags & 0x8 != 0x8) { - if (Utils.crc32(data) != _entryHeader.crc) { - return false; - } - } else { - // @TODO: load and check data descriptor header - // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure - // (optionally preceded by a 4-byte signature) immediately after the compressed data: - } - return true; - } - - function decompress(/*Boolean*/async, /*Function*/callback) { - if (_isDirectory) { - if (async && callback) { - callback(new Buffer(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error. - } - return new Buffer(0); - } - - var compressedData = getCompressedDataFromZip(); - if (compressedData.length == 0) { - if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error. - return compressedData; - } - - var data = new Buffer(_entryHeader.size); - data.fill(0); - - switch (_entryHeader.method) { - case Utils.Constants.STORED: - compressedData.copy(data); - if (!crc32OK(data)) { - if (async && callback) callback(data, Utils.Errors.BAD_CRC);//si added error - return Utils.Errors.BAD_CRC; - } else {//si added otherwise did not seem to return data. - if (async && callback) callback(data); - return data; - } - break; - case Utils.Constants.DEFLATED: - var inflater = new Methods.Inflater(compressedData); - if (!async) { - inflater.inflate(data); - if (!crc32OK(data)) { - console.warn(Utils.Errors.BAD_CRC + " " + _entryName.toString()) - } - return data; - } else { - inflater.inflateAsync(function(result) { - result.copy(data, 0); - if (crc32OK(data)) { - if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error - } else { //si added otherwise did not seem to return data. - if (callback) callback(data); - } - }) - } - break; - default: - if (async && callback) callback(new Buffer(0), Utils.Errors.UNKNOWN_METHOD); - return Utils.Errors.UNKNOWN_METHOD; - } - } - - function compress(/*Boolean*/async, /*Function*/callback) { - if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) { - // no data set or the data wasn't changed to require recompression - if (async && callback) callback(getCompressedDataFromZip()); - return getCompressedDataFromZip(); - } - - if (uncompressedData.length && !_isDirectory) { - var compressedData; - // Local file header - switch (_entryHeader.method) { - case Utils.Constants.STORED: - _entryHeader.compressedSize = _entryHeader.size; - - compressedData = new Buffer(uncompressedData.length); - uncompressedData.copy(compressedData); - - if (async && callback) callback(compressedData); - return compressedData; - - break; - default: - case Utils.Constants.DEFLATED: - - var deflater = new Methods.Deflater(uncompressedData); - if (!async) { - var deflated = deflater.deflate(); - _entryHeader.compressedSize = deflated.length; - return deflated; - } else { - deflater.deflateAsync(function(data) { - compressedData = new Buffer(data.length); - _entryHeader.compressedSize = data.length; - data.copy(compressedData); - callback && callback(compressedData); - }) - } - deflater = null; - break; - } - } else { - if (async && callback) { - callback(new Buffer(0)); - } else { - return new Buffer(0); - } - } - } - - return { - get entryName () { return _entryName.toString(); }, - get rawEntryName() { return _entryName; }, - set entryName (val) { - _entryName = Utils.toBuffer(val); - var lastChar = _entryName[_entryName.length - 1]; - _isDirectory = (lastChar == 47) || (lastChar == 92); - _entryHeader.fileNameLength = _entryName.length; - }, - - get extra () { return _extra; }, - set extra (val) { - _extra = val; - _entryHeader.extraLength = val.length; - }, - - get comment () { return _comment.toString(); }, - set comment (val) { - _comment = Utils.toBuffer(val); - _entryHeader.commentLength = _comment.length; - }, - - get name () { var n = _entryName.toString(); return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop(); }, - get isDirectory () { return _isDirectory }, - - getCompressedData : function() { - return compress(false, null) - }, - - getCompressedDataAsync : function(/*Function*/callback) { - compress(true, callback) - }, - - setData : function(value) { - uncompressedData = Utils.toBuffer(value); - if (!_isDirectory && uncompressedData.length) { - _entryHeader.size = uncompressedData.length; - _entryHeader.method = Utils.Constants.DEFLATED; - _entryHeader.crc = Utils.crc32(value); - } else { // folders and blank files should be stored - _entryHeader.method = Utils.Constants.STORED; - } - }, - - getData : function() { - return decompress(false, null); - }, - - getDataAsync : function(/*Function*/callback) { - decompress(true, callback) - }, - - set header(/*Buffer*/data) { - _entryHeader.loadFromBinary(data); - }, - - get header() { - return _entryHeader; - }, - - packHeader : function() { - var header = _entryHeader.entryHeaderToBinary(); - // add - _entryName.copy(header, Utils.Constants.CENHDR); - if (_entryHeader.extraLength) { - _extra.copy(header, Utils.Constants.CENHDR + _entryName.length) - } - if (_entryHeader.commentLength) { - _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length); - } - return header; - }, - - toString : function() { - return '{\n' + - '\t"entryName" : "' + _entryName.toString() + "\",\n" + - '\t"name" : "' + _entryName.toString().split("/").pop() + "\",\n" + - '\t"comment" : "' + _comment.toString() + "\",\n" + - '\t"isDirectory" : ' + _isDirectory + ",\n" + - '\t"header" : ' + _entryHeader.toString().replace(/\t/mg, "\t\t") + ",\n" + - '\t"compressedData" : <' + (input && input.length + " bytes buffer" || "null") + ">\n" + - '\t"data" : <' + (uncompressedData && uncompressedData.length + " bytes buffer" || "null") + ">\n" + - '}'; - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipFile.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipFile.js deleted file mode 100644 index f066d7ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipFile.js +++ /dev/null @@ -1,311 +0,0 @@ -var ZipEntry = require("./zipEntry"), - Headers = require("./headers"), - Utils = require("./util"); - -module.exports = function(/*String|Buffer*/input, /*Number*/inputType) { - var entryList = [], - entryTable = {}, - _comment = new Buffer(0), - filename = "", - fs = require("fs"), - inBuffer = null, - mainHeader = new Headers.MainHeader(); - - if (inputType == Utils.Constants.FILE) { - // is a filename - filename = input; - inBuffer = fs.readFileSync(filename); - readMainHeader(); - } else if (inputType == Utils.Constants.BUFFER) { - // is a memory buffer - inBuffer = input; - readMainHeader(); - } else { - // none. is a new file - } - - function readEntries() { - entryTable = {}; - entryList = new Array(mainHeader.diskEntries); // total number of entries - var index = mainHeader.offset; // offset of first CEN header - for(var i = 0; i < entryList.length; i++) { - - var tmp = index, - entry = new ZipEntry(inBuffer); - entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR); - - entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength); - - if (entry.header.extraLength) { - entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength); - } - - if (entry.header.commentLength) - entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength); - - index += entry.header.entryHeaderSize; - - entryList[i] = entry; - entryTable[entry.entryName] = entry; - } - } - - function readMainHeader() { - var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size - n = Math.max(0, i - 0xFFFF), // 0xFFFF is the max zip file comment length - endOffset = 0; // Start offset of the END header - - for (i; i >= n; i--) { - if (inBuffer[i] != 0x50) continue; // quick check that the byte is 'P' - if (inBuffer.readUInt32LE(i) == Utils.Constants.ENDSIG) { // "PK\005\006" - endOffset = i; - break; - } - } - if (!endOffset) - throw Utils.Errors.INVALID_FORMAT; - - mainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR)); - if (mainHeader.commentLength) { - _comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR); - } - readEntries(); - } - - return { - /** - * Returns an array of ZipEntry objects existent in the current opened archive - * @return Array - */ - get entries () { - return entryList; - }, - - /** - * Archive comment - * @return {String} - */ - get comment () { return _comment.toString(); }, - set comment(val) { - mainHeader.commentLength = val.length; - _comment = val; - }, - - /** - * Returns a reference to the entry with the given name or null if entry is inexistent - * - * @param entryName - * @return ZipEntry - */ - getEntry : function(/*String*/entryName) { - return entryTable[entryName] || null; - }, - - /** - * Adds the given entry to the entry list - * - * @param entry - */ - setEntry : function(/*ZipEntry*/entry) { - entryList.push(entry); - entryTable[entry.entryName] = entry; - mainHeader.totalEntries = entryList.length; - }, - - /** - * Removes the entry with the given name from the entry list. - * - * If the entry is a directory, then all nested files and directories will be removed - * @param entryName - */ - deleteEntry : function(/*String*/entryName) { - var entry = entryTable[entryName]; - if (entry && entry.isDirectory) { - var _self = this; - this.getEntryChildren(entry).forEach(function(child) { - if (child.entryName != entryName) { - _self.deleteEntry(child.entryName) - } - }) - } - entryList.splice(entryList.indexOf(entry), 1); - delete(entryTable[entryName]); - mainHeader.totalEntries = entryList.length; - }, - - /** - * Iterates and returns all nested files and directories of the given entry - * - * @param entry - * @return Array - */ - getEntryChildren : function(/*ZipEntry*/entry) { - if (entry.isDirectory) { - var list = [], - name = entry.entryName, - len = name.length; - - entryList.forEach(function(zipEntry) { - if (zipEntry.entryName.substr(0, len) == name) { - list.push(zipEntry); - } - }); - return list; - } - return [] - }, - - /** - * Returns the zip file - * - * @return Buffer - */ - compressToBuffer : function() { - if (entryList.length > 1) { - entryList.sort(function(a, b) { - var nameA = a.entryName.toLowerCase(); - var nameB = b.entryName.toLowerCase(); - if (nameA < nameB) {return -1} - if (nameA > nameB) {return 1} - return 0; - }); - } - - var totalSize = 0, - dataBlock = [], - entryHeaders = [], - dindex = 0; - - mainHeader.size = 0; - mainHeader.offset = 0; - - entryList.forEach(function(entry) { - entry.header.offset = dindex; - - // compress data and set local and entry header accordingly. Reason why is called first - var compressedData = entry.getCompressedData(); - // data header - var dataHeader = entry.header.dataHeaderToBinary(); - var postHeader = new Buffer(entry.entryName + entry.extra.toString()); - var dataLength = dataHeader.length + postHeader.length + compressedData.length; - - dindex += dataLength; - - dataBlock.push(dataHeader); - dataBlock.push(postHeader); - dataBlock.push(compressedData); - - var entryHeader = entry.packHeader(); - entryHeaders.push(entryHeader); - mainHeader.size += entryHeader.length; - totalSize += (dataLength + entryHeader.length); - }); - - totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length - // point to end of data and begining of central directory first record - mainHeader.offset = dindex; - - dindex = 0; - var outBuffer = new Buffer(totalSize); - dataBlock.forEach(function(content) { - content.copy(outBuffer, dindex); // write data blocks - dindex += content.length; - }); - entryHeaders.forEach(function(content) { - content.copy(outBuffer, dindex); // write central directory entries - dindex += content.length; - }); - - var mh = mainHeader.toBinary(); - if (_comment) { - _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment - } - - mh.copy(outBuffer, dindex); // write main header - - return outBuffer - }, - - toAsyncBuffer : function(/*Function*/onSuccess,/*Function*/onFail,/*Function*/onItemStart,/*Function*/onItemEnd) { - if (entryList.length > 1) { - entryList.sort(function(a, b) { - var nameA = a.entryName.toLowerCase(); - var nameB = b.entryName.toLowerCase(); - if (nameA > nameB) {return -1} - if (nameA < nameB) {return 1} - return 0; - }); - } - - var totalSize = 0, - dataBlock = [], - entryHeaders = [], - dindex = 0; - - mainHeader.size = 0; - mainHeader.offset = 0; - - var compress=function(entryList){ - var self=arguments.callee; - var entry; - if(entryList.length){ - var entry=entryList.pop(); - var name=entry.entryName + entry.extra.toString(); - if(onItemStart)onItemStart(name); - entry.getCompressedDataAsync(function(compressedData){ - if(onItemEnd)onItemEnd(name); - - entry.header.offset = dindex; - // data header - var dataHeader = entry.header.dataHeaderToBinary(); - var postHeader = new Buffer(name); - var dataLength = dataHeader.length + postHeader.length + compressedData.length; - - dindex += dataLength; - - dataBlock.push(dataHeader); - dataBlock.push(postHeader); - dataBlock.push(compressedData); - - var entryHeader = entry.packHeader(); - entryHeaders.push(entryHeader); - mainHeader.size += entryHeader.length; - totalSize += (dataLength + entryHeader.length); - - if(entryList.length){ - self(entryList); - }else{ - - - totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length - // point to end of data and begining of central directory first record - mainHeader.offset = dindex; - - dindex = 0; - var outBuffer = new Buffer(totalSize); - dataBlock.forEach(function(content) { - content.copy(outBuffer, dindex); // write data blocks - dindex += content.length; - }); - entryHeaders.forEach(function(content) { - content.copy(outBuffer, dindex); // write central directory entries - dindex += content.length; - }); - - var mh = mainHeader.toBinary(); - if (_comment) { - _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment - } - - mh.copy(outBuffer, dindex); // write main header - - onSuccess(outBuffer); - } - }); - } - }; - - compress(entryList); - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.npmignore deleted file mode 100644 index 13abef4f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.travis.yml deleted file mode 100644 index 895dbd36..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/LICENSE deleted file mode 100644 index 6d03581f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 'Dominic Tarr' - -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/README.md deleted file mode 100644 index 565e0e26..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# stream-combiner - -<img src=https://secure.travis-ci.org/dominictarr/stream-combiner.png?branch=master> - -## Combine (stream1,...,streamN) - -Turn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream -and reads from the last stream. - -Listening for 'error' will recieve errors from all streams inside the pipe. - -``` js - var Combine = require('stream-combiner') - var es = require('event-stream') - - Combine( //connect streams together with `pipe` - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - callback(null - , inspect(JSON.parse(data))) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) -``` - -## License - -MIT diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/index.js deleted file mode 100644 index 99cf5b61..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/index.js +++ /dev/null @@ -1,39 +0,0 @@ -var duplexer = require('duplexer') - -module.exports = function () { - - var streams = [].slice.call(arguments) - , first = streams[0] - , last = streams[streams.length - 1] - , thepipe = duplexer(first, last) - - if(streams.length == 1) - return streams[0] - else if (!streams.length) - throw new Error('connect called with empty args') - - //pipe all the streams together - - function recurse (streams) { - if(streams.length < 2) - return - streams[0].pipe(streams[1]) - recurse(streams.slice(1)) - } - - recurse(streams) - - function onerror () { - var args = [].slice.call(arguments) - args.unshift('error') - thepipe.emit.apply(thepipe, args) - } - - //es.duplex already reemits the error from the first and last stream. - //add a listener for the inner streams in the pipeline. - for(var i = 1; i < streams.length - 1; i ++) - streams[i].on('error', onerror) - - return thepipe -} - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.npmignore deleted file mode 100644 index 062c11e8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -*.err \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.travis.yml deleted file mode 100644 index ed05f88d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" - - "0.8" - - "0.6" diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/LICENCE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/LICENCE deleted file mode 100644 index a23e08a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/README.md deleted file mode 100644 index 61ff71aa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# duplexer - -[![build status][1]][2] [![dependency status][3]][4] - -[![browser support][5]][6] - -Creates a duplex stream - -Taken from [event-stream][7] - -## duplex (writeStream, readStream) - -Takes a writable stream and a readable stream and makes them appear as a readable writable stream. - -It is assumed that the two streams are connected to each other in some way. - -## Example - -```js -var grep = cp.exec('grep Stream') - -duplex(grep.stdin, grep.stdout) -``` - -## Installation - -`npm install duplexer` - -## Tests - -`npm test` - -## Contributors - - - Dominictarr - - Raynos - - samccone - -## MIT Licenced - - [1]: https://secure.travis-ci.org/Raynos/duplexer.png - [2]: https://travis-ci.org/Raynos/duplexer - [3]: https://david-dm.org/Raynos/duplexer.png - [4]: https://david-dm.org/Raynos/duplexer - [5]: https://ci.testling.com/Raynos/duplexer.png - [6]: https://ci.testling.com/Raynos/duplexer - [7]: https://github.com/dominictarr/event-stream#duplex-writestream-readstream diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/index.js deleted file mode 100644 index a188a210..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/index.js +++ /dev/null @@ -1,87 +0,0 @@ -var Stream = require("stream") -var writeMethods = ["write", "end", "destroy"] -var readMethods = ["resume", "pause"] -var readEvents = ["data", "close"] -var slice = Array.prototype.slice - -module.exports = duplex - -function forEach (arr, fn) { - if (arr.forEach) { - return arr.forEach(fn) - } - - for (var i = 0; i < arr.length; i++) { - fn(arr[i], i) - } -} - -function duplex(writer, reader) { - var stream = new Stream() - var ended = false - - forEach(writeMethods, proxyWriter) - - forEach(readMethods, proxyReader) - - forEach(readEvents, proxyStream) - - reader.on("end", handleEnd) - - writer.on("drain", function() { - stream.emit("drain") - }) - - writer.on("error", reemit) - reader.on("error", reemit) - - stream.writable = writer.writable - stream.readable = reader.readable - - return stream - - function proxyWriter(methodName) { - stream[methodName] = method - - function method() { - return writer[methodName].apply(writer, arguments) - } - } - - function proxyReader(methodName) { - stream[methodName] = method - - function method() { - stream.emit(methodName) - var func = reader[methodName] - if (func) { - return func.apply(reader, arguments) - } - reader.emit(methodName) - } - } - - function proxyStream(methodName) { - reader.on(methodName, reemit) - - function reemit() { - var args = slice.call(arguments) - args.unshift(methodName) - stream.emit.apply(stream, args) - } - } - - function handleEnd() { - if (ended) { - return - } - ended = true - var args = slice.call(arguments) - args.unshift("end") - stream.emit.apply(stream, args) - } - - function reemit(err) { - stream.emit("error", err) - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/package.json deleted file mode 100644 index d78e4d07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "duplexer", - "version": "0.1.1", - "description": "Creates a duplex stream", - "keywords": [], - "author": { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - "repository": { - "type": "git", - "url": "git://github.com/Raynos/duplexer.git" - }, - "main": "index", - "homepage": "https://github.com/Raynos/duplexer", - "contributors": [ - { - "name": "Jake Verbaten" - } - ], - "bugs": { - "url": "https://github.com/Raynos/duplexer/issues", - "email": "raynos2@gmail.com" - }, - "devDependencies": { - "tape": "0.3.3", - "through": "~0.1.4" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/Raynos/duplexer/raw/master/LICENSE" - } - ], - "scripts": { - "test": "node test" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "ie/8..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" - ] - }, - "readme": "# duplexer\n\n[![build status][1]][2] [![dependency status][3]][4]\n\n[![browser support][5]][6]\n\nCreates a duplex stream\n\nTaken from [event-stream][7]\n\n## duplex (writeStream, readStream)\n\nTakes a writable stream and a readable stream and makes them appear as a readable writable stream.\n\nIt is assumed that the two streams are connected to each other in some way.\n\n## Example\n\n```js\nvar grep = cp.exec('grep Stream')\n\nduplex(grep.stdin, grep.stdout)\n```\n\n## Installation\n\n`npm install duplexer`\n\n## Tests\n\n`npm test`\n\n## Contributors\n\n - Dominictarr\n - Raynos\n - samccone\n\n## MIT Licenced\n\n [1]: https://secure.travis-ci.org/Raynos/duplexer.png\n [2]: https://travis-ci.org/Raynos/duplexer\n [3]: https://david-dm.org/Raynos/duplexer.png\n [4]: https://david-dm.org/Raynos/duplexer\n [5]: https://ci.testling.com/Raynos/duplexer.png\n [6]: https://ci.testling.com/Raynos/duplexer\n [7]: https://github.com/dominictarr/event-stream#duplex-writestream-readstream\n", - "readmeFilename": "README.md", - "_id": "duplexer@0.1.1", - "dist": { - "shasum": "7fb4a6591c344b842e6f6764796a996ff912e7f4" - }, - "_from": "duplexer@~0.1.1", - "_resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/test/index.js deleted file mode 100644 index 4988e0d9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/test/index.js +++ /dev/null @@ -1,31 +0,0 @@ -var through = require("through") -var test = require("tape") - -var duplex = require("../index") - -var readable = through() -var writable = through(write) -var written = 0 -var data = 0 - -var stream = duplex(writable, readable) - -function write() { - written++ -} - -stream.on("data", ondata) - -function ondata() { - data++ -} - -test("emit and write", function(t) { - t.plan(2) - - stream.write() - readable.emit("data") - - t.equal(written, 1, "should have written once") - t.equal(data, 1, "should have recived once") -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/package.json deleted file mode 100644 index 3a25f682..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "stream-combiner", - "version": "0.0.4", - "homepage": "https://github.com/dominictarr/stream-combiner", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/stream-combiner.git" - }, - "dependencies": { - "duplexer": "~0.1.1" - }, - "devDependencies": { - "tape": "~2.3.0", - "event-stream": "~3.0.7" - }, - "scripts": { - "test": "set -e; for t in test/*.js; do node $t; done" - }, - "author": { - "name": "'Dominic Tarr'", - "email": "dominic.tarr@gmail.com", - "url": "http://dominictarr.com" - }, - "license": "MIT", - "readme": "# stream-combiner\n\n<img src=https://secure.travis-ci.org/dominictarr/stream-combiner.png?branch=master>\n\n## Combine (stream1,...,streamN)\n\nTurn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream\nand reads from the last stream. \n\nListening for 'error' will recieve errors from all streams inside the pipe.\n\n``` js\n var Combine = require('stream-combiner')\n var es = require('event-stream')\n\n Combine( //connect streams together with `pipe`\n process.openStdin(), //open stdin\n es.split(), //split stream to break on newlines\n es.map(function (data, callback) {//turn this async function into a stream\n callback(null\n , inspect(JSON.parse(data))) //render it nicely\n }),\n process.stdout // pipe it to stdout !\n )\n```\n\n## License\n\nMIT\n", - "readmeFilename": "README.md", - "description": "<img src=https://secure.travis-ci.org/dominictarr/stream-combiner.png?branch=master>", - "bugs": { - "url": "https://github.com/dominictarr/stream-combiner/issues" - }, - "_id": "stream-combiner@0.0.4", - "dist": { - "shasum": "0d1c68aea72345d3619884ed3eb44e8a4e583129" - }, - "_from": "stream-combiner@~0.0.2", - "_resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/test/index.js deleted file mode 100644 index d17ddada..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/test/index.js +++ /dev/null @@ -1,52 +0,0 @@ -var es = require('event-stream') -var combine = require('..') -var test = require('tape') - -test('do not duplicate errors', function (test) { - - var errors = 0; - var pipe = combine( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }) - ) - - pipe.on('error', function(err) { - errors++ - test.ok(errors, 'expected error count') - process.nextTick(function () { - return test.end(); - }) - }) - - return pipe.write('meh'); -}) - -test('3 pipe do not duplicate errors', function (test) { - - var errors = 0; - var pipe = combine( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }), - es.through() - ) - - pipe.on('error', function(err) { - errors++ - test.ok(errors, 'expected error count') - process.nextTick(function () { - return test.end(); - }) - }) - - return pipe.write('meh'); - -}) - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.npmignore deleted file mode 100644 index c167ad5b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -.*.swp -node_modules -examples/extract/ -test/tmp/ -test/fixtures/ diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.travis.yml deleted file mode 100644 index 2d26206d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.6 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/LICENCE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/LICENCE deleted file mode 100644 index 74489e2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/LICENCE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) Isaac Z. Schlueter -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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/README.md deleted file mode 100644 index 5bcc82cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# node-tar - -Tar for Node.js. - -[![NPM](https://nodei.co/npm/tar.png)](https://nodei.co/npm/tar/) - -## API - -See `examples/` for usage examples. - -### var tar = require('tar') - -Returns an object with `.Pack`, `.Extract` and `.Parse` methods. - -### tar.Pack([properties]) - -Returns a through stream. Use -[fstream](https://npmjs.org/package/fstream) to write files into the -pack stream and you will receive tar archive data from the pack -stream. - -The optional `properties` object are used to set properties in the tar -'Global Extended Header'. - -### tar.Extract([options]) - -Returns a through stream. Write tar data to the stream and the files -in the tarball will be extracted onto the filesystem. - -`options` can be: - -```js -{ - path: '/path/to/extract/tar/into', - strip: 0, // how many path segments to strip from the root when extracting -} -``` - -`options` also get passed to the `fstream.Writer` instance that `tar` -uses internally. - -### tar.Parse() - -Returns a writable stream. Write tar data to it and it will emit -`entry` events for each entry parsed from the tarball. This is used by -`tar.Extract`. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/extracter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/extracter.js deleted file mode 100644 index e150abf2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/extracter.js +++ /dev/null @@ -1,11 +0,0 @@ -var tar = require("../tar.js") - , fs = require("fs") - -fs.createReadStream(__dirname + "/../test/fixtures/c.tar") - .pipe(tar.Extract({ path: __dirname + "/extract" })) - .on("error", function (er) { - console.error("error here") - }) - .on("end", function () { - console.error("done") - }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/reader.js deleted file mode 100644 index 39f3f088..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/reader.js +++ /dev/null @@ -1,36 +0,0 @@ -var tar = require("../tar.js") - , fs = require("fs") - -fs.createReadStream(__dirname + "/../test/fixtures/c.tar") - .pipe(tar.Parse()) - .on("extendedHeader", function (e) { - console.error("extended pax header", e.props) - e.on("end", function () { - console.error("extended pax fields:", e.fields) - }) - }) - .on("ignoredEntry", function (e) { - console.error("ignoredEntry?!?", e.props) - }) - .on("longLinkpath", function (e) { - console.error("longLinkpath entry", e.props) - e.on("end", function () { - console.error("value=%j", e.body.toString()) - }) - }) - .on("longPath", function (e) { - console.error("longPath entry", e.props) - e.on("end", function () { - console.error("value=%j", e.body.toString()) - }) - }) - .on("entry", function (e) { - console.error("entry", e.props) - e.on("data", function (c) { - console.error(" >>>" + c.toString().replace(/\n/g, "\\n")) - }) - e.on("end", function () { - console.error(" <<<EOF") - }) - }) - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/buffer-entry.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/buffer-entry.js deleted file mode 100644 index 6c1da237..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/buffer-entry.js +++ /dev/null @@ -1,30 +0,0 @@ -// just like the Entry class, but it buffers the contents -// -// XXX It would be good to set a maximum BufferEntry filesize, -// since it eats up memory. In normal operation, -// these are only for long filenames or link names, which are -// rarely very big. - -module.exports = BufferEntry - -var inherits = require("inherits") - , Entry = require("./entry.js") - -function BufferEntry () { - Entry.apply(this, arguments) - this._buffer = new Buffer(this.props.size) - this._offset = 0 - this.body = "" - this.on("end", function () { - this.body = this._buffer.toString().slice(0, -1) - }) -} - -inherits(BufferEntry, Entry) - -// collect the bytes as they come in. -BufferEntry.prototype.write = function (c) { - c.copy(this._buffer, this._offset) - this._offset += c.length - Entry.prototype.write.call(this, c) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry-writer.js deleted file mode 100644 index 8e09042d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry-writer.js +++ /dev/null @@ -1,169 +0,0 @@ -module.exports = EntryWriter - -var tar = require("../tar.js") - , TarHeader = require("./header.js") - , Entry = require("./entry.js") - , inherits = require("inherits") - , BlockStream = require("block-stream") - , ExtendedHeaderWriter - , Stream = require("stream").Stream - , EOF = {} - -inherits(EntryWriter, Stream) - -function EntryWriter (props) { - var me = this - - if (!(me instanceof EntryWriter)) { - return new EntryWriter(props) - } - - Stream.apply(this) - - me.writable = true - me.readable = true - - me._stream = new BlockStream(512) - - me._stream.on("data", function (c) { - me.emit("data", c) - }) - - me._stream.on("drain", function () { - me.emit("drain") - }) - - me._stream.on("end", function () { - me.emit("end") - me.emit("close") - }) - - me.props = props - if (props.type === "Directory") { - props.size = 0 - } - props.ustar = "ustar\0" - props.ustarver = "00" - me.path = props.path - - me._buffer = [] - me._didHeader = false - me._meta = false - - me.on("pipe", function () { - me._process() - }) -} - -EntryWriter.prototype.write = function (c) { - // console.error(".. ew write") - if (this._ended) return this.emit("error", new Error("write after end")) - this._buffer.push(c) - this._process() - this._needDrain = this._buffer.length > 0 - return !this._needDrain -} - -EntryWriter.prototype.end = function (c) { - // console.error(".. ew end") - if (c) this._buffer.push(c) - this._buffer.push(EOF) - this._ended = true - this._process() - this._needDrain = this._buffer.length > 0 -} - -EntryWriter.prototype.pause = function () { - // console.error(".. ew pause") - this._paused = true - this.emit("pause") -} - -EntryWriter.prototype.resume = function () { - // console.error(".. ew resume") - this._paused = false - this.emit("resume") - this._process() -} - -EntryWriter.prototype.add = function (entry) { - // console.error(".. ew add") - if (!this.parent) return this.emit("error", new Error("no parent")) - - // make sure that the _header and such is emitted, and clear out - // the _currentEntry link on the parent. - if (!this._ended) this.end() - - return this.parent.add(entry) -} - -EntryWriter.prototype._header = function () { - // console.error(".. ew header") - if (this._didHeader) return - this._didHeader = true - - var headerBlock = TarHeader.encode(this.props) - - if (this.props.needExtended && !this._meta) { - var me = this - - ExtendedHeaderWriter = ExtendedHeaderWriter || - require("./extended-header-writer.js") - - ExtendedHeaderWriter(this.props) - .on("data", function (c) { - me.emit("data", c) - }) - .on("error", function (er) { - me.emit("error", er) - }) - .end() - } - - // console.error(".. .. ew headerBlock emitting") - this.emit("data", headerBlock) - this.emit("header") -} - -EntryWriter.prototype._process = function () { - // console.error(".. .. ew process") - if (!this._didHeader && !this._meta) { - this._header() - } - - if (this._paused || this._processing) { - // console.error(".. .. .. paused=%j, processing=%j", this._paused, this._processing) - return - } - - this._processing = true - - var buf = this._buffer - for (var i = 0; i < buf.length; i ++) { - // console.error(".. .. .. i=%d", i) - - var c = buf[i] - - if (c === EOF) this._stream.end() - else this._stream.write(c) - - if (this._paused) { - // console.error(".. .. .. paused mid-emission") - this._processing = false - if (i < buf.length) { - this._needDrain = true - this._buffer = buf.slice(i + 1) - } - return - } - } - - // console.error(".. .. .. emitted") - this._buffer.length = 0 - this._processing = false - - // console.error(".. .. .. emitting drain") - this.emit("drain") -} - -EntryWriter.prototype.destroy = function () {} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry.js deleted file mode 100644 index 4af5c410..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry.js +++ /dev/null @@ -1,213 +0,0 @@ -// A passthrough read/write stream that sets its properties -// based on a header, extendedHeader, and globalHeader -// -// Can be either a file system object of some sort, or -// a pax/ustar metadata entry. - -module.exports = Entry - -var TarHeader = require("./header.js") - , tar = require("../tar") - , assert = require("assert").ok - , Stream = require("stream").Stream - , inherits = require("inherits") - , fstream = require("fstream").Abstract - -function Entry (header, extended, global) { - Stream.call(this) - this.readable = true - this.writable = true - - this._needDrain = false - this._paused = false - this._reading = false - this._ending = false - this._ended = false - this._remaining = 0 - this._queue = [] - this._index = 0 - this._queueLen = 0 - - this._read = this._read.bind(this) - - this.props = {} - this._header = header - this._extended = extended || {} - - // globals can change throughout the course of - // a file parse operation. Freeze it at its current state. - this._global = {} - var me = this - Object.keys(global || {}).forEach(function (g) { - me._global[g] = global[g] - }) - - this._setProps() -} - -inherits(Entry, Stream) - -Entry.prototype.write = function (c) { - if (this._ending) this.error("write() after end()", null, true) - if (this._remaining === 0) { - this.error("invalid bytes past eof") - } - - // often we'll get a bunch of \0 at the end of the last write, - // since chunks will always be 512 bytes when reading a tarball. - if (c.length > this._remaining) { - c = c.slice(0, this._remaining) - } - this._remaining -= c.length - - // put it on the stack. - var ql = this._queueLen - this._queue.push(c) - this._queueLen ++ - - this._read() - - // either paused, or buffered - if (this._paused || ql > 0) { - this._needDrain = true - return false - } - - return true -} - -Entry.prototype.end = function (c) { - if (c) this.write(c) - this._ending = true - this._read() -} - -Entry.prototype.pause = function () { - this._paused = true - this.emit("pause") -} - -Entry.prototype.resume = function () { - // console.error(" Tar Entry resume", this.path) - this.emit("resume") - this._paused = false - this._read() - return this._queueLen - this._index > 1 -} - - // This is bound to the instance -Entry.prototype._read = function () { - // console.error(" Tar Entry _read", this.path) - - if (this._paused || this._reading || this._ended) return - - // set this flag so that event handlers don't inadvertently - // get multiple _read() calls running. - this._reading = true - - // have any data to emit? - while (this._index < this._queueLen && !this._paused) { - var chunk = this._queue[this._index ++] - this.emit("data", chunk) - } - - // check if we're drained - if (this._index >= this._queueLen) { - this._queue.length = this._queueLen = this._index = 0 - if (this._needDrain) { - this._needDrain = false - this.emit("drain") - } - if (this._ending) { - this._ended = true - this.emit("end") - } - } - - // if the queue gets too big, then pluck off whatever we can. - // this should be fairly rare. - var mql = this._maxQueueLen - if (this._queueLen > mql && this._index > 0) { - mql = Math.min(this._index, mql) - this._index -= mql - this._queueLen -= mql - this._queue = this._queue.slice(mql) - } - - this._reading = false -} - -Entry.prototype._setProps = function () { - // props = extended->global->header->{} - var header = this._header - , extended = this._extended - , global = this._global - , props = this.props - - // first get the values from the normal header. - var fields = tar.fields - for (var f = 0; fields[f] !== null; f ++) { - var field = fields[f] - , val = header[field] - if (typeof val !== "undefined") props[field] = val - } - - // next, the global header for this file. - // numeric values, etc, will have already been parsed. - ;[global, extended].forEach(function (p) { - Object.keys(p).forEach(function (f) { - if (typeof p[f] !== "undefined") props[f] = p[f] - }) - }) - - // no nulls allowed in path or linkpath - ;["path", "linkpath"].forEach(function (p) { - if (props.hasOwnProperty(p)) { - props[p] = props[p].split("\0")[0] - } - }) - - - // set date fields to be a proper date - ;["mtime", "ctime", "atime"].forEach(function (p) { - if (props.hasOwnProperty(p)) { - props[p] = new Date(props[p] * 1000) - } - }) - - // set the type so that we know what kind of file to create - var type - switch (tar.types[props.type]) { - case "OldFile": - case "ContiguousFile": - type = "File" - break - - case "GNUDumpDir": - type = "Directory" - break - - case undefined: - type = "Unknown" - break - - case "Link": - case "SymbolicLink": - case "CharacterDevice": - case "BlockDevice": - case "Directory": - case "FIFO": - default: - type = tar.types[props.type] - } - - this.type = type - this.path = props.path - this.size = props.size - - // size is special, since it signals when the file needs to end. - this._remaining = props.size -} - -Entry.prototype.warn = fstream.warn -Entry.prototype.error = fstream.error diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header-writer.js deleted file mode 100644 index 1728c458..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header-writer.js +++ /dev/null @@ -1,191 +0,0 @@ - -module.exports = ExtendedHeaderWriter - -var inherits = require("inherits") - , EntryWriter = require("./entry-writer.js") - -inherits(ExtendedHeaderWriter, EntryWriter) - -var tar = require("../tar.js") - , path = require("path") - , TarHeader = require("./header.js") - -// props is the props of the thing we need to write an -// extended header for. -// Don't be shy with it. Just encode everything. -function ExtendedHeaderWriter (props) { - // console.error(">> ehw ctor") - var me = this - - if (!(me instanceof ExtendedHeaderWriter)) { - return new ExtendedHeaderWriter(props) - } - - me.fields = props - - var p = - { path : ("PaxHeader" + path.join("/", props.path || "")) - .replace(/\\/g, "/").substr(0, 100) - , mode : props.mode || 0666 - , uid : props.uid || 0 - , gid : props.gid || 0 - , size : 0 // will be set later - , mtime : props.mtime || Date.now() / 1000 - , type : "x" - , linkpath : "" - , ustar : "ustar\0" - , ustarver : "00" - , uname : props.uname || "" - , gname : props.gname || "" - , devmaj : props.devmaj || 0 - , devmin : props.devmin || 0 - } - - - EntryWriter.call(me, p) - // console.error(">> ehw props", me.props) - me.props = p - - me._meta = true -} - -ExtendedHeaderWriter.prototype.end = function () { - // console.error(">> ehw end") - var me = this - - if (me._ended) return - me._ended = true - - me._encodeFields() - - if (me.props.size === 0) { - // nothing to write! - me._ready = true - me._stream.end() - return - } - - me._stream.write(TarHeader.encode(me.props)) - me.body.forEach(function (l) { - me._stream.write(l) - }) - me._ready = true - - // console.error(">> ehw _process calling end()", me.props) - this._stream.end() -} - -ExtendedHeaderWriter.prototype._encodeFields = function () { - // console.error(">> ehw _encodeFields") - this.body = [] - if (this.fields.prefix) { - this.fields.path = this.fields.prefix + "/" + this.fields.path - this.fields.prefix = "" - } - encodeFields(this.fields, "", this.body, this.fields.noProprietary) - var me = this - this.body.forEach(function (l) { - me.props.size += l.length - }) -} - -function encodeFields (fields, prefix, body, nop) { - // console.error(">> >> ehw encodeFields") - // "%d %s=%s\n", <length>, <keyword>, <value> - // The length is a decimal number, and includes itself and the \n - // Numeric values are decimal strings. - - Object.keys(fields).forEach(function (k) { - var val = fields[k] - , numeric = tar.numeric[k] - - if (prefix) k = prefix + "." + k - - // already including NODETAR.type, don't need File=true also - if (k === fields.type && val === true) return - - switch (k) { - // don't include anything that's always handled just fine - // in the normal header, or only meaningful in the context - // of nodetar - case "mode": - case "cksum": - case "ustar": - case "ustarver": - case "prefix": - case "basename": - case "dirname": - case "needExtended": - case "block": - case "filter": - return - - case "rdev": - if (val === 0) return - break - - case "nlink": - case "dev": // Truly a hero among men, Creator of Star! - case "ino": // Speak his name with reverent awe! It is: - k = "SCHILY." + k - break - - default: break - } - - if (val && typeof val === "object" && - !Buffer.isBuffer(val)) encodeFields(val, k, body, nop) - else if (val === null || val === undefined) return - else body.push.apply(body, encodeField(k, val, nop)) - }) - - return body -} - -function encodeField (k, v, nop) { - // lowercase keys must be valid, otherwise prefix with - // "NODETAR." - if (k.charAt(0) === k.charAt(0).toLowerCase()) { - var m = k.split(".")[0] - if (!tar.knownExtended[m]) k = "NODETAR." + k - } - - // no proprietary - if (nop && k.charAt(0) !== k.charAt(0).toLowerCase()) { - return [] - } - - if (typeof val === "number") val = val.toString(10) - - var s = new Buffer(" " + k + "=" + v + "\n") - , digits = Math.floor(Math.log(s.length) / Math.log(10)) + 1 - - // console.error("1 s=%j digits=%j s.length=%d", s.toString(), digits, s.length) - - // if adding that many digits will make it go over that length, - // then add one to it. For example, if the string is: - // " foo=bar\n" - // then that's 9 characters. With the "9", that bumps the length - // up to 10. However, this is invalid: - // "10 foo=bar\n" - // but, since that's actually 11 characters, since 10 adds another - // character to the length, and the length includes the number - // itself. In that case, just bump it up again. - if (s.length + digits >= Math.pow(10, digits)) digits += 1 - // console.error("2 s=%j digits=%j s.length=%d", s.toString(), digits, s.length) - - var len = digits + s.length - // console.error("3 s=%j digits=%j s.length=%d len=%d", s.toString(), digits, s.length, len) - var lenBuf = new Buffer("" + len) - if (lenBuf.length + s.length !== len) { - throw new Error("Bad length calculation\n"+ - "len="+len+"\n"+ - "lenBuf="+JSON.stringify(lenBuf.toString())+"\n"+ - "lenBuf.length="+lenBuf.length+"\n"+ - "digits="+digits+"\n"+ - "s="+JSON.stringify(s.toString())+"\n"+ - "s.length="+s.length) - } - - return [lenBuf, s] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header.js deleted file mode 100644 index 74f432ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header.js +++ /dev/null @@ -1,140 +0,0 @@ -// An Entry consisting of: -// -// "%d %s=%s\n", <length>, <keyword>, <value> -// -// The length is a decimal number, and includes itself and the \n -// \0 does not terminate anything. Only the length terminates the string. -// Numeric values are decimal strings. - -module.exports = ExtendedHeader - -var Entry = require("./entry.js") - , inherits = require("inherits") - , tar = require("../tar.js") - , numeric = tar.numeric - , keyTrans = { "SCHILY.dev": "dev" - , "SCHILY.ino": "ino" - , "SCHILY.nlink": "nlink" } - -function ExtendedHeader () { - Entry.apply(this, arguments) - this.on("data", this._parse) - this.fields = {} - this._position = 0 - this._fieldPos = 0 - this._state = SIZE - this._sizeBuf = [] - this._keyBuf = [] - this._valBuf = [] - this._size = -1 - this._key = "" -} - -inherits(ExtendedHeader, Entry) -ExtendedHeader.prototype._parse = parse - -var s = 0 - , states = ExtendedHeader.states = {} - , SIZE = states.SIZE = s++ - , KEY = states.KEY = s++ - , VAL = states.VAL = s++ - , ERR = states.ERR = s++ - -Object.keys(states).forEach(function (s) { - states[states[s]] = states[s] -}) - -states[s] = null - -// char code values for comparison -var _0 = "0".charCodeAt(0) - , _9 = "9".charCodeAt(0) - , point = ".".charCodeAt(0) - , a = "a".charCodeAt(0) - , Z = "Z".charCodeAt(0) - , a = "a".charCodeAt(0) - , z = "z".charCodeAt(0) - , space = " ".charCodeAt(0) - , eq = "=".charCodeAt(0) - , cr = "\n".charCodeAt(0) - -function parse (c) { - if (this._state === ERR) return - - for ( var i = 0, l = c.length - ; i < l - ; this._position++, this._fieldPos++, i++) { - // console.error("top of loop, size="+this._size) - - var b = c[i] - - if (this._size >= 0 && this._fieldPos > this._size) { - error(this, "field exceeds length="+this._size) - return - } - - switch (this._state) { - case ERR: return - - case SIZE: - // console.error("parsing size, b=%d, rest=%j", b, c.slice(i).toString()) - if (b === space) { - this._state = KEY - // this._fieldPos = this._sizeBuf.length - this._size = parseInt(new Buffer(this._sizeBuf).toString(), 10) - this._sizeBuf.length = 0 - continue - } - if (b < _0 || b > _9) { - error(this, "expected [" + _0 + ".." + _9 + "], got " + b) - return - } - this._sizeBuf.push(b) - continue - - case KEY: - // can be any char except =, not > size. - if (b === eq) { - this._state = VAL - this._key = new Buffer(this._keyBuf).toString() - if (keyTrans[this._key]) this._key = keyTrans[this._key] - this._keyBuf.length = 0 - continue - } - this._keyBuf.push(b) - continue - - case VAL: - // field must end with cr - if (this._fieldPos === this._size - 1) { - // console.error("finished with "+this._key) - if (b !== cr) { - error(this, "expected \\n at end of field") - return - } - var val = new Buffer(this._valBuf).toString() - if (numeric[this._key]) { - val = parseFloat(val) - } - this.fields[this._key] = val - - this._valBuf.length = 0 - this._state = SIZE - this._size = -1 - this._fieldPos = -1 - continue - } - this._valBuf.push(b) - continue - } - } -} - -function error (me, msg) { - msg = "invalid header: " + msg - + "\nposition=" + me._position - + "\nfield position=" + me._fieldPos - - me.error(msg) - me.state = ERR -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extract.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extract.js deleted file mode 100644 index c34a81e2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extract.js +++ /dev/null @@ -1,78 +0,0 @@ -// give it a tarball and a path, and it'll dump the contents - -module.exports = Extract - -var tar = require("../tar.js") - , fstream = require("fstream") - , inherits = require("inherits") - , path = require("path") - -function Extract (opts) { - if (!(this instanceof Extract)) return new Extract(opts) - tar.Parse.apply(this) - - // have to dump into a directory - opts.type = "Directory" - opts.Directory = true - - if (typeof opts !== "object") { - opts = { path: opts } - } - - // better to drop in cwd? seems more standard. - opts.path = opts.path || path.resolve("node-tar-extract") - opts.type = "Directory" - opts.Directory = true - - // similar to --strip or --strip-components - opts.strip = +opts.strip - if (!opts.strip || opts.strip <= 0) opts.strip = 0 - - this._fst = fstream.Writer(opts) - - this.pause() - var me = this - - // Hardlinks in tarballs are relative to the root - // of the tarball. So, they need to be resolved against - // the target directory in order to be created properly. - me.on("entry", function (entry) { - // if there's a "strip" argument, then strip off that many - // path components. - if (opts.strip) { - var p = entry.path.split("/").slice(opts.strip).join("/") - entry.path = entry.props.path = p - if (entry.linkpath) { - var lp = entry.linkpath.split("/").slice(opts.strip).join("/") - entry.linkpath = entry.props.linkpath = lp - } - } - if (entry.type !== "Link") return - entry.linkpath = entry.props.linkpath = - path.join(opts.path, path.join("/", entry.props.linkpath)) - }) - - this._fst.on("ready", function () { - me.pipe(me._fst, { end: false }) - me.resume() - }) - - // this._fst.on("end", function () { - // console.error("\nEEEE Extract End", me._fst.path) - // }) - - this._fst.on("close", function () { - // console.error("\nEEEE Extract End", me._fst.path) - me.emit("end") - me.emit("close") - }) -} - -inherits(Extract, tar.Parse) - -Extract.prototype._streamEnd = function () { - var me = this - if (!me._ended) me.error("unexpected eof") - me._fst.end() - // my .end() is coming later. -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/global-header-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/global-header-writer.js deleted file mode 100644 index 0bfc7b80..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/global-header-writer.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = GlobalHeaderWriter - -var ExtendedHeaderWriter = require("./extended-header-writer.js") - , inherits = require("inherits") - -inherits(GlobalHeaderWriter, ExtendedHeaderWriter) - -function GlobalHeaderWriter (props) { - if (!(this instanceof GlobalHeaderWriter)) { - return new GlobalHeaderWriter(props) - } - ExtendedHeaderWriter.call(this, props) - this.props.type = "g" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/header.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/header.js deleted file mode 100644 index 05b237c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/header.js +++ /dev/null @@ -1,385 +0,0 @@ -// parse a 512-byte header block to a data object, or vice-versa -// If the data won't fit nicely in a simple header, then generate -// the appropriate extended header file, and return that. - -module.exports = TarHeader - -var tar = require("../tar.js") - , fields = tar.fields - , fieldOffs = tar.fieldOffs - , fieldEnds = tar.fieldEnds - , fieldSize = tar.fieldSize - , numeric = tar.numeric - , assert = require("assert").ok - , space = " ".charCodeAt(0) - , slash = "/".charCodeAt(0) - , bslash = process.platform === "win32" ? "\\".charCodeAt(0) : null - -function TarHeader (block) { - if (!(this instanceof TarHeader)) return new TarHeader(block) - if (block) this.decode(block) -} - -TarHeader.prototype = - { decode : decode - , encode: encode - , calcSum: calcSum - , checkSum: checkSum - } - -TarHeader.parseNumeric = parseNumeric -TarHeader.encode = encode -TarHeader.decode = decode - -// note that this will only do the normal ustar header, not any kind -// of extended posix header file. If something doesn't fit comfortably, -// then it will set obj.needExtended = true, and set the block to -// the closest approximation. -function encode (obj) { - if (!obj && !(this instanceof TarHeader)) throw new Error( - "encode must be called on a TarHeader, or supplied an object") - - obj = obj || this - var block = obj.block = new Buffer(512) - - // if the object has a "prefix", then that's actually an extension of - // the path field. - if (obj.prefix) { - // console.error("%% header encoding, got a prefix", obj.prefix) - obj.path = obj.prefix + "/" + obj.path - // console.error("%% header encoding, prefixed path", obj.path) - obj.prefix = "" - } - - obj.needExtended = false - - if (obj.mode) { - if (typeof obj.mode === "string") obj.mode = parseInt(obj.mode, 8) - obj.mode = obj.mode & 0777 - } - - for (var f = 0; fields[f] !== null; f ++) { - var field = fields[f] - , off = fieldOffs[f] - , end = fieldEnds[f] - , ret - - switch (field) { - case "cksum": - // special, done below, after all the others - break - - case "prefix": - // special, this is an extension of the "path" field. - // console.error("%% header encoding, skip prefix later") - break - - case "type": - // convert from long name to a single char. - var type = obj.type || "0" - if (type.length > 1) { - type = tar.types[obj.type] - if (!type) type = "0" - } - writeText(block, off, end, type) - break - - case "path": - // uses the "prefix" field if > 100 bytes, but <= 255 - var pathLen = Buffer.byteLength(obj.path) - , pathFSize = fieldSize[fields.path] - , prefFSize = fieldSize[fields.prefix] - - // paths between 100 and 255 should use the prefix field. - // longer than 255 - if (pathLen > pathFSize && - pathLen <= pathFSize + prefFSize) { - // need to find a slash somewhere in the middle so that - // path and prefix both fit in their respective fields - var searchStart = pathLen - 1 - pathFSize - , searchEnd = prefFSize - , found = false - , pathBuf = new Buffer(obj.path) - - for ( var s = searchStart - ; (s <= searchEnd) - ; s ++ ) { - if (pathBuf[s] === slash || pathBuf[s] === bslash) { - found = s - break - } - } - - if (found !== false) { - prefix = pathBuf.slice(0, found).toString("utf8") - path = pathBuf.slice(found + 1).toString("utf8") - - ret = writeText(block, off, end, path) - off = fieldOffs[fields.prefix] - end = fieldEnds[fields.prefix] - // console.error("%% header writing prefix", off, end, prefix) - ret = writeText(block, off, end, prefix) || ret - break - } - } - - // paths less than 100 chars don't need a prefix - // and paths longer than 255 need an extended header and will fail - // on old implementations no matter what we do here. - // Null out the prefix, and fallthrough to default. - // console.error("%% header writing no prefix") - var poff = fieldOffs[fields.prefix] - , pend = fieldEnds[fields.prefix] - writeText(block, poff, pend, "") - // fallthrough - - // all other fields are numeric or text - default: - ret = numeric[field] - ? writeNumeric(block, off, end, obj[field]) - : writeText(block, off, end, obj[field] || "") - break - } - obj.needExtended = obj.needExtended || ret - } - - var off = fieldOffs[fields.cksum] - , end = fieldEnds[fields.cksum] - - writeNumeric(block, off, end, calcSum.call(this, block)) - - return block -} - -// if it's a negative number, or greater than will fit, -// then use write256. -var MAXNUM = { 12: 077777777777 - , 11: 07777777777 - , 8 : 07777777 - , 7 : 0777777 } -function writeNumeric (block, off, end, num) { - var writeLen = end - off - , maxNum = MAXNUM[writeLen] || 0 - - num = num || 0 - // console.error(" numeric", num) - - if (num instanceof Date || - Object.prototype.toString.call(num) === "[object Date]") { - num = num.getTime() / 1000 - } - - if (num > maxNum || num < 0) { - write256(block, off, end, num) - // need an extended header if negative or too big. - return true - } - - // god, tar is so annoying - // if the string is small enough, you should put a space - // between the octal string and the \0, but if it doesn't - // fit, then don't. - var numStr = Math.floor(num).toString(8) - if (num < MAXNUM[writeLen - 1]) numStr += " " - - // pad with "0" chars - if (numStr.length < writeLen) { - numStr = (new Array(writeLen - numStr.length).join("0")) + numStr - } - - if (numStr.length !== writeLen - 1) { - throw new Error("invalid length: " + JSON.stringify(numStr) + "\n" + - "expected: "+writeLen) - } - block.write(numStr, off, writeLen, "utf8") - block[end - 1] = 0 -} - -function write256 (block, off, end, num) { - var buf = block.slice(off, end) - var positive = num >= 0 - buf[0] = positive ? 0x80 : 0xFF - - // get the number as a base-256 tuple - if (!positive) num *= -1 - var tuple = [] - do { - var n = num % 256 - tuple.push(n) - num = (num - n) / 256 - } while (num) - - var bytes = tuple.length - - var fill = buf.length - bytes - for (var i = 1; i < fill; i ++) { - buf[i] = positive ? 0 : 0xFF - } - - // tuple is a base256 number, with [0] as the *least* significant byte - // if it's negative, then we need to flip all the bits once we hit the - // first non-zero bit. The 2's-complement is (0x100 - n), and the 1's- - // complement is (0xFF - n). - var zero = true - for (i = bytes; i > 0; i --) { - var byte = tuple[bytes - i] - if (positive) buf[fill + i] = byte - else if (zero && byte === 0) buf[fill + i] = 0 - else if (zero) { - zero = false - buf[fill + i] = 0x100 - byte - } else buf[fill + i] = 0xFF - byte - } -} - -function writeText (block, off, end, str) { - // strings are written as utf8, then padded with \0 - var strLen = Buffer.byteLength(str) - , writeLen = Math.min(strLen, end - off) - // non-ascii fields need extended headers - // long fields get truncated - , needExtended = strLen !== str.length || strLen > writeLen - - // write the string, and null-pad - if (writeLen > 0) block.write(str, off, writeLen, "utf8") - for (var i = off + writeLen; i < end; i ++) block[i] = 0 - - return needExtended -} - -function calcSum (block) { - block = block || this.block - assert(Buffer.isBuffer(block) && block.length === 512) - - if (!block) throw new Error("Need block to checksum") - - // now figure out what it would be if the cksum was " " - var sum = 0 - , start = fieldOffs[fields.cksum] - , end = fieldEnds[fields.cksum] - - for (var i = 0; i < fieldOffs[fields.cksum]; i ++) { - sum += block[i] - } - - for (var i = start; i < end; i ++) { - sum += space - } - - for (var i = end; i < 512; i ++) { - sum += block[i] - } - - return sum -} - - -function checkSum (block) { - var sum = calcSum.call(this, block) - block = block || this.block - - var cksum = block.slice(fieldOffs[fields.cksum], fieldEnds[fields.cksum]) - cksum = parseNumeric(cksum) - - return cksum === sum -} - -function decode (block) { - block = block || this.block - assert(Buffer.isBuffer(block) && block.length === 512) - - this.block = block - this.cksumValid = this.checkSum() - - var prefix = null - - // slice off each field. - for (var f = 0; fields[f] !== null; f ++) { - var field = fields[f] - , val = block.slice(fieldOffs[f], fieldEnds[f]) - - switch (field) { - case "ustar": - // if not ustar, then everything after that is just padding. - if (val.toString() !== "ustar\0") { - this.ustar = false - return - } else { - // console.error("ustar:", val, val.toString()) - this.ustar = val.toString() - } - break - - // prefix is special, since it might signal the xstar header - case "prefix": - var atime = parseNumeric(val.slice(131, 131 + 12)) - , ctime = parseNumeric(val.slice(131 + 12, 131 + 12 + 12)) - if ((val[130] === 0 || val[130] === space) && - typeof atime === "number" && - typeof ctime === "number" && - val[131 + 12] === space && - val[131 + 12 + 12] === space) { - this.atime = atime - this.ctime = ctime - val = val.slice(0, 130) - } - prefix = val.toString("utf8").replace(/\0+$/, "") - // console.error("%% header reading prefix", prefix) - break - - // all other fields are null-padding text - // or a number. - default: - if (numeric[field]) { - this[field] = parseNumeric(val) - } else { - this[field] = val.toString("utf8").replace(/\0+$/, "") - } - break - } - } - - // if we got a prefix, then prepend it to the path. - if (prefix) { - this.path = prefix + "/" + this.path - // console.error("%% header got a prefix", this.path) - } -} - -function parse256 (buf) { - // first byte MUST be either 80 or FF - // 80 for positive, FF for 2's comp - var positive - if (buf[0] === 0x80) positive = true - else if (buf[0] === 0xFF) positive = false - else return null - - // build up a base-256 tuple from the least sig to the highest - var zero = false - , tuple = [] - for (var i = buf.length - 1; i > 0; i --) { - var byte = buf[i] - if (positive) tuple.push(byte) - else if (zero && byte === 0) tuple.push(0) - else if (zero) { - zero = false - tuple.push(0x100 - byte) - } else tuple.push(0xFF - byte) - } - - for (var sum = 0, i = 0, l = tuple.length; i < l; i ++) { - sum += tuple[i] * Math.pow(256, i) - } - - return positive ? sum : -1 * sum -} - -function parseNumeric (f) { - if (f[0] & 0x80) return parse256(f) - - var str = f.toString("utf8").split("\0")[0].trim() - , res = parseInt(str, 8) - - return isNaN(res) ? null : res -} - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/pack.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/pack.js deleted file mode 100644 index 3ff14dd6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/pack.js +++ /dev/null @@ -1,231 +0,0 @@ -// pipe in an fstream, and it'll make a tarball. -// key-value pair argument is global extended header props. - -module.exports = Pack - -var EntryWriter = require("./entry-writer.js") - , Stream = require("stream").Stream - , path = require("path") - , inherits = require("inherits") - , GlobalHeaderWriter = require("./global-header-writer.js") - , collect = require("fstream").collect - , eof = new Buffer(512) - -for (var i = 0; i < 512; i ++) eof[i] = 0 - -inherits(Pack, Stream) - -function Pack (props) { - // console.error("-- p ctor") - var me = this - if (!(me instanceof Pack)) return new Pack(props) - - if (props) me._noProprietary = props.noProprietary - else me._noProprietary = false - - me._global = props - - me.readable = true - me.writable = true - me._buffer = [] - // console.error("-- -- set current to null in ctor") - me._currentEntry = null - me._processing = false - - me._pipeRoot = null - me.on("pipe", function (src) { - if (src.root === me._pipeRoot) return - me._pipeRoot = src - src.on("end", function () { - me._pipeRoot = null - }) - me.add(src) - }) -} - -Pack.prototype.addGlobal = function (props) { - // console.error("-- p addGlobal") - if (this._didGlobal) return - this._didGlobal = true - - var me = this - GlobalHeaderWriter(props) - .on("data", function (c) { - me.emit("data", c) - }) - .end() -} - -Pack.prototype.add = function (stream) { - if (this._global && !this._didGlobal) this.addGlobal(this._global) - - if (this._ended) return this.emit("error", new Error("add after end")) - - collect(stream) - this._buffer.push(stream) - this._process() - this._needDrain = this._buffer.length > 0 - return !this._needDrain -} - -Pack.prototype.pause = function () { - this._paused = true - if (this._currentEntry) this._currentEntry.pause() - this.emit("pause") -} - -Pack.prototype.resume = function () { - this._paused = false - if (this._currentEntry) this._currentEntry.resume() - this.emit("resume") - this._process() -} - -Pack.prototype.end = function () { - this._ended = true - this._buffer.push(eof) - this._process() -} - -Pack.prototype._process = function () { - var me = this - if (me._paused || me._processing) { - return - } - - var entry = me._buffer.shift() - - if (!entry) { - if (me._needDrain) { - me.emit("drain") - } - return - } - - if (entry.ready === false) { - // console.error("-- entry is not ready", entry) - me._buffer.unshift(entry) - entry.on("ready", function () { - // console.error("-- -- ready!", entry) - me._process() - }) - return - } - - me._processing = true - - if (entry === eof) { - // need 2 ending null blocks. - me.emit("data", eof) - me.emit("data", eof) - me.emit("end") - me.emit("close") - return - } - - // Change the path to be relative to the root dir that was - // added to the tarball. - // - // XXX This should be more like how -C works, so you can - // explicitly set a root dir, and also explicitly set a pathname - // in the tarball to use. That way we can skip a lot of extra - // work when resolving symlinks for bundled dependencies in npm. - - var root = path.dirname((entry.root || entry).path) - var wprops = {} - - Object.keys(entry.props || {}).forEach(function (k) { - wprops[k] = entry.props[k] - }) - - if (me._noProprietary) wprops.noProprietary = true - - wprops.path = path.relative(root, entry.path || '') - - // actually not a matter of opinion or taste. - if (process.platform === "win32") { - wprops.path = wprops.path.replace(/\\/g, "/") - } - - if (!wprops.type) - wprops.type = 'Directory' - - switch (wprops.type) { - // sockets not supported - case "Socket": - return - - case "Directory": - wprops.path += "/" - wprops.size = 0 - break - - case "Link": - var lp = path.resolve(path.dirname(entry.path), entry.linkpath) - wprops.linkpath = path.relative(root, lp) || "." - wprops.size = 0 - break - - case "SymbolicLink": - var lp = path.resolve(path.dirname(entry.path), entry.linkpath) - wprops.linkpath = path.relative(path.dirname(entry.path), lp) || "." - wprops.size = 0 - break - } - - // console.error("-- new writer", wprops) - // if (!wprops.type) { - // // console.error("-- no type?", entry.constructor.name, entry) - // } - - // console.error("-- -- set current to new writer", wprops.path) - var writer = me._currentEntry = EntryWriter(wprops) - - writer.parent = me - - // writer.on("end", function () { - // // console.error("-- -- writer end", writer.path) - // }) - - writer.on("data", function (c) { - me.emit("data", c) - }) - - writer.on("header", function () { - Buffer.prototype.toJSON = function () { - return this.toString().split(/\0/).join(".") - } - // console.error("-- -- writer header %j", writer.props) - if (writer.props.size === 0) nextEntry() - }) - writer.on("close", nextEntry) - - var ended = false - function nextEntry () { - if (ended) return - ended = true - - // console.error("-- -- writer close", writer.path) - // console.error("-- -- set current to null", wprops.path) - me._currentEntry = null - me._processing = false - me._process() - } - - writer.on("error", function (er) { - // console.error("-- -- writer error", writer.path) - me.emit("error", er) - }) - - // if it's the root, then there's no need to add its entries, - // or data, since they'll be added directly. - if (entry === me._pipeRoot) { - // console.error("-- is the root, don't auto-add") - writer.add = null - } - - entry.pipe(writer) -} - -Pack.prototype.destroy = function () {} -Pack.prototype.write = function () {} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/parse.js deleted file mode 100644 index 884e73db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/parse.js +++ /dev/null @@ -1,270 +0,0 @@ - -// A writable stream. -// It emits "entry" events, which provide a readable stream that has -// header info attached. - -module.exports = Parse.create = Parse - -var stream = require("stream") - , Stream = stream.Stream - , BlockStream = require("block-stream") - , tar = require("../tar.js") - , TarHeader = require("./header.js") - , Entry = require("./entry.js") - , BufferEntry = require("./buffer-entry.js") - , ExtendedHeader = require("./extended-header.js") - , assert = require("assert").ok - , inherits = require("inherits") - , fstream = require("fstream") - -// reading a tar is a lot like reading a directory -// However, we're actually not going to run the ctor, -// since it does a stat and various other stuff. -// This inheritance gives us the pause/resume/pipe -// behavior that is desired. -inherits(Parse, fstream.Reader) - -function Parse () { - var me = this - if (!(me instanceof Parse)) return new Parse() - - // doesn't apply fstream.Reader ctor? - // no, becasue we don't want to stat/etc, we just - // want to get the entry/add logic from .pipe() - Stream.apply(me) - - me.writable = true - me.readable = true - me._stream = new BlockStream(512) - me.position = 0 - - me._stream.on("error", function (e) { - me.emit("error", e) - }) - - me._stream.on("data", function (c) { - me._process(c) - }) - - me._stream.on("end", function () { - me._streamEnd() - }) - - me._stream.on("drain", function () { - me.emit("drain") - }) -} - -// overridden in Extract class, since it needs to -// wait for its DirWriter part to finish before -// emitting "end" -Parse.prototype._streamEnd = function () { - var me = this - if (!me._ended) me.error("unexpected eof") - me.emit("end") -} - -// a tar reader is actually a filter, not just a readable stream. -// So, you should pipe a tarball stream into it, and it needs these -// write/end methods to do that. -Parse.prototype.write = function (c) { - if (this._ended) { - // gnutar puts a LOT of nulls at the end. - // you can keep writing these things forever. - // Just ignore them. - for (var i = 0, l = c.length; i > l; i ++) { - if (c[i] !== 0) return this.error("write() after end()") - } - return - } - return this._stream.write(c) -} - -Parse.prototype.end = function (c) { - this._ended = true - return this._stream.end(c) -} - -// don't need to do anything, since we're just -// proxying the data up from the _stream. -// Just need to override the parent's "Not Implemented" -// error-thrower. -Parse.prototype._read = function () {} - -Parse.prototype._process = function (c) { - assert(c && c.length === 512, "block size should be 512") - - // one of three cases. - // 1. A new header - // 2. A part of a file/extended header - // 3. One of two or more EOF null blocks - - if (this._entry) { - var entry = this._entry - entry.write(c) - if (entry._remaining === 0) { - entry.end() - this._entry = null - } - } else { - // either zeroes or a header - var zero = true - for (var i = 0; i < 512 && zero; i ++) { - zero = c[i] === 0 - } - - // eof is *at least* 2 blocks of nulls, and then the end of the - // file. you can put blocks of nulls between entries anywhere, - // so appending one tarball to another is technically valid. - // ending without the eof null blocks is not allowed, however. - if (zero) { - this._ended = this._eofStarted - this._eofStarted = true - } else { - this._ended = this._eofStarted = false - this._startEntry(c) - } - - } - - this.position += 512 -} - -// take a header chunk, start the right kind of entry. -Parse.prototype._startEntry = function (c) { - var header = new TarHeader(c) - , self = this - , entry - , ev - , EntryType - , onend - , meta = false - - if (null === header.size || !header.cksumValid) { - var e = new Error("invalid tar file") - e.header = header - e.tar_file_offset = this.position - e.tar_block = this.position / 512 - this.emit("error", e) - } - - switch (tar.types[header.type]) { - case "File": - case "OldFile": - case "Link": - case "SymbolicLink": - case "CharacterDevice": - case "BlockDevice": - case "Directory": - case "FIFO": - case "ContiguousFile": - case "GNUDumpDir": - // start a file. - // pass in any extended headers - // These ones consumers are typically most interested in. - EntryType = Entry - ev = "entry" - break - - case "GlobalExtendedHeader": - // extended headers that apply to the rest of the tarball - EntryType = ExtendedHeader - onend = function () { - self._global = self._global || {} - Object.keys(entry.fields).forEach(function (k) { - self._global[k] = entry.fields[k] - }) - } - ev = "globalExtendedHeader" - meta = true - break - - case "ExtendedHeader": - case "OldExtendedHeader": - // extended headers that apply to the next entry - EntryType = ExtendedHeader - onend = function () { - self._extended = entry.fields - } - ev = "extendedHeader" - meta = true - break - - case "NextFileHasLongLinkpath": - // set linkpath=<contents> in extended header - EntryType = BufferEntry - onend = function () { - self._extended = self._extended || {} - self._extended.linkpath = entry.body - } - ev = "longLinkpath" - meta = true - break - - case "NextFileHasLongPath": - case "OldGnuLongPath": - // set path=<contents> in file-extended header - EntryType = BufferEntry - onend = function () { - self._extended = self._extended || {} - self._extended.path = entry.body - } - ev = "longPath" - meta = true - break - - default: - // all the rest we skip, but still set the _entry - // member, so that we can skip over their data appropriately. - // emit an event to say that this is an ignored entry type? - EntryType = Entry - ev = "ignoredEntry" - break - } - - var global, extended - if (meta) { - global = extended = null - } else { - var global = this._global - var extended = this._extended - - // extendedHeader only applies to one entry, so once we start - // an entry, it's over. - this._extended = null - } - entry = new EntryType(header, extended, global) - entry.meta = meta - - // only proxy data events of normal files. - if (!meta) { - entry.on("data", function (c) { - me.emit("data", c) - }) - } - - if (onend) entry.on("end", onend) - - this._entry = entry - var me = this - - entry.on("pause", function () { - me.pause() - }) - - entry.on("resume", function () { - me.resume() - }) - - if (this.listeners("*").length) { - this.emit("*", ev, entry) - } - - this.emit(ev, entry) - - // Zero-byte entry. End immediately. - if (entry.props.size === 0) { - entry.end() - this._entry = null - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/LICENCE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/LICENCE deleted file mode 100644 index 74489e2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/LICENCE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) Isaac Z. Schlueter -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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/README.md deleted file mode 100644 index c16e9c46..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# block-stream - -A stream of blocks. - -Write data into it, and it'll output data in buffer blocks the size you -specify, padding with zeroes if necessary. - -```javascript -var block = new BlockStream(512) -fs.createReadStream("some-file").pipe(block) -block.pipe(fs.createWriteStream("block-file")) -``` - -When `.end()` or `.flush()` is called, it'll pad the block with zeroes. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream-pause.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream-pause.js deleted file mode 100644 index 9328844a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream-pause.js +++ /dev/null @@ -1,70 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - f.pause() - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - f.resume() - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream.js deleted file mode 100644 index 1141f3a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper-pause.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper-pause.js deleted file mode 100644 index 93e4068e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper-pause.js +++ /dev/null @@ -1,70 +0,0 @@ -var BlockStream = require("dropper") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - f.pause() - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - f.resume() - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper.js deleted file mode 100644 index 55fa1330..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("dropper") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/block-stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/block-stream.js deleted file mode 100644 index 008de035..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/block-stream.js +++ /dev/null @@ -1,209 +0,0 @@ -// write data to it, and it'll emit data in 512 byte blocks. -// if you .end() or .flush(), it'll emit whatever it's got, -// padded with nulls to 512 bytes. - -module.exports = BlockStream - -var Stream = require("stream").Stream - , inherits = require("inherits") - , assert = require("assert").ok - , debug = process.env.DEBUG ? console.error : function () {} - -function BlockStream (size, opt) { - this.writable = this.readable = true - this._opt = opt || {} - this._chunkSize = size || 512 - this._offset = 0 - this._buffer = [] - this._bufferLength = 0 - if (this._opt.nopad) this._zeroes = false - else { - this._zeroes = new Buffer(this._chunkSize) - for (var i = 0; i < this._chunkSize; i ++) { - this._zeroes[i] = 0 - } - } -} - -inherits(BlockStream, Stream) - -BlockStream.prototype.write = function (c) { - // debug(" BS write", c) - if (this._ended) throw new Error("BlockStream: write after end") - if (c && !Buffer.isBuffer(c)) c = new Buffer(c + "") - if (c.length) { - this._buffer.push(c) - this._bufferLength += c.length - } - // debug("pushed onto buffer", this._bufferLength) - if (this._bufferLength >= this._chunkSize) { - if (this._paused) { - // debug(" BS paused, return false, need drain") - this._needDrain = true - return false - } - this._emitChunk() - } - return true -} - -BlockStream.prototype.pause = function () { - // debug(" BS pausing") - this._paused = true -} - -BlockStream.prototype.resume = function () { - // debug(" BS resume") - this._paused = false - return this._emitChunk() -} - -BlockStream.prototype.end = function (chunk) { - // debug("end", chunk) - if (typeof chunk === "function") cb = chunk, chunk = null - if (chunk) this.write(chunk) - this._ended = true - this.flush() -} - -BlockStream.prototype.flush = function () { - this._emitChunk(true) -} - -BlockStream.prototype._emitChunk = function (flush) { - // debug("emitChunk flush=%j emitting=%j paused=%j", flush, this._emitting, this._paused) - - // emit a <chunkSize> chunk - if (flush && this._zeroes) { - // debug(" BS push zeroes", this._bufferLength) - // push a chunk of zeroes - var padBytes = (this._bufferLength % this._chunkSize) - if (padBytes !== 0) padBytes = this._chunkSize - padBytes - if (padBytes > 0) { - // debug("padBytes", padBytes, this._zeroes.slice(0, padBytes)) - this._buffer.push(this._zeroes.slice(0, padBytes)) - this._bufferLength += padBytes - // debug(this._buffer[this._buffer.length - 1].length, this._bufferLength) - } - } - - if (this._emitting || this._paused) return - this._emitting = true - - // debug(" BS entering loops") - var bufferIndex = 0 - while (this._bufferLength >= this._chunkSize && - (flush || !this._paused)) { - // debug(" BS data emission loop", this._bufferLength) - - var out - , outOffset = 0 - , outHas = this._chunkSize - - while (outHas > 0 && (flush || !this._paused) ) { - // debug(" BS data inner emit loop", this._bufferLength) - var cur = this._buffer[bufferIndex] - , curHas = cur.length - this._offset - // debug("cur=", cur) - // debug("curHas=%j", curHas) - // If it's not big enough to fill the whole thing, then we'll need - // to copy multiple buffers into one. However, if it is big enough, - // then just slice out the part we want, to save unnecessary copying. - // Also, need to copy if we've already done some copying, since buffers - // can't be joined like cons strings. - if (out || curHas < outHas) { - out = out || new Buffer(this._chunkSize) - cur.copy(out, outOffset, - this._offset, this._offset + Math.min(curHas, outHas)) - } else if (cur.length === outHas && this._offset === 0) { - // shortcut -- cur is exactly long enough, and no offset. - out = cur - } else { - // slice out the piece of cur that we need. - out = cur.slice(this._offset, this._offset + outHas) - } - - if (curHas > outHas) { - // means that the current buffer couldn't be completely output - // update this._offset to reflect how much WAS written - this._offset += outHas - outHas = 0 - } else { - // output the entire current chunk. - // toss it away - outHas -= curHas - outOffset += curHas - bufferIndex ++ - this._offset = 0 - } - } - - this._bufferLength -= this._chunkSize - assert(out.length === this._chunkSize) - // debug("emitting data", out) - // debug(" BS emitting, paused=%j", this._paused, this._bufferLength) - this.emit("data", out) - out = null - } - // debug(" BS out of loops", this._bufferLength) - - // whatever is left, it's not enough to fill up a block, or we're paused - this._buffer = this._buffer.slice(bufferIndex) - if (this._paused) { - // debug(" BS paused, leaving", this._bufferLength) - this._needsDrain = true - this._emitting = false - return - } - - // if flushing, and not using null-padding, then need to emit the last - // chunk(s) sitting in the queue. We know that it's not enough to - // fill up a whole block, because otherwise it would have been emitted - // above, but there may be some offset. - var l = this._buffer.length - if (flush && !this._zeroes && l) { - if (l === 1) { - if (this._offset) { - this.emit("data", this._buffer[0].slice(this._offset)) - } else { - this.emit("data", this._buffer[0]) - } - } else { - var outHas = this._bufferLength - , out = new Buffer(outHas) - , outOffset = 0 - for (var i = 0; i < l; i ++) { - var cur = this._buffer[i] - , curHas = cur.length - this._offset - cur.copy(out, outOffset, this._offset) - this._offset = 0 - outOffset += curHas - this._bufferLength -= curHas - } - this.emit("data", out) - } - // truncate - this._buffer.length = 0 - this._bufferLength = 0 - this._offset = 0 - } - - // now either drained or ended - // debug("either draining, or ended", this._bufferLength, this._ended) - // means that we've flushed out all that we can so far. - if (this._needDrain) { - // debug("emitting drain", this._bufferLength) - this._needDrain = false - this.emit("drain") - } - - if ((this._bufferLength === 0) && this._ended && !this._endEmitted) { - // debug("emitting end", this._bufferLength) - this._endEmitted = true - this.emit("end") - } - - this._emitting = false - - // debug(" BS no longer emitting", flush, this._paused, this._emitting, this._bufferLength, this._chunkSize) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/package.json deleted file mode 100644 index a9dec954..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "block-stream", - "description": "a stream of blocks", - "version": "0.0.7", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/block-stream.git" - }, - "engines": { - "node": "0.4 || >=0.5.8" - }, - "main": "block-stream.js", - "dependencies": { - "inherits": "~2.0.0" - }, - "devDependencies": { - "tap": "0.x" - }, - "scripts": { - "test": "tap test/" - }, - "license": "BSD", - "readme": "# block-stream\n\nA stream of blocks.\n\nWrite data into it, and it'll output data in buffer blocks the size you\nspecify, padding with zeroes if necessary.\n\n```javascript\nvar block = new BlockStream(512)\nfs.createReadStream(\"some-file\").pipe(block)\nblock.pipe(fs.createWriteStream(\"block-file\"))\n```\n\nWhen `.end()` or `.flush()` is called, it'll pad the block with zeroes.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/block-stream/issues" - }, - "homepage": "https://github.com/isaacs/block-stream", - "_id": "block-stream@0.0.7", - "dist": { - "shasum": "f02594aed4110922c417d5d634b45e55a4ffaefd" - }, - "_from": "block-stream@*", - "_resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/basic.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/basic.js deleted file mode 100644 index b4b93051..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/basic.js +++ /dev/null @@ -1,27 +0,0 @@ -var tap = require("tap") - , BlockStream = require("../block-stream.js") - -tap.test("basic test", function (t) { - var b = new BlockStream(16) - var fs = require("fs") - var fstr = fs.createReadStream(__filename, {encoding: "utf8"}) - fstr.pipe(b) - - var stat - t.doesNotThrow(function () { - stat = fs.statSync(__filename) - }, "stat should not throw") - - var totalBytes = 0 - b.on("data", function (c) { - t.equal(c.length, 16, "chunks should be 16 bytes long") - t.type(c, Buffer, "chunks should be buffer objects") - totalBytes += c.length - }) - b.on("end", function () { - var expectedBytes = stat.size + (16 - stat.size % 16) - t.equal(totalBytes, expectedBytes, "Should be multiple of 16") - t.end() - }) - -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad-thorough.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad-thorough.js deleted file mode 100644 index 7a8de88b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad-thorough.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16]//, 25]//, 1024] - , writeSizes = [4, 15, 16, 17, 64 ]//, 64, 100] - , writeCounts = [1, 10]//, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad.js deleted file mode 100644 index 6d38429f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad.js +++ /dev/null @@ -1,57 +0,0 @@ -var BlockStream = require("../") -var tap = require("tap") - - -tap.test("don't pad, small writes", function (t) { - var f = new BlockStream(16, { nopad: true }) - t.plan(1) - - f.on("data", function (c) { - t.equal(c.toString(), "abc", "should get 'abc'") - }) - - f.on("end", function () { t.end() }) - - f.write(new Buffer("a")) - f.write(new Buffer("b")) - f.write(new Buffer("c")) - f.end() -}) - -tap.test("don't pad, exact write", function (t) { - var f = new BlockStream(16, { nopad: true }) - t.plan(1) - - var first = true - f.on("data", function (c) { - if (first) { - first = false - t.equal(c.toString(), "abcdefghijklmnop", "first chunk") - } else { - t.fail("should only get one") - } - }) - - f.on("end", function () { t.end() }) - - f.end(new Buffer("abcdefghijklmnop")) -}) - -tap.test("don't pad, big write", function (t) { - var f = new BlockStream(16, { nopad: true }) - t.plan(2) - - var first = true - f.on("data", function (c) { - if (first) { - first = false - t.equal(c.toString(), "abcdefghijklmnop", "first chunk") - } else { - t.equal(c.toString(), "q") - } - }) - - f.on("end", function () { t.end() }) - - f.end(new Buffer("abcdefghijklmnopq")) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/pause-resume.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/pause-resume.js deleted file mode 100644 index 64d0d091..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/pause-resume.js +++ /dev/null @@ -1,73 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16] - , writeSizes = [15, 16, 17] - , writeCounts = [1, 10]//, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - var paused = false - - f.on("data", function (c) { - timeouts ++ - t.notOk(paused, "should not be paused when emitting data") - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - paused = true - f.pause() - process.nextTick(function () { - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - paused = false - f.resume() - timeouts -- - }) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = expectChunks * blockSize - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 200) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/thorough.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/thorough.js deleted file mode 100644 index 1cc9ea08..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/thorough.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16]//, 25]//, 1024] - , writeSizes = [4, 15, 16, 17, 64 ]//, 64, 100] - , writeCounts = [1, 10]//, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = expectChunks * blockSize - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/two-stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/two-stream.js deleted file mode 100644 index c6db79a4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/two-stream.js +++ /dev/null @@ -1,59 +0,0 @@ -var log = console.log, - assert = require( 'assert' ), - BlockStream = require("../block-stream.js"), - isize = 0, tsize = 0, fsize = 0, psize = 0, i = 0, - filter = null, paper = null, stack = null, - -// a source data buffer -tsize = 1 * 1024; // <- 1K -stack = new Buffer( tsize ); -for ( ; i < tsize; i++) stack[i] = "x".charCodeAt(0); - -isize = 1 * 1024; // <- initial packet size with 4K no bug! -fsize = 2 * 1024 ; // <- first block-stream size -psize = Math.ceil( isize / 6 ); // <- second block-stream size - -fexpected = Math.ceil( tsize / fsize ); // <- packets expected for first -pexpected = Math.ceil( tsize / psize ); // <- packets expected for second - - -filter = new BlockStream( fsize, { nopad : true } ); -paper = new BlockStream( psize, { nopad : true } ); - - -var fcounter = 0; -filter.on( 'data', function (c) { - // verify that they're not null-padded - for (var i = 0; i < c.length; i ++) { - assert.strictEqual(c[i], "x".charCodeAt(0)) - } - ++fcounter; -} ); - -var pcounter = 0; -paper.on( 'data', function (c) { - // verify that they're not null-padded - for (var i = 0; i < c.length; i ++) { - assert.strictEqual(c[i], "x".charCodeAt(0)) - } - ++pcounter; -} ); - -filter.pipe( paper ); - -filter.on( 'end', function () { - log("fcounter: %s === %s", fcounter, fexpected) - assert.strictEqual( fcounter, fexpected ); -} ); - -paper.on( 'end', function () { - log("pcounter: %s === %s", pcounter, pexpected); - assert.strictEqual( pcounter, pexpected ); -} ); - - -for ( i = 0, j = isize; j <= tsize; j += isize ) { - filter.write( stack.slice( j - isize, j ) ); -} - -filter.end(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.npmignore deleted file mode 100644 index 494272a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -.*.swp -node_modules/ -examples/deep-copy/ -examples/path/ -examples/filter-copy/ diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.travis.yml deleted file mode 100644 index 2d26206d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.6 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/README.md deleted file mode 100644 index 9d8cb77e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/README.md +++ /dev/null @@ -1,76 +0,0 @@ -Like FS streams, but with stat on them, and supporting directories and -symbolic links, as well as normal files. Also, you can use this to set -the stats on a file, even if you don't change its contents, or to create -a symlink, etc. - -So, for example, you can "write" a directory, and it'll call `mkdir`. You -can specify a uid and gid, and it'll call `chown`. You can specify a -`mtime` and `atime`, and it'll call `utimes`. You can call it a symlink -and provide a `linkpath` and it'll call `symlink`. - -Note that it won't automatically resolve symbolic links. So, if you -call `fstream.Reader('/some/symlink')` then you'll get an object -that stats and then ends immediately (since it has no data). To follow -symbolic links, do this: `fstream.Reader({path:'/some/symlink', follow: -true })`. - -There are various checks to make sure that the bytes emitted are the -same as the intended size, if the size is set. - -## Examples - -```javascript -fstream - .Writer({ path: "path/to/file" - , mode: 0755 - , size: 6 - }) - .write("hello\n") - .end() -``` - -This will create the directories if they're missing, and then write -`hello\n` into the file, chmod it to 0755, and assert that 6 bytes have -been written when it's done. - -```javascript -fstream - .Writer({ path: "path/to/file" - , mode: 0755 - , size: 6 - , flags: "a" - }) - .write("hello\n") - .end() -``` - -You can pass flags in, if you want to append to a file. - -```javascript -fstream - .Writer({ path: "path/to/symlink" - , linkpath: "./file" - , SymbolicLink: true - , mode: "0755" // octal strings supported - }) - .end() -``` - -If isSymbolicLink is a function, it'll be called, and if it returns -true, then it'll treat it as a symlink. If it's not a function, then -any truish value will make a symlink, or you can set `type: -'SymbolicLink'`, which does the same thing. - -Note that the linkpath is relative to the symbolic link location, not -the parent dir or cwd. - -```javascript -fstream - .Reader("path/to/dir") - .pipe(fstream.Writer("path/to/other/dir")) -``` - -This will do like `cp -Rp path/to/dir path/to/other/dir`. If the other -dir exists and isn't a directory, then it'll emit an error. It'll also -set the uid, gid, mode, etc. to be identical. In this way, it's more -like `rsync -a` than simply a copy. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/filter-pipe.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/filter-pipe.js deleted file mode 100644 index c6b55b3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/filter-pipe.js +++ /dev/null @@ -1,131 +0,0 @@ -var fstream = require("../fstream.js") -var path = require("path") - -var r = fstream.Reader({ path: path.dirname(__dirname) - , filter: function () { - return !this.basename.match(/^\./) && - !this.basename.match(/^node_modules$/) - !this.basename.match(/^deep-copy$/) - !this.basename.match(/^filter-copy$/) - } - }) - -// this writer will only write directories -var w = fstream.Writer({ path: path.resolve(__dirname, "filter-copy") - , type: "Directory" - , filter: function () { - return this.type === "Directory" - } - }) - -var indent = "" -var escape = {} - -r.on("entry", appears) -r.on("ready", function () { - console.error("ready to begin!", r.path) -}) - -function appears (entry) { - console.error(indent + "a %s appears!", entry.type, entry.basename, typeof entry.basename) - if (foggy) { - console.error("FOGGY!") - var p = entry - do { - console.error(p.depth, p.path, p._paused) - } while (p = p.parent) - - throw new Error("\033[mshould not have entries while foggy") - } - indent += "\t" - entry.on("data", missile(entry)) - entry.on("end", runaway(entry)) - entry.on("entry", appears) -} - -var foggy -function missile (entry) { - if (entry.type === "Directory") { - var ended = false - entry.once("end", function () { ended = true }) - return function (c) { - // throw in some pathological pause()/resume() behavior - // just for extra fun. - process.nextTick(function () { - if (!foggy && !ended) { // && Math.random() < 0.3) { - console.error(indent +"%s casts a spell", entry.basename) - console.error("\na slowing fog comes over the battlefield...\n\033[32m") - entry.pause() - entry.once("resume", liftFog) - foggy = setTimeout(liftFog, 1000) - - function liftFog (who) { - if (!foggy) return - if (who) { - console.error("%s breaks the spell!", who && who.path) - } else { - console.error("the spell expires!") - } - console.error("\033[mthe fog lifts!\n") - clearTimeout(foggy) - foggy = null - if (entry._paused) entry.resume() - } - - } - }) - } - } - - return function (c) { - var e = Math.random() < 0.5 - console.error(indent + "%s %s for %d damage!", - entry.basename, - e ? "is struck" : "fires a chunk", - c.length) - } -} - -function runaway (entry) { return function () { - var e = Math.random() < 0.5 - console.error(indent + "%s %s", - entry.basename, - e ? "turns to flee" : "is vanquished!") - indent = indent.slice(0, -1) -}} - - -w.on("entry", attacks) -//w.on("ready", function () { attacks(w) }) -function attacks (entry) { - console.error(indent + "%s %s!", entry.basename, - entry.type === "Directory" ? "calls for backup" : "attacks") - entry.on("entry", attacks) -} - -ended = false -var i = 1 -r.on("end", function () { - if (foggy) clearTimeout(foggy) - console.error("\033[mIT'S OVER!!") - console.error("A WINNAR IS YOU!") - - console.log("ok " + (i ++) + " A WINNAR IS YOU") - ended = true - // now go through and verify that everything in there is a dir. - var p = path.resolve(__dirname, "filter-copy") - var checker = fstream.Reader({ path: p }) - checker.checker = true - checker.on("child", function (e) { - var ok = e.type === "Directory" - console.log((ok ? "" : "not ") + "ok " + (i ++) + - " should be a dir: " + - e.path.substr(checker.path.length + 1)) - }) -}) - -process.on("exit", function () { - console.log((ended ? "" : "not ") + "ok " + (i ++) + " ended") -}) - -r.pipe(w) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/pipe.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/pipe.js deleted file mode 100644 index 648ec849..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/pipe.js +++ /dev/null @@ -1,115 +0,0 @@ -var fstream = require("../fstream.js") -var path = require("path") - -var r = fstream.Reader({ path: path.dirname(__dirname) - , filter: function () { - return !this.basename.match(/^\./) && - !this.basename.match(/^node_modules$/) - !this.basename.match(/^deep-copy$/) - } - }) - -var w = fstream.Writer({ path: path.resolve(__dirname, "deep-copy") - , type: "Directory" - }) - -var indent = "" -var escape = {} - -r.on("entry", appears) -r.on("ready", function () { - console.error("ready to begin!", r.path) -}) - -function appears (entry) { - console.error(indent + "a %s appears!", entry.type, entry.basename, typeof entry.basename, entry) - if (foggy) { - console.error("FOGGY!") - var p = entry - do { - console.error(p.depth, p.path, p._paused) - } while (p = p.parent) - - throw new Error("\033[mshould not have entries while foggy") - } - indent += "\t" - entry.on("data", missile(entry)) - entry.on("end", runaway(entry)) - entry.on("entry", appears) -} - -var foggy -function missile (entry) { - if (entry.type === "Directory") { - var ended = false - entry.once("end", function () { ended = true }) - return function (c) { - // throw in some pathological pause()/resume() behavior - // just for extra fun. - process.nextTick(function () { - if (!foggy && !ended) { // && Math.random() < 0.3) { - console.error(indent +"%s casts a spell", entry.basename) - console.error("\na slowing fog comes over the battlefield...\n\033[32m") - entry.pause() - entry.once("resume", liftFog) - foggy = setTimeout(liftFog, 10) - - function liftFog (who) { - if (!foggy) return - if (who) { - console.error("%s breaks the spell!", who && who.path) - } else { - console.error("the spell expires!") - } - console.error("\033[mthe fog lifts!\n") - clearTimeout(foggy) - foggy = null - if (entry._paused) entry.resume() - } - - } - }) - } - } - - return function (c) { - var e = Math.random() < 0.5 - console.error(indent + "%s %s for %d damage!", - entry.basename, - e ? "is struck" : "fires a chunk", - c.length) - } -} - -function runaway (entry) { return function () { - var e = Math.random() < 0.5 - console.error(indent + "%s %s", - entry.basename, - e ? "turns to flee" : "is vanquished!") - indent = indent.slice(0, -1) -}} - - -w.on("entry", attacks) -//w.on("ready", function () { attacks(w) }) -function attacks (entry) { - console.error(indent + "%s %s!", entry.basename, - entry.type === "Directory" ? "calls for backup" : "attacks") - entry.on("entry", attacks) -} - -ended = false -r.on("end", function () { - if (foggy) clearTimeout(foggy) - console.error("\033[mIT'S OVER!!") - console.error("A WINNAR IS YOU!") - - console.log("ok 1 A WINNAR IS YOU") - ended = true -}) - -process.on("exit", function () { - console.log((ended ? "" : "not ") + "ok 2 ended") -}) - -r.pipe(w) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/reader.js deleted file mode 100644 index 9aa1a953..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/reader.js +++ /dev/null @@ -1,54 +0,0 @@ -var fstream = require("../fstream.js") -var tap = require("tap") -var fs = require("fs") -var path = require("path") -var children = -1 -var dir = path.dirname(__dirname) - -var gotReady = false -var ended = false - -tap.test("reader test", function (t) { - - var r = fstream.Reader({ path: dir - , filter: function () { - // return this.parent === r - return this.parent === r || this === r - } - }) - - r.on("ready", function () { - gotReady = true - children = fs.readdirSync(dir).length - console.error("Setting expected children to "+children) - t.equal(r.type, "Directory", "should be a directory") - }) - - r.on("entry", function (entry) { - children -- - if (!gotReady) { - t.fail("children before ready!") - } - t.equal(entry.dirname, r.path, "basename is parent dir") - }) - - r.on("error", function (er) { - t.fail(er) - t.end() - process.exit(1) - }) - - r.on("end", function () { - t.equal(children, 0, "should have seen all children") - ended = true - }) - - var closed = false - r.on("close", function () { - t.ok(ended, "saw end before close") - t.notOk(closed, "close should only happen once") - closed = true - t.end() - }) - -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/symlink-write.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/symlink-write.js deleted file mode 100644 index d7816d24..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/symlink-write.js +++ /dev/null @@ -1,24 +0,0 @@ -var fstream = require("../fstream.js") - , closed = false - -fstream - .Writer({ path: "path/to/symlink" - , linkpath: "./file" - , isSymbolicLink: true - , mode: "0755" // octal strings supported - }) - .on("close", function () { - closed = true - var fs = require("fs") - var s = fs.lstatSync("path/to/symlink") - var isSym = s.isSymbolicLink() - console.log((isSym?"":"not ") +"ok 1 should be symlink") - var t = fs.readlinkSync("path/to/symlink") - var isTarget = t === "./file" - console.log((isTarget?"":"not ") +"ok 2 should link to ./file") - }) - .end() - -process.on("exit", function () { - console.log((closed?"":"not ")+"ok 3 should be closed") -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/fstream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/fstream.js deleted file mode 100644 index c66d26f5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/fstream.js +++ /dev/null @@ -1,31 +0,0 @@ -exports.Abstract = require("./lib/abstract.js") -exports.Reader = require("./lib/reader.js") -exports.Writer = require("./lib/writer.js") - -exports.File = - { Reader: require("./lib/file-reader.js") - , Writer: require("./lib/file-writer.js") } - -exports.Dir = - { Reader : require("./lib/dir-reader.js") - , Writer : require("./lib/dir-writer.js") } - -exports.Link = - { Reader : require("./lib/link-reader.js") - , Writer : require("./lib/link-writer.js") } - -exports.Proxy = - { Reader : require("./lib/proxy-reader.js") - , Writer : require("./lib/proxy-writer.js") } - -exports.Reader.Dir = exports.DirReader = exports.Dir.Reader -exports.Reader.File = exports.FileReader = exports.File.Reader -exports.Reader.Link = exports.LinkReader = exports.Link.Reader -exports.Reader.Proxy = exports.ProxyReader = exports.Proxy.Reader - -exports.Writer.Dir = exports.DirWriter = exports.Dir.Writer -exports.Writer.File = exports.FileWriter = exports.File.Writer -exports.Writer.Link = exports.LinkWriter = exports.Link.Writer -exports.Writer.Proxy = exports.ProxyWriter = exports.Proxy.Writer - -exports.collect = require("./lib/collect.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/abstract.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/abstract.js deleted file mode 100644 index 11ef0e28..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/abstract.js +++ /dev/null @@ -1,85 +0,0 @@ -// the parent class for all fstreams. - -module.exports = Abstract - -var Stream = require("stream").Stream - , inherits = require("inherits") - -function Abstract () { - Stream.call(this) -} - -inherits(Abstract, Stream) - -Abstract.prototype.on = function (ev, fn) { - if (ev === "ready" && this.ready) { - process.nextTick(fn.bind(this)) - } else { - Stream.prototype.on.call(this, ev, fn) - } - return this -} - -Abstract.prototype.abort = function () { - this._aborted = true - this.emit("abort") -} - -Abstract.prototype.destroy = function () {} - -Abstract.prototype.warn = function (msg, code) { - var me = this - , er = decorate(msg, code, me) - if (!me.listeners("warn")) { - console.error("%s %s\n" + - "path = %s\n" + - "syscall = %s\n" + - "fstream_type = %s\n" + - "fstream_path = %s\n" + - "fstream_unc_path = %s\n" + - "fstream_class = %s\n" + - "fstream_stack =\n%s\n", - code || "UNKNOWN", - er.stack, - er.path, - er.syscall, - er.fstream_type, - er.fstream_path, - er.fstream_unc_path, - er.fstream_class, - er.fstream_stack.join("\n")) - } else { - me.emit("warn", er) - } -} - -Abstract.prototype.info = function (msg, code) { - this.emit("info", msg, code) -} - -Abstract.prototype.error = function (msg, code, th) { - var er = decorate(msg, code, this) - if (th) throw er - else this.emit("error", er) -} - -function decorate (er, code, me) { - if (!(er instanceof Error)) er = new Error(er) - er.code = er.code || code - er.path = er.path || me.path - er.fstream_type = er.fstream_type || me.type - er.fstream_path = er.fstream_path || me.path - if (me._path !== me.path) { - er.fstream_unc_path = er.fstream_unc_path || me._path - } - if (me.linkpath) { - er.fstream_linkpath = er.fstream_linkpath || me.linkpath - } - er.fstream_class = er.fstream_class || me.constructor.name - er.fstream_stack = er.fstream_stack || - new Error().stack.split(/\n/).slice(3).map(function (s) { - return s.replace(/^ at /, "") - }) - - return er -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/collect.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/collect.js deleted file mode 100644 index a36f780e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/collect.js +++ /dev/null @@ -1,67 +0,0 @@ -module.exports = collect - -function collect (stream) { - if (stream._collected) return - - stream._collected = true - stream.pause() - - stream.on("data", save) - stream.on("end", save) - var buf = [] - function save (b) { - if (typeof b === "string") b = new Buffer(b) - if (Buffer.isBuffer(b) && !b.length) return - buf.push(b) - } - - stream.on("entry", saveEntry) - var entryBuffer = [] - function saveEntry (e) { - collect(e) - entryBuffer.push(e) - } - - stream.on("proxy", proxyPause) - function proxyPause (p) { - p.pause() - } - - - // replace the pipe method with a new version that will - // unlock the buffered stuff. if you just call .pipe() - // without a destination, then it'll re-play the events. - stream.pipe = (function (orig) { return function (dest) { - // console.error(" === open the pipes", dest && dest.path) - - // let the entries flow through one at a time. - // Once they're all done, then we can resume completely. - var e = 0 - ;(function unblockEntry () { - var entry = entryBuffer[e++] - // console.error(" ==== unblock entry", entry && entry.path) - if (!entry) return resume() - entry.on("end", unblockEntry) - if (dest) dest.add(entry) - else stream.emit("entry", entry) - })() - - function resume () { - stream.removeListener("entry", saveEntry) - stream.removeListener("data", save) - stream.removeListener("end", save) - - stream.pipe = orig - if (dest) stream.pipe(dest) - - buf.forEach(function (b) { - if (b) stream.emit("data", b) - else stream.emit("end") - }) - - stream.resume() - } - - return dest - }})(stream.pipe) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-reader.js deleted file mode 100644 index 346ac2b8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-reader.js +++ /dev/null @@ -1,251 +0,0 @@ -// A thing that emits "entry" events with Reader objects -// Pausing it causes it to stop emitting entry events, and also -// pauses the current entry if there is one. - -module.exports = DirReader - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , Reader = fstream.Reader - , inherits = require("inherits") - , mkdir = require("mkdirp") - , path = require("path") - , Reader = require("./reader.js") - , assert = require("assert").ok - -inherits(DirReader, Reader) - -function DirReader (props) { - var me = this - if (!(me instanceof DirReader)) throw new Error( - "DirReader must be called as constructor.") - - // should already be established as a Directory type - if (props.type !== "Directory" || !props.Directory) { - throw new Error("Non-directory type "+ props.type) - } - - me.entries = null - me._index = -1 - me._paused = false - me._length = -1 - - if (props.sort) { - this.sort = props.sort - } - - Reader.call(this, props) -} - -DirReader.prototype._getEntries = function () { - var me = this - - // race condition. might pause() before calling _getEntries, - // and then resume, and try to get them a second time. - if (me._gotEntries) return - me._gotEntries = true - - fs.readdir(me._path, function (er, entries) { - if (er) return me.error(er) - - me.entries = entries - - me.emit("entries", entries) - if (me._paused) me.once("resume", processEntries) - else processEntries() - - function processEntries () { - me._length = me.entries.length - if (typeof me.sort === "function") { - me.entries = me.entries.sort(me.sort.bind(me)) - } - me._read() - } - }) -} - -// start walking the dir, and emit an "entry" event for each one. -DirReader.prototype._read = function () { - var me = this - - if (!me.entries) return me._getEntries() - - if (me._paused || me._currentEntry || me._aborted) { - // console.error("DR paused=%j, current=%j, aborted=%j", me._paused, !!me._currentEntry, me._aborted) - return - } - - me._index ++ - if (me._index >= me.entries.length) { - if (!me._ended) { - me._ended = true - me.emit("end") - me.emit("close") - } - return - } - - // ok, handle this one, then. - - // save creating a proxy, by stat'ing the thing now. - var p = path.resolve(me._path, me.entries[me._index]) - assert(p !== me._path) - assert(me.entries[me._index]) - - // set this to prevent trying to _read() again in the stat time. - me._currentEntry = p - fs[ me.props.follow ? "stat" : "lstat" ](p, function (er, stat) { - if (er) return me.error(er) - - var who = me._proxy || me - - stat.path = p - stat.basename = path.basename(p) - stat.dirname = path.dirname(p) - var childProps = me.getChildProps.call(who, stat) - childProps.path = p - childProps.basename = path.basename(p) - childProps.dirname = path.dirname(p) - - var entry = Reader(childProps, stat) - - // console.error("DR Entry", p, stat.size) - - me._currentEntry = entry - - // "entry" events are for direct entries in a specific dir. - // "child" events are for any and all children at all levels. - // This nomenclature is not completely final. - - entry.on("pause", function (who) { - if (!me._paused && !entry._disowned) { - me.pause(who) - } - }) - - entry.on("resume", function (who) { - if (me._paused && !entry._disowned) { - me.resume(who) - } - }) - - entry.on("stat", function (props) { - me.emit("_entryStat", entry, props) - if (entry._aborted) return - if (entry._paused) entry.once("resume", function () { - me.emit("entryStat", entry, props) - }) - else me.emit("entryStat", entry, props) - }) - - entry.on("ready", function EMITCHILD () { - // console.error("DR emit child", entry._path) - if (me._paused) { - // console.error(" DR emit child - try again later") - // pause the child, and emit the "entry" event once we drain. - // console.error("DR pausing child entry") - entry.pause(me) - return me.once("resume", EMITCHILD) - } - - // skip over sockets. they can't be piped around properly, - // so there's really no sense even acknowledging them. - // if someone really wants to see them, they can listen to - // the "socket" events. - if (entry.type === "Socket") { - me.emit("socket", entry) - } else { - me.emitEntry(entry) - } - }) - - var ended = false - entry.on("close", onend) - entry.on("disown", onend) - function onend () { - if (ended) return - ended = true - me.emit("childEnd", entry) - me.emit("entryEnd", entry) - me._currentEntry = null - if (!me._paused) { - me._read() - } - } - - // XXX Remove this. Works in node as of 0.6.2 or so. - // Long filenames should not break stuff. - entry.on("error", function (er) { - if (entry._swallowErrors) { - me.warn(er) - entry.emit("end") - entry.emit("close") - } else { - me.emit("error", er) - } - }) - - // proxy up some events. - ; [ "child" - , "childEnd" - , "warn" - ].forEach(function (ev) { - entry.on(ev, me.emit.bind(me, ev)) - }) - }) -} - -DirReader.prototype.disown = function (entry) { - entry.emit("beforeDisown") - entry._disowned = true - entry.parent = entry.root = null - if (entry === this._currentEntry) { - this._currentEntry = null - } - entry.emit("disown") -} - -DirReader.prototype.getChildProps = function (stat) { - return { depth: this.depth + 1 - , root: this.root || this - , parent: this - , follow: this.follow - , filter: this.filter - , sort: this.props.sort - , hardlinks: this.props.hardlinks - } -} - -DirReader.prototype.pause = function (who) { - var me = this - if (me._paused) return - who = who || me - me._paused = true - if (me._currentEntry && me._currentEntry.pause) { - me._currentEntry.pause(who) - } - me.emit("pause", who) -} - -DirReader.prototype.resume = function (who) { - var me = this - if (!me._paused) return - who = who || me - - me._paused = false - // console.error("DR Emit Resume", me._path) - me.emit("resume", who) - if (me._paused) { - // console.error("DR Re-paused", me._path) - return - } - - if (me._currentEntry) { - if (me._currentEntry.resume) me._currentEntry.resume(who) - } else me._read() -} - -DirReader.prototype.emitEntry = function (entry) { - this.emit("entry", entry) - this.emit("child", entry) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-writer.js deleted file mode 100644 index 7073b883..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-writer.js +++ /dev/null @@ -1,171 +0,0 @@ -// It is expected that, when .add() returns false, the consumer -// of the DirWriter will pause until a "drain" event occurs. Note -// that this is *almost always going to be the case*, unless the -// thing being written is some sort of unsupported type, and thus -// skipped over. - -module.exports = DirWriter - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , Writer = require("./writer.js") - , inherits = require("inherits") - , mkdir = require("mkdirp") - , path = require("path") - , collect = require("./collect.js") - -inherits(DirWriter, Writer) - -function DirWriter (props) { - var me = this - if (!(me instanceof DirWriter)) me.error( - "DirWriter must be called as constructor.", null, true) - - // should already be established as a Directory type - if (props.type !== "Directory" || !props.Directory) { - me.error("Non-directory type "+ props.type + " " + - JSON.stringify(props), null, true) - } - - Writer.call(this, props) -} - -DirWriter.prototype._create = function () { - var me = this - mkdir(me._path, Writer.dirmode, function (er) { - if (er) return me.error(er) - // ready to start getting entries! - me.ready = true - me.emit("ready") - me._process() - }) -} - -// a DirWriter has an add(entry) method, but its .write() doesn't -// do anything. Why a no-op rather than a throw? Because this -// leaves open the door for writing directory metadata for -// gnu/solaris style dumpdirs. -DirWriter.prototype.write = function () { - return true -} - -DirWriter.prototype.end = function () { - this._ended = true - this._process() -} - -DirWriter.prototype.add = function (entry) { - var me = this - - // console.error("\tadd", entry._path, "->", me._path) - collect(entry) - if (!me.ready || me._currentEntry) { - me._buffer.push(entry) - return false - } - - // create a new writer, and pipe the incoming entry into it. - if (me._ended) { - return me.error("add after end") - } - - me._buffer.push(entry) - me._process() - - return 0 === this._buffer.length -} - -DirWriter.prototype._process = function () { - var me = this - - // console.error("DW Process p=%j", me._processing, me.basename) - - if (me._processing) return - - var entry = me._buffer.shift() - if (!entry) { - // console.error("DW Drain") - me.emit("drain") - if (me._ended) me._finish() - return - } - - me._processing = true - // console.error("DW Entry", entry._path) - - me.emit("entry", entry) - - // ok, add this entry - // - // don't allow recursive copying - var p = entry - do { - var pp = p._path || p.path - if (pp === me.root._path || pp === me._path || - (pp && pp.indexOf(me._path) === 0)) { - // console.error("DW Exit (recursive)", entry.basename, me._path) - me._processing = false - if (entry._collected) entry.pipe() - return me._process() - } - } while (p = p.parent) - - // console.error("DW not recursive") - - // chop off the entry's root dir, replace with ours - var props = { parent: me - , root: me.root || me - , type: entry.type - , depth: me.depth + 1 } - - var p = entry._path || entry.path || entry.props.path - if (entry.parent) { - p = p.substr(entry.parent._path.length + 1) - } - // get rid of any ../../ shenanigans - props.path = path.join(me.path, path.join("/", p)) - - // if i have a filter, the child should inherit it. - props.filter = me.filter - - // all the rest of the stuff, copy over from the source. - Object.keys(entry.props).forEach(function (k) { - if (!props.hasOwnProperty(k)) { - props[k] = entry.props[k] - } - }) - - // not sure at this point what kind of writer this is. - var child = me._currentChild = new Writer(props) - child.on("ready", function () { - // console.error("DW Child Ready", child.type, child._path) - // console.error(" resuming", entry._path) - entry.pipe(child) - entry.resume() - }) - - // XXX Make this work in node. - // Long filenames should not break stuff. - child.on("error", function (er) { - if (child._swallowErrors) { - me.warn(er) - child.emit("end") - child.emit("close") - } else { - me.emit("error", er) - } - }) - - // we fire _end internally *after* end, so that we don't move on - // until any "end" listeners have had their chance to do stuff. - child.on("close", onend) - var ended = false - function onend () { - if (ended) return - ended = true - // console.error("* DW Child end", child.basename) - me._currentChild = null - me._processing = false - me._process() - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-reader.js deleted file mode 100644 index b1f98618..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-reader.js +++ /dev/null @@ -1,147 +0,0 @@ -// Basically just a wrapper around an fs.ReadStream - -module.exports = FileReader - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , Reader = fstream.Reader - , inherits = require("inherits") - , mkdir = require("mkdirp") - , Reader = require("./reader.js") - , EOF = {EOF: true} - , CLOSE = {CLOSE: true} - -inherits(FileReader, Reader) - -function FileReader (props) { - // console.error(" FR create", props.path, props.size, new Error().stack) - var me = this - if (!(me instanceof FileReader)) throw new Error( - "FileReader must be called as constructor.") - - // should already be established as a File type - // XXX Todo: preserve hardlinks by tracking dev+inode+nlink, - // with a HardLinkReader class. - if (!((props.type === "Link" && props.Link) || - (props.type === "File" && props.File))) { - throw new Error("Non-file type "+ props.type) - } - - me._buffer = [] - me._bytesEmitted = 0 - Reader.call(me, props) -} - -FileReader.prototype._getStream = function () { - var me = this - , stream = me._stream = fs.createReadStream(me._path, me.props) - - if (me.props.blksize) { - stream.bufferSize = me.props.blksize - } - - stream.on("open", me.emit.bind(me, "open")) - - stream.on("data", function (c) { - // console.error("\t\t%d %s", c.length, me.basename) - me._bytesEmitted += c.length - // no point saving empty chunks - if (!c.length) return - else if (me._paused || me._buffer.length) { - me._buffer.push(c) - me._read() - } else me.emit("data", c) - }) - - stream.on("end", function () { - if (me._paused || me._buffer.length) { - // console.error("FR Buffering End", me._path) - me._buffer.push(EOF) - me._read() - } else { - me.emit("end") - } - - if (me._bytesEmitted !== me.props.size) { - me.error("Didn't get expected byte count\n"+ - "expect: "+me.props.size + "\n" + - "actual: "+me._bytesEmitted) - } - }) - - stream.on("close", function () { - if (me._paused || me._buffer.length) { - // console.error("FR Buffering Close", me._path) - me._buffer.push(CLOSE) - me._read() - } else { - // console.error("FR close 1", me._path) - me.emit("close") - } - }) - - me._read() -} - -FileReader.prototype._read = function () { - var me = this - // console.error("FR _read", me._path) - if (me._paused) { - // console.error("FR _read paused", me._path) - return - } - - if (!me._stream) { - // console.error("FR _getStream calling", me._path) - return me._getStream() - } - - // clear out the buffer, if there is one. - if (me._buffer.length) { - // console.error("FR _read has buffer", me._buffer.length, me._path) - var buf = me._buffer - for (var i = 0, l = buf.length; i < l; i ++) { - var c = buf[i] - if (c === EOF) { - // console.error("FR Read emitting buffered end", me._path) - me.emit("end") - } else if (c === CLOSE) { - // console.error("FR Read emitting buffered close", me._path) - me.emit("close") - } else { - // console.error("FR Read emitting buffered data", me._path) - me.emit("data", c) - } - - if (me._paused) { - // console.error("FR Read Re-pausing at "+i, me._path) - me._buffer = buf.slice(i) - return - } - } - me._buffer.length = 0 - } - // console.error("FR _read done") - // that's about all there is to it. -} - -FileReader.prototype.pause = function (who) { - var me = this - // console.error("FR Pause", me._path) - if (me._paused) return - who = who || me - me._paused = true - if (me._stream) me._stream.pause() - me.emit("pause", who) -} - -FileReader.prototype.resume = function (who) { - var me = this - // console.error("FR Resume", me._path) - if (!me._paused) return - who = who || me - me.emit("resume", who) - me._paused = false - if (me._stream) me._stream.resume() - me._read() -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-writer.js deleted file mode 100644 index 68114625..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-writer.js +++ /dev/null @@ -1,100 +0,0 @@ -module.exports = FileWriter - -var fs = require("graceful-fs") - , mkdir = require("mkdirp") - , Writer = require("./writer.js") - , inherits = require("inherits") - , EOF = {} - -inherits(FileWriter, Writer) - -function FileWriter (props) { - var me = this - if (!(me instanceof FileWriter)) throw new Error( - "FileWriter must be called as constructor.") - - // should already be established as a File type - if (props.type !== "File" || !props.File) { - throw new Error("Non-file type "+ props.type) - } - - me._buffer = [] - me._bytesWritten = 0 - - Writer.call(this, props) -} - -FileWriter.prototype._create = function () { - var me = this - if (me._stream) return - - var so = {} - if (me.props.flags) so.flags = me.props.flags - so.mode = Writer.filemode - if (me._old && me._old.blksize) so.bufferSize = me._old.blksize - - me._stream = fs.createWriteStream(me._path, so) - - me._stream.on("open", function (fd) { - // console.error("FW open", me._buffer, me._path) - me.ready = true - me._buffer.forEach(function (c) { - if (c === EOF) me._stream.end() - else me._stream.write(c) - }) - me.emit("ready") - // give this a kick just in case it needs it. - me.emit("drain") - }) - - me._stream.on("drain", function () { me.emit("drain") }) - - me._stream.on("close", function () { - // console.error("\n\nFW Stream Close", me._path, me.size) - me._finish() - }) -} - -FileWriter.prototype.write = function (c) { - var me = this - - me._bytesWritten += c.length - - if (!me.ready) { - if (!Buffer.isBuffer(c) && typeof c !== 'string') - throw new Error('invalid write data') - me._buffer.push(c) - return false - } - - var ret = me._stream.write(c) - // console.error("\t-- fw wrote, _stream says", ret, me._stream._queue.length) - - // allow 2 buffered writes, because otherwise there's just too - // much stop and go bs. - return ret || (me._stream._queue && me._stream._queue.length <= 2) -} - -FileWriter.prototype.end = function (c) { - var me = this - - if (c) me.write(c) - - if (!me.ready) { - me._buffer.push(EOF) - return false - } - - return me._stream.end() -} - -FileWriter.prototype._finish = function () { - var me = this - if (typeof me.size === "number" && me._bytesWritten != me.size) { - me.error( - "Did not get expected byte count.\n" + - "expect: " + me.size + "\n" + - "actual: " + me._bytesWritten) - } - Writer.prototype._finish.call(me) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/get-type.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/get-type.js deleted file mode 100644 index cd65c41d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/get-type.js +++ /dev/null @@ -1,32 +0,0 @@ -module.exports = getType - -function getType (st) { - var types = - [ "Directory" - , "File" - , "SymbolicLink" - , "Link" // special for hardlinks from tarballs - , "BlockDevice" - , "CharacterDevice" - , "FIFO" - , "Socket" ] - , type - - if (st.type && -1 !== types.indexOf(st.type)) { - st[st.type] = true - return st.type - } - - for (var i = 0, l = types.length; i < l; i ++) { - type = types[i] - var is = st[type] || st["is" + type] - if (typeof is === "function") is = is.call(st) - if (is) { - st[type] = true - st.type = type - return type - } - } - - return null -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-reader.js deleted file mode 100644 index 7e7ab6ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-reader.js +++ /dev/null @@ -1,54 +0,0 @@ -// Basically just a wrapper around an fs.readlink -// -// XXX: Enhance this to support the Link type, by keeping -// a lookup table of {<dev+inode>:<path>}, so that hardlinks -// can be preserved in tarballs. - -module.exports = LinkReader - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , inherits = require("inherits") - , mkdir = require("mkdirp") - , Reader = require("./reader.js") - -inherits(LinkReader, Reader) - -function LinkReader (props) { - var me = this - if (!(me instanceof LinkReader)) throw new Error( - "LinkReader must be called as constructor.") - - if (!((props.type === "Link" && props.Link) || - (props.type === "SymbolicLink" && props.SymbolicLink))) { - throw new Error("Non-link type "+ props.type) - } - - Reader.call(me, props) -} - -// When piping a LinkReader into a LinkWriter, we have to -// already have the linkpath property set, so that has to -// happen *before* the "ready" event, which means we need to -// override the _stat method. -LinkReader.prototype._stat = function (currentStat) { - var me = this - fs.readlink(me._path, function (er, linkpath) { - if (er) return me.error(er) - me.linkpath = me.props.linkpath = linkpath - me.emit("linkpath", linkpath) - Reader.prototype._stat.call(me, currentStat) - }) -} - -LinkReader.prototype._read = function () { - var me = this - if (me._paused) return - // basically just a no-op, since we got all the info we need - // from the _stat method - if (!me._ended) { - me.emit("end") - me.emit("close") - me._ended = true - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-writer.js deleted file mode 100644 index 5c8f1e70..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-writer.js +++ /dev/null @@ -1,95 +0,0 @@ - -module.exports = LinkWriter - -var fs = require("graceful-fs") - , Writer = require("./writer.js") - , inherits = require("inherits") - , path = require("path") - , rimraf = require("rimraf") - -inherits(LinkWriter, Writer) - -function LinkWriter (props) { - var me = this - if (!(me instanceof LinkWriter)) throw new Error( - "LinkWriter must be called as constructor.") - - // should already be established as a Link type - if (!((props.type === "Link" && props.Link) || - (props.type === "SymbolicLink" && props.SymbolicLink))) { - throw new Error("Non-link type "+ props.type) - } - - if (props.linkpath === "") props.linkpath = "." - if (!props.linkpath) { - me.error("Need linkpath property to create " + props.type) - } - - Writer.call(this, props) -} - -LinkWriter.prototype._create = function () { - // console.error(" LW _create") - var me = this - , hard = me.type === "Link" || process.platform === "win32" - , link = hard ? "link" : "symlink" - , lp = hard ? path.resolve(me.dirname, me.linkpath) : me.linkpath - - // can only change the link path by clobbering - // For hard links, let's just assume that's always the case, since - // there's no good way to read them if we don't already know. - if (hard) return clobber(me, lp, link) - - fs.readlink(me._path, function (er, p) { - // only skip creation if it's exactly the same link - if (p && p === lp) return finish(me) - clobber(me, lp, link) - }) -} - -function clobber (me, lp, link) { - rimraf(me._path, function (er) { - if (er) return me.error(er) - create(me, lp, link) - }) -} - -function create (me, lp, link) { - fs[link](lp, me._path, function (er) { - // if this is a hard link, and we're in the process of writing out a - // directory, it's very possible that the thing we're linking to - // doesn't exist yet (especially if it was intended as a symlink), - // so swallow ENOENT errors here and just soldier in. - // Additionally, an EPERM or EACCES can happen on win32 if it's trying - // to make a link to a directory. Again, just skip it. - // A better solution would be to have fs.symlink be supported on - // windows in some nice fashion. - if (er) { - if ((er.code === "ENOENT" || - er.code === "EACCES" || - er.code === "EPERM" ) && process.platform === "win32") { - me.ready = true - me.emit("ready") - me.emit("end") - me.emit("close") - me.end = me._finish = function () {} - } else return me.error(er) - } - finish(me) - }) -} - -function finish (me) { - me.ready = true - me.emit("ready") - if (me._ended && !me._finished) me._finish() -} - -LinkWriter.prototype.end = function () { - // console.error("LW finish in end") - this._ended = true - if (this.ready) { - this._finished = true - this._finish() - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-reader.js deleted file mode 100644 index a0ece34a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-reader.js +++ /dev/null @@ -1,93 +0,0 @@ -// A reader for when we don't yet know what kind of thing -// the thing is. - -module.exports = ProxyReader - -var Reader = require("./reader.js") - , getType = require("./get-type.js") - , inherits = require("inherits") - , fs = require("graceful-fs") - -inherits(ProxyReader, Reader) - -function ProxyReader (props) { - var me = this - if (!(me instanceof ProxyReader)) throw new Error( - "ProxyReader must be called as constructor.") - - me.props = props - me._buffer = [] - me.ready = false - - Reader.call(me, props) -} - -ProxyReader.prototype._stat = function () { - var me = this - , props = me.props - // stat the thing to see what the proxy should be. - , stat = props.follow ? "stat" : "lstat" - - fs[stat](props.path, function (er, current) { - var type - if (er || !current) { - type = "File" - } else { - type = getType(current) - } - - props[type] = true - props.type = me.type = type - - me._old = current - me._addProxy(Reader(props, current)) - }) -} - -ProxyReader.prototype._addProxy = function (proxy) { - var me = this - if (me._proxyTarget) { - return me.error("proxy already set") - } - - me._proxyTarget = proxy - proxy._proxy = me - - ; [ "error" - , "data" - , "end" - , "close" - , "linkpath" - , "entry" - , "entryEnd" - , "child" - , "childEnd" - , "warn" - , "stat" - ].forEach(function (ev) { - // console.error("~~ proxy event", ev, me.path) - proxy.on(ev, me.emit.bind(me, ev)) - }) - - me.emit("proxy", proxy) - - proxy.on("ready", function () { - // console.error("~~ proxy is ready!", me.path) - me.ready = true - me.emit("ready") - }) - - var calls = me._buffer - me._buffer.length = 0 - calls.forEach(function (c) { - proxy[c[0]].apply(proxy, c[1]) - }) -} - -ProxyReader.prototype.pause = function () { - return this._proxyTarget ? this._proxyTarget.pause() : false -} - -ProxyReader.prototype.resume = function () { - return this._proxyTarget ? this._proxyTarget.resume() : false -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-writer.js deleted file mode 100644 index b0476633..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-writer.js +++ /dev/null @@ -1,109 +0,0 @@ -// A writer for when we don't know what kind of thing -// the thing is. That is, it's not explicitly set, -// so we're going to make it whatever the thing already -// is, or "File" -// -// Until then, collect all events. - -module.exports = ProxyWriter - -var Writer = require("./writer.js") - , getType = require("./get-type.js") - , inherits = require("inherits") - , collect = require("./collect.js") - , fs = require("fs") - -inherits(ProxyWriter, Writer) - -function ProxyWriter (props) { - var me = this - if (!(me instanceof ProxyWriter)) throw new Error( - "ProxyWriter must be called as constructor.") - - me.props = props - me._needDrain = false - - Writer.call(me, props) -} - -ProxyWriter.prototype._stat = function () { - var me = this - , props = me.props - // stat the thing to see what the proxy should be. - , stat = props.follow ? "stat" : "lstat" - - fs[stat](props.path, function (er, current) { - var type - if (er || !current) { - type = "File" - } else { - type = getType(current) - } - - props[type] = true - props.type = me.type = type - - me._old = current - me._addProxy(Writer(props, current)) - }) -} - -ProxyWriter.prototype._addProxy = function (proxy) { - // console.error("~~ set proxy", this.path) - var me = this - if (me._proxy) { - return me.error("proxy already set") - } - - me._proxy = proxy - ; [ "ready" - , "error" - , "close" - , "pipe" - , "drain" - , "warn" - ].forEach(function (ev) { - proxy.on(ev, me.emit.bind(me, ev)) - }) - - me.emit("proxy", proxy) - - var calls = me._buffer - calls.forEach(function (c) { - // console.error("~~ ~~ proxy buffered call", c[0], c[1]) - proxy[c[0]].apply(proxy, c[1]) - }) - me._buffer.length = 0 - if (me._needsDrain) me.emit("drain") -} - -ProxyWriter.prototype.add = function (entry) { - // console.error("~~ proxy add") - collect(entry) - - if (!this._proxy) { - this._buffer.push(["add", [entry]]) - this._needDrain = true - return false - } - return this._proxy.add(entry) -} - -ProxyWriter.prototype.write = function (c) { - // console.error("~~ proxy write") - if (!this._proxy) { - this._buffer.push(["write", [c]]) - this._needDrain = true - return false - } - return this._proxy.write(c) -} - -ProxyWriter.prototype.end = function (c) { - // console.error("~~ proxy end") - if (!this._proxy) { - this._buffer.push(["end", [c]]) - return false - } - return this._proxy.end(c) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/reader.js deleted file mode 100644 index eaf921cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/reader.js +++ /dev/null @@ -1,260 +0,0 @@ - -module.exports = Reader - -var fs = require("graceful-fs") - , Stream = require("stream").Stream - , inherits = require("inherits") - , path = require("path") - , getType = require("./get-type.js") - , hardLinks = Reader.hardLinks = {} - , Abstract = require("./abstract.js") - -// Must do this *before* loading the child classes -inherits(Reader, Abstract) - -var DirReader = require("./dir-reader.js") - , FileReader = require("./file-reader.js") - , LinkReader = require("./link-reader.js") - , SocketReader = require("./socket-reader.js") - , ProxyReader = require("./proxy-reader.js") - -function Reader (props, currentStat) { - var me = this - if (!(me instanceof Reader)) return new Reader(props, currentStat) - - if (typeof props === "string") { - props = { path: props } - } - - if (!props.path) { - me.error("Must provide a path", null, true) - } - - // polymorphism. - // call fstream.Reader(dir) to get a DirReader object, etc. - // Note that, unlike in the Writer case, ProxyReader is going - // to be the *normal* state of affairs, since we rarely know - // the type of a file prior to reading it. - - - var type - , ClassType - - if (props.type && typeof props.type === "function") { - type = props.type - ClassType = type - } else { - type = getType(props) - ClassType = Reader - } - - if (currentStat && !type) { - type = getType(currentStat) - props[type] = true - props.type = type - } - - switch (type) { - case "Directory": - ClassType = DirReader - break - - case "Link": - // XXX hard links are just files. - // However, it would be good to keep track of files' dev+inode - // and nlink values, and create a HardLinkReader that emits - // a linkpath value of the original copy, so that the tar - // writer can preserve them. - // ClassType = HardLinkReader - // break - - case "File": - ClassType = FileReader - break - - case "SymbolicLink": - ClassType = LinkReader - break - - case "Socket": - ClassType = SocketReader - break - - case null: - ClassType = ProxyReader - break - } - - if (!(me instanceof ClassType)) { - return new ClassType(props) - } - - Abstract.call(me) - - me.readable = true - me.writable = false - - me.type = type - me.props = props - me.depth = props.depth = props.depth || 0 - me.parent = props.parent || null - me.root = props.root || (props.parent && props.parent.root) || me - - me._path = me.path = path.resolve(props.path) - if (process.platform === "win32") { - me.path = me._path = me.path.replace(/\?/g, "_") - if (me._path.length >= 260) { - // how DOES one create files on the moon? - // if the path has spaces in it, then UNC will fail. - me._swallowErrors = true - //if (me._path.indexOf(" ") === -1) { - me._path = "\\\\?\\" + me.path.replace(/\//g, "\\") - //} - } - } - me.basename = props.basename = path.basename(me.path) - me.dirname = props.dirname = path.dirname(me.path) - - // these have served their purpose, and are now just noisy clutter - props.parent = props.root = null - - // console.error("\n\n\n%s setting size to", props.path, props.size) - me.size = props.size - me.filter = typeof props.filter === "function" ? props.filter : null - if (props.sort === "alpha") props.sort = alphasort - - // start the ball rolling. - // this will stat the thing, and then call me._read() - // to start reading whatever it is. - // console.error("calling stat", props.path, currentStat) - me._stat(currentStat) -} - -function alphasort (a, b) { - return a === b ? 0 - : a.toLowerCase() > b.toLowerCase() ? 1 - : a.toLowerCase() < b.toLowerCase() ? -1 - : a > b ? 1 - : -1 -} - -Reader.prototype._stat = function (currentStat) { - var me = this - , props = me.props - , stat = props.follow ? "stat" : "lstat" - // console.error("Reader._stat", me._path, currentStat) - if (currentStat) process.nextTick(statCb.bind(null, null, currentStat)) - else fs[stat](me._path, statCb) - - - function statCb (er, props_) { - // console.error("Reader._stat, statCb", me._path, props_, props_.nlink) - if (er) return me.error(er) - - Object.keys(props_).forEach(function (k) { - props[k] = props_[k] - }) - - // if it's not the expected size, then abort here. - if (undefined !== me.size && props.size !== me.size) { - return me.error("incorrect size") - } - me.size = props.size - - var type = getType(props) - var handleHardlinks = props.hardlinks !== false - - // special little thing for handling hardlinks. - if (handleHardlinks && type !== "Directory" && props.nlink && props.nlink > 1) { - var k = props.dev + ":" + props.ino - // console.error("Reader has nlink", me._path, k) - if (hardLinks[k] === me._path || !hardLinks[k]) hardLinks[k] = me._path - else { - // switch into hardlink mode. - type = me.type = me.props.type = "Link" - me.Link = me.props.Link = true - me.linkpath = me.props.linkpath = hardLinks[k] - // console.error("Hardlink detected, switching mode", me._path, me.linkpath) - // Setting __proto__ would arguably be the "correct" - // approach here, but that just seems too wrong. - me._stat = me._read = LinkReader.prototype._read - } - } - - if (me.type && me.type !== type) { - me.error("Unexpected type: " + type) - } - - // if the filter doesn't pass, then just skip over this one. - // still have to emit end so that dir-walking can move on. - if (me.filter) { - var who = me._proxy || me - // special handling for ProxyReaders - if (!me.filter.call(who, who, props)) { - if (!me._disowned) { - me.abort() - me.emit("end") - me.emit("close") - } - return - } - } - - // last chance to abort or disown before the flow starts! - var events = ["_stat", "stat", "ready"] - var e = 0 - ;(function go () { - if (me._aborted) { - me.emit("end") - me.emit("close") - return - } - - if (me._paused) { - me.once("resume", go) - return - } - - var ev = events[e ++] - if (!ev) return me._read() - me.emit(ev, props) - go() - })() - } -} - -Reader.prototype.pipe = function (dest, opts) { - var me = this - if (typeof dest.add === "function") { - // piping to a multi-compatible, and we've got directory entries. - me.on("entry", function (entry) { - var ret = dest.add(entry) - if (false === ret) { - me.pause() - } - }) - } - - // console.error("R Pipe apply Stream Pipe") - return Stream.prototype.pipe.apply(this, arguments) -} - -Reader.prototype.pause = function (who) { - this._paused = true - who = who || this - this.emit("pause", who) - if (this._stream) this._stream.pause(who) -} - -Reader.prototype.resume = function (who) { - this._paused = false - who = who || this - this.emit("resume", who) - if (this._stream) this._stream.resume(who) - this._read() -} - -Reader.prototype._read = function () { - this.error("Cannot read unknown type: "+this.type) -} - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/socket-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/socket-reader.js deleted file mode 100644 index e89c1731..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/socket-reader.js +++ /dev/null @@ -1,38 +0,0 @@ -// Just get the stats, and then don't do anything. -// You can't really "read" from a socket. You "connect" to it. -// Mostly, this is here so that reading a dir with a socket in it -// doesn't blow up. - -module.exports = SocketReader - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , inherits = require("inherits") - , mkdir = require("mkdirp") - , Reader = require("./reader.js") - -inherits(SocketReader, Reader) - -function SocketReader (props) { - var me = this - if (!(me instanceof SocketReader)) throw new Error( - "SocketReader must be called as constructor.") - - if (!(props.type === "Socket" && props.Socket)) { - throw new Error("Non-socket type "+ props.type) - } - - Reader.call(me, props) -} - -SocketReader.prototype._read = function () { - var me = this - if (me._paused) return - // basically just a no-op, since we got all the info we have - // from the _stat method - if (!me._ended) { - me.emit("end") - me.emit("close") - me._ended = true - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/writer.js deleted file mode 100644 index 5599fb22..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/writer.js +++ /dev/null @@ -1,389 +0,0 @@ - -module.exports = Writer - -var fs = require("graceful-fs") - , inherits = require("inherits") - , rimraf = require("rimraf") - , mkdir = require("mkdirp") - , path = require("path") - , umask = process.platform === "win32" ? 0 : process.umask() - , getType = require("./get-type.js") - , Abstract = require("./abstract.js") - -// Must do this *before* loading the child classes -inherits(Writer, Abstract) - -Writer.dirmode = 0777 & (~umask) -Writer.filemode = 0666 & (~umask) - -var DirWriter = require("./dir-writer.js") - , LinkWriter = require("./link-writer.js") - , FileWriter = require("./file-writer.js") - , ProxyWriter = require("./proxy-writer.js") - -// props is the desired state. current is optionally the current stat, -// provided here so that subclasses can avoid statting the target -// more than necessary. -function Writer (props, current) { - var me = this - - if (typeof props === "string") { - props = { path: props } - } - - if (!props.path) me.error("Must provide a path", null, true) - - // polymorphism. - // call fstream.Writer(dir) to get a DirWriter object, etc. - var type = getType(props) - , ClassType = Writer - - switch (type) { - case "Directory": - ClassType = DirWriter - break - case "File": - ClassType = FileWriter - break - case "Link": - case "SymbolicLink": - ClassType = LinkWriter - break - case null: - // Don't know yet what type to create, so we wrap in a proxy. - ClassType = ProxyWriter - break - } - - if (!(me instanceof ClassType)) return new ClassType(props) - - // now get down to business. - - Abstract.call(me) - - // props is what we want to set. - // set some convenience properties as well. - me.type = props.type - me.props = props - me.depth = props.depth || 0 - me.clobber = false === props.clobber ? props.clobber : true - me.parent = props.parent || null - me.root = props.root || (props.parent && props.parent.root) || me - - me._path = me.path = path.resolve(props.path) - if (process.platform === "win32") { - me.path = me._path = me.path.replace(/\?/g, "_") - if (me._path.length >= 260) { - me._swallowErrors = true - me._path = "\\\\?\\" + me.path.replace(/\//g, "\\") - } - } - me.basename = path.basename(props.path) - me.dirname = path.dirname(props.path) - me.linkpath = props.linkpath || null - - props.parent = props.root = null - - // console.error("\n\n\n%s setting size to", props.path, props.size) - me.size = props.size - - if (typeof props.mode === "string") { - props.mode = parseInt(props.mode, 8) - } - - me.readable = false - me.writable = true - - // buffer until ready, or while handling another entry - me._buffer = [] - me.ready = false - - me.filter = typeof props.filter === "function" ? props.filter: null - - // start the ball rolling. - // this checks what's there already, and then calls - // me._create() to call the impl-specific creation stuff. - me._stat(current) -} - -// Calling this means that it's something we can't create. -// Just assert that it's already there, otherwise raise a warning. -Writer.prototype._create = function () { - var me = this - fs[me.props.follow ? "stat" : "lstat"](me._path, function (er, current) { - if (er) { - return me.warn("Cannot create " + me._path + "\n" + - "Unsupported type: "+me.type, "ENOTSUP") - } - me._finish() - }) -} - -Writer.prototype._stat = function (current) { - var me = this - , props = me.props - , stat = props.follow ? "stat" : "lstat" - , who = me._proxy || me - - if (current) statCb(null, current) - else fs[stat](me._path, statCb) - - function statCb (er, current) { - if (me.filter && !me.filter.call(who, who, current)) { - me._aborted = true - me.emit("end") - me.emit("close") - return - } - - // if it's not there, great. We'll just create it. - // if it is there, then we'll need to change whatever differs - if (er || !current) { - return create(me) - } - - me._old = current - var currentType = getType(current) - - // if it's a type change, then we need to clobber or error. - // if it's not a type change, then let the impl take care of it. - if (currentType !== me.type) { - return rimraf(me._path, function (er) { - if (er) return me.error(er) - me._old = null - create(me) - }) - } - - // otherwise, just handle in the app-specific way - // this creates a fs.WriteStream, or mkdir's, or whatever - create(me) - } -} - -function create (me) { - // console.error("W create", me._path, Writer.dirmode) - - // XXX Need to clobber non-dirs that are in the way, - // unless { clobber: false } in the props. - mkdir(path.dirname(me._path), Writer.dirmode, function (er, made) { - // console.error("W created", path.dirname(me._path), er) - if (er) return me.error(er) - - // later on, we have to set the mode and owner for these - me._madeDir = made - return me._create() - }) -} - -function endChmod (me, want, current, path, cb) { - var wantMode = want.mode - , chmod = want.follow || me.type !== "SymbolicLink" - ? "chmod" : "lchmod" - - if (!fs[chmod]) return cb() - if (typeof wantMode !== "number") return cb() - - var curMode = current.mode & 0777 - wantMode = wantMode & 0777 - if (wantMode === curMode) return cb() - - fs[chmod](path, wantMode, cb) -} - - -function endChown (me, want, current, path, cb) { - // Don't even try it unless root. Too easy to EPERM. - if (process.platform === "win32") return cb() - if (!process.getuid || !process.getuid() === 0) return cb() - if (typeof want.uid !== "number" && - typeof want.gid !== "number" ) return cb() - - if (current.uid === want.uid && - current.gid === want.gid) return cb() - - var chown = (me.props.follow || me.type !== "SymbolicLink") - ? "chown" : "lchown" - if (!fs[chown]) return cb() - - if (typeof want.uid !== "number") want.uid = current.uid - if (typeof want.gid !== "number") want.gid = current.gid - - fs[chown](path, want.uid, want.gid, cb) -} - -function endUtimes (me, want, current, path, cb) { - if (!fs.utimes || process.platform === "win32") return cb() - - var utimes = (want.follow || me.type !== "SymbolicLink") - ? "utimes" : "lutimes" - - if (utimes === "lutimes" && !fs[utimes]) { - utimes = "utimes" - } - - if (!fs[utimes]) return cb() - - var curA = current.atime - , curM = current.mtime - , meA = want.atime - , meM = want.mtime - - if (meA === undefined) meA = curA - if (meM === undefined) meM = curM - - if (!isDate(meA)) meA = new Date(meA) - if (!isDate(meM)) meA = new Date(meM) - - if (meA.getTime() === curA.getTime() && - meM.getTime() === curM.getTime()) return cb() - - fs[utimes](path, meA, meM, cb) -} - - -// XXX This function is beastly. Break it up! -Writer.prototype._finish = function () { - var me = this - - // console.error(" W Finish", me._path, me.size) - - // set up all the things. - // At this point, we're already done writing whatever we've gotta write, - // adding files to the dir, etc. - var todo = 0 - var errState = null - var done = false - - if (me._old) { - // the times will almost *certainly* have changed. - // adds the utimes syscall, but remove another stat. - me._old.atime = new Date(0) - me._old.mtime = new Date(0) - // console.error(" W Finish Stale Stat", me._path, me.size) - setProps(me._old) - } else { - var stat = me.props.follow ? "stat" : "lstat" - // console.error(" W Finish Stating", me._path, me.size) - fs[stat](me._path, function (er, current) { - // console.error(" W Finish Stated", me._path, me.size, current) - if (er) { - // if we're in the process of writing out a - // directory, it's very possible that the thing we're linking to - // doesn't exist yet (especially if it was intended as a symlink), - // so swallow ENOENT errors here and just soldier on. - if (er.code === "ENOENT" && - (me.type === "Link" || me.type === "SymbolicLink") && - process.platform === "win32") { - me.ready = true - me.emit("ready") - me.emit("end") - me.emit("close") - me.end = me._finish = function () {} - return - } else return me.error(er) - } - setProps(me._old = current) - }) - } - - return - - function setProps (current) { - todo += 3 - endChmod(me, me.props, current, me._path, next("chmod")) - endChown(me, me.props, current, me._path, next("chown")) - endUtimes(me, me.props, current, me._path, next("utimes")) - } - - function next (what) { - return function (er) { - // console.error(" W Finish", what, todo) - if (errState) return - if (er) { - er.fstream_finish_call = what - return me.error(errState = er) - } - if (--todo > 0) return - if (done) return - done = true - - // we may still need to set the mode/etc. on some parent dirs - // that were created previously. delay end/close until then. - if (!me._madeDir) return end() - else endMadeDir(me, me._path, end) - - function end (er) { - if (er) { - er.fstream_finish_call = "setupMadeDir" - return me.error(er) - } - // all the props have been set, so we're completely done. - me.emit("end") - me.emit("close") - } - } - } -} - -function endMadeDir (me, p, cb) { - var made = me._madeDir - // everything *between* made and path.dirname(me._path) - // needs to be set up. Note that this may just be one dir. - var d = path.dirname(p) - - endMadeDir_(me, d, function (er) { - if (er) return cb(er) - if (d === made) { - return cb() - } - endMadeDir(me, d, cb) - }) -} - -function endMadeDir_ (me, p, cb) { - var dirProps = {} - Object.keys(me.props).forEach(function (k) { - dirProps[k] = me.props[k] - - // only make non-readable dirs if explicitly requested. - if (k === "mode" && me.type !== "Directory") { - dirProps[k] = dirProps[k] | 0111 - } - }) - - var todo = 3 - , errState = null - fs.stat(p, function (er, current) { - if (er) return cb(errState = er) - endChmod(me, dirProps, current, p, next) - endChown(me, dirProps, current, p, next) - endUtimes(me, dirProps, current, p, next) - }) - - function next (er) { - if (errState) return - if (er) return cb(errState = er) - if (-- todo === 0) return cb() - } -} - -Writer.prototype.pipe = function () { - this.error("Can't pipe from writable stream") -} - -Writer.prototype.add = function () { - this.error("Cannot add to non-Directory type") -} - -Writer.prototype.write = function () { - return true -} - -function objectToString (d) { - return Object.prototype.toString.call(d) -} - -function isDate(d) { - return typeof d === 'object' && objectToString(d) === '[object Date]'; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/package.json deleted file mode 100644 index c3b07d0a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "fstream", - "description": "Advanced file system stream things", - "version": "0.1.25", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/fstream.git" - }, - "main": "fstream.js", - "engines": { - "node": ">=0.6" - }, - "dependencies": { - "rimraf": "2", - "mkdirp": "0.3", - "graceful-fs": "~2.0.0", - "inherits": "~2.0.0" - }, - "devDependencies": { - "tap": "" - }, - "scripts": { - "test": "tap examples/*.js" - }, - "license": "BSD", - "readme": "Like FS streams, but with stat on them, and supporting directories and\nsymbolic links, as well as normal files. Also, you can use this to set\nthe stats on a file, even if you don't change its contents, or to create\na symlink, etc.\n\nSo, for example, you can \"write\" a directory, and it'll call `mkdir`. You\ncan specify a uid and gid, and it'll call `chown`. You can specify a\n`mtime` and `atime`, and it'll call `utimes`. You can call it a symlink\nand provide a `linkpath` and it'll call `symlink`.\n\nNote that it won't automatically resolve symbolic links. So, if you\ncall `fstream.Reader('/some/symlink')` then you'll get an object\nthat stats and then ends immediately (since it has no data). To follow\nsymbolic links, do this: `fstream.Reader({path:'/some/symlink', follow:\ntrue })`.\n\nThere are various checks to make sure that the bytes emitted are the\nsame as the intended size, if the size is set.\n\n## Examples\n\n```javascript\nfstream\n .Writer({ path: \"path/to/file\"\n , mode: 0755\n , size: 6\n })\n .write(\"hello\\n\")\n .end()\n```\n\nThis will create the directories if they're missing, and then write\n`hello\\n` into the file, chmod it to 0755, and assert that 6 bytes have\nbeen written when it's done.\n\n```javascript\nfstream\n .Writer({ path: \"path/to/file\"\n , mode: 0755\n , size: 6\n , flags: \"a\"\n })\n .write(\"hello\\n\")\n .end()\n```\n\nYou can pass flags in, if you want to append to a file.\n\n```javascript\nfstream\n .Writer({ path: \"path/to/symlink\"\n , linkpath: \"./file\"\n , SymbolicLink: true\n , mode: \"0755\" // octal strings supported\n })\n .end()\n```\n\nIf isSymbolicLink is a function, it'll be called, and if it returns\ntrue, then it'll treat it as a symlink. If it's not a function, then\nany truish value will make a symlink, or you can set `type:\n'SymbolicLink'`, which does the same thing.\n\nNote that the linkpath is relative to the symbolic link location, not\nthe parent dir or cwd.\n\n```javascript\nfstream\n .Reader(\"path/to/dir\")\n .pipe(fstream.Writer(\"path/to/other/dir\"))\n```\n\nThis will do like `cp -Rp path/to/dir path/to/other/dir`. If the other\ndir exists and isn't a directory, then it'll emit an error. It'll also\nset the uid, gid, mode, etc. to be identical. In this way, it's more\nlike `rsync -a` than simply a copy.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/fstream/issues" - }, - "homepage": "https://github.com/isaacs/fstream", - "_id": "fstream@0.1.25", - "dist": { - "shasum": "cca977eec0cdc5382161b2feeeb567d5f95783b0" - }, - "_from": "fstream@~0.1.8", - "_resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.25.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/LICENSE deleted file mode 100644 index dea3013d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/README.md deleted file mode 100644 index b1c56658..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/README.md +++ /dev/null @@ -1,42 +0,0 @@ -Browser-friendly inheritance fully compatible with standard node.js -[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). - -This package exports standard `inherits` from node.js `util` module in -node environment, but also provides alternative browser-friendly -implementation through [browser -field](https://gist.github.com/shtylman/4339901). Alternative -implementation is a literal copy of standard one located in standalone -module to avoid requiring of `util`. It also has a shim for old -browsers with no `Object.create` support. - -While keeping you sure you are using standard `inherits` -implementation in node.js environment, it allows bundlers such as -[browserify](https://github.com/substack/node-browserify) to not -include full `util` package to your client code if all you need is -just `inherits` function. It worth, because browser shim for `util` -package is large and `inherits` is often the single function you need -from it. - -It's recommended to use this package instead of -`require('util').inherits` for any code that has chances to be used -not only in node.js but in browser too. - -## usage - -```js -var inherits = require('inherits'); -// then use exactly as the standard one -``` - -## note on version ~1.0 - -Version ~1.0 had completely different motivation and is not compatible -neither with 2.0 nor with standard node.js `inherits`. - -If you are using version ~1.0 and planning to switch to ~2.0, be -careful: - -* new version uses `super_` instead of `super` for referencing - superclass -* new version overwrites current prototype while old one preserves any - existing fields on it diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits.js deleted file mode 100644 index 29f5e24f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('util').inherits diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits_browser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits_browser.js deleted file mode 100644 index c1e78a75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits_browser.js +++ /dev/null @@ -1,23 +0,0 @@ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/package.json deleted file mode 100644 index 8b3b563d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "inherits", - "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", - "version": "2.0.1", - "keywords": [ - "inheritance", - "class", - "klass", - "oop", - "object-oriented", - "inherits", - "browser", - "browserify" - ], - "main": "./inherits.js", - "browser": "./inherits_browser.js", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/inherits" - }, - "license": "ISC", - "scripts": { - "test": "node test" - }, - "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n superclass\n* new version overwrites current prototype while old one preserves any\n existing fields on it\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/inherits/issues" - }, - "homepage": "https://github.com/isaacs/inherits", - "_id": "inherits@2.0.1", - "dist": { - "shasum": "b084742f5bd8d0e2e285cb3a8957f7e733389ef2" - }, - "_from": "inherits@2", - "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/test.js deleted file mode 100644 index fc53012d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/test.js +++ /dev/null @@ -1,25 +0,0 @@ -var inherits = require('./inherits.js') -var assert = require('assert') - -function test(c) { - assert(c.constructor === Child) - assert(c.constructor.super_ === Parent) - assert(Object.getPrototypeOf(c) === Child.prototype) - assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype) - assert(c instanceof Child) - assert(c instanceof Parent) -} - -function Child() { - Parent.call(this) - test(this) -} - -function Parent() {} - -inherits(Child, Parent) - -var c = new Child -test(c) - -console.log('ok') diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/package.json deleted file mode 100644 index fd335461..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "tar", - "description": "tar for node", - "version": "0.1.19", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-tar.git" - }, - "main": "tar.js", - "scripts": { - "test": "tap test/*.js" - }, - "dependencies": { - "inherits": "2", - "block-stream": "*", - "fstream": "~0.1.8" - }, - "devDependencies": { - "tap": "0.x", - "rimraf": "1.x" - }, - "license": "BSD", - "readme": "# node-tar\n\nTar for Node.js.\n\n[![NPM](https://nodei.co/npm/tar.png)](https://nodei.co/npm/tar/)\n\n## API\n\nSee `examples/` for usage examples.\n\n### var tar = require('tar')\n\nReturns an object with `.Pack`, `.Extract` and `.Parse` methods.\n\n### tar.Pack([properties])\n\nReturns a through stream. Use\n[fstream](https://npmjs.org/package/fstream) to write files into the\npack stream and you will receive tar archive data from the pack\nstream.\n\nThe optional `properties` object are used to set properties in the tar\n'Global Extended Header'.\n\n### tar.Extract([options])\n\nReturns a through stream. Write tar data to the stream and the files\nin the tarball will be extracted onto the filesystem.\n\n`options` can be:\n\n```js\n{\n path: '/path/to/extract/tar/into',\n strip: 0, // how many path segments to strip from the root when extracting\n}\n```\n\n`options` also get passed to the `fstream.Writer` instance that `tar`\nuses internally.\n\n### tar.Parse()\n\nReturns a writable stream. Write tar data to it and it will emit\n`entry` events for each entry parsed from the tarball. This is used by\n`tar.Extract`.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-tar/issues" - }, - "homepage": "https://github.com/isaacs/node-tar", - "_id": "tar@0.1.19", - "dist": { - "shasum": "bd31a1030d51bfbbbf4b3e174603500389a1250d" - }, - "_from": "tar@~0.1.18", - "_resolved": "https://registry.npmjs.org/tar/-/tar-0.1.19.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/tar.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/tar.js deleted file mode 100644 index a81298b9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/tar.js +++ /dev/null @@ -1,173 +0,0 @@ -// field paths that every tar file must have. -// header is padded to 512 bytes. -var f = 0 - , fields = {} - , path = fields.path = f++ - , mode = fields.mode = f++ - , uid = fields.uid = f++ - , gid = fields.gid = f++ - , size = fields.size = f++ - , mtime = fields.mtime = f++ - , cksum = fields.cksum = f++ - , type = fields.type = f++ - , linkpath = fields.linkpath = f++ - , headerSize = 512 - , blockSize = 512 - , fieldSize = [] - -fieldSize[path] = 100 -fieldSize[mode] = 8 -fieldSize[uid] = 8 -fieldSize[gid] = 8 -fieldSize[size] = 12 -fieldSize[mtime] = 12 -fieldSize[cksum] = 8 -fieldSize[type] = 1 -fieldSize[linkpath] = 100 - -// "ustar\0" may introduce another bunch of headers. -// these are optional, and will be nulled out if not present. - -var ustar = fields.ustar = f++ - , ustarver = fields.ustarver = f++ - , uname = fields.uname = f++ - , gname = fields.gname = f++ - , devmaj = fields.devmaj = f++ - , devmin = fields.devmin = f++ - , prefix = fields.prefix = f++ - , fill = fields.fill = f++ - -// terminate fields. -fields[f] = null - -fieldSize[ustar] = 6 -fieldSize[ustarver] = 2 -fieldSize[uname] = 32 -fieldSize[gname] = 32 -fieldSize[devmaj] = 8 -fieldSize[devmin] = 8 -fieldSize[prefix] = 155 -fieldSize[fill] = 12 - -// nb: prefix field may in fact be 130 bytes of prefix, -// a null char, 12 bytes for atime, 12 bytes for ctime. -// -// To recognize this format: -// 1. prefix[130] === ' ' or '\0' -// 2. atime and ctime are octal numeric values -// 3. atime and ctime have ' ' in their last byte - -var fieldEnds = {} - , fieldOffs = {} - , fe = 0 -for (var i = 0; i < f; i ++) { - fieldOffs[i] = fe - fieldEnds[i] = (fe += fieldSize[i]) -} - -// build a translation table of field paths. -Object.keys(fields).forEach(function (f) { - if (fields[f] !== null) fields[fields[f]] = f -}) - -// different values of the 'type' field -// paths match the values of Stats.isX() functions, where appropriate -var types = - { 0: "File" - , "\0": "OldFile" // like 0 - , "": "OldFile" - , 1: "Link" - , 2: "SymbolicLink" - , 3: "CharacterDevice" - , 4: "BlockDevice" - , 5: "Directory" - , 6: "FIFO" - , 7: "ContiguousFile" // like 0 - // posix headers - , g: "GlobalExtendedHeader" // k=v for the rest of the archive - , x: "ExtendedHeader" // k=v for the next file - // vendor-specific stuff - , A: "SolarisACL" // skip - , D: "GNUDumpDir" // like 5, but with data, which should be skipped - , I: "Inode" // metadata only, skip - , K: "NextFileHasLongLinkpath" // data = link path of next file - , L: "NextFileHasLongPath" // data = path of next file - , M: "ContinuationFile" // skip - , N: "OldGnuLongPath" // like L - , S: "SparseFile" // skip - , V: "TapeVolumeHeader" // skip - , X: "OldExtendedHeader" // like x - } - -Object.keys(types).forEach(function (t) { - types[types[t]] = types[types[t]] || t -}) - -// values for the mode field -var modes = - { suid: 04000 // set uid on extraction - , sgid: 02000 // set gid on extraction - , svtx: 01000 // set restricted deletion flag on dirs on extraction - , uread: 0400 - , uwrite: 0200 - , uexec: 0100 - , gread: 040 - , gwrite: 020 - , gexec: 010 - , oread: 4 - , owrite: 2 - , oexec: 1 - , all: 07777 - } - -var numeric = - { mode: true - , uid: true - , gid: true - , size: true - , mtime: true - , devmaj: true - , devmin: true - , cksum: true - , atime: true - , ctime: true - , dev: true - , ino: true - , nlink: true - } - -Object.keys(modes).forEach(function (t) { - modes[modes[t]] = modes[modes[t]] || t -}) - -var knownExtended = - { atime: true - , charset: true - , comment: true - , ctime: true - , gid: true - , gname: true - , linkpath: true - , mtime: true - , path: true - , realtime: true - , security: true - , size: true - , uid: true - , uname: true } - - -exports.fields = fields -exports.fieldSize = fieldSize -exports.fieldOffs = fieldOffs -exports.fieldEnds = fieldEnds -exports.types = types -exports.modes = modes -exports.numeric = numeric -exports.headerSize = headerSize -exports.blockSize = blockSize -exports.knownExtended = knownExtended - -exports.Pack = require("./lib/pack.js") -exports.Parse = require("./lib/parse.js") -exports.Extract = require("./lib/extract.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/00-setup-fixtures.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/00-setup-fixtures.js deleted file mode 100644 index 1524ff7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/00-setup-fixtures.js +++ /dev/null @@ -1,53 +0,0 @@ -// the fixtures have some weird stuff that is painful -// to include directly in the repo for various reasons. -// -// So, unpack the fixtures with the system tar first. -// -// This means, of course, that it'll only work if you -// already have a tar implementation, and some of them -// will not properly unpack the fixtures anyway. -// -// But, since usually those tests will fail on Windows -// and other systems with less capable filesystems anyway, -// at least this way we don't cause inconveniences by -// merely cloning the repo or installing the package. - -var tap = require("tap") -, child_process = require("child_process") -, rimraf = require("rimraf") -, test = tap.test -, path = require("path") - -test("clean fixtures", function (t) { - rimraf(path.resolve(__dirname, "fixtures"), function (er) { - t.ifError(er, "rimraf ./fixtures/") - t.end() - }) -}) - -test("clean tmp", function (t) { - rimraf(path.resolve(__dirname, "tmp"), function (er) { - t.ifError(er, "rimraf ./tmp/") - t.end() - }) -}) - -test("extract fixtures", function (t) { - var c = child_process.spawn("tar" - ,["xzvf", "fixtures.tgz"] - ,{ cwd: __dirname }) - - c.stdout.on("data", errwrite) - c.stderr.on("data", errwrite) - function errwrite (chunk) { - process.stderr.write(chunk) - } - - c.on("exit", function (code) { - t.equal(code, 0, "extract fixtures should exit with 0") - if (code) { - t.comment("Note, all tests from here on out will fail because of this.") - } - t.end() - }) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/extract.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/extract.js deleted file mode 100644 index fff48181..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/extract.js +++ /dev/null @@ -1,358 +0,0 @@ -var tap = require("tap") - , tar = require("../tar.js") - , fs = require("fs") - , path = require("path") - , file = path.resolve(__dirname, "fixtures/c.tar") - , target = path.resolve(__dirname, "tmp/extract-test") - , index = 0 - , fstream = require("fstream") - - , ee = 0 - , expectEntries = -[ { path: 'c.txt', - mode: '644', - type: '0', - depth: undefined, - size: 513, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'cc.txt', - mode: '644', - type: '0', - depth: undefined, - size: 513, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 100, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'Ω.txt', - mode: '644', - type: '0', - depth: undefined, - size: 2, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'Ω.txt', - mode: '644', - type: '0', - depth: undefined, - size: 2, - linkpath: '', - nlink: 1, - dev: 234881026, - ino: 51693379 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 200, - linkpath: '', - nlink: 1, - dev: 234881026, - ino: 51681874 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 201, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: '777', - type: '2', - depth: undefined, - size: 0, - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: '200-hard', - mode: '644', - type: '0', - depth: undefined, - size: 200, - linkpath: '', - nlink: 2, - dev: 234881026, - ino: 51681874 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '1', - depth: undefined, - size: 0, - linkpath: path.resolve(target, '200-hard'), - nlink: 2, - dev: 234881026, - ino: 51681874 } ] - - , ef = 0 - , expectFiles = -[ { path: '', - mode: '40755', - type: 'Directory', - depth: 0, - linkpath: undefined }, - { path: '/200-hard', - mode: '100644', - type: 'File', - depth: 1, - size: 200, - linkpath: undefined, - nlink: 2 }, - { path: '/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '100644', - type: 'Link', - depth: 1, - size: 200, - linkpath: path.join(target, '200-hard'), - nlink: 2 }, - { path: '/200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: '120777', - type: 'SymbolicLink', - depth: 1, - size: 200, - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - nlink: 1 }, - { path: '/c.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 513, - linkpath: undefined, - nlink: 1 }, - { path: '/cc.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 513, - linkpath: undefined, - nlink: 1 }, - { path: '/r', - mode: '40755', - type: 'Directory', - depth: 1, - linkpath: undefined }, - { path: '/r/e', - mode: '40755', - type: 'Directory', - depth: 2, - linkpath: undefined }, - { path: '/r/e/a', - mode: '40755', - type: 'Directory', - depth: 3, - linkpath: undefined }, - { path: '/r/e/a/l', - mode: '40755', - type: 'Directory', - depth: 4, - linkpath: undefined }, - { path: '/r/e/a/l/l', - mode: '40755', - type: 'Directory', - depth: 5, - linkpath: undefined }, - { path: '/r/e/a/l/l/y', - mode: '40755', - type: 'Directory', - depth: 6, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-', - mode: '40755', - type: 'Directory', - depth: 7, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d', - mode: '40755', - type: 'Directory', - depth: 8, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e', - mode: '40755', - type: 'Directory', - depth: 9, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e', - mode: '40755', - type: 'Directory', - depth: 10, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p', - mode: '40755', - type: 'Directory', - depth: 11, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-', - mode: '40755', - type: 'Directory', - depth: 12, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f', - mode: '40755', - type: 'Directory', - depth: 13, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o', - mode: '40755', - type: 'Directory', - depth: 14, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l', - mode: '40755', - type: 'Directory', - depth: 15, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d', - mode: '40755', - type: 'Directory', - depth: 16, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e', - mode: '40755', - type: 'Directory', - depth: 17, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r', - mode: '40755', - type: 'Directory', - depth: 18, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-', - mode: '40755', - type: 'Directory', - depth: 19, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p', - mode: '40755', - type: 'Directory', - depth: 20, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a', - mode: '40755', - type: 'Directory', - depth: 21, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t', - mode: '40755', - type: 'Directory', - depth: 22, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h', - mode: '40755', - type: 'Directory', - depth: 23, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '100644', - type: 'File', - depth: 24, - size: 100, - linkpath: undefined, - nlink: 1 }, - { path: '/Ω.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 2, - linkpath: undefined, - nlink: 1 } ] - - - -// The extract class basically just pipes the input -// to a Reader, and then to a fstream.DirWriter - -// So, this is as much a test of fstream.Reader and fstream.Writer -// as it is of tar.Extract, but it sort of makes sense. - -tap.test("extract test", function (t) { - var extract = tar.Extract(target) - var inp = fs.createReadStream(file) - - // give it a weird buffer size to try to break in odd places - inp.bufferSize = 1234 - - inp.pipe(extract) - - extract.on("end", function () { - t.equal(ee, expectEntries.length, "should see "+ee+" entries") - - // should get no more entries after end - extract.removeAllListeners("entry") - extract.on("entry", function (e) { - t.fail("Should not get entries after end!") - }) - - next() - }) - - extract.on("entry", function (entry) { - var found = - { path: entry.path - , mode: entry.props.mode.toString(8) - , type: entry.props.type - , depth: entry.props.depth - , size: entry.props.size - , linkpath: entry.props.linkpath - , nlink: entry.props.nlink - , dev: entry.props.dev - , ino: entry.props.ino - } - - var wanted = expectEntries[ee ++] - - t.equivalent(found, wanted, "tar entry " + ee + " " + wanted.path) - }) - - function next () { - var r = fstream.Reader({ path: target - , type: "Directory" - // this is just to encourage consistency - , sort: "alpha" }) - - r.on("ready", function () { - foundEntry(r) - }) - - r.on("end", finish) - - function foundEntry (entry) { - var p = entry.path.substr(target.length) - var found = - { path: p - , mode: entry.props.mode.toString(8) - , type: entry.props.type - , depth: entry.props.depth - , size: entry.props.size - , linkpath: entry.props.linkpath - , nlink: entry.props.nlink - } - - var wanted = expectFiles[ef ++] - - t.has(found, wanted, "unpacked file " + ef + " " + wanted.path) - - entry.on("entry", foundEntry) - } - - function finish () { - t.equal(ef, expectFiles.length, "should have "+ef+" items") - t.end() - } - } -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/fixtures.tgz b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/fixtures.tgz deleted file mode 100644 index 4501bcf22695435b84edb3d4076cd9a70687b035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19205 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 L7Wcr_0GI;+;ZGx1 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/header.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/header.js deleted file mode 100644 index 8ea6f795..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/header.js +++ /dev/null @@ -1,183 +0,0 @@ -var tap = require("tap") -var TarHeader = require("../lib/header.js") -var tar = require("../tar.js") -var fs = require("fs") - - -var headers = - { "a.txt file header": - [ "612e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303430312031313635313336303333332030313234353100203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'a.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 257 - , mtime: 1319493851 - , cksum: 5417 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "omega pax": // the extended header from omega tar. - [ "5061784865616465722fcea92e74787400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303137302031313534333731303631312030313530353100207800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'PaxHeader/Ω.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 120 - , mtime: 1301254537 - , cksum: 6697 - , type: 'x' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } ] - - , "omega file header": - [ "cea92e7478740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303030322031313534333731303631312030313330373200203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'Ω.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 2 - , mtime: 1301254537 - , cksum: 5690 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } ] - - , "foo.js file header": - [ "666f6f2e6a730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303030342031313534333637303734312030313236313700203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'foo.js' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 4 - , mtime: 1301246433 - , cksum: 5519 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "b.txt file header": - [ "622e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030313030302031313635313336303637372030313234363100203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'b.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 512 - , mtime: 1319494079 - , cksum: 5425 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "deep nested file": - [ "636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363633030303634342000303537373631200030303030323420003030303030303030313434203131363532313531353333203034333331340020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075737461720030306973616163730000000000000000000000000000000000000000000000000000737461666600000000000000000000000000000000000000000000000000000030303030303020003030303030302000722f652f612f6c2f6c2f792f2d2f642f652f652f702f2d2f662f6f2f6c2f642f652f722f2d2f702f612f742f680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true, - path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 100 - , mtime: 1319687003 - , cksum: 18124 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - } - -tap.test("parsing", function (t) { - Object.keys(headers).forEach(function (name) { - var h = headers[name] - , header = new Buffer(h[0], "hex") - , expect = h[1] - , parsed = new TarHeader(header) - - // console.error(parsed) - t.has(parsed, expect, "parse " + name) - }) - t.end() -}) - -tap.test("encoding", function (t) { - Object.keys(headers).forEach(function (name) { - var h = headers[name] - , expect = new Buffer(h[0], "hex") - , encoded = TarHeader.encode(h[1]) - - // might have slightly different bytes, since the standard - // isn't very strict, but should have the same semantics - // checkSum will be different, but cksumValid will be true - - var th = new TarHeader(encoded) - delete h[1].block - delete h[1].needExtended - delete h[1].cksum - t.has(th, h[1], "fields "+name) - }) - t.end() -}) - -// test these manually. they're a bit rare to find in the wild -tap.test("parseNumeric tests", function (t) { - var parseNumeric = TarHeader.parseNumeric - , numbers = - { "303737373737373700": 2097151 - , "30373737373737373737373700": 8589934591 - , "303030303036343400": 420 - , "800000ffffffffffff": 281474976710655 - , "ffffff000000000001": -281474976710654 - , "ffffff000000000000": -281474976710655 - , "800000000000200000": 2097152 - , "8000000000001544c5": 1393861 - , "ffffffffffff1544c5": -15383354 } - Object.keys(numbers).forEach(function (n) { - var b = new Buffer(n, "hex") - t.equal(parseNumeric(b), numbers[n], n + " === " + numbers[n]) - }) - t.end() -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack-no-proprietary.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack-no-proprietary.js deleted file mode 100644 index 5bf0e540..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack-no-proprietary.js +++ /dev/null @@ -1,854 +0,0 @@ -// This is exactly like test/pack.js, except that it's excluding -// any proprietary headers. -// -// This loses some information about the filesystem, but creates -// tarballs that are supported by more versions of tar, especially -// old non-spec-compliant copies of gnutar. - -// the symlink file is excluded from git, because it makes -// windows freak the hell out. -var fs = require("fs") - , path = require("path") - , symlink = path.resolve(__dirname, "fixtures/symlink") -try { fs.unlinkSync(symlink) } catch (e) {} -fs.symlinkSync("./hardlink-1", symlink) -process.on("exit", function () { - fs.unlinkSync(symlink) -}) - -var tap = require("tap") - , tar = require("../tar.js") - , pkg = require("../package.json") - , Pack = tar.Pack - , fstream = require("fstream") - , Reader = fstream.Reader - , Writer = fstream.Writer - , input = path.resolve(__dirname, "fixtures/") - , target = path.resolve(__dirname, "tmp/pack.tar") - , uid = process.getuid ? process.getuid() : 0 - , gid = process.getgid ? process.getgid() : 0 - - , entries = - - // the global header and root fixtures/ dir are going to get - // a different date each time, so omit that bit. - // Also, dev/ino values differ across machines, so that's not - // included. - [ [ 'entry', - { path: 'fixtures/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/200cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - uid: uid, - gid: gid, - size: 200 } ] - - , [ 'entry', - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/a.txt', - mode: 420, - uid: uid, - gid: gid, - size: 257, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/b.txt', - mode: 420, - uid: uid, - gid: gid, - size: 512, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/c.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/cc.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/foo.js', - mode: 420, - uid: uid, - gid: gid, - size: 4, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-1', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-2', - mode: 420, - uid: uid, - gid: gid, - size: 0, - type: '1', - linkpath: 'fixtures/hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/star.4.html', - mode: 420, - uid: uid, - gid: gid, - size: 54081, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/packtest/Ω.txt', - uid: uid, - gid: gid, - size: 2 } ] - - , [ 'entry', - { path: 'fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 100, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/symlink', - uid: uid, - gid: gid, - size: 0, - type: '2', - linkpath: 'hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: "fixtures/Ω.txt" - , uid: uid - , gid: gid - , size: 2 } ] - - , [ 'entry', - { path: 'fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - ] - - -// first, make sure that the hardlinks are actually hardlinks, or this -// won't work. Git has a way of replacing them with a copy. -var hard1 = path.resolve(__dirname, "fixtures/hardlink-1") - , hard2 = path.resolve(__dirname, "fixtures/hardlink-2") - , fs = require("fs") - -try { fs.unlinkSync(hard2) } catch (e) {} -fs.linkSync(hard1, hard2) - -tap.test("with global header", { timeout: 10000 }, function (t) { - runTest(t, true) -}) - -tap.test("without global header", { timeout: 10000 }, function (t) { - runTest(t, false) -}) - -function alphasort (a, b) { - return a === b ? 0 - : a.toLowerCase() > b.toLowerCase() ? 1 - : a.toLowerCase() < b.toLowerCase() ? -1 - : a > b ? 1 - : -1 -} - - -function runTest (t, doGH) { - var reader = Reader({ path: input - , filter: function () { - return !this.path.match(/\.(tar|hex)$/) - } - , sort: alphasort - }) - - var props = doGH ? pkg : {} - props.noProprietary = true - var pack = Pack(props) - var writer = Writer(target) - - // global header should be skipped regardless, since it has no content. - var entry = 0 - - t.ok(reader, "reader ok") - t.ok(pack, "pack ok") - t.ok(writer, "writer ok") - - pack.pipe(writer) - - var parse = tar.Parse() - t.ok(parse, "parser should be ok") - - pack.on("data", function (c) { - // console.error("PACK DATA") - if (c.length !== 512) { - // this one is too noisy, only assert if it'll be relevant - t.equal(c.length, 512, "parser should emit data in 512byte blocks") - } - parse.write(c) - }) - - pack.on("end", function () { - // console.error("PACK END") - t.pass("parser ends") - parse.end() - }) - - pack.on("error", function (er) { - t.fail("pack error", er) - }) - - parse.on("error", function (er) { - t.fail("parse error", er) - }) - - writer.on("error", function (er) { - t.fail("writer error", er) - }) - - reader.on("error", function (er) { - t.fail("reader error", er) - }) - - parse.on("*", function (ev, e) { - var wanted = entries[entry++] - if (!wanted) { - t.fail("unexpected event: "+ev) - return - } - t.equal(ev, wanted[0], "event type should be "+wanted[0]) - - if (ev !== wanted[0] || e.path !== wanted[1].path) { - console.error(wanted) - console.error([ev, e.props]) - e.on("end", function () { - console.error(e.fields) - throw "break" - }) - } - - t.has(e.props, wanted[1], "properties "+wanted[1].path) - if (wanted[2]) { - e.on("end", function () { - if (!e.fields) { - t.ok(e.fields, "should get fields") - } else { - t.has(e.fields, wanted[2], "should get expected fields") - } - }) - } - }) - - reader.pipe(pack) - - writer.on("close", function () { - t.equal(entry, entries.length, "should get all expected entries") - t.pass("it finished") - t.end() - }) - -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack.js deleted file mode 100644 index 0f509945..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack.js +++ /dev/null @@ -1,897 +0,0 @@ - -// the symlink file is excluded from git, because it makes -// windows freak the hell out. -var fs = require("fs") - , path = require("path") - , symlink = path.resolve(__dirname, "fixtures/symlink") -try { fs.unlinkSync(symlink) } catch (e) {} -fs.symlinkSync("./hardlink-1", symlink) -process.on("exit", function () { - fs.unlinkSync(symlink) -}) - - -var tap = require("tap") - , tar = require("../tar.js") - , pkg = require("../package.json") - , Pack = tar.Pack - , fstream = require("fstream") - , Reader = fstream.Reader - , Writer = fstream.Writer - , input = path.resolve(__dirname, "fixtures/") - , target = path.resolve(__dirname, "tmp/pack.tar") - , uid = process.getuid ? process.getuid() : 0 - , gid = process.getgid ? process.getgid() : 0 - - , entries = - - // the global header and root fixtures/ dir are going to get - // a different date each time, so omit that bit. - // Also, dev/ino values differ across machines, so that's not - // included. - [ [ 'globalExtendedHeader', - { path: 'PaxHeader/', - mode: 438, - uid: 0, - gid: 0, - type: 'g', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { "NODETAR.author": pkg.author, - "NODETAR.name": pkg.name, - "NODETAR.description": pkg.description, - "NODETAR.version": pkg.version, - "NODETAR.repository.type": pkg.repository.type, - "NODETAR.repository.url": pkg.repository.url, - "NODETAR.main": pkg.main, - "NODETAR.scripts.test": pkg.scripts.test } ] - - , [ 'entry', - { path: 'fixtures/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/200cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - uid: uid, - gid: gid, - size: 200, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/a.txt', - mode: 420, - uid: uid, - gid: gid, - size: 257, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/b.txt', - mode: 420, - uid: uid, - gid: gid, - size: 512, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/c.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/cc.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/foo.js', - mode: 420, - uid: uid, - gid: gid, - size: 4, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-1', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-2', - mode: 420, - uid: uid, - gid: gid, - size: 0, - type: '1', - linkpath: 'fixtures/hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/star.4.html', - mode: 420, - uid: uid, - gid: gid, - size: 54081, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/packtest/Ω.txt', - 'NODETAR.depth': '2', - 'NODETAR.type': 'File', - nlink: 1, - uid: uid, - gid: gid, - size: 2, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '2', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 100, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/symlink', - uid: uid, - gid: gid, - size: 0, - type: '2', - linkpath: 'hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: "fixtures/Ω.txt" - , "NODETAR.depth": "1" - , "NODETAR.type": "File" - , nlink: 1 - , uid: uid - , gid: gid - , size: 2 - , "NODETAR.blksize": "4096" - , "NODETAR.blocks": "8" } ] - - , [ 'entry', - { path: 'fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - ] - - -// first, make sure that the hardlinks are actually hardlinks, or this -// won't work. Git has a way of replacing them with a copy. -var hard1 = path.resolve(__dirname, "fixtures/hardlink-1") - , hard2 = path.resolve(__dirname, "fixtures/hardlink-2") - , fs = require("fs") - -try { fs.unlinkSync(hard2) } catch (e) {} -fs.linkSync(hard1, hard2) - -tap.test("with global header", { timeout: 10000 }, function (t) { - runTest(t, true) -}) - -tap.test("without global header", { timeout: 10000 }, function (t) { - runTest(t, false) -}) - -function alphasort (a, b) { - return a === b ? 0 - : a.toLowerCase() > b.toLowerCase() ? 1 - : a.toLowerCase() < b.toLowerCase() ? -1 - : a > b ? 1 - : -1 -} - - -function runTest (t, doGH) { - var reader = Reader({ path: input - , filter: function () { - return !this.path.match(/\.(tar|hex)$/) - } - , sort: alphasort - }) - - var pack = Pack(doGH ? pkg : null) - var writer = Writer(target) - - // skip the global header if we're not doing that. - var entry = doGH ? 0 : 1 - - t.ok(reader, "reader ok") - t.ok(pack, "pack ok") - t.ok(writer, "writer ok") - - pack.pipe(writer) - - var parse = tar.Parse() - t.ok(parse, "parser should be ok") - - pack.on("data", function (c) { - // console.error("PACK DATA") - if (c.length !== 512) { - // this one is too noisy, only assert if it'll be relevant - t.equal(c.length, 512, "parser should emit data in 512byte blocks") - } - parse.write(c) - }) - - pack.on("end", function () { - // console.error("PACK END") - t.pass("parser ends") - parse.end() - }) - - pack.on("error", function (er) { - t.fail("pack error", er) - }) - - parse.on("error", function (er) { - t.fail("parse error", er) - }) - - writer.on("error", function (er) { - t.fail("writer error", er) - }) - - reader.on("error", function (er) { - t.fail("reader error", er) - }) - - parse.on("*", function (ev, e) { - var wanted = entries[entry++] - if (!wanted) { - t.fail("unexpected event: "+ev) - return - } - t.equal(ev, wanted[0], "event type should be "+wanted[0]) - - // if (ev !== wanted[0] || e.path !== wanted[1].path) { - // console.error(wanted) - // console.error([ev, e.props]) - // throw "break" - // } - - t.has(e.props, wanted[1], "properties "+wanted[1].path) - if (wanted[2]) { - e.on("end", function () { - if (!e.fields) { - t.ok(e.fields, "should get fields") - } else { - t.has(e.fields, wanted[2], "should get expected fields") - } - }) - } - }) - - reader.pipe(pack) - - writer.on("close", function () { - t.equal(entry, entries.length, "should get all expected entries") - t.pass("it finished") - t.end() - }) - -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/parse.js deleted file mode 100644 index f765a501..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/parse.js +++ /dev/null @@ -1,359 +0,0 @@ -var tap = require("tap") - , tar = require("../tar.js") - , fs = require("fs") - , path = require("path") - , file = path.resolve(__dirname, "fixtures/c.tar") - , index = 0 - - , expect = -[ [ 'entry', - { path: 'c.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 513, - mtime: new Date('Wed, 26 Oct 2011 01:10:58 GMT'), - cksum: 5422, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'cc.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 513, - mtime: new Date('Wed, 26 Oct 2011 01:11:02 GMT'), - cksum: 5525, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 100, - mtime: new Date('Thu, 27 Oct 2011 03:43:23 GMT'), - cksum: 18124, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 2, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 5695, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 120, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 6702, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'Ω.txt', - ctime: 1319737909, - atime: 1319739061, - dev: 234881026, - ino: 51693379, - nlink: 1 } ], - [ 'entry', - { path: 'Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 2, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 5695, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - atime: new Date('Thu, 27 Oct 2011 18:11:01 GMT'), - dev: 234881026, - ino: 51693379, - nlink: 1 }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 353, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14488, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ctime: 1319686868, - atime: 1319741254, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 1 } ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 200, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14570, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - atime: new Date('Thu, 27 Oct 2011 18:47:34 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 1 }, - undefined ], - [ 'longPath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4976, - type: 'L', - linkpath: '', - ustar: false }, - '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 1000, - gid: 1000, - size: 201, - mtime: new Date('Thu, 27 Oct 2011 22:21:50 GMT'), - cksum: 14086, - type: '0', - linkpath: '', - ustar: false }, - undefined ], - [ 'longLinkpath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4975, - type: 'K', - linkpath: '', - ustar: false }, - '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ], - [ 'longPath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4976, - type: 'L', - linkpath: '', - ustar: false }, - '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL' ], - [ 'entry', - { path: '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: 511, - uid: 1000, - gid: 1000, - size: 0, - mtime: new Date('Fri, 28 Oct 2011 23:05:17 GMT'), - cksum: 21603, - type: '2', - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ustar: false }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200-hard', - mode: 420, - uid: 24561, - gid: 20, - size: 143, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 6533, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { ctime: 1320617144, - atime: 1320617232, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 } ], - [ 'entry', - { path: '200-hard', - mode: 420, - uid: 24561, - gid: 20, - size: 200, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 5526, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Sun, 06 Nov 2011 22:05:44 GMT'), - atime: new Date('Sun, 06 Nov 2011 22:07:12 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 353, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14488, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ctime: 1320617144, - atime: 1320617406, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 } ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 15173, - type: '1', - linkpath: '200-hard', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Sun, 06 Nov 2011 22:05:44 GMT'), - atime: new Date('Sun, 06 Nov 2011 22:10:06 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 }, - undefined ] ] - - -tap.test("parser test", function (t) { - var parser = tar.Parse() - - parser.on("end", function () { - t.equal(index, expect.length, "saw all expected events") - t.end() - }) - - fs.createReadStream(file) - .pipe(parser) - .on("*", function (ev, entry) { - var wanted = expect[index] - if (!wanted) { - return t.fail("Unexpected event: " + ev) - } - var result = [ev, entry.props] - entry.on("end", function () { - result.push(entry.fields || entry.body) - - t.equal(ev, wanted[0], index + " event type") - t.equivalent(entry.props, wanted[1], wanted[1].path + " entry properties") - if (wanted[2]) { - t.equivalent(result[2], wanted[2], "metadata values") - } - index ++ - }) - }) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/zz-cleanup.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/zz-cleanup.js deleted file mode 100644 index a00ff7fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/zz-cleanup.js +++ /dev/null @@ -1,20 +0,0 @@ -// clean up the fixtures - -var tap = require("tap") -, rimraf = require("rimraf") -, test = tap.test -, path = require("path") - -test("clean fixtures", function (t) { - rimraf(path.resolve(__dirname, "fixtures"), function (er) { - t.ifError(er, "rimraf ./fixtures/") - t.end() - }) -}) - -test("clean tmp", function (t) { - rimraf(path.resolve(__dirname, "tmp"), function (er) { - t.ifError(er, "rimraf ./tmp/") - t.end() - }) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/index.js deleted file mode 100644 index da99ffef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/index.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; -var path = require('path'); -var tmpdir = require('os').tmpdir(); -var uuid = require('uuid'); - -module.exports = function (ext) { - return path.join(tmpdir, uuid.v4() + (ext || '')); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.npmignore deleted file mode 100644 index fd4f2b06..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.DS_Store diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.travis.yml deleted file mode 100644 index b6d42c3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.9 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/LICENSE.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/LICENSE.md deleted file mode 100644 index f039427f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/LICENSE.md +++ /dev/null @@ -1,2 +0,0 @@ -Copyright (c) 2010-2012 Robert Kieffer -MIT License - http://opensource.org/licenses/mit-license.php diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/README.md deleted file mode 100644 index d2adba18..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/README.md +++ /dev/null @@ -1,204 +0,0 @@ -# uuid [![Build Status](https://secure.travis-ci.org/shtylman/node-uuid.png?branch=master)](http://travis-ci.org/shtylman/node-uuid) # - -[![browser support](http://ci.testling.com/shtylman/node-uuid.png)](http://ci.testling.com/shtylman/node-uuid) - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Generate RFC4122 version 1 or version 4 UUIDs -* Runs in node.js and all browsers. -* Cryptographically strong random # generation on supporting platforms -* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! ) -* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html) - -## Getting Started - -Install it in your browser: - -```html -<script src="uuid.js"></script> -``` - -Or in node.js: - -``` -npm install uuid -``` - -```javascript -var uuid = require('uuid'); - -// Generate a v1 (time-based) id -uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - -// Generate a v4 (random) id -uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' -``` - -## API - -### uuid.v1([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Notes: - -1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v1({ - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -var arr = new Array(32); // -> [] -uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] - -// Optionally use uuid.unparse() to get stringify the ids -uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' -uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' -``` - -### uuid.v4([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v4({ - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" -``` - -Example: Generate two IDs in a single buffer - -```javascript -var buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); -``` - -### uuid.parse(id[, buffer[, offset]]) -### uuid.unparse(buffer[, offset]) - -Parse and unparse UUIDs - - * `id` - (String) UUID(-like) string - * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used - * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 - -Example parsing and unparsing a UUID string - -```javascript -var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10> -var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' -``` - -### uuid.noConflict() - -(Browsers only) Set `uuid` property back to it's previous value. - -Returns the uuid object. - -Example: - -```javascript -var myUuid = uuid.noConflict(); -myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' -``` - -## Deprecated APIs - -Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. - -### uuid([format [, buffer [, offset]]]) - -uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). - -### uuid.BufferClass - -The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API. - -## Testing - -In node.js - -``` -> cd test -> node test.js -``` - -In Browser - -``` -open test/test.html -``` - -### Benchmarking - -Requires node.js - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -For a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark) - -For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - -## Release notes - -### 1.4.0 - -* Improved module context detection -* Removed public RNG functions - -### 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - -### 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/README.md deleted file mode 100644 index aaeb2ea0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# node-uuid Benchmarks - -### Results - -To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark - -### Run them yourself - -node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. - -To prepare and run the benchmark issue; - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -You'll see an output like this one: - -``` -# v4 -nodeuuid.v4(): 854700 uuids/second -nodeuuid.v4('binary'): 788643 uuids/second -nodeuuid.v4('binary', buffer): 1336898 uuids/second -uuid(): 479386 uuids/second -uuid('binary'): 582072 uuids/second -uuidjs.create(4): 312304 uuids/second - -# v1 -nodeuuid.v1(): 938086 uuids/second -nodeuuid.v1('binary'): 683060 uuids/second -nodeuuid.v1('binary', buffer): 1644736 uuids/second -uuidjs.create(1): 190621 uuids/second -``` - -* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. -* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. - -If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: - -``` -for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; -``` - -If you're interested in how performance varies between different node versions, you can issue the above command multiple times. - -You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: - -``` -(cd benchmark/ && ./bench.sh) -``` - -This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.gnu b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.gnu deleted file mode 100644 index a342fbbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.gnu +++ /dev/null @@ -1,174 +0,0 @@ -#!/opt/local/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.4 patchlevel 3 -# last modified March 2011 -# System: Darwin 10.8.0 -# -# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 -# Thomas Williams, Colin Kelley and many others -# -# gnuplot home: http://www.gnuplot.info -# faq, bugs, etc: type "help seeking-assistance" -# immediate help: type "help" -# plot window: hit 'h' -set terminal postscript eps noenhanced defaultplex \ - leveldefault color colortext \ - solid linewidth 1.2 butt noclip \ - palfuncparam 2000,0.003 \ - "Helvetica" 14 -set output 'bench.eps' -unset clip points -set clip one -unset clip two -set bar 1.000000 front -set border 31 front linetype -1 linewidth 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 -set style circle radius graph 0.02, first 0, 0 -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 -set key maxcolumns 2 maxrows 0 -unset label -unset arrow -set style increment default -unset style line -set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 -unset style arrow -set style histogram clustered gap 2 title offset character 0, 0, 0 -unset logscale -set offsets graph 0.05, 0.15, 0, 0 -set pointsize 1.5 -set pointintervalbox 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -unset hidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data points -set style function lines -set xzeroaxis linetype -2 linewidth 1.000 -set yzeroaxis linetype -2 linewidth 1.000 -set zzeroaxis linetype -2 linewidth 1.000 -set x2zeroaxis linetype -2 linewidth 1.000 -set y2zeroaxis linetype -2 linewidth 1.000 -set ticslevel 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set xtics norangelimit -set xtics () -set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set ytics autofreq norangelimit -set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 -set ztics autofreq norangelimit -set nox2tics -set noy2tics -set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set cbtics autofreq norangelimit -set title "" -set title offset character 0, 0, 0 font "" norotate -set timestamp bottom -set timestamp "" -set timestamp offset character 0, 0, 0 font "" norotate -set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale rfixmin -set autoscale rfixmax -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set autoscale tfixmin -set autoscale tfixmax -set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale ufixmin -set autoscale ufixmax -set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale vfixmin -set autoscale vfixmax -set xlabel "" -set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set x2label "" -set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate -set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) -set autoscale xfixmin -set autoscale xfixmax -set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) -set autoscale x2fixmin -set autoscale x2fixmax -set ylabel "" -set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set y2label "" -set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) -set autoscale yfixmin -set autoscale yfixmax -set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) -set autoscale y2fixmin -set autoscale y2fixmax -set zlabel "" -set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale zfixmin -set autoscale zfixmax -set cblabel "" -set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale cbfixmin -set autoscale cbfixmax -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set pm3d explicit at s -set pm3d scansautomatic -set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault -set loadpath -set fontpath -set fit noerrorvariables -GNUTERM = "aqua" -plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 -# EOF diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.sh deleted file mode 100755 index d870a0cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# for a given node version run: -# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; - -PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte') -FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es) -INDICES=(2 3 2 3 2 2 2 2 2) -VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) -TMPJOIN="tmp_join" -OUTPUT="bench_results.txt" - -for I in ${!FILES[*]}; do - F=${FILES[$I]} - P=${PATTERNS[$I]} - INDEX=${INDICES[$I]} - echo "version $F" > $F - for V in $VERSIONS; do - (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F - done - if [ $I == 0 ]; then - cat $F > $TMPJOIN - else - join $TMPJOIN $F > $OUTPUT - cp $OUTPUT $TMPJOIN - fi - rm $F -done - -rm $TMPJOIN - -gnuplot bench.gnu -convert -density 200 -resize 800x560 -flatten bench.eps bench.png -rm bench.eps diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark-native.c b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark-native.c deleted file mode 100644 index dbfc75f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include <stdio.h> -#include <unistd.h> -#include <sys/time.h> -#include <uuid/uuid.h> - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark.js deleted file mode 100644 index 40e6efbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark.js +++ /dev/null @@ -1,84 +0,0 @@ -try { - var nodeuuid = require('../uuid'); -} catch (e) { - console.error('node-uuid require failed - skipping tests'); -} - -try { - var uuid = require('uuid'); -} catch (e) { - console.error('uuid require failed - skipping tests'); -} - -try { - var uuidjs = require('uuid-js'); -} catch (e) { - console.error('uuid-js require failed - skipping tests'); -} - -var N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -console.log('# v4'); - -// node-uuid - string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); - rate('nodeuuid.v4() - using node.js crypto RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG}); - rate('nodeuuid.v4() - using Math.random() RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); - rate('nodeuuid.v4(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); - rate('nodeuuid.v4(\'binary\', buffer)', t); -} - -// libuuid - string form -if (uuid) { - for (var i = 0, t = Date.now(); i < N; i++) uuid(); - rate('uuid()', t); - - for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); - rate('uuid(\'binary\')', t); -} - -// uuid-js - string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); - rate('uuidjs.create(4)', t); -} - -// 140byte.es -for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)}); -rate('140byte.es_v4', t); - -console.log(''); -console.log('# v1'); - -// node-uuid - v1 string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); - rate('nodeuuid.v1()', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); - rate('nodeuuid.v1(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); - rate('nodeuuid.v1(\'binary\', buffer)', t); -} - -// uuid-js - v1 string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); - rate('uuidjs.create(1)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/compare.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/compare.js deleted file mode 100644 index 3de34151..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/compare.js +++ /dev/null @@ -1,62 +0,0 @@ -var assert = require('assert'), - nodeuuid = require('../'), - uuidjs = require('uuid-js'), - util = require('util'), - exec = require('child_process').exec, - os = require('os'); - -// On Mac Os X / macports there's only the ossp-uuid package that provides uuid -// On Linux there's uuid-runtime which provides uuidgen -var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t'; - -function compare(ids) { - console.log(ids); - for (var i = 0; i < ids.length; i++) { - var id = ids[i].split('-'); - id = [id[2], id[1], id[0]].join(''); - ids[i] = id; - } - var sorted = ([].concat(ids)).sort(); - - if (sorted.toString() !== ids.toString()) { - console.log('Warning: sorted !== ids'); - } else { - console.log('everything in order!'); - } -} - -// Test time order of v1 uuids -var ids = []; -while (ids.length < 10e3) ids.push(nodeuuid.v1()); - -var max = 10; -console.log('node-uuid:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(nodeuuid.v1()); -compare(ids); - -console.log(''); -console.log('uuidjs:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString()); -compare(ids); - -console.log(''); -console.log('libuuid:'); -ids = []; -var count = 0; -var last = function() { - compare(ids); -} -var cb = function(err, stdout, stderr) { - ids.push(stdout.substring(0, stdout.length-1)); - count++; - if (count < max) { - return next(); - } - last(); -}; -var next = function() { - exec(uuidCmd, cb); -}; -next(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/perf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/perf.js deleted file mode 100644 index bdc9eb46..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/perf.js +++ /dev/null @@ -1,102 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -var log = console.log; - -var generators = { - v1: uuid.v1, - v4: uuid.v4 -}; - -var UUID_FORMAT = { - v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i, - v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i -}; - -var N = 1e4; - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second'); -} - -for (var version in generators) { - var counts = {}, max = 0; - var generator = generators[version]; - var format = UUID_FORMAT[version]; - - log('\nSanity check ' + N + ' ' + version + ' uuids'); - for (var i = 0, ok = 0; i < N; i++) { - id = generator(); - if (!format.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - assert(fail, id + ' is not a valid id'); - } - - // Count digits for our randomness check - if (version == 'v4') { - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } - } - } - - // Check randomness for v4 UUIDs - if (version == 'v4') { - // Limit that we get worried about randomness. (Purely empirical choice, this!) - var limit = 2*100*Math.sqrt(1/N); - - log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)'); - - for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)'); - } - } -} - -// Perf tests -for (var version in generators) { - log('\nPerformance testing ' + version + ' UUIDs'); - var generator = generators[version]; - var buf = new uuid.BufferClass(16); - - for (var i = 0, t = Date.now(); i < N; i++) generator(); - rate('uuid.' + version + '()', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary'); - rate('uuid.' + version + '(\'binary\')', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf); - rate('uuid.' + version + '(\'binary\', buffer)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/package.json deleted file mode 100644 index d9f8435b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "uuid", - "version": "1.4.1", - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com" - }, - "contributors": [ - { - "name": "Christoph Tavan", - "email": "dev@tavan.de" - } - ], - "main": "./uuid.js", - "devDependencies": { - "mocha": "1.8.0" - }, - "scripts": { - "test": "mocha test/test.js" - }, - "browser": { - "./rng.js": "./rng-browser.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/shtylman/node-uuid.git" - }, - "testling": { - "browsers": [ - "ie6..latest", - "firefox/3.6..latest", - "chrome/22..latest", - "safari/5.1..latest" - ], - "harness": "mocha-tdd", - "files": "test/*.js" - }, - "readme": "# uuid [![Build Status](https://secure.travis-ci.org/shtylman/node-uuid.png?branch=master)](http://travis-ci.org/shtylman/node-uuid) #\n\n[![browser support](http://ci.testling.com/shtylman/node-uuid.png)](http://ci.testling.com/shtylman/node-uuid)\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src=\"uuid.js\"></script>\n```\n\nOr in node.js:\n\n```\nnpm install uuid\n```\n\n```javascript\nvar uuid = require('uuid');\n\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/shtylman/node-uuid/issues" - }, - "homepage": "https://github.com/shtylman/node-uuid", - "_id": "uuid@1.4.1", - "dist": { - "shasum": "4e6bbab179cc65c2f120508576c631bd7751af7c" - }, - "_from": "uuid@~1.4.0", - "_resolved": "https://registry.npmjs.org/uuid/-/uuid-1.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng-browser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng-browser.js deleted file mode 100644 index 57b58d4b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng-browser.js +++ /dev/null @@ -1,31 +0,0 @@ - -var rng; - -if (global.crypto && crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // Moderately fast, high quality - var _rnds8 = new Uint8Array(16); - rng = function whatwgRNG() { - crypto.getRandomValues(_rnds8); - return _rnds8; - }; -} - -if (!rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - rng = function() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return _rnds; - }; -} - -module.exports = rng; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng.js deleted file mode 100644 index 3977f798..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng.js +++ /dev/null @@ -1,4 +0,0 @@ -var rb = require('crypto').randomBytes; -module.exports = function() { - return rb(16); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/mocha.opts b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/mocha.opts deleted file mode 100644 index e2bfcc5a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---ui qunit diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/test.js deleted file mode 100644 index 4c9872ff..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/test.js +++ /dev/null @@ -1,105 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -// Verify ordering of v1 ids created with explicit times -var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 - -function compare(name, ids) { - test(name, function() { - // avoid .map for older browsers - for (var i=0 ; i<ids.length ; ++i) { - ids[i] = ids[i].split('-').reverse().join('-'); - } - ids = ids.sort(); - var sorted = ([].concat(ids)).sort(); - - assert(sorted.toString() == ids.toString(), name + ' have expected order'); - }); -} - -// Verify ordering of v1 ids created using default behavior -compare('uuids with current time', [ - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1() -]); - -// Verify ordering of v1 ids created with explicit times -compare('uuids with time option', [ - uuid.v1({msecs: TIME - 10*3600*1000}), - uuid.v1({msecs: TIME - 1}), - uuid.v1({msecs: TIME}), - uuid.v1({msecs: TIME + 1}), - uuid.v1({msecs: TIME + 28*24*3600*1000}) -]); - -test('msec', function() { - assert( - uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}), - 'IDs created at same msec are different' - ); -}); - -test('exception thrown when > 10k ids created in 1ms', function() { - // Verify throw if too many ids created - var thrown = false; - try { - uuid.v1({msecs: TIME, nsecs: 10000}); - } catch (e) { - thrown = true; - } - assert(thrown, 'Exception thrown when > 10K ids created in 1 ms'); -}); - -test('clock regression by msec', function() { - // Verify clock regression bumps clockseq - var uidt = uuid.v1({msecs: TIME}); - var uidtb = uuid.v1({msecs: TIME - 1}); - assert( - parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq' - ); -}); - -test('clock regression by nsec', function() { - // Verify clock regression bumps clockseq - var uidtn = uuid.v1({msecs: TIME, nsecs: 10}); - var uidtnb = uuid.v1({msecs: TIME, nsecs: 9}); - assert( - parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq' - ); -}); - -test('explicit options product expected id', function() { - // Verify explicit options produce expected id - var id = uuid.v1({ - msecs: 1321651533573, - nsecs: 5432, - clockseq: 0x385c, - node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ] - }); - assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); -}); - -test('ids spanning 1ms boundary are 100ns apart', function() { - // Verify adjacent ids across a msec boundary are 1 time unit apart - var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); - var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - - var before = u0.split('-')[0], after = u1.split('-')[0]; - var dt = parseInt(after, 16) - parseInt(before, 16); - assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); -}); - -test('parse/unparse', function() { - var id = '00112233445566778899aabbccddeeff'; - assert(uuid.unparse(uuid.parse(id.substr(0,10))) == - '00112233-4400-0000-0000-000000000000', 'Short parse'); - assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) == - '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse'); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/uuid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/uuid.js deleted file mode 100644 index d0062fb4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/uuid.js +++ /dev/null @@ -1,187 +0,0 @@ -// uuid.js -// -// Copyright (c) 2010-2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -// Unique ID creation requires a high quality random # generator. We feature -// detect to determine the best RNG source, normalizing to a function that -// returns 128-bits of randomness, since that's what's usually required -var _rng = require('./rng'); - -// Buffer class to use -var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array; - -// Maps for number <-> hex string conversion -var _byteToHex = []; -var _hexToByte = {}; -for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; -} - -// **`parse()` - Parse a UUID into it's component bytes** -function parse(s, buf, offset) { - var i = (buf && offset) || 0, ii = 0; - - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) { - if (ii < 16) { // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); - - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; - } - - return buf; -} - -// **`unparse()` - Convert UUID byte array (ala parse()) into a string** -function unparse(buf, offset) { - var i = offset || 0, bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]]; -} - -// **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html - -// random #'s we need to init node and clockseq -var _seedBytes = _rng(); - -// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) -var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] -]; - -// Per 4.2.2, randomize (14 bit) clockseq -var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; - -// Previous uuid creation time -var _lastMSecs = 0, _lastNSecs = 0; - -// See https://github.com/broofa/node-uuid for API details -function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - - var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; - } - - return buf ? buf : unparse(b); -} - -// **`v4()` - Generate random UUID** - -// See https://github.com/broofa/node-uuid for API details -function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options == 'binary' ? new BufferClass(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || _rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || unparse(rnds); -} - -// Export public API -var uuid = v4; -uuid.v1 = v1; -uuid.v4 = v4; -uuid.parse = parse; -uuid.unparse = unparse; -uuid.BufferClass = BufferClass; - -module.exports = uuid; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/package.json deleted file mode 100644 index 561465e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "tempfile", - "version": "0.1.2", - "description": "Get a random temp file path", - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/sindresorhus/tempfile" - }, - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "files": [ - "index.js" - ], - "keywords": [ - "tmp", - "temp", - "temporary", - "tempfile", - "file", - "path", - "random", - "rand" - ], - "dependencies": { - "uuid": "~1.4.0" - }, - "devDependencies": { - "mocha": "*" - }, - "readme": "# tempfile [![Build Status](https://travis-ci.org/sindresorhus/tempfile.png?branch=master)](http://travis-ci.org/sindresorhus/tempfile)\n\n> Get a random temp file path\n\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/tempfile)\n\n```\nnpm install --save tempfile\n```\n\n\n## Example\n\n```js\nvar tempfile = require('tempfile');\ntempfile('.png');\n//=> /var/folders/_1/tk89k8215ts0rg0kmb096nj80000gn/T/4049f192-43e7-43b2-98d9-094e6760861b.png\n```\n\n## API\n\n### tempfile(extension)\n\n#### extension\n\nType: `String`\n\nOptionally supply an extension to append to the path.\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/sindresorhus/tempfile/issues" - }, - "homepage": "https://github.com/sindresorhus/tempfile", - "_id": "tempfile@0.1.2", - "dist": { - "shasum": "81d4e51f35856592f3b51d568135791af3b038e0" - }, - "_from": "tempfile@~0.1.2", - "_resolved": "https://registry.npmjs.org/tempfile/-/tempfile-0.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/readme.md deleted file mode 100644 index 672a0ac6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/readme.md +++ /dev/null @@ -1,36 +0,0 @@ -# tempfile [![Build Status](https://travis-ci.org/sindresorhus/tempfile.png?branch=master)](http://travis-ci.org/sindresorhus/tempfile) - -> Get a random temp file path - - -## Install - -Install with [npm](https://npmjs.org/package/tempfile) - -``` -npm install --save tempfile -``` - - -## Example - -```js -var tempfile = require('tempfile'); -tempfile('.png'); -//=> /var/folders/_1/tk89k8215ts0rg0kmb096nj80000gn/T/4049f192-43e7-43b2-98d9-094e6760861b.png -``` - -## API - -### tempfile(extension) - -#### extension - -Type: `String` - -Optionally supply an extension to append to the path. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/package.json deleted file mode 100644 index 6e75932a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "decompress", - "version": "0.1.6", - "description": "Easily extract zip, tar and tar.gz archives", - "keywords": [ - "extract", - "zip", - "tar", - "tar.gz" - ], - "homepage": "https://github.com/kevva/decompress", - "bugs": { - "url": "https://github.com/kevva/decompress/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/kevva/decompress.git" - }, - "scripts": { - "test": "mocha --reporter list" - }, - "main": "decompress.js", - "files": [ - "decompress.js" - ], - "dependencies": { - "adm-zip": "~0.4.3", - "mkdirp": "~0.3.5", - "mout": "~0.6.0", - "rimraf": "~2.2.2", - "stream-combiner": "~0.0.2", - "tar": "~0.1.18", - "tempfile": "~0.1.2" - }, - "devDependencies": { - "mocha": "~1.12.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "readme": "# decompress [![Build Status](https://secure.travis-ci.org/kevva/decompress.png?branch=master)](http://travis-ci.org/kevva/decompress)\n\nEasily extract `.zip`, `.tar` and `.tar.gz` archives. Based on the extract \nutility in [Bower](https://github.com/bower/bower).\n\n## Getting started\n\nInstall with [npm](https://npmjs.org/package/decompress): `npm install decompress`\n\n## Examples\n\nYou'll only need to pass a type into `ext` and it'll figure the rest out for \nyou.\n\n```js\nvar decompress = require('decompress');\nvar fs = require('fs');\n\nvar src = fs.createReadStream('foo.tar.gz');\nvar dest = decompress.extract({ ext: '.tar.gz' });\n\nsrc.pipe(dest);\n```\n\n## API\n\n### .extract(opts)\n\nExtract an archive using the `ext` option to determine which extractor to use. \nIf no `path` is specified it'll extract it to your current location.\n\n### .canExtract(src, mime)\n\nDetermine if a file can be extracted or not by checking the file extension \nand/or the MIME type.\n\n```js\ndecompress.canExtract('foo.zip');\n// => true\n\ndecompress.canExtract('application/zip');\n// => true\n```\n\n## Options\n\n### `ext`\n\nType: `String` \nDefault: `''`\n\nString that can be a file name, URL, MIME type etc.\n\n### `path`\n\nType: `String` \nDefault: `process.cwd()`\n\nPath to extract the archive to. If no `path` is defined it'll extract it to your \ncurrent location.\n\n### strip\n\nType: `Number` \nDefault: `0`\n\nEquivalent to `--strip-components` for tar.\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com)\n", - "readmeFilename": "README.md", - "_id": "decompress@0.1.6", - "dist": { - "shasum": "dc920bd81312e06f3e97aa46add56f1e95e21a4e" - }, - "_from": "decompress@~0.1.5", - "_resolved": "https://registry.npmjs.org/decompress/-/decompress-0.1.6.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/each-async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/each-async.js deleted file mode 100644 index a43b4363..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/each-async.js +++ /dev/null @@ -1,72 +0,0 @@ -/*! - each-async - Async concurrent iterator (async forEach) - https://github.com/sindresorhus/each-async - by Sindre Sorhus - MIT License -*/ -(function () { - 'use strict'; - - function once(fn) { - var called = false; - - if (typeof fn !== 'function') { - throw new TypeError; - } - - return function () { - if (called) { - throw new Error('Callback already called.'); - } - called = true; - fn.apply(this, arguments); - } - } - - function each(arr, next, cb) { - var failed = false; - var count = 0; - - cb = cb || function () {}; - - if (!Array.isArray(arr)) { - throw new TypeError('First argument must be an array'); - } - - if (typeof next !== 'function') { - throw new TypeError('Second argument must be a function'); - } - - var len = arr.length; - - if (!len) { - return cb(); - } - - function callback(err) { - if (failed) { - return; - } - - if (err !== undefined && err !== null) { - failed = true; - return cb(err); - } - - if (++count === len) { - return cb(); - } - } - - for (var i = 0; i < len; i++) { - next(arr[i], i, once(callback)); - } - } - - if (typeof module !== 'undefined' && module.exports) { - module.exports = each; - } else { - window.eachAsync = each; - } -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/package.json deleted file mode 100644 index 8e17c2d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "each-async", - "version": "0.1.2", - "description": "Async concurrent iterator", - "license": "MIT", - "main": "each-async.js", - "repository": { - "type": "git", - "url": "git://github.com/sindresorhus/each-async" - }, - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "files": [ - "each-async.js" - ], - "keywords": [ - "each", - "async", - "asynchronous", - "iteration", - "iterate", - "loop", - "foreach", - "parallel", - "concurrent", - "array", - "flow", - "control flow" - ], - "devDependencies": { - "mocha": "*" - }, - "readme": "# each-async [![Build Status](https://secure.travis-ci.org/sindresorhus/each-async.png?branch=master)](http://travis-ci.org/sindresorhus/each-async)\n\n> Async concurrent iterator (async forEach)\n\nLike [async.each()](https://github.com/caolan/async#eacharr-iterator-callback), but tiny.\n\nI often use `async.each()` for doing async operations when iterating, but I almost never use the other gadzillion methods in `async`.\n\nAsync iteration is one of the most used async control flow patterns.\n\n\n## Install\n\nDownload [manually](https://github.com/sindresorhus/each-async/releases) or with a package-manager.\n\n#### [npm](https://npmjs.org/package/each-async)\n\n```\nnpm install --save each-async\n```\n\n#### [Bower](http://bower.io)\n\n```\nbower install --save each-async\n```\n\n#### [Component](https://github.com/component/component)\n\n```\ncomponent install sindresorhus/each-async\n```\n\n\n## Examples\n\n### Node.js\n\n```js\neachAsync(['foo','bar','baz'], function (item, index, done) {\n\tconsole.log(item, index);\n\tdone();\n}, function (error) {\n\tconsole.log('finished');\n});\n//=> foo 0\n//=> bar 1\n//=> baz 2\n//=> finished\n```\n\n\n## API\n\n### eachAsync(array, callback, finishedCallback)\n\n#### array\n\nThe array you want to iterate.\n\n#### callback(item, index, done)\n\nA function which is called for each item in the array with the following arguments:\n\n- `item`: the current item in the array\n- `index`: the current index\n- `done([error])`: call this when you're done with an optional error. Supplying anything other than `undefined`/`null` will stop the iteration.\n\nNote that order is not guaranteed since each item is handled concurrently.\n\n#### finishedCallback(error)\n\nA function which is called when the iteration is finished or on the first error. First argument is the error passed from `done()` in the `callback`.\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/sindresorhus/each-async/issues" - }, - "homepage": "https://github.com/sindresorhus/each-async", - "_id": "each-async@0.1.2", - "dist": { - "shasum": "d5b900bd92705ed5b8cad3307a6536adb0f134c6" - }, - "_from": "each-async@~0.1.1", - "_resolved": "https://registry.npmjs.org/each-async/-/each-async-0.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/readme.md deleted file mode 100644 index e5e5bb14..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/readme.md +++ /dev/null @@ -1,78 +0,0 @@ -# each-async [![Build Status](https://secure.travis-ci.org/sindresorhus/each-async.png?branch=master)](http://travis-ci.org/sindresorhus/each-async) - -> Async concurrent iterator (async forEach) - -Like [async.each()](https://github.com/caolan/async#eacharr-iterator-callback), but tiny. - -I often use `async.each()` for doing async operations when iterating, but I almost never use the other gadzillion methods in `async`. - -Async iteration is one of the most used async control flow patterns. - - -## Install - -Download [manually](https://github.com/sindresorhus/each-async/releases) or with a package-manager. - -#### [npm](https://npmjs.org/package/each-async) - -``` -npm install --save each-async -``` - -#### [Bower](http://bower.io) - -``` -bower install --save each-async -``` - -#### [Component](https://github.com/component/component) - -``` -component install sindresorhus/each-async -``` - - -## Examples - -### Node.js - -```js -eachAsync(['foo','bar','baz'], function (item, index, done) { - console.log(item, index); - done(); -}, function (error) { - console.log('finished'); -}); -//=> foo 0 -//=> bar 1 -//=> baz 2 -//=> finished -``` - - -## API - -### eachAsync(array, callback, finishedCallback) - -#### array - -The array you want to iterate. - -#### callback(item, index, done) - -A function which is called for each item in the array with the following arguments: - -- `item`: the current item in the array -- `index`: the current index -- `done([error])`: call this when you're done with an optional error. Supplying anything other than `undefined`/`null` will stop the iteration. - -Note that order is not guaranteed since each item is handled concurrently. - -#### finishedCallback(error) - -A function which is called when the iteration is finished or on the first error. First argument is the error passed from `done()` in the `callback`. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/.npmignore deleted file mode 100644 index 80e59ef5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -tests -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/.travis.yml deleted file mode 100644 index 0bce8152..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: node_js -node_js: - - 0.8 - - 0.10 - -env: - - OPTIONALS=Y - - OPTIONALS=N - -install: - - if [[ "$OPTIONALS" == "Y" ]]; then npm install; fi - - if [[ "$OPTIONALS" == "N" ]]; then npm install --no-optional; fi diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/README.md deleted file mode 100644 index 5c0c081f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/README.md +++ /dev/null @@ -1,366 +0,0 @@ -# Request -- Simplified HTTP client - -[![NPM](https://nodei.co/npm/request.png)](https://nodei.co/npm/request/) - -## Super simple to use - -Request is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default. - -```javascript -var request = require('request'); -request('http://www.google.com', function (error, response, body) { - if (!error && response.statusCode == 200) { - console.log(body) // Print the google web page. - } -}) -``` - -## Streaming - -You can stream any response to a file stream. - -```javascript -request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png')) -``` - -You can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one). - -```javascript -fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json')) -``` - -Request can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers. - -```javascript -request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png')) -``` - -Now let’s get fancy. - -```javascript -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - if (req.method === 'PUT') { - req.pipe(request.put('http://mysite.com/doodle.png')) - } else if (req.method === 'GET' || req.method === 'HEAD') { - request.get('http://mysite.com/doodle.png').pipe(resp) - } - } -}) -``` - -You can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don't really care about security, you can do: - -```javascript -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - var x = request('http://mysite.com/doodle.png') - req.pipe(x) - x.pipe(resp) - } -}) -``` - -And since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :) - -```javascript -req.pipe(request('http://mysite.com/doodle.png')).pipe(resp) -``` - -Also, none of this new functionality conflicts with requests previous features, it just expands them. - -```javascript -var r = request.defaults({'proxy':'http://localproxy.com'}) - -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - r.get('http://google.com/doodle.png').pipe(resp) - } -}) -``` - -You can still use intermediate proxies, the requests will still follow HTTP forwards, etc. - -## Forms - -`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API. - -URL-encoded forms are simple. - -```javascript -request.post('http://service.com/upload', {form:{key:'value'}}) -// or -request.post('http://service.com/upload').form({key:'value'}) -``` - -For `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). You don’t need to worry about piping the form object or setting the headers, `request` will handle that for you. - -```javascript -var r = request.post('http://service.com/upload') -var form = r.form() -form.append('my_field', 'my_value') -form.append('my_buffer', new Buffer([1, 2, 3])) -form.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png')) -form.append('remote_file', request('http://google.com/doodle.png')) -``` - -## HTTP Authentication - -```javascript -request.get('http://some.server.com/').auth('username', 'password', false); -// or -request.get('http://some.server.com/', { - 'auth': { - 'user': 'username', - 'pass': 'password', - 'sendImmediately': false - } -}); -``` - -If passed as an option, `auth` should be a hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). The method form takes parameters `auth(username, password, sendImmediately)`. - -`sendImmediately` defaults to `true`, which causes a basic authentication header to be sent. If `sendImmediately` is `false`, then `request` will retry with a proper authentication header after receiving a `401` response from the server (which must contain a `WWW-Authenticate` header indicating the required authentication method). - -Digest authentication is supported, but it only works with `sendImmediately` set to `false`; otherwise `request` will send basic authentication on the initial request, which will probably cause the request to fail. - -## OAuth Signing - -```javascript -// Twitter OAuth -var qs = require('querystring') - , oauth = - { callback: 'http://mysite.com/callback/' - , consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - } - , url = 'https://api.twitter.com/oauth/request_token' - ; -request.post({url:url, oauth:oauth}, function (e, r, body) { - // Ideally, you would take the body in the response - // and construct a URL that a user clicks on (like a sign in button). - // The verifier is only available in the response after a user has - // verified with twitter that they are authorizing your app. - var access_token = qs.parse(body) - , oauth = - { consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - , token: access_token.oauth_token - , verifier: access_token.oauth_verifier - } - , url = 'https://api.twitter.com/oauth/access_token' - ; - request.post({url:url, oauth:oauth}, function (e, r, body) { - var perm_token = qs.parse(body) - , oauth = - { consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - , token: perm_token.oauth_token - , token_secret: perm_token.oauth_token_secret - } - , url = 'https://api.twitter.com/1.1/users/show.json?' - , params = - { screen_name: perm_token.screen_name - , user_id: perm_token.user_id - } - ; - url += qs.stringify(params) - request.get({url:url, oauth:oauth, json:true}, function (e, r, user) { - console.log(user) - }) - }) -}) -``` - -### Custom HTTP Headers - -HTTP Headers, such as `User-Agent`, can be set in the `options` object. -In the example below, we call the github API to find out the number -of stars and forks for the request repository. This requires a -custom `User-Agent` header as well as https. - -```javascript -var request = require('request'); - -var options = { - url: 'https://api.github.com/repos/mikeal/request', - headers: { - 'User-Agent': 'request' - } -}; - -function callback(error, response, body) { - if (!error && response.statusCode == 200) { - var info = JSON.parse(body); - console.log(info.stargazers_count + " Stars"); - console.log(info.forks_count + " Forks"); - } -} - -request(options, callback); -``` - -### request(options, callback) - -The first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional. - -* `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()` -* `qs` - object containing querystring values to be appended to the `uri` -* `method` - http method (default: `"GET"`) -* `headers` - http headers (default: `{}`) -* `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer` or `String`. -* `form` - when passed an object, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded; charset=utf-8` header. When passed no options, a `FormData` instance is returned (and is piped to request). -* `auth` - A hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). See documentation above. -* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON. -* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below. -* `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`) -* `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`) -* `maxRedirects` - the maximum number of redirects to follow (default: `10`) -* `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`. -* `pool` - A hash object containing the agents for these requests. If omitted, the request will use the global pool (which is set to node's default `maxSockets`) -* `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool. -* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request -* `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`) -* `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above. -* `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example). -* `strictSSL` - If `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option. -* `jar` - If `true`, remember cookies for future use (or define your custom cookie jar; see examples section) -* `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`. Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services) -* `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options. -* `localAddress` - Local interface to bind for network connections. - - -The callback argument gets 3 arguments: - -1. An `error` when applicable (usually from [`http.ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) object) -2. An [`http.IncomingMessage`](http://nodejs.org/api/http.html#http_http_incomingmessage) object -3. The third is the `response` body (`String` or `Buffer`, or JSON object if the `json` option is supplied) - -## Convenience methods - -There are also shorthand methods for different HTTP METHODs and some other conveniences. - -### request.defaults(options) - -This method returns a wrapper around the normal request API that defaults to whatever options you pass in to it. - -### request.put - -Same as `request()`, but defaults to `method: "PUT"`. - -```javascript -request.put(url) -``` - -### request.patch - -Same as `request()`, but defaults to `method: "PATCH"`. - -```javascript -request.patch(url) -``` - -### request.post - -Same as `request()`, but defaults to `method: "POST"`. - -```javascript -request.post(url) -``` - -### request.head - -Same as request() but defaults to `method: "HEAD"`. - -```javascript -request.head(url) -``` - -### request.del - -Same as `request()`, but defaults to `method: "DELETE"`. - -```javascript -request.del(url) -``` - -### request.get - -Same as `request()` (for uniformity). - -```javascript -request.get(url) -``` -### request.cookie - -Function that creates a new cookie. - -```javascript -request.cookie('cookie_string_here') -``` -### request.jar - -Function that creates a new cookie jar. - -```javascript -request.jar() -``` - - -## Examples: - -```javascript - var request = require('request') - , rand = Math.floor(Math.random()*100000000).toString() - ; - request( - { method: 'PUT' - , uri: 'http://mikeal.iriscouch.com/testjs/' + rand - , multipart: - [ { 'content-type': 'application/json' - , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) - } - , { body: 'I am an attachment' } - ] - } - , function (error, response, body) { - if(response.statusCode == 201){ - console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand) - } else { - console.log('error: '+ response.statusCode) - console.log(body) - } - } - ) -``` - -Cookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`). - -```javascript -var request = request.defaults({jar: true}) -request('http://www.google.com', function () { - request('http://images.google.com') -}) -``` - -To use a custom cookie jar (instead `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`) - -```javascript -var j = request.jar() -var request = request.defaults({jar:j}) -request('http://www.google.com', function () { - request('http://images.google.com') -}) -``` -OR - -Note that `setCookie` requires at least three parameters, and the last is required to be a callback. - -```javascript -var j = request.jar() -var cookie = request.cookie('your_cookie_here') -j.setCookie(cookie, uri, function (err, cookie){}) -request({url: 'http://www.google.com', jar: j}, function () { - request('http://images.google.com') -}) -``` diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/dns-request.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/dns-request.js deleted file mode 100644 index 6a847f6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/dns-request.js +++ /dev/null @@ -1,7 +0,0 @@ -var request = require('request') - , dns = require('dns') - ; - -function wrap (fn) { - var -} \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/index.js deleted file mode 100755 index 465e5ae3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/index.js +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2010-2012 Mikeal Rogers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -var optional = require('./lib/optional') - , cookie = optional('tough-cookie') - , Cookie = cookie && cookie.Cookie - , CookieJar = cookie && cookie.CookieJar - , cookieJar = CookieJar && new CookieJar - - , copy = require('./lib/copy') - , Request = require('./request') - ; - - - -// organize params for patch, post, put, head, del -function initParams(uri, options, callback) { - if ((typeof options === 'function') && !callback) callback = options - if (options && typeof options === 'object') { - options.uri = uri - } else if (typeof uri === 'string') { - options = {uri:uri} - } else { - options = uri - uri = options.uri - } - return { uri: uri, options: options, callback: callback } -} - -function request (uri, options, callback) { - if (typeof uri === 'undefined') throw new Error('undefined is not a valid uri or options object.') - if ((typeof options === 'function') && !callback) callback = options - if (options && typeof options === 'object') { - options.uri = uri - } else if (typeof uri === 'string') { - options = {uri:uri} - } else { - options = uri - } - - options = copy(options) - - if (callback) options.callback = callback - var r = new Request(options) - return r -} - -module.exports = request - -request.Request = Request; - -request.debug = process.env.NODE_DEBUG && /request/.test(process.env.NODE_DEBUG) - -request.initParams = initParams - -request.defaults = function (options, requester) { - var def = function (method) { - var d = function (uri, opts, callback) { - var params = initParams(uri, opts, callback) - for (var i in options) { - if (params.options[i] === undefined) params.options[i] = options[i] - } - if(typeof requester === 'function') { - if(method === request) { - method = requester - } else { - params.options._requester = requester - } - } - return method(params.options, params.callback) - } - return d - } - var de = def(request) - de.get = def(request.get) - de.patch = def(request.patch) - de.post = def(request.post) - de.put = def(request.put) - de.head = def(request.head) - de.del = def(request.del) - de.cookie = def(request.cookie) - de.jar = request.jar - return de -} - -function requester(params) { - if(typeof params.options._requester === 'function') { - return params.options._requester - } else { - return request - } -} - -request.forever = function (agentOptions, optionsArg) { - var options = {} - if (optionsArg) { - for (var option in optionsArg) { - options[option] = optionsArg[option] - } - } - if (agentOptions) options.agentOptions = agentOptions - options.forever = true - return request.defaults(options) -} - -request.get = request -request.post = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'POST' - return requester(params)(params.uri || null, params.options, params.callback) -} -request.put = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'PUT' - return requester(params)(params.uri || null, params.options, params.callback) -} -request.patch = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'PATCH' - return requester(params)(params.uri || null, params.options, params.callback) -} -request.head = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'HEAD' - if (params.options.body || - params.options.requestBodyStream || - (params.options.json && typeof params.options.json !== 'boolean') || - params.options.multipart) { - throw new Error("HTTP HEAD requests MUST NOT include a request body.") - } - - return requester(params)(params.uri || null, params.options, params.callback) -} -request.del = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'DELETE' - return requester(params)(params.uri || null, params.options, params.callback) -} -request.jar = function () { - return new CookieJar -} -request.cookie = function (str) { - if (str && str.uri) str = str.uri - if (typeof str !== 'string') throw new Error("The cookie function only accepts STRING as param") - return new Cookie(str) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/copy.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/copy.js deleted file mode 100644 index 56831ff8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/copy.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = -function copy (obj) { - var o = {} - Object.keys(obj).forEach(function (i) { - o[i] = obj[i] - }) - return o -} \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/debug.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/debug.js deleted file mode 100644 index fa27b24b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/debug.js +++ /dev/null @@ -1,7 +0,0 @@ -var util = require('util') - -module.exports = -function debug () { - if (/\brequest\b/.test(process.env.NODE_DEBUG)) - console.error('REQUEST %s', util.format.apply(util, arguments)) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/getSafe.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/getSafe.js deleted file mode 100644 index 28e07ea5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/getSafe.js +++ /dev/null @@ -1,34 +0,0 @@ -// Safe toJSON -module.exports = -function getSafe (self, uuid) { - if (typeof self === 'object' || typeof self === 'function') var safe = {} - if (Array.isArray(self)) var safe = [] - - var recurse = [] - - Object.defineProperty(self, uuid, {}) - - var attrs = Object.keys(self).filter(function (i) { - if (i === uuid) return false - if ( (typeof self[i] !== 'object' && typeof self[i] !== 'function') || self[i] === null) return true - return !(Object.getOwnPropertyDescriptor(self[i], uuid)) - }) - - - for (var i=0;i<attrs.length;i++) { - if ( (typeof self[attrs[i]] !== 'object' && typeof self[attrs[i]] !== 'function') || - self[attrs[i]] === null - ) { - safe[attrs[i]] = self[attrs[i]] - } else { - recurse.push(attrs[i]) - Object.defineProperty(self[attrs[i]], uuid, {}) - } - } - - for (var i=0;i<recurse.length;i++) { - safe[recurse[i]] = getSafe(self[recurse[i]], uuid) - } - - return safe -} \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/optional.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/optional.js deleted file mode 100644 index 0c4fe853..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/optional.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = function(module) { - try { - return require(module); - } catch (e) {} -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/README.md deleted file mode 100644 index 763564e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/README.md +++ /dev/null @@ -1,4 +0,0 @@ -aws-sign -======== - -AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/index.js deleted file mode 100644 index 576e49dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/index.js +++ /dev/null @@ -1,202 +0,0 @@ - -/*! - * knox - auth - * Copyright(c) 2010 LearnBoost <dev@learnboost.com> - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var crypto = require('crypto') - , parse = require('url').parse - ; - -/** - * Valid keys. - */ - -var keys = - [ 'acl' - , 'location' - , 'logging' - , 'notification' - , 'partNumber' - , 'policy' - , 'requestPayment' - , 'torrent' - , 'uploadId' - , 'uploads' - , 'versionId' - , 'versioning' - , 'versions' - , 'website' - ] - -/** - * Return an "Authorization" header value with the given `options` - * in the form of "AWS <key>:<signature>" - * - * @param {Object} options - * @return {String} - * @api private - */ - -function authorization (options) { - return 'AWS ' + options.key + ':' + sign(options) -} - -module.exports = authorization -module.exports.authorization = authorization - -/** - * Simple HMAC-SHA1 Wrapper - * - * @param {Object} options - * @return {String} - * @api private - */ - -function hmacSha1 (options) { - return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64') -} - -module.exports.hmacSha1 = hmacSha1 - -/** - * Create a base64 sha1 HMAC for `options`. - * - * @param {Object} options - * @return {String} - * @api private - */ - -function sign (options) { - options.message = stringToSign(options) - return hmacSha1(options) -} -module.exports.sign = sign - -/** - * Create a base64 sha1 HMAC for `options`. - * - * Specifically to be used with S3 presigned URLs - * - * @param {Object} options - * @return {String} - * @api private - */ - -function signQuery (options) { - options.message = queryStringToSign(options) - return hmacSha1(options) -} -module.exports.signQuery= signQuery - -/** - * Return a string for sign() with the given `options`. - * - * Spec: - * - * <verb>\n - * <md5>\n - * <content-type>\n - * <date>\n - * [headers\n] - * <resource> - * - * @param {Object} options - * @return {String} - * @api private - */ - -function stringToSign (options) { - var headers = options.amazonHeaders || '' - if (headers) headers += '\n' - var r = - [ options.verb - , options.md5 - , options.contentType - , options.date ? options.date.toUTCString() : '' - , headers + options.resource - ] - return r.join('\n') -} -module.exports.queryStringToSign = stringToSign - -/** - * Return a string for sign() with the given `options`, but is meant exclusively - * for S3 presigned URLs - * - * Spec: - * - * <date>\n - * <resource> - * - * @param {Object} options - * @return {String} - * @api private - */ - -function queryStringToSign (options){ - return 'GET\n\n\n' + options.date + '\n' + options.resource -} -module.exports.queryStringToSign = queryStringToSign - -/** - * Perform the following: - * - * - ignore non-amazon headers - * - lowercase fields - * - sort lexicographically - * - trim whitespace between ":" - * - join with newline - * - * @param {Object} headers - * @return {String} - * @api private - */ - -function canonicalizeHeaders (headers) { - var buf = [] - , fields = Object.keys(headers) - ; - for (var i = 0, len = fields.length; i < len; ++i) { - var field = fields[i] - , val = headers[field] - , field = field.toLowerCase() - ; - if (0 !== field.indexOf('x-amz')) continue - buf.push(field + ':' + val) - } - return buf.sort().join('\n') -} -module.exports.canonicalizeHeaders = canonicalizeHeaders - -/** - * Perform the following: - * - * - ignore non sub-resources - * - sort lexicographically - * - * @param {String} resource - * @return {String} - * @api private - */ - -function canonicalizeResource (resource) { - var url = parse(resource, true) - , path = url.pathname - , buf = [] - ; - - Object.keys(url.query).forEach(function(key){ - if (!~keys.indexOf(key)) return - var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key]) - buf.push(key + val) - }) - - return path + (buf.length ? '?' + buf.sort().join('&') : '') -} -module.exports.canonicalizeResource = canonicalizeResource diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/package.json deleted file mode 100644 index ae98297e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "aws-sign2", - "description": "AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.", - "version": "0.5.0", - "repository": { - "url": "https://github.com/mikeal/aws-sign" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "aws-sign\n========\n\nAWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/aws-sign/issues" - }, - "homepage": "https://github.com/mikeal/aws-sign", - "_id": "aws-sign2@0.5.0", - "dist": { - "shasum": "c57103f7a17fc037f02d7c2e64b602ea223f7d63" - }, - "_from": "aws-sign2@~0.5.0", - "_resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/README.md deleted file mode 100644 index 9d5b6634..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/README.md +++ /dev/null @@ -1,4 +0,0 @@ -forever-agent -============= - -HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/index.js deleted file mode 100644 index 1e8efcdf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/index.js +++ /dev/null @@ -1,119 +0,0 @@ -module.exports = ForeverAgent -ForeverAgent.SSL = ForeverAgentSSL - -var util = require('util') - , Agent = require('http').Agent - , net = require('net') - , tls = require('tls') - , AgentSSL = require('https').Agent - -function ForeverAgent(options) { - var self = this - self.options = options || {} - self.requests = {} - self.sockets = {} - self.freeSockets = {} - self.maxSockets = self.options.maxSockets || Agent.defaultMaxSockets - self.minSockets = self.options.minSockets || ForeverAgent.defaultMinSockets - self.on('free', function(socket, host, port) { - var name = host + ':' + port - if (self.requests[name] && self.requests[name].length) { - self.requests[name].shift().onSocket(socket) - } else if (self.sockets[name].length < self.minSockets) { - if (!self.freeSockets[name]) self.freeSockets[name] = [] - self.freeSockets[name].push(socket) - - // if an error happens while we don't use the socket anyway, meh, throw the socket away - var onIdleError = function() { - socket.destroy() - } - socket._onIdleError = onIdleError - socket.on('error', onIdleError) - } else { - // If there are no pending requests just destroy the - // socket and it will get removed from the pool. This - // gets us out of timeout issues and allows us to - // default to Connection:keep-alive. - socket.destroy() - } - }) - -} -util.inherits(ForeverAgent, Agent) - -ForeverAgent.defaultMinSockets = 5 - - -ForeverAgent.prototype.createConnection = net.createConnection -ForeverAgent.prototype.addRequestNoreuse = Agent.prototype.addRequest -ForeverAgent.prototype.addRequest = function(req, host, port) { - var name = host + ':' + port - if (this.freeSockets[name] && this.freeSockets[name].length > 0 && !req.useChunkedEncodingByDefault) { - var idleSocket = this.freeSockets[name].pop() - idleSocket.removeListener('error', idleSocket._onIdleError) - delete idleSocket._onIdleError - req._reusedSocket = true - req.onSocket(idleSocket) - } else { - this.addRequestNoreuse(req, host, port) - } -} - -ForeverAgent.prototype.removeSocket = function(s, name, host, port) { - if (this.sockets[name]) { - var index = this.sockets[name].indexOf(s) - if (index !== -1) { - this.sockets[name].splice(index, 1) - } - } else if (this.sockets[name] && this.sockets[name].length === 0) { - // don't leak - delete this.sockets[name] - delete this.requests[name] - } - - if (this.freeSockets[name]) { - var index = this.freeSockets[name].indexOf(s) - if (index !== -1) { - this.freeSockets[name].splice(index, 1) - if (this.freeSockets[name].length === 0) { - delete this.freeSockets[name] - } - } - } - - if (this.requests[name] && this.requests[name].length) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createSocket(name, host, port).emit('free') - } -} - -function ForeverAgentSSL (options) { - ForeverAgent.call(this, options) -} -util.inherits(ForeverAgentSSL, ForeverAgent) - -ForeverAgentSSL.prototype.createConnection = createConnectionSSL -ForeverAgentSSL.prototype.addRequestNoreuse = AgentSSL.prototype.addRequest - -function createConnectionSSL (port, host, options) { - if (typeof port === 'object') { - options = port; - } else if (typeof host === 'object') { - options = host; - } else if (typeof options === 'object') { - options = options; - } else { - options = {}; - } - - if (typeof port === 'number') { - options.port = port; - } - - if (typeof host === 'string') { - options.host = host; - } - - return tls.connect(options); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/package.json deleted file mode 100644 index 2044778a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "forever-agent", - "description": "HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.", - "version": "0.5.2", - "repository": { - "url": "https://github.com/mikeal/forever-agent" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "forever-agent\n=============\n\nHTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/forever-agent/issues" - }, - "homepage": "https://github.com/mikeal/forever-agent", - "_id": "forever-agent@0.5.2", - "dist": { - "shasum": "6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" - }, - "_from": "forever-agent@~0.5.0", - "_resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/License b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/License deleted file mode 100644 index c7ff12a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/License +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/Readme.md deleted file mode 100644 index dc73c463..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/Readme.md +++ /dev/null @@ -1,163 +0,0 @@ -# Form-Data [![Build Status](https://travis-ci.org/felixge/node-form-data.png?branch=master)](https://travis-ci.org/felixge/node-form-data) [![Dependency Status](https://gemnasium.com/felixge/node-form-data.png)](https://gemnasium.com/felixge/node-form-data) - -A module to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. - -The API of this module is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. - -[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface -[streams2-thing]: http://nodejs.org/api/stream.html#stream_compatibility_with_older_node_versions - -## Install - -``` -npm install form-data -``` - -## Usage - -In this example we are constructing a form with 3 fields that contain a string, -a buffer and a file stream. - -``` javascript -var FormData = require('form-data'); -var fs = require('fs'); - -var form = new FormData(); -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_file', fs.createReadStream('/foo/bar.jpg')); -``` - -Also you can use http-response stream: - -``` javascript -var FormData = require('form-data'); -var http = require('http'); - -var form = new FormData(); - -http.request('http://nodejs.org/images/logo.png', function(response) { - form.append('my_field', 'my value'); - form.append('my_buffer', new Buffer(10)); - form.append('my_logo', response); -}); -``` - -Or @mikeal's request stream: - -``` javascript -var FormData = require('form-data'); -var request = require('request'); - -var form = new FormData(); - -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_logo', request('http://nodejs.org/images/logo.png')); -``` - -In order to submit this form to a web application, call ```submit(url, [callback])``` method: - -``` javascript -form.submit('http://example.org/', function(err, res) { - // res – response object (http.IncomingMessage) // - res.resume(); // for node-0.10.x -}); - -``` - -For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. - -### Alternative submission methods - -You can use node's http client interface: - -``` javascript -var http = require('http'); - -var request = http.request({ - method: 'post', - host: 'example.org', - path: '/upload', - headers: form.getHeaders() -}); - -form.pipe(request); - -request.on('response', function(res) { - console.log(res.statusCode); -}); -``` - -Or if you would prefer the `'Content-Length'` header to be set for you: - -``` javascript -form.submit('example.org/upload', function(err, res) { - console.log(res.statusCode); -}); -``` - -To use custom headers and pre-known length in parts: - -``` javascript -var CRLF = '\r\n'; -var form = new FormData(); - -var options = { - header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, - knownLength: 1 -}; - -form.append('my_buffer', buffer, options); - -form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); -}); -``` - -Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: - -``` javascript -someModule.stream(function(err, stdout, stderr) { - if (err) throw err; - - var form = new FormData(); - - form.append('file', stdout, { - filename: 'unicycle.jpg', - contentType: 'image/jpg', - knownLength: 19806 - }); - - form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); - }); -}); -``` - -For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: - -``` javascript -form.submit({ - host: 'example.com', - path: '/probably.php?extra=params', - auth: 'username:password' -}, function(err, res) { - console.log(res.statusCode); -}); -``` - -## Notes - -- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. -- If it feels like FormData hangs after submit and you're on ```node-0.10```, please check [Compatibility with Older Node Versions][streams2-thing] - -## TODO - -- Add new streams (0.10) support and try really hard not to break it for 0.8.x. - -## License - -Form-Data is licensed under the MIT license. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/lib/form_data.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/lib/form_data.js deleted file mode 100644 index d1064748..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/lib/form_data.js +++ /dev/null @@ -1,325 +0,0 @@ -var CombinedStream = require('combined-stream'); -var util = require('util'); -var path = require('path'); -var http = require('http'); -var https = require('https'); -var parseUrl = require('url').parse; -var fs = require('fs'); -var mime = require('mime'); -var async = require('async'); - -module.exports = FormData; -function FormData() { - this._overheadLength = 0; - this._valueLength = 0; - this._lengthRetrievers = []; - - CombinedStream.call(this); -} -util.inherits(FormData, CombinedStream); - -FormData.LINE_BREAK = '\r\n'; - -FormData.prototype.append = function(field, value, options) { - options = options || {}; - - var append = CombinedStream.prototype.append.bind(this); - - // all that streamy business can't handle numbers - if (typeof value == 'number') value = ''+value; - - // https://github.com/felixge/node-form-data/issues/38 - if (util.isArray(value)) { - // Please convert your array into string - // the way web server expects it - this._error(new Error('Arrays are not supported.')); - return; - } - - var header = this._multiPartHeader(field, value, options); - var footer = this._multiPartFooter(field, value, options); - - append(header); - append(value); - append(footer); - - // pass along options.knownLength - this._trackLength(header, value, options); -}; - -FormData.prototype._trackLength = function(header, value, options) { - var valueLength = 0; - - // used w/ getLengthSync(), when length is known. - // e.g. for streaming directly from a remote server, - // w/ a known file a size, and not wanting to wait for - // incoming file to finish to get its size. - if (options.knownLength != null) { - valueLength += +options.knownLength; - } else if (Buffer.isBuffer(value)) { - valueLength = value.length; - } else if (typeof value === 'string') { - valueLength = Buffer.byteLength(value); - } - - this._valueLength += valueLength; - - // @check why add CRLF? does this account for custom/multiple CRLFs? - this._overheadLength += - Buffer.byteLength(header) + - + FormData.LINE_BREAK.length; - - // empty or either doesn't have path or not an http response - if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) { - return; - } - - // no need to bother with the length - if (!options.knownLength) - this._lengthRetrievers.push(function(next) { - - if (value.hasOwnProperty('fd')) { - fs.stat(value.path, function(err, stat) { - if (err) { - next(err); - return; - } - - next(null, stat.size); - }); - - // or http response - } else if (value.hasOwnProperty('httpVersion')) { - next(null, +value.headers['content-length']); - - // or request stream http://github.com/mikeal/request - } else if (value.hasOwnProperty('httpModule')) { - // wait till response come back - value.on('response', function(response) { - value.pause(); - next(null, +response.headers['content-length']); - }); - value.resume(); - - // something else - } else { - next('Unknown stream'); - } - }); -}; - -FormData.prototype._multiPartHeader = function(field, value, options) { - var boundary = this.getBoundary(); - var header = ''; - - // custom header specified (as string)? - // it becomes responsible for boundary - // (e.g. to handle extra CRLFs on .NET servers) - if (options.header != null) { - header = options.header; - } else { - header += '--' + boundary + FormData.LINE_BREAK + - 'Content-Disposition: form-data; name="' + field + '"'; - - // fs- and request- streams have path property - // or use custom filename and/or contentType - // TODO: Use request's response mime-type - if (options.filename || value.path) { - header += - '; filename="' + path.basename(options.filename || value.path) + '"' + FormData.LINE_BREAK + - 'Content-Type: ' + (options.contentType || mime.lookup(options.filename || value.path)); - - // http response has not - } else if (value.readable && value.hasOwnProperty('httpVersion')) { - header += - '; filename="' + path.basename(value.client._httpMessage.path) + '"' + FormData.LINE_BREAK + - 'Content-Type: ' + value.headers['content-type']; - } - - header += FormData.LINE_BREAK + FormData.LINE_BREAK; - } - - return header; -}; - -FormData.prototype._multiPartFooter = function(field, value, options) { - return function(next) { - var footer = FormData.LINE_BREAK; - - var lastPart = (this._streams.length === 0); - if (lastPart) { - footer += this._lastBoundary(); - } - - next(footer); - }.bind(this); -}; - -FormData.prototype._lastBoundary = function() { - return '--' + this.getBoundary() + '--'; -}; - -FormData.prototype.getHeaders = function(userHeaders) { - var formHeaders = { - 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() - }; - - for (var header in userHeaders) { - formHeaders[header.toLowerCase()] = userHeaders[header]; - } - - return formHeaders; -} - -FormData.prototype.getCustomHeaders = function(contentType) { - contentType = contentType ? contentType : 'multipart/form-data'; - - var formHeaders = { - 'content-type': contentType + '; boundary=' + this.getBoundary(), - 'content-length': this.getLengthSync() - }; - - return formHeaders; -} - -FormData.prototype.getBoundary = function() { - if (!this._boundary) { - this._generateBoundary(); - } - - return this._boundary; -}; - -FormData.prototype._generateBoundary = function() { - // This generates a 50 character boundary similar to those used by Firefox. - // They are optimized for boyer-moore parsing. - var boundary = '--------------------------'; - for (var i = 0; i < 24; i++) { - boundary += Math.floor(Math.random() * 10).toString(16); - } - - this._boundary = boundary; -}; - -// Note: getLengthSync DOESN'T calculate streams length -// As workaround one can calculate file size manually -// and add it as knownLength option -FormData.prototype.getLengthSync = function(debug) { - var knownLength = this._overheadLength + this._valueLength; - - // Don't get confused, there are 3 "internal" streams for each keyval pair - // so it basically checks if there is any value added to the form - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - - // https://github.com/felixge/node-form-data/issues/40 - if (this._lengthRetrievers.length) { - // Some async length retrivers are present - // therefore synchronous length calculation is false. - // Please use getLength(callback) to get proper length - this._error(new Error('Cannot calculate proper length in synchronous way.')); - } - - return knownLength; -}; - -FormData.prototype.getLength = function(cb) { - var knownLength = this._overheadLength + this._valueLength; - - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - - if (!this._lengthRetrievers.length) { - process.nextTick(cb.bind(this, null, knownLength)); - return; - } - - async.parallel(this._lengthRetrievers, function(err, values) { - if (err) { - cb(err); - return; - } - - values.forEach(function(length) { - knownLength += length; - }); - - cb(null, knownLength); - }); -}; - -FormData.prototype.submit = function(params, cb) { - - var request - , options - , defaults = { - method : 'post', - headers: this.getHeaders() - }; - - // parse provided url if it's string - // or treat it as options object - if (typeof params == 'string') { - params = parseUrl(params); - - options = populate({ - port: params.port, - path: params.pathname, - host: params.hostname - }, defaults); - } - else // use custom params - { - options = populate(params, defaults); - // if no port provided use default one - if (!options.port) { - options.port = options.protocol == 'https:' ? 443 : 80; - } - } - - // https if specified, fallback to http in any other case - if (params.protocol == 'https:') { - request = https.request(options); - } else { - request = http.request(options); - } - - // get content length and fire away - this.getLength(function(err, length) { - - // TODO: Add chunked encoding when no length (if err) - - // add content length - request.setHeader('Content-Length', length); - - this.pipe(request); - if (cb) { - request.on('error', cb); - request.on('response', cb.bind(this, null)); - } - }.bind(this)); - - return request; -}; - -FormData.prototype._error = function(err) { - if (this.error) return; - - this.error = err; - this.pause(); - this.emit('error', err); -}; - -/* - * Santa's little helpers - */ - -// populates missing values -function populate(dst, src) { - for (var prop in src) { - if (!dst[prop]) dst[prop] = src[prop]; - } - return dst; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/LICENSE deleted file mode 100644 index b7f9d500..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010 Caolan McMahon - -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/README.md deleted file mode 100644 index 951f76e9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/README.md +++ /dev/null @@ -1,1425 +0,0 @@ -# Async.js - -Async is a utility module which provides straight-forward, powerful functions -for working with asynchronous JavaScript. Although originally designed for -use with [node.js](http://nodejs.org), it can also be used directly in the -browser. Also supports [component](https://github.com/component/component). - -Async provides around 20 functions that include the usual 'functional' -suspects (map, reduce, filter, each…) as well as some common patterns -for asynchronous control flow (parallel, series, waterfall…). All these -functions assume you follow the node.js convention of providing a single -callback as the last argument of your async function. - - -## Quick Examples - -```javascript -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); - -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); - -async.parallel([ - function(){ ... }, - function(){ ... } -], callback); - -async.series([ - function(){ ... }, - function(){ ... } -]); -``` - -There are many more functions available so take a look at the docs below for a -full list. This module aims to be comprehensive, so if you feel anything is -missing please create a GitHub issue for it. - -## Common Pitfalls - -### Binding a context to an iterator - -This section is really about bind, not about async. If you are wondering how to -make async execute your iterators in a given context, or are confused as to why -a method of another library isn't working as an iterator, study this example: - -```js -// Here is a simple object with an (unnecessarily roundabout) squaring method -var AsyncSquaringLibrary = { - squareExponent: 2, - square: function(number, callback){ - var result = Math.pow(number, this.squareExponent); - setTimeout(function(){ - callback(null, result); - }, 200); - } -}; - -async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){ - // result is [NaN, NaN, NaN] - // This fails because the `this.squareExponent` expression in the square - // function is not evaluated in the context of AsyncSquaringLibrary, and is - // therefore undefined. -}); - -async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){ - // result is [1, 4, 9] - // With the help of bind we can attach a context to the iterator before - // passing it to async. Now the square function will be executed in its - // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent` - // will be as expected. -}); -``` - -## Download - -The source is available for download from -[GitHub](http://github.com/caolan/async). -Alternatively, you can install using Node Package Manager (npm): - - npm install async - -__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed - -## In the Browser - -So far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage: - -```html -<script type="text/javascript" src="async.js"></script> -<script type="text/javascript"> - - async.map(data, asyncProcess, function(err, results){ - alert(results); - }); - -</script> -``` - -## Documentation - -### Collections - -* [each](#each) -* [eachSeries](#eachSeries) -* [eachLimit](#eachLimit) -* [map](#map) -* [mapSeries](#mapSeries) -* [mapLimit](#mapLimit) -* [filter](#filter) -* [filterSeries](#filterSeries) -* [reject](#reject) -* [rejectSeries](#rejectSeries) -* [reduce](#reduce) -* [reduceRight](#reduceRight) -* [detect](#detect) -* [detectSeries](#detectSeries) -* [sortBy](#sortBy) -* [some](#some) -* [every](#every) -* [concat](#concat) -* [concatSeries](#concatSeries) - -### Control Flow - -* [series](#series) -* [parallel](#parallel) -* [parallelLimit](#parallellimittasks-limit-callback) -* [whilst](#whilst) -* [doWhilst](#doWhilst) -* [until](#until) -* [doUntil](#doUntil) -* [forever](#forever) -* [waterfall](#waterfall) -* [compose](#compose) -* [applyEach](#applyEach) -* [applyEachSeries](#applyEachSeries) -* [queue](#queue) -* [cargo](#cargo) -* [auto](#auto) -* [iterator](#iterator) -* [apply](#apply) -* [nextTick](#nextTick) -* [times](#times) -* [timesSeries](#timesSeries) - -### Utils - -* [memoize](#memoize) -* [unmemoize](#unmemoize) -* [log](#log) -* [dir](#dir) -* [noConflict](#noConflict) - - -## Collections - -<a name="forEach" /> -<a name="each" /> -### each(arr, iterator, callback) - -Applies an iterator function to each item in an array, in parallel. -The iterator is called with an item from the list and a callback for when it -has finished. If the iterator passes an error to this callback, the main -callback for the each function is immediately called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err) which must be called once it has - completed. If no error has occured, the callback should be run without - arguments or with an explicit null argument. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - -```js -// assuming openFiles is an array of file names and saveFile is a function -// to save the modified contents of that file: - -async.each(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - ---------------------------------------- - -<a name="forEachSeries" /> -<a name="eachSeries" /> -### eachSeries(arr, iterator, callback) - -The same as each only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. This means the iterator functions will complete in order. - - ---------------------------------------- - -<a name="forEachLimit" /> -<a name="eachLimit" /> -### eachLimit(arr, limit, iterator, callback) - -The same as each only no more than "limit" iterators will be simultaneously -running at any time. - -Note that the items are not processed in batches, so there is no guarantee that - the first "limit" iterator functions will complete before any others are -started. - -__Arguments__ - -* arr - An array to iterate over. -* limit - The maximum number of iterators to run at any time. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err) which must be called once it has - completed. If no error has occured, the callback should be run without - arguments or with an explicit null argument. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - -```js -// Assume documents is an array of JSON objects and requestApi is a -// function that interacts with a rate-limited REST api. - -async.eachLimit(documents, 20, requestApi, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - ---------------------------------------- - -<a name="map" /> -### map(arr, iterator, callback) - -Produces a new array of values by mapping each value in the given array through -the iterator function. The iterator is called with an item from the array and a -callback for when it has finished processing. The callback takes 2 arguments, -an error and the transformed item from the array. If the iterator passes an -error to this callback, the main callback for the map function is immediately -called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order, however -the results array will be in the same order as the original array. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, transformed) which must be called once - it has completed with an error (which can be null) and a transformed item. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array of the - transformed items from the original array. - -__Example__ - -```js -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - ---------------------------------------- - -<a name="mapSeries" /> -### mapSeries(arr, iterator, callback) - -The same as map only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - - ---------------------------------------- - -<a name="mapLimit" /> -### mapLimit(arr, limit, iterator, callback) - -The same as map only no more than "limit" iterators will be simultaneously -running at any time. - -Note that the items are not processed in batches, so there is no guarantee that - the first "limit" iterator functions will complete before any others are -started. - -__Arguments__ - -* arr - An array to iterate over. -* limit - The maximum number of iterators to run at any time. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, transformed) which must be called once - it has completed with an error (which can be null) and a transformed item. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array of the - transformed items from the original array. - -__Example__ - -```js -async.mapLimit(['file1','file2','file3'], 1, fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - ---------------------------------------- - -<a name="filter" /> -### filter(arr, iterator, callback) - -__Alias:__ select - -Returns a new array of all the values which pass an async truth test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like fs.exists. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(results) - A callback which is called after all the iterator - functions have finished. - -__Example__ - -```js -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); -``` - ---------------------------------------- - -<a name="filterSeries" /> -### filterSeries(arr, iterator, callback) - -__alias:__ selectSeries - -The same as filter only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - ---------------------------------------- - -<a name="reject" /> -### reject(arr, iterator, callback) - -The opposite of filter. Removes values that pass an async truth test. - ---------------------------------------- - -<a name="rejectSeries" /> -### rejectSeries(arr, iterator, callback) - -The same as reject, only the iterator is applied to each item in the array -in series. - - ---------------------------------------- - -<a name="reduce" /> -### reduce(arr, memo, iterator, callback) - -__aliases:__ inject, foldl - -Reduces a list of values into a single value using an async iterator to return -each successive step. Memo is the initial state of the reduction. This -function only operates in series. For performance reasons, it may make sense to -split a call to this function into a parallel map, then use the normal -Array.prototype.reduce on the results. This function is for situations where -each step in the reduction needs to be async, if you can get the data before -reducing it then it's probably a good idea to do so. - -__Arguments__ - -* arr - An array to iterate over. -* memo - The initial state of the reduction. -* iterator(memo, item, callback) - A function applied to each item in the - array to produce the next step in the reduction. The iterator is passed a - callback(err, reduction) which accepts an optional error as its first - argument, and the state of the reduction as the second. If an error is - passed to the callback, the reduction is stopped and the main callback is - immediately called with the error. -* callback(err, result) - A callback which is called after all the iterator - functions have finished. Result is the reduced value. - -__Example__ - -```js -async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); -}, function(err, result){ - // result is now equal to the last value of memo, which is 6 -}); -``` - ---------------------------------------- - -<a name="reduceRight" /> -### reduceRight(arr, memo, iterator, callback) - -__Alias:__ foldr - -Same as reduce, only operates on the items in the array in reverse order. - - ---------------------------------------- - -<a name="detect" /> -### detect(arr, iterator, callback) - -Returns the first value in a list that passes an async truth test. The -iterator is applied in parallel, meaning the first iterator to return true will -fire the detect callback with that result. That means the result might not be -the first item in the original array (in terms of order) that passes the test. - -If order within the original array is important then look at detectSeries. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value undefined if none passed. - -__Example__ - -```js -async.detect(['file1','file2','file3'], fs.exists, function(result){ - // result now equals the first file in the list that exists -}); -``` - ---------------------------------------- - -<a name="detectSeries" /> -### detectSeries(arr, iterator, callback) - -The same as detect, only the iterator is applied to each item in the array -in series. This means the result is always the first in the original array (in -terms of array order) that passes the truth test. - - ---------------------------------------- - -<a name="sortBy" /> -### sortBy(arr, iterator, callback) - -Sorts a list by the results of running each value through an async iterator. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, sortValue) which must be called once it - has completed with an error (which can be null) and a value to use as the sort - criteria. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is the items from - the original array sorted by the values returned by the iterator calls. - -__Example__ - -```js -async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); -}, function(err, results){ - // results is now the original array of files sorted by - // modified date -}); -``` - ---------------------------------------- - -<a name="some" /> -### some(arr, iterator, callback) - -__Alias:__ any - -Returns true if at least one element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like fs.exists. Once any iterator -call returns true, the main callback is immediately called. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - either true or false depending on the values of the async tests. - -__Example__ - -```js -async.some(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then at least one of the files exists -}); -``` - ---------------------------------------- - -<a name="every" /> -### every(arr, iterator, callback) - -__Alias:__ all - -Returns true if every element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like fs.exists. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(result) - A callback which is called after all the iterator - functions have finished. Result will be either true or false depending on - the values of the async tests. - -__Example__ - -```js -async.every(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then every file exists -}); -``` - ---------------------------------------- - -<a name="concat" /> -### concat(arr, iterator, callback) - -Applies an iterator to each item in a list, concatenating the results. Returns the -concatenated list. The iterators are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of the arguments passed to the iterator function. - -__Arguments__ - -* arr - An array to iterate over -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, results) which must be called once it - has completed with an error (which can be null) and an array of results. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array containing - the concatenated results of the iterator function. - -__Example__ - -```js -async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories -}); -``` - ---------------------------------------- - -<a name="concatSeries" /> -### concatSeries(arr, iterator, callback) - -Same as async.concat, but executes in series instead of parallel. - - -## Control Flow - -<a name="series" /> -### series(tasks, [callback]) - -Run an array of functions in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run and the callback for the series is -immediately called with the value of the error. Once the tasks have completed, -the results are passed to the final callback as an array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.series. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback(err, result) it must call on completion with an error (which can - be null) and an optional result value. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - } -], -// optional callback -function(err, results){ - // results is now equal to ['one', 'two'] -}); - - -// an example using an object instead of an array -async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equal to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - -<a name="parallel" /> -### parallel(tasks, [callback]) - -Run an array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main callback is immediately called with the value of the error. -Once the tasks have completed, the results are passed to the final callback as an -array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.parallel. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback(err, result) it must call on completion with an error (which can - be null) and an optional result value. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.parallel([ - function(callback){ - setTimeout(function(){ - callback(null, 'one'); - }, 200); - }, - function(callback){ - setTimeout(function(){ - callback(null, 'two'); - }, 100); - } -], -// optional callback -function(err, results){ - // the results array will equal ['one','two'] even though - // the second function had a shorter timeout. -}); - - -// an example using an object instead of an array -async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equals to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - -<a name="parallel" /> -### parallelLimit(tasks, limit, [callback]) - -The same as parallel only the tasks are executed in parallel with a maximum of "limit" -tasks executing at any time. - -Note that the tasks are not executed in batches, so there is no guarantee that -the first "limit" tasks will complete before any others are started. - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback(err, result) it must call on completion with an error (which can - be null) and an optional result value. -* limit - The maximum number of tasks to run at any time. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - ---------------------------------------- - -<a name="whilst" /> -### whilst(test, fn, callback) - -Repeatedly call fn, while test returns true. Calls the callback when stopped, -or an error occurs. - -__Arguments__ - -* test() - synchronous truth test to perform before each execution of fn. -* fn(callback) - A function to call each time the test passes. The function is - passed a callback(err) which must be called once it has completed with an - optional error argument. -* callback(err) - A callback which is called after the test fails and repeated - execution of fn has stopped. - -__Example__ - -```js -var count = 0; - -async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } -); -``` - ---------------------------------------- - -<a name="doWhilst" /> -### doWhilst(fn, test, callback) - -The post check version of whilst. To reflect the difference in the order of operations `test` and `fn` arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. - ---------------------------------------- - -<a name="until" /> -### until(test, fn, callback) - -Repeatedly call fn, until test returns true. Calls the callback when stopped, -or an error occurs. - -The inverse of async.whilst. - ---------------------------------------- - -<a name="doUntil" /> -### doUntil(fn, test, callback) - -Like doWhilst except the test is inverted. Note the argument ordering differs from `until`. - ---------------------------------------- - -<a name="forever" /> -### forever(fn, callback) - -Calls the asynchronous function 'fn' repeatedly, in series, indefinitely. -If an error is passed to fn's callback then 'callback' is called with the -error, otherwise it will never be called. - ---------------------------------------- - -<a name="waterfall" /> -### waterfall(tasks, [callback]) - -Runs an array of functions in series, each passing their results to the next in -the array. However, if any of the functions pass an error to the callback, the -next function is not executed and the main callback is immediately called with -the error. - -__Arguments__ - -* tasks - An array of functions to run, each function is passed a - callback(err, result1, result2, ...) it must call on completion. The first - argument is an error (which can be null) and any further arguments will be - passed as arguments in order to the next task. -* callback(err, [results]) - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - -```js -async.waterfall([ - function(callback){ - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback){ - callback(null, 'three'); - }, - function(arg1, callback){ - // arg1 now equals 'three' - callback(null, 'done'); - } -], function (err, result) { - // result now equals 'done' -}); -``` - ---------------------------------------- -<a name="compose" /> -### compose(fn1, fn2...) - -Creates a function which is a composition of the passed asynchronous -functions. Each function consumes the return value of the function that -follows. Composing functions f(), g() and h() would produce the result of -f(g(h())), only this version uses callbacks to obtain the return values. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* functions... - the asynchronous functions to compose - - -__Example__ - -```js -function add1(n, callback) { - setTimeout(function () { - callback(null, n + 1); - }, 10); -} - -function mul3(n, callback) { - setTimeout(function () { - callback(null, n * 3); - }, 10); -} - -var add1mul3 = async.compose(mul3, add1); - -add1mul3(4, function (err, result) { - // result now equals 15 -}); -``` - ---------------------------------------- -<a name="applyEach" /> -### applyEach(fns, args..., callback) - -Applies the provided arguments to each function in the array, calling the -callback after all functions have completed. If you only provide the first -argument then it will return a function which lets you pass in the -arguments as if it were a single function call. - -__Arguments__ - -* fns - the asynchronous functions to all call with the same arguments -* args... - any number of separate arguments to pass to the function -* callback - the final argument should be the callback, called when all - functions have completed processing - - -__Example__ - -```js -async.applyEach([enableSearch, updateSchema], 'bucket', callback); - -// partial application example: -async.each( - buckets, - async.applyEach([enableSearch, updateSchema]), - callback -); -``` - ---------------------------------------- - -<a name="applyEachSeries" /> -### applyEachSeries(arr, iterator, callback) - -The same as applyEach only the functions are applied in series. - ---------------------------------------- - -<a name="queue" /> -### queue(worker, concurrency) - -Creates a queue object with the specified concurrency. Tasks added to the -queue will be processed in parallel (up to the concurrency limit). If all -workers are in progress, the task is queued until one is available. Once -a worker has completed a task, the task's callback is called. - -__Arguments__ - -* worker(task, callback) - An asynchronous function for processing a queued - task, which must call its callback(err) argument when finished, with an - optional error as an argument. -* concurrency - An integer for determining how many worker functions should be - run in parallel. - -__Queue objects__ - -The queue object returned by this function has the following properties and -methods: - -* length() - a function returning the number of items waiting to be processed. -* concurrency - an integer for determining how many worker functions should be - run in parallel. This property can be changed after a queue is created to - alter the concurrency on-the-fly. -* push(task, [callback]) - add a new task to the queue, the callback is called - once the worker has finished processing the task. - instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list. -* unshift(task, [callback]) - add a new task to the front of the queue. -* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued -* empty - a callback that is called when the last item from the queue is given to a worker -* drain - a callback that is called when the last item from the queue has returned from the worker - -__Example__ - -```js -// create a queue object with concurrency 2 - -var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); -}, 2); - - -// assign a callback -q.drain = function() { - console.log('all items have been processed'); -} - -// add some items to the queue - -q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); - -// add some items to the queue (batch-wise) - -q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing bar'); -}); - -// add some items to the front of the queue - -q.unshift({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -``` - ---------------------------------------- - -<a name="cargo" /> -### cargo(worker, [payload]) - -Creates a cargo object with the specified payload. Tasks added to the -cargo will be processed altogether (up to the payload limit). If the -worker is in progress, the task is queued until it is available. Once -the worker has completed some tasks, each callback of those tasks is called. - -__Arguments__ - -* worker(tasks, callback) - An asynchronous function for processing an array of - queued tasks, which must call its callback(err) argument when finished, with - an optional error as an argument. -* payload - An optional integer for determining how many tasks should be - processed per round; if omitted, the default is unlimited. - -__Cargo objects__ - -The cargo object returned by this function has the following properties and -methods: - -* length() - a function returning the number of items waiting to be processed. -* payload - an integer for determining how many tasks should be - process per round. This property can be changed after a cargo is created to - alter the payload on-the-fly. -* push(task, [callback]) - add a new task to the queue, the callback is called - once the worker has finished processing the task. - instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list. -* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued -* empty - a callback that is called when the last item from the queue is given to a worker -* drain - a callback that is called when the last item from the queue has returned from the worker - -__Example__ - -```js -// create a cargo object with payload 2 - -var cargo = async.cargo(function (tasks, callback) { - for(var i=0; i<tasks.length; i++){ - console.log('hello ' + tasks[i].name); - } - callback(); -}, 2); - - -// add some items - -cargo.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -cargo.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -cargo.push({name: 'baz'}, function (err) { - console.log('finished processing baz'); -}); -``` - ---------------------------------------- - -<a name="auto" /> -### auto(tasks, [callback]) - -Determines the best order for running functions based on their requirements. -Each function can optionally depend on other functions being completed first, -and each function is run as soon as its requirements are satisfied. If any of -the functions pass an error to their callback, that function will not complete -(so any other functions depending on it will not run) and the main callback -will be called immediately with the error. Functions also receive an object -containing the results of functions which have completed so far. - -Note, all functions are called with a results object as a second argument, -so it is unsafe to pass functions in the tasks object which cannot handle the -extra argument. For example, this snippet of code: - -```js -async.auto({ - readData: async.apply(fs.readFile, 'data.txt', 'utf-8') -}, callback); -``` - -will have the effect of calling readFile with the results object as the last -argument, which will fail: - -```js -fs.readFile('data.txt', 'utf-8', cb, {}); -``` - -Instead, wrap the call to readFile in a function which does not forward the -results object: - -```js -async.auto({ - readData: function(cb, results){ - fs.readFile('data.txt', 'utf-8', cb); - } -}, callback); -``` - -__Arguments__ - -* tasks - An object literal containing named functions or an array of - requirements, with the function itself the last item in the array. The key - used for each function or array is used when specifying requirements. The - function receives two arguments: (1) a callback(err, result) which must be - called when finished, passing an error (which can be null) and the result of - the function's execution, and (2) a results object, containing the results of - the previously executed functions. -* callback(err, results) - An optional callback which is called when all the - tasks have been completed. The callback will receive an error as an argument - if any tasks pass an error to their callback. Results will always be passed - but if an error occurred, no other tasks will be performed, and the results - object will only contain partial results. - - -__Example__ - -```js -async.auto({ - get_data: function(callback){ - // async code to get some data - }, - make_folder: function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - }, - write_file: ['get_data', 'make_folder', function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, filename); - }], - email_link: ['write_file', function(callback, results){ - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - }] -}); -``` - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - -```js -async.parallel([ - function(callback){ - // async code to get some data - }, - function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - } -], -function(err, results){ - async.series([ - function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - }, - function(callback){ - // once the file is written let's email a link to it... - } - ]); -}); -``` - -For a complicated series of async tasks using the auto function makes adding -new tasks much easier and makes the code more readable. - - ---------------------------------------- - -<a name="iterator" /> -### iterator(tasks) - -Creates an iterator function which calls the next function in the array, -returning a continuation to call the next one after that. It's also possible to -'peek' the next iterator by doing iterator.next(). - -This function is used internally by the async module but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* tasks - An array of functions to run. - -__Example__ - -```js -var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } -]); - -node> var iterator2 = iterator(); -'one' -node> var iterator3 = iterator2(); -'two' -node> iterator3(); -'three' -node> var nextfn = iterator2.next(); -node> nextfn(); -'three' -``` - ---------------------------------------- - -<a name="apply" /> -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied, a useful -shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - -```js -// using apply - -async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), -]); - - -// the same process without using apply - -async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - } -]); -``` - -It's possible to pass any number of additional arguments when calling the -continuation: - -```js -node> var fn = async.apply(sys.puts, 'one'); -node> fn('two', 'three'); -one -two -three -``` - ---------------------------------------- - -<a name="nextTick" /> -### nextTick(callback) - -Calls the callback on a later loop around the event loop. In node.js this just -calls process.nextTick, in the browser it falls back to setImmediate(callback) -if available, otherwise setTimeout(callback, 0), which means other higher priority -events may precede the execution of the callback. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* callback - The function to call on a later loop around the event loop. - -__Example__ - -```js -var call_order = []; -async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two'] -}); -call_order.push('one') -``` - -<a name="times" /> -### times(n, callback) - -Calls the callback n times and accumulates results in the same manner -you would use with async.map. - -__Arguments__ - -* n - The number of times to run the function. -* callback - The function to call n times. - -__Example__ - -```js -// Pretend this is some complicated async factory -var createUser = function(id, callback) { - callback(null, { - id: 'user' + id - }) -} -// generate 5 users -async.times(5, function(n, next){ - createUser(n, function(err, user) { - next(err, user) - }) -}, function(err, users) { - // we should now have 5 users -}); -``` - -<a name="timesSeries" /> -### timesSeries(n, callback) - -The same as times only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - - -## Utils - -<a name="memoize" /> -### memoize(fn, [hasher]) - -Caches the results of an async function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -The cache of results is exposed as the `memo` property of the function returned -by `memoize`. - -__Arguments__ - -* fn - the function you to proxy and cache results from. -* hasher - an optional function for generating a custom hash for storing - results, it has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - -```js -var slow_fn = function (name, callback) { - // do something - callback(null, result); -}; -var fn = async.memoize(slow_fn); - -// fn can now be used as if it were slow_fn -fn('some name', function () { - // callback -}); -``` - -<a name="unmemoize" /> -### unmemoize(fn) - -Undoes a memoized function, reverting it to the original, unmemoized -form. Comes handy in tests. - -__Arguments__ - -* fn - the memoized function - -<a name="log" /> -### log(function, arguments) - -Logs the result of an async function to the console. Only works in node.js or -in browsers that support console.log and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.log is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); -}; -``` -```js -node> async.log(hello, 'world'); -'hello world' -``` - ---------------------------------------- - -<a name="dir" /> -### dir(function, arguments) - -Logs the result of an async function to the console using console.dir to -display the properties of the resulting object. Only works in node.js or -in browsers that support console.dir and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.dir is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); -}; -``` -```js -node> async.dir(hello, 'world'); -{hello: 'world'} -``` - ---------------------------------------- - -<a name="noConflict" /> -### noConflict() - -Changes the value of async back to its original value, returning a reference to the -async object. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/component.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/component.json deleted file mode 100644 index bbb01154..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/component.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "async", - "repo": "caolan/async", - "description": "Higher-order functions and common patterns for asynchronous code", - "version": "0.1.23", - "keywords": [], - "dependencies": {}, - "development": {}, - "main": "lib/async.js", - "scripts": [ "lib/async.js" ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js deleted file mode 100755 index 1eebb153..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js +++ /dev/null @@ -1,958 +0,0 @@ -/*global setImmediate: false, setTimeout: false, console: false */ -(function () { - - var async = {}; - - // global on the server, window in the browser - var root, previous_async; - - root = this; - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - var called = false; - return function() { - if (called) throw new Error("Callback was already called."); - called = true; - fn.apply(root, arguments); - } - } - - //// cross-browser compatiblity functions //// - - var _each = function (arr, iterator) { - if (arr.forEach) { - return arr.forEach(iterator); - } - for (var i = 0; i < arr.length; i += 1) { - iterator(arr[i], i, arr); - } - }; - - var _map = function (arr, iterator) { - if (arr.map) { - return arr.map(iterator); - } - var results = []; - _each(arr, function (x, i, a) { - results.push(iterator(x, i, a)); - }); - return results; - }; - - var _reduce = function (arr, iterator, memo) { - if (arr.reduce) { - return arr.reduce(iterator, memo); - } - _each(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - }; - - var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - if (typeof process === 'undefined' || !(process.nextTick)) { - if (typeof setImmediate === 'function') { - async.nextTick = function (fn) { - // not a direct alias for IE10 compatibility - setImmediate(fn); - }; - async.setImmediate = async.nextTick; - } - else { - async.nextTick = function (fn) { - setTimeout(fn, 0); - }; - async.setImmediate = async.nextTick; - } - } - else { - async.nextTick = process.nextTick; - if (typeof setImmediate !== 'undefined') { - async.setImmediate = function (fn) { - // not a direct alias for IE10 compatibility - setImmediate(fn); - }; - } - else { - async.setImmediate = async.nextTick; - } - } - - async.each = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - _each(arr, function (x) { - iterator(x, only_once(function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed >= arr.length) { - callback(null); - } - } - })); - }); - }; - async.forEach = async.each; - - async.eachSeries = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - var iterate = function () { - iterator(arr[completed], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed >= arr.length) { - callback(null); - } - else { - iterate(); - } - } - }); - }; - iterate(); - }; - async.forEachSeries = async.eachSeries; - - async.eachLimit = function (arr, limit, iterator, callback) { - var fn = _eachLimit(limit); - fn.apply(null, [arr, iterator, callback]); - }; - async.forEachLimit = async.eachLimit; - - var _eachLimit = function (limit) { - - return function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length || limit <= 0) { - return callback(); - } - var completed = 0; - var started = 0; - var running = 0; - - (function replenish () { - if (completed >= arr.length) { - return callback(); - } - - while (running < limit && started < arr.length) { - started += 1; - running += 1; - iterator(arr[started - 1], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - running -= 1; - if (completed >= arr.length) { - callback(); - } - else { - replenish(); - } - } - }); - } - })(); - }; - }; - - - var doParallel = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.each].concat(args)); - }; - }; - var doParallelLimit = function(limit, fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [_eachLimit(limit)].concat(args)); - }; - }; - var doSeries = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.eachSeries].concat(args)); - }; - }; - - - var _asyncMap = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (err, v) { - results[x.index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - }; - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = function (arr, limit, iterator, callback) { - return _mapLimit(limit)(arr, iterator, callback); - }; - - var _mapLimit = function(limit) { - return doParallelLimit(limit, _asyncMap); - }; - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.reduce = function (arr, memo, iterator, callback) { - async.eachSeries(arr, function (x, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - // inject alias - async.inject = async.reduce; - // foldl alias - async.foldl = async.reduce; - - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, function (x) { - return x; - }).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - // foldr alias - async.foldr = async.reduceRight; - - var _filter = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.filter = doParallel(_filter); - async.filterSeries = doSeries(_filter); - // select alias - async.select = async.filter; - async.selectSeries = async.filterSeries; - - var _reject = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (!v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.reject = doParallel(_reject); - async.rejectSeries = doSeries(_reject); - - var _detect = function (eachfn, arr, iterator, main_callback) { - eachfn(arr, function (x, callback) { - iterator(x, function (result) { - if (result) { - main_callback(x); - main_callback = function () {}; - } - else { - callback(); - } - }); - }, function (err) { - main_callback(); - }); - }; - async.detect = doParallel(_detect); - async.detectSeries = doSeries(_detect); - - async.some = function (arr, iterator, main_callback) { - async.each(arr, function (x, callback) { - iterator(x, function (v) { - if (v) { - main_callback(true); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(false); - }); - }; - // any alias - async.any = async.some; - - async.every = function (arr, iterator, main_callback) { - async.each(arr, function (x, callback) { - iterator(x, function (v) { - if (!v) { - main_callback(false); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(true); - }); - }; - // all alias - async.all = async.every; - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - var fn = function (left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }; - callback(null, _map(results.sort(fn), function (x) { - return x.value; - })); - } - }); - }; - - async.auto = function (tasks, callback) { - callback = callback || function () {}; - var keys = _keys(tasks); - if (!keys.length) { - return callback(null); - } - - var results = {}; - - var listeners = []; - var addListener = function (fn) { - listeners.unshift(fn); - }; - var removeListener = function (fn) { - for (var i = 0; i < listeners.length; i += 1) { - if (listeners[i] === fn) { - listeners.splice(i, 1); - return; - } - } - }; - var taskComplete = function () { - _each(listeners.slice(0), function (fn) { - fn(); - }); - }; - - addListener(function () { - if (_keys(results).length === keys.length) { - callback(null, results); - callback = function () {}; - } - }); - - _each(keys, function (k) { - var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k]; - var taskCallback = function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _each(_keys(results), function(rkey) { - safeResults[rkey] = results[rkey]; - }); - safeResults[k] = args; - callback(err, safeResults); - // stop subsequent errors hitting callback multiple times - callback = function () {}; - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }; - var requires = task.slice(0, Math.abs(task.length - 1)) || []; - var ready = function () { - return _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - }; - if (ready()) { - task[task.length - 1](taskCallback, results); - } - else { - var listener = function () { - if (ready()) { - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - }; - addListener(listener); - } - }); - }; - - async.waterfall = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor !== Array) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - var wrapIterator = function (iterator) { - return function (err) { - if (err) { - callback.apply(null, arguments); - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - async.setImmediate(function () { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(async.iterator(tasks))(); - }; - - var _parallel = function(eachfn, tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - eachfn.map(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - eachfn.each(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.parallel = function (tasks, callback) { - _parallel({ map: async.map, each: async.each }, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback); - }; - - async.series = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.mapSeries(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - async.eachSeries(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.iterator = function (tasks) { - var makeCallback = function (index) { - var fn = function () { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - }; - return makeCallback(0); - }; - - async.apply = function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return fn.apply( - null, args.concat(Array.prototype.slice.call(arguments)) - ); - }; - }; - - var _concat = function (eachfn, arr, fn, callback) { - var r = []; - eachfn(arr, function (x, cb) { - fn(x, function (err, y) { - r = r.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, r); - }); - }; - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - if (test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.whilst(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.doWhilst = function (iterator, test, callback) { - iterator(function (err) { - if (err) { - return callback(err); - } - if (test()) { - async.doWhilst(iterator, test, callback); - } - else { - callback(); - } - }); - }; - - async.until = function (test, iterator, callback) { - if (!test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.until(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.doUntil = function (iterator, test, callback) { - iterator(function (err) { - if (err) { - return callback(err); - } - if (!test()) { - async.doUntil(iterator, test, callback); - } - else { - callback(); - } - }); - }; - - async.queue = function (worker, concurrency) { - if (concurrency === undefined) { - concurrency = 1; - } - function _insert(q, data, pos, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _each(data, function(task) { - var item = { - data: task, - callback: typeof callback === 'function' ? callback : null - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.saturated && q.tasks.length === concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - var workers = 0; - var q = { - tasks: [], - concurrency: concurrency, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - if (workers < q.concurrency && q.tasks.length) { - var task = q.tasks.shift(); - if (q.empty && q.tasks.length === 0) { - q.empty(); - } - workers += 1; - var next = function () { - workers -= 1; - if (task.callback) { - task.callback.apply(task, arguments); - } - if (q.drain && q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - var cb = only_once(next); - worker(task.data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - } - }; - return q; - }; - - async.cargo = function (worker, payload) { - var working = false, - tasks = []; - - var cargo = { - tasks: tasks, - payload: payload, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _each(data, function(task) { - tasks.push({ - data: task, - callback: typeof callback === 'function' ? callback : null - }); - if (cargo.saturated && tasks.length === payload) { - cargo.saturated(); - } - }); - async.setImmediate(cargo.process); - }, - process: function process() { - if (working) return; - if (tasks.length === 0) { - if(cargo.drain) cargo.drain(); - return; - } - - var ts = typeof payload === 'number' - ? tasks.splice(0, payload) - : tasks.splice(0); - - var ds = _map(ts, function (task) { - return task.data; - }); - - if(cargo.empty) cargo.empty(); - working = true; - worker(ds, function () { - working = false; - - var args = arguments; - _each(ts, function (data) { - if (data.callback) { - data.callback.apply(null, args); - } - }); - - process(); - }); - }, - length: function () { - return tasks.length; - }, - running: function () { - return working; - } - }; - return cargo; - }; - - var _console_fn = function (name) { - return function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - fn.apply(null, args.concat([function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (typeof console !== 'undefined') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _each(args, function (x) { - console[name](x); - }); - } - } - }])); - }; - }; - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - hasher = hasher || function (x) { - return x; - }; - var memoized = function () { - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - var key = hasher.apply(null, args); - if (key in memo) { - callback.apply(null, memo[key]); - } - else if (key in queues) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([function () { - memo[key] = arguments; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, arguments); - } - }])); - } - }; - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - async.times = function (count, iterator, callback) { - var counter = []; - for (var i = 0; i < count; i++) { - counter.push(i); - } - return async.map(counter, iterator, callback); - }; - - async.timesSeries = function (count, iterator, callback) { - var counter = []; - for (var i = 0; i < count; i++) { - counter.push(i); - } - return async.mapSeries(counter, iterator, callback); - }; - - async.compose = function (/* functions... */) { - var fns = Array.prototype.reverse.call(arguments); - return function () { - var that = this; - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([function () { - var err = arguments[0]; - var nextargs = Array.prototype.slice.call(arguments, 1); - cb(err, nextargs); - }])) - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }; - }; - - var _applyEach = function (eachfn, fns /*args...*/) { - var go = function () { - var that = this; - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - return eachfn(fns, function (fn, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }; - if (arguments.length > 2) { - var args = Array.prototype.slice.call(arguments, 2); - return go.apply(this, args); - } - else { - return go; - } - }; - async.applyEach = doParallel(_applyEach); - async.applyEachSeries = doSeries(_applyEach); - - async.forever = function (fn, callback) { - function next(err) { - if (err) { - if (callback) { - return callback(err); - } - throw err; - } - fn(next); - } - next(); - }; - - // AMD / RequireJS - if (typeof define !== 'undefined' && define.amd) { - define([], function () { - return async; - }); - } - // Node.js - else if (typeof module !== 'undefined' && module.exports) { - module.exports = async; - } - // included directly via <script> tag - else { - root.async = async; - } - -}()); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/package.json deleted file mode 100644 index c586b717..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "async", - "description": "Higher-order functions and common patterns for asynchronous code", - "main": "./lib/async", - "author": { - "name": "Caolan McMahon" - }, - "version": "0.2.10", - "repository": { - "type": "git", - "url": "https://github.com/caolan/async.git" - }, - "bugs": { - "url": "https://github.com/caolan/async/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/caolan/async/raw/master/LICENSE" - } - ], - "devDependencies": { - "nodeunit": ">0.0.0", - "uglify-js": "1.2.x", - "nodelint": ">0.0.0" - }, - "jam": { - "main": "lib/async.js", - "include": [ - "lib/async.js", - "README.md", - "LICENSE" - ] - }, - "scripts": { - "test": "nodeunit test/test-async.js" - }, - "readme": "# Async.js\n\nAsync is a utility module which provides straight-forward, powerful functions\nfor working with asynchronous JavaScript. Although originally designed for\nuse with [node.js](http://nodejs.org), it can also be used directly in the\nbrowser. Also supports [component](https://github.com/component/component).\n\nAsync provides around 20 functions that include the usual 'functional'\nsuspects (map, reduce, filter, each…) as well as some common patterns\nfor asynchronous control flow (parallel, series, waterfall…). All these\nfunctions assume you follow the node.js convention of providing a single\ncallback as the last argument of your async function.\n\n\n## Quick Examples\n\n```javascript\nasync.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n\nasync.filter(['file1','file2','file3'], fs.exists, function(results){\n // results now equals an array of the existing files\n});\n\nasync.parallel([\n function(){ ... },\n function(){ ... }\n], callback);\n\nasync.series([\n function(){ ... },\n function(){ ... }\n]);\n```\n\nThere are many more functions available so take a look at the docs below for a\nfull list. This module aims to be comprehensive, so if you feel anything is\nmissing please create a GitHub issue for it.\n\n## Common Pitfalls\n\n### Binding a context to an iterator\n\nThis section is really about bind, not about async. If you are wondering how to\nmake async execute your iterators in a given context, or are confused as to why\na method of another library isn't working as an iterator, study this example:\n\n```js\n// Here is a simple object with an (unnecessarily roundabout) squaring method\nvar AsyncSquaringLibrary = {\n squareExponent: 2,\n square: function(number, callback){ \n var result = Math.pow(number, this.squareExponent);\n setTimeout(function(){\n callback(null, result);\n }, 200);\n }\n};\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){\n // result is [NaN, NaN, NaN]\n // This fails because the `this.squareExponent` expression in the square\n // function is not evaluated in the context of AsyncSquaringLibrary, and is\n // therefore undefined.\n});\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){\n // result is [1, 4, 9]\n // With the help of bind we can attach a context to the iterator before\n // passing it to async. Now the square function will be executed in its \n // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent`\n // will be as expected.\n});\n```\n\n## Download\n\nThe source is available for download from\n[GitHub](http://github.com/caolan/async).\nAlternatively, you can install using Node Package Manager (npm):\n\n npm install async\n\n__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed\n\n## In the Browser\n\nSo far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage:\n\n```html\n<script type=\"text/javascript\" src=\"async.js\"></script>\n<script type=\"text/javascript\">\n\n async.map(data, asyncProcess, function(err, results){\n alert(results);\n });\n\n</script>\n```\n\n## Documentation\n\n### Collections\n\n* [each](#each)\n* [eachSeries](#eachSeries)\n* [eachLimit](#eachLimit)\n* [map](#map)\n* [mapSeries](#mapSeries)\n* [mapLimit](#mapLimit)\n* [filter](#filter)\n* [filterSeries](#filterSeries)\n* [reject](#reject)\n* [rejectSeries](#rejectSeries)\n* [reduce](#reduce)\n* [reduceRight](#reduceRight)\n* [detect](#detect)\n* [detectSeries](#detectSeries)\n* [sortBy](#sortBy)\n* [some](#some)\n* [every](#every)\n* [concat](#concat)\n* [concatSeries](#concatSeries)\n\n### Control Flow\n\n* [series](#series)\n* [parallel](#parallel)\n* [parallelLimit](#parallellimittasks-limit-callback)\n* [whilst](#whilst)\n* [doWhilst](#doWhilst)\n* [until](#until)\n* [doUntil](#doUntil)\n* [forever](#forever)\n* [waterfall](#waterfall)\n* [compose](#compose)\n* [applyEach](#applyEach)\n* [applyEachSeries](#applyEachSeries)\n* [queue](#queue)\n* [cargo](#cargo)\n* [auto](#auto)\n* [iterator](#iterator)\n* [apply](#apply)\n* [nextTick](#nextTick)\n* [times](#times)\n* [timesSeries](#timesSeries)\n\n### Utils\n\n* [memoize](#memoize)\n* [unmemoize](#unmemoize)\n* [log](#log)\n* [dir](#dir)\n* [noConflict](#noConflict)\n\n\n## Collections\n\n<a name=\"forEach\" />\n<a name=\"each\" />\n### each(arr, iterator, callback)\n\nApplies an iterator function to each item in an array, in parallel.\nThe iterator is called with an item from the list and a callback for when it\nhas finished. If the iterator passes an error to this callback, the main\ncallback for the each function is immediately called with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// assuming openFiles is an array of file names and saveFile is a function\n// to save the modified contents of that file:\n\nasync.each(openFiles, saveFile, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name=\"forEachSeries\" />\n<a name=\"eachSeries\" />\n### eachSeries(arr, iterator, callback)\n\nThe same as each only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. This means the iterator functions will complete in order.\n\n\n---------------------------------------\n\n<a name=\"forEachLimit\" />\n<a name=\"eachLimit\" />\n### eachLimit(arr, limit, iterator, callback)\n\nThe same as each only no more than \"limit\" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first \"limit\" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// Assume documents is an array of JSON objects and requestApi is a\n// function that interacts with a rate-limited REST api.\n\nasync.eachLimit(documents, 20, requestApi, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name=\"map\" />\n### map(arr, iterator, callback)\n\nProduces a new array of values by mapping each value in the given array through\nthe iterator function. The iterator is called with an item from the array and a\ncallback for when it has finished processing. The callback takes 2 arguments, \nan error and the transformed item from the array. If the iterator passes an\nerror to this callback, the main callback for the map function is immediately\ncalled with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order, however\nthe results array will be in the same order as the original array.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name=\"mapSeries\" />\n### mapSeries(arr, iterator, callback)\n\nThe same as map only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n---------------------------------------\n\n<a name=\"mapLimit\" />\n### mapLimit(arr, limit, iterator, callback)\n\nThe same as map only no more than \"limit\" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first \"limit\" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.mapLimit(['file1','file2','file3'], 1, fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name=\"filter\" />\n### filter(arr, iterator, callback)\n\n__Alias:__ select\n\nReturns a new array of all the values which pass an async truth test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists. This operation is\nperformed in parallel, but the results array will be in the same order as the\noriginal.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(results) - A callback which is called after all the iterator\n functions have finished.\n\n__Example__\n\n```js\nasync.filter(['file1','file2','file3'], fs.exists, function(results){\n // results now equals an array of the existing files\n});\n```\n\n---------------------------------------\n\n<a name=\"filterSeries\" />\n### filterSeries(arr, iterator, callback)\n\n__alias:__ selectSeries\n\nThe same as filter only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n---------------------------------------\n\n<a name=\"reject\" />\n### reject(arr, iterator, callback)\n\nThe opposite of filter. Removes values that pass an async truth test.\n\n---------------------------------------\n\n<a name=\"rejectSeries\" />\n### rejectSeries(arr, iterator, callback)\n\nThe same as reject, only the iterator is applied to each item in the array\nin series.\n\n\n---------------------------------------\n\n<a name=\"reduce\" />\n### reduce(arr, memo, iterator, callback)\n\n__aliases:__ inject, foldl\n\nReduces a list of values into a single value using an async iterator to return\neach successive step. Memo is the initial state of the reduction. This\nfunction only operates in series. For performance reasons, it may make sense to\nsplit a call to this function into a parallel map, then use the normal\nArray.prototype.reduce on the results. This function is for situations where\neach step in the reduction needs to be async, if you can get the data before\nreducing it then it's probably a good idea to do so.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* memo - The initial state of the reduction.\n* iterator(memo, item, callback) - A function applied to each item in the\n array to produce the next step in the reduction. The iterator is passed a\n callback(err, reduction) which accepts an optional error as its first \n argument, and the state of the reduction as the second. If an error is \n passed to the callback, the reduction is stopped and the main callback is \n immediately called with the error.\n* callback(err, result) - A callback which is called after all the iterator\n functions have finished. Result is the reduced value.\n\n__Example__\n\n```js\nasync.reduce([1,2,3], 0, function(memo, item, callback){\n // pointless async:\n process.nextTick(function(){\n callback(null, memo + item)\n });\n}, function(err, result){\n // result is now equal to the last value of memo, which is 6\n});\n```\n\n---------------------------------------\n\n<a name=\"reduceRight\" />\n### reduceRight(arr, memo, iterator, callback)\n\n__Alias:__ foldr\n\nSame as reduce, only operates on the items in the array in reverse order.\n\n\n---------------------------------------\n\n<a name=\"detect\" />\n### detect(arr, iterator, callback)\n\nReturns the first value in a list that passes an async truth test. The\niterator is applied in parallel, meaning the first iterator to return true will\nfire the detect callback with that result. That means the result might not be\nthe first item in the original array (in terms of order) that passes the test.\n\nIf order within the original array is important then look at detectSeries.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n the first item in the array that passes the truth test (iterator) or the\n value undefined if none passed.\n\n__Example__\n\n```js\nasync.detect(['file1','file2','file3'], fs.exists, function(result){\n // result now equals the first file in the list that exists\n});\n```\n\n---------------------------------------\n\n<a name=\"detectSeries\" />\n### detectSeries(arr, iterator, callback)\n\nThe same as detect, only the iterator is applied to each item in the array\nin series. This means the result is always the first in the original array (in\nterms of array order) that passes the truth test.\n\n\n---------------------------------------\n\n<a name=\"sortBy\" />\n### sortBy(arr, iterator, callback)\n\nSorts a list by the results of running each value through an async iterator.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, sortValue) which must be called once it\n has completed with an error (which can be null) and a value to use as the sort\n criteria.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is the items from\n the original array sorted by the values returned by the iterator calls.\n\n__Example__\n\n```js\nasync.sortBy(['file1','file2','file3'], function(file, callback){\n fs.stat(file, function(err, stats){\n callback(err, stats.mtime);\n });\n}, function(err, results){\n // results is now the original array of files sorted by\n // modified date\n});\n```\n\n---------------------------------------\n\n<a name=\"some\" />\n### some(arr, iterator, callback)\n\n__Alias:__ any\n\nReturns true if at least one element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists. Once any iterator\ncall returns true, the main callback is immediately called.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n either true or false depending on the values of the async tests.\n\n__Example__\n\n```js\nasync.some(['file1','file2','file3'], fs.exists, function(result){\n // if result is true then at least one of the files exists\n});\n```\n\n---------------------------------------\n\n<a name=\"every\" />\n### every(arr, iterator, callback)\n\n__Alias:__ all\n\nReturns true if every element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called after all the iterator\n functions have finished. Result will be either true or false depending on\n the values of the async tests.\n\n__Example__\n\n```js\nasync.every(['file1','file2','file3'], fs.exists, function(result){\n // if result is true then every file exists\n});\n```\n\n---------------------------------------\n\n<a name=\"concat\" />\n### concat(arr, iterator, callback)\n\nApplies an iterator to each item in a list, concatenating the results. Returns the\nconcatenated list. The iterators are called in parallel, and the results are\nconcatenated as they return. There is no guarantee that the results array will\nbe returned in the original order of the arguments passed to the iterator function.\n\n__Arguments__\n\n* arr - An array to iterate over\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, results) which must be called once it \n has completed with an error (which can be null) and an array of results.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array containing\n the concatenated results of the iterator function.\n\n__Example__\n\n```js\nasync.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){\n // files is now a list of filenames that exist in the 3 directories\n});\n```\n\n---------------------------------------\n\n<a name=\"concatSeries\" />\n### concatSeries(arr, iterator, callback)\n\nSame as async.concat, but executes in series instead of parallel.\n\n\n## Control Flow\n\n<a name=\"series\" />\n### series(tasks, [callback])\n\nRun an array of functions in series, each one running once the previous\nfunction has completed. If any functions in the series pass an error to its\ncallback, no more functions are run and the callback for the series is\nimmediately called with the value of the error. Once the tasks have completed,\nthe results are passed to the final callback as an array.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.series.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed\n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.series([\n function(callback){\n // do some stuff ...\n callback(null, 'one');\n },\n function(callback){\n // do some more stuff ...\n callback(null, 'two');\n }\n],\n// optional callback\nfunction(err, results){\n // results is now equal to ['one', 'two']\n});\n\n\n// an example using an object instead of an array\nasync.series({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equal to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name=\"parallel\" />\n### parallel(tasks, [callback])\n\nRun an array of functions in parallel, without waiting until the previous\nfunction has completed. If any of the functions pass an error to its\ncallback, the main callback is immediately called with the value of the error.\nOnce the tasks have completed, the results are passed to the final callback as an\narray.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.parallel.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.parallel([\n function(callback){\n setTimeout(function(){\n callback(null, 'one');\n }, 200);\n },\n function(callback){\n setTimeout(function(){\n callback(null, 'two');\n }, 100);\n }\n],\n// optional callback\nfunction(err, results){\n // the results array will equal ['one','two'] even though\n // the second function had a shorter timeout.\n});\n\n\n// an example using an object instead of an array\nasync.parallel({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equals to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name=\"parallel\" />\n### parallelLimit(tasks, limit, [callback])\n\nThe same as parallel only the tasks are executed in parallel with a maximum of \"limit\" \ntasks executing at any time.\n\nNote that the tasks are not executed in batches, so there is no guarantee that \nthe first \"limit\" tasks will complete before any others are started.\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* limit - The maximum number of tasks to run at any time.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n---------------------------------------\n\n<a name=\"whilst\" />\n### whilst(test, fn, callback)\n\nRepeatedly call fn, while test returns true. Calls the callback when stopped,\nor an error occurs.\n\n__Arguments__\n\n* test() - synchronous truth test to perform before each execution of fn.\n* fn(callback) - A function to call each time the test passes. The function is\n passed a callback(err) which must be called once it has completed with an \n optional error argument.\n* callback(err) - A callback which is called after the test fails and repeated\n execution of fn has stopped.\n\n__Example__\n\n```js\nvar count = 0;\n\nasync.whilst(\n function () { return count < 5; },\n function (callback) {\n count++;\n setTimeout(callback, 1000);\n },\n function (err) {\n // 5 seconds have passed\n }\n);\n```\n\n---------------------------------------\n\n<a name=\"doWhilst\" />\n### doWhilst(fn, test, callback)\n\nThe post check version of whilst. To reflect the difference in the order of operations `test` and `fn` arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n\n---------------------------------------\n\n<a name=\"until\" />\n### until(test, fn, callback)\n\nRepeatedly call fn, until test returns true. Calls the callback when stopped,\nor an error occurs.\n\nThe inverse of async.whilst.\n\n---------------------------------------\n\n<a name=\"doUntil\" />\n### doUntil(fn, test, callback)\n\nLike doWhilst except the test is inverted. Note the argument ordering differs from `until`.\n\n---------------------------------------\n\n<a name=\"forever\" />\n### forever(fn, callback)\n\nCalls the asynchronous function 'fn' repeatedly, in series, indefinitely.\nIf an error is passed to fn's callback then 'callback' is called with the\nerror, otherwise it will never be called.\n\n---------------------------------------\n\n<a name=\"waterfall\" />\n### waterfall(tasks, [callback])\n\nRuns an array of functions in series, each passing their results to the next in\nthe array. However, if any of the functions pass an error to the callback, the\nnext function is not executed and the main callback is immediately called with\nthe error.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a \n callback(err, result1, result2, ...) it must call on completion. The first\n argument is an error (which can be null) and any further arguments will be \n passed as arguments in order to the next task.\n* callback(err, [results]) - An optional callback to run once all the functions\n have completed. This will be passed the results of the last task's callback.\n\n\n\n__Example__\n\n```js\nasync.waterfall([\n function(callback){\n callback(null, 'one', 'two');\n },\n function(arg1, arg2, callback){\n callback(null, 'three');\n },\n function(arg1, callback){\n // arg1 now equals 'three'\n callback(null, 'done');\n }\n], function (err, result) {\n // result now equals 'done' \n});\n```\n\n---------------------------------------\n<a name=\"compose\" />\n### compose(fn1, fn2...)\n\nCreates a function which is a composition of the passed asynchronous\nfunctions. Each function consumes the return value of the function that\nfollows. Composing functions f(), g() and h() would produce the result of\nf(g(h())), only this version uses callbacks to obtain the return values.\n\nEach function is executed with the `this` binding of the composed function.\n\n__Arguments__\n\n* functions... - the asynchronous functions to compose\n\n\n__Example__\n\n```js\nfunction add1(n, callback) {\n setTimeout(function () {\n callback(null, n + 1);\n }, 10);\n}\n\nfunction mul3(n, callback) {\n setTimeout(function () {\n callback(null, n * 3);\n }, 10);\n}\n\nvar add1mul3 = async.compose(mul3, add1);\n\nadd1mul3(4, function (err, result) {\n // result now equals 15\n});\n```\n\n---------------------------------------\n<a name=\"applyEach\" />\n### applyEach(fns, args..., callback)\n\nApplies the provided arguments to each function in the array, calling the\ncallback after all functions have completed. If you only provide the first\nargument then it will return a function which lets you pass in the\narguments as if it were a single function call.\n\n__Arguments__\n\n* fns - the asynchronous functions to all call with the same arguments\n* args... - any number of separate arguments to pass to the function\n* callback - the final argument should be the callback, called when all\n functions have completed processing\n\n\n__Example__\n\n```js\nasync.applyEach([enableSearch, updateSchema], 'bucket', callback);\n\n// partial application example:\nasync.each(\n buckets,\n async.applyEach([enableSearch, updateSchema]),\n callback\n);\n```\n\n---------------------------------------\n\n<a name=\"applyEachSeries\" />\n### applyEachSeries(arr, iterator, callback)\n\nThe same as applyEach only the functions are applied in series.\n\n---------------------------------------\n\n<a name=\"queue\" />\n### queue(worker, concurrency)\n\nCreates a queue object with the specified concurrency. Tasks added to the\nqueue will be processed in parallel (up to the concurrency limit). If all\nworkers are in progress, the task is queued until one is available. Once\na worker has completed a task, the task's callback is called.\n\n__Arguments__\n\n* worker(task, callback) - An asynchronous function for processing a queued\n task, which must call its callback(err) argument when finished, with an \n optional error as an argument.\n* concurrency - An integer for determining how many worker functions should be\n run in parallel.\n\n__Queue objects__\n\nThe queue object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* concurrency - an integer for determining how many worker functions should be\n run in parallel. This property can be changed after a queue is created to\n alter the concurrency on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* unshift(task, [callback]) - add a new task to the front of the queue.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a queue object with concurrency 2\n\nvar q = async.queue(function (task, callback) {\n console.log('hello ' + task.name);\n callback();\n}, 2);\n\n\n// assign a callback\nq.drain = function() {\n console.log('all items have been processed');\n}\n\n// add some items to the queue\n\nq.push({name: 'foo'}, function (err) {\n console.log('finished processing foo');\n});\nq.push({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n});\n\n// add some items to the queue (batch-wise)\n\nq.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) {\n console.log('finished processing bar');\n});\n\n// add some items to the front of the queue\n\nq.unshift({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n});\n```\n\n---------------------------------------\n\n<a name=\"cargo\" />\n### cargo(worker, [payload])\n\nCreates a cargo object with the specified payload. Tasks added to the\ncargo will be processed altogether (up to the payload limit). If the\nworker is in progress, the task is queued until it is available. Once\nthe worker has completed some tasks, each callback of those tasks is called.\n\n__Arguments__\n\n* worker(tasks, callback) - An asynchronous function for processing an array of\n queued tasks, which must call its callback(err) argument when finished, with \n an optional error as an argument.\n* payload - An optional integer for determining how many tasks should be\n processed per round; if omitted, the default is unlimited.\n\n__Cargo objects__\n\nThe cargo object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* payload - an integer for determining how many tasks should be\n process per round. This property can be changed after a cargo is created to\n alter the payload on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a cargo object with payload 2\n\nvar cargo = async.cargo(function (tasks, callback) {\n for(var i=0; i<tasks.length; i++){\n console.log('hello ' + tasks[i].name);\n }\n callback();\n}, 2);\n\n\n// add some items\n\ncargo.push({name: 'foo'}, function (err) {\n console.log('finished processing foo');\n});\ncargo.push({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n});\ncargo.push({name: 'baz'}, function (err) {\n console.log('finished processing baz');\n});\n```\n\n---------------------------------------\n\n<a name=\"auto\" />\n### auto(tasks, [callback])\n\nDetermines the best order for running functions based on their requirements.\nEach function can optionally depend on other functions being completed first,\nand each function is run as soon as its requirements are satisfied. If any of\nthe functions pass an error to their callback, that function will not complete\n(so any other functions depending on it will not run) and the main callback\nwill be called immediately with the error. Functions also receive an object\ncontaining the results of functions which have completed so far.\n\nNote, all functions are called with a results object as a second argument, \nso it is unsafe to pass functions in the tasks object which cannot handle the\nextra argument. For example, this snippet of code:\n\n```js\nasync.auto({\n readData: async.apply(fs.readFile, 'data.txt', 'utf-8')\n}, callback);\n```\n\nwill have the effect of calling readFile with the results object as the last\nargument, which will fail:\n\n```js\nfs.readFile('data.txt', 'utf-8', cb, {});\n```\n\nInstead, wrap the call to readFile in a function which does not forward the \nresults object:\n\n```js\nasync.auto({\n readData: function(cb, results){\n fs.readFile('data.txt', 'utf-8', cb);\n }\n}, callback);\n```\n\n__Arguments__\n\n* tasks - An object literal containing named functions or an array of\n requirements, with the function itself the last item in the array. The key\n used for each function or array is used when specifying requirements. The \n function receives two arguments: (1) a callback(err, result) which must be \n called when finished, passing an error (which can be null) and the result of \n the function's execution, and (2) a results object, containing the results of\n the previously executed functions.\n* callback(err, results) - An optional callback which is called when all the\n tasks have been completed. The callback will receive an error as an argument\n if any tasks pass an error to their callback. Results will always be passed\n\tbut if an error occurred, no other tasks will be performed, and the results\n\tobject will only contain partial results.\n \n\n__Example__\n\n```js\nasync.auto({\n get_data: function(callback){\n // async code to get some data\n },\n make_folder: function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n },\n write_file: ['get_data', 'make_folder', function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n callback(null, filename);\n }],\n email_link: ['write_file', function(callback, results){\n // once the file is written let's email a link to it...\n // results.write_file contains the filename returned by write_file.\n }]\n});\n```\n\nThis is a fairly trivial example, but to do this using the basic parallel and\nseries functions would look like this:\n\n```js\nasync.parallel([\n function(callback){\n // async code to get some data\n },\n function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n }\n],\nfunction(err, results){\n async.series([\n function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n },\n function(callback){\n // once the file is written let's email a link to it...\n }\n ]);\n});\n```\n\nFor a complicated series of async tasks using the auto function makes adding\nnew tasks much easier and makes the code more readable.\n\n\n---------------------------------------\n\n<a name=\"iterator\" />\n### iterator(tasks)\n\nCreates an iterator function which calls the next function in the array,\nreturning a continuation to call the next one after that. It's also possible to\n'peek' the next iterator by doing iterator.next().\n\nThis function is used internally by the async module but can be useful when\nyou want to manually control the flow of functions in series.\n\n__Arguments__\n\n* tasks - An array of functions to run.\n\n__Example__\n\n```js\nvar iterator = async.iterator([\n function(){ sys.p('one'); },\n function(){ sys.p('two'); },\n function(){ sys.p('three'); }\n]);\n\nnode> var iterator2 = iterator();\n'one'\nnode> var iterator3 = iterator2();\n'two'\nnode> iterator3();\n'three'\nnode> var nextfn = iterator2.next();\nnode> nextfn();\n'three'\n```\n\n---------------------------------------\n\n<a name=\"apply\" />\n### apply(function, arguments..)\n\nCreates a continuation function with some arguments already applied, a useful\nshorthand when combined with other control flow functions. Any arguments\npassed to the returned function are added to the arguments originally passed\nto apply.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to automatically apply when the\n continuation is called.\n\n__Example__\n\n```js\n// using apply\n\nasync.parallel([\n async.apply(fs.writeFile, 'testfile1', 'test1'),\n async.apply(fs.writeFile, 'testfile2', 'test2'),\n]);\n\n\n// the same process without using apply\n\nasync.parallel([\n function(callback){\n fs.writeFile('testfile1', 'test1', callback);\n },\n function(callback){\n fs.writeFile('testfile2', 'test2', callback);\n }\n]);\n```\n\nIt's possible to pass any number of additional arguments when calling the\ncontinuation:\n\n```js\nnode> var fn = async.apply(sys.puts, 'one');\nnode> fn('two', 'three');\none\ntwo\nthree\n```\n\n---------------------------------------\n\n<a name=\"nextTick\" />\n### nextTick(callback)\n\nCalls the callback on a later loop around the event loop. In node.js this just\ncalls process.nextTick, in the browser it falls back to setImmediate(callback)\nif available, otherwise setTimeout(callback, 0), which means other higher priority\nevents may precede the execution of the callback.\n\nThis is used internally for browser-compatibility purposes.\n\n__Arguments__\n\n* callback - The function to call on a later loop around the event loop.\n\n__Example__\n\n```js\nvar call_order = [];\nasync.nextTick(function(){\n call_order.push('two');\n // call_order now equals ['one','two']\n});\ncall_order.push('one')\n```\n\n<a name=\"times\" />\n### times(n, callback)\n\nCalls the callback n times and accumulates results in the same manner\nyou would use with async.map.\n\n__Arguments__\n\n* n - The number of times to run the function.\n* callback - The function to call n times.\n\n__Example__\n\n```js\n// Pretend this is some complicated async factory\nvar createUser = function(id, callback) {\n callback(null, {\n id: 'user' + id\n })\n}\n// generate 5 users\nasync.times(5, function(n, next){\n createUser(n, function(err, user) {\n next(err, user)\n })\n}, function(err, users) {\n // we should now have 5 users\n});\n```\n\n<a name=\"timesSeries\" />\n### timesSeries(n, callback)\n\nThe same as times only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n## Utils\n\n<a name=\"memoize\" />\n### memoize(fn, [hasher])\n\nCaches the results of an async function. When creating a hash to store function\nresults against, the callback is omitted from the hash and an optional hash\nfunction can be used.\n\nThe cache of results is exposed as the `memo` property of the function returned\nby `memoize`.\n\n__Arguments__\n\n* fn - the function you to proxy and cache results from.\n* hasher - an optional function for generating a custom hash for storing\n results, it has all the arguments applied to it apart from the callback, and\n must be synchronous.\n\n__Example__\n\n```js\nvar slow_fn = function (name, callback) {\n // do something\n callback(null, result);\n};\nvar fn = async.memoize(slow_fn);\n\n// fn can now be used as if it were slow_fn\nfn('some name', function () {\n // callback\n});\n```\n\n<a name=\"unmemoize\" />\n### unmemoize(fn)\n\nUndoes a memoized function, reverting it to the original, unmemoized\nform. Comes handy in tests.\n\n__Arguments__\n\n* fn - the memoized function\n\n<a name=\"log\" />\n### log(function, arguments)\n\nLogs the result of an async function to the console. Only works in node.js or\nin browsers that support console.log and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.log is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, 'hello ' + name);\n }, 1000);\n};\n```\n```js\nnode> async.log(hello, 'world');\n'hello world'\n```\n\n---------------------------------------\n\n<a name=\"dir\" />\n### dir(function, arguments)\n\nLogs the result of an async function to the console using console.dir to\ndisplay the properties of the resulting object. Only works in node.js or\nin browsers that support console.dir and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.dir is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, {hello: name});\n }, 1000);\n};\n```\n```js\nnode> async.dir(hello, 'world');\n{hello: 'world'}\n```\n\n---------------------------------------\n\n<a name=\"noConflict\" />\n### noConflict()\n\nChanges the value of async back to its original value, returning a reference to the\nasync object.\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/caolan/async", - "_id": "async@0.2.10", - "dist": { - "shasum": "a06e6818541aa1851d6ac822c8dbbfd6206eb72f" - }, - "_from": "async@~0.2.9", - "_resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore deleted file mode 100644 index aba34f01..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -*.un~ -/node_modules -/test/tmp diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/License b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/License deleted file mode 100644 index 4804b7ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/License +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Debuggable Limited <felix@debuggable.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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile deleted file mode 100644 index b4ff85a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -SHELL := /bin/bash - -test: - @./test/run.js - -.PHONY: test - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md deleted file mode 100644 index 1a9999eb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md +++ /dev/null @@ -1,132 +0,0 @@ -# combined-stream - -A stream that emits multiple other streams one after another. - -## Installation - -``` bash -npm install combined-stream -``` - -## Usage - -Here is a simple example that shows how you can use combined-stream to combine -two files into one: - -``` javascript -var CombinedStream = require('combined-stream'); -var fs = require('fs'); - -var combinedStream = CombinedStream.create(); -combinedStream.append(fs.createReadStream('file1.txt')); -combinedStream.append(fs.createReadStream('file2.txt')); - -combinedStream.pipe(fs.createWriteStream('combined.txt')); -``` - -While the example above works great, it will pause all source streams until -they are needed. If you don't want that to happen, you can set `pauseStreams` -to `false`: - -``` javascript -var CombinedStream = require('combined-stream'); -var fs = require('fs'); - -var combinedStream = CombinedStream.create({pauseStreams: false}); -combinedStream.append(fs.createReadStream('file1.txt')); -combinedStream.append(fs.createReadStream('file2.txt')); - -combinedStream.pipe(fs.createWriteStream('combined.txt')); -``` - -However, what if you don't have all the source streams yet, or you don't want -to allocate the resources (file descriptors, memory, etc.) for them right away? -Well, in that case you can simply provide a callback that supplies the stream -by calling a `next()` function: - -``` javascript -var CombinedStream = require('combined-stream'); -var fs = require('fs'); - -var combinedStream = CombinedStream.create(); -combinedStream.append(function(next) { - next(fs.createReadStream('file1.txt')); -}); -combinedStream.append(function(next) { - next(fs.createReadStream('file2.txt')); -}); - -combinedStream.pipe(fs.createWriteStream('combined.txt')); -``` - -## API - -### CombinedStream.create([options]) - -Returns a new combined stream object. Available options are: - -* `maxDataSize` -* `pauseStreams` - -The effect of those options is described below. - -### combinedStream.pauseStreams = true - -Whether to apply back pressure to the underlaying streams. If set to `false`, -the underlaying streams will never be paused. If set to `true`, the -underlaying streams will be paused right after being appended, as well as when -`delayedStream.pipe()` wants to throttle. - -### combinedStream.maxDataSize = 2 * 1024 * 1024 - -The maximum amount of bytes (or characters) to buffer for all source streams. -If this value is exceeded, `combinedStream` emits an `'error'` event. - -### combinedStream.dataSize = 0 - -The amount of bytes (or characters) currently buffered by `combinedStream`. - -### combinedStream.append(stream) - -Appends the given `stream` to the combinedStream object. If `pauseStreams` is -set to `true, this stream will also be paused right away. - -`streams` can also be a function that takes one parameter called `next`. `next` -is a function that must be invoked in order to provide the `next` stream, see -example above. - -Regardless of how the `stream` is appended, combined-stream always attaches an -`'error'` listener to it, so you don't have to do that manually. - -Special case: `stream` can also be a String or Buffer. - -### combinedStream.write(data) - -You should not call this, `combinedStream` takes care of piping the appended -streams into itself for you. - -### combinedStream.resume() - -Causes `combinedStream` to start drain the streams it manages. The function is -idempotent, and also emits a `'resume'` event each time which usually goes to -the stream that is currently being drained. - -### combinedStream.pause(); - -If `combinedStream.pauseStreams` is set to `false`, this does nothing. -Otherwise a `'pause'` event is emitted, this goes to the stream that is -currently being drained, so you can use it to apply back pressure. - -### combinedStream.end(); - -Sets `combinedStream.writable` to false, emits an `'end'` event, and removes -all streams from the queue. - -### combinedStream.destroy(); - -Same as `combinedStream.end()`, except it emits a `'close'` event instead of -`'end'`. - -## License - -combined-stream is licensed under the MIT license. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js deleted file mode 100644 index 32849fd1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js +++ /dev/null @@ -1,185 +0,0 @@ -var util = require('util'); -var Stream = require('stream').Stream; -var DelayedStream = require('delayed-stream'); - -module.exports = CombinedStream; -function CombinedStream() { - this.writable = false; - this.readable = true; - this.dataSize = 0; - this.maxDataSize = 2 * 1024 * 1024; - this.pauseStreams = true; - - this._released = false; - this._streams = []; - this._currentStream = null; -} -util.inherits(CombinedStream, Stream); - -CombinedStream.create = function(options) { - var combinedStream = new this(); - - options = options || {}; - for (var option in options) { - combinedStream[option] = options[option]; - } - - return combinedStream; -}; - -CombinedStream.isStreamLike = function(stream) { - return (typeof stream !== 'function') - && (typeof stream !== 'string') - && (typeof stream !== 'boolean') - && (typeof stream !== 'number') - && (!Buffer.isBuffer(stream)); -}; - -CombinedStream.prototype.append = function(stream) { - var isStreamLike = CombinedStream.isStreamLike(stream); - - if (isStreamLike) { - if (!(stream instanceof DelayedStream)) { - stream.on('data', this._checkDataSize.bind(this)); - - stream = DelayedStream.create(stream, { - maxDataSize: Infinity, - pauseStream: this.pauseStreams, - }); - } - - this._handleErrors(stream); - - if (this.pauseStreams) { - stream.pause(); - } - } - - this._streams.push(stream); - return this; -}; - -CombinedStream.prototype.pipe = function(dest, options) { - Stream.prototype.pipe.call(this, dest, options); - this.resume(); -}; - -CombinedStream.prototype._getNext = function() { - this._currentStream = null; - var stream = this._streams.shift(); - - - if (typeof stream == 'undefined') { - this.end(); - return; - } - - if (typeof stream !== 'function') { - this._pipeNext(stream); - return; - } - - var getStream = stream; - getStream(function(stream) { - var isStreamLike = CombinedStream.isStreamLike(stream); - if (isStreamLike) { - stream.on('data', this._checkDataSize.bind(this)); - this._handleErrors(stream); - } - - this._pipeNext(stream); - }.bind(this)); -}; - -CombinedStream.prototype._pipeNext = function(stream) { - this._currentStream = stream; - - var isStreamLike = CombinedStream.isStreamLike(stream); - if (isStreamLike) { - stream.on('end', this._getNext.bind(this)) - stream.pipe(this, {end: false}); - return; - } - - var value = stream; - this.write(value); - this._getNext(); -}; - -CombinedStream.prototype._handleErrors = function(stream) { - var self = this; - stream.on('error', function(err) { - self._emitError(err); - }); -}; - -CombinedStream.prototype.write = function(data) { - this.emit('data', data); -}; - -CombinedStream.prototype.pause = function() { - if (!this.pauseStreams) { - return; - } - - this.emit('pause'); -}; - -CombinedStream.prototype.resume = function() { - if (!this._released) { - this._released = true; - this.writable = true; - this._getNext(); - } - - this.emit('resume'); -}; - -CombinedStream.prototype.end = function() { - this._reset(); - this.emit('end'); -}; - -CombinedStream.prototype.destroy = function() { - this._reset(); - this.emit('close'); -}; - -CombinedStream.prototype._reset = function() { - this.writable = false; - this._streams = []; - this._currentStream = null; -}; - -CombinedStream.prototype._checkDataSize = function() { - this._updateDataSize(); - if (this.dataSize <= this.maxDataSize) { - return; - } - - var message = - 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' - this._emitError(new Error(message)); -}; - -CombinedStream.prototype._updateDataSize = function() { - this.dataSize = 0; - - var self = this; - this._streams.forEach(function(stream) { - if (!stream.dataSize) { - return; - } - - self.dataSize += stream.dataSize; - }); - - if (this._currentStream && this._currentStream.dataSize) { - this.dataSize += this._currentStream.dataSize; - } -}; - -CombinedStream.prototype._emitError = function(err) { - this._reset(); - this.emit('error', err); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore deleted file mode 100644 index 2fedb26c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -*.un~ -/node_modules/* diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License deleted file mode 100644 index 4804b7ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Debuggable Limited <felix@debuggable.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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile deleted file mode 100644 index b4ff85a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -SHELL := /bin/bash - -test: - @./test/run.js - -.PHONY: test - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md deleted file mode 100644 index 5cb5b35e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md +++ /dev/null @@ -1,154 +0,0 @@ -# delayed-stream - -Buffers events from a stream until you are ready to handle them. - -## Installation - -``` bash -npm install delayed-stream -``` - -## Usage - -The following example shows how to write a http echo server that delays its -response by 1000 ms. - -``` javascript -var DelayedStream = require('delayed-stream'); -var http = require('http'); - -http.createServer(function(req, res) { - var delayed = DelayedStream.create(req); - - setTimeout(function() { - res.writeHead(200); - delayed.pipe(res); - }, 1000); -}); -``` - -If you are not using `Stream#pipe`, you can also manually release the buffered -events by calling `delayedStream.resume()`: - -``` javascript -var delayed = DelayedStream.create(req); - -setTimeout(function() { - // Emit all buffered events and resume underlaying source - delayed.resume(); -}, 1000); -``` - -## Implementation - -In order to use this meta stream properly, here are a few things you should -know about the implementation. - -### Event Buffering / Proxying - -All events of the `source` stream are hijacked by overwriting the `source.emit` -method. Until node implements a catch-all event listener, this is the only way. - -However, delayed-stream still continues to emit all events it captures on the -`source`, regardless of whether you have released the delayed stream yet or -not. - -Upon creation, delayed-stream captures all `source` events and stores them in -an internal event buffer. Once `delayedStream.release()` is called, all -buffered events are emitted on the `delayedStream`, and the event buffer is -cleared. After that, delayed-stream merely acts as a proxy for the underlaying -source. - -### Error handling - -Error events on `source` are buffered / proxied just like any other events. -However, `delayedStream.create` attaches a no-op `'error'` listener to the -`source`. This way you only have to handle errors on the `delayedStream` -object, rather than in two places. - -### Buffer limits - -delayed-stream provides a `maxDataSize` property that can be used to limit -the amount of data being buffered. In order to protect you from bad `source` -streams that don't react to `source.pause()`, this feature is enabled by -default. - -## API - -### DelayedStream.create(source, [options]) - -Returns a new `delayedStream`. Available options are: - -* `pauseStream` -* `maxDataSize` - -The description for those properties can be found below. - -### delayedStream.source - -The `source` stream managed by this object. This is useful if you are -passing your `delayedStream` around, and you still want to access properties -on the `source` object. - -### delayedStream.pauseStream = true - -Whether to pause the underlaying `source` when calling -`DelayedStream.create()`. Modifying this property afterwards has no effect. - -### delayedStream.maxDataSize = 1024 * 1024 - -The amount of data to buffer before emitting an `error`. - -If the underlaying source is emitting `Buffer` objects, the `maxDataSize` -refers to bytes. - -If the underlaying source is emitting JavaScript strings, the size refers to -characters. - -If you know what you are doing, you can set this property to `Infinity` to -disable this feature. You can also modify this property during runtime. - -### delayedStream.maxDataSize = 1024 * 1024 - -The amount of data to buffer before emitting an `error`. - -If the underlaying source is emitting `Buffer` objects, the `maxDataSize` -refers to bytes. - -If the underlaying source is emitting JavaScript strings, the size refers to -characters. - -If you know what you are doing, you can set this property to `Infinity` to -disable this feature. - -### delayedStream.dataSize = 0 - -The amount of data buffered so far. - -### delayedStream.readable - -An ECMA5 getter that returns the value of `source.readable`. - -### delayedStream.resume() - -If the `delayedStream` has not been released so far, `delayedStream.release()` -is called. - -In either case, `source.resume()` is called. - -### delayedStream.pause() - -Calls `source.pause()`. - -### delayedStream.pipe(dest) - -Calls `delayedStream.resume()` and then proxies the arguments to `source.pipe`. - -### delayedStream.release() - -Emits and clears all events that have been buffered up so far. This does not -resume the underlaying source, use `delayedStream.resume()` instead. - -## License - -delayed-stream is licensed under the MIT license. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js deleted file mode 100644 index 7c10d482..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js +++ /dev/null @@ -1,99 +0,0 @@ -var Stream = require('stream').Stream; -var util = require('util'); - -module.exports = DelayedStream; -function DelayedStream() { - this.source = null; - this.dataSize = 0; - this.maxDataSize = 1024 * 1024; - this.pauseStream = true; - - this._maxDataSizeExceeded = false; - this._released = false; - this._bufferedEvents = []; -} -util.inherits(DelayedStream, Stream); - -DelayedStream.create = function(source, options) { - var delayedStream = new this(); - - options = options || {}; - for (var option in options) { - delayedStream[option] = options[option]; - } - - delayedStream.source = source; - - var realEmit = source.emit; - source.emit = function() { - delayedStream._handleEmit(arguments); - return realEmit.apply(source, arguments); - }; - - source.on('error', function() {}); - if (delayedStream.pauseStream) { - source.pause(); - } - - return delayedStream; -}; - -DelayedStream.prototype.__defineGetter__('readable', function() { - return this.source.readable; -}); - -DelayedStream.prototype.resume = function() { - if (!this._released) { - this.release(); - } - - this.source.resume(); -}; - -DelayedStream.prototype.pause = function() { - this.source.pause(); -}; - -DelayedStream.prototype.release = function() { - this._released = true; - - this._bufferedEvents.forEach(function(args) { - this.emit.apply(this, args); - }.bind(this)); - this._bufferedEvents = []; -}; - -DelayedStream.prototype.pipe = function() { - var r = Stream.prototype.pipe.apply(this, arguments); - this.resume(); - return r; -}; - -DelayedStream.prototype._handleEmit = function(args) { - if (this._released) { - this.emit.apply(this, args); - return; - } - - if (args[0] === 'data') { - this.dataSize += args[1].length; - this._checkIfMaxDataSizeExceeded(); - } - - this._bufferedEvents.push(args); -}; - -DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { - if (this._maxDataSizeExceeded) { - return; - } - - if (this.dataSize <= this.maxDataSize) { - return; - } - - this._maxDataSizeExceeded = true; - var message = - 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' - this.emit('error', new Error(message)); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json deleted file mode 100644 index 2ba5526d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "author": { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com", - "url": "http://debuggable.com/" - }, - "name": "delayed-stream", - "description": "Buffers events from a stream until you are ready to handle them.", - "version": "0.0.5", - "homepage": "https://github.com/felixge/node-delayed-stream", - "repository": { - "type": "git", - "url": "git://github.com/felixge/node-delayed-stream.git" - }, - "main": "./lib/delayed_stream", - "engines": { - "node": ">=0.4.0" - }, - "dependencies": {}, - "devDependencies": { - "fake": "0.2.0", - "far": "0.0.1" - }, - "readme": "# delayed-stream\n\nBuffers events from a stream until you are ready to handle them.\n\n## Installation\n\n``` bash\nnpm install delayed-stream\n```\n\n## Usage\n\nThe following example shows how to write a http echo server that delays its\nresponse by 1000 ms.\n\n``` javascript\nvar DelayedStream = require('delayed-stream');\nvar http = require('http');\n\nhttp.createServer(function(req, res) {\n var delayed = DelayedStream.create(req);\n\n setTimeout(function() {\n res.writeHead(200);\n delayed.pipe(res);\n }, 1000);\n});\n```\n\nIf you are not using `Stream#pipe`, you can also manually release the buffered\nevents by calling `delayedStream.resume()`:\n\n``` javascript\nvar delayed = DelayedStream.create(req);\n\nsetTimeout(function() {\n // Emit all buffered events and resume underlaying source\n delayed.resume();\n}, 1000);\n```\n\n## Implementation\n\nIn order to use this meta stream properly, here are a few things you should\nknow about the implementation.\n\n### Event Buffering / Proxying\n\nAll events of the `source` stream are hijacked by overwriting the `source.emit`\nmethod. Until node implements a catch-all event listener, this is the only way.\n\nHowever, delayed-stream still continues to emit all events it captures on the\n`source`, regardless of whether you have released the delayed stream yet or\nnot.\n\nUpon creation, delayed-stream captures all `source` events and stores them in\nan internal event buffer. Once `delayedStream.release()` is called, all\nbuffered events are emitted on the `delayedStream`, and the event buffer is\ncleared. After that, delayed-stream merely acts as a proxy for the underlaying\nsource.\n\n### Error handling\n\nError events on `source` are buffered / proxied just like any other events.\nHowever, `delayedStream.create` attaches a no-op `'error'` listener to the\n`source`. This way you only have to handle errors on the `delayedStream`\nobject, rather than in two places.\n\n### Buffer limits\n\ndelayed-stream provides a `maxDataSize` property that can be used to limit\nthe amount of data being buffered. In order to protect you from bad `source`\nstreams that don't react to `source.pause()`, this feature is enabled by\ndefault.\n\n## API\n\n### DelayedStream.create(source, [options])\n\nReturns a new `delayedStream`. Available options are:\n\n* `pauseStream`\n* `maxDataSize`\n\nThe description for those properties can be found below.\n\n### delayedStream.source\n\nThe `source` stream managed by this object. This is useful if you are\npassing your `delayedStream` around, and you still want to access properties\non the `source` object.\n\n### delayedStream.pauseStream = true\n\nWhether to pause the underlaying `source` when calling\n`DelayedStream.create()`. Modifying this property afterwards has no effect.\n\n### delayedStream.maxDataSize = 1024 * 1024\n\nThe amount of data to buffer before emitting an `error`.\n\nIf the underlaying source is emitting `Buffer` objects, the `maxDataSize`\nrefers to bytes.\n\nIf the underlaying source is emitting JavaScript strings, the size refers to\ncharacters.\n\nIf you know what you are doing, you can set this property to `Infinity` to\ndisable this feature. You can also modify this property during runtime.\n\n### delayedStream.maxDataSize = 1024 * 1024\n\nThe amount of data to buffer before emitting an `error`.\n\nIf the underlaying source is emitting `Buffer` objects, the `maxDataSize`\nrefers to bytes.\n\nIf the underlaying source is emitting JavaScript strings, the size refers to\ncharacters.\n\nIf you know what you are doing, you can set this property to `Infinity` to\ndisable this feature.\n\n### delayedStream.dataSize = 0\n\nThe amount of data buffered so far.\n\n### delayedStream.readable\n\nAn ECMA5 getter that returns the value of `source.readable`.\n\n### delayedStream.resume()\n\nIf the `delayedStream` has not been released so far, `delayedStream.release()`\nis called.\n\nIn either case, `source.resume()` is called.\n\n### delayedStream.pause()\n\nCalls `source.pause()`.\n\n### delayedStream.pipe(dest)\n\nCalls `delayedStream.resume()` and then proxies the arguments to `source.pipe`.\n\n### delayedStream.release()\n\nEmits and clears all events that have been buffered up so far. This does not\nresume the underlaying source, use `delayedStream.resume()` instead.\n\n## License\n\ndelayed-stream is licensed under the MIT license.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/felixge/node-delayed-stream/issues" - }, - "_id": "delayed-stream@0.0.5", - "dist": { - "shasum": "66839603c076296710bcc7f2e84ebd3348ae6343" - }, - "_from": "delayed-stream@0.0.5", - "_resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js deleted file mode 100644 index 4d71b8a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js +++ /dev/null @@ -1,6 +0,0 @@ -var common = module.exports; - -common.DelayedStream = require('..'); -common.assert = require('assert'); -common.fake = require('fake'); -common.PORT = 49252; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js deleted file mode 100644 index 9ecad5b8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js +++ /dev/null @@ -1,38 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var DelayedStream = common.DelayedStream; -var http = require('http'); - -var UPLOAD = new Buffer(10 * 1024 * 1024); - -var server = http.createServer(function(req, res) { - var delayed = DelayedStream.create(req, {maxDataSize: UPLOAD.length}); - - setTimeout(function() { - res.writeHead(200); - delayed.pipe(res); - }, 10); -}); -server.listen(common.PORT, function() { - var request = http.request({ - method: 'POST', - port: common.PORT, - }); - - request.write(UPLOAD); - request.end(); - - request.on('response', function(res) { - var received = 0; - res - .on('data', function(chunk) { - received += chunk.length; - }) - .on('end', function() { - assert.equal(received, UPLOAD.length); - server.close(); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js deleted file mode 100644 index 6f417f3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js +++ /dev/null @@ -1,21 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testAutoPause() { - var source = new Stream(); - - fake.expect(source, 'pause', 1); - var delayedStream = DelayedStream.create(source); - fake.verify(); -})(); - -(function testDisableAutoPause() { - var source = new Stream(); - fake.expect(source, 'pause', 0); - - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - fake.verify(); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js deleted file mode 100644 index b50c3978..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js +++ /dev/null @@ -1,14 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testDelayEventsUntilResume() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - fake.expect(source, 'pause'); - delayedStream.pause(); - fake.verify(); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js deleted file mode 100644 index fc4047e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js +++ /dev/null @@ -1,48 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testDelayEventsUntilResume() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - // delayedStream must not emit until we resume - fake.expect(delayedStream, 'emit', 0); - - // but our original source must emit - var params = []; - source.on('foo', function(param) { - params.push(param); - }); - - source.emit('foo', 1); - source.emit('foo', 2); - - // Make sure delayedStream did not emit, and source did - assert.deepEqual(params, [1, 2]); - fake.verify(); - - // After resume, delayedStream must playback all events - fake - .stub(delayedStream, 'emit') - .times(Infinity) - .withArg(1, 'newListener'); - fake.expect(delayedStream, 'emit', ['foo', 1]); - fake.expect(delayedStream, 'emit', ['foo', 2]); - fake.expect(source, 'resume'); - - delayedStream.resume(); - fake.verify(); - - // Calling resume again will delegate to source - fake.expect(source, 'resume'); - delayedStream.resume(); - fake.verify(); - - // Emitting more events directly leads to them being emitted - fake.expect(delayedStream, 'emit', ['foo', 3]); - source.emit('foo', 3); - fake.verify(); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js deleted file mode 100644 index a9d35e72..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js +++ /dev/null @@ -1,15 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testHandleSourceErrors() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - // We deal with this by attaching a no-op listener to 'error' on the source - // when creating a new DelayedStream. This way error events on the source - // won't throw. - source.emit('error', new Error('something went wrong')); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js deleted file mode 100644 index 7638a2bf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js +++ /dev/null @@ -1,18 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testMaxDataSize() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {maxDataSize: 1024, pauseStream: false}); - - source.emit('data', new Buffer(1024)); - - fake - .expect(delayedStream, 'emit') - .withArg(1, 'error'); - source.emit('data', new Buffer(1)); - fake.verify(); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js deleted file mode 100644 index 7d312ab1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js +++ /dev/null @@ -1,13 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testPipeReleases() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - fake.expect(delayedStream, 'resume'); - delayedStream.pipe(new Stream()); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js deleted file mode 100644 index d436163b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js +++ /dev/null @@ -1,13 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testProxyReadableProperty() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - source.readable = fake.value('source.readable'); - assert.strictEqual(delayedStream.readable, source.readable); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js deleted file mode 100755 index 0bb8e822..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var far = require('far').create(); - -far.add(__dirname); -far.include(/test-.*\.js$/); - -far.execute(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json deleted file mode 100644 index ecc71ada..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "author": { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com", - "url": "http://debuggable.com/" - }, - "name": "combined-stream", - "description": "A stream that emits multiple other streams one after another.", - "version": "0.0.4", - "homepage": "https://github.com/felixge/node-combined-stream", - "repository": { - "type": "git", - "url": "git://github.com/felixge/node-combined-stream.git" - }, - "main": "./lib/combined_stream", - "engines": { - "node": "*" - }, - "dependencies": { - "delayed-stream": "0.0.5" - }, - "devDependencies": { - "far": "0.0.1" - }, - "readme": "# combined-stream\n\nA stream that emits multiple other streams one after another.\n\n## Installation\n\n``` bash\nnpm install combined-stream\n```\n\n## Usage\n\nHere is a simple example that shows how you can use combined-stream to combine\ntwo files into one:\n\n``` javascript\nvar CombinedStream = require('combined-stream');\nvar fs = require('fs');\n\nvar combinedStream = CombinedStream.create();\ncombinedStream.append(fs.createReadStream('file1.txt'));\ncombinedStream.append(fs.createReadStream('file2.txt'));\n\ncombinedStream.pipe(fs.createWriteStream('combined.txt'));\n```\n\nWhile the example above works great, it will pause all source streams until\nthey are needed. If you don't want that to happen, you can set `pauseStreams`\nto `false`:\n\n``` javascript\nvar CombinedStream = require('combined-stream');\nvar fs = require('fs');\n\nvar combinedStream = CombinedStream.create({pauseStreams: false});\ncombinedStream.append(fs.createReadStream('file1.txt'));\ncombinedStream.append(fs.createReadStream('file2.txt'));\n\ncombinedStream.pipe(fs.createWriteStream('combined.txt'));\n```\n\nHowever, what if you don't have all the source streams yet, or you don't want\nto allocate the resources (file descriptors, memory, etc.) for them right away?\nWell, in that case you can simply provide a callback that supplies the stream\nby calling a `next()` function:\n\n``` javascript\nvar CombinedStream = require('combined-stream');\nvar fs = require('fs');\n\nvar combinedStream = CombinedStream.create();\ncombinedStream.append(function(next) {\n next(fs.createReadStream('file1.txt'));\n});\ncombinedStream.append(function(next) {\n next(fs.createReadStream('file2.txt'));\n});\n\ncombinedStream.pipe(fs.createWriteStream('combined.txt'));\n```\n\n## API\n\n### CombinedStream.create([options])\n\nReturns a new combined stream object. Available options are:\n\n* `maxDataSize`\n* `pauseStreams`\n\nThe effect of those options is described below.\n\n### combinedStream.pauseStreams = true\n\nWhether to apply back pressure to the underlaying streams. If set to `false`,\nthe underlaying streams will never be paused. If set to `true`, the\nunderlaying streams will be paused right after being appended, as well as when\n`delayedStream.pipe()` wants to throttle.\n\n### combinedStream.maxDataSize = 2 * 1024 * 1024\n\nThe maximum amount of bytes (or characters) to buffer for all source streams.\nIf this value is exceeded, `combinedStream` emits an `'error'` event.\n\n### combinedStream.dataSize = 0\n\nThe amount of bytes (or characters) currently buffered by `combinedStream`.\n\n### combinedStream.append(stream)\n\nAppends the given `stream` to the combinedStream object. If `pauseStreams` is\nset to `true, this stream will also be paused right away.\n\n`streams` can also be a function that takes one parameter called `next`. `next`\nis a function that must be invoked in order to provide the `next` stream, see\nexample above.\n\nRegardless of how the `stream` is appended, combined-stream always attaches an\n`'error'` listener to it, so you don't have to do that manually.\n\nSpecial case: `stream` can also be a String or Buffer.\n\n### combinedStream.write(data)\n\nYou should not call this, `combinedStream` takes care of piping the appended\nstreams into itself for you.\n\n### combinedStream.resume()\n\nCauses `combinedStream` to start drain the streams it manages. The function is\nidempotent, and also emits a `'resume'` event each time which usually goes to\nthe stream that is currently being drained.\n\n### combinedStream.pause();\n\nIf `combinedStream.pauseStreams` is set to `false`, this does nothing.\nOtherwise a `'pause'` event is emitted, this goes to the stream that is\ncurrently being drained, so you can use it to apply back pressure.\n\n### combinedStream.end();\n\nSets `combinedStream.writable` to false, emits an `'end'` event, and removes\nall streams from the queue.\n\n### combinedStream.destroy();\n\nSame as `combinedStream.end()`, except it emits a `'close'` event instead of\n`'end'`.\n\n## License\n\ncombined-stream is licensed under the MIT license.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/felixge/node-combined-stream/issues" - }, - "_id": "combined-stream@0.0.4", - "dist": { - "shasum": "6562a96c9e6862c7a1349ac563047313599d0e86" - }, - "_from": "combined-stream@~0.0.4", - "_resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js deleted file mode 100644 index 81543485..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js +++ /dev/null @@ -1,23 +0,0 @@ -var common = module.exports; - -var path = require('path'); -var fs = require('fs'); -var root = path.join(__dirname, '..'); - -common.dir = { - fixture: root + '/test/fixture', - tmp: root + '/test/tmp', -}; - -// Create tmp directory if it does not exist -// Not using fs.exists so as to be node 0.6.x compatible -try { - fs.statSync(common.dir.tmp); -} -catch (e) { - // Dir does not exist - fs.mkdirSync(common.dir.tmp); -} - -common.CombinedStream = require(root); -common.assert = require('assert'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt deleted file mode 100644 index 50e0218d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt +++ /dev/null @@ -1,256 +0,0 @@ -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt deleted file mode 100644 index da1d821f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt +++ /dev/null @@ -1,256 +0,0 @@ -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js deleted file mode 100644 index 44ecabab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js +++ /dev/null @@ -1,27 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var FILE2 = common.dir.fixture + '/file2.txt'; -var EXPECTED = fs.readFileSync(FILE1) + fs.readFileSync(FILE2); - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create(); - combinedStream.append(function(next) { - next(fs.createReadStream(FILE1)); - }); - combinedStream.append(function(next) { - next(fs.createReadStream(FILE2)); - }); - - var tmpFile = common.dir.tmp + '/combined.txt'; - var dest = fs.createWriteStream(tmpFile); - combinedStream.pipe(dest); - - dest.on('end', function() { - var written = fs.readFileSync(tmpFile, 'utf8'); - assert.strictEqual(written, EXPECTED); - }); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js deleted file mode 100644 index e3fbd184..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js +++ /dev/null @@ -1,34 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; - -(function testDataSizeGetter() { - var combinedStream = CombinedStream.create(); - - assert.strictEqual(combinedStream.dataSize, 0); - - // Test one stream - combinedStream._streams.push({dataSize: 10}); - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 10); - - // Test two streams - combinedStream._streams.push({dataSize: 23}); - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 33); - - // Test currentStream - combinedStream._currentStream = {dataSize: 20}; - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 53); - - // Test currentStream without dataSize - combinedStream._currentStream = {}; - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 33); - - // Test stream function - combinedStream._streams.push(function() {}); - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 33); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js deleted file mode 100644 index c678575c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js +++ /dev/null @@ -1,38 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var BUFFER = new Buffer('Bacon is delicious'); -var FILE2 = common.dir.fixture + '/file2.txt'; -var STRING = 'The € kicks the $\'s ass!'; - -var EXPECTED = - fs.readFileSync(FILE1) - + BUFFER - + fs.readFileSync(FILE2) - + STRING; -var GOT; - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create(); - combinedStream.append(fs.createReadStream(FILE1)); - combinedStream.append(BUFFER); - combinedStream.append(fs.createReadStream(FILE2)); - combinedStream.append(function(next) { - next(STRING); - }); - - var tmpFile = common.dir.tmp + '/combined-file1-buffer-file2-string.txt'; - var dest = fs.createWriteStream(tmpFile); - combinedStream.pipe(dest); - - dest.on('close', function() { - GOT = fs.readFileSync(tmpFile, 'utf8'); - }); -})(); - -process.on('exit', function() { - assert.strictEqual(GOT, EXPECTED); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js deleted file mode 100644 index 263cfdf7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js +++ /dev/null @@ -1,35 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var FILE2 = common.dir.fixture + '/file2.txt'; -var EXPECTED = fs.readFileSync(FILE1) + fs.readFileSync(FILE2); -var GOT; - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create(); - combinedStream.append(fs.createReadStream(FILE1)); - combinedStream.append(fs.createReadStream(FILE2)); - - var stream1 = combinedStream._streams[0]; - var stream2 = combinedStream._streams[1]; - - stream1.on('end', function() { - assert.equal(stream2.dataSize, 0); - }); - - var tmpFile = common.dir.tmp + '/combined.txt'; - var dest = fs.createWriteStream(tmpFile); - combinedStream.pipe(dest); - - dest.on('close', function() { - GOT = fs.readFileSync(tmpFile, 'utf8'); - }); -})(); - -process.on('exit', function() { - console.error(GOT.length, EXPECTED.length); - assert.strictEqual(GOT, EXPECTED); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js deleted file mode 100644 index c3d288d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js +++ /dev/null @@ -1,39 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var util = require('util'); -var Stream = require('stream').Stream; - -var s = CombinedStream.create(); - - -function StringStream(){ - this.writable=true; - this.str="" -} -util.inherits(StringStream,Stream); - -StringStream.prototype.write=function(chunk,encoding){ - this.str+=chunk.toString(); - this.emit('data',chunk); -} - -StringStream.prototype.end=function(chunk,encoding){ - this.emit('end'); -} - -StringStream.prototype.toString=function(){ - return this.str; -} - - -s.append("foo."); -s.append(""); -s.append("bar"); - -var ss = new StringStream(); - -s.pipe(ss); -s.resume(); - -assert.equal(ss.toString(),"foo.bar"); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js deleted file mode 100644 index aefa36e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js +++ /dev/null @@ -1,17 +0,0 @@ -var fs = require('fs'); -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var FILE1 = common.dir.fixture + '/file1.txt'; -var fileStream = fs.createReadStream(FILE1); - -var foo = function(){}; - -(function testIsStreamLike() { - assert(! CombinedStream.isStreamLike(true)); - assert(! CombinedStream.isStreamLike("I am a string")); - assert(! CombinedStream.isStreamLike(7)); - assert(! CombinedStream.isStreamLike(foo)); - - assert(CombinedStream.isStreamLike(fileStream)); -})(); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js deleted file mode 100644 index 25f47a47..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js +++ /dev/null @@ -1,24 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var FILE2 = common.dir.fixture + '/file2.txt'; -var EXPECTED = fs.readFileSync(FILE1) + fs.readFileSync(FILE2); - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create({pauseStreams: false, maxDataSize: 20736}); - combinedStream.append(fs.createReadStream(FILE1)); - combinedStream.append(fs.createReadStream(FILE2)); - - var gotErr = null; - combinedStream.on('error', function(err) { - gotErr = err; - }); - - process.on('exit', function() { - assert.ok(gotErr); - assert.ok(gotErr.message.match(/bytes/)); - }); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js deleted file mode 100644 index 30a3a6f8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js +++ /dev/null @@ -1,30 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var FILE2 = common.dir.fixture + '/file2.txt'; -var EXPECTED = fs.readFileSync(FILE1) + fs.readFileSync(FILE2); - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create({pauseStreams: false}); - combinedStream.append(fs.createReadStream(FILE1)); - combinedStream.append(fs.createReadStream(FILE2)); - - var stream1 = combinedStream._streams[0]; - var stream2 = combinedStream._streams[1]; - - stream1.on('end', function() { - assert.ok(stream2.dataSize > 0); - }); - - var tmpFile = common.dir.tmp + '/combined.txt'; - var dest = fs.createWriteStream(tmpFile); - combinedStream.pipe(dest); - - dest.on('end', function() { - var written = fs.readFileSync(tmpFile, 'utf8'); - assert.strictEqual(written, EXPECTED); - }); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js deleted file mode 100755 index 0bb8e822..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var far = require('far').create(); - -far.add(__dirname); -far.include(/test-.*\.js$/); - -far.execute(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/package.json deleted file mode 100644 index 5d424f23..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "author": { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com", - "url": "http://debuggable.com/" - }, - "name": "form-data", - "description": "A module to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.", - "version": "0.1.2", - "repository": { - "type": "git", - "url": "git://github.com/felixge/node-form-data.git" - }, - "main": "./lib/form_data", - "scripts": { - "test": "node test/run.js" - }, - "engines": { - "node": ">= 0.6" - }, - "dependencies": { - "combined-stream": "~0.0.4", - "mime": "~1.2.11", - "async": "~0.2.9" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://raw.github.com/felixge/node-form-data/master/License" - } - ], - "devDependencies": { - "fake": "~0.2.2", - "far": "~0.0.7", - "formidable": "~1.0.14", - "request": "~2.27.0" - }, - "readme": "# Form-Data [![Build Status](https://travis-ci.org/felixge/node-form-data.png?branch=master)](https://travis-ci.org/felixge/node-form-data) [![Dependency Status](https://gemnasium.com/felixge/node-form-data.png)](https://gemnasium.com/felixge/node-form-data)\n\nA module to create readable ```\"multipart/form-data\"``` streams. Can be used to submit forms and file uploads to other web applications.\n\nThe API of this module is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd].\n\n[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface\n[streams2-thing]: http://nodejs.org/api/stream.html#stream_compatibility_with_older_node_versions\n\n## Install\n\n```\nnpm install form-data\n```\n\n## Usage\n\nIn this example we are constructing a form with 3 fields that contain a string,\na buffer and a file stream.\n\n``` javascript\nvar FormData = require('form-data');\nvar fs = require('fs');\n\nvar form = new FormData();\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_file', fs.createReadStream('/foo/bar.jpg'));\n```\n\nAlso you can use http-response stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar http = require('http');\n\nvar form = new FormData();\n\nhttp.request('http://nodejs.org/images/logo.png', function(response) {\n form.append('my_field', 'my value');\n form.append('my_buffer', new Buffer(10));\n form.append('my_logo', response);\n});\n```\n\nOr @mikeal's request stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar request = require('request');\n\nvar form = new FormData();\n\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_logo', request('http://nodejs.org/images/logo.png'));\n```\n\nIn order to submit this form to a web application, call ```submit(url, [callback])``` method:\n\n``` javascript\nform.submit('http://example.org/', function(err, res) {\n // res – response object (http.IncomingMessage) //\n res.resume(); // for node-0.10.x\n});\n\n```\n\nFor more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods.\n\n### Alternative submission methods\n\nYou can use node's http client interface:\n\n``` javascript\nvar http = require('http');\n\nvar request = http.request({\n method: 'post',\n host: 'example.org',\n path: '/upload',\n headers: form.getHeaders()\n});\n\nform.pipe(request);\n\nrequest.on('response', function(res) {\n console.log(res.statusCode);\n});\n```\n\nOr if you would prefer the `'Content-Length'` header to be set for you:\n\n``` javascript\nform.submit('example.org/upload', function(err, res) {\n console.log(res.statusCode);\n});\n```\n\nTo use custom headers and pre-known length in parts:\n\n``` javascript\nvar CRLF = '\\r\\n';\nvar form = new FormData();\n\nvar options = {\n header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,\n knownLength: 1\n};\n\nform.append('my_buffer', buffer, options);\n\nform.submit('http://example.com/', function(err, res) {\n if (err) throw err;\n console.log('Done');\n});\n```\n\nForm-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide \"file\"-related information manually:\n\n``` javascript\nsomeModule.stream(function(err, stdout, stderr) {\n if (err) throw err;\n\n var form = new FormData();\n\n form.append('file', stdout, {\n filename: 'unicycle.jpg',\n contentType: 'image/jpg',\n knownLength: 19806\n });\n\n form.submit('http://example.com/', function(err, res) {\n if (err) throw err;\n console.log('Done');\n });\n});\n```\n\nFor edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:\n\n``` javascript\nform.submit({\n host: 'example.com',\n path: '/probably.php?extra=params',\n auth: 'username:password'\n}, function(err, res) {\n console.log(res.statusCode);\n});\n```\n\n## Notes\n\n- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround.\n- If it feels like FormData hangs after submit and you're on ```node-0.10```, please check [Compatibility with Older Node Versions][streams2-thing]\n\n## TODO\n\n- Add new streams (0.10) support and try really hard not to break it for 0.8.x.\n\n## License\n\nForm-Data is licensed under the MIT license.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/felixge/node-form-data/issues" - }, - "homepage": "https://github.com/felixge/node-form-data", - "_id": "form-data@0.1.2", - "dist": { - "shasum": "1143c21357911a78dd7913b189b4bab5d5d57445" - }, - "_from": "form-data@~0.1.0", - "_resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.npmignore deleted file mode 100644 index 77ba16cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.travis.yml deleted file mode 100755 index 047f7e3d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/LICENSE deleted file mode 100755 index e699a7bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2013, Eran Hammer. -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 Eran Hammer 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 ERAN HAMMER 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/Makefile deleted file mode 100755 index 5f339bf3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -test: - @node node_modules/lab/bin/lab -test-cov: - @node node_modules/lab/bin/lab -r threshold -t 100 -test-cov-html: - @node node_modules/lab/bin/lab -r html -o coverage.html -complexity: - @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/README.md deleted file mode 100755 index 010bac6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/README.md +++ /dev/null @@ -1,627 +0,0 @@ -![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png) - -<img align="right" src="https://raw.github.com/hueniverse/hawk/master/images/logo.png" /> **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial -HTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz). - -Current version: **1.0** - -[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk) - -# Table of Content - -- [**Introduction**](#introduction) - - [Replay Protection](#replay-protection) - - [Usage Example](#usage-example) - - [Protocol Example](#protocol-example) - - [Payload Validation](#payload-validation) - - [Response Payload Validation](#response-payload-validation) - - [Browser Support and Considerations](#browser-support-and-considerations) -<p></p> -- [**Single URI Authorization**](#single-uri-authorization) - - [Usage Example](#bewit-usage-example) -<p></p> -- [**Security Considerations**](#security-considerations) - - [MAC Keys Transmission](#mac-keys-transmission) - - [Confidentiality of Requests](#confidentiality-of-requests) - - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers) - - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials) - - [Entropy of Keys](#entropy-of-keys) - - [Coverage Limitations](#coverage-limitations) - - [Future Time Manipulation](#future-time-manipulation) - - [Client Clock Poisoning](#client-clock-poisoning) - - [Bewit Limitations](#bewit-limitations) - - [Host Header Forgery](#host-header-forgery) -<p></p> -- [**Frequently Asked Questions**](#frequently-asked-questions) -<p></p> -- [**Acknowledgements**](#acknowledgements) - -# Introduction - -**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with -partial cryptographic verification of the request and response, covering the HTTP method, request URI, host, -and optionally the request payload. - -Similar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of -client credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme, -the key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is -included in its place. - -However, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of -replay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less -"chattiness" (interaction with the server). - -Also unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because -the client and server must both have access to the key material in the clear. - -The primary design goals of this scheme are to: -* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources, -* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where - to send an authenticated request), and -* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client - failure to validate the server's identity as part of its TLS handshake. - -In addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using -a query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk). - -The **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server, -which is beyond the scope of this module. Typically, the shared credentials are established via an initial -TLS-protected phase or derived from some other shared confidential information available to both the client -and the server. - - -## Replay Protection - -Without replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more -than once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when -making requests. This gives the server enough information to prevent replay attacks. - -The nonce is generated by the client, and is a string unique across all requests with the same timestamp and -key identifier combination. - -The timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards -are rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks. -By default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in -practice translates to a maximum of 2 minutes as the skew can be positive or negative). - -Using a timestamp requires the client's clock to be in sync with the server's clock. **Hawk** requires both the client -clock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types -(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response -to a bad timestamp. - -There is no expectation that the client will adjust its system clock to match the server (in fact, this would be a -potential attack vector). Instead, the client only uses the server's time to calculate an offset used only -for communications with that particular server. The protocol rewards clients with synchronized clocks by reducing -the number of round trips required to authenticate the first request. - - -## Usage Example - -Server code: - -```javascript -var Http = require('http'); -var Hawk = require('hawk'); - - -// Credentials lookup function - -var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'Steve' - }; - - return callback(null, credentials); -}; - -// Create HTTP server - -var handler = function (req, res) { - - // Authenticate incoming request - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - // Prepare response - - var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!'); - var headers = { 'Content-Type': 'text/plain' }; - - // Generate Server-Authorization response header - - var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers['Content-Type'] }); - headers['Server-Authorization'] = header; - - // Send the response back - - res.writeHead(!err ? 200 : 401, headers); - res.end(payload); - }); -}; - -// Start server - -Http.createServer(handler).listen(8000, 'example.com'); -``` - -Client code: - -```javascript -var Request = require('request'); -var Hawk = require('hawk'); - - -// Client credentials - -var credentials = { - id: 'dh37fgj492je', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' -} - -// Request options - -var requestOptions = { - uri: 'http://example.com:8000/resource/1?b=1&a=2', - method: 'GET', - headers: {} -}; - -// Generate Authorization request header - -var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' }); -requestOptions.headers.Authorization = header.field; - -// Send authenticated request - -Request(requestOptions, function (error, response, body) { - - // Authenticate the server's response - - var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body }); - - // Output results - - console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)')); -}); -``` - -**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local -machine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP 'start()' method. - -```javascript -Hawk.sntp.start(); -``` - - -## Protocol Example - -The client attempts to access a protected resource without authentication, sending the following HTTP request to -the resource server: - -``` -GET /resource/1?b=1&a=2 HTTP/1.1 -Host: example.com:8000 -``` - -The resource server returns an authentication challenge. - -``` -HTTP/1.1 401 Unauthorized -WWW-Authenticate: Hawk -``` - -The client has previously obtained a set of **Hawk** credentials for accessing resources on the "http://example.com/" -server. The **Hawk** credentials issued to the client include the following attributes: - -* Key identifier: dh37fgj492je -* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn -* Algorithm: sha256 - -The client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1, -1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline -character): - -``` -hawk.1.header -1353832234 -j4h3g2 -GET -/resource/1?b=1&a=2 -example.com -8000 - -some-app-ext-data - -``` - -The request MAC is calculated using HMAC with the specified hash algorithm "sha256" and the key over the normalized request string. -The result is base64-encoded to produce the request MAC: - -``` -6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE= -``` - -The client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using -the HTTP `Authorization` request header field: - -``` -GET /resource/1?b=1&a=2 HTTP/1.1 -Host: example.com:8000 -Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=" -``` - -The server validates the request by calculating the request MAC again based on the request received and verifies the validity -and scope of the **Hawk** credentials. If valid, the server responds with the requested resource. - - -### Payload Validation - -**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash -using the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character): -* `hawk.1.payload` -* the content-type in lowercase, without any parameters (e.g. `application/json`) -* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability) - -For example: - -* Payload: `Thank you for flying Hawk` -* Content Type: `text/plain` -* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=` - -Results in the following input to the payload hash function (newline terminated values): - -``` -hawk.1.payload -text/plain -Thank you for flying Hawk - -``` - -Which produces the following hash value: - -``` -Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY= -``` - -The client constructs the normalized request string (newline terminated values): - -``` -hawk.1.header -1353832234 -j4h3g2 -POST -/resource/1?a=1&b=2 -example.com -8000 -Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY= -some-app-ext-data - -``` - -Then calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data, -and request MAC, with the request using the HTTP `Authorization` request header field: - -``` -POST /resource/1?a=1&b=2 HTTP/1.1 -Host: example.com:8000 -Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", hash="Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=", ext="some-app-ext-data", mac="aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw=" -``` - -It is up to the server if and when it validates the payload for any given request, based solely on it's security policy -and the nature of the data included. - -If the payload is available at the time of authentication, the server uses the hash value provided by the client to construct -the normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value -with the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash. - -However, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed -at a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value -provided by the client after validating the MAC. - -It is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value -included in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided -by the client, the payload may be modified by an attacker. - - -## Response Payload Validation - -**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the -client to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header -as a response header using the exact same syntax as the `Authorization` request header field. - -The header is contructed using the same process as the client's request header. The server uses the same credentials and other -artifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with -new values based on the server response. The rest as identical to those used by the client. - -The result MAC digest is included with the optional `hash` and `ext` values: - -``` -Server-Authorization: Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific" -``` - - -## Browser Support and Considerations - -A browser script is provided for including using a `<script>` tag in [lib/browser.js](/lib/browser.js). - -**Hawk** relies on the _Server-Authorization_ and _WWW-Authenticate_ headers in its response to communicate with the client. -Therefore, in case of CORS requests, it is important to consider sending _Access-Control-Expose-Headers_ with the value -_"WWW-Authenticate, Server-Authorization"_ on each response from your server. As explained in the -[specifications](http://www.w3.org/TR/cors/#access-control-expose-headers-response-header), it will indicate that these headers -can safely be accessed by the client (using getResponseHeader() on the XmlHttpRequest object). Otherwise you will be met with a -["simple response header"](http://www.w3.org/TR/cors/#simple-response-header) which excludes these fields and would prevent the -Hawk client from authenticating the requests.You can read more about the why and how in this -[article](http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server) - - -# Single URI Authorization - -There are cases in which limited and short-term access to a protected resource is granted to a third party which does not -have access to the shared credentials. For example, displaying a protected image on a web page accessed by anyone. **Hawk** -provides limited support for such URIs in the form of a _bewit_ - a URI query parameter appended to the request URI which contains -the necessary credentials to authenticate the request. - -Because of the significant security risks involved in issuing such access, bewit usage is purposely limited only to GET requests -and for a finite period of time. Both the client and server can issue bewit credentials, however, the server should not use the same -credentials as the client to maintain clear traceability as to who issued which credentials. - -In order to simplify implementation, bewit credentials do not support single-use policy and can be replayed multiple times within -the granted access timeframe. - - -## Bewit Usage Example - -Server code: - -```javascript -var Http = require('http'); -var Hawk = require('hawk'); - - -// Credentials lookup function - -var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' - }; - - return callback(null, credentials); -}; - -// Create HTTP server - -var handler = function (req, res) { - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - res.writeHead(!err ? 200 : 401, { 'Content-Type': 'text/plain' }); - res.end(!err ? 'Access granted' : 'Shoosh!'); - }); -}; - -Http.createServer(handler).listen(8000, 'example.com'); -``` - -Bewit code generation: - -```javascript -var Request = require('request'); -var Hawk = require('hawk'); - - -// Client credentials - -var credentials = { - id: 'dh37fgj492je', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' -} - -// Generate bewit - -var duration = 60 * 5; // 5 Minutes -var bewit = Hawk.uri.getBewit('http://example.com:8080/resource/1?b=1&a=2', { credentials: credentials, ttlSec: duration, ext: 'some-app-data' }); -var uri = 'http://example.com:8000/resource/1?b=1&a=2' + '&bewit=' + bewit; -``` - - -# Security Considerations - -The greatest sources of security risks are usually found not in **Hawk** but in the policies and procedures surrounding its use. -Implementers are strongly encouraged to assess how this module addresses their security requirements. This section includes -an incomplete list of security considerations that must be reviewed and understood before deploying **Hawk** on the server. -Many of the protections provided in **Hawk** depends on whether and how they are used. - -### MAC Keys Transmission - -**Hawk** does not provide any mechanism for obtaining or transmitting the set of shared credentials required. Any mechanism used -to obtain **Hawk** credentials must ensure that these transmissions are protected using transport-layer mechanisms such as TLS. - -### Confidentiality of Requests - -While **Hawk** provides a mechanism for verifying the integrity of HTTP requests, it provides no guarantee of request -confidentiality. Unless other precautions are taken, eavesdroppers will have full access to the request content. Servers should -carefully consider the types of data likely to be sent as part of such requests, and employ transport-layer security mechanisms -to protect sensitive resources. - -### Spoofing by Counterfeit Servers - -**Hawk** provides limited verification of the server authenticity. When receiving a response back from the server, the server -may choose to include a response `Server-Authorization` header which the client can use to verify the response. However, it is up to -the server to determine when such measure is included, to up to the client to enforce that policy. - -A hostile party could take advantage of this by intercepting the client's requests and returning misleading or otherwise -incorrect responses. Service providers should consider such attacks when developing services using this protocol, and should -require transport-layer security for any requests where the authenticity of the resource server or of server responses is an issue. - -### Plaintext Storage of Credentials - -The **Hawk** key functions the same way passwords do in traditional authentication systems. In order to compute the request MAC, -the server must have access to the key in plaintext form. This is in contrast, for example, to modern operating systems, which -store only a one-way hash of user credentials. - -If an attacker were to gain access to these keys - or worse, to the server's database of all such keys - he or she would be able -to perform any action on behalf of any resource owner. Accordingly, it is critical that servers protect these keys from unauthorized -access. - -### Entropy of Keys - -Unless a transport-layer security protocol is used, eavesdroppers will have full access to authenticated requests and request -MAC values, and will thus be able to mount offline brute-force attacks to recover the key used. Servers should be careful to -assign keys which are long enough, and random enough, to resist such attacks for at least the length of time that the **Hawk** -credentials are valid. - -For example, if the credentials are valid for two weeks, servers should ensure that it is not possible to mount a brute force -attack that recovers the key in less than two weeks. Of course, servers are urged to err on the side of caution, and use the -longest key reasonable. - -It is equally important that the pseudo-random number generator (PRNG) used to generate these keys be of sufficiently high -quality. Many PRNG implementations generate number sequences that may appear to be random, but which nevertheless exhibit -patterns or other weaknesses which make cryptanalysis or brute force attacks easier. Implementers should be careful to use -cryptographically secure PRNGs to avoid these problems. - -### Coverage Limitations - -The request MAC only covers the HTTP `Host` header and optionally the `Content-Type` header. It does not cover any other headers -which can often affect how the request body is interpreted by the server. If the server behavior is influenced by the presence -or value of such headers, an attacker can manipulate the request headers without being detected. Implementers should use the -`ext` feature to pass application-specific information via the `Authorization` header which is protected by the request MAC. - -The response authentication, when performed, only covers the response payload, content-type, and the request information -provided by the client in it's request (method, resource, timestamp, nonce, etc.). It does not cover the HTTP status code or -any other response header field (e.g. Location) which can affect the client's behaviour. - -### Future Time Manipulation - -The protocol relies on a clock sync between the client and server. To accomplish this, the server informs the client of its -current time when an invalid timestamp is received. - -If an attacker is able to manipulate this information and cause the client to use an incorrect time, it would be able to cause -the client to generate authenticated requests using time in the future. Such requests will fail when sent by the client, and will -not likely leave a trace on the server (given the common implementation of nonce, if at all enforced). The attacker will then -be able to replay the request at the correct time without detection. - -The client must only use the time information provided by the server if: -* it was delivered over a TLS connection and the server identity has been verified, or -* the `tsm` MAC digest calculated using the same client credentials over the timestamp has been verified. - -### Client Clock Poisoning - -When receiving a request with a bad timestamp, the server provides the client with its current time. The client must never use -the time received from the server to adjust its own clock, and must only use it to calculate an offset for communicating with -that particular server. - -### Bewit Limitations - -Special care must be taken when issuing bewit credentials to third parties. Bewit credentials are valid until expiration and cannot -be revoked or limited without using other means. Whatever resource they grant access to will be completely exposed to anyone with -access to the bewit credentials which act as bearer credentials for that particular resource. While bewit usage is limited to GET -requests only and therefore cannot be used to perform transactions or change server state, it can still be used to expose private -and sensitive information. - -### Host Header Forgery - -Hawk validates the incoming request MAC against the incoming HTTP Host header. However, unless the optional `host` and `port` -options are used with `server.authenticate()`, a malicous client can mint new host names pointing to the server's IP address and -use that to craft an attack by sending a valid request that's meant for another hostname than the one used by the server. Server -implementors must manually verify that the host header received matches their expectation (or use the options mentioned above). - -# Frequently Asked Questions - -### Where is the protocol specification? - -If you are looking for some prose explaining how all this works, **this is it**. **Hawk** is being developed as an open source -project instead of a standard. In other words, the [code](/hueniverse/hawk/tree/master/lib) is the specification. Not sure about -something? Open an issue! - -### Is it done? - -At if version 0.10.0, **Hawk** is feature-complete. However, until this module reaches version 1.0.0 it is considered experimental -and is likely to change. This also means your feedback and contribution are very welcome. Feel free to open issues with questions -and suggestions. - -### Where can I find **Hawk** implementations in other languages? - -**Hawk**'s only reference implementation is provided in JavaScript as a node.js module. However, others are actively porting it to other -platforms. There is already a [PHP](https://github.com/alexbilbie/PHP-Hawk), -[.NET](https://github.com/pcibraro/hawknet), and [JAVA](https://github.com/wealdtech/hawk) libraries available. The full list -is maintained [here](https://github.com/hueniverse/hawk/issues?labels=port). Please add an issue if you are working on another -port. A cross-platform test-suite is in the works. - -### Why isn't the algorithm part of the challenge or dynamically negotiated? - -The algorithm used is closely related to the key issued as different algorithms require different key sizes (and other -requirements). While some keys can be used for multiple algorithm, the protocol is designed to closely bind the key and algorithm -together as part of the issued credentials. - -### Why is Host and Content-Type the only headers covered by the request MAC? - -It is really hard to include other headers. Headers can be changed by proxies and other intermediaries and there is no -well-established way to normalize them. Many platforms change the case of header field names and values. The only -straight-forward solution is to include the headers in some blob (say, base64 encoded JSON) and include that with the request, -an approach taken by JWT and other such formats. However, that design violates the HTTP header boundaries, repeats information, -and introduces other security issues because firewalls will not be aware of these "hidden" headers. In addition, any information -repeated must be compared to the duplicated information in the header and therefore only moves the problem elsewhere. - -### Why not just use HTTP Digest? - -Digest requires pre-negotiation to establish a nonce. This means you can't just make a request - you must first send -a protocol handshake to the server. This pattern has become unacceptable for most web services, especially mobile -where extra round-trip are costly. - -### Why bother with all this nonce and timestamp business? - -**Hawk** is an attempt to find a reasonable, practical compromise between security and usability. OAuth 1.0 got timestamp -and nonces halfway right but failed when it came to scalability and consistent developer experience. **Hawk** addresses -it by requiring the client to sync its clock, but provides it with tools to accomplish it. - -In general, replay protection is a matter of application-specific threat model. It is less of an issue on a TLS-protected -system where the clients are implemented using best practices and are under the control of the server. Instead of dropping -replay protection, **Hawk** offers a required time window and an optional nonce verification. Together, it provides developers -with the ability to decide how to enforce their security policy without impacting the client's implementation. - -### What are `app` and `dlg` in the authorization header and normalized mac string? - -The original motivation for **Hawk** was to replace the OAuth 1.0 use cases. This included both a simple client-server mode which -this module is specifically designed for, and a delegated access mode which is being developed separately in -[Oz](https://github.com/hueniverse/oz). In addition to the **Hawk** use cases, Oz requires another attribute: the application id `app`. -This provides binding between the credentials and the application in a way that prevents an attacker from tricking an application -to use credentials issued to someone else. It also has an optional 'delegated-by' attribute `dlg` which is the application id of the -application the credentials were directly issued to. The goal of these two additions is to allow Oz to utilize **Hawk** directly, -but with the additional security of delegated credentials. - -### What is the purpose of the static strings used in each normalized MAC input? - -When calculating a hash or MAC, a static prefix (tag) is added. The prefix is used to prevent MAC values from being -used or reused for a purpose other than what they were created for (i.e. prevents switching MAC values between a request, -response, and a bewit use cases). It also protects against expliots created after a potential change in how the protocol -creates the normalized string. For example, if a future version would switch the order of nonce and timestamp, it -can create an exploit opportunity for cases where the nonce is similar in format to a timestamp. - -### Does **Hawk** have anything to do with OAuth? - -Short answer: no. - -**Hawk** was originally proposed as the OAuth MAC Token specification. However, the OAuth working group in its consistent -incompetence failed to produce a final, usable solution to address one of the most popular use cases of OAuth 1.0 - using it -to authenticate simple client-server transactions (i.e. two-legged). As you can guess, the OAuth working group is still hard -at work to produce more garbage. - -**Hawk** provides a simple HTTP authentication scheme for making client-server requests. It does not address the OAuth use case -of delegating access to a third party. If you are looking for an OAuth alternative, check out [Oz](https://github.com/hueniverse/oz). - - -# Acknowledgements - -**Hawk** is a derivative work of the [HTTP MAC Authentication Scheme](http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05) proposal -co-authored by Ben Adida, Adam Barth, and Eran Hammer, which in turn was based on the OAuth 1.0 community specification. - -Special thanks to Ben Laurie for his always insightful feedback and advice. - -The **Hawk** logo was created by [Chris Carrasco](http://chriscarrasco.com). diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/example/usage.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/example/usage.js deleted file mode 100755 index 8c063f6c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/example/usage.js +++ /dev/null @@ -1,78 +0,0 @@ -// Load modules - -var Http = require('http'); -var Request = require('request'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = { - credentials: { - dh37fgj492je: { - id: 'dh37fgj492je', // Required by Hawk.client.header - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'Steve' - } - } -}; - - -// Credentials lookup function - -var credentialsFunc = function (id, callback) { - - return callback(null, internals.credentials[id]); -}; - - -// Create HTTP server - -var handler = function (req, res) { - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!'); - var headers = { - 'Content-Type': 'text/plain', - 'Server-Authorization': Hawk.server.header(credentials, artifacts, { payload: payload, contentType: 'text/plain' }) - }; - - res.writeHead(!err ? 200 : 401, headers); - res.end(payload); - }); -}; - -Http.createServer(handler).listen(8000, '127.0.0.1'); - - -// Send unauthenticated request - -Request('http://127.0.0.1:8000/resource/1?b=1&a=2', function (error, response, body) { - - console.log(response.statusCode + ': ' + body); -}); - - -// Send authenticated request - -credentialsFunc('dh37fgj492je', function (err, credentials) { - - var header = Hawk.client.header('http://127.0.0.1:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'and welcome!' }); - var options = { - uri: 'http://127.0.0.1:8000/resource/1?b=1&a=2', - method: 'GET', - headers: { - authorization: header.field - } - }; - - Request(options, function (error, response, body) { - - var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body }); - console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)')); - process.exit(0); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/hawk.png b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/hawk.png deleted file mode 100755 index a0e15cda0144a7d7ed222e74a2ea4afbab32555c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6945 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 B50U@? diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/logo.png b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/logo.png deleted file mode 100755 index b8ff5901718a8a5529d25602a4a581d2f68d67cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71732 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 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/browser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/browser.js deleted file mode 100755 index 27494f23..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/browser.js +++ /dev/null @@ -1,485 +0,0 @@ -/* - HTTP Hawk Authentication Scheme - Copyright (c) 2012-2013, Eran Hammer <eran@hueniverse.com> - MIT Licensed -*/ - - -// Declare namespace - -var hawk = {}; - - -// Export if used as a module - -if (typeof module !== "undefined" && module.exports) { - module.exports = hawk; -} - -hawk.client = { - - // Generate an Authorization header for a given request - - /* - uri: 'http://example.com/resource?a=b' - method: HTTP verb (e.g. 'GET', 'POST') - options: { - - // Required - - credentials: { - id: 'dh37fgj492je', - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - - // Optional - - ext: 'application-specific', // Application specific data sent via the ext attribute - timestamp: Date.now() / 1000, // A pre-calculated timestamp in seconds - nonce: '2334f34f', // A pre-generated nonce - localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided) - payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided) - contentType: 'application/json', // Payload content-type (ignored if hash provided) - hash: 'U4MKKSmiVxk37JCCrAVIjV=', // Pre-calculated payload hash - app: '24s23423f34dx', // Oz application id - dlg: '234sz34tww3sd' // Oz delegated-by application id - } - */ - - header: function (uri, method, options) { - - var result = { - field: '', - artifacts: {} - }; - - // Validate inputs - - if (!uri || (typeof uri !== 'string' && typeof uri !== 'object') || - !method || typeof method !== 'string' || - !options || typeof options !== 'object') { - - return result; - } - - // Application time - - var timestamp = options.timestamp || Math.floor((hawk.utils.now() + (options.localtimeOffsetMsec || 0)) / 1000) - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return result; - } - - if (hawk.crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return result; - } - - // Parse URI - - if (typeof uri === 'string') { - uri = hawk.utils.parseUri(uri); - } - - // Calculate signature - - var artifacts = { - ts: timestamp, - nonce: options.nonce || hawk.utils.randomString(6), - method: method, - resource: uri.relative, - host: uri.hostname, - port: uri.port, - hash: options.hash, - ext: options.ext, - app: options.app, - dlg: options.dlg - }; - - result.artifacts = artifacts; - - // Calculate payload hash - - if (!artifacts.hash && - options.hasOwnProperty('payload')) { - - artifacts.hash = hawk.crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType); - } - - var mac = hawk.crypto.calculateMac('header', credentials, artifacts); - - // Construct header - - var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''; // Other falsey values allowed - var header = 'Hawk id="' + credentials.id + - '", ts="' + artifacts.ts + - '", nonce="' + artifacts.nonce + - (artifacts.hash ? '", hash="' + artifacts.hash : '') + - (hasExt ? '", ext="' + hawk.utils.escapeHeaderAttribute(artifacts.ext) : '') + - '", mac="' + mac + '"'; - - if (artifacts.app) { - header += ', app="' + artifacts.app + - (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"'; - } - - result.field = header; - - return result; - }, - - - // Validate server response - - /* - request: object created via 'new XMLHttpRequest()' after response received - artifacts: object recieved from header().artifacts - options: { - payload: optional payload received - required: specifies if a Server-Authorization header is required. Defaults to 'false' - } - */ - - authenticate: function (request, credentials, artifacts, options) { - - options = options || {}; - - if (request.getResponseHeader('www-authenticate')) { - - // Parse HTTP WWW-Authenticate header - - var attributes = hawk.utils.parseAuthorizationHeader(request.getResponseHeader('www-authenticate'), ['ts', 'tsm', 'error']); - if (!attributes) { - return false; - } - - if (attributes.ts) { - var tsm = hawk.crypto.calculateTsMac(attributes.ts, credentials); - if (tsm !== attributes.tsm) { - return false; - } - - hawk.utils.setNtpOffset(attributes.ts - Math.floor(Date.now() / 1000)); // Keep offset at 1 second precision - } - } - - // Parse HTTP Server-Authorization header - - if (!request.getResponseHeader('server-authorization') && - !options.required) { - - return true; - } - - var attributes = hawk.utils.parseAuthorizationHeader(request.getResponseHeader('server-authorization'), ['mac', 'ext', 'hash']); - if (!attributes) { - return false; - } - - var modArtifacts = { - ts: artifacts.ts, - nonce: artifacts.nonce, - method: artifacts.method, - resource: artifacts.resource, - host: artifacts.host, - port: artifacts.port, - hash: attributes.hash, - ext: attributes.ext, - app: artifacts.app, - dlg: artifacts.dlg - }; - - var mac = hawk.crypto.calculateMac('response', credentials, modArtifacts); - if (mac !== attributes.mac) { - return false; - } - - if (!options.hasOwnProperty('payload')) { - return true; - } - - if (!attributes.hash) { - return false; - } - - var calculatedHash = hawk.crypto.calculatePayloadHash(options.payload, credentials.algorithm, request.getResponseHeader('content-type')); - return (calculatedHash === attributes.hash); - }, - - message: function (host, port, message, options) { - - // Validate inputs - - if (!host || typeof host !== 'string' || - !port || typeof port !== 'number' || - message === null || message === undefined || typeof message !== 'string' || - !options || typeof options !== 'object') { - - return null; - } - - // Application time - - var timestamp = options.timestamp || Math.floor((hawk.utils.now() + (options.localtimeOffsetMsec || 0)) / 1000) - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return null; - } - - if (hawk.crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return null; - } - - // Calculate signature - - var artifacts = { - ts: timestamp, - nonce: options.nonce || hawk.utils.randomString(6), - host: host, - port: port, - hash: hawk.crypto.calculatePayloadHash(message, credentials.algorithm) - }; - - // Construct authorization - - var result = { - id: credentials.id, - ts: artifacts.ts, - nonce: artifacts.nonce, - hash: artifacts.hash, - mac: hawk.crypto.calculateMac('message', credentials, artifacts) - }; - - return result; - } -}; - - -hawk.crypto = { - - headerVersion: '1', - - algorithms: ['sha1', 'sha256'], - - calculateMac: function (type, credentials, options) { - - var normalized = hawk.crypto.generateNormalizedString(type, options); - - var hmac = CryptoJS['Hmac' + credentials.algorithm.toUpperCase()](normalized, credentials.key); - return hmac.toString(CryptoJS.enc.Base64); - }, - - generateNormalizedString: function (type, options) { - - var normalized = 'hawk.' + hawk.crypto.headerVersion + '.' + type + '\n' + - options.ts + '\n' + - options.nonce + '\n' + - (options.method || '').toUpperCase() + '\n' + - (options.resource || '') + '\n' + - options.host.toLowerCase() + '\n' + - options.port + '\n' + - (options.hash || '') + '\n'; - - if (options.ext) { - normalized += options.ext.replace('\\', '\\\\').replace('\n', '\\n'); - } - - normalized += '\n'; - - if (options.app) { - normalized += options.app + '\n' + - (options.dlg || '') + '\n'; - } - - return normalized; - }, - - calculatePayloadHash: function (payload, algorithm, contentType) { - - var hash = CryptoJS.algo[algorithm.toUpperCase()].create(); - hash.update('hawk.' + hawk.crypto.headerVersion + '.payload\n'); - hash.update(hawk.utils.parseContentType(contentType) + '\n'); - hash.update(payload || ''); - hash.update('\n'); - return hash.finalize().toString(CryptoJS.enc.Base64); - }, - - calculateTsMac: function (ts, credentials) { - - var hash = CryptoJS['Hmac' + credentials.algorithm.toUpperCase()]('hawk.' + hawk.crypto.headerVersion + '.ts\n' + ts + '\n', credentials.key); - return hash.toString(CryptoJS.enc.Base64); - } -}; - - -hawk.utils = { - - storage: { // localStorage compatible interface - _cache: {}, - setItem: function (key, value) { - - hawk.utils.storage._cache[key] = value; - }, - getItem: function (key) { - - return hawk.utils.storage._cache[key]; - } - }, - - setStorage: function (storage) { - - var ntpOffset = hawk.utils.getNtpOffset() || 0; - hawk.utils.storage = storage; - hawk.utils.setNtpOffset(ntpOffset); - }, - - setNtpOffset: function (offset) { - - hawk.utils.storage.setItem('hawk_ntp_offset', offset); - }, - - getNtpOffset: function () { - - return parseInt(hawk.utils.storage.getItem('hawk_ntp_offset') || '0', 10); - }, - - now: function () { - - return Date.now() + hawk.utils.getNtpOffset(); - }, - - escapeHeaderAttribute: function (attribute) { - - return attribute.replace(/\\/g, '\\\\').replace(/\"/g, '\\"'); - }, - - parseContentType: function (header) { - - if (!header) { - return ''; - } - - return header.split(';')[0].trim().toLowerCase(); - }, - - parseAuthorizationHeader: function (header, keys) { - - if (!header) { - return null; - } - - var headerParts = header.match(/^(\w+)(?:\s+(.*))?$/); // Header: scheme[ something] - if (!headerParts) { - return null; - } - - var scheme = headerParts[1]; - if (scheme.toLowerCase() !== 'hawk') { - return null; - } - - var attributesString = headerParts[2]; - if (!attributesString) { - return null; - } - - var attributes = {}; - var verify = attributesString.replace(/(\w+)="([^"\\]*)"\s*(?:,\s*|$)/g, function ($0, $1, $2) { - - // Check valid attribute names - - if (keys.indexOf($1) === -1) { - return; - } - - // Allowed attribute value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9 - - if ($2.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~]+$/) === null) { - return; - } - - // Check for duplicates - - if (attributes.hasOwnProperty($1)) { - return; - } - - attributes[$1] = $2; - return ''; - }); - - if (verify !== '') { - return null; - } - - return attributes; - }, - - randomString: function (size) { - - var randomSource = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; - var len = randomSource.length; - - var result = []; - for (var i = 0; i < size; ++i) { - result[i] = randomSource[Math.floor(Math.random() * len)]; - } - - return result.join(''); - }, - - parseUri: function (input) { - - // Based on: parseURI 1.2.2 - // http://blog.stevenlevithan.com/archives/parseuri - // (c) Steven Levithan <stevenlevithan.com> - // MIT License - - var keys = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'hostname', 'port', 'resource', 'relative', 'pathname', 'directory', 'file', 'query', 'fragment']; - - var uriRegex = /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?(((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?)(?:#(.*))?)/; - var uriByNumber = uriRegex.exec(input); - var uri = {}; - - var i = 15; - while (i--) { - uri[keys[i]] = uriByNumber[i] || ''; - } - - if (uri.port === null || - uri.port === '') { - - uri.port = (uri.protocol.toLowerCase() === 'http' ? '80' : (uri.protocol.toLowerCase() === 'https' ? '443' : '')); - } - - return uri; - } -}; - - -// Based on: Crypto-JS v3.1.2 -// Copyright (c) 2009-2013, Jeff Mott. All rights reserved. -// http://code.google.com/p/crypto-js/ -// http://code.google.com/p/crypto-js/wiki/License - -var CryptoJS=CryptoJS||function(h,r){var k={},l=k.lib={},n=function(){},f=l.Base={extend:function(a){n.prototype=this;var b=new n;a&&b.mixIn(a);b.hasOwnProperty("init")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},j=l.WordArray=f.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=r?b:4*a.length},toString:function(a){return(a||s).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var e=0;e<a;e++)b[c+e>>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((c+e)%4);else if(65535<d.length)for(e=0;e<a;e+=4)b[c+e>>>2]=d[e>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<32-8*(b%4);a.length=h.ceil(b/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],d=0;d<a;d+=4)b.push(4294967296*h.random()|0);return new j.init(b,a)}}),m=k.enc={},s=m.Hex={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++){var e=b[c>>>2]>>>24-8*(c%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c+=2)d[c>>>3]|=parseInt(a.substr(c,2),16)<<24-4*(c%8);return new j.init(d,b/2)}},p=m.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++)d.push(String.fromCharCode(b[c>>>2]>>>24-8*(c%4)&255));return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c++)d[c>>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new j.init(d,b)}},t=m.Utf8={stringify:function(a){try{return decodeURIComponent(escape(p.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return p.parse(unescape(encodeURIComponent(a)))}},q=l.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new j.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=t.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,d=b.words,c=b.sigBytes,e=this.blockSize,f=c/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;c=h.min(4*a,c);if(a){for(var g=0;g<a;g+=e)this._doProcessBlock(d,g);g=d.splice(0,a);b.sigBytes-=c}return new j.init(g,c)},clone:function(){var a=f.clone.call(this);a._data=this._data.clone();return a},_minBufferSize:0});l.Hasher=q.extend({cfg:f.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){q.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,d){return(new a.init(d)).finalize(b)}},_createHmacHelper:function(a){return function(b,d){return(new u.HMAC.init(a,d)).finalize(b)}}});var u=k.algo={};return k}(Math); -(function () { var k = CryptoJS, b = k.lib, m = b.WordArray, l = b.Hasher, d = [], b = k.algo.SHA1 = l.extend({ _doReset: function () { this._hash = new m.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) }, _doProcessBlock: function (n, p) { for (var a = this._hash.words, e = a[0], f = a[1], h = a[2], j = a[3], b = a[4], c = 0; 80 > c; c++) { if (16 > c) d[c] = n[p + c] | 0; else { var g = d[c - 3] ^ d[c - 8] ^ d[c - 14] ^ d[c - 16]; d[c] = g << 1 | g >>> 31 } g = (e << 5 | e >>> 27) + b + d[c]; g = 20 > c ? g + ((f & h | ~f & j) + 1518500249) : 40 > c ? g + ((f ^ h ^ j) + 1859775393) : 60 > c ? g + ((f & h | f & j | h & j) - 1894007588) : g + ((f ^ h ^ j) - 899497514); b = j; j = h; h = f << 30 | f >>> 2; f = e; e = g } a[0] = a[0] + e | 0; a[1] = a[1] + f | 0; a[2] = a[2] + h | 0; a[3] = a[3] + j | 0; a[4] = a[4] + b | 0 }, _doFinalize: function () { var b = this._data, d = b.words, a = 8 * this._nDataBytes, e = 8 * b.sigBytes; d[e >>> 5] |= 128 << 24 - e % 32; d[(e + 64 >>> 9 << 4) + 14] = Math.floor(a / 4294967296); d[(e + 64 >>> 9 << 4) + 15] = a; b.sigBytes = 4 * d.length; this._process(); return this._hash }, clone: function () { var b = l.clone.call(this); b._hash = this._hash.clone(); return b } }); k.SHA1 = l._createHelper(b); k.HmacSHA1 = l._createHmacHelper(b) })(); -(function (k) { for (var g = CryptoJS, h = g.lib, v = h.WordArray, j = h.Hasher, h = g.algo, s = [], t = [], u = function (q) { return 4294967296 * (q - (q | 0)) | 0 }, l = 2, b = 0; 64 > b;) { var d; a: { d = l; for (var w = k.sqrt(d), r = 2; r <= w; r++) if (!(d % r)) { d = !1; break a } d = !0 } d && (8 > b && (s[b] = u(k.pow(l, 0.5))), t[b] = u(k.pow(l, 1 / 3)), b++); l++ } var n = [], h = h.SHA256 = j.extend({ _doReset: function () { this._hash = new v.init(s.slice(0)) }, _doProcessBlock: function (q, h) { for (var a = this._hash.words, c = a[0], d = a[1], b = a[2], k = a[3], f = a[4], g = a[5], j = a[6], l = a[7], e = 0; 64 > e; e++) { if (16 > e) n[e] = q[h + e] | 0; else { var m = n[e - 15], p = n[e - 2]; n[e] = ((m << 25 | m >>> 7) ^ (m << 14 | m >>> 18) ^ m >>> 3) + n[e - 7] + ((p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10) + n[e - 16] } m = l + ((f << 26 | f >>> 6) ^ (f << 21 | f >>> 11) ^ (f << 7 | f >>> 25)) + (f & g ^ ~f & j) + t[e] + n[e]; p = ((c << 30 | c >>> 2) ^ (c << 19 | c >>> 13) ^ (c << 10 | c >>> 22)) + (c & d ^ c & b ^ d & b); l = j; j = g; g = f; f = k + m | 0; k = b; b = d; d = c; c = m + p | 0 } a[0] = a[0] + c | 0; a[1] = a[1] + d | 0; a[2] = a[2] + b | 0; a[3] = a[3] + k | 0; a[4] = a[4] + f | 0; a[5] = a[5] + g | 0; a[6] = a[6] + j | 0; a[7] = a[7] + l | 0 }, _doFinalize: function () { var d = this._data, b = d.words, a = 8 * this._nDataBytes, c = 8 * d.sigBytes; b[c >>> 5] |= 128 << 24 - c % 32; b[(c + 64 >>> 9 << 4) + 14] = k.floor(a / 4294967296); b[(c + 64 >>> 9 << 4) + 15] = a; d.sigBytes = 4 * b.length; this._process(); return this._hash }, clone: function () { var b = j.clone.call(this); b._hash = this._hash.clone(); return b } }); g.SHA256 = j._createHelper(h); g.HmacSHA256 = j._createHmacHelper(h) })(Math); -(function(){var c=CryptoJS,k=c.enc.Utf8;c.algo.HMAC=c.lib.Base.extend({init:function(a,b){a=this._hasher=new a.init;"string"==typeof b&&(b=k.parse(b));var c=a.blockSize,e=4*c;b.sigBytes>e&&(b=a.finalize(b));b.clamp();for(var f=this._oKey=b.clone(),g=this._iKey=b.clone(),h=f.words,j=g.words,d=0;d<c;d++)h[d]^=1549556828,j[d]^=909522486;f.sigBytes=g.sigBytes=e;this.reset()},reset:function(){var a=this._hasher;a.reset();a.update(this._iKey)},update:function(a){this._hasher.update(a);return this},finalize:function(a){var b=this._hasher;a=b.finalize(a);b.reset();return b.finalize(this._oKey.clone().concat(a))}})})(); -(function(){var h=CryptoJS,j=h.lib.WordArray;h.enc.Base64={stringify:function(b){var e=b.words,f=b.sigBytes,c=this._map;b.clamp();b=[];for(var a=0;a<f;a+=3)for(var d=(e[a>>>2]>>>24-8*(a%4)&255)<<16|(e[a+1>>>2]>>>24-8*((a+1)%4)&255)<<8|e[a+2>>>2]>>>24-8*((a+2)%4)&255,g=0;4>g&&a+0.75*g<f;g++)b.push(c.charAt(d>>>6*(3-g)&63));if(e=c.charAt(64))for(;b.length%4;)b.push(e);return b.join("")},parse:function(b){var e=b.length,f=this._map,c=f.charAt(64);c&&(c=b.indexOf(c),-1!=c&&(e=c));for(var c=[],a=0,d=0;d<e;d++)if(d%4){var g=f.indexOf(b.charAt(d-1))<<2*(d%4),h=f.indexOf(b.charAt(d))>>>6-2*(d%4);c[a>>>2]|=(g|h)<<24-8*(a%4);a++}return j.create(c,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/client.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/client.js deleted file mode 100755 index 41984582..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/client.js +++ /dev/null @@ -1,367 +0,0 @@ -// Load modules - -var Url = require('url'); -var Hoek = require('hoek'); -var Cryptiles = require('cryptiles'); -var Crypto = require('./crypto'); -var Utils = require('./utils'); - - -// Declare internals - -var internals = {}; - - -// Generate an Authorization header for a given request - -/* - uri: 'http://example.com/resource?a=b' or object from Url.parse() - method: HTTP verb (e.g. 'GET', 'POST') - options: { - - // Required - - credentials: { - id: 'dh37fgj492je', - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - - // Optional - - ext: 'application-specific', // Application specific data sent via the ext attribute - timestamp: Date.now(), // A pre-calculated timestamp - nonce: '2334f34f', // A pre-generated nonce - localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided) - payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided) - contentType: 'application/json', // Payload content-type (ignored if hash provided) - hash: 'U4MKKSmiVxk37JCCrAVIjV=', // Pre-calculated payload hash - app: '24s23423f34dx', // Oz application id - dlg: '234sz34tww3sd' // Oz delegated-by application id - } -*/ - -exports.header = function (uri, method, options) { - - var result = { - field: '', - artifacts: {} - }; - - // Validate inputs - - if (!uri || (typeof uri !== 'string' && typeof uri !== 'object') || - !method || typeof method !== 'string' || - !options || typeof options !== 'object') { - - return result; - } - - // Application time - - var timestamp = options.timestamp || Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000) - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return result; - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return result; - } - - // Parse URI - - if (typeof uri === 'string') { - uri = Url.parse(uri); - } - - // Calculate signature - - var artifacts = { - ts: timestamp, - nonce: options.nonce || Cryptiles.randomString(6), - method: method, - resource: uri.pathname + (uri.search || ''), // Maintain trailing '?' - host: uri.hostname, - port: uri.port || (uri.protocol === 'http:' ? 80 : 443), - hash: options.hash, - ext: options.ext, - app: options.app, - dlg: options.dlg - }; - - result.artifacts = artifacts; - - // Calculate payload hash - - if (!artifacts.hash && - options.hasOwnProperty('payload')) { - - artifacts.hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType); - } - - var mac = Crypto.calculateMac('header', credentials, artifacts); - - // Construct header - - var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''; // Other falsey values allowed - var header = 'Hawk id="' + credentials.id + - '", ts="' + artifacts.ts + - '", nonce="' + artifacts.nonce + - (artifacts.hash ? '", hash="' + artifacts.hash : '') + - (hasExt ? '", ext="' + Utils.escapeHeaderAttribute(artifacts.ext) : '') + - '", mac="' + mac + '"'; - - if (artifacts.app) { - header += ', app="' + artifacts.app + - (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"'; - } - - result.field = header; - - return result; -}; - - -// Validate server response - -/* - res: node's response object - artifacts: object recieved from header().artifacts - options: { - payload: optional payload received - required: specifies if a Server-Authorization header is required. Defaults to 'false' - } -*/ - -exports.authenticate = function (res, credentials, artifacts, options) { - - artifacts = Hoek.clone(artifacts); - options = options || {}; - - if (res.headers['www-authenticate']) { - - // Parse HTTP WWW-Authenticate header - - var attributes = Utils.parseAuthorizationHeader(res.headers['www-authenticate'], ['ts', 'tsm', 'error']); - if (attributes instanceof Error) { - return false; - } - - if (attributes.ts) { - var tsm = Crypto.calculateTsMac(attributes.ts, credentials); - if (tsm !== attributes.tsm) { - return false; - } - } - } - - // Parse HTTP Server-Authorization header - - if (!res.headers['server-authorization'] && - !options.required) { - - return true; - } - - var attributes = Utils.parseAuthorizationHeader(res.headers['server-authorization'], ['mac', 'ext', 'hash']); - if (attributes instanceof Error) { - return false; - } - - artifacts.ext = attributes.ext; - artifacts.hash = attributes.hash; - - var mac = Crypto.calculateMac('response', credentials, artifacts); - if (mac !== attributes.mac) { - return false; - } - - if (!options.hasOwnProperty('payload')) { - return true; - } - - if (!attributes.hash) { - return false; - } - - var calculatedHash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, res.headers['content-type']); - return (calculatedHash === attributes.hash); -}; - - -// Generate a bewit value for a given URI - -/* - * credentials is an object with the following keys: 'id, 'key', 'algorithm'. - * options is an object with the following optional keys: 'ext', 'localtimeOffsetMsec' - */ -/* - uri: 'http://example.com/resource?a=b' or object from Url.parse() - options: { - - // Required - - credentials: { - id: 'dh37fgj492je', - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - ttlSec: 60 * 60, // TTL in seconds - - // Optional - - ext: 'application-specific', // Application specific data sent via the ext attribute - localtimeOffsetMsec: 400 // Time offset to sync with server time - }; -*/ - -exports.getBewit = function (uri, options) { - - // Validate inputs - - if (!uri || - (typeof uri !== 'string' && typeof uri !== 'object') || - !options || - typeof options !== 'object' || - !options.ttlSec) { - - return ''; - } - - options.ext = (options.ext === null || options.ext === undefined ? '' : options.ext); // Zero is valid value - - // Application time - - var now = Utils.now() + (options.localtimeOffsetMsec || 0); - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - return ''; - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return ''; - } - - // Parse URI - - if (typeof uri === 'string') { - uri = Url.parse(uri); - } - - // Calculate signature - - var exp = Math.floor(now / 1000) + options.ttlSec; - var mac = Crypto.calculateMac('bewit', credentials, { - ts: exp, - nonce: '', - method: 'GET', - resource: uri.pathname + (uri.search || ''), // Maintain trailing '?' - host: uri.hostname, - port: uri.port || (uri.protocol === 'http:' ? 80 : 443), - ext: options.ext - }); - - // Construct bewit: id\exp\mac\ext - - var bewit = credentials.id + '\\' + exp + '\\' + mac + '\\' + options.ext; - return Utils.base64urlEncode(bewit); -}; - - -// Generate an authorization string for a message - -/* - host: 'example.com', - port: 8000, - message: '{"some":"payload"}', // UTF-8 encoded string for body hash generation - options: { - - // Required - - credentials: { - id: 'dh37fgj492je', - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - - // Optional - - timestamp: Date.now(), // A pre-calculated timestamp - nonce: '2334f34f', // A pre-generated nonce - localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided) - } -*/ - -exports.message = function (host, port, message, options) { - - // Validate inputs - - if (!host || typeof host !== 'string' || - !port || typeof port !== 'number' || - message === null || message === undefined || typeof message !== 'string' || - !options || typeof options !== 'object') { - - return null; - } - - // Application time - - var timestamp = options.timestamp || Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000) - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return null; - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return null; - } - - // Calculate signature - - var artifacts = { - ts: timestamp, - nonce: options.nonce || Cryptiles.randomString(6), - host: host, - port: port, - hash: Crypto.calculatePayloadHash(message, credentials.algorithm) - }; - - // Construct authorization - - var result = { - id: credentials.id, - ts: artifacts.ts, - nonce: artifacts.nonce, - hash: artifacts.hash, - mac: Crypto.calculateMac('message', credentials, artifacts) - }; - - return result; -}; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/crypto.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/crypto.js deleted file mode 100755 index 150340a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/crypto.js +++ /dev/null @@ -1,111 +0,0 @@ -// Load modules - -var Crypto = require('crypto'); -var Url = require('url'); -var Utils = require('./utils'); - - -// Declare internals - -var internals = {}; - - -// MAC normalization format version - -exports.headerVersion = '1'; // Prevent comparison of mac values generated with different normalized string formats - - -// Supported HMAC algorithms - -exports.algorithms = ['sha1', 'sha256']; - - -// Calculate the request MAC - -/* - type: 'header', // 'header', 'bewit', 'response' - credentials: { - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - options: { - method: 'GET', - resource: '/resource?a=1&b=2', - host: 'example.com', - port: 8080, - ts: 1357718381034, - nonce: 'd3d345f', - hash: 'U4MKKSmiVxk37JCCrAVIjV/OhB3y+NdwoCr6RShbVkE=', - ext: 'app-specific-data', - app: 'hf48hd83qwkj', // Application id (Oz) - dlg: 'd8djwekds9cj' // Delegated by application id (Oz), requires options.app - } -*/ - -exports.calculateMac = function (type, credentials, options) { - - var normalized = exports.generateNormalizedString(type, options); - - var hmac = Crypto.createHmac(credentials.algorithm, credentials.key).update(normalized); - var digest = hmac.digest('base64'); - return digest; -}; - - -exports.generateNormalizedString = function (type, options) { - - var normalized = 'hawk.' + exports.headerVersion + '.' + type + '\n' + - options.ts + '\n' + - options.nonce + '\n' + - (options.method || '').toUpperCase() + '\n' + - (options.resource || '') + '\n' + - options.host.toLowerCase() + '\n' + - options.port + '\n' + - (options.hash || '') + '\n'; - - if (options.ext) { - normalized += options.ext.replace('\\', '\\\\').replace('\n', '\\n'); - } - - normalized += '\n'; - - if (options.app) { - normalized += options.app + '\n' + - (options.dlg || '') + '\n'; - } - - return normalized; -}; - - -exports.calculatePayloadHash = function (payload, algorithm, contentType) { - - var hash = exports.initializePayloadHash(algorithm, contentType); - hash.update(payload || ''); - return exports.finalizePayloadHash(hash); -}; - - -exports.initializePayloadHash = function (algorithm, contentType) { - - var hash = Crypto.createHash(algorithm); - hash.update('hawk.' + exports.headerVersion + '.payload\n'); - hash.update(Utils.parseContentType(contentType) + '\n'); - return hash; -}; - - -exports.finalizePayloadHash = function (hash) { - - hash.update('\n'); - return hash.digest('base64'); -}; - - -exports.calculateTsMac = function (ts, credentials) { - - var hmac = Crypto.createHmac(credentials.algorithm, credentials.key); - hmac.update('hawk.' + exports.headerVersion + '.ts\n' + ts + '\n'); - return hmac.digest('base64'); -}; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/index.js deleted file mode 100755 index 1d713cb6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/index.js +++ /dev/null @@ -1,15 +0,0 @@ -// Export sub-modules - -exports.error = exports.Error = require('boom'); -exports.sntp = require('sntp'); -exports.server = require('./server'); -exports.client = require('./client'); -exports.crypto = require('./crypto'); -exports.utils = require('./utils'); - -exports.uri = { - authenticate: exports.server.authenticateBewit, - getBewit: exports.client.getBewit -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/server.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/server.js deleted file mode 100755 index 478c47b3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/server.js +++ /dev/null @@ -1,524 +0,0 @@ -// Load modules - -var Boom = require('boom'); -var Hoek = require('hoek'); -var Cryptiles = require('cryptiles'); -var Crypto = require('./crypto'); -var Utils = require('./utils'); - - -// Declare internals - -var internals = {}; - - -// Hawk authentication - -/* - req: node's HTTP request object or an object as follows: - - var request = { - method: 'GET', - url: '/resource/4?a=1&b=2', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE="' - }; - - credentialsFunc: required function to lookup the set of Hawk credentials based on the provided credentials id. - The credentials include the MAC key, MAC algorithm, and other attributes (such as username) - needed by the application. This function is the equivalent of verifying the username and - password in Basic authentication. - - var credentialsFunc = function (id, callback) { - - // Lookup credentials in database - db.lookup(id, function (err, item) { - - if (err || !item) { - return callback(err); - } - - var credentials = { - // Required - key: item.key, - algorithm: item.algorithm, - // Application specific - user: item.user - }; - - return callback(null, credentials); - }); - }; - - options: { - - hostHeaderName: optional header field name, used to override the default 'Host' header when used - behind a cache of a proxy. Apache2 changes the value of the 'Host' header while preserving - the original (which is what the module must verify) in the 'x-forwarded-host' header field. - Only used when passed a node Http.ServerRequest object. - - nonceFunc: optional nonce validation function. The function signature is function(nonce, ts, callback) - where 'callback' must be called using the signature function(err). - - timestampSkewSec: optional number of seconds of permitted clock skew for incoming timestamps. Defaults to 60 seconds. - Provides a +/- skew which means actual allowed window is double the number of seconds. - - localtimeOffsetMsec: optional local clock time offset express in a number of milliseconds (positive or negative). - Defaults to 0. - - payload: optional payload for validation. The client calculates the hash value and includes it via the 'hash' - header attribute. The server always ensures the value provided has been included in the request - MAC. When this option is provided, it validates the hash value itself. Validation is done by calculating - a hash value over the entire payload (assuming it has already be normalized to the same format and - encoding used by the client to calculate the hash on request). If the payload is not available at the time - of authentication, the authenticatePayload() method can be used by passing it the credentials and - attributes.hash returned in the authenticate callback. - - host: optional host name override. Only used when passed a node request object. - port: optional port override. Only used when passed a node request object. - } - - callback: function (err, credentials, artifacts) { } - */ - -exports.authenticate = function (req, credentialsFunc, options, callback) { - - callback = Utils.nextTick(callback); - - // Default options - - options.nonceFunc = options.nonceFunc || function (nonce, ts, nonceCallback) { return nonceCallback(); }; // No validation - options.timestampSkewSec = options.timestampSkewSec || 60; // 60 seconds - - // Application time - - var now = Utils.now() + (options.localtimeOffsetMsec || 0); // Measure now before any other processing - - // Convert node Http request object to a request configuration object - - var request = Utils.parseRequest(req, options); - if (request instanceof Error) { - return callback(Boom.badRequest(request.message)); - } - - // Parse HTTP Authorization header - - var attributes = Utils.parseAuthorizationHeader(request.authorization); - if (attributes instanceof Error) { - return callback(attributes); - } - - // Construct artifacts container - - var artifacts = { - method: request.method, - host: request.host, - port: request.port, - resource: request.url, - ts: attributes.ts, - nonce: attributes.nonce, - hash: attributes.hash, - ext: attributes.ext, - app: attributes.app, - dlg: attributes.dlg, - mac: attributes.mac, - id: attributes.id - }; - - // Verify required header attributes - - if (!attributes.id || - !attributes.ts || - !attributes.nonce || - !attributes.mac) { - - return callback(Boom.badRequest('Missing attributes'), null, artifacts); - } - - // Fetch Hawk credentials - - credentialsFunc(attributes.id, function (err, credentials) { - - if (err) { - return callback(err, credentials || null, artifacts); - } - - if (!credentials) { - return callback(Boom.unauthorized('Unknown credentials', 'Hawk'), null, artifacts); - } - - if (!credentials.key || - !credentials.algorithm) { - - return callback(Boom.internal('Invalid credentials'), credentials, artifacts); - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return callback(Boom.internal('Unknown algorithm'), credentials, artifacts); - } - - // Calculate MAC - - var mac = Crypto.calculateMac('header', credentials, artifacts); - if (!Cryptiles.fixedTimeComparison(mac, attributes.mac)) { - return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials, artifacts); - } - - // Check payload hash - - if (options.payload !== null && - options.payload !== undefined) { // '' is valid - - if (!attributes.hash) { - return callback(Boom.unauthorized('Missing required payload hash', 'Hawk'), credentials, artifacts); - } - - var hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, request.contentType); - if (!Cryptiles.fixedTimeComparison(hash, attributes.hash)) { - return callback(Boom.unauthorized('Bad payload hash', 'Hawk'), credentials, artifacts); - } - } - - // Check nonce - - options.nonceFunc(attributes.nonce, attributes.ts, function (err) { - - if (err) { - return callback(Boom.unauthorized('Invalid nonce', 'Hawk'), credentials, artifacts); - } - - // Check timestamp staleness - - if (Math.abs((attributes.ts * 1000) - now) > (options.timestampSkewSec * 1000)) { - var fresh = Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000); // Get fresh now - var tsm = Crypto.calculateTsMac(fresh, credentials); - return callback(Boom.unauthorized('Stale timestamp', 'Hawk', { ts: fresh, tsm: tsm }), credentials, artifacts); - } - - // Successful authentication - - return callback(null, credentials, artifacts); - }); - }); -}; - - -// Authenticate payload hash - used when payload cannot be provided during authenticate() - -/* - payload: raw request payload - credentials: from authenticate callback - artifacts: from authenticate callback - contentType: req.headers['content-type'] -*/ - -exports.authenticatePayload = function (payload, credentials, artifacts, contentType) { - - var calculatedHash = Crypto.calculatePayloadHash(payload, credentials.algorithm, contentType); - return Cryptiles.fixedTimeComparison(calculatedHash, artifacts.hash); -}; - - -// Generate a Server-Authorization header for a given response - -/* - credentials: {}, // Object received from authenticate() - artifacts: {} // Object received from authenticate(); 'mac', 'hash', and 'ext' - ignored - options: { - ext: 'application-specific', // Application specific data sent via the ext attribute - payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided) - contentType: 'application/json', // Payload content-type (ignored if hash provided) - hash: 'U4MKKSmiVxk37JCCrAVIjV=' // Pre-calculated payload hash - } -*/ - -exports.header = function (credentials, artifacts, options) { - - // Prepare inputs - - options = options || {}; - - if (!artifacts || - typeof artifacts !== 'object' || - typeof options !== 'object') { - - return ''; - } - - artifacts = Hoek.clone(artifacts); - delete artifacts.mac; - artifacts.hash = options.hash; - artifacts.ext = options.ext; - - // Validate credentials - - if (!credentials || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return ''; - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return ''; - } - - // Calculate payload hash - - if (!artifacts.hash && - options.hasOwnProperty('payload')) { - - artifacts.hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType); - } - - var mac = Crypto.calculateMac('response', credentials, artifacts); - - // Construct header - - var header = 'Hawk mac="' + mac + '"' + - (artifacts.hash ? ', hash="' + artifacts.hash + '"' : ''); - - if (artifacts.ext !== null && - artifacts.ext !== undefined && - artifacts.ext !== '') { // Other falsey values allowed - - header += ', ext="' + Utils.escapeHeaderAttribute(artifacts.ext) + '"'; - } - - return header; -}; - - -/* - * Arguments and options are the same as authenticate() with the exception that the only supported options are: - * 'hostHeaderName', 'localtimeOffsetMsec', 'host', 'port' - */ - -exports.authenticateBewit = function (req, credentialsFunc, options, callback) { - - callback = Utils.nextTick(callback); - - // Application time - - var now = Utils.now() + (options.localtimeOffsetMsec || 0); - - // Convert node Http request object to a request configuration object - - var request = Utils.parseRequest(req, options); - if (request instanceof Error) { - return callback(Boom.badRequest(request.message)); - } - - // Extract bewit - - // 1 2 3 4 - var resource = request.url.match(/^(\/.*)([\?&])bewit\=([^&$]*)(?:&(.+))?$/); - if (!resource) { - return callback(Boom.unauthorized(null, 'Hawk')); - } - - // Bewit not empty - - if (!resource[3]) { - return callback(Boom.unauthorized('Empty bewit', 'Hawk')); - } - - // Verify method is GET - - if (request.method !== 'GET' && - request.method !== 'HEAD') { - - return callback(Boom.unauthorized('Invalid method', 'Hawk')); - } - - // No other authentication - - if (request.authorization) { - return callback(Boom.badRequest('Multiple authentications', 'Hawk')); - } - - // Parse bewit - - var bewitString = Utils.base64urlDecode(resource[3]); - if (bewitString instanceof Error) { - return callback(Boom.badRequest('Invalid bewit encoding')); - } - - // Bewit format: id\exp\mac\ext ('\' is used because it is a reserved header attribute character) - - var bewitParts = bewitString.split('\\'); - if (!bewitParts || - bewitParts.length !== 4) { - - return callback(Boom.badRequest('Invalid bewit structure')); - } - - var bewit = { - id: bewitParts[0], - exp: parseInt(bewitParts[1], 10), - mac: bewitParts[2], - ext: bewitParts[3] || '' - }; - - if (!bewit.id || - !bewit.exp || - !bewit.mac) { - - return callback(Boom.badRequest('Missing bewit attributes')); - } - - // Construct URL without bewit - - var url = resource[1]; - if (resource[4]) { - url += resource[2] + resource[4]; - } - - // Check expiration - - if (bewit.exp * 1000 <= now) { - return callback(Boom.unauthorized('Access expired', 'Hawk'), null, bewit); - } - - // Fetch Hawk credentials - - credentialsFunc(bewit.id, function (err, credentials) { - - if (err) { - return callback(err, credentials || null, bewit.ext); - } - - if (!credentials) { - return callback(Boom.unauthorized('Unknown credentials', 'Hawk'), null, bewit); - } - - if (!credentials.key || - !credentials.algorithm) { - - return callback(Boom.internal('Invalid credentials'), credentials, bewit); - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return callback(Boom.internal('Unknown algorithm'), credentials, bewit); - } - - // Calculate MAC - - var mac = Crypto.calculateMac('bewit', credentials, { - ts: bewit.exp, - nonce: '', - method: 'GET', - resource: url, - host: request.host, - port: request.port, - ext: bewit.ext - }); - - if (!Cryptiles.fixedTimeComparison(mac, bewit.mac)) { - return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials, bewit); - } - - // Successful authentication - - return callback(null, credentials, bewit); - }); -}; - - -/* - * options are the same as authenticate() with the exception that the only supported options are: - * 'nonceFunc', 'timestampSkewSec', 'localtimeOffsetMsec' - */ - -exports.authenticateMessage = function (host, port, message, authorization, credentialsFunc, options, callback) { - - callback = Utils.nextTick(callback); - - // Default options - - options.nonceFunc = options.nonceFunc || function (nonce, ts, nonceCallback) { return nonceCallback(); }; // No validation - options.timestampSkewSec = options.timestampSkewSec || 60; // 60 seconds - - // Application time - - var now = Utils.now() + (options.localtimeOffsetMsec || 0); // Measure now before any other processing - - // Validate authorization - - if (!authorization.id || - !authorization.ts || - !authorization.nonce || - !authorization.hash || - !authorization.mac) { - - return callback(Boom.badRequest('Invalid authorization')) - } - - // Fetch Hawk credentials - - credentialsFunc(authorization.id, function (err, credentials) { - - if (err) { - return callback(err, credentials || null); - } - - if (!credentials) { - return callback(Boom.unauthorized('Unknown credentials', 'Hawk')); - } - - if (!credentials.key || - !credentials.algorithm) { - - return callback(Boom.internal('Invalid credentials'), credentials); - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return callback(Boom.internal('Unknown algorithm'), credentials); - } - - // Construct artifacts container - - var artifacts = { - ts: authorization.ts, - nonce: authorization.nonce, - host: host, - port: port, - hash: authorization.hash - }; - - // Calculate MAC - - var mac = Crypto.calculateMac('message', credentials, artifacts); - if (!Cryptiles.fixedTimeComparison(mac, authorization.mac)) { - return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials); - } - - // Check payload hash - - var hash = Crypto.calculatePayloadHash(message, credentials.algorithm); - if (!Cryptiles.fixedTimeComparison(hash, authorization.hash)) { - return callback(Boom.unauthorized('Bad message hash', 'Hawk'), credentials); - } - - // Check nonce - - options.nonceFunc(authorization.nonce, authorization.ts, function (err) { - - if (err) { - return callback(Boom.unauthorized('Invalid nonce', 'Hawk'), credentials); - } - - // Check timestamp staleness - - if (Math.abs((authorization.ts * 1000) - now) > (options.timestampSkewSec * 1000)) { - return callback(Boom.unauthorized('Stale timestamp'), credentials); - } - - // Successful authentication - - return callback(null, credentials); - }); - }); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/utils.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/utils.js deleted file mode 100755 index c8938fe8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/utils.js +++ /dev/null @@ -1,183 +0,0 @@ -// Load modules - -var Hoek = require('hoek'); -var Sntp = require('sntp'); -var Boom = require('boom'); - - -// Declare internals - -var internals = {}; - - -// Import Hoek Utilities - -internals.import = function () { - - for (var i in Hoek) { - if (Hoek.hasOwnProperty(i)) { - exports[i] = Hoek[i]; - } - } -}; - -internals.import(); - - -// Hawk version - -exports.version = function () { - - return exports.loadPackage(__dirname + '/..').version; -}; - - -// Extract host and port from request - -exports.parseHost = function (req, hostHeaderName) { - - hostHeaderName = (hostHeaderName ? hostHeaderName.toLowerCase() : 'host'); - var hostHeader = req.headers[hostHeaderName]; - if (!hostHeader) { - return null; - } - - var hostHeaderRegex; - if (hostHeader[0] === '[') { - hostHeaderRegex = /^(?:(?:\r\n)?\s)*(\[[^\]]+\])(?::(\d+))?(?:(?:\r\n)?\s)*$/; // IPv6 - } - else { - hostHeaderRegex = /^(?:(?:\r\n)?\s)*([^:]+)(?::(\d+))?(?:(?:\r\n)?\s)*$/; // IPv4, hostname - } - - var hostParts = hostHeader.match(hostHeaderRegex); - - if (!hostParts || - hostParts.length !== 3 || - !hostParts[1]) { - - return null; - } - - return { - name: hostParts[1], - port: (hostParts[2] ? hostParts[2] : (req.connection && req.connection.encrypted ? 443 : 80)) - }; -}; - - -// Parse Content-Type header content - -exports.parseContentType = function (header) { - - if (!header) { - return ''; - } - - return header.split(';')[0].trim().toLowerCase(); -}; - - -// Convert node's to request configuration object - -exports.parseRequest = function (req, options) { - - if (!req.headers) { - return req; - } - - // Obtain host and port information - - if (!options.host || !options.port) { - var host = exports.parseHost(req, options.hostHeaderName); - if (!host) { - return new Error('Invalid Host header'); - } - } - - var request = { - method: req.method, - url: req.url, - host: options.host || host.name, - port: options.port || host.port, - authorization: req.headers.authorization, - contentType: req.headers['content-type'] || '' - }; - - return request; -}; - - -exports.now = function () { - - return Sntp.now(); -}; - - -// Parse Hawk HTTP Authorization header - -exports.parseAuthorizationHeader = function (header, keys) { - - keys = keys || ['id', 'ts', 'nonce', 'hash', 'ext', 'mac', 'app', 'dlg']; - - if (!header) { - return Boom.unauthorized(null, 'Hawk'); - } - - var headerParts = header.match(/^(\w+)(?:\s+(.*))?$/); // Header: scheme[ something] - if (!headerParts) { - return Boom.badRequest('Invalid header syntax'); - } - - var scheme = headerParts[1]; - if (scheme.toLowerCase() !== 'hawk') { - return Boom.unauthorized(null, 'Hawk'); - } - - var attributesString = headerParts[2]; - if (!attributesString) { - return Boom.badRequest('Invalid header syntax'); - } - - var attributes = {}; - var errorMessage = ''; - var verify = attributesString.replace(/(\w+)="([^"\\]*)"\s*(?:,\s*|$)/g, function ($0, $1, $2) { - - // Check valid attribute names - - if (keys.indexOf($1) === -1) { - errorMessage = 'Unknown attribute: ' + $1; - return; - } - - // Allowed attribute value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9 - - if ($2.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~]+$/) === null) { - errorMessage = 'Bad attribute value: ' + $1; - return; - } - - // Check for duplicates - - if (attributes.hasOwnProperty($1)) { - errorMessage = 'Duplicate attribute: ' + $1; - return; - } - - attributes[$1] = $2; - return ''; - }); - - if (verify !== '') { - return Boom.badRequest(errorMessage || 'Bad header format'); - } - - return attributes; -}; - - -exports.unauthorized = function (message) { - - return Boom.unauthorized(message, 'Hawk'); -}; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore deleted file mode 100644 index 77ba16cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml deleted file mode 100755 index 047f7e3d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE deleted file mode 100755 index 911b97ee..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2013, Walmart. -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 Walmart 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 WALMART 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/Makefile deleted file mode 100755 index 884ec6db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -test: - @node node_modules/lab/bin/lab -test-cov: - @node node_modules/lab/bin/lab -r threshold -t 100 -test-cov-html: - @node node_modules/lab/bin/lab -r html -o coverage.html -complexity: - @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/README.md deleted file mode 100755 index 1970b1c4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/README.md +++ /dev/null @@ -1,6 +0,0 @@ -<a href="https://github.com/spumko"><img src="https://raw.github.com/spumko/spumko/master/images/from.png" align="right" /></a> -![boom Logo](https://raw.github.com/spumko/boom/master/images/boom.png) - -HTTP-friendly error objects - -[![Build Status](https://secure.travis-ci.org/spumko/boom.png)](http://travis-ci.org/spumko/boom) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/images/boom.png b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/images/boom.png deleted file mode 100755 index 373bc13455bc0a71a6a4538158aee59c6994b761..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29479 zcmX_nRal#C(`}IA?(QuPMT!QexVux_9g0iPQmhm!ZUu@2cXxM+y9ReHw!{1V*FH$X zL9Wa^Gi%npX6_+UMM)YRg#-lv0HDjtNU8w<u>8=!YmpG3?_c$V#GxO^&N8}g002hs z+Y2U%8G{r6KvA}lkWf*vc5-)evvzW(l9iC4a&~pHw6V7U0KAqm)vYwt4+w<r)~?0n zzXc`AJE`F#QK^YX1>wbiV4_CGlKV!TyNIvah5h+6Jn3N0H@Mi?plEzm7PRju3y3?^ zd9fk+-@Xq&Zu;ii&9&a`jlI;(3q#7TGHWIfJCV?mWw=y71)&v-Q($j|4D|MI?y!l1 zQ0SZiSV%SI)NaqTFo632Ads1+6R{lt<28ed1n5*u@BBy>@rrpUo@xLS6bjSn9?vI_ z6ody5^@$ZP1c*w(1ZDpEpbp4^2YeYZGu;NLumZl&2ky-Pf->(@ePICliPZQoIq?80 zT#Ij#0Bb=&*@V{j&j6i|06a_iUVgv=E8wH7wxtZ9vH{RJj)htcKtcn2RQ(pl2!Qtm zd>N#r^#X*Z0`R0RwSgDR<ya6VXrxlBflYM$pF#RatS*S!+H4dI<FbUzcswSsCTXH< z-QKChoFHz@jjK@rASWIl`m|TiUgH?$<KsNB^%%yihaCv7G^VE8FS`?^&Y}RorhCBD z3k!P<Nsu5yki$#f`%`#pBh(y^yC}<QOwl?(&cTxQmGfI{KIi^uT3p=S*;$b571uWz z*7kp~>Nf7wezt!I06yK_Y_xCDfjA98((v~i-J{nE1!NOHkwZ;a_Tr?U8c<)K$Y*GJ zWlfuOnDDk$aa>|0)1t393uq$6e=_#HpMEvpT4#BL6JGxWsI(P^@r`HwV`v6<D^HK5 z<KDS-2LN2QICcGHK!OXh4%wXWd_5C+md<$(2(py@=>h;4Nz$=t4A+PZAOQf9IUuG= zG1BWUB9=}BvaWY4U8qlActXYLdb`E3#8J$H$XvfLmIaG5gpXB{GkszID@xAYscIdb z;Eci6t=Whn<c#^x1SzYFp%sJ-FE)sTYeK#B4aW4l4s9$FVQSbtb(ai0P81#0&^J6) z8u|E7G8}5(HK;UY$S;LlVfiBrq?+Re2LYVHPvNc79EqT6RiVFVbrMZ~cu7K~@=zzu z-8s_Y2y)UVU292%qIq&5lcm;}OL4*y10Os0i4eJZ?LV^h_lQ^Vu^=ayja1Q;p_TTN zRBDyMwM5>SO;mZp<A6SQBJ;p|ic^_Th{@<E=qN47{GlSF<HlY>=0%1JRqdvyN%$jQ z`=J^8p_j;%lOsY$hJ|(xCk~e#%lDf^FE1TVqy#5@(+^nLs^1#ZIMY(oj%u_AEXC>E zG9<JKLrdm%)rkCwEL6;cVLO>SJv&@Gq&w7?`Y4&EqAtJh)wdYbhHd4Dcd>T4cM&Xp zaf)f?r>U*}$<@IA6sIQ+&aGFgP>uM5%k7cIKNdnDD_;Q4OPV3ECbYh@sn~aK#$HXL zP)eE9o*p@n-cQ+wyY@sw562G~_-4gGoKA#DWJT;rRPjrpka#AFctGPLFUQd@NGfKk zlco++J(C}P{4h$AT+)XmQYLnd;*!FWwGvd#E6ov&xMCx9|8gl!F7@qV<iE+KnkAVk zN9v^NR>gvUB1)|OIBAId4$ys$M9}R~=uwvVt(sG1yxrPQg=$7z<HbU4hh7@)0s7SY zp=xZ=?<-TwuV?a>D4~+#Tz&~IIWFxQwW~x+5yb6ZF83MkO2`m~qLizE?`wExj9ZMP zh1?2F92N$4CCMqtI;AqDs-@CLZ9L^CMVW<dpIdYvK^S5Ka`XoD(pGWf?=m6ki|VUI zC`AN{LIOACY$bLDq`57Uo*j-wr@yk=je@cioQl@G+aUkQ{Mny1o*n)b-AJS9Ak?7I zAuOYf69M}^xi|sI*$0*{R3!|1L?sGLl1x%IL*tvKfcdjhF;bY(HvI<MblVR74*mHb z5I#_UkXJlZJWW$mY${|d6jTsY7#JHJ%Nv_Z{gf`mG0zD}hosM^uQz<r^U`Cf|5M*+ zAzQtpSEzeh-|85q$FEzUqp4?DBL&U`zn^OXw-jL)H7O-1m1fOZ^;BNe57iep5LfOl zAS{>HJJkD|SeX)9HT0GDoF=p-_&58<JPRSBM=WBLlIxKNxYfGi31|tdrHyBtium_k zCm*m|=}cfvEO2et<Bl-)+GMJy&q!MlS~a<aTz!j*ln)+ZOA%&EC+%MyY}=7@zi~0# z^qIcNOs`4rKKZj;amsUQa~iRdJ<6TUn5E0*HrX>Mv7x#<C4!or^wDm;EI?U88Dv!l zp=CE?kJkpzS2h%QmfV?~5enZ5yJl|-Zv%PPIM;NIM|nFN1{+3{dz`Y2!`3ANX<yA> zeO{*kMM3Xjtl%O+Vjz9k$9o??>W)|ufn|%^>ctbW=$s}oe6hG-aPV#ynA&>q_y?H! z4)SX}e%uBlOeJ7{ZW7UC&m^iR0F6E@B1}76B-Z(x4#^Zp$|ujM6$!U>$$yf`l56Q! z9LoF^ta6{2giF|LflIv2+|45WY?ivCvpShNvi9<1{A^6+JdXD5>rW?F5nGvCsN24T zzt{&2oxO9%yRXBF2#VQoSOk(q6}~C)C7z36G5sNket(JU`92oKyPLe*iiUlPXX@L6 zgaH$U(xnWOqR-Fc_|{L}bbVX}EW1si^u<3~70?w{(*?2!(!NqTa0&^uafJMg|KTED zLamrkZ*^$3XZdxc%p$D%rOz>{ft?}=amcRbN7*}FR+M`2!hH=rhIuB$YAXwE%Z{<g zVgBUOEatJ3(VF4qAG{f7*{>%!-8h>+>kGo=wOPq^_S(v9`Ky60-peT4`0tp*wGhgH zjo<5;9A=eEPqb6Y1KK|LDB6LHx`u<h>R{}SP&H9@!~Bm{=1&Zjb=Y;+>rDQIXOarz zM}9BITP94w4_sha@!BPga2oDNT}iAhF70hHpRk;^JlI=f&C<t6E=k!-!Ei)hT&hK1 z*Q!0ax&6G%o-)R;+!9hR(Uji-Y;3hC8X6xH6w&ytajo%BgXeU5wa#Sz-f`-b)VKAP z`*?O)zxD1}c&L3@6Gl^U)^gV3QTDOsPNY1t<lsK}(ZLX`<lu5L05=Wyj7W=7Ki~9s zmV8=BLoIHO`A8aLfU^B1^URYKod;brCZm6g)>+bf=im-`{f+`%VCieLZ`mf|4CPmH zD{^*Q@wCe{sdV+UM}1TMX5~@gsky^7pC{>MO3Vyypsu&vmBx_G(n0V{g4N|jbY@bf ze*oLV%9rK5dS8gy__{5o(^)f?`{wlL*C>c!tKhi7WuyCL_3|#RcB6J$g@Cccq5C25 zC1FN+pe3Uvt-Q&=uIbdLt<Kl-?tnClcYO7_&HIAjb#69`Uud=M%E#%h@9t)uU^T#% z{&{?)Wzm!V6x^!ZYJ4qvBDN^88Zj%P|FW`hwi0OD>6vpiwIY3o5Ee4=5`PniDe*2Y zHEtvvJ^Uz(Pne&7OT_j0;HgMr!hGUG7U4_Y%SbsP0eisx?9u%A)UT=Bl*^Qa4hO%2 z=fln;;)><|?tY5)Aulctqie0llP=E{Px7<;bxh?QKdL~6SL=tW8}-Se#{}YpgjaaD zUsq3NT&&Aby-8&zqoxP|_`C-If<gd*hgaz50RZ6f5db*+0ssj70ssh|ej4{l0RYx& zvXWvNUQ5Sqo~>ls-mkC1R+jZ=Cz{%Z)jKqV29+=o6zbxbx$xo@xpbni)G?vlY5|Nt ze#q_nb;(*6npJjvsjRBfH2C{?V&R+WI(`<H$~+`x;k4*`CkHv1*O@*&K0XF=xd~ro z6n$$sYftZ^NmaO9Jqt)77ySD1)2A?pW&73Uq)b6i*R!@eQ(Xf6diyR9LrYhF0Re%1 zdnd^K`A04;uD9<9`QHAJp&PWUQBY8F-Nn~-KA)s6EG+ce<I3s+H>}BVrkdOOq<PrQ z{TP8v>1{W&9nFEaH@ZUjVnZO_wRH{ZrSrO6+`aqz3{^U46L*dOIJB>3T2Aw{D!8~m zcK#hj+f|E<9as7}M3>I%K$EF-Rg?W39T^!}Z_b&zQt4u*FPv@Ma`Q9lF_uCoxgC<_ z>(i>onrT1MzqBkk{b0(W4^CXZ@I#~y))6@IaIf{$O(yp=)RtuorG(c45|sL6N!RI( zwUi%Oa;2&P2`U=PNp+I1RhF1j<eJ9E$Ajno4c0p>yAH%ruqF)`T&PuPDAVD9EOZ4@ zMl@m0rsdgpHzOzuwMt!9J?7(w%!w!{ESKvYRvr?vC+C-=uwX~3e`TfSc2vaqv?&Q^ zOEZQg{!Djlj-*`orZ>yaw_j^bg$8hPeO*~u855A7pPx8lF;`(c(c25(WDu)as-+6n zO8xb#v)+Mar27iU<Fuy0mOW7AFnz%7dwWbx5EZXf#7Gb&!$?d-w9yHIV<^B9{~=c} zXwKPK9;JpdakYPZ{JW!ra{Z3q=bE8d17+T$SgW*5zX1cl_+Cx!13mrFt}7Y_1}7I+ z2o~(ThwO(08AjOxH6-f&(^DzN+4F~|n~Fg4kghKu%M9$@kSHRtg3W0_5N|uV-OH$v z^2cifaP#iI@<8*S7Q^MU4oU#3bqbGGvA9afH2r&=NQ(iO^HL9Y3o?085>RaYnVlk; z3@R2<>k?YImJEFRT%vmrqK4diK={A_ce{3!r$<b4-IBFh=}+3<u0l?6SX;NQ1+E%$ zx_IJ=WCKHerd2;3bbC!X%oN@{B8oQyFw(_tmwEWVPM=_k_{|RX-ba0iBWq)eGLJc_ ze4lLU?@RyuH9E2O8|r?IDP1TXHJyVR4UDuL_Xbngw-;6za@KM+609_poxgR3d2j%O z0%CQx&*b~WB3R{G3SQ;ET!MELhE`RkOna>BdVgR3>Ea6VJoek~qDlS~28lc4_uA0m zOeHH$9DYoAyjAKot>PGPp&$^C)=~S{KaB9^Bn<>s3<>10ERk#>V%DtY(|tWPoKy~R z7}6+NEX}0rSZNC{-6lqGh!CTfLWsoM>V;_TWKW6acwFnzr74wNF>t(_Lg<Zr9Z@%` z60eAxw07TFy{OF#E-Zw#gw0l6-_9}K{&mK&*|G@d$SO$P_wOJig2ETLl)Wt-`=!Cc zEk7aQ(P4x{o*q|_>tGb5!*c741s}mWA^=P&CjBpp(Sy1$GK|XwiM#~EyT)y=AjGT< z@3rO_x!&xIL1*uh5WALYG=7(*-!TAKZV&LUDPblY?2Jo@?9eoyz`y8#+H;>onV;fR zAiCh%+JhQ0w#fJ1->nDc(*TN$Dv2JVip;LVkVb8*-YX*1L-M;F`T65(CNhxKa%8CI z{r(g&SW^te+c~G>_0eUyU0SY50*OPI`3dcR(X$HsB8&X3kq|!Ju)ydt>CEr({fmO5 z10v0hd=(mR-Q7j6IjK-R9IRgfa!}qSvJ$OnFE9+<ZK1#H9@)K-{q&ew;3*nF2TM)G z_}+#NR!2FwblV0VHm0!r({}rSa7F)`&#ZT&(dqK8*5mC%(wH<;Qc=_XVVBuJ;cq-a zfu*I>bHB5ZP7_88L%GPgC4=|>bE_!n8|QaZ5(LZPf&q$=vDQ{j;g@LP5m}M`?-$eK zvq09_t{hwm8^zCza!g*KojQMh=>A=IBf-YY$<LhaINy`Se!pL1R`%5tC^QSgQqlb0 z6Og&g?Cot;_iIg;rD$Zo4wvfzLPjcl`{G6OoUh>f7`N58Wq9G`7w53t1G~M+K?DsD zHvb5lqy6$JyVfwTR#8!wuqKl*ZNNrnxP#KqBG2-z#RH}KKK0(voE+G~kdGAFSyls^ zJBevhHZi4Q(%9lS3md&nW&S}8^><u_e*JzaCpRb!$*$ygn!^*`_fQzX{Wv*UoLXLc zA&$J41yYDuFW<VjExuXq`j+vYfEVgcj$WxyV6}#yH*0p_bRSKB)QkhLATWsZr!Inh zMA{r)a1c-+?Xv0PugtBqf;>D6JRECW0{<$!c{<J~srnQ{qp+6J&!^y|Cf{b~zO2Zh zj`&oKAx+y9{n8iiOa=cDmki&dn}5HXLjS{qq!Mnt+EUh8$6<S>;F_?I(9JK>V><SI zqmi1K%rcKH9V8}!FTHn4X!n<}yidh>MJ4!}=z8z?kk~xb42b0~N_fUDI(Kj7Ku&~3 zTp~iw8{v$NT}tnbKV^=b9GspukJX<9Ctiv%?t(@84AlM)fgA|7)L7yx&i3}l%C@_g z2|RYG_YrG~K%rG7IlX&5bu`!~>&t%0qzv8j(HG*JAx4q13tIRPt?2c^+w(jH!UWL3 zxKCIGVNpxF;3xl{F25Iq&`A=MdW(~@qoc=?@Cj7vuhR7#i1ScJLzCJWeaHA-e0a78 z7x#=$*zakK9OM`%?JH8@bXGLs`e#4L6w6WynbvWS)dvW6@d$!vq26yWMJw0_GOrFb zp1F8}p<M$1MW$SN+t#D@1Q}((=*d7_o86b2G)lBv_jR(nXD4Lp!cpu`|3i?Km|e^^ z9}@K(UP+R6tg>Qz-Kw^o(XYdelT0{+?7^SvFUaihQY$QJ8&jbt41U}<40%n8dO-G> zzNqR|;D#38ezRU~AK`c06A?jyr`AUd$^fIhe1Gl!NPoI`89xa*?@=<v|FN|j$<_s* zbR4<w!{F$(Z>!&Cn$_<mZ!=|)j*L@Lm~Bu5&^R;(3kjPiWKvH8b*|)MY9}x8QBmpV zNJioh@$(gT`n%Z?zb5WJ)`A0v$LFVx7QNRp>0)L6*egx&4Yu1N@qfr9>n<+#0=B<Q zZuWG%-ar|nPTP7U;H=X!EA22xQBQ%HQrWI7snl9r6_<cTGDnq3)Y~J}BEl5X>zfM@ zAg3o)$SBMkFO!)zsrk0p!M?yVm2H8qBH$v9OpzdSwICV3Zhf?i+Q%p?^y%v==%Dy$ zdhxiFD{_Z0JUm<&Jvwz{;w_PcWrI~LQ3ko^B@q+>_nz`$-SzWUzFx|AwsVUvC`?~~ z=Xn9j%t(w9O*E2!>(q1MFgs3h8Z}`Xq*U1RVKIM8qL316ni6!2>x~~2{KS>eo6E0_ zl0qW2S=?M_MWhCQq*|yJ7sK=Z-aXuZg)3atFT}{L4vKqc?~d~%c4uq!^JKFW>SHEl z$L*I~XNNkY*BAw+8(Hv8Ana#1ViIViHiNPGRkg+s#haeGDA!#EMtI=qL>g^TJ2H-` zCcj5^O3WPEY{W+(V85%ku0=sQ#81>7xU;pch`qFBSf^DH7B4ln&d1{R8>RbKJ65S= z$v-s6Oji(Ai!-Q0HX=)9Cd(oi{^RS;0l&oiT`3QP>!A#k%Fr*FxDZ3b()*iRBS%KX ztEtp@=2$%WKyZPVrjzHL2#%%s?C7pFG=AY%T04?pBK!HfZ12~s)xac%<c7BQGd)h8 zm{S(Ic)=TzkTb2AHf-_mZgD$}jqN7<Cq3d0qYvj$=iY(G_mNXQAK}4RMKg3ot%XVt z>gwT_$0>3w^s(g1o4*AraTh1e=)Rc-@6Ce^0CIN20-^w7o2&j<n5>k8y^brhTY6Mn z?bz7Z7f)%YiK~R69ZDHSO76@lbSNn}uSJrLRIA9LCzs6L#iC<&JP+$kzifjPR}v4S zm)PN1PnuF=GN-a4jM+CeUA>ZELB_9PpbmZ<#nC_qaDH($)6Ev%bS%`3Zv_IC>cqb- z@--@R__97q$aCN_R8MckwP;`E+4EA4$9!W~QfS-A72iCZ^?#;RC{oM5^6#)^`>&uf z2x$hYS%B*u7cYh_FRrHMJ1J|Eb0cS-6}c1DsYu;SeP9;n-@7?*aXtY*eOz!lv;?qW zTh&PPvsRR2E)8wNTn@vKO%E_|9NPGbF)HDi&I#$h!mG@GuM%}pWf=;*aoV#P!gw(~ z++TW@j(gEI4t!0pUw$EF++}m~eglxn=P0s~`XR`bldu5i6Nqhs@(I$8{%_Wyt$Q}@ zqSMLcEJjp@wBlzGryE&^9+28`=ewdMA${QlH%S99M0*TZ-V@vDsPB6bb}~AXDEk)@ zc>otknYc^7deuIP{^2pzL|BC9mUP<1asTY-(Q3furSI;!)1dH;mw%<;n(E>wJ5;RI zIIR!dk^}EI>GdMJ^yloiH68r(a`3!omuA$FV8qoj`ISuUDFf=f#8<vu{YK0E_A(=< z%B-YDv?y<5&Re&FByir1=gI%N!V^`wHg3LAH6(i;-;VCr8pw52*JwR2f%*Jw=(+xE zQ}8#)2GisXn%)P|yO%*SHbR?ghJvr3ehnGF+}dMy%+#foB`P2aldSr{La<ZSU~BUP z{G)9hcko^Z9)`;7XNCt#2`)<B+j7w^6k}|qvK>nb;0U_08}a%6MPZ`)0M9=D)y08k z%y$4&cb$wf@L|F~@LAO9jP!RRX4=T?8>_Igy4o+-hYv^@xB1>>br{7QKOD8AL)lnS z_?+=i&U;@)WSg)t<~9MxI#HF1ycJF(@ZVn1tvNiwn*Gjvql_G*jLyiS$byz{1<UbD zIOYtn5YEi^NWK<|2*S@=(Q%kYz3by>SDOd%1LPNN>AYaWJ4?phxUu(kZ_k~K$Ddp) zfI%Vh^5TyveBHuZu+$gfGw%|g@P!G5&5_>)w{HdBC`m7Xtby;d^Kkoj)MmltZ><g_ z9Y+17DaE_eG*vT^nKHDjq~x=RX;BM|2LNd#;f1zvijh6I1ZlSAI;%TEwsoHi!Gc6% z?iBEw#@CbEkztG|yySW{5cb)5=VWuX4Yz71i##M5g+Lf_<49N6O*Feg1kyL$gy|c@ z6|7m~#lP1;-TsS$+pDIV;ZCnqf;$qKUuUaxEYlsHqYfGn6hPSj!4t^m?PYzIE0MkL zXs5r+H!k9vWrfl9W-(bCYSD$vO1@p?{?4`ddPn3)Z%nWm;euPCm;j%TbEWjMm)f=u zIdo2Hg`2@s$=pH{r7;PXlSd4=D%%Q1gj%Z&MnHK%?zWxa$3I`X6-LM;IwM-l7Sbzz z^5;o6<mKbLmoAj6els?HGr7V|Heh0IzEdK2)_#PVq;@d$I@yxt`4ya(hu23imW7iX zgW>l*|M3rDKenFn#*Eq(zTl>+x?|Yzs0&I@OR*AWKAebx7-2Q&B-BL!s%mEvPM#(X zqnhTF_%P4bo&_<1*OT<W6Wcyq4ZmSXp3N0%(A4$vdwR#eqzSEX>56}nua-vZYtqz6 zf9zJPVd?**FvcGDu|kxHOVCl{1#v*Pwuwb?s(iOpb*b1;=9e;@o1k{bON;C@D^1u* z2qC<PHYeTA&u3q~*$6Sl61PuOOOtSTgG>Q7f4ze`10LJ+V(g=cr6PpwIj(E$Nv}RV z0|jXkOivmrs>c&hCuwsGFlw_eEJ~yDqJ!OSNi2%}Nx7!j#!a3TI=yFL0)hRdDlC*d z7API;eSCjWw9;TUU{yDlLXvCtW~J~u8TeC`PV~^wP-%eQ-74=uq3isM@9PJnUk9c% z=ST#T7&-jbp_M<T^NfD|=4&Qg2a|wiG>UP*XLf?sD3+yN>_v>~hzJOP5!%wQ_yth4 zao2X_Z9I>Ko1f1MY;`>ru+W`5H#8Q)L%#`7G?+S)P?4i4<v@1D;B=a}&7UzRrr zpofR~-#evRL2Jf|U~&mWilpNB%0Jo2AC1I4$io?0c8Q;C<0XAXhGJhTiLE!X`)pNa zP{12^0uk0J1eCvk)eZ}o!o1wv*8&?nZtibq4dBaq;OjGL3aWTc;udslk}iC6pd46h zz+nHp164Fhr{*l@`brz2Z7Fz;Hs5U>@t{PzY4MSzYLc$(w?QU<toB&Kp;1VJeN<?y zaQ<YmT^L|(w(5Ir?S1A&$kEw))pkOuHrVH#a|D0=8?RPgJv;^T<kWpg`|!>GQE>es zzb67i=(fUV?lM?`kP8%NTR=pH{WZA+B2}DHhzu14T2mRB*nA`O9^w_T+RUmXtI{QQ zpQ>)xD$8SqYbJ|r`Wi324E5Qq$67vMfceXAismYeo=K>CF-PN}5;PpuU<VH+EDT*m z{Kt@aqtoMaMdM?6i_!CUd(1b<n-iRj!zV5iTKh*CQ$3ZR;5(OsONZ7^0UQ;Ow96J1 zBmR%Weaxf7jK2JBX)u-1>KY<afam4;KmP~}f4|kqNxPUyXsh&QWyN)b6?Hktp~hvq zU;g#%$oMfq{+KUtvW=wplM(7WV$=~(XOXaXw5uagOtJq=vl{*Np+;dWRRP`9n&&tX zIXaZtD;&<?V9wI{S~vFx2M5@eDmUxIk+?i8pco`%n7;Ght6?bkp=P>V?{OAOPDztu z{0Lg}C~MeG+?)JWbr4dR_(v{&df!N{X<KTe3@ev5X!tM3ikxtCu5Hjk=k|?*|C7gr z07DWFxq$1=cIUR@ToM#;2EP`R1OLrH%A<e()?wiU0!Lp$5Z5ox$1^9MPh!QgQcg|P z>Qp`?{a{!x;%lc|uShRUV^-L=-c?WK6JMUx3U#0ScidJ1`$g}eH8&p<rqya|qwpCT zpWE*vY>%HdDBLulNZW+P<=1a;%zTWnPrtZuVM-cCf5afWe=ap+T$`!;9*lzI&fK?& z^rRQxS&_bwj?d%{TOsFt$&mUIlj|-#!o6=#`t6_-f_~z!;okX3A6FK*u^I8|w){Q? zNJ^AysNG;N_TjC3Sa`0|%29#=1scnkXRTKi3<SO+e_LV`EC1~0)cp>fgYtI&Ftgr% zkbYJds}eQouX>!I(oYG)kTLR*);j;7r|WA?M5tr(j0FXCS(%nX5YsmXNQyCJO4@s( z9&jmh3cPCxbpJAuMgOWhPg1UInTn!Un%`JUcG$=Gq}QdO3U*J;$FF-LQfelrKKWSp zL?%8kla_~a|C}{@{3qppbElUXg97NKY;3&VVZT@%X3rC)HcVy&^`0;L^LV*o%ic9~ zj?%y8|Cr^yeA3W%@U9qRZF)*s*cu$W)m@F$DlmIsX6?YVk%8%T!+Ens7a1$2w5O3N zzt6y_^AzY$>V0|<kpay>TSIB-5v1PXRnpF(u<T8e1B*5fm?o|!_0&semnc@A&wU?j z?R^99^jN4>YA3%?(}_!193r)Aa~Wk^1?iGDhsoALXntFtyQ$2<5Dwt@{qZEfF?BhK zB^P}8bp8zW(h{TWjk6#N6Fze_B<d1sTaUuo&w<&#y9*ba^e-m!wrnx<LzxBPLq9RY z#i@S(=Jd$$u~~vA%~rN013|Q0MrL}KA0gL^87N*Rg;BnO2={}d`$;0}?a$8=At7hF z9RY1l(<5&H0uu1s&6hh^e;%nG+;wg9bXtEI2Y<~-X}H<230vpXjCm&$r56xv>$otO zeuV||SAM3qT8L^q%f^E#KqKSQvpM`;7d*P^xqdTeSJAX5pU&gZyxO}9ZBu)^SzKSv zF<&dIV5E>-!@A`Q<1n54H6c_-CqxOLb%BGe>Fx@=KMLe94k#~~6*L1CNzitsOcH@4 z;{(2^>bq-wjE+VA&I##T0qI!ESJHWpY>KEpl)XWyitX`ca`o}`onUm#t6lC@K5K*U z{$q_W9&_K$Rjrj$sldY7on=rY6EE#V%DB?ovtGGGD>f(fiA}02N}RZw$z1t)uooCh z-f`OgcosNvm3`ORaRHnl(|bb;<!2>Ym|w{js!S=y8q6sbfdM5^1HCf}?^roMB7v}i zhySX=R#<L1vjLvuV8D9>s66Rf6xL&B?ij9i-r=jhckNrynJy*kSW#>+G>b%f6sa<F ze9JgdeftLokwWK_Ax;O9m$&0E24Ey>boSUpp1N*2NAG^53{(J!>ih`a@g4P^R--5m z0<}|Ak+(@<`qbuTl&Agr3v=xDFSs{N2cf=Qv<<TcNA{W8Lvxzs`}Hi~NwDVGfPCU3 zffuVPp)^wDt>Iyls@V`K5*R<AE;Q3RgkMP)Ip;U5(fZUxQ50^KU-9+j2z$rVo?5Z_ z_r14#J$!KGOdTbL4}}h{ZR?f}$uWWF<1k@2d*d*dU_5*K#lPRxRfWiU!a|Lidw_>r z$T=nW`ew*kM9MX8e#e(5%MHc`74wvw(r==7oPB4puo&R|dV6yAi;T48QfSqVsMhSS z{(B1pnZz?Sb|tBh%y@o66j-EI5~!Hhxb$|AIA>0E>>n7IClherZ}tMlCSGDky@gPV z=eD!6(`J2A&uxHQ#OEm!3b&<!KDE}?wv-avOoR+Ixx)vWr?g1oHms>(i3bX;6|ti) z<JotUK%QAC+rvL@_U1eNr{(1nS|zicc!=Ck?zxiL$za=8lapmjkw0B%+V&@A-}hfH z`DFf^ju0MPH7}l*)D7MPsN+I{@%Z)fVF~rkCr6)Kuahj@Si01=b=%#p2XO_Km*$}J zZMZ_doVS9NrhycRJRh*P5=HePCH|`mLBs$;#!mc!pBAOWij!0Ea9|V9a#u>KHr_>w zGKaYy{m5D;z)OSwNpC4|zw|dAJY7#&W9xh#1bN&$e}nl0jVlJZz%>I5^`ze2vDbd? z`uYx?m)!uB91^fVf6$m_5~RG5PUA?(MpCfn^h%{yE^l#=hBFr*ze$>O7T9+eGyHat zUP<k=9$T>c?x5C>5jwU%+!Umyg3nHkdbH@fbT;Z%LVsKus<fy6X%12i2%5W^c)G2% z3?a8lPuOX9efSr}Yc9Ytl4dZ-^QLVk1qOZE#*ep}*`Rkx>1WM%Yo127^j;3W?EK`D z-y8hE_?8UKol{qF+1Np)_?gptCFaRnJ3C3cwie(yk^;OBJOghT6~2YiozfF+lEP)% zvZJpPSjXUIZw>ug55ufI!Xh>y_nm40d9A>du|qk0(EE*QbCRNu$t1+2EzLjKURRLF z-YQjDa{L(G5T)y4b8~=<T==D%bc->7b$QHvgA`=O*Aa#Ty-fHmuY)JITjV>tL_aGY z><^`D=o8Qkco+h3F1+T)5h?C#atsb0YI5ZxQN<J)^&05XBKtX5GSa5Y>dep<IWU&y z@OcdaLud=QY2F+kM~pYqC5YX2-WiN9BI9@6S*#eobylR2P<^O%9n&WNMMu=rZQ-hk zc&*D({;g;cI_~7Iw4F^e2evQ6Q<6e+IxPM5>(}Y|dBTduQ`7`8s<jmknM&ATpSs(8 ze{Kr$9@uf(P6VG!BC&!c1OwY8f&WSq<iGBJmz%iMYPP;s^rTl36=jNi=<^=lh{VNA zhb%rnh+0qzt!vz{W$9-XQGddlzJ`DXT?|tW#9#D0eJp3y|MB49s%U}zLNNPcFccO- zO<W{nOY!4me;?GcP%O1QZZ%qTpS+z2tyug8YD0{3w!HQ~c(m!c?o0Z7eNaX1U>hv` z_zC&CT}4A#DF|Ezy!B>S9k!-TTMbD5Frfd>CbRL5ecS!kHE+jjo5OssI@$t8mKG~J zh5H6>qb98@n|nO%$>;cO;k4RH8EToLnG<azKjcEvrnlljq$vWowawhM%FhYNs&&&; z=n2}%B7yYBaPK{4{GWme`Du>lntwQ85xg7KBOn*&B>R(9Ue30I^NoyJ630u(8TTA$ zrV7P{b%vBF{qE%Cr0t>OoeB#mCMQWEHVn(Upm=W}#sghuL>DiW)H){QOH4wJ7F&fp zUBW8#UMCge5`ne#+-b5wJKB=c{6;(D;cZ7CL>^rvgkv3|Q}LtzZ6q7jOkpJzc2f57 zFz~vVOfStlB)jfg42iF3w!6piw9*KyjL>e#@gK+&#tCLg+1svv;V<-;(x_Zdo9@<f z%dnsk5krk4V{}+ii(MM6#O6Z?#gY-k&a6Tu<cAeYu`om4bpQJGmUYiP3CooH+-So? zbc?%GfiwzA2NJlo5?0C+&9y(S^?1Ze5y++CV)ZjV-pHfTe~zssJn@?hB7iN>@U!&! zH?3BTryuIys)2MN`$gnD-3p6OY6prWi5kgq1>uh7k$PQ=fj<p@g0RH%U@_NAiKB?S z-Nf}|2E^D+H|1cw%8!nhJ6@X&*iv+JI&BcY!c+vi-8Oxi(R`~Pw0LzEd~#A*vc+z( z0a$!5)RG8Os3s3e#1PkuYE)EAv7il7_>j-myr1_4lz#mCBGq_%=#7UgzmXNx0d$Bj zyA(8u^Kf|y5UB|Ztg``h&f0a70I#fh3tg=VSYFcXp637IX^e<jODZ}_T#l4lp~+w3 zn*}|g0j-tRN>SKO<(aEA7^xE~=@ZU6USG7?oo9yl%j|&s|MQSG)Y_XqRtx2zw{n}& zj029U(lqk3UEAab)^@FNj?;N>7E!F)7)3>)08skaxXCJ`nfe=af}!(Y`S2d8C{%K) ztP|uShSA#DchOQZk<sr7GIR?-p;&lzTXsog&w6f*IYM#JEA3HO&%dev-(M_#HMudA zALs(-Rq77C)0t9R29r35(3z^mz!z-J((38GSUu2V$!9i1Khdz6FQ`IeOVNXGp|K#~ z4<e|f89uTB%X(l^pYZjkyKR~l2@(`6xfmeX>Rm*3CyxIK(hQQ;38BxD`AgXNAQ^Jx zExM@lcG^Pmm8hm8{snpJU$q!Bi=bGu6S)kkL+JRs$b?b0X^kXvtF~^3q>KeAz77pU zKWf;4dirFU9U}HvD9*X%cj$g1?=pvpS0FjXstH$VAQorUQAJNSRZhwXhVRl5khuYm z5dUe|pfI27D(|bgNWf?y#IiYCk!F^29&En_oF(2&zg}P})h#SXLo}}~&V62m`<gh{ z%|wRm$5%4y%y-$99E{$R;ETX8WD2-mq?w_pplv=Q==4~;PdeX$I-35CT+`mW{+=r- z`Q(lNB?^D~Ud;~58)wJ#t1T42xy2!{*!;=l5=d2FR4F7bQ@7~E-x<LFMS}Z_x8ZH{ zQJ7<s-Px0LY@G8ynuh)o=fS9?A)_q=tM+tI(I-7doReqs=6M<g+XrtpXYORIUam~l z#HS|*a@^o;vCN9Z!p5|Z1XlGCA*eEp&*n7o`WtM#dT5gh+RzIMXxYT-mr`V^2}iUw z%g8lVn+MPR>7-p-lWw+RT|&ydO4Ar%%21dO4vxkDkwlQqprCeR$Oc<d)S8V5UA`Dr z_S?cGBuSXD){l@i(|rTl&%q&OMP<C&E&bh<$fA{`54ai|xK2m(t8E`pvU$WIe&YEq z8Sqv0YbqNoqC0e9JB^Ubhb=mNq&B|qll*u9eyW+dueGJ6c6YFzEp1&l|383CyRI-B zds}$M>|>LR4!tN()N&8dW<bUrE$3s`AS9s^Ta;xLSqTliw@zjNb27b^K1;^GZh^Xa z{ntKZoJ0k%#F^TILy#u!2pb1I4osRpj~ApE3BY~K_Y3gd!V)~fuTE~GiICv_-5mbS zs#&SsQs-i!3h&}J;2M^R%&vPY@ICptNP&%(jbeC072i+iC8i&0_^4qLp3r3r@hF%= zQiBOESLivMt4m|G+U$V|Jq<D7$nFdS+_tE;+vU{;@#(Q^F+}Cm3?*df9qGos#evJ{ zRq%hpA~U|)T+P@<lGkzSD`E2q;P88NRyhRD^v4Xew6qYW8P5J0<j8_5gGqZf#I>(t z-!q`A8020TQN~ZiL3Uzs^Kz~JTUZ`oT^G<`s8D&C*LR)fk&HQJvX~D9@|)%@Q=o<% zhdwNLy{pt|JRAIvUf%~nm3$jSIjp5?t20;5#>UwVovTi@Vnx_clF40cCB4Vpn^Qk~ z!s2ghYb()UdsWfVdWSXfu0F->Y3(n^mJAN_RDM1zbX0GGE4@9TTLmkPBwOwKsoRwR z&%O*)_WnV)Z4|r<O!=H=`86u|qmdP?O1+RFR701{6AI{mmJT^eJz#=9j{-uFHbAKJ z%+Q&JK6_$jZSHn^_GoU^o582qpXWTLn<x<I7G0Lu8zu?Pp)5!e@5k+3{ukY=8xM;J zAFMEMTjo9x92^5f29I)o)(tPVQ4NyzaiKGjkAR)b8arhqjGE~)b;%X!fu|rv3)k8> z$+%|eK-F;*i_8!_YfXS|7wv2(d))oTipJV&f8jjO=IVKJa7<LP*{rNq8}Y#UvA;i{ zWT`53SVjfHeMzxCdOycs`2_^`<L6IbJBxO`v^~9USe~N(?S;@2vJz2f(JM2}GVNXl zlZF)i$9^LUI9?-+uS$SGZ>Y_xDh>=v;WFHddtN~wAE`T>!s%OB<(cya^?`fH6A}4z zHx4rcbj=Ja*d5wpFLN;NGD~g%=(r5&eCKj%O>;B(SgD<-p2kLzkayj%O_uIy=U@tv z;NmDfd(b_NJ!UlxpfA*C{+L>iUtOa`BxvD#7bH24sugXpUZd}5UFXVldzR|#4o*&< zWj`b}LwD~Z5rREB)oZsx5~T0ry5Ucz^>jlD)fO(ei?cl9h$PX$Os-TE6QQ>_bHUZc zRM9myxCF-RkVY`D2N!AENl7t1E$JjbNTFc3O2^&_NI_2#$9@gr<}|d}a)ENoOuy$w zgYs1~;N?`DAE|zuFMeAB@o28>VX3#b_X<OU>4F()_3j7;j2|fA5o)x&8FqkC2=^+P zw4fz@5Tw%_rE%uNln^ncN2_Jt)N^IHVQs1uY<?zCN$y@*iFUepi~jgT5(xB&mJiC^ z&mf3vMunF=Arlb1>)3dh5Xn+1Qnl?;wO&M+<4}hl@431_(goM>yDStS;{B30yK8yV zUK;MJ%!h<^J|5uH`2;3eqbs^exo+xYzPc*R8HI>Ubs%lW&%?LNQNWZIrO+p=ANFU6 zU`Azf7+QBdr45~Fnwbvlco}w`4eRb(I-X#W3<0^m(hG&|gFnWNfFQNn1+nuUX!|&i z6A7<p=h%AD@9p1#m8Z)4<G(`FZH17Xy?#1pr8rm-ew7^GrhL7JI#e{1(6IV-`6L4B zP#%09^S>L-4bDzf;2QVWpg45<y~UxgQgEK1k;uWHBte6Kq=RjSUD}vQ8)PUjj}2mE z%n4YWEf1>fh0{p4=cdsnB6}5{xgjNV(E~#;+87uw*KXO523YVWI+ucL7qJfkZ3m)` z(0hi2QV@N%S*AQ_9_Dpwt7BKOQ=*gn>Y;L_!HKeF1UhG0fUchLZdK`kvCsjMa1u!$ z)octmE}E;J{W`RA)?Kxt6($*KQDnZNP0n>-kH|{uYJX6&;(r&5phh0jEAVfstDCDB zZ_;M*xJ3Iw#qpOsQj}z45jJ1VD+NrMxoc}p{`Oj~W~ok_&!<xD3Zp?s^Zz4M2`(?s zkR$&e{XglF;b5Nd&(A{Rxvs?ZlKYPH>h^}2E1pd1OOHCmx^>>Un2Mr=jc*5iY9Fza zy1M||W{oHPg~-_@URKSJ*P<Iqvdm)7zH*3L@x#Yr{j{IQ8amDW!=7Zc!9z_=*B;)H zMqGH<WFVmf2XWU46}y!N<>uy|A@dn9B{8Iopej=Heu5Hwk82f)mu$$<E!>$y*E$xW z@W9Yk*j2z`tyz`yT3nJ^-BEeVX}U<`Zt@7q6m7BRuzEG(6OMDm*=7IK^ON1{2S>U3 zcy(qvB3-Bqpv~l41daW@GShIQ{bQZh+k40o(;1I6y=wQ(10yG~V?)CQNhr=i?b0|* zwp}M<M;j?h{O@>mKzt?A7iE^OR#@<w>&A%()lx$ImdzziWpHefS+MhPb|B##W<7zt zbek=1pC+v5Hc1^cUrxQkAllA=4bf|>E;3uQ2!btg?lmoh?uE=ixNv>**Os6PKoP>{ z^2~-oe!u&3S|cp+N|V)QrvTgl2%q!2IQJXGsT>z{EKFd4o4v^EWCsXRBrsSEP(H$) zF<=#%EK&LSUI5W$nq0$5>Q9Q55?(f!X;CT;;?I*dX#OQ!nvh_n;T)#70vd*ml_;(B z>7G~J{2Wovb6@__3mt%<W43VHx@IDg>ZxC3+e5lQ9}vCN#Fu%=hVqBo1MJXGs*x{b z0t5fHJN-M`rd*Y|0i=RNf-IkiyNQya|C#ZE=H-ui{3^AP{$#4P&|1p9yruf?B@}BR z*(31va2E4K@ayqU)=;tZu6%?<CKG*i*tmw6Q>#Kxa;MQ-PO#shUIkWUjw&e59q0EW zFAnpB3cJFFW)uTHRrG>Qa4X2XFv9CDO~slmxKmYBO=ei{qCB#P?n!_b$A^4Yx0O%q z`hI?D+1GQl-ZM5XZrgj!^y#luO=;nta}DJ;$IF_)TkPAsgXrYrGA`zS(bB)jbfbV$ zP5a@2@C$H2Q9k_!HSA80PShX>_MQ|Ap?@b=o<(v`C%E%2&*BN#Ru)697d1cWwce`k z&3dlf8Edg}M;cTiC7${jm!FoFwu28K!{25xQ^>yVeZ25Kp|eEhFECAx&V7q%<9R!R zfw50;`EjU%A-4zlOp#?ZEWsXn`|B*v<&^{!+sL{nmpW%rSdp=bw?Cp?t3wGjNK8gY zsl@&rx|5j@v1r74eiR>c!GCpKOjj1;M&`A(oATNS20OT#o5NS}X||F2yJiOb{Zhq7 zLdW)wZR@vhAbHHd1GgiA7gi(reZcj#h9OMROyR!N3kktT<qr6=sH|wK?ASBdb}ZH& zNSB4f@uZIo2_~O#rp`0zM(RlI89S_SPiou7RoswlK|obstiv+e?Oh=AkIT%*B)L0j z=`(lbKFu%8RCQa*A28KbV9rj+L>a>>w6#PlP=Hvl^sAr*TlzoRF3kKZa<MsD0vtM| zRb0FvGud=WefF<~xXj67`CqW%V`Ilhj7IieN8-+lpNJ+R%YQOi#bG9NRymUf2&DQ^ zWy$<7Y`v;e6}wd1K##9%f|p^xz`eJax~v~Ox_ZqkYBFT?ViH34qBPNOOB%eHx_pHZ zL3km(e?q}d?#EybAq0>ToIh9rcwyFcx1IwCP2TO*d~SBnbhXP)A3QidehMRG9ihRF zJJac~nTfkQUG<%@n945}=n++qG;afcqRbMOQe=Lqbo-WuajvDer-t_{8cXMbZpiDW zq%S2%zpE7Qoavok1FYWXkU!W!D_lM$pklKpoEDJ0@Z#u;YT+L~YG<;Snvdg%^l>g` zba!^>I-hZsG{Jf`mh=BSj@o%SIdSIH^~gvRhx~j|Q<=$;%XtCWA4YAh!{}Eb07^i) zkTM&p7?Fy%8TVuW*}e7`<EXQSDv6`3)6Wb2>oD3bd#Nvdy|6E!k1EaBbFeKCpb{Mp zGDRC-tb~)X@#&IX`9m}F`!0UEIs52wfejnItEz+Tr>?)MEY#3`gHF1X(Ny}~X5x1& zok*6Ua_VXceH+T=P-v25jwI*pdu-ri6X<3duv2AnYbhy4J`?a6m+su>7n>R6;-|R$ zE9oz4sV)qXrPdMRzV@c>m1#2?@K}{*L8Yqe9=jur=Y<rEG-7JQioiSa$05u~&k&<4 z_|iCa7qB+Qz2#>BR#_+X!~mn!2l<xwou3N^EaD!&#SQABW|5EElg~5aMSXodqFYlJ zz4IPpsV-9|)j4w~#En*gAujOPNV=tVu=LAkbHhy8^PCV|wf^r#GB=K$L$@juaa&p_ zADEBuT;P7lc>FjvjHon=((1eaD_zMp0&SJ!J(b8zKb|)xf1K9Jc6;q!8Ab%1zP$8I z1fIHy7=yJ4nF*|t7reg=kMD=SDr|r=_;CZPB5^H!S_P-`31Mk)64_xKV}T!9QoOUH z$@O|LVlJ~jugqoR_OpCq=E%*iw3;*ceDx$bo_ZL3->$6ed6zX(Z~t&A1YI2|VGX68 zI3%-@$#k|o^6q2}lQqJJ_p1)X^-u2c+5j8mx*duVBa_gl_C;Eqm-5?&A-BrG;47LL zelwNEy@i*z^p(9XgK6UH>MKIQ3kqQFZ(!zM<8=8^rVSYi73+`jLIYdZ3c~{}N0OJ{ zG*3_6QeNCTIV4`!7|xzH<4k02=WK~gXw@(PBuqPsQQd*^gnCXNs_P;jQzc=ykgGcP z`LS82?7QSl_9qi#c9{0ACnll^<(<~cqzd46`pL=3ta89*Lc_Y--D(9Nf|hZJm2~DL z;f>!$`Yy4NaD80dZMjtfzLmH)Wb9mov}OBuOC_#@R~?O`H$p`QEmEt@apwbNLw*kn z{Rs7H8$uBnkzDbPwZ0R&E!?h}y6LbTF?jEhMS+}=)8){cFU_Tm#GbAYa0_j>wul8| z*WG6nuT~8qK(6z;&dgA;qOtF~_ZAz0e7c0Y;{6B#sP{M4l@HfA0njS3TQFg3P3XI; zZ;Puenq8oAypruqAw0+8tKfEhtY3B%yi%{Q*j%`6ctk{?SP>HNdBC4?_Ah4y>E_}h zW}*63WNe46ISNm=fQ;oVQ!!evAe@sV_+CiV&T8a*#XP~c0j;(a4H-QZ1j=MpS7R-1 zoXcoxscc*1Av%%n3?#LBy=O4`NX-RfV+D+BLf*fO*0*KjJ1<BQ<7;NXzCrHV^Kds% zkV89IZ7vMOw5zzf&_xDiSPG*ZhmK#Bp)Dbs8a^Opm<k#NkmFYqL9>Xt${qu2xV44f zz6;r~PP)HO+JZke`cgyYn!O`4QreC!tcW{4JwHD~ujwh<Z;p&#|Lr0ojbQPR{5+6S zyZ^A^*f3lweRr9==F!SGBP+|eg0Dv2!~xD1lh)O(g6B-8%gP)Z9*(ftcSHx{bCNV_ zSEpFj-)R76#aNbOGHv0gm1_rd6hH~d1O(^vT(nOo*Dh>RF!NGt={a4rd`Eq$G-b#g z4kO90b@t2h1?hRx<I?ePCRKH3IQ5l+^)kzTvBWwPLo*;~-qNydr#*=TYs1O+hDohk zV@CbzpG~^4`oqp6SjPX(KNXgaCw=A=5*owJIuB)E`S*O*;iFu)<Z(gP@ui+>`9{=g z<KndH8F-9w@iH!kBd)G;*orMsla-lJJP0e8)h}x)`xRqj-p*^5CZJAqLsQw(DO0=@ zHCy*A#(^F>3WGN0DtgkhQG}j8!>~)NQL^h0%)+>ff^PVE+(O|DaN5NI*3>Nqj3dx! z<?GP<*A&^J2|mp_QPYf$vJWg|UT`K3nPJZFO@i`?bx3_pU+FdzH=WqJt9ZX!3ki;T zKYhq3u_Yid0d+z~udXmml*{H>x7w^u5f9j3w%ErHa%BqC?gq9m%=&EWO37BcAe<RC z-3O&$(e$~eqic?S*p!ZABZ&$NuDU_xSJwB)wNi+iqP7Dw3z2B<7&-og6-Mu!<>7Cb zhAZ;@&LnH(o{^?zNVcT&l{Hvn>uzXGIsVcVhE3!lwL~_^M)@9EK;akaKMOnYVRWr@ z{K`?~!|~4i%>3Q6xNzVfH8yrjhYWT8^=;yMm{*KeSD58N!0X7ca)Yt0(K`c0B4lT4 z?0T!?Ns_O>Fgu2UMb3Mj6#!)z$MgZAbIb0?jJ~{(NqJ#<6Gloy(w(U&h&ObJ;~##C z@k>)R7Fnd^xL<g<9=A*z*8SIj48oXG3*R=m>|JiWqngW1AdKFFH5jX2f@Mam#11_b zq-c&<|ATlzq0kd<Xk4?mMu=~SWja#&#!EatS4m?p6+BVHEv=YaWgnriE``%}gcXa6 zV8mW6gM>ut&>y;y|G;6yT^-?9*BM1X<!t$RoTK}oWWXTcA!Yi&T~RL5Lf6WGKs4hj zTN`U`CY7C%W^{{VRM~t@k<Xz~<v%LF+FX^t7J`&WJz39T&1p3kBR_INHq3mt`(x12 z#?usd9*2CPli^I-zO9lGf(`XQpW`ql;2bOPyiyxdL{2ES3Q`>lHAO3feT-N|Pb4Ye z@#XNSv64ehda;J=@6*(#+>@oT;H@jdFAZVWqgsX8mhQSeXqwy(UG!NdCXVa3hj`Rh zOXDM1hMj)XjQO>r{$okM=!EzuL_BnC;mu>$b7CMx@r*(UGnb-kz%7q2%=HeBO2)>N zR!rHINOVmf@1?tO&fUg38-G^b#+tlb<M3qoIbK8jK7O@E7aWbC$07h2pp?f_*pdvf zwV>P!n2`8z>GY7{QXZe4o+1ob2>C1)qy(IRT26gtKAL>WmKug+%kJ}qHhmXtBRL}x z=?$3JT_uORw=SXA`(Qw29rGb*1Mh$eUR)1pL`p!E6SuvXHc$zx|7xE~^uZ&zQ=;V) zY=_cDi}l3kd?l~Jy(31qWB7|(ql|ir(A}K$L}Gdn#>k#k9p_mpu=`Xm9wKSwp6QHY z*A59KkLiv8mGU~hEbR354lXR{)D)KFT-0MQXR>XuBf;T8y0gbGh9;dYIiAO?gPw1J z!cK1}wYFd%X9-l|1AFsW{o_I&!Q{Sr;e|AkExV9JeM(Ss-G;XM|F5L8;A*SuwlG!* zQY2_`cPqu+U5Z1n;_mKViWj#4Ek%k4cPZ}f?(Xi~yx;u+8QJ5Ez1P`m&bgkm>kBpM zV@*NPzdxYyha~kb*Tb$dZmbu^UH;PBt!$oWx8lRm5DjW~Iz~Dkh`2g%)(M;S%-;># zm2{2B!0wv>g{mP0WcwHsSAx5vG~yuO3)i6Co&*oHTH1>vx}xm-o@!Ha(IvSuGeR)$ z-*1yl_~UQ2$v+pwFN_|Mh1uPc9d@sQU3|GqaQ@OYTMleL4-XfcJgg3gW<jy!fK2PQ zg%56p?cX8y;}Rb$0<nydS-Q72V2q-2J_QO!jDPxH;p~>~`Ws(h#$r7B3nP2;l?Rrr z;BmHUpVfu6X(#c!lya5M%V1}-`*H*ZN%IlP*y`S<{@()ze;6;;%;l&g!3M)UN8fo@ z_3GFVl)pCSq+Fyl0ph{G$ck}psAN2tawwq!`RpcTZCqgwGv-xTI^W^eWD%BH!o(Cx zCMH1zG_J{?-}`xecibZGy5kX<RAB*6;Mb+vhy5$el;AdTr^mk7b%Pd<(_ovr!;cZm ztiQfY!Mz3bh5lSOW8EtB0=A>+%WR85`q0abBOWi7nN{$Ho`d6IvEzN>UKF~%w=2-p z?{Oo7nJ&CMisz4^^Hf{d6&-KK-IJC2WquMoJ~#fX6PsGz(+9$DtRhh`KFrTOzpT=u zqX0!UVW&aZ@XKOU6QFQ~jR>)c;6Tch*B&6)FPm2Jkp7ne$W1Q#Tnpvp=)kZ&Gk2q@ z6L<0vq7#6Z#g5l+?U>u_vRuz*Q|?S$^xGVkniW!WO2a9P^iJvO%pIO%6%<P(P)08> zlA?^qM&m1t;TY&Q)Uh2_mlEKJd~ZA!+^@zUMWuj=z#E4xxEICb;7oDv#HquQn$}AP z&h#R7Qrft@$ByuReGv1QD}}~U4*wE08&~9zxx47@y>NYyr67P15AkonPxpH-9vGI? zaj;RBaW<rrY+5imo+Heaf!z1!%Jl*hM=cHy4y>#`Qx+M65gl9g00yVu_nc@fbCjV+ z9r_ZA;Hhfum0kyCix@x~+2PcO=lvXm+v(i5T4yP0nw<UB2Iu2B$Me;;=K^g^X#(g1 zrC@2k!5a@e85A%C)ERD>XE>~_t*LaJvXdat71^LM$=Jd!{&l$=EwFy$7U|lwi6lZk zruz_vWp9Gj!KSQ(U*xcS_Fvt{746+tNL*d@fX#g10fb_Y_r>nXTk&^DEeO4_nnt8H zbo-Igu2qe63?sg!uyb1sbNIcln7U|{XX+Jd(<V6&rws83xA@*G^k=&9R7%BnsUV{J zxC;w?8PR6?^5XFfQ#o+=i&LX6Q>l}?wy`l1SxyVIqRn>s?{Is?fTh~-Ln}FdAYP`B zyR@oux@yXZSsY^fdy4N_Q&GkzO&9<Lb0hioZUg2X)(QVGzjiuP-XUNk7kN6mu1Z2- z*|?$=fxsqs{cgtm<&3+F8?P67lsNbr5=q4YtV^wrNTJ8`j${IE2SY3q$>ISur{vtg zR5w3};qHAu#$}yLoTnR_lRsr_czy|PPJ2)d1f;XVEB+G~PYNe6mu$Ctx?c`am<LN) zf8570Qw(hY3lC<c*0}p!t8{jdw$90ma}jmnWLz*}V9}%^hGrAgHB!t*Bv4xmy(syP zP<#+~RQ|IFUU<Gc&%Nf!S1ay@Z)+1-ay^(x(Z*Ir<)ku{#zy>&(j_-GYIVjqei7vo zS7hGe?JFZP-=jv3Ktlr7{wSi&SmO*LnG#2RFs$n|Qo*RH0c})u(l8tD&FFr>gJ950 z)HSp`e^Fw7xwlHhhdky=>yX?kqNOvL4SJpHB5MEtP1K9yg20tGn7zBiIl*+WX&7$& zy3uC2zVdvv<vzvNrRlDpQ*H;$Z>9OC=(-60k5vE&yi>4CJZ^iu>2BYqe@6XNjRX7P zfuO2p=0J9%RxUc`=ZO=OUoCszXt*3=@>Y0QtPG<9giYD4{RF<E<Fc>v?*3K?B56q6 z$PVHMNA^444FL`I<aO2b^pWkL7cX6bk#Nr}3GWcT-ra@8la;n(kS*fVbKu14WL2Oq ztLN>U)i>)sc1m8|rH(WROAp2Fb@>W?L#m~hUv;dug>Td61TmC>55lnN)@3xJu+9`v z88`01{p~mVKRVPToHjxgN;K;E|3uR+SxBR~Hc1yH?)0yU#*^xIAn2IpW~bJuvq)UP zIH75Eufz)3uo@6rYW#Q#NqO{y<DsNWNH?l4#muYT&5LgL-8q=-Cq{;I{(S9t&8}@T z`KwX*sjk13-_sX+MQhC2o@1D3`PoaKQh}I0BR#wD_kWE<ey`%j_2vrwyFvOlqqY&v zu*ujO&FE0s3GkA^Di$8H^)_Stw}dER`7W;tc+tWdSM54|=mB19pZK2T`a8j<-<MKs zV)#*8>)nOQ1@zsBf_cVDXVK%q{<`%Iu&04J@iy1c&UNmH60)%eoeeFNn6=sORj>+Q z6y4XYs^JC-d<pJfo8ojV-8pmtwz5z64s!@Wg9jB_2v*78Vf;;ga$AnANX9~^(3~)P z^36Cd9uys-RB-w}-Idr)Wu{@K;$0vsz|oVl+Ap0@Gtfyd$^We0qCVwyHda+9z28Sy zzqLgry|gD+N!PsHIj-z5|Mu<Ml>2G{4qxmH#4B;mM*~1X^?O=o!K^Kf-Oz-7>VoKx zh<2jq0Y?`pPf<6I_GBXJ*tB`x|Jn+|-$Y(@d|{{;JFOSt*N(xPykp~ZB2SZK@n_5T zU=HJ+f`*<BEoTnircfui+Cn(elC(#w|9ms+fb#PAa^=L)Dg^r}%1F^)m$h*{<8qf~ zUip9dHghmT8h`3QQ>ebJgitf)VSNf`+aaYqtSOP9EBS(hJe=CTmq5{tBmIE-wCB$@ z^H)`8@q*veku?;n!(%U#AEJq2W8iwW9RgLx%d2!0QLFM(mAD{d)IoC~WQsn(bHth8 z@RLwyL1%B6^-?^|$=!0)r3lgZWeZORlkMQoNf_TEXpvg_jkVSlo;?C_Qc>2Pe=(h4 z9^QI7u6W)VeZCjj|2an|f5jG|GZCgvDdr|^K*B;*$B|n?(jzlPrs6Ee(VY^BMwE?U zd&0Xq)rSQg^2wZg0OkI`Zu%)1zn7pc#{uM)GseOWsYc=5n0;_AAGt5_4p1AE*r@sN zK-0yW4x)BQ^Z*MBNCoDFp6Ptgce|+T(k{YKxpx;`l4sW07#Mg%3SRs7FSnT7>tY~* zN~tpTntqJSfD0PZJx;ozzUa2%yY<ZxP0xGc2hq9vck8YZ@nNv0pcwo01`n_{$u3wR zlcf76Of1XVDoQyBj&9ie?^?HGc!iFJdc6Zh4Y<FljEY0dhf~jAHu^=@I?e|Yl+rMj z@tL)s!#9%8bFznyDC|nM^U}-G8XF9^lsl_TZ+a5-Q)ON4DTh;a5;apLWRmT*W}`|_ z0A4$_bMm;tPiU2LqLfaOI<;&JX4H6`QUzWM<yS%4+X5-XA|-eXUR*xN0u$wYw>o<0 zZOWNBI;m$~sbwjmD8WVWHcKM=&U!J7bBPmVerS#P&;WX;SChWsk;JNV+&vxMp|Ac% zz15@Z#(nU*9qjqohVGg`qc~e`cV|&>C7g)k1zuWQPEC${I-T<^$Ek08mBjGUrv3~6 z#QH|FuoKV41FGnb8KCIm`eP)R&HqpV704%Qy!~{W+kQNdAo3~x%t?X8#iEVZnn}4U zE|=hI%A7_Be?g}dv>{~M#L@2c9DHOIsn}^!U&;sb8dM>ao*<;rsOgg`RE<R?B>q;R zn}{OJEKy@QJ>=u+R>G|Rkt+U;0@8b83&-TcG7;7Mz50%Cr$z8U>sG9C%xNRi-y!zZ zFgDSs$iS9cvWr&e`ME%eJJncSP@yP^*1SJb4z+-*9p$TPrzcgv9CO!Xa+t2>VopwR zzfs_;=aY}GZdX|e)HA_WdKi=I!kG?4cuR)#hSVt*Z7fQTRp5GjS;Zn5XZv!$Gs)p3 zQ~SbTJh!M9!~?0d7n$lqXR(c_SqJW?a=+1a24X7v-n+ilG#e*e@6d^Oi>>eQqH7zt z&+ebKpSOFSFygg5^ZNddu>cTLP~%%7eUf)GMt%gG2Nn4-1}h9!s$SXRyfA8ZD2qR$ zNn3`N`mHppR2W(yG#Y?p4=1*Jbnq3XjQQ-`w)6>As{bkf1Ojn;Z$^|Iv&Zl!W8@Nz zZs;Qih_ItR(E-``ulkZTM0Gzj=i``@{3w}<`9L~7WV&$8cQ8+IY2Xq(9&^ROV6-5g zK*3yC#RZJ87u5%BX@TvSB`ld0WSGUo`ygSGwqNOwg5Ob}eOQ?(7@jm|;G`|EgoaLF zp{eA+Oyz>J^z?L{xaf2J&wQpzFK1Mpw#cYguT;jm#RarV3n>L2nfC$h;ts#eyT*pz zn}3Yk`64sTy?rt+9CgIzZ_k1%e8)?hc7oaLaYa~X)OG+uOl5<>S2#>Q+aM%DARjzD zDpP><GIy#u$y%+)Y1+N;Mdxu5We2!LvO@z_S75B!3`6{fjO@o?atA)@GJ@4hw1WxP zO`F`3b2Sv3<W|Dj&VrK^xl*T~ImS+PSlo`j?pZi>Q8|E#_|z%&Lh68vJLM=L-I$Gl zbW!aOimE)AdF&i&&I6ez`WszZiyd9FV8r~1niBNfulkSj>e8RFA9gf59UA%|=N!b1 zPmSkMSmOoxeyZ~*+Qsy1v^NmyT3YNTQbYh17IxS*2|Ao!SU;O>(ZP=bYu732Q-Z3$ zLP=4S-hy23&+#+}^0v}8O&^rN%VEKY1zxQluTQr;+NGL~pIUh_o7K{mlCG^tVFEsR z;a)g0`)`=sq4C_3gjHdau=rj30ldWW)3U_S9}G6sJMjV0L2S4GUzB)>Vtt(D!*Z4v zvo3go0+H7IV1I!7`o8Nqwz(VU;FQZz1JBfRUv|dNp~1J5?mAGbCvsphOlxORh2Pec zu*9_TE1*GMae>+d-GDL_CRq)qjj_M<i^dCKU1#^SFaxI$sOD4n6rl=|;{5PQNm|nv zG7GGNQv!pkFvD%?1Be}S7$oeM!~)tv+*v*IZxz3`U)@kO<Pz1lcmfAb%AhnUZx1Iv z9gY?*zPQs;{E_(fDA`REIv~iHD>vRdk5WrZ(u^(n-O0y+-i2*p5*QtqH9C06#8M7% zh{dI{ryE#6=1>la$)={2c#oRebiTOVdN^dJs0!N=^^O5+=QIpVCLkTal0(4&6NRxv z9r{p&%T`$l_SmRvt4Mp;^A$svS&d_L?Z33cFF*J`te~_uN;!f(vG3M1bwkdV<kD&G zH8&WPUUF2SeL-D!MkD9bYwQJj*T%8BH-<6Vl$7*NkPvsh(|J=eu(rL(akhkv7&@z8 zIIP>uz=W)k-0#KG|D-4)pZ$Dj@CTW47YhM)(e1nDE4-bXwtD$|@l2^kD<e&V@@%EL zDyimr?=)#Pf6(7OWrJrNzclA{-21P;dIpEu8G(exdw8l-&9t_Qyy7`lihN8Kew>=P z<SD|Z$+2)psx2s3$SH0+?uS%hEqSTRLG^keB3_~6#cF0E1s&cgT2}i+kC+(6pDtVZ zWdzQL-{eq#Q%pp`)RC)<eo_%MrU;6N>R&V>G^HqSF`Zm>(gAQ|p!r#wxKv{z4CB59 zjAe3fE3}HN!@d!Ey#oXG7X=aC=kr33L!m|_-Ah59q|V@-Kv;&$=*F-A^(YjEU^cj1 z-qGXTftG92R5tEPcge9Fq3G?8F})^D?xCUUE5iIf(~<=)l%1Z%t$e1pg0|DH*A&(y z%B1B-WZxj3F!T2peoz+7MH|d`ITXd?KL6*eX=a5`vr>7sbel1^#7O1?EXdnyh)#6# z2!<yU=$exEof6ad1U-o8!3$hQ=XUfd{l^N-6?5og*}XaUs2+A-9=)>1t+Fn<nyea! zbRRUL!R>q)mP05Yt-rL;)s+fl%A}r7;9>Y0MShV9qMyXWgN;JE>gNSzqlEs!-{^G) z&@D-E@ZBxgR=!F?t)!~c-R6g}lvU0qwC9_&u(M;W16?;%W1v2hyDb|$oBmd?dn$_Y z;(N9dBz|io77c3BcB97^VtARuAIHKt@((|IVp$jjYzX4=eJn~?j>c`kM1ajcJzbZx zs6q17U?j@v8yxBx?So@9%=X#9s<G1ubyu}0`f}us&vr2hGS$QTyd0TFQ2iToim)6< z?AO<!{(E@8_5N!?{qgQw|09QN(Z`t;et8BP!)(zAL(FoxBQYJZzX#gI53Kc=2=q}y zQmCTG*lpl3_d0R}KqSV3T4J3^ewc*#f>rrpT!AwLQXsYB0x6$R$y2#Bvo2Q!VS|60 zDbygu(NMReFJy>xRe|Cj;5vrm&SIW}e?tw!sp(aJx5(oy!A#fQju_T%;gmeOb}g$b zZA4-C*1B+q^g!8b6A?n=boT50Ts-fVd#Q0DsK8<yAv10D>Bl^*`o7Noc(5gwa(_7j zY2M|+-##He-}^Iz<hE&$sqUOaK)J`U7{wZI2^T!G!3VRnpyoR{Oo>qnOe2)R%S+Xz zrKN%VDFm?~ekq#~6bcHO`ecCJ7IJXh)E~?Dc(_=~udr6Z`w<;0_pj`+(1BZ_g8`Mi zNkBiGvy1P?)0$*itS4t?YhzS7OoYvSt{Hv&T4@m8w)(cB(m46)Ze@fyYBXrWCGd=W z+R*wRoQ#ZTD7@&Ta|piRnKRkFU_3O<y6?l0qf_|$Gz5$SyJp;;|0$Z#aw;H$dn@>G zx80E^X8l=+X`RPI2g`%^7WR;bNavhNl<GCzugkjh*{Tfq>~eK@puZwRAl>W*jqBsH zVU&Q%kL;K0{r#TDve|gQ(%)2ASTmBNb`__BHl{Z7_jiO7)waA@eKF1~j|)f55<mH^ z3mo45Kpgq<5lk1NC-opQj8Y_L*B`LM|1@)}Qp{4Oo8Doo#o4RuK$9Y$yMVM@Kahs< z5P;dI%z_<P`}c`eWSoR@KV|$=_VQ0{df=pQP<=(kxsFp{fts#Ef@=joU(#@`k*5?- zTS0oifcA$z|IYn9q6?R6HfDdG%xP7Mkr?kosFxKDbx^y|Yg!Z8wRiN_;_k;bTkbIt zDc^0Qqq1NgNV*d7VH)5otu~;E;v~e7Y5d#o`@HD?P0PtK<F#!6z+_{zQ34k*p#SA+ z4E8jMvSaNUs%9>!WAwc{H=S;dt+iYRXauR11fS2k`m}i?ZQvWJRZwOPPA#qtF7!N9 zM-s~{&G@A~yF_GM4t=aUbkI<W0pjI&pUjo>s3<GVrZU*Ks;VgesxxF&QO<VKay$n5 zX;VoxzX2Y&y1v%#?gZ*V(--rU=oKx0PCp5hp$Pys4EA;UqY*mwrzhXDAxqaaAjJ(u z>^?F7^W=F#Tt3X(UE!ktY<vBcDlLX5M8vmSI?uJovek;LR_?^U(Yrk>&fQLlks6N* zbKT@pT+)?>tlQFgj*01rT7<VN^F!v4i)kp#>hQ$a#)7awlXJ8#3{FPJYiN7_Q9@Bl zT_gHmSu6&e7$aA;^Xrp<Pjd@$>bhYh-p$sCiyN|J9NB8?Sg&zc&;bVP_9ZV4OL<p< z)Lo2~X#}omgr)PDSF#8#*e7$G>f#s>TH*`ZAvh;LX}Py*Sr?A5FWWnbjg?54o}X{{ z>&qHO{`E+UDWTD^<5>6&McgxC-3&VaY4cS;A{*QXvCksESoHJ~30DjLSUSJO`x(?J z!0s4APM#%~q)1J#&8V;x-4zv5>bV#H`7jl)t~l`nPF{aLo#5ML?rO97Z~{3X)wiT% zR%%R*^U5cvuZTogGF|C9-JG9PK<~uGfcZHF*q8e41Y&aHRN>Vm5Y%C?(cYQ?aqDz( zb){}r_5|O<_FFTv7X5bExtp1p$$N*RKzJ1rdUvnY@q584UnGtMTTljtXcrL9MCw(s zLlgF-Bn3F8*xMQ<n%ot-GJ1s{MRYR6p@1_}f!cx^oZ(%XQUG1v^~S#!=eSu5yjgtV zEa5<czqCMXZ9|tqd|w}*R{4Tz{SPoIyLPWmV-aWL`zFuCbGLwP%rlF#Hh;X(NIU_L zXw8f#6>Gt){spM0;`HI7wx-o+BSABEe;7YF9=kq3H+Ay|d+3=2c(uh{AXZ72i`FG^ zu($F7`nd6;{ck5G{~&qzuJwK7>=0;zu?g<iXd8HPW5W&c7GTLw22jvz4hhyeVr0!b z=9m7d!7UWu3!lqW<PX&shux6P@-O&|u1Sm6#!^p?#=eLwcz0ClsMp|eDl|M(bmZ0p zT1cwFad$aO-+sc7R&h7d`M#}cU8Ud-HO`#bjQ>c-kZ8q_jP3S%``#!v5WL_SoA2K$ z_$gj@4kMRV=0;0PDNEG3oJfb*?sGvHxn@%bU-o-OMvRm&@1$)k?BdAnWW5{t<s9>3 z^J7%CukYId6c83vkqbUSzvOyFJO*<n#fTA!9eUv9Lt^iCPyVQ+(0Kb4KpET40ZVzO zdC~51s$5S5I(pyQI|9@v&%pCHQG%Ig{+F~gzjxV`g}jaRW)>MQXBll!0)6#eyLSbc zU$+$#2{5;jXu);_plA8{U<K+WOfcQRr&i1k>p%ZoUEA=9jRa?8?A0PAs7=jIUZ!-1 zcln-w3>hn$_H&H;xU+&H;40IUXG-$fnx&B@I2ky9`*+p`O6tQs9GwiyaI81w;cAz~ zMkJh184nFNhAYoZtYi*~fRf?recdtr?te#++7xvA*Zbi78E!P{kiNDx_p^lUxKs%a zNUi5x?Pc*O7Pbz~4b<C7&;|6NE7(RfIPV2`b}LnP#|L##oLsEgIYhQ{^z!)?PBw!3 zB$dmxY?mshLFaO`z;~xw{kIJScG>IcLHlp{IsMsuohc-?a)S#YMDjM}PX71|yF<|V zJX5*nFuD?5XC`1U4RuR&Kf}YURB^Z~|1&94pZ#*+$@h;&5<ftKq>leBG`CHETC>>d z!iJm7FzlZgjH7PewhPTB&YBx4m`5+z9`)fxCODpDsvR1eizQLp=k2Ss+4}qlV~jmf zn(4*-&I#K4^6D(GpHpqaOj`sh=iZ&SE>BQHRQvI+da<+(F%H^m@WBkzbShc_3b;fx zRk&V9?xmwXvdGtP3NdCnD~5I69zEo&&vfd`fD{`)#A(pt&p2J5h@+e#op`-0(BK=r z6q5s-h>JAiTuZt3!EMxU9~UNe&YPn9N+3D6YE)$pAcO!<<hWQR0;lIqJYN5``k?Uu zEU$f&wf0z&)E@N8%@Jpp_fD$ger9e5YRUlgXi{$7D1@anJV>mxq_Q|*vb;{%_AWVl zd_T*l&#L?$#`8S%BR=-`a<*_bYIMbBbM(~y#YB=$gU;F%b6ska&&gV4lKDSpR{7hn zvhdQV!lAUGKPe10Ag+SybP0laE@UX;<TQ|Zn9#P+(uNdVI<~o>mX!m+P^n>Bve{_B zKm06;t>q?!^U-J2f$st-%)bp~*lW#BKWKgjuPbQm7cw`OhgA-VncFBh&Y<(0?ccfo zPp6?HGCb$3XXN8`K}hH63Un)%^2uPZeL{d8)z=_c^s^-mu}-a3L`8RM<xnzsL>*xU z4le<XKMV2|xO^(l+>c6>bukRD0#z_fYf$>EETjK5bFo=2NPFA2^P7yMEs1U&33V-4 zf2+XUnh(cRQ2l93e^u7%kKBGt)v1E-okd2YSZZH?Um8C#U8gU<h$#Hwy4miH$V>G` zV~sh6B-1ov9|k}BU-y;#p5d%l`^z+?PfYtq{RRLWl5*cJC#B0+F>P8%C49^Gv<p;A zq&|LOsmdrW6^!q5g#GnUT8Wf}mK?)n%D5uMI%j;pUF>1P5}JEC-fMzmJ=Q+Jxbu>0 zUjG_dVW^G8t8tvh#Sq|!M}RNBLKpVXe^B>ZY9&H=V?0mdc39ye>-@voe7^mA5JYsf zT<Ps28y#AY{t>JerdE%C7qLiD9^LEw^b63e4}G+%+js2ZiHyAgq#o_;>;Lhm-iF5; z-UBY7RSjfd4eZ*tyP&XhL^cU}e<09r+A(ecVIO?U86{Qr5l?L<>B<wz(cv~#$4)NY z-HRlKb>HPswU5KMyc;<G;MYG`saLbN4KvCZ2!SEAAEp7ozg19{>A`Ml%(aE>29n05 z!haMLD+*EwCPIcs&h4Ax+@$uI@-a@z<&Ox?0+^D#MfEbx+*t+C`7runyAC5{u%R1I z_sox9x?)czy?LfStZ;ki2ny(<3SM$nu1ha`3Ml52PVc>a-@9D2aXWc4!oEB9z@vCr zFyuH7!+cMge&Q*lSni&3qYK<g=Lqy$@4gmP8^j3)rGEq2u*DrW#l*z_(g?C&RN^Qn zKi8yZs$`(-r%?R70I%;ot4XF@q=r$a!#u`(iuzzDa&cnChs#Fz&1F(4@Q&|y7R1z< zY<PQ%jOqr5#2~L|G!U*`e!&i+3zev0c`&)<UtF*Q$8E&p*Rb~=njC>zr6hWV*UJmW z&L>XI(qQk6*^!REN%2QPW9;#?@y#z0(0#tLp6}n>CPu`4^RpF)G(`aJ;gL1fW5{N1 zntlC*k%6Y-+||zxp+IvwtSb+d7^@G9ghW`nU8koy6Q74Z2&`u>f3;|b8u2Px-4Qr$ z4lN|e!__k<zN7k?2ZI@<eR?wK7QR%*ALHq;3Y+fOk~;ZtPKVX->G=t~u?<DH!+ZCJ ze7eehl41Jv_E0WgWrwXbH=&hHPr^K$nB(yFp+}oW%!Xw*kd5l49RzRMy;$tbT5AO9 z&r1fw$M)`m)pwY8e~`c!38JYG(x8dcv;8Ak0w(6iu+is8%MUKh@TP!Llx*jcl#BG5 zt&3<_!f=R*gvKr&=<Ch7W}owMab9iIdrEPIwob4@Mv1unMyku;d)10HG5n*hbICCA z@bt%yMvW+9u6>z|+v3k?{ra(yO}~;-qRGCl9~26ZX<=D3wtdw3((k($2ou=D$07T_ z_j$lE=l0pY^_bhZ{-6})nSSs98HJrx6;3F0)Wv`32ux{NoD1h0q{q{lq7uuzI#LVs z!R!QK-qRoq$3=`}2)4D8?u=KzHsDM4DG3XM8<bOf?H`9mX6|NkB1u+Zk;k>d)s~fL zWK{dhlmr<}a3S%{&&ulIlZyXQO^VubnoZQLYwqjGN~^MX85J7XZxSdX$~-GEWCX;! zw<(B9x1Yp5aK!S6x2{LpmI<qqx|309^X{_lSsXjgIOuE1n0UU!**NlEvF%XdEw3^S z2b1-o@6%$R9v4q9$siNC?STeT1IG`GW{$!b?s9dy{Jr5XaxJ|(Dxf947g#kjYf?AI z=45cM@H(kGuSC!^6JtD#gosTdSZFG=MmgJvoVSq5a?CTmI0+K(uV<D|L3xfR%_mS& z<<i>#Amm&<4$e5}@3Jjq{rS`Kl^MtfeNy2Y&CuSz$hM;WNvIBFKZv*xA7~OVUyW(< z6SBBj%IBYXAiuqKu;-zIdTz?Wzjj{m7><!Ohyn1GS#1};Utic95zK~^g}M)&o)xoL z9ZR~E8+i=bc29OM8z{80Wg)vNk4fjwJ;mghf9B+@&G%(4h=C9E^s_suv#-bsVEm0y zg%_FFOPnb5&DP^*GzTgZ;sdHU-H))bzEL-Kw=LhbYJ7=$X4H9CZ>M#Kr~+UWO$nSJ zlS=@9T}1O09<z%{0&2dv4%V?{=Ug<~+lZ#N;p3bJhc0M{^X)MTEQ6fW56?z3A`a>v zGU2>hc|jV+$K>1BQ{+r<4Q99K(S?03Lng|4dqu(H=|hioX1MU|tjQAzY><lY)lB#m z2`dtbFy?Z*CeXJyY^Psd*M1&zzwz(izk-`BD0i8FfB+IlBJws<a@^jRo$2!^)y`J& zgA}$Tn%)g=<7iCjrnd(5%;*-?Ft4+}ii8!^5qTD;+-iPzz*|51+f;^^!w;>$zT4^; zm(s<J+Rh{ld(HPxjn7K`ZE7^@Q~YeH)~lf}ch)hq0h_A5?8W3O`avS5W4n_Prppj- zdO2LohKD^F`<9EWP+O_t12APbL=em=829GI-wq4kd5dLN-}UQV*u?inaiZJA`C57< z{0-Y!Ox5$#{q`5I5bM4-=vZ&;W-qb-qgDB(AlnbVF;DElo$Oh&D|IBMl!ka^C1@;* z{G0vFzyZs5PYFO`>U6Tq*X8O<!Fc}&3{2Ph#8I<LK}X#&nBnTbEv#Q2iN&L6uz4}- zV<2JR208`lcrVQj;cuRtC4FBqy0z_=Zra<|)+%R?ZwZ-*Nt%BJkg^0agvnyg4ST6k zdsR>=A{i;4#W>vXG(3zpsL~=U%)Lvv+2tyv(>|MZ5hU&ce;OgY(OuyofZquOUML&N zVOm~U$~XVDy%JOIm({tXvhb?eDq$k*nlazm4_BWNH18zhuY1fJoRgK!v$gBnKK-G4 z33}{3rYEPc+p6|XiLzfVJZnA?YRqLJVxvq_+(ddyR53tCNU=%D)H9mO3y*_1)s0K^ zZhN`jZ2gd3nE?#@o>AC9g_||0EN=hN`m+08)2cS6s$<{K{lJe837A_l@y$Awh^%yI z(yi(2g+;ogx%|cg-}UmcUK6gpev#0fpubkh>KTcpBL-4AeKcOrv(Oj(u+bj|Th<^0 zdK1UwhKdZiS{Zrmuf*q-)^Z81B@2`Cn*243D)y}hd5&=^DjnDTvqz=h3ybC*KJfp! zZT0?<y=cd%AS+11Ns}^CWj{2F(sF-p3{@1|>g%?Vgl!n~L;-(iZ6Cyf>Li8gx26g= z<{L!<)4_T<>cIqJ1dCeKBjC(i3_A7VPzmUk>s{iq6?Q&ZsQUGRiI69YYVvAV-7slV zsx^UK&&>ViJV!m1n_MBi4NG7&wnS8Cew)|WV(8AQDXZW(VcLf0{Q1vr?w@&J!r#`I z38{`Kb_J`SkOLDLvuO1%rfzO_LS0_rrjst|5X51Ru1s-6Q>5;fjPkTEwUkn0#U}mt zuaUpo+eMmhs)yU1*2l6t+@FKt*>v=n@9ZMS>@aHQH_T#Sj)p8%ti$Z>OP%w>i!!O) z?3N2bl~vChhETedjEW_GoOy&{Hf=Ns1p@y>G9yi`7QmQmRqM00`i<?2-yXSl2R|K8 zD0a4+4B*caZ4k6WQYla~Iz2de_^EdEFJ*zMY!LpR@z{BKtky4&p`hizT0C?mRiVa* zt$dc5)%>>Q;8fdz{Ny~X($nU>tKs#9Cg*L1_zJ!IUPsx%co;G_LN_YQTf2gl?i9JR zak78fu*i#oN|w5KIp<aT8^U)a!lLaOqVkd3yu2QbJ$W5$g$+{VPX1})#kJJ-=ynvv z4Drvd5d&QGPRdHC7=W6>c4S3aIZMlZZ6qY5z_!ZDb4~eTq|rJ%9g6he*@b_QTFQvW zAK+9L9W74-Vv6<-52uTY*Y@{Faqj27^RxB$6$PPq_XL>@{mr!+XR`j1X$}80=+is= zQQ({+a?XumiOWAF&d|HC!wWsbi*Bj)iipb|qPCob6x1Y(+$L4LHds?j1vogvQjB#r z(|XDP1j2<Bk)c{`>xIxSS$F|4>@<Fg07R|Iw_>VYnJ~--S%&C++mqP;;0rMWd~K5R zgyZhRa?9<zkvuCG-Tv_KY>kfd758VE;MN;Z7jknDq&-eJdLj~b+Ay-k;?C9C<L7L# zL+u=WIiA6hEJK1C5CQhf<0p%&FYy-;E6z(DaQQLxz{<Hc|MU0o$Kqb~>9PE<B^lR7 z!vYnFO{uySu0%~0qJ?^~q;2?2z(TV|m|CsX0Cgr0Ol8%<`ud2Lq``Q%x`y|7HJiMz z^qh5-ssF82OVBcUI1-uSscz1cNqJ`k`mb^3yETJ5bd`Z!*baPtHwSuwjgISCNJG0^ zX$Y`FVe0CzMHp$hxX^A2svZyNv~@~lz%GHQt-k)1!oW$LOrH6(tzhxxH#!E{W@2=` z@RpDQ2ml+bh9D+-fg0REIDY#zNDCHvn>y5wb19#4gAzxVVl-S&*y6XqQX3;EL`n;z z4)_owdEny7Z%u#ycVSNUi`)ndvK%PI3)}a9{5?J|*D<`b8W*XtGM%sT6yfO(3PtZ* z--#SwPO2s+8~i=*&+zZlhL723(f+AOid%9MDG1uYAdW(f9JjWCZza)ngRIpaC^8{a zncotk5p!6TY4><{6h2s7@ihxHD{FkMm@QEpQ%qvREpEAmnD;Q`;#<9ti(1EG{(=in z1}bpRW1A>s$$#D7+;Xm+i{~xOOsaFB-o)9Ol=UD>1`1@X)L1xO?A1v~ylc_p#pfzN z{0|ijfk~+O4tX6J!sUy{6U;d#1+C8Cw*(&tn3%a-xr;ES<*sWoJAlaKnz_4bllkeA zUV9ltK!-u0yU5Z^>Nhm}hbpzxxC+<}#9@d=Od(eMrJpui3DeUv^NRiuE!Pj?U!4f} z1-TRexo4BNYT@L_e^UCXERDt!rHNBcoUo#+qa5)T{pep*WKdclIp=kPAyA-p0!I3B zqoW6WPEiaHCXFV!@mv4#KTbQd<c<?wLbo@Siv@CW*L^F}+}(Xgk$$N^hc=_oJ>BC= zw0gmmrfu+T*e=(pdaFQGQiisi_-EIA{$3~dOb<FKPeBQ7W{H+0sBeW3BFY3elZQT) zT04M$tzlyhtU^GFC(hGgz>cp|E(lbR-I_9Xv<@?!CFZ7EW)od7I-)m*joKDvAgwH# zI&{1(oHnu<x9I5bxjp(r_2&<7z5SNMe?S}v=70O(sTGH>=Aj)!{`A1sab497JZ{G0 z81V9MyFa(X*XF3up@1I=pfKoxl^T~FyQ&I~p-{E5Xyy1~_(?`NG0_>ic}bKr?{pHA zar+|+!;|O!((Bo@1G;qnY*wlAFY(jQm-K)as!3(UaCl=SZDUK}<I<%0bciX!`w)i` zAbheq+l7DuI}a5j&-?d})Jf}QsqzB(=DR}Uw#DeD&{clZxm+1LEGnDJnWx;>s50%| z3?3Wn{*shr^dH?#tGn`q0Vn5Ow8~4V<-8~&FBOYKG&4zEl^=uyMN+70(m&wFX%|)H zQ`4B{XCpwDT9!g?PWMAD5=SfjGAxdf+17$YcpoSR{l0=_A%k{_PU`GSS8&aHJg`=> zc3&J&iw<8C?GW3lM|++^@1yAwECV}A%?_ss5HkRb51GYbpriTOY6`y9U0z<c2-GYx zEIVs3<jTlevr0kN&dwY@kP)lM_x|5uLk@u{*WlXZZGkWMwB*Q$zbV&iI9)h6xW0RQ z`*J^HljT-Ex47%=fia<?gDo;R$cybP{$TYLmP@l>OFQH5SlA`~6s<8|{t30UfY?%8 zQuS6(ek_YQ!EoL#^6x(r#;DOUf8!u$icMO`+m3mG<0`G-m*<lXbDRz;OHHL6e>Ko1 zgOtH+F@i8OPq9|{^SWe*N;Qc}@s$*DNR5#RFUtcMNd-L9pP%<E#g1OZdU$i=AXTnp zC}@OPhJuBlPzY<OF;3%uF9N~2FrL=s3ivSt-eDV)KHNkDHDQh8_pQ%47mfX|-i!&2 zS8J!sxx9iLF1_h<X~KVR8He4GfI0iMGKM+K#)Vp$?1(fTQ9%<yrGA3DN%tjm==m%N z$V_-qq)f_7%8B*c(C~t@b?!h2O89qS2H_1!l;`5$v6`Gzbu9s@fgjU9h-0VVSlk}2 zv35fFy(=jhgJo17XW-KOzS8Zt;H30R-UtkbjT%|N@Zd@Gn3(bd`kH-w?mTtpRG?7g ze@C;W4d*L$rL0mrEm3im#>V@9|10N&CS(&rX&4LmOIRo&<QIbH`@jI<g~dqh_y*+V zHGb~TRWzx}Muuo1N?+PV(ua5FbmVX4#})Fp>=R%zlu}Z|E`>ONqH>~Eu{X!O0VG(+ z1s>K3)h1@A2&c-KV>;5y;y`RQgac7)76kDnajQW)P2+OSgI6pR@o@#-kA<+RGOEbQ zm{$6~%KXd49^?-b(f?Z0z?Dm~UJy8!#*`8Yf6W#`1Wy^xISUTg7pWcIIQLgeZ;2Dz z#rJxcs}--_`uL9*;2Q~Y@N@Ug%-|F<R{ifK1-uJ?*@iFpDfSgp`~|Hbpx)UEV67W> z>@9>L{Bj{`WMpKydfm*{elvBJE#Ps}P}k599~;-lm?D1;#UZpr@4DF0rYU&UEion& zN-|7<#(eyU$t&QJOSXJ9Pma*!@}2TyL&-(;0KqswJ@TE%1JW?@Z6p*LQQHeQXll+1 zffNNl78B0Mb_J3>PnFG|`gbuy5sIgMnCO(+4j2DTS~}a8G-zhXq^VP5G1~L6u%N-8 z0Up@B{t_A*y8XF7<Ho-unGNT{KNqTv3XLmD{69G!oD#SHEL$Krel4wm8DlnWT@7*_ zHBbBOd_n;IT^Cy#%i(jRQmJ-7T~T4#FSV)@jS>Ud#ia55a59ABQ1XKx{U#Y^{MpPn z(NOfl+@4ZaVlYZ|u-YJ$6I&}wttN)qQ&d#=w4&C8&k!QJi4Y`e+fh?_-Z<ye3@R^) zyITVZ?#+ZJ$I%q%jo=r$Jo*WxD9*H~6=%}0WGm8!;i$#O$Dh}c_&Sb6;%Z`Q%$I{S zNmA5sQNnF}eOr#b4Iu%eghweTk&+=9`snNT3E~@BKHUG6J6@HCcO;l;=Z`xStzhU^ QhhSjjq?9Eq#J`37AMgo!6951J diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js deleted file mode 100755 index 0bbeed95..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js +++ /dev/null @@ -1,207 +0,0 @@ -// Load modules - -var Http = require('http'); -var NodeUtil = require('util'); -var Hoek = require('hoek'); - - -// Declare internals - -var internals = {}; - - -exports = module.exports = internals.Boom = function (/* (new Error) or (code, message) */) { - - var self = this; - - Hoek.assert(this.constructor === internals.Boom, 'Error must be instantiated using new'); - - Error.call(this); - this.isBoom = true; - - this.response = { - code: 0, - payload: {}, - headers: {} - // type: 'content-type' - }; - - if (arguments[0] instanceof Error) { - - // Error - - var error = arguments[0]; - - this.data = error; - this.response.code = error.code || 500; - if (error.message) { - this.message = error.message; - } - } - else { - - // code, message - - var code = arguments[0]; - var message = arguments[1]; - - Hoek.assert(!isNaN(parseFloat(code)) && isFinite(code) && code >= 400, 'First argument must be a number (400+)'); - - this.response.code = code; - if (message) { - this.message = message; - } - } - - // Response format - - this.reformat(); - - return this; -}; - -NodeUtil.inherits(internals.Boom, Error); - - -internals.Boom.prototype.reformat = function () { - - this.response.payload.code = this.response.code; - this.response.payload.error = Http.STATUS_CODES[this.response.code] || 'Unknown'; - if (this.message) { - this.response.payload.message = Hoek.escapeHtml(this.message); // Prevent XSS from error message - } -}; - - -// Utilities - -internals.Boom.badRequest = function (message) { - - return new internals.Boom(400, message); -}; - - -internals.Boom.unauthorized = function (message, scheme, attributes) { // Or function (message, wwwAuthenticate[]) - - var err = new internals.Boom(401, message); - - if (!scheme) { - return err; - } - - var wwwAuthenticate = ''; - - if (typeof scheme === 'string') { - - // function (message, scheme, attributes) - - wwwAuthenticate = scheme; - if (attributes) { - var names = Object.keys(attributes); - for (var i = 0, il = names.length; i < il; ++i) { - if (i) { - wwwAuthenticate += ','; - } - - var value = attributes[names[i]]; - if (value === null || - value === undefined) { // Value can be zero - - value = ''; - } - wwwAuthenticate += ' ' + names[i] + '="' + Hoek.escapeHeaderAttribute(value.toString()) + '"'; - } - } - - if (message) { - if (attributes) { - wwwAuthenticate += ','; - } - wwwAuthenticate += ' error="' + Hoek.escapeHeaderAttribute(message) + '"'; - } - else { - err.isMissing = true; - } - } - else { - - // function (message, wwwAuthenticate[]) - - var wwwArray = scheme; - for (var i = 0, il = wwwArray.length; i < il; ++i) { - if (i) { - wwwAuthenticate += ', '; - } - - wwwAuthenticate += wwwArray[i]; - } - } - - err.response.headers['WWW-Authenticate'] = wwwAuthenticate; - - return err; -}; - - -internals.Boom.clientTimeout = function (message) { - - return new internals.Boom(408, message); -}; - - -internals.Boom.serverTimeout = function (message) { - - return new internals.Boom(503, message); -}; - - -internals.Boom.forbidden = function (message) { - - return new internals.Boom(403, message); -}; - - -internals.Boom.notFound = function (message) { - - return new internals.Boom(404, message); -}; - - -internals.Boom.internal = function (message, data) { - - var err = new internals.Boom(500, message); - - if (data && data.stack) { - err.trace = data.stack.split('\n'); - err.outterTrace = Hoek.displayStack(1); - } - else { - err.trace = Hoek.displayStack(1); - } - - err.data = data; - err.response.payload.message = 'An internal server error occurred'; // Hide actual error from user - - return err; -}; - - -internals.Boom.passThrough = function (code, payload, contentType, headers) { - - var err = new internals.Boom(500, 'Pass-through'); // 500 code is only used to initialize - - err.data = { - code: code, - payload: payload, - type: contentType - }; - - err.response.code = code; - err.response.type = contentType; - err.response.headers = headers; - err.response.payload = payload; - - return err; -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/package.json deleted file mode 100755 index a6c56b90..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "boom", - "description": "HTTP-friendly error objects", - "version": "0.4.2", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [], - "repository": { - "type": "git", - "url": "git://github.com/spumko/boom" - }, - "main": "index", - "keywords": [ - "error", - "http" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "hoek": "0.9.x" - }, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/spumko/boom/raw/master/LICENSE" - } - ], - "readme": "<a href=\"https://github.com/spumko\"><img src=\"https://raw.github.com/spumko/spumko/master/images/from.png\" align=\"right\" /></a>\n![boom Logo](https://raw.github.com/spumko/boom/master/images/boom.png)\n\nHTTP-friendly error objects\n\n[![Build Status](https://secure.travis-ci.org/spumko/boom.png)](http://travis-ci.org/spumko/boom)\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/spumko/boom/issues" - }, - "homepage": "https://github.com/spumko/boom", - "_id": "boom@0.4.2", - "dist": { - "shasum": "92a32f029aba10e290058f22c83377d073ed5cdd" - }, - "_from": "boom@0.4.x", - "_resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js deleted file mode 100755 index a20c1c34..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js +++ /dev/null @@ -1,245 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Boom = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Boom', function () { - - it('returns an error with info when constructed using another error', function (done) { - - var error = new Error('ka-boom'); - error.xyz = 123; - var err = new Boom(error); - expect(err.data.xyz).to.equal(123); - expect(err.message).to.equal('ka-boom'); - expect(err.response).to.deep.equal({ - code: 500, - payload: { - code: 500, - error: 'Internal Server Error', - message: 'ka-boom' - }, - headers: {} - }); - done(); - }); - - describe('#isBoom', function () { - - it('returns true for Boom object', function (done) { - - expect(Boom.badRequest().isBoom).to.equal(true); - done(); - }); - - it('returns false for Error object', function (done) { - - expect(new Error().isBoom).to.not.exist; - done(); - }); - }); - - describe('#badRequest', function () { - - it('returns a 400 error code', function (done) { - - expect(Boom.badRequest().response.code).to.equal(400); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.badRequest('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#unauthorized', function () { - - it('returns a 401 error code', function (done) { - - var err = Boom.unauthorized(); - expect(err.response.code).to.equal(401); - expect(err.response.headers).to.deep.equal({}); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.unauthorized('my message').message).to.equal('my message'); - done(); - }); - - it('returns a WWW-Authenticate header when passed a scheme', function (done) { - - var err = Boom.unauthorized('boom', 'Test'); - expect(err.response.code).to.equal(401); - expect(err.response.headers['WWW-Authenticate']).to.equal('Test error="boom"'); - done(); - }); - - it('returns a WWW-Authenticate header when passed a scheme and attributes', function (done) { - - var err = Boom.unauthorized('boom', 'Test', { a: 1, b: 'something', c: null, d: 0 }); - expect(err.response.code).to.equal(401); - expect(err.response.headers['WWW-Authenticate']).to.equal('Test a="1", b="something", c="", d="0", error="boom"'); - done(); - }); - - it('sets the isMissing flag when error message is empty', function (done) { - - var err = Boom.unauthorized('', 'Basic'); - expect(err.isMissing).to.equal(true); - done(); - }); - - it('does not set the isMissing flag when error message is not empty', function (done) { - - var err = Boom.unauthorized('message', 'Basic'); - expect(err.isMissing).to.equal(undefined); - done(); - }); - - it('sets a WWW-Authenticate when passed as an array', function (done) { - - var err = Boom.unauthorized('message', ['Basic', 'Example e="1"', 'Another x="3", y="4"']); - expect(err.response.headers['WWW-Authenticate']).to.equal('Basic, Example e="1", Another x="3", y="4"'); - done(); - }); - }); - - describe('#clientTimeout', function () { - - it('returns a 408 error code', function (done) { - - expect(Boom.clientTimeout().response.code).to.equal(408); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.clientTimeout('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#serverTimeout', function () { - - it('returns a 503 error code', function (done) { - - expect(Boom.serverTimeout().response.code).to.equal(503); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.serverTimeout('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#forbidden', function () { - - it('returns a 403 error code', function (done) { - - expect(Boom.forbidden().response.code).to.equal(403); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.forbidden('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#notFound', function () { - - it('returns a 404 error code', function (done) { - - expect(Boom.notFound().response.code).to.equal(404); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.notFound('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#internal', function () { - - it('returns a 500 error code', function (done) { - - expect(Boom.internal().response.code).to.equal(500); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - var err = Boom.internal('my message'); - expect(err.message).to.equal('my message'); - expect(err.response.payload.message).to.equal('An internal server error occurred'); - done(); - }); - - it('passes data on the callback if its passed in', function (done) { - - expect(Boom.internal('my message', { my: 'data' }).data.my).to.equal('data'); - done(); - }); - - it('uses passed in stack if its available', function (done) { - - var error = new Error(); - error.stack = 'my stack line\nmy second stack line'; - expect(Boom.internal('my message', error).trace[0]).to.equal('my stack line'); - done(); - }); - }); - - describe('#passThrough', function () { - - it('returns a pass-through error', function (done) { - - var err = Boom.passThrough(499, { a: 1 }, 'application/text', { 'X-Test': 'Boom' }); - expect(err.response.code).to.equal(499); - expect(err.message).to.equal('Pass-through'); - expect(err.response).to.deep.equal({ - code: 499, - payload: { a: 1 }, - headers: { 'X-Test': 'Boom' }, - type: 'application/text' - }); - done(); - }); - }); - - describe('#reformat', function () { - - it('encodes any HTML markup in the response payload', function (done) { - - var boom = new Boom(new Error('<script>alert(1)</script>')); - expect(boom.response.payload.message).to.not.contain('<script>'); - done(); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore deleted file mode 100644 index b3bb5176..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml deleted file mode 100755 index 40ca59ee..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE deleted file mode 100755 index e699a7bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2013, Eran Hammer. -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 Eran Hammer 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 ERAN HAMMER 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile deleted file mode 100755 index 9e7138c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -test: - @./node_modules/.bin/lab -test-cov: - @./node_modules/.bin/lab -r threshold -t 100 -test-cov-html: - @./node_modules/.bin/lab -r html -o coverage.html -complexity: - @./node_modules/.bin/cr -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md deleted file mode 100644 index 6a900a49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md +++ /dev/null @@ -1,6 +0,0 @@ -cryptiles -========= - -General purpose crypto utilities - -[![Build Status](https://secure.travis-ci.org/hueniverse/cryptiles.png)](http://travis-ci.org/hueniverse/cryptiles) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js deleted file mode 100755 index dcf2bc38..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js +++ /dev/null @@ -1,68 +0,0 @@ -// Load modules - -var Crypto = require('crypto'); -var Boom = require('boom'); - - -// Declare internals - -var internals = {}; - - -// Generate a cryptographically strong pseudo-random data - -exports.randomString = function (size) { - - var buffer = exports.randomBits((size + 1) * 6); - if (buffer instanceof Error) { - return buffer; - } - - var string = buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, ''); - return string.slice(0, size); -}; - - -exports.randomBits = function (bits) { - - if (!bits || - bits < 0) { - - return Boom.internal('Invalid random bits count'); - } - - var bytes = Math.ceil(bits / 8); - try { - return Crypto.randomBytes(bytes); - } - catch (err) { - return Boom.internal('Failed generating random bits: ' + err.message); - } -}; - - -// Compare two strings using fixed time algorithm (to prevent time-based analysis of MAC digest match) - -exports.fixedTimeComparison = function (a, b) { - - if (typeof a !== 'string' || - typeof b !== 'string') { - - return false; - } - - var mismatch = (a.length === b.length ? 0 : 1); - if (mismatch) { - b = a; - } - - for (var i = 0, il = a.length; i < il; ++i) { - var ac = a.charCodeAt(i); - var bc = b.charCodeAt(i); - mismatch += (ac === bc ? 0 : 1); - } - - return (mismatch === 0); -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json deleted file mode 100755 index cafe4c1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "cryptiles", - "description": "General purpose crypto utilities", - "version": "0.2.2", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [], - "repository": { - "type": "git", - "url": "git://github.com/hueniverse/cryptiles" - }, - "main": "index", - "keywords": [ - "cryptography", - "security", - "utilites" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "boom": "0.4.x" - }, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/hueniverse/cryptiles/raw/master/LICENSE" - } - ], - "readme": "cryptiles\n=========\n\nGeneral purpose crypto utilities\n\n[![Build Status](https://secure.travis-ci.org/hueniverse/cryptiles.png)](http://travis-ci.org/hueniverse/cryptiles)\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/hueniverse/cryptiles/issues" - }, - "homepage": "https://github.com/hueniverse/cryptiles", - "_id": "cryptiles@0.2.2", - "dist": { - "shasum": "0462e8adb7667ffa104947a34a96e68627d8c95d" - }, - "_from": "cryptiles@0.2.x", - "_resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js deleted file mode 100755 index 58aaa70b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js +++ /dev/null @@ -1,101 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Cryptiles = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Cryptiles', function () { - - describe('#randomString', function () { - - it('should generate the right length string', function (done) { - - for (var i = 1; i <= 1000; ++i) { - expect(Cryptiles.randomString(i).length).to.equal(i); - } - - done(); - }); - - it('returns an error on invalid bits size', function (done) { - - expect(Cryptiles.randomString(99999999999999999999).message).to.equal('Failed generating random bits: Argument #1 must be number > 0'); - done(); - }); - }); - - describe('#randomBits', function () { - - it('returns an error on invalid input', function (done) { - - expect(Cryptiles.randomBits(0).message).to.equal('Invalid random bits count'); - done(); - }); - }); - - describe('#fixedTimeComparison', function () { - - var a = Cryptiles.randomString(50000); - var b = Cryptiles.randomString(150000); - - it('should take the same amount of time comparing different string sizes', function (done) { - - var now = Date.now(); - Cryptiles.fixedTimeComparison(b, a); - var t1 = Date.now() - now; - - now = Date.now(); - Cryptiles.fixedTimeComparison(b, b); - var t2 = Date.now() - now; - - expect(t2 - t1).to.be.within(-20, 20); - done(); - }); - - it('should return true for equal strings', function (done) { - - expect(Cryptiles.fixedTimeComparison(a, a)).to.equal(true); - done(); - }); - - it('should return false for different strings (size, a < b)', function (done) { - - expect(Cryptiles.fixedTimeComparison(a, a + 'x')).to.equal(false); - done(); - }); - - it('should return false for different strings (size, a > b)', function (done) { - - expect(Cryptiles.fixedTimeComparison(a + 'x', a)).to.equal(false); - done(); - }); - - it('should return false for different strings (size, a = b)', function (done) { - - expect(Cryptiles.fixedTimeComparison(a + 'x', a + 'y')).to.equal(false); - done(); - }); - - it('should return false when not a string', function (done) { - - expect(Cryptiles.fixedTimeComparison('x', null)).to.equal(false); - done(); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore deleted file mode 100644 index 9966e5e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov -complexity.md diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml deleted file mode 100755 index 40ca59ee..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE deleted file mode 100755 index 394adcff..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE +++ /dev/null @@ -1,33 +0,0 @@ -Copyright (c) 2011-2013, Walmart. -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 Walmart 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 WALMART 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. - - - * * * - - -Portions of this project were initially based on Postmile, Copyright (c) 2011, Yahoo Inc. -Postmile is published at https://github.com/yahoo/postmile and its licensing terms are -published at https://github.com/yahoo/postmile/blob/master/LICENSE. - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile deleted file mode 100755 index e605d6c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -test: - @node node_modules/lab/bin/lab -test-cov: - @node node_modules/lab/bin/lab -r threshold -t 100 -test-cov-html: - @node node_modules/lab/bin/lab -r html -o coverage.html -complexity: - @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/README.md deleted file mode 100755 index ac64e2fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/README.md +++ /dev/null @@ -1,436 +0,0 @@ -<a href="https://github.com/spumko"><img src="https://raw.github.com/spumko/spumko/master/images/from.png" align="right" /></a> -![hoek Logo](https://raw.github.com/spumko/hoek/master/images/hoek.png) - -General purpose node utilities - -[![Build Status](https://secure.travis-ci.org/spumko/hoek.png)](http://travis-ci.org/spumko/hoek) - -# Table of Contents - -* [Introduction](#introduction "Introduction") -* [Object](#object "Object") - * [clone](#cloneobj "clone") - * [merge](#mergetarget-source-isnulloverride-ismergearrays "merge") - * [applyToDefaults](#applytodefaultsdefaults-options "applyToDefaults") - * [unique](#uniquearray-key "unique") - * [mapToObject](#maptoobjectarray-key "mapToObject") - * [intersect](#intersectarray1-array2 "intersect") - * [matchKeys](#matchkeysobj-keys "matchKeys") - * [flatten](#flattenarray-target "flatten") - * [removeKeys](#removekeysobject-keys "removeKeys") - * [reach](#reachobj-chain "reach") - * [inheritAsync](#inheritasyncself-obj-keys "inheritAsync") - * [rename](#renameobj-from-to "rename") -* [Timer](#timer "Timer") -* [Binary Encoding/Decoding](#binary "Binary Encoding/Decoding") - * [base64urlEncode](#binary64urlEncodevalue "binary64urlEncode") - * [base64urlDecode](#binary64urlDecodevalue "binary64urlDecode") -* [Escaping Characters](#escaped "Escaping Characters") - * [escapeHtml](#escapeHtmlstring "escapeHtml") - * [escapeHeaderAttribute](#escapeHeaderAttributeattribute "escapeHeaderAttribute") - * [escapeRegex](#escapeRegexstring "escapeRegex") -* [Errors](#errors "Errors") - * [assert](#assertmessage "assert") - * [abort](#abortmessage "abort") - * [displayStack](#displayStackslice "displayStack") - * [callStack](#callStackslice "callStack") - * [toss](#tosscondition "toss") -* [Load files](#load-files "Load Files") - * [loadPackage](#loadPackagedir "loadpackage") - * [loadDirModules](#loadDirModulespath-excludefiles-target "loaddirmodules") - - - -# Introduction - -The *Hoek* general purpose node utilities library is used to aid in a variety of manners. It comes with useful methods for Arrays (clone, merge, applyToDefaults), Objects (removeKeys, copy), Asserting and more. - -For example, to use Hoek to set configuration with default options: -```javascript -var Hoek = require('hoek'); - -var default = {url : "www.github.com", port : "8000", debug : true} - -var config = Hoek.applyToDefaults(default, {port : "3000", admin : true}); - -// In this case, config would be { url: 'www.github.com', port: '3000', debug: true, admin: true } -``` - -Under each of the sections (such as Array), there are subsections which correspond to Hoek methods. Each subsection will explain how to use the corresponding method. In each js excerpt below, the var Hoek = require('hoek') is omitted for brevity. - -## Object - -Hoek provides several helpful methods for objects and arrays. - -### clone(obj) - -This method is used to clone an object or an array. A *deep copy* is made (duplicates everything, including values that are objects). - -```javascript - -var nestedObj = { - w: /^something$/ig, - x: { - a: [1, 2, 3], - b: 123456, - c: new Date() - }, - y: 'y', - z: new Date() - }; - -var copy = Hoek.clone(nestedObj); - -copy.x.b = 100; - -console.log(copy.y) // results in 'y' -console.log(nestedObj.x.b) // results in 123456 -console.log(copy.x.b) // results in 100 -``` - -### merge(target, source, isNullOverride, isMergeArrays) -isNullOverride, isMergeArrays default to true - -Merge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied - - -```javascript - -var target = {a: 1, b : 2} -var source = {a: 0, c: 5} -var source2 = {a: null, c: 5} - -var targetArray = [1, 2, 3]; -var sourceArray = [4, 5]; - -var newTarget = Hoek.merge(target, source); // results in {a: 0, b: 2, c: 5} -newTarget = Hoek.merge(target, source2); // results in {a: null, b: 2, c: 5} -newTarget = Hoek.merge(target, source2, false); // results in {a: 1, b: 2, c: 5} - -newTarget = Hoek.merge(targetArray, sourceArray) // results in [1, 2, 3, 4, 5] -newTarget = Hoek.merge(targetArray, sourceArray, true, false) // results in [4, 5] - - - - -``` - -### applyToDefaults(defaults, options) - -Apply options to a copy of the defaults - -```javascript - -var defaults = {host: "localhost", port: 8000}; -var options = {port: 8080}; - -var config = Hoek.applyToDefaults(defaults, options); // results in {host: "localhost", port: 8080}; - - -``` - -### unique(array, key) - -Remove duplicate items from Array - -```javascript - -var array = [1, 2, 2, 3, 3, 4, 5, 6]; - -var newArray = Hoek.unique(array); // results in [1,2,3,4,5,6]; - -array = [{id: 1}, {id: 1}, {id: 2}]; - -newArray = Hoek.unique(array, "id") // results in [{id: 1}, {id: 2}] - -``` - -### mapToObject(array, key) - -Convert an Array into an Object - -```javascript - -var array = [1,2,3]; -var newObject = Hoek.mapToObject(array); // results in [{"1": true}, {"2": true}, {"3": true}] - -array = [{id: 1}, {id: 2}]; -newObject = Hoek.mapToObject(array, "id") // results in [{"id": 1}, {"id": 2}] - -``` -### intersect(array1, array2) - -Find the common unique items in two arrays - -```javascript - -var array1 = [1, 2, 3]; -var array2 = [1, 4, 5]; - -var newArray = Hoek.intersect(array1, array2) // results in [1] - -``` - -### matchKeys(obj, keys) - -Find which keys are present - -```javascript - -var obj = {a: 1, b: 2, c: 3}; -var keys = ["a", "e"]; - -Hoek.matchKeys(obj, keys) // returns ["a"] - -``` - -### flatten(array, target) - -Flatten an array - -```javascript - -var array = [1, 2, 3]; -var target = [4, 5]; - -var flattenedArray = Hoek.flatten(array, target) // results in [4, 5, 1, 2, 3]; - -``` - -### removeKeys(object, keys) - -Remove keys - -```javascript - -var object = {a: 1, b: 2, c: 3, d: 4}; - -var keys = ["a", "b"]; - -Hoek.removeKeys(object, keys) // object is now {c: 3, d: 4} - -``` - -### reach(obj, chain) - -Converts an object key chain string to reference - -```javascript - -var chain = 'a.b.c'; -var obj = {a : {b : { c : 1}}}; - -Hoek.reach(obj, chain) // returns 1 - -``` - -### inheritAsync(self, obj, keys) - -Inherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors - -```javascript - -var targetFunc = function () { }; - -var proto = { - a: function () { - return 'a!'; - }, - b: function () { - return 'b!'; - }, - c: function () { - throw new Error('c!'); - } - }; - -var keys = ['a', 'c']; - -Hoek.inheritAsync(targetFunc, proto, ['a', 'c']); - -var target = new targetFunc(); - -target.a(function(err, result){console.log(result)} // returns 'a!' - -target.c(function(err, result){console.log(result)} // returns undefined - -target.b(function(err, result){console.log(result)} // gives error: Object [object Object] has no method 'b' - -``` - -### rename(obj, from, to) - -Rename a key of an object - -```javascript - -var obj = {a : 1, b : 2}; - -Hoek.rename(obj, "a", "c"); // obj is now {c : 1, b : 2} - -``` - - -# Timer - -A Timer object. Initializing a new timer object sets the ts to the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC. - -```javascript - - -example : - - -var timerObj = new Hoek.Timer(); -console.log("Time is now: " + timerObj.ts) -console.log("Elapsed time from initialization: " + timerObj.elapsed() + 'milliseconds') - -``` - -# Binary Encoding/Decoding - -### base64urlEncode(value) - -Encodes value in Base64 or URL encoding - -### base64urlDecode(value) - -Decodes data in Base64 or URL encoding. -# Escaping Characters - -Hoek provides convenient methods for escaping html characters. The escaped characters are as followed: - -```javascript - -internals.htmlEscaped = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' -}; - -``` - -### escapeHtml(string) - -```javascript - -var string = '<html> hey </html>'; -var escapedString = Hoek.escapeHtml(string); // returns <html> hey </html> - -``` - -### escapeHeaderAttribute(attribute) - -Escape attribute value for use in HTTP header - -```javascript - -var a = Hoek.escapeHeaderAttribute('I said "go w\\o me"'); //returns I said \"go w\\o me\" - - -``` - - -### escapeRegex(string) - -Escape string for Regex construction - -```javascript - -var a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\/`"(>)[<]d{}s,'); // returns 4\^f\$s\.4\*5\+\-_\?%\=#\!\:@\|~\\\/`"\(>\)\[<\]d\{\}s\, - - - -``` - -# Errors - -### assert(message) - -```javascript - -var a = 1, b =2; - -Hoek.assert(a === b, 'a should equal b'); // ABORT: a should equal b - -``` - -### abort(message) - -First checks if process.env.NODE_ENV === 'test', and if so, throws error message. Otherwise, -displays most recent stack and then exits process. - - - -### displayStack(slice) - -Displays the trace stack - -```javascript - -var stack = Hoek.displayStack(); -console.log(stack) // returns something like: - -[ 'null (/Users/user/Desktop/hoek/test.js:4:18)', - 'Module._compile (module.js:449:26)', - 'Module._extensions..js (module.js:467:10)', - 'Module.load (module.js:356:32)', - 'Module._load (module.js:312:12)', - 'Module.runMain (module.js:492:10)', - 'startup.processNextTick.process._tickCallback (node.js:244:9)' ] - -``` - -### callStack(slice) - -Returns a trace stack array. - -```javascript - -var stack = Hoek.callStack(); -console.log(stack) // returns something like: - -[ [ '/Users/user/Desktop/hoek/test.js', 4, 18, null, false ], - [ 'module.js', 449, 26, 'Module._compile', false ], - [ 'module.js', 467, 10, 'Module._extensions..js', false ], - [ 'module.js', 356, 32, 'Module.load', false ], - [ 'module.js', 312, 12, 'Module._load', false ], - [ 'module.js', 492, 10, 'Module.runMain', false ], - [ 'node.js', - 244, - 9, - 'startup.processNextTick.process._tickCallback', - false ] ] - - -``` - -### toss(condition) - -toss(condition /*, [message], callback */) - -Return an error as first argument of a callback - - -# Load Files - -### loadPackage(dir) - -Load and parse package.json process root or given directory - -```javascript - -var pack = Hoek.loadPackage(); // pack.name === 'hoek' - -``` - -### loadDirModules(path, excludeFiles, target) - -Loads modules from a given path; option to exclude files (array). - - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/images/hoek.png b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/images/hoek.png deleted file mode 100755 index 6ccfcb12be76a7a8331428c87337b20b901e869c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37939 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 T*vZ8J00000NkvXXu0mjfKFT-e diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js deleted file mode 100755 index 666b3dc8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js +++ /dev/null @@ -1,132 +0,0 @@ -// Declare internals - -var internals = {}; - - -exports.escapeJavaScript = function (input) { - - if (!input) { - return ''; - } - - var escaped = ''; - - for (var i = 0, il = input.length; i < il; ++i) { - - var charCode = input.charCodeAt(i); - - if (internals.isSafe(charCode)) { - escaped += input[i]; - } - else { - escaped += internals.escapeJavaScriptChar(charCode); - } - } - - return escaped; -}; - - -exports.escapeHtml = function (input) { - - if (!input) { - return ''; - } - - var escaped = ''; - - for (var i = 0, il = input.length; i < il; ++i) { - - var charCode = input.charCodeAt(i); - - if (internals.isSafe(charCode)) { - escaped += input[i]; - } - else { - escaped += internals.escapeHtmlChar(charCode); - } - } - - return escaped; -}; - - -internals.escapeJavaScriptChar = function (charCode) { - - if (charCode >= 256) { - return '\\u' + internals.padLeft('' + charCode, 4); - } - - var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex'); - return '\\x' + internals.padLeft(hexValue, 2); -}; - - -internals.escapeHtmlChar = function (charCode) { - - var namedEscape = internals.namedHtml[charCode]; - if (typeof namedEscape !== 'undefined') { - return namedEscape; - } - - if (charCode >= 256) { - return '&#' + charCode + ';'; - } - - var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex'); - return '&#x' + internals.padLeft(hexValue, 2) + ';'; -}; - - -internals.padLeft = function (str, len) { - - while (str.length < len) { - str = '0' + str; - } - - return str; -}; - - -internals.isSafe = function (charCode) { - - return (typeof internals.safeCharCodes[charCode] !== 'undefined'); -}; - - -internals.namedHtml = { - '38': '&', - '60': '<', - '62': '>', - '34': '"', - '160': ' ', - '162': '¢', - '163': '£', - '164': '¤', - '169': '©', - '174': '®' -}; - - -internals.safeCharCodes = (function () { - - var safe = {}; - - for (var i = 32; i < 123; ++i) { - - if ((i >= 97 && i <= 122) || // a-z - (i >= 65 && i <= 90) || // A-Z - (i >= 48 && i <= 57) || // 0-9 - i === 32 || // space - i === 46 || // . - i === 44 || // , - i === 45 || // - - i === 58 || // : - i === 95) { // _ - - safe[i] = null; - } - } - - return safe; -}()); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js deleted file mode 100755 index 806260d2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js +++ /dev/null @@ -1,585 +0,0 @@ -// Load modules - -var Fs = require('fs'); -var Escape = require('./escape'); - - -// Declare internals - -var internals = {}; - - -// Clone object or array - -exports.clone = function (obj, seen) { - - if (typeof obj !== 'object' || - obj === null) { - - return obj; - } - - seen = seen || { orig: [], copy: [] }; - - var lookup = seen.orig.indexOf(obj); - if (lookup !== -1) { - return seen.copy[lookup]; - } - - var newObj = (obj instanceof Array) ? [] : {}; - - seen.orig.push(obj); - seen.copy.push(newObj); - - for (var i in obj) { - if (obj.hasOwnProperty(i)) { - if (obj[i] instanceof Buffer) { - newObj[i] = new Buffer(obj[i]); - } - else if (obj[i] instanceof Date) { - newObj[i] = new Date(obj[i].getTime()); - } - else if (obj[i] instanceof RegExp) { - var flags = '' + (obj[i].global ? 'g' : '') + (obj[i].ignoreCase ? 'i' : '') + (obj[i].multiline ? 'm' : ''); - newObj[i] = new RegExp(obj[i].source, flags); - } - else { - newObj[i] = exports.clone(obj[i], seen); - } - } - } - - return newObj; -}; - - -// Merge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied - -exports.merge = function (target, source, isNullOverride /* = true */, isMergeArrays /* = true */) { - - exports.assert(target && typeof target == 'object', 'Invalid target value: must be an object'); - exports.assert(source === null || source === undefined || typeof source === 'object', 'Invalid source value: must be null, undefined, or an object'); - - if (!source) { - return target; - } - - if (source instanceof Array) { - exports.assert(target instanceof Array, 'Cannot merge array onto an object'); - if (isMergeArrays === false) { // isMergeArrays defaults to true - target.length = 0; // Must not change target assignment - } - - for (var i = 0, il = source.length; i < il; ++i) { - target.push(source[i]); - } - - return target; - } - - var keys = Object.keys(source); - for (var k = 0, kl = keys.length; k < kl; ++k) { - var key = keys[k]; - var value = source[key]; - if (value && - typeof value === 'object') { - - if (!target[key] || - typeof target[key] !== 'object') { - - target[key] = exports.clone(value); - } - else { - exports.merge(target[key], source[key], isNullOverride, isMergeArrays); - } - } - else { - if (value !== null && value !== undefined) { // Explicit to preserve empty strings - target[key] = value; - } - else if (isNullOverride !== false) { // Defaults to true - target[key] = value; - } - } - } - - return target; -}; - - -// Apply options to a copy of the defaults - -exports.applyToDefaults = function (defaults, options) { - - exports.assert(defaults && typeof defaults == 'object', 'Invalid defaults value: must be an object'); - exports.assert(!options || options === true || typeof options === 'object', 'Invalid options value: must be true, falsy or an object'); - - if (!options) { // If no options, return null - return null; - } - - var copy = exports.clone(defaults); - - if (options === true) { // If options is set to true, use defaults - return copy; - } - - return exports.merge(copy, options, false, false); -}; - - -// Remove duplicate items from array - -exports.unique = function (array, key) { - - var index = {}; - var result = []; - - for (var i = 0, il = array.length; i < il; ++i) { - var id = (key ? array[i][key] : array[i]); - if (index[id] !== true) { - - result.push(array[i]); - index[id] = true; - } - } - - return result; -}; - - -// Convert array into object - -exports.mapToObject = function (array, key) { - - if (!array) { - return null; - } - - var obj = {}; - for (var i = 0, il = array.length; i < il; ++i) { - if (key) { - if (array[i][key]) { - obj[array[i][key]] = true; - } - } - else { - obj[array[i]] = true; - } - } - - return obj; -}; - - -// Find the common unique items in two arrays - -exports.intersect = function (array1, array2, justFirst) { - - if (!array1 || !array2) { - return []; - } - - var common = []; - var hash = (array1 instanceof Array ? exports.mapToObject(array1) : array1); - var found = {}; - for (var i = 0, il = array2.length; i < il; ++i) { - if (hash[array2[i]] && !found[array2[i]]) { - if (justFirst) { - return array2[i]; - } - - common.push(array2[i]); - found[array2[i]] = true; - } - } - - return (justFirst ? null : common); -}; - - -// Find which keys are present - -exports.matchKeys = function (obj, keys) { - - var matched = []; - for (var i = 0, il = keys.length; i < il; ++i) { - if (obj.hasOwnProperty(keys[i])) { - matched.push(keys[i]); - } - } - return matched; -}; - - -// Flatten array - -exports.flatten = function (array, target) { - - var result = target || []; - - for (var i = 0, il = array.length; i < il; ++i) { - if (Array.isArray(array[i])) { - exports.flatten(array[i], result); - } - else { - result.push(array[i]); - } - } - - return result; -}; - - -// Remove keys - -exports.removeKeys = function (object, keys) { - - for (var i = 0, il = keys.length; i < il; i++) { - delete object[keys[i]]; - } -}; - - -// Convert an object key chain string ('a.b.c') to reference (object[a][b][c]) - -exports.reach = function (obj, chain) { - - var path = chain.split('.'); - var ref = obj; - for (var i = 0, il = path.length; i < il; ++i) { - if (ref) { - ref = ref[path[i]]; - } - } - - return ref; -}; - - -// Inherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors - -exports.inheritAsync = function (self, obj, keys) { - - keys = keys || null; - - for (var i in obj) { - if (obj.hasOwnProperty(i)) { - if (keys instanceof Array && - keys.indexOf(i) < 0) { - - continue; - } - - self.prototype[i] = (function (fn) { - - return function (next) { - - var result = null; - try { - result = fn(); - } - catch (err) { - return next(err); - } - - return next(null, result); - }; - })(obj[i]); - } - } -}; - - -exports.formatStack = function (stack) { - - var trace = []; - for (var i = 0, il = stack.length; i < il; ++i) { - var item = stack[i]; - trace.push([item.getFileName(), item.getLineNumber(), item.getColumnNumber(), item.getFunctionName(), item.isConstructor()]); - } - - return trace; -}; - - -exports.formatTrace = function (trace) { - - var display = []; - - for (var i = 0, il = trace.length; i < il; ++i) { - var row = trace[i]; - display.push((row[4] ? 'new ' : '') + row[3] + ' (' + row[0] + ':' + row[1] + ':' + row[2] + ')'); - } - - return display; -}; - - -exports.callStack = function (slice) { - - // http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi - - var v8 = Error.prepareStackTrace; - Error.prepareStackTrace = function (err, stack) { - - return stack; - }; - - var capture = {}; - Error.captureStackTrace(capture, arguments.callee); - var stack = capture.stack; - - Error.prepareStackTrace = v8; - - var trace = exports.formatStack(stack); - - if (slice) { - return trace.slice(slice); - } - - return trace; -}; - - -exports.displayStack = function (slice) { - - var trace = exports.callStack(slice === undefined ? 1 : slice + 1); - - return exports.formatTrace(trace); -}; - - -exports.abortThrow = false; - - -exports.abort = function (message, hideStack) { - - if (process.env.NODE_ENV === 'test' || exports.abortThrow === true) { - throw new Error(message || 'Unknown error'); - } - - var stack = ''; - if (!hideStack) { - stack = exports.displayStack(1).join('\n\t'); - } - console.log('ABORT: ' + message + '\n\t' + stack); - process.exit(1); -}; - - -exports.assert = function (condition /*, msg1, msg2, msg3 */) { - - if (condition) { - return; - } - - var msgs = Array.prototype.slice.call(arguments, 1); - msgs = msgs.map(function (msg) { - - return typeof msg === 'string' ? msg : msg instanceof Error ? msg.message : JSON.stringify(msg); - }); - throw new Error(msgs.join(' ') || 'Unknown error'); -}; - - -exports.loadDirModules = function (path, excludeFiles, target) { // target(filename, name, capName) - - var exclude = {}; - for (var i = 0, il = excludeFiles.length; i < il; ++i) { - exclude[excludeFiles[i] + '.js'] = true; - } - - var files = Fs.readdirSync(path); - for (i = 0, il = files.length; i < il; ++i) { - var filename = files[i]; - if (/\.js$/.test(filename) && - !exclude[filename]) { - - var name = filename.substr(0, filename.lastIndexOf('.')); - var capName = name.charAt(0).toUpperCase() + name.substr(1).toLowerCase(); - - if (typeof target !== 'function') { - target[capName] = require(path + '/' + name); - } - else { - target(path + '/' + name, name, capName); - } - } - } -}; - - -exports.rename = function (obj, from, to) { - - obj[to] = obj[from]; - delete obj[from]; -}; - - -exports.Timer = function () { - - this.reset(); -}; - - -exports.Timer.prototype.reset = function () { - - this.ts = Date.now(); -}; - - -exports.Timer.prototype.elapsed = function () { - - return Date.now() - this.ts; -}; - - -// Load and parse package.json process root or given directory - -exports.loadPackage = function (dir) { - - var result = {}; - var filepath = (dir || process.env.PWD) + '/package.json'; - if (Fs.existsSync(filepath)) { - try { - result = JSON.parse(Fs.readFileSync(filepath)); - } - catch (e) { } - } - - return result; -}; - - -// Escape string for Regex construction - -exports.escapeRegex = function (string) { - - // Escape ^$.*+-?=!:|\/()[]{}, - return string.replace(/[\^\$\.\*\+\-\?\=\!\:\|\\\/\(\)\[\]\{\}\,]/g, '\\$&'); -}; - - -// Return an error as first argument of a callback - -exports.toss = function (condition /*, [message], next */) { - - var message = (arguments.length === 3 ? arguments[1] : ''); - var next = (arguments.length === 3 ? arguments[2] : arguments[1]); - - var err = (message instanceof Error ? message : (message ? new Error(message) : (condition instanceof Error ? condition : new Error()))); - - if (condition instanceof Error || - !condition) { - - return next(err); - } -}; - - -// Base64url (RFC 4648) encode - -exports.base64urlEncode = function (value) { - - return (new Buffer(value, 'binary')).toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, ''); -}; - - -// Base64url (RFC 4648) decode - -exports.base64urlDecode = function (encoded) { - - if (encoded && - !encoded.match(/^[\w\-]*$/)) { - - return new Error('Invalid character'); - } - - try { - return (new Buffer(encoded.replace(/-/g, '+').replace(/:/g, '/'), 'base64')).toString('binary'); - } - catch (err) { - return err; - } -}; - - -// Escape attribute value for use in HTTP header - -exports.escapeHeaderAttribute = function (attribute) { - - // Allowed value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9, \, " - - exports.assert(attribute.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~\"\\]*$/), 'Bad attribute value (' + attribute + ')'); - - return attribute.replace(/\\/g, '\\\\').replace(/\"/g, '\\"'); // Escape quotes and slash -}; - - -exports.escapeHtml = function (string) { - - return Escape.escapeHtml(string); -}; - - -exports.escapeJavaScript = function (string) { - - return Escape.escapeJavaScript(string); -}; - - -/* -var event = { - timestamp: now.getTime(), - tags: ['tag'], - data: { some: 'data' } -}; -*/ - -exports.consoleFunc = console.log; - -exports.printEvent = function (event) { - - var pad = function (value) { - - return (value < 10 ? '0' : '') + value; - }; - - var now = new Date(event.timestamp); - var timestring = (now.getYear() - 100).toString() + - pad(now.getMonth() + 1) + - pad(now.getDate()) + - '/' + - pad(now.getHours()) + - pad(now.getMinutes()) + - pad(now.getSeconds()) + - '.' + - now.getMilliseconds(); - - var data = event.data; - if (typeof event.data !== 'string') { - try { - data = JSON.stringify(event.data); - } - catch (e) { - data = 'JSON Error: ' + e.message; - } - } - - var output = timestring + ', ' + event.tags[0] + ', ' + data; - exports.consoleFunc(output); -}; - - -exports.nextTick = function (callback) { - - return function () { - - var args = arguments; - process.nextTick(function () { - - callback.apply(null, args); - }); - }; -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/package.json deleted file mode 100755 index 158eb318..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "hoek", - "description": "General purpose node utilities", - "version": "0.9.1", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [ - { - "name": "Van Nguyen", - "email": "the.gol.effect@gmail.com" - } - ], - "repository": { - "type": "git", - "url": "git://github.com/spumko/hoek" - }, - "main": "index", - "keywords": [ - "utilities" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": {}, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/spumko/hoek/raw/master/LICENSE" - } - ], - "readme": "<a href=\"https://github.com/spumko\"><img src=\"https://raw.github.com/spumko/spumko/master/images/from.png\" align=\"right\" /></a>\r\n![hoek Logo](https://raw.github.com/spumko/hoek/master/images/hoek.png)\r\n\r\nGeneral purpose node utilities\r\n\r\n[![Build Status](https://secure.travis-ci.org/spumko/hoek.png)](http://travis-ci.org/spumko/hoek)\r\n\r\n# Table of Contents\r\n\r\n* [Introduction](#introduction \"Introduction\")\r\n* [Object](#object \"Object\")\r\n * [clone](#cloneobj \"clone\")\r\n * [merge](#mergetarget-source-isnulloverride-ismergearrays \"merge\")\r\n * [applyToDefaults](#applytodefaultsdefaults-options \"applyToDefaults\")\r\n * [unique](#uniquearray-key \"unique\")\r\n * [mapToObject](#maptoobjectarray-key \"mapToObject\")\r\n * [intersect](#intersectarray1-array2 \"intersect\")\r\n * [matchKeys](#matchkeysobj-keys \"matchKeys\")\r\n * [flatten](#flattenarray-target \"flatten\")\r\n * [removeKeys](#removekeysobject-keys \"removeKeys\")\r\n * [reach](#reachobj-chain \"reach\")\r\n * [inheritAsync](#inheritasyncself-obj-keys \"inheritAsync\")\r\n * [rename](#renameobj-from-to \"rename\")\r\n* [Timer](#timer \"Timer\")\r\n* [Binary Encoding/Decoding](#binary \"Binary Encoding/Decoding\")\r\n * [base64urlEncode](#binary64urlEncodevalue \"binary64urlEncode\")\r\n * [base64urlDecode](#binary64urlDecodevalue \"binary64urlDecode\")\r\n* [Escaping Characters](#escaped \"Escaping Characters\")\r\n * [escapeHtml](#escapeHtmlstring \"escapeHtml\")\r\n * [escapeHeaderAttribute](#escapeHeaderAttributeattribute \"escapeHeaderAttribute\")\r\n * [escapeRegex](#escapeRegexstring \"escapeRegex\")\r\n* [Errors](#errors \"Errors\")\r\n * [assert](#assertmessage \"assert\")\r\n * [abort](#abortmessage \"abort\")\r\n * [displayStack](#displayStackslice \"displayStack\")\r\n * [callStack](#callStackslice \"callStack\")\r\n * [toss](#tosscondition \"toss\")\r\n* [Load files](#load-files \"Load Files\")\r\n * [loadPackage](#loadPackagedir \"loadpackage\")\r\n * [loadDirModules](#loadDirModulespath-excludefiles-target \"loaddirmodules\")\r\n\r\n\r\n\r\n# Introduction\r\n\r\nThe *Hoek* general purpose node utilities library is used to aid in a variety of manners. It comes with useful methods for Arrays (clone, merge, applyToDefaults), Objects (removeKeys, copy), Asserting and more. \r\n\r\nFor example, to use Hoek to set configuration with default options:\r\n```javascript\r\nvar Hoek = require('hoek');\r\n\r\nvar default = {url : \"www.github.com\", port : \"8000\", debug : true}\r\n\r\nvar config = Hoek.applyToDefaults(default, {port : \"3000\", admin : true});\r\n\r\n// In this case, config would be { url: 'www.github.com', port: '3000', debug: true, admin: true }\r\n```\r\n\r\nUnder each of the sections (such as Array), there are subsections which correspond to Hoek methods. Each subsection will explain how to use the corresponding method. In each js excerpt below, the var Hoek = require('hoek') is omitted for brevity.\r\n\r\n## Object\r\n\r\nHoek provides several helpful methods for objects and arrays.\r\n\r\n### clone(obj)\r\n\r\nThis method is used to clone an object or an array. A *deep copy* is made (duplicates everything, including values that are objects). \r\n\r\n```javascript\r\n\r\nvar nestedObj = {\r\n w: /^something$/ig,\r\n x: {\r\n a: [1, 2, 3],\r\n b: 123456,\r\n c: new Date()\r\n },\r\n y: 'y',\r\n z: new Date()\r\n };\r\n\r\nvar copy = Hoek.clone(nestedObj);\r\n\r\ncopy.x.b = 100;\r\n\r\nconsole.log(copy.y) // results in 'y'\r\nconsole.log(nestedObj.x.b) // results in 123456\r\nconsole.log(copy.x.b) // results in 100\r\n```\r\n\r\n### merge(target, source, isNullOverride, isMergeArrays)\r\nisNullOverride, isMergeArrays default to true\r\n\r\nMerge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied\r\n\r\n\r\n```javascript\r\n\r\nvar target = {a: 1, b : 2}\r\nvar source = {a: 0, c: 5}\r\nvar source2 = {a: null, c: 5}\r\n\r\nvar targetArray = [1, 2, 3];\r\nvar sourceArray = [4, 5];\r\n\r\nvar newTarget = Hoek.merge(target, source); // results in {a: 0, b: 2, c: 5}\r\nnewTarget = Hoek.merge(target, source2); // results in {a: null, b: 2, c: 5}\r\nnewTarget = Hoek.merge(target, source2, false); // results in {a: 1, b: 2, c: 5}\r\n\r\nnewTarget = Hoek.merge(targetArray, sourceArray) // results in [1, 2, 3, 4, 5]\r\nnewTarget = Hoek.merge(targetArray, sourceArray, true, false) // results in [4, 5]\r\n\r\n\r\n\r\n\r\n```\r\n\r\n### applyToDefaults(defaults, options)\r\n\r\nApply options to a copy of the defaults\r\n\r\n```javascript\r\n\r\nvar defaults = {host: \"localhost\", port: 8000};\r\nvar options = {port: 8080};\r\n\r\nvar config = Hoek.applyToDefaults(defaults, options); // results in {host: \"localhost\", port: 8080};\r\n\r\n\r\n```\r\n\r\n### unique(array, key)\r\n\r\nRemove duplicate items from Array\r\n\r\n```javascript\r\n\r\nvar array = [1, 2, 2, 3, 3, 4, 5, 6];\r\n\r\nvar newArray = Hoek.unique(array); // results in [1,2,3,4,5,6];\r\n\r\narray = [{id: 1}, {id: 1}, {id: 2}];\r\n\r\nnewArray = Hoek.unique(array, \"id\") // results in [{id: 1}, {id: 2}]\r\n\r\n```\r\n\r\n### mapToObject(array, key)\r\n\r\nConvert an Array into an Object\r\n\r\n```javascript\r\n\r\nvar array = [1,2,3];\r\nvar newObject = Hoek.mapToObject(array); // results in [{\"1\": true}, {\"2\": true}, {\"3\": true}]\r\n\r\narray = [{id: 1}, {id: 2}];\r\nnewObject = Hoek.mapToObject(array, \"id\") // results in [{\"id\": 1}, {\"id\": 2}]\r\n\r\n```\r\n### intersect(array1, array2)\r\n\r\nFind the common unique items in two arrays\r\n\r\n```javascript\r\n\r\nvar array1 = [1, 2, 3];\r\nvar array2 = [1, 4, 5];\r\n\r\nvar newArray = Hoek.intersect(array1, array2) // results in [1]\r\n\r\n```\r\n\r\n### matchKeys(obj, keys) \r\n\r\nFind which keys are present\r\n\r\n```javascript\r\n\r\nvar obj = {a: 1, b: 2, c: 3};\r\nvar keys = [\"a\", \"e\"];\r\n\r\nHoek.matchKeys(obj, keys) // returns [\"a\"]\r\n\r\n```\r\n\r\n### flatten(array, target)\r\n\r\nFlatten an array\r\n\r\n```javascript\r\n\r\nvar array = [1, 2, 3];\r\nvar target = [4, 5]; \r\n\r\nvar flattenedArray = Hoek.flatten(array, target) // results in [4, 5, 1, 2, 3];\r\n\r\n```\r\n\r\n### removeKeys(object, keys)\r\n\r\nRemove keys\r\n\r\n```javascript\r\n\r\nvar object = {a: 1, b: 2, c: 3, d: 4};\r\n\r\nvar keys = [\"a\", \"b\"];\r\n\r\nHoek.removeKeys(object, keys) // object is now {c: 3, d: 4}\r\n\r\n```\r\n\r\n### reach(obj, chain)\r\n\r\nConverts an object key chain string to reference\r\n\r\n```javascript\r\n\r\nvar chain = 'a.b.c';\r\nvar obj = {a : {b : { c : 1}}};\r\n\r\nHoek.reach(obj, chain) // returns 1\r\n\r\n```\r\n\r\n### inheritAsync(self, obj, keys) \r\n\r\nInherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors\r\n\r\n```javascript\r\n\r\nvar targetFunc = function () { };\r\n\r\nvar proto = {\r\n a: function () {\r\n return 'a!';\r\n },\r\n b: function () {\r\n return 'b!';\r\n },\r\n c: function () {\r\n throw new Error('c!');\r\n }\r\n };\r\n\r\nvar keys = ['a', 'c'];\r\n\r\nHoek.inheritAsync(targetFunc, proto, ['a', 'c']);\r\n\r\nvar target = new targetFunc();\r\n\r\ntarget.a(function(err, result){console.log(result)} // returns 'a!' \r\n\r\ntarget.c(function(err, result){console.log(result)} // returns undefined\r\n\r\ntarget.b(function(err, result){console.log(result)} // gives error: Object [object Object] has no method 'b'\r\n\r\n```\r\n\r\n### rename(obj, from, to)\r\n\r\nRename a key of an object\r\n\r\n```javascript\r\n\r\nvar obj = {a : 1, b : 2};\r\n\r\nHoek.rename(obj, \"a\", \"c\"); // obj is now {c : 1, b : 2}\r\n\r\n```\r\n\r\n\r\n# Timer\r\n\r\nA Timer object. Initializing a new timer object sets the ts to the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.\r\n\r\n```javascript\r\n\r\n\r\nexample : \r\n\r\n\r\nvar timerObj = new Hoek.Timer();\r\nconsole.log(\"Time is now: \" + timerObj.ts)\r\nconsole.log(\"Elapsed time from initialization: \" + timerObj.elapsed() + 'milliseconds')\r\n\r\n```\r\n\r\n# Binary Encoding/Decoding\r\n\r\n### base64urlEncode(value)\r\n\r\nEncodes value in Base64 or URL encoding\r\n\r\n### base64urlDecode(value)\r\n\r\nDecodes data in Base64 or URL encoding.\r\n# Escaping Characters\r\n\r\nHoek provides convenient methods for escaping html characters. The escaped characters are as followed:\r\n\r\n```javascript\r\n\r\ninternals.htmlEscaped = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": ''',\r\n '`': '`'\r\n};\r\n\r\n```\r\n\r\n### escapeHtml(string)\r\n\r\n```javascript\r\n\r\nvar string = '<html> hey </html>';\r\nvar escapedString = Hoek.escapeHtml(string); // returns <html> hey </html>\r\n\r\n```\r\n\r\n### escapeHeaderAttribute(attribute)\r\n\r\nEscape attribute value for use in HTTP header\r\n\r\n```javascript\r\n\r\nvar a = Hoek.escapeHeaderAttribute('I said \"go w\\\\o me\"'); //returns I said \\\"go w\\\\o me\\\"\r\n\r\n\r\n```\r\n\r\n\r\n### escapeRegex(string)\r\n\r\nEscape string for Regex construction\r\n\r\n```javascript\r\n\r\nvar a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\\\/`\"(>)[<]d{}s,'); // returns 4\\^f\\$s\\.4\\*5\\+\\-_\\?%\\=#\\!\\:@\\|~\\\\\\/`\"\\(>\\)\\[<\\]d\\{\\}s\\,\r\n\r\n\r\n\r\n```\r\n\r\n# Errors\r\n\r\n### assert(message)\r\n\r\n```javascript\r\n\r\nvar a = 1, b =2;\r\n\r\nHoek.assert(a === b, 'a should equal b'); // ABORT: a should equal b\r\n\r\n```\r\n\r\n### abort(message)\r\n\r\nFirst checks if process.env.NODE_ENV === 'test', and if so, throws error message. Otherwise,\r\ndisplays most recent stack and then exits process.\r\n\r\n\r\n\r\n### displayStack(slice)\r\n\r\nDisplays the trace stack\r\n\r\n```javascript\r\n\r\nvar stack = Hoek.displayStack();\r\nconsole.log(stack) // returns something like:\r\n\r\n[ 'null (/Users/user/Desktop/hoek/test.js:4:18)',\r\n 'Module._compile (module.js:449:26)',\r\n 'Module._extensions..js (module.js:467:10)',\r\n 'Module.load (module.js:356:32)',\r\n 'Module._load (module.js:312:12)',\r\n 'Module.runMain (module.js:492:10)',\r\n 'startup.processNextTick.process._tickCallback (node.js:244:9)' ]\r\n\r\n```\r\n\r\n### callStack(slice)\r\n\r\nReturns a trace stack array.\r\n\r\n```javascript\r\n\r\nvar stack = Hoek.callStack();\r\nconsole.log(stack) // returns something like:\r\n\r\n[ [ '/Users/user/Desktop/hoek/test.js', 4, 18, null, false ],\r\n [ 'module.js', 449, 26, 'Module._compile', false ],\r\n [ 'module.js', 467, 10, 'Module._extensions..js', false ],\r\n [ 'module.js', 356, 32, 'Module.load', false ],\r\n [ 'module.js', 312, 12, 'Module._load', false ],\r\n [ 'module.js', 492, 10, 'Module.runMain', false ],\r\n [ 'node.js',\r\n 244,\r\n 9,\r\n 'startup.processNextTick.process._tickCallback',\r\n false ] ]\r\n\r\n\r\n```\r\n\r\n### toss(condition)\r\n\r\ntoss(condition /*, [message], callback */)\r\n\r\nReturn an error as first argument of a callback\r\n\r\n\r\n# Load Files\r\n\r\n### loadPackage(dir)\r\n\r\nLoad and parse package.json process root or given directory\r\n\r\n```javascript\r\n\r\nvar pack = Hoek.loadPackage(); // pack.name === 'hoek'\r\n\r\n```\r\n\r\n### loadDirModules(path, excludeFiles, target) \r\n\r\nLoads modules from a given path; option to exclude files (array).\r\n\r\n\r\n\r\n\r\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/spumko/hoek/issues" - }, - "homepage": "https://github.com/spumko/hoek", - "_id": "hoek@0.9.1", - "dist": { - "shasum": "8525a65589a017e905052fd24b26898c26a20c6f" - }, - "_from": "hoek@0.9.x", - "_resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js deleted file mode 100644 index 4dddd77d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js +++ /dev/null @@ -1,86 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hoek = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hoek', function () { - - describe('#escapeJavaScript', function () { - - it('encodes / characters', function (done) { - - var encoded = Hoek.escapeJavaScript('<script>alert(1)</script>'); - expect(encoded).to.equal('\\x3cscript\\x3ealert\\x281\\x29\\x3c\\x2fscript\\x3e'); - done(); - }); - - it('encodes \' characters', function (done) { - - var encoded = Hoek.escapeJavaScript('something(\'param\')'); - expect(encoded).to.equal('something\\x28\\x27param\\x27\\x29'); - done(); - }); - - it('encodes large unicode characters with the correct padding', function (done) { - - var encoded = Hoek.escapeJavaScript(String.fromCharCode(500) + String.fromCharCode(1000)); - expect(encoded).to.equal('\\u0500\\u1000'); - done(); - }); - - it('doesn\'t throw an exception when passed null', function (done) { - - var encoded = Hoek.escapeJavaScript(null); - expect(encoded).to.equal(''); - done(); - }); - }); - - describe('#escapeHtml', function () { - - it('encodes / characters', function (done) { - - var encoded = Hoek.escapeHtml('<script>alert(1)</script>'); - expect(encoded).to.equal('<script>alert(1)</script>'); - done(); - }); - - it('encodes < and > as named characters', function (done) { - - var encoded = Hoek.escapeHtml('<script><>'); - expect(encoded).to.equal('<script><>'); - done(); - }); - - it('encodes large unicode characters', function (done) { - - var encoded = Hoek.escapeHtml(String.fromCharCode(500) + String.fromCharCode(1000)); - expect(encoded).to.equal('ǴϨ'); - done(); - }); - - it('doesn\'t throw an exception when passed null', function (done) { - - var encoded = Hoek.escapeHtml(null); - expect(encoded).to.equal(''); - done(); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js deleted file mode 100755 index c40e3ad9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js +++ /dev/null @@ -1,1078 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hoek = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hoek', function () { - - var nestedObj = { - v: [7,8,9], - w: /^something$/igm, - x: { - a: [1, 2, 3], - b: 123456, - c: new Date(), - d: /hi/igm, - e: /hello/ - }, - y: 'y', - z: new Date() - }; - - var dupsArray = [nestedObj, { z: 'z' }, nestedObj]; - var reducedDupsArray = [nestedObj, { z: 'z' }]; - - describe('#clone', function () { - - it('should clone a nested object', function (done) { - - var a = nestedObj; - var b = Hoek.clone(a); - - expect(a).to.deep.equal(b); - expect(a.z.getTime()).to.equal(b.z.getTime()); - done(); - }); - - it('should clone a null object', function (done) { - - var b = Hoek.clone(null); - - expect(b).to.equal(null); - done(); - }); - - it('should not convert undefined properties to null', function (done) { - - var obj = { something: undefined }; - var b = Hoek.clone(obj); - - expect(typeof b.something).to.equal('undefined'); - done(); - }); - - it('should not throw on circular reference', function (done) { - - var a = {}; - a.x = a; - - var test = (function () { - - var b = Hoek.clone(a); - }); - - expect(test).to.not.throw(); - done(); - }); - - it('should properly clone circular reference', function (done) { - - var x = { - 'z': new Date() - }; - x.y = x; - - var b = Hoek.clone(x); - expect(Object.keys(b.y)).to.deep.equal(Object.keys(x)) - expect(b.z).to.not.equal(x.z); - expect(b.y).to.not.equal(x.y); - expect(b.y.z).to.not.equal(x.y.z); - expect(b.y).to.equal(b); - expect(b.y.y.y.y).to.equal(b); - done(); - }); - - it('should properly clone deeply nested object', function (done) { - - var a = { - x: { - y: { - a: [1, 2, 3], - b: 123456, - c: new Date(), - d: /hi/igm, - e: /hello/ - }, - } - }; - - var b = Hoek.clone(a); - - expect(a).to.deep.equal(b); - expect(a.x.y.c.getTime()).to.equal(b.x.y.c.getTime()); - done(); - }); - - it('should properly clone arrays', function (done) { - - var a = [1,2,3]; - - var b = Hoek.clone(a); - - expect(a).to.deep.equal(b); - done(); - }); - - it('should perform actual copy for shallow keys (no pass by reference)', function (done) { - - var x = Hoek.clone(nestedObj); - var y = Hoek.clone(nestedObj); - - // Date - expect(x.z).to.not.equal(nestedObj.z); - expect(x.z).to.not.equal(y.z); - - // Regex - expect(x.w).to.not.equal(nestedObj.w); - expect(x.w).to.not.equal(y.w); - - // Array - expect(x.v).to.not.equal(nestedObj.v); - expect(x.v).to.not.equal(y.v); - - // Immutable(s) - x.y = 5; - expect(x.y).to.not.equal(nestedObj.y); - expect(x.y).to.not.equal(y.y); - - done(); - }); - - it('should perform actual copy for deep keys (no pass by reference)', function (done) { - - var x = Hoek.clone(nestedObj); - var y = Hoek.clone(nestedObj); - - expect(x.x.c).to.not.equal(nestedObj.x.c); - expect(x.x.c).to.not.equal(y.x.c); - - expect(x.x.c.getTime()).to.equal(nestedObj.x.c.getTime()); - expect(x.x.c.getTime()).to.equal(y.x.c.getTime()); - done(); - }); - - it('copies functions with properties', function (done) { - - var a = { - x: function () { return 1; }, - y: {} - }; - a.x.z = 'string in function'; - a.x.v = function () { return 2; }; - a.y.u = a.x; - - var b = Hoek.clone(a); - expect(b.x()).to.equal(1); - expect(b.x.v()).to.equal(2); - expect(b.y.u).to.equal(b.x); - expect(b.x.z).to.equal('string in function'); - done(); - }); - - it('should copy a buffer', function(done){ - var tls = { - key: new Buffer([1,2,3,4,5]), - cert: new Buffer([1,2,3,4,5,6,10]) - } - - copiedTls = Hoek.clone(tls); - expect(Buffer.isBuffer(copiedTls.key)).to.equal(true); - expect(JSON.stringify(copiedTls.key)).to.equal(JSON.stringify(tls.key)) - expect(Buffer.isBuffer(copiedTls.cert)).to.equal(true); - expect(JSON.stringify(copiedTls.cert)).to.equal(JSON.stringify(tls.cert)) - done(); - }); - }); - - describe('#merge', function () { - - it('does not throw if source is null', function (done) { - - var a = {}; - var b = null; - var c = null; - - expect(function () { - - c = Hoek.merge(a, b); - }).to.not.throw(); - - expect(c).to.equal(a); - done(); - }); - - it('does not throw if source is undefined', function (done) { - - var a = {}; - var b = undefined; - var c = null; - - expect(function () { - - c = Hoek.merge(a, b); - }).to.not.throw(); - - expect(c).to.equal(a); - done(); - }); - - it('throws if source is not an object', function (done) { - - expect(function () { - - var a = {}; - var b = 0; - - Hoek.merge(a, b); - }).to.throw('Invalid source value: must be null, undefined, or an object'); - done(); - }); - - it('throws if target is not an object', function (done) { - - expect(function () { - - var a = 0; - var b = {}; - - Hoek.merge(a, b); - }).to.throw('Invalid target value: must be an object'); - done(); - }); - - it('throws if target is not an array and source is', function (done) { - - expect(function () { - - var a = {}; - var b = [1, 2]; - - Hoek.merge(a, b); - }).to.throw('Cannot merge array onto an object'); - done(); - }); - - it('returns the same object when merging arrays', function (done) { - - var a = []; - var b = [1, 2]; - - expect(Hoek.merge(a, b)).to.equal(a); - done(); - }); - - it('should combine an empty object with a non-empty object', function (done) { - - var a = {}; - var b = nestedObj; - - var c = Hoek.merge(a, b); - expect(a).to.deep.equal(b); - expect(c).to.deep.equal(b); - done(); - }); - - it('should override values in target', function (done) { - - var a = { x: 1, y: 2, z: 3, v: 5, t: 'test', m: 'abc' }; - var b = { x: null, z: 4, v: 0, t: { u: 6 }, m: '123' }; - - var c = Hoek.merge(a, b); - expect(c.x).to.equal(null); - expect(c.y).to.equal(2); - expect(c.z).to.equal(4); - expect(c.v).to.equal(0); - expect(c.m).to.equal('123'); - expect(c.t).to.deep.equal({ u: 6 }); - done(); - }); - - it('should override values in target (flip)', function (done) { - - var a = { x: 1, y: 2, z: 3, v: 5, t: 'test', m: 'abc' }; - var b = { x: null, z: 4, v: 0, t: { u: 6 }, m: '123' }; - - var d = Hoek.merge(b, a); - expect(d.x).to.equal(1); - expect(d.y).to.equal(2); - expect(d.z).to.equal(3); - expect(d.v).to.equal(5); - expect(d.m).to.equal('abc'); - expect(d.t).to.deep.equal('test'); - done(); - }); - }); - - describe('#applyToDefaults', function () { - - var defaults = { - a: 1, - b: 2, - c: { - d: 3, - e: [5, 6] - }, - f: 6, - g: 'test' - }; - - it('should return null if options is false', function (done) { - - var result = Hoek.applyToDefaults(defaults, false); - expect(result).to.equal(null); - done(); - }); - - it('should return a copy of defaults if options is true', function (done) { - - var result = Hoek.applyToDefaults(defaults, true); - expect(result).to.deep.equal(result); - done(); - }); - - it('should apply object to defaults', function (done) { - - var obj = { - a: null, - c: { - e: [4] - }, - f: 0, - g: { - h: 5 - } - }; - - var result = Hoek.applyToDefaults(defaults, obj); - expect(result.c.e).to.deep.equal([4]); - expect(result.a).to.equal(1); - expect(result.b).to.equal(2); - expect(result.f).to.equal(0); - expect(result.g).to.deep.equal({ h: 5 }); - done(); - }); - }); - - describe('#unique', function () { - - it('should ensure uniqueness within array of objects based on subkey', function (done) { - - var a = Hoek.unique(dupsArray, 'x'); - expect(a).to.deep.equal(reducedDupsArray); - done(); - }); - - it('removes duplicated without key', function (done) { - - expect(Hoek.unique([1, 2, 3, 4, 2, 1, 5])).to.deep.equal([1, 2, 3, 4, 5]); - done(); - }); - }); - - describe('#mapToObject', function () { - - it('should return null on null array', function (done) { - - var a = Hoek.mapToObject(null); - expect(a).to.equal(null); - done(); - }); - - it('should convert basic array to existential object', function (done) { - - var keys = [1, 2, 3, 4]; - var a = Hoek.mapToObject(keys); - for (var i in keys) { - expect(a[keys[i]]).to.equal(true); - } - done(); - }); - - it('should convert array of objects to existential object', function (done) { - - var keys = [{ x: 1 }, { x: 2 }, { x: 3 }]; - var subkey = 'x'; - var a = Hoek.mapToObject(keys, subkey); - for (var i in keys) { - expect(a[keys[i][subkey]]).to.equal(true); - } - done(); - }); - }); - - describe('#intersect', function () { - - it('should return the common objects of two arrays', function (done) { - - var array1 = [1, 2, 3, 4, 4, 5, 5]; - var array2 = [5, 4, 5, 6, 7]; - var common = Hoek.intersect(array1, array2); - expect(common.length).to.equal(2); - done(); - }); - - it('should return just the first common object of two arrays', function (done) { - - var array1 = [1, 2, 3, 4, 4, 5, 5]; - var array2 = [5, 4, 5, 6, 7]; - var common = Hoek.intersect(array1, array2, true); - expect(common).to.equal(5); - done(); - }); - - it('should return an empty array if either input is null', function (done) { - - expect(Hoek.intersect([1], null).length).to.equal(0); - expect(Hoek.intersect(null, [1]).length).to.equal(0); - done(); - }); - - it('should return the common objects of object and array', function (done) { - - var array1 = [1, 2, 3, 4, 4, 5, 5]; - var array2 = [5, 4, 5, 6, 7]; - var common = Hoek.intersect(Hoek.mapToObject(array1), array2); - expect(common.length).to.equal(2); - done(); - }); - }); - - describe('#matchKeys', function () { - - it('should match the existing object keys', function (done) { - - var obj = { - a: 1, - b: 2, - c: 3, - d: null - }; - - expect(Hoek.matchKeys(obj, ['b', 'c', 'd', 'e'])).to.deep.equal(['b', 'c', 'd']); - done(); - }); - }); - - describe('#flatten', function () { - - it('should return a flat array', function (done) { - - var result = Hoek.flatten([1, 2, [3, 4, [5, 6], [7], 8], [9], [10, [11, 12]], 13]); - expect(result.length).to.equal(13); - expect(result).to.deep.equal([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]); - done(); - }); - }); - - describe('#removeKeys', function () { - - var objWithHiddenKeys = { - location: { - name: 'San Bruno' - }, - company: { - name: '@WalmartLabs' - } - }; - - it('should delete params with definition\'s hide set to true', function (done) { - - var a = Hoek.removeKeys(objWithHiddenKeys, ['location']); - expect(objWithHiddenKeys.location).to.not.exist; - expect(objWithHiddenKeys.company).to.exist; - done(); - }); - }); - - describe('#reach', function () { - - var obj = { - a: { - b: { - c: { - d: 1, - e: 2 - }, - f: 'hello' - }, - g: { - h: 3 - } - }, - i: function () { } - }; - - it('returns a valid member', function (done) { - - expect(Hoek.reach(obj, 'a.b.c.d')).to.equal(1); - done(); - }); - - it('returns null on null object', function (done) { - - expect(Hoek.reach(null, 'a.b.c.d')).to.not.exist; - done(); - }); - - it('returns null on missing member', function (done) { - - expect(Hoek.reach(obj, 'a.b.c.d.x')).to.not.exist; - done(); - }); - - it('returns null on invalid member', function (done) { - - expect(Hoek.reach(obj, 'a.b.c.d-.x')).to.not.exist; - done(); - }); - - it('returns function member', function (done) { - - expect(typeof Hoek.reach(obj, 'i')).to.equal('function'); - done(); - }); - }); - - describe('#inheritAsync', function () { - - it('should inherit selected methods and wrap in async call', function (done) { - - var proto = { - a: function () { - return 'a!'; - }, - b: function () { - return 'b!'; - }, - c: function () { - throw new Error('c!'); - } - }; - - var targetFunc = function () { }; - targetFunc.prototype.c = function () { - - return 'oops'; - }; - - Hoek.inheritAsync(targetFunc, proto, ['a', 'c']); - var target = new targetFunc(); - - expect(typeof target.a).to.equal('function'); - expect(typeof target.c).to.equal('function'); - expect(target.b).to.not.exist; - - target.a(function (err, result) { - - expect(err).to.not.exist; - expect(result).to.equal('a!'); - - target.c(function (err, result) { - - expect(result).to.not.exist; - expect(err.message).to.equal('c!'); - done(); - }); - }); - }); - }); - - describe('#callStack', function () { - - it('should return the full call stack', function (done) { - - var stack = Hoek.callStack(); - expect(stack[0][0]).to.contain('index.js'); - expect(stack[0][2]).to.equal(30); - done(); - }); - }); - - describe('#displayStack ', function () { - - it('should return the full call stack for display', function (done) { - - var stack = Hoek.displayStack(); - expect(stack[0]).to.contain('test/index.js:'); - done(); - }); - - it('should include constructor functions correctly', function (done) { - - var Something = function (next) { - - next(); - }; - - var something = new Something(function () { - - var stack = Hoek.displayStack(); - expect(stack[1]).to.contain('new Something'); - done(); - }); - }); - }); - - describe('#abort', function () { - - it('should exit process when not in test mode', function (done) { - - var env = process.env.NODE_ENV; - var write = process.stdout.write; - var exit = process.exit; - - process.env.NODE_ENV = 'nottatest'; - process.stdout.write = function () { }; - process.exit = function (state) { - - process.exit = exit; - process.env.NODE_ENV = env; - process.stdout.write = write; - - expect(state).to.equal(1); - done(); - }; - - Hoek.abort('Boom'); - }); - - it('should throw when not in test mode and abortThrow is true', function (done) { - - var env = process.env.NODE_ENV; - process.env.NODE_ENV = 'nottatest'; - Hoek.abortThrow = true; - - var fn = function () { - - Hoek.abort('my error message'); - }; - - expect(fn).to.throw('my error message'); - Hoek.abortThrow = false; - process.env.NODE_ENV = env; - - done(); - }); - - - it('should respect hideStack argument', function (done) { - - var env = process.env.NODE_ENV; - var write = process.stdout.write; - var exit = process.exit; - var output = ''; - - process.exit = function () { }; - process.env.NODE_ENV = ''; - process.stdout.write = function (message) { - - output = message; - }; - - Hoek.abort('my error message', true); - - process.env.NODE_ENV = env; - process.stdout.write = write; - process.exit = exit; - - expect(output).to.equal('ABORT: my error message\n\t\n'); - - done(); - }); - - it('should default to showing stack', function (done) { - - var env = process.env.NODE_ENV; - var write = process.stdout.write; - var exit = process.exit; - var output = ''; - - process.exit = function () { }; - process.env.NODE_ENV = ''; - process.stdout.write = function (message) { - - output = message; - }; - - Hoek.abort('my error message'); - - process.env.NODE_ENV = env; - process.stdout.write = write; - process.exit = exit; - - expect(output).to.contain('index.js'); - - done(); - }); - }); - - describe('#assert', function () { - - it('should throw an Error when using assert in a test', function (done) { - - var fn = function () { - - Hoek.assert(false, 'my error message'); - }; - - expect(fn).to.throw('my error message'); - done(); - }); - - it('should throw an Error when using assert in a test with no message', function (done) { - - var fn = function () { - - Hoek.assert(false); - }; - - expect(fn).to.throw('Unknown error'); - done(); - }); - - it('should throw an Error when using assert in a test with multipart message', function (done) { - - var fn = function () { - - Hoek.assert(false, 'This', 'is', 'my message'); - }; - - expect(fn).to.throw('This is my message'); - done(); - }); - - it('should throw an Error when using assert in a test with object message', function (done) { - - var fn = function () { - - Hoek.assert(false, 'This', 'is', { spinal: 'tap' }); - }; - - expect(fn).to.throw('This is {"spinal":"tap"}'); - done(); - }); - - it('should throw an Error when using assert in a test with error object message', function (done) { - - var fn = function () { - - Hoek.assert(false, new Error('This is spinal tap')); - }; - - expect(fn).to.throw('This is spinal tap'); - done(); - }); - }); - - describe('#loadDirModules', function () { - - it('should load modules from directory', function (done) { - - var target = {}; - Hoek.loadDirModules(__dirname + '/modules', ['test2'], target); - expect(target.Test1.x).to.equal(1); - expect(target.Test2).to.not.exist; - expect(target.Test3.z).to.equal(3); - done(); - }); - - it('should list modules from directory into function', function (done) { - - var target = {}; - Hoek.loadDirModules(__dirname + '/modules', ['test2'], function (path, name, capName) { - - target[name] = capName; - }); - - expect(target.test1).to.equal('Test1'); - expect(target.test2).to.not.exist; - expect(target.test3).to.equal('Test3'); - done(); - }); - }); - - describe('#rename', function () { - - it('should rename object key', function (done) { - - var a = { b: 'c' }; - Hoek.rename(a, 'b', 'x'); - expect(a.b).to.not.exist; - expect(a.x).to.equal('c'); - done(); - }); - }); - - describe('Timer', function () { - - it('should return time elapsed', function (done) { - - var timer = new Hoek.Timer(); - setTimeout(function () { - - expect(timer.elapsed()).to.be.above(9); - done(); - }, 12); - }); - }); - - describe('#loadPackage', function () { - - it('should', function (done) { - - var pack = Hoek.loadPackage(); - expect(pack.name).to.equal('hoek'); - done(); - }); - }); - - describe('#escapeRegex', function () { - - it('should escape all special regular expression characters', function (done) { - - var a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\/`"(>)[<]d{}s,'); - expect(a).to.equal('4\\^f\\$s\\.4\\*5\\+\\-_\\?%\\=#\\!\\:@\\|~\\\\\\/`"\\(>\\)\\[<\\]d\\{\\}s\\,'); - done(); - }); - }); - - describe('#toss', function () { - - it('should call callback with new error', function (done) { - - var callback = function (err) { - - expect(err).to.exist; - expect(err.message).to.equal('bug'); - done(); - }; - - Hoek.toss(true, 'feature', callback); - Hoek.toss(false, 'bug', callback); - }); - - it('should call callback with new error and no message', function (done) { - - Hoek.toss(false, function (err) { - - expect(err).to.exist; - expect(err.message).to.equal(''); - done(); - }); - }); - - it('should call callback with error condition', function (done) { - - Hoek.toss(new Error('boom'), function (err) { - - expect(err).to.exist; - expect(err.message).to.equal('boom'); - done(); - }); - }); - - it('should call callback with new error using message with error condition', function (done) { - - Hoek.toss(new Error('ka'), 'boom', function (err) { - - expect(err).to.exist; - expect(err.message).to.equal('boom'); - done(); - }); - }); - - it('should call callback with new error using passed error with error condition', function (done) { - - Hoek.toss(new Error('ka'), new Error('boom'), function (err) { - - expect(err).to.exist; - expect(err.message).to.equal('boom'); - done(); - }); - }); - }); - - describe('Base64Url', function () { - - var base64str = 'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0-P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn-AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq-wsbKztLW2t7i5uru8vb6_wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t_g4eLj5OXm5-jp6uvs7e7v8PHy8_T19vf4-fr7_P3-_w'; - var str = unescape('%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20%21%22%23%24%25%26%27%28%29*+%2C-./0123456789%3A%3B%3C%3D%3E%3F@ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF'); - - describe('#base64urlEncode', function () { - - it('should base64 URL-safe a string', function (done) { - - expect(Hoek.base64urlEncode(str)).to.equal(base64str); - done(); - }); - }); - - describe('#base64urlDecode', function () { - - it('should un-base64 URL-safe a string', function (done) { - - expect(Hoek.base64urlDecode(base64str)).to.equal(str); - done(); - }); - - it('should return error on undefined input', function (done) { - - expect(Hoek.base64urlDecode().message).to.exist; - done(); - }); - - it('should return error on invalid input', function (done) { - - expect(Hoek.base64urlDecode('*').message).to.exist; - done(); - }); - }); - }); - - describe('#escapeHeaderAttribute', function () { - - it('should not alter ascii values', function (done) { - - var a = Hoek.escapeHeaderAttribute('My Value'); - expect(a).to.equal('My Value'); - done(); - }); - - it('should escape all special HTTP header attribute characters', function (done) { - - var a = Hoek.escapeHeaderAttribute('I said go!!!#"' + String.fromCharCode(92)); - expect(a).to.equal('I said go!!!#\\"\\\\'); - done(); - }); - - it('should throw on large unicode characters', function (done) { - - var fn = function () { - - Hoek.escapeHeaderAttribute('this is a test' + String.fromCharCode(500) + String.fromCharCode(300)); - }; - - expect(fn).to.throw(Error); - done(); - }); - - it('should throw on CRLF to prevent response splitting', function (done) { - - var fn = function () { - - Hoek.escapeHeaderAttribute('this is a test\r\n'); - }; - - expect(fn).to.throw(Error); - done(); - }); - }); - - describe('#escapeHtml', function () { - - it('should escape all special HTML characters', function (done) { - - var a = Hoek.escapeHtml('&<>"\'`'); - expect(a).to.equal('&<>"'`'); - done(); - }); - - it('should return empty string on falsy input', function (done) { - - var a = Hoek.escapeHtml(''); - expect(a).to.equal(''); - done(); - }); - - it('should return unchanged string on no reserved input', function (done) { - - var a = Hoek.escapeHtml('abc'); - expect(a).to.equal('abc'); - done(); - }); - }); - - describe('#printEvent', function () { - - it('outputs event as string', function (done) { - - var event = { - timestamp: (new Date(2013, 1, 1, 6, 30, 45, 123)).getTime(), - tags: ['a', 'b', 'c'], - data: { some: 'data' } - }; - - Hoek.consoleFunc = function (string) { - - Hoek.consoleFunc = console.log; - expect(string).to.equal('130201/063045.123, a, {"some":"data"}'); - done(); - }; - - Hoek.printEvent(event); - }); - - it('outputs JSON error', function (done) { - - var event = { - timestamp: (new Date(2013, 1, 1, 6, 30, 45, 123)).getTime(), - tags: ['a', 'b', 'c'], - data: { some: 'data' } - }; - - event.data.a = event.data; - - Hoek.consoleFunc = function (string) { - - Hoek.consoleFunc = console.log; - expect(string).to.equal('130201/063045.123, a, JSON Error: Converting circular structure to JSON'); - done(); - }; - - Hoek.printEvent(event); - }); - }); - - describe('#nextTick', function () { - - it('calls the provided callback on nextTick', function (done) { - - var a = 0; - - var inc = function (step, next) { - - a += step; - next(); - }; - - var ticked = Hoek.nextTick(inc); - - ticked(5, function () { - - expect(a).to.equal(6); - done(); - }); - - expect(a).to.equal(0); - inc(1, function () { - - expect(a).to.equal(1); - }); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js deleted file mode 100755 index 3f41e601..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js +++ /dev/null @@ -1 +0,0 @@ -exports.x = 1; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js deleted file mode 100755 index 38556b27..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js +++ /dev/null @@ -1 +0,0 @@ -exports.y = 2; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js deleted file mode 100755 index 436b860b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js +++ /dev/null @@ -1 +0,0 @@ -exports.z = 3; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore deleted file mode 100644 index 77ba16cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml deleted file mode 100755 index 047f7e3d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE deleted file mode 100755 index e699a7bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2013, Eran Hammer. -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 Eran Hammer 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 ERAN HAMMER 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile deleted file mode 100755 index 9e7138c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -test: - @./node_modules/.bin/lab -test-cov: - @./node_modules/.bin/lab -r threshold -t 100 -test-cov-html: - @./node_modules/.bin/lab -r html -o coverage.html -complexity: - @./node_modules/.bin/cr -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/README.md deleted file mode 100755 index 98a6e025..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# sntp - -An SNTP v4 client (RFC4330) for node. Simpy connects to the NTP or SNTP server requested and returns the server time -along with the roundtrip duration and clock offset. To adjust the local time to the NTP time, add the returned `t` offset -to the local time. - -[![Build Status](https://secure.travis-ci.org/hueniverse/sntp.png)](http://travis-ci.org/hueniverse/sntp) - -# Usage - -```javascript -var Sntp = require('sntp'); - -// All options are optional - -var options = { - host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org - port: 123, // Defaults to 123 (NTP) - resolveReference: true, // Default to false (not resolving) - timeout: 1000 // Defaults to zero (no timeout) -}; - -// Request server time - -Sntp.time(options, function (err, time) { - - if (err) { - console.log('Failed: ' + err.message); - process.exit(1); - } - - console.log('Local clock is off by: ' + time.t + ' milliseconds'); - process.exit(0); -}); -``` - -If an application needs to maintain continuous time synchronization, the module provides a stateful method for -querying the current offset only when the last one is too old (defaults to daily). - -```javascript -// Request offset once - -Sntp.offset(function (err, offset) { - - console.log(offset); // New (served fresh) - - // Request offset again - - Sntp.offset(function (err, offset) { - - console.log(offset); // Identical (served from cache) - }); -}); -``` - -To set a background offset refresh, start the interval and use the provided now() method. If for any reason the -client fails to obtain an up-to-date offset, the current system clock is used. - -```javascript -var before = Sntp.now(); // System time without offset - -Sntp.start(function () { - - var now = Sntp.now(); // With offset - Sntp.stop(); -}); -``` - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js deleted file mode 100755 index 0303f6dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js +++ /dev/null @@ -1,16 +0,0 @@ -var Sntp = require('../lib'); - -// Request offset once - -Sntp.offset(function (err, offset) { - - console.log(offset); // New (served fresh) - - // Request offset again - - Sntp.offset(function (err, offset) { - - console.log(offset); // Identical (served from cache) - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js deleted file mode 100755 index bd70d0e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js +++ /dev/null @@ -1,25 +0,0 @@ -var Sntp = require('../lib'); - -// All options are optional - -var options = { - host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org - port: 123, // Defaults to 123 (NTP) - resolveReference: true, // Default to false (not resolving) - timeout: 1000 // Defaults to zero (no timeout) -}; - -// Request server time - -Sntp.time(options, function (err, time) { - - if (err) { - console.log('Failed: ' + err.message); - process.exit(1); - } - - console.log(time); - console.log('Local clock is off by: ' + time.t + ' milliseconds'); - process.exit(0); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js deleted file mode 100755 index e492cd93..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js +++ /dev/null @@ -1,409 +0,0 @@ -// Load modules - -var Dgram = require('dgram'); -var Dns = require('dns'); -var Hoek = require('hoek'); - - -// Declare internals - -var internals = {}; - - -exports.time = function (options, callback) { - - if (arguments.length !== 2) { - callback = arguments[0]; - options = {}; - } - - var settings = Hoek.clone(options); - settings.host = settings.host || 'pool.ntp.org'; - settings.port = settings.port || 123; - settings.resolveReference = settings.resolveReference || false; - - // Declare variables used by callback - - var timeoutId = 0; - var sent = 0; - - // Ensure callback is only called once - - var isFinished = false; - var finish = function (err, result) { - - if (timeoutId) { - clearTimeout(timeoutId); - timeoutId = 0; - } - - if (!isFinished) { - isFinished = true; - socket.removeAllListeners(); - socket.close(); - return callback(err, result); - } - }; - - // Create UDP socket - - var socket = Dgram.createSocket('udp4'); - - socket.once('error', function (err) { - - return finish(err); - }); - - // Listen to incoming messages - - socket.on('message', function (buffer, rinfo) { - - var received = Date.now(); - - var message = new internals.NtpMessage(buffer); - if (!message.isValid) { - return finish(new Error('Invalid server response'), message); - } - - if (message.originateTimestamp !== sent) { - return finish(new Error('Wrong originate timestamp'), message); - } - - // Timestamp Name ID When Generated - // ------------------------------------------------------------ - // Originate Timestamp T1 time request sent by client - // Receive Timestamp T2 time request received by server - // Transmit Timestamp T3 time reply sent by server - // Destination Timestamp T4 time reply received by client - // - // The roundtrip delay d and system clock offset t are defined as: - // - // d = (T4 - T1) - (T3 - T2) t = ((T2 - T1) + (T3 - T4)) / 2 - - var T1 = message.originateTimestamp; - var T2 = message.receiveTimestamp; - var T3 = message.transmitTimestamp; - var T4 = received; - - message.d = (T4 - T1) - (T3 - T2); - message.t = ((T2 - T1) + (T3 - T4)) / 2; - message.receivedLocally = received; - - if (!settings.resolveReference || - message.stratum !== 'secondary') { - - return finish(null, message); - } - - // Resolve reference IP address - - Dns.reverse(message.referenceId, function (err, domains) { - - if (!err) { - message.referenceHost = domains[0]; - } - - return finish(null, message); - }); - }); - - // Set timeout - - if (settings.timeout) { - timeoutId = setTimeout(function () { - - timeoutId = 0; - return finish(new Error('Timeout')); - }, settings.timeout); - } - - // Construct NTP message - - var message = new Buffer(48); - for (var i = 0; i < 48; i++) { // Zero message - message[i] = 0; - } - - message[0] = (0 << 6) + (4 << 3) + (3 << 0) // Set version number to 4 and Mode to 3 (client) - sent = Date.now(); - internals.fromMsecs(sent, message, 40); // Set transmit timestamp (returns as originate) - - // Send NTP request - - socket.send(message, 0, message.length, settings.port, settings.host, function (err, bytes) { - - if (err || - bytes !== 48) { - - return finish(err || new Error('Could not send entire message')); - } - }); -}; - - -internals.NtpMessage = function (buffer) { - - this.isValid = false; - - // Validate - - if (buffer.length !== 48) { - return; - } - - // Leap indicator - - var li = (buffer[0] >> 6); - switch (li) { - case 0: this.leapIndicator = 'no-warning'; break; - case 1: this.leapIndicator = 'last-minute-61'; break; - case 2: this.leapIndicator = 'last-minute-59'; break; - case 3: this.leapIndicator = 'alarm'; break; - } - - // Version - - var vn = ((buffer[0] & 0x38) >> 3); - this.version = vn; - - // Mode - - var mode = (buffer[0] & 0x7); - switch (mode) { - case 1: this.mode = 'symmetric-active'; break; - case 2: this.mode = 'symmetric-passive'; break; - case 3: this.mode = 'client'; break; - case 4: this.mode = 'server'; break; - case 5: this.mode = 'broadcast'; break; - case 0: - case 6: - case 7: this.mode = 'reserved'; break; - } - - // Stratum - - var stratum = buffer[1]; - if (stratum === 0) { - this.stratum = 'death'; - } - else if (stratum === 1) { - this.stratum = 'primary'; - } - else if (stratum <= 15) { - this.stratum = 'secondary'; - } - else { - this.stratum = 'reserved'; - } - - // Poll interval (msec) - - this.pollInterval = Math.round(Math.pow(2, buffer[2])) * 1000; - - // Precision (msecs) - - this.precision = Math.pow(2, buffer[3]) * 1000; - - // Root delay (msecs) - - var rootDelay = 256 * (256 * (256 * buffer[4] + buffer[5]) + buffer[6]) + buffer[7]; - this.rootDelay = 1000 * (rootDelay / 0x10000); - - // Root dispersion (msecs) - - this.rootDispersion = ((buffer[8] << 8) + buffer[9] + ((buffer[10] << 8) + buffer[11]) / Math.pow(2, 16)) * 1000; - - // Reference identifier - - this.referenceId = ''; - switch (this.stratum) { - case 'death': - case 'primary': - this.referenceId = String.fromCharCode(buffer[12]) + String.fromCharCode(buffer[13]) + String.fromCharCode(buffer[14]) + String.fromCharCode(buffer[15]); - break; - case 'secondary': - this.referenceId = '' + buffer[12] + '.' + buffer[13] + '.' + buffer[14] + '.' + buffer[15]; - break; - } - - // Reference timestamp - - this.referenceTimestamp = internals.toMsecs(buffer, 16); - - // Originate timestamp - - this.originateTimestamp = internals.toMsecs(buffer, 24); - - // Receive timestamp - - this.receiveTimestamp = internals.toMsecs(buffer, 32); - - // Transmit timestamp - - this.transmitTimestamp = internals.toMsecs(buffer, 40); - - // Validate - - if (this.version === 4 && - this.stratum !== 'reserved' && - this.mode === 'server' && - this.originateTimestamp && - this.receiveTimestamp && - this.transmitTimestamp) { - - this.isValid = true; - } - - return this; -}; - - -internals.toMsecs = function (buffer, offset) { - - var seconds = 0; - var fraction = 0; - - for (var i = 0; i < 4; ++i) { - seconds = (seconds * 256) + buffer[offset + i]; - } - - for (i = 4; i < 8; ++i) { - fraction = (fraction * 256) + buffer[offset + i]; - } - - return ((seconds - 2208988800 + (fraction / Math.pow(2, 32))) * 1000); -}; - - -internals.fromMsecs = function (ts, buffer, offset) { - - var seconds = Math.floor(ts / 1000) + 2208988800; - var fraction = Math.round((ts % 1000) / 1000 * Math.pow(2, 32)); - - buffer[offset + 0] = (seconds & 0xFF000000) >> 24; - buffer[offset + 1] = (seconds & 0x00FF0000) >> 16; - buffer[offset + 2] = (seconds & 0x0000FF00) >> 8; - buffer[offset + 3] = (seconds & 0x000000FF); - - buffer[offset + 4] = (fraction & 0xFF000000) >> 24; - buffer[offset + 5] = (fraction & 0x00FF0000) >> 16; - buffer[offset + 6] = (fraction & 0x0000FF00) >> 8; - buffer[offset + 7] = (fraction & 0x000000FF); -}; - - -// Offset singleton - -internals.last = { - offset: 0, - expires: 0, - host: '', - port: 0 -}; - - -exports.offset = function (options, callback) { - - if (arguments.length !== 2) { - callback = arguments[0]; - options = {}; - } - - var now = Date.now(); - var clockSyncRefresh = options.clockSyncRefresh || 24 * 60 * 60 * 1000; // Daily - - if (internals.last.offset && - internals.last.host === options.host && - internals.last.port === options.port && - now < internals.last.expires) { - - process.nextTick(function () { - - callback(null, internals.last.offset); - }); - - return; - } - - exports.time(options, function (err, time) { - - if (err) { - return callback(err, 0); - } - - internals.last = { - offset: Math.round(time.t), - expires: now + clockSyncRefresh, - host: options.host, - port: options.port - }; - - return callback(null, internals.last.offset); - }); -}; - - -// Now singleton - -internals.now = { - intervalId: 0 -}; - - -exports.start = function (options, callback) { - - if (arguments.length !== 2) { - callback = arguments[0]; - options = {}; - } - - if (internals.now.intervalId) { - process.nextTick(function () { - - callback(); - }); - - return; - } - - exports.offset(options, function (err, offset) { - - internals.now.intervalId = setInterval(function () { - - exports.offset(options, function () { }); - }, options.clockSyncRefresh || 24 * 60 * 60 * 1000); // Daily - - return callback(); - }); -}; - - -exports.stop = function () { - - if (!internals.now.intervalId) { - return; - } - - clearInterval(internals.now.intervalId); - internals.now.intervalId = 0; -}; - - -exports.isLive = function () { - - return !!internals.now.intervalId; -}; - - -exports.now = function () { - - var now = Date.now(); - if (!exports.isLive() || - now >= internals.last.expires) { - - return now; - } - - return now + internals.last.offset; -}; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/package.json deleted file mode 100755 index 8ce7a61f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "sntp", - "description": "SNTP Client", - "version": "0.2.4", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [], - "repository": { - "type": "git", - "url": "git://github.com/hueniverse/sntp" - }, - "main": "index", - "keywords": [ - "sntp", - "ntp", - "time" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "hoek": "0.9.x" - }, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/hueniverse/sntp/raw/master/LICENSE" - } - ], - "readme": "# sntp\n\nAn SNTP v4 client (RFC4330) for node. Simpy connects to the NTP or SNTP server requested and returns the server time\nalong with the roundtrip duration and clock offset. To adjust the local time to the NTP time, add the returned `t` offset\nto the local time.\n\n[![Build Status](https://secure.travis-ci.org/hueniverse/sntp.png)](http://travis-ci.org/hueniverse/sntp)\n\n# Usage\n\n```javascript\nvar Sntp = require('sntp');\n\n// All options are optional\n\nvar options = {\n host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org\n port: 123, // Defaults to 123 (NTP)\n resolveReference: true, // Default to false (not resolving)\n timeout: 1000 // Defaults to zero (no timeout)\n};\n\n// Request server time\n\nSntp.time(options, function (err, time) {\n\n if (err) {\n console.log('Failed: ' + err.message);\n process.exit(1);\n }\n\n console.log('Local clock is off by: ' + time.t + ' milliseconds');\n process.exit(0);\n});\n```\n\nIf an application needs to maintain continuous time synchronization, the module provides a stateful method for\nquerying the current offset only when the last one is too old (defaults to daily).\n\n```javascript\n// Request offset once\n\nSntp.offset(function (err, offset) {\n\n console.log(offset); // New (served fresh)\n\n // Request offset again\n\n Sntp.offset(function (err, offset) {\n\n console.log(offset); // Identical (served from cache)\n });\n});\n```\n\nTo set a background offset refresh, start the interval and use the provided now() method. If for any reason the\nclient fails to obtain an up-to-date offset, the current system clock is used.\n\n```javascript\nvar before = Sntp.now(); // System time without offset\n\nSntp.start(function () {\n\n var now = Sntp.now(); // With offset\n Sntp.stop();\n});\n```\n\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/hueniverse/sntp/issues" - }, - "homepage": "https://github.com/hueniverse/sntp", - "_id": "sntp@0.2.4", - "dist": { - "shasum": "657ad142a4f42d39c3e8f4b507ec2dd8f0ecfd9f" - }, - "_from": "sntp@0.2.x", - "_resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js deleted file mode 100755 index 38a55346..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js +++ /dev/null @@ -1,359 +0,0 @@ -// Load modules - -var Dgram = require('dgram'); -var Lab = require('lab'); -var Sntp = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('SNTP', function () { - - describe('#time', function () { - - it('returns consistent result over multiple tries', function (done) { - - Sntp.time(function (err, time) { - - expect(err).to.not.exist; - expect(time).to.exist; - var t1 = time.t; - - Sntp.time(function (err, time) { - - expect(err).to.not.exist; - expect(time).to.exist; - var t2 = time.t; - expect(Math.abs(t1 - t2)).is.below(200); - done(); - }); - }); - }); - - it('resolves reference IP', function (done) { - - Sntp.time({ host: 'ntp.exnet.com', resolveReference: true }, function (err, time) { - - expect(err).to.not.exist; - expect(time).to.exist; - expect(time.referenceHost).to.exist; - done(); - }); - }); - - it('times out on no response', function (done) { - - Sntp.time({ port: 124, timeout: 100 }, function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.equal('Timeout'); - done(); - }); - }); - - it('errors on error event', function (done) { - - var orig = Dgram.createSocket; - Dgram.createSocket = function (type) { - - Dgram.createSocket = orig; - var socket = Dgram.createSocket(type); - process.nextTick(function () { socket.emit('error', new Error('Fake')) }); - return socket; - }; - - Sntp.time(function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.equal('Fake'); - done(); - }); - }); - - it('times out on invalid host', function (done) { - - Sntp.time({ host: 'error', timeout: 10000 }, function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.equal('getaddrinfo ENOTFOUND'); - done(); - }); - }); - - it('fails on bad response buffer size', function (done) { - - var server = Dgram.createSocket('udp4'); - server.on('message', function (message, remote) { - var message = new Buffer(10); - server.send(message, 0, message.length, remote.port, remote.address, function (err, bytes) { - - server.close(); - }); - }); - - server.bind(49123); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid server response'); - done(); - }); - }); - - var messup = function (bytes) { - - var server = Dgram.createSocket('udp4'); - server.on('message', function (message, remote) { - - var message = new Buffer([ - 0x24, 0x01, 0x00, 0xe3, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x41, 0x43, 0x54, 0x53, - 0xd4, 0xa8, 0x2d, 0xc7, - 0x1c, 0x5d, 0x49, 0x1b, - 0xd4, 0xa8, 0x2d, 0xe6, - 0x67, 0xef, 0x9d, 0xb2, - 0xd4, 0xa8, 0x2d, 0xe6, - 0x71, 0xed, 0xb5, 0xfb, - 0xd4, 0xa8, 0x2d, 0xe6, - 0x71, 0xee, 0x6c, 0xc5 - ]); - - for (var i = 0, il = bytes.length; i < il; ++i) { - message[bytes[i][0]] = bytes[i][1]; - } - - server.send(message, 0, message.length, remote.port, remote.address, function (err, bytes) { - - server.close(); - }); - }); - - server.bind(49123); - }; - - it('fails on bad version', function (done) { - - messup([[0, (0 << 6) + (3 << 3) + (4 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.version).to.equal(3); - expect(err.message).to.equal('Invalid server response'); - done(); - }); - }); - - it('fails on bad originate timestamp and alarm li', function (done) { - - messup([[0, (3 << 6) + (4 << 3) + (4 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(err.message).to.equal('Wrong originate timestamp'); - expect(time.leapIndicator).to.equal('alarm'); - done(); - }); - }); - - it('returns time with death stratum and last61 li', function (done) { - - messup([[0, (1 << 6) + (4 << 3) + (4 << 0)], [1, 0]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(time.stratum).to.equal('death'); - expect(time.leapIndicator).to.equal('last-minute-61'); - done(); - }); - }); - - it('returns time with reserved stratum and last59 li', function (done) { - - messup([[0, (2 << 6) + (4 << 3) + (4 << 0)], [1, 0x1f]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(time.stratum).to.equal('reserved'); - expect(time.leapIndicator).to.equal('last-minute-59'); - done(); - }); - }); - - it('fails on bad mode (symmetric-active)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (1 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('symmetric-active'); - done(); - }); - }); - - it('fails on bad mode (symmetric-passive)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (2 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('symmetric-passive'); - done(); - }); - }); - - it('fails on bad mode (client)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (3 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('client'); - done(); - }); - }); - - it('fails on bad mode (broadcast)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (5 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('broadcast'); - done(); - }); - }); - - it('fails on bad mode (reserved)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (6 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('reserved'); - done(); - }); - }); - }); - - describe('#offset', function () { - - it('gets the current offset', function (done) { - - Sntp.offset(function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.not.equal(0); - done(); - }); - }); - - it('gets the current offset from cache', function (done) { - - Sntp.offset(function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.not.equal(0); - var offset1 = offset; - Sntp.offset({}, function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.equal(offset1); - done(); - }); - }); - }); - - it('fails getting the current offset on invalid server', function (done) { - - Sntp.offset({ host: 'error' }, function (err, offset) { - - expect(err).to.exist; - expect(offset).to.equal(0); - done(); - }); - }); - }); - - describe('#now', function () { - - it('starts auto-sync, gets now, then stops', function (done) { - - Sntp.stop(); - - var before = Sntp.now(); - expect(before).to.equal(Date.now()); - - Sntp.start(function () { - - var now = Sntp.now(); - expect(now).to.not.equal(Date.now()); - Sntp.stop(); - - done(); - }); - }); - - it('starts twice', function (done) { - - Sntp.start(function () { - - Sntp.start(function () { - - var now = Sntp.now(); - expect(now).to.not.equal(Date.now()); - Sntp.stop(); - - done(); - }); - }); - }); - - it('starts auto-sync, gets now, waits, gets again after timeout', function (done) { - - Sntp.stop(); - - var before = Sntp.now(); - expect(before).to.equal(Date.now()); - - Sntp.start({ clockSyncRefresh: 100 }, function () { - - var now = Sntp.now(); - expect(now).to.not.equal(Date.now()); - expect(now).to.equal(Sntp.now()); - - setTimeout(function () { - - expect(Sntp.now()).to.not.equal(now); - Sntp.stop(); - done(); - }, 110); - }); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/package.json deleted file mode 100755 index 8bf4c5c7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "hawk", - "description": "HTTP Hawk Authentication Scheme", - "version": "1.0.0", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [], - "repository": { - "type": "git", - "url": "git://github.com/hueniverse/hawk" - }, - "main": "index", - "keywords": [ - "http", - "authentication", - "scheme", - "hawk" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "hoek": "0.9.x", - "boom": "0.4.x", - "cryptiles": "0.2.x", - "sntp": "0.2.x" - }, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x", - "localStorage": "1.0.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/hueniverse/hawk/raw/master/LICENSE" - } - ], - "readme": "![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png)\n\n<img align=\"right\" src=\"https://raw.github.com/hueniverse/hawk/master/images/logo.png\" /> **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial\nHTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz).\n\nCurrent version: **1.0**\n\n[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk)\n\n# Table of Content\n\n- [**Introduction**](#introduction)\n - [Replay Protection](#replay-protection)\n - [Usage Example](#usage-example)\n - [Protocol Example](#protocol-example)\n - [Payload Validation](#payload-validation)\n - [Response Payload Validation](#response-payload-validation)\n - [Browser Support and Considerations](#browser-support-and-considerations)\n<p></p>\n- [**Single URI Authorization**](#single-uri-authorization)\n - [Usage Example](#bewit-usage-example)\n<p></p>\n- [**Security Considerations**](#security-considerations)\n - [MAC Keys Transmission](#mac-keys-transmission)\n - [Confidentiality of Requests](#confidentiality-of-requests)\n - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers)\n - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials)\n - [Entropy of Keys](#entropy-of-keys)\n - [Coverage Limitations](#coverage-limitations)\n - [Future Time Manipulation](#future-time-manipulation)\n - [Client Clock Poisoning](#client-clock-poisoning)\n - [Bewit Limitations](#bewit-limitations)\n - [Host Header Forgery](#host-header-forgery)\n<p></p>\n- [**Frequently Asked Questions**](#frequently-asked-questions)\n<p></p>\n- [**Acknowledgements**](#acknowledgements)\n\n# Introduction\n\n**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with\npartial cryptographic verification of the request and response, covering the HTTP method, request URI, host,\nand optionally the request payload.\n\nSimilar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of\nclient credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme,\nthe key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is\nincluded in its place.\n\nHowever, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of\nreplay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less\n\"chattiness\" (interaction with the server).\n\nAlso unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because\nthe client and server must both have access to the key material in the clear.\n\nThe primary design goals of this scheme are to:\n* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources,\n* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where\n to send an authenticated request), and\n* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client\n failure to validate the server's identity as part of its TLS handshake.\n\nIn addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using\na query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk).\n\nThe **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server,\nwhich is beyond the scope of this module. Typically, the shared credentials are established via an initial\nTLS-protected phase or derived from some other shared confidential information available to both the client\nand the server.\n\n\n## Replay Protection\n\nWithout replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more \nthan once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when \nmaking requests. This gives the server enough information to prevent replay attacks.\n\nThe nonce is generated by the client, and is a string unique across all requests with the same timestamp and\nkey identifier combination. \n\nThe timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards\nare rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks.\nBy default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in\npractice translates to a maximum of 2 minutes as the skew can be positive or negative).\n\nUsing a timestamp requires the client's clock to be in sync with the server's clock. **Hawk** requires both the client\nclock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types\n(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response\nto a bad timestamp.\n\nThere is no expectation that the client will adjust its system clock to match the server (in fact, this would be a\npotential attack vector). Instead, the client only uses the server's time to calculate an offset used only\nfor communications with that particular server. The protocol rewards clients with synchronized clocks by reducing\nthe number of round trips required to authenticate the first request.\n\n\n## Usage Example\n\nServer code:\n\n```javascript\nvar Http = require('http');\nvar Hawk = require('hawk');\n\n\n// Credentials lookup function\n\nvar credentialsFunc = function (id, callback) {\n\n var credentials = {\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256',\n user: 'Steve'\n };\n\n return callback(null, credentials);\n};\n\n// Create HTTP server\n\nvar handler = function (req, res) {\n\n // Authenticate incoming request\n\n Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {\n\n // Prepare response\n\n var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!');\n var headers = { 'Content-Type': 'text/plain' };\n\n // Generate Server-Authorization response header\n\n var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers['Content-Type'] });\n headers['Server-Authorization'] = header;\n\n // Send the response back\n\n res.writeHead(!err ? 200 : 401, headers);\n res.end(payload);\n });\n};\n\n// Start server\n\nHttp.createServer(handler).listen(8000, 'example.com');\n```\n\nClient code:\n\n```javascript\nvar Request = require('request');\nvar Hawk = require('hawk');\n\n\n// Client credentials\n\nvar credentials = {\n id: 'dh37fgj492je',\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256'\n}\n\n// Request options\n\nvar requestOptions = {\n uri: 'http://example.com:8000/resource/1?b=1&a=2',\n method: 'GET',\n headers: {}\n};\n\n// Generate Authorization request header\n\nvar header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' });\nrequestOptions.headers.Authorization = header.field;\n\n// Send authenticated request\n\nRequest(requestOptions, function (error, response, body) {\n\n // Authenticate the server's response\n\n var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body });\n\n // Output results\n\n console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)'));\n});\n```\n\n**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local\nmachine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP 'start()' method.\n\n```javascript\nHawk.sntp.start();\n```\n\n\n## Protocol Example\n\nThe client attempts to access a protected resource without authentication, sending the following HTTP request to\nthe resource server:\n\n```\nGET /resource/1?b=1&a=2 HTTP/1.1\nHost: example.com:8000\n```\n\nThe resource server returns an authentication challenge.\n\n```\nHTTP/1.1 401 Unauthorized\nWWW-Authenticate: Hawk\n```\n\nThe client has previously obtained a set of **Hawk** credentials for accessing resources on the \"http://example.com/\"\nserver. The **Hawk** credentials issued to the client include the following attributes:\n\n* Key identifier: dh37fgj492je\n* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\n* Algorithm: sha256\n\nThe client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1,\n1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline\ncharacter):\n\n```\nhawk.1.header\n1353832234\nj4h3g2\nGET\n/resource/1?b=1&a=2\nexample.com\n8000\n\nsome-app-ext-data\n\n```\n\nThe request MAC is calculated using HMAC with the specified hash algorithm \"sha256\" and the key over the normalized request string.\nThe result is base64-encoded to produce the request MAC:\n\n```\n6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=\n```\n\nThe client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using\nthe HTTP `Authorization` request header field:\n\n```\nGET /resource/1?b=1&a=2 HTTP/1.1\nHost: example.com:8000\nAuthorization: Hawk id=\"dh37fgj492je\", ts=\"1353832234\", nonce=\"j4h3g2\", ext=\"some-app-ext-data\", mac=\"6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=\"\n```\n\nThe server validates the request by calculating the request MAC again based on the request received and verifies the validity\nand scope of the **Hawk** credentials. If valid, the server responds with the requested resource.\n\n\n### Payload Validation\n\n**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash\nusing the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character):\n* `hawk.1.payload`\n* the content-type in lowercase, without any parameters (e.g. `application/json`)\n* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability)\n\nFor example:\n\n* Payload: `Thank you for flying Hawk`\n* Content Type: `text/plain`\n* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=`\n\nResults in the following input to the payload hash function (newline terminated values):\n\n```\nhawk.1.payload\ntext/plain\nThank you for flying Hawk\n\n```\n\nWhich produces the following hash value:\n\n```\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\n```\n\nThe client constructs the normalized request string (newline terminated values):\n\n```\nhawk.1.header\n1353832234\nj4h3g2\nPOST\n/resource/1?a=1&b=2\nexample.com\n8000\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\nsome-app-ext-data\n\n```\n\nThen calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data,\nand request MAC, with the request using the HTTP `Authorization` request header field:\n\n```\nPOST /resource/1?a=1&b=2 HTTP/1.1\nHost: example.com:8000\nAuthorization: Hawk id=\"dh37fgj492je\", ts=\"1353832234\", nonce=\"j4h3g2\", hash=\"Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\", ext=\"some-app-ext-data\", mac=\"aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw=\"\n```\n\nIt is up to the server if and when it validates the payload for any given request, based solely on it's security policy\nand the nature of the data included.\n\nIf the payload is available at the time of authentication, the server uses the hash value provided by the client to construct\nthe normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value\nwith the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash.\n\nHowever, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed\nat a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value\nprovided by the client after validating the MAC.\n\nIt is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value\nincluded in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided\nby the client, the payload may be modified by an attacker.\n\n\n## Response Payload Validation\n\n**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the\nclient to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header\nas a response header using the exact same syntax as the `Authorization` request header field.\n\nThe header is contructed using the same process as the client's request header. The server uses the same credentials and other\nartifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with\nnew values based on the server response. The rest as identical to those used by the client.\n\nThe result MAC digest is included with the optional `hash` and `ext` values:\n\n```\nServer-Authorization: Hawk mac=\"XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=\", hash=\"f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=\", ext=\"response-specific\"\n```\n\n\n## Browser Support and Considerations\n\nA browser script is provided for including using a `<script>` tag in [lib/browser.js](/lib/browser.js).\n\n**Hawk** relies on the _Server-Authorization_ and _WWW-Authenticate_ headers in its response to communicate with the client.\nTherefore, in case of CORS requests, it is important to consider sending _Access-Control-Expose-Headers_ with the value\n_\"WWW-Authenticate, Server-Authorization\"_ on each response from your server. As explained in the\n[specifications](http://www.w3.org/TR/cors/#access-control-expose-headers-response-header), it will indicate that these headers\ncan safely be accessed by the client (using getResponseHeader() on the XmlHttpRequest object). Otherwise you will be met with a\n[\"simple response header\"](http://www.w3.org/TR/cors/#simple-response-header) which excludes these fields and would prevent the\nHawk client from authenticating the requests.You can read more about the why and how in this\n[article](http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server)\n\n\n# Single URI Authorization\n\nThere are cases in which limited and short-term access to a protected resource is granted to a third party which does not\nhave access to the shared credentials. For example, displaying a protected image on a web page accessed by anyone. **Hawk**\nprovides limited support for such URIs in the form of a _bewit_ - a URI query parameter appended to the request URI which contains\nthe necessary credentials to authenticate the request.\n\nBecause of the significant security risks involved in issuing such access, bewit usage is purposely limited only to GET requests\nand for a finite period of time. Both the client and server can issue bewit credentials, however, the server should not use the same\ncredentials as the client to maintain clear traceability as to who issued which credentials.\n\nIn order to simplify implementation, bewit credentials do not support single-use policy and can be replayed multiple times within\nthe granted access timeframe. \n\n\n## Bewit Usage Example\n\nServer code:\n\n```javascript\nvar Http = require('http');\nvar Hawk = require('hawk');\n\n\n// Credentials lookup function\n\nvar credentialsFunc = function (id, callback) {\n\n var credentials = {\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256'\n };\n\n return callback(null, credentials);\n};\n\n// Create HTTP server\n\nvar handler = function (req, res) {\n\n Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) {\n\n res.writeHead(!err ? 200 : 401, { 'Content-Type': 'text/plain' });\n res.end(!err ? 'Access granted' : 'Shoosh!');\n });\n};\n\nHttp.createServer(handler).listen(8000, 'example.com');\n```\n\nBewit code generation:\n\n```javascript\nvar Request = require('request');\nvar Hawk = require('hawk');\n\n\n// Client credentials\n\nvar credentials = {\n id: 'dh37fgj492je',\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256'\n}\n\n// Generate bewit\n\nvar duration = 60 * 5; // 5 Minutes\nvar bewit = Hawk.uri.getBewit('http://example.com:8080/resource/1?b=1&a=2', { credentials: credentials, ttlSec: duration, ext: 'some-app-data' });\nvar uri = 'http://example.com:8000/resource/1?b=1&a=2' + '&bewit=' + bewit;\n```\n\n\n# Security Considerations\n\nThe greatest sources of security risks are usually found not in **Hawk** but in the policies and procedures surrounding its use.\nImplementers are strongly encouraged to assess how this module addresses their security requirements. This section includes\nan incomplete list of security considerations that must be reviewed and understood before deploying **Hawk** on the server.\nMany of the protections provided in **Hawk** depends on whether and how they are used.\n\n### MAC Keys Transmission\n\n**Hawk** does not provide any mechanism for obtaining or transmitting the set of shared credentials required. Any mechanism used\nto obtain **Hawk** credentials must ensure that these transmissions are protected using transport-layer mechanisms such as TLS.\n\n### Confidentiality of Requests\n\nWhile **Hawk** provides a mechanism for verifying the integrity of HTTP requests, it provides no guarantee of request\nconfidentiality. Unless other precautions are taken, eavesdroppers will have full access to the request content. Servers should\ncarefully consider the types of data likely to be sent as part of such requests, and employ transport-layer security mechanisms\nto protect sensitive resources.\n\n### Spoofing by Counterfeit Servers\n\n**Hawk** provides limited verification of the server authenticity. When receiving a response back from the server, the server\nmay choose to include a response `Server-Authorization` header which the client can use to verify the response. However, it is up to\nthe server to determine when such measure is included, to up to the client to enforce that policy.\n\nA hostile party could take advantage of this by intercepting the client's requests and returning misleading or otherwise\nincorrect responses. Service providers should consider such attacks when developing services using this protocol, and should\nrequire transport-layer security for any requests where the authenticity of the resource server or of server responses is an issue.\n\n### Plaintext Storage of Credentials\n\nThe **Hawk** key functions the same way passwords do in traditional authentication systems. In order to compute the request MAC,\nthe server must have access to the key in plaintext form. This is in contrast, for example, to modern operating systems, which\nstore only a one-way hash of user credentials.\n\nIf an attacker were to gain access to these keys - or worse, to the server's database of all such keys - he or she would be able\nto perform any action on behalf of any resource owner. Accordingly, it is critical that servers protect these keys from unauthorized\naccess.\n\n### Entropy of Keys\n\nUnless a transport-layer security protocol is used, eavesdroppers will have full access to authenticated requests and request\nMAC values, and will thus be able to mount offline brute-force attacks to recover the key used. Servers should be careful to\nassign keys which are long enough, and random enough, to resist such attacks for at least the length of time that the **Hawk**\ncredentials are valid.\n\nFor example, if the credentials are valid for two weeks, servers should ensure that it is not possible to mount a brute force\nattack that recovers the key in less than two weeks. Of course, servers are urged to err on the side of caution, and use the\nlongest key reasonable.\n\nIt is equally important that the pseudo-random number generator (PRNG) used to generate these keys be of sufficiently high\nquality. Many PRNG implementations generate number sequences that may appear to be random, but which nevertheless exhibit\npatterns or other weaknesses which make cryptanalysis or brute force attacks easier. Implementers should be careful to use\ncryptographically secure PRNGs to avoid these problems.\n\n### Coverage Limitations\n\nThe request MAC only covers the HTTP `Host` header and optionally the `Content-Type` header. It does not cover any other headers\nwhich can often affect how the request body is interpreted by the server. If the server behavior is influenced by the presence\nor value of such headers, an attacker can manipulate the request headers without being detected. Implementers should use the\n`ext` feature to pass application-specific information via the `Authorization` header which is protected by the request MAC.\n\nThe response authentication, when performed, only covers the response payload, content-type, and the request information \nprovided by the client in it's request (method, resource, timestamp, nonce, etc.). It does not cover the HTTP status code or\nany other response header field (e.g. Location) which can affect the client's behaviour.\n\n### Future Time Manipulation\n\nThe protocol relies on a clock sync between the client and server. To accomplish this, the server informs the client of its\ncurrent time when an invalid timestamp is received.\n\nIf an attacker is able to manipulate this information and cause the client to use an incorrect time, it would be able to cause\nthe client to generate authenticated requests using time in the future. Such requests will fail when sent by the client, and will\nnot likely leave a trace on the server (given the common implementation of nonce, if at all enforced). The attacker will then\nbe able to replay the request at the correct time without detection.\n\nThe client must only use the time information provided by the server if:\n* it was delivered over a TLS connection and the server identity has been verified, or\n* the `tsm` MAC digest calculated using the same client credentials over the timestamp has been verified.\n\n### Client Clock Poisoning\n\nWhen receiving a request with a bad timestamp, the server provides the client with its current time. The client must never use\nthe time received from the server to adjust its own clock, and must only use it to calculate an offset for communicating with\nthat particular server.\n\n### Bewit Limitations\n\nSpecial care must be taken when issuing bewit credentials to third parties. Bewit credentials are valid until expiration and cannot\nbe revoked or limited without using other means. Whatever resource they grant access to will be completely exposed to anyone with\naccess to the bewit credentials which act as bearer credentials for that particular resource. While bewit usage is limited to GET\nrequests only and therefore cannot be used to perform transactions or change server state, it can still be used to expose private\nand sensitive information.\n\n### Host Header Forgery\n\nHawk validates the incoming request MAC against the incoming HTTP Host header. However, unless the optional `host` and `port`\noptions are used with `server.authenticate()`, a malicous client can mint new host names pointing to the server's IP address and\nuse that to craft an attack by sending a valid request that's meant for another hostname than the one used by the server. Server\nimplementors must manually verify that the host header received matches their expectation (or use the options mentioned above).\n\n# Frequently Asked Questions\n\n### Where is the protocol specification?\n\nIf you are looking for some prose explaining how all this works, **this is it**. **Hawk** is being developed as an open source\nproject instead of a standard. In other words, the [code](/hueniverse/hawk/tree/master/lib) is the specification. Not sure about\nsomething? Open an issue!\n\n### Is it done?\n\nAt if version 0.10.0, **Hawk** is feature-complete. However, until this module reaches version 1.0.0 it is considered experimental\nand is likely to change. This also means your feedback and contribution are very welcome. Feel free to open issues with questions\nand suggestions.\n\n### Where can I find **Hawk** implementations in other languages?\n\n**Hawk**'s only reference implementation is provided in JavaScript as a node.js module. However, others are actively porting it to other\nplatforms. There is already a [PHP](https://github.com/alexbilbie/PHP-Hawk),\n[.NET](https://github.com/pcibraro/hawknet), and [JAVA](https://github.com/wealdtech/hawk) libraries available. The full list\nis maintained [here](https://github.com/hueniverse/hawk/issues?labels=port). Please add an issue if you are working on another\nport. A cross-platform test-suite is in the works.\n\n### Why isn't the algorithm part of the challenge or dynamically negotiated?\n\nThe algorithm used is closely related to the key issued as different algorithms require different key sizes (and other\nrequirements). While some keys can be used for multiple algorithm, the protocol is designed to closely bind the key and algorithm\ntogether as part of the issued credentials.\n\n### Why is Host and Content-Type the only headers covered by the request MAC?\n\nIt is really hard to include other headers. Headers can be changed by proxies and other intermediaries and there is no\nwell-established way to normalize them. Many platforms change the case of header field names and values. The only\nstraight-forward solution is to include the headers in some blob (say, base64 encoded JSON) and include that with the request,\nan approach taken by JWT and other such formats. However, that design violates the HTTP header boundaries, repeats information,\nand introduces other security issues because firewalls will not be aware of these \"hidden\" headers. In addition, any information\nrepeated must be compared to the duplicated information in the header and therefore only moves the problem elsewhere.\n\n### Why not just use HTTP Digest?\n\nDigest requires pre-negotiation to establish a nonce. This means you can't just make a request - you must first send\na protocol handshake to the server. This pattern has become unacceptable for most web services, especially mobile\nwhere extra round-trip are costly.\n\n### Why bother with all this nonce and timestamp business?\n\n**Hawk** is an attempt to find a reasonable, practical compromise between security and usability. OAuth 1.0 got timestamp\nand nonces halfway right but failed when it came to scalability and consistent developer experience. **Hawk** addresses\nit by requiring the client to sync its clock, but provides it with tools to accomplish it.\n\nIn general, replay protection is a matter of application-specific threat model. It is less of an issue on a TLS-protected\nsystem where the clients are implemented using best practices and are under the control of the server. Instead of dropping\nreplay protection, **Hawk** offers a required time window and an optional nonce verification. Together, it provides developers\nwith the ability to decide how to enforce their security policy without impacting the client's implementation.\n\n### What are `app` and `dlg` in the authorization header and normalized mac string?\n\nThe original motivation for **Hawk** was to replace the OAuth 1.0 use cases. This included both a simple client-server mode which\nthis module is specifically designed for, and a delegated access mode which is being developed separately in\n[Oz](https://github.com/hueniverse/oz). In addition to the **Hawk** use cases, Oz requires another attribute: the application id `app`.\nThis provides binding between the credentials and the application in a way that prevents an attacker from tricking an application\nto use credentials issued to someone else. It also has an optional 'delegated-by' attribute `dlg` which is the application id of the\napplication the credentials were directly issued to. The goal of these two additions is to allow Oz to utilize **Hawk** directly,\nbut with the additional security of delegated credentials.\n\n### What is the purpose of the static strings used in each normalized MAC input?\n\nWhen calculating a hash or MAC, a static prefix (tag) is added. The prefix is used to prevent MAC values from being\nused or reused for a purpose other than what they were created for (i.e. prevents switching MAC values between a request,\nresponse, and a bewit use cases). It also protects against expliots created after a potential change in how the protocol\ncreates the normalized string. For example, if a future version would switch the order of nonce and timestamp, it\ncan create an exploit opportunity for cases where the nonce is similar in format to a timestamp.\n\n### Does **Hawk** have anything to do with OAuth?\n\nShort answer: no.\n\n**Hawk** was originally proposed as the OAuth MAC Token specification. However, the OAuth working group in its consistent\nincompetence failed to produce a final, usable solution to address one of the most popular use cases of OAuth 1.0 - using it\nto authenticate simple client-server transactions (i.e. two-legged). As you can guess, the OAuth working group is still hard\nat work to produce more garbage.\n\n**Hawk** provides a simple HTTP authentication scheme for making client-server requests. It does not address the OAuth use case\nof delegating access to a third party. If you are looking for an OAuth alternative, check out [Oz](https://github.com/hueniverse/oz).\n\n\n# Acknowledgements\n\n**Hawk** is a derivative work of the [HTTP MAC Authentication Scheme](http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05) proposal\nco-authored by Ben Adida, Adam Barth, and Eran Hammer, which in turn was based on the OAuth 1.0 community specification.\n\nSpecial thanks to Ben Laurie for his always insightful feedback and advice.\n\nThe **Hawk** logo was created by [Chris Carrasco](http://chriscarrasco.com).\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/hueniverse/hawk/issues" - }, - "homepage": "https://github.com/hueniverse/hawk", - "_id": "hawk@1.0.0", - "dist": { - "shasum": "54a49d24842997b48ab16d30e69195e4a574149b" - }, - "_from": "hawk@~1.0.0", - "_resolved": "https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/browser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/browser.js deleted file mode 100755 index b25a10fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/browser.js +++ /dev/null @@ -1,771 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hoek = require('hoek'); -var Hawk = require('../lib'); -var Browser = require('../lib/browser'); -var LocalStorage = require('localStorage'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Browser', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: (id === '1' ? 'sha1' : 'sha256'), - user: 'steve' - }; - - return callback(null, credentials); - }; - - it('should generate a header then successfully parse it (configuration)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (node request)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts, { payload: 'some reply', contentType: 'text/plain', ext: 'response-specific' }); - expect(res.headers['server-authorization']).to.exist; - - expect(Browser.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (no server header options)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts); - expect(res.headers['server-authorization']).to.exist; - - expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (no server header)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header with stale ts and successfully authenticate on second call', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - Browser.utils.setNtpOffset(60 * 60 * 1000); - var header = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }); - req.authorization = header.field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Stale timestamp'); - - var res = { - headers: { - 'www-authenticate': err.response.headers['WWW-Authenticate'] - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.utils.getNtpOffset()).to.equal(60 * 60 * 1000); - expect(Browser.client.authenticate(res, credentials, header.artifacts)).to.equal(true); - expect(Browser.utils.getNtpOffset()).to.equal(0); - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - }); - - it('should generate a header with stale ts and successfully authenticate on second call (manual localStorage)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - Browser.utils.setStorage(LocalStorage) - - Browser.utils.setNtpOffset(60 * 60 * 1000); - var header = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }); - req.authorization = header.field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Stale timestamp'); - - var res = { - headers: { - 'www-authenticate': err.response.headers['WWW-Authenticate'] - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(parseInt(LocalStorage.getItem('hawk_ntp_offset'))).to.equal(60 * 60 * 1000); - expect(Browser.utils.getNtpOffset()).to.equal(60 * 60 * 1000); - expect(Browser.client.authenticate(res, credentials, header.artifacts)).to.equal(true); - expect(Browser.utils.getNtpOffset()).to.equal(0); - expect(parseInt(LocalStorage.getItem('hawk_ntp_offset'))).to.equal(0); - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - }); - - it('should generate a header then fails to parse it (missing server header hash)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts); - expect(res.headers['server-authorization']).to.exist; - - expect(Browser.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(false); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (with hash)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it then validate payload', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload('hola!', credentials, artifacts)).to.be.true; - expect(Hawk.server.authenticatePayload('hello!', credentials, artifacts)).to.be.false; - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (app)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(artifacts.app).to.equal('asd23ased'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (app, dlg)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased', dlg: '23434szr3q4d' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(artifacts.app).to.equal('asd23ased'); - expect(artifacts.dlg).to.equal('23434szr3q4d'); - done(); - }); - }); - }); - - it('should generate a header then fail authentication due to bad hash', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, { payload: 'byebye!' }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad payload hash'); - done(); - }); - }); - }); - - it('should generate a header for one resource then fail to authenticate another', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - req.url = '/something/else'; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(credentials).to.exist; - done(); - }); - }); - }); - - describe('client', function () { - - describe('#header', function () { - - it('should return a valid authorization header (sha1)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha1' - }; - - var header = Browser.client.header('http://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="bsvY3IfUllw6V5rvk4tStEvpBhE=", ext="Bazinga!", mac="qbf1ZPG/r/e06F4ht+T77LXi5vw="'); - done(); - }); - - it('should return a valid authorization header (sha256)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", ext="Bazinga!", mac="q1CwFoSHzPZSkbIvl0oYlD+91rBUEvFk763nMjMndj8="'); - done(); - }); - - it('should return a valid authorization header (no ext)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", mac="HTgtd0jPI6E4izx8e4OHdO36q00xFCU0FolNq3RiCYs="'); - done(); - }); - - it('should return an empty authorization header on missing options', function (done) { - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST').field; - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid credentials', function (done) { - - var credentials = { - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207 }).field; - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid algorithm', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, payload: 'something, anything!', ext: 'Bazinga!', timestamp: 1353809207 }).field; - expect(header).to.equal(''); - done(); - }); - }); - - describe('#authenticate', function () { - - it('should return false on invalid header', function (done) { - - var res = { - headers: { - 'server-authorization': 'Hawk mac="abc", bad="xyz"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.client.authenticate(res, {})).to.equal(false); - done(); - }); - - it('should return false on invalid mac', function (done) { - - var res = { - headers: { - 'content-type': 'text/plain', - 'server-authorization': 'Hawk mac="_IJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - var artifacts = { - method: 'POST', - host: 'example.com', - port: '8080', - resource: '/resource/4?filter=a', - ts: '1362336900', - nonce: 'eb5S_L', - hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=', - ext: 'some-app-data', - app: undefined, - dlg: undefined, - mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=', - id: '123456' - }; - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(false); - done(); - }); - - it('should return true on ignoring hash', function (done) { - - var res = { - headers: { - 'content-type': 'text/plain', - 'server-authorization': 'Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - var artifacts = { - method: 'POST', - host: 'example.com', - port: '8080', - resource: '/resource/4?filter=a', - ts: '1362336900', - nonce: 'eb5S_L', - hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=', - ext: 'some-app-data', - app: undefined, - dlg: undefined, - mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=', - id: '123456' - }; - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - - it('should fail on invalid WWW-Authenticate header format', function (done) { - - var res = { - headers: { - 'www-authenticate': 'Hawk ts="1362346425875", tsm="PhwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", x="Stale timestamp"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.client.authenticate(res, {})).to.equal(false); - done(); - }); - - it('should fail on invalid WWW-Authenticate header format', function (done) { - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - var res = { - headers: { - 'www-authenticate': 'Hawk ts="1362346425875", tsm="hwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", error="Stale timestamp"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.client.authenticate(res, credentials)).to.equal(false); - done(); - }); - }); - - describe('#message', function () { - it('should generate an authorization then successfully parse it', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Browser.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - }); - - it('should fail on missing host', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Browser.client.message(null, 8080, 'some message', { credentials: credentials }); - expect(auth).to.not.exist; - done(); - }); - }); - - it('should fail on missing credentials', function (done) { - - var auth = Browser.client.message('example.com', 8080, 'some message', {}); - expect(auth).to.not.exist; - done(); - }); - - it('should fail on invalid algorithm', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var creds = Hoek.clone(credentials); - creds.algorithm = 'blah'; - var auth = Browser.client.message('example.com', 8080, 'some message', { credentials: creds }); - expect(auth).to.not.exist; - done(); - }); - }); - }); - }); - - describe('#parseAuthorizationHeader', function (done) { - - it('returns null on missing header', function (done) { - - expect(Browser.utils.parseAuthorizationHeader()).to.equal(null); - done(); - }); - - it('returns null on bad header syntax (structure)', function (done) { - - expect(Browser.utils.parseAuthorizationHeader('Hawk')).to.equal(null); - done(); - }); - - it('returns null on bad header syntax (parts)', function (done) { - - expect(Browser.utils.parseAuthorizationHeader(' ')).to.equal(null); - done(); - }); - - it('returns null on bad scheme name', function (done) { - - expect(Browser.utils.parseAuthorizationHeader('Basic asdasd')).to.equal(null); - done(); - }); - - it('returns null on bad attribute value', function (done) { - - expect(Browser.utils.parseAuthorizationHeader('Hawk test="\t"', ['test'])).to.equal(null); - done(); - }); - - it('returns null on duplicated attribute', function (done) { - - expect(Browser.utils.parseAuthorizationHeader('Hawk test="a", test="b"', ['test'])).to.equal(null); - done(); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/client.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/client.js deleted file mode 100755 index bcc4222a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/client.js +++ /dev/null @@ -1,206 +0,0 @@ -// Load modules - -var Url = require('url'); -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('client', function () { - - describe('#header', function () { - - it('should return a valid authorization header (sha1)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha1' - }; - - var header = Hawk.client.header('http://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="bsvY3IfUllw6V5rvk4tStEvpBhE=", ext="Bazinga!", mac="qbf1ZPG/r/e06F4ht+T77LXi5vw="'); - done(); - }); - - it('should return a valid authorization header (sha256)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", ext="Bazinga!", mac="q1CwFoSHzPZSkbIvl0oYlD+91rBUEvFk763nMjMndj8="'); - done(); - }); - - it('should return a valid authorization header (no ext)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", mac="HTgtd0jPI6E4izx8e4OHdO36q00xFCU0FolNq3RiCYs="'); - done(); - }); - - it('should return an empty authorization header on missing options', function (done) { - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST').field; - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid credentials', function (done) { - - var credentials = { - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207 }).field; - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid algorithm', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, payload: 'something, anything!', ext: 'Bazinga!', timestamp: 1353809207 }).field; - expect(header).to.equal(''); - done(); - }); - }); - - describe('#authenticate', function () { - - it('should return false on invalid header', function (done) { - - var res = { - headers: { - 'server-authorization': 'Hawk mac="abc", bad="xyz"' - } - }; - - expect(Hawk.client.authenticate(res, {})).to.equal(false); - done(); - }); - - it('should return false on invalid mac', function (done) { - - var res = { - headers: { - 'content-type': 'text/plain', - 'server-authorization': 'Hawk mac="_IJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"' - } - }; - - var artifacts = { - method: 'POST', - host: 'example.com', - port: '8080', - resource: '/resource/4?filter=a', - ts: '1362336900', - nonce: 'eb5S_L', - hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=', - ext: 'some-app-data', - app: undefined, - dlg: undefined, - mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=', - id: '123456' - }; - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(false); - done(); - }); - - it('should return true on ignoring hash', function (done) { - - var res = { - headers: { - 'content-type': 'text/plain', - 'server-authorization': 'Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"' - } - }; - - var artifacts = { - method: 'POST', - host: 'example.com', - port: '8080', - resource: '/resource/4?filter=a', - ts: '1362336900', - nonce: 'eb5S_L', - hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=', - ext: 'some-app-data', - app: undefined, - dlg: undefined, - mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=', - id: '123456' - }; - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - - it('should fail on invalid WWW-Authenticate header format', function (done) { - - var header = 'Hawk ts="1362346425875", tsm="PhwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", x="Stale timestamp"'; - expect(Hawk.client.authenticate({ headers: { 'www-authenticate': header } }, {})).to.equal(false); - done(); - }); - - it('should fail on invalid WWW-Authenticate header format', function (done) { - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - var header = 'Hawk ts="1362346425875", tsm="hwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", error="Stale timestamp"'; - expect(Hawk.client.authenticate({ headers: { 'www-authenticate': header } }, credentials)).to.equal(false); - done(); - }); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/crypto.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/crypto.js deleted file mode 100755 index b62c2177..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/crypto.js +++ /dev/null @@ -1,86 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('Crypto', function () { - - describe('#generateNormalizedString', function () { - - it('should return a valid normalized string', function (done) { - - expect(Hawk.crypto.generateNormalizedString('header', { - credentials: { - key: 'dasdfasdf', - algorithm: 'sha256' - }, - ts: 1357747017, - nonce: 'k3k4j5', - method: 'GET', - resource: '/resource/something', - host: 'example.com', - port: 8080 - })).to.equal('hawk.1.header\n1357747017\nk3k4j5\nGET\n/resource/something\nexample.com\n8080\n\n\n'); - - done(); - }); - - it('should return a valid normalized string (ext)', function (done) { - - expect(Hawk.crypto.generateNormalizedString('header', { - credentials: { - key: 'dasdfasdf', - algorithm: 'sha256' - }, - ts: 1357747017, - nonce: 'k3k4j5', - method: 'GET', - resource: '/resource/something', - host: 'example.com', - port: 8080, - ext: 'this is some app data' - })).to.equal('hawk.1.header\n1357747017\nk3k4j5\nGET\n/resource/something\nexample.com\n8080\n\nthis is some app data\n'); - - done(); - }); - - it('should return a valid normalized string (payload + ext)', function (done) { - - expect(Hawk.crypto.generateNormalizedString('header', { - credentials: { - key: 'dasdfasdf', - algorithm: 'sha256' - }, - ts: 1357747017, - nonce: 'k3k4j5', - method: 'GET', - resource: '/resource/something', - host: 'example.com', - port: 8080, - hash: 'U4MKKSmiVxk37JCCrAVIjV/OhB3y+NdwoCr6RShbVkE=', - ext: 'this is some app data' - })).to.equal('hawk.1.header\n1357747017\nk3k4j5\nGET\n/resource/something\nexample.com\n8080\nU4MKKSmiVxk37JCCrAVIjV/OhB3y+NdwoCr6RShbVkE=\nthis is some app data\n'); - - done(); - }); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/index.js deleted file mode 100755 index ba837388..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/index.js +++ /dev/null @@ -1,316 +0,0 @@ -// Load modules - -var Url = require('url'); -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: (id === '1' ? 'sha1' : 'sha256'), - user: 'steve' - }; - - return callback(null, credentials); - }; - - it('should generate a header then successfully parse it (configuration)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header(Url.parse('http://example.com:8080/resource/4?filter=a'), req.method, { credentials: credentials, ext: 'some-app-data' }).field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (node request)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts, { payload: 'some reply', contentType: 'text/plain', ext: 'response-specific' }); - expect(res.headers['server-authorization']).to.exist; - - expect(Hawk.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (no server header options)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts); - expect(res.headers['server-authorization']).to.exist; - - expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header then fails to parse it (missing server header hash)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts); - expect(res.headers['server-authorization']).to.exist; - - expect(Hawk.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(false); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (with hash)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it then validate payload', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload('hola!', credentials, artifacts)).to.be.true; - expect(Hawk.server.authenticatePayload('hello!', credentials, artifacts)).to.be.false; - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (app)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(artifacts.app).to.equal('asd23ased'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (app, dlg)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased', dlg: '23434szr3q4d' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(artifacts.app).to.equal('asd23ased'); - expect(artifacts.dlg).to.equal('23434szr3q4d'); - done(); - }); - }); - }); - - it('should generate a header then fail authentication due to bad hash', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, { payload: 'byebye!' }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad payload hash'); - done(); - }); - }); - }); - - it('should generate a header for one resource then fail to authenticate another', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - req.url = '/something/else'; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(credentials).to.exist; - done(); - }); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/message.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/message.js deleted file mode 100755 index 04b91d41..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/message.js +++ /dev/null @@ -1,246 +0,0 @@ -// Load modules - -var Url = require('url'); -var Lab = require('lab'); -var Hoek = require('hoek'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: (id === '1' ? 'sha1' : 'sha256'), - user: 'steve' - }; - - return callback(null, credentials); - }; - - it('should generate an authorization then successfully parse it', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - }); - - it('should fail authorization on mismatching host', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example1.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Bad mac'); - done(); - }); - }); - }); - - it('should fail authorization on stale timestamp', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, { localtimeOffsetMsec: 100000 }, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Stale timestamp'); - done(); - }); - }); - }); - - it('should fail authorization on invalid authorization', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - delete auth.id; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid authorization'); - done(); - }); - }); - }); - - it('should fail authorization on bad hash', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message1', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Bad message hash'); - done(); - }); - }); - }); - - it('should fail authorization on nonce error', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, { nonceFunc: function (nonce, ts, callback) { callback (new Error('kaboom')); } }, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid nonce'); - done(); - }); - }); - }); - - it('should fail authorization on credentials error', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - var errFunc = function (id, callback) { - - callback(new Error('kablooey')); - }; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('kablooey'); - done(); - }); - }); - }); - - it('should fail authorization on missing credentials', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - var errFunc = function (id, callback) { - - callback(); - }; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown credentials'); - done(); - }); - }); - }); - - it('should fail authorization on invalid credentials', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - var errFunc = function (id, callback) { - - callback(null, {}); - }; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid credentials'); - done(); - }); - }); - }); - - it('should fail authorization on invalid credentials algorithm', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - var errFunc = function (id, callback) { - - callback(null, { key: '123', algorithm: '456' }); - }; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown algorithm'); - done(); - }); - }); - }); - - it('should fail on missing host', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message(null, 8080, 'some message', { credentials: credentials }); - expect(auth).to.not.exist; - done(); - }); - }); - - it('should fail on missing credentials', function (done) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', {}); - expect(auth).to.not.exist; - done(); - }); - - it('should fail on invalid algorithm', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var creds = Hoek.clone(credentials); - creds.algorithm = 'blah'; - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: creds }); - expect(auth).to.not.exist; - done(); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/readme.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/readme.js deleted file mode 100755 index f39e033d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/readme.js +++ /dev/null @@ -1,98 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hoek = require('hoek'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('README', function () { - - describe('core', function () { - - var credentials = { - id: 'dh37fgj492je', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' - }; - - var options = { - credentials: credentials, - timestamp: 1353832234, - nonce: 'j4h3g2', - ext: 'some-app-ext-data' - }; - - it('should generate a header protocol example', function (done) { - - var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', options).field; - - expect(header).to.equal('Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE="'); - done(); - }); - - it('should generate a normalized string protocol example', function (done) { - - var normalized = Hawk.crypto.generateNormalizedString('header', { - credentials: credentials, - ts: options.timestamp, - nonce: options.nonce, - method: 'GET', - resource: '/resource?a=1&b=2', - host: 'example.com', - port: 8000, - ext: options.ext - }); - - expect(normalized).to.equal('hawk.1.header\n1353832234\nj4h3g2\nGET\n/resource?a=1&b=2\nexample.com\n8000\n\nsome-app-ext-data\n'); - done(); - }); - - var payloadOptions = Hoek.clone(options); - payloadOptions.payload = 'Thank you for flying Hawk'; - payloadOptions.contentType = 'text/plain'; - - it('should generate a header protocol example (with payload)', function (done) { - - var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'POST', payloadOptions).field; - - expect(header).to.equal('Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", hash="Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=", ext="some-app-ext-data", mac="aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw="'); - done(); - }); - - it('should generate a normalized string protocol example (with payload)', function (done) { - - var normalized = Hawk.crypto.generateNormalizedString('header', { - credentials: credentials, - ts: options.timestamp, - nonce: options.nonce, - method: 'POST', - resource: '/resource?a=1&b=2', - host: 'example.com', - port: 8000, - hash: Hawk.crypto.calculatePayloadHash(payloadOptions.payload, credentials.algorithm, payloadOptions.contentType), - ext: options.ext - }); - - expect(normalized).to.equal('hawk.1.header\n1353832234\nj4h3g2\nPOST\n/resource?a=1&b=2\nexample.com\n8000\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\nsome-app-ext-data\n'); - done(); - }); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/server.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/server.js deleted file mode 100755 index 3e92427a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/server.js +++ /dev/null @@ -1,686 +0,0 @@ -// Load modules - -var Url = require('url'); -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('server', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: (id === '1' ? 'sha1' : 'sha256'), - user: 'steve' - }; - - return callback(null, credentials); - }; - - describe('#authenticate', function () { - - it('should parse a valid authentication header (sha1)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should parse a valid authentication header (sha256)', function (done) { - - var req = { - method: 'GET', - url: '/resource/1?b=1&a=2', - host: 'example.com', - port: 8000, - authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", mac="m8r1rHbXN6NgO+KIIhjO7sFRyd78RNGVUwehe8Cp2dU=", ext="some-app-data"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353832234000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should parse a valid authentication header (host override)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - host: 'example1.com:8080', - authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { host: 'example.com', localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should parse a valid authentication header (host port override)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - host: 'example1.com:80', - authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { host: 'example.com', port: 8080, localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should parse a valid authentication header (POST with payload)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123456", ts="1357926341", nonce="1AwuJD", hash="qAiXIVv+yjDATneWxZP2YCTa9aHRgQdnH9b3Wc+o3dg=", ext="some-app-data", mac="UeYcj5UoTVaAWXNvJfLVia7kU3VabxCqrccXP8sUGC4="' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1357926341000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should fail on missing hash', function (done) { - - var req = { - method: 'GET', - url: '/resource/1?b=1&a=2', - host: 'example.com', - port: 8000, - authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", mac="m8r1rHbXN6NgO+KIIhjO7sFRyd78RNGVUwehe8Cp2dU=", ext="some-app-data"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { payload: 'body', localtimeOffsetMsec: 1353832234000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing required payload hash'); - done(); - }); - }); - - it('should fail on a stale timestamp', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123456", ts="1362337299", nonce="UzmxSs", ext="some-app-data", mac="wnNUxchvvryMH2RxckTdZ/gY3ijzvccx4keVvELC61w="' - }; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Stale timestamp'); - var header = err.response.headers['WWW-Authenticate']; - var ts = header.match(/^Hawk ts\=\"(\d+)\"\, tsm\=\"([^\"]+)\"\, error=\"Stale timestamp\"$/); - var now = Hawk.utils.now(); - expect(parseInt(ts[1], 10) * 1000).to.be.within(now - 1000, now + 1000); - - var res = { - headers: { - 'www-authenticate': header - } - }; - - expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - }); - - it('should fail on a replay', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="bXx7a7p1h9QYQNZ8x7QhvDQym8ACgab4m3lVSFn4DBw=", ext="hello"' - }; - - var memoryCache = {}; - var options = { - localtimeOffsetMsec: 1353788437000 - Hawk.utils.now(), - nonceFunc: function (nonce, ts, callback) { - - if (memoryCache[nonce]) { - return callback(new Error()); - } - - memoryCache[nonce] = true; - return callback(); - } - }; - - Hawk.server.authenticate(req, credentialsFunc, options, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - - Hawk.server.authenticate(req, credentialsFunc, options, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid nonce'); - done(); - }); - }); - }); - - it('should fail on an invalid authentication header: wrong scheme', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Basic asdasdasdasd' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.not.exist; - done(); - }); - }); - - it('should fail on an invalid authentication header: no scheme', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: '!@#' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid header syntax'); - done(); - }); - }); - - it('should fail on an missing authorization header', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.isMissing).to.equal(true); - done(); - }); - }); - - it('should fail on an missing host header', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid Host header'); - done(); - }); - }); - - it('should fail on an missing authorization attribute (id)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing attributes'); - done(); - }); - }); - - it('should fail on an missing authorization attribute (ts)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing attributes'); - done(); - }); - }); - - it('should fail on an missing authorization attribute (nonce)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing attributes'); - done(); - }); - }); - - it('should fail on an missing authorization attribute (mac)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing attributes'); - done(); - }); - }); - - it('should fail on an unknown authorization attribute', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", x="3", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Unknown attribute: x'); - done(); - }); - }); - - it('should fail on an bad authorization header format', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123\\", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad header format'); - done(); - }); - }); - - it('should fail on an bad authorization attribute value', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="\t", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad attribute value: id'); - done(); - }); - }); - - it('should fail on an empty authorization attribute value', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad attribute value: id'); - done(); - }); - }); - - it('should fail on duplicated authorization attribute key', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", id="456", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Duplicate attribute: id'); - done(); - }); - }); - - it('should fail on an invalid authorization header format', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid header syntax'); - done(); - }); - }); - - it('should fail on an bad host header (missing host)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - host: ':8080', - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid Host header'); - done(); - }); - }); - - it('should fail on an bad host header (pad port)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:something', - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid Host header'); - done(); - }); - }); - - it('should fail on credentialsFunc error', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - return callback(new Error('Unknown user')); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown user'); - done(); - }); - }); - - it('should fail on missing credentials', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - return callback(null, null); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Unknown credentials'); - done(); - }); - }); - - it('should fail on invalid credentials', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - user: 'steve' - }; - - return callback(null, credentials); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid credentials'); - expect(err.response.payload.message).to.equal('An internal server error occurred'); - done(); - }); - }); - - it('should fail on unknown credentials algorithm', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'hmac-sha-0', - user: 'steve' - }; - - return callback(null, credentials); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown algorithm'); - expect(err.response.payload.message).to.equal('An internal server error occurred'); - done(); - }); - }); - - it('should fail on unknown bad mac', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcU4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - return callback(null, credentials); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad mac'); - done(); - }); - }); - }); - - describe('#header', function () { - - it('should return an empty authorization header on missing options', function (done) { - - var header = Hawk.server.header(); - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on missing credentials', function (done) { - - var header = Hawk.server.header(null, {}); - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid credentials', function (done) { - - var credentials = { - key: '2983d45yun89q' - }; - - var header = Hawk.server.header(credentials); - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid algorithm', function (done) { - - var artifacts = { - id: '123456' - }; - - var credentials = { - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var header = Hawk.server.header(credentials, artifacts); - expect(header).to.equal(''); - done(); - }); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/uri.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/uri.js deleted file mode 100755 index 44ffd7fb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/uri.js +++ /dev/null @@ -1,456 +0,0 @@ -// Load modules - -var Http = require('http'); -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('Uri', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - return callback(null, credentials); - }; - - it('should generate a bewit then successfully authenticate it', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?a=1&b=2', - host: 'example.com', - port: 80 - }; - - credentialsFunc('123456', function (err, credentials) { - - var bewit = Hawk.uri.getBewit('http://example.com/resource/4?a=1&b=2', { credentials: credentials, ttlSec: 60 * 60 * 24 * 365 * 100, ext: 'some-app-data' }); - req.url += '&bewit=' + bewit; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(attributes.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a bewit then successfully authenticate it (no ext)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?a=1&b=2', - host: 'example.com', - port: 80 - }; - - credentialsFunc('123456', function (err, credentials) { - - var bewit = Hawk.uri.getBewit('http://example.com/resource/4?a=1&b=2', { credentials: credentials, ttlSec: 60 * 60 * 24 * 365 * 100 }); - req.url += '&bewit=' + bewit; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - }); - - it('should successfully authenticate a request (last param)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?a=1&b=2&bewit=MTIzNDU2XDQ1MTE0ODQ2MjFcMzFjMmNkbUJFd1NJRVZDOVkva1NFb2c3d3YrdEVNWjZ3RXNmOGNHU2FXQT1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(attributes.ext).to.equal('some-app-data'); - done(); - }); - }); - - it('should successfully authenticate a request (first param)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MTE0ODQ2MjFcMzFjMmNkbUJFd1NJRVZDOVkva1NFb2c3d3YrdEVNWjZ3RXNmOGNHU2FXQT1cc29tZS1hcHAtZGF0YQ&a=1&b=2', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(attributes.ext).to.equal('some-app-data'); - done(); - }); - }); - - it('should successfully authenticate a request (only param)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MTE0ODQ2NDFcZm1CdkNWT3MvcElOTUUxSTIwbWhrejQ3UnBwTmo4Y1VrSHpQd3Q5OXJ1cz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(attributes.ext).to.equal('some-app-data'); - done(); - }); - }); - - it('should fail on multiple authentication', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MTE0ODQ2NDFcZm1CdkNWT3MvcElOTUUxSTIwbWhrejQ3UnBwTmo4Y1VrSHpQd3Q5OXJ1cz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080, - authorization: 'Basic asdasdasdasd' - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Multiple authentications'); - done(); - }); - }); - - it('should fail on method other than GET', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - var exp = Math.floor(Hawk.utils.now() / 1000) + 60; - var ext = 'some-app-data'; - var mac = Hawk.crypto.calculateMac('bewit', credentials, { - timestamp: exp, - nonce: '', - method: req.method, - resource: req.url, - host: req.host, - port: req.port, - ext: ext - }); - - var bewit = credentials.id + '\\' + exp + '\\' + mac + '\\' + ext; - - req.url += '&bewit=' + Hawk.utils.base64urlEncode(bewit); - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid method'); - done(); - }); - }); - }); - - it('should fail on invalid host header', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - headers: { - host: 'example.com:something' - } - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid Host header'); - done(); - }); - }); - - it('should fail on empty bewit', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Empty bewit'); - expect(err.isMissing).to.not.exist; - done(); - }); - }); - - it('should fail on invalid bewit', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=*', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid bewit encoding'); - expect(err.isMissing).to.not.exist; - done(); - }); - }); - - it('should fail on missing bewit', function (done) { - - var req = { - method: 'GET', - url: '/resource/4', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.not.exist; - expect(err.isMissing).to.equal(true); - done(); - }); - }); - - it('should fail on invalid bewit structure', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=abc', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid bewit structure'); - done(); - }); - }); - - it('should fail on empty bewit attribute', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=YVxcY1xk', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing bewit attributes'); - done(); - }); - }); - - it('should fail on expired access', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?a=1&b=2&bewit=MTIzNDU2XDEzNTY0MTg1ODNcWk1wZlMwWU5KNHV0WHpOMmRucTRydEk3NXNXTjFjeWVITTcrL0tNZFdVQT1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Access expired'); - done(); - }); - }); - - it('should fail on credentials function error', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(Hawk.error.badRequest('Boom')); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Boom'); - done(); - }); - }); - - it('should fail on null credentials function response', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(null, null); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Unknown credentials'); - done(); - }); - }); - - it('should fail on invalid credentials function response', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(null, {}); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid credentials'); - done(); - }); - }); - - it('should fail on invalid credentials function response (unknown algorithm)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(null, { key: 'xxx', algorithm: 'xxx' }); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown algorithm'); - done(); - }); - }); - - it('should fail on expired access', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(null, { key: 'xxx', algorithm: 'sha256' }); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad mac'); - done(); - }); - }); - }); - - describe('#getBewit', function () { - - it('should return a valid bewit value', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var bewit = Hawk.uri.getBewit('https://example.com/somewhere/over/the/rainbow', { credentials: credentials, ttlSec: 300, localtimeOffsetMsec: 1356420407232 - Hawk.utils.now(), ext: 'xandyandz' }); - expect(bewit).to.equal('MTIzNDU2XDEzNTY0MjA3MDdca3NjeHdOUjJ0SnBQMVQxekRMTlBiQjVVaUtJVTl0T1NKWFRVZEc3WDloOD1ceGFuZHlhbmR6'); - done(); - }); - - it('should return an empty bewit on invalid credentials', function (done) { - - var credentials = { - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var bewit = Hawk.uri.getBewit('https://example.com/somewhere/over/the/rainbow', { credentials: credentials, ttlSec: 3000, ext: 'xandyandz' }); - expect(bewit).to.equal(''); - done(); - }); - - it('should return an empty bewit on invalid algorithm', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var bewit = Hawk.uri.getBewit('https://example.com/somewhere/over/the/rainbow', { credentials: credentials, ttlSec: 300, ext: 'xandyandz' }); - expect(bewit).to.equal(''); - done(); - }); - - it('should return an empty bewit on missing options', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var bewit = Hawk.uri.getBewit('https://example.com/somewhere/over/the/rainbow'); - expect(bewit).to.equal(''); - done(); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/utils.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/utils.js deleted file mode 100755 index 0f5fef77..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/utils.js +++ /dev/null @@ -1,120 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hawk = require('../lib'); -var Package = require('../package.json'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('Utils', function () { - - describe('#parseHost', function () { - - it('returns port 80 for non tls node request', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com', - 'content-type': 'text/plain;x=y' - } - }; - - expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(80); - done(); - }); - - it('returns port 443 for non tls node request', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com', - 'content-type': 'text/plain;x=y' - }, - connection: { - encrypted: true - } - }; - - expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443); - done(); - }); - - it('returns port 443 for non tls node request (IPv6)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: '[123:123:123]', - 'content-type': 'text/plain;x=y' - }, - connection: { - encrypted: true - } - }; - - expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443); - done(); - }); - - it('parses IPv6 headers', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: '[123:123:123]:8000', - 'content-type': 'text/plain;x=y' - }, - connection: { - encrypted: true - } - }; - - var host = Hawk.utils.parseHost(req, 'Host'); - expect(host.port).to.equal('8000'); - expect(host.name).to.equal('[123:123:123]'); - done(); - }); - }); - - describe('#version', function () { - - it('returns the correct package version number', function (done) { - - expect(Hawk.utils.version()).to.equal(Package.version); - done(); - }); - }); - - describe('#unauthorized', function () { - - it('returns a hawk 401', function (done) { - - expect(Hawk.utils.unauthorized('kaboom').response.headers['WWW-Authenticate']).to.equal('Hawk error="kaboom"'); - done(); - }); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.dir-locals.el b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.dir-locals.el deleted file mode 100644 index 3bc9235f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.dir-locals.el +++ /dev/null @@ -1,6 +0,0 @@ -((nil . ((indent-tabs-mode . nil) - (tab-width . 8) - (fill-column . 80))) - (js-mode . ((js-indent-level . 2) - (indent-tabs-mode . nil) - ))) \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.npmignore deleted file mode 100644 index c143fb3a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -.gitmodules -deps -docs -Makefile -node_modules -test -tools \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/LICENSE deleted file mode 100644 index f6d947d2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/README.md deleted file mode 100644 index 0c707149..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# node-http-signature - -node-http-signature is a node.js library that has client and server components -for Joyent's [HTTP Signature Scheme](http_signing.md). - -## Usage - -Note the example below signs a request with the same key/cert used to start an -HTTP server. This is almost certainly not what you actaully want, but is just -used to illustrate the API calls; you will need to provide your own key -management in addition to this library. - -### Client - - var fs = require('fs'); - var https = require('https'); - var httpSignature = require('http-signature'); - - var key = fs.readFileSync('./key.pem', 'ascii'); - - var options = { - host: 'localhost', - port: 8443, - path: '/', - method: 'GET', - headers: {} - }; - - // Adds a 'Date' header in, signs it, and adds the - // 'Authorization' header in. - var req = https.request(options, function(res) { - console.log(res.statusCode); - }); - - - httpSignature.sign(req, { - key: key, - keyId: './cert.pem' - }); - - req.end(); - -### Server - - var fs = require('fs'); - var https = require('https'); - var httpSignature = require('http-signature'); - - var options = { - key: fs.readFileSync('./key.pem'), - cert: fs.readFileSync('./cert.pem') - }; - - https.createServer(options, function (req, res) { - var rc = 200; - var parsed = httpSignature.parseRequest(req); - var pub = fs.readFileSync(parsed.keyId, 'ascii'); - if (!httpSignature.verifySignature(parsed, pub)) - rc = 401; - - res.writeHead(rc); - res.end(); - }).listen(8443); - -## Installation - - npm install http-signature - -## License - -MIT. - -## Bugs - -See <https://github.com/joyent/node-http-signature/issues>. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/http_signing.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/http_signing.md deleted file mode 100644 index ba7321da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/http_signing.md +++ /dev/null @@ -1,296 +0,0 @@ -# Abstract - -This document describes a way to add origin authentication, message integrity, -and replay resistance to HTTP REST requests. It is intended to be used over -the HTTPS protocol. - -# Copyright Notice - -Copyright (c) 2011 Joyent, Inc. and the persons identified as document authors. -All rights reserved. - -Code Components extracted from this document must include MIT License text. - -# Introduction - -This protocol is intended to provide a standard way for clients to sign HTTP -requests. RFC2617 (HTTP Authentication) defines Basic and Digest authentication -mechanisms, and RFC5246 (TLS 1.2) defines client-auth, both of which are widely -employed on the Internet today. However, it is common place that the burdens of -PKI prevent web service operators from deploying that methodoloy, and so many -fall back to Basic authentication, which has poor security characteristics. - -Additionally, OAuth provides a fully-specified alternative for authorization -of web service requests, but is not (always) ideal for machine to machine -communication, as the key acquisition steps (generally) imply a fixed -infrastructure that may not make sense to a service provider (e.g., symmetric -keys). - -Several web service providers have invented their own schemes for signing -HTTP requests, but to date, none have been placed in the public domain as a -standard. This document serves that purpose. There are no techniques in this -proposal that are novel beyond previous art, however, this aims to be a simple -mechanism for signing these requests. - -# Signature Authentication Scheme - -The "signature" authentication scheme is based on the model that the client must -authenticate itself with a digital signature produced by either a private -asymmetric key (e.g., RSA) or a shared symmetric key (e.g., HMAC). The scheme -is parameterized enough such that it is not bound to any particular key type or -signing algorithm. However, it does explicitly assume that clients can send an -HTTP `Date` header. - -## Authorization Header - -The client is expected to send an Authorization header (as defined in RFC 2617) -with the following parameterization: - - credentials := "Signature" params - params := 1#(keyId | algorithm | [headers] | [ext] | signature) - digitalSignature := plain-string - - keyId := "keyId" "=" <"> plain-string <"> - algorithm := "algorithm" "=" <"> plain-string <"> - headers := "headers" "=" <"> 1#headers-value <"> - ext := "ext" "=" <"> plain-string <"> - signature := "signature" "=" <"> plain-string <"> - - headers-value := plain-string - plain-string = 1*( %x20-21 / %x23-5B / %x5D-7E ) - -### Signature Parameters - -#### keyId - -REQUIRED. The `keyId` field is an opaque string that the server can use to look -up the component they need to validate the signature. It could be an SSH key -fingerprint, an LDAP DN, etc. Management of keys and assignment of `keyId` is -out of scope for this document. - -#### algorithm - -REQUIRED. The `algorithm` parameter is used if the client and server agree on a -non-standard digital signature algorithm. The full list of supported signature -mechanisms is listed below. - -#### headers - -OPTIONAL. The `headers` parameter is used to specify the list of HTTP headers -used to sign the request. If specified, it should be a quoted list of HTTP -header names, separated by a single space character. By default, only one -HTTP header is signed, which is the `Date` header. Note that the list MUST be -specified in the order the values are concatenated together during signing. To -include the HTTP request line in the signature calculation, use the special -`request-line` value. While this is overloading the definition of `headers` in -HTTP linguism, the request-line is defined in RFC 2616, and as the outlier from -headers in useful signature calculation, it is deemed simpler to simply use -`request-line` than to add a separate parameter for it. - -#### extensions - -OPTIONAL. The `extensions` parameter is used to include additional information -which is covered by the request. The content and format of the string is out of -scope for this document, and expected to be specified by implementors. - -#### signature - -REQUIRED. The `signature` parameter is a `Base64` encoded digital signature -generated by the client. The client uses the `algorithm` and `headers` request -parameters to form a canonicalized `signing string`. This `signing string` is -then signed with the key associated with `keyId` and the algorithm -corresponding to `algorithm`. The `signature` parameter is then set to the -`Base64` encoding of the signature. - -### Signing String Composition - -In order to generate the string that is signed with a key, the client MUST take -the values of each HTTP header specified by `headers` in the order they appear. - -1. If the header name is not `request-line` then append the lowercased header - name followed with an ASCII colon `:` and an ASCII space ` `. -2. If the header name is `request-line` then appened the HTTP request line, - otherwise append the header value. -3. If value is not the last value then append an ASCII newline `\n`. The string - MUST NOT include a trailing ASCII newline. - -# Example Requests - -All requests refer to the following request (body ommitted): - - POST /foo HTTP/1.1 - Host: example.org - Date: Tue, 07 Jun 2011 20:51:35 GMT - Content-Type: application/json - Content-MD5: h0auK8hnYJKmHTLhKtMTkQ== - Content-Length: 123 - -The "rsa-key-1" keyId refers to a private key known to the client and a public -key known to the server. The "hmac-key-1" keyId refers to key known to the -client and server. - -## Default parameterization - -The authorization header and signature would be generated as: - - Authorization: Signature keyId="rsa-key-1",algorithm="rsa-sha256",signature="Base64(RSA-SHA256(signing string))" - -The client would compose the signing string as: - - date: Tue, 07 Jun 2011 20:51:35 GMT - -## Header List - -The authorization header and signature would be generated as: - - Authorization: Signature keyId="rsa-key-1",algorithm="rsa-sha256",headers="request-line date content-type content-md5",signature="Base64(RSA-SHA256(signing string))" - -The client would compose the signing string as (`+ "\n"` inserted for -readability): - - POST /foo HTTP/1.1 + "\n" - date: Tue, 07 Jun 2011 20:51:35 GMT + "\n" - content-type: application/json + "\n" - content-md5: h0auK8hnYJKmHTLhKtMTkQ== - -## Algorithm - -The authorization header and signature would be generated as: - - Authorization: Signature keyId="hmac-key-1",algorithm="hmac-sha1",signature="Base64(HMAC-SHA1(signing string))" - -The client would compose the signing string as: - - date: Tue, 07 Jun 2011 20:51:35 GMT - -# Signing Algorithms - -Currently supported algorithm names are: - -* rsa-sha1 -* rsa-sha256 -* rsa-sha512 -* dsa-sha1 -* hmac-sha1 -* hmac-sha256 -* hmac-sha512 - -# Security Considerations - -## Default Parameters - -Note the default parameterization of the `Signature` scheme is only safe if all -requests are carried over a secure transport (i.e., TLS). Sending the default -scheme over a non-secure transport will leave the request vulnerable to -spoofing, tampering, replay/repudiaton, and integrity violations (if using the -STRIDE threat-modeling methodology). - -## Insecure Transports - -If sending the request over plain HTTP, service providers SHOULD require clients -to sign ALL HTTP headers, and the `request-line`. Additionally, service -providers SHOULD require `Content-MD5` calculations to be performed to ensure -against any tampering from clients. - -## Nonces - -Nonces are out of scope for this document simply because many service providers -fail to implement them correctly, or do not adopt security specfiications -because of the infrastructure complexity. Given the `header` parameterization, -a service provider is fully enabled to add nonce semantics into this scheme by -using something like an `x-request-nonce` header, and ensuring it is signed -with the `Date` header. - -## Clock Skew - -As the default scheme is to sign the `Date` header, service providers SHOULD -protect against logged replay attacks by enforcing a clock skew. The server -SHOULD be synchronized with NTP, and the recommendation in this specification -is to allow 300s of clock skew (in either direction). - -## Required Headers to Sign - -It is out of scope for this document to dictate what headers a service provider -will want to enforce, but service providers SHOULD at minimum include the -`Date` header. - -# References - -## Normative References - -* [RFC2616] Hypertext Transfer Protocol -- HTTP/1.1 -* [RFC2617] HTTP Authentication: Basic and Digest Access Authentication -* [RFC5246] The Transport Layer Security (TLS) Protocol Version 1.2 - -## Informative References - - Name: Mark Cavage (editor) - Company: Joyent, Inc. - Email: mark.cavage@joyent.com - URI: http://www.joyent.com - -# Appendix A - Test Values - -The following test data uses the RSA (2048b) keys, which we will refer -to as `keyId=Test` in the following samples: - - -----BEGIN PUBLIC KEY----- - MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3 - 6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6 - Z4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw - oYi+1hqp1fIekaxsyQIDAQAB - -----END PUBLIC KEY----- - - -----BEGIN RSA PRIVATE KEY----- - MIICXgIBAAKBgQDCFENGw33yGihy92pDjZQhl0C36rPJj+CvfSC8+q28hxA161QF - NUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6Z4UMR7EOcpfdUE9Hf3m/hs+F - UR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJwoYi+1hqp1fIekaxsyQIDAQAB - AoGBAJR8ZkCUvx5kzv+utdl7T5MnordT1TvoXXJGXK7ZZ+UuvMNUCdN2QPc4sBiA - QWvLw1cSKt5DsKZ8UETpYPy8pPYnnDEz2dDYiaew9+xEpubyeW2oH4Zx71wqBtOK - kqwrXa/pzdpiucRRjk6vE6YY7EBBs/g7uanVpGibOVAEsqH1AkEA7DkjVH28WDUg - f1nqvfn2Kj6CT7nIcE3jGJsZZ7zlZmBmHFDONMLUrXR/Zm3pR5m0tCmBqa5RK95u - 412jt1dPIwJBANJT3v8pnkth48bQo/fKel6uEYyboRtA5/uHuHkZ6FQF7OUkGogc - mSJluOdc5t6hI1VsLn0QZEjQZMEOWr+wKSMCQQCC4kXJEsHAve77oP6HtG/IiEn7 - kpyUXRNvFsDE0czpJJBvL/aRFUJxuRK91jhjC68sA7NsKMGg5OXb5I5Jj36xAkEA - gIT7aFOYBFwGgQAQkWNKLvySgKbAZRTeLBacpHMuQdl1DfdntvAyqpAZ0lY0RKmW - G6aFKaqQfOXKCyWoUiVknQJAXrlgySFci/2ueKlIE1QqIiLSZ8V8OlpFLRnb1pzI - 7U1yQXnTAEFYM560yJlzUpOb1V4cScGd365tiSMvxLOvTA== - -----END RSA PRIVATE KEY----- - -And all examples use this request: - - POST /foo?param=value&pet=dog HTTP/1.1 - Host: example.com - Date: Thu, 05 Jan 2012 21:31:40 GMT - Content-Type: application/json - Content-MD5: Sd/dVLAcvNLSq16eXua5uQ== - Content-Length: 18 - - {"hello": "world"} - -### Default - -The string to sign would be: - - date: Thu, 05 Jan 2012 21:31:40 GMT - -The Authorization header would be: - - Authorization: Signature keyId="Test",algorithm="rsa-sha256",signature="JldXnt8W9t643M2Sce10gqCh/+E7QIYLiI+bSjnFBGCti7s+mPPvOjVb72sbd1FjeOUwPTDpKbrQQORrm+xBYfAwCxF3LBSSzORvyJ5nRFCFxfJ3nlQD6Kdxhw8wrVZX5nSem4A/W3C8qH5uhFTRwF4ruRjh+ENHWuovPgO/HGQ=" - -### All Headers - -Parameterized to include all headers, the string to sign would be (`+ "\n"` -inserted for readability): - - POST /foo?param=value&pet=dog HTTP/1.1 + "\n" - host: example.com + "\n" - date: Thu, 05 Jan 2012 21:31:40 GMT + "\n" - content-type: application/json + "\n" - content-md5: Sd/dVLAcvNLSq16eXua5uQ== + "\n" - content-length: 18 - -The Authorization header would be: - - Authorization: Signature keyId="Test",algorithm="rsa-sha256",headers="request-line host date content-type content-md5 content-length",signature="Gm7W/r+e90REDpWytALMrft4MqZxCmslOTOvwJX17ViEBA5E65QqvWI0vIH3l/vSsGiaMVmuUgzYsJLYMLcm5dGrv1+a+0fCoUdVKPZWHyImQEqpLkopVwqEH67LVECFBqFTAKlQgBn676zrfXQbb+b/VebAsNUtvQMe6cTjnDY=" - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/index.js deleted file mode 100644 index 3ac70b77..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/index.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2011 Joyent, Inc. All rights reserved. - -var parser = require('./parser'); -var signer = require('./signer'); -var verify = require('./verify'); -var util = require('./util'); - - - -///--- API - -module.exports = { - - parse: parser.parseRequest, - parseRequest: parser.parseRequest, - - sign: signer.signRequest, - signRequest: signer.signRequest, - - sshKeyToPEM: util.sshKeyToPEM, - sshKeyFingerprint: util.fingerprint, - - verify: verify.verifySignature, - verifySignature: verify.verifySignature -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/parser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/parser.js deleted file mode 100644 index fd9ac102..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/parser.js +++ /dev/null @@ -1,304 +0,0 @@ -// Copyright 2012 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var util = require('util'); - - - -///--- Globals - -var Algorithms = { - 'rsa-sha1': true, - 'rsa-sha256': true, - 'rsa-sha512': true, - 'dsa-sha1': true, - 'hmac-sha1': true, - 'hmac-sha256': true, - 'hmac-sha512': true -}; - -var State = { - New: 0, - Params: 1 -}; - -var ParamsState = { - Name: 0, - Quote: 1, - Value: 2, - Comma: 3 -}; - - - -///--- Specific Errors - -function HttpSignatureError(message, caller) { - if (Error.captureStackTrace) - Error.captureStackTrace(this, caller || HttpSignatureError); - - this.message = message; - this.name = caller.name; -} -util.inherits(HttpSignatureError, Error); - -function ExpiredRequestError(message) { - HttpSignatureError.call(this, message, ExpiredRequestError); -} -util.inherits(ExpiredRequestError, HttpSignatureError); - - -function InvalidHeaderError(message) { - HttpSignatureError.call(this, message, InvalidHeaderError); -} -util.inherits(InvalidHeaderError, HttpSignatureError); - - -function InvalidParamsError(message) { - HttpSignatureError.call(this, message, InvalidParamsError); -} -util.inherits(InvalidParamsError, HttpSignatureError); - - -function MissingHeaderError(message) { - HttpSignatureError.call(this, message, MissingHeaderError); -} -util.inherits(MissingHeaderError, HttpSignatureError); - - - -///--- Exported API - -module.exports = { - - /** - * Parses the 'Authorization' header out of an http.ServerRequest object. - * - * Note that this API will fully validate the Authorization header, and throw - * on any error. It will not however check the signature, or the keyId format - * as those are specific to your environment. You can use the options object - * to pass in extra constraints. - * - * As a response object you can expect this: - * - * { - * "scheme": "Signature", - * "params": { - * "keyId": "foo", - * "algorithm": "rsa-sha256", - * "headers": [ - * "date" or "x-date", - * "content-md5" - * ], - * "signature": "base64" - * }, - * "signingString": "ready to be passed to crypto.verify()" - * } - * - * @param {Object} request an http.ServerRequest. - * @param {Object} options an optional options object with: - * - clockSkew: allowed clock skew in seconds (default 300). - * - headers: required header names (def: date or x-date) - * - algorithms: algorithms to support (default: all). - * @return {Object} parsed out object (see above). - * @throws {TypeError} on invalid input. - * @throws {InvalidHeaderError} on an invalid Authorization header error. - * @throws {InvalidParamsError} if the params in the scheme are invalid. - * @throws {MissingHeaderError} if the params indicate a header not present, - * either in the request headers from the params, - * or not in the params from a required header - * in options. - * @throws {ExpiredRequestError} if the value of date or x-date exceeds skew. - */ - parseRequest: function parseRequest(request, options) { - assert.object(request, 'request'); - assert.object(request.headers, 'request.headers'); - if (options === undefined) { - options = {}; - } - if (options.headers === undefined) { - options.headers = [request.headers['x-date'] ? 'x-date' : 'date']; - } - assert.object(options, 'options'); - assert.arrayOfString(options.headers, 'options.headers'); - assert.optionalNumber(options.clockSkew, 'options.clockSkew'); - - if (!request.headers.authorization) - throw new MissingHeaderError('no authorization header present in ' + - 'the request'); - - options.clockSkew = options.clockSkew || 300; - - - var i = 0; - var state = State.New; - var substate = ParamsState.Name; - var tmpName = ''; - var tmpValue = ''; - - var parsed = { - scheme: '', - params: {}, - signingString: '', - - get algorithm() { - return this.params.algorithm.toUpperCase(); - }, - - get keyId() { - return this.params.keyId; - } - - }; - - var authz = request.headers.authorization; - for (i = 0; i < authz.length; i++) { - var c = authz.charAt(i); - - switch (Number(state)) { - - case State.New: - if (c !== ' ') parsed.scheme += c; - else state = State.Params; - break; - - case State.Params: - switch (Number(substate)) { - - case ParamsState.Name: - var code = c.charCodeAt(0); - // restricted name of A-Z / a-z - if ((code >= 0x41 && code <= 0x5a) || // A-Z - (code >= 0x61 && code <= 0x7a)) { // a-z - tmpName += c; - } else if (c === '=') { - if (tmpName.length === 0) - throw new InvalidHeaderError('bad param format'); - substate = ParamsState.Quote; - } else { - throw new InvalidHeaderError('bad param format'); - } - break; - - case ParamsState.Quote: - if (c === '"') { - tmpValue = ''; - substate = ParamsState.Value; - } else { - throw new InvalidHeaderError('bad param format'); - } - break; - - case ParamsState.Value: - if (c === '"') { - parsed.params[tmpName] = tmpValue; - substate = ParamsState.Comma; - } else { - tmpValue += c; - } - break; - - case ParamsState.Comma: - if (c === ',') { - tmpName = ''; - substate = ParamsState.Name; - } else { - throw new InvalidHeaderError('bad param format'); - } - break; - - default: - throw new Error('Invalid substate'); - } - break; - - default: - throw new Error('Invalid substate'); - } - - } - - if (!parsed.params.headers || parsed.params.headers === '') { - if (request.headers['x-date']) { - parsed.params.headers = ['x-date']; - } else { - parsed.params.headers = ['date']; - } - } else { - parsed.params.headers = parsed.params.headers.split(' '); - } - - // Minimally validate the parsed object - if (!parsed.scheme || parsed.scheme !== 'Signature') - throw new InvalidHeaderError('scheme was not "Signature"'); - - if (!parsed.params.keyId) - throw new InvalidHeaderError('keyId was not specified'); - - if (!parsed.params.algorithm) - throw new InvalidHeaderError('algorithm was not specified'); - - if (!parsed.params.signature) - throw new InvalidHeaderError('signature was not specified'); - - // Check the algorithm against the official list - parsed.params.algorithm = parsed.params.algorithm.toLowerCase(); - if (!Algorithms[parsed.params.algorithm]) - throw new InvalidParamsError(parsed.params.algorithm + - ' is not supported'); - - // Build the signingString - for (i = 0; i < parsed.params.headers.length; i++) { - var h = parsed.params.headers[i].toLowerCase(); - parsed.params.headers[i] = h; - - if (h !== 'request-line') { - var value = request.headers[h]; - if (!value) - throw new MissingHeaderError(h + ' was not in the request'); - parsed.signingString += h + ': ' + value; - } else { - parsed.signingString += - request.method + ' ' + request.url + ' HTTP/' + request.httpVersion; - } - - if ((i + 1) < parsed.params.headers.length) - parsed.signingString += '\n'; - } - - // Check against the constraints - var date; - if (request.headers.date || request.headers['x-date']) { - if (request.headers['x-date']) { - date = new Date(request.headers['x-date']); - } else { - date = new Date(request.headers.date); - } - var now = new Date(); - var skew = Math.abs(now.getTime() - date.getTime()); - - if (skew > options.clockSkew * 1000) { - throw new ExpiredRequestError('clock skew of ' + - (skew / 1000) + - 's was greater than ' + - options.clockSkew + 's'); - } - } - - options.headers.forEach(function (hdr) { - // Remember that we already checked any headers in the params - // were in the request, so if this passes we're good. - if (parsed.params.headers.indexOf(hdr) < 0) - throw new MissingHeaderError(hdr + ' was not a signed header'); - }); - - if (options.algorithms) { - if (options.algorithms.indexOf(parsed.params.algorithm) === -1) - throw new InvalidParamsError(parsed.params.algorithm + - ' is not a supported algorithm'); - } - - return parsed; - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/signer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/signer.js deleted file mode 100644 index 8095f0d1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/signer.js +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2012 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var crypto = require('crypto'); -var http = require('http'); - -var sprintf = require('util').format; - - - -///--- Globals - -var Algorithms = { - 'rsa-sha1': true, - 'rsa-sha256': true, - 'rsa-sha512': true, - 'dsa-sha1': true, - 'hmac-sha1': true, - 'hmac-sha256': true, - 'hmac-sha512': true -}; - -var Authorization = - 'Signature keyId="%s",algorithm="%s",headers="%s",signature="%s"'; - - - -///--- Specific Errors - -function MissingHeaderError(message) { - this.name = 'MissingHeaderError'; - this.message = message; - this.stack = (new Error()).stack; -} -MissingHeaderError.prototype = new Error(); - - -function InvalidAlgorithmError(message) { - this.name = 'InvalidAlgorithmError'; - this.message = message; - this.stack = (new Error()).stack; -} -InvalidAlgorithmError.prototype = new Error(); - - - -///--- Internal Functions - -function _pad(val) { - if (parseInt(val, 10) < 10) { - val = '0' + val; - } - return val; -} - - -function _rfc1123() { - var date = new Date(); - - var months = ['Jan', - 'Feb', - 'Mar', - 'Apr', - 'May', - 'Jun', - 'Jul', - 'Aug', - 'Sep', - 'Oct', - 'Nov', - 'Dec']; - var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; - return days[date.getUTCDay()] + ', ' + - _pad(date.getUTCDate()) + ' ' + - months[date.getUTCMonth()] + ' ' + - date.getUTCFullYear() + ' ' + - _pad(date.getUTCHours()) + ':' + - _pad(date.getUTCMinutes()) + ':' + - _pad(date.getUTCSeconds()) + - ' GMT'; -} - - - -///--- Exported API - -module.exports = { - - /** - * Adds an 'Authorization' header to an http.ClientRequest object. - * - * Note that this API will add a Date header if it's not already set. Any - * other headers in the options.headers array MUST be present, or this - * will throw. - * - * You shouldn't need to check the return type; it's just there if you want - * to be pedantic. - * - * @param {Object} request an instance of http.ClientRequest. - * @param {Object} options signing parameters object: - * - {String} keyId required. - * - {String} key required (either a PEM or HMAC key). - * - {Array} headers optional; defaults to ['date']. - * - {String} algorithm optional; defaults to 'rsa-sha256'. - * - {String} httpVersion optional; defaults to '1.1'. - * @return {Boolean} true if Authorization (and optionally Date) were added. - * @throws {TypeError} on bad parameter types (input). - * @throws {InvalidAlgorithmError} if algorithm was bad. - * @throws {MissingHeaderError} if a header to be signed was specified but - * was not present. - */ - signRequest: function signRequest(request, options) { - assert.object(request, 'request'); - assert.object(options, 'options'); - assert.optionalString(options.algorithm, 'options.algorithm'); - assert.string(options.keyId, 'options.keyId'); - assert.optionalArrayOfString(options.headers, 'options.headers'); - assert.optionalString(options.httpVersion, 'options.httpVersion'); - - if (!request.getHeader('Date')) - request.setHeader('Date', _rfc1123()); - if (!options.headers) - options.headers = ['date']; - if (!options.algorithm) - options.algorithm = 'rsa-sha256'; - if (!options.httpVersion) - options.httpVersion = '1.1'; - - options.algorithm = options.algorithm.toLowerCase(); - - if (!Algorithms[options.algorithm]) - throw new InvalidAlgorithmError(options.algorithm + ' is not supported'); - - var i; - var stringToSign = ''; - for (i = 0; i < options.headers.length; i++) { - if (typeof (options.headers[i]) !== 'string') - throw new TypeError('options.headers must be an array of Strings'); - - var h = options.headers[i].toLowerCase(); - - if (h !== 'request-line') { - var value = request.getHeader(h); - if (!value) { - throw new MissingHeaderError(h + ' was not in the request'); - } - stringToSign += h + ': ' + value; - } else { - value = - stringToSign += - request.method + ' ' + request.path + ' HTTP/' + options.httpVersion; - } - - if ((i + 1) < options.headers.length) - stringToSign += '\n'; - } - - var alg = options.algorithm.match(/(hmac|rsa)-(\w+)/); - var signature; - if (alg[1] === 'hmac') { - var hmac = crypto.createHmac(alg[2].toUpperCase(), options.key); - hmac.update(stringToSign); - signature = hmac.digest('base64'); - } else { - var signer = crypto.createSign(options.algorithm.toUpperCase()); - signer.update(stringToSign); - signature = signer.sign(options.key, 'base64'); - } - - request.setHeader('Authorization', sprintf(Authorization, - options.keyId, - options.algorithm, - options.headers.join(' '), - signature)); - - return true; - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/util.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/util.js deleted file mode 100644 index 30bbf045..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/util.js +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright 2012 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var crypto = require('crypto'); - -var asn1 = require('asn1'); -var ctype = require('ctype'); - - - -///--- Helpers - -function readNext(buffer, offset) { - var len = ctype.ruint32(buffer, 'big', offset); - offset += 4; - - var newOffset = offset + len; - - return { - data: buffer.slice(offset, newOffset), - offset: newOffset - }; -} - - -function writeInt(writer, buffer) { - writer.writeByte(0x02); // ASN1.Integer - writer.writeLength(buffer.length); - - for (var i = 0; i < buffer.length; i++) - writer.writeByte(buffer[i]); - - return writer; -} - - -function rsaToPEM(key) { - var buffer; - var der; - var exponent; - var i; - var modulus; - var newKey = ''; - var offset = 0; - var type; - var tmp; - - try { - buffer = new Buffer(key.split(' ')[1], 'base64'); - - tmp = readNext(buffer, offset); - type = tmp.data.toString(); - offset = tmp.offset; - - if (type !== 'ssh-rsa') - throw new Error('Invalid ssh key type: ' + type); - - tmp = readNext(buffer, offset); - exponent = tmp.data; - offset = tmp.offset; - - tmp = readNext(buffer, offset); - modulus = tmp.data; - } catch (e) { - throw new Error('Invalid ssh key: ' + key); - } - - // DER is a subset of BER - der = new asn1.BerWriter(); - - der.startSequence(); - - der.startSequence(); - der.writeOID('1.2.840.113549.1.1.1'); - der.writeNull(); - der.endSequence(); - - der.startSequence(0x03); // bit string - der.writeByte(0x00); - - // Actual key - der.startSequence(); - writeInt(der, modulus); - writeInt(der, exponent); - der.endSequence(); - - // bit string - der.endSequence(); - - der.endSequence(); - - tmp = der.buffer.toString('base64'); - for (i = 0; i < tmp.length; i++) { - if ((i % 64) === 0) - newKey += '\n'; - newKey += tmp.charAt(i); - } - - if (!/\\n$/.test(newKey)) - newKey += '\n'; - - return '-----BEGIN PUBLIC KEY-----' + newKey + '-----END PUBLIC KEY-----\n'; -} - - -function dsaToPEM(key) { - var buffer; - var offset = 0; - var tmp; - var der; - var newKey = ''; - - var type; - var p; - var q; - var g; - var y; - - try { - buffer = new Buffer(key.split(' ')[1], 'base64'); - - tmp = readNext(buffer, offset); - type = tmp.data.toString(); - offset = tmp.offset; - - /* JSSTYLED */ - if (!/^ssh-ds[as].*/.test(type)) - throw new Error('Invalid ssh key type: ' + type); - - tmp = readNext(buffer, offset); - p = tmp.data; - offset = tmp.offset; - - tmp = readNext(buffer, offset); - q = tmp.data; - offset = tmp.offset; - - tmp = readNext(buffer, offset); - g = tmp.data; - offset = tmp.offset; - - tmp = readNext(buffer, offset); - y = tmp.data; - } catch (e) { - console.log(e.stack); - throw new Error('Invalid ssh key: ' + key); - } - - // DER is a subset of BER - der = new asn1.BerWriter(); - - der.startSequence(); - - der.startSequence(); - der.writeOID('1.2.840.10040.4.1'); - - der.startSequence(); - writeInt(der, p); - writeInt(der, q); - writeInt(der, g); - der.endSequence(); - - der.endSequence(); - - der.startSequence(0x03); // bit string - der.writeByte(0x00); - writeInt(der, y); - der.endSequence(); - - der.endSequence(); - - tmp = der.buffer.toString('base64'); - for (var i = 0; i < tmp.length; i++) { - if ((i % 64) === 0) - newKey += '\n'; - newKey += tmp.charAt(i); - } - - if (!/\\n$/.test(newKey)) - newKey += '\n'; - - return '-----BEGIN PUBLIC KEY-----' + newKey + '-----END PUBLIC KEY-----\n'; -} - - -///--- API - -module.exports = { - - /** - * Converts an OpenSSH public key (rsa only) to a PKCS#8 PEM file. - * - * The intent of this module is to interoperate with OpenSSL only, - * specifically the node crypto module's `verify` method. - * - * @param {String} key an OpenSSH public key. - * @return {String} PEM encoded form of the RSA public key. - * @throws {TypeError} on bad input. - * @throws {Error} on invalid ssh key formatted data. - */ - sshKeyToPEM: function sshKeyToPEM(key) { - assert.string(key, 'ssh_key'); - - /* JSSTYLED */ - if (/^ssh-rsa.*/.test(key)) - return rsaToPEM(key); - - /* JSSTYLED */ - if (/^ssh-ds[as].*/.test(key)) - return dsaToPEM(key); - - throw new Error('Only RSA and DSA public keys are allowed'); - }, - - - /** - * Generates an OpenSSH fingerprint from an ssh public key. - * - * @param {String} key an OpenSSH public key. - * @return {String} key fingerprint. - * @throws {TypeError} on bad input. - * @throws {Error} if what you passed doesn't look like an ssh public key. - */ - fingerprint: function fingerprint(key) { - assert.string(key, 'ssh_key'); - - var pieces = key.split(' '); - if (!pieces || !pieces.length || pieces.length < 2) - throw new Error('invalid ssh key'); - - var data = new Buffer(pieces[1], 'base64'); - - var hash = crypto.createHash('md5'); - hash.update(data); - var digest = hash.digest('hex'); - - var fp = ''; - for (var i = 0; i < digest.length; i++) { - if (i && i % 2 === 0) - fp += ':'; - - fp += digest[i]; - } - - return fp; - } - - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/verify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/verify.js deleted file mode 100644 index 5bf95896..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/verify.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2011 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var crypto = require('crypto'); - - - -///--- Exported API - -module.exports = { - - /** - * Simply wraps up the node crypto operations for you, and returns - * true or false. You are expected to pass in an object that was - * returned from `parse()`. - * - * @param {Object} parsedSignature the object you got from `parse`. - * @param {String} key either an RSA private key PEM or HMAC secret. - * @return {Boolean} true if valid, false otherwise. - * @throws {TypeError} if you pass in bad arguments. - */ - verifySignature: function verifySignature(parsedSignature, key) { - assert.object(parsedSignature, 'parsedSignature'); - assert.string(key, 'key'); - - var alg = parsedSignature.algorithm.match(/(HMAC|RSA|DSA)-(\w+)/); - if (!alg || alg.length !== 3) - throw new TypeError('parsedSignature: unsupported algorithm ' + - parsedSignature.algorithm); - - if (alg[1] === 'HMAC') { - var hmac = crypto.createHmac(alg[2].toUpperCase(), key); - hmac.update(parsedSignature.signingString); - return (hmac.digest('base64') === parsedSignature.params.signature); - } else { - var verify = crypto.createVerify(alg[0]); - verify.update(parsedSignature.signingString); - return verify.verify(key, parsedSignature.params.signature, 'base64'); - } - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore deleted file mode 100644 index eb03e3e1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -*.log diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE deleted file mode 100644 index 9b5dcdb7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Mark Cavage, 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md deleted file mode 100644 index 7cebf7a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md +++ /dev/null @@ -1,50 +0,0 @@ -node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS. -Currently BER encoding is supported; at some point I'll likely have to do DER. - -## Usage - -Mostly, if you're *actually* needing to read and write ASN.1, you probably don't -need this readme to explain what and why. If you have no idea what ASN.1 is, -see this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc - -The source is pretty much self-explanatory, and has read/write methods for the -common types out there. - -### Decoding - -The following reads an ASN.1 sequence with a boolean. - - var Ber = require('asn1').Ber; - - var reader = new Ber.Reader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff])); - - reader.readSequence(); - console.log('Sequence len: ' + reader.length); - if (reader.peek() === Ber.Boolean) - console.log(reader.readBoolean()); - -### Encoding - -The following generates the same payload as above. - - var Ber = require('asn1').Ber; - - var writer = new Ber.Writer(); - - writer.startSequence(); - writer.writeBoolean(true); - writer.endSequence(); - - console.log(writer.buffer); - -## Installation - - npm install asn1 - -## License - -MIT. - -## Bugs - -See <https://github.com/mcavage/node-asn1/issues>. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js deleted file mode 100644 index ff21d4fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - - -module.exports = { - - newInvalidAsn1Error: function(msg) { - var e = new Error(); - e.name = 'InvalidAsn1Error'; - e.message = msg || ''; - return e; - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js deleted file mode 100644 index 4fb90aea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var errors = require('./errors'); -var types = require('./types'); - -var Reader = require('./reader'); -var Writer = require('./writer'); - - -///--- Exports - -module.exports = { - - Reader: Reader, - - Writer: Writer - -}; - -for (var t in types) { - if (types.hasOwnProperty(t)) - module.exports[t] = types[t]; -} -for (var e in errors) { - if (errors.hasOwnProperty(e)) - module.exports[e] = errors[e]; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js deleted file mode 100644 index bd3357a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var assert = require('assert'); - -var ASN1 = require('./types'); -var errors = require('./errors'); - - -///--- Globals - -var newInvalidAsn1Error = errors.newInvalidAsn1Error; - - - -///--- API - -function Reader(data) { - if (!data || !Buffer.isBuffer(data)) - throw new TypeError('data must be a node Buffer'); - - this._buf = data; - this._size = data.length; - - // These hold the "current" state - this._len = 0; - this._offset = 0; - - var self = this; - this.__defineGetter__('length', function() { return self._len; }); - this.__defineGetter__('offset', function() { return self._offset; }); - this.__defineGetter__('remain', function() { - return self._size - self._offset; - }); - this.__defineGetter__('buffer', function() { - return self._buf.slice(self._offset); - }); -} - - -/** - * Reads a single byte and advances offset; you can pass in `true` to make this - * a "peek" operation (i.e., get the byte, but don't advance the offset). - * - * @param {Boolean} peek true means don't move offset. - * @return {Number} the next byte, null if not enough data. - */ -Reader.prototype.readByte = function(peek) { - if (this._size - this._offset < 1) - return null; - - var b = this._buf[this._offset] & 0xff; - - if (!peek) - this._offset += 1; - - return b; -}; - - -Reader.prototype.peek = function() { - return this.readByte(true); -}; - - -/** - * Reads a (potentially) variable length off the BER buffer. This call is - * not really meant to be called directly, as callers have to manipulate - * the internal buffer afterwards. - * - * As a result of this call, you can call `Reader.length`, until the - * next thing called that does a readLength. - * - * @return {Number} the amount of offset to advance the buffer. - * @throws {InvalidAsn1Error} on bad ASN.1 - */ -Reader.prototype.readLength = function(offset) { - if (offset === undefined) - offset = this._offset; - - if (offset >= this._size) - return null; - - var lenB = this._buf[offset++] & 0xff; - if (lenB === null) - return null; - - if ((lenB & 0x80) == 0x80) { - lenB &= 0x7f; - - if (lenB == 0) - throw newInvalidAsn1Error('Indefinite length not supported'); - - if (lenB > 4) - throw newInvalidAsn1Error('encoding too long'); - - if (this._size - offset < lenB) - return null; - - this._len = 0; - for (var i = 0; i < lenB; i++) - this._len = (this._len << 8) + (this._buf[offset++] & 0xff); - - } else { - // Wasn't a variable length - this._len = lenB; - } - - return offset; -}; - - -/** - * Parses the next sequence in this BER buffer. - * - * To get the length of the sequence, call `Reader.length`. - * - * @return {Number} the sequence's tag. - */ -Reader.prototype.readSequence = function(tag) { - var seq = this.peek(); - if (seq === null) - return null; - if (tag !== undefined && tag !== seq) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + seq.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - this._offset = o; - return seq; -}; - - -Reader.prototype.readInt = function() { - return this._readTag(ASN1.Integer); -}; - - -Reader.prototype.readBoolean = function() { - return (this._readTag(ASN1.Boolean) === 0 ? false : true); -}; - - -Reader.prototype.readEnumeration = function() { - return this._readTag(ASN1.Enumeration); -}; - - -Reader.prototype.readString = function(tag, retbuf) { - if (!tag) - tag = ASN1.OctetString; - - var b = this.peek(); - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - - if (o === null) - return null; - - if (this.length > this._size - o) - return null; - - this._offset = o; - - if (this.length === 0) - return ''; - - var str = this._buf.slice(this._offset, this._offset + this.length); - this._offset += this.length; - - return retbuf ? str : str.toString('utf8'); -}; - -Reader.prototype.readOID = function(tag) { - if (!tag) - tag = ASN1.OID; - - var b = this.peek(); - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - if (this.length > this._size - o) - return null; - - this._offset = o; - - var values = []; - var value = 0; - - for (var i = 0; i < this.length; i++) { - var byte = this._buf[this._offset++] & 0xff; - - value <<= 7; - value += byte & 0x7f; - if ((byte & 0x80) == 0) { - values.push(value); - value = 0; - } - } - - value = values.shift(); - values.unshift(value % 40); - values.unshift((value / 40) >> 0); - - return values.join('.'); -}; - - -Reader.prototype._readTag = function(tag) { - assert.ok(tag !== undefined); - - var b = this.peek(); - - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - if (this.length > 4) - throw newInvalidAsn1Error('Integer too long: ' + this.length); - - if (this.length > this._size - o) - return null; - this._offset = o; - - var fb = this._buf[this._offset++]; - var value = 0; - - value = fb & 0x7F; - for (var i = 1; i < this.length; i++) { - value <<= 8; - value |= (this._buf[this._offset++] & 0xff); - } - - if ((fb & 0x80) == 0x80) - value = -value; - - return value; -}; - - - -///--- Exported API - -module.exports = Reader; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js deleted file mode 100644 index 8aea0001..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - - -module.exports = { - EOC: 0, - Boolean: 1, - Integer: 2, - BitString: 3, - OctetString: 4, - Null: 5, - OID: 6, - ObjectDescriptor: 7, - External: 8, - Real: 9, // float - Enumeration: 10, - PDV: 11, - Utf8String: 12, - RelativeOID: 13, - Sequence: 16, - Set: 17, - NumericString: 18, - PrintableString: 19, - T61String: 20, - VideotexString: 21, - IA5String: 22, - UTCTime: 23, - GeneralizedTime: 24, - GraphicString: 25, - VisibleString: 26, - GeneralString: 28, - UniversalString: 29, - CharacterString: 30, - BMPString: 31, - Constructor: 32, - Context: 128 -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js deleted file mode 100644 index 7b445cc6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js +++ /dev/null @@ -1,317 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var assert = require('assert'); -var ASN1 = require('./types'); -var errors = require('./errors'); - - -///--- Globals - -var newInvalidAsn1Error = errors.newInvalidAsn1Error; - -var DEFAULT_OPTS = { - size: 1024, - growthFactor: 8 -}; - - -///--- Helpers - -function merge(from, to) { - assert.ok(from); - assert.equal(typeof(from), 'object'); - assert.ok(to); - assert.equal(typeof(to), 'object'); - - var keys = Object.getOwnPropertyNames(from); - keys.forEach(function(key) { - if (to[key]) - return; - - var value = Object.getOwnPropertyDescriptor(from, key); - Object.defineProperty(to, key, value); - }); - - return to; -} - - - -///--- API - -function Writer(options) { - options = merge(DEFAULT_OPTS, options || {}); - - this._buf = new Buffer(options.size || 1024); - this._size = this._buf.length; - this._offset = 0; - this._options = options; - - // A list of offsets in the buffer where we need to insert - // sequence tag/len pairs. - this._seq = []; - - var self = this; - this.__defineGetter__('buffer', function() { - if (self._seq.length) - throw new InvalidAsn1Error(self._seq.length + ' unended sequence(s)'); - - return self._buf.slice(0, self._offset); - }); -} - - -Writer.prototype.writeByte = function(b) { - if (typeof(b) !== 'number') - throw new TypeError('argument must be a Number'); - - this._ensure(1); - this._buf[this._offset++] = b; -}; - - -Writer.prototype.writeInt = function(i, tag) { - if (typeof(i) !== 'number') - throw new TypeError('argument must be a Number'); - if (typeof(tag) !== 'number') - tag = ASN1.Integer; - - var sz = 4; - - while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000)) && - (sz > 1)) { - sz--; - i <<= 8; - } - - if (sz > 4) - throw new InvalidAsn1Error('BER ints cannot be > 0xffffffff'); - - this._ensure(2 + sz); - this._buf[this._offset++] = tag; - this._buf[this._offset++] = sz; - - while (sz-- > 0) { - this._buf[this._offset++] = ((i & 0xff000000) >> 24); - i <<= 8; - } - -}; - - -Writer.prototype.writeNull = function() { - this.writeByte(ASN1.Null); - this.writeByte(0x00); -}; - - -Writer.prototype.writeEnumeration = function(i, tag) { - if (typeof(i) !== 'number') - throw new TypeError('argument must be a Number'); - if (typeof(tag) !== 'number') - tag = ASN1.Enumeration; - - return this.writeInt(i, tag); -}; - - -Writer.prototype.writeBoolean = function(b, tag) { - if (typeof(b) !== 'boolean') - throw new TypeError('argument must be a Boolean'); - if (typeof(tag) !== 'number') - tag = ASN1.Boolean; - - this._ensure(3); - this._buf[this._offset++] = tag; - this._buf[this._offset++] = 0x01; - this._buf[this._offset++] = b ? 0xff : 0x00; -}; - - -Writer.prototype.writeString = function(s, tag) { - if (typeof(s) !== 'string') - throw new TypeError('argument must be a string (was: ' + typeof(s) + ')'); - if (typeof(tag) !== 'number') - tag = ASN1.OctetString; - - var len = Buffer.byteLength(s); - this.writeByte(tag); - this.writeLength(len); - if (len) { - this._ensure(len); - this._buf.write(s, this._offset); - this._offset += len; - } -}; - - -Writer.prototype.writeBuffer = function(buf, tag) { - if (typeof(tag) !== 'number') - throw new TypeError('tag must be a number'); - if (!Buffer.isBuffer(buf)) - throw new TypeError('argument must be a buffer'); - - this.writeByte(tag); - this.writeLength(buf.length); - this._ensure(buf.length); - buf.copy(this._buf, this._offset, 0, buf.length); - this._offset += buf.length; -}; - - -Writer.prototype.writeStringArray = function(strings) { - if ((!strings instanceof Array)) - throw new TypeError('argument must be an Array[String]'); - - var self = this; - strings.forEach(function(s) { - self.writeString(s); - }); -}; - -// This is really to solve DER cases, but whatever for now -Writer.prototype.writeOID = function(s, tag) { - if (typeof(s) !== 'string') - throw new TypeError('argument must be a string'); - if (typeof(tag) !== 'number') - tag = ASN1.OID; - - if (!/^([0-9]+\.){3,}[0-9]+$/.test(s)) - throw new Error('argument is not a valid OID string'); - - function encodeOctet(bytes, octet) { - if (octet < 128) { - bytes.push(octet); - } else if (octet < 16384) { - bytes.push((octet >>> 7) | 0x80); - bytes.push(octet & 0x7F); - } else if (octet < 2097152) { - bytes.push((octet >>> 14) | 0x80); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } else if (octet < 268435456) { - bytes.push((octet >>> 21) | 0x80); - bytes.push(((octet >>> 14) | 0x80) & 0xFF); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } else { - bytes.push(((octet >>> 28) | 0x80) & 0xFF); - bytes.push(((octet >>> 21) | 0x80) & 0xFF); - bytes.push(((octet >>> 14) | 0x80) & 0xFF); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } - } - - var tmp = s.split('.'); - var bytes = []; - bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10)); - tmp.slice(2).forEach(function(b) { - encodeOctet(bytes, parseInt(b, 10)); - }); - - var self = this; - this._ensure(2 + bytes.length); - this.writeByte(tag); - this.writeLength(bytes.length); - bytes.forEach(function(b) { - self.writeByte(b); - }); -}; - - -Writer.prototype.writeLength = function(len) { - if (typeof(len) !== 'number') - throw new TypeError('argument must be a Number'); - - this._ensure(4); - - if (len <= 0x7f) { - this._buf[this._offset++] = len; - } else if (len <= 0xff) { - this._buf[this._offset++] = 0x81; - this._buf[this._offset++] = len; - } else if (len <= 0xffff) { - this._buf[this._offset++] = 0x82; - this._buf[this._offset++] = len >> 8; - this._buf[this._offset++] = len; - } else if (len <= 0xffffff) { - this._shift(start, len, 1); - this._buf[this._offset++] = 0x83; - this._buf[this._offset++] = len >> 16; - this._buf[this._offset++] = len >> 8; - this._buf[this._offset++] = len; - } else { - throw new InvalidAsn1ERror('Length too long (> 4 bytes)'); - } -}; - -Writer.prototype.startSequence = function(tag) { - if (typeof(tag) !== 'number') - tag = ASN1.Sequence | ASN1.Constructor; - - this.writeByte(tag); - this._seq.push(this._offset); - this._ensure(3); - this._offset += 3; -}; - - -Writer.prototype.endSequence = function() { - var seq = this._seq.pop(); - var start = seq + 3; - var len = this._offset - start; - - if (len <= 0x7f) { - this._shift(start, len, -2); - this._buf[seq] = len; - } else if (len <= 0xff) { - this._shift(start, len, -1); - this._buf[seq] = 0x81; - this._buf[seq + 1] = len; - } else if (len <= 0xffff) { - this._buf[seq] = 0x82; - this._buf[seq + 1] = len >> 8; - this._buf[seq + 2] = len; - } else if (len <= 0xffffff) { - this._shift(start, len, 1); - this._buf[seq] = 0x83; - this._buf[seq + 1] = len >> 16; - this._buf[seq + 2] = len >> 8; - this._buf[seq + 3] = len; - } else { - throw new InvalidAsn1Error('Sequence too long'); - } -}; - - -Writer.prototype._shift = function(start, len, shift) { - assert.ok(start !== undefined); - assert.ok(len !== undefined); - assert.ok(shift); - - this._buf.copy(this._buf, start + shift, start, start + len); - this._offset += shift; -}; - -Writer.prototype._ensure = function(len) { - assert.ok(len); - - if (this._size - this._offset < len) { - var sz = this._size * this._options.growthFactor; - if (sz - this._offset < len) - sz += len; - - var buf = new Buffer(sz); - - this._buf.copy(buf, 0, 0, this._offset); - this._buf = buf; - this._size = sz; - } -}; - - - -///--- Exported API - -module.exports = Writer; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js deleted file mode 100644 index d1766e7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -// If you have no idea what ASN.1 or BER is, see this: -// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc - -var Ber = require('./ber/index'); - - - -///--- Exported API - -module.exports = { - - Ber: Ber, - - BerReader: Ber.Reader, - - BerWriter: Ber.Writer - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json deleted file mode 100644 index 8fbee012..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "author": { - "name": "Mark Cavage", - "email": "mcavage@gmail.com" - }, - "contributors": [ - { - "name": "David Gwynne", - "email": "loki@animata.net" - }, - { - "name": "Yunong Xiao", - "email": "yunong@joyent.com" - } - ], - "name": "asn1", - "description": "Contains parsers and serializers for ASN.1 (currently BER only)", - "version": "0.1.11", - "repository": { - "type": "git", - "url": "git://github.com/mcavage/node-asn1.git" - }, - "main": "lib/index.js", - "engines": { - "node": ">=0.4.9" - }, - "dependencies": {}, - "devDependencies": { - "tap": "0.1.4" - }, - "scripts": { - "pretest": "which gjslint; if [[ \"$?\" = 0 ]] ; then gjslint --nojsdoc -r lib -r tst; else echo \"Missing gjslint. Skipping lint\"; fi", - "test": "tap ./tst" - }, - "readme": "node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS.\nCurrently BER encoding is supported; at some point I'll likely have to do DER.\n\n## Usage\n\nMostly, if you're *actually* needing to read and write ASN.1, you probably don't\nneed this readme to explain what and why. If you have no idea what ASN.1 is,\nsee this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc\n\nThe source is pretty much self-explanatory, and has read/write methods for the\ncommon types out there.\n\n### Decoding\n\nThe following reads an ASN.1 sequence with a boolean.\n\n var Ber = require('asn1').Ber;\n\n var reader = new Ber.Reader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff]));\n\n reader.readSequence();\n console.log('Sequence len: ' + reader.length);\n if (reader.peek() === Ber.Boolean)\n console.log(reader.readBoolean());\n\n### Encoding\n\nThe following generates the same payload as above.\n\n var Ber = require('asn1').Ber;\n\n var writer = new Ber.Writer();\n\n writer.startSequence();\n writer.writeBoolean(true);\n writer.endSequence();\n\n console.log(writer.buffer);\n\n## Installation\n\n npm install asn1\n\n## License\n\nMIT.\n\n## Bugs\n\nSee <https://github.com/mcavage/node-asn1/issues>.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mcavage/node-asn1/issues" - }, - "homepage": "https://github.com/mcavage/node-asn1", - "_id": "asn1@0.1.11", - "dist": { - "shasum": "6d27af76b17126a28e5250c7ce288790af7ab63c" - }, - "_from": "asn1@0.1.11", - "_resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js deleted file mode 100644 index 0b78b474..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var test = require('tap').test; - - - -///--- Globals - -var BerReader; - - - -///--- Tests - -test('load library', function(t) { - BerReader = require('../../lib/index').BerReader; - t.ok(BerReader); - try { - new BerReader(); - t.fail('Should have thrown'); - } catch (e) { - t.ok(e instanceof TypeError, 'Should have been a type error'); - } - t.end(); -}); - - -test('read byte', function(t) { - var reader = new BerReader(new Buffer([0xde])); - t.ok(reader); - t.equal(reader.readByte(), 0xde, 'wrong value'); - t.end(); -}); - - -test('read 1 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x01, 0x03])); - t.ok(reader); - t.equal(reader.readInt(), 0x03, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read 2 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x02, 0x7e, 0xde])); - t.ok(reader); - t.equal(reader.readInt(), 0x7ede, 'wrong value'); - t.equal(reader.length, 0x02, 'wrong length'); - t.end(); -}); - - -test('read 3 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x03, 0x7e, 0xde, 0x03])); - t.ok(reader); - t.equal(reader.readInt(), 0x7ede03, 'wrong value'); - t.equal(reader.length, 0x03, 'wrong length'); - t.end(); -}); - - -test('read 4 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x04, 0x7e, 0xde, 0x03, 0x01])); - t.ok(reader); - t.equal(reader.readInt(), 0x7ede0301, 'wrong value'); - t.equal(reader.length, 0x04, 'wrong length'); - t.end(); -}); - - -test('read boolean true', function(t) { - var reader = new BerReader(new Buffer([0x01, 0x01, 0xff])); - t.ok(reader); - t.equal(reader.readBoolean(), true, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read boolean false', function(t) { - var reader = new BerReader(new Buffer([0x01, 0x01, 0x00])); - t.ok(reader); - t.equal(reader.readBoolean(), false, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read enumeration', function(t) { - var reader = new BerReader(new Buffer([0x0a, 0x01, 0x20])); - t.ok(reader); - t.equal(reader.readEnumeration(), 0x20, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read string', function(t) { - var dn = 'cn=foo,ou=unit,o=test'; - var buf = new Buffer(dn.length + 2); - buf[0] = 0x04; - buf[1] = Buffer.byteLength(dn); - buf.write(dn, 2); - var reader = new BerReader(buf); - t.ok(reader); - t.equal(reader.readString(), dn, 'wrong value'); - t.equal(reader.length, dn.length, 'wrong length'); - t.end(); -}); - - -test('read sequence', function(t) { - var reader = new BerReader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff])); - t.ok(reader); - t.equal(reader.readSequence(), 0x30, 'wrong value'); - t.equal(reader.length, 0x03, 'wrong length'); - t.equal(reader.readBoolean(), true, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('anonymous LDAPv3 bind', function(t) { - var BIND = new Buffer(14); - BIND[0] = 0x30; // Sequence - BIND[1] = 12; // len - BIND[2] = 0x02; // ASN.1 Integer - BIND[3] = 1; // len - BIND[4] = 0x04; // msgid (make up 4) - BIND[5] = 0x60; // Bind Request - BIND[6] = 7; // len - BIND[7] = 0x02; // ASN.1 Integer - BIND[8] = 1; // len - BIND[9] = 0x03; // v3 - BIND[10] = 0x04; // String (bind dn) - BIND[11] = 0; // len - BIND[12] = 0x80; // ContextSpecific (choice) - BIND[13] = 0; // simple bind - - // Start testing ^^ - var ber = new BerReader(BIND); - t.equal(ber.readSequence(), 48, 'Not an ASN.1 Sequence'); - t.equal(ber.length, 12, 'Message length should be 12'); - t.equal(ber.readInt(), 4, 'Message id should have been 4'); - t.equal(ber.readSequence(), 96, 'Bind Request should have been 96'); - t.equal(ber.length, 7, 'Bind length should have been 7'); - t.equal(ber.readInt(), 3, 'LDAP version should have been 3'); - t.equal(ber.readString(), '', 'Bind DN should have been empty'); - t.equal(ber.length, 0, 'string length should have been 0'); - t.equal(ber.readByte(), 0x80, 'Should have been ContextSpecific (choice)'); - t.equal(ber.readByte(), 0, 'Should have been simple bind'); - t.equal(null, ber.readByte(), 'Should be out of data'); - t.end(); -}); - - -test('long string', function(t) { - var buf = new Buffer(256); - var o; - var s = - '2;649;CN=Red Hat CS 71GA Demo,O=Red Hat CS 71GA Demo,C=US;' + - 'CN=RHCS Agent - admin01,UID=admin01,O=redhat,C=US [1] This is ' + - 'Teena Vradmin\'s description.'; - buf[0] = 0x04; - buf[1] = 0x81; - buf[2] = 0x94; - buf.write(s, 3); - var ber = new BerReader(buf.slice(0, 3 + s.length)); - t.equal(ber.readString(), s); - t.end(); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js deleted file mode 100644 index add0b9fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js +++ /dev/null @@ -1,296 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var test = require('tap').test; -var sys = require('sys'); - -///--- Globals - -var BerWriter; - -var BerReader; - - -///--- Tests - -test('load library', function(t) { - BerWriter = require('../../lib/index').BerWriter; - t.ok(BerWriter); - t.ok(new BerWriter()); - t.end(); -}); - - -test('write byte', function(t) { - var writer = new BerWriter(); - - writer.writeByte(0xC2); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 1, 'Wrong length'); - t.equal(ber[0], 0xC2, 'value wrong'); - - t.end(); -}); - - -test('write 1 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7f); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 3, 'Wrong length for an int: ' + ber.length); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong (2) -> ' + ber[0]); - t.equal(ber[1], 0x01, 'length wrong(1) -> ' + ber[1]); - t.equal(ber[2], 0x7f, 'value wrong(3) -> ' + ber[2]); - - t.end(); -}); - - -test('write 2 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7ffe); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 4, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x02, 'length wrong'); - t.equal(ber[2], 0x7f, 'value wrong (byte 1)'); - t.equal(ber[3], 0xfe, 'value wrong (byte 2)'); - - t.end(); -}); - - -test('write 3 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7ffffe); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 5, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x03, 'length wrong'); - t.equal(ber[2], 0x7f, 'value wrong (byte 1)'); - t.equal(ber[3], 0xff, 'value wrong (byte 2)'); - t.equal(ber[4], 0xfe, 'value wrong (byte 3)'); - - t.end(); -}); - - -test('write 4 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7ffffffe); - var ber = writer.buffer; - - t.ok(ber); - - t.equal(ber.length, 6, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x04, 'length wrong'); - t.equal(ber[2], 0x7f, 'value wrong (byte 1)'); - t.equal(ber[3], 0xff, 'value wrong (byte 2)'); - t.equal(ber[4], 0xff, 'value wrong (byte 3)'); - t.equal(ber[5], 0xfe, 'value wrong (byte 4)'); - - t.end(); -}); - - -test('write boolean', function(t) { - var writer = new BerWriter(); - - writer.writeBoolean(true); - writer.writeBoolean(false); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 6, 'Wrong length'); - t.equal(ber[0], 0x01, 'tag wrong'); - t.equal(ber[1], 0x01, 'length wrong'); - t.equal(ber[2], 0xff, 'value wrong'); - t.equal(ber[3], 0x01, 'tag wrong'); - t.equal(ber[4], 0x01, 'length wrong'); - t.equal(ber[5], 0x00, 'value wrong'); - - t.end(); -}); - - -test('write string', function(t) { - var writer = new BerWriter(); - writer.writeString('hello world'); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 13, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - -test('write buffer', function(t) { - var writer = new BerWriter(); - // write some stuff to start with - writer.writeString('hello world'); - var ber = writer.buffer; - var buf = new Buffer([0x04, 0x0b, 0x30, 0x09, 0x02, 0x01, 0x0f, 0x01, 0x01, - 0xff, 0x01, 0x01, 0xff]); - writer.writeBuffer(buf.slice(2, buf.length), 0x04); - ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 26, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2, 13).toString('utf8'), 'hello world', 'wrong value'); - t.equal(ber[13], buf[0], 'wrong tag'); - t.equal(ber[14], buf[1], 'wrong length'); - for (var i = 13, j = 0; i < ber.length && j < buf.length; i++, j++) { - t.equal(ber[i], buf[j], 'buffer contents not identical'); - } - t.end(); -}); - -test('write string array', function(t) { - var writer = new BerWriter(); - writer.writeStringArray(['hello world', 'fubar!']); - var ber = writer.buffer; - - t.ok(ber); - - t.equal(ber.length, 21, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2, 13).toString('utf8'), 'hello world', 'wrong value'); - - t.equal(ber[13], 0x04, 'wrong tag'); - t.equal(ber[14], 6, 'wrong length'); - t.equal(ber.slice(15).toString('utf8'), 'fubar!', 'wrong value'); - - t.end(); -}); - - -test('resize internal buffer', function(t) { - var writer = new BerWriter({size: 2}); - writer.writeString('hello world'); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 13, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - - -test('sequence', function(t) { - var writer = new BerWriter({size: 25}); - writer.startSequence(); - writer.writeString('hello world'); - writer.endSequence(); - var ber = writer.buffer; - - t.ok(ber); - console.log(ber); - t.equal(ber.length, 15, 'wrong length'); - t.equal(ber[0], 0x30, 'wrong tag'); - t.equal(ber[1], 13, 'wrong length'); - t.equal(ber[2], 0x04, 'wrong tag'); - t.equal(ber[3], 11, 'wrong length'); - t.equal(ber.slice(4).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - - -test('nested sequence', function(t) { - var writer = new BerWriter({size: 25}); - writer.startSequence(); - writer.writeString('hello world'); - writer.startSequence(); - writer.writeString('hello world'); - writer.endSequence(); - writer.endSequence(); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 30, 'wrong length'); - t.equal(ber[0], 0x30, 'wrong tag'); - t.equal(ber[1], 28, 'wrong length'); - t.equal(ber[2], 0x04, 'wrong tag'); - t.equal(ber[3], 11, 'wrong length'); - t.equal(ber.slice(4, 15).toString('utf8'), 'hello world', 'wrong value'); - t.equal(ber[15], 0x30, 'wrong tag'); - t.equal(ber[16], 13, 'wrong length'); - t.equal(ber[17], 0x04, 'wrong tag'); - t.equal(ber[18], 11, 'wrong length'); - t.equal(ber.slice(19, 30).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - - -test('LDAP bind message', function(t) { - var dn = 'cn=foo,ou=unit,o=test'; - var writer = new BerWriter(); - writer.startSequence(); - writer.writeInt(3); // msgid = 3 - writer.startSequence(0x60); // ldap bind - writer.writeInt(3); // ldap v3 - writer.writeString(dn); - writer.writeByte(0x80); - writer.writeByte(0x00); - writer.endSequence(); - writer.endSequence(); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 35, 'wrong length (buffer)'); - t.equal(ber[0], 0x30, 'wrong tag'); - t.equal(ber[1], 33, 'wrong length'); - t.equal(ber[2], 0x02, 'wrong tag'); - t.equal(ber[3], 1, 'wrong length'); - t.equal(ber[4], 0x03, 'wrong value'); - t.equal(ber[5], 0x60, 'wrong tag'); - t.equal(ber[6], 28, 'wrong length'); - t.equal(ber[7], 0x02, 'wrong tag'); - t.equal(ber[8], 1, 'wrong length'); - t.equal(ber[9], 0x03, 'wrong value'); - t.equal(ber[10], 0x04, 'wrong tag'); - t.equal(ber[11], dn.length, 'wrong length'); - t.equal(ber.slice(12, 33).toString('utf8'), dn, 'wrong value'); - t.equal(ber[33], 0x80, 'wrong tag'); - t.equal(ber[34], 0x00, 'wrong len'); - - t.end(); -}); - - -test('Write OID', function(t) { - var oid = '1.2.840.113549.1.1.1'; - var writer = new BerWriter(); - writer.writeOID(oid); - - var ber = writer.buffer; - t.ok(ber); - console.log(require('util').inspect(ber)); - console.log(require('util').inspect(new Buffer([0x06, 0x09, 0x2a, 0x86, - 0x48, 0x86, 0xf7, 0x0d, - 0x01, 0x01, 0x01]))); - - t.end(); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md deleted file mode 100644 index c0c3a530..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md +++ /dev/null @@ -1,126 +0,0 @@ -# node-assert-plus - -This library is a super small wrapper over node's assert module that has two -things: (1) the ability to disable assertions with the environment variable -NODE_NDEBUG, and (2) some API wrappers for argument testing. Like -`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks -like this: - - var assert = require('assert-plus'); - - function fooAccount(options, callback) { - assert.object(options, 'options'); - assert.number(options.id, 'options.id); - assert.bool(options.isManager, 'options.isManager'); - assert.string(options.name, 'options.name'); - assert.arrayOfString(options.email, 'options.email'); - assert.func(callback, 'callback'); - - // Do stuff - callback(null, {}); - } - -# API - -All methods that *aren't* part of node's core assert API are simply assumed to -take an argument, and then a string 'name' that's not a message; `AssertionError` -will be thrown if the assertion fails with a message like: - - AssertionError: foo (string) is required - at test (/home/mark/work/foo/foo.js:3:9) - at Object.<anonymous> (/home/mark/work/foo/foo.js:15:1) - at Module._compile (module.js:446:26) - at Object..js (module.js:464:10) - at Module.load (module.js:353:31) - at Function._load (module.js:311:12) - at Array.0 (module.js:484:10) - at EventEmitter._tickCallback (node.js:190:38) - -from: - - function test(foo) { - assert.string(foo, 'foo'); - } - -There you go. You can check that arrays are of a homogenous type with `Arrayof$Type`: - - function test(foo) { - assert.arrayOfString(foo, 'foo'); - } - -You can assert IFF an argument is not `undefined` (i.e., an optional arg): - - assert.optionalString(foo, 'foo'); - -Lastly, you can opt-out of assertion checking altogether by setting the -environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have -lots of assertions, and don't want to pay `typeof ()` taxes to v8 in -production. - -The complete list of APIs is: - -* assert.bool -* assert.buffer -* assert.func -* assert.number -* assert.object -* assert.string -* assert.arrayOfBool -* assert.arrayOfFunc -* assert.arrayOfNumber -* assert.arrayOfObject -* assert.arrayOfString -* assert.optionalBool -* assert.optionalBuffer -* assert.optionalFunc -* assert.optionalNumber -* assert.optionalObject -* assert.optionalString -* assert.optionalArrayOfBool -* assert.optionalArrayOfFunc -* assert.optionalArrayOfNumber -* assert.optionalArrayOfObject -* assert.optionalArrayOfString -* assert.AssertionError -* assert.fail -* assert.ok -* assert.equal -* assert.notEqual -* assert.deepEqual -* assert.notDeepEqual -* assert.strictEqual -* assert.notStrictEqual -* assert.throws -* assert.doesNotThrow -* assert.ifError - -# Installation - - npm install assert-plus - -## License - -The MIT License (MIT) -Copyright (c) 2012 Mark Cavage - -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. - -## Bugs - -See <https://github.com/mcavage/node-assert-plus/issues>. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js deleted file mode 100644 index 70583f12..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright (c) 2012, Mark Cavage. All rights reserved. - -var assert = require('assert'); -var Stream = require('stream').Stream; -var util = require('util'); - - - -///--- Globals - -var NDEBUG = process.env.NODE_NDEBUG || false; - - - -///--- Messages - -var ARRAY_TYPE_REQUIRED = '%s ([%s]) required'; -var TYPE_REQUIRED = '%s (%s) is required'; - - - -///--- Internal - -function capitalize(str) { - return (str.charAt(0).toUpperCase() + str.slice(1)); -} - -function uncapitalize(str) { - return (str.charAt(0).toLowerCase() + str.slice(1)); -} - -function _() { - return (util.format.apply(util, arguments)); -} - - -function _assert(arg, type, name, stackFunc) { - if (!NDEBUG) { - name = name || type; - stackFunc = stackFunc || _assert.caller; - var t = typeof (arg); - - if (t !== type) { - throw new assert.AssertionError({ - message: _(TYPE_REQUIRED, name, type), - actual: t, - expected: type, - operator: '===', - stackStartFunction: stackFunc - }); - } - } -} - - - -///--- API - -function array(arr, type, name) { - if (!NDEBUG) { - name = name || type; - - if (!Array.isArray(arr)) { - throw new assert.AssertionError({ - message: _(ARRAY_TYPE_REQUIRED, name, type), - actual: typeof (arr), - expected: 'array', - operator: 'Array.isArray', - stackStartFunction: array.caller - }); - } - - for (var i = 0; i < arr.length; i++) { - _assert(arr[i], type, name, array); - } - } -} - - -function bool(arg, name) { - _assert(arg, 'boolean', name, bool); -} - - -function buffer(arg, name) { - if (!Buffer.isBuffer(arg)) { - throw new assert.AssertionError({ - message: _(TYPE_REQUIRED, name, type), - actual: typeof (arg), - expected: 'buffer', - operator: 'Buffer.isBuffer', - stackStartFunction: buffer - }); - } -} - - -function func(arg, name) { - _assert(arg, 'function', name); -} - - -function number(arg, name) { - _assert(arg, 'number', name); -} - - -function object(arg, name) { - _assert(arg, 'object', name); -} - - -function stream(arg, name) { - if (!(arg instanceof Stream)) { - throw new assert.AssertionError({ - message: _(TYPE_REQUIRED, name, type), - actual: typeof (arg), - expected: 'Stream', - operator: 'instanceof', - stackStartFunction: buffer - }); - } -} - - -function string(arg, name) { - _assert(arg, 'string', name); -} - - - -///--- Exports - -module.exports = { - bool: bool, - buffer: buffer, - func: func, - number: number, - object: object, - stream: stream, - string: string -}; - - -Object.keys(module.exports).forEach(function (k) { - if (k === 'buffer') - return; - - var name = 'arrayOf' + capitalize(k); - - if (k === 'bool') - k = 'boolean'; - if (k === 'func') - k = 'function'; - module.exports[name] = function (arg, name) { - array(arg, k, name); - }; -}); - -Object.keys(module.exports).forEach(function (k) { - var _name = 'optional' + capitalize(k); - var s = uncapitalize(k.replace('arrayOf', '')); - if (s === 'bool') - s = 'boolean'; - if (s === 'func') - s = 'function'; - - if (k.indexOf('arrayOf') !== -1) { - module.exports[_name] = function (arg, name) { - if (!NDEBUG && arg !== undefined) { - array(arg, s, name); - } - }; - } else { - module.exports[_name] = function (arg, name) { - if (!NDEBUG && arg !== undefined) { - _assert(arg, s, name); - } - }; - } -}); - - -// Reexport built-in assertions -Object.keys(assert).forEach(function (k) { - if (k === 'AssertionError') { - module.exports[k] = assert[k]; - return; - } - - module.exports[k] = function () { - if (!NDEBUG) { - assert[k].apply(assert[k], arguments); - } - }; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json deleted file mode 100644 index aade0f97..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "author": { - "name": "Mark Cavage", - "email": "mcavage@gmail.com" - }, - "name": "assert-plus", - "description": "Extra assertions on top of node's assert module", - "version": "0.1.2", - "main": "./assert.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": ">=0.6" - }, - "readme": "# node-assert-plus\n\nThis library is a super small wrapper over node's assert module that has two\nthings: (1) the ability to disable assertions with the environment variable\nNODE_NDEBUG, and (2) some API wrappers for argument testing. Like\n`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks\nlike this:\n\n var assert = require('assert-plus');\n\n function fooAccount(options, callback) {\n\t assert.object(options, 'options');\n\t\tassert.number(options.id, 'options.id);\n\t\tassert.bool(options.isManager, 'options.isManager');\n\t\tassert.string(options.name, 'options.name');\n\t\tassert.arrayOfString(options.email, 'options.email');\n\t\tassert.func(callback, 'callback');\n\n // Do stuff\n\t\tcallback(null, {});\n }\n\n# API\n\nAll methods that *aren't* part of node's core assert API are simply assumed to\ntake an argument, and then a string 'name' that's not a message; `AssertionError`\nwill be thrown if the assertion fails with a message like:\n\n AssertionError: foo (string) is required\n\tat test (/home/mark/work/foo/foo.js:3:9)\n\tat Object.<anonymous> (/home/mark/work/foo/foo.js:15:1)\n\tat Module._compile (module.js:446:26)\n\tat Object..js (module.js:464:10)\n\tat Module.load (module.js:353:31)\n\tat Function._load (module.js:311:12)\n\tat Array.0 (module.js:484:10)\n\tat EventEmitter._tickCallback (node.js:190:38)\n\nfrom:\n\n function test(foo) {\n\t assert.string(foo, 'foo');\n }\n\nThere you go. You can check that arrays are of a homogenous type with `Arrayof$Type`:\n\n function test(foo) {\n\t assert.arrayOfString(foo, 'foo');\n }\n\nYou can assert IFF an argument is not `undefined` (i.e., an optional arg):\n\n assert.optionalString(foo, 'foo');\n\nLastly, you can opt-out of assertion checking altogether by setting the\nenvironment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have\nlots of assertions, and don't want to pay `typeof ()` taxes to v8 in\nproduction.\n\nThe complete list of APIs is:\n\n* assert.bool\n* assert.buffer\n* assert.func\n* assert.number\n* assert.object\n* assert.string\n* assert.arrayOfBool\n* assert.arrayOfFunc\n* assert.arrayOfNumber\n* assert.arrayOfObject\n* assert.arrayOfString\n* assert.optionalBool\n* assert.optionalBuffer\n* assert.optionalFunc\n* assert.optionalNumber\n* assert.optionalObject\n* assert.optionalString\n* assert.optionalArrayOfBool\n* assert.optionalArrayOfFunc\n* assert.optionalArrayOfNumber\n* assert.optionalArrayOfObject\n* assert.optionalArrayOfString\n* assert.AssertionError\n* assert.fail\n* assert.ok\n* assert.equal\n* assert.notEqual\n* assert.deepEqual\n* assert.notDeepEqual\n* assert.strictEqual\n* assert.notStrictEqual\n* assert.throws\n* assert.doesNotThrow\n* assert.ifError\n\n# Installation\n\n npm install assert-plus\n\n## License\n\nThe MIT License (MIT)\nCopyright (c) 2012 Mark Cavage\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n## Bugs\n\nSee <https://github.com/mcavage/node-assert-plus/issues>.\n", - "readmeFilename": "README.md", - "_id": "assert-plus@0.1.2", - "dist": { - "shasum": "53cfb5f7859525b28cbf0ba62afc8971ca7ad1a1" - }, - "_from": "assert-plus@0.1.2", - "_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG deleted file mode 100644 index 078c03ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG +++ /dev/null @@ -1,71 +0,0 @@ -This contains tickets fixed in each version release in reverse chronological -order. There is one ticket per line. Each commits message has the tickets fixed -in it. The commit message also has the corresponding github issue. i.e. CTYPE-42 -would be issue 42. Each issue can be found at: -https://github.com/rmustacc/node-ctype/issues/%d. - -CTYPE v0.5.2 -CTYPE-46 Release 0.5.2 -CTYPE-45 error in setEndian logic - -v0.5.1 -CTYPE-44 Release 0.5.1 -Contributed by Terin Stock: -CTYPE-41 CTypeParser.writeStruct should return its offset -Contributed by Terin Stock: -CTYPE-42 int64_t returns wrong size - -v0.5.0 -CTYPE-40 Release 0.5.0 -CTYPE-39 want > 0.6 engine support - -v0.4.0 -CTYPE-37 Release v0.4.0 -CTYPE-6 want additional entry point for write -CTYPE-20 Add 64-bit int support into core parser -CTYPE-31 Fix bounds errors node/2129 -CTYPE-33 Update copyright holders -CTYPE-34 ctf.js confuses sign bit. -CTYPE-35 Make the README more useful for getting started -CTYPE-36 want manual page on ctio functions - -v0.3.1 -CTYPE-29 Release 0.3.1 -CTYPE-28 Want v0.6 npm support - -v0.3.0 -CTYPE-27 Release v0.3.0 -CTYPE-26 Want alternate default char behavior - -v0.2.1 -CTYPE-25 Release v0.2.1 -CTYPE-24 Writing structs is busted - -v0.2.0: -CTYPE-23 Release v0.2.0 -CTYPE-21 Add support for CTF JSON data -CTYPE-22 Add Javascriptlint profile -CTYPE-15 Pull in ctio updates from node/master - -v0.1.0: -CTYPE-18 Bump version to v0.1.0 -CTYPE-17 Fix nested structures -CTYPE-16 Remove extraneous logging -CTYPE-14 toAbs64 and toApprox64 are not exported - -v0.0.3: -CTYPE-12 Bump version to v0.0.3 -CTYPE-11 fix typo in wuint64 -CTYPE-10 Integrate jsstyle - -v0.0.2: -CTYPE-8 dump npm version to v0.0.2 -CTYPE-9 want changelog -CTYPE-7 fix typo in detypes. - -v0.0.1: -CTYPE-5 Missing from NPM registry -CTYPE-4 int16_t calls wrong read function -CTYPE-3 API example types are missing quotes as strings -CTYPE-2 doc missing 64-bit functions -CTYPE-1 Need license diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE deleted file mode 100644 index 22ced3e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -The following license applies to all files unless the file is specified below. -Each file specified below has its license information embedded in it: - -tools/jsstyle - -Copyright 2011, Robert Mustacchi. All rights reserved. -Copyright 2011, Joyent, Inc. 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README deleted file mode 100644 index 4efd7ee5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README +++ /dev/null @@ -1,82 +0,0 @@ -Node-CType is a way to read and write binary data in structured and easy to use -format. Its name comes from the C header file. - -To get started, simply clone the repository or use npm to install it. Once it is -there, simply require it. - -git clone git://github.com/rmustacc/node-ctype -npm install ctype -var mod_ctype = require('ctype') - - -There are two APIs that you can use, depending on what abstraction you'd like. -The low level API let's you read and write individual integers and floats from -buffers. The higher level API let's you read and write structures of these. To -illustrate this, let's looks look at how we would read and write a binary -encoded x,y point. - -In C we would define this structure as follows: - -typedef struct point { - uint16_t p_x; - uint16_t p_y; -} point_t; - -To read a binary encoded point from a Buffer, we first need to create a CType -parser (where we specify the endian and other options) and add the typedef. - -var parser = new mod_ctype.Parser({ endian: 'big' }); -parser.typedef('point_t', [ - { x: { type: 'uint16_t' } }, - { y: { type: 'uint16_t' } } -]); - -From here, given a buffer buf and an offset into it, we can read a point. - -var out = parser.readData([ { point: { type: 'point_t' } } ], buffer, 0); -console.log(out); -{ point: { x: 23, y: 42 } } - -Another way to get the same information would be to use the low level methods. -Note that these require you to manually deal with the offset. Here's how we'd -get the same values of x and y from the buffer. - -var x = mod_ctype.ruint16(buf, 'big', 0); -var y = mod_ctype.ruint16(buf, 'big', 2); -console.log(x + ', ' + y); -23, 42 - -The true power of this API comes from the ability to define and nest typedefs, -just as you would in C. By default, the following types are defined by default. -Note that they return a Number, unless indicated otherwise. - - * int8_t - * int16_t - * int32_t - * int64_t (returns an array where val[0] << 32 + val[1] would be the value) - * uint8_t - * uint16_t - * uint32_t - * uint64_t (returns an array where val[0] << 32 + val[1] would be the value) - * float - * double - * char (either returns a buffer with that character or a uint8_t) - * char[] (returns an object with the buffer and the number of characters read which is either the total amount requested or until the first 0) - - -ctf2json integration: - -Node-CType supports consuming the output of ctf2json. Once you read in a JSON file, -all you have to do to add all the definitions it contains is: - -var data, parser; -data = JSON.parse(parsedJSONData); -parser = mod_ctype.parseCTF(data, { endian: 'big' }); - -For more documentation, see the file README.old. Full documentation is in the -process of being rewritten as a series of manual pages which will be available -in the repository and online for viewing. - -To read the ctio manual page simple run, from the root of the workspace: - -man -Mman -s 3ctype ctio diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old deleted file mode 100644 index 9326b725..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old +++ /dev/null @@ -1,298 +0,0 @@ -This library provides a way to read and write binary data. - -Node CType is a way to read and write binary data in structured and easy to use -formats. It's name comes from the header file, though it does not share as much -with it as it perhaps should. - -There are two levels of the API. One is the raw API which everything is built on -top of, while the other provides a much nicer abstraction and is built entirely -by using the lower level API. The hope is that the low level API is both clear -and useful. The low level API gets it's names from stdint.h (a rather -appropriate source). The lower level API is presented at the end of this -document. - -Standard CType API - -The CType interface is presented as a parser object that controls the -endianness combined with a series of methods to change that value, parse and -write out buffers, and a way to provide typedefs. Standard Types - -The CType parser supports the following basic types which return Numbers except -as indicated: - - * int8_t - * int16_t - * int32_t - * int64_t (returns an array where val[0] << 32 + val[1] would be the value) - * uint8_t - * uint16_t - * uint32_t - * uint64_t (returns an array where val[0] << 32 + val[1] would be the value) - * float - * double - * char (returns a buffer with just that single character) - * char[] (returns an object with the buffer and the number of characters read which is either the total amount requested or until the first 0) - -Specifying Structs - -The CType parser also supports the notion of structs. A struct is an array of -JSON objects that defines an order of keys which have types and values. One -would build a struct to represent a point (x,y) as follows: - -[ - { x: { type: 'int16_t' }}, - { y: { type: 'int16_t' }} -] - -When this is passed into the read routine, it would read the first two bytes -(as defined by int16_t) to determine the Number to use for X, and then it would -read the next two bytes to determine the value of Y. When read this could -return something like: - -{ - x: 42, - y: -23 -} - -When someone wants to write values, we use the same format as above, but with -additional value field: - -[ - { x: { type: 'int16_t', value: 42 }}, - { y: { type: 'int16_t', value: -23 }} -] - -Now, the structure above may be optionally annotated with offsets. This tells -us to rather than read continuously we should read the given value at the -specified offset. If an offset is provided, it is is effectively the equivalent -of lseek(offset, SEEK_SET). Thus, subsequent values will be read from that -offset and incremented by the appropriate value. As an example: - -[ - { x: { type: 'int16_t' }}, - { y: { type: 'int16_t', offset: 20 }}, - { z: { type: 'int16_t' }} -] - -We would read x from the first starting offset given to us, for the sake of -example, let's assume that's 0. After reading x, the next offset to read from -would be 2; however, y specifies an offset, thus we jump directly to that -offset and read y from byte 20. We would then read z from byte 22. - -The same offsets may be used when writing values. - -Typedef - -The basic set of types while covers the basics, is somewhat limiting. To make -this richer, there is functionality to typedef something like in C. One can use -typedef to add a new name to an existing type or to define a name to refer to a -struct. Thus the following are all examples of a typedef: - -typedef('size_t', 'uint32_t'); -typedef('ssize_t', 'int32_t'); -typedef('point_t', [ - { x: { type: 'int16_t' }}, - { y: { type: 'int16_t' }} -]); - -Once something has been typedef'd it can be used in any of the definitions -previously shown. - -One cannot remove a typedef once created, this is analogous to C. - -The set of defined types can be printed with lstypes. The format of this output -is subject to change, but likely will look something like: - -> lstypes(); -{ - size_t: 'uint32_t', - ssize_t: 'int32_t', - point_t: [ - { x: { type: 'int16_t' }}, - { y: { type: 'int16_t' }} - ] -} - -Specifying arrays - -Arrays can be specified by appending []s to a type. Arrays must have the size -specified. The size must be specified and it can be done in one of two ways: - - * An explicit non-zero integer size - * A name of a previously declared variable in the struct whose value is a - number. - -Note, that when using the name of a variable, it should be the string name for -the key. This is only valid inside structs and the value must be declared -before the value with the array. The following are examples: - -[ - { ip_addr4: { type: 'uint8_t[4]' }}, - { len: { type: 'uint32_t' }}, - { data: { type: 'uint8_t[len]' }} -] - -Arrays are permitted in typedefs; however, they must have a declared integer -size. The following are examples of valid and invalid arrays: - -typedef('path', 'char[1024]'); /* Good */ -typedef('path', 'char[len]'); /* Bad! */ - -64 bit values: - -Unfortunately Javascript represents values with a double, so you lose precision -and the ability to represent Integers roughly beyond 2^53. To alleviate this, I -propose the following for returning 64 bit integers when read: - -value[2]: Each entry is a 32 bit number which can be reconstructed to the -original by the following formula: - -value[0] << 32 + value[1] (Note this will not work in Javascript) - -CTF JSON data: - -node-ctype can also handle JSON data that mathces the format described in the -documentation of the tool ctf2json. Given the JSON data which specifies type -information, it will transform that into a parser that understands all of the -types defined inside of it. This is useful for more complicated structures that -have a lot of typedefs. - -Interface overview - -The following is the header-file like interface to the parser object: - -/* - * Create a new instance of the parser. Each parser has its own store of - * typedefs and endianness. Conf is an object with the following values: - * - * endian Either 'big' or 'little' do determine the endianness we - * want to read from or write to. - * - */ -function CTypeParser(conf); - -/* - * Parses the CTF JSON data and creates a parser that understands all of those - * types. - * - * data Parsed JSON data that maches that CTF JSON - * specification. - * - * conf The configuration object to create a new CTypeParser - * from. - */ -CTypeParser parseCTF(data, conf); - -/* - * This is what we were born to do. We read the data from a buffer and return it - * in an object whose keys match the values from the object. - * - * def The array definition of the data to read in - * - * buffer The buffer to read data from - * - * offset The offset to start writing to - * - * Returns an object where each key corresponds to an entry in def and the value - * is the read value. - */ -Object CTypeParser.readData(<Type Definition>, buffer, offset); - -/* - * This is the second half of what we were born to do, write out the data - * itself. - * - * def The array definition of the data to write out with - * values - * - * buffer The buffer to write to - * - * offset The offset in the buffer to write to - */ -void CTypeParser.writeData(<Type Definition>, buffer, offset); - -/* - * A user has requested to add a type, let us honor their request. Yet, if their - * request doth spurn us, send them unto the Hells which Dante describes. - * - * name The string for the type definition we're adding - * - * value Either a string that is a type/array name or an object - * that describes a struct. - */ -void CTypeParser.prototype.typedef(name, value); - -Object CTypeParser.prototype.lstypes(); - -/* - * Get the endian value for the current parser - */ -String CTypeParser.prototype.getEndian(); - -/* - * Sets the current endian value for the Parser. If the value is not valid, - * throws an Error. - * - * endian Either 'big' or 'little' do determine the endianness we - * want to read from or write to. - * - */ -void CTypeParser.protoype.setEndian(String); - -/* - * Attempts to convert an array of two integers returned from rsint64 / ruint64 - * into an absolute 64 bit number. If however the value would exceed 2^52 this - * will instead throw an error. The mantissa in a double is a 52 bit number and - * rather than potentially give you a value that is an approximation this will - * error. If you would rather an approximation, please see toApprox64. - * - * val An array of two 32-bit integers - */ -Number function toAbs64(val) - -/* - * Will return the 64 bit value as returned in an array from rsint64 / ruint64 - * to a value as close as it can. Note that Javascript stores all numbers as a - * double and the mantissa only has 52 bits. Thus this version may approximate - * the value. - * - * val An array of two 32-bit integers - */ -Number function toApprox64(val) - -Low Level API - -The following function are provided at the low level: - -Read unsigned integers from a buffer: -Number ruint8(buffer, endian, offset); -Number ruint16(buffer, endian, offset); -Number ruint32(buffer, endian, offset); -Number[] ruint64(buffer, endian, offset); - -Read signed integers from a buffer: -Number rsint8(buffer, endian, offset); -Number rsint16(buffer, endian, offset); -Number rsint32(buffer, endian, offset); -Number[] rsint64(buffer, endian, offset); - -Read floating point numbers from a buffer: -Number rfloat(buffer, endian, offset); /* IEEE-754 Single precision */ -Number rdouble(buffer, endian, offset); /* IEEE-754 Double precision */ - -Write unsigned integers to a buffer: -void wuint8(Number, endian, buffer, offset); -void wuint16(Number, endian, buffer, offset); -void wuint32(Number, endian, buffer, offset); -void wuint64(Number[], endian, buffer, offset); - -Write signed integers from a buffer: -void wsint8(Number, endian, buffer, offset); -void wsint16(Number, endian, buffer, offset); -void wsint32(Number, endian, buffer, offset); -void wsint64(Number[], endian, buffer offset); - -Write floating point numbers from a buffer: -void wfloat(Number, buffer, endian, offset); /* IEEE-754 Single precision */ -void wdouble(Number, buffer, endian, offset); /* IEEE-754 Double precision */ - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js deleted file mode 100644 index 66d5f735..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js +++ /dev/null @@ -1,245 +0,0 @@ -/* - * ctf.js - * - * Understand and parse all of the different JSON formats of CTF data and - * translate that into a series of node-ctype friendly pieces. The reason for - * the abstraction is to handle different changes in the file format. - * - * We have to be careful here that we don't end up using a name that is already - * a built in type. - */ -var mod_assert = require('assert'); -var ASSERT = mod_assert.ok; - -var ctf_versions = [ '1.0' ]; -var ctf_entries = [ 'integer', 'float', 'typedef', 'struct' ]; -var ctf_deftypes = [ 'int8_t', 'uint8_t', 'int16_t', 'uint16_t', 'int32_t', - 'uint32_t', 'float', 'double' ]; - -function ctfParseInteger(entry, ctype) -{ - var name, sign, len, type; - - name = entry['name']; - if (!('signed' in entry['integer'])) - throw (new Error('Malformed CTF JSON: integer missing ' + - 'signed value')); - - - if (!('length' in entry['integer'])) - throw (new Error('Malformed CTF JSON: integer missing ' + - 'length value')); - - sign = entry['integer']['signed']; - len = entry['integer']['length']; - type = null; - - if (sign && len == 1) - type = 'int8_t'; - else if (len == 1) - type = 'uint8_t'; - else if (sign && len == 2) - type = 'int16_t'; - else if (len == 2) - type = 'uint16_t'; - else if (sign && len == 4) - type = 'int32_t'; - else if (len == 4) - type = 'uint32_t'; - else if (sign && len == 8) - type = 'int64_t'; - else if (len == 8) - type = 'uint64_t'; - - if (type === null) - throw (new Error('Malformed CTF JSON: integer has ' + - 'unsupported length and sign - ' + len + '/' + sign)); - - /* - * This means that this is the same as one of our built in types. If - * that's the case defining it would be an error. So instead of trying - * to typedef it, we'll return here. - */ - if (name == type) - return; - - if (name == 'char') { - ASSERT(type == 'int8_t'); - return; - } - - ctype.typedef(name, type); -} - -function ctfParseFloat(entry, ctype) -{ - var name, len; - - name = entry['name']; - if (!('length' in entry['float'])) - throw (new Error('Malformed CTF JSON: float missing ' + - 'length value')); - - len = entry['float']['length']; - if (len != 4 && len != 8) - throw (new Error('Malformed CTF JSON: float has invalid ' + - 'length value')); - - if (len == 4) { - if (name == 'float') - return; - ctype.typedef(name, 'float'); - } else if (len == 8) { - if (name == 'double') - return; - ctype.typedef(name, 'double'); - } -} - -function ctfParseTypedef(entry, ctype) -{ - var name, type, ii; - - name = entry['name']; - if (typeof (entry['typedef']) != 'string') - throw (new Error('Malformed CTF JSON: typedef value in not ' + - 'a string')); - - type = entry['typedef']; - - /* - * We need to ensure that we're not looking at type that's one of our - * built in types. Traditionally in C a uint32_t would be a typedef to - * some kind of integer. However, those size types are built ins. - */ - for (ii = 0; ii < ctf_deftypes.length; ii++) { - if (name == ctf_deftypes[ii]) - return; - } - - ctype.typedef(name, type); -} - -function ctfParseStruct(entry, ctype) -{ - var name, type, ii, val, index, member, push; - - member = []; - if (!Array.isArray(entry['struct'])) - throw (new Error('Malformed CTF JSON: struct value is not ' + - 'an array')); - - for (ii = 0; ii < entry['struct'].length; ii++) { - val = entry['struct'][ii]; - if (!('name' in val)) - throw (new Error('Malformed CTF JSON: struct member ' + - 'missing name')); - - if (!('type' in val)) - throw (new Error('Malformed CTF JSON: struct member ' + - 'missing type')); - - if (typeof (val['name']) != 'string') - throw (new Error('Malformed CTF JSON: struct member ' + - 'name isn\'t a string')); - - if (typeof (val['type']) != 'string') - throw (new Error('Malformed CTF JSON: struct member ' + - 'type isn\'t a string')); - - /* - * CTF version 2 specifies array names as <type> [<num>] where - * as node-ctype does this as <type>[<num>]. - */ - name = val['name']; - type = val['type']; - index = type.indexOf(' ['); - if (index != -1) { - type = type.substring(0, index) + - type.substring(index + 1, type.length); - } - push = {}; - push[name] = { 'type': type }; - member.push(push); - } - - name = entry['name']; - ctype.typedef(name, member); -} - -function ctfParseEntry(entry, ctype) -{ - var ii, found; - - if (!('name' in entry)) - throw (new Error('Malformed CTF JSON: entry missing "name" ' + - 'section')); - - for (ii = 0; ii < ctf_entries.length; ii++) { - if (ctf_entries[ii] in entry) - found++; - } - - if (found === 0) - throw (new Error('Malformed CTF JSON: found no entries')); - - if (found >= 2) - throw (new Error('Malformed CTF JSON: found more than one ' + - 'entry')); - - if ('integer' in entry) { - ctfParseInteger(entry, ctype); - return; - } - - if ('float' in entry) { - ctfParseFloat(entry, ctype); - return; - } - - if ('typedef' in entry) { - ctfParseTypedef(entry, ctype); - return; - } - - if ('struct' in entry) { - ctfParseStruct(entry, ctype); - return; - } - - ASSERT(false, 'shouldn\'t reach here'); -} - -function ctfParseJson(json, ctype) -{ - var version, ii; - - ASSERT(json); - ASSERT(ctype); - if (!('metadata' in json)) - throw (new Error('Invalid CTF JSON: missing metadata section')); - - if (!('ctf2json_version' in json['metadata'])) - throw (new Error('Invalid CTF JSON: missing ctf2json_version')); - - version = json['metadata']['ctf2json_version']; - for (ii = 0; ii < ctf_versions.length; ii++) { - if (ctf_versions[ii] == version) - break; - } - - if (ii == ctf_versions.length) - throw (new Error('Unsuported ctf2json_version: ' + version)); - - if (!('data' in json)) - throw (new Error('Invalid CTF JSON: missing data section')); - - if (!Array.isArray(json['data'])) - throw (new Error('Malformed CTF JSON: data section is not ' + - 'an array')); - - for (ii = 0; ii < json['data'].length; ii++) - ctfParseEntry(json['data'][ii], ctype); -} - -exports.ctfParseJson = ctfParseJson; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js deleted file mode 100644 index 62c5d7b2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js +++ /dev/null @@ -1,1485 +0,0 @@ -/* - * rm - Feb 2011 - * ctio.js: - * - * A simple way to read and write simple ctypes. Of course, as you'll find the - * code isn't as simple as it might appear. The following types are currently - * supported in big and little endian formats: - * - * uint8_t int8_t - * uint16_t int16_t - * uint32_t int32_t - * float (single precision IEEE 754) - * double (double precision IEEE 754) - * - * This is designed to work in Node and v8. It may in fact work in other - * Javascript interpreters (that'd be pretty neat), but it hasn't been tested. - * If you find that it does in fact work, that's pretty cool. Try and pass word - * back to the original author. - * - * Note to the reader: If you're tabstop isn't set to 8, parts of this may look - * weird. - */ - -/* - * Numbers in Javascript have a secret: all numbers must be represented with an - * IEEE-754 double. The double has a mantissa with a length of 52 bits with an - * implicit one. Thus the range of integers that can be represented is limited - * to the size of the mantissa, this makes reading and writing 64-bit integers - * difficult, but far from impossible. - * - * Another side effect of this representation is what happens when you use the - * bitwise operators, i.e. shift left, shift right, and, or, etc. In Javascript, - * each operand and the result is cast to a signed 32-bit number. However, in - * the case of >>> the values are cast to an unsigned number. - */ - -/* - * A reminder on endian related issues: - * - * Big Endian: MSB -> First byte - * Little Endian: MSB->Last byte - */ -var mod_assert = require('assert'); - -/* - * An 8 bit unsigned integer involves doing no significant work. - */ -function ruint8(buffer, endian, offset) -{ - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - return (buffer[offset]); -} - -/* - * For 16 bit unsigned numbers we can do all the casting that we want to do. - */ -function rgint16(buffer, endian, offset) -{ - var val = 0; - - if (endian == 'big') { - val = buffer[offset] << 8; - val |= buffer[offset+1]; - } else { - val = buffer[offset]; - val |= buffer[offset+1] << 8; - } - - return (val); - -} - -function ruint16(buffer, endian, offset) -{ - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 1 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - return (rgint16(buffer, endian, offset)); -} - -/* - * Because most bitshifting is done using signed numbers, if we would go into - * the realm where we use that 32nd bit, we'll end up going into the negative - * range. i.e.: - * > 200 << 24 - * -939524096 - * - * Not the value you'd expect. To work around this, we end up having to do some - * abuse of the JavaScript standard. in this case, we know that a >>> shift is - * defined to cast our value to an *unsigned* 32-bit number. Because of that, we - * use that instead to save us some additional math, though it does feel a - * little weird and it isn't obvious as to why you woul dwant to do this at - * first. - */ -function rgint32(buffer, endian, offset) -{ - var val = 0; - - if (endian == 'big') { - val = buffer[offset+1] << 16; - val |= buffer[offset+2] << 8; - val |= buffer[offset+3]; - val = val + (buffer[offset] << 24 >>> 0); - } else { - val = buffer[offset+2] << 16; - val |= buffer[offset+1] << 8; - val |= buffer[offset]; - val = val + (buffer[offset + 3] << 24 >>> 0); - } - - return (val); -} - -function ruint32(buffer, endian, offset) -{ - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - return (rgint32(buffer, endian, offset)); -} - -/* - * Reads a 64-bit unsigned number. The astue observer will note that this - * doesn't quite work. Javascript has chosen to only have numbers that can be - * represented by a double. A double only has 52 bits of mantissa with an - * implicit 1, thus we have up to 53 bits to represent an integer. However, 2^53 - * doesn't quite give us what we want. Isn't 53 bits enough for anyone? What - * could you have possibly wanted to represent that was larger than that? Oh, - * maybe a size? You mean we bypassed the 4 GB limit on file sizes, when did - * that happen? - * - * To get around this egregious language issue, we're going to instead construct - * an array of two 32 bit unsigned integers. Where arr[0] << 32 + arr[1] would - * give the actual number. However, note that the above code probably won't - * produce the desired results because of the way Javascript numbers are - * doubles. - */ -function rgint64(buffer, endian, offset) -{ - var val = new Array(2); - - if (endian == 'big') { - val[0] = ruint32(buffer, endian, offset); - val[1] = ruint32(buffer, endian, offset+4); - } else { - val[0] = ruint32(buffer, endian, offset+4); - val[1] = ruint32(buffer, endian, offset); - } - - return (val); -} - -function ruint64(buffer, endian, offset) -{ - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - return (rgint64(buffer, endian, offset)); -} - - -/* - * Signed integer types, yay team! A reminder on how two's complement actually - * works. The first bit is the signed bit, i.e. tells us whether or not the - * number should be positive or negative. If the two's complement value is - * positive, then we're done, as it's equivalent to the unsigned representation. - * - * Now if the number is positive, you're pretty much done, you can just leverage - * the unsigned translations and return those. Unfortunately, negative numbers - * aren't quite that straightforward. - * - * At first glance, one might be inclined to use the traditional formula to - * translate binary numbers between the positive and negative values in two's - * complement. (Though it doesn't quite work for the most negative value) - * Mainly: - * - invert all the bits - * - add one to the result - * - * Of course, this doesn't quite work in Javascript. Take for example the value - * of -128. This could be represented in 16 bits (big-endian) as 0xff80. But of - * course, Javascript will do the following: - * - * > ~0xff80 - * -65409 - * - * Whoh there, Javascript, that's not quite right. But wait, according to - * Javascript that's perfectly correct. When Javascript ends up seeing the - * constant 0xff80, it has no notion that it is actually a signed number. It - * assumes that we've input the unsigned value 0xff80. Thus, when it does the - * binary negation, it casts it into a signed value, (positive 0xff80). Then - * when you perform binary negation on that, it turns it into a negative number. - * - * Instead, we're going to have to use the following general formula, that works - * in a rather Javascript friendly way. I'm glad we don't support this kind of - * weird numbering scheme in the kernel. - * - * (BIT-MAX - (unsigned)val + 1) * -1 - * - * The astute observer, may think that this doesn't make sense for 8-bit numbers - * (really it isn't necessary for them). However, when you get 16-bit numbers, - * you do. Let's go back to our prior example and see how this will look: - * - * (0xffff - 0xff80 + 1) * -1 - * (0x007f + 1) * -1 - * (0x0080) * -1 - * - * Doing it this way ends up allowing us to treat it appropriately in - * Javascript. Sigh, that's really quite ugly for what should just be a few bit - * shifts, ~ and &. - */ - -/* - * Endianness doesn't matter for 8-bit signed values. We could in fact optimize - * this case because the more traditional methods work, but for consistency, - * we'll keep doing this the same way. - */ -function rsint8(buffer, endian, offset) -{ - var neg; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - neg = buffer[offset] & 0x80; - if (!neg) - return (buffer[offset]); - - return ((0xff - buffer[offset] + 1) * -1); -} - -/* - * The 16-bit version requires a bit more effort. In this case, we can leverage - * our unsigned code to generate the value we want to return. - */ -function rsint16(buffer, endian, offset) -{ - var neg, val; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 1 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = rgint16(buffer, endian, offset); - neg = val & 0x8000; - if (!neg) - return (val); - - return ((0xffff - val + 1) * -1); -} - -/* - * We really shouldn't leverage our 32-bit code here and instead utilize the - * fact that we know that since these are signed numbers, we can do all the - * shifting and binary anding to generate the 32-bit number. But, for - * consistency we'll do the same. If we want to do otherwise, we should instead - * make the 32 bit unsigned code do the optimization. But as long as there - * aren't floats secretly under the hood for that, we /should/ be okay. - */ -function rsint32(buffer, endian, offset) -{ - var neg, val; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = rgint32(buffer, endian, offset); - neg = val & 0x80000000; - if (!neg) - return (val); - - return ((0xffffffff - val + 1) * -1); -} - -/* - * The signed version of this code suffers from all of the same problems of the - * other 64 bit version. - */ -function rsint64(buffer, endian, offset) -{ - var neg, val; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = rgint64(buffer, endian, offset); - neg = val[0] & 0x80000000; - - if (!neg) - return (val); - - val[0] = (0xffffffff - val[0]) * -1; - val[1] = (0xffffffff - val[1] + 1) * -1; - - /* - * If we had the key 0x8000000000000000, that would leave the lower 32 - * bits as 0xffffffff, however, since we're goint to add one, that would - * actually leave the lower 32-bits as 0x100000000, which would break - * our ability to write back a value that we received. To work around - * this, if we actually get that value, we're going to bump the upper - * portion by 1 and set this to zero. - */ - mod_assert.ok(val[1] <= 0x100000000); - if (val[1] == -0x100000000) { - val[1] = 0; - val[0]--; - } - - return (val); -} - -/* - * We now move onto IEEE 754: The traditional form for floating point numbers - * and what is secretly hiding at the heart of everything in this. I really hope - * that someone is actually using this, as otherwise, this effort is probably - * going to be more wasted. - * - * One might be tempted to use parseFloat here, but that wouldn't work at all - * for several reasons. Mostly due to the way floats actually work, and - * parseFloat only actually works in base 10. I don't see base 10 anywhere near - * this file. - * - * In this case we'll implement the single and double precision versions. The - * quadruple precision, while probably useful, wouldn't really be accepted by - * Javascript, so let's not even waste our time. - * - * So let's review how this format looks like. A single precision value is 32 - * bits and has three parts: - * - Sign bit - * - Exponent (Using bias notation) - * - Mantissa - * - * |s|eeeeeeee|mmmmmmmmmmmmmmmmmmmmmmmmm| - * 31| 30-23 | 22 - 0 | - * - * The exponent is stored in a biased input. The bias in this case 127. - * Therefore, our exponent is equal to the 8-bit value - 127. - * - * By default, a number is normalized in IEEE, that means that the mantissa has - * an implicit one that we don't see. So really the value stored is 1.m. - * However, if the exponent is all zeros, then instead we have to shift - * everything to the right one and there is no more implicit one. - * - * Special values: - * - Positive Infinity: - * Sign: 0 - * Exponent: All 1s - * Mantissa: 0 - * - Negative Infinity: - * Sign: 1 - * Exponent: All 1s - * Mantissa: 0 - * - NaN: - * Sign: * - * Exponent: All 1s - * Mantissa: non-zero - * - Zero: - * Sign: * - * Exponent: All 0s - * Mantissa: 0 - * - * In the case of zero, the sign bit determines whether we get a positive or - * negative zero. However, since Javascript cannot determine the difference - * between the two: i.e. -0 == 0, we just always return 0. - * - */ -function rfloat(buffer, endian, offset) -{ - var bytes = []; - var sign, exponent, mantissa, val; - var bias = 127; - var maxexp = 0xff; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - /* Normalize the bytes to be in endian order */ - if (endian == 'big') { - bytes[0] = buffer[offset]; - bytes[1] = buffer[offset+1]; - bytes[2] = buffer[offset+2]; - bytes[3] = buffer[offset+3]; - } else { - bytes[3] = buffer[offset]; - bytes[2] = buffer[offset+1]; - bytes[1] = buffer[offset+2]; - bytes[0] = buffer[offset+3]; - } - - sign = bytes[0] & 0x80; - exponent = (bytes[0] & 0x7f) << 1; - exponent |= (bytes[1] & 0x80) >>> 7; - mantissa = (bytes[1] & 0x7f) << 16; - mantissa |= bytes[2] << 8; - mantissa |= bytes[3]; - - /* Check for special cases before we do general parsing */ - if (!sign && exponent == maxexp && mantissa === 0) - return (Number.POSITIVE_INFINITY); - - if (sign && exponent == maxexp && mantissa === 0) - return (Number.NEGATIVE_INFINITY); - - if (exponent == maxexp && mantissa !== 0) - return (Number.NaN); - - /* - * Javascript really doesn't have support for positive or negative zero. - * So we're not going to try and give it to you. That would be just - * plain weird. Besides -0 == 0. - */ - if (exponent === 0 && mantissa === 0) - return (0); - - /* - * Now we can deal with the bias and the determine whether the mantissa - * has the implicit one or not. - */ - exponent -= bias; - if (exponent == -bias) { - exponent++; - val = 0; - } else { - val = 1; - } - - val = (val + mantissa * Math.pow(2, -23)) * Math.pow(2, exponent); - - if (sign) - val *= -1; - - return (val); -} - -/* - * Doubles in IEEE 754 are like their brothers except for a few changes and - * increases in size: - * - The exponent is now 11 bits - * - The mantissa is now 52 bits - * - The bias is now 1023 - * - * |s|eeeeeeeeeee|mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm| - * 63| 62 - 52 | 51 - 0 | - * 63| 62 - 52 | 51 - 0 | - * - * While the size has increased a fair amount, we're going to end up keeping the - * same general formula for calculating the final value. As a reminder, this - * formula is: - * - * (-1)^s * (n + m) * 2^(e-b) - * - * Where: - * s is the sign bit - * n is (exponent > 0) ? 1 : 0 -- Determines whether we're normalized - * or not - * m is the mantissa - * e is the exponent specified - * b is the bias for the exponent - * - */ -function rdouble(buffer, endian, offset) -{ - var bytes = []; - var sign, exponent, mantissa, val, lowmant; - var bias = 1023; - var maxexp = 0x7ff; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - /* Normalize the bytes to be in endian order */ - if (endian == 'big') { - bytes[0] = buffer[offset]; - bytes[1] = buffer[offset+1]; - bytes[2] = buffer[offset+2]; - bytes[3] = buffer[offset+3]; - bytes[4] = buffer[offset+4]; - bytes[5] = buffer[offset+5]; - bytes[6] = buffer[offset+6]; - bytes[7] = buffer[offset+7]; - } else { - bytes[7] = buffer[offset]; - bytes[6] = buffer[offset+1]; - bytes[5] = buffer[offset+2]; - bytes[4] = buffer[offset+3]; - bytes[3] = buffer[offset+4]; - bytes[2] = buffer[offset+5]; - bytes[1] = buffer[offset+6]; - bytes[0] = buffer[offset+7]; - } - - /* - * We can construct the exponent and mantissa the same way as we did in - * the case of a float, just increase the range of the exponent. - */ - sign = bytes[0] & 0x80; - exponent = (bytes[0] & 0x7f) << 4; - exponent |= (bytes[1] & 0xf0) >>> 4; - - /* - * This is going to be ugly but then again, we're dealing with IEEE 754. - * This could probably be done as a node add on in a few lines of C++, - * but oh we'll, we've made it this far so let's be native the rest of - * the way... - * - * What we're going to do is break the mantissa into two parts, the - * lower 24 bits and the upper 28 bits. We'll multiply the upper 28 bits - * by the appropriate power and then add in the lower 24-bits. Not - * really that great. It's pretty much a giant kludge to deal with - * Javascript eccentricities around numbers. - */ - lowmant = bytes[7]; - lowmant |= bytes[6] << 8; - lowmant |= bytes[5] << 16; - mantissa = bytes[4]; - mantissa |= bytes[3] << 8; - mantissa |= bytes[2] << 16; - mantissa |= (bytes[1] & 0x0f) << 24; - mantissa *= Math.pow(2, 24); /* Equivalent to << 24, but JS compat */ - mantissa += lowmant; - - /* Check for special cases before we do general parsing */ - if (!sign && exponent == maxexp && mantissa === 0) - return (Number.POSITIVE_INFINITY); - - if (sign && exponent == maxexp && mantissa === 0) - return (Number.NEGATIVE_INFINITY); - - if (exponent == maxexp && mantissa !== 0) - return (Number.NaN); - - /* - * Javascript really doesn't have support for positive or negative zero. - * So we're not going to try and give it to you. That would be just - * plain weird. Besides -0 == 0. - */ - if (exponent === 0 && mantissa === 0) - return (0); - - /* - * Now we can deal with the bias and the determine whether the mantissa - * has the implicit one or not. - */ - exponent -= bias; - if (exponent == -bias) { - exponent++; - val = 0; - } else { - val = 1; - } - - val = (val + mantissa * Math.pow(2, -52)) * Math.pow(2, exponent); - - if (sign) - val *= -1; - - return (val); -} - -/* - * Now that we have gone through the pain of reading the individual types, we're - * probably going to want some way to write these back. None of this is going to - * be good. But since we have Javascript numbers this should certainly be more - * interesting. Though we can constrain this end a little bit more in what is - * valid. For now, let's go back to our friends the unsigned value. - */ - -/* - * Unsigned numbers seem deceptively easy. Here are the general steps and rules - * that we are going to take: - * - If the number is negative, throw an Error - * - Truncate any floating point portion - * - Take the modulus of the number in our base - * - Write it out to the buffer in the endian format requested at the offset - */ - -/* - * We have to make sure that the value is a valid integer. This means that it is - * non-negative. It has no fractional component and that it does not exceed the - * maximum allowed value. - * - * value The number to check for validity - * - * max The maximum value - */ -function prepuint(value, max) -{ - if (typeof (value) != 'number') - throw (new (Error('cannot write a non-number as a number'))); - - if (value < 0) - throw (new Error('specified a negative value for writing an ' + - 'unsigned value')); - - if (value > max) - throw (new Error('value is larger than maximum value for ' + - 'type')); - - if (Math.floor(value) !== value) - throw (new Error('value has a fractional component')); - - return (value); -} - -/* - * 8-bit version, classy. We can ignore endianness which is good. - */ -function wuint8(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepuint(value, 0xff); - buffer[offset] = val; -} - -/* - * Pretty much the same as the 8-bit version, just this time we need to worry - * about endian related issues. - */ -function wgint16(val, endian, buffer, offset) -{ - if (endian == 'big') { - buffer[offset] = (val & 0xff00) >>> 8; - buffer[offset+1] = val & 0x00ff; - } else { - buffer[offset+1] = (val & 0xff00) >>> 8; - buffer[offset] = val & 0x00ff; - } -} - -function wuint16(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 1 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepuint(value, 0xffff); - wgint16(val, endian, buffer, offset); -} - -/* - * The 32-bit version is going to have to be a little different unfortunately. - * We can't quite bitshift to get the largest byte, because that would end up - * getting us caught by the signed values. - * - * And yes, we do want to subtract out the lower part by default. This means - * that when we do the division, it will be treated as a bit shift and we won't - * end up generating a floating point value. If we did generate a floating point - * value we'd have to truncate it intelligently, this saves us that problem and - * may even be somewhat faster under the hood. - */ -function wgint32(val, endian, buffer, offset) -{ - if (endian == 'big') { - buffer[offset] = (val - (val & 0x00ffffff)) / Math.pow(2, 24); - buffer[offset+1] = (val >>> 16) & 0xff; - buffer[offset+2] = (val >>> 8) & 0xff; - buffer[offset+3] = val & 0xff; - } else { - buffer[offset+3] = (val - (val & 0x00ffffff)) / - Math.pow(2, 24); - buffer[offset+2] = (val >>> 16) & 0xff; - buffer[offset+1] = (val >>> 8) & 0xff; - buffer[offset] = val & 0xff; - } -} - -function wuint32(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepuint(value, 0xffffffff); - wgint32(val, endian, buffer, offset); -} - -/* - * Unlike the other versions, we expect the value to be in the form of two - * arrays where value[0] << 32 + value[1] would result in the value that we - * want. - */ -function wgint64(value, endian, buffer, offset) -{ - if (endian == 'big') { - wgint32(value[0], endian, buffer, offset); - wgint32(value[1], endian, buffer, offset+4); - } else { - wgint32(value[0], endian, buffer, offset+4); - wgint32(value[1], endian, buffer, offset); - } -} - -function wuint64(value, endian, buffer, offset) -{ - if (value === undefined) - throw (new Error('missing value')); - - if (!(value instanceof Array)) - throw (new Error('value must be an array')); - - if (value.length != 2) - throw (new Error('value must be an array of length 2')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - prepuint(value[0], 0xffffffff); - prepuint(value[1], 0xffffffff); - wgint64(value, endian, buffer, offset); -} - -/* - * We now move onto our friends in the signed number category. Unlike unsigned - * numbers, we're going to have to worry a bit more about how we put values into - * arrays. Since we are only worrying about signed 32-bit values, we're in - * slightly better shape. Unfortunately, we really can't do our favorite binary - * & in this system. It really seems to do the wrong thing. For example: - * - * > -32 & 0xff - * 224 - * - * What's happening above is really: 0xe0 & 0xff = 0xe0. However, the results of - * this aren't treated as a signed number. Ultimately a bad thing. - * - * What we're going to want to do is basically create the unsigned equivalent of - * our representation and pass that off to the wuint* functions. To do that - * we're going to do the following: - * - * - if the value is positive - * we can pass it directly off to the equivalent wuint - * - if the value is negative - * we do the following computation: - * mb + val + 1, where - * mb is the maximum unsigned value in that byte size - * val is the Javascript negative integer - * - * - * As a concrete value, take -128. In signed 16 bits this would be 0xff80. If - * you do out the computations: - * - * 0xffff - 128 + 1 - * 0xffff - 127 - * 0xff80 - * - * You can then encode this value as the signed version. This is really rather - * hacky, but it should work and get the job done which is our goal here. - * - * Thus the overall flow is: - * - Truncate the floating point part of the number - * - We don't have to take the modulus, because the unsigned versions will - * take care of that for us. And we don't have to worry about that - * potentially causing bad things to happen because of sign extension - * - Pass it off to the appropriate unsigned version, potentially modifying - * the negative portions as necessary. - */ - -/* - * A series of checks to make sure we actually have a signed 32-bit number - */ -function prepsint(value, max, min) -{ - if (typeof (value) != 'number') - throw (new (Error('cannot write a non-number as a number'))); - - if (value > max) - throw (new Error('value larger than maximum allowed value')); - - if (value < min) - throw (new Error('value smaller than minimum allowed value')); - - if (Math.floor(value) !== value) - throw (new Error('value has a fractional component')); - - return (value); -} - -/* - * The 8-bit version of the signed value. Overall, fairly straightforward. - */ -function wsint8(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepsint(value, 0x7f, -0x80); - if (val >= 0) - wuint8(val, endian, buffer, offset); - else - wuint8(0xff + val + 1, endian, buffer, offset); -} - -/* - * The 16-bit version of the signed value. Also, fairly straightforward. - */ -function wsint16(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 1 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepsint(value, 0x7fff, -0x8000); - if (val >= 0) - wgint16(val, endian, buffer, offset); - else - wgint16(0xffff + val + 1, endian, buffer, offset); - -} - -/* - * We can do this relatively easily by leveraging the code used for 32-bit - * unsigned code. - */ -function wsint32(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepsint(value, 0x7fffffff, -0x80000000); - if (val >= 0) - wgint32(val, endian, buffer, offset); - else - wgint32(0xffffffff + val + 1, endian, buffer, offset); -} - -/* - * The signed 64 bit integer should by in the same format as when received. - * Mainly it should ensure that the value is an array of two integers where - * value[0] << 32 + value[1] is the desired number. Furthermore, the two values - * need to be equal. - */ -function wsint64(value, endian, buffer, offset) -{ - var vzpos, vopos; - var vals = new Array(2); - - if (value === undefined) - throw (new Error('missing value')); - - if (!(value instanceof Array)) - throw (new Error('value must be an array')); - - if (value.length != 2) - throw (new Error('value must be an array of length 2')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - /* - * We need to make sure that we have the same sign on both values. The - * hokiest way to to do this is to multiply the number by +inf. If we do - * this, we'll get either +/-inf depending on the sign of the value. - * Once we have this, we can compare it to +inf to see if the number is - * positive or not. - */ - vzpos = (value[0] * Number.POSITIVE_INFINITY) == - Number.POSITIVE_INFINITY; - vopos = (value[1] * Number.POSITIVE_INFINITY) == - Number.POSITIVE_INFINITY; - - /* - * If either of these is zero, then we don't actually need this check. - */ - if (value[0] != 0 && value[1] != 0 && vzpos != vopos) - throw (new Error('Both entries in the array must have ' + - 'the same sign')); - - /* - * Doing verification for a signed 64-bit integer is actually a big - * trickier than it appears. We can't quite use our standard techniques - * because we need to compare both sets of values. The first value is - * pretty straightforward. If the first value is beond the extremes than - * we error out. However, the valid range of the second value varies - * based on the first one. If the first value is negative, and *not* the - * largest negative value, than it can be any integer within the range [ - * 0, 0xffffffff ]. If it is the largest negative number, it must be - * zero. - * - * If the first number is positive, than it doesn't matter what the - * value is. We just simply have to make sure we have a valid positive - * integer. - */ - if (vzpos) { - prepuint(value[0], 0x7fffffff); - prepuint(value[1], 0xffffffff); - } else { - prepsint(value[0], 0, -0x80000000); - prepsint(value[1], 0, -0xffffffff); - if (value[0] == -0x80000000 && value[1] != 0) - throw (new Error('value smaller than minimum ' + - 'allowed value')); - } - - /* Fix negative numbers */ - if (value[0] < 0 || value[1] < 0) { - vals[0] = 0xffffffff - Math.abs(value[0]); - vals[1] = 0x100000000 - Math.abs(value[1]); - if (vals[1] == 0x100000000) { - vals[1] = 0; - vals[0]++; - } - } else { - vals[0] = value[0]; - vals[1] = value[1]; - } - wgint64(vals, endian, buffer, offset); -} - -/* - * Now we are moving onto the weirder of these, the float and double. For this - * we're going to just have to do something that's pretty weird. First off, we - * have no way to get at the underlying float representation, at least not - * easily. But that doesn't mean we can't figure it out, we just have to use our - * heads. - * - * One might propose to use Number.toString(2). Of course, this is not really - * that good, because the ECMAScript 262 v3 Standard says the following Section - * 15.7.4.2-Number.prototype.toString (radix): - * - * If radix is an integer from 2 to 36, but not 10, the result is a string, the - * choice of which is implementation-dependent. - * - * Well that doesn't really help us one bit now does it? We could use the - * standard base 10 version of the string, but that's just going to create more - * errors as we end up trying to convert it back to a binary value. So, really - * this just means we have to be non-lazy and parse the structure intelligently. - * - * First off, we can do the basic checks: NaN, positive and negative infinity. - * - * Now that those are done we can work backwards to generate the mantissa and - * exponent. - * - * The first thing we need to do is determine the sign bit, easy to do, check - * whether the value is less than 0. And convert the number to its absolute - * value representation. Next, we need to determine if the value is less than - * one or greater than or equal to one and from there determine what power was - * used to get there. What follows is now specific to floats, though the general - * ideas behind this will hold for doubles as well, but the exact numbers - * involved will change. - * - * Once we have that power we can determine the exponent and the mantissa. Call - * the value that has the number of bits to reach the power ebits. In the - * general case they have the following values: - * - * exponent 127 + ebits - * mantissa value * 2^(23 - ebits) & 0x7fffff - * - * In the case where the value of ebits is <= -127 we are now in the case where - * we no longer have normalized numbers. In this case the values take on the - * following values: - * - * exponent 0 - * mantissa value * 2^149 & 0x7fffff - * - * Once we have the values for the sign, mantissa, and exponent. We reconstruct - * the four bytes as follows: - * - * byte0 sign bit and seven most significant bits from the exp - * sign << 7 | (exponent & 0xfe) >>> 1 - * - * byte1 lsb from the exponent and 7 top bits from the mantissa - * (exponent & 0x01) << 7 | (mantissa & 0x7f0000) >>> 16 - * - * byte2 bits 8-15 (zero indexing) from mantissa - * mantissa & 0xff00 >> 8 - * - * byte3 bits 0-7 from mantissa - * mantissa & 0xff - * - * Once we have this we have to assign them into the buffer in proper endian - * order. - */ - -/* - * Compute the log base 2 of the value. Now, someone who remembers basic - * properties of logarithms will point out that we could use the change of base - * formula for logs, and in fact that would be astute, because that's what we'll - * do for now. It feels cleaner, albeit it may be less efficient than just - * iterating and dividing by 2. We may want to come back and revisit that some - * day. - */ -function log2(value) -{ - return (Math.log(value) / Math.log(2)); -} - -/* - * Helper to determine the exponent of the number we're looking at. - */ -function intexp(value) -{ - return (Math.floor(log2(value))); -} - -/* - * Helper to determine the exponent of the fractional part of the value. - */ -function fracexp(value) -{ - return (Math.floor(log2(value))); -} - -function wfloat(value, endian, buffer, offset) -{ - var sign, exponent, mantissa, ebits; - var bytes = []; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - if (isNaN(value)) { - sign = 0; - exponent = 0xff; - mantissa = 23; - } else if (value == Number.POSITIVE_INFINITY) { - sign = 0; - exponent = 0xff; - mantissa = 0; - } else if (value == Number.NEGATIVE_INFINITY) { - sign = 1; - exponent = 0xff; - mantissa = 0; - } else { - /* Well we have some work to do */ - - /* Thankfully the sign bit is trivial */ - if (value < 0) { - sign = 1; - value = Math.abs(value); - } else { - sign = 0; - } - - /* Use the correct function to determine number of bits */ - if (value < 1) - ebits = fracexp(value); - else - ebits = intexp(value); - - /* Time to deal with the issues surrounding normalization */ - if (ebits <= -127) { - exponent = 0; - mantissa = (value * Math.pow(2, 149)) & 0x7fffff; - } else { - exponent = 127 + ebits; - mantissa = value * Math.pow(2, 23 - ebits); - mantissa &= 0x7fffff; - } - } - - bytes[0] = sign << 7 | (exponent & 0xfe) >>> 1; - bytes[1] = (exponent & 0x01) << 7 | (mantissa & 0x7f0000) >>> 16; - bytes[2] = (mantissa & 0x00ff00) >>> 8; - bytes[3] = mantissa & 0x0000ff; - - if (endian == 'big') { - buffer[offset] = bytes[0]; - buffer[offset+1] = bytes[1]; - buffer[offset+2] = bytes[2]; - buffer[offset+3] = bytes[3]; - } else { - buffer[offset] = bytes[3]; - buffer[offset+1] = bytes[2]; - buffer[offset+2] = bytes[1]; - buffer[offset+3] = bytes[0]; - } -} - -/* - * Now we move onto doubles. Doubles are similar to floats in pretty much all - * ways except that the processing isn't quite as straightforward because we - * can't always use shifting, i.e. we have > 32 bit values. - * - * We're going to proceed in an identical fashion to floats and utilize the same - * helper functions. All that really is changing are the specific values that we - * use to do the calculations. Thus, to review we have to do the following. - * - * First get the sign bit and convert the value to its absolute value - * representation. Next, we determine the number of bits that we used to get to - * the value, branching whether the value is greater than or less than 1. Once - * we have that value which we will again call ebits, we have to do the - * following in the general case: - * - * exponent 1023 + ebits - * mantissa [value * 2^(52 - ebits)] % 2^52 - * - * In the case where the value of ebits <= -1023 we no longer use normalized - * numbers, thus like with floats we have to do slightly different processing: - * - * exponent 0 - * mantissa [value * 2^1074] % 2^52 - * - * Once we have determined the sign, exponent and mantissa we can construct the - * bytes as follows: - * - * byte0 sign bit and seven most significant bits form the exp - * sign << 7 | (exponent & 0x7f0) >>> 4 - * - * byte1 Remaining 4 bits from the exponent and the four most - * significant bits from the mantissa 48-51 - * (exponent & 0x00f) << 4 | mantissa >>> 48 - * - * byte2 Bits 40-47 from the mantissa - * (mantissa >>> 40) & 0xff - * - * byte3 Bits 32-39 from the mantissa - * (mantissa >>> 32) & 0xff - * - * byte4 Bits 24-31 from the mantissa - * (mantissa >>> 24) & 0xff - * - * byte5 Bits 16-23 from the Mantissa - * (mantissa >>> 16) & 0xff - * - * byte6 Bits 8-15 from the mantissa - * (mantissa >>> 8) & 0xff - * - * byte7 Bits 0-7 from the mantissa - * mantissa & 0xff - * - * Now we can't quite do the right shifting that we want in bytes 1 - 3, because - * we'll have extended too far and we'll lose those values when we try and do - * the shift. Instead we have to use an alternate approach. To try and stay out - * of floating point, what we'll do is say that mantissa -= bytes[4-7] and then - * divide by 2^32. Once we've done that we can use binary arithmetic. Oof, - * that's ugly, but it seems to avoid using floating point (just based on how v8 - * seems to be optimizing for base 2 arithmetic). - */ -function wdouble(value, endian, buffer, offset) -{ - var sign, exponent, mantissa, ebits; - var bytes = []; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - if (isNaN(value)) { - sign = 0; - exponent = 0x7ff; - mantissa = 23; - } else if (value == Number.POSITIVE_INFINITY) { - sign = 0; - exponent = 0x7ff; - mantissa = 0; - } else if (value == Number.NEGATIVE_INFINITY) { - sign = 1; - exponent = 0x7ff; - mantissa = 0; - } else { - /* Well we have some work to do */ - - /* Thankfully the sign bit is trivial */ - if (value < 0) { - sign = 1; - value = Math.abs(value); - } else { - sign = 0; - } - - /* Use the correct function to determine number of bits */ - if (value < 1) - ebits = fracexp(value); - else - ebits = intexp(value); - - /* - * This is a total hack to determine a denormalized value. - * Unfortunately, we sometimes do not get a proper value for - * ebits, i.e. we lose the values that would get rounded off. - * - * - * The astute observer may wonder why we would be - * multiplying by two Math.pows rather than just summing - * them. Well, that's to get around a small bug in the - * way v8 seems to implement the function. On occasion - * doing: - * - * foo * Math.pow(2, 1023 + 51) - * - * Causes us to overflow to infinity, where as doing: - * - * foo * Math.pow(2, 1023) * Math.pow(2, 51) - * - * Does not cause us to overflow. Go figure. - * - */ - if (value <= 2.225073858507201e-308 || ebits <= -1023) { - exponent = 0; - mantissa = value * Math.pow(2, 1023) * Math.pow(2, 51); - mantissa %= Math.pow(2, 52); - } else { - /* - * We might have gotten fucked by our floating point - * logarithm magic. This is rather crappy, but that's - * our luck. If we just had a log base 2 or access to - * the stupid underlying representation this would have - * been much easier and we wouldn't have such stupid - * kludges or hacks. - */ - if (ebits > 1023) - ebits = 1023; - exponent = 1023 + ebits; - mantissa = value * Math.pow(2, -ebits); - mantissa *= Math.pow(2, 52); - mantissa %= Math.pow(2, 52); - } - } - - /* Fill the bytes in backwards to deal with the size issues */ - bytes[7] = mantissa & 0xff; - bytes[6] = (mantissa >>> 8) & 0xff; - bytes[5] = (mantissa >>> 16) & 0xff; - mantissa = (mantissa - (mantissa & 0xffffff)) / Math.pow(2, 24); - bytes[4] = mantissa & 0xff; - bytes[3] = (mantissa >>> 8) & 0xff; - bytes[2] = (mantissa >>> 16) & 0xff; - bytes[1] = (exponent & 0x00f) << 4 | mantissa >>> 24; - bytes[0] = (sign << 7) | (exponent & 0x7f0) >>> 4; - - if (endian == 'big') { - buffer[offset] = bytes[0]; - buffer[offset+1] = bytes[1]; - buffer[offset+2] = bytes[2]; - buffer[offset+3] = bytes[3]; - buffer[offset+4] = bytes[4]; - buffer[offset+5] = bytes[5]; - buffer[offset+6] = bytes[6]; - buffer[offset+7] = bytes[7]; - } else { - buffer[offset+7] = bytes[0]; - buffer[offset+6] = bytes[1]; - buffer[offset+5] = bytes[2]; - buffer[offset+4] = bytes[3]; - buffer[offset+3] = bytes[4]; - buffer[offset+2] = bytes[5]; - buffer[offset+1] = bytes[6]; - buffer[offset] = bytes[7]; - } -} - -/* - * Actually export our work above. One might argue that we shouldn't expose - * these interfaces and just force people to use the higher level abstractions - * around this work. However, unlike say other libraries we've come across, this - * interface has several properties: it makes sense, it's simple, and it's - * useful. - */ -exports.ruint8 = ruint8; -exports.ruint16 = ruint16; -exports.ruint32 = ruint32; -exports.ruint64 = ruint64; -exports.wuint8 = wuint8; -exports.wuint16 = wuint16; -exports.wuint32 = wuint32; -exports.wuint64 = wuint64; - -exports.rsint8 = rsint8; -exports.rsint16 = rsint16; -exports.rsint32 = rsint32; -exports.rsint64 = rsint64; -exports.wsint8 = wsint8; -exports.wsint16 = wsint16; -exports.wsint32 = wsint32; -exports.wsint64 = wsint64; - -exports.rfloat = rfloat; -exports.rdouble = rdouble; -exports.wfloat = wfloat; -exports.wdouble = wdouble; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js deleted file mode 100644 index 7d2f4a5a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js +++ /dev/null @@ -1,944 +0,0 @@ -/* - * rm - Feb 2011 - * ctype.js - * - * This module provides a simple abstraction towards reading and writing - * different types of binary data. It is designed to use ctio.js and provide a - * richer and more expressive API on top of it. - * - * By default we support the following as built in basic types: - * int8_t - * int16_t - * int32_t - * uint8_t - * uint16_t - * uint32_t - * uint64_t - * float - * double - * char - * char[] - * - * Each type is returned as a Number, with the exception of char and char[] - * which are returned as Node Buffers. A char is considered a uint8_t. - * - * Requests to read and write data are specified as an array of JSON objects. - * This is also the same way that one declares structs. Even if just a single - * value is requested, it must be done as a struct. The array order determines - * the order that we try and read values. Each entry has the following format - * with values marked with a * being optional. - * - * { key: { type: /type/, value*: /value/, offset*: /offset/ } - * - * If offset is defined, we lseek(offset, SEEK_SET) before reading the next - * value. Value is defined when we're writing out data, otherwise it's ignored. - * - */ - -var mod_ctf = require('./ctf.js'); -var mod_ctio = require('./ctio.js'); -var mod_assert = require('assert'); - -/* - * This is the set of basic types that we support. - * - * read The function to call to read in a value from a buffer - * - * write The function to call to write a value to a buffer - * - */ -var deftypes = { - 'uint8_t': { read: ctReadUint8, write: ctWriteUint8 }, - 'uint16_t': { read: ctReadUint16, write: ctWriteUint16 }, - 'uint32_t': { read: ctReadUint32, write: ctWriteUint32 }, - 'uint64_t': { read: ctReadUint64, write: ctWriteUint64 }, - 'int8_t': { read: ctReadSint8, write: ctWriteSint8 }, - 'int16_t': { read: ctReadSint16, write: ctWriteSint16 }, - 'int32_t': { read: ctReadSint32, write: ctWriteSint32 }, - 'int64_t': { read: ctReadSint64, write: ctWriteSint64 }, - 'float': { read: ctReadFloat, write: ctWriteFloat }, - 'double': { read: ctReadDouble, write: ctWriteDouble }, - 'char': { read: ctReadChar, write: ctWriteChar }, - 'char[]': { read: ctReadCharArray, write: ctWriteCharArray } -}; - -/* - * The following are wrappers around the CType IO low level API. They encode - * knowledge about the size and return something in the expected format. - */ -function ctReadUint8(endian, buffer, offset) -{ - var val = mod_ctio.ruint8(buffer, endian, offset); - return ({ value: val, size: 1 }); -} - -function ctReadUint16(endian, buffer, offset) -{ - var val = mod_ctio.ruint16(buffer, endian, offset); - return ({ value: val, size: 2 }); -} - -function ctReadUint32(endian, buffer, offset) -{ - var val = mod_ctio.ruint32(buffer, endian, offset); - return ({ value: val, size: 4 }); -} - -function ctReadUint64(endian, buffer, offset) -{ - var val = mod_ctio.ruint64(buffer, endian, offset); - return ({ value: val, size: 8 }); -} - -function ctReadSint8(endian, buffer, offset) -{ - var val = mod_ctio.rsint8(buffer, endian, offset); - return ({ value: val, size: 1 }); -} - -function ctReadSint16(endian, buffer, offset) -{ - var val = mod_ctio.rsint16(buffer, endian, offset); - return ({ value: val, size: 2 }); -} - -function ctReadSint32(endian, buffer, offset) -{ - var val = mod_ctio.rsint32(buffer, endian, offset); - return ({ value: val, size: 4 }); -} - -function ctReadSint64(endian, buffer, offset) -{ - var val = mod_ctio.rsint64(buffer, endian, offset); - return ({ value: val, size: 8 }); -} - -function ctReadFloat(endian, buffer, offset) -{ - var val = mod_ctio.rfloat(buffer, endian, offset); - return ({ value: val, size: 4 }); -} - -function ctReadDouble(endian, buffer, offset) -{ - var val = mod_ctio.rdouble(buffer, endian, offset); - return ({ value: val, size: 8 }); -} - -/* - * Reads a single character into a node buffer - */ -function ctReadChar(endian, buffer, offset) -{ - var res = new Buffer(1); - res[0] = mod_ctio.ruint8(buffer, endian, offset); - return ({ value: res, size: 1 }); -} - -function ctReadCharArray(length, endian, buffer, offset) -{ - var ii; - var res = new Buffer(length); - - for (ii = 0; ii < length; ii++) - res[ii] = mod_ctio.ruint8(buffer, endian, offset + ii); - - return ({ value: res, size: length }); -} - -function ctWriteUint8(value, endian, buffer, offset) -{ - mod_ctio.wuint8(value, endian, buffer, offset); - return (1); -} - -function ctWriteUint16(value, endian, buffer, offset) -{ - mod_ctio.wuint16(value, endian, buffer, offset); - return (2); -} - -function ctWriteUint32(value, endian, buffer, offset) -{ - mod_ctio.wuint32(value, endian, buffer, offset); - return (4); -} - -function ctWriteUint64(value, endian, buffer, offset) -{ - mod_ctio.wuint64(value, endian, buffer, offset); - return (8); -} - -function ctWriteSint8(value, endian, buffer, offset) -{ - mod_ctio.wsint8(value, endian, buffer, offset); - return (1); -} - -function ctWriteSint16(value, endian, buffer, offset) -{ - mod_ctio.wsint16(value, endian, buffer, offset); - return (2); -} - -function ctWriteSint32(value, endian, buffer, offset) -{ - mod_ctio.wsint32(value, endian, buffer, offset); - return (4); -} - -function ctWriteSint64(value, endian, buffer, offset) -{ - mod_ctio.wsint64(value, endian, buffer, offset); - return (8); -} - -function ctWriteFloat(value, endian, buffer, offset) -{ - mod_ctio.wfloat(value, endian, buffer, offset); - return (4); -} - -function ctWriteDouble(value, endian, buffer, offset) -{ - mod_ctio.wdouble(value, endian, buffer, offset); - return (8); -} - -/* - * Writes a single character into a node buffer - */ -function ctWriteChar(value, endian, buffer, offset) -{ - if (!(value instanceof Buffer)) - throw (new Error('Input must be a buffer')); - - mod_ctio.ruint8(value[0], endian, buffer, offset); - return (1); -} - -/* - * We're going to write 0s into the buffer if the string is shorter than the - * length of the array. - */ -function ctWriteCharArray(value, length, endian, buffer, offset) -{ - var ii; - - if (!(value instanceof Buffer)) - throw (new Error('Input must be a buffer')); - - if (value.length > length) - throw (new Error('value length greater than array length')); - - for (ii = 0; ii < value.length && ii < length; ii++) - mod_ctio.wuint8(value[ii], endian, buffer, offset + ii); - - for (; ii < length; ii++) - mod_ctio.wuint8(0, endian, offset + ii); - - - return (length); -} - -/* - * Each parser has their own set of types. We want to make sure that they each - * get their own copy as they may need to modify it. - */ -function ctGetBasicTypes() -{ - var ret = {}; - var key; - for (key in deftypes) - ret[key] = deftypes[key]; - - return (ret); -} - -/* - * Given a string in the form of type[length] we want to split this into an - * object that extracts that information. We want to note that we could possibly - * have nested arrays so this should only check the furthest one. It may also be - * the case that we have no [] pieces, in which case we just return the current - * type. - */ -function ctParseType(str) -{ - var begInd, endInd; - var type, len; - if (typeof (str) != 'string') - throw (new Error('type must be a Javascript string')); - - endInd = str.lastIndexOf(']'); - if (endInd == -1) { - if (str.lastIndexOf('[') != -1) - throw (new Error('found invalid type with \'[\' but ' + - 'no corresponding \']\'')); - - return ({ type: str }); - } - - begInd = str.lastIndexOf('['); - if (begInd == -1) - throw (new Error('found invalid type with \']\' but ' + - 'no corresponding \'[\'')); - - if (begInd >= endInd) - throw (new Error('malformed type, \']\' appears before \'[\'')); - - type = str.substring(0, begInd); - len = str.substring(begInd + 1, endInd); - - return ({ type: type, len: len }); -} - -/* - * Given a request validate that all of the fields for it are valid and make - * sense. This includes verifying the following notions: - * - Each type requested is present in types - * - Only allow a name for a field to be specified once - * - If an array is specified, validate that the requested field exists and - * comes before it. - * - If fields is defined, check that each entry has the occurrence of field - */ -function ctCheckReq(def, types, fields) -{ - var ii, jj; - var req, keys, key; - var found = {}; - - if (!(def instanceof Array)) - throw (new Error('definition is not an array')); - - if (def.length === 0) - throw (new Error('definition must have at least one element')); - - for (ii = 0; ii < def.length; ii++) { - req = def[ii]; - if (!(req instanceof Object)) - throw (new Error('definition must be an array of' + - 'objects')); - - keys = Object.keys(req); - if (keys.length != 1) - throw (new Error('definition entry must only have ' + - 'one key')); - - if (keys[0] in found) - throw (new Error('Specified name already ' + - 'specified: ' + keys[0])); - - if (!('type' in req[keys[0]])) - throw (new Error('missing required type definition')); - - key = ctParseType(req[keys[0]]['type']); - - /* - * We may have nested arrays, we need to check the validity of - * the types until the len field is undefined in key. However, - * each time len is defined we need to verify it is either an - * integer or corresponds to an already seen key. - */ - while (key['len'] !== undefined) { - if (isNaN(parseInt(key['len'], 10))) { - if (!(key['len'] in found)) - throw (new Error('Given an array ' + - 'length without a matching type')); - - } - - key = ctParseType(key['type']); - } - - /* Now we can validate if the type is valid */ - if (!(key['type'] in types)) - throw (new Error('type not found or typdefed: ' + - key['type'])); - - /* Check for any required fields */ - if (fields !== undefined) { - for (jj = 0; jj < fields.length; jj++) { - if (!(fields[jj] in req[keys[0]])) - throw (new Error('Missing required ' + - 'field: ' + fields[jj])); - } - } - - found[keys[0]] = true; - } -} - - -/* - * Create a new instance of the parser. Each parser has its own store of - * typedefs and endianness. Conf is an object with the following required - * values: - * - * endian Either 'big' or 'little' do determine the endianness we - * want to read from or write to. - * - * And the following optional values: - * - * char-type Valid options here are uint8 and int8. If uint8 is - * specified this changes the default behavior of a single - * char from being a buffer of a single character to being - * a uint8_t. If int8, it becomes an int8_t instead. - */ -function CTypeParser(conf) -{ - if (!conf) throw (new Error('missing required argument')); - - if (!('endian' in conf)) - throw (new Error('missing required endian value')); - - if (conf['endian'] != 'big' && conf['endian'] != 'little') - throw (new Error('Invalid endian type')); - - if ('char-type' in conf && (conf['char-type'] != 'uint8' && - conf['char-type'] != 'int8')) - throw (new Error('invalid option for char-type: ' + - conf['char-type'])); - - this.endian = conf['endian']; - this.types = ctGetBasicTypes(); - - /* - * There may be a more graceful way to do this, but this will have to - * serve. - */ - if ('char-type' in conf && conf['char-type'] == 'uint8') - this.types['char'] = this.types['uint8_t']; - - if ('char-type' in conf && conf['char-type'] == 'int8') - this.types['char'] = this.types['int8_t']; -} - -/* - * Sets the current endian value for the Parser. If the value is not valid, - * throws an Error. - * - * endian Either 'big' or 'little' do determine the endianness we - * want to read from or write to. - * - */ -CTypeParser.prototype.setEndian = function (endian) -{ - if (endian != 'big' && endian != 'little') - throw (new Error('invalid endian type, must be big or ' + - 'little')); - - this.endian = endian; -}; - -/* - * Returns the current value of the endian value for the parser. - */ -CTypeParser.prototype.getEndian = function () -{ - return (this.endian); -}; - -/* - * A user has requested to add a type, let us honor their request. Yet, if their - * request doth spurn us, send them unto the Hells which Dante describes. - * - * name The string for the type definition we're adding - * - * value Either a string that is a type/array name or an object - * that describes a struct. - */ -CTypeParser.prototype.typedef = function (name, value) -{ - var type; - - if (name === undefined) - throw (new (Error('missing required typedef argument: name'))); - - if (value === undefined) - throw (new (Error('missing required typedef argument: value'))); - - if (typeof (name) != 'string') - throw (new (Error('the name of a type must be a string'))); - - type = ctParseType(name); - - if (type['len'] !== undefined) - throw (new Error('Cannot have an array in the typedef name')); - - if (name in this.types) - throw (new Error('typedef name already present: ' + name)); - - if (typeof (value) != 'string' && !(value instanceof Array)) - throw (new Error('typedef value must either be a string or ' + - 'struct')); - - if (typeof (value) == 'string') { - type = ctParseType(value); - if (type['len'] !== undefined) { - if (isNaN(parseInt(type['len'], 10))) - throw (new (Error('typedef value must use ' + - 'fixed size array when outside of a ' + - 'struct'))); - } - - this.types[name] = value; - } else { - /* We have a struct, validate it */ - ctCheckReq(value, this.types); - this.types[name] = value; - } -}; - -/* - * Include all of the typedefs, but none of the built in types. This should be - * treated as read-only. - */ -CTypeParser.prototype.lstypes = function () -{ - var key; - var ret = {}; - - for (key in this.types) { - if (key in deftypes) - continue; - ret[key] = this.types[key]; - } - - return (ret); -}; - -/* - * Given a type string that may have array types that aren't numbers, try and - * fill them in from the values object. The object should be of the format where - * indexing into it should return a number for that type. - * - * str The type string - * - * values An object that can be used to fulfill type information - */ -function ctResolveArray(str, values) -{ - var ret = ''; - var type = ctParseType(str); - - while (type['len'] !== undefined) { - if (isNaN(parseInt(type['len'], 10))) { - if (typeof (values[type['len']]) != 'number') - throw (new Error('cannot sawp in non-number ' + - 'for array value')); - ret = '[' + values[type['len']] + ']' + ret; - } else { - ret = '[' + type['len'] + ']' + ret; - } - type = ctParseType(type['type']); - } - - ret = type['type'] + ret; - - return (ret); -} - -/* - * [private] Either the typedef resolves to another type string or to a struct. - * If it resolves to a struct, we just pass it off to read struct. If not, we - * can just pass it off to read entry. - */ -CTypeParser.prototype.resolveTypedef = function (type, dispatch, buffer, - offset, value) -{ - var pt; - - mod_assert.ok(type in this.types); - if (typeof (this.types[type]) == 'string') { - pt = ctParseType(this.types[type]); - if (dispatch == 'read') - return (this.readEntry(pt, buffer, offset)); - else if (dispatch == 'write') - return (this.writeEntry(value, pt, buffer, offset)); - else - throw (new Error('invalid dispatch type to ' + - 'resolveTypedef')); - } else { - if (dispatch == 'read') - return (this.readStruct(this.types[type], buffer, - offset)); - else if (dispatch == 'write') - return (this.writeStruct(value, this.types[type], - buffer, offset)); - else - throw (new Error('invalid dispatch type to ' + - 'resolveTypedef')); - } - -}; - -/* - * [private] Try and read in the specific entry. - */ -CTypeParser.prototype.readEntry = function (type, buffer, offset) -{ - var parse, len; - - /* - * Because we want to special case char[]s this is unfortunately - * a bit uglier than it really should be. We want to special - * case char[]s so that we return a node buffer, thus they are a - * first class type where as all other arrays just call into a - * generic array routine which calls their data-specific routine - * the specified number of times. - * - * The valid dispatch options we have are: - * - Array and char => char[] handler - * - Generic array handler - * - Generic typedef handler - * - Basic type handler - */ - if (type['len'] !== undefined) { - len = parseInt(type['len'], 10); - if (isNaN(len)) - throw (new Error('somehow got a non-numeric length')); - - if (type['type'] == 'char') - parse = this.types['char[]']['read'](len, - this.endian, buffer, offset); - else - parse = this.readArray(type['type'], - len, buffer, offset); - } else { - if (type['type'] in deftypes) - parse = this.types[type['type']]['read'](this.endian, - buffer, offset); - else - parse = this.resolveTypedef(type['type'], 'read', - buffer, offset); - } - - return (parse); -}; - -/* - * [private] Read an array of data - */ -CTypeParser.prototype.readArray = function (type, length, buffer, offset) -{ - var ii, ent, pt; - var baseOffset = offset; - var ret = new Array(length); - pt = ctParseType(type); - - for (ii = 0; ii < length; ii++) { - ent = this.readEntry(pt, buffer, offset); - offset += ent['size']; - ret[ii] = ent['value']; - } - - return ({ value: ret, size: offset - baseOffset }); -}; - -/* - * [private] Read a single struct in. - */ -CTypeParser.prototype.readStruct = function (def, buffer, offset) -{ - var parse, ii, type, entry, key; - var baseOffset = offset; - var ret = {}; - - /* Walk it and handle doing what's necessary */ - for (ii = 0; ii < def.length; ii++) { - key = Object.keys(def[ii])[0]; - entry = def[ii][key]; - - /* Resolve all array values */ - type = ctParseType(ctResolveArray(entry['type'], ret)); - - if ('offset' in entry) - offset = baseOffset + entry['offset']; - - parse = this.readEntry(type, buffer, offset); - - offset += parse['size']; - ret[key] = parse['value']; - } - - return ({ value: ret, size: (offset-baseOffset)}); -}; - -/* - * This is what we were born to do. We read the data from a buffer and return it - * in an object whose keys match the values from the object. - * - * def The array definition of the data to read in - * - * buffer The buffer to read data from - * - * offset The offset to start writing to - * - * Returns an object where each key corresponds to an entry in def and the value - * is the read value. - */ -CTypeParser.prototype.readData = function (def, buffer, offset) -{ - /* Sanity check for arguments */ - if (def === undefined) - throw (new Error('missing definition for what we should be' + - 'parsing')); - - if (buffer === undefined) - throw (new Error('missing buffer for what we should be ' + - 'parsing')); - - if (offset === undefined) - throw (new Error('missing offset for what we should be ' + - 'parsing')); - - /* Sanity check the object definition */ - ctCheckReq(def, this.types); - - return (this.readStruct(def, buffer, offset)['value']); -}; - -/* - * [private] Write out an array of data - */ -CTypeParser.prototype.writeArray = function (value, type, length, buffer, - offset) -{ - var ii, pt; - var baseOffset = offset; - if (!(value instanceof Array)) - throw (new Error('asked to write an array, but value is not ' + - 'an array')); - - if (value.length != length) - throw (new Error('asked to write array of length ' + length + - ' but that does not match value length: ' + value.length)); - - pt = ctParseType(type); - for (ii = 0; ii < length; ii++) - offset += this.writeEntry(value[ii], pt, buffer, offset); - - return (offset - baseOffset); -}; - -/* - * [private] Write the specific entry - */ -CTypeParser.prototype.writeEntry = function (value, type, buffer, offset) -{ - var len, ret; - - if (type['len'] !== undefined) { - len = parseInt(type['len'], 10); - if (isNaN(len)) - throw (new Error('somehow got a non-numeric length')); - - if (type['type'] == 'char') - ret = this.types['char[]']['write'](value, len, - this.endian, buffer, offset); - else - ret = this.writeArray(value, type['type'], - len, buffer, offset); - } else { - if (type['type'] in deftypes) - ret = this.types[type['type']]['write'](value, - this.endian, buffer, offset); - else - ret = this.resolveTypedef(type['type'], 'write', - buffer, offset, value); - } - - return (ret); -}; - -/* - * [private] Write a single struct out. - */ -CTypeParser.prototype.writeStruct = function (value, def, buffer, offset) -{ - var ii, entry, type, key; - var baseOffset = offset; - var vals = {}; - - for (ii = 0; ii < def.length; ii++) { - key = Object.keys(def[ii])[0]; - entry = def[ii][key]; - - type = ctParseType(ctResolveArray(entry['type'], vals)); - - if ('offset' in entry) - offset = baseOffset + entry['offset']; - - offset += this.writeEntry(value[ii], type, buffer, offset); - /* Now that we've written it out, we can use it for arrays */ - vals[key] = value[ii]; - } - - return (offset); -}; - -/* - * Unfortunately, we're stuck with the sins of an initial poor design. Because - * of that, we are going to have to support the old way of writing data via - * writeData. There we insert the values that you want to write into the - * definition. A little baroque. Internally, we use the new model. So we need to - * just get those values out of there. But to maintain the principle of least - * surprise, we're not going to modify the input data. - */ -function getValues(def) -{ - var ii, out, key; - out = []; - for (ii = 0; ii < def.length; ii++) { - key = Object.keys(def[ii])[0]; - mod_assert.ok('value' in def[ii][key]); - out.push(def[ii][key]['value']); - } - - return (out); -} - -/* - * This is the second half of what we were born to do, write out the data - * itself. Historically this function required you to put your values in the - * definition section. This was not the smartest thing to do and a bit of an - * oversight to be honest. As such, this function now takes a values argument. - * If values is non-null and non-undefined, it will be used to determine the - * values. This means that the old method is still supported, but is no longer - * acceptable. - * - * def The array definition of the data to write out with - * values - * - * buffer The buffer to write to - * - * offset The offset in the buffer to write to - * - * values An array of values to write. - */ -CTypeParser.prototype.writeData = function (def, buffer, offset, values) -{ - var hv; - - if (def === undefined) - throw (new Error('missing definition for what we should be' + - 'parsing')); - - if (buffer === undefined) - throw (new Error('missing buffer for what we should be ' + - 'parsing')); - - if (offset === undefined) - throw (new Error('missing offset for what we should be ' + - 'parsing')); - - hv = (values != null && values != undefined); - if (hv) { - if (!Array.isArray(values)) - throw (new Error('missing values for writing')); - ctCheckReq(def, this.types); - } else { - ctCheckReq(def, this.types, [ 'value' ]); - } - - this.writeStruct(hv ? values : getValues(def), def, buffer, offset); -}; - -/* - * Functions to go to and from 64 bit numbers in a way that is compatible with - * Javascript limitations. There are two sets. One where the user is okay with - * an approximation and one where they are definitely not okay with an - * approximation. - */ - -/* - * Attempts to convert an array of two integers returned from rsint64 / ruint64 - * into an absolute 64 bit number. If however the value would exceed 2^52 this - * will instead throw an error. The mantissa in a double is a 52 bit number and - * rather than potentially give you a value that is an approximation this will - * error. If you would rather an approximation, please see toApprox64. - * - * val An array of two 32-bit integers - */ -function toAbs64(val) -{ - if (val === undefined) - throw (new Error('missing required arg: value')); - - if (!Array.isArray(val)) - throw (new Error('value must be an array')); - - if (val.length != 2) - throw (new Error('value must be an array of length 2')); - - /* We have 20 bits worth of precision in this range */ - if (val[0] >= 0x100000) - throw (new Error('value would become approximated')); - - return (val[0] * Math.pow(2, 32) + val[1]); -} - -/* - * Will return the 64 bit value as returned in an array from rsint64 / ruint64 - * to a value as close as it can. Note that Javascript stores all numbers as a - * double and the mantissa only has 52 bits. Thus this version may approximate - * the value. - * - * val An array of two 32-bit integers - */ -function toApprox64(val) -{ - if (val === undefined) - throw (new Error('missing required arg: value')); - - if (!Array.isArray(val)) - throw (new Error('value must be an array')); - - if (val.length != 2) - throw (new Error('value must be an array of length 2')); - - return (Math.pow(2, 32) * val[0] + val[1]); -} - -function parseCTF(json, conf) -{ - var ctype = new CTypeParser(conf); - mod_ctf.ctfParseJson(json, ctype); - - return (ctype); -} - -/* - * Export the few things we actually want to. Currently this is just the CType - * Parser and ctio. - */ -exports.Parser = CTypeParser; -exports.toAbs64 = toAbs64; -exports.toApprox64 = toApprox64; - -exports.parseCTF = parseCTF; - -exports.ruint8 = mod_ctio.ruint8; -exports.ruint16 = mod_ctio.ruint16; -exports.ruint32 = mod_ctio.ruint32; -exports.ruint64 = mod_ctio.ruint64; -exports.wuint8 = mod_ctio.wuint8; -exports.wuint16 = mod_ctio.wuint16; -exports.wuint32 = mod_ctio.wuint32; -exports.wuint64 = mod_ctio.wuint64; - -exports.rsint8 = mod_ctio.rsint8; -exports.rsint16 = mod_ctio.rsint16; -exports.rsint32 = mod_ctio.rsint32; -exports.rsint64 = mod_ctio.rsint64; -exports.wsint8 = mod_ctio.wsint8; -exports.wsint16 = mod_ctio.wsint16; -exports.wsint32 = mod_ctio.wsint32; -exports.wsint64 = mod_ctio.wsint64; - -exports.rfloat = mod_ctio.rfloat; -exports.rdouble = mod_ctio.rdouble; -exports.wfloat = mod_ctio.wfloat; -exports.wdouble = mod_ctio.wdouble; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype deleted file mode 100644 index 3f94986a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype +++ /dev/null @@ -1,241 +0,0 @@ -'\" te -.\" Copyright (c) 2011, Robert Mustacchi. All Rights Reserved. -.\" Copyright (c) 2011, Joyent, Inc. 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. -.TH CTIO 3CTYPE "December 12, 2011" -.SH NAME -ctio, ruint8, ruint16, ruint32, ruint64, wuint8, wuint16, wuint32, wuint64, -rsint8, rsint16, rsint32, rsint64, wsint8, wsint16, wsint32, wsint64, rfloat, -rdouble, wfloat, wdouble \- integer and float operations -.SH SYNOPSIS -.LP -.nf -var mod_ctype = require('ctype'); - -\fBNumber\fR \fBmod_ctype.ruint8\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.ruint16\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.ruint32\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber[2]\fR \fBmod_ctype.ruint64\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rsint8\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rsint16\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rsint32\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber[2]\fR \fBmod_ctype.rsint64\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rfloat\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rdouble\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wuint8\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wuint16\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wuint32\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wuint64\fR(\fBNumber[2]\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wsint8\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wsint16\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wsint32\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wsint64\fR(\fBNumber[2]\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wfloat\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wdouble\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.SH DESCRIPTION -.sp -.LP -The argument \fIbuf\fR refers to a valid buffer (from calling new Buffer()). The -argument \fIendian\fR is either the string 'big' or 'little' and controls -whether the data in the buffer is interpreted as big or little endian. The argument -\fIoffset\fR indicates the starting index into the buffer to read or write. All -functions ensure that starting at \fIoffset\fR does not overflow the end of the -buffer. The argument \fIvalue\fR is a Number that is the valid type for the -specific function. All functions that take \fIvalue\fR as an argument, verify -that the passed value is valid. - -.SS "\fBruint8()\fR, \fBruint16()\fR, \fBruint32()\fR" -.sp -.LP -The \fBruint8()\fR, \fBruint16()\fR, and \fBruint32()\fR functions read an 8, -16, and 32-bit unsigned value from \fIbuf\fR and return it. The value read is -influenced by the values of \fIoffset\fR and \fRendian\fI. - - -.SS "\fBrsint8()\fR, \fBrsint16()\fR, \fBrsint32()\fR" -.sp -.LP -The \fBruint8()\fR, \fBruint16()\fR, and \fBruint32()\fR functions work just as -\fBruint8()\fR, \fBruint16()\fR, and \fBruint32()\fR, except they return signed -integers. - -.SS "\fBruint64()\fR, \fBrsint64()\fR" -.sp -.LP -The \fBruint64()\fR and \fBrsint64()\fR functions read unsigned and signed 64 -bit integers respectively from \fBbuf\fR. Due to the limitations of ECMAScript's -\fBNumber\fR type, they cannot be stored as one value without a loss of -precision. Instead of returning the values as a single \fBNumber\fR, the -functions return an array of two numbers. The first entry always contains the -upper 32-bits and the second value contains the lower 32-bits. The lossy -transformation into a number would be \fIres[0]*Math.pow(2,32)+res[1]\fR. -Note that, unless an entry is zero, both array entries are guaranteed to have -the same sign. - -.SS "\fBwuint8()\fR, \fBwuint16()\fR, \fBwuint32()\fR" -.sp -.LP -The functions \fBwuint8()\fR, \fBwuint16()\fR, and \fBwuint32()\fR modify the -contents of \fBbuf\fR by writing an 8, 16, and 32-bit unsigned integer -respectively to \fBbuf\fR. It is illegal to pass a number that is not an integer -within the domain of the integer size, for example, for \fBwuint8()\fR the valid -range is \fB[0, 255]\fR. The value will be written in either big or little -endian format based upon the value of \fBendian\fR. - - -.SS "\fBwsint8()\fR, \fBwsint16()\fR, \fBwsint32()\fR" -.sp -.LP -The functions \fBwsint8()\fR, \fBwsint16()\fR, and \fBwsint32()\fR function -identically to the functions \fBwuint8()\fR, \fBwuint16()\fR, and -\fBwuint32()\fR except that they the valid domain for \fBvalue\fR is that of a -signed number instead of an unsigned number. For example the \fBwsint8()\fR has -a domain of \fB[-128, 127]\fR. - -.SS "\fBwuint64()\fR, \fBwsint64()\fR" -.sp -.LP -The functions \fBwuint64()\fR and \fBswint64()\fR write out 64-bit unsigned and -signed integers to \fBbuf\fR. The \fBvalue\fR argument must be in the same -format as described in \fBruint64()\fR and \fBrsint64()\fR. - -.SS "\fBrfloat()\fR, \fBrdouble()\fR" -.sp -.LP -The functions "\fBrfloat()\fR and \fBrdouble()\fR" work like the other read -functions, except that they read a single precision and double precision -IEEE-754 floating point value instead. - -.SS "\fBwfloat()\fR, \fBwdouble()\fR" -.sp -.LP -The functions "\fBrfloat()\fR and \fBrdouble()\fR" work like the other write -functions, except that the domain for a float is that of a single precision 4 -byte value. The domain for a double is any \fBNumber\fR in ECMAScript, which is -defined to be represented by a double. - -.SH ATTRIBUTES -.sp -.LP -See \fBattributes\fR(5) for descriptions of the following attributes: -.sp - -.sp -.TS -box; -c | c -l | l . -ATTRIBUTE TYPE ATTRIBUTE VALUE -_ -Interface Stability Committed -_ -MT-Level See below. -_ -Standard Not standardized. -.TE - -.sp -.LP - -All functions are MT-safe in so far as there aren't shared memory MT concerns in -most node programs. If one where to concoct such an environment, these functions -wouldn't be MT-safe. - -.SH SEE ALSO -.sp -.LP diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json deleted file mode 100644 index 90d917e2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "ctype", - "version": "0.5.2", - "description": "read and write binary structures and data types", - "homepage": "https://github.com/rmustacc/node-ctype", - "author": { - "name": "Robert Mustacchi", - "email": "rm@fingolfin.org" - }, - "engines": { - "node": ">= 0.4" - }, - "main": "ctype.js", - "readme": "Node-CType is a way to read and write binary data in structured and easy to use\nformat. Its name comes from the C header file.\n\nTo get started, simply clone the repository or use npm to install it. Once it is\nthere, simply require it.\n\ngit clone git://github.com/rmustacc/node-ctype\nnpm install ctype\nvar mod_ctype = require('ctype')\n\n\nThere are two APIs that you can use, depending on what abstraction you'd like.\nThe low level API let's you read and write individual integers and floats from\nbuffers. The higher level API let's you read and write structures of these. To\nillustrate this, let's looks look at how we would read and write a binary\nencoded x,y point.\n\nIn C we would define this structure as follows:\n\ntypedef struct point {\n\tuint16_t\tp_x;\n\tuint16_t\tp_y;\n} point_t;\n\nTo read a binary encoded point from a Buffer, we first need to create a CType\nparser (where we specify the endian and other options) and add the typedef.\n\nvar parser = new mod_ctype.Parser({ endian: 'big' });\nparser.typedef('point_t', [\n\t{ x: { type: 'uint16_t' } },\n\t{ y: { type: 'uint16_t' } }\n]);\n\nFrom here, given a buffer buf and an offset into it, we can read a point.\n\nvar out = parser.readData([ { point: { type: 'point_t' } } ], buffer, 0);\nconsole.log(out);\n{ point: { x: 23, y: 42 } }\n\nAnother way to get the same information would be to use the low level methods.\nNote that these require you to manually deal with the offset. Here's how we'd\nget the same values of x and y from the buffer.\n\nvar x = mod_ctype.ruint16(buf, 'big', 0);\nvar y = mod_ctype.ruint16(buf, 'big', 2);\nconsole.log(x + ', ' + y);\n23, 42\n\nThe true power of this API comes from the ability to define and nest typedefs,\njust as you would in C. By default, the following types are defined by default.\nNote that they return a Number, unless indicated otherwise.\n\n * int8_t\n * int16_t\n * int32_t\n * int64_t (returns an array where val[0] << 32 + val[1] would be the value)\n * uint8_t\n * uint16_t\n * uint32_t\n * uint64_t (returns an array where val[0] << 32 + val[1] would be the value)\n * float\n * double\n * char (either returns a buffer with that character or a uint8_t)\n * char[] (returns an object with the buffer and the number of characters read which is either the total amount requested or until the first 0)\n\n\nctf2json integration:\n\nNode-CType supports consuming the output of ctf2json. Once you read in a JSON file,\nall you have to do to add all the definitions it contains is:\n\nvar data, parser;\ndata = JSON.parse(parsedJSONData);\nparser = mod_ctype.parseCTF(data, { endian: 'big' });\n\nFor more documentation, see the file README.old. Full documentation is in the\nprocess of being rewritten as a series of manual pages which will be available\nin the repository and online for viewing.\n\nTo read the ctio manual page simple run, from the root of the workspace:\n\nman -Mman -s 3ctype ctio\n", - "readmeFilename": "README", - "_id": "ctype@0.5.2", - "dist": { - "shasum": "c2ddce3ef5e24701c870d46f42c33b116c8f67da" - }, - "_from": "ctype@0.5.2", - "_resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf deleted file mode 100755 index 845f367a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf +++ /dev/null @@ -1,129 +0,0 @@ -# -# Configuration File for JavaScript Lint 0.3.0 -# Developed by Matthias Miller (http://www.JavaScriptLint.com) -# -# This configuration file can be used to lint a collection of scripts, or to enable -# or disable warnings for scripts that are linted via the command line. -# - -### Warnings -# Enable or disable warnings based on requirements. -# Use "+WarningName" to display or "-WarningName" to suppress. -# -+no_return_value # function {0} does not always return a value -+duplicate_formal # duplicate formal argument {0} -+equal_as_assign # test for equality (==) mistyped as assignment (=)?{0} -+var_hides_arg # variable {0} hides argument -+redeclared_var # redeclaration of {0} {1} -+anon_no_return_value # anonymous function does not always return a value -+missing_semicolon # missing semicolon -+meaningless_block # meaningless block; curly braces have no impact -+comma_separated_stmts # multiple statements separated by commas (use semicolons?) -+unreachable_code # unreachable code -+missing_break # missing break statement -+missing_break_for_last_case # missing break statement for last case in switch -+comparison_type_conv # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==) --inc_dec_within_stmt # increment (++) and decrement (--) operators used as part of greater statement -+useless_void # use of the void type may be unnecessary (void is always undefined) --useless_quotes # quotation marks are unnecessary -+multiple_plus_minus # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs -+use_of_label # use of label --block_without_braces # block statement without curly braces -+leading_decimal_point # leading decimal point may indicate a number or an object member -+trailing_decimal_point # trailing decimal point may indicate a number or an object member --octal_number # leading zeros make an octal number -+nested_comment # nested comment -+misplaced_regex # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma -+ambiguous_newline # unexpected end of line; it is ambiguous whether these lines are part of the same statement -+empty_statement # empty statement or extra semicolon --missing_option_explicit # the "option explicit" control comment is missing -+partial_option_explicit # the "option explicit" control comment, if used, must be in the first script tag -+dup_option_explicit # duplicate "option explicit" control comment -+useless_assign # useless assignment -+ambiguous_nested_stmt # block statements containing block statements should use curly braces to resolve ambiguity -+ambiguous_else_stmt # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent) -+missing_default_case # missing default case in switch statement -+duplicate_case_in_switch # duplicate case in switch statements -+default_not_at_end # the default case is not at the end of the switch statement -+legacy_cc_not_understood # couldn't understand control comment using /*@keyword@*/ syntax -+jsl_cc_not_understood # couldn't understand control comment using /*jsl:keyword*/ syntax -+useless_comparison # useless comparison; comparing identical expressions -+with_statement # with statement hides undeclared variables; use temporary variable instead -+trailing_comma_in_array # extra comma is not recommended in array initializers -+assign_to_function_call # assignment to a function call -+parseint_missing_radix # parseInt missing radix parameter --unreferenced_argument # argument declared but never referenced: {name} - -### Output format -# Customize the format of the error message. -# __FILE__ indicates current file path -# __FILENAME__ indicates current file name -# __LINE__ indicates current line -# __ERROR__ indicates error message -# -# Visual Studio syntax (default): -+output-format __FILE__(__LINE__): __ERROR__ -# Alternative syntax: -#+output-format __FILE__:__LINE__: __ERROR__ - - -### Context -# Show the in-line position of the error. -# Use "+context" to display or "-context" to suppress. -# -+context - - -### Semicolons -# By default, assignments of an anonymous function to a variable or -# property (such as a function prototype) must be followed by a semicolon. -# -#+lambda_assign_requires_semicolon # deprecated setting - - -### Control Comments -# Both JavaScript Lint and the JScript interpreter confuse each other with the syntax for -# the /*@keyword@*/ control comments and JScript conditional comments. (The latter is -# enabled in JScript with @cc_on@). The /*jsl:keyword*/ syntax is preferred for this reason, -# although legacy control comments are enabled by default for backward compatibility. -# -+legacy_control_comments - - -### JScript Function Extensions -# JScript allows member functions to be defined like this: -# function MyObj() { /*constructor*/ } -# function MyObj.prototype.go() { /*member function*/ } -# -# It also allows events to be attached like this: -# function window::onload() { /*init page*/ } -# -# This is a Microsoft-only JavaScript extension. Enable this setting to allow them. -# -#-jscript_function_extensions # deprecated setting - - -### Defining identifiers -# By default, "option explicit" is enabled on a per-file basis. -# To enable this for all files, use "+always_use_option_explicit" --always_use_option_explicit - -# Define certain identifiers of which the lint is not aware. -# (Use this in conjunction with the "undeclared identifier" warning.) -# -# Common uses for webpages might be: -#+define window -#+define document -+define require -+define exports -+define console -+define Buffer -+define JSON - -### Files -# Specify which files to lint -# Use "+recurse" to enable recursion (disabled by default). -# To add a set of files, use "+process FileName", "+process Folder\Path\*.js", -# or "+process Folder\Path\*.htm". -# -#+process jsl-test.js diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle deleted file mode 100755 index 96c72b6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle +++ /dev/null @@ -1,839 +0,0 @@ -#!/usr/bin/env perl -# -# CDDL HEADER START -# -# The contents of this file are subject to the terms of the -# Common Development and Distribution License (the "License"). -# You may not use this file except in compliance with the License. -# -# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE -# or http://www.opensolaris.org/os/licensing. -# See the License for the specific language governing permissions -# and limitations under the License. -# -# When distributing Covered Code, include this CDDL HEADER in each -# file and include the License file at usr/src/OPENSOLARIS.LICENSE. -# If applicable, add the following below this CDDL HEADER, with the -# fields enclosed by brackets "[]" replaced with your own identifying -# information: Portions Copyright [yyyy] [name of copyright owner] -# -# CDDL HEADER END -# -# -# Copyright 2008 Sun Microsystems, Inc. All rights reserved. -# Use is subject to license terms. -# -# Copyright 2011 Joyent, Inc. All rights reserved. -# -# jsstyle - check for some common stylistic errors. -# -# jsstyle is a sort of "lint" for Javascript coding style. This tool is -# derived from the cstyle tool, used to check for the style used in the -# Solaris kernel, sometimes known as "Bill Joy Normal Form". -# -# There's a lot this can't check for, like proper indentation of code -# blocks. There's also a lot more this could check for. -# -# A note to the non perl literate: -# -# perl regular expressions are pretty much like egrep -# regular expressions, with the following special symbols -# -# \s any space character -# \S any non-space character -# \w any "word" character [a-zA-Z0-9_] -# \W any non-word character -# \d a digit [0-9] -# \D a non-digit -# \b word boundary (between \w and \W) -# \B non-word boundary -# - -require 5.0; -use IO::File; -use Getopt::Std; -use strict; - -my $usage = -"usage: jsstyle [-chvC] [-o constructs] file ... - -c check continuation indentation inside functions - -h perform heuristic checks that are sometimes wrong - -v verbose - -C don't check anything in header block comments - -o constructs - allow a comma-seperated list of optional constructs: - doxygen allow doxygen-style block comments (/** /*!) - splint allow splint-style lint comments (/*@ ... @*/) -"; - -my %opts; - -if (!getopts("cho:vC", \%opts)) { - print $usage; - exit 2; -} - -my $check_continuation = $opts{'c'}; -my $heuristic = $opts{'h'}; -my $verbose = $opts{'v'}; -my $ignore_hdr_comment = $opts{'C'}; - -my $doxygen_comments = 0; -my $splint_comments = 0; - -if (defined($opts{'o'})) { - for my $x (split /,/, $opts{'o'}) { - if ($x eq "doxygen") { - $doxygen_comments = 1; - } elsif ($x eq "splint") { - $splint_comments = 1; - } else { - print "jsstyle: unrecognized construct \"$x\"\n"; - print $usage; - exit 2; - } - } -} - -my ($filename, $line, $prev); # shared globals - -my $fmt; -my $hdr_comment_start; - -if ($verbose) { - $fmt = "%s: %d: %s\n%s\n"; -} else { - $fmt = "%s: %d: %s\n"; -} - -if ($doxygen_comments) { - # doxygen comments look like "/*!" or "/**"; allow them. - $hdr_comment_start = qr/^\s*\/\*[\!\*]?$/; -} else { - $hdr_comment_start = qr/^\s*\/\*$/; -} - -# Note, following must be in single quotes so that \s and \w work right. -my $lint_re = qr/\/\*(?: - jsl:\w+?|ARGSUSED[0-9]*|NOTREACHED|LINTLIBRARY|VARARGS[0-9]*| - CONSTCOND|CONSTANTCOND|CONSTANTCONDITION|EMPTY| - FALLTHRU|FALLTHROUGH|LINTED.*?|PRINTFLIKE[0-9]*| - PROTOLIB[0-9]*|SCANFLIKE[0-9]*|JSSTYLED.*? - )\*\//x; - -my $splint_re = qr/\/\*@.*?@\*\//x; - -my $err_stat = 0; # exit status - -if ($#ARGV >= 0) { - foreach my $arg (@ARGV) { - my $fh = new IO::File $arg, "r"; - if (!defined($fh)) { - printf "%s: cannot open\n", $arg; - } else { - &jsstyle($arg, $fh); - close $fh; - } - } -} else { - &jsstyle("<stdin>", *STDIN); -} -exit $err_stat; - -my $no_errs = 0; # set for JSSTYLED-protected lines - -sub err($) { - my ($error) = @_; - unless ($no_errs) { - printf $fmt, $filename, $., $error, $line; - $err_stat = 1; - } -} - -sub err_prefix($$) { - my ($prevline, $error) = @_; - my $out = $prevline."\n".$line; - unless ($no_errs) { - printf $fmt, $filename, $., $error, $out; - $err_stat = 1; - } -} - -sub err_prev($) { - my ($error) = @_; - unless ($no_errs) { - printf $fmt, $filename, $. - 1, $error, $prev; - $err_stat = 1; - } -} - -sub jsstyle($$) { - -my ($fn, $filehandle) = @_; -$filename = $fn; # share it globally - -my $in_cpp = 0; -my $next_in_cpp = 0; - -my $in_comment = 0; -my $in_header_comment = 0; -my $comment_done = 0; -my $in_function = 0; -my $in_function_header = 0; -my $in_declaration = 0; -my $note_level = 0; -my $nextok = 0; -my $nocheck = 0; - -my $in_string = 0; - -my ($okmsg, $comment_prefix); - -$line = ''; -$prev = ''; -reset_indent(); - -line: while (<$filehandle>) { - s/\r?\n$//; # strip return and newline - - # save the original line, then remove all text from within - # double or single quotes, we do not want to check such text. - - $line = $_; - - # - # C allows strings to be continued with a backslash at the end of - # the line. We translate that into a quoted string on the previous - # line followed by an initial quote on the next line. - # - # (we assume that no-one will use backslash-continuation with character - # constants) - # - $_ = '"' . $_ if ($in_string && !$nocheck && !$in_comment); - - # - # normal strings and characters - # - s/'([^\\']|\\.)*'/\'\'/g; - s/"([^\\"]|\\.)*"/\"\"/g; - - # - # detect string continuation - # - if ($nocheck || $in_comment) { - $in_string = 0; - } else { - # - # Now that all full strings are replaced with "", we check - # for unfinished strings continuing onto the next line. - # - $in_string = - (s/([^"](?:"")*)"([^\\"]|\\.)*\\$/$1""/ || - s/^("")*"([^\\"]|\\.)*\\$/""/); - } - - # - # figure out if we are in a cpp directive - # - $in_cpp = $next_in_cpp || /^\s*#/; # continued or started - $next_in_cpp = $in_cpp && /\\$/; # only if continued - - # strip off trailing backslashes, which appear in long macros - s/\s*\\$//; - - # an /* END JSSTYLED */ comment ends a no-check block. - if ($nocheck) { - if (/\/\* *END *JSSTYLED *\*\//) { - $nocheck = 0; - } else { - reset_indent(); - next line; - } - } - - # a /*JSSTYLED*/ comment indicates that the next line is ok. - if ($nextok) { - if ($okmsg) { - err($okmsg); - } - $nextok = 0; - $okmsg = 0; - if (/\/\* *JSSTYLED.*\*\//) { - /^.*\/\* *JSSTYLED *(.*) *\*\/.*$/; - $okmsg = $1; - $nextok = 1; - } - $no_errs = 1; - } elsif ($no_errs) { - $no_errs = 0; - } - - # check length of line. - # first, a quick check to see if there is any chance of being too long. - if (($line =~ tr/\t/\t/) * 7 + length($line) > 80) { - # yes, there is a chance. - # replace tabs with spaces and check again. - my $eline = $line; - 1 while $eline =~ - s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e; - if (length($eline) > 80) { - err("line > 80 characters"); - } - } - - # ignore NOTE(...) annotations (assumes NOTE is on lines by itself). - if ($note_level || /\b_?NOTE\s*\(/) { # if in NOTE or this is NOTE - s/[^()]//g; # eliminate all non-parens - $note_level += s/\(//g - length; # update paren nest level - next; - } - - # a /* BEGIN JSSTYLED */ comment starts a no-check block. - if (/\/\* *BEGIN *JSSTYLED *\*\//) { - $nocheck = 1; - } - - # a /*JSSTYLED*/ comment indicates that the next line is ok. - if (/\/\* *JSSTYLED.*\*\//) { - /^.*\/\* *JSSTYLED *(.*) *\*\/.*$/; - $okmsg = $1; - $nextok = 1; - } - if (/\/\/ *JSSTYLED/) { - /^.*\/\/ *JSSTYLED *(.*)$/; - $okmsg = $1; - $nextok = 1; - } - - # universal checks; apply to everything - if (/\t +\t/) { - err("spaces between tabs"); - } - if (/ \t+ /) { - err("tabs between spaces"); - } - if (/\s$/) { - err("space or tab at end of line"); - } - if (/[^ \t(]\/\*/ && !/\w\(\/\*.*\*\/\);/) { - err("comment preceded by non-blank"); - } - - # is this the beginning or ending of a function? - # (not if "struct foo\n{\n") - if (/^{$/ && $prev =~ /\)\s*(const\s*)?(\/\*.*\*\/\s*)?\\?$/) { - $in_function = 1; - $in_declaration = 1; - $in_function_header = 0; - $prev = $line; - next line; - } - if (/^}\s*(\/\*.*\*\/\s*)*$/) { - if ($prev =~ /^\s*return\s*;/) { - err_prev("unneeded return at end of function"); - } - $in_function = 0; - reset_indent(); # we don't check between functions - $prev = $line; - next line; - } - if (/^\w*\($/) { - $in_function_header = 1; - } - - # a blank line terminates the declarations within a function. - # XXX - but still a problem in sub-blocks. - if ($in_declaration && /^$/) { - $in_declaration = 0; - } - - if ($comment_done) { - $in_comment = 0; - $in_header_comment = 0; - $comment_done = 0; - } - # does this looks like the start of a block comment? - if (/$hdr_comment_start/) { - if (!/^\t*\/\*/) { - err("block comment not indented by tabs"); - } - $in_comment = 1; - /^(\s*)\//; - $comment_prefix = $1; - if ($comment_prefix eq "") { - $in_header_comment = 1; - } - $prev = $line; - next line; - } - # are we still in the block comment? - if ($in_comment) { - if (/^$comment_prefix \*\/$/) { - $comment_done = 1; - } elsif (/\*\//) { - $comment_done = 1; - err("improper block comment close") - unless ($ignore_hdr_comment && $in_header_comment); - } elsif (!/^$comment_prefix \*[ \t]/ && - !/^$comment_prefix \*$/) { - err("improper block comment") - unless ($ignore_hdr_comment && $in_header_comment); - } - } - - if ($in_header_comment && $ignore_hdr_comment) { - $prev = $line; - next line; - } - - # check for errors that might occur in comments and in code. - - # allow spaces to be used to draw pictures in header comments. - #if (/[^ ] / && !/".* .*"/ && !$in_header_comment) { - # err("spaces instead of tabs"); - #} - #if (/^ / && !/^ \*[ \t\/]/ && !/^ \*$/ && - # (!/^ \w/ || $in_function != 0)) { - # err("indent by spaces instead of tabs"); - #} - if (/^ {2,}/ && !/^ [^ ]/) { - err("indent by spaces instead of tabs"); - } - if (/^\t+ [^ \t\*]/ || /^\t+ \S/ || /^\t+ \S/) { - err("continuation line not indented by 4 spaces"); - } - - if (/^\s*\/\*./ && !/^\s*\/\*.*\*\// && !/$hdr_comment_start/) { - err("improper first line of block comment"); - } - - if ($in_comment) { # still in comment, don't do further checks - $prev = $line; - next line; - } - - if ((/[^(]\/\*\S/ || /^\/\*\S/) && - !(/$lint_re/ || ($splint_comments && /$splint_re/))) { - err("missing blank after open comment"); - } - if (/\S\*\/[^)]|\S\*\/$/ && - !(/$lint_re/ || ($splint_comments && /$splint_re/))) { - err("missing blank before close comment"); - } - if (/\/\/\S/) { # C++ comments - err("missing blank after start comment"); - } - # check for unterminated single line comments, but allow them when - # they are used to comment out the argument list of a function - # declaration. - if (/\S.*\/\*/ && !/\S.*\/\*.*\*\// && !/\(\/\*/) { - err("unterminated single line comment"); - } - - if (/^(#else|#endif|#include)(.*)$/) { - $prev = $line; - next line; - } - - # - # delete any comments and check everything else. Note that - # ".*?" is a non-greedy match, so that we don't get confused by - # multiple comments on the same line. - # - s/\/\*.*?\*\///g; - s/\/\/.*$//; # C++ comments - - # delete any trailing whitespace; we have already checked for that. - s/\s*$//; - - # following checks do not apply to text in comments. - if (/"/) { - err("literal string using double-quote instead of single"); - } - - if (/[^=!<>\s][!<>=]=/ || /[^<>!=][!<>=]==?[^\s,=]/ || - (/[^->]>[^,=>\s]/ && !/[^->]>$/) || - (/[^<]<[^,=<\s]/ && !/[^<]<$/) || - /[^<\s]<[^<]/ || /[^->\s]>[^>]/) { - err("missing space around relational operator"); - } - if (/\S>>=/ || /\S<<=/ || />>=\S/ || /<<=\S/ || /\S[-+*\/&|^%]=/ || - (/[^-+*\/&|^%!<>=\s]=[^=]/ && !/[^-+*\/&|^%!<>=\s]=$/) || - (/[^!<>=]=[^=\s]/ && !/[^!<>=]=$/)) { - # XXX - should only check this for C++ code - # XXX - there are probably other forms that should be allowed - if (!/\soperator=/) { - err("missing space around assignment operator"); - } - } - if (/[,;]\S/ && !/\bfor \(;;\)/) { - err("comma or semicolon followed by non-blank"); - } - # allow "for" statements to have empty "while" clauses - if (/\s[,;]/ && !/^[\t]+;$/ && !/^\s*for \([^;]*; ;[^;]*\)/) { - err("comma or semicolon preceded by blank"); - } - if (/^\s*(&&|\|\|)/) { - err("improper boolean continuation"); - } - if (/\S *(&&|\|\|)/ || /(&&|\|\|) *\S/) { - err("more than one space around boolean operator"); - } - if (/\b(delete|typeof|instanceOf|throw|with|catch|new|function|in|for|if|while|switch|return|case)\(/) { - err("missing space between keyword and paren"); - } - if (/(\b(catch|for|if|with|while|switch|return)\b.*){2,}/) { - # multiple "case" and "sizeof" allowed - err("more than one keyword on line"); - } - if (/\b(delete|typeof|instanceOf|with|throw|catch|new|function|in|for|if|while|switch|return|case)\s\s+\(/ && - !/^#if\s+\(/) { - err("extra space between keyword and paren"); - } - # try to detect "func (x)" but not "if (x)" or - # "#define foo (x)" or "int (*func)();" - if (/\w\s\(/) { - my $s = $_; - # strip off all keywords on the line - s/\b(delete|typeof|instanceOf|throw|with|catch|new|function|in|for|if|while|switch|return|case)\s\(/XXX(/g; - s/#elif\s\(/XXX(/g; - s/^#define\s+\w+\s+\(/XXX(/; - # do not match things like "void (*f)();" - # or "typedef void (func_t)();" - s/\w\s\(+\*/XXX(*/g; - s/\b(void)\s+\(+/XXX(/og; - if (/\w\s\(/) { - err("extra space between function name and left paren"); - } - $_ = $s; - } - - if (/^\s*return\W[^;]*;/ && !/^\s*return\s*\(.*\);/) { - err("unparenthesized return expression"); - } - if (/\btypeof\b/ && !/\btypeof\s*\(.*\)/) { - err("unparenthesized typeof expression"); - } - if (/\(\s/) { - err("whitespace after left paren"); - } - # allow "for" statements to have empty "continue" clauses - if (/\s\)/ && !/^\s*for \([^;]*;[^;]*; \)/) { - err("whitespace before right paren"); - } - if (/^\s*\(void\)[^ ]/) { - err("missing space after (void) cast"); - } - if (/\S{/ && !/({|\(){/) { - err("missing space before left brace"); - } - if ($in_function && /^\s+{/ && - ($prev =~ /\)\s*$/ || $prev =~ /\bstruct\s+\w+$/)) { - err("left brace starting a line"); - } - if (/}(else|while)/) { - err("missing space after right brace"); - } - if (/}\s\s+(else|while)/) { - err("extra space after right brace"); - } - if (/^\s+#/) { - err("preprocessor statement not in column 1"); - } - if (/^#\s/) { - err("blank after preprocessor #"); - } - - # - # We completely ignore, for purposes of indentation: - # * lines outside of functions - # * preprocessor lines - # - if ($check_continuation && $in_function && !$in_cpp) { - process_indent($_); - } - - if ($heuristic) { - # cannot check this everywhere due to "struct {\n...\n} foo;" - if ($in_function && !$in_declaration && - /}./ && !/}\s+=/ && !/{.*}[;,]$/ && !/}(\s|)*$/ && - !/} (else|while)/ && !/}}/) { - err("possible bad text following right brace"); - } - # cannot check this because sub-blocks in - # the middle of code are ok - if ($in_function && /^\s+{/) { - err("possible left brace starting a line"); - } - } - if (/^\s*else\W/) { - if ($prev =~ /^\s*}$/) { - err_prefix($prev, - "else and right brace should be on same line"); - } - } - $prev = $line; -} - -if ($prev eq "") { - err("last line in file is blank"); -} - -} - -# -# Continuation-line checking -# -# The rest of this file contains the code for the continuation checking -# engine. It's a pretty simple state machine which tracks the expression -# depth (unmatched '('s and '['s). -# -# Keep in mind that the argument to process_indent() has already been heavily -# processed; all comments have been replaced by control-A, and the contents of -# strings and character constants have been elided. -# - -my $cont_in; # currently inside of a continuation -my $cont_off; # skipping an initializer or definition -my $cont_noerr; # suppress cascading errors -my $cont_start; # the line being continued -my $cont_base; # the base indentation -my $cont_first; # this is the first line of a statement -my $cont_multiseg; # this continuation has multiple segments - -my $cont_special; # this is a C statement (if, for, etc.) -my $cont_macro; # this is a macro -my $cont_case; # this is a multi-line case - -my @cont_paren; # the stack of unmatched ( and [s we've seen - -sub -reset_indent() -{ - $cont_in = 0; - $cont_off = 0; -} - -sub -delabel($) -{ - # - # replace labels with tabs. Note that there may be multiple - # labels on a line. - # - local $_ = $_[0]; - - while (/^(\t*)( *(?:(?:\w+\s*)|(?:case\b[^:]*)): *)(.*)$/) { - my ($pre_tabs, $label, $rest) = ($1, $2, $3); - $_ = $pre_tabs; - while ($label =~ s/^([^\t]*)(\t+)//) { - $_ .= "\t" x (length($2) + length($1) / 8); - } - $_ .= ("\t" x (length($label) / 8)).$rest; - } - - return ($_); -} - -sub -process_indent($) -{ - require strict; - local $_ = $_[0]; # preserve the global $_ - - s///g; # No comments - s/\s+$//; # Strip trailing whitespace - - return if (/^$/); # skip empty lines - - # regexps used below; keywords taking (), macros, and continued cases - my $special = '(?:(?:\}\s*)?else\s+)?(?:if|for|while|switch)\b'; - my $macro = '[A-Z_][A-Z_0-9]*\('; - my $case = 'case\b[^:]*$'; - - # skip over enumerations, array definitions, initializers, etc. - if ($cont_off <= 0 && !/^\s*$special/ && - (/(?:(?:\b(?:enum|struct|union)\s*[^\{]*)|(?:\s+=\s*)){/ || - (/^\s*{/ && $prev =~ /=\s*(?:\/\*.*\*\/\s*)*$/))) { - $cont_in = 0; - $cont_off = tr/{/{/ - tr/}/}/; - return; - } - if ($cont_off) { - $cont_off += tr/{/{/ - tr/}/}/; - return; - } - - if (!$cont_in) { - $cont_start = $line; - - if (/^\t* /) { - err("non-continuation indented 4 spaces"); - $cont_noerr = 1; # stop reporting - } - $_ = delabel($_); # replace labels with tabs - - # check if the statement is complete - return if (/^\s*\}?$/); - return if (/^\s*\}?\s*else\s*\{?$/); - return if (/^\s*do\s*\{?$/); - return if (/{$/); - return if (/}[,;]?$/); - - # Allow macros on their own lines - return if (/^\s*[A-Z_][A-Z_0-9]*$/); - - # cases we don't deal with, generally non-kosher - if (/{/) { - err("stuff after {"); - return; - } - - # Get the base line, and set up the state machine - /^(\t*)/; - $cont_base = $1; - $cont_in = 1; - @cont_paren = (); - $cont_first = 1; - $cont_multiseg = 0; - - # certain things need special processing - $cont_special = /^\s*$special/? 1 : 0; - $cont_macro = /^\s*$macro/? 1 : 0; - $cont_case = /^\s*$case/? 1 : 0; - } else { - $cont_first = 0; - - # Strings may be pulled back to an earlier (half-)tabstop - unless ($cont_noerr || /^$cont_base / || - (/^\t*(?: )?(?:gettext\()?\"/ && !/^$cont_base\t/)) { - err_prefix($cont_start, - "continuation should be indented 4 spaces"); - } - } - - my $rest = $_; # keeps the remainder of the line - - # - # The split matches 0 characters, so that each 'special' character - # is processed separately. Parens and brackets are pushed and - # popped off the @cont_paren stack. For normal processing, we wait - # until a ; or { terminates the statement. "special" processing - # (if/for/while/switch) is allowed to stop when the stack empties, - # as is macro processing. Case statements are terminated with a : - # and an empty paren stack. - # - foreach $_ (split /[^\(\)\[\]\{\}\;\:]*/) { - next if (length($_) == 0); - - # rest contains the remainder of the line - my $rxp = "[^\Q$_\E]*\Q$_\E"; - $rest =~ s/^$rxp//; - - if (/\(/ || /\[/) { - push @cont_paren, $_; - } elsif (/\)/ || /\]/) { - my $cur = $_; - tr/\)\]/\(\[/; - - my $old = (pop @cont_paren); - if (!defined($old)) { - err("unexpected '$cur'"); - $cont_in = 0; - last; - } elsif ($old ne $_) { - err("'$cur' mismatched with '$old'"); - $cont_in = 0; - last; - } - - # - # If the stack is now empty, do special processing - # for if/for/while/switch and macro statements. - # - next if (@cont_paren != 0); - if ($cont_special) { - if ($rest =~ /^\s*{?$/) { - $cont_in = 0; - last; - } - if ($rest =~ /^\s*;$/) { - err("empty if/for/while body ". - "not on its own line"); - $cont_in = 0; - last; - } - if (!$cont_first && $cont_multiseg == 1) { - err_prefix($cont_start, - "multiple statements continued ". - "over multiple lines"); - $cont_multiseg = 2; - } elsif ($cont_multiseg == 0) { - $cont_multiseg = 1; - } - # We've finished this section, start - # processing the next. - goto section_ended; - } - if ($cont_macro) { - if ($rest =~ /^$/) { - $cont_in = 0; - last; - } - } - } elsif (/\;/) { - if ($cont_case) { - err("unexpected ;"); - } elsif (!$cont_special) { - err("unexpected ;") if (@cont_paren != 0); - if (!$cont_first && $cont_multiseg == 1) { - err_prefix($cont_start, - "multiple statements continued ". - "over multiple lines"); - $cont_multiseg = 2; - } elsif ($cont_multiseg == 0) { - $cont_multiseg = 1; - } - if ($rest =~ /^$/) { - $cont_in = 0; - last; - } - if ($rest =~ /^\s*special/) { - err("if/for/while/switch not started ". - "on its own line"); - } - goto section_ended; - } - } elsif (/\{/) { - err("{ while in parens/brackets") if (@cont_paren != 0); - err("stuff after {") if ($rest =~ /[^\s}]/); - $cont_in = 0; - last; - } elsif (/\}/) { - err("} while in parens/brackets") if (@cont_paren != 0); - if (!$cont_special && $rest !~ /^\s*(while|else)\b/) { - if ($rest =~ /^$/) { - err("unexpected }"); - } else { - err("stuff after }"); - } - $cont_in = 0; - last; - } - } elsif (/\:/ && $cont_case && @cont_paren == 0) { - err("stuff after multi-line case") if ($rest !~ /$^/); - $cont_in = 0; - last; - } - next; -section_ended: - # End of a statement or if/while/for loop. Reset - # cont_special and cont_macro based on the rest of the - # line. - $cont_special = ($rest =~ /^\s*$special/)? 1 : 0; - $cont_macro = ($rest =~ /^\s*$macro/)? 1 : 0; - $cont_case = 0; - next; - } - $cont_noerr = 0 if (!$cont_in); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json deleted file mode 100644 index 29d7bd89..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json +++ /dev/null @@ -1,13 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316563626, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "float" ] - }, -"data": - [ - { "name": "float", "float": { "length": 4 } } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json deleted file mode 100644 index f9773a14..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json +++ /dev/null @@ -1,13 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316563631, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "int" ] - }, -"data": - [ - { "name": "int", "integer": { "length": 4, "signed": true } } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json deleted file mode 100644 index e0ee5e0d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json +++ /dev/null @@ -1,104 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316563573, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "psinfo_t" ] - }, -"data": - [ - { "name": "int", "integer": { "length": 4, "signed": true } }, - { "name": "char", "integer": { "length": 1, "signed": true } }, - { "name": "unsigned short", "integer": { "length": 2, "signed": false } }, - { "name": "long", "integer": { "length": 4, "signed": true } }, - { "name": "unsigned", "integer": { "length": 4, "signed": false } }, - { "name": "size_t", "typedef": "unsigned" }, - { "name": "unsigned long", "integer": { "length": 4, "signed": false } }, - { "name": "time_t", "typedef": "long" }, - { "name": "struct timespec", "struct": [ - { "name": "tv_sec", "type": "time_t" }, - { "name": "tv_nsec", "type": "long" } - ] }, - { "name": "zoneid_t", "typedef": "long" }, - { "name": "taskid_t", "typedef": "long" }, - { "name": "dev_t", "typedef": "unsigned long" }, - { "name": "uid_t", "typedef": "unsigned" }, - { "name": "gid_t", "typedef": "unsigned" }, - { "name": "timestruc_t", "typedef": "struct timespec" }, - { "name": "short", "integer": { "length": 2, "signed": true } }, - { "name": "projid_t", "typedef": "long" }, - { "name": "ushort_t", "typedef": "unsigned short" }, - { "name": "poolid_t", "typedef": "long" }, - { "name": "uintptr_t", "typedef": "unsigned" }, - { "name": "id_t", "typedef": "long" }, - { "name": "pid_t", "typedef": "long" }, - { "name": "processorid_t", "typedef": "int" }, - { "name": "psetid_t", "typedef": "int" }, - { "name": "struct lwpsinfo", "struct": [ - { "name": "pr_flag", "type": "int" }, - { "name": "pr_lwpid", "type": "id_t" }, - { "name": "pr_addr", "type": "uintptr_t" }, - { "name": "pr_wchan", "type": "uintptr_t" }, - { "name": "pr_stype", "type": "char" }, - { "name": "pr_state", "type": "char" }, - { "name": "pr_sname", "type": "char" }, - { "name": "pr_nice", "type": "char" }, - { "name": "pr_syscall", "type": "short" }, - { "name": "pr_oldpri", "type": "char" }, - { "name": "pr_cpu", "type": "char" }, - { "name": "pr_pri", "type": "int" }, - { "name": "pr_pctcpu", "type": "ushort_t" }, - { "name": "pr_pad", "type": "ushort_t" }, - { "name": "pr_start", "type": "timestruc_t" }, - { "name": "pr_time", "type": "timestruc_t" }, - { "name": "pr_clname", "type": "char [8]" }, - { "name": "pr_name", "type": "char [16]" }, - { "name": "pr_onpro", "type": "processorid_t" }, - { "name": "pr_bindpro", "type": "processorid_t" }, - { "name": "pr_bindpset", "type": "psetid_t" }, - { "name": "pr_lgrp", "type": "int" }, - { "name": "pr_filler", "type": "int [4]" } - ] }, - { "name": "lwpsinfo_t", "typedef": "struct lwpsinfo" }, - { "name": "struct psinfo", "struct": [ - { "name": "pr_flag", "type": "int" }, - { "name": "pr_nlwp", "type": "int" }, - { "name": "pr_pid", "type": "pid_t" }, - { "name": "pr_ppid", "type": "pid_t" }, - { "name": "pr_pgid", "type": "pid_t" }, - { "name": "pr_sid", "type": "pid_t" }, - { "name": "pr_uid", "type": "uid_t" }, - { "name": "pr_euid", "type": "uid_t" }, - { "name": "pr_gid", "type": "gid_t" }, - { "name": "pr_egid", "type": "gid_t" }, - { "name": "pr_addr", "type": "uintptr_t" }, - { "name": "pr_size", "type": "size_t" }, - { "name": "pr_rssize", "type": "size_t" }, - { "name": "pr_pad1", "type": "size_t" }, - { "name": "pr_ttydev", "type": "dev_t" }, - { "name": "pr_pctcpu", "type": "ushort_t" }, - { "name": "pr_pctmem", "type": "ushort_t" }, - { "name": "pr_start", "type": "timestruc_t" }, - { "name": "pr_time", "type": "timestruc_t" }, - { "name": "pr_ctime", "type": "timestruc_t" }, - { "name": "pr_fname", "type": "char [16]" }, - { "name": "pr_psargs", "type": "char [80]" }, - { "name": "pr_wstat", "type": "int" }, - { "name": "pr_argc", "type": "int" }, - { "name": "pr_argv", "type": "uintptr_t" }, - { "name": "pr_envp", "type": "uintptr_t" }, - { "name": "pr_dmodel", "type": "char" }, - { "name": "pr_pad2", "type": "char [3]" }, - { "name": "pr_taskid", "type": "taskid_t" }, - { "name": "pr_projid", "type": "projid_t" }, - { "name": "pr_nzomb", "type": "int" }, - { "name": "pr_poolid", "type": "poolid_t" }, - { "name": "pr_zoneid", "type": "zoneid_t" }, - { "name": "pr_contract", "type": "id_t" }, - { "name": "pr_filler", "type": "int [1]" }, - { "name": "pr_lwp", "type": "lwpsinfo_t" } - ] }, - { "name": "psinfo_t", "typedef": "struct psinfo" } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json deleted file mode 100644 index e0542ff4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json +++ /dev/null @@ -1,19 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316563648, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "timestruc_t" ] - }, -"data": - [ - { "name": "long", "integer": { "length": 4, "signed": true } }, - { "name": "time_t", "typedef": "long" }, - { "name": "struct timespec", "struct": [ - { "name": "tv_sec", "type": "time_t" }, - { "name": "tv_nsec", "type": "long" } - ] }, - { "name": "timestruc_t", "typedef": "struct timespec" } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js deleted file mode 100644 index d6a52cbb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Test several conditions that should always cause us to throw. - */ -var mod_assert = require('assert'); -var mod_ctype = require('../../ctype.js'); - -var cases = [ -{ json: { }, msg: 'bad JSON - no metadata or data' }, -{ json: { metadata: {} }, msg: 'bad JSON - bad metadata section' }, -{ json: { metadata: { 'JSON version': [] } }, - msg: 'bad JSON - bad JSON version' }, -{ json: { metadata: { 'JSON version': 2 } }, - msg: 'bad JSON - bad JSON version' }, -{ json: { metadata: { 'JSON version': '100.20' } }, - msg: 'bad JSON - bad JSON version' }, -{ json: { metadata: { 'JSON version': '1.0' } }, - msg: 'missing data section' }, -{ json: { metadata: { 'JSON version': '1.0' }, data: 1 }, - msg: 'invalid data section' }, -{ json: { metadata: { 'JSON version': '1.0' }, data: 1.1 }, - msg: 'invalid data section' }, -{ json: { metadata: { 'JSON version': '1.0' }, data: '1.1' }, - msg: 'invalid data section' }, -{ json: { metadata: { 'JSON version': '1.0' }, data: {} }, - msg: 'invalid data section' } -]; - -function test() -{ - var ii; - - for (ii = 0; ii < cases.length; ii++) { - mod_assert.throws(function () { - mod_ctype.parseCTF(cases[ii].json); - }, Error, cases[ii].msg); - } -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js deleted file mode 100644 index f2144994..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js +++ /dev/null @@ -1,14 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var data, parser; - - data = JSON.parse(mod_fs.readFileSync('./float.json').toString()); - parser = mod_ctype.parseCTF(data, { endian: 'big' }); - mod_assert.deepEqual(parser.lstypes(), {}); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js deleted file mode 100644 index 0ec0f769..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js +++ /dev/null @@ -1,14 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var data, parser; - - data = JSON.parse(mod_fs.readFileSync('./int.json').toString()); - parser = mod_ctype.parseCTF(data, { endian: 'big' }); - mod_assert.deepEqual(parser.lstypes(), { 'int': 'int32_t' }); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js deleted file mode 100644 index ca1a544c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js +++ /dev/null @@ -1,17 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -/* - * This is too unwieldly to actually write out. Just make sure we can parse it - * without errrors. - */ -function test() -{ - var data; - - data = JSON.parse(mod_fs.readFileSync('./psinfo.json').toString()); - mod_ctype.parseCTF(data, { endian: 'big' }); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js deleted file mode 100644 index c62f41f9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js +++ /dev/null @@ -1,18 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var data, parser; - - data = JSON.parse(mod_fs.readFileSync('./struct.json').toString()); - parser = mod_ctype.parseCTF(data, { endian: 'big' }); - mod_assert.deepEqual(parser.lstypes(), { 'long': 'int32_t', - 'time_t': 'long', - 'timestruc_t': 'struct timespec', - 'struct timespec': [ { 'tv_sec': { 'type': 'time_t' } }, - { 'tv_nsec': { 'type': 'long' } } ] }); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js deleted file mode 100644 index 9006cd1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js +++ /dev/null @@ -1,15 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var data, parser; - - data = JSON.parse(mod_fs.readFileSync('./typedef.json').toString()); - parser = mod_ctype.parseCTF(data, { endian: 'big' }); - mod_assert.deepEqual(parser.lstypes(), { 'bar_t': 'int', - 'int': 'int32_t' }); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json deleted file mode 100644 index 35ddb50d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json +++ /dev/null @@ -1,14 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316302348, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "bar_t" ] - }, -"data": - [ - { "name": "int", "integer": { "length": 4, "signed": true } }, - { "name": "bar_t", "typedef": "int" } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js deleted file mode 100644 index 2c9504a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js +++ /dev/null @@ -1,767 +0,0 @@ -/* - * Battery of tests to break our floating point implementation. Oh ho ho. - * - * There are a few useful ways to generate the expected output. The first is - * just write a C program and write raw bytes out and inspect with xxd. Remember - * to consider whether or not you're on a big endian or little endian machine. - * Another useful site I found to help with some of this was: - * - * http://babbage.cs.qc.edu/IEEE-754/ - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -function testfloat() -{ - var buffer = new Buffer(4); - /* Start off with some of the easy ones: +zero */ - buffer[0] = 0; - buffer[1] = 0; - buffer[2] = 0; - buffer[3] = 0; - - ASSERT.equal(0, mod_ctype.rfloat(buffer, 'big', 0)); - ASSERT.equal(0, mod_ctype.rfloat(buffer, 'little', 0)); - - /* Test -0 */ - buffer[0] = 0x80; - ASSERT.equal(0, mod_ctype.rfloat(buffer, 'big', 0)); - buffer[3] = buffer[0]; - buffer[0] = 0; - ASSERT.equal(0, mod_ctype.rfloat(buffer, 'little', 0)); - - /* Catch +infin */ - buffer[0] = 0x7f; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(Number.POSITIVE_INFINITY, - mod_ctype.rfloat(buffer, 'big', 0)); - buffer[3] = 0x7f; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(Number.POSITIVE_INFINITY, - mod_ctype.rfloat(buffer, 'litle', 0)); - - /* Catch -infin */ - buffer[0] = 0xff; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(Number.NEGATIVE_INFINITY, - mod_ctype.rfloat(buffer, 'big', 0)); - buffer[3] = 0xff; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(Number.NEGATIVE_INFINITY, - mod_ctype.rfloat(buffer, 'litle', 0)); - - /* Catch NaN */ - - buffer[0] = 0x7f; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x23; - ASSERT.ok(isNaN(mod_ctype.rfloat(buffer, 'big', 0))); - buffer[3] = 0x7f; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x23; - ASSERT.ok(isNaN(mod_ctype.rfloat(buffer, 'little', 0))); - - /* Catch -infin */ - buffer[0] = 0xff; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x23; - ASSERT.ok(isNaN(mod_ctype.rfloat(buffer, 'big', 0))); - buffer[3] = 0xff; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x23; - ASSERT.ok(isNaN(mod_ctype.rfloat(buffer, 'little', 0))); - - /* On to some basic tests */ - /* 1.125 */ - buffer[0] = 0x3f; - buffer[1] = 0x90; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(1.125, mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x3f; - buffer[2] = 0x90; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(1.125, mod_ctype.rfloat(buffer, 'little', 0)); - - /* ff34a2b0 -2.4010576103645774e+38 */ - buffer[0] = 0xff; - buffer[1] = 0x34; - buffer[2] = 0xa2; - buffer[3] = 0xb0; - ASSERT.equal(-2.4010576103645774e+38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0xff; - buffer[2] = 0x34; - buffer[1] = 0xa2; - buffer[0] = 0xb0; - ASSERT.equal(-2.4010576103645774e+38, - mod_ctype.rfloat(buffer, 'little', 0)); - - /* Denormalized tests */ - - /* 0003f89a +/- 3.6468792534053364e-40 */ - buffer[0] = 0x00; - buffer[1] = 0x03; - buffer[2] = 0xf8; - buffer[3] = 0x9a; - ASSERT.equal(3.6468792534053364e-40, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x00; - buffer[2] = 0x03; - buffer[1] = 0xf8; - buffer[0] = 0x9a; - ASSERT.equal(3.6468792534053364e-40, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x03; - buffer[2] = 0xf8; - buffer[3] = 0x9a; - ASSERT.equal(-3.6468792534053364e-40, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x80; - buffer[2] = 0x03; - buffer[1] = 0xf8; - buffer[0] = 0x9a; - ASSERT.equal(-3.6468792534053364e-40, - mod_ctype.rfloat(buffer, 'little', 0)); - - - /* Maximum and minimum normalized and denormalized values */ - - /* Largest normalized number +/- 3.4028234663852886e+38 */ - - buffer[0] = 0x7f; - buffer[1] = 0x7f; - buffer[2] = 0xff; - buffer[3] = 0xff; - ASSERT.equal(3.4028234663852886e+38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x7f; - buffer[2] = 0x7f; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(3.4028234663852886e+38, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0xff; - buffer[1] = 0x7f; - buffer[2] = 0xff; - buffer[3] = 0xff; - ASSERT.equal(-3.4028234663852886e+38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0xff; - buffer[2] = 0x7f; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(-3.4028234663852886e+38, - mod_ctype.rfloat(buffer, 'little', 0)); - - /* Smallest normalied number +/- 1.1754943508222875e-38 */ - buffer[0] = 0x00; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(1.1754943508222875e-38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x00; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(1.1754943508222875e-38, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(-1.1754943508222875e-38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x80; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(-1.1754943508222875e-38, - mod_ctype.rfloat(buffer, 'little', 0)); - - - /* Smallest denormalized number 1.401298464324817e-45 */ - buffer[0] = 0x00; - buffer[1] = 0x00; - buffer[2] = 0x00; - buffer[3] = 0x01; - ASSERT.equal(1.401298464324817e-45, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x01; - ASSERT.equal(1.401298464324817e-45, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x00; - buffer[2] = 0x00; - buffer[3] = 0x01; - ASSERT.equal(-1.401298464324817e-45, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x80; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x01; - ASSERT.equal(-1.401298464324817e-45, - mod_ctype.rfloat(buffer, 'little', 0)); - - /* Largest denormalized value +/- 1.1754942106924411e-38 */ - buffer[0] = 0x00; - buffer[1] = 0x7f; - buffer[2] = 0xff; - buffer[3] = 0xff; - ASSERT.equal(1.1754942106924411e-38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x00; - buffer[2] = 0x7f; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(1.1754942106924411e-38, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x7f; - buffer[2] = 0xff; - buffer[3] = 0xff; - ASSERT.equal(-1.1754942106924411e-38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x80; - buffer[2] = 0x7f; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(-1.1754942106924411e-38, - mod_ctype.rfloat(buffer, 'little', 0)); - - /* Do some quick offset testing */ - buffer = new Buffer(6); - buffer[0] = 0x7f; - buffer[1] = 0x4e; - buffer[2] = 0x8a; - buffer[3] = 0x79; - buffer[4] = 0xcd; - buffer[5] = 0x3f; - - ASSERT.equal(2.745399582697325e+38, - mod_ctype.rfloat(buffer, 'big', 0)); - ASSERT.equal(1161619072, - mod_ctype.rfloat(buffer, 'big', 1)); - ASSERT.equal(-1.2027516403607578e-32, - mod_ctype.rfloat(buffer, 'big', 2)); - - ASSERT.equal(8.97661320504413e+34, - mod_ctype.rfloat(buffer, 'little', 0)); - ASSERT.equal(-261661920, - mod_ctype.rfloat(buffer, 'little', 1)); - ASSERT.equal(1.605271577835083, - mod_ctype.rfloat(buffer, 'little', 2)); - -} - -function testdouble() -{ - var buffer = new Buffer(10); - - /* Check 0 */ - buffer[0] = 0; - buffer[1] = 0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(0, - mod_ctype.rdouble(buffer, 'big', 0)); - ASSERT.equal(0, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(0, - mod_ctype.rdouble(buffer, 'big', 0)); - buffer[7] = 0x80; - buffer[6] = 0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(0, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Check NaN */ - buffer[0] = 0x7f; - buffer[1] = 0xf0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 23; - ASSERT.ok(isNaN(mod_ctype.rdouble(buffer, 'big', 0))); - - buffer[7] = 0x7f; - buffer[6] = 0xf0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 23; - ASSERT.ok(isNaN(mod_ctype.rdouble(buffer, 'little', 0))); - - buffer[0] = 0xff; - buffer[1] = 0xf0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 23; - ASSERT.ok(isNaN(mod_ctype.rdouble(buffer, 'big', 0))); - - buffer[7] = 0xff; - buffer[6] = 0xf0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 23; - ASSERT.ok(isNaN(mod_ctype.rdouble(buffer, 'little', 0))); - - /* pos inf */ - buffer[0] = 0x7f; - buffer[1] = 0xf0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(Number.POSITIVE_INFINITY, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x7f; - buffer[6] = 0xf0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(Number.POSITIVE_INFINITY, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* neg inf */ - buffer[0] = 0xff; - buffer[1] = 0xf0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(Number.NEGATIVE_INFINITY, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0xff; - buffer[6] = 0xf0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(Number.NEGATIVE_INFINITY, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Simple normalized values */ - - /* +/- 1.125 */ - buffer[0] = 0x3f; - buffer[1] = 0xf2; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(1.125, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x3f; - buffer[6] = 0xf2; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(1.125, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0xbf; - buffer[1] = 0xf2; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(-1.125, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0xbf; - buffer[6] = 0xf2; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(-1.125, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* +/- 1.4397318913736026e+283 */ - buffer[0] = 0x7a; - buffer[1] = 0xb8; - buffer[2] = 0xc9; - buffer[3] = 0x34; - buffer[4] = 0x72; - buffer[5] = 0x16; - buffer[6] = 0xf9; - buffer[7] = 0x0e; - ASSERT.equal(1.4397318913736026e+283, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x7a; - buffer[6] = 0xb8; - buffer[5] = 0xc9; - buffer[4] = 0x34; - buffer[3] = 0x72; - buffer[2] = 0x16; - buffer[1] = 0xf9; - buffer[0] = 0x0e; - ASSERT.equal(1.4397318913736026e+283, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0xfa; - buffer[1] = 0xb8; - buffer[2] = 0xc9; - buffer[3] = 0x34; - buffer[4] = 0x72; - buffer[5] = 0x16; - buffer[6] = 0xf9; - buffer[7] = 0x0e; - ASSERT.equal(-1.4397318913736026e+283, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0xfa; - buffer[6] = 0xb8; - buffer[5] = 0xc9; - buffer[4] = 0x34; - buffer[3] = 0x72; - buffer[2] = 0x16; - buffer[1] = 0xf9; - buffer[0] = 0x0e; - ASSERT.equal(-1.4397318913736026e+283, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Denormalized values */ - /* +/- 8.82521232268344e-309 */ - buffer[0] = 0x00; - buffer[1] = 0x06; - buffer[2] = 0x58; - buffer[3] = 0x94; - buffer[4] = 0x13; - buffer[5] = 0x27; - buffer[6] = 0x8a; - buffer[7] = 0xcd; - ASSERT.equal(8.82521232268344e-309, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x00; - buffer[6] = 0x06; - buffer[5] = 0x58; - buffer[4] = 0x94; - buffer[3] = 0x13; - buffer[2] = 0x27; - buffer[1] = 0x8a; - buffer[0] = 0xcd; - ASSERT.equal(8.82521232268344e-309, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x06; - buffer[2] = 0x58; - buffer[3] = 0x94; - buffer[4] = 0x13; - buffer[5] = 0x27; - buffer[6] = 0x8a; - buffer[7] = 0xcd; - ASSERT.equal(-8.82521232268344e-309, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x80; - buffer[6] = 0x06; - buffer[5] = 0x58; - buffer[4] = 0x94; - buffer[3] = 0x13; - buffer[2] = 0x27; - buffer[1] = 0x8a; - buffer[0] = 0xcd; - ASSERT.equal(-8.82521232268344e-309, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Edge cases, maximum and minimum values */ - - /* Smallest denormalized value 5e-324 */ - buffer[0] = 0x00; - buffer[1] = 0x00; - buffer[2] = 0x00; - buffer[3] = 0x00; - buffer[4] = 0x00; - buffer[5] = 0x00; - buffer[6] = 0x00; - buffer[7] = 0x01; - ASSERT.equal(5e-324, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x00; - buffer[6] = 0x00; - buffer[5] = 0x00; - buffer[4] = 0x00; - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x01; - ASSERT.equal(5e-324, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x00; - buffer[2] = 0x00; - buffer[3] = 0x00; - buffer[4] = 0x00; - buffer[5] = 0x00; - buffer[6] = 0x00; - buffer[7] = 0x01; - ASSERT.equal(-5e-324, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x80; - buffer[6] = 0x00; - buffer[5] = 0x00; - buffer[4] = 0x00; - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x01; - ASSERT.equal(-5e-324, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Largest denormalized value 2.225073858507201e-308 */ - buffer[0] = 0x00; - buffer[1] = 0x0f; - buffer[2] = 0xff; - buffer[3] = 0xff; - buffer[4] = 0xff; - buffer[5] = 0xff; - buffer[6] = 0xff; - buffer[7] = 0xff; - ASSERT.equal(2.225073858507201e-308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x00; - buffer[6] = 0x0f; - buffer[5] = 0xff; - buffer[4] = 0xff; - buffer[3] = 0xff; - buffer[2] = 0xff; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(2.225073858507201e-308, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x0f; - buffer[2] = 0xff; - buffer[3] = 0xff; - buffer[4] = 0xff; - buffer[5] = 0xff; - buffer[6] = 0xff; - buffer[7] = 0xff; - ASSERT.equal(-2.225073858507201e-308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x80; - buffer[6] = 0x0f; - buffer[5] = 0xff; - buffer[4] = 0xff; - buffer[3] = 0xff; - buffer[2] = 0xff; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(-2.225073858507201e-308, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Smallest normalized value 2.2250738585072014e-308 */ - buffer[0] = 0x00; - buffer[1] = 0x10; - buffer[2] = 0x00; - buffer[3] = 0x00; - buffer[4] = 0x00; - buffer[5] = 0x00; - buffer[6] = 0x00; - buffer[7] = 0x00; - ASSERT.equal(2.2250738585072014e-308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x00; - buffer[6] = 0x10; - buffer[5] = 0x00; - buffer[4] = 0x00; - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(2.2250738585072014e-308, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x10; - buffer[2] = 0x00; - buffer[3] = 0x00; - buffer[4] = 0x00; - buffer[5] = 0x00; - buffer[6] = 0x00; - buffer[7] = 0x00; - ASSERT.equal(-2.2250738585072014e-308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x80; - buffer[6] = 0x10; - buffer[5] = 0x00; - buffer[4] = 0x00; - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(-2.2250738585072014e-308, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Largest normalized value 1.7976931348623157e+308 */ - buffer[0] = 0x7f; - buffer[1] = 0xef; - buffer[2] = 0xff; - buffer[3] = 0xff; - buffer[4] = 0xff; - buffer[5] = 0xff; - buffer[6] = 0xff; - buffer[7] = 0xff; - ASSERT.equal(1.7976931348623157e+308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x7f; - buffer[6] = 0xef; - buffer[5] = 0xff; - buffer[4] = 0xff; - buffer[3] = 0xff; - buffer[2] = 0xff; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(1.7976931348623157e+308, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0xff; - buffer[1] = 0xef; - buffer[2] = 0xff; - buffer[3] = 0xff; - buffer[4] = 0xff; - buffer[5] = 0xff; - buffer[6] = 0xff; - buffer[7] = 0xff; - ASSERT.equal(-1.7976931348623157e+308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0xff; - buffer[6] = 0xef; - buffer[5] = 0xff; - buffer[4] = 0xff; - buffer[3] = 0xff; - buffer[2] = 0xff; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(-1.7976931348623157e+308, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Try offsets */ - buffer[0] = 0xde; - buffer[1] = 0xad; - buffer[2] = 0xbe; - buffer[3] = 0xef; - buffer[4] = 0xba; - buffer[5] = 0xdd; - buffer[6] = 0xca; - buffer[7] = 0xfe; - buffer[8] = 0x16; - buffer[9] = 0x79; - - ASSERT.equal(-1.1885958404126936e+148, - mod_ctype.rdouble(buffer, 'big', 0)); - ASSERT.equal(-2.4299184080448593e-88, - mod_ctype.rdouble(buffer, 'big', 1)); - ASSERT.equal(-0.000015130017658081283, - mod_ctype.rdouble(buffer, 'big', 2)); - - ASSERT.equal(-5.757458694845505e+302, - mod_ctype.rdouble(buffer, 'little', 0)); - ASSERT.equal(6.436459604192476e-198, - mod_ctype.rdouble(buffer, 'little', 1)); - ASSERT.equal(1.9903745632417286e+275, - mod_ctype.rdouble(buffer, 'little', 2)); -} - -testfloat(); -testdouble(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js deleted file mode 100644 index b5fd95cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js +++ /dev/null @@ -1,753 +0,0 @@ -/* - * Another place to find bugs that may yet plague us. This time with writing out - * floats to arrays. We are lazy and did basically just take the opposite of our - * test code to read in values. - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - - -/* - * A useful thing to keep around for debugging - * console.log('buffer[0]: ' + buffer[0].toString(16)); - * console.log('buffer[1]: ' + buffer[1].toString(16)); - * console.log('buffer[2]: ' + buffer[2].toString(16)); - * console.log('buffer[3]: ' + buffer[3].toString(16)); - * console.log('buffer[4]: ' + buffer[4].toString(16)); - * console.log('buffer[5]: ' + buffer[5].toString(16)); - * console.log('buffer[6]: ' + buffer[6].toString(16)); - * console.log('buffer[7]: ' + buffer[7].toString(16)); - */ - -function testfloat() -{ - var buffer = new Buffer(4); - mod_ctype.wfloat(0, 'big', buffer, 0); - /* Start off with some of the easy ones: +zero */ - ASSERT.equal(0, buffer[0]); - ASSERT.equal(0, buffer[1]); - ASSERT.equal(0, buffer[2]); - ASSERT.equal(0, buffer[3]); - mod_ctype.wfloat(0, 'little', buffer, 0); - ASSERT.equal(0, buffer[0]); - ASSERT.equal(0, buffer[1]); - ASSERT.equal(0, buffer[2]); - ASSERT.equal(0, buffer[3]); - - /* Catch +infin */ - mod_ctype.wfloat(Number.POSITIVE_INFINITY, 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(Number.POSITIVE_INFINITY, 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Catch -infin */ - mod_ctype.wfloat(Number.NEGATIVE_INFINITY, 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(Number.NEGATIVE_INFINITY, 'little', buffer, 0); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Catch NaN */ - - /* - * NaN Is a litle weird in its requirements, so we're going to encode a - * bit of how we actually implement it into this test. Probably not the - * best, since technically the sign is a don't care and the mantissa - * needs to just be non-zero. - */ - mod_ctype.wfloat(NaN, 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x17, buffer[3]); - mod_ctype.wfloat(NaN, 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x17, buffer[0]); - - /* On to some basic tests */ - /* 1.125 */ - mod_ctype.wfloat(1.125, 'big', buffer, 0); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0x90, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(1.125, 'little', buffer, 0); - ASSERT.equal(0x3f, buffer[3]); - ASSERT.equal(0x90, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - mod_ctype.wfloat(1.0000001192092896, 'big', buffer, 0); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(1.0000001192092896, 'little', buffer, 0); - ASSERT.equal(0x3f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - mod_ctype.wfloat(1.0000001192092896, 'big', buffer, 0); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(1.0000001192092896, 'little', buffer, 0); - ASSERT.equal(0x3f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - mod_ctype.wfloat(2.3283067140944524e-10, 'big', buffer, 0); - ASSERT.equal(0x2f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(2.3283067140944524e-10, 'little', buffer, 0); - ASSERT.equal(0x2f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - /* ff34a2b0 -2.4010576103645774e+38 */ - mod_ctype.wfloat(-2.4010576103645774e+38, - 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0x34, buffer[1]); - ASSERT.equal(0xa2, buffer[2]); - ASSERT.equal(0xb0, buffer[3]); - mod_ctype.wfloat(-2.4010576103645774e+38, - 'little', buffer, 0); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0x34, buffer[2]); - ASSERT.equal(0xa2, buffer[1]); - ASSERT.equal(0xb0, buffer[0]); - - /* Denormalized tests */ - - /* 0003f89a +/- 3.6468792534053364e-40 */ - mod_ctype.wfloat(3.6468792534053364e-40, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x03, buffer[1]); - ASSERT.equal(0xf8, buffer[2]); - ASSERT.equal(0x9a, buffer[3]); - mod_ctype.wfloat(3.6468792534053364e-40, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x03, buffer[2]); - ASSERT.equal(0xf8, buffer[1]); - ASSERT.equal(0x9a, buffer[0]); - - mod_ctype.wfloat(-3.6468792534053364e-40, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x03, buffer[1]); - ASSERT.equal(0xf8, buffer[2]); - ASSERT.equal(0x9a, buffer[3]); - mod_ctype.wfloat(-3.6468792534053364e-40, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[3]); - ASSERT.equal(0x03, buffer[2]); - ASSERT.equal(0xf8, buffer[1]); - ASSERT.equal(0x9a, buffer[0]); - - /* Maximum and minimum normalized and denormalized values */ - - /* Largest normalized number +/- 3.4028234663852886e+38 */ - - mod_ctype.wfloat(3.4028234663852886e+38, - 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - mod_ctype.wfloat(3.4028234663852886e+38, - 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[3]); - ASSERT.equal(0x7f, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - mod_ctype.wfloat(-3.4028234663852886e+38, - 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - mod_ctype.wfloat(-3.4028234663852886e+38, - 'little', buffer, 0); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0x7f, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - /* Smallest normalied number +/- 1.1754943508222875e-38 */ - - mod_ctype.wfloat(1.1754943508222875e-38, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(1.1754943508222875e-38, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - mod_ctype.wfloat(-1.1754943508222875e-38, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(-1.1754943508222875e-38, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Smallest denormalized number 1.401298464324817e-45 */ - mod_ctype.wfloat(1.401298464324817e-45, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(1.401298464324817e-45, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - mod_ctype.wfloat(-1.401298464324817e-45, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(-1.401298464324817e-45, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - /* Largest denormalized value +/- 1.1754942106924411e-38 */ - - mod_ctype.wfloat(1.1754942106924411e-38, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - mod_ctype.wfloat(1.1754942106924411e-38, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x7f, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - mod_ctype.wfloat(-1.1754942106924411e-38, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - mod_ctype.wfloat(-1.1754942106924411e-38, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[3]); - ASSERT.equal(0x7f, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - /* Do some quick offset testing */ - buffer = new Buffer(6); - mod_ctype.wfloat(-1.2027516403607578e-32, - 'big', buffer, 2); - ASSERT.equal(0x8a, buffer[2]); - ASSERT.equal(0x79, buffer[3]); - ASSERT.equal(0xcd, buffer[4]); - ASSERT.equal(0x3f, buffer[5]); - - mod_ctype.wfloat(-1.2027516403607578e-32, - 'little', buffer, 2); - ASSERT.equal(0x8a, buffer[5]); - ASSERT.equal(0x79, buffer[4]); - ASSERT.equal(0xcd, buffer[3]); - ASSERT.equal(0x3f, buffer[2]); - -} - -function testdouble() -{ - var buffer = new Buffer(10); - - /* Check 0 */ - mod_ctype.wdouble(0, 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - mod_ctype.wdouble(0, 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Check NaN */ - /* Similar to floats we are only generating a subset of values */ - mod_ctype.wdouble(NaN, 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0xf0, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x17, buffer[7]); - mod_ctype.wdouble(NaN, 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[7]); - ASSERT.equal(0xf0, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x17, buffer[0]); - - /* pos inf */ - mod_ctype.wdouble(Number.POSITIVE_INFINITY, - 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0xf0, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - mod_ctype.wdouble(Number.POSITIVE_INFINITY, - 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[7]); - ASSERT.equal(0xf0, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* neg inf */ - mod_ctype.wdouble(Number.NEGATIVE_INFINITY, - 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xf0, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - mod_ctype.wdouble(Number.NEGATIVE_INFINITY, - 'little', buffer, 0); - ASSERT.equal(0xff, buffer[7]); - ASSERT.equal(0xf0, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Simple normalized values */ - - /* +/- 1.125 */ - mod_ctype.wdouble(1.125, - 'big', buffer, 0); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0xf2, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wdouble(1.125, - 'little', buffer, 0); - ASSERT.equal(0x3f, buffer[7]); - ASSERT.equal(0xf2, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - mod_ctype.wdouble(-1.125, - 'big', buffer, 0); - ASSERT.equal(0xbf, buffer[0]); - ASSERT.equal(0xf2, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wdouble(-1.125, - 'little', buffer, 0); - ASSERT.equal(0xbf, buffer[7]); - ASSERT.equal(0xf2, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - - /* +/- 1.4397318913736026e+283 */ - mod_ctype.wdouble(1.4397318913736026e+283, - 'big', buffer, 0); - ASSERT.equal(0x7a, buffer[0]); - ASSERT.equal(0xb8, buffer[1]); - ASSERT.equal(0xc9, buffer[2]); - ASSERT.equal(0x34, buffer[3]); - ASSERT.equal(0x72, buffer[4]); - ASSERT.equal(0x16, buffer[5]); - ASSERT.equal(0xf9, buffer[6]); - ASSERT.equal(0x0e, buffer[7]); - - mod_ctype.wdouble(1.4397318913736026e+283, - 'little', buffer, 0); - ASSERT.equal(0x7a, buffer[7]); - ASSERT.equal(0xb8, buffer[6]); - ASSERT.equal(0xc9, buffer[5]); - ASSERT.equal(0x34, buffer[4]); - ASSERT.equal(0x72, buffer[3]); - ASSERT.equal(0x16, buffer[2]); - ASSERT.equal(0xf9, buffer[1]); - ASSERT.equal(0x0e, buffer[0]); - - mod_ctype.wdouble(-1.4397318913736026e+283, - 'big', buffer, 0); - ASSERT.equal(0xfa, buffer[0]); - ASSERT.equal(0xb8, buffer[1]); - ASSERT.equal(0xc9, buffer[2]); - ASSERT.equal(0x34, buffer[3]); - ASSERT.equal(0x72, buffer[4]); - ASSERT.equal(0x16, buffer[5]); - ASSERT.equal(0xf9, buffer[6]); - ASSERT.equal(0x0e, buffer[7]); - - mod_ctype.wdouble(-1.4397318913736026e+283, - 'little', buffer, 0); - ASSERT.equal(0xfa, buffer[7]); - ASSERT.equal(0xb8, buffer[6]); - ASSERT.equal(0xc9, buffer[5]); - ASSERT.equal(0x34, buffer[4]); - ASSERT.equal(0x72, buffer[3]); - ASSERT.equal(0x16, buffer[2]); - ASSERT.equal(0xf9, buffer[1]); - ASSERT.equal(0x0e, buffer[0]); - - /* Denormalized values */ - /* +/- 8.82521232268344e-309 */ - mod_ctype.wdouble(8.82521232268344e-309, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x06, buffer[1]); - ASSERT.equal(0x58, buffer[2]); - ASSERT.equal(0x94, buffer[3]); - ASSERT.equal(0x13, buffer[4]); - ASSERT.equal(0x27, buffer[5]); - ASSERT.equal(0x8a, buffer[6]); - ASSERT.equal(0xcd, buffer[7]); - - mod_ctype.wdouble(8.82521232268344e-309, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x06, buffer[6]); - ASSERT.equal(0x58, buffer[5]); - ASSERT.equal(0x94, buffer[4]); - ASSERT.equal(0x13, buffer[3]); - ASSERT.equal(0x27, buffer[2]); - ASSERT.equal(0x8a, buffer[1]); - ASSERT.equal(0xcd, buffer[0]); - - mod_ctype.wdouble(-8.82521232268344e-309, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x06, buffer[1]); - ASSERT.equal(0x58, buffer[2]); - ASSERT.equal(0x94, buffer[3]); - ASSERT.equal(0x13, buffer[4]); - ASSERT.equal(0x27, buffer[5]); - ASSERT.equal(0x8a, buffer[6]); - ASSERT.equal(0xcd, buffer[7]); - - mod_ctype.wdouble(-8.82521232268344e-309, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[7]); - ASSERT.equal(0x06, buffer[6]); - ASSERT.equal(0x58, buffer[5]); - ASSERT.equal(0x94, buffer[4]); - ASSERT.equal(0x13, buffer[3]); - ASSERT.equal(0x27, buffer[2]); - ASSERT.equal(0x8a, buffer[1]); - ASSERT.equal(0xcd, buffer[0]); - - - /* Edge cases, maximum and minimum values */ - - /* Smallest denormalized value 5e-324 */ - mod_ctype.wdouble(5e-324, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x01, buffer[7]); - - mod_ctype.wdouble(5e-324, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - mod_ctype.wdouble(-5e-324, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x01, buffer[7]); - - mod_ctype.wdouble(-5e-324, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[7]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - - - /* Largest denormalized value 2.225073858507201e-308 */ - mod_ctype.wdouble(2.225073858507201e-308, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x0f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wdouble(2.225073858507201e-308, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x0f, buffer[6]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - mod_ctype.wdouble(-2.225073858507201e-308, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x0f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wdouble(-2.225073858507201e-308, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[7]); - ASSERT.equal(0x0f, buffer[6]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - - /* Smallest normalized value 2.2250738585072014e-308 */ - mod_ctype.wdouble(2.2250738585072014e-308, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x10, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wdouble(2.2250738585072014e-308, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x10, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - mod_ctype.wdouble(-2.2250738585072014e-308, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x10, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wdouble(-2.2250738585072014e-308, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[7]); - ASSERT.equal(0x10, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - - /* Largest normalized value 1.7976931348623157e+308 */ - mod_ctype.wdouble(1.7976931348623157e+308, - 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0xef, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wdouble(1.7976931348623157e+308, - 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[7]); - ASSERT.equal(0xef, buffer[6]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - mod_ctype.wdouble(-1.7976931348623157e+308, - 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xef, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wdouble(-1.7976931348623157e+308, - 'little', buffer, 0); - ASSERT.equal(0xff, buffer[7]); - ASSERT.equal(0xef, buffer[6]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - - /* Try offsets */ - buffer[0] = 0xde; - buffer[1] = 0xad; - buffer[2] = 0xbe; - buffer[3] = 0xef; - buffer[4] = 0xba; - buffer[5] = 0xdd; - buffer[6] = 0xca; - buffer[7] = 0xfe; - buffer[8] = 0x16; - buffer[9] = 0x79; - - mod_ctype.wdouble(-0.000015130017658081283, - 'big', buffer, 2); - ASSERT.equal(0xbe, buffer[2]); - ASSERT.equal(0xef, buffer[3]); - ASSERT.equal(0xba, buffer[4]); - ASSERT.equal(0xdd, buffer[5]); - ASSERT.equal(0xca, buffer[6]); - ASSERT.equal(0xfe, buffer[7]); - ASSERT.equal(0x16, buffer[8]); - ASSERT.equal(0x79, buffer[9]); - - mod_ctype.wdouble(-0.000015130017658081283, - 'little', buffer, 2); - ASSERT.equal(0xbe, buffer[9]); - ASSERT.equal(0xef, buffer[8]); - ASSERT.equal(0xba, buffer[7]); - ASSERT.equal(0xdd, buffer[6]); - ASSERT.equal(0xca, buffer[5]); - ASSERT.equal(0xfe, buffer[4]); - ASSERT.equal(0x16, buffer[3]); - ASSERT.equal(0x79, buffer[2]); -} - -testfloat(); -testdouble(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js deleted file mode 100644 index 1ffdac09..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js +++ /dev/null @@ -1,638 +0,0 @@ -/* - * Test our ability to read and write signed 64-bit integers. - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -function testRead() -{ - var res, data; - data = new Buffer(10); - - data[0] = 0x32; - data[1] = 0x65; - data[2] = 0x42; - data[3] = 0x56; - data[4] = 0x23; - data[5] = 0xff; - data[6] = 0xff; - data[7] = 0xff; - data[8] = 0x89; - data[9] = 0x11; - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(0x32654256, res[0]); - ASSERT.equal(0x23ffffff, res[1]); - res = mod_ctype.rsint64(data, 'big', 1); - ASSERT.equal(0x65425623, res[0]); - ASSERT.equal(0xffffff89, res[1]); - res = mod_ctype.rsint64(data, 'big', 2); - ASSERT.equal(0x425623ff, res[0]); - ASSERT.equal(0xffff8911, res[1]); - res = mod_ctype.rsint64(data, 'little', 0); - ASSERT.equal(-0x000000dc, res[0]); - ASSERT.equal(-0xa9bd9ace, res[1]); - res = mod_ctype.rsint64(data, 'little', 1); - ASSERT.equal(-0x76000000, res[0]); - ASSERT.equal(-0xdca9bd9b, res[1]); - res = mod_ctype.rsint64(data, 'little', 2); - ASSERT.equal(0x1189ffff, res[0]); - ASSERT.equal(0xff235642, res[1]); - - data.fill(0x00); - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'big', 1); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'big', 2); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'little', 0); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'little', 1); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'little', 2); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - - data.fill(0xff); - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'big', 1); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'big', 2); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'little', 0); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'little', 1); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'little', 2); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - - data[0] = 0x80; - data[1] = 0x00; - data[2] = 0x00; - data[3] = 0x00; - data[4] = 0x00; - data[5] = 0x00; - data[6] = 0x00; - data[7] = 0x00; - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(-0x80000000, res[0]); - ASSERT.equal(0, res[1]); - - - data[7] = 0x80; - data[6] = 0x00; - data[5] = 0x00; - data[4] = 0x00; - data[3] = 0x00; - data[2] = 0x00; - data[1] = 0x00; - data[0] = 0x00; - res = mod_ctype.rsint64(data, 'little', 0); - ASSERT.equal(-0x80000000, res[0]); - ASSERT.equal(0, res[1]); - - data[0] = 0x80; - data[1] = 0x00; - data[2] = 0x00; - data[3] = 0x00; - data[4] = 0x00; - data[5] = 0x00; - data[6] = 0x00; - data[7] = 0x01; - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(-0x7fffffff, res[0]); - ASSERT.equal(-0xffffffff, res[1]); - - -} - -function testWriteZero() -{ - var data, buf; - buf = new Buffer(10); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0, buf[9]); - - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0, buf[9]); -} - -/* - * Also include tests that are going to force us to go into a negative value and - * insure that it's written correctly. - */ -function testWrite() -{ - var data, buf; - - buf = new Buffer(10); - data = [ 0x234456, 0x87 ]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0x00, buf[0]); - ASSERT.equal(0x23, buf[1]); - ASSERT.equal(0x44, buf[2]); - ASSERT.equal(0x56, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x87, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x23, buf[2]); - ASSERT.equal(0x44, buf[3]); - ASSERT.equal(0x56, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x87, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x23, buf[3]); - ASSERT.equal(0x44, buf[4]); - ASSERT.equal(0x56, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x87, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0x87, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x56, buf[4]); - ASSERT.equal(0x44, buf[5]); - ASSERT.equal(0x23, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x87, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x56, buf[5]); - ASSERT.equal(0x44, buf[6]); - ASSERT.equal(0x23, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x66, buf[9]); - - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x87, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x56, buf[6]); - ASSERT.equal(0x44, buf[7]); - ASSERT.equal(0x23, buf[8]); - ASSERT.equal(0x00, buf[9]); - - data = [0x3421, 0x34abcdba]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0x00, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x34, buf[2]); - ASSERT.equal(0x21, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0xab, buf[5]); - ASSERT.equal(0xcd, buf[6]); - ASSERT.equal(0xba, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x34, buf[3]); - ASSERT.equal(0x21, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0xab, buf[6]); - ASSERT.equal(0xcd, buf[7]); - ASSERT.equal(0xba, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0x21, buf[5]); - ASSERT.equal(0x34, buf[6]); - ASSERT.equal(0xab, buf[7]); - ASSERT.equal(0xcd, buf[8]); - ASSERT.equal(0xba, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0xba, buf[0]); - ASSERT.equal(0xcd, buf[1]); - ASSERT.equal(0xab, buf[2]); - ASSERT.equal(0x34, buf[3]); - ASSERT.equal(0x21, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0xba, buf[1]); - ASSERT.equal(0xcd, buf[2]); - ASSERT.equal(0xab, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0x21, buf[5]); - ASSERT.equal(0x34, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0xba, buf[2]); - ASSERT.equal(0xcd, buf[3]); - ASSERT.equal(0xab, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0x21, buf[6]); - ASSERT.equal(0x34, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x00, buf[9]); - - - data = [ -0x80000000, 0 ]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0x80, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0x00, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x80, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - data = [ -0x7fffffff, -0xffffffff ]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0x80, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x01, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0x01, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x80, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - data = [ 0x0, -0x1]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0xff, buf[0]); - ASSERT.equal(0xff, buf[1]); - ASSERT.equal(0xff, buf[2]); - ASSERT.equal(0xff, buf[3]); - ASSERT.equal(0xff, buf[4]); - ASSERT.equal(0xff, buf[5]); - ASSERT.equal(0xff, buf[6]); - ASSERT.equal(0xff, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0xff, buf[0]); - ASSERT.equal(0xff, buf[1]); - ASSERT.equal(0xff, buf[2]); - ASSERT.equal(0xff, buf[3]); - ASSERT.equal(0xff, buf[4]); - ASSERT.equal(0xff, buf[5]); - ASSERT.equal(0xff, buf[6]); - ASSERT.equal(0xff, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); -} - -/* - * Make sure we catch invalid writes. - */ -function testWriteInvalid() -{ - var data, buf; - - /* Buffer too small */ - buf = new Buffer(4); - data = [ 0, 0]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 0); - }, Error, 'buffer too small'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 0); - }, Error, 'buffer too small'); - - /* Beyond the end of the buffer */ - buf = new Buffer(12); - data = [ 0, 0]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 11); - }, Error, 'write beyond end of buffer'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 11); - }, Error, 'write beyond end of buffer'); - - /* Write fractional values */ - buf = new Buffer(12); - data = [ 3.33, 0 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 0, 3.3 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ -3.33, 0 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 0, -3.3 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 3.33, 2.42 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 3.33, -2.42 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ -3.33, -2.42 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ -3.33, 2.42 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - /* Signs don't match */ - buf = new Buffer(12); - data = [ 0x800000, -0x32 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ -0x800000, 0x32 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - /* Write values that are too large */ - buf = new Buffer(12); - data = [ 0x80000000, 0 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0x7fffffff, 0x100000000 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0x00, 0x800000000 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0xffffffffff, 0xffffff238 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0x23, 0xffffff238 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ -0x80000000, -0xfff238 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ -0x80000004, -0xfff238 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); -} - - -testRead(); -testWrite(); -testWriteZero(); -testWriteInvalid(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js deleted file mode 100644 index 5236d268..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Tests to verify we're reading in signed integers correctly - */ -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -/* - * Test 8 bit signed integers - */ -function test8() -{ - var data = new Buffer(4); - - data[0] = 0x23; - ASSERT.equal(0x23, mod_ctype.rsint8(data, 'big', 0)); - ASSERT.equal(0x23, mod_ctype.rsint8(data, 'little', 0)); - - data[0] = 0xff; - ASSERT.equal(-1, mod_ctype.rsint8(data, 'big', 0)); - ASSERT.equal(-1, mod_ctype.rsint8(data, 'little', 0)); - - data[0] = 0x87; - data[1] = 0xab; - data[2] = 0x7c; - data[3] = 0xef; - ASSERT.equal(-121, mod_ctype.rsint8(data, 'big', 0)); - ASSERT.equal(-85, mod_ctype.rsint8(data, 'big', 1)); - ASSERT.equal(124, mod_ctype.rsint8(data, 'big', 2)); - ASSERT.equal(-17, mod_ctype.rsint8(data, 'big', 3)); - ASSERT.equal(-121, mod_ctype.rsint8(data, 'little', 0)); - ASSERT.equal(-85, mod_ctype.rsint8(data, 'little', 1)); - ASSERT.equal(124, mod_ctype.rsint8(data, 'little', 2)); - ASSERT.equal(-17, mod_ctype.rsint8(data, 'little', 3)); -} - -function test16() -{ - var buffer = new Buffer(6); - buffer[0] = 0x16; - buffer[1] = 0x79; - ASSERT.equal(0x1679, mod_ctype.rsint16(buffer, 'big', 0)); - ASSERT.equal(0x7916, mod_ctype.rsint16(buffer, 'little', 0)); - - buffer[0] = 0xff; - buffer[1] = 0x80; - ASSERT.equal(-128, mod_ctype.rsint16(buffer, 'big', 0)); - ASSERT.equal(-32513, mod_ctype.rsint16(buffer, 'little', 0)); - - /* test offset with weenix */ - buffer[0] = 0x77; - buffer[1] = 0x65; - buffer[2] = 0x65; - buffer[3] = 0x6e; - buffer[4] = 0x69; - buffer[5] = 0x78; - ASSERT.equal(0x7765, mod_ctype.rsint16(buffer, 'big', 0)); - ASSERT.equal(0x6565, mod_ctype.rsint16(buffer, 'big', 1)); - ASSERT.equal(0x656e, mod_ctype.rsint16(buffer, 'big', 2)); - ASSERT.equal(0x6e69, mod_ctype.rsint16(buffer, 'big', 3)); - ASSERT.equal(0x6978, mod_ctype.rsint16(buffer, 'big', 4)); - ASSERT.equal(0x6577, mod_ctype.rsint16(buffer, 'little', 0)); - ASSERT.equal(0x6565, mod_ctype.rsint16(buffer, 'little', 1)); - ASSERT.equal(0x6e65, mod_ctype.rsint16(buffer, 'little', 2)); - ASSERT.equal(0x696e, mod_ctype.rsint16(buffer, 'little', 3)); - ASSERT.equal(0x7869, mod_ctype.rsint16(buffer, 'little', 4)); -} - -function test32() -{ - var buffer = new Buffer(6); - buffer[0] = 0x43; - buffer[1] = 0x53; - buffer[2] = 0x16; - buffer[3] = 0x79; - ASSERT.equal(0x43531679, mod_ctype.rsint32(buffer, 'big', 0)); - ASSERT.equal(0x79165343, mod_ctype.rsint32(buffer, 'little', 0)); - - buffer[0] = 0xff; - buffer[1] = 0xfe; - buffer[2] = 0xef; - buffer[3] = 0xfa; - ASSERT.equal(-69638, mod_ctype.rsint32(buffer, 'big', 0)); - ASSERT.equal(-84934913, mod_ctype.rsint32(buffer, 'little', 0)); - - buffer[0] = 0x42; - buffer[1] = 0xc3; - buffer[2] = 0x95; - buffer[3] = 0xa9; - buffer[4] = 0x36; - buffer[5] = 0x17; - ASSERT.equal(0x42c395a9, mod_ctype.rsint32(buffer, 'big', 0)); - ASSERT.equal(-1013601994, mod_ctype.rsint32(buffer, 'big', 1)); - ASSERT.equal(-1784072681, mod_ctype.rsint32(buffer, 'big', 2)); - ASSERT.equal(-1449802942, mod_ctype.rsint32(buffer, 'little', 0)); - ASSERT.equal(917083587, mod_ctype.rsint32(buffer, 'little', 1)); - ASSERT.equal(389458325, mod_ctype.rsint32(buffer, 'little', 2)); -} - -test8(); -test16(); -test32(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js deleted file mode 100644 index 5488177b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Test to make sure that we properly are erroring whenever we try to write - * beyond the size of the integer. - */ - -var mod_ctio = require('../../../ctio.js'); -var mod_assert = require('assert'); -var tb = new Buffer(16); /* Largest buffer we'll need */ - -var cases = [ - { func: - function () { - mod_ctio.wsint8(0x80, 'big', tb, 0); - }, test: '+int8_t' }, - { func: - function () { - mod_ctio.wsint8(-0x81, 'big', tb, 0); - }, test: '-int8_t' }, - - { func: - function () { - mod_ctio.wsint16(0x8000, 'big', tb, 0); - }, test: '+int16_t' }, - { func: - function () { - mod_ctio.wsint16(-0x8001, 'big', tb, 0); - }, test: '-int16_t' }, - { func: - function () { - mod_ctio.wsint32(0x80000000, 'big', tb, 0); - }, test: '+int32_t' }, - { func: - function () { - mod_ctio.wsint32(-0x80000001, 'big', tb, 0); - }, test: '-int32_t' }, - { func: - function () { - mod_ctio.wsint64([ 0x80000000, 0 ], 'big', tb, 0); - }, test: '+int64_t' }, - { func: - function () { - mod_ctio.wsint64([ -0x80000000, -1 ], 'big', tb, 0); - }, test: '-int64_t' } -]; - -function test() -{ - var ii; - for (ii = 0; ii < cases.length; ii++) - mod_assert.throws(cases[ii]['func'], Error, cases[ii]['test']); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js deleted file mode 100644 index 98b6a32a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Tests to verify we're writing signed integers correctly - */ -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -function test8() -{ - var buffer = new Buffer(4); - mod_ctype.wsint8(0x23, 'big', buffer, 0); - mod_ctype.wsint8(0x23, 'little', buffer, 1); - mod_ctype.wsint8(-5, 'big', buffer, 2); - mod_ctype.wsint8(-5, 'little', buffer, 3); - - ASSERT.equal(0x23, buffer[0]); - ASSERT.equal(0x23, buffer[1]); - ASSERT.equal(0xfb, buffer[2]); - ASSERT.equal(0xfb, buffer[3]); - - /* Make sure we handle truncation correctly */ - ASSERT.throws(function () { - mod_ctype.wsint8(0xabc, 'big', buffer, 0); - }); - ASSERT.throws(function () { - mod_ctype.wsint8(0xabc, 'little', buffer, 0); - }); -} - -function test16() -{ - var buffer = new Buffer(6); - mod_ctype.wsint16(0x0023, 'big', buffer, 0); - mod_ctype.wsint16(0x0023, 'little', buffer, 2); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x23, buffer[1]); - ASSERT.equal(0x23, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wsint16(-5, 'big', buffer, 0); - mod_ctype.wsint16(-5, 'little', buffer, 2); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xfb, buffer[1]); - ASSERT.equal(0xfb, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - - mod_ctype.wsint16(-1679, 'big', buffer, 1); - mod_ctype.wsint16(-1679, 'little', buffer, 3); - ASSERT.equal(0xf9, buffer[1]); - ASSERT.equal(0x71, buffer[2]); - ASSERT.equal(0x71, buffer[3]); - ASSERT.equal(0xf9, buffer[4]); -} - -function test32() -{ - var buffer = new Buffer(8); - mod_ctype.wsint32(0x23, 'big', buffer, 0); - mod_ctype.wsint32(0x23, 'little', buffer, 4); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x23, buffer[3]); - ASSERT.equal(0x23, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wsint32(-5, 'big', buffer, 0); - mod_ctype.wsint32(-5, 'little', buffer, 4); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xfb, buffer[3]); - ASSERT.equal(0xfb, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wsint32(-805306713, 'big', buffer, 0); - mod_ctype.wsint32(-805306713, 'litle', buffer, 4); - ASSERT.equal(0xcf, buffer[0]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xfe, buffer[2]); - ASSERT.equal(0xa7, buffer[3]); - ASSERT.equal(0xa7, buffer[4]); - ASSERT.equal(0xfe, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xcf, buffer[7]); -} - -test8(); -test16(); -test32(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js deleted file mode 100644 index cf66ac7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Test our ability to read and write unsigned 64-bit integers. - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -function testRead() -{ - var res, data; - data = new Buffer(10); - - data[0] = 0x32; - data[1] = 0x65; - data[2] = 0x42; - data[3] = 0x56; - data[4] = 0x23; - data[5] = 0xff; - data[6] = 0xff; - data[7] = 0xff; - data[8] = 0x89; - data[9] = 0x11; - res = mod_ctype.ruint64(data, 'big', 0); - ASSERT.equal(0x32654256, res[0]); - ASSERT.equal(0x23ffffff, res[1]); - res = mod_ctype.ruint64(data, 'big', 1); - ASSERT.equal(0x65425623, res[0]); - ASSERT.equal(0xffffff89, res[1]); - res = mod_ctype.ruint64(data, 'big', 2); - ASSERT.equal(0x425623ff, res[0]); - ASSERT.equal(0xffff8911, res[1]); - res = mod_ctype.ruint64(data, 'little', 0); - ASSERT.equal(0xffffff23, res[0]); - ASSERT.equal(0x56426532, res[1]); - res = mod_ctype.ruint64(data, 'little', 1); - ASSERT.equal(0x89ffffff, res[0]); - ASSERT.equal(0x23564265, res[1]); - res = mod_ctype.ruint64(data, 'little', 2); - ASSERT.equal(0x1189ffff, res[0]); - ASSERT.equal(0xff235642, res[1]); - -} - -function testReadOver() -{ - var res, data; - data = new Buffer(10); - - data[0] = 0x80; - data[1] = 0xff; - data[2] = 0x80; - data[3] = 0xff; - data[4] = 0x80; - data[5] = 0xff; - data[6] = 0x80; - data[7] = 0xff; - data[8] = 0x80; - data[9] = 0xff; - res = mod_ctype.ruint64(data, 'big', 0); - ASSERT.equal(0x80ff80ff, res[0]); - ASSERT.equal(0x80ff80ff, res[1]); - res = mod_ctype.ruint64(data, 'big', 1); - ASSERT.equal(0xff80ff80, res[0]); - ASSERT.equal(0xff80ff80, res[1]); - res = mod_ctype.ruint64(data, 'big', 2); - ASSERT.equal(0x80ff80ff, res[0]); - ASSERT.equal(0x80ff80ff, res[1]); - res = mod_ctype.ruint64(data, 'little', 0); - ASSERT.equal(0xff80ff80, res[0]); - ASSERT.equal(0xff80ff80, res[1]); - res = mod_ctype.ruint64(data, 'little', 1); - ASSERT.equal(0x80ff80ff, res[0]); - ASSERT.equal(0x80ff80ff, res[1]); - res = mod_ctype.ruint64(data, 'little', 2); - ASSERT.equal(0xff80ff80, res[0]); - ASSERT.equal(0xff80ff80, res[1]); -} - -function testWriteZero() -{ - var data, buf; - buf = new Buffer(10); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'big', buf, 0); - ASSERT.equal(0, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0, buf[9]); - - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'little', buf, 0); - ASSERT.equal(0, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0, buf[9]); -} - -/* - * Also include tests that are going to force us to go into a negative value and - * insure that it's written correctly. - */ -function testWrite() -{ - var data, buf; - - buf = new Buffer(10); - data = [ 0x234456, 0x87 ]; - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 0); - ASSERT.equal(0x00, buf[0]); - ASSERT.equal(0x23, buf[1]); - ASSERT.equal(0x44, buf[2]); - ASSERT.equal(0x56, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x87, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x23, buf[2]); - ASSERT.equal(0x44, buf[3]); - ASSERT.equal(0x56, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x87, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x23, buf[3]); - ASSERT.equal(0x44, buf[4]); - ASSERT.equal(0x56, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x87, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 0); - ASSERT.equal(0x87, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x56, buf[4]); - ASSERT.equal(0x44, buf[5]); - ASSERT.equal(0x23, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x87, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x56, buf[5]); - ASSERT.equal(0x44, buf[6]); - ASSERT.equal(0x23, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x66, buf[9]); - - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x87, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x56, buf[6]); - ASSERT.equal(0x44, buf[7]); - ASSERT.equal(0x23, buf[8]); - ASSERT.equal(0x00, buf[9]); - - data = [0xffff3421, 0x34abcdba]; - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 0); - ASSERT.equal(0xff, buf[0]); - ASSERT.equal(0xff, buf[1]); - ASSERT.equal(0x34, buf[2]); - ASSERT.equal(0x21, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0xab, buf[5]); - ASSERT.equal(0xcd, buf[6]); - ASSERT.equal(0xba, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0xff, buf[1]); - ASSERT.equal(0xff, buf[2]); - ASSERT.equal(0x34, buf[3]); - ASSERT.equal(0x21, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0xab, buf[6]); - ASSERT.equal(0xcd, buf[7]); - ASSERT.equal(0xba, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0xff, buf[2]); - ASSERT.equal(0xff, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0x21, buf[5]); - ASSERT.equal(0x34, buf[6]); - ASSERT.equal(0xab, buf[7]); - ASSERT.equal(0xcd, buf[8]); - ASSERT.equal(0xba, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 0); - ASSERT.equal(0xba, buf[0]); - ASSERT.equal(0xcd, buf[1]); - ASSERT.equal(0xab, buf[2]); - ASSERT.equal(0x34, buf[3]); - ASSERT.equal(0x21, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0xff, buf[6]); - ASSERT.equal(0xff, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0xba, buf[1]); - ASSERT.equal(0xcd, buf[2]); - ASSERT.equal(0xab, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0x21, buf[5]); - ASSERT.equal(0x34, buf[6]); - ASSERT.equal(0xff, buf[7]); - ASSERT.equal(0xff, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0xba, buf[2]); - ASSERT.equal(0xcd, buf[3]); - ASSERT.equal(0xab, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0x21, buf[6]); - ASSERT.equal(0x34, buf[7]); - ASSERT.equal(0xff, buf[8]); - ASSERT.equal(0xff, buf[9]); -} - -/* - * Make sure we catch invalid writes. - */ -function testWriteInvalid() -{ - var data, buf; - - /* Buffer too small */ - buf = new Buffer(4); - data = [ 0, 0]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 0); - }, Error, 'buffer too small'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 0); - }, Error, 'buffer too small'); - - /* Beyond the end of the buffer */ - buf = new Buffer(12); - data = [ 0, 0]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 11); - }, Error, 'write beyond end of buffer'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 11); - }, Error, 'write beyond end of buffer'); - - /* Write negative values */ - buf = new Buffer(12); - data = [ -3, 0 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write negative number'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write negative number'); - - data = [ 0, -3 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write negative number'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write negative number'); - - data = [ -3, -3 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write negative number'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write negative number'); - - - /* Write fractional values */ - buf = new Buffer(12); - data = [ 3.33, 0 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 0, 3.3 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 3.33, 2.42 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - /* Write values that are too large */ - buf = new Buffer(12); - data = [ 0xffffffffff, 23 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0xffffffffff, 0xffffff238 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0x23, 0xffffff238 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write too large'); -} - - -testRead(); -testReadOver(); -testWriteZero(); -testWrite(); -testWriteInvalid(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js deleted file mode 100644 index 87ae59b7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js +++ /dev/null @@ -1,81 +0,0 @@ -/* - * A battery of tests for sucessful round-trip between writes and reads - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - - -/* - * What the heck, let's just test every value for 8-bits. - */ - -function test8() { - var data = new Buffer(1); - var i; - for (i = 0; i < 256; i++) { - mod_ctype.wuint8(i, 'big', data, 0); - ASSERT.equal(i, mod_ctype.ruint8(data, 'big', 0)); - mod_ctype.wuint8(i, 'little', data, 0); - ASSERT.equal(i, mod_ctype.ruint8(data, 'little', 0)); - } - ASSERT.ok(true); -} - -/* - * Test a random sample of 256 values in the 16-bit unsigned range - */ - -function test16() { - var data = new Buffer(2); - var i = 0; - for (i = 0; i < 256; i++) { - var value = Math.round(Math.random() * Math.pow(2, 16)); - mod_ctype.wuint16(value, 'big', data, 0); - ASSERT.equal(value, mod_ctype.ruint16(data, 'big', 0)); - mod_ctype.wuint16(value, 'little', data, 0); - ASSERT.equal(value, mod_ctype.ruint16(data, 'little', 0)); - } -} - -/* - * Test a random sample of 256 values in the 32-bit unsigned range - */ - -function test32() { - var data = new Buffer(4); - var i = 0; - for (i = 0; i < 256; i++) { - var value = Math.round(Math.random() * Math.pow(2, 32)); - mod_ctype.wuint32(value, 'big', data, 0); - ASSERT.equal(value, mod_ctype.ruint32(data, 'big', 0)); - mod_ctype.wuint32(value, 'little', data, 0); - ASSERT.equal(value, mod_ctype.ruint32(data, 'little', 0)); - } -} - -/* - * Test a random sample of 256 values in the 64-bit unsigned range - */ - -function test64() { - var data = new Buffer(8); - var i = 0; - for (i = 0; i < 256; i++) { - var low = Math.round(Math.random() * Math.pow(2, 32)); - var high = Math.round(Math.random() * Math.pow(2, 32)); - mod_ctype.wuint64([high, low], 'big', data, 0); - var result = mod_ctype.ruint64(data, 'big', 0); - ASSERT.equal(high, result[0]); - ASSERT.equal(low, result[1]); - mod_ctype.wuint64([high, low], 'little', data, 0); - result = mod_ctype.ruint64(data, 'little', 0); - ASSERT.equal(high, result[0]); - ASSERT.equal(low, result[1]); - } -} - -exports.test8 = test8; -exports.test16 = test16; -exports.test32 = test32; -exports.test64 = test64; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js deleted file mode 100644 index b67c077f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js +++ /dev/null @@ -1,95 +0,0 @@ -/* - * A battery of tests to help us read a series of uints - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -/* - * We need to check the following things: - * - We are correctly resolving big endian (doesn't mean anything for 8 bit) - * - Correctly resolving little endian (doesn't mean anything for 8 bit) - * - Correctly using the offsets - * - Correctly interpreting values that are beyond the signed range as unsigned - */ -function test8() -{ - var data = new Buffer(4); - data[0] = 23; - data[1] = 23; - data[2] = 23; - data[3] = 23; - ASSERT.equal(23, mod_ctype.ruint8(data, 'big', 0)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'little', 0)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'big', 1)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'little', 1)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'big', 2)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'little', 2)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'big', 3)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'little', 3)); - data[0] = 255; /* If it became a signed int, would be -1 */ - ASSERT.equal(255, mod_ctype.ruint8(data, 'big', 0)); - ASSERT.equal(255, mod_ctype.ruint8(data, 'little', 0)); -} - -/* - * Test 16 bit unsigned integers. We need to verify the same set as 8 bit, only - * now some of the issues actually matter: - * - We are correctly resolving big endian - * - Correctly resolving little endian - * - Correctly using the offsets - * - Correctly interpreting values that are beyond the signed range as unsigned - */ -function test16() -{ - var data = new Buffer(4); - /* Test signed values first */ - data[0] = 0; - data[1] = 0x23; - data[2] = 0x42; - data[3] = 0x3f; - - ASSERT.equal(0x23, mod_ctype.ruint16(data, 'big', 0)); - ASSERT.equal(0x2342, mod_ctype.ruint16(data, 'big', 1)); - ASSERT.equal(0x423f, mod_ctype.ruint16(data, 'big', 2)); - - ASSERT.equal(0x2300, mod_ctype.ruint16(data, 'little', 0)); - ASSERT.equal(0x4223, mod_ctype.ruint16(data, 'little', 1)); - ASSERT.equal(0x3f42, mod_ctype.ruint16(data, 'little', 2)); - - data[0] = 0xfe; - data[1] = 0xfe; - - ASSERT.equal(0xfefe, mod_ctype.ruint16(data, 'big', 0)); - ASSERT.equal(0xfefe, mod_ctype.ruint16(data, 'little', 0)); -} - -/* - * Test 32 bit unsigned integers. We need to verify the same set as 8 bit, only - * now some of the issues actually matter: - * - We are correctly resolving big endian - * - Correctly using the offsets - * - Correctly interpreting values that are beyond the signed range as unsigned - */ -function test32() -{ - var data = new Buffer(8); - data[0] = 0x32; - data[1] = 0x65; - data[2] = 0x42; - data[3] = 0x56; - data[4] = 0x23; - data[5] = 0xff; - - ASSERT.equal(0x32654256, mod_ctype.ruint32(data, 'big', 0)); - ASSERT.equal(0x65425623, mod_ctype.ruint32(data, 'big', 1)); - ASSERT.equal(0x425623ff, mod_ctype.ruint32(data, 'big', 2)); - - ASSERT.equal(0x56426532, mod_ctype.ruint32(data, 'little', 0)); - ASSERT.equal(0x23564265, mod_ctype.ruint32(data, 'little', 1)); - ASSERT.equal(0xff235642, mod_ctype.ruint32(data, 'little', 2)); -} - -test8(); -test16(); -test32(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js deleted file mode 100644 index d6c4230f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * A battery of tests to help us read a series of uints - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -/* - * We need to check the following things: - * - We are correctly resolving big endian (doesn't mean anything for 8 bit) - * - Correctly resolving little endian (doesn't mean anything for 8 bit) - * - Correctly using the offsets - * - Correctly interpreting values that are beyond the signed range as unsigned - */ -function test8() -{ - var data = new Buffer(4); - mod_ctype.wuint8(23, 'big', data, 0); - mod_ctype.wuint8(23, 'big', data, 1); - mod_ctype.wuint8(23, 'big', data, 2); - mod_ctype.wuint8(23, 'big', data, 3); - ASSERT.equal(23, data[0]); - ASSERT.equal(23, data[1]); - ASSERT.equal(23, data[2]); - ASSERT.equal(23, data[3]); - mod_ctype.wuint8(23, 'little', data, 0); - mod_ctype.wuint8(23, 'little', data, 1); - mod_ctype.wuint8(23, 'little', data, 2); - mod_ctype.wuint8(23, 'little', data, 3); - ASSERT.equal(23, data[0]); - ASSERT.equal(23, data[1]); - ASSERT.equal(23, data[2]); - ASSERT.equal(23, data[3]); - mod_ctype.wuint8(255, 'big', data, 0); - ASSERT.equal(255, data[0]); - mod_ctype.wuint8(255, 'little', data, 0); - ASSERT.equal(255, data[0]); -} - -function test16() -{ - var value = 0x2343; - var data = new Buffer(4); - mod_ctype.wuint16(value, 'big', data, 0); - ASSERT.equal(0x23, data[0]); - ASSERT.equal(0x43, data[1]); - mod_ctype.wuint16(value, 'big', data, 1); - ASSERT.equal(0x23, data[1]); - ASSERT.equal(0x43, data[2]); - mod_ctype.wuint16(value, 'big', data, 2); - ASSERT.equal(0x23, data[2]); - ASSERT.equal(0x43, data[3]); - - mod_ctype.wuint16(value, 'little', data, 0); - ASSERT.equal(0x23, data[1]); - ASSERT.equal(0x43, data[0]); - - mod_ctype.wuint16(value, 'little', data, 1); - ASSERT.equal(0x23, data[2]); - ASSERT.equal(0x43, data[1]); - - mod_ctype.wuint16(value, 'little', data, 2); - ASSERT.equal(0x23, data[3]); - ASSERT.equal(0x43, data[2]); - - value = 0xff80; - mod_ctype.wuint16(value, 'little', data, 0); - ASSERT.equal(0xff, data[1]); - ASSERT.equal(0x80, data[0]); - - mod_ctype.wuint16(value, 'big', data, 0); - ASSERT.equal(0xff, data[0]); - ASSERT.equal(0x80, data[1]); -} - -function test32() -{ - var data = new Buffer(6); - var value = 0xe7f90a6d; - - mod_ctype.wuint32(value, 'big', data, 0); - ASSERT.equal(0xe7, data[0]); - ASSERT.equal(0xf9, data[1]); - ASSERT.equal(0x0a, data[2]); - ASSERT.equal(0x6d, data[3]); - - mod_ctype.wuint32(value, 'big', data, 1); - ASSERT.equal(0xe7, data[1]); - ASSERT.equal(0xf9, data[2]); - ASSERT.equal(0x0a, data[3]); - ASSERT.equal(0x6d, data[4]); - - mod_ctype.wuint32(value, 'big', data, 2); - ASSERT.equal(0xe7, data[2]); - ASSERT.equal(0xf9, data[3]); - ASSERT.equal(0x0a, data[4]); - ASSERT.equal(0x6d, data[5]); - - mod_ctype.wuint32(value, 'little', data, 0); - ASSERT.equal(0xe7, data[3]); - ASSERT.equal(0xf9, data[2]); - ASSERT.equal(0x0a, data[1]); - ASSERT.equal(0x6d, data[0]); - - mod_ctype.wuint32(value, 'little', data, 1); - ASSERT.equal(0xe7, data[4]); - ASSERT.equal(0xf9, data[3]); - ASSERT.equal(0x0a, data[2]); - ASSERT.equal(0x6d, data[1]); - - mod_ctype.wuint32(value, 'little', data, 2); - ASSERT.equal(0xe7, data[5]); - ASSERT.equal(0xf9, data[4]); - ASSERT.equal(0x0a, data[3]); - ASSERT.equal(0x6d, data[2]); -} - -function test64() -{ - var data = new Buffer(10); - var value = 0x0007cda8e7f90a6d; - var high = Math.floor(value / Math.pow(2, 32)); - var low = value - (high * Math.pow(2, 32)); - ASSERT.equal(0x0007cda8, high); - ASSERT.equal(0xe7f90a6d, low); - - mod_ctype.wuint64([high, low], 'big', data, 0); - ASSERT.equal(0x00, data[0]); - ASSERT.equal(0x07, data[1]); - ASSERT.equal(0xcd, data[2]); - ASSERT.equal(0xa8, data[3]); - ASSERT.equal(0xe7, data[4]); - ASSERT.equal(0xf9, data[5]); - ASSERT.equal(0x0a, data[6]); - ASSERT.equal(0x6d, data[7]); - - mod_ctype.wuint64([high, low], 'little', data, 0); - ASSERT.equal(0x6d, data[0]); - ASSERT.equal(0x0a, data[1]); - ASSERT.equal(0xf9, data[2]); - ASSERT.equal(0xe7, data[3]); - ASSERT.equal(0xa8, data[4]); - ASSERT.equal(0xcd, data[5]); - ASSERT.equal(0x07, data[6]); - ASSERT.equal(0x00, data[7]); -} - -test8(); -test16(); -test32(); -test64(); - -exports.test8 = test8; -exports.test16 = test16; -exports.test32 = test32; -exports.test64 = test64; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js deleted file mode 100644 index e9895152..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Simple does to see if it works at all - */ -var mod_ctype = require('../../ctype'); -var ASSERT = require('assert'); -var mod_sys = require('sys'); - -function test() -{ - var ii, p, result, buffer; - - p = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer(4); - buffer[0] = 23; - buffer[3] = 42; - result = p.readData([ { x: { type: 'uint8_t' }}, - { y: { type: 'uint8_t', offset: 3 }} - ], buffer, 0); - ASSERT.equal(23, result['x']); - ASSERT.equal(42, result['y']); - - buffer = new Buffer(23); - for (ii = 0; ii < 23; ii++) - buffer[ii] = 0; - - buffer.write('Hello, world!'); - result = p.readData([ { x: { type: 'char[20]' }} ], buffer, 0); - - /* - * This is currently broken behvaior, need to redesign check - * ASSERT.equal('Hello, world!', result['x'].toString('utf-8', 0, - * result['x'].length)); - */ - - buffer = new Buffer(4); - buffer[0] = 0x03; - buffer[1] = 0x24; - buffer[2] = 0x25; - buffer[3] = 0x26; - result = p.readData([ { y: { type: 'uint8_t' }}, - { x: { type: 'uint8_t[y]' }}], buffer, 0); - console.log(mod_sys.inspect(result, true)); - - p.typedef('ssize_t', 'int32_t'); - ASSERT.deepEqual({ 'ssize_t': 'int32_t' }, p.lstypes()); - result = p.readData([ { x: { type: 'ssize_t' } } ], buffer, 0); - ASSERT.equal(0x26252403, result['x']); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js deleted file mode 100644 index 89d446f2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Simple does it fucking work at all test - */ - -var mod_ctype = require('../../ctype'); -var ASSERT = require('assert'); -var mod_sys = require('sys'); - -function test() -{ - var ii, p, buffer, buf2; - - p = new mod_ctype.Parser({ endian: 'big' }); - buffer = new Buffer(4); - p.writeData([ { x: { type: 'uint8_t', value: 23 }}, - { y: { type: 'uint8_t', offset: 3, value: 42 }} - ], buffer, 0); - ASSERT.equal(23, buffer[0]); - ASSERT.equal(42, buffer[3]); - - buffer = new Buffer(20); - for (ii = 0; ii < 20; ii++) - buffer[ii] = 0; - - buffer.write('Hello, world!'); - buf2 = new Buffer(22); - p.writeData([ { x: { type: 'char[20]', value: buffer }} ], buf2, 0); - for (ii = 0; ii < 20; ii++) - ASSERT.equal(buffer[ii], buf2[ii]); - /* - * This is currently broken behvaior, need to redesign check - * ASSERT.equal('Hello, world!', result['x'].toString('utf-8', 0, - * result['x'].length)); - */ - - buffer = new Buffer(4); - p.writeData([ { y: { type: 'uint8_t', value: 3 }}, - { x: { type: 'uint8_t[y]', value: [ 0x24, 0x25, 0x26] }}], - buffer, 0); - console.log(mod_sys.inspect(buffer)); - - p.typedef('ssize_t', 'int32_t'); - ASSERT.deepEqual({ 'ssize_t': 'int32_t' }, p.lstypes()); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js deleted file mode 100644 index 14d9529c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Test the different forms of reading characters: - * - * - the default, a single element buffer - * - uint8, values are uint8_ts - * - int8, values are int8_ts - */ -var mod_ctype = require('../../ctype'); -var mod_assert = require('assert'); - -function test() -{ - var p, buf, res; - - buf = new Buffer(1); - buf[0] = 255; - - p = new mod_ctype.Parser({ endian: 'little'}); - res = p.readData([ { c: { type: 'char' }} ], buf, 0); - res = res['c']; - mod_assert.ok(res instanceof Buffer); - mod_assert.equal(255, res[0]); - - p = new mod_ctype.Parser({ endian: 'little', - 'char-type': 'int8' }); - res = p.readData([ { c: { type: 'char' }} ], buf, 0); - res = res['c']; - mod_assert.ok(typeof (res) == 'number', 'got typeof (res): ' + - typeof (res)); - mod_assert.equal(-1, res); - - p = new mod_ctype.Parser({ endian: 'little', - 'char-type': 'uint8' }); - res = p.readData([ { c: { type: 'char' }} ], buf, 0); - res = res['c']; - mod_assert.ok(typeof (res) == 'number', 'got typeof (res): ' + - typeof (res)); - mod_assert.equal(255, res); - -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js deleted file mode 100644 index 11fc2d2c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Simple test to make sure that the endian setting works. - */ - -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var parser, buf; - - parser = new mod_ctype.Parser({ - endian: 'little' - }); - - buf = new Buffer(2); - parser.writeData([ { key: { type: 'uint16_t' } } ], buf, 0, [ 0x1234 ]); - mod_assert.equal(buf[0], 0x34); - mod_assert.equal(buf[1], 0x12); - parser.setEndian('big'); - - parser.writeData([ { key: { type: 'uint16_t' } } ], buf, 0, [ 0x1234 ]); - mod_assert.equal(buf[0], 0x12); - mod_assert.equal(buf[1], 0x34); - - parser.setEndian('little'); - parser.writeData([ { key: { type: 'uint16_t' } } ], buf, 0, [ 0x1234 ]); - mod_assert.equal(buf[0], 0x34); - mod_assert.equal(buf[1], 0x12); -} - -function fail() -{ - var parser; - - parser = new mod_ctype.Parser({ - endian: 'little' - }); - mod_assert.throws(function () { - parser.setEndian('littlebigwrong'); - }); -} - -test(); -fail(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js deleted file mode 100644 index 9491cf6e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * A long overdue test to go through and verify that we can read and write - * structures as well as nested structures. - */ - -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var parser, buf, data; - parser = new mod_ctype.Parser({ - endian: 'little' - }); - parser.typedef('point_t', [ - { x: { type: 'uint8_t' } }, - { y: { type: 'uint8_t' } } - ]); - buf = new Buffer(2); - data = [ - { point: { type: 'point_t', value: [ 23, 42 ] } } - ]; - parser.writeData(data, buf, 0); - mod_assert.ok(buf[0] == 23); - mod_assert.ok(buf[1] == 42); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js deleted file mode 100644 index 6c490a2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Testing to ensure we're reading the expected number bytes - */ -var mod_ctype = require('../../ctype'); -var ASSERT = require('assert'); - -function testUint8() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('80', 'hex'); - result = parser.readStruct([ { item: { type: 'uint8_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 1); -} - -function testSint8() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('80', 'hex'); - result = parser.readStruct([ { item: { type: 'int8_t' } } ], buffer, 0); - ASSERT.equal(result['size'], 1); -} - -function testUint16() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('8000', 'hex'); - result = parser.readStruct([ { item: { type: 'uint16_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 2); -} - -function testSint16() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('8000', 'hex'); - result = parser.readStruct([ { item: { type: 'int16_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 2); -} - -function testUint32() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('80000000', 'hex'); - result = parser.readStruct([ { item: { type: 'uint32_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 4); -} - -function testSint32() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('80000000', 'hex'); - result = parser.readStruct([ { item: { type: 'int32_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 4); -} - -function testUint64() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('8000000000000000', 'hex'); - result = parser.readStruct([ { item: { type: 'uint64_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 8); -} - -function testSint64() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('8000000000000000', 'hex'); - result = parser.readStruct([ { item: { type: 'int64_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 8); -} - -function testFloat() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('ABAAAA3E', 'hex'); - result = parser.readStruct([ { item: { type: 'float' } } ], buffer, 0); - ASSERT.equal(result['size'], 4); -} - -function testDouble() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('000000000000F03F', 'hex'); - result = parser.readStruct([ { item: { type: 'double' } } ], buffer, 0); - ASSERT.equal(result['size'], 8); -} - -function testChar() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('t'); - result = parser.readStruct([ { item: { type: 'char' } } ], buffer, 0); - ASSERT.equal(result['size'], 1); -} - -function test() -{ - testSint8(); - testUint8(); - testSint16(); - testUint16(); - testSint32(); - testUint32(); - testSint64(); - testUint64(); - testFloat(); - testDouble(); - testChar(); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js deleted file mode 100644 index 09c1a5ba..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * A long overdue test to go through and verify that we can read and write - * structures as well as nested structures. - */ - -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var parser, buf, data; - parser = new mod_ctype.Parser({ - endian: 'little' - }); - parser.typedef('point_t', [ - { x: { type: 'uint8_t' } }, - { y: { type: 'uint8_t' } } - ]); - buf = new Buffer(2); - data = [ - { point: { type: 'point_t' } } - ]; - parser.writeData(data, buf, 0, [ [ 23, 42 ] ]); - mod_assert.ok(buf[0] == 23); - mod_assert.ok(buf[1] == 42); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js deleted file mode 100644 index 48556667..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Test to verify that the offset is incremented when structures are written to. - * Hopefully we will not regress issue #41 - */ - -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var parser, buf, data; - parser = new mod_ctype.Parser({ - endian: 'little' - }); - parser.typedef('point_t', [ - { x: { type: 'uint8_t' } }, - { y: { type: 'uint8_t' } } - ]); - buf = new Buffer(4); - data = [ - { point1: { type: 'point_t' } }, - { point2: { type: 'point_t' } } - ]; - parser.writeData(data, buf, 0, [ [ 23, 42 ], [ 91, 18 ] ]); - mod_assert.ok(buf[0] == 23); - mod_assert.ok(buf[1] == 42); - mod_assert.ok(buf[2] == 91); - mod_assert.ok(buf[3] == 18); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/package.json deleted file mode 100644 index 416f618a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Joyent, Inc" - }, - "name": "http-signature", - "description": "Reference implementation of Joyent's HTTP Signature Scheme", - "version": "0.10.0", - "repository": { - "type": "git", - "url": "git://github.com/joyent/node-http-signature.git" - }, - "engines": { - "node": ">=0.8" - }, - "main": "lib/index.js", - "scripts": { - "test": "tap tst/*.js" - }, - "dependencies": { - "assert-plus": "0.1.2", - "asn1": "0.1.11", - "ctype": "0.5.2" - }, - "devDependencies": { - "node-uuid": "1.4.0", - "tap": "0.4.2" - }, - "readme": "# node-http-signature\n\nnode-http-signature is a node.js library that has client and server components\nfor Joyent's [HTTP Signature Scheme](http_signing.md).\n\n## Usage\n\nNote the example below signs a request with the same key/cert used to start an\nHTTP server. This is almost certainly not what you actaully want, but is just\nused to illustrate the API calls; you will need to provide your own key\nmanagement in addition to this library.\n\n### Client\n\n var fs = require('fs');\n var https = require('https');\n var httpSignature = require('http-signature');\n\n var key = fs.readFileSync('./key.pem', 'ascii');\n\n var options = {\n host: 'localhost',\n port: 8443,\n path: '/',\n method: 'GET',\n headers: {}\n };\n\n // Adds a 'Date' header in, signs it, and adds the\n // 'Authorization' header in.\n var req = https.request(options, function(res) {\n console.log(res.statusCode);\n });\n\n\n httpSignature.sign(req, {\n key: key,\n keyId: './cert.pem'\n });\n\n req.end();\n\n### Server\n\n var fs = require('fs');\n var https = require('https');\n var httpSignature = require('http-signature');\n\n var options = {\n key: fs.readFileSync('./key.pem'),\n cert: fs.readFileSync('./cert.pem')\n };\n\n https.createServer(options, function (req, res) {\n var rc = 200;\n var parsed = httpSignature.parseRequest(req);\n var pub = fs.readFileSync(parsed.keyId, 'ascii');\n if (!httpSignature.verifySignature(parsed, pub))\n rc = 401;\n\n res.writeHead(rc);\n res.end();\n }).listen(8443);\n\n## Installation\n\n npm install http-signature\n\n## License\n\nMIT.\n\n## Bugs\n\nSee <https://github.com/joyent/node-http-signature/issues>.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/joyent/node-http-signature/issues" - }, - "homepage": "https://github.com/joyent/node-http-signature", - "_id": "http-signature@0.10.0", - "dist": { - "shasum": "ed3c3415949cf275765bb5394a145ada7a1e506a" - }, - "_from": "http-signature@~0.10.0", - "_resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/README.md deleted file mode 100644 index 5d764f3a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# json-stringify-safe - -Like JSON.stringify, but doesn't throw on circular references. - -## Usage - -Takes the same arguments as `JSON.stringify`. - -```javascript -var stringify = require('json-stringify-safe'); -var circularObj = {}; -circularObj.circularRef = circularObj; -circularObj.list = [ circularObj, circularObj ]; -console.log(stringify(circularObj, null, 2)); -``` - -Output: - -```json -{ - "circularRef": "[Circular]", - "list": [ - "[Circular]", - "[Circular]" - ] -} -``` - -## Details - -``` -stringify(obj, serializer, indent, decycler) -``` - -The first three arguments are the same as to JSON.stringify. The last -is an argument that's only used when the object has been seen already. - -The default `decycler` function returns the string `'[Circular]'`. -If, for example, you pass in `function(k,v){}` (return nothing) then it -will prune cycles. If you pass in `function(k,v){ return {foo: 'bar'}}`, -then cyclical objects will always be represented as `{"foo":"bar"}` in -the result. - -``` -stringify.getSerialize(serializer, decycler) -``` - -Returns a serializer that can be used elsewhere. This is the actual -function that's passed to JSON.stringify. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/package.json deleted file mode 100644 index dc9929d9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "json-stringify-safe", - "version": "5.0.0", - "description": "Like JSON.stringify, but doesn't blow up on circular refs", - "main": "stringify.js", - "scripts": { - "test": "node test.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/json-stringify-safe" - }, - "keywords": [ - "json", - "stringify", - "circular", - "safe" - ], - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "license": "BSD", - "readmeFilename": "README.md", - "readme": "# json-stringify-safe\n\nLike JSON.stringify, but doesn't throw on circular references.\n\n## Usage\n\nTakes the same arguments as `JSON.stringify`.\n\n```javascript\nvar stringify = require('json-stringify-safe');\nvar circularObj = {};\ncircularObj.circularRef = circularObj;\ncircularObj.list = [ circularObj, circularObj ];\nconsole.log(stringify(circularObj, null, 2));\n```\n\nOutput:\n\n```json\n{\n \"circularRef\": \"[Circular]\",\n \"list\": [\n \"[Circular]\",\n \"[Circular]\"\n ]\n}\n```\n\n## Details\n\n```\nstringify(obj, serializer, indent, decycler)\n```\n\nThe first three arguments are the same as to JSON.stringify. The last\nis an argument that's only used when the object has been seen already.\n\nThe default `decycler` function returns the string `'[Circular]'`.\nIf, for example, you pass in `function(k,v){}` (return nothing) then it\nwill prune cycles. If you pass in `function(k,v){ return {foo: 'bar'}}`,\nthen cyclical objects will always be represented as `{\"foo\":\"bar\"}` in\nthe result.\n\n```\nstringify.getSerialize(serializer, decycler)\n```\n\nReturns a serializer that can be used elsewhere. This is the actual\nfunction that's passed to JSON.stringify.\n", - "bugs": { - "url": "https://github.com/isaacs/json-stringify-safe/issues" - }, - "homepage": "https://github.com/isaacs/json-stringify-safe", - "_id": "json-stringify-safe@5.0.0", - "dist": { - "shasum": "3bef04524e23eb51118883db0bcf4e18c49ed92c" - }, - "_from": "json-stringify-safe@~5.0.0", - "_resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/stringify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/stringify.js deleted file mode 100644 index 853ef9b2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/stringify.js +++ /dev/null @@ -1,39 +0,0 @@ -module.exports = stringify; - -function getSerialize (fn, decycle) { - var seen = [], keys = []; - decycle = decycle || function(key, value) { - return '[Circular ' + getPath(value, seen, keys) + ']' - }; - return function(key, value) { - var ret = value; - if (typeof value === 'object' && value) { - if (seen.indexOf(value) !== -1) - ret = decycle(key, value); - else { - seen.push(value); - keys.push(key); - } - } - if (fn) ret = fn(key, ret); - return ret; - } -} - -function getPath (value, seen, keys) { - var index = seen.indexOf(value); - var path = [ keys[index] ]; - for (index--; index >= 0; index--) { - if (seen[index][ path[0] ] === value) { - value = seen[index]; - path.unshift(keys[index]); - } - } - return '~' + path.join('.'); -} - -function stringify(obj, fn, spaces, decycle) { - return JSON.stringify(obj, getSerialize(fn, decycle), spaces); -} - -stringify.getSerialize = getSerialize; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/test.js deleted file mode 100644 index 991e9197..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/test.js +++ /dev/null @@ -1,128 +0,0 @@ -var stringify = require('./stringify.js'); - -var circularObj = { a: 'b' }; -circularObj.circularRef = circularObj; -circularObj.list = [ circularObj, circularObj ]; - -////////// -// default -var testObj = { - "a": "b", - "circularRef": "[Circular ~]", - "list": [ - "[Circular ~]", - "[Circular ~]" - ] -}; - -var assert = require('assert'); -assert.equal(JSON.stringify(testObj, null, 2), - stringify(circularObj, null, 2)); - -assert.equal(JSON.stringify(testObj, null, 2), - JSON.stringify(circularObj, stringify.getSerialize(), 2)); - - -//////// -// prune -testObj = { - "a": "b", - "list": [ - null, - null - ] -}; - -function prune(k, v) {} - -assert.equal(JSON.stringify(testObj, null, 2), - stringify(circularObj, null, 2, prune)); - -/////////// -// re-cycle -// (throws) -function recycle(k, v) { - return v; -} - -assert.throws(function() { - stringify(circularObj, null, 2, recycle); -}); - -//////// -// fancy -testObj = { - "a": "b", - "circularRef": "circularRef{a:string,circularRef:Object,list:Array}", - "list": [ - "0{a:string,circularRef:Object,list:Array}", - "1{a:string,circularRef:Object,list:Array}" - ] -}; - -function signer(key, value) { - var ret = key + '{'; - var f = false; - for (var i in value) { - if (f) - ret += ','; - f = true; - ret += i + ':'; - var v = value[i]; - switch (typeof v) { - case 'object': - if (!v) - ret += 'null'; - else if (Array.isArray(v)) - ret += 'Array' - else - ret += v.constructor && v.constructor.name || 'Object'; - break; - default: - ret += typeof v; - break; - } - } - ret += '}'; - return ret; -} - -assert.equal(JSON.stringify(testObj, null, 2), - stringify(circularObj, null, 2, signer)); - - -/////// -//multi -var a = { x: 1 }; -a.a = a; -var b = { x: 2 }; -b.a = a; - -var c = { a: a, b: b }; -var d = { list: [ a, b, c ] }; -d.d = d; - -var multi = { - "list": [ - { - "x": 1, - "a": "[Circular ~.list.0]" - }, - { - "x": 2, - "a": "[Circular ~.list.0]" - }, - { - "a": "[Circular ~.list.0]", - "b": "[Circular ~.list.1]" - } - ], - "d": "[Circular ~]" -}; - -assert.equal(JSON.stringify(multi, null, 2), - stringify(d, null, 2)); - -//////// -// pass! -console.log('ok'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/LICENSE deleted file mode 100644 index 451fc455..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/README.md deleted file mode 100644 index 6ca19bd1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# mime - -Comprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community. - -## Install - -Install with [npm](http://github.com/isaacs/npm): - - npm install mime - -## API - Queries - -### mime.lookup(path) -Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. - - var mime = require('mime'); - - mime.lookup('/path/to/file.txt'); // => 'text/plain' - mime.lookup('file.txt'); // => 'text/plain' - mime.lookup('.TXT'); // => 'text/plain' - mime.lookup('htm'); // => 'text/html' - -### mime.default_type -Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) - -### mime.extension(type) -Get the default extension for `type` - - mime.extension('text/html'); // => 'html' - mime.extension('application/octet-stream'); // => 'bin' - -### mime.charsets.lookup() - -Map mime-type to charset - - mime.charsets.lookup('text/plain'); // => 'UTF-8' - -(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) - -## API - Defining Custom Types - -The following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types). - -### mime.define() - -Add custom mime/extension mappings - - mime.define({ - 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], - 'application/x-my-type': ['x-mt', 'x-mtt'], - // etc ... - }); - - mime.lookup('x-sft'); // => 'text/x-some-format' - -The first entry in the extensions array is returned by `mime.extension()`. E.g. - - mime.extension('text/x-some-format'); // => 'x-sf' - -### mime.load(filepath) - -Load mappings from an Apache ".types" format file - - mime.load('./my_project.types'); - -The .types file format is simple - See the `types` dir for examples. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/mime.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/mime.js deleted file mode 100644 index 48be0c5e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/mime.js +++ /dev/null @@ -1,114 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -function Mime() { - // Map of extension -> mime type - this.types = Object.create(null); - - // Map of mime type -> extension - this.extensions = Object.create(null); -} - -/** - * Define mimetype -> extension mappings. Each key is a mime-type that maps - * to an array of extensions associated with the type. The first extension is - * used as the default extension for the type. - * - * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); - * - * @param map (Object) type definitions - */ -Mime.prototype.define = function (map) { - for (var type in map) { - var exts = map[type]; - - for (var i = 0; i < exts.length; i++) { - if (process.env.DEBUG_MIME && this.types[exts]) { - console.warn(this._loading.replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + - this.types[exts] + ' to ' + type); - } - - this.types[exts[i]] = type; - } - - // Default extension is the first one we encounter - if (!this.extensions[type]) { - this.extensions[type] = exts[0]; - } - } -}; - -/** - * Load an Apache2-style ".types" file - * - * This may be called multiple times (it's expected). Where files declare - * overlapping types/extensions, the last file wins. - * - * @param file (String) path of file to load. - */ -Mime.prototype.load = function(file) { - - this._loading = file; - // Read file and split into lines - var map = {}, - content = fs.readFileSync(file, 'ascii'), - lines = content.split(/[\r\n]+/); - - lines.forEach(function(line) { - // Clean up whitespace/comments, and split into fields - var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); - map[fields.shift()] = fields; - }); - - this.define(map); - - this._loading = null; -}; - -/** - * Lookup a mime type based on extension - */ -Mime.prototype.lookup = function(path, fallback) { - var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase(); - - return this.types[ext] || fallback || this.default_type; -}; - -/** - * Return file extension associated with a mime type - */ -Mime.prototype.extension = function(mimeType) { - var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); - return this.extensions[type]; -}; - -// Default instance -var mime = new Mime(); - -// Load local copy of -// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types -mime.load(path.join(__dirname, 'types/mime.types')); - -// Load additional types from node.js community -mime.load(path.join(__dirname, 'types/node.types')); - -// Default type -mime.default_type = mime.lookup('bin'); - -// -// Additional API specific to the default instance -// - -mime.Mime = Mime; - -/** - * Lookup a charset based on mime type. - */ -mime.charsets = { - lookup: function(mimeType, fallback) { - // Assume text types are utf8 - return (/^text\//).test(mimeType) ? 'UTF-8' : fallback; - } -}; - -module.exports = mime; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/package.json deleted file mode 100644 index a9759392..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com", - "url": "http://github.com/broofa" - }, - "contributors": [ - { - "name": "Benjamin Thomas", - "email": "benjamin@benjaminthomas.org", - "url": "http://github.com/bentomas" - } - ], - "dependencies": {}, - "description": "A comprehensive library for mime-type mapping", - "devDependencies": {}, - "keywords": [ - "util", - "mime" - ], - "main": "mime.js", - "name": "mime", - "repository": { - "url": "https://github.com/broofa/node-mime", - "type": "git" - }, - "version": "1.2.11", - "readme": "# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.\n\n var mime = require('mime');\n\n mime.lookup('/path/to/file.txt'); // => 'text/plain'\n mime.lookup('file.txt'); // => 'text/plain'\n mime.lookup('.TXT'); // => 'text/plain'\n mime.lookup('htm'); // => 'text/html'\n\n### mime.default_type\nSets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension('text/html'); // => 'html'\n mime.extension('application/octet-stream'); // => 'bin'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup('text/plain'); // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n 'application/x-my-type': ['x-mt', 'x-mtt'],\n // etc ...\n });\n\n mime.lookup('x-sft'); // => 'text/x-some-format'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n mime.load('./my_project.types');\n\nThe .types file format is simple - See the `types` dir for examples.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/broofa/node-mime/issues" - }, - "homepage": "https://github.com/broofa/node-mime", - "_id": "mime@1.2.11", - "_from": "mime@~1.2.9" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/test.js deleted file mode 100644 index 2cda1c7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/test.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Usage: node test.js - */ - -var mime = require('./mime'); -var assert = require('assert'); -var path = require('path'); - -function eq(a, b) { - console.log('Test: ' + a + ' === ' + b); - assert.strictEqual.apply(null, arguments); -} - -console.log(Object.keys(mime.extensions).length + ' types'); -console.log(Object.keys(mime.types).length + ' extensions\n'); - -// -// Test mime lookups -// - -eq('text/plain', mime.lookup('text.txt')); // normal file -eq('text/plain', mime.lookup('TEXT.TXT')); // uppercase -eq('text/plain', mime.lookup('dir/text.txt')); // dir + file -eq('text/plain', mime.lookup('.text.txt')); // hidden file -eq('text/plain', mime.lookup('.txt')); // nameless -eq('text/plain', mime.lookup('txt')); // extension-only -eq('text/plain', mime.lookup('/txt')); // extension-less () -eq('text/plain', mime.lookup('\\txt')); // Windows, extension-less -eq('application/octet-stream', mime.lookup('text.nope')); // unrecognized -eq('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default - -// -// Test extensions -// - -eq('txt', mime.extension(mime.types.text)); -eq('html', mime.extension(mime.types.htm)); -eq('bin', mime.extension('application/octet-stream')); -eq('bin', mime.extension('application/octet-stream ')); -eq('html', mime.extension(' text/html; charset=UTF-8')); -eq('html', mime.extension('text/html; charset=UTF-8 ')); -eq('html', mime.extension('text/html; charset=UTF-8')); -eq('html', mime.extension('text/html ; charset=UTF-8')); -eq('html', mime.extension('text/html;charset=UTF-8')); -eq('html', mime.extension('text/Html;charset=UTF-8')); -eq(undefined, mime.extension('unrecognized')); - -// -// Test node.types lookups -// - -eq('application/font-woff', mime.lookup('file.woff')); -eq('application/octet-stream', mime.lookup('file.buffer')); -eq('audio/mp4', mime.lookup('file.m4a')); -eq('font/opentype', mime.lookup('file.otf')); - -// -// Test charsets -// - -eq('UTF-8', mime.charsets.lookup('text/plain')); -eq(undefined, mime.charsets.lookup(mime.types.js)); -eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); - -// -// Test for overlaps between mime.types and node.types -// - -var apacheTypes = new mime.Mime(), nodeTypes = new mime.Mime(); -apacheTypes.load(path.join(__dirname, 'types/mime.types')); -nodeTypes.load(path.join(__dirname, 'types/node.types')); - -var keys = [].concat(Object.keys(apacheTypes.types)) - .concat(Object.keys(nodeTypes.types)); -keys.sort(); -for (var i = 1; i < keys.length; i++) { - if (keys[i] == keys[i-1]) { - console.warn('Warning: ' + - 'node.types defines ' + keys[i] + '->' + nodeTypes.types[keys[i]] + - ', mime.types defines ' + keys[i] + '->' + apacheTypes.types[keys[i]]); - } -} - -console.log('\nOK'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/mime.types b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/mime.types deleted file mode 100644 index da8cd691..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/mime.types +++ /dev/null @@ -1,1588 +0,0 @@ -# This file maps Internet media types to unique file extension(s). -# Although created for httpd, this file is used by many software systems -# and has been placed in the public domain for unlimited redisribution. -# -# The table below contains both registered and (common) unregistered types. -# A type that has no unique extension can be ignored -- they are listed -# here to guide configurations toward known types and to make it easier to -# identify "new" types. File extensions are also commonly used to indicate -# content languages and encodings, so choose them carefully. -# -# Internet media types should be registered as described in RFC 4288. -# The registry is at <http://www.iana.org/assignments/media-types/>. -# -# MIME type (lowercased) Extensions -# ============================================ ========== -# application/1d-interleaved-parityfec -# application/3gpp-ims+xml -# application/activemessage -application/andrew-inset ez -# application/applefile -application/applixware aw -application/atom+xml atom -application/atomcat+xml atomcat -# application/atomicmail -application/atomsvc+xml atomsvc -# application/auth-policy+xml -# application/batch-smtp -# application/beep+xml -# application/calendar+xml -# application/cals-1840 -# application/ccmp+xml -application/ccxml+xml ccxml -application/cdmi-capability cdmia -application/cdmi-container cdmic -application/cdmi-domain cdmid -application/cdmi-object cdmio -application/cdmi-queue cdmiq -# application/cea-2018+xml -# application/cellml+xml -# application/cfw -# application/cnrp+xml -# application/commonground -# application/conference-info+xml -# application/cpl+xml -# application/csta+xml -# application/cstadata+xml -application/cu-seeme cu -# application/cybercash -application/davmount+xml davmount -# application/dca-rft -# application/dec-dx -# application/dialog-info+xml -# application/dicom -# application/dns -application/docbook+xml dbk -# application/dskpp+xml -application/dssc+der dssc -application/dssc+xml xdssc -# application/dvcs -application/ecmascript ecma -# application/edi-consent -# application/edi-x12 -# application/edifact -application/emma+xml emma -# application/epp+xml -application/epub+zip epub -# application/eshop -# application/example -application/exi exi -# application/fastinfoset -# application/fastsoap -# application/fits -application/font-tdpfr pfr -# application/framework-attributes+xml -application/gml+xml gml -application/gpx+xml gpx -application/gxf gxf -# application/h224 -# application/held+xml -# application/http -application/hyperstudio stk -# application/ibe-key-request+xml -# application/ibe-pkg-reply+xml -# application/ibe-pp-data -# application/iges -# application/im-iscomposing+xml -# application/index -# application/index.cmd -# application/index.obj -# application/index.response -# application/index.vnd -application/inkml+xml ink inkml -# application/iotp -application/ipfix ipfix -# application/ipp -# application/isup -application/java-archive jar -application/java-serialized-object ser -application/java-vm class -application/javascript js -application/json json -application/jsonml+json jsonml -# application/kpml-request+xml -# application/kpml-response+xml -application/lost+xml lostxml -application/mac-binhex40 hqx -application/mac-compactpro cpt -# application/macwriteii -application/mads+xml mads -application/marc mrc -application/marcxml+xml mrcx -application/mathematica ma nb mb -# application/mathml-content+xml -# application/mathml-presentation+xml -application/mathml+xml mathml -# application/mbms-associated-procedure-description+xml -# application/mbms-deregister+xml -# application/mbms-envelope+xml -# application/mbms-msk+xml -# application/mbms-msk-response+xml -# application/mbms-protection-description+xml -# application/mbms-reception-report+xml -# application/mbms-register+xml -# application/mbms-register-response+xml -# application/mbms-user-service-description+xml -application/mbox mbox -# application/media_control+xml -application/mediaservercontrol+xml mscml -application/metalink+xml metalink -application/metalink4+xml meta4 -application/mets+xml mets -# application/mikey -application/mods+xml mods -# application/moss-keys -# application/moss-signature -# application/mosskey-data -# application/mosskey-request -application/mp21 m21 mp21 -application/mp4 mp4s -# application/mpeg4-generic -# application/mpeg4-iod -# application/mpeg4-iod-xmt -# application/msc-ivr+xml -# application/msc-mixer+xml -application/msword doc dot -application/mxf mxf -# application/nasdata -# application/news-checkgroups -# application/news-groupinfo -# application/news-transmission -# application/nss -# application/ocsp-request -# application/ocsp-response -application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy -application/oda oda -application/oebps-package+xml opf -application/ogg ogx -application/omdoc+xml omdoc -application/onenote onetoc onetoc2 onetmp onepkg -application/oxps oxps -# application/parityfec -application/patch-ops-error+xml xer -application/pdf pdf -application/pgp-encrypted pgp -# application/pgp-keys -application/pgp-signature asc sig -application/pics-rules prf -# application/pidf+xml -# application/pidf-diff+xml -application/pkcs10 p10 -application/pkcs7-mime p7m p7c -application/pkcs7-signature p7s -application/pkcs8 p8 -application/pkix-attr-cert ac -application/pkix-cert cer -application/pkix-crl crl -application/pkix-pkipath pkipath -application/pkixcmp pki -application/pls+xml pls -# application/poc-settings+xml -application/postscript ai eps ps -# application/prs.alvestrand.titrax-sheet -application/prs.cww cww -# application/prs.nprend -# application/prs.plucker -# application/prs.rdf-xml-crypt -# application/prs.xsf+xml -application/pskc+xml pskcxml -# application/qsig -application/rdf+xml rdf -application/reginfo+xml rif -application/relax-ng-compact-syntax rnc -# application/remote-printing -application/resource-lists+xml rl -application/resource-lists-diff+xml rld -# application/riscos -# application/rlmi+xml -application/rls-services+xml rs -application/rpki-ghostbusters gbr -application/rpki-manifest mft -application/rpki-roa roa -# application/rpki-updown -application/rsd+xml rsd -application/rss+xml rss -application/rtf rtf -# application/rtx -# application/samlassertion+xml -# application/samlmetadata+xml -application/sbml+xml sbml -application/scvp-cv-request scq -application/scvp-cv-response scs -application/scvp-vp-request spq -application/scvp-vp-response spp -application/sdp sdp -# application/set-payment -application/set-payment-initiation setpay -# application/set-registration -application/set-registration-initiation setreg -# application/sgml -# application/sgml-open-catalog -application/shf+xml shf -# application/sieve -# application/simple-filter+xml -# application/simple-message-summary -# application/simplesymbolcontainer -# application/slate -# application/smil -application/smil+xml smi smil -# application/soap+fastinfoset -# application/soap+xml -application/sparql-query rq -application/sparql-results+xml srx -# application/spirits-event+xml -application/srgs gram -application/srgs+xml grxml -application/sru+xml sru -application/ssdl+xml ssdl -application/ssml+xml ssml -# application/tamp-apex-update -# application/tamp-apex-update-confirm -# application/tamp-community-update -# application/tamp-community-update-confirm -# application/tamp-error -# application/tamp-sequence-adjust -# application/tamp-sequence-adjust-confirm -# application/tamp-status-query -# application/tamp-status-response -# application/tamp-update -# application/tamp-update-confirm -application/tei+xml tei teicorpus -application/thraud+xml tfi -# application/timestamp-query -# application/timestamp-reply -application/timestamped-data tsd -# application/tve-trigger -# application/ulpfec -# application/vcard+xml -# application/vemmi -# application/vividence.scriptfile -# application/vnd.3gpp.bsf+xml -application/vnd.3gpp.pic-bw-large plb -application/vnd.3gpp.pic-bw-small psb -application/vnd.3gpp.pic-bw-var pvb -# application/vnd.3gpp.sms -# application/vnd.3gpp2.bcmcsinfo+xml -# application/vnd.3gpp2.sms -application/vnd.3gpp2.tcap tcap -application/vnd.3m.post-it-notes pwn -application/vnd.accpac.simply.aso aso -application/vnd.accpac.simply.imp imp -application/vnd.acucobol acu -application/vnd.acucorp atc acutc -application/vnd.adobe.air-application-installer-package+zip air -application/vnd.adobe.formscentral.fcdt fcdt -application/vnd.adobe.fxp fxp fxpl -# application/vnd.adobe.partial-upload -application/vnd.adobe.xdp+xml xdp -application/vnd.adobe.xfdf xfdf -# application/vnd.aether.imp -# application/vnd.ah-barcode -application/vnd.ahead.space ahead -application/vnd.airzip.filesecure.azf azf -application/vnd.airzip.filesecure.azs azs -application/vnd.amazon.ebook azw -application/vnd.americandynamics.acc acc -application/vnd.amiga.ami ami -# application/vnd.amundsen.maze+xml -application/vnd.android.package-archive apk -application/vnd.anser-web-certificate-issue-initiation cii -application/vnd.anser-web-funds-transfer-initiation fti -application/vnd.antix.game-component atx -application/vnd.apple.installer+xml mpkg -application/vnd.apple.mpegurl m3u8 -# application/vnd.arastra.swi -application/vnd.aristanetworks.swi swi -application/vnd.astraea-software.iota iota -application/vnd.audiograph aep -# application/vnd.autopackage -# application/vnd.avistar+xml -application/vnd.blueice.multipass mpm -# application/vnd.bluetooth.ep.oob -application/vnd.bmi bmi -application/vnd.businessobjects rep -# application/vnd.cab-jscript -# application/vnd.canon-cpdl -# application/vnd.canon-lips -# application/vnd.cendio.thinlinc.clientconf -application/vnd.chemdraw+xml cdxml -application/vnd.chipnuts.karaoke-mmd mmd -application/vnd.cinderella cdy -# application/vnd.cirpack.isdn-ext -application/vnd.claymore cla -application/vnd.cloanto.rp9 rp9 -application/vnd.clonk.c4group c4g c4d c4f c4p c4u -application/vnd.cluetrust.cartomobile-config c11amc -application/vnd.cluetrust.cartomobile-config-pkg c11amz -# application/vnd.collection+json -# application/vnd.commerce-battelle -application/vnd.commonspace csp -application/vnd.contact.cmsg cdbcmsg -application/vnd.cosmocaller cmc -application/vnd.crick.clicker clkx -application/vnd.crick.clicker.keyboard clkk -application/vnd.crick.clicker.palette clkp -application/vnd.crick.clicker.template clkt -application/vnd.crick.clicker.wordbank clkw -application/vnd.criticaltools.wbs+xml wbs -application/vnd.ctc-posml pml -# application/vnd.ctct.ws+xml -# application/vnd.cups-pdf -# application/vnd.cups-postscript -application/vnd.cups-ppd ppd -# application/vnd.cups-raster -# application/vnd.cups-raw -# application/vnd.curl -application/vnd.curl.car car -application/vnd.curl.pcurl pcurl -# application/vnd.cybank -application/vnd.dart dart -application/vnd.data-vision.rdz rdz -application/vnd.dece.data uvf uvvf uvd uvvd -application/vnd.dece.ttml+xml uvt uvvt -application/vnd.dece.unspecified uvx uvvx -application/vnd.dece.zip uvz uvvz -application/vnd.denovo.fcselayout-link fe_launch -# application/vnd.dir-bi.plate-dl-nosuffix -application/vnd.dna dna -application/vnd.dolby.mlp mlp -# application/vnd.dolby.mobile.1 -# application/vnd.dolby.mobile.2 -application/vnd.dpgraph dpg -application/vnd.dreamfactory dfac -application/vnd.ds-keypoint kpxx -application/vnd.dvb.ait ait -# application/vnd.dvb.dvbj -# application/vnd.dvb.esgcontainer -# application/vnd.dvb.ipdcdftnotifaccess -# application/vnd.dvb.ipdcesgaccess -# application/vnd.dvb.ipdcesgaccess2 -# application/vnd.dvb.ipdcesgpdd -# application/vnd.dvb.ipdcroaming -# application/vnd.dvb.iptv.alfec-base -# application/vnd.dvb.iptv.alfec-enhancement -# application/vnd.dvb.notif-aggregate-root+xml -# application/vnd.dvb.notif-container+xml -# application/vnd.dvb.notif-generic+xml -# application/vnd.dvb.notif-ia-msglist+xml -# application/vnd.dvb.notif-ia-registration-request+xml -# application/vnd.dvb.notif-ia-registration-response+xml -# application/vnd.dvb.notif-init+xml -# application/vnd.dvb.pfr -application/vnd.dvb.service svc -# application/vnd.dxr -application/vnd.dynageo geo -# application/vnd.easykaraoke.cdgdownload -# application/vnd.ecdis-update -application/vnd.ecowin.chart mag -# application/vnd.ecowin.filerequest -# application/vnd.ecowin.fileupdate -# application/vnd.ecowin.series -# application/vnd.ecowin.seriesrequest -# application/vnd.ecowin.seriesupdate -# application/vnd.emclient.accessrequest+xml -application/vnd.enliven nml -# application/vnd.eprints.data+xml -application/vnd.epson.esf esf -application/vnd.epson.msf msf -application/vnd.epson.quickanime qam -application/vnd.epson.salt slt -application/vnd.epson.ssf ssf -# application/vnd.ericsson.quickcall -application/vnd.eszigno3+xml es3 et3 -# application/vnd.etsi.aoc+xml -# application/vnd.etsi.cug+xml -# application/vnd.etsi.iptvcommand+xml -# application/vnd.etsi.iptvdiscovery+xml -# application/vnd.etsi.iptvprofile+xml -# application/vnd.etsi.iptvsad-bc+xml -# application/vnd.etsi.iptvsad-cod+xml -# application/vnd.etsi.iptvsad-npvr+xml -# application/vnd.etsi.iptvservice+xml -# application/vnd.etsi.iptvsync+xml -# application/vnd.etsi.iptvueprofile+xml -# application/vnd.etsi.mcid+xml -# application/vnd.etsi.overload-control-policy-dataset+xml -# application/vnd.etsi.sci+xml -# application/vnd.etsi.simservs+xml -# application/vnd.etsi.tsl+xml -# application/vnd.etsi.tsl.der -# application/vnd.eudora.data -application/vnd.ezpix-album ez2 -application/vnd.ezpix-package ez3 -# application/vnd.f-secure.mobile -application/vnd.fdf fdf -application/vnd.fdsn.mseed mseed -application/vnd.fdsn.seed seed dataless -# application/vnd.ffsns -# application/vnd.fints -application/vnd.flographit gph -application/vnd.fluxtime.clip ftc -# application/vnd.font-fontforge-sfd -application/vnd.framemaker fm frame maker book -application/vnd.frogans.fnc fnc -application/vnd.frogans.ltf ltf -application/vnd.fsc.weblaunch fsc -application/vnd.fujitsu.oasys oas -application/vnd.fujitsu.oasys2 oa2 -application/vnd.fujitsu.oasys3 oa3 -application/vnd.fujitsu.oasysgp fg5 -application/vnd.fujitsu.oasysprs bh2 -# application/vnd.fujixerox.art-ex -# application/vnd.fujixerox.art4 -# application/vnd.fujixerox.hbpl -application/vnd.fujixerox.ddd ddd -application/vnd.fujixerox.docuworks xdw -application/vnd.fujixerox.docuworks.binder xbd -# application/vnd.fut-misnet -application/vnd.fuzzysheet fzs -application/vnd.genomatix.tuxedo txd -# application/vnd.geocube+xml -application/vnd.geogebra.file ggb -application/vnd.geogebra.tool ggt -application/vnd.geometry-explorer gex gre -application/vnd.geonext gxt -application/vnd.geoplan g2w -application/vnd.geospace g3w -# application/vnd.globalplatform.card-content-mgt -# application/vnd.globalplatform.card-content-mgt-response -application/vnd.gmx gmx -application/vnd.google-earth.kml+xml kml -application/vnd.google-earth.kmz kmz -application/vnd.grafeq gqf gqs -# application/vnd.gridmp -application/vnd.groove-account gac -application/vnd.groove-help ghf -application/vnd.groove-identity-message gim -application/vnd.groove-injector grv -application/vnd.groove-tool-message gtm -application/vnd.groove-tool-template tpl -application/vnd.groove-vcard vcg -# application/vnd.hal+json -application/vnd.hal+xml hal -application/vnd.handheld-entertainment+xml zmm -application/vnd.hbci hbci -# application/vnd.hcl-bireports -application/vnd.hhe.lesson-player les -application/vnd.hp-hpgl hpgl -application/vnd.hp-hpid hpid -application/vnd.hp-hps hps -application/vnd.hp-jlyt jlt -application/vnd.hp-pcl pcl -application/vnd.hp-pclxl pclxl -# application/vnd.httphone -application/vnd.hydrostatix.sof-data sfd-hdstx -# application/vnd.hzn-3d-crossword -# application/vnd.ibm.afplinedata -# application/vnd.ibm.electronic-media -application/vnd.ibm.minipay mpy -application/vnd.ibm.modcap afp listafp list3820 -application/vnd.ibm.rights-management irm -application/vnd.ibm.secure-container sc -application/vnd.iccprofile icc icm -application/vnd.igloader igl -application/vnd.immervision-ivp ivp -application/vnd.immervision-ivu ivu -# application/vnd.informedcontrol.rms+xml -# application/vnd.informix-visionary -# application/vnd.infotech.project -# application/vnd.infotech.project+xml -# application/vnd.innopath.wamp.notification -application/vnd.insors.igm igm -application/vnd.intercon.formnet xpw xpx -application/vnd.intergeo i2g -# application/vnd.intertrust.digibox -# application/vnd.intertrust.nncp -application/vnd.intu.qbo qbo -application/vnd.intu.qfx qfx -# application/vnd.iptc.g2.conceptitem+xml -# application/vnd.iptc.g2.knowledgeitem+xml -# application/vnd.iptc.g2.newsitem+xml -# application/vnd.iptc.g2.newsmessage+xml -# application/vnd.iptc.g2.packageitem+xml -# application/vnd.iptc.g2.planningitem+xml -application/vnd.ipunplugged.rcprofile rcprofile -application/vnd.irepository.package+xml irp -application/vnd.is-xpr xpr -application/vnd.isac.fcs fcs -application/vnd.jam jam -# application/vnd.japannet-directory-service -# application/vnd.japannet-jpnstore-wakeup -# application/vnd.japannet-payment-wakeup -# application/vnd.japannet-registration -# application/vnd.japannet-registration-wakeup -# application/vnd.japannet-setstore-wakeup -# application/vnd.japannet-verification -# application/vnd.japannet-verification-wakeup -application/vnd.jcp.javame.midlet-rms rms -application/vnd.jisp jisp -application/vnd.joost.joda-archive joda -application/vnd.kahootz ktz ktr -application/vnd.kde.karbon karbon -application/vnd.kde.kchart chrt -application/vnd.kde.kformula kfo -application/vnd.kde.kivio flw -application/vnd.kde.kontour kon -application/vnd.kde.kpresenter kpr kpt -application/vnd.kde.kspread ksp -application/vnd.kde.kword kwd kwt -application/vnd.kenameaapp htke -application/vnd.kidspiration kia -application/vnd.kinar kne knp -application/vnd.koan skp skd skt skm -application/vnd.kodak-descriptor sse -application/vnd.las.las+xml lasxml -# application/vnd.liberty-request+xml -application/vnd.llamagraphics.life-balance.desktop lbd -application/vnd.llamagraphics.life-balance.exchange+xml lbe -application/vnd.lotus-1-2-3 123 -application/vnd.lotus-approach apr -application/vnd.lotus-freelance pre -application/vnd.lotus-notes nsf -application/vnd.lotus-organizer org -application/vnd.lotus-screencam scm -application/vnd.lotus-wordpro lwp -application/vnd.macports.portpkg portpkg -# application/vnd.marlin.drm.actiontoken+xml -# application/vnd.marlin.drm.conftoken+xml -# application/vnd.marlin.drm.license+xml -# application/vnd.marlin.drm.mdcf -application/vnd.mcd mcd -application/vnd.medcalcdata mc1 -application/vnd.mediastation.cdkey cdkey -# application/vnd.meridian-slingshot -application/vnd.mfer mwf -application/vnd.mfmp mfm -application/vnd.micrografx.flo flo -application/vnd.micrografx.igx igx -application/vnd.mif mif -# application/vnd.minisoft-hp3000-save -# application/vnd.mitsubishi.misty-guard.trustweb -application/vnd.mobius.daf daf -application/vnd.mobius.dis dis -application/vnd.mobius.mbk mbk -application/vnd.mobius.mqy mqy -application/vnd.mobius.msl msl -application/vnd.mobius.plc plc -application/vnd.mobius.txf txf -application/vnd.mophun.application mpn -application/vnd.mophun.certificate mpc -# application/vnd.motorola.flexsuite -# application/vnd.motorola.flexsuite.adsi -# application/vnd.motorola.flexsuite.fis -# application/vnd.motorola.flexsuite.gotap -# application/vnd.motorola.flexsuite.kmr -# application/vnd.motorola.flexsuite.ttc -# application/vnd.motorola.flexsuite.wem -# application/vnd.motorola.iprm -application/vnd.mozilla.xul+xml xul -application/vnd.ms-artgalry cil -# application/vnd.ms-asf -application/vnd.ms-cab-compressed cab -# application/vnd.ms-color.iccprofile -application/vnd.ms-excel xls xlm xla xlc xlt xlw -application/vnd.ms-excel.addin.macroenabled.12 xlam -application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb -application/vnd.ms-excel.sheet.macroenabled.12 xlsm -application/vnd.ms-excel.template.macroenabled.12 xltm -application/vnd.ms-fontobject eot -application/vnd.ms-htmlhelp chm -application/vnd.ms-ims ims -application/vnd.ms-lrm lrm -# application/vnd.ms-office.activex+xml -application/vnd.ms-officetheme thmx -# application/vnd.ms-opentype -# application/vnd.ms-package.obfuscated-opentype -application/vnd.ms-pki.seccat cat -application/vnd.ms-pki.stl stl -# application/vnd.ms-playready.initiator+xml -application/vnd.ms-powerpoint ppt pps pot -application/vnd.ms-powerpoint.addin.macroenabled.12 ppam -application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm -application/vnd.ms-powerpoint.slide.macroenabled.12 sldm -application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm -application/vnd.ms-powerpoint.template.macroenabled.12 potm -# application/vnd.ms-printing.printticket+xml -application/vnd.ms-project mpp mpt -# application/vnd.ms-tnef -# application/vnd.ms-wmdrm.lic-chlg-req -# application/vnd.ms-wmdrm.lic-resp -# application/vnd.ms-wmdrm.meter-chlg-req -# application/vnd.ms-wmdrm.meter-resp -application/vnd.ms-word.document.macroenabled.12 docm -application/vnd.ms-word.template.macroenabled.12 dotm -application/vnd.ms-works wps wks wcm wdb -application/vnd.ms-wpl wpl -application/vnd.ms-xpsdocument xps -application/vnd.mseq mseq -# application/vnd.msign -# application/vnd.multiad.creator -# application/vnd.multiad.creator.cif -# application/vnd.music-niff -application/vnd.musician mus -application/vnd.muvee.style msty -application/vnd.mynfc taglet -# application/vnd.ncd.control -# application/vnd.ncd.reference -# application/vnd.nervana -# application/vnd.netfpx -application/vnd.neurolanguage.nlu nlu -application/vnd.nitf ntf nitf -application/vnd.noblenet-directory nnd -application/vnd.noblenet-sealer nns -application/vnd.noblenet-web nnw -# application/vnd.nokia.catalogs -# application/vnd.nokia.conml+wbxml -# application/vnd.nokia.conml+xml -# application/vnd.nokia.isds-radio-presets -# application/vnd.nokia.iptv.config+xml -# application/vnd.nokia.landmark+wbxml -# application/vnd.nokia.landmark+xml -# application/vnd.nokia.landmarkcollection+xml -# application/vnd.nokia.n-gage.ac+xml -application/vnd.nokia.n-gage.data ngdat -application/vnd.nokia.n-gage.symbian.install n-gage -# application/vnd.nokia.ncd -# application/vnd.nokia.pcd+wbxml -# application/vnd.nokia.pcd+xml -application/vnd.nokia.radio-preset rpst -application/vnd.nokia.radio-presets rpss -application/vnd.novadigm.edm edm -application/vnd.novadigm.edx edx -application/vnd.novadigm.ext ext -# application/vnd.ntt-local.file-transfer -# application/vnd.ntt-local.sip-ta_remote -# application/vnd.ntt-local.sip-ta_tcp_stream -application/vnd.oasis.opendocument.chart odc -application/vnd.oasis.opendocument.chart-template otc -application/vnd.oasis.opendocument.database odb -application/vnd.oasis.opendocument.formula odf -application/vnd.oasis.opendocument.formula-template odft -application/vnd.oasis.opendocument.graphics odg -application/vnd.oasis.opendocument.graphics-template otg -application/vnd.oasis.opendocument.image odi -application/vnd.oasis.opendocument.image-template oti -application/vnd.oasis.opendocument.presentation odp -application/vnd.oasis.opendocument.presentation-template otp -application/vnd.oasis.opendocument.spreadsheet ods -application/vnd.oasis.opendocument.spreadsheet-template ots -application/vnd.oasis.opendocument.text odt -application/vnd.oasis.opendocument.text-master odm -application/vnd.oasis.opendocument.text-template ott -application/vnd.oasis.opendocument.text-web oth -# application/vnd.obn -# application/vnd.oftn.l10n+json -# application/vnd.oipf.contentaccessdownload+xml -# application/vnd.oipf.contentaccessstreaming+xml -# application/vnd.oipf.cspg-hexbinary -# application/vnd.oipf.dae.svg+xml -# application/vnd.oipf.dae.xhtml+xml -# application/vnd.oipf.mippvcontrolmessage+xml -# application/vnd.oipf.pae.gem -# application/vnd.oipf.spdiscovery+xml -# application/vnd.oipf.spdlist+xml -# application/vnd.oipf.ueprofile+xml -# application/vnd.oipf.userprofile+xml -application/vnd.olpc-sugar xo -# application/vnd.oma-scws-config -# application/vnd.oma-scws-http-request -# application/vnd.oma-scws-http-response -# application/vnd.oma.bcast.associated-procedure-parameter+xml -# application/vnd.oma.bcast.drm-trigger+xml -# application/vnd.oma.bcast.imd+xml -# application/vnd.oma.bcast.ltkm -# application/vnd.oma.bcast.notification+xml -# application/vnd.oma.bcast.provisioningtrigger -# application/vnd.oma.bcast.sgboot -# application/vnd.oma.bcast.sgdd+xml -# application/vnd.oma.bcast.sgdu -# application/vnd.oma.bcast.simple-symbol-container -# application/vnd.oma.bcast.smartcard-trigger+xml -# application/vnd.oma.bcast.sprov+xml -# application/vnd.oma.bcast.stkm -# application/vnd.oma.cab-address-book+xml -# application/vnd.oma.cab-feature-handler+xml -# application/vnd.oma.cab-pcc+xml -# application/vnd.oma.cab-user-prefs+xml -# application/vnd.oma.dcd -# application/vnd.oma.dcdc -application/vnd.oma.dd2+xml dd2 -# application/vnd.oma.drm.risd+xml -# application/vnd.oma.group-usage-list+xml -# application/vnd.oma.pal+xml -# application/vnd.oma.poc.detailed-progress-report+xml -# application/vnd.oma.poc.final-report+xml -# application/vnd.oma.poc.groups+xml -# application/vnd.oma.poc.invocation-descriptor+xml -# application/vnd.oma.poc.optimized-progress-report+xml -# application/vnd.oma.push -# application/vnd.oma.scidm.messages+xml -# application/vnd.oma.xcap-directory+xml -# application/vnd.omads-email+xml -# application/vnd.omads-file+xml -# application/vnd.omads-folder+xml -# application/vnd.omaloc-supl-init -application/vnd.openofficeorg.extension oxt -# application/vnd.openxmlformats-officedocument.custom-properties+xml -# application/vnd.openxmlformats-officedocument.customxmlproperties+xml -# application/vnd.openxmlformats-officedocument.drawing+xml -# application/vnd.openxmlformats-officedocument.drawingml.chart+xml -# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml -# application/vnd.openxmlformats-officedocument.extended-properties+xml -# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml -# application/vnd.openxmlformats-officedocument.presentationml.comments+xml -# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml -# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml -# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml -application/vnd.openxmlformats-officedocument.presentationml.presentation pptx -# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml -application/vnd.openxmlformats-officedocument.presentationml.slide sldx -# application/vnd.openxmlformats-officedocument.presentationml.slide+xml -# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml -# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml -application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx -# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml -# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml -# application/vnd.openxmlformats-officedocument.presentationml.tags+xml -application/vnd.openxmlformats-officedocument.presentationml.template potx -# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx -# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx -# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml -# application/vnd.openxmlformats-officedocument.theme+xml -# application/vnd.openxmlformats-officedocument.themeoverride+xml -# application/vnd.openxmlformats-officedocument.vmldrawing -# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.document docx -# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx -# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml -# application/vnd.openxmlformats-package.core-properties+xml -# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml -# application/vnd.openxmlformats-package.relationships+xml -# application/vnd.quobject-quoxdocument -# application/vnd.osa.netdeploy -application/vnd.osgeo.mapguide.package mgp -# application/vnd.osgi.bundle -application/vnd.osgi.dp dp -application/vnd.osgi.subsystem esa -# application/vnd.otps.ct-kip+xml -application/vnd.palm pdb pqa oprc -# application/vnd.paos.xml -application/vnd.pawaafile paw -application/vnd.pg.format str -application/vnd.pg.osasli ei6 -# application/vnd.piaccess.application-licence -application/vnd.picsel efif -application/vnd.pmi.widget wg -# application/vnd.poc.group-advertisement+xml -application/vnd.pocketlearn plf -application/vnd.powerbuilder6 pbd -# application/vnd.powerbuilder6-s -# application/vnd.powerbuilder7 -# application/vnd.powerbuilder7-s -# application/vnd.powerbuilder75 -# application/vnd.powerbuilder75-s -# application/vnd.preminet -application/vnd.previewsystems.box box -application/vnd.proteus.magazine mgz -application/vnd.publishare-delta-tree qps -application/vnd.pvi.ptid1 ptid -# application/vnd.pwg-multiplexed -# application/vnd.pwg-xhtml-print+xml -# application/vnd.qualcomm.brew-app-res -application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb -# application/vnd.radisys.moml+xml -# application/vnd.radisys.msml+xml -# application/vnd.radisys.msml-audit+xml -# application/vnd.radisys.msml-audit-conf+xml -# application/vnd.radisys.msml-audit-conn+xml -# application/vnd.radisys.msml-audit-dialog+xml -# application/vnd.radisys.msml-audit-stream+xml -# application/vnd.radisys.msml-conf+xml -# application/vnd.radisys.msml-dialog+xml -# application/vnd.radisys.msml-dialog-base+xml -# application/vnd.radisys.msml-dialog-fax-detect+xml -# application/vnd.radisys.msml-dialog-fax-sendrecv+xml -# application/vnd.radisys.msml-dialog-group+xml -# application/vnd.radisys.msml-dialog-speech+xml -# application/vnd.radisys.msml-dialog-transform+xml -# application/vnd.rainstor.data -# application/vnd.rapid -application/vnd.realvnc.bed bed -application/vnd.recordare.musicxml mxl -application/vnd.recordare.musicxml+xml musicxml -# application/vnd.renlearn.rlprint -application/vnd.rig.cryptonote cryptonote -application/vnd.rim.cod cod -application/vnd.rn-realmedia rm -application/vnd.rn-realmedia-vbr rmvb -application/vnd.route66.link66+xml link66 -# application/vnd.rs-274x -# application/vnd.ruckus.download -# application/vnd.s3sms -application/vnd.sailingtracker.track st -# application/vnd.sbm.cid -# application/vnd.sbm.mid2 -# application/vnd.scribus -# application/vnd.sealed.3df -# application/vnd.sealed.csf -# application/vnd.sealed.doc -# application/vnd.sealed.eml -# application/vnd.sealed.mht -# application/vnd.sealed.net -# application/vnd.sealed.ppt -# application/vnd.sealed.tiff -# application/vnd.sealed.xls -# application/vnd.sealedmedia.softseal.html -# application/vnd.sealedmedia.softseal.pdf -application/vnd.seemail see -application/vnd.sema sema -application/vnd.semd semd -application/vnd.semf semf -application/vnd.shana.informed.formdata ifm -application/vnd.shana.informed.formtemplate itp -application/vnd.shana.informed.interchange iif -application/vnd.shana.informed.package ipk -application/vnd.simtech-mindmapper twd twds -application/vnd.smaf mmf -# application/vnd.smart.notebook -application/vnd.smart.teacher teacher -# application/vnd.software602.filler.form+xml -# application/vnd.software602.filler.form-xml-zip -application/vnd.solent.sdkm+xml sdkm sdkd -application/vnd.spotfire.dxp dxp -application/vnd.spotfire.sfs sfs -# application/vnd.sss-cod -# application/vnd.sss-dtf -# application/vnd.sss-ntf -application/vnd.stardivision.calc sdc -application/vnd.stardivision.draw sda -application/vnd.stardivision.impress sdd -application/vnd.stardivision.math smf -application/vnd.stardivision.writer sdw vor -application/vnd.stardivision.writer-global sgl -application/vnd.stepmania.package smzip -application/vnd.stepmania.stepchart sm -# application/vnd.street-stream -application/vnd.sun.xml.calc sxc -application/vnd.sun.xml.calc.template stc -application/vnd.sun.xml.draw sxd -application/vnd.sun.xml.draw.template std -application/vnd.sun.xml.impress sxi -application/vnd.sun.xml.impress.template sti -application/vnd.sun.xml.math sxm -application/vnd.sun.xml.writer sxw -application/vnd.sun.xml.writer.global sxg -application/vnd.sun.xml.writer.template stw -# application/vnd.sun.wadl+xml -application/vnd.sus-calendar sus susp -application/vnd.svd svd -# application/vnd.swiftview-ics -application/vnd.symbian.install sis sisx -application/vnd.syncml+xml xsm -application/vnd.syncml.dm+wbxml bdm -application/vnd.syncml.dm+xml xdm -# application/vnd.syncml.dm.notification -# application/vnd.syncml.ds.notification -application/vnd.tao.intent-module-archive tao -application/vnd.tcpdump.pcap pcap cap dmp -application/vnd.tmobile-livetv tmo -application/vnd.trid.tpt tpt -application/vnd.triscape.mxs mxs -application/vnd.trueapp tra -# application/vnd.truedoc -# application/vnd.ubisoft.webplayer -application/vnd.ufdl ufd ufdl -application/vnd.uiq.theme utz -application/vnd.umajin umj -application/vnd.unity unityweb -application/vnd.uoml+xml uoml -# application/vnd.uplanet.alert -# application/vnd.uplanet.alert-wbxml -# application/vnd.uplanet.bearer-choice -# application/vnd.uplanet.bearer-choice-wbxml -# application/vnd.uplanet.cacheop -# application/vnd.uplanet.cacheop-wbxml -# application/vnd.uplanet.channel -# application/vnd.uplanet.channel-wbxml -# application/vnd.uplanet.list -# application/vnd.uplanet.list-wbxml -# application/vnd.uplanet.listcmd -# application/vnd.uplanet.listcmd-wbxml -# application/vnd.uplanet.signal -application/vnd.vcx vcx -# application/vnd.vd-study -# application/vnd.vectorworks -# application/vnd.verimatrix.vcas -# application/vnd.vidsoft.vidconference -application/vnd.visio vsd vst vss vsw -application/vnd.visionary vis -# application/vnd.vividence.scriptfile -application/vnd.vsf vsf -# application/vnd.wap.sic -# application/vnd.wap.slc -application/vnd.wap.wbxml wbxml -application/vnd.wap.wmlc wmlc -application/vnd.wap.wmlscriptc wmlsc -application/vnd.webturbo wtb -# application/vnd.wfa.wsc -# application/vnd.wmc -# application/vnd.wmf.bootstrap -# application/vnd.wolfram.mathematica -# application/vnd.wolfram.mathematica.package -application/vnd.wolfram.player nbp -application/vnd.wordperfect wpd -application/vnd.wqd wqd -# application/vnd.wrq-hp3000-labelled -application/vnd.wt.stf stf -# application/vnd.wv.csp+wbxml -# application/vnd.wv.csp+xml -# application/vnd.wv.ssp+xml -application/vnd.xara xar -application/vnd.xfdl xfdl -# application/vnd.xfdl.webform -# application/vnd.xmi+xml -# application/vnd.xmpie.cpkg -# application/vnd.xmpie.dpkg -# application/vnd.xmpie.plan -# application/vnd.xmpie.ppkg -# application/vnd.xmpie.xlim -application/vnd.yamaha.hv-dic hvd -application/vnd.yamaha.hv-script hvs -application/vnd.yamaha.hv-voice hvp -application/vnd.yamaha.openscoreformat osf -application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg -# application/vnd.yamaha.remote-setup -application/vnd.yamaha.smaf-audio saf -application/vnd.yamaha.smaf-phrase spf -# application/vnd.yamaha.through-ngn -# application/vnd.yamaha.tunnel-udpencap -application/vnd.yellowriver-custom-menu cmp -application/vnd.zul zir zirz -application/vnd.zzazz.deck+xml zaz -application/voicexml+xml vxml -# application/vq-rtcpxr -# application/watcherinfo+xml -# application/whoispp-query -# application/whoispp-response -application/widget wgt -application/winhlp hlp -# application/wita -# application/wordperfect5.1 -application/wsdl+xml wsdl -application/wspolicy+xml wspolicy -application/x-7z-compressed 7z -application/x-abiword abw -application/x-ace-compressed ace -# application/x-amf -application/x-apple-diskimage dmg -application/x-authorware-bin aab x32 u32 vox -application/x-authorware-map aam -application/x-authorware-seg aas -application/x-bcpio bcpio -application/x-bittorrent torrent -application/x-blorb blb blorb -application/x-bzip bz -application/x-bzip2 bz2 boz -application/x-cbr cbr cba cbt cbz cb7 -application/x-cdlink vcd -application/x-cfs-compressed cfs -application/x-chat chat -application/x-chess-pgn pgn -application/x-conference nsc -# application/x-compress -application/x-cpio cpio -application/x-csh csh -application/x-debian-package deb udeb -application/x-dgc-compressed dgc -application/x-director dir dcr dxr cst cct cxt w3d fgd swa -application/x-doom wad -application/x-dtbncx+xml ncx -application/x-dtbook+xml dtb -application/x-dtbresource+xml res -application/x-dvi dvi -application/x-envoy evy -application/x-eva eva -application/x-font-bdf bdf -# application/x-font-dos -# application/x-font-framemaker -application/x-font-ghostscript gsf -# application/x-font-libgrx -application/x-font-linux-psf psf -application/x-font-otf otf -application/x-font-pcf pcf -application/x-font-snf snf -# application/x-font-speedo -# application/x-font-sunos-news -application/x-font-ttf ttf ttc -application/x-font-type1 pfa pfb pfm afm -application/font-woff woff -# application/x-font-vfont -application/x-freearc arc -application/x-futuresplash spl -application/x-gca-compressed gca -application/x-glulx ulx -application/x-gnumeric gnumeric -application/x-gramps-xml gramps -application/x-gtar gtar -# application/x-gzip -application/x-hdf hdf -application/x-install-instructions install -application/x-iso9660-image iso -application/x-java-jnlp-file jnlp -application/x-latex latex -application/x-lzh-compressed lzh lha -application/x-mie mie -application/x-mobipocket-ebook prc mobi -application/x-ms-application application -application/x-ms-shortcut lnk -application/x-ms-wmd wmd -application/x-ms-wmz wmz -application/x-ms-xbap xbap -application/x-msaccess mdb -application/x-msbinder obd -application/x-mscardfile crd -application/x-msclip clp -application/x-msdownload exe dll com bat msi -application/x-msmediaview mvb m13 m14 -application/x-msmetafile wmf wmz emf emz -application/x-msmoney mny -application/x-mspublisher pub -application/x-msschedule scd -application/x-msterminal trm -application/x-mswrite wri -application/x-netcdf nc cdf -application/x-nzb nzb -application/x-pkcs12 p12 pfx -application/x-pkcs7-certificates p7b spc -application/x-pkcs7-certreqresp p7r -application/x-rar-compressed rar -application/x-research-info-systems ris -application/x-sh sh -application/x-shar shar -application/x-shockwave-flash swf -application/x-silverlight-app xap -application/x-sql sql -application/x-stuffit sit -application/x-stuffitx sitx -application/x-subrip srt -application/x-sv4cpio sv4cpio -application/x-sv4crc sv4crc -application/x-t3vm-image t3 -application/x-tads gam -application/x-tar tar -application/x-tcl tcl -application/x-tex tex -application/x-tex-tfm tfm -application/x-texinfo texinfo texi -application/x-tgif obj -application/x-ustar ustar -application/x-wais-source src -application/x-x509-ca-cert der crt -application/x-xfig fig -application/x-xliff+xml xlf -application/x-xpinstall xpi -application/x-xz xz -application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8 -# application/x400-bp -application/xaml+xml xaml -# application/xcap-att+xml -# application/xcap-caps+xml -application/xcap-diff+xml xdf -# application/xcap-el+xml -# application/xcap-error+xml -# application/xcap-ns+xml -# application/xcon-conference-info-diff+xml -# application/xcon-conference-info+xml -application/xenc+xml xenc -application/xhtml+xml xhtml xht -# application/xhtml-voice+xml -application/xml xml xsl -application/xml-dtd dtd -# application/xml-external-parsed-entity -# application/xmpp+xml -application/xop+xml xop -application/xproc+xml xpl -application/xslt+xml xslt -application/xspf+xml xspf -application/xv+xml mxml xhvml xvml xvm -application/yang yang -application/yin+xml yin -application/zip zip -# audio/1d-interleaved-parityfec -# audio/32kadpcm -# audio/3gpp -# audio/3gpp2 -# audio/ac3 -audio/adpcm adp -# audio/amr -# audio/amr-wb -# audio/amr-wb+ -# audio/asc -# audio/atrac-advanced-lossless -# audio/atrac-x -# audio/atrac3 -audio/basic au snd -# audio/bv16 -# audio/bv32 -# audio/clearmode -# audio/cn -# audio/dat12 -# audio/dls -# audio/dsr-es201108 -# audio/dsr-es202050 -# audio/dsr-es202211 -# audio/dsr-es202212 -# audio/dv -# audio/dvi4 -# audio/eac3 -# audio/evrc -# audio/evrc-qcp -# audio/evrc0 -# audio/evrc1 -# audio/evrcb -# audio/evrcb0 -# audio/evrcb1 -# audio/evrcwb -# audio/evrcwb0 -# audio/evrcwb1 -# audio/example -# audio/fwdred -# audio/g719 -# audio/g722 -# audio/g7221 -# audio/g723 -# audio/g726-16 -# audio/g726-24 -# audio/g726-32 -# audio/g726-40 -# audio/g728 -# audio/g729 -# audio/g7291 -# audio/g729d -# audio/g729e -# audio/gsm -# audio/gsm-efr -# audio/gsm-hr-08 -# audio/ilbc -# audio/ip-mr_v2.5 -# audio/isac -# audio/l16 -# audio/l20 -# audio/l24 -# audio/l8 -# audio/lpc -audio/midi mid midi kar rmi -# audio/mobile-xmf -audio/mp4 mp4a -# audio/mp4a-latm -# audio/mpa -# audio/mpa-robust -audio/mpeg mpga mp2 mp2a mp3 m2a m3a -# audio/mpeg4-generic -# audio/musepack -audio/ogg oga ogg spx -# audio/opus -# audio/parityfec -# audio/pcma -# audio/pcma-wb -# audio/pcmu-wb -# audio/pcmu -# audio/prs.sid -# audio/qcelp -# audio/red -# audio/rtp-enc-aescm128 -# audio/rtp-midi -# audio/rtx -audio/s3m s3m -audio/silk sil -# audio/smv -# audio/smv0 -# audio/smv-qcp -# audio/sp-midi -# audio/speex -# audio/t140c -# audio/t38 -# audio/telephone-event -# audio/tone -# audio/uemclip -# audio/ulpfec -# audio/vdvi -# audio/vmr-wb -# audio/vnd.3gpp.iufp -# audio/vnd.4sb -# audio/vnd.audiokoz -# audio/vnd.celp -# audio/vnd.cisco.nse -# audio/vnd.cmles.radio-events -# audio/vnd.cns.anp1 -# audio/vnd.cns.inf1 -audio/vnd.dece.audio uva uvva -audio/vnd.digital-winds eol -# audio/vnd.dlna.adts -# audio/vnd.dolby.heaac.1 -# audio/vnd.dolby.heaac.2 -# audio/vnd.dolby.mlp -# audio/vnd.dolby.mps -# audio/vnd.dolby.pl2 -# audio/vnd.dolby.pl2x -# audio/vnd.dolby.pl2z -# audio/vnd.dolby.pulse.1 -audio/vnd.dra dra -audio/vnd.dts dts -audio/vnd.dts.hd dtshd -# audio/vnd.dvb.file -# audio/vnd.everad.plj -# audio/vnd.hns.audio -audio/vnd.lucent.voice lvp -audio/vnd.ms-playready.media.pya pya -# audio/vnd.nokia.mobile-xmf -# audio/vnd.nortel.vbk -audio/vnd.nuera.ecelp4800 ecelp4800 -audio/vnd.nuera.ecelp7470 ecelp7470 -audio/vnd.nuera.ecelp9600 ecelp9600 -# audio/vnd.octel.sbc -# audio/vnd.qcelp -# audio/vnd.rhetorex.32kadpcm -audio/vnd.rip rip -# audio/vnd.sealedmedia.softseal.mpeg -# audio/vnd.vmx.cvsd -# audio/vorbis -# audio/vorbis-config -audio/webm weba -audio/x-aac aac -audio/x-aiff aif aiff aifc -audio/x-caf caf -audio/x-flac flac -audio/x-matroska mka -audio/x-mpegurl m3u -audio/x-ms-wax wax -audio/x-ms-wma wma -audio/x-pn-realaudio ram ra -audio/x-pn-realaudio-plugin rmp -# audio/x-tta -audio/x-wav wav -audio/xm xm -chemical/x-cdx cdx -chemical/x-cif cif -chemical/x-cmdf cmdf -chemical/x-cml cml -chemical/x-csml csml -# chemical/x-pdb -chemical/x-xyz xyz -image/bmp bmp -image/cgm cgm -# image/example -# image/fits -image/g3fax g3 -image/gif gif -image/ief ief -# image/jp2 -image/jpeg jpeg jpg jpe -# image/jpm -# image/jpx -image/ktx ktx -# image/naplps -image/png png -image/prs.btif btif -# image/prs.pti -image/sgi sgi -image/svg+xml svg svgz -# image/t38 -image/tiff tiff tif -# image/tiff-fx -image/vnd.adobe.photoshop psd -# image/vnd.cns.inf2 -image/vnd.dece.graphic uvi uvvi uvg uvvg -image/vnd.dvb.subtitle sub -image/vnd.djvu djvu djv -image/vnd.dwg dwg -image/vnd.dxf dxf -image/vnd.fastbidsheet fbs -image/vnd.fpx fpx -image/vnd.fst fst -image/vnd.fujixerox.edmics-mmr mmr -image/vnd.fujixerox.edmics-rlc rlc -# image/vnd.globalgraphics.pgb -# image/vnd.microsoft.icon -# image/vnd.mix -image/vnd.ms-modi mdi -image/vnd.ms-photo wdp -image/vnd.net-fpx npx -# image/vnd.radiance -# image/vnd.sealed.png -# image/vnd.sealedmedia.softseal.gif -# image/vnd.sealedmedia.softseal.jpg -# image/vnd.svf -image/vnd.wap.wbmp wbmp -image/vnd.xiff xif -image/webp webp -image/x-3ds 3ds -image/x-cmu-raster ras -image/x-cmx cmx -image/x-freehand fh fhc fh4 fh5 fh7 -image/x-icon ico -image/x-mrsid-image sid -image/x-pcx pcx -image/x-pict pic pct -image/x-portable-anymap pnm -image/x-portable-bitmap pbm -image/x-portable-graymap pgm -image/x-portable-pixmap ppm -image/x-rgb rgb -image/x-tga tga -image/x-xbitmap xbm -image/x-xpixmap xpm -image/x-xwindowdump xwd -# message/cpim -# message/delivery-status -# message/disposition-notification -# message/example -# message/external-body -# message/feedback-report -# message/global -# message/global-delivery-status -# message/global-disposition-notification -# message/global-headers -# message/http -# message/imdn+xml -# message/news -# message/partial -message/rfc822 eml mime -# message/s-http -# message/sip -# message/sipfrag -# message/tracking-status -# message/vnd.si.simp -# model/example -model/iges igs iges -model/mesh msh mesh silo -model/vnd.collada+xml dae -model/vnd.dwf dwf -# model/vnd.flatland.3dml -model/vnd.gdl gdl -# model/vnd.gs-gdl -# model/vnd.gs.gdl -model/vnd.gtw gtw -# model/vnd.moml+xml -model/vnd.mts mts -# model/vnd.parasolid.transmit.binary -# model/vnd.parasolid.transmit.text -model/vnd.vtu vtu -model/vrml wrl vrml -model/x3d+binary x3db x3dbz -model/x3d+vrml x3dv x3dvz -model/x3d+xml x3d x3dz -# multipart/alternative -# multipart/appledouble -# multipart/byteranges -# multipart/digest -# multipart/encrypted -# multipart/example -# multipart/form-data -# multipart/header-set -# multipart/mixed -# multipart/parallel -# multipart/related -# multipart/report -# multipart/signed -# multipart/voice-message -# text/1d-interleaved-parityfec -text/cache-manifest appcache -text/calendar ics ifb -text/css css -text/csv csv -# text/directory -# text/dns -# text/ecmascript -# text/enriched -# text/example -# text/fwdred -text/html html htm -# text/javascript -text/n3 n3 -# text/parityfec -text/plain txt text conf def list log in -# text/prs.fallenstein.rst -text/prs.lines.tag dsc -# text/vnd.radisys.msml-basic-layout -# text/red -# text/rfc822-headers -text/richtext rtx -# text/rtf -# text/rtp-enc-aescm128 -# text/rtx -text/sgml sgml sgm -# text/t140 -text/tab-separated-values tsv -text/troff t tr roff man me ms -text/turtle ttl -# text/ulpfec -text/uri-list uri uris urls -text/vcard vcard -# text/vnd.abc -text/vnd.curl curl -text/vnd.curl.dcurl dcurl -text/vnd.curl.scurl scurl -text/vnd.curl.mcurl mcurl -# text/vnd.dmclientscript -text/vnd.dvb.subtitle sub -# text/vnd.esmertec.theme-descriptor -text/vnd.fly fly -text/vnd.fmi.flexstor flx -text/vnd.graphviz gv -text/vnd.in3d.3dml 3dml -text/vnd.in3d.spot spot -# text/vnd.iptc.newsml -# text/vnd.iptc.nitf -# text/vnd.latex-z -# text/vnd.motorola.reflex -# text/vnd.ms-mediapackage -# text/vnd.net2phone.commcenter.command -# text/vnd.si.uricatalogue -text/vnd.sun.j2me.app-descriptor jad -# text/vnd.trolltech.linguist -# text/vnd.wap.si -# text/vnd.wap.sl -text/vnd.wap.wml wml -text/vnd.wap.wmlscript wmls -text/x-asm s asm -text/x-c c cc cxx cpp h hh dic -text/x-fortran f for f77 f90 -text/x-java-source java -text/x-opml opml -text/x-pascal p pas -text/x-nfo nfo -text/x-setext etx -text/x-sfv sfv -text/x-uuencode uu -text/x-vcalendar vcs -text/x-vcard vcf -# text/xml -# text/xml-external-parsed-entity -# video/1d-interleaved-parityfec -video/3gpp 3gp -# video/3gpp-tt -video/3gpp2 3g2 -# video/bmpeg -# video/bt656 -# video/celb -# video/dv -# video/example -video/h261 h261 -video/h263 h263 -# video/h263-1998 -# video/h263-2000 -video/h264 h264 -# video/h264-rcdo -# video/h264-svc -video/jpeg jpgv -# video/jpeg2000 -video/jpm jpm jpgm -video/mj2 mj2 mjp2 -# video/mp1s -# video/mp2p -# video/mp2t -video/mp4 mp4 mp4v mpg4 -# video/mp4v-es -video/mpeg mpeg mpg mpe m1v m2v -# video/mpeg4-generic -# video/mpv -# video/nv -video/ogg ogv -# video/parityfec -# video/pointer -video/quicktime qt mov -# video/raw -# video/rtp-enc-aescm128 -# video/rtx -# video/smpte292m -# video/ulpfec -# video/vc1 -# video/vnd.cctv -video/vnd.dece.hd uvh uvvh -video/vnd.dece.mobile uvm uvvm -# video/vnd.dece.mp4 -video/vnd.dece.pd uvp uvvp -video/vnd.dece.sd uvs uvvs -video/vnd.dece.video uvv uvvv -# video/vnd.directv.mpeg -# video/vnd.directv.mpeg-tts -# video/vnd.dlna.mpeg-tts -video/vnd.dvb.file dvb -video/vnd.fvt fvt -# video/vnd.hns.video -# video/vnd.iptvforum.1dparityfec-1010 -# video/vnd.iptvforum.1dparityfec-2005 -# video/vnd.iptvforum.2dparityfec-1010 -# video/vnd.iptvforum.2dparityfec-2005 -# video/vnd.iptvforum.ttsavc -# video/vnd.iptvforum.ttsmpeg2 -# video/vnd.motorola.video -# video/vnd.motorola.videop -video/vnd.mpegurl mxu m4u -video/vnd.ms-playready.media.pyv pyv -# video/vnd.nokia.interleaved-multimedia -# video/vnd.nokia.videovoip -# video/vnd.objectvideo -# video/vnd.sealed.mpeg1 -# video/vnd.sealed.mpeg4 -# video/vnd.sealed.swf -# video/vnd.sealedmedia.softseal.mov -video/vnd.uvvu.mp4 uvu uvvu -video/vnd.vivo viv -video/webm webm -video/x-f4v f4v -video/x-fli fli -video/x-flv flv -video/x-m4v m4v -video/x-matroska mkv mk3d mks -video/x-mng mng -video/x-ms-asf asf asx -video/x-ms-vob vob -video/x-ms-wm wm -video/x-ms-wmv wmv -video/x-ms-wmx wmx -video/x-ms-wvx wvx -video/x-msvideo avi -video/x-sgi-movie movie -video/x-smv smv -x-conference/x-cooltalk ice diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/node.types b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/node.types deleted file mode 100644 index 55b2cf79..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/node.types +++ /dev/null @@ -1,77 +0,0 @@ -# What: WebVTT -# Why: To allow formats intended for marking up external text track resources. -# http://dev.w3.org/html5/webvtt/ -# Added by: niftylettuce -text/vtt vtt - -# What: Google Chrome Extension -# Why: To allow apps to (work) be served with the right content type header. -# http://codereview.chromium.org/2830017 -# Added by: niftylettuce -application/x-chrome-extension crx - -# What: HTC support -# Why: To properly render .htc files such as CSS3PIE -# Added by: niftylettuce -text/x-component htc - -# What: HTML5 application cache manifes ('.manifest' extension) -# Why: De-facto standard. Required by Mozilla browser when serving HTML5 apps -# per https://developer.mozilla.org/en/offline_resources_in_firefox -# Added by: louisremi -text/cache-manifest manifest - -# What: node binary buffer format -# Why: semi-standard extension w/in the node community -# Added by: tootallnate -application/octet-stream buffer - -# What: The "protected" MP-4 formats used by iTunes. -# Why: Required for streaming music to browsers (?) -# Added by: broofa -application/mp4 m4p -audio/mp4 m4a - -# What: Video format, Part of RFC1890 -# Why: See https://github.com/bentomas/node-mime/pull/6 -# Added by: mjrusso -video/MP2T ts - -# What: EventSource mime type -# Why: mime type of Server-Sent Events stream -# http://www.w3.org/TR/eventsource/#text-event-stream -# Added by: francois2metz -text/event-stream event-stream - -# What: Mozilla App manifest mime type -# Why: https://developer.mozilla.org/en/Apps/Manifest#Serving_manifests -# Added by: ednapiranha -application/x-web-app-manifest+json webapp - -# What: Lua file types -# Why: Googling around shows de-facto consensus on these -# Added by: creationix (Issue #45) -text/x-lua lua -application/x-lua-bytecode luac - -# What: Markdown files, as per http://daringfireball.net/projects/markdown/syntax -# Why: http://stackoverflow.com/questions/10701983/what-is-the-mime-type-for-markdown -# Added by: avoidwork -text/x-markdown markdown md mkd - -# What: ini files -# Why: because they're just text files -# Added by: Matthew Kastor -text/plain ini - -# What: DASH Adaptive Streaming manifest -# Why: https://developer.mozilla.org/en-US/docs/DASH_Adaptive_Streaming_for_HTML_5_Video -# Added by: eelcocramer -application/dash+xml mdp - -# What: OpenType font files - http://www.microsoft.com/typography/otspec/ -# Why: Browsers usually ignore the font MIME types and sniff the content, -# but Chrome, shows a warning if OpenType fonts aren't served with -# the `font/opentype` MIME type: http://i.imgur.com/8c5RN8M.png. -# Added by: alrra -font/opentype otf diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/.npmignore deleted file mode 100644 index fd4f2b06..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.DS_Store diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/LICENSE.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/LICENSE.md deleted file mode 100644 index f039427f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/LICENSE.md +++ /dev/null @@ -1,2 +0,0 @@ -Copyright (c) 2010-2012 Robert Kieffer -MIT License - http://opensource.org/licenses/mit-license.php diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/README.md deleted file mode 100644 index e436a89f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/README.md +++ /dev/null @@ -1,207 +0,0 @@ -# node-uuid - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Generate RFC4122 version 1 or version 4 UUIDs -* Runs in node.js and all browsers. -* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid'). -* Cryptographically strong random # generation on supporting platforms -* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! ) -* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html) - -## Getting Started - -Install it in your browser: - -```html -<script src="uuid.js"></script> -``` - -Or in node.js: - -``` -npm install node-uuid -``` - -```javascript -var uuid = require('node-uuid'); -``` - -Then create some ids ... - -```javascript -// Generate a v1 (time-based) id -uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - -// Generate a v4 (random) id -uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' -``` - -## API - -### uuid.v1([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Notes: - -1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v1({ - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -var arr = new Array(32); // -> [] -uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] - -// Optionally use uuid.unparse() to get stringify the ids -uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' -uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' -``` - -### uuid.v4([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v4({ - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" -``` - -Example: Generate two IDs in a single buffer - -```javascript -var buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); -``` - -### uuid.parse(id[, buffer[, offset]]) -### uuid.unparse(buffer[, offset]) - -Parse and unparse UUIDs - - * `id` - (String) UUID(-like) string - * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used - * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 - -Example parsing and unparsing a UUID string - -```javascript -var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10> -var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' -``` - -### uuid.noConflict() - -(Browsers only) Set `uuid` property back to it's previous value. - -Returns the node-uuid object. - -Example: - -```javascript -var myUuid = uuid.noConflict(); -myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' -``` - -## Deprecated APIs - -Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. - -### uuid([format [, buffer [, offset]]]) - -uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). - -### uuid.BufferClass - -The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API. - -## Testing - -In node.js - -``` -> cd test -> node test.js -``` - -In Browser - -``` -open test/test.html -``` - -### Benchmarking - -Requires node.js - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -For a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark) - -For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - -## Release notes - -### 1.4.0 - -* Improved module context detection -* Removed public RNG functions - -### 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - -### 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/README.md deleted file mode 100644 index aaeb2ea0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# node-uuid Benchmarks - -### Results - -To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark - -### Run them yourself - -node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. - -To prepare and run the benchmark issue; - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -You'll see an output like this one: - -``` -# v4 -nodeuuid.v4(): 854700 uuids/second -nodeuuid.v4('binary'): 788643 uuids/second -nodeuuid.v4('binary', buffer): 1336898 uuids/second -uuid(): 479386 uuids/second -uuid('binary'): 582072 uuids/second -uuidjs.create(4): 312304 uuids/second - -# v1 -nodeuuid.v1(): 938086 uuids/second -nodeuuid.v1('binary'): 683060 uuids/second -nodeuuid.v1('binary', buffer): 1644736 uuids/second -uuidjs.create(1): 190621 uuids/second -``` - -* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. -* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. - -If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: - -``` -for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; -``` - -If you're interested in how performance varies between different node versions, you can issue the above command multiple times. - -You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: - -``` -(cd benchmark/ && ./bench.sh) -``` - -This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu deleted file mode 100644 index a342fbbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu +++ /dev/null @@ -1,174 +0,0 @@ -#!/opt/local/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.4 patchlevel 3 -# last modified March 2011 -# System: Darwin 10.8.0 -# -# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 -# Thomas Williams, Colin Kelley and many others -# -# gnuplot home: http://www.gnuplot.info -# faq, bugs, etc: type "help seeking-assistance" -# immediate help: type "help" -# plot window: hit 'h' -set terminal postscript eps noenhanced defaultplex \ - leveldefault color colortext \ - solid linewidth 1.2 butt noclip \ - palfuncparam 2000,0.003 \ - "Helvetica" 14 -set output 'bench.eps' -unset clip points -set clip one -unset clip two -set bar 1.000000 front -set border 31 front linetype -1 linewidth 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 -set style circle radius graph 0.02, first 0, 0 -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 -set key maxcolumns 2 maxrows 0 -unset label -unset arrow -set style increment default -unset style line -set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 -unset style arrow -set style histogram clustered gap 2 title offset character 0, 0, 0 -unset logscale -set offsets graph 0.05, 0.15, 0, 0 -set pointsize 1.5 -set pointintervalbox 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -unset hidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data points -set style function lines -set xzeroaxis linetype -2 linewidth 1.000 -set yzeroaxis linetype -2 linewidth 1.000 -set zzeroaxis linetype -2 linewidth 1.000 -set x2zeroaxis linetype -2 linewidth 1.000 -set y2zeroaxis linetype -2 linewidth 1.000 -set ticslevel 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set xtics norangelimit -set xtics () -set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set ytics autofreq norangelimit -set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 -set ztics autofreq norangelimit -set nox2tics -set noy2tics -set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set cbtics autofreq norangelimit -set title "" -set title offset character 0, 0, 0 font "" norotate -set timestamp bottom -set timestamp "" -set timestamp offset character 0, 0, 0 font "" norotate -set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale rfixmin -set autoscale rfixmax -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set autoscale tfixmin -set autoscale tfixmax -set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale ufixmin -set autoscale ufixmax -set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale vfixmin -set autoscale vfixmax -set xlabel "" -set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set x2label "" -set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate -set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) -set autoscale xfixmin -set autoscale xfixmax -set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) -set autoscale x2fixmin -set autoscale x2fixmax -set ylabel "" -set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set y2label "" -set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) -set autoscale yfixmin -set autoscale yfixmax -set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) -set autoscale y2fixmin -set autoscale y2fixmax -set zlabel "" -set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale zfixmin -set autoscale zfixmax -set cblabel "" -set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale cbfixmin -set autoscale cbfixmax -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set pm3d explicit at s -set pm3d scansautomatic -set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault -set loadpath -set fontpath -set fit noerrorvariables -GNUTERM = "aqua" -plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 -# EOF diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.sh deleted file mode 100755 index d870a0cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# for a given node version run: -# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; - -PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte') -FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es) -INDICES=(2 3 2 3 2 2 2 2 2) -VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) -TMPJOIN="tmp_join" -OUTPUT="bench_results.txt" - -for I in ${!FILES[*]}; do - F=${FILES[$I]} - P=${PATTERNS[$I]} - INDEX=${INDICES[$I]} - echo "version $F" > $F - for V in $VERSIONS; do - (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F - done - if [ $I == 0 ]; then - cat $F > $TMPJOIN - else - join $TMPJOIN $F > $OUTPUT - cp $OUTPUT $TMPJOIN - fi - rm $F -done - -rm $TMPJOIN - -gnuplot bench.gnu -convert -density 200 -resize 800x560 -flatten bench.eps bench.png -rm bench.eps diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c deleted file mode 100644 index dbfc75f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include <stdio.h> -#include <unistd.h> -#include <sys/time.h> -#include <uuid/uuid.h> - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js deleted file mode 100644 index 40e6efbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js +++ /dev/null @@ -1,84 +0,0 @@ -try { - var nodeuuid = require('../uuid'); -} catch (e) { - console.error('node-uuid require failed - skipping tests'); -} - -try { - var uuid = require('uuid'); -} catch (e) { - console.error('uuid require failed - skipping tests'); -} - -try { - var uuidjs = require('uuid-js'); -} catch (e) { - console.error('uuid-js require failed - skipping tests'); -} - -var N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -console.log('# v4'); - -// node-uuid - string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); - rate('nodeuuid.v4() - using node.js crypto RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG}); - rate('nodeuuid.v4() - using Math.random() RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); - rate('nodeuuid.v4(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); - rate('nodeuuid.v4(\'binary\', buffer)', t); -} - -// libuuid - string form -if (uuid) { - for (var i = 0, t = Date.now(); i < N; i++) uuid(); - rate('uuid()', t); - - for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); - rate('uuid(\'binary\')', t); -} - -// uuid-js - string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); - rate('uuidjs.create(4)', t); -} - -// 140byte.es -for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)}); -rate('140byte.es_v4', t); - -console.log(''); -console.log('# v1'); - -// node-uuid - v1 string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); - rate('nodeuuid.v1()', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); - rate('nodeuuid.v1(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); - rate('nodeuuid.v1(\'binary\', buffer)', t); -} - -// uuid-js - v1 string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); - rate('uuidjs.create(1)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/component.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/component.json deleted file mode 100644 index ace21348..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/component.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "node-uuid", - "repo": "broofa/node-uuid", - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "version": "1.4.0", - "author": "Robert Kieffer <robert@broofa.com>", - "contributors": [ - {"name": "Christoph Tavan <dev@tavan.de>", "github": "https://github.com/ctavan"} - ], - "keywords": ["uuid", "guid", "rfc4122"], - "dependencies": {}, - "development": {}, - "main": "uuid.js", - "scripts": [ - "uuid.js" - ], - "license": "MIT" -} \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/package.json deleted file mode 100644 index e6f518be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "node-uuid", - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "url": "http://github.com/broofa/node-uuid", - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com" - }, - "contributors": [ - { - "name": "Christoph Tavan", - "email": "dev@tavan.de" - } - ], - "lib": ".", - "main": "./uuid.js", - "repository": { - "type": "git", - "url": "https://github.com/broofa/node-uuid.git" - }, - "version": "1.4.1", - "readme": "# node-uuid\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid').\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src=\"uuid.js\"></script>\n```\n\nOr in node.js:\n\n```\nnpm install node-uuid\n```\n\n```javascript\nvar uuid = require('node-uuid');\n```\n\nThen create some ids ...\n\n```javascript\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the node-uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/broofa/node-uuid/issues" - }, - "homepage": "https://github.com/broofa/node-uuid", - "_id": "node-uuid@1.4.1", - "dist": { - "shasum": "e937c5cdd70594274f11a11d3ae751f5c5857c73" - }, - "_from": "node-uuid@~1.4.0", - "_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/compare_v1.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/compare_v1.js deleted file mode 100644 index 05af8221..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/compare_v1.js +++ /dev/null @@ -1,63 +0,0 @@ -var assert = require('assert'), - nodeuuid = require('../uuid'), - uuidjs = require('uuid-js'), - libuuid = require('uuid').generate, - util = require('util'), - exec = require('child_process').exec, - os = require('os'); - -// On Mac Os X / macports there's only the ossp-uuid package that provides uuid -// On Linux there's uuid-runtime which provides uuidgen -var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t'; - -function compare(ids) { - console.log(ids); - for (var i = 0; i < ids.length; i++) { - var id = ids[i].split('-'); - id = [id[2], id[1], id[0]].join(''); - ids[i] = id; - } - var sorted = ([].concat(ids)).sort(); - - if (sorted.toString() !== ids.toString()) { - console.log('Warning: sorted !== ids'); - } else { - console.log('everything in order!'); - } -} - -// Test time order of v1 uuids -var ids = []; -while (ids.length < 10e3) ids.push(nodeuuid.v1()); - -var max = 10; -console.log('node-uuid:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(nodeuuid.v1()); -compare(ids); - -console.log(''); -console.log('uuidjs:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString()); -compare(ids); - -console.log(''); -console.log('libuuid:'); -ids = []; -var count = 0; -var last = function() { - compare(ids); -} -var cb = function(err, stdout, stderr) { - ids.push(stdout.substring(0, stdout.length-1)); - count++; - if (count < max) { - return next(); - } - last(); -}; -var next = function() { - exec(uuidCmd, cb); -}; -next(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.html b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.html deleted file mode 100644 index d80326ec..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.html +++ /dev/null @@ -1,17 +0,0 @@ -<html> - <head> - <style> - div { - font-family: monospace; - font-size: 8pt; - } - div.log {color: #444;} - div.warn {color: #550;} - div.error {color: #800; font-weight: bold;} - </style> - <script src="../uuid.js"></script> - </head> - <body> - <script src="./test.js"></script> - </body> -</html> diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.js deleted file mode 100644 index 24692256..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.js +++ /dev/null @@ -1,228 +0,0 @@ -if (!this.uuid) { - // node.js - uuid = require('../uuid'); -} - -// -// x-platform log/assert shims -// - -function _log(msg, type) { - type = type || 'log'; - - if (typeof(document) != 'undefined') { - document.write('<div class="' + type + '">' + msg.replace(/\n/g, '<br />') + '</div>'); - } - if (typeof(console) != 'undefined') { - var color = { - log: '\033[39m', - warn: '\033[33m', - error: '\033[31m' - }; - console[type](color[type] + msg + color.log); - } -} - -function log(msg) {_log(msg, 'log');} -function warn(msg) {_log(msg, 'warn');} -function error(msg) {_log(msg, 'error');} - -function assert(res, msg) { - if (!res) { - error('FAIL: ' + msg); - } else { - log('Pass: ' + msg); - } -} - -// -// Unit tests -// - -// Verify ordering of v1 ids created with explicit times -var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 - -function compare(name, ids) { - ids = ids.map(function(id) { - return id.split('-').reverse().join('-'); - }).sort(); - var sorted = ([].concat(ids)).sort(); - - assert(sorted.toString() == ids.toString(), name + ' have expected order'); -} - -// Verify ordering of v1 ids created using default behavior -compare('uuids with current time', [ - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1() -]); - -// Verify ordering of v1 ids created with explicit times -compare('uuids with time option', [ - uuid.v1({msecs: TIME - 10*3600*1000}), - uuid.v1({msecs: TIME - 1}), - uuid.v1({msecs: TIME}), - uuid.v1({msecs: TIME + 1}), - uuid.v1({msecs: TIME + 28*24*3600*1000}) -]); - -assert( - uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}), - 'IDs created at same msec are different' -); - -// Verify throw if too many ids created -var thrown = false; -try { - uuid.v1({msecs: TIME, nsecs: 10000}); -} catch (e) { - thrown = true; -} -assert(thrown, 'Exception thrown when > 10K ids created in 1 ms'); - -// Verify clock regression bumps clockseq -var uidt = uuid.v1({msecs: TIME}); -var uidtb = uuid.v1({msecs: TIME - 1}); -assert( - parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq' -); - -// Verify clock regression bumps clockseq -var uidtn = uuid.v1({msecs: TIME, nsecs: 10}); -var uidtnb = uuid.v1({msecs: TIME, nsecs: 9}); -assert( - parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq' -); - -// Verify explicit options produce expected id -var id = uuid.v1({ - msecs: 1321651533573, - nsecs: 5432, - clockseq: 0x385c, - node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ] -}); -assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); - -// Verify adjacent ids across a msec boundary are 1 time unit apart -var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); -var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - -var before = u0.split('-')[0], after = u1.split('-')[0]; -var dt = parseInt(after, 16) - parseInt(before, 16); -assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); - -// -// Test parse/unparse -// - -id = '00112233445566778899aabbccddeeff'; -assert(uuid.unparse(uuid.parse(id.substr(0,10))) == - '00112233-4400-0000-0000-000000000000', 'Short parse'); -assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) == - '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse'); - -// -// Perf tests -// - -var generators = { - v1: uuid.v1, - v4: uuid.v4 -}; - -var UUID_FORMAT = { - v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i, - v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i -}; - -var N = 1e4; - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second'); -} - -for (var version in generators) { - var counts = {}, max = 0; - var generator = generators[version]; - var format = UUID_FORMAT[version]; - - log('\nSanity check ' + N + ' ' + version + ' uuids'); - for (var i = 0, ok = 0; i < N; i++) { - id = generator(); - if (!format.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - assert(fail, id + ' is not a valid id'); - } - - // Count digits for our randomness check - if (version == 'v4') { - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } - } - } - - // Check randomness for v4 UUIDs - if (version == 'v4') { - // Limit that we get worried about randomness. (Purely empirical choice, this!) - var limit = 2*100*Math.sqrt(1/N); - - log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)'); - - for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)'); - } - } -} - -// Perf tests -for (var version in generators) { - log('\nPerformance testing ' + version + ' UUIDs'); - var generator = generators[version]; - var buf = new uuid.BufferClass(16); - - for (var i = 0, t = Date.now(); i < N; i++) generator(); - rate('uuid.' + version + '()', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary'); - rate('uuid.' + version + '(\'binary\')', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf); - rate('uuid.' + version + '(\'binary\', buffer)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/uuid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/uuid.js deleted file mode 100644 index 2fac6dc4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/uuid.js +++ /dev/null @@ -1,245 +0,0 @@ -// uuid.js -// -// Copyright (c) 2010-2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -(function() { - var _global = this; - - // Unique ID creation requires a high quality random # generator. We feature - // detect to determine the best RNG source, normalizing to a function that - // returns 128-bits of randomness, since that's what's usually required - var _rng; - - // Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html - // - // Moderately fast, high quality - if (typeof(require) == 'function') { - try { - var _rb = require('crypto').randomBytes; - _rng = _rb && function() {return _rb(16);}; - } catch(e) {} - } - - if (!_rng && _global.crypto && crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // - // Moderately fast, high quality - var _rnds8 = new Uint8Array(16); - _rng = function whatwgRNG() { - crypto.getRandomValues(_rnds8); - return _rnds8; - }; - } - - if (!_rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - _rng = function() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return _rnds; - }; - } - - // Buffer class to use - var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array; - - // Maps for number <-> hex string conversion - var _byteToHex = []; - var _hexToByte = {}; - for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; - } - - // **`parse()` - Parse a UUID into it's component bytes** - function parse(s, buf, offset) { - var i = (buf && offset) || 0, ii = 0; - - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) { - if (ii < 16) { // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); - - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; - } - - return buf; - } - - // **`unparse()` - Convert UUID byte array (ala parse()) into a string** - function unparse(buf, offset) { - var i = offset || 0, bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]]; - } - - // **`v1()` - Generate time-based UUID** - // - // Inspired by https://github.com/LiosK/UUID.js - // and http://docs.python.org/library/uuid.html - - // random #'s we need to init node and clockseq - var _seedBytes = _rng(); - - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] - ]; - - // Per 4.2.2, randomize (14 bit) clockseq - var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; - - // Previous uuid creation time - var _lastMSecs = 0, _lastNSecs = 0; - - // See https://github.com/broofa/node-uuid for API details - function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - - var clockseq = options.clockseq != null ? options.clockseq : _clockseq; - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs != null ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs != null ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq == null) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; - } - - return buf ? buf : unparse(b); - } - - // **`v4()` - Generate random UUID** - - // See https://github.com/broofa/node-uuid for API details - function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options == 'binary' ? new BufferClass(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || _rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || unparse(rnds); - } - - // Export public API - var uuid = v4; - uuid.v1 = v1; - uuid.v4 = v4; - uuid.parse = parse; - uuid.unparse = unparse; - uuid.BufferClass = BufferClass; - - if (typeof define === 'function' && define.amd) { - // Publish as AMD module - define(function() {return uuid;}); - } else if (typeof(module) != 'undefined' && module.exports) { - // Publish as node.js module - module.exports = uuid; - } else { - // Publish as global (in browsers) - var _previousRoot = _global.uuid; - - // **`noConflict()` - (browser only) to reset global 'uuid' var** - uuid.noConflict = function() { - _global.uuid = _previousRoot; - return uuid; - }; - - _global.uuid = uuid; - } -}).call(this); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/README.md deleted file mode 100644 index 34c4a85d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/README.md +++ /dev/null @@ -1,4 +0,0 @@ -oauth-sign -========== - -OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/index.js deleted file mode 100644 index e35bfa67..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/index.js +++ /dev/null @@ -1,43 +0,0 @@ -var crypto = require('crypto') - , qs = require('querystring') - ; - -function sha1 (key, body) { - return crypto.createHmac('sha1', key).update(body).digest('base64') -} - -function rfc3986 (str) { - return encodeURIComponent(str) - .replace(/!/g,'%21') - .replace(/\*/g,'%2A') - .replace(/\(/g,'%28') - .replace(/\)/g,'%29') - .replace(/'/g,'%27') - ; -} - -function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) { - // adapted from https://dev.twitter.com/docs/auth/oauth and - // https://dev.twitter.com/docs/auth/creating-signature - - var querystring = Object.keys(params).sort().map(function(key){ - // big WTF here with the escape + encoding but it's what twitter wants - return escape(rfc3986(key)) + "%3D" + escape(rfc3986(params[key])) - }).join('%26') - - var base = [ - httpMethod ? httpMethod.toUpperCase() : 'GET', - rfc3986(base_uri), - querystring - ].join('&') - - var key = [ - consumer_secret, - token_secret || '' - ].map(rfc3986).join('&') - - return sha1(key, base) -} - -exports.hmacsign = hmacsign -exports.rfc3986 = rfc3986 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/package.json deleted file mode 100644 index abc9d21d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "oauth-sign", - "description": "OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module.", - "version": "0.3.0", - "repository": { - "url": "https://github.com/mikeal/oauth-sign" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "scripts": { - "test": "node test.js" - }, - "readme": "oauth-sign\n==========\n\nOAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. \n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/oauth-sign/issues" - }, - "homepage": "https://github.com/mikeal/oauth-sign", - "_id": "oauth-sign@0.3.0", - "dist": { - "shasum": "cb540f93bb2b22a7d5941691a288d60e8ea9386e" - }, - "_from": "oauth-sign@~0.3.0", - "_resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/test.js deleted file mode 100644 index 46955ff6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/test.js +++ /dev/null @@ -1,49 +0,0 @@ -var hmacsign = require('./index').hmacsign - , assert = require('assert') - , qs = require('querystring') - ; - -// Tests from Twitter documentation https://dev.twitter.com/docs/auth/oauth - -var reqsign = hmacsign('POST', 'https://api.twitter.com/oauth/request_token', - { oauth_callback: 'http://localhost:3005/the_dance/process_callback?service_provider_id=11' - , oauth_consumer_key: 'GDdmIQH6jhtmLUypg82g' - , oauth_nonce: 'QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk' - , oauth_signature_method: 'HMAC-SHA1' - , oauth_timestamp: '1272323042' - , oauth_version: '1.0' - }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98") - -console.log(reqsign) -console.log('8wUi7m5HFQy76nowoCThusfgB+Q=') -assert.equal(reqsign, '8wUi7m5HFQy76nowoCThusfgB+Q=') - -var accsign = hmacsign('POST', 'https://api.twitter.com/oauth/access_token', - { oauth_consumer_key: 'GDdmIQH6jhtmLUypg82g' - , oauth_nonce: '9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8' - , oauth_signature_method: 'HMAC-SHA1' - , oauth_token: '8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc' - , oauth_timestamp: '1272323047' - , oauth_verifier: 'pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY' - , oauth_version: '1.0' - }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98", "x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA") - -console.log(accsign) -console.log('PUw/dHA4fnlJYM6RhXk5IU/0fCc=') -assert.equal(accsign, 'PUw/dHA4fnlJYM6RhXk5IU/0fCc=') - -var upsign = hmacsign('POST', 'http://api.twitter.com/1/statuses/update.json', - { oauth_consumer_key: "GDdmIQH6jhtmLUypg82g" - , oauth_nonce: "oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y" - , oauth_signature_method: "HMAC-SHA1" - , oauth_token: "819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw" - , oauth_timestamp: "1272325550" - , oauth_version: "1.0" - , status: 'setting up my twitter 私のさえずりを設定する' - }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98", "J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA") - -console.log(upsign) -console.log('yOahq5m0YjDDjfjxHaXEsW9D+X0=') -assert.equal(upsign, 'yOahq5m0YjDDjfjxHaXEsW9D+X0=') - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.gitmodules b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.gitmodules deleted file mode 100644 index 49e31dac..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "support/expresso"] - path = support/expresso - url = git://github.com/visionmedia/expresso.git -[submodule "support/should"] - path = support/should - url = git://github.com/visionmedia/should.js.git diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.npmignore deleted file mode 100644 index e85ce2af..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -test -.travis.yml -benchmark.js -component.json -examples.js -History.md -Makefile diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/Readme.md deleted file mode 100644 index 27e54a4a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/Readme.md +++ /dev/null @@ -1,58 +0,0 @@ -# node-querystring - - query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others. - -## Installation - - $ npm install qs - -## Examples - -```js -var qs = require('qs'); - -qs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com'); -// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } } - -qs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }}) -// => user[name]=Tobi&user[email]=tobi%40learnboost.com -``` - -## Testing - -Install dev dependencies: - - $ npm install -d - -and execute: - - $ make test - -browser: - - $ open test/browser/index.html - -## License - -(The MIT License) - -Copyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca> - -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/index.js deleted file mode 100644 index b05938ac..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/index.js +++ /dev/null @@ -1,366 +0,0 @@ -/** - * Object#toString() ref for stringify(). - */ - -var toString = Object.prototype.toString; - -/** - * Object#hasOwnProperty ref - */ - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * Array#indexOf shim. - */ - -var indexOf = typeof Array.prototype.indexOf === 'function' - ? function(arr, el) { return arr.indexOf(el); } - : function(arr, el) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === el) return i; - } - return -1; - }; - -/** - * Array.isArray shim. - */ - -var isArray = Array.isArray || function(arr) { - return toString.call(arr) == '[object Array]'; -}; - -/** - * Object.keys shim. - */ - -var objectKeys = Object.keys || function(obj) { - var ret = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - ret.push(key); - } - } - return ret; -}; - -/** - * Array#forEach shim. - */ - -var forEach = typeof Array.prototype.forEach === 'function' - ? function(arr, fn) { return arr.forEach(fn); } - : function(arr, fn) { - for (var i = 0; i < arr.length; i++) fn(arr[i]); - }; - -/** - * Array#reduce shim. - */ - -var reduce = function(arr, fn, initial) { - if (typeof arr.reduce === 'function') return arr.reduce(fn, initial); - var res = initial; - for (var i = 0; i < arr.length; i++) res = fn(res, arr[i]); - return res; -}; - -/** - * Cache non-integer test regexp. - */ - -var isint = /^[0-9]+$/; - -function promote(parent, key) { - if (parent[key].length == 0) return parent[key] = {} - var t = {}; - for (var i in parent[key]) { - if (hasOwnProperty.call(parent[key], i)) { - t[i] = parent[key][i]; - } - } - parent[key] = t; - return t; -} - -function parse(parts, parent, key, val) { - var part = parts.shift(); - - // illegal - if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return; - - // end - if (!part) { - if (isArray(parent[key])) { - parent[key].push(val); - } else if ('object' == typeof parent[key]) { - parent[key] = val; - } else if ('undefined' == typeof parent[key]) { - parent[key] = val; - } else { - parent[key] = [parent[key], val]; - } - // array - } else { - var obj = parent[key] = parent[key] || []; - if (']' == part) { - if (isArray(obj)) { - if ('' != val) obj.push(val); - } else if ('object' == typeof obj) { - obj[objectKeys(obj).length] = val; - } else { - obj = parent[key] = [parent[key], val]; - } - // prop - } else if (~indexOf(part, ']')) { - part = part.substr(0, part.length - 1); - if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - // key - } else { - if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - } - } -} - -/** - * Merge parent key/val pair. - */ - -function merge(parent, key, val){ - if (~indexOf(key, ']')) { - var parts = key.split('[') - , len = parts.length - , last = len - 1; - parse(parts, parent, 'base', val); - // optimize - } else { - if (!isint.test(key) && isArray(parent.base)) { - var t = {}; - for (var k in parent.base) t[k] = parent.base[k]; - parent.base = t; - } - set(parent.base, key, val); - } - - return parent; -} - -/** - * Compact sparse arrays. - */ - -function compact(obj) { - if ('object' != typeof obj) return obj; - - if (isArray(obj)) { - var ret = []; - - for (var i in obj) { - if (hasOwnProperty.call(obj, i)) { - ret.push(obj[i]); - } - } - - return ret; - } - - for (var key in obj) { - obj[key] = compact(obj[key]); - } - - return obj; -} - -/** - * Parse the given obj. - */ - -function parseObject(obj){ - var ret = { base: {} }; - - forEach(objectKeys(obj), function(name){ - merge(ret, name, obj[name]); - }); - - return compact(ret.base); -} - -/** - * Parse the given str. - */ - -function parseString(str){ - var ret = reduce(String(str).split('&'), function(ret, pair){ - var eql = indexOf(pair, '=') - , brace = lastBraceInKey(pair) - , key = pair.substr(0, brace || eql) - , val = pair.substr(brace || eql, pair.length) - , val = val.substr(indexOf(val, '=') + 1, val.length); - - // ?foo - if ('' == key) key = pair, val = ''; - if ('' == key) return ret; - - return merge(ret, decode(key), decode(val)); - }, { base: {} }).base; - - return compact(ret); -} - -/** - * Parse the given query `str` or `obj`, returning an object. - * - * @param {String} str | {Object} obj - * @return {Object} - * @api public - */ - -exports.parse = function(str){ - if (null == str || '' == str) return {}; - return 'object' == typeof str - ? parseObject(str) - : parseString(str); -}; - -/** - * Turn the given `obj` into a query string - * - * @param {Object} obj - * @return {String} - * @api public - */ - -var stringify = exports.stringify = function(obj, prefix) { - if (isArray(obj)) { - return stringifyArray(obj, prefix); - } else if ('[object Object]' == toString.call(obj)) { - return stringifyObject(obj, prefix); - } else if ('string' == typeof obj) { - return stringifyString(obj, prefix); - } else { - return prefix + '=' + encodeURIComponent(String(obj)); - } -}; - -/** - * Stringify the given `str`. - * - * @param {String} str - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyString(str, prefix) { - if (!prefix) throw new TypeError('stringify expects an object'); - return prefix + '=' + encodeURIComponent(str); -} - -/** - * Stringify the given `arr`. - * - * @param {Array} arr - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyArray(arr, prefix) { - var ret = []; - if (!prefix) throw new TypeError('stringify expects an object'); - for (var i = 0; i < arr.length; i++) { - ret.push(stringify(arr[i], prefix + '[' + i + ']')); - } - return ret.join('&'); -} - -/** - * Stringify the given `obj`. - * - * @param {Object} obj - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyObject(obj, prefix) { - var ret = [] - , keys = objectKeys(obj) - , key; - - for (var i = 0, len = keys.length; i < len; ++i) { - key = keys[i]; - if ('' == key) continue; - if (null == obj[key]) { - ret.push(encodeURIComponent(key) + '='); - } else { - ret.push(stringify(obj[key], prefix - ? prefix + '[' + encodeURIComponent(key) + ']' - : encodeURIComponent(key))); - } - } - - return ret.join('&'); -} - -/** - * Set `obj`'s `key` to `val` respecting - * the weird and wonderful syntax of a qs, - * where "foo=bar&foo=baz" becomes an array. - * - * @param {Object} obj - * @param {String} key - * @param {String} val - * @api private - */ - -function set(obj, key, val) { - var v = obj[key]; - if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return; - if (undefined === v) { - obj[key] = val; - } else if (isArray(v)) { - v.push(val); - } else { - obj[key] = [v, val]; - } -} - -/** - * Locate last brace in `str` within the key. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function lastBraceInKey(str) { - var len = str.length - , brace - , c; - for (var i = 0; i < len; ++i) { - c = str[i]; - if (']' == c) brace = false; - if ('[' == c) brace = true; - if ('=' == c && !brace) return i; - } -} - -/** - * Decode `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -function decode(str) { - try { - return decodeURIComponent(str.replace(/\+/g, ' ')); - } catch (err) { - return str; - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/package.json deleted file mode 100644 index 313485c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "qs", - "description": "querystring parser", - "version": "0.6.6", - "keywords": [ - "query string", - "parser", - "component" - ], - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/node-querystring.git" - }, - "devDependencies": { - "mocha": "*", - "expect.js": "*" - }, - "scripts": { - "test": "make test" - }, - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "main": "index", - "engines": { - "node": "*" - }, - "readme": "# node-querystring\n\n query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others.\n\n## Installation\n\n $ npm install qs\n\n## Examples\n\n```js\nvar qs = require('qs');\n\nqs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com');\n// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } }\n\nqs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }})\n// => user[name]=Tobi&user[email]=tobi%40learnboost.com\n```\n\n## Testing\n\nInstall dev dependencies:\n\n $ npm install -d\n\nand execute:\n\n $ make test\n\nbrowser:\n\n $ open test/browser/index.html\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/node-querystring/issues" - }, - "homepage": "https://github.com/visionmedia/node-querystring", - "_id": "qs@0.6.6", - "_from": "qs@~0.6.0" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.jshintrc b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.jshintrc deleted file mode 100644 index 8fcead4f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.jshintrc +++ /dev/null @@ -1,72 +0,0 @@ -{ - // Settings - "passfail" : false, // Stop on first error. - "maxerr" : 100, // Maximum error before stopping. - - - // Predefined globals whom JSHint will ignore. - "browser" : false, // Standard browser globals e.g. `window`, `document`. - "node" : true, - "rhino" : false, - "couch" : false, - "wsh" : false, // Windows Scripting Host. - - "jquery" : false, - "prototypejs" : false, - "mootools" : false, - "dojo" : false, - - "predef" : [ // Custom globals. - "escape", "unescape" // aren't picked up by node flag above :/ - ], - - - // Development. - "debug" : false, // Allow debugger statements e.g. browser breakpoints. - "devel" : false, // Allow developments statements e.g. `console.log();`. - - - // EcmaScript 5. - "es5" : true, // Allow EcmaScript 5 syntax. - "esnext" : true, // Allow ES "next" syntax, specifically 'const' (V8 has this) - "strict" : false, // Require `use strict` pragma in every file. - "globalstrict" : false, // Allow global "use strict" (also enables 'strict'). - - - // The Good Parts. - "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons). - "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. - "bitwise" : true, // Prohibit bitwise operators (&, |, ^, etc.). - "boss" : false, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. - "curly" : false, // Require {} for every new block or scope. - "eqeqeq" : false, // Require triple equals i.e. `===`. - "eqnull" : true, // Tolerate use of `== null`. - "evil" : false, // Tolerate use of `eval`. - "expr" : true, // Tolerate `ExpressionStatement` as Programs. - "forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`. - "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` - "latedef" : false, // Prohibit variable use before definition. - "loopfunc" : false, // Allow functions to be defined within loops. - "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. - "regexp" : true, // Prohibit `.` and `[^...]` in regular expressions. - "regexdash" : false, // Tolerate unescaped last dash i.e. `[-...]`. - "scripturl" : true, // Tolerate script-targeted URLs. - "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. - "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. - "undef" : true, // Require all non-global variables be declared before they are used. - - - // Personal styling prefrences. - "lastsemic" : true, // Prohibit missing semicolon for the last statement in a one-line block - "newcap" : false, // Require capitalization of all constructor functions e.g. `new F()`. - "noempty" : true, // Prohipit use of empty blocks. - "nonew" : true, // Prohibit use of constructors for side-effects. - "nomen" : false, // Prohibit use of initial or trailing underbars in names. - "onevar" : false, // Allow only one `var` statement per function. - "onecase" : false, // Allow switches with one case statement - "plusplus" : false, // Prohibit use of `++` & `--`. - "proto" : false, // Allow use of __proto__ - "sub" : true, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. - "trailing" : true, // Prohibit trailing whitespaces. - "white" : false // Check against strict whitespace and indentation rules. -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.npmignore deleted file mode 100644 index 54efff98..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -.*.sw[nmop] -npm-debug.log diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/LICENSE deleted file mode 100644 index 3fac4c85..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/LICENSE +++ /dev/null @@ -1,78 +0,0 @@ -Copyright GoInstant, Inc. and other contributors. 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. - -The following exceptions apply: - -=== - -`pubSufTest()` of generate-pubsuffix.js is in the public domain. - - // Any copyright is dedicated to the Public Domain. - // http://creativecommons.org/publicdomain/zero/1.0/ - -=== - -`public-suffix.txt` was obtained from -<https://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1> -via <http://publicsuffix.org>. - -That file contains the usual Mozilla triple-license, for which this project uses it -under the terms of the MPL 1.1: - - // ***** BEGIN LICENSE BLOCK ***** - // Version: MPL 1.1/GPL 2.0/LGPL 2.1 - // - // The contents of this file are subject to the Mozilla Public License Version - // 1.1 (the "License"); you may not use this file except in compliance with - // the License. You may obtain a copy of the License at - // http://www.mozilla.org/MPL/ - // - // Software distributed under the License is distributed on an "AS IS" basis, - // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - // for the specific language governing rights and limitations under the - // License. - // - // The Original Code is the Public Suffix List. - // - // The Initial Developer of the Original Code is - // Jo Hermans <jo.hermans@gmail.com>. - // Portions created by the Initial Developer are Copyright (C) 2007 - // the Initial Developer. All Rights Reserved. - // - // Contributor(s): - // Ruben Arakelyan <ruben@rubenarakelyan.com> - // Gervase Markham <gerv@gerv.net> - // Pamela Greene <pamg.bugs@gmail.com> - // David Triendl <david@triendl.name> - // Jothan Frakes <jothan@gmail.com> - // The kind representatives of many TLD registries - // - // Alternatively, the contents of this file may be used under the terms of - // either the GNU General Public License Version 2 or later (the "GPL"), or - // the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - // in which case the provisions of the GPL or the LGPL are applicable instead - // of those above. If you wish to allow use of your version of this file only - // under the terms of either the GPL or the LGPL, and not to allow others to - // use your version of this file under the terms of the MPL, indicate your - // decision by deleting the provisions above and replace them with the notice - // and other provisions required by the GPL or the LGPL. If you do not delete - // the provisions above, a recipient may use your version of this file under - // the terms of any one of the MPL, the GPL or the LGPL. - // - // ***** END LICENSE BLOCK ***** diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/README.md deleted file mode 100644 index fd1dbb1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/README.md +++ /dev/null @@ -1,380 +0,0 @@ -[RFC6265](http://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js - -![Tough Cookie](http://www.goinstant.com.s3.amazonaws.com/tough-cookie.jpg) - -# Synopsis - -``` javascript -var cookies = require('tough-cookie'); // note: not 'cookie', 'cookies' or 'node-cookie' -var Cookie = cookies.Cookie; -var cookie = Cookie.parse(header); -cookie.value = 'somethingdifferent'; -header = cookie.toString(); - -var cookiejar = new cookies.CookieJar(); -cookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb); -// ... -cookiejar.getCookies('http://example.com/otherpath',function(err,cookies) { - res.headers['cookie'] = cookies.join('; '); -}); -``` - -# Installation - -It's _so_ easy! - -`npm install tough-cookie` - -Requires `punycode`, which should get installed automatically for you. Note that node.js v0.6.2+ bundles punycode by default. - -Why the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken. - -# API - -cookies -======= - -Functions on the module you get from `require('tough-cookie')`. All can be used as pure functions and don't need to be "bound". - -parseDate(string[,strict]) ------------------ - -Parse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`. If strict is set to true then leading/trailing non-seperator characters around the time part will cause the parsing to fail (e.g. "Thu, 01 Jan 1970 00:00:010 GMT" has an extra trailing zero but Chrome, an assumedly RFC-compliant browser, treats this as valid). - -formatDate(date) ----------------- - -Format a Date into a RFC1123 string (the RFC6265-recommended format). - -canonicalDomain(str) --------------------- - -Transforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects). - -domainMatch(str,domStr[,canonicalize=true]) -------------------------------------------- - -Answers "does this real domain match the domain in a cookie?". The `str` is the "current" domain-name and the `domStr` is the "cookie" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a "suffix match". - -The `canonicalize` parameter will run the other two paramters through `canonicalDomain` or not. - -defaultPath(path) ------------------ - -Given a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the "directory" of a "file" in the path, but is specified by Section 5.1.4 of the RFC. - -The `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node's `uri.parse()` output. - -pathMatch(reqPath,cookiePath) ------------------------------ - -Answers "does the request-path path-match a given cookie-path?" as per RFC6265 Section 5.1.4. Returns a boolean. - -This is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`. - -parse(header[,strict=false]) ----------------------------- - -alias for `Cookie.parse(header[,strict])` - -fromJSON(string) ----------------- - -alias for `Cookie.fromJSON(string)` - -getPublicSuffix(hostname) -------------------------- - -Returns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it. - -For example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`. - -For further information, see http://publicsuffix.org/. This module derives its list from that site. - -cookieCompare(a,b) ------------------- - -For use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). Longest `.path`s go first, then sorted oldest to youngest. - -``` javascript -var cookies = [ /* unsorted array of Cookie objects */ ]; -cookies = cookies.sort(cookieCompare); -``` - -permuteDomain(domain) ---------------------- - -Generates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores. - - -permutePath(path) ------------------ - -Generates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores. - -Cookie -====== - -Cookie.parse(header[,strict=false]) ------------------------------------ - -Parses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can't be parsed. If in strict mode, returns `undefined` if the cookie doesn't follow the guidelines in section 4 of RFC6265. Generally speaking, strict mode can be used to validate your own generated Set-Cookie headers, but acting as a client you want to be lenient and leave strict mode off. - -Here's how to process the Set-Cookie header(s) on a node HTTP/HTTPS response: - -``` javascript -if (res.headers['set-cookie'] instanceof Array) - cookies = res.headers['set-cookie'].map(Cookie.parse); -else - cookies = [Cookie.parse(res.headers['set-cookie'])]; -``` - -Cookie.fromJSON(string) ------------------------ - -Convert a JSON string to a `Cookie` object. Does a `JSON.parse()` and converts the `.created`, `.lastAccessed` and `.expires` properties into `Date` objects. - -Properties -========== - - * _key_ - string - the name or key of the cookie (default "") - * _value_ - string - the value of the cookie (default "") - * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `"Infinity"`). See `setExpires()` - * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `"Infinity"` and `"-Infinity"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()` - * _domain_ - string - the `Domain=` attribute of the cookie - * _path_ - string - the `Path=` of the cookie - * _secure_ - boolean - the `Secure` cookie flag - * _httpOnly_ - boolean - the `HttpOnly` cookie flag - * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside) - -After a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes: - - * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied) - * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one. - * _created_ - `Date` - when this cookie was added to the jar - * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute. - -Construction([{options}]) ------------- - -Receives an options object that can contain any Cookie properties, uses the default for unspecified properties. - -.toString() ------------ - -encode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`. - -.cookieString() ---------------- - -encode to a Cookie header value (i.e. the `.key` and `.value` properties joined with '='). - -.setExpires(String) -------------------- - -sets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can't parse this date string), `.expires` is set to `"Infinity"` (a string) is set. - -.setMaxAge(number) -------------------- - -sets the maxAge in seconds. Coerces `-Infinity` to `"-Infinity"` and `Infinity` to `"Infinity"` so it JSON serializes correctly. - -.expiryTime([now=Date.now()]) ------------------------------ - -.expiryDate([now=Date.now()]) ------------------------------ - -expiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds. - -Max-Age takes precedence over Expires (as per the RFC). The `.created` attribute -- or, by default, the `now` paramter -- is used to offset the `.maxAge` attribute. - -If Expires (`.expires`) is set, that's returned. - -Otherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for "Tue, 19 Jan 2038 03:14:07 GMT" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents). - -.TTL([now=Date.now()]) ---------- - -compute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply. - -The "number" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned. - -.canonicalizedDoman() ---------------------- - -.cdomain() ----------- - -return the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters. - -.validate() ------------ - -Status: *IN PROGRESS*. Works for a few things, but is by no means comprehensive. - -validates cookie attributes for semantic correctness. Useful for "lint" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct: - -``` javascript -if (cookie.validate() === true) { - // it's tasty -} else { - // yuck! -} -``` - -CookieJar -========= - -Construction([store = new MemoryCookieStore()][, rejectPublicSuffixes]) ------------- - -Simply use `new CookieJar()`. If you'd like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used. - - -Attributes ----------- - - * _rejectPublicSuffixes_ - boolean - reject cookies with domains like "com" and "co.uk" (default: `true`) - -Since eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods. - -.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie)) -------------------------------------------------------------------- - -Attempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.created`, `.lastAccessed` and `.hostOnly` properties. - -The `options` object can be omitted and can have the following properties: - - * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. - * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. - * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies - * _strict_ - boolean - default `false` - perform extra checks - * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. CookieStore errors aren't ignored by this option. - -As per the RFC, the `.hostOnly` property is set if there was no "Domain=" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual). - -.storeCookie(cookie, [{options},] cb(err,cookie)) -------------------------------------------------- - -__REMOVED__ removed in lieu of the CookieStore API below - -.getCookies(currentUrl, [{options},] cb(err,cookies)) ------------------------------------------------------ - -Retrieve the list of cookies that can be sent in a Cookie header for the current url. - -If an error is encountered, that's passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given. - -The `options` object can be omitted and can have the following properties: - - * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. - * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. - * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies - * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially). - * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the CookieStore `fetchCookies` function (the default MemoryCookieStore supports it). - -The `.lastAccessed` property of the returned cookies will have been updated. - -.getCookieString(...) ---------------------- - -Accepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`. - -.getSetCookieStrings(...) -------------------------- - -Accepts the same options as `.getCookies()` but passes an array of strings suitable for Set-Cookie headers (rather than an array of `Cookie`s) to the callback. Simply maps the cookie array via `.toString()`. - -# CookieStore API - -The storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores. - -All `domain` parameters will have been normalized before calling. - -The Cookie store must have all of the following methods. - -store.findCookie(domain, path, key, cb(err,cookie)) ---------------------------------------------------- - -Retrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned. - -Callback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error). - -store.findCookies(domain, path, cb(err,cookies)) ------------------------------------------------- - -Locates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above. - -If no cookies are found, the callback MUST be passed an empty array. - -The resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it's OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done. - -As of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only). - -store.putCookie(cookie, cb(err)) --------------------------------- - -Adds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it's possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur. - -The `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties. - -Pass an error if the cookie cannot be stored. - -store.updateCookie(oldCookie, newCookie, cb(err)) -------------------------------------------------- - -Update an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store. - -The `.lastAccessed` property will always be different between the two objects and `.created` will always be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are sorted (or selected for deletion). - -Stores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn't define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object. - -The `newCookie` and `oldCookie` objects MUST NOT be modified. - -Pass an error if the newCookie cannot be stored. - -store.removeCookie(domain, path, key, cb(err)) ----------------------------------------------- - -Remove a cookie from the store (see notes on `findCookie` about the uniqueness constraint). - -The implementation MUST NOT pass an error if the cookie doesn't exist; only pass an error due to the failure to remove an existing cookie. - -store.removeCookies(domain, path, cb(err)) ------------------------------------------- - -Removes matching cookies from the store. The `path` paramter is optional, and if missing means all paths in a domain should be removed. - -Pass an error ONLY if removing any existing cookies failed. - -# TODO - - * _full_ RFC5890/RFC5891 canonicalization for domains in `cdomain()` - * the optional `punycode` requirement implements RFC3492, but RFC6265 requires RFC5891 - * better tests for `validate()`? - -# Copyright and License - -(tl;dr: MIT with some MPL/1.1) - -Copyright GoInstant, Inc. and other contributors. 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. - -Portions may be licensed under different licenses (in particular public-suffix.txt is MPL/1.1); please read the LICENSE file for full details. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js deleted file mode 100644 index a7fa5452..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - -var fs = require('fs'); -var assert = require('assert'); -var punycode = require('punycode'); - -fs.readFile('./public-suffix.txt', 'utf8', function(err,string) { - if (err) throw err; - var lines = string.split("\n"); - process.nextTick(function() { - processList(lines); - }); -}); - -var index = {}; - -var COMMENT = new RegExp('//.+'); -function processList(lines) { - while (lines.length) { - var line = lines.shift(); - line = line.replace(COMMENT,'').trim(); - if (!line) continue; - addToIndex(index,line); - } - - pubSufTest(); - - var w = fs.createWriteStream('./lib/pubsuffix.js',{ - flags: 'w', - encoding: 'utf8', - mode: 0644, - }); - w.on('end', process.exit); - w.write("/****************************************************\n"); - w.write(" * AUTOMATICALLY GENERATED by generate-pubsuffix.js *\n"); - w.write(" * DO NOT EDIT! *\n"); - w.write(" ****************************************************/\n\n"); - - w.write("module.exports.getPublicSuffix = "); - w.write(getPublicSuffix.toString()); - w.write(";\n\n"); - - w.write("// The following generated structure is used under the MPL version 1.1\n"); - w.write("// See public-suffix.txt for more information\n\n"); - w.write("var index = module.exports.index = Object.freeze(\n"); - w.write(JSON.stringify(index)); - w.write(");\n\n"); - w.write("// END of automatically generated file\n"); - - w.end(); -} - -function addToIndex(index,line) { - var prefix = ''; - if (line.replace(/^(!|\*\.)/)) { - prefix = RegExp.$1; - line = line.slice(prefix.length); - } - line = prefix + punycode.toASCII(line); - - if (line.substr(0,1) == '!') - index[line.substr(1)] = false; - else - index[line] = true; -} - -// include the licence in the function since it gets written to pubsuffix.js -function getPublicSuffix(domain) { - /* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - if (!domain) return null; - if (domain.match(/^\./)) return null; - - domain = domain.toLowerCase(); - var parts = domain.split('.').reverse(); - - var suffix = ''; - var suffixLen = 0; - for (var i=0; i<parts.length; i++) { - var part = parts[i]; - var starstr = '*'+suffix; - var partstr = part+suffix; - - if (index[starstr]) { // star rule matches - suffixLen = i+1; - if (index[partstr] === false) { // exception rule matches (NB: false, not undefined) - suffixLen--; - } - } else if (index[partstr]) { // exact match, not exception - suffixLen = i+1; - } - - suffix = '.'+part+suffix; - } - - if (index['*'+suffix]) { // *.domain exists (e.g. *.kyoto.jp for domain='kyoto.jp'); - return null; - } - - if (suffixLen && parts.length > suffixLen) { - return parts.slice(0,suffixLen+1).reverse().join('.'); - } - - return null; -} - -function checkPublicSuffix(give,get) { - var got = getPublicSuffix(give); - assert.equal(got, get, give+' should be '+(get==null?'NULL':get)+' but got '+got); -} - -// pubSufTest() was converted to JavaScript from http://publicsuffix.org/list/test.txt -function pubSufTest() { - // For this function-scope and this function-scope ONLY: - // Any copyright is dedicated to the Public Domain. - // http://creativecommons.org/publicdomain/zero/1.0/ - - // NULL input. - checkPublicSuffix(null, null); - // Mixed case. - checkPublicSuffix('COM', null); - checkPublicSuffix('example.COM', 'example.com'); - checkPublicSuffix('WwW.example.COM', 'example.com'); - // Leading dot. - checkPublicSuffix('.com', null); - checkPublicSuffix('.example', null); - checkPublicSuffix('.example.com', null); - checkPublicSuffix('.example.example', null); - // Unlisted TLD. - checkPublicSuffix('example', null); - checkPublicSuffix('example.example', null); - checkPublicSuffix('b.example.example', null); - checkPublicSuffix('a.b.example.example', null); - // Listed, but non-Internet, TLD. - checkPublicSuffix('local', null); - checkPublicSuffix('example.local', null); - checkPublicSuffix('b.example.local', null); - checkPublicSuffix('a.b.example.local', null); - // TLD with only 1 rule. - checkPublicSuffix('biz', null); - checkPublicSuffix('domain.biz', 'domain.biz'); - checkPublicSuffix('b.domain.biz', 'domain.biz'); - checkPublicSuffix('a.b.domain.biz', 'domain.biz'); - // TLD with some 2-level rules. - checkPublicSuffix('com', null); - checkPublicSuffix('example.com', 'example.com'); - checkPublicSuffix('b.example.com', 'example.com'); - checkPublicSuffix('a.b.example.com', 'example.com'); - checkPublicSuffix('uk.com', null); - checkPublicSuffix('example.uk.com', 'example.uk.com'); - checkPublicSuffix('b.example.uk.com', 'example.uk.com'); - checkPublicSuffix('a.b.example.uk.com', 'example.uk.com'); - checkPublicSuffix('test.ac', 'test.ac'); - // TLD with only 1 (wildcard) rule. - checkPublicSuffix('cy', null); - checkPublicSuffix('c.cy', null); - checkPublicSuffix('b.c.cy', 'b.c.cy'); - checkPublicSuffix('a.b.c.cy', 'b.c.cy'); - // More complex TLD. - checkPublicSuffix('jp', null); - checkPublicSuffix('test.jp', 'test.jp'); - checkPublicSuffix('www.test.jp', 'test.jp'); - checkPublicSuffix('ac.jp', null); - checkPublicSuffix('test.ac.jp', 'test.ac.jp'); - checkPublicSuffix('www.test.ac.jp', 'test.ac.jp'); - checkPublicSuffix('kyoto.jp', null); - checkPublicSuffix('c.kyoto.jp', null); - checkPublicSuffix('b.c.kyoto.jp', 'b.c.kyoto.jp'); - checkPublicSuffix('a.b.c.kyoto.jp', 'b.c.kyoto.jp'); - checkPublicSuffix('pref.kyoto.jp', 'pref.kyoto.jp'); // Exception rule. - checkPublicSuffix('www.pref.kyoto.jp', 'pref.kyoto.jp'); // Exception rule. - checkPublicSuffix('city.kyoto.jp', 'city.kyoto.jp'); // Exception rule. - checkPublicSuffix('www.city.kyoto.jp', 'city.kyoto.jp'); // Exception rule. - // TLD with a wildcard rule and exceptions. - checkPublicSuffix('om', null); - checkPublicSuffix('test.om', null); - checkPublicSuffix('b.test.om', 'b.test.om'); - checkPublicSuffix('a.b.test.om', 'b.test.om'); - checkPublicSuffix('songfest.om', 'songfest.om'); - checkPublicSuffix('www.songfest.om', 'songfest.om'); - // US K12. - checkPublicSuffix('us', null); - checkPublicSuffix('test.us', 'test.us'); - checkPublicSuffix('www.test.us', 'test.us'); - checkPublicSuffix('ak.us', null); - checkPublicSuffix('test.ak.us', 'test.ak.us'); - checkPublicSuffix('www.test.ak.us', 'test.ak.us'); - checkPublicSuffix('k12.ak.us', null); - checkPublicSuffix('test.k12.ak.us', 'test.k12.ak.us'); - checkPublicSuffix('www.test.k12.ak.us', 'test.k12.ak.us'); - - -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/cookie.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/cookie.js deleted file mode 100644 index 1d8615b5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/cookie.js +++ /dev/null @@ -1,947 +0,0 @@ -/* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - -/*jshint regexp:false */ -var net = require('net'); -var urlParse = require('url').parse; -var pubsuffix = require('./pubsuffix'); - -var punycode; -try { - punycode = require('punycode'); -} catch(e) { - console.warn("cookie: can't load punycode; won't use punycode for domain normalization"); -} - -var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/; - -// From RFC2616 S2.2: -var TOKEN = /[\x21\x23-\x26\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7A\x7C\x7E]/; - -// From RFC6265 S4.1.1 -// note that it excludes \x3B ";" -var COOKIE_OCTET = /[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]/; -var COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/; - -// The name/key cannot be empty but the value can (S5.2): -var COOKIE_PAIR_STRICT = new RegExp('^('+TOKEN.source+'+)=("?)('+COOKIE_OCTET.source+'*)\\2'); -var COOKIE_PAIR = /^([^=\s]+)\s*=\s*("?)\s*(.*)\s*\2/; - -// RFC6265 S4.1.1 defines extension-av as 'any CHAR except CTLs or ";"' -// Note ';' is \x3B -var NON_CTL_SEMICOLON = /[\x20-\x3A\x3C-\x7E]+/; -var EXTENSION_AV = NON_CTL_SEMICOLON; -var PATH_VALUE = NON_CTL_SEMICOLON; - -// Used for checking whether or not there is a trailing semi-colon -var TRAILING_SEMICOLON = /;+$/; - -/* RFC6265 S5.1.1.5: - * [fail if] the day-of-month-value is less than 1 or greater than 31 - */ -var DAY_OF_MONTH = /^(0?[1-9]|[12][0-9]|3[01])$/; - -/* RFC6265 S5.1.1.5: - * [fail if] - * * the hour-value is greater than 23, - * * the minute-value is greater than 59, or - * * the second-value is greater than 59. - */ -var TIME = /(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])/; -var STRICT_TIME = /^(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/; - -var MONTH = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)$/i; -var MONTH_TO_NUM = { - jan:0, feb:1, mar:2, apr:3, may:4, jun:5, jul:6, aug:7, sep:8, oct:9, nov:10, dec:11 -}; -var NUM_TO_MONTH = [ - 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec' -]; -var NUM_TO_DAY = [ - 'Sun','Mon','Tue','Wed','Thu','Fri','Sat' -]; - -var YEAR = /^([1-9][0-9]{1,3})$/; // 2 to 4 digits (will check range when parsing) - -var MAX_TIME = 2147483647000; // 31-bit max -var MAX_DATE = new Date(CookieJar.MAX_TIME); // 31-bit max -var MIN_TIME = 0; // 31-bit min -var MIN_DATE = new Date(CookieJar.MIN_TIME); // 31-bit min - - -// RFC6265 S5.1.1 date parser: -function parseDate(str,strict) { - if (!str) return; - var found_time, found_dom, found_month, found_year; - - /* RFC6265 S5.1.1: - * 2. Process each date-token sequentially in the order the date-tokens - * appear in the cookie-date - */ - var tokens = str.split(DATE_DELIM); - if (!tokens) return; - - var date = new Date(); - date.setMilliseconds(0); - - for (var i=0; i<tokens.length; i++) { - var token = tokens[i].trim(); - if (!token.length) continue; - - var result; - - /* 2.1. If the found-time flag is not set and the token matches the time - * production, set the found-time flag and set the hour- value, - * minute-value, and second-value to the numbers denoted by the digits in - * the date-token, respectively. Skip the remaining sub-steps and continue - * to the next date-token. - */ - if (!found_time) { - result = (strict ? STRICT_TIME : TIME).exec(token); - if (result) { - found_time = true; - date.setUTCHours(result[1]); - date.setUTCMinutes(result[2]); - date.setUTCSeconds(result[3]); - continue; - } - } - - /* 2.2. If the found-day-of-month flag is not set and the date-token matches - * the day-of-month production, set the found-day-of- month flag and set - * the day-of-month-value to the number denoted by the date-token. Skip - * the remaining sub-steps and continue to the next date-token. - */ - if (!found_dom) { - result = DAY_OF_MONTH.exec(token); - if (result) { - found_dom = true; - date.setUTCDate(result[1]); - continue; - } - } - - /* 2.3. If the found-month flag is not set and the date-token matches the - * month production, set the found-month flag and set the month-value to - * the month denoted by the date-token. Skip the remaining sub-steps and - * continue to the next date-token. - */ - if (!found_month) { - result = MONTH.exec(token); - if (result) { - found_month = true; - date.setUTCMonth(MONTH_TO_NUM[result[1].toLowerCase()]); - continue; - } - } - - /* 2.4. If the found-year flag is not set and the date-token matches the year - * production, set the found-year flag and set the year-value to the number - * denoted by the date-token. Skip the remaining sub-steps and continue to - * the next date-token. - */ - if (!found_year) { - result = YEAR.exec(token); - if (result) { - var year = result[0]; - /* From S5.1.1: - * 3. If the year-value is greater than or equal to 70 and less - * than or equal to 99, increment the year-value by 1900. - * 4. If the year-value is greater than or equal to 0 and less - * than or equal to 69, increment the year-value by 2000. - */ - if (70 <= year && year <= 99) - year += 1900; - else if (0 <= year && year <= 69) - year += 2000; - - if (year < 1601) - return; // 5. ... the year-value is less than 1601 - - found_year = true; - date.setUTCFullYear(year); - continue; - } - } - } - - if (!(found_time && found_dom && found_month && found_year)) { - return; // 5. ... at least one of the found-day-of-month, found-month, found- - // year, or found-time flags is not set, - } - - return date; -} - -function formatDate(date) { - var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d; - var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h; - var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m; - var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s; - return NUM_TO_DAY[date.getUTCDay()] + ', ' + - d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+ - h+':'+m+':'+s+' GMT'; -} - -// S5.1.2 Canonicalized Host Names -function canonicalDomain(str) { - if (str == null) return null; - str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading . - - // convert to IDN if any non-ASCII characters - if (punycode && /[^\u0001-\u007f]/.test(str)) - str = punycode.toASCII(str); - - return str.toLowerCase(); -} - -// S5.1.3 Domain Matching -function domainMatch(str, domStr, canonicalize) { - if (str == null || domStr == null) return null; - if (canonicalize !== false) { - str = canonicalDomain(str); - domStr = canonicalDomain(domStr); - } - - /* - * "The domain string and the string are identical. (Note that both the - * domain string and the string will have been canonicalized to lower case at - * this point)" - */ - if (str == domStr) return true; - - /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */ - - /* "* The string is a host name (i.e., not an IP address)." */ - if (net.isIP(str)) return false; - - /* "* The domain string is a suffix of the string" */ - var idx = str.indexOf(domStr); - if (idx <= 0) return false; // it's a non-match (-1) or prefix (0) - - // e.g "a.b.c".indexOf("b.c") === 2 - // 5 === 3+2 - if (str.length !== domStr.length + idx) // it's not a suffix - return false; - - /* "* The last character of the string that is not included in the domain - * string is a %x2E (".") character." */ - if (str.substr(idx-1,1) !== '.') return false; - return true; -} - - -// RFC6265 S5.1.4 Paths and Path-Match - -/* - * "The user agent MUST use an algorithm equivalent to the following algorithm - * to compute the default-path of a cookie:" - * - * Assumption: the path (and not query part or absolute uri) is passed in. - */ -function defaultPath(path) { - // "2. If the uri-path is empty or if the first character of the uri-path is not - // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps. - if (!path || path.substr(0,1) !== "/") return "/"; - - // "3. If the uri-path contains no more than one %x2F ("/") character, output - // %x2F ("/") and skip the remaining step." - if (path === "/") return path; - - var rightSlash = path.lastIndexOf("/"); - if (rightSlash === 0) return "/"; - - // "4. Output the characters of the uri-path from the first character up to, - // but not including, the right-most %x2F ("/")." - return path.slice(0, rightSlash); -} - -/* - * "A request-path path-matches a given cookie-path if at least one of the - * following conditions holds:" - */ -function pathMatch(reqPath,cookiePath) { - // "o The cookie-path and the request-path are identical." - if (cookiePath === reqPath) - return true; - - var idx = reqPath.indexOf(cookiePath); - if (idx === 0) { - // "o The cookie-path is a prefix of the request-path, and the last - // character of the cookie-path is %x2F ("/")." - if (cookiePath.substr(-1) === "/") - return true; - - // " o The cookie-path is a prefix of the request-path, and the first - // character of the request-path that is not included in the cookie- path - // is a %x2F ("/") character." - if (reqPath.substr(cookiePath.length,1) === "/") - return true; - } - - return false; -} - -function parse(str, strict) { - str = str.trim(); - - // S4.1.1 Trailing semi-colons are not part of the specification. - // If we are not in strict mode we remove the trailing semi-colons. - var semiColonCheck = TRAILING_SEMICOLON.exec(str); - if (semiColonCheck) { - if (strict) return; - str = str.slice(0, semiColonCheck.index); - } - - // We use a regex to parse the "name-value-pair" part of S5.2 - var firstSemi = str.indexOf(';'); // S5.2 step 1 - var pairRx = strict ? COOKIE_PAIR_STRICT : COOKIE_PAIR; - var result = pairRx.exec(firstSemi === -1 ? str : str.substr(0,firstSemi)); - - // Rx satisfies the "the name string is empty" and "lacks a %x3D ("=")" - // constraints as well as trimming any whitespace. - if (!result) return; - - var c = new Cookie(); - c.key = result[1]; // the regexp should trim() already - c.value = result[3]; // [2] is quotes or empty-string - - if (firstSemi === -1) return c; - - // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string - // (including the %x3B (";") in question)." plus later on in the same section - // "discard the first ";" and trim". - var unparsed = str.slice(firstSemi).replace(/^\s*;\s*/,'').trim(); - - // "If the unparsed-attributes string is empty, skip the rest of these - // steps." - if (unparsed.length === 0) return c; - - /* - * S5.2 says that when looping over the items "[p]rocess the attribute-name - * and attribute-value according to the requirements in the following - * subsections" for every item. Plus, for many of the individual attributes - * in S5.3 it says to use the "attribute-value of the last attribute in the - * cookie-attribute-list". Therefore, in this implementation, we overwrite - * the previous value. - */ - var cookie_avs = unparsed.split(/\s*;\s*/); - while (cookie_avs.length) { - var av = cookie_avs.shift(); - - if (strict && !EXTENSION_AV.test(av)) return; - - var av_sep = av.indexOf('='); - var av_key, av_value; - if (av_sep === -1) { - av_key = av; - av_value = null; - } else { - av_key = av.substr(0,av_sep); - av_value = av.substr(av_sep+1); - } - - av_key = av_key.trim().toLowerCase(); - if (av_value) av_value = av_value.trim(); - - switch(av_key) { - case 'expires': // S5.2.1 - if (!av_value) { if(strict){return}else{break;} } - var exp = parseDate(av_value,strict); - // "If the attribute-value failed to parse as a cookie date, ignore the - // cookie-av." - if (exp == null) { if(strict){return}else{break;} } - c.expires = exp; - // over and underflow not realistically a concern: V8's getTime() seems to - // store something larger than a 32-bit time_t (even with 32-bit node) - break; - - case 'max-age': // S5.2.2 - if (!av_value) { if(strict){return}else{break;} } - // "If the first character of the attribute-value is not a DIGIT or a "-" - // character ...[or]... If the remainder of attribute-value contains a - // non-DIGIT character, ignore the cookie-av." - if (!/^-?[0-9]+$/.test(av_value)) { if(strict){return}else{break;} } - var delta = parseInt(av_value,10); - if (strict && delta <= 0) return; // S4.1.1 - // "If delta-seconds is less than or equal to zero (0), let expiry-time - // be the earliest representable date and time." - c.setMaxAge(delta); - break; - - case 'domain': // S5.2.3 - // "If the attribute-value is empty, the behavior is undefined. However, - // the user agent SHOULD ignore the cookie-av entirely." - if (!av_value) { if(strict){return}else{break;} } - // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E - // (".") character." - var domain = av_value.trim().replace(/^\./,''); - if (!domain) { if(strict){return}else{break;} } // see "is empty" above - // "Convert the cookie-domain to lower case." - c.domain = domain.toLowerCase(); - break; - - case 'path': // S5.2.4 - /* - * "If the attribute-value is empty or if the first character of the - * attribute-value is not %x2F ("/"): - * Let cookie-path be the default-path. - * Otherwise: - * Let cookie-path be the attribute-value." - * - * We'll represent the default-path as null since it depends on the - * context of the parsing. - */ - if (!av_value || av_value.substr(0,1) != "/") { if(strict){return}else{break;} } - c.path = av_value; - break; - - case 'secure': // S5.2.5 - /* - * "If the attribute-name case-insensitively matches the string "Secure", - * the user agent MUST append an attribute to the cookie-attribute-list - * with an attribute-name of Secure and an empty attribute-value." - */ - if (av_value != null) { if(strict){return} } - c.secure = true; - break; - - case 'httponly': // S5.2.6 -- effectively the same as 'secure' - if (av_value != null) { if(strict){return} } - c.httpOnly = true; - break; - - default: - c.extensions = c.extensions || []; - c.extensions.push(av); - break; - } - } - - // ensure a default date for sorting: - c.creation = new Date(); - return c; -} - -function fromJSON(str) { - if (!str) return null; - - var obj; - try { - obj = JSON.parse(str); - } catch (e) { - return null; - } - - var c = new Cookie(); - for (var i=0; i<numCookieProperties; i++) { - var prop = cookieProperties[i]; - if (obj[prop] == null) continue; - if (prop === 'expires' || - prop === 'creation' || - prop === 'lastAccessed') - { - c[prop] = obj[prop] == "Infinity" ? "Infinity" : new Date(obj[prop]); - } else { - c[prop] = obj[prop]; - } - } - - - // ensure a default date for sorting: - c.creation = c.creation || new Date(); - - return c; -} - -/* Section 5.4 part 2: - * "* Cookies with longer paths are listed before cookies with - * shorter paths. - * - * * Among cookies that have equal-length path fields, cookies with - * earlier creation-times are listed before cookies with later - * creation-times." - */ - -function cookieCompare(a,b) { - // descending for length: b CMP a - var deltaLen = (b.path ? b.path.length : 0) - (a.path ? a.path.length : 0); - if (deltaLen !== 0) return deltaLen; - // ascending for time: a CMP b - return (a.creation ? a.creation.getTime() : MAX_TIME) - - (b.creation ? b.creation.getTime() : MAX_TIME); -} - -// Gives the permutation of all possible domainMatch()es of a given domain. The -// array is in shortest-to-longest order. Handy for indexing. -function permuteDomain(domain) { - var pubSuf = pubsuffix.getPublicSuffix(domain); - if (!pubSuf) return null; - if (pubSuf == domain) return [domain]; - - var prefix = domain.slice(0,-(pubSuf.length+1)); // ".example.com" - var parts = prefix.split('.').reverse(); - var cur = pubSuf; - var permutations = [cur]; - while (parts.length) { - cur = parts.shift()+'.'+cur; - permutations.push(cur); - } - return permutations; -} - -// Gives the permutation of all possible pathMatch()es of a given path. The -// array is in longest-to-shortest order. Handy for indexing. -function permutePath(path) { - var origPath = path; - if (path === '/') return ['/']; - if (path.lastIndexOf('/') === path.length-1) - path = path.substr(0,path.length-1); - var permutations = [path]; - while (path.length > 1) { - var lindex = path.lastIndexOf('/'); - if (lindex === 0) break; - path = path.substr(0,lindex); - permutations.push(path); - } - permutations.push('/'); - return permutations; -} - - -function Cookie (opts) { - if (typeof opts !== "object") return; - Object.keys(opts).forEach(function (key) { - if (Cookie.prototype.hasOwnProperty(key)) { - this[key] = opts[key] || Cookie.prototype[key]; - } - }.bind(this)); -} - -Cookie.parse = parse; -Cookie.fromJSON = fromJSON; - -Cookie.prototype.key = ""; -Cookie.prototype.value = ""; - -// the order in which the RFC has them: -Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity -Cookie.prototype.maxAge = null; // takes precedence over expires for TTL -Cookie.prototype.domain = null; -Cookie.prototype.path = null; -Cookie.prototype.secure = false; -Cookie.prototype.httpOnly = false; -Cookie.prototype.extensions = null; - -// set by the CookieJar: -Cookie.prototype.hostOnly = null; // boolean when set -Cookie.prototype.pathIsDefault = null; // boolean when set -Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse -Cookie.prototype.lastAccessed = null; // Date when set - -var cookieProperties = Object.freeze(Object.keys(Cookie.prototype).map(function(p) { - if (p instanceof Function) return; - return p; -})); -var numCookieProperties = cookieProperties.length; - -Cookie.prototype.inspect = function inspect() { - var now = Date.now(); - return 'Cookie="'+this.toString() + - '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') + - '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') + - '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') + - '"'; -}; - -Cookie.prototype.validate = function validate() { - if (!COOKIE_OCTETS.test(this.value)) - return false; - if (this.expires != Infinity && !(this.expires instanceof Date) && !parseDate(this.expires,true)) - return false; - if (this.maxAge != null && this.maxAge <= 0) - return false; // "Max-Age=" non-zero-digit *DIGIT - if (this.path != null && !PATH_VALUE.test(this.path)) - return false; - - var cdomain = this.cdomain(); - if (cdomain) { - if (cdomain.match(/\.$/)) - return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this - var suffix = pubsuffix.getPublicSuffix(cdomain); - if (suffix == null) // it's a public suffix - return false; - } - return true; -}; - -Cookie.prototype.setExpires = function setExpires(exp) { - if (exp instanceof Date) this.expires = exp; - else this.expires = parseDate(exp) || "Infinity"; -}; - -Cookie.prototype.setMaxAge = function setMaxAge(age) { - if (age === Infinity || age === -Infinity) - this.maxAge = age.toString(); // so JSON.stringify() works - else - this.maxAge = age; -}; - -// gives Cookie header format -Cookie.prototype.cookieString = function cookieString() { - var val = this.value; - if (val == null) val = ''; - if (!val.length || COOKIE_OCTETS.test(val)) - return this.key+'='+val; - else - return this.key+'="'+val+'"'; -}; - -// gives Set-Cookie header format -Cookie.prototype.toString = function toString() { - var str = this.cookieString(); - - if (this.expires != Infinity) { - if (this.expires instanceof Date) - str += '; Expires='+formatDate(this.expires); - else - str += '; Expires='+this.expires; - } - - if (this.maxAge != null && this.maxAge != Infinity) - str += '; Max-Age='+this.maxAge; - - if (this.domain && !this.hostOnly) - str += '; Domain='+this.domain; - if (this.path) - str += '; Path='+this.path; - - if (this.secure) str += '; Secure'; - if (this.httpOnly) str += '; HttpOnly'; - if (this.extensions) { - this.extensions.forEach(function(ext) { - str += '; '+ext; - }); - } - - return str; -}; - -// TTL() partially replaces the "expiry-time" parts of S5.3 step 3 (setCookie() -// elsewhere) -// S5.3 says to give the "latest representable date" for which we use Infinity -// For "expired" we use 0 -Cookie.prototype.TTL = function TTL(now) { - /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires - * attribute, the Max-Age attribute has precedence and controls the - * expiration date of the cookie. - * (Concurs with S5.3 step 3) - */ - if (this.maxAge != null) { - return this.maxAge<=0 ? 0 : this.maxAge*1000; - } - - var expires = this.expires; - if (expires != Infinity) { - if (!(expires instanceof Date)) { - expires = parseDate(expires) || Infinity; - } - - if (expires == Infinity) - return Infinity; - - return expires.getTime() - (now || Date.now()); - } - - return Infinity; -}; - -// expiryTime() replaces the "expiry-time" parts of S5.3 step 3 (setCookie() -// elsewhere) -Cookie.prototype.expiryTime = function expiryTime(now) { - if (this.maxAge != null) { - var relativeTo = this.creation || now || new Date(); - var age = (this.maxAge <= 0) ? -Infinity : this.maxAge*1000; - return relativeTo.getTime() + age; - } - - if (this.expires == Infinity) return Infinity; - return this.expires.getTime(); -}; - -// expiryDate() replaces the "expiry-time" parts of S5.3 step 3 (setCookie() -// elsewhere), except it returns a Date -Cookie.prototype.expiryDate = function expiryDate(now) { - var millisec = this.expiryTime(now); - if (millisec == Infinity) return new Date(MAX_TIME); - else if (millisec == -Infinity) return new Date(MIN_TIME); - else return new Date(millisec); -}; - -// This replaces the "persistent-flag" parts of S5.3 step 3 -Cookie.prototype.isPersistent = function isPersistent() { - return (this.maxAge != null || this.expires != Infinity); -}; - -// Mostly S5.1.2 and S5.2.3: -Cookie.prototype.cdomain = -Cookie.prototype.canonicalizedDomain = function canonicalizedDomain() { - if (this.domain == null) return null; - return canonicalDomain(this.domain); -}; - - -var memstore; -function CookieJar(store, rejectPublicSuffixes) { - if (rejectPublicSuffixes != null) this.rejectPublicSuffixes = rejectPublicSuffixes; - if (!store) { - memstore = memstore || require('./memstore'); - store = new memstore.MemoryCookieStore(); - } - this.store = store; -} -CookieJar.prototype.store = null; -CookieJar.prototype.rejectPublicSuffixes = true; - -CookieJar.prototype.setCookie = function setCookie(cookie, url, options, cb) { - var err; - var context = (url instanceof Object) ? url : urlParse(url); - if (options instanceof Function) { - cb = options; - options = {}; - } - - var host = canonicalDomain(context.hostname); - - // S5.3 step 1 - if (!(cookie instanceof Cookie)) - cookie = Cookie.parse(cookie, options.strict === true); - if (!cookie) { - err = new Error("Cookie failed to parse"); - return cb(options.ignoreError ? null : err); - } - - // S5.3 step 2 - var now = options.now || new Date(); // will assign later to save effort in the face of errors - - // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie() - - // S5.3 step 4: NOOP; domain is null by default - - // S5.3 step 5: public suffixes - if (this.rejectPublicSuffixes && cookie.domain) { - var suffix = pubsuffix.getPublicSuffix(cookie.cdomain()); - if (suffix == null) { // e.g. "com" - err = new Error("Cookie has domain set to a public suffix"); - return cb(options.ignoreError ? null : err); - } - } - - // S5.3 step 6: - if (cookie.domain) { - if (!domainMatch(host, cookie.cdomain(), false)) { - err = new Error("Cookie not in this host's domain. Cookie:"+cookie.cdomain()+" Request:"+host); - return cb(options.ignoreError ? null : err); - } - - if (cookie.hostOnly == null) // don't reset if already set - cookie.hostOnly = false; - - } else { - cookie.hostOnly = true; - cookie.domain = host; - } - - // S5.3 step 7: "Otherwise, set the cookie's path to the default-path of the - // request-uri" - if (!cookie.path) { - cookie.path = defaultPath(context.pathname); - cookie.pathIsDefault = true; - } else { - if (cookie.path.length > 1 && cookie.path.substr(-1) == '/') - cookie.path = cookie.path.slice(0,-1); - } - - // S5.3 step 8: NOOP; secure attribute - // S5.3 step 9: NOOP; httpOnly attribute - - // S5.3 step 10 - if (options.http === false && cookie.httpOnly) { - err = new Error("Cookie is HttpOnly and this isn't an HTTP API"); - return cb(options.ignoreError ? null : err); - } - - var store = this.store; - - if (!store.updateCookie) { - store.updateCookie = function stubUpdateCookie(oldCookie, newCookie, cb) { - this.putCookie(newCookie, cb); - }; - } - - store.findCookie(cookie.domain, cookie.path, cookie.key, function(err,oldCookie) { - if (err) return cb(err); - - var next = function(err) { - if (err) return cb(err); - else cb(null, cookie); - }; - - if (oldCookie) { - // S5.3 step 11 - "If the cookie store contains a cookie with the same name, - // domain, and path as the newly created cookie:" - if (options.http === false && oldCookie.httpOnly) { // step 11.2 - err = new Error("old Cookie is HttpOnly and this isn't an HTTP API"); - return cb(options.ignoreError ? null : err); - } - cookie.creation = oldCookie.creation; // step 11.3 - cookie.lastAccessed = now; - // Step 11.4 (delete cookie) is implied by just setting the new one: - store.updateCookie(oldCookie, cookie, next); // step 12 - - } else { - cookie.creation = cookie.lastAccessed = now; - store.putCookie(cookie, next); // step 12 - } - }); -}; - -// RFC6365 S5.4 -CookieJar.prototype.getCookies = function getCookies(url, options, cb) { - var context = (url instanceof Object) ? url : urlParse(url); - if (options instanceof Function) { - cb = options; - options = {}; - } - - var host = canonicalDomain(context.hostname); - var path = context.pathname || '/'; - - var secure = options.secure; - if (secure == null && context.protocol && - (context.protocol == 'https:' || context.protocol == 'wss:')) - { - secure = true; - } - - var http = options.http; - if (http == null) http = true; - - var now = options.now || Date.now(); - var expireCheck = options.expire !== false; - var allPaths = !!options.allPaths; - var store = this.store; - - function matchingCookie(c) { - // "Either: - // The cookie's host-only-flag is true and the canonicalized - // request-host is identical to the cookie's domain. - // Or: - // The cookie's host-only-flag is false and the canonicalized - // request-host domain-matches the cookie's domain." - if (c.hostOnly) { - if (c.domain != host) return false; - } else { - if (!domainMatch(host, c.domain, false)) return false; - } - - // "The request-uri's path path-matches the cookie's path." - if (!allPaths && !pathMatch(path, c.path)) - return false; - - // "If the cookie's secure-only-flag is true, then the request-uri's - // scheme must denote a "secure" protocol" - if (c.secure && !secure) - return false; - - // "If the cookie's http-only-flag is true, then exclude the cookie if the - // cookie-string is being generated for a "non-HTTP" API" - if (c.httpOnly && !http) - return false; - - // deferred from S5.3 - // non-RFC: allow retention of expired cookies by choice - if (expireCheck && c.expiryTime() <= now) { - store.removeCookie(c.domain, c.path, c.key, function(){}); // result ignored - return false; - } - - return true; - } - - store.findCookies(host, allPaths ? null : path, function(err,cookies) { - if (err) return cb(err); - - cookies = cookies.filter(matchingCookie); - - // sorting of S5.4 part 2 - if (options.sort !== false) - cookies = cookies.sort(cookieCompare); - - // S5.4 part 3 - var now = new Date(); - cookies.forEach(function(c) { c.lastAccessed = now }); - // TODO persist lastAccessed - - cb(null,cookies); - }); -}; - -CookieJar.prototype.getCookieString = function(/*..., cb*/) { - var args = Array.prototype.slice.call(arguments,0); - var cb = args.pop(); - var next = function(err,cookies) { - if (err) cb(err); - else cb(null, cookies.map(function(c){return c.cookieString()}).join('; ')); - }; - args.push(next); - this.getCookies.apply(this,args); -}; - -CookieJar.prototype.getSetCookieStrings = function(/*..., cb*/) { - var args = Array.prototype.slice.call(arguments,0); - var cb = args.pop(); - var next = function(err,cookies) { - if (err) cb(err); - else cb(null, cookies.map(function(c){return c.toString()})); - }; - args.push(next); - this.getCookies.apply(this,args); -}; - - - -module.exports = { - CookieJar: CookieJar, - Cookie: Cookie, - parseDate: parseDate, - formatDate: formatDate, - parse: parse, - fromJSON: fromJSON, - domainMatch: domainMatch, - defaultPath: defaultPath, - pathMatch: pathMatch, - getPublicSuffix: pubsuffix.getPublicSuffix, - cookieCompare: cookieCompare, - permuteDomain: permuteDomain, - permutePath: permutePath, - canonicalDomain: canonicalDomain, -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/memstore.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/memstore.js deleted file mode 100644 index 66abb376..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/memstore.js +++ /dev/null @@ -1,102 +0,0 @@ -var tough = require('./cookie'); -var permuteDomain = tough.permuteDomain; -var permutePath = tough.permutePath; -var util = require('util'); - -function MemoryCookieStore() { - this.idx = {}; -} -module.exports.MemoryCookieStore = MemoryCookieStore; -MemoryCookieStore.prototype.idx = null; - -// force a default depth: -MemoryCookieStore.prototype.inspect = function inspect() { - return "{ idx: "+util.inspect(this.idx, false, 2)+' }'; -}; - -MemoryCookieStore.prototype.findCookie = function findCookie(domain, path, key, cb) { - if (!this.idx[domain]) return cb(null,undefined); - if (!this.idx[domain][path]) return cb(null,undefined); - return cb(null,this.idx[domain][path][key]||null); -}; - -MemoryCookieStore.prototype.findCookies = function findCookies(domain, path, cb) { - var results = []; - if (!domain) return cb(null,[]); - - var pathMatcher; - if (!path) { - // null or '/' means "all paths" - pathMatcher = function matchAll(domainIndex) { - for (var curPath in domainIndex) { - var pathIndex = domainIndex[curPath]; - for (var key in pathIndex) { - results.push(pathIndex[key]); - } - } - }; - - } else if (path === '/') { - pathMatcher = function matchSlash(domainIndex) { - var pathIndex = domainIndex['/']; - if (!pathIndex) return; - for (var key in pathIndex) { - results.push(pathIndex[key]); - } - }; - - } else { - var paths = permutePath(path) || [path]; - pathMatcher = function matchRFC(domainIndex) { - paths.forEach(function(curPath) { - var pathIndex = domainIndex[curPath]; - if (!pathIndex) return; - for (var key in pathIndex) { - results.push(pathIndex[key]); - } - }); - }; - } - - var domains = permuteDomain(domain) || [domain]; - var idx = this.idx; - domains.forEach(function(curDomain) { - var domainIndex = idx[curDomain]; - if (!domainIndex) return; - pathMatcher(domainIndex); - }); - - cb(null,results); -}; - -MemoryCookieStore.prototype.putCookie = function putCookie(cookie, cb) { - if (!this.idx[cookie.domain]) this.idx[cookie.domain] = {}; - if (!this.idx[cookie.domain][cookie.path]) this.idx[cookie.domain][cookie.path] = {}; - this.idx[cookie.domain][cookie.path][cookie.key] = cookie; - cb(null); -}; - -MemoryCookieStore.prototype.updateCookie = function updateCookie(oldCookie, newCookie, cb) { - // updateCookie() may avoid updating cookies that are identical. For example, - // lastAccessed may not be important to some stores and an equality - // comparison could exclude that field. - this.putCookie(newCookie,cb); -}; - -MemoryCookieStore.prototype.removeCookie = function removeCookie(domain, path, key, cb) { - if (this.idx[domain] && this.idx[domain][path] && this.idx[domain][path][key]) { - delete this.idx[domain][path][key]; - } - cb(null); -}; - -MemoryCookieStore.prototype.removeCookies = function removeCookies(domain, path, cb) { - if (!this.idx[domain]) { - if (path) { - delete this.idx[domain][path]; - } else { - delete this.idx[domain]; - } - } - return cb(null); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js deleted file mode 100644 index a7031473..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************** - * AUTOMATICALLY GENERATED by generate-pubsuffix.js * - * DO NOT EDIT! * - ****************************************************/ - -module.exports.getPublicSuffix = function getPublicSuffix(domain) { - /* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - if (!domain) return null; - if (domain.match(/^\./)) return null; - - domain = domain.toLowerCase(); - var parts = domain.split('.').reverse(); - - var suffix = ''; - var suffixLen = 0; - for (var i=0; i<parts.length; i++) { - var part = parts[i]; - var starstr = '*'+suffix; - var partstr = part+suffix; - - if (index[starstr]) { // star rule matches - suffixLen = i+1; - if (index[partstr] === false) { // exception rule matches (NB: false, not undefined) - suffixLen--; - } - } else if (index[partstr]) { // exact match, not exception - suffixLen = i+1; - } - - suffix = '.'+part+suffix; - } - - if (index['*'+suffix]) { // *.domain exists (e.g. *.kyoto.jp for domain='kyoto.jp'); - return null; - } - - if (suffixLen && parts.length > suffixLen) { - return parts.slice(0,suffixLen+1).reverse().join('.'); - } - - return null; -}; - -// The following generated structure is used under the MPL version 1.1 -// See public-suffix.txt for more information - -var index = module.exports.index = Object.freeze( -{"ac":true,"com.ac":true,"edu.ac":true,"gov.ac":true,"net.ac":true,"mil.ac":true,"org.ac":true,"ad":true,"nom.ad":true,"ae":true,"co.ae":true,"net.ae":true,"org.ae":true,"sch.ae":true,"ac.ae":true,"gov.ae":true,"mil.ae":true,"aero":true,"accident-investigation.aero":true,"accident-prevention.aero":true,"aerobatic.aero":true,"aeroclub.aero":true,"aerodrome.aero":true,"agents.aero":true,"aircraft.aero":true,"airline.aero":true,"airport.aero":true,"air-surveillance.aero":true,"airtraffic.aero":true,"air-traffic-control.aero":true,"ambulance.aero":true,"amusement.aero":true,"association.aero":true,"author.aero":true,"ballooning.aero":true,"broker.aero":true,"caa.aero":true,"cargo.aero":true,"catering.aero":true,"certification.aero":true,"championship.aero":true,"charter.aero":true,"civilaviation.aero":true,"club.aero":true,"conference.aero":true,"consultant.aero":true,"consulting.aero":true,"control.aero":true,"council.aero":true,"crew.aero":true,"design.aero":true,"dgca.aero":true,"educator.aero":true,"emergency.aero":true,"engine.aero":true,"engineer.aero":true,"entertainment.aero":true,"equipment.aero":true,"exchange.aero":true,"express.aero":true,"federation.aero":true,"flight.aero":true,"freight.aero":true,"fuel.aero":true,"gliding.aero":true,"government.aero":true,"groundhandling.aero":true,"group.aero":true,"hanggliding.aero":true,"homebuilt.aero":true,"insurance.aero":true,"journal.aero":true,"journalist.aero":true,"leasing.aero":true,"logistics.aero":true,"magazine.aero":true,"maintenance.aero":true,"marketplace.aero":true,"media.aero":true,"microlight.aero":true,"modelling.aero":true,"navigation.aero":true,"parachuting.aero":true,"paragliding.aero":true,"passenger-association.aero":true,"pilot.aero":true,"press.aero":true,"production.aero":true,"recreation.aero":true,"repbody.aero":true,"res.aero":true,"research.aero":true,"rotorcraft.aero":true,"safety.aero":true,"scientist.aero":true,"services.aero":true,"show.aero":true,"skydiving.aero":true,"software.aero":true,"student.aero":true,"taxi.aero":true,"trader.aero":true,"trading.aero":true,"trainer.aero":true,"union.aero":true,"workinggroup.aero":true,"works.aero":true,"af":true,"gov.af":true,"com.af":true,"org.af":true,"net.af":true,"edu.af":true,"ag":true,"com.ag":true,"org.ag":true,"net.ag":true,"co.ag":true,"nom.ag":true,"ai":true,"off.ai":true,"com.ai":true,"net.ai":true,"org.ai":true,"al":true,"com.al":true,"edu.al":true,"gov.al":true,"mil.al":true,"net.al":true,"org.al":true,"am":true,"an":true,"com.an":true,"net.an":true,"org.an":true,"edu.an":true,"ao":true,"ed.ao":true,"gv.ao":true,"og.ao":true,"co.ao":true,"pb.ao":true,"it.ao":true,"aq":true,"*.ar":true,"congresodelalengua3.ar":false,"educ.ar":false,"gobiernoelectronico.ar":false,"mecon.ar":false,"nacion.ar":false,"nic.ar":false,"promocion.ar":false,"retina.ar":false,"uba.ar":false,"e164.arpa":true,"in-addr.arpa":true,"ip6.arpa":true,"iris.arpa":true,"uri.arpa":true,"urn.arpa":true,"as":true,"gov.as":true,"asia":true,"at":true,"ac.at":true,"co.at":true,"gv.at":true,"or.at":true,"com.au":true,"net.au":true,"org.au":true,"edu.au":true,"gov.au":true,"csiro.au":true,"asn.au":true,"id.au":true,"info.au":true,"conf.au":true,"oz.au":true,"act.au":true,"nsw.au":true,"nt.au":true,"qld.au":true,"sa.au":true,"tas.au":true,"vic.au":true,"wa.au":true,"act.edu.au":true,"nsw.edu.au":true,"nt.edu.au":true,"qld.edu.au":true,"sa.edu.au":true,"tas.edu.au":true,"vic.edu.au":true,"wa.edu.au":true,"act.gov.au":true,"nt.gov.au":true,"qld.gov.au":true,"sa.gov.au":true,"tas.gov.au":true,"vic.gov.au":true,"wa.gov.au":true,"aw":true,"com.aw":true,"ax":true,"az":true,"com.az":true,"net.az":true,"int.az":true,"gov.az":true,"org.az":true,"edu.az":true,"info.az":true,"pp.az":true,"mil.az":true,"name.az":true,"pro.az":true,"biz.az":true,"ba":true,"org.ba":true,"net.ba":true,"edu.ba":true,"gov.ba":true,"mil.ba":true,"unsa.ba":true,"unbi.ba":true,"co.ba":true,"com.ba":true,"rs.ba":true,"bb":true,"biz.bb":true,"com.bb":true,"edu.bb":true,"gov.bb":true,"info.bb":true,"net.bb":true,"org.bb":true,"store.bb":true,"*.bd":true,"be":true,"ac.be":true,"bf":true,"gov.bf":true,"bg":true,"a.bg":true,"b.bg":true,"c.bg":true,"d.bg":true,"e.bg":true,"f.bg":true,"g.bg":true,"h.bg":true,"i.bg":true,"j.bg":true,"k.bg":true,"l.bg":true,"m.bg":true,"n.bg":true,"o.bg":true,"p.bg":true,"q.bg":true,"r.bg":true,"s.bg":true,"t.bg":true,"u.bg":true,"v.bg":true,"w.bg":true,"x.bg":true,"y.bg":true,"z.bg":true,"0.bg":true,"1.bg":true,"2.bg":true,"3.bg":true,"4.bg":true,"5.bg":true,"6.bg":true,"7.bg":true,"8.bg":true,"9.bg":true,"bh":true,"com.bh":true,"edu.bh":true,"net.bh":true,"org.bh":true,"gov.bh":true,"bi":true,"co.bi":true,"com.bi":true,"edu.bi":true,"or.bi":true,"org.bi":true,"biz":true,"bj":true,"asso.bj":true,"barreau.bj":true,"gouv.bj":true,"bm":true,"com.bm":true,"edu.bm":true,"gov.bm":true,"net.bm":true,"org.bm":true,"*.bn":true,"bo":true,"com.bo":true,"edu.bo":true,"gov.bo":true,"gob.bo":true,"int.bo":true,"org.bo":true,"net.bo":true,"mil.bo":true,"tv.bo":true,"br":true,"adm.br":true,"adv.br":true,"agr.br":true,"am.br":true,"arq.br":true,"art.br":true,"ato.br":true,"b.br":true,"bio.br":true,"blog.br":true,"bmd.br":true,"can.br":true,"cim.br":true,"cng.br":true,"cnt.br":true,"com.br":true,"coop.br":true,"ecn.br":true,"edu.br":true,"emp.br":true,"eng.br":true,"esp.br":true,"etc.br":true,"eti.br":true,"far.br":true,"flog.br":true,"fm.br":true,"fnd.br":true,"fot.br":true,"fst.br":true,"g12.br":true,"ggf.br":true,"gov.br":true,"imb.br":true,"ind.br":true,"inf.br":true,"jor.br":true,"jus.br":true,"lel.br":true,"mat.br":true,"med.br":true,"mil.br":true,"mus.br":true,"net.br":true,"nom.br":true,"not.br":true,"ntr.br":true,"odo.br":true,"org.br":true,"ppg.br":true,"pro.br":true,"psc.br":true,"psi.br":true,"qsl.br":true,"radio.br":true,"rec.br":true,"slg.br":true,"srv.br":true,"taxi.br":true,"teo.br":true,"tmp.br":true,"trd.br":true,"tur.br":true,"tv.br":true,"vet.br":true,"vlog.br":true,"wiki.br":true,"zlg.br":true,"bs":true,"com.bs":true,"net.bs":true,"org.bs":true,"edu.bs":true,"gov.bs":true,"bt":true,"com.bt":true,"edu.bt":true,"gov.bt":true,"net.bt":true,"org.bt":true,"bw":true,"co.bw":true,"org.bw":true,"by":true,"gov.by":true,"mil.by":true,"com.by":true,"of.by":true,"bz":true,"com.bz":true,"net.bz":true,"org.bz":true,"edu.bz":true,"gov.bz":true,"ca":true,"ab.ca":true,"bc.ca":true,"mb.ca":true,"nb.ca":true,"nf.ca":true,"nl.ca":true,"ns.ca":true,"nt.ca":true,"nu.ca":true,"on.ca":true,"pe.ca":true,"qc.ca":true,"sk.ca":true,"yk.ca":true,"gc.ca":true,"cat":true,"cc":true,"cd":true,"gov.cd":true,"cf":true,"cg":true,"ch":true,"ci":true,"org.ci":true,"or.ci":true,"com.ci":true,"co.ci":true,"edu.ci":true,"ed.ci":true,"ac.ci":true,"net.ci":true,"go.ci":true,"asso.ci":true,"xn--aroport-bya.ci":true,"int.ci":true,"presse.ci":true,"md.ci":true,"gouv.ci":true,"*.ck":true,"www.ck":false,"cl":true,"gov.cl":true,"gob.cl":true,"co.cl":true,"mil.cl":true,"cm":true,"gov.cm":true,"cn":true,"ac.cn":true,"com.cn":true,"edu.cn":true,"gov.cn":true,"net.cn":true,"org.cn":true,"mil.cn":true,"xn--55qx5d.cn":true,"xn--io0a7i.cn":true,"xn--od0alg.cn":true,"ah.cn":true,"bj.cn":true,"cq.cn":true,"fj.cn":true,"gd.cn":true,"gs.cn":true,"gz.cn":true,"gx.cn":true,"ha.cn":true,"hb.cn":true,"he.cn":true,"hi.cn":true,"hl.cn":true,"hn.cn":true,"jl.cn":true,"js.cn":true,"jx.cn":true,"ln.cn":true,"nm.cn":true,"nx.cn":true,"qh.cn":true,"sc.cn":true,"sd.cn":true,"sh.cn":true,"sn.cn":true,"sx.cn":true,"tj.cn":true,"xj.cn":true,"xz.cn":true,"yn.cn":true,"zj.cn":true,"hk.cn":true,"mo.cn":true,"tw.cn":true,"co":true,"arts.co":true,"com.co":true,"edu.co":true,"firm.co":true,"gov.co":true,"info.co":true,"int.co":true,"mil.co":true,"net.co":true,"nom.co":true,"org.co":true,"rec.co":true,"web.co":true,"com":true,"coop":true,"cr":true,"ac.cr":true,"co.cr":true,"ed.cr":true,"fi.cr":true,"go.cr":true,"or.cr":true,"sa.cr":true,"cu":true,"com.cu":true,"edu.cu":true,"org.cu":true,"net.cu":true,"gov.cu":true,"inf.cu":true,"cv":true,"cx":true,"gov.cx":true,"*.cy":true,"cz":true,"de":true,"dj":true,"dk":true,"dm":true,"com.dm":true,"net.dm":true,"org.dm":true,"edu.dm":true,"gov.dm":true,"do":true,"art.do":true,"com.do":true,"edu.do":true,"gob.do":true,"gov.do":true,"mil.do":true,"net.do":true,"org.do":true,"sld.do":true,"web.do":true,"dz":true,"com.dz":true,"org.dz":true,"net.dz":true,"gov.dz":true,"edu.dz":true,"asso.dz":true,"pol.dz":true,"art.dz":true,"ec":true,"com.ec":true,"info.ec":true,"net.ec":true,"fin.ec":true,"k12.ec":true,"med.ec":true,"pro.ec":true,"org.ec":true,"edu.ec":true,"gov.ec":true,"gob.ec":true,"mil.ec":true,"edu":true,"ee":true,"edu.ee":true,"gov.ee":true,"riik.ee":true,"lib.ee":true,"med.ee":true,"com.ee":true,"pri.ee":true,"aip.ee":true,"org.ee":true,"fie.ee":true,"eg":true,"com.eg":true,"edu.eg":true,"eun.eg":true,"gov.eg":true,"mil.eg":true,"name.eg":true,"net.eg":true,"org.eg":true,"sci.eg":true,"*.er":true,"es":true,"com.es":true,"nom.es":true,"org.es":true,"gob.es":true,"edu.es":true,"*.et":true,"eu":true,"fi":true,"aland.fi":true,"*.fj":true,"*.fk":true,"fm":true,"fo":true,"fr":true,"com.fr":true,"asso.fr":true,"nom.fr":true,"prd.fr":true,"presse.fr":true,"tm.fr":true,"aeroport.fr":true,"assedic.fr":true,"avocat.fr":true,"avoues.fr":true,"cci.fr":true,"chambagri.fr":true,"chirurgiens-dentistes.fr":true,"experts-comptables.fr":true,"geometre-expert.fr":true,"gouv.fr":true,"greta.fr":true,"huissier-justice.fr":true,"medecin.fr":true,"notaires.fr":true,"pharmacien.fr":true,"port.fr":true,"veterinaire.fr":true,"ga":true,"gd":true,"ge":true,"com.ge":true,"edu.ge":true,"gov.ge":true,"org.ge":true,"mil.ge":true,"net.ge":true,"pvt.ge":true,"gf":true,"gg":true,"co.gg":true,"org.gg":true,"net.gg":true,"sch.gg":true,"gov.gg":true,"gh":true,"com.gh":true,"edu.gh":true,"gov.gh":true,"org.gh":true,"mil.gh":true,"gi":true,"com.gi":true,"ltd.gi":true,"gov.gi":true,"mod.gi":true,"edu.gi":true,"org.gi":true,"gl":true,"gm":true,"ac.gn":true,"com.gn":true,"edu.gn":true,"gov.gn":true,"org.gn":true,"net.gn":true,"gov":true,"gp":true,"com.gp":true,"net.gp":true,"mobi.gp":true,"edu.gp":true,"org.gp":true,"asso.gp":true,"gq":true,"gr":true,"com.gr":true,"edu.gr":true,"net.gr":true,"org.gr":true,"gov.gr":true,"gs":true,"*.gt":true,"www.gt":false,"*.gu":true,"gw":true,"gy":true,"co.gy":true,"com.gy":true,"net.gy":true,"hk":true,"com.hk":true,"edu.hk":true,"gov.hk":true,"idv.hk":true,"net.hk":true,"org.hk":true,"xn--55qx5d.hk":true,"xn--wcvs22d.hk":true,"xn--lcvr32d.hk":true,"xn--mxtq1m.hk":true,"xn--gmqw5a.hk":true,"xn--ciqpn.hk":true,"xn--gmq050i.hk":true,"xn--zf0avx.hk":true,"xn--io0a7i.hk":true,"xn--mk0axi.hk":true,"xn--od0alg.hk":true,"xn--od0aq3b.hk":true,"xn--tn0ag.hk":true,"xn--uc0atv.hk":true,"xn--uc0ay4a.hk":true,"hm":true,"hn":true,"com.hn":true,"edu.hn":true,"org.hn":true,"net.hn":true,"mil.hn":true,"gob.hn":true,"hr":true,"iz.hr":true,"from.hr":true,"name.hr":true,"com.hr":true,"ht":true,"com.ht":true,"shop.ht":true,"firm.ht":true,"info.ht":true,"adult.ht":true,"net.ht":true,"pro.ht":true,"org.ht":true,"med.ht":true,"art.ht":true,"coop.ht":true,"pol.ht":true,"asso.ht":true,"edu.ht":true,"rel.ht":true,"gouv.ht":true,"perso.ht":true,"hu":true,"co.hu":true,"info.hu":true,"org.hu":true,"priv.hu":true,"sport.hu":true,"tm.hu":true,"2000.hu":true,"agrar.hu":true,"bolt.hu":true,"casino.hu":true,"city.hu":true,"erotica.hu":true,"erotika.hu":true,"film.hu":true,"forum.hu":true,"games.hu":true,"hotel.hu":true,"ingatlan.hu":true,"jogasz.hu":true,"konyvelo.hu":true,"lakas.hu":true,"media.hu":true,"news.hu":true,"reklam.hu":true,"sex.hu":true,"shop.hu":true,"suli.hu":true,"szex.hu":true,"tozsde.hu":true,"utazas.hu":true,"video.hu":true,"id":true,"ac.id":true,"co.id":true,"go.id":true,"mil.id":true,"net.id":true,"or.id":true,"sch.id":true,"web.id":true,"ie":true,"gov.ie":true,"*.il":true,"im":true,"co.im":true,"ltd.co.im":true,"plc.co.im":true,"net.im":true,"gov.im":true,"org.im":true,"nic.im":true,"ac.im":true,"in":true,"co.in":true,"firm.in":true,"net.in":true,"org.in":true,"gen.in":true,"ind.in":true,"nic.in":true,"ac.in":true,"edu.in":true,"res.in":true,"gov.in":true,"mil.in":true,"info":true,"int":true,"eu.int":true,"io":true,"com.io":true,"iq":true,"gov.iq":true,"edu.iq":true,"mil.iq":true,"com.iq":true,"org.iq":true,"net.iq":true,"ir":true,"ac.ir":true,"co.ir":true,"gov.ir":true,"id.ir":true,"net.ir":true,"org.ir":true,"sch.ir":true,"xn--mgba3a4f16a.ir":true,"xn--mgba3a4fra.ir":true,"is":true,"net.is":true,"com.is":true,"edu.is":true,"gov.is":true,"org.is":true,"int.is":true,"it":true,"gov.it":true,"edu.it":true,"agrigento.it":true,"ag.it":true,"alessandria.it":true,"al.it":true,"ancona.it":true,"an.it":true,"aosta.it":true,"aoste.it":true,"ao.it":true,"arezzo.it":true,"ar.it":true,"ascoli-piceno.it":true,"ascolipiceno.it":true,"ap.it":true,"asti.it":true,"at.it":true,"avellino.it":true,"av.it":true,"bari.it":true,"ba.it":true,"andria-barletta-trani.it":true,"andriabarlettatrani.it":true,"trani-barletta-andria.it":true,"tranibarlettaandria.it":true,"barletta-trani-andria.it":true,"barlettatraniandria.it":true,"andria-trani-barletta.it":true,"andriatranibarletta.it":true,"trani-andria-barletta.it":true,"traniandriabarletta.it":true,"bt.it":true,"belluno.it":true,"bl.it":true,"benevento.it":true,"bn.it":true,"bergamo.it":true,"bg.it":true,"biella.it":true,"bi.it":true,"bologna.it":true,"bo.it":true,"bolzano.it":true,"bozen.it":true,"balsan.it":true,"alto-adige.it":true,"altoadige.it":true,"suedtirol.it":true,"bz.it":true,"brescia.it":true,"bs.it":true,"brindisi.it":true,"br.it":true,"cagliari.it":true,"ca.it":true,"caltanissetta.it":true,"cl.it":true,"campobasso.it":true,"cb.it":true,"carboniaiglesias.it":true,"carbonia-iglesias.it":true,"iglesias-carbonia.it":true,"iglesiascarbonia.it":true,"ci.it":true,"caserta.it":true,"ce.it":true,"catania.it":true,"ct.it":true,"catanzaro.it":true,"cz.it":true,"chieti.it":true,"ch.it":true,"como.it":true,"co.it":true,"cosenza.it":true,"cs.it":true,"cremona.it":true,"cr.it":true,"crotone.it":true,"kr.it":true,"cuneo.it":true,"cn.it":true,"dell-ogliastra.it":true,"dellogliastra.it":true,"ogliastra.it":true,"og.it":true,"enna.it":true,"en.it":true,"ferrara.it":true,"fe.it":true,"fermo.it":true,"fm.it":true,"firenze.it":true,"florence.it":true,"fi.it":true,"foggia.it":true,"fg.it":true,"forli-cesena.it":true,"forlicesena.it":true,"cesena-forli.it":true,"cesenaforli.it":true,"fc.it":true,"frosinone.it":true,"fr.it":true,"genova.it":true,"genoa.it":true,"ge.it":true,"gorizia.it":true,"go.it":true,"grosseto.it":true,"gr.it":true,"imperia.it":true,"im.it":true,"isernia.it":true,"is.it":true,"laquila.it":true,"aquila.it":true,"aq.it":true,"la-spezia.it":true,"laspezia.it":true,"sp.it":true,"latina.it":true,"lt.it":true,"lecce.it":true,"le.it":true,"lecco.it":true,"lc.it":true,"livorno.it":true,"li.it":true,"lodi.it":true,"lo.it":true,"lucca.it":true,"lu.it":true,"macerata.it":true,"mc.it":true,"mantova.it":true,"mn.it":true,"massa-carrara.it":true,"massacarrara.it":true,"carrara-massa.it":true,"carraramassa.it":true,"ms.it":true,"matera.it":true,"mt.it":true,"medio-campidano.it":true,"mediocampidano.it":true,"campidano-medio.it":true,"campidanomedio.it":true,"vs.it":true,"messina.it":true,"me.it":true,"milano.it":true,"milan.it":true,"mi.it":true,"modena.it":true,"mo.it":true,"monza.it":true,"monza-brianza.it":true,"monzabrianza.it":true,"monzaebrianza.it":true,"monzaedellabrianza.it":true,"monza-e-della-brianza.it":true,"mb.it":true,"napoli.it":true,"naples.it":true,"na.it":true,"novara.it":true,"no.it":true,"nuoro.it":true,"nu.it":true,"oristano.it":true,"or.it":true,"padova.it":true,"padua.it":true,"pd.it":true,"palermo.it":true,"pa.it":true,"parma.it":true,"pr.it":true,"pavia.it":true,"pv.it":true,"perugia.it":true,"pg.it":true,"pescara.it":true,"pe.it":true,"pesaro-urbino.it":true,"pesarourbino.it":true,"urbino-pesaro.it":true,"urbinopesaro.it":true,"pu.it":true,"piacenza.it":true,"pc.it":true,"pisa.it":true,"pi.it":true,"pistoia.it":true,"pt.it":true,"pordenone.it":true,"pn.it":true,"potenza.it":true,"pz.it":true,"prato.it":true,"po.it":true,"ragusa.it":true,"rg.it":true,"ravenna.it":true,"ra.it":true,"reggio-calabria.it":true,"reggiocalabria.it":true,"rc.it":true,"reggio-emilia.it":true,"reggioemilia.it":true,"re.it":true,"rieti.it":true,"ri.it":true,"rimini.it":true,"rn.it":true,"roma.it":true,"rome.it":true,"rm.it":true,"rovigo.it":true,"ro.it":true,"salerno.it":true,"sa.it":true,"sassari.it":true,"ss.it":true,"savona.it":true,"sv.it":true,"siena.it":true,"si.it":true,"siracusa.it":true,"sr.it":true,"sondrio.it":true,"so.it":true,"taranto.it":true,"ta.it":true,"tempio-olbia.it":true,"tempioolbia.it":true,"olbia-tempio.it":true,"olbiatempio.it":true,"ot.it":true,"teramo.it":true,"te.it":true,"terni.it":true,"tr.it":true,"torino.it":true,"turin.it":true,"to.it":true,"trapani.it":true,"tp.it":true,"trento.it":true,"trentino.it":true,"tn.it":true,"treviso.it":true,"tv.it":true,"trieste.it":true,"ts.it":true,"udine.it":true,"ud.it":true,"varese.it":true,"va.it":true,"venezia.it":true,"venice.it":true,"ve.it":true,"verbania.it":true,"vb.it":true,"vercelli.it":true,"vc.it":true,"verona.it":true,"vr.it":true,"vibo-valentia.it":true,"vibovalentia.it":true,"vv.it":true,"vicenza.it":true,"vi.it":true,"viterbo.it":true,"vt.it":true,"je":true,"co.je":true,"org.je":true,"net.je":true,"sch.je":true,"gov.je":true,"*.jm":true,"jo":true,"com.jo":true,"org.jo":true,"net.jo":true,"edu.jo":true,"sch.jo":true,"gov.jo":true,"mil.jo":true,"name.jo":true,"jobs":true,"jp":true,"ac.jp":true,"ad.jp":true,"co.jp":true,"ed.jp":true,"go.jp":true,"gr.jp":true,"lg.jp":true,"ne.jp":true,"or.jp":true,"*.aichi.jp":true,"*.akita.jp":true,"*.aomori.jp":true,"*.chiba.jp":true,"*.ehime.jp":true,"*.fukui.jp":true,"*.fukuoka.jp":true,"*.fukushima.jp":true,"*.gifu.jp":true,"*.gunma.jp":true,"*.hiroshima.jp":true,"*.hokkaido.jp":true,"*.hyogo.jp":true,"*.ibaraki.jp":true,"*.ishikawa.jp":true,"*.iwate.jp":true,"*.kagawa.jp":true,"*.kagoshima.jp":true,"*.kanagawa.jp":true,"*.kawasaki.jp":true,"*.kitakyushu.jp":true,"*.kobe.jp":true,"*.kochi.jp":true,"*.kumamoto.jp":true,"*.kyoto.jp":true,"*.mie.jp":true,"*.miyagi.jp":true,"*.miyazaki.jp":true,"*.nagano.jp":true,"*.nagasaki.jp":true,"*.nagoya.jp":true,"*.nara.jp":true,"*.niigata.jp":true,"*.oita.jp":true,"*.okayama.jp":true,"*.okinawa.jp":true,"*.osaka.jp":true,"*.saga.jp":true,"*.saitama.jp":true,"*.sapporo.jp":true,"*.sendai.jp":true,"*.shiga.jp":true,"*.shimane.jp":true,"*.shizuoka.jp":true,"*.tochigi.jp":true,"*.tokushima.jp":true,"*.tokyo.jp":true,"*.tottori.jp":true,"*.toyama.jp":true,"*.wakayama.jp":true,"*.yamagata.jp":true,"*.yamaguchi.jp":true,"*.yamanashi.jp":true,"*.yokohama.jp":true,"metro.tokyo.jp":false,"pref.aichi.jp":false,"pref.akita.jp":false,"pref.aomori.jp":false,"pref.chiba.jp":false,"pref.ehime.jp":false,"pref.fukui.jp":false,"pref.fukuoka.jp":false,"pref.fukushima.jp":false,"pref.gifu.jp":false,"pref.gunma.jp":false,"pref.hiroshima.jp":false,"pref.hokkaido.jp":false,"pref.hyogo.jp":false,"pref.ibaraki.jp":false,"pref.ishikawa.jp":false,"pref.iwate.jp":false,"pref.kagawa.jp":false,"pref.kagoshima.jp":false,"pref.kanagawa.jp":false,"pref.kochi.jp":false,"pref.kumamoto.jp":false,"pref.kyoto.jp":false,"pref.mie.jp":false,"pref.miyagi.jp":false,"pref.miyazaki.jp":false,"pref.nagano.jp":false,"pref.nagasaki.jp":false,"pref.nara.jp":false,"pref.niigata.jp":false,"pref.oita.jp":false,"pref.okayama.jp":false,"pref.okinawa.jp":false,"pref.osaka.jp":false,"pref.saga.jp":false,"pref.saitama.jp":false,"pref.shiga.jp":false,"pref.shimane.jp":false,"pref.shizuoka.jp":false,"pref.tochigi.jp":false,"pref.tokushima.jp":false,"pref.tottori.jp":false,"pref.toyama.jp":false,"pref.wakayama.jp":false,"pref.yamagata.jp":false,"pref.yamaguchi.jp":false,"pref.yamanashi.jp":false,"city.chiba.jp":false,"city.fukuoka.jp":false,"city.hiroshima.jp":false,"city.kawasaki.jp":false,"city.kitakyushu.jp":false,"city.kobe.jp":false,"city.kyoto.jp":false,"city.nagoya.jp":false,"city.niigata.jp":false,"city.okayama.jp":false,"city.osaka.jp":false,"city.saitama.jp":false,"city.sapporo.jp":false,"city.sendai.jp":false,"city.shizuoka.jp":false,"city.yokohama.jp":false,"*.ke":true,"kg":true,"org.kg":true,"net.kg":true,"com.kg":true,"edu.kg":true,"gov.kg":true,"mil.kg":true,"*.kh":true,"ki":true,"edu.ki":true,"biz.ki":true,"net.ki":true,"org.ki":true,"gov.ki":true,"info.ki":true,"com.ki":true,"km":true,"org.km":true,"nom.km":true,"gov.km":true,"prd.km":true,"tm.km":true,"edu.km":true,"mil.km":true,"ass.km":true,"com.km":true,"coop.km":true,"asso.km":true,"presse.km":true,"medecin.km":true,"notaires.km":true,"pharmaciens.km":true,"veterinaire.km":true,"gouv.km":true,"kn":true,"net.kn":true,"org.kn":true,"edu.kn":true,"gov.kn":true,"com.kp":true,"edu.kp":true,"gov.kp":true,"org.kp":true,"rep.kp":true,"tra.kp":true,"kr":true,"ac.kr":true,"co.kr":true,"es.kr":true,"go.kr":true,"hs.kr":true,"kg.kr":true,"mil.kr":true,"ms.kr":true,"ne.kr":true,"or.kr":true,"pe.kr":true,"re.kr":true,"sc.kr":true,"busan.kr":true,"chungbuk.kr":true,"chungnam.kr":true,"daegu.kr":true,"daejeon.kr":true,"gangwon.kr":true,"gwangju.kr":true,"gyeongbuk.kr":true,"gyeonggi.kr":true,"gyeongnam.kr":true,"incheon.kr":true,"jeju.kr":true,"jeonbuk.kr":true,"jeonnam.kr":true,"seoul.kr":true,"ulsan.kr":true,"*.kw":true,"ky":true,"edu.ky":true,"gov.ky":true,"com.ky":true,"org.ky":true,"net.ky":true,"kz":true,"org.kz":true,"edu.kz":true,"net.kz":true,"gov.kz":true,"mil.kz":true,"com.kz":true,"la":true,"int.la":true,"net.la":true,"info.la":true,"edu.la":true,"gov.la":true,"per.la":true,"com.la":true,"org.la":true,"com.lb":true,"edu.lb":true,"gov.lb":true,"net.lb":true,"org.lb":true,"lc":true,"com.lc":true,"net.lc":true,"co.lc":true,"org.lc":true,"edu.lc":true,"gov.lc":true,"li":true,"lk":true,"gov.lk":true,"sch.lk":true,"net.lk":true,"int.lk":true,"com.lk":true,"org.lk":true,"edu.lk":true,"ngo.lk":true,"soc.lk":true,"web.lk":true,"ltd.lk":true,"assn.lk":true,"grp.lk":true,"hotel.lk":true,"com.lr":true,"edu.lr":true,"gov.lr":true,"org.lr":true,"net.lr":true,"ls":true,"co.ls":true,"org.ls":true,"lt":true,"gov.lt":true,"lu":true,"lv":true,"com.lv":true,"edu.lv":true,"gov.lv":true,"org.lv":true,"mil.lv":true,"id.lv":true,"net.lv":true,"asn.lv":true,"conf.lv":true,"ly":true,"com.ly":true,"net.ly":true,"gov.ly":true,"plc.ly":true,"edu.ly":true,"sch.ly":true,"med.ly":true,"org.ly":true,"id.ly":true,"ma":true,"co.ma":true,"net.ma":true,"gov.ma":true,"org.ma":true,"ac.ma":true,"press.ma":true,"mc":true,"tm.mc":true,"asso.mc":true,"md":true,"me":true,"co.me":true,"net.me":true,"org.me":true,"edu.me":true,"ac.me":true,"gov.me":true,"its.me":true,"priv.me":true,"mg":true,"org.mg":true,"nom.mg":true,"gov.mg":true,"prd.mg":true,"tm.mg":true,"edu.mg":true,"mil.mg":true,"com.mg":true,"mh":true,"mil":true,"mk":true,"com.mk":true,"org.mk":true,"net.mk":true,"edu.mk":true,"gov.mk":true,"inf.mk":true,"name.mk":true,"ml":true,"com.ml":true,"edu.ml":true,"gouv.ml":true,"gov.ml":true,"net.ml":true,"org.ml":true,"presse.ml":true,"*.mm":true,"mn":true,"gov.mn":true,"edu.mn":true,"org.mn":true,"mo":true,"com.mo":true,"net.mo":true,"org.mo":true,"edu.mo":true,"gov.mo":true,"mobi":true,"mp":true,"mq":true,"mr":true,"gov.mr":true,"ms":true,"*.mt":true,"mu":true,"com.mu":true,"net.mu":true,"org.mu":true,"gov.mu":true,"ac.mu":true,"co.mu":true,"or.mu":true,"museum":true,"academy.museum":true,"agriculture.museum":true,"air.museum":true,"airguard.museum":true,"alabama.museum":true,"alaska.museum":true,"amber.museum":true,"ambulance.museum":true,"american.museum":true,"americana.museum":true,"americanantiques.museum":true,"americanart.museum":true,"amsterdam.museum":true,"and.museum":true,"annefrank.museum":true,"anthro.museum":true,"anthropology.museum":true,"antiques.museum":true,"aquarium.museum":true,"arboretum.museum":true,"archaeological.museum":true,"archaeology.museum":true,"architecture.museum":true,"art.museum":true,"artanddesign.museum":true,"artcenter.museum":true,"artdeco.museum":true,"arteducation.museum":true,"artgallery.museum":true,"arts.museum":true,"artsandcrafts.museum":true,"asmatart.museum":true,"assassination.museum":true,"assisi.museum":true,"association.museum":true,"astronomy.museum":true,"atlanta.museum":true,"austin.museum":true,"australia.museum":true,"automotive.museum":true,"aviation.museum":true,"axis.museum":true,"badajoz.museum":true,"baghdad.museum":true,"bahn.museum":true,"bale.museum":true,"baltimore.museum":true,"barcelona.museum":true,"baseball.museum":true,"basel.museum":true,"baths.museum":true,"bauern.museum":true,"beauxarts.museum":true,"beeldengeluid.museum":true,"bellevue.museum":true,"bergbau.museum":true,"berkeley.museum":true,"berlin.museum":true,"bern.museum":true,"bible.museum":true,"bilbao.museum":true,"bill.museum":true,"birdart.museum":true,"birthplace.museum":true,"bonn.museum":true,"boston.museum":true,"botanical.museum":true,"botanicalgarden.museum":true,"botanicgarden.museum":true,"botany.museum":true,"brandywinevalley.museum":true,"brasil.museum":true,"bristol.museum":true,"british.museum":true,"britishcolumbia.museum":true,"broadcast.museum":true,"brunel.museum":true,"brussel.museum":true,"brussels.museum":true,"bruxelles.museum":true,"building.museum":true,"burghof.museum":true,"bus.museum":true,"bushey.museum":true,"cadaques.museum":true,"california.museum":true,"cambridge.museum":true,"can.museum":true,"canada.museum":true,"capebreton.museum":true,"carrier.museum":true,"cartoonart.museum":true,"casadelamoneda.museum":true,"castle.museum":true,"castres.museum":true,"celtic.museum":true,"center.museum":true,"chattanooga.museum":true,"cheltenham.museum":true,"chesapeakebay.museum":true,"chicago.museum":true,"children.museum":true,"childrens.museum":true,"childrensgarden.museum":true,"chiropractic.museum":true,"chocolate.museum":true,"christiansburg.museum":true,"cincinnati.museum":true,"cinema.museum":true,"circus.museum":true,"civilisation.museum":true,"civilization.museum":true,"civilwar.museum":true,"clinton.museum":true,"clock.museum":true,"coal.museum":true,"coastaldefence.museum":true,"cody.museum":true,"coldwar.museum":true,"collection.museum":true,"colonialwilliamsburg.museum":true,"coloradoplateau.museum":true,"columbia.museum":true,"columbus.museum":true,"communication.museum":true,"communications.museum":true,"community.museum":true,"computer.museum":true,"computerhistory.museum":true,"xn--comunicaes-v6a2o.museum":true,"contemporary.museum":true,"contemporaryart.museum":true,"convent.museum":true,"copenhagen.museum":true,"corporation.museum":true,"xn--correios-e-telecomunicaes-ghc29a.museum":true,"corvette.museum":true,"costume.museum":true,"countryestate.museum":true,"county.museum":true,"crafts.museum":true,"cranbrook.museum":true,"creation.museum":true,"cultural.museum":true,"culturalcenter.museum":true,"culture.museum":true,"cyber.museum":true,"cymru.museum":true,"dali.museum":true,"dallas.museum":true,"database.museum":true,"ddr.museum":true,"decorativearts.museum":true,"delaware.museum":true,"delmenhorst.museum":true,"denmark.museum":true,"depot.museum":true,"design.museum":true,"detroit.museum":true,"dinosaur.museum":true,"discovery.museum":true,"dolls.museum":true,"donostia.museum":true,"durham.museum":true,"eastafrica.museum":true,"eastcoast.museum":true,"education.museum":true,"educational.museum":true,"egyptian.museum":true,"eisenbahn.museum":true,"elburg.museum":true,"elvendrell.museum":true,"embroidery.museum":true,"encyclopedic.museum":true,"england.museum":true,"entomology.museum":true,"environment.museum":true,"environmentalconservation.museum":true,"epilepsy.museum":true,"essex.museum":true,"estate.museum":true,"ethnology.museum":true,"exeter.museum":true,"exhibition.museum":true,"family.museum":true,"farm.museum":true,"farmequipment.museum":true,"farmers.museum":true,"farmstead.museum":true,"field.museum":true,"figueres.museum":true,"filatelia.museum":true,"film.museum":true,"fineart.museum":true,"finearts.museum":true,"finland.museum":true,"flanders.museum":true,"florida.museum":true,"force.museum":true,"fortmissoula.museum":true,"fortworth.museum":true,"foundation.museum":true,"francaise.museum":true,"frankfurt.museum":true,"franziskaner.museum":true,"freemasonry.museum":true,"freiburg.museum":true,"fribourg.museum":true,"frog.museum":true,"fundacio.museum":true,"furniture.museum":true,"gallery.museum":true,"garden.museum":true,"gateway.museum":true,"geelvinck.museum":true,"gemological.museum":true,"geology.museum":true,"georgia.museum":true,"giessen.museum":true,"glas.museum":true,"glass.museum":true,"gorge.museum":true,"grandrapids.museum":true,"graz.museum":true,"guernsey.museum":true,"halloffame.museum":true,"hamburg.museum":true,"handson.museum":true,"harvestcelebration.museum":true,"hawaii.museum":true,"health.museum":true,"heimatunduhren.museum":true,"hellas.museum":true,"helsinki.museum":true,"hembygdsforbund.museum":true,"heritage.museum":true,"histoire.museum":true,"historical.museum":true,"historicalsociety.museum":true,"historichouses.museum":true,"historisch.museum":true,"historisches.museum":true,"history.museum":true,"historyofscience.museum":true,"horology.museum":true,"house.museum":true,"humanities.museum":true,"illustration.museum":true,"imageandsound.museum":true,"indian.museum":true,"indiana.museum":true,"indianapolis.museum":true,"indianmarket.museum":true,"intelligence.museum":true,"interactive.museum":true,"iraq.museum":true,"iron.museum":true,"isleofman.museum":true,"jamison.museum":true,"jefferson.museum":true,"jerusalem.museum":true,"jewelry.museum":true,"jewish.museum":true,"jewishart.museum":true,"jfk.museum":true,"journalism.museum":true,"judaica.museum":true,"judygarland.museum":true,"juedisches.museum":true,"juif.museum":true,"karate.museum":true,"karikatur.museum":true,"kids.museum":true,"koebenhavn.museum":true,"koeln.museum":true,"kunst.museum":true,"kunstsammlung.museum":true,"kunstunddesign.museum":true,"labor.museum":true,"labour.museum":true,"lajolla.museum":true,"lancashire.museum":true,"landes.museum":true,"lans.museum":true,"xn--lns-qla.museum":true,"larsson.museum":true,"lewismiller.museum":true,"lincoln.museum":true,"linz.museum":true,"living.museum":true,"livinghistory.museum":true,"localhistory.museum":true,"london.museum":true,"losangeles.museum":true,"louvre.museum":true,"loyalist.museum":true,"lucerne.museum":true,"luxembourg.museum":true,"luzern.museum":true,"mad.museum":true,"madrid.museum":true,"mallorca.museum":true,"manchester.museum":true,"mansion.museum":true,"mansions.museum":true,"manx.museum":true,"marburg.museum":true,"maritime.museum":true,"maritimo.museum":true,"maryland.museum":true,"marylhurst.museum":true,"media.museum":true,"medical.museum":true,"medizinhistorisches.museum":true,"meeres.museum":true,"memorial.museum":true,"mesaverde.museum":true,"michigan.museum":true,"midatlantic.museum":true,"military.museum":true,"mill.museum":true,"miners.museum":true,"mining.museum":true,"minnesota.museum":true,"missile.museum":true,"missoula.museum":true,"modern.museum":true,"moma.museum":true,"money.museum":true,"monmouth.museum":true,"monticello.museum":true,"montreal.museum":true,"moscow.museum":true,"motorcycle.museum":true,"muenchen.museum":true,"muenster.museum":true,"mulhouse.museum":true,"muncie.museum":true,"museet.museum":true,"museumcenter.museum":true,"museumvereniging.museum":true,"music.museum":true,"national.museum":true,"nationalfirearms.museum":true,"nationalheritage.museum":true,"nativeamerican.museum":true,"naturalhistory.museum":true,"naturalhistorymuseum.museum":true,"naturalsciences.museum":true,"nature.museum":true,"naturhistorisches.museum":true,"natuurwetenschappen.museum":true,"naumburg.museum":true,"naval.museum":true,"nebraska.museum":true,"neues.museum":true,"newhampshire.museum":true,"newjersey.museum":true,"newmexico.museum":true,"newport.museum":true,"newspaper.museum":true,"newyork.museum":true,"niepce.museum":true,"norfolk.museum":true,"north.museum":true,"nrw.museum":true,"nuernberg.museum":true,"nuremberg.museum":true,"nyc.museum":true,"nyny.museum":true,"oceanographic.museum":true,"oceanographique.museum":true,"omaha.museum":true,"online.museum":true,"ontario.museum":true,"openair.museum":true,"oregon.museum":true,"oregontrail.museum":true,"otago.museum":true,"oxford.museum":true,"pacific.museum":true,"paderborn.museum":true,"palace.museum":true,"paleo.museum":true,"palmsprings.museum":true,"panama.museum":true,"paris.museum":true,"pasadena.museum":true,"pharmacy.museum":true,"philadelphia.museum":true,"philadelphiaarea.museum":true,"philately.museum":true,"phoenix.museum":true,"photography.museum":true,"pilots.museum":true,"pittsburgh.museum":true,"planetarium.museum":true,"plantation.museum":true,"plants.museum":true,"plaza.museum":true,"portal.museum":true,"portland.museum":true,"portlligat.museum":true,"posts-and-telecommunications.museum":true,"preservation.museum":true,"presidio.museum":true,"press.museum":true,"project.museum":true,"public.museum":true,"pubol.museum":true,"quebec.museum":true,"railroad.museum":true,"railway.museum":true,"research.museum":true,"resistance.museum":true,"riodejaneiro.museum":true,"rochester.museum":true,"rockart.museum":true,"roma.museum":true,"russia.museum":true,"saintlouis.museum":true,"salem.museum":true,"salvadordali.museum":true,"salzburg.museum":true,"sandiego.museum":true,"sanfrancisco.museum":true,"santabarbara.museum":true,"santacruz.museum":true,"santafe.museum":true,"saskatchewan.museum":true,"satx.museum":true,"savannahga.museum":true,"schlesisches.museum":true,"schoenbrunn.museum":true,"schokoladen.museum":true,"school.museum":true,"schweiz.museum":true,"science.museum":true,"scienceandhistory.museum":true,"scienceandindustry.museum":true,"sciencecenter.museum":true,"sciencecenters.museum":true,"science-fiction.museum":true,"sciencehistory.museum":true,"sciences.museum":true,"sciencesnaturelles.museum":true,"scotland.museum":true,"seaport.museum":true,"settlement.museum":true,"settlers.museum":true,"shell.museum":true,"sherbrooke.museum":true,"sibenik.museum":true,"silk.museum":true,"ski.museum":true,"skole.museum":true,"society.museum":true,"sologne.museum":true,"soundandvision.museum":true,"southcarolina.museum":true,"southwest.museum":true,"space.museum":true,"spy.museum":true,"square.museum":true,"stadt.museum":true,"stalbans.museum":true,"starnberg.museum":true,"state.museum":true,"stateofdelaware.museum":true,"station.museum":true,"steam.museum":true,"steiermark.museum":true,"stjohn.museum":true,"stockholm.museum":true,"stpetersburg.museum":true,"stuttgart.museum":true,"suisse.museum":true,"surgeonshall.museum":true,"surrey.museum":true,"svizzera.museum":true,"sweden.museum":true,"sydney.museum":true,"tank.museum":true,"tcm.museum":true,"technology.museum":true,"telekommunikation.museum":true,"television.museum":true,"texas.museum":true,"textile.museum":true,"theater.museum":true,"time.museum":true,"timekeeping.museum":true,"topology.museum":true,"torino.museum":true,"touch.museum":true,"town.museum":true,"transport.museum":true,"tree.museum":true,"trolley.museum":true,"trust.museum":true,"trustee.museum":true,"uhren.museum":true,"ulm.museum":true,"undersea.museum":true,"university.museum":true,"usa.museum":true,"usantiques.museum":true,"usarts.museum":true,"uscountryestate.museum":true,"usculture.museum":true,"usdecorativearts.museum":true,"usgarden.museum":true,"ushistory.museum":true,"ushuaia.museum":true,"uslivinghistory.museum":true,"utah.museum":true,"uvic.museum":true,"valley.museum":true,"vantaa.museum":true,"versailles.museum":true,"viking.museum":true,"village.museum":true,"virginia.museum":true,"virtual.museum":true,"virtuel.museum":true,"vlaanderen.museum":true,"volkenkunde.museum":true,"wales.museum":true,"wallonie.museum":true,"war.museum":true,"washingtondc.museum":true,"watchandclock.museum":true,"watch-and-clock.museum":true,"western.museum":true,"westfalen.museum":true,"whaling.museum":true,"wildlife.museum":true,"williamsburg.museum":true,"windmill.museum":true,"workshop.museum":true,"york.museum":true,"yorkshire.museum":true,"yosemite.museum":true,"youth.museum":true,"zoological.museum":true,"zoology.museum":true,"xn--9dbhblg6di.museum":true,"xn--h1aegh.museum":true,"mv":true,"aero.mv":true,"biz.mv":true,"com.mv":true,"coop.mv":true,"edu.mv":true,"gov.mv":true,"info.mv":true,"int.mv":true,"mil.mv":true,"museum.mv":true,"name.mv":true,"net.mv":true,"org.mv":true,"pro.mv":true,"mw":true,"ac.mw":true,"biz.mw":true,"co.mw":true,"com.mw":true,"coop.mw":true,"edu.mw":true,"gov.mw":true,"int.mw":true,"museum.mw":true,"net.mw":true,"org.mw":true,"mx":true,"com.mx":true,"org.mx":true,"gob.mx":true,"edu.mx":true,"net.mx":true,"my":true,"com.my":true,"net.my":true,"org.my":true,"gov.my":true,"edu.my":true,"mil.my":true,"name.my":true,"*.mz":true,"na":true,"info.na":true,"pro.na":true,"name.na":true,"school.na":true,"or.na":true,"dr.na":true,"us.na":true,"mx.na":true,"ca.na":true,"in.na":true,"cc.na":true,"tv.na":true,"ws.na":true,"mobi.na":true,"co.na":true,"com.na":true,"org.na":true,"name":true,"nc":true,"asso.nc":true,"ne":true,"net":true,"nf":true,"com.nf":true,"net.nf":true,"per.nf":true,"rec.nf":true,"web.nf":true,"arts.nf":true,"firm.nf":true,"info.nf":true,"other.nf":true,"store.nf":true,"ac.ng":true,"com.ng":true,"edu.ng":true,"gov.ng":true,"net.ng":true,"org.ng":true,"*.ni":true,"nl":true,"bv.nl":true,"no":true,"fhs.no":true,"vgs.no":true,"fylkesbibl.no":true,"folkebibl.no":true,"museum.no":true,"idrett.no":true,"priv.no":true,"mil.no":true,"stat.no":true,"dep.no":true,"kommune.no":true,"herad.no":true,"aa.no":true,"ah.no":true,"bu.no":true,"fm.no":true,"hl.no":true,"hm.no":true,"jan-mayen.no":true,"mr.no":true,"nl.no":true,"nt.no":true,"of.no":true,"ol.no":true,"oslo.no":true,"rl.no":true,"sf.no":true,"st.no":true,"svalbard.no":true,"tm.no":true,"tr.no":true,"va.no":true,"vf.no":true,"gs.aa.no":true,"gs.ah.no":true,"gs.bu.no":true,"gs.fm.no":true,"gs.hl.no":true,"gs.hm.no":true,"gs.jan-mayen.no":true,"gs.mr.no":true,"gs.nl.no":true,"gs.nt.no":true,"gs.of.no":true,"gs.ol.no":true,"gs.oslo.no":true,"gs.rl.no":true,"gs.sf.no":true,"gs.st.no":true,"gs.svalbard.no":true,"gs.tm.no":true,"gs.tr.no":true,"gs.va.no":true,"gs.vf.no":true,"akrehamn.no":true,"xn--krehamn-dxa.no":true,"algard.no":true,"xn--lgrd-poac.no":true,"arna.no":true,"brumunddal.no":true,"bryne.no":true,"bronnoysund.no":true,"xn--brnnysund-m8ac.no":true,"drobak.no":true,"xn--drbak-wua.no":true,"egersund.no":true,"fetsund.no":true,"floro.no":true,"xn--flor-jra.no":true,"fredrikstad.no":true,"hokksund.no":true,"honefoss.no":true,"xn--hnefoss-q1a.no":true,"jessheim.no":true,"jorpeland.no":true,"xn--jrpeland-54a.no":true,"kirkenes.no":true,"kopervik.no":true,"krokstadelva.no":true,"langevag.no":true,"xn--langevg-jxa.no":true,"leirvik.no":true,"mjondalen.no":true,"xn--mjndalen-64a.no":true,"mo-i-rana.no":true,"mosjoen.no":true,"xn--mosjen-eya.no":true,"nesoddtangen.no":true,"orkanger.no":true,"osoyro.no":true,"xn--osyro-wua.no":true,"raholt.no":true,"xn--rholt-mra.no":true,"sandnessjoen.no":true,"xn--sandnessjen-ogb.no":true,"skedsmokorset.no":true,"slattum.no":true,"spjelkavik.no":true,"stathelle.no":true,"stavern.no":true,"stjordalshalsen.no":true,"xn--stjrdalshalsen-sqb.no":true,"tananger.no":true,"tranby.no":true,"vossevangen.no":true,"afjord.no":true,"xn--fjord-lra.no":true,"agdenes.no":true,"al.no":true,"xn--l-1fa.no":true,"alesund.no":true,"xn--lesund-hua.no":true,"alstahaug.no":true,"alta.no":true,"xn--lt-liac.no":true,"alaheadju.no":true,"xn--laheadju-7ya.no":true,"alvdal.no":true,"amli.no":true,"xn--mli-tla.no":true,"amot.no":true,"xn--mot-tla.no":true,"andebu.no":true,"andoy.no":true,"xn--andy-ira.no":true,"andasuolo.no":true,"ardal.no":true,"xn--rdal-poa.no":true,"aremark.no":true,"arendal.no":true,"xn--s-1fa.no":true,"aseral.no":true,"xn--seral-lra.no":true,"asker.no":true,"askim.no":true,"askvoll.no":true,"askoy.no":true,"xn--asky-ira.no":true,"asnes.no":true,"xn--snes-poa.no":true,"audnedaln.no":true,"aukra.no":true,"aure.no":true,"aurland.no":true,"aurskog-holand.no":true,"xn--aurskog-hland-jnb.no":true,"austevoll.no":true,"austrheim.no":true,"averoy.no":true,"xn--avery-yua.no":true,"balestrand.no":true,"ballangen.no":true,"balat.no":true,"xn--blt-elab.no":true,"balsfjord.no":true,"bahccavuotna.no":true,"xn--bhccavuotna-k7a.no":true,"bamble.no":true,"bardu.no":true,"beardu.no":true,"beiarn.no":true,"bajddar.no":true,"xn--bjddar-pta.no":true,"baidar.no":true,"xn--bidr-5nac.no":true,"berg.no":true,"bergen.no":true,"berlevag.no":true,"xn--berlevg-jxa.no":true,"bearalvahki.no":true,"xn--bearalvhki-y4a.no":true,"bindal.no":true,"birkenes.no":true,"bjarkoy.no":true,"xn--bjarky-fya.no":true,"bjerkreim.no":true,"bjugn.no":true,"bodo.no":true,"xn--bod-2na.no":true,"badaddja.no":true,"xn--bdddj-mrabd.no":true,"budejju.no":true,"bokn.no":true,"bremanger.no":true,"bronnoy.no":true,"xn--brnny-wuac.no":true,"bygland.no":true,"bykle.no":true,"barum.no":true,"xn--brum-voa.no":true,"bo.telemark.no":true,"xn--b-5ga.telemark.no":true,"bo.nordland.no":true,"xn--b-5ga.nordland.no":true,"bievat.no":true,"xn--bievt-0qa.no":true,"bomlo.no":true,"xn--bmlo-gra.no":true,"batsfjord.no":true,"xn--btsfjord-9za.no":true,"bahcavuotna.no":true,"xn--bhcavuotna-s4a.no":true,"dovre.no":true,"drammen.no":true,"drangedal.no":true,"dyroy.no":true,"xn--dyry-ira.no":true,"donna.no":true,"xn--dnna-gra.no":true,"eid.no":true,"eidfjord.no":true,"eidsberg.no":true,"eidskog.no":true,"eidsvoll.no":true,"eigersund.no":true,"elverum.no":true,"enebakk.no":true,"engerdal.no":true,"etne.no":true,"etnedal.no":true,"evenes.no":true,"evenassi.no":true,"xn--eveni-0qa01ga.no":true,"evje-og-hornnes.no":true,"farsund.no":true,"fauske.no":true,"fuossko.no":true,"fuoisku.no":true,"fedje.no":true,"fet.no":true,"finnoy.no":true,"xn--finny-yua.no":true,"fitjar.no":true,"fjaler.no":true,"fjell.no":true,"flakstad.no":true,"flatanger.no":true,"flekkefjord.no":true,"flesberg.no":true,"flora.no":true,"fla.no":true,"xn--fl-zia.no":true,"folldal.no":true,"forsand.no":true,"fosnes.no":true,"frei.no":true,"frogn.no":true,"froland.no":true,"frosta.no":true,"frana.no":true,"xn--frna-woa.no":true,"froya.no":true,"xn--frya-hra.no":true,"fusa.no":true,"fyresdal.no":true,"forde.no":true,"xn--frde-gra.no":true,"gamvik.no":true,"gangaviika.no":true,"xn--ggaviika-8ya47h.no":true,"gaular.no":true,"gausdal.no":true,"gildeskal.no":true,"xn--gildeskl-g0a.no":true,"giske.no":true,"gjemnes.no":true,"gjerdrum.no":true,"gjerstad.no":true,"gjesdal.no":true,"gjovik.no":true,"xn--gjvik-wua.no":true,"gloppen.no":true,"gol.no":true,"gran.no":true,"grane.no":true,"granvin.no":true,"gratangen.no":true,"grimstad.no":true,"grong.no":true,"kraanghke.no":true,"xn--kranghke-b0a.no":true,"grue.no":true,"gulen.no":true,"hadsel.no":true,"halden.no":true,"halsa.no":true,"hamar.no":true,"hamaroy.no":true,"habmer.no":true,"xn--hbmer-xqa.no":true,"hapmir.no":true,"xn--hpmir-xqa.no":true,"hammerfest.no":true,"hammarfeasta.no":true,"xn--hmmrfeasta-s4ac.no":true,"haram.no":true,"hareid.no":true,"harstad.no":true,"hasvik.no":true,"aknoluokta.no":true,"xn--koluokta-7ya57h.no":true,"hattfjelldal.no":true,"aarborte.no":true,"haugesund.no":true,"hemne.no":true,"hemnes.no":true,"hemsedal.no":true,"heroy.more-og-romsdal.no":true,"xn--hery-ira.xn--mre-og-romsdal-qqb.no":true,"heroy.nordland.no":true,"xn--hery-ira.nordland.no":true,"hitra.no":true,"hjartdal.no":true,"hjelmeland.no":true,"hobol.no":true,"xn--hobl-ira.no":true,"hof.no":true,"hol.no":true,"hole.no":true,"holmestrand.no":true,"holtalen.no":true,"xn--holtlen-hxa.no":true,"hornindal.no":true,"horten.no":true,"hurdal.no":true,"hurum.no":true,"hvaler.no":true,"hyllestad.no":true,"hagebostad.no":true,"xn--hgebostad-g3a.no":true,"hoyanger.no":true,"xn--hyanger-q1a.no":true,"hoylandet.no":true,"xn--hylandet-54a.no":true,"ha.no":true,"xn--h-2fa.no":true,"ibestad.no":true,"inderoy.no":true,"xn--indery-fya.no":true,"iveland.no":true,"jevnaker.no":true,"jondal.no":true,"jolster.no":true,"xn--jlster-bya.no":true,"karasjok.no":true,"karasjohka.no":true,"xn--krjohka-hwab49j.no":true,"karlsoy.no":true,"galsa.no":true,"xn--gls-elac.no":true,"karmoy.no":true,"xn--karmy-yua.no":true,"kautokeino.no":true,"guovdageaidnu.no":true,"klepp.no":true,"klabu.no":true,"xn--klbu-woa.no":true,"kongsberg.no":true,"kongsvinger.no":true,"kragero.no":true,"xn--krager-gya.no":true,"kristiansand.no":true,"kristiansund.no":true,"krodsherad.no":true,"xn--krdsherad-m8a.no":true,"kvalsund.no":true,"rahkkeravju.no":true,"xn--rhkkervju-01af.no":true,"kvam.no":true,"kvinesdal.no":true,"kvinnherad.no":true,"kviteseid.no":true,"kvitsoy.no":true,"xn--kvitsy-fya.no":true,"kvafjord.no":true,"xn--kvfjord-nxa.no":true,"giehtavuoatna.no":true,"kvanangen.no":true,"xn--kvnangen-k0a.no":true,"navuotna.no":true,"xn--nvuotna-hwa.no":true,"kafjord.no":true,"xn--kfjord-iua.no":true,"gaivuotna.no":true,"xn--givuotna-8ya.no":true,"larvik.no":true,"lavangen.no":true,"lavagis.no":true,"loabat.no":true,"xn--loabt-0qa.no":true,"lebesby.no":true,"davvesiida.no":true,"leikanger.no":true,"leirfjord.no":true,"leka.no":true,"leksvik.no":true,"lenvik.no":true,"leangaviika.no":true,"xn--leagaviika-52b.no":true,"lesja.no":true,"levanger.no":true,"lier.no":true,"lierne.no":true,"lillehammer.no":true,"lillesand.no":true,"lindesnes.no":true,"lindas.no":true,"xn--linds-pra.no":true,"lom.no":true,"loppa.no":true,"lahppi.no":true,"xn--lhppi-xqa.no":true,"lund.no":true,"lunner.no":true,"luroy.no":true,"xn--lury-ira.no":true,"luster.no":true,"lyngdal.no":true,"lyngen.no":true,"ivgu.no":true,"lardal.no":true,"lerdal.no":true,"xn--lrdal-sra.no":true,"lodingen.no":true,"xn--ldingen-q1a.no":true,"lorenskog.no":true,"xn--lrenskog-54a.no":true,"loten.no":true,"xn--lten-gra.no":true,"malvik.no":true,"masoy.no":true,"xn--msy-ula0h.no":true,"muosat.no":true,"xn--muost-0qa.no":true,"mandal.no":true,"marker.no":true,"marnardal.no":true,"masfjorden.no":true,"meland.no":true,"meldal.no":true,"melhus.no":true,"meloy.no":true,"xn--mely-ira.no":true,"meraker.no":true,"xn--merker-kua.no":true,"moareke.no":true,"xn--moreke-jua.no":true,"midsund.no":true,"midtre-gauldal.no":true,"modalen.no":true,"modum.no":true,"molde.no":true,"moskenes.no":true,"moss.no":true,"mosvik.no":true,"malselv.no":true,"xn--mlselv-iua.no":true,"malatvuopmi.no":true,"xn--mlatvuopmi-s4a.no":true,"namdalseid.no":true,"aejrie.no":true,"namsos.no":true,"namsskogan.no":true,"naamesjevuemie.no":true,"xn--nmesjevuemie-tcba.no":true,"laakesvuemie.no":true,"nannestad.no":true,"narvik.no":true,"narviika.no":true,"naustdal.no":true,"nedre-eiker.no":true,"nes.akershus.no":true,"nes.buskerud.no":true,"nesna.no":true,"nesodden.no":true,"nesseby.no":true,"unjarga.no":true,"xn--unjrga-rta.no":true,"nesset.no":true,"nissedal.no":true,"nittedal.no":true,"nord-aurdal.no":true,"nord-fron.no":true,"nord-odal.no":true,"norddal.no":true,"nordkapp.no":true,"davvenjarga.no":true,"xn--davvenjrga-y4a.no":true,"nordre-land.no":true,"nordreisa.no":true,"raisa.no":true,"xn--risa-5na.no":true,"nore-og-uvdal.no":true,"notodden.no":true,"naroy.no":true,"xn--nry-yla5g.no":true,"notteroy.no":true,"xn--nttery-byae.no":true,"odda.no":true,"oksnes.no":true,"xn--ksnes-uua.no":true,"oppdal.no":true,"oppegard.no":true,"xn--oppegrd-ixa.no":true,"orkdal.no":true,"orland.no":true,"xn--rland-uua.no":true,"orskog.no":true,"xn--rskog-uua.no":true,"orsta.no":true,"xn--rsta-fra.no":true,"os.hedmark.no":true,"os.hordaland.no":true,"osen.no":true,"osteroy.no":true,"xn--ostery-fya.no":true,"ostre-toten.no":true,"xn--stre-toten-zcb.no":true,"overhalla.no":true,"ovre-eiker.no":true,"xn--vre-eiker-k8a.no":true,"oyer.no":true,"xn--yer-zna.no":true,"oygarden.no":true,"xn--ygarden-p1a.no":true,"oystre-slidre.no":true,"xn--ystre-slidre-ujb.no":true,"porsanger.no":true,"porsangu.no":true,"xn--porsgu-sta26f.no":true,"porsgrunn.no":true,"radoy.no":true,"xn--rady-ira.no":true,"rakkestad.no":true,"rana.no":true,"ruovat.no":true,"randaberg.no":true,"rauma.no":true,"rendalen.no":true,"rennebu.no":true,"rennesoy.no":true,"xn--rennesy-v1a.no":true,"rindal.no":true,"ringebu.no":true,"ringerike.no":true,"ringsaker.no":true,"rissa.no":true,"risor.no":true,"xn--risr-ira.no":true,"roan.no":true,"rollag.no":true,"rygge.no":true,"ralingen.no":true,"xn--rlingen-mxa.no":true,"rodoy.no":true,"xn--rdy-0nab.no":true,"romskog.no":true,"xn--rmskog-bya.no":true,"roros.no":true,"xn--rros-gra.no":true,"rost.no":true,"xn--rst-0na.no":true,"royken.no":true,"xn--ryken-vua.no":true,"royrvik.no":true,"xn--ryrvik-bya.no":true,"rade.no":true,"xn--rde-ula.no":true,"salangen.no":true,"siellak.no":true,"saltdal.no":true,"salat.no":true,"xn--slt-elab.no":true,"xn--slat-5na.no":true,"samnanger.no":true,"sande.more-og-romsdal.no":true,"sande.xn--mre-og-romsdal-qqb.no":true,"sande.vestfold.no":true,"sandefjord.no":true,"sandnes.no":true,"sandoy.no":true,"xn--sandy-yua.no":true,"sarpsborg.no":true,"sauda.no":true,"sauherad.no":true,"sel.no":true,"selbu.no":true,"selje.no":true,"seljord.no":true,"sigdal.no":true,"siljan.no":true,"sirdal.no":true,"skaun.no":true,"skedsmo.no":true,"ski.no":true,"skien.no":true,"skiptvet.no":true,"skjervoy.no":true,"xn--skjervy-v1a.no":true,"skierva.no":true,"xn--skierv-uta.no":true,"skjak.no":true,"xn--skjk-soa.no":true,"skodje.no":true,"skanland.no":true,"xn--sknland-fxa.no":true,"skanit.no":true,"xn--sknit-yqa.no":true,"smola.no":true,"xn--smla-hra.no":true,"snillfjord.no":true,"snasa.no":true,"xn--snsa-roa.no":true,"snoasa.no":true,"snaase.no":true,"xn--snase-nra.no":true,"sogndal.no":true,"sokndal.no":true,"sola.no":true,"solund.no":true,"songdalen.no":true,"sortland.no":true,"spydeberg.no":true,"stange.no":true,"stavanger.no":true,"steigen.no":true,"steinkjer.no":true,"stjordal.no":true,"xn--stjrdal-s1a.no":true,"stokke.no":true,"stor-elvdal.no":true,"stord.no":true,"stordal.no":true,"storfjord.no":true,"omasvuotna.no":true,"strand.no":true,"stranda.no":true,"stryn.no":true,"sula.no":true,"suldal.no":true,"sund.no":true,"sunndal.no":true,"surnadal.no":true,"sveio.no":true,"svelvik.no":true,"sykkylven.no":true,"sogne.no":true,"xn--sgne-gra.no":true,"somna.no":true,"xn--smna-gra.no":true,"sondre-land.no":true,"xn--sndre-land-0cb.no":true,"sor-aurdal.no":true,"xn--sr-aurdal-l8a.no":true,"sor-fron.no":true,"xn--sr-fron-q1a.no":true,"sor-odal.no":true,"xn--sr-odal-q1a.no":true,"sor-varanger.no":true,"xn--sr-varanger-ggb.no":true,"matta-varjjat.no":true,"xn--mtta-vrjjat-k7af.no":true,"sorfold.no":true,"xn--srfold-bya.no":true,"sorreisa.no":true,"xn--srreisa-q1a.no":true,"sorum.no":true,"xn--srum-gra.no":true,"tana.no":true,"deatnu.no":true,"time.no":true,"tingvoll.no":true,"tinn.no":true,"tjeldsund.no":true,"dielddanuorri.no":true,"tjome.no":true,"xn--tjme-hra.no":true,"tokke.no":true,"tolga.no":true,"torsken.no":true,"tranoy.no":true,"xn--trany-yua.no":true,"tromso.no":true,"xn--troms-zua.no":true,"tromsa.no":true,"romsa.no":true,"trondheim.no":true,"troandin.no":true,"trysil.no":true,"trana.no":true,"xn--trna-woa.no":true,"trogstad.no":true,"xn--trgstad-r1a.no":true,"tvedestrand.no":true,"tydal.no":true,"tynset.no":true,"tysfjord.no":true,"divtasvuodna.no":true,"divttasvuotna.no":true,"tysnes.no":true,"tysvar.no":true,"xn--tysvr-vra.no":true,"tonsberg.no":true,"xn--tnsberg-q1a.no":true,"ullensaker.no":true,"ullensvang.no":true,"ulvik.no":true,"utsira.no":true,"vadso.no":true,"xn--vads-jra.no":true,"cahcesuolo.no":true,"xn--hcesuolo-7ya35b.no":true,"vaksdal.no":true,"valle.no":true,"vang.no":true,"vanylven.no":true,"vardo.no":true,"xn--vard-jra.no":true,"varggat.no":true,"xn--vrggt-xqad.no":true,"vefsn.no":true,"vaapste.no":true,"vega.no":true,"vegarshei.no":true,"xn--vegrshei-c0a.no":true,"vennesla.no":true,"verdal.no":true,"verran.no":true,"vestby.no":true,"vestnes.no":true,"vestre-slidre.no":true,"vestre-toten.no":true,"vestvagoy.no":true,"xn--vestvgy-ixa6o.no":true,"vevelstad.no":true,"vik.no":true,"vikna.no":true,"vindafjord.no":true,"volda.no":true,"voss.no":true,"varoy.no":true,"xn--vry-yla5g.no":true,"vagan.no":true,"xn--vgan-qoa.no":true,"voagat.no":true,"vagsoy.no":true,"xn--vgsy-qoa0j.no":true,"vaga.no":true,"xn--vg-yiab.no":true,"valer.ostfold.no":true,"xn--vler-qoa.xn--stfold-9xa.no":true,"valer.hedmark.no":true,"xn--vler-qoa.hedmark.no":true,"*.np":true,"nr":true,"biz.nr":true,"info.nr":true,"gov.nr":true,"edu.nr":true,"org.nr":true,"net.nr":true,"com.nr":true,"nu":true,"*.nz":true,"*.om":true,"mediaphone.om":false,"nawrastelecom.om":false,"nawras.om":false,"omanmobile.om":false,"omanpost.om":false,"omantel.om":false,"rakpetroleum.om":false,"siemens.om":false,"songfest.om":false,"statecouncil.om":false,"org":true,"pa":true,"ac.pa":true,"gob.pa":true,"com.pa":true,"org.pa":true,"sld.pa":true,"edu.pa":true,"net.pa":true,"ing.pa":true,"abo.pa":true,"med.pa":true,"nom.pa":true,"pe":true,"edu.pe":true,"gob.pe":true,"nom.pe":true,"mil.pe":true,"org.pe":true,"com.pe":true,"net.pe":true,"pf":true,"com.pf":true,"org.pf":true,"edu.pf":true,"*.pg":true,"ph":true,"com.ph":true,"net.ph":true,"org.ph":true,"gov.ph":true,"edu.ph":true,"ngo.ph":true,"mil.ph":true,"i.ph":true,"pk":true,"com.pk":true,"net.pk":true,"edu.pk":true,"org.pk":true,"fam.pk":true,"biz.pk":true,"web.pk":true,"gov.pk":true,"gob.pk":true,"gok.pk":true,"gon.pk":true,"gop.pk":true,"gos.pk":true,"info.pk":true,"pl":true,"aid.pl":true,"agro.pl":true,"atm.pl":true,"auto.pl":true,"biz.pl":true,"com.pl":true,"edu.pl":true,"gmina.pl":true,"gsm.pl":true,"info.pl":true,"mail.pl":true,"miasta.pl":true,"media.pl":true,"mil.pl":true,"net.pl":true,"nieruchomosci.pl":true,"nom.pl":true,"org.pl":true,"pc.pl":true,"powiat.pl":true,"priv.pl":true,"realestate.pl":true,"rel.pl":true,"sex.pl":true,"shop.pl":true,"sklep.pl":true,"sos.pl":true,"szkola.pl":true,"targi.pl":true,"tm.pl":true,"tourism.pl":true,"travel.pl":true,"turystyka.pl":true,"6bone.pl":true,"art.pl":true,"mbone.pl":true,"gov.pl":true,"uw.gov.pl":true,"um.gov.pl":true,"ug.gov.pl":true,"upow.gov.pl":true,"starostwo.gov.pl":true,"so.gov.pl":true,"sr.gov.pl":true,"po.gov.pl":true,"pa.gov.pl":true,"ngo.pl":true,"irc.pl":true,"usenet.pl":true,"augustow.pl":true,"babia-gora.pl":true,"bedzin.pl":true,"beskidy.pl":true,"bialowieza.pl":true,"bialystok.pl":true,"bielawa.pl":true,"bieszczady.pl":true,"boleslawiec.pl":true,"bydgoszcz.pl":true,"bytom.pl":true,"cieszyn.pl":true,"czeladz.pl":true,"czest.pl":true,"dlugoleka.pl":true,"elblag.pl":true,"elk.pl":true,"glogow.pl":true,"gniezno.pl":true,"gorlice.pl":true,"grajewo.pl":true,"ilawa.pl":true,"jaworzno.pl":true,"jelenia-gora.pl":true,"jgora.pl":true,"kalisz.pl":true,"kazimierz-dolny.pl":true,"karpacz.pl":true,"kartuzy.pl":true,"kaszuby.pl":true,"katowice.pl":true,"kepno.pl":true,"ketrzyn.pl":true,"klodzko.pl":true,"kobierzyce.pl":true,"kolobrzeg.pl":true,"konin.pl":true,"konskowola.pl":true,"kutno.pl":true,"lapy.pl":true,"lebork.pl":true,"legnica.pl":true,"lezajsk.pl":true,"limanowa.pl":true,"lomza.pl":true,"lowicz.pl":true,"lubin.pl":true,"lukow.pl":true,"malbork.pl":true,"malopolska.pl":true,"mazowsze.pl":true,"mazury.pl":true,"mielec.pl":true,"mielno.pl":true,"mragowo.pl":true,"naklo.pl":true,"nowaruda.pl":true,"nysa.pl":true,"olawa.pl":true,"olecko.pl":true,"olkusz.pl":true,"olsztyn.pl":true,"opoczno.pl":true,"opole.pl":true,"ostroda.pl":true,"ostroleka.pl":true,"ostrowiec.pl":true,"ostrowwlkp.pl":true,"pila.pl":true,"pisz.pl":true,"podhale.pl":true,"podlasie.pl":true,"polkowice.pl":true,"pomorze.pl":true,"pomorskie.pl":true,"prochowice.pl":true,"pruszkow.pl":true,"przeworsk.pl":true,"pulawy.pl":true,"radom.pl":true,"rawa-maz.pl":true,"rybnik.pl":true,"rzeszow.pl":true,"sanok.pl":true,"sejny.pl":true,"siedlce.pl":true,"slask.pl":true,"slupsk.pl":true,"sosnowiec.pl":true,"stalowa-wola.pl":true,"skoczow.pl":true,"starachowice.pl":true,"stargard.pl":true,"suwalki.pl":true,"swidnica.pl":true,"swiebodzin.pl":true,"swinoujscie.pl":true,"szczecin.pl":true,"szczytno.pl":true,"tarnobrzeg.pl":true,"tgory.pl":true,"turek.pl":true,"tychy.pl":true,"ustka.pl":true,"walbrzych.pl":true,"warmia.pl":true,"warszawa.pl":true,"waw.pl":true,"wegrow.pl":true,"wielun.pl":true,"wlocl.pl":true,"wloclawek.pl":true,"wodzislaw.pl":true,"wolomin.pl":true,"wroclaw.pl":true,"zachpomor.pl":true,"zagan.pl":true,"zarow.pl":true,"zgora.pl":true,"zgorzelec.pl":true,"gda.pl":true,"gdansk.pl":true,"gdynia.pl":true,"med.pl":true,"sopot.pl":true,"gliwice.pl":true,"krakow.pl":true,"poznan.pl":true,"wroc.pl":true,"zakopane.pl":true,"pm":true,"pn":true,"gov.pn":true,"co.pn":true,"org.pn":true,"edu.pn":true,"net.pn":true,"pr":true,"com.pr":true,"net.pr":true,"org.pr":true,"gov.pr":true,"edu.pr":true,"isla.pr":true,"pro.pr":true,"biz.pr":true,"info.pr":true,"name.pr":true,"est.pr":true,"prof.pr":true,"ac.pr":true,"pro":true,"aca.pro":true,"bar.pro":true,"cpa.pro":true,"jur.pro":true,"law.pro":true,"med.pro":true,"eng.pro":true,"ps":true,"edu.ps":true,"gov.ps":true,"sec.ps":true,"plo.ps":true,"com.ps":true,"org.ps":true,"net.ps":true,"pt":true,"net.pt":true,"gov.pt":true,"org.pt":true,"edu.pt":true,"int.pt":true,"publ.pt":true,"com.pt":true,"nome.pt":true,"pw":true,"co.pw":true,"ne.pw":true,"or.pw":true,"ed.pw":true,"go.pw":true,"belau.pw":true,"*.py":true,"qa":true,"com.qa":true,"edu.qa":true,"gov.qa":true,"mil.qa":true,"name.qa":true,"net.qa":true,"org.qa":true,"sch.qa":true,"re":true,"com.re":true,"asso.re":true,"nom.re":true,"ro":true,"com.ro":true,"org.ro":true,"tm.ro":true,"nt.ro":true,"nom.ro":true,"info.ro":true,"rec.ro":true,"arts.ro":true,"firm.ro":true,"store.ro":true,"www.ro":true,"rs":true,"co.rs":true,"org.rs":true,"edu.rs":true,"ac.rs":true,"gov.rs":true,"in.rs":true,"ru":true,"ac.ru":true,"com.ru":true,"edu.ru":true,"int.ru":true,"net.ru":true,"org.ru":true,"pp.ru":true,"adygeya.ru":true,"altai.ru":true,"amur.ru":true,"arkhangelsk.ru":true,"astrakhan.ru":true,"bashkiria.ru":true,"belgorod.ru":true,"bir.ru":true,"bryansk.ru":true,"buryatia.ru":true,"cbg.ru":true,"chel.ru":true,"chelyabinsk.ru":true,"chita.ru":true,"chukotka.ru":true,"chuvashia.ru":true,"dagestan.ru":true,"dudinka.ru":true,"e-burg.ru":true,"grozny.ru":true,"irkutsk.ru":true,"ivanovo.ru":true,"izhevsk.ru":true,"jar.ru":true,"joshkar-ola.ru":true,"kalmykia.ru":true,"kaluga.ru":true,"kamchatka.ru":true,"karelia.ru":true,"kazan.ru":true,"kchr.ru":true,"kemerovo.ru":true,"khabarovsk.ru":true,"khakassia.ru":true,"khv.ru":true,"kirov.ru":true,"koenig.ru":true,"komi.ru":true,"kostroma.ru":true,"krasnoyarsk.ru":true,"kuban.ru":true,"kurgan.ru":true,"kursk.ru":true,"lipetsk.ru":true,"magadan.ru":true,"mari.ru":true,"mari-el.ru":true,"marine.ru":true,"mordovia.ru":true,"mosreg.ru":true,"msk.ru":true,"murmansk.ru":true,"nalchik.ru":true,"nnov.ru":true,"nov.ru":true,"novosibirsk.ru":true,"nsk.ru":true,"omsk.ru":true,"orenburg.ru":true,"oryol.ru":true,"palana.ru":true,"penza.ru":true,"perm.ru":true,"pskov.ru":true,"ptz.ru":true,"rnd.ru":true,"ryazan.ru":true,"sakhalin.ru":true,"samara.ru":true,"saratov.ru":true,"simbirsk.ru":true,"smolensk.ru":true,"spb.ru":true,"stavropol.ru":true,"stv.ru":true,"surgut.ru":true,"tambov.ru":true,"tatarstan.ru":true,"tom.ru":true,"tomsk.ru":true,"tsaritsyn.ru":true,"tsk.ru":true,"tula.ru":true,"tuva.ru":true,"tver.ru":true,"tyumen.ru":true,"udm.ru":true,"udmurtia.ru":true,"ulan-ude.ru":true,"vladikavkaz.ru":true,"vladimir.ru":true,"vladivostok.ru":true,"volgograd.ru":true,"vologda.ru":true,"voronezh.ru":true,"vrn.ru":true,"vyatka.ru":true,"yakutia.ru":true,"yamal.ru":true,"yaroslavl.ru":true,"yekaterinburg.ru":true,"yuzhno-sakhalinsk.ru":true,"amursk.ru":true,"baikal.ru":true,"cmw.ru":true,"fareast.ru":true,"jamal.ru":true,"kms.ru":true,"k-uralsk.ru":true,"kustanai.ru":true,"kuzbass.ru":true,"magnitka.ru":true,"mytis.ru":true,"nakhodka.ru":true,"nkz.ru":true,"norilsk.ru":true,"oskol.ru":true,"pyatigorsk.ru":true,"rubtsovsk.ru":true,"snz.ru":true,"syzran.ru":true,"vdonsk.ru":true,"zgrad.ru":true,"gov.ru":true,"mil.ru":true,"test.ru":true,"rw":true,"gov.rw":true,"net.rw":true,"edu.rw":true,"ac.rw":true,"com.rw":true,"co.rw":true,"int.rw":true,"mil.rw":true,"gouv.rw":true,"sa":true,"com.sa":true,"net.sa":true,"org.sa":true,"gov.sa":true,"med.sa":true,"pub.sa":true,"edu.sa":true,"sch.sa":true,"sb":true,"com.sb":true,"edu.sb":true,"gov.sb":true,"net.sb":true,"org.sb":true,"sc":true,"com.sc":true,"gov.sc":true,"net.sc":true,"org.sc":true,"edu.sc":true,"sd":true,"com.sd":true,"net.sd":true,"org.sd":true,"edu.sd":true,"med.sd":true,"gov.sd":true,"info.sd":true,"se":true,"a.se":true,"ac.se":true,"b.se":true,"bd.se":true,"brand.se":true,"c.se":true,"d.se":true,"e.se":true,"f.se":true,"fh.se":true,"fhsk.se":true,"fhv.se":true,"g.se":true,"h.se":true,"i.se":true,"k.se":true,"komforb.se":true,"kommunalforbund.se":true,"komvux.se":true,"l.se":true,"lanbib.se":true,"m.se":true,"n.se":true,"naturbruksgymn.se":true,"o.se":true,"org.se":true,"p.se":true,"parti.se":true,"pp.se":true,"press.se":true,"r.se":true,"s.se":true,"sshn.se":true,"t.se":true,"tm.se":true,"u.se":true,"w.se":true,"x.se":true,"y.se":true,"z.se":true,"sg":true,"com.sg":true,"net.sg":true,"org.sg":true,"gov.sg":true,"edu.sg":true,"per.sg":true,"sh":true,"si":true,"sk":true,"sl":true,"com.sl":true,"net.sl":true,"edu.sl":true,"gov.sl":true,"org.sl":true,"sm":true,"sn":true,"art.sn":true,"com.sn":true,"edu.sn":true,"gouv.sn":true,"org.sn":true,"perso.sn":true,"univ.sn":true,"so":true,"com.so":true,"net.so":true,"org.so":true,"sr":true,"st":true,"co.st":true,"com.st":true,"consulado.st":true,"edu.st":true,"embaixada.st":true,"gov.st":true,"mil.st":true,"net.st":true,"org.st":true,"principe.st":true,"saotome.st":true,"store.st":true,"su":true,"*.sv":true,"sy":true,"edu.sy":true,"gov.sy":true,"net.sy":true,"mil.sy":true,"com.sy":true,"org.sy":true,"sz":true,"co.sz":true,"ac.sz":true,"org.sz":true,"tc":true,"td":true,"tel":true,"tf":true,"tg":true,"th":true,"ac.th":true,"co.th":true,"go.th":true,"in.th":true,"mi.th":true,"net.th":true,"or.th":true,"tj":true,"ac.tj":true,"biz.tj":true,"co.tj":true,"com.tj":true,"edu.tj":true,"go.tj":true,"gov.tj":true,"int.tj":true,"mil.tj":true,"name.tj":true,"net.tj":true,"nic.tj":true,"org.tj":true,"test.tj":true,"web.tj":true,"tk":true,"tl":true,"gov.tl":true,"tm":true,"tn":true,"com.tn":true,"ens.tn":true,"fin.tn":true,"gov.tn":true,"ind.tn":true,"intl.tn":true,"nat.tn":true,"net.tn":true,"org.tn":true,"info.tn":true,"perso.tn":true,"tourism.tn":true,"edunet.tn":true,"rnrt.tn":true,"rns.tn":true,"rnu.tn":true,"mincom.tn":true,"agrinet.tn":true,"defense.tn":true,"turen.tn":true,"to":true,"com.to":true,"gov.to":true,"net.to":true,"org.to":true,"edu.to":true,"mil.to":true,"*.tr":true,"nic.tr":false,"gov.nc.tr":true,"travel":true,"tt":true,"co.tt":true,"com.tt":true,"org.tt":true,"net.tt":true,"biz.tt":true,"info.tt":true,"pro.tt":true,"int.tt":true,"coop.tt":true,"jobs.tt":true,"mobi.tt":true,"travel.tt":true,"museum.tt":true,"aero.tt":true,"name.tt":true,"gov.tt":true,"edu.tt":true,"tv":true,"tw":true,"edu.tw":true,"gov.tw":true,"mil.tw":true,"com.tw":true,"net.tw":true,"org.tw":true,"idv.tw":true,"game.tw":true,"ebiz.tw":true,"club.tw":true,"xn--zf0ao64a.tw":true,"xn--uc0atv.tw":true,"xn--czrw28b.tw":true,"ac.tz":true,"co.tz":true,"go.tz":true,"mil.tz":true,"ne.tz":true,"or.tz":true,"sc.tz":true,"ua":true,"com.ua":true,"edu.ua":true,"gov.ua":true,"in.ua":true,"net.ua":true,"org.ua":true,"cherkassy.ua":true,"chernigov.ua":true,"chernovtsy.ua":true,"ck.ua":true,"cn.ua":true,"crimea.ua":true,"cv.ua":true,"dn.ua":true,"dnepropetrovsk.ua":true,"donetsk.ua":true,"dp.ua":true,"if.ua":true,"ivano-frankivsk.ua":true,"kh.ua":true,"kharkov.ua":true,"kherson.ua":true,"khmelnitskiy.ua":true,"kiev.ua":true,"kirovograd.ua":true,"km.ua":true,"kr.ua":true,"ks.ua":true,"kv.ua":true,"lg.ua":true,"lugansk.ua":true,"lutsk.ua":true,"lviv.ua":true,"mk.ua":true,"nikolaev.ua":true,"od.ua":true,"odessa.ua":true,"pl.ua":true,"poltava.ua":true,"rovno.ua":true,"rv.ua":true,"sebastopol.ua":true,"sumy.ua":true,"te.ua":true,"ternopil.ua":true,"uzhgorod.ua":true,"vinnica.ua":true,"vn.ua":true,"zaporizhzhe.ua":true,"zp.ua":true,"zhitomir.ua":true,"zt.ua":true,"co.ua":true,"pp.ua":true,"ug":true,"co.ug":true,"ac.ug":true,"sc.ug":true,"go.ug":true,"ne.ug":true,"or.ug":true,"*.uk":true,"*.sch.uk":true,"bl.uk":false,"british-library.uk":false,"icnet.uk":false,"jet.uk":false,"mod.uk":false,"nel.uk":false,"nhs.uk":false,"nic.uk":false,"nls.uk":false,"national-library-scotland.uk":false,"parliament.uk":false,"police.uk":false,"us":true,"dni.us":true,"fed.us":true,"isa.us":true,"kids.us":true,"nsn.us":true,"ak.us":true,"al.us":true,"ar.us":true,"as.us":true,"az.us":true,"ca.us":true,"co.us":true,"ct.us":true,"dc.us":true,"de.us":true,"fl.us":true,"ga.us":true,"gu.us":true,"hi.us":true,"ia.us":true,"id.us":true,"il.us":true,"in.us":true,"ks.us":true,"ky.us":true,"la.us":true,"ma.us":true,"md.us":true,"me.us":true,"mi.us":true,"mn.us":true,"mo.us":true,"ms.us":true,"mt.us":true,"nc.us":true,"nd.us":true,"ne.us":true,"nh.us":true,"nj.us":true,"nm.us":true,"nv.us":true,"ny.us":true,"oh.us":true,"ok.us":true,"or.us":true,"pa.us":true,"pr.us":true,"ri.us":true,"sc.us":true,"sd.us":true,"tn.us":true,"tx.us":true,"ut.us":true,"vi.us":true,"vt.us":true,"va.us":true,"wa.us":true,"wi.us":true,"wv.us":true,"wy.us":true,"k12.ak.us":true,"k12.al.us":true,"k12.ar.us":true,"k12.as.us":true,"k12.az.us":true,"k12.ca.us":true,"k12.co.us":true,"k12.ct.us":true,"k12.dc.us":true,"k12.de.us":true,"k12.fl.us":true,"k12.ga.us":true,"k12.gu.us":true,"k12.ia.us":true,"k12.id.us":true,"k12.il.us":true,"k12.in.us":true,"k12.ks.us":true,"k12.ky.us":true,"k12.la.us":true,"k12.ma.us":true,"k12.md.us":true,"k12.me.us":true,"k12.mi.us":true,"k12.mn.us":true,"k12.mo.us":true,"k12.ms.us":true,"k12.mt.us":true,"k12.nc.us":true,"k12.nd.us":true,"k12.ne.us":true,"k12.nh.us":true,"k12.nj.us":true,"k12.nm.us":true,"k12.nv.us":true,"k12.ny.us":true,"k12.oh.us":true,"k12.ok.us":true,"k12.or.us":true,"k12.pa.us":true,"k12.pr.us":true,"k12.ri.us":true,"k12.sc.us":true,"k12.sd.us":true,"k12.tn.us":true,"k12.tx.us":true,"k12.ut.us":true,"k12.vi.us":true,"k12.vt.us":true,"k12.va.us":true,"k12.wa.us":true,"k12.wi.us":true,"k12.wv.us":true,"k12.wy.us":true,"cc.ak.us":true,"cc.al.us":true,"cc.ar.us":true,"cc.as.us":true,"cc.az.us":true,"cc.ca.us":true,"cc.co.us":true,"cc.ct.us":true,"cc.dc.us":true,"cc.de.us":true,"cc.fl.us":true,"cc.ga.us":true,"cc.gu.us":true,"cc.hi.us":true,"cc.ia.us":true,"cc.id.us":true,"cc.il.us":true,"cc.in.us":true,"cc.ks.us":true,"cc.ky.us":true,"cc.la.us":true,"cc.ma.us":true,"cc.md.us":true,"cc.me.us":true,"cc.mi.us":true,"cc.mn.us":true,"cc.mo.us":true,"cc.ms.us":true,"cc.mt.us":true,"cc.nc.us":true,"cc.nd.us":true,"cc.ne.us":true,"cc.nh.us":true,"cc.nj.us":true,"cc.nm.us":true,"cc.nv.us":true,"cc.ny.us":true,"cc.oh.us":true,"cc.ok.us":true,"cc.or.us":true,"cc.pa.us":true,"cc.pr.us":true,"cc.ri.us":true,"cc.sc.us":true,"cc.sd.us":true,"cc.tn.us":true,"cc.tx.us":true,"cc.ut.us":true,"cc.vi.us":true,"cc.vt.us":true,"cc.va.us":true,"cc.wa.us":true,"cc.wi.us":true,"cc.wv.us":true,"cc.wy.us":true,"lib.ak.us":true,"lib.al.us":true,"lib.ar.us":true,"lib.as.us":true,"lib.az.us":true,"lib.ca.us":true,"lib.co.us":true,"lib.ct.us":true,"lib.dc.us":true,"lib.de.us":true,"lib.fl.us":true,"lib.ga.us":true,"lib.gu.us":true,"lib.hi.us":true,"lib.ia.us":true,"lib.id.us":true,"lib.il.us":true,"lib.in.us":true,"lib.ks.us":true,"lib.ky.us":true,"lib.la.us":true,"lib.ma.us":true,"lib.md.us":true,"lib.me.us":true,"lib.mi.us":true,"lib.mn.us":true,"lib.mo.us":true,"lib.ms.us":true,"lib.mt.us":true,"lib.nc.us":true,"lib.nd.us":true,"lib.ne.us":true,"lib.nh.us":true,"lib.nj.us":true,"lib.nm.us":true,"lib.nv.us":true,"lib.ny.us":true,"lib.oh.us":true,"lib.ok.us":true,"lib.or.us":true,"lib.pa.us":true,"lib.pr.us":true,"lib.ri.us":true,"lib.sc.us":true,"lib.sd.us":true,"lib.tn.us":true,"lib.tx.us":true,"lib.ut.us":true,"lib.vi.us":true,"lib.vt.us":true,"lib.va.us":true,"lib.wa.us":true,"lib.wi.us":true,"lib.wv.us":true,"lib.wy.us":true,"pvt.k12.ma.us":true,"chtr.k12.ma.us":true,"paroch.k12.ma.us":true,"*.uy":true,"uz":true,"com.uz":true,"co.uz":true,"va":true,"vc":true,"com.vc":true,"net.vc":true,"org.vc":true,"gov.vc":true,"mil.vc":true,"edu.vc":true,"*.ve":true,"vg":true,"vi":true,"co.vi":true,"com.vi":true,"k12.vi":true,"net.vi":true,"org.vi":true,"vn":true,"com.vn":true,"net.vn":true,"org.vn":true,"edu.vn":true,"gov.vn":true,"int.vn":true,"ac.vn":true,"biz.vn":true,"info.vn":true,"name.vn":true,"pro.vn":true,"health.vn":true,"vu":true,"wf":true,"ws":true,"com.ws":true,"net.ws":true,"org.ws":true,"gov.ws":true,"edu.ws":true,"yt":true,"xn--mgbaam7a8h":true,"xn--54b7fta0cc":true,"xn--fiqs8s":true,"xn--fiqz9s":true,"xn--lgbbat1ad8j":true,"xn--wgbh1c":true,"xn--node":true,"xn--j6w193g":true,"xn--h2brj9c":true,"xn--mgbbh1a71e":true,"xn--fpcrj9c3d":true,"xn--gecrj9c":true,"xn--s9brj9c":true,"xn--45brj9c":true,"xn--xkc2dl3a5ee0h":true,"xn--mgba3a4f16a":true,"xn--mgba3a4fra":true,"xn--mgbayh7gpa":true,"xn--3e0b707e":true,"xn--fzc2c9e2c":true,"xn--xkc2al3hye2a":true,"xn--mgbc0a9azcg":true,"xn--mgb9awbf":true,"xn--ygbi2ammx":true,"xn--90a3ac":true,"xn--p1ai":true,"xn--wgbl6a":true,"xn--mgberp4a5d4ar":true,"xn--mgberp4a5d4a87g":true,"xn--mgbqly7c0a67fbc":true,"xn--mgbqly7cvafr":true,"xn--ogbpf8fl":true,"xn--mgbtf8fl":true,"xn--yfro4i67o":true,"xn--clchc0ea0b2g2a9gcd":true,"xn--o3cw4h":true,"xn--pgbs0dh":true,"xn--kpry57d":true,"xn--kprw13d":true,"xn--nnx388a":true,"xn--j1amh":true,"xn--mgb2ddes":true,"xxx":true,"*.ye":true,"*.za":true,"*.zm":true,"*.zw":true,"biz.at":true,"info.at":true,"priv.at":true,"co.ca":true,"ar.com":true,"br.com":true,"cn.com":true,"de.com":true,"eu.com":true,"gb.com":true,"gr.com":true,"hu.com":true,"jpn.com":true,"kr.com":true,"no.com":true,"qc.com":true,"ru.com":true,"sa.com":true,"se.com":true,"uk.com":true,"us.com":true,"uy.com":true,"za.com":true,"gb.net":true,"jp.net":true,"se.net":true,"uk.net":true,"ae.org":true,"us.org":true,"com.de":true,"operaunite.com":true,"appspot.com":true,"iki.fi":true,"c.la":true,"za.net":true,"za.org":true,"co.nl":true,"co.no":true,"co.pl":true,"dyndns-at-home.com":true,"dyndns-at-work.com":true,"dyndns-blog.com":true,"dyndns-free.com":true,"dyndns-home.com":true,"dyndns-ip.com":true,"dyndns-mail.com":true,"dyndns-office.com":true,"dyndns-pics.com":true,"dyndns-remote.com":true,"dyndns-server.com":true,"dyndns-web.com":true,"dyndns-wiki.com":true,"dyndns-work.com":true,"dyndns.biz":true,"dyndns.info":true,"dyndns.org":true,"dyndns.tv":true,"at-band-camp.net":true,"ath.cx":true,"barrel-of-knowledge.info":true,"barrell-of-knowledge.info":true,"better-than.tv":true,"blogdns.com":true,"blogdns.net":true,"blogdns.org":true,"blogsite.org":true,"boldlygoingnowhere.org":true,"broke-it.net":true,"buyshouses.net":true,"cechire.com":true,"dnsalias.com":true,"dnsalias.net":true,"dnsalias.org":true,"dnsdojo.com":true,"dnsdojo.net":true,"dnsdojo.org":true,"does-it.net":true,"doesntexist.com":true,"doesntexist.org":true,"dontexist.com":true,"dontexist.net":true,"dontexist.org":true,"doomdns.com":true,"doomdns.org":true,"dvrdns.org":true,"dyn-o-saur.com":true,"dynalias.com":true,"dynalias.net":true,"dynalias.org":true,"dynathome.net":true,"dyndns.ws":true,"endofinternet.net":true,"endofinternet.org":true,"endoftheinternet.org":true,"est-a-la-maison.com":true,"est-a-la-masion.com":true,"est-le-patron.com":true,"est-mon-blogueur.com":true,"for-better.biz":true,"for-more.biz":true,"for-our.info":true,"for-some.biz":true,"for-the.biz":true,"forgot.her.name":true,"forgot.his.name":true,"from-ak.com":true,"from-al.com":true,"from-ar.com":true,"from-az.net":true,"from-ca.com":true,"from-co.net":true,"from-ct.com":true,"from-dc.com":true,"from-de.com":true,"from-fl.com":true,"from-ga.com":true,"from-hi.com":true,"from-ia.com":true,"from-id.com":true,"from-il.com":true,"from-in.com":true,"from-ks.com":true,"from-ky.com":true,"from-la.net":true,"from-ma.com":true,"from-md.com":true,"from-me.org":true,"from-mi.com":true,"from-mn.com":true,"from-mo.com":true,"from-ms.com":true,"from-mt.com":true,"from-nc.com":true,"from-nd.com":true,"from-ne.com":true,"from-nh.com":true,"from-nj.com":true,"from-nm.com":true,"from-nv.com":true,"from-ny.net":true,"from-oh.com":true,"from-ok.com":true,"from-or.com":true,"from-pa.com":true,"from-pr.com":true,"from-ri.com":true,"from-sc.com":true,"from-sd.com":true,"from-tn.com":true,"from-tx.com":true,"from-ut.com":true,"from-va.com":true,"from-vt.com":true,"from-wa.com":true,"from-wi.com":true,"from-wv.com":true,"from-wy.com":true,"ftpaccess.cc":true,"fuettertdasnetz.de":true,"game-host.org":true,"game-server.cc":true,"getmyip.com":true,"gets-it.net":true,"go.dyndns.org":true,"gotdns.com":true,"gotdns.org":true,"groks-the.info":true,"groks-this.info":true,"ham-radio-op.net":true,"here-for-more.info":true,"hobby-site.com":true,"hobby-site.org":true,"home.dyndns.org":true,"homedns.org":true,"homeftp.net":true,"homeftp.org":true,"homeip.net":true,"homelinux.com":true,"homelinux.net":true,"homelinux.org":true,"homeunix.com":true,"homeunix.net":true,"homeunix.org":true,"iamallama.com":true,"in-the-band.net":true,"is-a-anarchist.com":true,"is-a-blogger.com":true,"is-a-bookkeeper.com":true,"is-a-bruinsfan.org":true,"is-a-bulls-fan.com":true,"is-a-candidate.org":true,"is-a-caterer.com":true,"is-a-celticsfan.org":true,"is-a-chef.com":true,"is-a-chef.net":true,"is-a-chef.org":true,"is-a-conservative.com":true,"is-a-cpa.com":true,"is-a-cubicle-slave.com":true,"is-a-democrat.com":true,"is-a-designer.com":true,"is-a-doctor.com":true,"is-a-financialadvisor.com":true,"is-a-geek.com":true,"is-a-geek.net":true,"is-a-geek.org":true,"is-a-green.com":true,"is-a-guru.com":true,"is-a-hard-worker.com":true,"is-a-hunter.com":true,"is-a-knight.org":true,"is-a-landscaper.com":true,"is-a-lawyer.com":true,"is-a-liberal.com":true,"is-a-libertarian.com":true,"is-a-linux-user.org":true,"is-a-llama.com":true,"is-a-musician.com":true,"is-a-nascarfan.com":true,"is-a-nurse.com":true,"is-a-painter.com":true,"is-a-patsfan.org":true,"is-a-personaltrainer.com":true,"is-a-photographer.com":true,"is-a-player.com":true,"is-a-republican.com":true,"is-a-rockstar.com":true,"is-a-socialist.com":true,"is-a-soxfan.org":true,"is-a-student.com":true,"is-a-teacher.com":true,"is-a-techie.com":true,"is-a-therapist.com":true,"is-an-accountant.com":true,"is-an-actor.com":true,"is-an-actress.com":true,"is-an-anarchist.com":true,"is-an-artist.com":true,"is-an-engineer.com":true,"is-an-entertainer.com":true,"is-by.us":true,"is-certified.com":true,"is-found.org":true,"is-gone.com":true,"is-into-anime.com":true,"is-into-cars.com":true,"is-into-cartoons.com":true,"is-into-games.com":true,"is-leet.com":true,"is-lost.org":true,"is-not-certified.com":true,"is-saved.org":true,"is-slick.com":true,"is-uberleet.com":true,"is-very-bad.org":true,"is-very-evil.org":true,"is-very-good.org":true,"is-very-nice.org":true,"is-very-sweet.org":true,"is-with-theband.com":true,"isa-geek.com":true,"isa-geek.net":true,"isa-geek.org":true,"isa-hockeynut.com":true,"issmarterthanyou.com":true,"isteingeek.de":true,"istmein.de":true,"kicks-ass.net":true,"kicks-ass.org":true,"knowsitall.info":true,"land-4-sale.us":true,"lebtimnetz.de":true,"leitungsen.de":true,"likes-pie.com":true,"likescandy.com":true,"merseine.nu":true,"mine.nu":true,"misconfused.org":true,"mypets.ws":true,"myphotos.cc":true,"neat-url.com":true,"office-on-the.net":true,"on-the-web.tv":true,"podzone.net":true,"podzone.org":true,"readmyblog.org":true,"saves-the-whales.com":true,"scrapper-site.net":true,"scrapping.cc":true,"selfip.biz":true,"selfip.com":true,"selfip.info":true,"selfip.net":true,"selfip.org":true,"sells-for-less.com":true,"sells-for-u.com":true,"sells-it.net":true,"sellsyourhome.org":true,"servebbs.com":true,"servebbs.net":true,"servebbs.org":true,"serveftp.net":true,"serveftp.org":true,"servegame.org":true,"shacknet.nu":true,"simple-url.com":true,"space-to-rent.com":true,"stuff-4-sale.org":true,"stuff-4-sale.us":true,"teaches-yoga.com":true,"thruhere.net":true,"traeumtgerade.de":true,"webhop.biz":true,"webhop.info":true,"webhop.net":true,"webhop.org":true,"worse-than.tv":true,"writesthisblog.com":true}); - -// END of automatically generated file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt deleted file mode 100644 index 11dddd00..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt +++ /dev/null @@ -1,278 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt deleted file mode 100644 index 97067e54..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens <http://mathiasbynens.be/> - -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json deleted file mode 100644 index 69e12ae2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "punycode", - "version": "1.2.3", - "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", - "homepage": "http://mths.be/punycode", - "main": "punycode.js", - "keywords": [ - "punycode", - "unicode", - "idn", - "idna", - "dns", - "url", - "domain" - ], - "licenses": [ - { - "type": "MIT", - "url": "http://mths.be/mit" - }, - { - "type": "GPL", - "url": "http://mths.be/gpl" - } - ], - "author": { - "name": "Mathias Bynens", - "email": "mathias@qiwi.be", - "url": "http://mathiasbynens.be/" - }, - "contributors": [ - { - "name": "Mathias Bynens", - "email": "mathias@qiwi.be", - "url": "http://mathiasbynens.be/" - }, - { - "name": "John-David Dalton", - "email": "john.david.dalton@gmail.com", - "url": "http://allyoucanleet.com/" - } - ], - "bugs": { - "url": "https://github.com/bestiejs/punycode.js/issues" - }, - "repository": { - "type": "git", - "url": "https://github.com/bestiejs/punycode.js.git" - }, - "engines": [ - "node", - "rhino" - ], - "directories": { - "doc": "docs", - "test": "tests" - }, - "scripts": { - "test": "node tests/tests.js" - }, - "devDependencies": { - "grunt": "~0.4.1", - "grunt-contrib-uglify": "~0.2.2", - "grunt-shell": "~0.2.2", - "istanbul": "~0.1.37", - "qunit-clib": "~1.3.0", - "qunitjs": "~1.11.0", - "requirejs": "~2.1.6" - }, - "readme": "ERROR: No README data found!", - "_id": "punycode@1.2.3", - "dist": { - "shasum": "b4e304471082d783c73b3bafabf2fd9b6a486266" - }, - "_from": "punycode@>=0.2.0", - "_resolved": "https://registry.npmjs.org/punycode/-/punycode-1.2.3.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js deleted file mode 100644 index 41803ba4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js +++ /dev/null @@ -1,508 +0,0 @@ -/*! http://mths.be/punycode v1.2.3 by @mathias */ -;(function(root) { - - /** Detect free variables */ - var freeExports = typeof exports == 'object' && exports; - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /** - * The `punycode` object. - * @name punycode - * @type Object - */ - var punycode, - - /** Highest positive signed 32-bit float value */ - maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 - - /** Bootstring parameters */ - base = 36, - tMin = 1, - tMax = 26, - skew = 38, - damp = 700, - initialBias = 72, - initialN = 128, // 0x80 - delimiter = '-', // '\x2D' - - /** Regular expressions */ - regexPunycode = /^xn--/, - regexNonASCII = /[^ -~]/, // unprintable ASCII chars + non-ASCII chars - regexSeparators = /\x2E|\u3002|\uFF0E|\uFF61/g, // RFC 3490 separators - - /** Error messages */ - errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' - }, - - /** Convenience shortcuts */ - baseMinusTMin = base - tMin, - floor = Math.floor, - stringFromCharCode = String.fromCharCode, - - /** Temporary variable */ - key; - - /*--------------------------------------------------------------------------*/ - - /** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ - function error(type) { - throw RangeError(errors[type]); - } - - /** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ - function map(array, fn) { - var length = array.length; - while (length--) { - array[length] = fn(array[length]); - } - return array; - } - - /** - * A simple `Array#map`-like wrapper to work with domain name strings. - * @private - * @param {String} domain The domain name. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ - function mapDomain(string, fn) { - return map(string.split(regexSeparators), fn).join('.'); - } - - /** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see <http://mathiasbynens.be/notes/javascript-encoding> - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ - function ucs2decode(string) { - var output = [], - counter = 0, - length = string.length, - value, - extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - /** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ - function ucs2encode(array) { - return map(array, function(value) { - var output = ''; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - return output; - }).join(''); - } - - /** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } - - /** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ - function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } - - /** - * Bias adaptation function as per section 3.4 of RFC 3492. - * http://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } - - /** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ - function decode(input) { - // Don't use UCS-2 - var output = [], - inputLength = input.length, - out, - i = 0, - n = initialN, - bias = initialBias, - basic, - j, - index, - oldi, - w, - k, - digit, - t, - length, - /** Cached calculation results */ - baseMinusT; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - for (oldi = i, w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output - output.splice(i++, 0, n); - - } - - return ucs2encode(output); - } - - /** - * Converts a string of Unicode symbols to a Punycode string of ASCII-only - * symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ - function encode(input) { - var n, - delta, - handledCPCount, - basicLength, - bias, - j, - m, - q, - k, - t, - currentValue, - output = [], - /** `inputLength` will hold the number of code points in `input`. */ - inputLength, - /** Cached calculation results */ - handledCPCountPlusOne, - baseMinusT, - qMinusT; - - // Convert the input in UCS-2 to Unicode - input = ucs2decode(input); - - // Cache the length - inputLength = input.length; - - // Initialize the state - n = initialN; - delta = 0; - bias = initialBias; - - // Handle the basic code points - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - handledCPCount = basicLength = output.length; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string - if it is not empty - with a delimiter - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, - // but guard against overflow - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - - if (currentValue == n) { - // Represent delta as a generalized variable-length integer - for (q = delta, k = base; /* no condition */; k += base) { - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); - } - - /** - * Converts a Punycode string representing a domain name to Unicode. Only the - * Punycoded parts of the domain name will be converted, i.e. it doesn't - * matter if you call it on a string that has already been converted to - * Unicode. - * @memberOf punycode - * @param {String} domain The Punycode domain name to convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ - function toUnicode(domain) { - return mapDomain(domain, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); - } - - /** - * Converts a Unicode string representing a domain name to Punycode. Only the - * non-ASCII parts of the domain name will be converted, i.e. it doesn't - * matter if you call it with a domain that's already in ASCII. - * @memberOf punycode - * @param {String} domain The domain name to convert, as a Unicode string. - * @returns {String} The Punycode representation of the given domain name. - */ - function toASCII(domain) { - return mapDomain(domain, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); - } - - /*--------------------------------------------------------------------------*/ - - /** Define the public API */ - punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '1.2.3', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see <http://mathiasbynens.be/notes/javascript-encoding> - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode - }; - - /** Expose `punycode` */ - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return punycode; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = punycode; - } else { // in Narwhal or RingoJS v0.7.0- - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { // in Rhino or a web browser - root.punycode = punycode; - } - -}(this)); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js deleted file mode 100644 index ac5d914a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! http://mths.be/punycode v1.2.3 by @mathias */ -(function(o){function e(o){throw RangeError(L[o])}function n(o,e){for(var n=o.length;n--;)o[n]=e(o[n]);return o}function t(o,e){return n(o.split(S),e).join(".")}function r(o){for(var e,n,t=[],r=0,u=o.length;u>r;)e=o.charCodeAt(r++),e>=55296&&56319>=e&&u>r?(n=o.charCodeAt(r++),56320==(64512&n)?t.push(((1023&e)<<10)+(1023&n)+65536):(t.push(e),r--)):t.push(e);return t}function u(o){return n(o,function(o){var e="";return o>65535&&(o-=65536,e+=R(55296|1023&o>>>10),o=56320|1023&o),e+=R(o)}).join("")}function i(o){return 10>o-48?o-22:26>o-65?o-65:26>o-97?o-97:x}function f(o,e){return o+22+75*(26>o)-((0!=e)<<5)}function c(o,e,n){var t=0;for(o=n?P(o/m):o>>1,o+=P(o/e);o>M*y>>1;t+=x)o=P(o/M);return P(t+(M+1)*o/(o+j))}function l(o){var n,t,r,f,l,d,s,a,p,h,v=[],g=o.length,w=0,j=I,m=A;for(t=o.lastIndexOf(F),0>t&&(t=0),r=0;t>r;++r)o.charCodeAt(r)>=128&&e("not-basic"),v.push(o.charCodeAt(r));for(f=t>0?t+1:0;g>f;){for(l=w,d=1,s=x;f>=g&&e("invalid-input"),a=i(o.charCodeAt(f++)),(a>=x||a>P((b-w)/d))&&e("overflow"),w+=a*d,p=m>=s?C:s>=m+y?y:s-m,!(p>a);s+=x)h=x-p,d>P(b/h)&&e("overflow"),d*=h;n=v.length+1,m=c(w-l,n,0==l),P(w/n)>b-j&&e("overflow"),j+=P(w/n),w%=n,v.splice(w++,0,j)}return u(v)}function d(o){var n,t,u,i,l,d,s,a,p,h,v,g,w,j,m,E=[];for(o=r(o),g=o.length,n=I,t=0,l=A,d=0;g>d;++d)v=o[d],128>v&&E.push(R(v));for(u=i=E.length,i&&E.push(F);g>u;){for(s=b,d=0;g>d;++d)v=o[d],v>=n&&s>v&&(s=v);for(w=u+1,s-n>P((b-t)/w)&&e("overflow"),t+=(s-n)*w,n=s,d=0;g>d;++d)if(v=o[d],n>v&&++t>b&&e("overflow"),v==n){for(a=t,p=x;h=l>=p?C:p>=l+y?y:p-l,!(h>a);p+=x)m=a-h,j=x-h,E.push(R(f(h+m%j,0))),a=P(m/j);E.push(R(f(a,0))),l=c(t,w,u==i),t=0,++u}++t,++n}return E.join("")}function s(o){return t(o,function(o){return E.test(o)?l(o.slice(4).toLowerCase()):o})}function a(o){return t(o,function(o){return O.test(o)?"xn--"+d(o):o})}var p="object"==typeof exports&&exports,h="object"==typeof module&&module&&module.exports==p&&module,v="object"==typeof global&&global;(v.global===v||v.window===v)&&(o=v);var g,w,b=2147483647,x=36,C=1,y=26,j=38,m=700,A=72,I=128,F="-",E=/^xn--/,O=/[^ -~]/,S=/\x2E|\u3002|\uFF0E|\uFF61/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},M=x-C,P=Math.floor,R=String.fromCharCode;if(g={version:"1.2.3",ucs2:{decode:r,encode:u},decode:l,encode:d,toASCII:a,toUnicode:s},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return g});else if(p&&!p.nodeType)if(h)h.exports=g;else for(w in g)g.hasOwnProperty(w)&&(p[w]=g[w]);else o.punycode=g})(this); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt deleted file mode 100644 index a7501f98..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright 2011-2013 John-David Dalton <http://allyoucanleet.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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md deleted file mode 100644 index fbddce91..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Docdown <sup>v1.0.0</sup> - -A simple JSDoc to Markdown documentation generator. - -## Documentation - -The documentation for Docdown can be viewed here: [/doc/README.md](https://github.com/jdalton/docdown/blob/master/doc/README.md#readme) - -For a list of upcoming features, check out our [roadmap](https://github.com/jdalton/docdown/wiki/Roadmap). - -## Installation and usage - -Usage example: - -```php -require("docdown.php"); - -// generate Markdown -$markdown = docdown(array( - "path" => $filepath, - "url" => "https://github.com/username/project/blob/master/my.js" -)); -``` - -## Author - -| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](http://twitter.com/jdalton "Follow @jdalton on Twitter") | -|---| -| [John-David Dalton](http://allyoucanleet.com/) | - -## Contributors - -| [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](http://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md deleted file mode 100644 index 459d36ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# Docdown <sup>v1.0.0</sup> - -<!-- div --> - - -<!-- div --> - -## <a id="docdown"></a>`docdown` -* [`docdown`](#docdown$optionsarray) - -<!-- /div --> - - -<!-- /div --> - - -<!-- div --> - - -<!-- div --> - -## `docdown` - -<!-- div --> - -### <a id="docdown$optionsarray"></a>`docdown([$options=array()])` -<a href="#docdown$optionsarray">#</a> [Ⓢ](https://github.com/jdalton/docdown/blob/master/docdown.php#L34 "View in source") [Ⓣ][1] - -Generates Markdown from JSDoc entries in a given file. - -#### Arguments -1. `[$options=array()]` *(Array)*: The options array. - -#### Returns -*(String)*: The generated Markdown. - -#### Example -```php -// specify a file path -$markdown = docdown(array( - // path to js file - 'path' => $filepath, - // url used to reference line numbers in code - 'url' => 'https://github.com/username/project/blob/master/my.js' -)); - -// or pass raw js -$markdown = docdown(array( - // raw JavaScript source - 'source' => $rawJS, - // documentation title - 'title' => 'My API Documentation', - // url used to reference line numbers in code - 'url' => 'https://github.com/username/project/blob/master/my.js' -)); -``` - -* * * - -<!-- /div --> - - -<!-- /div --> - - -<!-- /div --> - - - [1]: #docdown "Jump back to the TOC." \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php deleted file mode 100644 index eca8d145..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - - // cleanup requested filepath - $file = isset($_GET['f']) ? $_GET['f'] : 'docdown'; - $file = preg_replace('#(\.*[\/])+#', '', $file); - $file .= preg_match('/\.[a-z]+$/', $file) ? '' : '.php'; - - // output filename - if (isset($_GET['o'])) { - $output = $_GET['o']; - } else if (isset($_SERVER['argv'][1])) { - $output = $_SERVER['argv'][1]; - } else { - $output = basename($file); - } - - /*--------------------------------------------------------------------------*/ - - require('../docdown.php'); - - // generate Markdown - $markdown = docdown(array( - 'path' => '../' . $file, - 'title' => 'Docdown <sup>v1.0.0</sup>', - 'url' => 'https://github.com/jdalton/docdown/blob/master/docdown.php' - )); - - // save to a .md file - file_put_contents($output . '.md', $markdown); - - // print - header('Content-Type: text/plain;charset=utf-8'); - echo $markdown . PHP_EOL; - -?> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php deleted file mode 100644 index 4a786d75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php -/*! - * Docdown v1.0.0-pre - * Copyright 2011-2013 John-David Dalton <http://allyoucanleet.com/> - * Available under MIT license <http://mths.be/mit> - */ -require(dirname(__FILE__) . '/src/DocDown/Generator.php'); - -/** - * Generates Markdown from JSDoc entries in a given file. - * - * @param {Array} [$options=array()] The options array. - * @returns {String} The generated Markdown. - * @example - * - * // specify a file path - * $markdown = docdown(array( - * // path to js file - * 'path' => $filepath, - * // url used to reference line numbers in code - * 'url' => 'https://github.com/username/project/blob/master/my.js' - * )); - * - * // or pass raw js - * $markdown = docdown(array( - * // raw JavaScript source - * 'source' => $rawJS, - * // documentation title - * 'title' => 'My API Documentation', - * // url used to reference line numbers in code - * 'url' => 'https://github.com/username/project/blob/master/my.js' - * )); - */ -function docdown( $options = array() ) { - $gen = new Generator($options); - return $gen->generate(); -} -?> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php deleted file mode 100644 index 0a7c552e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php +++ /dev/null @@ -1,226 +0,0 @@ -<?php - -/** - * A class to represent a JSDoc entry alias. - */ -class Alias { - - /** - * The alias owner. - * - * @memberOf Alias - * @type Object - */ - public $owner; - - /*--------------------------------------------------------------------------*/ - - /** - * The Alias constructor. - * - * @constructor - * @param {String} $name The alias name. - * @param {Object} $owner The alias owner. - */ - public function __construct( $name, $owner ) { - $this->owner = $owner; - $this->_name = $name; - $this->_call = $owner->getCall(); - $this->_category = $owner->getCategory(); - $this->_desc = $owner->getDesc(); - $this->_example = $owner->getExample(); - $this->_isCtor = $owner->isCtor(); - $this->_isLicense = $owner->isLicense(); - $this->_isPlugin = $owner->isPlugin(); - $this->_isPrivate = $owner->isPrivate(); - $this->_isStatic = $owner->isStatic(); - $this->_lineNumber = $owner->getLineNumber(); - $this->_members = $owner->getMembers(); - $this->_params = $owner->getParams(); - $this->_returns = $owner->getReturns(); - $this->_type = $owner->getType(); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Extracts the entry's `alias` objects. - * - * @memberOf Alias - * @param {Number} $index The index of the array value to return. - * @returns {Array|String} The entry's `alias` objects. - */ - public function getAliases( $index = null ) { - $result = array(); - return $index !== null - ? @$result[$index] - : $result; - } - - /** - * Extracts the function call from the owner entry. - * - * @memberOf Alias - * @returns {String} The function call. - */ - public function getCall() { - return $this->_call; - } - - /** - * Extracts the owner entry's `category` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `category` data. - */ - public function getCategory() { - return $this->_category; - } - - /** - * Extracts the owner entry's description. - * - * @memberOf Alias - * @returns {String} The owner entry's description. - */ - public function getDesc() { - return $this->_desc; - } - - /** - * Extracts the owner entry's `example` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `example` data. - */ - public function getExample() { - return $this->_example; - } - - /** - * Checks if the entry is an alias. - * - * @memberOf Alias - * @returns {Boolean} Returns `true`. - */ - public function isAlias() { - return true; - } - - /** - * Checks if the owner entry is a constructor. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if a constructor, else `false`. - */ - public function isCtor() { - return $this->_isCtor; - } - - /** - * Checks if the owner entry is a license. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if a license, else `false`. - */ - public function isLicense() { - return $this->_isLicense; - } - - /** - * Checks if the owner entry *is* assigned to a prototype. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if assigned to a prototype, else `false`. - */ - public function isPlugin() { - return $this->_isPlugin; - } - - /** - * Checks if the owner entry is private. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if private, else `false`. - */ - public function isPrivate() { - return $this->_isPrivate; - } - - /** - * Checks if the owner entry is *not* assigned to a prototype. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if not assigned to a prototype, else `false`. - */ - public function isStatic() { - return $this->_isStatic; - } - - /** - * Resolves the owner entry's line number. - * - * @memberOf Alias - * @returns {Number} The owner entry's line number. - */ - public function getLineNumber() { - return $this->_lineNumber; - } - - /** - * Extracts the owner entry's `member` data. - * - * @memberOf Alias - * @param {Number} $index The index of the array value to return. - * @returns {Array|String} The owner entry's `member` data. - */ - public function getMembers( $index = null ) { - return $index !== null - ? @$this->_members[$index] - : $this->_members; - } - - /** - * Extracts the owner entry's `name` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `name` data. - */ - public function getName() { - return $this->_name; - } - - /** - * Extracts the owner entry's `param` data. - * - * @memberOf Alias - * @param {Number} $index The index of the array value to return. - * @returns {Array} The owner entry's `param` data. - */ - public function getParams( $index = null ) { - return $index !== null - ? @$this->_params[$index] - : $this->_params; - } - - /** - * Extracts the owner entry's `returns` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `returns` data. - */ - public function getReturns() { - return $this->_returns; - } - - /** - * Extracts the owner entry's `type` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `type` data. - */ - public function getType() { - return $this->_type; - } -} -?> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php deleted file mode 100644 index a973d9a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php +++ /dev/null @@ -1,442 +0,0 @@ -<?php - -require(dirname(__FILE__) . "/Alias.php"); - -/** - * A class to simplify parsing a single JSDoc entry. - */ -class Entry { - - /** - * The documentation entry. - * - * @memberOf Entry - * @type String - */ - public $entry = ''; - - /** - * The language highlighter used for code examples. - * - * @memberOf Entry - * @type String - */ - public $lang = ''; - - /** - * The source code. - * - * @memberOf Entry - * @type String - */ - public $source = ''; - - /*--------------------------------------------------------------------------*/ - - /** - * The Entry constructor. - * - * @constructor - * @param {String} $entry The documentation entry to analyse. - * @param {String} $source The source code. - * @param {String} [$lang ='js'] The language highlighter used for code examples. - */ - public function __construct( $entry, $source, $lang = 'js' ) { - $this->entry = $entry; - $this->lang = $lang; - $this->source = str_replace(PHP_EOL, "\n", $source); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Extracts the documentation entries from source code. - * - * @static - * @memberOf Entry - * @param {String} $source The source code. - * @returns {Array} The array of entries. - */ - public static function getEntries( $source ) { - preg_match_all('#/\*\*(?![-!])[\s\S]*?\*/\s*.+#', $source, $result); - return array_pop($result); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Checks if the entry is a function reference. - * - * @private - * @memberOf Entry - * @returns {Boolean} Returns `true` if the entry is a function reference, else `false`. - */ - private function isFunction() { - if (!isset($this->_isFunction)) { - $this->_isFunction = !!( - $this->isCtor() || - count($this->getParams()) || - count($this->getReturns()) || - preg_match('/\*[\t ]*@function\b/', $this->entry) - ); - } - return $this->_isFunction; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Extracts the entry's `alias` objects. - * - * @memberOf Entry - * @param {Number} $index The index of the array value to return. - * @returns {Array|String} The entry's `alias` objects. - */ - public function getAliases( $index = null ) { - if (!isset($this->_aliases)) { - preg_match('#\*[\t ]*@alias\s+(.+)#', $this->entry, $result); - - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - $result = preg_split('/,\s*/', $result); - natsort($result); - - foreach ($result as $resultIndex => $value) { - $result[$resultIndex] = new Alias($value, $this); - } - } - $this->_aliases = $result; - } - return $index !== null - ? @$this->_aliases[$index] - : $this->_aliases; - } - - /** - * Extracts the function call from the entry. - * - * @memberOf Entry - * @returns {String} The function call. - */ - public function getCall() { - if (isset($this->_call)) { - return $this->_call; - } - - preg_match('#\*/\s*(?:function ([^(]*)|(.*?)(?=[:=,]|return\b))#', $this->entry, $result); - if ($result = array_pop($result)) { - $result = array_pop(explode('var ', trim(trim(array_pop(explode('.', $result))), "'"))); - } - // resolve name - // avoid $this->getName() because it calls $this->getCall() - preg_match('#\*[\t ]*@name\s+(.+)#', $this->entry, $name); - if (count($name)) { - $name = trim($name[1]); - } else { - $name = $result; - } - // compile function call syntax - if ($this->isFunction()) { - // compose parts - $result = array($result); - $params = $this->getParams(); - foreach ($params as $param) { - $result[] = $param[1]; - } - // format - $result = $name .'('. implode(array_slice($result, 1), ', ') .')'; - $result = str_replace(', [', ' [, ', str_replace('], [', ', ', $result)); - } - - $this->_call = $result ? $result : $name; - return $this->_call; - } - - /** - * Extracts the entry's `category` data. - * - * @memberOf Entry - * @returns {String} The entry's `category` data. - */ - public function getCategory() { - if (isset($this->_category)) { - return $this->_category; - } - - preg_match('#\*[\t ]*@category\s+(.+)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - } else { - $result = $this->getType() == 'Function' ? 'Methods' : 'Properties'; - } - $this->_category = $result; - return $result; - } - - /** - * Extracts the entry's description. - * - * @memberOf Entry - * @returns {String} The entry's description. - */ - public function getDesc() { - if (isset($this->_desc)) { - return $this->_desc; - } - - preg_match('#/\*\*(?:\s*\*)?([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result); - if (count($result)) { - $type = $this->getType(); - $result = preg_replace('/:\n[\t ]*\*[\t ]*/', ":<br>\n", $result[1]); - $result = preg_replace('/(?:^|\n)[\t ]*\*\n[\t ]*\*[\t ]*/', "\n\n", $result); - $result = preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result); - $result = trim($result); - $result = ($type == 'Function' ? '' : '(' . str_replace('|', ', ', trim($type, '{}')) . '): ') . $result; - } - $this->_desc = $result; - return $result; - } - - /** - * Extracts the entry's `example` data. - * - * @memberOf Entry - * @returns {String} The entry's `example` data. - */ - public function getExample() { - if (isset($this->_example)) { - return $this->_example; - } - - preg_match('#\*[\t ]*@example\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', "\n", $result[1])); - $result = '```' . $this->lang . "\n" . $result . "\n```"; - } - $this->_example = $result; - return $result; - } - - /** - * Checks if the entry is an alias. - * - * @memberOf Entry - * @returns {Boolean} Returns `false`. - */ - public function isAlias() { - return false; - } - - /** - * Checks if the entry is a constructor. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if a constructor, else `false`. - */ - public function isCtor() { - if (!isset($this->_isCtor)) { - $this->_isCtor = !!preg_match('/\*[\t ]*@constructor\b/', $this->entry); - } - return $this->_isCtor; - } - - /** - * Checks if the entry is a license. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if a license, else `false`. - */ - public function isLicense() { - if (!isset($this->_isLicense)) { - $this->_isLicense = !!preg_match('/\*[\t ]*@license\b/', $this->entry); - } - return $this->_isLicense; - } - - /** - * Checks if the entry *is* assigned to a prototype. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if assigned to a prototype, else `false`. - */ - public function isPlugin() { - if (!isset($this->_isPlugin)) { - $this->_isPlugin = !$this->isCtor() && !$this->isPrivate() && !$this->isStatic(); - } - return $this->_isPlugin; - } - - /** - * Checks if the entry is private. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if private, else `false`. - */ - public function isPrivate() { - if (!isset($this->_isPrivate)) { - $this->_isPrivate = $this->isLicense() || !!preg_match('/\*[\t ]*@private\b/', $this->entry) || !preg_match('/\*[\t ]*@[a-z]+\b/', $this->entry); - } - return $this->_isPrivate; - } - - /** - * Checks if the entry is *not* assigned to a prototype. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if not assigned to a prototype, else `false`. - */ - public function isStatic() { - if (isset($this->_isStatic)) { - return $this->_isStatic; - } - - $public = !$this->isPrivate(); - $result = $public && !!preg_match('/\*[\t ]*@static\b/', $this->entry); - - // set in cases where it isn't explicitly stated - if ($public && !$result) { - if ($parent = array_pop(preg_split('/[#.]/', $this->getMembers(0)))) { - foreach (Entry::getEntries($this->source) as $entry) { - $entry = new Entry($entry, $this->source); - if ($entry->getName() == $parent) { - $result = !$entry->isCtor(); - break; - } - } - } else { - $result = true; - } - } - $this->_isStatic = $result; - return $result; - } - - /** - * Resolves the entry's line number. - * - * @memberOf Entry - * @returns {Number} The entry's line number. - */ - public function getLineNumber() { - if (!isset($this->_lineNumber)) { - preg_match_all('/\n/', substr($this->source, 0, strrpos($this->source, $this->entry) + strlen($this->entry)), $lines); - $this->_lineNumber = count(array_pop($lines)) + 1; - } - return $this->_lineNumber; - } - - /** - * Extracts the entry's `member` data. - * - * @memberOf Entry - * @param {Number} $index The index of the array value to return. - * @returns {Array|String} The entry's `member` data. - */ - public function getMembers( $index = null ) { - if (!isset($this->_members)) { - preg_match('#\*[\t ]*@member(?:Of)?\s+(.+)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - $result = preg_split('/,\s*/', $result); - natsort($result); - } - $this->_members = $result; - } - return $index !== null - ? @$this->_members[$index] - : $this->_members; - } - - /** - * Extracts the entry's `name` data. - * - * @memberOf Entry - * @returns {String} The entry's `name` data. - */ - public function getName() { - if (isset($this->_name)) { - return $this->_name; - } - - preg_match('#\*[\t ]*@name\s+(.+)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - } else { - $result = array_shift(explode('(', $this->getCall())); - } - $this->_name = $result; - return $result; - } - - /** - * Extracts the entry's `param` data. - * - * @memberOf Entry - * @param {Number} $index The index of the array value to return. - * @returns {Array} The entry's `param` data. - */ - public function getParams( $index = null ) { - if (!isset($this->_params)) { - preg_match_all('#\*[\t ]*@param\s+\{([^}]+)\}\s+(\[.+\]|[$\w|]+(?:\[.+\])?)\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#i', $this->entry, $result); - if (count($result = array_filter(array_slice($result, 1)))) { - // repurpose array - foreach ($result as $param) { - foreach ($param as $key => $value) { - if (!is_array($result[0][$key])) { - $result[0][$key] = array(); - } - $result[0][$key][] = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]*/', ' ', $value)); - } - } - $result = $result[0]; - } - $this->_params = $result; - } - return $index !== null - ? @$this->_params[$index] - : $this->_params; - } - - /** - * Extracts the entry's `returns` data. - * - * @memberOf Entry - * @returns {String} The entry's `returns` data. - */ - public function getReturns() { - if (isset($this->_returns)) { - return $this->_returns; - } - - preg_match('#\*[\t ]*@returns\s+\{([^}]+)\}\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result); - if (count($result)) { - $result = array_map('trim', array_slice($result, 1)); - $result[0] = str_replace('|', ', ', $result[0]); - $result[1] = preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1]); - } - $this->_returns = $result; - return $result; - } - - /** - * Extracts the entry's `type` data. - * - * @memberOf Entry - * @returns {String} The entry's `type` data. - */ - public function getType() { - if (isset($this->_type)) { - return $this->_type; - } - - preg_match('#\*[\t ]*@type\s+(.+)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - } else { - $result = $this->isFunction() ? 'Function' : 'Unknown'; - } - $this->_type = $result; - return $result; - } -} -?> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php deleted file mode 100644 index 5dc2583f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php +++ /dev/null @@ -1,563 +0,0 @@ -<?php - -require(dirname(__FILE__) . "/Entry.php"); - -/** - * Generates Markdown from JSDoc entries. - */ -class Generator { - - /** - * The HTML for the close tag. - * - * @static - * @memberOf Generator - * @type String - */ - public $closeTag = "\n<!-- /div -->\n"; - - /** - * An array of JSDoc entries. - * - * @memberOf Generator - * @type Array - */ - public $entries = array(); - - /** - * The HTML for the open tag. - * - * @static - * @memberOf Generator - * @type String - */ - public $openTag = "\n<!-- div -->\n"; - - /** - * An options array used to configure the generator. - * - * @memberOf Generator - * @type Array - */ - public $options = array(); - - /** - * The file's source code. - * - * @memberOf Generator - * @type String - */ - public $source = ''; - - /*--------------------------------------------------------------------------*/ - - /** - * The Generator constructor. - * - * @constructor - * @param {String} $source The source code to parse. - * @param {Array} $options The options array. - */ - public function __construct( $source, $options = array() ) { - // juggle arguments - if (is_array($source)) { - $options = $source; - } else { - $options['source'] = $source; - } - if (isset($options['source']) && realpath($options['source'])) { - $options['path'] = $options['source']; - } - if (isset($options['path'])) { - preg_match('/(?<=\.)[a-z]+$/', $options['path'], $ext); - $options['source'] = file_get_contents($options['path']); - $ext = array_pop($ext); - - if (!isset($options['lang']) && $ext) { - $options['lang'] = $ext; - } - if (!isset($options['title'])) { - $options['title'] = ucfirst(basename($options['path'])) . ' API documentation'; - } - } - if (!isset($options['lang'])) { - $options['lang'] = 'js'; - } - if (!isset($options['toc'])) { - $options['toc'] = 'properties'; - } - - $this->options = $options; - $this->source = str_replace(PHP_EOL, "\n", $options['source']); - $this->entries = Entry::getEntries($this->source); - - foreach ($this->entries as $index => $value) { - $this->entries[$index] = new Entry($value, $this->source, $options['lang']); - } - } - - /*--------------------------------------------------------------------------*/ - - /** - * Performs common string formatting operations. - * - * @private - * @static - * @memberOf Generator - * @param {String} $string The string to format. - * @returns {String} The formatted string. - */ - private static function format( $string ) { - $counter = 0; - - // tokenize inline code snippets - preg_match_all('/`[^`]+`/', $string, $tokenized); - $tokenized = $tokenized[0]; - foreach ($tokenized as $snippet) { - $string = str_replace($snippet, '__token' . ($counter++) .'__', $string); - } - - // italicize parentheses - $string = preg_replace('/(^|\s)(\([^)]+\))/', '$1*$2*', $string); - - // mark numbers as inline code - $string = preg_replace('/[\t ](-?\d+(?:.\d+)?)(?!\.[^\n])/', ' `$1`', $string); - - // detokenize inline code snippets - $counter = 0; - foreach ($tokenized as $snippet) { - $string = str_replace('__token' . ($counter++) . '__', $snippet, $string); - } - - return trim($string); - } - - /** - * Modify a string by replacing named tokens with matching assoc. array values. - * - * @private - * @static - * @memberOf Generator - * @param {String} $string The string to modify. - * @param {Array|Object} $object The template object. - * @returns {String} The modified string. - */ - private static function interpolate( $string, $object ) { - preg_match_all('/#\{([^}]+)\}/', $string, $tokens); - $tokens = array_unique(array_pop($tokens)); - - foreach ($tokens as $token) { - $pattern = '/#\{' . $token . '\}/'; - $replacement = ''; - - if (is_object($object)) { - preg_match('/\(([^)]+?)\)$/', $token, $args); - $args = preg_split('/,\s*/', array_pop($args)); - $method = 'get' . ucfirst(str_replace('/\([^)]+?\)$/', '', $token)); - - if (method_exists($object, $method)) { - $replacement = (string) call_user_func_array(array($object, $method), $args); - } else if (isset($object->{$token})) { - $replacement = (string) $object->{$token}; - } - } else if (isset($object[$token])) { - $replacement = (string) $object[$token]; - } - $string = preg_replace($pattern, trim($replacement), $string); - } - return Generator::format($string); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Adds the given `$entries` to the `$result` array. - * - * @private - * @memberOf Generator - * @param {Array} $result The result array to modify. - * @param {Array} $entries The entries to add to the `$result`. - */ - private function addEntries( &$result, $entries ) { - foreach ($entries as $entry) { - // skip aliases - if ($entry->isAlias()) { - continue; - } - // name and description - array_push( - $result, - $this->openTag, - Generator::interpolate("### <a id=\"#{hash}\"></a>`#{member}#{separator}#{call}`\n<a href=\"##{hash}\">#</a> [Ⓢ](#{href} \"View in source\") [Ⓣ][1]\n\n#{desc}", $entry) - ); - - // @alias - if (count($aliases = $entry->getAliases())) { - array_push($result, '', '#### Aliases'); - foreach ($aliases as $index => $alias) { - $aliases[$index] = $alias->getName(); - } - $result[] = '*' . implode(', ', $aliases) . '*'; - } - // @param - if (count($params = $entry->getParams())) { - array_push($result, '', '#### Arguments'); - foreach ($params as $index => $param) { - $result[] = Generator::interpolate('#{num}. `#{name}` (#{type}): #{desc}', array( - 'desc' => $param[2], - 'name' => $param[1], - 'num' => $index + 1, - 'type' => $param[0] - )); - } - } - // @returns - if (count($returns = $entry->getReturns())) { - array_push( - $result, '', - '#### Returns', - Generator::interpolate('(#{type}): #{desc}', array('desc' => $returns[1], 'type' => $returns[0])) - ); - } - // @example - if ($example = $entry->getExample()) { - array_push($result, '', '#### Example', $example); - } - array_push($result, "\n* * *", $this->closeTag); - } - } - - /** - * Resolves the entry's hash used to navigate the documentation. - * - * @private - * @memberOf Generator - * @param {Number|Object} $entry The entry object. - * @param {String} $member The name of the member. - * @returns {String} The url hash. - */ - private function getHash( $entry, $member = '' ) { - $entry = is_numeric($entry) ? $this->entries[$entry] : $entry; - $member = !$member ? $entry->getMembers(0) : $member; - $result = ($member ? $member . ($entry->isPlugin() ? 'prototype' : '') : '') . $entry->getCall(); - $result = preg_replace('/\(\[|\[\]/', '', $result); - $result = preg_replace('/[ =|\'"{}.()\]]/', '', $result); - $result = preg_replace('/[[#,]/', '-', $result); - return strtolower($result); - } - - /** - * Resolves the entry's url for the specific line number. - * - * @private - * @memberOf Generator - * @param {Number|Object} $entry The entry object. - * @returns {String} The url. - */ - private function getLineUrl( $entry ) { - $entry = is_numeric($entry) ? $this->entries($entry) : $entry; - return $this->options['url'] . '#L' . $entry->getLineNumber(); - } - - /** - * Extracts the character used to separate the entry's name from its member. - * - * @private - * @memberOf Generator - * @param {Number|Object} $entry The entry object. - * @returns {String} The separator. - */ - private function getSeparator( $entry ) { - $entry = is_numeric($entry) ? $this->entries($entry) : $entry; - return $entry->isPlugin() ? '.prototype.' : '.'; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Generates Markdown from JSDoc entries. - * - * @memberOf Generator - * @returns {String} The rendered Markdown. - */ - public function generate() { - $api = array(); - $byCategory = $this->options['toc'] == 'categories'; - $categories = array(); - $closeTag = $this->closeTag; - $compiling = false; - $openTag = $this->openTag; - $result = array('# ' . $this->options['title']); - $toc = 'toc'; - - // initialize $api array - foreach ($this->entries as $entry) { - // skip invalid or private entries - $name = $entry->getName(); - if (!$name || $entry->isPrivate()) { - continue; - } - - $members = $entry->getMembers(); - $members = count($members) ? $members : array(''); - - foreach ($members as $member) { - // create api category arrays - if ($member && !isset($api[$member])) { - // create temporary entry to be replaced later - $api[$member] = new stdClass; - $api[$member]->static = array(); - $api[$member]->plugin = array(); - } - - // append entry to api member - if (!$member || $entry->isCtor() || ($entry->getType() == 'Object' && - !preg_match('/[=:]\s*(?:null|undefined)\s*[,;]?$/', $entry->entry))) { - - // assign the real entry, replacing the temporary entry if it exist - $member = ($member ? $member . ($entry->isPlugin() ? '#' : '.') : '') . $name; - $entry->static = @$api[$member] ? $api[$member]->static : array(); - $entry->plugin = @$api[$member] ? $api[$member]->plugin : array(); - - $api[$member] = $entry; - foreach ($entry->getAliases() as $alias) { - $api[$member]->static[] = $alias; - } - } - else if ($entry->isStatic()) { - $api[$member]->static[] = $entry; - foreach ($entry->getAliases() as $alias) { - $api[$member]->static[] = $alias; - } - } - else if (!$entry->isCtor()) { - $api[$member]->plugin[] = $entry; - foreach ($entry->getAliases() as $alias) { - $api[$member]->plugin[] = $alias; - } - } - } - } - - // add properties to each entry - foreach ($api as $entry) { - $entry->hash = $this->getHash($entry); - $entry->href = $this->getLineUrl($entry); - - $member = $entry->getMembers(0); - $member = ($member ? $member . ($entry->isPlugin() ? '.prototype.' : '.') : '') . $entry->getName(); - $entry->member = preg_replace('/' . $entry->getName() . '$/', '', $member); - - // add properties to static and plugin sub-entries - foreach (array('static', 'plugin') as $kind) { - foreach ($entry->{$kind} as $subentry) { - $subentry->hash = $this->getHash($subentry); - $subentry->href = $this->getLineUrl($subentry); - $subentry->member = $member; - $subentry->separator = $this->getSeparator($subentry); - } - } - } - - /*------------------------------------------------------------------------*/ - - // custom sort for root level entries - // TODO: see how well it handles deeper namespace traversal - function sortCompare($a, $b) { - $score = array( 'a' => 0, 'b' => 0); - foreach (array( 'a' => $a, 'b' => $b) as $key => $value) { - // capitalized properties are last - if (preg_match('/[#.][A-Z]/', $value)) { - $score[$key] = 0; - } - // lowercase prototype properties are next to last - else if (preg_match('/#[a-z]/', $value)) { - $score[$key] = 1; - } - // lowercase static properties next to first - else if (preg_match('/\.[a-z]/', $value)) { - $score[$key] = 2; - } - // root properties are first - else if (preg_match('/^[^#.]+$/', $value)) { - $score[$key] = 3; - } - } - $score = $score['b'] - $score['a']; - return $score ? $score : strcasecmp($a, $b); - } - - uksort($api, 'sortCompare'); - - // sort static and plugin sub-entries - foreach ($api as $entry) { - foreach (array('static', 'plugin') as $kind) { - $sortBy = array( 'a' => array(), 'b' => array(), 'c' => array() ); - foreach ($entry->{$kind} as $subentry) { - $name = $subentry->getName(); - // functions w/o ALL-CAPs names are last - $sortBy['a'][] = $subentry->getType() == 'Function' && !preg_match('/^[A-Z_]+$/', $name); - // ALL-CAPs properties first - $sortBy['b'][] = preg_match('/^[A-Z_]+$/', $name); - // lowercase alphanumeric sort - $sortBy['c'][] = strtolower($name); - } - array_multisort($sortBy['a'], SORT_ASC, $sortBy['b'], SORT_DESC, $sortBy['c'], SORT_ASC, $entry->{$kind}); - } - } - - /*------------------------------------------------------------------------*/ - - // add categories - foreach ($api as $entry) { - $categories[$entry->getCategory()][] = $entry; - foreach (array('static', 'plugin') as $kind) { - foreach ($entry->{$kind} as $subentry) { - $categories[$subentry->getCategory()][] = $subentry; - } - } - } - - // sort categories - ksort($categories); - - foreach(array('Methods', 'Properties') as $category) { - if (isset($categories[$category])) { - $entries = $categories[$category]; - unset($categories[$category]); - $categories[$category] = $entries; - } - } - - /*------------------------------------------------------------------------*/ - - // compile TOC - $result[] = $openTag; - - // compile TOC by categories - if ($byCategory) { - foreach ($categories as $category => $entries) { - if ($compiling) { - $result[] = $closeTag; - } else { - $compiling = true; - } - // assign TOC hash - if (count($result) == 2) { - $toc = $category; - } - // add category - array_push( - $result, - $openTag, '## ' . (count($result) == 2 ? '<a id="' . $toc . '"></a>' : '') . '`' . $category . '`' - ); - // add entries - foreach ($entries as $entry) { - $result[] = Generator::interpolate('* [`#{member}#{separator}#{name}`](##{hash})', $entry); - } - } - } - // compile TOC by namespace - else { - foreach ($api as $entry) { - if ($compiling) { - $result[] = $closeTag; - } else { - $compiling = true; - } - $member = $entry->member . $entry->getName(); - - // assign TOC hash - if (count($result) == 2) { - $toc = $member; - } - // add root entry - array_push( - $result, - $openTag, '## ' . (count($result) == 2 ? '<a id="' . $toc . '"></a>' : '') . '`' . $member . '`', - Generator::interpolate('* [`' . $member . '`](##{hash})', $entry) - ); - - // add static and plugin sub-entries - foreach (array('static', 'plugin') as $kind) { - if ($kind == 'plugin' && count($entry->plugin)) { - array_push( - $result, - $closeTag, - $openTag, - '## `' . $member . ($entry->isCtor() ? '.prototype`' : '`') - ); - } - foreach ($entry->{$kind} as $subentry) { - $subentry->member = $member; - $result[] = Generator::interpolate('* [`#{member}#{separator}#{name}`](##{hash})', $subentry); - } - } - } - } - - array_push($result, $closeTag, $closeTag); - - /*------------------------------------------------------------------------*/ - - // compile content - $compiling = false; - $result[] = $openTag; - - if ($byCategory) { - foreach ($categories as $category => $entries) { - if ($compiling) { - $result[] = $closeTag; - } else { - $compiling = true; - } - if ($category != 'Methods' && $category != 'Properties') { - $category = '“' . $category . '” Methods'; - } - array_push($result, $openTag, '## `' . $category . '`'); - $this->addEntries($result, $entries); - } - } - else { - foreach ($api as $entry) { - // skip aliases - if ($entry->isAlias()) { - continue; - } - if ($compiling) { - $result[] = $closeTag; - } else { - $compiling = true; - } - // add root entry name - $member = $entry->member . $entry->getName(); - array_push($result, $openTag, '## `' . $member . '`'); - - foreach (array($entry, 'static', 'plugin') as $kind) { - $subentries = is_string($kind) ? $entry->{$kind} : array($kind); - - // add sub-entry name - if ($kind != 'static' && $entry->getType() != 'Object' && - count($subentries) && $subentries[0] != $kind) { - if ($kind == 'plugin') { - $result[] = $closeTag; - } - array_push( - $result, - $openTag, - '## `' . $member . ($kind == 'plugin' ? '.prototype`' : '`') - ); - } - $this->addEntries($result, $subentries); - } - } - } - - // close tags add TOC link reference - array_push($result, $closeTag, $closeTag, '', ' [1]: #' . $toc . ' "Jump back to the TOC."'); - - // cleanup whitespace - return trim(preg_replace('/[\t ]+\n/', "\n", join($result, "\n"))); - } -} -?> diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/package.json deleted file mode 100644 index 167c7c6a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "author": { - "name": "Jeremy Stashewsky", - "email": "jeremy@goinstant.com", - "url": "https://github.com/stash" - }, - "name": "tough-cookie", - "description": "RFC6265 Cookies and Cookie Jar for node.js", - "keywords": [ - "HTTP", - "cookie", - "cookies", - "set-cookie", - "cookiejar", - "jar", - "RFC6265", - "RFC2965" - ], - "version": "0.9.15", - "homepage": "https://github.com/goinstant/node-cookie", - "repository": { - "type": "git", - "url": "git://github.com/goinstant/node-cookie.git" - }, - "bugs": { - "url": "https://github.com/goinstant/node-cookie/issues" - }, - "main": "./lib/cookie", - "scripts": { - "test": "vows test.js" - }, - "engines": { - "node": ">=0.4.12" - }, - "dependencies": { - "punycode": ">=0.2.0" - }, - "devDependencies": { - "vows": ">=0.6.0", - "async": ">=0.1.12" - }, - "readme": "[RFC6265](http://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js\n\n![Tough Cookie](http://www.goinstant.com.s3.amazonaws.com/tough-cookie.jpg)\n\n# Synopsis\n\n``` javascript\nvar cookies = require('tough-cookie'); // note: not 'cookie', 'cookies' or 'node-cookie'\nvar Cookie = cookies.Cookie;\nvar cookie = Cookie.parse(header);\ncookie.value = 'somethingdifferent';\nheader = cookie.toString();\n\nvar cookiejar = new cookies.CookieJar();\ncookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb);\n// ...\ncookiejar.getCookies('http://example.com/otherpath',function(err,cookies) {\n res.headers['cookie'] = cookies.join('; ');\n});\n```\n\n# Installation\n\nIt's _so_ easy!\n\n`npm install tough-cookie`\n\nRequires `punycode`, which should get installed automatically for you. Note that node.js v0.6.2+ bundles punycode by default.\n\nWhy the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken.\n\n# API\n\ncookies\n=======\n\nFunctions on the module you get from `require('tough-cookie')`. All can be used as pure functions and don't need to be \"bound\".\n\nparseDate(string[,strict])\n-----------------\n\nParse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`. If strict is set to true then leading/trailing non-seperator characters around the time part will cause the parsing to fail (e.g. \"Thu, 01 Jan 1970 00:00:010 GMT\" has an extra trailing zero but Chrome, an assumedly RFC-compliant browser, treats this as valid).\n\nformatDate(date)\n----------------\n\nFormat a Date into a RFC1123 string (the RFC6265-recommended format).\n\ncanonicalDomain(str)\n--------------------\n\nTransforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects).\n\ndomainMatch(str,domStr[,canonicalize=true])\n-------------------------------------------\n\nAnswers \"does this real domain match the domain in a cookie?\". The `str` is the \"current\" domain-name and the `domStr` is the \"cookie\" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a \"suffix match\".\n\nThe `canonicalize` parameter will run the other two paramters through `canonicalDomain` or not.\n\ndefaultPath(path)\n-----------------\n\nGiven a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the \"directory\" of a \"file\" in the path, but is specified by Section 5.1.4 of the RFC.\n\nThe `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node's `uri.parse()` output.\n\npathMatch(reqPath,cookiePath)\n-----------------------------\n\nAnswers \"does the request-path path-match a given cookie-path?\" as per RFC6265 Section 5.1.4. Returns a boolean.\n\nThis is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`.\n\nparse(header[,strict=false])\n----------------------------\n\nalias for `Cookie.parse(header[,strict])`\n\nfromJSON(string)\n----------------\n\nalias for `Cookie.fromJSON(string)`\n\ngetPublicSuffix(hostname)\n-------------------------\n\nReturns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it.\n\nFor example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`.\n\nFor further information, see http://publicsuffix.org/. This module derives its list from that site.\n\ncookieCompare(a,b)\n------------------\n\nFor use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). Longest `.path`s go first, then sorted oldest to youngest.\n\n``` javascript\nvar cookies = [ /* unsorted array of Cookie objects */ ];\ncookies = cookies.sort(cookieCompare);\n```\n\npermuteDomain(domain)\n---------------------\n\nGenerates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores.\n\n\npermutePath(path)\n-----------------\n\nGenerates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores.\n\nCookie\n======\n\nCookie.parse(header[,strict=false])\n-----------------------------------\n\nParses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can't be parsed. If in strict mode, returns `undefined` if the cookie doesn't follow the guidelines in section 4 of RFC6265. Generally speaking, strict mode can be used to validate your own generated Set-Cookie headers, but acting as a client you want to be lenient and leave strict mode off.\n\nHere's how to process the Set-Cookie header(s) on a node HTTP/HTTPS response:\n\n``` javascript\nif (res.headers['set-cookie'] instanceof Array)\n cookies = res.headers['set-cookie'].map(Cookie.parse);\nelse\n cookies = [Cookie.parse(res.headers['set-cookie'])];\n```\n\nCookie.fromJSON(string)\n-----------------------\n\nConvert a JSON string to a `Cookie` object. Does a `JSON.parse()` and converts the `.created`, `.lastAccessed` and `.expires` properties into `Date` objects.\n\nProperties\n==========\n\n * _key_ - string - the name or key of the cookie (default \"\")\n * _value_ - string - the value of the cookie (default \"\")\n * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `\"Infinity\"`). See `setExpires()`\n * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `\"Infinity\"` and `\"-Infinity\"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()`\n * _domain_ - string - the `Domain=` attribute of the cookie\n * _path_ - string - the `Path=` of the cookie\n * _secure_ - boolean - the `Secure` cookie flag\n * _httpOnly_ - boolean - the `HttpOnly` cookie flag\n * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside)\n \nAfter a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes:\n\n * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied)\n * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one.\n * _created_ - `Date` - when this cookie was added to the jar\n * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute.\n\nConstruction([{options}])\n------------\n\nReceives an options object that can contain any Cookie properties, uses the default for unspecified properties.\n\n.toString()\n-----------\n\nencode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`.\n\n.cookieString()\n---------------\n\nencode to a Cookie header value (i.e. the `.key` and `.value` properties joined with '=').\n\n.setExpires(String)\n-------------------\n\nsets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can't parse this date string), `.expires` is set to `\"Infinity\"` (a string) is set.\n\n.setMaxAge(number)\n-------------------\n\nsets the maxAge in seconds. Coerces `-Infinity` to `\"-Infinity\"` and `Infinity` to `\"Infinity\"` so it JSON serializes correctly.\n\n.expiryTime([now=Date.now()])\n-----------------------------\n\n.expiryDate([now=Date.now()])\n-----------------------------\n\nexpiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds.\n\nMax-Age takes precedence over Expires (as per the RFC). The `.created` attribute -- or, by default, the `now` paramter -- is used to offset the `.maxAge` attribute.\n\nIf Expires (`.expires`) is set, that's returned.\n\nOtherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for \"Tue, 19 Jan 2038 03:14:07 GMT\" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents).\n\n.TTL([now=Date.now()])\n---------\n\ncompute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply.\n\nThe \"number\" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned.\n\n.canonicalizedDoman()\n---------------------\n\n.cdomain()\n----------\n\nreturn the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters.\n\n.validate()\n-----------\n\nStatus: *IN PROGRESS*. Works for a few things, but is by no means comprehensive.\n\nvalidates cookie attributes for semantic correctness. Useful for \"lint\" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct:\n\n``` javascript\nif (cookie.validate() === true) {\n // it's tasty\n} else {\n // yuck!\n}\n```\n\nCookieJar\n=========\n\nConstruction([store = new MemoryCookieStore()][, rejectPublicSuffixes])\n------------\n\nSimply use `new CookieJar()`. If you'd like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used.\n\n\nAttributes\n----------\n\n * _rejectPublicSuffixes_ - boolean - reject cookies with domains like \"com\" and \"co.uk\" (default: `true`)\n \nSince eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods.\n\n.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie))\n-------------------------------------------------------------------\n\nAttempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.created`, `.lastAccessed` and `.hostOnly` properties.\n\nThe `options` object can be omitted and can have the following properties:\n\n * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies.\n * _secure_ - boolean - autodetect from url - indicates if this is a \"Secure\" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`.\n * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies\n * _strict_ - boolean - default `false` - perform extra checks\n * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. CookieStore errors aren't ignored by this option.\n\nAs per the RFC, the `.hostOnly` property is set if there was no \"Domain=\" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual).\n\n.storeCookie(cookie, [{options},] cb(err,cookie))\n-------------------------------------------------\n\n__REMOVED__ removed in lieu of the CookieStore API below\n \n.getCookies(currentUrl, [{options},] cb(err,cookies))\n-----------------------------------------------------\n\nRetrieve the list of cookies that can be sent in a Cookie header for the current url.\n\nIf an error is encountered, that's passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given.\n\nThe `options` object can be omitted and can have the following properties:\n\n * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies.\n * _secure_ - boolean - autodetect from url - indicates if this is a \"Secure\" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`.\n * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies\n * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially).\n * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the CookieStore `fetchCookies` function (the default MemoryCookieStore supports it).\n\nThe `.lastAccessed` property of the returned cookies will have been updated.\n\n.getCookieString(...)\n---------------------\n\nAccepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`.\n\n.getSetCookieStrings(...)\n-------------------------\n\nAccepts the same options as `.getCookies()` but passes an array of strings suitable for Set-Cookie headers (rather than an array of `Cookie`s) to the callback. Simply maps the cookie array via `.toString()`.\n\n# CookieStore API\n\nThe storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores.\n\nAll `domain` parameters will have been normalized before calling.\n\nThe Cookie store must have all of the following methods.\n\nstore.findCookie(domain, path, key, cb(err,cookie))\n---------------------------------------------------\n\nRetrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned.\n\nCallback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error).\n\nstore.findCookies(domain, path, cb(err,cookies))\n------------------------------------------------\n\nLocates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above.\n\nIf no cookies are found, the callback MUST be passed an empty array.\n\nThe resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it's OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done.\n\nAs of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only).\n\nstore.putCookie(cookie, cb(err))\n--------------------------------\n\nAdds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it's possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur.\n\nThe `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties.\n\nPass an error if the cookie cannot be stored.\n\nstore.updateCookie(oldCookie, newCookie, cb(err))\n-------------------------------------------------\n\nUpdate an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store.\n\nThe `.lastAccessed` property will always be different between the two objects and `.created` will always be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are sorted (or selected for deletion).\n\nStores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn't define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object.\n\nThe `newCookie` and `oldCookie` objects MUST NOT be modified.\n\nPass an error if the newCookie cannot be stored.\n\nstore.removeCookie(domain, path, key, cb(err))\n----------------------------------------------\n\nRemove a cookie from the store (see notes on `findCookie` about the uniqueness constraint).\n\nThe implementation MUST NOT pass an error if the cookie doesn't exist; only pass an error due to the failure to remove an existing cookie.\n\nstore.removeCookies(domain, path, cb(err))\n------------------------------------------\n\nRemoves matching cookies from the store. The `path` paramter is optional, and if missing means all paths in a domain should be removed.\n\nPass an error ONLY if removing any existing cookies failed.\n\n# TODO\n\n * _full_ RFC5890/RFC5891 canonicalization for domains in `cdomain()`\n * the optional `punycode` requirement implements RFC3492, but RFC6265 requires RFC5891\n * better tests for `validate()`?\n\n# Copyright and License\n\n(tl;dr: MIT with some MPL/1.1)\n\nCopyright GoInstant, Inc. and other contributors. All rights reserved.\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n\nPortions may be licensed under different licenses (in particular public-suffix.txt is MPL/1.1); please read the LICENSE file for full details.\n", - "readmeFilename": "README.md", - "_id": "tough-cookie@0.9.15", - "dist": { - "shasum": "0fbda7fb5b5bca17e4f97909a0818dc8c2c12588" - }, - "_from": "tough-cookie@~0.9.15", - "_resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.9.15.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/public-suffix.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/public-suffix.txt deleted file mode 100644 index 2c201312..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/public-suffix.txt +++ /dev/null @@ -1,5229 +0,0 @@ -// ***** BEGIN LICENSE BLOCK ***** -// Version: MPL 1.1/GPL 2.0/LGPL 2.1 -// -// The contents of this file are subject to the Mozilla Public License Version -// 1.1 (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// http://www.mozilla.org/MPL/ -// -// Software distributed under the License is distributed on an "AS IS" basis, -// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -// for the specific language governing rights and limitations under the -// License. -// -// The Original Code is the Public Suffix List. -// -// The Initial Developer of the Original Code is -// Jo Hermans <jo.hermans@gmail.com>. -// Portions created by the Initial Developer are Copyright (C) 2007 -// the Initial Developer. All Rights Reserved. -// -// Contributor(s): -// Ruben Arakelyan <ruben@rubenarakelyan.com> -// Gervase Markham <gerv@gerv.net> -// Pamela Greene <pamg.bugs@gmail.com> -// David Triendl <david@triendl.name> -// Jothan Frakes <jothan@gmail.com> -// The kind representatives of many TLD registries -// -// Alternatively, the contents of this file may be used under the terms of -// either the GNU General Public License Version 2 or later (the "GPL"), or -// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -// in which case the provisions of the GPL or the LGPL are applicable instead -// of those above. If you wish to allow use of your version of this file only -// under the terms of either the GPL or the LGPL, and not to allow others to -// use your version of this file under the terms of the MPL, indicate your -// decision by deleting the provisions above and replace them with the notice -// and other provisions required by the GPL or the LGPL. If you do not delete -// the provisions above, a recipient may use your version of this file under -// the terms of any one of the MPL, the GPL or the LGPL. -// -// ***** END LICENSE BLOCK ***** - -// ===BEGIN ICANN DOMAINS=== - -// ac : http://en.wikipedia.org/wiki/.ac -ac -com.ac -edu.ac -gov.ac -net.ac -mil.ac -org.ac - -// ad : http://en.wikipedia.org/wiki/.ad -ad -nom.ad - -// ae : http://en.wikipedia.org/wiki/.ae -// see also: "Domain Name Eligibility Policy" at http://www.aeda.ae/eng/aepolicy.php -ae -co.ae -net.ae -org.ae -sch.ae -ac.ae -gov.ae -mil.ae - -// aero : see http://www.information.aero/index.php?id=66 -aero -accident-investigation.aero -accident-prevention.aero -aerobatic.aero -aeroclub.aero -aerodrome.aero -agents.aero -aircraft.aero -airline.aero -airport.aero -air-surveillance.aero -airtraffic.aero -air-traffic-control.aero -ambulance.aero -amusement.aero -association.aero -author.aero -ballooning.aero -broker.aero -caa.aero -cargo.aero -catering.aero -certification.aero -championship.aero -charter.aero -civilaviation.aero -club.aero -conference.aero -consultant.aero -consulting.aero -control.aero -council.aero -crew.aero -design.aero -dgca.aero -educator.aero -emergency.aero -engine.aero -engineer.aero -entertainment.aero -equipment.aero -exchange.aero -express.aero -federation.aero -flight.aero -freight.aero -fuel.aero -gliding.aero -government.aero -groundhandling.aero -group.aero -hanggliding.aero -homebuilt.aero -insurance.aero -journal.aero -journalist.aero -leasing.aero -logistics.aero -magazine.aero -maintenance.aero -marketplace.aero -media.aero -microlight.aero -modelling.aero -navigation.aero -parachuting.aero -paragliding.aero -passenger-association.aero -pilot.aero -press.aero -production.aero -recreation.aero -repbody.aero -res.aero -research.aero -rotorcraft.aero -safety.aero -scientist.aero -services.aero -show.aero -skydiving.aero -software.aero -student.aero -taxi.aero -trader.aero -trading.aero -trainer.aero -union.aero -workinggroup.aero -works.aero - -// af : http://www.nic.af/help.jsp -af -gov.af -com.af -org.af -net.af -edu.af - -// ag : http://www.nic.ag/prices.htm -ag -com.ag -org.ag -net.ag -co.ag -nom.ag - -// ai : http://nic.com.ai/ -ai -off.ai -com.ai -net.ai -org.ai - -// al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31 -al -com.al -edu.al -gov.al -mil.al -net.al -org.al - -// am : http://en.wikipedia.org/wiki/.am -am - -// an : http://www.una.an/an_domreg/default.asp -an -com.an -net.an -org.an -edu.an - -// ao : http://en.wikipedia.org/wiki/.ao -// http://www.dns.ao/REGISTR.DOC -ao -ed.ao -gv.ao -og.ao -co.ao -pb.ao -it.ao - -// aq : http://en.wikipedia.org/wiki/.aq -aq - -// ar : http://en.wikipedia.org/wiki/.ar -*.ar -!congresodelalengua3.ar -!educ.ar -!gobiernoelectronico.ar -!mecon.ar -!nacion.ar -!nic.ar -!promocion.ar -!retina.ar -!uba.ar - -// arpa : http://en.wikipedia.org/wiki/.arpa -// Confirmed by registry <iana-questions@icann.org> 2008-06-18 -e164.arpa -in-addr.arpa -ip6.arpa -iris.arpa -uri.arpa -urn.arpa - -// as : http://en.wikipedia.org/wiki/.as -as -gov.as - -// asia : http://en.wikipedia.org/wiki/.asia -asia - -// at : http://en.wikipedia.org/wiki/.at -// Confirmed by registry <it@nic.at> 2008-06-17 -at -ac.at -co.at -gv.at -or.at - -// au : http://en.wikipedia.org/wiki/.au -// http://www.auda.org.au/ -// 2LDs -com.au -net.au -org.au -edu.au -gov.au -csiro.au -asn.au -id.au -// Historic 2LDs (closed to new registration, but sites still exist) -info.au -conf.au -oz.au -// CGDNs - http://www.cgdn.org.au/ -act.au -nsw.au -nt.au -qld.au -sa.au -tas.au -vic.au -wa.au -// 3LDs -act.edu.au -nsw.edu.au -nt.edu.au -qld.edu.au -sa.edu.au -tas.edu.au -vic.edu.au -wa.edu.au -act.gov.au -// Removed at request of Shae.Donelan@services.nsw.gov.au, 2010-03-04 -// nsw.gov.au -nt.gov.au -qld.gov.au -sa.gov.au -tas.gov.au -vic.gov.au -wa.gov.au - -// aw : http://en.wikipedia.org/wiki/.aw -aw -com.aw - -// ax : http://en.wikipedia.org/wiki/.ax -ax - -// az : http://en.wikipedia.org/wiki/.az -az -com.az -net.az -int.az -gov.az -org.az -edu.az -info.az -pp.az -mil.az -name.az -pro.az -biz.az - -// ba : http://en.wikipedia.org/wiki/.ba -ba -org.ba -net.ba -edu.ba -gov.ba -mil.ba -unsa.ba -unbi.ba -co.ba -com.ba -rs.ba - -// bb : http://en.wikipedia.org/wiki/.bb -bb -biz.bb -com.bb -edu.bb -gov.bb -info.bb -net.bb -org.bb -store.bb - -// bd : http://en.wikipedia.org/wiki/.bd -*.bd - -// be : http://en.wikipedia.org/wiki/.be -// Confirmed by registry <tech@dns.be> 2008-06-08 -be -ac.be - -// bf : http://en.wikipedia.org/wiki/.bf -bf -gov.bf - -// bg : http://en.wikipedia.org/wiki/.bg -// https://www.register.bg/user/static/rules/en/index.html -bg -a.bg -b.bg -c.bg -d.bg -e.bg -f.bg -g.bg -h.bg -i.bg -j.bg -k.bg -l.bg -m.bg -n.bg -o.bg -p.bg -q.bg -r.bg -s.bg -t.bg -u.bg -v.bg -w.bg -x.bg -y.bg -z.bg -0.bg -1.bg -2.bg -3.bg -4.bg -5.bg -6.bg -7.bg -8.bg -9.bg - -// bh : http://en.wikipedia.org/wiki/.bh -bh -com.bh -edu.bh -net.bh -org.bh -gov.bh - -// bi : http://en.wikipedia.org/wiki/.bi -// http://whois.nic.bi/ -bi -co.bi -com.bi -edu.bi -or.bi -org.bi - -// biz : http://en.wikipedia.org/wiki/.biz -biz - -// bj : http://en.wikipedia.org/wiki/.bj -bj -asso.bj -barreau.bj -gouv.bj - -// bm : http://www.bermudanic.bm/dnr-text.txt -bm -com.bm -edu.bm -gov.bm -net.bm -org.bm - -// bn : http://en.wikipedia.org/wiki/.bn -*.bn - -// bo : http://www.nic.bo/ -bo -com.bo -edu.bo -gov.bo -gob.bo -int.bo -org.bo -net.bo -mil.bo -tv.bo - -// br : http://registro.br/dominio/dpn.html -// Updated by registry <fneves@registro.br> 2011-03-01 -br -adm.br -adv.br -agr.br -am.br -arq.br -art.br -ato.br -b.br -bio.br -blog.br -bmd.br -can.br -cim.br -cng.br -cnt.br -com.br -coop.br -ecn.br -edu.br -emp.br -eng.br -esp.br -etc.br -eti.br -far.br -flog.br -fm.br -fnd.br -fot.br -fst.br -g12.br -ggf.br -gov.br -imb.br -ind.br -inf.br -jor.br -jus.br -lel.br -mat.br -med.br -mil.br -mus.br -net.br -nom.br -not.br -ntr.br -odo.br -org.br -ppg.br -pro.br -psc.br -psi.br -qsl.br -radio.br -rec.br -slg.br -srv.br -taxi.br -teo.br -tmp.br -trd.br -tur.br -tv.br -vet.br -vlog.br -wiki.br -zlg.br - -// bs : http://www.nic.bs/rules.html -bs -com.bs -net.bs -org.bs -edu.bs -gov.bs - -// bt : http://en.wikipedia.org/wiki/.bt -bt -com.bt -edu.bt -gov.bt -net.bt -org.bt - -// bv : No registrations at this time. -// Submitted by registry <jarle@uninett.no> 2006-06-16 - -// bw : http://en.wikipedia.org/wiki/.bw -// http://www.gobin.info/domainname/bw.doc -// list of other 2nd level tlds ? -bw -co.bw -org.bw - -// by : http://en.wikipedia.org/wiki/.by -// http://tld.by/rules_2006_en.html -// list of other 2nd level tlds ? -by -gov.by -mil.by -// Official information does not indicate that com.by is a reserved -// second-level domain, but it's being used as one (see www.google.com.by and -// www.yahoo.com.by, for example), so we list it here for safety's sake. -com.by - -// http://hoster.by/ -of.by - -// bz : http://en.wikipedia.org/wiki/.bz -// http://www.belizenic.bz/ -bz -com.bz -net.bz -org.bz -edu.bz -gov.bz - -// ca : http://en.wikipedia.org/wiki/.ca -ca -// ca geographical names -ab.ca -bc.ca -mb.ca -nb.ca -nf.ca -nl.ca -ns.ca -nt.ca -nu.ca -on.ca -pe.ca -qc.ca -sk.ca -yk.ca -// gc.ca: http://en.wikipedia.org/wiki/.gc.ca -// see also: http://registry.gc.ca/en/SubdomainFAQ -gc.ca - -// cat : http://en.wikipedia.org/wiki/.cat -cat - -// cc : http://en.wikipedia.org/wiki/.cc -cc - -// cd : http://en.wikipedia.org/wiki/.cd -// see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1 -cd -gov.cd - -// cf : http://en.wikipedia.org/wiki/.cf -cf - -// cg : http://en.wikipedia.org/wiki/.cg -cg - -// ch : http://en.wikipedia.org/wiki/.ch -ch - -// ci : http://en.wikipedia.org/wiki/.ci -// http://www.nic.ci/index.php?page=charte -ci -org.ci -or.ci -com.ci -co.ci -edu.ci -ed.ci -ac.ci -net.ci -go.ci -asso.ci -aéroport.ci -int.ci -presse.ci -md.ci -gouv.ci - -// ck : http://en.wikipedia.org/wiki/.ck -*.ck -!www.ck - -// cl : http://en.wikipedia.org/wiki/.cl -cl -gov.cl -gob.cl -co.cl -mil.cl - -// cm : http://en.wikipedia.org/wiki/.cm -cm -gov.cm - -// cn : http://en.wikipedia.org/wiki/.cn -// Submitted by registry <tanyaling@cnnic.cn> 2008-06-11 -cn -ac.cn -com.cn -edu.cn -gov.cn -net.cn -org.cn -mil.cn -公司.cn -网络.cn -網絡.cn -// cn geographic names -ah.cn -bj.cn -cq.cn -fj.cn -gd.cn -gs.cn -gz.cn -gx.cn -ha.cn -hb.cn -he.cn -hi.cn -hl.cn -hn.cn -jl.cn -js.cn -jx.cn -ln.cn -nm.cn -nx.cn -qh.cn -sc.cn -sd.cn -sh.cn -sn.cn -sx.cn -tj.cn -xj.cn -xz.cn -yn.cn -zj.cn -hk.cn -mo.cn -tw.cn - -// co : http://en.wikipedia.org/wiki/.co -// Submitted by registry <tecnico@uniandes.edu.co> 2008-06-11 -co -arts.co -com.co -edu.co -firm.co -gov.co -info.co -int.co -mil.co -net.co -nom.co -org.co -rec.co -web.co - -// com : http://en.wikipedia.org/wiki/.com -com - -// coop : http://en.wikipedia.org/wiki/.coop -coop - -// cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do -cr -ac.cr -co.cr -ed.cr -fi.cr -go.cr -or.cr -sa.cr - -// cu : http://en.wikipedia.org/wiki/.cu -cu -com.cu -edu.cu -org.cu -net.cu -gov.cu -inf.cu - -// cv : http://en.wikipedia.org/wiki/.cv -cv - -// cx : http://en.wikipedia.org/wiki/.cx -// list of other 2nd level tlds ? -cx -gov.cx - -// cy : http://en.wikipedia.org/wiki/.cy -*.cy - -// cz : http://en.wikipedia.org/wiki/.cz -cz - -// de : http://en.wikipedia.org/wiki/.de -// Confirmed by registry <ops@denic.de> (with technical -// reservations) 2008-07-01 -de - -// dj : http://en.wikipedia.org/wiki/.dj -dj - -// dk : http://en.wikipedia.org/wiki/.dk -// Confirmed by registry <robert@dk-hostmaster.dk> 2008-06-17 -dk - -// dm : http://en.wikipedia.org/wiki/.dm -dm -com.dm -net.dm -org.dm -edu.dm -gov.dm - -// do : http://en.wikipedia.org/wiki/.do -do -art.do -com.do -edu.do -gob.do -gov.do -mil.do -net.do -org.do -sld.do -web.do - -// dz : http://en.wikipedia.org/wiki/.dz -dz -com.dz -org.dz -net.dz -gov.dz -edu.dz -asso.dz -pol.dz -art.dz - -// ec : http://www.nic.ec/reg/paso1.asp -// Submitted by registry <vabboud@nic.ec> 2008-07-04 -ec -com.ec -info.ec -net.ec -fin.ec -k12.ec -med.ec -pro.ec -org.ec -edu.ec -gov.ec -gob.ec -mil.ec - -// edu : http://en.wikipedia.org/wiki/.edu -edu - -// ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B -ee -edu.ee -gov.ee -riik.ee -lib.ee -med.ee -com.ee -pri.ee -aip.ee -org.ee -fie.ee - -// eg : http://en.wikipedia.org/wiki/.eg -eg -com.eg -edu.eg -eun.eg -gov.eg -mil.eg -name.eg -net.eg -org.eg -sci.eg - -// er : http://en.wikipedia.org/wiki/.er -*.er - -// es : https://www.nic.es/site_ingles/ingles/dominios/index.html -es -com.es -nom.es -org.es -gob.es -edu.es - -// et : http://en.wikipedia.org/wiki/.et -*.et - -// eu : http://en.wikipedia.org/wiki/.eu -eu - -// fi : http://en.wikipedia.org/wiki/.fi -fi -// aland.fi : http://en.wikipedia.org/wiki/.ax -// This domain is being phased out in favor of .ax. As there are still many -// domains under aland.fi, we still keep it on the list until aland.fi is -// completely removed. -// TODO: Check for updates (expected to be phased out around Q1/2009) -aland.fi - -// fj : http://en.wikipedia.org/wiki/.fj -*.fj - -// fk : http://en.wikipedia.org/wiki/.fk -*.fk - -// fm : http://en.wikipedia.org/wiki/.fm -fm - -// fo : http://en.wikipedia.org/wiki/.fo -fo - -// fr : http://www.afnic.fr/ -// domaines descriptifs : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-descriptifs -fr -com.fr -asso.fr -nom.fr -prd.fr -presse.fr -tm.fr -// domaines sectoriels : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-sectoriels -aeroport.fr -assedic.fr -avocat.fr -avoues.fr -cci.fr -chambagri.fr -chirurgiens-dentistes.fr -experts-comptables.fr -geometre-expert.fr -gouv.fr -greta.fr -huissier-justice.fr -medecin.fr -notaires.fr -pharmacien.fr -port.fr -veterinaire.fr - -// ga : http://en.wikipedia.org/wiki/.ga -ga - -// gb : This registry is effectively dormant -// Submitted by registry <Damien.Shaw@ja.net> 2008-06-12 - -// gd : http://en.wikipedia.org/wiki/.gd -gd - -// ge : http://www.nic.net.ge/policy_en.pdf -ge -com.ge -edu.ge -gov.ge -org.ge -mil.ge -net.ge -pvt.ge - -// gf : http://en.wikipedia.org/wiki/.gf -gf - -// gg : http://www.channelisles.net/applic/avextn.shtml -gg -co.gg -org.gg -net.gg -sch.gg -gov.gg - -// gh : http://en.wikipedia.org/wiki/.gh -// see also: http://www.nic.gh/reg_now.php -// Although domains directly at second level are not possible at the moment, -// they have been possible for some time and may come back. -gh -com.gh -edu.gh -gov.gh -org.gh -mil.gh - -// gi : http://www.nic.gi/rules.html -gi -com.gi -ltd.gi -gov.gi -mod.gi -edu.gi -org.gi - -// gl : http://en.wikipedia.org/wiki/.gl -// http://nic.gl -gl - -// gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm -gm - -// gn : http://psg.com/dns/gn/gn.txt -// Submitted by registry <randy@psg.com> 2008-06-17 -ac.gn -com.gn -edu.gn -gov.gn -org.gn -net.gn - -// gov : http://en.wikipedia.org/wiki/.gov -gov - -// gp : http://www.nic.gp/index.php?lang=en -gp -com.gp -net.gp -mobi.gp -edu.gp -org.gp -asso.gp - -// gq : http://en.wikipedia.org/wiki/.gq -gq - -// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html -// Submitted by registry <segred@ics.forth.gr> 2008-06-09 -gr -com.gr -edu.gr -net.gr -org.gr -gov.gr - -// gs : http://en.wikipedia.org/wiki/.gs -gs - -// gt : http://www.gt/politicas.html -*.gt -!www.gt - -// gu : http://gadao.gov.gu/registration.txt -*.gu - -// gw : http://en.wikipedia.org/wiki/.gw -gw - -// gy : http://en.wikipedia.org/wiki/.gy -// http://registry.gy/ -gy -co.gy -com.gy -net.gy - -// hk : https://www.hkdnr.hk -// Submitted by registry <hk.tech@hkirc.hk> 2008-06-11 -hk -com.hk -edu.hk -gov.hk -idv.hk -net.hk -org.hk -公司.hk -教育.hk -敎育.hk -政府.hk -個人.hk -个人.hk -箇人.hk -網络.hk -网络.hk -组織.hk -網絡.hk -网絡.hk -组织.hk -組織.hk -組织.hk - -// hm : http://en.wikipedia.org/wiki/.hm -hm - -// hn : http://www.nic.hn/politicas/ps02,,05.html -hn -com.hn -edu.hn -org.hn -net.hn -mil.hn -gob.hn - -// hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf -hr -iz.hr -from.hr -name.hr -com.hr - -// ht : http://www.nic.ht/info/charte.cfm -ht -com.ht -shop.ht -firm.ht -info.ht -adult.ht -net.ht -pro.ht -org.ht -med.ht -art.ht -coop.ht -pol.ht -asso.ht -edu.ht -rel.ht -gouv.ht -perso.ht - -// hu : http://www.domain.hu/domain/English/sld.html -// Confirmed by registry <pasztor@iszt.hu> 2008-06-12 -hu -co.hu -info.hu -org.hu -priv.hu -sport.hu -tm.hu -2000.hu -agrar.hu -bolt.hu -casino.hu -city.hu -erotica.hu -erotika.hu -film.hu -forum.hu -games.hu -hotel.hu -ingatlan.hu -jogasz.hu -konyvelo.hu -lakas.hu -media.hu -news.hu -reklam.hu -sex.hu -shop.hu -suli.hu -szex.hu -tozsde.hu -utazas.hu -video.hu - -// id : http://en.wikipedia.org/wiki/.id -// see also: https://register.pandi.or.id/ -id -ac.id -co.id -go.id -mil.id -net.id -or.id -sch.id -web.id - -// ie : http://en.wikipedia.org/wiki/.ie -ie -gov.ie - -// il : http://en.wikipedia.org/wiki/.il -*.il - -// im : https://www.nic.im/pdfs/imfaqs.pdf -im -co.im -ltd.co.im -plc.co.im -net.im -gov.im -org.im -nic.im -ac.im - -// in : http://en.wikipedia.org/wiki/.in -// see also: http://www.inregistry.in/policies/ -// Please note, that nic.in is not an offical eTLD, but used by most -// government institutions. -in -co.in -firm.in -net.in -org.in -gen.in -ind.in -nic.in -ac.in -edu.in -res.in -gov.in -mil.in - -// info : http://en.wikipedia.org/wiki/.info -info - -// int : http://en.wikipedia.org/wiki/.int -// Confirmed by registry <iana-questions@icann.org> 2008-06-18 -int -eu.int - -// io : http://www.nic.io/rules.html -// list of other 2nd level tlds ? -io -com.io - -// iq : http://www.cmc.iq/english/iq/iqregister1.htm -iq -gov.iq -edu.iq -mil.iq -com.iq -org.iq -net.iq - -// ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules -// Also see http://www.nic.ir/Internationalized_Domain_Names -// Two <iran>.ir entries added at request of <tech-team@nic.ir>, 2010-04-16 -ir -ac.ir -co.ir -gov.ir -id.ir -net.ir -org.ir -sch.ir -// xn--mgba3a4f16a.ir (<iran>.ir, Persian YEH) -ایران.ir -// xn--mgba3a4fra.ir (<iran>.ir, Arabic YEH) -ايران.ir - -// is : http://www.isnic.is/domain/rules.php -// Confirmed by registry <marius@isgate.is> 2008-12-06 -is -net.is -com.is -edu.is -gov.is -org.is -int.is - -// it : http://en.wikipedia.org/wiki/.it -it -gov.it -edu.it -// list of reserved geo-names : -// http://www.nic.it/documenti/regolamenti-e-linee-guida/regolamento-assegnazione-versione-6.0.pdf -// (There is also a list of reserved geo-names corresponding to Italian -// municipalities : http://www.nic.it/documenti/appendice-c.pdf , but it is -// not included here.) -agrigento.it -ag.it -alessandria.it -al.it -ancona.it -an.it -aosta.it -aoste.it -ao.it -arezzo.it -ar.it -ascoli-piceno.it -ascolipiceno.it -ap.it -asti.it -at.it -avellino.it -av.it -bari.it -ba.it -andria-barletta-trani.it -andriabarlettatrani.it -trani-barletta-andria.it -tranibarlettaandria.it -barletta-trani-andria.it -barlettatraniandria.it -andria-trani-barletta.it -andriatranibarletta.it -trani-andria-barletta.it -traniandriabarletta.it -bt.it -belluno.it -bl.it -benevento.it -bn.it -bergamo.it -bg.it -biella.it -bi.it -bologna.it -bo.it -bolzano.it -bozen.it -balsan.it -alto-adige.it -altoadige.it -suedtirol.it -bz.it -brescia.it -bs.it -brindisi.it -br.it -cagliari.it -ca.it -caltanissetta.it -cl.it -campobasso.it -cb.it -carboniaiglesias.it -carbonia-iglesias.it -iglesias-carbonia.it -iglesiascarbonia.it -ci.it -caserta.it -ce.it -catania.it -ct.it -catanzaro.it -cz.it -chieti.it -ch.it -como.it -co.it -cosenza.it -cs.it -cremona.it -cr.it -crotone.it -kr.it -cuneo.it -cn.it -dell-ogliastra.it -dellogliastra.it -ogliastra.it -og.it -enna.it -en.it -ferrara.it -fe.it -fermo.it -fm.it -firenze.it -florence.it -fi.it -foggia.it -fg.it -forli-cesena.it -forlicesena.it -cesena-forli.it -cesenaforli.it -fc.it -frosinone.it -fr.it -genova.it -genoa.it -ge.it -gorizia.it -go.it -grosseto.it -gr.it -imperia.it -im.it -isernia.it -is.it -laquila.it -aquila.it -aq.it -la-spezia.it -laspezia.it -sp.it -latina.it -lt.it -lecce.it -le.it -lecco.it -lc.it -livorno.it -li.it -lodi.it -lo.it -lucca.it -lu.it -macerata.it -mc.it -mantova.it -mn.it -massa-carrara.it -massacarrara.it -carrara-massa.it -carraramassa.it -ms.it -matera.it -mt.it -medio-campidano.it -mediocampidano.it -campidano-medio.it -campidanomedio.it -vs.it -messina.it -me.it -milano.it -milan.it -mi.it -modena.it -mo.it -monza.it -monza-brianza.it -monzabrianza.it -monzaebrianza.it -monzaedellabrianza.it -monza-e-della-brianza.it -mb.it -napoli.it -naples.it -na.it -novara.it -no.it -nuoro.it -nu.it -oristano.it -or.it -padova.it -padua.it -pd.it -palermo.it -pa.it -parma.it -pr.it -pavia.it -pv.it -perugia.it -pg.it -pescara.it -pe.it -pesaro-urbino.it -pesarourbino.it -urbino-pesaro.it -urbinopesaro.it -pu.it -piacenza.it -pc.it -pisa.it -pi.it -pistoia.it -pt.it -pordenone.it -pn.it -potenza.it -pz.it -prato.it -po.it -ragusa.it -rg.it -ravenna.it -ra.it -reggio-calabria.it -reggiocalabria.it -rc.it -reggio-emilia.it -reggioemilia.it -re.it -rieti.it -ri.it -rimini.it -rn.it -roma.it -rome.it -rm.it -rovigo.it -ro.it -salerno.it -sa.it -sassari.it -ss.it -savona.it -sv.it -siena.it -si.it -siracusa.it -sr.it -sondrio.it -so.it -taranto.it -ta.it -tempio-olbia.it -tempioolbia.it -olbia-tempio.it -olbiatempio.it -ot.it -teramo.it -te.it -terni.it -tr.it -torino.it -turin.it -to.it -trapani.it -tp.it -trento.it -trentino.it -tn.it -treviso.it -tv.it -trieste.it -ts.it -udine.it -ud.it -varese.it -va.it -venezia.it -venice.it -ve.it -verbania.it -vb.it -vercelli.it -vc.it -verona.it -vr.it -vibo-valentia.it -vibovalentia.it -vv.it -vicenza.it -vi.it -viterbo.it -vt.it - -// je : http://www.channelisles.net/applic/avextn.shtml -je -co.je -org.je -net.je -sch.je -gov.je - -// jm : http://www.com.jm/register.html -*.jm - -// jo : http://www.dns.jo/Registration_policy.aspx -jo -com.jo -org.jo -net.jo -edu.jo -sch.jo -gov.jo -mil.jo -name.jo - -// jobs : http://en.wikipedia.org/wiki/.jobs -jobs - -// jp : http://en.wikipedia.org/wiki/.jp -// http://jprs.co.jp/en/jpdomain.html -// Submitted by registry <yone@jprs.co.jp> 2008-06-11 -// Updated by registry <yone@jprs.co.jp> 2008-12-04 -jp -// jp organizational type names -ac.jp -ad.jp -co.jp -ed.jp -go.jp -gr.jp -lg.jp -ne.jp -or.jp -// jp geographic type names -// http://jprs.jp/doc/rule/saisoku-1.html -*.aichi.jp -*.akita.jp -*.aomori.jp -*.chiba.jp -*.ehime.jp -*.fukui.jp -*.fukuoka.jp -*.fukushima.jp -*.gifu.jp -*.gunma.jp -*.hiroshima.jp -*.hokkaido.jp -*.hyogo.jp -*.ibaraki.jp -*.ishikawa.jp -*.iwate.jp -*.kagawa.jp -*.kagoshima.jp -*.kanagawa.jp -*.kawasaki.jp -*.kitakyushu.jp -*.kobe.jp -*.kochi.jp -*.kumamoto.jp -*.kyoto.jp -*.mie.jp -*.miyagi.jp -*.miyazaki.jp -*.nagano.jp -*.nagasaki.jp -*.nagoya.jp -*.nara.jp -*.niigata.jp -*.oita.jp -*.okayama.jp -*.okinawa.jp -*.osaka.jp -*.saga.jp -*.saitama.jp -*.sapporo.jp -*.sendai.jp -*.shiga.jp -*.shimane.jp -*.shizuoka.jp -*.tochigi.jp -*.tokushima.jp -*.tokyo.jp -*.tottori.jp -*.toyama.jp -*.wakayama.jp -*.yamagata.jp -*.yamaguchi.jp -*.yamanashi.jp -*.yokohama.jp -!metro.tokyo.jp -!pref.aichi.jp -!pref.akita.jp -!pref.aomori.jp -!pref.chiba.jp -!pref.ehime.jp -!pref.fukui.jp -!pref.fukuoka.jp -!pref.fukushima.jp -!pref.gifu.jp -!pref.gunma.jp -!pref.hiroshima.jp -!pref.hokkaido.jp -!pref.hyogo.jp -!pref.ibaraki.jp -!pref.ishikawa.jp -!pref.iwate.jp -!pref.kagawa.jp -!pref.kagoshima.jp -!pref.kanagawa.jp -!pref.kochi.jp -!pref.kumamoto.jp -!pref.kyoto.jp -!pref.mie.jp -!pref.miyagi.jp -!pref.miyazaki.jp -!pref.nagano.jp -!pref.nagasaki.jp -!pref.nara.jp -!pref.niigata.jp -!pref.oita.jp -!pref.okayama.jp -!pref.okinawa.jp -!pref.osaka.jp -!pref.saga.jp -!pref.saitama.jp -!pref.shiga.jp -!pref.shimane.jp -!pref.shizuoka.jp -!pref.tochigi.jp -!pref.tokushima.jp -!pref.tottori.jp -!pref.toyama.jp -!pref.wakayama.jp -!pref.yamagata.jp -!pref.yamaguchi.jp -!pref.yamanashi.jp -!city.chiba.jp -!city.fukuoka.jp -!city.hiroshima.jp -!city.kawasaki.jp -!city.kitakyushu.jp -!city.kobe.jp -!city.kyoto.jp -!city.nagoya.jp -!city.niigata.jp -!city.okayama.jp -!city.osaka.jp -!city.saitama.jp -!city.sapporo.jp -!city.sendai.jp -!city.shizuoka.jp -!city.yokohama.jp - -// ke : http://www.kenic.or.ke/index.php?option=com_content&task=view&id=117&Itemid=145 -*.ke - -// kg : http://www.domain.kg/dmn_n.html -kg -org.kg -net.kg -com.kg -edu.kg -gov.kg -mil.kg - -// kh : http://www.mptc.gov.kh/dns_registration.htm -*.kh - -// ki : http://www.ki/dns/index.html -ki -edu.ki -biz.ki -net.ki -org.ki -gov.ki -info.ki -com.ki - -// km : http://en.wikipedia.org/wiki/.km -// http://www.domaine.km/documents/charte.doc -km -org.km -nom.km -gov.km -prd.km -tm.km -edu.km -mil.km -ass.km -com.km -// These are only mentioned as proposed suggestions at domaine.km, but -// http://en.wikipedia.org/wiki/.km says they're available for registration: -coop.km -asso.km -presse.km -medecin.km -notaires.km -pharmaciens.km -veterinaire.km -gouv.km - -// kn : http://en.wikipedia.org/wiki/.kn -// http://www.dot.kn/domainRules.html -kn -net.kn -org.kn -edu.kn -gov.kn - -// kp : http://www.kcce.kp/en_index.php -com.kp -edu.kp -gov.kp -org.kp -rep.kp -tra.kp - -// kr : http://en.wikipedia.org/wiki/.kr -// see also: http://domain.nida.or.kr/eng/registration.jsp -kr -ac.kr -co.kr -es.kr -go.kr -hs.kr -kg.kr -mil.kr -ms.kr -ne.kr -or.kr -pe.kr -re.kr -sc.kr -// kr geographical names -busan.kr -chungbuk.kr -chungnam.kr -daegu.kr -daejeon.kr -gangwon.kr -gwangju.kr -gyeongbuk.kr -gyeonggi.kr -gyeongnam.kr -incheon.kr -jeju.kr -jeonbuk.kr -jeonnam.kr -seoul.kr -ulsan.kr - -// kw : http://en.wikipedia.org/wiki/.kw -*.kw - -// ky : http://www.icta.ky/da_ky_reg_dom.php -// Confirmed by registry <kysupport@perimeterusa.com> 2008-06-17 -ky -edu.ky -gov.ky -com.ky -org.ky -net.ky - -// kz : http://en.wikipedia.org/wiki/.kz -// see also: http://www.nic.kz/rules/index.jsp -kz -org.kz -edu.kz -net.kz -gov.kz -mil.kz -com.kz - -// la : http://en.wikipedia.org/wiki/.la -// Submitted by registry <gavin.brown@nic.la> 2008-06-10 -la -int.la -net.la -info.la -edu.la -gov.la -per.la -com.la -org.la - -// lb : http://en.wikipedia.org/wiki/.lb -// Submitted by registry <randy@psg.com> 2008-06-17 -com.lb -edu.lb -gov.lb -net.lb -org.lb - -// lc : http://en.wikipedia.org/wiki/.lc -// see also: http://www.nic.lc/rules.htm -lc -com.lc -net.lc -co.lc -org.lc -edu.lc -gov.lc - -// li : http://en.wikipedia.org/wiki/.li -li - -// lk : http://www.nic.lk/seclevpr.html -lk -gov.lk -sch.lk -net.lk -int.lk -com.lk -org.lk -edu.lk -ngo.lk -soc.lk -web.lk -ltd.lk -assn.lk -grp.lk -hotel.lk - -// lr : http://psg.com/dns/lr/lr.txt -// Submitted by registry <randy@psg.com> 2008-06-17 -com.lr -edu.lr -gov.lr -org.lr -net.lr - -// ls : http://en.wikipedia.org/wiki/.ls -ls -co.ls -org.ls - -// lt : http://en.wikipedia.org/wiki/.lt -lt -// gov.lt : http://www.gov.lt/index_en.php -gov.lt - -// lu : http://www.dns.lu/en/ -lu - -// lv : http://www.nic.lv/DNS/En/generic.php -lv -com.lv -edu.lv -gov.lv -org.lv -mil.lv -id.lv -net.lv -asn.lv -conf.lv - -// ly : http://www.nic.ly/regulations.php -ly -com.ly -net.ly -gov.ly -plc.ly -edu.ly -sch.ly -med.ly -org.ly -id.ly - -// ma : http://en.wikipedia.org/wiki/.ma -// http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf -ma -co.ma -net.ma -gov.ma -org.ma -ac.ma -press.ma - -// mc : http://www.nic.mc/ -mc -tm.mc -asso.mc - -// md : http://en.wikipedia.org/wiki/.md -md - -// me : http://en.wikipedia.org/wiki/.me -me -co.me -net.me -org.me -edu.me -ac.me -gov.me -its.me -priv.me - -// mg : http://www.nic.mg/tarif.htm -mg -org.mg -nom.mg -gov.mg -prd.mg -tm.mg -edu.mg -mil.mg -com.mg - -// mh : http://en.wikipedia.org/wiki/.mh -mh - -// mil : http://en.wikipedia.org/wiki/.mil -mil - -// mk : http://en.wikipedia.org/wiki/.mk -// see also: http://dns.marnet.net.mk/postapka.php -mk -com.mk -org.mk -net.mk -edu.mk -gov.mk -inf.mk -name.mk - -// ml : http://www.gobin.info/domainname/ml-template.doc -// see also: http://en.wikipedia.org/wiki/.ml -ml -com.ml -edu.ml -gouv.ml -gov.ml -net.ml -org.ml -presse.ml - -// mm : http://en.wikipedia.org/wiki/.mm -*.mm - -// mn : http://en.wikipedia.org/wiki/.mn -mn -gov.mn -edu.mn -org.mn - -// mo : http://www.monic.net.mo/ -mo -com.mo -net.mo -org.mo -edu.mo -gov.mo - -// mobi : http://en.wikipedia.org/wiki/.mobi -mobi - -// mp : http://www.dot.mp/ -// Confirmed by registry <dcamacho@saipan.com> 2008-06-17 -mp - -// mq : http://en.wikipedia.org/wiki/.mq -mq - -// mr : http://en.wikipedia.org/wiki/.mr -mr -gov.mr - -// ms : http://en.wikipedia.org/wiki/.ms -ms - -// mt : https://www.nic.org.mt/dotmt/ -*.mt - -// mu : http://en.wikipedia.org/wiki/.mu -mu -com.mu -net.mu -org.mu -gov.mu -ac.mu -co.mu -or.mu - -// museum : http://about.museum/naming/ -// http://index.museum/ -museum -academy.museum -agriculture.museum -air.museum -airguard.museum -alabama.museum -alaska.museum -amber.museum -ambulance.museum -american.museum -americana.museum -americanantiques.museum -americanart.museum -amsterdam.museum -and.museum -annefrank.museum -anthro.museum -anthropology.museum -antiques.museum -aquarium.museum -arboretum.museum -archaeological.museum -archaeology.museum -architecture.museum -art.museum -artanddesign.museum -artcenter.museum -artdeco.museum -arteducation.museum -artgallery.museum -arts.museum -artsandcrafts.museum -asmatart.museum -assassination.museum -assisi.museum -association.museum -astronomy.museum -atlanta.museum -austin.museum -australia.museum -automotive.museum -aviation.museum -axis.museum -badajoz.museum -baghdad.museum -bahn.museum -bale.museum -baltimore.museum -barcelona.museum -baseball.museum -basel.museum -baths.museum -bauern.museum -beauxarts.museum -beeldengeluid.museum -bellevue.museum -bergbau.museum -berkeley.museum -berlin.museum -bern.museum -bible.museum -bilbao.museum -bill.museum -birdart.museum -birthplace.museum -bonn.museum -boston.museum -botanical.museum -botanicalgarden.museum -botanicgarden.museum -botany.museum -brandywinevalley.museum -brasil.museum -bristol.museum -british.museum -britishcolumbia.museum -broadcast.museum -brunel.museum -brussel.museum -brussels.museum -bruxelles.museum -building.museum -burghof.museum -bus.museum -bushey.museum -cadaques.museum -california.museum -cambridge.museum -can.museum -canada.museum -capebreton.museum -carrier.museum -cartoonart.museum -casadelamoneda.museum -castle.museum -castres.museum -celtic.museum -center.museum -chattanooga.museum -cheltenham.museum -chesapeakebay.museum -chicago.museum -children.museum -childrens.museum -childrensgarden.museum -chiropractic.museum -chocolate.museum -christiansburg.museum -cincinnati.museum -cinema.museum -circus.museum -civilisation.museum -civilization.museum -civilwar.museum -clinton.museum -clock.museum -coal.museum -coastaldefence.museum -cody.museum -coldwar.museum -collection.museum -colonialwilliamsburg.museum -coloradoplateau.museum -columbia.museum -columbus.museum -communication.museum -communications.museum -community.museum -computer.museum -computerhistory.museum -comunicações.museum -contemporary.museum -contemporaryart.museum -convent.museum -copenhagen.museum -corporation.museum -correios-e-telecomunicações.museum -corvette.museum -costume.museum -countryestate.museum -county.museum -crafts.museum -cranbrook.museum -creation.museum -cultural.museum -culturalcenter.museum -culture.museum -cyber.museum -cymru.museum -dali.museum -dallas.museum -database.museum -ddr.museum -decorativearts.museum -delaware.museum -delmenhorst.museum -denmark.museum -depot.museum -design.museum -detroit.museum -dinosaur.museum -discovery.museum -dolls.museum -donostia.museum -durham.museum -eastafrica.museum -eastcoast.museum -education.museum -educational.museum -egyptian.museum -eisenbahn.museum -elburg.museum -elvendrell.museum -embroidery.museum -encyclopedic.museum -england.museum -entomology.museum -environment.museum -environmentalconservation.museum -epilepsy.museum -essex.museum -estate.museum -ethnology.museum -exeter.museum -exhibition.museum -family.museum -farm.museum -farmequipment.museum -farmers.museum -farmstead.museum -field.museum -figueres.museum -filatelia.museum -film.museum -fineart.museum -finearts.museum -finland.museum -flanders.museum -florida.museum -force.museum -fortmissoula.museum -fortworth.museum -foundation.museum -francaise.museum -frankfurt.museum -franziskaner.museum -freemasonry.museum -freiburg.museum -fribourg.museum -frog.museum -fundacio.museum -furniture.museum -gallery.museum -garden.museum -gateway.museum -geelvinck.museum -gemological.museum -geology.museum -georgia.museum -giessen.museum -glas.museum -glass.museum -gorge.museum -grandrapids.museum -graz.museum -guernsey.museum -halloffame.museum -hamburg.museum -handson.museum -harvestcelebration.museum -hawaii.museum -health.museum -heimatunduhren.museum -hellas.museum -helsinki.museum -hembygdsforbund.museum -heritage.museum -histoire.museum -historical.museum -historicalsociety.museum -historichouses.museum -historisch.museum -historisches.museum -history.museum -historyofscience.museum -horology.museum -house.museum -humanities.museum -illustration.museum -imageandsound.museum -indian.museum -indiana.museum -indianapolis.museum -indianmarket.museum -intelligence.museum -interactive.museum -iraq.museum -iron.museum -isleofman.museum -jamison.museum -jefferson.museum -jerusalem.museum -jewelry.museum -jewish.museum -jewishart.museum -jfk.museum -journalism.museum -judaica.museum -judygarland.museum -juedisches.museum -juif.museum -karate.museum -karikatur.museum -kids.museum -koebenhavn.museum -koeln.museum -kunst.museum -kunstsammlung.museum -kunstunddesign.museum -labor.museum -labour.museum -lajolla.museum -lancashire.museum -landes.museum -lans.museum -läns.museum -larsson.museum -lewismiller.museum -lincoln.museum -linz.museum -living.museum -livinghistory.museum -localhistory.museum -london.museum -losangeles.museum -louvre.museum -loyalist.museum -lucerne.museum -luxembourg.museum -luzern.museum -mad.museum -madrid.museum -mallorca.museum -manchester.museum -mansion.museum -mansions.museum -manx.museum -marburg.museum -maritime.museum -maritimo.museum -maryland.museum -marylhurst.museum -media.museum -medical.museum -medizinhistorisches.museum -meeres.museum -memorial.museum -mesaverde.museum -michigan.museum -midatlantic.museum -military.museum -mill.museum -miners.museum -mining.museum -minnesota.museum -missile.museum -missoula.museum -modern.museum -moma.museum -money.museum -monmouth.museum -monticello.museum -montreal.museum -moscow.museum -motorcycle.museum -muenchen.museum -muenster.museum -mulhouse.museum -muncie.museum -museet.museum -museumcenter.museum -museumvereniging.museum -music.museum -national.museum -nationalfirearms.museum -nationalheritage.museum -nativeamerican.museum -naturalhistory.museum -naturalhistorymuseum.museum -naturalsciences.museum -nature.museum -naturhistorisches.museum -natuurwetenschappen.museum -naumburg.museum -naval.museum -nebraska.museum -neues.museum -newhampshire.museum -newjersey.museum -newmexico.museum -newport.museum -newspaper.museum -newyork.museum -niepce.museum -norfolk.museum -north.museum -nrw.museum -nuernberg.museum -nuremberg.museum -nyc.museum -nyny.museum -oceanographic.museum -oceanographique.museum -omaha.museum -online.museum -ontario.museum -openair.museum -oregon.museum -oregontrail.museum -otago.museum -oxford.museum -pacific.museum -paderborn.museum -palace.museum -paleo.museum -palmsprings.museum -panama.museum -paris.museum -pasadena.museum -pharmacy.museum -philadelphia.museum -philadelphiaarea.museum -philately.museum -phoenix.museum -photography.museum -pilots.museum -pittsburgh.museum -planetarium.museum -plantation.museum -plants.museum -plaza.museum -portal.museum -portland.museum -portlligat.museum -posts-and-telecommunications.museum -preservation.museum -presidio.museum -press.museum -project.museum -public.museum -pubol.museum -quebec.museum -railroad.museum -railway.museum -research.museum -resistance.museum -riodejaneiro.museum -rochester.museum -rockart.museum -roma.museum -russia.museum -saintlouis.museum -salem.museum -salvadordali.museum -salzburg.museum -sandiego.museum -sanfrancisco.museum -santabarbara.museum -santacruz.museum -santafe.museum -saskatchewan.museum -satx.museum -savannahga.museum -schlesisches.museum -schoenbrunn.museum -schokoladen.museum -school.museum -schweiz.museum -science.museum -scienceandhistory.museum -scienceandindustry.museum -sciencecenter.museum -sciencecenters.museum -science-fiction.museum -sciencehistory.museum -sciences.museum -sciencesnaturelles.museum -scotland.museum -seaport.museum -settlement.museum -settlers.museum -shell.museum -sherbrooke.museum -sibenik.museum -silk.museum -ski.museum -skole.museum -society.museum -sologne.museum -soundandvision.museum -southcarolina.museum -southwest.museum -space.museum -spy.museum -square.museum -stadt.museum -stalbans.museum -starnberg.museum -state.museum -stateofdelaware.museum -station.museum -steam.museum -steiermark.museum -stjohn.museum -stockholm.museum -stpetersburg.museum -stuttgart.museum -suisse.museum -surgeonshall.museum -surrey.museum -svizzera.museum -sweden.museum -sydney.museum -tank.museum -tcm.museum -technology.museum -telekommunikation.museum -television.museum -texas.museum -textile.museum -theater.museum -time.museum -timekeeping.museum -topology.museum -torino.museum -touch.museum -town.museum -transport.museum -tree.museum -trolley.museum -trust.museum -trustee.museum -uhren.museum -ulm.museum -undersea.museum -university.museum -usa.museum -usantiques.museum -usarts.museum -uscountryestate.museum -usculture.museum -usdecorativearts.museum -usgarden.museum -ushistory.museum -ushuaia.museum -uslivinghistory.museum -utah.museum -uvic.museum -valley.museum -vantaa.museum -versailles.museum -viking.museum -village.museum -virginia.museum -virtual.museum -virtuel.museum -vlaanderen.museum -volkenkunde.museum -wales.museum -wallonie.museum -war.museum -washingtondc.museum -watchandclock.museum -watch-and-clock.museum -western.museum -westfalen.museum -whaling.museum -wildlife.museum -williamsburg.museum -windmill.museum -workshop.museum -york.museum -yorkshire.museum -yosemite.museum -youth.museum -zoological.museum -zoology.museum -ירושלים.museum -иком.museum - -// mv : http://en.wikipedia.org/wiki/.mv -// "mv" included because, contra Wikipedia, google.mv exists. -mv -aero.mv -biz.mv -com.mv -coop.mv -edu.mv -gov.mv -info.mv -int.mv -mil.mv -museum.mv -name.mv -net.mv -org.mv -pro.mv - -// mw : http://www.registrar.mw/ -mw -ac.mw -biz.mw -co.mw -com.mw -coop.mw -edu.mw -gov.mw -int.mw -museum.mw -net.mw -org.mw - -// mx : http://www.nic.mx/ -// Submitted by registry <farias@nic.mx> 2008-06-19 -mx -com.mx -org.mx -gob.mx -edu.mx -net.mx - -// my : http://www.mynic.net.my/ -my -com.my -net.my -org.my -gov.my -edu.my -mil.my -name.my - -// mz : http://www.gobin.info/domainname/mz-template.doc -*.mz - -// na : http://www.na-nic.com.na/ -// http://www.info.na/domain/ -na -info.na -pro.na -name.na -school.na -or.na -dr.na -us.na -mx.na -ca.na -in.na -cc.na -tv.na -ws.na -mobi.na -co.na -com.na -org.na - -// name : has 2nd-level tlds, but there's no list of them -name - -// nc : http://www.cctld.nc/ -nc -asso.nc - -// ne : http://en.wikipedia.org/wiki/.ne -ne - -// net : http://en.wikipedia.org/wiki/.net -net - -// nf : http://en.wikipedia.org/wiki/.nf -nf -com.nf -net.nf -per.nf -rec.nf -web.nf -arts.nf -firm.nf -info.nf -other.nf -store.nf - -// ng : http://psg.com/dns/ng/ -// Submitted by registry <randy@psg.com> 2008-06-17 -ac.ng -com.ng -edu.ng -gov.ng -net.ng -org.ng - -// ni : http://www.nic.ni/dominios.htm -*.ni - -// nl : http://www.domain-registry.nl/ace.php/c,728,122,,,,Home.html -// Confirmed by registry <Antoin.Verschuren@sidn.nl> (with technical -// reservations) 2008-06-08 -nl - -// BV.nl will be a registry for dutch BV's (besloten vennootschap) -bv.nl - -// no : http://www.norid.no/regelverk/index.en.html -// The Norwegian registry has declined to notify us of updates. The web pages -// referenced below are the official source of the data. There is also an -// announce mailing list: -// https://postlister.uninett.no/sympa/info/norid-diskusjon -no -// Norid generic domains : http://www.norid.no/regelverk/vedlegg-c.en.html -fhs.no -vgs.no -fylkesbibl.no -folkebibl.no -museum.no -idrett.no -priv.no -// Non-Norid generic domains : http://www.norid.no/regelverk/vedlegg-d.en.html -mil.no -stat.no -dep.no -kommune.no -herad.no -// no geographical names : http://www.norid.no/regelverk/vedlegg-b.en.html -// counties -aa.no -ah.no -bu.no -fm.no -hl.no -hm.no -jan-mayen.no -mr.no -nl.no -nt.no -of.no -ol.no -oslo.no -rl.no -sf.no -st.no -svalbard.no -tm.no -tr.no -va.no -vf.no -// primary and lower secondary schools per county -gs.aa.no -gs.ah.no -gs.bu.no -gs.fm.no -gs.hl.no -gs.hm.no -gs.jan-mayen.no -gs.mr.no -gs.nl.no -gs.nt.no -gs.of.no -gs.ol.no -gs.oslo.no -gs.rl.no -gs.sf.no -gs.st.no -gs.svalbard.no -gs.tm.no -gs.tr.no -gs.va.no -gs.vf.no -// cities -akrehamn.no -åkrehamn.no -algard.no -ålgård.no -arna.no -brumunddal.no -bryne.no -bronnoysund.no -brønnøysund.no -drobak.no -drøbak.no -egersund.no -fetsund.no -floro.no -florø.no -fredrikstad.no -hokksund.no -honefoss.no -hønefoss.no -jessheim.no -jorpeland.no -jørpeland.no -kirkenes.no -kopervik.no -krokstadelva.no -langevag.no -langevåg.no -leirvik.no -mjondalen.no -mjøndalen.no -mo-i-rana.no -mosjoen.no -mosjøen.no -nesoddtangen.no -orkanger.no -osoyro.no -osøyro.no -raholt.no -råholt.no -sandnessjoen.no -sandnessjøen.no -skedsmokorset.no -slattum.no -spjelkavik.no -stathelle.no -stavern.no -stjordalshalsen.no -stjørdalshalsen.no -tananger.no -tranby.no -vossevangen.no -// communities -afjord.no -åfjord.no -agdenes.no -al.no -ål.no -alesund.no -ålesund.no -alstahaug.no -alta.no -áltá.no -alaheadju.no -álaheadju.no -alvdal.no -amli.no -åmli.no -amot.no -åmot.no -andebu.no -andoy.no -andøy.no -andasuolo.no -ardal.no -årdal.no -aremark.no -arendal.no -ås.no -aseral.no -åseral.no -asker.no -askim.no -askvoll.no -askoy.no -askøy.no -asnes.no -åsnes.no -audnedaln.no -aukra.no -aure.no -aurland.no -aurskog-holand.no -aurskog-høland.no -austevoll.no -austrheim.no -averoy.no -averøy.no -balestrand.no -ballangen.no -balat.no -bálát.no -balsfjord.no -bahccavuotna.no -báhccavuotna.no -bamble.no -bardu.no -beardu.no -beiarn.no -bajddar.no -bájddar.no -baidar.no -báidár.no -berg.no -bergen.no -berlevag.no -berlevåg.no -bearalvahki.no -bearalváhki.no -bindal.no -birkenes.no -bjarkoy.no -bjarkøy.no -bjerkreim.no -bjugn.no -bodo.no -bodø.no -badaddja.no -bådåddjå.no -budejju.no -bokn.no -bremanger.no -bronnoy.no -brønnøy.no -bygland.no -bykle.no -barum.no -bærum.no -bo.telemark.no -bø.telemark.no -bo.nordland.no -bø.nordland.no -bievat.no -bievát.no -bomlo.no -bømlo.no -batsfjord.no -båtsfjord.no -bahcavuotna.no -báhcavuotna.no -dovre.no -drammen.no -drangedal.no -dyroy.no -dyrøy.no -donna.no -dønna.no -eid.no -eidfjord.no -eidsberg.no -eidskog.no -eidsvoll.no -eigersund.no -elverum.no -enebakk.no -engerdal.no -etne.no -etnedal.no -evenes.no -evenassi.no -evenášši.no -evje-og-hornnes.no -farsund.no -fauske.no -fuossko.no -fuoisku.no -fedje.no -fet.no -finnoy.no -finnøy.no -fitjar.no -fjaler.no -fjell.no -flakstad.no -flatanger.no -flekkefjord.no -flesberg.no -flora.no -fla.no -flå.no -folldal.no -forsand.no -fosnes.no -frei.no -frogn.no -froland.no -frosta.no -frana.no -fræna.no -froya.no -frøya.no -fusa.no -fyresdal.no -forde.no -førde.no -gamvik.no -gangaviika.no -gáŋgaviika.no -gaular.no -gausdal.no -gildeskal.no -gildeskål.no -giske.no -gjemnes.no -gjerdrum.no -gjerstad.no -gjesdal.no -gjovik.no -gjøvik.no -gloppen.no -gol.no -gran.no -grane.no -granvin.no -gratangen.no -grimstad.no -grong.no -kraanghke.no -kråanghke.no -grue.no -gulen.no -hadsel.no -halden.no -halsa.no -hamar.no -hamaroy.no -habmer.no -hábmer.no -hapmir.no -hápmir.no -hammerfest.no -hammarfeasta.no -hámmárfeasta.no -haram.no -hareid.no -harstad.no -hasvik.no -aknoluokta.no -ákŋoluokta.no -hattfjelldal.no -aarborte.no -haugesund.no -hemne.no -hemnes.no -hemsedal.no -heroy.more-og-romsdal.no -herøy.møre-og-romsdal.no -heroy.nordland.no -herøy.nordland.no -hitra.no -hjartdal.no -hjelmeland.no -hobol.no -hobøl.no -hof.no -hol.no -hole.no -holmestrand.no -holtalen.no -holtålen.no -hornindal.no -horten.no -hurdal.no -hurum.no -hvaler.no -hyllestad.no -hagebostad.no -hægebostad.no -hoyanger.no -høyanger.no -hoylandet.no -høylandet.no -ha.no -hå.no -ibestad.no -inderoy.no -inderøy.no -iveland.no -jevnaker.no -jondal.no -jolster.no -jølster.no -karasjok.no -karasjohka.no -kárášjohka.no -karlsoy.no -galsa.no -gálsá.no -karmoy.no -karmøy.no -kautokeino.no -guovdageaidnu.no -klepp.no -klabu.no -klæbu.no -kongsberg.no -kongsvinger.no -kragero.no -kragerø.no -kristiansand.no -kristiansund.no -krodsherad.no -krødsherad.no -kvalsund.no -rahkkeravju.no -ráhkkerávju.no -kvam.no -kvinesdal.no -kvinnherad.no -kviteseid.no -kvitsoy.no -kvitsøy.no -kvafjord.no -kvæfjord.no -giehtavuoatna.no -kvanangen.no -kvænangen.no -navuotna.no -návuotna.no -kafjord.no -kåfjord.no -gaivuotna.no -gáivuotna.no -larvik.no -lavangen.no -lavagis.no -loabat.no -loabát.no -lebesby.no -davvesiida.no -leikanger.no -leirfjord.no -leka.no -leksvik.no -lenvik.no -leangaviika.no -leaŋgaviika.no -lesja.no -levanger.no -lier.no -lierne.no -lillehammer.no -lillesand.no -lindesnes.no -lindas.no -lindås.no -lom.no -loppa.no -lahppi.no -láhppi.no -lund.no -lunner.no -luroy.no -lurøy.no -luster.no -lyngdal.no -lyngen.no -ivgu.no -lardal.no -lerdal.no -lærdal.no -lodingen.no -lødingen.no -lorenskog.no -lørenskog.no -loten.no -løten.no -malvik.no -masoy.no -måsøy.no -muosat.no -muosát.no -mandal.no -marker.no -marnardal.no -masfjorden.no -meland.no -meldal.no -melhus.no -meloy.no -meløy.no -meraker.no -meråker.no -moareke.no -moåreke.no -midsund.no -midtre-gauldal.no -modalen.no -modum.no -molde.no -moskenes.no -moss.no -mosvik.no -malselv.no -målselv.no -malatvuopmi.no -málatvuopmi.no -namdalseid.no -aejrie.no -namsos.no -namsskogan.no -naamesjevuemie.no -nååmesjevuemie.no -laakesvuemie.no -nannestad.no -narvik.no -narviika.no -naustdal.no -nedre-eiker.no -nes.akershus.no -nes.buskerud.no -nesna.no -nesodden.no -nesseby.no -unjarga.no -unjárga.no -nesset.no -nissedal.no -nittedal.no -nord-aurdal.no -nord-fron.no -nord-odal.no -norddal.no -nordkapp.no -davvenjarga.no -davvenjárga.no -nordre-land.no -nordreisa.no -raisa.no -ráisa.no -nore-og-uvdal.no -notodden.no -naroy.no -nærøy.no -notteroy.no -nøtterøy.no -odda.no -oksnes.no -øksnes.no -oppdal.no -oppegard.no -oppegård.no -orkdal.no -orland.no -ørland.no -orskog.no -ørskog.no -orsta.no -ørsta.no -os.hedmark.no -os.hordaland.no -osen.no -osteroy.no -osterøy.no -ostre-toten.no -østre-toten.no -overhalla.no -ovre-eiker.no -øvre-eiker.no -oyer.no -øyer.no -oygarden.no -øygarden.no -oystre-slidre.no -øystre-slidre.no -porsanger.no -porsangu.no -porsáŋgu.no -porsgrunn.no -radoy.no -radøy.no -rakkestad.no -rana.no -ruovat.no -randaberg.no -rauma.no -rendalen.no -rennebu.no -rennesoy.no -rennesøy.no -rindal.no -ringebu.no -ringerike.no -ringsaker.no -rissa.no -risor.no -risør.no -roan.no -rollag.no -rygge.no -ralingen.no -rælingen.no -rodoy.no -rødøy.no -romskog.no -rømskog.no -roros.no -røros.no -rost.no -røst.no -royken.no -røyken.no -royrvik.no -røyrvik.no -rade.no -råde.no -salangen.no -siellak.no -saltdal.no -salat.no -sálát.no -sálat.no -samnanger.no -sande.more-og-romsdal.no -sande.møre-og-romsdal.no -sande.vestfold.no -sandefjord.no -sandnes.no -sandoy.no -sandøy.no -sarpsborg.no -sauda.no -sauherad.no -sel.no -selbu.no -selje.no -seljord.no -sigdal.no -siljan.no -sirdal.no -skaun.no -skedsmo.no -ski.no -skien.no -skiptvet.no -skjervoy.no -skjervøy.no -skierva.no -skiervá.no -skjak.no -skjåk.no -skodje.no -skanland.no -skånland.no -skanit.no -skánit.no -smola.no -smøla.no -snillfjord.no -snasa.no -snåsa.no -snoasa.no -snaase.no -snåase.no -sogndal.no -sokndal.no -sola.no -solund.no -songdalen.no -sortland.no -spydeberg.no -stange.no -stavanger.no -steigen.no -steinkjer.no -stjordal.no -stjørdal.no -stokke.no -stor-elvdal.no -stord.no -stordal.no -storfjord.no -omasvuotna.no -strand.no -stranda.no -stryn.no -sula.no -suldal.no -sund.no -sunndal.no -surnadal.no -sveio.no -svelvik.no -sykkylven.no -sogne.no -søgne.no -somna.no -sømna.no -sondre-land.no -søndre-land.no -sor-aurdal.no -sør-aurdal.no -sor-fron.no -sør-fron.no -sor-odal.no -sør-odal.no -sor-varanger.no -sør-varanger.no -matta-varjjat.no -mátta-várjjat.no -sorfold.no -sørfold.no -sorreisa.no -sørreisa.no -sorum.no -sørum.no -tana.no -deatnu.no -time.no -tingvoll.no -tinn.no -tjeldsund.no -dielddanuorri.no -tjome.no -tjøme.no -tokke.no -tolga.no -torsken.no -tranoy.no -tranøy.no -tromso.no -tromsø.no -tromsa.no -romsa.no -trondheim.no -troandin.no -trysil.no -trana.no -træna.no -trogstad.no -trøgstad.no -tvedestrand.no -tydal.no -tynset.no -tysfjord.no -divtasvuodna.no -divttasvuotna.no -tysnes.no -tysvar.no -tysvær.no -tonsberg.no -tønsberg.no -ullensaker.no -ullensvang.no -ulvik.no -utsira.no -vadso.no -vadsø.no -cahcesuolo.no -čáhcesuolo.no -vaksdal.no -valle.no -vang.no -vanylven.no -vardo.no -vardø.no -varggat.no -várggát.no -vefsn.no -vaapste.no -vega.no -vegarshei.no -vegårshei.no -vennesla.no -verdal.no -verran.no -vestby.no -vestnes.no -vestre-slidre.no -vestre-toten.no -vestvagoy.no -vestvågøy.no -vevelstad.no -vik.no -vikna.no -vindafjord.no -volda.no -voss.no -varoy.no -værøy.no -vagan.no -vågan.no -voagat.no -vagsoy.no -vågsøy.no -vaga.no -vågå.no -valer.ostfold.no -våler.østfold.no -valer.hedmark.no -våler.hedmark.no - -// np : http://www.mos.com.np/register.html -*.np - -// nr : http://cenpac.net.nr/dns/index.html -// Confirmed by registry <technician@cenpac.net.nr> 2008-06-17 -nr -biz.nr -info.nr -gov.nr -edu.nr -org.nr -net.nr -com.nr - -// nu : http://en.wikipedia.org/wiki/.nu -nu - -// nz : http://en.wikipedia.org/wiki/.nz -*.nz - -// om : http://en.wikipedia.org/wiki/.om -*.om -!mediaphone.om -!nawrastelecom.om -!nawras.om -!omanmobile.om -!omanpost.om -!omantel.om -!rakpetroleum.om -!siemens.om -!songfest.om -!statecouncil.om - -// org : http://en.wikipedia.org/wiki/.org -org - -// pa : http://www.nic.pa/ -// Some additional second level "domains" resolve directly as hostnames, such as -// pannet.pa, so we add a rule for "pa". -pa -ac.pa -gob.pa -com.pa -org.pa -sld.pa -edu.pa -net.pa -ing.pa -abo.pa -med.pa -nom.pa - -// pe : https://www.nic.pe/InformeFinalComision.pdf -pe -edu.pe -gob.pe -nom.pe -mil.pe -org.pe -com.pe -net.pe - -// pf : http://www.gobin.info/domainname/formulaire-pf.pdf -pf -com.pf -org.pf -edu.pf - -// pg : http://en.wikipedia.org/wiki/.pg -*.pg - -// ph : http://www.domains.ph/FAQ2.asp -// Submitted by registry <jed@email.com.ph> 2008-06-13 -ph -com.ph -net.ph -org.ph -gov.ph -edu.ph -ngo.ph -mil.ph -i.ph - -// pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK -pk -com.pk -net.pk -edu.pk -org.pk -fam.pk -biz.pk -web.pk -gov.pk -gob.pk -gok.pk -gon.pk -gop.pk -gos.pk -info.pk - -// pl : http://www.dns.pl/english/ -pl -// NASK functional domains (nask.pl / dns.pl) : http://www.dns.pl/english/dns-funk.html -aid.pl -agro.pl -atm.pl -auto.pl -biz.pl -com.pl -edu.pl -gmina.pl -gsm.pl -info.pl -mail.pl -miasta.pl -media.pl -mil.pl -net.pl -nieruchomosci.pl -nom.pl -org.pl -pc.pl -powiat.pl -priv.pl -realestate.pl -rel.pl -sex.pl -shop.pl -sklep.pl -sos.pl -szkola.pl -targi.pl -tm.pl -tourism.pl -travel.pl -turystyka.pl -// ICM functional domains (icm.edu.pl) -6bone.pl -art.pl -mbone.pl -// Government domains (administred by ippt.gov.pl) -gov.pl -uw.gov.pl -um.gov.pl -ug.gov.pl -upow.gov.pl -starostwo.gov.pl -so.gov.pl -sr.gov.pl -po.gov.pl -pa.gov.pl -// other functional domains -ngo.pl -irc.pl -usenet.pl -// NASK geographical domains : http://www.dns.pl/english/dns-regiony.html -augustow.pl -babia-gora.pl -bedzin.pl -beskidy.pl -bialowieza.pl -bialystok.pl -bielawa.pl -bieszczady.pl -boleslawiec.pl -bydgoszcz.pl -bytom.pl -cieszyn.pl -czeladz.pl -czest.pl -dlugoleka.pl -elblag.pl -elk.pl -glogow.pl -gniezno.pl -gorlice.pl -grajewo.pl -ilawa.pl -jaworzno.pl -jelenia-gora.pl -jgora.pl -kalisz.pl -kazimierz-dolny.pl -karpacz.pl -kartuzy.pl -kaszuby.pl -katowice.pl -kepno.pl -ketrzyn.pl -klodzko.pl -kobierzyce.pl -kolobrzeg.pl -konin.pl -konskowola.pl -kutno.pl -lapy.pl -lebork.pl -legnica.pl -lezajsk.pl -limanowa.pl -lomza.pl -lowicz.pl -lubin.pl -lukow.pl -malbork.pl -malopolska.pl -mazowsze.pl -mazury.pl -mielec.pl -mielno.pl -mragowo.pl -naklo.pl -nowaruda.pl -nysa.pl -olawa.pl -olecko.pl -olkusz.pl -olsztyn.pl -opoczno.pl -opole.pl -ostroda.pl -ostroleka.pl -ostrowiec.pl -ostrowwlkp.pl -pila.pl -pisz.pl -podhale.pl -podlasie.pl -polkowice.pl -pomorze.pl -pomorskie.pl -prochowice.pl -pruszkow.pl -przeworsk.pl -pulawy.pl -radom.pl -rawa-maz.pl -rybnik.pl -rzeszow.pl -sanok.pl -sejny.pl -siedlce.pl -slask.pl -slupsk.pl -sosnowiec.pl -stalowa-wola.pl -skoczow.pl -starachowice.pl -stargard.pl -suwalki.pl -swidnica.pl -swiebodzin.pl -swinoujscie.pl -szczecin.pl -szczytno.pl -tarnobrzeg.pl -tgory.pl -turek.pl -tychy.pl -ustka.pl -walbrzych.pl -warmia.pl -warszawa.pl -waw.pl -wegrow.pl -wielun.pl -wlocl.pl -wloclawek.pl -wodzislaw.pl -wolomin.pl -wroclaw.pl -zachpomor.pl -zagan.pl -zarow.pl -zgora.pl -zgorzelec.pl -// TASK geographical domains (www.task.gda.pl/uslugi/dns) -gda.pl -gdansk.pl -gdynia.pl -med.pl -sopot.pl -// other geographical domains -gliwice.pl -krakow.pl -poznan.pl -wroc.pl -zakopane.pl - -// pm : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf -pm - -// pn : http://www.government.pn/PnRegistry/policies.htm -pn -gov.pn -co.pn -org.pn -edu.pn -net.pn - -// pr : http://www.nic.pr/index.asp?f=1 -pr -com.pr -net.pr -org.pr -gov.pr -edu.pr -isla.pr -pro.pr -biz.pr -info.pr -name.pr -// these aren't mentioned on nic.pr, but on http://en.wikipedia.org/wiki/.pr -est.pr -prof.pr -ac.pr - -// pro : http://www.nic.pro/support_faq.htm -pro -aca.pro -bar.pro -cpa.pro -jur.pro -law.pro -med.pro -eng.pro - -// ps : http://en.wikipedia.org/wiki/.ps -// http://www.nic.ps/registration/policy.html#reg -ps -edu.ps -gov.ps -sec.ps -plo.ps -com.ps -org.ps -net.ps - -// pt : http://online.dns.pt/dns/start_dns -pt -net.pt -gov.pt -org.pt -edu.pt -int.pt -publ.pt -com.pt -nome.pt - -// pw : http://en.wikipedia.org/wiki/.pw -pw -co.pw -ne.pw -or.pw -ed.pw -go.pw -belau.pw - -// py : http://www.nic.py/faq_a.html#faq_b -*.py - -// qa : http://domains.qa/en/ -qa -com.qa -edu.qa -gov.qa -mil.qa -name.qa -net.qa -org.qa -sch.qa - -// re : http://www.afnic.re/obtenir/chartes/nommage-re/annexe-descriptifs -re -com.re -asso.re -nom.re - -// ro : http://www.rotld.ro/ -ro -com.ro -org.ro -tm.ro -nt.ro -nom.ro -info.ro -rec.ro -arts.ro -firm.ro -store.ro -www.ro - -// rs : http://en.wikipedia.org/wiki/.rs -rs -co.rs -org.rs -edu.rs -ac.rs -gov.rs -in.rs - -// ru : http://www.cctld.ru/ru/docs/aktiv_8.php -// Industry domains -ru -ac.ru -com.ru -edu.ru -int.ru -net.ru -org.ru -pp.ru -// Geographical domains -adygeya.ru -altai.ru -amur.ru -arkhangelsk.ru -astrakhan.ru -bashkiria.ru -belgorod.ru -bir.ru -bryansk.ru -buryatia.ru -cbg.ru -chel.ru -chelyabinsk.ru -chita.ru -chukotka.ru -chuvashia.ru -dagestan.ru -dudinka.ru -e-burg.ru -grozny.ru -irkutsk.ru -ivanovo.ru -izhevsk.ru -jar.ru -joshkar-ola.ru -kalmykia.ru -kaluga.ru -kamchatka.ru -karelia.ru -kazan.ru -kchr.ru -kemerovo.ru -khabarovsk.ru -khakassia.ru -khv.ru -kirov.ru -koenig.ru -komi.ru -kostroma.ru -krasnoyarsk.ru -kuban.ru -kurgan.ru -kursk.ru -lipetsk.ru -magadan.ru -mari.ru -mari-el.ru -marine.ru -mordovia.ru -mosreg.ru -msk.ru -murmansk.ru -nalchik.ru -nnov.ru -nov.ru -novosibirsk.ru -nsk.ru -omsk.ru -orenburg.ru -oryol.ru -palana.ru -penza.ru -perm.ru -pskov.ru -ptz.ru -rnd.ru -ryazan.ru -sakhalin.ru -samara.ru -saratov.ru -simbirsk.ru -smolensk.ru -spb.ru -stavropol.ru -stv.ru -surgut.ru -tambov.ru -tatarstan.ru -tom.ru -tomsk.ru -tsaritsyn.ru -tsk.ru -tula.ru -tuva.ru -tver.ru -tyumen.ru -udm.ru -udmurtia.ru -ulan-ude.ru -vladikavkaz.ru -vladimir.ru -vladivostok.ru -volgograd.ru -vologda.ru -voronezh.ru -vrn.ru -vyatka.ru -yakutia.ru -yamal.ru -yaroslavl.ru -yekaterinburg.ru -yuzhno-sakhalinsk.ru -// More geographical domains -amursk.ru -baikal.ru -cmw.ru -fareast.ru -jamal.ru -kms.ru -k-uralsk.ru -kustanai.ru -kuzbass.ru -magnitka.ru -mytis.ru -nakhodka.ru -nkz.ru -norilsk.ru -oskol.ru -pyatigorsk.ru -rubtsovsk.ru -snz.ru -syzran.ru -vdonsk.ru -zgrad.ru -// State domains -gov.ru -mil.ru -// Technical domains -test.ru - -// rw : http://www.nic.rw/cgi-bin/policy.pl -rw -gov.rw -net.rw -edu.rw -ac.rw -com.rw -co.rw -int.rw -mil.rw -gouv.rw - -// sa : http://www.nic.net.sa/ -sa -com.sa -net.sa -org.sa -gov.sa -med.sa -pub.sa -edu.sa -sch.sa - -// sb : http://www.sbnic.net.sb/ -// Submitted by registry <lee.humphries@telekom.com.sb> 2008-06-08 -sb -com.sb -edu.sb -gov.sb -net.sb -org.sb - -// sc : http://www.nic.sc/ -sc -com.sc -gov.sc -net.sc -org.sc -edu.sc - -// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm -// Submitted by registry <admin@isoc.sd> 2008-06-17 -sd -com.sd -net.sd -org.sd -edu.sd -med.sd -gov.sd -info.sd - -// se : http://en.wikipedia.org/wiki/.se -// Submitted by registry <Patrik.Wallstrom@iis.se> 2008-06-24 -se -a.se -ac.se -b.se -bd.se -brand.se -c.se -d.se -e.se -f.se -fh.se -fhsk.se -fhv.se -g.se -h.se -i.se -k.se -komforb.se -kommunalforbund.se -komvux.se -l.se -lanbib.se -m.se -n.se -naturbruksgymn.se -o.se -org.se -p.se -parti.se -pp.se -press.se -r.se -s.se -sshn.se -t.se -tm.se -u.se -w.se -x.se -y.se -z.se - -// sg : http://www.nic.net.sg/sub_policies_agreement/2ld.html -sg -com.sg -net.sg -org.sg -gov.sg -edu.sg -per.sg - -// sh : http://www.nic.sh/rules.html -// list of 2nd level domains ? -sh - -// si : http://en.wikipedia.org/wiki/.si -si - -// sj : No registrations at this time. -// Submitted by registry <jarle@uninett.no> 2008-06-16 - -// sk : http://en.wikipedia.org/wiki/.sk -// list of 2nd level domains ? -sk - -// sl : http://www.nic.sl -// Submitted by registry <adam@neoip.com> 2008-06-12 -sl -com.sl -net.sl -edu.sl -gov.sl -org.sl - -// sm : http://en.wikipedia.org/wiki/.sm -sm - -// sn : http://en.wikipedia.org/wiki/.sn -sn -art.sn -com.sn -edu.sn -gouv.sn -org.sn -perso.sn -univ.sn - -// so : http://www.soregistry.com/ -so -com.so -net.so -org.so - -// sr : http://en.wikipedia.org/wiki/.sr -sr - -// st : http://www.nic.st/html/policyrules/ -st -co.st -com.st -consulado.st -edu.st -embaixada.st -gov.st -mil.st -net.st -org.st -principe.st -saotome.st -store.st - -// su : http://en.wikipedia.org/wiki/.su -su - -// sv : http://www.svnet.org.sv/svpolicy.html -*.sv - -// sy : http://en.wikipedia.org/wiki/.sy -// see also: http://www.gobin.info/domainname/sy.doc -sy -edu.sy -gov.sy -net.sy -mil.sy -com.sy -org.sy - -// sz : http://en.wikipedia.org/wiki/.sz -// http://www.sispa.org.sz/ -sz -co.sz -ac.sz -org.sz - -// tc : http://en.wikipedia.org/wiki/.tc -tc - -// td : http://en.wikipedia.org/wiki/.td -td - -// tel: http://en.wikipedia.org/wiki/.tel -// http://www.telnic.org/ -tel - -// tf : http://en.wikipedia.org/wiki/.tf -tf - -// tg : http://en.wikipedia.org/wiki/.tg -// http://www.nic.tg/nictg/index.php implies no reserved 2nd-level domains, -// although this contradicts wikipedia. -tg - -// th : http://en.wikipedia.org/wiki/.th -// Submitted by registry <krit@thains.co.th> 2008-06-17 -th -ac.th -co.th -go.th -in.th -mi.th -net.th -or.th - -// tj : http://www.nic.tj/policy.htm -tj -ac.tj -biz.tj -co.tj -com.tj -edu.tj -go.tj -gov.tj -int.tj -mil.tj -name.tj -net.tj -nic.tj -org.tj -test.tj -web.tj - -// tk : http://en.wikipedia.org/wiki/.tk -tk - -// tl : http://en.wikipedia.org/wiki/.tl -tl -gov.tl - -// tm : http://www.nic.tm/rules.html -// list of 2nd level tlds ? -tm - -// tn : http://en.wikipedia.org/wiki/.tn -// http://whois.ati.tn/ -tn -com.tn -ens.tn -fin.tn -gov.tn -ind.tn -intl.tn -nat.tn -net.tn -org.tn -info.tn -perso.tn -tourism.tn -edunet.tn -rnrt.tn -rns.tn -rnu.tn -mincom.tn -agrinet.tn -defense.tn -turen.tn - -// to : http://en.wikipedia.org/wiki/.to -// Submitted by registry <egullich@colo.to> 2008-06-17 -to -com.to -gov.to -net.to -org.to -edu.to -mil.to - -// tr : http://en.wikipedia.org/wiki/.tr -*.tr -!nic.tr -// Used by government in the TRNC -// http://en.wikipedia.org/wiki/.nc.tr -gov.nc.tr - -// travel : http://en.wikipedia.org/wiki/.travel -travel - -// tt : http://www.nic.tt/ -tt -co.tt -com.tt -org.tt -net.tt -biz.tt -info.tt -pro.tt -int.tt -coop.tt -jobs.tt -mobi.tt -travel.tt -museum.tt -aero.tt -name.tt -gov.tt -edu.tt - -// tv : http://en.wikipedia.org/wiki/.tv -// Not listing any 2LDs as reserved since none seem to exist in practice, -// Wikipedia notwithstanding. -tv - -// tw : http://en.wikipedia.org/wiki/.tw -tw -edu.tw -gov.tw -mil.tw -com.tw -net.tw -org.tw -idv.tw -game.tw -ebiz.tw -club.tw -網路.tw -組織.tw -商業.tw - -// tz : http://en.wikipedia.org/wiki/.tz -// Submitted by registry <randy@psg.com> 2008-06-17 -// Updated from http://www.tznic.or.tz/index.php/domains.html 2010-10-25 -ac.tz -co.tz -go.tz -mil.tz -ne.tz -or.tz -sc.tz - -// ua : http://www.nic.net.ua/ -ua -com.ua -edu.ua -gov.ua -in.ua -net.ua -org.ua -// ua geo-names -cherkassy.ua -chernigov.ua -chernovtsy.ua -ck.ua -cn.ua -crimea.ua -cv.ua -dn.ua -dnepropetrovsk.ua -donetsk.ua -dp.ua -if.ua -ivano-frankivsk.ua -kh.ua -kharkov.ua -kherson.ua -khmelnitskiy.ua -kiev.ua -kirovograd.ua -km.ua -kr.ua -ks.ua -kv.ua -lg.ua -lugansk.ua -lutsk.ua -lviv.ua -mk.ua -nikolaev.ua -od.ua -odessa.ua -pl.ua -poltava.ua -rovno.ua -rv.ua -sebastopol.ua -sumy.ua -te.ua -ternopil.ua -uzhgorod.ua -vinnica.ua -vn.ua -zaporizhzhe.ua -zp.ua -zhitomir.ua -zt.ua - -// Private registries in .ua -co.ua -pp.ua - -// ug : http://www.registry.co.ug/ -ug -co.ug -ac.ug -sc.ug -go.ug -ne.ug -or.ug - -// uk : http://en.wikipedia.org/wiki/.uk -*.uk -*.sch.uk -!bl.uk -!british-library.uk -!icnet.uk -!jet.uk -!mod.uk -!nel.uk -!nhs.uk -!nic.uk -!nls.uk -!national-library-scotland.uk -!parliament.uk -!police.uk - -// us : http://en.wikipedia.org/wiki/.us -us -dni.us -fed.us -isa.us -kids.us -nsn.us -// us geographic names -ak.us -al.us -ar.us -as.us -az.us -ca.us -co.us -ct.us -dc.us -de.us -fl.us -ga.us -gu.us -hi.us -ia.us -id.us -il.us -in.us -ks.us -ky.us -la.us -ma.us -md.us -me.us -mi.us -mn.us -mo.us -ms.us -mt.us -nc.us -nd.us -ne.us -nh.us -nj.us -nm.us -nv.us -ny.us -oh.us -ok.us -or.us -pa.us -pr.us -ri.us -sc.us -sd.us -tn.us -tx.us -ut.us -vi.us -vt.us -va.us -wa.us -wi.us -wv.us -wy.us -// The registrar notes several more specific domains available in each state, -// such as state.*.us, dst.*.us, etc., but resolution of these is somewhat -// haphazard; in some states these domains resolve as addresses, while in others -// only subdomains are available, or even nothing at all. We include the -// most common ones where it's clear that different sites are different -// entities. -k12.ak.us -k12.al.us -k12.ar.us -k12.as.us -k12.az.us -k12.ca.us -k12.co.us -k12.ct.us -k12.dc.us -k12.de.us -k12.fl.us -k12.ga.us -k12.gu.us -// k12.hi.us Hawaii has a state-wide DOE login: bug 614565 -k12.ia.us -k12.id.us -k12.il.us -k12.in.us -k12.ks.us -k12.ky.us -k12.la.us -k12.ma.us -k12.md.us -k12.me.us -k12.mi.us -k12.mn.us -k12.mo.us -k12.ms.us -k12.mt.us -k12.nc.us -k12.nd.us -k12.ne.us -k12.nh.us -k12.nj.us -k12.nm.us -k12.nv.us -k12.ny.us -k12.oh.us -k12.ok.us -k12.or.us -k12.pa.us -k12.pr.us -k12.ri.us -k12.sc.us -k12.sd.us -k12.tn.us -k12.tx.us -k12.ut.us -k12.vi.us -k12.vt.us -k12.va.us -k12.wa.us -k12.wi.us -k12.wv.us -k12.wy.us - -cc.ak.us -cc.al.us -cc.ar.us -cc.as.us -cc.az.us -cc.ca.us -cc.co.us -cc.ct.us -cc.dc.us -cc.de.us -cc.fl.us -cc.ga.us -cc.gu.us -cc.hi.us -cc.ia.us -cc.id.us -cc.il.us -cc.in.us -cc.ks.us -cc.ky.us -cc.la.us -cc.ma.us -cc.md.us -cc.me.us -cc.mi.us -cc.mn.us -cc.mo.us -cc.ms.us -cc.mt.us -cc.nc.us -cc.nd.us -cc.ne.us -cc.nh.us -cc.nj.us -cc.nm.us -cc.nv.us -cc.ny.us -cc.oh.us -cc.ok.us -cc.or.us -cc.pa.us -cc.pr.us -cc.ri.us -cc.sc.us -cc.sd.us -cc.tn.us -cc.tx.us -cc.ut.us -cc.vi.us -cc.vt.us -cc.va.us -cc.wa.us -cc.wi.us -cc.wv.us -cc.wy.us - -lib.ak.us -lib.al.us -lib.ar.us -lib.as.us -lib.az.us -lib.ca.us -lib.co.us -lib.ct.us -lib.dc.us -lib.de.us -lib.fl.us -lib.ga.us -lib.gu.us -lib.hi.us -lib.ia.us -lib.id.us -lib.il.us -lib.in.us -lib.ks.us -lib.ky.us -lib.la.us -lib.ma.us -lib.md.us -lib.me.us -lib.mi.us -lib.mn.us -lib.mo.us -lib.ms.us -lib.mt.us -lib.nc.us -lib.nd.us -lib.ne.us -lib.nh.us -lib.nj.us -lib.nm.us -lib.nv.us -lib.ny.us -lib.oh.us -lib.ok.us -lib.or.us -lib.pa.us -lib.pr.us -lib.ri.us -lib.sc.us -lib.sd.us -lib.tn.us -lib.tx.us -lib.ut.us -lib.vi.us -lib.vt.us -lib.va.us -lib.wa.us -lib.wi.us -lib.wv.us -lib.wy.us - -// k12.ma.us contains school districts in Massachusetts. The 4LDs are -// managed indepedently except for private (PVT), charter (CHTR) and -// parochial (PAROCH) schools. Those are delegated dorectly to the -// 5LD operators. <k12-ma-hostmaster _ at _ rsuc.gweep.net> -pvt.k12.ma.us -chtr.k12.ma.us -paroch.k12.ma.us - -// uy : http://www.antel.com.uy/ -*.uy - -// uz : http://www.reg.uz/registerr.html -// are there other 2nd level tlds ? -uz -com.uz -co.uz - -// va : http://en.wikipedia.org/wiki/.va -va - -// vc : http://en.wikipedia.org/wiki/.vc -// Submitted by registry <kshah@ca.afilias.info> 2008-06-13 -vc -com.vc -net.vc -org.vc -gov.vc -mil.vc -edu.vc - -// ve : http://registro.nic.ve/nicve/registro/index.html -*.ve - -// vg : http://en.wikipedia.org/wiki/.vg -vg - -// vi : http://www.nic.vi/newdomainform.htm -// http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other -// TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they -// are available for registration (which they do not seem to be). -vi -co.vi -com.vi -k12.vi -net.vi -org.vi - -// vn : https://www.dot.vn/vnnic/vnnic/domainregistration.jsp -vn -com.vn -net.vn -org.vn -edu.vn -gov.vn -int.vn -ac.vn -biz.vn -info.vn -name.vn -pro.vn -health.vn - -// vu : http://en.wikipedia.org/wiki/.vu -// list of 2nd level tlds ? -vu - -// wf : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf -wf - -// ws : http://en.wikipedia.org/wiki/.ws -// http://samoanic.ws/index.dhtml -ws -com.ws -net.ws -org.ws -gov.ws -edu.ws - -// yt : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf -yt - -// IDN ccTLDs -// Please sort by ISO 3166 ccTLD, then punicode string -// when submitting patches and follow this format: -// <Punicode> ("<english word>" <language>) : <ISO 3166 ccTLD> -// [optional sponsoring org] -// <URL> - -// xn--mgbaam7a8h ("Emerat" Arabic) : AE -//http://nic.ae/english/arabicdomain/rules.jsp -امارات - -// xn--54b7fta0cc ("Bangla" Bangla) : BD -বাংলা - -// xn--fiqs8s ("China" Chinese-Han-Simplified <.Zhonggou>) : CN -// CNNIC -// http://cnnic.cn/html/Dir/2005/10/11/3218.htm -中国 - -// xn--fiqz9s ("China" Chinese-Han-Traditional <.Zhonggou>) : CN -// CNNIC -// http://cnnic.cn/html/Dir/2005/10/11/3218.htm -中國 - -// xn--lgbbat1ad8j ("Algeria / Al Jazair" Arabic) : DZ -الجزائر - -// xn--wgbh1c ("Egypt" Arabic .masr) : EG -// http://www.dotmasr.eg/ -مصر - -// xn--node ("ge" Georgian (Mkhedruli)) : GE -გე - -// xn--j6w193g ("Hong Kong" Chinese-Han) : HK -// https://www2.hkirc.hk/register/rules.jsp -香港 - -// xn--h2brj9c ("Bharat" Devanagari) : IN -// India -भारत - -// xn--mgbbh1a71e ("Bharat" Arabic) : IN -// India -بھارت - -// xn--fpcrj9c3d ("Bharat" Telugu) : IN -// India -భారత్ - -// xn--gecrj9c ("Bharat" Gujarati) : IN -// India -ભારત - -// xn--s9brj9c ("Bharat" Gurmukhi) : IN -// India -ਭਾਰਤ - -// xn--45brj9c ("Bharat" Bengali) : IN -// India -ভারত - -// xn--xkc2dl3a5ee0h ("India" Tamil) : IN -// India -இந்தியா - -// xn--mgba3a4f16a ("Iran" Persian) : IR -ایران - -// xn--mgba3a4fra ("Iran" Arabic) : IR -ايران - -//xn--mgbayh7gpa ("al-Ordon" Arabic) JO -//National Information Technology Center (NITC) -//Royal Scientific Society, Al-Jubeiha -الاردن - -// xn--3e0b707e ("Republic of Korea" Hangul) : KR -한국 - -// xn--fzc2c9e2c ("Lanka" Sinhalese-Sinhala) : LK -// http://nic.lk -ලංකා - -// xn--xkc2al3hye2a ("Ilangai" Tamil) : LK -// http://nic.lk -இலங்கை - -// xn--mgbc0a9azcg ("Morocco / al-Maghrib" Arabic) : MA -المغرب - -// xn--mgb9awbf ("Oman" Arabic) : OM -عمان - -// xn--ygbi2ammx ("Falasteen" Arabic) : PS -// The Palestinian National Internet Naming Authority (PNINA) -// http://www.pnina.ps -فلسطين - -// xn--90a3ac ("srb" Cyrillic) : RS -срб - -// xn--p1ai ("rf" Russian-Cyrillic) : RU -// http://www.cctld.ru/en/docs/rulesrf.php -рф - -// xn--wgbl6a ("Qatar" Arabic) : QA -// http://www.ict.gov.qa/ -قطر - -// xn--mgberp4a5d4ar ("AlSaudiah" Arabic) : SA -// http://www.nic.net.sa/ -السعودية - -// xn--mgberp4a5d4a87g ("AlSaudiah" Arabic) variant : SA -السعودیة - -// xn--mgbqly7c0a67fbc ("AlSaudiah" Arabic) variant : SA -السعودیۃ - -// xn--mgbqly7cvafr ("AlSaudiah" Arabic) variant : SA -السعوديه - -// xn--ogbpf8fl ("Syria" Arabic) : SY -سورية - -// xn--mgbtf8fl ("Syria" Arabic) variant : SY -سوريا - -// xn--yfro4i67o Singapore ("Singapore" Chinese-Han) : SG -新加坡 - -// xn--clchc0ea0b2g2a9gcd ("Singapore" Tamil) : SG -சிங்கப்பூர் - -// xn--o3cw4h ("Thai" Thai) : TH -// http://www.thnic.co.th -ไทย - -// xn--pgbs0dh ("Tunis") : TN -// http://nic.tn -تونس - -// xn--kpry57d ("Taiwan" Chinese-Han-Traditional) : TW -// http://www.twnic.net/english/dn/dn_07a.htm -台灣 - -// xn--kprw13d ("Taiwan" Chinese-Han-Simplified) : TW -// http://www.twnic.net/english/dn/dn_07a.htm -台湾 - -// xn--nnx388a ("Taiwan") variant : TW -臺灣 - -// xn--j1amh ("ukr" Cyrillic) : UA -укр - -// xn--mgb2ddes ("AlYemen" Arabic) : YE -اليمن - -// xxx : http://icmregistry.com -xxx - -// ye : http://www.y.net.ye/services/domain_name.htm -*.ye - -// za : http://www.zadna.org.za/slds.html -*.za - -// zm : http://en.wikipedia.org/wiki/.zm -*.zm - -// zw : http://en.wikipedia.org/wiki/.zw -*.zw - -// ===END ICANN DOMAINS=== -// ===BEGIN PRIVATE DOMAINS=== - -// info.at : http://www.info.at/ -biz.at -info.at - -// priv.at : http://www.nic.priv.at/ -// Submitted by registry <lendl@nic.at> 2008-06-09 -priv.at - -// co.ca : http://registry.co.ca -co.ca - -// CentralNic : http://www.centralnic.com/names/domains -// Confirmed by registry <gavin.brown@centralnic.com> 2008-06-09 -ar.com -br.com -cn.com -de.com -eu.com -gb.com -gr.com -hu.com -jpn.com -kr.com -no.com -qc.com -ru.com -sa.com -se.com -uk.com -us.com -uy.com -za.com -gb.net -jp.net -se.net -uk.net -ae.org -us.org -com.de - -// Opera Software, A.S.A. -// Requested by Yngve Pettersen <yngve@opera.com> 2009-11-26 -operaunite.com - -// Google, Inc. -// Requested by Eduardo Vela <evn@google.com> 2010-09-06 -appspot.com - -// iki.fi : Submitted by Hannu Aronsson <haa@iki.fi> 2009-11-05 -iki.fi - -// c.la : http://www.c.la/ -c.la - -// ZaNiC : http://www.za.net/ -// Confirmed by registry <hostmaster@nic.za.net> 2009-10-03 -za.net -za.org - -// CoDNS B.V. -// Added 2010-05-23. -co.nl -co.no - -// Mainseek Sp. z o.o. : http://www.co.pl/ -co.pl - -// DynDNS.com : http://www.dyndns.com/services/dns/dyndns/ -dyndns-at-home.com -dyndns-at-work.com -dyndns-blog.com -dyndns-free.com -dyndns-home.com -dyndns-ip.com -dyndns-mail.com -dyndns-office.com -dyndns-pics.com -dyndns-remote.com -dyndns-server.com -dyndns-web.com -dyndns-wiki.com -dyndns-work.com -dyndns.biz -dyndns.info -dyndns.org -dyndns.tv -at-band-camp.net -ath.cx -barrel-of-knowledge.info -barrell-of-knowledge.info -better-than.tv -blogdns.com -blogdns.net -blogdns.org -blogsite.org -boldlygoingnowhere.org -broke-it.net -buyshouses.net -cechire.com -dnsalias.com -dnsalias.net -dnsalias.org -dnsdojo.com -dnsdojo.net -dnsdojo.org -does-it.net -doesntexist.com -doesntexist.org -dontexist.com -dontexist.net -dontexist.org -doomdns.com -doomdns.org -dvrdns.org -dyn-o-saur.com -dynalias.com -dynalias.net -dynalias.org -dynathome.net -dyndns.ws -endofinternet.net -endofinternet.org -endoftheinternet.org -est-a-la-maison.com -est-a-la-masion.com -est-le-patron.com -est-mon-blogueur.com -for-better.biz -for-more.biz -for-our.info -for-some.biz -for-the.biz -forgot.her.name -forgot.his.name -from-ak.com -from-al.com -from-ar.com -from-az.net -from-ca.com -from-co.net -from-ct.com -from-dc.com -from-de.com -from-fl.com -from-ga.com -from-hi.com -from-ia.com -from-id.com -from-il.com -from-in.com -from-ks.com -from-ky.com -from-la.net -from-ma.com -from-md.com -from-me.org -from-mi.com -from-mn.com -from-mo.com -from-ms.com -from-mt.com -from-nc.com -from-nd.com -from-ne.com -from-nh.com -from-nj.com -from-nm.com -from-nv.com -from-ny.net -from-oh.com -from-ok.com -from-or.com -from-pa.com -from-pr.com -from-ri.com -from-sc.com -from-sd.com -from-tn.com -from-tx.com -from-ut.com -from-va.com -from-vt.com -from-wa.com -from-wi.com -from-wv.com -from-wy.com -ftpaccess.cc -fuettertdasnetz.de -game-host.org -game-server.cc -getmyip.com -gets-it.net -go.dyndns.org -gotdns.com -gotdns.org -groks-the.info -groks-this.info -ham-radio-op.net -here-for-more.info -hobby-site.com -hobby-site.org -home.dyndns.org -homedns.org -homeftp.net -homeftp.org -homeip.net -homelinux.com -homelinux.net -homelinux.org -homeunix.com -homeunix.net -homeunix.org -iamallama.com -in-the-band.net -is-a-anarchist.com -is-a-blogger.com -is-a-bookkeeper.com -is-a-bruinsfan.org -is-a-bulls-fan.com -is-a-candidate.org -is-a-caterer.com -is-a-celticsfan.org -is-a-chef.com -is-a-chef.net -is-a-chef.org -is-a-conservative.com -is-a-cpa.com -is-a-cubicle-slave.com -is-a-democrat.com -is-a-designer.com -is-a-doctor.com -is-a-financialadvisor.com -is-a-geek.com -is-a-geek.net -is-a-geek.org -is-a-green.com -is-a-guru.com -is-a-hard-worker.com -is-a-hunter.com -is-a-knight.org -is-a-landscaper.com -is-a-lawyer.com -is-a-liberal.com -is-a-libertarian.com -is-a-linux-user.org -is-a-llama.com -is-a-musician.com -is-a-nascarfan.com -is-a-nurse.com -is-a-painter.com -is-a-patsfan.org -is-a-personaltrainer.com -is-a-photographer.com -is-a-player.com -is-a-republican.com -is-a-rockstar.com -is-a-socialist.com -is-a-soxfan.org -is-a-student.com -is-a-teacher.com -is-a-techie.com -is-a-therapist.com -is-an-accountant.com -is-an-actor.com -is-an-actress.com -is-an-anarchist.com -is-an-artist.com -is-an-engineer.com -is-an-entertainer.com -is-by.us -is-certified.com -is-found.org -is-gone.com -is-into-anime.com -is-into-cars.com -is-into-cartoons.com -is-into-games.com -is-leet.com -is-lost.org -is-not-certified.com -is-saved.org -is-slick.com -is-uberleet.com -is-very-bad.org -is-very-evil.org -is-very-good.org -is-very-nice.org -is-very-sweet.org -is-with-theband.com -isa-geek.com -isa-geek.net -isa-geek.org -isa-hockeynut.com -issmarterthanyou.com -isteingeek.de -istmein.de -kicks-ass.net -kicks-ass.org -knowsitall.info -land-4-sale.us -lebtimnetz.de -leitungsen.de -likes-pie.com -likescandy.com -merseine.nu -mine.nu -misconfused.org -mypets.ws -myphotos.cc -neat-url.com -office-on-the.net -on-the-web.tv -podzone.net -podzone.org -readmyblog.org -saves-the-whales.com -scrapper-site.net -scrapping.cc -selfip.biz -selfip.com -selfip.info -selfip.net -selfip.org -sells-for-less.com -sells-for-u.com -sells-it.net -sellsyourhome.org -servebbs.com -servebbs.net -servebbs.org -serveftp.net -serveftp.org -servegame.org -shacknet.nu -simple-url.com -space-to-rent.com -stuff-4-sale.org -stuff-4-sale.us -teaches-yoga.com -thruhere.net -traeumtgerade.de -webhop.biz -webhop.info -webhop.net -webhop.org -worse-than.tv -writesthisblog.com - -// ===END PRIVATE DOMAINS=== diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/test.js deleted file mode 100644 index 3cce815e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/test.js +++ /dev/null @@ -1,1340 +0,0 @@ -/* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - -var vows = require('vows'); -var assert = require('assert'); -var async = require('async'); - -// NOTE use require("tough-cookie") in your own code: -var tough = require('./lib/cookie'); -var Cookie = tough.Cookie; -var CookieJar = tough.CookieJar; - - -function dateVows(table) { - var theVows = { }; - var keys = Object.keys(table).forEach(function(date) { - var expect = table[date]; - theVows[date] = function() { - var got = tough.parseDate(date) ? 'valid' : 'invalid'; - assert.equal(got, expect ? 'valid' : 'invalid'); - }; - }); - return { "date parsing": theVows }; -} - -function matchVows(func,table) { - var theVows = {}; - table.forEach(function(item) { - var str = item[0]; - var dom = item[1]; - var expect = item[2]; - var label = str+(expect?" matches ":" doesn't match ")+dom; - theVows[label] = function() { - assert.equal(func(str,dom),expect); - }; - }); - return theVows; -} - -function defaultPathVows(table) { - var theVows = {}; - table.forEach(function(item) { - var str = item[0]; - var expect = item[1]; - var label = str+" gives "+expect; - theVows[label] = function() { - assert.equal(tough.defaultPath(str),expect); - }; - }); - return theVows; -} - -var atNow = Date.now(); -function at(offset) { return {now: new Date(atNow+offset)} } - -vows.describe('Cookie Jar') -.addBatch({ - "all defined": function() { - assert.ok(Cookie); - assert.ok(CookieJar); - }, -}) -.addBatch( - dateVows({ - "Wed, 09 Jun 2021 10:18:14 GMT": true, - "Wed, 09 Jun 2021 22:18:14 GMT": true, - "Tue, 18 Oct 2011 07:42:42.123 GMT": true, - "18 Oct 2011 07:42:42 GMT": true, - "8 Oct 2011 7:42:42 GMT": true, - "8 Oct 2011 7:2:42 GMT": false, - "Oct 18 2011 07:42:42 GMT": true, - "Tue Oct 18 2011 07:05:03 GMT+0000 (GMT)": true, - "09 Jun 2021 10:18:14 GMT": true, - "99 Jix 3038 48:86:72 ZMT": false, - '01 Jan 1970 00:00:00 GMT': true, - '01 Jan 1600 00:00:00 GMT': false, // before 1601 - '01 Jan 1601 00:00:00 GMT': true, - '10 Feb 81 13:00:00 GMT': true, // implicit year - 'Thu, 01 Jan 1970 00:00:010 GMT': true, // strange time, non-strict OK - 'Thu, 17-Apr-2014 02:12:29 GMT': true, // dashes - 'Thu, 17-Apr-2014 02:12:29 UTC': true, // dashes and UTC - }) -) -.addBatch({ - "strict date parse of Thu, 01 Jan 1970 00:00:010 GMT": { - topic: function() { - return tough.parseDate('Thu, 01 Jan 1970 00:00:010 GMT', true) ? true : false; - }, - "invalid": function(date) { - assert.equal(date,false); - }, - } -}) -.addBatch({ - "formatting": { - "a simple cookie": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=b'); - }, - }, - "a cookie with spaces in the value": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'beta gamma'; - return c; - }, - "doesn't validate": function(c) { - assert.ok(!c.validate()); - }, - "to string": function(c) { - assert.equal(c.toString(), 'a="beta gamma"'); - }, - }, - "with an empty value and HttpOnly": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.httpOnly = true; - return c; - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=; HttpOnly'); - } - }, - "with an expiry": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.setExpires("Oct 18 2011 07:05:03 GMT"); - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=b; Expires=Tue, 18 Oct 2011 07:05:03 GMT'); - }, - "to short string": function(c) { - assert.equal(c.cookieString(), 'a=b'); - }, - }, - "with a max-age": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.setExpires("Oct 18 2011 07:05:03 GMT"); - c.maxAge = 12345; - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); // mabe this one *shouldn't*? - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=b; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Max-Age=12345'); - }, - }, - "with a bunch of things": function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.setExpires("Oct 18 2011 07:05:03 GMT"); - c.maxAge = 12345; - c.domain = 'example.com'; - c.path = '/foo'; - c.secure = true; - c.httpOnly = true; - c.extensions = ['MyExtension']; - assert.equal(c.toString(), 'a=b; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Max-Age=12345; Domain=example.com; Path=/foo; Secure; HttpOnly; MyExtension'); - }, - "a host-only cookie": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.hostOnly = true; - c.domain = 'shouldnt-stringify.example.com'; - c.path = '/should-stringify'; - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=b; Path=/should-stringify'); - }, - }, - "minutes are '10'": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.expires = new Date(1284113410000); - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); - }, - "to string": function(c) { - var str = c.toString(); - assert.notEqual(str, 'a=b; Expires=Fri, 010 Sep 2010 010:010:010 GMT'); - assert.equal(str, 'a=b; Expires=Fri, 10 Sep 2010 10:10:10 GMT'); - }, - } - } -}) -.addBatch({ - "TTL with max-age": function() { - var c = new Cookie(); - c.maxAge = 123; - assert.equal(c.TTL(), 123000); - assert.equal(c.expiryTime(new Date(9000000)), 9123000); - }, - "TTL with zero max-age": function() { - var c = new Cookie(); - c.key = 'a'; c.value = 'b'; - c.maxAge = 0; // should be treated as "earliest representable" - assert.equal(c.TTL(), 0); - assert.equal(c.expiryTime(new Date(9000000)), -Infinity); - assert.ok(!c.validate()); // not valid, really: non-zero-digit *DIGIT - }, - "TTL with negative max-age": function() { - var c = new Cookie(); - c.key = 'a'; c.value = 'b'; - c.maxAge = -1; // should be treated as "earliest representable" - assert.equal(c.TTL(), 0); - assert.equal(c.expiryTime(new Date(9000000)), -Infinity); - assert.ok(!c.validate()); // not valid, really: non-zero-digit *DIGIT - }, - "TTL with max-age and expires": function() { - var c = new Cookie(); - c.maxAge = 123; - c.expires = new Date(Date.now()+9000); - assert.equal(c.TTL(), 123000); - assert.ok(c.isPersistent()); - }, - "TTL with expires": function() { - var c = new Cookie(); - var now = Date.now(); - c.expires = new Date(now+9000); - assert.equal(c.TTL(now), 9000); - assert.equal(c.expiryTime(), c.expires.getTime()); - }, - "TTL with old expires": function() { - var c = new Cookie(); - c.setExpires('17 Oct 2010 00:00:00 GMT'); - assert.ok(c.TTL() < 0); - assert.ok(c.isPersistent()); - }, - "default TTL": { - topic: function() { return new Cookie() }, - "is Infinite-future": function(c) { assert.equal(c.TTL(), Infinity) }, - "is a 'session' cookie": function(c) { assert.ok(!c.isPersistent()) }, - }, -}).addBatch({ - "Parsing": { - "simple": { - topic: function() { - return Cookie.parse('a=bcd',true) || null; - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'a') }, - "value": function(c) { assert.equal(c.value, 'bcd') }, - "no path": function(c) { assert.equal(c.path, null) }, - "no domain": function(c) { assert.equal(c.domain, null) }, - "no extensions": function(c) { assert.ok(!c.extensions) }, - }, - "with expiry": { - topic: function() { - return Cookie.parse('a=bcd; Expires=Tue, 18 Oct 2011 07:05:03 GMT',true) || null; - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'a') }, - "value": function(c) { assert.equal(c.value, 'bcd') }, - "has expires": function(c) { - assert.ok(c.expires !== Infinity, 'expiry is infinite when it shouldn\'t be'); - assert.equal(c.expires.getTime(), 1318921503000); - }, - }, - "with expiry and path": { - topic: function() { - return Cookie.parse('abc="xyzzy!"; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Path=/aBc',true) || null; - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'abc') }, - "value": function(c) { assert.equal(c.value, 'xyzzy!') }, - "has expires": function(c) { - assert.ok(c.expires !== Infinity, 'expiry is infinite when it shouldn\'t be'); - assert.equal(c.expires.getTime(), 1318921503000); - }, - "has path": function(c) { assert.equal(c.path, '/aBc'); }, - "no httponly or secure": function(c) { - assert.ok(!c.httpOnly); - assert.ok(!c.secure); - }, - }, - "with everything": { - topic: function() { - return Cookie.parse('abc="xyzzy!"; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Path=/aBc; Domain=example.com; Secure; HTTPOnly; Max-Age=1234; Foo=Bar; Baz', true) || null; - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'abc') }, - "value": function(c) { assert.equal(c.value, 'xyzzy!') }, - "has expires": function(c) { - assert.ok(c.expires !== Infinity, 'expiry is infinite when it shouldn\'t be'); - assert.equal(c.expires.getTime(), 1318921503000); - }, - "has path": function(c) { assert.equal(c.path, '/aBc'); }, - "has domain": function(c) { assert.equal(c.domain, 'example.com'); }, - "has httponly": function(c) { assert.equal(c.httpOnly, true); }, - "has secure": function(c) { assert.equal(c.secure, true); }, - "has max-age": function(c) { assert.equal(c.maxAge, 1234); }, - "has extensions": function(c) { - assert.ok(c.extensions); - assert.equal(c.extensions[0], 'Foo=Bar'); - assert.equal(c.extensions[1], 'Baz'); - }, - }, - "invalid expires": { - "strict": function() { assert.ok(!Cookie.parse("a=b; Expires=xyzzy", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; Expires=xyzzy"); - assert.ok(c); - assert.equal(c.expires, Infinity); - }, - }, - "zero max-age": { - "strict": function() { assert.ok(!Cookie.parse("a=b; Max-Age=0", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; Max-Age=0"); - assert.ok(c); - assert.equal(c.maxAge, 0); - }, - }, - "negative max-age": { - "strict": function() { assert.ok(!Cookie.parse("a=b; Max-Age=-1", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; Max-Age=-1"); - assert.ok(c); - assert.equal(c.maxAge, -1); - }, - }, - "empty domain": { - "strict": function() { assert.ok(!Cookie.parse("a=b; domain=", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; domain="); - assert.ok(c); - assert.equal(c.domain, null); - }, - }, - "dot domain": { - "strict": function() { assert.ok(!Cookie.parse("a=b; domain=.", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; domain=."); - assert.ok(c); - assert.equal(c.domain, null); - }, - }, - "uppercase domain": { - "strict lowercases": function() { - var c = Cookie.parse("a=b; domain=EXAMPLE.COM"); - assert.ok(c); - assert.equal(c.domain, 'example.com'); - }, - "non-strict lowercases": function() { - var c = Cookie.parse("a=b; domain=EXAMPLE.COM"); - assert.ok(c); - assert.equal(c.domain, 'example.com'); - }, - }, - "trailing dot in domain": { - topic: function() { - return Cookie.parse("a=b; Domain=example.com.", true) || null; - }, - "has the domain": function(c) { assert.equal(c.domain,"example.com.") }, - "but doesn't validate": function(c) { assert.equal(c.validate(),false) }, - }, - "empty path": { - "strict": function() { assert.ok(!Cookie.parse("a=b; path=", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; path="); - assert.ok(c); - assert.equal(c.path, null); - }, - }, - "no-slash path": { - "strict": function() { assert.ok(!Cookie.parse("a=b; path=xyzzy", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; path=xyzzy"); - assert.ok(c); - assert.equal(c.path, null); - }, - }, - "trailing semi-colons after path": { - topic: function () { - return [ - "a=b; path=/;", - "c=d;;;;" - ]; - }, - "strict": function (t) { - assert.ok(!Cookie.parse(t[0], true)); - assert.ok(!Cookie.parse(t[1], true)); - }, - "non-strict": function (t) { - var c1 = Cookie.parse(t[0]); - var c2 = Cookie.parse(t[1]); - assert.ok(c1); - assert.ok(c2); - assert.equal(c1.path, '/'); - } - }, - "secure-with-value": { - "strict": function() { assert.ok(!Cookie.parse("a=b; Secure=xyzzy", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; Secure=xyzzy"); - assert.ok(c); - assert.equal(c.secure, true); - }, - }, - "httponly-with-value": { - "strict": function() { assert.ok(!Cookie.parse("a=b; HttpOnly=xyzzy", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; HttpOnly=xyzzy"); - assert.ok(c); - assert.equal(c.httpOnly, true); - }, - }, - "garbage": { - topic: function() { - return Cookie.parse("\x08", true) || null; - }, - "doesn't parse": function(c) { assert.equal(c,null) }, - }, - "public suffix domain": { - topic: function() { - return Cookie.parse("a=b; domain=kyoto.jp", true) || null; - }, - "parses fine": function(c) { - assert.ok(c); - assert.equal(c.domain, 'kyoto.jp'); - }, - "but fails validation": function(c) { - assert.ok(c); - assert.ok(!c.validate()); - }, - }, - "Ironically, Google 'GAPS' cookie has very little whitespace": { - topic: function() { - return Cookie.parse("GAPS=1:A1aaaaAaAAa1aaAaAaaAAAaaa1a11a:aaaAaAaAa-aaaA1-;Path=/;Expires=Thu, 17-Apr-2014 02:12:29 GMT;Secure;HttpOnly"); - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'GAPS') }, - "value": function(c) { assert.equal(c.value, '1:A1aaaaAaAAa1aaAaAaaAAAaaa1a11a:aaaAaAaAa-aaaA1-') }, - "path": function(c) { - assert.notEqual(c.path, '/;Expires'); // BUG - assert.equal(c.path, '/'); - }, - "expires": function(c) { - assert.notEqual(c.expires, Infinity); - assert.equal(c.expires.getTime(), 1397700749000); - }, - "secure": function(c) { assert.ok(c.secure) }, - "httponly": function(c) { assert.ok(c.httpOnly) }, - }, - "lots of equal signs": { - topic: function() { - return Cookie.parse("queryPref=b=c&d=e; Path=/f=g; Expires=Thu, 17 Apr 2014 02:12:29 GMT; HttpOnly"); - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'queryPref') }, - "value": function(c) { assert.equal(c.value, 'b=c&d=e') }, - "path": function(c) { - assert.equal(c.path, '/f=g'); - }, - "expires": function(c) { - assert.notEqual(c.expires, Infinity); - assert.equal(c.expires.getTime(), 1397700749000); - }, - "httponly": function(c) { assert.ok(c.httpOnly) }, - } - } -}) -.addBatch({ - "domain normalization": { - "simple": function() { - var c = new Cookie(); - c.domain = "EXAMPLE.com"; - assert.equal(c.canonicalizedDomain(), "example.com"); - }, - "extra dots": function() { - var c = new Cookie(); - c.domain = ".EXAMPLE.com"; - assert.equal(c.cdomain(), "example.com"); - }, - "weird trailing dot": function() { - var c = new Cookie(); - c.domain = "EXAMPLE.ca."; - assert.equal(c.canonicalizedDomain(), "example.ca."); - }, - "weird internal dots": function() { - var c = new Cookie(); - c.domain = "EXAMPLE...ca."; - assert.equal(c.canonicalizedDomain(), "example...ca."); - }, - "IDN": function() { - var c = new Cookie(); - c.domain = "δοκιμή.δοκιμή"; // "test.test" in greek - assert.equal(c.canonicalizedDomain(), "xn--jxalpdlp.xn--jxalpdlp"); - } - } -}) -.addBatch({ - "Domain Match":matchVows(tough.domainMatch, [ - // str, dom, expect - ["example.com", "example.com", true], - ["eXaMpLe.cOm", "ExAmPlE.CoM", true], - ["no.ca", "yes.ca", false], - ["wwwexample.com", "example.com", false], - ["www.example.com", "example.com", true], - ["example.com", "www.example.com", false], - ["www.subdom.example.com", "example.com", true], - ["www.subdom.example.com", "subdom.example.com", true], - ["example.com", "example.com.", false], // RFC6265 S4.1.2.3 - ["192.168.0.1", "168.0.1", false], // S5.1.3 "The string is a host name" - [null, "example.com", null], - ["example.com", null, null], - [null, null, null], - [undefined, undefined, null], - ]) -}) -.addBatch({ - "default-path": defaultPathVows([ - [null,"/"], - ["/","/"], - ["/file","/"], - ["/dir/file","/dir"], - ["noslash","/"], - ]) -}) -.addBatch({ - "Path-Match": matchVows(tough.pathMatch, [ - // request, cookie, match - ["/","/",true], - ["/dir","/",true], - ["/","/dir",false], - ["/dir/","/dir/", true], - ["/dir/file","/dir/",true], - ["/dir/file","/dir",true], - ["/directory","/dir",false], - ]) -}) -.addBatch({ - "Cookie Sorting": { - topic: function() { - var cookies = []; - var now = Date.now(); - cookies.push(Cookie.parse("a=0; Domain=example.com")); - cookies.push(Cookie.parse("b=1; Domain=www.example.com")); - cookies.push(Cookie.parse("c=2; Domain=example.com; Path=/pathA")); - cookies.push(Cookie.parse("d=3; Domain=www.example.com; Path=/pathA")); - cookies.push(Cookie.parse("e=4; Domain=example.com; Path=/pathA/pathB")); - cookies.push(Cookie.parse("f=5; Domain=www.example.com; Path=/pathA/pathB")); - - // force a stable creation time consistent with the order above since - // some may have been created at now + 1ms. - var i = cookies.length; - cookies.forEach(function(cookie) { - cookie.creation = new Date(now - 100*(i--)); - }); - - // weak shuffle: - cookies = cookies.sort(function(){return Math.random()-0.5}); - - cookies = cookies.sort(tough.cookieCompare); - return cookies; - }, - "got": function(cookies) { - assert.lengthOf(cookies, 6); - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['e','f','c','d','a','b']); - }, - } -}) -.addBatch({ - "CookieJar": { - "Setting a basic cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com; Path=/"); - assert.strictEqual(c.hostOnly, null); - assert.instanceOf(c.creation, Date); - assert.strictEqual(c.lastAccessed, null); - c.creation = new Date(Date.now()-10000); - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "works": function(c) { assert.instanceOf(c,Cookie) }, // C is for Cookie, good enough for me - "gets timestamped": function(c) { - assert.ok(c.creation); - assert.ok(Date.now() - c.creation.getTime() < 5000); // recently stamped - assert.ok(c.lastAccessed); - assert.equal(c.creation, c.lastAccessed); - assert.equal(c.TTL(), Infinity); - assert.ok(!c.isPersistent()); - }, - }, - "Setting a no-path cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com"); - assert.strictEqual(c.hostOnly, null); - assert.instanceOf(c.creation, Date); - assert.strictEqual(c.lastAccessed, null); - c.creation = new Date(Date.now()-10000); - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "domain": function(c) { assert.equal(c.domain, 'example.com') }, - "path is /": function(c) { assert.equal(c.path, '/') }, - "path was derived": function(c) { assert.strictEqual(c.pathIsDefault, true) }, - }, - "Setting a cookie already marked as host-only": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com"); - assert.strictEqual(c.hostOnly, null); - assert.instanceOf(c.creation, Date); - assert.strictEqual(c.lastAccessed, null); - c.creation = new Date(Date.now()-10000); - c.hostOnly = true; - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "domain": function(c) { assert.equal(c.domain, 'example.com') }, - "still hostOnly": function(c) { assert.strictEqual(c.hostOnly, true) }, - }, - "Setting a session cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b"); - assert.strictEqual(c.path, null); - cj.setCookie(c, 'http://www.example.com/dir/index.html', this.callback); - }, - "works": function(c) { assert.instanceOf(c,Cookie) }, - "gets the domain": function(c) { assert.equal(c.domain, 'www.example.com') }, - "gets the default path": function(c) { assert.equal(c.path, '/dir') }, - "is 'hostOnly'": function(c) { assert.ok(c.hostOnly) }, - }, - "Setting wrong domain cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=fooxample.com; Path=/"); - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "fails": function(err,c) { - assert.ok(err.message.match(/domain/i)); - assert.ok(!c); - }, - }, - "Setting sub-domain cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=www.example.com; Path=/"); - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "fails": function(err,c) { - assert.ok(err.message.match(/domain/i)); - assert.ok(!c); - }, - }, - "Setting super-domain cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com; Path=/"); - cj.setCookie(c, 'http://www.app.example.com/index.html', this.callback); - }, - "success": function(err,c) { - assert.ok(!err); - assert.equal(c.domain, 'example.com'); - }, - }, - "Setting HttpOnly cookie over non-HTTP API": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com; Path=/; HttpOnly"); - cj.setCookie(c, 'http://example.com/index.html', {http:false}, this.callback); - }, - "fails": function(err,c) { - assert.match(err.message, /HttpOnly/i); - assert.ok(!c); - }, - }, - }, - "Cookie Jar store eight cookies": { - topic: function() { - var cj = new CookieJar(); - var ex = 'http://example.com/index.html'; - var tasks = []; - tasks.push(function(next) { - cj.setCookie('a=1; Domain=example.com; Path=/',ex,at(0),next); - }); - tasks.push(function(next) { - cj.setCookie('b=2; Domain=example.com; Path=/; HttpOnly',ex,at(1000),next); - }); - tasks.push(function(next) { - cj.setCookie('c=3; Domain=example.com; Path=/; Secure',ex,at(2000),next); - }); - tasks.push(function(next) { // path - cj.setCookie('d=4; Domain=example.com; Path=/foo',ex,at(3000),next); - }); - tasks.push(function(next) { // host only - cj.setCookie('e=5',ex,at(4000),next); - }); - tasks.push(function(next) { // other domain - cj.setCookie('f=6; Domain=nodejs.org; Path=/','http://nodejs.org',at(5000),next); - }); - tasks.push(function(next) { // expired - cj.setCookie('g=7; Domain=example.com; Path=/; Expires=Tue, 18 Oct 2011 00:00:00 GMT',ex,at(6000),next); - }); - tasks.push(function(next) { // expired via Max-Age - cj.setCookie('h=8; Domain=example.com; Path=/; Max-Age=1',ex,next); - }); - var cb = this.callback; - async.parallel(tasks, function(err,results){ - setTimeout(function() { - cb(err,cj,results); - }, 2000); // so that 'h=8' expires - }); - }, - "setup ok": function(err,cj,results) { - assert.ok(1); - }, - "then retrieving for http://nodejs.org": { - topic: function(cj,results) { - cj.getCookies('http://nodejs.org',this.callback); - }, - "get a nodejs cookie": function(cookies) { - assert.lengthOf(cookies, 1); - var cookie = cookies[0]; - assert.equal(cookie.domain, 'nodejs.org'); - }, - }, - "then retrieving for https://example.com": { - topic: function(cj,results) { - cj.getCookies('https://example.com',{secure:true},this.callback); - }, - "get a secure example cookie with others": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','b','c','e']); - }, - }, - "then retrieving for https://example.com (missing options)": { - topic: function(cj,results) { - cj.getCookies('https://example.com',this.callback); - }, - "get a secure example cookie with others": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','b','c','e']); - }, - }, - "then retrieving for http://example.com": { - topic: function(cj,results) { - cj.getCookies('http://example.com',this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','b','e']); - }, - }, - "then retrieving for http://EXAMPlE.com": { - topic: function(cj,results) { - cj.getCookies('http://EXAMPlE.com',this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','b','e']); - }, - }, - "then retrieving for http://example.com, non-HTTP": { - topic: function(cj,results) { - cj.getCookies('http://example.com',{http:false},this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','e']); - }, - }, - "then retrieving for http://example.com/foo/bar": { - topic: function(cj,results) { - cj.getCookies('http://example.com/foo/bar',this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['d','a','b','e']); - }, - }, - "then retrieving for http://example.com as a string": { - topic: function(cj,results) { - cj.getCookieString('http://example.com',this.callback); - }, - "get a single string": function(cookieHeader) { - assert.equal(cookieHeader, "a=1; b=2; e=5"); - }, - }, - "then retrieving for http://example.com as a set-cookie header": { - topic: function(cj,results) { - cj.getSetCookieStrings('http://example.com',this.callback); - }, - "get a single string": function(cookieHeaders) { - assert.lengthOf(cookieHeaders, 3); - assert.equal(cookieHeaders[0], "a=1; Domain=example.com; Path=/"); - assert.equal(cookieHeaders[1], "b=2; Domain=example.com; Path=/; HttpOnly"); - assert.equal(cookieHeaders[2], "e=5; Path=/"); - }, - }, - "then retrieving for http://www.example.com/": { - topic: function(cj,results) { - cj.getCookies('http://www.example.com/foo/bar',this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['d','a','b']); // note lack of 'e' - }, - }, - }, - "Repeated names": { - topic: function() { - var cb = this.callback; - var cj = new CookieJar(); - var ex = 'http://www.example.com/'; - var sc = cj.setCookie; - var tasks = []; - var now = Date.now(); - tasks.push(sc.bind(cj,'aaaa=xxxx',ex,at(0))); - tasks.push(sc.bind(cj,'aaaa=1111; Domain=www.example.com',ex,at(1000))); - tasks.push(sc.bind(cj,'aaaa=2222; Domain=example.com',ex,at(2000))); - tasks.push(sc.bind(cj,'aaaa=3333; Domain=www.example.com; Path=/pathA',ex,at(3000))); - async.series(tasks,function(err,results) { - results = results.filter(function(e) {return e !== undefined}); - cb(err,{cj:cj, cookies:results, now:now}); - }); - }, - "all got set": function(err,t) { - assert.lengthOf(t.cookies,4); - }, - "then getting 'em back": { - topic: function(t) { - var cj = t.cj; - cj.getCookies('http://www.example.com/pathA',this.callback); - }, - "there's just three": function (err,cookies) { - var vals = cookies.map(function(c) {return c.value}); - // may break with sorting; sorting should put 3333 first due to longest path: - assert.deepEqual(vals, ['3333','1111','2222']); - } - }, - }, - "CookieJar setCookie errors": { - "public-suffix domain": { - topic: function() { - var cj = new CookieJar(); - cj.setCookie('i=9; Domain=kyoto.jp; Path=/','kyoto.jp',this.callback); - }, - "errors": function(err,cookie) { - assert.ok(err); - assert.ok(!cookie); - assert.match(err.message, /public suffix/i); - }, - }, - "wrong domain": { - topic: function() { - var cj = new CookieJar(); - cj.setCookie('j=10; Domain=google.com; Path=/','google.ca',this.callback); - }, - "errors": function(err,cookie) { - assert.ok(err); - assert.ok(!cookie); - assert.match(err.message, /not in this host's domain/i); - }, - }, - "old cookie is HttpOnly": { - topic: function() { - var cb = this.callback; - var next = function (err,c) { - return cb(err,cj); - }; - var cj = new CookieJar(); - cj.setCookie('k=11; Domain=example.ca; Path=/; HttpOnly','http://example.ca',{http:true},next); - }, - "initial cookie is set": function(err,cj) { - assert.ok(!err); - }, - "but when trying to overwrite": { - topic: function(cj) { - var cb = this.callback; - cj.setCookie('k=12; Domain=example.ca; Path=/','http://example.ca',{http:false},function(err,c) {cb(null,err)}); - }, - "it's an error": function(err) { - assert.ok(err); - }, - "then, checking the original": { - topic: function(ignored,cj) { - assert.ok(cj instanceof CookieJar); - cj.getCookies('http://example.ca',{http:true},this.callback); - }, - "cookie has original value": function(err,cookies) { - assert.equal(err,null); - assert.lengthOf(cookies, 1); - assert.equal(cookies[0].value,11); - }, - }, - }, - }, - }, -}) -.addBatch({ - "JSON": { - "serialization": { - topic: function() { - var c = Cookie.parse('alpha=beta; Domain=example.com; Path=/foo; Expires=Tue, 19 Jan 2038 03:14:07 GMT; HttpOnly'); - return JSON.stringify(c); - }, - "gives a string": function(str) { - assert.equal(typeof str, "string"); - }, - "date is in ISO format": function(str) { - assert.match(str, /"expires":"2038-01-19T03:14:07\.000Z"/, 'expires is in ISO format'); - }, - }, - "deserialization": { - topic: function() { - var json = '{"key":"alpha","value":"beta","domain":"example.com","path":"/foo","expires":"2038-01-19T03:14:07.000Z","httpOnly":true,"lastAccessed":2000000000123}'; - return Cookie.fromJSON(json); - }, - "works": function(c) { - assert.ok(c); - }, - "key": function(c) { assert.equal(c.key, "alpha") }, - "value": function(c) { assert.equal(c.value, "beta") }, - "domain": function(c) { assert.equal(c.domain, "example.com") }, - "path": function(c) { assert.equal(c.path, "/foo") }, - "httpOnly": function(c) { assert.strictEqual(c.httpOnly, true) }, - "secure": function(c) { assert.strictEqual(c.secure, false) }, - "hostOnly": function(c) { assert.strictEqual(c.hostOnly, null) }, - "expires is a date object": function(c) { - assert.equal(c.expires.getTime(), 2147483647000); - }, - "lastAccessed is a date object": function(c) { - assert.equal(c.lastAccessed.getTime(), 2000000000123); - }, - "creation defaulted": function(c) { - assert.ok(c.creation.getTime()); - } - }, - "null deserialization": { - topic: function() { - return Cookie.fromJSON(null); - }, - "is null": function(cookie) { - assert.equal(cookie,null); - }, - }, - }, - "expiry deserialization": { - "Infinity": { - topic: Cookie.fromJSON.bind(null, '{"expires":"Infinity"}'), - "is infinite": function(c) { - assert.strictEqual(c.expires, "Infinity"); - assert.equal(c.expires, Infinity); - }, - }, - }, - "maxAge serialization": { - topic: function() { - return function(toSet) { - var c = new Cookie(); - c.key = 'foo'; c.value = 'bar'; - c.setMaxAge(toSet); - return JSON.stringify(c); - }; - }, - "zero": { - topic: function(f) { return f(0) }, - "looks good": function(str) { - assert.match(str, /"maxAge":0/); - }, - }, - "Infinity": { - topic: function(f) { return f(Infinity) }, - "looks good": function(str) { - assert.match(str, /"maxAge":"Infinity"/); - }, - }, - "-Infinity": { - topic: function(f) { return f(-Infinity) }, - "looks good": function(str) { - assert.match(str, /"maxAge":"-Infinity"/); - }, - }, - "null": { - topic: function(f) { return f(null) }, - "looks good": function(str) { - assert.match(str, /"maxAge":null/); - }, - }, - }, - "maxAge deserialization": { - "number": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":123}'), - "is the number": function(c) { - assert.strictEqual(c.maxAge, 123); - }, - }, - "null": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":null}'), - "is null": function(c) { - assert.strictEqual(c.maxAge, null); - }, - }, - "less than zero": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":-123}'), - "is -123": function(c) { - assert.strictEqual(c.maxAge, -123); - }, - }, - "Infinity": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":"Infinity"}'), - "is inf-as-string": function(c) { - assert.strictEqual(c.maxAge, "Infinity"); - }, - }, - "-Infinity": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":"-Infinity"}'), - "is inf-as-string": function(c) { - assert.strictEqual(c.maxAge, "-Infinity"); - }, - }, - } -}) -.addBatch({ - "permuteDomain": { - "base case": { - topic: tough.permuteDomain.bind(null,'example.com'), - "got the domain": function(list) { - assert.deepEqual(list, ['example.com']); - }, - }, - "two levels": { - topic: tough.permuteDomain.bind(null,'foo.bar.example.com'), - "got three things": function(list) { - assert.deepEqual(list, ['example.com','bar.example.com','foo.bar.example.com']); - }, - }, - "invalid domain": { - topic: tough.permuteDomain.bind(null,'foo.bar.example.localduhmain'), - "got three things": function(list) { - assert.equal(list, null); - }, - }, - }, - "permutePath": { - "base case": { - topic: tough.permutePath.bind(null,'/'), - "just slash": function(list) { - assert.deepEqual(list,['/']); - }, - }, - "single case": { - topic: tough.permutePath.bind(null,'/foo'), - "two things": function(list) { - assert.deepEqual(list,['/foo','/']); - }, - "path matching": function(list) { - list.forEach(function(e) { - assert.ok(tough.pathMatch('/foo',e)); - }); - }, - }, - "double case": { - topic: tough.permutePath.bind(null,'/foo/bar'), - "four things": function(list) { - assert.deepEqual(list,['/foo/bar','/foo','/']); - }, - "path matching": function(list) { - list.forEach(function(e) { - assert.ok(tough.pathMatch('/foo/bar',e)); - }); - }, - }, - "trailing slash": { - topic: tough.permutePath.bind(null,'/foo/bar/'), - "three things": function(list) { - assert.deepEqual(list,['/foo/bar','/foo','/']); - }, - "path matching": function(list) { - list.forEach(function(e) { - assert.ok(tough.pathMatch('/foo/bar/',e)); - }); - }, - }, - } -}) -.addBatch({ - "Issue 1": { - topic: function() { - var cj = new CookieJar(); - cj.setCookie('hello=world; path=/some/path/', 'http://domain/some/path/file', function(err,cookie) { - this.callback(err,{cj:cj, cookie:cookie}); - }.bind(this)); - }, - "stored a cookie": function(t) { - assert.ok(t.cookie); - }, - "cookie's path was modified to remove unnecessary slash": function(t) { - assert.equal(t.cookie.path, '/some/path'); - }, - "getting it back": { - topic: function(t) { - t.cj.getCookies('http://domain/some/path/file', function(err,cookies) { - this.callback(err, {cj:t.cj, cookies:cookies||[]}); - }.bind(this)); - }, - "got one cookie": function(t) { - assert.lengthOf(t.cookies, 1); - }, - "it's the right one": function(t) { - var c = t.cookies[0]; - assert.equal(c.key, 'hello'); - assert.equal(c.value, 'world'); - }, - } - } -}) -.addBatch({ - "expiry option": { - topic: function() { - var cb = this.callback; - var cj = new CookieJar(); - cj.setCookie('near=expiry; Domain=example.com; Path=/; Max-Age=1','http://www.example.com',at(-1), function(err,cookie) { - - cb(err, {cj:cj, cookie:cookie}); - }); - }, - "set the cookie": function(t) { - assert.ok(t.cookie, "didn't set?!"); - assert.equal(t.cookie.key, 'near'); - }, - "then, retrieving": { - topic: function(t) { - var cb = this.callback; - setTimeout(function() { - t.cj.getCookies('http://www.example.com', {http:true, expire:false}, function(err,cookies) { - t.cookies = cookies; - cb(err,t); - }); - },2000); - }, - "got the cookie": function(t) { - assert.lengthOf(t.cookies, 1); - assert.equal(t.cookies[0].key, 'near'); - }, - } - } -}) -.addBatch({ - "trailing semi-colon set into cj": { - topic: function () { - var cb = this.callback; - var cj = new CookieJar(); - var ex = 'http://www.example.com'; - var tasks = []; - tasks.push(function(next) { - cj.setCookie('broken_path=testme; path=/;',ex,at(-1),next); - }); - tasks.push(function(next) { - cj.setCookie('b=2; Path=/;;;;',ex,at(-1),next); - }); - async.parallel(tasks, function (err, cookies) { - cb(null, { - cj: cj, - cookies: cookies - }); - }); - }, - "check number of cookies": function (t) { - assert.lengthOf(t.cookies, 2, "didn't set"); - }, - "check *broken_path* was set properly": function (t) { - assert.equal(t.cookies[0].key, "broken_path"); - assert.equal(t.cookies[0].value, "testme"); - assert.equal(t.cookies[0].path, "/"); - }, - "check *b* was set properly": function (t) { - assert.equal(t.cookies[1].key, "b"); - assert.equal(t.cookies[1].value, "2"); - assert.equal(t.cookies[1].path, "/"); - }, - "retrieve the cookie": { - topic: function (t) { - var cb = this.callback; - t.cj.getCookies('http://www.example.com', {}, function (err, cookies) { - t.cookies = cookies; - cb(err, t); - }); - }, - "get the cookie": function(t) { - assert.lengthOf(t.cookies, 2); - assert.equal(t.cookies[0].key, 'broken_path'); - assert.equal(t.cookies[0].value, 'testme'); - assert.equal(t.cookies[1].key, "b"); - assert.equal(t.cookies[1].value, "2"); - assert.equal(t.cookies[1].path, "/"); - }, - }, - } -}) -.addBatch({ - "Constructor":{ - topic: function () { - return new Cookie({ - key: 'test', - value: 'b', - maxAge: 60 - }); - }, - 'check for key property': function (c) { - assert.ok(c); - assert.equal(c.key, 'test'); - }, - 'check for value property': function (c) { - assert.equal(c.value, 'b'); - }, - 'check for maxAge': function (c) { - assert.equal(c.maxAge, 60); - }, - 'check for default values for unspecified properties': function (c) { - assert.equal(c.expires, "Infinity"); - assert.equal(c.secure, false); - assert.equal(c.httpOnly, false); - } - } -}) -.addBatch({ - "allPaths option": { - topic: function() { - var cj = new CookieJar(); - var tasks = []; - tasks.push(cj.setCookie.bind(cj, 'nopath_dom=qq; Path=/; Domain=example.com', 'http://example.com', {})); - tasks.push(cj.setCookie.bind(cj, 'path_dom=qq; Path=/foo; Domain=example.com', 'http://example.com', {})); - tasks.push(cj.setCookie.bind(cj, 'nopath_host=qq; Path=/', 'http://www.example.com', {})); - tasks.push(cj.setCookie.bind(cj, 'path_host=qq; Path=/foo', 'http://www.example.com', {})); - tasks.push(cj.setCookie.bind(cj, 'other=qq; Path=/', 'http://other.example.com/', {})); - tasks.push(cj.setCookie.bind(cj, 'other2=qq; Path=/foo', 'http://other.example.com/foo', {})); - var cb = this.callback; - async.parallel(tasks, function(err,results) { - cb(err, {cj:cj, cookies: results}); - }); - }, - "all set": function(t) { - assert.equal(t.cookies.length, 6); - assert.ok(t.cookies.every(function(c) { return !!c })); - }, - "getting without allPaths": { - topic: function(t) { - var cb = this.callback; - var cj = t.cj; - cj.getCookies('http://www.example.com/', {}, function(err,cookies) { - cb(err, {cj:cj, cookies:cookies}); - }); - }, - "found just two cookies": function(t) { - assert.equal(t.cookies.length, 2); - }, - "all are path=/": function(t) { - assert.ok(t.cookies.every(function(c) { return c.path === '/' })); - }, - "no 'other' cookies": function(t) { - assert.ok(!t.cookies.some(function(c) { return (/^other/).test(c.name) })); - }, - }, - "getting without allPaths for /foo": { - topic: function(t) { - var cb = this.callback; - var cj = t.cj; - cj.getCookies('http://www.example.com/foo', {}, function(err,cookies) { - cb(err, {cj:cj, cookies:cookies}); - }); - }, - "found four cookies": function(t) { - assert.equal(t.cookies.length, 4); - }, - "no 'other' cookies": function(t) { - assert.ok(!t.cookies.some(function(c) { return (/^other/).test(c.name) })); - }, - }, - "getting with allPaths:true": { - topic: function(t) { - var cb = this.callback; - var cj = t.cj; - cj.getCookies('http://www.example.com/', {allPaths:true}, function(err,cookies) { - cb(err, {cj:cj, cookies:cookies}); - }); - }, - "found four cookies": function(t) { - assert.equal(t.cookies.length, 4); - }, - "no 'other' cookies": function(t) { - assert.ok(!t.cookies.some(function(c) { return (/^other/).test(c.name) })); - }, - }, - } -}) -.export(module); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/README.md deleted file mode 100644 index bb533d56..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/README.md +++ /dev/null @@ -1,4 +0,0 @@ -tunnel-agent -============ - -HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/index.js deleted file mode 100644 index 3f7bbb90..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/index.js +++ /dev/null @@ -1,227 +0,0 @@ -'use strict' - -var net = require('net') - , tls = require('tls') - , http = require('http') - , https = require('https') - , events = require('events') - , assert = require('assert') - , util = require('util') - ; - -exports.httpOverHttp = httpOverHttp -exports.httpsOverHttp = httpsOverHttp -exports.httpOverHttps = httpOverHttps -exports.httpsOverHttps = httpsOverHttps - - -function httpOverHttp(options) { - var agent = new TunnelingAgent(options) - agent.request = http.request - return agent -} - -function httpsOverHttp(options) { - var agent = new TunnelingAgent(options) - agent.request = http.request - agent.createSocket = createSecureSocket - return agent -} - -function httpOverHttps(options) { - var agent = new TunnelingAgent(options) - agent.request = https.request - return agent -} - -function httpsOverHttps(options) { - var agent = new TunnelingAgent(options) - agent.request = https.request - agent.createSocket = createSecureSocket - return agent -} - - -function TunnelingAgent(options) { - var self = this - self.options = options || {} - self.proxyOptions = self.options.proxy || {} - self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets - self.requests = [] - self.sockets = [] - - self.on('free', function onFree(socket, host, port) { - for (var i = 0, len = self.requests.length; i < len; ++i) { - var pending = self.requests[i] - if (pending.host === host && pending.port === port) { - // Detect the request to connect same origin server, - // reuse the connection. - self.requests.splice(i, 1) - pending.request.onSocket(socket) - return - } - } - socket.destroy() - self.removeSocket(socket) - }) -} -util.inherits(TunnelingAgent, events.EventEmitter) - -TunnelingAgent.prototype.addRequest = function addRequest(req, host, port) { - var self = this - - if (self.sockets.length >= this.maxSockets) { - // We are over limit so we'll add it to the queue. - self.requests.push({host: host, port: port, request: req}) - return - } - - // If we are under maxSockets create a new one. - self.createSocket({host: host, port: port, request: req}, function(socket) { - socket.on('free', onFree) - socket.on('close', onCloseOrRemove) - socket.on('agentRemove', onCloseOrRemove) - req.onSocket(socket) - - function onFree() { - self.emit('free', socket, host, port) - } - - function onCloseOrRemove(err) { - self.removeSocket() - socket.removeListener('free', onFree) - socket.removeListener('close', onCloseOrRemove) - socket.removeListener('agentRemove', onCloseOrRemove) - } - }) -} - -TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { - var self = this - var placeholder = {} - self.sockets.push(placeholder) - - var connectOptions = mergeOptions({}, self.proxyOptions, - { method: 'CONNECT' - , path: options.host + ':' + options.port - , agent: false - } - ) - if (connectOptions.proxyAuth) { - connectOptions.headers = connectOptions.headers || {} - connectOptions.headers['Proxy-Authorization'] = 'Basic ' + - new Buffer(connectOptions.proxyAuth).toString('base64') - } - - debug('making CONNECT request') - var connectReq = self.request(connectOptions) - connectReq.useChunkedEncodingByDefault = false // for v0.6 - connectReq.once('response', onResponse) // for v0.6 - connectReq.once('upgrade', onUpgrade) // for v0.6 - connectReq.once('connect', onConnect) // for v0.7 or later - connectReq.once('error', onError) - connectReq.end() - - function onResponse(res) { - // Very hacky. This is necessary to avoid http-parser leaks. - res.upgrade = true - } - - function onUpgrade(res, socket, head) { - // Hacky. - process.nextTick(function() { - onConnect(res, socket, head) - }) - } - - function onConnect(res, socket, head) { - connectReq.removeAllListeners() - socket.removeAllListeners() - - if (res.statusCode === 200) { - assert.equal(head.length, 0) - debug('tunneling connection has established') - self.sockets[self.sockets.indexOf(placeholder)] = socket - cb(socket) - } else { - debug('tunneling socket could not be established, statusCode=%d', res.statusCode) - var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode) - error.code = 'ECONNRESET' - options.request.emit('error', error) - self.removeSocket(placeholder) - } - } - - function onError(cause) { - connectReq.removeAllListeners() - - debug('tunneling socket could not be established, cause=%s\n', cause.message, cause.stack) - var error = new Error('tunneling socket could not be established, ' + 'cause=' + cause.message) - error.code = 'ECONNRESET' - options.request.emit('error', error) - self.removeSocket(placeholder) - } -} - -TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { - var pos = this.sockets.indexOf(socket) - if (pos === -1) return - - this.sockets.splice(pos, 1) - - var pending = this.requests.shift() - if (pending) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createSocket(pending, function(socket) { - pending.request.onSocket(socket) - }) - } -} - -function createSecureSocket(options, cb) { - var self = this - TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { - // 0 is dummy port for v0.6 - var secureSocket = tls.connect(0, mergeOptions({}, self.options, - { servername: options.host - , socket: socket - } - )) - cb(secureSocket) - }) -} - - -function mergeOptions(target) { - for (var i = 1, len = arguments.length; i < len; ++i) { - var overrides = arguments[i] - if (typeof overrides === 'object') { - var keys = Object.keys(overrides) - for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { - var k = keys[j] - if (overrides[k] !== undefined) { - target[k] = overrides[k] - } - } - } - } - return target -} - - -var debug -if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug = function() { - var args = Array.prototype.slice.call(arguments) - if (typeof args[0] === 'string') { - args[0] = 'TUNNEL: ' + args[0] - } else { - args.unshift('TUNNEL:') - } - console.error.apply(console, args) - } -} else { - debug = function() {} -} -exports.debug = debug // for test diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/package.json deleted file mode 100644 index acfa6e1c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "tunnel-agent", - "description": "HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.", - "version": "0.3.0", - "repository": { - "url": "https://github.com/mikeal/tunnel-agent" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "tunnel-agent\n============\n\nHTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/tunnel-agent/issues" - }, - "homepage": "https://github.com/mikeal/tunnel-agent", - "_id": "tunnel-agent@0.3.0", - "dist": { - "shasum": "ad681b68f5321ad2827c4cfb1b7d5df2cfe942ee" - }, - "_from": "tunnel-agent@~0.3.0", - "_resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/package.json deleted file mode 100755 index 57c99c02..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "request", - "description": "Simplified HTTP request client.", - "tags": [ - "http", - "simple", - "util", - "utility" - ], - "version": "2.31.0", - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com" - }, - "repository": { - "type": "git", - "url": "http://github.com/mikeal/request.git" - }, - "bugs": { - "url": "http://github.com/mikeal/request/issues" - }, - "engines": [ - "node >= 0.8.0" - ], - "main": "index.js", - "dependencies": { - "qs": "~0.6.0", - "json-stringify-safe": "~5.0.0", - "forever-agent": "~0.5.0", - "node-uuid": "~1.4.0", - "mime": "~1.2.9", - "tough-cookie": "~0.9.15", - "form-data": "~0.1.0", - "tunnel-agent": "~0.3.0", - "http-signature": "~0.10.0", - "oauth-sign": "~0.3.0", - "hawk": "~1.0.0", - "aws-sign2": "~0.5.0" - }, - "optionalDependencies": { - "tough-cookie": "~0.9.15", - "form-data": "~0.1.0", - "tunnel-agent": "~0.3.0", - "http-signature": "~0.10.0", - "oauth-sign": "~0.3.0", - "hawk": "~1.0.0", - "aws-sign2": "~0.5.0" - }, - "scripts": { - "test": "node tests/run.js" - }, - "readme": "# Request -- Simplified HTTP client\n\n[![NPM](https://nodei.co/npm/request.png)](https://nodei.co/npm/request/)\n\n## Super simple to use\n\nRequest is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default.\n\n```javascript\nvar request = require('request');\nrequest('http://www.google.com', function (error, response, body) {\n if (!error && response.statusCode == 200) {\n console.log(body) // Print the google web page.\n }\n})\n```\n\n## Streaming\n\nYou can stream any response to a file stream.\n\n```javascript\nrequest('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))\n```\n\nYou can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one).\n\n```javascript\nfs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json'))\n```\n\nRequest can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers.\n\n```javascript\nrequest.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))\n```\n\nNow let’s get fancy.\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n if (req.method === 'PUT') {\n req.pipe(request.put('http://mysite.com/doodle.png'))\n } else if (req.method === 'GET' || req.method === 'HEAD') {\n request.get('http://mysite.com/doodle.png').pipe(resp)\n }\n }\n})\n```\n\nYou can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don't really care about security, you can do:\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n var x = request('http://mysite.com/doodle.png')\n req.pipe(x)\n x.pipe(resp)\n }\n})\n```\n\nAnd since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :)\n\n```javascript\nreq.pipe(request('http://mysite.com/doodle.png')).pipe(resp)\n```\n\nAlso, none of this new functionality conflicts with requests previous features, it just expands them.\n\n```javascript\nvar r = request.defaults({'proxy':'http://localproxy.com'})\n\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n r.get('http://google.com/doodle.png').pipe(resp)\n }\n})\n```\n\nYou can still use intermediate proxies, the requests will still follow HTTP forwards, etc.\n\n## Forms\n\n`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API.\n\nURL-encoded forms are simple.\n\n```javascript\nrequest.post('http://service.com/upload', {form:{key:'value'}})\n// or\nrequest.post('http://service.com/upload').form({key:'value'})\n```\n\nFor `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). You don’t need to worry about piping the form object or setting the headers, `request` will handle that for you.\n\n```javascript\nvar r = request.post('http://service.com/upload')\nvar form = r.form()\nform.append('my_field', 'my_value')\nform.append('my_buffer', new Buffer([1, 2, 3]))\nform.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png'))\nform.append('remote_file', request('http://google.com/doodle.png'))\n```\n\n## HTTP Authentication\n\n```javascript\nrequest.get('http://some.server.com/').auth('username', 'password', false);\n// or\nrequest.get('http://some.server.com/', {\n 'auth': {\n 'user': 'username',\n 'pass': 'password',\n 'sendImmediately': false\n }\n});\n```\n\nIf passed as an option, `auth` should be a hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). The method form takes parameters `auth(username, password, sendImmediately)`.\n\n`sendImmediately` defaults to `true`, which causes a basic authentication header to be sent. If `sendImmediately` is `false`, then `request` will retry with a proper authentication header after receiving a `401` response from the server (which must contain a `WWW-Authenticate` header indicating the required authentication method).\n\nDigest authentication is supported, but it only works with `sendImmediately` set to `false`; otherwise `request` will send basic authentication on the initial request, which will probably cause the request to fail.\n\n## OAuth Signing\n\n```javascript\n// Twitter OAuth\nvar qs = require('querystring')\n , oauth =\n { callback: 'http://mysite.com/callback/'\n , consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n }\n , url = 'https://api.twitter.com/oauth/request_token'\n ;\nrequest.post({url:url, oauth:oauth}, function (e, r, body) {\n // Ideally, you would take the body in the response\n // and construct a URL that a user clicks on (like a sign in button).\n // The verifier is only available in the response after a user has\n // verified with twitter that they are authorizing your app.\n var access_token = qs.parse(body)\n , oauth =\n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: access_token.oauth_token\n , verifier: access_token.oauth_verifier\n }\n , url = 'https://api.twitter.com/oauth/access_token'\n ;\n request.post({url:url, oauth:oauth}, function (e, r, body) {\n var perm_token = qs.parse(body)\n , oauth =\n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: perm_token.oauth_token\n , token_secret: perm_token.oauth_token_secret\n }\n , url = 'https://api.twitter.com/1.1/users/show.json?'\n , params =\n { screen_name: perm_token.screen_name\n , user_id: perm_token.user_id\n }\n ;\n url += qs.stringify(params)\n request.get({url:url, oauth:oauth, json:true}, function (e, r, user) {\n console.log(user)\n })\n })\n})\n```\n\n### Custom HTTP Headers\n\nHTTP Headers, such as `User-Agent`, can be set in the `options` object.\nIn the example below, we call the github API to find out the number\nof stars and forks for the request repository. This requires a\ncustom `User-Agent` header as well as https.\n\n```javascript\nvar request = require('request');\n\nvar options = {\n\turl: 'https://api.github.com/repos/mikeal/request',\n\theaders: {\n\t\t'User-Agent': 'request'\n\t}\n};\n\nfunction callback(error, response, body) {\n\tif (!error && response.statusCode == 200) {\n\t\tvar info = JSON.parse(body);\n\t\tconsole.log(info.stargazers_count + \" Stars\");\n\t\tconsole.log(info.forks_count + \" Forks\");\n\t}\n}\n\nrequest(options, callback);\n```\n\n### request(options, callback)\n\nThe first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional.\n\n* `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()`\n* `qs` - object containing querystring values to be appended to the `uri`\n* `method` - http method (default: `\"GET\"`)\n* `headers` - http headers (default: `{}`)\n* `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer` or `String`.\n* `form` - when passed an object, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded; charset=utf-8` header. When passed no options, a `FormData` instance is returned (and is piped to request).\n* `auth` - A hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). See documentation above.\n* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON.\n* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below.\n* `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`)\n* `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`)\n* `maxRedirects` - the maximum number of redirects to follow (default: `10`)\n* `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`.\n* `pool` - A hash object containing the agents for these requests. If omitted, the request will use the global pool (which is set to node's default `maxSockets`)\n* `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool.\n* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request\n* `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`)\n* `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above.\n* `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example).\n* `strictSSL` - If `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option.\n* `jar` - If `true`, remember cookies for future use (or define your custom cookie jar; see examples section)\n* `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`. Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services)\n* `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options.\n* `localAddress` - Local interface to bind for network connections.\n\n\nThe callback argument gets 3 arguments: \n\n1. An `error` when applicable (usually from [`http.ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) object)\n2. An [`http.IncomingMessage`](http://nodejs.org/api/http.html#http_http_incomingmessage) object\n3. The third is the `response` body (`String` or `Buffer`, or JSON object if the `json` option is supplied)\n\n## Convenience methods\n\nThere are also shorthand methods for different HTTP METHODs and some other conveniences.\n\n### request.defaults(options)\n\nThis method returns a wrapper around the normal request API that defaults to whatever options you pass in to it.\n\n### request.put\n\nSame as `request()`, but defaults to `method: \"PUT\"`.\n\n```javascript\nrequest.put(url)\n```\n\n### request.patch\n\nSame as `request()`, but defaults to `method: \"PATCH\"`.\n\n```javascript\nrequest.patch(url)\n```\n\n### request.post\n\nSame as `request()`, but defaults to `method: \"POST\"`.\n\n```javascript\nrequest.post(url)\n```\n\n### request.head\n\nSame as request() but defaults to `method: \"HEAD\"`.\n\n```javascript\nrequest.head(url)\n```\n\n### request.del\n\nSame as `request()`, but defaults to `method: \"DELETE\"`.\n\n```javascript\nrequest.del(url)\n```\n\n### request.get\n\nSame as `request()` (for uniformity).\n\n```javascript\nrequest.get(url)\n```\n### request.cookie\n\nFunction that creates a new cookie.\n\n```javascript\nrequest.cookie('cookie_string_here')\n```\n### request.jar\n\nFunction that creates a new cookie jar.\n\n```javascript\nrequest.jar()\n```\n\n\n## Examples:\n\n```javascript\n var request = require('request')\n , rand = Math.floor(Math.random()*100000000).toString()\n ;\n request(\n { method: 'PUT'\n , uri: 'http://mikeal.iriscouch.com/testjs/' + rand\n , multipart:\n [ { 'content-type': 'application/json'\n , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}})\n }\n , { body: 'I am an attachment' }\n ]\n }\n , function (error, response, body) {\n if(response.statusCode == 201){\n console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand)\n } else {\n console.log('error: '+ response.statusCode)\n console.log(body)\n }\n }\n )\n```\n\nCookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`).\n\n```javascript\nvar request = request.defaults({jar: true})\nrequest('http://www.google.com', function () {\n request('http://images.google.com')\n})\n```\n\nTo use a custom cookie jar (instead `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`)\n\n```javascript\nvar j = request.jar()\nvar request = request.defaults({jar:j})\nrequest('http://www.google.com', function () {\n request('http://images.google.com')\n})\n```\nOR\n\nNote that `setCookie` requires at least three parameters, and the last is required to be a callback.\n\n```javascript\nvar j = request.jar()\nvar cookie = request.cookie('your_cookie_here')\nj.setCookie(cookie, uri, function (err, cookie){})\nrequest({url: 'http://www.google.com', jar: j}, function () {\n request('http://images.google.com')\n})\n```\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/mikeal/request", - "_id": "request@2.31.0", - "dist": { - "shasum": "4c8ac967c9a4b9410cb4ba1a61fdb644267eeeff" - }, - "_from": "request@~2.31.0", - "_resolved": "https://registry.npmjs.org/request/-/request-2.31.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/request.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/request.js deleted file mode 100644 index 3c03c47d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/request/request.js +++ /dev/null @@ -1,1260 +0,0 @@ -var optional = require('./lib/optional') - , http = require('http') - , https = optional('https') - , tls = optional('tls') - , url = require('url') - , util = require('util') - , stream = require('stream') - , qs = require('qs') - , querystring = require('querystring') - , crypto = require('crypto') - - , oauth = optional('oauth-sign') - , hawk = optional('hawk') - , aws = optional('aws-sign') - , httpSignature = optional('http-signature') - , uuid = require('node-uuid') - , mime = require('mime') - , tunnel = optional('tunnel-agent') - , _safeStringify = require('json-stringify-safe') - - , ForeverAgent = require('forever-agent') - , FormData = optional('form-data') - - , Cookie = optional('tough-cookie') - , CookieJar = Cookie && Cookie.CookieJar - , cookieJar = CookieJar && new CookieJar - - , copy = require('./lib/copy') - , debug = require('./lib/debug') - , getSafe = require('./lib/getSafe') - ; - -function safeStringify (obj) { - var ret - try { ret = JSON.stringify(obj) } - catch (e) { ret = _safeStringify(obj) } - return ret -} - -var globalPool = {} -var isUrl = /^https?:/i - - -// Hacky fix for pre-0.4.4 https -if (https && !https.Agent) { - https.Agent = function (options) { - http.Agent.call(this, options) - } - util.inherits(https.Agent, http.Agent) - https.Agent.prototype._getConnection = function (host, port, cb) { - var s = tls.connect(port, host, this.options, function () { - // do other checks here? - if (cb) cb() - }) - return s - } -} - -function isReadStream (rs) { - if (rs.readable && rs.path && rs.mode) { - return true - } -} - -function toBase64 (str) { - return (new Buffer(str || "", "ascii")).toString("base64") -} - -function md5 (str) { - return crypto.createHash('md5').update(str).digest('hex') -} - -function Request (options) { - stream.Stream.call(this) - this.readable = true - this.writable = true - - if (typeof options === 'string') { - options = {uri:options} - } - - var reserved = Object.keys(Request.prototype) - for (var i in options) { - if (reserved.indexOf(i) === -1) { - this[i] = options[i] - } else { - if (typeof options[i] === 'function') { - delete options[i] - } - } - } - - if (options.method) { - this.explicitMethod = true - } - - this.canTunnel = options.tunnel !== false && tunnel; - - this.init(options) -} -util.inherits(Request, stream.Stream) -Request.prototype.init = function (options) { - // init() contains all the code to setup the request object. - // the actual outgoing request is not started until start() is called - // this function is called from both the constructor and on redirect. - var self = this - if (!options) options = {} - - if (!self.method) self.method = options.method || 'GET' - self.localAddress = options.localAddress - - debug(options) - if (!self.pool && self.pool !== false) self.pool = globalPool - self.dests = self.dests || [] - self.__isRequestRequest = true - - // Protect against double callback - if (!self._callback && self.callback) { - self._callback = self.callback - self.callback = function () { - if (self._callbackCalled) return // Print a warning maybe? - self._callbackCalled = true - self._callback.apply(self, arguments) - } - self.on('error', self.callback.bind()) - self.on('complete', self.callback.bind(self, null)) - } - - if (self.url && !self.uri) { - // People use this property instead all the time so why not just support it. - self.uri = self.url - delete self.url - } - - if (!self.uri) { - // this will throw if unhandled but is handleable when in a redirect - return self.emit('error', new Error("options.uri is a required argument")) - } else { - if (typeof self.uri == "string") self.uri = url.parse(self.uri) - } - - if (self.strictSSL === false) { - self.rejectUnauthorized = false - } - - if (self.proxy) { - if (typeof self.proxy == 'string') self.proxy = url.parse(self.proxy) - - // do the HTTP CONNECT dance using koichik/node-tunnel - if (http.globalAgent && self.uri.protocol === "https:" && self.canTunnel) { - var tunnelFn = self.proxy.protocol === "http:" - ? tunnel.httpsOverHttp : tunnel.httpsOverHttps - - var tunnelOptions = { proxy: { host: self.proxy.hostname - , port: +self.proxy.port - , proxyAuth: self.proxy.auth - , headers: { Host: self.uri.hostname + ':' + - (self.uri.port || self.uri.protocol === 'https:' ? 443 : 80) }} - , rejectUnauthorized: self.rejectUnauthorized - , ca: this.ca } - - self.agent = tunnelFn(tunnelOptions) - self.tunnel = true - } - } - - if (!self.uri.pathname) {self.uri.pathname = '/'} - - if (!self.uri.host) { - // Invalid URI: it may generate lot of bad errors, like "TypeError: Cannot call method 'indexOf' of undefined" in CookieJar - // Detect and reject it as soon as possible - var faultyUri = url.format(self.uri) - var message = 'Invalid URI "' + faultyUri + '"' - if (Object.keys(options).length === 0) { - // No option ? This can be the sign of a redirect - // As this is a case where the user cannot do anything (they didn't call request directly with this URL) - // they should be warned that it can be caused by a redirection (can save some hair) - message += '. This can be caused by a crappy redirection.' - } - self.emit('error', new Error(message)) - return // This error was fatal - } - - self._redirectsFollowed = self._redirectsFollowed || 0 - self.maxRedirects = (self.maxRedirects !== undefined) ? self.maxRedirects : 10 - self.followRedirect = (self.followRedirect !== undefined) ? self.followRedirect : true - self.followAllRedirects = (self.followAllRedirects !== undefined) ? self.followAllRedirects : false - if (self.followRedirect || self.followAllRedirects) - self.redirects = self.redirects || [] - - self.headers = self.headers ? copy(self.headers) : {} - - self.setHost = false - if (!self.hasHeader('host')) { - self.setHeader('host', self.uri.hostname) - if (self.uri.port) { - if ( !(self.uri.port === 80 && self.uri.protocol === 'http:') && - !(self.uri.port === 443 && self.uri.protocol === 'https:') ) - self.setHeader('host', self.getHeader('host') + (':'+self.uri.port) ) - } - self.setHost = true - } - - self.jar(self._jar || options.jar) - - if (!self.uri.port) { - if (self.uri.protocol == 'http:') {self.uri.port = 80} - else if (self.uri.protocol == 'https:') {self.uri.port = 443} - } - - if (self.proxy && !self.tunnel) { - self.port = self.proxy.port - self.host = self.proxy.hostname - } else { - self.port = self.uri.port - self.host = self.uri.hostname - } - - self.clientErrorHandler = function (error) { - if (self._aborted) return - if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' - && self.agent.addRequestNoreuse) { - self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) } - self.start() - self.req.end() - return - } - if (self.timeout && self.timeoutTimer) { - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - } - self.emit('error', error) - } - - self._parserErrorHandler = function (error) { - if (this.res) { - if (this.res.request) { - this.res.request.emit('error', error) - } else { - this.res.emit('error', error) - } - } else { - this._httpMessage.emit('error', error) - } - } - - if (options.form) { - self.form(options.form) - } - - if (options.qs) self.qs(options.qs) - - if (self.uri.path) { - self.path = self.uri.path - } else { - self.path = self.uri.pathname + (self.uri.search || "") - } - - if (self.path.length === 0) self.path = '/' - - - // Auth must happen last in case signing is dependent on other headers - if (options.oauth) { - self.oauth(options.oauth) - } - - if (options.aws) { - self.aws(options.aws) - } - - if (options.hawk) { - self.hawk(options.hawk) - } - - if (options.httpSignature) { - self.httpSignature(options.httpSignature) - } - - if (options.auth) { - if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) options.auth.user = options.auth.username - if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) options.auth.pass = options.auth.password - - self.auth( - options.auth.user, - options.auth.pass, - options.auth.sendImmediately - ) - } - - if (self.uri.auth && !self.hasHeader('authorization')) { - var authPieces = self.uri.auth.split(':').map(function(item){ return querystring.unescape(item) }) - self.auth(authPieces[0], authPieces.slice(1).join(':'), true) - } - if (self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization') && !self.tunnel) { - self.setHeader('proxy-authorization', "Basic " + toBase64(self.proxy.auth.split(':').map(function(item){ return querystring.unescape(item)}).join(':'))) - } - - - if (self.proxy && !self.tunnel) self.path = (self.uri.protocol + '//' + self.uri.host + self.path) - - if (options.json) { - self.json(options.json) - } else if (options.multipart) { - self.boundary = uuid() - self.multipart(options.multipart) - } - - if (self.body) { - var length = 0 - if (!Buffer.isBuffer(self.body)) { - if (Array.isArray(self.body)) { - for (var i = 0; i < self.body.length; i++) { - length += self.body[i].length - } - } else { - self.body = new Buffer(self.body) - length = self.body.length - } - } else { - length = self.body.length - } - if (length) { - if (!self.hasHeader('content-length')) self.setHeader('content-length', length) - } else { - throw new Error('Argument error, options.body.') - } - } - - var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol - , defaultModules = {'http:':http, 'https:':https} - , httpModules = self.httpModules || {} - ; - self.httpModule = httpModules[protocol] || defaultModules[protocol] - - if (!self.httpModule) return this.emit('error', new Error("Invalid protocol")) - - if (options.ca) self.ca = options.ca - - if (!self.agent) { - if (options.agentOptions) self.agentOptions = options.agentOptions - - if (options.agentClass) { - self.agentClass = options.agentClass - } else if (options.forever) { - self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL - } else { - self.agentClass = self.httpModule.Agent - } - } - - if (self.pool === false) { - self.agent = false - } else { - self.agent = self.agent || self.getAgent() - if (self.maxSockets) { - // Don't use our pooling if node has the refactored client - self.agent.maxSockets = self.maxSockets - } - if (self.pool.maxSockets) { - // Don't use our pooling if node has the refactored client - self.agent.maxSockets = self.pool.maxSockets - } - } - - self.on('pipe', function (src) { - if (self.ntick && self._started) throw new Error("You cannot pipe to this stream after the outbound request has started.") - self.src = src - if (isReadStream(src)) { - if (!self.hasHeader('content-type')) self.setHeader('content-type', mime.lookup(src.path)) - } else { - if (src.headers) { - for (var i in src.headers) { - if (!self.hasHeader(i)) { - self.setHeader(i, src.headers[i]) - } - } - } - if (self._json && !self.hasHeader('content-type')) - self.setHeader('content-type', 'application/json') - if (src.method && !self.explicitMethod) { - self.method = src.method - } - } - - // self.on('pipe', function () { - // console.error("You have already piped to this stream. Pipeing twice is likely to break the request.") - // }) - }) - - process.nextTick(function () { - if (self._aborted) return - - if (self._form) { - self.setHeaders(self._form.getHeaders()) - self._form.pipe(self) - } - if (self.body) { - if (Array.isArray(self.body)) { - self.body.forEach(function (part) { - self.write(part) - }) - } else { - self.write(self.body) - } - self.end() - } else if (self.requestBodyStream) { - console.warn("options.requestBodyStream is deprecated, please pass the request object to stream.pipe.") - self.requestBodyStream.pipe(self) - } else if (!self.src) { - if (self.method !== 'GET' && typeof self.method !== 'undefined') { - self.setHeader('content-length', 0) - } - self.end() - } - self.ntick = true - }) -} - -// Must call this when following a redirect from https to http or vice versa -// Attempts to keep everything as identical as possible, but update the -// httpModule, Tunneling agent, and/or Forever Agent in use. -Request.prototype._updateProtocol = function () { - var self = this - var protocol = self.uri.protocol - - if (protocol === 'https:') { - // previously was doing http, now doing https - // if it's https, then we might need to tunnel now. - if (self.proxy && self.canTunnel) { - self.tunnel = true - var tunnelFn = self.proxy.protocol === 'http:' - ? tunnel.httpsOverHttp : tunnel.httpsOverHttps - var tunnelOptions = { proxy: { host: self.proxy.hostname - , port: +self.proxy.port - , proxyAuth: self.proxy.auth } - , rejectUnauthorized: self.rejectUnauthorized - , ca: self.ca } - self.agent = tunnelFn(tunnelOptions) - return - } - - self.httpModule = https - switch (self.agentClass) { - case ForeverAgent: - self.agentClass = ForeverAgent.SSL - break - case http.Agent: - self.agentClass = https.Agent - break - default: - // nothing we can do. Just hope for the best. - return - } - - // if there's an agent, we need to get a new one. - if (self.agent) self.agent = self.getAgent() - - } else { - // previously was doing https, now doing http - // stop any tunneling. - if (self.tunnel) self.tunnel = false - self.httpModule = http - switch (self.agentClass) { - case ForeverAgent.SSL: - self.agentClass = ForeverAgent - break - case https.Agent: - self.agentClass = http.Agent - break - default: - // nothing we can do. just hope for the best - return - } - - // if there's an agent, then get a new one. - if (self.agent) { - self.agent = null - self.agent = self.getAgent() - } - } -} - -Request.prototype.getAgent = function () { - var Agent = this.agentClass - var options = {} - if (this.agentOptions) { - for (var i in this.agentOptions) { - options[i] = this.agentOptions[i] - } - } - if (this.ca) options.ca = this.ca - if (this.ciphers) options.ciphers = this.ciphers - if (this.secureProtocol) options.secureProtocol = this.secureProtocol - if (typeof this.rejectUnauthorized !== 'undefined') options.rejectUnauthorized = this.rejectUnauthorized - - if (this.cert && this.key) { - options.key = this.key - options.cert = this.cert - } - - var poolKey = '' - - // different types of agents are in different pools - if (Agent !== this.httpModule.Agent) { - poolKey += Agent.name - } - - if (!this.httpModule.globalAgent) { - // node 0.4.x - options.host = this.host - options.port = this.port - if (poolKey) poolKey += ':' - poolKey += this.host + ':' + this.port - } - - // ca option is only relevant if proxy or destination are https - var proxy = this.proxy - if (typeof proxy === 'string') proxy = url.parse(proxy) - var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:' - if (isHttps) { - if (options.ca) { - if (poolKey) poolKey += ':' - poolKey += options.ca - } - - if (typeof options.rejectUnauthorized !== 'undefined') { - if (poolKey) poolKey += ':' - poolKey += options.rejectUnauthorized - } - - if (options.cert) - poolKey += options.cert.toString('ascii') + options.key.toString('ascii') - - if (options.ciphers) { - if (poolKey) poolKey += ':' - poolKey += options.ciphers - } - - if (options.secureProtocol) { - if (poolKey) poolKey += ':' - poolKey += options.secureProtocol - } - } - - if (this.pool === globalPool && !poolKey && Object.keys(options).length === 0 && this.httpModule.globalAgent) { - // not doing anything special. Use the globalAgent - return this.httpModule.globalAgent - } - - // we're using a stored agent. Make sure it's protocol-specific - poolKey = this.uri.protocol + poolKey - - // already generated an agent for this setting - if (this.pool[poolKey]) return this.pool[poolKey] - - return this.pool[poolKey] = new Agent(options) -} - -Request.prototype.start = function () { - // start() is called once we are ready to send the outgoing HTTP request. - // this is usually called on the first write(), end() or on nextTick() - var self = this - - if (self._aborted) return - - self._started = true - self.method = self.method || 'GET' - self.href = self.uri.href - - if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) { - self.setHeader('content-length', self.src.stat.size) - } - if (self._aws) { - self.aws(self._aws, true) - } - - // We have a method named auth, which is completely different from the http.request - // auth option. If we don't remove it, we're gonna have a bad time. - var reqOptions = copy(self) - delete reqOptions.auth - - debug('make request', self.uri.href) - self.req = self.httpModule.request(reqOptions, self.onResponse.bind(self)) - - if (self.timeout && !self.timeoutTimer) { - self.timeoutTimer = setTimeout(function () { - self.req.abort() - var e = new Error("ETIMEDOUT") - e.code = "ETIMEDOUT" - self.emit("error", e) - }, self.timeout) - - // Set additional timeout on socket - in case if remote - // server freeze after sending headers - if (self.req.setTimeout) { // only works on node 0.6+ - self.req.setTimeout(self.timeout, function () { - if (self.req) { - self.req.abort() - var e = new Error("ESOCKETTIMEDOUT") - e.code = "ESOCKETTIMEDOUT" - self.emit("error", e) - } - }) - } - } - - self.req.on('error', self.clientErrorHandler) - self.req.on('drain', function() { - self.emit('drain') - }) - self.on('end', function() { - if ( self.req.connection ) self.req.connection.removeListener('error', self._parserErrorHandler) - }) - self.emit('request', self.req) -} -Request.prototype.onResponse = function (response) { - var self = this - debug('onResponse', self.uri.href, response.statusCode, response.headers) - response.on('end', function() { - debug('response end', self.uri.href, response.statusCode, response.headers) - }); - - if (response.connection.listeners('error').indexOf(self._parserErrorHandler) === -1) { - response.connection.once('error', self._parserErrorHandler) - } - if (self._aborted) { - debug('aborted', self.uri.href) - response.resume() - return - } - if (self._paused) response.pause() - else response.resume() - - self.response = response - response.request = self - response.toJSON = toJSON - - // XXX This is different on 0.10, because SSL is strict by default - if (self.httpModule === https && - self.strictSSL && - !response.client.authorized) { - debug('strict ssl error', self.uri.href) - var sslErr = response.client.authorizationError - self.emit('error', new Error('SSL Error: '+ sslErr)) - return - } - - if (self.setHost && self.hasHeader('host')) delete self.headers[self.hasHeader('host')] - if (self.timeout && self.timeoutTimer) { - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - } - - var addCookie = function (cookie) { - if (self._jar){ - var targetCookieJar = self._jar.setCookie?self._jar:cookieJar; - - //set the cookie if it's domain in the href's domain. - targetCookieJar.setCookie(cookie, self.uri.href, function(err){ - if (err){ - console.warn('set cookie failed,'+ err) - } - }) - } - - } - - if (hasHeader('set-cookie', response.headers) && (!self._disableCookies)) { - var headerName = hasHeader('set-cookie', response.headers) - if (Array.isArray(response.headers[headerName])) response.headers[headerName].forEach(addCookie) - else addCookie(response.headers[headerName]) - } - - var redirectTo = null - if (response.statusCode >= 300 && response.statusCode < 400 && hasHeader('location', response.headers)) { - var location = response.headers[hasHeader('location', response.headers)] - debug('redirect', location) - - if (self.followAllRedirects) { - redirectTo = location - } else if (self.followRedirect) { - switch (self.method) { - case 'PATCH': - case 'PUT': - case 'POST': - case 'DELETE': - // Do not follow redirects - break - default: - redirectTo = location - break - } - } - } else if (response.statusCode == 401 && self._hasAuth && !self._sentAuth) { - var authHeader = response.headers[hasHeader('www-authenticate', response.headers)] - var authVerb = authHeader && authHeader.split(' ')[0] - debug('reauth', authVerb) - - switch (authVerb) { - case 'Basic': - self.auth(self._user, self._pass, true) - redirectTo = self.uri - break - - case 'Digest': - // TODO: More complete implementation of RFC 2617. - // - check challenge.algorithm - // - support algorithm="MD5-sess" - // - handle challenge.domain - // - support qop="auth-int" only - // - handle Authentication-Info (not necessarily?) - // - check challenge.stale (not necessarily?) - // - increase nc (not necessarily?) - // For reference: - // http://tools.ietf.org/html/rfc2617#section-3 - // https://github.com/bagder/curl/blob/master/lib/http_digest.c - - var challenge = {} - var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi - for (;;) { - var match = re.exec(authHeader) - if (!match) break - challenge[match[1]] = match[2] || match[3]; - } - - var ha1 = md5(self._user + ':' + challenge.realm + ':' + self._pass) - var ha2 = md5(self.method + ':' + self.uri.path) - var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth' - var nc = qop && '00000001' - var cnonce = qop && uuid().replace(/-/g, '') - var digestResponse = qop ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2) : md5(ha1 + ':' + challenge.nonce + ':' + ha2) - var authValues = { - username: self._user, - realm: challenge.realm, - nonce: challenge.nonce, - uri: self.uri.path, - qop: qop, - response: digestResponse, - nc: nc, - cnonce: cnonce, - algorithm: challenge.algorithm, - opaque: challenge.opaque - } - - authHeader = [] - for (var k in authValues) { - if (!authValues[k]) { - //ignore - } else if (k === 'qop' || k === 'nc' || k === 'algorithm') { - authHeader.push(k + '=' + authValues[k]) - } else { - authHeader.push(k + '="' + authValues[k] + '"') - } - } - authHeader = 'Digest ' + authHeader.join(', ') - self.setHeader('authorization', authHeader) - self._sentAuth = true - - redirectTo = self.uri - break - } - } - - if (redirectTo) { - debug('redirect to', redirectTo) - - // ignore any potential response body. it cannot possibly be useful - // to us at this point. - if (self._paused) response.resume() - - if (self._redirectsFollowed >= self.maxRedirects) { - self.emit('error', new Error("Exceeded maxRedirects. Probably stuck in a redirect loop "+self.uri.href)) - return - } - self._redirectsFollowed += 1 - - if (!isUrl.test(redirectTo)) { - redirectTo = url.resolve(self.uri.href, redirectTo) - } - - var uriPrev = self.uri - self.uri = url.parse(redirectTo) - - // handle the case where we change protocol from https to http or vice versa - if (self.uri.protocol !== uriPrev.protocol) { - self._updateProtocol() - } - - self.redirects.push( - { statusCode : response.statusCode - , redirectUri: redirectTo - } - ) - if (self.followAllRedirects && response.statusCode != 401) self.method = 'GET' - // self.method = 'GET' // Force all redirects to use GET || commented out fixes #215 - delete self.src - delete self.req - delete self.agent - delete self._started - if (response.statusCode != 401) { - // Remove parameters from the previous response, unless this is the second request - // for a server that requires digest authentication. - delete self.body - delete self._form - if (self.headers) { - if (self.hasHeader('host')) delete self.headers[self.hasHeader('host')] - if (self.hasHeader('content-type')) delete self.headers[self.hasHeader('content-type')] - if (self.hasHeader('content-length')) delete self.headers[self.hasHeader('content-length')] - } - } - - self.emit('redirect'); - - self.init() - return // Ignore the rest of the response - } else { - self._redirectsFollowed = self._redirectsFollowed || 0 - // Be a good stream and emit end when the response is finished. - // Hack to emit end on close because of a core bug that never fires end - response.on('close', function () { - if (!self._ended) self.response.emit('end') - }) - - if (self.encoding) { - if (self.dests.length !== 0) { - console.error("Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.") - } else { - response.setEncoding(self.encoding) - } - } - - self.emit('response', response) - - self.dests.forEach(function (dest) { - self.pipeDest(dest) - }) - - response.on("data", function (chunk) { - self._destdata = true - self.emit("data", chunk) - }) - response.on("end", function (chunk) { - self._ended = true - self.emit("end", chunk) - }) - response.on("close", function () {self.emit("close")}) - - if (self.callback) { - var buffer = [] - var bodyLen = 0 - self.on("data", function (chunk) { - buffer.push(chunk) - bodyLen += chunk.length - }) - self.on("end", function () { - debug('end event', self.uri.href) - if (self._aborted) { - debug('aborted', self.uri.href) - return - } - - if (buffer.length && Buffer.isBuffer(buffer[0])) { - debug('has body', self.uri.href, bodyLen) - var body = new Buffer(bodyLen) - var i = 0 - buffer.forEach(function (chunk) { - chunk.copy(body, i, 0, chunk.length) - i += chunk.length - }) - if (self.encoding === null) { - response.body = body - } else { - response.body = body.toString(self.encoding) - } - } else if (buffer.length) { - // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation. - // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse(). - if (self.encoding === 'utf8' && buffer[0].length > 0 && buffer[0][0] === "\uFEFF") { - buffer[0] = buffer[0].substring(1) - } - response.body = buffer.join('') - } - - if (self._json) { - try { - response.body = JSON.parse(response.body) - } catch (e) {} - } - debug('emitting complete', self.uri.href) - if(response.body == undefined && !self._json) { - response.body = ""; - } - self.emit('complete', response, response.body) - }) - } - //if no callback - else{ - self.on("end", function () { - if (self._aborted) { - debug('aborted', self.uri.href) - return - } - self.emit('complete', response); - }); - } - } - debug('finish init function', self.uri.href) -} - -Request.prototype.abort = function () { - this._aborted = true - - if (this.req) { - this.req.abort() - } - else if (this.response) { - this.response.abort() - } - - this.emit("abort") -} - -Request.prototype.pipeDest = function (dest) { - var response = this.response - // Called after the response is received - if (dest.headers && !dest.headersSent) { - if (hasHeader('content-type', response.headers)) { - var ctname = hasHeader('content-type', response.headers) - if (dest.setHeader) dest.setHeader(ctname, response.headers[ctname]) - else dest.headers[ctname] = response.headers[ctname] - } - - if (hasHeader('content-length', response.headers)) { - var clname = hasHeader('content-length', response.headers) - if (dest.setHeader) dest.setHeader(clname, response.headers[clname]) - else dest.headers[clname] = response.headers[clname] - } - } - if (dest.setHeader && !dest.headersSent) { - for (var i in response.headers) { - dest.setHeader(i, response.headers[i]) - } - dest.statusCode = response.statusCode - } - if (this.pipefilter) this.pipefilter(response, dest) -} - -// Composable API -Request.prototype.setHeader = function (name, value, clobber) { - if (clobber === undefined) clobber = true - if (clobber || !this.hasHeader(name)) this.headers[name] = value - else this.headers[this.hasHeader(name)] += ',' + value - return this -} -Request.prototype.setHeaders = function (headers) { - for (var i in headers) {this.setHeader(i, headers[i])} - return this -} -Request.prototype.hasHeader = function (header, headers) { - var headers = Object.keys(headers || this.headers) - , lheaders = headers.map(function (h) {return h.toLowerCase()}) - ; - header = header.toLowerCase() - for (var i=0;i<lheaders.length;i++) { - if (lheaders[i] === header) return headers[i] - } - return false -} - -var hasHeader = Request.prototype.hasHeader - -Request.prototype.qs = function (q, clobber) { - var base - if (!clobber && this.uri.query) base = qs.parse(this.uri.query) - else base = {} - - for (var i in q) { - base[i] = q[i] - } - - if (qs.stringify(base) === ''){ - return this - } - - this.uri = url.parse(this.uri.href.split('?')[0] + '?' + qs.stringify(base)) - this.url = this.uri - this.path = this.uri.path - - return this -} -Request.prototype.form = function (form) { - if (form) { - this.setHeader('content-type', 'application/x-www-form-urlencoded; charset=utf-8') - this.body = qs.stringify(form).toString('utf8') - return this - } - // create form-data object - this._form = new FormData() - return this._form -} -Request.prototype.multipart = function (multipart) { - var self = this - self.body = [] - - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) - } else { - var headerName = self.hasHeader('content-type'); - self.setHeader(headerName, self.headers[headerName].split(';')[0] + '; boundary=' + self.boundary) - } - - if (!multipart.forEach) throw new Error('Argument error, options.multipart.') - - if (self.preambleCRLF) { - self.body.push(new Buffer('\r\n')) - } - - multipart.forEach(function (part) { - var body = part.body - if(body == null) throw Error('Body attribute missing in multipart.') - delete part.body - var preamble = '--' + self.boundary + '\r\n' - Object.keys(part).forEach(function (key) { - preamble += key + ': ' + part[key] + '\r\n' - }) - preamble += '\r\n' - self.body.push(new Buffer(preamble)) - self.body.push(new Buffer(body)) - self.body.push(new Buffer('\r\n')) - }) - self.body.push(new Buffer('--' + self.boundary + '--')) - return self -} -Request.prototype.json = function (val) { - var self = this - - if (!self.hasHeader('accept')) self.setHeader('accept', 'application/json') - - this._json = true - if (typeof val === 'boolean') { - if (typeof this.body === 'object') { - this.body = safeStringify(this.body) - self.setHeader('content-type', 'application/json') - } - } else { - this.body = safeStringify(val) - self.setHeader('content-type', 'application/json') - } - return this -} -Request.prototype.getHeader = function (name, headers) { - var result, re, match - if (!headers) headers = this.headers - Object.keys(headers).forEach(function (key) { - re = new RegExp(name, 'i') - match = key.match(re) - if (match) result = headers[key] - }) - return result -} -var getHeader = Request.prototype.getHeader - -Request.prototype.auth = function (user, pass, sendImmediately) { - if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) { - throw new Error('auth() received invalid user or password') - } - this._user = user - this._pass = pass - this._hasAuth = true - var header = typeof pass !== 'undefined' ? user + ':' + pass : user - if (sendImmediately || typeof sendImmediately == 'undefined') { - this.setHeader('authorization', 'Basic ' + toBase64(header)) - this._sentAuth = true - } - return this -} -Request.prototype.aws = function (opts, now) { - if (!now) { - this._aws = opts - return this - } - var date = new Date() - this.setHeader('date', date.toUTCString()) - var auth = - { key: opts.key - , secret: opts.secret - , verb: this.method.toUpperCase() - , date: date - , contentType: this.getHeader('content-type') || '' - , md5: this.getHeader('content-md5') || '' - , amazonHeaders: aws.canonicalizeHeaders(this.headers) - } - if (opts.bucket && this.path) { - auth.resource = '/' + opts.bucket + this.path - } else if (opts.bucket && !this.path) { - auth.resource = '/' + opts.bucket - } else if (!opts.bucket && this.path) { - auth.resource = this.path - } else if (!opts.bucket && !this.path) { - auth.resource = '/' - } - auth.resource = aws.canonicalizeResource(auth.resource) - this.setHeader('authorization', aws.authorization(auth)) - - return this -} -Request.prototype.httpSignature = function (opts) { - var req = this - httpSignature.signRequest({ - getHeader: function(header) { - return getHeader(header, req.headers) - }, - setHeader: function(header, value) { - req.setHeader(header, value) - }, - method: this.method, - path: this.path - }, opts) - debug('httpSignature authorization', this.getHeader('authorization')) - - return this -} - -Request.prototype.hawk = function (opts) { - this.setHeader('Authorization', hawk.client.header(this.uri, this.method, opts).field) -} - -Request.prototype.oauth = function (_oauth) { - var form - if (this.hasHeader('content-type') && - this.getHeader('content-type').slice(0, 'application/x-www-form-urlencoded'.length) === - 'application/x-www-form-urlencoded' - ) { - form = qs.parse(this.body) - } - if (this.uri.query) { - form = qs.parse(this.uri.query) - } - if (!form) form = {} - var oa = {} - for (var i in form) oa[i] = form[i] - for (var i in _oauth) oa['oauth_'+i] = _oauth[i] - if (!oa.oauth_version) oa.oauth_version = '1.0' - if (!oa.oauth_timestamp) oa.oauth_timestamp = Math.floor( Date.now() / 1000 ).toString() - if (!oa.oauth_nonce) oa.oauth_nonce = uuid().replace(/-/g, '') - - oa.oauth_signature_method = 'HMAC-SHA1' - - var consumer_secret = oa.oauth_consumer_secret - delete oa.oauth_consumer_secret - var token_secret = oa.oauth_token_secret - delete oa.oauth_token_secret - var timestamp = oa.oauth_timestamp - - var baseurl = this.uri.protocol + '//' + this.uri.host + this.uri.pathname - var signature = oauth.hmacsign(this.method, baseurl, oa, consumer_secret, token_secret) - - // oa.oauth_signature = signature - for (var i in form) { - if ( i.slice(0, 'oauth_') in _oauth) { - // skip - } else { - delete oa['oauth_'+i] - if (i !== 'x_auth_mode') delete oa[i] - } - } - oa.oauth_timestamp = timestamp - var authHeader = 'OAuth '+Object.keys(oa).sort().map(function (i) {return i+'="'+oauth.rfc3986(oa[i])+'"'}).join(',') - authHeader += ',oauth_signature="' + oauth.rfc3986(signature) + '"' - this.setHeader('Authorization', authHeader) - return this -} -Request.prototype.jar = function (jar) { - var cookies - - if (this._redirectsFollowed === 0) { - this.originalCookieHeader = this.getHeader('cookie') - } - - if (!jar) { - // disable cookies - cookies = false - this._disableCookies = true - } else { - var targetCookieJar = (jar && jar.getCookieString)?jar:cookieJar; - var urihref = this.uri.href - - //fetch cookie in the Specified host - targetCookieJar.getCookieString(urihref, function(err, hrefCookie){ - if (err){ - console.warn('get cookieString failed,' +err) - } else { - cookies = hrefCookie - } - }) - - } - - //if need cookie and cookie is not empty - if (cookies && cookies.length) { - if (this.originalCookieHeader) { - // Don't overwrite existing Cookie header - this.setHeader('cookie', this.originalCookieHeader + '; ' + cookies) - } else { - this.setHeader('cookie', cookies) - } - } - this._jar = jar - return this -} - - -// Stream API -Request.prototype.pipe = function (dest, opts) { - if (this.response) { - if (this._destdata) { - throw new Error("You cannot pipe after data has been emitted from the response.") - } else if (this._ended) { - throw new Error("You cannot pipe after the response has been ended.") - } else { - stream.Stream.prototype.pipe.call(this, dest, opts) - this.pipeDest(dest) - return dest - } - } else { - this.dests.push(dest) - stream.Stream.prototype.pipe.call(this, dest, opts) - return dest - } -} -Request.prototype.write = function () { - if (!this._started) this.start() - return this.req.write.apply(this.req, arguments) -} -Request.prototype.end = function (chunk) { - if (chunk) this.write(chunk) - if (!this._started) this.start() - this.req.end() -} -Request.prototype.pause = function () { - if (!this.response) this._paused = true - else this.response.pause.apply(this.response, arguments) -} -Request.prototype.resume = function () { - if (!this.response) this._paused = false - else this.response.resume.apply(this.response, arguments) -} -Request.prototype.destroy = function () { - if (!this._ended) this.end() - else if (this.response) this.response.destroy() -} - -function toJSON () { - return getSafe(this, '__' + (((1+Math.random())*0x10000)|0).toString(16)) -} - -Request.prototype.toJSON = toJSON - - -module.exports = Request diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.jshintrc b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.jshintrc deleted file mode 100644 index c8ef3ca4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.travis.yml deleted file mode 100644 index 12b1a310..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/LICENSE deleted file mode 100644 index f6a0029d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/README.md deleted file mode 100644 index c9388b38..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/README.md +++ /dev/null @@ -1,131 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/.npmignore deleted file mode 100644 index 38344f87..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -build/ -test/ -examples/ -fs.js -zlib.js \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/README.md deleted file mode 100644 index be976683..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/README.md +++ /dev/null @@ -1,768 +0,0 @@ -# readable-stream - -A new class of streams for Node.js - -This module provides the new Stream base classes introduced in Node -v0.10, for use in Node v0.8. You can use it to have programs that -have to work with node v0.8, while being forward-compatible for v0.10 -and beyond. When you drop support for v0.8, you can remove this -module, and only use the native streams. - -This is almost exactly the same codebase as appears in Node v0.10. -However: - -1. The exported object is actually the Readable class. Decorating the - native `stream` module would be global pollution. -2. In v0.10, you can safely use `base64` as an argument to - `setEncoding` in Readable streams. However, in v0.8, the - StringDecoder class has no `end()` method, which is problematic for - Base64. So, don't use that, because it'll break and be weird. - -Other than that, the API is the same as `require('stream')` in v0.10, -so the API docs are reproduced below. - ----------- - - Stability: 2 - Unstable - -A stream is an abstract interface implemented by various objects in -Node. For example a request to an HTTP server is a stream, as is -stdout. Streams are readable, writable, or both. All streams are -instances of [EventEmitter][] - -You can load the Stream base classes by doing `require('stream')`. -There are base classes provided for Readable streams, Writable -streams, Duplex streams, and Transform streams. - -## Compatibility - -In earlier versions of Node, the Readable stream interface was -simpler, but also less powerful and less useful. - -* Rather than waiting for you to call the `read()` method, `'data'` - events would start emitting immediately. If you needed to do some - I/O to decide how to handle data, then you had to store the chunks - in some kind of buffer so that they would not be lost. -* The `pause()` method was advisory, rather than guaranteed. This - meant that you still had to be prepared to receive `'data'` events - even when the stream was in a paused state. - -In Node v0.10, the Readable class described below was added. For -backwards compatibility with older Node programs, Readable streams -switch into "old mode" when a `'data'` event handler is added, or when -the `pause()` or `resume()` methods are called. The effect is that, -even if you are not using the new `read()` method and `'readable'` -event, you no longer have to worry about losing `'data'` chunks. - -Most programs will continue to function normally. However, this -introduces an edge case in the following conditions: - -* No `'data'` event handler is added. -* The `pause()` and `resume()` methods are never called. - -For example, consider the following code: - -```javascript -// WARNING! BROKEN! -net.createServer(function(socket) { - - // we add an 'end' method, but never consume the data - socket.on('end', function() { - // It will never get here. - socket.end('I got your message (but didnt read it)\n'); - }); - -}).listen(1337); -``` - -In versions of node prior to v0.10, the incoming message data would be -simply discarded. However, in Node v0.10 and beyond, the socket will -remain paused forever. - -The workaround in this situation is to call the `resume()` method to -trigger "old mode" behavior: - -```javascript -// Workaround -net.createServer(function(socket) { - - socket.on('end', function() { - socket.end('I got your message (but didnt read it)\n'); - }); - - // start the flow of data, discarding it. - socket.resume(); - -}).listen(1337); -``` - -In addition to new Readable streams switching into old-mode, pre-v0.10 -style streams can be wrapped in a Readable class using the `wrap()` -method. - -## Class: stream.Readable - -<!--type=class--> - -A `Readable Stream` has the following methods, members, and events. - -Note that `stream.Readable` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -method. (See below.) - -### new stream.Readable([options]) - -* `options` {Object} - * `highWaterMark` {Number} The maximum number of bytes to store in - the internal buffer before ceasing to read from the underlying - resource. Default=16kb - * `encoding` {String} If specified, then buffers will be decoded to - strings using the specified encoding. Default=null - * `objectMode` {Boolean} Whether this stream should behave - as a stream of objects. Meaning that stream.read(n) returns - a single value instead of a Buffer of size n - -In classes that extend the Readable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### readable.\_read(size) - -* `size` {Number} Number of bytes to read asynchronously - -Note: **This function should NOT be called directly.** It should be -implemented by child classes, and called by the internal Readable -class methods only. - -All Readable stream implementations must provide a `_read` method -to fetch data from the underlying resource. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -When data is available, put it into the read queue by calling -`readable.push(chunk)`. If `push` returns false, then you should stop -reading. When `_read` is called again, you should start pushing more -data. - -The `size` argument is advisory. Implementations where a "read" is a -single call that returns data can use this to know how much data to -fetch. Implementations where that is not relevant, such as TCP or -TLS, may ignore this argument, and simply provide data whenever it -becomes available. There is no need, for example to "wait" until -`size` bytes are available before calling `stream.push(chunk)`. - -### readable.push(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to push into the read queue -* return {Boolean} Whether or not more pushes should be performed - -Note: **This function should be called by Readable implementors, NOT -by consumers of Readable subclasses.** The `_read()` function will not -be called again until at least one `push(chunk)` call is made. If no -data is available, then you MAY call `push('')` (an empty string) to -allow a future `_read` call, without adding any data to the queue. - -The `Readable` class works by putting data into a read queue to be -pulled out later by calling the `read()` method when the `'readable'` -event fires. - -The `push()` method will explicitly insert some data into the read -queue. If it is called with `null` then it will signal the end of the -data. - -In some cases, you may be wrapping a lower-level source which has some -sort of pause/resume mechanism, and a data callback. In those cases, -you could wrap the low-level source object by doing something like -this: - -```javascript -// source is an object with readStop() and readStart() methods, -// and an `ondata` member that gets called when it has data, and -// an `onend` member that gets called when the data is over. - -var stream = new Readable(); - -source.ondata = function(chunk) { - // if push() returns false, then we need to stop reading from source - if (!stream.push(chunk)) - source.readStop(); -}; - -source.onend = function() { - stream.push(null); -}; - -// _read will be called when the stream wants to pull more data in -// the advisory size argument is ignored in this case. -stream._read = function(n) { - source.readStart(); -}; -``` - -### readable.unshift(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue -* return {Boolean} Whether or not more pushes should be performed - -This is the corollary of `readable.push(chunk)`. Rather than putting -the data at the *end* of the read queue, it puts it at the *front* of -the read queue. - -This is useful in certain use-cases where a stream is being consumed -by a parser, which needs to "un-consume" some data that it has -optimistically pulled out of the source. - -```javascript -// A parser for a simple data protocol. -// The "header" is a JSON object, followed by 2 \n characters, and -// then a message body. -// -// Note: This can be done more simply as a Transform stream. See below. - -function SimpleProtocol(source, options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Readable.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - - // source is a readable stream, such as a socket or file - this._source = source; - - var self = this; - source.on('end', function() { - self.push(null); - }); - - // give it a kick whenever the source is readable - // read(0) will not consume any bytes - source.on('readable', function() { - self.read(0); - }); - - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Readable.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._read = function(n) { - if (!this._inBody) { - var chunk = this._source.read(); - - // if the source doesn't have data, we don't have data yet. - if (chunk === null) - return this.push(''); - - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - this.push(''); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // now, because we got some extra data, unshift the rest - // back into the read queue so that our consumer will see it. - var b = chunk.slice(split); - this.unshift(b); - - // and let them know that we are done parsing the header. - this.emit('header', this.header); - } - } else { - // from there on, just provide the data to our consumer. - // careful not to push(null), since that would indicate EOF. - var chunk = this._source.read(); - if (chunk) this.push(chunk); - } -}; - -// Usage: -var parser = new SimpleProtocol(source); -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - -### readable.wrap(stream) - -* `stream` {Stream} An "old style" readable stream - -If you are using an older Node library that emits `'data'` events and -has a `pause()` method that is advisory only, then you can use the -`wrap()` method to create a Readable stream that uses the old stream -as its data source. - -For example: - -```javascript -var OldReader = require('./old-api-module.js').OldReader; -var oreader = new OldReader; -var Readable = require('stream').Readable; -var myReader = new Readable().wrap(oreader); - -myReader.on('readable', function() { - myReader.read(); // etc. -}); -``` - -### Event: 'readable' - -When there is data ready to be consumed, this event will fire. - -When this event emits, call the `read()` method to consume the data. - -### Event: 'end' - -Emitted when the stream has received an EOF (FIN in TCP terminology). -Indicates that no more `'data'` events will happen. If the stream is -also writable, it may be possible to continue writing. - -### Event: 'data' - -The `'data'` event emits either a `Buffer` (by default) or a string if -`setEncoding()` was used. - -Note that adding a `'data'` event listener will switch the Readable -stream into "old mode", where data is emitted as soon as it is -available, rather than waiting for you to call `read()` to consume it. - -### Event: 'error' - -Emitted if there was an error receiving data. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### readable.setEncoding(encoding) - -Makes the `'data'` event emit a string instead of a `Buffer`. `encoding` -can be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`. - -The encoding can also be set by specifying an `encoding` field to the -constructor. - -### readable.read([size]) - -* `size` {Number | null} Optional number of bytes to read. -* Return: {Buffer | String | null} - -Note: **This function SHOULD be called by Readable stream users.** - -Call this method to consume data once the `'readable'` event is -emitted. - -The `size` argument will set a minimum number of bytes that you are -interested in. If not set, then the entire content of the internal -buffer is returned. - -If there is no data to consume, or if there are fewer bytes in the -internal buffer than the `size` argument, then `null` is returned, and -a future `'readable'` event will be emitted when more is available. - -Calling `stream.read(0)` will always return `null`, and will trigger a -refresh of the internal buffer, but otherwise be a no-op. - -### readable.pipe(destination, [options]) - -* `destination` {Writable Stream} -* `options` {Object} Optional - * `end` {Boolean} Default=true - -Connects this readable stream to `destination` WriteStream. Incoming -data on this stream gets written to `destination`. Properly manages -back-pressure so that a slow destination will not be overwhelmed by a -fast readable stream. - -This function returns the `destination` stream. - -For example, emulating the Unix `cat` command: - - process.stdin.pipe(process.stdout); - -By default `end()` is called on the destination when the source stream -emits `end`, so that `destination` is no longer writable. Pass `{ end: -false }` as `options` to keep the destination stream open. - -This keeps `writer` open so that "Goodbye" can be written at the -end. - - reader.pipe(writer, { end: false }); - reader.on("end", function() { - writer.end("Goodbye\n"); - }); - -Note that `process.stderr` and `process.stdout` are never closed until -the process exits, regardless of the specified options. - -### readable.unpipe([destination]) - -* `destination` {Writable Stream} Optional - -Undo a previously established `pipe()`. If no destination is -provided, then all previously established pipes are removed. - -### readable.pause() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Ceases the flow of data. No `'data'` events are emitted while the -stream is in a paused state. - -### readable.resume() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Resumes the incoming `'data'` events after a `pause()`. - - -## Class: stream.Writable - -<!--type=class--> - -A `Writable` Stream has the following methods, members, and events. - -Note that `stream.Writable` is an abstract class designed to be -extended with an underlying implementation of the -`_write(chunk, encoding, cb)` method. (See below.) - -### new stream.Writable([options]) - -* `options` {Object} - * `highWaterMark` {Number} Buffer level when `write()` starts - returning false. Default=16kb - * `decodeStrings` {Boolean} Whether or not to decode strings into - Buffers before passing them to `_write()`. Default=true - -In classes that extend the Writable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### writable.\_write(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be written. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. Ignore chunk is a buffer. Note that chunk will - **always** be a buffer unless the `decodeStrings` option is - explicitly set to `false`. -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -All Writable stream implementations must provide a `_write` method to -send data to the underlying resource. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Writable -class methods only. - -Call the callback using the standard `callback(error)` pattern to -signal that the write completed successfully or with an error. - -If the `decodeStrings` flag is set in the constructor options, then -`chunk` may be a string rather than a Buffer, and `encoding` will -indicate the sort of string that it is. This is to support -implementations that have an optimized handling for certain string -data encodings. If you do not explicitly set the `decodeStrings` -option to `false`, then you can safely ignore the `encoding` argument, -and assume that `chunk` will always be a Buffer. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - - -### writable.write(chunk, [encoding], [callback]) - -* `chunk` {Buffer | String} Data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when this chunk is - successfully written. -* Returns {Boolean} - -Writes `chunk` to the stream. Returns `true` if the data has been -flushed to the underlying resource. Returns `false` to indicate that -the buffer is full, and the data will be sent out in the future. The -`'drain'` event will indicate when the buffer is empty again. - -The specifics of when `write()` will return false, is determined by -the `highWaterMark` option provided to the constructor. - -### writable.end([chunk], [encoding], [callback]) - -* `chunk` {Buffer | String} Optional final data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when the final chunk is - successfully written. - -Call this method to signal the end of the data being written to the -stream. - -### Event: 'drain' - -Emitted when the stream's write queue empties and it's safe to write -without buffering again. Listen for it when `stream.write()` returns -`false`. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### Event: 'finish' - -When `end()` is called and there are no more chunks to write, this -event is emitted. - -### Event: 'pipe' - -* `source` {Readable Stream} - -Emitted when the stream is passed to a readable stream's pipe method. - -### Event 'unpipe' - -* `source` {Readable Stream} - -Emitted when a previously established `pipe()` is removed using the -source Readable stream's `unpipe()` method. - -## Class: stream.Duplex - -<!--type=class--> - -A "duplex" stream is one that is both Readable and Writable, such as a -TCP socket connection. - -Note that `stream.Duplex` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -and `_write(chunk, encoding, callback)` methods as you would with a Readable or -Writable stream class. - -Since JavaScript doesn't have multiple prototypal inheritance, this -class prototypally inherits from Readable, and then parasitically from -Writable. It is thus up to the user to implement both the lowlevel -`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method -on extension duplex classes. - -### new stream.Duplex(options) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then - the stream will automatically end the readable side when the - writable side ends and vice versa. - -In classes that extend the Duplex class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -## Class: stream.Transform - -A "transform" stream is a duplex stream where the output is causally -connected in some way to the input, such as a zlib stream or a crypto -stream. - -There is no requirement that the output be the same size as the input, -the same number of chunks, or arrive at the same time. For example, a -Hash stream will only ever have a single chunk of output which is -provided when the input is ended. A zlib stream will either produce -much smaller or much larger than its input. - -Rather than implement the `_read()` and `_write()` methods, Transform -classes must implement the `_transform()` method, and may optionally -also implement the `_flush()` method. (See below.) - -### new stream.Transform([options]) - -* `options` {Object} Passed to both Writable and Readable - constructors. - -In classes that extend the Transform class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### transform.\_transform(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be transformed. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. (Ignore if `decodeStrings` chunk is a buffer.) -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Transform -class methods only. - -All Transform stream implementations must provide a `_transform` -method to accept input and produce output. - -`_transform` should do whatever has to be done in this specific -Transform class, to handle the bytes being written, and pass them off -to the readable portion of the interface. Do asynchronous I/O, -process things, and so on. - -Call `transform.push(outputChunk)` 0 or more times to generate output -from this input chunk, depending on how much data you want to output -as a result of this chunk. - -Call the callback function only when the current chunk is completely -consumed. Note that there may or may not be output as a result of any -particular input chunk. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### transform.\_flush(callback) - -* `callback` {Function} Call this function (optionally with an error - argument) when you are done flushing any remaining data. - -Note: **This function MUST NOT be called directly.** It MAY be implemented -by child classes, and if so, will be called by the internal Transform -class methods only. - -In some cases, your transform operation may need to emit a bit more -data at the end of the stream. For example, a `Zlib` compression -stream will store up some internal state so that it can optimally -compress the output. At the end, however, it needs to do the best it -can with what is left, so that the data will be complete. - -In those cases, you can implement a `_flush` method, which will be -called at the very end, after all the written data is consumed, but -before emitting `end` to signal the end of the readable side. Just -like with `_transform`, call `transform.push(chunk)` zero or more -times, as appropriate, and call `callback` when the flush operation is -complete. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### Example: `SimpleProtocol` parser - -The example above of a simple protocol parser can be implemented much -more simply by using the higher level `Transform` stream class. - -In this example, rather than providing the input as an argument, it -would be piped into the parser, which is a more idiomatic Node stream -approach. - -```javascript -function SimpleProtocol(options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Transform.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Transform.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._transform = function(chunk, encoding, done) { - if (!this._inBody) { - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // and let them know that we are done parsing the header. - this.emit('header', this.header); - - // now, because we got some extra data, emit this first. - this.push(b); - } - } else { - // from there on, just provide the data to our consumer as-is. - this.push(b); - } - done(); -}; - -var parser = new SimpleProtocol(); -source.pipe(parser) - -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - - -## Class: stream.PassThrough - -This is a trivial implementation of a `Transform` stream that simply -passes the input bytes across to the output. Its purpose is mainly -for examples and testing, but there are occasionally use cases where -it can come in handy. - - -[EventEmitter]: events.html#events_class_events_eventemitter diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/duplex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/duplex.js deleted file mode 100644 index ca807af8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/float.patch b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/float.patch deleted file mode 100644 index 0ad71a1f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/float.patch +++ /dev/null @@ -1,68 +0,0 @@ -diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js -index c5a741c..a2e0d8e 100644 ---- a/lib/_stream_duplex.js -+++ b/lib/_stream_duplex.js -@@ -26,8 +26,8 @@ - - module.exports = Duplex; - var util = require('util'); --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('./_stream_readable'); -+var Writable = require('./_stream_writable'); - - util.inherits(Duplex, Readable); - -diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js -index a5e9864..330c247 100644 ---- a/lib/_stream_passthrough.js -+++ b/lib/_stream_passthrough.js -@@ -25,7 +25,7 @@ - - module.exports = PassThrough; - --var Transform = require('_stream_transform'); -+var Transform = require('./_stream_transform'); - var util = require('util'); - util.inherits(PassThrough, Transform); - -diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js -index 2259d2e..e6681ee 100644 ---- a/lib/_stream_readable.js -+++ b/lib/_stream_readable.js -@@ -23,6 +23,9 @@ 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 StringDecoder; -diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js -index e925b4b..f08b05e 100644 ---- a/lib/_stream_transform.js -+++ b/lib/_stream_transform.js -@@ -64,7 +64,7 @@ - - module.exports = Transform; - --var Duplex = require('_stream_duplex'); -+var Duplex = require('./_stream_duplex'); - var util = require('util'); - util.inherits(Transform, Duplex); - -diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js -index a26f711..56ca47d 100644 ---- a/lib/_stream_writable.js -+++ b/lib/_stream_writable.js -@@ -109,7 +109,7 @@ function WritableState(options, stream) { - function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. -- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex)) -+ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex'))) - return new Writable(options); - - this._writableState = new WritableState(options, this); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index a2e0d8e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,69 +0,0 @@ -// 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 330c247d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,41 +0,0 @@ -// 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 323f3305..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,927 +0,0 @@ -// 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 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index 707e4b3b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,205 +0,0 @@ -// 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index 9eaf4ec2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,371 +0,0 @@ -// 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 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 = []; -} - -function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof require('./_stream_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.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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE deleted file mode 100644 index 6de584a4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md deleted file mode 100644 index 4d2aa001..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md +++ /dev/null @@ -1,7 +0,0 @@ -**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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js deleted file mode 100755 index 46470cfd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env node - -const hyperquest = require('hyperzip')(require('hyperdirect')) - , bl = require('bl') - , fs = require('fs') - , path = require('path') - , cheerio = require('cheerio') - - , files = require('./files') - , testReplace = require('./test-replacements') - - , srcurlpfx = 'https://raw.github.com/joyent/node/v' + process.argv[2] + '-release/' - , libsrcurl = srcurlpfx + 'lib/' - , testsrcurl = srcurlpfx + 'test/simple/' - , testlisturl = 'https://github.com/joyent/node/tree/v' + process.argv[2] + '-release/test/simple' - , libourroot = path.join(__dirname, '../') - , testourroot = path.join(__dirname, '../test/simple/') - - -function processFile (url, out, replacements) { - hyperquest(url).pipe(bl(function (err, data) { - if (err) - throw err - - data = data.toString() - replacements.forEach(function (replacement) { - data = data.replace.apply(data, replacement) - }) - - fs.writeFile(out, data, 'utf8', function (err) { - if (err) - throw err - - console.log('Wrote', out) - }) - })) -} - -function processLibFile (file) { - var replacements = files[file] - , url = libsrcurl + file - , out = path.join(libourroot, replacements.out || file) - - processFile(url, out, replacements) -} - - -function processTestFile (file) { - var replacements = testReplace.all - , url = testsrcurl + file - , out = path.join(testourroot, file) - - if (testReplace[file]) - replacements = replacements.concat(testReplace[file]) - - processFile(url, out, replacements) -} - - -if (!/0\.1\d\.\d+/.test(process.argv[2])) { - console.log('Usage: build.js <node version>') - return process.exit(-1) -} - - -//-------------------------------------------------------------------- -// Grab & process files in ../lib/ - -Object.keys(files).forEach(processLibFile) - -//-------------------------------------------------------------------- -// Discover, grab and process all test-string-decoder* files on joyent/node - -hyperquest(testlisturl).pipe(bl(function (err, data) { - if (err) - throw err - - var $ = cheerio.load(data.toString()) - - $('table.files .js-directory-link').each(function () { - var file = $(this).text() - if (/^test-string-decoder/.test(file) || file == 'common.js') - processTestFile(file) - }) -})) - -//-------------------------------------------------------------------- -// Grab the joyent/node test/common.js - -processFile( - testsrcurl + '../common.js' - , path.join(testourroot, '../common.js') - , testReplace['common.js'] -) \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js deleted file mode 100644 index 7396a4f4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js +++ /dev/null @@ -1,36 +0,0 @@ -/* This file lists the files to be fetched from the node repo - * in the /lib/ directory which will be placed in the ../lib/ - * directory after having each of the "replacements" in the - * array for that file applied to it. The replacements are - * simply the arguments to String#replace, so they can be - * strings, regexes, functions. - */ - -module.exports['string_decoder.js'] = [ - - // pull in Bufer as a require - // add Buffer.isEncoding where missing - [ - /^(\/\/ USE OR OTHER DEALINGS IN THE SOFTWARE\.)/m - , '$1\n\nvar Buffer = require(\'buffer\').Buffer;' - + '\n' - + '\nvar isBufferEncoding = Buffer.isEncoding' - + '\n || function(encoding) {' - + '\n switch (encoding && encoding.toLowerCase()) {' - + '\n 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;' - + '\n default: return false;' - + '\n }' - + '\n }' - + '\n' - - ] - - // use custom Buffer.isEncoding reference - , [ - /Buffer\.isEncoding\(/g - , 'isBufferEncoding\(' - ] - -] - -module.exports['string_decoder.js'].out = 'index.js' \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json deleted file mode 100644 index f7ee6a46..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "string_decoder-build", - "version": "0.0.0", - "description": "", - "main": "build.js", - "dependencies": { - "bl": "~0.6.0", - "hyperzip": "0.0.0", - "hyperdirect": "0.0.0", - "cheerio": "~0.13.1" - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js deleted file mode 100644 index 5bbf6028..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports.all = [ - [ - /require\(['"]string_decoder['"]\)/g - , 'require(\'../../\')' - ] - -] - -module.exports['common.js'] = [ - [ - /^ setImmediate,$/m - , ' typeof setImmediate == \'undefined\' ? null : setImmediate,' - ] - - , [ - /^ clearImmediate,$/m - , ' typeof clearImmediate == \'undefined\' ? null : clearImmediate,' - ] - - , [ - /^ global];$/m - , ' global].filter(Boolean);' - ] -] diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js deleted file mode 100644 index 2e44a03e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json deleted file mode 100644 index c7cac1a5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "string_decoder", - "version": "0.10.25", - "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", - "dist": { - "shasum": "aa026a29a0177ff13c8df4472dcda2f26d646900" - }, - "_from": "string_decoder@~0.10.x", - "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.25.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js deleted file mode 100644 index ed5ff08d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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 path = require('path'); -var assert = require('assert'); - -exports.testDir = path.dirname(__filename); -exports.fixturesDir = path.join(exports.testDir, 'fixtures'); -exports.libDir = path.join(exports.testDir, '../lib'); -exports.tmpDir = path.join(exports.testDir, 'tmp'); -exports.PORT = +process.env.NODE_COMMON_PORT || 12346; - -if (process.platform === 'win32') { - exports.PIPE = '\\\\.\\pipe\\libuv-test'; -} else { - exports.PIPE = exports.tmpDir + '/test.sock'; -} - -var util = require('util'); -for (var i in util) exports[i] = util[i]; -//for (var i in exports) global[i] = exports[i]; - -function protoCtrChain(o) { - var result = []; - for (; o; o = o.__proto__) { result.push(o.constructor); } - return result.join(); -} - -exports.indirectInstanceOf = function(obj, cls) { - if (obj instanceof cls) { return true; } - var clsChain = protoCtrChain(cls.prototype); - var objChain = protoCtrChain(obj); - return objChain.slice(-clsChain.length) === clsChain; -}; - - -exports.ddCommand = function(filename, kilobytes) { - if (process.platform === 'win32') { - var p = path.resolve(exports.fixturesDir, 'create-file.js'); - return '"' + process.argv[0] + '" "' + p + '" "' + - filename + '" ' + (kilobytes * 1024); - } else { - return 'dd if=/dev/zero of="' + filename + '" bs=1024 count=' + kilobytes; - } -}; - - -exports.spawnCat = function(options) { - var spawn = require('child_process').spawn; - - if (process.platform === 'win32') { - return spawn('more', [], options); - } else { - return spawn('cat', [], options); - } -}; - - -exports.spawnPwd = function(options) { - var spawn = require('child_process').spawn; - - if (process.platform === 'win32') { - return spawn('cmd.exe', ['/c', 'cd'], options); - } else { - return spawn('pwd', [], options); - } -}; - - -// Turn this off if the test should not check for global leaks. -exports.globalCheck = true; - -process.on('exit', function() { - if (!exports.globalCheck) return; - var knownGlobals = [setTimeout, - setInterval, - typeof setImmediate == 'undefined' ? null : setImmediate, - clearTimeout, - clearInterval, - typeof clearImmediate == 'undefined' ? null : clearImmediate, - console, - Buffer, - process, - global].filter(Boolean); - - if (global.gc) { - knownGlobals.push(gc); - } - - if (global.DTRACE_HTTP_SERVER_RESPONSE) { - knownGlobals.push(DTRACE_HTTP_SERVER_RESPONSE); - knownGlobals.push(DTRACE_HTTP_SERVER_REQUEST); - knownGlobals.push(DTRACE_HTTP_CLIENT_RESPONSE); - knownGlobals.push(DTRACE_HTTP_CLIENT_REQUEST); - knownGlobals.push(DTRACE_NET_STREAM_END); - knownGlobals.push(DTRACE_NET_SERVER_CONNECTION); - knownGlobals.push(DTRACE_NET_SOCKET_READ); - knownGlobals.push(DTRACE_NET_SOCKET_WRITE); - } - if (global.COUNTER_NET_SERVER_CONNECTION) { - knownGlobals.push(COUNTER_NET_SERVER_CONNECTION); - knownGlobals.push(COUNTER_NET_SERVER_CONNECTION_CLOSE); - knownGlobals.push(COUNTER_HTTP_SERVER_REQUEST); - knownGlobals.push(COUNTER_HTTP_SERVER_RESPONSE); - knownGlobals.push(COUNTER_HTTP_CLIENT_REQUEST); - knownGlobals.push(COUNTER_HTTP_CLIENT_RESPONSE); - } - - if (global.ArrayBuffer) { - knownGlobals.push(ArrayBuffer); - knownGlobals.push(Int8Array); - knownGlobals.push(Uint8Array); - knownGlobals.push(Uint8ClampedArray); - knownGlobals.push(Int16Array); - knownGlobals.push(Uint16Array); - knownGlobals.push(Int32Array); - knownGlobals.push(Uint32Array); - knownGlobals.push(Float32Array); - knownGlobals.push(Float64Array); - knownGlobals.push(DataView); - } - - for (var x in global) { - var found = false; - - for (var y in knownGlobals) { - if (global[x] === knownGlobals[y]) { - found = true; - break; - } - } - - if (!found) { - console.error('Unknown global: %s', x); - assert.ok(false, 'Unknown global found'); - } - } -}); - - -var mustCallChecks = []; - - -function runCallChecks(exitCode) { - if (exitCode !== 0) return; - - var failed = mustCallChecks.filter(function(context) { - return context.actual !== context.expected; - }); - - failed.forEach(function(context) { - console.log('Mismatched %s function calls. Expected %d, actual %d.', - context.name, - context.expected, - context.actual); - console.log(context.stack.split('\n').slice(2).join('\n')); - }); - - if (failed.length) process.exit(1); -} - - -exports.mustCall = function(fn, expected) { - if (typeof expected !== 'number') expected = 1; - - var context = { - expected: expected, - actual: 0, - stack: (new Error).stack, - name: fn.name || '<anonymous>' - }; - - // add the exit listener only once to avoid listener leak warnings - if (mustCallChecks.length === 0) process.on('exit', runCallChecks); - - mustCallChecks.push(context); - - return function() { - context.actual++; - return fn.apply(this, arguments); - }; -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js deleted file mode 100644 index 869a4116..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js +++ /dev/null @@ -1,75 +0,0 @@ -// 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. - -// verify that the string decoder works getting 1 byte at a time, -// the whole buffer at once, and that both match the .toString(enc) -// result of the entire buffer. - -var assert = require('assert'); -var SD = require('../../').StringDecoder; -var encodings = ['base64', 'hex', 'utf8', 'utf16le', 'ucs2']; - -var bufs = [ '☃💩', 'asdf' ].map(function(b) { - return new Buffer(b); -}); - -// also test just arbitrary bytes from 0-15. -for (var i = 1; i <= 16; i++) { - var bytes = new Array(i).join('.').split('.').map(function(_, j) { - return j + 0x78; - }); - bufs.push(new Buffer(bytes)); -} - -encodings.forEach(testEncoding); - -console.log('ok'); - -function testEncoding(encoding) { - bufs.forEach(function(buf) { - testBuf(encoding, buf); - }); -} - -function testBuf(encoding, buf) { - console.error('# %s', encoding, buf); - - // write one byte at a time. - var s = new SD(encoding); - var res1 = ''; - for (var i = 0; i < buf.length; i++) { - res1 += s.write(buf.slice(i, i + 1)); - } - res1 += s.end(); - - // write the whole buffer at once. - var res2 = ''; - var s = new SD(encoding); - res2 += s.write(buf); - res2 += s.end(); - - // .toString() on the buffer - var res3 = buf.toString(encoding); - - console.log('expect=%j', res3); - assert.equal(res1, res3, 'one byte at a time should match toString'); - assert.equal(res2, res3, 'all bytes at once should match toString'); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js deleted file mode 100644 index 7f69f7ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js +++ /dev/null @@ -1,163 +0,0 @@ -// 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 common = require('../common'); -var assert = require('assert'); -var StringDecoder = require('../../').StringDecoder; -var decoder = new StringDecoder('utf8'); - - - -var buffer = new Buffer('$'); -assert.deepEqual('$', decoder.write(buffer)); - -buffer = new Buffer('¢'); -assert.deepEqual('', decoder.write(buffer.slice(0, 1))); -assert.deepEqual('¢', decoder.write(buffer.slice(1, 2))); - -buffer = new Buffer('€'); -assert.deepEqual('', decoder.write(buffer.slice(0, 1))); -assert.deepEqual('', decoder.write(buffer.slice(1, 2))); -assert.deepEqual('€', decoder.write(buffer.slice(2, 3))); - -buffer = new Buffer([0xF0, 0xA4, 0xAD, 0xA2]); -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); -s += decoder.write(buffer.slice(2, 3)); -s += decoder.write(buffer.slice(3, 4)); -assert.ok(s.length > 0); - -// CESU-8 -buffer = new Buffer('EDA0BDEDB18D', 'hex'); // THUMBS UP SIGN (in CESU-8) -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); -s += decoder.write(buffer.slice(2, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 4)); -s += decoder.write(buffer.slice(4, 5)); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 2)); -s += decoder.write(buffer.slice(2, 4)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(4, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 4)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(4, 5)); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 5)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 6)); -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - - -// UCS-2 -decoder = new StringDecoder('ucs2'); -buffer = new Buffer('ab', 'ucs2'); -assert.equal(decoder.write(buffer), 'ab'); // 2 complete chars -buffer = new Buffer('abc', 'ucs2'); -assert.equal(decoder.write(buffer.slice(0, 3)), 'a'); // 'a' and first of 'b' -assert.equal(decoder.write(buffer.slice(3, 6)), 'bc'); // second of 'b' and 'c' - - -// UTF-16LE -buffer = new Buffer('3DD84DDC', 'hex'); // THUMBS UP SIGN (in CESU-8) -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(2, 3)); -s += decoder.write(buffer.slice(3, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 2)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(2, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 4)); -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - - -// A mixed ascii and non-ascii string -// Test stolen from deps/v8/test/cctest/test-strings.cc -// U+02E4 -> CB A4 -// U+0064 -> 64 -// U+12E4 -> E1 8B A4 -// U+0030 -> 30 -// U+3045 -> E3 81 85 -var expected = '\u02e4\u0064\u12e4\u0030\u3045'; -var buffer = new Buffer([0xCB, 0xA4, 0x64, 0xE1, 0x8B, 0xA4, - 0x30, 0xE3, 0x81, 0x85]); -var charLengths = [0, 0, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5]; - -// Split the buffer into 3 segments -// |----|------|-------| -// 0 i j buffer.length -// Scan through every possible 3 segment combination -// and make sure that the string is always parsed. -common.print('scanning '); -for (var j = 2; j < buffer.length; j++) { - for (var i = 1; i < j; i++) { - var decoder = new StringDecoder('utf8'); - - var sum = decoder.write(buffer.slice(0, i)); - - // just check that we've received the right amount - // after the first write - assert.equal(charLengths[i], sum.length); - - sum += decoder.write(buffer.slice(i, j)); - sum += decoder.write(buffer.slice(j, buffer.length)); - assert.equal(expected, sum); - common.print('.'); - } -} -console.log(' crayon!'); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/package.json deleted file mode 100644 index c9e268d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "readable-stream", - "version": "1.0.25", - "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\nA new class of streams for Node.js\n\nThis module provides the new Stream base classes introduced in Node\nv0.10, for use in Node v0.8. You can use it to have programs that\nhave to work with node v0.8, while being forward-compatible for v0.10\nand beyond. When you drop support for v0.8, you can remove this\nmodule, and only use the native streams.\n\nThis is almost exactly the same codebase as appears in Node v0.10.\nHowever:\n\n1. The exported object is actually the Readable class. Decorating the\n native `stream` module would be global pollution.\n2. In v0.10, you can safely use `base64` as an argument to\n `setEncoding` in Readable streams. However, in v0.8, the\n StringDecoder class has no `end()` method, which is problematic for\n Base64. So, don't use that, because it'll break and be weird.\n\nOther than that, the API is the same as `require('stream')` in v0.10,\nso the API docs are reproduced below.\n\n----------\n\n Stability: 2 - Unstable\n\nA stream is an abstract interface implemented by various objects in\nNode. For example a request to an HTTP server is a stream, as is\nstdout. Streams are readable, writable, or both. All streams are\ninstances of [EventEmitter][]\n\nYou can load the Stream base classes by doing `require('stream')`.\nThere are base classes provided for Readable streams, Writable\nstreams, Duplex streams, and Transform streams.\n\n## Compatibility\n\nIn earlier versions of Node, the Readable stream interface was\nsimpler, but also less powerful and less useful.\n\n* Rather than waiting for you to call the `read()` method, `'data'`\n events would start emitting immediately. If you needed to do some\n I/O to decide how to handle data, then you had to store the chunks\n in some kind of buffer so that they would not be lost.\n* The `pause()` method was advisory, rather than guaranteed. This\n meant that you still had to be prepared to receive `'data'` events\n even when the stream was in a paused state.\n\nIn Node v0.10, the Readable class described below was added. For\nbackwards compatibility with older Node programs, Readable streams\nswitch into \"old mode\" when a `'data'` event handler is added, or when\nthe `pause()` or `resume()` methods are called. The effect is that,\neven if you are not using the new `read()` method and `'readable'`\nevent, you no longer have to worry about losing `'data'` chunks.\n\nMost programs will continue to function normally. However, this\nintroduces an edge case in the following conditions:\n\n* No `'data'` event handler is added.\n* The `pause()` and `resume()` methods are never called.\n\nFor example, consider the following code:\n\n```javascript\n// WARNING! BROKEN!\nnet.createServer(function(socket) {\n\n // we add an 'end' method, but never consume the data\n socket.on('end', function() {\n // It will never get here.\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n}).listen(1337);\n```\n\nIn versions of node prior to v0.10, the incoming message data would be\nsimply discarded. However, in Node v0.10 and beyond, the socket will\nremain paused forever.\n\nThe workaround in this situation is to call the `resume()` method to\ntrigger \"old mode\" behavior:\n\n```javascript\n// Workaround\nnet.createServer(function(socket) {\n\n socket.on('end', function() {\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n // start the flow of data, discarding it.\n socket.resume();\n\n}).listen(1337);\n```\n\nIn addition to new Readable streams switching into old-mode, pre-v0.10\nstyle streams can be wrapped in a Readable class using the `wrap()`\nmethod.\n\n## Class: stream.Readable\n\n<!--type=class-->\n\nA `Readable Stream` has the following methods, members, and events.\n\nNote that `stream.Readable` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nmethod. (See below.)\n\n### new stream.Readable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} The maximum number of bytes to store in\n the internal buffer before ceasing to read from the underlying\n resource. Default=16kb\n * `encoding` {String} If specified, then buffers will be decoded to\n strings using the specified encoding. Default=null\n * `objectMode` {Boolean} Whether this stream should behave\n as a stream of objects. Meaning that stream.read(n) returns\n a single value instead of a Buffer of size n\n\nIn classes that extend the Readable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### readable.\\_read(size)\n\n* `size` {Number} Number of bytes to read asynchronously\n\nNote: **This function should NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Readable\nclass methods only.\n\nAll Readable stream implementations must provide a `_read` method\nto fetch data from the underlying resource.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\nWhen data is available, put it into the read queue by calling\n`readable.push(chunk)`. If `push` returns false, then you should stop\nreading. When `_read` is called again, you should start pushing more\ndata.\n\nThe `size` argument is advisory. Implementations where a \"read\" is a\nsingle call that returns data can use this to know how much data to\nfetch. Implementations where that is not relevant, such as TCP or\nTLS, may ignore this argument, and simply provide data whenever it\nbecomes available. There is no need, for example to \"wait\" until\n`size` bytes are available before calling `stream.push(chunk)`.\n\n### readable.push(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to push into the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nNote: **This function should be called by Readable implementors, NOT\nby consumers of Readable subclasses.** The `_read()` function will not\nbe called again until at least one `push(chunk)` call is made. If no\ndata is available, then you MAY call `push('')` (an empty string) to\nallow a future `_read` call, without adding any data to the queue.\n\nThe `Readable` class works by putting data into a read queue to be\npulled out later by calling the `read()` method when the `'readable'`\nevent fires.\n\nThe `push()` method will explicitly insert some data into the read\nqueue. If it is called with `null` then it will signal the end of the\ndata.\n\nIn some cases, you may be wrapping a lower-level source which has some\nsort of pause/resume mechanism, and a data callback. In those cases,\nyou could wrap the low-level source object by doing something like\nthis:\n\n```javascript\n// source is an object with readStop() and readStart() methods,\n// and an `ondata` member that gets called when it has data, and\n// an `onend` member that gets called when the data is over.\n\nvar stream = new Readable();\n\nsource.ondata = function(chunk) {\n // if push() returns false, then we need to stop reading from source\n if (!stream.push(chunk))\n source.readStop();\n};\n\nsource.onend = function() {\n stream.push(null);\n};\n\n// _read will be called when the stream wants to pull more data in\n// the advisory size argument is ignored in this case.\nstream._read = function(n) {\n source.readStart();\n};\n```\n\n### readable.unshift(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nThis is the corollary of `readable.push(chunk)`. Rather than putting\nthe data at the *end* of the read queue, it puts it at the *front* of\nthe read queue.\n\nThis is useful in certain use-cases where a stream is being consumed\nby a parser, which needs to \"un-consume\" some data that it has\noptimistically pulled out of the source.\n\n```javascript\n// A parser for a simple data protocol.\n// The \"header\" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// Note: This can be done more simply as a Transform stream. See below.\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Readable.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\nvar parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n### readable.wrap(stream)\n\n* `stream` {Stream} An \"old style\" readable stream\n\nIf you are using an older Node library that emits `'data'` events and\nhas a `pause()` method that is advisory only, then you can use the\n`wrap()` method to create a Readable stream that uses the old stream\nas its data source.\n\nFor example:\n\n```javascript\nvar OldReader = require('./old-api-module.js').OldReader;\nvar oreader = new OldReader;\nvar Readable = require('stream').Readable;\nvar myReader = new Readable().wrap(oreader);\n\nmyReader.on('readable', function() {\n myReader.read(); // etc.\n});\n```\n\n### Event: 'readable'\n\nWhen there is data ready to be consumed, this event will fire.\n\nWhen this event emits, call the `read()` method to consume the data.\n\n### Event: 'end'\n\nEmitted when the stream has received an EOF (FIN in TCP terminology).\nIndicates that no more `'data'` events will happen. If the stream is\nalso writable, it may be possible to continue writing.\n\n### Event: 'data'\n\nThe `'data'` event emits either a `Buffer` (by default) or a string if\n`setEncoding()` was used.\n\nNote that adding a `'data'` event listener will switch the Readable\nstream into \"old mode\", where data is emitted as soon as it is\navailable, rather than waiting for you to call `read()` to consume it.\n\n### Event: 'error'\n\nEmitted if there was an error receiving data.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### readable.setEncoding(encoding)\n\nMakes the `'data'` event emit a string instead of a `Buffer`. `encoding`\ncan be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`.\n\nThe encoding can also be set by specifying an `encoding` field to the\nconstructor.\n\n### readable.read([size])\n\n* `size` {Number | null} Optional number of bytes to read.\n* Return: {Buffer | String | null}\n\nNote: **This function SHOULD be called by Readable stream users.**\n\nCall this method to consume data once the `'readable'` event is\nemitted.\n\nThe `size` argument will set a minimum number of bytes that you are\ninterested in. If not set, then the entire content of the internal\nbuffer is returned.\n\nIf there is no data to consume, or if there are fewer bytes in the\ninternal buffer than the `size` argument, then `null` is returned, and\na future `'readable'` event will be emitted when more is available.\n\nCalling `stream.read(0)` will always return `null`, and will trigger a\nrefresh of the internal buffer, but otherwise be a no-op.\n\n### readable.pipe(destination, [options])\n\n* `destination` {Writable Stream}\n* `options` {Object} Optional\n * `end` {Boolean} Default=true\n\nConnects this readable stream to `destination` WriteStream. Incoming\ndata on this stream gets written to `destination`. Properly manages\nback-pressure so that a slow destination will not be overwhelmed by a\nfast readable stream.\n\nThis function returns the `destination` stream.\n\nFor example, emulating the Unix `cat` command:\n\n process.stdin.pipe(process.stdout);\n\nBy default `end()` is called on the destination when the source stream\nemits `end`, so that `destination` is no longer writable. Pass `{ end:\nfalse }` as `options` to keep the destination stream open.\n\nThis keeps `writer` open so that \"Goodbye\" can be written at the\nend.\n\n reader.pipe(writer, { end: false });\n reader.on(\"end\", function() {\n writer.end(\"Goodbye\\n\");\n });\n\nNote that `process.stderr` and `process.stdout` are never closed until\nthe process exits, regardless of the specified options.\n\n### readable.unpipe([destination])\n\n* `destination` {Writable Stream} Optional\n\nUndo a previously established `pipe()`. If no destination is\nprovided, then all previously established pipes are removed.\n\n### readable.pause()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nCeases the flow of data. No `'data'` events are emitted while the\nstream is in a paused state.\n\n### readable.resume()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nResumes the incoming `'data'` events after a `pause()`.\n\n\n## Class: stream.Writable\n\n<!--type=class-->\n\nA `Writable` Stream has the following methods, members, and events.\n\nNote that `stream.Writable` is an abstract class designed to be\nextended with an underlying implementation of the\n`_write(chunk, encoding, cb)` method. (See below.)\n\n### new stream.Writable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} Buffer level when `write()` starts\n returning false. Default=16kb\n * `decodeStrings` {Boolean} Whether or not to decode strings into\n Buffers before passing them to `_write()`. Default=true\n\nIn classes that extend the Writable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### writable.\\_write(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be written. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. Ignore chunk is a buffer. Note that chunk will\n **always** be a buffer unless the `decodeStrings` option is\n explicitly set to `false`.\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nAll Writable stream implementations must provide a `_write` method to\nsend data to the underlying resource.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Writable\nclass methods only.\n\nCall the callback using the standard `callback(error)` pattern to\nsignal that the write completed successfully or with an error.\n\nIf the `decodeStrings` flag is set in the constructor options, then\n`chunk` may be a string rather than a Buffer, and `encoding` will\nindicate the sort of string that it is. This is to support\nimplementations that have an optimized handling for certain string\ndata encodings. If you do not explicitly set the `decodeStrings`\noption to `false`, then you can safely ignore the `encoding` argument,\nand assume that `chunk` will always be a Buffer.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n\n### writable.write(chunk, [encoding], [callback])\n\n* `chunk` {Buffer | String} Data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when this chunk is\n successfully written.\n* Returns {Boolean}\n\nWrites `chunk` to the stream. Returns `true` if the data has been\nflushed to the underlying resource. Returns `false` to indicate that\nthe buffer is full, and the data will be sent out in the future. The\n`'drain'` event will indicate when the buffer is empty again.\n\nThe specifics of when `write()` will return false, is determined by\nthe `highWaterMark` option provided to the constructor.\n\n### writable.end([chunk], [encoding], [callback])\n\n* `chunk` {Buffer | String} Optional final data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when the final chunk is\n successfully written.\n\nCall this method to signal the end of the data being written to the\nstream.\n\n### Event: 'drain'\n\nEmitted when the stream's write queue empties and it's safe to write\nwithout buffering again. Listen for it when `stream.write()` returns\n`false`.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### Event: 'finish'\n\nWhen `end()` is called and there are no more chunks to write, this\nevent is emitted.\n\n### Event: 'pipe'\n\n* `source` {Readable Stream}\n\nEmitted when the stream is passed to a readable stream's pipe method.\n\n### Event 'unpipe'\n\n* `source` {Readable Stream}\n\nEmitted when a previously established `pipe()` is removed using the\nsource Readable stream's `unpipe()` method.\n\n## Class: stream.Duplex\n\n<!--type=class-->\n\nA \"duplex\" stream is one that is both Readable and Writable, such as a\nTCP socket connection.\n\nNote that `stream.Duplex` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nand `_write(chunk, encoding, callback)` methods as you would with a Readable or\nWritable stream class.\n\nSince JavaScript doesn't have multiple prototypal inheritance, this\nclass prototypally inherits from Readable, and then parasitically from\nWritable. It is thus up to the user to implement both the lowlevel\n`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method\non extension duplex classes.\n\n### new stream.Duplex(options)\n\n* `options` {Object} Passed to both Writable and Readable\n constructors. Also has the following fields:\n * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then\n the stream will automatically end the readable side when the\n writable side ends and vice versa.\n\nIn classes that extend the Duplex class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n## Class: stream.Transform\n\nA \"transform\" stream is a duplex stream where the output is causally\nconnected in some way to the input, such as a zlib stream or a crypto\nstream.\n\nThere is no requirement that the output be the same size as the input,\nthe same number of chunks, or arrive at the same time. For example, a\nHash stream will only ever have a single chunk of output which is\nprovided when the input is ended. A zlib stream will either produce\nmuch smaller or much larger than its input.\n\nRather than implement the `_read()` and `_write()` methods, Transform\nclasses must implement the `_transform()` method, and may optionally\nalso implement the `_flush()` method. (See below.)\n\n### new stream.Transform([options])\n\n* `options` {Object} Passed to both Writable and Readable\n constructors.\n\nIn classes that extend the Transform class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### transform.\\_transform(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be transformed. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. (Ignore if `decodeStrings` chunk is a buffer.)\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Transform\nclass methods only.\n\nAll Transform stream implementations must provide a `_transform`\nmethod to accept input and produce output.\n\n`_transform` should do whatever has to be done in this specific\nTransform class, to handle the bytes being written, and pass them off\nto the readable portion of the interface. Do asynchronous I/O,\nprocess things, and so on.\n\nCall `transform.push(outputChunk)` 0 or more times to generate output\nfrom this input chunk, depending on how much data you want to output\nas a result of this chunk.\n\nCall the callback function only when the current chunk is completely\nconsumed. Note that there may or may not be output as a result of any\nparticular input chunk.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### transform.\\_flush(callback)\n\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done flushing any remaining data.\n\nNote: **This function MUST NOT be called directly.** It MAY be implemented\nby child classes, and if so, will be called by the internal Transform\nclass methods only.\n\nIn some cases, your transform operation may need to emit a bit more\ndata at the end of the stream. For example, a `Zlib` compression\nstream will store up some internal state so that it can optimally\ncompress the output. At the end, however, it needs to do the best it\ncan with what is left, so that the data will be complete.\n\nIn those cases, you can implement a `_flush` method, which will be\ncalled at the very end, after all the written data is consumed, but\nbefore emitting `end` to signal the end of the readable side. Just\nlike with `_transform`, call `transform.push(chunk)` zero or more\ntimes, as appropriate, and call `callback` when the flush operation is\ncomplete.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### Example: `SimpleProtocol` parser\n\nThe example above of a simple protocol parser can be implemented much\nmore simply by using the higher level `Transform` stream class.\n\nIn this example, rather than providing the input as an argument, it\nwould be piped into the parser, which is a more idiomatic Node stream\napproach.\n\n```javascript\nfunction SimpleProtocol(options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Transform.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Transform.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._transform = function(chunk, encoding, done) {\n if (!this._inBody) {\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n\n // now, because we got some extra data, emit this first.\n this.push(b);\n }\n } else {\n // from there on, just provide the data to our consumer as-is.\n this.push(b);\n }\n done();\n};\n\nvar parser = new SimpleProtocol();\nsource.pipe(parser)\n\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n\n## Class: stream.PassThrough\n\nThis is a trivial implementation of a `Transform` stream that simply\npasses the input bytes across to the output. Its purpose is mainly\nfor examples and testing, but there are occasionally use cases where\nit can come in handy.\n\n\n[EventEmitter]: events.html#events_class_events_eventemitter\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.25", - "dist": { - "shasum": "3d234b55fd2a25db8327618f088e50a32044df50" - }, - "_from": "readable-stream@~1.0.17", - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.25.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/passthrough.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/passthrough.js deleted file mode 100644 index 27e8d8a5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/readable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/readable.js deleted file mode 100644 index 4d1ddfc7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,6 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/transform.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/transform.js deleted file mode 100644 index 5d482f07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/writable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/writable.js deleted file mode 100644 index e1e9efdf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/writable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/LICENCE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/LICENCE deleted file mode 100644 index a23e08a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/README.md deleted file mode 100644 index 389adae3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/has-keys.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/has-keys.js deleted file mode 100644 index 62391e78..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/has-keys.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = hasKeys - -function hasKeys(source) { - return source !== null && - (typeof source === "object" || - typeof source === "function") -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/index.js deleted file mode 100644 index 20937d19..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/index.js +++ /dev/null @@ -1,25 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/mutable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/mutable.js deleted file mode 100644 index 17454ae4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/mutable.js +++ /dev/null @@ -1,25 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml deleted file mode 100644 index 60d00ce1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.8" - - "0.6" diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md deleted file mode 100644 index ab32d0ad..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md +++ /dev/null @@ -1,39 +0,0 @@ -#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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js deleted file mode 100644 index db32d458..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js +++ /dev/null @@ -1,40 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js deleted file mode 100644 index f5b24b6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js +++ /dev/null @@ -1,2 +0,0 @@ -module.exports = Object.keys || require('./shim'); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js deleted file mode 100644 index 74a09897..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js +++ /dev/null @@ -1,16 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json deleted file mode 100644 index 9dfda8dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "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", - "dist": { - "shasum": "28a6aae7428dd2c3a92f3d95f21335dd204e0336" - }, - "_from": "object-keys@~0.4.0", - "_resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js deleted file mode 100644 index b88421be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js +++ /dev/null @@ -1,62 +0,0 @@ -(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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js deleted file mode 100644 index f29f065a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js +++ /dev/null @@ -1,156 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js deleted file mode 100644 index 8b77b1fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js +++ /dev/null @@ -1,6 +0,0 @@ - -require('./foreach'); -require('./isArguments'); - -require('./shim'); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js deleted file mode 100644 index 62a07c2d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js +++ /dev/null @@ -1,10 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js deleted file mode 100644 index 9d932712..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js +++ /dev/null @@ -1,134 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/package.json deleted file mode 100644 index a761197d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "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", - "dist": { - "shasum": "5e8f75d1b0d9ca976fee0f1aa88f80c7619210d5" - }, - "_from": "xtend@~2.1.1", - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/test.js deleted file mode 100644 index 3369d796..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/test.js +++ /dev/null @@ -1,63 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/package.json deleted file mode 100644 index 9612fee2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "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", - "dist": { - "shasum": "48772c8b50c4955c25e7cdbe69f4220f4138178b" - }, - "_from": "through2@~0.4.0", - "_resolved": "https://registry.npmjs.org/through2/-/through2-0.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/basic-test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/basic-test.js deleted file mode 100644 index 9d137c7f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/basic-test.js +++ /dev/null @@ -1,334 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/bench.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/bench.js deleted file mode 100644 index cc10868b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/bench.js +++ /dev/null @@ -1,42 +0,0 @@ -/* -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/sauce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/sauce.js deleted file mode 100644 index a6d28625..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/sauce.js +++ /dev/null @@ -1,38 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/test.js deleted file mode 100644 index aa9b4877..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/test.js +++ /dev/null @@ -1,9 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/through2.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/through2.js deleted file mode 100644 index c1104848..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/node_modules/through2/through2.js +++ /dev/null @@ -1,78 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/package.json deleted file mode 100644 index d289871c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/download/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "download", - "version": "0.1.10", - "description": "Download and extract files effortlessly", - "keywords": [ - "url", - "http", - "download", - "extract" - ], - "homepage": "https://github.com/kevva/download", - "bugs": { - "url": "https://github.com/kevva/download/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/kevva/download.git" - }, - "scripts": { - "test": "mocha --reporter list" - }, - "main": "download.js", - "files": [ - "download.js" - ], - "dependencies": { - "decompress": "~0.1.5", - "each-async": "~0.1.1", - "mkdirp": "~0.3.5", - "request": "~2.31.0", - "through2": "~0.4.0" - }, - "devDependencies": { - "mocha": "~1.17.0", - "nock": "~0.27.1", - "rimraf": "~2.2.5" - }, - "engines": { - "node": ">=0.10.0" - }, - "readme": "# download [![Build Status](https://secure.travis-ci.org/kevva/download.png?branch=master)](http://travis-ci.org/kevva/download)\n\nDownload and extract files effortlessly in Node.js.\n\n## Getting started\n\nInstall with [npm](https://npmjs.org/package/download): `npm install download`\n\n## Examples\n\nIf you're fetching an archive you can set `extract: true` in options and\nit'll extract it for you.\n\n```js\nvar download = require('download');\n\n// download and extract `foo.tar.gz` into `bar/`\ndownload('foo.tar.gz', 'bar', { extract: true });\n\n// download and save `foo.exe` into `bar/foo.exe` with mode `0755`\ndownload('foo.exe', 'bar', { mode: '0755' });\n\n// download and save `foo.zip` into `bar/foobar.zip`\ndownload({ url: 'foo.zip', name: 'foobar.zip' }, 'bar');\n\n// download and save an array of files in `bar/`\nvar files = ['foo.jpg', 'bar.jpg', 'cat.jpg'];\ndownload(files, 'bar');\n\n// download, save and rename an array of files in `bar/`\nvar files = [{\n url: 'foo.jpg',\n name: 'foobar.jpg'\n}, {\n url: 'cat.jpg',\n name: 'dog.jpg'\n}];\ndownload(files, 'bar');\n```\n\n## API\n\n### download(url, dest, opts)\n\nDownload a file or an array of files to a given destination. Returns an EventEmitter \nthat emits the following possible events:\n\n* `response` — Relayed when the underlying `http.ClientRequest` emits the same \nevent. Listeners called with a `http.IncomingMessage` instance.\n* `data` — Relayed when the underlying `http.IncomingMessage` emits the same \nevent. Listeners called with a `Buffer` instance.\n* `error` — Relayed when the underlying `http.ClientRequest` emits the same event \nor when the response status code is not in the 200s. Listeners called with an \n`Error` instance (in the first case) or the response status code.\n* `close` — Relayed when the underlying `stream.Duplex` emits the same event.\n\n## Options\n\nYou can define options accepted by the [request](https://github.com/mikeal/request/) module besides from the options below.\n\n### extract\n\nType: `Boolean` \nDefault: `false`\n\nIf set to `true`, try extracting the file using [decompress](https://github.com/kevva/decompress/).\n\n### mode\n\nType: `String` \nDefault: `undefined`\n\nSet mode on the downloaded files.\n\n### strip\n\nType: `Number` \nDefault: `0`\n\nEquivalent to `--strip-components` for tar.\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com)\n", - "readmeFilename": "README.md", - "_id": "download@0.1.10", - "dist": { - "shasum": "dc5d3ab4a7fc78e374e2de0381273b7b999bc29d" - }, - "_from": "download@~0.1.2", - "_resolved": "https://registry.npmjs.org/download/-/download-0.1.10.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/.npmignore deleted file mode 100644 index 2ccbe465..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules/ diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/.travis.yml deleted file mode 100644 index c1ffcb31..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.8 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/History.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/History.md deleted file mode 100644 index d1fa5334..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/History.md +++ /dev/null @@ -1,20 +0,0 @@ - -0.0.2 / 2013-05-29 -================== - - * Updated github url - * Fix bug calling isbin with list of paths - * Add tests for sync version - * Added travis CI passing image to readme - * Added node engines and keywords - * Added travis CI config - * Added basic readme - * Added basic test suite and Makefile - * Add async version - * Some refactorings using 'some' function - * Fixed issue with wrong paths if called multiple times - -0.0.1 / 2012-12-06 -================== - - * Initial release diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/Makefile deleted file mode 100644 index 1a2444a1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -REPORTER ?= dot - -test: - @NODE_ENV=test ./node_modules/mocha/bin/mocha -R $(REPORTER) - -.PHONY: test diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/README.md deleted file mode 100644 index 5224d614..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/README.md +++ /dev/null @@ -1,59 +0,0 @@ -[![Build Status](https://secure.travis-ci.org/mbehrendt/isbin.png?branch=master)](https://travis-ci.org/mbehrendt/isbin) - -# Isbin - -Tiny little helper library to determine if a certain binary is available within $PATH or any additional folder. - -# Installation - -```bash -$ npm install isbin -``` - -# Usage - -```js -var isbin = require('isbin'); - -// Test against $PATH -isbin('mysql', function(exists) { - console.log(exists); // ==> Boolean -}); - -// With additional path to test -isbin('mysql', '/usr/local/bin', function(exists) { - console.log(exists); // ==> Boolean -}); - -// Or multiple ones -isbin('mysql', ['/usr/local/bin', '/home/me/bins'], function(exists) { - console.log(exists); // ==> Boolean -}); -``` - -There are also synchronous versions available - -```js -var exists = isbin('mysql'); -var exists = isbin('mysql', '/usr/local/bin'); -var exists = isbin('mysql', ['/usr/local/bin', '/home/me/bins']); -``` - -# Running the tests - -```bash -$ npm install -$ make test -``` - -# License - -(The MIT License) - -Copyright (c) 2012 Mario Behrendt info@mario-behrendt.de, Stephan Hoyer <ste.hoyer@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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/index.js deleted file mode 100644 index bb0a047c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/lib/index.js deleted file mode 100644 index 1b8a5cac..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/lib/index.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Require dependencies - */ - -var fs = require('fs') - , async = require('async'); - -/** - * Check if given binary exists - * - * @param {String} bin Binary to test - * @param {String|Array} additional Additional paths to check - * @param {Function(result)} isbinChecked Callback when check is done async, optional - * @return {Boolean} True if binary was found - */ - -function isbin(bin, additional, isbinChecked) { - // isbin(bin, cb) - if (!isbinChecked) isbinChecked = additional; - - // Read $PATH to get set up bin folders - var paths = process.env.PATH.split(':') || []; - - // isbin(bin, 'path', cb) - if ('string' === typeof additional) { - paths.push(additional); - } - - // isbin(bin, ['path1', 'path2'], cb) - if ('object' === typeof additional && additional.length !== null) { - paths.concat(additional); - } - - // async check - if ('function' === typeof isbinChecked) { - return async.some(paths, function(path, pathChecked) { - fs.exists(path + '/' + bin, pathChecked); - }, isbinChecked); - } - - // sync check - return paths.reverse().some(function(path) { - return fs.existsSync(path + '/' + bin); - }); -}; - -/** - * Expose module - */ - -module.exports = isbin; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.gitmodules b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.gitmodules deleted file mode 100644 index a9aae984..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.gitmodules +++ /dev/null @@ -1,9 +0,0 @@ -[submodule "deps/nodeunit"] - path = deps/nodeunit - url = git://github.com/caolan/nodeunit.git -[submodule "deps/UglifyJS"] - path = deps/UglifyJS - url = https://github.com/mishoo/UglifyJS.git -[submodule "deps/nodelint"] - path = deps/nodelint - url = https://github.com/tav/nodelint.git diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.npmignore deleted file mode 100644 index 9bdfc97c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -deps -dist -test -nodelint.cfg \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/LICENSE deleted file mode 100644 index b7f9d500..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010 Caolan McMahon - -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/Makefile deleted file mode 100644 index bad647c6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -PACKAGE = asyncjs -NODEJS = $(if $(shell test -f /usr/bin/nodejs && echo "true"),nodejs,node) -CWD := $(shell pwd) -NODEUNIT = $(CWD)/node_modules/nodeunit/bin/nodeunit -UGLIFY = $(CWD)/node_modules/uglify-js/bin/uglifyjs -NODELINT = $(CWD)/node_modules/nodelint/nodelint - -BUILDDIR = dist - -all: clean test build - -build: $(wildcard lib/*.js) - mkdir -p $(BUILDDIR) - $(UGLIFY) lib/async.js > $(BUILDDIR)/async.min.js - -test: - $(NODEUNIT) test - -clean: - rm -rf $(BUILDDIR) - -lint: - $(NODELINT) --config nodelint.cfg lib/async.js - -.PHONY: test build all diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/README.md deleted file mode 100644 index 1bbbc477..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/README.md +++ /dev/null @@ -1,1021 +0,0 @@ -# Async.js - -Async is a utility module which provides straight-forward, powerful functions -for working with asynchronous JavaScript. Although originally designed for -use with [node.js](http://nodejs.org), it can also be used directly in the -browser. - -Async provides around 20 functions that include the usual 'functional' -suspects (map, reduce, filter, forEach…) as well as some common patterns -for asynchronous control flow (parallel, series, waterfall…). All these -functions assume you follow the node.js convention of providing a single -callback as the last argument of your async function. - - -## Quick Examples - - async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file - }); - - async.filter(['file1','file2','file3'], path.exists, function(results){ - // results now equals an array of the existing files - }); - - async.parallel([ - function(){ ... }, - function(){ ... } - ], callback); - - async.series([ - function(){ ... }, - function(){ ... } - ]); - -There are many more functions available so take a look at the docs below for a -full list. This module aims to be comprehensive, so if you feel anything is -missing please create a GitHub issue for it. - - -## Download - -Releases are available for download from -[GitHub](http://github.com/caolan/async/downloads). -Alternatively, you can install using Node Package Manager (npm): - - npm install async - - -__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 17.5kb Uncompressed - -__Production:__ [async.min.js](https://github.com/caolan/async/raw/master/dist/async.min.js) - 1.7kb Packed and Gzipped - - -## In the Browser - -So far its been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage: - - <script type="text/javascript" src="async.js"></script> - <script type="text/javascript"> - - async.map(data, asyncProcess, function(err, results){ - alert(results); - }); - - </script> - - -## Documentation - -### Collections - -* [forEach](#forEach) -* [map](#map) -* [filter](#filter) -* [reject](#reject) -* [reduce](#reduce) -* [detect](#detect) -* [sortBy](#sortBy) -* [some](#some) -* [every](#every) -* [concat](#concat) - -### Control Flow - -* [series](#series) -* [parallel](#parallel) -* [whilst](#whilst) -* [until](#until) -* [waterfall](#waterfall) -* [queue](#queue) -* [auto](#auto) -* [iterator](#iterator) -* [apply](#apply) -* [nextTick](#nextTick) - -### Utils - -* [memoize](#memoize) -* [unmemoize](#unmemoize) -* [log](#log) -* [dir](#dir) -* [noConflict](#noConflict) - - -## Collections - -<a name="forEach" /> -### forEach(arr, iterator, callback) - -Applies an iterator function to each item in an array, in parallel. -The iterator is called with an item from the list and a callback for when it -has finished. If the iterator passes an error to this callback, the main -callback for the forEach function is immediately called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - - // assuming openFiles is an array of file names and saveFile is a function - // to save the modified contents of that file: - - async.forEach(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error - }); - ---------------------------------------- - -<a name="forEachSeries" /> -### forEachSeries(arr, iterator, callback) - -The same as forEach only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. This means the iterator functions will complete in order. - - ---------------------------------------- - -<a name="forEachLimit" /> -### forEachLimit(arr, limit, iterator, callback) - -The same as forEach only the iterator is applied to batches of items in the -array, in series. The next batch of iterators is only called once the current -one has completed processing. - -__Arguments__ - -* arr - An array to iterate over. -* limit - How many items should be in each batch. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - - // Assume documents is an array of JSON objects and requestApi is a - // function that interacts with a rate-limited REST api. - - async.forEachLimit(documents, 20, requestApi, function(err){ - // if any of the saves produced an error, err would equal that error - }); ---------------------------------------- - -<a name="map" /> -### map(arr, iterator, callback) - -Produces a new array of values by mapping each value in the given array through -the iterator function. The iterator is called with an item from the array and a -callback for when it has finished processing. The callback takes 2 arguments, -an error and the transformed item from the array. If the iterator passes an -error to this callback, the main callback for the map function is immediately -called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order, however -the results array will be in the same order as the original array. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed - with an error (which can be null) and a transformed item. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array of the - transformed items from the original array. - -__Example__ - - async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file - }); - ---------------------------------------- - -<a name="mapSeries" /> -### mapSeries(arr, iterator, callback) - -The same as map only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - - ---------------------------------------- - -<a name="filter" /> -### filter(arr, iterator, callback) - -__Alias:__ select - -Returns a new array of all the values which pass an async truth test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like path.exists. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(results) - A callback which is called after all the iterator - functions have finished. - -__Example__ - - async.filter(['file1','file2','file3'], path.exists, function(results){ - // results now equals an array of the existing files - }); - ---------------------------------------- - -<a name="filterSeries" /> -### filterSeries(arr, iterator, callback) - -__alias:__ selectSeries - -The same as filter only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - ---------------------------------------- - -<a name="reject" /> -### reject(arr, iterator, callback) - -The opposite of filter. Removes values that pass an async truth test. - ---------------------------------------- - -<a name="rejectSeries" /> -### rejectSeries(arr, iterator, callback) - -The same as filter, only the iterator is applied to each item in the array -in series. - - ---------------------------------------- - -<a name="reduce" /> -### reduce(arr, memo, iterator, callback) - -__aliases:__ inject, foldl - -Reduces a list of values into a single value using an async iterator to return -each successive step. Memo is the initial state of the reduction. This -function only operates in series. For performance reasons, it may make sense to -split a call to this function into a parallel map, then use the normal -Array.prototype.reduce on the results. This function is for situations where -each step in the reduction needs to be async, if you can get the data before -reducing it then its probably a good idea to do so. - -__Arguments__ - -* arr - An array to iterate over. -* memo - The initial state of the reduction. -* iterator(memo, item, callback) - A function applied to each item in the - array to produce the next step in the reduction. The iterator is passed a - callback which accepts an optional error as its first argument, and the state - of the reduction as the second. If an error is passed to the callback, the - reduction is stopped and the main callback is immediately called with the - error. -* callback(err, result) - A callback which is called after all the iterator - functions have finished. Result is the reduced value. - -__Example__ - - async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); - }, function(err, result){ - // result is now equal to the last value of memo, which is 6 - }); - ---------------------------------------- - -<a name="reduceRight" /> -### reduceRight(arr, memo, iterator, callback) - -__Alias:__ foldr - -Same as reduce, only operates on the items in the array in reverse order. - - ---------------------------------------- - -<a name="detect" /> -### detect(arr, iterator, callback) - -Returns the first value in a list that passes an async truth test. The -iterator is applied in parallel, meaning the first iterator to return true will -fire the detect callback with that result. That means the result might not be -the first item in the original array (in terms of order) that passes the test. - -If order within the original array is important then look at detectSeries. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value undefined if none passed. - -__Example__ - - async.detect(['file1','file2','file3'], path.exists, function(result){ - // result now equals the first file in the list that exists - }); - ---------------------------------------- - -<a name="detectSeries" /> -### detectSeries(arr, iterator, callback) - -The same as detect, only the iterator is applied to each item in the array -in series. This means the result is always the first in the original array (in -terms of array order) that passes the truth test. - - ---------------------------------------- - -<a name="sortBy" /> -### sortBy(arr, iterator, callback) - -Sorts a list by the results of running each value through an async iterator. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed - with an error (which can be null) and a value to use as the sort criteria. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is the items from - the original array sorted by the values returned by the iterator calls. - -__Example__ - - async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); - }, function(err, results){ - // results is now the original array of files sorted by - // modified date - }); - - ---------------------------------------- - -<a name="some" /> -### some(arr, iterator, callback) - -__Alias:__ any - -Returns true if at least one element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like path.exists. Once any iterator -call returns true, the main callback is immediately called. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - either true or false depending on the values of the async tests. - -__Example__ - - async.some(['file1','file2','file3'], path.exists, function(result){ - // if result is true then at least one of the files exists - }); - ---------------------------------------- - -<a name="every" /> -### every(arr, iterator, callback) - -__Alias:__ all - -Returns true if every element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like path.exists. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(result) - A callback which is called after all the iterator - functions have finished. Result will be either true or false depending on - the values of the async tests. - -__Example__ - - async.every(['file1','file2','file3'], path.exists, function(result){ - // if result is true then every file exists - }); - ---------------------------------------- - -<a name="concat" /> -### concat(arr, iterator, callback) - -Applies an iterator to each item in a list, concatenating the results. Returns the -concatenated list. The iterators are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of the arguments passed to the iterator function. - -__Arguments__ - -* arr - An array to iterate over -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed - with an error (which can be null) and an array of results. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array containing - the concatenated results of the iterator function. - -__Example__ - - async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories - }); - ---------------------------------------- - -<a name="concatSeries" /> -### concatSeries(arr, iterator, callback) - -Same as async.concat, but executes in series instead of parallel. - - -## Control Flow - -<a name="series" /> -### series(tasks, [callback]) - -Run an array of functions in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run and the callback for the series is -immediately called with the value of the error. Once the tasks have completed, -the results are passed to the final callback as an array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.series. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback it must call on completion. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets an array of all the arguments passed to - the callbacks used in the array. - -__Example__ - - async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - }, - ], - // optional callback - function(err, results){ - // results is now equal to ['one', 'two'] - }); - - - // an example using an object instead of an array - async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - }, - }, - function(err, results) { - // results is now equal to: {one: 1, two: 2} - }); - - ---------------------------------------- - -<a name="parallel" /> -### parallel(tasks, [callback]) - -Run an array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main callback is immediately called with the value of the error. -Once the tasks have completed, the results are passed to the final callback as an -array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.parallel. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed a - callback it must call on completion. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets an array of all the arguments passed to - the callbacks used in the array. - -__Example__ - - async.parallel([ - function(callback){ - setTimeout(function(){ - callback(null, 'one'); - }, 200); - }, - function(callback){ - setTimeout(function(){ - callback(null, 'two'); - }, 100); - }, - ], - // optional callback - function(err, results){ - // the results array will equal ['one','two'] even though - // the second function had a shorter timeout. - }); - - - // an example using an object instead of an array - async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - }, - }, - function(err, results) { - // results is now equals to: {one: 1, two: 2} - }); - - ---------------------------------------- - -<a name="whilst" /> -### whilst(test, fn, callback) - -Repeatedly call fn, while test returns true. Calls the callback when stopped, -or an error occurs. - -__Arguments__ - -* test() - synchronous truth test to perform before each execution of fn. -* fn(callback) - A function to call each time the test passes. The function is - passed a callback which must be called once it has completed with an optional - error as the first argument. -* callback(err) - A callback which is called after the test fails and repeated - execution of fn has stopped. - -__Example__ - - var count = 0; - - async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } - ); - - ---------------------------------------- - -<a name="until" /> -### until(test, fn, callback) - -Repeatedly call fn, until test returns true. Calls the callback when stopped, -or an error occurs. - -The inverse of async.whilst. - - ---------------------------------------- - -<a name="waterfall" /> -### waterfall(tasks, [callback]) - -Runs an array of functions in series, each passing their results to the next in -the array. However, if any of the functions pass an error to the callback, the -next function is not executed and the main callback is immediately called with -the error. - -__Arguments__ - -* tasks - An array of functions to run, each function is passed a callback it - must call on completion. -* callback(err, [results]) - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - - async.waterfall([ - function(callback){ - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback){ - callback(null, 'three'); - }, - function(arg1, callback){ - // arg1 now equals 'three' - callback(null, 'done'); - } - ], function (err, result) { - // result now equals 'done' - }); - - ---------------------------------------- - -<a name="queue" /> -### queue(worker, concurrency) - -Creates a queue object with the specified concurrency. Tasks added to the -queue will be processed in parallel (up to the concurrency limit). If all -workers are in progress, the task is queued until one is available. Once -a worker has completed a task, the task's callback is called. - -__Arguments__ - -* worker(task, callback) - An asynchronous function for processing a queued - task. -* concurrency - An integer for determining how many worker functions should be - run in parallel. - -__Queue objects__ - -The queue object returned by this function has the following properties and -methods: - -* length() - a function returning the number of items waiting to be processed. -* concurrency - an integer for determining how many worker functions should be - run in parallel. This property can be changed after a queue is created to - alter the concurrency on-the-fly. -* push(task, [callback]) - add a new task to the queue, the callback is called - once the worker has finished processing the task. - instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list. -* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued -* empty - a callback that is called when the last item from the queue is given to a worker -* drain - a callback that is called when the last item from the queue has returned from the worker - -__Example__ - - // create a queue object with concurrency 2 - - var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); - }, 2); - - - // assign a callback - q.drain = function() { - console.log('all items have been processed'); - } - - // add some items to the queue - - q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); - }); - q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); - }); - - // add some items to the queue (batch-wise) - - q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing bar'); - }); - - ---------------------------------------- - -<a name="auto" /> -### auto(tasks, [callback]) - -Determines the best order for running functions based on their requirements. -Each function can optionally depend on other functions being completed first, -and each function is run as soon as its requirements are satisfied. If any of -the functions pass an error to their callback, that function will not complete -(so any other functions depending on it will not run) and the main callback -will be called immediately with the error. Functions also receive an object -containing the results of functions which have completed so far. - -__Arguments__ - -* tasks - An object literal containing named functions or an array of - requirements, with the function itself the last item in the array. The key - used for each function or array is used when specifying requirements. The - syntax is easier to understand by looking at the example. -* callback(err, results) - An optional callback which is called when all the - tasks have been completed. The callback will receive an error as an argument - if any tasks pass an error to their callback. If all tasks complete - successfully, it will receive an object containing their results. - -__Example__ - - async.auto({ - get_data: function(callback){ - // async code to get some data - }, - make_folder: function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - }, - write_file: ['get_data', 'make_folder', function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, filename); - }], - email_link: ['write_file', function(callback, results){ - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - }] - }); - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - - async.parallel([ - function(callback){ - // async code to get some data - }, - function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - } - ], - function(results){ - async.series([ - function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - }, - email_link: function(callback){ - // once the file is written let's email a link to it... - } - ]); - }); - -For a complicated series of async tasks using the auto function makes adding -new tasks much easier and makes the code more readable. - - ---------------------------------------- - -<a name="iterator" /> -### iterator(tasks) - -Creates an iterator function which calls the next function in the array, -returning a continuation to call the next one after that. Its also possible to -'peek' the next iterator by doing iterator.next(). - -This function is used internally by the async module but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* tasks - An array of functions to run, each function is passed a callback it - must call on completion. - -__Example__ - - var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } - ]); - - node> var iterator2 = iterator(); - 'one' - node> var iterator3 = iterator2(); - 'two' - node> iterator3(); - 'three' - node> var nextfn = iterator2.next(); - node> nextfn(); - 'three' - - ---------------------------------------- - -<a name="apply" /> -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied, a useful -shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - - // using apply - - async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), - ]); - - - // the same process without using apply - - async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - }, - ]); - -It's possible to pass any number of additional arguments when calling the -continuation: - - node> var fn = async.apply(sys.puts, 'one'); - node> fn('two', 'three'); - one - two - three - ---------------------------------------- - -<a name="nextTick" /> -### nextTick(callback) - -Calls the callback on a later loop around the event loop. In node.js this just -calls process.nextTick, in the browser it falls back to setTimeout(callback, 0), -which means other higher priority events may precede the execution of the callback. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* callback - The function to call on a later loop around the event loop. - -__Example__ - - var call_order = []; - async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two] - }); - call_order.push('one') - - -## Utils - -<a name="memoize" /> -### memoize(fn, [hasher]) - -Caches the results of an async function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -__Arguments__ - -* fn - the function you to proxy and cache results from. -* hasher - an optional function for generating a custom hash for storing - results, it has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - - var slow_fn = function (name, callback) { - // do something - callback(null, result); - }; - var fn = async.memoize(slow_fn); - - // fn can now be used as if it were slow_fn - fn('some name', function () { - // callback - }); - -<a name="unmemoize" /> -### unmemoize(fn) - -Undoes a memoized function, reverting it to the original, unmemoized -form. Comes handy in tests. - -__Arguments__ - -* fn - the memoized function - -<a name="log" /> -### log(function, arguments) - -Logs the result of an async function to the console. Only works in node.js or -in browsers that support console.log and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.log is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - - var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); - }; - - node> async.log(hello, 'world'); - 'hello world' - - ---------------------------------------- - -<a name="dir" /> -### dir(function, arguments) - -Logs the result of an async function to the console using console.dir to -display the properties of the resulting object. Only works in node.js or -in browsers that support console.dir and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.dir is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - - var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); - }; - - node> async.dir(hello, 'world'); - {hello: 'world'} - - ---------------------------------------- - -<a name="noConflict" /> -### noConflict() - -Changes the value of async back to its original value, returning a reference to the -async object. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/index.js deleted file mode 100644 index 8e238453..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// This file is just added for convenience so this repository can be -// directly checked out into a project's deps folder -module.exports = require('./lib/async'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/lib/async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/lib/async.js deleted file mode 100644 index 7cc4f5ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/lib/async.js +++ /dev/null @@ -1,692 +0,0 @@ -/*global setTimeout: false, console: false */ -(function () { - - var async = {}; - - // global on the server, window in the browser - var root = this, - previous_async = root.async; - - if (typeof module !== 'undefined' && module.exports) { - module.exports = async; - } - else { - root.async = async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - //// cross-browser compatiblity functions //// - - var _forEach = function (arr, iterator) { - if (arr.forEach) { - return arr.forEach(iterator); - } - for (var i = 0; i < arr.length; i += 1) { - iterator(arr[i], i, arr); - } - }; - - var _map = function (arr, iterator) { - if (arr.map) { - return arr.map(iterator); - } - var results = []; - _forEach(arr, function (x, i, a) { - results.push(iterator(x, i, a)); - }); - return results; - }; - - var _reduce = function (arr, iterator, memo) { - if (arr.reduce) { - return arr.reduce(iterator, memo); - } - _forEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - }; - - var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - if (typeof process === 'undefined' || !(process.nextTick)) { - async.nextTick = function (fn) { - setTimeout(fn, 0); - }; - } - else { - async.nextTick = process.nextTick; - } - - async.forEach = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - _forEach(arr, function (x) { - iterator(x, function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed === arr.length) { - callback(null); - } - } - }); - }); - }; - - async.forEachSeries = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - var iterate = function () { - iterator(arr[completed], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed === arr.length) { - callback(null); - } - else { - iterate(); - } - } - }); - }; - iterate(); - }; - - async.forEachLimit = function (arr, limit, iterator, callback) { - callback = callback || function () {}; - if (!arr.length || limit <= 0) { - return callback(); - } - var completed = 0; - var started = 0; - var running = 0; - - (function replenish () { - if (completed === arr.length) { - return callback(); - } - - while (running < limit && started < arr.length) { - started += 1; - running += 1; - iterator(arr[started - 1], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - running -= 1; - if (completed === arr.length) { - callback(); - } - else { - replenish(); - } - } - }); - } - })(); - }; - - - var doParallel = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.forEach].concat(args)); - }; - }; - var doSeries = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.forEachSeries].concat(args)); - }; - }; - - - var _asyncMap = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (err, v) { - results[x.index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - }; - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.reduce = function (arr, memo, iterator, callback) { - async.forEachSeries(arr, function (x, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - // inject alias - async.inject = async.reduce; - // foldl alias - async.foldl = async.reduce; - - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, function (x) { - return x; - }).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - // foldr alias - async.foldr = async.reduceRight; - - var _filter = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.filter = doParallel(_filter); - async.filterSeries = doSeries(_filter); - // select alias - async.select = async.filter; - async.selectSeries = async.filterSeries; - - var _reject = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (!v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.reject = doParallel(_reject); - async.rejectSeries = doSeries(_reject); - - var _detect = function (eachfn, arr, iterator, main_callback) { - eachfn(arr, function (x, callback) { - iterator(x, function (result) { - if (result) { - main_callback(x); - main_callback = function () {}; - } - else { - callback(); - } - }); - }, function (err) { - main_callback(); - }); - }; - async.detect = doParallel(_detect); - async.detectSeries = doSeries(_detect); - - async.some = function (arr, iterator, main_callback) { - async.forEach(arr, function (x, callback) { - iterator(x, function (v) { - if (v) { - main_callback(true); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(false); - }); - }; - // any alias - async.any = async.some; - - async.every = function (arr, iterator, main_callback) { - async.forEach(arr, function (x, callback) { - iterator(x, function (v) { - if (!v) { - main_callback(false); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(true); - }); - }; - // all alias - async.all = async.every; - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - var fn = function (left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }; - callback(null, _map(results.sort(fn), function (x) { - return x.value; - })); - } - }); - }; - - async.auto = function (tasks, callback) { - callback = callback || function () {}; - var keys = _keys(tasks); - if (!keys.length) { - return callback(null); - } - - var results = {}; - - var listeners = []; - var addListener = function (fn) { - listeners.unshift(fn); - }; - var removeListener = function (fn) { - for (var i = 0; i < listeners.length; i += 1) { - if (listeners[i] === fn) { - listeners.splice(i, 1); - return; - } - } - }; - var taskComplete = function () { - _forEach(listeners.slice(0), function (fn) { - fn(); - }); - }; - - addListener(function () { - if (_keys(results).length === keys.length) { - callback(null, results); - callback = function () {}; - } - }); - - _forEach(keys, function (k) { - var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k]; - var taskCallback = function (err) { - if (err) { - callback(err); - // stop subsequent errors hitting callback multiple times - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - taskComplete(); - } - }; - var requires = task.slice(0, Math.abs(task.length - 1)) || []; - var ready = function () { - return _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - }; - if (ready()) { - task[task.length - 1](taskCallback, results); - } - else { - var listener = function () { - if (ready()) { - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - }; - addListener(listener); - } - }); - }; - - async.waterfall = function (tasks, callback) { - callback = callback || function () {}; - if (!tasks.length) { - return callback(); - } - var wrapIterator = function (iterator) { - return function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - async.nextTick(function () { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(async.iterator(tasks))(); - }; - - async.parallel = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.map(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - async.forEach(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.series = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.mapSeries(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - async.forEachSeries(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.iterator = function (tasks) { - var makeCallback = function (index) { - var fn = function () { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - }; - return makeCallback(0); - }; - - async.apply = function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return fn.apply( - null, args.concat(Array.prototype.slice.call(arguments)) - ); - }; - }; - - var _concat = function (eachfn, arr, fn, callback) { - var r = []; - eachfn(arr, function (x, cb) { - fn(x, function (err, y) { - r = r.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, r); - }); - }; - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - if (test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.whilst(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.until = function (test, iterator, callback) { - if (!test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.until(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.queue = function (worker, concurrency) { - var workers = 0; - var q = { - tasks: [], - concurrency: concurrency, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _forEach(data, function(task) { - q.tasks.push({ - data: task, - callback: typeof callback === 'function' ? callback : null - }); - if (q.saturated && q.tasks.length == concurrency) { - q.saturated(); - } - async.nextTick(q.process); - }); - }, - process: function () { - if (workers < q.concurrency && q.tasks.length) { - var task = q.tasks.shift(); - if(q.empty && q.tasks.length == 0) q.empty(); - workers += 1; - worker(task.data, function () { - workers -= 1; - if (task.callback) { - task.callback.apply(task, arguments); - } - if(q.drain && q.tasks.length + workers == 0) q.drain(); - q.process(); - }); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - } - }; - return q; - }; - - var _console_fn = function (name) { - return function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - fn.apply(null, args.concat([function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (typeof console !== 'undefined') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _forEach(args, function (x) { - console[name](x); - }); - } - } - }])); - }; - }; - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - hasher = hasher || function (x) { - return x; - }; - var memoized = function () { - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - var key = hasher.apply(null, args); - if (key in memo) { - callback.apply(null, memo[key]); - } - else if (key in queues) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([function () { - memo[key] = arguments; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, arguments); - } - }])); - } - }; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - -}()); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/package.json deleted file mode 100644 index 31e18559..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "async", - "description": "Higher-order functions and common patterns for asynchronous code", - "main": "./index", - "author": { - "name": "Caolan McMahon" - }, - "version": "0.1.22", - "repository": { - "type": "git", - "url": "http://github.com/caolan/async.git" - }, - "bugs": { - "url": "http://github.com/caolan/async/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/caolan/async/raw/master/LICENSE" - } - ], - "devDependencies": { - "nodeunit": ">0.0.0", - "uglify-js": "1.2.x", - "nodelint": ">0.0.0" - }, - "readme": "# Async.js\n\nAsync is a utility module which provides straight-forward, powerful functions\nfor working with asynchronous JavaScript. Although originally designed for\nuse with [node.js](http://nodejs.org), it can also be used directly in the\nbrowser.\n\nAsync provides around 20 functions that include the usual 'functional'\nsuspects (map, reduce, filter, forEach…) as well as some common patterns\nfor asynchronous control flow (parallel, series, waterfall…). All these\nfunctions assume you follow the node.js convention of providing a single\ncallback as the last argument of your async function.\n\n\n## Quick Examples\n\n async.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n });\n\n async.filter(['file1','file2','file3'], path.exists, function(results){\n // results now equals an array of the existing files\n });\n\n async.parallel([\n function(){ ... },\n function(){ ... }\n ], callback);\n\n async.series([\n function(){ ... },\n function(){ ... }\n ]);\n\nThere are many more functions available so take a look at the docs below for a\nfull list. This module aims to be comprehensive, so if you feel anything is\nmissing please create a GitHub issue for it.\n\n\n## Download\n\nReleases are available for download from\n[GitHub](http://github.com/caolan/async/downloads).\nAlternatively, you can install using Node Package Manager (npm):\n\n npm install async\n\n\n__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 17.5kb Uncompressed\n\n__Production:__ [async.min.js](https://github.com/caolan/async/raw/master/dist/async.min.js) - 1.7kb Packed and Gzipped\n\n\n## In the Browser\n\nSo far its been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage:\n\n <script type=\"text/javascript\" src=\"async.js\"></script>\n <script type=\"text/javascript\">\n\n async.map(data, asyncProcess, function(err, results){\n alert(results);\n });\n\n </script>\n\n\n## Documentation\n\n### Collections\n\n* [forEach](#forEach)\n* [map](#map)\n* [filter](#filter)\n* [reject](#reject)\n* [reduce](#reduce)\n* [detect](#detect)\n* [sortBy](#sortBy)\n* [some](#some)\n* [every](#every)\n* [concat](#concat)\n\n### Control Flow\n\n* [series](#series)\n* [parallel](#parallel)\n* [whilst](#whilst)\n* [until](#until)\n* [waterfall](#waterfall)\n* [queue](#queue)\n* [auto](#auto)\n* [iterator](#iterator)\n* [apply](#apply)\n* [nextTick](#nextTick)\n\n### Utils\n\n* [memoize](#memoize)\n* [unmemoize](#unmemoize)\n* [log](#log)\n* [dir](#dir)\n* [noConflict](#noConflict)\n\n\n## Collections\n\n<a name=\"forEach\" />\n### forEach(arr, iterator, callback)\n\nApplies an iterator function to each item in an array, in parallel.\nThe iterator is called with an item from the list and a callback for when it\nhas finished. If the iterator passes an error to this callback, the main\ncallback for the forEach function is immediately called with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n // assuming openFiles is an array of file names and saveFile is a function\n // to save the modified contents of that file:\n\n async.forEach(openFiles, saveFile, function(err){\n // if any of the saves produced an error, err would equal that error\n });\n\n---------------------------------------\n\n<a name=\"forEachSeries\" />\n### forEachSeries(arr, iterator, callback)\n\nThe same as forEach only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. This means the iterator functions will complete in order.\n\n\n---------------------------------------\n\n<a name=\"forEachLimit\" />\n### forEachLimit(arr, limit, iterator, callback)\n\nThe same as forEach only the iterator is applied to batches of items in the\narray, in series. The next batch of iterators is only called once the current\none has completed processing.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - How many items should be in each batch.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n // Assume documents is an array of JSON objects and requestApi is a\n // function that interacts with a rate-limited REST api.\n\n async.forEachLimit(documents, 20, requestApi, function(err){\n // if any of the saves produced an error, err would equal that error\n });\n---------------------------------------\n\n<a name=\"map\" />\n### map(arr, iterator, callback)\n\nProduces a new array of values by mapping each value in the given array through\nthe iterator function. The iterator is called with an item from the array and a\ncallback for when it has finished processing. The callback takes 2 arguments, \nan error and the transformed item from the array. If the iterator passes an\nerror to this callback, the main callback for the map function is immediately\ncalled with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order, however\nthe results array will be in the same order as the original array.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed\n with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n async.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n });\n\n---------------------------------------\n\n<a name=\"mapSeries\" />\n### mapSeries(arr, iterator, callback)\n\nThe same as map only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n---------------------------------------\n\n<a name=\"filter\" />\n### filter(arr, iterator, callback)\n\n__Alias:__ select\n\nReturns a new array of all the values which pass an async truth test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists. This operation is\nperformed in parallel, but the results array will be in the same order as the\noriginal.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(results) - A callback which is called after all the iterator\n functions have finished.\n\n__Example__\n\n async.filter(['file1','file2','file3'], path.exists, function(results){\n // results now equals an array of the existing files\n });\n\n---------------------------------------\n\n<a name=\"filterSeries\" />\n### filterSeries(arr, iterator, callback)\n\n__alias:__ selectSeries\n\nThe same as filter only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n---------------------------------------\n\n<a name=\"reject\" />\n### reject(arr, iterator, callback)\n\nThe opposite of filter. Removes values that pass an async truth test.\n\n---------------------------------------\n\n<a name=\"rejectSeries\" />\n### rejectSeries(arr, iterator, callback)\n\nThe same as filter, only the iterator is applied to each item in the array\nin series.\n\n\n---------------------------------------\n\n<a name=\"reduce\" />\n### reduce(arr, memo, iterator, callback)\n\n__aliases:__ inject, foldl\n\nReduces a list of values into a single value using an async iterator to return\neach successive step. Memo is the initial state of the reduction. This\nfunction only operates in series. For performance reasons, it may make sense to\nsplit a call to this function into a parallel map, then use the normal\nArray.prototype.reduce on the results. This function is for situations where\neach step in the reduction needs to be async, if you can get the data before\nreducing it then its probably a good idea to do so.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* memo - The initial state of the reduction.\n* iterator(memo, item, callback) - A function applied to each item in the\n array to produce the next step in the reduction. The iterator is passed a\n callback which accepts an optional error as its first argument, and the state\n of the reduction as the second. If an error is passed to the callback, the\n reduction is stopped and the main callback is immediately called with the\n error.\n* callback(err, result) - A callback which is called after all the iterator\n functions have finished. Result is the reduced value.\n\n__Example__\n\n async.reduce([1,2,3], 0, function(memo, item, callback){\n // pointless async:\n process.nextTick(function(){\n callback(null, memo + item)\n });\n }, function(err, result){\n // result is now equal to the last value of memo, which is 6\n });\n\n---------------------------------------\n\n<a name=\"reduceRight\" />\n### reduceRight(arr, memo, iterator, callback)\n\n__Alias:__ foldr\n\nSame as reduce, only operates on the items in the array in reverse order.\n\n\n---------------------------------------\n\n<a name=\"detect\" />\n### detect(arr, iterator, callback)\n\nReturns the first value in a list that passes an async truth test. The\niterator is applied in parallel, meaning the first iterator to return true will\nfire the detect callback with that result. That means the result might not be\nthe first item in the original array (in terms of order) that passes the test.\n\nIf order within the original array is important then look at detectSeries.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n the first item in the array that passes the truth test (iterator) or the\n value undefined if none passed.\n\n__Example__\n\n async.detect(['file1','file2','file3'], path.exists, function(result){\n // result now equals the first file in the list that exists\n });\n\n---------------------------------------\n\n<a name=\"detectSeries\" />\n### detectSeries(arr, iterator, callback)\n\nThe same as detect, only the iterator is applied to each item in the array\nin series. This means the result is always the first in the original array (in\nterms of array order) that passes the truth test.\n\n\n---------------------------------------\n\n<a name=\"sortBy\" />\n### sortBy(arr, iterator, callback)\n\nSorts a list by the results of running each value through an async iterator.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed\n with an error (which can be null) and a value to use as the sort criteria.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is the items from\n the original array sorted by the values returned by the iterator calls.\n\n__Example__\n\n async.sortBy(['file1','file2','file3'], function(file, callback){\n fs.stat(file, function(err, stats){\n callback(err, stats.mtime);\n });\n }, function(err, results){\n // results is now the original array of files sorted by\n // modified date\n });\n\n\n---------------------------------------\n\n<a name=\"some\" />\n### some(arr, iterator, callback)\n\n__Alias:__ any\n\nReturns true if at least one element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists. Once any iterator\ncall returns true, the main callback is immediately called.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n either true or false depending on the values of the async tests.\n\n__Example__\n\n async.some(['file1','file2','file3'], path.exists, function(result){\n // if result is true then at least one of the files exists\n });\n\n---------------------------------------\n\n<a name=\"every\" />\n### every(arr, iterator, callback)\n\n__Alias:__ all\n\nReturns true if every element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(result) - A callback which is called after all the iterator\n functions have finished. Result will be either true or false depending on\n the values of the async tests.\n\n__Example__\n\n async.every(['file1','file2','file3'], path.exists, function(result){\n // if result is true then every file exists\n });\n\n---------------------------------------\n\n<a name=\"concat\" />\n### concat(arr, iterator, callback)\n\nApplies an iterator to each item in a list, concatenating the results. Returns the\nconcatenated list. The iterators are called in parallel, and the results are\nconcatenated as they return. There is no guarantee that the results array will\nbe returned in the original order of the arguments passed to the iterator function.\n\n__Arguments__\n\n* arr - An array to iterate over\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed\n with an error (which can be null) and an array of results.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array containing\n the concatenated results of the iterator function.\n\n__Example__\n\n async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){\n // files is now a list of filenames that exist in the 3 directories\n });\n\n---------------------------------------\n\n<a name=\"concatSeries\" />\n### concatSeries(arr, iterator, callback)\n\nSame as async.concat, but executes in series instead of parallel.\n\n\n## Control Flow\n\n<a name=\"series\" />\n### series(tasks, [callback])\n\nRun an array of functions in series, each one running once the previous\nfunction has completed. If any functions in the series pass an error to its\ncallback, no more functions are run and the callback for the series is\nimmediately called with the value of the error. Once the tasks have completed,\nthe results are passed to the final callback as an array.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.series.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed\n a callback it must call on completion.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets an array of all the arguments passed to\n the callbacks used in the array.\n\n__Example__\n\n async.series([\n function(callback){\n // do some stuff ...\n callback(null, 'one');\n },\n function(callback){\n // do some more stuff ...\n callback(null, 'two');\n },\n ],\n // optional callback\n function(err, results){\n // results is now equal to ['one', 'two']\n });\n\n\n // an example using an object instead of an array\n async.series({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n },\n },\n function(err, results) {\n // results is now equal to: {one: 1, two: 2}\n });\n\n\n---------------------------------------\n\n<a name=\"parallel\" />\n### parallel(tasks, [callback])\n\nRun an array of functions in parallel, without waiting until the previous\nfunction has completed. If any of the functions pass an error to its\ncallback, the main callback is immediately called with the value of the error.\nOnce the tasks have completed, the results are passed to the final callback as an\narray.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.parallel.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed a\n callback it must call on completion.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets an array of all the arguments passed to\n the callbacks used in the array.\n\n__Example__\n\n async.parallel([\n function(callback){\n setTimeout(function(){\n callback(null, 'one');\n }, 200);\n },\n function(callback){\n setTimeout(function(){\n callback(null, 'two');\n }, 100);\n },\n ],\n // optional callback\n function(err, results){\n // the results array will equal ['one','two'] even though\n // the second function had a shorter timeout.\n });\n\n\n // an example using an object instead of an array\n async.parallel({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n },\n },\n function(err, results) {\n // results is now equals to: {one: 1, two: 2}\n });\n\n\n---------------------------------------\n\n<a name=\"whilst\" />\n### whilst(test, fn, callback)\n\nRepeatedly call fn, while test returns true. Calls the callback when stopped,\nor an error occurs.\n\n__Arguments__\n\n* test() - synchronous truth test to perform before each execution of fn.\n* fn(callback) - A function to call each time the test passes. The function is\n passed a callback which must be called once it has completed with an optional\n error as the first argument.\n* callback(err) - A callback which is called after the test fails and repeated\n execution of fn has stopped.\n\n__Example__\n\n var count = 0;\n\n async.whilst(\n function () { return count < 5; },\n function (callback) {\n count++;\n setTimeout(callback, 1000);\n },\n function (err) {\n // 5 seconds have passed\n }\n );\n\n\n---------------------------------------\n\n<a name=\"until\" />\n### until(test, fn, callback)\n\nRepeatedly call fn, until test returns true. Calls the callback when stopped,\nor an error occurs.\n\nThe inverse of async.whilst.\n\n\n---------------------------------------\n\n<a name=\"waterfall\" />\n### waterfall(tasks, [callback])\n\nRuns an array of functions in series, each passing their results to the next in\nthe array. However, if any of the functions pass an error to the callback, the\nnext function is not executed and the main callback is immediately called with\nthe error.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a callback it\n must call on completion.\n* callback(err, [results]) - An optional callback to run once all the functions\n have completed. This will be passed the results of the last task's callback.\n\n\n\n__Example__\n\n async.waterfall([\n function(callback){\n callback(null, 'one', 'two');\n },\n function(arg1, arg2, callback){\n callback(null, 'three');\n },\n function(arg1, callback){\n // arg1 now equals 'three'\n callback(null, 'done');\n }\n ], function (err, result) {\n // result now equals 'done' \n });\n\n\n---------------------------------------\n\n<a name=\"queue\" />\n### queue(worker, concurrency)\n\nCreates a queue object with the specified concurrency. Tasks added to the\nqueue will be processed in parallel (up to the concurrency limit). If all\nworkers are in progress, the task is queued until one is available. Once\na worker has completed a task, the task's callback is called.\n\n__Arguments__\n\n* worker(task, callback) - An asynchronous function for processing a queued\n task.\n* concurrency - An integer for determining how many worker functions should be\n run in parallel.\n\n__Queue objects__\n\nThe queue object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* concurrency - an integer for determining how many worker functions should be\n run in parallel. This property can be changed after a queue is created to\n alter the concurrency on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n // create a queue object with concurrency 2\n\n var q = async.queue(function (task, callback) {\n console.log('hello ' + task.name);\n callback();\n }, 2);\n\n\n // assign a callback\n q.drain = function() {\n console.log('all items have been processed');\n }\n\n // add some items to the queue\n\n q.push({name: 'foo'}, function (err) {\n console.log('finished processing foo');\n });\n q.push({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n });\n\n // add some items to the queue (batch-wise)\n\n q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) {\n console.log('finished processing bar');\n });\n\n\n---------------------------------------\n\n<a name=\"auto\" />\n### auto(tasks, [callback])\n\nDetermines the best order for running functions based on their requirements.\nEach function can optionally depend on other functions being completed first,\nand each function is run as soon as its requirements are satisfied. If any of\nthe functions pass an error to their callback, that function will not complete\n(so any other functions depending on it will not run) and the main callback\nwill be called immediately with the error. Functions also receive an object\ncontaining the results of functions which have completed so far.\n\n__Arguments__\n\n* tasks - An object literal containing named functions or an array of\n requirements, with the function itself the last item in the array. The key\n used for each function or array is used when specifying requirements. The\n syntax is easier to understand by looking at the example.\n* callback(err, results) - An optional callback which is called when all the\n tasks have been completed. The callback will receive an error as an argument\n if any tasks pass an error to their callback. If all tasks complete\n successfully, it will receive an object containing their results.\n\n__Example__\n\n async.auto({\n get_data: function(callback){\n // async code to get some data\n },\n make_folder: function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n },\n write_file: ['get_data', 'make_folder', function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n callback(null, filename);\n }],\n email_link: ['write_file', function(callback, results){\n // once the file is written let's email a link to it...\n // results.write_file contains the filename returned by write_file.\n }]\n });\n\nThis is a fairly trivial example, but to do this using the basic parallel and\nseries functions would look like this:\n\n async.parallel([\n function(callback){\n // async code to get some data\n },\n function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n }\n ],\n function(results){\n async.series([\n function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n },\n email_link: function(callback){\n // once the file is written let's email a link to it...\n }\n ]);\n });\n\nFor a complicated series of async tasks using the auto function makes adding\nnew tasks much easier and makes the code more readable.\n\n\n---------------------------------------\n\n<a name=\"iterator\" />\n### iterator(tasks)\n\nCreates an iterator function which calls the next function in the array,\nreturning a continuation to call the next one after that. Its also possible to\n'peek' the next iterator by doing iterator.next().\n\nThis function is used internally by the async module but can be useful when\nyou want to manually control the flow of functions in series.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a callback it\n must call on completion.\n\n__Example__\n\n var iterator = async.iterator([\n function(){ sys.p('one'); },\n function(){ sys.p('two'); },\n function(){ sys.p('three'); }\n ]);\n\n node> var iterator2 = iterator();\n 'one'\n node> var iterator3 = iterator2();\n 'two'\n node> iterator3();\n 'three'\n node> var nextfn = iterator2.next();\n node> nextfn();\n 'three'\n\n\n---------------------------------------\n\n<a name=\"apply\" />\n### apply(function, arguments..)\n\nCreates a continuation function with some arguments already applied, a useful\nshorthand when combined with other control flow functions. Any arguments\npassed to the returned function are added to the arguments originally passed\nto apply.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to automatically apply when the\n continuation is called.\n\n__Example__\n\n // using apply\n\n async.parallel([\n async.apply(fs.writeFile, 'testfile1', 'test1'),\n async.apply(fs.writeFile, 'testfile2', 'test2'),\n ]);\n\n\n // the same process without using apply\n\n async.parallel([\n function(callback){\n fs.writeFile('testfile1', 'test1', callback);\n },\n function(callback){\n fs.writeFile('testfile2', 'test2', callback);\n },\n ]);\n\nIt's possible to pass any number of additional arguments when calling the\ncontinuation:\n\n node> var fn = async.apply(sys.puts, 'one');\n node> fn('two', 'three');\n one\n two\n three\n\n---------------------------------------\n\n<a name=\"nextTick\" />\n### nextTick(callback)\n\nCalls the callback on a later loop around the event loop. In node.js this just\ncalls process.nextTick, in the browser it falls back to setTimeout(callback, 0),\nwhich means other higher priority events may precede the execution of the callback.\n\nThis is used internally for browser-compatibility purposes.\n\n__Arguments__\n\n* callback - The function to call on a later loop around the event loop.\n\n__Example__\n\n var call_order = [];\n async.nextTick(function(){\n call_order.push('two');\n // call_order now equals ['one','two]\n });\n call_order.push('one')\n\n\n## Utils\n\n<a name=\"memoize\" />\n### memoize(fn, [hasher])\n\nCaches the results of an async function. When creating a hash to store function\nresults against, the callback is omitted from the hash and an optional hash\nfunction can be used.\n\n__Arguments__\n\n* fn - the function you to proxy and cache results from.\n* hasher - an optional function for generating a custom hash for storing\n results, it has all the arguments applied to it apart from the callback, and\n must be synchronous.\n\n__Example__\n\n var slow_fn = function (name, callback) {\n // do something\n callback(null, result);\n };\n var fn = async.memoize(slow_fn);\n\n // fn can now be used as if it were slow_fn\n fn('some name', function () {\n // callback\n });\n\n<a name=\"unmemoize\" />\n### unmemoize(fn)\n\nUndoes a memoized function, reverting it to the original, unmemoized\nform. Comes handy in tests.\n\n__Arguments__\n\n* fn - the memoized function\n\n<a name=\"log\" />\n### log(function, arguments)\n\nLogs the result of an async function to the console. Only works in node.js or\nin browsers that support console.log and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.log is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n var hello = function(name, callback){\n setTimeout(function(){\n callback(null, 'hello ' + name);\n }, 1000);\n };\n\n node> async.log(hello, 'world');\n 'hello world'\n\n\n---------------------------------------\n\n<a name=\"dir\" />\n### dir(function, arguments)\n\nLogs the result of an async function to the console using console.dir to\ndisplay the properties of the resulting object. Only works in node.js or\nin browsers that support console.dir and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.dir is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n var hello = function(name, callback){\n setTimeout(function(){\n callback(null, {hello: name});\n }, 1000);\n };\n\n node> async.dir(hello, 'world');\n {hello: 'world'}\n\n\n---------------------------------------\n\n<a name=\"noConflict\" />\n### noConflict()\n\nChanges the value of async back to its original value, returning a reference to the\nasync object.\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/caolan/async", - "_id": "async@0.1.22", - "dist": { - "shasum": "3b270eedc0419d6f92a664444ce98e0f59a8fef7" - }, - "_from": "async@0.1.22", - "_resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/package.json deleted file mode 100644 index 1d8c8459..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "isbin", - "version": "0.0.2", - "description": "Checks for available binaries on unix machines", - "main": "index.js", - "engines": { - "node": ">= 0.8.0" - }, - "keywords": [ - "fs", - "bin", - "binary", - "exists", - "check", - "path" - ], - "scripts": { - "test": "make test" - }, - "repository": { - "type": "git", - "url": "git://github.com/behrendtio/isbin.git" - }, - "author": "", - "license": "MIT", - "dependencies": { - "async": "0.1.22" - }, - "devDependencies": { - "mocha": "1.7.3", - "should": "1.2.1" - }, - "readme": "[![Build Status](https://secure.travis-ci.org/mbehrendt/isbin.png?branch=master)](https://travis-ci.org/mbehrendt/isbin)\n\n# Isbin\n\nTiny little helper library to determine if a certain binary is available within $PATH or any additional folder.\n\n# Installation\n\n```bash\n$ npm install isbin\n```\n\n# Usage\n\n```js\nvar isbin = require('isbin');\n\n// Test against $PATH\nisbin('mysql', function(exists) {\n console.log(exists); // ==> Boolean\n});\n\n// With additional path to test\nisbin('mysql', '/usr/local/bin', function(exists) {\n console.log(exists); // ==> Boolean\n});\n\n// Or multiple ones\nisbin('mysql', ['/usr/local/bin', '/home/me/bins'], function(exists) {\n console.log(exists); // ==> Boolean\n});\n```\n\nThere are also synchronous versions available\n\n```js\nvar exists = isbin('mysql');\nvar exists = isbin('mysql', '/usr/local/bin');\nvar exists = isbin('mysql', ['/usr/local/bin', '/home/me/bins']);\n```\n\n# Running the tests\n\n```bash\n$ npm install\n$ make test\n```\n\n# License\n\n(The MIT License)\n\nCopyright (c) 2012 Mario Behrendt info@mario-behrendt.de, Stephan Hoyer <ste.hoyer@gmail.com>\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/behrendtio/isbin/issues" - }, - "homepage": "https://github.com/behrendtio/isbin", - "_id": "isbin@0.0.2", - "dist": { - "shasum": "2a35fb234ad5ee30f78da61b57e8f42ac43ec5a4" - }, - "_from": "isbin@0.0.2", - "_resolved": "https://registry.npmjs.org/isbin/-/isbin-0.0.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/test/isbin.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/test/isbin.js deleted file mode 100644 index 068a38a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/test/isbin.js +++ /dev/null @@ -1,39 +0,0 @@ -var isbin = require('../'); - -describe('isbin', function() { - it('accepts binary, additional path and callback', function(done) { - isbin('ls', '/etc', function(exists) { - exists.should.be.a('boolean'); - done(); - }) - }); - - it('accepts array of paths', function(done) { - isbin('ls', ['/etc', '/home'], function(exists) { - exists.should.be.a('boolean'); - done(); - }); - }); - - it('accepts just binary and callback', function(done) { - isbin('ls', function(exists) { - exists.should.be.a('boolean'); - done(); - }); - }); - - it('accepts binary, additional path and callback', function() { - var exists = isbin('ls', '/etc'); - exists.should.be.a('boolean'); - }); - - it('accepts array of paths', function() { - var exists = isbin('ls', ['/etc', '/home']); - exists.should.be.a('boolean'); - }); - - it('accepts just binary', function() { - var exists = isbin('ls'); - exists.should.be.a('boolean'); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/test/mocha.opts b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/test/mocha.opts deleted file mode 100644 index e5eb9f87..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/isbin/test/mocha.opts +++ /dev/null @@ -1,4 +0,0 @@ ---require should ---bail ---ui bdd ---slow 100 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.editorconfig b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.editorconfig deleted file mode 100644 index e036e247..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -; EditorConfig is awesome: http://EditorConfig.org - -; top-most EditorConfig file -root = true - -; base rules -[*] -end_of_line = lf -insert_final_newline = false -indent_style = space -indent_size = 4 -charset = utf-8 -trim_trailing_whitespace = true - -; The default indent on package.json is 2 spaces, better to keep it so we can -; use `npm install --save` and other features that rewrites the package.json -; file automatically -[package.json] -indent_style = space -indent_size = 2 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.jshintrc b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.jshintrc deleted file mode 100644 index bbdb29cf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.jshintrc +++ /dev/null @@ -1,69 +0,0 @@ -{ - // Settings - "passfail" : false, // Stop on first error. - "maxerr" : 50, // Maximum error before stopping. - - - // Predefined globals whom JSHint will ignore. - "browser" : true, // Standard browser globals e.g. `window`, `document`. - "couch" : false, - "dojo" : false, - "jquery" : true, - "mootools" : false, - "node" : false, - "prototypejs" : false, - "rhino" : false, - "wsh" : false, - - // Custom globals. - "predef" : [ - "define", - "require" - ], - - - // Development. - "debug" : false, // Allow debugger statements e.g. browser breakpoints. - "devel" : false, // Allow developments statements e.g. `console.log();`. - - - // EcmaScript 5. - "es5" : false, // Allow EcmaScript 5 syntax. - "globalstrict" : false, // Allow global "use strict" (also enables 'strict'). - "strict" : false, // Require `use strict` pragma in every file. - - - // The Good Parts. - "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons). - "bitwise" : false, // Prohibit bitwise operators (&, |, ^, etc.). - "boss" : true, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. - "curly" : false, // Require {} for every new block or scope. - "eqeqeq" : true, // Require triple equals i.e. `===`. - "eqnull" : true, // Tolerate use of `== null`. - "evil" : false, // Tolerate use of `eval`. - "expr" : false, // Tolerate `ExpressionStatement` as Programs. - "forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`. - "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` - "latedef" : false, // Prohibit variable use before definition. - "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. - "loopfunc" : false, // Allow functions to be defined within loops. - "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. - "regexdash" : true, // Tolerate unescaped last dash i.e. `[-...]`. - "regexp" : false, // Prohibit `.` and `[^...]` in regular expressions. - "scripturl" : false, // Tolerate script-targeted URLs. - "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. - "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. - "undef" : false, // Require all non-global variables be declared before they are used. - - - // Personal styling prefrences. - "newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`. - "noempty" : true, // Prohipit use of empty blocks. - "nomen" : false, // Prohibit use of initial or trailing underbars in names. - "nonew" : true, // Prohibit use of constructors for side-effects. - "onevar" : false, // Allow only one `var` statement per function. - "plusplus" : false, // Prohibit use of `++` & `--`. - "sub" : false, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. - "trailing" : true, // Prohibit trailing whitespaces. - "white" : false // Check against strict whitespace and indentation rules. -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.npmignore deleted file mode 100644 index 1341acd9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.npmignore +++ /dev/null @@ -1,30 +0,0 @@ -# dumb files -# ========== - -.tmp* -.project -.settings/ -.livereload -.DS_Store? -ehthumbs.db -Icon? -Thumbs.db - - -# stuff not needed by node -# ======================== - -node_modules/ -tests/ -_build/ -doc_html/ -coverage/ - -# we keep the doc/ folder in case npm decides to display it in the future -# also good in case user is using an old version or working offline - -# we also keep the src/ folder in case the user still needs the AMD modules -# after build (see issue #102) - -bower.json -build.js diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.travis.yml deleted file mode 100644 index 36de1532..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ - language: node_js - node_js: - - "0.8" - script: "npm test --coverage" - notifications: - irc: - channels: - - "irc.freenode.org#moutjs" - on_success: always - on_failure: always - use_notice: true - skip_join: true - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/CHANGELOG.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/CHANGELOG.md deleted file mode 100644 index 0f5eac12..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/CHANGELOG.md +++ /dev/null @@ -1,93 +0,0 @@ -mout changelog -============== - -v0.6.0 (2013/05/22) -------------------- - - - add optional delimeter to `string/unCamelCase` - - allow custom char on `number/pad` - - allow underscore characters in `string/removeNonWord` - - accept `level` on `array/flatten` instead of a flag - - convert underscores to camelCase in `string/camelCase` - - remove `create()` from number/currencyFormat - - add `date/dayOfTheYear` - - add `date/diff` - - add `date/isSame` - - add `date/startOf` - - add `date/strftime` - - add `date/timezoneAbbr` - - add `date/timezoneOffset` - - add `date/totalDaysInYear` - - add `date/weekOfTheYear` - - add `function/timeout` - - add `object/bindAll` - - add `object/functions` - - add `time/convert` - - -v0.5.0 (2013/04/04) -------------------- - - - add `array/collect` - - add `callback` parameter to `object/equals` and `object/deepEquals` to allow - custom compare operations. - - normalize behavior in `array/*` methods to treat `null` values as empty - arrays when reading from array - - add `date/parseIso` - - add `date/isLeapYear` - - add `date/totalDaysInMonth` - - add `object/deepMatches` - - change `function/makeIterator_` to use `deepMatches` (affects nearly all - iteration methods) - - add `thisObj` parameter to `array/min` and `array/max` - - -v0.4.0 (2013/02/26) -------------------- - - - add `object/equals` - - add `object/deepEquals` - - add `object/matches`. - - add `lang/is` and `lang/isnt`. - - add `lang/isInteger`. - - add `array/findIndex`. - - add shorthand syntax to `array/*`, `object/*` and `collection/*` methods. - - improve `number/sign` behavior when value is NaN or +0 or -0. - - improve `lang/isNaN` to actually check if value *is not a number* without - coercing value; so `[]`, `""`, `null` and `"12"` are considered NaN (#39). - - improve `string/contains` to match ES6 behavior (add fromIndex argument). - - -v0.3.0 (2013/02/01) -------------------- - - - add `lang/clone`. - - add `lang/toString`. - - add `string/replace`. - - add `string/WHITE_SPACES` - - rename `function/curry` to `function/partial`. - - allow custom chars in `string/trim`, `ltrim`, and `rtrim`. - - convert values to strings in the `string/*` functions. - - -v0.2.0 (2013/01/13) -------------------- - - - fix bug in `math/ceil` for negative radixes. - - change `object/deepFillIn` and `object/deepMixIn` to recurse only if both - existing and new values are plain objects. Will not recurse into arrays - or objects not created by the Object constructor. - - add `lang/isPlainObject` to check if a file is a valid object and is created - by the Object constructor - - change `lang/clone` behavior when dealing with custom types (avoid cloning - it by default) and add second argument to allow custom behavior if needed. - - rename `lang/clone` to `lang/deepClone`. - - add VERSION property to index.js - - simplify `math/floor`, `math/round`, `math/ceil` and `math/countSteps`. - - -v0.1.0 (2013/01/09) -------------------- - -- Rename project from "amd-utils" to "mout" - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/CONTRIBUTING.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/CONTRIBUTING.md deleted file mode 100644 index 65d9add1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/CONTRIBUTING.md +++ /dev/null @@ -1,61 +0,0 @@ -# Contributing - -Fork the repo at https://github.com/mout/mout - - > "Write clearly, don't be too clever" - The Elements of Programming Style - -Avoid unnamed functions and follow the other modules structure. By only using named functions it will be easier to extract the code from the AMD module if needed and it will also give better error messages, JavaScript minifiers like [Google Closure Compiler](http://code.google.com/closure/compiler/) and [UglifyJS](https://github.com/mishoo/UglifyJS) will make sure code is as small/optimized as possible. - - > "Make it clear before you make it faster." - The Elements of Programming Style - -Be sure to always create tests for each proposed module. Features will only be merged if they contain proper tests and documentation. - - > "Good code is its own best documentation." - Steve McConnell - -We should do a code review before merging to make sure names makes sense and implementation is as good as possible. - -Try to split your pull requests into logical groups, the smaller the easier to be reviewed/merged. - - - -## Tests & Code Coverage ## - -Tests can be found inside the `tests` folder, to execute them in the browser open the `tests/runner.html`. The same tests also work on node.js by running `npm test`. - -We should have tests for all methods and ensure we have a high code coverage through our continuous integration server ([travis](https://travis-ci.org/mout/mout)). When you ask for a pull request Travis will automatically run the tests on node.js and check the code coverage as well. - -We run `node build pkg` automatically before any `npm test`, so specs and packages should always be in sync. (will avoid human mistakes) - -To check code coverage run `npm test --coverage`, it will generate the reports inside the `coverage` folder and also log the results. Please note that node.js doesn't execute all code branches since we have some conditionals that are only met on old JavaScript engines (eg. IE 7-8), so we will never have 100% code coverage (but should be close to it). - - - -## Build Script ## - -The [build script](https://github.com/mout/mout/wiki/Build-Script) can be extremely helpful and can avoid human mistakes, use it. - - - -## Admins / Pull Requests ## - -Even if you are an admin (have commit rights) please do pull requests when adding new features or changing current behavior, that way we can review the work and discuss. Feel free to push changes that doesn't affect behavior without asking for a pull request (readme, changelog, build script, typos, refactoring, ...). - - - -## Large changes ## - -If you are proposing some major change, please create an issue to discuss it first. (maybe it's outside the scope of the project) - - - -## Questions / IRC / Wiki / Issue Tracker ## - -When in doubt ask someone on IRC to help you ([#moutjs on irc.freenode.net](http://webchat.freenode.net/?channels=moutjs)) or create a [new issue](http://github.com/mout/mout/issues). - -The [project wiki](https://github.com/mout/mout/wiki) can also be a good resource of information. - - ---- - -Check the [contributors list at github](https://github.com/mout/mout/contributors). - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/LICENSE.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/LICENSE.md deleted file mode 100644 index e9ccc2be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -# The MIT License (MIT) -## Copyright (c) 2012, 2013 moutjs team and contributors (http://moutjs.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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/README.md deleted file mode 100644 index 872943bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/README.md +++ /dev/null @@ -1,63 +0,0 @@ -![mout](http://moutjs.com/logo.png "Modular JavaScript Utilties") - -http://moutjs.com/ - -[![Build Status](https://travis-ci.org/mout/mout.png?branch=master)](https://travis-ci.org/mout/mout) - -All code is library agnostic and consist mostly of helper methods that aren't -directly related with the DOM, the purpose of this library isn't to replace -Dojo, jQuery, YUI, Mootools, etc, but to provide modular solutions for common -problems that aren't solved by most of them. Consider it as a crossbrowser -JavaScript standard library. - - - -## Main goals ## - - - increase code reuse; - - be clear (code should be clean/readable); - - be easy to debug; - - be easy to maintain; - - follow best practices; - - follow standards when possible; - - **don't convert JavaScript into another language!** - - be compatible with other frameworks; - - be modular; - - have unit tests for all modules; - - work on multiple environments (IE7+, modern browsers, node.js); - - - -## What shouldn't be here ## - - - UI components; - - CSS selector engine; - - Event system - pub/sub; - - Template engine; - - Anything that isn't generic enough to be on a standard library; - - Anything that could be a separate library and/or isn't a modular utility... - - - -## API Documentation ## - -Online documentation can be found at http://moutjs.com/ or inside the -`doc` folder. - - - -## FAQ / Wiki / IRC ## - -For more info about project structure, design decisions, tips, how to -contribute, build system, etc, please check the [project -wiki](https://github.com/mout/mout/wiki). - -We also have an IRC channel [#moutjs on -irc.freenode.net](http://webchat.freenode.net/?channels=moutjs) - - - -## License ## - -Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php). - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array.js deleted file mode 100644 index 89d388ba..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array.js +++ /dev/null @@ -1,46 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'append' : require('./array/append'), - 'collect' : require('./array/collect'), - 'combine' : require('./array/combine'), - 'compact' : require('./array/compact'), - 'contains' : require('./array/contains'), - 'difference' : require('./array/difference'), - 'every' : require('./array/every'), - 'filter' : require('./array/filter'), - 'find' : require('./array/find'), - 'findIndex' : require('./array/findIndex'), - 'flatten' : require('./array/flatten'), - 'forEach' : require('./array/forEach'), - 'indexOf' : require('./array/indexOf'), - 'insert' : require('./array/insert'), - 'intersection' : require('./array/intersection'), - 'invoke' : require('./array/invoke'), - 'join' : require('./array/join'), - 'lastIndexOf' : require('./array/lastIndexOf'), - 'map' : require('./array/map'), - 'max' : require('./array/max'), - 'min' : require('./array/min'), - 'pick' : require('./array/pick'), - 'pluck' : require('./array/pluck'), - 'range' : require('./array/range'), - 'reduce' : require('./array/reduce'), - 'reduceRight' : require('./array/reduceRight'), - 'reject' : require('./array/reject'), - 'remove' : require('./array/remove'), - 'removeAll' : require('./array/removeAll'), - 'shuffle' : require('./array/shuffle'), - 'some' : require('./array/some'), - 'sort' : require('./array/sort'), - 'split' : require('./array/split'), - 'toLookup' : require('./array/toLookup'), - 'union' : require('./array/union'), - 'unique' : require('./array/unique'), - 'xor' : require('./array/xor'), - 'zip' : require('./array/zip') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/append.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/append.js deleted file mode 100644 index bf74037e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/append.js +++ /dev/null @@ -1,21 +0,0 @@ - - - /** - * Appends an array to the end of another. - * The first array will be modified. - */ - function append(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var pad = arr1.length, - i = -1, - len = arr2.length; - while (++i < len) { - arr1[pad + i] = arr2[i]; - } - return arr1; - } - module.exports = append; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/collect.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/collect.js deleted file mode 100644 index 58637493..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/collect.js +++ /dev/null @@ -1,27 +0,0 @@ -var append = require('./append'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Maps the items in the array and concatenates the result arrays. - */ - function collect(arr, callback, thisObj){ - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - var value = callback(arr[i], i, arr); - if (value != null) { - append(results, value); - } - } - - return results; - } - - module.exports = collect; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/combine.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/combine.js deleted file mode 100644 index d66e6212..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/combine.js +++ /dev/null @@ -1,22 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Combines an array with all the items of another. - * Does not allow duplicates and is case and type sensitive. - */ - function combine(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var i = -1, len = arr2.length; - while (++i < len) { - if (indexOf(arr1, arr2[i]) === -1) { - arr1.push(arr2[i]); - } - } - - return arr1; - } - module.exports = combine; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/compact.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/compact.js deleted file mode 100644 index 74c176ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/compact.js +++ /dev/null @@ -1,13 +0,0 @@ -var filter = require('./filter'); - - /** - * Remove all null/undefined items from array. - */ - function compact(arr) { - return filter(arr, function(val){ - return (val != null); - }); - } - - module.exports = compact; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/contains.js deleted file mode 100644 index 92bb6ad9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/contains.js +++ /dev/null @@ -1,10 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * If array contains values. - */ - function contains(arr, val) { - return indexOf(arr, val) !== -1; - } - module.exports = contains; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/difference.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/difference.js deleted file mode 100644 index d0570510..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/difference.js +++ /dev/null @@ -1,22 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var some = require('./some'); -var contains = require('./contains'); - - - /** - * Return a new Array with elements that aren't present in the other Arrays. - */ - function difference(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return !some(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - module.exports = difference; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/every.js deleted file mode 100644 index ac598832..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/every.js +++ /dev/null @@ -1,27 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array every - */ - function every(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (!callback(arr[i], i, arr) ) { - result = false; - break; - } - } - - return result; - } - - module.exports = every; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/filter.js deleted file mode 100644 index ebeb58dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/filter.js +++ /dev/null @@ -1,27 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Array filter - */ - function filter(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - module.exports = filter; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/find.js deleted file mode 100644 index b4a73131..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/find.js +++ /dev/null @@ -1,13 +0,0 @@ -var findIndex = require('./findIndex'); - - /** - * Returns first item that matches criteria - */ - function find(arr, iterator, thisObj){ - var idx = findIndex(arr, iterator, thisObj); - return idx >= 0? arr[idx] : void(0); - } - - module.exports = find; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/findIndex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/findIndex.js deleted file mode 100644 index 53f22a5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/findIndex.js +++ /dev/null @@ -1,23 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Returns the index of the first item that matches criteria - */ - function findIndex(arr, iterator, thisObj){ - iterator = makeIterator(iterator, thisObj); - if (arr == null) { - return -1; - } - - var i = -1, len = arr.length; - while (++i < len) { - if (iterator(arr[i], i, arr)) { - return i; - } - } - - return -1; - } - - module.exports = findIndex; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/flatten.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/flatten.js deleted file mode 100644 index aa9757ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/flatten.js +++ /dev/null @@ -1,43 +0,0 @@ -var isArray = require('../lang/isArray'); -var append = require('./append'); - - /* - * Helper function to flatten to a destination array. - * Used to remove the need to create intermediate arrays while flattening. - */ - function flattenTo(arr, result, level) { - if (arr == null) { - return result; - } else if (level === 0) { - append(result, arr); - return result; - } - - var value, - i = -1, - len = arr.length; - while (++i < len) { - value = arr[i]; - if (isArray(value)) { - flattenTo(value, result, level - 1); - } else { - result.push(value); - } - } - return result; - } - - /** - * Recursively flattens an array. - * A new array containing all the elements is returned. - * If `shallow` is true, it will only flatten one level. - */ - function flatten(arr, level) { - level = level == null? -1 : level; - return flattenTo(arr, [], level); - } - - module.exports = flatten; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/forEach.js deleted file mode 100644 index 268e506f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/forEach.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Array forEach - */ - function forEach(arr, callback, thisObj) { - if (arr == null) { - return; - } - var i = -1, - len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback.call(thisObj, arr[i], i, arr) === false ) { - break; - } - } - } - - module.exports = forEach; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/indexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/indexOf.js deleted file mode 100644 index 6a9ac832..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/indexOf.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Array.indexOf - */ - function indexOf(arr, item, fromIndex) { - fromIndex = fromIndex || 0; - if (arr == null) { - return -1; - } - - var len = arr.length, - i = fromIndex < 0 ? len + fromIndex : fromIndex; - while (i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[i] === item) { - return i; - } - - i++; - } - - return -1; - } - - module.exports = indexOf; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/insert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/insert.js deleted file mode 100644 index f1f95b75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/insert.js +++ /dev/null @@ -1,15 +0,0 @@ -var difference = require('./difference'); -var toArray = require('../lang/toArray'); - - /** - * Insert item into array if not already present. - */ - function insert(arr, rest_items) { - var diff = difference(toArray(arguments).slice(1), arr); - if (diff.length) { - Array.prototype.push.apply(arr, diff); - } - return arr.length; - } - module.exports = insert; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/intersection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/intersection.js deleted file mode 100644 index e6170062..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/intersection.js +++ /dev/null @@ -1,23 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var every = require('./every'); -var contains = require('./contains'); - - - /** - * Return a new Array with elements common to all Arrays. - * - based on underscore.js implementation - */ - function intersection(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return every(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - module.exports = intersection; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/invoke.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/invoke.js deleted file mode 100644 index c01aab1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/invoke.js +++ /dev/null @@ -1,23 +0,0 @@ -var forEach = require('./forEach'); - - /** - * Call `methodName` on each item of the array passing custom arguments if - * needed. - */ - function invoke(arr, methodName, var_args){ - if (arr == null) { - return arr; - } - - var args = Array.prototype.slice.call(arguments, 2); - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - value[methodName].apply(value, args); - } - - return arr; - } - - module.exports = invoke; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/join.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/join.js deleted file mode 100644 index 71d8bd20..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/join.js +++ /dev/null @@ -1,17 +0,0 @@ -var filter = require('./filter'); - - function isValidString(val) { - return (val != null && val !== ''); - } - - /** - * Joins strings with the specified separator inserted between each value. - * Null values and empty strings will be excluded. - */ - function join(items, separator) { - separator = separator || ''; - return filter(items, isValidString).join(separator); - } - - module.exports = join; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/lastIndexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/lastIndexOf.js deleted file mode 100644 index ee44a25b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/lastIndexOf.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Array lastIndexOf - */ - function lastIndexOf(arr, item, fromIndex) { - if (arr == null) { - return -1; - } - - var len = arr.length; - fromIndex = (fromIndex == null || fromIndex >= len)? len - 1 : fromIndex; - fromIndex = (fromIndex < 0)? len + fromIndex : fromIndex; - - while (fromIndex >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[fromIndex] === item) { - return fromIndex; - } - fromIndex--; - } - - return -1; - } - - module.exports = lastIndexOf; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/map.js deleted file mode 100644 index 54064f6b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/map.js +++ /dev/null @@ -1,23 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Array map - */ - function map(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null){ - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - results[i] = callback(arr[i], i, arr); - } - - return results; - } - - module.exports = map; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/max.js deleted file mode 100644 index 183b10ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/max.js +++ /dev/null @@ -1,35 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Return maximum value inside array - */ - function max(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return Infinity; - } else if (arr.length && !iterator) { - return Math.max.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = -Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp > compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - module.exports = max; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/min.js deleted file mode 100644 index dd00b6cf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/min.js +++ /dev/null @@ -1,35 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Return minimum value inside array - */ - function min(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return -Infinity; - } else if (arr.length && !iterator) { - return Math.min.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp < compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - module.exports = min; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/pick.js deleted file mode 100644 index 6a54846c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/pick.js +++ /dev/null @@ -1,14 +0,0 @@ -var randInt = require('../random/randInt'); - - /** - * Remove a random item from the Array and return it - */ - function pick(arr){ - if (arr == null || !arr.length) return; - var idx = randInt(0, arr.length - 1); - return arr.splice(idx, 1)[0]; - } - - module.exports = pick; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/pluck.js deleted file mode 100644 index fef4043b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -var map = require('./map'); - - /** - * Extract a list of property values. - */ - function pluck(arr, propName){ - return map(arr, propName); - } - - module.exports = pluck; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/range.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/range.js deleted file mode 100644 index 31d3c770..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/range.js +++ /dev/null @@ -1,27 +0,0 @@ -var countSteps = require('../math/countSteps'); - - /** - * Returns an Array of numbers inside range. - */ - function range(start, stop, step) { - if (stop == null) { - stop = start; - start = 0; - } - step = step || 1; - - var result = [], - nSteps = countSteps(stop - start, step), - i = start; - - while (i <= stop) { - result.push(i); - i += step; - } - - return result; - } - - module.exports = range; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/reduce.js deleted file mode 100644 index 1a350c6e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/reduce.js +++ /dev/null @@ -1,33 +0,0 @@ -var forEach = require('./forEach'); - - /** - * Array reduce - */ - function reduce(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2, - result = initVal; - - if (arr == null || !arr.length) { - if (!hasInit) { - throw new Error('reduce of empty array with no initial value'); - } else { - return initVal; - } - } - - var i = -1, len = arr.length; - while (++i < len) { - if (!hasInit) { - result = arr[i]; - hasInit = true; - } else { - result = fn(result, arr[i], i, arr); - } - } - - return result; - } - - module.exports = reduce; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/reduceRight.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/reduceRight.js deleted file mode 100644 index e36fd4aa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/reduceRight.js +++ /dev/null @@ -1,34 +0,0 @@ - - - /** - * Array reduceRight - */ - function reduceRight(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2; - - if (arr == null || !arr.length) { - if (hasInit) { - return initVal; - } else { - throw new Error('reduce of empty array with no initial value'); - } - } - - var i = arr.length, result = initVal, value; - while (--i >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - value = arr[i]; - if (!hasInit) { - result = value; - hasInit = true; - } else { - result = fn(result, value, i, arr); - } - } - return result; - } - - module.exports = reduceRight; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/reject.js deleted file mode 100644 index 685f2918..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/reject.js +++ /dev/null @@ -1,26 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Array reject - */ - function reject(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (!callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - module.exports = reject; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/remove.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/remove.js deleted file mode 100644 index aa6517db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/remove.js +++ /dev/null @@ -1,13 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Remove a single item from the array. - * (it won't remove duplicates, just a single item) - */ - function remove(arr, item){ - var idx = indexOf(arr, item); - if (idx !== -1) arr.splice(idx, 1); - } - - module.exports = remove; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/removeAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/removeAll.js deleted file mode 100644 index d5f7f3b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/removeAll.js +++ /dev/null @@ -1,15 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Remove all instances of an item from array. - */ - function removeAll(arr, item){ - var idx = indexOf(arr, item); - while (idx !== -1) { - arr.splice(idx, 1); - idx = indexOf(arr, item, idx); - } - } - - module.exports = removeAll; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/shuffle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/shuffle.js deleted file mode 100644 index 97805ec8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/shuffle.js +++ /dev/null @@ -1,29 +0,0 @@ -var randInt = require('../random/randInt'); -var forEach = require('./forEach'); - - /** - * Shuffle array items. - */ - function shuffle(arr) { - var results = [], - rnd; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - if (!i) { - results[0] = arr[0]; - } else { - rnd = randInt(0, i); - results[i] = results[rnd]; - results[rnd] = arr[i]; - } - } - - return results; - } - - module.exports = shuffle; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/some.js deleted file mode 100644 index 8d17772b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/some.js +++ /dev/null @@ -1,27 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array some - */ - function some(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback(arr[i], i, arr) ) { - result = true; - break; - } - } - - return result; - } - - module.exports = some; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/sort.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/sort.js deleted file mode 100644 index 7807339b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/sort.js +++ /dev/null @@ -1,55 +0,0 @@ - - - /** - * Merge sort (http://en.wikipedia.org/wiki/Merge_sort) - */ - function mergeSort(arr, compareFn) { - if (arr == null) { - return []; - } else if (arr.length < 2) { - return arr; - } - - if (compareFn == null) { - compareFn = defaultCompare; - } - - var mid, left, right; - - mid = ~~(arr.length / 2); - left = mergeSort( arr.slice(0, mid), compareFn ); - right = mergeSort( arr.slice(mid, arr.length), compareFn ); - - return merge(left, right, compareFn); - } - - function defaultCompare(a, b) { - return a < b ? -1 : (a > b? 1 : 0); - } - - function merge(left, right, compareFn) { - var result = []; - - while (left.length && right.length) { - if (compareFn(left[0], right[0]) <= 0) { - // if 0 it should preserve same order (stable) - result.push(left.shift()); - } else { - result.push(right.shift()); - } - } - - if (left.length) { - result.push.apply(result, left); - } - - if (right.length) { - result.push.apply(result, right); - } - - return result; - } - - module.exports = mergeSort; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/split.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/split.js deleted file mode 100644 index 4f3ba50c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/split.js +++ /dev/null @@ -1,35 +0,0 @@ - - - /** - * Split array into a fixed number of segments. - */ - function split(array, segments) { - segments = segments || 2; - var results = []; - if (array == null) { - return results; - } - - var minLength = Math.floor(array.length / segments), - remainder = array.length % segments, - i = 0, - len = array.length, - segmentIndex = 0, - segmentLength; - - while (i < len) { - segmentLength = minLength; - if (segmentIndex < remainder) { - segmentLength++; - } - - results.push(array.slice(i, i + segmentLength)); - - segmentIndex++; - i += segmentLength; - } - - return results; - } - module.exports = split; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/toLookup.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/toLookup.js deleted file mode 100644 index ce4c55dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/toLookup.js +++ /dev/null @@ -1,28 +0,0 @@ -var isFunction = require('../lang/isFunction'); - - /** - * Creates an object that holds a lookup for the objects in the array. - */ - function toLookup(arr, key) { - var result = {}; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length, value; - if (isFunction(key)) { - while (++i < len) { - value = arr[i]; - result[key(value)] = value; - } - } else { - while (++i < len) { - value = arr[i]; - result[value[key]] = value; - } - } - - return result; - } - module.exports = toLookup; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/union.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/union.js deleted file mode 100644 index f1334a91..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/union.js +++ /dev/null @@ -1,19 +0,0 @@ -var unique = require('./unique'); -var append = require('./append'); - - /** - * Concat multiple arrays and remove duplicates - */ - function union(arrs) { - var results = []; - var i = -1, len = arguments.length; - while (++i < len) { - append(results, arguments[i]); - } - - return unique(results); - } - - module.exports = union; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/unique.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/unique.js deleted file mode 100644 index 0192b2df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/unique.js +++ /dev/null @@ -1,17 +0,0 @@ -var indexOf = require('./indexOf'); -var filter = require('./filter'); - - /** - * @return {array} Array of unique items - */ - function unique(arr){ - return filter(arr, isUnique); - } - - function isUnique(item, i, arr){ - return indexOf(arr, item, i+1) === -1; - } - - module.exports = unique; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/xor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/xor.js deleted file mode 100644 index c125a996..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/xor.js +++ /dev/null @@ -1,26 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var contains = require('./contains'); - - - /** - * Exclusive OR. Returns items that are present in a single array. - * - like ptyhon's `symmetric_difference` - */ - function xor(arr1, arr2) { - arr1 = unique(arr1); - arr2 = unique(arr2); - - var a1 = filter(arr1, function(item){ - return !contains(arr2, item); - }), - a2 = filter(arr2, function(item){ - return !contains(arr1, item); - }); - - return a1.concat(a2); - } - - module.exports = xor; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/zip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/zip.js deleted file mode 100644 index 931eb818..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/array/zip.js +++ /dev/null @@ -1,29 +0,0 @@ -var max = require('./max'); -var pluck = require('./pluck'); -var map = require('./map'); - - function getLength(arr) { - return arr == null ? 0 : arr.length; - } - - /** - * Merges together the values of each of the arrays with the values at the - * corresponding position. - */ - function zip(arr){ - var len = arr ? max(map(arguments, getLength)) : 0, - results = [], - i = -1, - item; - while (++i < len) { - results.push(map(arguments, function(item) { - return item == null ? undefined : item[i]; - })); - } - - return results; - } - - module.exports = zip; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection.js deleted file mode 100644 index d5cf6cad..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection.js +++ /dev/null @@ -1,22 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'contains' : require('./collection/contains'), - 'every' : require('./collection/every'), - 'filter' : require('./collection/filter'), - 'find' : require('./collection/find'), - 'forEach' : require('./collection/forEach'), - 'make_' : require('./collection/make_'), - 'map' : require('./collection/map'), - 'max' : require('./collection/max'), - 'min' : require('./collection/min'), - 'pluck' : require('./collection/pluck'), - 'reduce' : require('./collection/reduce'), - 'reject' : require('./collection/reject'), - 'size' : require('./collection/size'), - 'some' : require('./collection/some') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/contains.js deleted file mode 100644 index a73f994b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/contains.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrContains = require('../array/contains'); -var objContains = require('../object/contains'); - - /** - */ - module.exports = make(arrContains, objContains); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/every.js deleted file mode 100644 index 300e03c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/every.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrEvery = require('../array/every'); -var objEvery = require('../object/every'); - - /** - */ - module.exports = make(arrEvery, objEvery); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/filter.js deleted file mode 100644 index 38757005..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/filter.js +++ /dev/null @@ -1,23 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * filter collection values, returns array. - */ - function filter(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - var results = []; - if (!list) { - return results; - } - forEach(list, function(value, index, list) { - if (iterator(value, index, list)) { - results[results.length] = value; - } - }); - return results; - } - - module.exports = filter; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/find.js deleted file mode 100644 index 14317e64..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/find.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrFind = require('../array/find'); -var objFind = require('../object/find'); - - /** - * Find value that returns true on iterator check. - */ - module.exports = make(arrFind, objFind); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/forEach.js deleted file mode 100644 index 6e28dcb1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/forEach.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrForEach = require('../array/forEach'); -var objForEach = require('../object/forOwn'); - - /** - */ - module.exports = make(arrForEach, objForEach); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/make_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/make_.js deleted file mode 100644 index 029d27bf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/make_.js +++ /dev/null @@ -1,19 +0,0 @@ - - - /** - * internal method used to create other collection modules. - */ - function makeCollectionMethod(arrMethod, objMethod, defaultReturn) { - return function(){ - var args = Array.prototype.slice.call(arguments); - if (args[0] == null) { - return defaultReturn; - } - // array-like is treated as array - return (typeof args[0].length === 'number')? arrMethod.apply(null, args) : objMethod.apply(null, args); - }; - } - - module.exports = makeCollectionMethod; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/map.js deleted file mode 100644 index fc157f53..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/map.js +++ /dev/null @@ -1,23 +0,0 @@ -var isObject = require('../lang/isObject'); -var values = require('../object/values'); -var arrMap = require('../array/map'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Map collection values, returns Array. - */ - function map(list, callback, thisObj) { - callback = makeIterator(callback, thisObj); - // list.length to check array-like object, if not array-like - // we simply map all the object values - if( isObject(list) && list.length == null ){ - list = values(list); - } - return arrMap(list, function (val, key, list) { - return callback(val, key, list); - }); - } - - module.exports = map; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/max.js deleted file mode 100644 index a8490e7e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/max.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrMax = require('../array/max'); -var objMax = require('../object/max'); - - /** - * Get maximum value inside collection - */ - module.exports = make(arrMax, objMax); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/min.js deleted file mode 100644 index 51d9f148..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/min.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrMin = require('../array/min'); -var objMin = require('../object/min'); - - /** - * Get minimum value inside collection. - */ - module.exports = make(arrMin, objMin); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/pluck.js deleted file mode 100644 index 9b283776..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/pluck.js +++ /dev/null @@ -1,14 +0,0 @@ -var map = require('./map'); - - /** - * Extract a list of property values. - */ - function pluck(list, key) { - return map(list, function(value) { - return value[key]; - }); - } - - module.exports = pluck; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/reduce.js deleted file mode 100644 index 4c075735..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/reduce.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrReduce = require('../array/reduce'); -var objReduce = require('../object/reduce'); - - /** - */ - module.exports = make(arrReduce, objReduce); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/reject.js deleted file mode 100644 index 2a92e3b3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/reject.js +++ /dev/null @@ -1,16 +0,0 @@ -var filter = require('./filter'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Inverse or collection/filter - */ - function reject(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - return filter(list, function(value, index, list) { - return !iterator(value, index, list); - }, thisObj); - } - - module.exports = reject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/size.js deleted file mode 100644 index 244e33e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/size.js +++ /dev/null @@ -1,19 +0,0 @@ -var isArray = require('../lang/isArray'); -var objSize = require('../object/size'); - - /** - * Get collection size - */ - function size(list) { - if (!list) { - return 0; - } - if (isArray(list)) { - return list.length; - } - return objSize(list); - } - - module.exports = size; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/some.js deleted file mode 100644 index 48fd252e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/collection/some.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrSome = require('../array/some'); -var objSome = require('../object/some'); - - /** - */ - module.exports = make(arrSome, objSome); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date.js deleted file mode 100644 index 1cde1a95..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date.js +++ /dev/null @@ -1,21 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'dayOfTheYear' : require('./date/dayOfTheYear'), - 'diff' : require('./date/diff'), - 'i18n_' : require('./date/i18n_'), - 'isLeapYear' : require('./date/isLeapYear'), - 'isSame' : require('./date/isSame'), - 'parseIso' : require('./date/parseIso'), - 'startOf' : require('./date/startOf'), - 'strftime' : require('./date/strftime'), - 'timezoneAbbr' : require('./date/timezoneAbbr'), - 'timezoneOffset' : require('./date/timezoneOffset'), - 'totalDaysInMonth' : require('./date/totalDaysInMonth'), - 'totalDaysInYear' : require('./date/totalDaysInYear'), - 'weekOfTheYear' : require('./date/weekOfTheYear') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/dayOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/dayOfTheYear.js deleted file mode 100644 index 85905c5a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/dayOfTheYear.js +++ /dev/null @@ -1,13 +0,0 @@ -var isDate = require('../lang/isDate'); - - /** - * return the day of the year (1..366) - */ - function dayOfTheYear(date){ - return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - - Date.UTC(date.getFullYear(), 0, 1)) / 86400000 + 1; - } - - module.exports = dayOfTheYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/diff.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/diff.js deleted file mode 100644 index 1131cdcb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/diff.js +++ /dev/null @@ -1,130 +0,0 @@ -var totalDaysInMonth = require('./totalDaysInMonth'); -var totalDaysInYear = require('./totalDaysInYear'); -var convert = require('../time/convert'); - - /** - * calculate the difference between dates (range) - */ - function diff(start, end, unitName){ - // sort the dates to make it easier to process (specially year/month) - if (start > end) { - var swap = start; - start = end; - end = swap; - } - - var output; - - if (unitName === 'month') { - output = getMonthsDiff(start, end); - } else if (unitName === 'year'){ - output = getYearsDiff(start, end); - } else if (unitName != null) { - if (unitName === 'day') { - // ignore timezone difference because of daylight savings time - start = toUtc(start); - end = toUtc(end); - } - output = convert(end - start, 'ms', unitName); - } else { - output = end - start; - } - - return output; - } - - - function toUtc(d){ - // we ignore timezone differences on purpose because of daylight - // savings time, otherwise it would return fractional days/weeks even - // if a full day elapsed. eg: - // Wed Feb 12 2014 00:00:00 GMT-0200 (BRST) - // Sun Feb 16 2014 00:00:00 GMT-0300 (BRT) - // diff should be 4 days and not 4.041666666666667 - return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), - d.getHours(), d.getMinutes(), d.getSeconds(), - d.getMilliseconds()); - } - - - function getMonthsDiff(start, end){ - return getElapsedMonths(start, end) + - getElapsedYears(start, end) * 12 + - getFractionalMonth(start, end); - } - - - function getYearsDiff(start, end){ - var elapsedYears = getElapsedYears(start, end); - return elapsedYears + getFractionalYear(start, end, elapsedYears); - } - - - function getElapsedMonths(start, end){ - var monthDiff = end.getMonth() - start.getMonth(); - if (monthDiff < 0) { - monthDiff += 12; - } - // less than a full month - if (start.getDate() > end.getDate()) { - monthDiff -= 1; - } - return monthDiff; - } - - - function getElapsedYears(start, end){ - var yearDiff = end.getFullYear() - start.getFullYear(); - // less than a full year - if (start.getMonth() > end.getMonth()) { - yearDiff -= 1; - } - return yearDiff; - } - - - function getFractionalMonth(start, end){ - var fractionalDiff = 0; - var startDay = start.getDate(); - var endDay = end.getDate(); - - if (startDay !== endDay) { - var startTotalDays = totalDaysInMonth(start); - var endTotalDays = totalDaysInMonth(end); - var totalDays; - var daysElapsed; - - if (startDay > endDay) { - // eg: Jan 29 - Feb 27 (29 days elapsed but not a full month) - var baseDay = startTotalDays - startDay; - daysElapsed = endDay + baseDay; - // total days should be relative to 1st day of next month if - // startDay > endTotalDays - totalDays = (startDay > endTotalDays)? - endTotalDays + baseDay + 1 : startDay + baseDay; - } else { - // fractional is only based on endMonth eg: Jan 12 - Feb 18 - // (6 fractional days, 28 days until next full month) - daysElapsed = endDay - startDay; - totalDays = endTotalDays; - } - - fractionalDiff = daysElapsed / totalDays; - } - - return fractionalDiff; - } - - - function getFractionalYear(start, end, elapsedYears){ - var base = elapsedYears? - new Date(end.getFullYear(), start.getMonth(), start.getDate()) : - start; - var elapsedDays = diff(base, end, 'day'); - return elapsedDays / totalDaysInYear(end); - } - - - module.exports = diff; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/i18n/en-US.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/i18n/en-US.js deleted file mode 100644 index f9526ce4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/i18n/en-US.js +++ /dev/null @@ -1,61 +0,0 @@ - - // en-US (English, United States) - module.exports = { - "am" : "AM", - "pm" : "PM", - - "x": "%m/%d/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %I:%M:%S %p %Z", - - "months" : [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - - "months_abbr" : [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - - "days" : [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - - "days_abbr" : [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ] - }; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/i18n/pt-BR.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/i18n/pt-BR.js deleted file mode 100644 index 71ebadb5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/i18n/pt-BR.js +++ /dev/null @@ -1,61 +0,0 @@ - - // pt-BR (Brazillian Portuguese) - module.exports = { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Janeiro", - "Fevereiro", - "Março", - "Abril", - "Maio", - "Junho", - "Julho", - "Agosto", - "Setembro", - "Outubro", - "Novembro", - "Dezembro" - ], - - "months_abbr" : [ - "Jan", - "Fev", - "Mar", - "Abr", - "Mai", - "Jun", - "Jul", - "Ago", - "Set", - "Out", - "Nov", - "Dez" - ], - - "days" : [ - "Domingo", - "Segunda", - "Terça", - "Quarta", - "Quinta", - "Sexta", - "Sábado" - ], - - "days_abbr" : [ - "Dom", - "Seg", - "Ter", - "Qua", - "Qui", - "Sex", - "Sáb" - ] - }; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/i18n_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/i18n_.js deleted file mode 100644 index 723fc103..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/i18n_.js +++ /dev/null @@ -1,14 +0,0 @@ -var mixIn = require('../object/mixIn'); -var enUS = require('./i18n/en-US'); - - // we also use mixIn to make sure we don't affect the original locale - var activeLocale = mixIn({}, enUS, { - // we expose a "set" method to allow overriding the global locale - set : function(localeData){ - mixIn(activeLocale, localeData); - } - }); - - module.exports = activeLocale; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/isLeapYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/isLeapYear.js deleted file mode 100644 index 4212870b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/isLeapYear.js +++ /dev/null @@ -1,15 +0,0 @@ -var isDate = require('../lang/isDate'); - - /** - * checks if it's a leap year - */ - function isLeapYear(fullYear){ - if (isDate(fullYear)) { - fullYear = fullYear.getFullYear(); - } - return fullYear % 400 === 0 || (fullYear % 100 !== 0 && fullYear % 4 === 0); - } - - module.exports = isLeapYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/isSame.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/isSame.js deleted file mode 100644 index 4097d29b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/isSame.js +++ /dev/null @@ -1,16 +0,0 @@ -var startOf = require('./startOf'); - - /** - * Check if date is "same" with optional period - */ - function isSame(date1, date2, period){ - if (period) { - date1 = startOf(date1, period); - date2 = startOf(date2, period); - } - return Number(date1) === Number(date2); - } - - module.exports = isSame; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/parseIso.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/parseIso.js deleted file mode 100644 index 8ea2b171..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/parseIso.js +++ /dev/null @@ -1,146 +0,0 @@ -var some = require('../array/some'); - - var datePatterns = [ - /^([0-9]{4})$/, // YYYY - /^([0-9]{4})-([0-9]{2})$/, // YYYY-MM (YYYYMM not allowed) - /^([0-9]{4})-?([0-9]{2})-?([0-9]{2})$/ // YYYY-MM-DD or YYYYMMDD - ]; - var ORD_DATE = /^([0-9]{4})-?([0-9]{3})$/; // YYYY-DDD - - var timePatterns = [ - /^([0-9]{2}(?:\.[0-9]*)?)$/, // HH.hh - /^([0-9]{2}):?([0-9]{2}(?:\.[0-9]*)?)$/, // HH:MM.mm - /^([0-9]{2}):?([0-9]{2}):?([0-9]{2}(\.[0-9]*)?)$/ // HH:MM:SS.ss - ]; - - var DATE_TIME = /^(.+)T(.+)$/; - var TIME_ZONE = /^(.+)([+\-])([0-9]{2}):?([0-9]{2})$/; - - function matchAll(str, patterns) { - var match; - var found = some(patterns, function(pattern) { - return !!(match = pattern.exec(str)); - }); - - return found ? match : null; - } - - function getDate(year, month, day) { - var date = new Date(Date.UTC(year, month, day)); - - // Explicitly set year to avoid Date.UTC making dates < 100 relative to - // 1900 - date.setUTCFullYear(year); - - var valid = - date.getUTCFullYear() === year && - date.getUTCMonth() === month && - date.getUTCDate() === day; - return valid ? +date : NaN; - } - - function parseOrdinalDate(str) { - var match = ORD_DATE.exec(str); - if (match ) { - var year = +match[1], - day = +match[2], - date = new Date(Date.UTC(year, 0, day)); - - if (date.getUTCFullYear() === year) { - return +date; - } - } - - return NaN; - } - - function parseDate(str) { - var match, year, month, day; - - var match = matchAll(str, datePatterns); - if (match === null) { - // Ordinal dates are verified differently. - return parseOrdinalDate(str); - } - - year = (match[1] === void 0) ? 0 : +match[1]; - month = (match[2] === void 0) ? 0 : +match[2] - 1; - day = (match[3] === void 0) ? 1 : +match[3]; - - return getDate(year, month, day); - } - - function getTime(hr, min, sec) { - var valid = - (hr < 24 && hr >= 0 && - min < 60 && min >= 0 && - sec < 60 && min >= 0) || - (hr === 24 && min === 0 && sec === 0); - if (!valid) { - return NaN; - } - - return ((hr * 60 + min) * 60 + sec) * 1000; - } - - function parseOffset(str) { - var match; - if (str.charAt(str.length - 1) === 'Z') { - str = str.substring(0, str.length - 1); - } else if ((match = TIME_ZONE.exec(str))) { - var match = TIME_ZONE.exec(str); - if (match) { - var hours = +match[3], - minutes = (match[4] === void 0) ? 0 : +match[4], - offset = getTime(hours, minutes, 0); - - if (match[2] === '-') { - offset *= -1; - } - - return { offset: offset, time: match[1] }; - } - } - - // No time zone specified, assume UTC - return { offset: 0, time: str }; - } - - function parseTime(str) { - var match; - var offset = parseOffset(str); - - str = offset.time; - offset = offset.offset; - if (isNaN(offset)) { - return NaN; - } - - match = matchAll(str, timePatterns); - if (match === null) { - return NaN; - } - - var hours = (match[1] === void 0) ? 0 : +match[1], - minutes = (match[2] === void 0) ? 0 : +match[2], - seconds = (match[3] === void 0) ? 0 : +match[3]; - - return getTime(hours, minutes, seconds) - offset; - } - - /** - * Parse an ISO8601 formatted date string, and return a Date object. - */ - function parseISO8601(str){ - var match = DATE_TIME.exec(str); - if (!match) { - // No time specified - return parseDate(str); - } - - return parseDate(match[1]) + parseTime(match[2]); - } - - module.exports = parseISO8601; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/startOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/startOf.js deleted file mode 100644 index 072bc0ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/startOf.js +++ /dev/null @@ -1,54 +0,0 @@ -var clone = require('../lang/clone'); - - /** - * get a new Date object representing start of period - */ - function startOf(date, period){ - date = clone(date); - - // intentionally removed "break" from switch since start of - // month/year/etc should also reset the following periods - switch (period) { - case 'year': - date.setMonth(0); - /* falls through */ - case 'month': - date.setDate(1); - /* falls through */ - case 'week': - case 'day': - date.setHours(0); - /* falls through */ - case 'hour': - date.setMinutes(0); - /* falls through */ - case 'minute': - date.setSeconds(0); - /* falls through */ - case 'second': - date.setMilliseconds(0); - break; - default: - throw new Error('"'+ period +'" is not a valid period'); - } - - // week is the only case that should reset the weekDay and maybe even - // overflow to previous month - if (period === 'week') { - var weekDay = date.getDay(); - var baseDate = date.getDate(); - if (weekDay) { - if (weekDay >= baseDate) { - //start of the week is on previous month - date.setDate(0); - } - date.setDate(date.getDate() - date.getDay()); - } - } - - return date; - } - - module.exports = startOf; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/strftime.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/strftime.js deleted file mode 100644 index f033d10f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/strftime.js +++ /dev/null @@ -1,118 +0,0 @@ -var pad = require('../number/pad'); -var i18n = require('./i18n_'); -var dayOfTheYear = require('./dayOfTheYear'); -var timezoneOffset = require('./timezoneOffset'); -var timezoneAbbr = require('./timezoneAbbr'); -var weekOfTheYear = require('./weekOfTheYear'); - - var _combinations = { - 'D': '%m/%d/%y', - 'F': '%Y-%m-%d', - 'r': '%I:%M:%S %p', - 'R': '%H:%M', - 'T': '%H:%M:%S', - 'x': 'locale', - 'X': 'locale', - 'c': 'locale' - }; - - - /** - * format date based on strftime format - */ - function strftime(date, format, localeData){ - localeData = localeData || i18n; - var reToken = /%([a-z%])/gi; - - function makeIterator(fn) { - return function(match, token){ - return fn(date, token, localeData); - }; - } - - return format - .replace(reToken, makeIterator(expandCombinations)) - .replace(reToken, makeIterator(convertToken)); - } - - - function expandCombinations(date, token, l10n){ - if (token in _combinations) { - var expanded = _combinations[token]; - return expanded === 'locale'? l10n[token] : expanded; - } else { - return '%'+ token; - } - } - - - function convertToken(date, token, l10n){ - switch (token){ - case 'a': - return l10n.days_abbr[date.getDay()]; - case 'A': - return l10n.days[date.getDay()]; - case 'h': - case 'b': - return l10n.months_abbr[date.getMonth()]; - case 'B': - return l10n.months[date.getMonth()]; - case 'C': - return pad(Math.floor(date.getFullYear() / 100), 2); - case 'd': - return pad(date.getDate(), 2); - case 'e': - return pad(date.getDate(), 2, ' '); - case 'H': - return pad(date.getHours(), 2); - case 'I': - return pad(date.getHours() % 12, 2); - case 'j': - return pad(dayOfTheYear(date), 3); - case 'L': - return pad(date.getMilliseconds(), 3); - case 'm': - return pad(date.getMonth() + 1, 2); - case 'M': - return pad(date.getMinutes(), 2); - case 'n': - return '\n'; - case 'p': - return date.getHours() >= 12? l10n.pm : l10n.am; - case 'P': - return convertToken(date, 'p', l10n).toLowerCase(); - case 's': - return date.getTime() / 1000; - case 'S': - return pad(date.getSeconds(), 2); - case 't': - return '\t'; - case 'u': - var day = date.getDay(); - return day === 0? 7 : day; - case 'U': - return pad(weekOfTheYear(date), 2); - case 'w': - return date.getDay(); - case 'W': - return pad(weekOfTheYear(date, 1), 2); - case 'y': - return pad(date.getFullYear() % 100, 2); - case 'Y': - return pad(date.getFullYear(), 4); - case 'z': - return timezoneOffset(date); - case 'Z': - return timezoneAbbr(date); - case '%': - return '%'; - default: - // keep unrecognized tokens - return '%'+ token; - } - } - - - module.exports = strftime; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/timezoneAbbr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/timezoneAbbr.js deleted file mode 100644 index b1006875..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/timezoneAbbr.js +++ /dev/null @@ -1,17 +0,0 @@ -var timezoneOffset = require('./timezoneOffset'); - - /** - * Abbreviated time zone name or similar information. - */ - function timezoneAbbr(date){ - // Date.toString gives different results depending on the - // browser/system so we fallback to timezone offset - // chrome: 'Mon Apr 08 2013 09:02:04 GMT-0300 (BRT)' - // IE: 'Mon Apr 8 09:02:04 UTC-0300 2013' - var tz = /\(([A-Z]{3,4})\)/.exec(date.toString()); - return tz? tz[1] : timezoneOffset(date); - } - - module.exports = timezoneAbbr; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/timezoneOffset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/timezoneOffset.js deleted file mode 100644 index 9492dceb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/timezoneOffset.js +++ /dev/null @@ -1,16 +0,0 @@ -var pad = require('../number/pad'); - - /** - * time zone as hour and minute offset from UTC (e.g. +0900) - */ - function timezoneOffset(date){ - var offset = date.getTimezoneOffset(); - var abs = Math.abs(offset); - var h = pad(Math.floor(abs / 60), 2); - var m = pad(abs % 60, 2); - return (offset > 0? '-' : '+') + h + m; - } - - module.exports = timezoneOffset; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInMonth.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInMonth.js deleted file mode 100644 index 8aafeb84..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInMonth.js +++ /dev/null @@ -1,25 +0,0 @@ -var isDate = require('../lang/isDate'); -var isLeapYear = require('./isLeapYear'); - - var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - - /** - * returns the total amount of days in the month (considering leap years) - */ - function totalDaysInMonth(fullYear, monthIndex){ - if (isDate(fullYear)) { - var date = fullYear; - year = date.getFullYear(); - monthIndex = date.getMonth(); - } - - if (monthIndex === 1 && isLeapYear(fullYear)) { - return 29; - } else { - return DAYS_IN_MONTH[monthIndex]; - } - } - - module.exports = totalDaysInMonth; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInYear.js deleted file mode 100644 index b4b7e9b7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInYear.js +++ /dev/null @@ -1,13 +0,0 @@ -var isLeapYear = require('./isLeapYear'); - - /** - * return the amount of days in the year following the gregorian calendar - * and leap years - */ - function totalDaysInYear(fullYear){ - return isLeapYear(fullYear)? 366 : 365; - } - - module.exports = totalDaysInYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/weekOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/weekOfTheYear.js deleted file mode 100644 index dd51b7f1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/date/weekOfTheYear.js +++ /dev/null @@ -1,16 +0,0 @@ -var dayOfTheYear = require('./dayOfTheYear'); - - /** - * Return the week of the year based on given firstDayOfWeek - */ - function weekOfTheYear(date, firstDayOfWeek){ - firstDayOfWeek = firstDayOfWeek == null? 0 : firstDayOfWeek; - var doy = dayOfTheYear(date); - var dow = (7 + date.getDay() - firstDayOfWeek) % 7; - var relativeWeekDay = 6 - firstDayOfWeek - dow; - return Math.floor((doy + relativeWeekDay) / 7); - } - - module.exports = weekOfTheYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/array.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/array.md deleted file mode 100644 index 1f390fbc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/array.md +++ /dev/null @@ -1,773 +0,0 @@ -# array # - -Array utilities. - - - - -## append(arr1, arr2):Array - -Appends an array to the end of the other. -The first array will be modified and will contain the appended items. - -See: [`union()`](#union), [`combine()`](#combine) - -```js -var foo = ['a', 'b'], - bar = ['b', 'd']; - -append(foo, bar); // ['a', 'b', 'b', 'd'] -``` - - - -## collect(arr, callback, [thisObj]):Array - -Maps the items in `arr` and concatenates the resulting arrays. - -See: [`map()`](#map) - -```js -collect([1, 2, 3], function(val) { - return [val, val % 2]; -}); // [1, 1, 2, 0, 3, 1]; - -collect(['a', 'bb', ''], function(val) { - return val.split(''); -}); // ['a', 'b', 'b'] -``` - -It also supports a shorthand syntax: - -```js -var items = [{ a: [1] }, { b: 'foo' }, { a: [2, 3] }]; -collect(items, 'a'); // [1, 2, 3]; -``` - - - -## combine(arr1, arr2):Array - -Combines an array with all the items of another. -The first array will be modified and will contain the combined items. -Does not allow duplicates and is case and type sensitive. - -See: [`union()`](#union), [`append()`](#append) - -```js -var foo = ['a', 'b'], - bar = ['b', 'd']; - -combine(foo, bar); // ['a', 'b', 'd'] -``` - - - -## compact(arr):Array - -Returns a new Array without any `null` or `undefined` values. Note that it will -keep empty strings and other falsy values (simillar to Ruby Array#compact). - -```js -var arr = [0, 1, null, false, '', 'foo', undefined, 'bar']; -compact(arr); // [0, 1, false, '', 'foo', 'bar']; -``` - - - -## contains(arr, value):Boolean - -Checks if Array contains value. Alias to `indexOf(arr, val) !== -1`. - -```js -var arr = [1, 2, 3]; -contains(arr, 2); // true -contains(arr, 'foo'); // false -``` - - - -## difference(...arrs):Array - -Return a new Array with elements that aren't present in the other Arrays -besides the first one. - -Works like [Python set#difference](http://docs.python.org/library/stdtypes.html#set.difference). - -It will remove duplicates. - -See: [`xor()`](#xor), [`intersection()`](#intersection) - -```js -var a = ['a', 'b', 1]; -var b = ['c', 1]; -difference(a, b); // ['a', 'b'] -``` - - - -## every(arr, callback, [thisObj]):Array - -Crossbrowser `Array.every()`. - -Tests whether all elements in the array pass the test implemented by the provided function. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = [1, 'foo', 'bar']; -every(items, isString); // false -every(items, isFunction); // false -every(items, function(val, key, arr){ - return val != null; -}); // true -``` - -more info at [MDN Array#every](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every) - -It also supports a shorthand syntax: - -```js -var items = [{id:1, active:true}, {id:3, active:true}, {id:8, active:true}]; -// all items with `id === 8` -every(items, {id:8}); // false -// `active` is truthy on all items -every(items, 'active'); // true -``` - - - -## filter(arr, callback, [thisObj]):Array - -Crossbrowser `Array.filter()`. - -Creates a new array with all elements that pass the callback test. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var nums = [1, 2, 3, 4, 5, 6]; -var oddNumbers = filter(nums, function(val, key, arr){ - return (val % 2) !== 0; -}); -// > [1, 3, 5] -``` - -more info at [MDN Array#filter](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter) - -Filter also supports shorthand notation: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true}, - {name:'jane', surname:'doe', beard:false} -]; -// filter item that matches all properties/values pairs -filter(arr, {name:'john', beard:false}); -// > [{name:'john', surnname:'connor', beard:false}] -// items where 'beard' is a truthy value -filter(arr, 'beard'); -// > [{name:'john', surnname:'doe', beard:true}] -``` - -See [`reject()`](#reject) - - - -## find(arr, callback, [thisObj]):void - -Loops through all the items in the Array and returns the first one that passes -a truth test (callback). - -```js -var arr = [123, {a:'b'}, 'foo', 'bar']; -find(arr, isString); // "foo" -find(arr, isNumber); // 123 -find(arr, isObject); // {a:'b'} -``` - -Find also supports shorthand notation: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true} -]; -// first item that matches all properties/values pairs -find(arr, {name:'john'}); // {name:'john', surnname:'connor', beard:false} -// first item where 'beard' is a truthy value -find(arr, 'beard'); // {name:'john', surnname:'doe', beard:true} -``` - -See: [findIndex()](#findIndex) - - - -## findIndex(arr, iterator, [thisObj]):Number - -Loops through the items in the Array and returns the index of the first one -that passes a truth test (callback). - -Returns `-1` if no item was found that passes the truth test. - -```js -var arr = [1, { a: 1 }, 'foo', 'bar']; -findIndex(arr, isString); // 2 -findIndex(arr, isNumber); // 0 -findIndex(arr, isObject); // 1 -findIndex(arr, isRegExp); // -1 -``` - -`findIndex` also supports shorthand notation: - -```js -var pets = [ - { pet: 'dog', name: 'Sam' }, - { pet: 'dog', name: 'Maggie' } -]; - -findIndex(pets, { pet: 'dog' }); // 0 -findIndex(pets, { name: 'Maggie' }); // 1 -``` - -See: [find()](#find) - - - -## flatten(arr, [level]):Array - -Recursively flattens an array. A new array containing all the elements is -returned. If `level` is specified, it will only flatten up to that level. - -### Example - -```js -flatten([1, [2], [3, [4, 5]]]); -// > [1, 2, 3, 4, 5] -flatten([1, [2], [3, [4, 5]]], 1); -// > [1, 2, 3, [4, 5]] -``` - - - -## forEach(arr, callback, [thisObj]):void - -Crossbrowser `Array.forEach()`. - -It allows exiting the iteration early by returning `false` on the callback. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = ['foo', 'bar', 'lorem', 'ipsum']; -forEach(items, function(val, key, arr){ - console.log(key +' : '+ val); - if (val === 'lorem') { - // stop iteration (break) - return false; - } -}); -``` - -more info at [MDN Array#forEach](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach) - - - -## indexOf(arr, item, [fromIndex]):Number - -Crossbrowser `Array.indexOf()`. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#indexOf](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf) - - - - -## insert(arr, ...items):Number - -Push items into array only if they aren't contained by it. Returns the new -`length` of the array. - -See: [`remove()`](#remove), [`removeAll()`](#removeAll), -[`contains()`](#contains) - -```js -var arr = ['a', 'b']; -insert(arr, 'a'); // 2 : ['a', 'b'] -insert(arr, 'c'); // 3 : ['a', 'b', 'c'] -insert(arr, 1, 2, 'b'); // 5 : ['a', 'b', 'c', 1, 2] -``` - - - -## intersection(...arrs):Array - -Return a new Array with elements common to all Arrays. - -Similar to Python set#intersection and underscore.js intersection. - -It will remove duplicates. - -See: [`difference()`](#difference), [`xor()`](#xor) - -```js -var a = ['a', 'b', 1], - b = ['c', 1], - c = [1, 2, 3]; -intersection(a, b, c); // [1] -``` - - - -## invoke(arr, methodName[, ...args]):Array - -Call `methodName` on each item of the array passing custom arguments if needed. - -```js -invoke([[3,2,1], [9,5,2]], 'sort'); // [[1,2,3], [2,5,9]] -``` - - - -## join(arr, [separator]):String - -Joins the strings in `arr`, inserting `separator` between each value. - -This ignores null values and empty strings that are in the array. `separator` -defaults to an empty string. This will convert all non-string objects in the -array to a string. - -### Example - -```js -join(['a', 'b', 'c']); // 'abc' -join(['foo', 'bar'], ', '); // 'foo, bar' -join([null, 'foo', '', 'bar', undefined], ':'); // 'foo:bar' -``` - - - -## lastIndexOf(arr, item, [fromIndex]):Number - -Crossbrowser `Array.lastIndexOf()`. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#lastIndexOf](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf) - - - -## map(arr, callback, [thisObj]]):Array - -Crossbrowser `Array.map()`. - -Creates a new array with the results of calling a provided function on every -element in this array. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -See: [`collect()`](#collect) - -```js -var nums = [1,2,3,4]; -var double = map(nums, function(val, key, arr){ - return val * 2; -}); -// > [2, 4, 6, 8] -``` - -more info at [MDN Array#map](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map) - -It also supports a shorthand notation which can be used to achieve same result -as [`array/pluck`](#pluck): - -```js -var src = ['lorem', 'ipsum', 'foo', 'amet']; -// grab the "length" property of all items -var lengths = map(src, 'length'); // [5, 5, 3, 4] -``` - - - -## max(arr, [iterator], [thisObj]):* - -Returns maximum value inside array or use a custom iterator to define how items -should be compared. - -See: [`min()`](#min) - -```js -max([10, 2, 7]); // 10 -max(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'lorem' -``` - -It also supports a shorthand notation: - -```js -max(['foo', 'lorem', 'amet'], 'length'); // "lorem" -``` - - - -## min(arr, [iterator], [thisObj]):* - -Returns minimum value inside array or use a custom iterator to define how items -should be compared. - -See: [`max()`](#max) - -```js -min([10, 2, 7]); // 2 -min(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'foo' -``` - -It also supports a shorthand notation: - -```js -min(['foo', 'lorem', 'amet'], 'length'); // "foo" -``` - - - -## pick(arr):* - -Gets a random item and remove it from the array. - -### Example: - - var arr = [1, 2, 3, 4, 5, 6]; - var item_1 = pick(arr); // 4 - var item_2 = pick(arr); // 1 - console.log(arr); // [2, 3, 5, 6] - - - -## pluck(arr, propName):Array - -Extract a list of property values. - -See: [`function/prop()`](function.html#prop) - -```js -var users = [{name : 'John', age: 21}, {name: 'Jane', age : 27}]; -var names = pluck(users, 'name'); // ["John", "Jane"] -var ages = pluck(users, 'age'); // [21, 27] -``` - - - -## range([start], stop[, step]):Array - -Creates a new Array with all the values inside the range. Works similarly to -Python#range or PHP#range. - -### Arguments - - 1. `[start]` (Number) : Range start. Default is `0`. - 2. `stop` (Number) : Range limit. - 3. `[step]` (Number) : Step size. Default is `1`. - -### Example - -```js -range(5); // [0, 1, 2, 3, 4, 5] -range(0, 5); // [0, 1, 2, 3, 4, 5] -range(0, 5, 2); // [0, 2, 4] -range(20, 40, 5); // [20, 25, 30, 35, 40] -``` - - - -## reduce(arr, fn):* - -Crossbrowser `Array.reduce()`. - -Apply a function against an accumulator and each value of the array (from -left-to-right) as to reduce it to a single value. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#reduce](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce) - - - -## reduceRight(arr, fn):* - -Crossbrowser `Array.reduceRight()`. - -Apply a function simultaneously against two values of the array (from -right-to-left) as to reduce it to a single value. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#reduceRight](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduceRight) - - - -## reject(arr, fn, thisObj):Array - -Creates a new array with all the elements that do **not** pass the truth test. -Opposite of [`filter()`](#filter). - -See [`filter()`](#filter) - -### Example - -```js -var numbers = [1, 2, 3, 4, 5, 6]; -reject(numbers, function(x) { return (x % 2) !== 0; }); // [2, 4, 6] -``` - -It also supports a shorthand syntax: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true}, - {name:'jane', surname:'doe', beard:false} -]; -// reject items that matches all properties/values pairs -reject(arr, {name:'john'}); -// > [{name:'jane', surnname:'doe', beard:false}] -// reject items where 'beard' is a truthy value -filter(arr, 'beard'); -// > [{name:'john', surnname:'connor', beard:false}, -// {name:'jane', surname:'doe', beard:false}] -``` - - - -## remove(arr, item):void - -Remove a single item from the array. - -IMPORTANT: it won't remove duplicates, just a single item. - -### Example - -```js -var foo = [1, 2, 3, 4]; -remove(foo, 2); -console.log(foo); // [1, 3, 4] -``` - - - -## removeAll(arr, item):void - -Remove all instances of an item from the array. - -### Example - -```js -var foo = [1, 2, 3, 4, 2, 2]; -removeAll(foo, 2); -console.log(foo); // [1, 3, 4]; -``` - - - -## shuffle(arr):Array - -Returns a new Array with items randomly sorted (shuffled). Similar to Ruby Array#shuffle. - -### Example - -```js -var arr = ['a', 'b', 'c', 'd', 'e']; -shuffle(arr); // ['b', 'd', 'e', 'c', 'a'] -``` - - - -## some(arr, callback, [thisObj]):Array - -Crossbrowser `Array.some()`. - -Tests whether some element in the array passes the test implemented by the provided function. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = [1, 'foo', 'bar']; -some(items, isString); // true -some(items, isFunction); // false -``` - -more info at [MDN Array#some](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some) - -It also supports a shorthand syntax: - -```js -var items = [{id:1, active:true}, {id:3, active:false}, {id:8, active:false}]; -// at least one item with `id === 8` -some(items, {id:8}); // true -// `active` is truthy on at least one item -some(items, 'active'); // true -``` - -see also: [`object/matches`](object.html#matches) - - - -## sort(arr, [compareFn]):Array - -Returns a sorted Array using the [Merge Sort](http://en.wikipedia.org/wiki/Merge_sort) algorithm (stable sort). - -The `Array.prototype.sort` browser implementations differ since the sorting algorithm isn't described in the ES spec - [in V8 it isn't stable](http://code.google.com/p/v8/issues/detail?id=90) and [on Firefox it is stable](https://bugzilla.mozilla.org/show_bug.cgi?id=224128) - so this function doesn't use the browser native implementation and is recommended in cases where a stable sort is required (items should preserve same order if already sorted). - -**Important:** It does logical comparisson by default (greater/less than) and -not a string comparisson like the native `Array#sort`. - -### compareFn - -If `compareFn` is supplied elements are sorted based on the value returned by -the `compareFn`. - - - If `compareFn(a, b)` is less than `0`, sort `a` to a lower index than `b`. - - If `compareFn(a, b)` returns `0`, leave `a` and `b` unchanged with respect - to each other, but sorted with respect to all different elements. - - If `compareFn(a, b)` is greater than `0`, sort `b` to a lower index than - `a`. - -### Example - -```js -sort([187, 23, 47, 987, 12, 59, 0]); // [0, 12, 23, 47, 59, 187, 987] -sort(['a', 'z', 'c', 'beta', 'b']); // ['a', 'b', 'beta', 'c', 'z'] - -// ['sit', 'amet', 'lorem', 'ipsum'] -sort(['lorem', 'ipsum', 'sit', 'amet'], function(a, b){ - // sort by length, items with same length - // will keep the relative order (stable) - return a.length - b.length; -}); - -// [4, 3, 2, 1] -sort([2, 3, 1, 4], function(a, b){ - // reverse sort - return b - a; -}); -``` - - - -## split(arr, [segments]):Array - -Splits an array into a fixed number of segments. - -The number of segments is specified by `segments` and defaults to 2. If the -array cannot be evenly split, the first segments will contain the extra items. -If `arr` is empty, an empty array is returned. If `arr.length` is less than -`segments`, then the resulting array will have `arr.length` number of -single-element arrays. - -### Example -```js -split([1, 2, 3, 4, 5], 3) // [ [1, 2], [3, 4], [5] ] -split([1, 2, 3, 4, 5]) // [ [1, 2, 3], [4, 5] ] -split([]) // [] -split([1, 2], 3) // [ [1], [2] ] -``` - - - -## toLookup(arr, key):Object - -Create an object that indexes the items in the array by a key. If `key` is a function, the key for each value in the resulting object will be the result of calling the function with the value as an argument. Otherwise `key` specifies the property on each value to use as the key. - -### Example - -```js -var foo = [{ name: 'a', thing: 1 }, { name: 'b', thing: 2 }]; -// { a: { name: 'a', thing: 1 }, b: { name: 'b', thing: 2 } } -toLookup(foo, 'name'); -// same as above -toLookup(foo, function (value) { return value.name; }); -``` - - - -## union(...arrs):Array - -Concat multiple arrays removing duplicates. - -```js -var a = ['a', 'b'], - b = ['c', 'a'], - c = [1, 'b', 2, 3, 'a']; - -//note that unique remove from begin to end -union(a, b, c); // ['c', 1, 'b', 2, 3, 'a'] -``` - - - -## unique(arr):Array - -Return a new Array of unique items. - -### Example - -```js -var foo = [1, 2, 3, 4, 2, 2, 3, 4]; -var bar = unique(foo); -console.log(foo); // [1, 2, 3, 4]; -``` - - - -## xor(arr1, arr2):Array - -Exclusive OR. Returns items that are present in a single array. - -Works like [Python set#symmetric_difference](http://docs.python.org/library/stdtypes.html#set.symmetric_difference) renamed for brevity. - -It will remove duplicates. - -See: [`difference()`](#difference), [`intersection()`](#intersection) - -```js -var a = ['a', 'b', 1]; -var b = ['c', 1]; -xor(a, b); // ['a', 'b', 'c'] -``` - - - -## zip(...arrs):Array - -Groups the elements of each array at their corresponding indexes. - -Useful for separate data sources that are coordinated through matching array -indexes. For a matrix of nested arrays, `zip.apply(...)` can transpose the -matrix in a similar fashion. - -```js -// [['moe', 30, true], ['larry', 40, false], ['curly', 50, false]] -zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]); -``` - - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/collection.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/collection.md deleted file mode 100644 index 2ffcab10..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/collection.md +++ /dev/null @@ -1,233 +0,0 @@ -# collection # - -Methods for dealing with collections (Array or Objects). - - - -## contains(list, value):Boolean - -Checks if collection contains value. - -```js -contains({a: 1, b: 2, c: 'bar'}, 2); // true -contains([1, 2, 3], 'foo'); // false -``` - -See: [array/contains](array.html#contains), [object/contains](object.html#contains) - - - -## every(list, callback, [thisObj]):Boolean - -Tests whether all values in the collection pass the test implemented by the -provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -every(obj, isNumber); // false -``` - -See: [array/every](array.html#every), [object/every](object.html#every) - - - -## filter(list, callback, [thisObj]):Array - -Filter collection properties. - -See: [array/filter](array.html#filter), [object/filter](object.html#filter) - - - -## find(list, callback, [thisObj]):* - -Loops through all the values in the collection and returns the first one that -passes a truth test (callback). - -**Important:** loop order over objects properties isn't guaranteed to be the -same on all environments. - -```js -find({a: 'foo', b: 12}, isString); // 'foo' -find(['foo', 12], isNumber); // 12 -``` - -See: [array/find](array.html#find), [object/find](object.html#find) - - - -## forEach(list, callback, [thisObj]) - -Loop through all values of the collection. - -See: [array/forEach](array.html#forEach), [object/forOwn](object.html#forOwn) - - - -## map(list, callback, [thisObj]):Array - -Returns a new collection where the properties values are the result of calling -the callback for each property in the original collection. - -See: [array/map](array.html#map), [object/map](object.html#map) - - - -## max(list, [iterator]):* - -Returns maximum value inside collection or use a custom iterator to define how -items should be compared. - -See: [`min()`](#min), [array/max](array.html#max), [object/max](object.html#max) - -```js -max({a: 100, b: 2, c: 1, d: 3, e: 200}); // 200 -max(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'lorem' -``` - - - -## min(list, [iterator]):* - -Returns minimum value inside collection or use a custom iterator to define how -items should be compared. - -See: [`max()`](#max), [array/min](array.html#min), [object/min](object.html#min) - -```js -min([10, 2, 7]); // 2 -min({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'foo' -``` - - - -## pluck(list, propName):Array - -Extract a list of property values. - -```js -var users = [ - { - name : 'John', - age : 21 - }, - { - name : 'Jane', - age : 27 - } -]; - -pluck(users, 'name'); // ["John", "Jane"] -pluck(users, 'age'); // [21, 27] - -users = { - first: { - name : 'John', - age : 21 - }, - second: { - name : 'Mary', - age : 25 - } -}; - -pluck(users, 'name'); // ['John', 'Mary'] -``` - -See: [array/pluck](array.html#pluck), [object/pluck](object.html#pluck) - - - -## reduce(list, callback, initial, [thisObj]):* - -Apply a function against an accumulator and each value in the collection as to -reduce it to a single value. - -```js -var obj = {a: 1, b: 2, c: 3, d: 4}; - -function sum(prev, cur, key, list) { - return prev + cur; -} - -reduce(obj, sum); // 10 -``` - -See: [array/reduce](array.html#reduce), [object/reduce](object.html#reduce) - - - -## reject(list, fn, [thisObj]):Array - -Creates a new array with all the elements that do **not** pass the truth test. -Opposite of [`filter()`](#filter). - -### Example - -```js -var numbers = [1, 2, 3, 4, 5]; -reject(numbers, function(x) { return (x % 2) !== 0; }); // [2, 4] - -var obj = {a: 1, b: 2, c: 3, d: 4, e: 5}; -reject(obj, function(x) { return (x % 2) !== 0; }); // [2, 4] -``` - -See: [array/reject](array.html#reject), [object/reject](object.html#reject) - - - -## size(list):Number - -Returns the number of values in the collection. - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -size(obj); // 3 -size([1,2,3]); // 3 -size(null); // 0 -``` - -See: [object/size](object.html#size) - - - -## some(list, callback, [thisObj]):Boolean - -Tests whether any values in the collection pass the test implemented by the -provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -some(obj, isNumber); // true -some(obj, isString); // true -some([1, 2, 3], isNumber) // true -some([1, 2, 3], isString) // false -``` - -See: [array/some](array.html#some), [object/some](object.html#some) - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/date.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/date.md deleted file mode 100644 index b3f7f40e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/date.md +++ /dev/null @@ -1,295 +0,0 @@ -# date # - -Date utilities. - - -## dayOfTheYear(date):Number - -How many days elapsed since begining of the year (following gregorian -calendar). - -```js -// Jan 1st -dayOfTheYear(new Date(2013, 0, 1)); // 1 -// Dec 31th -dayOfTheYear(new Date(2013, 11, 31)); // 364 -``` - - - -## diff(date1, date2, [unitName]):Number - -Calculate the difference between dates (range). - -The returned value is always positive. The default `unitName` is `"ms"`. - -Available units: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`, -`millisecond`. - -See: [`time/convert()`](time.html#convert) - -```js -var d1 = new Date(2012, 4, 5); -var d2 = new Date(2013, 4, 8); -diff(d1, d2); // 31795200000 -diff(d1, d2, 'hour'); // 8832 -diff(d1, d2, 'week'); // 52.57142857142857 -diff(d1, d2, 'month'); // 12.096774193548388 -diff(d1, d2, 'year'); // 1.0082191780821919 -``` - - - -## isLeapYear(fullYear|date):Boolean - -Checks if it's a [leap year](http://en.wikipedia.org/wiki/Leap_year) according -to the Gregorian calendar. - -see: [`totalDaysInMonth()`](#totalDaysInMonth) - -```js -isLeapYear(2012); // true -isLeapYear(2013); // false -isLeapYear(new Date(2012, 2, 28)); // true -``` - - -## isSame(date1, date2[, period]):Boolean - -Check if both dates are the "same". - -You can pass an optional *period* used to set the comparisson precision. - -Available periods: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`. - -```js -var date1 = new Date(2013, 1, 3); -var date2 = new Date(2013, 2, 9); -isSame(date1, date2); // false -isSame(date1, date2, 'day'); // false -isSame(date1, date2, 'month'); // false -isSame(date1, date2, 'year'); // true -``` - - - -## parseIso(str):Number - -Parses an [ISO8601](http://en.wikipedia.org/wiki/Iso8601) date and returns the -number of milliseconds since January 1, 1970, 00:00:00 UTC, or `NaN` if it is -not a valid ISO8601 date. - -This parses *all* ISO8601 dates, including dates without times, [ordinal -dates](https://en.wikipedia.org/wiki/ISO_8601#Ordinal_dates), and the compact -representation (omitting delimeters). The only exception is [ISO week -dates](https://en.wikipedia.org/wiki/ISO_week_date), which are not parsed. - -If no time zone offset is specified, it assumes UTC time. - -```js -// Jan 01, 1970 00:00 GMT -parseIso('1970-01-01T00:00:00') // 0 -parseIso('1970-001') // 0 -parseIso('1970-01-01') // 0 -parseIso('19700101T000000.00') // 0 -parseIso('1970-01-01T02:00+02:00') // 0 - -// Jan 02, 2000 20:10 GMT+04:00 -parseIso('2000-01-02T20:10+04:00') // 946829400000 -``` - - - -## startOf(date, period):Date - -Get a new Date at the start of the period. - -Available periods: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`. - -```js -// Apr 05 2013 11:27:43 -var date = new Date(2013, 3, 5, 11, 27, 43, 123); -startOf(date, 'year'); // Jan 01 2013 00:00:00 -startOf(date, 'month'); // Apr 01 2013 00:00:00 -startOf(date, 'day'); // Apr 05 2013 00:00:00 -startOf(date, 'hour'); // Apr 05 2013 11:00:00 -``` - - - -## strftime(date, format, [l10n]):String - -Format date based on strftime format. - -Replaced tokens: - -<dl> -<dt>%a</dt><dd> locale's abbreviated weekday name.</dd> -<dt>%A</dt><dd> locale's full weekday name.</dd> -<dt>%b</dt><dd> locale's abbreviated month name.</dd> -<dt>%B</dt><dd> locale's full month name.</dd> -<dt>%c</dt><dd> locale's appropriate date and time representation.</dd> -<dt>%C</dt><dd> century number (the year divided by 100 and truncated -to an integer) as a decimal number [00..99].</dd> -<dt>%d</dt><dd> day of the month as a decimal number [01..31].</dd> -<dt>%D</dt><dd>same as %m/%d/%y.</dd> -<dt>%e</dt><dd> day of the month as a decimal number [1..31]; -a single digit is preceded by a space.</dd> -<dt>%F</dt><dd>The ISO 8601 date format (%Y-%m-%d)</dd> -<dt>%h</dt><dd>same as %b.</dd> -<dt>%H</dt><dd> hour (24-hour clock) as a decimal number [00..23].</dd> -<dt>%I</dt><dd> hour (12-hour clock) as a decimal number [01..12].</dd> -<dt>%j</dt><dd> day of the year as a decimal number [001..366].</dd> -<dt>%L</dt><dd> zero-padded milliseconds [000..999]</dd> -<dt>%m</dt><dd> month as a decimal number [01..12].</dd> -<dt>%M</dt><dd> minute as a decimal number [00..59].</dd> -<dt>%n</dt><dd> newline character.</dd> -<dt>%p</dt><dd> locale's equivalent of either "am" or "pm"</dd> -<dt>%P</dt><dd> locale's equivalent of either "AM" or "PM"</dd> -<dt>%r</dt><dd> time in a.m. and -p.m. notation; in the POSIX locale this is equivalent to %I:%M:%S %p.</dd> -<dt>%R</dt><dd> time in 24 hour notation (%H:%M).</dd> -<dt>%s</dt><dd> seconds since Epoch (1970-01-01 00:00:00 UTC)</dd> -<dt>%S</dt><dd> second as a decimal number [00..60].</dd> -<dt>%t</dt><dd> tab character.</dd> -<dt>%T</dt><dd> time (%H:%M:%S).</dd> -<dt>%u</dt><dd> weekday as a decimal number [1..7], with 1 representing -Monday.</dd> -<dt>%U</dt><dd> week number of the year (Sunday as the first day of -the week) as a decimal number [00..53].</dd> -<del><dt>%V</dt><dd> week number of the year (Monday as the first day of the -week) as a decimal number [01..53]. If the week containing 1 January has -four or more days in the new year, then it is considered week 1. Otherwise, -it is the last week of the previous year, and the next week is week 1.</dd></del> -<dt>%w</dt><dd> weekday as a decimal number [0..6], with 0 representing -Sunday.</dd> -<dt>%W</dt><dd> week number of the year (Monday as the first day of -the week) as a decimal number [00..53]. All days in a new year preceding -the first Monday are considered to be in week 0.</dd> -<dt>%x</dt><dd> locale's appropriate date representation.</dd> -<dt>%X</dt><dd> locale's appropriate time representation.</dd> -<dt>%y</dt><dd> year without century as a decimal number [00..99].</dd> -<dt>%Y</dt><dd> year with century as a decimal number.</dd> -<dt>%Z</dt><dd> timezone name or abbreviation, or by no bytes -if no timezone information exists.</dd> -<dt>%%</dt><dd>is replaced by %.</dd> -</dl> - -```js -var date = new Date(2013, 3, 8, 9, 2, 4); -strftime(date, '%Y-%m-%d'); // "2013-04-08" -strftime(date, '%R'); // "09:02" -strftime(date, '%Y-%m-%dT%H:%M:%S%z'); // "2013-04-08T09:02:04+0000" -``` - -You can also set a custom locale: - -```js -var ptBr = require('mout/date/i18n/pt-BR'); -strftime(date, '%a, %d %b', ptBr); // 'Seg, 08 Abr' -strftime(date, '%A, %d %B', ptBr); // 'Segunda, 08 Abril' -``` - -To set it globally: - -```js -require('mout/date/i18n_').set( customLocaleData ); -``` - -See [date/i18n](https://github.com/mout/mout/tree/master/src/date/i18n) -for localization examples. - - - -## timezoneAbbr(date):String - -Return timezone abbreviation or similar data. - -The result will vary based on the OS/browser since some environments doesn't -provide enough info about the current locale. - -```js -// IE 7-8 -timezoneAbbr(new Date()); // "-0500" -// Chrome, FF, V8 -timezoneAbbr(new Date()); // "EST" -``` - - - -## timezoneOffset(date):String - -Return time zone as hour and minute offset from UTC (e.g. +0900). - -It's important to note that JavaScript Date object will use the system locale -info to determinate the [timezone -offset](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset) -and that daylight saving time affects the result. - -```js -// if system locale is EST -timezoneOffset(new Date()); // -0500 -``` - - - -## totalDaysInMonth(fullYear, monthIndex):Number - -Returns the amount of days in the month taking into consideration leap years -(following Gregorian calendar). - -see: [`isLeapYear()`](#isLeapYear) - -```js -totalDaysInMonth(2008, 1); // 29 (leap year) -totalDaysInMonth(2009, 1); // 28 - -// you can also pass a Date object as single argument -totalDaysInMonth( new Date(2013, 0, 1) ); // 31 -``` - - -## totalDaysInYear(fullYear):Number - -Returns the amount of days in the year taking into consideration leap years -(following Gregorian calendar). - -see: [`isLeapYear()`](#isLeapYear), [`totalDaysInMonth()`](#totalDaysInMonth) - -```js -totalDaysInYear(2008); // 366 (leap year) -totalDaysInYear(2009); // 365 - -// you can also pass a Date object as single argument -totalDaysInYear( new Date(2013, 0, 1) ); // 365 -``` - - - -## weekOfTheYear(date, [firstDayOfWeek]):Number - -Returns how many weeks elapsed since start of the year (`0..53`). - -`firstDayOfWeek` can be `0` (Sunday) or `1` (Monday). By default weeks start at -Sunday. - -It will return `0` if `date` is before the first `firstDayOfWeek` of the year. - -```js -// Tue Jan 01 2013 -weekOfTheYear( new Date(2013,0,1) ); // 0 -// Wed Jan 09 2013 -weekOfTheYear( new Date(2013,0,9) ); // 1 -// Sun Jan 01 2012 -weekOfTheYear( new Date(2012,0,1) ); // 1 -// Mon Jan 09 2012 -weekOfTheYear( new Date(2012,0,9) ); // 2 -``` - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/function.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/function.md deleted file mode 100644 index 2695a025..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/function.md +++ /dev/null @@ -1,174 +0,0 @@ -# function # - -Function*(al)* utilities. - - - -## bind(fn, context, [...args]):Function - -Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - -### Arguments - - 1. `fn` (Function) : Target Function - 2. `context` (Object) : Execution context (object used as `this`) - 3. `[...args]` (*) : Arguments (0...n arguments) - -See: [`partial()`](#partial), [object/bindAll](./object.html#bindAll) - - - -## compose(...fn):Function - -Returns the composition of a list of functions, where each function consumes -the return value of the function that follows. In math terms, composing the -functions `f()`, `g()`, and `h()` produces `f(g(h()))`. - -```js -function add2(x) { return x + 2 } -function multi2(x) { return x * 2 } -map([1, 2, 3], compose(add2, multi2)); // [4, 6, 8] - -//same as -map([1, 2, 3], function(x){ - return add2( multi2(x) ); -}); -``` - - - -## debounce(fn, delay[, isAsap]):Function - -Creates a function that will delay the execution of `fn` until after `delay` -milliseconds have elapsed since the last time it was invoked. - -Subsequent calls to the debounced function will return the result of the last -`fn` call. - -```js -// sometimes less is more -var lazyRedraw = debounce(redraw, 300); -foo.on.resize.add(lazyRedraw); -``` - -In this visualization, `|` is a debounced-function call and `X` is the actual -callback execution: - - Default - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X - - Debounced with `isAsap == true`: - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X - -See: [`throttle()`](#throttle) - - -## func(name):Function - -Returns a function that calls a method with given `name` on supplied object. -Useful for iteration methods like `array/map` and `array/forEach`. - -See: [`prop()`](#prop) - -```js -// will call the method `getName()` for each `user` -var names = map(users, func('getName')); -``` - - - -## partial(fn, [...args]):Function - -Return a partially applied function supplying default arguments. - -This method is similar to [`bind`](#bind), except it does not alter the this -binding. - -### Arguments - - 1. `fn` (Function) : Target Function - 3. `[...args]` (*) : Arguments (0...n arguments) - -See: [`bind()`](#bind) - -```js -function add(a, b){ return a + b } -var add10 = partial(add, 10); -console.log( add10(2) ); // 12 -``` - - - -## prop(name):Function - -Returns a function that gets a property with given `name` from supplied object. -Useful for using in conjunction with `array/map` and/or for creating getters. - -See: [`array/pluck()`](array.html#pluck) - -```js -var users = [{name:"John", age:21}, {name:"Jane", age:25}]; -// ["John", "Jane"] -var names = map(users, prop('name')); -``` - - - -## series(...fn):Function - -Returns a function that will execute all the supplied functions in order and -passing the same parameters to all of them. Useful for combining multiple -`array/forEach` into a single one and/or for debugging. - - -```js -// call `console.log()` and `doStuff()` for each item item in the array -forEach(arr, series(console.log, doStuff)); -``` - - - -## throttle(fn, interval):Function - -Creates a function that, when executed, will only call the `fn` function at -most once per every `interval` milliseconds. - -If the throttled function is invoked more than once during the wait timeout, -`fn` will also be called on the trailing edge of the timeout. - -Subsequent calls to the throttled function will return the result of the last -`fn` call. - -```js -// sometimes less is more -var lazyRedraw = throttle(redraw, 300); -foo.on.resize.add(lazyRedraw); -``` - -In this visualization, `|` is a throttled-function call and `X` is the actual -`fn` execution: - - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X X X X X X X X X X X - -See: [`debounce()`](#debounce) - - -## timeout(fn, millis, context, [...args]):Number - -Functions as a wrapper for `setTimeout`. Calls a the function `fn` after a given delay `millis` in milliseconds. -The function is called within the specified context. The return value can be used to clear the timeout using `clearTimeout`. - -```js -var id = timeout(doStuff, 300, this); - -clearTimeout(id); -``` - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/lang.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/lang.md deleted file mode 100644 index 56d7879b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/lang.md +++ /dev/null @@ -1,385 +0,0 @@ -# lang # - -Language Utilities. Easier inheritance, scope handling, type checks. - - - -## clone(val):* - -Clone native types like Object, Array, RegExp, Date and primitives. - -This method will not clone values that are referenced within `val`. It will -only copy the value reference to the new value. If the value is not a plain -object but is an object, it will return the value unchanged. - -### Example - -```js -var a = { foo: 'bar' }; -var b = clone(a); -console.log(a === b); // false -console.log(a.foo === b.foo); // true - -var c = [1, 2, 3]; -var d = clone(b); -console.log(c === d); // false -console.log(c); // [1, 2, 3] -``` - -See: [`deepClone()`](#deepClone) - - - -## createObject(parent, [props]):Object - -Create Object using prototypal inheritance and setting custom properties. - -Mix between [Douglas Crockford Prototypal Inheritance](http://javascript.crockford.com/prototypal.html) and the EcmaScript 5 `Object.create()` method. - -### Arguments - - 1. `parent` (Object) : Parent Object - 2. `[props]` (Object) : Object properties - -### Example - -```js -var base = { - trace : function(){ - console.log(this.name); - } -}; - -var myObj = createObject(base, { - name : 'Lorem Ipsum' -}); - -myObject.trace(); // "Lorem Ipsum" -``` - - - -## ctorApply(constructor, args):Object - -Do `Function.prototype.apply()` on a constructor while maintaining prototype -chain. - -```js -function Person(name, surname) { - this.name = name; - this.surname = surname; -} - -Person.prototype.walk = function(){ - console.log(this.name +' is walking'); -}; - -var args = ['John', 'Doe']; - -// "similar" effect as calling `new Person("John", "Doe")` -var john = ctorApply(Person, args); -john.walk(); // "John is walking" -``` - - - -## deepClone(val, [instanceClone]):* - -Deep clone native types like Object, Array, RegExp, Date and primitives. - -The `instanceClone` function will be invoked to clone objects that are not -"plain" objects (as defined by [`isPlainObject`](#isPlainObject)) if it is -provided. If `instanceClone` is not specified, it will not attempt to clone -non-plain objects, and will copy the object reference. - -### Example - -```js -var a = {foo:'bar', obj: {a:1, b:2}}; -var b = deepClone(a); // {foo:'bar', obj: {a:1, b:2}} -console.log( a === b ); // false -console.log( a.obj === b.obj ); // false - -var c = [1, 2, [3, 4]]; -var d = deepClone(c); // [1, 2, [3, 4]] -var e = c.concat(); // [1, 2, [3, 4]] - -console.log( c[2] === d[2] ); // false -// concat doesn't do a deep clone, arrays are passed by reference -console.log( e[2] === d[2] ); // true - -function Custom() { } -function cloneCustom(x) { return new Custom(); } -var f = { test: new Custom() }; -var g = deepClone(f, cloneCustom); -g.test === f.test // false, since new Custom instance will be created -``` - -See: [`clone()`](#clone) - - - -## defaults(val, ...defaults):void - -Return first value that isn't `null` or `undefined`. - - function doSomethingAwesome(foo, bar) { - // default arguments - foo = defaults(foo, 'lorem'); - bar = defaults(bar, 123); - // ... - } - - - -## inheritPrototype(child, parent):void - -Inherit prototype from another Object. - -```js -function Foo(name){ - this.name = name; -} -Foo.prototype = { - getName : function(){ - return this.name; - } -}; - -function Bar(name){ - this.name = name; -} -//should be called before calling constructor -inheritPrototype(Bar, Foo); - -var myObj = new Bar('lorem ipsum'); -myObj.getName(); // "lorem ipsum" -``` - - -## is(x, y):Boolean - -Check if both values are identical/egal. - -```js -// wtfjs -NaN === NaN; // false --0 === +0; // true - -is(NaN, NaN); // true -is(-0, +0); // false -is('a', 'b'); // false -``` - -See: [`isnt()`](#isnt) - - - -## isnt(x, y):Boolean - -Check if both values are not identical/egal. - -```js -// wtfjs -NaN === NaN; // false --0 === +0; // true - -isnt(NaN, NaN); // false -isnt(-0, +0); // true -isnt('a', 'b'); // true -``` - -See: [`is()`](#is) - - - - -## isArguments(val):Boolean - -If value is an "Arguments" object. - - - -## isArray(val):Boolean - -If value is an Array. Uses native ES5 `Array.isArray()` if available. - - - -## isBoolean(val):Boolean - -If value is a Boolean. - - - -## isDate(val):Boolean - -If value is a Date. - - - -## isEmpty(val):Boolean - -Checks if Array/Object/String is empty. - - -```js -isEmpty(''); // true -isEmpty('bar'); // false -isEmpty([]); // true -isEmpty([1, 2]); // false -isEmpty({}); // true -isEmpty({a:1, b:2}); // false -``` - - -## isFinite(val):Boolean - -Checks if value is Finite. - -Note: This is not the same as native `isFinite`, which will return `true` for -booleans and empty strings. See http://es5.github.com/#x15.1.2.5. - - - -## isFunction(val):Boolean - -If value is a Function. - - - -## isKind(val, kind):Boolean - -If value is of "kind". (used internally by some of the *isSomething* checks). - -Favor the other methods since strings are commonly mistyped and also because -some "kinds" can only be accurately checked by using other methods (e.g. -`Arguments`), some of the other checks are also faster. - -```js -isKind([1,2], 'Array'); // true -isKind(3, 'Array'); // false -isKind(3, 'Number'); // true -``` - -See: [`kindOf()`](#kindOf) - - - -## isInteger(val):Boolean - -Check if value is an integer. - -```js -isInteger(123); // true -isInteger(123.45); // false -isInteger({}); // false -isInteger('foo'); // false -isInteger('123'); // false -``` - - - -## isNaN(val):Boolean - -Check if value is `NaN`. - -Note: This is not the same as native `isNaN`, which will return `true` for -`undefined` and other values. See [ES5 isNaN](http://es5.github.com/#x15.1.2.4) - - - -## isNull(val):Boolean - -If value is `null`. - - - -## isNumber(val):Boolean - -If value is a Number. - - - -## isObject(val):Boolean - -If value is an Object. - - - -## isPlainObject(val):Boolean - -If the value is an Object created by the Object constructor. - - - -## isRegExp(val):Boolean - -If value is a RegExp. - - - -## isString(val):Boolean - -If value is a String. - - - -## isUndefined(val):Boolean - -If value is `undefined`. - - - -## kindOf(val):String - -Gets kind of value (e.g. "String", "Number", "RegExp", "Null", "Date"). -Used internally by `isKind()` and most of the other *isSomething* checks. - -```js -kindOf([1,2]); // "Array" -kindOf('foo'); // "String" -kindOf(3); // "Number" -``` - -See: [`isKind()`](#isKind) - - -## toArray(val):Array - -Convert array-like object into Array or wrap value into Array. - -```js -toArray({ - "0" : "foo", - "1" : "bar", - "length" : 2 -}); // ["foo", "bar"] - -function foo(){ - return toArray(arguments); -} -foo("lorem", 123); // ["lorem", 123] - -toArray("lorem ipsum"); // ["lorem ipsum"] -toArray(window); // [window] -toArray({foo:"bar", lorem:123}); // [{foo:"bar", lorem:123}] -``` - -See: object/values() - - - -## toString(val):String - -Convert any value to its string representation. - -Will return an empty string for `undefined` or `null`, otherwise will convert -the value to its string representation. - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/math.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/math.md deleted file mode 100644 index f45be3ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/math.md +++ /dev/null @@ -1,298 +0,0 @@ -# math # - -Math utilities. - - -## ceil(val[, step]):Number - -Round value up to full steps. Similar to `Math.ceil()` but can round value -to an arbitrary *radix*. - - ceil(7.2); // 8 - ceil(7.8); // 8 - ceil(7, 5); // 10 - ceil(11, 5); // 15 - ceil(15, 5); // 15 - -### Common use cases - -Round values by increments of 5/10/1000/etc. - -See: [`round()`](#round), [`floor()`](#floor), [`countSteps()`](#countSteps) - - - -## clamp(val, min, max):Number - -Clamps value inside range. - -`clamp()` is extremely useful in cases where you need to limit a value inside -a certain range. So instead of doing a complex `if/else` to filter/process the -value you can restrict it to always be inside the desired range: - - clamp(-5, 0, 10); // 0 - clamp(7, 1, 10); // 7 - clamp(8, 1, 10); // 8 - clamp(10, 1, 10); // 10 - clamp(11, 1, 10); // 10 - -If the value is smaller than `min` it returns the `min`, if `val` is higher -than `max` it returns `max`. - -### Common use cases - -Any situation where you need to limit a number inside a range like: slider -position, image galleries <small>(so user can't skip to an image that doesn't -exist)</small>, drag and drop, scroll boundaries, etc. - -See: [`loop()`](#loop) - - - - -## countSteps(val, step[, overflow]):Number - -Count number of full steps. - -### Arguments: - - 1. `val` (Number) : Value. - 2. `step` (Number) : Step size. - 3. `[overflow]` (Number) : Maximum number of steps, nSteps will loop if -`>=` than overflow. - - -Count steps is very useful for cases where you need to know how many "full -steps" the number *completed*. Think of it as a division that only returns -integers and ignore remainders. - - countSteps(3, 5); // 0 - countSteps(6, 5); // 1 - countSteps(12, 5); // 2 - countSteps(18, 5); // 3 - countSteps(21, 5); // 4 - -You can also set an `overflow` which will reset the *counter* before reaching -this number. - - countSteps(3, 5, 3); // 0 - countSteps(6, 5, 3); // 1 - countSteps(12, 5, 3); // 2 - countSteps(18, 5, 3); // 0 - countSteps(21, 5, 3); // 1 - -### Common use cases - -#### How many items fit inside an area: - - var containerWidth = 100; - var itemWidth = 8; - var howManyFit = countSteps(containerWidth, itemWidth); // 12 - -#### Split value into different scales or convert value from one scale to another - -From [mout/time/parseMs](time.html#parseMs): - - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - // {days:27, hours:4, minutes:26, seconds:5, milliseconds:454} - parseMs(2348765454); - - - -## floor(val[, step]):Number - -Round value down to full steps. Similar to `Math.floor()` but can round value -to an arbitrary *radix*. (formerly `snap`) - - floor(7.2); // 7 - floor(7.8); // 7 - floor(7, 5); // 5 - floor(11, 5); // 10 - floor(15, 5); // 15 - -### Common use cases - -Round values by increments of 5/10/1000/etc. - -See: [`round()`](#round), [`ceil()`](#ceil), [`countSteps()`](#countSteps) - - - -## inRange(val, min, max[, threshold]):Boolean - -Checks if value is inside the range. - - inRange(-6, 1, 10); // false - inRange( 5, 1, 10); // true - inRange(12, 1, 10); // false - -The threshold can be useful when you want granular control of what should match -and/or the precision could change at runtime or by some configuration option, -avoids the clutter of adding/subtracting the `threshold` from `mix` and `max`. - - inRange(12, 1, 10, 2); // true - inRange(13, 1, 10, 2); // false - -### Common use cases - -Anything that needs to check if value is inside a range, be it collision -detection, limiting interaction by mouse position, ignoring parts of the logic -that shouldn't happen if value isn't valid, simplify `if/else` conditions, -making code more readable, etc... - - - - -## isNear(val, target, threshold):Boolean - -Check if value is close to target. - -Similar to `inRange()` but used to check if value is close to a certain value -or match the desired value. Basically to simplify `if/else` conditions and to -make code clearer. - - isNear( 10.2, 10, 0.5); // true - isNear( 10.5, 10, 0.5); // true - isNear(10.51, 10, 0.5); // false - -### Common use cases - -Games where a certain action should happen if an *actor* is close to a target, -gravity fields, any numeric check that has some tolerance. - - - - -## lerp(ratio, start, end):Number - -Linear interpolation. - - lerp(0.5, 0, 10); // 5 - lerp(0.75, 0, 10); // 7.5 - -### Common use cases - -Linear interpolation is commonly used to create animations of elements moving -from one point to another, where you simply update the current ratio (which in -this case represents time) and get back the position of the element at that -"frame". - -The core idea of `lerp` is that you are using a number that goes from `0` to -`1` to specify a ratio inside that scale. This concept can be applied to -convert numbers from different scales easily. - -See: [`map()`](#map), [`norm()`](#norm) - - - - -## loop(val, min, max):Number - -Loops value inside range. Will return `min` if `val > max` and `max` if `val -< min`, otherwise it returns `val`. - - loop(-1, 0, 10); // 10 - loop( 1, 0, 10); // 1 - loop( 5, 0, 10); // 5 - loop( 9, 0, 10); // 9 - loop(10, 0, 10); // 10 - loop(11, 0, 10); // 0 - -Similar to [`clamp()`](#clamp) but *loops* the value inside the range when an -overflow occurs. - -### Common use cases - -Image galleries, infinite scroll, any kind of logic that requires that the -first item should be displayed after the last one or the last one should be -displayed after first if going on the opposite direction. - -See: [`clamp()`](#clamp) - - - - -## map(val, min1, max1, min2, max2):Number - -Maps a number from one scale to another. - - map(3, 0, 4, -1, 1) // 0.5 - map(3, 0, 10, 0, 100) // 30 - -### Common use cases - -Very useful to convert values from/to multiple scales. - -Let's suppose we have a slider that needs to go from `2000` to `5000` and that slider -has `300px` of width, here is how we would translate the knob position into the -current value: - - var knobX = 123; - var sliderWid = 300; - var minVal = 2000; - var maxVal = 5000; - - var curVal = map(knobX, 0, sliderWid, minVal, maxVal); // 3230 - -See: [`lerp()`](#lerp), [`norm()`](#norm) - - - - -## norm(val, min, max):Number - -Gets normalized ratio of value inside range. - - norm(50, 0, 100); // 0.5 - norm(75, 0, 100); // 0.75 - -### Common use cases - -Convert values between scales, used by [`map()`](#map) internally. Direct -opposite of [`lerp()`](#lerp). - -See: [`lerp()`](#lerp), [`map()`](#map) - - - -## round(val[, step]):Number - -Round value to full steps. Similar to `Math.round()` but allow setting an -arbitrary *radix*. - - // default - round(0.22); // 0 - round(0.49); // 0 - round(0.51); // 1 - - // custom radix - round(0.22, 0.5); // 0 - round(0.49, 0.5); // 0.5 - round(0.51, 0.5); // 0.5 - round(0.74, 0.5); // 0.5 - round(0.75, 0.5); // 1 - round(1.24, 0.5); // 1 - round(1.25, 0.5); // 1.5 - round(1.74, 0.5); // 1.5 - -### Common use cases - -Round values by increments of 0.5/5/10/1000/etc. - -See: [`floor()`](#floor), [`ceil()`](#ceil), [`countSteps()`](#countSteps) - - - -------------------------------------------------------------------------------- - -For more usage more info check the specs and source code. - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/number.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/number.md deleted file mode 100644 index 8d93865b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/number.md +++ /dev/null @@ -1,225 +0,0 @@ -# number # - -Number utilities. - - -## abbreviate(val[, nDecimalDigits, dictionary]):String - -Abbreviate number to thousands (K), millions (M) or billions (B). - -The default value for `nDecimalDigits` is `1`. - -### Example - - abbreviate(123456); // "123.5K" - abbreviate(12345678); // "12.3M" - abbreviate(1234567890); // "1.2B" - -You can set the amount of decimal digits (default is `1`): - - abbreviate(543); // "0.5K" - abbreviate(543, 1); // "0.5K" - abbreviate(543, 2); // "0.54K" - abbreviate(543, 3); // "0.543K" - -You can customize the abbreviation by passing a custom "dictionary": - - var _ptbrDict = { - thousands : ' mil', - millions : ' Mi', - billions : ' Bi' - }; - function customAbbr(val) { - return abbreviate(val, 1, _ptbrDict); - } - - customAbbr(123456); // "123.5 mil" - customAbbr(12345678); // "12.3 Mi" - customAbbr(1234567890); // "1.2 Bi" - - - -## currencyFormat(val[, nDecimalDigits, decimalSeparator, thousandsSeparator]):String - -Format a number as currency. - -### Example: - - currencyFormat(1000); // "1,000.00" - currencyFormat(1000, 1); // "1,000.0" - currencyFormat(1000, 2, ',', '.'); // "1.000,00" - - - -## enforcePrecision(val, nDecimalDigits):Number - -Enforce a specific amount of decimal digits and also fix floating point -rounding issues. - -### Example: - -```js -enforcePrecision(0.615, 2); // 0.62 -enforcePrecision(0.625, 2); // 0.63 -//floating point rounding "error" (rounds to odd number) -+(0.615).toFixed(2); // 0.61 -+(0.625).toFixed(2); // 0.63 -``` - - - -## MAX_INT:Number - -Maximum 32-bit signed integer value. `Math.pow(2, 31) - 1` - -### Example: - -```js -console.log( MAX_INT ); // 2147483647 -``` - - -## MAX_UINT:Number - -Maximum 32-bit unsigned integer value. `Math.pow(2, 32) - 1` - -### Example: - -```js -console.log( MAX_UINT ); // 4294967295 -``` - - -## MIN_INT:Number - -Minimum 32-bit signed integer value. `Math.pow(2, 31) * -1`. - -### Example: - -```js -console.log( MIN_INT ); // -2147483648 -``` - - -## pad(n, minLength[, char]):String - -Add padding zeros if `n.length` < `minLength`. - -### Example: - -```js -pad(1, 5); // "00001" -pad(12, 5); // "00012" -pad(123, 5); // "00123" -pad(1234, 5); // "01234" -pad(12345, 5); // "12345" -pad(123456, 5); // "123456" - -// you can also specify the "char" used for padding -pad(12, 5, '_'); // "___12" -``` - -see: [string/lpad](./string.html#lpad) - - - -## rol(val, shift):Number - -Bitwise circular shift left. - -More info at [Wikipedia#Circular_shift](http://en.wikipedia.org/wiki/Circular_shift) - - - -## ror(val, shift):Number - -Bitwise circular shift right. - -More info at [Wikipedia#Circular_shift](http://en.wikipedia.org/wiki/Circular_shift) - - - -## sign(val):Number - -Returns `-1` if value is negative, `0` if the value is `0` and `1` if value is positive. Useful for -multiplications. - -```js -sign(-123); // -1 -sign(123); // 1 -sign(0); // 0 -``` - - - -## toInt(val):Number - -"Convert" value into an 32-bit integer. Works like `Math.floor` if `val > 0` and -`Math.ceil` if `val < 0`. - -**IMPORTANT:** val will wrap at [number/MIN_INT](#MIN_INT) and -[number/MAX_INT](#MAX_INT). - -Created because most people don't know bitwise operations and also because this -feature is commonly needed. - -[Perf tests](http://jsperf.com/vs-vs-parseint-bitwise-operators/7) - -### Example: - -```js -toInt(1.25); // 1 -toInt(0.75); // 0 -toInt(-0.55); // 0 -toInt(-5.0001) // -5 -``` - - - -## toUInt(val):Number - -"Convert" value into an 32-bit unsigned integer. - -Works like AS3#uint(). - -**IMPORTANT:** val will wrap at 2^32. - -### Example: - -```js -toUInt(1.25); // 1 -toUInt(0.75); // 0 -toUInt(-0.55); // 0 -toUInt(-5.0001); // 4294967291 -toUInt(Math.pow(2,32) - 0.5); // 4294967295 -toUInt(Math.pow(2,32) + 0.5); // 0 -``` - - -## toUInt31(val):Number - -"Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - -Useful since all bitwise operators besides `>>>` treat numbers as signed -integers. - -**IMPORTANT:** val will wrap at 2^31 and negative numbers will be treated as -`zero`. - -### Example: - -```js -toUInt31(1.25); // 1 -toUInt31(0.75); // 0 -toUInt31(-0.55); // 0 -toUInt31(-5.0001); // 0 -toUInt31(Math.pow(2,31) - 0.5); // 21474836470 -toUInt31(Math.pow(2,31) + 0.5); // 0 -``` - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/object.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/object.md deleted file mode 100644 index b4d5e483..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/object.md +++ /dev/null @@ -1,780 +0,0 @@ -# object # - -Object utilities. - - - -## bindAll(obj, [...methodNames]):void - -Bind methods of the target object to always execute on its own context -(ovewritting the original function). - -See: [function/bind](./function.html#bind) - -```js -var view = { - name: 'Lorem Ipsum', - logNameOnClick: function() { - console.log(this.name); - } -}; - -// binds all methods by default -bindAll(view); -jQuery('#docs').on('click', view.logNameOnClick); -``` - -You can also specify the list of methods that you want to bind (in case you -just want to bind a few of them). - -```js -// only the listed methods will be bound to `obj` context -bindAll(obj, 'logNameOnClick', 'doAwesomeStuffOnDrag'); -``` - - - -## contains(obj, value):Boolean - -Similar to [Array/contains](array.html#contains). Checks if Object contains -value. - -```js -var obj = { - a: 1, - b: 2, - c: 'bar' -}; -contains(obj, 2); // true -contains(obj, 'foo'); // false -``` - - - -## deepEquals(a, b, [callback]):Boolean - -Recursively tests whether two objects contain the same keys and equal values. - -`callback` specifies the equality comparison function used to compare -non-object values. It defaults to using the strict equals (`===`) operator. - -If the values are both an object, it will recurse into the objects, checking if -their keys/values are equal. It will only check the keys and values contained -by the objects; it will not check the objects' prototypes. If the either of -the values are not objects, they will be checked using the `callback` function. - -Example: - -```js -deepEquals({ a: 1 }, { a: 1 }); // true -deepEquals({ value: { a: 1 } }, { value: { a: 1 } }); // true -deepEquals({ value: { a: 1 } }, { value: { a: 2 } }); // false -deepEquals({ value: { a: 1 } }, { value: { a: 1, b: 2 } }); // false -deepEquals({}, null); // false -deepEquals(null, null); // true -deepEquals( - { a: { b: 1 } }, - { a: { b: '1' } }, - function(a, b) { return a == b; }); // true -``` - -See: [`equals()`](#equals) - - - -## deepFillIn(target, ...objects):Object - -Fill missing properties recursively. - -It's different from `deepMixIn` since it won't override any existing property. -It's also different from `merge` since it won't clone child objects during the -process. - -It returns the target object and mutates it in place. - -See: [`fillIn()`](#fillIn), [`deepMixIn()`](#deepMixIn), [`merge()`](#merge) - -```js -var base = { - foo : { - bar : 123 - }, - lorem : 'ipsum' -}; -var options = deepFillIn({foo : { baz : 45 }, lorem : 'amet'}, base); -// > {foo: {bar:123, baz : 45}, lorem : 'amet'} -``` - - - -## deepMatches(target, pattern):Boolean - -Recursively checks if object contains all properties/value pairs. When both -the target and pattern values are arrays, it checks that the target value -contain matches for all the items in the pattern array (independent of order). - -```js -var john = { - name: 'John', - age: 22, - pets: [ - { type: 'cat', name: 'Grumpy Cat' }, - { type: 'dog', name: 'Hawk' } - ] -}; - -deepMatches(john, { name: 'John' }); // true -deepMatches(john, { age: 21 }); // false -deepMatches(john, { pets: [ { type: 'cat' } ] }); // true -deepMatches(john, { pets: [ { name: 'Hawk' } ] }); // true -deepMatches(john, { pets: [ { name: 'Hairball' } ] }); // false -``` - -See [`matches()`](#matches) - - - -## deepMixIn(target, ...objects):Object - -Mixes objects into the target object, recursively mixing existing child objects -as well. - -It will only recursively mix objects if both (existing and new) values are -plain objects. - -Returns the target object. Like [`merge()`](#merge), but mutates the target -object, and does not clone child objects. - -```js -var target = { - foo: { - name: "foo", - id: 1 - } -}; - -deepMixIn(target, { foo: { id: 2 } }); -console.log(target); // { foo: { name: "foo", id: 2 } } -``` - -See: [`mixIn()`](#mixIn), [`merge()`](#merge), [`deepFillIn()`](#deepFillIn) - - - -## equals(a, b, [callback]):Boolean - -Tests whether two objects contain the same keys and values. - -`callback` specifies the equality comparison function used to compare the -values. It defaults to using the strict equals (`===`) operator. - -It will only check the keys and values contained by the objects; it will not -check the objects' prototypes. If either of the values are not objects, they -will be compared using the `callback` function. - -```js -equals({}, {}); // true -equals({ a: 1 }, { a: 1 }); // true -equals({ a: 1 }, { a: 2 }); // false -equals({ a: 1, b: 2 }, { a: 1 }); // false -equals({ a: 1 }, { a: 1, b: 2 }); // false -equals(null, null); // true -equals(null, {}); // false -equals({ a: 1 }, { a: '1' }, function(a, b) { return a == b; }); // true -``` - - - -## every(obj, callback, [thisObj]):Boolean - -Similar to [Array/every](array.html#every). Tests whether all properties in the -object pass the test implemented by the provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -every(obj, isNumber); // false -``` - - - -## fillIn(obj, ...default):Object - -Fill in missing properties in object with values from the *defaults* objects. - - var base = { - foo : 'bar', - num : 123 - }; - - fillIn({foo:'ipsum'}, base); // {foo:'ipsum', num:123} - -PS: it allows merging multiple objects at once, the first ones will take -precedence. - -See: [`mixIn()`](#mixIn), [`merge()`](#merge), [`deepFillIn()`](#deepFillIn) - - - -## filter(obj, callback, [thisObj]) - -Returns a new object containing all properties where `callback` returns true, -similar to Array/filter. It does not use properties from the object's -prototype. - -Callback receives the same arguments as `forOwn()`. - -See: [`forOwn()`](#forOwn), [`forIn()`](#forIn), [`pick()`](#pick) - -```js -var obj = { - foo: 'value', - bar: 'bar value' -}; - -// returns { bar: 'bar value' } -filter(obj, function(v) { return value.length > 5; }); - -// returns { foo: 'value' } -filter(obj, function(v, k) { return k === 'foo'; }); -``` - - - -## find(obj, callback, [thisObj]) - -Loops through all the properties in the Object and returns the first one that -passes a truth test (callback), similar to [Array/find](array.html#find). -Unlike Array/find, order of iteration is not guaranteed. - -```js -var obj = { - a: 'foo', - b: 12 -}; - -find(obj, isString); // 'foo' -find(obj, isNumber); // 12 -``` - - - -## forIn(obj, callback[, thisObj]) - -Iterate over all properties of an Object, similar to -[Array/forEach](array.html#forEach). - -It [avoids don't enum bug on IE](https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug). -It **will** iterate over inherited (enumerable) properties from the prototype. - -It allows exiting the iteration early by returning `false` on the callback. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys), [`values()`](#values) - -### Callback arguments - -Callback will receive the following arguments: - - 1. Property Value (*) - 2. Key name (String) - 3. Target object (Object) - -### Example - -```js -function Foo(){ - this.foo = 1; - this.bar = 2; -} - -Foo.prototype.lorem = 4; - -var obj = new Foo(); - -var result = 0; -var keys = []; - -forIn(obj, function(val, key, o){ - result += val; - keys.push(key); -}); - -console.log(result); // 7 -console.log(keys); // ['foo', 'bar', 'lorem'] -``` - - - -## forOwn(obj, callback[, thisObj]) - -Iterate over all own properties from an Object, similar to -[Array/forEach](array.html#forEach). - -It [avoids don't enum bug on IE](https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug). -Notice that it **won't** iterate over properties from the prototype. - -It allows exiting the iteration early by returning `false` on the callback. - -See: [`forIn()`](#forIn), [`keys()`](#keys), [`values()`](#values) - -### Callback arguments - -Callback will receive the following arguments: - - 1. Property Value (*) - 2. Key name (String) - 3. Target object (Object) - -### Example - -```js -function Foo(){ - this.foo = 1; - this.bar = 2; -} - -// will be ignored -Foo.prototype.lorem = 4; - -var obj = new Foo(); - -var result = 0; -var keys = []; - -forOwn(obj, function(val, key, o){ - result += val; - keys.push(key); -}); - -console.log(result); // 3 -console.log(keys); // ['foo', 'bar'] -``` - - - -## functions(obj):Array - -Returns a sorted list of all enumerable properties that have function values -(including inherited properties). - -```js -var obj = { - foo : function(){}, - bar : 'baz' -}; -functions(obj); // ['foo'] -``` - - - -## get(obj, propName):* - -Returns nested property value. Will return `undefined` if property doesn't -exist. - -See: [`set()`](#set), [`namespace()`](#namespace), [`has()`](#has) - -```js -var lorem = { - ipsum : { - dolor : { - sit : 'amet' - } - } - }; - -get(lorem, 'ipsum.dolor.sit'); // "amet" -get(lorem, 'foo.bar'); // undefined -``` - - - -## has(obj, propName):Boolean - -Checks if object contains a child property. Useful for cases where you need to -check if an object contain a *nested* property. It will get properties -inherited by the prototype. - -see: [`hasOwn()`](#hasOwn), [`get()`](#get) - -```js -var a = { - b : { - c : 123 - } - }; - -has(a, 'b.c'); // true -has(a, 'foo.c'); // false -``` - -### Common use case - -```js -if( has(a, 'foo.c') ){ // false - // ... -} - -if( a.foo.c ){ // ReferenceError: `foo` is not defined - // ... -} -``` - - - -## hasOwn(obj, propName):Boolean - -Safer `Object.hasOwnProperty`. Returns a boolean indicating whether the object -has the specified property. - -see: [`has()`](#has) - -```js -var obj = { - foo: 1, - hasOwnProperty : 'bar' -}; - -obj.hasOwnProperty('foo'); // ERROR! hasOwnProperty is not a function - -hasOwn(obj, 'foo'); // true -hasOwn(obj, 'hasOwnProperty'); // true -hasOwn(obj, 'toString'); // false -``` - - - -## keys(obj):Array - -Returns an array of all own enumerable properties found upon a given object. -It will use the native `Object.keys` if present. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`values()`](#values) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -keys(obj); // ['foo', 'bar', 'lorem'] -``` - - - -## map(obj, callback, [thisObj]):Object - -Returns a new object where the property values are the result of calling the -callback for each property in the original object, similar to Array/map. - -The callback function receives the same arguments as in `forOwn()`. - -See: [`forOwn()`](#forOwn) - -```js -var obj = { foo: 1, bar: 2 }, - data = { foo: 0, bar: 1 }; - -map(obj, function(v) { return v + 1; }); // { foo: 2, bar: 3 } -map(obj, function(v, k) { return k; }); // { foo: "foo", bar: "bar" } -map(obj, function(v, k) { return this[k]; }, data); // { foo: 0, bar: 1 } -``` - - - -## matches(obj, props):Boolean - -Checks if object contains all properties/values pairs. Useful for validation -and filtering. - -```js -var john = {age:25, hair:'long', beard:true}; -var mark = {age:27, hair:'short', beard:false}; -var hippie = {hair:'long', beard:true}; -matches(john, hippie); // true -matches(mark, hippie); // false -``` - -See [`deepMatches()`](#deepMatches) - - - -## merge(...objects):Object - -Deep merges objects. Note that objects and properties will be cloned during the -process to avoid undesired side effects. It return a new object and won't -affect source objects. - -```js -var obj1 = {a: {b: 1, c: 1, d: {e: 1, f: 1}}}; -var obj2 = {a: {b: 2, d : {f : 'yeah'} }}; - -merge(obj1, obj2); // {a: {b : 2, c : 1, d : {e : 1, f : 'yeah'}}} -``` - -See: [`deepMixIn()`](#deppMixIn), [`deepFillIn()`](#deepFillIn) - - - -## max(obj[, iterator]):* - -Returns maximum value inside object or use a custom iterator to define how -items should be compared. Similar to [Array/max](array.html#max). - -See: [`min()`](#min) - -```js -max({a: 100, b: 2, c: 1, d: 3, e: 200}); // 200 -max({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'lorem' -``` - - - -## min(obj[, iterator]):* - -Returns minimum value inside object or use a custom iterator to define how -items should be compared. Similar to [Array/min](array.html#min). - -See: [`max()`](#max) - -```js -min({a: 100, b: 2, c: 1, d: 3, e: 200}); // 1 -min({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'foo' -``` - - - -## mixIn(target, ...objects):Object - -Combine properties from all the objects into first one. - -This method affects target object in place, if you want to create a new Object -pass an empty object as first parameter. - -### Arguments - - 1. `target` (Object) : Target Object. - 2. `...objects` (...Object) : Objects to be combined (0...n objects). - -### Example - -```js -var a = {foo: "bar"}; -var b = {lorem: 123}; - -mixIn({}, a, b); // {foo: "bar", lorem: 123} -console.log(a); // {foo: "bar"} - -mixIn(a, b); // {foo: "bar", lorem: 123} -console.log(a); // {foo: "bar", lorem: 123} -``` - -See: [`fillIn()`](#fillIn), [`merge()`](#merge) - - - - -## namespace(obj, propName):Object - -Creates an empty object inside namespace if not existent. Will return created -object or existing object. - -See: [`get()`](#get), [`set()`](#set) - -```js -var obj = {}; -namespace(obj, 'foo.bar'); // {} -console.log(obj); // {foo:{bar:{}}} -``` - - - -## pick(obj, ...keys):Object - -Return a copy of the object that contains only the whitelisted keys. - -See: [`filter()`](#filter) - -```js -var user = { - firstName : 'John', - lastName : 'Doe', - dob : '1985/07/23', - gender : 'male' -}; - -// can pass an array of keys as second argument -var keys = ['firstName', 'dob'] -pick(user, keys); // {firstName:"John", dob: "1985/07/23"} - -// or multiple arguments -pick(user, 'firstName', 'lastName'); // {firstName:"John", lastName: "Doe"} -``` - - - -## pluck(obj, propName):Object - -Extract an object containing property values with keys as they appear in the -passed object. - -```js -var users = { - first: { - name : 'John', - age : 21 - }, - second: { - name : 'Mary', - age : 25 - } -}; - -pluck(users, 'name'); // {first: 'John', second: 'Mary'} ); -pluck(users, 'age'); // {first: 21, second: 25} ); -``` - - - -## reduce(obj, callback, initial, [thisObj]):* - -Similar to [Array/reduce](array.html#reduce). - -Apply a function against an accumulator and each property of the object (order -is undefined) as to reduce it to a single value. - -```js -var obj = {a: 1, b: 2, c: 3, d: 4}; - -function sum(prev, cur, key, list) { - compare1.push(prev); - return prev + cur; -} - -reduce(obj, sum); // 10 -``` - - - -## reject(obj, callback, thisObj):Object - -Returns a new object containing all properties where `callback` returns true, -similar to [Array/reject](array.html#reject). It does not use properties from -the object's prototype. Opposite of [`filter()`](#filter). - -See [`filter()`](#filter) - -### Example - -```js -var obj = {a: 1, b: 2, c: 3, d: 4, e: 5}; -reject(obj, function(x) { return (x % 2) !== 0; }); // {b: 2, d: 4} -``` - - - -## values(obj):Array - -Returns an array of all own enumerable properties values found upon a given object. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -values(obj); // [1, 2, 3] -``` - - - -## set(obj, propName, value) - -Sets a nested property value. - -See: [`get()`](#get), [`namespace()`](#namespace) - -```js -var obj = {}; -set(obj, 'foo.bar', 123); -console.log(obj.foo.bar); // 123 -console.log(obj); // {foo:{bar:123}} -``` - - - -## size(obj):Number - -Returns the count of own enumerable properties found upon a given object. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -size(obj); // 3 -``` - - - -## some(obj, callback, [thisObj]):Boolean - -Similar to [Array/some](array.html#some). Tests whether any properties in the -object pass the test implemented by the provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -some(obj, isNumber); // true -``` - - - -## unset(obj, propName):Boolean - -Delete object property if existent and returns a boolean indicating succes. It -will also return `true` if property doesn't exist. - -Some properties can't be deleted, to understand why [check this -article](http://perfectionkills.com/understanding-delete/). - -See: [`set()`](#set) - -```js -var lorem = { - ipsum : { - dolor : { - sit : 'amet' - } - } - }; - -unset(lorem, 'ipsum.dolor.sit'); // true -console.log(lorem.ipsum.dolor); // {} -unset(lorem, 'foo.bar'); // true -``` diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/queryString.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/queryString.md deleted file mode 100644 index 1be3c102..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/queryString.md +++ /dev/null @@ -1,115 +0,0 @@ -# queryString # - -Utilities for query string manipulation. - - - -## contains(url, paramName):Boolen - -Checks if query string contains parameter. - -### Arguments: - - 1. `url` (String) : URL or query string. - 2. `paramName` (String) : Parameter name. - -### Example: - -```js -var url = 'example.com/?lorem=ipsum'; -contains(url, 'lorem'); // true -contains(url, 'foo'); //false -``` - - - -## decode(queryStr[, shouldTypecast]):Object - -Parses query string and creates an object of keys => vals. - -Will typecast value with [`string/typecast`](string.html#typecast) by default -and decode string parameters using `decodeURIComponent()`. - -```js -var query = '?foo=bar&lorem=123'; -decode(query); // {foo: "bar", lorem: 123} -decode(query, false); // {foo: "bar", lorem: "123"} -``` - - -## encode(obj):String - -Encode object into a query string. - -Will encode parameters with `encodeURIComponent()`. - -```js -encode({foo: "bar", lorem: 123}); // "?foo=bar&lorem=123" -``` - - -## getParam(url, param[, shouldTypecast]):* - -Get query parameter value. - -Will typecast value with [`string/typecast`](string.html#typecast) by default. - -See: [`setParam()`](#setParam) - -### Arguments: - - 1. `url` (String) : Url. - 2. `param` (String) : Parameter name. - 3. `[shouldTypecast]` (Boolean) : If it should typecast value. - -### Example: - -```js -var url = 'example.com/?foo=bar&lorem=123&ipsum=false'; -getParam(url, 'dolor'); // "amet" -getParam(url, 'lorem'); // 123 -getParam(url, 'lorem', false); // "123" -``` - - -## parse(url[, shouldTypecast]):Object - -Parses URL, extracts query string and decodes it. - -It will typecast all properties of the query object unless second argument is -`false`. - -Alias to: `decode(getQuery(url))`. - -```js -var url = 'example.com/?lorem=ipsum&a=123'; -parse(url); // {lorem: "ipsum", a: 123} -parse(url, false); // {lorem: "ipsum", a: "123"} -``` - - -## getQuery(url):String - -Gets full query as string with all special chars decoded. - -```js -getQuery('example.com/?lorem=ipsum'); // "?lorem=ipsum" -``` - - -## setParam(url, paramName, value):String - -Add new query string parameter to URL or update existing value. - -See: [`getParam()`](#getParam) - -```js -setParam('?foo=bar&lorem=0', 'lorem', 'ipsum'); // '?foo=bar&lorem=ipsum' -setParam('?lorem=1', 'foo', 123); // '?lorem=1&foo=123' -``` - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/random.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/random.md deleted file mode 100644 index b058b4e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/random.md +++ /dev/null @@ -1,218 +0,0 @@ -# random # - -Pseudo-random generators. - -mout uses `Math.random` by default on all the pseudo-random generators, if -you need a seeded random or a better algorithm see the [`random()`](#random) -documentation for instructions. - - - -## choice(...items):* - -Returns a random element from the supplied arguments or from an array if single -argument is an array. - -### Example: - -```js -choice(1, 2, 3, 4, 5); // 3 - -var arr = ['lorem', 'ipsum', 'dolor']; -choice(arr); // 'dolor' -``` - - - -## guid():String - -Generates a pseudo-random [Globally Unique Identifier](http://en.wikipedia.org/wiki/Globally_unique_identifier) (v4). - -Since the total number of GUIDs is 2<sup>122</sup> the chance of generating the -same value twice is negligible. - -**Important:** this method uses `Math.random` by default so the UUID isn't -*safe* (sequence of outputs can be predicted in some cases), check the -[`random()`](#random) documentation for more info on how to replace the default -PRNG if you need extra safety or need *seeded* results. - -See: [`randHex()`](#randHex), [`random()`](#random) - -### Example: - -```js -guid(); // 830e9f50-ac7f-4369-a14f-ed0e62b2fa0b -guid(); // 5de3d09b-e79c-4727-932b-48c49228d508 -``` - - - -## rand([min], [max]):Number - -Gets a random number inside range or snap to min/max values. - -### Arguments: - - 1. `[min]` (Number) : Minimum value. Defaults to `number/MIN_INT`. - 2. `[max]` (Number) : Maximum value. Defaults to `number/MAX_INT`. - - -### Example: - -```js -rand(); // 448740433.55274725 -rand(); // -31797596.097682 -rand(0, 10); // 7.369723 -rand(0, 10); // 5.987042 -``` - -See: [`random()`](#random) - - - -## randBit():Number - -Returns a random "bit" (0 or 1). Useful for addition/subtraction. - -It's slightly faster than `choice(0, 1)` since implementation is simpler (not -that it will make a huge difference in most cases). - -See: [`choice()`](#choice) - -### Example: - -```js -randBit(); // 1 -randBit(); // 0 - -//same effect as -choice(0, 1); -``` - - - -## randHex([size]):String - -Returns a random hexadecimal string. - -The default `size` is `6`. - -### Example: - -```js -randHex(); // "dd8575" -randHex(); // "e6baeb" -randHex(2); // "a2" -randHex(30); // "effd7e2ad9a4a3067e30525fab983a" -``` - - - -## randInt([min], [max]):Number - -Gets a random integer inside range or snap to min/max values. - -### Arguments: - - 1. `[min]` (Number) : Minimum value. Defaults to `number/MIN_INT`. - 2. `[max]` (Number) : Maximum value. Defaults to `number/MAX_INT`. - - -### Example: - -```js -randInt(); // 448740433 -randInt(); // -31797596 -randInt(0, 10); // 7 -randInt(0, 10); // 5 -``` - - - -## randSign():Number - -Returns a random "sign" (-1 or 1). Useful for multiplications. - -It's slightly faster than `choice(-1, 1)` since implementation is simpler (not -that it will make a huge difference in most cases). - -See: [`choice()`](#choice) - -### Example: - -```js -randSign(); // -1 -randSign(); // 1 - -//same effect as -choice(-1, 1); -``` - - - -## random():Number - -Returns a random number between `0` and `1`. Same as `Math.random()`. - -```js -random(); // 0.35435103671625257 -random(); // 0.8768321881070733 -``` - -**Important:** No methods inside mout should call `Math.random()` -directly, they all use `random/random` as a proxy, that way we can -inject/replace the pseudo-random number generator if needed (ie. in case we -need a seeded random or a better algorithm than the native one). - -### Replacing the PRNG - -In some cases we might need better/different algorithms than the one provided -by `Math.random` (ie. safer, seeded). - -Because of licensing issues, file size limitations and different needs we -decided to **not** implement a custom PRNG and instead provide a easy way to -override the default behavior. - [issue #99](https://github.com/millermedeiros/amd-utils/issues/99) - -If you are using mout with a loader that supports the [AMD map -config](https://github.com/amdjs/amdjs-api/wiki/Common-Config), such as -[RequireJS](http://requirejs.org/), you can use it to replace the PRNG -(recommended approach): - -```js -requirejs.config({ - map : { - // all modules will load "my_custom_prng" instead of - // "mout/random/random" - '*' : { - 'mout/random/random' : 'my_custom_prng' - } - } -}); -``` - -You also have the option to override `random.get` in case you are using -mout on node.js or with a loader which doesn't support the map config: - -```js -// replace the PRNG -var n = 0; -random.get = function(){ - return ++n % 2? 0 : 1; // not so random :P -}; -random(); // 0 -random(); // 1 -random(); // 0 -random(); // 1 -``` - -See this [detailed explanation about PRNG in -JavaScript](http://baagoe.org/en/w/index.php/Better_random_numbers_for_javascript) -to understand the issues with the native `Math.random` and also for a list of -algorithms that could be used instead. - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/string.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/string.md deleted file mode 100644 index 2b282315..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/string.md +++ /dev/null @@ -1,594 +0,0 @@ -# string # - -String utilities. - - -## camelCase(str):String - -Convert string to "camelCase" text. - -See: [`pascalCase()`](#pascalCase), [`unCamelCase()`](#unCamelCase) - -### Example - -```js -camelCase('lorem-ipsum-dolor'); // "loremIpsumDolor" -camelCase('lorem ipsum dolor'); // "loremIpsumDolor" -``` - - - -## contains(str, substring, [fromIndex]):Boolean - -Checks if string contains the given substring. - -See: [`startsWith()`](#startsWith), [`endsWith()`](#endsWith) - -### Example - -```js -contains('lorem', 'or'); // true -contains('lorem', 'bar'); // false -``` - - - -## crop(str, maxChars, [append]):String - -Truncate string at full words. Alias to `truncate(str, maxChars, append, true);`. - -See: [`truncate()`](#truncate) - -### Example - -```js -crop('lorem ipsum dolor', 10); // "lorem..." -crop('lorem ipsum dolor', 10, '+'); // "lorem+" -``` - - - -## endsWith(str, suffix):Boolean - -Checks if string ends with specified suffix. - -See: [`startsWith()`](#startsWith), [`contains()`](#contains) - -### Example - -```js -endsWith('lorem ipsum', 'lorem'); // false -endsWith('lorem ipsum', 'ipsum'); // true -``` - - - -## escapeHtml(str):String - -Escapes HTML special chars (`>`, `<`, `&`, `"`, `'`). - -See: [`unescapeHtml()`](#unescapeHtml) - -### Example - -```js -escapeHtml('lorem & "ipsum"'); // "lorem &amp; &quot;ipsum&quot;" -``` - - - -## escapeRegExp(str):String - -Escape special chars to be used as literals in RegExp constructors. - -### Example - -```js -str = escapeRegExp('[lorem.ipsum]'); // "\\[lorem\\.ipsum\\]" -reg = new RegExp(str); // /\[lorem\.ipsum\]/ -``` - - - -## escapeUnicode(str[, shouldEscapePrintable]):String - -Unicode escape chars. - -It will only escape non-printable ASCII chars unless `shouldEscapePrintable` is -set to `true`. - -See: [`unescapeUnicode()`](#unescapeUnicode) - -```js -escapeUnicode('føo bår'); -// > "f\u00f8o b\u00e5r" -escapeUnicode('føo bår', true); -// > "\u0066\u00f8\u006f\u0020\u0062\u00e5\u0072" -``` - - - -## hyphenate(str):String - -Replaces spaces with hyphens, split camelCase text, remove non-word chars, -remove accents and convert to lower case. - -See: [`slugify()`](#slugify), [`underscore()`](#underscore), -[`unhyphenate`](#unhyphenate) - -```js -hyphenate(' %# lorem ipsum ? $ dolor'); // "lorem-ipsum-dolor" -hyphenate('spéçïãl çhârs'); // "special-chars" -hyphenate('loremIpsum'); // "lorem-ipsum" -``` - - - -## interpolate(str, replacements[, syntax]):String - -String interpolation. Format/replace tokens with object properties. - -```js -var tmpl = 'Hello {{name}}!'; -interpolate(tmpl, {name: 'World'}); // "Hello World!" -interpolate(tmpl, {name: 'Lorem Ipsum'}); // "Hello Lorem Ipsum!" -``` - -It uses a mustache-like syntax by default but you can set your own format if -needed. You can also use Arrays for the replacements (since Arrays are -objects as well): - -```js -// matches everything inside "${}" -var syntax = /\$\{([^}]+)\}/g; -var tmpl = "Hello ${0}!"; -interpolate(tmpl, ['Foo Bar'], syntax); // "Hello Foo Bar!" -``` - - - -## lowerCase(str):String - -"Safer" `String.toLowerCase()`. (Used internally) - -### Example - -```js -(null).toLowerCase(); // Error! -(undefined).toLowerCase(); // Error! -lowerCase(null); // "" -lowerCase(undefined); // "" -``` - - - -## lpad(str, minLength[, char]):String - -Pad string from left with `char` if its' length is smaller than `minLen`. - -See: [`rpad()`](#rpad) - -### Example - -```js -lpad('a', 5); // " a" -lpad('a', 5, '-'); // "----a" -lpad('abc', 3, '-'); // "abc" -lpad('abc', 4, '-'); // "-abc" -``` - - - -## ltrim(str, [chars]):String - -Remove chars or white-spaces from beginning of string. - -`chars` is an array of chars to remove from the beginning of the string. If -`chars` is not specified, Unicode whitespace chars will be used instead. - -See: [`rtrim()`](#rtrim), [`trim()`](#trim) - -### Example - -```js -ltrim(' lorem ipsum '); // "lorem ipsum " -ltrim('--lorem ipsum--', ['-']); // "lorem ipsum--" -``` - - - -## makePath(...args):String - -Group arguments as path segments, if any of the args is `null` or `undefined` -it will be ignored from resulting path. It will also remove duplicate "/". - -See: [`array/join()`](array.html#join) - -### Example - -```js -makePath('lorem', 'ipsum', null, 'dolor'); // "lorem/ipsum/dolor" -makePath('foo///bar/'); // "foo/bar/" -``` - - - -## normalizeLineBreaks(str, [lineBreak]):String - -Normalize line breaks to a single format. Defaults to Unix `\n`. - -It handles DOS (`\r\n`), Mac (`\r`) and Unix (`\n`) formats. - -### Example - -```js -// "foo\nbar\nlorem\nipsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum'); - -// "foo\rbar\rlorem\ripsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum', '\r'); - -// "foo bar lorem ipsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum', ' '); -``` - - - -## pascalCase(str):String - -Convert string to "PascalCase" text. - -See: [`camelCase()`](#camelCase) - -### Example - -```js -pascalCase('lorem-ipsum-dolor'); // "LoremIpsumDolor" -pascalCase('lorem ipsum dolor'); // "LoremIpsumDolor" -``` - - - -## properCase(str):String - -UPPERCASE first char of each word, lowercase other chars. - -### Example - -```js -properCase('loRem iPSum'); // "Lorem Ipsum" -``` - - - -## removeNonASCII(str):String - -Remove [non-printable ASCII -chars](http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters). - -### Example - -```js -removeNonASCII('äÄçÇéÉêlorem-ipsumöÖÐþúÚ'); // "lorem-ipsum" -``` - - - -## removeNonWord(str):String - -Remove non-word chars. - -### Example - -```js -var str = 'lorem ~!@#$%^&*()_+`-={}[]|\\:";\'/?><., ipsum'; -removeNonWord(str); // "lorem - ipsum" -``` - - - -## repeat(str, n):String - -Repeat string n-times. - -### Example - -```js -repeat('a', 3); // "aaa" -repeat('bc', 2); // "bcbc" -repeat('a', 0); // "" -``` - - - -## replace(str, search, replacements):String - -Replace string(s) with the replacement(s) in the source. - -`search` and `replacements` can be an array, or a single item. For every item -in `search`, it will call `str.replace` with the search item and the matching -replacement in `replacements`. If `replacements` only contains one replacement, -it will be used for all the searches, otherwise it will use the replacement at -the same index as the search. - -### Example - -```js -replace('foo bar', 'foo', 'test'); // "test bar" -replace('test 1 2', ['1', '2'], 'n'); // "test n n" -replace('test 1 2', ['1', '2'], ['one', 'two']); // "test one two" -replace('123abc', [/\d/g, /[a-z]/g], ['0', '.']); // "000..." -``` - - - -## replaceAccents(str):String - -Replaces all accented chars with regular ones. - -**Important:** Only covers **Basic Latin** and **Latin-1** unicode chars. - -### Example - -```js -replaceAccents('spéçïãl çhârs'); // "special chars" -``` - - - -## rpad(str, minLength[, char]):String - -Pad string from right with `char` if its' length is smaller than `minLen`. - -See: [`lpad()`](#lpad) - -### Example - -```js -rpad('a', 5); // "a " -rpad('a', 5, '-'); // "a----" -rpad('abc', 3, '-'); // "abc" -rpad('abc', 4, '-'); // "abc-" -``` - - - -## rtrim(str, [chars]):String - -Remove chars or white-spaces from end of string. - -`chars` is an array of chars to remove from the end of the string. If -`chars` is not specified, Unicode whitespace chars will be used instead. - -See: [`trim()`](#trim), [`ltrim()`](#ltrim) - -### Example - -```js -rtrim(' lorem ipsum '); // " lorem ipsum" -rtrim('--lorem ipsum--', ['-']); // "--lorem ipsum" -``` - - - -## sentenceCase(str):String - -UPPERCASE first char of each sentence and lowercase other chars. - -### Example - -```js -var str = 'Lorem IpSum DoLOr. maeCeNnas Ullamcor.'; -sentenceCase(str); // "Lorem ipsum dolor. Maecennas ullamcor." -``` - - - -## stripHtmlTags(str):String - -Remove HTML/XML tags from string. - -### Example - -```js -var str = '<p><em>lorem</em> <strong>ipsum</strong></p>'; -stripHtmlTags(str); // "lorem ipsum" -``` - - - -## startsWith(str, prefix):Boolean - -Checks if string starts with specified prefix. - -See: [`endsWith()`](#endsWith), [`contains()`](#contains) - -### Example - -```js -startsWith('lorem ipsum', 'lorem'); // true -startsWith('lorem ipsum', 'ipsum'); // false -``` - - - -## slugify(str[, delimeter]):String - -Convert to lower case, remove accents, remove non-word chars and replace spaces -with the delimeter. The default delimeter is a hyphen. - -Note that this does not split camelCase text. - -See: [`hyphenate()`](#hyphenate) and [`underscore()`](#underscore) - -### Example - -```js -var str = 'loremIpsum dolor spéçïãl chârs'; -slugify(str); // "loremipsum-dolor-special-chars" -slugify(str, '_'); // "loremipsum_dolor_special_chars" -``` - - - -## trim(str, [chars]):String - -Remove chars or white-spaces from beginning and end of string. - -`chars` is an array of chars to remove from the beginning and end of the -string. If `chars` is not specified, Unicode whitespace chars will be used -instead. - -See: [`rtrim()`](#rtrim), [`ltrim()`](#ltrim) - -### Example - -```js -trim(' lorem ipsum '); // "lorem ipsum" -trim('-+-lorem ipsum-+-', ['-', '+']); // "lorem ipsum" -``` - - - -## truncate(str, maxChars, [append], [onlyFullWords]):String - -Limit number of chars. Returned string `length` will be `<= maxChars`. - -See: [`crop()`](#crop) - -### Arguments - - 1. `str` (String) : String - 2. `maxChars` (Number) : Maximum number of characters including `append.length`. - 3. `[append]` (String) : Value that should be added to the end of string. - Defaults to "...". - 4. `[onlyFullWords]` (Boolean) : If it shouldn't break words. Default is - `false`. (favor [`crop()`](#crop) since code will be clearer). - -### Example - -```js -truncate('lorem ipsum dolor', 11); // "lorem ip..." -truncate('lorem ipsum dolor', 11, '+'); // "lorem ipsu+" -truncate('lorem ipsum dolor', 11, null, true); // "lorem..." -``` - - - -## typecast(str):* - -Parses string and convert it into a native value. - -### Example - -```js -typecast('lorem ipsum'); // "lorem ipsum" -typecast('123'); // 123 -typecast('123.45'); // 123.45 -typecast('false'); // false -typecast('true'); // true -typecast('null'); // null -typecast('undefined'); // undefined -``` - - - -## unCamelCase(str, [delimiter]):String - -Add the delimiter between camelCase text and convert first char of each word to -lower case. - -The delimiter defaults to a space character. - -See: [`camelCase()`][#camelCase] - -### Example - -```js -unCamelCase('loremIpsumDolor'); // "lorem ipsum dolor" -unCamelCase('loremIpsumDolor', '-'); // "lorem-ipsum-color" -``` - - -## underscore(str):String - -Replaces spaces with underscores, split camelCase text, remove non-word chars, -remove accents and convert to lower case. - -See: [`slugify()`](#slugify), [`hyphenate()`](#hyphenate) - -```js -underscore(' %# lorem ipsum ? $ dolor'); // "lorem_ipsum_dolor" -underscore('spéçïãl çhârs'); // "special_chars" -underscore('loremIpsum'); // "lorem_ipsum" -``` - - - -## unescapeHtml(str):String - -Unescapes HTML special chars (`>`, `<`, `&`, `"`, `'`). - -See: [`escapeHtml()`](#escapeHtml) - -### Example - -```js -unescapeHtml('lorem &amp; &quot;ipsum&quot;'); // 'lorem & "ipsum"' -``` - - - -## unescapeUnicode(str):String - -Unescapes unicode char sequences. - -See: [`escapeUnicode()`](#escapeUnicode) - -```js -unescapeUnicode('\\u0066\\u00f8\\u006f\\u0020\\u0062\\u00e5\\u0072'); -// > 'føo bår' -``` - - - -## unhyphenate(str):String - -Replaces hyphens with spaces. (only hyphens between word chars) - -See : [`hyphenate()`](#hyphenate) - -### Example - -```js -unhyphenate('lorem-ipsum-dolor'); // "lorem ipsum dolor" -``` - - -## upperCase(str):String - -"Safer" `String.toUpperCase()`. (Used internally) - -### Example - -```js -(null).toUpperCase(); // Error! -(undefined).toUpperCase(); // Error! -upperCase(null); // "" -upperCase(undefined); // "" -``` - - - -## WHITE_SPACES:Array - -Constant array of all [Unicode white-space -characters](http://en.wikipedia.org/wiki/Whitespace_character). - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/time.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/time.md deleted file mode 100644 index 628c2a9b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/doc/time.md +++ /dev/null @@ -1,64 +0,0 @@ -# time # - -Utilities for time manipulation. - - -## convert(value, sourceUnit, [destinationUnit]):Number - -Converts time between units. - -Available units: `millisecond`, `second`, `minute`, `hour`, `day`, `week`. -Abbreviations: `ms`, `s`, `m`, `h`, `d`, `w`. - -We do **not** support year and month as a time unit since their values are not -fixed. - -The default `destinationUnit` is `ms`. - -```js -convert(1, 'minute'); // 60000 -convert(2.5, 's', 'ms'); // 2500 -convert(2, 'm', 's'); // 120 -convert(500, 'ms', 's'); // 0.5 -``` - - - -## now():Number - -Returns the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC. -Uses `Date.now()` if available. - -### Example - -```js -now(); // 1335449614650 -``` - - - -## parseMs(ms):Object - -Parse timestamp (milliseconds) into an object `{milliseconds:number, -seconds:number, minutes:number, hours:number, days:number}`. - -### Example - -```js -// {days:27, hours:4, minutes:26, seconds:5, milliseconds:454} -parseMs(2348765454); -``` - - - -## toTimeString(ms):String - -Convert timestamp (milliseconds) into a time string in the format "[H:]MM:SS". - -### Example - -```js -toTimeString(12513); // "00:12" -toTimeString(951233); // "15:51" -toTimeString(8765235); // "2:26:05" -``` diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function.js deleted file mode 100644 index 43a16ef4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function.js +++ /dev/null @@ -1,18 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'bind' : require('./function/bind'), - 'compose' : require('./function/compose'), - 'debounce' : require('./function/debounce'), - 'func' : require('./function/func'), - 'makeIterator_' : require('./function/makeIterator_'), - 'partial' : require('./function/partial'), - 'prop' : require('./function/prop'), - 'series' : require('./function/series'), - 'throttle' : require('./function/throttle'), - 'timeout' : require('./function/timeout') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/bind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/bind.js deleted file mode 100644 index 71bc1257..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/bind.js +++ /dev/null @@ -1,23 +0,0 @@ - - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - * @param {Function} fn Function. - * @param {object} context Execution context. - * @param {rest} args Arguments (0...n arguments). - * @return {Function} Wrapped Function. - */ - function bind(fn, context, args){ - var argsArr = slice(arguments, 2); //curried args - return function(){ - return fn.apply(context, argsArr.concat(slice(arguments))); - }; - } - - module.exports = bind; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/compose.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/compose.js deleted file mode 100644 index 8cd5c5f3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/compose.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Returns a function that composes multiple functions, passing results to - * each other. - */ - function compose() { - var fns = arguments; - return function(arg){ - // only cares about the first argument since the chain can only - // deal with a single return value anyway. It should start from - // the last fn. - var n = fns.length; - while (n--) { - arg = fns[n].call(this, arg); - } - return arg; - }; - } - - module.exports = compose; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/debounce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/debounce.js deleted file mode 100644 index a0ed07f5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/debounce.js +++ /dev/null @@ -1,29 +0,0 @@ - - - /** - * Debounce callback execution - */ - function debounce(fn, threshold, isAsap){ - var timeout, result; - function debounced(){ - var args = arguments, context = this; - function delayed(){ - if (! isAsap) { - result = fn.apply(context, args); - } - timeout = null; - } - if (timeout) { - clearTimeout(timeout); - } else if (isAsap) { - result = fn.apply(context, args); - } - timeout = setTimeout(delayed, threshold); - return result; - } - return debounced; - } - - module.exports = debounce; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/func.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/func.js deleted file mode 100644 index b81bf0a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/func.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Returns a function that call a method on the passed object - */ - function func(name){ - return function(obj){ - return obj[name](); - }; - } - - module.exports = func; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/makeIterator_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/makeIterator_.js deleted file mode 100644 index 767610a5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/makeIterator_.js +++ /dev/null @@ -1,34 +0,0 @@ -var prop = require('./prop'); -var deepMatches = require('../object/deepMatches'); - - /** - * Converts argument into a valid iterator. - * Used internally on most array/object/collection methods that receives a - * callback/iterator providing a shortcut syntax. - */ - function makeIterator(src, thisObj){ - switch(typeof src) { - case 'object': - // typeof null == "object" - return (src != null)? function(val, key, target){ - return deepMatches(val, src); - } : src; - case 'string': - case 'number': - return prop(src); - case 'function': - if (typeof thisObj === 'undefined') { - return src; - } else { - return function(val, i, arr){ - return src.call(thisObj, val, i, arr); - }; - } - default: - return src; - } - } - - module.exports = makeIterator; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/partial.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/partial.js deleted file mode 100644 index d63ff1be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/partial.js +++ /dev/null @@ -1,19 +0,0 @@ - - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Creates a partially applied function. - */ - function partial(fn, var_args){ - var argsArr = slice(arguments, 1); //curried args - return function(){ - return fn.apply(this, argsArr.concat(slice(arguments))); - }; - } - - module.exports = partial; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/prop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/prop.js deleted file mode 100644 index 734acb7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/prop.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Returns a function that gets a property of the passed object - */ - function prop(name){ - return function(obj){ - return obj[name]; - }; - } - - module.exports = prop; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/series.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/series.js deleted file mode 100644 index 25159c2c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/series.js +++ /dev/null @@ -1,22 +0,0 @@ - - - /** - * Returns a function that will execute a list of functions in sequence - * passing the same arguments to each one. (useful for batch processing - * items during a forEach loop) - */ - function series(){ - var fns = arguments; - return function(){ - var i = 0, - n = fns.length; - while (i < n) { - fns[i].apply(this, arguments); - i += 1; - } - }; - } - - module.exports = series; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/throttle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/throttle.js deleted file mode 100644 index 619dc540..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/throttle.js +++ /dev/null @@ -1,32 +0,0 @@ -var now = require('../time/now'); - - /** - */ - function throttle(fn, delay){ - var context, timeout, result, args, - cur, diff, prev = 0; - function delayed(){ - prev = now(); - timeout = null; - result = fn.apply(context, args); - } - function throttled(){ - context = this; - args = arguments; - cur = now(); - diff = delay - (cur - prev); - if (diff <= 0) { - clearTimeout(timeout); - prev = cur; - result = fn.apply(context, args); - } else if (! timeout) { - timeout = setTimeout(delayed, diff); - } - return result; - } - return throttled; - } - - module.exports = throttle; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/timeout.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/timeout.js deleted file mode 100644 index e0d21a66..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/function/timeout.js +++ /dev/null @@ -1,21 +0,0 @@ - - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Delays the call of a function within a given context. - */ - function timeout(fn, millis, context){ - - var args = slice(arguments, 3); - - return setTimeout(function() { - fn.apply(context, args); - }, millis); - } - - module.exports = timeout; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/index.js deleted file mode 100644 index 32a1c639..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/index.js +++ /dev/null @@ -1,24 +0,0 @@ -/**@license - * mout v0.6.0 | http://moutjs.com | MIT license - */ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'VERSION' : '0.6.0', - 'array' : require('./array'), - 'collection' : require('./collection'), - 'date' : require('./date'), - 'function' : require('./function'), - 'lang' : require('./lang'), - 'math' : require('./math'), - 'number' : require('./number'), - 'object' : require('./object'), - 'queryString' : require('./queryString'), - 'random' : require('./random'), - 'string' : require('./string'), - 'time' : require('./time') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang.js deleted file mode 100644 index b9816218..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang.js +++ /dev/null @@ -1,36 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'clone' : require('./lang/clone'), - 'createObject' : require('./lang/createObject'), - 'ctorApply' : require('./lang/ctorApply'), - 'deepClone' : require('./lang/deepClone'), - 'defaults' : require('./lang/defaults'), - 'inheritPrototype' : require('./lang/inheritPrototype'), - 'is' : require('./lang/is'), - 'isArguments' : require('./lang/isArguments'), - 'isArray' : require('./lang/isArray'), - 'isBoolean' : require('./lang/isBoolean'), - 'isDate' : require('./lang/isDate'), - 'isEmpty' : require('./lang/isEmpty'), - 'isFinite' : require('./lang/isFinite'), - 'isFunction' : require('./lang/isFunction'), - 'isInteger' : require('./lang/isInteger'), - 'isKind' : require('./lang/isKind'), - 'isNaN' : require('./lang/isNaN'), - 'isNull' : require('./lang/isNull'), - 'isNumber' : require('./lang/isNumber'), - 'isObject' : require('./lang/isObject'), - 'isPlainObject' : require('./lang/isPlainObject'), - 'isRegExp' : require('./lang/isRegExp'), - 'isString' : require('./lang/isString'), - 'isUndefined' : require('./lang/isUndefined'), - 'isnt' : require('./lang/isnt'), - 'kindOf' : require('./lang/kindOf'), - 'toArray' : require('./lang/toArray'), - 'toString' : require('./lang/toString') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/clone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/clone.js deleted file mode 100644 index 33c4e949..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/clone.js +++ /dev/null @@ -1,49 +0,0 @@ -var kindOf = require('./kindOf'); -var isPlainObject = require('./isPlainObject'); -var mixIn = require('../object/mixIn'); - - /** - * Clone native types. - */ - function clone(val){ - switch (kindOf(val)) { - case 'Object': - return cloneObject(val); - case 'Array': - return cloneArray(val); - case 'RegExp': - return cloneRegExp(val); - case 'Date': - return cloneDate(val); - default: - return val; - } - } - - function cloneObject(source) { - if (isPlainObject(source)) { - return mixIn({}, source); - } else { - return source; - } - } - - function cloneRegExp(r) { - var flags = ''; - flags += r.multiline ? 'm' : ''; - flags += r.global ? 'g' : ''; - flags += r.ignorecase ? 'i' : ''; - return new RegExp(r.source, flags); - } - - function cloneDate(date) { - return new Date(+date); - } - - function cloneArray(arr) { - return arr.slice(); - } - - module.exports = clone; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/createObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/createObject.js deleted file mode 100644 index bbc14c1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/createObject.js +++ /dev/null @@ -1,18 +0,0 @@ -var mixIn = require('../object/mixIn'); - - /** - * Create Object using prototypal inheritance and setting custom properties. - * - Mix between Douglas Crockford Prototypal Inheritance <http://javascript.crockford.com/prototypal.html> and the EcmaScript 5 `Object.create()` method. - * @param {object} parent Parent Object. - * @param {object} [props] Object properties. - * @return {object} Created object. - */ - function createObject(parent, props){ - function F(){} - F.prototype = parent; - return mixIn(new F(), props); - - } - module.exports = createObject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/ctorApply.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/ctorApply.js deleted file mode 100644 index d68dc506..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/ctorApply.js +++ /dev/null @@ -1,17 +0,0 @@ - - - function F(){} - - /** - * Do fn.apply on a constructor. - */ - function ctorApply(ctor, args) { - F.prototype = ctor.prototype; - var instance = new F(); - ctor.apply(instance, args); - return instance; - } - - module.exports = ctorApply; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/deepClone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/deepClone.js deleted file mode 100644 index 25fd95f1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/deepClone.js +++ /dev/null @@ -1,48 +0,0 @@ -var clone = require('./clone'); -var forOwn = require('../object/forOwn'); -var kindOf = require('./kindOf'); -var isPlainObject = require('./isPlainObject'); - - /** - * Recursively clone native types. - */ - function deepClone(val, instanceClone) { - switch ( kindOf(val) ) { - case 'Object': - return cloneObject(val, instanceClone); - case 'Array': - return cloneArray(val, instanceClone); - default: - return clone(val); - } - } - - function cloneObject(source, instanceClone) { - if (isPlainObject(source)) { - var out = {}; - forOwn(source, function(val, key) { - this[key] = deepClone(val, instanceClone); - }, out); - return out; - } else if (instanceClone) { - return instanceClone(source); - } else { - return source; - } - } - - function cloneArray(arr, instanceClone) { - var out = [], - i = -1, - n = arr.length, - val; - while (++i < n) { - out[i] = deepClone(arr[i], instanceClone); - } - return out; - } - - module.exports = deepClone; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/defaults.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/defaults.js deleted file mode 100644 index 1111b2ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/defaults.js +++ /dev/null @@ -1,17 +0,0 @@ -var toArray = require('./toArray'); -var find = require('../array/find'); - - /** - * Return first non void argument - */ - function defaults(var_args){ - return find(toArray(arguments), nonVoid); - } - - function nonVoid(val){ - return val != null; - } - - module.exports = defaults; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/inheritPrototype.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/inheritPrototype.js deleted file mode 100644 index cd8a379e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/inheritPrototype.js +++ /dev/null @@ -1,16 +0,0 @@ -var createObject = require('./createObject'); - - /** - * Inherit prototype from another Object. - * - inspired by Nicholas Zackas <http://nczonline.net> Solution - * @param {object} child Child object - * @param {object} parent Parent Object - */ - function inheritPrototype(child, parent){ - var p = createObject(parent.prototype); - p.constructor = child; - child.prototype = p; - } - - module.exports = inheritPrototype; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/is.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/is.js deleted file mode 100644 index 4a835739..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/is.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Check if both arguments are egal. - */ - function is(x, y){ - // implementation borrowed from harmony:egal spec - if (x === y) { - // 0 === -0, but they are not identical - return x !== 0 || 1 / x === 1 / y; - } - - // NaN !== NaN, but they are identical. - // NaNs are the only non-reflexive value, i.e., if x !== x, - // then x is a NaN. - // isNaN is broken: it converts its argument to number, so - // isNaN("foo") => true - return x !== x && y !== y; - } - - module.exports = is; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isArguments.js deleted file mode 100644 index f7b08ba4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isArguments.js +++ /dev/null @@ -1,15 +0,0 @@ -var isKind = require('./isKind'); - - /** - */ - var isArgs = isKind(arguments, 'Arguments')? - function(val){ - return isKind(val, 'Arguments'); - } : - function(val){ - // Arguments is an Object on IE7 - return !!(val && Object.prototype.hasOwnProperty.call(val, 'callee')); - }; - - module.exports = isArgs; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isArray.js deleted file mode 100644 index 262ee400..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isArray.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - var isArray = Array.isArray || function (val) { - return isKind(val, 'Array'); - }; - module.exports = isArray; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isBoolean.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isBoolean.js deleted file mode 100644 index 86557cb9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isBoolean.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isBoolean(val) { - return isKind(val, 'Boolean'); - } - module.exports = isBoolean; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isDate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isDate.js deleted file mode 100644 index 4a5130f2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isDate.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isDate(val) { - return isKind(val, 'Date'); - } - module.exports = isDate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isEmpty.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isEmpty.js deleted file mode 100644 index 0e9f77da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isEmpty.js +++ /dev/null @@ -1,24 +0,0 @@ -var forOwn = require('../object/forOwn'); -var isArray = require('./isArray'); - - function isEmpty(val){ - if (val == null) { - // typeof null == 'object' so we check it first - return false; - } else if ( typeof val === 'string' || isArray(val) ) { - return !val.length; - } else if ( typeof val === 'object' || typeof val === 'function' ) { - var result = true; - forOwn(val, function(){ - result = false; - return false; // break loop - }); - return result; - } else { - return false; - } - } - - module.exports = isEmpty; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isFinite.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isFinite.js deleted file mode 100644 index 6d4006f9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isFinite.js +++ /dev/null @@ -1,21 +0,0 @@ -var isNumber = require('./isNumber'); - - var global = this; - - /** - * Check if value is finite - */ - function isFinite(val){ - var is = false; - if (typeof val === 'string' && val !== '') { - is = global.isFinite( parseFloat(val) ); - } else if (isNumber(val)){ - // need to use isNumber because of Number constructor - is = global.isFinite( val ); - } - return is; - } - - module.exports = isFinite; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isFunction.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isFunction.js deleted file mode 100644 index 216879f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isFunction.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isFunction(val) { - return isKind(val, 'Function'); - } - module.exports = isFunction; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isInteger.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isInteger.js deleted file mode 100644 index 29f95d96..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -var isNumber = require('./isNumber'); - - /** - * Check if value is an integer - */ - function isInteger(val){ - return isNumber(val) && (val % 1 === 0); - } - - module.exports = isInteger; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isKind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isKind.js deleted file mode 100644 index 02301e04..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isKind.js +++ /dev/null @@ -1,9 +0,0 @@ -var kindOf = require('./kindOf'); - /** - * Check if value is from a specific "kind". - */ - function isKind(val, kind){ - return kindOf(val) === kind; - } - module.exports = isKind; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isNaN.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isNaN.js deleted file mode 100644 index f6efeb1f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isNaN.js +++ /dev/null @@ -1,15 +0,0 @@ -var isNumber = require('./isNumber'); - - /** - * Check if value is NaN for realz - */ - function isNaN(val){ - // based on the fact that NaN !== NaN - // need to check if it's a number to avoid conflicts with host objects - // also need to coerce ToNumber to avoid edge case `new Number(NaN)` - return !isNumber(val) || val != +val; - } - - module.exports = isNaN; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isNull.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isNull.js deleted file mode 100644 index 6252f9ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isNull.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - */ - function isNull(val){ - return val === null; - } - module.exports = isNull; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isNumber.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isNumber.js deleted file mode 100644 index 126c1cce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isNumber.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isNumber(val) { - return isKind(val, 'Number'); - } - module.exports = isNumber; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isObject.js deleted file mode 100644 index 7350c891..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isObject.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isObject(val) { - return isKind(val, 'Object'); - } - module.exports = isObject; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isPlainObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isPlainObject.js deleted file mode 100644 index 0d2d7b65..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isPlainObject.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Checks if the value is created by the `Object` constructor. - */ - function isPlainObject(value) { - return (!!value - && typeof value === 'object' - && value.constructor === Object); - } - - module.exports = isPlainObject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isRegExp.js deleted file mode 100644 index fc5459a9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isRegExp.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isRegExp(val) { - return isKind(val, 'RegExp'); - } - module.exports = isRegExp; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isString.js deleted file mode 100644 index f8906584..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isString.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isString(val) { - return isKind(val, 'String'); - } - module.exports = isString; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isUndefined.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isUndefined.js deleted file mode 100644 index fb2261df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isUndefined.js +++ /dev/null @@ -1,10 +0,0 @@ - - var UNDEF; - - /** - */ - function isUndef(val){ - return val === UNDEF; - } - module.exports = isUndef; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isnt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isnt.js deleted file mode 100644 index 9dad58ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/isnt.js +++ /dev/null @@ -1,12 +0,0 @@ -var is = require('./is'); - - /** - * Check if both values are not identical/egal - */ - function isnt(x, y){ - return !is(x, y); - } - - module.exports = isnt; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/kindOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/kindOf.js deleted file mode 100644 index 663464d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/kindOf.js +++ /dev/null @@ -1,20 +0,0 @@ - - - var _rKind = /^\[object (.*)\]$/, - _toString = Object.prototype.toString, - UNDEF; - - /** - * Gets the "kind" of value. (e.g. "String", "Number", etc) - */ - function kindOf(val) { - if (val === null) { - return 'Null'; - } else if (val === UNDEF) { - return 'Undefined'; - } else { - return _rKind.exec( _toString.call(val) )[1]; - } - } - module.exports = kindOf; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/toArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/toArray.js deleted file mode 100644 index e39b8734..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/toArray.js +++ /dev/null @@ -1,31 +0,0 @@ -var kindOf = require('./kindOf'); - - var _win = this; - - /** - * Convert array-like object into array - */ - function toArray(val){ - var ret = [], - kind = kindOf(val), - n; - - if (val != null) { - if ( val.length == null || kind === 'String' || kind === 'Function' || kind === 'RegExp' || val === _win ) { - //string, regexp, function have .length but user probably just want - //to wrap value into an array.. - ret[ret.length] = val; - } else { - //window returns true on isObject in IE7 and may have length - //property. `typeof NodeList` returns `function` on Safari so - //we can't use it (#58) - n = val.length; - while (n--) { - ret[n] = val[n]; - } - } - } - return ret; - } - module.exports = toArray; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/toString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/toString.js deleted file mode 100644 index ae5c2b0f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/lang/toString.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * Typecast a value to a String, using an empty string value for null or - * undefined. - */ - function toString(val){ - return val == null ? '' : val.toString(); - } - - module.exports = toString; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math.js deleted file mode 100644 index c6ee889b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math.js +++ /dev/null @@ -1,19 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'ceil' : require('./math/ceil'), - 'clamp' : require('./math/clamp'), - 'countSteps' : require('./math/countSteps'), - 'floor' : require('./math/floor'), - 'inRange' : require('./math/inRange'), - 'isNear' : require('./math/isNear'), - 'lerp' : require('./math/lerp'), - 'loop' : require('./math/loop'), - 'map' : require('./math/map'), - 'norm' : require('./math/norm'), - 'round' : require('./math/round') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/ceil.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/ceil.js deleted file mode 100644 index a279e158..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/ceil.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Round value up with a custom radix. - */ - function ceil(val, step){ - step = Math.abs(step || 1); - return Math.ceil(val / step) * step; - } - - module.exports = ceil; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/clamp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/clamp.js deleted file mode 100644 index e929a9a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/clamp.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Clamps value inside range. - */ - function clamp(val, min, max){ - return val < min? min : (val > max? max : val); - } - module.exports = clamp; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/countSteps.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/countSteps.js deleted file mode 100644 index 60ac90c3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/countSteps.js +++ /dev/null @@ -1,16 +0,0 @@ - - /** - * Count number of full steps. - */ - function countSteps(val, step, overflow){ - val = Math.floor(val / step); - - if (overflow) { - return val % overflow; - } - - return val; - } - - module.exports = countSteps; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/floor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/floor.js deleted file mode 100644 index 9de50531..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/floor.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Floor value to full steps. - */ - function floor(val, step){ - step = Math.abs(step || 1); - return Math.floor(val / step) * step; - } - module.exports = floor; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/inRange.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/inRange.js deleted file mode 100644 index 763218f8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/inRange.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Checks if value is inside the range. - */ - function inRange(val, min, max, threshold){ - threshold = threshold || 0; - return (val + threshold >= min && val - threshold <= max); - } - - module.exports = inRange; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/isNear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/isNear.js deleted file mode 100644 index 45486b6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/isNear.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Check if value is close to target. - */ - function isNear(val, target, threshold){ - return (Math.abs(val - target) <= threshold); - } - module.exports = isNear; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/lerp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/lerp.js deleted file mode 100644 index 111e2717..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/lerp.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Linear interpolation. - * IMPORTANT:will return `Infinity` if numbers overflow Number.MAX_VALUE - */ - function lerp(ratio, start, end){ - return start + (end - start) * ratio; - } - - module.exports = lerp; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/loop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/loop.js deleted file mode 100644 index 35207c1a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/loop.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Loops value inside range. - */ - function loop(val, min, max){ - return val < min? max : (val > max? min : val); - } - - module.exports = loop; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/map.js deleted file mode 100644 index 96c4b787..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/map.js +++ /dev/null @@ -1,11 +0,0 @@ -var lerp = require('./lerp'); -var norm = require('./norm'); - /** - * Maps a number from one scale to another. - * @example map(3, 0, 4, -1, 1) -> 0.5 - */ - function map(val, min1, max1, min2, max2){ - return lerp( norm(val, min1, max1), min2, max2 ); - } - module.exports = map; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/norm.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/norm.js deleted file mode 100644 index 54caf78a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/norm.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Gets normalized ratio of value inside range. - */ - function norm(val, min, max){ - return (val - min) / (max - min); - } - module.exports = norm; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/round.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/round.js deleted file mode 100644 index d108e6cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/math/round.js +++ /dev/null @@ -1,12 +0,0 @@ - - /** - * Round number to a specific radix - */ - function round(value, radix){ - radix = radix || 1; // default round 1 - return Math.round(value / radix) * radix; - } - - module.exports = round; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number.js deleted file mode 100644 index 0b6186cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number.js +++ /dev/null @@ -1,21 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'MAX_INT' : require('./number/MAX_INT'), - 'MAX_UINT' : require('./number/MAX_UINT'), - 'MIN_INT' : require('./number/MIN_INT'), - 'abbreviate' : require('./number/abbreviate'), - 'currencyFormat' : require('./number/currencyFormat'), - 'enforcePrecision' : require('./number/enforcePrecision'), - 'pad' : require('./number/pad'), - 'rol' : require('./number/rol'), - 'ror' : require('./number/ror'), - 'sign' : require('./number/sign'), - 'toInt' : require('./number/toInt'), - 'toUInt' : require('./number/toUInt'), - 'toUInt31' : require('./number/toUInt31') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/MAX_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/MAX_INT.js deleted file mode 100644 index 1d6f0e48..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/MAX_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit signed integer value. (2^31 - 1) - */ - - module.exports = 2147483647; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/MAX_UINT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/MAX_UINT.js deleted file mode 100644 index 700da0f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/MAX_UINT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit unsigned integet value (2^32 - 1) - */ - - module.exports = 4294967295; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/MIN_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/MIN_INT.js deleted file mode 100644 index b34ab2ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/MIN_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Minimum 32-bit signed integer value (-2^31). - */ - - module.exports = -2147483648; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/abbreviate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/abbreviate.js deleted file mode 100644 index dd6716b9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/abbreviate.js +++ /dev/null @@ -1,35 +0,0 @@ -var enforcePrecision = require('./enforcePrecision'); - - var _defaultDict = { - thousand : 'K', - million : 'M', - billion : 'B' - }; - - /** - * Abbreviate number if bigger than 1000. (eg: 2.5K, 17.5M, 3.4B, ...) - */ - function abbreviateNumber(val, nDecimals, dict){ - nDecimals = nDecimals != null? nDecimals : 1; - dict = dict || _defaultDict; - val = enforcePrecision(val, nDecimals); - - var str, mod; - - if (val < 1000000) { - mod = enforcePrecision(val / 1000, nDecimals); - // might overflow to next scale during rounding - str = mod < 1000? mod + dict.thousand : 1 + dict.million; - } else if (val < 1000000000) { - mod = enforcePrecision(val / 1000000, nDecimals); - str = mod < 1000? mod + dict.million : 1 + dict.billion; - } else { - str = enforcePrecision(val / 1000000000, nDecimals) + dict.billion; - } - - return str; - } - - module.exports = abbreviateNumber; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/currencyFormat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/currencyFormat.js deleted file mode 100644 index 1cf02497..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/currencyFormat.js +++ /dev/null @@ -1,26 +0,0 @@ - - - /** - * Converts number into currency format - */ - function currencyFormat(val, nDecimalDigits, decimalSeparator, thousandsSeparator) { - nDecimalDigits = nDecimalDigits == null? 2 : nDecimalDigits; - decimalSeparator = decimalSeparator == null? '.' : decimalSeparator; - thousandsSeparator = thousandsSeparator == null? ',' : thousandsSeparator; - - //can't use enforce precision since it returns a number and we are - //doing a RegExp over the string - var fixed = val.toFixed(nDecimalDigits), - //separate begin [$1], middle [$2] and decimal digits [$4] - parts = new RegExp('^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{'+ nDecimalDigits +'}))?$').exec( fixed ); - - if(parts){ //val >= 1000 || val <= -1000 - return parts[1] + parts[2].replace(/\d{3}/g, thousandsSeparator + '$&') + (parts[4] ? decimalSeparator + parts[4] : ''); - }else{ - return fixed.replace('.', decimalSeparator); - } - } - - module.exports = currencyFormat; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/enforcePrecision.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/enforcePrecision.js deleted file mode 100644 index f73a92d7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/enforcePrecision.js +++ /dev/null @@ -1,13 +0,0 @@ - - /** - * Enforce a specific amount of decimal digits and also fix floating - * point rounding issues. - * @example `enforcePrecision(0.615, 2) -> 0.62`, `(0.615).toFixed(2) -> - * 0.61` - */ - function enforcePrecision(val, nDecimalDigits){ - var pow = Math.pow(10, nDecimalDigits); - return +(Math.round(val * pow) / pow).toFixed(nDecimalDigits); - } - module.exports = enforcePrecision; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/pad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/pad.js deleted file mode 100644 index da752706..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/pad.js +++ /dev/null @@ -1,12 +0,0 @@ -var lpad = require('../string/lpad'); - - /** - * Add padding zeros if n.length < minLength. - */ - function pad(n, minLength, char){ - return lpad(''+ n, minLength, char || '0'); - } - - module.exports = pad; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/rol.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/rol.js deleted file mode 100644 index ecd58da4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/rol.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Bitwise circular shift left - * http://en.wikipedia.org/wiki/Circular_shift - */ - function rol(val, shift){ - return (val << shift) | (val >> (32 - shift)); - } - module.exports = rol; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/ror.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/ror.js deleted file mode 100644 index 2eda81da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/ror.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Bitwise circular shift right - * http://en.wikipedia.org/wiki/Circular_shift - */ - function ror(val, shift){ - return (val >> shift) | (val << (32 - shift)); - } - module.exports = ror; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/sign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/sign.js deleted file mode 100644 index b854a4ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/sign.js +++ /dev/null @@ -1,15 +0,0 @@ - - - /** - * Get sign of the value. - */ - function sign(val) { - var num = Number(val); - if (num === 0) return num; // +0 and +0 === 0 - if (isNaN(num)) return num; // NaN - return num < 0? -1 : 1; - } - - module.exports = sign; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/toInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/toInt.js deleted file mode 100644 index bcefae0e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/toInt.js +++ /dev/null @@ -1,15 +0,0 @@ - - - /** - * "Convert" value into an 32-bit integer. - * Works like `Math.floor` if val > 0 and `Math.ceil` if val < 0. - * IMPORTANT: val will wrap at 2^31 and -2^31. - * Perf tests: http://jsperf.com/vs-vs-parseint-bitwise-operators/7 - */ - function toInt(val){ - return ~~val; - } - - module.exports = toInt; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/toUInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/toUInt.js deleted file mode 100644 index 5290b627..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/toUInt.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * "Convert" value into a 32-bit unsigned integer. - * IMPORTANT: Value will wrap at 2^32. - */ - function toUInt(val){ - return val >>> 0; - } - - module.exports = toUInt; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/toUInt31.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/toUInt31.js deleted file mode 100644 index fcc5a97c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/number/toUInt31.js +++ /dev/null @@ -1,13 +0,0 @@ -var MAX_INT = require('./MAX_INT'); - - /** - * "Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - * IMPORTANT: value wil wrap at 2^31, if negative will return 0. - */ - function toUInt31(val){ - return (val <= 0)? 0 : (val > MAX_INT? ~~(val % (MAX_INT + 1)) : ~~val); - } - - module.exports = toUInt31; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object.js deleted file mode 100644 index 76c06424..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object.js +++ /dev/null @@ -1,42 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'bindAll' : require('./object/bindAll'), - 'contains' : require('./object/contains'), - 'deepEquals' : require('./object/deepEquals'), - 'deepFillIn' : require('./object/deepFillIn'), - 'deepMatches' : require('./object/deepMatches'), - 'deepMixIn' : require('./object/deepMixIn'), - 'equals' : require('./object/equals'), - 'every' : require('./object/every'), - 'fillIn' : require('./object/fillIn'), - 'filter' : require('./object/filter'), - 'find' : require('./object/find'), - 'forIn' : require('./object/forIn'), - 'forOwn' : require('./object/forOwn'), - 'functions' : require('./object/functions'), - 'get' : require('./object/get'), - 'has' : require('./object/has'), - 'hasOwn' : require('./object/hasOwn'), - 'keys' : require('./object/keys'), - 'map' : require('./object/map'), - 'matches' : require('./object/matches'), - 'max' : require('./object/max'), - 'merge' : require('./object/merge'), - 'min' : require('./object/min'), - 'mixIn' : require('./object/mixIn'), - 'namespace' : require('./object/namespace'), - 'pick' : require('./object/pick'), - 'pluck' : require('./object/pluck'), - 'reduce' : require('./object/reduce'), - 'reject' : require('./object/reject'), - 'set' : require('./object/set'), - 'size' : require('./object/size'), - 'some' : require('./object/some'), - 'unset' : require('./object/unset'), - 'values' : require('./object/values') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/bindAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/bindAll.js deleted file mode 100644 index b2f27d08..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/bindAll.js +++ /dev/null @@ -1,18 +0,0 @@ -var functions = require('./functions'); -var bind = require('../function/bind'); -var forEach = require('../array/forEach'); - - /** - * Binds methods of the object to be run in it's own context. - */ - function bindAll(obj, rest_methodNames){ - var keys = arguments.length > 1? - Array.prototype.slice.call(arguments, 1) : functions(obj); - forEach(keys, function(key){ - obj[key] = bind(obj[key], obj); - }); - } - - module.exports = bindAll; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/contains.js deleted file mode 100644 index 8076e2c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/contains.js +++ /dev/null @@ -1,13 +0,0 @@ -var some = require('./some'); - - /** - * Check if object contains value - */ - function contains(obj, needle) { - return some(obj, function(val) { - return (val === needle); - }); - } - module.exports = contains; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepEquals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepEquals.js deleted file mode 100644 index fcde9449..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepEquals.js +++ /dev/null @@ -1,27 +0,0 @@ -var isObject = require('../lang/isObject'); -var equals = require('./equals'); - - function defaultCompare(a, b) { - return a === b; - } - - /** - * Recursively checks for same properties and values. - */ - function deepEquals(a, b, callback){ - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - function compare(a, b){ - return deepEquals(a, b, callback); - } - - return equals(a, b, compare); - } - - module.exports = deepEquals; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepFillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepFillIn.js deleted file mode 100644 index d27db44d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepFillIn.js +++ /dev/null @@ -1,32 +0,0 @@ -var forOwn = require('./forOwn'); -var isPlainObject = require('../lang/isPlainObject'); - - /** - * Deeply copy missing properties in the target from the defaults. - */ - function deepFillIn(target, defaults){ - var i = 0, - n = arguments.length, - obj; - - while(++i < n) { - obj = arguments[i]; - if (obj) { - forOwn(obj, function(newValue, key) { - var curValue = target[key]; - if (curValue == null) { - target[key] = newValue; - } else if (isPlainObject(curValue) - && isPlainObject(newValue)) { - deepFillIn(curValue, newValue); - } - }); - } - } - - return target; - } - - module.exports = deepFillIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepMatches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepMatches.js deleted file mode 100644 index 3366c52d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepMatches.js +++ /dev/null @@ -1,55 +0,0 @@ -var forOwn = require('./forOwn'); -var isArray = require('../lang/isArray'); - - function containsMatch(array, pattern) { - var i = -1, length = array.length; - while (++i < length) { - if (deepMatches(array[i], pattern)) { - return true; - } - } - - return false; - } - - function matchArray(target, pattern) { - var i = -1, patternLength = pattern.length; - while (++i < patternLength) { - if (!containsMatch(target, pattern[i])) { - return false; - } - } - - return true; - } - - function matchObject(target, pattern) { - var result = true; - forOwn(pattern, function(val, key) { - if (!deepMatches(target[key], val)) { - // Return false to break out of forOwn early - return (result = false); - } - }); - - return result; - } - - /** - * Recursively check if the objects match. - */ - function deepMatches(target, pattern){ - if (target && typeof target === 'object') { - if (isArray(target) && isArray(pattern)) { - return matchArray(target, pattern); - } else { - return matchObject(target, pattern); - } - } else { - return target === pattern; - } - } - - module.exports = deepMatches; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepMixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepMixIn.js deleted file mode 100644 index a97e98d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/deepMixIn.js +++ /dev/null @@ -1,34 +0,0 @@ -var forOwn = require('./forOwn'); -var isPlainObject = require('../lang/isPlainObject'); - - /** - * Mixes objects into the target object, recursively mixing existing child - * objects. - */ - function deepMixIn(target, objects) { - var i = 0, - n = arguments.length, - obj; - - while(++i < n){ - obj = arguments[i]; - if (obj) { - forOwn(obj, copyProp, target); - } - } - - return target; - } - - function copyProp(val, key) { - var existing = this[key]; - if (isPlainObject(val) && isPlainObject(existing)) { - deepMixIn(existing, val); - } else { - this[key] = val; - } - } - - module.exports = deepMixIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/equals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/equals.js deleted file mode 100644 index f50cbe4e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/equals.js +++ /dev/null @@ -1,36 +0,0 @@ -var hasOwn = require('./hasOwn'); -var every = require('./every'); -var isObject = require('../lang/isObject'); - - function defaultCompare(a, b) { - return a === b; - } - - // Makes a function to compare the object values from the specified compare - // operation callback. - function makeCompare(callback) { - return function(value, key) { - return hasOwn(this, key) && callback(value, this[key]); - }; - } - - function checkProperties(value, key) { - return hasOwn(this, key); - } - - /** - * Checks if two objects have the same keys and values. - */ - function equals(a, b, callback) { - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - return (every(a, makeCompare(callback), b) && - every(b, checkProperties, a)); - } - - module.exports = equals; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/every.js deleted file mode 100644 index 01106e5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/every.js +++ /dev/null @@ -1,23 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object every - */ - function every(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - forOwn(obj, function(val, key) { - // we consider any falsy values as "false" on purpose so shorthand - // syntax can be used to check property existence - if (!callback(val, key, obj)) { - result = false; - return false; // break - } - }); - return result; - } - - module.exports = every; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/fillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/fillIn.js deleted file mode 100644 index 80dcdf07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/fillIn.js +++ /dev/null @@ -1,20 +0,0 @@ -var forEach = require('../array/forEach'); -var forOwn = require('./forOwn'); - - /** - * Copy missing properties in the obj from the defaults. - */ - function fillIn(obj, var_defaults){ - forEach(Array.prototype.slice.call(arguments, 1), function(base){ - forOwn(base, function(val, key){ - if (obj[key] == null) { - obj[key] = val; - } - }); - }); - return obj; - } - - module.exports = fillIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/filter.js deleted file mode 100644 index 3a83a92f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/filter.js +++ /dev/null @@ -1,20 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Creates a new object with all the properties where the callback returns - * true. - */ - function filterValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - output[key] = value; - } - }); - - return output; - } - module.exports = filterValues; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/find.js deleted file mode 100644 index d39c0706..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/find.js +++ /dev/null @@ -1,21 +0,0 @@ -var some = require('./some'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Returns first item that matches criteria - */ - function find(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result; - some(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - result = value; - return true; //break - } - }); - return result; - } - - module.exports = find; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/forIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/forIn.js deleted file mode 100644 index 367f08ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/forIn.js +++ /dev/null @@ -1,62 +0,0 @@ - - - var _hasDontEnumBug, - _dontEnums; - - function checkDontEnum(){ - _dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - - _hasDontEnumBug = true; - - for (var key in {'toString': null}) { - _hasDontEnumBug = false; - } - } - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forIn(obj, fn, thisObj){ - var key, i = 0; - // no need to check if argument is a real object that way we can use - // it for arrays, functions, date, etc. - - //post-pone check till needed - if (_hasDontEnumBug == null) checkDontEnum(); - - for (key in obj) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - - if (_hasDontEnumBug) { - while (key = _dontEnums[i++]) { - // since we aren't using hasOwn check we need to make sure the - // property was overwritten - if (obj[key] !== Object.prototype[key]) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - } - } - } - - function exec(fn, obj, key, thisObj){ - return fn.call(thisObj, obj[key], key, obj); - } - - module.exports = forIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/forOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/forOwn.js deleted file mode 100644 index 5f2dfbfc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/forOwn.js +++ /dev/null @@ -1,19 +0,0 @@ -var hasOwn = require('./hasOwn'); -var forIn = require('./forIn'); - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forOwn(obj, fn, thisObj){ - forIn(obj, function(val, key){ - if (hasOwn(obj, key)) { - return fn.call(thisObj, obj[key], key, obj); - } - }); - } - - module.exports = forOwn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/functions.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/functions.js deleted file mode 100644 index f5717979..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/functions.js +++ /dev/null @@ -1,18 +0,0 @@ -var forIn = require('./forIn'); - - /** - * return a list of all enumerable properties that have function values - */ - function functions(obj){ - var keys = []; - forIn(obj, function(val, key){ - if (typeof val === 'function'){ - keys.push(key); - } - }); - return keys.sort(); - } - - module.exports = functions; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/get.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/get.js deleted file mode 100644 index 6673561e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/get.js +++ /dev/null @@ -1,20 +0,0 @@ - - - /** - * get "nested" object property - */ - function get(obj, prop){ - var parts = prop.split('.'), - last = parts.pop(); - - while (prop = parts.shift()) { - obj = obj[prop]; - if (typeof obj !== 'object') return; - } - - return obj[last]; - } - - module.exports = get; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/has.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/has.js deleted file mode 100644 index ca9f2289..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/has.js +++ /dev/null @@ -1,15 +0,0 @@ -var get = require('./get'); - - var UNDEF; - - /** - * Check if object has nested property. - */ - function has(obj, prop){ - return get(obj, prop) !== UNDEF; - } - - module.exports = has; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/hasOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/hasOwn.js deleted file mode 100644 index 7e3c82ae..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/hasOwn.js +++ /dev/null @@ -1,12 +0,0 @@ - - - /** - * Safer Object.hasOwnProperty - */ - function hasOwn(obj, prop){ - return Object.prototype.hasOwnProperty.call(obj, prop); - } - - module.exports = hasOwn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/keys.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/keys.js deleted file mode 100644 index dd2f4f55..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/keys.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object keys - */ - var keys = Object.keys || function (obj) { - var keys = []; - forOwn(obj, function(val, key){ - keys.push(key); - }); - return keys; - }; - - module.exports = keys; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/map.js deleted file mode 100644 index dd449a78..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/map.js +++ /dev/null @@ -1,18 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Creates a new object where all the values are the result of calling - * `callback`. - */ - function mapValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(val, key, obj) { - output[key] = callback(val, key, obj); - }); - - return output; - } - module.exports = mapValues; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/matches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/matches.js deleted file mode 100644 index 6074faa2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/matches.js +++ /dev/null @@ -1,20 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * checks if a object contains all given properties/values - */ - function matches(target, props){ - // can't use "object/every" because of circular dependency - var result = true; - forOwn(props, function(val, key){ - if (target[key] !== val) { - // break loop at first difference - return (result = false); - } - }); - return result; - } - - module.exports = matches; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/max.js deleted file mode 100644 index 3e8e92c7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/max.js +++ /dev/null @@ -1,12 +0,0 @@ -var arrMax = require('../array/max'); -var values = require('./values'); - - /** - * Returns maximum value inside object. - */ - function max(obj, compareFn) { - return arrMax(values(obj), compareFn); - } - - module.exports = max; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/merge.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/merge.js deleted file mode 100644 index 6961f608..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/merge.js +++ /dev/null @@ -1,40 +0,0 @@ -var hasOwn = require('./hasOwn'); -var deepClone = require('../lang/deepClone'); -var isObject = require('../lang/isObject'); - - /** - * Deep merge objects. - */ - function merge() { - var i = 1, - key, val, obj, target; - - // make sure we don't modify source element and it's properties - // objects are passed by reference - target = deepClone( arguments[0] ); - - while (obj = arguments[i++]) { - for (key in obj) { - if ( ! hasOwn(obj, key) ) { - continue; - } - - val = obj[key]; - - if ( isObject(val) && isObject(target[key]) ){ - // inception, deep merge objects - target[key] = merge(target[key], val); - } else { - // make sure arrays, regexp, date, objects are cloned - target[key] = deepClone(val); - } - - } - } - - return target; - } - - module.exports = merge; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/min.js deleted file mode 100644 index e1e66976..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/min.js +++ /dev/null @@ -1,12 +0,0 @@ -var arrMin = require('../array/min'); -var values = require('./values'); - - /** - * Returns minimum value inside object. - */ - function min(obj, iterator) { - return arrMin(values(obj), iterator); - } - - module.exports = min; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/mixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/mixIn.js deleted file mode 100644 index 55ec8fd5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/mixIn.js +++ /dev/null @@ -1,28 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Combine properties from all the objects into first one. - * - This method affects target object in place, if you want to create a new Object pass an empty object as first param. - * @param {object} target Target Object - * @param {...object} objects Objects to be combined (0...n objects). - * @return {object} Target Object. - */ - function mixIn(target, objects){ - var i = 0, - n = arguments.length, - obj; - while(++i < n){ - obj = arguments[i]; - if (obj != null) { - forOwn(obj, copyProp, target); - } - } - return target; - } - - function copyProp(val, key){ - this[key] = val; - } - - module.exports = mixIn; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/namespace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/namespace.js deleted file mode 100644 index c6e79f63..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/namespace.js +++ /dev/null @@ -1,19 +0,0 @@ -var forEach = require('../array/forEach'); - - /** - * Create nested object if non-existent - */ - function namespace(obj, path){ - if (!path) return obj; - forEach(path.split('.'), function(key){ - if (!obj[key]) { - obj[key] = {}; - } - obj = obj[key]; - }); - return obj; - } - - module.exports = namespace; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/pick.js deleted file mode 100644 index 74e56f98..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/pick.js +++ /dev/null @@ -1,18 +0,0 @@ - - - /** - * Return a copy of the object, filtered to only have values for the whitelisted keys. - */ - function pick(obj, var_keys){ - var keys = typeof arguments[1] !== 'string'? arguments[1] : Array.prototype.slice.call(arguments, 1), - out = {}, - i = 0, key; - while (key = keys[i++]) { - out[key] = obj[key]; - } - return out; - } - - module.exports = pick; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/pluck.js deleted file mode 100644 index e844df47..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/pluck.js +++ /dev/null @@ -1,13 +0,0 @@ -var map = require('./map'); -var prop = require('../function/prop'); - - /** - * Extract a list of property values. - */ - function pluck(obj, propName){ - return map(obj, prop(propName)); - } - - module.exports = pluck; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/reduce.js deleted file mode 100644 index 6f19a3a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/reduce.js +++ /dev/null @@ -1,29 +0,0 @@ -var forOwn = require('./forOwn'); -var size = require('./size'); - - /** - * Object reduce - */ - function reduce(obj, callback, memo, thisObj) { - var initial = arguments.length > 2; - - if (!size(obj) && !initial) { - throw new Error('reduce of empty object with no initial value'); - } - - forOwn(obj, function(value, key, list) { - if (!initial) { - memo = value; - initial = true; - } - else { - memo = callback.call(thisObj, memo, value, key, list); - } - }); - - return memo; - } - - module.exports = reduce; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/reject.js deleted file mode 100644 index 74643795..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/reject.js +++ /dev/null @@ -1,16 +0,0 @@ -var filter = require('./filter'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object reject - */ - function reject(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - return filter(obj, function(value, index, obj) { - return !callback(value, index, obj); - }, thisObj); - } - - module.exports = reject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/set.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/set.js deleted file mode 100644 index 9b3cdc48..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/set.js +++ /dev/null @@ -1,17 +0,0 @@ -var namespace = require('./namespace'); - - /** - * set "nested" object property - */ - function set(obj, prop, val){ - var parts = (/^(.+)\.(.+)$/).exec(prop); - if (parts){ - namespace(obj, parts[1])[parts[2]] = val; - } else { - obj[prop] = val; - } - } - - module.exports = set; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/size.js deleted file mode 100644 index 97885953..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/size.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object size - */ - function size(obj) { - var count = 0; - forOwn(obj, function(){ - count++; - }); - return count; - } - - module.exports = size; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/some.js deleted file mode 100644 index 384c6f3c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/some.js +++ /dev/null @@ -1,21 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object some - */ - function some(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - forOwn(obj, function(val, key) { - if (callback(val, key, obj)) { - result = true; - return false; // break - } - }); - return result; - } - - module.exports = some; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/unset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/unset.js deleted file mode 100644 index 343bca0a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/unset.js +++ /dev/null @@ -1,23 +0,0 @@ -var has = require('./has'); - - /** - * Unset object property. - */ - function unset(obj, prop){ - if (has(obj, prop)) { - var parts = prop.split('.'), - last = parts.pop(); - while (prop = parts.shift()) { - obj = obj[prop]; - } - return (delete obj[last]); - - } else { - // if property doesn't exist treat as deleted - return true; - } - } - - module.exports = unset; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/values.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/values.js deleted file mode 100644 index 265a6938..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/object/values.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object values - */ - function values(obj) { - var vals = []; - forOwn(obj, function(val, key){ - vals.push(val); - }); - return vals; - } - - module.exports = values; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/package.json deleted file mode 100644 index 76eadf21..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/package.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "name": "mout", - "description": "Modular Utilities", - "version": "0.6.0", - "homepage": "http://moutjs.com/", - "contributors": [ - { - "name": "Adam Nowotny" - }, - { - "name": "André Cruz", - "email": "amdfcruz@gmail.com" - }, - { - "name": "Conrad Zimmerman", - "url": "http://www.conradz.com" - }, - { - "name": "Friedemann Altrock", - "email": "frodenius@gmail.com" - }, - { - "name": "Jarrod Overson", - "url": "http://jarrodoverson.com" - }, - { - "name": "Miller Medeiros", - "email": "contact@millermedeiros.com", - "url": "http://blog.millermedeiros.com" - }, - { - "name": "Zach Shipley" - } - ], - "keywords": [ - "utilities", - "functional", - "amd-utils", - "stdlib" - ], - "repository": { - "type": "git", - "url": "git://github.com/mout/mout.git" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://www.opensource.org/licenses/mit-license.php" - } - ], - "bugs": { - "url": "https://github.com/mout/mout/issues/" - }, - "main": "./index.js", - "scripts": { - "prepublish": "node build cjs .", - "pretest": "node build pkg", - "test": "node node_modules/istanbul/lib/cli test tests/runner.js --hook-run-in-context" - }, - "directories": { - "doc": "./doc" - }, - "devDependencies": { - "istanbul": "~0.1.27", - "jasmine-node": "~1.2.2", - "requirejs": "2.x", - "nodefy": "*", - "mdoc": "~0.3.2", - "handlebars": "~1.0.6", - "commander": "~1.0.5", - "rocambole": "~0.2.3" - }, - "testling": { - "preprocess": "node build testling", - "browsers": { - "ie": [ - 7, - 8, - 9, - 10 - ], - "firefox": [ - 17, - "nightly" - ], - "chrome": [ - 23, - "canary" - ], - "opera": [ - 12, - "next" - ], - "safari": [ - 5.1, - 6 - ], - "iphone": [ - 6 - ], - "ipad": [ - 6 - ] - }, - "scripts": [ - "tests/lib/jasmine/jasmine.js", - "tests/lib/jasmine/jasmine.async.js", - "tests/lib/jasmine/jasmine-tap.js", - "tests/lib/requirejs/require.js", - "tests/testling/src.js", - "tests/testling/specs.js", - "tests/runner.js" - ] - }, - "readme": "![mout](http://moutjs.com/logo.png \"Modular JavaScript Utilties\")\n\nhttp://moutjs.com/\n\n[![Build Status](https://travis-ci.org/mout/mout.png?branch=master)](https://travis-ci.org/mout/mout)\n\nAll code is library agnostic and consist mostly of helper methods that aren't\ndirectly related with the DOM, the purpose of this library isn't to replace\nDojo, jQuery, YUI, Mootools, etc, but to provide modular solutions for common\nproblems that aren't solved by most of them. Consider it as a crossbrowser\nJavaScript standard library.\n\n\n\n## Main goals ##\n\n - increase code reuse;\n - be clear (code should be clean/readable);\n - be easy to debug;\n - be easy to maintain;\n - follow best practices;\n - follow standards when possible;\n - **don't convert JavaScript into another language!**\n - be compatible with other frameworks;\n - be modular;\n - have unit tests for all modules;\n - work on multiple environments (IE7+, modern browsers, node.js);\n\n\n\n## What shouldn't be here ##\n\n - UI components;\n - CSS selector engine;\n - Event system - pub/sub;\n - Template engine;\n - Anything that isn't generic enough to be on a standard library;\n - Anything that could be a separate library and/or isn't a modular utility...\n\n\n\n## API Documentation ##\n\nOnline documentation can be found at http://moutjs.com/ or inside the\n`doc` folder.\n\n\n\n## FAQ / Wiki / IRC ##\n\nFor more info about project structure, design decisions, tips, how to\ncontribute, build system, etc, please check the [project\nwiki](https://github.com/mout/mout/wiki).\n\nWe also have an IRC channel [#moutjs on\nirc.freenode.net](http://webchat.freenode.net/?channels=moutjs)\n\n\n\n## License ##\n\nReleased under the [MIT License](http://www.opensource.org/licenses/mit-license.php).\n\n", - "readmeFilename": "README.md", - "_id": "mout@0.6.0", - "dist": { - "shasum": "d2f7a6e5a796040bf7b6259a41b46705f49d271d" - }, - "_from": "mout@~0.6.0", - "_resolved": "https://registry.npmjs.org/mout/-/mout-0.6.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString.js deleted file mode 100644 index 22685a7f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString.js +++ /dev/null @@ -1,15 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'contains' : require('./queryString/contains'), - 'decode' : require('./queryString/decode'), - 'encode' : require('./queryString/encode'), - 'getParam' : require('./queryString/getParam'), - 'getQuery' : require('./queryString/getQuery'), - 'parse' : require('./queryString/parse'), - 'setParam' : require('./queryString/setParam') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/contains.js deleted file mode 100644 index da678cf4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/contains.js +++ /dev/null @@ -1,12 +0,0 @@ -var getQuery = require('./getQuery'); - - /** - * Checks if query string contains parameter. - */ - function contains(url, paramName) { - var regex = new RegExp('(\\?|&)'+ paramName +'=', 'g'); //matches `?param=` or `¶m=` - return regex.test(getQuery(url)); - } - - module.exports = contains; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/decode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/decode.js deleted file mode 100644 index 7e689990..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/decode.js +++ /dev/null @@ -1,21 +0,0 @@ -var typecast = require('../string/typecast'); -var isString = require('../lang/isString'); - - /** - * Decode query string into an object of keys => vals. - */ - function decode(queryStr, shouldTypecast) { - var queryArr = (queryStr || '').replace('?', '').split('&'), - n = queryArr.length, - obj = {}, - item, val; - while (n--) { - item = queryArr[n].split('='); - val = shouldTypecast === false? item[1] : typecast(item[1]); - obj[item[0]] = isString(val)? decodeURIComponent(val) : val; - } - return obj; - } - - module.exports = decode; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/encode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/encode.js deleted file mode 100644 index 6d2b12f8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/encode.js +++ /dev/null @@ -1,15 +0,0 @@ -var forOwn = require('../object/forOwn'); - - /** - * Encode object into a query string. - */ - function encode(obj){ - var query = []; - forOwn(obj, function(val, key){ - query.push( key +'='+ encodeURIComponent(val) ); - }); - return (query.length)? '?'+ query.join('&') : ''; - } - - module.exports = encode; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/getParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/getParam.js deleted file mode 100644 index f149c3ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/getParam.js +++ /dev/null @@ -1,15 +0,0 @@ -var typecast = require('../string/typecast'); -var getQuery = require('./getQuery'); - - /** - * Get query parameter value. - */ - function getParam(url, param, shouldTypecast){ - var regexp = new RegExp('(\\?|&)'+ param + '=([^&]*)'), //matches `?param=value` or `¶m=value`, value = $2 - result = regexp.exec( getQuery(url) ), - val = (result && result[2])? result[2] : null; - return shouldTypecast === false? val : typecast(val); - } - - module.exports = getParam; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/getQuery.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/getQuery.js deleted file mode 100644 index 5194af2d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/getQuery.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * Gets full query as string with all special chars decoded. - */ - function getQuery(url) { - url = url.replace(/#.*/, ''); //removes hash (to avoid getting hash query) - var queryString = /\?[a-zA-Z0-9\=\&\%\$\-\_\.\+\!\*\'\(\)\,]+/.exec(url); //valid chars according to: http://www.ietf.org/rfc/rfc1738.txt - return (queryString)? decodeURIComponent(queryString[0]) : ''; - } - - module.exports = getQuery; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/parse.js deleted file mode 100644 index 532906c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/parse.js +++ /dev/null @@ -1,13 +0,0 @@ -var decode = require('./decode'); -var getQuery = require('./getQuery'); - - /** - * Get query string, parses and decodes it. - */ - function parse(url, shouldTypecast) { - return decode(getQuery(url), shouldTypecast); - } - - module.exports = parse; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/setParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/setParam.js deleted file mode 100644 index 052a9ba6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/queryString/setParam.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Set query string parameter value - */ - function setParam(url, paramName, value){ - url = url || ''; - - var re = new RegExp('(\\?|&)'+ paramName +'=[^&]*' ); - var param = paramName +'='+ encodeURIComponent( value ); - - if ( re.test(url) ) { - return url.replace(re, '$1'+ param); - } else { - if (url.indexOf('?') === -1) { - url += '?'; - } - if (url.indexOf('=') !== -1) { - url += '&'; - } - return url + param; - } - - } - - module.exports = setParam; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random.js deleted file mode 100644 index d9267f01..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random.js +++ /dev/null @@ -1,16 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'choice' : require('./random/choice'), - 'guid' : require('./random/guid'), - 'rand' : require('./random/rand'), - 'randBit' : require('./random/randBit'), - 'randHex' : require('./random/randHex'), - 'randInt' : require('./random/randInt'), - 'randSign' : require('./random/randSign'), - 'random' : require('./random/random') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/choice.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/choice.js deleted file mode 100644 index 51aa82a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/choice.js +++ /dev/null @@ -1,15 +0,0 @@ -var randInt = require('./randInt'); -var isArray = require('../lang/isArray'); - - /** - * Returns a random element from the supplied arguments - * or from the array (if single argument is an array). - */ - function choice(items) { - var target = (arguments.length === 1 && isArray(items))? items : arguments; - return target[ randInt(0, target.length - 1) ]; - } - - module.exports = choice; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/guid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/guid.js deleted file mode 100644 index 41f6eddc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/guid.js +++ /dev/null @@ -1,24 +0,0 @@ -var randHex = require('./randHex'); -var choice = require('./choice'); - - /** - * Returns pseudo-random guid (UUID v4) - * IMPORTANT: it's not totally "safe" since randHex/choice uses Math.random - * by default and sequences can be predicted in some cases. See the - * "random/random" documentation for more info about it and how to replace - * the default PRNG. - */ - function guid() { - return ( - randHex(8)+'-'+ - randHex(4)+'-'+ - // v4 UUID always contain "4" at this position to specify it was - // randomly generated - '4' + randHex(3) +'-'+ - // v4 UUID always contain chars [a,b,8,9] at this position - choice(8, 9, 'a', 'b') + randHex(3)+'-'+ - randHex(12) - ); - } - module.exports = guid; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/rand.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/rand.js deleted file mode 100644 index 782dec88..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/rand.js +++ /dev/null @@ -1,15 +0,0 @@ -var random = require('./random'); -var MIN_INT = require('../number/MIN_INT'); -var MAX_INT = require('../number/MAX_INT'); - - /** - * Returns random number inside range - */ - function rand(min, max){ - min = min == null? MIN_INT : min; - max = max == null? MAX_INT : max; - return min + (max - min) * random(); - } - - module.exports = rand; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randBit.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randBit.js deleted file mode 100644 index bd20b4a0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randBit.js +++ /dev/null @@ -1,11 +0,0 @@ -var random = require('./random'); - - /** - * Returns random bit (0 or 1) - */ - function randomBit() { - return random() > 0.5? 1 : 0; - } - - module.exports = randomBit; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randHex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randHex.js deleted file mode 100644 index d8d711c3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randHex.js +++ /dev/null @@ -1,19 +0,0 @@ -var choice = require('./choice'); - - var _chars = '0123456789abcdef'.split(''); - - /** - * Returns a random hexadecimal string - */ - function randHex(size){ - size = size && size > 0? size : 6; - var str = ''; - while (size--) { - str += choice(_chars); - } - return str; - } - - module.exports = randHex; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randInt.js deleted file mode 100644 index e237d964..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randInt.js +++ /dev/null @@ -1,18 +0,0 @@ -var MIN_INT = require('../number/MIN_INT'); -var MAX_INT = require('../number/MAX_INT'); -var rand = require('./rand'); - - /** - * Gets random integer inside range or snap to min/max values. - */ - function randInt(min, max){ - min = min == null? MIN_INT : ~~min; - max = max == null? MAX_INT : ~~max; - // can't be max + 0.5 otherwise it will round up if `rand` - // returns `max` causing it to overflow range. - // -0.5 and + 0.49 are required to avoid bias caused by rounding - return Math.round( rand(min - 0.5, max + 0.499999999999) ); - } - - module.exports = randInt; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randSign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randSign.js deleted file mode 100644 index 5a9fed76..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/randSign.js +++ /dev/null @@ -1,11 +0,0 @@ -var random = require('./random'); - - /** - * Returns random sign (-1 or 1) - */ - function randomSign() { - return random() > 0.5? 1 : -1; - } - - module.exports = randomSign; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/random.js deleted file mode 100644 index 670a3cc4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/random/random.js +++ /dev/null @@ -1,18 +0,0 @@ - - - /** - * Just a wrapper to Math.random. No methods inside mout/random should call - * Math.random() directly so we can inject the pseudo-random number - * generator if needed (ie. in case we need a seeded random or a better - * algorithm than the native one) - */ - function random(){ - return random.get(); - } - - // we expose the method so it can be swapped if needed - random.get = Math.random; - - module.exports = random; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array.js deleted file mode 100644 index 7bcc961b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array.js +++ /dev/null @@ -1,46 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'append' : require('./array/append'), - 'collect' : require('./array/collect'), - 'combine' : require('./array/combine'), - 'compact' : require('./array/compact'), - 'contains' : require('./array/contains'), - 'difference' : require('./array/difference'), - 'every' : require('./array/every'), - 'filter' : require('./array/filter'), - 'find' : require('./array/find'), - 'findIndex' : require('./array/findIndex'), - 'flatten' : require('./array/flatten'), - 'forEach' : require('./array/forEach'), - 'indexOf' : require('./array/indexOf'), - 'insert' : require('./array/insert'), - 'intersection' : require('./array/intersection'), - 'invoke' : require('./array/invoke'), - 'join' : require('./array/join'), - 'lastIndexOf' : require('./array/lastIndexOf'), - 'map' : require('./array/map'), - 'max' : require('./array/max'), - 'min' : require('./array/min'), - 'pick' : require('./array/pick'), - 'pluck' : require('./array/pluck'), - 'range' : require('./array/range'), - 'reduce' : require('./array/reduce'), - 'reduceRight' : require('./array/reduceRight'), - 'reject' : require('./array/reject'), - 'remove' : require('./array/remove'), - 'removeAll' : require('./array/removeAll'), - 'shuffle' : require('./array/shuffle'), - 'some' : require('./array/some'), - 'sort' : require('./array/sort'), - 'split' : require('./array/split'), - 'toLookup' : require('./array/toLookup'), - 'union' : require('./array/union'), - 'unique' : require('./array/unique'), - 'xor' : require('./array/xor'), - 'zip' : require('./array/zip') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/append.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/append.js deleted file mode 100644 index 549d8754..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/append.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function () { - - /** - * Appends an array to the end of another. - * The first array will be modified. - */ - function append(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var pad = arr1.length, - i = -1, - len = arr2.length; - while (++i < len) { - arr1[pad + i] = arr2[i]; - } - return arr1; - } - return append; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/collect.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/collect.js deleted file mode 100644 index 8f60cda2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/collect.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['./append', '../function/makeIterator_'], function (append, makeIterator) { - - /** - * Maps the items in the array and concatenates the result arrays. - */ - function collect(arr, callback, thisObj){ - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - var value = callback(arr[i], i, arr); - if (value != null) { - append(results, value); - } - } - - return results; - } - - return collect; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/combine.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/combine.js deleted file mode 100644 index 22efb860..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/combine.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./indexOf'], function (indexOf) { - - /** - * Combines an array with all the items of another. - * Does not allow duplicates and is case and type sensitive. - */ - function combine(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var i = -1, len = arr2.length; - while (++i < len) { - if (indexOf(arr1, arr2[i]) === -1) { - arr1.push(arr2[i]); - } - } - - return arr1; - } - return combine; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/compact.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/compact.js deleted file mode 100644 index 02a81098..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/compact.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./filter'], function (filter) { - - /** - * Remove all null/undefined items from array. - */ - function compact(arr) { - return filter(arr, function(val){ - return (val != null); - }); - } - - return compact; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/contains.js deleted file mode 100644 index fca4f7cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/contains.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['./indexOf'], function (indexOf) { - - /** - * If array contains values. - */ - function contains(arr, val) { - return indexOf(arr, val) !== -1; - } - return contains; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/difference.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/difference.js deleted file mode 100644 index 819bda3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/difference.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./unique', './filter', './some', './contains'], function (unique, filter, some, contains) { - - - /** - * Return a new Array with elements that aren't present in the other Arrays. - */ - function difference(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return !some(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - return difference; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/every.js deleted file mode 100644 index 78ba46d3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/every.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array every - */ - function every(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (!callback(arr[i], i, arr) ) { - result = false; - break; - } - } - - return result; - } - - return every; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/filter.js deleted file mode 100644 index 52cf685a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/filter.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * Array filter - */ - function filter(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - return filter; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/find.js deleted file mode 100644 index 3957dcd5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/find.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./findIndex'], function (findIndex) { - - /** - * Returns first item that matches criteria - */ - function find(arr, iterator, thisObj){ - var idx = findIndex(arr, iterator, thisObj); - return idx >= 0? arr[idx] : void(0); - } - - return find; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/findIndex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/findIndex.js deleted file mode 100644 index 59dfeeb9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/findIndex.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Returns the index of the first item that matches criteria - */ - function findIndex(arr, iterator, thisObj){ - iterator = makeIterator(iterator, thisObj); - if (arr == null) { - return -1; - } - - var i = -1, len = arr.length; - while (++i < len) { - if (iterator(arr[i], i, arr)) { - return i; - } - } - - return -1; - } - - return findIndex; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/flatten.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/flatten.js deleted file mode 100644 index 42e87f43..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/flatten.js +++ /dev/null @@ -1,42 +0,0 @@ -define(['../lang/isArray', './append'], function (isArray, append) { - - /* - * Helper function to flatten to a destination array. - * Used to remove the need to create intermediate arrays while flattening. - */ - function flattenTo(arr, result, level) { - if (arr == null) { - return result; - } else if (level === 0) { - append(result, arr); - return result; - } - - var value, - i = -1, - len = arr.length; - while (++i < len) { - value = arr[i]; - if (isArray(value)) { - flattenTo(value, result, level - 1); - } else { - result.push(value); - } - } - return result; - } - - /** - * Recursively flattens an array. - * A new array containing all the elements is returned. - * If `shallow` is true, it will only flatten one level. - */ - function flatten(arr, level) { - level = level == null? -1 : level; - return flattenTo(arr, [], level); - } - - return flatten; - -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/forEach.js deleted file mode 100644 index 0e045868..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/forEach.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Array forEach - */ - function forEach(arr, callback, thisObj) { - if (arr == null) { - return; - } - var i = -1, - len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback.call(thisObj, arr[i], i, arr) === false ) { - break; - } - } - } - - return forEach; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/indexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/indexOf.js deleted file mode 100644 index 0e75f99b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/indexOf.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Array.indexOf - */ - function indexOf(arr, item, fromIndex) { - fromIndex = fromIndex || 0; - if (arr == null) { - return -1; - } - - var len = arr.length, - i = fromIndex < 0 ? len + fromIndex : fromIndex; - while (i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[i] === item) { - return i; - } - - i++; - } - - return -1; - } - - return indexOf; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/insert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/insert.js deleted file mode 100644 index d8d831f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/insert.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./difference', '../lang/toArray'], function (difference, toArray) { - - /** - * Insert item into array if not already present. - */ - function insert(arr, rest_items) { - var diff = difference(toArray(arguments).slice(1), arr); - if (diff.length) { - Array.prototype.push.apply(arr, diff); - } - return arr.length; - } - return insert; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/intersection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/intersection.js deleted file mode 100644 index 64e6ee97..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/intersection.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./unique', './filter', './every', './contains'], function (unique, filter, every, contains) { - - - /** - * Return a new Array with elements common to all Arrays. - * - based on underscore.js implementation - */ - function intersection(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return every(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - return intersection; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/invoke.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/invoke.js deleted file mode 100644 index a2e78b39..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/invoke.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./forEach'], function (forEach) { - - /** - * Call `methodName` on each item of the array passing custom arguments if - * needed. - */ - function invoke(arr, methodName, var_args){ - if (arr == null) { - return arr; - } - - var args = Array.prototype.slice.call(arguments, 2); - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - value[methodName].apply(value, args); - } - - return arr; - } - - return invoke; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/join.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/join.js deleted file mode 100644 index 2c618d29..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/join.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./filter'], function(filter) { - - function isValidString(val) { - return (val != null && val !== ''); - } - - /** - * Joins strings with the specified separator inserted between each value. - * Null values and empty strings will be excluded. - */ - function join(items, separator) { - separator = separator || ''; - return filter(items, isValidString).join(separator); - } - - return join; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/lastIndexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/lastIndexOf.js deleted file mode 100644 index 931235f4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/lastIndexOf.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Array lastIndexOf - */ - function lastIndexOf(arr, item, fromIndex) { - if (arr == null) { - return -1; - } - - var len = arr.length; - fromIndex = (fromIndex == null || fromIndex >= len)? len - 1 : fromIndex; - fromIndex = (fromIndex < 0)? len + fromIndex : fromIndex; - - while (fromIndex >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[fromIndex] === item) { - return fromIndex; - } - fromIndex--; - } - - return -1; - } - - return lastIndexOf; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/map.js deleted file mode 100644 index 1580b481..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/map.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * Array map - */ - function map(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null){ - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - results[i] = callback(arr[i], i, arr); - } - - return results; - } - - return map; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/max.js deleted file mode 100644 index a7326c89..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/max.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * Return maximum value inside array - */ - function max(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return Infinity; - } else if (arr.length && !iterator) { - return Math.max.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = -Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp > compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - return max; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/min.js deleted file mode 100644 index 41644480..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/min.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * Return minimum value inside array - */ - function min(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return -Infinity; - } else if (arr.length && !iterator) { - return Math.min.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp < compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - return min; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/pick.js deleted file mode 100644 index 97d7f595..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/pick.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../random/randInt'], function (randInt) { - - /** - * Remove a random item from the Array and return it - */ - function pick(arr){ - if (arr == null || !arr.length) return; - var idx = randInt(0, arr.length - 1); - return arr.splice(idx, 1)[0]; - } - - return pick; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/pluck.js deleted file mode 100644 index c908856e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./map'], function (map) { - - /** - * Extract a list of property values. - */ - function pluck(arr, propName){ - return map(arr, propName); - } - - return pluck; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/range.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/range.js deleted file mode 100644 index 148ebf96..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/range.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../math/countSteps'], function (countSteps) { - - /** - * Returns an Array of numbers inside range. - */ - function range(start, stop, step) { - if (stop == null) { - stop = start; - start = 0; - } - step = step || 1; - - var result = [], - nSteps = countSteps(stop - start, step), - i = start; - - while (i <= stop) { - result.push(i); - i += step; - } - - return result; - } - - return range; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/reduce.js deleted file mode 100644 index 88aacfd5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/reduce.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['./forEach'], function (forEach) { - - /** - * Array reduce - */ - function reduce(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2, - result = initVal; - - if (arr == null || !arr.length) { - if (!hasInit) { - throw new Error('reduce of empty array with no initial value'); - } else { - return initVal; - } - } - - var i = -1, len = arr.length; - while (++i < len) { - if (!hasInit) { - result = arr[i]; - hasInit = true; - } else { - result = fn(result, arr[i], i, arr); - } - } - - return result; - } - - return reduce; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/reduceRight.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/reduceRight.js deleted file mode 100644 index ddae0e7f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/reduceRight.js +++ /dev/null @@ -1,34 +0,0 @@ -define(function () { - - /** - * Array reduceRight - */ - function reduceRight(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2; - - if (arr == null || !arr.length) { - if (hasInit) { - return initVal; - } else { - throw new Error('reduce of empty array with no initial value'); - } - } - - var i = arr.length, result = initVal, value; - while (--i >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - value = arr[i]; - if (!hasInit) { - result = value; - hasInit = true; - } else { - result = fn(result, value, i, arr); - } - } - return result; - } - - return reduceRight; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/reject.js deleted file mode 100644 index db105dde..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/reject.js +++ /dev/null @@ -1,25 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function(forEach, makeIterator) { - - /** - * Array reject - */ - function reject(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (!callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - return reject; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/remove.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/remove.js deleted file mode 100644 index dec9134d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/remove.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./indexOf'], function(indexOf){ - - /** - * Remove a single item from the array. - * (it won't remove duplicates, just a single item) - */ - function remove(arr, item){ - var idx = indexOf(arr, item); - if (idx !== -1) arr.splice(idx, 1); - } - - return remove; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/removeAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/removeAll.js deleted file mode 100644 index e81022b8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/removeAll.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./indexOf'], function(indexOf){ - - /** - * Remove all instances of an item from array. - */ - function removeAll(arr, item){ - var idx = indexOf(arr, item); - while (idx !== -1) { - arr.splice(idx, 1); - idx = indexOf(arr, item, idx); - } - } - - return removeAll; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/shuffle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/shuffle.js deleted file mode 100644 index f5a60972..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/shuffle.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['../random/randInt', './forEach'], function (randInt, forEach) { - - /** - * Shuffle array items. - */ - function shuffle(arr) { - var results = [], - rnd; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - if (!i) { - results[0] = arr[0]; - } else { - rnd = randInt(0, i); - results[i] = results[rnd]; - results[rnd] = arr[i]; - } - } - - return results; - } - - return shuffle; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/some.js deleted file mode 100644 index e46a9781..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/some.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array some - */ - function some(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback(arr[i], i, arr) ) { - result = true; - break; - } - } - - return result; - } - - return some; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/sort.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/sort.js deleted file mode 100644 index 4c194042..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/sort.js +++ /dev/null @@ -1,55 +0,0 @@ -define(function () { - - /** - * Merge sort (http://en.wikipedia.org/wiki/Merge_sort) - */ - function mergeSort(arr, compareFn) { - if (arr == null) { - return []; - } else if (arr.length < 2) { - return arr; - } - - if (compareFn == null) { - compareFn = defaultCompare; - } - - var mid, left, right; - - mid = ~~(arr.length / 2); - left = mergeSort( arr.slice(0, mid), compareFn ); - right = mergeSort( arr.slice(mid, arr.length), compareFn ); - - return merge(left, right, compareFn); - } - - function defaultCompare(a, b) { - return a < b ? -1 : (a > b? 1 : 0); - } - - function merge(left, right, compareFn) { - var result = []; - - while (left.length && right.length) { - if (compareFn(left[0], right[0]) <= 0) { - // if 0 it should preserve same order (stable) - result.push(left.shift()); - } else { - result.push(right.shift()); - } - } - - if (left.length) { - result.push.apply(result, left); - } - - if (right.length) { - result.push.apply(result, right); - } - - return result; - } - - return mergeSort; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/split.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/split.js deleted file mode 100644 index a17275eb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/split.js +++ /dev/null @@ -1,35 +0,0 @@ -define(function() { - - /** - * Split array into a fixed number of segments. - */ - function split(array, segments) { - segments = segments || 2; - var results = []; - if (array == null) { - return results; - } - - var minLength = Math.floor(array.length / segments), - remainder = array.length % segments, - i = 0, - len = array.length, - segmentIndex = 0, - segmentLength; - - while (i < len) { - segmentLength = minLength; - if (segmentIndex < remainder) { - segmentLength++; - } - - results.push(array.slice(i, i + segmentLength)); - - segmentIndex++; - i += segmentLength; - } - - return results; - } - return split; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/toLookup.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/toLookup.js deleted file mode 100644 index aac8fd1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/toLookup.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['../lang/isFunction'], function (isFunction) { - - /** - * Creates an object that holds a lookup for the objects in the array. - */ - function toLookup(arr, key) { - var result = {}; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length, value; - if (isFunction(key)) { - while (++i < len) { - value = arr[i]; - result[key(value)] = value; - } - } else { - while (++i < len) { - value = arr[i]; - result[value[key]] = value; - } - } - - return result; - } - return toLookup; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/union.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/union.js deleted file mode 100644 index 5f9922e5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/union.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./unique', './append'], function (unique, append) { - - /** - * Concat multiple arrays and remove duplicates - */ - function union(arrs) { - var results = []; - var i = -1, len = arguments.length; - while (++i < len) { - append(results, arguments[i]); - } - - return unique(results); - } - - return union; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/unique.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/unique.js deleted file mode 100644 index c4bd23b4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/unique.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./indexOf', './filter'], function(indexOf, filter){ - - /** - * @return {array} Array of unique items - */ - function unique(arr){ - return filter(arr, isUnique); - } - - function isUnique(item, i, arr){ - return indexOf(arr, item, i+1) === -1; - } - - return unique; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/xor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/xor.js deleted file mode 100644 index 7df89d9c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/xor.js +++ /dev/null @@ -1,24 +0,0 @@ -define(['./unique', './filter', './contains'], function (unique, filter, contains) { - - - /** - * Exclusive OR. Returns items that are present in a single array. - * - like ptyhon's `symmetric_difference` - */ - function xor(arr1, arr2) { - arr1 = unique(arr1); - arr2 = unique(arr2); - - var a1 = filter(arr1, function(item){ - return !contains(arr2, item); - }), - a2 = filter(arr2, function(item){ - return !contains(arr1, item); - }); - - return a1.concat(a2); - } - - return xor; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/zip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/zip.js deleted file mode 100644 index 374cd282..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/array/zip.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['./max', './pluck', './map'], function (max, pluck, map) { - - function getLength(arr) { - return arr == null ? 0 : arr.length; - } - - /** - * Merges together the values of each of the arrays with the values at the - * corresponding position. - */ - function zip(arr){ - var len = arr ? max(map(arguments, getLength)) : 0, - results = [], - i = -1, - item; - while (++i < len) { - results.push(map(arguments, function(item) { - return item == null ? undefined : item[i]; - })); - } - - return results; - } - - return zip; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection.js deleted file mode 100644 index 386e6da9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection.js +++ /dev/null @@ -1,22 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'contains' : require('./collection/contains'), - 'every' : require('./collection/every'), - 'filter' : require('./collection/filter'), - 'find' : require('./collection/find'), - 'forEach' : require('./collection/forEach'), - 'make_' : require('./collection/make_'), - 'map' : require('./collection/map'), - 'max' : require('./collection/max'), - 'min' : require('./collection/min'), - 'pluck' : require('./collection/pluck'), - 'reduce' : require('./collection/reduce'), - 'reject' : require('./collection/reject'), - 'size' : require('./collection/size'), - 'some' : require('./collection/some') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/contains.js deleted file mode 100644 index 192167e8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/contains.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/contains', '../object/contains'], function (make, arrContains, objContains) { - - /** - */ - return make(arrContains, objContains); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/every.js deleted file mode 100644 index 6317f503..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/every.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/every', '../object/every'], function (make, arrEvery, objEvery) { - - /** - */ - return make(arrEvery, objEvery); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/filter.js deleted file mode 100644 index 4e7fadc8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/filter.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * filter collection values, returns array. - */ - function filter(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - var results = []; - if (!list) { - return results; - } - forEach(list, function(value, index, list) { - if (iterator(value, index, list)) { - results[results.length] = value; - } - }); - return results; - } - - return filter; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/find.js deleted file mode 100644 index 681f9414..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/find.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/find', '../object/find'], function(make, arrFind, objFind) { - - /** - * Find value that returns true on iterator check. - */ - return make(arrFind, objFind); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/forEach.js deleted file mode 100644 index 3b39d3ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/forEach.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/forEach', '../object/forOwn'], function (make, arrForEach, objForEach) { - - /** - */ - return make(arrForEach, objForEach); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/make_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/make_.js deleted file mode 100644 index 312e0564..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/make_.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function(){ - - /** - * internal method used to create other collection modules. - */ - function makeCollectionMethod(arrMethod, objMethod, defaultReturn) { - return function(){ - var args = Array.prototype.slice.call(arguments); - if (args[0] == null) { - return defaultReturn; - } - // array-like is treated as array - return (typeof args[0].length === 'number')? arrMethod.apply(null, args) : objMethod.apply(null, args); - }; - } - - return makeCollectionMethod; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/map.js deleted file mode 100644 index 96e24987..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/map.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../lang/isObject', '../object/values', '../array/map', '../function/makeIterator_'], function (isObject, values, arrMap, makeIterator) { - - /** - * Map collection values, returns Array. - */ - function map(list, callback, thisObj) { - callback = makeIterator(callback, thisObj); - // list.length to check array-like object, if not array-like - // we simply map all the object values - if( isObject(list) && list.length == null ){ - list = values(list); - } - return arrMap(list, function (val, key, list) { - return callback(val, key, list); - }); - } - - return map; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/max.js deleted file mode 100644 index de9a6da5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/max.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/max', '../object/max'], function (make, arrMax, objMax) { - - /** - * Get maximum value inside collection - */ - return make(arrMax, objMax); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/min.js deleted file mode 100644 index f0c239a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/min.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/min', '../object/min'], function (make, arrMin, objMin) { - - /** - * Get minimum value inside collection. - */ - return make(arrMin, objMin); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/pluck.js deleted file mode 100644 index ef784a7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/pluck.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./map'], function (map) { - - /** - * Extract a list of property values. - */ - function pluck(list, key) { - return map(list, function(value) { - return value[key]; - }); - } - - return pluck; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/reduce.js deleted file mode 100644 index bd05d43d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/reduce.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/reduce', '../object/reduce'], function (make, arrReduce, objReduce) { - - /** - */ - return make(arrReduce, objReduce); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/reject.js deleted file mode 100644 index 581adfdc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/reject.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./filter', '../function/makeIterator_'], function (filter, makeIterator) { - - /** - * Inverse or collection/filter - */ - function reject(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - return filter(list, function(value, index, list) { - return !iterator(value, index, list); - }, thisObj); - } - - return reject; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/size.js deleted file mode 100644 index 4e5ab419..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/size.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/isArray', '../object/size'], function (isArray, objSize) { - - /** - * Get collection size - */ - function size(list) { - if (!list) { - return 0; - } - if (isArray(list)) { - return list.length; - } - return objSize(list); - } - - return size; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/some.js deleted file mode 100644 index c0aebee2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/collection/some.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/some', '../object/some'], function (make, arrSome, objSome) { - - /** - */ - return make(arrSome, objSome); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date.js deleted file mode 100644 index 4d449150..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'dayOfTheYear' : require('./date/dayOfTheYear'), - 'diff' : require('./date/diff'), - 'i18n_' : require('./date/i18n_'), - 'isLeapYear' : require('./date/isLeapYear'), - 'isSame' : require('./date/isSame'), - 'parseIso' : require('./date/parseIso'), - 'startOf' : require('./date/startOf'), - 'strftime' : require('./date/strftime'), - 'timezoneAbbr' : require('./date/timezoneAbbr'), - 'timezoneOffset' : require('./date/timezoneOffset'), - 'totalDaysInMonth' : require('./date/totalDaysInMonth'), - 'totalDaysInYear' : require('./date/totalDaysInYear'), - 'weekOfTheYear' : require('./date/weekOfTheYear') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/dayOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/dayOfTheYear.js deleted file mode 100644 index dc77ae1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/dayOfTheYear.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/isDate'], function (isDate) { - - /** - * return the day of the year (1..366) - */ - function dayOfTheYear(date){ - return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - - Date.UTC(date.getFullYear(), 0, 1)) / 86400000 + 1; - } - - return dayOfTheYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/diff.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/diff.js deleted file mode 100644 index 667165fe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/diff.js +++ /dev/null @@ -1,128 +0,0 @@ -define(['./totalDaysInMonth', './totalDaysInYear', '../time/convert'], function(totalDaysInMonth, totalDaysInYear, convert){ - - /** - * calculate the difference between dates (range) - */ - function diff(start, end, unitName){ - // sort the dates to make it easier to process (specially year/month) - if (start > end) { - var swap = start; - start = end; - end = swap; - } - - var output; - - if (unitName === 'month') { - output = getMonthsDiff(start, end); - } else if (unitName === 'year'){ - output = getYearsDiff(start, end); - } else if (unitName != null) { - if (unitName === 'day') { - // ignore timezone difference because of daylight savings time - start = toUtc(start); - end = toUtc(end); - } - output = convert(end - start, 'ms', unitName); - } else { - output = end - start; - } - - return output; - } - - - function toUtc(d){ - // we ignore timezone differences on purpose because of daylight - // savings time, otherwise it would return fractional days/weeks even - // if a full day elapsed. eg: - // Wed Feb 12 2014 00:00:00 GMT-0200 (BRST) - // Sun Feb 16 2014 00:00:00 GMT-0300 (BRT) - // diff should be 4 days and not 4.041666666666667 - return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), - d.getHours(), d.getMinutes(), d.getSeconds(), - d.getMilliseconds()); - } - - - function getMonthsDiff(start, end){ - return getElapsedMonths(start, end) + - getElapsedYears(start, end) * 12 + - getFractionalMonth(start, end); - } - - - function getYearsDiff(start, end){ - var elapsedYears = getElapsedYears(start, end); - return elapsedYears + getFractionalYear(start, end, elapsedYears); - } - - - function getElapsedMonths(start, end){ - var monthDiff = end.getMonth() - start.getMonth(); - if (monthDiff < 0) { - monthDiff += 12; - } - // less than a full month - if (start.getDate() > end.getDate()) { - monthDiff -= 1; - } - return monthDiff; - } - - - function getElapsedYears(start, end){ - var yearDiff = end.getFullYear() - start.getFullYear(); - // less than a full year - if (start.getMonth() > end.getMonth()) { - yearDiff -= 1; - } - return yearDiff; - } - - - function getFractionalMonth(start, end){ - var fractionalDiff = 0; - var startDay = start.getDate(); - var endDay = end.getDate(); - - if (startDay !== endDay) { - var startTotalDays = totalDaysInMonth(start); - var endTotalDays = totalDaysInMonth(end); - var totalDays; - var daysElapsed; - - if (startDay > endDay) { - // eg: Jan 29 - Feb 27 (29 days elapsed but not a full month) - var baseDay = startTotalDays - startDay; - daysElapsed = endDay + baseDay; - // total days should be relative to 1st day of next month if - // startDay > endTotalDays - totalDays = (startDay > endTotalDays)? - endTotalDays + baseDay + 1 : startDay + baseDay; - } else { - // fractional is only based on endMonth eg: Jan 12 - Feb 18 - // (6 fractional days, 28 days until next full month) - daysElapsed = endDay - startDay; - totalDays = endTotalDays; - } - - fractionalDiff = daysElapsed / totalDays; - } - - return fractionalDiff; - } - - - function getFractionalYear(start, end, elapsedYears){ - var base = elapsedYears? - new Date(end.getFullYear(), start.getMonth(), start.getDate()) : - start; - var elapsedDays = diff(base, end, 'day'); - return elapsedDays / totalDaysInYear(end); - } - - - return diff; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/en-US.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/en-US.js deleted file mode 100644 index 5e640c22..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/en-US.js +++ /dev/null @@ -1,61 +0,0 @@ -define(function(){ - // en-US (English, United States) - return { - "am" : "AM", - "pm" : "PM", - - "x": "%m/%d/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %I:%M:%S %p %Z", - - "months" : [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - - "months_abbr" : [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - - "days" : [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - - "days_abbr" : [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ] - }; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/pt-BR.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/pt-BR.js deleted file mode 100644 index 47256dd2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/pt-BR.js +++ /dev/null @@ -1,61 +0,0 @@ -define(function(){ - // pt-BR (Brazillian Portuguese) - return { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Janeiro", - "Fevereiro", - "Março", - "Abril", - "Maio", - "Junho", - "Julho", - "Agosto", - "Setembro", - "Outubro", - "Novembro", - "Dezembro" - ], - - "months_abbr" : [ - "Jan", - "Fev", - "Mar", - "Abr", - "Mai", - "Jun", - "Jul", - "Ago", - "Set", - "Out", - "Nov", - "Dez" - ], - - "days" : [ - "Domingo", - "Segunda", - "Terça", - "Quarta", - "Quinta", - "Sexta", - "Sábado" - ], - - "days_abbr" : [ - "Dom", - "Seg", - "Ter", - "Qua", - "Qui", - "Sex", - "Sáb" - ] - }; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/i18n_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/i18n_.js deleted file mode 100644 index c04ce885..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/i18n_.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../object/mixIn', './i18n/en-US'], function(mixIn, enUS){ - - // we also use mixIn to make sure we don't affect the original locale - var activeLocale = mixIn({}, enUS, { - // we expose a "set" method to allow overriding the global locale - set : function(localeData){ - mixIn(activeLocale, localeData); - } - }); - - return activeLocale; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/isLeapYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/isLeapYear.js deleted file mode 100644 index e400b43d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/isLeapYear.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../lang/isDate'], function (isDate) { - - /** - * checks if it's a leap year - */ - function isLeapYear(fullYear){ - if (isDate(fullYear)) { - fullYear = fullYear.getFullYear(); - } - return fullYear % 400 === 0 || (fullYear % 100 !== 0 && fullYear % 4 === 0); - } - - return isLeapYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/isSame.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/isSame.js deleted file mode 100644 index f30531fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/isSame.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./startOf'], function (startOf) { - - /** - * Check if date is "same" with optional period - */ - function isSame(date1, date2, period){ - if (period) { - date1 = startOf(date1, period); - date2 = startOf(date2, period); - } - return Number(date1) === Number(date2); - } - - return isSame; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/parseIso.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/parseIso.js deleted file mode 100644 index 9a2aacb0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/parseIso.js +++ /dev/null @@ -1,146 +0,0 @@ -define(['../array/some'], function (some) { - - var datePatterns = [ - /^([0-9]{4})$/, // YYYY - /^([0-9]{4})-([0-9]{2})$/, // YYYY-MM (YYYYMM not allowed) - /^([0-9]{4})-?([0-9]{2})-?([0-9]{2})$/ // YYYY-MM-DD or YYYYMMDD - ]; - var ORD_DATE = /^([0-9]{4})-?([0-9]{3})$/; // YYYY-DDD - - var timePatterns = [ - /^([0-9]{2}(?:\.[0-9]*)?)$/, // HH.hh - /^([0-9]{2}):?([0-9]{2}(?:\.[0-9]*)?)$/, // HH:MM.mm - /^([0-9]{2}):?([0-9]{2}):?([0-9]{2}(\.[0-9]*)?)$/ // HH:MM:SS.ss - ]; - - var DATE_TIME = /^(.+)T(.+)$/; - var TIME_ZONE = /^(.+)([+\-])([0-9]{2}):?([0-9]{2})$/; - - function matchAll(str, patterns) { - var match; - var found = some(patterns, function(pattern) { - return !!(match = pattern.exec(str)); - }); - - return found ? match : null; - } - - function getDate(year, month, day) { - var date = new Date(Date.UTC(year, month, day)); - - // Explicitly set year to avoid Date.UTC making dates < 100 relative to - // 1900 - date.setUTCFullYear(year); - - var valid = - date.getUTCFullYear() === year && - date.getUTCMonth() === month && - date.getUTCDate() === day; - return valid ? +date : NaN; - } - - function parseOrdinalDate(str) { - var match = ORD_DATE.exec(str); - if (match ) { - var year = +match[1], - day = +match[2], - date = new Date(Date.UTC(year, 0, day)); - - if (date.getUTCFullYear() === year) { - return +date; - } - } - - return NaN; - } - - function parseDate(str) { - var match, year, month, day; - - var match = matchAll(str, datePatterns); - if (match === null) { - // Ordinal dates are verified differently. - return parseOrdinalDate(str); - } - - year = (match[1] === void 0) ? 0 : +match[1]; - month = (match[2] === void 0) ? 0 : +match[2] - 1; - day = (match[3] === void 0) ? 1 : +match[3]; - - return getDate(year, month, day); - } - - function getTime(hr, min, sec) { - var valid = - (hr < 24 && hr >= 0 && - min < 60 && min >= 0 && - sec < 60 && min >= 0) || - (hr === 24 && min === 0 && sec === 0); - if (!valid) { - return NaN; - } - - return ((hr * 60 + min) * 60 + sec) * 1000; - } - - function parseOffset(str) { - var match; - if (str.charAt(str.length - 1) === 'Z') { - str = str.substring(0, str.length - 1); - } else if ((match = TIME_ZONE.exec(str))) { - var match = TIME_ZONE.exec(str); - if (match) { - var hours = +match[3], - minutes = (match[4] === void 0) ? 0 : +match[4], - offset = getTime(hours, minutes, 0); - - if (match[2] === '-') { - offset *= -1; - } - - return { offset: offset, time: match[1] }; - } - } - - // No time zone specified, assume UTC - return { offset: 0, time: str }; - } - - function parseTime(str) { - var match; - var offset = parseOffset(str); - - str = offset.time; - offset = offset.offset; - if (isNaN(offset)) { - return NaN; - } - - match = matchAll(str, timePatterns); - if (match === null) { - return NaN; - } - - var hours = (match[1] === void 0) ? 0 : +match[1], - minutes = (match[2] === void 0) ? 0 : +match[2], - seconds = (match[3] === void 0) ? 0 : +match[3]; - - return getTime(hours, minutes, seconds) - offset; - } - - /** - * Parse an ISO8601 formatted date string, and return a Date object. - */ - function parseISO8601(str){ - var match = DATE_TIME.exec(str); - if (!match) { - // No time specified - return parseDate(str); - } - - return parseDate(match[1]) + parseTime(match[2]); - } - - return parseISO8601; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/startOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/startOf.js deleted file mode 100644 index 747f114d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/startOf.js +++ /dev/null @@ -1,54 +0,0 @@ -define(['../lang/clone'], function (clone) { - - /** - * get a new Date object representing start of period - */ - function startOf(date, period){ - date = clone(date); - - // intentionally removed "break" from switch since start of - // month/year/etc should also reset the following periods - switch (period) { - case 'year': - date.setMonth(0); - /* falls through */ - case 'month': - date.setDate(1); - /* falls through */ - case 'week': - case 'day': - date.setHours(0); - /* falls through */ - case 'hour': - date.setMinutes(0); - /* falls through */ - case 'minute': - date.setSeconds(0); - /* falls through */ - case 'second': - date.setMilliseconds(0); - break; - default: - throw new Error('"'+ period +'" is not a valid period'); - } - - // week is the only case that should reset the weekDay and maybe even - // overflow to previous month - if (period === 'week') { - var weekDay = date.getDay(); - var baseDate = date.getDate(); - if (weekDay) { - if (weekDay >= baseDate) { - //start of the week is on previous month - date.setDate(0); - } - date.setDate(date.getDate() - date.getDay()); - } - } - - return date; - } - - return startOf; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/strftime.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/strftime.js deleted file mode 100644 index dd782505..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/strftime.js +++ /dev/null @@ -1,113 +0,0 @@ -define(['../number/pad', './i18n_', './dayOfTheYear', './timezoneOffset', './timezoneAbbr', './weekOfTheYear'], function (pad, i18n, dayOfTheYear, timezoneOffset, timezoneAbbr, weekOfTheYear) { - - var _combinations = { - 'D': '%m/%d/%y', - 'F': '%Y-%m-%d', - 'r': '%I:%M:%S %p', - 'R': '%H:%M', - 'T': '%H:%M:%S', - 'x': 'locale', - 'X': 'locale', - 'c': 'locale' - }; - - - /** - * format date based on strftime format - */ - function strftime(date, format, localeData){ - localeData = localeData || i18n; - var reToken = /%([a-z%])/gi; - - function makeIterator(fn) { - return function(match, token){ - return fn(date, token, localeData); - }; - } - - return format - .replace(reToken, makeIterator(expandCombinations)) - .replace(reToken, makeIterator(convertToken)); - } - - - function expandCombinations(date, token, l10n){ - if (token in _combinations) { - var expanded = _combinations[token]; - return expanded === 'locale'? l10n[token] : expanded; - } else { - return '%'+ token; - } - } - - - function convertToken(date, token, l10n){ - switch (token){ - case 'a': - return l10n.days_abbr[date.getDay()]; - case 'A': - return l10n.days[date.getDay()]; - case 'h': - case 'b': - return l10n.months_abbr[date.getMonth()]; - case 'B': - return l10n.months[date.getMonth()]; - case 'C': - return pad(Math.floor(date.getFullYear() / 100), 2); - case 'd': - return pad(date.getDate(), 2); - case 'e': - return pad(date.getDate(), 2, ' '); - case 'H': - return pad(date.getHours(), 2); - case 'I': - return pad(date.getHours() % 12, 2); - case 'j': - return pad(dayOfTheYear(date), 3); - case 'L': - return pad(date.getMilliseconds(), 3); - case 'm': - return pad(date.getMonth() + 1, 2); - case 'M': - return pad(date.getMinutes(), 2); - case 'n': - return '\n'; - case 'p': - return date.getHours() >= 12? l10n.pm : l10n.am; - case 'P': - return convertToken(date, 'p', l10n).toLowerCase(); - case 's': - return date.getTime() / 1000; - case 'S': - return pad(date.getSeconds(), 2); - case 't': - return '\t'; - case 'u': - var day = date.getDay(); - return day === 0? 7 : day; - case 'U': - return pad(weekOfTheYear(date), 2); - case 'w': - return date.getDay(); - case 'W': - return pad(weekOfTheYear(date, 1), 2); - case 'y': - return pad(date.getFullYear() % 100, 2); - case 'Y': - return pad(date.getFullYear(), 4); - case 'z': - return timezoneOffset(date); - case 'Z': - return timezoneAbbr(date); - case '%': - return '%'; - default: - // keep unrecognized tokens - return '%'+ token; - } - } - - - return strftime; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneAbbr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneAbbr.js deleted file mode 100644 index 225a6856..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneAbbr.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./timezoneOffset'], function(timezoneOffset) { - - /** - * Abbreviated time zone name or similar information. - */ - function timezoneAbbr(date){ - // Date.toString gives different results depending on the - // browser/system so we fallback to timezone offset - // chrome: 'Mon Apr 08 2013 09:02:04 GMT-0300 (BRT)' - // IE: 'Mon Apr 8 09:02:04 UTC-0300 2013' - var tz = /\(([A-Z]{3,4})\)/.exec(date.toString()); - return tz? tz[1] : timezoneOffset(date); - } - - return timezoneAbbr; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneOffset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneOffset.js deleted file mode 100644 index ca06705d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneOffset.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../number/pad'], function (pad) { - - /** - * time zone as hour and minute offset from UTC (e.g. +0900) - */ - function timezoneOffset(date){ - var offset = date.getTimezoneOffset(); - var abs = Math.abs(offset); - var h = pad(Math.floor(abs / 60), 2); - var m = pad(abs % 60, 2); - return (offset > 0? '-' : '+') + h + m; - } - - return timezoneOffset; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInMonth.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInMonth.js deleted file mode 100644 index 98f7e9d1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInMonth.js +++ /dev/null @@ -1,24 +0,0 @@ -define(['../lang/isDate', './isLeapYear'], function (isDate, isLeapYear) { - - var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - - /** - * returns the total amount of days in the month (considering leap years) - */ - function totalDaysInMonth(fullYear, monthIndex){ - if (isDate(fullYear)) { - var date = fullYear; - year = date.getFullYear(); - monthIndex = date.getMonth(); - } - - if (monthIndex === 1 && isLeapYear(fullYear)) { - return 29; - } else { - return DAYS_IN_MONTH[monthIndex]; - } - } - - return totalDaysInMonth; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInYear.js deleted file mode 100644 index e9036b42..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInYear.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./isLeapYear'], function (isLeapYear) { - - /** - * return the amount of days in the year following the gregorian calendar - * and leap years - */ - function totalDaysInYear(fullYear){ - return isLeapYear(fullYear)? 366 : 365; - } - - return totalDaysInYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/weekOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/weekOfTheYear.js deleted file mode 100644 index 8dabc458..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/date/weekOfTheYear.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./dayOfTheYear'], function (dayOfTheYear) { - - /** - * Return the week of the year based on given firstDayOfWeek - */ - function weekOfTheYear(date, firstDayOfWeek){ - firstDayOfWeek = firstDayOfWeek == null? 0 : firstDayOfWeek; - var doy = dayOfTheYear(date); - var dow = (7 + date.getDay() - firstDayOfWeek) % 7; - var relativeWeekDay = 6 - firstDayOfWeek - dow; - return Math.floor((doy + relativeWeekDay) / 7); - } - - return weekOfTheYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function.js deleted file mode 100644 index 23f4fd74..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'bind' : require('./function/bind'), - 'compose' : require('./function/compose'), - 'debounce' : require('./function/debounce'), - 'func' : require('./function/func'), - 'makeIterator_' : require('./function/makeIterator_'), - 'partial' : require('./function/partial'), - 'prop' : require('./function/prop'), - 'series' : require('./function/series'), - 'throttle' : require('./function/throttle'), - 'timeout' : require('./function/timeout') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/bind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/bind.js deleted file mode 100644 index 09e5e20a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/bind.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function(){ - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - * @param {Function} fn Function. - * @param {object} context Execution context. - * @param {rest} args Arguments (0...n arguments). - * @return {Function} Wrapped Function. - */ - function bind(fn, context, args){ - var argsArr = slice(arguments, 2); //curried args - return function(){ - return fn.apply(context, argsArr.concat(slice(arguments))); - }; - } - - return bind; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/compose.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/compose.js deleted file mode 100644 index d8b228fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/compose.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Returns a function that composes multiple functions, passing results to - * each other. - */ - function compose() { - var fns = arguments; - return function(arg){ - // only cares about the first argument since the chain can only - // deal with a single return value anyway. It should start from - // the last fn. - var n = fns.length; - while (n--) { - arg = fns[n].call(this, arg); - } - return arg; - }; - } - - return compose; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/debounce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/debounce.js deleted file mode 100644 index 21644ecc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/debounce.js +++ /dev/null @@ -1,29 +0,0 @@ -define(function () { - - /** - * Debounce callback execution - */ - function debounce(fn, threshold, isAsap){ - var timeout, result; - function debounced(){ - var args = arguments, context = this; - function delayed(){ - if (! isAsap) { - result = fn.apply(context, args); - } - timeout = null; - } - if (timeout) { - clearTimeout(timeout); - } else if (isAsap) { - result = fn.apply(context, args); - } - timeout = setTimeout(delayed, threshold); - return result; - } - return debounced; - } - - return debounce; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/func.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/func.js deleted file mode 100644 index b920e00e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/func.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Returns a function that call a method on the passed object - */ - function func(name){ - return function(obj){ - return obj[name](); - }; - } - - return func; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/makeIterator_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/makeIterator_.js deleted file mode 100644 index deb6e137..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/makeIterator_.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['./prop', '../object/deepMatches'], function(prop, deepMatches) { - - /** - * Converts argument into a valid iterator. - * Used internally on most array/object/collection methods that receives a - * callback/iterator providing a shortcut syntax. - */ - function makeIterator(src, thisObj){ - switch(typeof src) { - case 'object': - // typeof null == "object" - return (src != null)? function(val, key, target){ - return deepMatches(val, src); - } : src; - case 'string': - case 'number': - return prop(src); - case 'function': - if (typeof thisObj === 'undefined') { - return src; - } else { - return function(val, i, arr){ - return src.call(thisObj, val, i, arr); - }; - } - default: - return src; - } - } - - return makeIterator; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/partial.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/partial.js deleted file mode 100644 index ad730746..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/partial.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function () { - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Creates a partially applied function. - */ - function partial(fn, var_args){ - var argsArr = slice(arguments, 1); //curried args - return function(){ - return fn.apply(this, argsArr.concat(slice(arguments))); - }; - } - - return partial; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/prop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/prop.js deleted file mode 100644 index c9df78ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/prop.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Returns a function that gets a property of the passed object - */ - function prop(name){ - return function(obj){ - return obj[name]; - }; - } - - return prop; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/series.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/series.js deleted file mode 100644 index c8856a27..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/series.js +++ /dev/null @@ -1,22 +0,0 @@ -define(function () { - - /** - * Returns a function that will execute a list of functions in sequence - * passing the same arguments to each one. (useful for batch processing - * items during a forEach loop) - */ - function series(){ - var fns = arguments; - return function(){ - var i = 0, - n = fns.length; - while (i < n) { - fns[i].apply(this, arguments); - i += 1; - } - }; - } - - return series; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/throttle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/throttle.js deleted file mode 100644 index 8ce3929a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/throttle.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../time/now'], function (now) { - - /** - */ - function throttle(fn, delay){ - var context, timeout, result, args, - cur, diff, prev = 0; - function delayed(){ - prev = now(); - timeout = null; - result = fn.apply(context, args); - } - function throttled(){ - context = this; - args = arguments; - cur = now(); - diff = delay - (cur - prev); - if (diff <= 0) { - clearTimeout(timeout); - prev = cur; - result = fn.apply(context, args); - } else if (! timeout) { - timeout = setTimeout(delayed, diff); - } - return result; - } - return throttled; - } - - return throttle; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/timeout.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/timeout.js deleted file mode 100644 index 15388bdd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/function/timeout.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function () { - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Delays the call of a function within a given context. - */ - function timeout(fn, millis, context){ - - var args = slice(arguments, 3); - - return setTimeout(function() { - fn.apply(context, args); - }, millis); - } - - return timeout; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/index.js deleted file mode 100644 index 744bb119..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/index.js +++ /dev/null @@ -1,24 +0,0 @@ -/**@license - * mout v0.6.0 | http://moutjs.com | MIT license - */ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'VERSION' : '0.6.0', - 'array' : require('./array'), - 'collection' : require('./collection'), - 'date' : require('./date'), - 'function' : require('./function'), - 'lang' : require('./lang'), - 'math' : require('./math'), - 'number' : require('./number'), - 'object' : require('./object'), - 'queryString' : require('./queryString'), - 'random' : require('./random'), - 'string' : require('./string'), - 'time' : require('./time') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang.js deleted file mode 100644 index de16b597..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang.js +++ /dev/null @@ -1,36 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'clone' : require('./lang/clone'), - 'createObject' : require('./lang/createObject'), - 'ctorApply' : require('./lang/ctorApply'), - 'deepClone' : require('./lang/deepClone'), - 'defaults' : require('./lang/defaults'), - 'inheritPrototype' : require('./lang/inheritPrototype'), - 'is' : require('./lang/is'), - 'isArguments' : require('./lang/isArguments'), - 'isArray' : require('./lang/isArray'), - 'isBoolean' : require('./lang/isBoolean'), - 'isDate' : require('./lang/isDate'), - 'isEmpty' : require('./lang/isEmpty'), - 'isFinite' : require('./lang/isFinite'), - 'isFunction' : require('./lang/isFunction'), - 'isInteger' : require('./lang/isInteger'), - 'isKind' : require('./lang/isKind'), - 'isNaN' : require('./lang/isNaN'), - 'isNull' : require('./lang/isNull'), - 'isNumber' : require('./lang/isNumber'), - 'isObject' : require('./lang/isObject'), - 'isPlainObject' : require('./lang/isPlainObject'), - 'isRegExp' : require('./lang/isRegExp'), - 'isString' : require('./lang/isString'), - 'isUndefined' : require('./lang/isUndefined'), - 'isnt' : require('./lang/isnt'), - 'kindOf' : require('./lang/kindOf'), - 'toArray' : require('./lang/toArray'), - 'toString' : require('./lang/toString') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/clone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/clone.js deleted file mode 100644 index 468489a1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/clone.js +++ /dev/null @@ -1,47 +0,0 @@ -define(['./kindOf', './isPlainObject', '../object/mixIn'], function (kindOf, isPlainObject, mixIn) { - - /** - * Clone native types. - */ - function clone(val){ - switch (kindOf(val)) { - case 'Object': - return cloneObject(val); - case 'Array': - return cloneArray(val); - case 'RegExp': - return cloneRegExp(val); - case 'Date': - return cloneDate(val); - default: - return val; - } - } - - function cloneObject(source) { - if (isPlainObject(source)) { - return mixIn({}, source); - } else { - return source; - } - } - - function cloneRegExp(r) { - var flags = ''; - flags += r.multiline ? 'm' : ''; - flags += r.global ? 'g' : ''; - flags += r.ignorecase ? 'i' : ''; - return new RegExp(r.source, flags); - } - - function cloneDate(date) { - return new Date(+date); - } - - function cloneArray(arr) { - return arr.slice(); - } - - return clone; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/createObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/createObject.js deleted file mode 100644 index f7661500..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/createObject.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../object/mixIn'], function(mixIn){ - - /** - * Create Object using prototypal inheritance and setting custom properties. - * - Mix between Douglas Crockford Prototypal Inheritance <http://javascript.crockford.com/prototypal.html> and the EcmaScript 5 `Object.create()` method. - * @param {object} parent Parent Object. - * @param {object} [props] Object properties. - * @return {object} Created object. - */ - function createObject(parent, props){ - function F(){} - F.prototype = parent; - return mixIn(new F(), props); - - } - return createObject; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/ctorApply.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/ctorApply.js deleted file mode 100644 index a9ac1c54..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/ctorApply.js +++ /dev/null @@ -1,17 +0,0 @@ -define(function () { - - function F(){} - - /** - * Do fn.apply on a constructor. - */ - function ctorApply(ctor, args) { - F.prototype = ctor.prototype; - var instance = new F(); - ctor.apply(instance, args); - return instance; - } - - return ctorApply; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/deepClone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/deepClone.js deleted file mode 100644 index d45c10aa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/deepClone.js +++ /dev/null @@ -1,45 +0,0 @@ -define(['./clone', '../object/forOwn', './kindOf', './isPlainObject'], function (clone, forOwn, kindOf, isPlainObject) { - - /** - * Recursively clone native types. - */ - function deepClone(val, instanceClone) { - switch ( kindOf(val) ) { - case 'Object': - return cloneObject(val, instanceClone); - case 'Array': - return cloneArray(val, instanceClone); - default: - return clone(val); - } - } - - function cloneObject(source, instanceClone) { - if (isPlainObject(source)) { - var out = {}; - forOwn(source, function(val, key) { - this[key] = deepClone(val, instanceClone); - }, out); - return out; - } else if (instanceClone) { - return instanceClone(source); - } else { - return source; - } - } - - function cloneArray(arr, instanceClone) { - var out = [], - i = -1, - n = arr.length, - val; - while (++i < n) { - out[i] = deepClone(arr[i], instanceClone); - } - return out; - } - - return deepClone; - -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/defaults.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/defaults.js deleted file mode 100644 index 5156b1bb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/defaults.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./toArray', '../array/find'], function (toArray, find) { - - /** - * Return first non void argument - */ - function defaults(var_args){ - return find(toArray(arguments), nonVoid); - } - - function nonVoid(val){ - return val != null; - } - - return defaults; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/inheritPrototype.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/inheritPrototype.js deleted file mode 100644 index c1fda3a7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/inheritPrototype.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./createObject'], function(createObject){ - - /** - * Inherit prototype from another Object. - * - inspired by Nicholas Zackas <http://nczonline.net> Solution - * @param {object} child Child object - * @param {object} parent Parent Object - */ - function inheritPrototype(child, parent){ - var p = createObject(parent.prototype); - p.constructor = child; - child.prototype = p; - } - - return inheritPrototype; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/is.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/is.js deleted file mode 100644 index 261a2077..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/is.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Check if both arguments are egal. - */ - function is(x, y){ - // implementation borrowed from harmony:egal spec - if (x === y) { - // 0 === -0, but they are not identical - return x !== 0 || 1 / x === 1 / y; - } - - // NaN !== NaN, but they are identical. - // NaNs are the only non-reflexive value, i.e., if x !== x, - // then x is a NaN. - // isNaN is broken: it converts its argument to number, so - // isNaN("foo") => true - return x !== x && y !== y; - } - - return is; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isArguments.js deleted file mode 100644 index f889ee8e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isArguments.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./isKind'], function (isKind) { - - /** - */ - var isArgs = isKind(arguments, 'Arguments')? - function(val){ - return isKind(val, 'Arguments'); - } : - function(val){ - // Arguments is an Object on IE7 - return !!(val && Object.prototype.hasOwnProperty.call(val, 'callee')); - }; - - return isArgs; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isArray.js deleted file mode 100644 index 886e2aa5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isArray.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - var isArray = Array.isArray || function (val) { - return isKind(val, 'Array'); - }; - return isArray; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isBoolean.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isBoolean.js deleted file mode 100644 index 1ca27a69..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isBoolean.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isBoolean(val) { - return isKind(val, 'Boolean'); - } - return isBoolean; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isDate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isDate.js deleted file mode 100644 index 2708d676..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isDate.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isDate(val) { - return isKind(val, 'Date'); - } - return isDate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isEmpty.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isEmpty.js deleted file mode 100644 index 4cc3d2db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isEmpty.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../object/forOwn', './isArray'], function (forOwn, isArray) { - - function isEmpty(val){ - if (val == null) { - // typeof null == 'object' so we check it first - return false; - } else if ( typeof val === 'string' || isArray(val) ) { - return !val.length; - } else if ( typeof val === 'object' || typeof val === 'function' ) { - var result = true; - forOwn(val, function(){ - result = false; - return false; // break loop - }); - return result; - } else { - return false; - } - } - - return isEmpty; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isFinite.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isFinite.js deleted file mode 100644 index 5a982f4b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isFinite.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - var global = this; - - /** - * Check if value is finite - */ - function isFinite(val){ - var is = false; - if (typeof val === 'string' && val !== '') { - is = global.isFinite( parseFloat(val) ); - } else if (isNumber(val)){ - // need to use isNumber because of Number constructor - is = global.isFinite( val ); - } - return is; - } - - return isFinite; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isFunction.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isFunction.js deleted file mode 100644 index ff5df7f0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isFunction.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isFunction(val) { - return isKind(val, 'Function'); - } - return isFunction; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isInteger.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isInteger.js deleted file mode 100644 index 1931f516..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - /** - * Check if value is an integer - */ - function isInteger(val){ - return isNumber(val) && (val % 1 === 0); - } - - return isInteger; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isKind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isKind.js deleted file mode 100644 index 6937a12f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isKind.js +++ /dev/null @@ -1,9 +0,0 @@ -define(['./kindOf'], function (kindOf) { - /** - * Check if value is from a specific "kind". - */ - function isKind(val, kind){ - return kindOf(val) === kind; - } - return isKind; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isNaN.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isNaN.js deleted file mode 100644 index 9467a3c8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isNaN.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - /** - * Check if value is NaN for realz - */ - function isNaN(val){ - // based on the fact that NaN !== NaN - // need to check if it's a number to avoid conflicts with host objects - // also need to coerce ToNumber to avoid edge case `new Number(NaN)` - return !isNumber(val) || val != +val; - } - - return isNaN; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isNull.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isNull.js deleted file mode 100644 index 506e05ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isNull.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function () { - /** - */ - function isNull(val){ - return val === null; - } - return isNull; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isNumber.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isNumber.js deleted file mode 100644 index 9a832c5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isNumber.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isNumber(val) { - return isKind(val, 'Number'); - } - return isNumber; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isObject.js deleted file mode 100644 index 0befb063..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isObject.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isObject(val) { - return isKind(val, 'Object'); - } - return isObject; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isPlainObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isPlainObject.js deleted file mode 100644 index 6c5854fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isPlainObject.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Checks if the value is created by the `Object` constructor. - */ - function isPlainObject(value) { - return (!!value - && typeof value === 'object' - && value.constructor === Object); - } - - return isPlainObject; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isRegExp.js deleted file mode 100644 index d78a03da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isRegExp.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isRegExp(val) { - return isKind(val, 'RegExp'); - } - return isRegExp; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isString.js deleted file mode 100644 index 8a42fe01..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isString.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isString(val) { - return isKind(val, 'String'); - } - return isString; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isUndefined.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isUndefined.js deleted file mode 100644 index c57b28eb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isUndefined.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function () { - var UNDEF; - - /** - */ - function isUndef(val){ - return val === UNDEF; - } - return isUndef; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isnt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isnt.js deleted file mode 100644 index d4336222..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/isnt.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./is'], function (is) { - - /** - * Check if both values are not identical/egal - */ - function isnt(x, y){ - return !is(x, y); - } - - return isnt; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/kindOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/kindOf.js deleted file mode 100644 index 97d21d15..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/kindOf.js +++ /dev/null @@ -1,20 +0,0 @@ -define(function () { - - var _rKind = /^\[object (.*)\]$/, - _toString = Object.prototype.toString, - UNDEF; - - /** - * Gets the "kind" of value. (e.g. "String", "Number", etc) - */ - function kindOf(val) { - if (val === null) { - return 'Null'; - } else if (val === UNDEF) { - return 'Undefined'; - } else { - return _rKind.exec( _toString.call(val) )[1]; - } - } - return kindOf; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/toArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/toArray.js deleted file mode 100644 index 552916f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/toArray.js +++ /dev/null @@ -1,31 +0,0 @@ -define(['./kindOf'], function (kindOf) { - - var _win = this; - - /** - * Convert array-like object into array - */ - function toArray(val){ - var ret = [], - kind = kindOf(val), - n; - - if (val != null) { - if ( val.length == null || kind === 'String' || kind === 'Function' || kind === 'RegExp' || val === _win ) { - //string, regexp, function have .length but user probably just want - //to wrap value into an array.. - ret[ret.length] = val; - } else { - //window returns true on isObject in IE7 and may have length - //property. `typeof NodeList` returns `function` on Safari so - //we can't use it (#58) - n = val.length; - while (n--) { - ret[n] = val[n]; - } - } - } - return ret; - } - return toArray; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/toString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/toString.js deleted file mode 100644 index c28b89af..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/lang/toString.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * Typecast a value to a String, using an empty string value for null or - * undefined. - */ - function toString(val){ - return val == null ? '' : val.toString(); - } - - return toString; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math.js deleted file mode 100644 index e2ba8705..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'ceil' : require('./math/ceil'), - 'clamp' : require('./math/clamp'), - 'countSteps' : require('./math/countSteps'), - 'floor' : require('./math/floor'), - 'inRange' : require('./math/inRange'), - 'isNear' : require('./math/isNear'), - 'lerp' : require('./math/lerp'), - 'loop' : require('./math/loop'), - 'map' : require('./math/map'), - 'norm' : require('./math/norm'), - 'round' : require('./math/round') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/ceil.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/ceil.js deleted file mode 100644 index d73b0581..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/ceil.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Round value up with a custom radix. - */ - function ceil(val, step){ - step = Math.abs(step || 1); - return Math.ceil(val / step) * step; - } - - return ceil; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/clamp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/clamp.js deleted file mode 100644 index fb5a1484..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/clamp.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Clamps value inside range. - */ - function clamp(val, min, max){ - return val < min? min : (val > max? max : val); - } - return clamp; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/countSteps.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/countSteps.js deleted file mode 100644 index 0ecb32f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/countSteps.js +++ /dev/null @@ -1,16 +0,0 @@ -define(function(){ - /** - * Count number of full steps. - */ - function countSteps(val, step, overflow){ - val = Math.floor(val / step); - - if (overflow) { - return val % overflow; - } - - return val; - } - - return countSteps; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/floor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/floor.js deleted file mode 100644 index 8a4456b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/floor.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Floor value to full steps. - */ - function floor(val, step){ - step = Math.abs(step || 1); - return Math.floor(val / step) * step; - } - return floor; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/inRange.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/inRange.js deleted file mode 100644 index 0c890536..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/inRange.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Checks if value is inside the range. - */ - function inRange(val, min, max, threshold){ - threshold = threshold || 0; - return (val + threshold >= min && val - threshold <= max); - } - - return inRange; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/isNear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/isNear.js deleted file mode 100644 index b308a0b0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/isNear.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Check if value is close to target. - */ - function isNear(val, target, threshold){ - return (Math.abs(val - target) <= threshold); - } - return isNear; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/lerp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/lerp.js deleted file mode 100644 index 26b99d04..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/lerp.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Linear interpolation. - * IMPORTANT:will return `Infinity` if numbers overflow Number.MAX_VALUE - */ - function lerp(ratio, start, end){ - return start + (end - start) * ratio; - } - - return lerp; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/loop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/loop.js deleted file mode 100644 index c735ecf6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/loop.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Loops value inside range. - */ - function loop(val, min, max){ - return val < min? max : (val > max? min : val); - } - - return loop; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/map.js deleted file mode 100644 index bf7dc5d5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/map.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['./lerp', './norm'], function(lerp, norm){ - /** - * Maps a number from one scale to another. - * @example map(3, 0, 4, -1, 1) -> 0.5 - */ - function map(val, min1, max1, min2, max2){ - return lerp( norm(val, min1, max1), min2, max2 ); - } - return map; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/norm.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/norm.js deleted file mode 100644 index fccae20e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/norm.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Gets normalized ratio of value inside range. - */ - function norm(val, min, max){ - return (val - min) / (max - min); - } - return norm; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/round.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/round.js deleted file mode 100644 index b43e4ac2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/math/round.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - /** - * Round number to a specific radix - */ - function round(value, radix){ - radix = radix || 1; // default round 1 - return Math.round(value / radix) * radix; - } - - return round; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number.js deleted file mode 100644 index cb52fc75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'MAX_INT' : require('./number/MAX_INT'), - 'MAX_UINT' : require('./number/MAX_UINT'), - 'MIN_INT' : require('./number/MIN_INT'), - 'abbreviate' : require('./number/abbreviate'), - 'currencyFormat' : require('./number/currencyFormat'), - 'enforcePrecision' : require('./number/enforcePrecision'), - 'pad' : require('./number/pad'), - 'rol' : require('./number/rol'), - 'ror' : require('./number/ror'), - 'sign' : require('./number/sign'), - 'toInt' : require('./number/toInt'), - 'toUInt' : require('./number/toUInt'), - 'toUInt31' : require('./number/toUInt31') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_INT.js deleted file mode 100644 index 23a6e1a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit signed integer value. (2^31 - 1) - */ -define(function(){ - return 2147483647; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_UINT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_UINT.js deleted file mode 100644 index a035096c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_UINT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit unsigned integet value (2^32 - 1) - */ -define(function(){ - return 4294967295; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/MIN_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/MIN_INT.js deleted file mode 100644 index 9b3e9781..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/MIN_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Minimum 32-bit signed integer value (-2^31). - */ -define(function(){ - return -2147483648; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/abbreviate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/abbreviate.js deleted file mode 100644 index 7e7405ad..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/abbreviate.js +++ /dev/null @@ -1,35 +0,0 @@ -define(['./enforcePrecision'], function (enforcePrecision) { - - var _defaultDict = { - thousand : 'K', - million : 'M', - billion : 'B' - }; - - /** - * Abbreviate number if bigger than 1000. (eg: 2.5K, 17.5M, 3.4B, ...) - */ - function abbreviateNumber(val, nDecimals, dict){ - nDecimals = nDecimals != null? nDecimals : 1; - dict = dict || _defaultDict; - val = enforcePrecision(val, nDecimals); - - var str, mod; - - if (val < 1000000) { - mod = enforcePrecision(val / 1000, nDecimals); - // might overflow to next scale during rounding - str = mod < 1000? mod + dict.thousand : 1 + dict.million; - } else if (val < 1000000000) { - mod = enforcePrecision(val / 1000000, nDecimals); - str = mod < 1000? mod + dict.million : 1 + dict.billion; - } else { - str = enforcePrecision(val / 1000000000, nDecimals) + dict.billion; - } - - return str; - } - - return abbreviateNumber; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/currencyFormat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/currencyFormat.js deleted file mode 100644 index dcde8fc7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/currencyFormat.js +++ /dev/null @@ -1,26 +0,0 @@ -define(function () { - - /** - * Converts number into currency format - */ - function currencyFormat(val, nDecimalDigits, decimalSeparator, thousandsSeparator) { - nDecimalDigits = nDecimalDigits == null? 2 : nDecimalDigits; - decimalSeparator = decimalSeparator == null? '.' : decimalSeparator; - thousandsSeparator = thousandsSeparator == null? ',' : thousandsSeparator; - - //can't use enforce precision since it returns a number and we are - //doing a RegExp over the string - var fixed = val.toFixed(nDecimalDigits), - //separate begin [$1], middle [$2] and decimal digits [$4] - parts = new RegExp('^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{'+ nDecimalDigits +'}))?$').exec( fixed ); - - if(parts){ //val >= 1000 || val <= -1000 - return parts[1] + parts[2].replace(/\d{3}/g, thousandsSeparator + '$&') + (parts[4] ? decimalSeparator + parts[4] : ''); - }else{ - return fixed.replace('.', decimalSeparator); - } - } - - return currencyFormat; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/enforcePrecision.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/enforcePrecision.js deleted file mode 100644 index 84554d0e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/enforcePrecision.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function(){ - /** - * Enforce a specific amount of decimal digits and also fix floating - * point rounding issues. - * @example `enforcePrecision(0.615, 2) -> 0.62`, `(0.615).toFixed(2) -> - * 0.61` - */ - function enforcePrecision(val, nDecimalDigits){ - var pow = Math.pow(10, nDecimalDigits); - return +(Math.round(val * pow) / pow).toFixed(nDecimalDigits); - } - return enforcePrecision; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/pad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/pad.js deleted file mode 100644 index 3b2c062a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/pad.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../string/lpad'], function(lpad){ - - /** - * Add padding zeros if n.length < minLength. - */ - function pad(n, minLength, char){ - return lpad(''+ n, minLength, char || '0'); - } - - return pad; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/rol.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/rol.js deleted file mode 100644 index a148f444..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/rol.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Bitwise circular shift left - * http://en.wikipedia.org/wiki/Circular_shift - */ - function rol(val, shift){ - return (val << shift) | (val >> (32 - shift)); - } - return rol; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/ror.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/ror.js deleted file mode 100644 index b5c66f92..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/ror.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Bitwise circular shift right - * http://en.wikipedia.org/wiki/Circular_shift - */ - function ror(val, shift){ - return (val >> shift) | (val << (32 - shift)); - } - return ror; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/sign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/sign.js deleted file mode 100644 index dfc131d5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/sign.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function () { - - /** - * Get sign of the value. - */ - function sign(val) { - var num = Number(val); - if (num === 0) return num; // +0 and +0 === 0 - if (isNaN(num)) return num; // NaN - return num < 0? -1 : 1; - } - - return sign; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/toInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/toInt.js deleted file mode 100644 index 1e9b4c0b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/toInt.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function(){ - - /** - * "Convert" value into an 32-bit integer. - * Works like `Math.floor` if val > 0 and `Math.ceil` if val < 0. - * IMPORTANT: val will wrap at 2^31 and -2^31. - * Perf tests: http://jsperf.com/vs-vs-parseint-bitwise-operators/7 - */ - function toInt(val){ - return ~~val; - } - - return toInt; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt.js deleted file mode 100644 index d5b25b2c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * "Convert" value into a 32-bit unsigned integer. - * IMPORTANT: Value will wrap at 2^32. - */ - function toUInt(val){ - return val >>> 0; - } - - return toUInt; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt31.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt31.js deleted file mode 100644 index 9785a054..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt31.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./MAX_INT'], function(MAX_INT){ - - /** - * "Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - * IMPORTANT: value wil wrap at 2^31, if negative will return 0. - */ - function toUInt31(val){ - return (val <= 0)? 0 : (val > MAX_INT? ~~(val % (MAX_INT + 1)) : ~~val); - } - - return toUInt31; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object.js deleted file mode 100644 index 343e7826..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object.js +++ /dev/null @@ -1,42 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'bindAll' : require('./object/bindAll'), - 'contains' : require('./object/contains'), - 'deepEquals' : require('./object/deepEquals'), - 'deepFillIn' : require('./object/deepFillIn'), - 'deepMatches' : require('./object/deepMatches'), - 'deepMixIn' : require('./object/deepMixIn'), - 'equals' : require('./object/equals'), - 'every' : require('./object/every'), - 'fillIn' : require('./object/fillIn'), - 'filter' : require('./object/filter'), - 'find' : require('./object/find'), - 'forIn' : require('./object/forIn'), - 'forOwn' : require('./object/forOwn'), - 'functions' : require('./object/functions'), - 'get' : require('./object/get'), - 'has' : require('./object/has'), - 'hasOwn' : require('./object/hasOwn'), - 'keys' : require('./object/keys'), - 'map' : require('./object/map'), - 'matches' : require('./object/matches'), - 'max' : require('./object/max'), - 'merge' : require('./object/merge'), - 'min' : require('./object/min'), - 'mixIn' : require('./object/mixIn'), - 'namespace' : require('./object/namespace'), - 'pick' : require('./object/pick'), - 'pluck' : require('./object/pluck'), - 'reduce' : require('./object/reduce'), - 'reject' : require('./object/reject'), - 'set' : require('./object/set'), - 'size' : require('./object/size'), - 'some' : require('./object/some'), - 'unset' : require('./object/unset'), - 'values' : require('./object/values') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/bindAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/bindAll.js deleted file mode 100644 index b131ed15..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/bindAll.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./functions', '../function/bind', '../array/forEach'], function (functions, bind, forEach) { - - /** - * Binds methods of the object to be run in it's own context. - */ - function bindAll(obj, rest_methodNames){ - var keys = arguments.length > 1? - Array.prototype.slice.call(arguments, 1) : functions(obj); - forEach(keys, function(key){ - obj[key] = bind(obj[key], obj); - }); - } - - return bindAll; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/contains.js deleted file mode 100644 index 297e8986..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/contains.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./some'], function (some) { - - /** - * Check if object contains value - */ - function contains(obj, needle) { - return some(obj, function(val) { - return (val === needle); - }); - } - return contains; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepEquals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepEquals.js deleted file mode 100644 index 8b7d5d15..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepEquals.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['../lang/isObject', './equals'], function (isObject, equals) { - - function defaultCompare(a, b) { - return a === b; - } - - /** - * Recursively checks for same properties and values. - */ - function deepEquals(a, b, callback){ - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - function compare(a, b){ - return deepEquals(a, b, callback); - } - - return equals(a, b, compare); - } - - return deepEquals; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepFillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepFillIn.js deleted file mode 100644 index 84ba154a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepFillIn.js +++ /dev/null @@ -1,31 +0,0 @@ -define(['./forOwn', '../lang/isPlainObject'], function (forOwn, isPlainObject) { - - /** - * Deeply copy missing properties in the target from the defaults. - */ - function deepFillIn(target, defaults){ - var i = 0, - n = arguments.length, - obj; - - while(++i < n) { - obj = arguments[i]; - if (obj) { - forOwn(obj, function(newValue, key) { - var curValue = target[key]; - if (curValue == null) { - target[key] = newValue; - } else if (isPlainObject(curValue) - && isPlainObject(newValue)) { - deepFillIn(curValue, newValue); - } - }); - } - } - - return target; - } - - return deepFillIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepMatches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepMatches.js deleted file mode 100644 index 2eae6297..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepMatches.js +++ /dev/null @@ -1,54 +0,0 @@ -define(['./forOwn', '../lang/isArray'], function(forOwn, isArray) { - - function containsMatch(array, pattern) { - var i = -1, length = array.length; - while (++i < length) { - if (deepMatches(array[i], pattern)) { - return true; - } - } - - return false; - } - - function matchArray(target, pattern) { - var i = -1, patternLength = pattern.length; - while (++i < patternLength) { - if (!containsMatch(target, pattern[i])) { - return false; - } - } - - return true; - } - - function matchObject(target, pattern) { - var result = true; - forOwn(pattern, function(val, key) { - if (!deepMatches(target[key], val)) { - // Return false to break out of forOwn early - return (result = false); - } - }); - - return result; - } - - /** - * Recursively check if the objects match. - */ - function deepMatches(target, pattern){ - if (target && typeof target === 'object') { - if (isArray(target) && isArray(pattern)) { - return matchArray(target, pattern); - } else { - return matchObject(target, pattern); - } - } else { - return target === pattern; - } - } - - return deepMatches; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepMixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepMixIn.js deleted file mode 100644 index 1b4178ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/deepMixIn.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['./forOwn', '../lang/isPlainObject'], function (forOwn, isPlainObject) { - - /** - * Mixes objects into the target object, recursively mixing existing child - * objects. - */ - function deepMixIn(target, objects) { - var i = 0, - n = arguments.length, - obj; - - while(++i < n){ - obj = arguments[i]; - if (obj) { - forOwn(obj, copyProp, target); - } - } - - return target; - } - - function copyProp(val, key) { - var existing = this[key]; - if (isPlainObject(val) && isPlainObject(existing)) { - deepMixIn(existing, val); - } else { - this[key] = val; - } - } - - return deepMixIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/equals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/equals.js deleted file mode 100644 index 596cb952..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/equals.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['./hasOwn', './every', '../lang/isObject'], function(hasOwn, every, isObject) { - - function defaultCompare(a, b) { - return a === b; - } - - // Makes a function to compare the object values from the specified compare - // operation callback. - function makeCompare(callback) { - return function(value, key) { - return hasOwn(this, key) && callback(value, this[key]); - }; - } - - function checkProperties(value, key) { - return hasOwn(this, key); - } - - /** - * Checks if two objects have the same keys and values. - */ - function equals(a, b, callback) { - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - return (every(a, makeCompare(callback), b) && - every(b, checkProperties, a)); - } - - return equals; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/every.js deleted file mode 100644 index 52983a5e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/every.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Object every - */ - function every(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - forOwn(obj, function(val, key) { - // we consider any falsy values as "false" on purpose so shorthand - // syntax can be used to check property existence - if (!callback(val, key, obj)) { - result = false; - return false; // break - } - }); - return result; - } - - return every; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/fillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/fillIn.js deleted file mode 100644 index 0845d3c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/fillIn.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['../array/forEach', './forOwn'], function (forEach, forOwn) { - - /** - * Copy missing properties in the obj from the defaults. - */ - function fillIn(obj, var_defaults){ - forEach(Array.prototype.slice.call(arguments, 1), function(base){ - forOwn(base, function(val, key){ - if (obj[key] == null) { - obj[key] = val; - } - }); - }); - return obj; - } - - return fillIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/filter.js deleted file mode 100644 index f213b915..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/filter.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Creates a new object with all the properties where the callback returns - * true. - */ - function filterValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - output[key] = value; - } - }); - - return output; - } - return filterValues; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/find.js deleted file mode 100644 index 47e6b09d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/find.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./some', '../function/makeIterator_'], function(some, makeIterator) { - - /** - * Returns first item that matches criteria - */ - function find(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result; - some(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - result = value; - return true; //break - } - }); - return result; - } - - return find; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/forIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/forIn.js deleted file mode 100644 index 2058e9cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/forIn.js +++ /dev/null @@ -1,62 +0,0 @@ -define(function () { - - var _hasDontEnumBug, - _dontEnums; - - function checkDontEnum(){ - _dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - - _hasDontEnumBug = true; - - for (var key in {'toString': null}) { - _hasDontEnumBug = false; - } - } - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forIn(obj, fn, thisObj){ - var key, i = 0; - // no need to check if argument is a real object that way we can use - // it for arrays, functions, date, etc. - - //post-pone check till needed - if (_hasDontEnumBug == null) checkDontEnum(); - - for (key in obj) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - - if (_hasDontEnumBug) { - while (key = _dontEnums[i++]) { - // since we aren't using hasOwn check we need to make sure the - // property was overwritten - if (obj[key] !== Object.prototype[key]) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - } - } - } - - function exec(fn, obj, key, thisObj){ - return fn.call(thisObj, obj[key], key, obj); - } - - return forIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/forOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/forOwn.js deleted file mode 100644 index b40cbaf1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/forOwn.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./hasOwn', './forIn'], function (hasOwn, forIn) { - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forOwn(obj, fn, thisObj){ - forIn(obj, function(val, key){ - if (hasOwn(obj, key)) { - return fn.call(thisObj, obj[key], key, obj); - } - }); - } - - return forOwn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/functions.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/functions.js deleted file mode 100644 index 60fee3dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/functions.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./forIn'], function (forIn) { - - /** - * return a list of all enumerable properties that have function values - */ - function functions(obj){ - var keys = []; - forIn(obj, function(val, key){ - if (typeof val === 'function'){ - keys.push(key); - } - }); - return keys.sort(); - } - - return functions; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/get.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/get.js deleted file mode 100644 index ca80b059..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/get.js +++ /dev/null @@ -1,20 +0,0 @@ -define(function () { - - /** - * get "nested" object property - */ - function get(obj, prop){ - var parts = prop.split('.'), - last = parts.pop(); - - while (prop = parts.shift()) { - obj = obj[prop]; - if (typeof obj !== 'object') return; - } - - return obj[last]; - } - - return get; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/has.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/has.js deleted file mode 100644 index cc29817f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/has.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./get'], function (get) { - - var UNDEF; - - /** - * Check if object has nested property. - */ - function has(obj, prop){ - return get(obj, prop) !== UNDEF; - } - - return has; - -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/hasOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/hasOwn.js deleted file mode 100644 index 5c53bcf2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/hasOwn.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - - /** - * Safer Object.hasOwnProperty - */ - function hasOwn(obj, prop){ - return Object.prototype.hasOwnProperty.call(obj, prop); - } - - return hasOwn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/keys.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/keys.js deleted file mode 100644 index ed7c4f91..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/keys.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object keys - */ - var keys = Object.keys || function (obj) { - var keys = []; - forOwn(obj, function(val, key){ - keys.push(key); - }); - return keys; - }; - - return keys; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/map.js deleted file mode 100644 index 2958f6b0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/map.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Creates a new object where all the values are the result of calling - * `callback`. - */ - function mapValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(val, key, obj) { - output[key] = callback(val, key, obj); - }); - - return output; - } - return mapValues; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/matches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/matches.js deleted file mode 100644 index 73ff427c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/matches.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * checks if a object contains all given properties/values - */ - function matches(target, props){ - // can't use "object/every" because of circular dependency - var result = true; - forOwn(props, function(val, key){ - if (target[key] !== val) { - // break loop at first difference - return (result = false); - } - }); - return result; - } - - return matches; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/max.js deleted file mode 100644 index ef311dcb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/max.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../array/max', './values'], function(arrMax, values) { - - /** - * Returns maximum value inside object. - */ - function max(obj, compareFn) { - return arrMax(values(obj), compareFn); - } - - return max; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/merge.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/merge.js deleted file mode 100644 index d7cfedec..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/merge.js +++ /dev/null @@ -1,38 +0,0 @@ -define(['./hasOwn', '../lang/deepClone', '../lang/isObject'], function (hasOwn, deepClone, isObject) { - - /** - * Deep merge objects. - */ - function merge() { - var i = 1, - key, val, obj, target; - - // make sure we don't modify source element and it's properties - // objects are passed by reference - target = deepClone( arguments[0] ); - - while (obj = arguments[i++]) { - for (key in obj) { - if ( ! hasOwn(obj, key) ) { - continue; - } - - val = obj[key]; - - if ( isObject(val) && isObject(target[key]) ){ - // inception, deep merge objects - target[key] = merge(target[key], val); - } else { - // make sure arrays, regexp, date, objects are cloned - target[key] = deepClone(val); - } - - } - } - - return target; - } - - return merge; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/min.js deleted file mode 100644 index 9fb4c1a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/min.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../array/min', './values'], function(arrMin, values) { - - /** - * Returns minimum value inside object. - */ - function min(obj, iterator) { - return arrMin(values(obj), iterator); - } - - return min; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/mixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/mixIn.js deleted file mode 100644 index 6210b7e7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/mixIn.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['./forOwn'], function(forOwn){ - - /** - * Combine properties from all the objects into first one. - * - This method affects target object in place, if you want to create a new Object pass an empty object as first param. - * @param {object} target Target Object - * @param {...object} objects Objects to be combined (0...n objects). - * @return {object} Target Object. - */ - function mixIn(target, objects){ - var i = 0, - n = arguments.length, - obj; - while(++i < n){ - obj = arguments[i]; - if (obj != null) { - forOwn(obj, copyProp, target); - } - } - return target; - } - - function copyProp(val, key){ - this[key] = val; - } - - return mixIn; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/namespace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/namespace.js deleted file mode 100644 index 7ed65db8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/namespace.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['../array/forEach'], function (forEach) { - - /** - * Create nested object if non-existent - */ - function namespace(obj, path){ - if (!path) return obj; - forEach(path.split('.'), function(key){ - if (!obj[key]) { - obj[key] = {}; - } - obj = obj[key]; - }); - return obj; - } - - return namespace; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/pick.js deleted file mode 100644 index 76e22bfc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/pick.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function(){ - - /** - * Return a copy of the object, filtered to only have values for the whitelisted keys. - */ - function pick(obj, var_keys){ - var keys = typeof arguments[1] !== 'string'? arguments[1] : Array.prototype.slice.call(arguments, 1), - out = {}, - i = 0, key; - while (key = keys[i++]) { - out[key] = obj[key]; - } - return out; - } - - return pick; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/pluck.js deleted file mode 100644 index d47744bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./map', '../function/prop'], function (map, prop) { - - /** - * Extract a list of property values. - */ - function pluck(obj, propName){ - return map(obj, prop(propName)); - } - - return pluck; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/reduce.js deleted file mode 100644 index d3a57788..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/reduce.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['./forOwn', './size'], function(forOwn, size) { - - /** - * Object reduce - */ - function reduce(obj, callback, memo, thisObj) { - var initial = arguments.length > 2; - - if (!size(obj) && !initial) { - throw new Error('reduce of empty object with no initial value'); - } - - forOwn(obj, function(value, key, list) { - if (!initial) { - memo = value; - initial = true; - } - else { - memo = callback.call(thisObj, memo, value, key, list); - } - }); - - return memo; - } - - return reduce; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/reject.js deleted file mode 100644 index 84296428..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/reject.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./filter', '../function/makeIterator_'], function (filter, makeIterator) { - - /** - * Object reject - */ - function reject(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - return filter(obj, function(value, index, obj) { - return !callback(value, index, obj); - }, thisObj); - } - - return reject; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/set.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/set.js deleted file mode 100644 index b8fa25a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/set.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./namespace'], function (namespace) { - - /** - * set "nested" object property - */ - function set(obj, prop, val){ - var parts = (/^(.+)\.(.+)$/).exec(prop); - if (parts){ - namespace(obj, parts[1])[parts[2]] = val; - } else { - obj[prop] = val; - } - } - - return set; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/size.js deleted file mode 100644 index c6e377cf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/size.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object size - */ - function size(obj) { - var count = 0; - forOwn(obj, function(){ - count++; - }); - return count; - } - - return size; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/some.js deleted file mode 100644 index 1bd6fdae..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/some.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Object some - */ - function some(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - forOwn(obj, function(val, key) { - if (callback(val, key, obj)) { - result = true; - return false; // break - } - }); - return result; - } - - return some; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/unset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/unset.js deleted file mode 100644 index 787fc19a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/unset.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./has'], function (has) { - - /** - * Unset object property. - */ - function unset(obj, prop){ - if (has(obj, prop)) { - var parts = prop.split('.'), - last = parts.pop(); - while (prop = parts.shift()) { - obj = obj[prop]; - } - return (delete obj[last]); - - } else { - // if property doesn't exist treat as deleted - return true; - } - } - - return unset; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/values.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/values.js deleted file mode 100644 index b311fd09..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/object/values.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object values - */ - function values(obj) { - var vals = []; - forOwn(obj, function(val, key){ - vals.push(val); - }); - return vals; - } - - return values; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString.js deleted file mode 100644 index 44346127..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'contains' : require('./queryString/contains'), - 'decode' : require('./queryString/decode'), - 'encode' : require('./queryString/encode'), - 'getParam' : require('./queryString/getParam'), - 'getQuery' : require('./queryString/getQuery'), - 'parse' : require('./queryString/parse'), - 'setParam' : require('./queryString/setParam') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/contains.js deleted file mode 100644 index a6d11cce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/contains.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./getQuery'], function (getQuery) { - - /** - * Checks if query string contains parameter. - */ - function contains(url, paramName) { - var regex = new RegExp('(\\?|&)'+ paramName +'=', 'g'); //matches `?param=` or `¶m=` - return regex.test(getQuery(url)); - } - - return contains; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/decode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/decode.js deleted file mode 100644 index 02bc1609..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/decode.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../string/typecast', '../lang/isString'], function (typecast, isString) { - - /** - * Decode query string into an object of keys => vals. - */ - function decode(queryStr, shouldTypecast) { - var queryArr = (queryStr || '').replace('?', '').split('&'), - n = queryArr.length, - obj = {}, - item, val; - while (n--) { - item = queryArr[n].split('='); - val = shouldTypecast === false? item[1] : typecast(item[1]); - obj[item[0]] = isString(val)? decodeURIComponent(val) : val; - } - return obj; - } - - return decode; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/encode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/encode.js deleted file mode 100644 index bd72a5b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/encode.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../object/forOwn'], function (forOwn) { - - /** - * Encode object into a query string. - */ - function encode(obj){ - var query = []; - forOwn(obj, function(val, key){ - query.push( key +'='+ encodeURIComponent(val) ); - }); - return (query.length)? '?'+ query.join('&') : ''; - } - - return encode; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/getParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/getParam.js deleted file mode 100644 index d9813724..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/getParam.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../string/typecast', './getQuery'], function (typecast, getQuery) { - - /** - * Get query parameter value. - */ - function getParam(url, param, shouldTypecast){ - var regexp = new RegExp('(\\?|&)'+ param + '=([^&]*)'), //matches `?param=value` or `¶m=value`, value = $2 - result = regexp.exec( getQuery(url) ), - val = (result && result[2])? result[2] : null; - return shouldTypecast === false? val : typecast(val); - } - - return getParam; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/getQuery.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/getQuery.js deleted file mode 100644 index aa3d99f3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/getQuery.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * Gets full query as string with all special chars decoded. - */ - function getQuery(url) { - url = url.replace(/#.*/, ''); //removes hash (to avoid getting hash query) - var queryString = /\?[a-zA-Z0-9\=\&\%\$\-\_\.\+\!\*\'\(\)\,]+/.exec(url); //valid chars according to: http://www.ietf.org/rfc/rfc1738.txt - return (queryString)? decodeURIComponent(queryString[0]) : ''; - } - - return getQuery; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/parse.js deleted file mode 100644 index ac153e3f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/parse.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./decode', './getQuery'], function (decode, getQuery) { - - /** - * Get query string, parses and decodes it. - */ - function parse(url, shouldTypecast) { - return decode(getQuery(url), shouldTypecast); - } - - return parse; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/setParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/setParam.js deleted file mode 100644 index 97081aa7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/queryString/setParam.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Set query string parameter value - */ - function setParam(url, paramName, value){ - url = url || ''; - - var re = new RegExp('(\\?|&)'+ paramName +'=[^&]*' ); - var param = paramName +'='+ encodeURIComponent( value ); - - if ( re.test(url) ) { - return url.replace(re, '$1'+ param); - } else { - if (url.indexOf('?') === -1) { - url += '?'; - } - if (url.indexOf('=') !== -1) { - url += '&'; - } - return url + param; - } - - } - - return setParam; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random.js deleted file mode 100644 index b2641ee3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random.js +++ /dev/null @@ -1,16 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'choice' : require('./random/choice'), - 'guid' : require('./random/guid'), - 'rand' : require('./random/rand'), - 'randBit' : require('./random/randBit'), - 'randHex' : require('./random/randHex'), - 'randInt' : require('./random/randInt'), - 'randSign' : require('./random/randSign'), - 'random' : require('./random/random') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/choice.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/choice.js deleted file mode 100644 index 0d0c38df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/choice.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./randInt', '../lang/isArray'], function (randInt, isArray) { - - /** - * Returns a random element from the supplied arguments - * or from the array (if single argument is an array). - */ - function choice(items) { - var target = (arguments.length === 1 && isArray(items))? items : arguments; - return target[ randInt(0, target.length - 1) ]; - } - - return choice; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/guid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/guid.js deleted file mode 100644 index 82f3a2db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/guid.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./randHex', './choice'], function (randHex, choice) { - - /** - * Returns pseudo-random guid (UUID v4) - * IMPORTANT: it's not totally "safe" since randHex/choice uses Math.random - * by default and sequences can be predicted in some cases. See the - * "random/random" documentation for more info about it and how to replace - * the default PRNG. - */ - function guid() { - return ( - randHex(8)+'-'+ - randHex(4)+'-'+ - // v4 UUID always contain "4" at this position to specify it was - // randomly generated - '4' + randHex(3) +'-'+ - // v4 UUID always contain chars [a,b,8,9] at this position - choice(8, 9, 'a', 'b') + randHex(3)+'-'+ - randHex(12) - ); - } - return guid; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/rand.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/rand.js deleted file mode 100644 index b8c231dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/rand.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./random', '../number/MIN_INT', '../number/MAX_INT'], function(random, MIN_INT, MAX_INT){ - - /** - * Returns random number inside range - */ - function rand(min, max){ - min = min == null? MIN_INT : min; - max = max == null? MAX_INT : max; - return min + (max - min) * random(); - } - - return rand; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randBit.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randBit.js deleted file mode 100644 index b3422d2d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randBit.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['./random'], function (random) { - - /** - * Returns random bit (0 or 1) - */ - function randomBit() { - return random() > 0.5? 1 : 0; - } - - return randomBit; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randHex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randHex.js deleted file mode 100644 index 6e9bf1c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randHex.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./choice'], function (choice) { - - var _chars = '0123456789abcdef'.split(''); - - /** - * Returns a random hexadecimal string - */ - function randHex(size){ - size = size && size > 0? size : 6; - var str = ''; - while (size--) { - str += choice(_chars); - } - return str; - } - - return randHex; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randInt.js deleted file mode 100644 index 1750e9de..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randInt.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../number/MIN_INT', '../number/MAX_INT', './rand'], function(MIN_INT, MAX_INT, rand){ - - /** - * Gets random integer inside range or snap to min/max values. - */ - function randInt(min, max){ - min = min == null? MIN_INT : ~~min; - max = max == null? MAX_INT : ~~max; - // can't be max + 0.5 otherwise it will round up if `rand` - // returns `max` causing it to overflow range. - // -0.5 and + 0.49 are required to avoid bias caused by rounding - return Math.round( rand(min - 0.5, max + 0.499999999999) ); - } - - return randInt; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randSign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randSign.js deleted file mode 100644 index 4141cdf6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/randSign.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['./random'], function (random) { - - /** - * Returns random sign (-1 or 1) - */ - function randomSign() { - return random() > 0.5? 1 : -1; - } - - return randomSign; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/random.js deleted file mode 100644 index 4270822e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/random/random.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function () { - - /** - * Just a wrapper to Math.random. No methods inside mout/random should call - * Math.random() directly so we can inject the pseudo-random number - * generator if needed (ie. in case we need a seeded random or a better - * algorithm than the native one) - */ - function random(){ - return random.get(); - } - - // we expose the method so it can be swapped if needed - random.get = Math.random; - - return random; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string.js deleted file mode 100644 index 3f5fd804..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string.js +++ /dev/null @@ -1,45 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'WHITE_SPACES' : require('./string/WHITE_SPACES'), - 'camelCase' : require('./string/camelCase'), - 'contains' : require('./string/contains'), - 'crop' : require('./string/crop'), - 'endsWith' : require('./string/endsWith'), - 'escapeHtml' : require('./string/escapeHtml'), - 'escapeRegExp' : require('./string/escapeRegExp'), - 'escapeUnicode' : require('./string/escapeUnicode'), - 'hyphenate' : require('./string/hyphenate'), - 'interpolate' : require('./string/interpolate'), - 'lowerCase' : require('./string/lowerCase'), - 'lpad' : require('./string/lpad'), - 'ltrim' : require('./string/ltrim'), - 'makePath' : require('./string/makePath'), - 'normalizeLineBreaks' : require('./string/normalizeLineBreaks'), - 'pascalCase' : require('./string/pascalCase'), - 'properCase' : require('./string/properCase'), - 'removeNonASCII' : require('./string/removeNonASCII'), - 'removeNonWord' : require('./string/removeNonWord'), - 'repeat' : require('./string/repeat'), - 'replace' : require('./string/replace'), - 'replaceAccents' : require('./string/replaceAccents'), - 'rpad' : require('./string/rpad'), - 'rtrim' : require('./string/rtrim'), - 'sentenceCase' : require('./string/sentenceCase'), - 'slugify' : require('./string/slugify'), - 'startsWith' : require('./string/startsWith'), - 'stripHtmlTags' : require('./string/stripHtmlTags'), - 'trim' : require('./string/trim'), - 'truncate' : require('./string/truncate'), - 'typecast' : require('./string/typecast'), - 'unCamelCase' : require('./string/unCamelCase'), - 'underscore' : require('./string/underscore'), - 'unescapeHtml' : require('./string/unescapeHtml'), - 'unescapeUnicode' : require('./string/unescapeUnicode'), - 'unhyphenate' : require('./string/unhyphenate'), - 'upperCase' : require('./string/upperCase') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/WHITE_SPACES.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/WHITE_SPACES.js deleted file mode 100644 index e830d86d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/WHITE_SPACES.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function() { - /** - * Contains all Unicode white-spaces. Taken from - * http://en.wikipedia.org/wiki/Whitespace_character. - */ - return [ - ' ', '\n', '\r', '\t', '\f', '\v', '\u00A0', '\u1680', '\u180E', - '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', - '\u2007', '\u2008', '\u2009', '\u200A', '\u2028', '\u2029', '\u202F', - '\u205F', '\u3000' - ]; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/camelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/camelCase.js deleted file mode 100644 index 02e6c04d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/camelCase.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString', './replaceAccents', './removeNonWord', './upperCase', './lowerCase'], function(toString, replaceAccents, removeNonWord, upperCase, lowerCase){ - /** - * Convert string to camelCase text. - */ - function camelCase(str){ - str = toString(str); - str = replaceAccents(str); - str = removeNonWord(str) - .replace(/[\-_]/g, ' ') //convert all hyphens and underscores to spaces - .replace(/\s[a-z]/g, upperCase) //convert first char of each word to UPPERCASE - .replace(/\s+/g, '') //remove spaces - .replace(/^[A-Z]/g, lowerCase); //convert first char to lowercase - return str; - } - return camelCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/contains.js deleted file mode 100644 index 825b5a5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/contains.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Searches for a given substring - */ - function contains(str, substring, fromIndex){ - str = toString(str); - substring = toString(substring); - return str.indexOf(substring, fromIndex) !== -1; - } - - return contains; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/crop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/crop.js deleted file mode 100644 index 3c073f05..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/crop.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './truncate'], function (toString, truncate) { - /** - * Truncate string at full words. - */ - function crop(str, maxChars, append) { - str = toString(str); - return truncate(str, maxChars, append, true); - } - - return crop; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/endsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/endsWith.js deleted file mode 100644 index 31a73f20..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/endsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function(toString) { - /** - * Checks if string ends with specified suffix. - */ - function endsWith(str, suffix) { - str = toString(str); - suffix = toString(suffix); - - return str.indexOf(suffix, str.length - suffix.length) !== -1; - } - - return endsWith; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/escapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/escapeHtml.js deleted file mode 100644 index de34b61b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/escapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Escapes a string for insertion into HTML. - */ - function escapeHtml(str){ - str = toString(str) - .replace(/&/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/'/g, ''') - .replace(/"/g, '"'); - return str; - } - - return escapeHtml; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/escapeRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/escapeRegExp.js deleted file mode 100644 index 32facac0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/escapeRegExp.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../lang/toString'], function(toString) { - - var ESCAPE_CHARS = /[\\.+*?\^$\[\](){}\/'#]/g; - - /** - * Escape RegExp string chars. - */ - function escapeRegExp(str) { - str = toString(str); - return str.replace(ESCAPE_CHARS,'\\$&'); - } - - return escapeRegExp; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/escapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/escapeUnicode.js deleted file mode 100644 index bd5e8c4c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/escapeUnicode.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Escape string into unicode sequences - */ - function escapeUnicode(str, shouldEscapePrintable){ - str = toString(str); - return str.replace(/[\s\S]/g, function(ch){ - // skip printable ASCII chars if we should not escape them - if (!shouldEscapePrintable && (/[\x20-\x7E]/).test(ch)) { - return ch; - } - // we use "000" and slice(-4) for brevity, need to pad zeros, - // unicode escape always have 4 chars after "\u" - return '\\u'+ ('000'+ ch.charCodeAt(0).toString(16)).slice(-4); - }); - } - - return escapeUnicode; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/hyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/hyphenate.js deleted file mode 100644 index 679c405c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/hyphenate.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toString', './slugify', './unCamelCase'], function(toString, slugify, unCamelCase){ - /** - * Replaces spaces with hyphens, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function hyphenate(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "-"); - } - - return hyphenate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/interpolate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/interpolate.js deleted file mode 100644 index ecb8ba80..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/interpolate.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function(toString) { - - var stache = /\{\{(\w+)\}\}/g; //mustache-like - - /** - * String interpolation - */ - function interpolate(template, replacements, syntax){ - template = toString(template); - var replaceFn = function(match, prop){ - return (prop in replacements)? toString(replacements[prop]) : ''; - }; - return template.replace(syntax || stache, replaceFn); - } - - return interpolate; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/lowerCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/lowerCase.js deleted file mode 100644 index b045d69c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/lowerCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * "Safer" String.toLowerCase() - */ - function lowerCase(str){ - str = toString(str); - return str.toLowerCase(); - } - - return lowerCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/lpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/lpad.js deleted file mode 100644 index ea4f5fbf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/lpad.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString', './repeat'], function(toString, repeat) { - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function lpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - - return ((str.length < minLen) - ? repeat(ch, minLen - str.length) + str : str); - } - - return lpad; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/ltrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/ltrim.js deleted file mode 100644 index 477df953..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/ltrim.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES'], function(toString, WHITE_SPACES){ - /** - * Remove chars from beginning of string. - */ - function ltrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var start = 0, - len = str.length, - charLen = chars.length, - found = true, - i, c; - - while (found && start < len) { - found = false; - i = -1; - c = str.charAt(start); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - start++; - break; - } - } - } - - return (start >= len) ? '' : str.substr(start, len); - } - - return ltrim; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/makePath.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/makePath.js deleted file mode 100644 index 7aa7baba..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/makePath.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../array/join'], function(join){ - - /** - * Group arguments as path segments, if any of the args is `null` or an - * empty string it will be ignored from resulting path. - */ - function makePath(var_args){ - var result = join(Array.prototype.slice.call(arguments), '/'); - return result.replace(/\/{2,}/g, '/'); - } - - return makePath; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/normalizeLineBreaks.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/normalizeLineBreaks.js deleted file mode 100644 index 44e4194f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/normalizeLineBreaks.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function (toString) { - - /** - * Convert line-breaks from DOS/MAC to a single standard (UNIX by default) - */ - function normalizeLineBreaks(str, lineEnd) { - str = toString(str); - lineEnd = lineEnd || '\n'; - - return str - .replace(/\r\n/g, lineEnd) // DOS - .replace(/\r/g, lineEnd) // Mac - .replace(/\n/g, lineEnd); // Unix - } - - return normalizeLineBreaks; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/pascalCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/pascalCase.js deleted file mode 100644 index ead9ead4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/pascalCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './camelCase', './upperCase'], function(toString, camelCase, upperCase){ - /** - * camelCase + UPPERCASE first char - */ - function pascalCase(str){ - str = toString(str); - return camelCase(str).replace(/^[a-z]/, upperCase); - } - - return pascalCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/properCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/properCase.js deleted file mode 100644 index 2987b507..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/properCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './lowerCase', './upperCase'], function(toString, lowerCase, upperCase){ - /** - * UPPERCASE first char of each word. - */ - function properCase(str){ - str = toString(str); - return lowerCase(str).replace(/^\w|\s\w/g, upperCase); - } - - return properCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonASCII.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonASCII.js deleted file mode 100644 index 4905869d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonASCII.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove non-printable ASCII chars - */ - function removeNonASCII(str){ - str = toString(str); - - // Matches non-printable ASCII chars - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters - return str.replace(/[^\x20-\x7E]/g, ''); - } - - return removeNonASCII; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonWord.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonWord.js deleted file mode 100644 index 2b1a2040..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonWord.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove non-word chars. - */ - function removeNonWord(str){ - str = toString(str); - return str.replace(/[^0-9a-zA-Z\xC0-\xFF \-_]/g, ''); - } - - return removeNonWord; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/repeat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/repeat.js deleted file mode 100644 index 02f5659f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/repeat.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function(toString){ - - /** - * Repeat string n times - */ - function repeat(str, n){ - str = toString(str); - return (new Array(n + 1)).join(str); - } - - return repeat; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/replace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/replace.js deleted file mode 100644 index 8b762fdc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/replace.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../lang/toString', '../lang/toArray'], function (toString, toArray) { - - /** - * Replace string(s) with the replacement(s) in the source. - */ - function replace(str, search, replacements) { - str = toString(str); - search = toArray(search); - replacements = toArray(replacements); - - var searchLength = search.length, - replacementsLength = replacements.length; - - if (replacementsLength !== 1 && searchLength !== replacementsLength) { - throw new Error('Unequal number of searches and replacements'); - } - - var i = -1; - while (++i < searchLength) { - // Use the first replacement for all searches if only one - // replacement is provided - str = str.replace( - search[i], - replacements[(replacementsLength === 1) ? 0 : i]); - } - - return str; - } - - return replace; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/replaceAccents.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/replaceAccents.js deleted file mode 100644 index 3a63f55a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/replaceAccents.js +++ /dev/null @@ -1,36 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Replaces all accented chars with regular ones - */ - function replaceAccents(str){ - str = toString(str); - - // verifies if the String has accents and replace them - if (str.search(/[\xC0-\xFF]/g) > -1) { - str = str - .replace(/[\xC0-\xC5]/g, "A") - .replace(/[\xC6]/g, "AE") - .replace(/[\xC7]/g, "C") - .replace(/[\xC8-\xCB]/g, "E") - .replace(/[\xCC-\xCF]/g, "I") - .replace(/[\xD0]/g, "D") - .replace(/[\xD1]/g, "N") - .replace(/[\xD2-\xD6\xD8]/g, "O") - .replace(/[\xD9-\xDC]/g, "U") - .replace(/[\xDD]/g, "Y") - .replace(/[\xDE]/g, "P") - .replace(/[\xE0-\xE5]/g, "a") - .replace(/[\xE6]/g, "ae") - .replace(/[\xE7]/g, "c") - .replace(/[\xE8-\xEB]/g, "e") - .replace(/[\xEC-\xEF]/g, "i") - .replace(/[\xF1]/g, "n") - .replace(/[\xF2-\xF6\xF8]/g, "o") - .replace(/[\xF9-\xFC]/g, "u") - .replace(/[\xFE]/g, "p") - .replace(/[\xFD\xFF]/g, "y"); - } - return str; - } - return replaceAccents; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/rpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/rpad.js deleted file mode 100644 index 2efd9c88..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/rpad.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString', './repeat'], function (toString, repeat) { - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function rpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - return (str.length < minLen)? str + repeat(ch, minLen - str.length) : str; - } - - return rpad; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/rtrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/rtrim.js deleted file mode 100644 index a4cc282d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/rtrim.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES'], function(toString, WHITE_SPACES){ - /** - * Remove chars from end of string. - */ - function rtrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var end = str.length - 1, - charLen = chars.length, - found = true, - i, c; - - while (found && end >= 0) { - found = false; - i = -1; - c = str.charAt(end); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - end--; - break; - } - } - } - - return (end >= 0) ? str.substring(0, end + 1) : ''; - } - - return rtrim; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/sentenceCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/sentenceCase.js deleted file mode 100644 index cfe45af5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/sentenceCase.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString', './lowerCase', './upperCase'], function(toString, lowerCase, upperCase){ - /** - * UPPERCASE first char of each sentence and lowercase other chars. - */ - function sentenceCase(str){ - str = toString(str); - - // Replace first char of each sentence (new line or after '.\s+') to - // UPPERCASE - return lowerCase(str).replace(/(^\w)|\.\s+(\w)/gm, upperCase); - } - return sentenceCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/slugify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/slugify.js deleted file mode 100644 index c6d68c7e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/slugify.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['../lang/toString', './replaceAccents', './removeNonWord', './trim'], function(toString, replaceAccents, removeNonWord, trim){ - /** - * Convert to lower case, remove accents, remove non-word chars and - * replace spaces with the specified delimeter. - * Does not split camelCase text. - */ - function slugify(str, delimeter){ - str = toString(str); - - if (delimeter == null) { - delimeter = "-"; - } - str = replaceAccents(str); - str = removeNonWord(str); - str = trim(str) //should come after removeNonWord - .replace(/ +/g, delimeter) //replace spaces with delimeter - .toLowerCase(); - return str; - } - return slugify; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/startsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/startsWith.js deleted file mode 100644 index 88ae5453..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/startsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function (toString) { - /** - * Checks if string starts with specified prefix. - */ - function startsWith(str, prefix) { - str = toString(str); - prefix = toString(prefix); - - return str.indexOf(prefix) === 0; - } - - return startsWith; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/stripHtmlTags.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/stripHtmlTags.js deleted file mode 100644 index e8da956d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/stripHtmlTags.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove HTML tags from string. - */ - function stripHtmlTags(str){ - str = toString(str); - - return str.replace(/<[^>]*>/g, ''); - } - return stripHtmlTags; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/trim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/trim.js deleted file mode 100644 index 55526041..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/trim.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES', './ltrim', './rtrim'], function(toString, WHITE_SPACES, ltrim, rtrim){ - /** - * Remove white-spaces from beginning and end of string. - */ - function trim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - return ltrim(rtrim(str, chars), chars); - } - - return trim; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/truncate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/truncate.js deleted file mode 100644 index 34000d9f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/truncate.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../lang/toString', './trim'], function(toString, trim){ - /** - * Limit number of chars. - */ - function truncate(str, maxChars, append, onlyFullWords){ - str = toString(str); - append = append || '...'; - maxChars = onlyFullWords? maxChars + 1 : maxChars; - - str = trim(str); - if(str.length <= maxChars){ - return str; - } - str = str.substr(0, maxChars - append.length); - //crop at last space or remove trailing whitespace - str = onlyFullWords? str.substr(0, str.lastIndexOf(' ')) : trim(str); - return str + append; - } - return truncate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/typecast.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/typecast.js deleted file mode 100644 index a7c83153..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/typecast.js +++ /dev/null @@ -1,29 +0,0 @@ -define(function () { - - var UNDEF; - - /** - * Parses string and convert it into a native value. - */ - function typecast(val) { - var r; - if ( val === null || val === 'null' ) { - r = null; - } else if ( val === 'true' ) { - r = true; - } else if ( val === 'false' ) { - r = false; - } else if ( val === UNDEF || val === 'undefined' ) { - r = UNDEF; - } else if ( val === '' || isNaN(val) ) { - //isNaN('') returns false - r = val; - } else { - //parseFloat(null || '') returns NaN - r = parseFloat(val); - } - return r; - } - - return typecast; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unCamelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unCamelCase.js deleted file mode 100644 index eeef39b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unCamelCase.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../lang/toString'], function(toString){ - - var CAMEL_CASE_BORDER = /([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g; - - /** - * Add space between camelCase text. - */ - function unCamelCase(str, delimiter){ - if (delimiter == null) { - delimiter = ' '; - } - - function join(str, c1, c2) { - return c1 + delimiter + c2; - } - - str = toString(str); - str = str.replace(CAMEL_CASE_BORDER, join); - str = str.toLowerCase(); //add space between camelCase text - return str; - } - return unCamelCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/underscore.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/underscore.js deleted file mode 100644 index 75dd4649..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/underscore.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './slugify', './unCamelCase'], function(toString, slugify, unCamelCase){ - /** - * Replaces spaces with underscores, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function underscore(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "_"); - } - return underscore; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeHtml.js deleted file mode 100644 index 173c69c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function (toString) { - - /** - * Unescapes HTML special chars - */ - function unescapeHtml(str){ - str = toString(str) - .replace(/&/g , '&') - .replace(/</g , '<') - .replace(/>/g , '>') - .replace(/'/g , "'") - .replace(/"/g, '"'); - return str; - } - - return unescapeHtml; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeUnicode.js deleted file mode 100644 index d4a7ba1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeUnicode.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Unescape unicode char sequences - */ - function unescapeUnicode(str){ - str = toString(str); - return str.replace(/\\u[0-9a-f]{4}/g, function(ch){ - var code = parseInt(ch.slice(2), 16); - return String.fromCharCode(code); - }); - } - - return unescapeUnicode; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unhyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unhyphenate.js deleted file mode 100644 index 6ac2fa4c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/unhyphenate.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Replaces hyphens with spaces. (only hyphens between word chars) - */ - function unhyphenate(str){ - str = toString(str); - return str.replace(/(\w)(-)(\w)/g, '$1 $3'); - } - return unhyphenate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/upperCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/upperCase.js deleted file mode 100644 index 8b2073e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/string/upperCase.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * "Safer" String.toUpperCase() - */ - function upperCase(str){ - str = toString(str); - return str.toUpperCase(); - } - return upperCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time.js deleted file mode 100644 index 67c90685..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'convert' : require('./time/convert'), - 'now' : require('./time/now'), - 'parseMs' : require('./time/parseMs'), - 'toTimeString' : require('./time/toTimeString') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/convert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/convert.js deleted file mode 100644 index 2de0cf2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/convert.js +++ /dev/null @@ -1,41 +0,0 @@ -define(function () { - - /** - * convert time into another unit - */ - function convert(val, sourceUnitName, destinationUnitName){ - destinationUnitName = destinationUnitName || 'ms'; - return (val * getUnit(sourceUnitName)) / getUnit(destinationUnitName); - } - - - //TODO: maybe extract to a separate module - function getUnit(unitName){ - switch(unitName){ - case 'ms': - case 'millisecond': - return 1; - case 's': - case 'second': - return 1000; - case 'm': - case 'minute': - return 60000; - case 'h': - case 'hour': - return 3600000; - case 'd': - case 'day': - return 86400000; - case 'w': - case 'week': - return 604800000; - default: - throw new Error('"'+ unitName + '" is not a valid unit'); - } - } - - - return convert; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/now.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/now.js deleted file mode 100644 index a3a38bcb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/now.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - - /** - * Get current time in miliseconds - */ - var now = (typeof Date.now === 'function')? Date.now : function(){ - return +(new Date()); - }; - - return now; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/parseMs.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/parseMs.js deleted file mode 100644 index 964929ae..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/parseMs.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['../math/countSteps'], function(countSteps){ - - /** - * Parse timestamp into an object. - */ - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - return parseMs; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/toTimeString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/toTimeString.js deleted file mode 100644 index edf18218..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/src/time/toTimeString.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../math/countSteps', '../number/pad'], function(countSteps, pad){ - - var HOUR = 3600000, - MINUTE = 60000, - SECOND = 1000; - - /** - * Format timestamp into a time string. - */ - function toTimeString(ms){ - var h = ms < HOUR ? 0 : countSteps(ms, HOUR), - m = ms < MINUTE ? 0 : countSteps(ms, MINUTE, 60), - s = ms < SECOND ? 0 : countSteps(ms, SECOND, 60), - str = ''; - - str += h? h + ':' : ''; - str += pad(m, 2) + ':'; - str += pad(s, 2); - - return str; - } - return toTimeString; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string.js deleted file mode 100644 index 7f0ca3bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string.js +++ /dev/null @@ -1,45 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'WHITE_SPACES' : require('./string/WHITE_SPACES'), - 'camelCase' : require('./string/camelCase'), - 'contains' : require('./string/contains'), - 'crop' : require('./string/crop'), - 'endsWith' : require('./string/endsWith'), - 'escapeHtml' : require('./string/escapeHtml'), - 'escapeRegExp' : require('./string/escapeRegExp'), - 'escapeUnicode' : require('./string/escapeUnicode'), - 'hyphenate' : require('./string/hyphenate'), - 'interpolate' : require('./string/interpolate'), - 'lowerCase' : require('./string/lowerCase'), - 'lpad' : require('./string/lpad'), - 'ltrim' : require('./string/ltrim'), - 'makePath' : require('./string/makePath'), - 'normalizeLineBreaks' : require('./string/normalizeLineBreaks'), - 'pascalCase' : require('./string/pascalCase'), - 'properCase' : require('./string/properCase'), - 'removeNonASCII' : require('./string/removeNonASCII'), - 'removeNonWord' : require('./string/removeNonWord'), - 'repeat' : require('./string/repeat'), - 'replace' : require('./string/replace'), - 'replaceAccents' : require('./string/replaceAccents'), - 'rpad' : require('./string/rpad'), - 'rtrim' : require('./string/rtrim'), - 'sentenceCase' : require('./string/sentenceCase'), - 'slugify' : require('./string/slugify'), - 'startsWith' : require('./string/startsWith'), - 'stripHtmlTags' : require('./string/stripHtmlTags'), - 'trim' : require('./string/trim'), - 'truncate' : require('./string/truncate'), - 'typecast' : require('./string/typecast'), - 'unCamelCase' : require('./string/unCamelCase'), - 'underscore' : require('./string/underscore'), - 'unescapeHtml' : require('./string/unescapeHtml'), - 'unescapeUnicode' : require('./string/unescapeUnicode'), - 'unhyphenate' : require('./string/unhyphenate'), - 'upperCase' : require('./string/upperCase') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/WHITE_SPACES.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/WHITE_SPACES.js deleted file mode 100644 index 03e01254..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/WHITE_SPACES.js +++ /dev/null @@ -1,12 +0,0 @@ - - /** - * Contains all Unicode white-spaces. Taken from - * http://en.wikipedia.org/wiki/Whitespace_character. - */ - module.exports = [ - ' ', '\n', '\r', '\t', '\f', '\v', '\u00A0', '\u1680', '\u180E', - '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', - '\u2007', '\u2008', '\u2009', '\u200A', '\u2028', '\u2029', '\u202F', - '\u205F', '\u3000' - ]; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/camelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/camelCase.js deleted file mode 100644 index aadb69a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/camelCase.js +++ /dev/null @@ -1,20 +0,0 @@ -var toString = require('../lang/toString'); -var replaceAccents = require('./replaceAccents'); -var removeNonWord = require('./removeNonWord'); -var upperCase = require('./upperCase'); -var lowerCase = require('./lowerCase'); - /** - * Convert string to camelCase text. - */ - function camelCase(str){ - str = toString(str); - str = replaceAccents(str); - str = removeNonWord(str) - .replace(/[\-_]/g, ' ') //convert all hyphens and underscores to spaces - .replace(/\s[a-z]/g, upperCase) //convert first char of each word to UPPERCASE - .replace(/\s+/g, '') //remove spaces - .replace(/^[A-Z]/g, lowerCase); //convert first char to lowercase - return str; - } - module.exports = camelCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/contains.js deleted file mode 100644 index cb22cae4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/contains.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Searches for a given substring - */ - function contains(str, substring, fromIndex){ - str = toString(str); - substring = toString(substring); - return str.indexOf(substring, fromIndex) !== -1; - } - - module.exports = contains; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/crop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/crop.js deleted file mode 100644 index 53b93b49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/crop.js +++ /dev/null @@ -1,12 +0,0 @@ -var toString = require('../lang/toString'); -var truncate = require('./truncate'); - /** - * Truncate string at full words. - */ - function crop(str, maxChars, append) { - str = toString(str); - return truncate(str, maxChars, append, true); - } - - module.exports = crop; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/endsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/endsWith.js deleted file mode 100644 index d504e9dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/endsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Checks if string ends with specified suffix. - */ - function endsWith(str, suffix) { - str = toString(str); - suffix = toString(suffix); - - return str.indexOf(suffix, str.length - suffix.length) !== -1; - } - - module.exports = endsWith; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/escapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/escapeHtml.js deleted file mode 100644 index e67c4b21..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/escapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Escapes a string for insertion into HTML. - */ - function escapeHtml(str){ - str = toString(str) - .replace(/&/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/'/g, ''') - .replace(/"/g, '"'); - return str; - } - - module.exports = escapeHtml; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/escapeRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/escapeRegExp.js deleted file mode 100644 index 70cb84ff..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/escapeRegExp.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); - - var ESCAPE_CHARS = /[\\.+*?\^$\[\](){}\/'#]/g; - - /** - * Escape RegExp string chars. - */ - function escapeRegExp(str) { - str = toString(str); - return str.replace(ESCAPE_CHARS,'\\$&'); - } - - module.exports = escapeRegExp; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/escapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/escapeUnicode.js deleted file mode 100644 index ec649adf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/escapeUnicode.js +++ /dev/null @@ -1,21 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Escape string into unicode sequences - */ - function escapeUnicode(str, shouldEscapePrintable){ - str = toString(str); - return str.replace(/[\s\S]/g, function(ch){ - // skip printable ASCII chars if we should not escape them - if (!shouldEscapePrintable && (/[\x20-\x7E]/).test(ch)) { - return ch; - } - // we use "000" and slice(-4) for brevity, need to pad zeros, - // unicode escape always have 4 chars after "\u" - return '\\u'+ ('000'+ ch.charCodeAt(0).toString(16)).slice(-4); - }); - } - - module.exports = escapeUnicode; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/hyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/hyphenate.js deleted file mode 100644 index 95e32436..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/hyphenate.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); -var slugify = require('./slugify'); -var unCamelCase = require('./unCamelCase'); - /** - * Replaces spaces with hyphens, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function hyphenate(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "-"); - } - - module.exports = hyphenate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/interpolate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/interpolate.js deleted file mode 100644 index ac88fac2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/interpolate.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - var stache = /\{\{(\w+)\}\}/g; //mustache-like - - /** - * String interpolation - */ - function interpolate(template, replacements, syntax){ - template = toString(template); - var replaceFn = function(match, prop){ - return (prop in replacements)? toString(replacements[prop]) : ''; - }; - return template.replace(syntax || stache, replaceFn); - } - - module.exports = interpolate; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/lowerCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/lowerCase.js deleted file mode 100644 index 30bb7ad9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/lowerCase.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * "Safer" String.toLowerCase() - */ - function lowerCase(str){ - str = toString(str); - return str.toLowerCase(); - } - - module.exports = lowerCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/lpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/lpad.js deleted file mode 100644 index 694d711e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/lpad.js +++ /dev/null @@ -1,17 +0,0 @@ -var toString = require('../lang/toString'); -var repeat = require('./repeat'); - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function lpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - - return ((str.length < minLen) - ? repeat(ch, minLen - str.length) + str : str); - } - - module.exports = lpad; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/ltrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/ltrim.js deleted file mode 100644 index 23d7b33f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/ltrim.js +++ /dev/null @@ -1,34 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); - /** - * Remove chars from beginning of string. - */ - function ltrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var start = 0, - len = str.length, - charLen = chars.length, - found = true, - i, c; - - while (found && start < len) { - found = false; - i = -1; - c = str.charAt(start); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - start++; - break; - } - } - } - - return (start >= len) ? '' : str.substr(start, len); - } - - module.exports = ltrim; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/makePath.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/makePath.js deleted file mode 100644 index 69aef310..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/makePath.js +++ /dev/null @@ -1,13 +0,0 @@ -var join = require('../array/join'); - - /** - * Group arguments as path segments, if any of the args is `null` or an - * empty string it will be ignored from resulting path. - */ - function makePath(var_args){ - var result = join(Array.prototype.slice.call(arguments), '/'); - return result.replace(/\/{2,}/g, '/'); - } - - module.exports = makePath; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/normalizeLineBreaks.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/normalizeLineBreaks.js deleted file mode 100644 index 8a8dccfd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/normalizeLineBreaks.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Convert line-breaks from DOS/MAC to a single standard (UNIX by default) - */ - function normalizeLineBreaks(str, lineEnd) { - str = toString(str); - lineEnd = lineEnd || '\n'; - - return str - .replace(/\r\n/g, lineEnd) // DOS - .replace(/\r/g, lineEnd) // Mac - .replace(/\n/g, lineEnd); // Unix - } - - module.exports = normalizeLineBreaks; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/pascalCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/pascalCase.js deleted file mode 100644 index fd190353..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/pascalCase.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var camelCase = require('./camelCase'); -var upperCase = require('./upperCase'); - /** - * camelCase + UPPERCASE first char - */ - function pascalCase(str){ - str = toString(str); - return camelCase(str).replace(/^[a-z]/, upperCase); - } - - module.exports = pascalCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/properCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/properCase.js deleted file mode 100644 index 61636be4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/properCase.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var lowerCase = require('./lowerCase'); -var upperCase = require('./upperCase'); - /** - * UPPERCASE first char of each word. - */ - function properCase(str){ - str = toString(str); - return lowerCase(str).replace(/^\w|\s\w/g, upperCase); - } - - module.exports = properCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/removeNonASCII.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/removeNonASCII.js deleted file mode 100644 index fb463816..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/removeNonASCII.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove non-printable ASCII chars - */ - function removeNonASCII(str){ - str = toString(str); - - // Matches non-printable ASCII chars - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters - return str.replace(/[^\x20-\x7E]/g, ''); - } - - module.exports = removeNonASCII; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/removeNonWord.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/removeNonWord.js deleted file mode 100644 index bdd153b9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/removeNonWord.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove non-word chars. - */ - function removeNonWord(str){ - str = toString(str); - return str.replace(/[^0-9a-zA-Z\xC0-\xFF \-_]/g, ''); - } - - module.exports = removeNonWord; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/repeat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/repeat.js deleted file mode 100644 index 0f9b4754..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/repeat.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Repeat string n times - */ - function repeat(str, n){ - str = toString(str); - return (new Array(n + 1)).join(str); - } - - module.exports = repeat; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/replace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/replace.js deleted file mode 100644 index 14433fc7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/replace.js +++ /dev/null @@ -1,33 +0,0 @@ -var toString = require('../lang/toString'); -var toArray = require('../lang/toArray'); - - /** - * Replace string(s) with the replacement(s) in the source. - */ - function replace(str, search, replacements) { - str = toString(str); - search = toArray(search); - replacements = toArray(replacements); - - var searchLength = search.length, - replacementsLength = replacements.length; - - if (replacementsLength !== 1 && searchLength !== replacementsLength) { - throw new Error('Unequal number of searches and replacements'); - } - - var i = -1; - while (++i < searchLength) { - // Use the first replacement for all searches if only one - // replacement is provided - str = str.replace( - search[i], - replacements[(replacementsLength === 1) ? 0 : i]); - } - - return str; - } - - module.exports = replace; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/replaceAccents.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/replaceAccents.js deleted file mode 100644 index bb221265..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/replaceAccents.js +++ /dev/null @@ -1,36 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Replaces all accented chars with regular ones - */ - function replaceAccents(str){ - str = toString(str); - - // verifies if the String has accents and replace them - if (str.search(/[\xC0-\xFF]/g) > -1) { - str = str - .replace(/[\xC0-\xC5]/g, "A") - .replace(/[\xC6]/g, "AE") - .replace(/[\xC7]/g, "C") - .replace(/[\xC8-\xCB]/g, "E") - .replace(/[\xCC-\xCF]/g, "I") - .replace(/[\xD0]/g, "D") - .replace(/[\xD1]/g, "N") - .replace(/[\xD2-\xD6\xD8]/g, "O") - .replace(/[\xD9-\xDC]/g, "U") - .replace(/[\xDD]/g, "Y") - .replace(/[\xDE]/g, "P") - .replace(/[\xE0-\xE5]/g, "a") - .replace(/[\xE6]/g, "ae") - .replace(/[\xE7]/g, "c") - .replace(/[\xE8-\xEB]/g, "e") - .replace(/[\xEC-\xEF]/g, "i") - .replace(/[\xF1]/g, "n") - .replace(/[\xF2-\xF6\xF8]/g, "o") - .replace(/[\xF9-\xFC]/g, "u") - .replace(/[\xFE]/g, "p") - .replace(/[\xFD\xFF]/g, "y"); - } - return str; - } - module.exports = replaceAccents; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/rpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/rpad.js deleted file mode 100644 index 99f6378d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/rpad.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var repeat = require('./repeat'); - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function rpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - return (str.length < minLen)? str + repeat(ch, minLen - str.length) : str; - } - - module.exports = rpad; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/rtrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/rtrim.js deleted file mode 100644 index 66ba80e9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/rtrim.js +++ /dev/null @@ -1,33 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); - /** - * Remove chars from end of string. - */ - function rtrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var end = str.length - 1, - charLen = chars.length, - found = true, - i, c; - - while (found && end >= 0) { - found = false; - i = -1; - c = str.charAt(end); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - end--; - break; - } - } - } - - return (end >= 0) ? str.substring(0, end + 1) : ''; - } - - module.exports = rtrim; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/sentenceCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/sentenceCase.js deleted file mode 100644 index 354104c6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/sentenceCase.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var lowerCase = require('./lowerCase'); -var upperCase = require('./upperCase'); - /** - * UPPERCASE first char of each sentence and lowercase other chars. - */ - function sentenceCase(str){ - str = toString(str); - - // Replace first char of each sentence (new line or after '.\s+') to - // UPPERCASE - return lowerCase(str).replace(/(^\w)|\.\s+(\w)/gm, upperCase); - } - module.exports = sentenceCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/slugify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/slugify.js deleted file mode 100644 index 142f0d9b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/slugify.js +++ /dev/null @@ -1,24 +0,0 @@ -var toString = require('../lang/toString'); -var replaceAccents = require('./replaceAccents'); -var removeNonWord = require('./removeNonWord'); -var trim = require('./trim'); - /** - * Convert to lower case, remove accents, remove non-word chars and - * replace spaces with the specified delimeter. - * Does not split camelCase text. - */ - function slugify(str, delimeter){ - str = toString(str); - - if (delimeter == null) { - delimeter = "-"; - } - str = replaceAccents(str); - str = removeNonWord(str); - str = trim(str) //should come after removeNonWord - .replace(/ +/g, delimeter) //replace spaces with delimeter - .toLowerCase(); - return str; - } - module.exports = slugify; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/startsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/startsWith.js deleted file mode 100644 index bce2bd20..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/startsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Checks if string starts with specified prefix. - */ - function startsWith(str, prefix) { - str = toString(str); - prefix = toString(prefix); - - return str.indexOf(prefix) === 0; - } - - module.exports = startsWith; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/stripHtmlTags.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/stripHtmlTags.js deleted file mode 100644 index 01d17b0e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/stripHtmlTags.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove HTML tags from string. - */ - function stripHtmlTags(str){ - str = toString(str); - - return str.replace(/<[^>]*>/g, ''); - } - module.exports = stripHtmlTags; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/trim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/trim.js deleted file mode 100644 index 9652b0c7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/trim.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); -var ltrim = require('./ltrim'); -var rtrim = require('./rtrim'); - /** - * Remove white-spaces from beginning and end of string. - */ - function trim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - return ltrim(rtrim(str, chars), chars); - } - - module.exports = trim; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/truncate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/truncate.js deleted file mode 100644 index a98d6c7d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/truncate.js +++ /dev/null @@ -1,21 +0,0 @@ -var toString = require('../lang/toString'); -var trim = require('./trim'); - /** - * Limit number of chars. - */ - function truncate(str, maxChars, append, onlyFullWords){ - str = toString(str); - append = append || '...'; - maxChars = onlyFullWords? maxChars + 1 : maxChars; - - str = trim(str); - if(str.length <= maxChars){ - return str; - } - str = str.substr(0, maxChars - append.length); - //crop at last space or remove trailing whitespace - str = onlyFullWords? str.substr(0, str.lastIndexOf(' ')) : trim(str); - return str + append; - } - module.exports = truncate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/typecast.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/typecast.js deleted file mode 100644 index c1386a49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/typecast.js +++ /dev/null @@ -1,29 +0,0 @@ - - - var UNDEF; - - /** - * Parses string and convert it into a native value. - */ - function typecast(val) { - var r; - if ( val === null || val === 'null' ) { - r = null; - } else if ( val === 'true' ) { - r = true; - } else if ( val === 'false' ) { - r = false; - } else if ( val === UNDEF || val === 'undefined' ) { - r = UNDEF; - } else if ( val === '' || isNaN(val) ) { - //isNaN('') returns false - r = val; - } else { - //parseFloat(null || '') returns NaN - r = parseFloat(val); - } - return r; - } - - module.exports = typecast; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unCamelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unCamelCase.js deleted file mode 100644 index 4968f378..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unCamelCase.js +++ /dev/null @@ -1,23 +0,0 @@ -var toString = require('../lang/toString'); - - var CAMEL_CASE_BORDER = /([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g; - - /** - * Add space between camelCase text. - */ - function unCamelCase(str, delimiter){ - if (delimiter == null) { - delimiter = ' '; - } - - function join(str, c1, c2) { - return c1 + delimiter + c2; - } - - str = toString(str); - str = str.replace(CAMEL_CASE_BORDER, join); - str = str.toLowerCase(); //add space between camelCase text - return str; - } - module.exports = unCamelCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/underscore.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/underscore.js deleted file mode 100644 index ebd6e2b7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/underscore.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var slugify = require('./slugify'); -var unCamelCase = require('./unCamelCase'); - /** - * Replaces spaces with underscores, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function underscore(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "_"); - } - module.exports = underscore; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unescapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unescapeHtml.js deleted file mode 100644 index 52cf3f45..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unescapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Unescapes HTML special chars - */ - function unescapeHtml(str){ - str = toString(str) - .replace(/&/g , '&') - .replace(/</g , '<') - .replace(/>/g , '>') - .replace(/'/g , "'") - .replace(/"/g, '"'); - return str; - } - - module.exports = unescapeHtml; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unescapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unescapeUnicode.js deleted file mode 100644 index 0b7fb73b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unescapeUnicode.js +++ /dev/null @@ -1,16 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Unescape unicode char sequences - */ - function unescapeUnicode(str){ - str = toString(str); - return str.replace(/\\u[0-9a-f]{4}/g, function(ch){ - var code = parseInt(ch.slice(2), 16); - return String.fromCharCode(code); - }); - } - - module.exports = unescapeUnicode; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unhyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unhyphenate.js deleted file mode 100644 index 311dfa17..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/unhyphenate.js +++ /dev/null @@ -1,10 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Replaces hyphens with spaces. (only hyphens between word chars) - */ - function unhyphenate(str){ - str = toString(str); - return str.replace(/(\w)(-)(\w)/g, '$1 $3'); - } - module.exports = unhyphenate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/upperCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/upperCase.js deleted file mode 100644 index 6c92552c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/string/upperCase.js +++ /dev/null @@ -1,10 +0,0 @@ -var toString = require('../lang/toString'); - /** - * "Safer" String.toUpperCase() - */ - function upperCase(str){ - str = toString(str); - return str.toUpperCase(); - } - module.exports = upperCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time.js deleted file mode 100644 index 9f533296..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time.js +++ /dev/null @@ -1,12 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'convert' : require('./time/convert'), - 'now' : require('./time/now'), - 'parseMs' : require('./time/parseMs'), - 'toTimeString' : require('./time/toTimeString') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/convert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/convert.js deleted file mode 100644 index 852a0f03..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/convert.js +++ /dev/null @@ -1,41 +0,0 @@ - - - /** - * convert time into another unit - */ - function convert(val, sourceUnitName, destinationUnitName){ - destinationUnitName = destinationUnitName || 'ms'; - return (val * getUnit(sourceUnitName)) / getUnit(destinationUnitName); - } - - - //TODO: maybe extract to a separate module - function getUnit(unitName){ - switch(unitName){ - case 'ms': - case 'millisecond': - return 1; - case 's': - case 'second': - return 1000; - case 'm': - case 'minute': - return 60000; - case 'h': - case 'hour': - return 3600000; - case 'd': - case 'day': - return 86400000; - case 'w': - case 'week': - return 604800000; - default: - throw new Error('"'+ unitName + '" is not a valid unit'); - } - } - - - module.exports = convert; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/now.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/now.js deleted file mode 100644 index effcfbe3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/now.js +++ /dev/null @@ -1,12 +0,0 @@ - - - /** - * Get current time in miliseconds - */ - var now = (typeof Date.now === 'function')? Date.now : function(){ - return +(new Date()); - }; - - module.exports = now; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/parseMs.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/parseMs.js deleted file mode 100644 index 6d997976..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/parseMs.js +++ /dev/null @@ -1,17 +0,0 @@ -var countSteps = require('../math/countSteps'); - - /** - * Parse timestamp into an object. - */ - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - module.exports = parseMs; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/toTimeString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/toTimeString.js deleted file mode 100644 index 101d69fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/mout/time/toTimeString.js +++ /dev/null @@ -1,24 +0,0 @@ -var countSteps = require('../math/countSteps'); -var pad = require('../number/pad'); - - var HOUR = 3600000, - MINUTE = 60000, - SECOND = 1000; - - /** - * Format timestamp into a time string. - */ - function toTimeString(ms){ - var h = ms < HOUR ? 0 : countSteps(ms, HOUR), - m = ms < MINUTE ? 0 : countSteps(ms, MINUTE, 60), - s = ms < SECOND ? 0 : countSteps(ms, SECOND, 60), - str = ''; - - str += h? h + ':' : ''; - str += pad(m, 2) + ':'; - str += pad(s, 2); - - return str; - } - module.exports = toTimeString; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/History.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/History.md deleted file mode 100644 index 88119480..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/History.md +++ /dev/null @@ -1,42 +0,0 @@ - -1.0.0 / 2013-06-18 -================== - - * remove .version - * >=. Closes #19 - * Merge pull request #15 from davglass/readline-osx - * On OSX revert back to terminal hack to avoid a readline bug - -0.1.0 / 2012-09-19 -================== - - * Fixed logic bug that caused bar to jump one extra space at the end [davglass] - * Working with readline impl, even on Windows [davglass] - * Using readline instead of the \r hack [davglass] - -0.0.5 / 2012-08-07 -================== - - * add ability to tick by zero chunks - tick(0) - * fix ETA. Closes #4 [lwille] - -0.0.4 / 2011-11-14 -================== - - * Allow more recent versions of node - -0.0.3 / 2011-04-20 -================== - - * Changed; erase the line when complete - -0.0.2 / 2011-04-20 -================== - - * Added custom tokens support - * Fixed; clear line before writing - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/Makefile deleted file mode 100644 index 36a3ed7d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/Makefile +++ /dev/null @@ -1,5 +0,0 @@ - -test: - @echo "populate me" - -.PHONY: test \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/Readme.md deleted file mode 100644 index 4e08a49b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/Readme.md +++ /dev/null @@ -1,117 +0,0 @@ -# node-progress - - Flexible ascii progress bar - -## Installation - - npm install progress - -## Usage - - First we create a `ProgressBar`, giving it a format string - as well as the `total`, telling the progress bar when it will - be considered complete. After that all we need to do is `tick()` appropriately. - -```javascript -var ProgressBar = require('progress'); - -var bar = new ProgressBar(':bar', { total: 10 }); -var timer = setInterval(function(){ - bar.tick(); - if (bar.complete) { - console.log('\ncomplete\n'); - clearInterval(timer); - } -}, 100); -``` - -## Options: - - - `total` total number of ticks to complete - - `width` the displayed width of the progress bar defaulting to total - - `stream` the output stream defaulting to stdout - - `complete` completion character defaulting to "=" - - `incomplete` incomplete character defaulting to "-" - - `clear` option to clear the bar on completion defaulting to false - - `callback` optional function to call when the progress bar completes - -## Tokens: - - - `:bar` the progress bar itself - - `:current` current tick number - - `:total` total ticks - - `:elapsed` time elapsed in seconds - - `:percent` completion percentage - - `:eta` estimated completion time in seconds - -## Examples - -### Download - - In our download example each tick has a variable influence, so we pass the chunk length which adjusts the progress bar appropriately relative to the total length. - -```javascript -var ProgressBar = require('../') - , https = require('https'); - -var req = https.request({ - host: 'download.github.com' - , port: 443 - , path: '/visionmedia-node-jscoverage-0d4608a.zip' -}); - -req.on('response', function(res){ - var len = parseInt(res.headers['content-length'], 10); - - console.log(); - var bar = new ProgressBar(' downloading [:bar] :percent :etas', { - complete: '=' - , incomplete: ' ' - , width: 20 - , total: len - }); - - res.on('data', function(chunk){ - bar.tick(chunk.length); - }); - - res.on('end', function(){ - console.log('\n'); - }); -}); - -req.end(); -``` - - The code above will generate a progress bar that looks like this: - -``` -downloading [===== ] 29% 3.7s -``` - -You can see more examples in the `examples` folder. - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk `<tj@vision-media.ca>` - -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/index.js deleted file mode 100644 index 4449dd30..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/node-progress'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/lib/node-progress.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/lib/node-progress.js deleted file mode 100644 index ca0ce4f0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/lib/node-progress.js +++ /dev/null @@ -1,183 +0,0 @@ -/*! - * node-progress - * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca> - * MIT Licensed - */ - -/** - * Expose `ProgressBar`. - */ - -exports = module.exports = ProgressBar; - -/** - * Initialize a `ProgressBar` with the given - * `fmt` string and `options` or `total`. - * - * Options: - * - * - `total` total number of ticks to complete - * - `width` the displayed width of the progress bar defaulting to total - * - `stream` the output stream defaulting to stdout - * - `complete` completion character defaulting to "=" - * - `incomplete` incomplete character defaulting to "-" - * - `callback` optional function to call when the progress bar completes - * - * Tokens: - * - * - `:bar` the progress bar itself - * - `:current` current tick number - * - `:total` total ticks - * - `:elapsed` time elapsed in seconds - * - `:percent` completion percentage - * - `:eta` eta in seconds - * - * @param {String} fmt - * @param {Object|Number} options or total - * @api public - */ - -function ProgressBar(fmt, options) { - this.rl = require('readline').createInterface({ - input: process.stdin, - output: options.stream || process.stdout - }); - this.rl.setPrompt('', 0); - this.rl.clearLine = function() { - this.write(null, {ctrl: true, name: 'u'}); - }; - - if (typeof(options) == 'number') { - var total = options; - options = {}; - options.total = total; - } else { - options = options || {}; - if ('string' != typeof fmt) throw new Error('format required'); - if ('number' != typeof options.total) throw new Error('total required'); - } - - this.fmt = fmt; - this.curr = 0; - this.total = options.total; - this.width = options.width || this.total; - this.clear = options.clear - this.chars = { - complete: options.complete || '=' - , incomplete: options.incomplete || '-' - }; - this.callback = options.callback || function () {}; -} - -/** - * "tick" the progress bar with optional `len` and - * optional `tokens`. - * - * @param {Number|Object} len or tokens - * @param {Object} tokens - * @api public - */ - -ProgressBar.prototype.tick = function(len, tokens){ - if (len !== 0) - len = len || 1; - - // swap tokens - if ('object' == typeof len) tokens = len, len = 1; - - // start time for eta - if (0 == this.curr) this.start = new Date; - - this.curr += len - this.render(tokens); - - // progress complete - if (this.curr >= this.total) { - this.complete = true; - this.terminate(); - this.callback(this); - return; - } -}; - -/** - * Method to render the progress bar with optional `tokens` to - * place in the progress bar's `fmt` field. - * - * @param {Object} tokens - * @api public - */ - -ProgressBar.prototype.render = function(tokens){ - if(!process.stdout.isTTY) { - return; - } - - var ratio = this.curr / this.total; - ratio = Math.min(Math.max(ratio, 0), 1); - - var percent = ratio * 100 - , complete = Math.round(this.width * ratio) - , incomplete - , elapsed = new Date - this.start - , eta = (percent == 100) ? 0 : elapsed * (this.total / this.curr - 1); - - complete = Array(complete).join(this.chars.complete); - incomplete = Array(this.width - complete.length).join(this.chars.incomplete); - - var str = this.fmt - .replace(':bar', complete + incomplete) - .replace(':current', this.curr) - .replace(':total', this.total) - .replace(':elapsed', isNaN(elapsed) ? "0.0" : (elapsed / 1000).toFixed(1)) - .replace(':eta', (isNaN(eta) || !isFinite(eta)) ? "0.0" : (eta / 1000).toFixed(1)) - .replace(':percent', percent.toFixed(0) + '%'); - - if (tokens) { - for (var key in tokens) { - str = str.replace(':' + key, tokens[key]); - } - } - - this.rl.clearLine(); - this.rl.write(str); -}; - -/** - * "update" the progress bar to represent an exact percentage. - * The ratio (between 0 and 1) specified will be multiplied by `total` and - * floored, representing the closest available "tick." For example, if a - * progress bar has a length of 3 and `update(0.5)` is called, the progress - * will be set to 1. - * - * A ratio of 0.5 will attempt to set the progress to halfway. - * - * @param {Number} ratio The ratio (between 0 and 1 inclusive) to set the - * overall completion to. - * @api public - */ - -ProgressBar.prototype.update = function(ratio, tokens) { - var goal = Math.floor(ratio * this.total); - var delta = goal - this.curr; - - this.tick(delta, tokens); -}; - -/** - * Terminates a progress bar. - * - * @api public - */ - -ProgressBar.prototype.terminate = function() { - this.rl.resume(); - - if (this.clear) { - this.rl.clearLine(); - this.rl.close(); - } else { - this.rl.close(); - console.log(); - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/package.json deleted file mode 100644 index c4744b51..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/progress/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "progress", - "version": "1.1.3", - "description": "Flexible ascii progress bar", - "keywords": [ - "cli", - "progress" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "dependencies": {}, - "main": "index", - "engines": { - "node": ">=0.4.0" - }, - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/node-progress" - }, - "readme": "# node-progress\n\n Flexible ascii progress bar\n\n## Installation\n\n npm install progress\n\n## Usage\n\n First we create a `ProgressBar`, giving it a format string\n as well as the `total`, telling the progress bar when it will\n be considered complete. After that all we need to do is `tick()` appropriately.\n\n```javascript\nvar ProgressBar = require('progress');\n\nvar bar = new ProgressBar(':bar', { total: 10 });\nvar timer = setInterval(function(){\n bar.tick();\n if (bar.complete) {\n console.log('\\ncomplete\\n');\n clearInterval(timer);\n }\n}, 100);\n```\n\n## Options:\n\n - `total` total number of ticks to complete\n - `width` the displayed width of the progress bar defaulting to total\n - `stream` the output stream defaulting to stdout\n - `complete` completion character defaulting to \"=\"\n - `incomplete` incomplete character defaulting to \"-\"\n - `clear` option to clear the bar on completion defaulting to false\n - `callback` optional function to call when the progress bar completes\n\n## Tokens:\n\n - `:bar` the progress bar itself\n - `:current` current tick number\n - `:total` total ticks\n - `:elapsed` time elapsed in seconds\n - `:percent` completion percentage\n - `:eta` estimated completion time in seconds\n\n## Examples\n\n### Download\n\n In our download example each tick has a variable influence, so we pass the chunk length which adjusts the progress bar appropriately relative to the total length.\n\n```javascript\nvar ProgressBar = require('../')\n , https = require('https');\n\nvar req = https.request({\n host: 'download.github.com'\n , port: 443\n , path: '/visionmedia-node-jscoverage-0d4608a.zip'\n});\n\nreq.on('response', function(res){\n var len = parseInt(res.headers['content-length'], 10);\n\n console.log();\n var bar = new ProgressBar(' downloading [:bar] :percent :etas', {\n complete: '='\n , incomplete: ' '\n , width: 20\n , total: len\n });\n\n res.on('data', function(chunk){\n bar.tick(chunk.length);\n });\n\n res.on('end', function(){\n console.log('\\n');\n });\n});\n\nreq.end();\n```\n\n The code above will generate a progress bar that looks like this:\n\n```\ndownloading [===== ] 29% 3.7s\n```\n\nYou can see more examples in the `examples` folder.\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk `<tj@vision-media.ca>`\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/node-progress/issues" - }, - "homepage": "https://github.com/visionmedia/node-progress", - "_id": "progress@1.1.3", - "dist": { - "shasum": "42f89c5fc3b6f0408a0bdd68993b174f96aababf" - }, - "_from": "progress@~1.1.0", - "_resolved": "https://registry.npmjs.org/progress/-/progress-1.1.3.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/AUTHORS b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/AUTHORS deleted file mode 100644 index 247b7543..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/AUTHORS +++ /dev/null @@ -1,6 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/LICENSE deleted file mode 100644 index 05a40109..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/README.md deleted file mode 100644 index cd123b65..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/README.md +++ /dev/null @@ -1,30 +0,0 @@ -`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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/bin.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/bin.js deleted file mode 100755 index 29bfa8a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/bin.js +++ /dev/null @@ -1,33 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/package.json deleted file mode 100644 index 211cc9dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "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", - "dist": { - "shasum": "7ada6a6d39b2301af3c8fe7b936c2e46e7c4463d" - }, - "_from": "rimraf@~2.2.6", - "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/rimraf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/rimraf.js deleted file mode 100644 index ce62051f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/rimraf.js +++ /dev/null @@ -1,178 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/run.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/run.sh deleted file mode 100644 index 598f0163..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/setup.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/setup.sh deleted file mode 100644 index 2602e631..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/setup.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/test-async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/test-async.js deleted file mode 100644 index 9c2e0b7b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/test-async.js +++ /dev/null @@ -1,5 +0,0 @@ -var rimraf = require("../rimraf") - , path = require("path") -rimraf(path.join(__dirname, "target"), function (er) { - if (er) throw er -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/test-sync.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/test-sync.js deleted file mode 100644 index eb71f104..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/rimraf/test/test-sync.js +++ /dev/null @@ -1,3 +0,0 @@ -var rimraf = require("../rimraf") - , path = require("path") -rimraf.sync(path.join(__dirname, "target")) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/LICENSE deleted file mode 100644 index 05a40109..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/README.md deleted file mode 100644 index ff1eb531..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The "which" util from npm's guts. - -Finds the first instance of a specified executable in the PATH -environment variable. Does not cache the results, so `hash -r` is not -needed when the PATH changes. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/bin/which b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/bin/which deleted file mode 100755 index 8432ce2f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/bin/which +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env node -var which = require("../") -if (process.argv.length < 3) { - console.error("Usage: which <thing>") - process.exit(1) -} - -which(process.argv[2], function (er, thing) { - if (er) { - console.error(er.message) - process.exit(er.errno || 127) - } - console.log(thing) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/package.json deleted file mode 100644 index f1938b07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "which", - "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.", - "version": "1.0.5", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-which.git" - }, - "main": "which.js", - "bin": { - "which": "./bin/which" - }, - "engines": { - "node": "*" - }, - "dependencies": {}, - "devDependencies": {}, - "readme": "The \"which\" util from npm's guts.\n\nFinds the first instance of a specified executable in the PATH\nenvironment variable. Does not cache the results, so `hash -r` is not\nneeded when the PATH changes.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-which/issues" - }, - "homepage": "https://github.com/isaacs/node-which", - "_id": "which@1.0.5", - "dist": { - "shasum": "195619a6ad7e8fefd0aa76445a6d4c8d370a322c" - }, - "_from": "which@~1.0.5", - "_resolved": "https://registry.npmjs.org/which/-/which-1.0.5.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/which.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/which.js deleted file mode 100644 index db7e8f74..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/node_modules/which/which.js +++ /dev/null @@ -1,104 +0,0 @@ -module.exports = which -which.sync = whichSync - -var path = require("path") - , fs - , COLON = process.platform === "win32" ? ";" : ":" - , isExe - -try { - fs = require("graceful-fs") -} catch (ex) { - fs = require("fs") -} - -if (process.platform == "win32") { - // On windows, there is no good way to check that a file is executable - isExe = function isExe () { return true } -} else { - isExe = function isExe (mod, uid, gid) { - //console.error(mod, uid, gid); - //console.error("isExe?", (mod & 0111).toString(8)) - var ret = (mod & 0001) - || (mod & 0010) && process.getgid && gid === process.getgid() - || (mod & 0100) && process.getuid && uid === process.getuid() - //console.error("isExe?", ret) - return ret - } -} - - - -function which (cmd, cb) { - if (isAbsolute(cmd)) return cb(null, cmd) - var pathEnv = (process.env.PATH || "").split(COLON) - , pathExt = [""] - if (process.platform === "win32") { - pathEnv.push(process.cwd()) - pathExt = (process.env.PATHEXT || ".EXE").split(COLON) - if (cmd.indexOf(".") !== -1) pathExt.unshift("") - } - //console.error("pathEnv", pathEnv) - ;(function F (i, l) { - if (i === l) return cb(new Error("not found: "+cmd)) - var p = path.resolve(pathEnv[i], cmd) - ;(function E (ii, ll) { - if (ii === ll) return F(i + 1, l) - var ext = pathExt[ii] - //console.error(p + ext) - fs.stat(p + ext, function (er, stat) { - if (!er && - stat && - stat.isFile() && - isExe(stat.mode, stat.uid, stat.gid)) { - //console.error("yes, exe!", p + ext) - return cb(null, p + ext) - } - return E(ii + 1, ll) - }) - })(0, pathExt.length) - })(0, pathEnv.length) -} - -function whichSync (cmd) { - if (isAbsolute(cmd)) return cmd - var pathEnv = (process.env.PATH || "").split(COLON) - , pathExt = [""] - if (process.platform === "win32") { - pathEnv.push(process.cwd()) - pathExt = (process.env.PATHEXT || ".EXE").split(COLON) - if (cmd.indexOf(".") !== -1) pathExt.unshift("") - } - for (var i = 0, l = pathEnv.length; i < l; i ++) { - var p = path.join(pathEnv[i], cmd) - for (var j = 0, ll = pathExt.length; j < ll; j ++) { - var cur = p + pathExt[j] - var stat - try { stat = fs.statSync(cur) } catch (ex) {} - if (stat && - stat.isFile() && - isExe(stat.mode, stat.uid, stat.gid)) return cur - } - } - throw new Error("not found: "+cmd) -} - -var isAbsolute = process.platform === "win32" ? absWin : absUnix - -function absWin (p) { - if (absUnix(p)) return true - // pull off the device/UNC bit from a windows path. - // from node's lib/path.js - var splitDeviceRe = - /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?/ - , result = splitDeviceRe.exec(p) - , device = result[1] || '' - , isUnc = device && device.charAt(1) !== ':' - , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute - - return isAbsolute -} - -function absUnix (p) { - return p.charAt(0) === "/" || p === "" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/package.json deleted file mode 100644 index 66d4488e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/bin-wrapper/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "bin-wrapper", - "version": "0.1.9", - "description": "Binary wrapper for Node.js that makes your programs seamlessly available as local dependencies", - "keywords": [ - "bin", - "build", - "make", - "wrapper" - ], - "homepage": "https://github.com/kevva/bin-wrapper", - "bugs": { - "url": "https://github.com/kevva/bin-wrapper/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/kevva/bin-wrapper.git" - }, - "scripts": { - "test": "mocha --reporter list --timeout 0" - }, - "main": "bin-wrapper.js", - "files": [ - "bin-wrapper.js" - ], - "dependencies": { - "download": "~0.1.2", - "isbin": "0.0.2", - "mout": "~0.6.0", - "progress": "~1.1.0", - "rimraf": "~2.2.6", - "which": "~1.0.5" - }, - "devDependencies": { - "mocha": "~1.12.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "readme": "# bin-wrapper [![Build Status](https://secure.travis-ci.org/kevva/bin-wrapper.png?branch=master)](http://travis-ci.org/kevva/bin-wrapper)\n\nBinary wrapper for Node.js that makes your programs seamlessly available as local dependencies\n\n## Getting started\n\nInstall with [npm](https://npmjs.org/package/bin-wrapper): `npm install bin-wrapper`\n\n## Examples\n\nAll `platform` and `arch` specific options takes precedence over the base \noptions. See [test.js](test.js) for a full fleshed example.\n\n```js\nvar Bin = require('bin-wrapper');\n\nvar opts = {\n name: 'Gifsicle',\n bin: 'gifsicle',\n path: 'vendor',\n url: 'http://url/to/gifsicle',\n src: 'http://www.lcdf.org/gifsicle/gifsicle-1.71.tar.gz',\n buildScript: './configure --bindir=\"vendor\" && make install',\n platform: {\n win32: {\n bin: 'gifsicle.exe',\n url: [\n 'http://url/to/gifsicle.exe'\n 'http://url/to/gifsicle.dll'\n ]\n }\n }\n}\nvar bin = new Bin(opts);\n\nbin.check('--version', function (works) {\n if (!works) {\n console.log('Pre-build test failed, compiling from source');\n return bin.build();\n }\n\n console.log('Binary passed the test');\n});\n```\n\nGet the path to your binary with `bin.path`.\n\n```js\nconsole.log(bin.path);\n// => path/to/vendor/gifsicle\n```\n\n## API\n\n### .check(cmd, cb)\n\nCheck if a binary is present and working. If it isn't, download and test it by \nrunning the binary with `cmd` and see if it exits correctly.\n\n### .build(cb)\n\nDownload the source archive defined in the `src` property and build it using the \nbuild script defined in the `buildScript` property.\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com)\n", - "readmeFilename": "README.md", - "_id": "bin-wrapper@0.1.9", - "dist": { - "shasum": "237ee496fb6049caedaba51ad9e62fc199a86060" - }, - "_from": "bin-wrapper@~0.1.3", - "_resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-0.1.9.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/chalk.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/chalk.js deleted file mode 100644 index 17c6dbab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/chalk.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; -var ansi = require('ansi-styles'); -var defineProps = Object.defineProperties; - -ansi.grey = ansi.gray; - -var styles = (function () { - var ret = {}; - - Object.keys(ansi).forEach(function (key) { - ret[key] = { - get: function () { - this._styles.push(key); - return this; - } - }; - }); - - return ret; -})(); - -var chalk = module.exports = defineProps({}, init()); - -function init() { - var ret = {}; - - Object.keys(styles).forEach(function (name) { - ret[name] = { - get: function () { - var obj = defineProps(function self(str) { - if (!chalk.enabled) { - return str; - } - - return self._styles.reduce(function (str, name) { - var code = ansi[name]; - return code[0] + (str || '') + code[1]; - }, str); - }, styles); - - obj._styles = []; - - return obj[name]; - } - } - }); - - return ret; -} - -chalk.styles = ansi; - -chalk.stripColor = function (str) { - return str.replace(/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]/g, ''); -}; - -chalk.supportsColor = require('has-color'); - -// detect mode if not set manually -if (chalk.enabled === undefined) { - chalk.enabled = chalk.supportsColor; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js deleted file mode 100644 index 56a5d19b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; -module.exports = { - reset: ['\x1b[0m', '\x1b[0m'], - - bold: ['\x1b[1m', '\x1b[22m'], - italic: ['\x1b[3m', '\x1b[23m'], - underline: ['\x1b[4m', '\x1b[24m'], - inverse: ['\x1b[7m', '\x1b[27m'], - strikethrough: ['\x1b[9m', '\x1b[29m'], - - black: ['\x1b[30m', '\x1b[39m'], - red: ['\x1b[31m', '\x1b[39m'], - green: ['\x1b[32m', '\x1b[39m'], - yellow: ['\x1b[33m', '\x1b[39m'], - blue: ['\x1b[34m', '\x1b[39m'], - magenta: ['\x1b[35m', '\x1b[39m'], - cyan: ['\x1b[36m', '\x1b[39m'], - white: ['\x1b[37m', '\x1b[39m'], - gray: ['\x1B[90m', '\x1b[39m'], - - bgBlack: ['\x1b[40m', '\x1b[49m'], - bgRed: ['\x1b[41m', '\x1b[49m'], - bgGreen: ['\x1b[42m', '\x1b[49m'], - bgYellow: ['\x1b[43m', '\x1b[49m'], - bgBlue: ['\x1b[44m', '\x1b[49m'], - bgMagenta: ['\x1b[45m', '\x1b[49m'], - bgCyan: ['\x1b[46m', '\x1b[49m'], - bgWhite: ['\x1b[47m', '\x1b[49m'] -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/ansi-styles/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/ansi-styles/package.json deleted file mode 100644 index 8acdb5e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "ansi-styles", - "version": "0.2.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 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[0] + 'Hello world!' + ansi.green[1]);\n```\n\n## API\n\nEach style is an array of a start and end escape code.\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 License • © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "_id": "ansi-styles@0.2.0", - "dist": { - "shasum": "359ab4b15dcd64ba6d74734b72c36360a9af2c19" - }, - "_from": "ansi-styles@~0.2.0", - "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-0.2.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/ansi-styles/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/ansi-styles/readme.md deleted file mode 100644 index 646837c6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,65 +0,0 @@ -# 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 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[0] + 'Hello world!' + ansi.green[1]); -``` - -## API - -Each style is an array of a start and end escape code. - - -## 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 License • © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/has-color/has-color.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/has-color/has-color.js deleted file mode 100644 index 27316b1f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/has-color/has-color.js +++ /dev/null @@ -1,24 +0,0 @@ -'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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/has-color/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/has-color/package.json deleted file mode 100644 index d60b2d0a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/has-color/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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", - "dist": { - "shasum": "d1dadeea5b9e8b446bf08603532333710c95a290" - }, - "_from": "has-color@~0.1.0", - "_resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/has-color/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/has-color/readme.md deleted file mode 100644 index 0918c851..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/node_modules/has-color/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/package.json deleted file mode 100644 index 46a63f05..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "chalk", - "version": "0.2.1", - "description": "Terminal string styling done right", - "keywords": [ - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "ansi", - "styles", - "tty", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "homepage": "https://github.com/sindresorhus/chalk", - "bugs": { - "url": "https://github.com/sindresorhus/chalk/issues" - }, - "license": "MIT", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "files": [ - "chalk.js" - ], - "main": "chalk", - "repository": { - "type": "git", - "url": "git://github.com/sindresorhus/chalk.git" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "has-color": "~0.1.0", - "ansi-styles": "~0.2.0" - }, - "devDependencies": { - "mocha": "~1.12.0" - }, - "engines": { - "node": ">=0.8.0" - }, - "readme": "# chalk [![Build Status](https://secure.travis-ci.org/sindresorhus/chalk.png?branch=master)](http://travis-ci.org/sindresorhus/chalk)\n\n> Terminal string styling done right.\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. 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\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 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\nchalk.red('Hello' + chalk.underline.bgBlue('world') + '!');\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)\n\nChain [styles](#styles) and call the last one as a method with a string argument.\n\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\n```js\nvar chalk = require('chalk');\n\nconsole.log(chalk.styles.red);\n//=> ['\\x1b[31m', '\\x1b[39m']\n\nconsole.log(chalk.styles.red[0] + 'Hello' + chalk.styles.red[1]);\n// first item is the style escape code and second is the reset escape code\n```\n\n### chalk.stripColor(string)\n\nStrip color from a string.\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 License • © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "_id": "chalk@0.2.1", - "dist": { - "shasum": "7613e1575145b21386483f7f485aa5ffa8cbd10c" - }, - "_from": "chalk@~0.2.0", - "_resolved": "https://registry.npmjs.org/chalk/-/chalk-0.2.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/readme.md deleted file mode 100644 index d369d2ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/node_modules/chalk/readme.md +++ /dev/null @@ -1,130 +0,0 @@ -# chalk [![Build Status](https://secure.travis-ci.org/sindresorhus/chalk.png?branch=master)](http://travis-ci.org/sindresorhus/chalk) - -> Terminal string styling done right. - -[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. 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 - - -## 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 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 -chalk.red('Hello' + chalk.underline.bgBlue('world') + '!'); -``` - -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) - -Chain [styles](#styles) and call the last one as a method with a string argument. - - -### 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). - -```js -var chalk = require('chalk'); - -console.log(chalk.styles.red); -//=> ['\x1b[31m', '\x1b[39m'] - -console.log(chalk.styles.red[0] + 'Hello' + chalk.styles.red[1]); -// first item is the style escape code and second is the reset escape code -``` - -### chalk.stripColor(string) - -Strip color from a string. - - -## 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 License • © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/package.json deleted file mode 100644 index c5ceffa7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "gifsicle", - "version": "0.1.4", - "description": "gifsicle wrapper that makes it seamlessly available as a local dependency on OS X, Linux and Windows", - "keywords": [ - "gif", - "img", - "image", - "compress", - "minify", - "optimize" - ], - "homepage": "https://github.com/yeoman/node-gifsicle", - "bugs": { - "url": "https://github.com/yeoman/node-gifsicle/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "BSD", - "repository": { - "type": "git", - "url": "git://github.com/yeoman/node-gifsicle.git" - }, - "main": "lib/gifsicle", - "bin": { - "gifsicle": "bin/gifsicle.js" - }, - "scripts": { - "test": "mocha", - "postinstall": "node lib/check.js" - }, - "dependencies": { - "bin-wrapper": "~0.1.3", - "chalk": "~0.2.0" - }, - "devDependencies": { - "mocha": "~1.13.0" - }, - "engines": { - "node": ">=0.8.0" - }, - "files": [ - "bin", - "lib" - ], - "readme": "# node-gifsicle [![Build Status](https://secure.travis-ci.org/yeoman/node-gifsicle.png?branch=master)](http://travis-ci.org/yeoman/node-gifsicle)\n\n[gifsicle](http://www.lcdf.org/gifsicle/) 1.71 Node.js wrapper that makes it seamlessly available as a local dependency on OS X, Linux and Windows.\n\n> gifsicle manipulates GIF image files in many different ways. Depending on command line options, it can merge several GIFs into a GIF animation; explode an animation into its component frames; change individual frames in an animation; turn interlacing on and off; add transparency and much more.\n\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/gifsicle): `npm install --save gifsicle`\n\n\n## Example usage\n\n```js\nvar execFile = require('child_process').execFile;\nvar gifsiclePath = require('gifsicle').path;\n\nexecFile(gifsiclePath, ['-o', 'output.gif', 'input.gif'], function() {\n\tconsole.log('Image minified');\n});\n```\n\nCan also be run directly from `./node_modules/.bin/gifsicle`.\n\n\n## Dev\n\nNote to self on how to update the binaries.\n\n### OS X\n\nRun `npm install` on a OS X 10.7 machine to build the binary.\n\n### Linux\n\nRun `npm install` to build the binary.\n\n### Windows\n\n- Download the [Windows files 32/64-bit](http://www.lcdf.org/gifsicle/) on a Windows machine.\n- Run the downloaded file to extract.\n- Go to the `bin` folder at the destination and copy `gifsicle.exe`.\n\n\n## License\n\nEverything excluding the binaries licensed under the [BSD license](http://opensource.org/licenses/bsd-license.php) and copyright Google.\n\ngifsicle licensed under the GNU General Public License, Version 2.\n", - "readmeFilename": "readme.md", - "_id": "gifsicle@0.1.4", - "dist": { - "shasum": "c592c8625fc0ae05f88ceaa8e67ce20351236d3c" - }, - "_from": "gifsicle@~0.1.0", - "_resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-0.1.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/readme.md deleted file mode 100644 index 4d0c7602..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/readme.md +++ /dev/null @@ -1,50 +0,0 @@ -# node-gifsicle [![Build Status](https://secure.travis-ci.org/yeoman/node-gifsicle.png?branch=master)](http://travis-ci.org/yeoman/node-gifsicle) - -[gifsicle](http://www.lcdf.org/gifsicle/) 1.71 Node.js wrapper that makes it seamlessly available as a local dependency on OS X, Linux and Windows. - -> gifsicle manipulates GIF image files in many different ways. Depending on command line options, it can merge several GIFs into a GIF animation; explode an animation into its component frames; change individual frames in an animation; turn interlacing on and off; add transparency and much more. - - -## Install - -Install with [npm](https://npmjs.org/package/gifsicle): `npm install --save gifsicle` - - -## Example usage - -```js -var execFile = require('child_process').execFile; -var gifsiclePath = require('gifsicle').path; - -execFile(gifsiclePath, ['-o', 'output.gif', 'input.gif'], function() { - console.log('Image minified'); -}); -``` - -Can also be run directly from `./node_modules/.bin/gifsicle`. - - -## Dev - -Note to self on how to update the binaries. - -### OS X - -Run `npm install` on a OS X 10.7 machine to build the binary. - -### Linux - -Run `npm install` to build the binary. - -### Windows - -- Download the [Windows files 32/64-bit](http://www.lcdf.org/gifsicle/) on a Windows machine. -- Run the downloaded file to extract. -- Go to the `bin` folder at the destination and copy `gifsicle.exe`. - - -## License - -Everything excluding the binaries licensed under the [BSD license](http://opensource.org/licenses/bsd-license.php) and copyright Google. - -gifsicle licensed under the GNU General Public License, Version 2. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/vendor/gifsicle b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/gifsicle/vendor/gifsicle deleted file mode 100755 index 675d7751ae2c3135d1002dc2358a91264d4bed6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170964 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%0D0%04&S@Rw-+)?`Sh{ir$mjCXy-+><}ITfJxa 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®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 TwQY1?Jq)y@@B_)KgDCo+it{Vx diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/bin/jpegtran.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/bin/jpegtran.js deleted file mode 100755 index 3f8cb0ee..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/bin/jpegtran.js +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -var binPath = require('../lib/jpegtran').path; -var spawn = require('child_process').spawn; - -spawn(binPath, process.argv.slice(2), { stdio: 'inherit' }) - .on('exit', process.exit); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/lib/check.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/lib/check.js deleted file mode 100644 index e257bb64..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/lib/check.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var bin = require('./jpegtran').bin; -var chalk = require('chalk'); -var path = require('path'); - -var args = [ - '-copy', 'none', - '-optimize', - '-outfile', path.join(__dirname, '../test/minified.jpg'), - path.join(__dirname, '../test/fixtures/test.jpg') -]; - -bin.check(args, function (w) { - if (!w) { - console.log(chalk.red('✗ pre-build test failed, compiling from source...')); - - if (process.platform === 'win32') { - return console.log(chalk.red('✗ building is not supported on ' + process.platform)); - } - - return bin.build(function (err) { - if (err) { - return console.log(chalk.red('✗ ' + err.message)); - } - - console.log(chalk.green('✓ jpegtran rebuilt successfully')); - }); - } - - console.log(chalk.green('✓ pre-build test passed successfully')); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/lib/jpegtran.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/lib/jpegtran.js deleted file mode 100644 index 30270277..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/lib/jpegtran.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; - -var Bin = require('bin-wrapper'); -var path = require('path'); - -var options = { - name: 'jpegtran', - bin: 'jpegtran', - path: path.join(__dirname, '../vendor'), - src: 'http://downloads.sourceforge.net/project/libjpeg-turbo/1.3.0/libjpeg-turbo-1.3.0.tar.gz', - buildScript: './configure --disable-shared --prefix="' + path.join(__dirname, '../vendor') + '" && ' + 'make install', - platform: { - darwin: { - url: 'https://raw.github.com/yeoman/node-jpegtran-bin/master/vendor/osx/jpegtran' - }, - freebsd: { - url: 'https://raw.github.com/yeoman/node-jpegtran-bin/master/vendor/freebsd/jpegtran', - }, - linux: { - url: 'https://raw.github.com/yeoman/node-jpegtran-bin/master/vendor/linux/x86/jpegtran', - arch: { - x64: { - url: 'https://raw.github.com/yeoman/node-jpegtran-bin/master/vendor/linux/x64/jpegtran' - } - } - }, - sunos: { - url: 'https://raw.github.com/yeoman/node-jpegtran-bin/master/vendor/sunos/x86/jpegtran', - arch: { - x64: { - url: 'https://raw.github.com/yeoman/node-jpegtran-bin/master/vendor/sunos/x64/jpegtran' - } - } - }, - win32: { - bin: 'jpegtran.exe', - url: [ - 'https://raw.github.com/yeoman/node-jpegtran-bin/master/vendor/win/x86/jpegtran.exe', - 'https://raw.github.com/yeoman/node-jpegtran-bin/master/vendor/win/x86/libjpeg-62.dll' - ], - arch: { - x64: { - url: [ - 'https://raw.github.com/yeoman/node-jpegtran-bin/master/vendor/win/x64/jpegtran.exe', - 'https://raw.github.com/yeoman/node-jpegtran-bin/master/vendor/win/x64/libjpeg-62.dll' - ] - } - } - } - } -}; -var bin = new Bin(options); - -exports.bin = bin; -exports.options = options; -exports.path = bin.path; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/README.md deleted file mode 100644 index 05419cd4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# bin-wrapper [![Build Status](https://secure.travis-ci.org/kevva/bin-wrapper.png?branch=master)](http://travis-ci.org/kevva/bin-wrapper) - -Binary wrapper for Node.js that makes your programs seamlessly available as local dependencies - -## Getting started - -Install with [npm](https://npmjs.org/package/bin-wrapper): `npm install bin-wrapper` - -## Examples - -All `platform` and `arch` specific options takes precedence over the base -options. See [test.js](test.js) for a full fleshed example. - -```js -var Bin = require('bin-wrapper'); - -var opts = { - name: 'Gifsicle', - bin: 'gifsicle', - path: 'vendor', - url: 'http://url/to/gifsicle', - src: 'http://www.lcdf.org/gifsicle/gifsicle-1.71.tar.gz', - buildScript: './configure --bindir="vendor" && make install', - platform: { - win32: { - bin: 'gifsicle.exe', - url: [ - 'http://url/to/gifsicle.exe' - 'http://url/to/gifsicle.dll' - ] - } - } -} -var bin = new Bin(opts); - -bin.check('--version', function (works) { - if (!works) { - console.log('Pre-build test failed, compiling from source'); - return bin.build(); - } - - console.log('Binary passed the test'); -}); -``` - -Get the path to your binary with `bin.path`. - -```js -console.log(bin.path); -// => path/to/vendor/gifsicle -``` - -## API - -### .check(cmd, cb) - -Check if a binary is present and working. If it isn't, download and test it by -running the binary with `cmd` and see if it exits correctly. - -### .build(cb) - -Download the source archive defined in the `src` property and build it using the -build script defined in the `buildScript` property. - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/bin-wrapper.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/bin-wrapper.js deleted file mode 100644 index ccfe9342..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/bin-wrapper.js +++ /dev/null @@ -1,222 +0,0 @@ -'use strict'; - -var download = require('download'); -var exec = require('child_process').exec; -var fs = require('fs'); -var hasOwn = require('mout/object/hasOwn'); -var isbin = require('isbin'); -var isFunction = require('mout/lang/isFunction'); -var mixIn = require('mout/object/mixIn'); -var os = require('os'); -var path = require('path'); -var ProgressBar = require('progress'); -var rm = require('rimraf'); -var spawn = require('child_process').spawn; -var which = require('which'); - -/** - * Initialize BinWrapper with options - * - * @param {Object} opts - * @api public - */ - -function BinWrapper(opts) { - opts = opts || {}; - this.opts = this._parse(opts); - this.name = this.opts.name; - this.bin = this.opts.bin; - this.dest = this.opts.path; - this.path = this._path() || path.join(this.dest, this.bin); - this.url = this.opts.url; - this.src = this.opts.src; - this.buildScript = this.opts.buildScript; - this.proxy = process.env.http_proxy || - process.env.HTTP_PROXY || - process.env.https_proxy || - process.env.HTTPS_PROXY || - null; -} - -/** - * Check if a binary is present and working - * - * @param {String|Array} cmd - * @param {Function} cb - * @api public - */ - -BinWrapper.prototype.check = function (cmd, cb) { - var self = this; - - if (!cb && isFunction(cmd)) { - cb = cmd; - cmd = ['--help']; - } - - cmd = cmd; - cmd = Array.isArray(cmd) ? cmd : [cmd]; - - if (this._path()) { - return self._test(cmd, cb); - } - - this._download(this.url, this.dest, { mode: '0755', proxy: this.proxy }) - .on('close', function () { - return self._test(cmd, cb); - }); -}; - -/** - * Download source and build a binary - * - * @param {Function} cb - * @api public - */ - -BinWrapper.prototype.build = function (cb) { - var self = this; - var tmpDir = os.tmpdir ? os.tmpdir() : os.tmpDir(); - var tmp = path.join(tmpDir, this.name); - var get = this._download(this.src, tmp, { mode: '0777', extract: true, strip: '1', proxy: this.proxy }); - - if (!cb || !isFunction(cb)) { - cb = function () {}; - } - - get.on('close', function () { - exec(self.buildScript, { cwd: tmp }, function (err) { - if (err) { - return cb(err); - } - - rm.sync(tmp); - - return cb(); - }); - }); -}; - -/** - * Download a string or an array of files - * - * @param {String|Array} src - * @param {String} dest - * @param {Object} opts - * @api private - */ - -BinWrapper.prototype._download = function (src, dest, opts) { - var get = download(src, dest, opts); - - get.on('response', function (res) { - var len = parseInt(res.headers['content-length'], 10); - var bar = new ProgressBar(' ' + path.basename(src) + ': downloading [:bar] :percent :etas', { - complete: '=', - incomplete: ' ', - width: 20, - total: len - }); - - res.on('data', function (data) { - bar.tick(data.length); - }); - - res.on('end', function () { - console.log('\n'); - }); - }); - - return get; -}; - -/** - * If a binary exists, get its path - * - * @api private - */ - -BinWrapper.prototype._path = function () { - var self = this; - - if (fs.existsSync(path.join(this.dest, this.bin))) { - return path.join(self.dest, self.bin); - } - - if (isbin(this.bin)) { - if (which.sync(self.bin).indexOf('node_modules/.bin') === -1) { - return which.sync(self.bin); - } - } - - return false; -}; - -/** - * Test if a binary is working by checking its exit code - * - * @param {Array} cmd - * @param {Function} cb - * @api private - */ - -BinWrapper.prototype._test = function (cmd, cb) { - var working; - var bin = spawn(this.path, cmd); - - bin.on('error', function () { - working = false; - return cb(working); - }); - - bin.on('exit', function (code) { - working = code === 0; - return cb(working); - }); -}; - -/** - * Parse options - * - * @param {Object} opts - * @api private - */ - -BinWrapper.prototype._parse = function (opts) { - opts.platform = opts.platform || {}; - opts.arch = opts.arch || {}; - - var platform = process.platform; - var arch = process.arch === 'x64' ? 'x64' : process.arch === 'arm' ? 'arm' : 'x86'; - var required = [ - 'bin', - 'name', - 'path', - 'url' - ]; - - if (hasOwn(opts.platform, [platform])) { - opts = mixIn(opts, opts.platform[platform]); - } - - if (hasOwn(opts.arch, [arch])) { - opts = mixIn(opts, opts.arch[arch]); - } - - required.forEach(function (val) { - if (!hasOwn(opts, val)) { - throw new Error(val + ' option is required'); - } - }); - - delete opts.platform; - delete opts.arch; - - return opts; -}; - -/** - * Module exports - */ - -module.exports = BinWrapper; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/.bin/rimraf b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/.bin/rimraf deleted file mode 120000 index 4cd49a49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/.bin/rimraf +++ /dev/null @@ -1 +0,0 @@ -../rimraf/bin.js \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/.bin/which b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/.bin/which deleted file mode 120000 index f62471c8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/.bin/which +++ /dev/null @@ -1 +0,0 @@ -../which/bin/which \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/README.md deleted file mode 100644 index f57b2f41..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# download [![Build Status](https://secure.travis-ci.org/kevva/download.png?branch=master)](http://travis-ci.org/kevva/download) - -Download and extract files effortlessly in Node.js. - -## Getting started - -Install with [npm](https://npmjs.org/package/download): `npm install download` - -## Examples - -If you're fetching an archive you can set `extract: true` in options and -it'll extract it for you. - -```js -var download = require('download'); - -// download and extract `foo.tar.gz` into `bar/` -download('foo.tar.gz', 'bar', { extract: true }); - -// download and save `foo.exe` into `bar/foo.exe` with mode `0755` -download('foo.exe', 'bar', { mode: '0755' }); - -// download and save `foo.zip` into `bar/foobar.zip` -download({ url: 'foo.zip', name: 'foobar.zip' }, 'bar'); - -// download and save an array of files in `bar/` -var files = ['foo.jpg', 'bar.jpg', 'cat.jpg']; -download(files, 'bar'); - -// download, save and rename an array of files in `bar/` -var files = [{ - url: 'foo.jpg', - name: 'foobar.jpg' -}, { - url: 'cat.jpg', - name: 'dog.jpg' -}]; -download(files, 'bar'); -``` - -## API - -### download(url, dest, opts) - -Download a file or an array of files to a given destination. Returns an EventEmitter -that emits the following possible events: - -* `response` — Relayed when the underlying `http.ClientRequest` emits the same -event. Listeners called with a `http.IncomingMessage` instance. -* `data` — Relayed when the underlying `http.IncomingMessage` emits the same -event. Listeners called with a `Buffer` instance. -* `error` — Relayed when the underlying `http.ClientRequest` emits the same event -or when the response status code is not in the 200s. Listeners called with an -`Error` instance (in the first case) or the response status code. -* `close` — Relayed when the underlying `stream.Duplex` emits the same event. - -## Options - -You can define options accepted by the [request](https://github.com/mikeal/request/) module besides from the options below. - -### extract - -Type: `Boolean` -Default: `false` - -If set to `true`, try extracting the file using [decompress](https://github.com/kevva/decompress/). - -### mode - -Type: `String` -Default: `undefined` - -Set mode on the downloaded files. - -### strip - -Type: `Number` -Default: `0` - -Equivalent to `--strip-components` for tar. - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/download.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/download.js deleted file mode 100644 index 4b9c05e2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/download.js +++ /dev/null @@ -1,100 +0,0 @@ -'use strict'; - -var decompress = require('decompress'); -var eachAsync = require('each-async'); -var fs = require('fs'); -var mkdir = require('mkdirp'); -var path = require('path'); -var request = require('request'); -var through = require('through2'); - -/** - * Download a file to a given destination - * - * Options: - * - * - `extract` Try extracting the file - * - `mode` Set mode on the downloaded files - * - `strip` Equivalent to --strip-components for tar - * - * @param {String|Array|Object} url - * @param {String} dest - * @param {Object} opts - * @api public - */ - -module.exports = function (url, dest, opts) { - url = Array.isArray(url) ? url : [url]; - opts = opts || {}; - - var stream = through(); - var strip = opts.strip || '0'; - - eachAsync(url, function (url, index, done) { - opts.url = url; - var target = path.join(dest, path.basename(url)); - - if (url.url && url.name) { - target = path.join(dest, url.name); - opts.url = url.url; - } - - var req = request.get(opts) - .on('response', function (res) { - stream.emit('response', res); - }) - .on('data', function (data) { - stream.emit('data', data); - }) - .on('error', function (err) { - stream.emit('error', err); - }); - - req.on('response', function (res) { - var mime = res.headers['content-type']; - var status = res.statusCode; - var end; - - if (status < 200 || status >= 300) { - stream.emit('error', status); - return; - } - - if (opts.extract && decompress.canExtract(url, mime)) { - var ext; - - if (decompress.canExtract(url)) { - ext = url; - } else { - ext = mime; - } - - end = decompress.extract({ - ext: ext, - path: dest, - strip: strip - }); - } else { - if (!fs.existsSync(dest)) { - mkdir.sync(dest); - } - - end = fs.createWriteStream(target); - } - - req.pipe(end); - - end.on('close', function () { - if (!opts.extract && opts.mode) { - fs.chmodSync(target, opts.mode); - } - - done(); - }); - }); - }, function () { - stream.emit('close'); - }); - - return stream; -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/README.md deleted file mode 100644 index 4226d3f5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# decompress [![Build Status](https://secure.travis-ci.org/kevva/decompress.png?branch=master)](http://travis-ci.org/kevva/decompress) - -Easily extract `.zip`, `.tar` and `.tar.gz` archives. Based on the extract -utility in [Bower](https://github.com/bower/bower). - -## Getting started - -Install with [npm](https://npmjs.org/package/decompress): `npm install decompress` - -## Examples - -You'll only need to pass a type into `ext` and it'll figure the rest out for -you. - -```js -var decompress = require('decompress'); -var fs = require('fs'); - -var src = fs.createReadStream('foo.tar.gz'); -var dest = decompress.extract({ ext: '.tar.gz' }); - -src.pipe(dest); -``` - -## API - -### .extract(opts) - -Extract an archive using the `ext` option to determine which extractor to use. -If no `path` is specified it'll extract it to your current location. - -### .canExtract(src, mime) - -Determine if a file can be extracted or not by checking the file extension -and/or the MIME type. - -```js -decompress.canExtract('foo.zip'); -// => true - -decompress.canExtract('application/zip'); -// => true -``` - -## Options - -### `ext` - -Type: `String` -Default: `''` - -String that can be a file name, URL, MIME type etc. - -### `path` - -Type: `String` -Default: `process.cwd()` - -Path to extract the archive to. If no `path` is defined it'll extract it to your -current location. - -### strip - -Type: `Number` -Default: `0` - -Equivalent to `--strip-components` for tar. - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/decompress.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/decompress.js deleted file mode 100644 index e110d93c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/decompress.js +++ /dev/null @@ -1,168 +0,0 @@ -'use strict'; - -var AdmZip = require('adm-zip'); -var endsWith = require('mout/string/endsWith'); -var find = require('mout/array/find'); -var fs = require('fs'); -var mkdir = require('mkdirp'); -var path = require('path'); -var pipeline = require('stream-combiner'); -var rm = require('rimraf'); -var tar = require('tar'); -var tempfile = require('tempfile'); -var zlib = require('zlib'); - -/** - * Initialize Decompress with options - * - * Options: - * - * - `ext` String with file name, MIME type, etc - * - `path` Path to extract to - * - * @param {Object} opts - * @api private - */ - -function Decompress(opts) { - opts = opts || {}; - opts.strip = opts.strip || 0; - this.opts = opts; - this.path = opts.path || process.cwd(); - this.ext = opts.ext || ''; - this.strip = opts.strip >= 0 ? opts.strip : 0; - this.extractors = { - '.zip': this._extractZip, - '.tar': this._extractTar, - '.tar.gz': this._extractTarGz, - '.tgz': this._extractTarGz, - 'application/zip': this._extractZip, - 'application/x-tar': this._extractTar, - 'application/x-tgz': this._extractTarGz - }; - this.extractorTypes = Object.keys(this.extractors); - this.extractor = this._getExtractor(this.ext); -} - -/** - * Extract an archive - * - * @api public - */ - -Decompress.prototype.extract = function () { - var self = this; - var stream = this.extractor(); - - if (!fs.existsSync(this.path)) { - mkdir.sync(self.path); - } - - return stream; -}; - -/** - * Check if a file can be extracted - * - * @param {String} src - * @param {String} mime - * @api public - */ - -Decompress.prototype.canExtract = function (src, mime) { - if (this._getExtractor(src)) { - return true; - } - - if (mime && this._getExtractor(mime)) { - return true; - } - - return false; -}; - -/** - * Get the extractor for a desired file - * - * @param {String} src - * @api private - */ - -Decompress.prototype._getExtractor = function (src) { - src = src.toLowerCase(); - - var ext = find(this.extractorTypes, function (ext) { - return endsWith(src, ext); - }); - - return ext ? this.extractors[ext] : null; -}; - -/** - * Extract a zip file - * - * @api private - */ - -Decompress.prototype._extractZip = function () { - var self = this; - var tmp = tempfile('.zip'); - - var stream = fs.createWriteStream(tmp).on('close', function () { - var zip = new AdmZip(tmp); - var zipEntries = zip.getEntries(); - - zipEntries.forEach(function (entry) { - if (!entry.isDirectory) { - var entryFile = path.basename(entry.entryName.toString()); - var entryDir = path.dirname(entry.entryName.toString().split('/').slice(self.strip).join('/')); - var dest = path.join(self.path, entryDir, entryFile); - - mkdir.sync(path.dirname(dest)); - fs.writeFileSync(dest, entry.getData()); - } - }); - }); - - return stream.on('close', function () { - rm.sync(tmp); - }); -}; - -/** - * Extract a tar file - * - * @api private - */ - -Decompress.prototype._extractTar = function () { - var stream = tar.Extract(this.opts); - return stream; -}; - -/** - * Extract a tar.gz file - * - * @api private - */ - -Decompress.prototype._extractTarGz = function () { - var stream = zlib.Unzip(); - var dest = tar.Extract(this.opts); - - return pipeline(stream, dest); -}; - -/** - * Module exports - */ - -module.exports.extract = function (opts) { - var decompress = new Decompress(opts); - return decompress.extract(); -}; - -module.exports.canExtract = function (src, mime) { - var decompress = new Decompress(); - return decompress.canExtract(src, mime); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/.idea/scopes/scope_settings.xml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/.idea/scopes/scope_settings.xml deleted file mode 100644 index 0d5175ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/.idea/scopes/scope_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ -<component name="DependencyValidationManager"> - <state> - <option name="SKIP_IMPORT_STATEMENTS" value="false" /> - </state> -</component> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/MIT-LICENSE.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/MIT-LICENSE.txt deleted file mode 100644 index 14c3ee5c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/MIT-LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2012 Another-D-Mention Software and other contributors, -http://www.another-d-mention.ro/ - -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/README.md deleted file mode 100644 index 030fab8a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# ADM-ZIP for NodeJS - -ADM-ZIP is a pure JavaScript implementation for zip data compression for [NodeJS](http://nodejs.org/). - -# Installation - -With [npm](http://npmjs.org) do: - - $ npm install adm-zip - -## What is it good for? -The library allows you to: - -* decompress zip files directly to disk or in memory buffers -* compress files and store them to disk in .zip format or in compressed buffers -* update content of/add new/delete files from an existing .zip - -# Dependencies -There are no other nodeJS libraries that ADM-ZIP is dependent of - -# Examples - -## Basic usage -```javascript - - var AdmZip = require('adm-zip'); - - // reading archives - var zip = new AdmZip("./my_file.zip"); - var zipEntries = zip.getEntries(); // an array of ZipEntry records - - zipEntries.forEach(function(zipEntry) { - console.log(zipEntry.toString()); // outputs zip entries information - if (zipEntry.entryName == "my_file.txt") { - console.log(zipEntry.data.toString('utf8')); - } - }); - // outputs the content of some_folder/my_file.txt - console.log(zip.readAsText("some_folder/my_file.txt")); - // extracts the specified file to the specified location - zip.extractEntryTo(/*entry name*/"some_folder/my_file.txt", /*target path*/"/home/me/tempfolder", /*maintainEntryPath*/false, /*overwrite*/true); - // extracts everything - zip.extractAllTo(/*target path*/"/home/me/zipcontent/", /*overwrite*/true); - - - // creating archives - var zip = new AdmZip(); - - // add file directly - zip.addFile("test.txt", new Buffer("inner content of the file"), "entry comment goes here"); - // add local file - zip.addLocalFile("/home/me/some_picture.png"); - // get everything as a buffer - var willSendthis = zip.toBuffer(); - // or write everything to disk - zip.writeZip(/*target file name*/"/home/me/files.zip"); - - - // ... more examples in the wiki -``` - -For more detailed information please check out the [wiki](https://github.com/cthackers/adm-zip/wiki). - -[![build status](https://secure.travis-ci.org/cthackers/adm-zip.png)](http://travis-ci.org/cthackers/adm-zip) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/adm-zip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/adm-zip.js deleted file mode 100644 index 46595fc5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/adm-zip.js +++ /dev/null @@ -1,404 +0,0 @@ -var fs = require("fs"), - pth = require("path"); - -fs.existsSync = fs.existsSync || pth.existsSync; - -var ZipEntry = require("./zipEntry"), - ZipFile = require("./zipFile"), - Utils = require("./util"); - -module.exports = function(/*String*/input) { - var _zip = undefined, - _filename = ""; - - if (input && typeof input === "string") { // load zip file - if (fs.existsSync(input)) { - _filename = input; - _zip = new ZipFile(input, Utils.Constants.FILE); - } else { - throw Utils.Errors.INVALID_FILENAME; - } - } else if(input && Buffer.isBuffer(input)) { // load buffer - _zip = new ZipFile(input, Utils.Constants.BUFFER); - } else { // create new zip file - _zip = new ZipFile(null, Utils.Constants.NONE); - } - - function getEntry(/*Object*/entry) { - if (entry && _zip) { - var item; - // If entry was given as a file name - if (typeof entry === "string") - item = _zip.getEntry(entry); - // if entry was given as a ZipEntry object - if (typeof entry === "object" && entry.entryName != undefined && entry.header != undefined) - item = _zip.getEntry(entry.entryName); - - if (item) { - return item; - } - } - return null; - } - - return { - /** - * Extracts the given entry from the archive and returns the content as a Buffer object - * @param entry ZipEntry object or String with the full path of the entry - * - * @return Buffer or Null in case of error - */ - readFile : function(/*Object*/entry) { - var item = getEntry(entry); - return item && item.getData() || null; - }, - - /** - * Asynchronous readFile - * @param entry ZipEntry object or String with the full path of the entry - * @param callback - * - * @return Buffer or Null in case of error - */ - readFileAsync : function(/*Object*/entry, /*Function*/callback) { - var item = getEntry(entry); - if (item) { - item.getDataAsync(callback); - } else { - callback(null,"getEntry failed for:" + entry) - } - }, - - /** - * Extracts the given entry from the archive and returns the content as plain text in the given encoding - * @param entry ZipEntry object or String with the full path of the entry - * @param encoding Optional. If no encoding is specified utf8 is used - * - * @return String - */ - readAsText : function(/*Object*/entry, /*String - Optional*/encoding) { - var item = getEntry(entry); - if (item) { - var data = item.getData(); - if (data && data.length) { - return data.toString(encoding || "utf8"); - } - } - return ""; - }, - - /** - * Asynchronous readAsText - * @param entry ZipEntry object or String with the full path of the entry - * @param callback - * @param encoding Optional. If no encoding is specified utf8 is used - * - * @return String - */ - readAsTextAsync : function(/*Object*/entry, /*Function*/callback, /*String - Optional*/encoding) { - var item = getEntry(entry); - if (item) { - item.getDataAsync(function(data) { - if (data && data.length) { - callback(data.toString(encoding || "utf8")); - } else { - callback(""); - } - }) - } else { - callback(""); - } - }, - - /** - * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory - * - * @param entry - */ - deleteFile : function(/*Object*/entry) { // @TODO: test deleteFile - var item = getEntry(entry); - if (item) { - _zip.deleteEntry(item.entryName); - } - }, - - /** - * Adds a comment to the zip. The zip must be rewritten after adding the comment. - * - * @param comment - */ - addZipComment : function(/*String*/comment) { // @TODO: test addZipComment - _zip.comment = comment; - }, - - /** - * Returns the zip comment - * - * @return String - */ - getZipComment : function() { - return _zip.comment || ''; - }, - - /** - * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment - * The comment cannot exceed 65535 characters in length - * - * @param entry - * @param comment - */ - addZipEntryComment : function(/*Object*/entry,/*String*/comment) { - var item = getEntry(entry); - if (item) { - item.comment = comment; - } - }, - - /** - * Returns the comment of the specified entry - * - * @param entry - * @return String - */ - getZipEntryComment : function(/*Object*/entry) { - var item = getEntry(entry); - if (item) { - return item.comment || ''; - } - return '' - }, - - /** - * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content - * - * @param entry - * @param content - */ - updateFile : function(/*Object*/entry, /*Buffer*/content) { - var item = getEntry(entry); - if (item) { - item.setData(content); - } - }, - - /** - * Adds a file from the disk to the archive - * - * @param localPath - */ - addLocalFile : function(/*String*/localPath, /*String*/zipPath) { - if (fs.existsSync(localPath)) { - if(zipPath){ - zipPath=zipPath.split("\\").join("/"); - if(zipPath.charAt(zipPath.length - 1) != "/"){ - zipPath += "/"; - } - }else{ - zipPath=""; - } - var p = localPath.split("\\").join("/").split("/").pop(); - - this.addFile(zipPath+p, fs.readFileSync(localPath), "", 0) - } else { - throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); - } - }, - - /** - * Adds a local directory and all its nested files and directories to the archive - * - * @param localPath - */ - addLocalFolder : function(/*String*/localPath, /*String*/zipPath) { - if(zipPath){ - zipPath=zipPath.split("\\").join("/"); - if(zipPath.charAt(zipPath.length - 1) != "/"){ - zipPath += "/"; - } - }else{ - zipPath=""; - } - localPath = localPath.split("\\").join("/"); //windows fix - if (localPath.charAt(localPath.length - 1) != "/") - localPath += "/"; - - if (fs.existsSync(localPath)) { - - var items = Utils.findFiles(localPath), - self = this; - - if (items.length) { - items.forEach(function(path) { - var p = path.split("\\").join("/").replace(localPath, ""); //windows fix - if (p.charAt(p.length - 1) !== "/") { - self.addFile(zipPath+p, fs.readFileSync(path), "", 0) - } else { - self.addFile(zipPath+p, new Buffer(0), "", 0) - } - }); - } - } else { - throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); - } - }, - - /** - * Allows you to create a entry (file or directory) in the zip file. - * If you want to create a directory the entryName must end in / and a null buffer should be provided. - * Comment and attributes are optional - * - * @param entryName - * @param content - * @param comment - * @param attr - */ - addFile : function(/*String*/entryName, /*Buffer*/content, /*String*/comment, /*Number*/attr) { - var entry = new ZipEntry(); - entry.entryName = entryName; - entry.comment = comment || ""; - entry.attr = attr || 438; //0666; - if (entry.isDirectory && content.length) { - // throw Utils.Errors.DIRECTORY_CONTENT_ERROR; - } - entry.setData(content); - _zip.setEntry(entry); - }, - - /** - * Returns an array of ZipEntry objects representing the files and folders inside the archive - * - * @return Array - */ - getEntries : function() { - if (_zip) { - return _zip.entries; - } else { - return []; - } - }, - - /** - * Returns a ZipEntry object representing the file or folder specified by ``name``. - * - * @param name - * @return ZipEntry - */ - getEntry : function(/*String*/name) { - return getEntry(name); - }, - - /** - * Extracts the given entry to the given targetPath - * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted - * - * @param entry ZipEntry object or String with the full path of the entry - * @param targetPath Target folder where to write the file - * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder - * will be created in targetPath as well. Default is TRUE - * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. - * Default is FALSE - * - * @return Boolean - */ - extractEntryTo : function(/*Object*/entry, /*String*/targetPath, /*Boolean*/maintainEntryPath, /*Boolean*/overwrite) { - overwrite = overwrite || false; - maintainEntryPath = typeof maintainEntryPath == "undefined" ? true : maintainEntryPath; - - var item = getEntry(entry); - if (!item) { - throw Utils.Errors.NO_ENTRY; - } - - var target = pth.resolve(targetPath, maintainEntryPath ? item.entryName : pth.basename(item.entryName)); - - if (item.isDirectory) { - target = pth.resolve(target, ".."); - var children = _zip.getEntryChildren(item); - children.forEach(function(child) { - if (child.isDirectory) return; - var content = child.getData(); - if (!content) { - throw Utils.Errors.CANT_EXTRACT_FILE; - } - Utils.writeFileTo(pth.resolve(targetPath, maintainEntryPath ? child.entryName : child.entryName.substr(item.entryName.length)), content, overwrite); - }); - return true; - } - - var content = item.getData(); - if (!content) throw Utils.Errors.CANT_EXTRACT_FILE; - - if (fs.existsSync(targetPath) && !overwrite) { - throw Utils.Errors.CANT_OVERRIDE; - } - Utils.writeFileTo(target, content, overwrite); - - return true; - }, - - /** - * Extracts the entire archive to the given location - * - * @param targetPath Target location - * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. - * Default is FALSE - */ - extractAllTo : function(/*String*/targetPath, /*Boolean*/overwrite) { - overwrite = overwrite || false; - if (!_zip) { - throw Utils.Errors.NO_ZIP; - } - - _zip.entries.forEach(function(entry) { - if (entry.isDirectory) { - Utils.makeDir(pth.resolve(targetPath, entry.entryName.toString())); - return; - } - var content = entry.getData(); - if (!content) { - throw Utils.Errors.CANT_EXTRACT_FILE + "2"; - } - Utils.writeFileTo(pth.resolve(targetPath, entry.entryName.toString()), content, overwrite); - }) - }, - - /** - * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip - * - * @param targetFileName - * @param callback - */ - writeZip : function(/*String*/targetFileName, /*Function*/callback) { - if (arguments.length == 1) { - if (typeof targetFileName == "function") { - callback = targetFileName; - targetFileName = ""; - } - } - - if (!targetFileName && _filename) { - targetFileName = _filename; - } - if (!targetFileName) return; - - var zipData = _zip.compressToBuffer(); - if (zipData) { - Utils.writeFileTo(targetFileName, zipData, true); - } - }, - - /** - * Returns the content of the entire zip file as a Buffer object - * - * @return Buffer - */ - toBuffer : function(/*Function*/onSuccess,/*Function*/onFail,/*Function*/onItemStart,/*Function*/onItemEnd) { - this.valueOf = 2; - if (typeof onSuccess == "function") { - _zip.toAsyncBuffer(onSuccess,onFail,onItemStart,onItemEnd); - return null; - } - return _zip.compressToBuffer() - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/entryHeader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/entryHeader.js deleted file mode 100644 index a29c70f1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/entryHeader.js +++ /dev/null @@ -1,261 +0,0 @@ -var Utils = require("../util"), - Constants = Utils.Constants; - -/* The central directory file header */ -module.exports = function () { - var _verMade = 0x0A, - _version = 0x0A, - _flags = 0, - _method = 0, - _time = 0, - _crc = 0, - _compressedSize = 0, - _size = 0, - _fnameLen = 0, - _extraLen = 0, - - _comLen = 0, - _diskStart = 0, - _inattr = 0, - _attr = 0, - _offset = 0; - - var _dataHeader = {}; - - function setTime(val) { - var val = new Date(val); - _time = (val.getFullYear() - 1980 & 0x7f) << 25 // b09-16 years from 1980 - | (val.getMonth() + 1) << 21 // b05-08 month - | val.getDay() << 16 // b00-04 hour - - // 2 bytes time - | val.getHours() << 11 // b11-15 hour - | val.getMinutes() << 5 // b05-10 minute - | val.getSeconds() >> 1; // b00-04 seconds divided by 2 - } - - setTime(+new Date()); - - return { - get made () { return _verMade; }, - set made (val) { _verMade = val; }, - - get version () { return _version; }, - set version (val) { _version = val }, - - get flags () { return _flags }, - set flags (val) { _flags = val; }, - - get method () { return _method; }, - set method (val) { _method = val; }, - - get time () { return new Date( - ((_time >> 25) & 0x7f) + 1980, - ((_time >> 21) & 0x0f) - 1, - (_time >> 16) & 0x1f, - (_time >> 11) & 0x1f, - (_time >> 5) & 0x3f, - (_time & 0x1f) << 1 - ); - }, - set time (val) { - setTime(val); - }, - - get crc () { return _crc; }, - set crc (val) { _crc = val; }, - - get compressedSize () { return _compressedSize; }, - set compressedSize (val) { _compressedSize = val; }, - - get size () { return _size; }, - set size (val) { _size = val; }, - - get fileNameLength () { return _fnameLen; }, - set fileNameLength (val) { _fnameLen = val; }, - - get extraLength () { return _extraLen }, - set extraLength (val) { _extraLen = val; }, - - get commentLength () { return _comLen }, - set commentLength (val) { _comLen = val }, - - get diskNumStart () { return _diskStart }, - set diskNumStart (val) { _diskStart = val }, - - get inAttr () { return _inattr }, - set inAttr (val) { _inattr = val }, - - get attr () { return _attr }, - set attr (val) { _attr = val }, - - get offset () { return _offset }, - set offset (val) { _offset = val }, - - get encripted () { return (_flags & 1) == 1 }, - - get entryHeaderSize () { - return Constants.CENHDR + _fnameLen + _extraLen + _comLen; - }, - - get realDataOffset () { - return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen; - }, - - get dataHeader () { - return _dataHeader; - }, - - loadDataHeaderFromBinary : function(/*Buffer*/input) { - var data = input.slice(_offset, _offset + Constants.LOCHDR); - // 30 bytes and should start with "PK\003\004" - if (data.readUInt32LE(0) != Constants.LOCSIG) { - throw Utils.Errors.INVALID_LOC; - } - _dataHeader = { - // version needed to extract - version : data.readUInt16LE(Constants.LOCVER), - // general purpose bit flag - flags : data.readUInt16LE(Constants.LOCFLG), - // compression method - method : data.readUInt16LE(Constants.LOCHOW), - // modification time (2 bytes time, 2 bytes date) - time : data.readUInt32LE(Constants.LOCTIM), - // uncompressed file crc-32 value - crc : data.readUInt32LE(Constants.LOCCRC), - // compressed size - compressedSize : data.readUInt32LE(Constants.LOCSIZ), - // uncompressed size - size : data.readUInt32LE(Constants.LOCLEN), - // filename length - fnameLen : data.readUInt16LE(Constants.LOCNAM), - // extra field length - extraLen : data.readUInt16LE(Constants.LOCEXT) - } - }, - - loadFromBinary : function(/*Buffer*/data) { - // data should be 46 bytes and start with "PK 01 02" - if (data.length != Constants.CENHDR || data.readUInt32LE(0) != Constants.CENSIG) { - throw Utils.Errors.INVALID_CEN; - } - // version made by - _verMade = data.readUInt16LE(Constants.CENVEM); - // version needed to extract - _version = data.readUInt16LE(Constants.CENVER); - // encrypt, decrypt flags - _flags = data.readUInt16LE(Constants.CENFLG); - // compression method - _method = data.readUInt16LE(Constants.CENHOW); - // modification time (2 bytes time, 2 bytes date) - _time = data.readUInt32LE(Constants.CENTIM); - // uncompressed file crc-32 value - _crc = data.readUInt32LE(Constants.CENCRC); - // compressed size - _compressedSize = data.readUInt32LE(Constants.CENSIZ); - // uncompressed size - _size = data.readUInt32LE(Constants.CENLEN); - // filename length - _fnameLen = data.readUInt16LE(Constants.CENNAM); - // extra field length - _extraLen = data.readUInt16LE(Constants.CENEXT); - // file comment length - _comLen = data.readUInt16LE(Constants.CENCOM); - // volume number start - _diskStart = data.readUInt16LE(Constants.CENDSK); - // internal file attributes - _inattr = data.readUInt16LE(Constants.CENATT); - // external file attributes - _attr = data.readUInt32LE(Constants.CENATX); - // LOC header offset - _offset = data.readUInt32LE(Constants.CENOFF); - }, - - dataHeaderToBinary : function() { - // LOC header size (30 bytes) - var data = new Buffer(Constants.LOCHDR); - // "PK\003\004" - data.writeUInt32LE(Constants.LOCSIG, 0); - // version needed to extract - data.writeUInt16LE(_version, Constants.LOCVER); - // general purpose bit flag - data.writeUInt16LE(_flags, Constants.LOCFLG); - // compression method - data.writeUInt16LE(_method, Constants.LOCHOW); - // modification time (2 bytes time, 2 bytes date) - data.writeUInt32LE(_time, Constants.LOCTIM); - // uncompressed file crc-32 value - data.writeUInt32LE(_crc, Constants.LOCCRC); - // compressed size - data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); - // uncompressed size - data.writeUInt32LE(_size, Constants.LOCLEN); - // filename length - data.writeUInt16LE(_fnameLen, Constants.LOCNAM); - // extra field length - data.writeUInt16LE(_extraLen, Constants.LOCEXT); - return data; - }, - - entryHeaderToBinary : function() { - // CEN header size (46 bytes) - var data = new Buffer(Constants.CENHDR + _fnameLen + _extraLen + _comLen); - // "PK\001\002" - data.writeUInt32LE(Constants.CENSIG, 0); - // version made by - data.writeUInt16LE(_verMade, Constants.CENVEM); - // version needed to extract - data.writeUInt16LE(_version, Constants.CENVER); - // encrypt, decrypt flags - data.writeUInt16LE(_flags, Constants.CENFLG); - // compression method - data.writeUInt16LE(_method, Constants.CENHOW); - // modification time (2 bytes time, 2 bytes date) - data.writeUInt32LE(_time, Constants.CENTIM); - // uncompressed file crc-32 value - data.writeInt32LE(_crc, Constants.CENCRC, true); - // compressed size - data.writeUInt32LE(_compressedSize, Constants.CENSIZ); - // uncompressed size - data.writeUInt32LE(_size, Constants.CENLEN); - // filename length - data.writeUInt16LE(_fnameLen, Constants.CENNAM); - // extra field length - data.writeUInt16LE(_extraLen, Constants.CENEXT); - // file comment length - data.writeUInt16LE(_comLen, Constants.CENCOM); - // volume number start - data.writeUInt16LE(_diskStart, Constants.CENDSK); - // internal file attributes - data.writeUInt16LE(_inattr, Constants.CENATT); - // external file attributes - data.writeUInt32LE(_attr, Constants.CENATX); - // LOC header offset - data.writeUInt32LE(_offset, Constants.CENOFF); - // fill all with - data.fill(0x00, Constants.CENHDR); - return data; - }, - - toString : function() { - return '{\n' + - '\t"made" : ' + _verMade + ",\n" + - '\t"version" : ' + _version + ",\n" + - '\t"flags" : ' + _flags + ",\n" + - '\t"method" : ' + Utils.methodToString(_method) + ",\n" + - '\t"time" : ' + _time + ",\n" + - '\t"crc" : 0x' + _crc.toString(16).toUpperCase() + ",\n" + - '\t"compressedSize" : ' + _compressedSize + " bytes,\n" + - '\t"size" : ' + _size + " bytes,\n" + - '\t"fileNameLength" : ' + _fnameLen + ",\n" + - '\t"extraLength" : ' + _extraLen + " bytes,\n" + - '\t"commentLength" : ' + _comLen + " bytes,\n" + - '\t"diskNumStart" : ' + _diskStart + ",\n" + - '\t"inAttr" : ' + _inattr + ",\n" + - '\t"attr" : ' + _attr + ",\n" + - '\t"offset" : ' + _offset + ",\n" + - '\t"entryHeaderSize" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + " bytes\n" + - '}'; - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/index.js deleted file mode 100644 index b8c67b96..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.EntryHeader = require("./entryHeader"); -exports.MainHeader = require("./mainHeader"); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/mainHeader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/mainHeader.js deleted file mode 100644 index 002bc8a7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/mainHeader.js +++ /dev/null @@ -1,80 +0,0 @@ -var Utils = require("../util"), - Constants = Utils.Constants; - -/* The entries in the end of central directory */ -module.exports = function () { - var _volumeEntries = 0, - _totalEntries = 0, - _size = 0, - _offset = 0, - _commentLength = 0; - - return { - get diskEntries () { return _volumeEntries }, - set diskEntries (/*Number*/val) { _volumeEntries = _totalEntries = val; }, - - get totalEntries () { return _totalEntries }, - set totalEntries (/*Number*/val) { _totalEntries = _volumeEntries = val; }, - - get size () { return _size }, - set size (/*Number*/val) { _size = val; }, - - get offset () { return _offset }, - set offset (/*Number*/val) { _offset = val; }, - - get commentLength () { return _commentLength }, - set commentLength (/*Number*/val) { _commentLength = val; }, - - get mainHeaderSize () { - return Constants.ENDHDR + _commentLength; - }, - - loadFromBinary : function(/*Buffer*/data) { - // data should be 22 bytes and start with "PK 05 06" - if (data.length != Constants.ENDHDR || data.readUInt32LE(0) != Constants.ENDSIG) - throw Utils.Errors.INVALID_END; - - // number of entries on this volume - _volumeEntries = data.readUInt16LE(Constants.ENDSUB); - // total number of entries - _totalEntries = data.readUInt16LE(Constants.ENDTOT); - // central directory size in bytes - _size = data.readUInt32LE(Constants.ENDSIZ); - // offset of first CEN header - _offset = data.readUInt32LE(Constants.ENDOFF); - // zip file comment length - _commentLength = data.readUInt16LE(Constants.ENDCOM); - }, - - toBinary : function() { - var b = new Buffer(Constants.ENDHDR + _commentLength); - // "PK 05 06" signature - b.writeUInt32LE(Constants.ENDSIG, 0); - b.writeUInt32LE(0, 4); - // number of entries on this volume - b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); - // total number of entries - b.writeUInt16LE(_totalEntries, Constants.ENDTOT); - // central directory size in bytes - b.writeUInt32LE(_size, Constants.ENDSIZ); - // offset of first CEN header - b.writeUInt32LE(_offset, Constants.ENDOFF); - // zip file comment length - b.writeUInt16LE(_commentLength, Constants.ENDCOM); - // fill comment memory with spaces so no garbage is left there - b.fill(" ", Constants.ENDHDR); - - return b; - }, - - toString : function() { - return '{\n' + - '\t"diskEntries" : ' + _volumeEntries + ",\n" + - '\t"totalEntries" : ' + _totalEntries + ",\n" + - '\t"size" : ' + _size + " bytes,\n" + - '\t"offset" : 0x' + _offset.toString(16).toUpperCase() + ",\n" + - '\t"commentLength" : 0x' + _commentLength + "\n" + - '}'; - } - } -}; \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/deflater.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/deflater.js deleted file mode 100644 index 32679434..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/deflater.js +++ /dev/null @@ -1,1578 +0,0 @@ -/* - * $Id: rawdeflate.js,v 0.5 2013/04/09 14:25:38 dankogai Exp dankogai $ - * - * GNU General Public License, version 2 (GPL-2.0) - * http://opensource.org/licenses/GPL-2.0 - * Original: - * http://www.onicos.com/staff/iz/amuse/javascript/expert/deflate.txt - */ -function JSDeflater(/*inbuff*/inbuf) { - - /* Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp> - * Version: 1.0.1 - * LastModified: Dec 25 1999 - */ - - var WSIZE = 32768, // Sliding Window size - zip_STORED_BLOCK = 0, - zip_STATIC_TREES = 1, - zip_DYN_TREES = 2, - zip_DEFAULT_LEVEL = 6, - zip_FULL_SEARCH = true, - zip_INBUFSIZ = 32768, // Input buffer size - zip_INBUF_EXTRA = 64, // Extra buffer - zip_OUTBUFSIZ = 1024 * 8, - zip_window_size = 2 * WSIZE, - MIN_MATCH = 3, - MAX_MATCH = 258, - zip_BITS = 16, - LIT_BUFSIZE = 0x2000, - zip_HASH_BITS = 13, - zip_DIST_BUFSIZE = LIT_BUFSIZE, - zip_HASH_SIZE = 1 << zip_HASH_BITS, - zip_HASH_MASK = zip_HASH_SIZE - 1, - zip_WMASK = WSIZE - 1, - zip_NIL = 0, // Tail of hash chains - zip_TOO_FAR = 4096, - zip_MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1, - zip_MAX_DIST = WSIZE - zip_MIN_LOOKAHEAD, - zip_SMALLEST = 1, - zip_MAX_BITS = 15, - zip_MAX_BL_BITS = 7, - zip_LENGTH_CODES = 29, - zip_LITERALS = 256, - zip_END_BLOCK = 256, - zip_L_CODES = zip_LITERALS + 1 + zip_LENGTH_CODES, - zip_D_CODES = 30, - zip_BL_CODES = 19, - zip_REP_3_6 = 16, - zip_REPZ_3_10 = 17, - zip_REPZ_11_138 = 18, - zip_HEAP_SIZE = 2 * zip_L_CODES + 1, - zip_H_SHIFT = parseInt((zip_HASH_BITS + MIN_MATCH - 1) / MIN_MATCH); - - var zip_free_queue, zip_qhead, zip_qtail, zip_initflag, zip_outbuf = null, zip_outcnt, zip_outoff, zip_complete, - zip_window, zip_d_buf, zip_l_buf, zip_prev, zip_bi_buf, zip_bi_valid, zip_block_start, zip_ins_h, zip_hash_head, - zip_prev_match, zip_match_available, zip_match_length, zip_prev_length, zip_strstart, zip_match_start, zip_eofile, - zip_lookahead, zip_max_chain_length, zip_max_lazy_match, zip_compr_level, zip_good_match, zip_nice_match, - zip_dyn_ltree, zip_dyn_dtree, zip_static_ltree, zip_static_dtree, zip_bl_tree, zip_l_desc, zip_d_desc, zip_bl_desc, - zip_bl_count, zip_heap, zip_heap_len, zip_heap_max, zip_depth, zip_length_code, zip_dist_code, zip_base_length, - zip_base_dist, zip_flag_buf, zip_last_lit, zip_last_dist, zip_last_flags, zip_flags, zip_flag_bit, zip_opt_len, - zip_static_len, zip_deflate_data, zip_deflate_pos; - - var zip_DeflateCT = function () { - this.fc = 0; // frequency count or bit string - this.dl = 0; // father node in Huffman tree or length of bit string - }; - - var zip_DeflateTreeDesc = function () { - this.dyn_tree = null; // the dynamic tree - this.static_tree = null; // corresponding static tree or NULL - this.extra_bits = null; // extra bits for each code or NULL - this.extra_base = 0; // base index for extra_bits - this.elems = 0; // max number of elements in the tree - this.max_length = 0; // max bit length for the codes - this.max_code = 0; // largest code with non zero frequency - }; - - /* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ - var zip_DeflateConfiguration = function (a, b, c, d) { - this.good_length = a; // reduce lazy search above this match length - this.max_lazy = b; // do not perform lazy search above this match length - this.nice_length = c; // quit search above this match length - this.max_chain = d; - }; - - var zip_DeflateBuffer = function () { - this.next = null; - this.len = 0; - this.ptr = new Array(zip_OUTBUFSIZ); - this.off = 0; - }; - - /* constant tables */ - var zip_extra_lbits = new Array( - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0); - var zip_extra_dbits = new Array( - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13); - var zip_extra_blbits = new Array( - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7); - var zip_bl_order = new Array( - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15); - var zip_configuration_table = new Array( - new zip_DeflateConfiguration(0, 0, 0, 0), - new zip_DeflateConfiguration(4, 4, 8, 4), - new zip_DeflateConfiguration(4, 5, 16, 8), - new zip_DeflateConfiguration(4, 6, 32, 32), - new zip_DeflateConfiguration(4, 4, 16, 16), - new zip_DeflateConfiguration(8, 16, 32, 32), - new zip_DeflateConfiguration(8, 16, 128, 128), - new zip_DeflateConfiguration(8, 32, 128, 256), - new zip_DeflateConfiguration(32, 128, 258, 1024), - new zip_DeflateConfiguration(32, 258, 258, 4096)); - - - /* routines (deflate) */ - - var zip_deflate_start = function (level) { - var i; - - if (!level) - level = zip_DEFAULT_LEVEL; - else if (level < 1) - level = 1; - else if (level > 9) - level = 9; - - zip_compr_level = level; - zip_initflag = false; - zip_eofile = false; - if (zip_outbuf != null) - return; - - zip_free_queue = zip_qhead = zip_qtail = null; - zip_outbuf = new Array(zip_OUTBUFSIZ); - zip_window = new Array(zip_window_size); - zip_d_buf = new Array(zip_DIST_BUFSIZE); - zip_l_buf = new Array(zip_INBUFSIZ + zip_INBUF_EXTRA); - zip_prev = new Array(1 << zip_BITS); - zip_dyn_ltree = new Array(zip_HEAP_SIZE); - for (i = 0; i < zip_HEAP_SIZE; i++) zip_dyn_ltree[i] = new zip_DeflateCT(); - zip_dyn_dtree = new Array(2 * zip_D_CODES + 1); - for (i = 0; i < 2 * zip_D_CODES + 1; i++) zip_dyn_dtree[i] = new zip_DeflateCT(); - zip_static_ltree = new Array(zip_L_CODES + 2); - for (i = 0; i < zip_L_CODES + 2; i++) zip_static_ltree[i] = new zip_DeflateCT(); - zip_static_dtree = new Array(zip_D_CODES); - for (i = 0; i < zip_D_CODES; i++) zip_static_dtree[i] = new zip_DeflateCT(); - zip_bl_tree = new Array(2 * zip_BL_CODES + 1); - for (i = 0; i < 2 * zip_BL_CODES + 1; i++) zip_bl_tree[i] = new zip_DeflateCT(); - zip_l_desc = new zip_DeflateTreeDesc(); - zip_d_desc = new zip_DeflateTreeDesc(); - zip_bl_desc = new zip_DeflateTreeDesc(); - zip_bl_count = new Array(zip_MAX_BITS + 1); - zip_heap = new Array(2 * zip_L_CODES + 1); - zip_depth = new Array(2 * zip_L_CODES + 1); - zip_length_code = new Array(MAX_MATCH - MIN_MATCH + 1); - zip_dist_code = new Array(512); - zip_base_length = new Array(zip_LENGTH_CODES); - zip_base_dist = new Array(zip_D_CODES); - zip_flag_buf = new Array(parseInt(LIT_BUFSIZE / 8)); - }; - - var zip_deflate_end = function () { - zip_free_queue = zip_qhead = zip_qtail = null; - zip_outbuf = null; - zip_window = null; - zip_d_buf = null; - zip_l_buf = null; - zip_prev = null; - zip_dyn_ltree = null; - zip_dyn_dtree = null; - zip_static_ltree = null; - zip_static_dtree = null; - zip_bl_tree = null; - zip_l_desc = null; - zip_d_desc = null; - zip_bl_desc = null; - zip_bl_count = null; - zip_heap = null; - zip_depth = null; - zip_length_code = null; - zip_dist_code = null; - zip_base_length = null; - zip_base_dist = null; - zip_flag_buf = null; - }; - - var zip_reuse_queue = function (p) { - p.next = zip_free_queue; - zip_free_queue = p; - }; - - var zip_new_queue = function () { - var p; - - if (zip_free_queue != null) { - p = zip_free_queue; - zip_free_queue = zip_free_queue.next; - } - else - p = new zip_DeflateBuffer(); - p.next = null; - p.len = p.off = 0; - - return p; - }; - - var zip_head1 = function (i) { - return zip_prev[WSIZE + i]; - }; - - var zip_head2 = function (i, val) { - return zip_prev[WSIZE + i] = val; - }; - - /* put_byte is used for the compressed output, put_ubyte for the - * uncompressed output. However unlzw() uses window for its - * suffix table instead of its output buffer, so it does not use put_ubyte - * (to be cleaned up). - */ - var zip_put_byte = function (c) { - zip_outbuf[zip_outoff + zip_outcnt++] = c; - if (zip_outoff + zip_outcnt == zip_OUTBUFSIZ) - zip_qoutbuf(); - }; - - /* Output a 16 bit value, lsb first */ - var zip_put_short = function (w) { - w &= 0xffff; - if (zip_outoff + zip_outcnt < zip_OUTBUFSIZ - 2) { - zip_outbuf[zip_outoff + zip_outcnt++] = (w & 0xff); - zip_outbuf[zip_outoff + zip_outcnt++] = (w >>> 8); - } else { - zip_put_byte(w & 0xff); - zip_put_byte(w >>> 8); - } - }; - - /* ========================================================================== - * Insert string s in the dictionary and set match_head to the previous head - * of the hash chain (the most recent string with same hash key). Return - * the previous length of the hash chain. - * IN assertion: all calls to to INSERT_STRING are made with consecutive - * input characters and the first MIN_MATCH bytes of s are valid - * (except for the last MIN_MATCH-1 bytes of the input file). - */ - var zip_INSERT_STRING = function () { - zip_ins_h = ((zip_ins_h << zip_H_SHIFT) - ^ (zip_window[zip_strstart + MIN_MATCH - 1] & 0xff)) - & zip_HASH_MASK; - zip_hash_head = zip_head1(zip_ins_h); - zip_prev[zip_strstart & zip_WMASK] = zip_hash_head; - zip_head2(zip_ins_h, zip_strstart); - }; - - /* Send a code of the given tree. c and tree must not have side effects */ - var zip_SEND_CODE = function (c, tree) { - zip_send_bits(tree[c].fc, tree[c].dl); - }; - - /* Mapping from a distance to a distance code. dist is the distance - 1 and - * must not have side effects. dist_code[256] and dist_code[257] are never - * used. - */ - var zip_D_CODE = function (dist) { - return (dist < 256 ? zip_dist_code[dist] - : zip_dist_code[256 + (dist >> 7)]) & 0xff; - }; - - /* ========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ - var zip_SMALLER = function (tree, n, m) { - return tree[n].fc < tree[m].fc || - (tree[n].fc == tree[m].fc && zip_depth[n] <= zip_depth[m]); - }; - - /* ========================================================================== - * read string data - */ - var zip_read_buff = function (buff, offset, n) { - var i; - for (i = 0; i < n && zip_deflate_pos < zip_deflate_data.length; i++) - buff[offset + i] = - zip_deflate_data[zip_deflate_pos++] & 0xff; - return i; - }; - - /* ========================================================================== - * Initialize the "longest match" routines for a new file - */ - var zip_lm_init = function () { - var j; - - /* Initialize the hash table. */ - for (j = 0; j < zip_HASH_SIZE; j++) - zip_prev[WSIZE + j] = 0; - zip_max_lazy_match = zip_configuration_table[zip_compr_level].max_lazy; - zip_good_match = zip_configuration_table[zip_compr_level].good_length; - if (!zip_FULL_SEARCH) - zip_nice_match = zip_configuration_table[zip_compr_level].nice_length; - zip_max_chain_length = zip_configuration_table[zip_compr_level].max_chain; - - zip_strstart = 0; - zip_block_start = 0; - - zip_lookahead = zip_read_buff(zip_window, 0, 2 * WSIZE); - if (zip_lookahead <= 0) { - zip_eofile = true; - zip_lookahead = 0; - return; - } - zip_eofile = false; - /* Make sure that we always have enough lookahead. This is important - * if input comes from a device such as a tty. - */ - while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) - zip_fill_window(); - - /* If lookahead < MIN_MATCH, ins_h is garbage, but this is - * not important since only literal bytes will be emitted. - */ - zip_ins_h = 0; - for (j = 0; j < MIN_MATCH - 1; j++) { - zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[j] & 0xff)) & zip_HASH_MASK; - } - }; - - /* ========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - */ - var zip_longest_match = function (cur_match) { - var chain_length = zip_max_chain_length; // max hash chain length - var scanp = zip_strstart; // current string - var matchp; // matched string - var len; // length of current match - var best_len = zip_prev_length; // best match length so far - - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - var limit = (zip_strstart > zip_MAX_DIST ? zip_strstart - zip_MAX_DIST : zip_NIL); - - var strendp = zip_strstart + MAX_MATCH; - var scan_end1 = zip_window[scanp + best_len - 1]; - var scan_end = zip_window[scanp + best_len]; - - /* Do not waste too much time if we already have a good match: */ - if (zip_prev_length >= zip_good_match) - chain_length >>= 2; - - do { - matchp = cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2: - */ - if (zip_window[matchp + best_len] != scan_end || - zip_window[matchp + best_len - 1] != scan_end1 || - zip_window[matchp] != zip_window[scanp] || - zip_window[++matchp] != zip_window[scanp + 1]) { - continue; - } - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scanp += 2; - matchp++; - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - } while (zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - scanp < strendp); - - len = MAX_MATCH - (strendp - scanp); - scanp = strendp - MAX_MATCH; - - if (len > best_len) { - zip_match_start = cur_match; - best_len = len; - if (zip_FULL_SEARCH) { - if (len >= MAX_MATCH) break; - } else { - if (len >= zip_nice_match) break; - } - - scan_end1 = zip_window[scanp + best_len - 1]; - scan_end = zip_window[scanp + best_len]; - } - } while ((cur_match = zip_prev[cur_match & zip_WMASK]) > limit - && --chain_length != 0); - - return best_len; - }; - - /* ========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead, and sets eofile if end of input file. - * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0 - * OUT assertions: at least one byte has been read, or eofile is set; - * file reads are performed for at least two bytes (required for the - * translate_eol option). - */ - var zip_fill_window = function () { - var n, m; - - // Amount of free space at the end of the window. - var more = zip_window_size - zip_lookahead - zip_strstart; - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (more == -1) { - /* Very unlikely, but possible on 16 bit machine if strstart == 0 - * and lookahead == 1 (input done one byte at time) - */ - more--; - } else if (zip_strstart >= WSIZE + zip_MAX_DIST) { - /* By the IN assertion, the window is not empty so we can't confuse - * more == 0 with more == 64K on a 16 bit machine. - */ - for (n = 0; n < WSIZE; n++) - zip_window[n] = zip_window[n + WSIZE]; - - zip_match_start -= WSIZE; - zip_strstart -= WSIZE; - /* we now have strstart >= MAX_DIST: */ - zip_block_start -= WSIZE; - - for (n = 0; n < zip_HASH_SIZE; n++) { - m = zip_head1(n); - zip_head2(n, m >= WSIZE ? m - WSIZE : zip_NIL); - } - for (n = 0; n < WSIZE; n++) { - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - m = zip_prev[n]; - zip_prev[n] = (m >= WSIZE ? m - WSIZE : zip_NIL); - } - more += WSIZE; - } - // At this point, more >= 2 - if (!zip_eofile) { - n = zip_read_buff(zip_window, zip_strstart + zip_lookahead, more); - if (n <= 0) - zip_eofile = true; - else - zip_lookahead += n; - } - }; - - /* ========================================================================== - * Processes a new input file and return its compressed length. This - * function does not perform lazy evaluationof matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ - var zip_deflate_fast = function () { - while (zip_lookahead != 0 && zip_qhead == null) { - var flush; // set if current block must be flushed - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - zip_INSERT_STRING(); - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if (zip_hash_head != zip_NIL && - zip_strstart - zip_hash_head <= zip_MAX_DIST) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - zip_match_length = zip_longest_match(zip_hash_head); - /* longest_match() sets match_start */ - if (zip_match_length > zip_lookahead) - zip_match_length = zip_lookahead; - } - if (zip_match_length >= MIN_MATCH) { - flush = zip_ct_tally(zip_strstart - zip_match_start, - zip_match_length - MIN_MATCH); - zip_lookahead -= zip_match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ - if (zip_match_length <= zip_max_lazy_match) { - zip_match_length--; // string at strstart already in hash table - do { - zip_strstart++; - zip_INSERT_STRING(); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH - * these bytes are garbage, but it does not matter since - * the next lookahead bytes will be emitted as literals. - */ - } while (--zip_match_length != 0); - zip_strstart++; - } else { - zip_strstart += zip_match_length; - zip_match_length = 0; - zip_ins_h = zip_window[zip_strstart] & 0xff; - zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[zip_strstart + 1] & 0xff)) & zip_HASH_MASK; - } - } else { - /* No match, output a literal byte */ - flush = zip_ct_tally(0, zip_window[zip_strstart] & 0xff); - zip_lookahead--; - zip_strstart++; - } - if (flush) { - zip_flush_block(0); - zip_block_start = zip_strstart; - } - - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) - zip_fill_window(); - } - }; - - var zip_deflate_better = function () { - /* Process the input block. */ - while (zip_lookahead != 0 && zip_qhead == null) { - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - zip_INSERT_STRING(); - - /* Find the longest match, discarding those <= prev_length. - */ - zip_prev_length = zip_match_length; - zip_prev_match = zip_match_start; - zip_match_length = MIN_MATCH - 1; - - if (zip_hash_head != zip_NIL && - zip_prev_length < zip_max_lazy_match && - zip_strstart - zip_hash_head <= zip_MAX_DIST) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - zip_match_length = zip_longest_match(zip_hash_head); - /* longest_match() sets match_start */ - if (zip_match_length > zip_lookahead) - zip_match_length = zip_lookahead; - - /* Ignore a length 3 match if it is too distant: */ - if (zip_match_length == MIN_MATCH && - zip_strstart - zip_match_start > zip_TOO_FAR) { - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - zip_match_length--; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if (zip_prev_length >= MIN_MATCH && - zip_match_length <= zip_prev_length) { - var flush; // set if current block must be flushed - flush = zip_ct_tally(zip_strstart - 1 - zip_prev_match, - zip_prev_length - MIN_MATCH); - - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. - */ - zip_lookahead -= zip_prev_length - 1; - zip_prev_length -= 2; - do { - zip_strstart++; - zip_INSERT_STRING(); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH - * these bytes are garbage, but it does not matter since the - * next lookahead bytes will always be emitted as literals. - */ - } while (--zip_prev_length != 0); - zip_match_available = 0; - zip_match_length = MIN_MATCH - 1; - zip_strstart++; - if (flush) { - zip_flush_block(0); - zip_block_start = zip_strstart; - } - } else if (zip_match_available != 0) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - if (zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff)) { - zip_flush_block(0); - zip_block_start = zip_strstart; - } - zip_strstart++; - zip_lookahead--; - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - zip_match_available = 1; - zip_strstart++; - zip_lookahead--; - } - - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) - zip_fill_window(); - } - }; - - var zip_init_deflate = function () { - if (zip_eofile) - return; - zip_bi_buf = 0; - zip_bi_valid = 0; - zip_ct_init(); - zip_lm_init(); - - zip_qhead = null; - zip_outcnt = 0; - zip_outoff = 0; - zip_match_available = 0; - - if (zip_compr_level <= 3) { - zip_prev_length = MIN_MATCH - 1; - zip_match_length = 0; - } - else { - zip_match_length = MIN_MATCH - 1; - zip_match_available = 0; - zip_match_available = 0; - } - - zip_complete = false; - }; - - /* ========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ - var zip_deflate_internal = function (buff, off, buff_size) { - var n; - - if (!zip_initflag) { - zip_init_deflate(); - zip_initflag = true; - if (zip_lookahead == 0) { // empty - zip_complete = true; - return 0; - } - } - - if ((n = zip_qcopy(buff, off, buff_size)) == buff_size) - return buff_size; - - if (zip_complete) - return n; - - if (zip_compr_level <= 3) // optimized for speed - zip_deflate_fast(); - else - zip_deflate_better(); - if (zip_lookahead == 0) { - if (zip_match_available != 0) - zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff); - zip_flush_block(1); - zip_complete = true; - } - return n + zip_qcopy(buff, n + off, buff_size - n); - }; - - var zip_qcopy = function (buff, off, buff_size) { - var n, i, j; - - n = 0; - while (zip_qhead != null && n < buff_size) { - i = buff_size - n; - if (i > zip_qhead.len) - i = zip_qhead.len; - for (j = 0; j < i; j++) - buff[off + n + j] = zip_qhead.ptr[zip_qhead.off + j]; - - zip_qhead.off += i; - zip_qhead.len -= i; - n += i; - if (zip_qhead.len == 0) { - var p; - p = zip_qhead; - zip_qhead = zip_qhead.next; - zip_reuse_queue(p); - } - } - - if (n == buff_size) - return n; - - if (zip_outoff < zip_outcnt) { - i = buff_size - n; - if (i > zip_outcnt - zip_outoff) - i = zip_outcnt - zip_outoff; - // System.arraycopy(outbuf, outoff, buff, off + n, i); - for (j = 0; j < i; j++) - buff[off + n + j] = zip_outbuf[zip_outoff + j]; - zip_outoff += i; - n += i; - if (zip_outcnt == zip_outoff) - zip_outcnt = zip_outoff = 0; - } - return n; - }; - - /* ========================================================================== - * Allocate the match buffer, initialize the various tables and save the - * location of the internal file attribute (ascii/binary) and method - * (DEFLATE/STORE). - */ - var zip_ct_init = function () { - var n; // iterates over tree elements - var bits; // bit counter - var length; // length value - var code; // code value - var dist; // distance index - - if (zip_static_dtree[0].dl != 0) return; // ct_init already called - - zip_l_desc.dyn_tree = zip_dyn_ltree; - zip_l_desc.static_tree = zip_static_ltree; - zip_l_desc.extra_bits = zip_extra_lbits; - zip_l_desc.extra_base = zip_LITERALS + 1; - zip_l_desc.elems = zip_L_CODES; - zip_l_desc.max_length = zip_MAX_BITS; - zip_l_desc.max_code = 0; - - zip_d_desc.dyn_tree = zip_dyn_dtree; - zip_d_desc.static_tree = zip_static_dtree; - zip_d_desc.extra_bits = zip_extra_dbits; - zip_d_desc.extra_base = 0; - zip_d_desc.elems = zip_D_CODES; - zip_d_desc.max_length = zip_MAX_BITS; - zip_d_desc.max_code = 0; - - zip_bl_desc.dyn_tree = zip_bl_tree; - zip_bl_desc.static_tree = null; - zip_bl_desc.extra_bits = zip_extra_blbits; - zip_bl_desc.extra_base = 0; - zip_bl_desc.elems = zip_BL_CODES; - zip_bl_desc.max_length = zip_MAX_BL_BITS; - zip_bl_desc.max_code = 0; - - // Initialize the mapping length (0..255) -> length code (0..28) - length = 0; - for (code = 0; code < zip_LENGTH_CODES - 1; code++) { - zip_base_length[code] = length; - for (n = 0; n < (1 << zip_extra_lbits[code]); n++) - zip_length_code[length++] = code; - } - /* Note that the length 255 (match length 258) can be represented - * in two different ways: code 284 + 5 bits or code 285, so we - * overwrite length_code[255] to use the best encoding: - */ - zip_length_code[length - 1] = code; - - /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ - dist = 0; - for (code = 0; code < 16; code++) { - zip_base_dist[code] = dist; - for (n = 0; n < (1 << zip_extra_dbits[code]); n++) { - zip_dist_code[dist++] = code; - } - } - dist >>= 7; // from now on, all distances are divided by 128 - for (; code < zip_D_CODES; code++) { - zip_base_dist[code] = dist << 7; - for (n = 0; n < (1 << (zip_extra_dbits[code] - 7)); n++) - zip_dist_code[256 + dist++] = code; - } - // Construct the codes of the static literal tree - for (bits = 0; bits <= zip_MAX_BITS; bits++) - zip_bl_count[bits] = 0; - n = 0; - while (n <= 143) { - zip_static_ltree[n++].dl = 8; - zip_bl_count[8]++; - } - while (n <= 255) { - zip_static_ltree[n++].dl = 9; - zip_bl_count[9]++; - } - while (n <= 279) { - zip_static_ltree[n++].dl = 7; - zip_bl_count[7]++; - } - while (n <= 287) { - zip_static_ltree[n++].dl = 8; - zip_bl_count[8]++; - } - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - zip_gen_codes(zip_static_ltree, zip_L_CODES + 1); - - /* The static distance tree is trivial: */ - for (n = 0; n < zip_D_CODES; n++) { - zip_static_dtree[n].dl = 5; - zip_static_dtree[n].fc = zip_bi_reverse(n, 5); - } - - // Initialize the first block of the first file: - zip_init_block(); - }; - - /* ========================================================================== - * Initialize a new block. - */ - var zip_init_block = function () { - var n; // iterates over tree elements - - // Initialize the trees. - for (n = 0; n < zip_L_CODES; n++) zip_dyn_ltree[n].fc = 0; - for (n = 0; n < zip_D_CODES; n++) zip_dyn_dtree[n].fc = 0; - for (n = 0; n < zip_BL_CODES; n++) zip_bl_tree[n].fc = 0; - - zip_dyn_ltree[zip_END_BLOCK].fc = 1; - zip_opt_len = zip_static_len = 0; - zip_last_lit = zip_last_dist = zip_last_flags = 0; - zip_flags = 0; - zip_flag_bit = 1; - }; - - /* ========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ - var zip_pqdownheap = function (tree, // the tree to restore - k) { // node to move down - var v = zip_heap[k]; - var j = k << 1; // left son of k - - while (j <= zip_heap_len) { - // Set j to the smallest of the two sons: - if (j < zip_heap_len && - zip_SMALLER(tree, zip_heap[j + 1], zip_heap[j])) - j++; - - // Exit if v is smaller than both sons - if (zip_SMALLER(tree, v, zip_heap[j])) - break; - - // Exchange v with the smallest son - zip_heap[k] = zip_heap[j]; - k = j; - - // And continue down the tree, setting j to the left son of k - j <<= 1; - } - zip_heap[k] = v; - }; - - /* ========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ - var zip_gen_bitlen = function (desc) { // the tree descriptor - var tree = desc.dyn_tree; - var extra = desc.extra_bits; - var base = desc.extra_base; - var max_code = desc.max_code; - var max_length = desc.max_length; - var stree = desc.static_tree; - var h; // heap index - var n, m; // iterate over the tree elements - var bits; // bit length - var xbits; // extra bits - var f; // frequency - var overflow = 0; // number of elements with bit length too large - - for (bits = 0; bits <= zip_MAX_BITS; bits++) - zip_bl_count[bits] = 0; - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[zip_heap[zip_heap_max]].dl = 0; // root of the heap - - for (h = zip_heap_max + 1; h < zip_HEAP_SIZE; h++) { - n = zip_heap[h]; - bits = tree[tree[n].dl].dl + 1; - if (bits > max_length) { - bits = max_length; - overflow++; - } - tree[n].dl = bits; - // We overwrite tree[n].dl which is no longer needed - - if (n > max_code) - continue; // not a leaf node - - zip_bl_count[bits]++; - xbits = 0; - if (n >= base) - xbits = extra[n - base]; - f = tree[n].fc; - zip_opt_len += f * (bits + xbits); - if (stree != null) - zip_static_len += f * (stree[n].dl + xbits); - } - if (overflow == 0) - return; - - // This happens for example on obj2 and pic of the Calgary corpus - - // Find the first bit length which could increase: - do { - bits = max_length - 1; - while (zip_bl_count[bits] == 0) - bits--; - zip_bl_count[bits]--; // move one leaf down the tree - zip_bl_count[bits + 1] += 2; // move one overflow item as its brother - zip_bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits != 0; bits--) { - n = zip_bl_count[bits]; - while (n != 0) { - m = zip_heap[--h]; - if (m > max_code) - continue; - if (tree[m].dl != bits) { - zip_opt_len += (bits - tree[m].dl) * tree[m].fc; - tree[m].fc = bits; - } - n--; - } - } - }; - - /* ========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ - var zip_gen_codes = function (tree, // the tree to decorate - max_code) { // largest code with non zero frequency - var next_code = new Array(zip_MAX_BITS + 1); // next code value for each bit length - var code = 0; // running code value - var bits; // bit index - var n; // code index - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= zip_MAX_BITS; bits++) { - code = ((code + zip_bl_count[bits - 1]) << 1); - next_code[bits] = code; - } - - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - for (n = 0; n <= max_code; n++) { - var len = tree[n].dl; - if (len == 0) - continue; - // Now reverse the bits - tree[n].fc = zip_bi_reverse(next_code[len]++, len); - } - }; - - /* ========================================================================== - * Construct one Huffman tree and assigns the code bit strings and lengths. - * Update the total bit length for the current block. - * IN assertion: the field freq is set for all tree elements. - * OUT assertions: the fields len and code are set to the optimal bit length - * and corresponding code. The length opt_len is updated; static_len is - * also updated if stree is not null. The field max_code is set. - */ - var zip_build_tree = function (desc) { // the tree descriptor - var tree = desc.dyn_tree; - var stree = desc.static_tree; - var elems = desc.elems; - var n, m; // iterate over heap elements - var max_code = -1; // largest code with non zero frequency - var node = elems; // next internal node of the tree - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - zip_heap_len = 0; - zip_heap_max = zip_HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n].fc != 0) { - zip_heap[++zip_heap_len] = max_code = n; - zip_depth[n] = 0; - } else - tree[n].dl = 0; - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (zip_heap_len < 2) { - var xnew = zip_heap[++zip_heap_len] = (max_code < 2 ? ++max_code : 0); - tree[xnew].fc = 1; - zip_depth[xnew] = 0; - zip_opt_len--; - if (stree != null) - zip_static_len -= stree[xnew].dl; - // new is 0 or 1 so it does not have extra bits - } - desc.max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = zip_heap_len >> 1; n >= 1; n--) - zip_pqdownheap(tree, n); - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - do { - n = zip_heap[zip_SMALLEST]; - zip_heap[zip_SMALLEST] = zip_heap[zip_heap_len--]; - zip_pqdownheap(tree, zip_SMALLEST); - - m = zip_heap[zip_SMALLEST]; // m = node of next least frequency - - // keep the nodes sorted by frequency - zip_heap[--zip_heap_max] = n; - zip_heap[--zip_heap_max] = m; - - // Create a new node father of n and m - tree[node].fc = tree[n].fc + tree[m].fc; - if (zip_depth[n] > zip_depth[m] + 1) - zip_depth[node] = zip_depth[n]; - else - zip_depth[node] = zip_depth[m] + 1; - tree[n].dl = tree[m].dl = node; - - // and insert the new node in the heap - zip_heap[zip_SMALLEST] = node++; - zip_pqdownheap(tree, zip_SMALLEST); - - } while (zip_heap_len >= 2); - - zip_heap[--zip_heap_max] = zip_heap[zip_SMALLEST]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - zip_gen_bitlen(desc); - - // The field len is now set, we can generate the bit codes - zip_gen_codes(tree, max_code); - }; - - /* ========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. Updates opt_len to take into account the repeat - * counts. (The contribution of the bit length codes will be added later - * during the construction of bl_tree.) - */ - var zip_scan_tree = function (tree,// the tree to be scanned - max_code) { // and its largest code of non zero frequency - var n; // iterates over all tree elements - var prevlen = -1; // last emitted length - var curlen; // length of current code - var nextlen = tree[0].dl; // length of next code - var count = 0; // repeat count of the current code - var max_count = 7; // max repeat count - var min_count = 4; // min repeat count - - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } - tree[max_code + 1].dl = 0xffff; // guard - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[n + 1].dl; - if (++count < max_count && curlen == nextlen) - continue; - else if (count < min_count) - zip_bl_tree[curlen].fc += count; - else if (curlen != 0) { - if (curlen != prevlen) - zip_bl_tree[curlen].fc++; - zip_bl_tree[zip_REP_3_6].fc++; - } else if (count <= 10) - zip_bl_tree[zip_REPZ_3_10].fc++; - else - zip_bl_tree[zip_REPZ_11_138].fc++; - count = 0; - prevlen = curlen; - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } else if (curlen == nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } - }; - - /* ========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ - var zip_send_tree = function (tree, // the tree to be scanned - max_code) { // and its largest code of non zero frequency - var n; // iterates over all tree elements - var prevlen = -1; // last emitted length - var curlen; // length of current code - var nextlen = tree[0].dl; // length of next code - var count = 0; // repeat count of the current code - var max_count = 7; // max repeat count - var min_count = 4; // min repeat count - - /* tree[max_code+1].dl = -1; */ - /* guard already set */ - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[n + 1].dl; - if (++count < max_count && curlen == nextlen) { - continue; - } else if (count < min_count) { - do { - zip_SEND_CODE(curlen, zip_bl_tree); - } while (--count != 0); - } else if (curlen != 0) { - if (curlen != prevlen) { - zip_SEND_CODE(curlen, zip_bl_tree); - count--; - } - // Assert(count >= 3 && count <= 6, " 3_6?"); - zip_SEND_CODE(zip_REP_3_6, zip_bl_tree); - zip_send_bits(count - 3, 2); - } else if (count <= 10) { - zip_SEND_CODE(zip_REPZ_3_10, zip_bl_tree); - zip_send_bits(count - 3, 3); - } else { - zip_SEND_CODE(zip_REPZ_11_138, zip_bl_tree); - zip_send_bits(count - 11, 7); - } - count = 0; - prevlen = curlen; - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } else if (curlen == nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } - }; - - /* ========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ - var zip_build_bl_tree = function () { - var max_blindex; // index of last bit length code of non zero freq - - // Determine the bit length frequencies for literal and distance trees - zip_scan_tree(zip_dyn_ltree, zip_l_desc.max_code); - zip_scan_tree(zip_dyn_dtree, zip_d_desc.max_code); - - // Build the bit length tree: - zip_build_tree(zip_bl_desc); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = zip_BL_CODES - 1; max_blindex >= 3; max_blindex--) { - if (zip_bl_tree[zip_bl_order[max_blindex]].dl != 0) break; - } - /* Update opt_len to include the bit length tree and counts */ - zip_opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - return max_blindex; - }; - - /* ========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ - var zip_send_all_trees = function (lcodes, dcodes, blcodes) { // number of codes for each tree - var rank; // index in bl_order - zip_send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt - zip_send_bits(dcodes - 1, 5); - zip_send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt - for (rank = 0; rank < blcodes; rank++) { - zip_send_bits(zip_bl_tree[zip_bl_order[rank]].dl, 3); - } - - // send the literal tree - zip_send_tree(zip_dyn_ltree, lcodes - 1); - - // send the distance tree - zip_send_tree(zip_dyn_dtree, dcodes - 1); - }; - - /* ========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ - var zip_flush_block = function (eof) { // true if this is the last block for a file - var opt_lenb, static_lenb; // opt_len and static_len in bytes - var max_blindex; // index of last bit length code of non zero freq - var stored_len; // length of input block - - stored_len = zip_strstart - zip_block_start; - zip_flag_buf[zip_last_flags] = zip_flags; // Save the flags for the last 8 items - - // Construct the literal and distance trees - zip_build_tree(zip_l_desc); - zip_build_tree(zip_d_desc); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = zip_build_bl_tree(); - - // Determine the best encoding. Compute first the block length in bytes - opt_lenb = (zip_opt_len + 3 + 7) >> 3; - static_lenb = (zip_static_len + 3 + 7) >> 3; - if (static_lenb <= opt_lenb) - opt_lenb = static_lenb; - if (stored_len + 4 <= opt_lenb // 4: two words for the lengths - && zip_block_start >= 0) { - var i; - - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - zip_send_bits((zip_STORED_BLOCK << 1) + eof, 3); - /* send block type */ - zip_bi_windup(); - /* align on byte boundary */ - zip_put_short(stored_len); - zip_put_short(~stored_len); - - // copy block - for (i = 0; i < stored_len; i++) - zip_put_byte(zip_window[zip_block_start + i]); - - } else if (static_lenb == opt_lenb) { - zip_send_bits((zip_STATIC_TREES << 1) + eof, 3); - zip_compress_block(zip_static_ltree, zip_static_dtree); - } else { - zip_send_bits((zip_DYN_TREES << 1) + eof, 3); - zip_send_all_trees(zip_l_desc.max_code + 1, - zip_d_desc.max_code + 1, - max_blindex + 1); - zip_compress_block(zip_dyn_ltree, zip_dyn_dtree); - } - - zip_init_block(); - - if (eof != 0) - zip_bi_windup(); - }; - - /* ========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ - var zip_ct_tally = function (dist, // distance of matched string - lc) { // match length-MIN_MATCH or unmatched char (if dist==0) - zip_l_buf[zip_last_lit++] = lc; - if (dist == 0) { - // lc is the unmatched char - zip_dyn_ltree[lc].fc++; - } else { - // Here, lc is the match length - MIN_MATCH - dist--; // dist = match distance - 1 - zip_dyn_ltree[zip_length_code[lc] + zip_LITERALS + 1].fc++; - zip_dyn_dtree[zip_D_CODE(dist)].fc++; - - zip_d_buf[zip_last_dist++] = dist; - zip_flags |= zip_flag_bit; - } - zip_flag_bit <<= 1; - - // Output the flags if they fill a byte - if ((zip_last_lit & 7) == 0) { - zip_flag_buf[zip_last_flags++] = zip_flags; - zip_flags = 0; - zip_flag_bit = 1; - } - // Try to guess if it is profitable to stop the current block here - if (zip_compr_level > 2 && (zip_last_lit & 0xfff) == 0) { - // Compute an upper bound for the compressed length - var out_length = zip_last_lit * 8; - var in_length = zip_strstart - zip_block_start; - var dcode; - - for (dcode = 0; dcode < zip_D_CODES; dcode++) { - out_length += zip_dyn_dtree[dcode].fc * (5 + zip_extra_dbits[dcode]); - } - out_length >>= 3; - if (zip_last_dist < parseInt(zip_last_lit / 2) && - out_length < parseInt(in_length / 2)) - return true; - } - return (zip_last_lit == LIT_BUFSIZE - 1 || - zip_last_dist == zip_DIST_BUFSIZE); - /* We avoid equality with LIT_BUFSIZE because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ - }; - - /* ========================================================================== - * Send the block data compressed using the given Huffman trees - */ - var zip_compress_block = function (ltree, // literal tree - dtree) { // distance tree - var dist; // distance of matched string - var lc; // match length or unmatched char (if dist == 0) - var lx = 0; // running index in l_buf - var dx = 0; // running index in d_buf - var fx = 0; // running index in flag_buf - var flag = 0; // current flags - var code; // the code to send - var extra; // number of extra bits to send - - if (zip_last_lit != 0) do { - if ((lx & 7) == 0) - flag = zip_flag_buf[fx++]; - lc = zip_l_buf[lx++] & 0xff; - if ((flag & 1) == 0) { - zip_SEND_CODE(lc, ltree); - /* send a literal byte */ - } else { - // Here, lc is the match length - MIN_MATCH - code = zip_length_code[lc]; - zip_SEND_CODE(code + zip_LITERALS + 1, ltree); // send the length code - extra = zip_extra_lbits[code]; - if (extra != 0) { - lc -= zip_base_length[code]; - zip_send_bits(lc, extra); // send the extra length bits - } - dist = zip_d_buf[dx++]; - // Here, dist is the match distance - 1 - code = zip_D_CODE(dist); - zip_SEND_CODE(code, dtree); // send the distance code - extra = zip_extra_dbits[code]; - if (extra != 0) { - dist -= zip_base_dist[code]; - zip_send_bits(dist, extra); // send the extra distance bits - } - } // literal or match pair ? - flag >>= 1; - } while (lx < zip_last_lit); - - zip_SEND_CODE(zip_END_BLOCK, ltree); - }; - - /* ========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ - var zip_Buf_size = 16; // bit size of bi_buf - var zip_send_bits = function (value, // value to send - length) { // number of bits - /* If not enough room in bi_buf, use (valid) bits from bi_buf and - * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) - * unused bits in value. - */ - if (zip_bi_valid > zip_Buf_size - length) { - zip_bi_buf |= (value << zip_bi_valid); - zip_put_short(zip_bi_buf); - zip_bi_buf = (value >> (zip_Buf_size - zip_bi_valid)); - zip_bi_valid += length - zip_Buf_size; - } else { - zip_bi_buf |= value << zip_bi_valid; - zip_bi_valid += length; - } - }; - - /* ========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ - var zip_bi_reverse = function (code, // the value to invert - len) { // its bit length - var res = 0; - do { - res |= code & 1; - code >>= 1; - res <<= 1; - } while (--len > 0); - return res >> 1; - }; - - /* ========================================================================== - * Write out any remaining bits in an incomplete byte. - */ - var zip_bi_windup = function () { - if (zip_bi_valid > 8) { - zip_put_short(zip_bi_buf); - } else if (zip_bi_valid > 0) { - zip_put_byte(zip_bi_buf); - } - zip_bi_buf = 0; - zip_bi_valid = 0; - }; - - var zip_qoutbuf = function () { - if (zip_outcnt != 0) { - var q, i; - q = zip_new_queue(); - if (zip_qhead == null) - zip_qhead = zip_qtail = q; - else - zip_qtail = zip_qtail.next = q; - q.len = zip_outcnt - zip_outoff; - for (i = 0; i < q.len; i++) - q.ptr[i] = zip_outbuf[zip_outoff + i]; - zip_outcnt = zip_outoff = 0; - } - }; - - function deflate(buffData, level) { - zip_deflate_data = buffData; - zip_deflate_pos = 0; - zip_deflate_start(level); - - var buff = new Array(1024), - pages = [], - totalSize = 0, - i; - - for (i = 0; i < 1024; i++) buff[i] = 0; - while ((i = zip_deflate_internal(buff, 0, buff.length)) > 0) { - var buf = new Buffer(buff.slice(0, i)); - pages.push(buf); - totalSize += buf.length; - } - - if (pages.length == 1) { - return pages[0]; - } - - var result = new Buffer(totalSize), - index = 0; - - for (i = 0; i < pages.length; i++) { - pages[i].copy(result, index); - index = index + pages[i].length - } - - return result; - } - - return { - deflate: function () { - return deflate(inbuf, 8); - } - } -} - -module.exports = function (/*Buffer*/inbuf) { - - var zlib = require("zlib"); - - return { - deflate: function () { - return new JSDeflater(inbuf).deflate(); - }, - - deflateAsync: function (/*Function*/callback) { - var tmp = zlib.createDeflateRaw({chunkSize:(parseInt(inbuf.length / 1024) + 1)*1024}), - parts = [], total = 0; - tmp.on('data', function(data) { - parts.push(data); - total += data.length; - }); - tmp.on('end', function() { - var buf = new Buffer(total), written = 0; - buf.fill(0); - - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - part.copy(buf, written); - written += part.length; - } - callback && callback(buf); - }); - tmp.end(inbuf); - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/index.js deleted file mode 100644 index ddcbba60..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.Deflater = require("./deflater"); -exports.Inflater = require("./inflater"); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/inflater.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/inflater.js deleted file mode 100644 index 59536c90..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/inflater.js +++ /dev/null @@ -1,448 +0,0 @@ -var Buffer = require("buffer").Buffer; - -function JSInflater(/*Buffer*/input) { - - var WSIZE = 0x8000, - slide = new Buffer(0x10000), - windowPos = 0, - fixedTableList = null, - fixedTableDist, - fixedLookup, - bitBuf = 0, - bitLen = 0, - method = -1, - eof = false, - copyLen = 0, - copyDist = 0, - tblList, tblDist, bitList, bitdist, - - inputPosition = 0, - - MASK_BITS = [0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff], - LENS = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], - LEXT = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99], - DISTS = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577], - DEXT = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], - BITORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; - - function HuffTable(clen, cnum, cval, blist, elist, lookupm) { - - this.status = 0; - this.root = null; - this.maxbit = 0; - - var el, f, tail, - offsets = [], - countTbl = [], - sTbl = [], - values = [], - tentry = {extra: 0, bitcnt: 0, lbase: 0, next: null}; - - tail = this.root = null; - for(var i = 0; i < 0x11; i++) { countTbl[i] = 0; sTbl[i] = 0; offsets[i] = 0; } - for(i = 0; i < 0x120; i++) values[i] = 0; - - el = cnum > 256 ? clen[256] : 16; - - var pidx = -1; - while (++pidx < cnum) countTbl[clen[pidx]]++; - - if(countTbl[0] == cnum) return; - - for(var j = 1; j <= 16; j++) if(countTbl[j] != 0) break; - var bitLen = j; - for(i = 16; i != 0; i--) if(countTbl[i] != 0) break; - var maxLen = i; - - lookupm < j && (lookupm = j); - - var dCodes = 1 << j; - for(; j < i; j++, dCodes <<= 1) - if((dCodes -= countTbl[j]) < 0) { - this.status = 2; - this.maxbit = lookupm; - return; - } - - if((dCodes -= countTbl[i]) < 0) { - this.status = 2; - this.maxbit = lookupm; - return; - } - - countTbl[i] += dCodes; - offsets[1] = j = 0; - pidx = 1; - var xp = 2; - while(--i > 0) offsets[xp++] = (j += countTbl[pidx++]); - pidx = 0; - i = 0; - do { - (j = clen[pidx++]) && (values[offsets[j]++] = i); - } while(++i < cnum); - cnum = offsets[maxLen]; - offsets[0] = i = 0; - pidx = 0; - - var level = -1, - w = sTbl[0] = 0, - cnode = null, - tblCnt = 0, - tblStack = []; - - for(; bitLen <= maxLen; bitLen++) { - var kccnt = countTbl[bitLen]; - while(kccnt-- > 0) { - while(bitLen > w + sTbl[1 + level]) { - w += sTbl[1 + level]; - level++; - tblCnt = (tblCnt = maxLen - w) > lookupm ? lookupm : tblCnt; - if((f = 1 << (j = bitLen - w)) > kccnt + 1) { - f -= kccnt + 1; - xp = bitLen; - while(++j < tblCnt) { - if((f <<= 1) <= countTbl[++xp]) break; - f -= countTbl[xp]; - } - } - if(w + j > el && w < el) j = el - w; - tblCnt = 1 << j; - sTbl[1 + level] = j; - cnode = []; - while (cnode.length < tblCnt) cnode.push({extra: 0, bitcnt: 0, lbase: 0, next: null}); - if (tail == null) { - tail = this.root = {next:null, list:null}; - } else { - tail = tail.next = {next:null, list:null} - } - tail.next = null; - tail.list = cnode; - - tblStack[level] = cnode; - - if(level > 0) { - offsets[level] = i; - tentry.bitcnt = sTbl[level]; - tentry.extra = 16 + j; - tentry.next = cnode; - j = (i & ((1 << w) - 1)) >> (w - sTbl[level]); - - tblStack[level-1][j].extra = tentry.extra; - tblStack[level-1][j].bitcnt = tentry.bitcnt; - tblStack[level-1][j].lbase = tentry.lbase; - tblStack[level-1][j].next = tentry.next; - } - } - tentry.bitcnt = bitLen - w; - if(pidx >= cnum) - tentry.extra = 99; - else if(values[pidx] < cval) { - tentry.extra = (values[pidx] < 256 ? 16 : 15); - tentry.lbase = values[pidx++]; - } else { - tentry.extra = elist[values[pidx] - cval]; - tentry.lbase = blist[values[pidx++] - cval]; - } - - f = 1 << (bitLen - w); - for(j = i >> w; j < tblCnt; j += f) { - cnode[j].extra = tentry.extra; - cnode[j].bitcnt = tentry.bitcnt; - cnode[j].lbase = tentry.lbase; - cnode[j].next = tentry.next; - } - for(j = 1 << (bitLen - 1); (i & j) != 0; j >>= 1) - i ^= j; - i ^= j; - while((i & ((1 << w) - 1)) != offsets[level]) { - w -= sTbl[level]; - level--; - } - } - } - - this.maxbit = sTbl[1]; - this.status = ((dCodes != 0 && maxLen != 1) ? 1 : 0); - } - - function addBits(n) { - while(bitLen < n) { - bitBuf |= input[inputPosition++] << bitLen; - bitLen += 8; - } - return bitBuf; - } - - function cutBits(n) { - bitLen -= n; - return bitBuf >>= n; - } - - function maskBits(n) { - while(bitLen < n) { - bitBuf |= input[inputPosition++] << bitLen; - bitLen += 8; - } - var res = bitBuf & MASK_BITS[n]; - bitBuf >>= n; - bitLen -= n; - return res; - } - - function codes(buff, off, size) { - var e, t; - if(size == 0) return 0; - - var n = 0; - for(;;) { - t = tblList.list[addBits(bitList) & MASK_BITS[bitList]]; - e = t.extra; - while(e > 16) { - if(e == 99) return -1; - cutBits(t.bitcnt); - e -= 16; - t = t.next[addBits(e) & MASK_BITS[e]]; - e = t.extra; - } - cutBits(t.bitcnt); - if(e == 16) { - windowPos &= WSIZE - 1; - buff[off + n++] = slide[windowPos++] = t.lbase; - if(n == size) return size; - continue; - } - if(e == 15) break; - - copyLen = t.lbase + maskBits(e); - t = tblDist.list[addBits(bitdist) & MASK_BITS[bitdist]]; - e = t.extra; - - while(e > 16) { - if(e == 99) return -1; - cutBits(t.bitcnt); - e -= 16; - t = t.next[addBits(e) & MASK_BITS[e]]; - e = t.extra - } - cutBits(t.bitcnt); - copyDist = windowPos - t.lbase - maskBits(e); - - while(copyLen > 0 && n < size) { - copyLen--; - copyDist &= WSIZE - 1; - windowPos &= WSIZE - 1; - buff[off + n++] = slide[windowPos++] = slide[copyDist++]; - } - - if(n == size) return size; - } - - method = -1; // done - return n; - } - - function stored(buff, off, size) { - cutBits(bitLen & 7); - var n = maskBits(0x10); - if(n != ((~maskBits(0x10)) & 0xffff)) return -1; - copyLen = n; - - n = 0; - while(copyLen > 0 && n < size) { - copyLen--; - windowPos &= WSIZE - 1; - buff[off + n++] = slide[windowPos++] = maskBits(8); - } - - if(copyLen == 0) method = -1; - return n; - } - - function fixed(buff, off, size) { - var fixed_bd = 0; - if(fixedTableList == null) { - var lengths = []; - - for(var symbol = 0; symbol < 144; symbol++) lengths[symbol] = 8; - for(; symbol < 256; symbol++) lengths[symbol] = 9; - for(; symbol < 280; symbol++) lengths[symbol] = 7; - for(; symbol < 288; symbol++) lengths[symbol] = 8; - - fixedLookup = 7; - - var htbl = new HuffTable(lengths, 288, 257, LENS, LEXT, fixedLookup); - - if(htbl.status != 0) return -1; - - fixedTableList = htbl.root; - fixedLookup = htbl.maxbit; - - for(symbol = 0; symbol < 30; symbol++) lengths[symbol] = 5; - fixed_bd = 5; - - htbl = new HuffTable(lengths, 30, 0, DISTS, DEXT, fixed_bd); - if(htbl.status > 1) { - fixedTableList = null; - return -1; - } - fixedTableDist = htbl.root; - fixed_bd = htbl.maxbit; - } - - tblList = fixedTableList; - tblDist = fixedTableDist; - bitList = fixedLookup; - bitdist = fixed_bd; - return codes(buff, off, size); - } - - function dynamic(buff, off, size) { - var ll = new Array(0x023C); - - for (var m = 0; m < 0x023C; m++) ll[m] = 0; - - var llencnt = 257 + maskBits(5), - dcodescnt = 1 + maskBits(5), - bitlencnt = 4 + maskBits(4); - - if(llencnt > 286 || dcodescnt > 30) return -1; - - for(var j = 0; j < bitlencnt; j++) ll[BITORDER[j]] = maskBits(3); - for(; j < 19; j++) ll[BITORDER[j]] = 0; - - // build decoding table for trees--single level, 7 bit lookup - bitList = 7; - var hufTable = new HuffTable(ll, 19, 19, null, null, bitList); - if(hufTable.status != 0) - return -1; // incomplete code set - - tblList = hufTable.root; - bitList = hufTable.maxbit; - var lencnt = llencnt + dcodescnt, - i = 0, - lastLen = 0; - while(i < lencnt) { - var hufLcode = tblList.list[addBits(bitList) & MASK_BITS[bitList]]; - j = hufLcode.bitcnt; - cutBits(j); - j = hufLcode.lbase; - if(j < 16) - ll[i++] = lastLen = j; - else if(j == 16) { - j = 3 + maskBits(2); - if(i + j > lencnt) return -1; - while(j-- > 0) ll[i++] = lastLen; - } else if(j == 17) { - j = 3 + maskBits(3); - if(i + j > lencnt) return -1; - while(j-- > 0) ll[i++] = 0; - lastLen = 0; - } else { - j = 11 + maskBits(7); - if(i + j > lencnt) return -1; - while(j-- > 0) ll[i++] = 0; - lastLen = 0; - } - } - bitList = 9; - hufTable = new HuffTable(ll, llencnt, 257, LENS, LEXT, bitList); - bitList == 0 && (hufTable.status = 1); - - if (hufTable.status != 0) return -1; - - tblList = hufTable.root; - bitList = hufTable.maxbit; - - for(i = 0; i < dcodescnt; i++) ll[i] = ll[i + llencnt]; - bitdist = 6; - hufTable = new HuffTable(ll, dcodescnt, 0, DISTS, DEXT, bitdist); - tblDist = hufTable.root; - bitdist = hufTable.maxbit; - - if((bitdist == 0 && llencnt > 257) || hufTable.status != 0) return -1; - - return codes(buff, off, size); - } - - return { - inflate : function(/*Buffer*/outputBuffer) { - tblList = null; - - var size = outputBuffer.length, - offset = 0, i; - - while(offset < size) { - if(eof && method == -1) return; - if(copyLen > 0) { - if(method != 0) { - while(copyLen > 0 && offset < size) { - copyLen--; - copyDist &= WSIZE - 1; - windowPos &= WSIZE - 1; - outputBuffer[offset++] = (slide[windowPos++] = slide[copyDist++]); - } - } else { - while(copyLen > 0 && offset < size) { - copyLen--; - windowPos &= WSIZE - 1; - outputBuffer[offset++] = (slide[windowPos++] = maskBits(8)); - } - copyLen == 0 && (method = -1); // done - } - if (offset == size) return; - } - - if(method == -1) { - if(eof) break; - eof = maskBits(1) != 0; - method = maskBits(2); - tblList = null; - copyLen = 0; - } - switch(method) { - case 0: i = stored(outputBuffer, offset, size - offset); break; - case 1: i = tblList != null ? codes(outputBuffer, offset, size - offset) : fixed(outputBuffer, offset, size - offset); break; - case 2: i = tblList != null ? codes(outputBuffer, offset, size - offset) : dynamic(outputBuffer, offset, size - offset); break; - default: i = -1; break; - } - - if(i == -1) return; - offset += i; - } - } - }; -} - -module.exports = function(/*Buffer*/inbuf) { - var zlib = require("zlib"); - return { - inflateAsync : function(/*Function*/callback) { - var tmp = zlib.createInflateRaw(), - parts = [], total = 0; - tmp.on('data', function(data) { - parts.push(data); - total += data.length; - }); - tmp.on('end', function() { - var buf = new Buffer(total), written = 0; - buf.fill(0); - - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - part.copy(buf, written); - written += part.length; - } - callback && callback(buf); - }); - tmp.end(inbuf) - }, - - inflate : function(/*Buffer*/outputBuffer) { - var x = { - x: new JSInflater(inbuf) - }; - x.x.inflate(outputBuffer); - delete(x.x); - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/package.json deleted file mode 100644 index 807d3cd1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "adm-zip", - "version": "0.4.4", - "description": "A Javascript implementation of zip for nodejs. Allows user to create or extract zip files both in memory or to/from disk", - "keywords": [ - "zip", - "methods", - "archive", - "unzip" - ], - "homepage": "http://github.com/cthackers/adm-zip", - "author": { - "name": "Nasca Iacob", - "email": "sy@another-d-mention.ro", - "url": "https://github.com/cthackers" - }, - "bugs": { - "url": "https://github.com/cthackers/adm-zip/issues", - "email": "sy@another-d-mention.ro" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://raw.github.com/cthackers/adm-zip/master/MIT-LICENSE.txt" - } - ], - "main": "adm-zip.js", - "repository": { - "type": "git", - "url": "https://github.com/cthackers/adm-zip.git" - }, - "engines": { - "node": ">=0.3.0" - }, - "readme": "# ADM-ZIP for NodeJS\r\n\r\nADM-ZIP is a pure JavaScript implementation for zip data compression for [NodeJS](http://nodejs.org/). \r\n\r\n# Installation\r\n\r\nWith [npm](http://npmjs.org) do:\r\n\r\n $ npm install adm-zip\r\n\t\r\n## What is it good for?\r\nThe library allows you to:\r\n\r\n* decompress zip files directly to disk or in memory buffers\r\n* compress files and store them to disk in .zip format or in compressed buffers\r\n* update content of/add new/delete files from an existing .zip\r\n\r\n# Dependencies\r\nThere are no other nodeJS libraries that ADM-ZIP is dependent of\r\n\r\n# Examples\r\n\r\n## Basic usage\r\n```javascript\r\n\r\n\tvar AdmZip = require('adm-zip');\r\n\r\n\t// reading archives\r\n\tvar zip = new AdmZip(\"./my_file.zip\");\r\n\tvar zipEntries = zip.getEntries(); // an array of ZipEntry records\r\n\r\n\tzipEntries.forEach(function(zipEntry) {\r\n\t console.log(zipEntry.toString()); // outputs zip entries information\r\n\t\tif (zipEntry.entryName == \"my_file.txt\") {\r\n\t\t console.log(zipEntry.data.toString('utf8')); \r\n\t\t}\r\n\t});\r\n\t// outputs the content of some_folder/my_file.txt\r\n\tconsole.log(zip.readAsText(\"some_folder/my_file.txt\")); \r\n\t// extracts the specified file to the specified location\r\n\tzip.extractEntryTo(/*entry name*/\"some_folder/my_file.txt\", /*target path*/\"/home/me/tempfolder\", /*maintainEntryPath*/false, /*overwrite*/true);\r\n\t// extracts everything\r\n\tzip.extractAllTo(/*target path*/\"/home/me/zipcontent/\", /*overwrite*/true);\r\n\t\r\n\t\r\n\t// creating archives\r\n\tvar zip = new AdmZip();\r\n\t\r\n\t// add file directly\r\n\tzip.addFile(\"test.txt\", new Buffer(\"inner content of the file\"), \"entry comment goes here\");\r\n\t// add local file\r\n\tzip.addLocalFile(\"/home/me/some_picture.png\");\r\n\t// get everything as a buffer\r\n\tvar willSendthis = zip.toBuffer();\r\n\t// or write everything to disk\r\n\tzip.writeZip(/*target file name*/\"/home/me/files.zip\");\r\n\t\r\n\t\r\n\t// ... more examples in the wiki\r\n```\r\n\r\nFor more detailed information please check out the [wiki](https://github.com/cthackers/adm-zip/wiki).\r\n\r\n[![build status](https://secure.travis-ci.org/cthackers/adm-zip.png)](http://travis-ci.org/cthackers/adm-zip)\r\n", - "readmeFilename": "README.md", - "_id": "adm-zip@0.4.4", - "dist": { - "shasum": "b493a1464b82a89ecd8c77b99faa046d8f03ded4" - }, - "_from": "adm-zip@~0.4.3", - "_resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test.zip deleted file mode 100644 index d57bfc075800e3f49b0a3e0ceca9a199d82c4c7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4189 zcmWIWW@h1H00FMbOb0LnN(cby#FCPt%%swi)Z%y`F3}HwtL8vcErLaLVsQ!{9hx|F z_@$OBgrruKD7fS&m*%GCmFSgJlprkrS%K<IIV{E`<s{~1E2L%Sq@wEmgQiy&x8D4m zl++?5*DIj;R~m~}kjv8$8buhG7&sWjfEtf9@wEjpF);jNW?)douQ4MtB_%Zv<m}kM zvwgD-1onLvSv)6-Gxz;o%Lgp08zvT-ot@agxsIc6L*|zJ`;wFHUJY|{nm6-({xYM_ zSF7^xvRpfykXBsReEN>h!4ktSn++dSWwfX5n<3HEoL1F5d!{YZ9ZQq4O_y1vGVZ?B zJ#^AQp|`wthxz7%5Ba3t$7V}EX+F30^i`jQoJ+3XzF6@?jE#Brug)7a@vc^vdnV3p zsCuuv<F>&L)dM*-GjhFU3~#KIo!)1&XS;j#R)5x}^WThE<P~2&GGzSO^YE3`?aTMq zY|J}dxuvdS;bxcGI3_V$(P(2quHruh#udhWf<_Tv_NM(U*?w-qS7}`noA4(qi{$To z%@%sSxNfHU6cg=b#XB~Ie(cX=4$at8{`kc^k+r44>6#P&OS(!$pS}6lG<%w<oR8ju ztL>~-2i|^Ob$*)stiqPfm3lm-Z$$!M+Me_IWcT1<uJNI>XIJ0*Zx|n7|2W|ETsxzq zj#mOSe`*EIJJfdd$Gsy3B36^xc`X)3tn^nXKX6L;k5H-<^Z!`Qxa$g`DqULQGTDoK zJ~?Zhvds|;_u}2D(c%`Q+sHCMr0Kd#Si#hkA1Tojxof)?&%K~p_-+Xkn`m&9O8Xqm z6@05EnY#ZJ$@C6<C$j28)AV1gp&Qx$h{^|~>zw!0N@6cre?nemla=Pi^Cl@q{+43f zW#(?oJtrR|p>=YmMv_P5!EZILo+*KXy|#A_8a@tDvTciB)T*QDrsTc$gJiPTQu_t& zfuAL22$|}pEKd=1-{R+TVk%3aYW;=_s~(<qEoiydKC529=~QH2OvSuUr+>!%V+3U) z?1@s3m_!+0l$w~5pO;fPnmR{QCp}ZAI{wr-nk+{P&4DO12_(zn{M=Mn6J)e5AFa!& zU6(U5i7?=5xvKz6Ob`II;Xwes9nZy}02XItkYL!5|8C>gzh@X>w1M9C*&u#^H^K(Y z);_Wg*jf*uwm-5h1>LM0K&Haz3BqA32-%{^0J8<;+5{j*_Xo%pto;RiR>Pct>_N<4 z1+vx4u~?1T$3V94z`N1~Ag`g*$o66OL}2!TqU<ql`yky5Wa|WGJzWg44xL7}4zu@y zY@Hk<X2>G-Wsog<a4hx|$TAoWOEeJ6us1GMq0z|5pak?+IDX3z{U2m&9S$Bm0J1hg z!TS(0jn7&=xV6eaYu^C7Ug)U@$&V0gQChfI?O*PH0&G8&#%I4e+<rx%{atK$?MH6I zV6*tcC!wPti(xcz7ApWPR^-HMF>)=1&Ef@>M>m5khS34utU#XtM+<<kf`x%$2R8$Q YI73NBX0ZYg<yL}w-3rP1xuBjq04-@*$N&HU diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt deleted file mode 100644 index 3c3ca551..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt deleted file mode 100644 index 3c3ca551..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt deleted file mode 100644 index 3c3ca551..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt deleted file mode 100644 index 3c3ca551..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/blank file.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/blank file.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fast.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fast.zip deleted file mode 100644 index f4ed17b98c9d7bcd21efc4523ce75fbe2b071d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4194 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPu^^f#DxB1A{7ljTxCK zDXDoNXU7Jf?VD{Nu<x_T;yF>Ax$pN{9*kVW<aX?)iF=(-fonmF@8a6u=O(1Aj^*S$ zTk-7o>`Q0FU+*myj^J;e>HC@Q`ObMwFOy!RCm;BFf$wXLnIQ}N*DrkG#?>(ezAN6Q zEH}P#Vb|;GmdS|@67PQ%tWIw}EPLhN?rYaN*ym<X@1E%-+p&K8;*TG6dDzUZCMSQc zRekAW>sIDu!hBwR$4!GBst0mvX5@NH7~WVZJH5}uX1;s%Mt-)a`EM&Z?3^wfUCew* z^6=5pZOivZ=EhD>+fvuDa5KwY9md)7X04r>!Cm{Oz_`M=Pf#i1%HFEK>+|L+zMR4P z$zJKxm7TorKHcp68o2+Aa8Qy)%Jsw)?Z@($*<M|!cz^8T-4ju-mz|rW{NK3C#O`YE z@9Z%B)wVNY99EWdmNbMO`MauL-TumB4&I{mjf(5%DrMQeU9fxUM@Ihq*MjTv;(qSC zRpa<?inHqXUnfM^107dBne9=*BpsHxxAUP!i59<9fzw8(`3~<IMb&?(cB!!a+a0oJ zmBT8JC#h-{-&{7H=IhjmOYE+0y)vOQCWGawP{#*GRf~6T6`yBKPdd3xN%)tDd-X!@ zLwCGcdAycwxgl$`Y=O;+pfH)2!Y#Tk8^cc=Dvo<0o^n*~gSpNEugGbFp-1>u#7(rj zaq`oWBiXAIr$!#yxbx|Xo?PR)<xau7dpd2}TAsd{dPQ?W$08-E-K(3EPpx#V;n_b| zY?Fetb!0|sYLDL3e-XA_UB?ehS)nmu@1#nZz&Se_l{uQKS@$mvxRUK4FMd#P6@SJr zP7cm=$)tysUH;Fjf3m|eF=pD-BPMOe7o{eq<mcs7jwaI4L^=S8R2_dJ9Zj91Md$z) zp#)NAaei(ptX(o%!H-t(G^*eknd}*Gwdz%X<tGS$+V>!U-UjDlPymZFGDt9l|M}3p z*6=JNjDGOyJ(wThjoSth24owsH7P*-0%TiM+99^UXyF71A7Trx-UG}QkZTiw7~LNr zTd?*ekgYE0X5H}h?-@pz)i4^_YRn!7venD6SdH5MK(_C|yV3<9`<N^tUWC!e0gBm6 zf!PO&vd6gXgLFNRtrM8_bTP;}({&K*U^KFI=>0xvl=zcl#0*)aeh#u_PJe%b69<fj zB^rcfm@Q6KxMfN}e}&_>4AD12w$|a`!2=*a8asUjTMwi0S*r)PRvBpRXJEGsJ@p{@ z5n?S$vlpBFtAf9Q?T69$>{o}|uL!h%1{+@cky|v_ELKeY4z?IZ6KAmk&|))AycQ!@ dR@f|tMKp{K@MZ=2gn@wz2rF0^7_M-GcmP+qZUz7V diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fastest.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fastest.zip deleted file mode 100644 index f4ed17b98c9d7bcd21efc4523ce75fbe2b071d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4194 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPu^^f#DxB1A{7ljTxCK zDXDoNXU7Jf?VD{Nu<x_T;yF>Ax$pN{9*kVW<aX?)iF=(-fonmF@8a6u=O(1Aj^*S$ zTk-7o>`Q0FU+*myj^J;e>HC@Q`ObMwFOy!RCm;BFf$wXLnIQ}N*DrkG#?>(ezAN6Q zEH}P#Vb|;GmdS|@67PQ%tWIw}EPLhN?rYaN*ym<X@1E%-+p&K8;*TG6dDzUZCMSQc zRekAW>sIDu!hBwR$4!GBst0mvX5@NH7~WVZJH5}uX1;s%Mt-)a`EM&Z?3^wfUCew* z^6=5pZOivZ=EhD>+fvuDa5KwY9md)7X04r>!Cm{Oz_`M=Pf#i1%HFEK>+|L+zMR4P z$zJKxm7TorKHcp68o2+Aa8Qy)%Jsw)?Z@($*<M|!cz^8T-4ju-mz|rW{NK3C#O`YE z@9Z%B)wVNY99EWdmNbMO`MauL-TumB4&I{mjf(5%DrMQeU9fxUM@Ihq*MjTv;(qSC zRpa<?inHqXUnfM^107dBne9=*BpsHxxAUP!i59<9fzw8(`3~<IMb&?(cB!!a+a0oJ zmBT8JC#h-{-&{7H=IhjmOYE+0y)vOQCWGawP{#*GRf~6T6`yBKPdd3xN%)tDd-X!@ zLwCGcdAycwxgl$`Y=O;+pfH)2!Y#Tk8^cc=Dvo<0o^n*~gSpNEugGbFp-1>u#7(rj zaq`oWBiXAIr$!#yxbx|Xo?PR)<xau7dpd2}TAsd{dPQ?W$08-E-K(3EPpx#V;n_b| zY?Fetb!0|sYLDL3e-XA_UB?ehS)nmu@1#nZz&Se_l{uQKS@$mvxRUK4FMd#P6@SJr zP7cm=$)tysUH;Fjf3m|eF=pD-BPMOe7o{eq<mcs7jwaI4L^=S8R2_dJ9Zj91Md$z) zp#)NAaei(ptX(o%!H-t(G^*eknd}*Gwdz%X<tGS$+V>!U-UjDlPymZFGDt9l|M}3p z*6=JNjDGOyJ(wThjoSth24owsH7P*-0%TiM+99^UXyF71A7Trx-UG}QkZTiw7~LNr zTd?*ekgYE0X5H}h?-@pz)i4^_YRn!7venD6SdH5MK(_C|yV3<9`<N^tUWC!e0gBm6 zf!PO&vd6gXgLFNRtrM8_bTP;}({&K*U^KFI=>0xvl=zcl#0*)aeh#u_PJe%b69<fj zB^rcfm@Q6KxMfN}e}&_>4AD12w$|a`!2=*a8asUjTMwi0S*r)PRvBpRXJEGsJ@p{@ z5n?S$vlpBFtAf9Q?T69$>{o}|uL!h%1{+@cky|v_ELKeY4z?IZ6KAmk&|))AycQ!@ dR@f|tMKp{K@MZ=2gn@wz2rF0^7_M-GcmP+qZUz7V diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/linux_arc.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/linux_arc.zip deleted file mode 100644 index 188eccbe8bdb2b5b288857de8a397b77ff8e7414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmWIWW@Zs#U|`^2P@7ZZFx{>BaWati9*FrEWEe_Pi%axDgkExfURr1fCj+yAMzOy( z5SLbPGcdBeU}j(d6I0I|<ZLkDakyB$`~_1P^FiAq&Q}7Me3dg@3aUhxT$mmAzunx; zNHaw3`LPw7^8fM5uJNfXYM*p)&V}!93wvx9PusoumgEef6sbiXJ|`SBbq<M6)!}lx z)U@^AVV-W&bHe)s#RGs&<pMg4fk7PTR4@Zdu)>@QcA+THb;_774De=Tl4Hi@R|&9D zj6iZrBZ!Iab5@AY(R>Xt6PKePW->4cF#L5~4Kp(|1ZWh<i5Nz)vVkmS0>b$~`W1-7 F004HEX6gU{ diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/maximum.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/maximum.zip deleted file mode 100644 index 86a8ec776107c075ce2c7f803472aa97dc25cbf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4086 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKug#8$f#DxB1A{7ljTxCK zDXDoNXNLrOXB{!%x%*orDNL7T*LzK_x2!VJeW5bi5k-gZ?Avsb=Zu!4|9kcN#M_=N zJD50Aa(3KH%-*MUj5Wxa#ZO>UzO>!~o_+To9#C_85NaE`O1grh=FZ&QEHlZ6OP1$n zoEF@}!TxC(`$Xsa8&_R_IDN%}1GCdwZht?zW3T_@j(rxZ3^uT{sAoP~cOhU)poA26 z0Pj-w(;r&6-<DYNR4vwBZ6W-&>GYYM2hL5r^yAT*(l1*lJYiMheYtftZz>OSSaPqN z{2hl4BI#T$OmpHcos|uc+iv*(wTqEj`m?`VIXk`ghHgG`vXke~<&Wacw^G)r>$RQ_ z)Gg>Wkvh4&*q-g@)c*x#Grum_6m>;1(eA*<nyc(8H>Wdc$FU#Iu+Qs}E4{VhzkYX4 zkaAn1#-8(<N7fv^<JdVh;>yMz9sgOW(_5XqZ~qRqG+=f<I9vVCzUA}h$J_t;eVe_e zw(k3$`s6rUd!dlX9Cy_RT&_=#H8RC)*tM@`!)Dh^wtvosw;4AvJY$ZtXcv63RpTnx zBIbNm!^+;zbD|#XIrL<o4qK<WS^KO8_IrUoTMwIEvfOo~Q~0(aA9wV-Gp-^6T&q6b z5z?Bn%vGzhrXc6po)yb4xZPYg@0IC-+1x7xgI@(Qn{_YRYd>SD%&BaXj!8_Fg-RYh z!HeWd`ApTH<hC?OuPfPgMAJ%TUpagAlDJouFY?W%y-BvPo4rfspv&9DyE`v&tcdyT zBsMiyW=UkZM|(;9vdKm3q~_@<RlN#($=KpBV@~MZKPCHK%foUiW&+eBCIQA5r6#82 z=jBw6ro_>dNUM~njz1-iCc)9dkk*AEfh1U*pPLG6MvT_SqxCT*^)VxpJp-<mwhFK$ z1OZT+8wAkX#as*uU~xtU35M`LAG+5Xo@Ip54_>_o^8>tb+aSV#Yy-9y0I02wY>P@e z#1<GWoB-iNY{Au{huH#hZ2}OZ`vYVP*7iNJ)dk(G8@~QM!w9n)Mk8B|*$Y6ndN~%W zQTqhQ_8oXvx&UM!lO@E9Fd8{PF?$X$`#@3l7`J_p?f|lN0<)ej23cpi4q_dQMz#*U zFD8u=e{zhNA&b=aK(@^3?@w^zfYGo-gRl&<fv5_%ObO_(aQv1b`YXuRIvhNB0OUtw zr>|h^VKhE#_2AYj1FgLQ>?)zB9wa|PtVL<1VzYl$@HepiFdCoz>TvrNf%Ye{;k6&R zZGz2W#nkU$i(xcz7ApWPe#(K@V&obLo5iq*hS34utU#YIFmM531q%a11~-TY0JSC= A-v9sr diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/normal.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/normal.zip deleted file mode 100644 index b4602c94ee000ee54c71c9302b9db956b3fd9f0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4170 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPvB~f#DxB1A{7ljTxCK zDXDoNXQu|9?VD{Nu<x_T;yF>Ax$pN{9*kVW<aX?)i93_p4ke3CzKi$N9zW;5dzFZ0 zMcTgoGox;9F7ul$xurQUvUJbEliN0j*K#$7a-Ctgd*jw*uY=MV&!uCglyVrj-+vW( zUOi)>@$~4X$#pJL>1_46YY#n?i+b*}Jo-uVy^_<BXZL+|%)c<X=)=)|uCTMr8-Gc; zR$cY$oTvC@p6-q;`&mbuL(fIuW$hFBa>v)ZUoP&g=ls%;9f#N2_1;tU*kv)*ZNBCl z-}UVu)+enwT{LHlbnuJP1$KIJ-FhO{rpj7Rex&JGnEG-WWqgs{^slshzT@je^A-Oi zCUQ@GopEk{TH)oB8*WIdh93FC7A_`Qzw%tNY9D{vtTUpE7rxwiU2)>?c`8EDZ!i7{ zGxY9Z-~2JdG-8MRgHO9&ZGL*JY}SJna@@hTbt((L^dvX$`CL(P*RR0P?8RU4&%9rY zxp?oNvK17GVBY#bUT3l78jt4pp<LB!#rq~V2sed%VyNL>Vs(H&ELHQu{H+UonPXJe ztl@Uscx;vL#?ujB`Ld6M#yB1HQkxi3<Zw`3bg{33_R1SieyC)J8B}^q)}0*s;7$=E zOO}$#?KfOX3+{E!G8cJjyku>}R?!ts-ccvbLyk&a;IDC*Jb4jE5a-Q>)q;Nxwq0jG zc(0h#Qs1cSsHtmuO6&y%QRiH)L#ITHf+m$q1<FLaG$r$wZ#bW+!D`#Izc*#iAqkIo z&&Km2!CXI^-bFeGD>RuVDn=hXZE~=bjfG!@G5q2Qp>W>+aV+kSs;^%VS4^2Aa^kAO zkIO&r{bPV-U(8ggM@*`WFG@{J$<NEF98I31$&;?hQyqWu98H&_#pZw%n*`Ejaei(p ztQ9g^osU-MRIkn%nd}*Gwcb^LWhMxK+VLQO-qz+~PymZFGDt9l|M}3p*6=JNjDGOy zJ(wThjoSth24owsH6TFke`H%!+99^UXyF71A7TrxUINS(kZTiw7~LNrTd?*SkgYE0 zX5H}h?-@pz)i4^_YRsMmvenD6SdH4xK(_C|yV3<9`<N^tUWC!e0gBlhf!PO&vd6gX zgLE;FtrM8_bTP;}({&K*U^KFI=>0osl=zcl#0*)a{tU8ZPJe%b69<fjB^rcfnC(kd zxMfN}e}&_>4ABQdw$|a`!2=*a8asUjTMwi0S*r)PRvBpRTVVGKJ@p{@5n?S$BNv<f ztAf9Q?T69$>{o}|uL!iihYhd&$gLP`7AvNH2U`rIiL+P%Xt4?>UW<{dDQp(QA{s^q Vc(Ve1!oa`<gcU3d412giJOGZ1Gxh)g diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/store.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/store.zip deleted file mode 100644 index e2add30dc0e3129dc89e20a71abe7314052d0002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5878 zcmeI0PmkMF5Wv0tgTRNXf(jv3RMVxaQprk%5C^!hPU38=b!^La8Wst)PW-ZY;MgnM zVRvu90S^5Fh!YYABqS<6LMw5E?|?vDH~^P|Dz%82=Q!(Rlh8ZPt~2rToB7SmvqtZY zy?gfDC5b-ozISh1{Fr`SMCoT)!uykqrML0QZrUqnla0mMei{f3Sy+7bW4<kZOuufR zT&7{NL-5#92F-Xd8M7#>Wk(r-b2E=Vnm2Q0iJ5-rM<2kDhpf=eLwvlT`|@htI1E^_ zCf>_SRLS$<iDK^Wix~FzpIrF#pR<xg*VcN)5f1_u3Ab4?=4r~~2zUx3mazUY>?eMd zu|R=g!WhIu7>xX6pDB>V;77-Bz>*Xd;(q4yh)4V2!yrC5mT_h_LNjSR%ntp8;p71P zG>r$`M|%)VbM0ruqs*o7YBpl9=}t8^ZwN@h{7~i*T4PW=f<vB-;z<Sxz9R`AkPQWR zGzcdF`A|F#`Iu)pfz%VeKgv=WJ)fi)0r{!GI1c!bBokpBO!^^DM+yX-Ow+5VKuUuH z7LgXlaWhUJWnn0z1&)4;SWmnYb0|NU8{|(@l+wuIC?3y8!c%!TNg_mIQgB8PW6A{a zeKyEwggnPZ4&y@#Z4gHRr+Cx1WZA<<en0+@iC9E<5XBj~D$*?$Ksb@F>hw`M^1~4N zY??6S@<^tkA{>lv(oZv7c<zUA5GR7S7-kLmZ4F$j<@HoY1KkDNv2N*2tqGf|i}#xf z^mMOnbv?itj%s>)V6{Ls_h45yn+j;}*pBA9U^%khu?=0rG2Lt!-KK8tKppi=%L7C2 z=pGvNEFj?2l&+y(3p$$9XrpDdt{b|yr^qecGs$MlazF)Jbv(V%HB<-eu47xShWI9$ zHFdM)AVuqFrdLBMj)8UyZ@_J<hCwJ<?V|S%`3DWl-gESwwg+v?XlgiE*U&SyZfH3Q zgK8M6-cg{bcGMm6&H)RpI5JJky@Os`qaos{_}}n!%cL+GmgzZot6-FlH&gBDuBL$M z=q@Fs<yaj>rgWkPT1O+OXKJ|>O0`JPY(;PiC9I1<7rsDKQw_9*%VW+hU+tveEf$d4 z(-e@~3G;(E3XiKwQdN?wl2nxhi-xpVNv^N2BvlEiHY3$$q}q&VYc?bQQ9{yq%x1^1 z>O7-Bb)Eq_tySll|KE9L<ILOAs!r22+MeKtdQS9N><h^fi17{SC8_uL&%58g_Txq& zfBNkYac}RgCR~!rgk>iv>Q$8~*FMWBg?!;oexFlTb+if!d3y)1#W;wvw7*qGAKX3v z-NPq8Y!v81meHrXU}f~zOVIN@u`=)e?~^ZycjnDJ#6p%6db)E~@My_?S<TDaVP)LK zFMj=saBtkpafK}77JHGG=hpAa#_7zKdT(V|{mCQoaul+7Y09}=+!k-mV4E0MZ$0d! zUsuL%KX`DTVtl>+P~Z!>4qKaHUqS5W=hw!VW9Lr!%lO~8e+hme*YU5<_*aqt^K)zY w<+H&u@KyG=02lJ<z<}Vb3v0pU9mO(mvCxIIch5hARwWt#j?PKa=y|&P7yOI$IRF3v diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/ultra.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/ultra.zip deleted file mode 100644 index 86a8ec776107c075ce2c7f803472aa97dc25cbf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4086 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKug#8$f#DxB1A{7ljTxCK zDXDoNXNLrOXB{!%x%*orDNL7T*LzK_x2!VJeW5bi5k-gZ?Avsb=Zu!4|9kcN#M_=N zJD50Aa(3KH%-*MUj5Wxa#ZO>UzO>!~o_+To9#C_85NaE`O1grh=FZ&QEHlZ6OP1$n zoEF@}!TxC(`$Xsa8&_R_IDN%}1GCdwZht?zW3T_@j(rxZ3^uT{sAoP~cOhU)poA26 z0Pj-w(;r&6-<DYNR4vwBZ6W-&>GYYM2hL5r^yAT*(l1*lJYiMheYtftZz>OSSaPqN z{2hl4BI#T$OmpHcos|uc+iv*(wTqEj`m?`VIXk`ghHgG`vXke~<&Wacw^G)r>$RQ_ z)Gg>Wkvh4&*q-g@)c*x#Grum_6m>;1(eA*<nyc(8H>Wdc$FU#Iu+Qs}E4{VhzkYX4 zkaAn1#-8(<N7fv^<JdVh;>yMz9sgOW(_5XqZ~qRqG+=f<I9vVCzUA}h$J_t;eVe_e zw(k3$`s6rUd!dlX9Cy_RT&_=#H8RC)*tM@`!)Dh^wtvosw;4AvJY$ZtXcv63RpTnx zBIbNm!^+;zbD|#XIrL<o4qK<WS^KO8_IrUoTMwIEvfOo~Q~0(aA9wV-Gp-^6T&q6b z5z?Bn%vGzhrXc6po)yb4xZPYg@0IC-+1x7xgI@(Qn{_YRYd>SD%&BaXj!8_Fg-RYh z!HeWd`ApTH<hC?OuPfPgMAJ%TUpagAlDJouFY?W%y-BvPo4rfspv&9DyE`v&tcdyT zBsMiyW=UkZM|(;9vdKm3q~_@<RlN#($=KpBV@~MZKPCHK%foUiW&+eBCIQA5r6#82 z=jBw6ro_>dNUM~njz1-iCc)9dkk*AEfh1U*pPLG6MvT_SqxCT*^)VxpJp-<mwhFK$ z1OZT+8wAkX#as*uU~xtU35M`LAG+5Xo@Ip54_>_o^8>tb+aSV#Yy-9y0I02wY>P@e z#1<GWoB-iNY{Au{huH#hZ2}OZ`vYVP*7iNJ)dk(G8@~QM!w9n)Mk8B|*$Y6ndN~%W zQTqhQ_8oXvx&UM!lO@E9Fd8{PF?$X$`#@3l7`J_p?f|lN0<)ej23cpi4q_dQMz#*U zFD8u=e{zhNA&b=aK(@^3?@w^zfYGo-gRl&<fv5_%ObO_(aQv1b`YXuRIvhNB0OUtw zr>|h^VKhE#_2AYj1FgLQ>?)zB9wa|PtVL<1VzYl$@HepiFdCoz>TvrNf%Ye{;k6&R zZGz2W#nkU$i(xcz7ApWPe#(K@V&obLo5iq*hS34utU#YIFmM531q%a11~-TY0JSC= A-v9sr diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/index.js deleted file mode 100644 index 70acb517..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/index.js +++ /dev/null @@ -1,5 +0,0 @@ -var Attr = require("../util").FileAttr, - Zip = require("../adm-zip"), - fs = require("fs"); - -//zip.addLocalFile("./test/readonly.txt"); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/constants.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/constants.js deleted file mode 100644 index 05480541..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/constants.js +++ /dev/null @@ -1,84 +0,0 @@ -module.exports = { - /* The local file header */ - LOCHDR : 30, // LOC header size - LOCSIG : 0x04034b50, // "PK\003\004" - LOCVER : 4, // version needed to extract - LOCFLG : 6, // general purpose bit flag - LOCHOW : 8, // compression method - LOCTIM : 10, // modification time (2 bytes time, 2 bytes date) - LOCCRC : 14, // uncompressed file crc-32 value - LOCSIZ : 18, // compressed size - LOCLEN : 22, // uncompressed size - LOCNAM : 26, // filename length - LOCEXT : 28, // extra field length - - /* The Data descriptor */ - EXTSIG : 0x08074b50, // "PK\007\008" - EXTHDR : 16, // EXT header size - EXTCRC : 4, // uncompressed file crc-32 value - EXTSIZ : 8, // compressed size - EXTLEN : 12, // uncompressed size - - /* The central directory file header */ - CENHDR : 46, // CEN header size - CENSIG : 0x02014b50, // "PK\001\002" - CENVEM : 4, // version made by - CENVER : 6, // version needed to extract - CENFLG : 8, // encrypt, decrypt flags - CENHOW : 10, // compression method - CENTIM : 12, // modification time (2 bytes time, 2 bytes date) - CENCRC : 16, // uncompressed file crc-32 value - CENSIZ : 20, // compressed size - CENLEN : 24, // uncompressed size - CENNAM : 28, // filename length - CENEXT : 30, // extra field length - CENCOM : 32, // file comment length - CENDSK : 34, // volume number start - CENATT : 36, // internal file attributes - CENATX : 38, // external file attributes (host system dependent) - CENOFF : 42, // LOC header offset - - /* The entries in the end of central directory */ - ENDHDR : 22, // END header size - ENDSIG : 0x06054b50, // "PK\005\006" - ENDSUB : 8, // number of entries on this disk - ENDTOT : 10, // total number of entries - ENDSIZ : 12, // central directory size in bytes - ENDOFF : 16, // offset of first CEN header - ENDCOM : 20, // zip file comment length - - /* Compression methods */ - STORED : 0, // no compression - SHRUNK : 1, // shrunk - REDUCED1 : 2, // reduced with compression factor 1 - REDUCED2 : 3, // reduced with compression factor 2 - REDUCED3 : 4, // reduced with compression factor 3 - REDUCED4 : 5, // reduced with compression factor 4 - IMPLODED : 6, // imploded - // 7 reserved - DEFLATED : 8, // deflated - ENHANCED_DEFLATED: 9, // enhanced deflated - PKWARE : 10,// PKWare DCL imploded - // 11 reserved - BZIP2 : 12, // compressed using BZIP2 - // 13 reserved - LZMA : 14, // LZMA - // 15-17 reserved - IBM_TERSE : 18, // compressed using IBM TERSE - IBM_LZ77 : 19, //IBM LZ77 z - - /* General purpose bit flag */ - FLG_ENC : 0, // encripted file - FLG_COMP1 : 1, // compression option - FLG_COMP2 : 2, // compression option - FLG_DESC : 4, // data descriptor - FLG_ENH : 8, // enhanced deflation - FLG_STR : 16, // strong encryption - FLG_LNG : 1024, // language encoding - FLG_MSK : 4096, // mask header values - - /* Load type */ - FILE : 0, - BUFFER : 1, - NONE : 2 -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/errors.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/errors.js deleted file mode 100644 index db5d69e9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/errors.js +++ /dev/null @@ -1,35 +0,0 @@ -module.exports = { - /* Header error messages */ - "INVALID_LOC" : "Invalid LOC header (bad signature)", - "INVALID_CEN" : "Invalid CEN header (bad signature)", - "INVALID_END" : "Invalid END header (bad signature)", - - /* ZipEntry error messages*/ - "NO_DATA" : "Nothing to decompress", - "BAD_CRC" : "CRC32 checksum failed", - "FILE_IN_THE_WAY" : "There is a file in the way: %s", - "UNKNOWN_METHOD" : "Invalid/unsupported compression method", - - /* Inflater error messages */ - "AVAIL_DATA" : "inflate::Available inflate data did not terminate", - "INVALID_DISTANCE" : "inflate::Invalid literal/length or distance code in fixed or dynamic block", - "TO_MANY_CODES" : "inflate::Dynamic block code description: too many length or distance codes", - "INVALID_REPEAT_LEN" : "inflate::Dynamic block code description: repeat more than specified lengths", - "INVALID_REPEAT_FIRST" : "inflate::Dynamic block code description: repeat lengths with no first length", - "INCOMPLETE_CODES" : "inflate::Dynamic block code description: code lengths codes incomplete", - "INVALID_DYN_DISTANCE": "inflate::Dynamic block code description: invalid distance code lengths", - "INVALID_CODES_LEN": "inflate::Dynamic block code description: invalid literal/length code lengths", - "INVALID_STORE_BLOCK" : "inflate::Stored block length did not match one's complement", - "INVALID_BLOCK_TYPE" : "inflate::Invalid block type (type == 3)", - - /* ADM-ZIP error messages */ - "CANT_EXTRACT_FILE" : "Could not extract the file", - "CANT_OVERRIDE" : "Target file already exists", - "NO_ZIP" : "No zip file was loaded", - "NO_ENTRY" : "Entry doesn't exist", - "DIRECTORY_CONTENT_ERROR" : "A directory cannot have content", - "FILE_NOT_FOUND" : "File not found: %s", - "NOT_IMPLEMENTED" : "Not implemented", - "INVALID_FILENAME" : "Invalid filename", - "INVALID_FORMAT" : "Invalid or unsupported zip format. No END header found" -}; \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/fattr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/fattr.js deleted file mode 100644 index 2191ec1c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/fattr.js +++ /dev/null @@ -1,84 +0,0 @@ -var fs = require("fs"), - pth = require("path"); - -fs.existsSync = fs.existsSync || pth.existsSync; - -module.exports = function(/*String*/path) { - - var _path = path || "", - _permissions = 0, - _obj = newAttr(), - _stat = null; - - function newAttr() { - return { - directory : false, - readonly : false, - hidden : false, - executable : false, - mtime : 0, - atime : 0 - } - } - - if (_path && fs.existsSync(_path)) { - _stat = fs.statSync(_path); - _obj.directory = _stat.isDirectory(); - _obj.mtime = _stat.mtime; - _obj.atime = _stat.atime; - _obj.executable = !!(1 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); - _obj.readonly = !!(2 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); - _obj.hidden = pth.basename(_path)[0] === "."; - } else { - console.warn("Invalid path: " + _path) - } - - return { - - get directory () { - return _obj.directory; - }, - - get readOnly () { - return _obj.readonly; - }, - - get hidden () { - return _obj.hidden; - }, - - get mtime () { - return _obj.mtime; - }, - - get atime () { - return _obj.atime; - }, - - - get executable () { - return _obj.executable; - }, - - decodeAttributes : function(val) { - - }, - - encodeAttributes : function (val) { - - }, - - toString : function() { - return '{\n' + - '\t"path" : "' + _path + ",\n" + - '\t"isDirectory" : ' + _obj.directory + ",\n" + - '\t"isReadOnly" : ' + _obj.readonly + ",\n" + - '\t"isHidden" : ' + _obj.hidden + ",\n" + - '\t"isExecutable" : ' + _obj.executable + ",\n" + - '\t"mTime" : ' + _obj.mtime + "\n" + - '\t"aTime" : ' + _obj.atime + "\n" + - '}'; - } - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/index.js deleted file mode 100644 index 935fc1a4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = require("./utils"); -module.exports.Constants = require("./constants"); -module.exports.Errors = require("./errors"); -module.exports.FileAttr = require("./fattr"); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/utils.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/utils.js deleted file mode 100644 index b14db8c1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/utils.js +++ /dev/null @@ -1,145 +0,0 @@ -var fs = require("fs"), - pth = require('path'); - -fs.existsSync = fs.existsSync || pth.existsSync; - -module.exports = (function() { - - var crcTable = [], - Constants = require('./constants'), - Errors = require('./errors'), - - PATH_SEPARATOR = pth.normalize("/"); - - - function mkdirSync(/*String*/path) { - var resolvedPath = path.split(PATH_SEPARATOR)[0]; - path.split(PATH_SEPARATOR).forEach(function(name) { - if (!name || name.substr(-1,1) == ":") return; - resolvedPath += PATH_SEPARATOR + name; - var stat; - try { - stat = fs.statSync(resolvedPath); - } catch (e) { - fs.mkdirSync(resolvedPath); - } - if (stat && stat.isFile()) - throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath); - }); - } - - function findSync(/*String*/root, /*RegExp*/pattern, /*Boolean*/recoursive) { - if (typeof pattern === 'boolean') { - recoursive = pattern; - pattern = undefined; - } - var files = []; - fs.readdirSync(root).forEach(function(file) { - var path = pth.join(root, file); - - if (fs.statSync(path).isDirectory() && recoursive) - files = files.concat(findSync(path, pattern, recoursive)); - - if (!pattern || pattern.test(path)) { - files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : "")); - } - - }); - return files; - } - - return { - makeDir : function(/*String*/path) { - mkdirSync(path); - }, - - crc32 : function(buf) { - var b = new Buffer(4); - if (!crcTable.length) { - for (var n = 0; n < 256; n++) { - var c = n; - for (var k = 8; --k >= 0;) // - if ((c & 1) != 0) { c = 0xedb88320 ^ (c >>> 1); } else { c = c >>> 1; } - if (c < 0) { - b.writeInt32LE(c, 0); - c = b.readUInt32LE(0); - } - crcTable[n] = c; - } - } - var crc = 0, off = 0, len = buf.length, c1 = ~crc; - while(--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ (c1 >>> 8); - crc = ~c1; - b.writeInt32LE(crc & 0xffffffff, 0); - return b.readUInt32LE(0); - }, - - methodToString : function(/*Number*/method) { - switch (method) { - case Constants.STORED: - return 'STORED (' + method + ')'; - case Constants.DEFLATED: - return 'DEFLATED (' + method + ')'; - default: - return 'UNSUPPORTED (' + method + ')' - } - - }, - - writeFileTo : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr) { - if (fs.existsSync(path)) { - if (!overwrite) - return false; // cannot overwite - - var stat = fs.statSync(path); - if (stat.isDirectory()) { - return false; - } - } - var folder = pth.dirname(path); - if (!fs.existsSync(folder)) { - mkdirSync(folder); - } - - var fd; - try { - fd = fs.openSync(path, 'w', 438); // 0666 - } catch(e) { - fs.chmodSync(path, 438); - fd = fs.openSync(path, 'w', 438); - } - if (fd) { - fs.writeSync(fd, content, 0, content.length, 0); - fs.closeSync(fd); - } - fs.chmodSync(path, attr || 438); - return true; - }, - - findFiles : function(/*String*/path) { - return findSync(path, true); - }, - - getAttributes : function(/*String*/path) { - - }, - - setAttributes : function(/*String*/path) { - - }, - - toBuffer : function(input) { - if (Buffer.isBuffer(input)) { - return input; - } else { - if (input.length == 0) { - return new Buffer(0) - } - return new Buffer(input, 'utf8'); - } - }, - - Constants : Constants, - Errors : Errors - } -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipEntry.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipEntry.js deleted file mode 100644 index 02c31725..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipEntry.js +++ /dev/null @@ -1,224 +0,0 @@ -var Utils = require("./util"), - Headers = require("./headers"), - Constants = Utils.Constants, - Methods = require("./methods"); - -module.exports = function (/*Buffer*/input) { - - var _entryHeader = new Headers.EntryHeader(), - _entryName = new Buffer(0), - _comment = new Buffer(0), - _isDirectory = false, - uncompressedData = null, - _extra = new Buffer(0); - - function getCompressedDataFromZip() { - if (!input || !Buffer.isBuffer(input)) { - return new Buffer(0); - } - _entryHeader.loadDataHeaderFromBinary(input); - return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize) - } - - function crc32OK(data) { - // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written - if (_entryHeader.flags & 0x8 != 0x8) { - if (Utils.crc32(data) != _entryHeader.crc) { - return false; - } - } else { - // @TODO: load and check data descriptor header - // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure - // (optionally preceded by a 4-byte signature) immediately after the compressed data: - } - return true; - } - - function decompress(/*Boolean*/async, /*Function*/callback) { - if (_isDirectory) { - if (async && callback) { - callback(new Buffer(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error. - } - return new Buffer(0); - } - - var compressedData = getCompressedDataFromZip(); - if (compressedData.length == 0) { - if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error. - return compressedData; - } - - var data = new Buffer(_entryHeader.size); - data.fill(0); - - switch (_entryHeader.method) { - case Utils.Constants.STORED: - compressedData.copy(data); - if (!crc32OK(data)) { - if (async && callback) callback(data, Utils.Errors.BAD_CRC);//si added error - return Utils.Errors.BAD_CRC; - } else {//si added otherwise did not seem to return data. - if (async && callback) callback(data); - return data; - } - break; - case Utils.Constants.DEFLATED: - var inflater = new Methods.Inflater(compressedData); - if (!async) { - inflater.inflate(data); - if (!crc32OK(data)) { - console.warn(Utils.Errors.BAD_CRC + " " + _entryName.toString()) - } - return data; - } else { - inflater.inflateAsync(function(result) { - result.copy(data, 0); - if (crc32OK(data)) { - if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error - } else { //si added otherwise did not seem to return data. - if (callback) callback(data); - } - }) - } - break; - default: - if (async && callback) callback(new Buffer(0), Utils.Errors.UNKNOWN_METHOD); - return Utils.Errors.UNKNOWN_METHOD; - } - } - - function compress(/*Boolean*/async, /*Function*/callback) { - if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) { - // no data set or the data wasn't changed to require recompression - if (async && callback) callback(getCompressedDataFromZip()); - return getCompressedDataFromZip(); - } - - if (uncompressedData.length && !_isDirectory) { - var compressedData; - // Local file header - switch (_entryHeader.method) { - case Utils.Constants.STORED: - _entryHeader.compressedSize = _entryHeader.size; - - compressedData = new Buffer(uncompressedData.length); - uncompressedData.copy(compressedData); - - if (async && callback) callback(compressedData); - return compressedData; - - break; - default: - case Utils.Constants.DEFLATED: - - var deflater = new Methods.Deflater(uncompressedData); - if (!async) { - var deflated = deflater.deflate(); - _entryHeader.compressedSize = deflated.length; - return deflated; - } else { - deflater.deflateAsync(function(data) { - compressedData = new Buffer(data.length); - _entryHeader.compressedSize = data.length; - data.copy(compressedData); - callback && callback(compressedData); - }) - } - deflater = null; - break; - } - } else { - if (async && callback) { - callback(new Buffer(0)); - } else { - return new Buffer(0); - } - } - } - - return { - get entryName () { return _entryName.toString(); }, - get rawEntryName() { return _entryName; }, - set entryName (val) { - _entryName = Utils.toBuffer(val); - var lastChar = _entryName[_entryName.length - 1]; - _isDirectory = (lastChar == 47) || (lastChar == 92); - _entryHeader.fileNameLength = _entryName.length; - }, - - get extra () { return _extra; }, - set extra (val) { - _extra = val; - _entryHeader.extraLength = val.length; - }, - - get comment () { return _comment.toString(); }, - set comment (val) { - _comment = Utils.toBuffer(val); - _entryHeader.commentLength = _comment.length; - }, - - get name () { var n = _entryName.toString(); return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop(); }, - get isDirectory () { return _isDirectory }, - - getCompressedData : function() { - return compress(false, null) - }, - - getCompressedDataAsync : function(/*Function*/callback) { - compress(true, callback) - }, - - setData : function(value) { - uncompressedData = Utils.toBuffer(value); - if (!_isDirectory && uncompressedData.length) { - _entryHeader.size = uncompressedData.length; - _entryHeader.method = Utils.Constants.DEFLATED; - _entryHeader.crc = Utils.crc32(value); - } else { // folders and blank files should be stored - _entryHeader.method = Utils.Constants.STORED; - } - }, - - getData : function() { - return decompress(false, null); - }, - - getDataAsync : function(/*Function*/callback) { - decompress(true, callback) - }, - - set header(/*Buffer*/data) { - _entryHeader.loadFromBinary(data); - }, - - get header() { - return _entryHeader; - }, - - packHeader : function() { - var header = _entryHeader.entryHeaderToBinary(); - // add - _entryName.copy(header, Utils.Constants.CENHDR); - if (_entryHeader.extraLength) { - _extra.copy(header, Utils.Constants.CENHDR + _entryName.length) - } - if (_entryHeader.commentLength) { - _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length); - } - return header; - }, - - toString : function() { - return '{\n' + - '\t"entryName" : "' + _entryName.toString() + "\",\n" + - '\t"name" : "' + _entryName.toString().split("/").pop() + "\",\n" + - '\t"comment" : "' + _comment.toString() + "\",\n" + - '\t"isDirectory" : ' + _isDirectory + ",\n" + - '\t"header" : ' + _entryHeader.toString().replace(/\t/mg, "\t\t") + ",\n" + - '\t"compressedData" : <' + (input && input.length + " bytes buffer" || "null") + ">\n" + - '\t"data" : <' + (uncompressedData && uncompressedData.length + " bytes buffer" || "null") + ">\n" + - '}'; - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipFile.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipFile.js deleted file mode 100644 index f066d7ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipFile.js +++ /dev/null @@ -1,311 +0,0 @@ -var ZipEntry = require("./zipEntry"), - Headers = require("./headers"), - Utils = require("./util"); - -module.exports = function(/*String|Buffer*/input, /*Number*/inputType) { - var entryList = [], - entryTable = {}, - _comment = new Buffer(0), - filename = "", - fs = require("fs"), - inBuffer = null, - mainHeader = new Headers.MainHeader(); - - if (inputType == Utils.Constants.FILE) { - // is a filename - filename = input; - inBuffer = fs.readFileSync(filename); - readMainHeader(); - } else if (inputType == Utils.Constants.BUFFER) { - // is a memory buffer - inBuffer = input; - readMainHeader(); - } else { - // none. is a new file - } - - function readEntries() { - entryTable = {}; - entryList = new Array(mainHeader.diskEntries); // total number of entries - var index = mainHeader.offset; // offset of first CEN header - for(var i = 0; i < entryList.length; i++) { - - var tmp = index, - entry = new ZipEntry(inBuffer); - entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR); - - entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength); - - if (entry.header.extraLength) { - entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength); - } - - if (entry.header.commentLength) - entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength); - - index += entry.header.entryHeaderSize; - - entryList[i] = entry; - entryTable[entry.entryName] = entry; - } - } - - function readMainHeader() { - var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size - n = Math.max(0, i - 0xFFFF), // 0xFFFF is the max zip file comment length - endOffset = 0; // Start offset of the END header - - for (i; i >= n; i--) { - if (inBuffer[i] != 0x50) continue; // quick check that the byte is 'P' - if (inBuffer.readUInt32LE(i) == Utils.Constants.ENDSIG) { // "PK\005\006" - endOffset = i; - break; - } - } - if (!endOffset) - throw Utils.Errors.INVALID_FORMAT; - - mainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR)); - if (mainHeader.commentLength) { - _comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR); - } - readEntries(); - } - - return { - /** - * Returns an array of ZipEntry objects existent in the current opened archive - * @return Array - */ - get entries () { - return entryList; - }, - - /** - * Archive comment - * @return {String} - */ - get comment () { return _comment.toString(); }, - set comment(val) { - mainHeader.commentLength = val.length; - _comment = val; - }, - - /** - * Returns a reference to the entry with the given name or null if entry is inexistent - * - * @param entryName - * @return ZipEntry - */ - getEntry : function(/*String*/entryName) { - return entryTable[entryName] || null; - }, - - /** - * Adds the given entry to the entry list - * - * @param entry - */ - setEntry : function(/*ZipEntry*/entry) { - entryList.push(entry); - entryTable[entry.entryName] = entry; - mainHeader.totalEntries = entryList.length; - }, - - /** - * Removes the entry with the given name from the entry list. - * - * If the entry is a directory, then all nested files and directories will be removed - * @param entryName - */ - deleteEntry : function(/*String*/entryName) { - var entry = entryTable[entryName]; - if (entry && entry.isDirectory) { - var _self = this; - this.getEntryChildren(entry).forEach(function(child) { - if (child.entryName != entryName) { - _self.deleteEntry(child.entryName) - } - }) - } - entryList.splice(entryList.indexOf(entry), 1); - delete(entryTable[entryName]); - mainHeader.totalEntries = entryList.length; - }, - - /** - * Iterates and returns all nested files and directories of the given entry - * - * @param entry - * @return Array - */ - getEntryChildren : function(/*ZipEntry*/entry) { - if (entry.isDirectory) { - var list = [], - name = entry.entryName, - len = name.length; - - entryList.forEach(function(zipEntry) { - if (zipEntry.entryName.substr(0, len) == name) { - list.push(zipEntry); - } - }); - return list; - } - return [] - }, - - /** - * Returns the zip file - * - * @return Buffer - */ - compressToBuffer : function() { - if (entryList.length > 1) { - entryList.sort(function(a, b) { - var nameA = a.entryName.toLowerCase(); - var nameB = b.entryName.toLowerCase(); - if (nameA < nameB) {return -1} - if (nameA > nameB) {return 1} - return 0; - }); - } - - var totalSize = 0, - dataBlock = [], - entryHeaders = [], - dindex = 0; - - mainHeader.size = 0; - mainHeader.offset = 0; - - entryList.forEach(function(entry) { - entry.header.offset = dindex; - - // compress data and set local and entry header accordingly. Reason why is called first - var compressedData = entry.getCompressedData(); - // data header - var dataHeader = entry.header.dataHeaderToBinary(); - var postHeader = new Buffer(entry.entryName + entry.extra.toString()); - var dataLength = dataHeader.length + postHeader.length + compressedData.length; - - dindex += dataLength; - - dataBlock.push(dataHeader); - dataBlock.push(postHeader); - dataBlock.push(compressedData); - - var entryHeader = entry.packHeader(); - entryHeaders.push(entryHeader); - mainHeader.size += entryHeader.length; - totalSize += (dataLength + entryHeader.length); - }); - - totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length - // point to end of data and begining of central directory first record - mainHeader.offset = dindex; - - dindex = 0; - var outBuffer = new Buffer(totalSize); - dataBlock.forEach(function(content) { - content.copy(outBuffer, dindex); // write data blocks - dindex += content.length; - }); - entryHeaders.forEach(function(content) { - content.copy(outBuffer, dindex); // write central directory entries - dindex += content.length; - }); - - var mh = mainHeader.toBinary(); - if (_comment) { - _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment - } - - mh.copy(outBuffer, dindex); // write main header - - return outBuffer - }, - - toAsyncBuffer : function(/*Function*/onSuccess,/*Function*/onFail,/*Function*/onItemStart,/*Function*/onItemEnd) { - if (entryList.length > 1) { - entryList.sort(function(a, b) { - var nameA = a.entryName.toLowerCase(); - var nameB = b.entryName.toLowerCase(); - if (nameA > nameB) {return -1} - if (nameA < nameB) {return 1} - return 0; - }); - } - - var totalSize = 0, - dataBlock = [], - entryHeaders = [], - dindex = 0; - - mainHeader.size = 0; - mainHeader.offset = 0; - - var compress=function(entryList){ - var self=arguments.callee; - var entry; - if(entryList.length){ - var entry=entryList.pop(); - var name=entry.entryName + entry.extra.toString(); - if(onItemStart)onItemStart(name); - entry.getCompressedDataAsync(function(compressedData){ - if(onItemEnd)onItemEnd(name); - - entry.header.offset = dindex; - // data header - var dataHeader = entry.header.dataHeaderToBinary(); - var postHeader = new Buffer(name); - var dataLength = dataHeader.length + postHeader.length + compressedData.length; - - dindex += dataLength; - - dataBlock.push(dataHeader); - dataBlock.push(postHeader); - dataBlock.push(compressedData); - - var entryHeader = entry.packHeader(); - entryHeaders.push(entryHeader); - mainHeader.size += entryHeader.length; - totalSize += (dataLength + entryHeader.length); - - if(entryList.length){ - self(entryList); - }else{ - - - totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length - // point to end of data and begining of central directory first record - mainHeader.offset = dindex; - - dindex = 0; - var outBuffer = new Buffer(totalSize); - dataBlock.forEach(function(content) { - content.copy(outBuffer, dindex); // write data blocks - dindex += content.length; - }); - entryHeaders.forEach(function(content) { - content.copy(outBuffer, dindex); // write central directory entries - dindex += content.length; - }); - - var mh = mainHeader.toBinary(); - if (_comment) { - _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment - } - - mh.copy(outBuffer, dindex); // write main header - - onSuccess(outBuffer); - } - }); - } - }; - - compress(entryList); - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.npmignore deleted file mode 100644 index 13abef4f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.travis.yml deleted file mode 100644 index 895dbd36..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/LICENSE deleted file mode 100644 index 6d03581f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 'Dominic Tarr' - -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/README.md deleted file mode 100644 index 565e0e26..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# stream-combiner - -<img src=https://secure.travis-ci.org/dominictarr/stream-combiner.png?branch=master> - -## Combine (stream1,...,streamN) - -Turn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream -and reads from the last stream. - -Listening for 'error' will recieve errors from all streams inside the pipe. - -``` js - var Combine = require('stream-combiner') - var es = require('event-stream') - - Combine( //connect streams together with `pipe` - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - callback(null - , inspect(JSON.parse(data))) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) -``` - -## License - -MIT diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/index.js deleted file mode 100644 index 99cf5b61..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/index.js +++ /dev/null @@ -1,39 +0,0 @@ -var duplexer = require('duplexer') - -module.exports = function () { - - var streams = [].slice.call(arguments) - , first = streams[0] - , last = streams[streams.length - 1] - , thepipe = duplexer(first, last) - - if(streams.length == 1) - return streams[0] - else if (!streams.length) - throw new Error('connect called with empty args') - - //pipe all the streams together - - function recurse (streams) { - if(streams.length < 2) - return - streams[0].pipe(streams[1]) - recurse(streams.slice(1)) - } - - recurse(streams) - - function onerror () { - var args = [].slice.call(arguments) - args.unshift('error') - thepipe.emit.apply(thepipe, args) - } - - //es.duplex already reemits the error from the first and last stream. - //add a listener for the inner streams in the pipeline. - for(var i = 1; i < streams.length - 1; i ++) - streams[i].on('error', onerror) - - return thepipe -} - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.npmignore deleted file mode 100644 index 062c11e8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -*.err \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.travis.yml deleted file mode 100644 index ed05f88d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" - - "0.8" - - "0.6" diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/LICENCE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/LICENCE deleted file mode 100644 index a23e08a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/README.md deleted file mode 100644 index 61ff71aa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# duplexer - -[![build status][1]][2] [![dependency status][3]][4] - -[![browser support][5]][6] - -Creates a duplex stream - -Taken from [event-stream][7] - -## duplex (writeStream, readStream) - -Takes a writable stream and a readable stream and makes them appear as a readable writable stream. - -It is assumed that the two streams are connected to each other in some way. - -## Example - -```js -var grep = cp.exec('grep Stream') - -duplex(grep.stdin, grep.stdout) -``` - -## Installation - -`npm install duplexer` - -## Tests - -`npm test` - -## Contributors - - - Dominictarr - - Raynos - - samccone - -## MIT Licenced - - [1]: https://secure.travis-ci.org/Raynos/duplexer.png - [2]: https://travis-ci.org/Raynos/duplexer - [3]: https://david-dm.org/Raynos/duplexer.png - [4]: https://david-dm.org/Raynos/duplexer - [5]: https://ci.testling.com/Raynos/duplexer.png - [6]: https://ci.testling.com/Raynos/duplexer - [7]: https://github.com/dominictarr/event-stream#duplex-writestream-readstream diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/index.js deleted file mode 100644 index a188a210..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/index.js +++ /dev/null @@ -1,87 +0,0 @@ -var Stream = require("stream") -var writeMethods = ["write", "end", "destroy"] -var readMethods = ["resume", "pause"] -var readEvents = ["data", "close"] -var slice = Array.prototype.slice - -module.exports = duplex - -function forEach (arr, fn) { - if (arr.forEach) { - return arr.forEach(fn) - } - - for (var i = 0; i < arr.length; i++) { - fn(arr[i], i) - } -} - -function duplex(writer, reader) { - var stream = new Stream() - var ended = false - - forEach(writeMethods, proxyWriter) - - forEach(readMethods, proxyReader) - - forEach(readEvents, proxyStream) - - reader.on("end", handleEnd) - - writer.on("drain", function() { - stream.emit("drain") - }) - - writer.on("error", reemit) - reader.on("error", reemit) - - stream.writable = writer.writable - stream.readable = reader.readable - - return stream - - function proxyWriter(methodName) { - stream[methodName] = method - - function method() { - return writer[methodName].apply(writer, arguments) - } - } - - function proxyReader(methodName) { - stream[methodName] = method - - function method() { - stream.emit(methodName) - var func = reader[methodName] - if (func) { - return func.apply(reader, arguments) - } - reader.emit(methodName) - } - } - - function proxyStream(methodName) { - reader.on(methodName, reemit) - - function reemit() { - var args = slice.call(arguments) - args.unshift(methodName) - stream.emit.apply(stream, args) - } - } - - function handleEnd() { - if (ended) { - return - } - ended = true - var args = slice.call(arguments) - args.unshift("end") - stream.emit.apply(stream, args) - } - - function reemit(err) { - stream.emit("error", err) - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/package.json deleted file mode 100644 index d78e4d07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "duplexer", - "version": "0.1.1", - "description": "Creates a duplex stream", - "keywords": [], - "author": { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - "repository": { - "type": "git", - "url": "git://github.com/Raynos/duplexer.git" - }, - "main": "index", - "homepage": "https://github.com/Raynos/duplexer", - "contributors": [ - { - "name": "Jake Verbaten" - } - ], - "bugs": { - "url": "https://github.com/Raynos/duplexer/issues", - "email": "raynos2@gmail.com" - }, - "devDependencies": { - "tape": "0.3.3", - "through": "~0.1.4" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/Raynos/duplexer/raw/master/LICENSE" - } - ], - "scripts": { - "test": "node test" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "ie/8..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" - ] - }, - "readme": "# duplexer\n\n[![build status][1]][2] [![dependency status][3]][4]\n\n[![browser support][5]][6]\n\nCreates a duplex stream\n\nTaken from [event-stream][7]\n\n## duplex (writeStream, readStream)\n\nTakes a writable stream and a readable stream and makes them appear as a readable writable stream.\n\nIt is assumed that the two streams are connected to each other in some way.\n\n## Example\n\n```js\nvar grep = cp.exec('grep Stream')\n\nduplex(grep.stdin, grep.stdout)\n```\n\n## Installation\n\n`npm install duplexer`\n\n## Tests\n\n`npm test`\n\n## Contributors\n\n - Dominictarr\n - Raynos\n - samccone\n\n## MIT Licenced\n\n [1]: https://secure.travis-ci.org/Raynos/duplexer.png\n [2]: https://travis-ci.org/Raynos/duplexer\n [3]: https://david-dm.org/Raynos/duplexer.png\n [4]: https://david-dm.org/Raynos/duplexer\n [5]: https://ci.testling.com/Raynos/duplexer.png\n [6]: https://ci.testling.com/Raynos/duplexer\n [7]: https://github.com/dominictarr/event-stream#duplex-writestream-readstream\n", - "readmeFilename": "README.md", - "_id": "duplexer@0.1.1", - "dist": { - "shasum": "7fb4a6591c344b842e6f6764796a996ff912e7f4" - }, - "_from": "duplexer@~0.1.1", - "_resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/test/index.js deleted file mode 100644 index 4988e0d9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/test/index.js +++ /dev/null @@ -1,31 +0,0 @@ -var through = require("through") -var test = require("tape") - -var duplex = require("../index") - -var readable = through() -var writable = through(write) -var written = 0 -var data = 0 - -var stream = duplex(writable, readable) - -function write() { - written++ -} - -stream.on("data", ondata) - -function ondata() { - data++ -} - -test("emit and write", function(t) { - t.plan(2) - - stream.write() - readable.emit("data") - - t.equal(written, 1, "should have written once") - t.equal(data, 1, "should have recived once") -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/package.json deleted file mode 100644 index 3a25f682..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "stream-combiner", - "version": "0.0.4", - "homepage": "https://github.com/dominictarr/stream-combiner", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/stream-combiner.git" - }, - "dependencies": { - "duplexer": "~0.1.1" - }, - "devDependencies": { - "tape": "~2.3.0", - "event-stream": "~3.0.7" - }, - "scripts": { - "test": "set -e; for t in test/*.js; do node $t; done" - }, - "author": { - "name": "'Dominic Tarr'", - "email": "dominic.tarr@gmail.com", - "url": "http://dominictarr.com" - }, - "license": "MIT", - "readme": "# stream-combiner\n\n<img src=https://secure.travis-ci.org/dominictarr/stream-combiner.png?branch=master>\n\n## Combine (stream1,...,streamN)\n\nTurn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream\nand reads from the last stream. \n\nListening for 'error' will recieve errors from all streams inside the pipe.\n\n``` js\n var Combine = require('stream-combiner')\n var es = require('event-stream')\n\n Combine( //connect streams together with `pipe`\n process.openStdin(), //open stdin\n es.split(), //split stream to break on newlines\n es.map(function (data, callback) {//turn this async function into a stream\n callback(null\n , inspect(JSON.parse(data))) //render it nicely\n }),\n process.stdout // pipe it to stdout !\n )\n```\n\n## License\n\nMIT\n", - "readmeFilename": "README.md", - "description": "<img src=https://secure.travis-ci.org/dominictarr/stream-combiner.png?branch=master>", - "bugs": { - "url": "https://github.com/dominictarr/stream-combiner/issues" - }, - "_id": "stream-combiner@0.0.4", - "dist": { - "shasum": "0d1c68aea72345d3619884ed3eb44e8a4e583129" - }, - "_from": "stream-combiner@~0.0.2", - "_resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/test/index.js deleted file mode 100644 index d17ddada..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/test/index.js +++ /dev/null @@ -1,52 +0,0 @@ -var es = require('event-stream') -var combine = require('..') -var test = require('tape') - -test('do not duplicate errors', function (test) { - - var errors = 0; - var pipe = combine( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }) - ) - - pipe.on('error', function(err) { - errors++ - test.ok(errors, 'expected error count') - process.nextTick(function () { - return test.end(); - }) - }) - - return pipe.write('meh'); -}) - -test('3 pipe do not duplicate errors', function (test) { - - var errors = 0; - var pipe = combine( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }), - es.through() - ) - - pipe.on('error', function(err) { - errors++ - test.ok(errors, 'expected error count') - process.nextTick(function () { - return test.end(); - }) - }) - - return pipe.write('meh'); - -}) - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.npmignore deleted file mode 100644 index c167ad5b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -.*.swp -node_modules -examples/extract/ -test/tmp/ -test/fixtures/ diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.travis.yml deleted file mode 100644 index 2d26206d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.6 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/LICENCE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/LICENCE deleted file mode 100644 index 74489e2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/LICENCE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) Isaac Z. Schlueter -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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/README.md deleted file mode 100644 index 5bcc82cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# node-tar - -Tar for Node.js. - -[![NPM](https://nodei.co/npm/tar.png)](https://nodei.co/npm/tar/) - -## API - -See `examples/` for usage examples. - -### var tar = require('tar') - -Returns an object with `.Pack`, `.Extract` and `.Parse` methods. - -### tar.Pack([properties]) - -Returns a through stream. Use -[fstream](https://npmjs.org/package/fstream) to write files into the -pack stream and you will receive tar archive data from the pack -stream. - -The optional `properties` object are used to set properties in the tar -'Global Extended Header'. - -### tar.Extract([options]) - -Returns a through stream. Write tar data to the stream and the files -in the tarball will be extracted onto the filesystem. - -`options` can be: - -```js -{ - path: '/path/to/extract/tar/into', - strip: 0, // how many path segments to strip from the root when extracting -} -``` - -`options` also get passed to the `fstream.Writer` instance that `tar` -uses internally. - -### tar.Parse() - -Returns a writable stream. Write tar data to it and it will emit -`entry` events for each entry parsed from the tarball. This is used by -`tar.Extract`. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/extracter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/extracter.js deleted file mode 100644 index e150abf2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/extracter.js +++ /dev/null @@ -1,11 +0,0 @@ -var tar = require("../tar.js") - , fs = require("fs") - -fs.createReadStream(__dirname + "/../test/fixtures/c.tar") - .pipe(tar.Extract({ path: __dirname + "/extract" })) - .on("error", function (er) { - console.error("error here") - }) - .on("end", function () { - console.error("done") - }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/reader.js deleted file mode 100644 index 39f3f088..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/reader.js +++ /dev/null @@ -1,36 +0,0 @@ -var tar = require("../tar.js") - , fs = require("fs") - -fs.createReadStream(__dirname + "/../test/fixtures/c.tar") - .pipe(tar.Parse()) - .on("extendedHeader", function (e) { - console.error("extended pax header", e.props) - e.on("end", function () { - console.error("extended pax fields:", e.fields) - }) - }) - .on("ignoredEntry", function (e) { - console.error("ignoredEntry?!?", e.props) - }) - .on("longLinkpath", function (e) { - console.error("longLinkpath entry", e.props) - e.on("end", function () { - console.error("value=%j", e.body.toString()) - }) - }) - .on("longPath", function (e) { - console.error("longPath entry", e.props) - e.on("end", function () { - console.error("value=%j", e.body.toString()) - }) - }) - .on("entry", function (e) { - console.error("entry", e.props) - e.on("data", function (c) { - console.error(" >>>" + c.toString().replace(/\n/g, "\\n")) - }) - e.on("end", function () { - console.error(" <<<EOF") - }) - }) - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/buffer-entry.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/buffer-entry.js deleted file mode 100644 index 6c1da237..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/buffer-entry.js +++ /dev/null @@ -1,30 +0,0 @@ -// just like the Entry class, but it buffers the contents -// -// XXX It would be good to set a maximum BufferEntry filesize, -// since it eats up memory. In normal operation, -// these are only for long filenames or link names, which are -// rarely very big. - -module.exports = BufferEntry - -var inherits = require("inherits") - , Entry = require("./entry.js") - -function BufferEntry () { - Entry.apply(this, arguments) - this._buffer = new Buffer(this.props.size) - this._offset = 0 - this.body = "" - this.on("end", function () { - this.body = this._buffer.toString().slice(0, -1) - }) -} - -inherits(BufferEntry, Entry) - -// collect the bytes as they come in. -BufferEntry.prototype.write = function (c) { - c.copy(this._buffer, this._offset) - this._offset += c.length - Entry.prototype.write.call(this, c) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry-writer.js deleted file mode 100644 index 8e09042d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry-writer.js +++ /dev/null @@ -1,169 +0,0 @@ -module.exports = EntryWriter - -var tar = require("../tar.js") - , TarHeader = require("./header.js") - , Entry = require("./entry.js") - , inherits = require("inherits") - , BlockStream = require("block-stream") - , ExtendedHeaderWriter - , Stream = require("stream").Stream - , EOF = {} - -inherits(EntryWriter, Stream) - -function EntryWriter (props) { - var me = this - - if (!(me instanceof EntryWriter)) { - return new EntryWriter(props) - } - - Stream.apply(this) - - me.writable = true - me.readable = true - - me._stream = new BlockStream(512) - - me._stream.on("data", function (c) { - me.emit("data", c) - }) - - me._stream.on("drain", function () { - me.emit("drain") - }) - - me._stream.on("end", function () { - me.emit("end") - me.emit("close") - }) - - me.props = props - if (props.type === "Directory") { - props.size = 0 - } - props.ustar = "ustar\0" - props.ustarver = "00" - me.path = props.path - - me._buffer = [] - me._didHeader = false - me._meta = false - - me.on("pipe", function () { - me._process() - }) -} - -EntryWriter.prototype.write = function (c) { - // console.error(".. ew write") - if (this._ended) return this.emit("error", new Error("write after end")) - this._buffer.push(c) - this._process() - this._needDrain = this._buffer.length > 0 - return !this._needDrain -} - -EntryWriter.prototype.end = function (c) { - // console.error(".. ew end") - if (c) this._buffer.push(c) - this._buffer.push(EOF) - this._ended = true - this._process() - this._needDrain = this._buffer.length > 0 -} - -EntryWriter.prototype.pause = function () { - // console.error(".. ew pause") - this._paused = true - this.emit("pause") -} - -EntryWriter.prototype.resume = function () { - // console.error(".. ew resume") - this._paused = false - this.emit("resume") - this._process() -} - -EntryWriter.prototype.add = function (entry) { - // console.error(".. ew add") - if (!this.parent) return this.emit("error", new Error("no parent")) - - // make sure that the _header and such is emitted, and clear out - // the _currentEntry link on the parent. - if (!this._ended) this.end() - - return this.parent.add(entry) -} - -EntryWriter.prototype._header = function () { - // console.error(".. ew header") - if (this._didHeader) return - this._didHeader = true - - var headerBlock = TarHeader.encode(this.props) - - if (this.props.needExtended && !this._meta) { - var me = this - - ExtendedHeaderWriter = ExtendedHeaderWriter || - require("./extended-header-writer.js") - - ExtendedHeaderWriter(this.props) - .on("data", function (c) { - me.emit("data", c) - }) - .on("error", function (er) { - me.emit("error", er) - }) - .end() - } - - // console.error(".. .. ew headerBlock emitting") - this.emit("data", headerBlock) - this.emit("header") -} - -EntryWriter.prototype._process = function () { - // console.error(".. .. ew process") - if (!this._didHeader && !this._meta) { - this._header() - } - - if (this._paused || this._processing) { - // console.error(".. .. .. paused=%j, processing=%j", this._paused, this._processing) - return - } - - this._processing = true - - var buf = this._buffer - for (var i = 0; i < buf.length; i ++) { - // console.error(".. .. .. i=%d", i) - - var c = buf[i] - - if (c === EOF) this._stream.end() - else this._stream.write(c) - - if (this._paused) { - // console.error(".. .. .. paused mid-emission") - this._processing = false - if (i < buf.length) { - this._needDrain = true - this._buffer = buf.slice(i + 1) - } - return - } - } - - // console.error(".. .. .. emitted") - this._buffer.length = 0 - this._processing = false - - // console.error(".. .. .. emitting drain") - this.emit("drain") -} - -EntryWriter.prototype.destroy = function () {} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry.js deleted file mode 100644 index 4af5c410..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry.js +++ /dev/null @@ -1,213 +0,0 @@ -// A passthrough read/write stream that sets its properties -// based on a header, extendedHeader, and globalHeader -// -// Can be either a file system object of some sort, or -// a pax/ustar metadata entry. - -module.exports = Entry - -var TarHeader = require("./header.js") - , tar = require("../tar") - , assert = require("assert").ok - , Stream = require("stream").Stream - , inherits = require("inherits") - , fstream = require("fstream").Abstract - -function Entry (header, extended, global) { - Stream.call(this) - this.readable = true - this.writable = true - - this._needDrain = false - this._paused = false - this._reading = false - this._ending = false - this._ended = false - this._remaining = 0 - this._queue = [] - this._index = 0 - this._queueLen = 0 - - this._read = this._read.bind(this) - - this.props = {} - this._header = header - this._extended = extended || {} - - // globals can change throughout the course of - // a file parse operation. Freeze it at its current state. - this._global = {} - var me = this - Object.keys(global || {}).forEach(function (g) { - me._global[g] = global[g] - }) - - this._setProps() -} - -inherits(Entry, Stream) - -Entry.prototype.write = function (c) { - if (this._ending) this.error("write() after end()", null, true) - if (this._remaining === 0) { - this.error("invalid bytes past eof") - } - - // often we'll get a bunch of \0 at the end of the last write, - // since chunks will always be 512 bytes when reading a tarball. - if (c.length > this._remaining) { - c = c.slice(0, this._remaining) - } - this._remaining -= c.length - - // put it on the stack. - var ql = this._queueLen - this._queue.push(c) - this._queueLen ++ - - this._read() - - // either paused, or buffered - if (this._paused || ql > 0) { - this._needDrain = true - return false - } - - return true -} - -Entry.prototype.end = function (c) { - if (c) this.write(c) - this._ending = true - this._read() -} - -Entry.prototype.pause = function () { - this._paused = true - this.emit("pause") -} - -Entry.prototype.resume = function () { - // console.error(" Tar Entry resume", this.path) - this.emit("resume") - this._paused = false - this._read() - return this._queueLen - this._index > 1 -} - - // This is bound to the instance -Entry.prototype._read = function () { - // console.error(" Tar Entry _read", this.path) - - if (this._paused || this._reading || this._ended) return - - // set this flag so that event handlers don't inadvertently - // get multiple _read() calls running. - this._reading = true - - // have any data to emit? - while (this._index < this._queueLen && !this._paused) { - var chunk = this._queue[this._index ++] - this.emit("data", chunk) - } - - // check if we're drained - if (this._index >= this._queueLen) { - this._queue.length = this._queueLen = this._index = 0 - if (this._needDrain) { - this._needDrain = false - this.emit("drain") - } - if (this._ending) { - this._ended = true - this.emit("end") - } - } - - // if the queue gets too big, then pluck off whatever we can. - // this should be fairly rare. - var mql = this._maxQueueLen - if (this._queueLen > mql && this._index > 0) { - mql = Math.min(this._index, mql) - this._index -= mql - this._queueLen -= mql - this._queue = this._queue.slice(mql) - } - - this._reading = false -} - -Entry.prototype._setProps = function () { - // props = extended->global->header->{} - var header = this._header - , extended = this._extended - , global = this._global - , props = this.props - - // first get the values from the normal header. - var fields = tar.fields - for (var f = 0; fields[f] !== null; f ++) { - var field = fields[f] - , val = header[field] - if (typeof val !== "undefined") props[field] = val - } - - // next, the global header for this file. - // numeric values, etc, will have already been parsed. - ;[global, extended].forEach(function (p) { - Object.keys(p).forEach(function (f) { - if (typeof p[f] !== "undefined") props[f] = p[f] - }) - }) - - // no nulls allowed in path or linkpath - ;["path", "linkpath"].forEach(function (p) { - if (props.hasOwnProperty(p)) { - props[p] = props[p].split("\0")[0] - } - }) - - - // set date fields to be a proper date - ;["mtime", "ctime", "atime"].forEach(function (p) { - if (props.hasOwnProperty(p)) { - props[p] = new Date(props[p] * 1000) - } - }) - - // set the type so that we know what kind of file to create - var type - switch (tar.types[props.type]) { - case "OldFile": - case "ContiguousFile": - type = "File" - break - - case "GNUDumpDir": - type = "Directory" - break - - case undefined: - type = "Unknown" - break - - case "Link": - case "SymbolicLink": - case "CharacterDevice": - case "BlockDevice": - case "Directory": - case "FIFO": - default: - type = tar.types[props.type] - } - - this.type = type - this.path = props.path - this.size = props.size - - // size is special, since it signals when the file needs to end. - this._remaining = props.size -} - -Entry.prototype.warn = fstream.warn -Entry.prototype.error = fstream.error diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header-writer.js deleted file mode 100644 index 1728c458..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header-writer.js +++ /dev/null @@ -1,191 +0,0 @@ - -module.exports = ExtendedHeaderWriter - -var inherits = require("inherits") - , EntryWriter = require("./entry-writer.js") - -inherits(ExtendedHeaderWriter, EntryWriter) - -var tar = require("../tar.js") - , path = require("path") - , TarHeader = require("./header.js") - -// props is the props of the thing we need to write an -// extended header for. -// Don't be shy with it. Just encode everything. -function ExtendedHeaderWriter (props) { - // console.error(">> ehw ctor") - var me = this - - if (!(me instanceof ExtendedHeaderWriter)) { - return new ExtendedHeaderWriter(props) - } - - me.fields = props - - var p = - { path : ("PaxHeader" + path.join("/", props.path || "")) - .replace(/\\/g, "/").substr(0, 100) - , mode : props.mode || 0666 - , uid : props.uid || 0 - , gid : props.gid || 0 - , size : 0 // will be set later - , mtime : props.mtime || Date.now() / 1000 - , type : "x" - , linkpath : "" - , ustar : "ustar\0" - , ustarver : "00" - , uname : props.uname || "" - , gname : props.gname || "" - , devmaj : props.devmaj || 0 - , devmin : props.devmin || 0 - } - - - EntryWriter.call(me, p) - // console.error(">> ehw props", me.props) - me.props = p - - me._meta = true -} - -ExtendedHeaderWriter.prototype.end = function () { - // console.error(">> ehw end") - var me = this - - if (me._ended) return - me._ended = true - - me._encodeFields() - - if (me.props.size === 0) { - // nothing to write! - me._ready = true - me._stream.end() - return - } - - me._stream.write(TarHeader.encode(me.props)) - me.body.forEach(function (l) { - me._stream.write(l) - }) - me._ready = true - - // console.error(">> ehw _process calling end()", me.props) - this._stream.end() -} - -ExtendedHeaderWriter.prototype._encodeFields = function () { - // console.error(">> ehw _encodeFields") - this.body = [] - if (this.fields.prefix) { - this.fields.path = this.fields.prefix + "/" + this.fields.path - this.fields.prefix = "" - } - encodeFields(this.fields, "", this.body, this.fields.noProprietary) - var me = this - this.body.forEach(function (l) { - me.props.size += l.length - }) -} - -function encodeFields (fields, prefix, body, nop) { - // console.error(">> >> ehw encodeFields") - // "%d %s=%s\n", <length>, <keyword>, <value> - // The length is a decimal number, and includes itself and the \n - // Numeric values are decimal strings. - - Object.keys(fields).forEach(function (k) { - var val = fields[k] - , numeric = tar.numeric[k] - - if (prefix) k = prefix + "." + k - - // already including NODETAR.type, don't need File=true also - if (k === fields.type && val === true) return - - switch (k) { - // don't include anything that's always handled just fine - // in the normal header, or only meaningful in the context - // of nodetar - case "mode": - case "cksum": - case "ustar": - case "ustarver": - case "prefix": - case "basename": - case "dirname": - case "needExtended": - case "block": - case "filter": - return - - case "rdev": - if (val === 0) return - break - - case "nlink": - case "dev": // Truly a hero among men, Creator of Star! - case "ino": // Speak his name with reverent awe! It is: - k = "SCHILY." + k - break - - default: break - } - - if (val && typeof val === "object" && - !Buffer.isBuffer(val)) encodeFields(val, k, body, nop) - else if (val === null || val === undefined) return - else body.push.apply(body, encodeField(k, val, nop)) - }) - - return body -} - -function encodeField (k, v, nop) { - // lowercase keys must be valid, otherwise prefix with - // "NODETAR." - if (k.charAt(0) === k.charAt(0).toLowerCase()) { - var m = k.split(".")[0] - if (!tar.knownExtended[m]) k = "NODETAR." + k - } - - // no proprietary - if (nop && k.charAt(0) !== k.charAt(0).toLowerCase()) { - return [] - } - - if (typeof val === "number") val = val.toString(10) - - var s = new Buffer(" " + k + "=" + v + "\n") - , digits = Math.floor(Math.log(s.length) / Math.log(10)) + 1 - - // console.error("1 s=%j digits=%j s.length=%d", s.toString(), digits, s.length) - - // if adding that many digits will make it go over that length, - // then add one to it. For example, if the string is: - // " foo=bar\n" - // then that's 9 characters. With the "9", that bumps the length - // up to 10. However, this is invalid: - // "10 foo=bar\n" - // but, since that's actually 11 characters, since 10 adds another - // character to the length, and the length includes the number - // itself. In that case, just bump it up again. - if (s.length + digits >= Math.pow(10, digits)) digits += 1 - // console.error("2 s=%j digits=%j s.length=%d", s.toString(), digits, s.length) - - var len = digits + s.length - // console.error("3 s=%j digits=%j s.length=%d len=%d", s.toString(), digits, s.length, len) - var lenBuf = new Buffer("" + len) - if (lenBuf.length + s.length !== len) { - throw new Error("Bad length calculation\n"+ - "len="+len+"\n"+ - "lenBuf="+JSON.stringify(lenBuf.toString())+"\n"+ - "lenBuf.length="+lenBuf.length+"\n"+ - "digits="+digits+"\n"+ - "s="+JSON.stringify(s.toString())+"\n"+ - "s.length="+s.length) - } - - return [lenBuf, s] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header.js deleted file mode 100644 index 74f432ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header.js +++ /dev/null @@ -1,140 +0,0 @@ -// An Entry consisting of: -// -// "%d %s=%s\n", <length>, <keyword>, <value> -// -// The length is a decimal number, and includes itself and the \n -// \0 does not terminate anything. Only the length terminates the string. -// Numeric values are decimal strings. - -module.exports = ExtendedHeader - -var Entry = require("./entry.js") - , inherits = require("inherits") - , tar = require("../tar.js") - , numeric = tar.numeric - , keyTrans = { "SCHILY.dev": "dev" - , "SCHILY.ino": "ino" - , "SCHILY.nlink": "nlink" } - -function ExtendedHeader () { - Entry.apply(this, arguments) - this.on("data", this._parse) - this.fields = {} - this._position = 0 - this._fieldPos = 0 - this._state = SIZE - this._sizeBuf = [] - this._keyBuf = [] - this._valBuf = [] - this._size = -1 - this._key = "" -} - -inherits(ExtendedHeader, Entry) -ExtendedHeader.prototype._parse = parse - -var s = 0 - , states = ExtendedHeader.states = {} - , SIZE = states.SIZE = s++ - , KEY = states.KEY = s++ - , VAL = states.VAL = s++ - , ERR = states.ERR = s++ - -Object.keys(states).forEach(function (s) { - states[states[s]] = states[s] -}) - -states[s] = null - -// char code values for comparison -var _0 = "0".charCodeAt(0) - , _9 = "9".charCodeAt(0) - , point = ".".charCodeAt(0) - , a = "a".charCodeAt(0) - , Z = "Z".charCodeAt(0) - , a = "a".charCodeAt(0) - , z = "z".charCodeAt(0) - , space = " ".charCodeAt(0) - , eq = "=".charCodeAt(0) - , cr = "\n".charCodeAt(0) - -function parse (c) { - if (this._state === ERR) return - - for ( var i = 0, l = c.length - ; i < l - ; this._position++, this._fieldPos++, i++) { - // console.error("top of loop, size="+this._size) - - var b = c[i] - - if (this._size >= 0 && this._fieldPos > this._size) { - error(this, "field exceeds length="+this._size) - return - } - - switch (this._state) { - case ERR: return - - case SIZE: - // console.error("parsing size, b=%d, rest=%j", b, c.slice(i).toString()) - if (b === space) { - this._state = KEY - // this._fieldPos = this._sizeBuf.length - this._size = parseInt(new Buffer(this._sizeBuf).toString(), 10) - this._sizeBuf.length = 0 - continue - } - if (b < _0 || b > _9) { - error(this, "expected [" + _0 + ".." + _9 + "], got " + b) - return - } - this._sizeBuf.push(b) - continue - - case KEY: - // can be any char except =, not > size. - if (b === eq) { - this._state = VAL - this._key = new Buffer(this._keyBuf).toString() - if (keyTrans[this._key]) this._key = keyTrans[this._key] - this._keyBuf.length = 0 - continue - } - this._keyBuf.push(b) - continue - - case VAL: - // field must end with cr - if (this._fieldPos === this._size - 1) { - // console.error("finished with "+this._key) - if (b !== cr) { - error(this, "expected \\n at end of field") - return - } - var val = new Buffer(this._valBuf).toString() - if (numeric[this._key]) { - val = parseFloat(val) - } - this.fields[this._key] = val - - this._valBuf.length = 0 - this._state = SIZE - this._size = -1 - this._fieldPos = -1 - continue - } - this._valBuf.push(b) - continue - } - } -} - -function error (me, msg) { - msg = "invalid header: " + msg - + "\nposition=" + me._position - + "\nfield position=" + me._fieldPos - - me.error(msg) - me.state = ERR -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extract.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extract.js deleted file mode 100644 index c34a81e2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extract.js +++ /dev/null @@ -1,78 +0,0 @@ -// give it a tarball and a path, and it'll dump the contents - -module.exports = Extract - -var tar = require("../tar.js") - , fstream = require("fstream") - , inherits = require("inherits") - , path = require("path") - -function Extract (opts) { - if (!(this instanceof Extract)) return new Extract(opts) - tar.Parse.apply(this) - - // have to dump into a directory - opts.type = "Directory" - opts.Directory = true - - if (typeof opts !== "object") { - opts = { path: opts } - } - - // better to drop in cwd? seems more standard. - opts.path = opts.path || path.resolve("node-tar-extract") - opts.type = "Directory" - opts.Directory = true - - // similar to --strip or --strip-components - opts.strip = +opts.strip - if (!opts.strip || opts.strip <= 0) opts.strip = 0 - - this._fst = fstream.Writer(opts) - - this.pause() - var me = this - - // Hardlinks in tarballs are relative to the root - // of the tarball. So, they need to be resolved against - // the target directory in order to be created properly. - me.on("entry", function (entry) { - // if there's a "strip" argument, then strip off that many - // path components. - if (opts.strip) { - var p = entry.path.split("/").slice(opts.strip).join("/") - entry.path = entry.props.path = p - if (entry.linkpath) { - var lp = entry.linkpath.split("/").slice(opts.strip).join("/") - entry.linkpath = entry.props.linkpath = lp - } - } - if (entry.type !== "Link") return - entry.linkpath = entry.props.linkpath = - path.join(opts.path, path.join("/", entry.props.linkpath)) - }) - - this._fst.on("ready", function () { - me.pipe(me._fst, { end: false }) - me.resume() - }) - - // this._fst.on("end", function () { - // console.error("\nEEEE Extract End", me._fst.path) - // }) - - this._fst.on("close", function () { - // console.error("\nEEEE Extract End", me._fst.path) - me.emit("end") - me.emit("close") - }) -} - -inherits(Extract, tar.Parse) - -Extract.prototype._streamEnd = function () { - var me = this - if (!me._ended) me.error("unexpected eof") - me._fst.end() - // my .end() is coming later. -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/global-header-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/global-header-writer.js deleted file mode 100644 index 0bfc7b80..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/global-header-writer.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = GlobalHeaderWriter - -var ExtendedHeaderWriter = require("./extended-header-writer.js") - , inherits = require("inherits") - -inherits(GlobalHeaderWriter, ExtendedHeaderWriter) - -function GlobalHeaderWriter (props) { - if (!(this instanceof GlobalHeaderWriter)) { - return new GlobalHeaderWriter(props) - } - ExtendedHeaderWriter.call(this, props) - this.props.type = "g" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/header.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/header.js deleted file mode 100644 index 05b237c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/header.js +++ /dev/null @@ -1,385 +0,0 @@ -// parse a 512-byte header block to a data object, or vice-versa -// If the data won't fit nicely in a simple header, then generate -// the appropriate extended header file, and return that. - -module.exports = TarHeader - -var tar = require("../tar.js") - , fields = tar.fields - , fieldOffs = tar.fieldOffs - , fieldEnds = tar.fieldEnds - , fieldSize = tar.fieldSize - , numeric = tar.numeric - , assert = require("assert").ok - , space = " ".charCodeAt(0) - , slash = "/".charCodeAt(0) - , bslash = process.platform === "win32" ? "\\".charCodeAt(0) : null - -function TarHeader (block) { - if (!(this instanceof TarHeader)) return new TarHeader(block) - if (block) this.decode(block) -} - -TarHeader.prototype = - { decode : decode - , encode: encode - , calcSum: calcSum - , checkSum: checkSum - } - -TarHeader.parseNumeric = parseNumeric -TarHeader.encode = encode -TarHeader.decode = decode - -// note that this will only do the normal ustar header, not any kind -// of extended posix header file. If something doesn't fit comfortably, -// then it will set obj.needExtended = true, and set the block to -// the closest approximation. -function encode (obj) { - if (!obj && !(this instanceof TarHeader)) throw new Error( - "encode must be called on a TarHeader, or supplied an object") - - obj = obj || this - var block = obj.block = new Buffer(512) - - // if the object has a "prefix", then that's actually an extension of - // the path field. - if (obj.prefix) { - // console.error("%% header encoding, got a prefix", obj.prefix) - obj.path = obj.prefix + "/" + obj.path - // console.error("%% header encoding, prefixed path", obj.path) - obj.prefix = "" - } - - obj.needExtended = false - - if (obj.mode) { - if (typeof obj.mode === "string") obj.mode = parseInt(obj.mode, 8) - obj.mode = obj.mode & 0777 - } - - for (var f = 0; fields[f] !== null; f ++) { - var field = fields[f] - , off = fieldOffs[f] - , end = fieldEnds[f] - , ret - - switch (field) { - case "cksum": - // special, done below, after all the others - break - - case "prefix": - // special, this is an extension of the "path" field. - // console.error("%% header encoding, skip prefix later") - break - - case "type": - // convert from long name to a single char. - var type = obj.type || "0" - if (type.length > 1) { - type = tar.types[obj.type] - if (!type) type = "0" - } - writeText(block, off, end, type) - break - - case "path": - // uses the "prefix" field if > 100 bytes, but <= 255 - var pathLen = Buffer.byteLength(obj.path) - , pathFSize = fieldSize[fields.path] - , prefFSize = fieldSize[fields.prefix] - - // paths between 100 and 255 should use the prefix field. - // longer than 255 - if (pathLen > pathFSize && - pathLen <= pathFSize + prefFSize) { - // need to find a slash somewhere in the middle so that - // path and prefix both fit in their respective fields - var searchStart = pathLen - 1 - pathFSize - , searchEnd = prefFSize - , found = false - , pathBuf = new Buffer(obj.path) - - for ( var s = searchStart - ; (s <= searchEnd) - ; s ++ ) { - if (pathBuf[s] === slash || pathBuf[s] === bslash) { - found = s - break - } - } - - if (found !== false) { - prefix = pathBuf.slice(0, found).toString("utf8") - path = pathBuf.slice(found + 1).toString("utf8") - - ret = writeText(block, off, end, path) - off = fieldOffs[fields.prefix] - end = fieldEnds[fields.prefix] - // console.error("%% header writing prefix", off, end, prefix) - ret = writeText(block, off, end, prefix) || ret - break - } - } - - // paths less than 100 chars don't need a prefix - // and paths longer than 255 need an extended header and will fail - // on old implementations no matter what we do here. - // Null out the prefix, and fallthrough to default. - // console.error("%% header writing no prefix") - var poff = fieldOffs[fields.prefix] - , pend = fieldEnds[fields.prefix] - writeText(block, poff, pend, "") - // fallthrough - - // all other fields are numeric or text - default: - ret = numeric[field] - ? writeNumeric(block, off, end, obj[field]) - : writeText(block, off, end, obj[field] || "") - break - } - obj.needExtended = obj.needExtended || ret - } - - var off = fieldOffs[fields.cksum] - , end = fieldEnds[fields.cksum] - - writeNumeric(block, off, end, calcSum.call(this, block)) - - return block -} - -// if it's a negative number, or greater than will fit, -// then use write256. -var MAXNUM = { 12: 077777777777 - , 11: 07777777777 - , 8 : 07777777 - , 7 : 0777777 } -function writeNumeric (block, off, end, num) { - var writeLen = end - off - , maxNum = MAXNUM[writeLen] || 0 - - num = num || 0 - // console.error(" numeric", num) - - if (num instanceof Date || - Object.prototype.toString.call(num) === "[object Date]") { - num = num.getTime() / 1000 - } - - if (num > maxNum || num < 0) { - write256(block, off, end, num) - // need an extended header if negative or too big. - return true - } - - // god, tar is so annoying - // if the string is small enough, you should put a space - // between the octal string and the \0, but if it doesn't - // fit, then don't. - var numStr = Math.floor(num).toString(8) - if (num < MAXNUM[writeLen - 1]) numStr += " " - - // pad with "0" chars - if (numStr.length < writeLen) { - numStr = (new Array(writeLen - numStr.length).join("0")) + numStr - } - - if (numStr.length !== writeLen - 1) { - throw new Error("invalid length: " + JSON.stringify(numStr) + "\n" + - "expected: "+writeLen) - } - block.write(numStr, off, writeLen, "utf8") - block[end - 1] = 0 -} - -function write256 (block, off, end, num) { - var buf = block.slice(off, end) - var positive = num >= 0 - buf[0] = positive ? 0x80 : 0xFF - - // get the number as a base-256 tuple - if (!positive) num *= -1 - var tuple = [] - do { - var n = num % 256 - tuple.push(n) - num = (num - n) / 256 - } while (num) - - var bytes = tuple.length - - var fill = buf.length - bytes - for (var i = 1; i < fill; i ++) { - buf[i] = positive ? 0 : 0xFF - } - - // tuple is a base256 number, with [0] as the *least* significant byte - // if it's negative, then we need to flip all the bits once we hit the - // first non-zero bit. The 2's-complement is (0x100 - n), and the 1's- - // complement is (0xFF - n). - var zero = true - for (i = bytes; i > 0; i --) { - var byte = tuple[bytes - i] - if (positive) buf[fill + i] = byte - else if (zero && byte === 0) buf[fill + i] = 0 - else if (zero) { - zero = false - buf[fill + i] = 0x100 - byte - } else buf[fill + i] = 0xFF - byte - } -} - -function writeText (block, off, end, str) { - // strings are written as utf8, then padded with \0 - var strLen = Buffer.byteLength(str) - , writeLen = Math.min(strLen, end - off) - // non-ascii fields need extended headers - // long fields get truncated - , needExtended = strLen !== str.length || strLen > writeLen - - // write the string, and null-pad - if (writeLen > 0) block.write(str, off, writeLen, "utf8") - for (var i = off + writeLen; i < end; i ++) block[i] = 0 - - return needExtended -} - -function calcSum (block) { - block = block || this.block - assert(Buffer.isBuffer(block) && block.length === 512) - - if (!block) throw new Error("Need block to checksum") - - // now figure out what it would be if the cksum was " " - var sum = 0 - , start = fieldOffs[fields.cksum] - , end = fieldEnds[fields.cksum] - - for (var i = 0; i < fieldOffs[fields.cksum]; i ++) { - sum += block[i] - } - - for (var i = start; i < end; i ++) { - sum += space - } - - for (var i = end; i < 512; i ++) { - sum += block[i] - } - - return sum -} - - -function checkSum (block) { - var sum = calcSum.call(this, block) - block = block || this.block - - var cksum = block.slice(fieldOffs[fields.cksum], fieldEnds[fields.cksum]) - cksum = parseNumeric(cksum) - - return cksum === sum -} - -function decode (block) { - block = block || this.block - assert(Buffer.isBuffer(block) && block.length === 512) - - this.block = block - this.cksumValid = this.checkSum() - - var prefix = null - - // slice off each field. - for (var f = 0; fields[f] !== null; f ++) { - var field = fields[f] - , val = block.slice(fieldOffs[f], fieldEnds[f]) - - switch (field) { - case "ustar": - // if not ustar, then everything after that is just padding. - if (val.toString() !== "ustar\0") { - this.ustar = false - return - } else { - // console.error("ustar:", val, val.toString()) - this.ustar = val.toString() - } - break - - // prefix is special, since it might signal the xstar header - case "prefix": - var atime = parseNumeric(val.slice(131, 131 + 12)) - , ctime = parseNumeric(val.slice(131 + 12, 131 + 12 + 12)) - if ((val[130] === 0 || val[130] === space) && - typeof atime === "number" && - typeof ctime === "number" && - val[131 + 12] === space && - val[131 + 12 + 12] === space) { - this.atime = atime - this.ctime = ctime - val = val.slice(0, 130) - } - prefix = val.toString("utf8").replace(/\0+$/, "") - // console.error("%% header reading prefix", prefix) - break - - // all other fields are null-padding text - // or a number. - default: - if (numeric[field]) { - this[field] = parseNumeric(val) - } else { - this[field] = val.toString("utf8").replace(/\0+$/, "") - } - break - } - } - - // if we got a prefix, then prepend it to the path. - if (prefix) { - this.path = prefix + "/" + this.path - // console.error("%% header got a prefix", this.path) - } -} - -function parse256 (buf) { - // first byte MUST be either 80 or FF - // 80 for positive, FF for 2's comp - var positive - if (buf[0] === 0x80) positive = true - else if (buf[0] === 0xFF) positive = false - else return null - - // build up a base-256 tuple from the least sig to the highest - var zero = false - , tuple = [] - for (var i = buf.length - 1; i > 0; i --) { - var byte = buf[i] - if (positive) tuple.push(byte) - else if (zero && byte === 0) tuple.push(0) - else if (zero) { - zero = false - tuple.push(0x100 - byte) - } else tuple.push(0xFF - byte) - } - - for (var sum = 0, i = 0, l = tuple.length; i < l; i ++) { - sum += tuple[i] * Math.pow(256, i) - } - - return positive ? sum : -1 * sum -} - -function parseNumeric (f) { - if (f[0] & 0x80) return parse256(f) - - var str = f.toString("utf8").split("\0")[0].trim() - , res = parseInt(str, 8) - - return isNaN(res) ? null : res -} - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/pack.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/pack.js deleted file mode 100644 index 3ff14dd6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/pack.js +++ /dev/null @@ -1,231 +0,0 @@ -// pipe in an fstream, and it'll make a tarball. -// key-value pair argument is global extended header props. - -module.exports = Pack - -var EntryWriter = require("./entry-writer.js") - , Stream = require("stream").Stream - , path = require("path") - , inherits = require("inherits") - , GlobalHeaderWriter = require("./global-header-writer.js") - , collect = require("fstream").collect - , eof = new Buffer(512) - -for (var i = 0; i < 512; i ++) eof[i] = 0 - -inherits(Pack, Stream) - -function Pack (props) { - // console.error("-- p ctor") - var me = this - if (!(me instanceof Pack)) return new Pack(props) - - if (props) me._noProprietary = props.noProprietary - else me._noProprietary = false - - me._global = props - - me.readable = true - me.writable = true - me._buffer = [] - // console.error("-- -- set current to null in ctor") - me._currentEntry = null - me._processing = false - - me._pipeRoot = null - me.on("pipe", function (src) { - if (src.root === me._pipeRoot) return - me._pipeRoot = src - src.on("end", function () { - me._pipeRoot = null - }) - me.add(src) - }) -} - -Pack.prototype.addGlobal = function (props) { - // console.error("-- p addGlobal") - if (this._didGlobal) return - this._didGlobal = true - - var me = this - GlobalHeaderWriter(props) - .on("data", function (c) { - me.emit("data", c) - }) - .end() -} - -Pack.prototype.add = function (stream) { - if (this._global && !this._didGlobal) this.addGlobal(this._global) - - if (this._ended) return this.emit("error", new Error("add after end")) - - collect(stream) - this._buffer.push(stream) - this._process() - this._needDrain = this._buffer.length > 0 - return !this._needDrain -} - -Pack.prototype.pause = function () { - this._paused = true - if (this._currentEntry) this._currentEntry.pause() - this.emit("pause") -} - -Pack.prototype.resume = function () { - this._paused = false - if (this._currentEntry) this._currentEntry.resume() - this.emit("resume") - this._process() -} - -Pack.prototype.end = function () { - this._ended = true - this._buffer.push(eof) - this._process() -} - -Pack.prototype._process = function () { - var me = this - if (me._paused || me._processing) { - return - } - - var entry = me._buffer.shift() - - if (!entry) { - if (me._needDrain) { - me.emit("drain") - } - return - } - - if (entry.ready === false) { - // console.error("-- entry is not ready", entry) - me._buffer.unshift(entry) - entry.on("ready", function () { - // console.error("-- -- ready!", entry) - me._process() - }) - return - } - - me._processing = true - - if (entry === eof) { - // need 2 ending null blocks. - me.emit("data", eof) - me.emit("data", eof) - me.emit("end") - me.emit("close") - return - } - - // Change the path to be relative to the root dir that was - // added to the tarball. - // - // XXX This should be more like how -C works, so you can - // explicitly set a root dir, and also explicitly set a pathname - // in the tarball to use. That way we can skip a lot of extra - // work when resolving symlinks for bundled dependencies in npm. - - var root = path.dirname((entry.root || entry).path) - var wprops = {} - - Object.keys(entry.props || {}).forEach(function (k) { - wprops[k] = entry.props[k] - }) - - if (me._noProprietary) wprops.noProprietary = true - - wprops.path = path.relative(root, entry.path || '') - - // actually not a matter of opinion or taste. - if (process.platform === "win32") { - wprops.path = wprops.path.replace(/\\/g, "/") - } - - if (!wprops.type) - wprops.type = 'Directory' - - switch (wprops.type) { - // sockets not supported - case "Socket": - return - - case "Directory": - wprops.path += "/" - wprops.size = 0 - break - - case "Link": - var lp = path.resolve(path.dirname(entry.path), entry.linkpath) - wprops.linkpath = path.relative(root, lp) || "." - wprops.size = 0 - break - - case "SymbolicLink": - var lp = path.resolve(path.dirname(entry.path), entry.linkpath) - wprops.linkpath = path.relative(path.dirname(entry.path), lp) || "." - wprops.size = 0 - break - } - - // console.error("-- new writer", wprops) - // if (!wprops.type) { - // // console.error("-- no type?", entry.constructor.name, entry) - // } - - // console.error("-- -- set current to new writer", wprops.path) - var writer = me._currentEntry = EntryWriter(wprops) - - writer.parent = me - - // writer.on("end", function () { - // // console.error("-- -- writer end", writer.path) - // }) - - writer.on("data", function (c) { - me.emit("data", c) - }) - - writer.on("header", function () { - Buffer.prototype.toJSON = function () { - return this.toString().split(/\0/).join(".") - } - // console.error("-- -- writer header %j", writer.props) - if (writer.props.size === 0) nextEntry() - }) - writer.on("close", nextEntry) - - var ended = false - function nextEntry () { - if (ended) return - ended = true - - // console.error("-- -- writer close", writer.path) - // console.error("-- -- set current to null", wprops.path) - me._currentEntry = null - me._processing = false - me._process() - } - - writer.on("error", function (er) { - // console.error("-- -- writer error", writer.path) - me.emit("error", er) - }) - - // if it's the root, then there's no need to add its entries, - // or data, since they'll be added directly. - if (entry === me._pipeRoot) { - // console.error("-- is the root, don't auto-add") - writer.add = null - } - - entry.pipe(writer) -} - -Pack.prototype.destroy = function () {} -Pack.prototype.write = function () {} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/parse.js deleted file mode 100644 index 884e73db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/parse.js +++ /dev/null @@ -1,270 +0,0 @@ - -// A writable stream. -// It emits "entry" events, which provide a readable stream that has -// header info attached. - -module.exports = Parse.create = Parse - -var stream = require("stream") - , Stream = stream.Stream - , BlockStream = require("block-stream") - , tar = require("../tar.js") - , TarHeader = require("./header.js") - , Entry = require("./entry.js") - , BufferEntry = require("./buffer-entry.js") - , ExtendedHeader = require("./extended-header.js") - , assert = require("assert").ok - , inherits = require("inherits") - , fstream = require("fstream") - -// reading a tar is a lot like reading a directory -// However, we're actually not going to run the ctor, -// since it does a stat and various other stuff. -// This inheritance gives us the pause/resume/pipe -// behavior that is desired. -inherits(Parse, fstream.Reader) - -function Parse () { - var me = this - if (!(me instanceof Parse)) return new Parse() - - // doesn't apply fstream.Reader ctor? - // no, becasue we don't want to stat/etc, we just - // want to get the entry/add logic from .pipe() - Stream.apply(me) - - me.writable = true - me.readable = true - me._stream = new BlockStream(512) - me.position = 0 - - me._stream.on("error", function (e) { - me.emit("error", e) - }) - - me._stream.on("data", function (c) { - me._process(c) - }) - - me._stream.on("end", function () { - me._streamEnd() - }) - - me._stream.on("drain", function () { - me.emit("drain") - }) -} - -// overridden in Extract class, since it needs to -// wait for its DirWriter part to finish before -// emitting "end" -Parse.prototype._streamEnd = function () { - var me = this - if (!me._ended) me.error("unexpected eof") - me.emit("end") -} - -// a tar reader is actually a filter, not just a readable stream. -// So, you should pipe a tarball stream into it, and it needs these -// write/end methods to do that. -Parse.prototype.write = function (c) { - if (this._ended) { - // gnutar puts a LOT of nulls at the end. - // you can keep writing these things forever. - // Just ignore them. - for (var i = 0, l = c.length; i > l; i ++) { - if (c[i] !== 0) return this.error("write() after end()") - } - return - } - return this._stream.write(c) -} - -Parse.prototype.end = function (c) { - this._ended = true - return this._stream.end(c) -} - -// don't need to do anything, since we're just -// proxying the data up from the _stream. -// Just need to override the parent's "Not Implemented" -// error-thrower. -Parse.prototype._read = function () {} - -Parse.prototype._process = function (c) { - assert(c && c.length === 512, "block size should be 512") - - // one of three cases. - // 1. A new header - // 2. A part of a file/extended header - // 3. One of two or more EOF null blocks - - if (this._entry) { - var entry = this._entry - entry.write(c) - if (entry._remaining === 0) { - entry.end() - this._entry = null - } - } else { - // either zeroes or a header - var zero = true - for (var i = 0; i < 512 && zero; i ++) { - zero = c[i] === 0 - } - - // eof is *at least* 2 blocks of nulls, and then the end of the - // file. you can put blocks of nulls between entries anywhere, - // so appending one tarball to another is technically valid. - // ending without the eof null blocks is not allowed, however. - if (zero) { - this._ended = this._eofStarted - this._eofStarted = true - } else { - this._ended = this._eofStarted = false - this._startEntry(c) - } - - } - - this.position += 512 -} - -// take a header chunk, start the right kind of entry. -Parse.prototype._startEntry = function (c) { - var header = new TarHeader(c) - , self = this - , entry - , ev - , EntryType - , onend - , meta = false - - if (null === header.size || !header.cksumValid) { - var e = new Error("invalid tar file") - e.header = header - e.tar_file_offset = this.position - e.tar_block = this.position / 512 - this.emit("error", e) - } - - switch (tar.types[header.type]) { - case "File": - case "OldFile": - case "Link": - case "SymbolicLink": - case "CharacterDevice": - case "BlockDevice": - case "Directory": - case "FIFO": - case "ContiguousFile": - case "GNUDumpDir": - // start a file. - // pass in any extended headers - // These ones consumers are typically most interested in. - EntryType = Entry - ev = "entry" - break - - case "GlobalExtendedHeader": - // extended headers that apply to the rest of the tarball - EntryType = ExtendedHeader - onend = function () { - self._global = self._global || {} - Object.keys(entry.fields).forEach(function (k) { - self._global[k] = entry.fields[k] - }) - } - ev = "globalExtendedHeader" - meta = true - break - - case "ExtendedHeader": - case "OldExtendedHeader": - // extended headers that apply to the next entry - EntryType = ExtendedHeader - onend = function () { - self._extended = entry.fields - } - ev = "extendedHeader" - meta = true - break - - case "NextFileHasLongLinkpath": - // set linkpath=<contents> in extended header - EntryType = BufferEntry - onend = function () { - self._extended = self._extended || {} - self._extended.linkpath = entry.body - } - ev = "longLinkpath" - meta = true - break - - case "NextFileHasLongPath": - case "OldGnuLongPath": - // set path=<contents> in file-extended header - EntryType = BufferEntry - onend = function () { - self._extended = self._extended || {} - self._extended.path = entry.body - } - ev = "longPath" - meta = true - break - - default: - // all the rest we skip, but still set the _entry - // member, so that we can skip over their data appropriately. - // emit an event to say that this is an ignored entry type? - EntryType = Entry - ev = "ignoredEntry" - break - } - - var global, extended - if (meta) { - global = extended = null - } else { - var global = this._global - var extended = this._extended - - // extendedHeader only applies to one entry, so once we start - // an entry, it's over. - this._extended = null - } - entry = new EntryType(header, extended, global) - entry.meta = meta - - // only proxy data events of normal files. - if (!meta) { - entry.on("data", function (c) { - me.emit("data", c) - }) - } - - if (onend) entry.on("end", onend) - - this._entry = entry - var me = this - - entry.on("pause", function () { - me.pause() - }) - - entry.on("resume", function () { - me.resume() - }) - - if (this.listeners("*").length) { - this.emit("*", ev, entry) - } - - this.emit(ev, entry) - - // Zero-byte entry. End immediately. - if (entry.props.size === 0) { - entry.end() - this._entry = null - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/LICENCE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/LICENCE deleted file mode 100644 index 74489e2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/LICENCE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) Isaac Z. Schlueter -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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/README.md deleted file mode 100644 index c16e9c46..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# block-stream - -A stream of blocks. - -Write data into it, and it'll output data in buffer blocks the size you -specify, padding with zeroes if necessary. - -```javascript -var block = new BlockStream(512) -fs.createReadStream("some-file").pipe(block) -block.pipe(fs.createWriteStream("block-file")) -``` - -When `.end()` or `.flush()` is called, it'll pad the block with zeroes. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream-pause.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream-pause.js deleted file mode 100644 index 9328844a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream-pause.js +++ /dev/null @@ -1,70 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - f.pause() - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - f.resume() - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream.js deleted file mode 100644 index 1141f3a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper-pause.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper-pause.js deleted file mode 100644 index 93e4068e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper-pause.js +++ /dev/null @@ -1,70 +0,0 @@ -var BlockStream = require("dropper") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - f.pause() - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - f.resume() - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper.js deleted file mode 100644 index 55fa1330..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("dropper") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/block-stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/block-stream.js deleted file mode 100644 index 008de035..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/block-stream.js +++ /dev/null @@ -1,209 +0,0 @@ -// write data to it, and it'll emit data in 512 byte blocks. -// if you .end() or .flush(), it'll emit whatever it's got, -// padded with nulls to 512 bytes. - -module.exports = BlockStream - -var Stream = require("stream").Stream - , inherits = require("inherits") - , assert = require("assert").ok - , debug = process.env.DEBUG ? console.error : function () {} - -function BlockStream (size, opt) { - this.writable = this.readable = true - this._opt = opt || {} - this._chunkSize = size || 512 - this._offset = 0 - this._buffer = [] - this._bufferLength = 0 - if (this._opt.nopad) this._zeroes = false - else { - this._zeroes = new Buffer(this._chunkSize) - for (var i = 0; i < this._chunkSize; i ++) { - this._zeroes[i] = 0 - } - } -} - -inherits(BlockStream, Stream) - -BlockStream.prototype.write = function (c) { - // debug(" BS write", c) - if (this._ended) throw new Error("BlockStream: write after end") - if (c && !Buffer.isBuffer(c)) c = new Buffer(c + "") - if (c.length) { - this._buffer.push(c) - this._bufferLength += c.length - } - // debug("pushed onto buffer", this._bufferLength) - if (this._bufferLength >= this._chunkSize) { - if (this._paused) { - // debug(" BS paused, return false, need drain") - this._needDrain = true - return false - } - this._emitChunk() - } - return true -} - -BlockStream.prototype.pause = function () { - // debug(" BS pausing") - this._paused = true -} - -BlockStream.prototype.resume = function () { - // debug(" BS resume") - this._paused = false - return this._emitChunk() -} - -BlockStream.prototype.end = function (chunk) { - // debug("end", chunk) - if (typeof chunk === "function") cb = chunk, chunk = null - if (chunk) this.write(chunk) - this._ended = true - this.flush() -} - -BlockStream.prototype.flush = function () { - this._emitChunk(true) -} - -BlockStream.prototype._emitChunk = function (flush) { - // debug("emitChunk flush=%j emitting=%j paused=%j", flush, this._emitting, this._paused) - - // emit a <chunkSize> chunk - if (flush && this._zeroes) { - // debug(" BS push zeroes", this._bufferLength) - // push a chunk of zeroes - var padBytes = (this._bufferLength % this._chunkSize) - if (padBytes !== 0) padBytes = this._chunkSize - padBytes - if (padBytes > 0) { - // debug("padBytes", padBytes, this._zeroes.slice(0, padBytes)) - this._buffer.push(this._zeroes.slice(0, padBytes)) - this._bufferLength += padBytes - // debug(this._buffer[this._buffer.length - 1].length, this._bufferLength) - } - } - - if (this._emitting || this._paused) return - this._emitting = true - - // debug(" BS entering loops") - var bufferIndex = 0 - while (this._bufferLength >= this._chunkSize && - (flush || !this._paused)) { - // debug(" BS data emission loop", this._bufferLength) - - var out - , outOffset = 0 - , outHas = this._chunkSize - - while (outHas > 0 && (flush || !this._paused) ) { - // debug(" BS data inner emit loop", this._bufferLength) - var cur = this._buffer[bufferIndex] - , curHas = cur.length - this._offset - // debug("cur=", cur) - // debug("curHas=%j", curHas) - // If it's not big enough to fill the whole thing, then we'll need - // to copy multiple buffers into one. However, if it is big enough, - // then just slice out the part we want, to save unnecessary copying. - // Also, need to copy if we've already done some copying, since buffers - // can't be joined like cons strings. - if (out || curHas < outHas) { - out = out || new Buffer(this._chunkSize) - cur.copy(out, outOffset, - this._offset, this._offset + Math.min(curHas, outHas)) - } else if (cur.length === outHas && this._offset === 0) { - // shortcut -- cur is exactly long enough, and no offset. - out = cur - } else { - // slice out the piece of cur that we need. - out = cur.slice(this._offset, this._offset + outHas) - } - - if (curHas > outHas) { - // means that the current buffer couldn't be completely output - // update this._offset to reflect how much WAS written - this._offset += outHas - outHas = 0 - } else { - // output the entire current chunk. - // toss it away - outHas -= curHas - outOffset += curHas - bufferIndex ++ - this._offset = 0 - } - } - - this._bufferLength -= this._chunkSize - assert(out.length === this._chunkSize) - // debug("emitting data", out) - // debug(" BS emitting, paused=%j", this._paused, this._bufferLength) - this.emit("data", out) - out = null - } - // debug(" BS out of loops", this._bufferLength) - - // whatever is left, it's not enough to fill up a block, or we're paused - this._buffer = this._buffer.slice(bufferIndex) - if (this._paused) { - // debug(" BS paused, leaving", this._bufferLength) - this._needsDrain = true - this._emitting = false - return - } - - // if flushing, and not using null-padding, then need to emit the last - // chunk(s) sitting in the queue. We know that it's not enough to - // fill up a whole block, because otherwise it would have been emitted - // above, but there may be some offset. - var l = this._buffer.length - if (flush && !this._zeroes && l) { - if (l === 1) { - if (this._offset) { - this.emit("data", this._buffer[0].slice(this._offset)) - } else { - this.emit("data", this._buffer[0]) - } - } else { - var outHas = this._bufferLength - , out = new Buffer(outHas) - , outOffset = 0 - for (var i = 0; i < l; i ++) { - var cur = this._buffer[i] - , curHas = cur.length - this._offset - cur.copy(out, outOffset, this._offset) - this._offset = 0 - outOffset += curHas - this._bufferLength -= curHas - } - this.emit("data", out) - } - // truncate - this._buffer.length = 0 - this._bufferLength = 0 - this._offset = 0 - } - - // now either drained or ended - // debug("either draining, or ended", this._bufferLength, this._ended) - // means that we've flushed out all that we can so far. - if (this._needDrain) { - // debug("emitting drain", this._bufferLength) - this._needDrain = false - this.emit("drain") - } - - if ((this._bufferLength === 0) && this._ended && !this._endEmitted) { - // debug("emitting end", this._bufferLength) - this._endEmitted = true - this.emit("end") - } - - this._emitting = false - - // debug(" BS no longer emitting", flush, this._paused, this._emitting, this._bufferLength, this._chunkSize) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/package.json deleted file mode 100644 index a9dec954..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "block-stream", - "description": "a stream of blocks", - "version": "0.0.7", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/block-stream.git" - }, - "engines": { - "node": "0.4 || >=0.5.8" - }, - "main": "block-stream.js", - "dependencies": { - "inherits": "~2.0.0" - }, - "devDependencies": { - "tap": "0.x" - }, - "scripts": { - "test": "tap test/" - }, - "license": "BSD", - "readme": "# block-stream\n\nA stream of blocks.\n\nWrite data into it, and it'll output data in buffer blocks the size you\nspecify, padding with zeroes if necessary.\n\n```javascript\nvar block = new BlockStream(512)\nfs.createReadStream(\"some-file\").pipe(block)\nblock.pipe(fs.createWriteStream(\"block-file\"))\n```\n\nWhen `.end()` or `.flush()` is called, it'll pad the block with zeroes.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/block-stream/issues" - }, - "homepage": "https://github.com/isaacs/block-stream", - "_id": "block-stream@0.0.7", - "dist": { - "shasum": "f02594aed4110922c417d5d634b45e55a4ffaefd" - }, - "_from": "block-stream@*", - "_resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/basic.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/basic.js deleted file mode 100644 index b4b93051..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/basic.js +++ /dev/null @@ -1,27 +0,0 @@ -var tap = require("tap") - , BlockStream = require("../block-stream.js") - -tap.test("basic test", function (t) { - var b = new BlockStream(16) - var fs = require("fs") - var fstr = fs.createReadStream(__filename, {encoding: "utf8"}) - fstr.pipe(b) - - var stat - t.doesNotThrow(function () { - stat = fs.statSync(__filename) - }, "stat should not throw") - - var totalBytes = 0 - b.on("data", function (c) { - t.equal(c.length, 16, "chunks should be 16 bytes long") - t.type(c, Buffer, "chunks should be buffer objects") - totalBytes += c.length - }) - b.on("end", function () { - var expectedBytes = stat.size + (16 - stat.size % 16) - t.equal(totalBytes, expectedBytes, "Should be multiple of 16") - t.end() - }) - -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad-thorough.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad-thorough.js deleted file mode 100644 index 7a8de88b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad-thorough.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16]//, 25]//, 1024] - , writeSizes = [4, 15, 16, 17, 64 ]//, 64, 100] - , writeCounts = [1, 10]//, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad.js deleted file mode 100644 index 6d38429f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad.js +++ /dev/null @@ -1,57 +0,0 @@ -var BlockStream = require("../") -var tap = require("tap") - - -tap.test("don't pad, small writes", function (t) { - var f = new BlockStream(16, { nopad: true }) - t.plan(1) - - f.on("data", function (c) { - t.equal(c.toString(), "abc", "should get 'abc'") - }) - - f.on("end", function () { t.end() }) - - f.write(new Buffer("a")) - f.write(new Buffer("b")) - f.write(new Buffer("c")) - f.end() -}) - -tap.test("don't pad, exact write", function (t) { - var f = new BlockStream(16, { nopad: true }) - t.plan(1) - - var first = true - f.on("data", function (c) { - if (first) { - first = false - t.equal(c.toString(), "abcdefghijklmnop", "first chunk") - } else { - t.fail("should only get one") - } - }) - - f.on("end", function () { t.end() }) - - f.end(new Buffer("abcdefghijklmnop")) -}) - -tap.test("don't pad, big write", function (t) { - var f = new BlockStream(16, { nopad: true }) - t.plan(2) - - var first = true - f.on("data", function (c) { - if (first) { - first = false - t.equal(c.toString(), "abcdefghijklmnop", "first chunk") - } else { - t.equal(c.toString(), "q") - } - }) - - f.on("end", function () { t.end() }) - - f.end(new Buffer("abcdefghijklmnopq")) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/pause-resume.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/pause-resume.js deleted file mode 100644 index 64d0d091..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/pause-resume.js +++ /dev/null @@ -1,73 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16] - , writeSizes = [15, 16, 17] - , writeCounts = [1, 10]//, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - var paused = false - - f.on("data", function (c) { - timeouts ++ - t.notOk(paused, "should not be paused when emitting data") - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - paused = true - f.pause() - process.nextTick(function () { - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - paused = false - f.resume() - timeouts -- - }) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = expectChunks * blockSize - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 200) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/thorough.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/thorough.js deleted file mode 100644 index 1cc9ea08..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/thorough.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16]//, 25]//, 1024] - , writeSizes = [4, 15, 16, 17, 64 ]//, 64, 100] - , writeCounts = [1, 10]//, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = expectChunks * blockSize - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/two-stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/two-stream.js deleted file mode 100644 index c6db79a4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/two-stream.js +++ /dev/null @@ -1,59 +0,0 @@ -var log = console.log, - assert = require( 'assert' ), - BlockStream = require("../block-stream.js"), - isize = 0, tsize = 0, fsize = 0, psize = 0, i = 0, - filter = null, paper = null, stack = null, - -// a source data buffer -tsize = 1 * 1024; // <- 1K -stack = new Buffer( tsize ); -for ( ; i < tsize; i++) stack[i] = "x".charCodeAt(0); - -isize = 1 * 1024; // <- initial packet size with 4K no bug! -fsize = 2 * 1024 ; // <- first block-stream size -psize = Math.ceil( isize / 6 ); // <- second block-stream size - -fexpected = Math.ceil( tsize / fsize ); // <- packets expected for first -pexpected = Math.ceil( tsize / psize ); // <- packets expected for second - - -filter = new BlockStream( fsize, { nopad : true } ); -paper = new BlockStream( psize, { nopad : true } ); - - -var fcounter = 0; -filter.on( 'data', function (c) { - // verify that they're not null-padded - for (var i = 0; i < c.length; i ++) { - assert.strictEqual(c[i], "x".charCodeAt(0)) - } - ++fcounter; -} ); - -var pcounter = 0; -paper.on( 'data', function (c) { - // verify that they're not null-padded - for (var i = 0; i < c.length; i ++) { - assert.strictEqual(c[i], "x".charCodeAt(0)) - } - ++pcounter; -} ); - -filter.pipe( paper ); - -filter.on( 'end', function () { - log("fcounter: %s === %s", fcounter, fexpected) - assert.strictEqual( fcounter, fexpected ); -} ); - -paper.on( 'end', function () { - log("pcounter: %s === %s", pcounter, pexpected); - assert.strictEqual( pcounter, pexpected ); -} ); - - -for ( i = 0, j = isize; j <= tsize; j += isize ) { - filter.write( stack.slice( j - isize, j ) ); -} - -filter.end(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.npmignore deleted file mode 100644 index 494272a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -.*.swp -node_modules/ -examples/deep-copy/ -examples/path/ -examples/filter-copy/ diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.travis.yml deleted file mode 100644 index 2d26206d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.6 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/README.md deleted file mode 100644 index 9d8cb77e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/README.md +++ /dev/null @@ -1,76 +0,0 @@ -Like FS streams, but with stat on them, and supporting directories and -symbolic links, as well as normal files. Also, you can use this to set -the stats on a file, even if you don't change its contents, or to create -a symlink, etc. - -So, for example, you can "write" a directory, and it'll call `mkdir`. You -can specify a uid and gid, and it'll call `chown`. You can specify a -`mtime` and `atime`, and it'll call `utimes`. You can call it a symlink -and provide a `linkpath` and it'll call `symlink`. - -Note that it won't automatically resolve symbolic links. So, if you -call `fstream.Reader('/some/symlink')` then you'll get an object -that stats and then ends immediately (since it has no data). To follow -symbolic links, do this: `fstream.Reader({path:'/some/symlink', follow: -true })`. - -There are various checks to make sure that the bytes emitted are the -same as the intended size, if the size is set. - -## Examples - -```javascript -fstream - .Writer({ path: "path/to/file" - , mode: 0755 - , size: 6 - }) - .write("hello\n") - .end() -``` - -This will create the directories if they're missing, and then write -`hello\n` into the file, chmod it to 0755, and assert that 6 bytes have -been written when it's done. - -```javascript -fstream - .Writer({ path: "path/to/file" - , mode: 0755 - , size: 6 - , flags: "a" - }) - .write("hello\n") - .end() -``` - -You can pass flags in, if you want to append to a file. - -```javascript -fstream - .Writer({ path: "path/to/symlink" - , linkpath: "./file" - , SymbolicLink: true - , mode: "0755" // octal strings supported - }) - .end() -``` - -If isSymbolicLink is a function, it'll be called, and if it returns -true, then it'll treat it as a symlink. If it's not a function, then -any truish value will make a symlink, or you can set `type: -'SymbolicLink'`, which does the same thing. - -Note that the linkpath is relative to the symbolic link location, not -the parent dir or cwd. - -```javascript -fstream - .Reader("path/to/dir") - .pipe(fstream.Writer("path/to/other/dir")) -``` - -This will do like `cp -Rp path/to/dir path/to/other/dir`. If the other -dir exists and isn't a directory, then it'll emit an error. It'll also -set the uid, gid, mode, etc. to be identical. In this way, it's more -like `rsync -a` than simply a copy. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/filter-pipe.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/filter-pipe.js deleted file mode 100644 index c6b55b3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/filter-pipe.js +++ /dev/null @@ -1,131 +0,0 @@ -var fstream = require("../fstream.js") -var path = require("path") - -var r = fstream.Reader({ path: path.dirname(__dirname) - , filter: function () { - return !this.basename.match(/^\./) && - !this.basename.match(/^node_modules$/) - !this.basename.match(/^deep-copy$/) - !this.basename.match(/^filter-copy$/) - } - }) - -// this writer will only write directories -var w = fstream.Writer({ path: path.resolve(__dirname, "filter-copy") - , type: "Directory" - , filter: function () { - return this.type === "Directory" - } - }) - -var indent = "" -var escape = {} - -r.on("entry", appears) -r.on("ready", function () { - console.error("ready to begin!", r.path) -}) - -function appears (entry) { - console.error(indent + "a %s appears!", entry.type, entry.basename, typeof entry.basename) - if (foggy) { - console.error("FOGGY!") - var p = entry - do { - console.error(p.depth, p.path, p._paused) - } while (p = p.parent) - - throw new Error("\033[mshould not have entries while foggy") - } - indent += "\t" - entry.on("data", missile(entry)) - entry.on("end", runaway(entry)) - entry.on("entry", appears) -} - -var foggy -function missile (entry) { - if (entry.type === "Directory") { - var ended = false - entry.once("end", function () { ended = true }) - return function (c) { - // throw in some pathological pause()/resume() behavior - // just for extra fun. - process.nextTick(function () { - if (!foggy && !ended) { // && Math.random() < 0.3) { - console.error(indent +"%s casts a spell", entry.basename) - console.error("\na slowing fog comes over the battlefield...\n\033[32m") - entry.pause() - entry.once("resume", liftFog) - foggy = setTimeout(liftFog, 1000) - - function liftFog (who) { - if (!foggy) return - if (who) { - console.error("%s breaks the spell!", who && who.path) - } else { - console.error("the spell expires!") - } - console.error("\033[mthe fog lifts!\n") - clearTimeout(foggy) - foggy = null - if (entry._paused) entry.resume() - } - - } - }) - } - } - - return function (c) { - var e = Math.random() < 0.5 - console.error(indent + "%s %s for %d damage!", - entry.basename, - e ? "is struck" : "fires a chunk", - c.length) - } -} - -function runaway (entry) { return function () { - var e = Math.random() < 0.5 - console.error(indent + "%s %s", - entry.basename, - e ? "turns to flee" : "is vanquished!") - indent = indent.slice(0, -1) -}} - - -w.on("entry", attacks) -//w.on("ready", function () { attacks(w) }) -function attacks (entry) { - console.error(indent + "%s %s!", entry.basename, - entry.type === "Directory" ? "calls for backup" : "attacks") - entry.on("entry", attacks) -} - -ended = false -var i = 1 -r.on("end", function () { - if (foggy) clearTimeout(foggy) - console.error("\033[mIT'S OVER!!") - console.error("A WINNAR IS YOU!") - - console.log("ok " + (i ++) + " A WINNAR IS YOU") - ended = true - // now go through and verify that everything in there is a dir. - var p = path.resolve(__dirname, "filter-copy") - var checker = fstream.Reader({ path: p }) - checker.checker = true - checker.on("child", function (e) { - var ok = e.type === "Directory" - console.log((ok ? "" : "not ") + "ok " + (i ++) + - " should be a dir: " + - e.path.substr(checker.path.length + 1)) - }) -}) - -process.on("exit", function () { - console.log((ended ? "" : "not ") + "ok " + (i ++) + " ended") -}) - -r.pipe(w) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/pipe.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/pipe.js deleted file mode 100644 index 648ec849..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/pipe.js +++ /dev/null @@ -1,115 +0,0 @@ -var fstream = require("../fstream.js") -var path = require("path") - -var r = fstream.Reader({ path: path.dirname(__dirname) - , filter: function () { - return !this.basename.match(/^\./) && - !this.basename.match(/^node_modules$/) - !this.basename.match(/^deep-copy$/) - } - }) - -var w = fstream.Writer({ path: path.resolve(__dirname, "deep-copy") - , type: "Directory" - }) - -var indent = "" -var escape = {} - -r.on("entry", appears) -r.on("ready", function () { - console.error("ready to begin!", r.path) -}) - -function appears (entry) { - console.error(indent + "a %s appears!", entry.type, entry.basename, typeof entry.basename, entry) - if (foggy) { - console.error("FOGGY!") - var p = entry - do { - console.error(p.depth, p.path, p._paused) - } while (p = p.parent) - - throw new Error("\033[mshould not have entries while foggy") - } - indent += "\t" - entry.on("data", missile(entry)) - entry.on("end", runaway(entry)) - entry.on("entry", appears) -} - -var foggy -function missile (entry) { - if (entry.type === "Directory") { - var ended = false - entry.once("end", function () { ended = true }) - return function (c) { - // throw in some pathological pause()/resume() behavior - // just for extra fun. - process.nextTick(function () { - if (!foggy && !ended) { // && Math.random() < 0.3) { - console.error(indent +"%s casts a spell", entry.basename) - console.error("\na slowing fog comes over the battlefield...\n\033[32m") - entry.pause() - entry.once("resume", liftFog) - foggy = setTimeout(liftFog, 10) - - function liftFog (who) { - if (!foggy) return - if (who) { - console.error("%s breaks the spell!", who && who.path) - } else { - console.error("the spell expires!") - } - console.error("\033[mthe fog lifts!\n") - clearTimeout(foggy) - foggy = null - if (entry._paused) entry.resume() - } - - } - }) - } - } - - return function (c) { - var e = Math.random() < 0.5 - console.error(indent + "%s %s for %d damage!", - entry.basename, - e ? "is struck" : "fires a chunk", - c.length) - } -} - -function runaway (entry) { return function () { - var e = Math.random() < 0.5 - console.error(indent + "%s %s", - entry.basename, - e ? "turns to flee" : "is vanquished!") - indent = indent.slice(0, -1) -}} - - -w.on("entry", attacks) -//w.on("ready", function () { attacks(w) }) -function attacks (entry) { - console.error(indent + "%s %s!", entry.basename, - entry.type === "Directory" ? "calls for backup" : "attacks") - entry.on("entry", attacks) -} - -ended = false -r.on("end", function () { - if (foggy) clearTimeout(foggy) - console.error("\033[mIT'S OVER!!") - console.error("A WINNAR IS YOU!") - - console.log("ok 1 A WINNAR IS YOU") - ended = true -}) - -process.on("exit", function () { - console.log((ended ? "" : "not ") + "ok 2 ended") -}) - -r.pipe(w) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/reader.js deleted file mode 100644 index 9aa1a953..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/reader.js +++ /dev/null @@ -1,54 +0,0 @@ -var fstream = require("../fstream.js") -var tap = require("tap") -var fs = require("fs") -var path = require("path") -var children = -1 -var dir = path.dirname(__dirname) - -var gotReady = false -var ended = false - -tap.test("reader test", function (t) { - - var r = fstream.Reader({ path: dir - , filter: function () { - // return this.parent === r - return this.parent === r || this === r - } - }) - - r.on("ready", function () { - gotReady = true - children = fs.readdirSync(dir).length - console.error("Setting expected children to "+children) - t.equal(r.type, "Directory", "should be a directory") - }) - - r.on("entry", function (entry) { - children -- - if (!gotReady) { - t.fail("children before ready!") - } - t.equal(entry.dirname, r.path, "basename is parent dir") - }) - - r.on("error", function (er) { - t.fail(er) - t.end() - process.exit(1) - }) - - r.on("end", function () { - t.equal(children, 0, "should have seen all children") - ended = true - }) - - var closed = false - r.on("close", function () { - t.ok(ended, "saw end before close") - t.notOk(closed, "close should only happen once") - closed = true - t.end() - }) - -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/symlink-write.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/symlink-write.js deleted file mode 100644 index d7816d24..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/symlink-write.js +++ /dev/null @@ -1,24 +0,0 @@ -var fstream = require("../fstream.js") - , closed = false - -fstream - .Writer({ path: "path/to/symlink" - , linkpath: "./file" - , isSymbolicLink: true - , mode: "0755" // octal strings supported - }) - .on("close", function () { - closed = true - var fs = require("fs") - var s = fs.lstatSync("path/to/symlink") - var isSym = s.isSymbolicLink() - console.log((isSym?"":"not ") +"ok 1 should be symlink") - var t = fs.readlinkSync("path/to/symlink") - var isTarget = t === "./file" - console.log((isTarget?"":"not ") +"ok 2 should link to ./file") - }) - .end() - -process.on("exit", function () { - console.log((closed?"":"not ")+"ok 3 should be closed") -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/fstream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/fstream.js deleted file mode 100644 index c66d26f5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/fstream.js +++ /dev/null @@ -1,31 +0,0 @@ -exports.Abstract = require("./lib/abstract.js") -exports.Reader = require("./lib/reader.js") -exports.Writer = require("./lib/writer.js") - -exports.File = - { Reader: require("./lib/file-reader.js") - , Writer: require("./lib/file-writer.js") } - -exports.Dir = - { Reader : require("./lib/dir-reader.js") - , Writer : require("./lib/dir-writer.js") } - -exports.Link = - { Reader : require("./lib/link-reader.js") - , Writer : require("./lib/link-writer.js") } - -exports.Proxy = - { Reader : require("./lib/proxy-reader.js") - , Writer : require("./lib/proxy-writer.js") } - -exports.Reader.Dir = exports.DirReader = exports.Dir.Reader -exports.Reader.File = exports.FileReader = exports.File.Reader -exports.Reader.Link = exports.LinkReader = exports.Link.Reader -exports.Reader.Proxy = exports.ProxyReader = exports.Proxy.Reader - -exports.Writer.Dir = exports.DirWriter = exports.Dir.Writer -exports.Writer.File = exports.FileWriter = exports.File.Writer -exports.Writer.Link = exports.LinkWriter = exports.Link.Writer -exports.Writer.Proxy = exports.ProxyWriter = exports.Proxy.Writer - -exports.collect = require("./lib/collect.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/abstract.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/abstract.js deleted file mode 100644 index 11ef0e28..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/abstract.js +++ /dev/null @@ -1,85 +0,0 @@ -// the parent class for all fstreams. - -module.exports = Abstract - -var Stream = require("stream").Stream - , inherits = require("inherits") - -function Abstract () { - Stream.call(this) -} - -inherits(Abstract, Stream) - -Abstract.prototype.on = function (ev, fn) { - if (ev === "ready" && this.ready) { - process.nextTick(fn.bind(this)) - } else { - Stream.prototype.on.call(this, ev, fn) - } - return this -} - -Abstract.prototype.abort = function () { - this._aborted = true - this.emit("abort") -} - -Abstract.prototype.destroy = function () {} - -Abstract.prototype.warn = function (msg, code) { - var me = this - , er = decorate(msg, code, me) - if (!me.listeners("warn")) { - console.error("%s %s\n" + - "path = %s\n" + - "syscall = %s\n" + - "fstream_type = %s\n" + - "fstream_path = %s\n" + - "fstream_unc_path = %s\n" + - "fstream_class = %s\n" + - "fstream_stack =\n%s\n", - code || "UNKNOWN", - er.stack, - er.path, - er.syscall, - er.fstream_type, - er.fstream_path, - er.fstream_unc_path, - er.fstream_class, - er.fstream_stack.join("\n")) - } else { - me.emit("warn", er) - } -} - -Abstract.prototype.info = function (msg, code) { - this.emit("info", msg, code) -} - -Abstract.prototype.error = function (msg, code, th) { - var er = decorate(msg, code, this) - if (th) throw er - else this.emit("error", er) -} - -function decorate (er, code, me) { - if (!(er instanceof Error)) er = new Error(er) - er.code = er.code || code - er.path = er.path || me.path - er.fstream_type = er.fstream_type || me.type - er.fstream_path = er.fstream_path || me.path - if (me._path !== me.path) { - er.fstream_unc_path = er.fstream_unc_path || me._path - } - if (me.linkpath) { - er.fstream_linkpath = er.fstream_linkpath || me.linkpath - } - er.fstream_class = er.fstream_class || me.constructor.name - er.fstream_stack = er.fstream_stack || - new Error().stack.split(/\n/).slice(3).map(function (s) { - return s.replace(/^ at /, "") - }) - - return er -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/collect.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/collect.js deleted file mode 100644 index a36f780e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/collect.js +++ /dev/null @@ -1,67 +0,0 @@ -module.exports = collect - -function collect (stream) { - if (stream._collected) return - - stream._collected = true - stream.pause() - - stream.on("data", save) - stream.on("end", save) - var buf = [] - function save (b) { - if (typeof b === "string") b = new Buffer(b) - if (Buffer.isBuffer(b) && !b.length) return - buf.push(b) - } - - stream.on("entry", saveEntry) - var entryBuffer = [] - function saveEntry (e) { - collect(e) - entryBuffer.push(e) - } - - stream.on("proxy", proxyPause) - function proxyPause (p) { - p.pause() - } - - - // replace the pipe method with a new version that will - // unlock the buffered stuff. if you just call .pipe() - // without a destination, then it'll re-play the events. - stream.pipe = (function (orig) { return function (dest) { - // console.error(" === open the pipes", dest && dest.path) - - // let the entries flow through one at a time. - // Once they're all done, then we can resume completely. - var e = 0 - ;(function unblockEntry () { - var entry = entryBuffer[e++] - // console.error(" ==== unblock entry", entry && entry.path) - if (!entry) return resume() - entry.on("end", unblockEntry) - if (dest) dest.add(entry) - else stream.emit("entry", entry) - })() - - function resume () { - stream.removeListener("entry", saveEntry) - stream.removeListener("data", save) - stream.removeListener("end", save) - - stream.pipe = orig - if (dest) stream.pipe(dest) - - buf.forEach(function (b) { - if (b) stream.emit("data", b) - else stream.emit("end") - }) - - stream.resume() - } - - return dest - }})(stream.pipe) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-reader.js deleted file mode 100644 index 346ac2b8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-reader.js +++ /dev/null @@ -1,251 +0,0 @@ -// A thing that emits "entry" events with Reader objects -// Pausing it causes it to stop emitting entry events, and also -// pauses the current entry if there is one. - -module.exports = DirReader - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , Reader = fstream.Reader - , inherits = require("inherits") - , mkdir = require("mkdirp") - , path = require("path") - , Reader = require("./reader.js") - , assert = require("assert").ok - -inherits(DirReader, Reader) - -function DirReader (props) { - var me = this - if (!(me instanceof DirReader)) throw new Error( - "DirReader must be called as constructor.") - - // should already be established as a Directory type - if (props.type !== "Directory" || !props.Directory) { - throw new Error("Non-directory type "+ props.type) - } - - me.entries = null - me._index = -1 - me._paused = false - me._length = -1 - - if (props.sort) { - this.sort = props.sort - } - - Reader.call(this, props) -} - -DirReader.prototype._getEntries = function () { - var me = this - - // race condition. might pause() before calling _getEntries, - // and then resume, and try to get them a second time. - if (me._gotEntries) return - me._gotEntries = true - - fs.readdir(me._path, function (er, entries) { - if (er) return me.error(er) - - me.entries = entries - - me.emit("entries", entries) - if (me._paused) me.once("resume", processEntries) - else processEntries() - - function processEntries () { - me._length = me.entries.length - if (typeof me.sort === "function") { - me.entries = me.entries.sort(me.sort.bind(me)) - } - me._read() - } - }) -} - -// start walking the dir, and emit an "entry" event for each one. -DirReader.prototype._read = function () { - var me = this - - if (!me.entries) return me._getEntries() - - if (me._paused || me._currentEntry || me._aborted) { - // console.error("DR paused=%j, current=%j, aborted=%j", me._paused, !!me._currentEntry, me._aborted) - return - } - - me._index ++ - if (me._index >= me.entries.length) { - if (!me._ended) { - me._ended = true - me.emit("end") - me.emit("close") - } - return - } - - // ok, handle this one, then. - - // save creating a proxy, by stat'ing the thing now. - var p = path.resolve(me._path, me.entries[me._index]) - assert(p !== me._path) - assert(me.entries[me._index]) - - // set this to prevent trying to _read() again in the stat time. - me._currentEntry = p - fs[ me.props.follow ? "stat" : "lstat" ](p, function (er, stat) { - if (er) return me.error(er) - - var who = me._proxy || me - - stat.path = p - stat.basename = path.basename(p) - stat.dirname = path.dirname(p) - var childProps = me.getChildProps.call(who, stat) - childProps.path = p - childProps.basename = path.basename(p) - childProps.dirname = path.dirname(p) - - var entry = Reader(childProps, stat) - - // console.error("DR Entry", p, stat.size) - - me._currentEntry = entry - - // "entry" events are for direct entries in a specific dir. - // "child" events are for any and all children at all levels. - // This nomenclature is not completely final. - - entry.on("pause", function (who) { - if (!me._paused && !entry._disowned) { - me.pause(who) - } - }) - - entry.on("resume", function (who) { - if (me._paused && !entry._disowned) { - me.resume(who) - } - }) - - entry.on("stat", function (props) { - me.emit("_entryStat", entry, props) - if (entry._aborted) return - if (entry._paused) entry.once("resume", function () { - me.emit("entryStat", entry, props) - }) - else me.emit("entryStat", entry, props) - }) - - entry.on("ready", function EMITCHILD () { - // console.error("DR emit child", entry._path) - if (me._paused) { - // console.error(" DR emit child - try again later") - // pause the child, and emit the "entry" event once we drain. - // console.error("DR pausing child entry") - entry.pause(me) - return me.once("resume", EMITCHILD) - } - - // skip over sockets. they can't be piped around properly, - // so there's really no sense even acknowledging them. - // if someone really wants to see them, they can listen to - // the "socket" events. - if (entry.type === "Socket") { - me.emit("socket", entry) - } else { - me.emitEntry(entry) - } - }) - - var ended = false - entry.on("close", onend) - entry.on("disown", onend) - function onend () { - if (ended) return - ended = true - me.emit("childEnd", entry) - me.emit("entryEnd", entry) - me._currentEntry = null - if (!me._paused) { - me._read() - } - } - - // XXX Remove this. Works in node as of 0.6.2 or so. - // Long filenames should not break stuff. - entry.on("error", function (er) { - if (entry._swallowErrors) { - me.warn(er) - entry.emit("end") - entry.emit("close") - } else { - me.emit("error", er) - } - }) - - // proxy up some events. - ; [ "child" - , "childEnd" - , "warn" - ].forEach(function (ev) { - entry.on(ev, me.emit.bind(me, ev)) - }) - }) -} - -DirReader.prototype.disown = function (entry) { - entry.emit("beforeDisown") - entry._disowned = true - entry.parent = entry.root = null - if (entry === this._currentEntry) { - this._currentEntry = null - } - entry.emit("disown") -} - -DirReader.prototype.getChildProps = function (stat) { - return { depth: this.depth + 1 - , root: this.root || this - , parent: this - , follow: this.follow - , filter: this.filter - , sort: this.props.sort - , hardlinks: this.props.hardlinks - } -} - -DirReader.prototype.pause = function (who) { - var me = this - if (me._paused) return - who = who || me - me._paused = true - if (me._currentEntry && me._currentEntry.pause) { - me._currentEntry.pause(who) - } - me.emit("pause", who) -} - -DirReader.prototype.resume = function (who) { - var me = this - if (!me._paused) return - who = who || me - - me._paused = false - // console.error("DR Emit Resume", me._path) - me.emit("resume", who) - if (me._paused) { - // console.error("DR Re-paused", me._path) - return - } - - if (me._currentEntry) { - if (me._currentEntry.resume) me._currentEntry.resume(who) - } else me._read() -} - -DirReader.prototype.emitEntry = function (entry) { - this.emit("entry", entry) - this.emit("child", entry) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-writer.js deleted file mode 100644 index 7073b883..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-writer.js +++ /dev/null @@ -1,171 +0,0 @@ -// It is expected that, when .add() returns false, the consumer -// of the DirWriter will pause until a "drain" event occurs. Note -// that this is *almost always going to be the case*, unless the -// thing being written is some sort of unsupported type, and thus -// skipped over. - -module.exports = DirWriter - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , Writer = require("./writer.js") - , inherits = require("inherits") - , mkdir = require("mkdirp") - , path = require("path") - , collect = require("./collect.js") - -inherits(DirWriter, Writer) - -function DirWriter (props) { - var me = this - if (!(me instanceof DirWriter)) me.error( - "DirWriter must be called as constructor.", null, true) - - // should already be established as a Directory type - if (props.type !== "Directory" || !props.Directory) { - me.error("Non-directory type "+ props.type + " " + - JSON.stringify(props), null, true) - } - - Writer.call(this, props) -} - -DirWriter.prototype._create = function () { - var me = this - mkdir(me._path, Writer.dirmode, function (er) { - if (er) return me.error(er) - // ready to start getting entries! - me.ready = true - me.emit("ready") - me._process() - }) -} - -// a DirWriter has an add(entry) method, but its .write() doesn't -// do anything. Why a no-op rather than a throw? Because this -// leaves open the door for writing directory metadata for -// gnu/solaris style dumpdirs. -DirWriter.prototype.write = function () { - return true -} - -DirWriter.prototype.end = function () { - this._ended = true - this._process() -} - -DirWriter.prototype.add = function (entry) { - var me = this - - // console.error("\tadd", entry._path, "->", me._path) - collect(entry) - if (!me.ready || me._currentEntry) { - me._buffer.push(entry) - return false - } - - // create a new writer, and pipe the incoming entry into it. - if (me._ended) { - return me.error("add after end") - } - - me._buffer.push(entry) - me._process() - - return 0 === this._buffer.length -} - -DirWriter.prototype._process = function () { - var me = this - - // console.error("DW Process p=%j", me._processing, me.basename) - - if (me._processing) return - - var entry = me._buffer.shift() - if (!entry) { - // console.error("DW Drain") - me.emit("drain") - if (me._ended) me._finish() - return - } - - me._processing = true - // console.error("DW Entry", entry._path) - - me.emit("entry", entry) - - // ok, add this entry - // - // don't allow recursive copying - var p = entry - do { - var pp = p._path || p.path - if (pp === me.root._path || pp === me._path || - (pp && pp.indexOf(me._path) === 0)) { - // console.error("DW Exit (recursive)", entry.basename, me._path) - me._processing = false - if (entry._collected) entry.pipe() - return me._process() - } - } while (p = p.parent) - - // console.error("DW not recursive") - - // chop off the entry's root dir, replace with ours - var props = { parent: me - , root: me.root || me - , type: entry.type - , depth: me.depth + 1 } - - var p = entry._path || entry.path || entry.props.path - if (entry.parent) { - p = p.substr(entry.parent._path.length + 1) - } - // get rid of any ../../ shenanigans - props.path = path.join(me.path, path.join("/", p)) - - // if i have a filter, the child should inherit it. - props.filter = me.filter - - // all the rest of the stuff, copy over from the source. - Object.keys(entry.props).forEach(function (k) { - if (!props.hasOwnProperty(k)) { - props[k] = entry.props[k] - } - }) - - // not sure at this point what kind of writer this is. - var child = me._currentChild = new Writer(props) - child.on("ready", function () { - // console.error("DW Child Ready", child.type, child._path) - // console.error(" resuming", entry._path) - entry.pipe(child) - entry.resume() - }) - - // XXX Make this work in node. - // Long filenames should not break stuff. - child.on("error", function (er) { - if (child._swallowErrors) { - me.warn(er) - child.emit("end") - child.emit("close") - } else { - me.emit("error", er) - } - }) - - // we fire _end internally *after* end, so that we don't move on - // until any "end" listeners have had their chance to do stuff. - child.on("close", onend) - var ended = false - function onend () { - if (ended) return - ended = true - // console.error("* DW Child end", child.basename) - me._currentChild = null - me._processing = false - me._process() - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-reader.js deleted file mode 100644 index b1f98618..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-reader.js +++ /dev/null @@ -1,147 +0,0 @@ -// Basically just a wrapper around an fs.ReadStream - -module.exports = FileReader - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , Reader = fstream.Reader - , inherits = require("inherits") - , mkdir = require("mkdirp") - , Reader = require("./reader.js") - , EOF = {EOF: true} - , CLOSE = {CLOSE: true} - -inherits(FileReader, Reader) - -function FileReader (props) { - // console.error(" FR create", props.path, props.size, new Error().stack) - var me = this - if (!(me instanceof FileReader)) throw new Error( - "FileReader must be called as constructor.") - - // should already be established as a File type - // XXX Todo: preserve hardlinks by tracking dev+inode+nlink, - // with a HardLinkReader class. - if (!((props.type === "Link" && props.Link) || - (props.type === "File" && props.File))) { - throw new Error("Non-file type "+ props.type) - } - - me._buffer = [] - me._bytesEmitted = 0 - Reader.call(me, props) -} - -FileReader.prototype._getStream = function () { - var me = this - , stream = me._stream = fs.createReadStream(me._path, me.props) - - if (me.props.blksize) { - stream.bufferSize = me.props.blksize - } - - stream.on("open", me.emit.bind(me, "open")) - - stream.on("data", function (c) { - // console.error("\t\t%d %s", c.length, me.basename) - me._bytesEmitted += c.length - // no point saving empty chunks - if (!c.length) return - else if (me._paused || me._buffer.length) { - me._buffer.push(c) - me._read() - } else me.emit("data", c) - }) - - stream.on("end", function () { - if (me._paused || me._buffer.length) { - // console.error("FR Buffering End", me._path) - me._buffer.push(EOF) - me._read() - } else { - me.emit("end") - } - - if (me._bytesEmitted !== me.props.size) { - me.error("Didn't get expected byte count\n"+ - "expect: "+me.props.size + "\n" + - "actual: "+me._bytesEmitted) - } - }) - - stream.on("close", function () { - if (me._paused || me._buffer.length) { - // console.error("FR Buffering Close", me._path) - me._buffer.push(CLOSE) - me._read() - } else { - // console.error("FR close 1", me._path) - me.emit("close") - } - }) - - me._read() -} - -FileReader.prototype._read = function () { - var me = this - // console.error("FR _read", me._path) - if (me._paused) { - // console.error("FR _read paused", me._path) - return - } - - if (!me._stream) { - // console.error("FR _getStream calling", me._path) - return me._getStream() - } - - // clear out the buffer, if there is one. - if (me._buffer.length) { - // console.error("FR _read has buffer", me._buffer.length, me._path) - var buf = me._buffer - for (var i = 0, l = buf.length; i < l; i ++) { - var c = buf[i] - if (c === EOF) { - // console.error("FR Read emitting buffered end", me._path) - me.emit("end") - } else if (c === CLOSE) { - // console.error("FR Read emitting buffered close", me._path) - me.emit("close") - } else { - // console.error("FR Read emitting buffered data", me._path) - me.emit("data", c) - } - - if (me._paused) { - // console.error("FR Read Re-pausing at "+i, me._path) - me._buffer = buf.slice(i) - return - } - } - me._buffer.length = 0 - } - // console.error("FR _read done") - // that's about all there is to it. -} - -FileReader.prototype.pause = function (who) { - var me = this - // console.error("FR Pause", me._path) - if (me._paused) return - who = who || me - me._paused = true - if (me._stream) me._stream.pause() - me.emit("pause", who) -} - -FileReader.prototype.resume = function (who) { - var me = this - // console.error("FR Resume", me._path) - if (!me._paused) return - who = who || me - me.emit("resume", who) - me._paused = false - if (me._stream) me._stream.resume() - me._read() -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-writer.js deleted file mode 100644 index 68114625..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-writer.js +++ /dev/null @@ -1,100 +0,0 @@ -module.exports = FileWriter - -var fs = require("graceful-fs") - , mkdir = require("mkdirp") - , Writer = require("./writer.js") - , inherits = require("inherits") - , EOF = {} - -inherits(FileWriter, Writer) - -function FileWriter (props) { - var me = this - if (!(me instanceof FileWriter)) throw new Error( - "FileWriter must be called as constructor.") - - // should already be established as a File type - if (props.type !== "File" || !props.File) { - throw new Error("Non-file type "+ props.type) - } - - me._buffer = [] - me._bytesWritten = 0 - - Writer.call(this, props) -} - -FileWriter.prototype._create = function () { - var me = this - if (me._stream) return - - var so = {} - if (me.props.flags) so.flags = me.props.flags - so.mode = Writer.filemode - if (me._old && me._old.blksize) so.bufferSize = me._old.blksize - - me._stream = fs.createWriteStream(me._path, so) - - me._stream.on("open", function (fd) { - // console.error("FW open", me._buffer, me._path) - me.ready = true - me._buffer.forEach(function (c) { - if (c === EOF) me._stream.end() - else me._stream.write(c) - }) - me.emit("ready") - // give this a kick just in case it needs it. - me.emit("drain") - }) - - me._stream.on("drain", function () { me.emit("drain") }) - - me._stream.on("close", function () { - // console.error("\n\nFW Stream Close", me._path, me.size) - me._finish() - }) -} - -FileWriter.prototype.write = function (c) { - var me = this - - me._bytesWritten += c.length - - if (!me.ready) { - if (!Buffer.isBuffer(c) && typeof c !== 'string') - throw new Error('invalid write data') - me._buffer.push(c) - return false - } - - var ret = me._stream.write(c) - // console.error("\t-- fw wrote, _stream says", ret, me._stream._queue.length) - - // allow 2 buffered writes, because otherwise there's just too - // much stop and go bs. - return ret || (me._stream._queue && me._stream._queue.length <= 2) -} - -FileWriter.prototype.end = function (c) { - var me = this - - if (c) me.write(c) - - if (!me.ready) { - me._buffer.push(EOF) - return false - } - - return me._stream.end() -} - -FileWriter.prototype._finish = function () { - var me = this - if (typeof me.size === "number" && me._bytesWritten != me.size) { - me.error( - "Did not get expected byte count.\n" + - "expect: " + me.size + "\n" + - "actual: " + me._bytesWritten) - } - Writer.prototype._finish.call(me) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/get-type.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/get-type.js deleted file mode 100644 index cd65c41d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/get-type.js +++ /dev/null @@ -1,32 +0,0 @@ -module.exports = getType - -function getType (st) { - var types = - [ "Directory" - , "File" - , "SymbolicLink" - , "Link" // special for hardlinks from tarballs - , "BlockDevice" - , "CharacterDevice" - , "FIFO" - , "Socket" ] - , type - - if (st.type && -1 !== types.indexOf(st.type)) { - st[st.type] = true - return st.type - } - - for (var i = 0, l = types.length; i < l; i ++) { - type = types[i] - var is = st[type] || st["is" + type] - if (typeof is === "function") is = is.call(st) - if (is) { - st[type] = true - st.type = type - return type - } - } - - return null -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-reader.js deleted file mode 100644 index 7e7ab6ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-reader.js +++ /dev/null @@ -1,54 +0,0 @@ -// Basically just a wrapper around an fs.readlink -// -// XXX: Enhance this to support the Link type, by keeping -// a lookup table of {<dev+inode>:<path>}, so that hardlinks -// can be preserved in tarballs. - -module.exports = LinkReader - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , inherits = require("inherits") - , mkdir = require("mkdirp") - , Reader = require("./reader.js") - -inherits(LinkReader, Reader) - -function LinkReader (props) { - var me = this - if (!(me instanceof LinkReader)) throw new Error( - "LinkReader must be called as constructor.") - - if (!((props.type === "Link" && props.Link) || - (props.type === "SymbolicLink" && props.SymbolicLink))) { - throw new Error("Non-link type "+ props.type) - } - - Reader.call(me, props) -} - -// When piping a LinkReader into a LinkWriter, we have to -// already have the linkpath property set, so that has to -// happen *before* the "ready" event, which means we need to -// override the _stat method. -LinkReader.prototype._stat = function (currentStat) { - var me = this - fs.readlink(me._path, function (er, linkpath) { - if (er) return me.error(er) - me.linkpath = me.props.linkpath = linkpath - me.emit("linkpath", linkpath) - Reader.prototype._stat.call(me, currentStat) - }) -} - -LinkReader.prototype._read = function () { - var me = this - if (me._paused) return - // basically just a no-op, since we got all the info we need - // from the _stat method - if (!me._ended) { - me.emit("end") - me.emit("close") - me._ended = true - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-writer.js deleted file mode 100644 index 5c8f1e70..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-writer.js +++ /dev/null @@ -1,95 +0,0 @@ - -module.exports = LinkWriter - -var fs = require("graceful-fs") - , Writer = require("./writer.js") - , inherits = require("inherits") - , path = require("path") - , rimraf = require("rimraf") - -inherits(LinkWriter, Writer) - -function LinkWriter (props) { - var me = this - if (!(me instanceof LinkWriter)) throw new Error( - "LinkWriter must be called as constructor.") - - // should already be established as a Link type - if (!((props.type === "Link" && props.Link) || - (props.type === "SymbolicLink" && props.SymbolicLink))) { - throw new Error("Non-link type "+ props.type) - } - - if (props.linkpath === "") props.linkpath = "." - if (!props.linkpath) { - me.error("Need linkpath property to create " + props.type) - } - - Writer.call(this, props) -} - -LinkWriter.prototype._create = function () { - // console.error(" LW _create") - var me = this - , hard = me.type === "Link" || process.platform === "win32" - , link = hard ? "link" : "symlink" - , lp = hard ? path.resolve(me.dirname, me.linkpath) : me.linkpath - - // can only change the link path by clobbering - // For hard links, let's just assume that's always the case, since - // there's no good way to read them if we don't already know. - if (hard) return clobber(me, lp, link) - - fs.readlink(me._path, function (er, p) { - // only skip creation if it's exactly the same link - if (p && p === lp) return finish(me) - clobber(me, lp, link) - }) -} - -function clobber (me, lp, link) { - rimraf(me._path, function (er) { - if (er) return me.error(er) - create(me, lp, link) - }) -} - -function create (me, lp, link) { - fs[link](lp, me._path, function (er) { - // if this is a hard link, and we're in the process of writing out a - // directory, it's very possible that the thing we're linking to - // doesn't exist yet (especially if it was intended as a symlink), - // so swallow ENOENT errors here and just soldier in. - // Additionally, an EPERM or EACCES can happen on win32 if it's trying - // to make a link to a directory. Again, just skip it. - // A better solution would be to have fs.symlink be supported on - // windows in some nice fashion. - if (er) { - if ((er.code === "ENOENT" || - er.code === "EACCES" || - er.code === "EPERM" ) && process.platform === "win32") { - me.ready = true - me.emit("ready") - me.emit("end") - me.emit("close") - me.end = me._finish = function () {} - } else return me.error(er) - } - finish(me) - }) -} - -function finish (me) { - me.ready = true - me.emit("ready") - if (me._ended && !me._finished) me._finish() -} - -LinkWriter.prototype.end = function () { - // console.error("LW finish in end") - this._ended = true - if (this.ready) { - this._finished = true - this._finish() - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-reader.js deleted file mode 100644 index a0ece34a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-reader.js +++ /dev/null @@ -1,93 +0,0 @@ -// A reader for when we don't yet know what kind of thing -// the thing is. - -module.exports = ProxyReader - -var Reader = require("./reader.js") - , getType = require("./get-type.js") - , inherits = require("inherits") - , fs = require("graceful-fs") - -inherits(ProxyReader, Reader) - -function ProxyReader (props) { - var me = this - if (!(me instanceof ProxyReader)) throw new Error( - "ProxyReader must be called as constructor.") - - me.props = props - me._buffer = [] - me.ready = false - - Reader.call(me, props) -} - -ProxyReader.prototype._stat = function () { - var me = this - , props = me.props - // stat the thing to see what the proxy should be. - , stat = props.follow ? "stat" : "lstat" - - fs[stat](props.path, function (er, current) { - var type - if (er || !current) { - type = "File" - } else { - type = getType(current) - } - - props[type] = true - props.type = me.type = type - - me._old = current - me._addProxy(Reader(props, current)) - }) -} - -ProxyReader.prototype._addProxy = function (proxy) { - var me = this - if (me._proxyTarget) { - return me.error("proxy already set") - } - - me._proxyTarget = proxy - proxy._proxy = me - - ; [ "error" - , "data" - , "end" - , "close" - , "linkpath" - , "entry" - , "entryEnd" - , "child" - , "childEnd" - , "warn" - , "stat" - ].forEach(function (ev) { - // console.error("~~ proxy event", ev, me.path) - proxy.on(ev, me.emit.bind(me, ev)) - }) - - me.emit("proxy", proxy) - - proxy.on("ready", function () { - // console.error("~~ proxy is ready!", me.path) - me.ready = true - me.emit("ready") - }) - - var calls = me._buffer - me._buffer.length = 0 - calls.forEach(function (c) { - proxy[c[0]].apply(proxy, c[1]) - }) -} - -ProxyReader.prototype.pause = function () { - return this._proxyTarget ? this._proxyTarget.pause() : false -} - -ProxyReader.prototype.resume = function () { - return this._proxyTarget ? this._proxyTarget.resume() : false -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-writer.js deleted file mode 100644 index b0476633..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-writer.js +++ /dev/null @@ -1,109 +0,0 @@ -// A writer for when we don't know what kind of thing -// the thing is. That is, it's not explicitly set, -// so we're going to make it whatever the thing already -// is, or "File" -// -// Until then, collect all events. - -module.exports = ProxyWriter - -var Writer = require("./writer.js") - , getType = require("./get-type.js") - , inherits = require("inherits") - , collect = require("./collect.js") - , fs = require("fs") - -inherits(ProxyWriter, Writer) - -function ProxyWriter (props) { - var me = this - if (!(me instanceof ProxyWriter)) throw new Error( - "ProxyWriter must be called as constructor.") - - me.props = props - me._needDrain = false - - Writer.call(me, props) -} - -ProxyWriter.prototype._stat = function () { - var me = this - , props = me.props - // stat the thing to see what the proxy should be. - , stat = props.follow ? "stat" : "lstat" - - fs[stat](props.path, function (er, current) { - var type - if (er || !current) { - type = "File" - } else { - type = getType(current) - } - - props[type] = true - props.type = me.type = type - - me._old = current - me._addProxy(Writer(props, current)) - }) -} - -ProxyWriter.prototype._addProxy = function (proxy) { - // console.error("~~ set proxy", this.path) - var me = this - if (me._proxy) { - return me.error("proxy already set") - } - - me._proxy = proxy - ; [ "ready" - , "error" - , "close" - , "pipe" - , "drain" - , "warn" - ].forEach(function (ev) { - proxy.on(ev, me.emit.bind(me, ev)) - }) - - me.emit("proxy", proxy) - - var calls = me._buffer - calls.forEach(function (c) { - // console.error("~~ ~~ proxy buffered call", c[0], c[1]) - proxy[c[0]].apply(proxy, c[1]) - }) - me._buffer.length = 0 - if (me._needsDrain) me.emit("drain") -} - -ProxyWriter.prototype.add = function (entry) { - // console.error("~~ proxy add") - collect(entry) - - if (!this._proxy) { - this._buffer.push(["add", [entry]]) - this._needDrain = true - return false - } - return this._proxy.add(entry) -} - -ProxyWriter.prototype.write = function (c) { - // console.error("~~ proxy write") - if (!this._proxy) { - this._buffer.push(["write", [c]]) - this._needDrain = true - return false - } - return this._proxy.write(c) -} - -ProxyWriter.prototype.end = function (c) { - // console.error("~~ proxy end") - if (!this._proxy) { - this._buffer.push(["end", [c]]) - return false - } - return this._proxy.end(c) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/reader.js deleted file mode 100644 index eaf921cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/reader.js +++ /dev/null @@ -1,260 +0,0 @@ - -module.exports = Reader - -var fs = require("graceful-fs") - , Stream = require("stream").Stream - , inherits = require("inherits") - , path = require("path") - , getType = require("./get-type.js") - , hardLinks = Reader.hardLinks = {} - , Abstract = require("./abstract.js") - -// Must do this *before* loading the child classes -inherits(Reader, Abstract) - -var DirReader = require("./dir-reader.js") - , FileReader = require("./file-reader.js") - , LinkReader = require("./link-reader.js") - , SocketReader = require("./socket-reader.js") - , ProxyReader = require("./proxy-reader.js") - -function Reader (props, currentStat) { - var me = this - if (!(me instanceof Reader)) return new Reader(props, currentStat) - - if (typeof props === "string") { - props = { path: props } - } - - if (!props.path) { - me.error("Must provide a path", null, true) - } - - // polymorphism. - // call fstream.Reader(dir) to get a DirReader object, etc. - // Note that, unlike in the Writer case, ProxyReader is going - // to be the *normal* state of affairs, since we rarely know - // the type of a file prior to reading it. - - - var type - , ClassType - - if (props.type && typeof props.type === "function") { - type = props.type - ClassType = type - } else { - type = getType(props) - ClassType = Reader - } - - if (currentStat && !type) { - type = getType(currentStat) - props[type] = true - props.type = type - } - - switch (type) { - case "Directory": - ClassType = DirReader - break - - case "Link": - // XXX hard links are just files. - // However, it would be good to keep track of files' dev+inode - // and nlink values, and create a HardLinkReader that emits - // a linkpath value of the original copy, so that the tar - // writer can preserve them. - // ClassType = HardLinkReader - // break - - case "File": - ClassType = FileReader - break - - case "SymbolicLink": - ClassType = LinkReader - break - - case "Socket": - ClassType = SocketReader - break - - case null: - ClassType = ProxyReader - break - } - - if (!(me instanceof ClassType)) { - return new ClassType(props) - } - - Abstract.call(me) - - me.readable = true - me.writable = false - - me.type = type - me.props = props - me.depth = props.depth = props.depth || 0 - me.parent = props.parent || null - me.root = props.root || (props.parent && props.parent.root) || me - - me._path = me.path = path.resolve(props.path) - if (process.platform === "win32") { - me.path = me._path = me.path.replace(/\?/g, "_") - if (me._path.length >= 260) { - // how DOES one create files on the moon? - // if the path has spaces in it, then UNC will fail. - me._swallowErrors = true - //if (me._path.indexOf(" ") === -1) { - me._path = "\\\\?\\" + me.path.replace(/\//g, "\\") - //} - } - } - me.basename = props.basename = path.basename(me.path) - me.dirname = props.dirname = path.dirname(me.path) - - // these have served their purpose, and are now just noisy clutter - props.parent = props.root = null - - // console.error("\n\n\n%s setting size to", props.path, props.size) - me.size = props.size - me.filter = typeof props.filter === "function" ? props.filter : null - if (props.sort === "alpha") props.sort = alphasort - - // start the ball rolling. - // this will stat the thing, and then call me._read() - // to start reading whatever it is. - // console.error("calling stat", props.path, currentStat) - me._stat(currentStat) -} - -function alphasort (a, b) { - return a === b ? 0 - : a.toLowerCase() > b.toLowerCase() ? 1 - : a.toLowerCase() < b.toLowerCase() ? -1 - : a > b ? 1 - : -1 -} - -Reader.prototype._stat = function (currentStat) { - var me = this - , props = me.props - , stat = props.follow ? "stat" : "lstat" - // console.error("Reader._stat", me._path, currentStat) - if (currentStat) process.nextTick(statCb.bind(null, null, currentStat)) - else fs[stat](me._path, statCb) - - - function statCb (er, props_) { - // console.error("Reader._stat, statCb", me._path, props_, props_.nlink) - if (er) return me.error(er) - - Object.keys(props_).forEach(function (k) { - props[k] = props_[k] - }) - - // if it's not the expected size, then abort here. - if (undefined !== me.size && props.size !== me.size) { - return me.error("incorrect size") - } - me.size = props.size - - var type = getType(props) - var handleHardlinks = props.hardlinks !== false - - // special little thing for handling hardlinks. - if (handleHardlinks && type !== "Directory" && props.nlink && props.nlink > 1) { - var k = props.dev + ":" + props.ino - // console.error("Reader has nlink", me._path, k) - if (hardLinks[k] === me._path || !hardLinks[k]) hardLinks[k] = me._path - else { - // switch into hardlink mode. - type = me.type = me.props.type = "Link" - me.Link = me.props.Link = true - me.linkpath = me.props.linkpath = hardLinks[k] - // console.error("Hardlink detected, switching mode", me._path, me.linkpath) - // Setting __proto__ would arguably be the "correct" - // approach here, but that just seems too wrong. - me._stat = me._read = LinkReader.prototype._read - } - } - - if (me.type && me.type !== type) { - me.error("Unexpected type: " + type) - } - - // if the filter doesn't pass, then just skip over this one. - // still have to emit end so that dir-walking can move on. - if (me.filter) { - var who = me._proxy || me - // special handling for ProxyReaders - if (!me.filter.call(who, who, props)) { - if (!me._disowned) { - me.abort() - me.emit("end") - me.emit("close") - } - return - } - } - - // last chance to abort or disown before the flow starts! - var events = ["_stat", "stat", "ready"] - var e = 0 - ;(function go () { - if (me._aborted) { - me.emit("end") - me.emit("close") - return - } - - if (me._paused) { - me.once("resume", go) - return - } - - var ev = events[e ++] - if (!ev) return me._read() - me.emit(ev, props) - go() - })() - } -} - -Reader.prototype.pipe = function (dest, opts) { - var me = this - if (typeof dest.add === "function") { - // piping to a multi-compatible, and we've got directory entries. - me.on("entry", function (entry) { - var ret = dest.add(entry) - if (false === ret) { - me.pause() - } - }) - } - - // console.error("R Pipe apply Stream Pipe") - return Stream.prototype.pipe.apply(this, arguments) -} - -Reader.prototype.pause = function (who) { - this._paused = true - who = who || this - this.emit("pause", who) - if (this._stream) this._stream.pause(who) -} - -Reader.prototype.resume = function (who) { - this._paused = false - who = who || this - this.emit("resume", who) - if (this._stream) this._stream.resume(who) - this._read() -} - -Reader.prototype._read = function () { - this.error("Cannot read unknown type: "+this.type) -} - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/socket-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/socket-reader.js deleted file mode 100644 index e89c1731..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/socket-reader.js +++ /dev/null @@ -1,38 +0,0 @@ -// Just get the stats, and then don't do anything. -// You can't really "read" from a socket. You "connect" to it. -// Mostly, this is here so that reading a dir with a socket in it -// doesn't blow up. - -module.exports = SocketReader - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , inherits = require("inherits") - , mkdir = require("mkdirp") - , Reader = require("./reader.js") - -inherits(SocketReader, Reader) - -function SocketReader (props) { - var me = this - if (!(me instanceof SocketReader)) throw new Error( - "SocketReader must be called as constructor.") - - if (!(props.type === "Socket" && props.Socket)) { - throw new Error("Non-socket type "+ props.type) - } - - Reader.call(me, props) -} - -SocketReader.prototype._read = function () { - var me = this - if (me._paused) return - // basically just a no-op, since we got all the info we have - // from the _stat method - if (!me._ended) { - me.emit("end") - me.emit("close") - me._ended = true - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/writer.js deleted file mode 100644 index 5599fb22..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/writer.js +++ /dev/null @@ -1,389 +0,0 @@ - -module.exports = Writer - -var fs = require("graceful-fs") - , inherits = require("inherits") - , rimraf = require("rimraf") - , mkdir = require("mkdirp") - , path = require("path") - , umask = process.platform === "win32" ? 0 : process.umask() - , getType = require("./get-type.js") - , Abstract = require("./abstract.js") - -// Must do this *before* loading the child classes -inherits(Writer, Abstract) - -Writer.dirmode = 0777 & (~umask) -Writer.filemode = 0666 & (~umask) - -var DirWriter = require("./dir-writer.js") - , LinkWriter = require("./link-writer.js") - , FileWriter = require("./file-writer.js") - , ProxyWriter = require("./proxy-writer.js") - -// props is the desired state. current is optionally the current stat, -// provided here so that subclasses can avoid statting the target -// more than necessary. -function Writer (props, current) { - var me = this - - if (typeof props === "string") { - props = { path: props } - } - - if (!props.path) me.error("Must provide a path", null, true) - - // polymorphism. - // call fstream.Writer(dir) to get a DirWriter object, etc. - var type = getType(props) - , ClassType = Writer - - switch (type) { - case "Directory": - ClassType = DirWriter - break - case "File": - ClassType = FileWriter - break - case "Link": - case "SymbolicLink": - ClassType = LinkWriter - break - case null: - // Don't know yet what type to create, so we wrap in a proxy. - ClassType = ProxyWriter - break - } - - if (!(me instanceof ClassType)) return new ClassType(props) - - // now get down to business. - - Abstract.call(me) - - // props is what we want to set. - // set some convenience properties as well. - me.type = props.type - me.props = props - me.depth = props.depth || 0 - me.clobber = false === props.clobber ? props.clobber : true - me.parent = props.parent || null - me.root = props.root || (props.parent && props.parent.root) || me - - me._path = me.path = path.resolve(props.path) - if (process.platform === "win32") { - me.path = me._path = me.path.replace(/\?/g, "_") - if (me._path.length >= 260) { - me._swallowErrors = true - me._path = "\\\\?\\" + me.path.replace(/\//g, "\\") - } - } - me.basename = path.basename(props.path) - me.dirname = path.dirname(props.path) - me.linkpath = props.linkpath || null - - props.parent = props.root = null - - // console.error("\n\n\n%s setting size to", props.path, props.size) - me.size = props.size - - if (typeof props.mode === "string") { - props.mode = parseInt(props.mode, 8) - } - - me.readable = false - me.writable = true - - // buffer until ready, or while handling another entry - me._buffer = [] - me.ready = false - - me.filter = typeof props.filter === "function" ? props.filter: null - - // start the ball rolling. - // this checks what's there already, and then calls - // me._create() to call the impl-specific creation stuff. - me._stat(current) -} - -// Calling this means that it's something we can't create. -// Just assert that it's already there, otherwise raise a warning. -Writer.prototype._create = function () { - var me = this - fs[me.props.follow ? "stat" : "lstat"](me._path, function (er, current) { - if (er) { - return me.warn("Cannot create " + me._path + "\n" + - "Unsupported type: "+me.type, "ENOTSUP") - } - me._finish() - }) -} - -Writer.prototype._stat = function (current) { - var me = this - , props = me.props - , stat = props.follow ? "stat" : "lstat" - , who = me._proxy || me - - if (current) statCb(null, current) - else fs[stat](me._path, statCb) - - function statCb (er, current) { - if (me.filter && !me.filter.call(who, who, current)) { - me._aborted = true - me.emit("end") - me.emit("close") - return - } - - // if it's not there, great. We'll just create it. - // if it is there, then we'll need to change whatever differs - if (er || !current) { - return create(me) - } - - me._old = current - var currentType = getType(current) - - // if it's a type change, then we need to clobber or error. - // if it's not a type change, then let the impl take care of it. - if (currentType !== me.type) { - return rimraf(me._path, function (er) { - if (er) return me.error(er) - me._old = null - create(me) - }) - } - - // otherwise, just handle in the app-specific way - // this creates a fs.WriteStream, or mkdir's, or whatever - create(me) - } -} - -function create (me) { - // console.error("W create", me._path, Writer.dirmode) - - // XXX Need to clobber non-dirs that are in the way, - // unless { clobber: false } in the props. - mkdir(path.dirname(me._path), Writer.dirmode, function (er, made) { - // console.error("W created", path.dirname(me._path), er) - if (er) return me.error(er) - - // later on, we have to set the mode and owner for these - me._madeDir = made - return me._create() - }) -} - -function endChmod (me, want, current, path, cb) { - var wantMode = want.mode - , chmod = want.follow || me.type !== "SymbolicLink" - ? "chmod" : "lchmod" - - if (!fs[chmod]) return cb() - if (typeof wantMode !== "number") return cb() - - var curMode = current.mode & 0777 - wantMode = wantMode & 0777 - if (wantMode === curMode) return cb() - - fs[chmod](path, wantMode, cb) -} - - -function endChown (me, want, current, path, cb) { - // Don't even try it unless root. Too easy to EPERM. - if (process.platform === "win32") return cb() - if (!process.getuid || !process.getuid() === 0) return cb() - if (typeof want.uid !== "number" && - typeof want.gid !== "number" ) return cb() - - if (current.uid === want.uid && - current.gid === want.gid) return cb() - - var chown = (me.props.follow || me.type !== "SymbolicLink") - ? "chown" : "lchown" - if (!fs[chown]) return cb() - - if (typeof want.uid !== "number") want.uid = current.uid - if (typeof want.gid !== "number") want.gid = current.gid - - fs[chown](path, want.uid, want.gid, cb) -} - -function endUtimes (me, want, current, path, cb) { - if (!fs.utimes || process.platform === "win32") return cb() - - var utimes = (want.follow || me.type !== "SymbolicLink") - ? "utimes" : "lutimes" - - if (utimes === "lutimes" && !fs[utimes]) { - utimes = "utimes" - } - - if (!fs[utimes]) return cb() - - var curA = current.atime - , curM = current.mtime - , meA = want.atime - , meM = want.mtime - - if (meA === undefined) meA = curA - if (meM === undefined) meM = curM - - if (!isDate(meA)) meA = new Date(meA) - if (!isDate(meM)) meA = new Date(meM) - - if (meA.getTime() === curA.getTime() && - meM.getTime() === curM.getTime()) return cb() - - fs[utimes](path, meA, meM, cb) -} - - -// XXX This function is beastly. Break it up! -Writer.prototype._finish = function () { - var me = this - - // console.error(" W Finish", me._path, me.size) - - // set up all the things. - // At this point, we're already done writing whatever we've gotta write, - // adding files to the dir, etc. - var todo = 0 - var errState = null - var done = false - - if (me._old) { - // the times will almost *certainly* have changed. - // adds the utimes syscall, but remove another stat. - me._old.atime = new Date(0) - me._old.mtime = new Date(0) - // console.error(" W Finish Stale Stat", me._path, me.size) - setProps(me._old) - } else { - var stat = me.props.follow ? "stat" : "lstat" - // console.error(" W Finish Stating", me._path, me.size) - fs[stat](me._path, function (er, current) { - // console.error(" W Finish Stated", me._path, me.size, current) - if (er) { - // if we're in the process of writing out a - // directory, it's very possible that the thing we're linking to - // doesn't exist yet (especially if it was intended as a symlink), - // so swallow ENOENT errors here and just soldier on. - if (er.code === "ENOENT" && - (me.type === "Link" || me.type === "SymbolicLink") && - process.platform === "win32") { - me.ready = true - me.emit("ready") - me.emit("end") - me.emit("close") - me.end = me._finish = function () {} - return - } else return me.error(er) - } - setProps(me._old = current) - }) - } - - return - - function setProps (current) { - todo += 3 - endChmod(me, me.props, current, me._path, next("chmod")) - endChown(me, me.props, current, me._path, next("chown")) - endUtimes(me, me.props, current, me._path, next("utimes")) - } - - function next (what) { - return function (er) { - // console.error(" W Finish", what, todo) - if (errState) return - if (er) { - er.fstream_finish_call = what - return me.error(errState = er) - } - if (--todo > 0) return - if (done) return - done = true - - // we may still need to set the mode/etc. on some parent dirs - // that were created previously. delay end/close until then. - if (!me._madeDir) return end() - else endMadeDir(me, me._path, end) - - function end (er) { - if (er) { - er.fstream_finish_call = "setupMadeDir" - return me.error(er) - } - // all the props have been set, so we're completely done. - me.emit("end") - me.emit("close") - } - } - } -} - -function endMadeDir (me, p, cb) { - var made = me._madeDir - // everything *between* made and path.dirname(me._path) - // needs to be set up. Note that this may just be one dir. - var d = path.dirname(p) - - endMadeDir_(me, d, function (er) { - if (er) return cb(er) - if (d === made) { - return cb() - } - endMadeDir(me, d, cb) - }) -} - -function endMadeDir_ (me, p, cb) { - var dirProps = {} - Object.keys(me.props).forEach(function (k) { - dirProps[k] = me.props[k] - - // only make non-readable dirs if explicitly requested. - if (k === "mode" && me.type !== "Directory") { - dirProps[k] = dirProps[k] | 0111 - } - }) - - var todo = 3 - , errState = null - fs.stat(p, function (er, current) { - if (er) return cb(errState = er) - endChmod(me, dirProps, current, p, next) - endChown(me, dirProps, current, p, next) - endUtimes(me, dirProps, current, p, next) - }) - - function next (er) { - if (errState) return - if (er) return cb(errState = er) - if (-- todo === 0) return cb() - } -} - -Writer.prototype.pipe = function () { - this.error("Can't pipe from writable stream") -} - -Writer.prototype.add = function () { - this.error("Cannot add to non-Directory type") -} - -Writer.prototype.write = function () { - return true -} - -function objectToString (d) { - return Object.prototype.toString.call(d) -} - -function isDate(d) { - return typeof d === 'object' && objectToString(d) === '[object Date]'; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/package.json deleted file mode 100644 index c3b07d0a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "fstream", - "description": "Advanced file system stream things", - "version": "0.1.25", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/fstream.git" - }, - "main": "fstream.js", - "engines": { - "node": ">=0.6" - }, - "dependencies": { - "rimraf": "2", - "mkdirp": "0.3", - "graceful-fs": "~2.0.0", - "inherits": "~2.0.0" - }, - "devDependencies": { - "tap": "" - }, - "scripts": { - "test": "tap examples/*.js" - }, - "license": "BSD", - "readme": "Like FS streams, but with stat on them, and supporting directories and\nsymbolic links, as well as normal files. Also, you can use this to set\nthe stats on a file, even if you don't change its contents, or to create\na symlink, etc.\n\nSo, for example, you can \"write\" a directory, and it'll call `mkdir`. You\ncan specify a uid and gid, and it'll call `chown`. You can specify a\n`mtime` and `atime`, and it'll call `utimes`. You can call it a symlink\nand provide a `linkpath` and it'll call `symlink`.\n\nNote that it won't automatically resolve symbolic links. So, if you\ncall `fstream.Reader('/some/symlink')` then you'll get an object\nthat stats and then ends immediately (since it has no data). To follow\nsymbolic links, do this: `fstream.Reader({path:'/some/symlink', follow:\ntrue })`.\n\nThere are various checks to make sure that the bytes emitted are the\nsame as the intended size, if the size is set.\n\n## Examples\n\n```javascript\nfstream\n .Writer({ path: \"path/to/file\"\n , mode: 0755\n , size: 6\n })\n .write(\"hello\\n\")\n .end()\n```\n\nThis will create the directories if they're missing, and then write\n`hello\\n` into the file, chmod it to 0755, and assert that 6 bytes have\nbeen written when it's done.\n\n```javascript\nfstream\n .Writer({ path: \"path/to/file\"\n , mode: 0755\n , size: 6\n , flags: \"a\"\n })\n .write(\"hello\\n\")\n .end()\n```\n\nYou can pass flags in, if you want to append to a file.\n\n```javascript\nfstream\n .Writer({ path: \"path/to/symlink\"\n , linkpath: \"./file\"\n , SymbolicLink: true\n , mode: \"0755\" // octal strings supported\n })\n .end()\n```\n\nIf isSymbolicLink is a function, it'll be called, and if it returns\ntrue, then it'll treat it as a symlink. If it's not a function, then\nany truish value will make a symlink, or you can set `type:\n'SymbolicLink'`, which does the same thing.\n\nNote that the linkpath is relative to the symbolic link location, not\nthe parent dir or cwd.\n\n```javascript\nfstream\n .Reader(\"path/to/dir\")\n .pipe(fstream.Writer(\"path/to/other/dir\"))\n```\n\nThis will do like `cp -Rp path/to/dir path/to/other/dir`. If the other\ndir exists and isn't a directory, then it'll emit an error. It'll also\nset the uid, gid, mode, etc. to be identical. In this way, it's more\nlike `rsync -a` than simply a copy.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/fstream/issues" - }, - "homepage": "https://github.com/isaacs/fstream", - "_id": "fstream@0.1.25", - "dist": { - "shasum": "cca977eec0cdc5382161b2feeeb567d5f95783b0" - }, - "_from": "fstream@~0.1.8", - "_resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.25.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/LICENSE deleted file mode 100644 index dea3013d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/README.md deleted file mode 100644 index b1c56658..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/README.md +++ /dev/null @@ -1,42 +0,0 @@ -Browser-friendly inheritance fully compatible with standard node.js -[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). - -This package exports standard `inherits` from node.js `util` module in -node environment, but also provides alternative browser-friendly -implementation through [browser -field](https://gist.github.com/shtylman/4339901). Alternative -implementation is a literal copy of standard one located in standalone -module to avoid requiring of `util`. It also has a shim for old -browsers with no `Object.create` support. - -While keeping you sure you are using standard `inherits` -implementation in node.js environment, it allows bundlers such as -[browserify](https://github.com/substack/node-browserify) to not -include full `util` package to your client code if all you need is -just `inherits` function. It worth, because browser shim for `util` -package is large and `inherits` is often the single function you need -from it. - -It's recommended to use this package instead of -`require('util').inherits` for any code that has chances to be used -not only in node.js but in browser too. - -## usage - -```js -var inherits = require('inherits'); -// then use exactly as the standard one -``` - -## note on version ~1.0 - -Version ~1.0 had completely different motivation and is not compatible -neither with 2.0 nor with standard node.js `inherits`. - -If you are using version ~1.0 and planning to switch to ~2.0, be -careful: - -* new version uses `super_` instead of `super` for referencing - superclass -* new version overwrites current prototype while old one preserves any - existing fields on it diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits.js deleted file mode 100644 index 29f5e24f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('util').inherits diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits_browser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits_browser.js deleted file mode 100644 index c1e78a75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits_browser.js +++ /dev/null @@ -1,23 +0,0 @@ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/package.json deleted file mode 100644 index 8b3b563d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "inherits", - "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", - "version": "2.0.1", - "keywords": [ - "inheritance", - "class", - "klass", - "oop", - "object-oriented", - "inherits", - "browser", - "browserify" - ], - "main": "./inherits.js", - "browser": "./inherits_browser.js", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/inherits" - }, - "license": "ISC", - "scripts": { - "test": "node test" - }, - "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n superclass\n* new version overwrites current prototype while old one preserves any\n existing fields on it\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/inherits/issues" - }, - "homepage": "https://github.com/isaacs/inherits", - "_id": "inherits@2.0.1", - "dist": { - "shasum": "b084742f5bd8d0e2e285cb3a8957f7e733389ef2" - }, - "_from": "inherits@2", - "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/test.js deleted file mode 100644 index fc53012d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/test.js +++ /dev/null @@ -1,25 +0,0 @@ -var inherits = require('./inherits.js') -var assert = require('assert') - -function test(c) { - assert(c.constructor === Child) - assert(c.constructor.super_ === Parent) - assert(Object.getPrototypeOf(c) === Child.prototype) - assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype) - assert(c instanceof Child) - assert(c instanceof Parent) -} - -function Child() { - Parent.call(this) - test(this) -} - -function Parent() {} - -inherits(Child, Parent) - -var c = new Child -test(c) - -console.log('ok') diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/package.json deleted file mode 100644 index fd335461..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "tar", - "description": "tar for node", - "version": "0.1.19", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-tar.git" - }, - "main": "tar.js", - "scripts": { - "test": "tap test/*.js" - }, - "dependencies": { - "inherits": "2", - "block-stream": "*", - "fstream": "~0.1.8" - }, - "devDependencies": { - "tap": "0.x", - "rimraf": "1.x" - }, - "license": "BSD", - "readme": "# node-tar\n\nTar for Node.js.\n\n[![NPM](https://nodei.co/npm/tar.png)](https://nodei.co/npm/tar/)\n\n## API\n\nSee `examples/` for usage examples.\n\n### var tar = require('tar')\n\nReturns an object with `.Pack`, `.Extract` and `.Parse` methods.\n\n### tar.Pack([properties])\n\nReturns a through stream. Use\n[fstream](https://npmjs.org/package/fstream) to write files into the\npack stream and you will receive tar archive data from the pack\nstream.\n\nThe optional `properties` object are used to set properties in the tar\n'Global Extended Header'.\n\n### tar.Extract([options])\n\nReturns a through stream. Write tar data to the stream and the files\nin the tarball will be extracted onto the filesystem.\n\n`options` can be:\n\n```js\n{\n path: '/path/to/extract/tar/into',\n strip: 0, // how many path segments to strip from the root when extracting\n}\n```\n\n`options` also get passed to the `fstream.Writer` instance that `tar`\nuses internally.\n\n### tar.Parse()\n\nReturns a writable stream. Write tar data to it and it will emit\n`entry` events for each entry parsed from the tarball. This is used by\n`tar.Extract`.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-tar/issues" - }, - "homepage": "https://github.com/isaacs/node-tar", - "_id": "tar@0.1.19", - "dist": { - "shasum": "bd31a1030d51bfbbbf4b3e174603500389a1250d" - }, - "_from": "tar@~0.1.18", - "_resolved": "https://registry.npmjs.org/tar/-/tar-0.1.19.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/tar.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/tar.js deleted file mode 100644 index a81298b9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/tar.js +++ /dev/null @@ -1,173 +0,0 @@ -// field paths that every tar file must have. -// header is padded to 512 bytes. -var f = 0 - , fields = {} - , path = fields.path = f++ - , mode = fields.mode = f++ - , uid = fields.uid = f++ - , gid = fields.gid = f++ - , size = fields.size = f++ - , mtime = fields.mtime = f++ - , cksum = fields.cksum = f++ - , type = fields.type = f++ - , linkpath = fields.linkpath = f++ - , headerSize = 512 - , blockSize = 512 - , fieldSize = [] - -fieldSize[path] = 100 -fieldSize[mode] = 8 -fieldSize[uid] = 8 -fieldSize[gid] = 8 -fieldSize[size] = 12 -fieldSize[mtime] = 12 -fieldSize[cksum] = 8 -fieldSize[type] = 1 -fieldSize[linkpath] = 100 - -// "ustar\0" may introduce another bunch of headers. -// these are optional, and will be nulled out if not present. - -var ustar = fields.ustar = f++ - , ustarver = fields.ustarver = f++ - , uname = fields.uname = f++ - , gname = fields.gname = f++ - , devmaj = fields.devmaj = f++ - , devmin = fields.devmin = f++ - , prefix = fields.prefix = f++ - , fill = fields.fill = f++ - -// terminate fields. -fields[f] = null - -fieldSize[ustar] = 6 -fieldSize[ustarver] = 2 -fieldSize[uname] = 32 -fieldSize[gname] = 32 -fieldSize[devmaj] = 8 -fieldSize[devmin] = 8 -fieldSize[prefix] = 155 -fieldSize[fill] = 12 - -// nb: prefix field may in fact be 130 bytes of prefix, -// a null char, 12 bytes for atime, 12 bytes for ctime. -// -// To recognize this format: -// 1. prefix[130] === ' ' or '\0' -// 2. atime and ctime are octal numeric values -// 3. atime and ctime have ' ' in their last byte - -var fieldEnds = {} - , fieldOffs = {} - , fe = 0 -for (var i = 0; i < f; i ++) { - fieldOffs[i] = fe - fieldEnds[i] = (fe += fieldSize[i]) -} - -// build a translation table of field paths. -Object.keys(fields).forEach(function (f) { - if (fields[f] !== null) fields[fields[f]] = f -}) - -// different values of the 'type' field -// paths match the values of Stats.isX() functions, where appropriate -var types = - { 0: "File" - , "\0": "OldFile" // like 0 - , "": "OldFile" - , 1: "Link" - , 2: "SymbolicLink" - , 3: "CharacterDevice" - , 4: "BlockDevice" - , 5: "Directory" - , 6: "FIFO" - , 7: "ContiguousFile" // like 0 - // posix headers - , g: "GlobalExtendedHeader" // k=v for the rest of the archive - , x: "ExtendedHeader" // k=v for the next file - // vendor-specific stuff - , A: "SolarisACL" // skip - , D: "GNUDumpDir" // like 5, but with data, which should be skipped - , I: "Inode" // metadata only, skip - , K: "NextFileHasLongLinkpath" // data = link path of next file - , L: "NextFileHasLongPath" // data = path of next file - , M: "ContinuationFile" // skip - , N: "OldGnuLongPath" // like L - , S: "SparseFile" // skip - , V: "TapeVolumeHeader" // skip - , X: "OldExtendedHeader" // like x - } - -Object.keys(types).forEach(function (t) { - types[types[t]] = types[types[t]] || t -}) - -// values for the mode field -var modes = - { suid: 04000 // set uid on extraction - , sgid: 02000 // set gid on extraction - , svtx: 01000 // set restricted deletion flag on dirs on extraction - , uread: 0400 - , uwrite: 0200 - , uexec: 0100 - , gread: 040 - , gwrite: 020 - , gexec: 010 - , oread: 4 - , owrite: 2 - , oexec: 1 - , all: 07777 - } - -var numeric = - { mode: true - , uid: true - , gid: true - , size: true - , mtime: true - , devmaj: true - , devmin: true - , cksum: true - , atime: true - , ctime: true - , dev: true - , ino: true - , nlink: true - } - -Object.keys(modes).forEach(function (t) { - modes[modes[t]] = modes[modes[t]] || t -}) - -var knownExtended = - { atime: true - , charset: true - , comment: true - , ctime: true - , gid: true - , gname: true - , linkpath: true - , mtime: true - , path: true - , realtime: true - , security: true - , size: true - , uid: true - , uname: true } - - -exports.fields = fields -exports.fieldSize = fieldSize -exports.fieldOffs = fieldOffs -exports.fieldEnds = fieldEnds -exports.types = types -exports.modes = modes -exports.numeric = numeric -exports.headerSize = headerSize -exports.blockSize = blockSize -exports.knownExtended = knownExtended - -exports.Pack = require("./lib/pack.js") -exports.Parse = require("./lib/parse.js") -exports.Extract = require("./lib/extract.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/00-setup-fixtures.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/00-setup-fixtures.js deleted file mode 100644 index 1524ff7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/00-setup-fixtures.js +++ /dev/null @@ -1,53 +0,0 @@ -// the fixtures have some weird stuff that is painful -// to include directly in the repo for various reasons. -// -// So, unpack the fixtures with the system tar first. -// -// This means, of course, that it'll only work if you -// already have a tar implementation, and some of them -// will not properly unpack the fixtures anyway. -// -// But, since usually those tests will fail on Windows -// and other systems with less capable filesystems anyway, -// at least this way we don't cause inconveniences by -// merely cloning the repo or installing the package. - -var tap = require("tap") -, child_process = require("child_process") -, rimraf = require("rimraf") -, test = tap.test -, path = require("path") - -test("clean fixtures", function (t) { - rimraf(path.resolve(__dirname, "fixtures"), function (er) { - t.ifError(er, "rimraf ./fixtures/") - t.end() - }) -}) - -test("clean tmp", function (t) { - rimraf(path.resolve(__dirname, "tmp"), function (er) { - t.ifError(er, "rimraf ./tmp/") - t.end() - }) -}) - -test("extract fixtures", function (t) { - var c = child_process.spawn("tar" - ,["xzvf", "fixtures.tgz"] - ,{ cwd: __dirname }) - - c.stdout.on("data", errwrite) - c.stderr.on("data", errwrite) - function errwrite (chunk) { - process.stderr.write(chunk) - } - - c.on("exit", function (code) { - t.equal(code, 0, "extract fixtures should exit with 0") - if (code) { - t.comment("Note, all tests from here on out will fail because of this.") - } - t.end() - }) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/extract.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/extract.js deleted file mode 100644 index fff48181..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/extract.js +++ /dev/null @@ -1,358 +0,0 @@ -var tap = require("tap") - , tar = require("../tar.js") - , fs = require("fs") - , path = require("path") - , file = path.resolve(__dirname, "fixtures/c.tar") - , target = path.resolve(__dirname, "tmp/extract-test") - , index = 0 - , fstream = require("fstream") - - , ee = 0 - , expectEntries = -[ { path: 'c.txt', - mode: '644', - type: '0', - depth: undefined, - size: 513, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'cc.txt', - mode: '644', - type: '0', - depth: undefined, - size: 513, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 100, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'Ω.txt', - mode: '644', - type: '0', - depth: undefined, - size: 2, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'Ω.txt', - mode: '644', - type: '0', - depth: undefined, - size: 2, - linkpath: '', - nlink: 1, - dev: 234881026, - ino: 51693379 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 200, - linkpath: '', - nlink: 1, - dev: 234881026, - ino: 51681874 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 201, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: '777', - type: '2', - depth: undefined, - size: 0, - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: '200-hard', - mode: '644', - type: '0', - depth: undefined, - size: 200, - linkpath: '', - nlink: 2, - dev: 234881026, - ino: 51681874 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '1', - depth: undefined, - size: 0, - linkpath: path.resolve(target, '200-hard'), - nlink: 2, - dev: 234881026, - ino: 51681874 } ] - - , ef = 0 - , expectFiles = -[ { path: '', - mode: '40755', - type: 'Directory', - depth: 0, - linkpath: undefined }, - { path: '/200-hard', - mode: '100644', - type: 'File', - depth: 1, - size: 200, - linkpath: undefined, - nlink: 2 }, - { path: '/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '100644', - type: 'Link', - depth: 1, - size: 200, - linkpath: path.join(target, '200-hard'), - nlink: 2 }, - { path: '/200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: '120777', - type: 'SymbolicLink', - depth: 1, - size: 200, - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - nlink: 1 }, - { path: '/c.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 513, - linkpath: undefined, - nlink: 1 }, - { path: '/cc.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 513, - linkpath: undefined, - nlink: 1 }, - { path: '/r', - mode: '40755', - type: 'Directory', - depth: 1, - linkpath: undefined }, - { path: '/r/e', - mode: '40755', - type: 'Directory', - depth: 2, - linkpath: undefined }, - { path: '/r/e/a', - mode: '40755', - type: 'Directory', - depth: 3, - linkpath: undefined }, - { path: '/r/e/a/l', - mode: '40755', - type: 'Directory', - depth: 4, - linkpath: undefined }, - { path: '/r/e/a/l/l', - mode: '40755', - type: 'Directory', - depth: 5, - linkpath: undefined }, - { path: '/r/e/a/l/l/y', - mode: '40755', - type: 'Directory', - depth: 6, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-', - mode: '40755', - type: 'Directory', - depth: 7, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d', - mode: '40755', - type: 'Directory', - depth: 8, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e', - mode: '40755', - type: 'Directory', - depth: 9, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e', - mode: '40755', - type: 'Directory', - depth: 10, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p', - mode: '40755', - type: 'Directory', - depth: 11, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-', - mode: '40755', - type: 'Directory', - depth: 12, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f', - mode: '40755', - type: 'Directory', - depth: 13, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o', - mode: '40755', - type: 'Directory', - depth: 14, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l', - mode: '40755', - type: 'Directory', - depth: 15, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d', - mode: '40755', - type: 'Directory', - depth: 16, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e', - mode: '40755', - type: 'Directory', - depth: 17, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r', - mode: '40755', - type: 'Directory', - depth: 18, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-', - mode: '40755', - type: 'Directory', - depth: 19, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p', - mode: '40755', - type: 'Directory', - depth: 20, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a', - mode: '40755', - type: 'Directory', - depth: 21, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t', - mode: '40755', - type: 'Directory', - depth: 22, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h', - mode: '40755', - type: 'Directory', - depth: 23, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '100644', - type: 'File', - depth: 24, - size: 100, - linkpath: undefined, - nlink: 1 }, - { path: '/Ω.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 2, - linkpath: undefined, - nlink: 1 } ] - - - -// The extract class basically just pipes the input -// to a Reader, and then to a fstream.DirWriter - -// So, this is as much a test of fstream.Reader and fstream.Writer -// as it is of tar.Extract, but it sort of makes sense. - -tap.test("extract test", function (t) { - var extract = tar.Extract(target) - var inp = fs.createReadStream(file) - - // give it a weird buffer size to try to break in odd places - inp.bufferSize = 1234 - - inp.pipe(extract) - - extract.on("end", function () { - t.equal(ee, expectEntries.length, "should see "+ee+" entries") - - // should get no more entries after end - extract.removeAllListeners("entry") - extract.on("entry", function (e) { - t.fail("Should not get entries after end!") - }) - - next() - }) - - extract.on("entry", function (entry) { - var found = - { path: entry.path - , mode: entry.props.mode.toString(8) - , type: entry.props.type - , depth: entry.props.depth - , size: entry.props.size - , linkpath: entry.props.linkpath - , nlink: entry.props.nlink - , dev: entry.props.dev - , ino: entry.props.ino - } - - var wanted = expectEntries[ee ++] - - t.equivalent(found, wanted, "tar entry " + ee + " " + wanted.path) - }) - - function next () { - var r = fstream.Reader({ path: target - , type: "Directory" - // this is just to encourage consistency - , sort: "alpha" }) - - r.on("ready", function () { - foundEntry(r) - }) - - r.on("end", finish) - - function foundEntry (entry) { - var p = entry.path.substr(target.length) - var found = - { path: p - , mode: entry.props.mode.toString(8) - , type: entry.props.type - , depth: entry.props.depth - , size: entry.props.size - , linkpath: entry.props.linkpath - , nlink: entry.props.nlink - } - - var wanted = expectFiles[ef ++] - - t.has(found, wanted, "unpacked file " + ef + " " + wanted.path) - - entry.on("entry", foundEntry) - } - - function finish () { - t.equal(ef, expectFiles.length, "should have "+ef+" items") - t.end() - } - } -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/fixtures.tgz b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/fixtures.tgz deleted file mode 100644 index 4501bcf22695435b84edb3d4076cd9a70687b035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19205 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 L7Wcr_0GI;+;ZGx1 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/header.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/header.js deleted file mode 100644 index 8ea6f795..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/header.js +++ /dev/null @@ -1,183 +0,0 @@ -var tap = require("tap") -var TarHeader = require("../lib/header.js") -var tar = require("../tar.js") -var fs = require("fs") - - -var headers = - { "a.txt file header": - [ "612e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303430312031313635313336303333332030313234353100203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'a.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 257 - , mtime: 1319493851 - , cksum: 5417 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "omega pax": // the extended header from omega tar. - [ "5061784865616465722fcea92e74787400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303137302031313534333731303631312030313530353100207800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'PaxHeader/Ω.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 120 - , mtime: 1301254537 - , cksum: 6697 - , type: 'x' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } ] - - , "omega file header": - [ "cea92e7478740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303030322031313534333731303631312030313330373200203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'Ω.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 2 - , mtime: 1301254537 - , cksum: 5690 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } ] - - , "foo.js file header": - [ "666f6f2e6a730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303030342031313534333637303734312030313236313700203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'foo.js' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 4 - , mtime: 1301246433 - , cksum: 5519 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "b.txt file header": - [ "622e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030313030302031313635313336303637372030313234363100203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'b.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 512 - , mtime: 1319494079 - , cksum: 5425 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "deep nested file": - [ "636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363633030303634342000303537373631200030303030323420003030303030303030313434203131363532313531353333203034333331340020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075737461720030306973616163730000000000000000000000000000000000000000000000000000737461666600000000000000000000000000000000000000000000000000000030303030303020003030303030302000722f652f612f6c2f6c2f792f2d2f642f652f652f702f2d2f662f6f2f6c2f642f652f722f2d2f702f612f742f680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true, - path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 100 - , mtime: 1319687003 - , cksum: 18124 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - } - -tap.test("parsing", function (t) { - Object.keys(headers).forEach(function (name) { - var h = headers[name] - , header = new Buffer(h[0], "hex") - , expect = h[1] - , parsed = new TarHeader(header) - - // console.error(parsed) - t.has(parsed, expect, "parse " + name) - }) - t.end() -}) - -tap.test("encoding", function (t) { - Object.keys(headers).forEach(function (name) { - var h = headers[name] - , expect = new Buffer(h[0], "hex") - , encoded = TarHeader.encode(h[1]) - - // might have slightly different bytes, since the standard - // isn't very strict, but should have the same semantics - // checkSum will be different, but cksumValid will be true - - var th = new TarHeader(encoded) - delete h[1].block - delete h[1].needExtended - delete h[1].cksum - t.has(th, h[1], "fields "+name) - }) - t.end() -}) - -// test these manually. they're a bit rare to find in the wild -tap.test("parseNumeric tests", function (t) { - var parseNumeric = TarHeader.parseNumeric - , numbers = - { "303737373737373700": 2097151 - , "30373737373737373737373700": 8589934591 - , "303030303036343400": 420 - , "800000ffffffffffff": 281474976710655 - , "ffffff000000000001": -281474976710654 - , "ffffff000000000000": -281474976710655 - , "800000000000200000": 2097152 - , "8000000000001544c5": 1393861 - , "ffffffffffff1544c5": -15383354 } - Object.keys(numbers).forEach(function (n) { - var b = new Buffer(n, "hex") - t.equal(parseNumeric(b), numbers[n], n + " === " + numbers[n]) - }) - t.end() -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack-no-proprietary.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack-no-proprietary.js deleted file mode 100644 index 5bf0e540..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack-no-proprietary.js +++ /dev/null @@ -1,854 +0,0 @@ -// This is exactly like test/pack.js, except that it's excluding -// any proprietary headers. -// -// This loses some information about the filesystem, but creates -// tarballs that are supported by more versions of tar, especially -// old non-spec-compliant copies of gnutar. - -// the symlink file is excluded from git, because it makes -// windows freak the hell out. -var fs = require("fs") - , path = require("path") - , symlink = path.resolve(__dirname, "fixtures/symlink") -try { fs.unlinkSync(symlink) } catch (e) {} -fs.symlinkSync("./hardlink-1", symlink) -process.on("exit", function () { - fs.unlinkSync(symlink) -}) - -var tap = require("tap") - , tar = require("../tar.js") - , pkg = require("../package.json") - , Pack = tar.Pack - , fstream = require("fstream") - , Reader = fstream.Reader - , Writer = fstream.Writer - , input = path.resolve(__dirname, "fixtures/") - , target = path.resolve(__dirname, "tmp/pack.tar") - , uid = process.getuid ? process.getuid() : 0 - , gid = process.getgid ? process.getgid() : 0 - - , entries = - - // the global header and root fixtures/ dir are going to get - // a different date each time, so omit that bit. - // Also, dev/ino values differ across machines, so that's not - // included. - [ [ 'entry', - { path: 'fixtures/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/200cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - uid: uid, - gid: gid, - size: 200 } ] - - , [ 'entry', - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/a.txt', - mode: 420, - uid: uid, - gid: gid, - size: 257, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/b.txt', - mode: 420, - uid: uid, - gid: gid, - size: 512, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/c.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/cc.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/foo.js', - mode: 420, - uid: uid, - gid: gid, - size: 4, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-1', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-2', - mode: 420, - uid: uid, - gid: gid, - size: 0, - type: '1', - linkpath: 'fixtures/hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/star.4.html', - mode: 420, - uid: uid, - gid: gid, - size: 54081, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/packtest/Ω.txt', - uid: uid, - gid: gid, - size: 2 } ] - - , [ 'entry', - { path: 'fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 100, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/symlink', - uid: uid, - gid: gid, - size: 0, - type: '2', - linkpath: 'hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: "fixtures/Ω.txt" - , uid: uid - , gid: gid - , size: 2 } ] - - , [ 'entry', - { path: 'fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - ] - - -// first, make sure that the hardlinks are actually hardlinks, or this -// won't work. Git has a way of replacing them with a copy. -var hard1 = path.resolve(__dirname, "fixtures/hardlink-1") - , hard2 = path.resolve(__dirname, "fixtures/hardlink-2") - , fs = require("fs") - -try { fs.unlinkSync(hard2) } catch (e) {} -fs.linkSync(hard1, hard2) - -tap.test("with global header", { timeout: 10000 }, function (t) { - runTest(t, true) -}) - -tap.test("without global header", { timeout: 10000 }, function (t) { - runTest(t, false) -}) - -function alphasort (a, b) { - return a === b ? 0 - : a.toLowerCase() > b.toLowerCase() ? 1 - : a.toLowerCase() < b.toLowerCase() ? -1 - : a > b ? 1 - : -1 -} - - -function runTest (t, doGH) { - var reader = Reader({ path: input - , filter: function () { - return !this.path.match(/\.(tar|hex)$/) - } - , sort: alphasort - }) - - var props = doGH ? pkg : {} - props.noProprietary = true - var pack = Pack(props) - var writer = Writer(target) - - // global header should be skipped regardless, since it has no content. - var entry = 0 - - t.ok(reader, "reader ok") - t.ok(pack, "pack ok") - t.ok(writer, "writer ok") - - pack.pipe(writer) - - var parse = tar.Parse() - t.ok(parse, "parser should be ok") - - pack.on("data", function (c) { - // console.error("PACK DATA") - if (c.length !== 512) { - // this one is too noisy, only assert if it'll be relevant - t.equal(c.length, 512, "parser should emit data in 512byte blocks") - } - parse.write(c) - }) - - pack.on("end", function () { - // console.error("PACK END") - t.pass("parser ends") - parse.end() - }) - - pack.on("error", function (er) { - t.fail("pack error", er) - }) - - parse.on("error", function (er) { - t.fail("parse error", er) - }) - - writer.on("error", function (er) { - t.fail("writer error", er) - }) - - reader.on("error", function (er) { - t.fail("reader error", er) - }) - - parse.on("*", function (ev, e) { - var wanted = entries[entry++] - if (!wanted) { - t.fail("unexpected event: "+ev) - return - } - t.equal(ev, wanted[0], "event type should be "+wanted[0]) - - if (ev !== wanted[0] || e.path !== wanted[1].path) { - console.error(wanted) - console.error([ev, e.props]) - e.on("end", function () { - console.error(e.fields) - throw "break" - }) - } - - t.has(e.props, wanted[1], "properties "+wanted[1].path) - if (wanted[2]) { - e.on("end", function () { - if (!e.fields) { - t.ok(e.fields, "should get fields") - } else { - t.has(e.fields, wanted[2], "should get expected fields") - } - }) - } - }) - - reader.pipe(pack) - - writer.on("close", function () { - t.equal(entry, entries.length, "should get all expected entries") - t.pass("it finished") - t.end() - }) - -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack.js deleted file mode 100644 index 0f509945..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack.js +++ /dev/null @@ -1,897 +0,0 @@ - -// the symlink file is excluded from git, because it makes -// windows freak the hell out. -var fs = require("fs") - , path = require("path") - , symlink = path.resolve(__dirname, "fixtures/symlink") -try { fs.unlinkSync(symlink) } catch (e) {} -fs.symlinkSync("./hardlink-1", symlink) -process.on("exit", function () { - fs.unlinkSync(symlink) -}) - - -var tap = require("tap") - , tar = require("../tar.js") - , pkg = require("../package.json") - , Pack = tar.Pack - , fstream = require("fstream") - , Reader = fstream.Reader - , Writer = fstream.Writer - , input = path.resolve(__dirname, "fixtures/") - , target = path.resolve(__dirname, "tmp/pack.tar") - , uid = process.getuid ? process.getuid() : 0 - , gid = process.getgid ? process.getgid() : 0 - - , entries = - - // the global header and root fixtures/ dir are going to get - // a different date each time, so omit that bit. - // Also, dev/ino values differ across machines, so that's not - // included. - [ [ 'globalExtendedHeader', - { path: 'PaxHeader/', - mode: 438, - uid: 0, - gid: 0, - type: 'g', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { "NODETAR.author": pkg.author, - "NODETAR.name": pkg.name, - "NODETAR.description": pkg.description, - "NODETAR.version": pkg.version, - "NODETAR.repository.type": pkg.repository.type, - "NODETAR.repository.url": pkg.repository.url, - "NODETAR.main": pkg.main, - "NODETAR.scripts.test": pkg.scripts.test } ] - - , [ 'entry', - { path: 'fixtures/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/200cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - uid: uid, - gid: gid, - size: 200, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/a.txt', - mode: 420, - uid: uid, - gid: gid, - size: 257, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/b.txt', - mode: 420, - uid: uid, - gid: gid, - size: 512, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/c.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/cc.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/foo.js', - mode: 420, - uid: uid, - gid: gid, - size: 4, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-1', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-2', - mode: 420, - uid: uid, - gid: gid, - size: 0, - type: '1', - linkpath: 'fixtures/hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/star.4.html', - mode: 420, - uid: uid, - gid: gid, - size: 54081, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/packtest/Ω.txt', - 'NODETAR.depth': '2', - 'NODETAR.type': 'File', - nlink: 1, - uid: uid, - gid: gid, - size: 2, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '2', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 100, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/symlink', - uid: uid, - gid: gid, - size: 0, - type: '2', - linkpath: 'hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: "fixtures/Ω.txt" - , "NODETAR.depth": "1" - , "NODETAR.type": "File" - , nlink: 1 - , uid: uid - , gid: gid - , size: 2 - , "NODETAR.blksize": "4096" - , "NODETAR.blocks": "8" } ] - - , [ 'entry', - { path: 'fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - ] - - -// first, make sure that the hardlinks are actually hardlinks, or this -// won't work. Git has a way of replacing them with a copy. -var hard1 = path.resolve(__dirname, "fixtures/hardlink-1") - , hard2 = path.resolve(__dirname, "fixtures/hardlink-2") - , fs = require("fs") - -try { fs.unlinkSync(hard2) } catch (e) {} -fs.linkSync(hard1, hard2) - -tap.test("with global header", { timeout: 10000 }, function (t) { - runTest(t, true) -}) - -tap.test("without global header", { timeout: 10000 }, function (t) { - runTest(t, false) -}) - -function alphasort (a, b) { - return a === b ? 0 - : a.toLowerCase() > b.toLowerCase() ? 1 - : a.toLowerCase() < b.toLowerCase() ? -1 - : a > b ? 1 - : -1 -} - - -function runTest (t, doGH) { - var reader = Reader({ path: input - , filter: function () { - return !this.path.match(/\.(tar|hex)$/) - } - , sort: alphasort - }) - - var pack = Pack(doGH ? pkg : null) - var writer = Writer(target) - - // skip the global header if we're not doing that. - var entry = doGH ? 0 : 1 - - t.ok(reader, "reader ok") - t.ok(pack, "pack ok") - t.ok(writer, "writer ok") - - pack.pipe(writer) - - var parse = tar.Parse() - t.ok(parse, "parser should be ok") - - pack.on("data", function (c) { - // console.error("PACK DATA") - if (c.length !== 512) { - // this one is too noisy, only assert if it'll be relevant - t.equal(c.length, 512, "parser should emit data in 512byte blocks") - } - parse.write(c) - }) - - pack.on("end", function () { - // console.error("PACK END") - t.pass("parser ends") - parse.end() - }) - - pack.on("error", function (er) { - t.fail("pack error", er) - }) - - parse.on("error", function (er) { - t.fail("parse error", er) - }) - - writer.on("error", function (er) { - t.fail("writer error", er) - }) - - reader.on("error", function (er) { - t.fail("reader error", er) - }) - - parse.on("*", function (ev, e) { - var wanted = entries[entry++] - if (!wanted) { - t.fail("unexpected event: "+ev) - return - } - t.equal(ev, wanted[0], "event type should be "+wanted[0]) - - // if (ev !== wanted[0] || e.path !== wanted[1].path) { - // console.error(wanted) - // console.error([ev, e.props]) - // throw "break" - // } - - t.has(e.props, wanted[1], "properties "+wanted[1].path) - if (wanted[2]) { - e.on("end", function () { - if (!e.fields) { - t.ok(e.fields, "should get fields") - } else { - t.has(e.fields, wanted[2], "should get expected fields") - } - }) - } - }) - - reader.pipe(pack) - - writer.on("close", function () { - t.equal(entry, entries.length, "should get all expected entries") - t.pass("it finished") - t.end() - }) - -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/parse.js deleted file mode 100644 index f765a501..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/parse.js +++ /dev/null @@ -1,359 +0,0 @@ -var tap = require("tap") - , tar = require("../tar.js") - , fs = require("fs") - , path = require("path") - , file = path.resolve(__dirname, "fixtures/c.tar") - , index = 0 - - , expect = -[ [ 'entry', - { path: 'c.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 513, - mtime: new Date('Wed, 26 Oct 2011 01:10:58 GMT'), - cksum: 5422, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'cc.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 513, - mtime: new Date('Wed, 26 Oct 2011 01:11:02 GMT'), - cksum: 5525, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 100, - mtime: new Date('Thu, 27 Oct 2011 03:43:23 GMT'), - cksum: 18124, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 2, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 5695, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 120, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 6702, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'Ω.txt', - ctime: 1319737909, - atime: 1319739061, - dev: 234881026, - ino: 51693379, - nlink: 1 } ], - [ 'entry', - { path: 'Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 2, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 5695, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - atime: new Date('Thu, 27 Oct 2011 18:11:01 GMT'), - dev: 234881026, - ino: 51693379, - nlink: 1 }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 353, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14488, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ctime: 1319686868, - atime: 1319741254, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 1 } ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 200, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14570, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - atime: new Date('Thu, 27 Oct 2011 18:47:34 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 1 }, - undefined ], - [ 'longPath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4976, - type: 'L', - linkpath: '', - ustar: false }, - '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 1000, - gid: 1000, - size: 201, - mtime: new Date('Thu, 27 Oct 2011 22:21:50 GMT'), - cksum: 14086, - type: '0', - linkpath: '', - ustar: false }, - undefined ], - [ 'longLinkpath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4975, - type: 'K', - linkpath: '', - ustar: false }, - '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ], - [ 'longPath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4976, - type: 'L', - linkpath: '', - ustar: false }, - '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL' ], - [ 'entry', - { path: '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: 511, - uid: 1000, - gid: 1000, - size: 0, - mtime: new Date('Fri, 28 Oct 2011 23:05:17 GMT'), - cksum: 21603, - type: '2', - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ustar: false }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200-hard', - mode: 420, - uid: 24561, - gid: 20, - size: 143, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 6533, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { ctime: 1320617144, - atime: 1320617232, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 } ], - [ 'entry', - { path: '200-hard', - mode: 420, - uid: 24561, - gid: 20, - size: 200, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 5526, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Sun, 06 Nov 2011 22:05:44 GMT'), - atime: new Date('Sun, 06 Nov 2011 22:07:12 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 353, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14488, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ctime: 1320617144, - atime: 1320617406, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 } ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 15173, - type: '1', - linkpath: '200-hard', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Sun, 06 Nov 2011 22:05:44 GMT'), - atime: new Date('Sun, 06 Nov 2011 22:10:06 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 }, - undefined ] ] - - -tap.test("parser test", function (t) { - var parser = tar.Parse() - - parser.on("end", function () { - t.equal(index, expect.length, "saw all expected events") - t.end() - }) - - fs.createReadStream(file) - .pipe(parser) - .on("*", function (ev, entry) { - var wanted = expect[index] - if (!wanted) { - return t.fail("Unexpected event: " + ev) - } - var result = [ev, entry.props] - entry.on("end", function () { - result.push(entry.fields || entry.body) - - t.equal(ev, wanted[0], index + " event type") - t.equivalent(entry.props, wanted[1], wanted[1].path + " entry properties") - if (wanted[2]) { - t.equivalent(result[2], wanted[2], "metadata values") - } - index ++ - }) - }) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/zz-cleanup.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/zz-cleanup.js deleted file mode 100644 index a00ff7fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/zz-cleanup.js +++ /dev/null @@ -1,20 +0,0 @@ -// clean up the fixtures - -var tap = require("tap") -, rimraf = require("rimraf") -, test = tap.test -, path = require("path") - -test("clean fixtures", function (t) { - rimraf(path.resolve(__dirname, "fixtures"), function (er) { - t.ifError(er, "rimraf ./fixtures/") - t.end() - }) -}) - -test("clean tmp", function (t) { - rimraf(path.resolve(__dirname, "tmp"), function (er) { - t.ifError(er, "rimraf ./tmp/") - t.end() - }) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/index.js deleted file mode 100644 index da99ffef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/index.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; -var path = require('path'); -var tmpdir = require('os').tmpdir(); -var uuid = require('uuid'); - -module.exports = function (ext) { - return path.join(tmpdir, uuid.v4() + (ext || '')); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.npmignore deleted file mode 100644 index fd4f2b06..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.DS_Store diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.travis.yml deleted file mode 100644 index b6d42c3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.9 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/LICENSE.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/LICENSE.md deleted file mode 100644 index f039427f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/LICENSE.md +++ /dev/null @@ -1,2 +0,0 @@ -Copyright (c) 2010-2012 Robert Kieffer -MIT License - http://opensource.org/licenses/mit-license.php diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/README.md deleted file mode 100644 index d2adba18..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/README.md +++ /dev/null @@ -1,204 +0,0 @@ -# uuid [![Build Status](https://secure.travis-ci.org/shtylman/node-uuid.png?branch=master)](http://travis-ci.org/shtylman/node-uuid) # - -[![browser support](http://ci.testling.com/shtylman/node-uuid.png)](http://ci.testling.com/shtylman/node-uuid) - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Generate RFC4122 version 1 or version 4 UUIDs -* Runs in node.js and all browsers. -* Cryptographically strong random # generation on supporting platforms -* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! ) -* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html) - -## Getting Started - -Install it in your browser: - -```html -<script src="uuid.js"></script> -``` - -Or in node.js: - -``` -npm install uuid -``` - -```javascript -var uuid = require('uuid'); - -// Generate a v1 (time-based) id -uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - -// Generate a v4 (random) id -uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' -``` - -## API - -### uuid.v1([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Notes: - -1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v1({ - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -var arr = new Array(32); // -> [] -uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] - -// Optionally use uuid.unparse() to get stringify the ids -uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' -uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' -``` - -### uuid.v4([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v4({ - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" -``` - -Example: Generate two IDs in a single buffer - -```javascript -var buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); -``` - -### uuid.parse(id[, buffer[, offset]]) -### uuid.unparse(buffer[, offset]) - -Parse and unparse UUIDs - - * `id` - (String) UUID(-like) string - * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used - * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 - -Example parsing and unparsing a UUID string - -```javascript -var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10> -var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' -``` - -### uuid.noConflict() - -(Browsers only) Set `uuid` property back to it's previous value. - -Returns the uuid object. - -Example: - -```javascript -var myUuid = uuid.noConflict(); -myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' -``` - -## Deprecated APIs - -Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. - -### uuid([format [, buffer [, offset]]]) - -uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). - -### uuid.BufferClass - -The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API. - -## Testing - -In node.js - -``` -> cd test -> node test.js -``` - -In Browser - -``` -open test/test.html -``` - -### Benchmarking - -Requires node.js - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -For a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark) - -For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - -## Release notes - -### 1.4.0 - -* Improved module context detection -* Removed public RNG functions - -### 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - -### 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/README.md deleted file mode 100644 index aaeb2ea0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# node-uuid Benchmarks - -### Results - -To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark - -### Run them yourself - -node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. - -To prepare and run the benchmark issue; - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -You'll see an output like this one: - -``` -# v4 -nodeuuid.v4(): 854700 uuids/second -nodeuuid.v4('binary'): 788643 uuids/second -nodeuuid.v4('binary', buffer): 1336898 uuids/second -uuid(): 479386 uuids/second -uuid('binary'): 582072 uuids/second -uuidjs.create(4): 312304 uuids/second - -# v1 -nodeuuid.v1(): 938086 uuids/second -nodeuuid.v1('binary'): 683060 uuids/second -nodeuuid.v1('binary', buffer): 1644736 uuids/second -uuidjs.create(1): 190621 uuids/second -``` - -* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. -* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. - -If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: - -``` -for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; -``` - -If you're interested in how performance varies between different node versions, you can issue the above command multiple times. - -You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: - -``` -(cd benchmark/ && ./bench.sh) -``` - -This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.gnu b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.gnu deleted file mode 100644 index a342fbbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.gnu +++ /dev/null @@ -1,174 +0,0 @@ -#!/opt/local/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.4 patchlevel 3 -# last modified March 2011 -# System: Darwin 10.8.0 -# -# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 -# Thomas Williams, Colin Kelley and many others -# -# gnuplot home: http://www.gnuplot.info -# faq, bugs, etc: type "help seeking-assistance" -# immediate help: type "help" -# plot window: hit 'h' -set terminal postscript eps noenhanced defaultplex \ - leveldefault color colortext \ - solid linewidth 1.2 butt noclip \ - palfuncparam 2000,0.003 \ - "Helvetica" 14 -set output 'bench.eps' -unset clip points -set clip one -unset clip two -set bar 1.000000 front -set border 31 front linetype -1 linewidth 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 -set style circle radius graph 0.02, first 0, 0 -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 -set key maxcolumns 2 maxrows 0 -unset label -unset arrow -set style increment default -unset style line -set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 -unset style arrow -set style histogram clustered gap 2 title offset character 0, 0, 0 -unset logscale -set offsets graph 0.05, 0.15, 0, 0 -set pointsize 1.5 -set pointintervalbox 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -unset hidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data points -set style function lines -set xzeroaxis linetype -2 linewidth 1.000 -set yzeroaxis linetype -2 linewidth 1.000 -set zzeroaxis linetype -2 linewidth 1.000 -set x2zeroaxis linetype -2 linewidth 1.000 -set y2zeroaxis linetype -2 linewidth 1.000 -set ticslevel 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set xtics norangelimit -set xtics () -set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set ytics autofreq norangelimit -set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 -set ztics autofreq norangelimit -set nox2tics -set noy2tics -set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set cbtics autofreq norangelimit -set title "" -set title offset character 0, 0, 0 font "" norotate -set timestamp bottom -set timestamp "" -set timestamp offset character 0, 0, 0 font "" norotate -set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale rfixmin -set autoscale rfixmax -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set autoscale tfixmin -set autoscale tfixmax -set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale ufixmin -set autoscale ufixmax -set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale vfixmin -set autoscale vfixmax -set xlabel "" -set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set x2label "" -set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate -set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) -set autoscale xfixmin -set autoscale xfixmax -set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) -set autoscale x2fixmin -set autoscale x2fixmax -set ylabel "" -set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set y2label "" -set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) -set autoscale yfixmin -set autoscale yfixmax -set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) -set autoscale y2fixmin -set autoscale y2fixmax -set zlabel "" -set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale zfixmin -set autoscale zfixmax -set cblabel "" -set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale cbfixmin -set autoscale cbfixmax -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set pm3d explicit at s -set pm3d scansautomatic -set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault -set loadpath -set fontpath -set fit noerrorvariables -GNUTERM = "aqua" -plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 -# EOF diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.sh deleted file mode 100755 index d870a0cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# for a given node version run: -# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; - -PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte') -FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es) -INDICES=(2 3 2 3 2 2 2 2 2) -VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) -TMPJOIN="tmp_join" -OUTPUT="bench_results.txt" - -for I in ${!FILES[*]}; do - F=${FILES[$I]} - P=${PATTERNS[$I]} - INDEX=${INDICES[$I]} - echo "version $F" > $F - for V in $VERSIONS; do - (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F - done - if [ $I == 0 ]; then - cat $F > $TMPJOIN - else - join $TMPJOIN $F > $OUTPUT - cp $OUTPUT $TMPJOIN - fi - rm $F -done - -rm $TMPJOIN - -gnuplot bench.gnu -convert -density 200 -resize 800x560 -flatten bench.eps bench.png -rm bench.eps diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark-native.c b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark-native.c deleted file mode 100644 index dbfc75f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include <stdio.h> -#include <unistd.h> -#include <sys/time.h> -#include <uuid/uuid.h> - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark.js deleted file mode 100644 index 40e6efbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark.js +++ /dev/null @@ -1,84 +0,0 @@ -try { - var nodeuuid = require('../uuid'); -} catch (e) { - console.error('node-uuid require failed - skipping tests'); -} - -try { - var uuid = require('uuid'); -} catch (e) { - console.error('uuid require failed - skipping tests'); -} - -try { - var uuidjs = require('uuid-js'); -} catch (e) { - console.error('uuid-js require failed - skipping tests'); -} - -var N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -console.log('# v4'); - -// node-uuid - string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); - rate('nodeuuid.v4() - using node.js crypto RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG}); - rate('nodeuuid.v4() - using Math.random() RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); - rate('nodeuuid.v4(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); - rate('nodeuuid.v4(\'binary\', buffer)', t); -} - -// libuuid - string form -if (uuid) { - for (var i = 0, t = Date.now(); i < N; i++) uuid(); - rate('uuid()', t); - - for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); - rate('uuid(\'binary\')', t); -} - -// uuid-js - string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); - rate('uuidjs.create(4)', t); -} - -// 140byte.es -for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)}); -rate('140byte.es_v4', t); - -console.log(''); -console.log('# v1'); - -// node-uuid - v1 string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); - rate('nodeuuid.v1()', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); - rate('nodeuuid.v1(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); - rate('nodeuuid.v1(\'binary\', buffer)', t); -} - -// uuid-js - v1 string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); - rate('uuidjs.create(1)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/compare.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/compare.js deleted file mode 100644 index 3de34151..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/compare.js +++ /dev/null @@ -1,62 +0,0 @@ -var assert = require('assert'), - nodeuuid = require('../'), - uuidjs = require('uuid-js'), - util = require('util'), - exec = require('child_process').exec, - os = require('os'); - -// On Mac Os X / macports there's only the ossp-uuid package that provides uuid -// On Linux there's uuid-runtime which provides uuidgen -var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t'; - -function compare(ids) { - console.log(ids); - for (var i = 0; i < ids.length; i++) { - var id = ids[i].split('-'); - id = [id[2], id[1], id[0]].join(''); - ids[i] = id; - } - var sorted = ([].concat(ids)).sort(); - - if (sorted.toString() !== ids.toString()) { - console.log('Warning: sorted !== ids'); - } else { - console.log('everything in order!'); - } -} - -// Test time order of v1 uuids -var ids = []; -while (ids.length < 10e3) ids.push(nodeuuid.v1()); - -var max = 10; -console.log('node-uuid:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(nodeuuid.v1()); -compare(ids); - -console.log(''); -console.log('uuidjs:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString()); -compare(ids); - -console.log(''); -console.log('libuuid:'); -ids = []; -var count = 0; -var last = function() { - compare(ids); -} -var cb = function(err, stdout, stderr) { - ids.push(stdout.substring(0, stdout.length-1)); - count++; - if (count < max) { - return next(); - } - last(); -}; -var next = function() { - exec(uuidCmd, cb); -}; -next(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/perf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/perf.js deleted file mode 100644 index bdc9eb46..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/perf.js +++ /dev/null @@ -1,102 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -var log = console.log; - -var generators = { - v1: uuid.v1, - v4: uuid.v4 -}; - -var UUID_FORMAT = { - v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i, - v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i -}; - -var N = 1e4; - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second'); -} - -for (var version in generators) { - var counts = {}, max = 0; - var generator = generators[version]; - var format = UUID_FORMAT[version]; - - log('\nSanity check ' + N + ' ' + version + ' uuids'); - for (var i = 0, ok = 0; i < N; i++) { - id = generator(); - if (!format.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - assert(fail, id + ' is not a valid id'); - } - - // Count digits for our randomness check - if (version == 'v4') { - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } - } - } - - // Check randomness for v4 UUIDs - if (version == 'v4') { - // Limit that we get worried about randomness. (Purely empirical choice, this!) - var limit = 2*100*Math.sqrt(1/N); - - log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)'); - - for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)'); - } - } -} - -// Perf tests -for (var version in generators) { - log('\nPerformance testing ' + version + ' UUIDs'); - var generator = generators[version]; - var buf = new uuid.BufferClass(16); - - for (var i = 0, t = Date.now(); i < N; i++) generator(); - rate('uuid.' + version + '()', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary'); - rate('uuid.' + version + '(\'binary\')', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf); - rate('uuid.' + version + '(\'binary\', buffer)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/package.json deleted file mode 100644 index d9f8435b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "uuid", - "version": "1.4.1", - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com" - }, - "contributors": [ - { - "name": "Christoph Tavan", - "email": "dev@tavan.de" - } - ], - "main": "./uuid.js", - "devDependencies": { - "mocha": "1.8.0" - }, - "scripts": { - "test": "mocha test/test.js" - }, - "browser": { - "./rng.js": "./rng-browser.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/shtylman/node-uuid.git" - }, - "testling": { - "browsers": [ - "ie6..latest", - "firefox/3.6..latest", - "chrome/22..latest", - "safari/5.1..latest" - ], - "harness": "mocha-tdd", - "files": "test/*.js" - }, - "readme": "# uuid [![Build Status](https://secure.travis-ci.org/shtylman/node-uuid.png?branch=master)](http://travis-ci.org/shtylman/node-uuid) #\n\n[![browser support](http://ci.testling.com/shtylman/node-uuid.png)](http://ci.testling.com/shtylman/node-uuid)\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src=\"uuid.js\"></script>\n```\n\nOr in node.js:\n\n```\nnpm install uuid\n```\n\n```javascript\nvar uuid = require('uuid');\n\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/shtylman/node-uuid/issues" - }, - "homepage": "https://github.com/shtylman/node-uuid", - "_id": "uuid@1.4.1", - "dist": { - "shasum": "4e6bbab179cc65c2f120508576c631bd7751af7c" - }, - "_from": "uuid@~1.4.0", - "_resolved": "https://registry.npmjs.org/uuid/-/uuid-1.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng-browser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng-browser.js deleted file mode 100644 index 57b58d4b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng-browser.js +++ /dev/null @@ -1,31 +0,0 @@ - -var rng; - -if (global.crypto && crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // Moderately fast, high quality - var _rnds8 = new Uint8Array(16); - rng = function whatwgRNG() { - crypto.getRandomValues(_rnds8); - return _rnds8; - }; -} - -if (!rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - rng = function() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return _rnds; - }; -} - -module.exports = rng; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng.js deleted file mode 100644 index 3977f798..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng.js +++ /dev/null @@ -1,4 +0,0 @@ -var rb = require('crypto').randomBytes; -module.exports = function() { - return rb(16); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/mocha.opts b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/mocha.opts deleted file mode 100644 index e2bfcc5a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---ui qunit diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/test.js deleted file mode 100644 index 4c9872ff..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/test.js +++ /dev/null @@ -1,105 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -// Verify ordering of v1 ids created with explicit times -var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 - -function compare(name, ids) { - test(name, function() { - // avoid .map for older browsers - for (var i=0 ; i<ids.length ; ++i) { - ids[i] = ids[i].split('-').reverse().join('-'); - } - ids = ids.sort(); - var sorted = ([].concat(ids)).sort(); - - assert(sorted.toString() == ids.toString(), name + ' have expected order'); - }); -} - -// Verify ordering of v1 ids created using default behavior -compare('uuids with current time', [ - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1() -]); - -// Verify ordering of v1 ids created with explicit times -compare('uuids with time option', [ - uuid.v1({msecs: TIME - 10*3600*1000}), - uuid.v1({msecs: TIME - 1}), - uuid.v1({msecs: TIME}), - uuid.v1({msecs: TIME + 1}), - uuid.v1({msecs: TIME + 28*24*3600*1000}) -]); - -test('msec', function() { - assert( - uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}), - 'IDs created at same msec are different' - ); -}); - -test('exception thrown when > 10k ids created in 1ms', function() { - // Verify throw if too many ids created - var thrown = false; - try { - uuid.v1({msecs: TIME, nsecs: 10000}); - } catch (e) { - thrown = true; - } - assert(thrown, 'Exception thrown when > 10K ids created in 1 ms'); -}); - -test('clock regression by msec', function() { - // Verify clock regression bumps clockseq - var uidt = uuid.v1({msecs: TIME}); - var uidtb = uuid.v1({msecs: TIME - 1}); - assert( - parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq' - ); -}); - -test('clock regression by nsec', function() { - // Verify clock regression bumps clockseq - var uidtn = uuid.v1({msecs: TIME, nsecs: 10}); - var uidtnb = uuid.v1({msecs: TIME, nsecs: 9}); - assert( - parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq' - ); -}); - -test('explicit options product expected id', function() { - // Verify explicit options produce expected id - var id = uuid.v1({ - msecs: 1321651533573, - nsecs: 5432, - clockseq: 0x385c, - node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ] - }); - assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); -}); - -test('ids spanning 1ms boundary are 100ns apart', function() { - // Verify adjacent ids across a msec boundary are 1 time unit apart - var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); - var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - - var before = u0.split('-')[0], after = u1.split('-')[0]; - var dt = parseInt(after, 16) - parseInt(before, 16); - assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); -}); - -test('parse/unparse', function() { - var id = '00112233445566778899aabbccddeeff'; - assert(uuid.unparse(uuid.parse(id.substr(0,10))) == - '00112233-4400-0000-0000-000000000000', 'Short parse'); - assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) == - '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse'); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/uuid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/uuid.js deleted file mode 100644 index d0062fb4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/uuid.js +++ /dev/null @@ -1,187 +0,0 @@ -// uuid.js -// -// Copyright (c) 2010-2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -// Unique ID creation requires a high quality random # generator. We feature -// detect to determine the best RNG source, normalizing to a function that -// returns 128-bits of randomness, since that's what's usually required -var _rng = require('./rng'); - -// Buffer class to use -var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array; - -// Maps for number <-> hex string conversion -var _byteToHex = []; -var _hexToByte = {}; -for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; -} - -// **`parse()` - Parse a UUID into it's component bytes** -function parse(s, buf, offset) { - var i = (buf && offset) || 0, ii = 0; - - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) { - if (ii < 16) { // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); - - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; - } - - return buf; -} - -// **`unparse()` - Convert UUID byte array (ala parse()) into a string** -function unparse(buf, offset) { - var i = offset || 0, bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]]; -} - -// **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html - -// random #'s we need to init node and clockseq -var _seedBytes = _rng(); - -// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) -var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] -]; - -// Per 4.2.2, randomize (14 bit) clockseq -var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; - -// Previous uuid creation time -var _lastMSecs = 0, _lastNSecs = 0; - -// See https://github.com/broofa/node-uuid for API details -function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - - var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; - } - - return buf ? buf : unparse(b); -} - -// **`v4()` - Generate random UUID** - -// See https://github.com/broofa/node-uuid for API details -function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options == 'binary' ? new BufferClass(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || _rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || unparse(rnds); -} - -// Export public API -var uuid = v4; -uuid.v1 = v1; -uuid.v4 = v4; -uuid.parse = parse; -uuid.unparse = unparse; -uuid.BufferClass = BufferClass; - -module.exports = uuid; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/package.json deleted file mode 100644 index 561465e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "tempfile", - "version": "0.1.2", - "description": "Get a random temp file path", - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/sindresorhus/tempfile" - }, - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "files": [ - "index.js" - ], - "keywords": [ - "tmp", - "temp", - "temporary", - "tempfile", - "file", - "path", - "random", - "rand" - ], - "dependencies": { - "uuid": "~1.4.0" - }, - "devDependencies": { - "mocha": "*" - }, - "readme": "# tempfile [![Build Status](https://travis-ci.org/sindresorhus/tempfile.png?branch=master)](http://travis-ci.org/sindresorhus/tempfile)\n\n> Get a random temp file path\n\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/tempfile)\n\n```\nnpm install --save tempfile\n```\n\n\n## Example\n\n```js\nvar tempfile = require('tempfile');\ntempfile('.png');\n//=> /var/folders/_1/tk89k8215ts0rg0kmb096nj80000gn/T/4049f192-43e7-43b2-98d9-094e6760861b.png\n```\n\n## API\n\n### tempfile(extension)\n\n#### extension\n\nType: `String`\n\nOptionally supply an extension to append to the path.\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/sindresorhus/tempfile/issues" - }, - "homepage": "https://github.com/sindresorhus/tempfile", - "_id": "tempfile@0.1.2", - "dist": { - "shasum": "81d4e51f35856592f3b51d568135791af3b038e0" - }, - "_from": "tempfile@~0.1.2", - "_resolved": "https://registry.npmjs.org/tempfile/-/tempfile-0.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/readme.md deleted file mode 100644 index 672a0ac6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/readme.md +++ /dev/null @@ -1,36 +0,0 @@ -# tempfile [![Build Status](https://travis-ci.org/sindresorhus/tempfile.png?branch=master)](http://travis-ci.org/sindresorhus/tempfile) - -> Get a random temp file path - - -## Install - -Install with [npm](https://npmjs.org/package/tempfile) - -``` -npm install --save tempfile -``` - - -## Example - -```js -var tempfile = require('tempfile'); -tempfile('.png'); -//=> /var/folders/_1/tk89k8215ts0rg0kmb096nj80000gn/T/4049f192-43e7-43b2-98d9-094e6760861b.png -``` - -## API - -### tempfile(extension) - -#### extension - -Type: `String` - -Optionally supply an extension to append to the path. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/package.json deleted file mode 100644 index 6e75932a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "decompress", - "version": "0.1.6", - "description": "Easily extract zip, tar and tar.gz archives", - "keywords": [ - "extract", - "zip", - "tar", - "tar.gz" - ], - "homepage": "https://github.com/kevva/decompress", - "bugs": { - "url": "https://github.com/kevva/decompress/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/kevva/decompress.git" - }, - "scripts": { - "test": "mocha --reporter list" - }, - "main": "decompress.js", - "files": [ - "decompress.js" - ], - "dependencies": { - "adm-zip": "~0.4.3", - "mkdirp": "~0.3.5", - "mout": "~0.6.0", - "rimraf": "~2.2.2", - "stream-combiner": "~0.0.2", - "tar": "~0.1.18", - "tempfile": "~0.1.2" - }, - "devDependencies": { - "mocha": "~1.12.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "readme": "# decompress [![Build Status](https://secure.travis-ci.org/kevva/decompress.png?branch=master)](http://travis-ci.org/kevva/decompress)\n\nEasily extract `.zip`, `.tar` and `.tar.gz` archives. Based on the extract \nutility in [Bower](https://github.com/bower/bower).\n\n## Getting started\n\nInstall with [npm](https://npmjs.org/package/decompress): `npm install decompress`\n\n## Examples\n\nYou'll only need to pass a type into `ext` and it'll figure the rest out for \nyou.\n\n```js\nvar decompress = require('decompress');\nvar fs = require('fs');\n\nvar src = fs.createReadStream('foo.tar.gz');\nvar dest = decompress.extract({ ext: '.tar.gz' });\n\nsrc.pipe(dest);\n```\n\n## API\n\n### .extract(opts)\n\nExtract an archive using the `ext` option to determine which extractor to use. \nIf no `path` is specified it'll extract it to your current location.\n\n### .canExtract(src, mime)\n\nDetermine if a file can be extracted or not by checking the file extension \nand/or the MIME type.\n\n```js\ndecompress.canExtract('foo.zip');\n// => true\n\ndecompress.canExtract('application/zip');\n// => true\n```\n\n## Options\n\n### `ext`\n\nType: `String` \nDefault: `''`\n\nString that can be a file name, URL, MIME type etc.\n\n### `path`\n\nType: `String` \nDefault: `process.cwd()`\n\nPath to extract the archive to. If no `path` is defined it'll extract it to your \ncurrent location.\n\n### strip\n\nType: `Number` \nDefault: `0`\n\nEquivalent to `--strip-components` for tar.\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com)\n", - "readmeFilename": "README.md", - "_id": "decompress@0.1.6", - "dist": { - "shasum": "dc920bd81312e06f3e97aa46add56f1e95e21a4e" - }, - "_from": "decompress@~0.1.5", - "_resolved": "https://registry.npmjs.org/decompress/-/decompress-0.1.6.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/each-async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/each-async.js deleted file mode 100644 index a43b4363..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/each-async.js +++ /dev/null @@ -1,72 +0,0 @@ -/*! - each-async - Async concurrent iterator (async forEach) - https://github.com/sindresorhus/each-async - by Sindre Sorhus - MIT License -*/ -(function () { - 'use strict'; - - function once(fn) { - var called = false; - - if (typeof fn !== 'function') { - throw new TypeError; - } - - return function () { - if (called) { - throw new Error('Callback already called.'); - } - called = true; - fn.apply(this, arguments); - } - } - - function each(arr, next, cb) { - var failed = false; - var count = 0; - - cb = cb || function () {}; - - if (!Array.isArray(arr)) { - throw new TypeError('First argument must be an array'); - } - - if (typeof next !== 'function') { - throw new TypeError('Second argument must be a function'); - } - - var len = arr.length; - - if (!len) { - return cb(); - } - - function callback(err) { - if (failed) { - return; - } - - if (err !== undefined && err !== null) { - failed = true; - return cb(err); - } - - if (++count === len) { - return cb(); - } - } - - for (var i = 0; i < len; i++) { - next(arr[i], i, once(callback)); - } - } - - if (typeof module !== 'undefined' && module.exports) { - module.exports = each; - } else { - window.eachAsync = each; - } -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/package.json deleted file mode 100644 index 8e17c2d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "each-async", - "version": "0.1.2", - "description": "Async concurrent iterator", - "license": "MIT", - "main": "each-async.js", - "repository": { - "type": "git", - "url": "git://github.com/sindresorhus/each-async" - }, - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "files": [ - "each-async.js" - ], - "keywords": [ - "each", - "async", - "asynchronous", - "iteration", - "iterate", - "loop", - "foreach", - "parallel", - "concurrent", - "array", - "flow", - "control flow" - ], - "devDependencies": { - "mocha": "*" - }, - "readme": "# each-async [![Build Status](https://secure.travis-ci.org/sindresorhus/each-async.png?branch=master)](http://travis-ci.org/sindresorhus/each-async)\n\n> Async concurrent iterator (async forEach)\n\nLike [async.each()](https://github.com/caolan/async#eacharr-iterator-callback), but tiny.\n\nI often use `async.each()` for doing async operations when iterating, but I almost never use the other gadzillion methods in `async`.\n\nAsync iteration is one of the most used async control flow patterns.\n\n\n## Install\n\nDownload [manually](https://github.com/sindresorhus/each-async/releases) or with a package-manager.\n\n#### [npm](https://npmjs.org/package/each-async)\n\n```\nnpm install --save each-async\n```\n\n#### [Bower](http://bower.io)\n\n```\nbower install --save each-async\n```\n\n#### [Component](https://github.com/component/component)\n\n```\ncomponent install sindresorhus/each-async\n```\n\n\n## Examples\n\n### Node.js\n\n```js\neachAsync(['foo','bar','baz'], function (item, index, done) {\n\tconsole.log(item, index);\n\tdone();\n}, function (error) {\n\tconsole.log('finished');\n});\n//=> foo 0\n//=> bar 1\n//=> baz 2\n//=> finished\n```\n\n\n## API\n\n### eachAsync(array, callback, finishedCallback)\n\n#### array\n\nThe array you want to iterate.\n\n#### callback(item, index, done)\n\nA function which is called for each item in the array with the following arguments:\n\n- `item`: the current item in the array\n- `index`: the current index\n- `done([error])`: call this when you're done with an optional error. Supplying anything other than `undefined`/`null` will stop the iteration.\n\nNote that order is not guaranteed since each item is handled concurrently.\n\n#### finishedCallback(error)\n\nA function which is called when the iteration is finished or on the first error. First argument is the error passed from `done()` in the `callback`.\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/sindresorhus/each-async/issues" - }, - "homepage": "https://github.com/sindresorhus/each-async", - "_id": "each-async@0.1.2", - "dist": { - "shasum": "d5b900bd92705ed5b8cad3307a6536adb0f134c6" - }, - "_from": "each-async@~0.1.1", - "_resolved": "https://registry.npmjs.org/each-async/-/each-async-0.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/readme.md deleted file mode 100644 index e5e5bb14..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/readme.md +++ /dev/null @@ -1,78 +0,0 @@ -# each-async [![Build Status](https://secure.travis-ci.org/sindresorhus/each-async.png?branch=master)](http://travis-ci.org/sindresorhus/each-async) - -> Async concurrent iterator (async forEach) - -Like [async.each()](https://github.com/caolan/async#eacharr-iterator-callback), but tiny. - -I often use `async.each()` for doing async operations when iterating, but I almost never use the other gadzillion methods in `async`. - -Async iteration is one of the most used async control flow patterns. - - -## Install - -Download [manually](https://github.com/sindresorhus/each-async/releases) or with a package-manager. - -#### [npm](https://npmjs.org/package/each-async) - -``` -npm install --save each-async -``` - -#### [Bower](http://bower.io) - -``` -bower install --save each-async -``` - -#### [Component](https://github.com/component/component) - -``` -component install sindresorhus/each-async -``` - - -## Examples - -### Node.js - -```js -eachAsync(['foo','bar','baz'], function (item, index, done) { - console.log(item, index); - done(); -}, function (error) { - console.log('finished'); -}); -//=> foo 0 -//=> bar 1 -//=> baz 2 -//=> finished -``` - - -## API - -### eachAsync(array, callback, finishedCallback) - -#### array - -The array you want to iterate. - -#### callback(item, index, done) - -A function which is called for each item in the array with the following arguments: - -- `item`: the current item in the array -- `index`: the current index -- `done([error])`: call this when you're done with an optional error. Supplying anything other than `undefined`/`null` will stop the iteration. - -Note that order is not guaranteed since each item is handled concurrently. - -#### finishedCallback(error) - -A function which is called when the iteration is finished or on the first error. First argument is the error passed from `done()` in the `callback`. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.npmignore deleted file mode 100644 index 80e59ef5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -tests -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.travis.yml deleted file mode 100644 index 0bce8152..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: node_js -node_js: - - 0.8 - - 0.10 - -env: - - OPTIONALS=Y - - OPTIONALS=N - -install: - - if [[ "$OPTIONALS" == "Y" ]]; then npm install; fi - - if [[ "$OPTIONALS" == "N" ]]; then npm install --no-optional; fi diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/README.md deleted file mode 100644 index 5c0c081f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/README.md +++ /dev/null @@ -1,366 +0,0 @@ -# Request -- Simplified HTTP client - -[![NPM](https://nodei.co/npm/request.png)](https://nodei.co/npm/request/) - -## Super simple to use - -Request is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default. - -```javascript -var request = require('request'); -request('http://www.google.com', function (error, response, body) { - if (!error && response.statusCode == 200) { - console.log(body) // Print the google web page. - } -}) -``` - -## Streaming - -You can stream any response to a file stream. - -```javascript -request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png')) -``` - -You can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one). - -```javascript -fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json')) -``` - -Request can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers. - -```javascript -request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png')) -``` - -Now let’s get fancy. - -```javascript -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - if (req.method === 'PUT') { - req.pipe(request.put('http://mysite.com/doodle.png')) - } else if (req.method === 'GET' || req.method === 'HEAD') { - request.get('http://mysite.com/doodle.png').pipe(resp) - } - } -}) -``` - -You can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don't really care about security, you can do: - -```javascript -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - var x = request('http://mysite.com/doodle.png') - req.pipe(x) - x.pipe(resp) - } -}) -``` - -And since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :) - -```javascript -req.pipe(request('http://mysite.com/doodle.png')).pipe(resp) -``` - -Also, none of this new functionality conflicts with requests previous features, it just expands them. - -```javascript -var r = request.defaults({'proxy':'http://localproxy.com'}) - -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - r.get('http://google.com/doodle.png').pipe(resp) - } -}) -``` - -You can still use intermediate proxies, the requests will still follow HTTP forwards, etc. - -## Forms - -`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API. - -URL-encoded forms are simple. - -```javascript -request.post('http://service.com/upload', {form:{key:'value'}}) -// or -request.post('http://service.com/upload').form({key:'value'}) -``` - -For `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). You don’t need to worry about piping the form object or setting the headers, `request` will handle that for you. - -```javascript -var r = request.post('http://service.com/upload') -var form = r.form() -form.append('my_field', 'my_value') -form.append('my_buffer', new Buffer([1, 2, 3])) -form.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png')) -form.append('remote_file', request('http://google.com/doodle.png')) -``` - -## HTTP Authentication - -```javascript -request.get('http://some.server.com/').auth('username', 'password', false); -// or -request.get('http://some.server.com/', { - 'auth': { - 'user': 'username', - 'pass': 'password', - 'sendImmediately': false - } -}); -``` - -If passed as an option, `auth` should be a hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). The method form takes parameters `auth(username, password, sendImmediately)`. - -`sendImmediately` defaults to `true`, which causes a basic authentication header to be sent. If `sendImmediately` is `false`, then `request` will retry with a proper authentication header after receiving a `401` response from the server (which must contain a `WWW-Authenticate` header indicating the required authentication method). - -Digest authentication is supported, but it only works with `sendImmediately` set to `false`; otherwise `request` will send basic authentication on the initial request, which will probably cause the request to fail. - -## OAuth Signing - -```javascript -// Twitter OAuth -var qs = require('querystring') - , oauth = - { callback: 'http://mysite.com/callback/' - , consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - } - , url = 'https://api.twitter.com/oauth/request_token' - ; -request.post({url:url, oauth:oauth}, function (e, r, body) { - // Ideally, you would take the body in the response - // and construct a URL that a user clicks on (like a sign in button). - // The verifier is only available in the response after a user has - // verified with twitter that they are authorizing your app. - var access_token = qs.parse(body) - , oauth = - { consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - , token: access_token.oauth_token - , verifier: access_token.oauth_verifier - } - , url = 'https://api.twitter.com/oauth/access_token' - ; - request.post({url:url, oauth:oauth}, function (e, r, body) { - var perm_token = qs.parse(body) - , oauth = - { consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - , token: perm_token.oauth_token - , token_secret: perm_token.oauth_token_secret - } - , url = 'https://api.twitter.com/1.1/users/show.json?' - , params = - { screen_name: perm_token.screen_name - , user_id: perm_token.user_id - } - ; - url += qs.stringify(params) - request.get({url:url, oauth:oauth, json:true}, function (e, r, user) { - console.log(user) - }) - }) -}) -``` - -### Custom HTTP Headers - -HTTP Headers, such as `User-Agent`, can be set in the `options` object. -In the example below, we call the github API to find out the number -of stars and forks for the request repository. This requires a -custom `User-Agent` header as well as https. - -```javascript -var request = require('request'); - -var options = { - url: 'https://api.github.com/repos/mikeal/request', - headers: { - 'User-Agent': 'request' - } -}; - -function callback(error, response, body) { - if (!error && response.statusCode == 200) { - var info = JSON.parse(body); - console.log(info.stargazers_count + " Stars"); - console.log(info.forks_count + " Forks"); - } -} - -request(options, callback); -``` - -### request(options, callback) - -The first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional. - -* `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()` -* `qs` - object containing querystring values to be appended to the `uri` -* `method` - http method (default: `"GET"`) -* `headers` - http headers (default: `{}`) -* `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer` or `String`. -* `form` - when passed an object, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded; charset=utf-8` header. When passed no options, a `FormData` instance is returned (and is piped to request). -* `auth` - A hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). See documentation above. -* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON. -* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below. -* `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`) -* `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`) -* `maxRedirects` - the maximum number of redirects to follow (default: `10`) -* `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`. -* `pool` - A hash object containing the agents for these requests. If omitted, the request will use the global pool (which is set to node's default `maxSockets`) -* `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool. -* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request -* `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`) -* `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above. -* `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example). -* `strictSSL` - If `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option. -* `jar` - If `true`, remember cookies for future use (or define your custom cookie jar; see examples section) -* `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`. Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services) -* `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options. -* `localAddress` - Local interface to bind for network connections. - - -The callback argument gets 3 arguments: - -1. An `error` when applicable (usually from [`http.ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) object) -2. An [`http.IncomingMessage`](http://nodejs.org/api/http.html#http_http_incomingmessage) object -3. The third is the `response` body (`String` or `Buffer`, or JSON object if the `json` option is supplied) - -## Convenience methods - -There are also shorthand methods for different HTTP METHODs and some other conveniences. - -### request.defaults(options) - -This method returns a wrapper around the normal request API that defaults to whatever options you pass in to it. - -### request.put - -Same as `request()`, but defaults to `method: "PUT"`. - -```javascript -request.put(url) -``` - -### request.patch - -Same as `request()`, but defaults to `method: "PATCH"`. - -```javascript -request.patch(url) -``` - -### request.post - -Same as `request()`, but defaults to `method: "POST"`. - -```javascript -request.post(url) -``` - -### request.head - -Same as request() but defaults to `method: "HEAD"`. - -```javascript -request.head(url) -``` - -### request.del - -Same as `request()`, but defaults to `method: "DELETE"`. - -```javascript -request.del(url) -``` - -### request.get - -Same as `request()` (for uniformity). - -```javascript -request.get(url) -``` -### request.cookie - -Function that creates a new cookie. - -```javascript -request.cookie('cookie_string_here') -``` -### request.jar - -Function that creates a new cookie jar. - -```javascript -request.jar() -``` - - -## Examples: - -```javascript - var request = require('request') - , rand = Math.floor(Math.random()*100000000).toString() - ; - request( - { method: 'PUT' - , uri: 'http://mikeal.iriscouch.com/testjs/' + rand - , multipart: - [ { 'content-type': 'application/json' - , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) - } - , { body: 'I am an attachment' } - ] - } - , function (error, response, body) { - if(response.statusCode == 201){ - console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand) - } else { - console.log('error: '+ response.statusCode) - console.log(body) - } - } - ) -``` - -Cookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`). - -```javascript -var request = request.defaults({jar: true}) -request('http://www.google.com', function () { - request('http://images.google.com') -}) -``` - -To use a custom cookie jar (instead `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`) - -```javascript -var j = request.jar() -var request = request.defaults({jar:j}) -request('http://www.google.com', function () { - request('http://images.google.com') -}) -``` -OR - -Note that `setCookie` requires at least three parameters, and the last is required to be a callback. - -```javascript -var j = request.jar() -var cookie = request.cookie('your_cookie_here') -j.setCookie(cookie, uri, function (err, cookie){}) -request({url: 'http://www.google.com', jar: j}, function () { - request('http://images.google.com') -}) -``` diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/dns-request.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/dns-request.js deleted file mode 100644 index 6a847f6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/dns-request.js +++ /dev/null @@ -1,7 +0,0 @@ -var request = require('request') - , dns = require('dns') - ; - -function wrap (fn) { - var -} \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/index.js deleted file mode 100755 index 465e5ae3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/index.js +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2010-2012 Mikeal Rogers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -var optional = require('./lib/optional') - , cookie = optional('tough-cookie') - , Cookie = cookie && cookie.Cookie - , CookieJar = cookie && cookie.CookieJar - , cookieJar = CookieJar && new CookieJar - - , copy = require('./lib/copy') - , Request = require('./request') - ; - - - -// organize params for patch, post, put, head, del -function initParams(uri, options, callback) { - if ((typeof options === 'function') && !callback) callback = options - if (options && typeof options === 'object') { - options.uri = uri - } else if (typeof uri === 'string') { - options = {uri:uri} - } else { - options = uri - uri = options.uri - } - return { uri: uri, options: options, callback: callback } -} - -function request (uri, options, callback) { - if (typeof uri === 'undefined') throw new Error('undefined is not a valid uri or options object.') - if ((typeof options === 'function') && !callback) callback = options - if (options && typeof options === 'object') { - options.uri = uri - } else if (typeof uri === 'string') { - options = {uri:uri} - } else { - options = uri - } - - options = copy(options) - - if (callback) options.callback = callback - var r = new Request(options) - return r -} - -module.exports = request - -request.Request = Request; - -request.debug = process.env.NODE_DEBUG && /request/.test(process.env.NODE_DEBUG) - -request.initParams = initParams - -request.defaults = function (options, requester) { - var def = function (method) { - var d = function (uri, opts, callback) { - var params = initParams(uri, opts, callback) - for (var i in options) { - if (params.options[i] === undefined) params.options[i] = options[i] - } - if(typeof requester === 'function') { - if(method === request) { - method = requester - } else { - params.options._requester = requester - } - } - return method(params.options, params.callback) - } - return d - } - var de = def(request) - de.get = def(request.get) - de.patch = def(request.patch) - de.post = def(request.post) - de.put = def(request.put) - de.head = def(request.head) - de.del = def(request.del) - de.cookie = def(request.cookie) - de.jar = request.jar - return de -} - -function requester(params) { - if(typeof params.options._requester === 'function') { - return params.options._requester - } else { - return request - } -} - -request.forever = function (agentOptions, optionsArg) { - var options = {} - if (optionsArg) { - for (var option in optionsArg) { - options[option] = optionsArg[option] - } - } - if (agentOptions) options.agentOptions = agentOptions - options.forever = true - return request.defaults(options) -} - -request.get = request -request.post = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'POST' - return requester(params)(params.uri || null, params.options, params.callback) -} -request.put = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'PUT' - return requester(params)(params.uri || null, params.options, params.callback) -} -request.patch = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'PATCH' - return requester(params)(params.uri || null, params.options, params.callback) -} -request.head = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'HEAD' - if (params.options.body || - params.options.requestBodyStream || - (params.options.json && typeof params.options.json !== 'boolean') || - params.options.multipart) { - throw new Error("HTTP HEAD requests MUST NOT include a request body.") - } - - return requester(params)(params.uri || null, params.options, params.callback) -} -request.del = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'DELETE' - return requester(params)(params.uri || null, params.options, params.callback) -} -request.jar = function () { - return new CookieJar -} -request.cookie = function (str) { - if (str && str.uri) str = str.uri - if (typeof str !== 'string') throw new Error("The cookie function only accepts STRING as param") - return new Cookie(str) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/copy.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/copy.js deleted file mode 100644 index 56831ff8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/copy.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = -function copy (obj) { - var o = {} - Object.keys(obj).forEach(function (i) { - o[i] = obj[i] - }) - return o -} \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/debug.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/debug.js deleted file mode 100644 index fa27b24b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/debug.js +++ /dev/null @@ -1,7 +0,0 @@ -var util = require('util') - -module.exports = -function debug () { - if (/\brequest\b/.test(process.env.NODE_DEBUG)) - console.error('REQUEST %s', util.format.apply(util, arguments)) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/getSafe.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/getSafe.js deleted file mode 100644 index 28e07ea5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/getSafe.js +++ /dev/null @@ -1,34 +0,0 @@ -// Safe toJSON -module.exports = -function getSafe (self, uuid) { - if (typeof self === 'object' || typeof self === 'function') var safe = {} - if (Array.isArray(self)) var safe = [] - - var recurse = [] - - Object.defineProperty(self, uuid, {}) - - var attrs = Object.keys(self).filter(function (i) { - if (i === uuid) return false - if ( (typeof self[i] !== 'object' && typeof self[i] !== 'function') || self[i] === null) return true - return !(Object.getOwnPropertyDescriptor(self[i], uuid)) - }) - - - for (var i=0;i<attrs.length;i++) { - if ( (typeof self[attrs[i]] !== 'object' && typeof self[attrs[i]] !== 'function') || - self[attrs[i]] === null - ) { - safe[attrs[i]] = self[attrs[i]] - } else { - recurse.push(attrs[i]) - Object.defineProperty(self[attrs[i]], uuid, {}) - } - } - - for (var i=0;i<recurse.length;i++) { - safe[recurse[i]] = getSafe(self[recurse[i]], uuid) - } - - return safe -} \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/optional.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/optional.js deleted file mode 100644 index 0c4fe853..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/optional.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = function(module) { - try { - return require(module); - } catch (e) {} -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/README.md deleted file mode 100644 index 763564e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/README.md +++ /dev/null @@ -1,4 +0,0 @@ -aws-sign -======== - -AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/index.js deleted file mode 100644 index 576e49dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/index.js +++ /dev/null @@ -1,202 +0,0 @@ - -/*! - * knox - auth - * Copyright(c) 2010 LearnBoost <dev@learnboost.com> - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var crypto = require('crypto') - , parse = require('url').parse - ; - -/** - * Valid keys. - */ - -var keys = - [ 'acl' - , 'location' - , 'logging' - , 'notification' - , 'partNumber' - , 'policy' - , 'requestPayment' - , 'torrent' - , 'uploadId' - , 'uploads' - , 'versionId' - , 'versioning' - , 'versions' - , 'website' - ] - -/** - * Return an "Authorization" header value with the given `options` - * in the form of "AWS <key>:<signature>" - * - * @param {Object} options - * @return {String} - * @api private - */ - -function authorization (options) { - return 'AWS ' + options.key + ':' + sign(options) -} - -module.exports = authorization -module.exports.authorization = authorization - -/** - * Simple HMAC-SHA1 Wrapper - * - * @param {Object} options - * @return {String} - * @api private - */ - -function hmacSha1 (options) { - return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64') -} - -module.exports.hmacSha1 = hmacSha1 - -/** - * Create a base64 sha1 HMAC for `options`. - * - * @param {Object} options - * @return {String} - * @api private - */ - -function sign (options) { - options.message = stringToSign(options) - return hmacSha1(options) -} -module.exports.sign = sign - -/** - * Create a base64 sha1 HMAC for `options`. - * - * Specifically to be used with S3 presigned URLs - * - * @param {Object} options - * @return {String} - * @api private - */ - -function signQuery (options) { - options.message = queryStringToSign(options) - return hmacSha1(options) -} -module.exports.signQuery= signQuery - -/** - * Return a string for sign() with the given `options`. - * - * Spec: - * - * <verb>\n - * <md5>\n - * <content-type>\n - * <date>\n - * [headers\n] - * <resource> - * - * @param {Object} options - * @return {String} - * @api private - */ - -function stringToSign (options) { - var headers = options.amazonHeaders || '' - if (headers) headers += '\n' - var r = - [ options.verb - , options.md5 - , options.contentType - , options.date ? options.date.toUTCString() : '' - , headers + options.resource - ] - return r.join('\n') -} -module.exports.queryStringToSign = stringToSign - -/** - * Return a string for sign() with the given `options`, but is meant exclusively - * for S3 presigned URLs - * - * Spec: - * - * <date>\n - * <resource> - * - * @param {Object} options - * @return {String} - * @api private - */ - -function queryStringToSign (options){ - return 'GET\n\n\n' + options.date + '\n' + options.resource -} -module.exports.queryStringToSign = queryStringToSign - -/** - * Perform the following: - * - * - ignore non-amazon headers - * - lowercase fields - * - sort lexicographically - * - trim whitespace between ":" - * - join with newline - * - * @param {Object} headers - * @return {String} - * @api private - */ - -function canonicalizeHeaders (headers) { - var buf = [] - , fields = Object.keys(headers) - ; - for (var i = 0, len = fields.length; i < len; ++i) { - var field = fields[i] - , val = headers[field] - , field = field.toLowerCase() - ; - if (0 !== field.indexOf('x-amz')) continue - buf.push(field + ':' + val) - } - return buf.sort().join('\n') -} -module.exports.canonicalizeHeaders = canonicalizeHeaders - -/** - * Perform the following: - * - * - ignore non sub-resources - * - sort lexicographically - * - * @param {String} resource - * @return {String} - * @api private - */ - -function canonicalizeResource (resource) { - var url = parse(resource, true) - , path = url.pathname - , buf = [] - ; - - Object.keys(url.query).forEach(function(key){ - if (!~keys.indexOf(key)) return - var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key]) - buf.push(key + val) - }) - - return path + (buf.length ? '?' + buf.sort().join('&') : '') -} -module.exports.canonicalizeResource = canonicalizeResource diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/package.json deleted file mode 100644 index ae98297e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "aws-sign2", - "description": "AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.", - "version": "0.5.0", - "repository": { - "url": "https://github.com/mikeal/aws-sign" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "aws-sign\n========\n\nAWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/aws-sign/issues" - }, - "homepage": "https://github.com/mikeal/aws-sign", - "_id": "aws-sign2@0.5.0", - "dist": { - "shasum": "c57103f7a17fc037f02d7c2e64b602ea223f7d63" - }, - "_from": "aws-sign2@~0.5.0", - "_resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/README.md deleted file mode 100644 index 9d5b6634..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/README.md +++ /dev/null @@ -1,4 +0,0 @@ -forever-agent -============= - -HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/index.js deleted file mode 100644 index 1e8efcdf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/index.js +++ /dev/null @@ -1,119 +0,0 @@ -module.exports = ForeverAgent -ForeverAgent.SSL = ForeverAgentSSL - -var util = require('util') - , Agent = require('http').Agent - , net = require('net') - , tls = require('tls') - , AgentSSL = require('https').Agent - -function ForeverAgent(options) { - var self = this - self.options = options || {} - self.requests = {} - self.sockets = {} - self.freeSockets = {} - self.maxSockets = self.options.maxSockets || Agent.defaultMaxSockets - self.minSockets = self.options.minSockets || ForeverAgent.defaultMinSockets - self.on('free', function(socket, host, port) { - var name = host + ':' + port - if (self.requests[name] && self.requests[name].length) { - self.requests[name].shift().onSocket(socket) - } else if (self.sockets[name].length < self.minSockets) { - if (!self.freeSockets[name]) self.freeSockets[name] = [] - self.freeSockets[name].push(socket) - - // if an error happens while we don't use the socket anyway, meh, throw the socket away - var onIdleError = function() { - socket.destroy() - } - socket._onIdleError = onIdleError - socket.on('error', onIdleError) - } else { - // If there are no pending requests just destroy the - // socket and it will get removed from the pool. This - // gets us out of timeout issues and allows us to - // default to Connection:keep-alive. - socket.destroy() - } - }) - -} -util.inherits(ForeverAgent, Agent) - -ForeverAgent.defaultMinSockets = 5 - - -ForeverAgent.prototype.createConnection = net.createConnection -ForeverAgent.prototype.addRequestNoreuse = Agent.prototype.addRequest -ForeverAgent.prototype.addRequest = function(req, host, port) { - var name = host + ':' + port - if (this.freeSockets[name] && this.freeSockets[name].length > 0 && !req.useChunkedEncodingByDefault) { - var idleSocket = this.freeSockets[name].pop() - idleSocket.removeListener('error', idleSocket._onIdleError) - delete idleSocket._onIdleError - req._reusedSocket = true - req.onSocket(idleSocket) - } else { - this.addRequestNoreuse(req, host, port) - } -} - -ForeverAgent.prototype.removeSocket = function(s, name, host, port) { - if (this.sockets[name]) { - var index = this.sockets[name].indexOf(s) - if (index !== -1) { - this.sockets[name].splice(index, 1) - } - } else if (this.sockets[name] && this.sockets[name].length === 0) { - // don't leak - delete this.sockets[name] - delete this.requests[name] - } - - if (this.freeSockets[name]) { - var index = this.freeSockets[name].indexOf(s) - if (index !== -1) { - this.freeSockets[name].splice(index, 1) - if (this.freeSockets[name].length === 0) { - delete this.freeSockets[name] - } - } - } - - if (this.requests[name] && this.requests[name].length) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createSocket(name, host, port).emit('free') - } -} - -function ForeverAgentSSL (options) { - ForeverAgent.call(this, options) -} -util.inherits(ForeverAgentSSL, ForeverAgent) - -ForeverAgentSSL.prototype.createConnection = createConnectionSSL -ForeverAgentSSL.prototype.addRequestNoreuse = AgentSSL.prototype.addRequest - -function createConnectionSSL (port, host, options) { - if (typeof port === 'object') { - options = port; - } else if (typeof host === 'object') { - options = host; - } else if (typeof options === 'object') { - options = options; - } else { - options = {}; - } - - if (typeof port === 'number') { - options.port = port; - } - - if (typeof host === 'string') { - options.host = host; - } - - return tls.connect(options); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/package.json deleted file mode 100644 index 2044778a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "forever-agent", - "description": "HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.", - "version": "0.5.2", - "repository": { - "url": "https://github.com/mikeal/forever-agent" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "forever-agent\n=============\n\nHTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/forever-agent/issues" - }, - "homepage": "https://github.com/mikeal/forever-agent", - "_id": "forever-agent@0.5.2", - "dist": { - "shasum": "6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" - }, - "_from": "forever-agent@~0.5.0", - "_resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/License b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/License deleted file mode 100644 index c7ff12a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/License +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/Readme.md deleted file mode 100644 index dc73c463..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/Readme.md +++ /dev/null @@ -1,163 +0,0 @@ -# Form-Data [![Build Status](https://travis-ci.org/felixge/node-form-data.png?branch=master)](https://travis-ci.org/felixge/node-form-data) [![Dependency Status](https://gemnasium.com/felixge/node-form-data.png)](https://gemnasium.com/felixge/node-form-data) - -A module to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. - -The API of this module is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. - -[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface -[streams2-thing]: http://nodejs.org/api/stream.html#stream_compatibility_with_older_node_versions - -## Install - -``` -npm install form-data -``` - -## Usage - -In this example we are constructing a form with 3 fields that contain a string, -a buffer and a file stream. - -``` javascript -var FormData = require('form-data'); -var fs = require('fs'); - -var form = new FormData(); -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_file', fs.createReadStream('/foo/bar.jpg')); -``` - -Also you can use http-response stream: - -``` javascript -var FormData = require('form-data'); -var http = require('http'); - -var form = new FormData(); - -http.request('http://nodejs.org/images/logo.png', function(response) { - form.append('my_field', 'my value'); - form.append('my_buffer', new Buffer(10)); - form.append('my_logo', response); -}); -``` - -Or @mikeal's request stream: - -``` javascript -var FormData = require('form-data'); -var request = require('request'); - -var form = new FormData(); - -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_logo', request('http://nodejs.org/images/logo.png')); -``` - -In order to submit this form to a web application, call ```submit(url, [callback])``` method: - -``` javascript -form.submit('http://example.org/', function(err, res) { - // res – response object (http.IncomingMessage) // - res.resume(); // for node-0.10.x -}); - -``` - -For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. - -### Alternative submission methods - -You can use node's http client interface: - -``` javascript -var http = require('http'); - -var request = http.request({ - method: 'post', - host: 'example.org', - path: '/upload', - headers: form.getHeaders() -}); - -form.pipe(request); - -request.on('response', function(res) { - console.log(res.statusCode); -}); -``` - -Or if you would prefer the `'Content-Length'` header to be set for you: - -``` javascript -form.submit('example.org/upload', function(err, res) { - console.log(res.statusCode); -}); -``` - -To use custom headers and pre-known length in parts: - -``` javascript -var CRLF = '\r\n'; -var form = new FormData(); - -var options = { - header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, - knownLength: 1 -}; - -form.append('my_buffer', buffer, options); - -form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); -}); -``` - -Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: - -``` javascript -someModule.stream(function(err, stdout, stderr) { - if (err) throw err; - - var form = new FormData(); - - form.append('file', stdout, { - filename: 'unicycle.jpg', - contentType: 'image/jpg', - knownLength: 19806 - }); - - form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); - }); -}); -``` - -For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: - -``` javascript -form.submit({ - host: 'example.com', - path: '/probably.php?extra=params', - auth: 'username:password' -}, function(err, res) { - console.log(res.statusCode); -}); -``` - -## Notes - -- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. -- If it feels like FormData hangs after submit and you're on ```node-0.10```, please check [Compatibility with Older Node Versions][streams2-thing] - -## TODO - -- Add new streams (0.10) support and try really hard not to break it for 0.8.x. - -## License - -Form-Data is licensed under the MIT license. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/lib/form_data.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/lib/form_data.js deleted file mode 100644 index d1064748..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/lib/form_data.js +++ /dev/null @@ -1,325 +0,0 @@ -var CombinedStream = require('combined-stream'); -var util = require('util'); -var path = require('path'); -var http = require('http'); -var https = require('https'); -var parseUrl = require('url').parse; -var fs = require('fs'); -var mime = require('mime'); -var async = require('async'); - -module.exports = FormData; -function FormData() { - this._overheadLength = 0; - this._valueLength = 0; - this._lengthRetrievers = []; - - CombinedStream.call(this); -} -util.inherits(FormData, CombinedStream); - -FormData.LINE_BREAK = '\r\n'; - -FormData.prototype.append = function(field, value, options) { - options = options || {}; - - var append = CombinedStream.prototype.append.bind(this); - - // all that streamy business can't handle numbers - if (typeof value == 'number') value = ''+value; - - // https://github.com/felixge/node-form-data/issues/38 - if (util.isArray(value)) { - // Please convert your array into string - // the way web server expects it - this._error(new Error('Arrays are not supported.')); - return; - } - - var header = this._multiPartHeader(field, value, options); - var footer = this._multiPartFooter(field, value, options); - - append(header); - append(value); - append(footer); - - // pass along options.knownLength - this._trackLength(header, value, options); -}; - -FormData.prototype._trackLength = function(header, value, options) { - var valueLength = 0; - - // used w/ getLengthSync(), when length is known. - // e.g. for streaming directly from a remote server, - // w/ a known file a size, and not wanting to wait for - // incoming file to finish to get its size. - if (options.knownLength != null) { - valueLength += +options.knownLength; - } else if (Buffer.isBuffer(value)) { - valueLength = value.length; - } else if (typeof value === 'string') { - valueLength = Buffer.byteLength(value); - } - - this._valueLength += valueLength; - - // @check why add CRLF? does this account for custom/multiple CRLFs? - this._overheadLength += - Buffer.byteLength(header) + - + FormData.LINE_BREAK.length; - - // empty or either doesn't have path or not an http response - if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) { - return; - } - - // no need to bother with the length - if (!options.knownLength) - this._lengthRetrievers.push(function(next) { - - if (value.hasOwnProperty('fd')) { - fs.stat(value.path, function(err, stat) { - if (err) { - next(err); - return; - } - - next(null, stat.size); - }); - - // or http response - } else if (value.hasOwnProperty('httpVersion')) { - next(null, +value.headers['content-length']); - - // or request stream http://github.com/mikeal/request - } else if (value.hasOwnProperty('httpModule')) { - // wait till response come back - value.on('response', function(response) { - value.pause(); - next(null, +response.headers['content-length']); - }); - value.resume(); - - // something else - } else { - next('Unknown stream'); - } - }); -}; - -FormData.prototype._multiPartHeader = function(field, value, options) { - var boundary = this.getBoundary(); - var header = ''; - - // custom header specified (as string)? - // it becomes responsible for boundary - // (e.g. to handle extra CRLFs on .NET servers) - if (options.header != null) { - header = options.header; - } else { - header += '--' + boundary + FormData.LINE_BREAK + - 'Content-Disposition: form-data; name="' + field + '"'; - - // fs- and request- streams have path property - // or use custom filename and/or contentType - // TODO: Use request's response mime-type - if (options.filename || value.path) { - header += - '; filename="' + path.basename(options.filename || value.path) + '"' + FormData.LINE_BREAK + - 'Content-Type: ' + (options.contentType || mime.lookup(options.filename || value.path)); - - // http response has not - } else if (value.readable && value.hasOwnProperty('httpVersion')) { - header += - '; filename="' + path.basename(value.client._httpMessage.path) + '"' + FormData.LINE_BREAK + - 'Content-Type: ' + value.headers['content-type']; - } - - header += FormData.LINE_BREAK + FormData.LINE_BREAK; - } - - return header; -}; - -FormData.prototype._multiPartFooter = function(field, value, options) { - return function(next) { - var footer = FormData.LINE_BREAK; - - var lastPart = (this._streams.length === 0); - if (lastPart) { - footer += this._lastBoundary(); - } - - next(footer); - }.bind(this); -}; - -FormData.prototype._lastBoundary = function() { - return '--' + this.getBoundary() + '--'; -}; - -FormData.prototype.getHeaders = function(userHeaders) { - var formHeaders = { - 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() - }; - - for (var header in userHeaders) { - formHeaders[header.toLowerCase()] = userHeaders[header]; - } - - return formHeaders; -} - -FormData.prototype.getCustomHeaders = function(contentType) { - contentType = contentType ? contentType : 'multipart/form-data'; - - var formHeaders = { - 'content-type': contentType + '; boundary=' + this.getBoundary(), - 'content-length': this.getLengthSync() - }; - - return formHeaders; -} - -FormData.prototype.getBoundary = function() { - if (!this._boundary) { - this._generateBoundary(); - } - - return this._boundary; -}; - -FormData.prototype._generateBoundary = function() { - // This generates a 50 character boundary similar to those used by Firefox. - // They are optimized for boyer-moore parsing. - var boundary = '--------------------------'; - for (var i = 0; i < 24; i++) { - boundary += Math.floor(Math.random() * 10).toString(16); - } - - this._boundary = boundary; -}; - -// Note: getLengthSync DOESN'T calculate streams length -// As workaround one can calculate file size manually -// and add it as knownLength option -FormData.prototype.getLengthSync = function(debug) { - var knownLength = this._overheadLength + this._valueLength; - - // Don't get confused, there are 3 "internal" streams for each keyval pair - // so it basically checks if there is any value added to the form - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - - // https://github.com/felixge/node-form-data/issues/40 - if (this._lengthRetrievers.length) { - // Some async length retrivers are present - // therefore synchronous length calculation is false. - // Please use getLength(callback) to get proper length - this._error(new Error('Cannot calculate proper length in synchronous way.')); - } - - return knownLength; -}; - -FormData.prototype.getLength = function(cb) { - var knownLength = this._overheadLength + this._valueLength; - - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - - if (!this._lengthRetrievers.length) { - process.nextTick(cb.bind(this, null, knownLength)); - return; - } - - async.parallel(this._lengthRetrievers, function(err, values) { - if (err) { - cb(err); - return; - } - - values.forEach(function(length) { - knownLength += length; - }); - - cb(null, knownLength); - }); -}; - -FormData.prototype.submit = function(params, cb) { - - var request - , options - , defaults = { - method : 'post', - headers: this.getHeaders() - }; - - // parse provided url if it's string - // or treat it as options object - if (typeof params == 'string') { - params = parseUrl(params); - - options = populate({ - port: params.port, - path: params.pathname, - host: params.hostname - }, defaults); - } - else // use custom params - { - options = populate(params, defaults); - // if no port provided use default one - if (!options.port) { - options.port = options.protocol == 'https:' ? 443 : 80; - } - } - - // https if specified, fallback to http in any other case - if (params.protocol == 'https:') { - request = https.request(options); - } else { - request = http.request(options); - } - - // get content length and fire away - this.getLength(function(err, length) { - - // TODO: Add chunked encoding when no length (if err) - - // add content length - request.setHeader('Content-Length', length); - - this.pipe(request); - if (cb) { - request.on('error', cb); - request.on('response', cb.bind(this, null)); - } - }.bind(this)); - - return request; -}; - -FormData.prototype._error = function(err) { - if (this.error) return; - - this.error = err; - this.pause(); - this.emit('error', err); -}; - -/* - * Santa's little helpers - */ - -// populates missing values -function populate(dst, src) { - for (var prop in src) { - if (!dst[prop]) dst[prop] = src[prop]; - } - return dst; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/LICENSE deleted file mode 100644 index b7f9d500..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010 Caolan McMahon - -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/README.md deleted file mode 100644 index 951f76e9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/README.md +++ /dev/null @@ -1,1425 +0,0 @@ -# Async.js - -Async is a utility module which provides straight-forward, powerful functions -for working with asynchronous JavaScript. Although originally designed for -use with [node.js](http://nodejs.org), it can also be used directly in the -browser. Also supports [component](https://github.com/component/component). - -Async provides around 20 functions that include the usual 'functional' -suspects (map, reduce, filter, each…) as well as some common patterns -for asynchronous control flow (parallel, series, waterfall…). All these -functions assume you follow the node.js convention of providing a single -callback as the last argument of your async function. - - -## Quick Examples - -```javascript -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); - -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); - -async.parallel([ - function(){ ... }, - function(){ ... } -], callback); - -async.series([ - function(){ ... }, - function(){ ... } -]); -``` - -There are many more functions available so take a look at the docs below for a -full list. This module aims to be comprehensive, so if you feel anything is -missing please create a GitHub issue for it. - -## Common Pitfalls - -### Binding a context to an iterator - -This section is really about bind, not about async. If you are wondering how to -make async execute your iterators in a given context, or are confused as to why -a method of another library isn't working as an iterator, study this example: - -```js -// Here is a simple object with an (unnecessarily roundabout) squaring method -var AsyncSquaringLibrary = { - squareExponent: 2, - square: function(number, callback){ - var result = Math.pow(number, this.squareExponent); - setTimeout(function(){ - callback(null, result); - }, 200); - } -}; - -async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){ - // result is [NaN, NaN, NaN] - // This fails because the `this.squareExponent` expression in the square - // function is not evaluated in the context of AsyncSquaringLibrary, and is - // therefore undefined. -}); - -async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){ - // result is [1, 4, 9] - // With the help of bind we can attach a context to the iterator before - // passing it to async. Now the square function will be executed in its - // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent` - // will be as expected. -}); -``` - -## Download - -The source is available for download from -[GitHub](http://github.com/caolan/async). -Alternatively, you can install using Node Package Manager (npm): - - npm install async - -__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed - -## In the Browser - -So far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage: - -```html -<script type="text/javascript" src="async.js"></script> -<script type="text/javascript"> - - async.map(data, asyncProcess, function(err, results){ - alert(results); - }); - -</script> -``` - -## Documentation - -### Collections - -* [each](#each) -* [eachSeries](#eachSeries) -* [eachLimit](#eachLimit) -* [map](#map) -* [mapSeries](#mapSeries) -* [mapLimit](#mapLimit) -* [filter](#filter) -* [filterSeries](#filterSeries) -* [reject](#reject) -* [rejectSeries](#rejectSeries) -* [reduce](#reduce) -* [reduceRight](#reduceRight) -* [detect](#detect) -* [detectSeries](#detectSeries) -* [sortBy](#sortBy) -* [some](#some) -* [every](#every) -* [concat](#concat) -* [concatSeries](#concatSeries) - -### Control Flow - -* [series](#series) -* [parallel](#parallel) -* [parallelLimit](#parallellimittasks-limit-callback) -* [whilst](#whilst) -* [doWhilst](#doWhilst) -* [until](#until) -* [doUntil](#doUntil) -* [forever](#forever) -* [waterfall](#waterfall) -* [compose](#compose) -* [applyEach](#applyEach) -* [applyEachSeries](#applyEachSeries) -* [queue](#queue) -* [cargo](#cargo) -* [auto](#auto) -* [iterator](#iterator) -* [apply](#apply) -* [nextTick](#nextTick) -* [times](#times) -* [timesSeries](#timesSeries) - -### Utils - -* [memoize](#memoize) -* [unmemoize](#unmemoize) -* [log](#log) -* [dir](#dir) -* [noConflict](#noConflict) - - -## Collections - -<a name="forEach" /> -<a name="each" /> -### each(arr, iterator, callback) - -Applies an iterator function to each item in an array, in parallel. -The iterator is called with an item from the list and a callback for when it -has finished. If the iterator passes an error to this callback, the main -callback for the each function is immediately called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err) which must be called once it has - completed. If no error has occured, the callback should be run without - arguments or with an explicit null argument. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - -```js -// assuming openFiles is an array of file names and saveFile is a function -// to save the modified contents of that file: - -async.each(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - ---------------------------------------- - -<a name="forEachSeries" /> -<a name="eachSeries" /> -### eachSeries(arr, iterator, callback) - -The same as each only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. This means the iterator functions will complete in order. - - ---------------------------------------- - -<a name="forEachLimit" /> -<a name="eachLimit" /> -### eachLimit(arr, limit, iterator, callback) - -The same as each only no more than "limit" iterators will be simultaneously -running at any time. - -Note that the items are not processed in batches, so there is no guarantee that - the first "limit" iterator functions will complete before any others are -started. - -__Arguments__ - -* arr - An array to iterate over. -* limit - The maximum number of iterators to run at any time. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err) which must be called once it has - completed. If no error has occured, the callback should be run without - arguments or with an explicit null argument. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - -```js -// Assume documents is an array of JSON objects and requestApi is a -// function that interacts with a rate-limited REST api. - -async.eachLimit(documents, 20, requestApi, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - ---------------------------------------- - -<a name="map" /> -### map(arr, iterator, callback) - -Produces a new array of values by mapping each value in the given array through -the iterator function. The iterator is called with an item from the array and a -callback for when it has finished processing. The callback takes 2 arguments, -an error and the transformed item from the array. If the iterator passes an -error to this callback, the main callback for the map function is immediately -called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order, however -the results array will be in the same order as the original array. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, transformed) which must be called once - it has completed with an error (which can be null) and a transformed item. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array of the - transformed items from the original array. - -__Example__ - -```js -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - ---------------------------------------- - -<a name="mapSeries" /> -### mapSeries(arr, iterator, callback) - -The same as map only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - - ---------------------------------------- - -<a name="mapLimit" /> -### mapLimit(arr, limit, iterator, callback) - -The same as map only no more than "limit" iterators will be simultaneously -running at any time. - -Note that the items are not processed in batches, so there is no guarantee that - the first "limit" iterator functions will complete before any others are -started. - -__Arguments__ - -* arr - An array to iterate over. -* limit - The maximum number of iterators to run at any time. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, transformed) which must be called once - it has completed with an error (which can be null) and a transformed item. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array of the - transformed items from the original array. - -__Example__ - -```js -async.mapLimit(['file1','file2','file3'], 1, fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - ---------------------------------------- - -<a name="filter" /> -### filter(arr, iterator, callback) - -__Alias:__ select - -Returns a new array of all the values which pass an async truth test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like fs.exists. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(results) - A callback which is called after all the iterator - functions have finished. - -__Example__ - -```js -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); -``` - ---------------------------------------- - -<a name="filterSeries" /> -### filterSeries(arr, iterator, callback) - -__alias:__ selectSeries - -The same as filter only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - ---------------------------------------- - -<a name="reject" /> -### reject(arr, iterator, callback) - -The opposite of filter. Removes values that pass an async truth test. - ---------------------------------------- - -<a name="rejectSeries" /> -### rejectSeries(arr, iterator, callback) - -The same as reject, only the iterator is applied to each item in the array -in series. - - ---------------------------------------- - -<a name="reduce" /> -### reduce(arr, memo, iterator, callback) - -__aliases:__ inject, foldl - -Reduces a list of values into a single value using an async iterator to return -each successive step. Memo is the initial state of the reduction. This -function only operates in series. For performance reasons, it may make sense to -split a call to this function into a parallel map, then use the normal -Array.prototype.reduce on the results. This function is for situations where -each step in the reduction needs to be async, if you can get the data before -reducing it then it's probably a good idea to do so. - -__Arguments__ - -* arr - An array to iterate over. -* memo - The initial state of the reduction. -* iterator(memo, item, callback) - A function applied to each item in the - array to produce the next step in the reduction. The iterator is passed a - callback(err, reduction) which accepts an optional error as its first - argument, and the state of the reduction as the second. If an error is - passed to the callback, the reduction is stopped and the main callback is - immediately called with the error. -* callback(err, result) - A callback which is called after all the iterator - functions have finished. Result is the reduced value. - -__Example__ - -```js -async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); -}, function(err, result){ - // result is now equal to the last value of memo, which is 6 -}); -``` - ---------------------------------------- - -<a name="reduceRight" /> -### reduceRight(arr, memo, iterator, callback) - -__Alias:__ foldr - -Same as reduce, only operates on the items in the array in reverse order. - - ---------------------------------------- - -<a name="detect" /> -### detect(arr, iterator, callback) - -Returns the first value in a list that passes an async truth test. The -iterator is applied in parallel, meaning the first iterator to return true will -fire the detect callback with that result. That means the result might not be -the first item in the original array (in terms of order) that passes the test. - -If order within the original array is important then look at detectSeries. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value undefined if none passed. - -__Example__ - -```js -async.detect(['file1','file2','file3'], fs.exists, function(result){ - // result now equals the first file in the list that exists -}); -``` - ---------------------------------------- - -<a name="detectSeries" /> -### detectSeries(arr, iterator, callback) - -The same as detect, only the iterator is applied to each item in the array -in series. This means the result is always the first in the original array (in -terms of array order) that passes the truth test. - - ---------------------------------------- - -<a name="sortBy" /> -### sortBy(arr, iterator, callback) - -Sorts a list by the results of running each value through an async iterator. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, sortValue) which must be called once it - has completed with an error (which can be null) and a value to use as the sort - criteria. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is the items from - the original array sorted by the values returned by the iterator calls. - -__Example__ - -```js -async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); -}, function(err, results){ - // results is now the original array of files sorted by - // modified date -}); -``` - ---------------------------------------- - -<a name="some" /> -### some(arr, iterator, callback) - -__Alias:__ any - -Returns true if at least one element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like fs.exists. Once any iterator -call returns true, the main callback is immediately called. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - either true or false depending on the values of the async tests. - -__Example__ - -```js -async.some(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then at least one of the files exists -}); -``` - ---------------------------------------- - -<a name="every" /> -### every(arr, iterator, callback) - -__Alias:__ all - -Returns true if every element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like fs.exists. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(result) - A callback which is called after all the iterator - functions have finished. Result will be either true or false depending on - the values of the async tests. - -__Example__ - -```js -async.every(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then every file exists -}); -``` - ---------------------------------------- - -<a name="concat" /> -### concat(arr, iterator, callback) - -Applies an iterator to each item in a list, concatenating the results. Returns the -concatenated list. The iterators are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of the arguments passed to the iterator function. - -__Arguments__ - -* arr - An array to iterate over -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, results) which must be called once it - has completed with an error (which can be null) and an array of results. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array containing - the concatenated results of the iterator function. - -__Example__ - -```js -async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories -}); -``` - ---------------------------------------- - -<a name="concatSeries" /> -### concatSeries(arr, iterator, callback) - -Same as async.concat, but executes in series instead of parallel. - - -## Control Flow - -<a name="series" /> -### series(tasks, [callback]) - -Run an array of functions in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run and the callback for the series is -immediately called with the value of the error. Once the tasks have completed, -the results are passed to the final callback as an array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.series. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback(err, result) it must call on completion with an error (which can - be null) and an optional result value. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - } -], -// optional callback -function(err, results){ - // results is now equal to ['one', 'two'] -}); - - -// an example using an object instead of an array -async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equal to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - -<a name="parallel" /> -### parallel(tasks, [callback]) - -Run an array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main callback is immediately called with the value of the error. -Once the tasks have completed, the results are passed to the final callback as an -array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.parallel. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback(err, result) it must call on completion with an error (which can - be null) and an optional result value. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.parallel([ - function(callback){ - setTimeout(function(){ - callback(null, 'one'); - }, 200); - }, - function(callback){ - setTimeout(function(){ - callback(null, 'two'); - }, 100); - } -], -// optional callback -function(err, results){ - // the results array will equal ['one','two'] even though - // the second function had a shorter timeout. -}); - - -// an example using an object instead of an array -async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equals to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - -<a name="parallel" /> -### parallelLimit(tasks, limit, [callback]) - -The same as parallel only the tasks are executed in parallel with a maximum of "limit" -tasks executing at any time. - -Note that the tasks are not executed in batches, so there is no guarantee that -the first "limit" tasks will complete before any others are started. - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback(err, result) it must call on completion with an error (which can - be null) and an optional result value. -* limit - The maximum number of tasks to run at any time. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - ---------------------------------------- - -<a name="whilst" /> -### whilst(test, fn, callback) - -Repeatedly call fn, while test returns true. Calls the callback when stopped, -or an error occurs. - -__Arguments__ - -* test() - synchronous truth test to perform before each execution of fn. -* fn(callback) - A function to call each time the test passes. The function is - passed a callback(err) which must be called once it has completed with an - optional error argument. -* callback(err) - A callback which is called after the test fails and repeated - execution of fn has stopped. - -__Example__ - -```js -var count = 0; - -async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } -); -``` - ---------------------------------------- - -<a name="doWhilst" /> -### doWhilst(fn, test, callback) - -The post check version of whilst. To reflect the difference in the order of operations `test` and `fn` arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. - ---------------------------------------- - -<a name="until" /> -### until(test, fn, callback) - -Repeatedly call fn, until test returns true. Calls the callback when stopped, -or an error occurs. - -The inverse of async.whilst. - ---------------------------------------- - -<a name="doUntil" /> -### doUntil(fn, test, callback) - -Like doWhilst except the test is inverted. Note the argument ordering differs from `until`. - ---------------------------------------- - -<a name="forever" /> -### forever(fn, callback) - -Calls the asynchronous function 'fn' repeatedly, in series, indefinitely. -If an error is passed to fn's callback then 'callback' is called with the -error, otherwise it will never be called. - ---------------------------------------- - -<a name="waterfall" /> -### waterfall(tasks, [callback]) - -Runs an array of functions in series, each passing their results to the next in -the array. However, if any of the functions pass an error to the callback, the -next function is not executed and the main callback is immediately called with -the error. - -__Arguments__ - -* tasks - An array of functions to run, each function is passed a - callback(err, result1, result2, ...) it must call on completion. The first - argument is an error (which can be null) and any further arguments will be - passed as arguments in order to the next task. -* callback(err, [results]) - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - -```js -async.waterfall([ - function(callback){ - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback){ - callback(null, 'three'); - }, - function(arg1, callback){ - // arg1 now equals 'three' - callback(null, 'done'); - } -], function (err, result) { - // result now equals 'done' -}); -``` - ---------------------------------------- -<a name="compose" /> -### compose(fn1, fn2...) - -Creates a function which is a composition of the passed asynchronous -functions. Each function consumes the return value of the function that -follows. Composing functions f(), g() and h() would produce the result of -f(g(h())), only this version uses callbacks to obtain the return values. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* functions... - the asynchronous functions to compose - - -__Example__ - -```js -function add1(n, callback) { - setTimeout(function () { - callback(null, n + 1); - }, 10); -} - -function mul3(n, callback) { - setTimeout(function () { - callback(null, n * 3); - }, 10); -} - -var add1mul3 = async.compose(mul3, add1); - -add1mul3(4, function (err, result) { - // result now equals 15 -}); -``` - ---------------------------------------- -<a name="applyEach" /> -### applyEach(fns, args..., callback) - -Applies the provided arguments to each function in the array, calling the -callback after all functions have completed. If you only provide the first -argument then it will return a function which lets you pass in the -arguments as if it were a single function call. - -__Arguments__ - -* fns - the asynchronous functions to all call with the same arguments -* args... - any number of separate arguments to pass to the function -* callback - the final argument should be the callback, called when all - functions have completed processing - - -__Example__ - -```js -async.applyEach([enableSearch, updateSchema], 'bucket', callback); - -// partial application example: -async.each( - buckets, - async.applyEach([enableSearch, updateSchema]), - callback -); -``` - ---------------------------------------- - -<a name="applyEachSeries" /> -### applyEachSeries(arr, iterator, callback) - -The same as applyEach only the functions are applied in series. - ---------------------------------------- - -<a name="queue" /> -### queue(worker, concurrency) - -Creates a queue object with the specified concurrency. Tasks added to the -queue will be processed in parallel (up to the concurrency limit). If all -workers are in progress, the task is queued until one is available. Once -a worker has completed a task, the task's callback is called. - -__Arguments__ - -* worker(task, callback) - An asynchronous function for processing a queued - task, which must call its callback(err) argument when finished, with an - optional error as an argument. -* concurrency - An integer for determining how many worker functions should be - run in parallel. - -__Queue objects__ - -The queue object returned by this function has the following properties and -methods: - -* length() - a function returning the number of items waiting to be processed. -* concurrency - an integer for determining how many worker functions should be - run in parallel. This property can be changed after a queue is created to - alter the concurrency on-the-fly. -* push(task, [callback]) - add a new task to the queue, the callback is called - once the worker has finished processing the task. - instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list. -* unshift(task, [callback]) - add a new task to the front of the queue. -* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued -* empty - a callback that is called when the last item from the queue is given to a worker -* drain - a callback that is called when the last item from the queue has returned from the worker - -__Example__ - -```js -// create a queue object with concurrency 2 - -var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); -}, 2); - - -// assign a callback -q.drain = function() { - console.log('all items have been processed'); -} - -// add some items to the queue - -q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); - -// add some items to the queue (batch-wise) - -q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing bar'); -}); - -// add some items to the front of the queue - -q.unshift({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -``` - ---------------------------------------- - -<a name="cargo" /> -### cargo(worker, [payload]) - -Creates a cargo object with the specified payload. Tasks added to the -cargo will be processed altogether (up to the payload limit). If the -worker is in progress, the task is queued until it is available. Once -the worker has completed some tasks, each callback of those tasks is called. - -__Arguments__ - -* worker(tasks, callback) - An asynchronous function for processing an array of - queued tasks, which must call its callback(err) argument when finished, with - an optional error as an argument. -* payload - An optional integer for determining how many tasks should be - processed per round; if omitted, the default is unlimited. - -__Cargo objects__ - -The cargo object returned by this function has the following properties and -methods: - -* length() - a function returning the number of items waiting to be processed. -* payload - an integer for determining how many tasks should be - process per round. This property can be changed after a cargo is created to - alter the payload on-the-fly. -* push(task, [callback]) - add a new task to the queue, the callback is called - once the worker has finished processing the task. - instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list. -* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued -* empty - a callback that is called when the last item from the queue is given to a worker -* drain - a callback that is called when the last item from the queue has returned from the worker - -__Example__ - -```js -// create a cargo object with payload 2 - -var cargo = async.cargo(function (tasks, callback) { - for(var i=0; i<tasks.length; i++){ - console.log('hello ' + tasks[i].name); - } - callback(); -}, 2); - - -// add some items - -cargo.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -cargo.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -cargo.push({name: 'baz'}, function (err) { - console.log('finished processing baz'); -}); -``` - ---------------------------------------- - -<a name="auto" /> -### auto(tasks, [callback]) - -Determines the best order for running functions based on their requirements. -Each function can optionally depend on other functions being completed first, -and each function is run as soon as its requirements are satisfied. If any of -the functions pass an error to their callback, that function will not complete -(so any other functions depending on it will not run) and the main callback -will be called immediately with the error. Functions also receive an object -containing the results of functions which have completed so far. - -Note, all functions are called with a results object as a second argument, -so it is unsafe to pass functions in the tasks object which cannot handle the -extra argument. For example, this snippet of code: - -```js -async.auto({ - readData: async.apply(fs.readFile, 'data.txt', 'utf-8') -}, callback); -``` - -will have the effect of calling readFile with the results object as the last -argument, which will fail: - -```js -fs.readFile('data.txt', 'utf-8', cb, {}); -``` - -Instead, wrap the call to readFile in a function which does not forward the -results object: - -```js -async.auto({ - readData: function(cb, results){ - fs.readFile('data.txt', 'utf-8', cb); - } -}, callback); -``` - -__Arguments__ - -* tasks - An object literal containing named functions or an array of - requirements, with the function itself the last item in the array. The key - used for each function or array is used when specifying requirements. The - function receives two arguments: (1) a callback(err, result) which must be - called when finished, passing an error (which can be null) and the result of - the function's execution, and (2) a results object, containing the results of - the previously executed functions. -* callback(err, results) - An optional callback which is called when all the - tasks have been completed. The callback will receive an error as an argument - if any tasks pass an error to their callback. Results will always be passed - but if an error occurred, no other tasks will be performed, and the results - object will only contain partial results. - - -__Example__ - -```js -async.auto({ - get_data: function(callback){ - // async code to get some data - }, - make_folder: function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - }, - write_file: ['get_data', 'make_folder', function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, filename); - }], - email_link: ['write_file', function(callback, results){ - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - }] -}); -``` - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - -```js -async.parallel([ - function(callback){ - // async code to get some data - }, - function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - } -], -function(err, results){ - async.series([ - function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - }, - function(callback){ - // once the file is written let's email a link to it... - } - ]); -}); -``` - -For a complicated series of async tasks using the auto function makes adding -new tasks much easier and makes the code more readable. - - ---------------------------------------- - -<a name="iterator" /> -### iterator(tasks) - -Creates an iterator function which calls the next function in the array, -returning a continuation to call the next one after that. It's also possible to -'peek' the next iterator by doing iterator.next(). - -This function is used internally by the async module but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* tasks - An array of functions to run. - -__Example__ - -```js -var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } -]); - -node> var iterator2 = iterator(); -'one' -node> var iterator3 = iterator2(); -'two' -node> iterator3(); -'three' -node> var nextfn = iterator2.next(); -node> nextfn(); -'three' -``` - ---------------------------------------- - -<a name="apply" /> -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied, a useful -shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - -```js -// using apply - -async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), -]); - - -// the same process without using apply - -async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - } -]); -``` - -It's possible to pass any number of additional arguments when calling the -continuation: - -```js -node> var fn = async.apply(sys.puts, 'one'); -node> fn('two', 'three'); -one -two -three -``` - ---------------------------------------- - -<a name="nextTick" /> -### nextTick(callback) - -Calls the callback on a later loop around the event loop. In node.js this just -calls process.nextTick, in the browser it falls back to setImmediate(callback) -if available, otherwise setTimeout(callback, 0), which means other higher priority -events may precede the execution of the callback. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* callback - The function to call on a later loop around the event loop. - -__Example__ - -```js -var call_order = []; -async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two'] -}); -call_order.push('one') -``` - -<a name="times" /> -### times(n, callback) - -Calls the callback n times and accumulates results in the same manner -you would use with async.map. - -__Arguments__ - -* n - The number of times to run the function. -* callback - The function to call n times. - -__Example__ - -```js -// Pretend this is some complicated async factory -var createUser = function(id, callback) { - callback(null, { - id: 'user' + id - }) -} -// generate 5 users -async.times(5, function(n, next){ - createUser(n, function(err, user) { - next(err, user) - }) -}, function(err, users) { - // we should now have 5 users -}); -``` - -<a name="timesSeries" /> -### timesSeries(n, callback) - -The same as times only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - - -## Utils - -<a name="memoize" /> -### memoize(fn, [hasher]) - -Caches the results of an async function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -The cache of results is exposed as the `memo` property of the function returned -by `memoize`. - -__Arguments__ - -* fn - the function you to proxy and cache results from. -* hasher - an optional function for generating a custom hash for storing - results, it has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - -```js -var slow_fn = function (name, callback) { - // do something - callback(null, result); -}; -var fn = async.memoize(slow_fn); - -// fn can now be used as if it were slow_fn -fn('some name', function () { - // callback -}); -``` - -<a name="unmemoize" /> -### unmemoize(fn) - -Undoes a memoized function, reverting it to the original, unmemoized -form. Comes handy in tests. - -__Arguments__ - -* fn - the memoized function - -<a name="log" /> -### log(function, arguments) - -Logs the result of an async function to the console. Only works in node.js or -in browsers that support console.log and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.log is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); -}; -``` -```js -node> async.log(hello, 'world'); -'hello world' -``` - ---------------------------------------- - -<a name="dir" /> -### dir(function, arguments) - -Logs the result of an async function to the console using console.dir to -display the properties of the resulting object. Only works in node.js or -in browsers that support console.dir and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.dir is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); -}; -``` -```js -node> async.dir(hello, 'world'); -{hello: 'world'} -``` - ---------------------------------------- - -<a name="noConflict" /> -### noConflict() - -Changes the value of async back to its original value, returning a reference to the -async object. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/component.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/component.json deleted file mode 100644 index bbb01154..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/component.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "async", - "repo": "caolan/async", - "description": "Higher-order functions and common patterns for asynchronous code", - "version": "0.1.23", - "keywords": [], - "dependencies": {}, - "development": {}, - "main": "lib/async.js", - "scripts": [ "lib/async.js" ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js deleted file mode 100755 index 1eebb153..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js +++ /dev/null @@ -1,958 +0,0 @@ -/*global setImmediate: false, setTimeout: false, console: false */ -(function () { - - var async = {}; - - // global on the server, window in the browser - var root, previous_async; - - root = this; - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - var called = false; - return function() { - if (called) throw new Error("Callback was already called."); - called = true; - fn.apply(root, arguments); - } - } - - //// cross-browser compatiblity functions //// - - var _each = function (arr, iterator) { - if (arr.forEach) { - return arr.forEach(iterator); - } - for (var i = 0; i < arr.length; i += 1) { - iterator(arr[i], i, arr); - } - }; - - var _map = function (arr, iterator) { - if (arr.map) { - return arr.map(iterator); - } - var results = []; - _each(arr, function (x, i, a) { - results.push(iterator(x, i, a)); - }); - return results; - }; - - var _reduce = function (arr, iterator, memo) { - if (arr.reduce) { - return arr.reduce(iterator, memo); - } - _each(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - }; - - var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - if (typeof process === 'undefined' || !(process.nextTick)) { - if (typeof setImmediate === 'function') { - async.nextTick = function (fn) { - // not a direct alias for IE10 compatibility - setImmediate(fn); - }; - async.setImmediate = async.nextTick; - } - else { - async.nextTick = function (fn) { - setTimeout(fn, 0); - }; - async.setImmediate = async.nextTick; - } - } - else { - async.nextTick = process.nextTick; - if (typeof setImmediate !== 'undefined') { - async.setImmediate = function (fn) { - // not a direct alias for IE10 compatibility - setImmediate(fn); - }; - } - else { - async.setImmediate = async.nextTick; - } - } - - async.each = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - _each(arr, function (x) { - iterator(x, only_once(function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed >= arr.length) { - callback(null); - } - } - })); - }); - }; - async.forEach = async.each; - - async.eachSeries = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - var iterate = function () { - iterator(arr[completed], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed >= arr.length) { - callback(null); - } - else { - iterate(); - } - } - }); - }; - iterate(); - }; - async.forEachSeries = async.eachSeries; - - async.eachLimit = function (arr, limit, iterator, callback) { - var fn = _eachLimit(limit); - fn.apply(null, [arr, iterator, callback]); - }; - async.forEachLimit = async.eachLimit; - - var _eachLimit = function (limit) { - - return function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length || limit <= 0) { - return callback(); - } - var completed = 0; - var started = 0; - var running = 0; - - (function replenish () { - if (completed >= arr.length) { - return callback(); - } - - while (running < limit && started < arr.length) { - started += 1; - running += 1; - iterator(arr[started - 1], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - running -= 1; - if (completed >= arr.length) { - callback(); - } - else { - replenish(); - } - } - }); - } - })(); - }; - }; - - - var doParallel = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.each].concat(args)); - }; - }; - var doParallelLimit = function(limit, fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [_eachLimit(limit)].concat(args)); - }; - }; - var doSeries = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.eachSeries].concat(args)); - }; - }; - - - var _asyncMap = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (err, v) { - results[x.index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - }; - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = function (arr, limit, iterator, callback) { - return _mapLimit(limit)(arr, iterator, callback); - }; - - var _mapLimit = function(limit) { - return doParallelLimit(limit, _asyncMap); - }; - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.reduce = function (arr, memo, iterator, callback) { - async.eachSeries(arr, function (x, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - // inject alias - async.inject = async.reduce; - // foldl alias - async.foldl = async.reduce; - - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, function (x) { - return x; - }).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - // foldr alias - async.foldr = async.reduceRight; - - var _filter = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.filter = doParallel(_filter); - async.filterSeries = doSeries(_filter); - // select alias - async.select = async.filter; - async.selectSeries = async.filterSeries; - - var _reject = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (!v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.reject = doParallel(_reject); - async.rejectSeries = doSeries(_reject); - - var _detect = function (eachfn, arr, iterator, main_callback) { - eachfn(arr, function (x, callback) { - iterator(x, function (result) { - if (result) { - main_callback(x); - main_callback = function () {}; - } - else { - callback(); - } - }); - }, function (err) { - main_callback(); - }); - }; - async.detect = doParallel(_detect); - async.detectSeries = doSeries(_detect); - - async.some = function (arr, iterator, main_callback) { - async.each(arr, function (x, callback) { - iterator(x, function (v) { - if (v) { - main_callback(true); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(false); - }); - }; - // any alias - async.any = async.some; - - async.every = function (arr, iterator, main_callback) { - async.each(arr, function (x, callback) { - iterator(x, function (v) { - if (!v) { - main_callback(false); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(true); - }); - }; - // all alias - async.all = async.every; - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - var fn = function (left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }; - callback(null, _map(results.sort(fn), function (x) { - return x.value; - })); - } - }); - }; - - async.auto = function (tasks, callback) { - callback = callback || function () {}; - var keys = _keys(tasks); - if (!keys.length) { - return callback(null); - } - - var results = {}; - - var listeners = []; - var addListener = function (fn) { - listeners.unshift(fn); - }; - var removeListener = function (fn) { - for (var i = 0; i < listeners.length; i += 1) { - if (listeners[i] === fn) { - listeners.splice(i, 1); - return; - } - } - }; - var taskComplete = function () { - _each(listeners.slice(0), function (fn) { - fn(); - }); - }; - - addListener(function () { - if (_keys(results).length === keys.length) { - callback(null, results); - callback = function () {}; - } - }); - - _each(keys, function (k) { - var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k]; - var taskCallback = function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _each(_keys(results), function(rkey) { - safeResults[rkey] = results[rkey]; - }); - safeResults[k] = args; - callback(err, safeResults); - // stop subsequent errors hitting callback multiple times - callback = function () {}; - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }; - var requires = task.slice(0, Math.abs(task.length - 1)) || []; - var ready = function () { - return _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - }; - if (ready()) { - task[task.length - 1](taskCallback, results); - } - else { - var listener = function () { - if (ready()) { - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - }; - addListener(listener); - } - }); - }; - - async.waterfall = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor !== Array) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - var wrapIterator = function (iterator) { - return function (err) { - if (err) { - callback.apply(null, arguments); - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - async.setImmediate(function () { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(async.iterator(tasks))(); - }; - - var _parallel = function(eachfn, tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - eachfn.map(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - eachfn.each(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.parallel = function (tasks, callback) { - _parallel({ map: async.map, each: async.each }, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback); - }; - - async.series = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.mapSeries(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - async.eachSeries(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.iterator = function (tasks) { - var makeCallback = function (index) { - var fn = function () { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - }; - return makeCallback(0); - }; - - async.apply = function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return fn.apply( - null, args.concat(Array.prototype.slice.call(arguments)) - ); - }; - }; - - var _concat = function (eachfn, arr, fn, callback) { - var r = []; - eachfn(arr, function (x, cb) { - fn(x, function (err, y) { - r = r.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, r); - }); - }; - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - if (test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.whilst(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.doWhilst = function (iterator, test, callback) { - iterator(function (err) { - if (err) { - return callback(err); - } - if (test()) { - async.doWhilst(iterator, test, callback); - } - else { - callback(); - } - }); - }; - - async.until = function (test, iterator, callback) { - if (!test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.until(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.doUntil = function (iterator, test, callback) { - iterator(function (err) { - if (err) { - return callback(err); - } - if (!test()) { - async.doUntil(iterator, test, callback); - } - else { - callback(); - } - }); - }; - - async.queue = function (worker, concurrency) { - if (concurrency === undefined) { - concurrency = 1; - } - function _insert(q, data, pos, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _each(data, function(task) { - var item = { - data: task, - callback: typeof callback === 'function' ? callback : null - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.saturated && q.tasks.length === concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - var workers = 0; - var q = { - tasks: [], - concurrency: concurrency, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - if (workers < q.concurrency && q.tasks.length) { - var task = q.tasks.shift(); - if (q.empty && q.tasks.length === 0) { - q.empty(); - } - workers += 1; - var next = function () { - workers -= 1; - if (task.callback) { - task.callback.apply(task, arguments); - } - if (q.drain && q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - var cb = only_once(next); - worker(task.data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - } - }; - return q; - }; - - async.cargo = function (worker, payload) { - var working = false, - tasks = []; - - var cargo = { - tasks: tasks, - payload: payload, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _each(data, function(task) { - tasks.push({ - data: task, - callback: typeof callback === 'function' ? callback : null - }); - if (cargo.saturated && tasks.length === payload) { - cargo.saturated(); - } - }); - async.setImmediate(cargo.process); - }, - process: function process() { - if (working) return; - if (tasks.length === 0) { - if(cargo.drain) cargo.drain(); - return; - } - - var ts = typeof payload === 'number' - ? tasks.splice(0, payload) - : tasks.splice(0); - - var ds = _map(ts, function (task) { - return task.data; - }); - - if(cargo.empty) cargo.empty(); - working = true; - worker(ds, function () { - working = false; - - var args = arguments; - _each(ts, function (data) { - if (data.callback) { - data.callback.apply(null, args); - } - }); - - process(); - }); - }, - length: function () { - return tasks.length; - }, - running: function () { - return working; - } - }; - return cargo; - }; - - var _console_fn = function (name) { - return function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - fn.apply(null, args.concat([function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (typeof console !== 'undefined') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _each(args, function (x) { - console[name](x); - }); - } - } - }])); - }; - }; - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - hasher = hasher || function (x) { - return x; - }; - var memoized = function () { - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - var key = hasher.apply(null, args); - if (key in memo) { - callback.apply(null, memo[key]); - } - else if (key in queues) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([function () { - memo[key] = arguments; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, arguments); - } - }])); - } - }; - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - async.times = function (count, iterator, callback) { - var counter = []; - for (var i = 0; i < count; i++) { - counter.push(i); - } - return async.map(counter, iterator, callback); - }; - - async.timesSeries = function (count, iterator, callback) { - var counter = []; - for (var i = 0; i < count; i++) { - counter.push(i); - } - return async.mapSeries(counter, iterator, callback); - }; - - async.compose = function (/* functions... */) { - var fns = Array.prototype.reverse.call(arguments); - return function () { - var that = this; - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([function () { - var err = arguments[0]; - var nextargs = Array.prototype.slice.call(arguments, 1); - cb(err, nextargs); - }])) - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }; - }; - - var _applyEach = function (eachfn, fns /*args...*/) { - var go = function () { - var that = this; - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - return eachfn(fns, function (fn, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }; - if (arguments.length > 2) { - var args = Array.prototype.slice.call(arguments, 2); - return go.apply(this, args); - } - else { - return go; - } - }; - async.applyEach = doParallel(_applyEach); - async.applyEachSeries = doSeries(_applyEach); - - async.forever = function (fn, callback) { - function next(err) { - if (err) { - if (callback) { - return callback(err); - } - throw err; - } - fn(next); - } - next(); - }; - - // AMD / RequireJS - if (typeof define !== 'undefined' && define.amd) { - define([], function () { - return async; - }); - } - // Node.js - else if (typeof module !== 'undefined' && module.exports) { - module.exports = async; - } - // included directly via <script> tag - else { - root.async = async; - } - -}()); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/package.json deleted file mode 100644 index c586b717..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "async", - "description": "Higher-order functions and common patterns for asynchronous code", - "main": "./lib/async", - "author": { - "name": "Caolan McMahon" - }, - "version": "0.2.10", - "repository": { - "type": "git", - "url": "https://github.com/caolan/async.git" - }, - "bugs": { - "url": "https://github.com/caolan/async/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/caolan/async/raw/master/LICENSE" - } - ], - "devDependencies": { - "nodeunit": ">0.0.0", - "uglify-js": "1.2.x", - "nodelint": ">0.0.0" - }, - "jam": { - "main": "lib/async.js", - "include": [ - "lib/async.js", - "README.md", - "LICENSE" - ] - }, - "scripts": { - "test": "nodeunit test/test-async.js" - }, - "readme": "# Async.js\n\nAsync is a utility module which provides straight-forward, powerful functions\nfor working with asynchronous JavaScript. Although originally designed for\nuse with [node.js](http://nodejs.org), it can also be used directly in the\nbrowser. Also supports [component](https://github.com/component/component).\n\nAsync provides around 20 functions that include the usual 'functional'\nsuspects (map, reduce, filter, each…) as well as some common patterns\nfor asynchronous control flow (parallel, series, waterfall…). All these\nfunctions assume you follow the node.js convention of providing a single\ncallback as the last argument of your async function.\n\n\n## Quick Examples\n\n```javascript\nasync.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n\nasync.filter(['file1','file2','file3'], fs.exists, function(results){\n // results now equals an array of the existing files\n});\n\nasync.parallel([\n function(){ ... },\n function(){ ... }\n], callback);\n\nasync.series([\n function(){ ... },\n function(){ ... }\n]);\n```\n\nThere are many more functions available so take a look at the docs below for a\nfull list. This module aims to be comprehensive, so if you feel anything is\nmissing please create a GitHub issue for it.\n\n## Common Pitfalls\n\n### Binding a context to an iterator\n\nThis section is really about bind, not about async. If you are wondering how to\nmake async execute your iterators in a given context, or are confused as to why\na method of another library isn't working as an iterator, study this example:\n\n```js\n// Here is a simple object with an (unnecessarily roundabout) squaring method\nvar AsyncSquaringLibrary = {\n squareExponent: 2,\n square: function(number, callback){ \n var result = Math.pow(number, this.squareExponent);\n setTimeout(function(){\n callback(null, result);\n }, 200);\n }\n};\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){\n // result is [NaN, NaN, NaN]\n // This fails because the `this.squareExponent` expression in the square\n // function is not evaluated in the context of AsyncSquaringLibrary, and is\n // therefore undefined.\n});\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){\n // result is [1, 4, 9]\n // With the help of bind we can attach a context to the iterator before\n // passing it to async. Now the square function will be executed in its \n // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent`\n // will be as expected.\n});\n```\n\n## Download\n\nThe source is available for download from\n[GitHub](http://github.com/caolan/async).\nAlternatively, you can install using Node Package Manager (npm):\n\n npm install async\n\n__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed\n\n## In the Browser\n\nSo far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage:\n\n```html\n<script type=\"text/javascript\" src=\"async.js\"></script>\n<script type=\"text/javascript\">\n\n async.map(data, asyncProcess, function(err, results){\n alert(results);\n });\n\n</script>\n```\n\n## Documentation\n\n### Collections\n\n* [each](#each)\n* [eachSeries](#eachSeries)\n* [eachLimit](#eachLimit)\n* [map](#map)\n* [mapSeries](#mapSeries)\n* [mapLimit](#mapLimit)\n* [filter](#filter)\n* [filterSeries](#filterSeries)\n* [reject](#reject)\n* [rejectSeries](#rejectSeries)\n* [reduce](#reduce)\n* [reduceRight](#reduceRight)\n* [detect](#detect)\n* [detectSeries](#detectSeries)\n* [sortBy](#sortBy)\n* [some](#some)\n* [every](#every)\n* [concat](#concat)\n* [concatSeries](#concatSeries)\n\n### Control Flow\n\n* [series](#series)\n* [parallel](#parallel)\n* [parallelLimit](#parallellimittasks-limit-callback)\n* [whilst](#whilst)\n* [doWhilst](#doWhilst)\n* [until](#until)\n* [doUntil](#doUntil)\n* [forever](#forever)\n* [waterfall](#waterfall)\n* [compose](#compose)\n* [applyEach](#applyEach)\n* [applyEachSeries](#applyEachSeries)\n* [queue](#queue)\n* [cargo](#cargo)\n* [auto](#auto)\n* [iterator](#iterator)\n* [apply](#apply)\n* [nextTick](#nextTick)\n* [times](#times)\n* [timesSeries](#timesSeries)\n\n### Utils\n\n* [memoize](#memoize)\n* [unmemoize](#unmemoize)\n* [log](#log)\n* [dir](#dir)\n* [noConflict](#noConflict)\n\n\n## Collections\n\n<a name=\"forEach\" />\n<a name=\"each\" />\n### each(arr, iterator, callback)\n\nApplies an iterator function to each item in an array, in parallel.\nThe iterator is called with an item from the list and a callback for when it\nhas finished. If the iterator passes an error to this callback, the main\ncallback for the each function is immediately called with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// assuming openFiles is an array of file names and saveFile is a function\n// to save the modified contents of that file:\n\nasync.each(openFiles, saveFile, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name=\"forEachSeries\" />\n<a name=\"eachSeries\" />\n### eachSeries(arr, iterator, callback)\n\nThe same as each only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. This means the iterator functions will complete in order.\n\n\n---------------------------------------\n\n<a name=\"forEachLimit\" />\n<a name=\"eachLimit\" />\n### eachLimit(arr, limit, iterator, callback)\n\nThe same as each only no more than \"limit\" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first \"limit\" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// Assume documents is an array of JSON objects and requestApi is a\n// function that interacts with a rate-limited REST api.\n\nasync.eachLimit(documents, 20, requestApi, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name=\"map\" />\n### map(arr, iterator, callback)\n\nProduces a new array of values by mapping each value in the given array through\nthe iterator function. The iterator is called with an item from the array and a\ncallback for when it has finished processing. The callback takes 2 arguments, \nan error and the transformed item from the array. If the iterator passes an\nerror to this callback, the main callback for the map function is immediately\ncalled with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order, however\nthe results array will be in the same order as the original array.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name=\"mapSeries\" />\n### mapSeries(arr, iterator, callback)\n\nThe same as map only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n---------------------------------------\n\n<a name=\"mapLimit\" />\n### mapLimit(arr, limit, iterator, callback)\n\nThe same as map only no more than \"limit\" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first \"limit\" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.mapLimit(['file1','file2','file3'], 1, fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name=\"filter\" />\n### filter(arr, iterator, callback)\n\n__Alias:__ select\n\nReturns a new array of all the values which pass an async truth test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists. This operation is\nperformed in parallel, but the results array will be in the same order as the\noriginal.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(results) - A callback which is called after all the iterator\n functions have finished.\n\n__Example__\n\n```js\nasync.filter(['file1','file2','file3'], fs.exists, function(results){\n // results now equals an array of the existing files\n});\n```\n\n---------------------------------------\n\n<a name=\"filterSeries\" />\n### filterSeries(arr, iterator, callback)\n\n__alias:__ selectSeries\n\nThe same as filter only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n---------------------------------------\n\n<a name=\"reject\" />\n### reject(arr, iterator, callback)\n\nThe opposite of filter. Removes values that pass an async truth test.\n\n---------------------------------------\n\n<a name=\"rejectSeries\" />\n### rejectSeries(arr, iterator, callback)\n\nThe same as reject, only the iterator is applied to each item in the array\nin series.\n\n\n---------------------------------------\n\n<a name=\"reduce\" />\n### reduce(arr, memo, iterator, callback)\n\n__aliases:__ inject, foldl\n\nReduces a list of values into a single value using an async iterator to return\neach successive step. Memo is the initial state of the reduction. This\nfunction only operates in series. For performance reasons, it may make sense to\nsplit a call to this function into a parallel map, then use the normal\nArray.prototype.reduce on the results. This function is for situations where\neach step in the reduction needs to be async, if you can get the data before\nreducing it then it's probably a good idea to do so.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* memo - The initial state of the reduction.\n* iterator(memo, item, callback) - A function applied to each item in the\n array to produce the next step in the reduction. The iterator is passed a\n callback(err, reduction) which accepts an optional error as its first \n argument, and the state of the reduction as the second. If an error is \n passed to the callback, the reduction is stopped and the main callback is \n immediately called with the error.\n* callback(err, result) - A callback which is called after all the iterator\n functions have finished. Result is the reduced value.\n\n__Example__\n\n```js\nasync.reduce([1,2,3], 0, function(memo, item, callback){\n // pointless async:\n process.nextTick(function(){\n callback(null, memo + item)\n });\n}, function(err, result){\n // result is now equal to the last value of memo, which is 6\n});\n```\n\n---------------------------------------\n\n<a name=\"reduceRight\" />\n### reduceRight(arr, memo, iterator, callback)\n\n__Alias:__ foldr\n\nSame as reduce, only operates on the items in the array in reverse order.\n\n\n---------------------------------------\n\n<a name=\"detect\" />\n### detect(arr, iterator, callback)\n\nReturns the first value in a list that passes an async truth test. The\niterator is applied in parallel, meaning the first iterator to return true will\nfire the detect callback with that result. That means the result might not be\nthe first item in the original array (in terms of order) that passes the test.\n\nIf order within the original array is important then look at detectSeries.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n the first item in the array that passes the truth test (iterator) or the\n value undefined if none passed.\n\n__Example__\n\n```js\nasync.detect(['file1','file2','file3'], fs.exists, function(result){\n // result now equals the first file in the list that exists\n});\n```\n\n---------------------------------------\n\n<a name=\"detectSeries\" />\n### detectSeries(arr, iterator, callback)\n\nThe same as detect, only the iterator is applied to each item in the array\nin series. This means the result is always the first in the original array (in\nterms of array order) that passes the truth test.\n\n\n---------------------------------------\n\n<a name=\"sortBy\" />\n### sortBy(arr, iterator, callback)\n\nSorts a list by the results of running each value through an async iterator.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, sortValue) which must be called once it\n has completed with an error (which can be null) and a value to use as the sort\n criteria.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is the items from\n the original array sorted by the values returned by the iterator calls.\n\n__Example__\n\n```js\nasync.sortBy(['file1','file2','file3'], function(file, callback){\n fs.stat(file, function(err, stats){\n callback(err, stats.mtime);\n });\n}, function(err, results){\n // results is now the original array of files sorted by\n // modified date\n});\n```\n\n---------------------------------------\n\n<a name=\"some\" />\n### some(arr, iterator, callback)\n\n__Alias:__ any\n\nReturns true if at least one element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists. Once any iterator\ncall returns true, the main callback is immediately called.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n either true or false depending on the values of the async tests.\n\n__Example__\n\n```js\nasync.some(['file1','file2','file3'], fs.exists, function(result){\n // if result is true then at least one of the files exists\n});\n```\n\n---------------------------------------\n\n<a name=\"every\" />\n### every(arr, iterator, callback)\n\n__Alias:__ all\n\nReturns true if every element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called after all the iterator\n functions have finished. Result will be either true or false depending on\n the values of the async tests.\n\n__Example__\n\n```js\nasync.every(['file1','file2','file3'], fs.exists, function(result){\n // if result is true then every file exists\n});\n```\n\n---------------------------------------\n\n<a name=\"concat\" />\n### concat(arr, iterator, callback)\n\nApplies an iterator to each item in a list, concatenating the results. Returns the\nconcatenated list. The iterators are called in parallel, and the results are\nconcatenated as they return. There is no guarantee that the results array will\nbe returned in the original order of the arguments passed to the iterator function.\n\n__Arguments__\n\n* arr - An array to iterate over\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, results) which must be called once it \n has completed with an error (which can be null) and an array of results.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array containing\n the concatenated results of the iterator function.\n\n__Example__\n\n```js\nasync.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){\n // files is now a list of filenames that exist in the 3 directories\n});\n```\n\n---------------------------------------\n\n<a name=\"concatSeries\" />\n### concatSeries(arr, iterator, callback)\n\nSame as async.concat, but executes in series instead of parallel.\n\n\n## Control Flow\n\n<a name=\"series\" />\n### series(tasks, [callback])\n\nRun an array of functions in series, each one running once the previous\nfunction has completed. If any functions in the series pass an error to its\ncallback, no more functions are run and the callback for the series is\nimmediately called with the value of the error. Once the tasks have completed,\nthe results are passed to the final callback as an array.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.series.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed\n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.series([\n function(callback){\n // do some stuff ...\n callback(null, 'one');\n },\n function(callback){\n // do some more stuff ...\n callback(null, 'two');\n }\n],\n// optional callback\nfunction(err, results){\n // results is now equal to ['one', 'two']\n});\n\n\n// an example using an object instead of an array\nasync.series({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equal to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name=\"parallel\" />\n### parallel(tasks, [callback])\n\nRun an array of functions in parallel, without waiting until the previous\nfunction has completed. If any of the functions pass an error to its\ncallback, the main callback is immediately called with the value of the error.\nOnce the tasks have completed, the results are passed to the final callback as an\narray.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.parallel.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.parallel([\n function(callback){\n setTimeout(function(){\n callback(null, 'one');\n }, 200);\n },\n function(callback){\n setTimeout(function(){\n callback(null, 'two');\n }, 100);\n }\n],\n// optional callback\nfunction(err, results){\n // the results array will equal ['one','two'] even though\n // the second function had a shorter timeout.\n});\n\n\n// an example using an object instead of an array\nasync.parallel({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equals to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name=\"parallel\" />\n### parallelLimit(tasks, limit, [callback])\n\nThe same as parallel only the tasks are executed in parallel with a maximum of \"limit\" \ntasks executing at any time.\n\nNote that the tasks are not executed in batches, so there is no guarantee that \nthe first \"limit\" tasks will complete before any others are started.\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* limit - The maximum number of tasks to run at any time.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n---------------------------------------\n\n<a name=\"whilst\" />\n### whilst(test, fn, callback)\n\nRepeatedly call fn, while test returns true. Calls the callback when stopped,\nor an error occurs.\n\n__Arguments__\n\n* test() - synchronous truth test to perform before each execution of fn.\n* fn(callback) - A function to call each time the test passes. The function is\n passed a callback(err) which must be called once it has completed with an \n optional error argument.\n* callback(err) - A callback which is called after the test fails and repeated\n execution of fn has stopped.\n\n__Example__\n\n```js\nvar count = 0;\n\nasync.whilst(\n function () { return count < 5; },\n function (callback) {\n count++;\n setTimeout(callback, 1000);\n },\n function (err) {\n // 5 seconds have passed\n }\n);\n```\n\n---------------------------------------\n\n<a name=\"doWhilst\" />\n### doWhilst(fn, test, callback)\n\nThe post check version of whilst. To reflect the difference in the order of operations `test` and `fn` arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n\n---------------------------------------\n\n<a name=\"until\" />\n### until(test, fn, callback)\n\nRepeatedly call fn, until test returns true. Calls the callback when stopped,\nor an error occurs.\n\nThe inverse of async.whilst.\n\n---------------------------------------\n\n<a name=\"doUntil\" />\n### doUntil(fn, test, callback)\n\nLike doWhilst except the test is inverted. Note the argument ordering differs from `until`.\n\n---------------------------------------\n\n<a name=\"forever\" />\n### forever(fn, callback)\n\nCalls the asynchronous function 'fn' repeatedly, in series, indefinitely.\nIf an error is passed to fn's callback then 'callback' is called with the\nerror, otherwise it will never be called.\n\n---------------------------------------\n\n<a name=\"waterfall\" />\n### waterfall(tasks, [callback])\n\nRuns an array of functions in series, each passing their results to the next in\nthe array. However, if any of the functions pass an error to the callback, the\nnext function is not executed and the main callback is immediately called with\nthe error.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a \n callback(err, result1, result2, ...) it must call on completion. The first\n argument is an error (which can be null) and any further arguments will be \n passed as arguments in order to the next task.\n* callback(err, [results]) - An optional callback to run once all the functions\n have completed. This will be passed the results of the last task's callback.\n\n\n\n__Example__\n\n```js\nasync.waterfall([\n function(callback){\n callback(null, 'one', 'two');\n },\n function(arg1, arg2, callback){\n callback(null, 'three');\n },\n function(arg1, callback){\n // arg1 now equals 'three'\n callback(null, 'done');\n }\n], function (err, result) {\n // result now equals 'done' \n});\n```\n\n---------------------------------------\n<a name=\"compose\" />\n### compose(fn1, fn2...)\n\nCreates a function which is a composition of the passed asynchronous\nfunctions. Each function consumes the return value of the function that\nfollows. Composing functions f(), g() and h() would produce the result of\nf(g(h())), only this version uses callbacks to obtain the return values.\n\nEach function is executed with the `this` binding of the composed function.\n\n__Arguments__\n\n* functions... - the asynchronous functions to compose\n\n\n__Example__\n\n```js\nfunction add1(n, callback) {\n setTimeout(function () {\n callback(null, n + 1);\n }, 10);\n}\n\nfunction mul3(n, callback) {\n setTimeout(function () {\n callback(null, n * 3);\n }, 10);\n}\n\nvar add1mul3 = async.compose(mul3, add1);\n\nadd1mul3(4, function (err, result) {\n // result now equals 15\n});\n```\n\n---------------------------------------\n<a name=\"applyEach\" />\n### applyEach(fns, args..., callback)\n\nApplies the provided arguments to each function in the array, calling the\ncallback after all functions have completed. If you only provide the first\nargument then it will return a function which lets you pass in the\narguments as if it were a single function call.\n\n__Arguments__\n\n* fns - the asynchronous functions to all call with the same arguments\n* args... - any number of separate arguments to pass to the function\n* callback - the final argument should be the callback, called when all\n functions have completed processing\n\n\n__Example__\n\n```js\nasync.applyEach([enableSearch, updateSchema], 'bucket', callback);\n\n// partial application example:\nasync.each(\n buckets,\n async.applyEach([enableSearch, updateSchema]),\n callback\n);\n```\n\n---------------------------------------\n\n<a name=\"applyEachSeries\" />\n### applyEachSeries(arr, iterator, callback)\n\nThe same as applyEach only the functions are applied in series.\n\n---------------------------------------\n\n<a name=\"queue\" />\n### queue(worker, concurrency)\n\nCreates a queue object with the specified concurrency. Tasks added to the\nqueue will be processed in parallel (up to the concurrency limit). If all\nworkers are in progress, the task is queued until one is available. Once\na worker has completed a task, the task's callback is called.\n\n__Arguments__\n\n* worker(task, callback) - An asynchronous function for processing a queued\n task, which must call its callback(err) argument when finished, with an \n optional error as an argument.\n* concurrency - An integer for determining how many worker functions should be\n run in parallel.\n\n__Queue objects__\n\nThe queue object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* concurrency - an integer for determining how many worker functions should be\n run in parallel. This property can be changed after a queue is created to\n alter the concurrency on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* unshift(task, [callback]) - add a new task to the front of the queue.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a queue object with concurrency 2\n\nvar q = async.queue(function (task, callback) {\n console.log('hello ' + task.name);\n callback();\n}, 2);\n\n\n// assign a callback\nq.drain = function() {\n console.log('all items have been processed');\n}\n\n// add some items to the queue\n\nq.push({name: 'foo'}, function (err) {\n console.log('finished processing foo');\n});\nq.push({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n});\n\n// add some items to the queue (batch-wise)\n\nq.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) {\n console.log('finished processing bar');\n});\n\n// add some items to the front of the queue\n\nq.unshift({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n});\n```\n\n---------------------------------------\n\n<a name=\"cargo\" />\n### cargo(worker, [payload])\n\nCreates a cargo object with the specified payload. Tasks added to the\ncargo will be processed altogether (up to the payload limit). If the\nworker is in progress, the task is queued until it is available. Once\nthe worker has completed some tasks, each callback of those tasks is called.\n\n__Arguments__\n\n* worker(tasks, callback) - An asynchronous function for processing an array of\n queued tasks, which must call its callback(err) argument when finished, with \n an optional error as an argument.\n* payload - An optional integer for determining how many tasks should be\n processed per round; if omitted, the default is unlimited.\n\n__Cargo objects__\n\nThe cargo object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* payload - an integer for determining how many tasks should be\n process per round. This property can be changed after a cargo is created to\n alter the payload on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a cargo object with payload 2\n\nvar cargo = async.cargo(function (tasks, callback) {\n for(var i=0; i<tasks.length; i++){\n console.log('hello ' + tasks[i].name);\n }\n callback();\n}, 2);\n\n\n// add some items\n\ncargo.push({name: 'foo'}, function (err) {\n console.log('finished processing foo');\n});\ncargo.push({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n});\ncargo.push({name: 'baz'}, function (err) {\n console.log('finished processing baz');\n});\n```\n\n---------------------------------------\n\n<a name=\"auto\" />\n### auto(tasks, [callback])\n\nDetermines the best order for running functions based on their requirements.\nEach function can optionally depend on other functions being completed first,\nand each function is run as soon as its requirements are satisfied. If any of\nthe functions pass an error to their callback, that function will not complete\n(so any other functions depending on it will not run) and the main callback\nwill be called immediately with the error. Functions also receive an object\ncontaining the results of functions which have completed so far.\n\nNote, all functions are called with a results object as a second argument, \nso it is unsafe to pass functions in the tasks object which cannot handle the\nextra argument. For example, this snippet of code:\n\n```js\nasync.auto({\n readData: async.apply(fs.readFile, 'data.txt', 'utf-8')\n}, callback);\n```\n\nwill have the effect of calling readFile with the results object as the last\nargument, which will fail:\n\n```js\nfs.readFile('data.txt', 'utf-8', cb, {});\n```\n\nInstead, wrap the call to readFile in a function which does not forward the \nresults object:\n\n```js\nasync.auto({\n readData: function(cb, results){\n fs.readFile('data.txt', 'utf-8', cb);\n }\n}, callback);\n```\n\n__Arguments__\n\n* tasks - An object literal containing named functions or an array of\n requirements, with the function itself the last item in the array. The key\n used for each function or array is used when specifying requirements. The \n function receives two arguments: (1) a callback(err, result) which must be \n called when finished, passing an error (which can be null) and the result of \n the function's execution, and (2) a results object, containing the results of\n the previously executed functions.\n* callback(err, results) - An optional callback which is called when all the\n tasks have been completed. The callback will receive an error as an argument\n if any tasks pass an error to their callback. Results will always be passed\n\tbut if an error occurred, no other tasks will be performed, and the results\n\tobject will only contain partial results.\n \n\n__Example__\n\n```js\nasync.auto({\n get_data: function(callback){\n // async code to get some data\n },\n make_folder: function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n },\n write_file: ['get_data', 'make_folder', function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n callback(null, filename);\n }],\n email_link: ['write_file', function(callback, results){\n // once the file is written let's email a link to it...\n // results.write_file contains the filename returned by write_file.\n }]\n});\n```\n\nThis is a fairly trivial example, but to do this using the basic parallel and\nseries functions would look like this:\n\n```js\nasync.parallel([\n function(callback){\n // async code to get some data\n },\n function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n }\n],\nfunction(err, results){\n async.series([\n function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n },\n function(callback){\n // once the file is written let's email a link to it...\n }\n ]);\n});\n```\n\nFor a complicated series of async tasks using the auto function makes adding\nnew tasks much easier and makes the code more readable.\n\n\n---------------------------------------\n\n<a name=\"iterator\" />\n### iterator(tasks)\n\nCreates an iterator function which calls the next function in the array,\nreturning a continuation to call the next one after that. It's also possible to\n'peek' the next iterator by doing iterator.next().\n\nThis function is used internally by the async module but can be useful when\nyou want to manually control the flow of functions in series.\n\n__Arguments__\n\n* tasks - An array of functions to run.\n\n__Example__\n\n```js\nvar iterator = async.iterator([\n function(){ sys.p('one'); },\n function(){ sys.p('two'); },\n function(){ sys.p('three'); }\n]);\n\nnode> var iterator2 = iterator();\n'one'\nnode> var iterator3 = iterator2();\n'two'\nnode> iterator3();\n'three'\nnode> var nextfn = iterator2.next();\nnode> nextfn();\n'three'\n```\n\n---------------------------------------\n\n<a name=\"apply\" />\n### apply(function, arguments..)\n\nCreates a continuation function with some arguments already applied, a useful\nshorthand when combined with other control flow functions. Any arguments\npassed to the returned function are added to the arguments originally passed\nto apply.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to automatically apply when the\n continuation is called.\n\n__Example__\n\n```js\n// using apply\n\nasync.parallel([\n async.apply(fs.writeFile, 'testfile1', 'test1'),\n async.apply(fs.writeFile, 'testfile2', 'test2'),\n]);\n\n\n// the same process without using apply\n\nasync.parallel([\n function(callback){\n fs.writeFile('testfile1', 'test1', callback);\n },\n function(callback){\n fs.writeFile('testfile2', 'test2', callback);\n }\n]);\n```\n\nIt's possible to pass any number of additional arguments when calling the\ncontinuation:\n\n```js\nnode> var fn = async.apply(sys.puts, 'one');\nnode> fn('two', 'three');\none\ntwo\nthree\n```\n\n---------------------------------------\n\n<a name=\"nextTick\" />\n### nextTick(callback)\n\nCalls the callback on a later loop around the event loop. In node.js this just\ncalls process.nextTick, in the browser it falls back to setImmediate(callback)\nif available, otherwise setTimeout(callback, 0), which means other higher priority\nevents may precede the execution of the callback.\n\nThis is used internally for browser-compatibility purposes.\n\n__Arguments__\n\n* callback - The function to call on a later loop around the event loop.\n\n__Example__\n\n```js\nvar call_order = [];\nasync.nextTick(function(){\n call_order.push('two');\n // call_order now equals ['one','two']\n});\ncall_order.push('one')\n```\n\n<a name=\"times\" />\n### times(n, callback)\n\nCalls the callback n times and accumulates results in the same manner\nyou would use with async.map.\n\n__Arguments__\n\n* n - The number of times to run the function.\n* callback - The function to call n times.\n\n__Example__\n\n```js\n// Pretend this is some complicated async factory\nvar createUser = function(id, callback) {\n callback(null, {\n id: 'user' + id\n })\n}\n// generate 5 users\nasync.times(5, function(n, next){\n createUser(n, function(err, user) {\n next(err, user)\n })\n}, function(err, users) {\n // we should now have 5 users\n});\n```\n\n<a name=\"timesSeries\" />\n### timesSeries(n, callback)\n\nThe same as times only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n## Utils\n\n<a name=\"memoize\" />\n### memoize(fn, [hasher])\n\nCaches the results of an async function. When creating a hash to store function\nresults against, the callback is omitted from the hash and an optional hash\nfunction can be used.\n\nThe cache of results is exposed as the `memo` property of the function returned\nby `memoize`.\n\n__Arguments__\n\n* fn - the function you to proxy and cache results from.\n* hasher - an optional function for generating a custom hash for storing\n results, it has all the arguments applied to it apart from the callback, and\n must be synchronous.\n\n__Example__\n\n```js\nvar slow_fn = function (name, callback) {\n // do something\n callback(null, result);\n};\nvar fn = async.memoize(slow_fn);\n\n// fn can now be used as if it were slow_fn\nfn('some name', function () {\n // callback\n});\n```\n\n<a name=\"unmemoize\" />\n### unmemoize(fn)\n\nUndoes a memoized function, reverting it to the original, unmemoized\nform. Comes handy in tests.\n\n__Arguments__\n\n* fn - the memoized function\n\n<a name=\"log\" />\n### log(function, arguments)\n\nLogs the result of an async function to the console. Only works in node.js or\nin browsers that support console.log and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.log is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, 'hello ' + name);\n }, 1000);\n};\n```\n```js\nnode> async.log(hello, 'world');\n'hello world'\n```\n\n---------------------------------------\n\n<a name=\"dir\" />\n### dir(function, arguments)\n\nLogs the result of an async function to the console using console.dir to\ndisplay the properties of the resulting object. Only works in node.js or\nin browsers that support console.dir and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.dir is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, {hello: name});\n }, 1000);\n};\n```\n```js\nnode> async.dir(hello, 'world');\n{hello: 'world'}\n```\n\n---------------------------------------\n\n<a name=\"noConflict\" />\n### noConflict()\n\nChanges the value of async back to its original value, returning a reference to the\nasync object.\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/caolan/async", - "_id": "async@0.2.10", - "dist": { - "shasum": "a06e6818541aa1851d6ac822c8dbbfd6206eb72f" - }, - "_from": "async@~0.2.9", - "_resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore deleted file mode 100644 index aba34f01..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -*.un~ -/node_modules -/test/tmp diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/License b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/License deleted file mode 100644 index 4804b7ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/License +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Debuggable Limited <felix@debuggable.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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile deleted file mode 100644 index b4ff85a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -SHELL := /bin/bash - -test: - @./test/run.js - -.PHONY: test - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md deleted file mode 100644 index 1a9999eb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md +++ /dev/null @@ -1,132 +0,0 @@ -# combined-stream - -A stream that emits multiple other streams one after another. - -## Installation - -``` bash -npm install combined-stream -``` - -## Usage - -Here is a simple example that shows how you can use combined-stream to combine -two files into one: - -``` javascript -var CombinedStream = require('combined-stream'); -var fs = require('fs'); - -var combinedStream = CombinedStream.create(); -combinedStream.append(fs.createReadStream('file1.txt')); -combinedStream.append(fs.createReadStream('file2.txt')); - -combinedStream.pipe(fs.createWriteStream('combined.txt')); -``` - -While the example above works great, it will pause all source streams until -they are needed. If you don't want that to happen, you can set `pauseStreams` -to `false`: - -``` javascript -var CombinedStream = require('combined-stream'); -var fs = require('fs'); - -var combinedStream = CombinedStream.create({pauseStreams: false}); -combinedStream.append(fs.createReadStream('file1.txt')); -combinedStream.append(fs.createReadStream('file2.txt')); - -combinedStream.pipe(fs.createWriteStream('combined.txt')); -``` - -However, what if you don't have all the source streams yet, or you don't want -to allocate the resources (file descriptors, memory, etc.) for them right away? -Well, in that case you can simply provide a callback that supplies the stream -by calling a `next()` function: - -``` javascript -var CombinedStream = require('combined-stream'); -var fs = require('fs'); - -var combinedStream = CombinedStream.create(); -combinedStream.append(function(next) { - next(fs.createReadStream('file1.txt')); -}); -combinedStream.append(function(next) { - next(fs.createReadStream('file2.txt')); -}); - -combinedStream.pipe(fs.createWriteStream('combined.txt')); -``` - -## API - -### CombinedStream.create([options]) - -Returns a new combined stream object. Available options are: - -* `maxDataSize` -* `pauseStreams` - -The effect of those options is described below. - -### combinedStream.pauseStreams = true - -Whether to apply back pressure to the underlaying streams. If set to `false`, -the underlaying streams will never be paused. If set to `true`, the -underlaying streams will be paused right after being appended, as well as when -`delayedStream.pipe()` wants to throttle. - -### combinedStream.maxDataSize = 2 * 1024 * 1024 - -The maximum amount of bytes (or characters) to buffer for all source streams. -If this value is exceeded, `combinedStream` emits an `'error'` event. - -### combinedStream.dataSize = 0 - -The amount of bytes (or characters) currently buffered by `combinedStream`. - -### combinedStream.append(stream) - -Appends the given `stream` to the combinedStream object. If `pauseStreams` is -set to `true, this stream will also be paused right away. - -`streams` can also be a function that takes one parameter called `next`. `next` -is a function that must be invoked in order to provide the `next` stream, see -example above. - -Regardless of how the `stream` is appended, combined-stream always attaches an -`'error'` listener to it, so you don't have to do that manually. - -Special case: `stream` can also be a String or Buffer. - -### combinedStream.write(data) - -You should not call this, `combinedStream` takes care of piping the appended -streams into itself for you. - -### combinedStream.resume() - -Causes `combinedStream` to start drain the streams it manages. The function is -idempotent, and also emits a `'resume'` event each time which usually goes to -the stream that is currently being drained. - -### combinedStream.pause(); - -If `combinedStream.pauseStreams` is set to `false`, this does nothing. -Otherwise a `'pause'` event is emitted, this goes to the stream that is -currently being drained, so you can use it to apply back pressure. - -### combinedStream.end(); - -Sets `combinedStream.writable` to false, emits an `'end'` event, and removes -all streams from the queue. - -### combinedStream.destroy(); - -Same as `combinedStream.end()`, except it emits a `'close'` event instead of -`'end'`. - -## License - -combined-stream is licensed under the MIT license. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js deleted file mode 100644 index 32849fd1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js +++ /dev/null @@ -1,185 +0,0 @@ -var util = require('util'); -var Stream = require('stream').Stream; -var DelayedStream = require('delayed-stream'); - -module.exports = CombinedStream; -function CombinedStream() { - this.writable = false; - this.readable = true; - this.dataSize = 0; - this.maxDataSize = 2 * 1024 * 1024; - this.pauseStreams = true; - - this._released = false; - this._streams = []; - this._currentStream = null; -} -util.inherits(CombinedStream, Stream); - -CombinedStream.create = function(options) { - var combinedStream = new this(); - - options = options || {}; - for (var option in options) { - combinedStream[option] = options[option]; - } - - return combinedStream; -}; - -CombinedStream.isStreamLike = function(stream) { - return (typeof stream !== 'function') - && (typeof stream !== 'string') - && (typeof stream !== 'boolean') - && (typeof stream !== 'number') - && (!Buffer.isBuffer(stream)); -}; - -CombinedStream.prototype.append = function(stream) { - var isStreamLike = CombinedStream.isStreamLike(stream); - - if (isStreamLike) { - if (!(stream instanceof DelayedStream)) { - stream.on('data', this._checkDataSize.bind(this)); - - stream = DelayedStream.create(stream, { - maxDataSize: Infinity, - pauseStream: this.pauseStreams, - }); - } - - this._handleErrors(stream); - - if (this.pauseStreams) { - stream.pause(); - } - } - - this._streams.push(stream); - return this; -}; - -CombinedStream.prototype.pipe = function(dest, options) { - Stream.prototype.pipe.call(this, dest, options); - this.resume(); -}; - -CombinedStream.prototype._getNext = function() { - this._currentStream = null; - var stream = this._streams.shift(); - - - if (typeof stream == 'undefined') { - this.end(); - return; - } - - if (typeof stream !== 'function') { - this._pipeNext(stream); - return; - } - - var getStream = stream; - getStream(function(stream) { - var isStreamLike = CombinedStream.isStreamLike(stream); - if (isStreamLike) { - stream.on('data', this._checkDataSize.bind(this)); - this._handleErrors(stream); - } - - this._pipeNext(stream); - }.bind(this)); -}; - -CombinedStream.prototype._pipeNext = function(stream) { - this._currentStream = stream; - - var isStreamLike = CombinedStream.isStreamLike(stream); - if (isStreamLike) { - stream.on('end', this._getNext.bind(this)) - stream.pipe(this, {end: false}); - return; - } - - var value = stream; - this.write(value); - this._getNext(); -}; - -CombinedStream.prototype._handleErrors = function(stream) { - var self = this; - stream.on('error', function(err) { - self._emitError(err); - }); -}; - -CombinedStream.prototype.write = function(data) { - this.emit('data', data); -}; - -CombinedStream.prototype.pause = function() { - if (!this.pauseStreams) { - return; - } - - this.emit('pause'); -}; - -CombinedStream.prototype.resume = function() { - if (!this._released) { - this._released = true; - this.writable = true; - this._getNext(); - } - - this.emit('resume'); -}; - -CombinedStream.prototype.end = function() { - this._reset(); - this.emit('end'); -}; - -CombinedStream.prototype.destroy = function() { - this._reset(); - this.emit('close'); -}; - -CombinedStream.prototype._reset = function() { - this.writable = false; - this._streams = []; - this._currentStream = null; -}; - -CombinedStream.prototype._checkDataSize = function() { - this._updateDataSize(); - if (this.dataSize <= this.maxDataSize) { - return; - } - - var message = - 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' - this._emitError(new Error(message)); -}; - -CombinedStream.prototype._updateDataSize = function() { - this.dataSize = 0; - - var self = this; - this._streams.forEach(function(stream) { - if (!stream.dataSize) { - return; - } - - self.dataSize += stream.dataSize; - }); - - if (this._currentStream && this._currentStream.dataSize) { - this.dataSize += this._currentStream.dataSize; - } -}; - -CombinedStream.prototype._emitError = function(err) { - this._reset(); - this.emit('error', err); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore deleted file mode 100644 index 2fedb26c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -*.un~ -/node_modules/* diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License deleted file mode 100644 index 4804b7ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Debuggable Limited <felix@debuggable.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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile deleted file mode 100644 index b4ff85a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -SHELL := /bin/bash - -test: - @./test/run.js - -.PHONY: test - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md deleted file mode 100644 index 5cb5b35e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md +++ /dev/null @@ -1,154 +0,0 @@ -# delayed-stream - -Buffers events from a stream until you are ready to handle them. - -## Installation - -``` bash -npm install delayed-stream -``` - -## Usage - -The following example shows how to write a http echo server that delays its -response by 1000 ms. - -``` javascript -var DelayedStream = require('delayed-stream'); -var http = require('http'); - -http.createServer(function(req, res) { - var delayed = DelayedStream.create(req); - - setTimeout(function() { - res.writeHead(200); - delayed.pipe(res); - }, 1000); -}); -``` - -If you are not using `Stream#pipe`, you can also manually release the buffered -events by calling `delayedStream.resume()`: - -``` javascript -var delayed = DelayedStream.create(req); - -setTimeout(function() { - // Emit all buffered events and resume underlaying source - delayed.resume(); -}, 1000); -``` - -## Implementation - -In order to use this meta stream properly, here are a few things you should -know about the implementation. - -### Event Buffering / Proxying - -All events of the `source` stream are hijacked by overwriting the `source.emit` -method. Until node implements a catch-all event listener, this is the only way. - -However, delayed-stream still continues to emit all events it captures on the -`source`, regardless of whether you have released the delayed stream yet or -not. - -Upon creation, delayed-stream captures all `source` events and stores them in -an internal event buffer. Once `delayedStream.release()` is called, all -buffered events are emitted on the `delayedStream`, and the event buffer is -cleared. After that, delayed-stream merely acts as a proxy for the underlaying -source. - -### Error handling - -Error events on `source` are buffered / proxied just like any other events. -However, `delayedStream.create` attaches a no-op `'error'` listener to the -`source`. This way you only have to handle errors on the `delayedStream` -object, rather than in two places. - -### Buffer limits - -delayed-stream provides a `maxDataSize` property that can be used to limit -the amount of data being buffered. In order to protect you from bad `source` -streams that don't react to `source.pause()`, this feature is enabled by -default. - -## API - -### DelayedStream.create(source, [options]) - -Returns a new `delayedStream`. Available options are: - -* `pauseStream` -* `maxDataSize` - -The description for those properties can be found below. - -### delayedStream.source - -The `source` stream managed by this object. This is useful if you are -passing your `delayedStream` around, and you still want to access properties -on the `source` object. - -### delayedStream.pauseStream = true - -Whether to pause the underlaying `source` when calling -`DelayedStream.create()`. Modifying this property afterwards has no effect. - -### delayedStream.maxDataSize = 1024 * 1024 - -The amount of data to buffer before emitting an `error`. - -If the underlaying source is emitting `Buffer` objects, the `maxDataSize` -refers to bytes. - -If the underlaying source is emitting JavaScript strings, the size refers to -characters. - -If you know what you are doing, you can set this property to `Infinity` to -disable this feature. You can also modify this property during runtime. - -### delayedStream.maxDataSize = 1024 * 1024 - -The amount of data to buffer before emitting an `error`. - -If the underlaying source is emitting `Buffer` objects, the `maxDataSize` -refers to bytes. - -If the underlaying source is emitting JavaScript strings, the size refers to -characters. - -If you know what you are doing, you can set this property to `Infinity` to -disable this feature. - -### delayedStream.dataSize = 0 - -The amount of data buffered so far. - -### delayedStream.readable - -An ECMA5 getter that returns the value of `source.readable`. - -### delayedStream.resume() - -If the `delayedStream` has not been released so far, `delayedStream.release()` -is called. - -In either case, `source.resume()` is called. - -### delayedStream.pause() - -Calls `source.pause()`. - -### delayedStream.pipe(dest) - -Calls `delayedStream.resume()` and then proxies the arguments to `source.pipe`. - -### delayedStream.release() - -Emits and clears all events that have been buffered up so far. This does not -resume the underlaying source, use `delayedStream.resume()` instead. - -## License - -delayed-stream is licensed under the MIT license. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js deleted file mode 100644 index 7c10d482..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js +++ /dev/null @@ -1,99 +0,0 @@ -var Stream = require('stream').Stream; -var util = require('util'); - -module.exports = DelayedStream; -function DelayedStream() { - this.source = null; - this.dataSize = 0; - this.maxDataSize = 1024 * 1024; - this.pauseStream = true; - - this._maxDataSizeExceeded = false; - this._released = false; - this._bufferedEvents = []; -} -util.inherits(DelayedStream, Stream); - -DelayedStream.create = function(source, options) { - var delayedStream = new this(); - - options = options || {}; - for (var option in options) { - delayedStream[option] = options[option]; - } - - delayedStream.source = source; - - var realEmit = source.emit; - source.emit = function() { - delayedStream._handleEmit(arguments); - return realEmit.apply(source, arguments); - }; - - source.on('error', function() {}); - if (delayedStream.pauseStream) { - source.pause(); - } - - return delayedStream; -}; - -DelayedStream.prototype.__defineGetter__('readable', function() { - return this.source.readable; -}); - -DelayedStream.prototype.resume = function() { - if (!this._released) { - this.release(); - } - - this.source.resume(); -}; - -DelayedStream.prototype.pause = function() { - this.source.pause(); -}; - -DelayedStream.prototype.release = function() { - this._released = true; - - this._bufferedEvents.forEach(function(args) { - this.emit.apply(this, args); - }.bind(this)); - this._bufferedEvents = []; -}; - -DelayedStream.prototype.pipe = function() { - var r = Stream.prototype.pipe.apply(this, arguments); - this.resume(); - return r; -}; - -DelayedStream.prototype._handleEmit = function(args) { - if (this._released) { - this.emit.apply(this, args); - return; - } - - if (args[0] === 'data') { - this.dataSize += args[1].length; - this._checkIfMaxDataSizeExceeded(); - } - - this._bufferedEvents.push(args); -}; - -DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { - if (this._maxDataSizeExceeded) { - return; - } - - if (this.dataSize <= this.maxDataSize) { - return; - } - - this._maxDataSizeExceeded = true; - var message = - 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' - this.emit('error', new Error(message)); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json deleted file mode 100644 index 2ba5526d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "author": { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com", - "url": "http://debuggable.com/" - }, - "name": "delayed-stream", - "description": "Buffers events from a stream until you are ready to handle them.", - "version": "0.0.5", - "homepage": "https://github.com/felixge/node-delayed-stream", - "repository": { - "type": "git", - "url": "git://github.com/felixge/node-delayed-stream.git" - }, - "main": "./lib/delayed_stream", - "engines": { - "node": ">=0.4.0" - }, - "dependencies": {}, - "devDependencies": { - "fake": "0.2.0", - "far": "0.0.1" - }, - "readme": "# delayed-stream\n\nBuffers events from a stream until you are ready to handle them.\n\n## Installation\n\n``` bash\nnpm install delayed-stream\n```\n\n## Usage\n\nThe following example shows how to write a http echo server that delays its\nresponse by 1000 ms.\n\n``` javascript\nvar DelayedStream = require('delayed-stream');\nvar http = require('http');\n\nhttp.createServer(function(req, res) {\n var delayed = DelayedStream.create(req);\n\n setTimeout(function() {\n res.writeHead(200);\n delayed.pipe(res);\n }, 1000);\n});\n```\n\nIf you are not using `Stream#pipe`, you can also manually release the buffered\nevents by calling `delayedStream.resume()`:\n\n``` javascript\nvar delayed = DelayedStream.create(req);\n\nsetTimeout(function() {\n // Emit all buffered events and resume underlaying source\n delayed.resume();\n}, 1000);\n```\n\n## Implementation\n\nIn order to use this meta stream properly, here are a few things you should\nknow about the implementation.\n\n### Event Buffering / Proxying\n\nAll events of the `source` stream are hijacked by overwriting the `source.emit`\nmethod. Until node implements a catch-all event listener, this is the only way.\n\nHowever, delayed-stream still continues to emit all events it captures on the\n`source`, regardless of whether you have released the delayed stream yet or\nnot.\n\nUpon creation, delayed-stream captures all `source` events and stores them in\nan internal event buffer. Once `delayedStream.release()` is called, all\nbuffered events are emitted on the `delayedStream`, and the event buffer is\ncleared. After that, delayed-stream merely acts as a proxy for the underlaying\nsource.\n\n### Error handling\n\nError events on `source` are buffered / proxied just like any other events.\nHowever, `delayedStream.create` attaches a no-op `'error'` listener to the\n`source`. This way you only have to handle errors on the `delayedStream`\nobject, rather than in two places.\n\n### Buffer limits\n\ndelayed-stream provides a `maxDataSize` property that can be used to limit\nthe amount of data being buffered. In order to protect you from bad `source`\nstreams that don't react to `source.pause()`, this feature is enabled by\ndefault.\n\n## API\n\n### DelayedStream.create(source, [options])\n\nReturns a new `delayedStream`. Available options are:\n\n* `pauseStream`\n* `maxDataSize`\n\nThe description for those properties can be found below.\n\n### delayedStream.source\n\nThe `source` stream managed by this object. This is useful if you are\npassing your `delayedStream` around, and you still want to access properties\non the `source` object.\n\n### delayedStream.pauseStream = true\n\nWhether to pause the underlaying `source` when calling\n`DelayedStream.create()`. Modifying this property afterwards has no effect.\n\n### delayedStream.maxDataSize = 1024 * 1024\n\nThe amount of data to buffer before emitting an `error`.\n\nIf the underlaying source is emitting `Buffer` objects, the `maxDataSize`\nrefers to bytes.\n\nIf the underlaying source is emitting JavaScript strings, the size refers to\ncharacters.\n\nIf you know what you are doing, you can set this property to `Infinity` to\ndisable this feature. You can also modify this property during runtime.\n\n### delayedStream.maxDataSize = 1024 * 1024\n\nThe amount of data to buffer before emitting an `error`.\n\nIf the underlaying source is emitting `Buffer` objects, the `maxDataSize`\nrefers to bytes.\n\nIf the underlaying source is emitting JavaScript strings, the size refers to\ncharacters.\n\nIf you know what you are doing, you can set this property to `Infinity` to\ndisable this feature.\n\n### delayedStream.dataSize = 0\n\nThe amount of data buffered so far.\n\n### delayedStream.readable\n\nAn ECMA5 getter that returns the value of `source.readable`.\n\n### delayedStream.resume()\n\nIf the `delayedStream` has not been released so far, `delayedStream.release()`\nis called.\n\nIn either case, `source.resume()` is called.\n\n### delayedStream.pause()\n\nCalls `source.pause()`.\n\n### delayedStream.pipe(dest)\n\nCalls `delayedStream.resume()` and then proxies the arguments to `source.pipe`.\n\n### delayedStream.release()\n\nEmits and clears all events that have been buffered up so far. This does not\nresume the underlaying source, use `delayedStream.resume()` instead.\n\n## License\n\ndelayed-stream is licensed under the MIT license.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/felixge/node-delayed-stream/issues" - }, - "_id": "delayed-stream@0.0.5", - "dist": { - "shasum": "66839603c076296710bcc7f2e84ebd3348ae6343" - }, - "_from": "delayed-stream@0.0.5", - "_resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js deleted file mode 100644 index 4d71b8a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js +++ /dev/null @@ -1,6 +0,0 @@ -var common = module.exports; - -common.DelayedStream = require('..'); -common.assert = require('assert'); -common.fake = require('fake'); -common.PORT = 49252; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js deleted file mode 100644 index 9ecad5b8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js +++ /dev/null @@ -1,38 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var DelayedStream = common.DelayedStream; -var http = require('http'); - -var UPLOAD = new Buffer(10 * 1024 * 1024); - -var server = http.createServer(function(req, res) { - var delayed = DelayedStream.create(req, {maxDataSize: UPLOAD.length}); - - setTimeout(function() { - res.writeHead(200); - delayed.pipe(res); - }, 10); -}); -server.listen(common.PORT, function() { - var request = http.request({ - method: 'POST', - port: common.PORT, - }); - - request.write(UPLOAD); - request.end(); - - request.on('response', function(res) { - var received = 0; - res - .on('data', function(chunk) { - received += chunk.length; - }) - .on('end', function() { - assert.equal(received, UPLOAD.length); - server.close(); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js deleted file mode 100644 index 6f417f3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js +++ /dev/null @@ -1,21 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testAutoPause() { - var source = new Stream(); - - fake.expect(source, 'pause', 1); - var delayedStream = DelayedStream.create(source); - fake.verify(); -})(); - -(function testDisableAutoPause() { - var source = new Stream(); - fake.expect(source, 'pause', 0); - - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - fake.verify(); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js deleted file mode 100644 index b50c3978..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js +++ /dev/null @@ -1,14 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testDelayEventsUntilResume() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - fake.expect(source, 'pause'); - delayedStream.pause(); - fake.verify(); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js deleted file mode 100644 index fc4047e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js +++ /dev/null @@ -1,48 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testDelayEventsUntilResume() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - // delayedStream must not emit until we resume - fake.expect(delayedStream, 'emit', 0); - - // but our original source must emit - var params = []; - source.on('foo', function(param) { - params.push(param); - }); - - source.emit('foo', 1); - source.emit('foo', 2); - - // Make sure delayedStream did not emit, and source did - assert.deepEqual(params, [1, 2]); - fake.verify(); - - // After resume, delayedStream must playback all events - fake - .stub(delayedStream, 'emit') - .times(Infinity) - .withArg(1, 'newListener'); - fake.expect(delayedStream, 'emit', ['foo', 1]); - fake.expect(delayedStream, 'emit', ['foo', 2]); - fake.expect(source, 'resume'); - - delayedStream.resume(); - fake.verify(); - - // Calling resume again will delegate to source - fake.expect(source, 'resume'); - delayedStream.resume(); - fake.verify(); - - // Emitting more events directly leads to them being emitted - fake.expect(delayedStream, 'emit', ['foo', 3]); - source.emit('foo', 3); - fake.verify(); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js deleted file mode 100644 index a9d35e72..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js +++ /dev/null @@ -1,15 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testHandleSourceErrors() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - // We deal with this by attaching a no-op listener to 'error' on the source - // when creating a new DelayedStream. This way error events on the source - // won't throw. - source.emit('error', new Error('something went wrong')); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js deleted file mode 100644 index 7638a2bf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js +++ /dev/null @@ -1,18 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testMaxDataSize() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {maxDataSize: 1024, pauseStream: false}); - - source.emit('data', new Buffer(1024)); - - fake - .expect(delayedStream, 'emit') - .withArg(1, 'error'); - source.emit('data', new Buffer(1)); - fake.verify(); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js deleted file mode 100644 index 7d312ab1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js +++ /dev/null @@ -1,13 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testPipeReleases() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - fake.expect(delayedStream, 'resume'); - delayedStream.pipe(new Stream()); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js deleted file mode 100644 index d436163b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js +++ /dev/null @@ -1,13 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testProxyReadableProperty() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - source.readable = fake.value('source.readable'); - assert.strictEqual(delayedStream.readable, source.readable); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js deleted file mode 100755 index 0bb8e822..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var far = require('far').create(); - -far.add(__dirname); -far.include(/test-.*\.js$/); - -far.execute(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json deleted file mode 100644 index ecc71ada..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "author": { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com", - "url": "http://debuggable.com/" - }, - "name": "combined-stream", - "description": "A stream that emits multiple other streams one after another.", - "version": "0.0.4", - "homepage": "https://github.com/felixge/node-combined-stream", - "repository": { - "type": "git", - "url": "git://github.com/felixge/node-combined-stream.git" - }, - "main": "./lib/combined_stream", - "engines": { - "node": "*" - }, - "dependencies": { - "delayed-stream": "0.0.5" - }, - "devDependencies": { - "far": "0.0.1" - }, - "readme": "# combined-stream\n\nA stream that emits multiple other streams one after another.\n\n## Installation\n\n``` bash\nnpm install combined-stream\n```\n\n## Usage\n\nHere is a simple example that shows how you can use combined-stream to combine\ntwo files into one:\n\n``` javascript\nvar CombinedStream = require('combined-stream');\nvar fs = require('fs');\n\nvar combinedStream = CombinedStream.create();\ncombinedStream.append(fs.createReadStream('file1.txt'));\ncombinedStream.append(fs.createReadStream('file2.txt'));\n\ncombinedStream.pipe(fs.createWriteStream('combined.txt'));\n```\n\nWhile the example above works great, it will pause all source streams until\nthey are needed. If you don't want that to happen, you can set `pauseStreams`\nto `false`:\n\n``` javascript\nvar CombinedStream = require('combined-stream');\nvar fs = require('fs');\n\nvar combinedStream = CombinedStream.create({pauseStreams: false});\ncombinedStream.append(fs.createReadStream('file1.txt'));\ncombinedStream.append(fs.createReadStream('file2.txt'));\n\ncombinedStream.pipe(fs.createWriteStream('combined.txt'));\n```\n\nHowever, what if you don't have all the source streams yet, or you don't want\nto allocate the resources (file descriptors, memory, etc.) for them right away?\nWell, in that case you can simply provide a callback that supplies the stream\nby calling a `next()` function:\n\n``` javascript\nvar CombinedStream = require('combined-stream');\nvar fs = require('fs');\n\nvar combinedStream = CombinedStream.create();\ncombinedStream.append(function(next) {\n next(fs.createReadStream('file1.txt'));\n});\ncombinedStream.append(function(next) {\n next(fs.createReadStream('file2.txt'));\n});\n\ncombinedStream.pipe(fs.createWriteStream('combined.txt'));\n```\n\n## API\n\n### CombinedStream.create([options])\n\nReturns a new combined stream object. Available options are:\n\n* `maxDataSize`\n* `pauseStreams`\n\nThe effect of those options is described below.\n\n### combinedStream.pauseStreams = true\n\nWhether to apply back pressure to the underlaying streams. If set to `false`,\nthe underlaying streams will never be paused. If set to `true`, the\nunderlaying streams will be paused right after being appended, as well as when\n`delayedStream.pipe()` wants to throttle.\n\n### combinedStream.maxDataSize = 2 * 1024 * 1024\n\nThe maximum amount of bytes (or characters) to buffer for all source streams.\nIf this value is exceeded, `combinedStream` emits an `'error'` event.\n\n### combinedStream.dataSize = 0\n\nThe amount of bytes (or characters) currently buffered by `combinedStream`.\n\n### combinedStream.append(stream)\n\nAppends the given `stream` to the combinedStream object. If `pauseStreams` is\nset to `true, this stream will also be paused right away.\n\n`streams` can also be a function that takes one parameter called `next`. `next`\nis a function that must be invoked in order to provide the `next` stream, see\nexample above.\n\nRegardless of how the `stream` is appended, combined-stream always attaches an\n`'error'` listener to it, so you don't have to do that manually.\n\nSpecial case: `stream` can also be a String or Buffer.\n\n### combinedStream.write(data)\n\nYou should not call this, `combinedStream` takes care of piping the appended\nstreams into itself for you.\n\n### combinedStream.resume()\n\nCauses `combinedStream` to start drain the streams it manages. The function is\nidempotent, and also emits a `'resume'` event each time which usually goes to\nthe stream that is currently being drained.\n\n### combinedStream.pause();\n\nIf `combinedStream.pauseStreams` is set to `false`, this does nothing.\nOtherwise a `'pause'` event is emitted, this goes to the stream that is\ncurrently being drained, so you can use it to apply back pressure.\n\n### combinedStream.end();\n\nSets `combinedStream.writable` to false, emits an `'end'` event, and removes\nall streams from the queue.\n\n### combinedStream.destroy();\n\nSame as `combinedStream.end()`, except it emits a `'close'` event instead of\n`'end'`.\n\n## License\n\ncombined-stream is licensed under the MIT license.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/felixge/node-combined-stream/issues" - }, - "_id": "combined-stream@0.0.4", - "dist": { - "shasum": "6562a96c9e6862c7a1349ac563047313599d0e86" - }, - "_from": "combined-stream@~0.0.4", - "_resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js deleted file mode 100644 index 81543485..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js +++ /dev/null @@ -1,23 +0,0 @@ -var common = module.exports; - -var path = require('path'); -var fs = require('fs'); -var root = path.join(__dirname, '..'); - -common.dir = { - fixture: root + '/test/fixture', - tmp: root + '/test/tmp', -}; - -// Create tmp directory if it does not exist -// Not using fs.exists so as to be node 0.6.x compatible -try { - fs.statSync(common.dir.tmp); -} -catch (e) { - // Dir does not exist - fs.mkdirSync(common.dir.tmp); -} - -common.CombinedStream = require(root); -common.assert = require('assert'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt deleted file mode 100644 index 50e0218d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt +++ /dev/null @@ -1,256 +0,0 @@ -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt deleted file mode 100644 index da1d821f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt +++ /dev/null @@ -1,256 +0,0 @@ -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js deleted file mode 100644 index 44ecabab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js +++ /dev/null @@ -1,27 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var FILE2 = common.dir.fixture + '/file2.txt'; -var EXPECTED = fs.readFileSync(FILE1) + fs.readFileSync(FILE2); - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create(); - combinedStream.append(function(next) { - next(fs.createReadStream(FILE1)); - }); - combinedStream.append(function(next) { - next(fs.createReadStream(FILE2)); - }); - - var tmpFile = common.dir.tmp + '/combined.txt'; - var dest = fs.createWriteStream(tmpFile); - combinedStream.pipe(dest); - - dest.on('end', function() { - var written = fs.readFileSync(tmpFile, 'utf8'); - assert.strictEqual(written, EXPECTED); - }); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js deleted file mode 100644 index e3fbd184..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js +++ /dev/null @@ -1,34 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; - -(function testDataSizeGetter() { - var combinedStream = CombinedStream.create(); - - assert.strictEqual(combinedStream.dataSize, 0); - - // Test one stream - combinedStream._streams.push({dataSize: 10}); - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 10); - - // Test two streams - combinedStream._streams.push({dataSize: 23}); - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 33); - - // Test currentStream - combinedStream._currentStream = {dataSize: 20}; - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 53); - - // Test currentStream without dataSize - combinedStream._currentStream = {}; - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 33); - - // Test stream function - combinedStream._streams.push(function() {}); - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 33); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js deleted file mode 100644 index c678575c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js +++ /dev/null @@ -1,38 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var BUFFER = new Buffer('Bacon is delicious'); -var FILE2 = common.dir.fixture + '/file2.txt'; -var STRING = 'The € kicks the $\'s ass!'; - -var EXPECTED = - fs.readFileSync(FILE1) - + BUFFER - + fs.readFileSync(FILE2) - + STRING; -var GOT; - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create(); - combinedStream.append(fs.createReadStream(FILE1)); - combinedStream.append(BUFFER); - combinedStream.append(fs.createReadStream(FILE2)); - combinedStream.append(function(next) { - next(STRING); - }); - - var tmpFile = common.dir.tmp + '/combined-file1-buffer-file2-string.txt'; - var dest = fs.createWriteStream(tmpFile); - combinedStream.pipe(dest); - - dest.on('close', function() { - GOT = fs.readFileSync(tmpFile, 'utf8'); - }); -})(); - -process.on('exit', function() { - assert.strictEqual(GOT, EXPECTED); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js deleted file mode 100644 index 263cfdf7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js +++ /dev/null @@ -1,35 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var FILE2 = common.dir.fixture + '/file2.txt'; -var EXPECTED = fs.readFileSync(FILE1) + fs.readFileSync(FILE2); -var GOT; - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create(); - combinedStream.append(fs.createReadStream(FILE1)); - combinedStream.append(fs.createReadStream(FILE2)); - - var stream1 = combinedStream._streams[0]; - var stream2 = combinedStream._streams[1]; - - stream1.on('end', function() { - assert.equal(stream2.dataSize, 0); - }); - - var tmpFile = common.dir.tmp + '/combined.txt'; - var dest = fs.createWriteStream(tmpFile); - combinedStream.pipe(dest); - - dest.on('close', function() { - GOT = fs.readFileSync(tmpFile, 'utf8'); - }); -})(); - -process.on('exit', function() { - console.error(GOT.length, EXPECTED.length); - assert.strictEqual(GOT, EXPECTED); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js deleted file mode 100644 index c3d288d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js +++ /dev/null @@ -1,39 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var util = require('util'); -var Stream = require('stream').Stream; - -var s = CombinedStream.create(); - - -function StringStream(){ - this.writable=true; - this.str="" -} -util.inherits(StringStream,Stream); - -StringStream.prototype.write=function(chunk,encoding){ - this.str+=chunk.toString(); - this.emit('data',chunk); -} - -StringStream.prototype.end=function(chunk,encoding){ - this.emit('end'); -} - -StringStream.prototype.toString=function(){ - return this.str; -} - - -s.append("foo."); -s.append(""); -s.append("bar"); - -var ss = new StringStream(); - -s.pipe(ss); -s.resume(); - -assert.equal(ss.toString(),"foo.bar"); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js deleted file mode 100644 index aefa36e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js +++ /dev/null @@ -1,17 +0,0 @@ -var fs = require('fs'); -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var FILE1 = common.dir.fixture + '/file1.txt'; -var fileStream = fs.createReadStream(FILE1); - -var foo = function(){}; - -(function testIsStreamLike() { - assert(! CombinedStream.isStreamLike(true)); - assert(! CombinedStream.isStreamLike("I am a string")); - assert(! CombinedStream.isStreamLike(7)); - assert(! CombinedStream.isStreamLike(foo)); - - assert(CombinedStream.isStreamLike(fileStream)); -})(); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js deleted file mode 100644 index 25f47a47..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js +++ /dev/null @@ -1,24 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var FILE2 = common.dir.fixture + '/file2.txt'; -var EXPECTED = fs.readFileSync(FILE1) + fs.readFileSync(FILE2); - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create({pauseStreams: false, maxDataSize: 20736}); - combinedStream.append(fs.createReadStream(FILE1)); - combinedStream.append(fs.createReadStream(FILE2)); - - var gotErr = null; - combinedStream.on('error', function(err) { - gotErr = err; - }); - - process.on('exit', function() { - assert.ok(gotErr); - assert.ok(gotErr.message.match(/bytes/)); - }); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js deleted file mode 100644 index 30a3a6f8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js +++ /dev/null @@ -1,30 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var FILE2 = common.dir.fixture + '/file2.txt'; -var EXPECTED = fs.readFileSync(FILE1) + fs.readFileSync(FILE2); - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create({pauseStreams: false}); - combinedStream.append(fs.createReadStream(FILE1)); - combinedStream.append(fs.createReadStream(FILE2)); - - var stream1 = combinedStream._streams[0]; - var stream2 = combinedStream._streams[1]; - - stream1.on('end', function() { - assert.ok(stream2.dataSize > 0); - }); - - var tmpFile = common.dir.tmp + '/combined.txt'; - var dest = fs.createWriteStream(tmpFile); - combinedStream.pipe(dest); - - dest.on('end', function() { - var written = fs.readFileSync(tmpFile, 'utf8'); - assert.strictEqual(written, EXPECTED); - }); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js deleted file mode 100755 index 0bb8e822..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var far = require('far').create(); - -far.add(__dirname); -far.include(/test-.*\.js$/); - -far.execute(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/package.json deleted file mode 100644 index 5d424f23..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "author": { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com", - "url": "http://debuggable.com/" - }, - "name": "form-data", - "description": "A module to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.", - "version": "0.1.2", - "repository": { - "type": "git", - "url": "git://github.com/felixge/node-form-data.git" - }, - "main": "./lib/form_data", - "scripts": { - "test": "node test/run.js" - }, - "engines": { - "node": ">= 0.6" - }, - "dependencies": { - "combined-stream": "~0.0.4", - "mime": "~1.2.11", - "async": "~0.2.9" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://raw.github.com/felixge/node-form-data/master/License" - } - ], - "devDependencies": { - "fake": "~0.2.2", - "far": "~0.0.7", - "formidable": "~1.0.14", - "request": "~2.27.0" - }, - "readme": "# Form-Data [![Build Status](https://travis-ci.org/felixge/node-form-data.png?branch=master)](https://travis-ci.org/felixge/node-form-data) [![Dependency Status](https://gemnasium.com/felixge/node-form-data.png)](https://gemnasium.com/felixge/node-form-data)\n\nA module to create readable ```\"multipart/form-data\"``` streams. Can be used to submit forms and file uploads to other web applications.\n\nThe API of this module is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd].\n\n[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface\n[streams2-thing]: http://nodejs.org/api/stream.html#stream_compatibility_with_older_node_versions\n\n## Install\n\n```\nnpm install form-data\n```\n\n## Usage\n\nIn this example we are constructing a form with 3 fields that contain a string,\na buffer and a file stream.\n\n``` javascript\nvar FormData = require('form-data');\nvar fs = require('fs');\n\nvar form = new FormData();\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_file', fs.createReadStream('/foo/bar.jpg'));\n```\n\nAlso you can use http-response stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar http = require('http');\n\nvar form = new FormData();\n\nhttp.request('http://nodejs.org/images/logo.png', function(response) {\n form.append('my_field', 'my value');\n form.append('my_buffer', new Buffer(10));\n form.append('my_logo', response);\n});\n```\n\nOr @mikeal's request stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar request = require('request');\n\nvar form = new FormData();\n\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_logo', request('http://nodejs.org/images/logo.png'));\n```\n\nIn order to submit this form to a web application, call ```submit(url, [callback])``` method:\n\n``` javascript\nform.submit('http://example.org/', function(err, res) {\n // res – response object (http.IncomingMessage) //\n res.resume(); // for node-0.10.x\n});\n\n```\n\nFor more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods.\n\n### Alternative submission methods\n\nYou can use node's http client interface:\n\n``` javascript\nvar http = require('http');\n\nvar request = http.request({\n method: 'post',\n host: 'example.org',\n path: '/upload',\n headers: form.getHeaders()\n});\n\nform.pipe(request);\n\nrequest.on('response', function(res) {\n console.log(res.statusCode);\n});\n```\n\nOr if you would prefer the `'Content-Length'` header to be set for you:\n\n``` javascript\nform.submit('example.org/upload', function(err, res) {\n console.log(res.statusCode);\n});\n```\n\nTo use custom headers and pre-known length in parts:\n\n``` javascript\nvar CRLF = '\\r\\n';\nvar form = new FormData();\n\nvar options = {\n header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,\n knownLength: 1\n};\n\nform.append('my_buffer', buffer, options);\n\nform.submit('http://example.com/', function(err, res) {\n if (err) throw err;\n console.log('Done');\n});\n```\n\nForm-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide \"file\"-related information manually:\n\n``` javascript\nsomeModule.stream(function(err, stdout, stderr) {\n if (err) throw err;\n\n var form = new FormData();\n\n form.append('file', stdout, {\n filename: 'unicycle.jpg',\n contentType: 'image/jpg',\n knownLength: 19806\n });\n\n form.submit('http://example.com/', function(err, res) {\n if (err) throw err;\n console.log('Done');\n });\n});\n```\n\nFor edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:\n\n``` javascript\nform.submit({\n host: 'example.com',\n path: '/probably.php?extra=params',\n auth: 'username:password'\n}, function(err, res) {\n console.log(res.statusCode);\n});\n```\n\n## Notes\n\n- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround.\n- If it feels like FormData hangs after submit and you're on ```node-0.10```, please check [Compatibility with Older Node Versions][streams2-thing]\n\n## TODO\n\n- Add new streams (0.10) support and try really hard not to break it for 0.8.x.\n\n## License\n\nForm-Data is licensed under the MIT license.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/felixge/node-form-data/issues" - }, - "homepage": "https://github.com/felixge/node-form-data", - "_id": "form-data@0.1.2", - "dist": { - "shasum": "1143c21357911a78dd7913b189b4bab5d5d57445" - }, - "_from": "form-data@~0.1.0", - "_resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.npmignore deleted file mode 100644 index 77ba16cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.travis.yml deleted file mode 100755 index 047f7e3d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/LICENSE deleted file mode 100755 index e699a7bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2013, Eran Hammer. -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 Eran Hammer 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 ERAN HAMMER 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/Makefile deleted file mode 100755 index 5f339bf3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -test: - @node node_modules/lab/bin/lab -test-cov: - @node node_modules/lab/bin/lab -r threshold -t 100 -test-cov-html: - @node node_modules/lab/bin/lab -r html -o coverage.html -complexity: - @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/README.md deleted file mode 100755 index 010bac6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/README.md +++ /dev/null @@ -1,627 +0,0 @@ -![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png) - -<img align="right" src="https://raw.github.com/hueniverse/hawk/master/images/logo.png" /> **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial -HTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz). - -Current version: **1.0** - -[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk) - -# Table of Content - -- [**Introduction**](#introduction) - - [Replay Protection](#replay-protection) - - [Usage Example](#usage-example) - - [Protocol Example](#protocol-example) - - [Payload Validation](#payload-validation) - - [Response Payload Validation](#response-payload-validation) - - [Browser Support and Considerations](#browser-support-and-considerations) -<p></p> -- [**Single URI Authorization**](#single-uri-authorization) - - [Usage Example](#bewit-usage-example) -<p></p> -- [**Security Considerations**](#security-considerations) - - [MAC Keys Transmission](#mac-keys-transmission) - - [Confidentiality of Requests](#confidentiality-of-requests) - - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers) - - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials) - - [Entropy of Keys](#entropy-of-keys) - - [Coverage Limitations](#coverage-limitations) - - [Future Time Manipulation](#future-time-manipulation) - - [Client Clock Poisoning](#client-clock-poisoning) - - [Bewit Limitations](#bewit-limitations) - - [Host Header Forgery](#host-header-forgery) -<p></p> -- [**Frequently Asked Questions**](#frequently-asked-questions) -<p></p> -- [**Acknowledgements**](#acknowledgements) - -# Introduction - -**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with -partial cryptographic verification of the request and response, covering the HTTP method, request URI, host, -and optionally the request payload. - -Similar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of -client credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme, -the key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is -included in its place. - -However, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of -replay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less -"chattiness" (interaction with the server). - -Also unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because -the client and server must both have access to the key material in the clear. - -The primary design goals of this scheme are to: -* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources, -* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where - to send an authenticated request), and -* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client - failure to validate the server's identity as part of its TLS handshake. - -In addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using -a query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk). - -The **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server, -which is beyond the scope of this module. Typically, the shared credentials are established via an initial -TLS-protected phase or derived from some other shared confidential information available to both the client -and the server. - - -## Replay Protection - -Without replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more -than once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when -making requests. This gives the server enough information to prevent replay attacks. - -The nonce is generated by the client, and is a string unique across all requests with the same timestamp and -key identifier combination. - -The timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards -are rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks. -By default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in -practice translates to a maximum of 2 minutes as the skew can be positive or negative). - -Using a timestamp requires the client's clock to be in sync with the server's clock. **Hawk** requires both the client -clock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types -(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response -to a bad timestamp. - -There is no expectation that the client will adjust its system clock to match the server (in fact, this would be a -potential attack vector). Instead, the client only uses the server's time to calculate an offset used only -for communications with that particular server. The protocol rewards clients with synchronized clocks by reducing -the number of round trips required to authenticate the first request. - - -## Usage Example - -Server code: - -```javascript -var Http = require('http'); -var Hawk = require('hawk'); - - -// Credentials lookup function - -var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'Steve' - }; - - return callback(null, credentials); -}; - -// Create HTTP server - -var handler = function (req, res) { - - // Authenticate incoming request - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - // Prepare response - - var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!'); - var headers = { 'Content-Type': 'text/plain' }; - - // Generate Server-Authorization response header - - var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers['Content-Type'] }); - headers['Server-Authorization'] = header; - - // Send the response back - - res.writeHead(!err ? 200 : 401, headers); - res.end(payload); - }); -}; - -// Start server - -Http.createServer(handler).listen(8000, 'example.com'); -``` - -Client code: - -```javascript -var Request = require('request'); -var Hawk = require('hawk'); - - -// Client credentials - -var credentials = { - id: 'dh37fgj492je', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' -} - -// Request options - -var requestOptions = { - uri: 'http://example.com:8000/resource/1?b=1&a=2', - method: 'GET', - headers: {} -}; - -// Generate Authorization request header - -var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' }); -requestOptions.headers.Authorization = header.field; - -// Send authenticated request - -Request(requestOptions, function (error, response, body) { - - // Authenticate the server's response - - var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body }); - - // Output results - - console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)')); -}); -``` - -**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local -machine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP 'start()' method. - -```javascript -Hawk.sntp.start(); -``` - - -## Protocol Example - -The client attempts to access a protected resource without authentication, sending the following HTTP request to -the resource server: - -``` -GET /resource/1?b=1&a=2 HTTP/1.1 -Host: example.com:8000 -``` - -The resource server returns an authentication challenge. - -``` -HTTP/1.1 401 Unauthorized -WWW-Authenticate: Hawk -``` - -The client has previously obtained a set of **Hawk** credentials for accessing resources on the "http://example.com/" -server. The **Hawk** credentials issued to the client include the following attributes: - -* Key identifier: dh37fgj492je -* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn -* Algorithm: sha256 - -The client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1, -1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline -character): - -``` -hawk.1.header -1353832234 -j4h3g2 -GET -/resource/1?b=1&a=2 -example.com -8000 - -some-app-ext-data - -``` - -The request MAC is calculated using HMAC with the specified hash algorithm "sha256" and the key over the normalized request string. -The result is base64-encoded to produce the request MAC: - -``` -6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE= -``` - -The client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using -the HTTP `Authorization` request header field: - -``` -GET /resource/1?b=1&a=2 HTTP/1.1 -Host: example.com:8000 -Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=" -``` - -The server validates the request by calculating the request MAC again based on the request received and verifies the validity -and scope of the **Hawk** credentials. If valid, the server responds with the requested resource. - - -### Payload Validation - -**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash -using the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character): -* `hawk.1.payload` -* the content-type in lowercase, without any parameters (e.g. `application/json`) -* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability) - -For example: - -* Payload: `Thank you for flying Hawk` -* Content Type: `text/plain` -* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=` - -Results in the following input to the payload hash function (newline terminated values): - -``` -hawk.1.payload -text/plain -Thank you for flying Hawk - -``` - -Which produces the following hash value: - -``` -Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY= -``` - -The client constructs the normalized request string (newline terminated values): - -``` -hawk.1.header -1353832234 -j4h3g2 -POST -/resource/1?a=1&b=2 -example.com -8000 -Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY= -some-app-ext-data - -``` - -Then calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data, -and request MAC, with the request using the HTTP `Authorization` request header field: - -``` -POST /resource/1?a=1&b=2 HTTP/1.1 -Host: example.com:8000 -Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", hash="Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=", ext="some-app-ext-data", mac="aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw=" -``` - -It is up to the server if and when it validates the payload for any given request, based solely on it's security policy -and the nature of the data included. - -If the payload is available at the time of authentication, the server uses the hash value provided by the client to construct -the normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value -with the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash. - -However, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed -at a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value -provided by the client after validating the MAC. - -It is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value -included in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided -by the client, the payload may be modified by an attacker. - - -## Response Payload Validation - -**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the -client to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header -as a response header using the exact same syntax as the `Authorization` request header field. - -The header is contructed using the same process as the client's request header. The server uses the same credentials and other -artifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with -new values based on the server response. The rest as identical to those used by the client. - -The result MAC digest is included with the optional `hash` and `ext` values: - -``` -Server-Authorization: Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific" -``` - - -## Browser Support and Considerations - -A browser script is provided for including using a `<script>` tag in [lib/browser.js](/lib/browser.js). - -**Hawk** relies on the _Server-Authorization_ and _WWW-Authenticate_ headers in its response to communicate with the client. -Therefore, in case of CORS requests, it is important to consider sending _Access-Control-Expose-Headers_ with the value -_"WWW-Authenticate, Server-Authorization"_ on each response from your server. As explained in the -[specifications](http://www.w3.org/TR/cors/#access-control-expose-headers-response-header), it will indicate that these headers -can safely be accessed by the client (using getResponseHeader() on the XmlHttpRequest object). Otherwise you will be met with a -["simple response header"](http://www.w3.org/TR/cors/#simple-response-header) which excludes these fields and would prevent the -Hawk client from authenticating the requests.You can read more about the why and how in this -[article](http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server) - - -# Single URI Authorization - -There are cases in which limited and short-term access to a protected resource is granted to a third party which does not -have access to the shared credentials. For example, displaying a protected image on a web page accessed by anyone. **Hawk** -provides limited support for such URIs in the form of a _bewit_ - a URI query parameter appended to the request URI which contains -the necessary credentials to authenticate the request. - -Because of the significant security risks involved in issuing such access, bewit usage is purposely limited only to GET requests -and for a finite period of time. Both the client and server can issue bewit credentials, however, the server should not use the same -credentials as the client to maintain clear traceability as to who issued which credentials. - -In order to simplify implementation, bewit credentials do not support single-use policy and can be replayed multiple times within -the granted access timeframe. - - -## Bewit Usage Example - -Server code: - -```javascript -var Http = require('http'); -var Hawk = require('hawk'); - - -// Credentials lookup function - -var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' - }; - - return callback(null, credentials); -}; - -// Create HTTP server - -var handler = function (req, res) { - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - res.writeHead(!err ? 200 : 401, { 'Content-Type': 'text/plain' }); - res.end(!err ? 'Access granted' : 'Shoosh!'); - }); -}; - -Http.createServer(handler).listen(8000, 'example.com'); -``` - -Bewit code generation: - -```javascript -var Request = require('request'); -var Hawk = require('hawk'); - - -// Client credentials - -var credentials = { - id: 'dh37fgj492je', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' -} - -// Generate bewit - -var duration = 60 * 5; // 5 Minutes -var bewit = Hawk.uri.getBewit('http://example.com:8080/resource/1?b=1&a=2', { credentials: credentials, ttlSec: duration, ext: 'some-app-data' }); -var uri = 'http://example.com:8000/resource/1?b=1&a=2' + '&bewit=' + bewit; -``` - - -# Security Considerations - -The greatest sources of security risks are usually found not in **Hawk** but in the policies and procedures surrounding its use. -Implementers are strongly encouraged to assess how this module addresses their security requirements. This section includes -an incomplete list of security considerations that must be reviewed and understood before deploying **Hawk** on the server. -Many of the protections provided in **Hawk** depends on whether and how they are used. - -### MAC Keys Transmission - -**Hawk** does not provide any mechanism for obtaining or transmitting the set of shared credentials required. Any mechanism used -to obtain **Hawk** credentials must ensure that these transmissions are protected using transport-layer mechanisms such as TLS. - -### Confidentiality of Requests - -While **Hawk** provides a mechanism for verifying the integrity of HTTP requests, it provides no guarantee of request -confidentiality. Unless other precautions are taken, eavesdroppers will have full access to the request content. Servers should -carefully consider the types of data likely to be sent as part of such requests, and employ transport-layer security mechanisms -to protect sensitive resources. - -### Spoofing by Counterfeit Servers - -**Hawk** provides limited verification of the server authenticity. When receiving a response back from the server, the server -may choose to include a response `Server-Authorization` header which the client can use to verify the response. However, it is up to -the server to determine when such measure is included, to up to the client to enforce that policy. - -A hostile party could take advantage of this by intercepting the client's requests and returning misleading or otherwise -incorrect responses. Service providers should consider such attacks when developing services using this protocol, and should -require transport-layer security for any requests where the authenticity of the resource server or of server responses is an issue. - -### Plaintext Storage of Credentials - -The **Hawk** key functions the same way passwords do in traditional authentication systems. In order to compute the request MAC, -the server must have access to the key in plaintext form. This is in contrast, for example, to modern operating systems, which -store only a one-way hash of user credentials. - -If an attacker were to gain access to these keys - or worse, to the server's database of all such keys - he or she would be able -to perform any action on behalf of any resource owner. Accordingly, it is critical that servers protect these keys from unauthorized -access. - -### Entropy of Keys - -Unless a transport-layer security protocol is used, eavesdroppers will have full access to authenticated requests and request -MAC values, and will thus be able to mount offline brute-force attacks to recover the key used. Servers should be careful to -assign keys which are long enough, and random enough, to resist such attacks for at least the length of time that the **Hawk** -credentials are valid. - -For example, if the credentials are valid for two weeks, servers should ensure that it is not possible to mount a brute force -attack that recovers the key in less than two weeks. Of course, servers are urged to err on the side of caution, and use the -longest key reasonable. - -It is equally important that the pseudo-random number generator (PRNG) used to generate these keys be of sufficiently high -quality. Many PRNG implementations generate number sequences that may appear to be random, but which nevertheless exhibit -patterns or other weaknesses which make cryptanalysis or brute force attacks easier. Implementers should be careful to use -cryptographically secure PRNGs to avoid these problems. - -### Coverage Limitations - -The request MAC only covers the HTTP `Host` header and optionally the `Content-Type` header. It does not cover any other headers -which can often affect how the request body is interpreted by the server. If the server behavior is influenced by the presence -or value of such headers, an attacker can manipulate the request headers without being detected. Implementers should use the -`ext` feature to pass application-specific information via the `Authorization` header which is protected by the request MAC. - -The response authentication, when performed, only covers the response payload, content-type, and the request information -provided by the client in it's request (method, resource, timestamp, nonce, etc.). It does not cover the HTTP status code or -any other response header field (e.g. Location) which can affect the client's behaviour. - -### Future Time Manipulation - -The protocol relies on a clock sync between the client and server. To accomplish this, the server informs the client of its -current time when an invalid timestamp is received. - -If an attacker is able to manipulate this information and cause the client to use an incorrect time, it would be able to cause -the client to generate authenticated requests using time in the future. Such requests will fail when sent by the client, and will -not likely leave a trace on the server (given the common implementation of nonce, if at all enforced). The attacker will then -be able to replay the request at the correct time without detection. - -The client must only use the time information provided by the server if: -* it was delivered over a TLS connection and the server identity has been verified, or -* the `tsm` MAC digest calculated using the same client credentials over the timestamp has been verified. - -### Client Clock Poisoning - -When receiving a request with a bad timestamp, the server provides the client with its current time. The client must never use -the time received from the server to adjust its own clock, and must only use it to calculate an offset for communicating with -that particular server. - -### Bewit Limitations - -Special care must be taken when issuing bewit credentials to third parties. Bewit credentials are valid until expiration and cannot -be revoked or limited without using other means. Whatever resource they grant access to will be completely exposed to anyone with -access to the bewit credentials which act as bearer credentials for that particular resource. While bewit usage is limited to GET -requests only and therefore cannot be used to perform transactions or change server state, it can still be used to expose private -and sensitive information. - -### Host Header Forgery - -Hawk validates the incoming request MAC against the incoming HTTP Host header. However, unless the optional `host` and `port` -options are used with `server.authenticate()`, a malicous client can mint new host names pointing to the server's IP address and -use that to craft an attack by sending a valid request that's meant for another hostname than the one used by the server. Server -implementors must manually verify that the host header received matches their expectation (or use the options mentioned above). - -# Frequently Asked Questions - -### Where is the protocol specification? - -If you are looking for some prose explaining how all this works, **this is it**. **Hawk** is being developed as an open source -project instead of a standard. In other words, the [code](/hueniverse/hawk/tree/master/lib) is the specification. Not sure about -something? Open an issue! - -### Is it done? - -At if version 0.10.0, **Hawk** is feature-complete. However, until this module reaches version 1.0.0 it is considered experimental -and is likely to change. This also means your feedback and contribution are very welcome. Feel free to open issues with questions -and suggestions. - -### Where can I find **Hawk** implementations in other languages? - -**Hawk**'s only reference implementation is provided in JavaScript as a node.js module. However, others are actively porting it to other -platforms. There is already a [PHP](https://github.com/alexbilbie/PHP-Hawk), -[.NET](https://github.com/pcibraro/hawknet), and [JAVA](https://github.com/wealdtech/hawk) libraries available. The full list -is maintained [here](https://github.com/hueniverse/hawk/issues?labels=port). Please add an issue if you are working on another -port. A cross-platform test-suite is in the works. - -### Why isn't the algorithm part of the challenge or dynamically negotiated? - -The algorithm used is closely related to the key issued as different algorithms require different key sizes (and other -requirements). While some keys can be used for multiple algorithm, the protocol is designed to closely bind the key and algorithm -together as part of the issued credentials. - -### Why is Host and Content-Type the only headers covered by the request MAC? - -It is really hard to include other headers. Headers can be changed by proxies and other intermediaries and there is no -well-established way to normalize them. Many platforms change the case of header field names and values. The only -straight-forward solution is to include the headers in some blob (say, base64 encoded JSON) and include that with the request, -an approach taken by JWT and other such formats. However, that design violates the HTTP header boundaries, repeats information, -and introduces other security issues because firewalls will not be aware of these "hidden" headers. In addition, any information -repeated must be compared to the duplicated information in the header and therefore only moves the problem elsewhere. - -### Why not just use HTTP Digest? - -Digest requires pre-negotiation to establish a nonce. This means you can't just make a request - you must first send -a protocol handshake to the server. This pattern has become unacceptable for most web services, especially mobile -where extra round-trip are costly. - -### Why bother with all this nonce and timestamp business? - -**Hawk** is an attempt to find a reasonable, practical compromise between security and usability. OAuth 1.0 got timestamp -and nonces halfway right but failed when it came to scalability and consistent developer experience. **Hawk** addresses -it by requiring the client to sync its clock, but provides it with tools to accomplish it. - -In general, replay protection is a matter of application-specific threat model. It is less of an issue on a TLS-protected -system where the clients are implemented using best practices and are under the control of the server. Instead of dropping -replay protection, **Hawk** offers a required time window and an optional nonce verification. Together, it provides developers -with the ability to decide how to enforce their security policy without impacting the client's implementation. - -### What are `app` and `dlg` in the authorization header and normalized mac string? - -The original motivation for **Hawk** was to replace the OAuth 1.0 use cases. This included both a simple client-server mode which -this module is specifically designed for, and a delegated access mode which is being developed separately in -[Oz](https://github.com/hueniverse/oz). In addition to the **Hawk** use cases, Oz requires another attribute: the application id `app`. -This provides binding between the credentials and the application in a way that prevents an attacker from tricking an application -to use credentials issued to someone else. It also has an optional 'delegated-by' attribute `dlg` which is the application id of the -application the credentials were directly issued to. The goal of these two additions is to allow Oz to utilize **Hawk** directly, -but with the additional security of delegated credentials. - -### What is the purpose of the static strings used in each normalized MAC input? - -When calculating a hash or MAC, a static prefix (tag) is added. The prefix is used to prevent MAC values from being -used or reused for a purpose other than what they were created for (i.e. prevents switching MAC values between a request, -response, and a bewit use cases). It also protects against expliots created after a potential change in how the protocol -creates the normalized string. For example, if a future version would switch the order of nonce and timestamp, it -can create an exploit opportunity for cases where the nonce is similar in format to a timestamp. - -### Does **Hawk** have anything to do with OAuth? - -Short answer: no. - -**Hawk** was originally proposed as the OAuth MAC Token specification. However, the OAuth working group in its consistent -incompetence failed to produce a final, usable solution to address one of the most popular use cases of OAuth 1.0 - using it -to authenticate simple client-server transactions (i.e. two-legged). As you can guess, the OAuth working group is still hard -at work to produce more garbage. - -**Hawk** provides a simple HTTP authentication scheme for making client-server requests. It does not address the OAuth use case -of delegating access to a third party. If you are looking for an OAuth alternative, check out [Oz](https://github.com/hueniverse/oz). - - -# Acknowledgements - -**Hawk** is a derivative work of the [HTTP MAC Authentication Scheme](http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05) proposal -co-authored by Ben Adida, Adam Barth, and Eran Hammer, which in turn was based on the OAuth 1.0 community specification. - -Special thanks to Ben Laurie for his always insightful feedback and advice. - -The **Hawk** logo was created by [Chris Carrasco](http://chriscarrasco.com). diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/example/usage.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/example/usage.js deleted file mode 100755 index 8c063f6c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/example/usage.js +++ /dev/null @@ -1,78 +0,0 @@ -// Load modules - -var Http = require('http'); -var Request = require('request'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = { - credentials: { - dh37fgj492je: { - id: 'dh37fgj492je', // Required by Hawk.client.header - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'Steve' - } - } -}; - - -// Credentials lookup function - -var credentialsFunc = function (id, callback) { - - return callback(null, internals.credentials[id]); -}; - - -// Create HTTP server - -var handler = function (req, res) { - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!'); - var headers = { - 'Content-Type': 'text/plain', - 'Server-Authorization': Hawk.server.header(credentials, artifacts, { payload: payload, contentType: 'text/plain' }) - }; - - res.writeHead(!err ? 200 : 401, headers); - res.end(payload); - }); -}; - -Http.createServer(handler).listen(8000, '127.0.0.1'); - - -// Send unauthenticated request - -Request('http://127.0.0.1:8000/resource/1?b=1&a=2', function (error, response, body) { - - console.log(response.statusCode + ': ' + body); -}); - - -// Send authenticated request - -credentialsFunc('dh37fgj492je', function (err, credentials) { - - var header = Hawk.client.header('http://127.0.0.1:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'and welcome!' }); - var options = { - uri: 'http://127.0.0.1:8000/resource/1?b=1&a=2', - method: 'GET', - headers: { - authorization: header.field - } - }; - - Request(options, function (error, response, body) { - - var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body }); - console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)')); - process.exit(0); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/hawk.png b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/hawk.png deleted file mode 100755 index a0e15cda0144a7d7ed222e74a2ea4afbab32555c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6945 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 B50U@? diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/logo.png b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/logo.png deleted file mode 100755 index b8ff5901718a8a5529d25602a4a581d2f68d67cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71732 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 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/browser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/browser.js deleted file mode 100755 index 27494f23..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/browser.js +++ /dev/null @@ -1,485 +0,0 @@ -/* - HTTP Hawk Authentication Scheme - Copyright (c) 2012-2013, Eran Hammer <eran@hueniverse.com> - MIT Licensed -*/ - - -// Declare namespace - -var hawk = {}; - - -// Export if used as a module - -if (typeof module !== "undefined" && module.exports) { - module.exports = hawk; -} - -hawk.client = { - - // Generate an Authorization header for a given request - - /* - uri: 'http://example.com/resource?a=b' - method: HTTP verb (e.g. 'GET', 'POST') - options: { - - // Required - - credentials: { - id: 'dh37fgj492je', - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - - // Optional - - ext: 'application-specific', // Application specific data sent via the ext attribute - timestamp: Date.now() / 1000, // A pre-calculated timestamp in seconds - nonce: '2334f34f', // A pre-generated nonce - localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided) - payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided) - contentType: 'application/json', // Payload content-type (ignored if hash provided) - hash: 'U4MKKSmiVxk37JCCrAVIjV=', // Pre-calculated payload hash - app: '24s23423f34dx', // Oz application id - dlg: '234sz34tww3sd' // Oz delegated-by application id - } - */ - - header: function (uri, method, options) { - - var result = { - field: '', - artifacts: {} - }; - - // Validate inputs - - if (!uri || (typeof uri !== 'string' && typeof uri !== 'object') || - !method || typeof method !== 'string' || - !options || typeof options !== 'object') { - - return result; - } - - // Application time - - var timestamp = options.timestamp || Math.floor((hawk.utils.now() + (options.localtimeOffsetMsec || 0)) / 1000) - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return result; - } - - if (hawk.crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return result; - } - - // Parse URI - - if (typeof uri === 'string') { - uri = hawk.utils.parseUri(uri); - } - - // Calculate signature - - var artifacts = { - ts: timestamp, - nonce: options.nonce || hawk.utils.randomString(6), - method: method, - resource: uri.relative, - host: uri.hostname, - port: uri.port, - hash: options.hash, - ext: options.ext, - app: options.app, - dlg: options.dlg - }; - - result.artifacts = artifacts; - - // Calculate payload hash - - if (!artifacts.hash && - options.hasOwnProperty('payload')) { - - artifacts.hash = hawk.crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType); - } - - var mac = hawk.crypto.calculateMac('header', credentials, artifacts); - - // Construct header - - var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''; // Other falsey values allowed - var header = 'Hawk id="' + credentials.id + - '", ts="' + artifacts.ts + - '", nonce="' + artifacts.nonce + - (artifacts.hash ? '", hash="' + artifacts.hash : '') + - (hasExt ? '", ext="' + hawk.utils.escapeHeaderAttribute(artifacts.ext) : '') + - '", mac="' + mac + '"'; - - if (artifacts.app) { - header += ', app="' + artifacts.app + - (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"'; - } - - result.field = header; - - return result; - }, - - - // Validate server response - - /* - request: object created via 'new XMLHttpRequest()' after response received - artifacts: object recieved from header().artifacts - options: { - payload: optional payload received - required: specifies if a Server-Authorization header is required. Defaults to 'false' - } - */ - - authenticate: function (request, credentials, artifacts, options) { - - options = options || {}; - - if (request.getResponseHeader('www-authenticate')) { - - // Parse HTTP WWW-Authenticate header - - var attributes = hawk.utils.parseAuthorizationHeader(request.getResponseHeader('www-authenticate'), ['ts', 'tsm', 'error']); - if (!attributes) { - return false; - } - - if (attributes.ts) { - var tsm = hawk.crypto.calculateTsMac(attributes.ts, credentials); - if (tsm !== attributes.tsm) { - return false; - } - - hawk.utils.setNtpOffset(attributes.ts - Math.floor(Date.now() / 1000)); // Keep offset at 1 second precision - } - } - - // Parse HTTP Server-Authorization header - - if (!request.getResponseHeader('server-authorization') && - !options.required) { - - return true; - } - - var attributes = hawk.utils.parseAuthorizationHeader(request.getResponseHeader('server-authorization'), ['mac', 'ext', 'hash']); - if (!attributes) { - return false; - } - - var modArtifacts = { - ts: artifacts.ts, - nonce: artifacts.nonce, - method: artifacts.method, - resource: artifacts.resource, - host: artifacts.host, - port: artifacts.port, - hash: attributes.hash, - ext: attributes.ext, - app: artifacts.app, - dlg: artifacts.dlg - }; - - var mac = hawk.crypto.calculateMac('response', credentials, modArtifacts); - if (mac !== attributes.mac) { - return false; - } - - if (!options.hasOwnProperty('payload')) { - return true; - } - - if (!attributes.hash) { - return false; - } - - var calculatedHash = hawk.crypto.calculatePayloadHash(options.payload, credentials.algorithm, request.getResponseHeader('content-type')); - return (calculatedHash === attributes.hash); - }, - - message: function (host, port, message, options) { - - // Validate inputs - - if (!host || typeof host !== 'string' || - !port || typeof port !== 'number' || - message === null || message === undefined || typeof message !== 'string' || - !options || typeof options !== 'object') { - - return null; - } - - // Application time - - var timestamp = options.timestamp || Math.floor((hawk.utils.now() + (options.localtimeOffsetMsec || 0)) / 1000) - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return null; - } - - if (hawk.crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return null; - } - - // Calculate signature - - var artifacts = { - ts: timestamp, - nonce: options.nonce || hawk.utils.randomString(6), - host: host, - port: port, - hash: hawk.crypto.calculatePayloadHash(message, credentials.algorithm) - }; - - // Construct authorization - - var result = { - id: credentials.id, - ts: artifacts.ts, - nonce: artifacts.nonce, - hash: artifacts.hash, - mac: hawk.crypto.calculateMac('message', credentials, artifacts) - }; - - return result; - } -}; - - -hawk.crypto = { - - headerVersion: '1', - - algorithms: ['sha1', 'sha256'], - - calculateMac: function (type, credentials, options) { - - var normalized = hawk.crypto.generateNormalizedString(type, options); - - var hmac = CryptoJS['Hmac' + credentials.algorithm.toUpperCase()](normalized, credentials.key); - return hmac.toString(CryptoJS.enc.Base64); - }, - - generateNormalizedString: function (type, options) { - - var normalized = 'hawk.' + hawk.crypto.headerVersion + '.' + type + '\n' + - options.ts + '\n' + - options.nonce + '\n' + - (options.method || '').toUpperCase() + '\n' + - (options.resource || '') + '\n' + - options.host.toLowerCase() + '\n' + - options.port + '\n' + - (options.hash || '') + '\n'; - - if (options.ext) { - normalized += options.ext.replace('\\', '\\\\').replace('\n', '\\n'); - } - - normalized += '\n'; - - if (options.app) { - normalized += options.app + '\n' + - (options.dlg || '') + '\n'; - } - - return normalized; - }, - - calculatePayloadHash: function (payload, algorithm, contentType) { - - var hash = CryptoJS.algo[algorithm.toUpperCase()].create(); - hash.update('hawk.' + hawk.crypto.headerVersion + '.payload\n'); - hash.update(hawk.utils.parseContentType(contentType) + '\n'); - hash.update(payload || ''); - hash.update('\n'); - return hash.finalize().toString(CryptoJS.enc.Base64); - }, - - calculateTsMac: function (ts, credentials) { - - var hash = CryptoJS['Hmac' + credentials.algorithm.toUpperCase()]('hawk.' + hawk.crypto.headerVersion + '.ts\n' + ts + '\n', credentials.key); - return hash.toString(CryptoJS.enc.Base64); - } -}; - - -hawk.utils = { - - storage: { // localStorage compatible interface - _cache: {}, - setItem: function (key, value) { - - hawk.utils.storage._cache[key] = value; - }, - getItem: function (key) { - - return hawk.utils.storage._cache[key]; - } - }, - - setStorage: function (storage) { - - var ntpOffset = hawk.utils.getNtpOffset() || 0; - hawk.utils.storage = storage; - hawk.utils.setNtpOffset(ntpOffset); - }, - - setNtpOffset: function (offset) { - - hawk.utils.storage.setItem('hawk_ntp_offset', offset); - }, - - getNtpOffset: function () { - - return parseInt(hawk.utils.storage.getItem('hawk_ntp_offset') || '0', 10); - }, - - now: function () { - - return Date.now() + hawk.utils.getNtpOffset(); - }, - - escapeHeaderAttribute: function (attribute) { - - return attribute.replace(/\\/g, '\\\\').replace(/\"/g, '\\"'); - }, - - parseContentType: function (header) { - - if (!header) { - return ''; - } - - return header.split(';')[0].trim().toLowerCase(); - }, - - parseAuthorizationHeader: function (header, keys) { - - if (!header) { - return null; - } - - var headerParts = header.match(/^(\w+)(?:\s+(.*))?$/); // Header: scheme[ something] - if (!headerParts) { - return null; - } - - var scheme = headerParts[1]; - if (scheme.toLowerCase() !== 'hawk') { - return null; - } - - var attributesString = headerParts[2]; - if (!attributesString) { - return null; - } - - var attributes = {}; - var verify = attributesString.replace(/(\w+)="([^"\\]*)"\s*(?:,\s*|$)/g, function ($0, $1, $2) { - - // Check valid attribute names - - if (keys.indexOf($1) === -1) { - return; - } - - // Allowed attribute value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9 - - if ($2.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~]+$/) === null) { - return; - } - - // Check for duplicates - - if (attributes.hasOwnProperty($1)) { - return; - } - - attributes[$1] = $2; - return ''; - }); - - if (verify !== '') { - return null; - } - - return attributes; - }, - - randomString: function (size) { - - var randomSource = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; - var len = randomSource.length; - - var result = []; - for (var i = 0; i < size; ++i) { - result[i] = randomSource[Math.floor(Math.random() * len)]; - } - - return result.join(''); - }, - - parseUri: function (input) { - - // Based on: parseURI 1.2.2 - // http://blog.stevenlevithan.com/archives/parseuri - // (c) Steven Levithan <stevenlevithan.com> - // MIT License - - var keys = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'hostname', 'port', 'resource', 'relative', 'pathname', 'directory', 'file', 'query', 'fragment']; - - var uriRegex = /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?(((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?)(?:#(.*))?)/; - var uriByNumber = uriRegex.exec(input); - var uri = {}; - - var i = 15; - while (i--) { - uri[keys[i]] = uriByNumber[i] || ''; - } - - if (uri.port === null || - uri.port === '') { - - uri.port = (uri.protocol.toLowerCase() === 'http' ? '80' : (uri.protocol.toLowerCase() === 'https' ? '443' : '')); - } - - return uri; - } -}; - - -// Based on: Crypto-JS v3.1.2 -// Copyright (c) 2009-2013, Jeff Mott. All rights reserved. -// http://code.google.com/p/crypto-js/ -// http://code.google.com/p/crypto-js/wiki/License - -var CryptoJS=CryptoJS||function(h,r){var k={},l=k.lib={},n=function(){},f=l.Base={extend:function(a){n.prototype=this;var b=new n;a&&b.mixIn(a);b.hasOwnProperty("init")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},j=l.WordArray=f.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=r?b:4*a.length},toString:function(a){return(a||s).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var e=0;e<a;e++)b[c+e>>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((c+e)%4);else if(65535<d.length)for(e=0;e<a;e+=4)b[c+e>>>2]=d[e>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<32-8*(b%4);a.length=h.ceil(b/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],d=0;d<a;d+=4)b.push(4294967296*h.random()|0);return new j.init(b,a)}}),m=k.enc={},s=m.Hex={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++){var e=b[c>>>2]>>>24-8*(c%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c+=2)d[c>>>3]|=parseInt(a.substr(c,2),16)<<24-4*(c%8);return new j.init(d,b/2)}},p=m.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++)d.push(String.fromCharCode(b[c>>>2]>>>24-8*(c%4)&255));return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c++)d[c>>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new j.init(d,b)}},t=m.Utf8={stringify:function(a){try{return decodeURIComponent(escape(p.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return p.parse(unescape(encodeURIComponent(a)))}},q=l.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new j.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=t.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,d=b.words,c=b.sigBytes,e=this.blockSize,f=c/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;c=h.min(4*a,c);if(a){for(var g=0;g<a;g+=e)this._doProcessBlock(d,g);g=d.splice(0,a);b.sigBytes-=c}return new j.init(g,c)},clone:function(){var a=f.clone.call(this);a._data=this._data.clone();return a},_minBufferSize:0});l.Hasher=q.extend({cfg:f.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){q.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,d){return(new a.init(d)).finalize(b)}},_createHmacHelper:function(a){return function(b,d){return(new u.HMAC.init(a,d)).finalize(b)}}});var u=k.algo={};return k}(Math); -(function () { var k = CryptoJS, b = k.lib, m = b.WordArray, l = b.Hasher, d = [], b = k.algo.SHA1 = l.extend({ _doReset: function () { this._hash = new m.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) }, _doProcessBlock: function (n, p) { for (var a = this._hash.words, e = a[0], f = a[1], h = a[2], j = a[3], b = a[4], c = 0; 80 > c; c++) { if (16 > c) d[c] = n[p + c] | 0; else { var g = d[c - 3] ^ d[c - 8] ^ d[c - 14] ^ d[c - 16]; d[c] = g << 1 | g >>> 31 } g = (e << 5 | e >>> 27) + b + d[c]; g = 20 > c ? g + ((f & h | ~f & j) + 1518500249) : 40 > c ? g + ((f ^ h ^ j) + 1859775393) : 60 > c ? g + ((f & h | f & j | h & j) - 1894007588) : g + ((f ^ h ^ j) - 899497514); b = j; j = h; h = f << 30 | f >>> 2; f = e; e = g } a[0] = a[0] + e | 0; a[1] = a[1] + f | 0; a[2] = a[2] + h | 0; a[3] = a[3] + j | 0; a[4] = a[4] + b | 0 }, _doFinalize: function () { var b = this._data, d = b.words, a = 8 * this._nDataBytes, e = 8 * b.sigBytes; d[e >>> 5] |= 128 << 24 - e % 32; d[(e + 64 >>> 9 << 4) + 14] = Math.floor(a / 4294967296); d[(e + 64 >>> 9 << 4) + 15] = a; b.sigBytes = 4 * d.length; this._process(); return this._hash }, clone: function () { var b = l.clone.call(this); b._hash = this._hash.clone(); return b } }); k.SHA1 = l._createHelper(b); k.HmacSHA1 = l._createHmacHelper(b) })(); -(function (k) { for (var g = CryptoJS, h = g.lib, v = h.WordArray, j = h.Hasher, h = g.algo, s = [], t = [], u = function (q) { return 4294967296 * (q - (q | 0)) | 0 }, l = 2, b = 0; 64 > b;) { var d; a: { d = l; for (var w = k.sqrt(d), r = 2; r <= w; r++) if (!(d % r)) { d = !1; break a } d = !0 } d && (8 > b && (s[b] = u(k.pow(l, 0.5))), t[b] = u(k.pow(l, 1 / 3)), b++); l++ } var n = [], h = h.SHA256 = j.extend({ _doReset: function () { this._hash = new v.init(s.slice(0)) }, _doProcessBlock: function (q, h) { for (var a = this._hash.words, c = a[0], d = a[1], b = a[2], k = a[3], f = a[4], g = a[5], j = a[6], l = a[7], e = 0; 64 > e; e++) { if (16 > e) n[e] = q[h + e] | 0; else { var m = n[e - 15], p = n[e - 2]; n[e] = ((m << 25 | m >>> 7) ^ (m << 14 | m >>> 18) ^ m >>> 3) + n[e - 7] + ((p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10) + n[e - 16] } m = l + ((f << 26 | f >>> 6) ^ (f << 21 | f >>> 11) ^ (f << 7 | f >>> 25)) + (f & g ^ ~f & j) + t[e] + n[e]; p = ((c << 30 | c >>> 2) ^ (c << 19 | c >>> 13) ^ (c << 10 | c >>> 22)) + (c & d ^ c & b ^ d & b); l = j; j = g; g = f; f = k + m | 0; k = b; b = d; d = c; c = m + p | 0 } a[0] = a[0] + c | 0; a[1] = a[1] + d | 0; a[2] = a[2] + b | 0; a[3] = a[3] + k | 0; a[4] = a[4] + f | 0; a[5] = a[5] + g | 0; a[6] = a[6] + j | 0; a[7] = a[7] + l | 0 }, _doFinalize: function () { var d = this._data, b = d.words, a = 8 * this._nDataBytes, c = 8 * d.sigBytes; b[c >>> 5] |= 128 << 24 - c % 32; b[(c + 64 >>> 9 << 4) + 14] = k.floor(a / 4294967296); b[(c + 64 >>> 9 << 4) + 15] = a; d.sigBytes = 4 * b.length; this._process(); return this._hash }, clone: function () { var b = j.clone.call(this); b._hash = this._hash.clone(); return b } }); g.SHA256 = j._createHelper(h); g.HmacSHA256 = j._createHmacHelper(h) })(Math); -(function(){var c=CryptoJS,k=c.enc.Utf8;c.algo.HMAC=c.lib.Base.extend({init:function(a,b){a=this._hasher=new a.init;"string"==typeof b&&(b=k.parse(b));var c=a.blockSize,e=4*c;b.sigBytes>e&&(b=a.finalize(b));b.clamp();for(var f=this._oKey=b.clone(),g=this._iKey=b.clone(),h=f.words,j=g.words,d=0;d<c;d++)h[d]^=1549556828,j[d]^=909522486;f.sigBytes=g.sigBytes=e;this.reset()},reset:function(){var a=this._hasher;a.reset();a.update(this._iKey)},update:function(a){this._hasher.update(a);return this},finalize:function(a){var b=this._hasher;a=b.finalize(a);b.reset();return b.finalize(this._oKey.clone().concat(a))}})})(); -(function(){var h=CryptoJS,j=h.lib.WordArray;h.enc.Base64={stringify:function(b){var e=b.words,f=b.sigBytes,c=this._map;b.clamp();b=[];for(var a=0;a<f;a+=3)for(var d=(e[a>>>2]>>>24-8*(a%4)&255)<<16|(e[a+1>>>2]>>>24-8*((a+1)%4)&255)<<8|e[a+2>>>2]>>>24-8*((a+2)%4)&255,g=0;4>g&&a+0.75*g<f;g++)b.push(c.charAt(d>>>6*(3-g)&63));if(e=c.charAt(64))for(;b.length%4;)b.push(e);return b.join("")},parse:function(b){var e=b.length,f=this._map,c=f.charAt(64);c&&(c=b.indexOf(c),-1!=c&&(e=c));for(var c=[],a=0,d=0;d<e;d++)if(d%4){var g=f.indexOf(b.charAt(d-1))<<2*(d%4),h=f.indexOf(b.charAt(d))>>>6-2*(d%4);c[a>>>2]|=(g|h)<<24-8*(a%4);a++}return j.create(c,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/client.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/client.js deleted file mode 100755 index 41984582..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/client.js +++ /dev/null @@ -1,367 +0,0 @@ -// Load modules - -var Url = require('url'); -var Hoek = require('hoek'); -var Cryptiles = require('cryptiles'); -var Crypto = require('./crypto'); -var Utils = require('./utils'); - - -// Declare internals - -var internals = {}; - - -// Generate an Authorization header for a given request - -/* - uri: 'http://example.com/resource?a=b' or object from Url.parse() - method: HTTP verb (e.g. 'GET', 'POST') - options: { - - // Required - - credentials: { - id: 'dh37fgj492je', - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - - // Optional - - ext: 'application-specific', // Application specific data sent via the ext attribute - timestamp: Date.now(), // A pre-calculated timestamp - nonce: '2334f34f', // A pre-generated nonce - localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided) - payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided) - contentType: 'application/json', // Payload content-type (ignored if hash provided) - hash: 'U4MKKSmiVxk37JCCrAVIjV=', // Pre-calculated payload hash - app: '24s23423f34dx', // Oz application id - dlg: '234sz34tww3sd' // Oz delegated-by application id - } -*/ - -exports.header = function (uri, method, options) { - - var result = { - field: '', - artifacts: {} - }; - - // Validate inputs - - if (!uri || (typeof uri !== 'string' && typeof uri !== 'object') || - !method || typeof method !== 'string' || - !options || typeof options !== 'object') { - - return result; - } - - // Application time - - var timestamp = options.timestamp || Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000) - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return result; - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return result; - } - - // Parse URI - - if (typeof uri === 'string') { - uri = Url.parse(uri); - } - - // Calculate signature - - var artifacts = { - ts: timestamp, - nonce: options.nonce || Cryptiles.randomString(6), - method: method, - resource: uri.pathname + (uri.search || ''), // Maintain trailing '?' - host: uri.hostname, - port: uri.port || (uri.protocol === 'http:' ? 80 : 443), - hash: options.hash, - ext: options.ext, - app: options.app, - dlg: options.dlg - }; - - result.artifacts = artifacts; - - // Calculate payload hash - - if (!artifacts.hash && - options.hasOwnProperty('payload')) { - - artifacts.hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType); - } - - var mac = Crypto.calculateMac('header', credentials, artifacts); - - // Construct header - - var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''; // Other falsey values allowed - var header = 'Hawk id="' + credentials.id + - '", ts="' + artifacts.ts + - '", nonce="' + artifacts.nonce + - (artifacts.hash ? '", hash="' + artifacts.hash : '') + - (hasExt ? '", ext="' + Utils.escapeHeaderAttribute(artifacts.ext) : '') + - '", mac="' + mac + '"'; - - if (artifacts.app) { - header += ', app="' + artifacts.app + - (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"'; - } - - result.field = header; - - return result; -}; - - -// Validate server response - -/* - res: node's response object - artifacts: object recieved from header().artifacts - options: { - payload: optional payload received - required: specifies if a Server-Authorization header is required. Defaults to 'false' - } -*/ - -exports.authenticate = function (res, credentials, artifacts, options) { - - artifacts = Hoek.clone(artifacts); - options = options || {}; - - if (res.headers['www-authenticate']) { - - // Parse HTTP WWW-Authenticate header - - var attributes = Utils.parseAuthorizationHeader(res.headers['www-authenticate'], ['ts', 'tsm', 'error']); - if (attributes instanceof Error) { - return false; - } - - if (attributes.ts) { - var tsm = Crypto.calculateTsMac(attributes.ts, credentials); - if (tsm !== attributes.tsm) { - return false; - } - } - } - - // Parse HTTP Server-Authorization header - - if (!res.headers['server-authorization'] && - !options.required) { - - return true; - } - - var attributes = Utils.parseAuthorizationHeader(res.headers['server-authorization'], ['mac', 'ext', 'hash']); - if (attributes instanceof Error) { - return false; - } - - artifacts.ext = attributes.ext; - artifacts.hash = attributes.hash; - - var mac = Crypto.calculateMac('response', credentials, artifacts); - if (mac !== attributes.mac) { - return false; - } - - if (!options.hasOwnProperty('payload')) { - return true; - } - - if (!attributes.hash) { - return false; - } - - var calculatedHash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, res.headers['content-type']); - return (calculatedHash === attributes.hash); -}; - - -// Generate a bewit value for a given URI - -/* - * credentials is an object with the following keys: 'id, 'key', 'algorithm'. - * options is an object with the following optional keys: 'ext', 'localtimeOffsetMsec' - */ -/* - uri: 'http://example.com/resource?a=b' or object from Url.parse() - options: { - - // Required - - credentials: { - id: 'dh37fgj492je', - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - ttlSec: 60 * 60, // TTL in seconds - - // Optional - - ext: 'application-specific', // Application specific data sent via the ext attribute - localtimeOffsetMsec: 400 // Time offset to sync with server time - }; -*/ - -exports.getBewit = function (uri, options) { - - // Validate inputs - - if (!uri || - (typeof uri !== 'string' && typeof uri !== 'object') || - !options || - typeof options !== 'object' || - !options.ttlSec) { - - return ''; - } - - options.ext = (options.ext === null || options.ext === undefined ? '' : options.ext); // Zero is valid value - - // Application time - - var now = Utils.now() + (options.localtimeOffsetMsec || 0); - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - return ''; - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return ''; - } - - // Parse URI - - if (typeof uri === 'string') { - uri = Url.parse(uri); - } - - // Calculate signature - - var exp = Math.floor(now / 1000) + options.ttlSec; - var mac = Crypto.calculateMac('bewit', credentials, { - ts: exp, - nonce: '', - method: 'GET', - resource: uri.pathname + (uri.search || ''), // Maintain trailing '?' - host: uri.hostname, - port: uri.port || (uri.protocol === 'http:' ? 80 : 443), - ext: options.ext - }); - - // Construct bewit: id\exp\mac\ext - - var bewit = credentials.id + '\\' + exp + '\\' + mac + '\\' + options.ext; - return Utils.base64urlEncode(bewit); -}; - - -// Generate an authorization string for a message - -/* - host: 'example.com', - port: 8000, - message: '{"some":"payload"}', // UTF-8 encoded string for body hash generation - options: { - - // Required - - credentials: { - id: 'dh37fgj492je', - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - - // Optional - - timestamp: Date.now(), // A pre-calculated timestamp - nonce: '2334f34f', // A pre-generated nonce - localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided) - } -*/ - -exports.message = function (host, port, message, options) { - - // Validate inputs - - if (!host || typeof host !== 'string' || - !port || typeof port !== 'number' || - message === null || message === undefined || typeof message !== 'string' || - !options || typeof options !== 'object') { - - return null; - } - - // Application time - - var timestamp = options.timestamp || Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000) - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return null; - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return null; - } - - // Calculate signature - - var artifacts = { - ts: timestamp, - nonce: options.nonce || Cryptiles.randomString(6), - host: host, - port: port, - hash: Crypto.calculatePayloadHash(message, credentials.algorithm) - }; - - // Construct authorization - - var result = { - id: credentials.id, - ts: artifacts.ts, - nonce: artifacts.nonce, - hash: artifacts.hash, - mac: Crypto.calculateMac('message', credentials, artifacts) - }; - - return result; -}; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/crypto.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/crypto.js deleted file mode 100755 index 150340a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/crypto.js +++ /dev/null @@ -1,111 +0,0 @@ -// Load modules - -var Crypto = require('crypto'); -var Url = require('url'); -var Utils = require('./utils'); - - -// Declare internals - -var internals = {}; - - -// MAC normalization format version - -exports.headerVersion = '1'; // Prevent comparison of mac values generated with different normalized string formats - - -// Supported HMAC algorithms - -exports.algorithms = ['sha1', 'sha256']; - - -// Calculate the request MAC - -/* - type: 'header', // 'header', 'bewit', 'response' - credentials: { - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - options: { - method: 'GET', - resource: '/resource?a=1&b=2', - host: 'example.com', - port: 8080, - ts: 1357718381034, - nonce: 'd3d345f', - hash: 'U4MKKSmiVxk37JCCrAVIjV/OhB3y+NdwoCr6RShbVkE=', - ext: 'app-specific-data', - app: 'hf48hd83qwkj', // Application id (Oz) - dlg: 'd8djwekds9cj' // Delegated by application id (Oz), requires options.app - } -*/ - -exports.calculateMac = function (type, credentials, options) { - - var normalized = exports.generateNormalizedString(type, options); - - var hmac = Crypto.createHmac(credentials.algorithm, credentials.key).update(normalized); - var digest = hmac.digest('base64'); - return digest; -}; - - -exports.generateNormalizedString = function (type, options) { - - var normalized = 'hawk.' + exports.headerVersion + '.' + type + '\n' + - options.ts + '\n' + - options.nonce + '\n' + - (options.method || '').toUpperCase() + '\n' + - (options.resource || '') + '\n' + - options.host.toLowerCase() + '\n' + - options.port + '\n' + - (options.hash || '') + '\n'; - - if (options.ext) { - normalized += options.ext.replace('\\', '\\\\').replace('\n', '\\n'); - } - - normalized += '\n'; - - if (options.app) { - normalized += options.app + '\n' + - (options.dlg || '') + '\n'; - } - - return normalized; -}; - - -exports.calculatePayloadHash = function (payload, algorithm, contentType) { - - var hash = exports.initializePayloadHash(algorithm, contentType); - hash.update(payload || ''); - return exports.finalizePayloadHash(hash); -}; - - -exports.initializePayloadHash = function (algorithm, contentType) { - - var hash = Crypto.createHash(algorithm); - hash.update('hawk.' + exports.headerVersion + '.payload\n'); - hash.update(Utils.parseContentType(contentType) + '\n'); - return hash; -}; - - -exports.finalizePayloadHash = function (hash) { - - hash.update('\n'); - return hash.digest('base64'); -}; - - -exports.calculateTsMac = function (ts, credentials) { - - var hmac = Crypto.createHmac(credentials.algorithm, credentials.key); - hmac.update('hawk.' + exports.headerVersion + '.ts\n' + ts + '\n'); - return hmac.digest('base64'); -}; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/index.js deleted file mode 100755 index 1d713cb6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/index.js +++ /dev/null @@ -1,15 +0,0 @@ -// Export sub-modules - -exports.error = exports.Error = require('boom'); -exports.sntp = require('sntp'); -exports.server = require('./server'); -exports.client = require('./client'); -exports.crypto = require('./crypto'); -exports.utils = require('./utils'); - -exports.uri = { - authenticate: exports.server.authenticateBewit, - getBewit: exports.client.getBewit -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/server.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/server.js deleted file mode 100755 index 478c47b3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/server.js +++ /dev/null @@ -1,524 +0,0 @@ -// Load modules - -var Boom = require('boom'); -var Hoek = require('hoek'); -var Cryptiles = require('cryptiles'); -var Crypto = require('./crypto'); -var Utils = require('./utils'); - - -// Declare internals - -var internals = {}; - - -// Hawk authentication - -/* - req: node's HTTP request object or an object as follows: - - var request = { - method: 'GET', - url: '/resource/4?a=1&b=2', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE="' - }; - - credentialsFunc: required function to lookup the set of Hawk credentials based on the provided credentials id. - The credentials include the MAC key, MAC algorithm, and other attributes (such as username) - needed by the application. This function is the equivalent of verifying the username and - password in Basic authentication. - - var credentialsFunc = function (id, callback) { - - // Lookup credentials in database - db.lookup(id, function (err, item) { - - if (err || !item) { - return callback(err); - } - - var credentials = { - // Required - key: item.key, - algorithm: item.algorithm, - // Application specific - user: item.user - }; - - return callback(null, credentials); - }); - }; - - options: { - - hostHeaderName: optional header field name, used to override the default 'Host' header when used - behind a cache of a proxy. Apache2 changes the value of the 'Host' header while preserving - the original (which is what the module must verify) in the 'x-forwarded-host' header field. - Only used when passed a node Http.ServerRequest object. - - nonceFunc: optional nonce validation function. The function signature is function(nonce, ts, callback) - where 'callback' must be called using the signature function(err). - - timestampSkewSec: optional number of seconds of permitted clock skew for incoming timestamps. Defaults to 60 seconds. - Provides a +/- skew which means actual allowed window is double the number of seconds. - - localtimeOffsetMsec: optional local clock time offset express in a number of milliseconds (positive or negative). - Defaults to 0. - - payload: optional payload for validation. The client calculates the hash value and includes it via the 'hash' - header attribute. The server always ensures the value provided has been included in the request - MAC. When this option is provided, it validates the hash value itself. Validation is done by calculating - a hash value over the entire payload (assuming it has already be normalized to the same format and - encoding used by the client to calculate the hash on request). If the payload is not available at the time - of authentication, the authenticatePayload() method can be used by passing it the credentials and - attributes.hash returned in the authenticate callback. - - host: optional host name override. Only used when passed a node request object. - port: optional port override. Only used when passed a node request object. - } - - callback: function (err, credentials, artifacts) { } - */ - -exports.authenticate = function (req, credentialsFunc, options, callback) { - - callback = Utils.nextTick(callback); - - // Default options - - options.nonceFunc = options.nonceFunc || function (nonce, ts, nonceCallback) { return nonceCallback(); }; // No validation - options.timestampSkewSec = options.timestampSkewSec || 60; // 60 seconds - - // Application time - - var now = Utils.now() + (options.localtimeOffsetMsec || 0); // Measure now before any other processing - - // Convert node Http request object to a request configuration object - - var request = Utils.parseRequest(req, options); - if (request instanceof Error) { - return callback(Boom.badRequest(request.message)); - } - - // Parse HTTP Authorization header - - var attributes = Utils.parseAuthorizationHeader(request.authorization); - if (attributes instanceof Error) { - return callback(attributes); - } - - // Construct artifacts container - - var artifacts = { - method: request.method, - host: request.host, - port: request.port, - resource: request.url, - ts: attributes.ts, - nonce: attributes.nonce, - hash: attributes.hash, - ext: attributes.ext, - app: attributes.app, - dlg: attributes.dlg, - mac: attributes.mac, - id: attributes.id - }; - - // Verify required header attributes - - if (!attributes.id || - !attributes.ts || - !attributes.nonce || - !attributes.mac) { - - return callback(Boom.badRequest('Missing attributes'), null, artifacts); - } - - // Fetch Hawk credentials - - credentialsFunc(attributes.id, function (err, credentials) { - - if (err) { - return callback(err, credentials || null, artifacts); - } - - if (!credentials) { - return callback(Boom.unauthorized('Unknown credentials', 'Hawk'), null, artifacts); - } - - if (!credentials.key || - !credentials.algorithm) { - - return callback(Boom.internal('Invalid credentials'), credentials, artifacts); - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return callback(Boom.internal('Unknown algorithm'), credentials, artifacts); - } - - // Calculate MAC - - var mac = Crypto.calculateMac('header', credentials, artifacts); - if (!Cryptiles.fixedTimeComparison(mac, attributes.mac)) { - return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials, artifacts); - } - - // Check payload hash - - if (options.payload !== null && - options.payload !== undefined) { // '' is valid - - if (!attributes.hash) { - return callback(Boom.unauthorized('Missing required payload hash', 'Hawk'), credentials, artifacts); - } - - var hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, request.contentType); - if (!Cryptiles.fixedTimeComparison(hash, attributes.hash)) { - return callback(Boom.unauthorized('Bad payload hash', 'Hawk'), credentials, artifacts); - } - } - - // Check nonce - - options.nonceFunc(attributes.nonce, attributes.ts, function (err) { - - if (err) { - return callback(Boom.unauthorized('Invalid nonce', 'Hawk'), credentials, artifacts); - } - - // Check timestamp staleness - - if (Math.abs((attributes.ts * 1000) - now) > (options.timestampSkewSec * 1000)) { - var fresh = Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000); // Get fresh now - var tsm = Crypto.calculateTsMac(fresh, credentials); - return callback(Boom.unauthorized('Stale timestamp', 'Hawk', { ts: fresh, tsm: tsm }), credentials, artifacts); - } - - // Successful authentication - - return callback(null, credentials, artifacts); - }); - }); -}; - - -// Authenticate payload hash - used when payload cannot be provided during authenticate() - -/* - payload: raw request payload - credentials: from authenticate callback - artifacts: from authenticate callback - contentType: req.headers['content-type'] -*/ - -exports.authenticatePayload = function (payload, credentials, artifacts, contentType) { - - var calculatedHash = Crypto.calculatePayloadHash(payload, credentials.algorithm, contentType); - return Cryptiles.fixedTimeComparison(calculatedHash, artifacts.hash); -}; - - -// Generate a Server-Authorization header for a given response - -/* - credentials: {}, // Object received from authenticate() - artifacts: {} // Object received from authenticate(); 'mac', 'hash', and 'ext' - ignored - options: { - ext: 'application-specific', // Application specific data sent via the ext attribute - payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided) - contentType: 'application/json', // Payload content-type (ignored if hash provided) - hash: 'U4MKKSmiVxk37JCCrAVIjV=' // Pre-calculated payload hash - } -*/ - -exports.header = function (credentials, artifacts, options) { - - // Prepare inputs - - options = options || {}; - - if (!artifacts || - typeof artifacts !== 'object' || - typeof options !== 'object') { - - return ''; - } - - artifacts = Hoek.clone(artifacts); - delete artifacts.mac; - artifacts.hash = options.hash; - artifacts.ext = options.ext; - - // Validate credentials - - if (!credentials || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return ''; - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return ''; - } - - // Calculate payload hash - - if (!artifacts.hash && - options.hasOwnProperty('payload')) { - - artifacts.hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType); - } - - var mac = Crypto.calculateMac('response', credentials, artifacts); - - // Construct header - - var header = 'Hawk mac="' + mac + '"' + - (artifacts.hash ? ', hash="' + artifacts.hash + '"' : ''); - - if (artifacts.ext !== null && - artifacts.ext !== undefined && - artifacts.ext !== '') { // Other falsey values allowed - - header += ', ext="' + Utils.escapeHeaderAttribute(artifacts.ext) + '"'; - } - - return header; -}; - - -/* - * Arguments and options are the same as authenticate() with the exception that the only supported options are: - * 'hostHeaderName', 'localtimeOffsetMsec', 'host', 'port' - */ - -exports.authenticateBewit = function (req, credentialsFunc, options, callback) { - - callback = Utils.nextTick(callback); - - // Application time - - var now = Utils.now() + (options.localtimeOffsetMsec || 0); - - // Convert node Http request object to a request configuration object - - var request = Utils.parseRequest(req, options); - if (request instanceof Error) { - return callback(Boom.badRequest(request.message)); - } - - // Extract bewit - - // 1 2 3 4 - var resource = request.url.match(/^(\/.*)([\?&])bewit\=([^&$]*)(?:&(.+))?$/); - if (!resource) { - return callback(Boom.unauthorized(null, 'Hawk')); - } - - // Bewit not empty - - if (!resource[3]) { - return callback(Boom.unauthorized('Empty bewit', 'Hawk')); - } - - // Verify method is GET - - if (request.method !== 'GET' && - request.method !== 'HEAD') { - - return callback(Boom.unauthorized('Invalid method', 'Hawk')); - } - - // No other authentication - - if (request.authorization) { - return callback(Boom.badRequest('Multiple authentications', 'Hawk')); - } - - // Parse bewit - - var bewitString = Utils.base64urlDecode(resource[3]); - if (bewitString instanceof Error) { - return callback(Boom.badRequest('Invalid bewit encoding')); - } - - // Bewit format: id\exp\mac\ext ('\' is used because it is a reserved header attribute character) - - var bewitParts = bewitString.split('\\'); - if (!bewitParts || - bewitParts.length !== 4) { - - return callback(Boom.badRequest('Invalid bewit structure')); - } - - var bewit = { - id: bewitParts[0], - exp: parseInt(bewitParts[1], 10), - mac: bewitParts[2], - ext: bewitParts[3] || '' - }; - - if (!bewit.id || - !bewit.exp || - !bewit.mac) { - - return callback(Boom.badRequest('Missing bewit attributes')); - } - - // Construct URL without bewit - - var url = resource[1]; - if (resource[4]) { - url += resource[2] + resource[4]; - } - - // Check expiration - - if (bewit.exp * 1000 <= now) { - return callback(Boom.unauthorized('Access expired', 'Hawk'), null, bewit); - } - - // Fetch Hawk credentials - - credentialsFunc(bewit.id, function (err, credentials) { - - if (err) { - return callback(err, credentials || null, bewit.ext); - } - - if (!credentials) { - return callback(Boom.unauthorized('Unknown credentials', 'Hawk'), null, bewit); - } - - if (!credentials.key || - !credentials.algorithm) { - - return callback(Boom.internal('Invalid credentials'), credentials, bewit); - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return callback(Boom.internal('Unknown algorithm'), credentials, bewit); - } - - // Calculate MAC - - var mac = Crypto.calculateMac('bewit', credentials, { - ts: bewit.exp, - nonce: '', - method: 'GET', - resource: url, - host: request.host, - port: request.port, - ext: bewit.ext - }); - - if (!Cryptiles.fixedTimeComparison(mac, bewit.mac)) { - return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials, bewit); - } - - // Successful authentication - - return callback(null, credentials, bewit); - }); -}; - - -/* - * options are the same as authenticate() with the exception that the only supported options are: - * 'nonceFunc', 'timestampSkewSec', 'localtimeOffsetMsec' - */ - -exports.authenticateMessage = function (host, port, message, authorization, credentialsFunc, options, callback) { - - callback = Utils.nextTick(callback); - - // Default options - - options.nonceFunc = options.nonceFunc || function (nonce, ts, nonceCallback) { return nonceCallback(); }; // No validation - options.timestampSkewSec = options.timestampSkewSec || 60; // 60 seconds - - // Application time - - var now = Utils.now() + (options.localtimeOffsetMsec || 0); // Measure now before any other processing - - // Validate authorization - - if (!authorization.id || - !authorization.ts || - !authorization.nonce || - !authorization.hash || - !authorization.mac) { - - return callback(Boom.badRequest('Invalid authorization')) - } - - // Fetch Hawk credentials - - credentialsFunc(authorization.id, function (err, credentials) { - - if (err) { - return callback(err, credentials || null); - } - - if (!credentials) { - return callback(Boom.unauthorized('Unknown credentials', 'Hawk')); - } - - if (!credentials.key || - !credentials.algorithm) { - - return callback(Boom.internal('Invalid credentials'), credentials); - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return callback(Boom.internal('Unknown algorithm'), credentials); - } - - // Construct artifacts container - - var artifacts = { - ts: authorization.ts, - nonce: authorization.nonce, - host: host, - port: port, - hash: authorization.hash - }; - - // Calculate MAC - - var mac = Crypto.calculateMac('message', credentials, artifacts); - if (!Cryptiles.fixedTimeComparison(mac, authorization.mac)) { - return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials); - } - - // Check payload hash - - var hash = Crypto.calculatePayloadHash(message, credentials.algorithm); - if (!Cryptiles.fixedTimeComparison(hash, authorization.hash)) { - return callback(Boom.unauthorized('Bad message hash', 'Hawk'), credentials); - } - - // Check nonce - - options.nonceFunc(authorization.nonce, authorization.ts, function (err) { - - if (err) { - return callback(Boom.unauthorized('Invalid nonce', 'Hawk'), credentials); - } - - // Check timestamp staleness - - if (Math.abs((authorization.ts * 1000) - now) > (options.timestampSkewSec * 1000)) { - return callback(Boom.unauthorized('Stale timestamp'), credentials); - } - - // Successful authentication - - return callback(null, credentials); - }); - }); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/utils.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/utils.js deleted file mode 100755 index c8938fe8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/utils.js +++ /dev/null @@ -1,183 +0,0 @@ -// Load modules - -var Hoek = require('hoek'); -var Sntp = require('sntp'); -var Boom = require('boom'); - - -// Declare internals - -var internals = {}; - - -// Import Hoek Utilities - -internals.import = function () { - - for (var i in Hoek) { - if (Hoek.hasOwnProperty(i)) { - exports[i] = Hoek[i]; - } - } -}; - -internals.import(); - - -// Hawk version - -exports.version = function () { - - return exports.loadPackage(__dirname + '/..').version; -}; - - -// Extract host and port from request - -exports.parseHost = function (req, hostHeaderName) { - - hostHeaderName = (hostHeaderName ? hostHeaderName.toLowerCase() : 'host'); - var hostHeader = req.headers[hostHeaderName]; - if (!hostHeader) { - return null; - } - - var hostHeaderRegex; - if (hostHeader[0] === '[') { - hostHeaderRegex = /^(?:(?:\r\n)?\s)*(\[[^\]]+\])(?::(\d+))?(?:(?:\r\n)?\s)*$/; // IPv6 - } - else { - hostHeaderRegex = /^(?:(?:\r\n)?\s)*([^:]+)(?::(\d+))?(?:(?:\r\n)?\s)*$/; // IPv4, hostname - } - - var hostParts = hostHeader.match(hostHeaderRegex); - - if (!hostParts || - hostParts.length !== 3 || - !hostParts[1]) { - - return null; - } - - return { - name: hostParts[1], - port: (hostParts[2] ? hostParts[2] : (req.connection && req.connection.encrypted ? 443 : 80)) - }; -}; - - -// Parse Content-Type header content - -exports.parseContentType = function (header) { - - if (!header) { - return ''; - } - - return header.split(';')[0].trim().toLowerCase(); -}; - - -// Convert node's to request configuration object - -exports.parseRequest = function (req, options) { - - if (!req.headers) { - return req; - } - - // Obtain host and port information - - if (!options.host || !options.port) { - var host = exports.parseHost(req, options.hostHeaderName); - if (!host) { - return new Error('Invalid Host header'); - } - } - - var request = { - method: req.method, - url: req.url, - host: options.host || host.name, - port: options.port || host.port, - authorization: req.headers.authorization, - contentType: req.headers['content-type'] || '' - }; - - return request; -}; - - -exports.now = function () { - - return Sntp.now(); -}; - - -// Parse Hawk HTTP Authorization header - -exports.parseAuthorizationHeader = function (header, keys) { - - keys = keys || ['id', 'ts', 'nonce', 'hash', 'ext', 'mac', 'app', 'dlg']; - - if (!header) { - return Boom.unauthorized(null, 'Hawk'); - } - - var headerParts = header.match(/^(\w+)(?:\s+(.*))?$/); // Header: scheme[ something] - if (!headerParts) { - return Boom.badRequest('Invalid header syntax'); - } - - var scheme = headerParts[1]; - if (scheme.toLowerCase() !== 'hawk') { - return Boom.unauthorized(null, 'Hawk'); - } - - var attributesString = headerParts[2]; - if (!attributesString) { - return Boom.badRequest('Invalid header syntax'); - } - - var attributes = {}; - var errorMessage = ''; - var verify = attributesString.replace(/(\w+)="([^"\\]*)"\s*(?:,\s*|$)/g, function ($0, $1, $2) { - - // Check valid attribute names - - if (keys.indexOf($1) === -1) { - errorMessage = 'Unknown attribute: ' + $1; - return; - } - - // Allowed attribute value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9 - - if ($2.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~]+$/) === null) { - errorMessage = 'Bad attribute value: ' + $1; - return; - } - - // Check for duplicates - - if (attributes.hasOwnProperty($1)) { - errorMessage = 'Duplicate attribute: ' + $1; - return; - } - - attributes[$1] = $2; - return ''; - }); - - if (verify !== '') { - return Boom.badRequest(errorMessage || 'Bad header format'); - } - - return attributes; -}; - - -exports.unauthorized = function (message) { - - return Boom.unauthorized(message, 'Hawk'); -}; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore deleted file mode 100644 index 77ba16cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml deleted file mode 100755 index 047f7e3d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE deleted file mode 100755 index 911b97ee..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2013, Walmart. -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 Walmart 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 WALMART 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/Makefile deleted file mode 100755 index 884ec6db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -test: - @node node_modules/lab/bin/lab -test-cov: - @node node_modules/lab/bin/lab -r threshold -t 100 -test-cov-html: - @node node_modules/lab/bin/lab -r html -o coverage.html -complexity: - @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/README.md deleted file mode 100755 index 1970b1c4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/README.md +++ /dev/null @@ -1,6 +0,0 @@ -<a href="https://github.com/spumko"><img src="https://raw.github.com/spumko/spumko/master/images/from.png" align="right" /></a> -![boom Logo](https://raw.github.com/spumko/boom/master/images/boom.png) - -HTTP-friendly error objects - -[![Build Status](https://secure.travis-ci.org/spumko/boom.png)](http://travis-ci.org/spumko/boom) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/images/boom.png b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/images/boom.png deleted file mode 100755 index 373bc13455bc0a71a6a4538158aee59c6994b761..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29479 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 QhhSjjq?9Eq#J`37AMgo!6951J diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js deleted file mode 100755 index 0bbeed95..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js +++ /dev/null @@ -1,207 +0,0 @@ -// Load modules - -var Http = require('http'); -var NodeUtil = require('util'); -var Hoek = require('hoek'); - - -// Declare internals - -var internals = {}; - - -exports = module.exports = internals.Boom = function (/* (new Error) or (code, message) */) { - - var self = this; - - Hoek.assert(this.constructor === internals.Boom, 'Error must be instantiated using new'); - - Error.call(this); - this.isBoom = true; - - this.response = { - code: 0, - payload: {}, - headers: {} - // type: 'content-type' - }; - - if (arguments[0] instanceof Error) { - - // Error - - var error = arguments[0]; - - this.data = error; - this.response.code = error.code || 500; - if (error.message) { - this.message = error.message; - } - } - else { - - // code, message - - var code = arguments[0]; - var message = arguments[1]; - - Hoek.assert(!isNaN(parseFloat(code)) && isFinite(code) && code >= 400, 'First argument must be a number (400+)'); - - this.response.code = code; - if (message) { - this.message = message; - } - } - - // Response format - - this.reformat(); - - return this; -}; - -NodeUtil.inherits(internals.Boom, Error); - - -internals.Boom.prototype.reformat = function () { - - this.response.payload.code = this.response.code; - this.response.payload.error = Http.STATUS_CODES[this.response.code] || 'Unknown'; - if (this.message) { - this.response.payload.message = Hoek.escapeHtml(this.message); // Prevent XSS from error message - } -}; - - -// Utilities - -internals.Boom.badRequest = function (message) { - - return new internals.Boom(400, message); -}; - - -internals.Boom.unauthorized = function (message, scheme, attributes) { // Or function (message, wwwAuthenticate[]) - - var err = new internals.Boom(401, message); - - if (!scheme) { - return err; - } - - var wwwAuthenticate = ''; - - if (typeof scheme === 'string') { - - // function (message, scheme, attributes) - - wwwAuthenticate = scheme; - if (attributes) { - var names = Object.keys(attributes); - for (var i = 0, il = names.length; i < il; ++i) { - if (i) { - wwwAuthenticate += ','; - } - - var value = attributes[names[i]]; - if (value === null || - value === undefined) { // Value can be zero - - value = ''; - } - wwwAuthenticate += ' ' + names[i] + '="' + Hoek.escapeHeaderAttribute(value.toString()) + '"'; - } - } - - if (message) { - if (attributes) { - wwwAuthenticate += ','; - } - wwwAuthenticate += ' error="' + Hoek.escapeHeaderAttribute(message) + '"'; - } - else { - err.isMissing = true; - } - } - else { - - // function (message, wwwAuthenticate[]) - - var wwwArray = scheme; - for (var i = 0, il = wwwArray.length; i < il; ++i) { - if (i) { - wwwAuthenticate += ', '; - } - - wwwAuthenticate += wwwArray[i]; - } - } - - err.response.headers['WWW-Authenticate'] = wwwAuthenticate; - - return err; -}; - - -internals.Boom.clientTimeout = function (message) { - - return new internals.Boom(408, message); -}; - - -internals.Boom.serverTimeout = function (message) { - - return new internals.Boom(503, message); -}; - - -internals.Boom.forbidden = function (message) { - - return new internals.Boom(403, message); -}; - - -internals.Boom.notFound = function (message) { - - return new internals.Boom(404, message); -}; - - -internals.Boom.internal = function (message, data) { - - var err = new internals.Boom(500, message); - - if (data && data.stack) { - err.trace = data.stack.split('\n'); - err.outterTrace = Hoek.displayStack(1); - } - else { - err.trace = Hoek.displayStack(1); - } - - err.data = data; - err.response.payload.message = 'An internal server error occurred'; // Hide actual error from user - - return err; -}; - - -internals.Boom.passThrough = function (code, payload, contentType, headers) { - - var err = new internals.Boom(500, 'Pass-through'); // 500 code is only used to initialize - - err.data = { - code: code, - payload: payload, - type: contentType - }; - - err.response.code = code; - err.response.type = contentType; - err.response.headers = headers; - err.response.payload = payload; - - return err; -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/package.json deleted file mode 100755 index a6c56b90..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "boom", - "description": "HTTP-friendly error objects", - "version": "0.4.2", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [], - "repository": { - "type": "git", - "url": "git://github.com/spumko/boom" - }, - "main": "index", - "keywords": [ - "error", - "http" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "hoek": "0.9.x" - }, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/spumko/boom/raw/master/LICENSE" - } - ], - "readme": "<a href=\"https://github.com/spumko\"><img src=\"https://raw.github.com/spumko/spumko/master/images/from.png\" align=\"right\" /></a>\n![boom Logo](https://raw.github.com/spumko/boom/master/images/boom.png)\n\nHTTP-friendly error objects\n\n[![Build Status](https://secure.travis-ci.org/spumko/boom.png)](http://travis-ci.org/spumko/boom)\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/spumko/boom/issues" - }, - "homepage": "https://github.com/spumko/boom", - "_id": "boom@0.4.2", - "dist": { - "shasum": "92a32f029aba10e290058f22c83377d073ed5cdd" - }, - "_from": "boom@0.4.x", - "_resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js deleted file mode 100755 index a20c1c34..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js +++ /dev/null @@ -1,245 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Boom = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Boom', function () { - - it('returns an error with info when constructed using another error', function (done) { - - var error = new Error('ka-boom'); - error.xyz = 123; - var err = new Boom(error); - expect(err.data.xyz).to.equal(123); - expect(err.message).to.equal('ka-boom'); - expect(err.response).to.deep.equal({ - code: 500, - payload: { - code: 500, - error: 'Internal Server Error', - message: 'ka-boom' - }, - headers: {} - }); - done(); - }); - - describe('#isBoom', function () { - - it('returns true for Boom object', function (done) { - - expect(Boom.badRequest().isBoom).to.equal(true); - done(); - }); - - it('returns false for Error object', function (done) { - - expect(new Error().isBoom).to.not.exist; - done(); - }); - }); - - describe('#badRequest', function () { - - it('returns a 400 error code', function (done) { - - expect(Boom.badRequest().response.code).to.equal(400); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.badRequest('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#unauthorized', function () { - - it('returns a 401 error code', function (done) { - - var err = Boom.unauthorized(); - expect(err.response.code).to.equal(401); - expect(err.response.headers).to.deep.equal({}); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.unauthorized('my message').message).to.equal('my message'); - done(); - }); - - it('returns a WWW-Authenticate header when passed a scheme', function (done) { - - var err = Boom.unauthorized('boom', 'Test'); - expect(err.response.code).to.equal(401); - expect(err.response.headers['WWW-Authenticate']).to.equal('Test error="boom"'); - done(); - }); - - it('returns a WWW-Authenticate header when passed a scheme and attributes', function (done) { - - var err = Boom.unauthorized('boom', 'Test', { a: 1, b: 'something', c: null, d: 0 }); - expect(err.response.code).to.equal(401); - expect(err.response.headers['WWW-Authenticate']).to.equal('Test a="1", b="something", c="", d="0", error="boom"'); - done(); - }); - - it('sets the isMissing flag when error message is empty', function (done) { - - var err = Boom.unauthorized('', 'Basic'); - expect(err.isMissing).to.equal(true); - done(); - }); - - it('does not set the isMissing flag when error message is not empty', function (done) { - - var err = Boom.unauthorized('message', 'Basic'); - expect(err.isMissing).to.equal(undefined); - done(); - }); - - it('sets a WWW-Authenticate when passed as an array', function (done) { - - var err = Boom.unauthorized('message', ['Basic', 'Example e="1"', 'Another x="3", y="4"']); - expect(err.response.headers['WWW-Authenticate']).to.equal('Basic, Example e="1", Another x="3", y="4"'); - done(); - }); - }); - - describe('#clientTimeout', function () { - - it('returns a 408 error code', function (done) { - - expect(Boom.clientTimeout().response.code).to.equal(408); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.clientTimeout('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#serverTimeout', function () { - - it('returns a 503 error code', function (done) { - - expect(Boom.serverTimeout().response.code).to.equal(503); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.serverTimeout('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#forbidden', function () { - - it('returns a 403 error code', function (done) { - - expect(Boom.forbidden().response.code).to.equal(403); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.forbidden('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#notFound', function () { - - it('returns a 404 error code', function (done) { - - expect(Boom.notFound().response.code).to.equal(404); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.notFound('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#internal', function () { - - it('returns a 500 error code', function (done) { - - expect(Boom.internal().response.code).to.equal(500); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - var err = Boom.internal('my message'); - expect(err.message).to.equal('my message'); - expect(err.response.payload.message).to.equal('An internal server error occurred'); - done(); - }); - - it('passes data on the callback if its passed in', function (done) { - - expect(Boom.internal('my message', { my: 'data' }).data.my).to.equal('data'); - done(); - }); - - it('uses passed in stack if its available', function (done) { - - var error = new Error(); - error.stack = 'my stack line\nmy second stack line'; - expect(Boom.internal('my message', error).trace[0]).to.equal('my stack line'); - done(); - }); - }); - - describe('#passThrough', function () { - - it('returns a pass-through error', function (done) { - - var err = Boom.passThrough(499, { a: 1 }, 'application/text', { 'X-Test': 'Boom' }); - expect(err.response.code).to.equal(499); - expect(err.message).to.equal('Pass-through'); - expect(err.response).to.deep.equal({ - code: 499, - payload: { a: 1 }, - headers: { 'X-Test': 'Boom' }, - type: 'application/text' - }); - done(); - }); - }); - - describe('#reformat', function () { - - it('encodes any HTML markup in the response payload', function (done) { - - var boom = new Boom(new Error('<script>alert(1)</script>')); - expect(boom.response.payload.message).to.not.contain('<script>'); - done(); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore deleted file mode 100644 index b3bb5176..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml deleted file mode 100755 index 40ca59ee..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE deleted file mode 100755 index e699a7bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2013, Eran Hammer. -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 Eran Hammer 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 ERAN HAMMER 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile deleted file mode 100755 index 9e7138c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -test: - @./node_modules/.bin/lab -test-cov: - @./node_modules/.bin/lab -r threshold -t 100 -test-cov-html: - @./node_modules/.bin/lab -r html -o coverage.html -complexity: - @./node_modules/.bin/cr -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md deleted file mode 100644 index 6a900a49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md +++ /dev/null @@ -1,6 +0,0 @@ -cryptiles -========= - -General purpose crypto utilities - -[![Build Status](https://secure.travis-ci.org/hueniverse/cryptiles.png)](http://travis-ci.org/hueniverse/cryptiles) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js deleted file mode 100755 index dcf2bc38..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js +++ /dev/null @@ -1,68 +0,0 @@ -// Load modules - -var Crypto = require('crypto'); -var Boom = require('boom'); - - -// Declare internals - -var internals = {}; - - -// Generate a cryptographically strong pseudo-random data - -exports.randomString = function (size) { - - var buffer = exports.randomBits((size + 1) * 6); - if (buffer instanceof Error) { - return buffer; - } - - var string = buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, ''); - return string.slice(0, size); -}; - - -exports.randomBits = function (bits) { - - if (!bits || - bits < 0) { - - return Boom.internal('Invalid random bits count'); - } - - var bytes = Math.ceil(bits / 8); - try { - return Crypto.randomBytes(bytes); - } - catch (err) { - return Boom.internal('Failed generating random bits: ' + err.message); - } -}; - - -// Compare two strings using fixed time algorithm (to prevent time-based analysis of MAC digest match) - -exports.fixedTimeComparison = function (a, b) { - - if (typeof a !== 'string' || - typeof b !== 'string') { - - return false; - } - - var mismatch = (a.length === b.length ? 0 : 1); - if (mismatch) { - b = a; - } - - for (var i = 0, il = a.length; i < il; ++i) { - var ac = a.charCodeAt(i); - var bc = b.charCodeAt(i); - mismatch += (ac === bc ? 0 : 1); - } - - return (mismatch === 0); -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json deleted file mode 100755 index cafe4c1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "cryptiles", - "description": "General purpose crypto utilities", - "version": "0.2.2", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [], - "repository": { - "type": "git", - "url": "git://github.com/hueniverse/cryptiles" - }, - "main": "index", - "keywords": [ - "cryptography", - "security", - "utilites" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "boom": "0.4.x" - }, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/hueniverse/cryptiles/raw/master/LICENSE" - } - ], - "readme": "cryptiles\n=========\n\nGeneral purpose crypto utilities\n\n[![Build Status](https://secure.travis-ci.org/hueniverse/cryptiles.png)](http://travis-ci.org/hueniverse/cryptiles)\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/hueniverse/cryptiles/issues" - }, - "homepage": "https://github.com/hueniverse/cryptiles", - "_id": "cryptiles@0.2.2", - "dist": { - "shasum": "0462e8adb7667ffa104947a34a96e68627d8c95d" - }, - "_from": "cryptiles@0.2.x", - "_resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js deleted file mode 100755 index 58aaa70b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js +++ /dev/null @@ -1,101 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Cryptiles = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Cryptiles', function () { - - describe('#randomString', function () { - - it('should generate the right length string', function (done) { - - for (var i = 1; i <= 1000; ++i) { - expect(Cryptiles.randomString(i).length).to.equal(i); - } - - done(); - }); - - it('returns an error on invalid bits size', function (done) { - - expect(Cryptiles.randomString(99999999999999999999).message).to.equal('Failed generating random bits: Argument #1 must be number > 0'); - done(); - }); - }); - - describe('#randomBits', function () { - - it('returns an error on invalid input', function (done) { - - expect(Cryptiles.randomBits(0).message).to.equal('Invalid random bits count'); - done(); - }); - }); - - describe('#fixedTimeComparison', function () { - - var a = Cryptiles.randomString(50000); - var b = Cryptiles.randomString(150000); - - it('should take the same amount of time comparing different string sizes', function (done) { - - var now = Date.now(); - Cryptiles.fixedTimeComparison(b, a); - var t1 = Date.now() - now; - - now = Date.now(); - Cryptiles.fixedTimeComparison(b, b); - var t2 = Date.now() - now; - - expect(t2 - t1).to.be.within(-20, 20); - done(); - }); - - it('should return true for equal strings', function (done) { - - expect(Cryptiles.fixedTimeComparison(a, a)).to.equal(true); - done(); - }); - - it('should return false for different strings (size, a < b)', function (done) { - - expect(Cryptiles.fixedTimeComparison(a, a + 'x')).to.equal(false); - done(); - }); - - it('should return false for different strings (size, a > b)', function (done) { - - expect(Cryptiles.fixedTimeComparison(a + 'x', a)).to.equal(false); - done(); - }); - - it('should return false for different strings (size, a = b)', function (done) { - - expect(Cryptiles.fixedTimeComparison(a + 'x', a + 'y')).to.equal(false); - done(); - }); - - it('should return false when not a string', function (done) { - - expect(Cryptiles.fixedTimeComparison('x', null)).to.equal(false); - done(); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore deleted file mode 100644 index 9966e5e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov -complexity.md diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml deleted file mode 100755 index 40ca59ee..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE deleted file mode 100755 index 394adcff..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE +++ /dev/null @@ -1,33 +0,0 @@ -Copyright (c) 2011-2013, Walmart. -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 Walmart 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 WALMART 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. - - - * * * - - -Portions of this project were initially based on Postmile, Copyright (c) 2011, Yahoo Inc. -Postmile is published at https://github.com/yahoo/postmile and its licensing terms are -published at https://github.com/yahoo/postmile/blob/master/LICENSE. - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile deleted file mode 100755 index e605d6c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -test: - @node node_modules/lab/bin/lab -test-cov: - @node node_modules/lab/bin/lab -r threshold -t 100 -test-cov-html: - @node node_modules/lab/bin/lab -r html -o coverage.html -complexity: - @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/README.md deleted file mode 100755 index ac64e2fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/README.md +++ /dev/null @@ -1,436 +0,0 @@ -<a href="https://github.com/spumko"><img src="https://raw.github.com/spumko/spumko/master/images/from.png" align="right" /></a> -![hoek Logo](https://raw.github.com/spumko/hoek/master/images/hoek.png) - -General purpose node utilities - -[![Build Status](https://secure.travis-ci.org/spumko/hoek.png)](http://travis-ci.org/spumko/hoek) - -# Table of Contents - -* [Introduction](#introduction "Introduction") -* [Object](#object "Object") - * [clone](#cloneobj "clone") - * [merge](#mergetarget-source-isnulloverride-ismergearrays "merge") - * [applyToDefaults](#applytodefaultsdefaults-options "applyToDefaults") - * [unique](#uniquearray-key "unique") - * [mapToObject](#maptoobjectarray-key "mapToObject") - * [intersect](#intersectarray1-array2 "intersect") - * [matchKeys](#matchkeysobj-keys "matchKeys") - * [flatten](#flattenarray-target "flatten") - * [removeKeys](#removekeysobject-keys "removeKeys") - * [reach](#reachobj-chain "reach") - * [inheritAsync](#inheritasyncself-obj-keys "inheritAsync") - * [rename](#renameobj-from-to "rename") -* [Timer](#timer "Timer") -* [Binary Encoding/Decoding](#binary "Binary Encoding/Decoding") - * [base64urlEncode](#binary64urlEncodevalue "binary64urlEncode") - * [base64urlDecode](#binary64urlDecodevalue "binary64urlDecode") -* [Escaping Characters](#escaped "Escaping Characters") - * [escapeHtml](#escapeHtmlstring "escapeHtml") - * [escapeHeaderAttribute](#escapeHeaderAttributeattribute "escapeHeaderAttribute") - * [escapeRegex](#escapeRegexstring "escapeRegex") -* [Errors](#errors "Errors") - * [assert](#assertmessage "assert") - * [abort](#abortmessage "abort") - * [displayStack](#displayStackslice "displayStack") - * [callStack](#callStackslice "callStack") - * [toss](#tosscondition "toss") -* [Load files](#load-files "Load Files") - * [loadPackage](#loadPackagedir "loadpackage") - * [loadDirModules](#loadDirModulespath-excludefiles-target "loaddirmodules") - - - -# Introduction - -The *Hoek* general purpose node utilities library is used to aid in a variety of manners. It comes with useful methods for Arrays (clone, merge, applyToDefaults), Objects (removeKeys, copy), Asserting and more. - -For example, to use Hoek to set configuration with default options: -```javascript -var Hoek = require('hoek'); - -var default = {url : "www.github.com", port : "8000", debug : true} - -var config = Hoek.applyToDefaults(default, {port : "3000", admin : true}); - -// In this case, config would be { url: 'www.github.com', port: '3000', debug: true, admin: true } -``` - -Under each of the sections (such as Array), there are subsections which correspond to Hoek methods. Each subsection will explain how to use the corresponding method. In each js excerpt below, the var Hoek = require('hoek') is omitted for brevity. - -## Object - -Hoek provides several helpful methods for objects and arrays. - -### clone(obj) - -This method is used to clone an object or an array. A *deep copy* is made (duplicates everything, including values that are objects). - -```javascript - -var nestedObj = { - w: /^something$/ig, - x: { - a: [1, 2, 3], - b: 123456, - c: new Date() - }, - y: 'y', - z: new Date() - }; - -var copy = Hoek.clone(nestedObj); - -copy.x.b = 100; - -console.log(copy.y) // results in 'y' -console.log(nestedObj.x.b) // results in 123456 -console.log(copy.x.b) // results in 100 -``` - -### merge(target, source, isNullOverride, isMergeArrays) -isNullOverride, isMergeArrays default to true - -Merge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied - - -```javascript - -var target = {a: 1, b : 2} -var source = {a: 0, c: 5} -var source2 = {a: null, c: 5} - -var targetArray = [1, 2, 3]; -var sourceArray = [4, 5]; - -var newTarget = Hoek.merge(target, source); // results in {a: 0, b: 2, c: 5} -newTarget = Hoek.merge(target, source2); // results in {a: null, b: 2, c: 5} -newTarget = Hoek.merge(target, source2, false); // results in {a: 1, b: 2, c: 5} - -newTarget = Hoek.merge(targetArray, sourceArray) // results in [1, 2, 3, 4, 5] -newTarget = Hoek.merge(targetArray, sourceArray, true, false) // results in [4, 5] - - - - -``` - -### applyToDefaults(defaults, options) - -Apply options to a copy of the defaults - -```javascript - -var defaults = {host: "localhost", port: 8000}; -var options = {port: 8080}; - -var config = Hoek.applyToDefaults(defaults, options); // results in {host: "localhost", port: 8080}; - - -``` - -### unique(array, key) - -Remove duplicate items from Array - -```javascript - -var array = [1, 2, 2, 3, 3, 4, 5, 6]; - -var newArray = Hoek.unique(array); // results in [1,2,3,4,5,6]; - -array = [{id: 1}, {id: 1}, {id: 2}]; - -newArray = Hoek.unique(array, "id") // results in [{id: 1}, {id: 2}] - -``` - -### mapToObject(array, key) - -Convert an Array into an Object - -```javascript - -var array = [1,2,3]; -var newObject = Hoek.mapToObject(array); // results in [{"1": true}, {"2": true}, {"3": true}] - -array = [{id: 1}, {id: 2}]; -newObject = Hoek.mapToObject(array, "id") // results in [{"id": 1}, {"id": 2}] - -``` -### intersect(array1, array2) - -Find the common unique items in two arrays - -```javascript - -var array1 = [1, 2, 3]; -var array2 = [1, 4, 5]; - -var newArray = Hoek.intersect(array1, array2) // results in [1] - -``` - -### matchKeys(obj, keys) - -Find which keys are present - -```javascript - -var obj = {a: 1, b: 2, c: 3}; -var keys = ["a", "e"]; - -Hoek.matchKeys(obj, keys) // returns ["a"] - -``` - -### flatten(array, target) - -Flatten an array - -```javascript - -var array = [1, 2, 3]; -var target = [4, 5]; - -var flattenedArray = Hoek.flatten(array, target) // results in [4, 5, 1, 2, 3]; - -``` - -### removeKeys(object, keys) - -Remove keys - -```javascript - -var object = {a: 1, b: 2, c: 3, d: 4}; - -var keys = ["a", "b"]; - -Hoek.removeKeys(object, keys) // object is now {c: 3, d: 4} - -``` - -### reach(obj, chain) - -Converts an object key chain string to reference - -```javascript - -var chain = 'a.b.c'; -var obj = {a : {b : { c : 1}}}; - -Hoek.reach(obj, chain) // returns 1 - -``` - -### inheritAsync(self, obj, keys) - -Inherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors - -```javascript - -var targetFunc = function () { }; - -var proto = { - a: function () { - return 'a!'; - }, - b: function () { - return 'b!'; - }, - c: function () { - throw new Error('c!'); - } - }; - -var keys = ['a', 'c']; - -Hoek.inheritAsync(targetFunc, proto, ['a', 'c']); - -var target = new targetFunc(); - -target.a(function(err, result){console.log(result)} // returns 'a!' - -target.c(function(err, result){console.log(result)} // returns undefined - -target.b(function(err, result){console.log(result)} // gives error: Object [object Object] has no method 'b' - -``` - -### rename(obj, from, to) - -Rename a key of an object - -```javascript - -var obj = {a : 1, b : 2}; - -Hoek.rename(obj, "a", "c"); // obj is now {c : 1, b : 2} - -``` - - -# Timer - -A Timer object. Initializing a new timer object sets the ts to the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC. - -```javascript - - -example : - - -var timerObj = new Hoek.Timer(); -console.log("Time is now: " + timerObj.ts) -console.log("Elapsed time from initialization: " + timerObj.elapsed() + 'milliseconds') - -``` - -# Binary Encoding/Decoding - -### base64urlEncode(value) - -Encodes value in Base64 or URL encoding - -### base64urlDecode(value) - -Decodes data in Base64 or URL encoding. -# Escaping Characters - -Hoek provides convenient methods for escaping html characters. The escaped characters are as followed: - -```javascript - -internals.htmlEscaped = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' -}; - -``` - -### escapeHtml(string) - -```javascript - -var string = '<html> hey </html>'; -var escapedString = Hoek.escapeHtml(string); // returns <html> hey </html> - -``` - -### escapeHeaderAttribute(attribute) - -Escape attribute value for use in HTTP header - -```javascript - -var a = Hoek.escapeHeaderAttribute('I said "go w\\o me"'); //returns I said \"go w\\o me\" - - -``` - - -### escapeRegex(string) - -Escape string for Regex construction - -```javascript - -var a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\/`"(>)[<]d{}s,'); // returns 4\^f\$s\.4\*5\+\-_\?%\=#\!\:@\|~\\\/`"\(>\)\[<\]d\{\}s\, - - - -``` - -# Errors - -### assert(message) - -```javascript - -var a = 1, b =2; - -Hoek.assert(a === b, 'a should equal b'); // ABORT: a should equal b - -``` - -### abort(message) - -First checks if process.env.NODE_ENV === 'test', and if so, throws error message. Otherwise, -displays most recent stack and then exits process. - - - -### displayStack(slice) - -Displays the trace stack - -```javascript - -var stack = Hoek.displayStack(); -console.log(stack) // returns something like: - -[ 'null (/Users/user/Desktop/hoek/test.js:4:18)', - 'Module._compile (module.js:449:26)', - 'Module._extensions..js (module.js:467:10)', - 'Module.load (module.js:356:32)', - 'Module._load (module.js:312:12)', - 'Module.runMain (module.js:492:10)', - 'startup.processNextTick.process._tickCallback (node.js:244:9)' ] - -``` - -### callStack(slice) - -Returns a trace stack array. - -```javascript - -var stack = Hoek.callStack(); -console.log(stack) // returns something like: - -[ [ '/Users/user/Desktop/hoek/test.js', 4, 18, null, false ], - [ 'module.js', 449, 26, 'Module._compile', false ], - [ 'module.js', 467, 10, 'Module._extensions..js', false ], - [ 'module.js', 356, 32, 'Module.load', false ], - [ 'module.js', 312, 12, 'Module._load', false ], - [ 'module.js', 492, 10, 'Module.runMain', false ], - [ 'node.js', - 244, - 9, - 'startup.processNextTick.process._tickCallback', - false ] ] - - -``` - -### toss(condition) - -toss(condition /*, [message], callback */) - -Return an error as first argument of a callback - - -# Load Files - -### loadPackage(dir) - -Load and parse package.json process root or given directory - -```javascript - -var pack = Hoek.loadPackage(); // pack.name === 'hoek' - -``` - -### loadDirModules(path, excludeFiles, target) - -Loads modules from a given path; option to exclude files (array). - - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/images/hoek.png b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/images/hoek.png deleted file mode 100755 index 6ccfcb12be76a7a8331428c87337b20b901e869c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37939 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 T*vZ8J00000NkvXXu0mjfKFT-e diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js deleted file mode 100755 index 666b3dc8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js +++ /dev/null @@ -1,132 +0,0 @@ -// Declare internals - -var internals = {}; - - -exports.escapeJavaScript = function (input) { - - if (!input) { - return ''; - } - - var escaped = ''; - - for (var i = 0, il = input.length; i < il; ++i) { - - var charCode = input.charCodeAt(i); - - if (internals.isSafe(charCode)) { - escaped += input[i]; - } - else { - escaped += internals.escapeJavaScriptChar(charCode); - } - } - - return escaped; -}; - - -exports.escapeHtml = function (input) { - - if (!input) { - return ''; - } - - var escaped = ''; - - for (var i = 0, il = input.length; i < il; ++i) { - - var charCode = input.charCodeAt(i); - - if (internals.isSafe(charCode)) { - escaped += input[i]; - } - else { - escaped += internals.escapeHtmlChar(charCode); - } - } - - return escaped; -}; - - -internals.escapeJavaScriptChar = function (charCode) { - - if (charCode >= 256) { - return '\\u' + internals.padLeft('' + charCode, 4); - } - - var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex'); - return '\\x' + internals.padLeft(hexValue, 2); -}; - - -internals.escapeHtmlChar = function (charCode) { - - var namedEscape = internals.namedHtml[charCode]; - if (typeof namedEscape !== 'undefined') { - return namedEscape; - } - - if (charCode >= 256) { - return '&#' + charCode + ';'; - } - - var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex'); - return '&#x' + internals.padLeft(hexValue, 2) + ';'; -}; - - -internals.padLeft = function (str, len) { - - while (str.length < len) { - str = '0' + str; - } - - return str; -}; - - -internals.isSafe = function (charCode) { - - return (typeof internals.safeCharCodes[charCode] !== 'undefined'); -}; - - -internals.namedHtml = { - '38': '&', - '60': '<', - '62': '>', - '34': '"', - '160': ' ', - '162': '¢', - '163': '£', - '164': '¤', - '169': '©', - '174': '®' -}; - - -internals.safeCharCodes = (function () { - - var safe = {}; - - for (var i = 32; i < 123; ++i) { - - if ((i >= 97 && i <= 122) || // a-z - (i >= 65 && i <= 90) || // A-Z - (i >= 48 && i <= 57) || // 0-9 - i === 32 || // space - i === 46 || // . - i === 44 || // , - i === 45 || // - - i === 58 || // : - i === 95) { // _ - - safe[i] = null; - } - } - - return safe; -}()); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js deleted file mode 100755 index 806260d2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js +++ /dev/null @@ -1,585 +0,0 @@ -// Load modules - -var Fs = require('fs'); -var Escape = require('./escape'); - - -// Declare internals - -var internals = {}; - - -// Clone object or array - -exports.clone = function (obj, seen) { - - if (typeof obj !== 'object' || - obj === null) { - - return obj; - } - - seen = seen || { orig: [], copy: [] }; - - var lookup = seen.orig.indexOf(obj); - if (lookup !== -1) { - return seen.copy[lookup]; - } - - var newObj = (obj instanceof Array) ? [] : {}; - - seen.orig.push(obj); - seen.copy.push(newObj); - - for (var i in obj) { - if (obj.hasOwnProperty(i)) { - if (obj[i] instanceof Buffer) { - newObj[i] = new Buffer(obj[i]); - } - else if (obj[i] instanceof Date) { - newObj[i] = new Date(obj[i].getTime()); - } - else if (obj[i] instanceof RegExp) { - var flags = '' + (obj[i].global ? 'g' : '') + (obj[i].ignoreCase ? 'i' : '') + (obj[i].multiline ? 'm' : ''); - newObj[i] = new RegExp(obj[i].source, flags); - } - else { - newObj[i] = exports.clone(obj[i], seen); - } - } - } - - return newObj; -}; - - -// Merge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied - -exports.merge = function (target, source, isNullOverride /* = true */, isMergeArrays /* = true */) { - - exports.assert(target && typeof target == 'object', 'Invalid target value: must be an object'); - exports.assert(source === null || source === undefined || typeof source === 'object', 'Invalid source value: must be null, undefined, or an object'); - - if (!source) { - return target; - } - - if (source instanceof Array) { - exports.assert(target instanceof Array, 'Cannot merge array onto an object'); - if (isMergeArrays === false) { // isMergeArrays defaults to true - target.length = 0; // Must not change target assignment - } - - for (var i = 0, il = source.length; i < il; ++i) { - target.push(source[i]); - } - - return target; - } - - var keys = Object.keys(source); - for (var k = 0, kl = keys.length; k < kl; ++k) { - var key = keys[k]; - var value = source[key]; - if (value && - typeof value === 'object') { - - if (!target[key] || - typeof target[key] !== 'object') { - - target[key] = exports.clone(value); - } - else { - exports.merge(target[key], source[key], isNullOverride, isMergeArrays); - } - } - else { - if (value !== null && value !== undefined) { // Explicit to preserve empty strings - target[key] = value; - } - else if (isNullOverride !== false) { // Defaults to true - target[key] = value; - } - } - } - - return target; -}; - - -// Apply options to a copy of the defaults - -exports.applyToDefaults = function (defaults, options) { - - exports.assert(defaults && typeof defaults == 'object', 'Invalid defaults value: must be an object'); - exports.assert(!options || options === true || typeof options === 'object', 'Invalid options value: must be true, falsy or an object'); - - if (!options) { // If no options, return null - return null; - } - - var copy = exports.clone(defaults); - - if (options === true) { // If options is set to true, use defaults - return copy; - } - - return exports.merge(copy, options, false, false); -}; - - -// Remove duplicate items from array - -exports.unique = function (array, key) { - - var index = {}; - var result = []; - - for (var i = 0, il = array.length; i < il; ++i) { - var id = (key ? array[i][key] : array[i]); - if (index[id] !== true) { - - result.push(array[i]); - index[id] = true; - } - } - - return result; -}; - - -// Convert array into object - -exports.mapToObject = function (array, key) { - - if (!array) { - return null; - } - - var obj = {}; - for (var i = 0, il = array.length; i < il; ++i) { - if (key) { - if (array[i][key]) { - obj[array[i][key]] = true; - } - } - else { - obj[array[i]] = true; - } - } - - return obj; -}; - - -// Find the common unique items in two arrays - -exports.intersect = function (array1, array2, justFirst) { - - if (!array1 || !array2) { - return []; - } - - var common = []; - var hash = (array1 instanceof Array ? exports.mapToObject(array1) : array1); - var found = {}; - for (var i = 0, il = array2.length; i < il; ++i) { - if (hash[array2[i]] && !found[array2[i]]) { - if (justFirst) { - return array2[i]; - } - - common.push(array2[i]); - found[array2[i]] = true; - } - } - - return (justFirst ? null : common); -}; - - -// Find which keys are present - -exports.matchKeys = function (obj, keys) { - - var matched = []; - for (var i = 0, il = keys.length; i < il; ++i) { - if (obj.hasOwnProperty(keys[i])) { - matched.push(keys[i]); - } - } - return matched; -}; - - -// Flatten array - -exports.flatten = function (array, target) { - - var result = target || []; - - for (var i = 0, il = array.length; i < il; ++i) { - if (Array.isArray(array[i])) { - exports.flatten(array[i], result); - } - else { - result.push(array[i]); - } - } - - return result; -}; - - -// Remove keys - -exports.removeKeys = function (object, keys) { - - for (var i = 0, il = keys.length; i < il; i++) { - delete object[keys[i]]; - } -}; - - -// Convert an object key chain string ('a.b.c') to reference (object[a][b][c]) - -exports.reach = function (obj, chain) { - - var path = chain.split('.'); - var ref = obj; - for (var i = 0, il = path.length; i < il; ++i) { - if (ref) { - ref = ref[path[i]]; - } - } - - return ref; -}; - - -// Inherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors - -exports.inheritAsync = function (self, obj, keys) { - - keys = keys || null; - - for (var i in obj) { - if (obj.hasOwnProperty(i)) { - if (keys instanceof Array && - keys.indexOf(i) < 0) { - - continue; - } - - self.prototype[i] = (function (fn) { - - return function (next) { - - var result = null; - try { - result = fn(); - } - catch (err) { - return next(err); - } - - return next(null, result); - }; - })(obj[i]); - } - } -}; - - -exports.formatStack = function (stack) { - - var trace = []; - for (var i = 0, il = stack.length; i < il; ++i) { - var item = stack[i]; - trace.push([item.getFileName(), item.getLineNumber(), item.getColumnNumber(), item.getFunctionName(), item.isConstructor()]); - } - - return trace; -}; - - -exports.formatTrace = function (trace) { - - var display = []; - - for (var i = 0, il = trace.length; i < il; ++i) { - var row = trace[i]; - display.push((row[4] ? 'new ' : '') + row[3] + ' (' + row[0] + ':' + row[1] + ':' + row[2] + ')'); - } - - return display; -}; - - -exports.callStack = function (slice) { - - // http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi - - var v8 = Error.prepareStackTrace; - Error.prepareStackTrace = function (err, stack) { - - return stack; - }; - - var capture = {}; - Error.captureStackTrace(capture, arguments.callee); - var stack = capture.stack; - - Error.prepareStackTrace = v8; - - var trace = exports.formatStack(stack); - - if (slice) { - return trace.slice(slice); - } - - return trace; -}; - - -exports.displayStack = function (slice) { - - var trace = exports.callStack(slice === undefined ? 1 : slice + 1); - - return exports.formatTrace(trace); -}; - - -exports.abortThrow = false; - - -exports.abort = function (message, hideStack) { - - if (process.env.NODE_ENV === 'test' || exports.abortThrow === true) { - throw new Error(message || 'Unknown error'); - } - - var stack = ''; - if (!hideStack) { - stack = exports.displayStack(1).join('\n\t'); - } - console.log('ABORT: ' + message + '\n\t' + stack); - process.exit(1); -}; - - -exports.assert = function (condition /*, msg1, msg2, msg3 */) { - - if (condition) { - return; - } - - var msgs = Array.prototype.slice.call(arguments, 1); - msgs = msgs.map(function (msg) { - - return typeof msg === 'string' ? msg : msg instanceof Error ? msg.message : JSON.stringify(msg); - }); - throw new Error(msgs.join(' ') || 'Unknown error'); -}; - - -exports.loadDirModules = function (path, excludeFiles, target) { // target(filename, name, capName) - - var exclude = {}; - for (var i = 0, il = excludeFiles.length; i < il; ++i) { - exclude[excludeFiles[i] + '.js'] = true; - } - - var files = Fs.readdirSync(path); - for (i = 0, il = files.length; i < il; ++i) { - var filename = files[i]; - if (/\.js$/.test(filename) && - !exclude[filename]) { - - var name = filename.substr(0, filename.lastIndexOf('.')); - var capName = name.charAt(0).toUpperCase() + name.substr(1).toLowerCase(); - - if (typeof target !== 'function') { - target[capName] = require(path + '/' + name); - } - else { - target(path + '/' + name, name, capName); - } - } - } -}; - - -exports.rename = function (obj, from, to) { - - obj[to] = obj[from]; - delete obj[from]; -}; - - -exports.Timer = function () { - - this.reset(); -}; - - -exports.Timer.prototype.reset = function () { - - this.ts = Date.now(); -}; - - -exports.Timer.prototype.elapsed = function () { - - return Date.now() - this.ts; -}; - - -// Load and parse package.json process root or given directory - -exports.loadPackage = function (dir) { - - var result = {}; - var filepath = (dir || process.env.PWD) + '/package.json'; - if (Fs.existsSync(filepath)) { - try { - result = JSON.parse(Fs.readFileSync(filepath)); - } - catch (e) { } - } - - return result; -}; - - -// Escape string for Regex construction - -exports.escapeRegex = function (string) { - - // Escape ^$.*+-?=!:|\/()[]{}, - return string.replace(/[\^\$\.\*\+\-\?\=\!\:\|\\\/\(\)\[\]\{\}\,]/g, '\\$&'); -}; - - -// Return an error as first argument of a callback - -exports.toss = function (condition /*, [message], next */) { - - var message = (arguments.length === 3 ? arguments[1] : ''); - var next = (arguments.length === 3 ? arguments[2] : arguments[1]); - - var err = (message instanceof Error ? message : (message ? new Error(message) : (condition instanceof Error ? condition : new Error()))); - - if (condition instanceof Error || - !condition) { - - return next(err); - } -}; - - -// Base64url (RFC 4648) encode - -exports.base64urlEncode = function (value) { - - return (new Buffer(value, 'binary')).toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, ''); -}; - - -// Base64url (RFC 4648) decode - -exports.base64urlDecode = function (encoded) { - - if (encoded && - !encoded.match(/^[\w\-]*$/)) { - - return new Error('Invalid character'); - } - - try { - return (new Buffer(encoded.replace(/-/g, '+').replace(/:/g, '/'), 'base64')).toString('binary'); - } - catch (err) { - return err; - } -}; - - -// Escape attribute value for use in HTTP header - -exports.escapeHeaderAttribute = function (attribute) { - - // Allowed value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9, \, " - - exports.assert(attribute.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~\"\\]*$/), 'Bad attribute value (' + attribute + ')'); - - return attribute.replace(/\\/g, '\\\\').replace(/\"/g, '\\"'); // Escape quotes and slash -}; - - -exports.escapeHtml = function (string) { - - return Escape.escapeHtml(string); -}; - - -exports.escapeJavaScript = function (string) { - - return Escape.escapeJavaScript(string); -}; - - -/* -var event = { - timestamp: now.getTime(), - tags: ['tag'], - data: { some: 'data' } -}; -*/ - -exports.consoleFunc = console.log; - -exports.printEvent = function (event) { - - var pad = function (value) { - - return (value < 10 ? '0' : '') + value; - }; - - var now = new Date(event.timestamp); - var timestring = (now.getYear() - 100).toString() + - pad(now.getMonth() + 1) + - pad(now.getDate()) + - '/' + - pad(now.getHours()) + - pad(now.getMinutes()) + - pad(now.getSeconds()) + - '.' + - now.getMilliseconds(); - - var data = event.data; - if (typeof event.data !== 'string') { - try { - data = JSON.stringify(event.data); - } - catch (e) { - data = 'JSON Error: ' + e.message; - } - } - - var output = timestring + ', ' + event.tags[0] + ', ' + data; - exports.consoleFunc(output); -}; - - -exports.nextTick = function (callback) { - - return function () { - - var args = arguments; - process.nextTick(function () { - - callback.apply(null, args); - }); - }; -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/package.json deleted file mode 100755 index 158eb318..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "hoek", - "description": "General purpose node utilities", - "version": "0.9.1", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [ - { - "name": "Van Nguyen", - "email": "the.gol.effect@gmail.com" - } - ], - "repository": { - "type": "git", - "url": "git://github.com/spumko/hoek" - }, - "main": "index", - "keywords": [ - "utilities" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": {}, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/spumko/hoek/raw/master/LICENSE" - } - ], - "readme": "<a href=\"https://github.com/spumko\"><img src=\"https://raw.github.com/spumko/spumko/master/images/from.png\" align=\"right\" /></a>\r\n![hoek Logo](https://raw.github.com/spumko/hoek/master/images/hoek.png)\r\n\r\nGeneral purpose node utilities\r\n\r\n[![Build Status](https://secure.travis-ci.org/spumko/hoek.png)](http://travis-ci.org/spumko/hoek)\r\n\r\n# Table of Contents\r\n\r\n* [Introduction](#introduction \"Introduction\")\r\n* [Object](#object \"Object\")\r\n * [clone](#cloneobj \"clone\")\r\n * [merge](#mergetarget-source-isnulloverride-ismergearrays \"merge\")\r\n * [applyToDefaults](#applytodefaultsdefaults-options \"applyToDefaults\")\r\n * [unique](#uniquearray-key \"unique\")\r\n * [mapToObject](#maptoobjectarray-key \"mapToObject\")\r\n * [intersect](#intersectarray1-array2 \"intersect\")\r\n * [matchKeys](#matchkeysobj-keys \"matchKeys\")\r\n * [flatten](#flattenarray-target \"flatten\")\r\n * [removeKeys](#removekeysobject-keys \"removeKeys\")\r\n * [reach](#reachobj-chain \"reach\")\r\n * [inheritAsync](#inheritasyncself-obj-keys \"inheritAsync\")\r\n * [rename](#renameobj-from-to \"rename\")\r\n* [Timer](#timer \"Timer\")\r\n* [Binary Encoding/Decoding](#binary \"Binary Encoding/Decoding\")\r\n * [base64urlEncode](#binary64urlEncodevalue \"binary64urlEncode\")\r\n * [base64urlDecode](#binary64urlDecodevalue \"binary64urlDecode\")\r\n* [Escaping Characters](#escaped \"Escaping Characters\")\r\n * [escapeHtml](#escapeHtmlstring \"escapeHtml\")\r\n * [escapeHeaderAttribute](#escapeHeaderAttributeattribute \"escapeHeaderAttribute\")\r\n * [escapeRegex](#escapeRegexstring \"escapeRegex\")\r\n* [Errors](#errors \"Errors\")\r\n * [assert](#assertmessage \"assert\")\r\n * [abort](#abortmessage \"abort\")\r\n * [displayStack](#displayStackslice \"displayStack\")\r\n * [callStack](#callStackslice \"callStack\")\r\n * [toss](#tosscondition \"toss\")\r\n* [Load files](#load-files \"Load Files\")\r\n * [loadPackage](#loadPackagedir \"loadpackage\")\r\n * [loadDirModules](#loadDirModulespath-excludefiles-target \"loaddirmodules\")\r\n\r\n\r\n\r\n# Introduction\r\n\r\nThe *Hoek* general purpose node utilities library is used to aid in a variety of manners. It comes with useful methods for Arrays (clone, merge, applyToDefaults), Objects (removeKeys, copy), Asserting and more. \r\n\r\nFor example, to use Hoek to set configuration with default options:\r\n```javascript\r\nvar Hoek = require('hoek');\r\n\r\nvar default = {url : \"www.github.com\", port : \"8000\", debug : true}\r\n\r\nvar config = Hoek.applyToDefaults(default, {port : \"3000\", admin : true});\r\n\r\n// In this case, config would be { url: 'www.github.com', port: '3000', debug: true, admin: true }\r\n```\r\n\r\nUnder each of the sections (such as Array), there are subsections which correspond to Hoek methods. Each subsection will explain how to use the corresponding method. In each js excerpt below, the var Hoek = require('hoek') is omitted for brevity.\r\n\r\n## Object\r\n\r\nHoek provides several helpful methods for objects and arrays.\r\n\r\n### clone(obj)\r\n\r\nThis method is used to clone an object or an array. A *deep copy* is made (duplicates everything, including values that are objects). \r\n\r\n```javascript\r\n\r\nvar nestedObj = {\r\n w: /^something$/ig,\r\n x: {\r\n a: [1, 2, 3],\r\n b: 123456,\r\n c: new Date()\r\n },\r\n y: 'y',\r\n z: new Date()\r\n };\r\n\r\nvar copy = Hoek.clone(nestedObj);\r\n\r\ncopy.x.b = 100;\r\n\r\nconsole.log(copy.y) // results in 'y'\r\nconsole.log(nestedObj.x.b) // results in 123456\r\nconsole.log(copy.x.b) // results in 100\r\n```\r\n\r\n### merge(target, source, isNullOverride, isMergeArrays)\r\nisNullOverride, isMergeArrays default to true\r\n\r\nMerge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied\r\n\r\n\r\n```javascript\r\n\r\nvar target = {a: 1, b : 2}\r\nvar source = {a: 0, c: 5}\r\nvar source2 = {a: null, c: 5}\r\n\r\nvar targetArray = [1, 2, 3];\r\nvar sourceArray = [4, 5];\r\n\r\nvar newTarget = Hoek.merge(target, source); // results in {a: 0, b: 2, c: 5}\r\nnewTarget = Hoek.merge(target, source2); // results in {a: null, b: 2, c: 5}\r\nnewTarget = Hoek.merge(target, source2, false); // results in {a: 1, b: 2, c: 5}\r\n\r\nnewTarget = Hoek.merge(targetArray, sourceArray) // results in [1, 2, 3, 4, 5]\r\nnewTarget = Hoek.merge(targetArray, sourceArray, true, false) // results in [4, 5]\r\n\r\n\r\n\r\n\r\n```\r\n\r\n### applyToDefaults(defaults, options)\r\n\r\nApply options to a copy of the defaults\r\n\r\n```javascript\r\n\r\nvar defaults = {host: \"localhost\", port: 8000};\r\nvar options = {port: 8080};\r\n\r\nvar config = Hoek.applyToDefaults(defaults, options); // results in {host: \"localhost\", port: 8080};\r\n\r\n\r\n```\r\n\r\n### unique(array, key)\r\n\r\nRemove duplicate items from Array\r\n\r\n```javascript\r\n\r\nvar array = [1, 2, 2, 3, 3, 4, 5, 6];\r\n\r\nvar newArray = Hoek.unique(array); // results in [1,2,3,4,5,6];\r\n\r\narray = [{id: 1}, {id: 1}, {id: 2}];\r\n\r\nnewArray = Hoek.unique(array, \"id\") // results in [{id: 1}, {id: 2}]\r\n\r\n```\r\n\r\n### mapToObject(array, key)\r\n\r\nConvert an Array into an Object\r\n\r\n```javascript\r\n\r\nvar array = [1,2,3];\r\nvar newObject = Hoek.mapToObject(array); // results in [{\"1\": true}, {\"2\": true}, {\"3\": true}]\r\n\r\narray = [{id: 1}, {id: 2}];\r\nnewObject = Hoek.mapToObject(array, \"id\") // results in [{\"id\": 1}, {\"id\": 2}]\r\n\r\n```\r\n### intersect(array1, array2)\r\n\r\nFind the common unique items in two arrays\r\n\r\n```javascript\r\n\r\nvar array1 = [1, 2, 3];\r\nvar array2 = [1, 4, 5];\r\n\r\nvar newArray = Hoek.intersect(array1, array2) // results in [1]\r\n\r\n```\r\n\r\n### matchKeys(obj, keys) \r\n\r\nFind which keys are present\r\n\r\n```javascript\r\n\r\nvar obj = {a: 1, b: 2, c: 3};\r\nvar keys = [\"a\", \"e\"];\r\n\r\nHoek.matchKeys(obj, keys) // returns [\"a\"]\r\n\r\n```\r\n\r\n### flatten(array, target)\r\n\r\nFlatten an array\r\n\r\n```javascript\r\n\r\nvar array = [1, 2, 3];\r\nvar target = [4, 5]; \r\n\r\nvar flattenedArray = Hoek.flatten(array, target) // results in [4, 5, 1, 2, 3];\r\n\r\n```\r\n\r\n### removeKeys(object, keys)\r\n\r\nRemove keys\r\n\r\n```javascript\r\n\r\nvar object = {a: 1, b: 2, c: 3, d: 4};\r\n\r\nvar keys = [\"a\", \"b\"];\r\n\r\nHoek.removeKeys(object, keys) // object is now {c: 3, d: 4}\r\n\r\n```\r\n\r\n### reach(obj, chain)\r\n\r\nConverts an object key chain string to reference\r\n\r\n```javascript\r\n\r\nvar chain = 'a.b.c';\r\nvar obj = {a : {b : { c : 1}}};\r\n\r\nHoek.reach(obj, chain) // returns 1\r\n\r\n```\r\n\r\n### inheritAsync(self, obj, keys) \r\n\r\nInherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors\r\n\r\n```javascript\r\n\r\nvar targetFunc = function () { };\r\n\r\nvar proto = {\r\n a: function () {\r\n return 'a!';\r\n },\r\n b: function () {\r\n return 'b!';\r\n },\r\n c: function () {\r\n throw new Error('c!');\r\n }\r\n };\r\n\r\nvar keys = ['a', 'c'];\r\n\r\nHoek.inheritAsync(targetFunc, proto, ['a', 'c']);\r\n\r\nvar target = new targetFunc();\r\n\r\ntarget.a(function(err, result){console.log(result)} // returns 'a!' \r\n\r\ntarget.c(function(err, result){console.log(result)} // returns undefined\r\n\r\ntarget.b(function(err, result){console.log(result)} // gives error: Object [object Object] has no method 'b'\r\n\r\n```\r\n\r\n### rename(obj, from, to)\r\n\r\nRename a key of an object\r\n\r\n```javascript\r\n\r\nvar obj = {a : 1, b : 2};\r\n\r\nHoek.rename(obj, \"a\", \"c\"); // obj is now {c : 1, b : 2}\r\n\r\n```\r\n\r\n\r\n# Timer\r\n\r\nA Timer object. Initializing a new timer object sets the ts to the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.\r\n\r\n```javascript\r\n\r\n\r\nexample : \r\n\r\n\r\nvar timerObj = new Hoek.Timer();\r\nconsole.log(\"Time is now: \" + timerObj.ts)\r\nconsole.log(\"Elapsed time from initialization: \" + timerObj.elapsed() + 'milliseconds')\r\n\r\n```\r\n\r\n# Binary Encoding/Decoding\r\n\r\n### base64urlEncode(value)\r\n\r\nEncodes value in Base64 or URL encoding\r\n\r\n### base64urlDecode(value)\r\n\r\nDecodes data in Base64 or URL encoding.\r\n# Escaping Characters\r\n\r\nHoek provides convenient methods for escaping html characters. The escaped characters are as followed:\r\n\r\n```javascript\r\n\r\ninternals.htmlEscaped = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": ''',\r\n '`': '`'\r\n};\r\n\r\n```\r\n\r\n### escapeHtml(string)\r\n\r\n```javascript\r\n\r\nvar string = '<html> hey </html>';\r\nvar escapedString = Hoek.escapeHtml(string); // returns <html> hey </html>\r\n\r\n```\r\n\r\n### escapeHeaderAttribute(attribute)\r\n\r\nEscape attribute value for use in HTTP header\r\n\r\n```javascript\r\n\r\nvar a = Hoek.escapeHeaderAttribute('I said \"go w\\\\o me\"'); //returns I said \\\"go w\\\\o me\\\"\r\n\r\n\r\n```\r\n\r\n\r\n### escapeRegex(string)\r\n\r\nEscape string for Regex construction\r\n\r\n```javascript\r\n\r\nvar a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\\\/`\"(>)[<]d{}s,'); // returns 4\\^f\\$s\\.4\\*5\\+\\-_\\?%\\=#\\!\\:@\\|~\\\\\\/`\"\\(>\\)\\[<\\]d\\{\\}s\\,\r\n\r\n\r\n\r\n```\r\n\r\n# Errors\r\n\r\n### assert(message)\r\n\r\n```javascript\r\n\r\nvar a = 1, b =2;\r\n\r\nHoek.assert(a === b, 'a should equal b'); // ABORT: a should equal b\r\n\r\n```\r\n\r\n### abort(message)\r\n\r\nFirst checks if process.env.NODE_ENV === 'test', and if so, throws error message. Otherwise,\r\ndisplays most recent stack and then exits process.\r\n\r\n\r\n\r\n### displayStack(slice)\r\n\r\nDisplays the trace stack\r\n\r\n```javascript\r\n\r\nvar stack = Hoek.displayStack();\r\nconsole.log(stack) // returns something like:\r\n\r\n[ 'null (/Users/user/Desktop/hoek/test.js:4:18)',\r\n 'Module._compile (module.js:449:26)',\r\n 'Module._extensions..js (module.js:467:10)',\r\n 'Module.load (module.js:356:32)',\r\n 'Module._load (module.js:312:12)',\r\n 'Module.runMain (module.js:492:10)',\r\n 'startup.processNextTick.process._tickCallback (node.js:244:9)' ]\r\n\r\n```\r\n\r\n### callStack(slice)\r\n\r\nReturns a trace stack array.\r\n\r\n```javascript\r\n\r\nvar stack = Hoek.callStack();\r\nconsole.log(stack) // returns something like:\r\n\r\n[ [ '/Users/user/Desktop/hoek/test.js', 4, 18, null, false ],\r\n [ 'module.js', 449, 26, 'Module._compile', false ],\r\n [ 'module.js', 467, 10, 'Module._extensions..js', false ],\r\n [ 'module.js', 356, 32, 'Module.load', false ],\r\n [ 'module.js', 312, 12, 'Module._load', false ],\r\n [ 'module.js', 492, 10, 'Module.runMain', false ],\r\n [ 'node.js',\r\n 244,\r\n 9,\r\n 'startup.processNextTick.process._tickCallback',\r\n false ] ]\r\n\r\n\r\n```\r\n\r\n### toss(condition)\r\n\r\ntoss(condition /*, [message], callback */)\r\n\r\nReturn an error as first argument of a callback\r\n\r\n\r\n# Load Files\r\n\r\n### loadPackage(dir)\r\n\r\nLoad and parse package.json process root or given directory\r\n\r\n```javascript\r\n\r\nvar pack = Hoek.loadPackage(); // pack.name === 'hoek'\r\n\r\n```\r\n\r\n### loadDirModules(path, excludeFiles, target) \r\n\r\nLoads modules from a given path; option to exclude files (array).\r\n\r\n\r\n\r\n\r\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/spumko/hoek/issues" - }, - "homepage": "https://github.com/spumko/hoek", - "_id": "hoek@0.9.1", - "dist": { - "shasum": "8525a65589a017e905052fd24b26898c26a20c6f" - }, - "_from": "hoek@0.9.x", - "_resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js deleted file mode 100644 index 4dddd77d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js +++ /dev/null @@ -1,86 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hoek = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hoek', function () { - - describe('#escapeJavaScript', function () { - - it('encodes / characters', function (done) { - - var encoded = Hoek.escapeJavaScript('<script>alert(1)</script>'); - expect(encoded).to.equal('\\x3cscript\\x3ealert\\x281\\x29\\x3c\\x2fscript\\x3e'); - done(); - }); - - it('encodes \' characters', function (done) { - - var encoded = Hoek.escapeJavaScript('something(\'param\')'); - expect(encoded).to.equal('something\\x28\\x27param\\x27\\x29'); - done(); - }); - - it('encodes large unicode characters with the correct padding', function (done) { - - var encoded = Hoek.escapeJavaScript(String.fromCharCode(500) + String.fromCharCode(1000)); - expect(encoded).to.equal('\\u0500\\u1000'); - done(); - }); - - it('doesn\'t throw an exception when passed null', function (done) { - - var encoded = Hoek.escapeJavaScript(null); - expect(encoded).to.equal(''); - done(); - }); - }); - - describe('#escapeHtml', function () { - - it('encodes / characters', function (done) { - - var encoded = Hoek.escapeHtml('<script>alert(1)</script>'); - expect(encoded).to.equal('<script>alert(1)</script>'); - done(); - }); - - it('encodes < and > as named characters', function (done) { - - var encoded = Hoek.escapeHtml('<script><>'); - expect(encoded).to.equal('<script><>'); - done(); - }); - - it('encodes large unicode characters', function (done) { - - var encoded = Hoek.escapeHtml(String.fromCharCode(500) + String.fromCharCode(1000)); - expect(encoded).to.equal('ǴϨ'); - done(); - }); - - it('doesn\'t throw an exception when passed null', function (done) { - - var encoded = Hoek.escapeHtml(null); - expect(encoded).to.equal(''); - done(); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js deleted file mode 100755 index c40e3ad9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js +++ /dev/null @@ -1,1078 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hoek = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hoek', function () { - - var nestedObj = { - v: [7,8,9], - w: /^something$/igm, - x: { - a: [1, 2, 3], - b: 123456, - c: new Date(), - d: /hi/igm, - e: /hello/ - }, - y: 'y', - z: new Date() - }; - - var dupsArray = [nestedObj, { z: 'z' }, nestedObj]; - var reducedDupsArray = [nestedObj, { z: 'z' }]; - - describe('#clone', function () { - - it('should clone a nested object', function (done) { - - var a = nestedObj; - var b = Hoek.clone(a); - - expect(a).to.deep.equal(b); - expect(a.z.getTime()).to.equal(b.z.getTime()); - done(); - }); - - it('should clone a null object', function (done) { - - var b = Hoek.clone(null); - - expect(b).to.equal(null); - done(); - }); - - it('should not convert undefined properties to null', function (done) { - - var obj = { something: undefined }; - var b = Hoek.clone(obj); - - expect(typeof b.something).to.equal('undefined'); - done(); - }); - - it('should not throw on circular reference', function (done) { - - var a = {}; - a.x = a; - - var test = (function () { - - var b = Hoek.clone(a); - }); - - expect(test).to.not.throw(); - done(); - }); - - it('should properly clone circular reference', function (done) { - - var x = { - 'z': new Date() - }; - x.y = x; - - var b = Hoek.clone(x); - expect(Object.keys(b.y)).to.deep.equal(Object.keys(x)) - expect(b.z).to.not.equal(x.z); - expect(b.y).to.not.equal(x.y); - expect(b.y.z).to.not.equal(x.y.z); - expect(b.y).to.equal(b); - expect(b.y.y.y.y).to.equal(b); - done(); - }); - - it('should properly clone deeply nested object', function (done) { - - var a = { - x: { - y: { - a: [1, 2, 3], - b: 123456, - c: new Date(), - d: /hi/igm, - e: /hello/ - }, - } - }; - - var b = Hoek.clone(a); - - expect(a).to.deep.equal(b); - expect(a.x.y.c.getTime()).to.equal(b.x.y.c.getTime()); - done(); - }); - - it('should properly clone arrays', function (done) { - - var a = [1,2,3]; - - var b = Hoek.clone(a); - - expect(a).to.deep.equal(b); - done(); - }); - - it('should perform actual copy for shallow keys (no pass by reference)', function (done) { - - var x = Hoek.clone(nestedObj); - var y = Hoek.clone(nestedObj); - - // Date - expect(x.z).to.not.equal(nestedObj.z); - expect(x.z).to.not.equal(y.z); - - // Regex - expect(x.w).to.not.equal(nestedObj.w); - expect(x.w).to.not.equal(y.w); - - // Array - expect(x.v).to.not.equal(nestedObj.v); - expect(x.v).to.not.equal(y.v); - - // Immutable(s) - x.y = 5; - expect(x.y).to.not.equal(nestedObj.y); - expect(x.y).to.not.equal(y.y); - - done(); - }); - - it('should perform actual copy for deep keys (no pass by reference)', function (done) { - - var x = Hoek.clone(nestedObj); - var y = Hoek.clone(nestedObj); - - expect(x.x.c).to.not.equal(nestedObj.x.c); - expect(x.x.c).to.not.equal(y.x.c); - - expect(x.x.c.getTime()).to.equal(nestedObj.x.c.getTime()); - expect(x.x.c.getTime()).to.equal(y.x.c.getTime()); - done(); - }); - - it('copies functions with properties', function (done) { - - var a = { - x: function () { return 1; }, - y: {} - }; - a.x.z = 'string in function'; - a.x.v = function () { return 2; }; - a.y.u = a.x; - - var b = Hoek.clone(a); - expect(b.x()).to.equal(1); - expect(b.x.v()).to.equal(2); - expect(b.y.u).to.equal(b.x); - expect(b.x.z).to.equal('string in function'); - done(); - }); - - it('should copy a buffer', function(done){ - var tls = { - key: new Buffer([1,2,3,4,5]), - cert: new Buffer([1,2,3,4,5,6,10]) - } - - copiedTls = Hoek.clone(tls); - expect(Buffer.isBuffer(copiedTls.key)).to.equal(true); - expect(JSON.stringify(copiedTls.key)).to.equal(JSON.stringify(tls.key)) - expect(Buffer.isBuffer(copiedTls.cert)).to.equal(true); - expect(JSON.stringify(copiedTls.cert)).to.equal(JSON.stringify(tls.cert)) - done(); - }); - }); - - describe('#merge', function () { - - it('does not throw if source is null', function (done) { - - var a = {}; - var b = null; - var c = null; - - expect(function () { - - c = Hoek.merge(a, b); - }).to.not.throw(); - - expect(c).to.equal(a); - done(); - }); - - it('does not throw if source is undefined', function (done) { - - var a = {}; - var b = undefined; - var c = null; - - expect(function () { - - c = Hoek.merge(a, b); - }).to.not.throw(); - - expect(c).to.equal(a); - done(); - }); - - it('throws if source is not an object', function (done) { - - expect(function () { - - var a = {}; - var b = 0; - - Hoek.merge(a, b); - }).to.throw('Invalid source value: must be null, undefined, or an object'); - done(); - }); - - it('throws if target is not an object', function (done) { - - expect(function () { - - var a = 0; - var b = {}; - - Hoek.merge(a, b); - }).to.throw('Invalid target value: must be an object'); - done(); - }); - - it('throws if target is not an array and source is', function (done) { - - expect(function () { - - var a = {}; - var b = [1, 2]; - - Hoek.merge(a, b); - }).to.throw('Cannot merge array onto an object'); - done(); - }); - - it('returns the same object when merging arrays', function (done) { - - var a = []; - var b = [1, 2]; - - expect(Hoek.merge(a, b)).to.equal(a); - done(); - }); - - it('should combine an empty object with a non-empty object', function (done) { - - var a = {}; - var b = nestedObj; - - var c = Hoek.merge(a, b); - expect(a).to.deep.equal(b); - expect(c).to.deep.equal(b); - done(); - }); - - it('should override values in target', function (done) { - - var a = { x: 1, y: 2, z: 3, v: 5, t: 'test', m: 'abc' }; - var b = { x: null, z: 4, v: 0, t: { u: 6 }, m: '123' }; - - var c = Hoek.merge(a, b); - expect(c.x).to.equal(null); - expect(c.y).to.equal(2); - expect(c.z).to.equal(4); - expect(c.v).to.equal(0); - expect(c.m).to.equal('123'); - expect(c.t).to.deep.equal({ u: 6 }); - done(); - }); - - it('should override values in target (flip)', function (done) { - - var a = { x: 1, y: 2, z: 3, v: 5, t: 'test', m: 'abc' }; - var b = { x: null, z: 4, v: 0, t: { u: 6 }, m: '123' }; - - var d = Hoek.merge(b, a); - expect(d.x).to.equal(1); - expect(d.y).to.equal(2); - expect(d.z).to.equal(3); - expect(d.v).to.equal(5); - expect(d.m).to.equal('abc'); - expect(d.t).to.deep.equal('test'); - done(); - }); - }); - - describe('#applyToDefaults', function () { - - var defaults = { - a: 1, - b: 2, - c: { - d: 3, - e: [5, 6] - }, - f: 6, - g: 'test' - }; - - it('should return null if options is false', function (done) { - - var result = Hoek.applyToDefaults(defaults, false); - expect(result).to.equal(null); - done(); - }); - - it('should return a copy of defaults if options is true', function (done) { - - var result = Hoek.applyToDefaults(defaults, true); - expect(result).to.deep.equal(result); - done(); - }); - - it('should apply object to defaults', function (done) { - - var obj = { - a: null, - c: { - e: [4] - }, - f: 0, - g: { - h: 5 - } - }; - - var result = Hoek.applyToDefaults(defaults, obj); - expect(result.c.e).to.deep.equal([4]); - expect(result.a).to.equal(1); - expect(result.b).to.equal(2); - expect(result.f).to.equal(0); - expect(result.g).to.deep.equal({ h: 5 }); - done(); - }); - }); - - describe('#unique', function () { - - it('should ensure uniqueness within array of objects based on subkey', function (done) { - - var a = Hoek.unique(dupsArray, 'x'); - expect(a).to.deep.equal(reducedDupsArray); - done(); - }); - - it('removes duplicated without key', function (done) { - - expect(Hoek.unique([1, 2, 3, 4, 2, 1, 5])).to.deep.equal([1, 2, 3, 4, 5]); - done(); - }); - }); - - describe('#mapToObject', function () { - - it('should return null on null array', function (done) { - - var a = Hoek.mapToObject(null); - expect(a).to.equal(null); - done(); - }); - - it('should convert basic array to existential object', function (done) { - - var keys = [1, 2, 3, 4]; - var a = Hoek.mapToObject(keys); - for (var i in keys) { - expect(a[keys[i]]).to.equal(true); - } - done(); - }); - - it('should convert array of objects to existential object', function (done) { - - var keys = [{ x: 1 }, { x: 2 }, { x: 3 }]; - var subkey = 'x'; - var a = Hoek.mapToObject(keys, subkey); - for (var i in keys) { - expect(a[keys[i][subkey]]).to.equal(true); - } - done(); - }); - }); - - describe('#intersect', function () { - - it('should return the common objects of two arrays', function (done) { - - var array1 = [1, 2, 3, 4, 4, 5, 5]; - var array2 = [5, 4, 5, 6, 7]; - var common = Hoek.intersect(array1, array2); - expect(common.length).to.equal(2); - done(); - }); - - it('should return just the first common object of two arrays', function (done) { - - var array1 = [1, 2, 3, 4, 4, 5, 5]; - var array2 = [5, 4, 5, 6, 7]; - var common = Hoek.intersect(array1, array2, true); - expect(common).to.equal(5); - done(); - }); - - it('should return an empty array if either input is null', function (done) { - - expect(Hoek.intersect([1], null).length).to.equal(0); - expect(Hoek.intersect(null, [1]).length).to.equal(0); - done(); - }); - - it('should return the common objects of object and array', function (done) { - - var array1 = [1, 2, 3, 4, 4, 5, 5]; - var array2 = [5, 4, 5, 6, 7]; - var common = Hoek.intersect(Hoek.mapToObject(array1), array2); - expect(common.length).to.equal(2); - done(); - }); - }); - - describe('#matchKeys', function () { - - it('should match the existing object keys', function (done) { - - var obj = { - a: 1, - b: 2, - c: 3, - d: null - }; - - expect(Hoek.matchKeys(obj, ['b', 'c', 'd', 'e'])).to.deep.equal(['b', 'c', 'd']); - done(); - }); - }); - - describe('#flatten', function () { - - it('should return a flat array', function (done) { - - var result = Hoek.flatten([1, 2, [3, 4, [5, 6], [7], 8], [9], [10, [11, 12]], 13]); - expect(result.length).to.equal(13); - expect(result).to.deep.equal([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]); - done(); - }); - }); - - describe('#removeKeys', function () { - - var objWithHiddenKeys = { - location: { - name: 'San Bruno' - }, - company: { - name: '@WalmartLabs' - } - }; - - it('should delete params with definition\'s hide set to true', function (done) { - - var a = Hoek.removeKeys(objWithHiddenKeys, ['location']); - expect(objWithHiddenKeys.location).to.not.exist; - expect(objWithHiddenKeys.company).to.exist; - done(); - }); - }); - - describe('#reach', function () { - - var obj = { - a: { - b: { - c: { - d: 1, - e: 2 - }, - f: 'hello' - }, - g: { - h: 3 - } - }, - i: function () { } - }; - - it('returns a valid member', function (done) { - - expect(Hoek.reach(obj, 'a.b.c.d')).to.equal(1); - done(); - }); - - it('returns null on null object', function (done) { - - expect(Hoek.reach(null, 'a.b.c.d')).to.not.exist; - done(); - }); - - it('returns null on missing member', function (done) { - - expect(Hoek.reach(obj, 'a.b.c.d.x')).to.not.exist; - done(); - }); - - it('returns null on invalid member', function (done) { - - expect(Hoek.reach(obj, 'a.b.c.d-.x')).to.not.exist; - done(); - }); - - it('returns function member', function (done) { - - expect(typeof Hoek.reach(obj, 'i')).to.equal('function'); - done(); - }); - }); - - describe('#inheritAsync', function () { - - it('should inherit selected methods and wrap in async call', function (done) { - - var proto = { - a: function () { - return 'a!'; - }, - b: function () { - return 'b!'; - }, - c: function () { - throw new Error('c!'); - } - }; - - var targetFunc = function () { }; - targetFunc.prototype.c = function () { - - return 'oops'; - }; - - Hoek.inheritAsync(targetFunc, proto, ['a', 'c']); - var target = new targetFunc(); - - expect(typeof target.a).to.equal('function'); - expect(typeof target.c).to.equal('function'); - expect(target.b).to.not.exist; - - target.a(function (err, result) { - - expect(err).to.not.exist; - expect(result).to.equal('a!'); - - target.c(function (err, result) { - - expect(result).to.not.exist; - expect(err.message).to.equal('c!'); - done(); - }); - }); - }); - }); - - describe('#callStack', function () { - - it('should return the full call stack', function (done) { - - var stack = Hoek.callStack(); - expect(stack[0][0]).to.contain('index.js'); - expect(stack[0][2]).to.equal(30); - done(); - }); - }); - - describe('#displayStack ', function () { - - it('should return the full call stack for display', function (done) { - - var stack = Hoek.displayStack(); - expect(stack[0]).to.contain('test/index.js:'); - done(); - }); - - it('should include constructor functions correctly', function (done) { - - var Something = function (next) { - - next(); - }; - - var something = new Something(function () { - - var stack = Hoek.displayStack(); - expect(stack[1]).to.contain('new Something'); - done(); - }); - }); - }); - - describe('#abort', function () { - - it('should exit process when not in test mode', function (done) { - - var env = process.env.NODE_ENV; - var write = process.stdout.write; - var exit = process.exit; - - process.env.NODE_ENV = 'nottatest'; - process.stdout.write = function () { }; - process.exit = function (state) { - - process.exit = exit; - process.env.NODE_ENV = env; - process.stdout.write = write; - - expect(state).to.equal(1); - done(); - }; - - Hoek.abort('Boom'); - }); - - it('should throw when not in test mode and abortThrow is true', function (done) { - - var env = process.env.NODE_ENV; - process.env.NODE_ENV = 'nottatest'; - Hoek.abortThrow = true; - - var fn = function () { - - Hoek.abort('my error message'); - }; - - expect(fn).to.throw('my error message'); - Hoek.abortThrow = false; - process.env.NODE_ENV = env; - - done(); - }); - - - it('should respect hideStack argument', function (done) { - - var env = process.env.NODE_ENV; - var write = process.stdout.write; - var exit = process.exit; - var output = ''; - - process.exit = function () { }; - process.env.NODE_ENV = ''; - process.stdout.write = function (message) { - - output = message; - }; - - Hoek.abort('my error message', true); - - process.env.NODE_ENV = env; - process.stdout.write = write; - process.exit = exit; - - expect(output).to.equal('ABORT: my error message\n\t\n'); - - done(); - }); - - it('should default to showing stack', function (done) { - - var env = process.env.NODE_ENV; - var write = process.stdout.write; - var exit = process.exit; - var output = ''; - - process.exit = function () { }; - process.env.NODE_ENV = ''; - process.stdout.write = function (message) { - - output = message; - }; - - Hoek.abort('my error message'); - - process.env.NODE_ENV = env; - process.stdout.write = write; - process.exit = exit; - - expect(output).to.contain('index.js'); - - done(); - }); - }); - - describe('#assert', function () { - - it('should throw an Error when using assert in a test', function (done) { - - var fn = function () { - - Hoek.assert(false, 'my error message'); - }; - - expect(fn).to.throw('my error message'); - done(); - }); - - it('should throw an Error when using assert in a test with no message', function (done) { - - var fn = function () { - - Hoek.assert(false); - }; - - expect(fn).to.throw('Unknown error'); - done(); - }); - - it('should throw an Error when using assert in a test with multipart message', function (done) { - - var fn = function () { - - Hoek.assert(false, 'This', 'is', 'my message'); - }; - - expect(fn).to.throw('This is my message'); - done(); - }); - - it('should throw an Error when using assert in a test with object message', function (done) { - - var fn = function () { - - Hoek.assert(false, 'This', 'is', { spinal: 'tap' }); - }; - - expect(fn).to.throw('This is {"spinal":"tap"}'); - done(); - }); - - it('should throw an Error when using assert in a test with error object message', function (done) { - - var fn = function () { - - Hoek.assert(false, new Error('This is spinal tap')); - }; - - expect(fn).to.throw('This is spinal tap'); - done(); - }); - }); - - describe('#loadDirModules', function () { - - it('should load modules from directory', function (done) { - - var target = {}; - Hoek.loadDirModules(__dirname + '/modules', ['test2'], target); - expect(target.Test1.x).to.equal(1); - expect(target.Test2).to.not.exist; - expect(target.Test3.z).to.equal(3); - done(); - }); - - it('should list modules from directory into function', function (done) { - - var target = {}; - Hoek.loadDirModules(__dirname + '/modules', ['test2'], function (path, name, capName) { - - target[name] = capName; - }); - - expect(target.test1).to.equal('Test1'); - expect(target.test2).to.not.exist; - expect(target.test3).to.equal('Test3'); - done(); - }); - }); - - describe('#rename', function () { - - it('should rename object key', function (done) { - - var a = { b: 'c' }; - Hoek.rename(a, 'b', 'x'); - expect(a.b).to.not.exist; - expect(a.x).to.equal('c'); - done(); - }); - }); - - describe('Timer', function () { - - it('should return time elapsed', function (done) { - - var timer = new Hoek.Timer(); - setTimeout(function () { - - expect(timer.elapsed()).to.be.above(9); - done(); - }, 12); - }); - }); - - describe('#loadPackage', function () { - - it('should', function (done) { - - var pack = Hoek.loadPackage(); - expect(pack.name).to.equal('hoek'); - done(); - }); - }); - - describe('#escapeRegex', function () { - - it('should escape all special regular expression characters', function (done) { - - var a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\/`"(>)[<]d{}s,'); - expect(a).to.equal('4\\^f\\$s\\.4\\*5\\+\\-_\\?%\\=#\\!\\:@\\|~\\\\\\/`"\\(>\\)\\[<\\]d\\{\\}s\\,'); - done(); - }); - }); - - describe('#toss', function () { - - it('should call callback with new error', function (done) { - - var callback = function (err) { - - expect(err).to.exist; - expect(err.message).to.equal('bug'); - done(); - }; - - Hoek.toss(true, 'feature', callback); - Hoek.toss(false, 'bug', callback); - }); - - it('should call callback with new error and no message', function (done) { - - Hoek.toss(false, function (err) { - - expect(err).to.exist; - expect(err.message).to.equal(''); - done(); - }); - }); - - it('should call callback with error condition', function (done) { - - Hoek.toss(new Error('boom'), function (err) { - - expect(err).to.exist; - expect(err.message).to.equal('boom'); - done(); - }); - }); - - it('should call callback with new error using message with error condition', function (done) { - - Hoek.toss(new Error('ka'), 'boom', function (err) { - - expect(err).to.exist; - expect(err.message).to.equal('boom'); - done(); - }); - }); - - it('should call callback with new error using passed error with error condition', function (done) { - - Hoek.toss(new Error('ka'), new Error('boom'), function (err) { - - expect(err).to.exist; - expect(err.message).to.equal('boom'); - done(); - }); - }); - }); - - describe('Base64Url', function () { - - var base64str = 'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0-P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn-AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq-wsbKztLW2t7i5uru8vb6_wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t_g4eLj5OXm5-jp6uvs7e7v8PHy8_T19vf4-fr7_P3-_w'; - var str = unescape('%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20%21%22%23%24%25%26%27%28%29*+%2C-./0123456789%3A%3B%3C%3D%3E%3F@ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF'); - - describe('#base64urlEncode', function () { - - it('should base64 URL-safe a string', function (done) { - - expect(Hoek.base64urlEncode(str)).to.equal(base64str); - done(); - }); - }); - - describe('#base64urlDecode', function () { - - it('should un-base64 URL-safe a string', function (done) { - - expect(Hoek.base64urlDecode(base64str)).to.equal(str); - done(); - }); - - it('should return error on undefined input', function (done) { - - expect(Hoek.base64urlDecode().message).to.exist; - done(); - }); - - it('should return error on invalid input', function (done) { - - expect(Hoek.base64urlDecode('*').message).to.exist; - done(); - }); - }); - }); - - describe('#escapeHeaderAttribute', function () { - - it('should not alter ascii values', function (done) { - - var a = Hoek.escapeHeaderAttribute('My Value'); - expect(a).to.equal('My Value'); - done(); - }); - - it('should escape all special HTTP header attribute characters', function (done) { - - var a = Hoek.escapeHeaderAttribute('I said go!!!#"' + String.fromCharCode(92)); - expect(a).to.equal('I said go!!!#\\"\\\\'); - done(); - }); - - it('should throw on large unicode characters', function (done) { - - var fn = function () { - - Hoek.escapeHeaderAttribute('this is a test' + String.fromCharCode(500) + String.fromCharCode(300)); - }; - - expect(fn).to.throw(Error); - done(); - }); - - it('should throw on CRLF to prevent response splitting', function (done) { - - var fn = function () { - - Hoek.escapeHeaderAttribute('this is a test\r\n'); - }; - - expect(fn).to.throw(Error); - done(); - }); - }); - - describe('#escapeHtml', function () { - - it('should escape all special HTML characters', function (done) { - - var a = Hoek.escapeHtml('&<>"\'`'); - expect(a).to.equal('&<>"'`'); - done(); - }); - - it('should return empty string on falsy input', function (done) { - - var a = Hoek.escapeHtml(''); - expect(a).to.equal(''); - done(); - }); - - it('should return unchanged string on no reserved input', function (done) { - - var a = Hoek.escapeHtml('abc'); - expect(a).to.equal('abc'); - done(); - }); - }); - - describe('#printEvent', function () { - - it('outputs event as string', function (done) { - - var event = { - timestamp: (new Date(2013, 1, 1, 6, 30, 45, 123)).getTime(), - tags: ['a', 'b', 'c'], - data: { some: 'data' } - }; - - Hoek.consoleFunc = function (string) { - - Hoek.consoleFunc = console.log; - expect(string).to.equal('130201/063045.123, a, {"some":"data"}'); - done(); - }; - - Hoek.printEvent(event); - }); - - it('outputs JSON error', function (done) { - - var event = { - timestamp: (new Date(2013, 1, 1, 6, 30, 45, 123)).getTime(), - tags: ['a', 'b', 'c'], - data: { some: 'data' } - }; - - event.data.a = event.data; - - Hoek.consoleFunc = function (string) { - - Hoek.consoleFunc = console.log; - expect(string).to.equal('130201/063045.123, a, JSON Error: Converting circular structure to JSON'); - done(); - }; - - Hoek.printEvent(event); - }); - }); - - describe('#nextTick', function () { - - it('calls the provided callback on nextTick', function (done) { - - var a = 0; - - var inc = function (step, next) { - - a += step; - next(); - }; - - var ticked = Hoek.nextTick(inc); - - ticked(5, function () { - - expect(a).to.equal(6); - done(); - }); - - expect(a).to.equal(0); - inc(1, function () { - - expect(a).to.equal(1); - }); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js deleted file mode 100755 index 3f41e601..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js +++ /dev/null @@ -1 +0,0 @@ -exports.x = 1; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js deleted file mode 100755 index 38556b27..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js +++ /dev/null @@ -1 +0,0 @@ -exports.y = 2; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js deleted file mode 100755 index 436b860b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js +++ /dev/null @@ -1 +0,0 @@ -exports.z = 3; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore deleted file mode 100644 index 77ba16cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml deleted file mode 100755 index 047f7e3d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE deleted file mode 100755 index e699a7bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2013, Eran Hammer. -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 Eran Hammer 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 ERAN HAMMER 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile deleted file mode 100755 index 9e7138c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -test: - @./node_modules/.bin/lab -test-cov: - @./node_modules/.bin/lab -r threshold -t 100 -test-cov-html: - @./node_modules/.bin/lab -r html -o coverage.html -complexity: - @./node_modules/.bin/cr -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/README.md deleted file mode 100755 index 98a6e025..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# sntp - -An SNTP v4 client (RFC4330) for node. Simpy connects to the NTP or SNTP server requested and returns the server time -along with the roundtrip duration and clock offset. To adjust the local time to the NTP time, add the returned `t` offset -to the local time. - -[![Build Status](https://secure.travis-ci.org/hueniverse/sntp.png)](http://travis-ci.org/hueniverse/sntp) - -# Usage - -```javascript -var Sntp = require('sntp'); - -// All options are optional - -var options = { - host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org - port: 123, // Defaults to 123 (NTP) - resolveReference: true, // Default to false (not resolving) - timeout: 1000 // Defaults to zero (no timeout) -}; - -// Request server time - -Sntp.time(options, function (err, time) { - - if (err) { - console.log('Failed: ' + err.message); - process.exit(1); - } - - console.log('Local clock is off by: ' + time.t + ' milliseconds'); - process.exit(0); -}); -``` - -If an application needs to maintain continuous time synchronization, the module provides a stateful method for -querying the current offset only when the last one is too old (defaults to daily). - -```javascript -// Request offset once - -Sntp.offset(function (err, offset) { - - console.log(offset); // New (served fresh) - - // Request offset again - - Sntp.offset(function (err, offset) { - - console.log(offset); // Identical (served from cache) - }); -}); -``` - -To set a background offset refresh, start the interval and use the provided now() method. If for any reason the -client fails to obtain an up-to-date offset, the current system clock is used. - -```javascript -var before = Sntp.now(); // System time without offset - -Sntp.start(function () { - - var now = Sntp.now(); // With offset - Sntp.stop(); -}); -``` - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js deleted file mode 100755 index 0303f6dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js +++ /dev/null @@ -1,16 +0,0 @@ -var Sntp = require('../lib'); - -// Request offset once - -Sntp.offset(function (err, offset) { - - console.log(offset); // New (served fresh) - - // Request offset again - - Sntp.offset(function (err, offset) { - - console.log(offset); // Identical (served from cache) - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js deleted file mode 100755 index bd70d0e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js +++ /dev/null @@ -1,25 +0,0 @@ -var Sntp = require('../lib'); - -// All options are optional - -var options = { - host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org - port: 123, // Defaults to 123 (NTP) - resolveReference: true, // Default to false (not resolving) - timeout: 1000 // Defaults to zero (no timeout) -}; - -// Request server time - -Sntp.time(options, function (err, time) { - - if (err) { - console.log('Failed: ' + err.message); - process.exit(1); - } - - console.log(time); - console.log('Local clock is off by: ' + time.t + ' milliseconds'); - process.exit(0); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js deleted file mode 100755 index e492cd93..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js +++ /dev/null @@ -1,409 +0,0 @@ -// Load modules - -var Dgram = require('dgram'); -var Dns = require('dns'); -var Hoek = require('hoek'); - - -// Declare internals - -var internals = {}; - - -exports.time = function (options, callback) { - - if (arguments.length !== 2) { - callback = arguments[0]; - options = {}; - } - - var settings = Hoek.clone(options); - settings.host = settings.host || 'pool.ntp.org'; - settings.port = settings.port || 123; - settings.resolveReference = settings.resolveReference || false; - - // Declare variables used by callback - - var timeoutId = 0; - var sent = 0; - - // Ensure callback is only called once - - var isFinished = false; - var finish = function (err, result) { - - if (timeoutId) { - clearTimeout(timeoutId); - timeoutId = 0; - } - - if (!isFinished) { - isFinished = true; - socket.removeAllListeners(); - socket.close(); - return callback(err, result); - } - }; - - // Create UDP socket - - var socket = Dgram.createSocket('udp4'); - - socket.once('error', function (err) { - - return finish(err); - }); - - // Listen to incoming messages - - socket.on('message', function (buffer, rinfo) { - - var received = Date.now(); - - var message = new internals.NtpMessage(buffer); - if (!message.isValid) { - return finish(new Error('Invalid server response'), message); - } - - if (message.originateTimestamp !== sent) { - return finish(new Error('Wrong originate timestamp'), message); - } - - // Timestamp Name ID When Generated - // ------------------------------------------------------------ - // Originate Timestamp T1 time request sent by client - // Receive Timestamp T2 time request received by server - // Transmit Timestamp T3 time reply sent by server - // Destination Timestamp T4 time reply received by client - // - // The roundtrip delay d and system clock offset t are defined as: - // - // d = (T4 - T1) - (T3 - T2) t = ((T2 - T1) + (T3 - T4)) / 2 - - var T1 = message.originateTimestamp; - var T2 = message.receiveTimestamp; - var T3 = message.transmitTimestamp; - var T4 = received; - - message.d = (T4 - T1) - (T3 - T2); - message.t = ((T2 - T1) + (T3 - T4)) / 2; - message.receivedLocally = received; - - if (!settings.resolveReference || - message.stratum !== 'secondary') { - - return finish(null, message); - } - - // Resolve reference IP address - - Dns.reverse(message.referenceId, function (err, domains) { - - if (!err) { - message.referenceHost = domains[0]; - } - - return finish(null, message); - }); - }); - - // Set timeout - - if (settings.timeout) { - timeoutId = setTimeout(function () { - - timeoutId = 0; - return finish(new Error('Timeout')); - }, settings.timeout); - } - - // Construct NTP message - - var message = new Buffer(48); - for (var i = 0; i < 48; i++) { // Zero message - message[i] = 0; - } - - message[0] = (0 << 6) + (4 << 3) + (3 << 0) // Set version number to 4 and Mode to 3 (client) - sent = Date.now(); - internals.fromMsecs(sent, message, 40); // Set transmit timestamp (returns as originate) - - // Send NTP request - - socket.send(message, 0, message.length, settings.port, settings.host, function (err, bytes) { - - if (err || - bytes !== 48) { - - return finish(err || new Error('Could not send entire message')); - } - }); -}; - - -internals.NtpMessage = function (buffer) { - - this.isValid = false; - - // Validate - - if (buffer.length !== 48) { - return; - } - - // Leap indicator - - var li = (buffer[0] >> 6); - switch (li) { - case 0: this.leapIndicator = 'no-warning'; break; - case 1: this.leapIndicator = 'last-minute-61'; break; - case 2: this.leapIndicator = 'last-minute-59'; break; - case 3: this.leapIndicator = 'alarm'; break; - } - - // Version - - var vn = ((buffer[0] & 0x38) >> 3); - this.version = vn; - - // Mode - - var mode = (buffer[0] & 0x7); - switch (mode) { - case 1: this.mode = 'symmetric-active'; break; - case 2: this.mode = 'symmetric-passive'; break; - case 3: this.mode = 'client'; break; - case 4: this.mode = 'server'; break; - case 5: this.mode = 'broadcast'; break; - case 0: - case 6: - case 7: this.mode = 'reserved'; break; - } - - // Stratum - - var stratum = buffer[1]; - if (stratum === 0) { - this.stratum = 'death'; - } - else if (stratum === 1) { - this.stratum = 'primary'; - } - else if (stratum <= 15) { - this.stratum = 'secondary'; - } - else { - this.stratum = 'reserved'; - } - - // Poll interval (msec) - - this.pollInterval = Math.round(Math.pow(2, buffer[2])) * 1000; - - // Precision (msecs) - - this.precision = Math.pow(2, buffer[3]) * 1000; - - // Root delay (msecs) - - var rootDelay = 256 * (256 * (256 * buffer[4] + buffer[5]) + buffer[6]) + buffer[7]; - this.rootDelay = 1000 * (rootDelay / 0x10000); - - // Root dispersion (msecs) - - this.rootDispersion = ((buffer[8] << 8) + buffer[9] + ((buffer[10] << 8) + buffer[11]) / Math.pow(2, 16)) * 1000; - - // Reference identifier - - this.referenceId = ''; - switch (this.stratum) { - case 'death': - case 'primary': - this.referenceId = String.fromCharCode(buffer[12]) + String.fromCharCode(buffer[13]) + String.fromCharCode(buffer[14]) + String.fromCharCode(buffer[15]); - break; - case 'secondary': - this.referenceId = '' + buffer[12] + '.' + buffer[13] + '.' + buffer[14] + '.' + buffer[15]; - break; - } - - // Reference timestamp - - this.referenceTimestamp = internals.toMsecs(buffer, 16); - - // Originate timestamp - - this.originateTimestamp = internals.toMsecs(buffer, 24); - - // Receive timestamp - - this.receiveTimestamp = internals.toMsecs(buffer, 32); - - // Transmit timestamp - - this.transmitTimestamp = internals.toMsecs(buffer, 40); - - // Validate - - if (this.version === 4 && - this.stratum !== 'reserved' && - this.mode === 'server' && - this.originateTimestamp && - this.receiveTimestamp && - this.transmitTimestamp) { - - this.isValid = true; - } - - return this; -}; - - -internals.toMsecs = function (buffer, offset) { - - var seconds = 0; - var fraction = 0; - - for (var i = 0; i < 4; ++i) { - seconds = (seconds * 256) + buffer[offset + i]; - } - - for (i = 4; i < 8; ++i) { - fraction = (fraction * 256) + buffer[offset + i]; - } - - return ((seconds - 2208988800 + (fraction / Math.pow(2, 32))) * 1000); -}; - - -internals.fromMsecs = function (ts, buffer, offset) { - - var seconds = Math.floor(ts / 1000) + 2208988800; - var fraction = Math.round((ts % 1000) / 1000 * Math.pow(2, 32)); - - buffer[offset + 0] = (seconds & 0xFF000000) >> 24; - buffer[offset + 1] = (seconds & 0x00FF0000) >> 16; - buffer[offset + 2] = (seconds & 0x0000FF00) >> 8; - buffer[offset + 3] = (seconds & 0x000000FF); - - buffer[offset + 4] = (fraction & 0xFF000000) >> 24; - buffer[offset + 5] = (fraction & 0x00FF0000) >> 16; - buffer[offset + 6] = (fraction & 0x0000FF00) >> 8; - buffer[offset + 7] = (fraction & 0x000000FF); -}; - - -// Offset singleton - -internals.last = { - offset: 0, - expires: 0, - host: '', - port: 0 -}; - - -exports.offset = function (options, callback) { - - if (arguments.length !== 2) { - callback = arguments[0]; - options = {}; - } - - var now = Date.now(); - var clockSyncRefresh = options.clockSyncRefresh || 24 * 60 * 60 * 1000; // Daily - - if (internals.last.offset && - internals.last.host === options.host && - internals.last.port === options.port && - now < internals.last.expires) { - - process.nextTick(function () { - - callback(null, internals.last.offset); - }); - - return; - } - - exports.time(options, function (err, time) { - - if (err) { - return callback(err, 0); - } - - internals.last = { - offset: Math.round(time.t), - expires: now + clockSyncRefresh, - host: options.host, - port: options.port - }; - - return callback(null, internals.last.offset); - }); -}; - - -// Now singleton - -internals.now = { - intervalId: 0 -}; - - -exports.start = function (options, callback) { - - if (arguments.length !== 2) { - callback = arguments[0]; - options = {}; - } - - if (internals.now.intervalId) { - process.nextTick(function () { - - callback(); - }); - - return; - } - - exports.offset(options, function (err, offset) { - - internals.now.intervalId = setInterval(function () { - - exports.offset(options, function () { }); - }, options.clockSyncRefresh || 24 * 60 * 60 * 1000); // Daily - - return callback(); - }); -}; - - -exports.stop = function () { - - if (!internals.now.intervalId) { - return; - } - - clearInterval(internals.now.intervalId); - internals.now.intervalId = 0; -}; - - -exports.isLive = function () { - - return !!internals.now.intervalId; -}; - - -exports.now = function () { - - var now = Date.now(); - if (!exports.isLive() || - now >= internals.last.expires) { - - return now; - } - - return now + internals.last.offset; -}; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/package.json deleted file mode 100755 index 8ce7a61f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "sntp", - "description": "SNTP Client", - "version": "0.2.4", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [], - "repository": { - "type": "git", - "url": "git://github.com/hueniverse/sntp" - }, - "main": "index", - "keywords": [ - "sntp", - "ntp", - "time" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "hoek": "0.9.x" - }, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/hueniverse/sntp/raw/master/LICENSE" - } - ], - "readme": "# sntp\n\nAn SNTP v4 client (RFC4330) for node. Simpy connects to the NTP or SNTP server requested and returns the server time\nalong with the roundtrip duration and clock offset. To adjust the local time to the NTP time, add the returned `t` offset\nto the local time.\n\n[![Build Status](https://secure.travis-ci.org/hueniverse/sntp.png)](http://travis-ci.org/hueniverse/sntp)\n\n# Usage\n\n```javascript\nvar Sntp = require('sntp');\n\n// All options are optional\n\nvar options = {\n host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org\n port: 123, // Defaults to 123 (NTP)\n resolveReference: true, // Default to false (not resolving)\n timeout: 1000 // Defaults to zero (no timeout)\n};\n\n// Request server time\n\nSntp.time(options, function (err, time) {\n\n if (err) {\n console.log('Failed: ' + err.message);\n process.exit(1);\n }\n\n console.log('Local clock is off by: ' + time.t + ' milliseconds');\n process.exit(0);\n});\n```\n\nIf an application needs to maintain continuous time synchronization, the module provides a stateful method for\nquerying the current offset only when the last one is too old (defaults to daily).\n\n```javascript\n// Request offset once\n\nSntp.offset(function (err, offset) {\n\n console.log(offset); // New (served fresh)\n\n // Request offset again\n\n Sntp.offset(function (err, offset) {\n\n console.log(offset); // Identical (served from cache)\n });\n});\n```\n\nTo set a background offset refresh, start the interval and use the provided now() method. If for any reason the\nclient fails to obtain an up-to-date offset, the current system clock is used.\n\n```javascript\nvar before = Sntp.now(); // System time without offset\n\nSntp.start(function () {\n\n var now = Sntp.now(); // With offset\n Sntp.stop();\n});\n```\n\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/hueniverse/sntp/issues" - }, - "homepage": "https://github.com/hueniverse/sntp", - "_id": "sntp@0.2.4", - "dist": { - "shasum": "657ad142a4f42d39c3e8f4b507ec2dd8f0ecfd9f" - }, - "_from": "sntp@0.2.x", - "_resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js deleted file mode 100755 index 38a55346..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js +++ /dev/null @@ -1,359 +0,0 @@ -// Load modules - -var Dgram = require('dgram'); -var Lab = require('lab'); -var Sntp = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('SNTP', function () { - - describe('#time', function () { - - it('returns consistent result over multiple tries', function (done) { - - Sntp.time(function (err, time) { - - expect(err).to.not.exist; - expect(time).to.exist; - var t1 = time.t; - - Sntp.time(function (err, time) { - - expect(err).to.not.exist; - expect(time).to.exist; - var t2 = time.t; - expect(Math.abs(t1 - t2)).is.below(200); - done(); - }); - }); - }); - - it('resolves reference IP', function (done) { - - Sntp.time({ host: 'ntp.exnet.com', resolveReference: true }, function (err, time) { - - expect(err).to.not.exist; - expect(time).to.exist; - expect(time.referenceHost).to.exist; - done(); - }); - }); - - it('times out on no response', function (done) { - - Sntp.time({ port: 124, timeout: 100 }, function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.equal('Timeout'); - done(); - }); - }); - - it('errors on error event', function (done) { - - var orig = Dgram.createSocket; - Dgram.createSocket = function (type) { - - Dgram.createSocket = orig; - var socket = Dgram.createSocket(type); - process.nextTick(function () { socket.emit('error', new Error('Fake')) }); - return socket; - }; - - Sntp.time(function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.equal('Fake'); - done(); - }); - }); - - it('times out on invalid host', function (done) { - - Sntp.time({ host: 'error', timeout: 10000 }, function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.equal('getaddrinfo ENOTFOUND'); - done(); - }); - }); - - it('fails on bad response buffer size', function (done) { - - var server = Dgram.createSocket('udp4'); - server.on('message', function (message, remote) { - var message = new Buffer(10); - server.send(message, 0, message.length, remote.port, remote.address, function (err, bytes) { - - server.close(); - }); - }); - - server.bind(49123); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid server response'); - done(); - }); - }); - - var messup = function (bytes) { - - var server = Dgram.createSocket('udp4'); - server.on('message', function (message, remote) { - - var message = new Buffer([ - 0x24, 0x01, 0x00, 0xe3, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x41, 0x43, 0x54, 0x53, - 0xd4, 0xa8, 0x2d, 0xc7, - 0x1c, 0x5d, 0x49, 0x1b, - 0xd4, 0xa8, 0x2d, 0xe6, - 0x67, 0xef, 0x9d, 0xb2, - 0xd4, 0xa8, 0x2d, 0xe6, - 0x71, 0xed, 0xb5, 0xfb, - 0xd4, 0xa8, 0x2d, 0xe6, - 0x71, 0xee, 0x6c, 0xc5 - ]); - - for (var i = 0, il = bytes.length; i < il; ++i) { - message[bytes[i][0]] = bytes[i][1]; - } - - server.send(message, 0, message.length, remote.port, remote.address, function (err, bytes) { - - server.close(); - }); - }); - - server.bind(49123); - }; - - it('fails on bad version', function (done) { - - messup([[0, (0 << 6) + (3 << 3) + (4 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.version).to.equal(3); - expect(err.message).to.equal('Invalid server response'); - done(); - }); - }); - - it('fails on bad originate timestamp and alarm li', function (done) { - - messup([[0, (3 << 6) + (4 << 3) + (4 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(err.message).to.equal('Wrong originate timestamp'); - expect(time.leapIndicator).to.equal('alarm'); - done(); - }); - }); - - it('returns time with death stratum and last61 li', function (done) { - - messup([[0, (1 << 6) + (4 << 3) + (4 << 0)], [1, 0]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(time.stratum).to.equal('death'); - expect(time.leapIndicator).to.equal('last-minute-61'); - done(); - }); - }); - - it('returns time with reserved stratum and last59 li', function (done) { - - messup([[0, (2 << 6) + (4 << 3) + (4 << 0)], [1, 0x1f]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(time.stratum).to.equal('reserved'); - expect(time.leapIndicator).to.equal('last-minute-59'); - done(); - }); - }); - - it('fails on bad mode (symmetric-active)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (1 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('symmetric-active'); - done(); - }); - }); - - it('fails on bad mode (symmetric-passive)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (2 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('symmetric-passive'); - done(); - }); - }); - - it('fails on bad mode (client)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (3 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('client'); - done(); - }); - }); - - it('fails on bad mode (broadcast)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (5 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('broadcast'); - done(); - }); - }); - - it('fails on bad mode (reserved)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (6 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('reserved'); - done(); - }); - }); - }); - - describe('#offset', function () { - - it('gets the current offset', function (done) { - - Sntp.offset(function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.not.equal(0); - done(); - }); - }); - - it('gets the current offset from cache', function (done) { - - Sntp.offset(function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.not.equal(0); - var offset1 = offset; - Sntp.offset({}, function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.equal(offset1); - done(); - }); - }); - }); - - it('fails getting the current offset on invalid server', function (done) { - - Sntp.offset({ host: 'error' }, function (err, offset) { - - expect(err).to.exist; - expect(offset).to.equal(0); - done(); - }); - }); - }); - - describe('#now', function () { - - it('starts auto-sync, gets now, then stops', function (done) { - - Sntp.stop(); - - var before = Sntp.now(); - expect(before).to.equal(Date.now()); - - Sntp.start(function () { - - var now = Sntp.now(); - expect(now).to.not.equal(Date.now()); - Sntp.stop(); - - done(); - }); - }); - - it('starts twice', function (done) { - - Sntp.start(function () { - - Sntp.start(function () { - - var now = Sntp.now(); - expect(now).to.not.equal(Date.now()); - Sntp.stop(); - - done(); - }); - }); - }); - - it('starts auto-sync, gets now, waits, gets again after timeout', function (done) { - - Sntp.stop(); - - var before = Sntp.now(); - expect(before).to.equal(Date.now()); - - Sntp.start({ clockSyncRefresh: 100 }, function () { - - var now = Sntp.now(); - expect(now).to.not.equal(Date.now()); - expect(now).to.equal(Sntp.now()); - - setTimeout(function () { - - expect(Sntp.now()).to.not.equal(now); - Sntp.stop(); - done(); - }, 110); - }); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/package.json deleted file mode 100755 index 8bf4c5c7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "hawk", - "description": "HTTP Hawk Authentication Scheme", - "version": "1.0.0", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [], - "repository": { - "type": "git", - "url": "git://github.com/hueniverse/hawk" - }, - "main": "index", - "keywords": [ - "http", - "authentication", - "scheme", - "hawk" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "hoek": "0.9.x", - "boom": "0.4.x", - "cryptiles": "0.2.x", - "sntp": "0.2.x" - }, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x", - "localStorage": "1.0.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/hueniverse/hawk/raw/master/LICENSE" - } - ], - "readme": "![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png)\n\n<img align=\"right\" src=\"https://raw.github.com/hueniverse/hawk/master/images/logo.png\" /> **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial\nHTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz).\n\nCurrent version: **1.0**\n\n[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk)\n\n# Table of Content\n\n- [**Introduction**](#introduction)\n - [Replay Protection](#replay-protection)\n - [Usage Example](#usage-example)\n - [Protocol Example](#protocol-example)\n - [Payload Validation](#payload-validation)\n - [Response Payload Validation](#response-payload-validation)\n - [Browser Support and Considerations](#browser-support-and-considerations)\n<p></p>\n- [**Single URI Authorization**](#single-uri-authorization)\n - [Usage Example](#bewit-usage-example)\n<p></p>\n- [**Security Considerations**](#security-considerations)\n - [MAC Keys Transmission](#mac-keys-transmission)\n - [Confidentiality of Requests](#confidentiality-of-requests)\n - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers)\n - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials)\n - [Entropy of Keys](#entropy-of-keys)\n - [Coverage Limitations](#coverage-limitations)\n - [Future Time Manipulation](#future-time-manipulation)\n - [Client Clock Poisoning](#client-clock-poisoning)\n - [Bewit Limitations](#bewit-limitations)\n - [Host Header Forgery](#host-header-forgery)\n<p></p>\n- [**Frequently Asked Questions**](#frequently-asked-questions)\n<p></p>\n- [**Acknowledgements**](#acknowledgements)\n\n# Introduction\n\n**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with\npartial cryptographic verification of the request and response, covering the HTTP method, request URI, host,\nand optionally the request payload.\n\nSimilar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of\nclient credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme,\nthe key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is\nincluded in its place.\n\nHowever, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of\nreplay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less\n\"chattiness\" (interaction with the server).\n\nAlso unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because\nthe client and server must both have access to the key material in the clear.\n\nThe primary design goals of this scheme are to:\n* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources,\n* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where\n to send an authenticated request), and\n* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client\n failure to validate the server's identity as part of its TLS handshake.\n\nIn addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using\na query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk).\n\nThe **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server,\nwhich is beyond the scope of this module. Typically, the shared credentials are established via an initial\nTLS-protected phase or derived from some other shared confidential information available to both the client\nand the server.\n\n\n## Replay Protection\n\nWithout replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more \nthan once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when \nmaking requests. This gives the server enough information to prevent replay attacks.\n\nThe nonce is generated by the client, and is a string unique across all requests with the same timestamp and\nkey identifier combination. \n\nThe timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards\nare rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks.\nBy default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in\npractice translates to a maximum of 2 minutes as the skew can be positive or negative).\n\nUsing a timestamp requires the client's clock to be in sync with the server's clock. **Hawk** requires both the client\nclock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types\n(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response\nto a bad timestamp.\n\nThere is no expectation that the client will adjust its system clock to match the server (in fact, this would be a\npotential attack vector). Instead, the client only uses the server's time to calculate an offset used only\nfor communications with that particular server. The protocol rewards clients with synchronized clocks by reducing\nthe number of round trips required to authenticate the first request.\n\n\n## Usage Example\n\nServer code:\n\n```javascript\nvar Http = require('http');\nvar Hawk = require('hawk');\n\n\n// Credentials lookup function\n\nvar credentialsFunc = function (id, callback) {\n\n var credentials = {\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256',\n user: 'Steve'\n };\n\n return callback(null, credentials);\n};\n\n// Create HTTP server\n\nvar handler = function (req, res) {\n\n // Authenticate incoming request\n\n Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {\n\n // Prepare response\n\n var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!');\n var headers = { 'Content-Type': 'text/plain' };\n\n // Generate Server-Authorization response header\n\n var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers['Content-Type'] });\n headers['Server-Authorization'] = header;\n\n // Send the response back\n\n res.writeHead(!err ? 200 : 401, headers);\n res.end(payload);\n });\n};\n\n// Start server\n\nHttp.createServer(handler).listen(8000, 'example.com');\n```\n\nClient code:\n\n```javascript\nvar Request = require('request');\nvar Hawk = require('hawk');\n\n\n// Client credentials\n\nvar credentials = {\n id: 'dh37fgj492je',\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256'\n}\n\n// Request options\n\nvar requestOptions = {\n uri: 'http://example.com:8000/resource/1?b=1&a=2',\n method: 'GET',\n headers: {}\n};\n\n// Generate Authorization request header\n\nvar header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' });\nrequestOptions.headers.Authorization = header.field;\n\n// Send authenticated request\n\nRequest(requestOptions, function (error, response, body) {\n\n // Authenticate the server's response\n\n var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body });\n\n // Output results\n\n console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)'));\n});\n```\n\n**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local\nmachine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP 'start()' method.\n\n```javascript\nHawk.sntp.start();\n```\n\n\n## Protocol Example\n\nThe client attempts to access a protected resource without authentication, sending the following HTTP request to\nthe resource server:\n\n```\nGET /resource/1?b=1&a=2 HTTP/1.1\nHost: example.com:8000\n```\n\nThe resource server returns an authentication challenge.\n\n```\nHTTP/1.1 401 Unauthorized\nWWW-Authenticate: Hawk\n```\n\nThe client has previously obtained a set of **Hawk** credentials for accessing resources on the \"http://example.com/\"\nserver. The **Hawk** credentials issued to the client include the following attributes:\n\n* Key identifier: dh37fgj492je\n* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\n* Algorithm: sha256\n\nThe client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1,\n1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline\ncharacter):\n\n```\nhawk.1.header\n1353832234\nj4h3g2\nGET\n/resource/1?b=1&a=2\nexample.com\n8000\n\nsome-app-ext-data\n\n```\n\nThe request MAC is calculated using HMAC with the specified hash algorithm \"sha256\" and the key over the normalized request string.\nThe result is base64-encoded to produce the request MAC:\n\n```\n6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=\n```\n\nThe client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using\nthe HTTP `Authorization` request header field:\n\n```\nGET /resource/1?b=1&a=2 HTTP/1.1\nHost: example.com:8000\nAuthorization: Hawk id=\"dh37fgj492je\", ts=\"1353832234\", nonce=\"j4h3g2\", ext=\"some-app-ext-data\", mac=\"6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=\"\n```\n\nThe server validates the request by calculating the request MAC again based on the request received and verifies the validity\nand scope of the **Hawk** credentials. If valid, the server responds with the requested resource.\n\n\n### Payload Validation\n\n**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash\nusing the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character):\n* `hawk.1.payload`\n* the content-type in lowercase, without any parameters (e.g. `application/json`)\n* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability)\n\nFor example:\n\n* Payload: `Thank you for flying Hawk`\n* Content Type: `text/plain`\n* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=`\n\nResults in the following input to the payload hash function (newline terminated values):\n\n```\nhawk.1.payload\ntext/plain\nThank you for flying Hawk\n\n```\n\nWhich produces the following hash value:\n\n```\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\n```\n\nThe client constructs the normalized request string (newline terminated values):\n\n```\nhawk.1.header\n1353832234\nj4h3g2\nPOST\n/resource/1?a=1&b=2\nexample.com\n8000\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\nsome-app-ext-data\n\n```\n\nThen calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data,\nand request MAC, with the request using the HTTP `Authorization` request header field:\n\n```\nPOST /resource/1?a=1&b=2 HTTP/1.1\nHost: example.com:8000\nAuthorization: Hawk id=\"dh37fgj492je\", ts=\"1353832234\", nonce=\"j4h3g2\", hash=\"Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\", ext=\"some-app-ext-data\", mac=\"aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw=\"\n```\n\nIt is up to the server if and when it validates the payload for any given request, based solely on it's security policy\nand the nature of the data included.\n\nIf the payload is available at the time of authentication, the server uses the hash value provided by the client to construct\nthe normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value\nwith the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash.\n\nHowever, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed\nat a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value\nprovided by the client after validating the MAC.\n\nIt is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value\nincluded in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided\nby the client, the payload may be modified by an attacker.\n\n\n## Response Payload Validation\n\n**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the\nclient to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header\nas a response header using the exact same syntax as the `Authorization` request header field.\n\nThe header is contructed using the same process as the client's request header. The server uses the same credentials and other\nartifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with\nnew values based on the server response. The rest as identical to those used by the client.\n\nThe result MAC digest is included with the optional `hash` and `ext` values:\n\n```\nServer-Authorization: Hawk mac=\"XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=\", hash=\"f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=\", ext=\"response-specific\"\n```\n\n\n## Browser Support and Considerations\n\nA browser script is provided for including using a `<script>` tag in [lib/browser.js](/lib/browser.js).\n\n**Hawk** relies on the _Server-Authorization_ and _WWW-Authenticate_ headers in its response to communicate with the client.\nTherefore, in case of CORS requests, it is important to consider sending _Access-Control-Expose-Headers_ with the value\n_\"WWW-Authenticate, Server-Authorization\"_ on each response from your server. As explained in the\n[specifications](http://www.w3.org/TR/cors/#access-control-expose-headers-response-header), it will indicate that these headers\ncan safely be accessed by the client (using getResponseHeader() on the XmlHttpRequest object). Otherwise you will be met with a\n[\"simple response header\"](http://www.w3.org/TR/cors/#simple-response-header) which excludes these fields and would prevent the\nHawk client from authenticating the requests.You can read more about the why and how in this\n[article](http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server)\n\n\n# Single URI Authorization\n\nThere are cases in which limited and short-term access to a protected resource is granted to a third party which does not\nhave access to the shared credentials. For example, displaying a protected image on a web page accessed by anyone. **Hawk**\nprovides limited support for such URIs in the form of a _bewit_ - a URI query parameter appended to the request URI which contains\nthe necessary credentials to authenticate the request.\n\nBecause of the significant security risks involved in issuing such access, bewit usage is purposely limited only to GET requests\nand for a finite period of time. Both the client and server can issue bewit credentials, however, the server should not use the same\ncredentials as the client to maintain clear traceability as to who issued which credentials.\n\nIn order to simplify implementation, bewit credentials do not support single-use policy and can be replayed multiple times within\nthe granted access timeframe. \n\n\n## Bewit Usage Example\n\nServer code:\n\n```javascript\nvar Http = require('http');\nvar Hawk = require('hawk');\n\n\n// Credentials lookup function\n\nvar credentialsFunc = function (id, callback) {\n\n var credentials = {\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256'\n };\n\n return callback(null, credentials);\n};\n\n// Create HTTP server\n\nvar handler = function (req, res) {\n\n Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) {\n\n res.writeHead(!err ? 200 : 401, { 'Content-Type': 'text/plain' });\n res.end(!err ? 'Access granted' : 'Shoosh!');\n });\n};\n\nHttp.createServer(handler).listen(8000, 'example.com');\n```\n\nBewit code generation:\n\n```javascript\nvar Request = require('request');\nvar Hawk = require('hawk');\n\n\n// Client credentials\n\nvar credentials = {\n id: 'dh37fgj492je',\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256'\n}\n\n// Generate bewit\n\nvar duration = 60 * 5; // 5 Minutes\nvar bewit = Hawk.uri.getBewit('http://example.com:8080/resource/1?b=1&a=2', { credentials: credentials, ttlSec: duration, ext: 'some-app-data' });\nvar uri = 'http://example.com:8000/resource/1?b=1&a=2' + '&bewit=' + bewit;\n```\n\n\n# Security Considerations\n\nThe greatest sources of security risks are usually found not in **Hawk** but in the policies and procedures surrounding its use.\nImplementers are strongly encouraged to assess how this module addresses their security requirements. This section includes\nan incomplete list of security considerations that must be reviewed and understood before deploying **Hawk** on the server.\nMany of the protections provided in **Hawk** depends on whether and how they are used.\n\n### MAC Keys Transmission\n\n**Hawk** does not provide any mechanism for obtaining or transmitting the set of shared credentials required. Any mechanism used\nto obtain **Hawk** credentials must ensure that these transmissions are protected using transport-layer mechanisms such as TLS.\n\n### Confidentiality of Requests\n\nWhile **Hawk** provides a mechanism for verifying the integrity of HTTP requests, it provides no guarantee of request\nconfidentiality. Unless other precautions are taken, eavesdroppers will have full access to the request content. Servers should\ncarefully consider the types of data likely to be sent as part of such requests, and employ transport-layer security mechanisms\nto protect sensitive resources.\n\n### Spoofing by Counterfeit Servers\n\n**Hawk** provides limited verification of the server authenticity. When receiving a response back from the server, the server\nmay choose to include a response `Server-Authorization` header which the client can use to verify the response. However, it is up to\nthe server to determine when such measure is included, to up to the client to enforce that policy.\n\nA hostile party could take advantage of this by intercepting the client's requests and returning misleading or otherwise\nincorrect responses. Service providers should consider such attacks when developing services using this protocol, and should\nrequire transport-layer security for any requests where the authenticity of the resource server or of server responses is an issue.\n\n### Plaintext Storage of Credentials\n\nThe **Hawk** key functions the same way passwords do in traditional authentication systems. In order to compute the request MAC,\nthe server must have access to the key in plaintext form. This is in contrast, for example, to modern operating systems, which\nstore only a one-way hash of user credentials.\n\nIf an attacker were to gain access to these keys - or worse, to the server's database of all such keys - he or she would be able\nto perform any action on behalf of any resource owner. Accordingly, it is critical that servers protect these keys from unauthorized\naccess.\n\n### Entropy of Keys\n\nUnless a transport-layer security protocol is used, eavesdroppers will have full access to authenticated requests and request\nMAC values, and will thus be able to mount offline brute-force attacks to recover the key used. Servers should be careful to\nassign keys which are long enough, and random enough, to resist such attacks for at least the length of time that the **Hawk**\ncredentials are valid.\n\nFor example, if the credentials are valid for two weeks, servers should ensure that it is not possible to mount a brute force\nattack that recovers the key in less than two weeks. Of course, servers are urged to err on the side of caution, and use the\nlongest key reasonable.\n\nIt is equally important that the pseudo-random number generator (PRNG) used to generate these keys be of sufficiently high\nquality. Many PRNG implementations generate number sequences that may appear to be random, but which nevertheless exhibit\npatterns or other weaknesses which make cryptanalysis or brute force attacks easier. Implementers should be careful to use\ncryptographically secure PRNGs to avoid these problems.\n\n### Coverage Limitations\n\nThe request MAC only covers the HTTP `Host` header and optionally the `Content-Type` header. It does not cover any other headers\nwhich can often affect how the request body is interpreted by the server. If the server behavior is influenced by the presence\nor value of such headers, an attacker can manipulate the request headers without being detected. Implementers should use the\n`ext` feature to pass application-specific information via the `Authorization` header which is protected by the request MAC.\n\nThe response authentication, when performed, only covers the response payload, content-type, and the request information \nprovided by the client in it's request (method, resource, timestamp, nonce, etc.). It does not cover the HTTP status code or\nany other response header field (e.g. Location) which can affect the client's behaviour.\n\n### Future Time Manipulation\n\nThe protocol relies on a clock sync between the client and server. To accomplish this, the server informs the client of its\ncurrent time when an invalid timestamp is received.\n\nIf an attacker is able to manipulate this information and cause the client to use an incorrect time, it would be able to cause\nthe client to generate authenticated requests using time in the future. Such requests will fail when sent by the client, and will\nnot likely leave a trace on the server (given the common implementation of nonce, if at all enforced). The attacker will then\nbe able to replay the request at the correct time without detection.\n\nThe client must only use the time information provided by the server if:\n* it was delivered over a TLS connection and the server identity has been verified, or\n* the `tsm` MAC digest calculated using the same client credentials over the timestamp has been verified.\n\n### Client Clock Poisoning\n\nWhen receiving a request with a bad timestamp, the server provides the client with its current time. The client must never use\nthe time received from the server to adjust its own clock, and must only use it to calculate an offset for communicating with\nthat particular server.\n\n### Bewit Limitations\n\nSpecial care must be taken when issuing bewit credentials to third parties. Bewit credentials are valid until expiration and cannot\nbe revoked or limited without using other means. Whatever resource they grant access to will be completely exposed to anyone with\naccess to the bewit credentials which act as bearer credentials for that particular resource. While bewit usage is limited to GET\nrequests only and therefore cannot be used to perform transactions or change server state, it can still be used to expose private\nand sensitive information.\n\n### Host Header Forgery\n\nHawk validates the incoming request MAC against the incoming HTTP Host header. However, unless the optional `host` and `port`\noptions are used with `server.authenticate()`, a malicous client can mint new host names pointing to the server's IP address and\nuse that to craft an attack by sending a valid request that's meant for another hostname than the one used by the server. Server\nimplementors must manually verify that the host header received matches their expectation (or use the options mentioned above).\n\n# Frequently Asked Questions\n\n### Where is the protocol specification?\n\nIf you are looking for some prose explaining how all this works, **this is it**. **Hawk** is being developed as an open source\nproject instead of a standard. In other words, the [code](/hueniverse/hawk/tree/master/lib) is the specification. Not sure about\nsomething? Open an issue!\n\n### Is it done?\n\nAt if version 0.10.0, **Hawk** is feature-complete. However, until this module reaches version 1.0.0 it is considered experimental\nand is likely to change. This also means your feedback and contribution are very welcome. Feel free to open issues with questions\nand suggestions.\n\n### Where can I find **Hawk** implementations in other languages?\n\n**Hawk**'s only reference implementation is provided in JavaScript as a node.js module. However, others are actively porting it to other\nplatforms. There is already a [PHP](https://github.com/alexbilbie/PHP-Hawk),\n[.NET](https://github.com/pcibraro/hawknet), and [JAVA](https://github.com/wealdtech/hawk) libraries available. The full list\nis maintained [here](https://github.com/hueniverse/hawk/issues?labels=port). Please add an issue if you are working on another\nport. A cross-platform test-suite is in the works.\n\n### Why isn't the algorithm part of the challenge or dynamically negotiated?\n\nThe algorithm used is closely related to the key issued as different algorithms require different key sizes (and other\nrequirements). While some keys can be used for multiple algorithm, the protocol is designed to closely bind the key and algorithm\ntogether as part of the issued credentials.\n\n### Why is Host and Content-Type the only headers covered by the request MAC?\n\nIt is really hard to include other headers. Headers can be changed by proxies and other intermediaries and there is no\nwell-established way to normalize them. Many platforms change the case of header field names and values. The only\nstraight-forward solution is to include the headers in some blob (say, base64 encoded JSON) and include that with the request,\nan approach taken by JWT and other such formats. However, that design violates the HTTP header boundaries, repeats information,\nand introduces other security issues because firewalls will not be aware of these \"hidden\" headers. In addition, any information\nrepeated must be compared to the duplicated information in the header and therefore only moves the problem elsewhere.\n\n### Why not just use HTTP Digest?\n\nDigest requires pre-negotiation to establish a nonce. This means you can't just make a request - you must first send\na protocol handshake to the server. This pattern has become unacceptable for most web services, especially mobile\nwhere extra round-trip are costly.\n\n### Why bother with all this nonce and timestamp business?\n\n**Hawk** is an attempt to find a reasonable, practical compromise between security and usability. OAuth 1.0 got timestamp\nand nonces halfway right but failed when it came to scalability and consistent developer experience. **Hawk** addresses\nit by requiring the client to sync its clock, but provides it with tools to accomplish it.\n\nIn general, replay protection is a matter of application-specific threat model. It is less of an issue on a TLS-protected\nsystem where the clients are implemented using best practices and are under the control of the server. Instead of dropping\nreplay protection, **Hawk** offers a required time window and an optional nonce verification. Together, it provides developers\nwith the ability to decide how to enforce their security policy without impacting the client's implementation.\n\n### What are `app` and `dlg` in the authorization header and normalized mac string?\n\nThe original motivation for **Hawk** was to replace the OAuth 1.0 use cases. This included both a simple client-server mode which\nthis module is specifically designed for, and a delegated access mode which is being developed separately in\n[Oz](https://github.com/hueniverse/oz). In addition to the **Hawk** use cases, Oz requires another attribute: the application id `app`.\nThis provides binding between the credentials and the application in a way that prevents an attacker from tricking an application\nto use credentials issued to someone else. It also has an optional 'delegated-by' attribute `dlg` which is the application id of the\napplication the credentials were directly issued to. The goal of these two additions is to allow Oz to utilize **Hawk** directly,\nbut with the additional security of delegated credentials.\n\n### What is the purpose of the static strings used in each normalized MAC input?\n\nWhen calculating a hash or MAC, a static prefix (tag) is added. The prefix is used to prevent MAC values from being\nused or reused for a purpose other than what they were created for (i.e. prevents switching MAC values between a request,\nresponse, and a bewit use cases). It also protects against expliots created after a potential change in how the protocol\ncreates the normalized string. For example, if a future version would switch the order of nonce and timestamp, it\ncan create an exploit opportunity for cases where the nonce is similar in format to a timestamp.\n\n### Does **Hawk** have anything to do with OAuth?\n\nShort answer: no.\n\n**Hawk** was originally proposed as the OAuth MAC Token specification. However, the OAuth working group in its consistent\nincompetence failed to produce a final, usable solution to address one of the most popular use cases of OAuth 1.0 - using it\nto authenticate simple client-server transactions (i.e. two-legged). As you can guess, the OAuth working group is still hard\nat work to produce more garbage.\n\n**Hawk** provides a simple HTTP authentication scheme for making client-server requests. It does not address the OAuth use case\nof delegating access to a third party. If you are looking for an OAuth alternative, check out [Oz](https://github.com/hueniverse/oz).\n\n\n# Acknowledgements\n\n**Hawk** is a derivative work of the [HTTP MAC Authentication Scheme](http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05) proposal\nco-authored by Ben Adida, Adam Barth, and Eran Hammer, which in turn was based on the OAuth 1.0 community specification.\n\nSpecial thanks to Ben Laurie for his always insightful feedback and advice.\n\nThe **Hawk** logo was created by [Chris Carrasco](http://chriscarrasco.com).\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/hueniverse/hawk/issues" - }, - "homepage": "https://github.com/hueniverse/hawk", - "_id": "hawk@1.0.0", - "dist": { - "shasum": "54a49d24842997b48ab16d30e69195e4a574149b" - }, - "_from": "hawk@~1.0.0", - "_resolved": "https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/browser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/browser.js deleted file mode 100755 index b25a10fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/browser.js +++ /dev/null @@ -1,771 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hoek = require('hoek'); -var Hawk = require('../lib'); -var Browser = require('../lib/browser'); -var LocalStorage = require('localStorage'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Browser', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: (id === '1' ? 'sha1' : 'sha256'), - user: 'steve' - }; - - return callback(null, credentials); - }; - - it('should generate a header then successfully parse it (configuration)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (node request)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts, { payload: 'some reply', contentType: 'text/plain', ext: 'response-specific' }); - expect(res.headers['server-authorization']).to.exist; - - expect(Browser.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (no server header options)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts); - expect(res.headers['server-authorization']).to.exist; - - expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (no server header)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header with stale ts and successfully authenticate on second call', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - Browser.utils.setNtpOffset(60 * 60 * 1000); - var header = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }); - req.authorization = header.field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Stale timestamp'); - - var res = { - headers: { - 'www-authenticate': err.response.headers['WWW-Authenticate'] - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.utils.getNtpOffset()).to.equal(60 * 60 * 1000); - expect(Browser.client.authenticate(res, credentials, header.artifacts)).to.equal(true); - expect(Browser.utils.getNtpOffset()).to.equal(0); - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - }); - - it('should generate a header with stale ts and successfully authenticate on second call (manual localStorage)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - Browser.utils.setStorage(LocalStorage) - - Browser.utils.setNtpOffset(60 * 60 * 1000); - var header = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }); - req.authorization = header.field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Stale timestamp'); - - var res = { - headers: { - 'www-authenticate': err.response.headers['WWW-Authenticate'] - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(parseInt(LocalStorage.getItem('hawk_ntp_offset'))).to.equal(60 * 60 * 1000); - expect(Browser.utils.getNtpOffset()).to.equal(60 * 60 * 1000); - expect(Browser.client.authenticate(res, credentials, header.artifacts)).to.equal(true); - expect(Browser.utils.getNtpOffset()).to.equal(0); - expect(parseInt(LocalStorage.getItem('hawk_ntp_offset'))).to.equal(0); - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - }); - - it('should generate a header then fails to parse it (missing server header hash)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts); - expect(res.headers['server-authorization']).to.exist; - - expect(Browser.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(false); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (with hash)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it then validate payload', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload('hola!', credentials, artifacts)).to.be.true; - expect(Hawk.server.authenticatePayload('hello!', credentials, artifacts)).to.be.false; - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (app)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(artifacts.app).to.equal('asd23ased'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (app, dlg)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased', dlg: '23434szr3q4d' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(artifacts.app).to.equal('asd23ased'); - expect(artifacts.dlg).to.equal('23434szr3q4d'); - done(); - }); - }); - }); - - it('should generate a header then fail authentication due to bad hash', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, { payload: 'byebye!' }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad payload hash'); - done(); - }); - }); - }); - - it('should generate a header for one resource then fail to authenticate another', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - req.url = '/something/else'; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(credentials).to.exist; - done(); - }); - }); - }); - - describe('client', function () { - - describe('#header', function () { - - it('should return a valid authorization header (sha1)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha1' - }; - - var header = Browser.client.header('http://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="bsvY3IfUllw6V5rvk4tStEvpBhE=", ext="Bazinga!", mac="qbf1ZPG/r/e06F4ht+T77LXi5vw="'); - done(); - }); - - it('should return a valid authorization header (sha256)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", ext="Bazinga!", mac="q1CwFoSHzPZSkbIvl0oYlD+91rBUEvFk763nMjMndj8="'); - done(); - }); - - it('should return a valid authorization header (no ext)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", mac="HTgtd0jPI6E4izx8e4OHdO36q00xFCU0FolNq3RiCYs="'); - done(); - }); - - it('should return an empty authorization header on missing options', function (done) { - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST').field; - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid credentials', function (done) { - - var credentials = { - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207 }).field; - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid algorithm', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, payload: 'something, anything!', ext: 'Bazinga!', timestamp: 1353809207 }).field; - expect(header).to.equal(''); - done(); - }); - }); - - describe('#authenticate', function () { - - it('should return false on invalid header', function (done) { - - var res = { - headers: { - 'server-authorization': 'Hawk mac="abc", bad="xyz"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.client.authenticate(res, {})).to.equal(false); - done(); - }); - - it('should return false on invalid mac', function (done) { - - var res = { - headers: { - 'content-type': 'text/plain', - 'server-authorization': 'Hawk mac="_IJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - var artifacts = { - method: 'POST', - host: 'example.com', - port: '8080', - resource: '/resource/4?filter=a', - ts: '1362336900', - nonce: 'eb5S_L', - hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=', - ext: 'some-app-data', - app: undefined, - dlg: undefined, - mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=', - id: '123456' - }; - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(false); - done(); - }); - - it('should return true on ignoring hash', function (done) { - - var res = { - headers: { - 'content-type': 'text/plain', - 'server-authorization': 'Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - var artifacts = { - method: 'POST', - host: 'example.com', - port: '8080', - resource: '/resource/4?filter=a', - ts: '1362336900', - nonce: 'eb5S_L', - hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=', - ext: 'some-app-data', - app: undefined, - dlg: undefined, - mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=', - id: '123456' - }; - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - - it('should fail on invalid WWW-Authenticate header format', function (done) { - - var res = { - headers: { - 'www-authenticate': 'Hawk ts="1362346425875", tsm="PhwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", x="Stale timestamp"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.client.authenticate(res, {})).to.equal(false); - done(); - }); - - it('should fail on invalid WWW-Authenticate header format', function (done) { - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - var res = { - headers: { - 'www-authenticate': 'Hawk ts="1362346425875", tsm="hwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", error="Stale timestamp"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.client.authenticate(res, credentials)).to.equal(false); - done(); - }); - }); - - describe('#message', function () { - it('should generate an authorization then successfully parse it', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Browser.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - }); - - it('should fail on missing host', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Browser.client.message(null, 8080, 'some message', { credentials: credentials }); - expect(auth).to.not.exist; - done(); - }); - }); - - it('should fail on missing credentials', function (done) { - - var auth = Browser.client.message('example.com', 8080, 'some message', {}); - expect(auth).to.not.exist; - done(); - }); - - it('should fail on invalid algorithm', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var creds = Hoek.clone(credentials); - creds.algorithm = 'blah'; - var auth = Browser.client.message('example.com', 8080, 'some message', { credentials: creds }); - expect(auth).to.not.exist; - done(); - }); - }); - }); - }); - - describe('#parseAuthorizationHeader', function (done) { - - it('returns null on missing header', function (done) { - - expect(Browser.utils.parseAuthorizationHeader()).to.equal(null); - done(); - }); - - it('returns null on bad header syntax (structure)', function (done) { - - expect(Browser.utils.parseAuthorizationHeader('Hawk')).to.equal(null); - done(); - }); - - it('returns null on bad header syntax (parts)', function (done) { - - expect(Browser.utils.parseAuthorizationHeader(' ')).to.equal(null); - done(); - }); - - it('returns null on bad scheme name', function (done) { - - expect(Browser.utils.parseAuthorizationHeader('Basic asdasd')).to.equal(null); - done(); - }); - - it('returns null on bad attribute value', function (done) { - - expect(Browser.utils.parseAuthorizationHeader('Hawk test="\t"', ['test'])).to.equal(null); - done(); - }); - - it('returns null on duplicated attribute', function (done) { - - expect(Browser.utils.parseAuthorizationHeader('Hawk test="a", test="b"', ['test'])).to.equal(null); - done(); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/client.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/client.js deleted file mode 100755 index bcc4222a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/client.js +++ /dev/null @@ -1,206 +0,0 @@ -// Load modules - -var Url = require('url'); -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('client', function () { - - describe('#header', function () { - - it('should return a valid authorization header (sha1)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha1' - }; - - var header = Hawk.client.header('http://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="bsvY3IfUllw6V5rvk4tStEvpBhE=", ext="Bazinga!", mac="qbf1ZPG/r/e06F4ht+T77LXi5vw="'); - done(); - }); - - it('should return a valid authorization header (sha256)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", ext="Bazinga!", mac="q1CwFoSHzPZSkbIvl0oYlD+91rBUEvFk763nMjMndj8="'); - done(); - }); - - it('should return a valid authorization header (no ext)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", mac="HTgtd0jPI6E4izx8e4OHdO36q00xFCU0FolNq3RiCYs="'); - done(); - }); - - it('should return an empty authorization header on missing options', function (done) { - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST').field; - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid credentials', function (done) { - - var credentials = { - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207 }).field; - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid algorithm', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, payload: 'something, anything!', ext: 'Bazinga!', timestamp: 1353809207 }).field; - expect(header).to.equal(''); - done(); - }); - }); - - describe('#authenticate', function () { - - it('should return false on invalid header', function (done) { - - var res = { - headers: { - 'server-authorization': 'Hawk mac="abc", bad="xyz"' - } - }; - - expect(Hawk.client.authenticate(res, {})).to.equal(false); - done(); - }); - - it('should return false on invalid mac', function (done) { - - var res = { - headers: { - 'content-type': 'text/plain', - 'server-authorization': 'Hawk mac="_IJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"' - } - }; - - var artifacts = { - method: 'POST', - host: 'example.com', - port: '8080', - resource: '/resource/4?filter=a', - ts: '1362336900', - nonce: 'eb5S_L', - hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=', - ext: 'some-app-data', - app: undefined, - dlg: undefined, - mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=', - id: '123456' - }; - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(false); - done(); - }); - - it('should return true on ignoring hash', function (done) { - - var res = { - headers: { - 'content-type': 'text/plain', - 'server-authorization': 'Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"' - } - }; - - var artifacts = { - method: 'POST', - host: 'example.com', - port: '8080', - resource: '/resource/4?filter=a', - ts: '1362336900', - nonce: 'eb5S_L', - hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=', - ext: 'some-app-data', - app: undefined, - dlg: undefined, - mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=', - id: '123456' - }; - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - - it('should fail on invalid WWW-Authenticate header format', function (done) { - - var header = 'Hawk ts="1362346425875", tsm="PhwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", x="Stale timestamp"'; - expect(Hawk.client.authenticate({ headers: { 'www-authenticate': header } }, {})).to.equal(false); - done(); - }); - - it('should fail on invalid WWW-Authenticate header format', function (done) { - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - var header = 'Hawk ts="1362346425875", tsm="hwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", error="Stale timestamp"'; - expect(Hawk.client.authenticate({ headers: { 'www-authenticate': header } }, credentials)).to.equal(false); - done(); - }); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/crypto.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/crypto.js deleted file mode 100755 index b62c2177..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/crypto.js +++ /dev/null @@ -1,86 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('Crypto', function () { - - describe('#generateNormalizedString', function () { - - it('should return a valid normalized string', function (done) { - - expect(Hawk.crypto.generateNormalizedString('header', { - credentials: { - key: 'dasdfasdf', - algorithm: 'sha256' - }, - ts: 1357747017, - nonce: 'k3k4j5', - method: 'GET', - resource: '/resource/something', - host: 'example.com', - port: 8080 - })).to.equal('hawk.1.header\n1357747017\nk3k4j5\nGET\n/resource/something\nexample.com\n8080\n\n\n'); - - done(); - }); - - it('should return a valid normalized string (ext)', function (done) { - - expect(Hawk.crypto.generateNormalizedString('header', { - credentials: { - key: 'dasdfasdf', - algorithm: 'sha256' - }, - ts: 1357747017, - nonce: 'k3k4j5', - method: 'GET', - resource: '/resource/something', - host: 'example.com', - port: 8080, - ext: 'this is some app data' - })).to.equal('hawk.1.header\n1357747017\nk3k4j5\nGET\n/resource/something\nexample.com\n8080\n\nthis is some app data\n'); - - done(); - }); - - it('should return a valid normalized string (payload + ext)', function (done) { - - expect(Hawk.crypto.generateNormalizedString('header', { - credentials: { - key: 'dasdfasdf', - algorithm: 'sha256' - }, - ts: 1357747017, - nonce: 'k3k4j5', - method: 'GET', - resource: '/resource/something', - host: 'example.com', - port: 8080, - hash: 'U4MKKSmiVxk37JCCrAVIjV/OhB3y+NdwoCr6RShbVkE=', - ext: 'this is some app data' - })).to.equal('hawk.1.header\n1357747017\nk3k4j5\nGET\n/resource/something\nexample.com\n8080\nU4MKKSmiVxk37JCCrAVIjV/OhB3y+NdwoCr6RShbVkE=\nthis is some app data\n'); - - done(); - }); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/index.js deleted file mode 100755 index ba837388..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/index.js +++ /dev/null @@ -1,316 +0,0 @@ -// Load modules - -var Url = require('url'); -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: (id === '1' ? 'sha1' : 'sha256'), - user: 'steve' - }; - - return callback(null, credentials); - }; - - it('should generate a header then successfully parse it (configuration)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header(Url.parse('http://example.com:8080/resource/4?filter=a'), req.method, { credentials: credentials, ext: 'some-app-data' }).field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (node request)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts, { payload: 'some reply', contentType: 'text/plain', ext: 'response-specific' }); - expect(res.headers['server-authorization']).to.exist; - - expect(Hawk.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (no server header options)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts); - expect(res.headers['server-authorization']).to.exist; - - expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header then fails to parse it (missing server header hash)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts); - expect(res.headers['server-authorization']).to.exist; - - expect(Hawk.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(false); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (with hash)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it then validate payload', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload('hola!', credentials, artifacts)).to.be.true; - expect(Hawk.server.authenticatePayload('hello!', credentials, artifacts)).to.be.false; - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (app)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(artifacts.app).to.equal('asd23ased'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (app, dlg)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased', dlg: '23434szr3q4d' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(artifacts.app).to.equal('asd23ased'); - expect(artifacts.dlg).to.equal('23434szr3q4d'); - done(); - }); - }); - }); - - it('should generate a header then fail authentication due to bad hash', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, { payload: 'byebye!' }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad payload hash'); - done(); - }); - }); - }); - - it('should generate a header for one resource then fail to authenticate another', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - req.url = '/something/else'; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(credentials).to.exist; - done(); - }); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/message.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/message.js deleted file mode 100755 index 04b91d41..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/message.js +++ /dev/null @@ -1,246 +0,0 @@ -// Load modules - -var Url = require('url'); -var Lab = require('lab'); -var Hoek = require('hoek'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: (id === '1' ? 'sha1' : 'sha256'), - user: 'steve' - }; - - return callback(null, credentials); - }; - - it('should generate an authorization then successfully parse it', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - }); - - it('should fail authorization on mismatching host', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example1.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Bad mac'); - done(); - }); - }); - }); - - it('should fail authorization on stale timestamp', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, { localtimeOffsetMsec: 100000 }, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Stale timestamp'); - done(); - }); - }); - }); - - it('should fail authorization on invalid authorization', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - delete auth.id; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid authorization'); - done(); - }); - }); - }); - - it('should fail authorization on bad hash', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message1', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Bad message hash'); - done(); - }); - }); - }); - - it('should fail authorization on nonce error', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, { nonceFunc: function (nonce, ts, callback) { callback (new Error('kaboom')); } }, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid nonce'); - done(); - }); - }); - }); - - it('should fail authorization on credentials error', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - var errFunc = function (id, callback) { - - callback(new Error('kablooey')); - }; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('kablooey'); - done(); - }); - }); - }); - - it('should fail authorization on missing credentials', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - var errFunc = function (id, callback) { - - callback(); - }; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown credentials'); - done(); - }); - }); - }); - - it('should fail authorization on invalid credentials', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - var errFunc = function (id, callback) { - - callback(null, {}); - }; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid credentials'); - done(); - }); - }); - }); - - it('should fail authorization on invalid credentials algorithm', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - var errFunc = function (id, callback) { - - callback(null, { key: '123', algorithm: '456' }); - }; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown algorithm'); - done(); - }); - }); - }); - - it('should fail on missing host', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message(null, 8080, 'some message', { credentials: credentials }); - expect(auth).to.not.exist; - done(); - }); - }); - - it('should fail on missing credentials', function (done) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', {}); - expect(auth).to.not.exist; - done(); - }); - - it('should fail on invalid algorithm', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var creds = Hoek.clone(credentials); - creds.algorithm = 'blah'; - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: creds }); - expect(auth).to.not.exist; - done(); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/readme.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/readme.js deleted file mode 100755 index f39e033d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/readme.js +++ /dev/null @@ -1,98 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hoek = require('hoek'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('README', function () { - - describe('core', function () { - - var credentials = { - id: 'dh37fgj492je', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' - }; - - var options = { - credentials: credentials, - timestamp: 1353832234, - nonce: 'j4h3g2', - ext: 'some-app-ext-data' - }; - - it('should generate a header protocol example', function (done) { - - var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', options).field; - - expect(header).to.equal('Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE="'); - done(); - }); - - it('should generate a normalized string protocol example', function (done) { - - var normalized = Hawk.crypto.generateNormalizedString('header', { - credentials: credentials, - ts: options.timestamp, - nonce: options.nonce, - method: 'GET', - resource: '/resource?a=1&b=2', - host: 'example.com', - port: 8000, - ext: options.ext - }); - - expect(normalized).to.equal('hawk.1.header\n1353832234\nj4h3g2\nGET\n/resource?a=1&b=2\nexample.com\n8000\n\nsome-app-ext-data\n'); - done(); - }); - - var payloadOptions = Hoek.clone(options); - payloadOptions.payload = 'Thank you for flying Hawk'; - payloadOptions.contentType = 'text/plain'; - - it('should generate a header protocol example (with payload)', function (done) { - - var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'POST', payloadOptions).field; - - expect(header).to.equal('Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", hash="Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=", ext="some-app-ext-data", mac="aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw="'); - done(); - }); - - it('should generate a normalized string protocol example (with payload)', function (done) { - - var normalized = Hawk.crypto.generateNormalizedString('header', { - credentials: credentials, - ts: options.timestamp, - nonce: options.nonce, - method: 'POST', - resource: '/resource?a=1&b=2', - host: 'example.com', - port: 8000, - hash: Hawk.crypto.calculatePayloadHash(payloadOptions.payload, credentials.algorithm, payloadOptions.contentType), - ext: options.ext - }); - - expect(normalized).to.equal('hawk.1.header\n1353832234\nj4h3g2\nPOST\n/resource?a=1&b=2\nexample.com\n8000\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\nsome-app-ext-data\n'); - done(); - }); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/server.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/server.js deleted file mode 100755 index 3e92427a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/server.js +++ /dev/null @@ -1,686 +0,0 @@ -// Load modules - -var Url = require('url'); -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('server', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: (id === '1' ? 'sha1' : 'sha256'), - user: 'steve' - }; - - return callback(null, credentials); - }; - - describe('#authenticate', function () { - - it('should parse a valid authentication header (sha1)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should parse a valid authentication header (sha256)', function (done) { - - var req = { - method: 'GET', - url: '/resource/1?b=1&a=2', - host: 'example.com', - port: 8000, - authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", mac="m8r1rHbXN6NgO+KIIhjO7sFRyd78RNGVUwehe8Cp2dU=", ext="some-app-data"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353832234000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should parse a valid authentication header (host override)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - host: 'example1.com:8080', - authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { host: 'example.com', localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should parse a valid authentication header (host port override)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - host: 'example1.com:80', - authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { host: 'example.com', port: 8080, localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should parse a valid authentication header (POST with payload)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123456", ts="1357926341", nonce="1AwuJD", hash="qAiXIVv+yjDATneWxZP2YCTa9aHRgQdnH9b3Wc+o3dg=", ext="some-app-data", mac="UeYcj5UoTVaAWXNvJfLVia7kU3VabxCqrccXP8sUGC4="' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1357926341000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should fail on missing hash', function (done) { - - var req = { - method: 'GET', - url: '/resource/1?b=1&a=2', - host: 'example.com', - port: 8000, - authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", mac="m8r1rHbXN6NgO+KIIhjO7sFRyd78RNGVUwehe8Cp2dU=", ext="some-app-data"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { payload: 'body', localtimeOffsetMsec: 1353832234000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing required payload hash'); - done(); - }); - }); - - it('should fail on a stale timestamp', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123456", ts="1362337299", nonce="UzmxSs", ext="some-app-data", mac="wnNUxchvvryMH2RxckTdZ/gY3ijzvccx4keVvELC61w="' - }; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Stale timestamp'); - var header = err.response.headers['WWW-Authenticate']; - var ts = header.match(/^Hawk ts\=\"(\d+)\"\, tsm\=\"([^\"]+)\"\, error=\"Stale timestamp\"$/); - var now = Hawk.utils.now(); - expect(parseInt(ts[1], 10) * 1000).to.be.within(now - 1000, now + 1000); - - var res = { - headers: { - 'www-authenticate': header - } - }; - - expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - }); - - it('should fail on a replay', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="bXx7a7p1h9QYQNZ8x7QhvDQym8ACgab4m3lVSFn4DBw=", ext="hello"' - }; - - var memoryCache = {}; - var options = { - localtimeOffsetMsec: 1353788437000 - Hawk.utils.now(), - nonceFunc: function (nonce, ts, callback) { - - if (memoryCache[nonce]) { - return callback(new Error()); - } - - memoryCache[nonce] = true; - return callback(); - } - }; - - Hawk.server.authenticate(req, credentialsFunc, options, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - - Hawk.server.authenticate(req, credentialsFunc, options, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid nonce'); - done(); - }); - }); - }); - - it('should fail on an invalid authentication header: wrong scheme', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Basic asdasdasdasd' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.not.exist; - done(); - }); - }); - - it('should fail on an invalid authentication header: no scheme', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: '!@#' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid header syntax'); - done(); - }); - }); - - it('should fail on an missing authorization header', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.isMissing).to.equal(true); - done(); - }); - }); - - it('should fail on an missing host header', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid Host header'); - done(); - }); - }); - - it('should fail on an missing authorization attribute (id)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing attributes'); - done(); - }); - }); - - it('should fail on an missing authorization attribute (ts)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing attributes'); - done(); - }); - }); - - it('should fail on an missing authorization attribute (nonce)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing attributes'); - done(); - }); - }); - - it('should fail on an missing authorization attribute (mac)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing attributes'); - done(); - }); - }); - - it('should fail on an unknown authorization attribute', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", x="3", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Unknown attribute: x'); - done(); - }); - }); - - it('should fail on an bad authorization header format', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123\\", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad header format'); - done(); - }); - }); - - it('should fail on an bad authorization attribute value', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="\t", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad attribute value: id'); - done(); - }); - }); - - it('should fail on an empty authorization attribute value', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad attribute value: id'); - done(); - }); - }); - - it('should fail on duplicated authorization attribute key', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", id="456", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Duplicate attribute: id'); - done(); - }); - }); - - it('should fail on an invalid authorization header format', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid header syntax'); - done(); - }); - }); - - it('should fail on an bad host header (missing host)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - host: ':8080', - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid Host header'); - done(); - }); - }); - - it('should fail on an bad host header (pad port)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:something', - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid Host header'); - done(); - }); - }); - - it('should fail on credentialsFunc error', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - return callback(new Error('Unknown user')); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown user'); - done(); - }); - }); - - it('should fail on missing credentials', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - return callback(null, null); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Unknown credentials'); - done(); - }); - }); - - it('should fail on invalid credentials', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - user: 'steve' - }; - - return callback(null, credentials); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid credentials'); - expect(err.response.payload.message).to.equal('An internal server error occurred'); - done(); - }); - }); - - it('should fail on unknown credentials algorithm', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'hmac-sha-0', - user: 'steve' - }; - - return callback(null, credentials); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown algorithm'); - expect(err.response.payload.message).to.equal('An internal server error occurred'); - done(); - }); - }); - - it('should fail on unknown bad mac', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcU4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - return callback(null, credentials); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad mac'); - done(); - }); - }); - }); - - describe('#header', function () { - - it('should return an empty authorization header on missing options', function (done) { - - var header = Hawk.server.header(); - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on missing credentials', function (done) { - - var header = Hawk.server.header(null, {}); - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid credentials', function (done) { - - var credentials = { - key: '2983d45yun89q' - }; - - var header = Hawk.server.header(credentials); - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid algorithm', function (done) { - - var artifacts = { - id: '123456' - }; - - var credentials = { - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var header = Hawk.server.header(credentials, artifacts); - expect(header).to.equal(''); - done(); - }); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/uri.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/uri.js deleted file mode 100755 index 44ffd7fb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/uri.js +++ /dev/null @@ -1,456 +0,0 @@ -// Load modules - -var Http = require('http'); -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('Uri', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - return callback(null, credentials); - }; - - it('should generate a bewit then successfully authenticate it', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?a=1&b=2', - host: 'example.com', - port: 80 - }; - - credentialsFunc('123456', function (err, credentials) { - - var bewit = Hawk.uri.getBewit('http://example.com/resource/4?a=1&b=2', { credentials: credentials, ttlSec: 60 * 60 * 24 * 365 * 100, ext: 'some-app-data' }); - req.url += '&bewit=' + bewit; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(attributes.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a bewit then successfully authenticate it (no ext)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?a=1&b=2', - host: 'example.com', - port: 80 - }; - - credentialsFunc('123456', function (err, credentials) { - - var bewit = Hawk.uri.getBewit('http://example.com/resource/4?a=1&b=2', { credentials: credentials, ttlSec: 60 * 60 * 24 * 365 * 100 }); - req.url += '&bewit=' + bewit; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - }); - - it('should successfully authenticate a request (last param)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?a=1&b=2&bewit=MTIzNDU2XDQ1MTE0ODQ2MjFcMzFjMmNkbUJFd1NJRVZDOVkva1NFb2c3d3YrdEVNWjZ3RXNmOGNHU2FXQT1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(attributes.ext).to.equal('some-app-data'); - done(); - }); - }); - - it('should successfully authenticate a request (first param)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MTE0ODQ2MjFcMzFjMmNkbUJFd1NJRVZDOVkva1NFb2c3d3YrdEVNWjZ3RXNmOGNHU2FXQT1cc29tZS1hcHAtZGF0YQ&a=1&b=2', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(attributes.ext).to.equal('some-app-data'); - done(); - }); - }); - - it('should successfully authenticate a request (only param)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MTE0ODQ2NDFcZm1CdkNWT3MvcElOTUUxSTIwbWhrejQ3UnBwTmo4Y1VrSHpQd3Q5OXJ1cz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(attributes.ext).to.equal('some-app-data'); - done(); - }); - }); - - it('should fail on multiple authentication', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MTE0ODQ2NDFcZm1CdkNWT3MvcElOTUUxSTIwbWhrejQ3UnBwTmo4Y1VrSHpQd3Q5OXJ1cz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080, - authorization: 'Basic asdasdasdasd' - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Multiple authentications'); - done(); - }); - }); - - it('should fail on method other than GET', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - var exp = Math.floor(Hawk.utils.now() / 1000) + 60; - var ext = 'some-app-data'; - var mac = Hawk.crypto.calculateMac('bewit', credentials, { - timestamp: exp, - nonce: '', - method: req.method, - resource: req.url, - host: req.host, - port: req.port, - ext: ext - }); - - var bewit = credentials.id + '\\' + exp + '\\' + mac + '\\' + ext; - - req.url += '&bewit=' + Hawk.utils.base64urlEncode(bewit); - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid method'); - done(); - }); - }); - }); - - it('should fail on invalid host header', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - headers: { - host: 'example.com:something' - } - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid Host header'); - done(); - }); - }); - - it('should fail on empty bewit', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Empty bewit'); - expect(err.isMissing).to.not.exist; - done(); - }); - }); - - it('should fail on invalid bewit', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=*', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid bewit encoding'); - expect(err.isMissing).to.not.exist; - done(); - }); - }); - - it('should fail on missing bewit', function (done) { - - var req = { - method: 'GET', - url: '/resource/4', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.not.exist; - expect(err.isMissing).to.equal(true); - done(); - }); - }); - - it('should fail on invalid bewit structure', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=abc', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid bewit structure'); - done(); - }); - }); - - it('should fail on empty bewit attribute', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=YVxcY1xk', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing bewit attributes'); - done(); - }); - }); - - it('should fail on expired access', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?a=1&b=2&bewit=MTIzNDU2XDEzNTY0MTg1ODNcWk1wZlMwWU5KNHV0WHpOMmRucTRydEk3NXNXTjFjeWVITTcrL0tNZFdVQT1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Access expired'); - done(); - }); - }); - - it('should fail on credentials function error', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(Hawk.error.badRequest('Boom')); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Boom'); - done(); - }); - }); - - it('should fail on null credentials function response', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(null, null); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Unknown credentials'); - done(); - }); - }); - - it('should fail on invalid credentials function response', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(null, {}); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid credentials'); - done(); - }); - }); - - it('should fail on invalid credentials function response (unknown algorithm)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(null, { key: 'xxx', algorithm: 'xxx' }); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown algorithm'); - done(); - }); - }); - - it('should fail on expired access', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(null, { key: 'xxx', algorithm: 'sha256' }); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad mac'); - done(); - }); - }); - }); - - describe('#getBewit', function () { - - it('should return a valid bewit value', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var bewit = Hawk.uri.getBewit('https://example.com/somewhere/over/the/rainbow', { credentials: credentials, ttlSec: 300, localtimeOffsetMsec: 1356420407232 - Hawk.utils.now(), ext: 'xandyandz' }); - expect(bewit).to.equal('MTIzNDU2XDEzNTY0MjA3MDdca3NjeHdOUjJ0SnBQMVQxekRMTlBiQjVVaUtJVTl0T1NKWFRVZEc3WDloOD1ceGFuZHlhbmR6'); - done(); - }); - - it('should return an empty bewit on invalid credentials', function (done) { - - var credentials = { - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var bewit = Hawk.uri.getBewit('https://example.com/somewhere/over/the/rainbow', { credentials: credentials, ttlSec: 3000, ext: 'xandyandz' }); - expect(bewit).to.equal(''); - done(); - }); - - it('should return an empty bewit on invalid algorithm', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var bewit = Hawk.uri.getBewit('https://example.com/somewhere/over/the/rainbow', { credentials: credentials, ttlSec: 300, ext: 'xandyandz' }); - expect(bewit).to.equal(''); - done(); - }); - - it('should return an empty bewit on missing options', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var bewit = Hawk.uri.getBewit('https://example.com/somewhere/over/the/rainbow'); - expect(bewit).to.equal(''); - done(); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/utils.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/utils.js deleted file mode 100755 index 0f5fef77..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/utils.js +++ /dev/null @@ -1,120 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hawk = require('../lib'); -var Package = require('../package.json'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('Utils', function () { - - describe('#parseHost', function () { - - it('returns port 80 for non tls node request', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com', - 'content-type': 'text/plain;x=y' - } - }; - - expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(80); - done(); - }); - - it('returns port 443 for non tls node request', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com', - 'content-type': 'text/plain;x=y' - }, - connection: { - encrypted: true - } - }; - - expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443); - done(); - }); - - it('returns port 443 for non tls node request (IPv6)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: '[123:123:123]', - 'content-type': 'text/plain;x=y' - }, - connection: { - encrypted: true - } - }; - - expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443); - done(); - }); - - it('parses IPv6 headers', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: '[123:123:123]:8000', - 'content-type': 'text/plain;x=y' - }, - connection: { - encrypted: true - } - }; - - var host = Hawk.utils.parseHost(req, 'Host'); - expect(host.port).to.equal('8000'); - expect(host.name).to.equal('[123:123:123]'); - done(); - }); - }); - - describe('#version', function () { - - it('returns the correct package version number', function (done) { - - expect(Hawk.utils.version()).to.equal(Package.version); - done(); - }); - }); - - describe('#unauthorized', function () { - - it('returns a hawk 401', function (done) { - - expect(Hawk.utils.unauthorized('kaboom').response.headers['WWW-Authenticate']).to.equal('Hawk error="kaboom"'); - done(); - }); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.dir-locals.el b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.dir-locals.el deleted file mode 100644 index 3bc9235f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.dir-locals.el +++ /dev/null @@ -1,6 +0,0 @@ -((nil . ((indent-tabs-mode . nil) - (tab-width . 8) - (fill-column . 80))) - (js-mode . ((js-indent-level . 2) - (indent-tabs-mode . nil) - ))) \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.npmignore deleted file mode 100644 index c143fb3a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -.gitmodules -deps -docs -Makefile -node_modules -test -tools \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/LICENSE deleted file mode 100644 index f6d947d2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/README.md deleted file mode 100644 index 0c707149..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# node-http-signature - -node-http-signature is a node.js library that has client and server components -for Joyent's [HTTP Signature Scheme](http_signing.md). - -## Usage - -Note the example below signs a request with the same key/cert used to start an -HTTP server. This is almost certainly not what you actaully want, but is just -used to illustrate the API calls; you will need to provide your own key -management in addition to this library. - -### Client - - var fs = require('fs'); - var https = require('https'); - var httpSignature = require('http-signature'); - - var key = fs.readFileSync('./key.pem', 'ascii'); - - var options = { - host: 'localhost', - port: 8443, - path: '/', - method: 'GET', - headers: {} - }; - - // Adds a 'Date' header in, signs it, and adds the - // 'Authorization' header in. - var req = https.request(options, function(res) { - console.log(res.statusCode); - }); - - - httpSignature.sign(req, { - key: key, - keyId: './cert.pem' - }); - - req.end(); - -### Server - - var fs = require('fs'); - var https = require('https'); - var httpSignature = require('http-signature'); - - var options = { - key: fs.readFileSync('./key.pem'), - cert: fs.readFileSync('./cert.pem') - }; - - https.createServer(options, function (req, res) { - var rc = 200; - var parsed = httpSignature.parseRequest(req); - var pub = fs.readFileSync(parsed.keyId, 'ascii'); - if (!httpSignature.verifySignature(parsed, pub)) - rc = 401; - - res.writeHead(rc); - res.end(); - }).listen(8443); - -## Installation - - npm install http-signature - -## License - -MIT. - -## Bugs - -See <https://github.com/joyent/node-http-signature/issues>. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/http_signing.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/http_signing.md deleted file mode 100644 index ba7321da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/http_signing.md +++ /dev/null @@ -1,296 +0,0 @@ -# Abstract - -This document describes a way to add origin authentication, message integrity, -and replay resistance to HTTP REST requests. It is intended to be used over -the HTTPS protocol. - -# Copyright Notice - -Copyright (c) 2011 Joyent, Inc. and the persons identified as document authors. -All rights reserved. - -Code Components extracted from this document must include MIT License text. - -# Introduction - -This protocol is intended to provide a standard way for clients to sign HTTP -requests. RFC2617 (HTTP Authentication) defines Basic and Digest authentication -mechanisms, and RFC5246 (TLS 1.2) defines client-auth, both of which are widely -employed on the Internet today. However, it is common place that the burdens of -PKI prevent web service operators from deploying that methodoloy, and so many -fall back to Basic authentication, which has poor security characteristics. - -Additionally, OAuth provides a fully-specified alternative for authorization -of web service requests, but is not (always) ideal for machine to machine -communication, as the key acquisition steps (generally) imply a fixed -infrastructure that may not make sense to a service provider (e.g., symmetric -keys). - -Several web service providers have invented their own schemes for signing -HTTP requests, but to date, none have been placed in the public domain as a -standard. This document serves that purpose. There are no techniques in this -proposal that are novel beyond previous art, however, this aims to be a simple -mechanism for signing these requests. - -# Signature Authentication Scheme - -The "signature" authentication scheme is based on the model that the client must -authenticate itself with a digital signature produced by either a private -asymmetric key (e.g., RSA) or a shared symmetric key (e.g., HMAC). The scheme -is parameterized enough such that it is not bound to any particular key type or -signing algorithm. However, it does explicitly assume that clients can send an -HTTP `Date` header. - -## Authorization Header - -The client is expected to send an Authorization header (as defined in RFC 2617) -with the following parameterization: - - credentials := "Signature" params - params := 1#(keyId | algorithm | [headers] | [ext] | signature) - digitalSignature := plain-string - - keyId := "keyId" "=" <"> plain-string <"> - algorithm := "algorithm" "=" <"> plain-string <"> - headers := "headers" "=" <"> 1#headers-value <"> - ext := "ext" "=" <"> plain-string <"> - signature := "signature" "=" <"> plain-string <"> - - headers-value := plain-string - plain-string = 1*( %x20-21 / %x23-5B / %x5D-7E ) - -### Signature Parameters - -#### keyId - -REQUIRED. The `keyId` field is an opaque string that the server can use to look -up the component they need to validate the signature. It could be an SSH key -fingerprint, an LDAP DN, etc. Management of keys and assignment of `keyId` is -out of scope for this document. - -#### algorithm - -REQUIRED. The `algorithm` parameter is used if the client and server agree on a -non-standard digital signature algorithm. The full list of supported signature -mechanisms is listed below. - -#### headers - -OPTIONAL. The `headers` parameter is used to specify the list of HTTP headers -used to sign the request. If specified, it should be a quoted list of HTTP -header names, separated by a single space character. By default, only one -HTTP header is signed, which is the `Date` header. Note that the list MUST be -specified in the order the values are concatenated together during signing. To -include the HTTP request line in the signature calculation, use the special -`request-line` value. While this is overloading the definition of `headers` in -HTTP linguism, the request-line is defined in RFC 2616, and as the outlier from -headers in useful signature calculation, it is deemed simpler to simply use -`request-line` than to add a separate parameter for it. - -#### extensions - -OPTIONAL. The `extensions` parameter is used to include additional information -which is covered by the request. The content and format of the string is out of -scope for this document, and expected to be specified by implementors. - -#### signature - -REQUIRED. The `signature` parameter is a `Base64` encoded digital signature -generated by the client. The client uses the `algorithm` and `headers` request -parameters to form a canonicalized `signing string`. This `signing string` is -then signed with the key associated with `keyId` and the algorithm -corresponding to `algorithm`. The `signature` parameter is then set to the -`Base64` encoding of the signature. - -### Signing String Composition - -In order to generate the string that is signed with a key, the client MUST take -the values of each HTTP header specified by `headers` in the order they appear. - -1. If the header name is not `request-line` then append the lowercased header - name followed with an ASCII colon `:` and an ASCII space ` `. -2. If the header name is `request-line` then appened the HTTP request line, - otherwise append the header value. -3. If value is not the last value then append an ASCII newline `\n`. The string - MUST NOT include a trailing ASCII newline. - -# Example Requests - -All requests refer to the following request (body ommitted): - - POST /foo HTTP/1.1 - Host: example.org - Date: Tue, 07 Jun 2011 20:51:35 GMT - Content-Type: application/json - Content-MD5: h0auK8hnYJKmHTLhKtMTkQ== - Content-Length: 123 - -The "rsa-key-1" keyId refers to a private key known to the client and a public -key known to the server. The "hmac-key-1" keyId refers to key known to the -client and server. - -## Default parameterization - -The authorization header and signature would be generated as: - - Authorization: Signature keyId="rsa-key-1",algorithm="rsa-sha256",signature="Base64(RSA-SHA256(signing string))" - -The client would compose the signing string as: - - date: Tue, 07 Jun 2011 20:51:35 GMT - -## Header List - -The authorization header and signature would be generated as: - - Authorization: Signature keyId="rsa-key-1",algorithm="rsa-sha256",headers="request-line date content-type content-md5",signature="Base64(RSA-SHA256(signing string))" - -The client would compose the signing string as (`+ "\n"` inserted for -readability): - - POST /foo HTTP/1.1 + "\n" - date: Tue, 07 Jun 2011 20:51:35 GMT + "\n" - content-type: application/json + "\n" - content-md5: h0auK8hnYJKmHTLhKtMTkQ== - -## Algorithm - -The authorization header and signature would be generated as: - - Authorization: Signature keyId="hmac-key-1",algorithm="hmac-sha1",signature="Base64(HMAC-SHA1(signing string))" - -The client would compose the signing string as: - - date: Tue, 07 Jun 2011 20:51:35 GMT - -# Signing Algorithms - -Currently supported algorithm names are: - -* rsa-sha1 -* rsa-sha256 -* rsa-sha512 -* dsa-sha1 -* hmac-sha1 -* hmac-sha256 -* hmac-sha512 - -# Security Considerations - -## Default Parameters - -Note the default parameterization of the `Signature` scheme is only safe if all -requests are carried over a secure transport (i.e., TLS). Sending the default -scheme over a non-secure transport will leave the request vulnerable to -spoofing, tampering, replay/repudiaton, and integrity violations (if using the -STRIDE threat-modeling methodology). - -## Insecure Transports - -If sending the request over plain HTTP, service providers SHOULD require clients -to sign ALL HTTP headers, and the `request-line`. Additionally, service -providers SHOULD require `Content-MD5` calculations to be performed to ensure -against any tampering from clients. - -## Nonces - -Nonces are out of scope for this document simply because many service providers -fail to implement them correctly, or do not adopt security specfiications -because of the infrastructure complexity. Given the `header` parameterization, -a service provider is fully enabled to add nonce semantics into this scheme by -using something like an `x-request-nonce` header, and ensuring it is signed -with the `Date` header. - -## Clock Skew - -As the default scheme is to sign the `Date` header, service providers SHOULD -protect against logged replay attacks by enforcing a clock skew. The server -SHOULD be synchronized with NTP, and the recommendation in this specification -is to allow 300s of clock skew (in either direction). - -## Required Headers to Sign - -It is out of scope for this document to dictate what headers a service provider -will want to enforce, but service providers SHOULD at minimum include the -`Date` header. - -# References - -## Normative References - -* [RFC2616] Hypertext Transfer Protocol -- HTTP/1.1 -* [RFC2617] HTTP Authentication: Basic and Digest Access Authentication -* [RFC5246] The Transport Layer Security (TLS) Protocol Version 1.2 - -## Informative References - - Name: Mark Cavage (editor) - Company: Joyent, Inc. - Email: mark.cavage@joyent.com - URI: http://www.joyent.com - -# Appendix A - Test Values - -The following test data uses the RSA (2048b) keys, which we will refer -to as `keyId=Test` in the following samples: - - -----BEGIN PUBLIC KEY----- - MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3 - 6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6 - Z4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw - oYi+1hqp1fIekaxsyQIDAQAB - -----END PUBLIC KEY----- - - -----BEGIN RSA PRIVATE KEY----- - MIICXgIBAAKBgQDCFENGw33yGihy92pDjZQhl0C36rPJj+CvfSC8+q28hxA161QF - NUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6Z4UMR7EOcpfdUE9Hf3m/hs+F - UR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJwoYi+1hqp1fIekaxsyQIDAQAB - AoGBAJR8ZkCUvx5kzv+utdl7T5MnordT1TvoXXJGXK7ZZ+UuvMNUCdN2QPc4sBiA - QWvLw1cSKt5DsKZ8UETpYPy8pPYnnDEz2dDYiaew9+xEpubyeW2oH4Zx71wqBtOK - kqwrXa/pzdpiucRRjk6vE6YY7EBBs/g7uanVpGibOVAEsqH1AkEA7DkjVH28WDUg - f1nqvfn2Kj6CT7nIcE3jGJsZZ7zlZmBmHFDONMLUrXR/Zm3pR5m0tCmBqa5RK95u - 412jt1dPIwJBANJT3v8pnkth48bQo/fKel6uEYyboRtA5/uHuHkZ6FQF7OUkGogc - mSJluOdc5t6hI1VsLn0QZEjQZMEOWr+wKSMCQQCC4kXJEsHAve77oP6HtG/IiEn7 - kpyUXRNvFsDE0czpJJBvL/aRFUJxuRK91jhjC68sA7NsKMGg5OXb5I5Jj36xAkEA - gIT7aFOYBFwGgQAQkWNKLvySgKbAZRTeLBacpHMuQdl1DfdntvAyqpAZ0lY0RKmW - G6aFKaqQfOXKCyWoUiVknQJAXrlgySFci/2ueKlIE1QqIiLSZ8V8OlpFLRnb1pzI - 7U1yQXnTAEFYM560yJlzUpOb1V4cScGd365tiSMvxLOvTA== - -----END RSA PRIVATE KEY----- - -And all examples use this request: - - POST /foo?param=value&pet=dog HTTP/1.1 - Host: example.com - Date: Thu, 05 Jan 2012 21:31:40 GMT - Content-Type: application/json - Content-MD5: Sd/dVLAcvNLSq16eXua5uQ== - Content-Length: 18 - - {"hello": "world"} - -### Default - -The string to sign would be: - - date: Thu, 05 Jan 2012 21:31:40 GMT - -The Authorization header would be: - - Authorization: Signature keyId="Test",algorithm="rsa-sha256",signature="JldXnt8W9t643M2Sce10gqCh/+E7QIYLiI+bSjnFBGCti7s+mPPvOjVb72sbd1FjeOUwPTDpKbrQQORrm+xBYfAwCxF3LBSSzORvyJ5nRFCFxfJ3nlQD6Kdxhw8wrVZX5nSem4A/W3C8qH5uhFTRwF4ruRjh+ENHWuovPgO/HGQ=" - -### All Headers - -Parameterized to include all headers, the string to sign would be (`+ "\n"` -inserted for readability): - - POST /foo?param=value&pet=dog HTTP/1.1 + "\n" - host: example.com + "\n" - date: Thu, 05 Jan 2012 21:31:40 GMT + "\n" - content-type: application/json + "\n" - content-md5: Sd/dVLAcvNLSq16eXua5uQ== + "\n" - content-length: 18 - -The Authorization header would be: - - Authorization: Signature keyId="Test",algorithm="rsa-sha256",headers="request-line host date content-type content-md5 content-length",signature="Gm7W/r+e90REDpWytALMrft4MqZxCmslOTOvwJX17ViEBA5E65QqvWI0vIH3l/vSsGiaMVmuUgzYsJLYMLcm5dGrv1+a+0fCoUdVKPZWHyImQEqpLkopVwqEH67LVECFBqFTAKlQgBn676zrfXQbb+b/VebAsNUtvQMe6cTjnDY=" - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/index.js deleted file mode 100644 index 3ac70b77..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/index.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2011 Joyent, Inc. All rights reserved. - -var parser = require('./parser'); -var signer = require('./signer'); -var verify = require('./verify'); -var util = require('./util'); - - - -///--- API - -module.exports = { - - parse: parser.parseRequest, - parseRequest: parser.parseRequest, - - sign: signer.signRequest, - signRequest: signer.signRequest, - - sshKeyToPEM: util.sshKeyToPEM, - sshKeyFingerprint: util.fingerprint, - - verify: verify.verifySignature, - verifySignature: verify.verifySignature -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/parser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/parser.js deleted file mode 100644 index fd9ac102..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/parser.js +++ /dev/null @@ -1,304 +0,0 @@ -// Copyright 2012 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var util = require('util'); - - - -///--- Globals - -var Algorithms = { - 'rsa-sha1': true, - 'rsa-sha256': true, - 'rsa-sha512': true, - 'dsa-sha1': true, - 'hmac-sha1': true, - 'hmac-sha256': true, - 'hmac-sha512': true -}; - -var State = { - New: 0, - Params: 1 -}; - -var ParamsState = { - Name: 0, - Quote: 1, - Value: 2, - Comma: 3 -}; - - - -///--- Specific Errors - -function HttpSignatureError(message, caller) { - if (Error.captureStackTrace) - Error.captureStackTrace(this, caller || HttpSignatureError); - - this.message = message; - this.name = caller.name; -} -util.inherits(HttpSignatureError, Error); - -function ExpiredRequestError(message) { - HttpSignatureError.call(this, message, ExpiredRequestError); -} -util.inherits(ExpiredRequestError, HttpSignatureError); - - -function InvalidHeaderError(message) { - HttpSignatureError.call(this, message, InvalidHeaderError); -} -util.inherits(InvalidHeaderError, HttpSignatureError); - - -function InvalidParamsError(message) { - HttpSignatureError.call(this, message, InvalidParamsError); -} -util.inherits(InvalidParamsError, HttpSignatureError); - - -function MissingHeaderError(message) { - HttpSignatureError.call(this, message, MissingHeaderError); -} -util.inherits(MissingHeaderError, HttpSignatureError); - - - -///--- Exported API - -module.exports = { - - /** - * Parses the 'Authorization' header out of an http.ServerRequest object. - * - * Note that this API will fully validate the Authorization header, and throw - * on any error. It will not however check the signature, or the keyId format - * as those are specific to your environment. You can use the options object - * to pass in extra constraints. - * - * As a response object you can expect this: - * - * { - * "scheme": "Signature", - * "params": { - * "keyId": "foo", - * "algorithm": "rsa-sha256", - * "headers": [ - * "date" or "x-date", - * "content-md5" - * ], - * "signature": "base64" - * }, - * "signingString": "ready to be passed to crypto.verify()" - * } - * - * @param {Object} request an http.ServerRequest. - * @param {Object} options an optional options object with: - * - clockSkew: allowed clock skew in seconds (default 300). - * - headers: required header names (def: date or x-date) - * - algorithms: algorithms to support (default: all). - * @return {Object} parsed out object (see above). - * @throws {TypeError} on invalid input. - * @throws {InvalidHeaderError} on an invalid Authorization header error. - * @throws {InvalidParamsError} if the params in the scheme are invalid. - * @throws {MissingHeaderError} if the params indicate a header not present, - * either in the request headers from the params, - * or not in the params from a required header - * in options. - * @throws {ExpiredRequestError} if the value of date or x-date exceeds skew. - */ - parseRequest: function parseRequest(request, options) { - assert.object(request, 'request'); - assert.object(request.headers, 'request.headers'); - if (options === undefined) { - options = {}; - } - if (options.headers === undefined) { - options.headers = [request.headers['x-date'] ? 'x-date' : 'date']; - } - assert.object(options, 'options'); - assert.arrayOfString(options.headers, 'options.headers'); - assert.optionalNumber(options.clockSkew, 'options.clockSkew'); - - if (!request.headers.authorization) - throw new MissingHeaderError('no authorization header present in ' + - 'the request'); - - options.clockSkew = options.clockSkew || 300; - - - var i = 0; - var state = State.New; - var substate = ParamsState.Name; - var tmpName = ''; - var tmpValue = ''; - - var parsed = { - scheme: '', - params: {}, - signingString: '', - - get algorithm() { - return this.params.algorithm.toUpperCase(); - }, - - get keyId() { - return this.params.keyId; - } - - }; - - var authz = request.headers.authorization; - for (i = 0; i < authz.length; i++) { - var c = authz.charAt(i); - - switch (Number(state)) { - - case State.New: - if (c !== ' ') parsed.scheme += c; - else state = State.Params; - break; - - case State.Params: - switch (Number(substate)) { - - case ParamsState.Name: - var code = c.charCodeAt(0); - // restricted name of A-Z / a-z - if ((code >= 0x41 && code <= 0x5a) || // A-Z - (code >= 0x61 && code <= 0x7a)) { // a-z - tmpName += c; - } else if (c === '=') { - if (tmpName.length === 0) - throw new InvalidHeaderError('bad param format'); - substate = ParamsState.Quote; - } else { - throw new InvalidHeaderError('bad param format'); - } - break; - - case ParamsState.Quote: - if (c === '"') { - tmpValue = ''; - substate = ParamsState.Value; - } else { - throw new InvalidHeaderError('bad param format'); - } - break; - - case ParamsState.Value: - if (c === '"') { - parsed.params[tmpName] = tmpValue; - substate = ParamsState.Comma; - } else { - tmpValue += c; - } - break; - - case ParamsState.Comma: - if (c === ',') { - tmpName = ''; - substate = ParamsState.Name; - } else { - throw new InvalidHeaderError('bad param format'); - } - break; - - default: - throw new Error('Invalid substate'); - } - break; - - default: - throw new Error('Invalid substate'); - } - - } - - if (!parsed.params.headers || parsed.params.headers === '') { - if (request.headers['x-date']) { - parsed.params.headers = ['x-date']; - } else { - parsed.params.headers = ['date']; - } - } else { - parsed.params.headers = parsed.params.headers.split(' '); - } - - // Minimally validate the parsed object - if (!parsed.scheme || parsed.scheme !== 'Signature') - throw new InvalidHeaderError('scheme was not "Signature"'); - - if (!parsed.params.keyId) - throw new InvalidHeaderError('keyId was not specified'); - - if (!parsed.params.algorithm) - throw new InvalidHeaderError('algorithm was not specified'); - - if (!parsed.params.signature) - throw new InvalidHeaderError('signature was not specified'); - - // Check the algorithm against the official list - parsed.params.algorithm = parsed.params.algorithm.toLowerCase(); - if (!Algorithms[parsed.params.algorithm]) - throw new InvalidParamsError(parsed.params.algorithm + - ' is not supported'); - - // Build the signingString - for (i = 0; i < parsed.params.headers.length; i++) { - var h = parsed.params.headers[i].toLowerCase(); - parsed.params.headers[i] = h; - - if (h !== 'request-line') { - var value = request.headers[h]; - if (!value) - throw new MissingHeaderError(h + ' was not in the request'); - parsed.signingString += h + ': ' + value; - } else { - parsed.signingString += - request.method + ' ' + request.url + ' HTTP/' + request.httpVersion; - } - - if ((i + 1) < parsed.params.headers.length) - parsed.signingString += '\n'; - } - - // Check against the constraints - var date; - if (request.headers.date || request.headers['x-date']) { - if (request.headers['x-date']) { - date = new Date(request.headers['x-date']); - } else { - date = new Date(request.headers.date); - } - var now = new Date(); - var skew = Math.abs(now.getTime() - date.getTime()); - - if (skew > options.clockSkew * 1000) { - throw new ExpiredRequestError('clock skew of ' + - (skew / 1000) + - 's was greater than ' + - options.clockSkew + 's'); - } - } - - options.headers.forEach(function (hdr) { - // Remember that we already checked any headers in the params - // were in the request, so if this passes we're good. - if (parsed.params.headers.indexOf(hdr) < 0) - throw new MissingHeaderError(hdr + ' was not a signed header'); - }); - - if (options.algorithms) { - if (options.algorithms.indexOf(parsed.params.algorithm) === -1) - throw new InvalidParamsError(parsed.params.algorithm + - ' is not a supported algorithm'); - } - - return parsed; - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/signer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/signer.js deleted file mode 100644 index 8095f0d1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/signer.js +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2012 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var crypto = require('crypto'); -var http = require('http'); - -var sprintf = require('util').format; - - - -///--- Globals - -var Algorithms = { - 'rsa-sha1': true, - 'rsa-sha256': true, - 'rsa-sha512': true, - 'dsa-sha1': true, - 'hmac-sha1': true, - 'hmac-sha256': true, - 'hmac-sha512': true -}; - -var Authorization = - 'Signature keyId="%s",algorithm="%s",headers="%s",signature="%s"'; - - - -///--- Specific Errors - -function MissingHeaderError(message) { - this.name = 'MissingHeaderError'; - this.message = message; - this.stack = (new Error()).stack; -} -MissingHeaderError.prototype = new Error(); - - -function InvalidAlgorithmError(message) { - this.name = 'InvalidAlgorithmError'; - this.message = message; - this.stack = (new Error()).stack; -} -InvalidAlgorithmError.prototype = new Error(); - - - -///--- Internal Functions - -function _pad(val) { - if (parseInt(val, 10) < 10) { - val = '0' + val; - } - return val; -} - - -function _rfc1123() { - var date = new Date(); - - var months = ['Jan', - 'Feb', - 'Mar', - 'Apr', - 'May', - 'Jun', - 'Jul', - 'Aug', - 'Sep', - 'Oct', - 'Nov', - 'Dec']; - var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; - return days[date.getUTCDay()] + ', ' + - _pad(date.getUTCDate()) + ' ' + - months[date.getUTCMonth()] + ' ' + - date.getUTCFullYear() + ' ' + - _pad(date.getUTCHours()) + ':' + - _pad(date.getUTCMinutes()) + ':' + - _pad(date.getUTCSeconds()) + - ' GMT'; -} - - - -///--- Exported API - -module.exports = { - - /** - * Adds an 'Authorization' header to an http.ClientRequest object. - * - * Note that this API will add a Date header if it's not already set. Any - * other headers in the options.headers array MUST be present, or this - * will throw. - * - * You shouldn't need to check the return type; it's just there if you want - * to be pedantic. - * - * @param {Object} request an instance of http.ClientRequest. - * @param {Object} options signing parameters object: - * - {String} keyId required. - * - {String} key required (either a PEM or HMAC key). - * - {Array} headers optional; defaults to ['date']. - * - {String} algorithm optional; defaults to 'rsa-sha256'. - * - {String} httpVersion optional; defaults to '1.1'. - * @return {Boolean} true if Authorization (and optionally Date) were added. - * @throws {TypeError} on bad parameter types (input). - * @throws {InvalidAlgorithmError} if algorithm was bad. - * @throws {MissingHeaderError} if a header to be signed was specified but - * was not present. - */ - signRequest: function signRequest(request, options) { - assert.object(request, 'request'); - assert.object(options, 'options'); - assert.optionalString(options.algorithm, 'options.algorithm'); - assert.string(options.keyId, 'options.keyId'); - assert.optionalArrayOfString(options.headers, 'options.headers'); - assert.optionalString(options.httpVersion, 'options.httpVersion'); - - if (!request.getHeader('Date')) - request.setHeader('Date', _rfc1123()); - if (!options.headers) - options.headers = ['date']; - if (!options.algorithm) - options.algorithm = 'rsa-sha256'; - if (!options.httpVersion) - options.httpVersion = '1.1'; - - options.algorithm = options.algorithm.toLowerCase(); - - if (!Algorithms[options.algorithm]) - throw new InvalidAlgorithmError(options.algorithm + ' is not supported'); - - var i; - var stringToSign = ''; - for (i = 0; i < options.headers.length; i++) { - if (typeof (options.headers[i]) !== 'string') - throw new TypeError('options.headers must be an array of Strings'); - - var h = options.headers[i].toLowerCase(); - - if (h !== 'request-line') { - var value = request.getHeader(h); - if (!value) { - throw new MissingHeaderError(h + ' was not in the request'); - } - stringToSign += h + ': ' + value; - } else { - value = - stringToSign += - request.method + ' ' + request.path + ' HTTP/' + options.httpVersion; - } - - if ((i + 1) < options.headers.length) - stringToSign += '\n'; - } - - var alg = options.algorithm.match(/(hmac|rsa)-(\w+)/); - var signature; - if (alg[1] === 'hmac') { - var hmac = crypto.createHmac(alg[2].toUpperCase(), options.key); - hmac.update(stringToSign); - signature = hmac.digest('base64'); - } else { - var signer = crypto.createSign(options.algorithm.toUpperCase()); - signer.update(stringToSign); - signature = signer.sign(options.key, 'base64'); - } - - request.setHeader('Authorization', sprintf(Authorization, - options.keyId, - options.algorithm, - options.headers.join(' '), - signature)); - - return true; - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/util.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/util.js deleted file mode 100644 index 30bbf045..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/util.js +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright 2012 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var crypto = require('crypto'); - -var asn1 = require('asn1'); -var ctype = require('ctype'); - - - -///--- Helpers - -function readNext(buffer, offset) { - var len = ctype.ruint32(buffer, 'big', offset); - offset += 4; - - var newOffset = offset + len; - - return { - data: buffer.slice(offset, newOffset), - offset: newOffset - }; -} - - -function writeInt(writer, buffer) { - writer.writeByte(0x02); // ASN1.Integer - writer.writeLength(buffer.length); - - for (var i = 0; i < buffer.length; i++) - writer.writeByte(buffer[i]); - - return writer; -} - - -function rsaToPEM(key) { - var buffer; - var der; - var exponent; - var i; - var modulus; - var newKey = ''; - var offset = 0; - var type; - var tmp; - - try { - buffer = new Buffer(key.split(' ')[1], 'base64'); - - tmp = readNext(buffer, offset); - type = tmp.data.toString(); - offset = tmp.offset; - - if (type !== 'ssh-rsa') - throw new Error('Invalid ssh key type: ' + type); - - tmp = readNext(buffer, offset); - exponent = tmp.data; - offset = tmp.offset; - - tmp = readNext(buffer, offset); - modulus = tmp.data; - } catch (e) { - throw new Error('Invalid ssh key: ' + key); - } - - // DER is a subset of BER - der = new asn1.BerWriter(); - - der.startSequence(); - - der.startSequence(); - der.writeOID('1.2.840.113549.1.1.1'); - der.writeNull(); - der.endSequence(); - - der.startSequence(0x03); // bit string - der.writeByte(0x00); - - // Actual key - der.startSequence(); - writeInt(der, modulus); - writeInt(der, exponent); - der.endSequence(); - - // bit string - der.endSequence(); - - der.endSequence(); - - tmp = der.buffer.toString('base64'); - for (i = 0; i < tmp.length; i++) { - if ((i % 64) === 0) - newKey += '\n'; - newKey += tmp.charAt(i); - } - - if (!/\\n$/.test(newKey)) - newKey += '\n'; - - return '-----BEGIN PUBLIC KEY-----' + newKey + '-----END PUBLIC KEY-----\n'; -} - - -function dsaToPEM(key) { - var buffer; - var offset = 0; - var tmp; - var der; - var newKey = ''; - - var type; - var p; - var q; - var g; - var y; - - try { - buffer = new Buffer(key.split(' ')[1], 'base64'); - - tmp = readNext(buffer, offset); - type = tmp.data.toString(); - offset = tmp.offset; - - /* JSSTYLED */ - if (!/^ssh-ds[as].*/.test(type)) - throw new Error('Invalid ssh key type: ' + type); - - tmp = readNext(buffer, offset); - p = tmp.data; - offset = tmp.offset; - - tmp = readNext(buffer, offset); - q = tmp.data; - offset = tmp.offset; - - tmp = readNext(buffer, offset); - g = tmp.data; - offset = tmp.offset; - - tmp = readNext(buffer, offset); - y = tmp.data; - } catch (e) { - console.log(e.stack); - throw new Error('Invalid ssh key: ' + key); - } - - // DER is a subset of BER - der = new asn1.BerWriter(); - - der.startSequence(); - - der.startSequence(); - der.writeOID('1.2.840.10040.4.1'); - - der.startSequence(); - writeInt(der, p); - writeInt(der, q); - writeInt(der, g); - der.endSequence(); - - der.endSequence(); - - der.startSequence(0x03); // bit string - der.writeByte(0x00); - writeInt(der, y); - der.endSequence(); - - der.endSequence(); - - tmp = der.buffer.toString('base64'); - for (var i = 0; i < tmp.length; i++) { - if ((i % 64) === 0) - newKey += '\n'; - newKey += tmp.charAt(i); - } - - if (!/\\n$/.test(newKey)) - newKey += '\n'; - - return '-----BEGIN PUBLIC KEY-----' + newKey + '-----END PUBLIC KEY-----\n'; -} - - -///--- API - -module.exports = { - - /** - * Converts an OpenSSH public key (rsa only) to a PKCS#8 PEM file. - * - * The intent of this module is to interoperate with OpenSSL only, - * specifically the node crypto module's `verify` method. - * - * @param {String} key an OpenSSH public key. - * @return {String} PEM encoded form of the RSA public key. - * @throws {TypeError} on bad input. - * @throws {Error} on invalid ssh key formatted data. - */ - sshKeyToPEM: function sshKeyToPEM(key) { - assert.string(key, 'ssh_key'); - - /* JSSTYLED */ - if (/^ssh-rsa.*/.test(key)) - return rsaToPEM(key); - - /* JSSTYLED */ - if (/^ssh-ds[as].*/.test(key)) - return dsaToPEM(key); - - throw new Error('Only RSA and DSA public keys are allowed'); - }, - - - /** - * Generates an OpenSSH fingerprint from an ssh public key. - * - * @param {String} key an OpenSSH public key. - * @return {String} key fingerprint. - * @throws {TypeError} on bad input. - * @throws {Error} if what you passed doesn't look like an ssh public key. - */ - fingerprint: function fingerprint(key) { - assert.string(key, 'ssh_key'); - - var pieces = key.split(' '); - if (!pieces || !pieces.length || pieces.length < 2) - throw new Error('invalid ssh key'); - - var data = new Buffer(pieces[1], 'base64'); - - var hash = crypto.createHash('md5'); - hash.update(data); - var digest = hash.digest('hex'); - - var fp = ''; - for (var i = 0; i < digest.length; i++) { - if (i && i % 2 === 0) - fp += ':'; - - fp += digest[i]; - } - - return fp; - } - - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/verify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/verify.js deleted file mode 100644 index 5bf95896..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/verify.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2011 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var crypto = require('crypto'); - - - -///--- Exported API - -module.exports = { - - /** - * Simply wraps up the node crypto operations for you, and returns - * true or false. You are expected to pass in an object that was - * returned from `parse()`. - * - * @param {Object} parsedSignature the object you got from `parse`. - * @param {String} key either an RSA private key PEM or HMAC secret. - * @return {Boolean} true if valid, false otherwise. - * @throws {TypeError} if you pass in bad arguments. - */ - verifySignature: function verifySignature(parsedSignature, key) { - assert.object(parsedSignature, 'parsedSignature'); - assert.string(key, 'key'); - - var alg = parsedSignature.algorithm.match(/(HMAC|RSA|DSA)-(\w+)/); - if (!alg || alg.length !== 3) - throw new TypeError('parsedSignature: unsupported algorithm ' + - parsedSignature.algorithm); - - if (alg[1] === 'HMAC') { - var hmac = crypto.createHmac(alg[2].toUpperCase(), key); - hmac.update(parsedSignature.signingString); - return (hmac.digest('base64') === parsedSignature.params.signature); - } else { - var verify = crypto.createVerify(alg[0]); - verify.update(parsedSignature.signingString); - return verify.verify(key, parsedSignature.params.signature, 'base64'); - } - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore deleted file mode 100644 index eb03e3e1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -*.log diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE deleted file mode 100644 index 9b5dcdb7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Mark Cavage, 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md deleted file mode 100644 index 7cebf7a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md +++ /dev/null @@ -1,50 +0,0 @@ -node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS. -Currently BER encoding is supported; at some point I'll likely have to do DER. - -## Usage - -Mostly, if you're *actually* needing to read and write ASN.1, you probably don't -need this readme to explain what and why. If you have no idea what ASN.1 is, -see this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc - -The source is pretty much self-explanatory, and has read/write methods for the -common types out there. - -### Decoding - -The following reads an ASN.1 sequence with a boolean. - - var Ber = require('asn1').Ber; - - var reader = new Ber.Reader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff])); - - reader.readSequence(); - console.log('Sequence len: ' + reader.length); - if (reader.peek() === Ber.Boolean) - console.log(reader.readBoolean()); - -### Encoding - -The following generates the same payload as above. - - var Ber = require('asn1').Ber; - - var writer = new Ber.Writer(); - - writer.startSequence(); - writer.writeBoolean(true); - writer.endSequence(); - - console.log(writer.buffer); - -## Installation - - npm install asn1 - -## License - -MIT. - -## Bugs - -See <https://github.com/mcavage/node-asn1/issues>. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js deleted file mode 100644 index ff21d4fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - - -module.exports = { - - newInvalidAsn1Error: function(msg) { - var e = new Error(); - e.name = 'InvalidAsn1Error'; - e.message = msg || ''; - return e; - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js deleted file mode 100644 index 4fb90aea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var errors = require('./errors'); -var types = require('./types'); - -var Reader = require('./reader'); -var Writer = require('./writer'); - - -///--- Exports - -module.exports = { - - Reader: Reader, - - Writer: Writer - -}; - -for (var t in types) { - if (types.hasOwnProperty(t)) - module.exports[t] = types[t]; -} -for (var e in errors) { - if (errors.hasOwnProperty(e)) - module.exports[e] = errors[e]; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js deleted file mode 100644 index bd3357a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var assert = require('assert'); - -var ASN1 = require('./types'); -var errors = require('./errors'); - - -///--- Globals - -var newInvalidAsn1Error = errors.newInvalidAsn1Error; - - - -///--- API - -function Reader(data) { - if (!data || !Buffer.isBuffer(data)) - throw new TypeError('data must be a node Buffer'); - - this._buf = data; - this._size = data.length; - - // These hold the "current" state - this._len = 0; - this._offset = 0; - - var self = this; - this.__defineGetter__('length', function() { return self._len; }); - this.__defineGetter__('offset', function() { return self._offset; }); - this.__defineGetter__('remain', function() { - return self._size - self._offset; - }); - this.__defineGetter__('buffer', function() { - return self._buf.slice(self._offset); - }); -} - - -/** - * Reads a single byte and advances offset; you can pass in `true` to make this - * a "peek" operation (i.e., get the byte, but don't advance the offset). - * - * @param {Boolean} peek true means don't move offset. - * @return {Number} the next byte, null if not enough data. - */ -Reader.prototype.readByte = function(peek) { - if (this._size - this._offset < 1) - return null; - - var b = this._buf[this._offset] & 0xff; - - if (!peek) - this._offset += 1; - - return b; -}; - - -Reader.prototype.peek = function() { - return this.readByte(true); -}; - - -/** - * Reads a (potentially) variable length off the BER buffer. This call is - * not really meant to be called directly, as callers have to manipulate - * the internal buffer afterwards. - * - * As a result of this call, you can call `Reader.length`, until the - * next thing called that does a readLength. - * - * @return {Number} the amount of offset to advance the buffer. - * @throws {InvalidAsn1Error} on bad ASN.1 - */ -Reader.prototype.readLength = function(offset) { - if (offset === undefined) - offset = this._offset; - - if (offset >= this._size) - return null; - - var lenB = this._buf[offset++] & 0xff; - if (lenB === null) - return null; - - if ((lenB & 0x80) == 0x80) { - lenB &= 0x7f; - - if (lenB == 0) - throw newInvalidAsn1Error('Indefinite length not supported'); - - if (lenB > 4) - throw newInvalidAsn1Error('encoding too long'); - - if (this._size - offset < lenB) - return null; - - this._len = 0; - for (var i = 0; i < lenB; i++) - this._len = (this._len << 8) + (this._buf[offset++] & 0xff); - - } else { - // Wasn't a variable length - this._len = lenB; - } - - return offset; -}; - - -/** - * Parses the next sequence in this BER buffer. - * - * To get the length of the sequence, call `Reader.length`. - * - * @return {Number} the sequence's tag. - */ -Reader.prototype.readSequence = function(tag) { - var seq = this.peek(); - if (seq === null) - return null; - if (tag !== undefined && tag !== seq) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + seq.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - this._offset = o; - return seq; -}; - - -Reader.prototype.readInt = function() { - return this._readTag(ASN1.Integer); -}; - - -Reader.prototype.readBoolean = function() { - return (this._readTag(ASN1.Boolean) === 0 ? false : true); -}; - - -Reader.prototype.readEnumeration = function() { - return this._readTag(ASN1.Enumeration); -}; - - -Reader.prototype.readString = function(tag, retbuf) { - if (!tag) - tag = ASN1.OctetString; - - var b = this.peek(); - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - - if (o === null) - return null; - - if (this.length > this._size - o) - return null; - - this._offset = o; - - if (this.length === 0) - return ''; - - var str = this._buf.slice(this._offset, this._offset + this.length); - this._offset += this.length; - - return retbuf ? str : str.toString('utf8'); -}; - -Reader.prototype.readOID = function(tag) { - if (!tag) - tag = ASN1.OID; - - var b = this.peek(); - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - if (this.length > this._size - o) - return null; - - this._offset = o; - - var values = []; - var value = 0; - - for (var i = 0; i < this.length; i++) { - var byte = this._buf[this._offset++] & 0xff; - - value <<= 7; - value += byte & 0x7f; - if ((byte & 0x80) == 0) { - values.push(value); - value = 0; - } - } - - value = values.shift(); - values.unshift(value % 40); - values.unshift((value / 40) >> 0); - - return values.join('.'); -}; - - -Reader.prototype._readTag = function(tag) { - assert.ok(tag !== undefined); - - var b = this.peek(); - - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - if (this.length > 4) - throw newInvalidAsn1Error('Integer too long: ' + this.length); - - if (this.length > this._size - o) - return null; - this._offset = o; - - var fb = this._buf[this._offset++]; - var value = 0; - - value = fb & 0x7F; - for (var i = 1; i < this.length; i++) { - value <<= 8; - value |= (this._buf[this._offset++] & 0xff); - } - - if ((fb & 0x80) == 0x80) - value = -value; - - return value; -}; - - - -///--- Exported API - -module.exports = Reader; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js deleted file mode 100644 index 8aea0001..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - - -module.exports = { - EOC: 0, - Boolean: 1, - Integer: 2, - BitString: 3, - OctetString: 4, - Null: 5, - OID: 6, - ObjectDescriptor: 7, - External: 8, - Real: 9, // float - Enumeration: 10, - PDV: 11, - Utf8String: 12, - RelativeOID: 13, - Sequence: 16, - Set: 17, - NumericString: 18, - PrintableString: 19, - T61String: 20, - VideotexString: 21, - IA5String: 22, - UTCTime: 23, - GeneralizedTime: 24, - GraphicString: 25, - VisibleString: 26, - GeneralString: 28, - UniversalString: 29, - CharacterString: 30, - BMPString: 31, - Constructor: 32, - Context: 128 -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js deleted file mode 100644 index 7b445cc6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js +++ /dev/null @@ -1,317 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var assert = require('assert'); -var ASN1 = require('./types'); -var errors = require('./errors'); - - -///--- Globals - -var newInvalidAsn1Error = errors.newInvalidAsn1Error; - -var DEFAULT_OPTS = { - size: 1024, - growthFactor: 8 -}; - - -///--- Helpers - -function merge(from, to) { - assert.ok(from); - assert.equal(typeof(from), 'object'); - assert.ok(to); - assert.equal(typeof(to), 'object'); - - var keys = Object.getOwnPropertyNames(from); - keys.forEach(function(key) { - if (to[key]) - return; - - var value = Object.getOwnPropertyDescriptor(from, key); - Object.defineProperty(to, key, value); - }); - - return to; -} - - - -///--- API - -function Writer(options) { - options = merge(DEFAULT_OPTS, options || {}); - - this._buf = new Buffer(options.size || 1024); - this._size = this._buf.length; - this._offset = 0; - this._options = options; - - // A list of offsets in the buffer where we need to insert - // sequence tag/len pairs. - this._seq = []; - - var self = this; - this.__defineGetter__('buffer', function() { - if (self._seq.length) - throw new InvalidAsn1Error(self._seq.length + ' unended sequence(s)'); - - return self._buf.slice(0, self._offset); - }); -} - - -Writer.prototype.writeByte = function(b) { - if (typeof(b) !== 'number') - throw new TypeError('argument must be a Number'); - - this._ensure(1); - this._buf[this._offset++] = b; -}; - - -Writer.prototype.writeInt = function(i, tag) { - if (typeof(i) !== 'number') - throw new TypeError('argument must be a Number'); - if (typeof(tag) !== 'number') - tag = ASN1.Integer; - - var sz = 4; - - while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000)) && - (sz > 1)) { - sz--; - i <<= 8; - } - - if (sz > 4) - throw new InvalidAsn1Error('BER ints cannot be > 0xffffffff'); - - this._ensure(2 + sz); - this._buf[this._offset++] = tag; - this._buf[this._offset++] = sz; - - while (sz-- > 0) { - this._buf[this._offset++] = ((i & 0xff000000) >> 24); - i <<= 8; - } - -}; - - -Writer.prototype.writeNull = function() { - this.writeByte(ASN1.Null); - this.writeByte(0x00); -}; - - -Writer.prototype.writeEnumeration = function(i, tag) { - if (typeof(i) !== 'number') - throw new TypeError('argument must be a Number'); - if (typeof(tag) !== 'number') - tag = ASN1.Enumeration; - - return this.writeInt(i, tag); -}; - - -Writer.prototype.writeBoolean = function(b, tag) { - if (typeof(b) !== 'boolean') - throw new TypeError('argument must be a Boolean'); - if (typeof(tag) !== 'number') - tag = ASN1.Boolean; - - this._ensure(3); - this._buf[this._offset++] = tag; - this._buf[this._offset++] = 0x01; - this._buf[this._offset++] = b ? 0xff : 0x00; -}; - - -Writer.prototype.writeString = function(s, tag) { - if (typeof(s) !== 'string') - throw new TypeError('argument must be a string (was: ' + typeof(s) + ')'); - if (typeof(tag) !== 'number') - tag = ASN1.OctetString; - - var len = Buffer.byteLength(s); - this.writeByte(tag); - this.writeLength(len); - if (len) { - this._ensure(len); - this._buf.write(s, this._offset); - this._offset += len; - } -}; - - -Writer.prototype.writeBuffer = function(buf, tag) { - if (typeof(tag) !== 'number') - throw new TypeError('tag must be a number'); - if (!Buffer.isBuffer(buf)) - throw new TypeError('argument must be a buffer'); - - this.writeByte(tag); - this.writeLength(buf.length); - this._ensure(buf.length); - buf.copy(this._buf, this._offset, 0, buf.length); - this._offset += buf.length; -}; - - -Writer.prototype.writeStringArray = function(strings) { - if ((!strings instanceof Array)) - throw new TypeError('argument must be an Array[String]'); - - var self = this; - strings.forEach(function(s) { - self.writeString(s); - }); -}; - -// This is really to solve DER cases, but whatever for now -Writer.prototype.writeOID = function(s, tag) { - if (typeof(s) !== 'string') - throw new TypeError('argument must be a string'); - if (typeof(tag) !== 'number') - tag = ASN1.OID; - - if (!/^([0-9]+\.){3,}[0-9]+$/.test(s)) - throw new Error('argument is not a valid OID string'); - - function encodeOctet(bytes, octet) { - if (octet < 128) { - bytes.push(octet); - } else if (octet < 16384) { - bytes.push((octet >>> 7) | 0x80); - bytes.push(octet & 0x7F); - } else if (octet < 2097152) { - bytes.push((octet >>> 14) | 0x80); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } else if (octet < 268435456) { - bytes.push((octet >>> 21) | 0x80); - bytes.push(((octet >>> 14) | 0x80) & 0xFF); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } else { - bytes.push(((octet >>> 28) | 0x80) & 0xFF); - bytes.push(((octet >>> 21) | 0x80) & 0xFF); - bytes.push(((octet >>> 14) | 0x80) & 0xFF); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } - } - - var tmp = s.split('.'); - var bytes = []; - bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10)); - tmp.slice(2).forEach(function(b) { - encodeOctet(bytes, parseInt(b, 10)); - }); - - var self = this; - this._ensure(2 + bytes.length); - this.writeByte(tag); - this.writeLength(bytes.length); - bytes.forEach(function(b) { - self.writeByte(b); - }); -}; - - -Writer.prototype.writeLength = function(len) { - if (typeof(len) !== 'number') - throw new TypeError('argument must be a Number'); - - this._ensure(4); - - if (len <= 0x7f) { - this._buf[this._offset++] = len; - } else if (len <= 0xff) { - this._buf[this._offset++] = 0x81; - this._buf[this._offset++] = len; - } else if (len <= 0xffff) { - this._buf[this._offset++] = 0x82; - this._buf[this._offset++] = len >> 8; - this._buf[this._offset++] = len; - } else if (len <= 0xffffff) { - this._shift(start, len, 1); - this._buf[this._offset++] = 0x83; - this._buf[this._offset++] = len >> 16; - this._buf[this._offset++] = len >> 8; - this._buf[this._offset++] = len; - } else { - throw new InvalidAsn1ERror('Length too long (> 4 bytes)'); - } -}; - -Writer.prototype.startSequence = function(tag) { - if (typeof(tag) !== 'number') - tag = ASN1.Sequence | ASN1.Constructor; - - this.writeByte(tag); - this._seq.push(this._offset); - this._ensure(3); - this._offset += 3; -}; - - -Writer.prototype.endSequence = function() { - var seq = this._seq.pop(); - var start = seq + 3; - var len = this._offset - start; - - if (len <= 0x7f) { - this._shift(start, len, -2); - this._buf[seq] = len; - } else if (len <= 0xff) { - this._shift(start, len, -1); - this._buf[seq] = 0x81; - this._buf[seq + 1] = len; - } else if (len <= 0xffff) { - this._buf[seq] = 0x82; - this._buf[seq + 1] = len >> 8; - this._buf[seq + 2] = len; - } else if (len <= 0xffffff) { - this._shift(start, len, 1); - this._buf[seq] = 0x83; - this._buf[seq + 1] = len >> 16; - this._buf[seq + 2] = len >> 8; - this._buf[seq + 3] = len; - } else { - throw new InvalidAsn1Error('Sequence too long'); - } -}; - - -Writer.prototype._shift = function(start, len, shift) { - assert.ok(start !== undefined); - assert.ok(len !== undefined); - assert.ok(shift); - - this._buf.copy(this._buf, start + shift, start, start + len); - this._offset += shift; -}; - -Writer.prototype._ensure = function(len) { - assert.ok(len); - - if (this._size - this._offset < len) { - var sz = this._size * this._options.growthFactor; - if (sz - this._offset < len) - sz += len; - - var buf = new Buffer(sz); - - this._buf.copy(buf, 0, 0, this._offset); - this._buf = buf; - this._size = sz; - } -}; - - - -///--- Exported API - -module.exports = Writer; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js deleted file mode 100644 index d1766e7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -// If you have no idea what ASN.1 or BER is, see this: -// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc - -var Ber = require('./ber/index'); - - - -///--- Exported API - -module.exports = { - - Ber: Ber, - - BerReader: Ber.Reader, - - BerWriter: Ber.Writer - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json deleted file mode 100644 index 8fbee012..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "author": { - "name": "Mark Cavage", - "email": "mcavage@gmail.com" - }, - "contributors": [ - { - "name": "David Gwynne", - "email": "loki@animata.net" - }, - { - "name": "Yunong Xiao", - "email": "yunong@joyent.com" - } - ], - "name": "asn1", - "description": "Contains parsers and serializers for ASN.1 (currently BER only)", - "version": "0.1.11", - "repository": { - "type": "git", - "url": "git://github.com/mcavage/node-asn1.git" - }, - "main": "lib/index.js", - "engines": { - "node": ">=0.4.9" - }, - "dependencies": {}, - "devDependencies": { - "tap": "0.1.4" - }, - "scripts": { - "pretest": "which gjslint; if [[ \"$?\" = 0 ]] ; then gjslint --nojsdoc -r lib -r tst; else echo \"Missing gjslint. Skipping lint\"; fi", - "test": "tap ./tst" - }, - "readme": "node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS.\nCurrently BER encoding is supported; at some point I'll likely have to do DER.\n\n## Usage\n\nMostly, if you're *actually* needing to read and write ASN.1, you probably don't\nneed this readme to explain what and why. If you have no idea what ASN.1 is,\nsee this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc\n\nThe source is pretty much self-explanatory, and has read/write methods for the\ncommon types out there.\n\n### Decoding\n\nThe following reads an ASN.1 sequence with a boolean.\n\n var Ber = require('asn1').Ber;\n\n var reader = new Ber.Reader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff]));\n\n reader.readSequence();\n console.log('Sequence len: ' + reader.length);\n if (reader.peek() === Ber.Boolean)\n console.log(reader.readBoolean());\n\n### Encoding\n\nThe following generates the same payload as above.\n\n var Ber = require('asn1').Ber;\n\n var writer = new Ber.Writer();\n\n writer.startSequence();\n writer.writeBoolean(true);\n writer.endSequence();\n\n console.log(writer.buffer);\n\n## Installation\n\n npm install asn1\n\n## License\n\nMIT.\n\n## Bugs\n\nSee <https://github.com/mcavage/node-asn1/issues>.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mcavage/node-asn1/issues" - }, - "homepage": "https://github.com/mcavage/node-asn1", - "_id": "asn1@0.1.11", - "dist": { - "shasum": "6d27af76b17126a28e5250c7ce288790af7ab63c" - }, - "_from": "asn1@0.1.11", - "_resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js deleted file mode 100644 index 0b78b474..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var test = require('tap').test; - - - -///--- Globals - -var BerReader; - - - -///--- Tests - -test('load library', function(t) { - BerReader = require('../../lib/index').BerReader; - t.ok(BerReader); - try { - new BerReader(); - t.fail('Should have thrown'); - } catch (e) { - t.ok(e instanceof TypeError, 'Should have been a type error'); - } - t.end(); -}); - - -test('read byte', function(t) { - var reader = new BerReader(new Buffer([0xde])); - t.ok(reader); - t.equal(reader.readByte(), 0xde, 'wrong value'); - t.end(); -}); - - -test('read 1 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x01, 0x03])); - t.ok(reader); - t.equal(reader.readInt(), 0x03, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read 2 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x02, 0x7e, 0xde])); - t.ok(reader); - t.equal(reader.readInt(), 0x7ede, 'wrong value'); - t.equal(reader.length, 0x02, 'wrong length'); - t.end(); -}); - - -test('read 3 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x03, 0x7e, 0xde, 0x03])); - t.ok(reader); - t.equal(reader.readInt(), 0x7ede03, 'wrong value'); - t.equal(reader.length, 0x03, 'wrong length'); - t.end(); -}); - - -test('read 4 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x04, 0x7e, 0xde, 0x03, 0x01])); - t.ok(reader); - t.equal(reader.readInt(), 0x7ede0301, 'wrong value'); - t.equal(reader.length, 0x04, 'wrong length'); - t.end(); -}); - - -test('read boolean true', function(t) { - var reader = new BerReader(new Buffer([0x01, 0x01, 0xff])); - t.ok(reader); - t.equal(reader.readBoolean(), true, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read boolean false', function(t) { - var reader = new BerReader(new Buffer([0x01, 0x01, 0x00])); - t.ok(reader); - t.equal(reader.readBoolean(), false, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read enumeration', function(t) { - var reader = new BerReader(new Buffer([0x0a, 0x01, 0x20])); - t.ok(reader); - t.equal(reader.readEnumeration(), 0x20, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read string', function(t) { - var dn = 'cn=foo,ou=unit,o=test'; - var buf = new Buffer(dn.length + 2); - buf[0] = 0x04; - buf[1] = Buffer.byteLength(dn); - buf.write(dn, 2); - var reader = new BerReader(buf); - t.ok(reader); - t.equal(reader.readString(), dn, 'wrong value'); - t.equal(reader.length, dn.length, 'wrong length'); - t.end(); -}); - - -test('read sequence', function(t) { - var reader = new BerReader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff])); - t.ok(reader); - t.equal(reader.readSequence(), 0x30, 'wrong value'); - t.equal(reader.length, 0x03, 'wrong length'); - t.equal(reader.readBoolean(), true, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('anonymous LDAPv3 bind', function(t) { - var BIND = new Buffer(14); - BIND[0] = 0x30; // Sequence - BIND[1] = 12; // len - BIND[2] = 0x02; // ASN.1 Integer - BIND[3] = 1; // len - BIND[4] = 0x04; // msgid (make up 4) - BIND[5] = 0x60; // Bind Request - BIND[6] = 7; // len - BIND[7] = 0x02; // ASN.1 Integer - BIND[8] = 1; // len - BIND[9] = 0x03; // v3 - BIND[10] = 0x04; // String (bind dn) - BIND[11] = 0; // len - BIND[12] = 0x80; // ContextSpecific (choice) - BIND[13] = 0; // simple bind - - // Start testing ^^ - var ber = new BerReader(BIND); - t.equal(ber.readSequence(), 48, 'Not an ASN.1 Sequence'); - t.equal(ber.length, 12, 'Message length should be 12'); - t.equal(ber.readInt(), 4, 'Message id should have been 4'); - t.equal(ber.readSequence(), 96, 'Bind Request should have been 96'); - t.equal(ber.length, 7, 'Bind length should have been 7'); - t.equal(ber.readInt(), 3, 'LDAP version should have been 3'); - t.equal(ber.readString(), '', 'Bind DN should have been empty'); - t.equal(ber.length, 0, 'string length should have been 0'); - t.equal(ber.readByte(), 0x80, 'Should have been ContextSpecific (choice)'); - t.equal(ber.readByte(), 0, 'Should have been simple bind'); - t.equal(null, ber.readByte(), 'Should be out of data'); - t.end(); -}); - - -test('long string', function(t) { - var buf = new Buffer(256); - var o; - var s = - '2;649;CN=Red Hat CS 71GA Demo,O=Red Hat CS 71GA Demo,C=US;' + - 'CN=RHCS Agent - admin01,UID=admin01,O=redhat,C=US [1] This is ' + - 'Teena Vradmin\'s description.'; - buf[0] = 0x04; - buf[1] = 0x81; - buf[2] = 0x94; - buf.write(s, 3); - var ber = new BerReader(buf.slice(0, 3 + s.length)); - t.equal(ber.readString(), s); - t.end(); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js deleted file mode 100644 index add0b9fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js +++ /dev/null @@ -1,296 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var test = require('tap').test; -var sys = require('sys'); - -///--- Globals - -var BerWriter; - -var BerReader; - - -///--- Tests - -test('load library', function(t) { - BerWriter = require('../../lib/index').BerWriter; - t.ok(BerWriter); - t.ok(new BerWriter()); - t.end(); -}); - - -test('write byte', function(t) { - var writer = new BerWriter(); - - writer.writeByte(0xC2); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 1, 'Wrong length'); - t.equal(ber[0], 0xC2, 'value wrong'); - - t.end(); -}); - - -test('write 1 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7f); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 3, 'Wrong length for an int: ' + ber.length); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong (2) -> ' + ber[0]); - t.equal(ber[1], 0x01, 'length wrong(1) -> ' + ber[1]); - t.equal(ber[2], 0x7f, 'value wrong(3) -> ' + ber[2]); - - t.end(); -}); - - -test('write 2 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7ffe); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 4, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x02, 'length wrong'); - t.equal(ber[2], 0x7f, 'value wrong (byte 1)'); - t.equal(ber[3], 0xfe, 'value wrong (byte 2)'); - - t.end(); -}); - - -test('write 3 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7ffffe); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 5, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x03, 'length wrong'); - t.equal(ber[2], 0x7f, 'value wrong (byte 1)'); - t.equal(ber[3], 0xff, 'value wrong (byte 2)'); - t.equal(ber[4], 0xfe, 'value wrong (byte 3)'); - - t.end(); -}); - - -test('write 4 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7ffffffe); - var ber = writer.buffer; - - t.ok(ber); - - t.equal(ber.length, 6, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x04, 'length wrong'); - t.equal(ber[2], 0x7f, 'value wrong (byte 1)'); - t.equal(ber[3], 0xff, 'value wrong (byte 2)'); - t.equal(ber[4], 0xff, 'value wrong (byte 3)'); - t.equal(ber[5], 0xfe, 'value wrong (byte 4)'); - - t.end(); -}); - - -test('write boolean', function(t) { - var writer = new BerWriter(); - - writer.writeBoolean(true); - writer.writeBoolean(false); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 6, 'Wrong length'); - t.equal(ber[0], 0x01, 'tag wrong'); - t.equal(ber[1], 0x01, 'length wrong'); - t.equal(ber[2], 0xff, 'value wrong'); - t.equal(ber[3], 0x01, 'tag wrong'); - t.equal(ber[4], 0x01, 'length wrong'); - t.equal(ber[5], 0x00, 'value wrong'); - - t.end(); -}); - - -test('write string', function(t) { - var writer = new BerWriter(); - writer.writeString('hello world'); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 13, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - -test('write buffer', function(t) { - var writer = new BerWriter(); - // write some stuff to start with - writer.writeString('hello world'); - var ber = writer.buffer; - var buf = new Buffer([0x04, 0x0b, 0x30, 0x09, 0x02, 0x01, 0x0f, 0x01, 0x01, - 0xff, 0x01, 0x01, 0xff]); - writer.writeBuffer(buf.slice(2, buf.length), 0x04); - ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 26, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2, 13).toString('utf8'), 'hello world', 'wrong value'); - t.equal(ber[13], buf[0], 'wrong tag'); - t.equal(ber[14], buf[1], 'wrong length'); - for (var i = 13, j = 0; i < ber.length && j < buf.length; i++, j++) { - t.equal(ber[i], buf[j], 'buffer contents not identical'); - } - t.end(); -}); - -test('write string array', function(t) { - var writer = new BerWriter(); - writer.writeStringArray(['hello world', 'fubar!']); - var ber = writer.buffer; - - t.ok(ber); - - t.equal(ber.length, 21, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2, 13).toString('utf8'), 'hello world', 'wrong value'); - - t.equal(ber[13], 0x04, 'wrong tag'); - t.equal(ber[14], 6, 'wrong length'); - t.equal(ber.slice(15).toString('utf8'), 'fubar!', 'wrong value'); - - t.end(); -}); - - -test('resize internal buffer', function(t) { - var writer = new BerWriter({size: 2}); - writer.writeString('hello world'); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 13, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - - -test('sequence', function(t) { - var writer = new BerWriter({size: 25}); - writer.startSequence(); - writer.writeString('hello world'); - writer.endSequence(); - var ber = writer.buffer; - - t.ok(ber); - console.log(ber); - t.equal(ber.length, 15, 'wrong length'); - t.equal(ber[0], 0x30, 'wrong tag'); - t.equal(ber[1], 13, 'wrong length'); - t.equal(ber[2], 0x04, 'wrong tag'); - t.equal(ber[3], 11, 'wrong length'); - t.equal(ber.slice(4).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - - -test('nested sequence', function(t) { - var writer = new BerWriter({size: 25}); - writer.startSequence(); - writer.writeString('hello world'); - writer.startSequence(); - writer.writeString('hello world'); - writer.endSequence(); - writer.endSequence(); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 30, 'wrong length'); - t.equal(ber[0], 0x30, 'wrong tag'); - t.equal(ber[1], 28, 'wrong length'); - t.equal(ber[2], 0x04, 'wrong tag'); - t.equal(ber[3], 11, 'wrong length'); - t.equal(ber.slice(4, 15).toString('utf8'), 'hello world', 'wrong value'); - t.equal(ber[15], 0x30, 'wrong tag'); - t.equal(ber[16], 13, 'wrong length'); - t.equal(ber[17], 0x04, 'wrong tag'); - t.equal(ber[18], 11, 'wrong length'); - t.equal(ber.slice(19, 30).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - - -test('LDAP bind message', function(t) { - var dn = 'cn=foo,ou=unit,o=test'; - var writer = new BerWriter(); - writer.startSequence(); - writer.writeInt(3); // msgid = 3 - writer.startSequence(0x60); // ldap bind - writer.writeInt(3); // ldap v3 - writer.writeString(dn); - writer.writeByte(0x80); - writer.writeByte(0x00); - writer.endSequence(); - writer.endSequence(); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 35, 'wrong length (buffer)'); - t.equal(ber[0], 0x30, 'wrong tag'); - t.equal(ber[1], 33, 'wrong length'); - t.equal(ber[2], 0x02, 'wrong tag'); - t.equal(ber[3], 1, 'wrong length'); - t.equal(ber[4], 0x03, 'wrong value'); - t.equal(ber[5], 0x60, 'wrong tag'); - t.equal(ber[6], 28, 'wrong length'); - t.equal(ber[7], 0x02, 'wrong tag'); - t.equal(ber[8], 1, 'wrong length'); - t.equal(ber[9], 0x03, 'wrong value'); - t.equal(ber[10], 0x04, 'wrong tag'); - t.equal(ber[11], dn.length, 'wrong length'); - t.equal(ber.slice(12, 33).toString('utf8'), dn, 'wrong value'); - t.equal(ber[33], 0x80, 'wrong tag'); - t.equal(ber[34], 0x00, 'wrong len'); - - t.end(); -}); - - -test('Write OID', function(t) { - var oid = '1.2.840.113549.1.1.1'; - var writer = new BerWriter(); - writer.writeOID(oid); - - var ber = writer.buffer; - t.ok(ber); - console.log(require('util').inspect(ber)); - console.log(require('util').inspect(new Buffer([0x06, 0x09, 0x2a, 0x86, - 0x48, 0x86, 0xf7, 0x0d, - 0x01, 0x01, 0x01]))); - - t.end(); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md deleted file mode 100644 index c0c3a530..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md +++ /dev/null @@ -1,126 +0,0 @@ -# node-assert-plus - -This library is a super small wrapper over node's assert module that has two -things: (1) the ability to disable assertions with the environment variable -NODE_NDEBUG, and (2) some API wrappers for argument testing. Like -`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks -like this: - - var assert = require('assert-plus'); - - function fooAccount(options, callback) { - assert.object(options, 'options'); - assert.number(options.id, 'options.id); - assert.bool(options.isManager, 'options.isManager'); - assert.string(options.name, 'options.name'); - assert.arrayOfString(options.email, 'options.email'); - assert.func(callback, 'callback'); - - // Do stuff - callback(null, {}); - } - -# API - -All methods that *aren't* part of node's core assert API are simply assumed to -take an argument, and then a string 'name' that's not a message; `AssertionError` -will be thrown if the assertion fails with a message like: - - AssertionError: foo (string) is required - at test (/home/mark/work/foo/foo.js:3:9) - at Object.<anonymous> (/home/mark/work/foo/foo.js:15:1) - at Module._compile (module.js:446:26) - at Object..js (module.js:464:10) - at Module.load (module.js:353:31) - at Function._load (module.js:311:12) - at Array.0 (module.js:484:10) - at EventEmitter._tickCallback (node.js:190:38) - -from: - - function test(foo) { - assert.string(foo, 'foo'); - } - -There you go. You can check that arrays are of a homogenous type with `Arrayof$Type`: - - function test(foo) { - assert.arrayOfString(foo, 'foo'); - } - -You can assert IFF an argument is not `undefined` (i.e., an optional arg): - - assert.optionalString(foo, 'foo'); - -Lastly, you can opt-out of assertion checking altogether by setting the -environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have -lots of assertions, and don't want to pay `typeof ()` taxes to v8 in -production. - -The complete list of APIs is: - -* assert.bool -* assert.buffer -* assert.func -* assert.number -* assert.object -* assert.string -* assert.arrayOfBool -* assert.arrayOfFunc -* assert.arrayOfNumber -* assert.arrayOfObject -* assert.arrayOfString -* assert.optionalBool -* assert.optionalBuffer -* assert.optionalFunc -* assert.optionalNumber -* assert.optionalObject -* assert.optionalString -* assert.optionalArrayOfBool -* assert.optionalArrayOfFunc -* assert.optionalArrayOfNumber -* assert.optionalArrayOfObject -* assert.optionalArrayOfString -* assert.AssertionError -* assert.fail -* assert.ok -* assert.equal -* assert.notEqual -* assert.deepEqual -* assert.notDeepEqual -* assert.strictEqual -* assert.notStrictEqual -* assert.throws -* assert.doesNotThrow -* assert.ifError - -# Installation - - npm install assert-plus - -## License - -The MIT License (MIT) -Copyright (c) 2012 Mark Cavage - -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. - -## Bugs - -See <https://github.com/mcavage/node-assert-plus/issues>. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js deleted file mode 100644 index 70583f12..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright (c) 2012, Mark Cavage. All rights reserved. - -var assert = require('assert'); -var Stream = require('stream').Stream; -var util = require('util'); - - - -///--- Globals - -var NDEBUG = process.env.NODE_NDEBUG || false; - - - -///--- Messages - -var ARRAY_TYPE_REQUIRED = '%s ([%s]) required'; -var TYPE_REQUIRED = '%s (%s) is required'; - - - -///--- Internal - -function capitalize(str) { - return (str.charAt(0).toUpperCase() + str.slice(1)); -} - -function uncapitalize(str) { - return (str.charAt(0).toLowerCase() + str.slice(1)); -} - -function _() { - return (util.format.apply(util, arguments)); -} - - -function _assert(arg, type, name, stackFunc) { - if (!NDEBUG) { - name = name || type; - stackFunc = stackFunc || _assert.caller; - var t = typeof (arg); - - if (t !== type) { - throw new assert.AssertionError({ - message: _(TYPE_REQUIRED, name, type), - actual: t, - expected: type, - operator: '===', - stackStartFunction: stackFunc - }); - } - } -} - - - -///--- API - -function array(arr, type, name) { - if (!NDEBUG) { - name = name || type; - - if (!Array.isArray(arr)) { - throw new assert.AssertionError({ - message: _(ARRAY_TYPE_REQUIRED, name, type), - actual: typeof (arr), - expected: 'array', - operator: 'Array.isArray', - stackStartFunction: array.caller - }); - } - - for (var i = 0; i < arr.length; i++) { - _assert(arr[i], type, name, array); - } - } -} - - -function bool(arg, name) { - _assert(arg, 'boolean', name, bool); -} - - -function buffer(arg, name) { - if (!Buffer.isBuffer(arg)) { - throw new assert.AssertionError({ - message: _(TYPE_REQUIRED, name, type), - actual: typeof (arg), - expected: 'buffer', - operator: 'Buffer.isBuffer', - stackStartFunction: buffer - }); - } -} - - -function func(arg, name) { - _assert(arg, 'function', name); -} - - -function number(arg, name) { - _assert(arg, 'number', name); -} - - -function object(arg, name) { - _assert(arg, 'object', name); -} - - -function stream(arg, name) { - if (!(arg instanceof Stream)) { - throw new assert.AssertionError({ - message: _(TYPE_REQUIRED, name, type), - actual: typeof (arg), - expected: 'Stream', - operator: 'instanceof', - stackStartFunction: buffer - }); - } -} - - -function string(arg, name) { - _assert(arg, 'string', name); -} - - - -///--- Exports - -module.exports = { - bool: bool, - buffer: buffer, - func: func, - number: number, - object: object, - stream: stream, - string: string -}; - - -Object.keys(module.exports).forEach(function (k) { - if (k === 'buffer') - return; - - var name = 'arrayOf' + capitalize(k); - - if (k === 'bool') - k = 'boolean'; - if (k === 'func') - k = 'function'; - module.exports[name] = function (arg, name) { - array(arg, k, name); - }; -}); - -Object.keys(module.exports).forEach(function (k) { - var _name = 'optional' + capitalize(k); - var s = uncapitalize(k.replace('arrayOf', '')); - if (s === 'bool') - s = 'boolean'; - if (s === 'func') - s = 'function'; - - if (k.indexOf('arrayOf') !== -1) { - module.exports[_name] = function (arg, name) { - if (!NDEBUG && arg !== undefined) { - array(arg, s, name); - } - }; - } else { - module.exports[_name] = function (arg, name) { - if (!NDEBUG && arg !== undefined) { - _assert(arg, s, name); - } - }; - } -}); - - -// Reexport built-in assertions -Object.keys(assert).forEach(function (k) { - if (k === 'AssertionError') { - module.exports[k] = assert[k]; - return; - } - - module.exports[k] = function () { - if (!NDEBUG) { - assert[k].apply(assert[k], arguments); - } - }; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json deleted file mode 100644 index aade0f97..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "author": { - "name": "Mark Cavage", - "email": "mcavage@gmail.com" - }, - "name": "assert-plus", - "description": "Extra assertions on top of node's assert module", - "version": "0.1.2", - "main": "./assert.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": ">=0.6" - }, - "readme": "# node-assert-plus\n\nThis library is a super small wrapper over node's assert module that has two\nthings: (1) the ability to disable assertions with the environment variable\nNODE_NDEBUG, and (2) some API wrappers for argument testing. Like\n`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks\nlike this:\n\n var assert = require('assert-plus');\n\n function fooAccount(options, callback) {\n\t assert.object(options, 'options');\n\t\tassert.number(options.id, 'options.id);\n\t\tassert.bool(options.isManager, 'options.isManager');\n\t\tassert.string(options.name, 'options.name');\n\t\tassert.arrayOfString(options.email, 'options.email');\n\t\tassert.func(callback, 'callback');\n\n // Do stuff\n\t\tcallback(null, {});\n }\n\n# API\n\nAll methods that *aren't* part of node's core assert API are simply assumed to\ntake an argument, and then a string 'name' that's not a message; `AssertionError`\nwill be thrown if the assertion fails with a message like:\n\n AssertionError: foo (string) is required\n\tat test (/home/mark/work/foo/foo.js:3:9)\n\tat Object.<anonymous> (/home/mark/work/foo/foo.js:15:1)\n\tat Module._compile (module.js:446:26)\n\tat Object..js (module.js:464:10)\n\tat Module.load (module.js:353:31)\n\tat Function._load (module.js:311:12)\n\tat Array.0 (module.js:484:10)\n\tat EventEmitter._tickCallback (node.js:190:38)\n\nfrom:\n\n function test(foo) {\n\t assert.string(foo, 'foo');\n }\n\nThere you go. You can check that arrays are of a homogenous type with `Arrayof$Type`:\n\n function test(foo) {\n\t assert.arrayOfString(foo, 'foo');\n }\n\nYou can assert IFF an argument is not `undefined` (i.e., an optional arg):\n\n assert.optionalString(foo, 'foo');\n\nLastly, you can opt-out of assertion checking altogether by setting the\nenvironment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have\nlots of assertions, and don't want to pay `typeof ()` taxes to v8 in\nproduction.\n\nThe complete list of APIs is:\n\n* assert.bool\n* assert.buffer\n* assert.func\n* assert.number\n* assert.object\n* assert.string\n* assert.arrayOfBool\n* assert.arrayOfFunc\n* assert.arrayOfNumber\n* assert.arrayOfObject\n* assert.arrayOfString\n* assert.optionalBool\n* assert.optionalBuffer\n* assert.optionalFunc\n* assert.optionalNumber\n* assert.optionalObject\n* assert.optionalString\n* assert.optionalArrayOfBool\n* assert.optionalArrayOfFunc\n* assert.optionalArrayOfNumber\n* assert.optionalArrayOfObject\n* assert.optionalArrayOfString\n* assert.AssertionError\n* assert.fail\n* assert.ok\n* assert.equal\n* assert.notEqual\n* assert.deepEqual\n* assert.notDeepEqual\n* assert.strictEqual\n* assert.notStrictEqual\n* assert.throws\n* assert.doesNotThrow\n* assert.ifError\n\n# Installation\n\n npm install assert-plus\n\n## License\n\nThe MIT License (MIT)\nCopyright (c) 2012 Mark Cavage\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n## Bugs\n\nSee <https://github.com/mcavage/node-assert-plus/issues>.\n", - "readmeFilename": "README.md", - "_id": "assert-plus@0.1.2", - "dist": { - "shasum": "53cfb5f7859525b28cbf0ba62afc8971ca7ad1a1" - }, - "_from": "assert-plus@0.1.2", - "_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG deleted file mode 100644 index 078c03ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG +++ /dev/null @@ -1,71 +0,0 @@ -This contains tickets fixed in each version release in reverse chronological -order. There is one ticket per line. Each commits message has the tickets fixed -in it. The commit message also has the corresponding github issue. i.e. CTYPE-42 -would be issue 42. Each issue can be found at: -https://github.com/rmustacc/node-ctype/issues/%d. - -CTYPE v0.5.2 -CTYPE-46 Release 0.5.2 -CTYPE-45 error in setEndian logic - -v0.5.1 -CTYPE-44 Release 0.5.1 -Contributed by Terin Stock: -CTYPE-41 CTypeParser.writeStruct should return its offset -Contributed by Terin Stock: -CTYPE-42 int64_t returns wrong size - -v0.5.0 -CTYPE-40 Release 0.5.0 -CTYPE-39 want > 0.6 engine support - -v0.4.0 -CTYPE-37 Release v0.4.0 -CTYPE-6 want additional entry point for write -CTYPE-20 Add 64-bit int support into core parser -CTYPE-31 Fix bounds errors node/2129 -CTYPE-33 Update copyright holders -CTYPE-34 ctf.js confuses sign bit. -CTYPE-35 Make the README more useful for getting started -CTYPE-36 want manual page on ctio functions - -v0.3.1 -CTYPE-29 Release 0.3.1 -CTYPE-28 Want v0.6 npm support - -v0.3.0 -CTYPE-27 Release v0.3.0 -CTYPE-26 Want alternate default char behavior - -v0.2.1 -CTYPE-25 Release v0.2.1 -CTYPE-24 Writing structs is busted - -v0.2.0: -CTYPE-23 Release v0.2.0 -CTYPE-21 Add support for CTF JSON data -CTYPE-22 Add Javascriptlint profile -CTYPE-15 Pull in ctio updates from node/master - -v0.1.0: -CTYPE-18 Bump version to v0.1.0 -CTYPE-17 Fix nested structures -CTYPE-16 Remove extraneous logging -CTYPE-14 toAbs64 and toApprox64 are not exported - -v0.0.3: -CTYPE-12 Bump version to v0.0.3 -CTYPE-11 fix typo in wuint64 -CTYPE-10 Integrate jsstyle - -v0.0.2: -CTYPE-8 dump npm version to v0.0.2 -CTYPE-9 want changelog -CTYPE-7 fix typo in detypes. - -v0.0.1: -CTYPE-5 Missing from NPM registry -CTYPE-4 int16_t calls wrong read function -CTYPE-3 API example types are missing quotes as strings -CTYPE-2 doc missing 64-bit functions -CTYPE-1 Need license diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE deleted file mode 100644 index 22ced3e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -The following license applies to all files unless the file is specified below. -Each file specified below has its license information embedded in it: - -tools/jsstyle - -Copyright 2011, Robert Mustacchi. All rights reserved. -Copyright 2011, Joyent, Inc. 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README deleted file mode 100644 index 4efd7ee5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README +++ /dev/null @@ -1,82 +0,0 @@ -Node-CType is a way to read and write binary data in structured and easy to use -format. Its name comes from the C header file. - -To get started, simply clone the repository or use npm to install it. Once it is -there, simply require it. - -git clone git://github.com/rmustacc/node-ctype -npm install ctype -var mod_ctype = require('ctype') - - -There are two APIs that you can use, depending on what abstraction you'd like. -The low level API let's you read and write individual integers and floats from -buffers. The higher level API let's you read and write structures of these. To -illustrate this, let's looks look at how we would read and write a binary -encoded x,y point. - -In C we would define this structure as follows: - -typedef struct point { - uint16_t p_x; - uint16_t p_y; -} point_t; - -To read a binary encoded point from a Buffer, we first need to create a CType -parser (where we specify the endian and other options) and add the typedef. - -var parser = new mod_ctype.Parser({ endian: 'big' }); -parser.typedef('point_t', [ - { x: { type: 'uint16_t' } }, - { y: { type: 'uint16_t' } } -]); - -From here, given a buffer buf and an offset into it, we can read a point. - -var out = parser.readData([ { point: { type: 'point_t' } } ], buffer, 0); -console.log(out); -{ point: { x: 23, y: 42 } } - -Another way to get the same information would be to use the low level methods. -Note that these require you to manually deal with the offset. Here's how we'd -get the same values of x and y from the buffer. - -var x = mod_ctype.ruint16(buf, 'big', 0); -var y = mod_ctype.ruint16(buf, 'big', 2); -console.log(x + ', ' + y); -23, 42 - -The true power of this API comes from the ability to define and nest typedefs, -just as you would in C. By default, the following types are defined by default. -Note that they return a Number, unless indicated otherwise. - - * int8_t - * int16_t - * int32_t - * int64_t (returns an array where val[0] << 32 + val[1] would be the value) - * uint8_t - * uint16_t - * uint32_t - * uint64_t (returns an array where val[0] << 32 + val[1] would be the value) - * float - * double - * char (either returns a buffer with that character or a uint8_t) - * char[] (returns an object with the buffer and the number of characters read which is either the total amount requested or until the first 0) - - -ctf2json integration: - -Node-CType supports consuming the output of ctf2json. Once you read in a JSON file, -all you have to do to add all the definitions it contains is: - -var data, parser; -data = JSON.parse(parsedJSONData); -parser = mod_ctype.parseCTF(data, { endian: 'big' }); - -For more documentation, see the file README.old. Full documentation is in the -process of being rewritten as a series of manual pages which will be available -in the repository and online for viewing. - -To read the ctio manual page simple run, from the root of the workspace: - -man -Mman -s 3ctype ctio diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old deleted file mode 100644 index 9326b725..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old +++ /dev/null @@ -1,298 +0,0 @@ -This library provides a way to read and write binary data. - -Node CType is a way to read and write binary data in structured and easy to use -formats. It's name comes from the header file, though it does not share as much -with it as it perhaps should. - -There are two levels of the API. One is the raw API which everything is built on -top of, while the other provides a much nicer abstraction and is built entirely -by using the lower level API. The hope is that the low level API is both clear -and useful. The low level API gets it's names from stdint.h (a rather -appropriate source). The lower level API is presented at the end of this -document. - -Standard CType API - -The CType interface is presented as a parser object that controls the -endianness combined with a series of methods to change that value, parse and -write out buffers, and a way to provide typedefs. Standard Types - -The CType parser supports the following basic types which return Numbers except -as indicated: - - * int8_t - * int16_t - * int32_t - * int64_t (returns an array where val[0] << 32 + val[1] would be the value) - * uint8_t - * uint16_t - * uint32_t - * uint64_t (returns an array where val[0] << 32 + val[1] would be the value) - * float - * double - * char (returns a buffer with just that single character) - * char[] (returns an object with the buffer and the number of characters read which is either the total amount requested or until the first 0) - -Specifying Structs - -The CType parser also supports the notion of structs. A struct is an array of -JSON objects that defines an order of keys which have types and values. One -would build a struct to represent a point (x,y) as follows: - -[ - { x: { type: 'int16_t' }}, - { y: { type: 'int16_t' }} -] - -When this is passed into the read routine, it would read the first two bytes -(as defined by int16_t) to determine the Number to use for X, and then it would -read the next two bytes to determine the value of Y. When read this could -return something like: - -{ - x: 42, - y: -23 -} - -When someone wants to write values, we use the same format as above, but with -additional value field: - -[ - { x: { type: 'int16_t', value: 42 }}, - { y: { type: 'int16_t', value: -23 }} -] - -Now, the structure above may be optionally annotated with offsets. This tells -us to rather than read continuously we should read the given value at the -specified offset. If an offset is provided, it is is effectively the equivalent -of lseek(offset, SEEK_SET). Thus, subsequent values will be read from that -offset and incremented by the appropriate value. As an example: - -[ - { x: { type: 'int16_t' }}, - { y: { type: 'int16_t', offset: 20 }}, - { z: { type: 'int16_t' }} -] - -We would read x from the first starting offset given to us, for the sake of -example, let's assume that's 0. After reading x, the next offset to read from -would be 2; however, y specifies an offset, thus we jump directly to that -offset and read y from byte 20. We would then read z from byte 22. - -The same offsets may be used when writing values. - -Typedef - -The basic set of types while covers the basics, is somewhat limiting. To make -this richer, there is functionality to typedef something like in C. One can use -typedef to add a new name to an existing type or to define a name to refer to a -struct. Thus the following are all examples of a typedef: - -typedef('size_t', 'uint32_t'); -typedef('ssize_t', 'int32_t'); -typedef('point_t', [ - { x: { type: 'int16_t' }}, - { y: { type: 'int16_t' }} -]); - -Once something has been typedef'd it can be used in any of the definitions -previously shown. - -One cannot remove a typedef once created, this is analogous to C. - -The set of defined types can be printed with lstypes. The format of this output -is subject to change, but likely will look something like: - -> lstypes(); -{ - size_t: 'uint32_t', - ssize_t: 'int32_t', - point_t: [ - { x: { type: 'int16_t' }}, - { y: { type: 'int16_t' }} - ] -} - -Specifying arrays - -Arrays can be specified by appending []s to a type. Arrays must have the size -specified. The size must be specified and it can be done in one of two ways: - - * An explicit non-zero integer size - * A name of a previously declared variable in the struct whose value is a - number. - -Note, that when using the name of a variable, it should be the string name for -the key. This is only valid inside structs and the value must be declared -before the value with the array. The following are examples: - -[ - { ip_addr4: { type: 'uint8_t[4]' }}, - { len: { type: 'uint32_t' }}, - { data: { type: 'uint8_t[len]' }} -] - -Arrays are permitted in typedefs; however, they must have a declared integer -size. The following are examples of valid and invalid arrays: - -typedef('path', 'char[1024]'); /* Good */ -typedef('path', 'char[len]'); /* Bad! */ - -64 bit values: - -Unfortunately Javascript represents values with a double, so you lose precision -and the ability to represent Integers roughly beyond 2^53. To alleviate this, I -propose the following for returning 64 bit integers when read: - -value[2]: Each entry is a 32 bit number which can be reconstructed to the -original by the following formula: - -value[0] << 32 + value[1] (Note this will not work in Javascript) - -CTF JSON data: - -node-ctype can also handle JSON data that mathces the format described in the -documentation of the tool ctf2json. Given the JSON data which specifies type -information, it will transform that into a parser that understands all of the -types defined inside of it. This is useful for more complicated structures that -have a lot of typedefs. - -Interface overview - -The following is the header-file like interface to the parser object: - -/* - * Create a new instance of the parser. Each parser has its own store of - * typedefs and endianness. Conf is an object with the following values: - * - * endian Either 'big' or 'little' do determine the endianness we - * want to read from or write to. - * - */ -function CTypeParser(conf); - -/* - * Parses the CTF JSON data and creates a parser that understands all of those - * types. - * - * data Parsed JSON data that maches that CTF JSON - * specification. - * - * conf The configuration object to create a new CTypeParser - * from. - */ -CTypeParser parseCTF(data, conf); - -/* - * This is what we were born to do. We read the data from a buffer and return it - * in an object whose keys match the values from the object. - * - * def The array definition of the data to read in - * - * buffer The buffer to read data from - * - * offset The offset to start writing to - * - * Returns an object where each key corresponds to an entry in def and the value - * is the read value. - */ -Object CTypeParser.readData(<Type Definition>, buffer, offset); - -/* - * This is the second half of what we were born to do, write out the data - * itself. - * - * def The array definition of the data to write out with - * values - * - * buffer The buffer to write to - * - * offset The offset in the buffer to write to - */ -void CTypeParser.writeData(<Type Definition>, buffer, offset); - -/* - * A user has requested to add a type, let us honor their request. Yet, if their - * request doth spurn us, send them unto the Hells which Dante describes. - * - * name The string for the type definition we're adding - * - * value Either a string that is a type/array name or an object - * that describes a struct. - */ -void CTypeParser.prototype.typedef(name, value); - -Object CTypeParser.prototype.lstypes(); - -/* - * Get the endian value for the current parser - */ -String CTypeParser.prototype.getEndian(); - -/* - * Sets the current endian value for the Parser. If the value is not valid, - * throws an Error. - * - * endian Either 'big' or 'little' do determine the endianness we - * want to read from or write to. - * - */ -void CTypeParser.protoype.setEndian(String); - -/* - * Attempts to convert an array of two integers returned from rsint64 / ruint64 - * into an absolute 64 bit number. If however the value would exceed 2^52 this - * will instead throw an error. The mantissa in a double is a 52 bit number and - * rather than potentially give you a value that is an approximation this will - * error. If you would rather an approximation, please see toApprox64. - * - * val An array of two 32-bit integers - */ -Number function toAbs64(val) - -/* - * Will return the 64 bit value as returned in an array from rsint64 / ruint64 - * to a value as close as it can. Note that Javascript stores all numbers as a - * double and the mantissa only has 52 bits. Thus this version may approximate - * the value. - * - * val An array of two 32-bit integers - */ -Number function toApprox64(val) - -Low Level API - -The following function are provided at the low level: - -Read unsigned integers from a buffer: -Number ruint8(buffer, endian, offset); -Number ruint16(buffer, endian, offset); -Number ruint32(buffer, endian, offset); -Number[] ruint64(buffer, endian, offset); - -Read signed integers from a buffer: -Number rsint8(buffer, endian, offset); -Number rsint16(buffer, endian, offset); -Number rsint32(buffer, endian, offset); -Number[] rsint64(buffer, endian, offset); - -Read floating point numbers from a buffer: -Number rfloat(buffer, endian, offset); /* IEEE-754 Single precision */ -Number rdouble(buffer, endian, offset); /* IEEE-754 Double precision */ - -Write unsigned integers to a buffer: -void wuint8(Number, endian, buffer, offset); -void wuint16(Number, endian, buffer, offset); -void wuint32(Number, endian, buffer, offset); -void wuint64(Number[], endian, buffer, offset); - -Write signed integers from a buffer: -void wsint8(Number, endian, buffer, offset); -void wsint16(Number, endian, buffer, offset); -void wsint32(Number, endian, buffer, offset); -void wsint64(Number[], endian, buffer offset); - -Write floating point numbers from a buffer: -void wfloat(Number, buffer, endian, offset); /* IEEE-754 Single precision */ -void wdouble(Number, buffer, endian, offset); /* IEEE-754 Double precision */ - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js deleted file mode 100644 index 66d5f735..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js +++ /dev/null @@ -1,245 +0,0 @@ -/* - * ctf.js - * - * Understand and parse all of the different JSON formats of CTF data and - * translate that into a series of node-ctype friendly pieces. The reason for - * the abstraction is to handle different changes in the file format. - * - * We have to be careful here that we don't end up using a name that is already - * a built in type. - */ -var mod_assert = require('assert'); -var ASSERT = mod_assert.ok; - -var ctf_versions = [ '1.0' ]; -var ctf_entries = [ 'integer', 'float', 'typedef', 'struct' ]; -var ctf_deftypes = [ 'int8_t', 'uint8_t', 'int16_t', 'uint16_t', 'int32_t', - 'uint32_t', 'float', 'double' ]; - -function ctfParseInteger(entry, ctype) -{ - var name, sign, len, type; - - name = entry['name']; - if (!('signed' in entry['integer'])) - throw (new Error('Malformed CTF JSON: integer missing ' + - 'signed value')); - - - if (!('length' in entry['integer'])) - throw (new Error('Malformed CTF JSON: integer missing ' + - 'length value')); - - sign = entry['integer']['signed']; - len = entry['integer']['length']; - type = null; - - if (sign && len == 1) - type = 'int8_t'; - else if (len == 1) - type = 'uint8_t'; - else if (sign && len == 2) - type = 'int16_t'; - else if (len == 2) - type = 'uint16_t'; - else if (sign && len == 4) - type = 'int32_t'; - else if (len == 4) - type = 'uint32_t'; - else if (sign && len == 8) - type = 'int64_t'; - else if (len == 8) - type = 'uint64_t'; - - if (type === null) - throw (new Error('Malformed CTF JSON: integer has ' + - 'unsupported length and sign - ' + len + '/' + sign)); - - /* - * This means that this is the same as one of our built in types. If - * that's the case defining it would be an error. So instead of trying - * to typedef it, we'll return here. - */ - if (name == type) - return; - - if (name == 'char') { - ASSERT(type == 'int8_t'); - return; - } - - ctype.typedef(name, type); -} - -function ctfParseFloat(entry, ctype) -{ - var name, len; - - name = entry['name']; - if (!('length' in entry['float'])) - throw (new Error('Malformed CTF JSON: float missing ' + - 'length value')); - - len = entry['float']['length']; - if (len != 4 && len != 8) - throw (new Error('Malformed CTF JSON: float has invalid ' + - 'length value')); - - if (len == 4) { - if (name == 'float') - return; - ctype.typedef(name, 'float'); - } else if (len == 8) { - if (name == 'double') - return; - ctype.typedef(name, 'double'); - } -} - -function ctfParseTypedef(entry, ctype) -{ - var name, type, ii; - - name = entry['name']; - if (typeof (entry['typedef']) != 'string') - throw (new Error('Malformed CTF JSON: typedef value in not ' + - 'a string')); - - type = entry['typedef']; - - /* - * We need to ensure that we're not looking at type that's one of our - * built in types. Traditionally in C a uint32_t would be a typedef to - * some kind of integer. However, those size types are built ins. - */ - for (ii = 0; ii < ctf_deftypes.length; ii++) { - if (name == ctf_deftypes[ii]) - return; - } - - ctype.typedef(name, type); -} - -function ctfParseStruct(entry, ctype) -{ - var name, type, ii, val, index, member, push; - - member = []; - if (!Array.isArray(entry['struct'])) - throw (new Error('Malformed CTF JSON: struct value is not ' + - 'an array')); - - for (ii = 0; ii < entry['struct'].length; ii++) { - val = entry['struct'][ii]; - if (!('name' in val)) - throw (new Error('Malformed CTF JSON: struct member ' + - 'missing name')); - - if (!('type' in val)) - throw (new Error('Malformed CTF JSON: struct member ' + - 'missing type')); - - if (typeof (val['name']) != 'string') - throw (new Error('Malformed CTF JSON: struct member ' + - 'name isn\'t a string')); - - if (typeof (val['type']) != 'string') - throw (new Error('Malformed CTF JSON: struct member ' + - 'type isn\'t a string')); - - /* - * CTF version 2 specifies array names as <type> [<num>] where - * as node-ctype does this as <type>[<num>]. - */ - name = val['name']; - type = val['type']; - index = type.indexOf(' ['); - if (index != -1) { - type = type.substring(0, index) + - type.substring(index + 1, type.length); - } - push = {}; - push[name] = { 'type': type }; - member.push(push); - } - - name = entry['name']; - ctype.typedef(name, member); -} - -function ctfParseEntry(entry, ctype) -{ - var ii, found; - - if (!('name' in entry)) - throw (new Error('Malformed CTF JSON: entry missing "name" ' + - 'section')); - - for (ii = 0; ii < ctf_entries.length; ii++) { - if (ctf_entries[ii] in entry) - found++; - } - - if (found === 0) - throw (new Error('Malformed CTF JSON: found no entries')); - - if (found >= 2) - throw (new Error('Malformed CTF JSON: found more than one ' + - 'entry')); - - if ('integer' in entry) { - ctfParseInteger(entry, ctype); - return; - } - - if ('float' in entry) { - ctfParseFloat(entry, ctype); - return; - } - - if ('typedef' in entry) { - ctfParseTypedef(entry, ctype); - return; - } - - if ('struct' in entry) { - ctfParseStruct(entry, ctype); - return; - } - - ASSERT(false, 'shouldn\'t reach here'); -} - -function ctfParseJson(json, ctype) -{ - var version, ii; - - ASSERT(json); - ASSERT(ctype); - if (!('metadata' in json)) - throw (new Error('Invalid CTF JSON: missing metadata section')); - - if (!('ctf2json_version' in json['metadata'])) - throw (new Error('Invalid CTF JSON: missing ctf2json_version')); - - version = json['metadata']['ctf2json_version']; - for (ii = 0; ii < ctf_versions.length; ii++) { - if (ctf_versions[ii] == version) - break; - } - - if (ii == ctf_versions.length) - throw (new Error('Unsuported ctf2json_version: ' + version)); - - if (!('data' in json)) - throw (new Error('Invalid CTF JSON: missing data section')); - - if (!Array.isArray(json['data'])) - throw (new Error('Malformed CTF JSON: data section is not ' + - 'an array')); - - for (ii = 0; ii < json['data'].length; ii++) - ctfParseEntry(json['data'][ii], ctype); -} - -exports.ctfParseJson = ctfParseJson; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js deleted file mode 100644 index 62c5d7b2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js +++ /dev/null @@ -1,1485 +0,0 @@ -/* - * rm - Feb 2011 - * ctio.js: - * - * A simple way to read and write simple ctypes. Of course, as you'll find the - * code isn't as simple as it might appear. The following types are currently - * supported in big and little endian formats: - * - * uint8_t int8_t - * uint16_t int16_t - * uint32_t int32_t - * float (single precision IEEE 754) - * double (double precision IEEE 754) - * - * This is designed to work in Node and v8. It may in fact work in other - * Javascript interpreters (that'd be pretty neat), but it hasn't been tested. - * If you find that it does in fact work, that's pretty cool. Try and pass word - * back to the original author. - * - * Note to the reader: If you're tabstop isn't set to 8, parts of this may look - * weird. - */ - -/* - * Numbers in Javascript have a secret: all numbers must be represented with an - * IEEE-754 double. The double has a mantissa with a length of 52 bits with an - * implicit one. Thus the range of integers that can be represented is limited - * to the size of the mantissa, this makes reading and writing 64-bit integers - * difficult, but far from impossible. - * - * Another side effect of this representation is what happens when you use the - * bitwise operators, i.e. shift left, shift right, and, or, etc. In Javascript, - * each operand and the result is cast to a signed 32-bit number. However, in - * the case of >>> the values are cast to an unsigned number. - */ - -/* - * A reminder on endian related issues: - * - * Big Endian: MSB -> First byte - * Little Endian: MSB->Last byte - */ -var mod_assert = require('assert'); - -/* - * An 8 bit unsigned integer involves doing no significant work. - */ -function ruint8(buffer, endian, offset) -{ - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - return (buffer[offset]); -} - -/* - * For 16 bit unsigned numbers we can do all the casting that we want to do. - */ -function rgint16(buffer, endian, offset) -{ - var val = 0; - - if (endian == 'big') { - val = buffer[offset] << 8; - val |= buffer[offset+1]; - } else { - val = buffer[offset]; - val |= buffer[offset+1] << 8; - } - - return (val); - -} - -function ruint16(buffer, endian, offset) -{ - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 1 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - return (rgint16(buffer, endian, offset)); -} - -/* - * Because most bitshifting is done using signed numbers, if we would go into - * the realm where we use that 32nd bit, we'll end up going into the negative - * range. i.e.: - * > 200 << 24 - * -939524096 - * - * Not the value you'd expect. To work around this, we end up having to do some - * abuse of the JavaScript standard. in this case, we know that a >>> shift is - * defined to cast our value to an *unsigned* 32-bit number. Because of that, we - * use that instead to save us some additional math, though it does feel a - * little weird and it isn't obvious as to why you woul dwant to do this at - * first. - */ -function rgint32(buffer, endian, offset) -{ - var val = 0; - - if (endian == 'big') { - val = buffer[offset+1] << 16; - val |= buffer[offset+2] << 8; - val |= buffer[offset+3]; - val = val + (buffer[offset] << 24 >>> 0); - } else { - val = buffer[offset+2] << 16; - val |= buffer[offset+1] << 8; - val |= buffer[offset]; - val = val + (buffer[offset + 3] << 24 >>> 0); - } - - return (val); -} - -function ruint32(buffer, endian, offset) -{ - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - return (rgint32(buffer, endian, offset)); -} - -/* - * Reads a 64-bit unsigned number. The astue observer will note that this - * doesn't quite work. Javascript has chosen to only have numbers that can be - * represented by a double. A double only has 52 bits of mantissa with an - * implicit 1, thus we have up to 53 bits to represent an integer. However, 2^53 - * doesn't quite give us what we want. Isn't 53 bits enough for anyone? What - * could you have possibly wanted to represent that was larger than that? Oh, - * maybe a size? You mean we bypassed the 4 GB limit on file sizes, when did - * that happen? - * - * To get around this egregious language issue, we're going to instead construct - * an array of two 32 bit unsigned integers. Where arr[0] << 32 + arr[1] would - * give the actual number. However, note that the above code probably won't - * produce the desired results because of the way Javascript numbers are - * doubles. - */ -function rgint64(buffer, endian, offset) -{ - var val = new Array(2); - - if (endian == 'big') { - val[0] = ruint32(buffer, endian, offset); - val[1] = ruint32(buffer, endian, offset+4); - } else { - val[0] = ruint32(buffer, endian, offset+4); - val[1] = ruint32(buffer, endian, offset); - } - - return (val); -} - -function ruint64(buffer, endian, offset) -{ - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - return (rgint64(buffer, endian, offset)); -} - - -/* - * Signed integer types, yay team! A reminder on how two's complement actually - * works. The first bit is the signed bit, i.e. tells us whether or not the - * number should be positive or negative. If the two's complement value is - * positive, then we're done, as it's equivalent to the unsigned representation. - * - * Now if the number is positive, you're pretty much done, you can just leverage - * the unsigned translations and return those. Unfortunately, negative numbers - * aren't quite that straightforward. - * - * At first glance, one might be inclined to use the traditional formula to - * translate binary numbers between the positive and negative values in two's - * complement. (Though it doesn't quite work for the most negative value) - * Mainly: - * - invert all the bits - * - add one to the result - * - * Of course, this doesn't quite work in Javascript. Take for example the value - * of -128. This could be represented in 16 bits (big-endian) as 0xff80. But of - * course, Javascript will do the following: - * - * > ~0xff80 - * -65409 - * - * Whoh there, Javascript, that's not quite right. But wait, according to - * Javascript that's perfectly correct. When Javascript ends up seeing the - * constant 0xff80, it has no notion that it is actually a signed number. It - * assumes that we've input the unsigned value 0xff80. Thus, when it does the - * binary negation, it casts it into a signed value, (positive 0xff80). Then - * when you perform binary negation on that, it turns it into a negative number. - * - * Instead, we're going to have to use the following general formula, that works - * in a rather Javascript friendly way. I'm glad we don't support this kind of - * weird numbering scheme in the kernel. - * - * (BIT-MAX - (unsigned)val + 1) * -1 - * - * The astute observer, may think that this doesn't make sense for 8-bit numbers - * (really it isn't necessary for them). However, when you get 16-bit numbers, - * you do. Let's go back to our prior example and see how this will look: - * - * (0xffff - 0xff80 + 1) * -1 - * (0x007f + 1) * -1 - * (0x0080) * -1 - * - * Doing it this way ends up allowing us to treat it appropriately in - * Javascript. Sigh, that's really quite ugly for what should just be a few bit - * shifts, ~ and &. - */ - -/* - * Endianness doesn't matter for 8-bit signed values. We could in fact optimize - * this case because the more traditional methods work, but for consistency, - * we'll keep doing this the same way. - */ -function rsint8(buffer, endian, offset) -{ - var neg; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - neg = buffer[offset] & 0x80; - if (!neg) - return (buffer[offset]); - - return ((0xff - buffer[offset] + 1) * -1); -} - -/* - * The 16-bit version requires a bit more effort. In this case, we can leverage - * our unsigned code to generate the value we want to return. - */ -function rsint16(buffer, endian, offset) -{ - var neg, val; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 1 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = rgint16(buffer, endian, offset); - neg = val & 0x8000; - if (!neg) - return (val); - - return ((0xffff - val + 1) * -1); -} - -/* - * We really shouldn't leverage our 32-bit code here and instead utilize the - * fact that we know that since these are signed numbers, we can do all the - * shifting and binary anding to generate the 32-bit number. But, for - * consistency we'll do the same. If we want to do otherwise, we should instead - * make the 32 bit unsigned code do the optimization. But as long as there - * aren't floats secretly under the hood for that, we /should/ be okay. - */ -function rsint32(buffer, endian, offset) -{ - var neg, val; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = rgint32(buffer, endian, offset); - neg = val & 0x80000000; - if (!neg) - return (val); - - return ((0xffffffff - val + 1) * -1); -} - -/* - * The signed version of this code suffers from all of the same problems of the - * other 64 bit version. - */ -function rsint64(buffer, endian, offset) -{ - var neg, val; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = rgint64(buffer, endian, offset); - neg = val[0] & 0x80000000; - - if (!neg) - return (val); - - val[0] = (0xffffffff - val[0]) * -1; - val[1] = (0xffffffff - val[1] + 1) * -1; - - /* - * If we had the key 0x8000000000000000, that would leave the lower 32 - * bits as 0xffffffff, however, since we're goint to add one, that would - * actually leave the lower 32-bits as 0x100000000, which would break - * our ability to write back a value that we received. To work around - * this, if we actually get that value, we're going to bump the upper - * portion by 1 and set this to zero. - */ - mod_assert.ok(val[1] <= 0x100000000); - if (val[1] == -0x100000000) { - val[1] = 0; - val[0]--; - } - - return (val); -} - -/* - * We now move onto IEEE 754: The traditional form for floating point numbers - * and what is secretly hiding at the heart of everything in this. I really hope - * that someone is actually using this, as otherwise, this effort is probably - * going to be more wasted. - * - * One might be tempted to use parseFloat here, but that wouldn't work at all - * for several reasons. Mostly due to the way floats actually work, and - * parseFloat only actually works in base 10. I don't see base 10 anywhere near - * this file. - * - * In this case we'll implement the single and double precision versions. The - * quadruple precision, while probably useful, wouldn't really be accepted by - * Javascript, so let's not even waste our time. - * - * So let's review how this format looks like. A single precision value is 32 - * bits and has three parts: - * - Sign bit - * - Exponent (Using bias notation) - * - Mantissa - * - * |s|eeeeeeee|mmmmmmmmmmmmmmmmmmmmmmmmm| - * 31| 30-23 | 22 - 0 | - * - * The exponent is stored in a biased input. The bias in this case 127. - * Therefore, our exponent is equal to the 8-bit value - 127. - * - * By default, a number is normalized in IEEE, that means that the mantissa has - * an implicit one that we don't see. So really the value stored is 1.m. - * However, if the exponent is all zeros, then instead we have to shift - * everything to the right one and there is no more implicit one. - * - * Special values: - * - Positive Infinity: - * Sign: 0 - * Exponent: All 1s - * Mantissa: 0 - * - Negative Infinity: - * Sign: 1 - * Exponent: All 1s - * Mantissa: 0 - * - NaN: - * Sign: * - * Exponent: All 1s - * Mantissa: non-zero - * - Zero: - * Sign: * - * Exponent: All 0s - * Mantissa: 0 - * - * In the case of zero, the sign bit determines whether we get a positive or - * negative zero. However, since Javascript cannot determine the difference - * between the two: i.e. -0 == 0, we just always return 0. - * - */ -function rfloat(buffer, endian, offset) -{ - var bytes = []; - var sign, exponent, mantissa, val; - var bias = 127; - var maxexp = 0xff; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - /* Normalize the bytes to be in endian order */ - if (endian == 'big') { - bytes[0] = buffer[offset]; - bytes[1] = buffer[offset+1]; - bytes[2] = buffer[offset+2]; - bytes[3] = buffer[offset+3]; - } else { - bytes[3] = buffer[offset]; - bytes[2] = buffer[offset+1]; - bytes[1] = buffer[offset+2]; - bytes[0] = buffer[offset+3]; - } - - sign = bytes[0] & 0x80; - exponent = (bytes[0] & 0x7f) << 1; - exponent |= (bytes[1] & 0x80) >>> 7; - mantissa = (bytes[1] & 0x7f) << 16; - mantissa |= bytes[2] << 8; - mantissa |= bytes[3]; - - /* Check for special cases before we do general parsing */ - if (!sign && exponent == maxexp && mantissa === 0) - return (Number.POSITIVE_INFINITY); - - if (sign && exponent == maxexp && mantissa === 0) - return (Number.NEGATIVE_INFINITY); - - if (exponent == maxexp && mantissa !== 0) - return (Number.NaN); - - /* - * Javascript really doesn't have support for positive or negative zero. - * So we're not going to try and give it to you. That would be just - * plain weird. Besides -0 == 0. - */ - if (exponent === 0 && mantissa === 0) - return (0); - - /* - * Now we can deal with the bias and the determine whether the mantissa - * has the implicit one or not. - */ - exponent -= bias; - if (exponent == -bias) { - exponent++; - val = 0; - } else { - val = 1; - } - - val = (val + mantissa * Math.pow(2, -23)) * Math.pow(2, exponent); - - if (sign) - val *= -1; - - return (val); -} - -/* - * Doubles in IEEE 754 are like their brothers except for a few changes and - * increases in size: - * - The exponent is now 11 bits - * - The mantissa is now 52 bits - * - The bias is now 1023 - * - * |s|eeeeeeeeeee|mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm| - * 63| 62 - 52 | 51 - 0 | - * 63| 62 - 52 | 51 - 0 | - * - * While the size has increased a fair amount, we're going to end up keeping the - * same general formula for calculating the final value. As a reminder, this - * formula is: - * - * (-1)^s * (n + m) * 2^(e-b) - * - * Where: - * s is the sign bit - * n is (exponent > 0) ? 1 : 0 -- Determines whether we're normalized - * or not - * m is the mantissa - * e is the exponent specified - * b is the bias for the exponent - * - */ -function rdouble(buffer, endian, offset) -{ - var bytes = []; - var sign, exponent, mantissa, val, lowmant; - var bias = 1023; - var maxexp = 0x7ff; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - /* Normalize the bytes to be in endian order */ - if (endian == 'big') { - bytes[0] = buffer[offset]; - bytes[1] = buffer[offset+1]; - bytes[2] = buffer[offset+2]; - bytes[3] = buffer[offset+3]; - bytes[4] = buffer[offset+4]; - bytes[5] = buffer[offset+5]; - bytes[6] = buffer[offset+6]; - bytes[7] = buffer[offset+7]; - } else { - bytes[7] = buffer[offset]; - bytes[6] = buffer[offset+1]; - bytes[5] = buffer[offset+2]; - bytes[4] = buffer[offset+3]; - bytes[3] = buffer[offset+4]; - bytes[2] = buffer[offset+5]; - bytes[1] = buffer[offset+6]; - bytes[0] = buffer[offset+7]; - } - - /* - * We can construct the exponent and mantissa the same way as we did in - * the case of a float, just increase the range of the exponent. - */ - sign = bytes[0] & 0x80; - exponent = (bytes[0] & 0x7f) << 4; - exponent |= (bytes[1] & 0xf0) >>> 4; - - /* - * This is going to be ugly but then again, we're dealing with IEEE 754. - * This could probably be done as a node add on in a few lines of C++, - * but oh we'll, we've made it this far so let's be native the rest of - * the way... - * - * What we're going to do is break the mantissa into two parts, the - * lower 24 bits and the upper 28 bits. We'll multiply the upper 28 bits - * by the appropriate power and then add in the lower 24-bits. Not - * really that great. It's pretty much a giant kludge to deal with - * Javascript eccentricities around numbers. - */ - lowmant = bytes[7]; - lowmant |= bytes[6] << 8; - lowmant |= bytes[5] << 16; - mantissa = bytes[4]; - mantissa |= bytes[3] << 8; - mantissa |= bytes[2] << 16; - mantissa |= (bytes[1] & 0x0f) << 24; - mantissa *= Math.pow(2, 24); /* Equivalent to << 24, but JS compat */ - mantissa += lowmant; - - /* Check for special cases before we do general parsing */ - if (!sign && exponent == maxexp && mantissa === 0) - return (Number.POSITIVE_INFINITY); - - if (sign && exponent == maxexp && mantissa === 0) - return (Number.NEGATIVE_INFINITY); - - if (exponent == maxexp && mantissa !== 0) - return (Number.NaN); - - /* - * Javascript really doesn't have support for positive or negative zero. - * So we're not going to try and give it to you. That would be just - * plain weird. Besides -0 == 0. - */ - if (exponent === 0 && mantissa === 0) - return (0); - - /* - * Now we can deal with the bias and the determine whether the mantissa - * has the implicit one or not. - */ - exponent -= bias; - if (exponent == -bias) { - exponent++; - val = 0; - } else { - val = 1; - } - - val = (val + mantissa * Math.pow(2, -52)) * Math.pow(2, exponent); - - if (sign) - val *= -1; - - return (val); -} - -/* - * Now that we have gone through the pain of reading the individual types, we're - * probably going to want some way to write these back. None of this is going to - * be good. But since we have Javascript numbers this should certainly be more - * interesting. Though we can constrain this end a little bit more in what is - * valid. For now, let's go back to our friends the unsigned value. - */ - -/* - * Unsigned numbers seem deceptively easy. Here are the general steps and rules - * that we are going to take: - * - If the number is negative, throw an Error - * - Truncate any floating point portion - * - Take the modulus of the number in our base - * - Write it out to the buffer in the endian format requested at the offset - */ - -/* - * We have to make sure that the value is a valid integer. This means that it is - * non-negative. It has no fractional component and that it does not exceed the - * maximum allowed value. - * - * value The number to check for validity - * - * max The maximum value - */ -function prepuint(value, max) -{ - if (typeof (value) != 'number') - throw (new (Error('cannot write a non-number as a number'))); - - if (value < 0) - throw (new Error('specified a negative value for writing an ' + - 'unsigned value')); - - if (value > max) - throw (new Error('value is larger than maximum value for ' + - 'type')); - - if (Math.floor(value) !== value) - throw (new Error('value has a fractional component')); - - return (value); -} - -/* - * 8-bit version, classy. We can ignore endianness which is good. - */ -function wuint8(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepuint(value, 0xff); - buffer[offset] = val; -} - -/* - * Pretty much the same as the 8-bit version, just this time we need to worry - * about endian related issues. - */ -function wgint16(val, endian, buffer, offset) -{ - if (endian == 'big') { - buffer[offset] = (val & 0xff00) >>> 8; - buffer[offset+1] = val & 0x00ff; - } else { - buffer[offset+1] = (val & 0xff00) >>> 8; - buffer[offset] = val & 0x00ff; - } -} - -function wuint16(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 1 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepuint(value, 0xffff); - wgint16(val, endian, buffer, offset); -} - -/* - * The 32-bit version is going to have to be a little different unfortunately. - * We can't quite bitshift to get the largest byte, because that would end up - * getting us caught by the signed values. - * - * And yes, we do want to subtract out the lower part by default. This means - * that when we do the division, it will be treated as a bit shift and we won't - * end up generating a floating point value. If we did generate a floating point - * value we'd have to truncate it intelligently, this saves us that problem and - * may even be somewhat faster under the hood. - */ -function wgint32(val, endian, buffer, offset) -{ - if (endian == 'big') { - buffer[offset] = (val - (val & 0x00ffffff)) / Math.pow(2, 24); - buffer[offset+1] = (val >>> 16) & 0xff; - buffer[offset+2] = (val >>> 8) & 0xff; - buffer[offset+3] = val & 0xff; - } else { - buffer[offset+3] = (val - (val & 0x00ffffff)) / - Math.pow(2, 24); - buffer[offset+2] = (val >>> 16) & 0xff; - buffer[offset+1] = (val >>> 8) & 0xff; - buffer[offset] = val & 0xff; - } -} - -function wuint32(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepuint(value, 0xffffffff); - wgint32(val, endian, buffer, offset); -} - -/* - * Unlike the other versions, we expect the value to be in the form of two - * arrays where value[0] << 32 + value[1] would result in the value that we - * want. - */ -function wgint64(value, endian, buffer, offset) -{ - if (endian == 'big') { - wgint32(value[0], endian, buffer, offset); - wgint32(value[1], endian, buffer, offset+4); - } else { - wgint32(value[0], endian, buffer, offset+4); - wgint32(value[1], endian, buffer, offset); - } -} - -function wuint64(value, endian, buffer, offset) -{ - if (value === undefined) - throw (new Error('missing value')); - - if (!(value instanceof Array)) - throw (new Error('value must be an array')); - - if (value.length != 2) - throw (new Error('value must be an array of length 2')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - prepuint(value[0], 0xffffffff); - prepuint(value[1], 0xffffffff); - wgint64(value, endian, buffer, offset); -} - -/* - * We now move onto our friends in the signed number category. Unlike unsigned - * numbers, we're going to have to worry a bit more about how we put values into - * arrays. Since we are only worrying about signed 32-bit values, we're in - * slightly better shape. Unfortunately, we really can't do our favorite binary - * & in this system. It really seems to do the wrong thing. For example: - * - * > -32 & 0xff - * 224 - * - * What's happening above is really: 0xe0 & 0xff = 0xe0. However, the results of - * this aren't treated as a signed number. Ultimately a bad thing. - * - * What we're going to want to do is basically create the unsigned equivalent of - * our representation and pass that off to the wuint* functions. To do that - * we're going to do the following: - * - * - if the value is positive - * we can pass it directly off to the equivalent wuint - * - if the value is negative - * we do the following computation: - * mb + val + 1, where - * mb is the maximum unsigned value in that byte size - * val is the Javascript negative integer - * - * - * As a concrete value, take -128. In signed 16 bits this would be 0xff80. If - * you do out the computations: - * - * 0xffff - 128 + 1 - * 0xffff - 127 - * 0xff80 - * - * You can then encode this value as the signed version. This is really rather - * hacky, but it should work and get the job done which is our goal here. - * - * Thus the overall flow is: - * - Truncate the floating point part of the number - * - We don't have to take the modulus, because the unsigned versions will - * take care of that for us. And we don't have to worry about that - * potentially causing bad things to happen because of sign extension - * - Pass it off to the appropriate unsigned version, potentially modifying - * the negative portions as necessary. - */ - -/* - * A series of checks to make sure we actually have a signed 32-bit number - */ -function prepsint(value, max, min) -{ - if (typeof (value) != 'number') - throw (new (Error('cannot write a non-number as a number'))); - - if (value > max) - throw (new Error('value larger than maximum allowed value')); - - if (value < min) - throw (new Error('value smaller than minimum allowed value')); - - if (Math.floor(value) !== value) - throw (new Error('value has a fractional component')); - - return (value); -} - -/* - * The 8-bit version of the signed value. Overall, fairly straightforward. - */ -function wsint8(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepsint(value, 0x7f, -0x80); - if (val >= 0) - wuint8(val, endian, buffer, offset); - else - wuint8(0xff + val + 1, endian, buffer, offset); -} - -/* - * The 16-bit version of the signed value. Also, fairly straightforward. - */ -function wsint16(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 1 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepsint(value, 0x7fff, -0x8000); - if (val >= 0) - wgint16(val, endian, buffer, offset); - else - wgint16(0xffff + val + 1, endian, buffer, offset); - -} - -/* - * We can do this relatively easily by leveraging the code used for 32-bit - * unsigned code. - */ -function wsint32(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepsint(value, 0x7fffffff, -0x80000000); - if (val >= 0) - wgint32(val, endian, buffer, offset); - else - wgint32(0xffffffff + val + 1, endian, buffer, offset); -} - -/* - * The signed 64 bit integer should by in the same format as when received. - * Mainly it should ensure that the value is an array of two integers where - * value[0] << 32 + value[1] is the desired number. Furthermore, the two values - * need to be equal. - */ -function wsint64(value, endian, buffer, offset) -{ - var vzpos, vopos; - var vals = new Array(2); - - if (value === undefined) - throw (new Error('missing value')); - - if (!(value instanceof Array)) - throw (new Error('value must be an array')); - - if (value.length != 2) - throw (new Error('value must be an array of length 2')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - /* - * We need to make sure that we have the same sign on both values. The - * hokiest way to to do this is to multiply the number by +inf. If we do - * this, we'll get either +/-inf depending on the sign of the value. - * Once we have this, we can compare it to +inf to see if the number is - * positive or not. - */ - vzpos = (value[0] * Number.POSITIVE_INFINITY) == - Number.POSITIVE_INFINITY; - vopos = (value[1] * Number.POSITIVE_INFINITY) == - Number.POSITIVE_INFINITY; - - /* - * If either of these is zero, then we don't actually need this check. - */ - if (value[0] != 0 && value[1] != 0 && vzpos != vopos) - throw (new Error('Both entries in the array must have ' + - 'the same sign')); - - /* - * Doing verification for a signed 64-bit integer is actually a big - * trickier than it appears. We can't quite use our standard techniques - * because we need to compare both sets of values. The first value is - * pretty straightforward. If the first value is beond the extremes than - * we error out. However, the valid range of the second value varies - * based on the first one. If the first value is negative, and *not* the - * largest negative value, than it can be any integer within the range [ - * 0, 0xffffffff ]. If it is the largest negative number, it must be - * zero. - * - * If the first number is positive, than it doesn't matter what the - * value is. We just simply have to make sure we have a valid positive - * integer. - */ - if (vzpos) { - prepuint(value[0], 0x7fffffff); - prepuint(value[1], 0xffffffff); - } else { - prepsint(value[0], 0, -0x80000000); - prepsint(value[1], 0, -0xffffffff); - if (value[0] == -0x80000000 && value[1] != 0) - throw (new Error('value smaller than minimum ' + - 'allowed value')); - } - - /* Fix negative numbers */ - if (value[0] < 0 || value[1] < 0) { - vals[0] = 0xffffffff - Math.abs(value[0]); - vals[1] = 0x100000000 - Math.abs(value[1]); - if (vals[1] == 0x100000000) { - vals[1] = 0; - vals[0]++; - } - } else { - vals[0] = value[0]; - vals[1] = value[1]; - } - wgint64(vals, endian, buffer, offset); -} - -/* - * Now we are moving onto the weirder of these, the float and double. For this - * we're going to just have to do something that's pretty weird. First off, we - * have no way to get at the underlying float representation, at least not - * easily. But that doesn't mean we can't figure it out, we just have to use our - * heads. - * - * One might propose to use Number.toString(2). Of course, this is not really - * that good, because the ECMAScript 262 v3 Standard says the following Section - * 15.7.4.2-Number.prototype.toString (radix): - * - * If radix is an integer from 2 to 36, but not 10, the result is a string, the - * choice of which is implementation-dependent. - * - * Well that doesn't really help us one bit now does it? We could use the - * standard base 10 version of the string, but that's just going to create more - * errors as we end up trying to convert it back to a binary value. So, really - * this just means we have to be non-lazy and parse the structure intelligently. - * - * First off, we can do the basic checks: NaN, positive and negative infinity. - * - * Now that those are done we can work backwards to generate the mantissa and - * exponent. - * - * The first thing we need to do is determine the sign bit, easy to do, check - * whether the value is less than 0. And convert the number to its absolute - * value representation. Next, we need to determine if the value is less than - * one or greater than or equal to one and from there determine what power was - * used to get there. What follows is now specific to floats, though the general - * ideas behind this will hold for doubles as well, but the exact numbers - * involved will change. - * - * Once we have that power we can determine the exponent and the mantissa. Call - * the value that has the number of bits to reach the power ebits. In the - * general case they have the following values: - * - * exponent 127 + ebits - * mantissa value * 2^(23 - ebits) & 0x7fffff - * - * In the case where the value of ebits is <= -127 we are now in the case where - * we no longer have normalized numbers. In this case the values take on the - * following values: - * - * exponent 0 - * mantissa value * 2^149 & 0x7fffff - * - * Once we have the values for the sign, mantissa, and exponent. We reconstruct - * the four bytes as follows: - * - * byte0 sign bit and seven most significant bits from the exp - * sign << 7 | (exponent & 0xfe) >>> 1 - * - * byte1 lsb from the exponent and 7 top bits from the mantissa - * (exponent & 0x01) << 7 | (mantissa & 0x7f0000) >>> 16 - * - * byte2 bits 8-15 (zero indexing) from mantissa - * mantissa & 0xff00 >> 8 - * - * byte3 bits 0-7 from mantissa - * mantissa & 0xff - * - * Once we have this we have to assign them into the buffer in proper endian - * order. - */ - -/* - * Compute the log base 2 of the value. Now, someone who remembers basic - * properties of logarithms will point out that we could use the change of base - * formula for logs, and in fact that would be astute, because that's what we'll - * do for now. It feels cleaner, albeit it may be less efficient than just - * iterating and dividing by 2. We may want to come back and revisit that some - * day. - */ -function log2(value) -{ - return (Math.log(value) / Math.log(2)); -} - -/* - * Helper to determine the exponent of the number we're looking at. - */ -function intexp(value) -{ - return (Math.floor(log2(value))); -} - -/* - * Helper to determine the exponent of the fractional part of the value. - */ -function fracexp(value) -{ - return (Math.floor(log2(value))); -} - -function wfloat(value, endian, buffer, offset) -{ - var sign, exponent, mantissa, ebits; - var bytes = []; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - if (isNaN(value)) { - sign = 0; - exponent = 0xff; - mantissa = 23; - } else if (value == Number.POSITIVE_INFINITY) { - sign = 0; - exponent = 0xff; - mantissa = 0; - } else if (value == Number.NEGATIVE_INFINITY) { - sign = 1; - exponent = 0xff; - mantissa = 0; - } else { - /* Well we have some work to do */ - - /* Thankfully the sign bit is trivial */ - if (value < 0) { - sign = 1; - value = Math.abs(value); - } else { - sign = 0; - } - - /* Use the correct function to determine number of bits */ - if (value < 1) - ebits = fracexp(value); - else - ebits = intexp(value); - - /* Time to deal with the issues surrounding normalization */ - if (ebits <= -127) { - exponent = 0; - mantissa = (value * Math.pow(2, 149)) & 0x7fffff; - } else { - exponent = 127 + ebits; - mantissa = value * Math.pow(2, 23 - ebits); - mantissa &= 0x7fffff; - } - } - - bytes[0] = sign << 7 | (exponent & 0xfe) >>> 1; - bytes[1] = (exponent & 0x01) << 7 | (mantissa & 0x7f0000) >>> 16; - bytes[2] = (mantissa & 0x00ff00) >>> 8; - bytes[3] = mantissa & 0x0000ff; - - if (endian == 'big') { - buffer[offset] = bytes[0]; - buffer[offset+1] = bytes[1]; - buffer[offset+2] = bytes[2]; - buffer[offset+3] = bytes[3]; - } else { - buffer[offset] = bytes[3]; - buffer[offset+1] = bytes[2]; - buffer[offset+2] = bytes[1]; - buffer[offset+3] = bytes[0]; - } -} - -/* - * Now we move onto doubles. Doubles are similar to floats in pretty much all - * ways except that the processing isn't quite as straightforward because we - * can't always use shifting, i.e. we have > 32 bit values. - * - * We're going to proceed in an identical fashion to floats and utilize the same - * helper functions. All that really is changing are the specific values that we - * use to do the calculations. Thus, to review we have to do the following. - * - * First get the sign bit and convert the value to its absolute value - * representation. Next, we determine the number of bits that we used to get to - * the value, branching whether the value is greater than or less than 1. Once - * we have that value which we will again call ebits, we have to do the - * following in the general case: - * - * exponent 1023 + ebits - * mantissa [value * 2^(52 - ebits)] % 2^52 - * - * In the case where the value of ebits <= -1023 we no longer use normalized - * numbers, thus like with floats we have to do slightly different processing: - * - * exponent 0 - * mantissa [value * 2^1074] % 2^52 - * - * Once we have determined the sign, exponent and mantissa we can construct the - * bytes as follows: - * - * byte0 sign bit and seven most significant bits form the exp - * sign << 7 | (exponent & 0x7f0) >>> 4 - * - * byte1 Remaining 4 bits from the exponent and the four most - * significant bits from the mantissa 48-51 - * (exponent & 0x00f) << 4 | mantissa >>> 48 - * - * byte2 Bits 40-47 from the mantissa - * (mantissa >>> 40) & 0xff - * - * byte3 Bits 32-39 from the mantissa - * (mantissa >>> 32) & 0xff - * - * byte4 Bits 24-31 from the mantissa - * (mantissa >>> 24) & 0xff - * - * byte5 Bits 16-23 from the Mantissa - * (mantissa >>> 16) & 0xff - * - * byte6 Bits 8-15 from the mantissa - * (mantissa >>> 8) & 0xff - * - * byte7 Bits 0-7 from the mantissa - * mantissa & 0xff - * - * Now we can't quite do the right shifting that we want in bytes 1 - 3, because - * we'll have extended too far and we'll lose those values when we try and do - * the shift. Instead we have to use an alternate approach. To try and stay out - * of floating point, what we'll do is say that mantissa -= bytes[4-7] and then - * divide by 2^32. Once we've done that we can use binary arithmetic. Oof, - * that's ugly, but it seems to avoid using floating point (just based on how v8 - * seems to be optimizing for base 2 arithmetic). - */ -function wdouble(value, endian, buffer, offset) -{ - var sign, exponent, mantissa, ebits; - var bytes = []; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - if (isNaN(value)) { - sign = 0; - exponent = 0x7ff; - mantissa = 23; - } else if (value == Number.POSITIVE_INFINITY) { - sign = 0; - exponent = 0x7ff; - mantissa = 0; - } else if (value == Number.NEGATIVE_INFINITY) { - sign = 1; - exponent = 0x7ff; - mantissa = 0; - } else { - /* Well we have some work to do */ - - /* Thankfully the sign bit is trivial */ - if (value < 0) { - sign = 1; - value = Math.abs(value); - } else { - sign = 0; - } - - /* Use the correct function to determine number of bits */ - if (value < 1) - ebits = fracexp(value); - else - ebits = intexp(value); - - /* - * This is a total hack to determine a denormalized value. - * Unfortunately, we sometimes do not get a proper value for - * ebits, i.e. we lose the values that would get rounded off. - * - * - * The astute observer may wonder why we would be - * multiplying by two Math.pows rather than just summing - * them. Well, that's to get around a small bug in the - * way v8 seems to implement the function. On occasion - * doing: - * - * foo * Math.pow(2, 1023 + 51) - * - * Causes us to overflow to infinity, where as doing: - * - * foo * Math.pow(2, 1023) * Math.pow(2, 51) - * - * Does not cause us to overflow. Go figure. - * - */ - if (value <= 2.225073858507201e-308 || ebits <= -1023) { - exponent = 0; - mantissa = value * Math.pow(2, 1023) * Math.pow(2, 51); - mantissa %= Math.pow(2, 52); - } else { - /* - * We might have gotten fucked by our floating point - * logarithm magic. This is rather crappy, but that's - * our luck. If we just had a log base 2 or access to - * the stupid underlying representation this would have - * been much easier and we wouldn't have such stupid - * kludges or hacks. - */ - if (ebits > 1023) - ebits = 1023; - exponent = 1023 + ebits; - mantissa = value * Math.pow(2, -ebits); - mantissa *= Math.pow(2, 52); - mantissa %= Math.pow(2, 52); - } - } - - /* Fill the bytes in backwards to deal with the size issues */ - bytes[7] = mantissa & 0xff; - bytes[6] = (mantissa >>> 8) & 0xff; - bytes[5] = (mantissa >>> 16) & 0xff; - mantissa = (mantissa - (mantissa & 0xffffff)) / Math.pow(2, 24); - bytes[4] = mantissa & 0xff; - bytes[3] = (mantissa >>> 8) & 0xff; - bytes[2] = (mantissa >>> 16) & 0xff; - bytes[1] = (exponent & 0x00f) << 4 | mantissa >>> 24; - bytes[0] = (sign << 7) | (exponent & 0x7f0) >>> 4; - - if (endian == 'big') { - buffer[offset] = bytes[0]; - buffer[offset+1] = bytes[1]; - buffer[offset+2] = bytes[2]; - buffer[offset+3] = bytes[3]; - buffer[offset+4] = bytes[4]; - buffer[offset+5] = bytes[5]; - buffer[offset+6] = bytes[6]; - buffer[offset+7] = bytes[7]; - } else { - buffer[offset+7] = bytes[0]; - buffer[offset+6] = bytes[1]; - buffer[offset+5] = bytes[2]; - buffer[offset+4] = bytes[3]; - buffer[offset+3] = bytes[4]; - buffer[offset+2] = bytes[5]; - buffer[offset+1] = bytes[6]; - buffer[offset] = bytes[7]; - } -} - -/* - * Actually export our work above. One might argue that we shouldn't expose - * these interfaces and just force people to use the higher level abstractions - * around this work. However, unlike say other libraries we've come across, this - * interface has several properties: it makes sense, it's simple, and it's - * useful. - */ -exports.ruint8 = ruint8; -exports.ruint16 = ruint16; -exports.ruint32 = ruint32; -exports.ruint64 = ruint64; -exports.wuint8 = wuint8; -exports.wuint16 = wuint16; -exports.wuint32 = wuint32; -exports.wuint64 = wuint64; - -exports.rsint8 = rsint8; -exports.rsint16 = rsint16; -exports.rsint32 = rsint32; -exports.rsint64 = rsint64; -exports.wsint8 = wsint8; -exports.wsint16 = wsint16; -exports.wsint32 = wsint32; -exports.wsint64 = wsint64; - -exports.rfloat = rfloat; -exports.rdouble = rdouble; -exports.wfloat = wfloat; -exports.wdouble = wdouble; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js deleted file mode 100644 index 7d2f4a5a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js +++ /dev/null @@ -1,944 +0,0 @@ -/* - * rm - Feb 2011 - * ctype.js - * - * This module provides a simple abstraction towards reading and writing - * different types of binary data. It is designed to use ctio.js and provide a - * richer and more expressive API on top of it. - * - * By default we support the following as built in basic types: - * int8_t - * int16_t - * int32_t - * uint8_t - * uint16_t - * uint32_t - * uint64_t - * float - * double - * char - * char[] - * - * Each type is returned as a Number, with the exception of char and char[] - * which are returned as Node Buffers. A char is considered a uint8_t. - * - * Requests to read and write data are specified as an array of JSON objects. - * This is also the same way that one declares structs. Even if just a single - * value is requested, it must be done as a struct. The array order determines - * the order that we try and read values. Each entry has the following format - * with values marked with a * being optional. - * - * { key: { type: /type/, value*: /value/, offset*: /offset/ } - * - * If offset is defined, we lseek(offset, SEEK_SET) before reading the next - * value. Value is defined when we're writing out data, otherwise it's ignored. - * - */ - -var mod_ctf = require('./ctf.js'); -var mod_ctio = require('./ctio.js'); -var mod_assert = require('assert'); - -/* - * This is the set of basic types that we support. - * - * read The function to call to read in a value from a buffer - * - * write The function to call to write a value to a buffer - * - */ -var deftypes = { - 'uint8_t': { read: ctReadUint8, write: ctWriteUint8 }, - 'uint16_t': { read: ctReadUint16, write: ctWriteUint16 }, - 'uint32_t': { read: ctReadUint32, write: ctWriteUint32 }, - 'uint64_t': { read: ctReadUint64, write: ctWriteUint64 }, - 'int8_t': { read: ctReadSint8, write: ctWriteSint8 }, - 'int16_t': { read: ctReadSint16, write: ctWriteSint16 }, - 'int32_t': { read: ctReadSint32, write: ctWriteSint32 }, - 'int64_t': { read: ctReadSint64, write: ctWriteSint64 }, - 'float': { read: ctReadFloat, write: ctWriteFloat }, - 'double': { read: ctReadDouble, write: ctWriteDouble }, - 'char': { read: ctReadChar, write: ctWriteChar }, - 'char[]': { read: ctReadCharArray, write: ctWriteCharArray } -}; - -/* - * The following are wrappers around the CType IO low level API. They encode - * knowledge about the size and return something in the expected format. - */ -function ctReadUint8(endian, buffer, offset) -{ - var val = mod_ctio.ruint8(buffer, endian, offset); - return ({ value: val, size: 1 }); -} - -function ctReadUint16(endian, buffer, offset) -{ - var val = mod_ctio.ruint16(buffer, endian, offset); - return ({ value: val, size: 2 }); -} - -function ctReadUint32(endian, buffer, offset) -{ - var val = mod_ctio.ruint32(buffer, endian, offset); - return ({ value: val, size: 4 }); -} - -function ctReadUint64(endian, buffer, offset) -{ - var val = mod_ctio.ruint64(buffer, endian, offset); - return ({ value: val, size: 8 }); -} - -function ctReadSint8(endian, buffer, offset) -{ - var val = mod_ctio.rsint8(buffer, endian, offset); - return ({ value: val, size: 1 }); -} - -function ctReadSint16(endian, buffer, offset) -{ - var val = mod_ctio.rsint16(buffer, endian, offset); - return ({ value: val, size: 2 }); -} - -function ctReadSint32(endian, buffer, offset) -{ - var val = mod_ctio.rsint32(buffer, endian, offset); - return ({ value: val, size: 4 }); -} - -function ctReadSint64(endian, buffer, offset) -{ - var val = mod_ctio.rsint64(buffer, endian, offset); - return ({ value: val, size: 8 }); -} - -function ctReadFloat(endian, buffer, offset) -{ - var val = mod_ctio.rfloat(buffer, endian, offset); - return ({ value: val, size: 4 }); -} - -function ctReadDouble(endian, buffer, offset) -{ - var val = mod_ctio.rdouble(buffer, endian, offset); - return ({ value: val, size: 8 }); -} - -/* - * Reads a single character into a node buffer - */ -function ctReadChar(endian, buffer, offset) -{ - var res = new Buffer(1); - res[0] = mod_ctio.ruint8(buffer, endian, offset); - return ({ value: res, size: 1 }); -} - -function ctReadCharArray(length, endian, buffer, offset) -{ - var ii; - var res = new Buffer(length); - - for (ii = 0; ii < length; ii++) - res[ii] = mod_ctio.ruint8(buffer, endian, offset + ii); - - return ({ value: res, size: length }); -} - -function ctWriteUint8(value, endian, buffer, offset) -{ - mod_ctio.wuint8(value, endian, buffer, offset); - return (1); -} - -function ctWriteUint16(value, endian, buffer, offset) -{ - mod_ctio.wuint16(value, endian, buffer, offset); - return (2); -} - -function ctWriteUint32(value, endian, buffer, offset) -{ - mod_ctio.wuint32(value, endian, buffer, offset); - return (4); -} - -function ctWriteUint64(value, endian, buffer, offset) -{ - mod_ctio.wuint64(value, endian, buffer, offset); - return (8); -} - -function ctWriteSint8(value, endian, buffer, offset) -{ - mod_ctio.wsint8(value, endian, buffer, offset); - return (1); -} - -function ctWriteSint16(value, endian, buffer, offset) -{ - mod_ctio.wsint16(value, endian, buffer, offset); - return (2); -} - -function ctWriteSint32(value, endian, buffer, offset) -{ - mod_ctio.wsint32(value, endian, buffer, offset); - return (4); -} - -function ctWriteSint64(value, endian, buffer, offset) -{ - mod_ctio.wsint64(value, endian, buffer, offset); - return (8); -} - -function ctWriteFloat(value, endian, buffer, offset) -{ - mod_ctio.wfloat(value, endian, buffer, offset); - return (4); -} - -function ctWriteDouble(value, endian, buffer, offset) -{ - mod_ctio.wdouble(value, endian, buffer, offset); - return (8); -} - -/* - * Writes a single character into a node buffer - */ -function ctWriteChar(value, endian, buffer, offset) -{ - if (!(value instanceof Buffer)) - throw (new Error('Input must be a buffer')); - - mod_ctio.ruint8(value[0], endian, buffer, offset); - return (1); -} - -/* - * We're going to write 0s into the buffer if the string is shorter than the - * length of the array. - */ -function ctWriteCharArray(value, length, endian, buffer, offset) -{ - var ii; - - if (!(value instanceof Buffer)) - throw (new Error('Input must be a buffer')); - - if (value.length > length) - throw (new Error('value length greater than array length')); - - for (ii = 0; ii < value.length && ii < length; ii++) - mod_ctio.wuint8(value[ii], endian, buffer, offset + ii); - - for (; ii < length; ii++) - mod_ctio.wuint8(0, endian, offset + ii); - - - return (length); -} - -/* - * Each parser has their own set of types. We want to make sure that they each - * get their own copy as they may need to modify it. - */ -function ctGetBasicTypes() -{ - var ret = {}; - var key; - for (key in deftypes) - ret[key] = deftypes[key]; - - return (ret); -} - -/* - * Given a string in the form of type[length] we want to split this into an - * object that extracts that information. We want to note that we could possibly - * have nested arrays so this should only check the furthest one. It may also be - * the case that we have no [] pieces, in which case we just return the current - * type. - */ -function ctParseType(str) -{ - var begInd, endInd; - var type, len; - if (typeof (str) != 'string') - throw (new Error('type must be a Javascript string')); - - endInd = str.lastIndexOf(']'); - if (endInd == -1) { - if (str.lastIndexOf('[') != -1) - throw (new Error('found invalid type with \'[\' but ' + - 'no corresponding \']\'')); - - return ({ type: str }); - } - - begInd = str.lastIndexOf('['); - if (begInd == -1) - throw (new Error('found invalid type with \']\' but ' + - 'no corresponding \'[\'')); - - if (begInd >= endInd) - throw (new Error('malformed type, \']\' appears before \'[\'')); - - type = str.substring(0, begInd); - len = str.substring(begInd + 1, endInd); - - return ({ type: type, len: len }); -} - -/* - * Given a request validate that all of the fields for it are valid and make - * sense. This includes verifying the following notions: - * - Each type requested is present in types - * - Only allow a name for a field to be specified once - * - If an array is specified, validate that the requested field exists and - * comes before it. - * - If fields is defined, check that each entry has the occurrence of field - */ -function ctCheckReq(def, types, fields) -{ - var ii, jj; - var req, keys, key; - var found = {}; - - if (!(def instanceof Array)) - throw (new Error('definition is not an array')); - - if (def.length === 0) - throw (new Error('definition must have at least one element')); - - for (ii = 0; ii < def.length; ii++) { - req = def[ii]; - if (!(req instanceof Object)) - throw (new Error('definition must be an array of' + - 'objects')); - - keys = Object.keys(req); - if (keys.length != 1) - throw (new Error('definition entry must only have ' + - 'one key')); - - if (keys[0] in found) - throw (new Error('Specified name already ' + - 'specified: ' + keys[0])); - - if (!('type' in req[keys[0]])) - throw (new Error('missing required type definition')); - - key = ctParseType(req[keys[0]]['type']); - - /* - * We may have nested arrays, we need to check the validity of - * the types until the len field is undefined in key. However, - * each time len is defined we need to verify it is either an - * integer or corresponds to an already seen key. - */ - while (key['len'] !== undefined) { - if (isNaN(parseInt(key['len'], 10))) { - if (!(key['len'] in found)) - throw (new Error('Given an array ' + - 'length without a matching type')); - - } - - key = ctParseType(key['type']); - } - - /* Now we can validate if the type is valid */ - if (!(key['type'] in types)) - throw (new Error('type not found or typdefed: ' + - key['type'])); - - /* Check for any required fields */ - if (fields !== undefined) { - for (jj = 0; jj < fields.length; jj++) { - if (!(fields[jj] in req[keys[0]])) - throw (new Error('Missing required ' + - 'field: ' + fields[jj])); - } - } - - found[keys[0]] = true; - } -} - - -/* - * Create a new instance of the parser. Each parser has its own store of - * typedefs and endianness. Conf is an object with the following required - * values: - * - * endian Either 'big' or 'little' do determine the endianness we - * want to read from or write to. - * - * And the following optional values: - * - * char-type Valid options here are uint8 and int8. If uint8 is - * specified this changes the default behavior of a single - * char from being a buffer of a single character to being - * a uint8_t. If int8, it becomes an int8_t instead. - */ -function CTypeParser(conf) -{ - if (!conf) throw (new Error('missing required argument')); - - if (!('endian' in conf)) - throw (new Error('missing required endian value')); - - if (conf['endian'] != 'big' && conf['endian'] != 'little') - throw (new Error('Invalid endian type')); - - if ('char-type' in conf && (conf['char-type'] != 'uint8' && - conf['char-type'] != 'int8')) - throw (new Error('invalid option for char-type: ' + - conf['char-type'])); - - this.endian = conf['endian']; - this.types = ctGetBasicTypes(); - - /* - * There may be a more graceful way to do this, but this will have to - * serve. - */ - if ('char-type' in conf && conf['char-type'] == 'uint8') - this.types['char'] = this.types['uint8_t']; - - if ('char-type' in conf && conf['char-type'] == 'int8') - this.types['char'] = this.types['int8_t']; -} - -/* - * Sets the current endian value for the Parser. If the value is not valid, - * throws an Error. - * - * endian Either 'big' or 'little' do determine the endianness we - * want to read from or write to. - * - */ -CTypeParser.prototype.setEndian = function (endian) -{ - if (endian != 'big' && endian != 'little') - throw (new Error('invalid endian type, must be big or ' + - 'little')); - - this.endian = endian; -}; - -/* - * Returns the current value of the endian value for the parser. - */ -CTypeParser.prototype.getEndian = function () -{ - return (this.endian); -}; - -/* - * A user has requested to add a type, let us honor their request. Yet, if their - * request doth spurn us, send them unto the Hells which Dante describes. - * - * name The string for the type definition we're adding - * - * value Either a string that is a type/array name or an object - * that describes a struct. - */ -CTypeParser.prototype.typedef = function (name, value) -{ - var type; - - if (name === undefined) - throw (new (Error('missing required typedef argument: name'))); - - if (value === undefined) - throw (new (Error('missing required typedef argument: value'))); - - if (typeof (name) != 'string') - throw (new (Error('the name of a type must be a string'))); - - type = ctParseType(name); - - if (type['len'] !== undefined) - throw (new Error('Cannot have an array in the typedef name')); - - if (name in this.types) - throw (new Error('typedef name already present: ' + name)); - - if (typeof (value) != 'string' && !(value instanceof Array)) - throw (new Error('typedef value must either be a string or ' + - 'struct')); - - if (typeof (value) == 'string') { - type = ctParseType(value); - if (type['len'] !== undefined) { - if (isNaN(parseInt(type['len'], 10))) - throw (new (Error('typedef value must use ' + - 'fixed size array when outside of a ' + - 'struct'))); - } - - this.types[name] = value; - } else { - /* We have a struct, validate it */ - ctCheckReq(value, this.types); - this.types[name] = value; - } -}; - -/* - * Include all of the typedefs, but none of the built in types. This should be - * treated as read-only. - */ -CTypeParser.prototype.lstypes = function () -{ - var key; - var ret = {}; - - for (key in this.types) { - if (key in deftypes) - continue; - ret[key] = this.types[key]; - } - - return (ret); -}; - -/* - * Given a type string that may have array types that aren't numbers, try and - * fill them in from the values object. The object should be of the format where - * indexing into it should return a number for that type. - * - * str The type string - * - * values An object that can be used to fulfill type information - */ -function ctResolveArray(str, values) -{ - var ret = ''; - var type = ctParseType(str); - - while (type['len'] !== undefined) { - if (isNaN(parseInt(type['len'], 10))) { - if (typeof (values[type['len']]) != 'number') - throw (new Error('cannot sawp in non-number ' + - 'for array value')); - ret = '[' + values[type['len']] + ']' + ret; - } else { - ret = '[' + type['len'] + ']' + ret; - } - type = ctParseType(type['type']); - } - - ret = type['type'] + ret; - - return (ret); -} - -/* - * [private] Either the typedef resolves to another type string or to a struct. - * If it resolves to a struct, we just pass it off to read struct. If not, we - * can just pass it off to read entry. - */ -CTypeParser.prototype.resolveTypedef = function (type, dispatch, buffer, - offset, value) -{ - var pt; - - mod_assert.ok(type in this.types); - if (typeof (this.types[type]) == 'string') { - pt = ctParseType(this.types[type]); - if (dispatch == 'read') - return (this.readEntry(pt, buffer, offset)); - else if (dispatch == 'write') - return (this.writeEntry(value, pt, buffer, offset)); - else - throw (new Error('invalid dispatch type to ' + - 'resolveTypedef')); - } else { - if (dispatch == 'read') - return (this.readStruct(this.types[type], buffer, - offset)); - else if (dispatch == 'write') - return (this.writeStruct(value, this.types[type], - buffer, offset)); - else - throw (new Error('invalid dispatch type to ' + - 'resolveTypedef')); - } - -}; - -/* - * [private] Try and read in the specific entry. - */ -CTypeParser.prototype.readEntry = function (type, buffer, offset) -{ - var parse, len; - - /* - * Because we want to special case char[]s this is unfortunately - * a bit uglier than it really should be. We want to special - * case char[]s so that we return a node buffer, thus they are a - * first class type where as all other arrays just call into a - * generic array routine which calls their data-specific routine - * the specified number of times. - * - * The valid dispatch options we have are: - * - Array and char => char[] handler - * - Generic array handler - * - Generic typedef handler - * - Basic type handler - */ - if (type['len'] !== undefined) { - len = parseInt(type['len'], 10); - if (isNaN(len)) - throw (new Error('somehow got a non-numeric length')); - - if (type['type'] == 'char') - parse = this.types['char[]']['read'](len, - this.endian, buffer, offset); - else - parse = this.readArray(type['type'], - len, buffer, offset); - } else { - if (type['type'] in deftypes) - parse = this.types[type['type']]['read'](this.endian, - buffer, offset); - else - parse = this.resolveTypedef(type['type'], 'read', - buffer, offset); - } - - return (parse); -}; - -/* - * [private] Read an array of data - */ -CTypeParser.prototype.readArray = function (type, length, buffer, offset) -{ - var ii, ent, pt; - var baseOffset = offset; - var ret = new Array(length); - pt = ctParseType(type); - - for (ii = 0; ii < length; ii++) { - ent = this.readEntry(pt, buffer, offset); - offset += ent['size']; - ret[ii] = ent['value']; - } - - return ({ value: ret, size: offset - baseOffset }); -}; - -/* - * [private] Read a single struct in. - */ -CTypeParser.prototype.readStruct = function (def, buffer, offset) -{ - var parse, ii, type, entry, key; - var baseOffset = offset; - var ret = {}; - - /* Walk it and handle doing what's necessary */ - for (ii = 0; ii < def.length; ii++) { - key = Object.keys(def[ii])[0]; - entry = def[ii][key]; - - /* Resolve all array values */ - type = ctParseType(ctResolveArray(entry['type'], ret)); - - if ('offset' in entry) - offset = baseOffset + entry['offset']; - - parse = this.readEntry(type, buffer, offset); - - offset += parse['size']; - ret[key] = parse['value']; - } - - return ({ value: ret, size: (offset-baseOffset)}); -}; - -/* - * This is what we were born to do. We read the data from a buffer and return it - * in an object whose keys match the values from the object. - * - * def The array definition of the data to read in - * - * buffer The buffer to read data from - * - * offset The offset to start writing to - * - * Returns an object where each key corresponds to an entry in def and the value - * is the read value. - */ -CTypeParser.prototype.readData = function (def, buffer, offset) -{ - /* Sanity check for arguments */ - if (def === undefined) - throw (new Error('missing definition for what we should be' + - 'parsing')); - - if (buffer === undefined) - throw (new Error('missing buffer for what we should be ' + - 'parsing')); - - if (offset === undefined) - throw (new Error('missing offset for what we should be ' + - 'parsing')); - - /* Sanity check the object definition */ - ctCheckReq(def, this.types); - - return (this.readStruct(def, buffer, offset)['value']); -}; - -/* - * [private] Write out an array of data - */ -CTypeParser.prototype.writeArray = function (value, type, length, buffer, - offset) -{ - var ii, pt; - var baseOffset = offset; - if (!(value instanceof Array)) - throw (new Error('asked to write an array, but value is not ' + - 'an array')); - - if (value.length != length) - throw (new Error('asked to write array of length ' + length + - ' but that does not match value length: ' + value.length)); - - pt = ctParseType(type); - for (ii = 0; ii < length; ii++) - offset += this.writeEntry(value[ii], pt, buffer, offset); - - return (offset - baseOffset); -}; - -/* - * [private] Write the specific entry - */ -CTypeParser.prototype.writeEntry = function (value, type, buffer, offset) -{ - var len, ret; - - if (type['len'] !== undefined) { - len = parseInt(type['len'], 10); - if (isNaN(len)) - throw (new Error('somehow got a non-numeric length')); - - if (type['type'] == 'char') - ret = this.types['char[]']['write'](value, len, - this.endian, buffer, offset); - else - ret = this.writeArray(value, type['type'], - len, buffer, offset); - } else { - if (type['type'] in deftypes) - ret = this.types[type['type']]['write'](value, - this.endian, buffer, offset); - else - ret = this.resolveTypedef(type['type'], 'write', - buffer, offset, value); - } - - return (ret); -}; - -/* - * [private] Write a single struct out. - */ -CTypeParser.prototype.writeStruct = function (value, def, buffer, offset) -{ - var ii, entry, type, key; - var baseOffset = offset; - var vals = {}; - - for (ii = 0; ii < def.length; ii++) { - key = Object.keys(def[ii])[0]; - entry = def[ii][key]; - - type = ctParseType(ctResolveArray(entry['type'], vals)); - - if ('offset' in entry) - offset = baseOffset + entry['offset']; - - offset += this.writeEntry(value[ii], type, buffer, offset); - /* Now that we've written it out, we can use it for arrays */ - vals[key] = value[ii]; - } - - return (offset); -}; - -/* - * Unfortunately, we're stuck with the sins of an initial poor design. Because - * of that, we are going to have to support the old way of writing data via - * writeData. There we insert the values that you want to write into the - * definition. A little baroque. Internally, we use the new model. So we need to - * just get those values out of there. But to maintain the principle of least - * surprise, we're not going to modify the input data. - */ -function getValues(def) -{ - var ii, out, key; - out = []; - for (ii = 0; ii < def.length; ii++) { - key = Object.keys(def[ii])[0]; - mod_assert.ok('value' in def[ii][key]); - out.push(def[ii][key]['value']); - } - - return (out); -} - -/* - * This is the second half of what we were born to do, write out the data - * itself. Historically this function required you to put your values in the - * definition section. This was not the smartest thing to do and a bit of an - * oversight to be honest. As such, this function now takes a values argument. - * If values is non-null and non-undefined, it will be used to determine the - * values. This means that the old method is still supported, but is no longer - * acceptable. - * - * def The array definition of the data to write out with - * values - * - * buffer The buffer to write to - * - * offset The offset in the buffer to write to - * - * values An array of values to write. - */ -CTypeParser.prototype.writeData = function (def, buffer, offset, values) -{ - var hv; - - if (def === undefined) - throw (new Error('missing definition for what we should be' + - 'parsing')); - - if (buffer === undefined) - throw (new Error('missing buffer for what we should be ' + - 'parsing')); - - if (offset === undefined) - throw (new Error('missing offset for what we should be ' + - 'parsing')); - - hv = (values != null && values != undefined); - if (hv) { - if (!Array.isArray(values)) - throw (new Error('missing values for writing')); - ctCheckReq(def, this.types); - } else { - ctCheckReq(def, this.types, [ 'value' ]); - } - - this.writeStruct(hv ? values : getValues(def), def, buffer, offset); -}; - -/* - * Functions to go to and from 64 bit numbers in a way that is compatible with - * Javascript limitations. There are two sets. One where the user is okay with - * an approximation and one where they are definitely not okay with an - * approximation. - */ - -/* - * Attempts to convert an array of two integers returned from rsint64 / ruint64 - * into an absolute 64 bit number. If however the value would exceed 2^52 this - * will instead throw an error. The mantissa in a double is a 52 bit number and - * rather than potentially give you a value that is an approximation this will - * error. If you would rather an approximation, please see toApprox64. - * - * val An array of two 32-bit integers - */ -function toAbs64(val) -{ - if (val === undefined) - throw (new Error('missing required arg: value')); - - if (!Array.isArray(val)) - throw (new Error('value must be an array')); - - if (val.length != 2) - throw (new Error('value must be an array of length 2')); - - /* We have 20 bits worth of precision in this range */ - if (val[0] >= 0x100000) - throw (new Error('value would become approximated')); - - return (val[0] * Math.pow(2, 32) + val[1]); -} - -/* - * Will return the 64 bit value as returned in an array from rsint64 / ruint64 - * to a value as close as it can. Note that Javascript stores all numbers as a - * double and the mantissa only has 52 bits. Thus this version may approximate - * the value. - * - * val An array of two 32-bit integers - */ -function toApprox64(val) -{ - if (val === undefined) - throw (new Error('missing required arg: value')); - - if (!Array.isArray(val)) - throw (new Error('value must be an array')); - - if (val.length != 2) - throw (new Error('value must be an array of length 2')); - - return (Math.pow(2, 32) * val[0] + val[1]); -} - -function parseCTF(json, conf) -{ - var ctype = new CTypeParser(conf); - mod_ctf.ctfParseJson(json, ctype); - - return (ctype); -} - -/* - * Export the few things we actually want to. Currently this is just the CType - * Parser and ctio. - */ -exports.Parser = CTypeParser; -exports.toAbs64 = toAbs64; -exports.toApprox64 = toApprox64; - -exports.parseCTF = parseCTF; - -exports.ruint8 = mod_ctio.ruint8; -exports.ruint16 = mod_ctio.ruint16; -exports.ruint32 = mod_ctio.ruint32; -exports.ruint64 = mod_ctio.ruint64; -exports.wuint8 = mod_ctio.wuint8; -exports.wuint16 = mod_ctio.wuint16; -exports.wuint32 = mod_ctio.wuint32; -exports.wuint64 = mod_ctio.wuint64; - -exports.rsint8 = mod_ctio.rsint8; -exports.rsint16 = mod_ctio.rsint16; -exports.rsint32 = mod_ctio.rsint32; -exports.rsint64 = mod_ctio.rsint64; -exports.wsint8 = mod_ctio.wsint8; -exports.wsint16 = mod_ctio.wsint16; -exports.wsint32 = mod_ctio.wsint32; -exports.wsint64 = mod_ctio.wsint64; - -exports.rfloat = mod_ctio.rfloat; -exports.rdouble = mod_ctio.rdouble; -exports.wfloat = mod_ctio.wfloat; -exports.wdouble = mod_ctio.wdouble; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype deleted file mode 100644 index 3f94986a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype +++ /dev/null @@ -1,241 +0,0 @@ -'\" te -.\" Copyright (c) 2011, Robert Mustacchi. All Rights Reserved. -.\" Copyright (c) 2011, Joyent, Inc. 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. -.TH CTIO 3CTYPE "December 12, 2011" -.SH NAME -ctio, ruint8, ruint16, ruint32, ruint64, wuint8, wuint16, wuint32, wuint64, -rsint8, rsint16, rsint32, rsint64, wsint8, wsint16, wsint32, wsint64, rfloat, -rdouble, wfloat, wdouble \- integer and float operations -.SH SYNOPSIS -.LP -.nf -var mod_ctype = require('ctype'); - -\fBNumber\fR \fBmod_ctype.ruint8\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.ruint16\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.ruint32\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber[2]\fR \fBmod_ctype.ruint64\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rsint8\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rsint16\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rsint32\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber[2]\fR \fBmod_ctype.rsint64\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rfloat\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rdouble\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wuint8\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wuint16\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wuint32\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wuint64\fR(\fBNumber[2]\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wsint8\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wsint16\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wsint32\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wsint64\fR(\fBNumber[2]\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wfloat\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wdouble\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.SH DESCRIPTION -.sp -.LP -The argument \fIbuf\fR refers to a valid buffer (from calling new Buffer()). The -argument \fIendian\fR is either the string 'big' or 'little' and controls -whether the data in the buffer is interpreted as big or little endian. The argument -\fIoffset\fR indicates the starting index into the buffer to read or write. All -functions ensure that starting at \fIoffset\fR does not overflow the end of the -buffer. The argument \fIvalue\fR is a Number that is the valid type for the -specific function. All functions that take \fIvalue\fR as an argument, verify -that the passed value is valid. - -.SS "\fBruint8()\fR, \fBruint16()\fR, \fBruint32()\fR" -.sp -.LP -The \fBruint8()\fR, \fBruint16()\fR, and \fBruint32()\fR functions read an 8, -16, and 32-bit unsigned value from \fIbuf\fR and return it. The value read is -influenced by the values of \fIoffset\fR and \fRendian\fI. - - -.SS "\fBrsint8()\fR, \fBrsint16()\fR, \fBrsint32()\fR" -.sp -.LP -The \fBruint8()\fR, \fBruint16()\fR, and \fBruint32()\fR functions work just as -\fBruint8()\fR, \fBruint16()\fR, and \fBruint32()\fR, except they return signed -integers. - -.SS "\fBruint64()\fR, \fBrsint64()\fR" -.sp -.LP -The \fBruint64()\fR and \fBrsint64()\fR functions read unsigned and signed 64 -bit integers respectively from \fBbuf\fR. Due to the limitations of ECMAScript's -\fBNumber\fR type, they cannot be stored as one value without a loss of -precision. Instead of returning the values as a single \fBNumber\fR, the -functions return an array of two numbers. The first entry always contains the -upper 32-bits and the second value contains the lower 32-bits. The lossy -transformation into a number would be \fIres[0]*Math.pow(2,32)+res[1]\fR. -Note that, unless an entry is zero, both array entries are guaranteed to have -the same sign. - -.SS "\fBwuint8()\fR, \fBwuint16()\fR, \fBwuint32()\fR" -.sp -.LP -The functions \fBwuint8()\fR, \fBwuint16()\fR, and \fBwuint32()\fR modify the -contents of \fBbuf\fR by writing an 8, 16, and 32-bit unsigned integer -respectively to \fBbuf\fR. It is illegal to pass a number that is not an integer -within the domain of the integer size, for example, for \fBwuint8()\fR the valid -range is \fB[0, 255]\fR. The value will be written in either big or little -endian format based upon the value of \fBendian\fR. - - -.SS "\fBwsint8()\fR, \fBwsint16()\fR, \fBwsint32()\fR" -.sp -.LP -The functions \fBwsint8()\fR, \fBwsint16()\fR, and \fBwsint32()\fR function -identically to the functions \fBwuint8()\fR, \fBwuint16()\fR, and -\fBwuint32()\fR except that they the valid domain for \fBvalue\fR is that of a -signed number instead of an unsigned number. For example the \fBwsint8()\fR has -a domain of \fB[-128, 127]\fR. - -.SS "\fBwuint64()\fR, \fBwsint64()\fR" -.sp -.LP -The functions \fBwuint64()\fR and \fBswint64()\fR write out 64-bit unsigned and -signed integers to \fBbuf\fR. The \fBvalue\fR argument must be in the same -format as described in \fBruint64()\fR and \fBrsint64()\fR. - -.SS "\fBrfloat()\fR, \fBrdouble()\fR" -.sp -.LP -The functions "\fBrfloat()\fR and \fBrdouble()\fR" work like the other read -functions, except that they read a single precision and double precision -IEEE-754 floating point value instead. - -.SS "\fBwfloat()\fR, \fBwdouble()\fR" -.sp -.LP -The functions "\fBrfloat()\fR and \fBrdouble()\fR" work like the other write -functions, except that the domain for a float is that of a single precision 4 -byte value. The domain for a double is any \fBNumber\fR in ECMAScript, which is -defined to be represented by a double. - -.SH ATTRIBUTES -.sp -.LP -See \fBattributes\fR(5) for descriptions of the following attributes: -.sp - -.sp -.TS -box; -c | c -l | l . -ATTRIBUTE TYPE ATTRIBUTE VALUE -_ -Interface Stability Committed -_ -MT-Level See below. -_ -Standard Not standardized. -.TE - -.sp -.LP - -All functions are MT-safe in so far as there aren't shared memory MT concerns in -most node programs. If one where to concoct such an environment, these functions -wouldn't be MT-safe. - -.SH SEE ALSO -.sp -.LP diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json deleted file mode 100644 index 90d917e2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "ctype", - "version": "0.5.2", - "description": "read and write binary structures and data types", - "homepage": "https://github.com/rmustacc/node-ctype", - "author": { - "name": "Robert Mustacchi", - "email": "rm@fingolfin.org" - }, - "engines": { - "node": ">= 0.4" - }, - "main": "ctype.js", - "readme": "Node-CType is a way to read and write binary data in structured and easy to use\nformat. Its name comes from the C header file.\n\nTo get started, simply clone the repository or use npm to install it. Once it is\nthere, simply require it.\n\ngit clone git://github.com/rmustacc/node-ctype\nnpm install ctype\nvar mod_ctype = require('ctype')\n\n\nThere are two APIs that you can use, depending on what abstraction you'd like.\nThe low level API let's you read and write individual integers and floats from\nbuffers. The higher level API let's you read and write structures of these. To\nillustrate this, let's looks look at how we would read and write a binary\nencoded x,y point.\n\nIn C we would define this structure as follows:\n\ntypedef struct point {\n\tuint16_t\tp_x;\n\tuint16_t\tp_y;\n} point_t;\n\nTo read a binary encoded point from a Buffer, we first need to create a CType\nparser (where we specify the endian and other options) and add the typedef.\n\nvar parser = new mod_ctype.Parser({ endian: 'big' });\nparser.typedef('point_t', [\n\t{ x: { type: 'uint16_t' } },\n\t{ y: { type: 'uint16_t' } }\n]);\n\nFrom here, given a buffer buf and an offset into it, we can read a point.\n\nvar out = parser.readData([ { point: { type: 'point_t' } } ], buffer, 0);\nconsole.log(out);\n{ point: { x: 23, y: 42 } }\n\nAnother way to get the same information would be to use the low level methods.\nNote that these require you to manually deal with the offset. Here's how we'd\nget the same values of x and y from the buffer.\n\nvar x = mod_ctype.ruint16(buf, 'big', 0);\nvar y = mod_ctype.ruint16(buf, 'big', 2);\nconsole.log(x + ', ' + y);\n23, 42\n\nThe true power of this API comes from the ability to define and nest typedefs,\njust as you would in C. By default, the following types are defined by default.\nNote that they return a Number, unless indicated otherwise.\n\n * int8_t\n * int16_t\n * int32_t\n * int64_t (returns an array where val[0] << 32 + val[1] would be the value)\n * uint8_t\n * uint16_t\n * uint32_t\n * uint64_t (returns an array where val[0] << 32 + val[1] would be the value)\n * float\n * double\n * char (either returns a buffer with that character or a uint8_t)\n * char[] (returns an object with the buffer and the number of characters read which is either the total amount requested or until the first 0)\n\n\nctf2json integration:\n\nNode-CType supports consuming the output of ctf2json. Once you read in a JSON file,\nall you have to do to add all the definitions it contains is:\n\nvar data, parser;\ndata = JSON.parse(parsedJSONData);\nparser = mod_ctype.parseCTF(data, { endian: 'big' });\n\nFor more documentation, see the file README.old. Full documentation is in the\nprocess of being rewritten as a series of manual pages which will be available\nin the repository and online for viewing.\n\nTo read the ctio manual page simple run, from the root of the workspace:\n\nman -Mman -s 3ctype ctio\n", - "readmeFilename": "README", - "_id": "ctype@0.5.2", - "dist": { - "shasum": "c2ddce3ef5e24701c870d46f42c33b116c8f67da" - }, - "_from": "ctype@0.5.2", - "_resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf deleted file mode 100755 index 845f367a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf +++ /dev/null @@ -1,129 +0,0 @@ -# -# Configuration File for JavaScript Lint 0.3.0 -# Developed by Matthias Miller (http://www.JavaScriptLint.com) -# -# This configuration file can be used to lint a collection of scripts, or to enable -# or disable warnings for scripts that are linted via the command line. -# - -### Warnings -# Enable or disable warnings based on requirements. -# Use "+WarningName" to display or "-WarningName" to suppress. -# -+no_return_value # function {0} does not always return a value -+duplicate_formal # duplicate formal argument {0} -+equal_as_assign # test for equality (==) mistyped as assignment (=)?{0} -+var_hides_arg # variable {0} hides argument -+redeclared_var # redeclaration of {0} {1} -+anon_no_return_value # anonymous function does not always return a value -+missing_semicolon # missing semicolon -+meaningless_block # meaningless block; curly braces have no impact -+comma_separated_stmts # multiple statements separated by commas (use semicolons?) -+unreachable_code # unreachable code -+missing_break # missing break statement -+missing_break_for_last_case # missing break statement for last case in switch -+comparison_type_conv # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==) --inc_dec_within_stmt # increment (++) and decrement (--) operators used as part of greater statement -+useless_void # use of the void type may be unnecessary (void is always undefined) --useless_quotes # quotation marks are unnecessary -+multiple_plus_minus # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs -+use_of_label # use of label --block_without_braces # block statement without curly braces -+leading_decimal_point # leading decimal point may indicate a number or an object member -+trailing_decimal_point # trailing decimal point may indicate a number or an object member --octal_number # leading zeros make an octal number -+nested_comment # nested comment -+misplaced_regex # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma -+ambiguous_newline # unexpected end of line; it is ambiguous whether these lines are part of the same statement -+empty_statement # empty statement or extra semicolon --missing_option_explicit # the "option explicit" control comment is missing -+partial_option_explicit # the "option explicit" control comment, if used, must be in the first script tag -+dup_option_explicit # duplicate "option explicit" control comment -+useless_assign # useless assignment -+ambiguous_nested_stmt # block statements containing block statements should use curly braces to resolve ambiguity -+ambiguous_else_stmt # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent) -+missing_default_case # missing default case in switch statement -+duplicate_case_in_switch # duplicate case in switch statements -+default_not_at_end # the default case is not at the end of the switch statement -+legacy_cc_not_understood # couldn't understand control comment using /*@keyword@*/ syntax -+jsl_cc_not_understood # couldn't understand control comment using /*jsl:keyword*/ syntax -+useless_comparison # useless comparison; comparing identical expressions -+with_statement # with statement hides undeclared variables; use temporary variable instead -+trailing_comma_in_array # extra comma is not recommended in array initializers -+assign_to_function_call # assignment to a function call -+parseint_missing_radix # parseInt missing radix parameter --unreferenced_argument # argument declared but never referenced: {name} - -### Output format -# Customize the format of the error message. -# __FILE__ indicates current file path -# __FILENAME__ indicates current file name -# __LINE__ indicates current line -# __ERROR__ indicates error message -# -# Visual Studio syntax (default): -+output-format __FILE__(__LINE__): __ERROR__ -# Alternative syntax: -#+output-format __FILE__:__LINE__: __ERROR__ - - -### Context -# Show the in-line position of the error. -# Use "+context" to display or "-context" to suppress. -# -+context - - -### Semicolons -# By default, assignments of an anonymous function to a variable or -# property (such as a function prototype) must be followed by a semicolon. -# -#+lambda_assign_requires_semicolon # deprecated setting - - -### Control Comments -# Both JavaScript Lint and the JScript interpreter confuse each other with the syntax for -# the /*@keyword@*/ control comments and JScript conditional comments. (The latter is -# enabled in JScript with @cc_on@). The /*jsl:keyword*/ syntax is preferred for this reason, -# although legacy control comments are enabled by default for backward compatibility. -# -+legacy_control_comments - - -### JScript Function Extensions -# JScript allows member functions to be defined like this: -# function MyObj() { /*constructor*/ } -# function MyObj.prototype.go() { /*member function*/ } -# -# It also allows events to be attached like this: -# function window::onload() { /*init page*/ } -# -# This is a Microsoft-only JavaScript extension. Enable this setting to allow them. -# -#-jscript_function_extensions # deprecated setting - - -### Defining identifiers -# By default, "option explicit" is enabled on a per-file basis. -# To enable this for all files, use "+always_use_option_explicit" --always_use_option_explicit - -# Define certain identifiers of which the lint is not aware. -# (Use this in conjunction with the "undeclared identifier" warning.) -# -# Common uses for webpages might be: -#+define window -#+define document -+define require -+define exports -+define console -+define Buffer -+define JSON - -### Files -# Specify which files to lint -# Use "+recurse" to enable recursion (disabled by default). -# To add a set of files, use "+process FileName", "+process Folder\Path\*.js", -# or "+process Folder\Path\*.htm". -# -#+process jsl-test.js diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle deleted file mode 100755 index 96c72b6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle +++ /dev/null @@ -1,839 +0,0 @@ -#!/usr/bin/env perl -# -# CDDL HEADER START -# -# The contents of this file are subject to the terms of the -# Common Development and Distribution License (the "License"). -# You may not use this file except in compliance with the License. -# -# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE -# or http://www.opensolaris.org/os/licensing. -# See the License for the specific language governing permissions -# and limitations under the License. -# -# When distributing Covered Code, include this CDDL HEADER in each -# file and include the License file at usr/src/OPENSOLARIS.LICENSE. -# If applicable, add the following below this CDDL HEADER, with the -# fields enclosed by brackets "[]" replaced with your own identifying -# information: Portions Copyright [yyyy] [name of copyright owner] -# -# CDDL HEADER END -# -# -# Copyright 2008 Sun Microsystems, Inc. All rights reserved. -# Use is subject to license terms. -# -# Copyright 2011 Joyent, Inc. All rights reserved. -# -# jsstyle - check for some common stylistic errors. -# -# jsstyle is a sort of "lint" for Javascript coding style. This tool is -# derived from the cstyle tool, used to check for the style used in the -# Solaris kernel, sometimes known as "Bill Joy Normal Form". -# -# There's a lot this can't check for, like proper indentation of code -# blocks. There's also a lot more this could check for. -# -# A note to the non perl literate: -# -# perl regular expressions are pretty much like egrep -# regular expressions, with the following special symbols -# -# \s any space character -# \S any non-space character -# \w any "word" character [a-zA-Z0-9_] -# \W any non-word character -# \d a digit [0-9] -# \D a non-digit -# \b word boundary (between \w and \W) -# \B non-word boundary -# - -require 5.0; -use IO::File; -use Getopt::Std; -use strict; - -my $usage = -"usage: jsstyle [-chvC] [-o constructs] file ... - -c check continuation indentation inside functions - -h perform heuristic checks that are sometimes wrong - -v verbose - -C don't check anything in header block comments - -o constructs - allow a comma-seperated list of optional constructs: - doxygen allow doxygen-style block comments (/** /*!) - splint allow splint-style lint comments (/*@ ... @*/) -"; - -my %opts; - -if (!getopts("cho:vC", \%opts)) { - print $usage; - exit 2; -} - -my $check_continuation = $opts{'c'}; -my $heuristic = $opts{'h'}; -my $verbose = $opts{'v'}; -my $ignore_hdr_comment = $opts{'C'}; - -my $doxygen_comments = 0; -my $splint_comments = 0; - -if (defined($opts{'o'})) { - for my $x (split /,/, $opts{'o'}) { - if ($x eq "doxygen") { - $doxygen_comments = 1; - } elsif ($x eq "splint") { - $splint_comments = 1; - } else { - print "jsstyle: unrecognized construct \"$x\"\n"; - print $usage; - exit 2; - } - } -} - -my ($filename, $line, $prev); # shared globals - -my $fmt; -my $hdr_comment_start; - -if ($verbose) { - $fmt = "%s: %d: %s\n%s\n"; -} else { - $fmt = "%s: %d: %s\n"; -} - -if ($doxygen_comments) { - # doxygen comments look like "/*!" or "/**"; allow them. - $hdr_comment_start = qr/^\s*\/\*[\!\*]?$/; -} else { - $hdr_comment_start = qr/^\s*\/\*$/; -} - -# Note, following must be in single quotes so that \s and \w work right. -my $lint_re = qr/\/\*(?: - jsl:\w+?|ARGSUSED[0-9]*|NOTREACHED|LINTLIBRARY|VARARGS[0-9]*| - CONSTCOND|CONSTANTCOND|CONSTANTCONDITION|EMPTY| - FALLTHRU|FALLTHROUGH|LINTED.*?|PRINTFLIKE[0-9]*| - PROTOLIB[0-9]*|SCANFLIKE[0-9]*|JSSTYLED.*? - )\*\//x; - -my $splint_re = qr/\/\*@.*?@\*\//x; - -my $err_stat = 0; # exit status - -if ($#ARGV >= 0) { - foreach my $arg (@ARGV) { - my $fh = new IO::File $arg, "r"; - if (!defined($fh)) { - printf "%s: cannot open\n", $arg; - } else { - &jsstyle($arg, $fh); - close $fh; - } - } -} else { - &jsstyle("<stdin>", *STDIN); -} -exit $err_stat; - -my $no_errs = 0; # set for JSSTYLED-protected lines - -sub err($) { - my ($error) = @_; - unless ($no_errs) { - printf $fmt, $filename, $., $error, $line; - $err_stat = 1; - } -} - -sub err_prefix($$) { - my ($prevline, $error) = @_; - my $out = $prevline."\n".$line; - unless ($no_errs) { - printf $fmt, $filename, $., $error, $out; - $err_stat = 1; - } -} - -sub err_prev($) { - my ($error) = @_; - unless ($no_errs) { - printf $fmt, $filename, $. - 1, $error, $prev; - $err_stat = 1; - } -} - -sub jsstyle($$) { - -my ($fn, $filehandle) = @_; -$filename = $fn; # share it globally - -my $in_cpp = 0; -my $next_in_cpp = 0; - -my $in_comment = 0; -my $in_header_comment = 0; -my $comment_done = 0; -my $in_function = 0; -my $in_function_header = 0; -my $in_declaration = 0; -my $note_level = 0; -my $nextok = 0; -my $nocheck = 0; - -my $in_string = 0; - -my ($okmsg, $comment_prefix); - -$line = ''; -$prev = ''; -reset_indent(); - -line: while (<$filehandle>) { - s/\r?\n$//; # strip return and newline - - # save the original line, then remove all text from within - # double or single quotes, we do not want to check such text. - - $line = $_; - - # - # C allows strings to be continued with a backslash at the end of - # the line. We translate that into a quoted string on the previous - # line followed by an initial quote on the next line. - # - # (we assume that no-one will use backslash-continuation with character - # constants) - # - $_ = '"' . $_ if ($in_string && !$nocheck && !$in_comment); - - # - # normal strings and characters - # - s/'([^\\']|\\.)*'/\'\'/g; - s/"([^\\"]|\\.)*"/\"\"/g; - - # - # detect string continuation - # - if ($nocheck || $in_comment) { - $in_string = 0; - } else { - # - # Now that all full strings are replaced with "", we check - # for unfinished strings continuing onto the next line. - # - $in_string = - (s/([^"](?:"")*)"([^\\"]|\\.)*\\$/$1""/ || - s/^("")*"([^\\"]|\\.)*\\$/""/); - } - - # - # figure out if we are in a cpp directive - # - $in_cpp = $next_in_cpp || /^\s*#/; # continued or started - $next_in_cpp = $in_cpp && /\\$/; # only if continued - - # strip off trailing backslashes, which appear in long macros - s/\s*\\$//; - - # an /* END JSSTYLED */ comment ends a no-check block. - if ($nocheck) { - if (/\/\* *END *JSSTYLED *\*\//) { - $nocheck = 0; - } else { - reset_indent(); - next line; - } - } - - # a /*JSSTYLED*/ comment indicates that the next line is ok. - if ($nextok) { - if ($okmsg) { - err($okmsg); - } - $nextok = 0; - $okmsg = 0; - if (/\/\* *JSSTYLED.*\*\//) { - /^.*\/\* *JSSTYLED *(.*) *\*\/.*$/; - $okmsg = $1; - $nextok = 1; - } - $no_errs = 1; - } elsif ($no_errs) { - $no_errs = 0; - } - - # check length of line. - # first, a quick check to see if there is any chance of being too long. - if (($line =~ tr/\t/\t/) * 7 + length($line) > 80) { - # yes, there is a chance. - # replace tabs with spaces and check again. - my $eline = $line; - 1 while $eline =~ - s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e; - if (length($eline) > 80) { - err("line > 80 characters"); - } - } - - # ignore NOTE(...) annotations (assumes NOTE is on lines by itself). - if ($note_level || /\b_?NOTE\s*\(/) { # if in NOTE or this is NOTE - s/[^()]//g; # eliminate all non-parens - $note_level += s/\(//g - length; # update paren nest level - next; - } - - # a /* BEGIN JSSTYLED */ comment starts a no-check block. - if (/\/\* *BEGIN *JSSTYLED *\*\//) { - $nocheck = 1; - } - - # a /*JSSTYLED*/ comment indicates that the next line is ok. - if (/\/\* *JSSTYLED.*\*\//) { - /^.*\/\* *JSSTYLED *(.*) *\*\/.*$/; - $okmsg = $1; - $nextok = 1; - } - if (/\/\/ *JSSTYLED/) { - /^.*\/\/ *JSSTYLED *(.*)$/; - $okmsg = $1; - $nextok = 1; - } - - # universal checks; apply to everything - if (/\t +\t/) { - err("spaces between tabs"); - } - if (/ \t+ /) { - err("tabs between spaces"); - } - if (/\s$/) { - err("space or tab at end of line"); - } - if (/[^ \t(]\/\*/ && !/\w\(\/\*.*\*\/\);/) { - err("comment preceded by non-blank"); - } - - # is this the beginning or ending of a function? - # (not if "struct foo\n{\n") - if (/^{$/ && $prev =~ /\)\s*(const\s*)?(\/\*.*\*\/\s*)?\\?$/) { - $in_function = 1; - $in_declaration = 1; - $in_function_header = 0; - $prev = $line; - next line; - } - if (/^}\s*(\/\*.*\*\/\s*)*$/) { - if ($prev =~ /^\s*return\s*;/) { - err_prev("unneeded return at end of function"); - } - $in_function = 0; - reset_indent(); # we don't check between functions - $prev = $line; - next line; - } - if (/^\w*\($/) { - $in_function_header = 1; - } - - # a blank line terminates the declarations within a function. - # XXX - but still a problem in sub-blocks. - if ($in_declaration && /^$/) { - $in_declaration = 0; - } - - if ($comment_done) { - $in_comment = 0; - $in_header_comment = 0; - $comment_done = 0; - } - # does this looks like the start of a block comment? - if (/$hdr_comment_start/) { - if (!/^\t*\/\*/) { - err("block comment not indented by tabs"); - } - $in_comment = 1; - /^(\s*)\//; - $comment_prefix = $1; - if ($comment_prefix eq "") { - $in_header_comment = 1; - } - $prev = $line; - next line; - } - # are we still in the block comment? - if ($in_comment) { - if (/^$comment_prefix \*\/$/) { - $comment_done = 1; - } elsif (/\*\//) { - $comment_done = 1; - err("improper block comment close") - unless ($ignore_hdr_comment && $in_header_comment); - } elsif (!/^$comment_prefix \*[ \t]/ && - !/^$comment_prefix \*$/) { - err("improper block comment") - unless ($ignore_hdr_comment && $in_header_comment); - } - } - - if ($in_header_comment && $ignore_hdr_comment) { - $prev = $line; - next line; - } - - # check for errors that might occur in comments and in code. - - # allow spaces to be used to draw pictures in header comments. - #if (/[^ ] / && !/".* .*"/ && !$in_header_comment) { - # err("spaces instead of tabs"); - #} - #if (/^ / && !/^ \*[ \t\/]/ && !/^ \*$/ && - # (!/^ \w/ || $in_function != 0)) { - # err("indent by spaces instead of tabs"); - #} - if (/^ {2,}/ && !/^ [^ ]/) { - err("indent by spaces instead of tabs"); - } - if (/^\t+ [^ \t\*]/ || /^\t+ \S/ || /^\t+ \S/) { - err("continuation line not indented by 4 spaces"); - } - - if (/^\s*\/\*./ && !/^\s*\/\*.*\*\// && !/$hdr_comment_start/) { - err("improper first line of block comment"); - } - - if ($in_comment) { # still in comment, don't do further checks - $prev = $line; - next line; - } - - if ((/[^(]\/\*\S/ || /^\/\*\S/) && - !(/$lint_re/ || ($splint_comments && /$splint_re/))) { - err("missing blank after open comment"); - } - if (/\S\*\/[^)]|\S\*\/$/ && - !(/$lint_re/ || ($splint_comments && /$splint_re/))) { - err("missing blank before close comment"); - } - if (/\/\/\S/) { # C++ comments - err("missing blank after start comment"); - } - # check for unterminated single line comments, but allow them when - # they are used to comment out the argument list of a function - # declaration. - if (/\S.*\/\*/ && !/\S.*\/\*.*\*\// && !/\(\/\*/) { - err("unterminated single line comment"); - } - - if (/^(#else|#endif|#include)(.*)$/) { - $prev = $line; - next line; - } - - # - # delete any comments and check everything else. Note that - # ".*?" is a non-greedy match, so that we don't get confused by - # multiple comments on the same line. - # - s/\/\*.*?\*\///g; - s/\/\/.*$//; # C++ comments - - # delete any trailing whitespace; we have already checked for that. - s/\s*$//; - - # following checks do not apply to text in comments. - if (/"/) { - err("literal string using double-quote instead of single"); - } - - if (/[^=!<>\s][!<>=]=/ || /[^<>!=][!<>=]==?[^\s,=]/ || - (/[^->]>[^,=>\s]/ && !/[^->]>$/) || - (/[^<]<[^,=<\s]/ && !/[^<]<$/) || - /[^<\s]<[^<]/ || /[^->\s]>[^>]/) { - err("missing space around relational operator"); - } - if (/\S>>=/ || /\S<<=/ || />>=\S/ || /<<=\S/ || /\S[-+*\/&|^%]=/ || - (/[^-+*\/&|^%!<>=\s]=[^=]/ && !/[^-+*\/&|^%!<>=\s]=$/) || - (/[^!<>=]=[^=\s]/ && !/[^!<>=]=$/)) { - # XXX - should only check this for C++ code - # XXX - there are probably other forms that should be allowed - if (!/\soperator=/) { - err("missing space around assignment operator"); - } - } - if (/[,;]\S/ && !/\bfor \(;;\)/) { - err("comma or semicolon followed by non-blank"); - } - # allow "for" statements to have empty "while" clauses - if (/\s[,;]/ && !/^[\t]+;$/ && !/^\s*for \([^;]*; ;[^;]*\)/) { - err("comma or semicolon preceded by blank"); - } - if (/^\s*(&&|\|\|)/) { - err("improper boolean continuation"); - } - if (/\S *(&&|\|\|)/ || /(&&|\|\|) *\S/) { - err("more than one space around boolean operator"); - } - if (/\b(delete|typeof|instanceOf|throw|with|catch|new|function|in|for|if|while|switch|return|case)\(/) { - err("missing space between keyword and paren"); - } - if (/(\b(catch|for|if|with|while|switch|return)\b.*){2,}/) { - # multiple "case" and "sizeof" allowed - err("more than one keyword on line"); - } - if (/\b(delete|typeof|instanceOf|with|throw|catch|new|function|in|for|if|while|switch|return|case)\s\s+\(/ && - !/^#if\s+\(/) { - err("extra space between keyword and paren"); - } - # try to detect "func (x)" but not "if (x)" or - # "#define foo (x)" or "int (*func)();" - if (/\w\s\(/) { - my $s = $_; - # strip off all keywords on the line - s/\b(delete|typeof|instanceOf|throw|with|catch|new|function|in|for|if|while|switch|return|case)\s\(/XXX(/g; - s/#elif\s\(/XXX(/g; - s/^#define\s+\w+\s+\(/XXX(/; - # do not match things like "void (*f)();" - # or "typedef void (func_t)();" - s/\w\s\(+\*/XXX(*/g; - s/\b(void)\s+\(+/XXX(/og; - if (/\w\s\(/) { - err("extra space between function name and left paren"); - } - $_ = $s; - } - - if (/^\s*return\W[^;]*;/ && !/^\s*return\s*\(.*\);/) { - err("unparenthesized return expression"); - } - if (/\btypeof\b/ && !/\btypeof\s*\(.*\)/) { - err("unparenthesized typeof expression"); - } - if (/\(\s/) { - err("whitespace after left paren"); - } - # allow "for" statements to have empty "continue" clauses - if (/\s\)/ && !/^\s*for \([^;]*;[^;]*; \)/) { - err("whitespace before right paren"); - } - if (/^\s*\(void\)[^ ]/) { - err("missing space after (void) cast"); - } - if (/\S{/ && !/({|\(){/) { - err("missing space before left brace"); - } - if ($in_function && /^\s+{/ && - ($prev =~ /\)\s*$/ || $prev =~ /\bstruct\s+\w+$/)) { - err("left brace starting a line"); - } - if (/}(else|while)/) { - err("missing space after right brace"); - } - if (/}\s\s+(else|while)/) { - err("extra space after right brace"); - } - if (/^\s+#/) { - err("preprocessor statement not in column 1"); - } - if (/^#\s/) { - err("blank after preprocessor #"); - } - - # - # We completely ignore, for purposes of indentation: - # * lines outside of functions - # * preprocessor lines - # - if ($check_continuation && $in_function && !$in_cpp) { - process_indent($_); - } - - if ($heuristic) { - # cannot check this everywhere due to "struct {\n...\n} foo;" - if ($in_function && !$in_declaration && - /}./ && !/}\s+=/ && !/{.*}[;,]$/ && !/}(\s|)*$/ && - !/} (else|while)/ && !/}}/) { - err("possible bad text following right brace"); - } - # cannot check this because sub-blocks in - # the middle of code are ok - if ($in_function && /^\s+{/) { - err("possible left brace starting a line"); - } - } - if (/^\s*else\W/) { - if ($prev =~ /^\s*}$/) { - err_prefix($prev, - "else and right brace should be on same line"); - } - } - $prev = $line; -} - -if ($prev eq "") { - err("last line in file is blank"); -} - -} - -# -# Continuation-line checking -# -# The rest of this file contains the code for the continuation checking -# engine. It's a pretty simple state machine which tracks the expression -# depth (unmatched '('s and '['s). -# -# Keep in mind that the argument to process_indent() has already been heavily -# processed; all comments have been replaced by control-A, and the contents of -# strings and character constants have been elided. -# - -my $cont_in; # currently inside of a continuation -my $cont_off; # skipping an initializer or definition -my $cont_noerr; # suppress cascading errors -my $cont_start; # the line being continued -my $cont_base; # the base indentation -my $cont_first; # this is the first line of a statement -my $cont_multiseg; # this continuation has multiple segments - -my $cont_special; # this is a C statement (if, for, etc.) -my $cont_macro; # this is a macro -my $cont_case; # this is a multi-line case - -my @cont_paren; # the stack of unmatched ( and [s we've seen - -sub -reset_indent() -{ - $cont_in = 0; - $cont_off = 0; -} - -sub -delabel($) -{ - # - # replace labels with tabs. Note that there may be multiple - # labels on a line. - # - local $_ = $_[0]; - - while (/^(\t*)( *(?:(?:\w+\s*)|(?:case\b[^:]*)): *)(.*)$/) { - my ($pre_tabs, $label, $rest) = ($1, $2, $3); - $_ = $pre_tabs; - while ($label =~ s/^([^\t]*)(\t+)//) { - $_ .= "\t" x (length($2) + length($1) / 8); - } - $_ .= ("\t" x (length($label) / 8)).$rest; - } - - return ($_); -} - -sub -process_indent($) -{ - require strict; - local $_ = $_[0]; # preserve the global $_ - - s///g; # No comments - s/\s+$//; # Strip trailing whitespace - - return if (/^$/); # skip empty lines - - # regexps used below; keywords taking (), macros, and continued cases - my $special = '(?:(?:\}\s*)?else\s+)?(?:if|for|while|switch)\b'; - my $macro = '[A-Z_][A-Z_0-9]*\('; - my $case = 'case\b[^:]*$'; - - # skip over enumerations, array definitions, initializers, etc. - if ($cont_off <= 0 && !/^\s*$special/ && - (/(?:(?:\b(?:enum|struct|union)\s*[^\{]*)|(?:\s+=\s*)){/ || - (/^\s*{/ && $prev =~ /=\s*(?:\/\*.*\*\/\s*)*$/))) { - $cont_in = 0; - $cont_off = tr/{/{/ - tr/}/}/; - return; - } - if ($cont_off) { - $cont_off += tr/{/{/ - tr/}/}/; - return; - } - - if (!$cont_in) { - $cont_start = $line; - - if (/^\t* /) { - err("non-continuation indented 4 spaces"); - $cont_noerr = 1; # stop reporting - } - $_ = delabel($_); # replace labels with tabs - - # check if the statement is complete - return if (/^\s*\}?$/); - return if (/^\s*\}?\s*else\s*\{?$/); - return if (/^\s*do\s*\{?$/); - return if (/{$/); - return if (/}[,;]?$/); - - # Allow macros on their own lines - return if (/^\s*[A-Z_][A-Z_0-9]*$/); - - # cases we don't deal with, generally non-kosher - if (/{/) { - err("stuff after {"); - return; - } - - # Get the base line, and set up the state machine - /^(\t*)/; - $cont_base = $1; - $cont_in = 1; - @cont_paren = (); - $cont_first = 1; - $cont_multiseg = 0; - - # certain things need special processing - $cont_special = /^\s*$special/? 1 : 0; - $cont_macro = /^\s*$macro/? 1 : 0; - $cont_case = /^\s*$case/? 1 : 0; - } else { - $cont_first = 0; - - # Strings may be pulled back to an earlier (half-)tabstop - unless ($cont_noerr || /^$cont_base / || - (/^\t*(?: )?(?:gettext\()?\"/ && !/^$cont_base\t/)) { - err_prefix($cont_start, - "continuation should be indented 4 spaces"); - } - } - - my $rest = $_; # keeps the remainder of the line - - # - # The split matches 0 characters, so that each 'special' character - # is processed separately. Parens and brackets are pushed and - # popped off the @cont_paren stack. For normal processing, we wait - # until a ; or { terminates the statement. "special" processing - # (if/for/while/switch) is allowed to stop when the stack empties, - # as is macro processing. Case statements are terminated with a : - # and an empty paren stack. - # - foreach $_ (split /[^\(\)\[\]\{\}\;\:]*/) { - next if (length($_) == 0); - - # rest contains the remainder of the line - my $rxp = "[^\Q$_\E]*\Q$_\E"; - $rest =~ s/^$rxp//; - - if (/\(/ || /\[/) { - push @cont_paren, $_; - } elsif (/\)/ || /\]/) { - my $cur = $_; - tr/\)\]/\(\[/; - - my $old = (pop @cont_paren); - if (!defined($old)) { - err("unexpected '$cur'"); - $cont_in = 0; - last; - } elsif ($old ne $_) { - err("'$cur' mismatched with '$old'"); - $cont_in = 0; - last; - } - - # - # If the stack is now empty, do special processing - # for if/for/while/switch and macro statements. - # - next if (@cont_paren != 0); - if ($cont_special) { - if ($rest =~ /^\s*{?$/) { - $cont_in = 0; - last; - } - if ($rest =~ /^\s*;$/) { - err("empty if/for/while body ". - "not on its own line"); - $cont_in = 0; - last; - } - if (!$cont_first && $cont_multiseg == 1) { - err_prefix($cont_start, - "multiple statements continued ". - "over multiple lines"); - $cont_multiseg = 2; - } elsif ($cont_multiseg == 0) { - $cont_multiseg = 1; - } - # We've finished this section, start - # processing the next. - goto section_ended; - } - if ($cont_macro) { - if ($rest =~ /^$/) { - $cont_in = 0; - last; - } - } - } elsif (/\;/) { - if ($cont_case) { - err("unexpected ;"); - } elsif (!$cont_special) { - err("unexpected ;") if (@cont_paren != 0); - if (!$cont_first && $cont_multiseg == 1) { - err_prefix($cont_start, - "multiple statements continued ". - "over multiple lines"); - $cont_multiseg = 2; - } elsif ($cont_multiseg == 0) { - $cont_multiseg = 1; - } - if ($rest =~ /^$/) { - $cont_in = 0; - last; - } - if ($rest =~ /^\s*special/) { - err("if/for/while/switch not started ". - "on its own line"); - } - goto section_ended; - } - } elsif (/\{/) { - err("{ while in parens/brackets") if (@cont_paren != 0); - err("stuff after {") if ($rest =~ /[^\s}]/); - $cont_in = 0; - last; - } elsif (/\}/) { - err("} while in parens/brackets") if (@cont_paren != 0); - if (!$cont_special && $rest !~ /^\s*(while|else)\b/) { - if ($rest =~ /^$/) { - err("unexpected }"); - } else { - err("stuff after }"); - } - $cont_in = 0; - last; - } - } elsif (/\:/ && $cont_case && @cont_paren == 0) { - err("stuff after multi-line case") if ($rest !~ /$^/); - $cont_in = 0; - last; - } - next; -section_ended: - # End of a statement or if/while/for loop. Reset - # cont_special and cont_macro based on the rest of the - # line. - $cont_special = ($rest =~ /^\s*$special/)? 1 : 0; - $cont_macro = ($rest =~ /^\s*$macro/)? 1 : 0; - $cont_case = 0; - next; - } - $cont_noerr = 0 if (!$cont_in); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json deleted file mode 100644 index 29d7bd89..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json +++ /dev/null @@ -1,13 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316563626, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "float" ] - }, -"data": - [ - { "name": "float", "float": { "length": 4 } } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json deleted file mode 100644 index f9773a14..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json +++ /dev/null @@ -1,13 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316563631, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "int" ] - }, -"data": - [ - { "name": "int", "integer": { "length": 4, "signed": true } } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json deleted file mode 100644 index e0ee5e0d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json +++ /dev/null @@ -1,104 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316563573, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "psinfo_t" ] - }, -"data": - [ - { "name": "int", "integer": { "length": 4, "signed": true } }, - { "name": "char", "integer": { "length": 1, "signed": true } }, - { "name": "unsigned short", "integer": { "length": 2, "signed": false } }, - { "name": "long", "integer": { "length": 4, "signed": true } }, - { "name": "unsigned", "integer": { "length": 4, "signed": false } }, - { "name": "size_t", "typedef": "unsigned" }, - { "name": "unsigned long", "integer": { "length": 4, "signed": false } }, - { "name": "time_t", "typedef": "long" }, - { "name": "struct timespec", "struct": [ - { "name": "tv_sec", "type": "time_t" }, - { "name": "tv_nsec", "type": "long" } - ] }, - { "name": "zoneid_t", "typedef": "long" }, - { "name": "taskid_t", "typedef": "long" }, - { "name": "dev_t", "typedef": "unsigned long" }, - { "name": "uid_t", "typedef": "unsigned" }, - { "name": "gid_t", "typedef": "unsigned" }, - { "name": "timestruc_t", "typedef": "struct timespec" }, - { "name": "short", "integer": { "length": 2, "signed": true } }, - { "name": "projid_t", "typedef": "long" }, - { "name": "ushort_t", "typedef": "unsigned short" }, - { "name": "poolid_t", "typedef": "long" }, - { "name": "uintptr_t", "typedef": "unsigned" }, - { "name": "id_t", "typedef": "long" }, - { "name": "pid_t", "typedef": "long" }, - { "name": "processorid_t", "typedef": "int" }, - { "name": "psetid_t", "typedef": "int" }, - { "name": "struct lwpsinfo", "struct": [ - { "name": "pr_flag", "type": "int" }, - { "name": "pr_lwpid", "type": "id_t" }, - { "name": "pr_addr", "type": "uintptr_t" }, - { "name": "pr_wchan", "type": "uintptr_t" }, - { "name": "pr_stype", "type": "char" }, - { "name": "pr_state", "type": "char" }, - { "name": "pr_sname", "type": "char" }, - { "name": "pr_nice", "type": "char" }, - { "name": "pr_syscall", "type": "short" }, - { "name": "pr_oldpri", "type": "char" }, - { "name": "pr_cpu", "type": "char" }, - { "name": "pr_pri", "type": "int" }, - { "name": "pr_pctcpu", "type": "ushort_t" }, - { "name": "pr_pad", "type": "ushort_t" }, - { "name": "pr_start", "type": "timestruc_t" }, - { "name": "pr_time", "type": "timestruc_t" }, - { "name": "pr_clname", "type": "char [8]" }, - { "name": "pr_name", "type": "char [16]" }, - { "name": "pr_onpro", "type": "processorid_t" }, - { "name": "pr_bindpro", "type": "processorid_t" }, - { "name": "pr_bindpset", "type": "psetid_t" }, - { "name": "pr_lgrp", "type": "int" }, - { "name": "pr_filler", "type": "int [4]" } - ] }, - { "name": "lwpsinfo_t", "typedef": "struct lwpsinfo" }, - { "name": "struct psinfo", "struct": [ - { "name": "pr_flag", "type": "int" }, - { "name": "pr_nlwp", "type": "int" }, - { "name": "pr_pid", "type": "pid_t" }, - { "name": "pr_ppid", "type": "pid_t" }, - { "name": "pr_pgid", "type": "pid_t" }, - { "name": "pr_sid", "type": "pid_t" }, - { "name": "pr_uid", "type": "uid_t" }, - { "name": "pr_euid", "type": "uid_t" }, - { "name": "pr_gid", "type": "gid_t" }, - { "name": "pr_egid", "type": "gid_t" }, - { "name": "pr_addr", "type": "uintptr_t" }, - { "name": "pr_size", "type": "size_t" }, - { "name": "pr_rssize", "type": "size_t" }, - { "name": "pr_pad1", "type": "size_t" }, - { "name": "pr_ttydev", "type": "dev_t" }, - { "name": "pr_pctcpu", "type": "ushort_t" }, - { "name": "pr_pctmem", "type": "ushort_t" }, - { "name": "pr_start", "type": "timestruc_t" }, - { "name": "pr_time", "type": "timestruc_t" }, - { "name": "pr_ctime", "type": "timestruc_t" }, - { "name": "pr_fname", "type": "char [16]" }, - { "name": "pr_psargs", "type": "char [80]" }, - { "name": "pr_wstat", "type": "int" }, - { "name": "pr_argc", "type": "int" }, - { "name": "pr_argv", "type": "uintptr_t" }, - { "name": "pr_envp", "type": "uintptr_t" }, - { "name": "pr_dmodel", "type": "char" }, - { "name": "pr_pad2", "type": "char [3]" }, - { "name": "pr_taskid", "type": "taskid_t" }, - { "name": "pr_projid", "type": "projid_t" }, - { "name": "pr_nzomb", "type": "int" }, - { "name": "pr_poolid", "type": "poolid_t" }, - { "name": "pr_zoneid", "type": "zoneid_t" }, - { "name": "pr_contract", "type": "id_t" }, - { "name": "pr_filler", "type": "int [1]" }, - { "name": "pr_lwp", "type": "lwpsinfo_t" } - ] }, - { "name": "psinfo_t", "typedef": "struct psinfo" } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json deleted file mode 100644 index e0542ff4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json +++ /dev/null @@ -1,19 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316563648, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "timestruc_t" ] - }, -"data": - [ - { "name": "long", "integer": { "length": 4, "signed": true } }, - { "name": "time_t", "typedef": "long" }, - { "name": "struct timespec", "struct": [ - { "name": "tv_sec", "type": "time_t" }, - { "name": "tv_nsec", "type": "long" } - ] }, - { "name": "timestruc_t", "typedef": "struct timespec" } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js deleted file mode 100644 index d6a52cbb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Test several conditions that should always cause us to throw. - */ -var mod_assert = require('assert'); -var mod_ctype = require('../../ctype.js'); - -var cases = [ -{ json: { }, msg: 'bad JSON - no metadata or data' }, -{ json: { metadata: {} }, msg: 'bad JSON - bad metadata section' }, -{ json: { metadata: { 'JSON version': [] } }, - msg: 'bad JSON - bad JSON version' }, -{ json: { metadata: { 'JSON version': 2 } }, - msg: 'bad JSON - bad JSON version' }, -{ json: { metadata: { 'JSON version': '100.20' } }, - msg: 'bad JSON - bad JSON version' }, -{ json: { metadata: { 'JSON version': '1.0' } }, - msg: 'missing data section' }, -{ json: { metadata: { 'JSON version': '1.0' }, data: 1 }, - msg: 'invalid data section' }, -{ json: { metadata: { 'JSON version': '1.0' }, data: 1.1 }, - msg: 'invalid data section' }, -{ json: { metadata: { 'JSON version': '1.0' }, data: '1.1' }, - msg: 'invalid data section' }, -{ json: { metadata: { 'JSON version': '1.0' }, data: {} }, - msg: 'invalid data section' } -]; - -function test() -{ - var ii; - - for (ii = 0; ii < cases.length; ii++) { - mod_assert.throws(function () { - mod_ctype.parseCTF(cases[ii].json); - }, Error, cases[ii].msg); - } -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js deleted file mode 100644 index f2144994..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js +++ /dev/null @@ -1,14 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var data, parser; - - data = JSON.parse(mod_fs.readFileSync('./float.json').toString()); - parser = mod_ctype.parseCTF(data, { endian: 'big' }); - mod_assert.deepEqual(parser.lstypes(), {}); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js deleted file mode 100644 index 0ec0f769..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js +++ /dev/null @@ -1,14 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var data, parser; - - data = JSON.parse(mod_fs.readFileSync('./int.json').toString()); - parser = mod_ctype.parseCTF(data, { endian: 'big' }); - mod_assert.deepEqual(parser.lstypes(), { 'int': 'int32_t' }); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js deleted file mode 100644 index ca1a544c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js +++ /dev/null @@ -1,17 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -/* - * This is too unwieldly to actually write out. Just make sure we can parse it - * without errrors. - */ -function test() -{ - var data; - - data = JSON.parse(mod_fs.readFileSync('./psinfo.json').toString()); - mod_ctype.parseCTF(data, { endian: 'big' }); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js deleted file mode 100644 index c62f41f9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js +++ /dev/null @@ -1,18 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var data, parser; - - data = JSON.parse(mod_fs.readFileSync('./struct.json').toString()); - parser = mod_ctype.parseCTF(data, { endian: 'big' }); - mod_assert.deepEqual(parser.lstypes(), { 'long': 'int32_t', - 'time_t': 'long', - 'timestruc_t': 'struct timespec', - 'struct timespec': [ { 'tv_sec': { 'type': 'time_t' } }, - { 'tv_nsec': { 'type': 'long' } } ] }); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js deleted file mode 100644 index 9006cd1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js +++ /dev/null @@ -1,15 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var data, parser; - - data = JSON.parse(mod_fs.readFileSync('./typedef.json').toString()); - parser = mod_ctype.parseCTF(data, { endian: 'big' }); - mod_assert.deepEqual(parser.lstypes(), { 'bar_t': 'int', - 'int': 'int32_t' }); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json deleted file mode 100644 index 35ddb50d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json +++ /dev/null @@ -1,14 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316302348, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "bar_t" ] - }, -"data": - [ - { "name": "int", "integer": { "length": 4, "signed": true } }, - { "name": "bar_t", "typedef": "int" } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js deleted file mode 100644 index 2c9504a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js +++ /dev/null @@ -1,767 +0,0 @@ -/* - * Battery of tests to break our floating point implementation. Oh ho ho. - * - * There are a few useful ways to generate the expected output. The first is - * just write a C program and write raw bytes out and inspect with xxd. Remember - * to consider whether or not you're on a big endian or little endian machine. - * Another useful site I found to help with some of this was: - * - * http://babbage.cs.qc.edu/IEEE-754/ - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -function testfloat() -{ - var buffer = new Buffer(4); - /* Start off with some of the easy ones: +zero */ - buffer[0] = 0; - buffer[1] = 0; - buffer[2] = 0; - buffer[3] = 0; - - ASSERT.equal(0, mod_ctype.rfloat(buffer, 'big', 0)); - ASSERT.equal(0, mod_ctype.rfloat(buffer, 'little', 0)); - - /* Test -0 */ - buffer[0] = 0x80; - ASSERT.equal(0, mod_ctype.rfloat(buffer, 'big', 0)); - buffer[3] = buffer[0]; - buffer[0] = 0; - ASSERT.equal(0, mod_ctype.rfloat(buffer, 'little', 0)); - - /* Catch +infin */ - buffer[0] = 0x7f; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(Number.POSITIVE_INFINITY, - mod_ctype.rfloat(buffer, 'big', 0)); - buffer[3] = 0x7f; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(Number.POSITIVE_INFINITY, - mod_ctype.rfloat(buffer, 'litle', 0)); - - /* Catch -infin */ - buffer[0] = 0xff; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(Number.NEGATIVE_INFINITY, - mod_ctype.rfloat(buffer, 'big', 0)); - buffer[3] = 0xff; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(Number.NEGATIVE_INFINITY, - mod_ctype.rfloat(buffer, 'litle', 0)); - - /* Catch NaN */ - - buffer[0] = 0x7f; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x23; - ASSERT.ok(isNaN(mod_ctype.rfloat(buffer, 'big', 0))); - buffer[3] = 0x7f; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x23; - ASSERT.ok(isNaN(mod_ctype.rfloat(buffer, 'little', 0))); - - /* Catch -infin */ - buffer[0] = 0xff; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x23; - ASSERT.ok(isNaN(mod_ctype.rfloat(buffer, 'big', 0))); - buffer[3] = 0xff; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x23; - ASSERT.ok(isNaN(mod_ctype.rfloat(buffer, 'little', 0))); - - /* On to some basic tests */ - /* 1.125 */ - buffer[0] = 0x3f; - buffer[1] = 0x90; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(1.125, mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x3f; - buffer[2] = 0x90; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(1.125, mod_ctype.rfloat(buffer, 'little', 0)); - - /* ff34a2b0 -2.4010576103645774e+38 */ - buffer[0] = 0xff; - buffer[1] = 0x34; - buffer[2] = 0xa2; - buffer[3] = 0xb0; - ASSERT.equal(-2.4010576103645774e+38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0xff; - buffer[2] = 0x34; - buffer[1] = 0xa2; - buffer[0] = 0xb0; - ASSERT.equal(-2.4010576103645774e+38, - mod_ctype.rfloat(buffer, 'little', 0)); - - /* Denormalized tests */ - - /* 0003f89a +/- 3.6468792534053364e-40 */ - buffer[0] = 0x00; - buffer[1] = 0x03; - buffer[2] = 0xf8; - buffer[3] = 0x9a; - ASSERT.equal(3.6468792534053364e-40, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x00; - buffer[2] = 0x03; - buffer[1] = 0xf8; - buffer[0] = 0x9a; - ASSERT.equal(3.6468792534053364e-40, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x03; - buffer[2] = 0xf8; - buffer[3] = 0x9a; - ASSERT.equal(-3.6468792534053364e-40, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x80; - buffer[2] = 0x03; - buffer[1] = 0xf8; - buffer[0] = 0x9a; - ASSERT.equal(-3.6468792534053364e-40, - mod_ctype.rfloat(buffer, 'little', 0)); - - - /* Maximum and minimum normalized and denormalized values */ - - /* Largest normalized number +/- 3.4028234663852886e+38 */ - - buffer[0] = 0x7f; - buffer[1] = 0x7f; - buffer[2] = 0xff; - buffer[3] = 0xff; - ASSERT.equal(3.4028234663852886e+38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x7f; - buffer[2] = 0x7f; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(3.4028234663852886e+38, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0xff; - buffer[1] = 0x7f; - buffer[2] = 0xff; - buffer[3] = 0xff; - ASSERT.equal(-3.4028234663852886e+38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0xff; - buffer[2] = 0x7f; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(-3.4028234663852886e+38, - mod_ctype.rfloat(buffer, 'little', 0)); - - /* Smallest normalied number +/- 1.1754943508222875e-38 */ - buffer[0] = 0x00; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(1.1754943508222875e-38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x00; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(1.1754943508222875e-38, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(-1.1754943508222875e-38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x80; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(-1.1754943508222875e-38, - mod_ctype.rfloat(buffer, 'little', 0)); - - - /* Smallest denormalized number 1.401298464324817e-45 */ - buffer[0] = 0x00; - buffer[1] = 0x00; - buffer[2] = 0x00; - buffer[3] = 0x01; - ASSERT.equal(1.401298464324817e-45, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x01; - ASSERT.equal(1.401298464324817e-45, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x00; - buffer[2] = 0x00; - buffer[3] = 0x01; - ASSERT.equal(-1.401298464324817e-45, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x80; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x01; - ASSERT.equal(-1.401298464324817e-45, - mod_ctype.rfloat(buffer, 'little', 0)); - - /* Largest denormalized value +/- 1.1754942106924411e-38 */ - buffer[0] = 0x00; - buffer[1] = 0x7f; - buffer[2] = 0xff; - buffer[3] = 0xff; - ASSERT.equal(1.1754942106924411e-38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x00; - buffer[2] = 0x7f; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(1.1754942106924411e-38, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x7f; - buffer[2] = 0xff; - buffer[3] = 0xff; - ASSERT.equal(-1.1754942106924411e-38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x80; - buffer[2] = 0x7f; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(-1.1754942106924411e-38, - mod_ctype.rfloat(buffer, 'little', 0)); - - /* Do some quick offset testing */ - buffer = new Buffer(6); - buffer[0] = 0x7f; - buffer[1] = 0x4e; - buffer[2] = 0x8a; - buffer[3] = 0x79; - buffer[4] = 0xcd; - buffer[5] = 0x3f; - - ASSERT.equal(2.745399582697325e+38, - mod_ctype.rfloat(buffer, 'big', 0)); - ASSERT.equal(1161619072, - mod_ctype.rfloat(buffer, 'big', 1)); - ASSERT.equal(-1.2027516403607578e-32, - mod_ctype.rfloat(buffer, 'big', 2)); - - ASSERT.equal(8.97661320504413e+34, - mod_ctype.rfloat(buffer, 'little', 0)); - ASSERT.equal(-261661920, - mod_ctype.rfloat(buffer, 'little', 1)); - ASSERT.equal(1.605271577835083, - mod_ctype.rfloat(buffer, 'little', 2)); - -} - -function testdouble() -{ - var buffer = new Buffer(10); - - /* Check 0 */ - buffer[0] = 0; - buffer[1] = 0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(0, - mod_ctype.rdouble(buffer, 'big', 0)); - ASSERT.equal(0, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(0, - mod_ctype.rdouble(buffer, 'big', 0)); - buffer[7] = 0x80; - buffer[6] = 0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(0, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Check NaN */ - buffer[0] = 0x7f; - buffer[1] = 0xf0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 23; - ASSERT.ok(isNaN(mod_ctype.rdouble(buffer, 'big', 0))); - - buffer[7] = 0x7f; - buffer[6] = 0xf0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 23; - ASSERT.ok(isNaN(mod_ctype.rdouble(buffer, 'little', 0))); - - buffer[0] = 0xff; - buffer[1] = 0xf0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 23; - ASSERT.ok(isNaN(mod_ctype.rdouble(buffer, 'big', 0))); - - buffer[7] = 0xff; - buffer[6] = 0xf0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 23; - ASSERT.ok(isNaN(mod_ctype.rdouble(buffer, 'little', 0))); - - /* pos inf */ - buffer[0] = 0x7f; - buffer[1] = 0xf0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(Number.POSITIVE_INFINITY, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x7f; - buffer[6] = 0xf0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(Number.POSITIVE_INFINITY, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* neg inf */ - buffer[0] = 0xff; - buffer[1] = 0xf0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(Number.NEGATIVE_INFINITY, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0xff; - buffer[6] = 0xf0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(Number.NEGATIVE_INFINITY, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Simple normalized values */ - - /* +/- 1.125 */ - buffer[0] = 0x3f; - buffer[1] = 0xf2; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(1.125, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x3f; - buffer[6] = 0xf2; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(1.125, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0xbf; - buffer[1] = 0xf2; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(-1.125, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0xbf; - buffer[6] = 0xf2; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(-1.125, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* +/- 1.4397318913736026e+283 */ - buffer[0] = 0x7a; - buffer[1] = 0xb8; - buffer[2] = 0xc9; - buffer[3] = 0x34; - buffer[4] = 0x72; - buffer[5] = 0x16; - buffer[6] = 0xf9; - buffer[7] = 0x0e; - ASSERT.equal(1.4397318913736026e+283, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x7a; - buffer[6] = 0xb8; - buffer[5] = 0xc9; - buffer[4] = 0x34; - buffer[3] = 0x72; - buffer[2] = 0x16; - buffer[1] = 0xf9; - buffer[0] = 0x0e; - ASSERT.equal(1.4397318913736026e+283, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0xfa; - buffer[1] = 0xb8; - buffer[2] = 0xc9; - buffer[3] = 0x34; - buffer[4] = 0x72; - buffer[5] = 0x16; - buffer[6] = 0xf9; - buffer[7] = 0x0e; - ASSERT.equal(-1.4397318913736026e+283, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0xfa; - buffer[6] = 0xb8; - buffer[5] = 0xc9; - buffer[4] = 0x34; - buffer[3] = 0x72; - buffer[2] = 0x16; - buffer[1] = 0xf9; - buffer[0] = 0x0e; - ASSERT.equal(-1.4397318913736026e+283, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Denormalized values */ - /* +/- 8.82521232268344e-309 */ - buffer[0] = 0x00; - buffer[1] = 0x06; - buffer[2] = 0x58; - buffer[3] = 0x94; - buffer[4] = 0x13; - buffer[5] = 0x27; - buffer[6] = 0x8a; - buffer[7] = 0xcd; - ASSERT.equal(8.82521232268344e-309, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x00; - buffer[6] = 0x06; - buffer[5] = 0x58; - buffer[4] = 0x94; - buffer[3] = 0x13; - buffer[2] = 0x27; - buffer[1] = 0x8a; - buffer[0] = 0xcd; - ASSERT.equal(8.82521232268344e-309, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x06; - buffer[2] = 0x58; - buffer[3] = 0x94; - buffer[4] = 0x13; - buffer[5] = 0x27; - buffer[6] = 0x8a; - buffer[7] = 0xcd; - ASSERT.equal(-8.82521232268344e-309, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x80; - buffer[6] = 0x06; - buffer[5] = 0x58; - buffer[4] = 0x94; - buffer[3] = 0x13; - buffer[2] = 0x27; - buffer[1] = 0x8a; - buffer[0] = 0xcd; - ASSERT.equal(-8.82521232268344e-309, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Edge cases, maximum and minimum values */ - - /* Smallest denormalized value 5e-324 */ - buffer[0] = 0x00; - buffer[1] = 0x00; - buffer[2] = 0x00; - buffer[3] = 0x00; - buffer[4] = 0x00; - buffer[5] = 0x00; - buffer[6] = 0x00; - buffer[7] = 0x01; - ASSERT.equal(5e-324, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x00; - buffer[6] = 0x00; - buffer[5] = 0x00; - buffer[4] = 0x00; - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x01; - ASSERT.equal(5e-324, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x00; - buffer[2] = 0x00; - buffer[3] = 0x00; - buffer[4] = 0x00; - buffer[5] = 0x00; - buffer[6] = 0x00; - buffer[7] = 0x01; - ASSERT.equal(-5e-324, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x80; - buffer[6] = 0x00; - buffer[5] = 0x00; - buffer[4] = 0x00; - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x01; - ASSERT.equal(-5e-324, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Largest denormalized value 2.225073858507201e-308 */ - buffer[0] = 0x00; - buffer[1] = 0x0f; - buffer[2] = 0xff; - buffer[3] = 0xff; - buffer[4] = 0xff; - buffer[5] = 0xff; - buffer[6] = 0xff; - buffer[7] = 0xff; - ASSERT.equal(2.225073858507201e-308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x00; - buffer[6] = 0x0f; - buffer[5] = 0xff; - buffer[4] = 0xff; - buffer[3] = 0xff; - buffer[2] = 0xff; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(2.225073858507201e-308, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x0f; - buffer[2] = 0xff; - buffer[3] = 0xff; - buffer[4] = 0xff; - buffer[5] = 0xff; - buffer[6] = 0xff; - buffer[7] = 0xff; - ASSERT.equal(-2.225073858507201e-308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x80; - buffer[6] = 0x0f; - buffer[5] = 0xff; - buffer[4] = 0xff; - buffer[3] = 0xff; - buffer[2] = 0xff; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(-2.225073858507201e-308, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Smallest normalized value 2.2250738585072014e-308 */ - buffer[0] = 0x00; - buffer[1] = 0x10; - buffer[2] = 0x00; - buffer[3] = 0x00; - buffer[4] = 0x00; - buffer[5] = 0x00; - buffer[6] = 0x00; - buffer[7] = 0x00; - ASSERT.equal(2.2250738585072014e-308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x00; - buffer[6] = 0x10; - buffer[5] = 0x00; - buffer[4] = 0x00; - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(2.2250738585072014e-308, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x10; - buffer[2] = 0x00; - buffer[3] = 0x00; - buffer[4] = 0x00; - buffer[5] = 0x00; - buffer[6] = 0x00; - buffer[7] = 0x00; - ASSERT.equal(-2.2250738585072014e-308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x80; - buffer[6] = 0x10; - buffer[5] = 0x00; - buffer[4] = 0x00; - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(-2.2250738585072014e-308, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Largest normalized value 1.7976931348623157e+308 */ - buffer[0] = 0x7f; - buffer[1] = 0xef; - buffer[2] = 0xff; - buffer[3] = 0xff; - buffer[4] = 0xff; - buffer[5] = 0xff; - buffer[6] = 0xff; - buffer[7] = 0xff; - ASSERT.equal(1.7976931348623157e+308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x7f; - buffer[6] = 0xef; - buffer[5] = 0xff; - buffer[4] = 0xff; - buffer[3] = 0xff; - buffer[2] = 0xff; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(1.7976931348623157e+308, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0xff; - buffer[1] = 0xef; - buffer[2] = 0xff; - buffer[3] = 0xff; - buffer[4] = 0xff; - buffer[5] = 0xff; - buffer[6] = 0xff; - buffer[7] = 0xff; - ASSERT.equal(-1.7976931348623157e+308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0xff; - buffer[6] = 0xef; - buffer[5] = 0xff; - buffer[4] = 0xff; - buffer[3] = 0xff; - buffer[2] = 0xff; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(-1.7976931348623157e+308, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Try offsets */ - buffer[0] = 0xde; - buffer[1] = 0xad; - buffer[2] = 0xbe; - buffer[3] = 0xef; - buffer[4] = 0xba; - buffer[5] = 0xdd; - buffer[6] = 0xca; - buffer[7] = 0xfe; - buffer[8] = 0x16; - buffer[9] = 0x79; - - ASSERT.equal(-1.1885958404126936e+148, - mod_ctype.rdouble(buffer, 'big', 0)); - ASSERT.equal(-2.4299184080448593e-88, - mod_ctype.rdouble(buffer, 'big', 1)); - ASSERT.equal(-0.000015130017658081283, - mod_ctype.rdouble(buffer, 'big', 2)); - - ASSERT.equal(-5.757458694845505e+302, - mod_ctype.rdouble(buffer, 'little', 0)); - ASSERT.equal(6.436459604192476e-198, - mod_ctype.rdouble(buffer, 'little', 1)); - ASSERT.equal(1.9903745632417286e+275, - mod_ctype.rdouble(buffer, 'little', 2)); -} - -testfloat(); -testdouble(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js deleted file mode 100644 index b5fd95cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js +++ /dev/null @@ -1,753 +0,0 @@ -/* - * Another place to find bugs that may yet plague us. This time with writing out - * floats to arrays. We are lazy and did basically just take the opposite of our - * test code to read in values. - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - - -/* - * A useful thing to keep around for debugging - * console.log('buffer[0]: ' + buffer[0].toString(16)); - * console.log('buffer[1]: ' + buffer[1].toString(16)); - * console.log('buffer[2]: ' + buffer[2].toString(16)); - * console.log('buffer[3]: ' + buffer[3].toString(16)); - * console.log('buffer[4]: ' + buffer[4].toString(16)); - * console.log('buffer[5]: ' + buffer[5].toString(16)); - * console.log('buffer[6]: ' + buffer[6].toString(16)); - * console.log('buffer[7]: ' + buffer[7].toString(16)); - */ - -function testfloat() -{ - var buffer = new Buffer(4); - mod_ctype.wfloat(0, 'big', buffer, 0); - /* Start off with some of the easy ones: +zero */ - ASSERT.equal(0, buffer[0]); - ASSERT.equal(0, buffer[1]); - ASSERT.equal(0, buffer[2]); - ASSERT.equal(0, buffer[3]); - mod_ctype.wfloat(0, 'little', buffer, 0); - ASSERT.equal(0, buffer[0]); - ASSERT.equal(0, buffer[1]); - ASSERT.equal(0, buffer[2]); - ASSERT.equal(0, buffer[3]); - - /* Catch +infin */ - mod_ctype.wfloat(Number.POSITIVE_INFINITY, 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(Number.POSITIVE_INFINITY, 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Catch -infin */ - mod_ctype.wfloat(Number.NEGATIVE_INFINITY, 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(Number.NEGATIVE_INFINITY, 'little', buffer, 0); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Catch NaN */ - - /* - * NaN Is a litle weird in its requirements, so we're going to encode a - * bit of how we actually implement it into this test. Probably not the - * best, since technically the sign is a don't care and the mantissa - * needs to just be non-zero. - */ - mod_ctype.wfloat(NaN, 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x17, buffer[3]); - mod_ctype.wfloat(NaN, 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x17, buffer[0]); - - /* On to some basic tests */ - /* 1.125 */ - mod_ctype.wfloat(1.125, 'big', buffer, 0); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0x90, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(1.125, 'little', buffer, 0); - ASSERT.equal(0x3f, buffer[3]); - ASSERT.equal(0x90, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - mod_ctype.wfloat(1.0000001192092896, 'big', buffer, 0); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(1.0000001192092896, 'little', buffer, 0); - ASSERT.equal(0x3f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - mod_ctype.wfloat(1.0000001192092896, 'big', buffer, 0); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(1.0000001192092896, 'little', buffer, 0); - ASSERT.equal(0x3f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - mod_ctype.wfloat(2.3283067140944524e-10, 'big', buffer, 0); - ASSERT.equal(0x2f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(2.3283067140944524e-10, 'little', buffer, 0); - ASSERT.equal(0x2f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - /* ff34a2b0 -2.4010576103645774e+38 */ - mod_ctype.wfloat(-2.4010576103645774e+38, - 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0x34, buffer[1]); - ASSERT.equal(0xa2, buffer[2]); - ASSERT.equal(0xb0, buffer[3]); - mod_ctype.wfloat(-2.4010576103645774e+38, - 'little', buffer, 0); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0x34, buffer[2]); - ASSERT.equal(0xa2, buffer[1]); - ASSERT.equal(0xb0, buffer[0]); - - /* Denormalized tests */ - - /* 0003f89a +/- 3.6468792534053364e-40 */ - mod_ctype.wfloat(3.6468792534053364e-40, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x03, buffer[1]); - ASSERT.equal(0xf8, buffer[2]); - ASSERT.equal(0x9a, buffer[3]); - mod_ctype.wfloat(3.6468792534053364e-40, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x03, buffer[2]); - ASSERT.equal(0xf8, buffer[1]); - ASSERT.equal(0x9a, buffer[0]); - - mod_ctype.wfloat(-3.6468792534053364e-40, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x03, buffer[1]); - ASSERT.equal(0xf8, buffer[2]); - ASSERT.equal(0x9a, buffer[3]); - mod_ctype.wfloat(-3.6468792534053364e-40, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[3]); - ASSERT.equal(0x03, buffer[2]); - ASSERT.equal(0xf8, buffer[1]); - ASSERT.equal(0x9a, buffer[0]); - - /* Maximum and minimum normalized and denormalized values */ - - /* Largest normalized number +/- 3.4028234663852886e+38 */ - - mod_ctype.wfloat(3.4028234663852886e+38, - 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - mod_ctype.wfloat(3.4028234663852886e+38, - 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[3]); - ASSERT.equal(0x7f, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - mod_ctype.wfloat(-3.4028234663852886e+38, - 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - mod_ctype.wfloat(-3.4028234663852886e+38, - 'little', buffer, 0); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0x7f, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - /* Smallest normalied number +/- 1.1754943508222875e-38 */ - - mod_ctype.wfloat(1.1754943508222875e-38, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(1.1754943508222875e-38, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - mod_ctype.wfloat(-1.1754943508222875e-38, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(-1.1754943508222875e-38, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Smallest denormalized number 1.401298464324817e-45 */ - mod_ctype.wfloat(1.401298464324817e-45, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(1.401298464324817e-45, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - mod_ctype.wfloat(-1.401298464324817e-45, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(-1.401298464324817e-45, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - /* Largest denormalized value +/- 1.1754942106924411e-38 */ - - mod_ctype.wfloat(1.1754942106924411e-38, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - mod_ctype.wfloat(1.1754942106924411e-38, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x7f, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - mod_ctype.wfloat(-1.1754942106924411e-38, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - mod_ctype.wfloat(-1.1754942106924411e-38, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[3]); - ASSERT.equal(0x7f, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - /* Do some quick offset testing */ - buffer = new Buffer(6); - mod_ctype.wfloat(-1.2027516403607578e-32, - 'big', buffer, 2); - ASSERT.equal(0x8a, buffer[2]); - ASSERT.equal(0x79, buffer[3]); - ASSERT.equal(0xcd, buffer[4]); - ASSERT.equal(0x3f, buffer[5]); - - mod_ctype.wfloat(-1.2027516403607578e-32, - 'little', buffer, 2); - ASSERT.equal(0x8a, buffer[5]); - ASSERT.equal(0x79, buffer[4]); - ASSERT.equal(0xcd, buffer[3]); - ASSERT.equal(0x3f, buffer[2]); - -} - -function testdouble() -{ - var buffer = new Buffer(10); - - /* Check 0 */ - mod_ctype.wdouble(0, 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - mod_ctype.wdouble(0, 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Check NaN */ - /* Similar to floats we are only generating a subset of values */ - mod_ctype.wdouble(NaN, 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0xf0, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x17, buffer[7]); - mod_ctype.wdouble(NaN, 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[7]); - ASSERT.equal(0xf0, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x17, buffer[0]); - - /* pos inf */ - mod_ctype.wdouble(Number.POSITIVE_INFINITY, - 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0xf0, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - mod_ctype.wdouble(Number.POSITIVE_INFINITY, - 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[7]); - ASSERT.equal(0xf0, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* neg inf */ - mod_ctype.wdouble(Number.NEGATIVE_INFINITY, - 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xf0, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - mod_ctype.wdouble(Number.NEGATIVE_INFINITY, - 'little', buffer, 0); - ASSERT.equal(0xff, buffer[7]); - ASSERT.equal(0xf0, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Simple normalized values */ - - /* +/- 1.125 */ - mod_ctype.wdouble(1.125, - 'big', buffer, 0); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0xf2, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wdouble(1.125, - 'little', buffer, 0); - ASSERT.equal(0x3f, buffer[7]); - ASSERT.equal(0xf2, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - mod_ctype.wdouble(-1.125, - 'big', buffer, 0); - ASSERT.equal(0xbf, buffer[0]); - ASSERT.equal(0xf2, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wdouble(-1.125, - 'little', buffer, 0); - ASSERT.equal(0xbf, buffer[7]); - ASSERT.equal(0xf2, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - - /* +/- 1.4397318913736026e+283 */ - mod_ctype.wdouble(1.4397318913736026e+283, - 'big', buffer, 0); - ASSERT.equal(0x7a, buffer[0]); - ASSERT.equal(0xb8, buffer[1]); - ASSERT.equal(0xc9, buffer[2]); - ASSERT.equal(0x34, buffer[3]); - ASSERT.equal(0x72, buffer[4]); - ASSERT.equal(0x16, buffer[5]); - ASSERT.equal(0xf9, buffer[6]); - ASSERT.equal(0x0e, buffer[7]); - - mod_ctype.wdouble(1.4397318913736026e+283, - 'little', buffer, 0); - ASSERT.equal(0x7a, buffer[7]); - ASSERT.equal(0xb8, buffer[6]); - ASSERT.equal(0xc9, buffer[5]); - ASSERT.equal(0x34, buffer[4]); - ASSERT.equal(0x72, buffer[3]); - ASSERT.equal(0x16, buffer[2]); - ASSERT.equal(0xf9, buffer[1]); - ASSERT.equal(0x0e, buffer[0]); - - mod_ctype.wdouble(-1.4397318913736026e+283, - 'big', buffer, 0); - ASSERT.equal(0xfa, buffer[0]); - ASSERT.equal(0xb8, buffer[1]); - ASSERT.equal(0xc9, buffer[2]); - ASSERT.equal(0x34, buffer[3]); - ASSERT.equal(0x72, buffer[4]); - ASSERT.equal(0x16, buffer[5]); - ASSERT.equal(0xf9, buffer[6]); - ASSERT.equal(0x0e, buffer[7]); - - mod_ctype.wdouble(-1.4397318913736026e+283, - 'little', buffer, 0); - ASSERT.equal(0xfa, buffer[7]); - ASSERT.equal(0xb8, buffer[6]); - ASSERT.equal(0xc9, buffer[5]); - ASSERT.equal(0x34, buffer[4]); - ASSERT.equal(0x72, buffer[3]); - ASSERT.equal(0x16, buffer[2]); - ASSERT.equal(0xf9, buffer[1]); - ASSERT.equal(0x0e, buffer[0]); - - /* Denormalized values */ - /* +/- 8.82521232268344e-309 */ - mod_ctype.wdouble(8.82521232268344e-309, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x06, buffer[1]); - ASSERT.equal(0x58, buffer[2]); - ASSERT.equal(0x94, buffer[3]); - ASSERT.equal(0x13, buffer[4]); - ASSERT.equal(0x27, buffer[5]); - ASSERT.equal(0x8a, buffer[6]); - ASSERT.equal(0xcd, buffer[7]); - - mod_ctype.wdouble(8.82521232268344e-309, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x06, buffer[6]); - ASSERT.equal(0x58, buffer[5]); - ASSERT.equal(0x94, buffer[4]); - ASSERT.equal(0x13, buffer[3]); - ASSERT.equal(0x27, buffer[2]); - ASSERT.equal(0x8a, buffer[1]); - ASSERT.equal(0xcd, buffer[0]); - - mod_ctype.wdouble(-8.82521232268344e-309, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x06, buffer[1]); - ASSERT.equal(0x58, buffer[2]); - ASSERT.equal(0x94, buffer[3]); - ASSERT.equal(0x13, buffer[4]); - ASSERT.equal(0x27, buffer[5]); - ASSERT.equal(0x8a, buffer[6]); - ASSERT.equal(0xcd, buffer[7]); - - mod_ctype.wdouble(-8.82521232268344e-309, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[7]); - ASSERT.equal(0x06, buffer[6]); - ASSERT.equal(0x58, buffer[5]); - ASSERT.equal(0x94, buffer[4]); - ASSERT.equal(0x13, buffer[3]); - ASSERT.equal(0x27, buffer[2]); - ASSERT.equal(0x8a, buffer[1]); - ASSERT.equal(0xcd, buffer[0]); - - - /* Edge cases, maximum and minimum values */ - - /* Smallest denormalized value 5e-324 */ - mod_ctype.wdouble(5e-324, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x01, buffer[7]); - - mod_ctype.wdouble(5e-324, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - mod_ctype.wdouble(-5e-324, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x01, buffer[7]); - - mod_ctype.wdouble(-5e-324, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[7]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - - - /* Largest denormalized value 2.225073858507201e-308 */ - mod_ctype.wdouble(2.225073858507201e-308, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x0f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wdouble(2.225073858507201e-308, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x0f, buffer[6]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - mod_ctype.wdouble(-2.225073858507201e-308, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x0f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wdouble(-2.225073858507201e-308, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[7]); - ASSERT.equal(0x0f, buffer[6]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - - /* Smallest normalized value 2.2250738585072014e-308 */ - mod_ctype.wdouble(2.2250738585072014e-308, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x10, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wdouble(2.2250738585072014e-308, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x10, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - mod_ctype.wdouble(-2.2250738585072014e-308, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x10, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wdouble(-2.2250738585072014e-308, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[7]); - ASSERT.equal(0x10, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - - /* Largest normalized value 1.7976931348623157e+308 */ - mod_ctype.wdouble(1.7976931348623157e+308, - 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0xef, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wdouble(1.7976931348623157e+308, - 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[7]); - ASSERT.equal(0xef, buffer[6]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - mod_ctype.wdouble(-1.7976931348623157e+308, - 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xef, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wdouble(-1.7976931348623157e+308, - 'little', buffer, 0); - ASSERT.equal(0xff, buffer[7]); - ASSERT.equal(0xef, buffer[6]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - - /* Try offsets */ - buffer[0] = 0xde; - buffer[1] = 0xad; - buffer[2] = 0xbe; - buffer[3] = 0xef; - buffer[4] = 0xba; - buffer[5] = 0xdd; - buffer[6] = 0xca; - buffer[7] = 0xfe; - buffer[8] = 0x16; - buffer[9] = 0x79; - - mod_ctype.wdouble(-0.000015130017658081283, - 'big', buffer, 2); - ASSERT.equal(0xbe, buffer[2]); - ASSERT.equal(0xef, buffer[3]); - ASSERT.equal(0xba, buffer[4]); - ASSERT.equal(0xdd, buffer[5]); - ASSERT.equal(0xca, buffer[6]); - ASSERT.equal(0xfe, buffer[7]); - ASSERT.equal(0x16, buffer[8]); - ASSERT.equal(0x79, buffer[9]); - - mod_ctype.wdouble(-0.000015130017658081283, - 'little', buffer, 2); - ASSERT.equal(0xbe, buffer[9]); - ASSERT.equal(0xef, buffer[8]); - ASSERT.equal(0xba, buffer[7]); - ASSERT.equal(0xdd, buffer[6]); - ASSERT.equal(0xca, buffer[5]); - ASSERT.equal(0xfe, buffer[4]); - ASSERT.equal(0x16, buffer[3]); - ASSERT.equal(0x79, buffer[2]); -} - -testfloat(); -testdouble(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js deleted file mode 100644 index 1ffdac09..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js +++ /dev/null @@ -1,638 +0,0 @@ -/* - * Test our ability to read and write signed 64-bit integers. - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -function testRead() -{ - var res, data; - data = new Buffer(10); - - data[0] = 0x32; - data[1] = 0x65; - data[2] = 0x42; - data[3] = 0x56; - data[4] = 0x23; - data[5] = 0xff; - data[6] = 0xff; - data[7] = 0xff; - data[8] = 0x89; - data[9] = 0x11; - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(0x32654256, res[0]); - ASSERT.equal(0x23ffffff, res[1]); - res = mod_ctype.rsint64(data, 'big', 1); - ASSERT.equal(0x65425623, res[0]); - ASSERT.equal(0xffffff89, res[1]); - res = mod_ctype.rsint64(data, 'big', 2); - ASSERT.equal(0x425623ff, res[0]); - ASSERT.equal(0xffff8911, res[1]); - res = mod_ctype.rsint64(data, 'little', 0); - ASSERT.equal(-0x000000dc, res[0]); - ASSERT.equal(-0xa9bd9ace, res[1]); - res = mod_ctype.rsint64(data, 'little', 1); - ASSERT.equal(-0x76000000, res[0]); - ASSERT.equal(-0xdca9bd9b, res[1]); - res = mod_ctype.rsint64(data, 'little', 2); - ASSERT.equal(0x1189ffff, res[0]); - ASSERT.equal(0xff235642, res[1]); - - data.fill(0x00); - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'big', 1); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'big', 2); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'little', 0); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'little', 1); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'little', 2); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - - data.fill(0xff); - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'big', 1); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'big', 2); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'little', 0); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'little', 1); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'little', 2); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - - data[0] = 0x80; - data[1] = 0x00; - data[2] = 0x00; - data[3] = 0x00; - data[4] = 0x00; - data[5] = 0x00; - data[6] = 0x00; - data[7] = 0x00; - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(-0x80000000, res[0]); - ASSERT.equal(0, res[1]); - - - data[7] = 0x80; - data[6] = 0x00; - data[5] = 0x00; - data[4] = 0x00; - data[3] = 0x00; - data[2] = 0x00; - data[1] = 0x00; - data[0] = 0x00; - res = mod_ctype.rsint64(data, 'little', 0); - ASSERT.equal(-0x80000000, res[0]); - ASSERT.equal(0, res[1]); - - data[0] = 0x80; - data[1] = 0x00; - data[2] = 0x00; - data[3] = 0x00; - data[4] = 0x00; - data[5] = 0x00; - data[6] = 0x00; - data[7] = 0x01; - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(-0x7fffffff, res[0]); - ASSERT.equal(-0xffffffff, res[1]); - - -} - -function testWriteZero() -{ - var data, buf; - buf = new Buffer(10); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0, buf[9]); - - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0, buf[9]); -} - -/* - * Also include tests that are going to force us to go into a negative value and - * insure that it's written correctly. - */ -function testWrite() -{ - var data, buf; - - buf = new Buffer(10); - data = [ 0x234456, 0x87 ]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0x00, buf[0]); - ASSERT.equal(0x23, buf[1]); - ASSERT.equal(0x44, buf[2]); - ASSERT.equal(0x56, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x87, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x23, buf[2]); - ASSERT.equal(0x44, buf[3]); - ASSERT.equal(0x56, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x87, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x23, buf[3]); - ASSERT.equal(0x44, buf[4]); - ASSERT.equal(0x56, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x87, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0x87, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x56, buf[4]); - ASSERT.equal(0x44, buf[5]); - ASSERT.equal(0x23, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x87, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x56, buf[5]); - ASSERT.equal(0x44, buf[6]); - ASSERT.equal(0x23, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x66, buf[9]); - - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x87, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x56, buf[6]); - ASSERT.equal(0x44, buf[7]); - ASSERT.equal(0x23, buf[8]); - ASSERT.equal(0x00, buf[9]); - - data = [0x3421, 0x34abcdba]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0x00, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x34, buf[2]); - ASSERT.equal(0x21, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0xab, buf[5]); - ASSERT.equal(0xcd, buf[6]); - ASSERT.equal(0xba, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x34, buf[3]); - ASSERT.equal(0x21, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0xab, buf[6]); - ASSERT.equal(0xcd, buf[7]); - ASSERT.equal(0xba, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0x21, buf[5]); - ASSERT.equal(0x34, buf[6]); - ASSERT.equal(0xab, buf[7]); - ASSERT.equal(0xcd, buf[8]); - ASSERT.equal(0xba, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0xba, buf[0]); - ASSERT.equal(0xcd, buf[1]); - ASSERT.equal(0xab, buf[2]); - ASSERT.equal(0x34, buf[3]); - ASSERT.equal(0x21, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0xba, buf[1]); - ASSERT.equal(0xcd, buf[2]); - ASSERT.equal(0xab, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0x21, buf[5]); - ASSERT.equal(0x34, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0xba, buf[2]); - ASSERT.equal(0xcd, buf[3]); - ASSERT.equal(0xab, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0x21, buf[6]); - ASSERT.equal(0x34, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x00, buf[9]); - - - data = [ -0x80000000, 0 ]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0x80, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0x00, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x80, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - data = [ -0x7fffffff, -0xffffffff ]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0x80, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x01, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0x01, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x80, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - data = [ 0x0, -0x1]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0xff, buf[0]); - ASSERT.equal(0xff, buf[1]); - ASSERT.equal(0xff, buf[2]); - ASSERT.equal(0xff, buf[3]); - ASSERT.equal(0xff, buf[4]); - ASSERT.equal(0xff, buf[5]); - ASSERT.equal(0xff, buf[6]); - ASSERT.equal(0xff, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0xff, buf[0]); - ASSERT.equal(0xff, buf[1]); - ASSERT.equal(0xff, buf[2]); - ASSERT.equal(0xff, buf[3]); - ASSERT.equal(0xff, buf[4]); - ASSERT.equal(0xff, buf[5]); - ASSERT.equal(0xff, buf[6]); - ASSERT.equal(0xff, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); -} - -/* - * Make sure we catch invalid writes. - */ -function testWriteInvalid() -{ - var data, buf; - - /* Buffer too small */ - buf = new Buffer(4); - data = [ 0, 0]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 0); - }, Error, 'buffer too small'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 0); - }, Error, 'buffer too small'); - - /* Beyond the end of the buffer */ - buf = new Buffer(12); - data = [ 0, 0]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 11); - }, Error, 'write beyond end of buffer'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 11); - }, Error, 'write beyond end of buffer'); - - /* Write fractional values */ - buf = new Buffer(12); - data = [ 3.33, 0 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 0, 3.3 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ -3.33, 0 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 0, -3.3 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 3.33, 2.42 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 3.33, -2.42 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ -3.33, -2.42 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ -3.33, 2.42 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - /* Signs don't match */ - buf = new Buffer(12); - data = [ 0x800000, -0x32 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ -0x800000, 0x32 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - /* Write values that are too large */ - buf = new Buffer(12); - data = [ 0x80000000, 0 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0x7fffffff, 0x100000000 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0x00, 0x800000000 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0xffffffffff, 0xffffff238 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0x23, 0xffffff238 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ -0x80000000, -0xfff238 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ -0x80000004, -0xfff238 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); -} - - -testRead(); -testWrite(); -testWriteZero(); -testWriteInvalid(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js deleted file mode 100644 index 5236d268..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Tests to verify we're reading in signed integers correctly - */ -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -/* - * Test 8 bit signed integers - */ -function test8() -{ - var data = new Buffer(4); - - data[0] = 0x23; - ASSERT.equal(0x23, mod_ctype.rsint8(data, 'big', 0)); - ASSERT.equal(0x23, mod_ctype.rsint8(data, 'little', 0)); - - data[0] = 0xff; - ASSERT.equal(-1, mod_ctype.rsint8(data, 'big', 0)); - ASSERT.equal(-1, mod_ctype.rsint8(data, 'little', 0)); - - data[0] = 0x87; - data[1] = 0xab; - data[2] = 0x7c; - data[3] = 0xef; - ASSERT.equal(-121, mod_ctype.rsint8(data, 'big', 0)); - ASSERT.equal(-85, mod_ctype.rsint8(data, 'big', 1)); - ASSERT.equal(124, mod_ctype.rsint8(data, 'big', 2)); - ASSERT.equal(-17, mod_ctype.rsint8(data, 'big', 3)); - ASSERT.equal(-121, mod_ctype.rsint8(data, 'little', 0)); - ASSERT.equal(-85, mod_ctype.rsint8(data, 'little', 1)); - ASSERT.equal(124, mod_ctype.rsint8(data, 'little', 2)); - ASSERT.equal(-17, mod_ctype.rsint8(data, 'little', 3)); -} - -function test16() -{ - var buffer = new Buffer(6); - buffer[0] = 0x16; - buffer[1] = 0x79; - ASSERT.equal(0x1679, mod_ctype.rsint16(buffer, 'big', 0)); - ASSERT.equal(0x7916, mod_ctype.rsint16(buffer, 'little', 0)); - - buffer[0] = 0xff; - buffer[1] = 0x80; - ASSERT.equal(-128, mod_ctype.rsint16(buffer, 'big', 0)); - ASSERT.equal(-32513, mod_ctype.rsint16(buffer, 'little', 0)); - - /* test offset with weenix */ - buffer[0] = 0x77; - buffer[1] = 0x65; - buffer[2] = 0x65; - buffer[3] = 0x6e; - buffer[4] = 0x69; - buffer[5] = 0x78; - ASSERT.equal(0x7765, mod_ctype.rsint16(buffer, 'big', 0)); - ASSERT.equal(0x6565, mod_ctype.rsint16(buffer, 'big', 1)); - ASSERT.equal(0x656e, mod_ctype.rsint16(buffer, 'big', 2)); - ASSERT.equal(0x6e69, mod_ctype.rsint16(buffer, 'big', 3)); - ASSERT.equal(0x6978, mod_ctype.rsint16(buffer, 'big', 4)); - ASSERT.equal(0x6577, mod_ctype.rsint16(buffer, 'little', 0)); - ASSERT.equal(0x6565, mod_ctype.rsint16(buffer, 'little', 1)); - ASSERT.equal(0x6e65, mod_ctype.rsint16(buffer, 'little', 2)); - ASSERT.equal(0x696e, mod_ctype.rsint16(buffer, 'little', 3)); - ASSERT.equal(0x7869, mod_ctype.rsint16(buffer, 'little', 4)); -} - -function test32() -{ - var buffer = new Buffer(6); - buffer[0] = 0x43; - buffer[1] = 0x53; - buffer[2] = 0x16; - buffer[3] = 0x79; - ASSERT.equal(0x43531679, mod_ctype.rsint32(buffer, 'big', 0)); - ASSERT.equal(0x79165343, mod_ctype.rsint32(buffer, 'little', 0)); - - buffer[0] = 0xff; - buffer[1] = 0xfe; - buffer[2] = 0xef; - buffer[3] = 0xfa; - ASSERT.equal(-69638, mod_ctype.rsint32(buffer, 'big', 0)); - ASSERT.equal(-84934913, mod_ctype.rsint32(buffer, 'little', 0)); - - buffer[0] = 0x42; - buffer[1] = 0xc3; - buffer[2] = 0x95; - buffer[3] = 0xa9; - buffer[4] = 0x36; - buffer[5] = 0x17; - ASSERT.equal(0x42c395a9, mod_ctype.rsint32(buffer, 'big', 0)); - ASSERT.equal(-1013601994, mod_ctype.rsint32(buffer, 'big', 1)); - ASSERT.equal(-1784072681, mod_ctype.rsint32(buffer, 'big', 2)); - ASSERT.equal(-1449802942, mod_ctype.rsint32(buffer, 'little', 0)); - ASSERT.equal(917083587, mod_ctype.rsint32(buffer, 'little', 1)); - ASSERT.equal(389458325, mod_ctype.rsint32(buffer, 'little', 2)); -} - -test8(); -test16(); -test32(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js deleted file mode 100644 index 5488177b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Test to make sure that we properly are erroring whenever we try to write - * beyond the size of the integer. - */ - -var mod_ctio = require('../../../ctio.js'); -var mod_assert = require('assert'); -var tb = new Buffer(16); /* Largest buffer we'll need */ - -var cases = [ - { func: - function () { - mod_ctio.wsint8(0x80, 'big', tb, 0); - }, test: '+int8_t' }, - { func: - function () { - mod_ctio.wsint8(-0x81, 'big', tb, 0); - }, test: '-int8_t' }, - - { func: - function () { - mod_ctio.wsint16(0x8000, 'big', tb, 0); - }, test: '+int16_t' }, - { func: - function () { - mod_ctio.wsint16(-0x8001, 'big', tb, 0); - }, test: '-int16_t' }, - { func: - function () { - mod_ctio.wsint32(0x80000000, 'big', tb, 0); - }, test: '+int32_t' }, - { func: - function () { - mod_ctio.wsint32(-0x80000001, 'big', tb, 0); - }, test: '-int32_t' }, - { func: - function () { - mod_ctio.wsint64([ 0x80000000, 0 ], 'big', tb, 0); - }, test: '+int64_t' }, - { func: - function () { - mod_ctio.wsint64([ -0x80000000, -1 ], 'big', tb, 0); - }, test: '-int64_t' } -]; - -function test() -{ - var ii; - for (ii = 0; ii < cases.length; ii++) - mod_assert.throws(cases[ii]['func'], Error, cases[ii]['test']); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js deleted file mode 100644 index 98b6a32a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Tests to verify we're writing signed integers correctly - */ -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -function test8() -{ - var buffer = new Buffer(4); - mod_ctype.wsint8(0x23, 'big', buffer, 0); - mod_ctype.wsint8(0x23, 'little', buffer, 1); - mod_ctype.wsint8(-5, 'big', buffer, 2); - mod_ctype.wsint8(-5, 'little', buffer, 3); - - ASSERT.equal(0x23, buffer[0]); - ASSERT.equal(0x23, buffer[1]); - ASSERT.equal(0xfb, buffer[2]); - ASSERT.equal(0xfb, buffer[3]); - - /* Make sure we handle truncation correctly */ - ASSERT.throws(function () { - mod_ctype.wsint8(0xabc, 'big', buffer, 0); - }); - ASSERT.throws(function () { - mod_ctype.wsint8(0xabc, 'little', buffer, 0); - }); -} - -function test16() -{ - var buffer = new Buffer(6); - mod_ctype.wsint16(0x0023, 'big', buffer, 0); - mod_ctype.wsint16(0x0023, 'little', buffer, 2); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x23, buffer[1]); - ASSERT.equal(0x23, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wsint16(-5, 'big', buffer, 0); - mod_ctype.wsint16(-5, 'little', buffer, 2); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xfb, buffer[1]); - ASSERT.equal(0xfb, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - - mod_ctype.wsint16(-1679, 'big', buffer, 1); - mod_ctype.wsint16(-1679, 'little', buffer, 3); - ASSERT.equal(0xf9, buffer[1]); - ASSERT.equal(0x71, buffer[2]); - ASSERT.equal(0x71, buffer[3]); - ASSERT.equal(0xf9, buffer[4]); -} - -function test32() -{ - var buffer = new Buffer(8); - mod_ctype.wsint32(0x23, 'big', buffer, 0); - mod_ctype.wsint32(0x23, 'little', buffer, 4); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x23, buffer[3]); - ASSERT.equal(0x23, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wsint32(-5, 'big', buffer, 0); - mod_ctype.wsint32(-5, 'little', buffer, 4); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xfb, buffer[3]); - ASSERT.equal(0xfb, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wsint32(-805306713, 'big', buffer, 0); - mod_ctype.wsint32(-805306713, 'litle', buffer, 4); - ASSERT.equal(0xcf, buffer[0]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xfe, buffer[2]); - ASSERT.equal(0xa7, buffer[3]); - ASSERT.equal(0xa7, buffer[4]); - ASSERT.equal(0xfe, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xcf, buffer[7]); -} - -test8(); -test16(); -test32(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js deleted file mode 100644 index cf66ac7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Test our ability to read and write unsigned 64-bit integers. - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -function testRead() -{ - var res, data; - data = new Buffer(10); - - data[0] = 0x32; - data[1] = 0x65; - data[2] = 0x42; - data[3] = 0x56; - data[4] = 0x23; - data[5] = 0xff; - data[6] = 0xff; - data[7] = 0xff; - data[8] = 0x89; - data[9] = 0x11; - res = mod_ctype.ruint64(data, 'big', 0); - ASSERT.equal(0x32654256, res[0]); - ASSERT.equal(0x23ffffff, res[1]); - res = mod_ctype.ruint64(data, 'big', 1); - ASSERT.equal(0x65425623, res[0]); - ASSERT.equal(0xffffff89, res[1]); - res = mod_ctype.ruint64(data, 'big', 2); - ASSERT.equal(0x425623ff, res[0]); - ASSERT.equal(0xffff8911, res[1]); - res = mod_ctype.ruint64(data, 'little', 0); - ASSERT.equal(0xffffff23, res[0]); - ASSERT.equal(0x56426532, res[1]); - res = mod_ctype.ruint64(data, 'little', 1); - ASSERT.equal(0x89ffffff, res[0]); - ASSERT.equal(0x23564265, res[1]); - res = mod_ctype.ruint64(data, 'little', 2); - ASSERT.equal(0x1189ffff, res[0]); - ASSERT.equal(0xff235642, res[1]); - -} - -function testReadOver() -{ - var res, data; - data = new Buffer(10); - - data[0] = 0x80; - data[1] = 0xff; - data[2] = 0x80; - data[3] = 0xff; - data[4] = 0x80; - data[5] = 0xff; - data[6] = 0x80; - data[7] = 0xff; - data[8] = 0x80; - data[9] = 0xff; - res = mod_ctype.ruint64(data, 'big', 0); - ASSERT.equal(0x80ff80ff, res[0]); - ASSERT.equal(0x80ff80ff, res[1]); - res = mod_ctype.ruint64(data, 'big', 1); - ASSERT.equal(0xff80ff80, res[0]); - ASSERT.equal(0xff80ff80, res[1]); - res = mod_ctype.ruint64(data, 'big', 2); - ASSERT.equal(0x80ff80ff, res[0]); - ASSERT.equal(0x80ff80ff, res[1]); - res = mod_ctype.ruint64(data, 'little', 0); - ASSERT.equal(0xff80ff80, res[0]); - ASSERT.equal(0xff80ff80, res[1]); - res = mod_ctype.ruint64(data, 'little', 1); - ASSERT.equal(0x80ff80ff, res[0]); - ASSERT.equal(0x80ff80ff, res[1]); - res = mod_ctype.ruint64(data, 'little', 2); - ASSERT.equal(0xff80ff80, res[0]); - ASSERT.equal(0xff80ff80, res[1]); -} - -function testWriteZero() -{ - var data, buf; - buf = new Buffer(10); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'big', buf, 0); - ASSERT.equal(0, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0, buf[9]); - - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'little', buf, 0); - ASSERT.equal(0, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0, buf[9]); -} - -/* - * Also include tests that are going to force us to go into a negative value and - * insure that it's written correctly. - */ -function testWrite() -{ - var data, buf; - - buf = new Buffer(10); - data = [ 0x234456, 0x87 ]; - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 0); - ASSERT.equal(0x00, buf[0]); - ASSERT.equal(0x23, buf[1]); - ASSERT.equal(0x44, buf[2]); - ASSERT.equal(0x56, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x87, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x23, buf[2]); - ASSERT.equal(0x44, buf[3]); - ASSERT.equal(0x56, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x87, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x23, buf[3]); - ASSERT.equal(0x44, buf[4]); - ASSERT.equal(0x56, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x87, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 0); - ASSERT.equal(0x87, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x56, buf[4]); - ASSERT.equal(0x44, buf[5]); - ASSERT.equal(0x23, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x87, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x56, buf[5]); - ASSERT.equal(0x44, buf[6]); - ASSERT.equal(0x23, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x66, buf[9]); - - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x87, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x56, buf[6]); - ASSERT.equal(0x44, buf[7]); - ASSERT.equal(0x23, buf[8]); - ASSERT.equal(0x00, buf[9]); - - data = [0xffff3421, 0x34abcdba]; - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 0); - ASSERT.equal(0xff, buf[0]); - ASSERT.equal(0xff, buf[1]); - ASSERT.equal(0x34, buf[2]); - ASSERT.equal(0x21, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0xab, buf[5]); - ASSERT.equal(0xcd, buf[6]); - ASSERT.equal(0xba, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0xff, buf[1]); - ASSERT.equal(0xff, buf[2]); - ASSERT.equal(0x34, buf[3]); - ASSERT.equal(0x21, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0xab, buf[6]); - ASSERT.equal(0xcd, buf[7]); - ASSERT.equal(0xba, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0xff, buf[2]); - ASSERT.equal(0xff, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0x21, buf[5]); - ASSERT.equal(0x34, buf[6]); - ASSERT.equal(0xab, buf[7]); - ASSERT.equal(0xcd, buf[8]); - ASSERT.equal(0xba, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 0); - ASSERT.equal(0xba, buf[0]); - ASSERT.equal(0xcd, buf[1]); - ASSERT.equal(0xab, buf[2]); - ASSERT.equal(0x34, buf[3]); - ASSERT.equal(0x21, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0xff, buf[6]); - ASSERT.equal(0xff, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0xba, buf[1]); - ASSERT.equal(0xcd, buf[2]); - ASSERT.equal(0xab, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0x21, buf[5]); - ASSERT.equal(0x34, buf[6]); - ASSERT.equal(0xff, buf[7]); - ASSERT.equal(0xff, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0xba, buf[2]); - ASSERT.equal(0xcd, buf[3]); - ASSERT.equal(0xab, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0x21, buf[6]); - ASSERT.equal(0x34, buf[7]); - ASSERT.equal(0xff, buf[8]); - ASSERT.equal(0xff, buf[9]); -} - -/* - * Make sure we catch invalid writes. - */ -function testWriteInvalid() -{ - var data, buf; - - /* Buffer too small */ - buf = new Buffer(4); - data = [ 0, 0]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 0); - }, Error, 'buffer too small'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 0); - }, Error, 'buffer too small'); - - /* Beyond the end of the buffer */ - buf = new Buffer(12); - data = [ 0, 0]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 11); - }, Error, 'write beyond end of buffer'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 11); - }, Error, 'write beyond end of buffer'); - - /* Write negative values */ - buf = new Buffer(12); - data = [ -3, 0 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write negative number'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write negative number'); - - data = [ 0, -3 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write negative number'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write negative number'); - - data = [ -3, -3 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write negative number'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write negative number'); - - - /* Write fractional values */ - buf = new Buffer(12); - data = [ 3.33, 0 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 0, 3.3 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 3.33, 2.42 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - /* Write values that are too large */ - buf = new Buffer(12); - data = [ 0xffffffffff, 23 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0xffffffffff, 0xffffff238 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0x23, 0xffffff238 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write too large'); -} - - -testRead(); -testReadOver(); -testWriteZero(); -testWrite(); -testWriteInvalid(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js deleted file mode 100644 index 87ae59b7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js +++ /dev/null @@ -1,81 +0,0 @@ -/* - * A battery of tests for sucessful round-trip between writes and reads - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - - -/* - * What the heck, let's just test every value for 8-bits. - */ - -function test8() { - var data = new Buffer(1); - var i; - for (i = 0; i < 256; i++) { - mod_ctype.wuint8(i, 'big', data, 0); - ASSERT.equal(i, mod_ctype.ruint8(data, 'big', 0)); - mod_ctype.wuint8(i, 'little', data, 0); - ASSERT.equal(i, mod_ctype.ruint8(data, 'little', 0)); - } - ASSERT.ok(true); -} - -/* - * Test a random sample of 256 values in the 16-bit unsigned range - */ - -function test16() { - var data = new Buffer(2); - var i = 0; - for (i = 0; i < 256; i++) { - var value = Math.round(Math.random() * Math.pow(2, 16)); - mod_ctype.wuint16(value, 'big', data, 0); - ASSERT.equal(value, mod_ctype.ruint16(data, 'big', 0)); - mod_ctype.wuint16(value, 'little', data, 0); - ASSERT.equal(value, mod_ctype.ruint16(data, 'little', 0)); - } -} - -/* - * Test a random sample of 256 values in the 32-bit unsigned range - */ - -function test32() { - var data = new Buffer(4); - var i = 0; - for (i = 0; i < 256; i++) { - var value = Math.round(Math.random() * Math.pow(2, 32)); - mod_ctype.wuint32(value, 'big', data, 0); - ASSERT.equal(value, mod_ctype.ruint32(data, 'big', 0)); - mod_ctype.wuint32(value, 'little', data, 0); - ASSERT.equal(value, mod_ctype.ruint32(data, 'little', 0)); - } -} - -/* - * Test a random sample of 256 values in the 64-bit unsigned range - */ - -function test64() { - var data = new Buffer(8); - var i = 0; - for (i = 0; i < 256; i++) { - var low = Math.round(Math.random() * Math.pow(2, 32)); - var high = Math.round(Math.random() * Math.pow(2, 32)); - mod_ctype.wuint64([high, low], 'big', data, 0); - var result = mod_ctype.ruint64(data, 'big', 0); - ASSERT.equal(high, result[0]); - ASSERT.equal(low, result[1]); - mod_ctype.wuint64([high, low], 'little', data, 0); - result = mod_ctype.ruint64(data, 'little', 0); - ASSERT.equal(high, result[0]); - ASSERT.equal(low, result[1]); - } -} - -exports.test8 = test8; -exports.test16 = test16; -exports.test32 = test32; -exports.test64 = test64; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js deleted file mode 100644 index b67c077f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js +++ /dev/null @@ -1,95 +0,0 @@ -/* - * A battery of tests to help us read a series of uints - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -/* - * We need to check the following things: - * - We are correctly resolving big endian (doesn't mean anything for 8 bit) - * - Correctly resolving little endian (doesn't mean anything for 8 bit) - * - Correctly using the offsets - * - Correctly interpreting values that are beyond the signed range as unsigned - */ -function test8() -{ - var data = new Buffer(4); - data[0] = 23; - data[1] = 23; - data[2] = 23; - data[3] = 23; - ASSERT.equal(23, mod_ctype.ruint8(data, 'big', 0)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'little', 0)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'big', 1)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'little', 1)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'big', 2)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'little', 2)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'big', 3)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'little', 3)); - data[0] = 255; /* If it became a signed int, would be -1 */ - ASSERT.equal(255, mod_ctype.ruint8(data, 'big', 0)); - ASSERT.equal(255, mod_ctype.ruint8(data, 'little', 0)); -} - -/* - * Test 16 bit unsigned integers. We need to verify the same set as 8 bit, only - * now some of the issues actually matter: - * - We are correctly resolving big endian - * - Correctly resolving little endian - * - Correctly using the offsets - * - Correctly interpreting values that are beyond the signed range as unsigned - */ -function test16() -{ - var data = new Buffer(4); - /* Test signed values first */ - data[0] = 0; - data[1] = 0x23; - data[2] = 0x42; - data[3] = 0x3f; - - ASSERT.equal(0x23, mod_ctype.ruint16(data, 'big', 0)); - ASSERT.equal(0x2342, mod_ctype.ruint16(data, 'big', 1)); - ASSERT.equal(0x423f, mod_ctype.ruint16(data, 'big', 2)); - - ASSERT.equal(0x2300, mod_ctype.ruint16(data, 'little', 0)); - ASSERT.equal(0x4223, mod_ctype.ruint16(data, 'little', 1)); - ASSERT.equal(0x3f42, mod_ctype.ruint16(data, 'little', 2)); - - data[0] = 0xfe; - data[1] = 0xfe; - - ASSERT.equal(0xfefe, mod_ctype.ruint16(data, 'big', 0)); - ASSERT.equal(0xfefe, mod_ctype.ruint16(data, 'little', 0)); -} - -/* - * Test 32 bit unsigned integers. We need to verify the same set as 8 bit, only - * now some of the issues actually matter: - * - We are correctly resolving big endian - * - Correctly using the offsets - * - Correctly interpreting values that are beyond the signed range as unsigned - */ -function test32() -{ - var data = new Buffer(8); - data[0] = 0x32; - data[1] = 0x65; - data[2] = 0x42; - data[3] = 0x56; - data[4] = 0x23; - data[5] = 0xff; - - ASSERT.equal(0x32654256, mod_ctype.ruint32(data, 'big', 0)); - ASSERT.equal(0x65425623, mod_ctype.ruint32(data, 'big', 1)); - ASSERT.equal(0x425623ff, mod_ctype.ruint32(data, 'big', 2)); - - ASSERT.equal(0x56426532, mod_ctype.ruint32(data, 'little', 0)); - ASSERT.equal(0x23564265, mod_ctype.ruint32(data, 'little', 1)); - ASSERT.equal(0xff235642, mod_ctype.ruint32(data, 'little', 2)); -} - -test8(); -test16(); -test32(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js deleted file mode 100644 index d6c4230f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * A battery of tests to help us read a series of uints - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -/* - * We need to check the following things: - * - We are correctly resolving big endian (doesn't mean anything for 8 bit) - * - Correctly resolving little endian (doesn't mean anything for 8 bit) - * - Correctly using the offsets - * - Correctly interpreting values that are beyond the signed range as unsigned - */ -function test8() -{ - var data = new Buffer(4); - mod_ctype.wuint8(23, 'big', data, 0); - mod_ctype.wuint8(23, 'big', data, 1); - mod_ctype.wuint8(23, 'big', data, 2); - mod_ctype.wuint8(23, 'big', data, 3); - ASSERT.equal(23, data[0]); - ASSERT.equal(23, data[1]); - ASSERT.equal(23, data[2]); - ASSERT.equal(23, data[3]); - mod_ctype.wuint8(23, 'little', data, 0); - mod_ctype.wuint8(23, 'little', data, 1); - mod_ctype.wuint8(23, 'little', data, 2); - mod_ctype.wuint8(23, 'little', data, 3); - ASSERT.equal(23, data[0]); - ASSERT.equal(23, data[1]); - ASSERT.equal(23, data[2]); - ASSERT.equal(23, data[3]); - mod_ctype.wuint8(255, 'big', data, 0); - ASSERT.equal(255, data[0]); - mod_ctype.wuint8(255, 'little', data, 0); - ASSERT.equal(255, data[0]); -} - -function test16() -{ - var value = 0x2343; - var data = new Buffer(4); - mod_ctype.wuint16(value, 'big', data, 0); - ASSERT.equal(0x23, data[0]); - ASSERT.equal(0x43, data[1]); - mod_ctype.wuint16(value, 'big', data, 1); - ASSERT.equal(0x23, data[1]); - ASSERT.equal(0x43, data[2]); - mod_ctype.wuint16(value, 'big', data, 2); - ASSERT.equal(0x23, data[2]); - ASSERT.equal(0x43, data[3]); - - mod_ctype.wuint16(value, 'little', data, 0); - ASSERT.equal(0x23, data[1]); - ASSERT.equal(0x43, data[0]); - - mod_ctype.wuint16(value, 'little', data, 1); - ASSERT.equal(0x23, data[2]); - ASSERT.equal(0x43, data[1]); - - mod_ctype.wuint16(value, 'little', data, 2); - ASSERT.equal(0x23, data[3]); - ASSERT.equal(0x43, data[2]); - - value = 0xff80; - mod_ctype.wuint16(value, 'little', data, 0); - ASSERT.equal(0xff, data[1]); - ASSERT.equal(0x80, data[0]); - - mod_ctype.wuint16(value, 'big', data, 0); - ASSERT.equal(0xff, data[0]); - ASSERT.equal(0x80, data[1]); -} - -function test32() -{ - var data = new Buffer(6); - var value = 0xe7f90a6d; - - mod_ctype.wuint32(value, 'big', data, 0); - ASSERT.equal(0xe7, data[0]); - ASSERT.equal(0xf9, data[1]); - ASSERT.equal(0x0a, data[2]); - ASSERT.equal(0x6d, data[3]); - - mod_ctype.wuint32(value, 'big', data, 1); - ASSERT.equal(0xe7, data[1]); - ASSERT.equal(0xf9, data[2]); - ASSERT.equal(0x0a, data[3]); - ASSERT.equal(0x6d, data[4]); - - mod_ctype.wuint32(value, 'big', data, 2); - ASSERT.equal(0xe7, data[2]); - ASSERT.equal(0xf9, data[3]); - ASSERT.equal(0x0a, data[4]); - ASSERT.equal(0x6d, data[5]); - - mod_ctype.wuint32(value, 'little', data, 0); - ASSERT.equal(0xe7, data[3]); - ASSERT.equal(0xf9, data[2]); - ASSERT.equal(0x0a, data[1]); - ASSERT.equal(0x6d, data[0]); - - mod_ctype.wuint32(value, 'little', data, 1); - ASSERT.equal(0xe7, data[4]); - ASSERT.equal(0xf9, data[3]); - ASSERT.equal(0x0a, data[2]); - ASSERT.equal(0x6d, data[1]); - - mod_ctype.wuint32(value, 'little', data, 2); - ASSERT.equal(0xe7, data[5]); - ASSERT.equal(0xf9, data[4]); - ASSERT.equal(0x0a, data[3]); - ASSERT.equal(0x6d, data[2]); -} - -function test64() -{ - var data = new Buffer(10); - var value = 0x0007cda8e7f90a6d; - var high = Math.floor(value / Math.pow(2, 32)); - var low = value - (high * Math.pow(2, 32)); - ASSERT.equal(0x0007cda8, high); - ASSERT.equal(0xe7f90a6d, low); - - mod_ctype.wuint64([high, low], 'big', data, 0); - ASSERT.equal(0x00, data[0]); - ASSERT.equal(0x07, data[1]); - ASSERT.equal(0xcd, data[2]); - ASSERT.equal(0xa8, data[3]); - ASSERT.equal(0xe7, data[4]); - ASSERT.equal(0xf9, data[5]); - ASSERT.equal(0x0a, data[6]); - ASSERT.equal(0x6d, data[7]); - - mod_ctype.wuint64([high, low], 'little', data, 0); - ASSERT.equal(0x6d, data[0]); - ASSERT.equal(0x0a, data[1]); - ASSERT.equal(0xf9, data[2]); - ASSERT.equal(0xe7, data[3]); - ASSERT.equal(0xa8, data[4]); - ASSERT.equal(0xcd, data[5]); - ASSERT.equal(0x07, data[6]); - ASSERT.equal(0x00, data[7]); -} - -test8(); -test16(); -test32(); -test64(); - -exports.test8 = test8; -exports.test16 = test16; -exports.test32 = test32; -exports.test64 = test64; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js deleted file mode 100644 index e9895152..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Simple does to see if it works at all - */ -var mod_ctype = require('../../ctype'); -var ASSERT = require('assert'); -var mod_sys = require('sys'); - -function test() -{ - var ii, p, result, buffer; - - p = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer(4); - buffer[0] = 23; - buffer[3] = 42; - result = p.readData([ { x: { type: 'uint8_t' }}, - { y: { type: 'uint8_t', offset: 3 }} - ], buffer, 0); - ASSERT.equal(23, result['x']); - ASSERT.equal(42, result['y']); - - buffer = new Buffer(23); - for (ii = 0; ii < 23; ii++) - buffer[ii] = 0; - - buffer.write('Hello, world!'); - result = p.readData([ { x: { type: 'char[20]' }} ], buffer, 0); - - /* - * This is currently broken behvaior, need to redesign check - * ASSERT.equal('Hello, world!', result['x'].toString('utf-8', 0, - * result['x'].length)); - */ - - buffer = new Buffer(4); - buffer[0] = 0x03; - buffer[1] = 0x24; - buffer[2] = 0x25; - buffer[3] = 0x26; - result = p.readData([ { y: { type: 'uint8_t' }}, - { x: { type: 'uint8_t[y]' }}], buffer, 0); - console.log(mod_sys.inspect(result, true)); - - p.typedef('ssize_t', 'int32_t'); - ASSERT.deepEqual({ 'ssize_t': 'int32_t' }, p.lstypes()); - result = p.readData([ { x: { type: 'ssize_t' } } ], buffer, 0); - ASSERT.equal(0x26252403, result['x']); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js deleted file mode 100644 index 89d446f2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Simple does it fucking work at all test - */ - -var mod_ctype = require('../../ctype'); -var ASSERT = require('assert'); -var mod_sys = require('sys'); - -function test() -{ - var ii, p, buffer, buf2; - - p = new mod_ctype.Parser({ endian: 'big' }); - buffer = new Buffer(4); - p.writeData([ { x: { type: 'uint8_t', value: 23 }}, - { y: { type: 'uint8_t', offset: 3, value: 42 }} - ], buffer, 0); - ASSERT.equal(23, buffer[0]); - ASSERT.equal(42, buffer[3]); - - buffer = new Buffer(20); - for (ii = 0; ii < 20; ii++) - buffer[ii] = 0; - - buffer.write('Hello, world!'); - buf2 = new Buffer(22); - p.writeData([ { x: { type: 'char[20]', value: buffer }} ], buf2, 0); - for (ii = 0; ii < 20; ii++) - ASSERT.equal(buffer[ii], buf2[ii]); - /* - * This is currently broken behvaior, need to redesign check - * ASSERT.equal('Hello, world!', result['x'].toString('utf-8', 0, - * result['x'].length)); - */ - - buffer = new Buffer(4); - p.writeData([ { y: { type: 'uint8_t', value: 3 }}, - { x: { type: 'uint8_t[y]', value: [ 0x24, 0x25, 0x26] }}], - buffer, 0); - console.log(mod_sys.inspect(buffer)); - - p.typedef('ssize_t', 'int32_t'); - ASSERT.deepEqual({ 'ssize_t': 'int32_t' }, p.lstypes()); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js deleted file mode 100644 index 14d9529c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Test the different forms of reading characters: - * - * - the default, a single element buffer - * - uint8, values are uint8_ts - * - int8, values are int8_ts - */ -var mod_ctype = require('../../ctype'); -var mod_assert = require('assert'); - -function test() -{ - var p, buf, res; - - buf = new Buffer(1); - buf[0] = 255; - - p = new mod_ctype.Parser({ endian: 'little'}); - res = p.readData([ { c: { type: 'char' }} ], buf, 0); - res = res['c']; - mod_assert.ok(res instanceof Buffer); - mod_assert.equal(255, res[0]); - - p = new mod_ctype.Parser({ endian: 'little', - 'char-type': 'int8' }); - res = p.readData([ { c: { type: 'char' }} ], buf, 0); - res = res['c']; - mod_assert.ok(typeof (res) == 'number', 'got typeof (res): ' + - typeof (res)); - mod_assert.equal(-1, res); - - p = new mod_ctype.Parser({ endian: 'little', - 'char-type': 'uint8' }); - res = p.readData([ { c: { type: 'char' }} ], buf, 0); - res = res['c']; - mod_assert.ok(typeof (res) == 'number', 'got typeof (res): ' + - typeof (res)); - mod_assert.equal(255, res); - -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js deleted file mode 100644 index 11fc2d2c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Simple test to make sure that the endian setting works. - */ - -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var parser, buf; - - parser = new mod_ctype.Parser({ - endian: 'little' - }); - - buf = new Buffer(2); - parser.writeData([ { key: { type: 'uint16_t' } } ], buf, 0, [ 0x1234 ]); - mod_assert.equal(buf[0], 0x34); - mod_assert.equal(buf[1], 0x12); - parser.setEndian('big'); - - parser.writeData([ { key: { type: 'uint16_t' } } ], buf, 0, [ 0x1234 ]); - mod_assert.equal(buf[0], 0x12); - mod_assert.equal(buf[1], 0x34); - - parser.setEndian('little'); - parser.writeData([ { key: { type: 'uint16_t' } } ], buf, 0, [ 0x1234 ]); - mod_assert.equal(buf[0], 0x34); - mod_assert.equal(buf[1], 0x12); -} - -function fail() -{ - var parser; - - parser = new mod_ctype.Parser({ - endian: 'little' - }); - mod_assert.throws(function () { - parser.setEndian('littlebigwrong'); - }); -} - -test(); -fail(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js deleted file mode 100644 index 9491cf6e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * A long overdue test to go through and verify that we can read and write - * structures as well as nested structures. - */ - -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var parser, buf, data; - parser = new mod_ctype.Parser({ - endian: 'little' - }); - parser.typedef('point_t', [ - { x: { type: 'uint8_t' } }, - { y: { type: 'uint8_t' } } - ]); - buf = new Buffer(2); - data = [ - { point: { type: 'point_t', value: [ 23, 42 ] } } - ]; - parser.writeData(data, buf, 0); - mod_assert.ok(buf[0] == 23); - mod_assert.ok(buf[1] == 42); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js deleted file mode 100644 index 6c490a2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Testing to ensure we're reading the expected number bytes - */ -var mod_ctype = require('../../ctype'); -var ASSERT = require('assert'); - -function testUint8() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('80', 'hex'); - result = parser.readStruct([ { item: { type: 'uint8_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 1); -} - -function testSint8() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('80', 'hex'); - result = parser.readStruct([ { item: { type: 'int8_t' } } ], buffer, 0); - ASSERT.equal(result['size'], 1); -} - -function testUint16() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('8000', 'hex'); - result = parser.readStruct([ { item: { type: 'uint16_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 2); -} - -function testSint16() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('8000', 'hex'); - result = parser.readStruct([ { item: { type: 'int16_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 2); -} - -function testUint32() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('80000000', 'hex'); - result = parser.readStruct([ { item: { type: 'uint32_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 4); -} - -function testSint32() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('80000000', 'hex'); - result = parser.readStruct([ { item: { type: 'int32_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 4); -} - -function testUint64() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('8000000000000000', 'hex'); - result = parser.readStruct([ { item: { type: 'uint64_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 8); -} - -function testSint64() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('8000000000000000', 'hex'); - result = parser.readStruct([ { item: { type: 'int64_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 8); -} - -function testFloat() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('ABAAAA3E', 'hex'); - result = parser.readStruct([ { item: { type: 'float' } } ], buffer, 0); - ASSERT.equal(result['size'], 4); -} - -function testDouble() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('000000000000F03F', 'hex'); - result = parser.readStruct([ { item: { type: 'double' } } ], buffer, 0); - ASSERT.equal(result['size'], 8); -} - -function testChar() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('t'); - result = parser.readStruct([ { item: { type: 'char' } } ], buffer, 0); - ASSERT.equal(result['size'], 1); -} - -function test() -{ - testSint8(); - testUint8(); - testSint16(); - testUint16(); - testSint32(); - testUint32(); - testSint64(); - testUint64(); - testFloat(); - testDouble(); - testChar(); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js deleted file mode 100644 index 09c1a5ba..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * A long overdue test to go through and verify that we can read and write - * structures as well as nested structures. - */ - -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var parser, buf, data; - parser = new mod_ctype.Parser({ - endian: 'little' - }); - parser.typedef('point_t', [ - { x: { type: 'uint8_t' } }, - { y: { type: 'uint8_t' } } - ]); - buf = new Buffer(2); - data = [ - { point: { type: 'point_t' } } - ]; - parser.writeData(data, buf, 0, [ [ 23, 42 ] ]); - mod_assert.ok(buf[0] == 23); - mod_assert.ok(buf[1] == 42); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js deleted file mode 100644 index 48556667..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Test to verify that the offset is incremented when structures are written to. - * Hopefully we will not regress issue #41 - */ - -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var parser, buf, data; - parser = new mod_ctype.Parser({ - endian: 'little' - }); - parser.typedef('point_t', [ - { x: { type: 'uint8_t' } }, - { y: { type: 'uint8_t' } } - ]); - buf = new Buffer(4); - data = [ - { point1: { type: 'point_t' } }, - { point2: { type: 'point_t' } } - ]; - parser.writeData(data, buf, 0, [ [ 23, 42 ], [ 91, 18 ] ]); - mod_assert.ok(buf[0] == 23); - mod_assert.ok(buf[1] == 42); - mod_assert.ok(buf[2] == 91); - mod_assert.ok(buf[3] == 18); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/package.json deleted file mode 100644 index 416f618a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Joyent, Inc" - }, - "name": "http-signature", - "description": "Reference implementation of Joyent's HTTP Signature Scheme", - "version": "0.10.0", - "repository": { - "type": "git", - "url": "git://github.com/joyent/node-http-signature.git" - }, - "engines": { - "node": ">=0.8" - }, - "main": "lib/index.js", - "scripts": { - "test": "tap tst/*.js" - }, - "dependencies": { - "assert-plus": "0.1.2", - "asn1": "0.1.11", - "ctype": "0.5.2" - }, - "devDependencies": { - "node-uuid": "1.4.0", - "tap": "0.4.2" - }, - "readme": "# node-http-signature\n\nnode-http-signature is a node.js library that has client and server components\nfor Joyent's [HTTP Signature Scheme](http_signing.md).\n\n## Usage\n\nNote the example below signs a request with the same key/cert used to start an\nHTTP server. This is almost certainly not what you actaully want, but is just\nused to illustrate the API calls; you will need to provide your own key\nmanagement in addition to this library.\n\n### Client\n\n var fs = require('fs');\n var https = require('https');\n var httpSignature = require('http-signature');\n\n var key = fs.readFileSync('./key.pem', 'ascii');\n\n var options = {\n host: 'localhost',\n port: 8443,\n path: '/',\n method: 'GET',\n headers: {}\n };\n\n // Adds a 'Date' header in, signs it, and adds the\n // 'Authorization' header in.\n var req = https.request(options, function(res) {\n console.log(res.statusCode);\n });\n\n\n httpSignature.sign(req, {\n key: key,\n keyId: './cert.pem'\n });\n\n req.end();\n\n### Server\n\n var fs = require('fs');\n var https = require('https');\n var httpSignature = require('http-signature');\n\n var options = {\n key: fs.readFileSync('./key.pem'),\n cert: fs.readFileSync('./cert.pem')\n };\n\n https.createServer(options, function (req, res) {\n var rc = 200;\n var parsed = httpSignature.parseRequest(req);\n var pub = fs.readFileSync(parsed.keyId, 'ascii');\n if (!httpSignature.verifySignature(parsed, pub))\n rc = 401;\n\n res.writeHead(rc);\n res.end();\n }).listen(8443);\n\n## Installation\n\n npm install http-signature\n\n## License\n\nMIT.\n\n## Bugs\n\nSee <https://github.com/joyent/node-http-signature/issues>.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/joyent/node-http-signature/issues" - }, - "homepage": "https://github.com/joyent/node-http-signature", - "_id": "http-signature@0.10.0", - "dist": { - "shasum": "ed3c3415949cf275765bb5394a145ada7a1e506a" - }, - "_from": "http-signature@~0.10.0", - "_resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/README.md deleted file mode 100644 index 5d764f3a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# json-stringify-safe - -Like JSON.stringify, but doesn't throw on circular references. - -## Usage - -Takes the same arguments as `JSON.stringify`. - -```javascript -var stringify = require('json-stringify-safe'); -var circularObj = {}; -circularObj.circularRef = circularObj; -circularObj.list = [ circularObj, circularObj ]; -console.log(stringify(circularObj, null, 2)); -``` - -Output: - -```json -{ - "circularRef": "[Circular]", - "list": [ - "[Circular]", - "[Circular]" - ] -} -``` - -## Details - -``` -stringify(obj, serializer, indent, decycler) -``` - -The first three arguments are the same as to JSON.stringify. The last -is an argument that's only used when the object has been seen already. - -The default `decycler` function returns the string `'[Circular]'`. -If, for example, you pass in `function(k,v){}` (return nothing) then it -will prune cycles. If you pass in `function(k,v){ return {foo: 'bar'}}`, -then cyclical objects will always be represented as `{"foo":"bar"}` in -the result. - -``` -stringify.getSerialize(serializer, decycler) -``` - -Returns a serializer that can be used elsewhere. This is the actual -function that's passed to JSON.stringify. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/package.json deleted file mode 100644 index dc9929d9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "json-stringify-safe", - "version": "5.0.0", - "description": "Like JSON.stringify, but doesn't blow up on circular refs", - "main": "stringify.js", - "scripts": { - "test": "node test.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/json-stringify-safe" - }, - "keywords": [ - "json", - "stringify", - "circular", - "safe" - ], - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "license": "BSD", - "readmeFilename": "README.md", - "readme": "# json-stringify-safe\n\nLike JSON.stringify, but doesn't throw on circular references.\n\n## Usage\n\nTakes the same arguments as `JSON.stringify`.\n\n```javascript\nvar stringify = require('json-stringify-safe');\nvar circularObj = {};\ncircularObj.circularRef = circularObj;\ncircularObj.list = [ circularObj, circularObj ];\nconsole.log(stringify(circularObj, null, 2));\n```\n\nOutput:\n\n```json\n{\n \"circularRef\": \"[Circular]\",\n \"list\": [\n \"[Circular]\",\n \"[Circular]\"\n ]\n}\n```\n\n## Details\n\n```\nstringify(obj, serializer, indent, decycler)\n```\n\nThe first three arguments are the same as to JSON.stringify. The last\nis an argument that's only used when the object has been seen already.\n\nThe default `decycler` function returns the string `'[Circular]'`.\nIf, for example, you pass in `function(k,v){}` (return nothing) then it\nwill prune cycles. If you pass in `function(k,v){ return {foo: 'bar'}}`,\nthen cyclical objects will always be represented as `{\"foo\":\"bar\"}` in\nthe result.\n\n```\nstringify.getSerialize(serializer, decycler)\n```\n\nReturns a serializer that can be used elsewhere. This is the actual\nfunction that's passed to JSON.stringify.\n", - "bugs": { - "url": "https://github.com/isaacs/json-stringify-safe/issues" - }, - "homepage": "https://github.com/isaacs/json-stringify-safe", - "_id": "json-stringify-safe@5.0.0", - "dist": { - "shasum": "3bef04524e23eb51118883db0bcf4e18c49ed92c" - }, - "_from": "json-stringify-safe@~5.0.0", - "_resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/stringify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/stringify.js deleted file mode 100644 index 853ef9b2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/stringify.js +++ /dev/null @@ -1,39 +0,0 @@ -module.exports = stringify; - -function getSerialize (fn, decycle) { - var seen = [], keys = []; - decycle = decycle || function(key, value) { - return '[Circular ' + getPath(value, seen, keys) + ']' - }; - return function(key, value) { - var ret = value; - if (typeof value === 'object' && value) { - if (seen.indexOf(value) !== -1) - ret = decycle(key, value); - else { - seen.push(value); - keys.push(key); - } - } - if (fn) ret = fn(key, ret); - return ret; - } -} - -function getPath (value, seen, keys) { - var index = seen.indexOf(value); - var path = [ keys[index] ]; - for (index--; index >= 0; index--) { - if (seen[index][ path[0] ] === value) { - value = seen[index]; - path.unshift(keys[index]); - } - } - return '~' + path.join('.'); -} - -function stringify(obj, fn, spaces, decycle) { - return JSON.stringify(obj, getSerialize(fn, decycle), spaces); -} - -stringify.getSerialize = getSerialize; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/test.js deleted file mode 100644 index 991e9197..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/test.js +++ /dev/null @@ -1,128 +0,0 @@ -var stringify = require('./stringify.js'); - -var circularObj = { a: 'b' }; -circularObj.circularRef = circularObj; -circularObj.list = [ circularObj, circularObj ]; - -////////// -// default -var testObj = { - "a": "b", - "circularRef": "[Circular ~]", - "list": [ - "[Circular ~]", - "[Circular ~]" - ] -}; - -var assert = require('assert'); -assert.equal(JSON.stringify(testObj, null, 2), - stringify(circularObj, null, 2)); - -assert.equal(JSON.stringify(testObj, null, 2), - JSON.stringify(circularObj, stringify.getSerialize(), 2)); - - -//////// -// prune -testObj = { - "a": "b", - "list": [ - null, - null - ] -}; - -function prune(k, v) {} - -assert.equal(JSON.stringify(testObj, null, 2), - stringify(circularObj, null, 2, prune)); - -/////////// -// re-cycle -// (throws) -function recycle(k, v) { - return v; -} - -assert.throws(function() { - stringify(circularObj, null, 2, recycle); -}); - -//////// -// fancy -testObj = { - "a": "b", - "circularRef": "circularRef{a:string,circularRef:Object,list:Array}", - "list": [ - "0{a:string,circularRef:Object,list:Array}", - "1{a:string,circularRef:Object,list:Array}" - ] -}; - -function signer(key, value) { - var ret = key + '{'; - var f = false; - for (var i in value) { - if (f) - ret += ','; - f = true; - ret += i + ':'; - var v = value[i]; - switch (typeof v) { - case 'object': - if (!v) - ret += 'null'; - else if (Array.isArray(v)) - ret += 'Array' - else - ret += v.constructor && v.constructor.name || 'Object'; - break; - default: - ret += typeof v; - break; - } - } - ret += '}'; - return ret; -} - -assert.equal(JSON.stringify(testObj, null, 2), - stringify(circularObj, null, 2, signer)); - - -/////// -//multi -var a = { x: 1 }; -a.a = a; -var b = { x: 2 }; -b.a = a; - -var c = { a: a, b: b }; -var d = { list: [ a, b, c ] }; -d.d = d; - -var multi = { - "list": [ - { - "x": 1, - "a": "[Circular ~.list.0]" - }, - { - "x": 2, - "a": "[Circular ~.list.0]" - }, - { - "a": "[Circular ~.list.0]", - "b": "[Circular ~.list.1]" - } - ], - "d": "[Circular ~]" -}; - -assert.equal(JSON.stringify(multi, null, 2), - stringify(d, null, 2)); - -//////// -// pass! -console.log('ok'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/LICENSE deleted file mode 100644 index 451fc455..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/README.md deleted file mode 100644 index 6ca19bd1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# mime - -Comprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community. - -## Install - -Install with [npm](http://github.com/isaacs/npm): - - npm install mime - -## API - Queries - -### mime.lookup(path) -Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. - - var mime = require('mime'); - - mime.lookup('/path/to/file.txt'); // => 'text/plain' - mime.lookup('file.txt'); // => 'text/plain' - mime.lookup('.TXT'); // => 'text/plain' - mime.lookup('htm'); // => 'text/html' - -### mime.default_type -Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) - -### mime.extension(type) -Get the default extension for `type` - - mime.extension('text/html'); // => 'html' - mime.extension('application/octet-stream'); // => 'bin' - -### mime.charsets.lookup() - -Map mime-type to charset - - mime.charsets.lookup('text/plain'); // => 'UTF-8' - -(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) - -## API - Defining Custom Types - -The following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types). - -### mime.define() - -Add custom mime/extension mappings - - mime.define({ - 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], - 'application/x-my-type': ['x-mt', 'x-mtt'], - // etc ... - }); - - mime.lookup('x-sft'); // => 'text/x-some-format' - -The first entry in the extensions array is returned by `mime.extension()`. E.g. - - mime.extension('text/x-some-format'); // => 'x-sf' - -### mime.load(filepath) - -Load mappings from an Apache ".types" format file - - mime.load('./my_project.types'); - -The .types file format is simple - See the `types` dir for examples. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/mime.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/mime.js deleted file mode 100644 index 48be0c5e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/mime.js +++ /dev/null @@ -1,114 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -function Mime() { - // Map of extension -> mime type - this.types = Object.create(null); - - // Map of mime type -> extension - this.extensions = Object.create(null); -} - -/** - * Define mimetype -> extension mappings. Each key is a mime-type that maps - * to an array of extensions associated with the type. The first extension is - * used as the default extension for the type. - * - * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); - * - * @param map (Object) type definitions - */ -Mime.prototype.define = function (map) { - for (var type in map) { - var exts = map[type]; - - for (var i = 0; i < exts.length; i++) { - if (process.env.DEBUG_MIME && this.types[exts]) { - console.warn(this._loading.replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + - this.types[exts] + ' to ' + type); - } - - this.types[exts[i]] = type; - } - - // Default extension is the first one we encounter - if (!this.extensions[type]) { - this.extensions[type] = exts[0]; - } - } -}; - -/** - * Load an Apache2-style ".types" file - * - * This may be called multiple times (it's expected). Where files declare - * overlapping types/extensions, the last file wins. - * - * @param file (String) path of file to load. - */ -Mime.prototype.load = function(file) { - - this._loading = file; - // Read file and split into lines - var map = {}, - content = fs.readFileSync(file, 'ascii'), - lines = content.split(/[\r\n]+/); - - lines.forEach(function(line) { - // Clean up whitespace/comments, and split into fields - var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); - map[fields.shift()] = fields; - }); - - this.define(map); - - this._loading = null; -}; - -/** - * Lookup a mime type based on extension - */ -Mime.prototype.lookup = function(path, fallback) { - var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase(); - - return this.types[ext] || fallback || this.default_type; -}; - -/** - * Return file extension associated with a mime type - */ -Mime.prototype.extension = function(mimeType) { - var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); - return this.extensions[type]; -}; - -// Default instance -var mime = new Mime(); - -// Load local copy of -// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types -mime.load(path.join(__dirname, 'types/mime.types')); - -// Load additional types from node.js community -mime.load(path.join(__dirname, 'types/node.types')); - -// Default type -mime.default_type = mime.lookup('bin'); - -// -// Additional API specific to the default instance -// - -mime.Mime = Mime; - -/** - * Lookup a charset based on mime type. - */ -mime.charsets = { - lookup: function(mimeType, fallback) { - // Assume text types are utf8 - return (/^text\//).test(mimeType) ? 'UTF-8' : fallback; - } -}; - -module.exports = mime; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/package.json deleted file mode 100644 index a9759392..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com", - "url": "http://github.com/broofa" - }, - "contributors": [ - { - "name": "Benjamin Thomas", - "email": "benjamin@benjaminthomas.org", - "url": "http://github.com/bentomas" - } - ], - "dependencies": {}, - "description": "A comprehensive library for mime-type mapping", - "devDependencies": {}, - "keywords": [ - "util", - "mime" - ], - "main": "mime.js", - "name": "mime", - "repository": { - "url": "https://github.com/broofa/node-mime", - "type": "git" - }, - "version": "1.2.11", - "readme": "# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.\n\n var mime = require('mime');\n\n mime.lookup('/path/to/file.txt'); // => 'text/plain'\n mime.lookup('file.txt'); // => 'text/plain'\n mime.lookup('.TXT'); // => 'text/plain'\n mime.lookup('htm'); // => 'text/html'\n\n### mime.default_type\nSets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension('text/html'); // => 'html'\n mime.extension('application/octet-stream'); // => 'bin'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup('text/plain'); // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n 'application/x-my-type': ['x-mt', 'x-mtt'],\n // etc ...\n });\n\n mime.lookup('x-sft'); // => 'text/x-some-format'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n mime.load('./my_project.types');\n\nThe .types file format is simple - See the `types` dir for examples.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/broofa/node-mime/issues" - }, - "homepage": "https://github.com/broofa/node-mime", - "_id": "mime@1.2.11", - "_from": "mime@~1.2.9" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/test.js deleted file mode 100644 index 2cda1c7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/test.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Usage: node test.js - */ - -var mime = require('./mime'); -var assert = require('assert'); -var path = require('path'); - -function eq(a, b) { - console.log('Test: ' + a + ' === ' + b); - assert.strictEqual.apply(null, arguments); -} - -console.log(Object.keys(mime.extensions).length + ' types'); -console.log(Object.keys(mime.types).length + ' extensions\n'); - -// -// Test mime lookups -// - -eq('text/plain', mime.lookup('text.txt')); // normal file -eq('text/plain', mime.lookup('TEXT.TXT')); // uppercase -eq('text/plain', mime.lookup('dir/text.txt')); // dir + file -eq('text/plain', mime.lookup('.text.txt')); // hidden file -eq('text/plain', mime.lookup('.txt')); // nameless -eq('text/plain', mime.lookup('txt')); // extension-only -eq('text/plain', mime.lookup('/txt')); // extension-less () -eq('text/plain', mime.lookup('\\txt')); // Windows, extension-less -eq('application/octet-stream', mime.lookup('text.nope')); // unrecognized -eq('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default - -// -// Test extensions -// - -eq('txt', mime.extension(mime.types.text)); -eq('html', mime.extension(mime.types.htm)); -eq('bin', mime.extension('application/octet-stream')); -eq('bin', mime.extension('application/octet-stream ')); -eq('html', mime.extension(' text/html; charset=UTF-8')); -eq('html', mime.extension('text/html; charset=UTF-8 ')); -eq('html', mime.extension('text/html; charset=UTF-8')); -eq('html', mime.extension('text/html ; charset=UTF-8')); -eq('html', mime.extension('text/html;charset=UTF-8')); -eq('html', mime.extension('text/Html;charset=UTF-8')); -eq(undefined, mime.extension('unrecognized')); - -// -// Test node.types lookups -// - -eq('application/font-woff', mime.lookup('file.woff')); -eq('application/octet-stream', mime.lookup('file.buffer')); -eq('audio/mp4', mime.lookup('file.m4a')); -eq('font/opentype', mime.lookup('file.otf')); - -// -// Test charsets -// - -eq('UTF-8', mime.charsets.lookup('text/plain')); -eq(undefined, mime.charsets.lookup(mime.types.js)); -eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); - -// -// Test for overlaps between mime.types and node.types -// - -var apacheTypes = new mime.Mime(), nodeTypes = new mime.Mime(); -apacheTypes.load(path.join(__dirname, 'types/mime.types')); -nodeTypes.load(path.join(__dirname, 'types/node.types')); - -var keys = [].concat(Object.keys(apacheTypes.types)) - .concat(Object.keys(nodeTypes.types)); -keys.sort(); -for (var i = 1; i < keys.length; i++) { - if (keys[i] == keys[i-1]) { - console.warn('Warning: ' + - 'node.types defines ' + keys[i] + '->' + nodeTypes.types[keys[i]] + - ', mime.types defines ' + keys[i] + '->' + apacheTypes.types[keys[i]]); - } -} - -console.log('\nOK'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/mime.types b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/mime.types deleted file mode 100644 index da8cd691..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/mime.types +++ /dev/null @@ -1,1588 +0,0 @@ -# This file maps Internet media types to unique file extension(s). -# Although created for httpd, this file is used by many software systems -# and has been placed in the public domain for unlimited redisribution. -# -# The table below contains both registered and (common) unregistered types. -# A type that has no unique extension can be ignored -- they are listed -# here to guide configurations toward known types and to make it easier to -# identify "new" types. File extensions are also commonly used to indicate -# content languages and encodings, so choose them carefully. -# -# Internet media types should be registered as described in RFC 4288. -# The registry is at <http://www.iana.org/assignments/media-types/>. -# -# MIME type (lowercased) Extensions -# ============================================ ========== -# application/1d-interleaved-parityfec -# application/3gpp-ims+xml -# application/activemessage -application/andrew-inset ez -# application/applefile -application/applixware aw -application/atom+xml atom -application/atomcat+xml atomcat -# application/atomicmail -application/atomsvc+xml atomsvc -# application/auth-policy+xml -# application/batch-smtp -# application/beep+xml -# application/calendar+xml -# application/cals-1840 -# application/ccmp+xml -application/ccxml+xml ccxml -application/cdmi-capability cdmia -application/cdmi-container cdmic -application/cdmi-domain cdmid -application/cdmi-object cdmio -application/cdmi-queue cdmiq -# application/cea-2018+xml -# application/cellml+xml -# application/cfw -# application/cnrp+xml -# application/commonground -# application/conference-info+xml -# application/cpl+xml -# application/csta+xml -# application/cstadata+xml -application/cu-seeme cu -# application/cybercash -application/davmount+xml davmount -# application/dca-rft -# application/dec-dx -# application/dialog-info+xml -# application/dicom -# application/dns -application/docbook+xml dbk -# application/dskpp+xml -application/dssc+der dssc -application/dssc+xml xdssc -# application/dvcs -application/ecmascript ecma -# application/edi-consent -# application/edi-x12 -# application/edifact -application/emma+xml emma -# application/epp+xml -application/epub+zip epub -# application/eshop -# application/example -application/exi exi -# application/fastinfoset -# application/fastsoap -# application/fits -application/font-tdpfr pfr -# application/framework-attributes+xml -application/gml+xml gml -application/gpx+xml gpx -application/gxf gxf -# application/h224 -# application/held+xml -# application/http -application/hyperstudio stk -# application/ibe-key-request+xml -# application/ibe-pkg-reply+xml -# application/ibe-pp-data -# application/iges -# application/im-iscomposing+xml -# application/index -# application/index.cmd -# application/index.obj -# application/index.response -# application/index.vnd -application/inkml+xml ink inkml -# application/iotp -application/ipfix ipfix -# application/ipp -# application/isup -application/java-archive jar -application/java-serialized-object ser -application/java-vm class -application/javascript js -application/json json -application/jsonml+json jsonml -# application/kpml-request+xml -# application/kpml-response+xml -application/lost+xml lostxml -application/mac-binhex40 hqx -application/mac-compactpro cpt -# application/macwriteii -application/mads+xml mads -application/marc mrc -application/marcxml+xml mrcx -application/mathematica ma nb mb -# application/mathml-content+xml -# application/mathml-presentation+xml -application/mathml+xml mathml -# application/mbms-associated-procedure-description+xml -# application/mbms-deregister+xml -# application/mbms-envelope+xml -# application/mbms-msk+xml -# application/mbms-msk-response+xml -# application/mbms-protection-description+xml -# application/mbms-reception-report+xml -# application/mbms-register+xml -# application/mbms-register-response+xml -# application/mbms-user-service-description+xml -application/mbox mbox -# application/media_control+xml -application/mediaservercontrol+xml mscml -application/metalink+xml metalink -application/metalink4+xml meta4 -application/mets+xml mets -# application/mikey -application/mods+xml mods -# application/moss-keys -# application/moss-signature -# application/mosskey-data -# application/mosskey-request -application/mp21 m21 mp21 -application/mp4 mp4s -# application/mpeg4-generic -# application/mpeg4-iod -# application/mpeg4-iod-xmt -# application/msc-ivr+xml -# application/msc-mixer+xml -application/msword doc dot -application/mxf mxf -# application/nasdata -# application/news-checkgroups -# application/news-groupinfo -# application/news-transmission -# application/nss -# application/ocsp-request -# application/ocsp-response -application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy -application/oda oda -application/oebps-package+xml opf -application/ogg ogx -application/omdoc+xml omdoc -application/onenote onetoc onetoc2 onetmp onepkg -application/oxps oxps -# application/parityfec -application/patch-ops-error+xml xer -application/pdf pdf -application/pgp-encrypted pgp -# application/pgp-keys -application/pgp-signature asc sig -application/pics-rules prf -# application/pidf+xml -# application/pidf-diff+xml -application/pkcs10 p10 -application/pkcs7-mime p7m p7c -application/pkcs7-signature p7s -application/pkcs8 p8 -application/pkix-attr-cert ac -application/pkix-cert cer -application/pkix-crl crl -application/pkix-pkipath pkipath -application/pkixcmp pki -application/pls+xml pls -# application/poc-settings+xml -application/postscript ai eps ps -# application/prs.alvestrand.titrax-sheet -application/prs.cww cww -# application/prs.nprend -# application/prs.plucker -# application/prs.rdf-xml-crypt -# application/prs.xsf+xml -application/pskc+xml pskcxml -# application/qsig -application/rdf+xml rdf -application/reginfo+xml rif -application/relax-ng-compact-syntax rnc -# application/remote-printing -application/resource-lists+xml rl -application/resource-lists-diff+xml rld -# application/riscos -# application/rlmi+xml -application/rls-services+xml rs -application/rpki-ghostbusters gbr -application/rpki-manifest mft -application/rpki-roa roa -# application/rpki-updown -application/rsd+xml rsd -application/rss+xml rss -application/rtf rtf -# application/rtx -# application/samlassertion+xml -# application/samlmetadata+xml -application/sbml+xml sbml -application/scvp-cv-request scq -application/scvp-cv-response scs -application/scvp-vp-request spq -application/scvp-vp-response spp -application/sdp sdp -# application/set-payment -application/set-payment-initiation setpay -# application/set-registration -application/set-registration-initiation setreg -# application/sgml -# application/sgml-open-catalog -application/shf+xml shf -# application/sieve -# application/simple-filter+xml -# application/simple-message-summary -# application/simplesymbolcontainer -# application/slate -# application/smil -application/smil+xml smi smil -# application/soap+fastinfoset -# application/soap+xml -application/sparql-query rq -application/sparql-results+xml srx -# application/spirits-event+xml -application/srgs gram -application/srgs+xml grxml -application/sru+xml sru -application/ssdl+xml ssdl -application/ssml+xml ssml -# application/tamp-apex-update -# application/tamp-apex-update-confirm -# application/tamp-community-update -# application/tamp-community-update-confirm -# application/tamp-error -# application/tamp-sequence-adjust -# application/tamp-sequence-adjust-confirm -# application/tamp-status-query -# application/tamp-status-response -# application/tamp-update -# application/tamp-update-confirm -application/tei+xml tei teicorpus -application/thraud+xml tfi -# application/timestamp-query -# application/timestamp-reply -application/timestamped-data tsd -# application/tve-trigger -# application/ulpfec -# application/vcard+xml -# application/vemmi -# application/vividence.scriptfile -# application/vnd.3gpp.bsf+xml -application/vnd.3gpp.pic-bw-large plb -application/vnd.3gpp.pic-bw-small psb -application/vnd.3gpp.pic-bw-var pvb -# application/vnd.3gpp.sms -# application/vnd.3gpp2.bcmcsinfo+xml -# application/vnd.3gpp2.sms -application/vnd.3gpp2.tcap tcap -application/vnd.3m.post-it-notes pwn -application/vnd.accpac.simply.aso aso -application/vnd.accpac.simply.imp imp -application/vnd.acucobol acu -application/vnd.acucorp atc acutc -application/vnd.adobe.air-application-installer-package+zip air -application/vnd.adobe.formscentral.fcdt fcdt -application/vnd.adobe.fxp fxp fxpl -# application/vnd.adobe.partial-upload -application/vnd.adobe.xdp+xml xdp -application/vnd.adobe.xfdf xfdf -# application/vnd.aether.imp -# application/vnd.ah-barcode -application/vnd.ahead.space ahead -application/vnd.airzip.filesecure.azf azf -application/vnd.airzip.filesecure.azs azs -application/vnd.amazon.ebook azw -application/vnd.americandynamics.acc acc -application/vnd.amiga.ami ami -# application/vnd.amundsen.maze+xml -application/vnd.android.package-archive apk -application/vnd.anser-web-certificate-issue-initiation cii -application/vnd.anser-web-funds-transfer-initiation fti -application/vnd.antix.game-component atx -application/vnd.apple.installer+xml mpkg -application/vnd.apple.mpegurl m3u8 -# application/vnd.arastra.swi -application/vnd.aristanetworks.swi swi -application/vnd.astraea-software.iota iota -application/vnd.audiograph aep -# application/vnd.autopackage -# application/vnd.avistar+xml -application/vnd.blueice.multipass mpm -# application/vnd.bluetooth.ep.oob -application/vnd.bmi bmi -application/vnd.businessobjects rep -# application/vnd.cab-jscript -# application/vnd.canon-cpdl -# application/vnd.canon-lips -# application/vnd.cendio.thinlinc.clientconf -application/vnd.chemdraw+xml cdxml -application/vnd.chipnuts.karaoke-mmd mmd -application/vnd.cinderella cdy -# application/vnd.cirpack.isdn-ext -application/vnd.claymore cla -application/vnd.cloanto.rp9 rp9 -application/vnd.clonk.c4group c4g c4d c4f c4p c4u -application/vnd.cluetrust.cartomobile-config c11amc -application/vnd.cluetrust.cartomobile-config-pkg c11amz -# application/vnd.collection+json -# application/vnd.commerce-battelle -application/vnd.commonspace csp -application/vnd.contact.cmsg cdbcmsg -application/vnd.cosmocaller cmc -application/vnd.crick.clicker clkx -application/vnd.crick.clicker.keyboard clkk -application/vnd.crick.clicker.palette clkp -application/vnd.crick.clicker.template clkt -application/vnd.crick.clicker.wordbank clkw -application/vnd.criticaltools.wbs+xml wbs -application/vnd.ctc-posml pml -# application/vnd.ctct.ws+xml -# application/vnd.cups-pdf -# application/vnd.cups-postscript -application/vnd.cups-ppd ppd -# application/vnd.cups-raster -# application/vnd.cups-raw -# application/vnd.curl -application/vnd.curl.car car -application/vnd.curl.pcurl pcurl -# application/vnd.cybank -application/vnd.dart dart -application/vnd.data-vision.rdz rdz -application/vnd.dece.data uvf uvvf uvd uvvd -application/vnd.dece.ttml+xml uvt uvvt -application/vnd.dece.unspecified uvx uvvx -application/vnd.dece.zip uvz uvvz -application/vnd.denovo.fcselayout-link fe_launch -# application/vnd.dir-bi.plate-dl-nosuffix -application/vnd.dna dna -application/vnd.dolby.mlp mlp -# application/vnd.dolby.mobile.1 -# application/vnd.dolby.mobile.2 -application/vnd.dpgraph dpg -application/vnd.dreamfactory dfac -application/vnd.ds-keypoint kpxx -application/vnd.dvb.ait ait -# application/vnd.dvb.dvbj -# application/vnd.dvb.esgcontainer -# application/vnd.dvb.ipdcdftnotifaccess -# application/vnd.dvb.ipdcesgaccess -# application/vnd.dvb.ipdcesgaccess2 -# application/vnd.dvb.ipdcesgpdd -# application/vnd.dvb.ipdcroaming -# application/vnd.dvb.iptv.alfec-base -# application/vnd.dvb.iptv.alfec-enhancement -# application/vnd.dvb.notif-aggregate-root+xml -# application/vnd.dvb.notif-container+xml -# application/vnd.dvb.notif-generic+xml -# application/vnd.dvb.notif-ia-msglist+xml -# application/vnd.dvb.notif-ia-registration-request+xml -# application/vnd.dvb.notif-ia-registration-response+xml -# application/vnd.dvb.notif-init+xml -# application/vnd.dvb.pfr -application/vnd.dvb.service svc -# application/vnd.dxr -application/vnd.dynageo geo -# application/vnd.easykaraoke.cdgdownload -# application/vnd.ecdis-update -application/vnd.ecowin.chart mag -# application/vnd.ecowin.filerequest -# application/vnd.ecowin.fileupdate -# application/vnd.ecowin.series -# application/vnd.ecowin.seriesrequest -# application/vnd.ecowin.seriesupdate -# application/vnd.emclient.accessrequest+xml -application/vnd.enliven nml -# application/vnd.eprints.data+xml -application/vnd.epson.esf esf -application/vnd.epson.msf msf -application/vnd.epson.quickanime qam -application/vnd.epson.salt slt -application/vnd.epson.ssf ssf -# application/vnd.ericsson.quickcall -application/vnd.eszigno3+xml es3 et3 -# application/vnd.etsi.aoc+xml -# application/vnd.etsi.cug+xml -# application/vnd.etsi.iptvcommand+xml -# application/vnd.etsi.iptvdiscovery+xml -# application/vnd.etsi.iptvprofile+xml -# application/vnd.etsi.iptvsad-bc+xml -# application/vnd.etsi.iptvsad-cod+xml -# application/vnd.etsi.iptvsad-npvr+xml -# application/vnd.etsi.iptvservice+xml -# application/vnd.etsi.iptvsync+xml -# application/vnd.etsi.iptvueprofile+xml -# application/vnd.etsi.mcid+xml -# application/vnd.etsi.overload-control-policy-dataset+xml -# application/vnd.etsi.sci+xml -# application/vnd.etsi.simservs+xml -# application/vnd.etsi.tsl+xml -# application/vnd.etsi.tsl.der -# application/vnd.eudora.data -application/vnd.ezpix-album ez2 -application/vnd.ezpix-package ez3 -# application/vnd.f-secure.mobile -application/vnd.fdf fdf -application/vnd.fdsn.mseed mseed -application/vnd.fdsn.seed seed dataless -# application/vnd.ffsns -# application/vnd.fints -application/vnd.flographit gph -application/vnd.fluxtime.clip ftc -# application/vnd.font-fontforge-sfd -application/vnd.framemaker fm frame maker book -application/vnd.frogans.fnc fnc -application/vnd.frogans.ltf ltf -application/vnd.fsc.weblaunch fsc -application/vnd.fujitsu.oasys oas -application/vnd.fujitsu.oasys2 oa2 -application/vnd.fujitsu.oasys3 oa3 -application/vnd.fujitsu.oasysgp fg5 -application/vnd.fujitsu.oasysprs bh2 -# application/vnd.fujixerox.art-ex -# application/vnd.fujixerox.art4 -# application/vnd.fujixerox.hbpl -application/vnd.fujixerox.ddd ddd -application/vnd.fujixerox.docuworks xdw -application/vnd.fujixerox.docuworks.binder xbd -# application/vnd.fut-misnet -application/vnd.fuzzysheet fzs -application/vnd.genomatix.tuxedo txd -# application/vnd.geocube+xml -application/vnd.geogebra.file ggb -application/vnd.geogebra.tool ggt -application/vnd.geometry-explorer gex gre -application/vnd.geonext gxt -application/vnd.geoplan g2w -application/vnd.geospace g3w -# application/vnd.globalplatform.card-content-mgt -# application/vnd.globalplatform.card-content-mgt-response -application/vnd.gmx gmx -application/vnd.google-earth.kml+xml kml -application/vnd.google-earth.kmz kmz -application/vnd.grafeq gqf gqs -# application/vnd.gridmp -application/vnd.groove-account gac -application/vnd.groove-help ghf -application/vnd.groove-identity-message gim -application/vnd.groove-injector grv -application/vnd.groove-tool-message gtm -application/vnd.groove-tool-template tpl -application/vnd.groove-vcard vcg -# application/vnd.hal+json -application/vnd.hal+xml hal -application/vnd.handheld-entertainment+xml zmm -application/vnd.hbci hbci -# application/vnd.hcl-bireports -application/vnd.hhe.lesson-player les -application/vnd.hp-hpgl hpgl -application/vnd.hp-hpid hpid -application/vnd.hp-hps hps -application/vnd.hp-jlyt jlt -application/vnd.hp-pcl pcl -application/vnd.hp-pclxl pclxl -# application/vnd.httphone -application/vnd.hydrostatix.sof-data sfd-hdstx -# application/vnd.hzn-3d-crossword -# application/vnd.ibm.afplinedata -# application/vnd.ibm.electronic-media -application/vnd.ibm.minipay mpy -application/vnd.ibm.modcap afp listafp list3820 -application/vnd.ibm.rights-management irm -application/vnd.ibm.secure-container sc -application/vnd.iccprofile icc icm -application/vnd.igloader igl -application/vnd.immervision-ivp ivp -application/vnd.immervision-ivu ivu -# application/vnd.informedcontrol.rms+xml -# application/vnd.informix-visionary -# application/vnd.infotech.project -# application/vnd.infotech.project+xml -# application/vnd.innopath.wamp.notification -application/vnd.insors.igm igm -application/vnd.intercon.formnet xpw xpx -application/vnd.intergeo i2g -# application/vnd.intertrust.digibox -# application/vnd.intertrust.nncp -application/vnd.intu.qbo qbo -application/vnd.intu.qfx qfx -# application/vnd.iptc.g2.conceptitem+xml -# application/vnd.iptc.g2.knowledgeitem+xml -# application/vnd.iptc.g2.newsitem+xml -# application/vnd.iptc.g2.newsmessage+xml -# application/vnd.iptc.g2.packageitem+xml -# application/vnd.iptc.g2.planningitem+xml -application/vnd.ipunplugged.rcprofile rcprofile -application/vnd.irepository.package+xml irp -application/vnd.is-xpr xpr -application/vnd.isac.fcs fcs -application/vnd.jam jam -# application/vnd.japannet-directory-service -# application/vnd.japannet-jpnstore-wakeup -# application/vnd.japannet-payment-wakeup -# application/vnd.japannet-registration -# application/vnd.japannet-registration-wakeup -# application/vnd.japannet-setstore-wakeup -# application/vnd.japannet-verification -# application/vnd.japannet-verification-wakeup -application/vnd.jcp.javame.midlet-rms rms -application/vnd.jisp jisp -application/vnd.joost.joda-archive joda -application/vnd.kahootz ktz ktr -application/vnd.kde.karbon karbon -application/vnd.kde.kchart chrt -application/vnd.kde.kformula kfo -application/vnd.kde.kivio flw -application/vnd.kde.kontour kon -application/vnd.kde.kpresenter kpr kpt -application/vnd.kde.kspread ksp -application/vnd.kde.kword kwd kwt -application/vnd.kenameaapp htke -application/vnd.kidspiration kia -application/vnd.kinar kne knp -application/vnd.koan skp skd skt skm -application/vnd.kodak-descriptor sse -application/vnd.las.las+xml lasxml -# application/vnd.liberty-request+xml -application/vnd.llamagraphics.life-balance.desktop lbd -application/vnd.llamagraphics.life-balance.exchange+xml lbe -application/vnd.lotus-1-2-3 123 -application/vnd.lotus-approach apr -application/vnd.lotus-freelance pre -application/vnd.lotus-notes nsf -application/vnd.lotus-organizer org -application/vnd.lotus-screencam scm -application/vnd.lotus-wordpro lwp -application/vnd.macports.portpkg portpkg -# application/vnd.marlin.drm.actiontoken+xml -# application/vnd.marlin.drm.conftoken+xml -# application/vnd.marlin.drm.license+xml -# application/vnd.marlin.drm.mdcf -application/vnd.mcd mcd -application/vnd.medcalcdata mc1 -application/vnd.mediastation.cdkey cdkey -# application/vnd.meridian-slingshot -application/vnd.mfer mwf -application/vnd.mfmp mfm -application/vnd.micrografx.flo flo -application/vnd.micrografx.igx igx -application/vnd.mif mif -# application/vnd.minisoft-hp3000-save -# application/vnd.mitsubishi.misty-guard.trustweb -application/vnd.mobius.daf daf -application/vnd.mobius.dis dis -application/vnd.mobius.mbk mbk -application/vnd.mobius.mqy mqy -application/vnd.mobius.msl msl -application/vnd.mobius.plc plc -application/vnd.mobius.txf txf -application/vnd.mophun.application mpn -application/vnd.mophun.certificate mpc -# application/vnd.motorola.flexsuite -# application/vnd.motorola.flexsuite.adsi -# application/vnd.motorola.flexsuite.fis -# application/vnd.motorola.flexsuite.gotap -# application/vnd.motorola.flexsuite.kmr -# application/vnd.motorola.flexsuite.ttc -# application/vnd.motorola.flexsuite.wem -# application/vnd.motorola.iprm -application/vnd.mozilla.xul+xml xul -application/vnd.ms-artgalry cil -# application/vnd.ms-asf -application/vnd.ms-cab-compressed cab -# application/vnd.ms-color.iccprofile -application/vnd.ms-excel xls xlm xla xlc xlt xlw -application/vnd.ms-excel.addin.macroenabled.12 xlam -application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb -application/vnd.ms-excel.sheet.macroenabled.12 xlsm -application/vnd.ms-excel.template.macroenabled.12 xltm -application/vnd.ms-fontobject eot -application/vnd.ms-htmlhelp chm -application/vnd.ms-ims ims -application/vnd.ms-lrm lrm -# application/vnd.ms-office.activex+xml -application/vnd.ms-officetheme thmx -# application/vnd.ms-opentype -# application/vnd.ms-package.obfuscated-opentype -application/vnd.ms-pki.seccat cat -application/vnd.ms-pki.stl stl -# application/vnd.ms-playready.initiator+xml -application/vnd.ms-powerpoint ppt pps pot -application/vnd.ms-powerpoint.addin.macroenabled.12 ppam -application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm -application/vnd.ms-powerpoint.slide.macroenabled.12 sldm -application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm -application/vnd.ms-powerpoint.template.macroenabled.12 potm -# application/vnd.ms-printing.printticket+xml -application/vnd.ms-project mpp mpt -# application/vnd.ms-tnef -# application/vnd.ms-wmdrm.lic-chlg-req -# application/vnd.ms-wmdrm.lic-resp -# application/vnd.ms-wmdrm.meter-chlg-req -# application/vnd.ms-wmdrm.meter-resp -application/vnd.ms-word.document.macroenabled.12 docm -application/vnd.ms-word.template.macroenabled.12 dotm -application/vnd.ms-works wps wks wcm wdb -application/vnd.ms-wpl wpl -application/vnd.ms-xpsdocument xps -application/vnd.mseq mseq -# application/vnd.msign -# application/vnd.multiad.creator -# application/vnd.multiad.creator.cif -# application/vnd.music-niff -application/vnd.musician mus -application/vnd.muvee.style msty -application/vnd.mynfc taglet -# application/vnd.ncd.control -# application/vnd.ncd.reference -# application/vnd.nervana -# application/vnd.netfpx -application/vnd.neurolanguage.nlu nlu -application/vnd.nitf ntf nitf -application/vnd.noblenet-directory nnd -application/vnd.noblenet-sealer nns -application/vnd.noblenet-web nnw -# application/vnd.nokia.catalogs -# application/vnd.nokia.conml+wbxml -# application/vnd.nokia.conml+xml -# application/vnd.nokia.isds-radio-presets -# application/vnd.nokia.iptv.config+xml -# application/vnd.nokia.landmark+wbxml -# application/vnd.nokia.landmark+xml -# application/vnd.nokia.landmarkcollection+xml -# application/vnd.nokia.n-gage.ac+xml -application/vnd.nokia.n-gage.data ngdat -application/vnd.nokia.n-gage.symbian.install n-gage -# application/vnd.nokia.ncd -# application/vnd.nokia.pcd+wbxml -# application/vnd.nokia.pcd+xml -application/vnd.nokia.radio-preset rpst -application/vnd.nokia.radio-presets rpss -application/vnd.novadigm.edm edm -application/vnd.novadigm.edx edx -application/vnd.novadigm.ext ext -# application/vnd.ntt-local.file-transfer -# application/vnd.ntt-local.sip-ta_remote -# application/vnd.ntt-local.sip-ta_tcp_stream -application/vnd.oasis.opendocument.chart odc -application/vnd.oasis.opendocument.chart-template otc -application/vnd.oasis.opendocument.database odb -application/vnd.oasis.opendocument.formula odf -application/vnd.oasis.opendocument.formula-template odft -application/vnd.oasis.opendocument.graphics odg -application/vnd.oasis.opendocument.graphics-template otg -application/vnd.oasis.opendocument.image odi -application/vnd.oasis.opendocument.image-template oti -application/vnd.oasis.opendocument.presentation odp -application/vnd.oasis.opendocument.presentation-template otp -application/vnd.oasis.opendocument.spreadsheet ods -application/vnd.oasis.opendocument.spreadsheet-template ots -application/vnd.oasis.opendocument.text odt -application/vnd.oasis.opendocument.text-master odm -application/vnd.oasis.opendocument.text-template ott -application/vnd.oasis.opendocument.text-web oth -# application/vnd.obn -# application/vnd.oftn.l10n+json -# application/vnd.oipf.contentaccessdownload+xml -# application/vnd.oipf.contentaccessstreaming+xml -# application/vnd.oipf.cspg-hexbinary -# application/vnd.oipf.dae.svg+xml -# application/vnd.oipf.dae.xhtml+xml -# application/vnd.oipf.mippvcontrolmessage+xml -# application/vnd.oipf.pae.gem -# application/vnd.oipf.spdiscovery+xml -# application/vnd.oipf.spdlist+xml -# application/vnd.oipf.ueprofile+xml -# application/vnd.oipf.userprofile+xml -application/vnd.olpc-sugar xo -# application/vnd.oma-scws-config -# application/vnd.oma-scws-http-request -# application/vnd.oma-scws-http-response -# application/vnd.oma.bcast.associated-procedure-parameter+xml -# application/vnd.oma.bcast.drm-trigger+xml -# application/vnd.oma.bcast.imd+xml -# application/vnd.oma.bcast.ltkm -# application/vnd.oma.bcast.notification+xml -# application/vnd.oma.bcast.provisioningtrigger -# application/vnd.oma.bcast.sgboot -# application/vnd.oma.bcast.sgdd+xml -# application/vnd.oma.bcast.sgdu -# application/vnd.oma.bcast.simple-symbol-container -# application/vnd.oma.bcast.smartcard-trigger+xml -# application/vnd.oma.bcast.sprov+xml -# application/vnd.oma.bcast.stkm -# application/vnd.oma.cab-address-book+xml -# application/vnd.oma.cab-feature-handler+xml -# application/vnd.oma.cab-pcc+xml -# application/vnd.oma.cab-user-prefs+xml -# application/vnd.oma.dcd -# application/vnd.oma.dcdc -application/vnd.oma.dd2+xml dd2 -# application/vnd.oma.drm.risd+xml -# application/vnd.oma.group-usage-list+xml -# application/vnd.oma.pal+xml -# application/vnd.oma.poc.detailed-progress-report+xml -# application/vnd.oma.poc.final-report+xml -# application/vnd.oma.poc.groups+xml -# application/vnd.oma.poc.invocation-descriptor+xml -# application/vnd.oma.poc.optimized-progress-report+xml -# application/vnd.oma.push -# application/vnd.oma.scidm.messages+xml -# application/vnd.oma.xcap-directory+xml -# application/vnd.omads-email+xml -# application/vnd.omads-file+xml -# application/vnd.omads-folder+xml -# application/vnd.omaloc-supl-init -application/vnd.openofficeorg.extension oxt -# application/vnd.openxmlformats-officedocument.custom-properties+xml -# application/vnd.openxmlformats-officedocument.customxmlproperties+xml -# application/vnd.openxmlformats-officedocument.drawing+xml -# application/vnd.openxmlformats-officedocument.drawingml.chart+xml -# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml -# application/vnd.openxmlformats-officedocument.extended-properties+xml -# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml -# application/vnd.openxmlformats-officedocument.presentationml.comments+xml -# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml -# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml -# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml -application/vnd.openxmlformats-officedocument.presentationml.presentation pptx -# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml -application/vnd.openxmlformats-officedocument.presentationml.slide sldx -# application/vnd.openxmlformats-officedocument.presentationml.slide+xml -# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml -# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml -application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx -# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml -# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml -# application/vnd.openxmlformats-officedocument.presentationml.tags+xml -application/vnd.openxmlformats-officedocument.presentationml.template potx -# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx -# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx -# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml -# application/vnd.openxmlformats-officedocument.theme+xml -# application/vnd.openxmlformats-officedocument.themeoverride+xml -# application/vnd.openxmlformats-officedocument.vmldrawing -# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.document docx -# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx -# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml -# application/vnd.openxmlformats-package.core-properties+xml -# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml -# application/vnd.openxmlformats-package.relationships+xml -# application/vnd.quobject-quoxdocument -# application/vnd.osa.netdeploy -application/vnd.osgeo.mapguide.package mgp -# application/vnd.osgi.bundle -application/vnd.osgi.dp dp -application/vnd.osgi.subsystem esa -# application/vnd.otps.ct-kip+xml -application/vnd.palm pdb pqa oprc -# application/vnd.paos.xml -application/vnd.pawaafile paw -application/vnd.pg.format str -application/vnd.pg.osasli ei6 -# application/vnd.piaccess.application-licence -application/vnd.picsel efif -application/vnd.pmi.widget wg -# application/vnd.poc.group-advertisement+xml -application/vnd.pocketlearn plf -application/vnd.powerbuilder6 pbd -# application/vnd.powerbuilder6-s -# application/vnd.powerbuilder7 -# application/vnd.powerbuilder7-s -# application/vnd.powerbuilder75 -# application/vnd.powerbuilder75-s -# application/vnd.preminet -application/vnd.previewsystems.box box -application/vnd.proteus.magazine mgz -application/vnd.publishare-delta-tree qps -application/vnd.pvi.ptid1 ptid -# application/vnd.pwg-multiplexed -# application/vnd.pwg-xhtml-print+xml -# application/vnd.qualcomm.brew-app-res -application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb -# application/vnd.radisys.moml+xml -# application/vnd.radisys.msml+xml -# application/vnd.radisys.msml-audit+xml -# application/vnd.radisys.msml-audit-conf+xml -# application/vnd.radisys.msml-audit-conn+xml -# application/vnd.radisys.msml-audit-dialog+xml -# application/vnd.radisys.msml-audit-stream+xml -# application/vnd.radisys.msml-conf+xml -# application/vnd.radisys.msml-dialog+xml -# application/vnd.radisys.msml-dialog-base+xml -# application/vnd.radisys.msml-dialog-fax-detect+xml -# application/vnd.radisys.msml-dialog-fax-sendrecv+xml -# application/vnd.radisys.msml-dialog-group+xml -# application/vnd.radisys.msml-dialog-speech+xml -# application/vnd.radisys.msml-dialog-transform+xml -# application/vnd.rainstor.data -# application/vnd.rapid -application/vnd.realvnc.bed bed -application/vnd.recordare.musicxml mxl -application/vnd.recordare.musicxml+xml musicxml -# application/vnd.renlearn.rlprint -application/vnd.rig.cryptonote cryptonote -application/vnd.rim.cod cod -application/vnd.rn-realmedia rm -application/vnd.rn-realmedia-vbr rmvb -application/vnd.route66.link66+xml link66 -# application/vnd.rs-274x -# application/vnd.ruckus.download -# application/vnd.s3sms -application/vnd.sailingtracker.track st -# application/vnd.sbm.cid -# application/vnd.sbm.mid2 -# application/vnd.scribus -# application/vnd.sealed.3df -# application/vnd.sealed.csf -# application/vnd.sealed.doc -# application/vnd.sealed.eml -# application/vnd.sealed.mht -# application/vnd.sealed.net -# application/vnd.sealed.ppt -# application/vnd.sealed.tiff -# application/vnd.sealed.xls -# application/vnd.sealedmedia.softseal.html -# application/vnd.sealedmedia.softseal.pdf -application/vnd.seemail see -application/vnd.sema sema -application/vnd.semd semd -application/vnd.semf semf -application/vnd.shana.informed.formdata ifm -application/vnd.shana.informed.formtemplate itp -application/vnd.shana.informed.interchange iif -application/vnd.shana.informed.package ipk -application/vnd.simtech-mindmapper twd twds -application/vnd.smaf mmf -# application/vnd.smart.notebook -application/vnd.smart.teacher teacher -# application/vnd.software602.filler.form+xml -# application/vnd.software602.filler.form-xml-zip -application/vnd.solent.sdkm+xml sdkm sdkd -application/vnd.spotfire.dxp dxp -application/vnd.spotfire.sfs sfs -# application/vnd.sss-cod -# application/vnd.sss-dtf -# application/vnd.sss-ntf -application/vnd.stardivision.calc sdc -application/vnd.stardivision.draw sda -application/vnd.stardivision.impress sdd -application/vnd.stardivision.math smf -application/vnd.stardivision.writer sdw vor -application/vnd.stardivision.writer-global sgl -application/vnd.stepmania.package smzip -application/vnd.stepmania.stepchart sm -# application/vnd.street-stream -application/vnd.sun.xml.calc sxc -application/vnd.sun.xml.calc.template stc -application/vnd.sun.xml.draw sxd -application/vnd.sun.xml.draw.template std -application/vnd.sun.xml.impress sxi -application/vnd.sun.xml.impress.template sti -application/vnd.sun.xml.math sxm -application/vnd.sun.xml.writer sxw -application/vnd.sun.xml.writer.global sxg -application/vnd.sun.xml.writer.template stw -# application/vnd.sun.wadl+xml -application/vnd.sus-calendar sus susp -application/vnd.svd svd -# application/vnd.swiftview-ics -application/vnd.symbian.install sis sisx -application/vnd.syncml+xml xsm -application/vnd.syncml.dm+wbxml bdm -application/vnd.syncml.dm+xml xdm -# application/vnd.syncml.dm.notification -# application/vnd.syncml.ds.notification -application/vnd.tao.intent-module-archive tao -application/vnd.tcpdump.pcap pcap cap dmp -application/vnd.tmobile-livetv tmo -application/vnd.trid.tpt tpt -application/vnd.triscape.mxs mxs -application/vnd.trueapp tra -# application/vnd.truedoc -# application/vnd.ubisoft.webplayer -application/vnd.ufdl ufd ufdl -application/vnd.uiq.theme utz -application/vnd.umajin umj -application/vnd.unity unityweb -application/vnd.uoml+xml uoml -# application/vnd.uplanet.alert -# application/vnd.uplanet.alert-wbxml -# application/vnd.uplanet.bearer-choice -# application/vnd.uplanet.bearer-choice-wbxml -# application/vnd.uplanet.cacheop -# application/vnd.uplanet.cacheop-wbxml -# application/vnd.uplanet.channel -# application/vnd.uplanet.channel-wbxml -# application/vnd.uplanet.list -# application/vnd.uplanet.list-wbxml -# application/vnd.uplanet.listcmd -# application/vnd.uplanet.listcmd-wbxml -# application/vnd.uplanet.signal -application/vnd.vcx vcx -# application/vnd.vd-study -# application/vnd.vectorworks -# application/vnd.verimatrix.vcas -# application/vnd.vidsoft.vidconference -application/vnd.visio vsd vst vss vsw -application/vnd.visionary vis -# application/vnd.vividence.scriptfile -application/vnd.vsf vsf -# application/vnd.wap.sic -# application/vnd.wap.slc -application/vnd.wap.wbxml wbxml -application/vnd.wap.wmlc wmlc -application/vnd.wap.wmlscriptc wmlsc -application/vnd.webturbo wtb -# application/vnd.wfa.wsc -# application/vnd.wmc -# application/vnd.wmf.bootstrap -# application/vnd.wolfram.mathematica -# application/vnd.wolfram.mathematica.package -application/vnd.wolfram.player nbp -application/vnd.wordperfect wpd -application/vnd.wqd wqd -# application/vnd.wrq-hp3000-labelled -application/vnd.wt.stf stf -# application/vnd.wv.csp+wbxml -# application/vnd.wv.csp+xml -# application/vnd.wv.ssp+xml -application/vnd.xara xar -application/vnd.xfdl xfdl -# application/vnd.xfdl.webform -# application/vnd.xmi+xml -# application/vnd.xmpie.cpkg -# application/vnd.xmpie.dpkg -# application/vnd.xmpie.plan -# application/vnd.xmpie.ppkg -# application/vnd.xmpie.xlim -application/vnd.yamaha.hv-dic hvd -application/vnd.yamaha.hv-script hvs -application/vnd.yamaha.hv-voice hvp -application/vnd.yamaha.openscoreformat osf -application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg -# application/vnd.yamaha.remote-setup -application/vnd.yamaha.smaf-audio saf -application/vnd.yamaha.smaf-phrase spf -# application/vnd.yamaha.through-ngn -# application/vnd.yamaha.tunnel-udpencap -application/vnd.yellowriver-custom-menu cmp -application/vnd.zul zir zirz -application/vnd.zzazz.deck+xml zaz -application/voicexml+xml vxml -# application/vq-rtcpxr -# application/watcherinfo+xml -# application/whoispp-query -# application/whoispp-response -application/widget wgt -application/winhlp hlp -# application/wita -# application/wordperfect5.1 -application/wsdl+xml wsdl -application/wspolicy+xml wspolicy -application/x-7z-compressed 7z -application/x-abiword abw -application/x-ace-compressed ace -# application/x-amf -application/x-apple-diskimage dmg -application/x-authorware-bin aab x32 u32 vox -application/x-authorware-map aam -application/x-authorware-seg aas -application/x-bcpio bcpio -application/x-bittorrent torrent -application/x-blorb blb blorb -application/x-bzip bz -application/x-bzip2 bz2 boz -application/x-cbr cbr cba cbt cbz cb7 -application/x-cdlink vcd -application/x-cfs-compressed cfs -application/x-chat chat -application/x-chess-pgn pgn -application/x-conference nsc -# application/x-compress -application/x-cpio cpio -application/x-csh csh -application/x-debian-package deb udeb -application/x-dgc-compressed dgc -application/x-director dir dcr dxr cst cct cxt w3d fgd swa -application/x-doom wad -application/x-dtbncx+xml ncx -application/x-dtbook+xml dtb -application/x-dtbresource+xml res -application/x-dvi dvi -application/x-envoy evy -application/x-eva eva -application/x-font-bdf bdf -# application/x-font-dos -# application/x-font-framemaker -application/x-font-ghostscript gsf -# application/x-font-libgrx -application/x-font-linux-psf psf -application/x-font-otf otf -application/x-font-pcf pcf -application/x-font-snf snf -# application/x-font-speedo -# application/x-font-sunos-news -application/x-font-ttf ttf ttc -application/x-font-type1 pfa pfb pfm afm -application/font-woff woff -# application/x-font-vfont -application/x-freearc arc -application/x-futuresplash spl -application/x-gca-compressed gca -application/x-glulx ulx -application/x-gnumeric gnumeric -application/x-gramps-xml gramps -application/x-gtar gtar -# application/x-gzip -application/x-hdf hdf -application/x-install-instructions install -application/x-iso9660-image iso -application/x-java-jnlp-file jnlp -application/x-latex latex -application/x-lzh-compressed lzh lha -application/x-mie mie -application/x-mobipocket-ebook prc mobi -application/x-ms-application application -application/x-ms-shortcut lnk -application/x-ms-wmd wmd -application/x-ms-wmz wmz -application/x-ms-xbap xbap -application/x-msaccess mdb -application/x-msbinder obd -application/x-mscardfile crd -application/x-msclip clp -application/x-msdownload exe dll com bat msi -application/x-msmediaview mvb m13 m14 -application/x-msmetafile wmf wmz emf emz -application/x-msmoney mny -application/x-mspublisher pub -application/x-msschedule scd -application/x-msterminal trm -application/x-mswrite wri -application/x-netcdf nc cdf -application/x-nzb nzb -application/x-pkcs12 p12 pfx -application/x-pkcs7-certificates p7b spc -application/x-pkcs7-certreqresp p7r -application/x-rar-compressed rar -application/x-research-info-systems ris -application/x-sh sh -application/x-shar shar -application/x-shockwave-flash swf -application/x-silverlight-app xap -application/x-sql sql -application/x-stuffit sit -application/x-stuffitx sitx -application/x-subrip srt -application/x-sv4cpio sv4cpio -application/x-sv4crc sv4crc -application/x-t3vm-image t3 -application/x-tads gam -application/x-tar tar -application/x-tcl tcl -application/x-tex tex -application/x-tex-tfm tfm -application/x-texinfo texinfo texi -application/x-tgif obj -application/x-ustar ustar -application/x-wais-source src -application/x-x509-ca-cert der crt -application/x-xfig fig -application/x-xliff+xml xlf -application/x-xpinstall xpi -application/x-xz xz -application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8 -# application/x400-bp -application/xaml+xml xaml -# application/xcap-att+xml -# application/xcap-caps+xml -application/xcap-diff+xml xdf -# application/xcap-el+xml -# application/xcap-error+xml -# application/xcap-ns+xml -# application/xcon-conference-info-diff+xml -# application/xcon-conference-info+xml -application/xenc+xml xenc -application/xhtml+xml xhtml xht -# application/xhtml-voice+xml -application/xml xml xsl -application/xml-dtd dtd -# application/xml-external-parsed-entity -# application/xmpp+xml -application/xop+xml xop -application/xproc+xml xpl -application/xslt+xml xslt -application/xspf+xml xspf -application/xv+xml mxml xhvml xvml xvm -application/yang yang -application/yin+xml yin -application/zip zip -# audio/1d-interleaved-parityfec -# audio/32kadpcm -# audio/3gpp -# audio/3gpp2 -# audio/ac3 -audio/adpcm adp -# audio/amr -# audio/amr-wb -# audio/amr-wb+ -# audio/asc -# audio/atrac-advanced-lossless -# audio/atrac-x -# audio/atrac3 -audio/basic au snd -# audio/bv16 -# audio/bv32 -# audio/clearmode -# audio/cn -# audio/dat12 -# audio/dls -# audio/dsr-es201108 -# audio/dsr-es202050 -# audio/dsr-es202211 -# audio/dsr-es202212 -# audio/dv -# audio/dvi4 -# audio/eac3 -# audio/evrc -# audio/evrc-qcp -# audio/evrc0 -# audio/evrc1 -# audio/evrcb -# audio/evrcb0 -# audio/evrcb1 -# audio/evrcwb -# audio/evrcwb0 -# audio/evrcwb1 -# audio/example -# audio/fwdred -# audio/g719 -# audio/g722 -# audio/g7221 -# audio/g723 -# audio/g726-16 -# audio/g726-24 -# audio/g726-32 -# audio/g726-40 -# audio/g728 -# audio/g729 -# audio/g7291 -# audio/g729d -# audio/g729e -# audio/gsm -# audio/gsm-efr -# audio/gsm-hr-08 -# audio/ilbc -# audio/ip-mr_v2.5 -# audio/isac -# audio/l16 -# audio/l20 -# audio/l24 -# audio/l8 -# audio/lpc -audio/midi mid midi kar rmi -# audio/mobile-xmf -audio/mp4 mp4a -# audio/mp4a-latm -# audio/mpa -# audio/mpa-robust -audio/mpeg mpga mp2 mp2a mp3 m2a m3a -# audio/mpeg4-generic -# audio/musepack -audio/ogg oga ogg spx -# audio/opus -# audio/parityfec -# audio/pcma -# audio/pcma-wb -# audio/pcmu-wb -# audio/pcmu -# audio/prs.sid -# audio/qcelp -# audio/red -# audio/rtp-enc-aescm128 -# audio/rtp-midi -# audio/rtx -audio/s3m s3m -audio/silk sil -# audio/smv -# audio/smv0 -# audio/smv-qcp -# audio/sp-midi -# audio/speex -# audio/t140c -# audio/t38 -# audio/telephone-event -# audio/tone -# audio/uemclip -# audio/ulpfec -# audio/vdvi -# audio/vmr-wb -# audio/vnd.3gpp.iufp -# audio/vnd.4sb -# audio/vnd.audiokoz -# audio/vnd.celp -# audio/vnd.cisco.nse -# audio/vnd.cmles.radio-events -# audio/vnd.cns.anp1 -# audio/vnd.cns.inf1 -audio/vnd.dece.audio uva uvva -audio/vnd.digital-winds eol -# audio/vnd.dlna.adts -# audio/vnd.dolby.heaac.1 -# audio/vnd.dolby.heaac.2 -# audio/vnd.dolby.mlp -# audio/vnd.dolby.mps -# audio/vnd.dolby.pl2 -# audio/vnd.dolby.pl2x -# audio/vnd.dolby.pl2z -# audio/vnd.dolby.pulse.1 -audio/vnd.dra dra -audio/vnd.dts dts -audio/vnd.dts.hd dtshd -# audio/vnd.dvb.file -# audio/vnd.everad.plj -# audio/vnd.hns.audio -audio/vnd.lucent.voice lvp -audio/vnd.ms-playready.media.pya pya -# audio/vnd.nokia.mobile-xmf -# audio/vnd.nortel.vbk -audio/vnd.nuera.ecelp4800 ecelp4800 -audio/vnd.nuera.ecelp7470 ecelp7470 -audio/vnd.nuera.ecelp9600 ecelp9600 -# audio/vnd.octel.sbc -# audio/vnd.qcelp -# audio/vnd.rhetorex.32kadpcm -audio/vnd.rip rip -# audio/vnd.sealedmedia.softseal.mpeg -# audio/vnd.vmx.cvsd -# audio/vorbis -# audio/vorbis-config -audio/webm weba -audio/x-aac aac -audio/x-aiff aif aiff aifc -audio/x-caf caf -audio/x-flac flac -audio/x-matroska mka -audio/x-mpegurl m3u -audio/x-ms-wax wax -audio/x-ms-wma wma -audio/x-pn-realaudio ram ra -audio/x-pn-realaudio-plugin rmp -# audio/x-tta -audio/x-wav wav -audio/xm xm -chemical/x-cdx cdx -chemical/x-cif cif -chemical/x-cmdf cmdf -chemical/x-cml cml -chemical/x-csml csml -# chemical/x-pdb -chemical/x-xyz xyz -image/bmp bmp -image/cgm cgm -# image/example -# image/fits -image/g3fax g3 -image/gif gif -image/ief ief -# image/jp2 -image/jpeg jpeg jpg jpe -# image/jpm -# image/jpx -image/ktx ktx -# image/naplps -image/png png -image/prs.btif btif -# image/prs.pti -image/sgi sgi -image/svg+xml svg svgz -# image/t38 -image/tiff tiff tif -# image/tiff-fx -image/vnd.adobe.photoshop psd -# image/vnd.cns.inf2 -image/vnd.dece.graphic uvi uvvi uvg uvvg -image/vnd.dvb.subtitle sub -image/vnd.djvu djvu djv -image/vnd.dwg dwg -image/vnd.dxf dxf -image/vnd.fastbidsheet fbs -image/vnd.fpx fpx -image/vnd.fst fst -image/vnd.fujixerox.edmics-mmr mmr -image/vnd.fujixerox.edmics-rlc rlc -# image/vnd.globalgraphics.pgb -# image/vnd.microsoft.icon -# image/vnd.mix -image/vnd.ms-modi mdi -image/vnd.ms-photo wdp -image/vnd.net-fpx npx -# image/vnd.radiance -# image/vnd.sealed.png -# image/vnd.sealedmedia.softseal.gif -# image/vnd.sealedmedia.softseal.jpg -# image/vnd.svf -image/vnd.wap.wbmp wbmp -image/vnd.xiff xif -image/webp webp -image/x-3ds 3ds -image/x-cmu-raster ras -image/x-cmx cmx -image/x-freehand fh fhc fh4 fh5 fh7 -image/x-icon ico -image/x-mrsid-image sid -image/x-pcx pcx -image/x-pict pic pct -image/x-portable-anymap pnm -image/x-portable-bitmap pbm -image/x-portable-graymap pgm -image/x-portable-pixmap ppm -image/x-rgb rgb -image/x-tga tga -image/x-xbitmap xbm -image/x-xpixmap xpm -image/x-xwindowdump xwd -# message/cpim -# message/delivery-status -# message/disposition-notification -# message/example -# message/external-body -# message/feedback-report -# message/global -# message/global-delivery-status -# message/global-disposition-notification -# message/global-headers -# message/http -# message/imdn+xml -# message/news -# message/partial -message/rfc822 eml mime -# message/s-http -# message/sip -# message/sipfrag -# message/tracking-status -# message/vnd.si.simp -# model/example -model/iges igs iges -model/mesh msh mesh silo -model/vnd.collada+xml dae -model/vnd.dwf dwf -# model/vnd.flatland.3dml -model/vnd.gdl gdl -# model/vnd.gs-gdl -# model/vnd.gs.gdl -model/vnd.gtw gtw -# model/vnd.moml+xml -model/vnd.mts mts -# model/vnd.parasolid.transmit.binary -# model/vnd.parasolid.transmit.text -model/vnd.vtu vtu -model/vrml wrl vrml -model/x3d+binary x3db x3dbz -model/x3d+vrml x3dv x3dvz -model/x3d+xml x3d x3dz -# multipart/alternative -# multipart/appledouble -# multipart/byteranges -# multipart/digest -# multipart/encrypted -# multipart/example -# multipart/form-data -# multipart/header-set -# multipart/mixed -# multipart/parallel -# multipart/related -# multipart/report -# multipart/signed -# multipart/voice-message -# text/1d-interleaved-parityfec -text/cache-manifest appcache -text/calendar ics ifb -text/css css -text/csv csv -# text/directory -# text/dns -# text/ecmascript -# text/enriched -# text/example -# text/fwdred -text/html html htm -# text/javascript -text/n3 n3 -# text/parityfec -text/plain txt text conf def list log in -# text/prs.fallenstein.rst -text/prs.lines.tag dsc -# text/vnd.radisys.msml-basic-layout -# text/red -# text/rfc822-headers -text/richtext rtx -# text/rtf -# text/rtp-enc-aescm128 -# text/rtx -text/sgml sgml sgm -# text/t140 -text/tab-separated-values tsv -text/troff t tr roff man me ms -text/turtle ttl -# text/ulpfec -text/uri-list uri uris urls -text/vcard vcard -# text/vnd.abc -text/vnd.curl curl -text/vnd.curl.dcurl dcurl -text/vnd.curl.scurl scurl -text/vnd.curl.mcurl mcurl -# text/vnd.dmclientscript -text/vnd.dvb.subtitle sub -# text/vnd.esmertec.theme-descriptor -text/vnd.fly fly -text/vnd.fmi.flexstor flx -text/vnd.graphviz gv -text/vnd.in3d.3dml 3dml -text/vnd.in3d.spot spot -# text/vnd.iptc.newsml -# text/vnd.iptc.nitf -# text/vnd.latex-z -# text/vnd.motorola.reflex -# text/vnd.ms-mediapackage -# text/vnd.net2phone.commcenter.command -# text/vnd.si.uricatalogue -text/vnd.sun.j2me.app-descriptor jad -# text/vnd.trolltech.linguist -# text/vnd.wap.si -# text/vnd.wap.sl -text/vnd.wap.wml wml -text/vnd.wap.wmlscript wmls -text/x-asm s asm -text/x-c c cc cxx cpp h hh dic -text/x-fortran f for f77 f90 -text/x-java-source java -text/x-opml opml -text/x-pascal p pas -text/x-nfo nfo -text/x-setext etx -text/x-sfv sfv -text/x-uuencode uu -text/x-vcalendar vcs -text/x-vcard vcf -# text/xml -# text/xml-external-parsed-entity -# video/1d-interleaved-parityfec -video/3gpp 3gp -# video/3gpp-tt -video/3gpp2 3g2 -# video/bmpeg -# video/bt656 -# video/celb -# video/dv -# video/example -video/h261 h261 -video/h263 h263 -# video/h263-1998 -# video/h263-2000 -video/h264 h264 -# video/h264-rcdo -# video/h264-svc -video/jpeg jpgv -# video/jpeg2000 -video/jpm jpm jpgm -video/mj2 mj2 mjp2 -# video/mp1s -# video/mp2p -# video/mp2t -video/mp4 mp4 mp4v mpg4 -# video/mp4v-es -video/mpeg mpeg mpg mpe m1v m2v -# video/mpeg4-generic -# video/mpv -# video/nv -video/ogg ogv -# video/parityfec -# video/pointer -video/quicktime qt mov -# video/raw -# video/rtp-enc-aescm128 -# video/rtx -# video/smpte292m -# video/ulpfec -# video/vc1 -# video/vnd.cctv -video/vnd.dece.hd uvh uvvh -video/vnd.dece.mobile uvm uvvm -# video/vnd.dece.mp4 -video/vnd.dece.pd uvp uvvp -video/vnd.dece.sd uvs uvvs -video/vnd.dece.video uvv uvvv -# video/vnd.directv.mpeg -# video/vnd.directv.mpeg-tts -# video/vnd.dlna.mpeg-tts -video/vnd.dvb.file dvb -video/vnd.fvt fvt -# video/vnd.hns.video -# video/vnd.iptvforum.1dparityfec-1010 -# video/vnd.iptvforum.1dparityfec-2005 -# video/vnd.iptvforum.2dparityfec-1010 -# video/vnd.iptvforum.2dparityfec-2005 -# video/vnd.iptvforum.ttsavc -# video/vnd.iptvforum.ttsmpeg2 -# video/vnd.motorola.video -# video/vnd.motorola.videop -video/vnd.mpegurl mxu m4u -video/vnd.ms-playready.media.pyv pyv -# video/vnd.nokia.interleaved-multimedia -# video/vnd.nokia.videovoip -# video/vnd.objectvideo -# video/vnd.sealed.mpeg1 -# video/vnd.sealed.mpeg4 -# video/vnd.sealed.swf -# video/vnd.sealedmedia.softseal.mov -video/vnd.uvvu.mp4 uvu uvvu -video/vnd.vivo viv -video/webm webm -video/x-f4v f4v -video/x-fli fli -video/x-flv flv -video/x-m4v m4v -video/x-matroska mkv mk3d mks -video/x-mng mng -video/x-ms-asf asf asx -video/x-ms-vob vob -video/x-ms-wm wm -video/x-ms-wmv wmv -video/x-ms-wmx wmx -video/x-ms-wvx wvx -video/x-msvideo avi -video/x-sgi-movie movie -video/x-smv smv -x-conference/x-cooltalk ice diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/node.types b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/node.types deleted file mode 100644 index 55b2cf79..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/node.types +++ /dev/null @@ -1,77 +0,0 @@ -# What: WebVTT -# Why: To allow formats intended for marking up external text track resources. -# http://dev.w3.org/html5/webvtt/ -# Added by: niftylettuce -text/vtt vtt - -# What: Google Chrome Extension -# Why: To allow apps to (work) be served with the right content type header. -# http://codereview.chromium.org/2830017 -# Added by: niftylettuce -application/x-chrome-extension crx - -# What: HTC support -# Why: To properly render .htc files such as CSS3PIE -# Added by: niftylettuce -text/x-component htc - -# What: HTML5 application cache manifes ('.manifest' extension) -# Why: De-facto standard. Required by Mozilla browser when serving HTML5 apps -# per https://developer.mozilla.org/en/offline_resources_in_firefox -# Added by: louisremi -text/cache-manifest manifest - -# What: node binary buffer format -# Why: semi-standard extension w/in the node community -# Added by: tootallnate -application/octet-stream buffer - -# What: The "protected" MP-4 formats used by iTunes. -# Why: Required for streaming music to browsers (?) -# Added by: broofa -application/mp4 m4p -audio/mp4 m4a - -# What: Video format, Part of RFC1890 -# Why: See https://github.com/bentomas/node-mime/pull/6 -# Added by: mjrusso -video/MP2T ts - -# What: EventSource mime type -# Why: mime type of Server-Sent Events stream -# http://www.w3.org/TR/eventsource/#text-event-stream -# Added by: francois2metz -text/event-stream event-stream - -# What: Mozilla App manifest mime type -# Why: https://developer.mozilla.org/en/Apps/Manifest#Serving_manifests -# Added by: ednapiranha -application/x-web-app-manifest+json webapp - -# What: Lua file types -# Why: Googling around shows de-facto consensus on these -# Added by: creationix (Issue #45) -text/x-lua lua -application/x-lua-bytecode luac - -# What: Markdown files, as per http://daringfireball.net/projects/markdown/syntax -# Why: http://stackoverflow.com/questions/10701983/what-is-the-mime-type-for-markdown -# Added by: avoidwork -text/x-markdown markdown md mkd - -# What: ini files -# Why: because they're just text files -# Added by: Matthew Kastor -text/plain ini - -# What: DASH Adaptive Streaming manifest -# Why: https://developer.mozilla.org/en-US/docs/DASH_Adaptive_Streaming_for_HTML_5_Video -# Added by: eelcocramer -application/dash+xml mdp - -# What: OpenType font files - http://www.microsoft.com/typography/otspec/ -# Why: Browsers usually ignore the font MIME types and sniff the content, -# but Chrome, shows a warning if OpenType fonts aren't served with -# the `font/opentype` MIME type: http://i.imgur.com/8c5RN8M.png. -# Added by: alrra -font/opentype otf diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/.npmignore deleted file mode 100644 index fd4f2b06..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.DS_Store diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/LICENSE.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/LICENSE.md deleted file mode 100644 index f039427f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/LICENSE.md +++ /dev/null @@ -1,2 +0,0 @@ -Copyright (c) 2010-2012 Robert Kieffer -MIT License - http://opensource.org/licenses/mit-license.php diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/README.md deleted file mode 100644 index e436a89f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/README.md +++ /dev/null @@ -1,207 +0,0 @@ -# node-uuid - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Generate RFC4122 version 1 or version 4 UUIDs -* Runs in node.js and all browsers. -* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid'). -* Cryptographically strong random # generation on supporting platforms -* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! ) -* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html) - -## Getting Started - -Install it in your browser: - -```html -<script src="uuid.js"></script> -``` - -Or in node.js: - -``` -npm install node-uuid -``` - -```javascript -var uuid = require('node-uuid'); -``` - -Then create some ids ... - -```javascript -// Generate a v1 (time-based) id -uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - -// Generate a v4 (random) id -uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' -``` - -## API - -### uuid.v1([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Notes: - -1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v1({ - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -var arr = new Array(32); // -> [] -uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] - -// Optionally use uuid.unparse() to get stringify the ids -uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' -uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' -``` - -### uuid.v4([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v4({ - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" -``` - -Example: Generate two IDs in a single buffer - -```javascript -var buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); -``` - -### uuid.parse(id[, buffer[, offset]]) -### uuid.unparse(buffer[, offset]) - -Parse and unparse UUIDs - - * `id` - (String) UUID(-like) string - * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used - * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 - -Example parsing and unparsing a UUID string - -```javascript -var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10> -var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' -``` - -### uuid.noConflict() - -(Browsers only) Set `uuid` property back to it's previous value. - -Returns the node-uuid object. - -Example: - -```javascript -var myUuid = uuid.noConflict(); -myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' -``` - -## Deprecated APIs - -Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. - -### uuid([format [, buffer [, offset]]]) - -uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). - -### uuid.BufferClass - -The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API. - -## Testing - -In node.js - -``` -> cd test -> node test.js -``` - -In Browser - -``` -open test/test.html -``` - -### Benchmarking - -Requires node.js - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -For a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark) - -For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - -## Release notes - -### 1.4.0 - -* Improved module context detection -* Removed public RNG functions - -### 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - -### 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/README.md deleted file mode 100644 index aaeb2ea0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# node-uuid Benchmarks - -### Results - -To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark - -### Run them yourself - -node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. - -To prepare and run the benchmark issue; - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -You'll see an output like this one: - -``` -# v4 -nodeuuid.v4(): 854700 uuids/second -nodeuuid.v4('binary'): 788643 uuids/second -nodeuuid.v4('binary', buffer): 1336898 uuids/second -uuid(): 479386 uuids/second -uuid('binary'): 582072 uuids/second -uuidjs.create(4): 312304 uuids/second - -# v1 -nodeuuid.v1(): 938086 uuids/second -nodeuuid.v1('binary'): 683060 uuids/second -nodeuuid.v1('binary', buffer): 1644736 uuids/second -uuidjs.create(1): 190621 uuids/second -``` - -* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. -* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. - -If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: - -``` -for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; -``` - -If you're interested in how performance varies between different node versions, you can issue the above command multiple times. - -You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: - -``` -(cd benchmark/ && ./bench.sh) -``` - -This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu deleted file mode 100644 index a342fbbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu +++ /dev/null @@ -1,174 +0,0 @@ -#!/opt/local/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.4 patchlevel 3 -# last modified March 2011 -# System: Darwin 10.8.0 -# -# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 -# Thomas Williams, Colin Kelley and many others -# -# gnuplot home: http://www.gnuplot.info -# faq, bugs, etc: type "help seeking-assistance" -# immediate help: type "help" -# plot window: hit 'h' -set terminal postscript eps noenhanced defaultplex \ - leveldefault color colortext \ - solid linewidth 1.2 butt noclip \ - palfuncparam 2000,0.003 \ - "Helvetica" 14 -set output 'bench.eps' -unset clip points -set clip one -unset clip two -set bar 1.000000 front -set border 31 front linetype -1 linewidth 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 -set style circle radius graph 0.02, first 0, 0 -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 -set key maxcolumns 2 maxrows 0 -unset label -unset arrow -set style increment default -unset style line -set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 -unset style arrow -set style histogram clustered gap 2 title offset character 0, 0, 0 -unset logscale -set offsets graph 0.05, 0.15, 0, 0 -set pointsize 1.5 -set pointintervalbox 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -unset hidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data points -set style function lines -set xzeroaxis linetype -2 linewidth 1.000 -set yzeroaxis linetype -2 linewidth 1.000 -set zzeroaxis linetype -2 linewidth 1.000 -set x2zeroaxis linetype -2 linewidth 1.000 -set y2zeroaxis linetype -2 linewidth 1.000 -set ticslevel 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set xtics norangelimit -set xtics () -set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set ytics autofreq norangelimit -set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 -set ztics autofreq norangelimit -set nox2tics -set noy2tics -set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set cbtics autofreq norangelimit -set title "" -set title offset character 0, 0, 0 font "" norotate -set timestamp bottom -set timestamp "" -set timestamp offset character 0, 0, 0 font "" norotate -set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale rfixmin -set autoscale rfixmax -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set autoscale tfixmin -set autoscale tfixmax -set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale ufixmin -set autoscale ufixmax -set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale vfixmin -set autoscale vfixmax -set xlabel "" -set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set x2label "" -set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate -set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) -set autoscale xfixmin -set autoscale xfixmax -set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) -set autoscale x2fixmin -set autoscale x2fixmax -set ylabel "" -set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set y2label "" -set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) -set autoscale yfixmin -set autoscale yfixmax -set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) -set autoscale y2fixmin -set autoscale y2fixmax -set zlabel "" -set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale zfixmin -set autoscale zfixmax -set cblabel "" -set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale cbfixmin -set autoscale cbfixmax -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set pm3d explicit at s -set pm3d scansautomatic -set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault -set loadpath -set fontpath -set fit noerrorvariables -GNUTERM = "aqua" -plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 -# EOF diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.sh deleted file mode 100755 index d870a0cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# for a given node version run: -# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; - -PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte') -FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es) -INDICES=(2 3 2 3 2 2 2 2 2) -VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) -TMPJOIN="tmp_join" -OUTPUT="bench_results.txt" - -for I in ${!FILES[*]}; do - F=${FILES[$I]} - P=${PATTERNS[$I]} - INDEX=${INDICES[$I]} - echo "version $F" > $F - for V in $VERSIONS; do - (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F - done - if [ $I == 0 ]; then - cat $F > $TMPJOIN - else - join $TMPJOIN $F > $OUTPUT - cp $OUTPUT $TMPJOIN - fi - rm $F -done - -rm $TMPJOIN - -gnuplot bench.gnu -convert -density 200 -resize 800x560 -flatten bench.eps bench.png -rm bench.eps diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c deleted file mode 100644 index dbfc75f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include <stdio.h> -#include <unistd.h> -#include <sys/time.h> -#include <uuid/uuid.h> - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js deleted file mode 100644 index 40e6efbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js +++ /dev/null @@ -1,84 +0,0 @@ -try { - var nodeuuid = require('../uuid'); -} catch (e) { - console.error('node-uuid require failed - skipping tests'); -} - -try { - var uuid = require('uuid'); -} catch (e) { - console.error('uuid require failed - skipping tests'); -} - -try { - var uuidjs = require('uuid-js'); -} catch (e) { - console.error('uuid-js require failed - skipping tests'); -} - -var N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -console.log('# v4'); - -// node-uuid - string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); - rate('nodeuuid.v4() - using node.js crypto RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG}); - rate('nodeuuid.v4() - using Math.random() RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); - rate('nodeuuid.v4(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); - rate('nodeuuid.v4(\'binary\', buffer)', t); -} - -// libuuid - string form -if (uuid) { - for (var i = 0, t = Date.now(); i < N; i++) uuid(); - rate('uuid()', t); - - for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); - rate('uuid(\'binary\')', t); -} - -// uuid-js - string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); - rate('uuidjs.create(4)', t); -} - -// 140byte.es -for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)}); -rate('140byte.es_v4', t); - -console.log(''); -console.log('# v1'); - -// node-uuid - v1 string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); - rate('nodeuuid.v1()', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); - rate('nodeuuid.v1(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); - rate('nodeuuid.v1(\'binary\', buffer)', t); -} - -// uuid-js - v1 string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); - rate('uuidjs.create(1)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/component.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/component.json deleted file mode 100644 index ace21348..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/component.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "node-uuid", - "repo": "broofa/node-uuid", - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "version": "1.4.0", - "author": "Robert Kieffer <robert@broofa.com>", - "contributors": [ - {"name": "Christoph Tavan <dev@tavan.de>", "github": "https://github.com/ctavan"} - ], - "keywords": ["uuid", "guid", "rfc4122"], - "dependencies": {}, - "development": {}, - "main": "uuid.js", - "scripts": [ - "uuid.js" - ], - "license": "MIT" -} \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/package.json deleted file mode 100644 index e6f518be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "node-uuid", - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "url": "http://github.com/broofa/node-uuid", - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com" - }, - "contributors": [ - { - "name": "Christoph Tavan", - "email": "dev@tavan.de" - } - ], - "lib": ".", - "main": "./uuid.js", - "repository": { - "type": "git", - "url": "https://github.com/broofa/node-uuid.git" - }, - "version": "1.4.1", - "readme": "# node-uuid\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid').\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src=\"uuid.js\"></script>\n```\n\nOr in node.js:\n\n```\nnpm install node-uuid\n```\n\n```javascript\nvar uuid = require('node-uuid');\n```\n\nThen create some ids ...\n\n```javascript\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the node-uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/broofa/node-uuid/issues" - }, - "homepage": "https://github.com/broofa/node-uuid", - "_id": "node-uuid@1.4.1", - "dist": { - "shasum": "e937c5cdd70594274f11a11d3ae751f5c5857c73" - }, - "_from": "node-uuid@~1.4.0", - "_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/compare_v1.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/compare_v1.js deleted file mode 100644 index 05af8221..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/compare_v1.js +++ /dev/null @@ -1,63 +0,0 @@ -var assert = require('assert'), - nodeuuid = require('../uuid'), - uuidjs = require('uuid-js'), - libuuid = require('uuid').generate, - util = require('util'), - exec = require('child_process').exec, - os = require('os'); - -// On Mac Os X / macports there's only the ossp-uuid package that provides uuid -// On Linux there's uuid-runtime which provides uuidgen -var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t'; - -function compare(ids) { - console.log(ids); - for (var i = 0; i < ids.length; i++) { - var id = ids[i].split('-'); - id = [id[2], id[1], id[0]].join(''); - ids[i] = id; - } - var sorted = ([].concat(ids)).sort(); - - if (sorted.toString() !== ids.toString()) { - console.log('Warning: sorted !== ids'); - } else { - console.log('everything in order!'); - } -} - -// Test time order of v1 uuids -var ids = []; -while (ids.length < 10e3) ids.push(nodeuuid.v1()); - -var max = 10; -console.log('node-uuid:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(nodeuuid.v1()); -compare(ids); - -console.log(''); -console.log('uuidjs:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString()); -compare(ids); - -console.log(''); -console.log('libuuid:'); -ids = []; -var count = 0; -var last = function() { - compare(ids); -} -var cb = function(err, stdout, stderr) { - ids.push(stdout.substring(0, stdout.length-1)); - count++; - if (count < max) { - return next(); - } - last(); -}; -var next = function() { - exec(uuidCmd, cb); -}; -next(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.html b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.html deleted file mode 100644 index d80326ec..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.html +++ /dev/null @@ -1,17 +0,0 @@ -<html> - <head> - <style> - div { - font-family: monospace; - font-size: 8pt; - } - div.log {color: #444;} - div.warn {color: #550;} - div.error {color: #800; font-weight: bold;} - </style> - <script src="../uuid.js"></script> - </head> - <body> - <script src="./test.js"></script> - </body> -</html> diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.js deleted file mode 100644 index 24692256..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.js +++ /dev/null @@ -1,228 +0,0 @@ -if (!this.uuid) { - // node.js - uuid = require('../uuid'); -} - -// -// x-platform log/assert shims -// - -function _log(msg, type) { - type = type || 'log'; - - if (typeof(document) != 'undefined') { - document.write('<div class="' + type + '">' + msg.replace(/\n/g, '<br />') + '</div>'); - } - if (typeof(console) != 'undefined') { - var color = { - log: '\033[39m', - warn: '\033[33m', - error: '\033[31m' - }; - console[type](color[type] + msg + color.log); - } -} - -function log(msg) {_log(msg, 'log');} -function warn(msg) {_log(msg, 'warn');} -function error(msg) {_log(msg, 'error');} - -function assert(res, msg) { - if (!res) { - error('FAIL: ' + msg); - } else { - log('Pass: ' + msg); - } -} - -// -// Unit tests -// - -// Verify ordering of v1 ids created with explicit times -var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 - -function compare(name, ids) { - ids = ids.map(function(id) { - return id.split('-').reverse().join('-'); - }).sort(); - var sorted = ([].concat(ids)).sort(); - - assert(sorted.toString() == ids.toString(), name + ' have expected order'); -} - -// Verify ordering of v1 ids created using default behavior -compare('uuids with current time', [ - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1() -]); - -// Verify ordering of v1 ids created with explicit times -compare('uuids with time option', [ - uuid.v1({msecs: TIME - 10*3600*1000}), - uuid.v1({msecs: TIME - 1}), - uuid.v1({msecs: TIME}), - uuid.v1({msecs: TIME + 1}), - uuid.v1({msecs: TIME + 28*24*3600*1000}) -]); - -assert( - uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}), - 'IDs created at same msec are different' -); - -// Verify throw if too many ids created -var thrown = false; -try { - uuid.v1({msecs: TIME, nsecs: 10000}); -} catch (e) { - thrown = true; -} -assert(thrown, 'Exception thrown when > 10K ids created in 1 ms'); - -// Verify clock regression bumps clockseq -var uidt = uuid.v1({msecs: TIME}); -var uidtb = uuid.v1({msecs: TIME - 1}); -assert( - parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq' -); - -// Verify clock regression bumps clockseq -var uidtn = uuid.v1({msecs: TIME, nsecs: 10}); -var uidtnb = uuid.v1({msecs: TIME, nsecs: 9}); -assert( - parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq' -); - -// Verify explicit options produce expected id -var id = uuid.v1({ - msecs: 1321651533573, - nsecs: 5432, - clockseq: 0x385c, - node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ] -}); -assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); - -// Verify adjacent ids across a msec boundary are 1 time unit apart -var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); -var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - -var before = u0.split('-')[0], after = u1.split('-')[0]; -var dt = parseInt(after, 16) - parseInt(before, 16); -assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); - -// -// Test parse/unparse -// - -id = '00112233445566778899aabbccddeeff'; -assert(uuid.unparse(uuid.parse(id.substr(0,10))) == - '00112233-4400-0000-0000-000000000000', 'Short parse'); -assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) == - '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse'); - -// -// Perf tests -// - -var generators = { - v1: uuid.v1, - v4: uuid.v4 -}; - -var UUID_FORMAT = { - v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i, - v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i -}; - -var N = 1e4; - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second'); -} - -for (var version in generators) { - var counts = {}, max = 0; - var generator = generators[version]; - var format = UUID_FORMAT[version]; - - log('\nSanity check ' + N + ' ' + version + ' uuids'); - for (var i = 0, ok = 0; i < N; i++) { - id = generator(); - if (!format.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - assert(fail, id + ' is not a valid id'); - } - - // Count digits for our randomness check - if (version == 'v4') { - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } - } - } - - // Check randomness for v4 UUIDs - if (version == 'v4') { - // Limit that we get worried about randomness. (Purely empirical choice, this!) - var limit = 2*100*Math.sqrt(1/N); - - log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)'); - - for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)'); - } - } -} - -// Perf tests -for (var version in generators) { - log('\nPerformance testing ' + version + ' UUIDs'); - var generator = generators[version]; - var buf = new uuid.BufferClass(16); - - for (var i = 0, t = Date.now(); i < N; i++) generator(); - rate('uuid.' + version + '()', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary'); - rate('uuid.' + version + '(\'binary\')', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf); - rate('uuid.' + version + '(\'binary\', buffer)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/uuid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/uuid.js deleted file mode 100644 index 2fac6dc4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/uuid.js +++ /dev/null @@ -1,245 +0,0 @@ -// uuid.js -// -// Copyright (c) 2010-2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -(function() { - var _global = this; - - // Unique ID creation requires a high quality random # generator. We feature - // detect to determine the best RNG source, normalizing to a function that - // returns 128-bits of randomness, since that's what's usually required - var _rng; - - // Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html - // - // Moderately fast, high quality - if (typeof(require) == 'function') { - try { - var _rb = require('crypto').randomBytes; - _rng = _rb && function() {return _rb(16);}; - } catch(e) {} - } - - if (!_rng && _global.crypto && crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // - // Moderately fast, high quality - var _rnds8 = new Uint8Array(16); - _rng = function whatwgRNG() { - crypto.getRandomValues(_rnds8); - return _rnds8; - }; - } - - if (!_rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - _rng = function() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return _rnds; - }; - } - - // Buffer class to use - var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array; - - // Maps for number <-> hex string conversion - var _byteToHex = []; - var _hexToByte = {}; - for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; - } - - // **`parse()` - Parse a UUID into it's component bytes** - function parse(s, buf, offset) { - var i = (buf && offset) || 0, ii = 0; - - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) { - if (ii < 16) { // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); - - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; - } - - return buf; - } - - // **`unparse()` - Convert UUID byte array (ala parse()) into a string** - function unparse(buf, offset) { - var i = offset || 0, bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]]; - } - - // **`v1()` - Generate time-based UUID** - // - // Inspired by https://github.com/LiosK/UUID.js - // and http://docs.python.org/library/uuid.html - - // random #'s we need to init node and clockseq - var _seedBytes = _rng(); - - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] - ]; - - // Per 4.2.2, randomize (14 bit) clockseq - var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; - - // Previous uuid creation time - var _lastMSecs = 0, _lastNSecs = 0; - - // See https://github.com/broofa/node-uuid for API details - function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - - var clockseq = options.clockseq != null ? options.clockseq : _clockseq; - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs != null ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs != null ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq == null) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; - } - - return buf ? buf : unparse(b); - } - - // **`v4()` - Generate random UUID** - - // See https://github.com/broofa/node-uuid for API details - function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options == 'binary' ? new BufferClass(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || _rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || unparse(rnds); - } - - // Export public API - var uuid = v4; - uuid.v1 = v1; - uuid.v4 = v4; - uuid.parse = parse; - uuid.unparse = unparse; - uuid.BufferClass = BufferClass; - - if (typeof define === 'function' && define.amd) { - // Publish as AMD module - define(function() {return uuid;}); - } else if (typeof(module) != 'undefined' && module.exports) { - // Publish as node.js module - module.exports = uuid; - } else { - // Publish as global (in browsers) - var _previousRoot = _global.uuid; - - // **`noConflict()` - (browser only) to reset global 'uuid' var** - uuid.noConflict = function() { - _global.uuid = _previousRoot; - return uuid; - }; - - _global.uuid = uuid; - } -}).call(this); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/README.md deleted file mode 100644 index 34c4a85d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/README.md +++ /dev/null @@ -1,4 +0,0 @@ -oauth-sign -========== - -OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/index.js deleted file mode 100644 index e35bfa67..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/index.js +++ /dev/null @@ -1,43 +0,0 @@ -var crypto = require('crypto') - , qs = require('querystring') - ; - -function sha1 (key, body) { - return crypto.createHmac('sha1', key).update(body).digest('base64') -} - -function rfc3986 (str) { - return encodeURIComponent(str) - .replace(/!/g,'%21') - .replace(/\*/g,'%2A') - .replace(/\(/g,'%28') - .replace(/\)/g,'%29') - .replace(/'/g,'%27') - ; -} - -function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) { - // adapted from https://dev.twitter.com/docs/auth/oauth and - // https://dev.twitter.com/docs/auth/creating-signature - - var querystring = Object.keys(params).sort().map(function(key){ - // big WTF here with the escape + encoding but it's what twitter wants - return escape(rfc3986(key)) + "%3D" + escape(rfc3986(params[key])) - }).join('%26') - - var base = [ - httpMethod ? httpMethod.toUpperCase() : 'GET', - rfc3986(base_uri), - querystring - ].join('&') - - var key = [ - consumer_secret, - token_secret || '' - ].map(rfc3986).join('&') - - return sha1(key, base) -} - -exports.hmacsign = hmacsign -exports.rfc3986 = rfc3986 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/package.json deleted file mode 100644 index abc9d21d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "oauth-sign", - "description": "OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module.", - "version": "0.3.0", - "repository": { - "url": "https://github.com/mikeal/oauth-sign" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "scripts": { - "test": "node test.js" - }, - "readme": "oauth-sign\n==========\n\nOAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. \n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/oauth-sign/issues" - }, - "homepage": "https://github.com/mikeal/oauth-sign", - "_id": "oauth-sign@0.3.0", - "dist": { - "shasum": "cb540f93bb2b22a7d5941691a288d60e8ea9386e" - }, - "_from": "oauth-sign@~0.3.0", - "_resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/test.js deleted file mode 100644 index 46955ff6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/test.js +++ /dev/null @@ -1,49 +0,0 @@ -var hmacsign = require('./index').hmacsign - , assert = require('assert') - , qs = require('querystring') - ; - -// Tests from Twitter documentation https://dev.twitter.com/docs/auth/oauth - -var reqsign = hmacsign('POST', 'https://api.twitter.com/oauth/request_token', - { oauth_callback: 'http://localhost:3005/the_dance/process_callback?service_provider_id=11' - , oauth_consumer_key: 'GDdmIQH6jhtmLUypg82g' - , oauth_nonce: 'QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk' - , oauth_signature_method: 'HMAC-SHA1' - , oauth_timestamp: '1272323042' - , oauth_version: '1.0' - }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98") - -console.log(reqsign) -console.log('8wUi7m5HFQy76nowoCThusfgB+Q=') -assert.equal(reqsign, '8wUi7m5HFQy76nowoCThusfgB+Q=') - -var accsign = hmacsign('POST', 'https://api.twitter.com/oauth/access_token', - { oauth_consumer_key: 'GDdmIQH6jhtmLUypg82g' - , oauth_nonce: '9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8' - , oauth_signature_method: 'HMAC-SHA1' - , oauth_token: '8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc' - , oauth_timestamp: '1272323047' - , oauth_verifier: 'pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY' - , oauth_version: '1.0' - }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98", "x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA") - -console.log(accsign) -console.log('PUw/dHA4fnlJYM6RhXk5IU/0fCc=') -assert.equal(accsign, 'PUw/dHA4fnlJYM6RhXk5IU/0fCc=') - -var upsign = hmacsign('POST', 'http://api.twitter.com/1/statuses/update.json', - { oauth_consumer_key: "GDdmIQH6jhtmLUypg82g" - , oauth_nonce: "oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y" - , oauth_signature_method: "HMAC-SHA1" - , oauth_token: "819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw" - , oauth_timestamp: "1272325550" - , oauth_version: "1.0" - , status: 'setting up my twitter 私のさえずりを設定する' - }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98", "J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA") - -console.log(upsign) -console.log('yOahq5m0YjDDjfjxHaXEsW9D+X0=') -assert.equal(upsign, 'yOahq5m0YjDDjfjxHaXEsW9D+X0=') - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.gitmodules b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.gitmodules deleted file mode 100644 index 49e31dac..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "support/expresso"] - path = support/expresso - url = git://github.com/visionmedia/expresso.git -[submodule "support/should"] - path = support/should - url = git://github.com/visionmedia/should.js.git diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.npmignore deleted file mode 100644 index e85ce2af..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -test -.travis.yml -benchmark.js -component.json -examples.js -History.md -Makefile diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/Readme.md deleted file mode 100644 index 27e54a4a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/Readme.md +++ /dev/null @@ -1,58 +0,0 @@ -# node-querystring - - query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others. - -## Installation - - $ npm install qs - -## Examples - -```js -var qs = require('qs'); - -qs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com'); -// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } } - -qs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }}) -// => user[name]=Tobi&user[email]=tobi%40learnboost.com -``` - -## Testing - -Install dev dependencies: - - $ npm install -d - -and execute: - - $ make test - -browser: - - $ open test/browser/index.html - -## License - -(The MIT License) - -Copyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca> - -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/index.js deleted file mode 100644 index b05938ac..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/index.js +++ /dev/null @@ -1,366 +0,0 @@ -/** - * Object#toString() ref for stringify(). - */ - -var toString = Object.prototype.toString; - -/** - * Object#hasOwnProperty ref - */ - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * Array#indexOf shim. - */ - -var indexOf = typeof Array.prototype.indexOf === 'function' - ? function(arr, el) { return arr.indexOf(el); } - : function(arr, el) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === el) return i; - } - return -1; - }; - -/** - * Array.isArray shim. - */ - -var isArray = Array.isArray || function(arr) { - return toString.call(arr) == '[object Array]'; -}; - -/** - * Object.keys shim. - */ - -var objectKeys = Object.keys || function(obj) { - var ret = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - ret.push(key); - } - } - return ret; -}; - -/** - * Array#forEach shim. - */ - -var forEach = typeof Array.prototype.forEach === 'function' - ? function(arr, fn) { return arr.forEach(fn); } - : function(arr, fn) { - for (var i = 0; i < arr.length; i++) fn(arr[i]); - }; - -/** - * Array#reduce shim. - */ - -var reduce = function(arr, fn, initial) { - if (typeof arr.reduce === 'function') return arr.reduce(fn, initial); - var res = initial; - for (var i = 0; i < arr.length; i++) res = fn(res, arr[i]); - return res; -}; - -/** - * Cache non-integer test regexp. - */ - -var isint = /^[0-9]+$/; - -function promote(parent, key) { - if (parent[key].length == 0) return parent[key] = {} - var t = {}; - for (var i in parent[key]) { - if (hasOwnProperty.call(parent[key], i)) { - t[i] = parent[key][i]; - } - } - parent[key] = t; - return t; -} - -function parse(parts, parent, key, val) { - var part = parts.shift(); - - // illegal - if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return; - - // end - if (!part) { - if (isArray(parent[key])) { - parent[key].push(val); - } else if ('object' == typeof parent[key]) { - parent[key] = val; - } else if ('undefined' == typeof parent[key]) { - parent[key] = val; - } else { - parent[key] = [parent[key], val]; - } - // array - } else { - var obj = parent[key] = parent[key] || []; - if (']' == part) { - if (isArray(obj)) { - if ('' != val) obj.push(val); - } else if ('object' == typeof obj) { - obj[objectKeys(obj).length] = val; - } else { - obj = parent[key] = [parent[key], val]; - } - // prop - } else if (~indexOf(part, ']')) { - part = part.substr(0, part.length - 1); - if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - // key - } else { - if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - } - } -} - -/** - * Merge parent key/val pair. - */ - -function merge(parent, key, val){ - if (~indexOf(key, ']')) { - var parts = key.split('[') - , len = parts.length - , last = len - 1; - parse(parts, parent, 'base', val); - // optimize - } else { - if (!isint.test(key) && isArray(parent.base)) { - var t = {}; - for (var k in parent.base) t[k] = parent.base[k]; - parent.base = t; - } - set(parent.base, key, val); - } - - return parent; -} - -/** - * Compact sparse arrays. - */ - -function compact(obj) { - if ('object' != typeof obj) return obj; - - if (isArray(obj)) { - var ret = []; - - for (var i in obj) { - if (hasOwnProperty.call(obj, i)) { - ret.push(obj[i]); - } - } - - return ret; - } - - for (var key in obj) { - obj[key] = compact(obj[key]); - } - - return obj; -} - -/** - * Parse the given obj. - */ - -function parseObject(obj){ - var ret = { base: {} }; - - forEach(objectKeys(obj), function(name){ - merge(ret, name, obj[name]); - }); - - return compact(ret.base); -} - -/** - * Parse the given str. - */ - -function parseString(str){ - var ret = reduce(String(str).split('&'), function(ret, pair){ - var eql = indexOf(pair, '=') - , brace = lastBraceInKey(pair) - , key = pair.substr(0, brace || eql) - , val = pair.substr(brace || eql, pair.length) - , val = val.substr(indexOf(val, '=') + 1, val.length); - - // ?foo - if ('' == key) key = pair, val = ''; - if ('' == key) return ret; - - return merge(ret, decode(key), decode(val)); - }, { base: {} }).base; - - return compact(ret); -} - -/** - * Parse the given query `str` or `obj`, returning an object. - * - * @param {String} str | {Object} obj - * @return {Object} - * @api public - */ - -exports.parse = function(str){ - if (null == str || '' == str) return {}; - return 'object' == typeof str - ? parseObject(str) - : parseString(str); -}; - -/** - * Turn the given `obj` into a query string - * - * @param {Object} obj - * @return {String} - * @api public - */ - -var stringify = exports.stringify = function(obj, prefix) { - if (isArray(obj)) { - return stringifyArray(obj, prefix); - } else if ('[object Object]' == toString.call(obj)) { - return stringifyObject(obj, prefix); - } else if ('string' == typeof obj) { - return stringifyString(obj, prefix); - } else { - return prefix + '=' + encodeURIComponent(String(obj)); - } -}; - -/** - * Stringify the given `str`. - * - * @param {String} str - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyString(str, prefix) { - if (!prefix) throw new TypeError('stringify expects an object'); - return prefix + '=' + encodeURIComponent(str); -} - -/** - * Stringify the given `arr`. - * - * @param {Array} arr - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyArray(arr, prefix) { - var ret = []; - if (!prefix) throw new TypeError('stringify expects an object'); - for (var i = 0; i < arr.length; i++) { - ret.push(stringify(arr[i], prefix + '[' + i + ']')); - } - return ret.join('&'); -} - -/** - * Stringify the given `obj`. - * - * @param {Object} obj - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyObject(obj, prefix) { - var ret = [] - , keys = objectKeys(obj) - , key; - - for (var i = 0, len = keys.length; i < len; ++i) { - key = keys[i]; - if ('' == key) continue; - if (null == obj[key]) { - ret.push(encodeURIComponent(key) + '='); - } else { - ret.push(stringify(obj[key], prefix - ? prefix + '[' + encodeURIComponent(key) + ']' - : encodeURIComponent(key))); - } - } - - return ret.join('&'); -} - -/** - * Set `obj`'s `key` to `val` respecting - * the weird and wonderful syntax of a qs, - * where "foo=bar&foo=baz" becomes an array. - * - * @param {Object} obj - * @param {String} key - * @param {String} val - * @api private - */ - -function set(obj, key, val) { - var v = obj[key]; - if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return; - if (undefined === v) { - obj[key] = val; - } else if (isArray(v)) { - v.push(val); - } else { - obj[key] = [v, val]; - } -} - -/** - * Locate last brace in `str` within the key. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function lastBraceInKey(str) { - var len = str.length - , brace - , c; - for (var i = 0; i < len; ++i) { - c = str[i]; - if (']' == c) brace = false; - if ('[' == c) brace = true; - if ('=' == c && !brace) return i; - } -} - -/** - * Decode `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -function decode(str) { - try { - return decodeURIComponent(str.replace(/\+/g, ' ')); - } catch (err) { - return str; - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/package.json deleted file mode 100644 index 313485c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "qs", - "description": "querystring parser", - "version": "0.6.6", - "keywords": [ - "query string", - "parser", - "component" - ], - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/node-querystring.git" - }, - "devDependencies": { - "mocha": "*", - "expect.js": "*" - }, - "scripts": { - "test": "make test" - }, - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "main": "index", - "engines": { - "node": "*" - }, - "readme": "# node-querystring\n\n query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others.\n\n## Installation\n\n $ npm install qs\n\n## Examples\n\n```js\nvar qs = require('qs');\n\nqs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com');\n// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } }\n\nqs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }})\n// => user[name]=Tobi&user[email]=tobi%40learnboost.com\n```\n\n## Testing\n\nInstall dev dependencies:\n\n $ npm install -d\n\nand execute:\n\n $ make test\n\nbrowser:\n\n $ open test/browser/index.html\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/node-querystring/issues" - }, - "homepage": "https://github.com/visionmedia/node-querystring", - "_id": "qs@0.6.6", - "_from": "qs@~0.6.0" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.jshintrc b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.jshintrc deleted file mode 100644 index 8fcead4f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.jshintrc +++ /dev/null @@ -1,72 +0,0 @@ -{ - // Settings - "passfail" : false, // Stop on first error. - "maxerr" : 100, // Maximum error before stopping. - - - // Predefined globals whom JSHint will ignore. - "browser" : false, // Standard browser globals e.g. `window`, `document`. - "node" : true, - "rhino" : false, - "couch" : false, - "wsh" : false, // Windows Scripting Host. - - "jquery" : false, - "prototypejs" : false, - "mootools" : false, - "dojo" : false, - - "predef" : [ // Custom globals. - "escape", "unescape" // aren't picked up by node flag above :/ - ], - - - // Development. - "debug" : false, // Allow debugger statements e.g. browser breakpoints. - "devel" : false, // Allow developments statements e.g. `console.log();`. - - - // EcmaScript 5. - "es5" : true, // Allow EcmaScript 5 syntax. - "esnext" : true, // Allow ES "next" syntax, specifically 'const' (V8 has this) - "strict" : false, // Require `use strict` pragma in every file. - "globalstrict" : false, // Allow global "use strict" (also enables 'strict'). - - - // The Good Parts. - "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons). - "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. - "bitwise" : true, // Prohibit bitwise operators (&, |, ^, etc.). - "boss" : false, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. - "curly" : false, // Require {} for every new block or scope. - "eqeqeq" : false, // Require triple equals i.e. `===`. - "eqnull" : true, // Tolerate use of `== null`. - "evil" : false, // Tolerate use of `eval`. - "expr" : true, // Tolerate `ExpressionStatement` as Programs. - "forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`. - "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` - "latedef" : false, // Prohibit variable use before definition. - "loopfunc" : false, // Allow functions to be defined within loops. - "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. - "regexp" : true, // Prohibit `.` and `[^...]` in regular expressions. - "regexdash" : false, // Tolerate unescaped last dash i.e. `[-...]`. - "scripturl" : true, // Tolerate script-targeted URLs. - "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. - "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. - "undef" : true, // Require all non-global variables be declared before they are used. - - - // Personal styling prefrences. - "lastsemic" : true, // Prohibit missing semicolon for the last statement in a one-line block - "newcap" : false, // Require capitalization of all constructor functions e.g. `new F()`. - "noempty" : true, // Prohipit use of empty blocks. - "nonew" : true, // Prohibit use of constructors for side-effects. - "nomen" : false, // Prohibit use of initial or trailing underbars in names. - "onevar" : false, // Allow only one `var` statement per function. - "onecase" : false, // Allow switches with one case statement - "plusplus" : false, // Prohibit use of `++` & `--`. - "proto" : false, // Allow use of __proto__ - "sub" : true, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. - "trailing" : true, // Prohibit trailing whitespaces. - "white" : false // Check against strict whitespace and indentation rules. -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.npmignore deleted file mode 100644 index 54efff98..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -.*.sw[nmop] -npm-debug.log diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/LICENSE deleted file mode 100644 index 3fac4c85..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/LICENSE +++ /dev/null @@ -1,78 +0,0 @@ -Copyright GoInstant, Inc. and other contributors. 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. - -The following exceptions apply: - -=== - -`pubSufTest()` of generate-pubsuffix.js is in the public domain. - - // Any copyright is dedicated to the Public Domain. - // http://creativecommons.org/publicdomain/zero/1.0/ - -=== - -`public-suffix.txt` was obtained from -<https://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1> -via <http://publicsuffix.org>. - -That file contains the usual Mozilla triple-license, for which this project uses it -under the terms of the MPL 1.1: - - // ***** BEGIN LICENSE BLOCK ***** - // Version: MPL 1.1/GPL 2.0/LGPL 2.1 - // - // The contents of this file are subject to the Mozilla Public License Version - // 1.1 (the "License"); you may not use this file except in compliance with - // the License. You may obtain a copy of the License at - // http://www.mozilla.org/MPL/ - // - // Software distributed under the License is distributed on an "AS IS" basis, - // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - // for the specific language governing rights and limitations under the - // License. - // - // The Original Code is the Public Suffix List. - // - // The Initial Developer of the Original Code is - // Jo Hermans <jo.hermans@gmail.com>. - // Portions created by the Initial Developer are Copyright (C) 2007 - // the Initial Developer. All Rights Reserved. - // - // Contributor(s): - // Ruben Arakelyan <ruben@rubenarakelyan.com> - // Gervase Markham <gerv@gerv.net> - // Pamela Greene <pamg.bugs@gmail.com> - // David Triendl <david@triendl.name> - // Jothan Frakes <jothan@gmail.com> - // The kind representatives of many TLD registries - // - // Alternatively, the contents of this file may be used under the terms of - // either the GNU General Public License Version 2 or later (the "GPL"), or - // the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - // in which case the provisions of the GPL or the LGPL are applicable instead - // of those above. If you wish to allow use of your version of this file only - // under the terms of either the GPL or the LGPL, and not to allow others to - // use your version of this file under the terms of the MPL, indicate your - // decision by deleting the provisions above and replace them with the notice - // and other provisions required by the GPL or the LGPL. If you do not delete - // the provisions above, a recipient may use your version of this file under - // the terms of any one of the MPL, the GPL or the LGPL. - // - // ***** END LICENSE BLOCK ***** diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/README.md deleted file mode 100644 index fd1dbb1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/README.md +++ /dev/null @@ -1,380 +0,0 @@ -[RFC6265](http://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js - -![Tough Cookie](http://www.goinstant.com.s3.amazonaws.com/tough-cookie.jpg) - -# Synopsis - -``` javascript -var cookies = require('tough-cookie'); // note: not 'cookie', 'cookies' or 'node-cookie' -var Cookie = cookies.Cookie; -var cookie = Cookie.parse(header); -cookie.value = 'somethingdifferent'; -header = cookie.toString(); - -var cookiejar = new cookies.CookieJar(); -cookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb); -// ... -cookiejar.getCookies('http://example.com/otherpath',function(err,cookies) { - res.headers['cookie'] = cookies.join('; '); -}); -``` - -# Installation - -It's _so_ easy! - -`npm install tough-cookie` - -Requires `punycode`, which should get installed automatically for you. Note that node.js v0.6.2+ bundles punycode by default. - -Why the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken. - -# API - -cookies -======= - -Functions on the module you get from `require('tough-cookie')`. All can be used as pure functions and don't need to be "bound". - -parseDate(string[,strict]) ------------------ - -Parse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`. If strict is set to true then leading/trailing non-seperator characters around the time part will cause the parsing to fail (e.g. "Thu, 01 Jan 1970 00:00:010 GMT" has an extra trailing zero but Chrome, an assumedly RFC-compliant browser, treats this as valid). - -formatDate(date) ----------------- - -Format a Date into a RFC1123 string (the RFC6265-recommended format). - -canonicalDomain(str) --------------------- - -Transforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects). - -domainMatch(str,domStr[,canonicalize=true]) -------------------------------------------- - -Answers "does this real domain match the domain in a cookie?". The `str` is the "current" domain-name and the `domStr` is the "cookie" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a "suffix match". - -The `canonicalize` parameter will run the other two paramters through `canonicalDomain` or not. - -defaultPath(path) ------------------ - -Given a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the "directory" of a "file" in the path, but is specified by Section 5.1.4 of the RFC. - -The `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node's `uri.parse()` output. - -pathMatch(reqPath,cookiePath) ------------------------------ - -Answers "does the request-path path-match a given cookie-path?" as per RFC6265 Section 5.1.4. Returns a boolean. - -This is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`. - -parse(header[,strict=false]) ----------------------------- - -alias for `Cookie.parse(header[,strict])` - -fromJSON(string) ----------------- - -alias for `Cookie.fromJSON(string)` - -getPublicSuffix(hostname) -------------------------- - -Returns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it. - -For example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`. - -For further information, see http://publicsuffix.org/. This module derives its list from that site. - -cookieCompare(a,b) ------------------- - -For use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). Longest `.path`s go first, then sorted oldest to youngest. - -``` javascript -var cookies = [ /* unsorted array of Cookie objects */ ]; -cookies = cookies.sort(cookieCompare); -``` - -permuteDomain(domain) ---------------------- - -Generates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores. - - -permutePath(path) ------------------ - -Generates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores. - -Cookie -====== - -Cookie.parse(header[,strict=false]) ------------------------------------ - -Parses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can't be parsed. If in strict mode, returns `undefined` if the cookie doesn't follow the guidelines in section 4 of RFC6265. Generally speaking, strict mode can be used to validate your own generated Set-Cookie headers, but acting as a client you want to be lenient and leave strict mode off. - -Here's how to process the Set-Cookie header(s) on a node HTTP/HTTPS response: - -``` javascript -if (res.headers['set-cookie'] instanceof Array) - cookies = res.headers['set-cookie'].map(Cookie.parse); -else - cookies = [Cookie.parse(res.headers['set-cookie'])]; -``` - -Cookie.fromJSON(string) ------------------------ - -Convert a JSON string to a `Cookie` object. Does a `JSON.parse()` and converts the `.created`, `.lastAccessed` and `.expires` properties into `Date` objects. - -Properties -========== - - * _key_ - string - the name or key of the cookie (default "") - * _value_ - string - the value of the cookie (default "") - * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `"Infinity"`). See `setExpires()` - * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `"Infinity"` and `"-Infinity"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()` - * _domain_ - string - the `Domain=` attribute of the cookie - * _path_ - string - the `Path=` of the cookie - * _secure_ - boolean - the `Secure` cookie flag - * _httpOnly_ - boolean - the `HttpOnly` cookie flag - * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside) - -After a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes: - - * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied) - * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one. - * _created_ - `Date` - when this cookie was added to the jar - * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute. - -Construction([{options}]) ------------- - -Receives an options object that can contain any Cookie properties, uses the default for unspecified properties. - -.toString() ------------ - -encode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`. - -.cookieString() ---------------- - -encode to a Cookie header value (i.e. the `.key` and `.value` properties joined with '='). - -.setExpires(String) -------------------- - -sets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can't parse this date string), `.expires` is set to `"Infinity"` (a string) is set. - -.setMaxAge(number) -------------------- - -sets the maxAge in seconds. Coerces `-Infinity` to `"-Infinity"` and `Infinity` to `"Infinity"` so it JSON serializes correctly. - -.expiryTime([now=Date.now()]) ------------------------------ - -.expiryDate([now=Date.now()]) ------------------------------ - -expiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds. - -Max-Age takes precedence over Expires (as per the RFC). The `.created` attribute -- or, by default, the `now` paramter -- is used to offset the `.maxAge` attribute. - -If Expires (`.expires`) is set, that's returned. - -Otherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for "Tue, 19 Jan 2038 03:14:07 GMT" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents). - -.TTL([now=Date.now()]) ---------- - -compute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply. - -The "number" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned. - -.canonicalizedDoman() ---------------------- - -.cdomain() ----------- - -return the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters. - -.validate() ------------ - -Status: *IN PROGRESS*. Works for a few things, but is by no means comprehensive. - -validates cookie attributes for semantic correctness. Useful for "lint" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct: - -``` javascript -if (cookie.validate() === true) { - // it's tasty -} else { - // yuck! -} -``` - -CookieJar -========= - -Construction([store = new MemoryCookieStore()][, rejectPublicSuffixes]) ------------- - -Simply use `new CookieJar()`. If you'd like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used. - - -Attributes ----------- - - * _rejectPublicSuffixes_ - boolean - reject cookies with domains like "com" and "co.uk" (default: `true`) - -Since eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods. - -.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie)) -------------------------------------------------------------------- - -Attempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.created`, `.lastAccessed` and `.hostOnly` properties. - -The `options` object can be omitted and can have the following properties: - - * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. - * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. - * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies - * _strict_ - boolean - default `false` - perform extra checks - * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. CookieStore errors aren't ignored by this option. - -As per the RFC, the `.hostOnly` property is set if there was no "Domain=" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual). - -.storeCookie(cookie, [{options},] cb(err,cookie)) -------------------------------------------------- - -__REMOVED__ removed in lieu of the CookieStore API below - -.getCookies(currentUrl, [{options},] cb(err,cookies)) ------------------------------------------------------ - -Retrieve the list of cookies that can be sent in a Cookie header for the current url. - -If an error is encountered, that's passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given. - -The `options` object can be omitted and can have the following properties: - - * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. - * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. - * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies - * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially). - * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the CookieStore `fetchCookies` function (the default MemoryCookieStore supports it). - -The `.lastAccessed` property of the returned cookies will have been updated. - -.getCookieString(...) ---------------------- - -Accepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`. - -.getSetCookieStrings(...) -------------------------- - -Accepts the same options as `.getCookies()` but passes an array of strings suitable for Set-Cookie headers (rather than an array of `Cookie`s) to the callback. Simply maps the cookie array via `.toString()`. - -# CookieStore API - -The storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores. - -All `domain` parameters will have been normalized before calling. - -The Cookie store must have all of the following methods. - -store.findCookie(domain, path, key, cb(err,cookie)) ---------------------------------------------------- - -Retrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned. - -Callback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error). - -store.findCookies(domain, path, cb(err,cookies)) ------------------------------------------------- - -Locates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above. - -If no cookies are found, the callback MUST be passed an empty array. - -The resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it's OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done. - -As of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only). - -store.putCookie(cookie, cb(err)) --------------------------------- - -Adds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it's possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur. - -The `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties. - -Pass an error if the cookie cannot be stored. - -store.updateCookie(oldCookie, newCookie, cb(err)) -------------------------------------------------- - -Update an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store. - -The `.lastAccessed` property will always be different between the two objects and `.created` will always be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are sorted (or selected for deletion). - -Stores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn't define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object. - -The `newCookie` and `oldCookie` objects MUST NOT be modified. - -Pass an error if the newCookie cannot be stored. - -store.removeCookie(domain, path, key, cb(err)) ----------------------------------------------- - -Remove a cookie from the store (see notes on `findCookie` about the uniqueness constraint). - -The implementation MUST NOT pass an error if the cookie doesn't exist; only pass an error due to the failure to remove an existing cookie. - -store.removeCookies(domain, path, cb(err)) ------------------------------------------- - -Removes matching cookies from the store. The `path` paramter is optional, and if missing means all paths in a domain should be removed. - -Pass an error ONLY if removing any existing cookies failed. - -# TODO - - * _full_ RFC5890/RFC5891 canonicalization for domains in `cdomain()` - * the optional `punycode` requirement implements RFC3492, but RFC6265 requires RFC5891 - * better tests for `validate()`? - -# Copyright and License - -(tl;dr: MIT with some MPL/1.1) - -Copyright GoInstant, Inc. and other contributors. 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. - -Portions may be licensed under different licenses (in particular public-suffix.txt is MPL/1.1); please read the LICENSE file for full details. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js deleted file mode 100644 index a7fa5452..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - -var fs = require('fs'); -var assert = require('assert'); -var punycode = require('punycode'); - -fs.readFile('./public-suffix.txt', 'utf8', function(err,string) { - if (err) throw err; - var lines = string.split("\n"); - process.nextTick(function() { - processList(lines); - }); -}); - -var index = {}; - -var COMMENT = new RegExp('//.+'); -function processList(lines) { - while (lines.length) { - var line = lines.shift(); - line = line.replace(COMMENT,'').trim(); - if (!line) continue; - addToIndex(index,line); - } - - pubSufTest(); - - var w = fs.createWriteStream('./lib/pubsuffix.js',{ - flags: 'w', - encoding: 'utf8', - mode: 0644, - }); - w.on('end', process.exit); - w.write("/****************************************************\n"); - w.write(" * AUTOMATICALLY GENERATED by generate-pubsuffix.js *\n"); - w.write(" * DO NOT EDIT! *\n"); - w.write(" ****************************************************/\n\n"); - - w.write("module.exports.getPublicSuffix = "); - w.write(getPublicSuffix.toString()); - w.write(";\n\n"); - - w.write("// The following generated structure is used under the MPL version 1.1\n"); - w.write("// See public-suffix.txt for more information\n\n"); - w.write("var index = module.exports.index = Object.freeze(\n"); - w.write(JSON.stringify(index)); - w.write(");\n\n"); - w.write("// END of automatically generated file\n"); - - w.end(); -} - -function addToIndex(index,line) { - var prefix = ''; - if (line.replace(/^(!|\*\.)/)) { - prefix = RegExp.$1; - line = line.slice(prefix.length); - } - line = prefix + punycode.toASCII(line); - - if (line.substr(0,1) == '!') - index[line.substr(1)] = false; - else - index[line] = true; -} - -// include the licence in the function since it gets written to pubsuffix.js -function getPublicSuffix(domain) { - /* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - if (!domain) return null; - if (domain.match(/^\./)) return null; - - domain = domain.toLowerCase(); - var parts = domain.split('.').reverse(); - - var suffix = ''; - var suffixLen = 0; - for (var i=0; i<parts.length; i++) { - var part = parts[i]; - var starstr = '*'+suffix; - var partstr = part+suffix; - - if (index[starstr]) { // star rule matches - suffixLen = i+1; - if (index[partstr] === false) { // exception rule matches (NB: false, not undefined) - suffixLen--; - } - } else if (index[partstr]) { // exact match, not exception - suffixLen = i+1; - } - - suffix = '.'+part+suffix; - } - - if (index['*'+suffix]) { // *.domain exists (e.g. *.kyoto.jp for domain='kyoto.jp'); - return null; - } - - if (suffixLen && parts.length > suffixLen) { - return parts.slice(0,suffixLen+1).reverse().join('.'); - } - - return null; -} - -function checkPublicSuffix(give,get) { - var got = getPublicSuffix(give); - assert.equal(got, get, give+' should be '+(get==null?'NULL':get)+' but got '+got); -} - -// pubSufTest() was converted to JavaScript from http://publicsuffix.org/list/test.txt -function pubSufTest() { - // For this function-scope and this function-scope ONLY: - // Any copyright is dedicated to the Public Domain. - // http://creativecommons.org/publicdomain/zero/1.0/ - - // NULL input. - checkPublicSuffix(null, null); - // Mixed case. - checkPublicSuffix('COM', null); - checkPublicSuffix('example.COM', 'example.com'); - checkPublicSuffix('WwW.example.COM', 'example.com'); - // Leading dot. - checkPublicSuffix('.com', null); - checkPublicSuffix('.example', null); - checkPublicSuffix('.example.com', null); - checkPublicSuffix('.example.example', null); - // Unlisted TLD. - checkPublicSuffix('example', null); - checkPublicSuffix('example.example', null); - checkPublicSuffix('b.example.example', null); - checkPublicSuffix('a.b.example.example', null); - // Listed, but non-Internet, TLD. - checkPublicSuffix('local', null); - checkPublicSuffix('example.local', null); - checkPublicSuffix('b.example.local', null); - checkPublicSuffix('a.b.example.local', null); - // TLD with only 1 rule. - checkPublicSuffix('biz', null); - checkPublicSuffix('domain.biz', 'domain.biz'); - checkPublicSuffix('b.domain.biz', 'domain.biz'); - checkPublicSuffix('a.b.domain.biz', 'domain.biz'); - // TLD with some 2-level rules. - checkPublicSuffix('com', null); - checkPublicSuffix('example.com', 'example.com'); - checkPublicSuffix('b.example.com', 'example.com'); - checkPublicSuffix('a.b.example.com', 'example.com'); - checkPublicSuffix('uk.com', null); - checkPublicSuffix('example.uk.com', 'example.uk.com'); - checkPublicSuffix('b.example.uk.com', 'example.uk.com'); - checkPublicSuffix('a.b.example.uk.com', 'example.uk.com'); - checkPublicSuffix('test.ac', 'test.ac'); - // TLD with only 1 (wildcard) rule. - checkPublicSuffix('cy', null); - checkPublicSuffix('c.cy', null); - checkPublicSuffix('b.c.cy', 'b.c.cy'); - checkPublicSuffix('a.b.c.cy', 'b.c.cy'); - // More complex TLD. - checkPublicSuffix('jp', null); - checkPublicSuffix('test.jp', 'test.jp'); - checkPublicSuffix('www.test.jp', 'test.jp'); - checkPublicSuffix('ac.jp', null); - checkPublicSuffix('test.ac.jp', 'test.ac.jp'); - checkPublicSuffix('www.test.ac.jp', 'test.ac.jp'); - checkPublicSuffix('kyoto.jp', null); - checkPublicSuffix('c.kyoto.jp', null); - checkPublicSuffix('b.c.kyoto.jp', 'b.c.kyoto.jp'); - checkPublicSuffix('a.b.c.kyoto.jp', 'b.c.kyoto.jp'); - checkPublicSuffix('pref.kyoto.jp', 'pref.kyoto.jp'); // Exception rule. - checkPublicSuffix('www.pref.kyoto.jp', 'pref.kyoto.jp'); // Exception rule. - checkPublicSuffix('city.kyoto.jp', 'city.kyoto.jp'); // Exception rule. - checkPublicSuffix('www.city.kyoto.jp', 'city.kyoto.jp'); // Exception rule. - // TLD with a wildcard rule and exceptions. - checkPublicSuffix('om', null); - checkPublicSuffix('test.om', null); - checkPublicSuffix('b.test.om', 'b.test.om'); - checkPublicSuffix('a.b.test.om', 'b.test.om'); - checkPublicSuffix('songfest.om', 'songfest.om'); - checkPublicSuffix('www.songfest.om', 'songfest.om'); - // US K12. - checkPublicSuffix('us', null); - checkPublicSuffix('test.us', 'test.us'); - checkPublicSuffix('www.test.us', 'test.us'); - checkPublicSuffix('ak.us', null); - checkPublicSuffix('test.ak.us', 'test.ak.us'); - checkPublicSuffix('www.test.ak.us', 'test.ak.us'); - checkPublicSuffix('k12.ak.us', null); - checkPublicSuffix('test.k12.ak.us', 'test.k12.ak.us'); - checkPublicSuffix('www.test.k12.ak.us', 'test.k12.ak.us'); - - -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/cookie.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/cookie.js deleted file mode 100644 index 1d8615b5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/cookie.js +++ /dev/null @@ -1,947 +0,0 @@ -/* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - -/*jshint regexp:false */ -var net = require('net'); -var urlParse = require('url').parse; -var pubsuffix = require('./pubsuffix'); - -var punycode; -try { - punycode = require('punycode'); -} catch(e) { - console.warn("cookie: can't load punycode; won't use punycode for domain normalization"); -} - -var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/; - -// From RFC2616 S2.2: -var TOKEN = /[\x21\x23-\x26\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7A\x7C\x7E]/; - -// From RFC6265 S4.1.1 -// note that it excludes \x3B ";" -var COOKIE_OCTET = /[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]/; -var COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/; - -// The name/key cannot be empty but the value can (S5.2): -var COOKIE_PAIR_STRICT = new RegExp('^('+TOKEN.source+'+)=("?)('+COOKIE_OCTET.source+'*)\\2'); -var COOKIE_PAIR = /^([^=\s]+)\s*=\s*("?)\s*(.*)\s*\2/; - -// RFC6265 S4.1.1 defines extension-av as 'any CHAR except CTLs or ";"' -// Note ';' is \x3B -var NON_CTL_SEMICOLON = /[\x20-\x3A\x3C-\x7E]+/; -var EXTENSION_AV = NON_CTL_SEMICOLON; -var PATH_VALUE = NON_CTL_SEMICOLON; - -// Used for checking whether or not there is a trailing semi-colon -var TRAILING_SEMICOLON = /;+$/; - -/* RFC6265 S5.1.1.5: - * [fail if] the day-of-month-value is less than 1 or greater than 31 - */ -var DAY_OF_MONTH = /^(0?[1-9]|[12][0-9]|3[01])$/; - -/* RFC6265 S5.1.1.5: - * [fail if] - * * the hour-value is greater than 23, - * * the minute-value is greater than 59, or - * * the second-value is greater than 59. - */ -var TIME = /(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])/; -var STRICT_TIME = /^(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/; - -var MONTH = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)$/i; -var MONTH_TO_NUM = { - jan:0, feb:1, mar:2, apr:3, may:4, jun:5, jul:6, aug:7, sep:8, oct:9, nov:10, dec:11 -}; -var NUM_TO_MONTH = [ - 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec' -]; -var NUM_TO_DAY = [ - 'Sun','Mon','Tue','Wed','Thu','Fri','Sat' -]; - -var YEAR = /^([1-9][0-9]{1,3})$/; // 2 to 4 digits (will check range when parsing) - -var MAX_TIME = 2147483647000; // 31-bit max -var MAX_DATE = new Date(CookieJar.MAX_TIME); // 31-bit max -var MIN_TIME = 0; // 31-bit min -var MIN_DATE = new Date(CookieJar.MIN_TIME); // 31-bit min - - -// RFC6265 S5.1.1 date parser: -function parseDate(str,strict) { - if (!str) return; - var found_time, found_dom, found_month, found_year; - - /* RFC6265 S5.1.1: - * 2. Process each date-token sequentially in the order the date-tokens - * appear in the cookie-date - */ - var tokens = str.split(DATE_DELIM); - if (!tokens) return; - - var date = new Date(); - date.setMilliseconds(0); - - for (var i=0; i<tokens.length; i++) { - var token = tokens[i].trim(); - if (!token.length) continue; - - var result; - - /* 2.1. If the found-time flag is not set and the token matches the time - * production, set the found-time flag and set the hour- value, - * minute-value, and second-value to the numbers denoted by the digits in - * the date-token, respectively. Skip the remaining sub-steps and continue - * to the next date-token. - */ - if (!found_time) { - result = (strict ? STRICT_TIME : TIME).exec(token); - if (result) { - found_time = true; - date.setUTCHours(result[1]); - date.setUTCMinutes(result[2]); - date.setUTCSeconds(result[3]); - continue; - } - } - - /* 2.2. If the found-day-of-month flag is not set and the date-token matches - * the day-of-month production, set the found-day-of- month flag and set - * the day-of-month-value to the number denoted by the date-token. Skip - * the remaining sub-steps and continue to the next date-token. - */ - if (!found_dom) { - result = DAY_OF_MONTH.exec(token); - if (result) { - found_dom = true; - date.setUTCDate(result[1]); - continue; - } - } - - /* 2.3. If the found-month flag is not set and the date-token matches the - * month production, set the found-month flag and set the month-value to - * the month denoted by the date-token. Skip the remaining sub-steps and - * continue to the next date-token. - */ - if (!found_month) { - result = MONTH.exec(token); - if (result) { - found_month = true; - date.setUTCMonth(MONTH_TO_NUM[result[1].toLowerCase()]); - continue; - } - } - - /* 2.4. If the found-year flag is not set and the date-token matches the year - * production, set the found-year flag and set the year-value to the number - * denoted by the date-token. Skip the remaining sub-steps and continue to - * the next date-token. - */ - if (!found_year) { - result = YEAR.exec(token); - if (result) { - var year = result[0]; - /* From S5.1.1: - * 3. If the year-value is greater than or equal to 70 and less - * than or equal to 99, increment the year-value by 1900. - * 4. If the year-value is greater than or equal to 0 and less - * than or equal to 69, increment the year-value by 2000. - */ - if (70 <= year && year <= 99) - year += 1900; - else if (0 <= year && year <= 69) - year += 2000; - - if (year < 1601) - return; // 5. ... the year-value is less than 1601 - - found_year = true; - date.setUTCFullYear(year); - continue; - } - } - } - - if (!(found_time && found_dom && found_month && found_year)) { - return; // 5. ... at least one of the found-day-of-month, found-month, found- - // year, or found-time flags is not set, - } - - return date; -} - -function formatDate(date) { - var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d; - var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h; - var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m; - var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s; - return NUM_TO_DAY[date.getUTCDay()] + ', ' + - d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+ - h+':'+m+':'+s+' GMT'; -} - -// S5.1.2 Canonicalized Host Names -function canonicalDomain(str) { - if (str == null) return null; - str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading . - - // convert to IDN if any non-ASCII characters - if (punycode && /[^\u0001-\u007f]/.test(str)) - str = punycode.toASCII(str); - - return str.toLowerCase(); -} - -// S5.1.3 Domain Matching -function domainMatch(str, domStr, canonicalize) { - if (str == null || domStr == null) return null; - if (canonicalize !== false) { - str = canonicalDomain(str); - domStr = canonicalDomain(domStr); - } - - /* - * "The domain string and the string are identical. (Note that both the - * domain string and the string will have been canonicalized to lower case at - * this point)" - */ - if (str == domStr) return true; - - /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */ - - /* "* The string is a host name (i.e., not an IP address)." */ - if (net.isIP(str)) return false; - - /* "* The domain string is a suffix of the string" */ - var idx = str.indexOf(domStr); - if (idx <= 0) return false; // it's a non-match (-1) or prefix (0) - - // e.g "a.b.c".indexOf("b.c") === 2 - // 5 === 3+2 - if (str.length !== domStr.length + idx) // it's not a suffix - return false; - - /* "* The last character of the string that is not included in the domain - * string is a %x2E (".") character." */ - if (str.substr(idx-1,1) !== '.') return false; - return true; -} - - -// RFC6265 S5.1.4 Paths and Path-Match - -/* - * "The user agent MUST use an algorithm equivalent to the following algorithm - * to compute the default-path of a cookie:" - * - * Assumption: the path (and not query part or absolute uri) is passed in. - */ -function defaultPath(path) { - // "2. If the uri-path is empty or if the first character of the uri-path is not - // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps. - if (!path || path.substr(0,1) !== "/") return "/"; - - // "3. If the uri-path contains no more than one %x2F ("/") character, output - // %x2F ("/") and skip the remaining step." - if (path === "/") return path; - - var rightSlash = path.lastIndexOf("/"); - if (rightSlash === 0) return "/"; - - // "4. Output the characters of the uri-path from the first character up to, - // but not including, the right-most %x2F ("/")." - return path.slice(0, rightSlash); -} - -/* - * "A request-path path-matches a given cookie-path if at least one of the - * following conditions holds:" - */ -function pathMatch(reqPath,cookiePath) { - // "o The cookie-path and the request-path are identical." - if (cookiePath === reqPath) - return true; - - var idx = reqPath.indexOf(cookiePath); - if (idx === 0) { - // "o The cookie-path is a prefix of the request-path, and the last - // character of the cookie-path is %x2F ("/")." - if (cookiePath.substr(-1) === "/") - return true; - - // " o The cookie-path is a prefix of the request-path, and the first - // character of the request-path that is not included in the cookie- path - // is a %x2F ("/") character." - if (reqPath.substr(cookiePath.length,1) === "/") - return true; - } - - return false; -} - -function parse(str, strict) { - str = str.trim(); - - // S4.1.1 Trailing semi-colons are not part of the specification. - // If we are not in strict mode we remove the trailing semi-colons. - var semiColonCheck = TRAILING_SEMICOLON.exec(str); - if (semiColonCheck) { - if (strict) return; - str = str.slice(0, semiColonCheck.index); - } - - // We use a regex to parse the "name-value-pair" part of S5.2 - var firstSemi = str.indexOf(';'); // S5.2 step 1 - var pairRx = strict ? COOKIE_PAIR_STRICT : COOKIE_PAIR; - var result = pairRx.exec(firstSemi === -1 ? str : str.substr(0,firstSemi)); - - // Rx satisfies the "the name string is empty" and "lacks a %x3D ("=")" - // constraints as well as trimming any whitespace. - if (!result) return; - - var c = new Cookie(); - c.key = result[1]; // the regexp should trim() already - c.value = result[3]; // [2] is quotes or empty-string - - if (firstSemi === -1) return c; - - // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string - // (including the %x3B (";") in question)." plus later on in the same section - // "discard the first ";" and trim". - var unparsed = str.slice(firstSemi).replace(/^\s*;\s*/,'').trim(); - - // "If the unparsed-attributes string is empty, skip the rest of these - // steps." - if (unparsed.length === 0) return c; - - /* - * S5.2 says that when looping over the items "[p]rocess the attribute-name - * and attribute-value according to the requirements in the following - * subsections" for every item. Plus, for many of the individual attributes - * in S5.3 it says to use the "attribute-value of the last attribute in the - * cookie-attribute-list". Therefore, in this implementation, we overwrite - * the previous value. - */ - var cookie_avs = unparsed.split(/\s*;\s*/); - while (cookie_avs.length) { - var av = cookie_avs.shift(); - - if (strict && !EXTENSION_AV.test(av)) return; - - var av_sep = av.indexOf('='); - var av_key, av_value; - if (av_sep === -1) { - av_key = av; - av_value = null; - } else { - av_key = av.substr(0,av_sep); - av_value = av.substr(av_sep+1); - } - - av_key = av_key.trim().toLowerCase(); - if (av_value) av_value = av_value.trim(); - - switch(av_key) { - case 'expires': // S5.2.1 - if (!av_value) { if(strict){return}else{break;} } - var exp = parseDate(av_value,strict); - // "If the attribute-value failed to parse as a cookie date, ignore the - // cookie-av." - if (exp == null) { if(strict){return}else{break;} } - c.expires = exp; - // over and underflow not realistically a concern: V8's getTime() seems to - // store something larger than a 32-bit time_t (even with 32-bit node) - break; - - case 'max-age': // S5.2.2 - if (!av_value) { if(strict){return}else{break;} } - // "If the first character of the attribute-value is not a DIGIT or a "-" - // character ...[or]... If the remainder of attribute-value contains a - // non-DIGIT character, ignore the cookie-av." - if (!/^-?[0-9]+$/.test(av_value)) { if(strict){return}else{break;} } - var delta = parseInt(av_value,10); - if (strict && delta <= 0) return; // S4.1.1 - // "If delta-seconds is less than or equal to zero (0), let expiry-time - // be the earliest representable date and time." - c.setMaxAge(delta); - break; - - case 'domain': // S5.2.3 - // "If the attribute-value is empty, the behavior is undefined. However, - // the user agent SHOULD ignore the cookie-av entirely." - if (!av_value) { if(strict){return}else{break;} } - // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E - // (".") character." - var domain = av_value.trim().replace(/^\./,''); - if (!domain) { if(strict){return}else{break;} } // see "is empty" above - // "Convert the cookie-domain to lower case." - c.domain = domain.toLowerCase(); - break; - - case 'path': // S5.2.4 - /* - * "If the attribute-value is empty or if the first character of the - * attribute-value is not %x2F ("/"): - * Let cookie-path be the default-path. - * Otherwise: - * Let cookie-path be the attribute-value." - * - * We'll represent the default-path as null since it depends on the - * context of the parsing. - */ - if (!av_value || av_value.substr(0,1) != "/") { if(strict){return}else{break;} } - c.path = av_value; - break; - - case 'secure': // S5.2.5 - /* - * "If the attribute-name case-insensitively matches the string "Secure", - * the user agent MUST append an attribute to the cookie-attribute-list - * with an attribute-name of Secure and an empty attribute-value." - */ - if (av_value != null) { if(strict){return} } - c.secure = true; - break; - - case 'httponly': // S5.2.6 -- effectively the same as 'secure' - if (av_value != null) { if(strict){return} } - c.httpOnly = true; - break; - - default: - c.extensions = c.extensions || []; - c.extensions.push(av); - break; - } - } - - // ensure a default date for sorting: - c.creation = new Date(); - return c; -} - -function fromJSON(str) { - if (!str) return null; - - var obj; - try { - obj = JSON.parse(str); - } catch (e) { - return null; - } - - var c = new Cookie(); - for (var i=0; i<numCookieProperties; i++) { - var prop = cookieProperties[i]; - if (obj[prop] == null) continue; - if (prop === 'expires' || - prop === 'creation' || - prop === 'lastAccessed') - { - c[prop] = obj[prop] == "Infinity" ? "Infinity" : new Date(obj[prop]); - } else { - c[prop] = obj[prop]; - } - } - - - // ensure a default date for sorting: - c.creation = c.creation || new Date(); - - return c; -} - -/* Section 5.4 part 2: - * "* Cookies with longer paths are listed before cookies with - * shorter paths. - * - * * Among cookies that have equal-length path fields, cookies with - * earlier creation-times are listed before cookies with later - * creation-times." - */ - -function cookieCompare(a,b) { - // descending for length: b CMP a - var deltaLen = (b.path ? b.path.length : 0) - (a.path ? a.path.length : 0); - if (deltaLen !== 0) return deltaLen; - // ascending for time: a CMP b - return (a.creation ? a.creation.getTime() : MAX_TIME) - - (b.creation ? b.creation.getTime() : MAX_TIME); -} - -// Gives the permutation of all possible domainMatch()es of a given domain. The -// array is in shortest-to-longest order. Handy for indexing. -function permuteDomain(domain) { - var pubSuf = pubsuffix.getPublicSuffix(domain); - if (!pubSuf) return null; - if (pubSuf == domain) return [domain]; - - var prefix = domain.slice(0,-(pubSuf.length+1)); // ".example.com" - var parts = prefix.split('.').reverse(); - var cur = pubSuf; - var permutations = [cur]; - while (parts.length) { - cur = parts.shift()+'.'+cur; - permutations.push(cur); - } - return permutations; -} - -// Gives the permutation of all possible pathMatch()es of a given path. The -// array is in longest-to-shortest order. Handy for indexing. -function permutePath(path) { - var origPath = path; - if (path === '/') return ['/']; - if (path.lastIndexOf('/') === path.length-1) - path = path.substr(0,path.length-1); - var permutations = [path]; - while (path.length > 1) { - var lindex = path.lastIndexOf('/'); - if (lindex === 0) break; - path = path.substr(0,lindex); - permutations.push(path); - } - permutations.push('/'); - return permutations; -} - - -function Cookie (opts) { - if (typeof opts !== "object") return; - Object.keys(opts).forEach(function (key) { - if (Cookie.prototype.hasOwnProperty(key)) { - this[key] = opts[key] || Cookie.prototype[key]; - } - }.bind(this)); -} - -Cookie.parse = parse; -Cookie.fromJSON = fromJSON; - -Cookie.prototype.key = ""; -Cookie.prototype.value = ""; - -// the order in which the RFC has them: -Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity -Cookie.prototype.maxAge = null; // takes precedence over expires for TTL -Cookie.prototype.domain = null; -Cookie.prototype.path = null; -Cookie.prototype.secure = false; -Cookie.prototype.httpOnly = false; -Cookie.prototype.extensions = null; - -// set by the CookieJar: -Cookie.prototype.hostOnly = null; // boolean when set -Cookie.prototype.pathIsDefault = null; // boolean when set -Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse -Cookie.prototype.lastAccessed = null; // Date when set - -var cookieProperties = Object.freeze(Object.keys(Cookie.prototype).map(function(p) { - if (p instanceof Function) return; - return p; -})); -var numCookieProperties = cookieProperties.length; - -Cookie.prototype.inspect = function inspect() { - var now = Date.now(); - return 'Cookie="'+this.toString() + - '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') + - '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') + - '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') + - '"'; -}; - -Cookie.prototype.validate = function validate() { - if (!COOKIE_OCTETS.test(this.value)) - return false; - if (this.expires != Infinity && !(this.expires instanceof Date) && !parseDate(this.expires,true)) - return false; - if (this.maxAge != null && this.maxAge <= 0) - return false; // "Max-Age=" non-zero-digit *DIGIT - if (this.path != null && !PATH_VALUE.test(this.path)) - return false; - - var cdomain = this.cdomain(); - if (cdomain) { - if (cdomain.match(/\.$/)) - return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this - var suffix = pubsuffix.getPublicSuffix(cdomain); - if (suffix == null) // it's a public suffix - return false; - } - return true; -}; - -Cookie.prototype.setExpires = function setExpires(exp) { - if (exp instanceof Date) this.expires = exp; - else this.expires = parseDate(exp) || "Infinity"; -}; - -Cookie.prototype.setMaxAge = function setMaxAge(age) { - if (age === Infinity || age === -Infinity) - this.maxAge = age.toString(); // so JSON.stringify() works - else - this.maxAge = age; -}; - -// gives Cookie header format -Cookie.prototype.cookieString = function cookieString() { - var val = this.value; - if (val == null) val = ''; - if (!val.length || COOKIE_OCTETS.test(val)) - return this.key+'='+val; - else - return this.key+'="'+val+'"'; -}; - -// gives Set-Cookie header format -Cookie.prototype.toString = function toString() { - var str = this.cookieString(); - - if (this.expires != Infinity) { - if (this.expires instanceof Date) - str += '; Expires='+formatDate(this.expires); - else - str += '; Expires='+this.expires; - } - - if (this.maxAge != null && this.maxAge != Infinity) - str += '; Max-Age='+this.maxAge; - - if (this.domain && !this.hostOnly) - str += '; Domain='+this.domain; - if (this.path) - str += '; Path='+this.path; - - if (this.secure) str += '; Secure'; - if (this.httpOnly) str += '; HttpOnly'; - if (this.extensions) { - this.extensions.forEach(function(ext) { - str += '; '+ext; - }); - } - - return str; -}; - -// TTL() partially replaces the "expiry-time" parts of S5.3 step 3 (setCookie() -// elsewhere) -// S5.3 says to give the "latest representable date" for which we use Infinity -// For "expired" we use 0 -Cookie.prototype.TTL = function TTL(now) { - /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires - * attribute, the Max-Age attribute has precedence and controls the - * expiration date of the cookie. - * (Concurs with S5.3 step 3) - */ - if (this.maxAge != null) { - return this.maxAge<=0 ? 0 : this.maxAge*1000; - } - - var expires = this.expires; - if (expires != Infinity) { - if (!(expires instanceof Date)) { - expires = parseDate(expires) || Infinity; - } - - if (expires == Infinity) - return Infinity; - - return expires.getTime() - (now || Date.now()); - } - - return Infinity; -}; - -// expiryTime() replaces the "expiry-time" parts of S5.3 step 3 (setCookie() -// elsewhere) -Cookie.prototype.expiryTime = function expiryTime(now) { - if (this.maxAge != null) { - var relativeTo = this.creation || now || new Date(); - var age = (this.maxAge <= 0) ? -Infinity : this.maxAge*1000; - return relativeTo.getTime() + age; - } - - if (this.expires == Infinity) return Infinity; - return this.expires.getTime(); -}; - -// expiryDate() replaces the "expiry-time" parts of S5.3 step 3 (setCookie() -// elsewhere), except it returns a Date -Cookie.prototype.expiryDate = function expiryDate(now) { - var millisec = this.expiryTime(now); - if (millisec == Infinity) return new Date(MAX_TIME); - else if (millisec == -Infinity) return new Date(MIN_TIME); - else return new Date(millisec); -}; - -// This replaces the "persistent-flag" parts of S5.3 step 3 -Cookie.prototype.isPersistent = function isPersistent() { - return (this.maxAge != null || this.expires != Infinity); -}; - -// Mostly S5.1.2 and S5.2.3: -Cookie.prototype.cdomain = -Cookie.prototype.canonicalizedDomain = function canonicalizedDomain() { - if (this.domain == null) return null; - return canonicalDomain(this.domain); -}; - - -var memstore; -function CookieJar(store, rejectPublicSuffixes) { - if (rejectPublicSuffixes != null) this.rejectPublicSuffixes = rejectPublicSuffixes; - if (!store) { - memstore = memstore || require('./memstore'); - store = new memstore.MemoryCookieStore(); - } - this.store = store; -} -CookieJar.prototype.store = null; -CookieJar.prototype.rejectPublicSuffixes = true; - -CookieJar.prototype.setCookie = function setCookie(cookie, url, options, cb) { - var err; - var context = (url instanceof Object) ? url : urlParse(url); - if (options instanceof Function) { - cb = options; - options = {}; - } - - var host = canonicalDomain(context.hostname); - - // S5.3 step 1 - if (!(cookie instanceof Cookie)) - cookie = Cookie.parse(cookie, options.strict === true); - if (!cookie) { - err = new Error("Cookie failed to parse"); - return cb(options.ignoreError ? null : err); - } - - // S5.3 step 2 - var now = options.now || new Date(); // will assign later to save effort in the face of errors - - // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie() - - // S5.3 step 4: NOOP; domain is null by default - - // S5.3 step 5: public suffixes - if (this.rejectPublicSuffixes && cookie.domain) { - var suffix = pubsuffix.getPublicSuffix(cookie.cdomain()); - if (suffix == null) { // e.g. "com" - err = new Error("Cookie has domain set to a public suffix"); - return cb(options.ignoreError ? null : err); - } - } - - // S5.3 step 6: - if (cookie.domain) { - if (!domainMatch(host, cookie.cdomain(), false)) { - err = new Error("Cookie not in this host's domain. Cookie:"+cookie.cdomain()+" Request:"+host); - return cb(options.ignoreError ? null : err); - } - - if (cookie.hostOnly == null) // don't reset if already set - cookie.hostOnly = false; - - } else { - cookie.hostOnly = true; - cookie.domain = host; - } - - // S5.3 step 7: "Otherwise, set the cookie's path to the default-path of the - // request-uri" - if (!cookie.path) { - cookie.path = defaultPath(context.pathname); - cookie.pathIsDefault = true; - } else { - if (cookie.path.length > 1 && cookie.path.substr(-1) == '/') - cookie.path = cookie.path.slice(0,-1); - } - - // S5.3 step 8: NOOP; secure attribute - // S5.3 step 9: NOOP; httpOnly attribute - - // S5.3 step 10 - if (options.http === false && cookie.httpOnly) { - err = new Error("Cookie is HttpOnly and this isn't an HTTP API"); - return cb(options.ignoreError ? null : err); - } - - var store = this.store; - - if (!store.updateCookie) { - store.updateCookie = function stubUpdateCookie(oldCookie, newCookie, cb) { - this.putCookie(newCookie, cb); - }; - } - - store.findCookie(cookie.domain, cookie.path, cookie.key, function(err,oldCookie) { - if (err) return cb(err); - - var next = function(err) { - if (err) return cb(err); - else cb(null, cookie); - }; - - if (oldCookie) { - // S5.3 step 11 - "If the cookie store contains a cookie with the same name, - // domain, and path as the newly created cookie:" - if (options.http === false && oldCookie.httpOnly) { // step 11.2 - err = new Error("old Cookie is HttpOnly and this isn't an HTTP API"); - return cb(options.ignoreError ? null : err); - } - cookie.creation = oldCookie.creation; // step 11.3 - cookie.lastAccessed = now; - // Step 11.4 (delete cookie) is implied by just setting the new one: - store.updateCookie(oldCookie, cookie, next); // step 12 - - } else { - cookie.creation = cookie.lastAccessed = now; - store.putCookie(cookie, next); // step 12 - } - }); -}; - -// RFC6365 S5.4 -CookieJar.prototype.getCookies = function getCookies(url, options, cb) { - var context = (url instanceof Object) ? url : urlParse(url); - if (options instanceof Function) { - cb = options; - options = {}; - } - - var host = canonicalDomain(context.hostname); - var path = context.pathname || '/'; - - var secure = options.secure; - if (secure == null && context.protocol && - (context.protocol == 'https:' || context.protocol == 'wss:')) - { - secure = true; - } - - var http = options.http; - if (http == null) http = true; - - var now = options.now || Date.now(); - var expireCheck = options.expire !== false; - var allPaths = !!options.allPaths; - var store = this.store; - - function matchingCookie(c) { - // "Either: - // The cookie's host-only-flag is true and the canonicalized - // request-host is identical to the cookie's domain. - // Or: - // The cookie's host-only-flag is false and the canonicalized - // request-host domain-matches the cookie's domain." - if (c.hostOnly) { - if (c.domain != host) return false; - } else { - if (!domainMatch(host, c.domain, false)) return false; - } - - // "The request-uri's path path-matches the cookie's path." - if (!allPaths && !pathMatch(path, c.path)) - return false; - - // "If the cookie's secure-only-flag is true, then the request-uri's - // scheme must denote a "secure" protocol" - if (c.secure && !secure) - return false; - - // "If the cookie's http-only-flag is true, then exclude the cookie if the - // cookie-string is being generated for a "non-HTTP" API" - if (c.httpOnly && !http) - return false; - - // deferred from S5.3 - // non-RFC: allow retention of expired cookies by choice - if (expireCheck && c.expiryTime() <= now) { - store.removeCookie(c.domain, c.path, c.key, function(){}); // result ignored - return false; - } - - return true; - } - - store.findCookies(host, allPaths ? null : path, function(err,cookies) { - if (err) return cb(err); - - cookies = cookies.filter(matchingCookie); - - // sorting of S5.4 part 2 - if (options.sort !== false) - cookies = cookies.sort(cookieCompare); - - // S5.4 part 3 - var now = new Date(); - cookies.forEach(function(c) { c.lastAccessed = now }); - // TODO persist lastAccessed - - cb(null,cookies); - }); -}; - -CookieJar.prototype.getCookieString = function(/*..., cb*/) { - var args = Array.prototype.slice.call(arguments,0); - var cb = args.pop(); - var next = function(err,cookies) { - if (err) cb(err); - else cb(null, cookies.map(function(c){return c.cookieString()}).join('; ')); - }; - args.push(next); - this.getCookies.apply(this,args); -}; - -CookieJar.prototype.getSetCookieStrings = function(/*..., cb*/) { - var args = Array.prototype.slice.call(arguments,0); - var cb = args.pop(); - var next = function(err,cookies) { - if (err) cb(err); - else cb(null, cookies.map(function(c){return c.toString()})); - }; - args.push(next); - this.getCookies.apply(this,args); -}; - - - -module.exports = { - CookieJar: CookieJar, - Cookie: Cookie, - parseDate: parseDate, - formatDate: formatDate, - parse: parse, - fromJSON: fromJSON, - domainMatch: domainMatch, - defaultPath: defaultPath, - pathMatch: pathMatch, - getPublicSuffix: pubsuffix.getPublicSuffix, - cookieCompare: cookieCompare, - permuteDomain: permuteDomain, - permutePath: permutePath, - canonicalDomain: canonicalDomain, -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/memstore.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/memstore.js deleted file mode 100644 index 66abb376..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/memstore.js +++ /dev/null @@ -1,102 +0,0 @@ -var tough = require('./cookie'); -var permuteDomain = tough.permuteDomain; -var permutePath = tough.permutePath; -var util = require('util'); - -function MemoryCookieStore() { - this.idx = {}; -} -module.exports.MemoryCookieStore = MemoryCookieStore; -MemoryCookieStore.prototype.idx = null; - -// force a default depth: -MemoryCookieStore.prototype.inspect = function inspect() { - return "{ idx: "+util.inspect(this.idx, false, 2)+' }'; -}; - -MemoryCookieStore.prototype.findCookie = function findCookie(domain, path, key, cb) { - if (!this.idx[domain]) return cb(null,undefined); - if (!this.idx[domain][path]) return cb(null,undefined); - return cb(null,this.idx[domain][path][key]||null); -}; - -MemoryCookieStore.prototype.findCookies = function findCookies(domain, path, cb) { - var results = []; - if (!domain) return cb(null,[]); - - var pathMatcher; - if (!path) { - // null or '/' means "all paths" - pathMatcher = function matchAll(domainIndex) { - for (var curPath in domainIndex) { - var pathIndex = domainIndex[curPath]; - for (var key in pathIndex) { - results.push(pathIndex[key]); - } - } - }; - - } else if (path === '/') { - pathMatcher = function matchSlash(domainIndex) { - var pathIndex = domainIndex['/']; - if (!pathIndex) return; - for (var key in pathIndex) { - results.push(pathIndex[key]); - } - }; - - } else { - var paths = permutePath(path) || [path]; - pathMatcher = function matchRFC(domainIndex) { - paths.forEach(function(curPath) { - var pathIndex = domainIndex[curPath]; - if (!pathIndex) return; - for (var key in pathIndex) { - results.push(pathIndex[key]); - } - }); - }; - } - - var domains = permuteDomain(domain) || [domain]; - var idx = this.idx; - domains.forEach(function(curDomain) { - var domainIndex = idx[curDomain]; - if (!domainIndex) return; - pathMatcher(domainIndex); - }); - - cb(null,results); -}; - -MemoryCookieStore.prototype.putCookie = function putCookie(cookie, cb) { - if (!this.idx[cookie.domain]) this.idx[cookie.domain] = {}; - if (!this.idx[cookie.domain][cookie.path]) this.idx[cookie.domain][cookie.path] = {}; - this.idx[cookie.domain][cookie.path][cookie.key] = cookie; - cb(null); -}; - -MemoryCookieStore.prototype.updateCookie = function updateCookie(oldCookie, newCookie, cb) { - // updateCookie() may avoid updating cookies that are identical. For example, - // lastAccessed may not be important to some stores and an equality - // comparison could exclude that field. - this.putCookie(newCookie,cb); -}; - -MemoryCookieStore.prototype.removeCookie = function removeCookie(domain, path, key, cb) { - if (this.idx[domain] && this.idx[domain][path] && this.idx[domain][path][key]) { - delete this.idx[domain][path][key]; - } - cb(null); -}; - -MemoryCookieStore.prototype.removeCookies = function removeCookies(domain, path, cb) { - if (!this.idx[domain]) { - if (path) { - delete this.idx[domain][path]; - } else { - delete this.idx[domain]; - } - } - return cb(null); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js deleted file mode 100644 index a7031473..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************** - * AUTOMATICALLY GENERATED by generate-pubsuffix.js * - * DO NOT EDIT! * - ****************************************************/ - -module.exports.getPublicSuffix = function getPublicSuffix(domain) { - /* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - if (!domain) return null; - if (domain.match(/^\./)) return null; - - domain = domain.toLowerCase(); - var parts = domain.split('.').reverse(); - - var suffix = ''; - var suffixLen = 0; - for (var i=0; i<parts.length; i++) { - var part = parts[i]; - var starstr = '*'+suffix; - var partstr = part+suffix; - - if (index[starstr]) { // star rule matches - suffixLen = i+1; - if (index[partstr] === false) { // exception rule matches (NB: false, not undefined) - suffixLen--; - } - } else if (index[partstr]) { // exact match, not exception - suffixLen = i+1; - } - - suffix = '.'+part+suffix; - } - - if (index['*'+suffix]) { // *.domain exists (e.g. *.kyoto.jp for domain='kyoto.jp'); - return null; - } - - if (suffixLen && parts.length > suffixLen) { - return parts.slice(0,suffixLen+1).reverse().join('.'); - } - - return null; -}; - -// The following generated structure is used under the MPL version 1.1 -// See public-suffix.txt for more information - -var index = module.exports.index = Object.freeze( -{"ac":true,"com.ac":true,"edu.ac":true,"gov.ac":true,"net.ac":true,"mil.ac":true,"org.ac":true,"ad":true,"nom.ad":true,"ae":true,"co.ae":true,"net.ae":true,"org.ae":true,"sch.ae":true,"ac.ae":true,"gov.ae":true,"mil.ae":true,"aero":true,"accident-investigation.aero":true,"accident-prevention.aero":true,"aerobatic.aero":true,"aeroclub.aero":true,"aerodrome.aero":true,"agents.aero":true,"aircraft.aero":true,"airline.aero":true,"airport.aero":true,"air-surveillance.aero":true,"airtraffic.aero":true,"air-traffic-control.aero":true,"ambulance.aero":true,"amusement.aero":true,"association.aero":true,"author.aero":true,"ballooning.aero":true,"broker.aero":true,"caa.aero":true,"cargo.aero":true,"catering.aero":true,"certification.aero":true,"championship.aero":true,"charter.aero":true,"civilaviation.aero":true,"club.aero":true,"conference.aero":true,"consultant.aero":true,"consulting.aero":true,"control.aero":true,"council.aero":true,"crew.aero":true,"design.aero":true,"dgca.aero":true,"educator.aero":true,"emergency.aero":true,"engine.aero":true,"engineer.aero":true,"entertainment.aero":true,"equipment.aero":true,"exchange.aero":true,"express.aero":true,"federation.aero":true,"flight.aero":true,"freight.aero":true,"fuel.aero":true,"gliding.aero":true,"government.aero":true,"groundhandling.aero":true,"group.aero":true,"hanggliding.aero":true,"homebuilt.aero":true,"insurance.aero":true,"journal.aero":true,"journalist.aero":true,"leasing.aero":true,"logistics.aero":true,"magazine.aero":true,"maintenance.aero":true,"marketplace.aero":true,"media.aero":true,"microlight.aero":true,"modelling.aero":true,"navigation.aero":true,"parachuting.aero":true,"paragliding.aero":true,"passenger-association.aero":true,"pilot.aero":true,"press.aero":true,"production.aero":true,"recreation.aero":true,"repbody.aero":true,"res.aero":true,"research.aero":true,"rotorcraft.aero":true,"safety.aero":true,"scientist.aero":true,"services.aero":true,"show.aero":true,"skydiving.aero":true,"software.aero":true,"student.aero":true,"taxi.aero":true,"trader.aero":true,"trading.aero":true,"trainer.aero":true,"union.aero":true,"workinggroup.aero":true,"works.aero":true,"af":true,"gov.af":true,"com.af":true,"org.af":true,"net.af":true,"edu.af":true,"ag":true,"com.ag":true,"org.ag":true,"net.ag":true,"co.ag":true,"nom.ag":true,"ai":true,"off.ai":true,"com.ai":true,"net.ai":true,"org.ai":true,"al":true,"com.al":true,"edu.al":true,"gov.al":true,"mil.al":true,"net.al":true,"org.al":true,"am":true,"an":true,"com.an":true,"net.an":true,"org.an":true,"edu.an":true,"ao":true,"ed.ao":true,"gv.ao":true,"og.ao":true,"co.ao":true,"pb.ao":true,"it.ao":true,"aq":true,"*.ar":true,"congresodelalengua3.ar":false,"educ.ar":false,"gobiernoelectronico.ar":false,"mecon.ar":false,"nacion.ar":false,"nic.ar":false,"promocion.ar":false,"retina.ar":false,"uba.ar":false,"e164.arpa":true,"in-addr.arpa":true,"ip6.arpa":true,"iris.arpa":true,"uri.arpa":true,"urn.arpa":true,"as":true,"gov.as":true,"asia":true,"at":true,"ac.at":true,"co.at":true,"gv.at":true,"or.at":true,"com.au":true,"net.au":true,"org.au":true,"edu.au":true,"gov.au":true,"csiro.au":true,"asn.au":true,"id.au":true,"info.au":true,"conf.au":true,"oz.au":true,"act.au":true,"nsw.au":true,"nt.au":true,"qld.au":true,"sa.au":true,"tas.au":true,"vic.au":true,"wa.au":true,"act.edu.au":true,"nsw.edu.au":true,"nt.edu.au":true,"qld.edu.au":true,"sa.edu.au":true,"tas.edu.au":true,"vic.edu.au":true,"wa.edu.au":true,"act.gov.au":true,"nt.gov.au":true,"qld.gov.au":true,"sa.gov.au":true,"tas.gov.au":true,"vic.gov.au":true,"wa.gov.au":true,"aw":true,"com.aw":true,"ax":true,"az":true,"com.az":true,"net.az":true,"int.az":true,"gov.az":true,"org.az":true,"edu.az":true,"info.az":true,"pp.az":true,"mil.az":true,"name.az":true,"pro.az":true,"biz.az":true,"ba":true,"org.ba":true,"net.ba":true,"edu.ba":true,"gov.ba":true,"mil.ba":true,"unsa.ba":true,"unbi.ba":true,"co.ba":true,"com.ba":true,"rs.ba":true,"bb":true,"biz.bb":true,"com.bb":true,"edu.bb":true,"gov.bb":true,"info.bb":true,"net.bb":true,"org.bb":true,"store.bb":true,"*.bd":true,"be":true,"ac.be":true,"bf":true,"gov.bf":true,"bg":true,"a.bg":true,"b.bg":true,"c.bg":true,"d.bg":true,"e.bg":true,"f.bg":true,"g.bg":true,"h.bg":true,"i.bg":true,"j.bg":true,"k.bg":true,"l.bg":true,"m.bg":true,"n.bg":true,"o.bg":true,"p.bg":true,"q.bg":true,"r.bg":true,"s.bg":true,"t.bg":true,"u.bg":true,"v.bg":true,"w.bg":true,"x.bg":true,"y.bg":true,"z.bg":true,"0.bg":true,"1.bg":true,"2.bg":true,"3.bg":true,"4.bg":true,"5.bg":true,"6.bg":true,"7.bg":true,"8.bg":true,"9.bg":true,"bh":true,"com.bh":true,"edu.bh":true,"net.bh":true,"org.bh":true,"gov.bh":true,"bi":true,"co.bi":true,"com.bi":true,"edu.bi":true,"or.bi":true,"org.bi":true,"biz":true,"bj":true,"asso.bj":true,"barreau.bj":true,"gouv.bj":true,"bm":true,"com.bm":true,"edu.bm":true,"gov.bm":true,"net.bm":true,"org.bm":true,"*.bn":true,"bo":true,"com.bo":true,"edu.bo":true,"gov.bo":true,"gob.bo":true,"int.bo":true,"org.bo":true,"net.bo":true,"mil.bo":true,"tv.bo":true,"br":true,"adm.br":true,"adv.br":true,"agr.br":true,"am.br":true,"arq.br":true,"art.br":true,"ato.br":true,"b.br":true,"bio.br":true,"blog.br":true,"bmd.br":true,"can.br":true,"cim.br":true,"cng.br":true,"cnt.br":true,"com.br":true,"coop.br":true,"ecn.br":true,"edu.br":true,"emp.br":true,"eng.br":true,"esp.br":true,"etc.br":true,"eti.br":true,"far.br":true,"flog.br":true,"fm.br":true,"fnd.br":true,"fot.br":true,"fst.br":true,"g12.br":true,"ggf.br":true,"gov.br":true,"imb.br":true,"ind.br":true,"inf.br":true,"jor.br":true,"jus.br":true,"lel.br":true,"mat.br":true,"med.br":true,"mil.br":true,"mus.br":true,"net.br":true,"nom.br":true,"not.br":true,"ntr.br":true,"odo.br":true,"org.br":true,"ppg.br":true,"pro.br":true,"psc.br":true,"psi.br":true,"qsl.br":true,"radio.br":true,"rec.br":true,"slg.br":true,"srv.br":true,"taxi.br":true,"teo.br":true,"tmp.br":true,"trd.br":true,"tur.br":true,"tv.br":true,"vet.br":true,"vlog.br":true,"wiki.br":true,"zlg.br":true,"bs":true,"com.bs":true,"net.bs":true,"org.bs":true,"edu.bs":true,"gov.bs":true,"bt":true,"com.bt":true,"edu.bt":true,"gov.bt":true,"net.bt":true,"org.bt":true,"bw":true,"co.bw":true,"org.bw":true,"by":true,"gov.by":true,"mil.by":true,"com.by":true,"of.by":true,"bz":true,"com.bz":true,"net.bz":true,"org.bz":true,"edu.bz":true,"gov.bz":true,"ca":true,"ab.ca":true,"bc.ca":true,"mb.ca":true,"nb.ca":true,"nf.ca":true,"nl.ca":true,"ns.ca":true,"nt.ca":true,"nu.ca":true,"on.ca":true,"pe.ca":true,"qc.ca":true,"sk.ca":true,"yk.ca":true,"gc.ca":true,"cat":true,"cc":true,"cd":true,"gov.cd":true,"cf":true,"cg":true,"ch":true,"ci":true,"org.ci":true,"or.ci":true,"com.ci":true,"co.ci":true,"edu.ci":true,"ed.ci":true,"ac.ci":true,"net.ci":true,"go.ci":true,"asso.ci":true,"xn--aroport-bya.ci":true,"int.ci":true,"presse.ci":true,"md.ci":true,"gouv.ci":true,"*.ck":true,"www.ck":false,"cl":true,"gov.cl":true,"gob.cl":true,"co.cl":true,"mil.cl":true,"cm":true,"gov.cm":true,"cn":true,"ac.cn":true,"com.cn":true,"edu.cn":true,"gov.cn":true,"net.cn":true,"org.cn":true,"mil.cn":true,"xn--55qx5d.cn":true,"xn--io0a7i.cn":true,"xn--od0alg.cn":true,"ah.cn":true,"bj.cn":true,"cq.cn":true,"fj.cn":true,"gd.cn":true,"gs.cn":true,"gz.cn":true,"gx.cn":true,"ha.cn":true,"hb.cn":true,"he.cn":true,"hi.cn":true,"hl.cn":true,"hn.cn":true,"jl.cn":true,"js.cn":true,"jx.cn":true,"ln.cn":true,"nm.cn":true,"nx.cn":true,"qh.cn":true,"sc.cn":true,"sd.cn":true,"sh.cn":true,"sn.cn":true,"sx.cn":true,"tj.cn":true,"xj.cn":true,"xz.cn":true,"yn.cn":true,"zj.cn":true,"hk.cn":true,"mo.cn":true,"tw.cn":true,"co":true,"arts.co":true,"com.co":true,"edu.co":true,"firm.co":true,"gov.co":true,"info.co":true,"int.co":true,"mil.co":true,"net.co":true,"nom.co":true,"org.co":true,"rec.co":true,"web.co":true,"com":true,"coop":true,"cr":true,"ac.cr":true,"co.cr":true,"ed.cr":true,"fi.cr":true,"go.cr":true,"or.cr":true,"sa.cr":true,"cu":true,"com.cu":true,"edu.cu":true,"org.cu":true,"net.cu":true,"gov.cu":true,"inf.cu":true,"cv":true,"cx":true,"gov.cx":true,"*.cy":true,"cz":true,"de":true,"dj":true,"dk":true,"dm":true,"com.dm":true,"net.dm":true,"org.dm":true,"edu.dm":true,"gov.dm":true,"do":true,"art.do":true,"com.do":true,"edu.do":true,"gob.do":true,"gov.do":true,"mil.do":true,"net.do":true,"org.do":true,"sld.do":true,"web.do":true,"dz":true,"com.dz":true,"org.dz":true,"net.dz":true,"gov.dz":true,"edu.dz":true,"asso.dz":true,"pol.dz":true,"art.dz":true,"ec":true,"com.ec":true,"info.ec":true,"net.ec":true,"fin.ec":true,"k12.ec":true,"med.ec":true,"pro.ec":true,"org.ec":true,"edu.ec":true,"gov.ec":true,"gob.ec":true,"mil.ec":true,"edu":true,"ee":true,"edu.ee":true,"gov.ee":true,"riik.ee":true,"lib.ee":true,"med.ee":true,"com.ee":true,"pri.ee":true,"aip.ee":true,"org.ee":true,"fie.ee":true,"eg":true,"com.eg":true,"edu.eg":true,"eun.eg":true,"gov.eg":true,"mil.eg":true,"name.eg":true,"net.eg":true,"org.eg":true,"sci.eg":true,"*.er":true,"es":true,"com.es":true,"nom.es":true,"org.es":true,"gob.es":true,"edu.es":true,"*.et":true,"eu":true,"fi":true,"aland.fi":true,"*.fj":true,"*.fk":true,"fm":true,"fo":true,"fr":true,"com.fr":true,"asso.fr":true,"nom.fr":true,"prd.fr":true,"presse.fr":true,"tm.fr":true,"aeroport.fr":true,"assedic.fr":true,"avocat.fr":true,"avoues.fr":true,"cci.fr":true,"chambagri.fr":true,"chirurgiens-dentistes.fr":true,"experts-comptables.fr":true,"geometre-expert.fr":true,"gouv.fr":true,"greta.fr":true,"huissier-justice.fr":true,"medecin.fr":true,"notaires.fr":true,"pharmacien.fr":true,"port.fr":true,"veterinaire.fr":true,"ga":true,"gd":true,"ge":true,"com.ge":true,"edu.ge":true,"gov.ge":true,"org.ge":true,"mil.ge":true,"net.ge":true,"pvt.ge":true,"gf":true,"gg":true,"co.gg":true,"org.gg":true,"net.gg":true,"sch.gg":true,"gov.gg":true,"gh":true,"com.gh":true,"edu.gh":true,"gov.gh":true,"org.gh":true,"mil.gh":true,"gi":true,"com.gi":true,"ltd.gi":true,"gov.gi":true,"mod.gi":true,"edu.gi":true,"org.gi":true,"gl":true,"gm":true,"ac.gn":true,"com.gn":true,"edu.gn":true,"gov.gn":true,"org.gn":true,"net.gn":true,"gov":true,"gp":true,"com.gp":true,"net.gp":true,"mobi.gp":true,"edu.gp":true,"org.gp":true,"asso.gp":true,"gq":true,"gr":true,"com.gr":true,"edu.gr":true,"net.gr":true,"org.gr":true,"gov.gr":true,"gs":true,"*.gt":true,"www.gt":false,"*.gu":true,"gw":true,"gy":true,"co.gy":true,"com.gy":true,"net.gy":true,"hk":true,"com.hk":true,"edu.hk":true,"gov.hk":true,"idv.hk":true,"net.hk":true,"org.hk":true,"xn--55qx5d.hk":true,"xn--wcvs22d.hk":true,"xn--lcvr32d.hk":true,"xn--mxtq1m.hk":true,"xn--gmqw5a.hk":true,"xn--ciqpn.hk":true,"xn--gmq050i.hk":true,"xn--zf0avx.hk":true,"xn--io0a7i.hk":true,"xn--mk0axi.hk":true,"xn--od0alg.hk":true,"xn--od0aq3b.hk":true,"xn--tn0ag.hk":true,"xn--uc0atv.hk":true,"xn--uc0ay4a.hk":true,"hm":true,"hn":true,"com.hn":true,"edu.hn":true,"org.hn":true,"net.hn":true,"mil.hn":true,"gob.hn":true,"hr":true,"iz.hr":true,"from.hr":true,"name.hr":true,"com.hr":true,"ht":true,"com.ht":true,"shop.ht":true,"firm.ht":true,"info.ht":true,"adult.ht":true,"net.ht":true,"pro.ht":true,"org.ht":true,"med.ht":true,"art.ht":true,"coop.ht":true,"pol.ht":true,"asso.ht":true,"edu.ht":true,"rel.ht":true,"gouv.ht":true,"perso.ht":true,"hu":true,"co.hu":true,"info.hu":true,"org.hu":true,"priv.hu":true,"sport.hu":true,"tm.hu":true,"2000.hu":true,"agrar.hu":true,"bolt.hu":true,"casino.hu":true,"city.hu":true,"erotica.hu":true,"erotika.hu":true,"film.hu":true,"forum.hu":true,"games.hu":true,"hotel.hu":true,"ingatlan.hu":true,"jogasz.hu":true,"konyvelo.hu":true,"lakas.hu":true,"media.hu":true,"news.hu":true,"reklam.hu":true,"sex.hu":true,"shop.hu":true,"suli.hu":true,"szex.hu":true,"tozsde.hu":true,"utazas.hu":true,"video.hu":true,"id":true,"ac.id":true,"co.id":true,"go.id":true,"mil.id":true,"net.id":true,"or.id":true,"sch.id":true,"web.id":true,"ie":true,"gov.ie":true,"*.il":true,"im":true,"co.im":true,"ltd.co.im":true,"plc.co.im":true,"net.im":true,"gov.im":true,"org.im":true,"nic.im":true,"ac.im":true,"in":true,"co.in":true,"firm.in":true,"net.in":true,"org.in":true,"gen.in":true,"ind.in":true,"nic.in":true,"ac.in":true,"edu.in":true,"res.in":true,"gov.in":true,"mil.in":true,"info":true,"int":true,"eu.int":true,"io":true,"com.io":true,"iq":true,"gov.iq":true,"edu.iq":true,"mil.iq":true,"com.iq":true,"org.iq":true,"net.iq":true,"ir":true,"ac.ir":true,"co.ir":true,"gov.ir":true,"id.ir":true,"net.ir":true,"org.ir":true,"sch.ir":true,"xn--mgba3a4f16a.ir":true,"xn--mgba3a4fra.ir":true,"is":true,"net.is":true,"com.is":true,"edu.is":true,"gov.is":true,"org.is":true,"int.is":true,"it":true,"gov.it":true,"edu.it":true,"agrigento.it":true,"ag.it":true,"alessandria.it":true,"al.it":true,"ancona.it":true,"an.it":true,"aosta.it":true,"aoste.it":true,"ao.it":true,"arezzo.it":true,"ar.it":true,"ascoli-piceno.it":true,"ascolipiceno.it":true,"ap.it":true,"asti.it":true,"at.it":true,"avellino.it":true,"av.it":true,"bari.it":true,"ba.it":true,"andria-barletta-trani.it":true,"andriabarlettatrani.it":true,"trani-barletta-andria.it":true,"tranibarlettaandria.it":true,"barletta-trani-andria.it":true,"barlettatraniandria.it":true,"andria-trani-barletta.it":true,"andriatranibarletta.it":true,"trani-andria-barletta.it":true,"traniandriabarletta.it":true,"bt.it":true,"belluno.it":true,"bl.it":true,"benevento.it":true,"bn.it":true,"bergamo.it":true,"bg.it":true,"biella.it":true,"bi.it":true,"bologna.it":true,"bo.it":true,"bolzano.it":true,"bozen.it":true,"balsan.it":true,"alto-adige.it":true,"altoadige.it":true,"suedtirol.it":true,"bz.it":true,"brescia.it":true,"bs.it":true,"brindisi.it":true,"br.it":true,"cagliari.it":true,"ca.it":true,"caltanissetta.it":true,"cl.it":true,"campobasso.it":true,"cb.it":true,"carboniaiglesias.it":true,"carbonia-iglesias.it":true,"iglesias-carbonia.it":true,"iglesiascarbonia.it":true,"ci.it":true,"caserta.it":true,"ce.it":true,"catania.it":true,"ct.it":true,"catanzaro.it":true,"cz.it":true,"chieti.it":true,"ch.it":true,"como.it":true,"co.it":true,"cosenza.it":true,"cs.it":true,"cremona.it":true,"cr.it":true,"crotone.it":true,"kr.it":true,"cuneo.it":true,"cn.it":true,"dell-ogliastra.it":true,"dellogliastra.it":true,"ogliastra.it":true,"og.it":true,"enna.it":true,"en.it":true,"ferrara.it":true,"fe.it":true,"fermo.it":true,"fm.it":true,"firenze.it":true,"florence.it":true,"fi.it":true,"foggia.it":true,"fg.it":true,"forli-cesena.it":true,"forlicesena.it":true,"cesena-forli.it":true,"cesenaforli.it":true,"fc.it":true,"frosinone.it":true,"fr.it":true,"genova.it":true,"genoa.it":true,"ge.it":true,"gorizia.it":true,"go.it":true,"grosseto.it":true,"gr.it":true,"imperia.it":true,"im.it":true,"isernia.it":true,"is.it":true,"laquila.it":true,"aquila.it":true,"aq.it":true,"la-spezia.it":true,"laspezia.it":true,"sp.it":true,"latina.it":true,"lt.it":true,"lecce.it":true,"le.it":true,"lecco.it":true,"lc.it":true,"livorno.it":true,"li.it":true,"lodi.it":true,"lo.it":true,"lucca.it":true,"lu.it":true,"macerata.it":true,"mc.it":true,"mantova.it":true,"mn.it":true,"massa-carrara.it":true,"massacarrara.it":true,"carrara-massa.it":true,"carraramassa.it":true,"ms.it":true,"matera.it":true,"mt.it":true,"medio-campidano.it":true,"mediocampidano.it":true,"campidano-medio.it":true,"campidanomedio.it":true,"vs.it":true,"messina.it":true,"me.it":true,"milano.it":true,"milan.it":true,"mi.it":true,"modena.it":true,"mo.it":true,"monza.it":true,"monza-brianza.it":true,"monzabrianza.it":true,"monzaebrianza.it":true,"monzaedellabrianza.it":true,"monza-e-della-brianza.it":true,"mb.it":true,"napoli.it":true,"naples.it":true,"na.it":true,"novara.it":true,"no.it":true,"nuoro.it":true,"nu.it":true,"oristano.it":true,"or.it":true,"padova.it":true,"padua.it":true,"pd.it":true,"palermo.it":true,"pa.it":true,"parma.it":true,"pr.it":true,"pavia.it":true,"pv.it":true,"perugia.it":true,"pg.it":true,"pescara.it":true,"pe.it":true,"pesaro-urbino.it":true,"pesarourbino.it":true,"urbino-pesaro.it":true,"urbinopesaro.it":true,"pu.it":true,"piacenza.it":true,"pc.it":true,"pisa.it":true,"pi.it":true,"pistoia.it":true,"pt.it":true,"pordenone.it":true,"pn.it":true,"potenza.it":true,"pz.it":true,"prato.it":true,"po.it":true,"ragusa.it":true,"rg.it":true,"ravenna.it":true,"ra.it":true,"reggio-calabria.it":true,"reggiocalabria.it":true,"rc.it":true,"reggio-emilia.it":true,"reggioemilia.it":true,"re.it":true,"rieti.it":true,"ri.it":true,"rimini.it":true,"rn.it":true,"roma.it":true,"rome.it":true,"rm.it":true,"rovigo.it":true,"ro.it":true,"salerno.it":true,"sa.it":true,"sassari.it":true,"ss.it":true,"savona.it":true,"sv.it":true,"siena.it":true,"si.it":true,"siracusa.it":true,"sr.it":true,"sondrio.it":true,"so.it":true,"taranto.it":true,"ta.it":true,"tempio-olbia.it":true,"tempioolbia.it":true,"olbia-tempio.it":true,"olbiatempio.it":true,"ot.it":true,"teramo.it":true,"te.it":true,"terni.it":true,"tr.it":true,"torino.it":true,"turin.it":true,"to.it":true,"trapani.it":true,"tp.it":true,"trento.it":true,"trentino.it":true,"tn.it":true,"treviso.it":true,"tv.it":true,"trieste.it":true,"ts.it":true,"udine.it":true,"ud.it":true,"varese.it":true,"va.it":true,"venezia.it":true,"venice.it":true,"ve.it":true,"verbania.it":true,"vb.it":true,"vercelli.it":true,"vc.it":true,"verona.it":true,"vr.it":true,"vibo-valentia.it":true,"vibovalentia.it":true,"vv.it":true,"vicenza.it":true,"vi.it":true,"viterbo.it":true,"vt.it":true,"je":true,"co.je":true,"org.je":true,"net.je":true,"sch.je":true,"gov.je":true,"*.jm":true,"jo":true,"com.jo":true,"org.jo":true,"net.jo":true,"edu.jo":true,"sch.jo":true,"gov.jo":true,"mil.jo":true,"name.jo":true,"jobs":true,"jp":true,"ac.jp":true,"ad.jp":true,"co.jp":true,"ed.jp":true,"go.jp":true,"gr.jp":true,"lg.jp":true,"ne.jp":true,"or.jp":true,"*.aichi.jp":true,"*.akita.jp":true,"*.aomori.jp":true,"*.chiba.jp":true,"*.ehime.jp":true,"*.fukui.jp":true,"*.fukuoka.jp":true,"*.fukushima.jp":true,"*.gifu.jp":true,"*.gunma.jp":true,"*.hiroshima.jp":true,"*.hokkaido.jp":true,"*.hyogo.jp":true,"*.ibaraki.jp":true,"*.ishikawa.jp":true,"*.iwate.jp":true,"*.kagawa.jp":true,"*.kagoshima.jp":true,"*.kanagawa.jp":true,"*.kawasaki.jp":true,"*.kitakyushu.jp":true,"*.kobe.jp":true,"*.kochi.jp":true,"*.kumamoto.jp":true,"*.kyoto.jp":true,"*.mie.jp":true,"*.miyagi.jp":true,"*.miyazaki.jp":true,"*.nagano.jp":true,"*.nagasaki.jp":true,"*.nagoya.jp":true,"*.nara.jp":true,"*.niigata.jp":true,"*.oita.jp":true,"*.okayama.jp":true,"*.okinawa.jp":true,"*.osaka.jp":true,"*.saga.jp":true,"*.saitama.jp":true,"*.sapporo.jp":true,"*.sendai.jp":true,"*.shiga.jp":true,"*.shimane.jp":true,"*.shizuoka.jp":true,"*.tochigi.jp":true,"*.tokushima.jp":true,"*.tokyo.jp":true,"*.tottori.jp":true,"*.toyama.jp":true,"*.wakayama.jp":true,"*.yamagata.jp":true,"*.yamaguchi.jp":true,"*.yamanashi.jp":true,"*.yokohama.jp":true,"metro.tokyo.jp":false,"pref.aichi.jp":false,"pref.akita.jp":false,"pref.aomori.jp":false,"pref.chiba.jp":false,"pref.ehime.jp":false,"pref.fukui.jp":false,"pref.fukuoka.jp":false,"pref.fukushima.jp":false,"pref.gifu.jp":false,"pref.gunma.jp":false,"pref.hiroshima.jp":false,"pref.hokkaido.jp":false,"pref.hyogo.jp":false,"pref.ibaraki.jp":false,"pref.ishikawa.jp":false,"pref.iwate.jp":false,"pref.kagawa.jp":false,"pref.kagoshima.jp":false,"pref.kanagawa.jp":false,"pref.kochi.jp":false,"pref.kumamoto.jp":false,"pref.kyoto.jp":false,"pref.mie.jp":false,"pref.miyagi.jp":false,"pref.miyazaki.jp":false,"pref.nagano.jp":false,"pref.nagasaki.jp":false,"pref.nara.jp":false,"pref.niigata.jp":false,"pref.oita.jp":false,"pref.okayama.jp":false,"pref.okinawa.jp":false,"pref.osaka.jp":false,"pref.saga.jp":false,"pref.saitama.jp":false,"pref.shiga.jp":false,"pref.shimane.jp":false,"pref.shizuoka.jp":false,"pref.tochigi.jp":false,"pref.tokushima.jp":false,"pref.tottori.jp":false,"pref.toyama.jp":false,"pref.wakayama.jp":false,"pref.yamagata.jp":false,"pref.yamaguchi.jp":false,"pref.yamanashi.jp":false,"city.chiba.jp":false,"city.fukuoka.jp":false,"city.hiroshima.jp":false,"city.kawasaki.jp":false,"city.kitakyushu.jp":false,"city.kobe.jp":false,"city.kyoto.jp":false,"city.nagoya.jp":false,"city.niigata.jp":false,"city.okayama.jp":false,"city.osaka.jp":false,"city.saitama.jp":false,"city.sapporo.jp":false,"city.sendai.jp":false,"city.shizuoka.jp":false,"city.yokohama.jp":false,"*.ke":true,"kg":true,"org.kg":true,"net.kg":true,"com.kg":true,"edu.kg":true,"gov.kg":true,"mil.kg":true,"*.kh":true,"ki":true,"edu.ki":true,"biz.ki":true,"net.ki":true,"org.ki":true,"gov.ki":true,"info.ki":true,"com.ki":true,"km":true,"org.km":true,"nom.km":true,"gov.km":true,"prd.km":true,"tm.km":true,"edu.km":true,"mil.km":true,"ass.km":true,"com.km":true,"coop.km":true,"asso.km":true,"presse.km":true,"medecin.km":true,"notaires.km":true,"pharmaciens.km":true,"veterinaire.km":true,"gouv.km":true,"kn":true,"net.kn":true,"org.kn":true,"edu.kn":true,"gov.kn":true,"com.kp":true,"edu.kp":true,"gov.kp":true,"org.kp":true,"rep.kp":true,"tra.kp":true,"kr":true,"ac.kr":true,"co.kr":true,"es.kr":true,"go.kr":true,"hs.kr":true,"kg.kr":true,"mil.kr":true,"ms.kr":true,"ne.kr":true,"or.kr":true,"pe.kr":true,"re.kr":true,"sc.kr":true,"busan.kr":true,"chungbuk.kr":true,"chungnam.kr":true,"daegu.kr":true,"daejeon.kr":true,"gangwon.kr":true,"gwangju.kr":true,"gyeongbuk.kr":true,"gyeonggi.kr":true,"gyeongnam.kr":true,"incheon.kr":true,"jeju.kr":true,"jeonbuk.kr":true,"jeonnam.kr":true,"seoul.kr":true,"ulsan.kr":true,"*.kw":true,"ky":true,"edu.ky":true,"gov.ky":true,"com.ky":true,"org.ky":true,"net.ky":true,"kz":true,"org.kz":true,"edu.kz":true,"net.kz":true,"gov.kz":true,"mil.kz":true,"com.kz":true,"la":true,"int.la":true,"net.la":true,"info.la":true,"edu.la":true,"gov.la":true,"per.la":true,"com.la":true,"org.la":true,"com.lb":true,"edu.lb":true,"gov.lb":true,"net.lb":true,"org.lb":true,"lc":true,"com.lc":true,"net.lc":true,"co.lc":true,"org.lc":true,"edu.lc":true,"gov.lc":true,"li":true,"lk":true,"gov.lk":true,"sch.lk":true,"net.lk":true,"int.lk":true,"com.lk":true,"org.lk":true,"edu.lk":true,"ngo.lk":true,"soc.lk":true,"web.lk":true,"ltd.lk":true,"assn.lk":true,"grp.lk":true,"hotel.lk":true,"com.lr":true,"edu.lr":true,"gov.lr":true,"org.lr":true,"net.lr":true,"ls":true,"co.ls":true,"org.ls":true,"lt":true,"gov.lt":true,"lu":true,"lv":true,"com.lv":true,"edu.lv":true,"gov.lv":true,"org.lv":true,"mil.lv":true,"id.lv":true,"net.lv":true,"asn.lv":true,"conf.lv":true,"ly":true,"com.ly":true,"net.ly":true,"gov.ly":true,"plc.ly":true,"edu.ly":true,"sch.ly":true,"med.ly":true,"org.ly":true,"id.ly":true,"ma":true,"co.ma":true,"net.ma":true,"gov.ma":true,"org.ma":true,"ac.ma":true,"press.ma":true,"mc":true,"tm.mc":true,"asso.mc":true,"md":true,"me":true,"co.me":true,"net.me":true,"org.me":true,"edu.me":true,"ac.me":true,"gov.me":true,"its.me":true,"priv.me":true,"mg":true,"org.mg":true,"nom.mg":true,"gov.mg":true,"prd.mg":true,"tm.mg":true,"edu.mg":true,"mil.mg":true,"com.mg":true,"mh":true,"mil":true,"mk":true,"com.mk":true,"org.mk":true,"net.mk":true,"edu.mk":true,"gov.mk":true,"inf.mk":true,"name.mk":true,"ml":true,"com.ml":true,"edu.ml":true,"gouv.ml":true,"gov.ml":true,"net.ml":true,"org.ml":true,"presse.ml":true,"*.mm":true,"mn":true,"gov.mn":true,"edu.mn":true,"org.mn":true,"mo":true,"com.mo":true,"net.mo":true,"org.mo":true,"edu.mo":true,"gov.mo":true,"mobi":true,"mp":true,"mq":true,"mr":true,"gov.mr":true,"ms":true,"*.mt":true,"mu":true,"com.mu":true,"net.mu":true,"org.mu":true,"gov.mu":true,"ac.mu":true,"co.mu":true,"or.mu":true,"museum":true,"academy.museum":true,"agriculture.museum":true,"air.museum":true,"airguard.museum":true,"alabama.museum":true,"alaska.museum":true,"amber.museum":true,"ambulance.museum":true,"american.museum":true,"americana.museum":true,"americanantiques.museum":true,"americanart.museum":true,"amsterdam.museum":true,"and.museum":true,"annefrank.museum":true,"anthro.museum":true,"anthropology.museum":true,"antiques.museum":true,"aquarium.museum":true,"arboretum.museum":true,"archaeological.museum":true,"archaeology.museum":true,"architecture.museum":true,"art.museum":true,"artanddesign.museum":true,"artcenter.museum":true,"artdeco.museum":true,"arteducation.museum":true,"artgallery.museum":true,"arts.museum":true,"artsandcrafts.museum":true,"asmatart.museum":true,"assassination.museum":true,"assisi.museum":true,"association.museum":true,"astronomy.museum":true,"atlanta.museum":true,"austin.museum":true,"australia.museum":true,"automotive.museum":true,"aviation.museum":true,"axis.museum":true,"badajoz.museum":true,"baghdad.museum":true,"bahn.museum":true,"bale.museum":true,"baltimore.museum":true,"barcelona.museum":true,"baseball.museum":true,"basel.museum":true,"baths.museum":true,"bauern.museum":true,"beauxarts.museum":true,"beeldengeluid.museum":true,"bellevue.museum":true,"bergbau.museum":true,"berkeley.museum":true,"berlin.museum":true,"bern.museum":true,"bible.museum":true,"bilbao.museum":true,"bill.museum":true,"birdart.museum":true,"birthplace.museum":true,"bonn.museum":true,"boston.museum":true,"botanical.museum":true,"botanicalgarden.museum":true,"botanicgarden.museum":true,"botany.museum":true,"brandywinevalley.museum":true,"brasil.museum":true,"bristol.museum":true,"british.museum":true,"britishcolumbia.museum":true,"broadcast.museum":true,"brunel.museum":true,"brussel.museum":true,"brussels.museum":true,"bruxelles.museum":true,"building.museum":true,"burghof.museum":true,"bus.museum":true,"bushey.museum":true,"cadaques.museum":true,"california.museum":true,"cambridge.museum":true,"can.museum":true,"canada.museum":true,"capebreton.museum":true,"carrier.museum":true,"cartoonart.museum":true,"casadelamoneda.museum":true,"castle.museum":true,"castres.museum":true,"celtic.museum":true,"center.museum":true,"chattanooga.museum":true,"cheltenham.museum":true,"chesapeakebay.museum":true,"chicago.museum":true,"children.museum":true,"childrens.museum":true,"childrensgarden.museum":true,"chiropractic.museum":true,"chocolate.museum":true,"christiansburg.museum":true,"cincinnati.museum":true,"cinema.museum":true,"circus.museum":true,"civilisation.museum":true,"civilization.museum":true,"civilwar.museum":true,"clinton.museum":true,"clock.museum":true,"coal.museum":true,"coastaldefence.museum":true,"cody.museum":true,"coldwar.museum":true,"collection.museum":true,"colonialwilliamsburg.museum":true,"coloradoplateau.museum":true,"columbia.museum":true,"columbus.museum":true,"communication.museum":true,"communications.museum":true,"community.museum":true,"computer.museum":true,"computerhistory.museum":true,"xn--comunicaes-v6a2o.museum":true,"contemporary.museum":true,"contemporaryart.museum":true,"convent.museum":true,"copenhagen.museum":true,"corporation.museum":true,"xn--correios-e-telecomunicaes-ghc29a.museum":true,"corvette.museum":true,"costume.museum":true,"countryestate.museum":true,"county.museum":true,"crafts.museum":true,"cranbrook.museum":true,"creation.museum":true,"cultural.museum":true,"culturalcenter.museum":true,"culture.museum":true,"cyber.museum":true,"cymru.museum":true,"dali.museum":true,"dallas.museum":true,"database.museum":true,"ddr.museum":true,"decorativearts.museum":true,"delaware.museum":true,"delmenhorst.museum":true,"denmark.museum":true,"depot.museum":true,"design.museum":true,"detroit.museum":true,"dinosaur.museum":true,"discovery.museum":true,"dolls.museum":true,"donostia.museum":true,"durham.museum":true,"eastafrica.museum":true,"eastcoast.museum":true,"education.museum":true,"educational.museum":true,"egyptian.museum":true,"eisenbahn.museum":true,"elburg.museum":true,"elvendrell.museum":true,"embroidery.museum":true,"encyclopedic.museum":true,"england.museum":true,"entomology.museum":true,"environment.museum":true,"environmentalconservation.museum":true,"epilepsy.museum":true,"essex.museum":true,"estate.museum":true,"ethnology.museum":true,"exeter.museum":true,"exhibition.museum":true,"family.museum":true,"farm.museum":true,"farmequipment.museum":true,"farmers.museum":true,"farmstead.museum":true,"field.museum":true,"figueres.museum":true,"filatelia.museum":true,"film.museum":true,"fineart.museum":true,"finearts.museum":true,"finland.museum":true,"flanders.museum":true,"florida.museum":true,"force.museum":true,"fortmissoula.museum":true,"fortworth.museum":true,"foundation.museum":true,"francaise.museum":true,"frankfurt.museum":true,"franziskaner.museum":true,"freemasonry.museum":true,"freiburg.museum":true,"fribourg.museum":true,"frog.museum":true,"fundacio.museum":true,"furniture.museum":true,"gallery.museum":true,"garden.museum":true,"gateway.museum":true,"geelvinck.museum":true,"gemological.museum":true,"geology.museum":true,"georgia.museum":true,"giessen.museum":true,"glas.museum":true,"glass.museum":true,"gorge.museum":true,"grandrapids.museum":true,"graz.museum":true,"guernsey.museum":true,"halloffame.museum":true,"hamburg.museum":true,"handson.museum":true,"harvestcelebration.museum":true,"hawaii.museum":true,"health.museum":true,"heimatunduhren.museum":true,"hellas.museum":true,"helsinki.museum":true,"hembygdsforbund.museum":true,"heritage.museum":true,"histoire.museum":true,"historical.museum":true,"historicalsociety.museum":true,"historichouses.museum":true,"historisch.museum":true,"historisches.museum":true,"history.museum":true,"historyofscience.museum":true,"horology.museum":true,"house.museum":true,"humanities.museum":true,"illustration.museum":true,"imageandsound.museum":true,"indian.museum":true,"indiana.museum":true,"indianapolis.museum":true,"indianmarket.museum":true,"intelligence.museum":true,"interactive.museum":true,"iraq.museum":true,"iron.museum":true,"isleofman.museum":true,"jamison.museum":true,"jefferson.museum":true,"jerusalem.museum":true,"jewelry.museum":true,"jewish.museum":true,"jewishart.museum":true,"jfk.museum":true,"journalism.museum":true,"judaica.museum":true,"judygarland.museum":true,"juedisches.museum":true,"juif.museum":true,"karate.museum":true,"karikatur.museum":true,"kids.museum":true,"koebenhavn.museum":true,"koeln.museum":true,"kunst.museum":true,"kunstsammlung.museum":true,"kunstunddesign.museum":true,"labor.museum":true,"labour.museum":true,"lajolla.museum":true,"lancashire.museum":true,"landes.museum":true,"lans.museum":true,"xn--lns-qla.museum":true,"larsson.museum":true,"lewismiller.museum":true,"lincoln.museum":true,"linz.museum":true,"living.museum":true,"livinghistory.museum":true,"localhistory.museum":true,"london.museum":true,"losangeles.museum":true,"louvre.museum":true,"loyalist.museum":true,"lucerne.museum":true,"luxembourg.museum":true,"luzern.museum":true,"mad.museum":true,"madrid.museum":true,"mallorca.museum":true,"manchester.museum":true,"mansion.museum":true,"mansions.museum":true,"manx.museum":true,"marburg.museum":true,"maritime.museum":true,"maritimo.museum":true,"maryland.museum":true,"marylhurst.museum":true,"media.museum":true,"medical.museum":true,"medizinhistorisches.museum":true,"meeres.museum":true,"memorial.museum":true,"mesaverde.museum":true,"michigan.museum":true,"midatlantic.museum":true,"military.museum":true,"mill.museum":true,"miners.museum":true,"mining.museum":true,"minnesota.museum":true,"missile.museum":true,"missoula.museum":true,"modern.museum":true,"moma.museum":true,"money.museum":true,"monmouth.museum":true,"monticello.museum":true,"montreal.museum":true,"moscow.museum":true,"motorcycle.museum":true,"muenchen.museum":true,"muenster.museum":true,"mulhouse.museum":true,"muncie.museum":true,"museet.museum":true,"museumcenter.museum":true,"museumvereniging.museum":true,"music.museum":true,"national.museum":true,"nationalfirearms.museum":true,"nationalheritage.museum":true,"nativeamerican.museum":true,"naturalhistory.museum":true,"naturalhistorymuseum.museum":true,"naturalsciences.museum":true,"nature.museum":true,"naturhistorisches.museum":true,"natuurwetenschappen.museum":true,"naumburg.museum":true,"naval.museum":true,"nebraska.museum":true,"neues.museum":true,"newhampshire.museum":true,"newjersey.museum":true,"newmexico.museum":true,"newport.museum":true,"newspaper.museum":true,"newyork.museum":true,"niepce.museum":true,"norfolk.museum":true,"north.museum":true,"nrw.museum":true,"nuernberg.museum":true,"nuremberg.museum":true,"nyc.museum":true,"nyny.museum":true,"oceanographic.museum":true,"oceanographique.museum":true,"omaha.museum":true,"online.museum":true,"ontario.museum":true,"openair.museum":true,"oregon.museum":true,"oregontrail.museum":true,"otago.museum":true,"oxford.museum":true,"pacific.museum":true,"paderborn.museum":true,"palace.museum":true,"paleo.museum":true,"palmsprings.museum":true,"panama.museum":true,"paris.museum":true,"pasadena.museum":true,"pharmacy.museum":true,"philadelphia.museum":true,"philadelphiaarea.museum":true,"philately.museum":true,"phoenix.museum":true,"photography.museum":true,"pilots.museum":true,"pittsburgh.museum":true,"planetarium.museum":true,"plantation.museum":true,"plants.museum":true,"plaza.museum":true,"portal.museum":true,"portland.museum":true,"portlligat.museum":true,"posts-and-telecommunications.museum":true,"preservation.museum":true,"presidio.museum":true,"press.museum":true,"project.museum":true,"public.museum":true,"pubol.museum":true,"quebec.museum":true,"railroad.museum":true,"railway.museum":true,"research.museum":true,"resistance.museum":true,"riodejaneiro.museum":true,"rochester.museum":true,"rockart.museum":true,"roma.museum":true,"russia.museum":true,"saintlouis.museum":true,"salem.museum":true,"salvadordali.museum":true,"salzburg.museum":true,"sandiego.museum":true,"sanfrancisco.museum":true,"santabarbara.museum":true,"santacruz.museum":true,"santafe.museum":true,"saskatchewan.museum":true,"satx.museum":true,"savannahga.museum":true,"schlesisches.museum":true,"schoenbrunn.museum":true,"schokoladen.museum":true,"school.museum":true,"schweiz.museum":true,"science.museum":true,"scienceandhistory.museum":true,"scienceandindustry.museum":true,"sciencecenter.museum":true,"sciencecenters.museum":true,"science-fiction.museum":true,"sciencehistory.museum":true,"sciences.museum":true,"sciencesnaturelles.museum":true,"scotland.museum":true,"seaport.museum":true,"settlement.museum":true,"settlers.museum":true,"shell.museum":true,"sherbrooke.museum":true,"sibenik.museum":true,"silk.museum":true,"ski.museum":true,"skole.museum":true,"society.museum":true,"sologne.museum":true,"soundandvision.museum":true,"southcarolina.museum":true,"southwest.museum":true,"space.museum":true,"spy.museum":true,"square.museum":true,"stadt.museum":true,"stalbans.museum":true,"starnberg.museum":true,"state.museum":true,"stateofdelaware.museum":true,"station.museum":true,"steam.museum":true,"steiermark.museum":true,"stjohn.museum":true,"stockholm.museum":true,"stpetersburg.museum":true,"stuttgart.museum":true,"suisse.museum":true,"surgeonshall.museum":true,"surrey.museum":true,"svizzera.museum":true,"sweden.museum":true,"sydney.museum":true,"tank.museum":true,"tcm.museum":true,"technology.museum":true,"telekommunikation.museum":true,"television.museum":true,"texas.museum":true,"textile.museum":true,"theater.museum":true,"time.museum":true,"timekeeping.museum":true,"topology.museum":true,"torino.museum":true,"touch.museum":true,"town.museum":true,"transport.museum":true,"tree.museum":true,"trolley.museum":true,"trust.museum":true,"trustee.museum":true,"uhren.museum":true,"ulm.museum":true,"undersea.museum":true,"university.museum":true,"usa.museum":true,"usantiques.museum":true,"usarts.museum":true,"uscountryestate.museum":true,"usculture.museum":true,"usdecorativearts.museum":true,"usgarden.museum":true,"ushistory.museum":true,"ushuaia.museum":true,"uslivinghistory.museum":true,"utah.museum":true,"uvic.museum":true,"valley.museum":true,"vantaa.museum":true,"versailles.museum":true,"viking.museum":true,"village.museum":true,"virginia.museum":true,"virtual.museum":true,"virtuel.museum":true,"vlaanderen.museum":true,"volkenkunde.museum":true,"wales.museum":true,"wallonie.museum":true,"war.museum":true,"washingtondc.museum":true,"watchandclock.museum":true,"watch-and-clock.museum":true,"western.museum":true,"westfalen.museum":true,"whaling.museum":true,"wildlife.museum":true,"williamsburg.museum":true,"windmill.museum":true,"workshop.museum":true,"york.museum":true,"yorkshire.museum":true,"yosemite.museum":true,"youth.museum":true,"zoological.museum":true,"zoology.museum":true,"xn--9dbhblg6di.museum":true,"xn--h1aegh.museum":true,"mv":true,"aero.mv":true,"biz.mv":true,"com.mv":true,"coop.mv":true,"edu.mv":true,"gov.mv":true,"info.mv":true,"int.mv":true,"mil.mv":true,"museum.mv":true,"name.mv":true,"net.mv":true,"org.mv":true,"pro.mv":true,"mw":true,"ac.mw":true,"biz.mw":true,"co.mw":true,"com.mw":true,"coop.mw":true,"edu.mw":true,"gov.mw":true,"int.mw":true,"museum.mw":true,"net.mw":true,"org.mw":true,"mx":true,"com.mx":true,"org.mx":true,"gob.mx":true,"edu.mx":true,"net.mx":true,"my":true,"com.my":true,"net.my":true,"org.my":true,"gov.my":true,"edu.my":true,"mil.my":true,"name.my":true,"*.mz":true,"na":true,"info.na":true,"pro.na":true,"name.na":true,"school.na":true,"or.na":true,"dr.na":true,"us.na":true,"mx.na":true,"ca.na":true,"in.na":true,"cc.na":true,"tv.na":true,"ws.na":true,"mobi.na":true,"co.na":true,"com.na":true,"org.na":true,"name":true,"nc":true,"asso.nc":true,"ne":true,"net":true,"nf":true,"com.nf":true,"net.nf":true,"per.nf":true,"rec.nf":true,"web.nf":true,"arts.nf":true,"firm.nf":true,"info.nf":true,"other.nf":true,"store.nf":true,"ac.ng":true,"com.ng":true,"edu.ng":true,"gov.ng":true,"net.ng":true,"org.ng":true,"*.ni":true,"nl":true,"bv.nl":true,"no":true,"fhs.no":true,"vgs.no":true,"fylkesbibl.no":true,"folkebibl.no":true,"museum.no":true,"idrett.no":true,"priv.no":true,"mil.no":true,"stat.no":true,"dep.no":true,"kommune.no":true,"herad.no":true,"aa.no":true,"ah.no":true,"bu.no":true,"fm.no":true,"hl.no":true,"hm.no":true,"jan-mayen.no":true,"mr.no":true,"nl.no":true,"nt.no":true,"of.no":true,"ol.no":true,"oslo.no":true,"rl.no":true,"sf.no":true,"st.no":true,"svalbard.no":true,"tm.no":true,"tr.no":true,"va.no":true,"vf.no":true,"gs.aa.no":true,"gs.ah.no":true,"gs.bu.no":true,"gs.fm.no":true,"gs.hl.no":true,"gs.hm.no":true,"gs.jan-mayen.no":true,"gs.mr.no":true,"gs.nl.no":true,"gs.nt.no":true,"gs.of.no":true,"gs.ol.no":true,"gs.oslo.no":true,"gs.rl.no":true,"gs.sf.no":true,"gs.st.no":true,"gs.svalbard.no":true,"gs.tm.no":true,"gs.tr.no":true,"gs.va.no":true,"gs.vf.no":true,"akrehamn.no":true,"xn--krehamn-dxa.no":true,"algard.no":true,"xn--lgrd-poac.no":true,"arna.no":true,"brumunddal.no":true,"bryne.no":true,"bronnoysund.no":true,"xn--brnnysund-m8ac.no":true,"drobak.no":true,"xn--drbak-wua.no":true,"egersund.no":true,"fetsund.no":true,"floro.no":true,"xn--flor-jra.no":true,"fredrikstad.no":true,"hokksund.no":true,"honefoss.no":true,"xn--hnefoss-q1a.no":true,"jessheim.no":true,"jorpeland.no":true,"xn--jrpeland-54a.no":true,"kirkenes.no":true,"kopervik.no":true,"krokstadelva.no":true,"langevag.no":true,"xn--langevg-jxa.no":true,"leirvik.no":true,"mjondalen.no":true,"xn--mjndalen-64a.no":true,"mo-i-rana.no":true,"mosjoen.no":true,"xn--mosjen-eya.no":true,"nesoddtangen.no":true,"orkanger.no":true,"osoyro.no":true,"xn--osyro-wua.no":true,"raholt.no":true,"xn--rholt-mra.no":true,"sandnessjoen.no":true,"xn--sandnessjen-ogb.no":true,"skedsmokorset.no":true,"slattum.no":true,"spjelkavik.no":true,"stathelle.no":true,"stavern.no":true,"stjordalshalsen.no":true,"xn--stjrdalshalsen-sqb.no":true,"tananger.no":true,"tranby.no":true,"vossevangen.no":true,"afjord.no":true,"xn--fjord-lra.no":true,"agdenes.no":true,"al.no":true,"xn--l-1fa.no":true,"alesund.no":true,"xn--lesund-hua.no":true,"alstahaug.no":true,"alta.no":true,"xn--lt-liac.no":true,"alaheadju.no":true,"xn--laheadju-7ya.no":true,"alvdal.no":true,"amli.no":true,"xn--mli-tla.no":true,"amot.no":true,"xn--mot-tla.no":true,"andebu.no":true,"andoy.no":true,"xn--andy-ira.no":true,"andasuolo.no":true,"ardal.no":true,"xn--rdal-poa.no":true,"aremark.no":true,"arendal.no":true,"xn--s-1fa.no":true,"aseral.no":true,"xn--seral-lra.no":true,"asker.no":true,"askim.no":true,"askvoll.no":true,"askoy.no":true,"xn--asky-ira.no":true,"asnes.no":true,"xn--snes-poa.no":true,"audnedaln.no":true,"aukra.no":true,"aure.no":true,"aurland.no":true,"aurskog-holand.no":true,"xn--aurskog-hland-jnb.no":true,"austevoll.no":true,"austrheim.no":true,"averoy.no":true,"xn--avery-yua.no":true,"balestrand.no":true,"ballangen.no":true,"balat.no":true,"xn--blt-elab.no":true,"balsfjord.no":true,"bahccavuotna.no":true,"xn--bhccavuotna-k7a.no":true,"bamble.no":true,"bardu.no":true,"beardu.no":true,"beiarn.no":true,"bajddar.no":true,"xn--bjddar-pta.no":true,"baidar.no":true,"xn--bidr-5nac.no":true,"berg.no":true,"bergen.no":true,"berlevag.no":true,"xn--berlevg-jxa.no":true,"bearalvahki.no":true,"xn--bearalvhki-y4a.no":true,"bindal.no":true,"birkenes.no":true,"bjarkoy.no":true,"xn--bjarky-fya.no":true,"bjerkreim.no":true,"bjugn.no":true,"bodo.no":true,"xn--bod-2na.no":true,"badaddja.no":true,"xn--bdddj-mrabd.no":true,"budejju.no":true,"bokn.no":true,"bremanger.no":true,"bronnoy.no":true,"xn--brnny-wuac.no":true,"bygland.no":true,"bykle.no":true,"barum.no":true,"xn--brum-voa.no":true,"bo.telemark.no":true,"xn--b-5ga.telemark.no":true,"bo.nordland.no":true,"xn--b-5ga.nordland.no":true,"bievat.no":true,"xn--bievt-0qa.no":true,"bomlo.no":true,"xn--bmlo-gra.no":true,"batsfjord.no":true,"xn--btsfjord-9za.no":true,"bahcavuotna.no":true,"xn--bhcavuotna-s4a.no":true,"dovre.no":true,"drammen.no":true,"drangedal.no":true,"dyroy.no":true,"xn--dyry-ira.no":true,"donna.no":true,"xn--dnna-gra.no":true,"eid.no":true,"eidfjord.no":true,"eidsberg.no":true,"eidskog.no":true,"eidsvoll.no":true,"eigersund.no":true,"elverum.no":true,"enebakk.no":true,"engerdal.no":true,"etne.no":true,"etnedal.no":true,"evenes.no":true,"evenassi.no":true,"xn--eveni-0qa01ga.no":true,"evje-og-hornnes.no":true,"farsund.no":true,"fauske.no":true,"fuossko.no":true,"fuoisku.no":true,"fedje.no":true,"fet.no":true,"finnoy.no":true,"xn--finny-yua.no":true,"fitjar.no":true,"fjaler.no":true,"fjell.no":true,"flakstad.no":true,"flatanger.no":true,"flekkefjord.no":true,"flesberg.no":true,"flora.no":true,"fla.no":true,"xn--fl-zia.no":true,"folldal.no":true,"forsand.no":true,"fosnes.no":true,"frei.no":true,"frogn.no":true,"froland.no":true,"frosta.no":true,"frana.no":true,"xn--frna-woa.no":true,"froya.no":true,"xn--frya-hra.no":true,"fusa.no":true,"fyresdal.no":true,"forde.no":true,"xn--frde-gra.no":true,"gamvik.no":true,"gangaviika.no":true,"xn--ggaviika-8ya47h.no":true,"gaular.no":true,"gausdal.no":true,"gildeskal.no":true,"xn--gildeskl-g0a.no":true,"giske.no":true,"gjemnes.no":true,"gjerdrum.no":true,"gjerstad.no":true,"gjesdal.no":true,"gjovik.no":true,"xn--gjvik-wua.no":true,"gloppen.no":true,"gol.no":true,"gran.no":true,"grane.no":true,"granvin.no":true,"gratangen.no":true,"grimstad.no":true,"grong.no":true,"kraanghke.no":true,"xn--kranghke-b0a.no":true,"grue.no":true,"gulen.no":true,"hadsel.no":true,"halden.no":true,"halsa.no":true,"hamar.no":true,"hamaroy.no":true,"habmer.no":true,"xn--hbmer-xqa.no":true,"hapmir.no":true,"xn--hpmir-xqa.no":true,"hammerfest.no":true,"hammarfeasta.no":true,"xn--hmmrfeasta-s4ac.no":true,"haram.no":true,"hareid.no":true,"harstad.no":true,"hasvik.no":true,"aknoluokta.no":true,"xn--koluokta-7ya57h.no":true,"hattfjelldal.no":true,"aarborte.no":true,"haugesund.no":true,"hemne.no":true,"hemnes.no":true,"hemsedal.no":true,"heroy.more-og-romsdal.no":true,"xn--hery-ira.xn--mre-og-romsdal-qqb.no":true,"heroy.nordland.no":true,"xn--hery-ira.nordland.no":true,"hitra.no":true,"hjartdal.no":true,"hjelmeland.no":true,"hobol.no":true,"xn--hobl-ira.no":true,"hof.no":true,"hol.no":true,"hole.no":true,"holmestrand.no":true,"holtalen.no":true,"xn--holtlen-hxa.no":true,"hornindal.no":true,"horten.no":true,"hurdal.no":true,"hurum.no":true,"hvaler.no":true,"hyllestad.no":true,"hagebostad.no":true,"xn--hgebostad-g3a.no":true,"hoyanger.no":true,"xn--hyanger-q1a.no":true,"hoylandet.no":true,"xn--hylandet-54a.no":true,"ha.no":true,"xn--h-2fa.no":true,"ibestad.no":true,"inderoy.no":true,"xn--indery-fya.no":true,"iveland.no":true,"jevnaker.no":true,"jondal.no":true,"jolster.no":true,"xn--jlster-bya.no":true,"karasjok.no":true,"karasjohka.no":true,"xn--krjohka-hwab49j.no":true,"karlsoy.no":true,"galsa.no":true,"xn--gls-elac.no":true,"karmoy.no":true,"xn--karmy-yua.no":true,"kautokeino.no":true,"guovdageaidnu.no":true,"klepp.no":true,"klabu.no":true,"xn--klbu-woa.no":true,"kongsberg.no":true,"kongsvinger.no":true,"kragero.no":true,"xn--krager-gya.no":true,"kristiansand.no":true,"kristiansund.no":true,"krodsherad.no":true,"xn--krdsherad-m8a.no":true,"kvalsund.no":true,"rahkkeravju.no":true,"xn--rhkkervju-01af.no":true,"kvam.no":true,"kvinesdal.no":true,"kvinnherad.no":true,"kviteseid.no":true,"kvitsoy.no":true,"xn--kvitsy-fya.no":true,"kvafjord.no":true,"xn--kvfjord-nxa.no":true,"giehtavuoatna.no":true,"kvanangen.no":true,"xn--kvnangen-k0a.no":true,"navuotna.no":true,"xn--nvuotna-hwa.no":true,"kafjord.no":true,"xn--kfjord-iua.no":true,"gaivuotna.no":true,"xn--givuotna-8ya.no":true,"larvik.no":true,"lavangen.no":true,"lavagis.no":true,"loabat.no":true,"xn--loabt-0qa.no":true,"lebesby.no":true,"davvesiida.no":true,"leikanger.no":true,"leirfjord.no":true,"leka.no":true,"leksvik.no":true,"lenvik.no":true,"leangaviika.no":true,"xn--leagaviika-52b.no":true,"lesja.no":true,"levanger.no":true,"lier.no":true,"lierne.no":true,"lillehammer.no":true,"lillesand.no":true,"lindesnes.no":true,"lindas.no":true,"xn--linds-pra.no":true,"lom.no":true,"loppa.no":true,"lahppi.no":true,"xn--lhppi-xqa.no":true,"lund.no":true,"lunner.no":true,"luroy.no":true,"xn--lury-ira.no":true,"luster.no":true,"lyngdal.no":true,"lyngen.no":true,"ivgu.no":true,"lardal.no":true,"lerdal.no":true,"xn--lrdal-sra.no":true,"lodingen.no":true,"xn--ldingen-q1a.no":true,"lorenskog.no":true,"xn--lrenskog-54a.no":true,"loten.no":true,"xn--lten-gra.no":true,"malvik.no":true,"masoy.no":true,"xn--msy-ula0h.no":true,"muosat.no":true,"xn--muost-0qa.no":true,"mandal.no":true,"marker.no":true,"marnardal.no":true,"masfjorden.no":true,"meland.no":true,"meldal.no":true,"melhus.no":true,"meloy.no":true,"xn--mely-ira.no":true,"meraker.no":true,"xn--merker-kua.no":true,"moareke.no":true,"xn--moreke-jua.no":true,"midsund.no":true,"midtre-gauldal.no":true,"modalen.no":true,"modum.no":true,"molde.no":true,"moskenes.no":true,"moss.no":true,"mosvik.no":true,"malselv.no":true,"xn--mlselv-iua.no":true,"malatvuopmi.no":true,"xn--mlatvuopmi-s4a.no":true,"namdalseid.no":true,"aejrie.no":true,"namsos.no":true,"namsskogan.no":true,"naamesjevuemie.no":true,"xn--nmesjevuemie-tcba.no":true,"laakesvuemie.no":true,"nannestad.no":true,"narvik.no":true,"narviika.no":true,"naustdal.no":true,"nedre-eiker.no":true,"nes.akershus.no":true,"nes.buskerud.no":true,"nesna.no":true,"nesodden.no":true,"nesseby.no":true,"unjarga.no":true,"xn--unjrga-rta.no":true,"nesset.no":true,"nissedal.no":true,"nittedal.no":true,"nord-aurdal.no":true,"nord-fron.no":true,"nord-odal.no":true,"norddal.no":true,"nordkapp.no":true,"davvenjarga.no":true,"xn--davvenjrga-y4a.no":true,"nordre-land.no":true,"nordreisa.no":true,"raisa.no":true,"xn--risa-5na.no":true,"nore-og-uvdal.no":true,"notodden.no":true,"naroy.no":true,"xn--nry-yla5g.no":true,"notteroy.no":true,"xn--nttery-byae.no":true,"odda.no":true,"oksnes.no":true,"xn--ksnes-uua.no":true,"oppdal.no":true,"oppegard.no":true,"xn--oppegrd-ixa.no":true,"orkdal.no":true,"orland.no":true,"xn--rland-uua.no":true,"orskog.no":true,"xn--rskog-uua.no":true,"orsta.no":true,"xn--rsta-fra.no":true,"os.hedmark.no":true,"os.hordaland.no":true,"osen.no":true,"osteroy.no":true,"xn--ostery-fya.no":true,"ostre-toten.no":true,"xn--stre-toten-zcb.no":true,"overhalla.no":true,"ovre-eiker.no":true,"xn--vre-eiker-k8a.no":true,"oyer.no":true,"xn--yer-zna.no":true,"oygarden.no":true,"xn--ygarden-p1a.no":true,"oystre-slidre.no":true,"xn--ystre-slidre-ujb.no":true,"porsanger.no":true,"porsangu.no":true,"xn--porsgu-sta26f.no":true,"porsgrunn.no":true,"radoy.no":true,"xn--rady-ira.no":true,"rakkestad.no":true,"rana.no":true,"ruovat.no":true,"randaberg.no":true,"rauma.no":true,"rendalen.no":true,"rennebu.no":true,"rennesoy.no":true,"xn--rennesy-v1a.no":true,"rindal.no":true,"ringebu.no":true,"ringerike.no":true,"ringsaker.no":true,"rissa.no":true,"risor.no":true,"xn--risr-ira.no":true,"roan.no":true,"rollag.no":true,"rygge.no":true,"ralingen.no":true,"xn--rlingen-mxa.no":true,"rodoy.no":true,"xn--rdy-0nab.no":true,"romskog.no":true,"xn--rmskog-bya.no":true,"roros.no":true,"xn--rros-gra.no":true,"rost.no":true,"xn--rst-0na.no":true,"royken.no":true,"xn--ryken-vua.no":true,"royrvik.no":true,"xn--ryrvik-bya.no":true,"rade.no":true,"xn--rde-ula.no":true,"salangen.no":true,"siellak.no":true,"saltdal.no":true,"salat.no":true,"xn--slt-elab.no":true,"xn--slat-5na.no":true,"samnanger.no":true,"sande.more-og-romsdal.no":true,"sande.xn--mre-og-romsdal-qqb.no":true,"sande.vestfold.no":true,"sandefjord.no":true,"sandnes.no":true,"sandoy.no":true,"xn--sandy-yua.no":true,"sarpsborg.no":true,"sauda.no":true,"sauherad.no":true,"sel.no":true,"selbu.no":true,"selje.no":true,"seljord.no":true,"sigdal.no":true,"siljan.no":true,"sirdal.no":true,"skaun.no":true,"skedsmo.no":true,"ski.no":true,"skien.no":true,"skiptvet.no":true,"skjervoy.no":true,"xn--skjervy-v1a.no":true,"skierva.no":true,"xn--skierv-uta.no":true,"skjak.no":true,"xn--skjk-soa.no":true,"skodje.no":true,"skanland.no":true,"xn--sknland-fxa.no":true,"skanit.no":true,"xn--sknit-yqa.no":true,"smola.no":true,"xn--smla-hra.no":true,"snillfjord.no":true,"snasa.no":true,"xn--snsa-roa.no":true,"snoasa.no":true,"snaase.no":true,"xn--snase-nra.no":true,"sogndal.no":true,"sokndal.no":true,"sola.no":true,"solund.no":true,"songdalen.no":true,"sortland.no":true,"spydeberg.no":true,"stange.no":true,"stavanger.no":true,"steigen.no":true,"steinkjer.no":true,"stjordal.no":true,"xn--stjrdal-s1a.no":true,"stokke.no":true,"stor-elvdal.no":true,"stord.no":true,"stordal.no":true,"storfjord.no":true,"omasvuotna.no":true,"strand.no":true,"stranda.no":true,"stryn.no":true,"sula.no":true,"suldal.no":true,"sund.no":true,"sunndal.no":true,"surnadal.no":true,"sveio.no":true,"svelvik.no":true,"sykkylven.no":true,"sogne.no":true,"xn--sgne-gra.no":true,"somna.no":true,"xn--smna-gra.no":true,"sondre-land.no":true,"xn--sndre-land-0cb.no":true,"sor-aurdal.no":true,"xn--sr-aurdal-l8a.no":true,"sor-fron.no":true,"xn--sr-fron-q1a.no":true,"sor-odal.no":true,"xn--sr-odal-q1a.no":true,"sor-varanger.no":true,"xn--sr-varanger-ggb.no":true,"matta-varjjat.no":true,"xn--mtta-vrjjat-k7af.no":true,"sorfold.no":true,"xn--srfold-bya.no":true,"sorreisa.no":true,"xn--srreisa-q1a.no":true,"sorum.no":true,"xn--srum-gra.no":true,"tana.no":true,"deatnu.no":true,"time.no":true,"tingvoll.no":true,"tinn.no":true,"tjeldsund.no":true,"dielddanuorri.no":true,"tjome.no":true,"xn--tjme-hra.no":true,"tokke.no":true,"tolga.no":true,"torsken.no":true,"tranoy.no":true,"xn--trany-yua.no":true,"tromso.no":true,"xn--troms-zua.no":true,"tromsa.no":true,"romsa.no":true,"trondheim.no":true,"troandin.no":true,"trysil.no":true,"trana.no":true,"xn--trna-woa.no":true,"trogstad.no":true,"xn--trgstad-r1a.no":true,"tvedestrand.no":true,"tydal.no":true,"tynset.no":true,"tysfjord.no":true,"divtasvuodna.no":true,"divttasvuotna.no":true,"tysnes.no":true,"tysvar.no":true,"xn--tysvr-vra.no":true,"tonsberg.no":true,"xn--tnsberg-q1a.no":true,"ullensaker.no":true,"ullensvang.no":true,"ulvik.no":true,"utsira.no":true,"vadso.no":true,"xn--vads-jra.no":true,"cahcesuolo.no":true,"xn--hcesuolo-7ya35b.no":true,"vaksdal.no":true,"valle.no":true,"vang.no":true,"vanylven.no":true,"vardo.no":true,"xn--vard-jra.no":true,"varggat.no":true,"xn--vrggt-xqad.no":true,"vefsn.no":true,"vaapste.no":true,"vega.no":true,"vegarshei.no":true,"xn--vegrshei-c0a.no":true,"vennesla.no":true,"verdal.no":true,"verran.no":true,"vestby.no":true,"vestnes.no":true,"vestre-slidre.no":true,"vestre-toten.no":true,"vestvagoy.no":true,"xn--vestvgy-ixa6o.no":true,"vevelstad.no":true,"vik.no":true,"vikna.no":true,"vindafjord.no":true,"volda.no":true,"voss.no":true,"varoy.no":true,"xn--vry-yla5g.no":true,"vagan.no":true,"xn--vgan-qoa.no":true,"voagat.no":true,"vagsoy.no":true,"xn--vgsy-qoa0j.no":true,"vaga.no":true,"xn--vg-yiab.no":true,"valer.ostfold.no":true,"xn--vler-qoa.xn--stfold-9xa.no":true,"valer.hedmark.no":true,"xn--vler-qoa.hedmark.no":true,"*.np":true,"nr":true,"biz.nr":true,"info.nr":true,"gov.nr":true,"edu.nr":true,"org.nr":true,"net.nr":true,"com.nr":true,"nu":true,"*.nz":true,"*.om":true,"mediaphone.om":false,"nawrastelecom.om":false,"nawras.om":false,"omanmobile.om":false,"omanpost.om":false,"omantel.om":false,"rakpetroleum.om":false,"siemens.om":false,"songfest.om":false,"statecouncil.om":false,"org":true,"pa":true,"ac.pa":true,"gob.pa":true,"com.pa":true,"org.pa":true,"sld.pa":true,"edu.pa":true,"net.pa":true,"ing.pa":true,"abo.pa":true,"med.pa":true,"nom.pa":true,"pe":true,"edu.pe":true,"gob.pe":true,"nom.pe":true,"mil.pe":true,"org.pe":true,"com.pe":true,"net.pe":true,"pf":true,"com.pf":true,"org.pf":true,"edu.pf":true,"*.pg":true,"ph":true,"com.ph":true,"net.ph":true,"org.ph":true,"gov.ph":true,"edu.ph":true,"ngo.ph":true,"mil.ph":true,"i.ph":true,"pk":true,"com.pk":true,"net.pk":true,"edu.pk":true,"org.pk":true,"fam.pk":true,"biz.pk":true,"web.pk":true,"gov.pk":true,"gob.pk":true,"gok.pk":true,"gon.pk":true,"gop.pk":true,"gos.pk":true,"info.pk":true,"pl":true,"aid.pl":true,"agro.pl":true,"atm.pl":true,"auto.pl":true,"biz.pl":true,"com.pl":true,"edu.pl":true,"gmina.pl":true,"gsm.pl":true,"info.pl":true,"mail.pl":true,"miasta.pl":true,"media.pl":true,"mil.pl":true,"net.pl":true,"nieruchomosci.pl":true,"nom.pl":true,"org.pl":true,"pc.pl":true,"powiat.pl":true,"priv.pl":true,"realestate.pl":true,"rel.pl":true,"sex.pl":true,"shop.pl":true,"sklep.pl":true,"sos.pl":true,"szkola.pl":true,"targi.pl":true,"tm.pl":true,"tourism.pl":true,"travel.pl":true,"turystyka.pl":true,"6bone.pl":true,"art.pl":true,"mbone.pl":true,"gov.pl":true,"uw.gov.pl":true,"um.gov.pl":true,"ug.gov.pl":true,"upow.gov.pl":true,"starostwo.gov.pl":true,"so.gov.pl":true,"sr.gov.pl":true,"po.gov.pl":true,"pa.gov.pl":true,"ngo.pl":true,"irc.pl":true,"usenet.pl":true,"augustow.pl":true,"babia-gora.pl":true,"bedzin.pl":true,"beskidy.pl":true,"bialowieza.pl":true,"bialystok.pl":true,"bielawa.pl":true,"bieszczady.pl":true,"boleslawiec.pl":true,"bydgoszcz.pl":true,"bytom.pl":true,"cieszyn.pl":true,"czeladz.pl":true,"czest.pl":true,"dlugoleka.pl":true,"elblag.pl":true,"elk.pl":true,"glogow.pl":true,"gniezno.pl":true,"gorlice.pl":true,"grajewo.pl":true,"ilawa.pl":true,"jaworzno.pl":true,"jelenia-gora.pl":true,"jgora.pl":true,"kalisz.pl":true,"kazimierz-dolny.pl":true,"karpacz.pl":true,"kartuzy.pl":true,"kaszuby.pl":true,"katowice.pl":true,"kepno.pl":true,"ketrzyn.pl":true,"klodzko.pl":true,"kobierzyce.pl":true,"kolobrzeg.pl":true,"konin.pl":true,"konskowola.pl":true,"kutno.pl":true,"lapy.pl":true,"lebork.pl":true,"legnica.pl":true,"lezajsk.pl":true,"limanowa.pl":true,"lomza.pl":true,"lowicz.pl":true,"lubin.pl":true,"lukow.pl":true,"malbork.pl":true,"malopolska.pl":true,"mazowsze.pl":true,"mazury.pl":true,"mielec.pl":true,"mielno.pl":true,"mragowo.pl":true,"naklo.pl":true,"nowaruda.pl":true,"nysa.pl":true,"olawa.pl":true,"olecko.pl":true,"olkusz.pl":true,"olsztyn.pl":true,"opoczno.pl":true,"opole.pl":true,"ostroda.pl":true,"ostroleka.pl":true,"ostrowiec.pl":true,"ostrowwlkp.pl":true,"pila.pl":true,"pisz.pl":true,"podhale.pl":true,"podlasie.pl":true,"polkowice.pl":true,"pomorze.pl":true,"pomorskie.pl":true,"prochowice.pl":true,"pruszkow.pl":true,"przeworsk.pl":true,"pulawy.pl":true,"radom.pl":true,"rawa-maz.pl":true,"rybnik.pl":true,"rzeszow.pl":true,"sanok.pl":true,"sejny.pl":true,"siedlce.pl":true,"slask.pl":true,"slupsk.pl":true,"sosnowiec.pl":true,"stalowa-wola.pl":true,"skoczow.pl":true,"starachowice.pl":true,"stargard.pl":true,"suwalki.pl":true,"swidnica.pl":true,"swiebodzin.pl":true,"swinoujscie.pl":true,"szczecin.pl":true,"szczytno.pl":true,"tarnobrzeg.pl":true,"tgory.pl":true,"turek.pl":true,"tychy.pl":true,"ustka.pl":true,"walbrzych.pl":true,"warmia.pl":true,"warszawa.pl":true,"waw.pl":true,"wegrow.pl":true,"wielun.pl":true,"wlocl.pl":true,"wloclawek.pl":true,"wodzislaw.pl":true,"wolomin.pl":true,"wroclaw.pl":true,"zachpomor.pl":true,"zagan.pl":true,"zarow.pl":true,"zgora.pl":true,"zgorzelec.pl":true,"gda.pl":true,"gdansk.pl":true,"gdynia.pl":true,"med.pl":true,"sopot.pl":true,"gliwice.pl":true,"krakow.pl":true,"poznan.pl":true,"wroc.pl":true,"zakopane.pl":true,"pm":true,"pn":true,"gov.pn":true,"co.pn":true,"org.pn":true,"edu.pn":true,"net.pn":true,"pr":true,"com.pr":true,"net.pr":true,"org.pr":true,"gov.pr":true,"edu.pr":true,"isla.pr":true,"pro.pr":true,"biz.pr":true,"info.pr":true,"name.pr":true,"est.pr":true,"prof.pr":true,"ac.pr":true,"pro":true,"aca.pro":true,"bar.pro":true,"cpa.pro":true,"jur.pro":true,"law.pro":true,"med.pro":true,"eng.pro":true,"ps":true,"edu.ps":true,"gov.ps":true,"sec.ps":true,"plo.ps":true,"com.ps":true,"org.ps":true,"net.ps":true,"pt":true,"net.pt":true,"gov.pt":true,"org.pt":true,"edu.pt":true,"int.pt":true,"publ.pt":true,"com.pt":true,"nome.pt":true,"pw":true,"co.pw":true,"ne.pw":true,"or.pw":true,"ed.pw":true,"go.pw":true,"belau.pw":true,"*.py":true,"qa":true,"com.qa":true,"edu.qa":true,"gov.qa":true,"mil.qa":true,"name.qa":true,"net.qa":true,"org.qa":true,"sch.qa":true,"re":true,"com.re":true,"asso.re":true,"nom.re":true,"ro":true,"com.ro":true,"org.ro":true,"tm.ro":true,"nt.ro":true,"nom.ro":true,"info.ro":true,"rec.ro":true,"arts.ro":true,"firm.ro":true,"store.ro":true,"www.ro":true,"rs":true,"co.rs":true,"org.rs":true,"edu.rs":true,"ac.rs":true,"gov.rs":true,"in.rs":true,"ru":true,"ac.ru":true,"com.ru":true,"edu.ru":true,"int.ru":true,"net.ru":true,"org.ru":true,"pp.ru":true,"adygeya.ru":true,"altai.ru":true,"amur.ru":true,"arkhangelsk.ru":true,"astrakhan.ru":true,"bashkiria.ru":true,"belgorod.ru":true,"bir.ru":true,"bryansk.ru":true,"buryatia.ru":true,"cbg.ru":true,"chel.ru":true,"chelyabinsk.ru":true,"chita.ru":true,"chukotka.ru":true,"chuvashia.ru":true,"dagestan.ru":true,"dudinka.ru":true,"e-burg.ru":true,"grozny.ru":true,"irkutsk.ru":true,"ivanovo.ru":true,"izhevsk.ru":true,"jar.ru":true,"joshkar-ola.ru":true,"kalmykia.ru":true,"kaluga.ru":true,"kamchatka.ru":true,"karelia.ru":true,"kazan.ru":true,"kchr.ru":true,"kemerovo.ru":true,"khabarovsk.ru":true,"khakassia.ru":true,"khv.ru":true,"kirov.ru":true,"koenig.ru":true,"komi.ru":true,"kostroma.ru":true,"krasnoyarsk.ru":true,"kuban.ru":true,"kurgan.ru":true,"kursk.ru":true,"lipetsk.ru":true,"magadan.ru":true,"mari.ru":true,"mari-el.ru":true,"marine.ru":true,"mordovia.ru":true,"mosreg.ru":true,"msk.ru":true,"murmansk.ru":true,"nalchik.ru":true,"nnov.ru":true,"nov.ru":true,"novosibirsk.ru":true,"nsk.ru":true,"omsk.ru":true,"orenburg.ru":true,"oryol.ru":true,"palana.ru":true,"penza.ru":true,"perm.ru":true,"pskov.ru":true,"ptz.ru":true,"rnd.ru":true,"ryazan.ru":true,"sakhalin.ru":true,"samara.ru":true,"saratov.ru":true,"simbirsk.ru":true,"smolensk.ru":true,"spb.ru":true,"stavropol.ru":true,"stv.ru":true,"surgut.ru":true,"tambov.ru":true,"tatarstan.ru":true,"tom.ru":true,"tomsk.ru":true,"tsaritsyn.ru":true,"tsk.ru":true,"tula.ru":true,"tuva.ru":true,"tver.ru":true,"tyumen.ru":true,"udm.ru":true,"udmurtia.ru":true,"ulan-ude.ru":true,"vladikavkaz.ru":true,"vladimir.ru":true,"vladivostok.ru":true,"volgograd.ru":true,"vologda.ru":true,"voronezh.ru":true,"vrn.ru":true,"vyatka.ru":true,"yakutia.ru":true,"yamal.ru":true,"yaroslavl.ru":true,"yekaterinburg.ru":true,"yuzhno-sakhalinsk.ru":true,"amursk.ru":true,"baikal.ru":true,"cmw.ru":true,"fareast.ru":true,"jamal.ru":true,"kms.ru":true,"k-uralsk.ru":true,"kustanai.ru":true,"kuzbass.ru":true,"magnitka.ru":true,"mytis.ru":true,"nakhodka.ru":true,"nkz.ru":true,"norilsk.ru":true,"oskol.ru":true,"pyatigorsk.ru":true,"rubtsovsk.ru":true,"snz.ru":true,"syzran.ru":true,"vdonsk.ru":true,"zgrad.ru":true,"gov.ru":true,"mil.ru":true,"test.ru":true,"rw":true,"gov.rw":true,"net.rw":true,"edu.rw":true,"ac.rw":true,"com.rw":true,"co.rw":true,"int.rw":true,"mil.rw":true,"gouv.rw":true,"sa":true,"com.sa":true,"net.sa":true,"org.sa":true,"gov.sa":true,"med.sa":true,"pub.sa":true,"edu.sa":true,"sch.sa":true,"sb":true,"com.sb":true,"edu.sb":true,"gov.sb":true,"net.sb":true,"org.sb":true,"sc":true,"com.sc":true,"gov.sc":true,"net.sc":true,"org.sc":true,"edu.sc":true,"sd":true,"com.sd":true,"net.sd":true,"org.sd":true,"edu.sd":true,"med.sd":true,"gov.sd":true,"info.sd":true,"se":true,"a.se":true,"ac.se":true,"b.se":true,"bd.se":true,"brand.se":true,"c.se":true,"d.se":true,"e.se":true,"f.se":true,"fh.se":true,"fhsk.se":true,"fhv.se":true,"g.se":true,"h.se":true,"i.se":true,"k.se":true,"komforb.se":true,"kommunalforbund.se":true,"komvux.se":true,"l.se":true,"lanbib.se":true,"m.se":true,"n.se":true,"naturbruksgymn.se":true,"o.se":true,"org.se":true,"p.se":true,"parti.se":true,"pp.se":true,"press.se":true,"r.se":true,"s.se":true,"sshn.se":true,"t.se":true,"tm.se":true,"u.se":true,"w.se":true,"x.se":true,"y.se":true,"z.se":true,"sg":true,"com.sg":true,"net.sg":true,"org.sg":true,"gov.sg":true,"edu.sg":true,"per.sg":true,"sh":true,"si":true,"sk":true,"sl":true,"com.sl":true,"net.sl":true,"edu.sl":true,"gov.sl":true,"org.sl":true,"sm":true,"sn":true,"art.sn":true,"com.sn":true,"edu.sn":true,"gouv.sn":true,"org.sn":true,"perso.sn":true,"univ.sn":true,"so":true,"com.so":true,"net.so":true,"org.so":true,"sr":true,"st":true,"co.st":true,"com.st":true,"consulado.st":true,"edu.st":true,"embaixada.st":true,"gov.st":true,"mil.st":true,"net.st":true,"org.st":true,"principe.st":true,"saotome.st":true,"store.st":true,"su":true,"*.sv":true,"sy":true,"edu.sy":true,"gov.sy":true,"net.sy":true,"mil.sy":true,"com.sy":true,"org.sy":true,"sz":true,"co.sz":true,"ac.sz":true,"org.sz":true,"tc":true,"td":true,"tel":true,"tf":true,"tg":true,"th":true,"ac.th":true,"co.th":true,"go.th":true,"in.th":true,"mi.th":true,"net.th":true,"or.th":true,"tj":true,"ac.tj":true,"biz.tj":true,"co.tj":true,"com.tj":true,"edu.tj":true,"go.tj":true,"gov.tj":true,"int.tj":true,"mil.tj":true,"name.tj":true,"net.tj":true,"nic.tj":true,"org.tj":true,"test.tj":true,"web.tj":true,"tk":true,"tl":true,"gov.tl":true,"tm":true,"tn":true,"com.tn":true,"ens.tn":true,"fin.tn":true,"gov.tn":true,"ind.tn":true,"intl.tn":true,"nat.tn":true,"net.tn":true,"org.tn":true,"info.tn":true,"perso.tn":true,"tourism.tn":true,"edunet.tn":true,"rnrt.tn":true,"rns.tn":true,"rnu.tn":true,"mincom.tn":true,"agrinet.tn":true,"defense.tn":true,"turen.tn":true,"to":true,"com.to":true,"gov.to":true,"net.to":true,"org.to":true,"edu.to":true,"mil.to":true,"*.tr":true,"nic.tr":false,"gov.nc.tr":true,"travel":true,"tt":true,"co.tt":true,"com.tt":true,"org.tt":true,"net.tt":true,"biz.tt":true,"info.tt":true,"pro.tt":true,"int.tt":true,"coop.tt":true,"jobs.tt":true,"mobi.tt":true,"travel.tt":true,"museum.tt":true,"aero.tt":true,"name.tt":true,"gov.tt":true,"edu.tt":true,"tv":true,"tw":true,"edu.tw":true,"gov.tw":true,"mil.tw":true,"com.tw":true,"net.tw":true,"org.tw":true,"idv.tw":true,"game.tw":true,"ebiz.tw":true,"club.tw":true,"xn--zf0ao64a.tw":true,"xn--uc0atv.tw":true,"xn--czrw28b.tw":true,"ac.tz":true,"co.tz":true,"go.tz":true,"mil.tz":true,"ne.tz":true,"or.tz":true,"sc.tz":true,"ua":true,"com.ua":true,"edu.ua":true,"gov.ua":true,"in.ua":true,"net.ua":true,"org.ua":true,"cherkassy.ua":true,"chernigov.ua":true,"chernovtsy.ua":true,"ck.ua":true,"cn.ua":true,"crimea.ua":true,"cv.ua":true,"dn.ua":true,"dnepropetrovsk.ua":true,"donetsk.ua":true,"dp.ua":true,"if.ua":true,"ivano-frankivsk.ua":true,"kh.ua":true,"kharkov.ua":true,"kherson.ua":true,"khmelnitskiy.ua":true,"kiev.ua":true,"kirovograd.ua":true,"km.ua":true,"kr.ua":true,"ks.ua":true,"kv.ua":true,"lg.ua":true,"lugansk.ua":true,"lutsk.ua":true,"lviv.ua":true,"mk.ua":true,"nikolaev.ua":true,"od.ua":true,"odessa.ua":true,"pl.ua":true,"poltava.ua":true,"rovno.ua":true,"rv.ua":true,"sebastopol.ua":true,"sumy.ua":true,"te.ua":true,"ternopil.ua":true,"uzhgorod.ua":true,"vinnica.ua":true,"vn.ua":true,"zaporizhzhe.ua":true,"zp.ua":true,"zhitomir.ua":true,"zt.ua":true,"co.ua":true,"pp.ua":true,"ug":true,"co.ug":true,"ac.ug":true,"sc.ug":true,"go.ug":true,"ne.ug":true,"or.ug":true,"*.uk":true,"*.sch.uk":true,"bl.uk":false,"british-library.uk":false,"icnet.uk":false,"jet.uk":false,"mod.uk":false,"nel.uk":false,"nhs.uk":false,"nic.uk":false,"nls.uk":false,"national-library-scotland.uk":false,"parliament.uk":false,"police.uk":false,"us":true,"dni.us":true,"fed.us":true,"isa.us":true,"kids.us":true,"nsn.us":true,"ak.us":true,"al.us":true,"ar.us":true,"as.us":true,"az.us":true,"ca.us":true,"co.us":true,"ct.us":true,"dc.us":true,"de.us":true,"fl.us":true,"ga.us":true,"gu.us":true,"hi.us":true,"ia.us":true,"id.us":true,"il.us":true,"in.us":true,"ks.us":true,"ky.us":true,"la.us":true,"ma.us":true,"md.us":true,"me.us":true,"mi.us":true,"mn.us":true,"mo.us":true,"ms.us":true,"mt.us":true,"nc.us":true,"nd.us":true,"ne.us":true,"nh.us":true,"nj.us":true,"nm.us":true,"nv.us":true,"ny.us":true,"oh.us":true,"ok.us":true,"or.us":true,"pa.us":true,"pr.us":true,"ri.us":true,"sc.us":true,"sd.us":true,"tn.us":true,"tx.us":true,"ut.us":true,"vi.us":true,"vt.us":true,"va.us":true,"wa.us":true,"wi.us":true,"wv.us":true,"wy.us":true,"k12.ak.us":true,"k12.al.us":true,"k12.ar.us":true,"k12.as.us":true,"k12.az.us":true,"k12.ca.us":true,"k12.co.us":true,"k12.ct.us":true,"k12.dc.us":true,"k12.de.us":true,"k12.fl.us":true,"k12.ga.us":true,"k12.gu.us":true,"k12.ia.us":true,"k12.id.us":true,"k12.il.us":true,"k12.in.us":true,"k12.ks.us":true,"k12.ky.us":true,"k12.la.us":true,"k12.ma.us":true,"k12.md.us":true,"k12.me.us":true,"k12.mi.us":true,"k12.mn.us":true,"k12.mo.us":true,"k12.ms.us":true,"k12.mt.us":true,"k12.nc.us":true,"k12.nd.us":true,"k12.ne.us":true,"k12.nh.us":true,"k12.nj.us":true,"k12.nm.us":true,"k12.nv.us":true,"k12.ny.us":true,"k12.oh.us":true,"k12.ok.us":true,"k12.or.us":true,"k12.pa.us":true,"k12.pr.us":true,"k12.ri.us":true,"k12.sc.us":true,"k12.sd.us":true,"k12.tn.us":true,"k12.tx.us":true,"k12.ut.us":true,"k12.vi.us":true,"k12.vt.us":true,"k12.va.us":true,"k12.wa.us":true,"k12.wi.us":true,"k12.wv.us":true,"k12.wy.us":true,"cc.ak.us":true,"cc.al.us":true,"cc.ar.us":true,"cc.as.us":true,"cc.az.us":true,"cc.ca.us":true,"cc.co.us":true,"cc.ct.us":true,"cc.dc.us":true,"cc.de.us":true,"cc.fl.us":true,"cc.ga.us":true,"cc.gu.us":true,"cc.hi.us":true,"cc.ia.us":true,"cc.id.us":true,"cc.il.us":true,"cc.in.us":true,"cc.ks.us":true,"cc.ky.us":true,"cc.la.us":true,"cc.ma.us":true,"cc.md.us":true,"cc.me.us":true,"cc.mi.us":true,"cc.mn.us":true,"cc.mo.us":true,"cc.ms.us":true,"cc.mt.us":true,"cc.nc.us":true,"cc.nd.us":true,"cc.ne.us":true,"cc.nh.us":true,"cc.nj.us":true,"cc.nm.us":true,"cc.nv.us":true,"cc.ny.us":true,"cc.oh.us":true,"cc.ok.us":true,"cc.or.us":true,"cc.pa.us":true,"cc.pr.us":true,"cc.ri.us":true,"cc.sc.us":true,"cc.sd.us":true,"cc.tn.us":true,"cc.tx.us":true,"cc.ut.us":true,"cc.vi.us":true,"cc.vt.us":true,"cc.va.us":true,"cc.wa.us":true,"cc.wi.us":true,"cc.wv.us":true,"cc.wy.us":true,"lib.ak.us":true,"lib.al.us":true,"lib.ar.us":true,"lib.as.us":true,"lib.az.us":true,"lib.ca.us":true,"lib.co.us":true,"lib.ct.us":true,"lib.dc.us":true,"lib.de.us":true,"lib.fl.us":true,"lib.ga.us":true,"lib.gu.us":true,"lib.hi.us":true,"lib.ia.us":true,"lib.id.us":true,"lib.il.us":true,"lib.in.us":true,"lib.ks.us":true,"lib.ky.us":true,"lib.la.us":true,"lib.ma.us":true,"lib.md.us":true,"lib.me.us":true,"lib.mi.us":true,"lib.mn.us":true,"lib.mo.us":true,"lib.ms.us":true,"lib.mt.us":true,"lib.nc.us":true,"lib.nd.us":true,"lib.ne.us":true,"lib.nh.us":true,"lib.nj.us":true,"lib.nm.us":true,"lib.nv.us":true,"lib.ny.us":true,"lib.oh.us":true,"lib.ok.us":true,"lib.or.us":true,"lib.pa.us":true,"lib.pr.us":true,"lib.ri.us":true,"lib.sc.us":true,"lib.sd.us":true,"lib.tn.us":true,"lib.tx.us":true,"lib.ut.us":true,"lib.vi.us":true,"lib.vt.us":true,"lib.va.us":true,"lib.wa.us":true,"lib.wi.us":true,"lib.wv.us":true,"lib.wy.us":true,"pvt.k12.ma.us":true,"chtr.k12.ma.us":true,"paroch.k12.ma.us":true,"*.uy":true,"uz":true,"com.uz":true,"co.uz":true,"va":true,"vc":true,"com.vc":true,"net.vc":true,"org.vc":true,"gov.vc":true,"mil.vc":true,"edu.vc":true,"*.ve":true,"vg":true,"vi":true,"co.vi":true,"com.vi":true,"k12.vi":true,"net.vi":true,"org.vi":true,"vn":true,"com.vn":true,"net.vn":true,"org.vn":true,"edu.vn":true,"gov.vn":true,"int.vn":true,"ac.vn":true,"biz.vn":true,"info.vn":true,"name.vn":true,"pro.vn":true,"health.vn":true,"vu":true,"wf":true,"ws":true,"com.ws":true,"net.ws":true,"org.ws":true,"gov.ws":true,"edu.ws":true,"yt":true,"xn--mgbaam7a8h":true,"xn--54b7fta0cc":true,"xn--fiqs8s":true,"xn--fiqz9s":true,"xn--lgbbat1ad8j":true,"xn--wgbh1c":true,"xn--node":true,"xn--j6w193g":true,"xn--h2brj9c":true,"xn--mgbbh1a71e":true,"xn--fpcrj9c3d":true,"xn--gecrj9c":true,"xn--s9brj9c":true,"xn--45brj9c":true,"xn--xkc2dl3a5ee0h":true,"xn--mgba3a4f16a":true,"xn--mgba3a4fra":true,"xn--mgbayh7gpa":true,"xn--3e0b707e":true,"xn--fzc2c9e2c":true,"xn--xkc2al3hye2a":true,"xn--mgbc0a9azcg":true,"xn--mgb9awbf":true,"xn--ygbi2ammx":true,"xn--90a3ac":true,"xn--p1ai":true,"xn--wgbl6a":true,"xn--mgberp4a5d4ar":true,"xn--mgberp4a5d4a87g":true,"xn--mgbqly7c0a67fbc":true,"xn--mgbqly7cvafr":true,"xn--ogbpf8fl":true,"xn--mgbtf8fl":true,"xn--yfro4i67o":true,"xn--clchc0ea0b2g2a9gcd":true,"xn--o3cw4h":true,"xn--pgbs0dh":true,"xn--kpry57d":true,"xn--kprw13d":true,"xn--nnx388a":true,"xn--j1amh":true,"xn--mgb2ddes":true,"xxx":true,"*.ye":true,"*.za":true,"*.zm":true,"*.zw":true,"biz.at":true,"info.at":true,"priv.at":true,"co.ca":true,"ar.com":true,"br.com":true,"cn.com":true,"de.com":true,"eu.com":true,"gb.com":true,"gr.com":true,"hu.com":true,"jpn.com":true,"kr.com":true,"no.com":true,"qc.com":true,"ru.com":true,"sa.com":true,"se.com":true,"uk.com":true,"us.com":true,"uy.com":true,"za.com":true,"gb.net":true,"jp.net":true,"se.net":true,"uk.net":true,"ae.org":true,"us.org":true,"com.de":true,"operaunite.com":true,"appspot.com":true,"iki.fi":true,"c.la":true,"za.net":true,"za.org":true,"co.nl":true,"co.no":true,"co.pl":true,"dyndns-at-home.com":true,"dyndns-at-work.com":true,"dyndns-blog.com":true,"dyndns-free.com":true,"dyndns-home.com":true,"dyndns-ip.com":true,"dyndns-mail.com":true,"dyndns-office.com":true,"dyndns-pics.com":true,"dyndns-remote.com":true,"dyndns-server.com":true,"dyndns-web.com":true,"dyndns-wiki.com":true,"dyndns-work.com":true,"dyndns.biz":true,"dyndns.info":true,"dyndns.org":true,"dyndns.tv":true,"at-band-camp.net":true,"ath.cx":true,"barrel-of-knowledge.info":true,"barrell-of-knowledge.info":true,"better-than.tv":true,"blogdns.com":true,"blogdns.net":true,"blogdns.org":true,"blogsite.org":true,"boldlygoingnowhere.org":true,"broke-it.net":true,"buyshouses.net":true,"cechire.com":true,"dnsalias.com":true,"dnsalias.net":true,"dnsalias.org":true,"dnsdojo.com":true,"dnsdojo.net":true,"dnsdojo.org":true,"does-it.net":true,"doesntexist.com":true,"doesntexist.org":true,"dontexist.com":true,"dontexist.net":true,"dontexist.org":true,"doomdns.com":true,"doomdns.org":true,"dvrdns.org":true,"dyn-o-saur.com":true,"dynalias.com":true,"dynalias.net":true,"dynalias.org":true,"dynathome.net":true,"dyndns.ws":true,"endofinternet.net":true,"endofinternet.org":true,"endoftheinternet.org":true,"est-a-la-maison.com":true,"est-a-la-masion.com":true,"est-le-patron.com":true,"est-mon-blogueur.com":true,"for-better.biz":true,"for-more.biz":true,"for-our.info":true,"for-some.biz":true,"for-the.biz":true,"forgot.her.name":true,"forgot.his.name":true,"from-ak.com":true,"from-al.com":true,"from-ar.com":true,"from-az.net":true,"from-ca.com":true,"from-co.net":true,"from-ct.com":true,"from-dc.com":true,"from-de.com":true,"from-fl.com":true,"from-ga.com":true,"from-hi.com":true,"from-ia.com":true,"from-id.com":true,"from-il.com":true,"from-in.com":true,"from-ks.com":true,"from-ky.com":true,"from-la.net":true,"from-ma.com":true,"from-md.com":true,"from-me.org":true,"from-mi.com":true,"from-mn.com":true,"from-mo.com":true,"from-ms.com":true,"from-mt.com":true,"from-nc.com":true,"from-nd.com":true,"from-ne.com":true,"from-nh.com":true,"from-nj.com":true,"from-nm.com":true,"from-nv.com":true,"from-ny.net":true,"from-oh.com":true,"from-ok.com":true,"from-or.com":true,"from-pa.com":true,"from-pr.com":true,"from-ri.com":true,"from-sc.com":true,"from-sd.com":true,"from-tn.com":true,"from-tx.com":true,"from-ut.com":true,"from-va.com":true,"from-vt.com":true,"from-wa.com":true,"from-wi.com":true,"from-wv.com":true,"from-wy.com":true,"ftpaccess.cc":true,"fuettertdasnetz.de":true,"game-host.org":true,"game-server.cc":true,"getmyip.com":true,"gets-it.net":true,"go.dyndns.org":true,"gotdns.com":true,"gotdns.org":true,"groks-the.info":true,"groks-this.info":true,"ham-radio-op.net":true,"here-for-more.info":true,"hobby-site.com":true,"hobby-site.org":true,"home.dyndns.org":true,"homedns.org":true,"homeftp.net":true,"homeftp.org":true,"homeip.net":true,"homelinux.com":true,"homelinux.net":true,"homelinux.org":true,"homeunix.com":true,"homeunix.net":true,"homeunix.org":true,"iamallama.com":true,"in-the-band.net":true,"is-a-anarchist.com":true,"is-a-blogger.com":true,"is-a-bookkeeper.com":true,"is-a-bruinsfan.org":true,"is-a-bulls-fan.com":true,"is-a-candidate.org":true,"is-a-caterer.com":true,"is-a-celticsfan.org":true,"is-a-chef.com":true,"is-a-chef.net":true,"is-a-chef.org":true,"is-a-conservative.com":true,"is-a-cpa.com":true,"is-a-cubicle-slave.com":true,"is-a-democrat.com":true,"is-a-designer.com":true,"is-a-doctor.com":true,"is-a-financialadvisor.com":true,"is-a-geek.com":true,"is-a-geek.net":true,"is-a-geek.org":true,"is-a-green.com":true,"is-a-guru.com":true,"is-a-hard-worker.com":true,"is-a-hunter.com":true,"is-a-knight.org":true,"is-a-landscaper.com":true,"is-a-lawyer.com":true,"is-a-liberal.com":true,"is-a-libertarian.com":true,"is-a-linux-user.org":true,"is-a-llama.com":true,"is-a-musician.com":true,"is-a-nascarfan.com":true,"is-a-nurse.com":true,"is-a-painter.com":true,"is-a-patsfan.org":true,"is-a-personaltrainer.com":true,"is-a-photographer.com":true,"is-a-player.com":true,"is-a-republican.com":true,"is-a-rockstar.com":true,"is-a-socialist.com":true,"is-a-soxfan.org":true,"is-a-student.com":true,"is-a-teacher.com":true,"is-a-techie.com":true,"is-a-therapist.com":true,"is-an-accountant.com":true,"is-an-actor.com":true,"is-an-actress.com":true,"is-an-anarchist.com":true,"is-an-artist.com":true,"is-an-engineer.com":true,"is-an-entertainer.com":true,"is-by.us":true,"is-certified.com":true,"is-found.org":true,"is-gone.com":true,"is-into-anime.com":true,"is-into-cars.com":true,"is-into-cartoons.com":true,"is-into-games.com":true,"is-leet.com":true,"is-lost.org":true,"is-not-certified.com":true,"is-saved.org":true,"is-slick.com":true,"is-uberleet.com":true,"is-very-bad.org":true,"is-very-evil.org":true,"is-very-good.org":true,"is-very-nice.org":true,"is-very-sweet.org":true,"is-with-theband.com":true,"isa-geek.com":true,"isa-geek.net":true,"isa-geek.org":true,"isa-hockeynut.com":true,"issmarterthanyou.com":true,"isteingeek.de":true,"istmein.de":true,"kicks-ass.net":true,"kicks-ass.org":true,"knowsitall.info":true,"land-4-sale.us":true,"lebtimnetz.de":true,"leitungsen.de":true,"likes-pie.com":true,"likescandy.com":true,"merseine.nu":true,"mine.nu":true,"misconfused.org":true,"mypets.ws":true,"myphotos.cc":true,"neat-url.com":true,"office-on-the.net":true,"on-the-web.tv":true,"podzone.net":true,"podzone.org":true,"readmyblog.org":true,"saves-the-whales.com":true,"scrapper-site.net":true,"scrapping.cc":true,"selfip.biz":true,"selfip.com":true,"selfip.info":true,"selfip.net":true,"selfip.org":true,"sells-for-less.com":true,"sells-for-u.com":true,"sells-it.net":true,"sellsyourhome.org":true,"servebbs.com":true,"servebbs.net":true,"servebbs.org":true,"serveftp.net":true,"serveftp.org":true,"servegame.org":true,"shacknet.nu":true,"simple-url.com":true,"space-to-rent.com":true,"stuff-4-sale.org":true,"stuff-4-sale.us":true,"teaches-yoga.com":true,"thruhere.net":true,"traeumtgerade.de":true,"webhop.biz":true,"webhop.info":true,"webhop.net":true,"webhop.org":true,"worse-than.tv":true,"writesthisblog.com":true}); - -// END of automatically generated file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt deleted file mode 100644 index 11dddd00..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt +++ /dev/null @@ -1,278 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt deleted file mode 100644 index 97067e54..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens <http://mathiasbynens.be/> - -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json deleted file mode 100644 index 69e12ae2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "punycode", - "version": "1.2.3", - "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", - "homepage": "http://mths.be/punycode", - "main": "punycode.js", - "keywords": [ - "punycode", - "unicode", - "idn", - "idna", - "dns", - "url", - "domain" - ], - "licenses": [ - { - "type": "MIT", - "url": "http://mths.be/mit" - }, - { - "type": "GPL", - "url": "http://mths.be/gpl" - } - ], - "author": { - "name": "Mathias Bynens", - "email": "mathias@qiwi.be", - "url": "http://mathiasbynens.be/" - }, - "contributors": [ - { - "name": "Mathias Bynens", - "email": "mathias@qiwi.be", - "url": "http://mathiasbynens.be/" - }, - { - "name": "John-David Dalton", - "email": "john.david.dalton@gmail.com", - "url": "http://allyoucanleet.com/" - } - ], - "bugs": { - "url": "https://github.com/bestiejs/punycode.js/issues" - }, - "repository": { - "type": "git", - "url": "https://github.com/bestiejs/punycode.js.git" - }, - "engines": [ - "node", - "rhino" - ], - "directories": { - "doc": "docs", - "test": "tests" - }, - "scripts": { - "test": "node tests/tests.js" - }, - "devDependencies": { - "grunt": "~0.4.1", - "grunt-contrib-uglify": "~0.2.2", - "grunt-shell": "~0.2.2", - "istanbul": "~0.1.37", - "qunit-clib": "~1.3.0", - "qunitjs": "~1.11.0", - "requirejs": "~2.1.6" - }, - "readme": "ERROR: No README data found!", - "_id": "punycode@1.2.3", - "dist": { - "shasum": "b4e304471082d783c73b3bafabf2fd9b6a486266" - }, - "_from": "punycode@>=0.2.0", - "_resolved": "https://registry.npmjs.org/punycode/-/punycode-1.2.3.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js deleted file mode 100644 index 41803ba4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js +++ /dev/null @@ -1,508 +0,0 @@ -/*! http://mths.be/punycode v1.2.3 by @mathias */ -;(function(root) { - - /** Detect free variables */ - var freeExports = typeof exports == 'object' && exports; - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /** - * The `punycode` object. - * @name punycode - * @type Object - */ - var punycode, - - /** Highest positive signed 32-bit float value */ - maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 - - /** Bootstring parameters */ - base = 36, - tMin = 1, - tMax = 26, - skew = 38, - damp = 700, - initialBias = 72, - initialN = 128, // 0x80 - delimiter = '-', // '\x2D' - - /** Regular expressions */ - regexPunycode = /^xn--/, - regexNonASCII = /[^ -~]/, // unprintable ASCII chars + non-ASCII chars - regexSeparators = /\x2E|\u3002|\uFF0E|\uFF61/g, // RFC 3490 separators - - /** Error messages */ - errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' - }, - - /** Convenience shortcuts */ - baseMinusTMin = base - tMin, - floor = Math.floor, - stringFromCharCode = String.fromCharCode, - - /** Temporary variable */ - key; - - /*--------------------------------------------------------------------------*/ - - /** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ - function error(type) { - throw RangeError(errors[type]); - } - - /** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ - function map(array, fn) { - var length = array.length; - while (length--) { - array[length] = fn(array[length]); - } - return array; - } - - /** - * A simple `Array#map`-like wrapper to work with domain name strings. - * @private - * @param {String} domain The domain name. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ - function mapDomain(string, fn) { - return map(string.split(regexSeparators), fn).join('.'); - } - - /** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see <http://mathiasbynens.be/notes/javascript-encoding> - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ - function ucs2decode(string) { - var output = [], - counter = 0, - length = string.length, - value, - extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - /** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ - function ucs2encode(array) { - return map(array, function(value) { - var output = ''; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - return output; - }).join(''); - } - - /** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } - - /** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ - function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } - - /** - * Bias adaptation function as per section 3.4 of RFC 3492. - * http://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } - - /** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ - function decode(input) { - // Don't use UCS-2 - var output = [], - inputLength = input.length, - out, - i = 0, - n = initialN, - bias = initialBias, - basic, - j, - index, - oldi, - w, - k, - digit, - t, - length, - /** Cached calculation results */ - baseMinusT; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - for (oldi = i, w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output - output.splice(i++, 0, n); - - } - - return ucs2encode(output); - } - - /** - * Converts a string of Unicode symbols to a Punycode string of ASCII-only - * symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ - function encode(input) { - var n, - delta, - handledCPCount, - basicLength, - bias, - j, - m, - q, - k, - t, - currentValue, - output = [], - /** `inputLength` will hold the number of code points in `input`. */ - inputLength, - /** Cached calculation results */ - handledCPCountPlusOne, - baseMinusT, - qMinusT; - - // Convert the input in UCS-2 to Unicode - input = ucs2decode(input); - - // Cache the length - inputLength = input.length; - - // Initialize the state - n = initialN; - delta = 0; - bias = initialBias; - - // Handle the basic code points - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - handledCPCount = basicLength = output.length; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string - if it is not empty - with a delimiter - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, - // but guard against overflow - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - - if (currentValue == n) { - // Represent delta as a generalized variable-length integer - for (q = delta, k = base; /* no condition */; k += base) { - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); - } - - /** - * Converts a Punycode string representing a domain name to Unicode. Only the - * Punycoded parts of the domain name will be converted, i.e. it doesn't - * matter if you call it on a string that has already been converted to - * Unicode. - * @memberOf punycode - * @param {String} domain The Punycode domain name to convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ - function toUnicode(domain) { - return mapDomain(domain, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); - } - - /** - * Converts a Unicode string representing a domain name to Punycode. Only the - * non-ASCII parts of the domain name will be converted, i.e. it doesn't - * matter if you call it with a domain that's already in ASCII. - * @memberOf punycode - * @param {String} domain The domain name to convert, as a Unicode string. - * @returns {String} The Punycode representation of the given domain name. - */ - function toASCII(domain) { - return mapDomain(domain, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); - } - - /*--------------------------------------------------------------------------*/ - - /** Define the public API */ - punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '1.2.3', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see <http://mathiasbynens.be/notes/javascript-encoding> - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode - }; - - /** Expose `punycode` */ - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return punycode; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = punycode; - } else { // in Narwhal or RingoJS v0.7.0- - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { // in Rhino or a web browser - root.punycode = punycode; - } - -}(this)); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js deleted file mode 100644 index ac5d914a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! http://mths.be/punycode v1.2.3 by @mathias */ -(function(o){function e(o){throw RangeError(L[o])}function n(o,e){for(var n=o.length;n--;)o[n]=e(o[n]);return o}function t(o,e){return n(o.split(S),e).join(".")}function r(o){for(var e,n,t=[],r=0,u=o.length;u>r;)e=o.charCodeAt(r++),e>=55296&&56319>=e&&u>r?(n=o.charCodeAt(r++),56320==(64512&n)?t.push(((1023&e)<<10)+(1023&n)+65536):(t.push(e),r--)):t.push(e);return t}function u(o){return n(o,function(o){var e="";return o>65535&&(o-=65536,e+=R(55296|1023&o>>>10),o=56320|1023&o),e+=R(o)}).join("")}function i(o){return 10>o-48?o-22:26>o-65?o-65:26>o-97?o-97:x}function f(o,e){return o+22+75*(26>o)-((0!=e)<<5)}function c(o,e,n){var t=0;for(o=n?P(o/m):o>>1,o+=P(o/e);o>M*y>>1;t+=x)o=P(o/M);return P(t+(M+1)*o/(o+j))}function l(o){var n,t,r,f,l,d,s,a,p,h,v=[],g=o.length,w=0,j=I,m=A;for(t=o.lastIndexOf(F),0>t&&(t=0),r=0;t>r;++r)o.charCodeAt(r)>=128&&e("not-basic"),v.push(o.charCodeAt(r));for(f=t>0?t+1:0;g>f;){for(l=w,d=1,s=x;f>=g&&e("invalid-input"),a=i(o.charCodeAt(f++)),(a>=x||a>P((b-w)/d))&&e("overflow"),w+=a*d,p=m>=s?C:s>=m+y?y:s-m,!(p>a);s+=x)h=x-p,d>P(b/h)&&e("overflow"),d*=h;n=v.length+1,m=c(w-l,n,0==l),P(w/n)>b-j&&e("overflow"),j+=P(w/n),w%=n,v.splice(w++,0,j)}return u(v)}function d(o){var n,t,u,i,l,d,s,a,p,h,v,g,w,j,m,E=[];for(o=r(o),g=o.length,n=I,t=0,l=A,d=0;g>d;++d)v=o[d],128>v&&E.push(R(v));for(u=i=E.length,i&&E.push(F);g>u;){for(s=b,d=0;g>d;++d)v=o[d],v>=n&&s>v&&(s=v);for(w=u+1,s-n>P((b-t)/w)&&e("overflow"),t+=(s-n)*w,n=s,d=0;g>d;++d)if(v=o[d],n>v&&++t>b&&e("overflow"),v==n){for(a=t,p=x;h=l>=p?C:p>=l+y?y:p-l,!(h>a);p+=x)m=a-h,j=x-h,E.push(R(f(h+m%j,0))),a=P(m/j);E.push(R(f(a,0))),l=c(t,w,u==i),t=0,++u}++t,++n}return E.join("")}function s(o){return t(o,function(o){return E.test(o)?l(o.slice(4).toLowerCase()):o})}function a(o){return t(o,function(o){return O.test(o)?"xn--"+d(o):o})}var p="object"==typeof exports&&exports,h="object"==typeof module&&module&&module.exports==p&&module,v="object"==typeof global&&global;(v.global===v||v.window===v)&&(o=v);var g,w,b=2147483647,x=36,C=1,y=26,j=38,m=700,A=72,I=128,F="-",E=/^xn--/,O=/[^ -~]/,S=/\x2E|\u3002|\uFF0E|\uFF61/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},M=x-C,P=Math.floor,R=String.fromCharCode;if(g={version:"1.2.3",ucs2:{decode:r,encode:u},decode:l,encode:d,toASCII:a,toUnicode:s},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return g});else if(p&&!p.nodeType)if(h)h.exports=g;else for(w in g)g.hasOwnProperty(w)&&(p[w]=g[w]);else o.punycode=g})(this); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt deleted file mode 100644 index a7501f98..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright 2011-2013 John-David Dalton <http://allyoucanleet.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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md deleted file mode 100644 index fbddce91..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Docdown <sup>v1.0.0</sup> - -A simple JSDoc to Markdown documentation generator. - -## Documentation - -The documentation for Docdown can be viewed here: [/doc/README.md](https://github.com/jdalton/docdown/blob/master/doc/README.md#readme) - -For a list of upcoming features, check out our [roadmap](https://github.com/jdalton/docdown/wiki/Roadmap). - -## Installation and usage - -Usage example: - -```php -require("docdown.php"); - -// generate Markdown -$markdown = docdown(array( - "path" => $filepath, - "url" => "https://github.com/username/project/blob/master/my.js" -)); -``` - -## Author - -| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](http://twitter.com/jdalton "Follow @jdalton on Twitter") | -|---| -| [John-David Dalton](http://allyoucanleet.com/) | - -## Contributors - -| [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](http://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md deleted file mode 100644 index 459d36ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# Docdown <sup>v1.0.0</sup> - -<!-- div --> - - -<!-- div --> - -## <a id="docdown"></a>`docdown` -* [`docdown`](#docdown$optionsarray) - -<!-- /div --> - - -<!-- /div --> - - -<!-- div --> - - -<!-- div --> - -## `docdown` - -<!-- div --> - -### <a id="docdown$optionsarray"></a>`docdown([$options=array()])` -<a href="#docdown$optionsarray">#</a> [Ⓢ](https://github.com/jdalton/docdown/blob/master/docdown.php#L34 "View in source") [Ⓣ][1] - -Generates Markdown from JSDoc entries in a given file. - -#### Arguments -1. `[$options=array()]` *(Array)*: The options array. - -#### Returns -*(String)*: The generated Markdown. - -#### Example -```php -// specify a file path -$markdown = docdown(array( - // path to js file - 'path' => $filepath, - // url used to reference line numbers in code - 'url' => 'https://github.com/username/project/blob/master/my.js' -)); - -// or pass raw js -$markdown = docdown(array( - // raw JavaScript source - 'source' => $rawJS, - // documentation title - 'title' => 'My API Documentation', - // url used to reference line numbers in code - 'url' => 'https://github.com/username/project/blob/master/my.js' -)); -``` - -* * * - -<!-- /div --> - - -<!-- /div --> - - -<!-- /div --> - - - [1]: #docdown "Jump back to the TOC." \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php deleted file mode 100644 index eca8d145..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - - // cleanup requested filepath - $file = isset($_GET['f']) ? $_GET['f'] : 'docdown'; - $file = preg_replace('#(\.*[\/])+#', '', $file); - $file .= preg_match('/\.[a-z]+$/', $file) ? '' : '.php'; - - // output filename - if (isset($_GET['o'])) { - $output = $_GET['o']; - } else if (isset($_SERVER['argv'][1])) { - $output = $_SERVER['argv'][1]; - } else { - $output = basename($file); - } - - /*--------------------------------------------------------------------------*/ - - require('../docdown.php'); - - // generate Markdown - $markdown = docdown(array( - 'path' => '../' . $file, - 'title' => 'Docdown <sup>v1.0.0</sup>', - 'url' => 'https://github.com/jdalton/docdown/blob/master/docdown.php' - )); - - // save to a .md file - file_put_contents($output . '.md', $markdown); - - // print - header('Content-Type: text/plain;charset=utf-8'); - echo $markdown . PHP_EOL; - -?> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php deleted file mode 100644 index 4a786d75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php -/*! - * Docdown v1.0.0-pre - * Copyright 2011-2013 John-David Dalton <http://allyoucanleet.com/> - * Available under MIT license <http://mths.be/mit> - */ -require(dirname(__FILE__) . '/src/DocDown/Generator.php'); - -/** - * Generates Markdown from JSDoc entries in a given file. - * - * @param {Array} [$options=array()] The options array. - * @returns {String} The generated Markdown. - * @example - * - * // specify a file path - * $markdown = docdown(array( - * // path to js file - * 'path' => $filepath, - * // url used to reference line numbers in code - * 'url' => 'https://github.com/username/project/blob/master/my.js' - * )); - * - * // or pass raw js - * $markdown = docdown(array( - * // raw JavaScript source - * 'source' => $rawJS, - * // documentation title - * 'title' => 'My API Documentation', - * // url used to reference line numbers in code - * 'url' => 'https://github.com/username/project/blob/master/my.js' - * )); - */ -function docdown( $options = array() ) { - $gen = new Generator($options); - return $gen->generate(); -} -?> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php deleted file mode 100644 index 0a7c552e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php +++ /dev/null @@ -1,226 +0,0 @@ -<?php - -/** - * A class to represent a JSDoc entry alias. - */ -class Alias { - - /** - * The alias owner. - * - * @memberOf Alias - * @type Object - */ - public $owner; - - /*--------------------------------------------------------------------------*/ - - /** - * The Alias constructor. - * - * @constructor - * @param {String} $name The alias name. - * @param {Object} $owner The alias owner. - */ - public function __construct( $name, $owner ) { - $this->owner = $owner; - $this->_name = $name; - $this->_call = $owner->getCall(); - $this->_category = $owner->getCategory(); - $this->_desc = $owner->getDesc(); - $this->_example = $owner->getExample(); - $this->_isCtor = $owner->isCtor(); - $this->_isLicense = $owner->isLicense(); - $this->_isPlugin = $owner->isPlugin(); - $this->_isPrivate = $owner->isPrivate(); - $this->_isStatic = $owner->isStatic(); - $this->_lineNumber = $owner->getLineNumber(); - $this->_members = $owner->getMembers(); - $this->_params = $owner->getParams(); - $this->_returns = $owner->getReturns(); - $this->_type = $owner->getType(); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Extracts the entry's `alias` objects. - * - * @memberOf Alias - * @param {Number} $index The index of the array value to return. - * @returns {Array|String} The entry's `alias` objects. - */ - public function getAliases( $index = null ) { - $result = array(); - return $index !== null - ? @$result[$index] - : $result; - } - - /** - * Extracts the function call from the owner entry. - * - * @memberOf Alias - * @returns {String} The function call. - */ - public function getCall() { - return $this->_call; - } - - /** - * Extracts the owner entry's `category` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `category` data. - */ - public function getCategory() { - return $this->_category; - } - - /** - * Extracts the owner entry's description. - * - * @memberOf Alias - * @returns {String} The owner entry's description. - */ - public function getDesc() { - return $this->_desc; - } - - /** - * Extracts the owner entry's `example` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `example` data. - */ - public function getExample() { - return $this->_example; - } - - /** - * Checks if the entry is an alias. - * - * @memberOf Alias - * @returns {Boolean} Returns `true`. - */ - public function isAlias() { - return true; - } - - /** - * Checks if the owner entry is a constructor. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if a constructor, else `false`. - */ - public function isCtor() { - return $this->_isCtor; - } - - /** - * Checks if the owner entry is a license. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if a license, else `false`. - */ - public function isLicense() { - return $this->_isLicense; - } - - /** - * Checks if the owner entry *is* assigned to a prototype. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if assigned to a prototype, else `false`. - */ - public function isPlugin() { - return $this->_isPlugin; - } - - /** - * Checks if the owner entry is private. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if private, else `false`. - */ - public function isPrivate() { - return $this->_isPrivate; - } - - /** - * Checks if the owner entry is *not* assigned to a prototype. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if not assigned to a prototype, else `false`. - */ - public function isStatic() { - return $this->_isStatic; - } - - /** - * Resolves the owner entry's line number. - * - * @memberOf Alias - * @returns {Number} The owner entry's line number. - */ - public function getLineNumber() { - return $this->_lineNumber; - } - - /** - * Extracts the owner entry's `member` data. - * - * @memberOf Alias - * @param {Number} $index The index of the array value to return. - * @returns {Array|String} The owner entry's `member` data. - */ - public function getMembers( $index = null ) { - return $index !== null - ? @$this->_members[$index] - : $this->_members; - } - - /** - * Extracts the owner entry's `name` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `name` data. - */ - public function getName() { - return $this->_name; - } - - /** - * Extracts the owner entry's `param` data. - * - * @memberOf Alias - * @param {Number} $index The index of the array value to return. - * @returns {Array} The owner entry's `param` data. - */ - public function getParams( $index = null ) { - return $index !== null - ? @$this->_params[$index] - : $this->_params; - } - - /** - * Extracts the owner entry's `returns` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `returns` data. - */ - public function getReturns() { - return $this->_returns; - } - - /** - * Extracts the owner entry's `type` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `type` data. - */ - public function getType() { - return $this->_type; - } -} -?> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php deleted file mode 100644 index a973d9a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php +++ /dev/null @@ -1,442 +0,0 @@ -<?php - -require(dirname(__FILE__) . "/Alias.php"); - -/** - * A class to simplify parsing a single JSDoc entry. - */ -class Entry { - - /** - * The documentation entry. - * - * @memberOf Entry - * @type String - */ - public $entry = ''; - - /** - * The language highlighter used for code examples. - * - * @memberOf Entry - * @type String - */ - public $lang = ''; - - /** - * The source code. - * - * @memberOf Entry - * @type String - */ - public $source = ''; - - /*--------------------------------------------------------------------------*/ - - /** - * The Entry constructor. - * - * @constructor - * @param {String} $entry The documentation entry to analyse. - * @param {String} $source The source code. - * @param {String} [$lang ='js'] The language highlighter used for code examples. - */ - public function __construct( $entry, $source, $lang = 'js' ) { - $this->entry = $entry; - $this->lang = $lang; - $this->source = str_replace(PHP_EOL, "\n", $source); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Extracts the documentation entries from source code. - * - * @static - * @memberOf Entry - * @param {String} $source The source code. - * @returns {Array} The array of entries. - */ - public static function getEntries( $source ) { - preg_match_all('#/\*\*(?![-!])[\s\S]*?\*/\s*.+#', $source, $result); - return array_pop($result); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Checks if the entry is a function reference. - * - * @private - * @memberOf Entry - * @returns {Boolean} Returns `true` if the entry is a function reference, else `false`. - */ - private function isFunction() { - if (!isset($this->_isFunction)) { - $this->_isFunction = !!( - $this->isCtor() || - count($this->getParams()) || - count($this->getReturns()) || - preg_match('/\*[\t ]*@function\b/', $this->entry) - ); - } - return $this->_isFunction; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Extracts the entry's `alias` objects. - * - * @memberOf Entry - * @param {Number} $index The index of the array value to return. - * @returns {Array|String} The entry's `alias` objects. - */ - public function getAliases( $index = null ) { - if (!isset($this->_aliases)) { - preg_match('#\*[\t ]*@alias\s+(.+)#', $this->entry, $result); - - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - $result = preg_split('/,\s*/', $result); - natsort($result); - - foreach ($result as $resultIndex => $value) { - $result[$resultIndex] = new Alias($value, $this); - } - } - $this->_aliases = $result; - } - return $index !== null - ? @$this->_aliases[$index] - : $this->_aliases; - } - - /** - * Extracts the function call from the entry. - * - * @memberOf Entry - * @returns {String} The function call. - */ - public function getCall() { - if (isset($this->_call)) { - return $this->_call; - } - - preg_match('#\*/\s*(?:function ([^(]*)|(.*?)(?=[:=,]|return\b))#', $this->entry, $result); - if ($result = array_pop($result)) { - $result = array_pop(explode('var ', trim(trim(array_pop(explode('.', $result))), "'"))); - } - // resolve name - // avoid $this->getName() because it calls $this->getCall() - preg_match('#\*[\t ]*@name\s+(.+)#', $this->entry, $name); - if (count($name)) { - $name = trim($name[1]); - } else { - $name = $result; - } - // compile function call syntax - if ($this->isFunction()) { - // compose parts - $result = array($result); - $params = $this->getParams(); - foreach ($params as $param) { - $result[] = $param[1]; - } - // format - $result = $name .'('. implode(array_slice($result, 1), ', ') .')'; - $result = str_replace(', [', ' [, ', str_replace('], [', ', ', $result)); - } - - $this->_call = $result ? $result : $name; - return $this->_call; - } - - /** - * Extracts the entry's `category` data. - * - * @memberOf Entry - * @returns {String} The entry's `category` data. - */ - public function getCategory() { - if (isset($this->_category)) { - return $this->_category; - } - - preg_match('#\*[\t ]*@category\s+(.+)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - } else { - $result = $this->getType() == 'Function' ? 'Methods' : 'Properties'; - } - $this->_category = $result; - return $result; - } - - /** - * Extracts the entry's description. - * - * @memberOf Entry - * @returns {String} The entry's description. - */ - public function getDesc() { - if (isset($this->_desc)) { - return $this->_desc; - } - - preg_match('#/\*\*(?:\s*\*)?([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result); - if (count($result)) { - $type = $this->getType(); - $result = preg_replace('/:\n[\t ]*\*[\t ]*/', ":<br>\n", $result[1]); - $result = preg_replace('/(?:^|\n)[\t ]*\*\n[\t ]*\*[\t ]*/', "\n\n", $result); - $result = preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result); - $result = trim($result); - $result = ($type == 'Function' ? '' : '(' . str_replace('|', ', ', trim($type, '{}')) . '): ') . $result; - } - $this->_desc = $result; - return $result; - } - - /** - * Extracts the entry's `example` data. - * - * @memberOf Entry - * @returns {String} The entry's `example` data. - */ - public function getExample() { - if (isset($this->_example)) { - return $this->_example; - } - - preg_match('#\*[\t ]*@example\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', "\n", $result[1])); - $result = '```' . $this->lang . "\n" . $result . "\n```"; - } - $this->_example = $result; - return $result; - } - - /** - * Checks if the entry is an alias. - * - * @memberOf Entry - * @returns {Boolean} Returns `false`. - */ - public function isAlias() { - return false; - } - - /** - * Checks if the entry is a constructor. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if a constructor, else `false`. - */ - public function isCtor() { - if (!isset($this->_isCtor)) { - $this->_isCtor = !!preg_match('/\*[\t ]*@constructor\b/', $this->entry); - } - return $this->_isCtor; - } - - /** - * Checks if the entry is a license. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if a license, else `false`. - */ - public function isLicense() { - if (!isset($this->_isLicense)) { - $this->_isLicense = !!preg_match('/\*[\t ]*@license\b/', $this->entry); - } - return $this->_isLicense; - } - - /** - * Checks if the entry *is* assigned to a prototype. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if assigned to a prototype, else `false`. - */ - public function isPlugin() { - if (!isset($this->_isPlugin)) { - $this->_isPlugin = !$this->isCtor() && !$this->isPrivate() && !$this->isStatic(); - } - return $this->_isPlugin; - } - - /** - * Checks if the entry is private. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if private, else `false`. - */ - public function isPrivate() { - if (!isset($this->_isPrivate)) { - $this->_isPrivate = $this->isLicense() || !!preg_match('/\*[\t ]*@private\b/', $this->entry) || !preg_match('/\*[\t ]*@[a-z]+\b/', $this->entry); - } - return $this->_isPrivate; - } - - /** - * Checks if the entry is *not* assigned to a prototype. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if not assigned to a prototype, else `false`. - */ - public function isStatic() { - if (isset($this->_isStatic)) { - return $this->_isStatic; - } - - $public = !$this->isPrivate(); - $result = $public && !!preg_match('/\*[\t ]*@static\b/', $this->entry); - - // set in cases where it isn't explicitly stated - if ($public && !$result) { - if ($parent = array_pop(preg_split('/[#.]/', $this->getMembers(0)))) { - foreach (Entry::getEntries($this->source) as $entry) { - $entry = new Entry($entry, $this->source); - if ($entry->getName() == $parent) { - $result = !$entry->isCtor(); - break; - } - } - } else { - $result = true; - } - } - $this->_isStatic = $result; - return $result; - } - - /** - * Resolves the entry's line number. - * - * @memberOf Entry - * @returns {Number} The entry's line number. - */ - public function getLineNumber() { - if (!isset($this->_lineNumber)) { - preg_match_all('/\n/', substr($this->source, 0, strrpos($this->source, $this->entry) + strlen($this->entry)), $lines); - $this->_lineNumber = count(array_pop($lines)) + 1; - } - return $this->_lineNumber; - } - - /** - * Extracts the entry's `member` data. - * - * @memberOf Entry - * @param {Number} $index The index of the array value to return. - * @returns {Array|String} The entry's `member` data. - */ - public function getMembers( $index = null ) { - if (!isset($this->_members)) { - preg_match('#\*[\t ]*@member(?:Of)?\s+(.+)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - $result = preg_split('/,\s*/', $result); - natsort($result); - } - $this->_members = $result; - } - return $index !== null - ? @$this->_members[$index] - : $this->_members; - } - - /** - * Extracts the entry's `name` data. - * - * @memberOf Entry - * @returns {String} The entry's `name` data. - */ - public function getName() { - if (isset($this->_name)) { - return $this->_name; - } - - preg_match('#\*[\t ]*@name\s+(.+)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - } else { - $result = array_shift(explode('(', $this->getCall())); - } - $this->_name = $result; - return $result; - } - - /** - * Extracts the entry's `param` data. - * - * @memberOf Entry - * @param {Number} $index The index of the array value to return. - * @returns {Array} The entry's `param` data. - */ - public function getParams( $index = null ) { - if (!isset($this->_params)) { - preg_match_all('#\*[\t ]*@param\s+\{([^}]+)\}\s+(\[.+\]|[$\w|]+(?:\[.+\])?)\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#i', $this->entry, $result); - if (count($result = array_filter(array_slice($result, 1)))) { - // repurpose array - foreach ($result as $param) { - foreach ($param as $key => $value) { - if (!is_array($result[0][$key])) { - $result[0][$key] = array(); - } - $result[0][$key][] = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]*/', ' ', $value)); - } - } - $result = $result[0]; - } - $this->_params = $result; - } - return $index !== null - ? @$this->_params[$index] - : $this->_params; - } - - /** - * Extracts the entry's `returns` data. - * - * @memberOf Entry - * @returns {String} The entry's `returns` data. - */ - public function getReturns() { - if (isset($this->_returns)) { - return $this->_returns; - } - - preg_match('#\*[\t ]*@returns\s+\{([^}]+)\}\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result); - if (count($result)) { - $result = array_map('trim', array_slice($result, 1)); - $result[0] = str_replace('|', ', ', $result[0]); - $result[1] = preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1]); - } - $this->_returns = $result; - return $result; - } - - /** - * Extracts the entry's `type` data. - * - * @memberOf Entry - * @returns {String} The entry's `type` data. - */ - public function getType() { - if (isset($this->_type)) { - return $this->_type; - } - - preg_match('#\*[\t ]*@type\s+(.+)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - } else { - $result = $this->isFunction() ? 'Function' : 'Unknown'; - } - $this->_type = $result; - return $result; - } -} -?> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php deleted file mode 100644 index 5dc2583f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php +++ /dev/null @@ -1,563 +0,0 @@ -<?php - -require(dirname(__FILE__) . "/Entry.php"); - -/** - * Generates Markdown from JSDoc entries. - */ -class Generator { - - /** - * The HTML for the close tag. - * - * @static - * @memberOf Generator - * @type String - */ - public $closeTag = "\n<!-- /div -->\n"; - - /** - * An array of JSDoc entries. - * - * @memberOf Generator - * @type Array - */ - public $entries = array(); - - /** - * The HTML for the open tag. - * - * @static - * @memberOf Generator - * @type String - */ - public $openTag = "\n<!-- div -->\n"; - - /** - * An options array used to configure the generator. - * - * @memberOf Generator - * @type Array - */ - public $options = array(); - - /** - * The file's source code. - * - * @memberOf Generator - * @type String - */ - public $source = ''; - - /*--------------------------------------------------------------------------*/ - - /** - * The Generator constructor. - * - * @constructor - * @param {String} $source The source code to parse. - * @param {Array} $options The options array. - */ - public function __construct( $source, $options = array() ) { - // juggle arguments - if (is_array($source)) { - $options = $source; - } else { - $options['source'] = $source; - } - if (isset($options['source']) && realpath($options['source'])) { - $options['path'] = $options['source']; - } - if (isset($options['path'])) { - preg_match('/(?<=\.)[a-z]+$/', $options['path'], $ext); - $options['source'] = file_get_contents($options['path']); - $ext = array_pop($ext); - - if (!isset($options['lang']) && $ext) { - $options['lang'] = $ext; - } - if (!isset($options['title'])) { - $options['title'] = ucfirst(basename($options['path'])) . ' API documentation'; - } - } - if (!isset($options['lang'])) { - $options['lang'] = 'js'; - } - if (!isset($options['toc'])) { - $options['toc'] = 'properties'; - } - - $this->options = $options; - $this->source = str_replace(PHP_EOL, "\n", $options['source']); - $this->entries = Entry::getEntries($this->source); - - foreach ($this->entries as $index => $value) { - $this->entries[$index] = new Entry($value, $this->source, $options['lang']); - } - } - - /*--------------------------------------------------------------------------*/ - - /** - * Performs common string formatting operations. - * - * @private - * @static - * @memberOf Generator - * @param {String} $string The string to format. - * @returns {String} The formatted string. - */ - private static function format( $string ) { - $counter = 0; - - // tokenize inline code snippets - preg_match_all('/`[^`]+`/', $string, $tokenized); - $tokenized = $tokenized[0]; - foreach ($tokenized as $snippet) { - $string = str_replace($snippet, '__token' . ($counter++) .'__', $string); - } - - // italicize parentheses - $string = preg_replace('/(^|\s)(\([^)]+\))/', '$1*$2*', $string); - - // mark numbers as inline code - $string = preg_replace('/[\t ](-?\d+(?:.\d+)?)(?!\.[^\n])/', ' `$1`', $string); - - // detokenize inline code snippets - $counter = 0; - foreach ($tokenized as $snippet) { - $string = str_replace('__token' . ($counter++) . '__', $snippet, $string); - } - - return trim($string); - } - - /** - * Modify a string by replacing named tokens with matching assoc. array values. - * - * @private - * @static - * @memberOf Generator - * @param {String} $string The string to modify. - * @param {Array|Object} $object The template object. - * @returns {String} The modified string. - */ - private static function interpolate( $string, $object ) { - preg_match_all('/#\{([^}]+)\}/', $string, $tokens); - $tokens = array_unique(array_pop($tokens)); - - foreach ($tokens as $token) { - $pattern = '/#\{' . $token . '\}/'; - $replacement = ''; - - if (is_object($object)) { - preg_match('/\(([^)]+?)\)$/', $token, $args); - $args = preg_split('/,\s*/', array_pop($args)); - $method = 'get' . ucfirst(str_replace('/\([^)]+?\)$/', '', $token)); - - if (method_exists($object, $method)) { - $replacement = (string) call_user_func_array(array($object, $method), $args); - } else if (isset($object->{$token})) { - $replacement = (string) $object->{$token}; - } - } else if (isset($object[$token])) { - $replacement = (string) $object[$token]; - } - $string = preg_replace($pattern, trim($replacement), $string); - } - return Generator::format($string); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Adds the given `$entries` to the `$result` array. - * - * @private - * @memberOf Generator - * @param {Array} $result The result array to modify. - * @param {Array} $entries The entries to add to the `$result`. - */ - private function addEntries( &$result, $entries ) { - foreach ($entries as $entry) { - // skip aliases - if ($entry->isAlias()) { - continue; - } - // name and description - array_push( - $result, - $this->openTag, - Generator::interpolate("### <a id=\"#{hash}\"></a>`#{member}#{separator}#{call}`\n<a href=\"##{hash}\">#</a> [Ⓢ](#{href} \"View in source\") [Ⓣ][1]\n\n#{desc}", $entry) - ); - - // @alias - if (count($aliases = $entry->getAliases())) { - array_push($result, '', '#### Aliases'); - foreach ($aliases as $index => $alias) { - $aliases[$index] = $alias->getName(); - } - $result[] = '*' . implode(', ', $aliases) . '*'; - } - // @param - if (count($params = $entry->getParams())) { - array_push($result, '', '#### Arguments'); - foreach ($params as $index => $param) { - $result[] = Generator::interpolate('#{num}. `#{name}` (#{type}): #{desc}', array( - 'desc' => $param[2], - 'name' => $param[1], - 'num' => $index + 1, - 'type' => $param[0] - )); - } - } - // @returns - if (count($returns = $entry->getReturns())) { - array_push( - $result, '', - '#### Returns', - Generator::interpolate('(#{type}): #{desc}', array('desc' => $returns[1], 'type' => $returns[0])) - ); - } - // @example - if ($example = $entry->getExample()) { - array_push($result, '', '#### Example', $example); - } - array_push($result, "\n* * *", $this->closeTag); - } - } - - /** - * Resolves the entry's hash used to navigate the documentation. - * - * @private - * @memberOf Generator - * @param {Number|Object} $entry The entry object. - * @param {String} $member The name of the member. - * @returns {String} The url hash. - */ - private function getHash( $entry, $member = '' ) { - $entry = is_numeric($entry) ? $this->entries[$entry] : $entry; - $member = !$member ? $entry->getMembers(0) : $member; - $result = ($member ? $member . ($entry->isPlugin() ? 'prototype' : '') : '') . $entry->getCall(); - $result = preg_replace('/\(\[|\[\]/', '', $result); - $result = preg_replace('/[ =|\'"{}.()\]]/', '', $result); - $result = preg_replace('/[[#,]/', '-', $result); - return strtolower($result); - } - - /** - * Resolves the entry's url for the specific line number. - * - * @private - * @memberOf Generator - * @param {Number|Object} $entry The entry object. - * @returns {String} The url. - */ - private function getLineUrl( $entry ) { - $entry = is_numeric($entry) ? $this->entries($entry) : $entry; - return $this->options['url'] . '#L' . $entry->getLineNumber(); - } - - /** - * Extracts the character used to separate the entry's name from its member. - * - * @private - * @memberOf Generator - * @param {Number|Object} $entry The entry object. - * @returns {String} The separator. - */ - private function getSeparator( $entry ) { - $entry = is_numeric($entry) ? $this->entries($entry) : $entry; - return $entry->isPlugin() ? '.prototype.' : '.'; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Generates Markdown from JSDoc entries. - * - * @memberOf Generator - * @returns {String} The rendered Markdown. - */ - public function generate() { - $api = array(); - $byCategory = $this->options['toc'] == 'categories'; - $categories = array(); - $closeTag = $this->closeTag; - $compiling = false; - $openTag = $this->openTag; - $result = array('# ' . $this->options['title']); - $toc = 'toc'; - - // initialize $api array - foreach ($this->entries as $entry) { - // skip invalid or private entries - $name = $entry->getName(); - if (!$name || $entry->isPrivate()) { - continue; - } - - $members = $entry->getMembers(); - $members = count($members) ? $members : array(''); - - foreach ($members as $member) { - // create api category arrays - if ($member && !isset($api[$member])) { - // create temporary entry to be replaced later - $api[$member] = new stdClass; - $api[$member]->static = array(); - $api[$member]->plugin = array(); - } - - // append entry to api member - if (!$member || $entry->isCtor() || ($entry->getType() == 'Object' && - !preg_match('/[=:]\s*(?:null|undefined)\s*[,;]?$/', $entry->entry))) { - - // assign the real entry, replacing the temporary entry if it exist - $member = ($member ? $member . ($entry->isPlugin() ? '#' : '.') : '') . $name; - $entry->static = @$api[$member] ? $api[$member]->static : array(); - $entry->plugin = @$api[$member] ? $api[$member]->plugin : array(); - - $api[$member] = $entry; - foreach ($entry->getAliases() as $alias) { - $api[$member]->static[] = $alias; - } - } - else if ($entry->isStatic()) { - $api[$member]->static[] = $entry; - foreach ($entry->getAliases() as $alias) { - $api[$member]->static[] = $alias; - } - } - else if (!$entry->isCtor()) { - $api[$member]->plugin[] = $entry; - foreach ($entry->getAliases() as $alias) { - $api[$member]->plugin[] = $alias; - } - } - } - } - - // add properties to each entry - foreach ($api as $entry) { - $entry->hash = $this->getHash($entry); - $entry->href = $this->getLineUrl($entry); - - $member = $entry->getMembers(0); - $member = ($member ? $member . ($entry->isPlugin() ? '.prototype.' : '.') : '') . $entry->getName(); - $entry->member = preg_replace('/' . $entry->getName() . '$/', '', $member); - - // add properties to static and plugin sub-entries - foreach (array('static', 'plugin') as $kind) { - foreach ($entry->{$kind} as $subentry) { - $subentry->hash = $this->getHash($subentry); - $subentry->href = $this->getLineUrl($subentry); - $subentry->member = $member; - $subentry->separator = $this->getSeparator($subentry); - } - } - } - - /*------------------------------------------------------------------------*/ - - // custom sort for root level entries - // TODO: see how well it handles deeper namespace traversal - function sortCompare($a, $b) { - $score = array( 'a' => 0, 'b' => 0); - foreach (array( 'a' => $a, 'b' => $b) as $key => $value) { - // capitalized properties are last - if (preg_match('/[#.][A-Z]/', $value)) { - $score[$key] = 0; - } - // lowercase prototype properties are next to last - else if (preg_match('/#[a-z]/', $value)) { - $score[$key] = 1; - } - // lowercase static properties next to first - else if (preg_match('/\.[a-z]/', $value)) { - $score[$key] = 2; - } - // root properties are first - else if (preg_match('/^[^#.]+$/', $value)) { - $score[$key] = 3; - } - } - $score = $score['b'] - $score['a']; - return $score ? $score : strcasecmp($a, $b); - } - - uksort($api, 'sortCompare'); - - // sort static and plugin sub-entries - foreach ($api as $entry) { - foreach (array('static', 'plugin') as $kind) { - $sortBy = array( 'a' => array(), 'b' => array(), 'c' => array() ); - foreach ($entry->{$kind} as $subentry) { - $name = $subentry->getName(); - // functions w/o ALL-CAPs names are last - $sortBy['a'][] = $subentry->getType() == 'Function' && !preg_match('/^[A-Z_]+$/', $name); - // ALL-CAPs properties first - $sortBy['b'][] = preg_match('/^[A-Z_]+$/', $name); - // lowercase alphanumeric sort - $sortBy['c'][] = strtolower($name); - } - array_multisort($sortBy['a'], SORT_ASC, $sortBy['b'], SORT_DESC, $sortBy['c'], SORT_ASC, $entry->{$kind}); - } - } - - /*------------------------------------------------------------------------*/ - - // add categories - foreach ($api as $entry) { - $categories[$entry->getCategory()][] = $entry; - foreach (array('static', 'plugin') as $kind) { - foreach ($entry->{$kind} as $subentry) { - $categories[$subentry->getCategory()][] = $subentry; - } - } - } - - // sort categories - ksort($categories); - - foreach(array('Methods', 'Properties') as $category) { - if (isset($categories[$category])) { - $entries = $categories[$category]; - unset($categories[$category]); - $categories[$category] = $entries; - } - } - - /*------------------------------------------------------------------------*/ - - // compile TOC - $result[] = $openTag; - - // compile TOC by categories - if ($byCategory) { - foreach ($categories as $category => $entries) { - if ($compiling) { - $result[] = $closeTag; - } else { - $compiling = true; - } - // assign TOC hash - if (count($result) == 2) { - $toc = $category; - } - // add category - array_push( - $result, - $openTag, '## ' . (count($result) == 2 ? '<a id="' . $toc . '"></a>' : '') . '`' . $category . '`' - ); - // add entries - foreach ($entries as $entry) { - $result[] = Generator::interpolate('* [`#{member}#{separator}#{name}`](##{hash})', $entry); - } - } - } - // compile TOC by namespace - else { - foreach ($api as $entry) { - if ($compiling) { - $result[] = $closeTag; - } else { - $compiling = true; - } - $member = $entry->member . $entry->getName(); - - // assign TOC hash - if (count($result) == 2) { - $toc = $member; - } - // add root entry - array_push( - $result, - $openTag, '## ' . (count($result) == 2 ? '<a id="' . $toc . '"></a>' : '') . '`' . $member . '`', - Generator::interpolate('* [`' . $member . '`](##{hash})', $entry) - ); - - // add static and plugin sub-entries - foreach (array('static', 'plugin') as $kind) { - if ($kind == 'plugin' && count($entry->plugin)) { - array_push( - $result, - $closeTag, - $openTag, - '## `' . $member . ($entry->isCtor() ? '.prototype`' : '`') - ); - } - foreach ($entry->{$kind} as $subentry) { - $subentry->member = $member; - $result[] = Generator::interpolate('* [`#{member}#{separator}#{name}`](##{hash})', $subentry); - } - } - } - } - - array_push($result, $closeTag, $closeTag); - - /*------------------------------------------------------------------------*/ - - // compile content - $compiling = false; - $result[] = $openTag; - - if ($byCategory) { - foreach ($categories as $category => $entries) { - if ($compiling) { - $result[] = $closeTag; - } else { - $compiling = true; - } - if ($category != 'Methods' && $category != 'Properties') { - $category = '“' . $category . '” Methods'; - } - array_push($result, $openTag, '## `' . $category . '`'); - $this->addEntries($result, $entries); - } - } - else { - foreach ($api as $entry) { - // skip aliases - if ($entry->isAlias()) { - continue; - } - if ($compiling) { - $result[] = $closeTag; - } else { - $compiling = true; - } - // add root entry name - $member = $entry->member . $entry->getName(); - array_push($result, $openTag, '## `' . $member . '`'); - - foreach (array($entry, 'static', 'plugin') as $kind) { - $subentries = is_string($kind) ? $entry->{$kind} : array($kind); - - // add sub-entry name - if ($kind != 'static' && $entry->getType() != 'Object' && - count($subentries) && $subentries[0] != $kind) { - if ($kind == 'plugin') { - $result[] = $closeTag; - } - array_push( - $result, - $openTag, - '## `' . $member . ($kind == 'plugin' ? '.prototype`' : '`') - ); - } - $this->addEntries($result, $subentries); - } - } - } - - // close tags add TOC link reference - array_push($result, $closeTag, $closeTag, '', ' [1]: #' . $toc . ' "Jump back to the TOC."'); - - // cleanup whitespace - return trim(preg_replace('/[\t ]+\n/', "\n", join($result, "\n"))); - } -} -?> diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/package.json deleted file mode 100644 index 167c7c6a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "author": { - "name": "Jeremy Stashewsky", - "email": "jeremy@goinstant.com", - "url": "https://github.com/stash" - }, - "name": "tough-cookie", - "description": "RFC6265 Cookies and Cookie Jar for node.js", - "keywords": [ - "HTTP", - "cookie", - "cookies", - "set-cookie", - "cookiejar", - "jar", - "RFC6265", - "RFC2965" - ], - "version": "0.9.15", - "homepage": "https://github.com/goinstant/node-cookie", - "repository": { - "type": "git", - "url": "git://github.com/goinstant/node-cookie.git" - }, - "bugs": { - "url": "https://github.com/goinstant/node-cookie/issues" - }, - "main": "./lib/cookie", - "scripts": { - "test": "vows test.js" - }, - "engines": { - "node": ">=0.4.12" - }, - "dependencies": { - "punycode": ">=0.2.0" - }, - "devDependencies": { - "vows": ">=0.6.0", - "async": ">=0.1.12" - }, - "readme": "[RFC6265](http://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js\n\n![Tough Cookie](http://www.goinstant.com.s3.amazonaws.com/tough-cookie.jpg)\n\n# Synopsis\n\n``` javascript\nvar cookies = require('tough-cookie'); // note: not 'cookie', 'cookies' or 'node-cookie'\nvar Cookie = cookies.Cookie;\nvar cookie = Cookie.parse(header);\ncookie.value = 'somethingdifferent';\nheader = cookie.toString();\n\nvar cookiejar = new cookies.CookieJar();\ncookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb);\n// ...\ncookiejar.getCookies('http://example.com/otherpath',function(err,cookies) {\n res.headers['cookie'] = cookies.join('; ');\n});\n```\n\n# Installation\n\nIt's _so_ easy!\n\n`npm install tough-cookie`\n\nRequires `punycode`, which should get installed automatically for you. Note that node.js v0.6.2+ bundles punycode by default.\n\nWhy the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken.\n\n# API\n\ncookies\n=======\n\nFunctions on the module you get from `require('tough-cookie')`. All can be used as pure functions and don't need to be \"bound\".\n\nparseDate(string[,strict])\n-----------------\n\nParse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`. If strict is set to true then leading/trailing non-seperator characters around the time part will cause the parsing to fail (e.g. \"Thu, 01 Jan 1970 00:00:010 GMT\" has an extra trailing zero but Chrome, an assumedly RFC-compliant browser, treats this as valid).\n\nformatDate(date)\n----------------\n\nFormat a Date into a RFC1123 string (the RFC6265-recommended format).\n\ncanonicalDomain(str)\n--------------------\n\nTransforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects).\n\ndomainMatch(str,domStr[,canonicalize=true])\n-------------------------------------------\n\nAnswers \"does this real domain match the domain in a cookie?\". The `str` is the \"current\" domain-name and the `domStr` is the \"cookie\" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a \"suffix match\".\n\nThe `canonicalize` parameter will run the other two paramters through `canonicalDomain` or not.\n\ndefaultPath(path)\n-----------------\n\nGiven a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the \"directory\" of a \"file\" in the path, but is specified by Section 5.1.4 of the RFC.\n\nThe `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node's `uri.parse()` output.\n\npathMatch(reqPath,cookiePath)\n-----------------------------\n\nAnswers \"does the request-path path-match a given cookie-path?\" as per RFC6265 Section 5.1.4. Returns a boolean.\n\nThis is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`.\n\nparse(header[,strict=false])\n----------------------------\n\nalias for `Cookie.parse(header[,strict])`\n\nfromJSON(string)\n----------------\n\nalias for `Cookie.fromJSON(string)`\n\ngetPublicSuffix(hostname)\n-------------------------\n\nReturns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it.\n\nFor example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`.\n\nFor further information, see http://publicsuffix.org/. This module derives its list from that site.\n\ncookieCompare(a,b)\n------------------\n\nFor use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). Longest `.path`s go first, then sorted oldest to youngest.\n\n``` javascript\nvar cookies = [ /* unsorted array of Cookie objects */ ];\ncookies = cookies.sort(cookieCompare);\n```\n\npermuteDomain(domain)\n---------------------\n\nGenerates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores.\n\n\npermutePath(path)\n-----------------\n\nGenerates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores.\n\nCookie\n======\n\nCookie.parse(header[,strict=false])\n-----------------------------------\n\nParses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can't be parsed. If in strict mode, returns `undefined` if the cookie doesn't follow the guidelines in section 4 of RFC6265. Generally speaking, strict mode can be used to validate your own generated Set-Cookie headers, but acting as a client you want to be lenient and leave strict mode off.\n\nHere's how to process the Set-Cookie header(s) on a node HTTP/HTTPS response:\n\n``` javascript\nif (res.headers['set-cookie'] instanceof Array)\n cookies = res.headers['set-cookie'].map(Cookie.parse);\nelse\n cookies = [Cookie.parse(res.headers['set-cookie'])];\n```\n\nCookie.fromJSON(string)\n-----------------------\n\nConvert a JSON string to a `Cookie` object. Does a `JSON.parse()` and converts the `.created`, `.lastAccessed` and `.expires` properties into `Date` objects.\n\nProperties\n==========\n\n * _key_ - string - the name or key of the cookie (default \"\")\n * _value_ - string - the value of the cookie (default \"\")\n * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `\"Infinity\"`). See `setExpires()`\n * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `\"Infinity\"` and `\"-Infinity\"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()`\n * _domain_ - string - the `Domain=` attribute of the cookie\n * _path_ - string - the `Path=` of the cookie\n * _secure_ - boolean - the `Secure` cookie flag\n * _httpOnly_ - boolean - the `HttpOnly` cookie flag\n * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside)\n \nAfter a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes:\n\n * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied)\n * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one.\n * _created_ - `Date` - when this cookie was added to the jar\n * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute.\n\nConstruction([{options}])\n------------\n\nReceives an options object that can contain any Cookie properties, uses the default for unspecified properties.\n\n.toString()\n-----------\n\nencode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`.\n\n.cookieString()\n---------------\n\nencode to a Cookie header value (i.e. the `.key` and `.value` properties joined with '=').\n\n.setExpires(String)\n-------------------\n\nsets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can't parse this date string), `.expires` is set to `\"Infinity\"` (a string) is set.\n\n.setMaxAge(number)\n-------------------\n\nsets the maxAge in seconds. Coerces `-Infinity` to `\"-Infinity\"` and `Infinity` to `\"Infinity\"` so it JSON serializes correctly.\n\n.expiryTime([now=Date.now()])\n-----------------------------\n\n.expiryDate([now=Date.now()])\n-----------------------------\n\nexpiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds.\n\nMax-Age takes precedence over Expires (as per the RFC). The `.created` attribute -- or, by default, the `now` paramter -- is used to offset the `.maxAge` attribute.\n\nIf Expires (`.expires`) is set, that's returned.\n\nOtherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for \"Tue, 19 Jan 2038 03:14:07 GMT\" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents).\n\n.TTL([now=Date.now()])\n---------\n\ncompute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply.\n\nThe \"number\" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned.\n\n.canonicalizedDoman()\n---------------------\n\n.cdomain()\n----------\n\nreturn the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters.\n\n.validate()\n-----------\n\nStatus: *IN PROGRESS*. Works for a few things, but is by no means comprehensive.\n\nvalidates cookie attributes for semantic correctness. Useful for \"lint\" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct:\n\n``` javascript\nif (cookie.validate() === true) {\n // it's tasty\n} else {\n // yuck!\n}\n```\n\nCookieJar\n=========\n\nConstruction([store = new MemoryCookieStore()][, rejectPublicSuffixes])\n------------\n\nSimply use `new CookieJar()`. If you'd like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used.\n\n\nAttributes\n----------\n\n * _rejectPublicSuffixes_ - boolean - reject cookies with domains like \"com\" and \"co.uk\" (default: `true`)\n \nSince eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods.\n\n.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie))\n-------------------------------------------------------------------\n\nAttempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.created`, `.lastAccessed` and `.hostOnly` properties.\n\nThe `options` object can be omitted and can have the following properties:\n\n * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies.\n * _secure_ - boolean - autodetect from url - indicates if this is a \"Secure\" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`.\n * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies\n * _strict_ - boolean - default `false` - perform extra checks\n * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. CookieStore errors aren't ignored by this option.\n\nAs per the RFC, the `.hostOnly` property is set if there was no \"Domain=\" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual).\n\n.storeCookie(cookie, [{options},] cb(err,cookie))\n-------------------------------------------------\n\n__REMOVED__ removed in lieu of the CookieStore API below\n \n.getCookies(currentUrl, [{options},] cb(err,cookies))\n-----------------------------------------------------\n\nRetrieve the list of cookies that can be sent in a Cookie header for the current url.\n\nIf an error is encountered, that's passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given.\n\nThe `options` object can be omitted and can have the following properties:\n\n * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies.\n * _secure_ - boolean - autodetect from url - indicates if this is a \"Secure\" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`.\n * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies\n * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially).\n * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the CookieStore `fetchCookies` function (the default MemoryCookieStore supports it).\n\nThe `.lastAccessed` property of the returned cookies will have been updated.\n\n.getCookieString(...)\n---------------------\n\nAccepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`.\n\n.getSetCookieStrings(...)\n-------------------------\n\nAccepts the same options as `.getCookies()` but passes an array of strings suitable for Set-Cookie headers (rather than an array of `Cookie`s) to the callback. Simply maps the cookie array via `.toString()`.\n\n# CookieStore API\n\nThe storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores.\n\nAll `domain` parameters will have been normalized before calling.\n\nThe Cookie store must have all of the following methods.\n\nstore.findCookie(domain, path, key, cb(err,cookie))\n---------------------------------------------------\n\nRetrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned.\n\nCallback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error).\n\nstore.findCookies(domain, path, cb(err,cookies))\n------------------------------------------------\n\nLocates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above.\n\nIf no cookies are found, the callback MUST be passed an empty array.\n\nThe resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it's OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done.\n\nAs of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only).\n\nstore.putCookie(cookie, cb(err))\n--------------------------------\n\nAdds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it's possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur.\n\nThe `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties.\n\nPass an error if the cookie cannot be stored.\n\nstore.updateCookie(oldCookie, newCookie, cb(err))\n-------------------------------------------------\n\nUpdate an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store.\n\nThe `.lastAccessed` property will always be different between the two objects and `.created` will always be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are sorted (or selected for deletion).\n\nStores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn't define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object.\n\nThe `newCookie` and `oldCookie` objects MUST NOT be modified.\n\nPass an error if the newCookie cannot be stored.\n\nstore.removeCookie(domain, path, key, cb(err))\n----------------------------------------------\n\nRemove a cookie from the store (see notes on `findCookie` about the uniqueness constraint).\n\nThe implementation MUST NOT pass an error if the cookie doesn't exist; only pass an error due to the failure to remove an existing cookie.\n\nstore.removeCookies(domain, path, cb(err))\n------------------------------------------\n\nRemoves matching cookies from the store. The `path` paramter is optional, and if missing means all paths in a domain should be removed.\n\nPass an error ONLY if removing any existing cookies failed.\n\n# TODO\n\n * _full_ RFC5890/RFC5891 canonicalization for domains in `cdomain()`\n * the optional `punycode` requirement implements RFC3492, but RFC6265 requires RFC5891\n * better tests for `validate()`?\n\n# Copyright and License\n\n(tl;dr: MIT with some MPL/1.1)\n\nCopyright GoInstant, Inc. and other contributors. All rights reserved.\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n\nPortions may be licensed under different licenses (in particular public-suffix.txt is MPL/1.1); please read the LICENSE file for full details.\n", - "readmeFilename": "README.md", - "_id": "tough-cookie@0.9.15", - "dist": { - "shasum": "0fbda7fb5b5bca17e4f97909a0818dc8c2c12588" - }, - "_from": "tough-cookie@~0.9.15", - "_resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.9.15.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/public-suffix.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/public-suffix.txt deleted file mode 100644 index 2c201312..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/public-suffix.txt +++ /dev/null @@ -1,5229 +0,0 @@ -// ***** BEGIN LICENSE BLOCK ***** -// Version: MPL 1.1/GPL 2.0/LGPL 2.1 -// -// The contents of this file are subject to the Mozilla Public License Version -// 1.1 (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// http://www.mozilla.org/MPL/ -// -// Software distributed under the License is distributed on an "AS IS" basis, -// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -// for the specific language governing rights and limitations under the -// License. -// -// The Original Code is the Public Suffix List. -// -// The Initial Developer of the Original Code is -// Jo Hermans <jo.hermans@gmail.com>. -// Portions created by the Initial Developer are Copyright (C) 2007 -// the Initial Developer. All Rights Reserved. -// -// Contributor(s): -// Ruben Arakelyan <ruben@rubenarakelyan.com> -// Gervase Markham <gerv@gerv.net> -// Pamela Greene <pamg.bugs@gmail.com> -// David Triendl <david@triendl.name> -// Jothan Frakes <jothan@gmail.com> -// The kind representatives of many TLD registries -// -// Alternatively, the contents of this file may be used under the terms of -// either the GNU General Public License Version 2 or later (the "GPL"), or -// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -// in which case the provisions of the GPL or the LGPL are applicable instead -// of those above. If you wish to allow use of your version of this file only -// under the terms of either the GPL or the LGPL, and not to allow others to -// use your version of this file under the terms of the MPL, indicate your -// decision by deleting the provisions above and replace them with the notice -// and other provisions required by the GPL or the LGPL. If you do not delete -// the provisions above, a recipient may use your version of this file under -// the terms of any one of the MPL, the GPL or the LGPL. -// -// ***** END LICENSE BLOCK ***** - -// ===BEGIN ICANN DOMAINS=== - -// ac : http://en.wikipedia.org/wiki/.ac -ac -com.ac -edu.ac -gov.ac -net.ac -mil.ac -org.ac - -// ad : http://en.wikipedia.org/wiki/.ad -ad -nom.ad - -// ae : http://en.wikipedia.org/wiki/.ae -// see also: "Domain Name Eligibility Policy" at http://www.aeda.ae/eng/aepolicy.php -ae -co.ae -net.ae -org.ae -sch.ae -ac.ae -gov.ae -mil.ae - -// aero : see http://www.information.aero/index.php?id=66 -aero -accident-investigation.aero -accident-prevention.aero -aerobatic.aero -aeroclub.aero -aerodrome.aero -agents.aero -aircraft.aero -airline.aero -airport.aero -air-surveillance.aero -airtraffic.aero -air-traffic-control.aero -ambulance.aero -amusement.aero -association.aero -author.aero -ballooning.aero -broker.aero -caa.aero -cargo.aero -catering.aero -certification.aero -championship.aero -charter.aero -civilaviation.aero -club.aero -conference.aero -consultant.aero -consulting.aero -control.aero -council.aero -crew.aero -design.aero -dgca.aero -educator.aero -emergency.aero -engine.aero -engineer.aero -entertainment.aero -equipment.aero -exchange.aero -express.aero -federation.aero -flight.aero -freight.aero -fuel.aero -gliding.aero -government.aero -groundhandling.aero -group.aero -hanggliding.aero -homebuilt.aero -insurance.aero -journal.aero -journalist.aero -leasing.aero -logistics.aero -magazine.aero -maintenance.aero -marketplace.aero -media.aero -microlight.aero -modelling.aero -navigation.aero -parachuting.aero -paragliding.aero -passenger-association.aero -pilot.aero -press.aero -production.aero -recreation.aero -repbody.aero -res.aero -research.aero -rotorcraft.aero -safety.aero -scientist.aero -services.aero -show.aero -skydiving.aero -software.aero -student.aero -taxi.aero -trader.aero -trading.aero -trainer.aero -union.aero -workinggroup.aero -works.aero - -// af : http://www.nic.af/help.jsp -af -gov.af -com.af -org.af -net.af -edu.af - -// ag : http://www.nic.ag/prices.htm -ag -com.ag -org.ag -net.ag -co.ag -nom.ag - -// ai : http://nic.com.ai/ -ai -off.ai -com.ai -net.ai -org.ai - -// al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31 -al -com.al -edu.al -gov.al -mil.al -net.al -org.al - -// am : http://en.wikipedia.org/wiki/.am -am - -// an : http://www.una.an/an_domreg/default.asp -an -com.an -net.an -org.an -edu.an - -// ao : http://en.wikipedia.org/wiki/.ao -// http://www.dns.ao/REGISTR.DOC -ao -ed.ao -gv.ao -og.ao -co.ao -pb.ao -it.ao - -// aq : http://en.wikipedia.org/wiki/.aq -aq - -// ar : http://en.wikipedia.org/wiki/.ar -*.ar -!congresodelalengua3.ar -!educ.ar -!gobiernoelectronico.ar -!mecon.ar -!nacion.ar -!nic.ar -!promocion.ar -!retina.ar -!uba.ar - -// arpa : http://en.wikipedia.org/wiki/.arpa -// Confirmed by registry <iana-questions@icann.org> 2008-06-18 -e164.arpa -in-addr.arpa -ip6.arpa -iris.arpa -uri.arpa -urn.arpa - -// as : http://en.wikipedia.org/wiki/.as -as -gov.as - -// asia : http://en.wikipedia.org/wiki/.asia -asia - -// at : http://en.wikipedia.org/wiki/.at -// Confirmed by registry <it@nic.at> 2008-06-17 -at -ac.at -co.at -gv.at -or.at - -// au : http://en.wikipedia.org/wiki/.au -// http://www.auda.org.au/ -// 2LDs -com.au -net.au -org.au -edu.au -gov.au -csiro.au -asn.au -id.au -// Historic 2LDs (closed to new registration, but sites still exist) -info.au -conf.au -oz.au -// CGDNs - http://www.cgdn.org.au/ -act.au -nsw.au -nt.au -qld.au -sa.au -tas.au -vic.au -wa.au -// 3LDs -act.edu.au -nsw.edu.au -nt.edu.au -qld.edu.au -sa.edu.au -tas.edu.au -vic.edu.au -wa.edu.au -act.gov.au -// Removed at request of Shae.Donelan@services.nsw.gov.au, 2010-03-04 -// nsw.gov.au -nt.gov.au -qld.gov.au -sa.gov.au -tas.gov.au -vic.gov.au -wa.gov.au - -// aw : http://en.wikipedia.org/wiki/.aw -aw -com.aw - -// ax : http://en.wikipedia.org/wiki/.ax -ax - -// az : http://en.wikipedia.org/wiki/.az -az -com.az -net.az -int.az -gov.az -org.az -edu.az -info.az -pp.az -mil.az -name.az -pro.az -biz.az - -// ba : http://en.wikipedia.org/wiki/.ba -ba -org.ba -net.ba -edu.ba -gov.ba -mil.ba -unsa.ba -unbi.ba -co.ba -com.ba -rs.ba - -// bb : http://en.wikipedia.org/wiki/.bb -bb -biz.bb -com.bb -edu.bb -gov.bb -info.bb -net.bb -org.bb -store.bb - -// bd : http://en.wikipedia.org/wiki/.bd -*.bd - -// be : http://en.wikipedia.org/wiki/.be -// Confirmed by registry <tech@dns.be> 2008-06-08 -be -ac.be - -// bf : http://en.wikipedia.org/wiki/.bf -bf -gov.bf - -// bg : http://en.wikipedia.org/wiki/.bg -// https://www.register.bg/user/static/rules/en/index.html -bg -a.bg -b.bg -c.bg -d.bg -e.bg -f.bg -g.bg -h.bg -i.bg -j.bg -k.bg -l.bg -m.bg -n.bg -o.bg -p.bg -q.bg -r.bg -s.bg -t.bg -u.bg -v.bg -w.bg -x.bg -y.bg -z.bg -0.bg -1.bg -2.bg -3.bg -4.bg -5.bg -6.bg -7.bg -8.bg -9.bg - -// bh : http://en.wikipedia.org/wiki/.bh -bh -com.bh -edu.bh -net.bh -org.bh -gov.bh - -// bi : http://en.wikipedia.org/wiki/.bi -// http://whois.nic.bi/ -bi -co.bi -com.bi -edu.bi -or.bi -org.bi - -// biz : http://en.wikipedia.org/wiki/.biz -biz - -// bj : http://en.wikipedia.org/wiki/.bj -bj -asso.bj -barreau.bj -gouv.bj - -// bm : http://www.bermudanic.bm/dnr-text.txt -bm -com.bm -edu.bm -gov.bm -net.bm -org.bm - -// bn : http://en.wikipedia.org/wiki/.bn -*.bn - -// bo : http://www.nic.bo/ -bo -com.bo -edu.bo -gov.bo -gob.bo -int.bo -org.bo -net.bo -mil.bo -tv.bo - -// br : http://registro.br/dominio/dpn.html -// Updated by registry <fneves@registro.br> 2011-03-01 -br -adm.br -adv.br -agr.br -am.br -arq.br -art.br -ato.br -b.br -bio.br -blog.br -bmd.br -can.br -cim.br -cng.br -cnt.br -com.br -coop.br -ecn.br -edu.br -emp.br -eng.br -esp.br -etc.br -eti.br -far.br -flog.br -fm.br -fnd.br -fot.br -fst.br -g12.br -ggf.br -gov.br -imb.br -ind.br -inf.br -jor.br -jus.br -lel.br -mat.br -med.br -mil.br -mus.br -net.br -nom.br -not.br -ntr.br -odo.br -org.br -ppg.br -pro.br -psc.br -psi.br -qsl.br -radio.br -rec.br -slg.br -srv.br -taxi.br -teo.br -tmp.br -trd.br -tur.br -tv.br -vet.br -vlog.br -wiki.br -zlg.br - -// bs : http://www.nic.bs/rules.html -bs -com.bs -net.bs -org.bs -edu.bs -gov.bs - -// bt : http://en.wikipedia.org/wiki/.bt -bt -com.bt -edu.bt -gov.bt -net.bt -org.bt - -// bv : No registrations at this time. -// Submitted by registry <jarle@uninett.no> 2006-06-16 - -// bw : http://en.wikipedia.org/wiki/.bw -// http://www.gobin.info/domainname/bw.doc -// list of other 2nd level tlds ? -bw -co.bw -org.bw - -// by : http://en.wikipedia.org/wiki/.by -// http://tld.by/rules_2006_en.html -// list of other 2nd level tlds ? -by -gov.by -mil.by -// Official information does not indicate that com.by is a reserved -// second-level domain, but it's being used as one (see www.google.com.by and -// www.yahoo.com.by, for example), so we list it here for safety's sake. -com.by - -// http://hoster.by/ -of.by - -// bz : http://en.wikipedia.org/wiki/.bz -// http://www.belizenic.bz/ -bz -com.bz -net.bz -org.bz -edu.bz -gov.bz - -// ca : http://en.wikipedia.org/wiki/.ca -ca -// ca geographical names -ab.ca -bc.ca -mb.ca -nb.ca -nf.ca -nl.ca -ns.ca -nt.ca -nu.ca -on.ca -pe.ca -qc.ca -sk.ca -yk.ca -// gc.ca: http://en.wikipedia.org/wiki/.gc.ca -// see also: http://registry.gc.ca/en/SubdomainFAQ -gc.ca - -// cat : http://en.wikipedia.org/wiki/.cat -cat - -// cc : http://en.wikipedia.org/wiki/.cc -cc - -// cd : http://en.wikipedia.org/wiki/.cd -// see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1 -cd -gov.cd - -// cf : http://en.wikipedia.org/wiki/.cf -cf - -// cg : http://en.wikipedia.org/wiki/.cg -cg - -// ch : http://en.wikipedia.org/wiki/.ch -ch - -// ci : http://en.wikipedia.org/wiki/.ci -// http://www.nic.ci/index.php?page=charte -ci -org.ci -or.ci -com.ci -co.ci -edu.ci -ed.ci -ac.ci -net.ci -go.ci -asso.ci -aéroport.ci -int.ci -presse.ci -md.ci -gouv.ci - -// ck : http://en.wikipedia.org/wiki/.ck -*.ck -!www.ck - -// cl : http://en.wikipedia.org/wiki/.cl -cl -gov.cl -gob.cl -co.cl -mil.cl - -// cm : http://en.wikipedia.org/wiki/.cm -cm -gov.cm - -// cn : http://en.wikipedia.org/wiki/.cn -// Submitted by registry <tanyaling@cnnic.cn> 2008-06-11 -cn -ac.cn -com.cn -edu.cn -gov.cn -net.cn -org.cn -mil.cn -公司.cn -网络.cn -網絡.cn -// cn geographic names -ah.cn -bj.cn -cq.cn -fj.cn -gd.cn -gs.cn -gz.cn -gx.cn -ha.cn -hb.cn -he.cn -hi.cn -hl.cn -hn.cn -jl.cn -js.cn -jx.cn -ln.cn -nm.cn -nx.cn -qh.cn -sc.cn -sd.cn -sh.cn -sn.cn -sx.cn -tj.cn -xj.cn -xz.cn -yn.cn -zj.cn -hk.cn -mo.cn -tw.cn - -// co : http://en.wikipedia.org/wiki/.co -// Submitted by registry <tecnico@uniandes.edu.co> 2008-06-11 -co -arts.co -com.co -edu.co -firm.co -gov.co -info.co -int.co -mil.co -net.co -nom.co -org.co -rec.co -web.co - -// com : http://en.wikipedia.org/wiki/.com -com - -// coop : http://en.wikipedia.org/wiki/.coop -coop - -// cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do -cr -ac.cr -co.cr -ed.cr -fi.cr -go.cr -or.cr -sa.cr - -// cu : http://en.wikipedia.org/wiki/.cu -cu -com.cu -edu.cu -org.cu -net.cu -gov.cu -inf.cu - -// cv : http://en.wikipedia.org/wiki/.cv -cv - -// cx : http://en.wikipedia.org/wiki/.cx -// list of other 2nd level tlds ? -cx -gov.cx - -// cy : http://en.wikipedia.org/wiki/.cy -*.cy - -// cz : http://en.wikipedia.org/wiki/.cz -cz - -// de : http://en.wikipedia.org/wiki/.de -// Confirmed by registry <ops@denic.de> (with technical -// reservations) 2008-07-01 -de - -// dj : http://en.wikipedia.org/wiki/.dj -dj - -// dk : http://en.wikipedia.org/wiki/.dk -// Confirmed by registry <robert@dk-hostmaster.dk> 2008-06-17 -dk - -// dm : http://en.wikipedia.org/wiki/.dm -dm -com.dm -net.dm -org.dm -edu.dm -gov.dm - -// do : http://en.wikipedia.org/wiki/.do -do -art.do -com.do -edu.do -gob.do -gov.do -mil.do -net.do -org.do -sld.do -web.do - -// dz : http://en.wikipedia.org/wiki/.dz -dz -com.dz -org.dz -net.dz -gov.dz -edu.dz -asso.dz -pol.dz -art.dz - -// ec : http://www.nic.ec/reg/paso1.asp -// Submitted by registry <vabboud@nic.ec> 2008-07-04 -ec -com.ec -info.ec -net.ec -fin.ec -k12.ec -med.ec -pro.ec -org.ec -edu.ec -gov.ec -gob.ec -mil.ec - -// edu : http://en.wikipedia.org/wiki/.edu -edu - -// ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B -ee -edu.ee -gov.ee -riik.ee -lib.ee -med.ee -com.ee -pri.ee -aip.ee -org.ee -fie.ee - -// eg : http://en.wikipedia.org/wiki/.eg -eg -com.eg -edu.eg -eun.eg -gov.eg -mil.eg -name.eg -net.eg -org.eg -sci.eg - -// er : http://en.wikipedia.org/wiki/.er -*.er - -// es : https://www.nic.es/site_ingles/ingles/dominios/index.html -es -com.es -nom.es -org.es -gob.es -edu.es - -// et : http://en.wikipedia.org/wiki/.et -*.et - -// eu : http://en.wikipedia.org/wiki/.eu -eu - -// fi : http://en.wikipedia.org/wiki/.fi -fi -// aland.fi : http://en.wikipedia.org/wiki/.ax -// This domain is being phased out in favor of .ax. As there are still many -// domains under aland.fi, we still keep it on the list until aland.fi is -// completely removed. -// TODO: Check for updates (expected to be phased out around Q1/2009) -aland.fi - -// fj : http://en.wikipedia.org/wiki/.fj -*.fj - -// fk : http://en.wikipedia.org/wiki/.fk -*.fk - -// fm : http://en.wikipedia.org/wiki/.fm -fm - -// fo : http://en.wikipedia.org/wiki/.fo -fo - -// fr : http://www.afnic.fr/ -// domaines descriptifs : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-descriptifs -fr -com.fr -asso.fr -nom.fr -prd.fr -presse.fr -tm.fr -// domaines sectoriels : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-sectoriels -aeroport.fr -assedic.fr -avocat.fr -avoues.fr -cci.fr -chambagri.fr -chirurgiens-dentistes.fr -experts-comptables.fr -geometre-expert.fr -gouv.fr -greta.fr -huissier-justice.fr -medecin.fr -notaires.fr -pharmacien.fr -port.fr -veterinaire.fr - -// ga : http://en.wikipedia.org/wiki/.ga -ga - -// gb : This registry is effectively dormant -// Submitted by registry <Damien.Shaw@ja.net> 2008-06-12 - -// gd : http://en.wikipedia.org/wiki/.gd -gd - -// ge : http://www.nic.net.ge/policy_en.pdf -ge -com.ge -edu.ge -gov.ge -org.ge -mil.ge -net.ge -pvt.ge - -// gf : http://en.wikipedia.org/wiki/.gf -gf - -// gg : http://www.channelisles.net/applic/avextn.shtml -gg -co.gg -org.gg -net.gg -sch.gg -gov.gg - -// gh : http://en.wikipedia.org/wiki/.gh -// see also: http://www.nic.gh/reg_now.php -// Although domains directly at second level are not possible at the moment, -// they have been possible for some time and may come back. -gh -com.gh -edu.gh -gov.gh -org.gh -mil.gh - -// gi : http://www.nic.gi/rules.html -gi -com.gi -ltd.gi -gov.gi -mod.gi -edu.gi -org.gi - -// gl : http://en.wikipedia.org/wiki/.gl -// http://nic.gl -gl - -// gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm -gm - -// gn : http://psg.com/dns/gn/gn.txt -// Submitted by registry <randy@psg.com> 2008-06-17 -ac.gn -com.gn -edu.gn -gov.gn -org.gn -net.gn - -// gov : http://en.wikipedia.org/wiki/.gov -gov - -// gp : http://www.nic.gp/index.php?lang=en -gp -com.gp -net.gp -mobi.gp -edu.gp -org.gp -asso.gp - -// gq : http://en.wikipedia.org/wiki/.gq -gq - -// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html -// Submitted by registry <segred@ics.forth.gr> 2008-06-09 -gr -com.gr -edu.gr -net.gr -org.gr -gov.gr - -// gs : http://en.wikipedia.org/wiki/.gs -gs - -// gt : http://www.gt/politicas.html -*.gt -!www.gt - -// gu : http://gadao.gov.gu/registration.txt -*.gu - -// gw : http://en.wikipedia.org/wiki/.gw -gw - -// gy : http://en.wikipedia.org/wiki/.gy -// http://registry.gy/ -gy -co.gy -com.gy -net.gy - -// hk : https://www.hkdnr.hk -// Submitted by registry <hk.tech@hkirc.hk> 2008-06-11 -hk -com.hk -edu.hk -gov.hk -idv.hk -net.hk -org.hk -公司.hk -教育.hk -敎育.hk -政府.hk -個人.hk -个人.hk -箇人.hk -網络.hk -网络.hk -组織.hk -網絡.hk -网絡.hk -组织.hk -組織.hk -組织.hk - -// hm : http://en.wikipedia.org/wiki/.hm -hm - -// hn : http://www.nic.hn/politicas/ps02,,05.html -hn -com.hn -edu.hn -org.hn -net.hn -mil.hn -gob.hn - -// hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf -hr -iz.hr -from.hr -name.hr -com.hr - -// ht : http://www.nic.ht/info/charte.cfm -ht -com.ht -shop.ht -firm.ht -info.ht -adult.ht -net.ht -pro.ht -org.ht -med.ht -art.ht -coop.ht -pol.ht -asso.ht -edu.ht -rel.ht -gouv.ht -perso.ht - -// hu : http://www.domain.hu/domain/English/sld.html -// Confirmed by registry <pasztor@iszt.hu> 2008-06-12 -hu -co.hu -info.hu -org.hu -priv.hu -sport.hu -tm.hu -2000.hu -agrar.hu -bolt.hu -casino.hu -city.hu -erotica.hu -erotika.hu -film.hu -forum.hu -games.hu -hotel.hu -ingatlan.hu -jogasz.hu -konyvelo.hu -lakas.hu -media.hu -news.hu -reklam.hu -sex.hu -shop.hu -suli.hu -szex.hu -tozsde.hu -utazas.hu -video.hu - -// id : http://en.wikipedia.org/wiki/.id -// see also: https://register.pandi.or.id/ -id -ac.id -co.id -go.id -mil.id -net.id -or.id -sch.id -web.id - -// ie : http://en.wikipedia.org/wiki/.ie -ie -gov.ie - -// il : http://en.wikipedia.org/wiki/.il -*.il - -// im : https://www.nic.im/pdfs/imfaqs.pdf -im -co.im -ltd.co.im -plc.co.im -net.im -gov.im -org.im -nic.im -ac.im - -// in : http://en.wikipedia.org/wiki/.in -// see also: http://www.inregistry.in/policies/ -// Please note, that nic.in is not an offical eTLD, but used by most -// government institutions. -in -co.in -firm.in -net.in -org.in -gen.in -ind.in -nic.in -ac.in -edu.in -res.in -gov.in -mil.in - -// info : http://en.wikipedia.org/wiki/.info -info - -// int : http://en.wikipedia.org/wiki/.int -// Confirmed by registry <iana-questions@icann.org> 2008-06-18 -int -eu.int - -// io : http://www.nic.io/rules.html -// list of other 2nd level tlds ? -io -com.io - -// iq : http://www.cmc.iq/english/iq/iqregister1.htm -iq -gov.iq -edu.iq -mil.iq -com.iq -org.iq -net.iq - -// ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules -// Also see http://www.nic.ir/Internationalized_Domain_Names -// Two <iran>.ir entries added at request of <tech-team@nic.ir>, 2010-04-16 -ir -ac.ir -co.ir -gov.ir -id.ir -net.ir -org.ir -sch.ir -// xn--mgba3a4f16a.ir (<iran>.ir, Persian YEH) -ایران.ir -// xn--mgba3a4fra.ir (<iran>.ir, Arabic YEH) -ايران.ir - -// is : http://www.isnic.is/domain/rules.php -// Confirmed by registry <marius@isgate.is> 2008-12-06 -is -net.is -com.is -edu.is -gov.is -org.is -int.is - -// it : http://en.wikipedia.org/wiki/.it -it -gov.it -edu.it -// list of reserved geo-names : -// http://www.nic.it/documenti/regolamenti-e-linee-guida/regolamento-assegnazione-versione-6.0.pdf -// (There is also a list of reserved geo-names corresponding to Italian -// municipalities : http://www.nic.it/documenti/appendice-c.pdf , but it is -// not included here.) -agrigento.it -ag.it -alessandria.it -al.it -ancona.it -an.it -aosta.it -aoste.it -ao.it -arezzo.it -ar.it -ascoli-piceno.it -ascolipiceno.it -ap.it -asti.it -at.it -avellino.it -av.it -bari.it -ba.it -andria-barletta-trani.it -andriabarlettatrani.it -trani-barletta-andria.it -tranibarlettaandria.it -barletta-trani-andria.it -barlettatraniandria.it -andria-trani-barletta.it -andriatranibarletta.it -trani-andria-barletta.it -traniandriabarletta.it -bt.it -belluno.it -bl.it -benevento.it -bn.it -bergamo.it -bg.it -biella.it -bi.it -bologna.it -bo.it -bolzano.it -bozen.it -balsan.it -alto-adige.it -altoadige.it -suedtirol.it -bz.it -brescia.it -bs.it -brindisi.it -br.it -cagliari.it -ca.it -caltanissetta.it -cl.it -campobasso.it -cb.it -carboniaiglesias.it -carbonia-iglesias.it -iglesias-carbonia.it -iglesiascarbonia.it -ci.it -caserta.it -ce.it -catania.it -ct.it -catanzaro.it -cz.it -chieti.it -ch.it -como.it -co.it -cosenza.it -cs.it -cremona.it -cr.it -crotone.it -kr.it -cuneo.it -cn.it -dell-ogliastra.it -dellogliastra.it -ogliastra.it -og.it -enna.it -en.it -ferrara.it -fe.it -fermo.it -fm.it -firenze.it -florence.it -fi.it -foggia.it -fg.it -forli-cesena.it -forlicesena.it -cesena-forli.it -cesenaforli.it -fc.it -frosinone.it -fr.it -genova.it -genoa.it -ge.it -gorizia.it -go.it -grosseto.it -gr.it -imperia.it -im.it -isernia.it -is.it -laquila.it -aquila.it -aq.it -la-spezia.it -laspezia.it -sp.it -latina.it -lt.it -lecce.it -le.it -lecco.it -lc.it -livorno.it -li.it -lodi.it -lo.it -lucca.it -lu.it -macerata.it -mc.it -mantova.it -mn.it -massa-carrara.it -massacarrara.it -carrara-massa.it -carraramassa.it -ms.it -matera.it -mt.it -medio-campidano.it -mediocampidano.it -campidano-medio.it -campidanomedio.it -vs.it -messina.it -me.it -milano.it -milan.it -mi.it -modena.it -mo.it -monza.it -monza-brianza.it -monzabrianza.it -monzaebrianza.it -monzaedellabrianza.it -monza-e-della-brianza.it -mb.it -napoli.it -naples.it -na.it -novara.it -no.it -nuoro.it -nu.it -oristano.it -or.it -padova.it -padua.it -pd.it -palermo.it -pa.it -parma.it -pr.it -pavia.it -pv.it -perugia.it -pg.it -pescara.it -pe.it -pesaro-urbino.it -pesarourbino.it -urbino-pesaro.it -urbinopesaro.it -pu.it -piacenza.it -pc.it -pisa.it -pi.it -pistoia.it -pt.it -pordenone.it -pn.it -potenza.it -pz.it -prato.it -po.it -ragusa.it -rg.it -ravenna.it -ra.it -reggio-calabria.it -reggiocalabria.it -rc.it -reggio-emilia.it -reggioemilia.it -re.it -rieti.it -ri.it -rimini.it -rn.it -roma.it -rome.it -rm.it -rovigo.it -ro.it -salerno.it -sa.it -sassari.it -ss.it -savona.it -sv.it -siena.it -si.it -siracusa.it -sr.it -sondrio.it -so.it -taranto.it -ta.it -tempio-olbia.it -tempioolbia.it -olbia-tempio.it -olbiatempio.it -ot.it -teramo.it -te.it -terni.it -tr.it -torino.it -turin.it -to.it -trapani.it -tp.it -trento.it -trentino.it -tn.it -treviso.it -tv.it -trieste.it -ts.it -udine.it -ud.it -varese.it -va.it -venezia.it -venice.it -ve.it -verbania.it -vb.it -vercelli.it -vc.it -verona.it -vr.it -vibo-valentia.it -vibovalentia.it -vv.it -vicenza.it -vi.it -viterbo.it -vt.it - -// je : http://www.channelisles.net/applic/avextn.shtml -je -co.je -org.je -net.je -sch.je -gov.je - -// jm : http://www.com.jm/register.html -*.jm - -// jo : http://www.dns.jo/Registration_policy.aspx -jo -com.jo -org.jo -net.jo -edu.jo -sch.jo -gov.jo -mil.jo -name.jo - -// jobs : http://en.wikipedia.org/wiki/.jobs -jobs - -// jp : http://en.wikipedia.org/wiki/.jp -// http://jprs.co.jp/en/jpdomain.html -// Submitted by registry <yone@jprs.co.jp> 2008-06-11 -// Updated by registry <yone@jprs.co.jp> 2008-12-04 -jp -// jp organizational type names -ac.jp -ad.jp -co.jp -ed.jp -go.jp -gr.jp -lg.jp -ne.jp -or.jp -// jp geographic type names -// http://jprs.jp/doc/rule/saisoku-1.html -*.aichi.jp -*.akita.jp -*.aomori.jp -*.chiba.jp -*.ehime.jp -*.fukui.jp -*.fukuoka.jp -*.fukushima.jp -*.gifu.jp -*.gunma.jp -*.hiroshima.jp -*.hokkaido.jp -*.hyogo.jp -*.ibaraki.jp -*.ishikawa.jp -*.iwate.jp -*.kagawa.jp -*.kagoshima.jp -*.kanagawa.jp -*.kawasaki.jp -*.kitakyushu.jp -*.kobe.jp -*.kochi.jp -*.kumamoto.jp -*.kyoto.jp -*.mie.jp -*.miyagi.jp -*.miyazaki.jp -*.nagano.jp -*.nagasaki.jp -*.nagoya.jp -*.nara.jp -*.niigata.jp -*.oita.jp -*.okayama.jp -*.okinawa.jp -*.osaka.jp -*.saga.jp -*.saitama.jp -*.sapporo.jp -*.sendai.jp -*.shiga.jp -*.shimane.jp -*.shizuoka.jp -*.tochigi.jp -*.tokushima.jp -*.tokyo.jp -*.tottori.jp -*.toyama.jp -*.wakayama.jp -*.yamagata.jp -*.yamaguchi.jp -*.yamanashi.jp -*.yokohama.jp -!metro.tokyo.jp -!pref.aichi.jp -!pref.akita.jp -!pref.aomori.jp -!pref.chiba.jp -!pref.ehime.jp -!pref.fukui.jp -!pref.fukuoka.jp -!pref.fukushima.jp -!pref.gifu.jp -!pref.gunma.jp -!pref.hiroshima.jp -!pref.hokkaido.jp -!pref.hyogo.jp -!pref.ibaraki.jp -!pref.ishikawa.jp -!pref.iwate.jp -!pref.kagawa.jp -!pref.kagoshima.jp -!pref.kanagawa.jp -!pref.kochi.jp -!pref.kumamoto.jp -!pref.kyoto.jp -!pref.mie.jp -!pref.miyagi.jp -!pref.miyazaki.jp -!pref.nagano.jp -!pref.nagasaki.jp -!pref.nara.jp -!pref.niigata.jp -!pref.oita.jp -!pref.okayama.jp -!pref.okinawa.jp -!pref.osaka.jp -!pref.saga.jp -!pref.saitama.jp -!pref.shiga.jp -!pref.shimane.jp -!pref.shizuoka.jp -!pref.tochigi.jp -!pref.tokushima.jp -!pref.tottori.jp -!pref.toyama.jp -!pref.wakayama.jp -!pref.yamagata.jp -!pref.yamaguchi.jp -!pref.yamanashi.jp -!city.chiba.jp -!city.fukuoka.jp -!city.hiroshima.jp -!city.kawasaki.jp -!city.kitakyushu.jp -!city.kobe.jp -!city.kyoto.jp -!city.nagoya.jp -!city.niigata.jp -!city.okayama.jp -!city.osaka.jp -!city.saitama.jp -!city.sapporo.jp -!city.sendai.jp -!city.shizuoka.jp -!city.yokohama.jp - -// ke : http://www.kenic.or.ke/index.php?option=com_content&task=view&id=117&Itemid=145 -*.ke - -// kg : http://www.domain.kg/dmn_n.html -kg -org.kg -net.kg -com.kg -edu.kg -gov.kg -mil.kg - -// kh : http://www.mptc.gov.kh/dns_registration.htm -*.kh - -// ki : http://www.ki/dns/index.html -ki -edu.ki -biz.ki -net.ki -org.ki -gov.ki -info.ki -com.ki - -// km : http://en.wikipedia.org/wiki/.km -// http://www.domaine.km/documents/charte.doc -km -org.km -nom.km -gov.km -prd.km -tm.km -edu.km -mil.km -ass.km -com.km -// These are only mentioned as proposed suggestions at domaine.km, but -// http://en.wikipedia.org/wiki/.km says they're available for registration: -coop.km -asso.km -presse.km -medecin.km -notaires.km -pharmaciens.km -veterinaire.km -gouv.km - -// kn : http://en.wikipedia.org/wiki/.kn -// http://www.dot.kn/domainRules.html -kn -net.kn -org.kn -edu.kn -gov.kn - -// kp : http://www.kcce.kp/en_index.php -com.kp -edu.kp -gov.kp -org.kp -rep.kp -tra.kp - -// kr : http://en.wikipedia.org/wiki/.kr -// see also: http://domain.nida.or.kr/eng/registration.jsp -kr -ac.kr -co.kr -es.kr -go.kr -hs.kr -kg.kr -mil.kr -ms.kr -ne.kr -or.kr -pe.kr -re.kr -sc.kr -// kr geographical names -busan.kr -chungbuk.kr -chungnam.kr -daegu.kr -daejeon.kr -gangwon.kr -gwangju.kr -gyeongbuk.kr -gyeonggi.kr -gyeongnam.kr -incheon.kr -jeju.kr -jeonbuk.kr -jeonnam.kr -seoul.kr -ulsan.kr - -// kw : http://en.wikipedia.org/wiki/.kw -*.kw - -// ky : http://www.icta.ky/da_ky_reg_dom.php -// Confirmed by registry <kysupport@perimeterusa.com> 2008-06-17 -ky -edu.ky -gov.ky -com.ky -org.ky -net.ky - -// kz : http://en.wikipedia.org/wiki/.kz -// see also: http://www.nic.kz/rules/index.jsp -kz -org.kz -edu.kz -net.kz -gov.kz -mil.kz -com.kz - -// la : http://en.wikipedia.org/wiki/.la -// Submitted by registry <gavin.brown@nic.la> 2008-06-10 -la -int.la -net.la -info.la -edu.la -gov.la -per.la -com.la -org.la - -// lb : http://en.wikipedia.org/wiki/.lb -// Submitted by registry <randy@psg.com> 2008-06-17 -com.lb -edu.lb -gov.lb -net.lb -org.lb - -// lc : http://en.wikipedia.org/wiki/.lc -// see also: http://www.nic.lc/rules.htm -lc -com.lc -net.lc -co.lc -org.lc -edu.lc -gov.lc - -// li : http://en.wikipedia.org/wiki/.li -li - -// lk : http://www.nic.lk/seclevpr.html -lk -gov.lk -sch.lk -net.lk -int.lk -com.lk -org.lk -edu.lk -ngo.lk -soc.lk -web.lk -ltd.lk -assn.lk -grp.lk -hotel.lk - -// lr : http://psg.com/dns/lr/lr.txt -// Submitted by registry <randy@psg.com> 2008-06-17 -com.lr -edu.lr -gov.lr -org.lr -net.lr - -// ls : http://en.wikipedia.org/wiki/.ls -ls -co.ls -org.ls - -// lt : http://en.wikipedia.org/wiki/.lt -lt -// gov.lt : http://www.gov.lt/index_en.php -gov.lt - -// lu : http://www.dns.lu/en/ -lu - -// lv : http://www.nic.lv/DNS/En/generic.php -lv -com.lv -edu.lv -gov.lv -org.lv -mil.lv -id.lv -net.lv -asn.lv -conf.lv - -// ly : http://www.nic.ly/regulations.php -ly -com.ly -net.ly -gov.ly -plc.ly -edu.ly -sch.ly -med.ly -org.ly -id.ly - -// ma : http://en.wikipedia.org/wiki/.ma -// http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf -ma -co.ma -net.ma -gov.ma -org.ma -ac.ma -press.ma - -// mc : http://www.nic.mc/ -mc -tm.mc -asso.mc - -// md : http://en.wikipedia.org/wiki/.md -md - -// me : http://en.wikipedia.org/wiki/.me -me -co.me -net.me -org.me -edu.me -ac.me -gov.me -its.me -priv.me - -// mg : http://www.nic.mg/tarif.htm -mg -org.mg -nom.mg -gov.mg -prd.mg -tm.mg -edu.mg -mil.mg -com.mg - -// mh : http://en.wikipedia.org/wiki/.mh -mh - -// mil : http://en.wikipedia.org/wiki/.mil -mil - -// mk : http://en.wikipedia.org/wiki/.mk -// see also: http://dns.marnet.net.mk/postapka.php -mk -com.mk -org.mk -net.mk -edu.mk -gov.mk -inf.mk -name.mk - -// ml : http://www.gobin.info/domainname/ml-template.doc -// see also: http://en.wikipedia.org/wiki/.ml -ml -com.ml -edu.ml -gouv.ml -gov.ml -net.ml -org.ml -presse.ml - -// mm : http://en.wikipedia.org/wiki/.mm -*.mm - -// mn : http://en.wikipedia.org/wiki/.mn -mn -gov.mn -edu.mn -org.mn - -// mo : http://www.monic.net.mo/ -mo -com.mo -net.mo -org.mo -edu.mo -gov.mo - -// mobi : http://en.wikipedia.org/wiki/.mobi -mobi - -// mp : http://www.dot.mp/ -// Confirmed by registry <dcamacho@saipan.com> 2008-06-17 -mp - -// mq : http://en.wikipedia.org/wiki/.mq -mq - -// mr : http://en.wikipedia.org/wiki/.mr -mr -gov.mr - -// ms : http://en.wikipedia.org/wiki/.ms -ms - -// mt : https://www.nic.org.mt/dotmt/ -*.mt - -// mu : http://en.wikipedia.org/wiki/.mu -mu -com.mu -net.mu -org.mu -gov.mu -ac.mu -co.mu -or.mu - -// museum : http://about.museum/naming/ -// http://index.museum/ -museum -academy.museum -agriculture.museum -air.museum -airguard.museum -alabama.museum -alaska.museum -amber.museum -ambulance.museum -american.museum -americana.museum -americanantiques.museum -americanart.museum -amsterdam.museum -and.museum -annefrank.museum -anthro.museum -anthropology.museum -antiques.museum -aquarium.museum -arboretum.museum -archaeological.museum -archaeology.museum -architecture.museum -art.museum -artanddesign.museum -artcenter.museum -artdeco.museum -arteducation.museum -artgallery.museum -arts.museum -artsandcrafts.museum -asmatart.museum -assassination.museum -assisi.museum -association.museum -astronomy.museum -atlanta.museum -austin.museum -australia.museum -automotive.museum -aviation.museum -axis.museum -badajoz.museum -baghdad.museum -bahn.museum -bale.museum -baltimore.museum -barcelona.museum -baseball.museum -basel.museum -baths.museum -bauern.museum -beauxarts.museum -beeldengeluid.museum -bellevue.museum -bergbau.museum -berkeley.museum -berlin.museum -bern.museum -bible.museum -bilbao.museum -bill.museum -birdart.museum -birthplace.museum -bonn.museum -boston.museum -botanical.museum -botanicalgarden.museum -botanicgarden.museum -botany.museum -brandywinevalley.museum -brasil.museum -bristol.museum -british.museum -britishcolumbia.museum -broadcast.museum -brunel.museum -brussel.museum -brussels.museum -bruxelles.museum -building.museum -burghof.museum -bus.museum -bushey.museum -cadaques.museum -california.museum -cambridge.museum -can.museum -canada.museum -capebreton.museum -carrier.museum -cartoonart.museum -casadelamoneda.museum -castle.museum -castres.museum -celtic.museum -center.museum -chattanooga.museum -cheltenham.museum -chesapeakebay.museum -chicago.museum -children.museum -childrens.museum -childrensgarden.museum -chiropractic.museum -chocolate.museum -christiansburg.museum -cincinnati.museum -cinema.museum -circus.museum -civilisation.museum -civilization.museum -civilwar.museum -clinton.museum -clock.museum -coal.museum -coastaldefence.museum -cody.museum -coldwar.museum -collection.museum -colonialwilliamsburg.museum -coloradoplateau.museum -columbia.museum -columbus.museum -communication.museum -communications.museum -community.museum -computer.museum -computerhistory.museum -comunicações.museum -contemporary.museum -contemporaryart.museum -convent.museum -copenhagen.museum -corporation.museum -correios-e-telecomunicações.museum -corvette.museum -costume.museum -countryestate.museum -county.museum -crafts.museum -cranbrook.museum -creation.museum -cultural.museum -culturalcenter.museum -culture.museum -cyber.museum -cymru.museum -dali.museum -dallas.museum -database.museum -ddr.museum -decorativearts.museum -delaware.museum -delmenhorst.museum -denmark.museum -depot.museum -design.museum -detroit.museum -dinosaur.museum -discovery.museum -dolls.museum -donostia.museum -durham.museum -eastafrica.museum -eastcoast.museum -education.museum -educational.museum -egyptian.museum -eisenbahn.museum -elburg.museum -elvendrell.museum -embroidery.museum -encyclopedic.museum -england.museum -entomology.museum -environment.museum -environmentalconservation.museum -epilepsy.museum -essex.museum -estate.museum -ethnology.museum -exeter.museum -exhibition.museum -family.museum -farm.museum -farmequipment.museum -farmers.museum -farmstead.museum -field.museum -figueres.museum -filatelia.museum -film.museum -fineart.museum -finearts.museum -finland.museum -flanders.museum -florida.museum -force.museum -fortmissoula.museum -fortworth.museum -foundation.museum -francaise.museum -frankfurt.museum -franziskaner.museum -freemasonry.museum -freiburg.museum -fribourg.museum -frog.museum -fundacio.museum -furniture.museum -gallery.museum -garden.museum -gateway.museum -geelvinck.museum -gemological.museum -geology.museum -georgia.museum -giessen.museum -glas.museum -glass.museum -gorge.museum -grandrapids.museum -graz.museum -guernsey.museum -halloffame.museum -hamburg.museum -handson.museum -harvestcelebration.museum -hawaii.museum -health.museum -heimatunduhren.museum -hellas.museum -helsinki.museum -hembygdsforbund.museum -heritage.museum -histoire.museum -historical.museum -historicalsociety.museum -historichouses.museum -historisch.museum -historisches.museum -history.museum -historyofscience.museum -horology.museum -house.museum -humanities.museum -illustration.museum -imageandsound.museum -indian.museum -indiana.museum -indianapolis.museum -indianmarket.museum -intelligence.museum -interactive.museum -iraq.museum -iron.museum -isleofman.museum -jamison.museum -jefferson.museum -jerusalem.museum -jewelry.museum -jewish.museum -jewishart.museum -jfk.museum -journalism.museum -judaica.museum -judygarland.museum -juedisches.museum -juif.museum -karate.museum -karikatur.museum -kids.museum -koebenhavn.museum -koeln.museum -kunst.museum -kunstsammlung.museum -kunstunddesign.museum -labor.museum -labour.museum -lajolla.museum -lancashire.museum -landes.museum -lans.museum -läns.museum -larsson.museum -lewismiller.museum -lincoln.museum -linz.museum -living.museum -livinghistory.museum -localhistory.museum -london.museum -losangeles.museum -louvre.museum -loyalist.museum -lucerne.museum -luxembourg.museum -luzern.museum -mad.museum -madrid.museum -mallorca.museum -manchester.museum -mansion.museum -mansions.museum -manx.museum -marburg.museum -maritime.museum -maritimo.museum -maryland.museum -marylhurst.museum -media.museum -medical.museum -medizinhistorisches.museum -meeres.museum -memorial.museum -mesaverde.museum -michigan.museum -midatlantic.museum -military.museum -mill.museum -miners.museum -mining.museum -minnesota.museum -missile.museum -missoula.museum -modern.museum -moma.museum -money.museum -monmouth.museum -monticello.museum -montreal.museum -moscow.museum -motorcycle.museum -muenchen.museum -muenster.museum -mulhouse.museum -muncie.museum -museet.museum -museumcenter.museum -museumvereniging.museum -music.museum -national.museum -nationalfirearms.museum -nationalheritage.museum -nativeamerican.museum -naturalhistory.museum -naturalhistorymuseum.museum -naturalsciences.museum -nature.museum -naturhistorisches.museum -natuurwetenschappen.museum -naumburg.museum -naval.museum -nebraska.museum -neues.museum -newhampshire.museum -newjersey.museum -newmexico.museum -newport.museum -newspaper.museum -newyork.museum -niepce.museum -norfolk.museum -north.museum -nrw.museum -nuernberg.museum -nuremberg.museum -nyc.museum -nyny.museum -oceanographic.museum -oceanographique.museum -omaha.museum -online.museum -ontario.museum -openair.museum -oregon.museum -oregontrail.museum -otago.museum -oxford.museum -pacific.museum -paderborn.museum -palace.museum -paleo.museum -palmsprings.museum -panama.museum -paris.museum -pasadena.museum -pharmacy.museum -philadelphia.museum -philadelphiaarea.museum -philately.museum -phoenix.museum -photography.museum -pilots.museum -pittsburgh.museum -planetarium.museum -plantation.museum -plants.museum -plaza.museum -portal.museum -portland.museum -portlligat.museum -posts-and-telecommunications.museum -preservation.museum -presidio.museum -press.museum -project.museum -public.museum -pubol.museum -quebec.museum -railroad.museum -railway.museum -research.museum -resistance.museum -riodejaneiro.museum -rochester.museum -rockart.museum -roma.museum -russia.museum -saintlouis.museum -salem.museum -salvadordali.museum -salzburg.museum -sandiego.museum -sanfrancisco.museum -santabarbara.museum -santacruz.museum -santafe.museum -saskatchewan.museum -satx.museum -savannahga.museum -schlesisches.museum -schoenbrunn.museum -schokoladen.museum -school.museum -schweiz.museum -science.museum -scienceandhistory.museum -scienceandindustry.museum -sciencecenter.museum -sciencecenters.museum -science-fiction.museum -sciencehistory.museum -sciences.museum -sciencesnaturelles.museum -scotland.museum -seaport.museum -settlement.museum -settlers.museum -shell.museum -sherbrooke.museum -sibenik.museum -silk.museum -ski.museum -skole.museum -society.museum -sologne.museum -soundandvision.museum -southcarolina.museum -southwest.museum -space.museum -spy.museum -square.museum -stadt.museum -stalbans.museum -starnberg.museum -state.museum -stateofdelaware.museum -station.museum -steam.museum -steiermark.museum -stjohn.museum -stockholm.museum -stpetersburg.museum -stuttgart.museum -suisse.museum -surgeonshall.museum -surrey.museum -svizzera.museum -sweden.museum -sydney.museum -tank.museum -tcm.museum -technology.museum -telekommunikation.museum -television.museum -texas.museum -textile.museum -theater.museum -time.museum -timekeeping.museum -topology.museum -torino.museum -touch.museum -town.museum -transport.museum -tree.museum -trolley.museum -trust.museum -trustee.museum -uhren.museum -ulm.museum -undersea.museum -university.museum -usa.museum -usantiques.museum -usarts.museum -uscountryestate.museum -usculture.museum -usdecorativearts.museum -usgarden.museum -ushistory.museum -ushuaia.museum -uslivinghistory.museum -utah.museum -uvic.museum -valley.museum -vantaa.museum -versailles.museum -viking.museum -village.museum -virginia.museum -virtual.museum -virtuel.museum -vlaanderen.museum -volkenkunde.museum -wales.museum -wallonie.museum -war.museum -washingtondc.museum -watchandclock.museum -watch-and-clock.museum -western.museum -westfalen.museum -whaling.museum -wildlife.museum -williamsburg.museum -windmill.museum -workshop.museum -york.museum -yorkshire.museum -yosemite.museum -youth.museum -zoological.museum -zoology.museum -ירושלים.museum -иком.museum - -// mv : http://en.wikipedia.org/wiki/.mv -// "mv" included because, contra Wikipedia, google.mv exists. -mv -aero.mv -biz.mv -com.mv -coop.mv -edu.mv -gov.mv -info.mv -int.mv -mil.mv -museum.mv -name.mv -net.mv -org.mv -pro.mv - -// mw : http://www.registrar.mw/ -mw -ac.mw -biz.mw -co.mw -com.mw -coop.mw -edu.mw -gov.mw -int.mw -museum.mw -net.mw -org.mw - -// mx : http://www.nic.mx/ -// Submitted by registry <farias@nic.mx> 2008-06-19 -mx -com.mx -org.mx -gob.mx -edu.mx -net.mx - -// my : http://www.mynic.net.my/ -my -com.my -net.my -org.my -gov.my -edu.my -mil.my -name.my - -// mz : http://www.gobin.info/domainname/mz-template.doc -*.mz - -// na : http://www.na-nic.com.na/ -// http://www.info.na/domain/ -na -info.na -pro.na -name.na -school.na -or.na -dr.na -us.na -mx.na -ca.na -in.na -cc.na -tv.na -ws.na -mobi.na -co.na -com.na -org.na - -// name : has 2nd-level tlds, but there's no list of them -name - -// nc : http://www.cctld.nc/ -nc -asso.nc - -// ne : http://en.wikipedia.org/wiki/.ne -ne - -// net : http://en.wikipedia.org/wiki/.net -net - -// nf : http://en.wikipedia.org/wiki/.nf -nf -com.nf -net.nf -per.nf -rec.nf -web.nf -arts.nf -firm.nf -info.nf -other.nf -store.nf - -// ng : http://psg.com/dns/ng/ -// Submitted by registry <randy@psg.com> 2008-06-17 -ac.ng -com.ng -edu.ng -gov.ng -net.ng -org.ng - -// ni : http://www.nic.ni/dominios.htm -*.ni - -// nl : http://www.domain-registry.nl/ace.php/c,728,122,,,,Home.html -// Confirmed by registry <Antoin.Verschuren@sidn.nl> (with technical -// reservations) 2008-06-08 -nl - -// BV.nl will be a registry for dutch BV's (besloten vennootschap) -bv.nl - -// no : http://www.norid.no/regelverk/index.en.html -// The Norwegian registry has declined to notify us of updates. The web pages -// referenced below are the official source of the data. There is also an -// announce mailing list: -// https://postlister.uninett.no/sympa/info/norid-diskusjon -no -// Norid generic domains : http://www.norid.no/regelverk/vedlegg-c.en.html -fhs.no -vgs.no -fylkesbibl.no -folkebibl.no -museum.no -idrett.no -priv.no -// Non-Norid generic domains : http://www.norid.no/regelverk/vedlegg-d.en.html -mil.no -stat.no -dep.no -kommune.no -herad.no -// no geographical names : http://www.norid.no/regelverk/vedlegg-b.en.html -// counties -aa.no -ah.no -bu.no -fm.no -hl.no -hm.no -jan-mayen.no -mr.no -nl.no -nt.no -of.no -ol.no -oslo.no -rl.no -sf.no -st.no -svalbard.no -tm.no -tr.no -va.no -vf.no -// primary and lower secondary schools per county -gs.aa.no -gs.ah.no -gs.bu.no -gs.fm.no -gs.hl.no -gs.hm.no -gs.jan-mayen.no -gs.mr.no -gs.nl.no -gs.nt.no -gs.of.no -gs.ol.no -gs.oslo.no -gs.rl.no -gs.sf.no -gs.st.no -gs.svalbard.no -gs.tm.no -gs.tr.no -gs.va.no -gs.vf.no -// cities -akrehamn.no -åkrehamn.no -algard.no -ålgård.no -arna.no -brumunddal.no -bryne.no -bronnoysund.no -brønnøysund.no -drobak.no -drøbak.no -egersund.no -fetsund.no -floro.no -florø.no -fredrikstad.no -hokksund.no -honefoss.no -hønefoss.no -jessheim.no -jorpeland.no -jørpeland.no -kirkenes.no -kopervik.no -krokstadelva.no -langevag.no -langevåg.no -leirvik.no -mjondalen.no -mjøndalen.no -mo-i-rana.no -mosjoen.no -mosjøen.no -nesoddtangen.no -orkanger.no -osoyro.no -osøyro.no -raholt.no -råholt.no -sandnessjoen.no -sandnessjøen.no -skedsmokorset.no -slattum.no -spjelkavik.no -stathelle.no -stavern.no -stjordalshalsen.no -stjørdalshalsen.no -tananger.no -tranby.no -vossevangen.no -// communities -afjord.no -åfjord.no -agdenes.no -al.no -ål.no -alesund.no -ålesund.no -alstahaug.no -alta.no -áltá.no -alaheadju.no -álaheadju.no -alvdal.no -amli.no -åmli.no -amot.no -åmot.no -andebu.no -andoy.no -andøy.no -andasuolo.no -ardal.no -årdal.no -aremark.no -arendal.no -ås.no -aseral.no -åseral.no -asker.no -askim.no -askvoll.no -askoy.no -askøy.no -asnes.no -åsnes.no -audnedaln.no -aukra.no -aure.no -aurland.no -aurskog-holand.no -aurskog-høland.no -austevoll.no -austrheim.no -averoy.no -averøy.no -balestrand.no -ballangen.no -balat.no -bálát.no -balsfjord.no -bahccavuotna.no -báhccavuotna.no -bamble.no -bardu.no -beardu.no -beiarn.no -bajddar.no -bájddar.no -baidar.no -báidár.no -berg.no -bergen.no -berlevag.no -berlevåg.no -bearalvahki.no -bearalváhki.no -bindal.no -birkenes.no -bjarkoy.no -bjarkøy.no -bjerkreim.no -bjugn.no -bodo.no -bodø.no -badaddja.no -bådåddjå.no -budejju.no -bokn.no -bremanger.no -bronnoy.no -brønnøy.no -bygland.no -bykle.no -barum.no -bærum.no -bo.telemark.no -bø.telemark.no -bo.nordland.no -bø.nordland.no -bievat.no -bievát.no -bomlo.no -bømlo.no -batsfjord.no -båtsfjord.no -bahcavuotna.no -báhcavuotna.no -dovre.no -drammen.no -drangedal.no -dyroy.no -dyrøy.no -donna.no -dønna.no -eid.no -eidfjord.no -eidsberg.no -eidskog.no -eidsvoll.no -eigersund.no -elverum.no -enebakk.no -engerdal.no -etne.no -etnedal.no -evenes.no -evenassi.no -evenášši.no -evje-og-hornnes.no -farsund.no -fauske.no -fuossko.no -fuoisku.no -fedje.no -fet.no -finnoy.no -finnøy.no -fitjar.no -fjaler.no -fjell.no -flakstad.no -flatanger.no -flekkefjord.no -flesberg.no -flora.no -fla.no -flå.no -folldal.no -forsand.no -fosnes.no -frei.no -frogn.no -froland.no -frosta.no -frana.no -fræna.no -froya.no -frøya.no -fusa.no -fyresdal.no -forde.no -førde.no -gamvik.no -gangaviika.no -gáŋgaviika.no -gaular.no -gausdal.no -gildeskal.no -gildeskål.no -giske.no -gjemnes.no -gjerdrum.no -gjerstad.no -gjesdal.no -gjovik.no -gjøvik.no -gloppen.no -gol.no -gran.no -grane.no -granvin.no -gratangen.no -grimstad.no -grong.no -kraanghke.no -kråanghke.no -grue.no -gulen.no -hadsel.no -halden.no -halsa.no -hamar.no -hamaroy.no -habmer.no -hábmer.no -hapmir.no -hápmir.no -hammerfest.no -hammarfeasta.no -hámmárfeasta.no -haram.no -hareid.no -harstad.no -hasvik.no -aknoluokta.no -ákŋoluokta.no -hattfjelldal.no -aarborte.no -haugesund.no -hemne.no -hemnes.no -hemsedal.no -heroy.more-og-romsdal.no -herøy.møre-og-romsdal.no -heroy.nordland.no -herøy.nordland.no -hitra.no -hjartdal.no -hjelmeland.no -hobol.no -hobøl.no -hof.no -hol.no -hole.no -holmestrand.no -holtalen.no -holtålen.no -hornindal.no -horten.no -hurdal.no -hurum.no -hvaler.no -hyllestad.no -hagebostad.no -hægebostad.no -hoyanger.no -høyanger.no -hoylandet.no -høylandet.no -ha.no -hå.no -ibestad.no -inderoy.no -inderøy.no -iveland.no -jevnaker.no -jondal.no -jolster.no -jølster.no -karasjok.no -karasjohka.no -kárášjohka.no -karlsoy.no -galsa.no -gálsá.no -karmoy.no -karmøy.no -kautokeino.no -guovdageaidnu.no -klepp.no -klabu.no -klæbu.no -kongsberg.no -kongsvinger.no -kragero.no -kragerø.no -kristiansand.no -kristiansund.no -krodsherad.no -krødsherad.no -kvalsund.no -rahkkeravju.no -ráhkkerávju.no -kvam.no -kvinesdal.no -kvinnherad.no -kviteseid.no -kvitsoy.no -kvitsøy.no -kvafjord.no -kvæfjord.no -giehtavuoatna.no -kvanangen.no -kvænangen.no -navuotna.no -návuotna.no -kafjord.no -kåfjord.no -gaivuotna.no -gáivuotna.no -larvik.no -lavangen.no -lavagis.no -loabat.no -loabát.no -lebesby.no -davvesiida.no -leikanger.no -leirfjord.no -leka.no -leksvik.no -lenvik.no -leangaviika.no -leaŋgaviika.no -lesja.no -levanger.no -lier.no -lierne.no -lillehammer.no -lillesand.no -lindesnes.no -lindas.no -lindås.no -lom.no -loppa.no -lahppi.no -láhppi.no -lund.no -lunner.no -luroy.no -lurøy.no -luster.no -lyngdal.no -lyngen.no -ivgu.no -lardal.no -lerdal.no -lærdal.no -lodingen.no -lødingen.no -lorenskog.no -lørenskog.no -loten.no -løten.no -malvik.no -masoy.no -måsøy.no -muosat.no -muosát.no -mandal.no -marker.no -marnardal.no -masfjorden.no -meland.no -meldal.no -melhus.no -meloy.no -meløy.no -meraker.no -meråker.no -moareke.no -moåreke.no -midsund.no -midtre-gauldal.no -modalen.no -modum.no -molde.no -moskenes.no -moss.no -mosvik.no -malselv.no -målselv.no -malatvuopmi.no -málatvuopmi.no -namdalseid.no -aejrie.no -namsos.no -namsskogan.no -naamesjevuemie.no -nååmesjevuemie.no -laakesvuemie.no -nannestad.no -narvik.no -narviika.no -naustdal.no -nedre-eiker.no -nes.akershus.no -nes.buskerud.no -nesna.no -nesodden.no -nesseby.no -unjarga.no -unjárga.no -nesset.no -nissedal.no -nittedal.no -nord-aurdal.no -nord-fron.no -nord-odal.no -norddal.no -nordkapp.no -davvenjarga.no -davvenjárga.no -nordre-land.no -nordreisa.no -raisa.no -ráisa.no -nore-og-uvdal.no -notodden.no -naroy.no -nærøy.no -notteroy.no -nøtterøy.no -odda.no -oksnes.no -øksnes.no -oppdal.no -oppegard.no -oppegård.no -orkdal.no -orland.no -ørland.no -orskog.no -ørskog.no -orsta.no -ørsta.no -os.hedmark.no -os.hordaland.no -osen.no -osteroy.no -osterøy.no -ostre-toten.no -østre-toten.no -overhalla.no -ovre-eiker.no -øvre-eiker.no -oyer.no -øyer.no -oygarden.no -øygarden.no -oystre-slidre.no -øystre-slidre.no -porsanger.no -porsangu.no -porsáŋgu.no -porsgrunn.no -radoy.no -radøy.no -rakkestad.no -rana.no -ruovat.no -randaberg.no -rauma.no -rendalen.no -rennebu.no -rennesoy.no -rennesøy.no -rindal.no -ringebu.no -ringerike.no -ringsaker.no -rissa.no -risor.no -risør.no -roan.no -rollag.no -rygge.no -ralingen.no -rælingen.no -rodoy.no -rødøy.no -romskog.no -rømskog.no -roros.no -røros.no -rost.no -røst.no -royken.no -røyken.no -royrvik.no -røyrvik.no -rade.no -råde.no -salangen.no -siellak.no -saltdal.no -salat.no -sálát.no -sálat.no -samnanger.no -sande.more-og-romsdal.no -sande.møre-og-romsdal.no -sande.vestfold.no -sandefjord.no -sandnes.no -sandoy.no -sandøy.no -sarpsborg.no -sauda.no -sauherad.no -sel.no -selbu.no -selje.no -seljord.no -sigdal.no -siljan.no -sirdal.no -skaun.no -skedsmo.no -ski.no -skien.no -skiptvet.no -skjervoy.no -skjervøy.no -skierva.no -skiervá.no -skjak.no -skjåk.no -skodje.no -skanland.no -skånland.no -skanit.no -skánit.no -smola.no -smøla.no -snillfjord.no -snasa.no -snåsa.no -snoasa.no -snaase.no -snåase.no -sogndal.no -sokndal.no -sola.no -solund.no -songdalen.no -sortland.no -spydeberg.no -stange.no -stavanger.no -steigen.no -steinkjer.no -stjordal.no -stjørdal.no -stokke.no -stor-elvdal.no -stord.no -stordal.no -storfjord.no -omasvuotna.no -strand.no -stranda.no -stryn.no -sula.no -suldal.no -sund.no -sunndal.no -surnadal.no -sveio.no -svelvik.no -sykkylven.no -sogne.no -søgne.no -somna.no -sømna.no -sondre-land.no -søndre-land.no -sor-aurdal.no -sør-aurdal.no -sor-fron.no -sør-fron.no -sor-odal.no -sør-odal.no -sor-varanger.no -sør-varanger.no -matta-varjjat.no -mátta-várjjat.no -sorfold.no -sørfold.no -sorreisa.no -sørreisa.no -sorum.no -sørum.no -tana.no -deatnu.no -time.no -tingvoll.no -tinn.no -tjeldsund.no -dielddanuorri.no -tjome.no -tjøme.no -tokke.no -tolga.no -torsken.no -tranoy.no -tranøy.no -tromso.no -tromsø.no -tromsa.no -romsa.no -trondheim.no -troandin.no -trysil.no -trana.no -træna.no -trogstad.no -trøgstad.no -tvedestrand.no -tydal.no -tynset.no -tysfjord.no -divtasvuodna.no -divttasvuotna.no -tysnes.no -tysvar.no -tysvær.no -tonsberg.no -tønsberg.no -ullensaker.no -ullensvang.no -ulvik.no -utsira.no -vadso.no -vadsø.no -cahcesuolo.no -čáhcesuolo.no -vaksdal.no -valle.no -vang.no -vanylven.no -vardo.no -vardø.no -varggat.no -várggát.no -vefsn.no -vaapste.no -vega.no -vegarshei.no -vegårshei.no -vennesla.no -verdal.no -verran.no -vestby.no -vestnes.no -vestre-slidre.no -vestre-toten.no -vestvagoy.no -vestvågøy.no -vevelstad.no -vik.no -vikna.no -vindafjord.no -volda.no -voss.no -varoy.no -værøy.no -vagan.no -vågan.no -voagat.no -vagsoy.no -vågsøy.no -vaga.no -vågå.no -valer.ostfold.no -våler.østfold.no -valer.hedmark.no -våler.hedmark.no - -// np : http://www.mos.com.np/register.html -*.np - -// nr : http://cenpac.net.nr/dns/index.html -// Confirmed by registry <technician@cenpac.net.nr> 2008-06-17 -nr -biz.nr -info.nr -gov.nr -edu.nr -org.nr -net.nr -com.nr - -// nu : http://en.wikipedia.org/wiki/.nu -nu - -// nz : http://en.wikipedia.org/wiki/.nz -*.nz - -// om : http://en.wikipedia.org/wiki/.om -*.om -!mediaphone.om -!nawrastelecom.om -!nawras.om -!omanmobile.om -!omanpost.om -!omantel.om -!rakpetroleum.om -!siemens.om -!songfest.om -!statecouncil.om - -// org : http://en.wikipedia.org/wiki/.org -org - -// pa : http://www.nic.pa/ -// Some additional second level "domains" resolve directly as hostnames, such as -// pannet.pa, so we add a rule for "pa". -pa -ac.pa -gob.pa -com.pa -org.pa -sld.pa -edu.pa -net.pa -ing.pa -abo.pa -med.pa -nom.pa - -// pe : https://www.nic.pe/InformeFinalComision.pdf -pe -edu.pe -gob.pe -nom.pe -mil.pe -org.pe -com.pe -net.pe - -// pf : http://www.gobin.info/domainname/formulaire-pf.pdf -pf -com.pf -org.pf -edu.pf - -// pg : http://en.wikipedia.org/wiki/.pg -*.pg - -// ph : http://www.domains.ph/FAQ2.asp -// Submitted by registry <jed@email.com.ph> 2008-06-13 -ph -com.ph -net.ph -org.ph -gov.ph -edu.ph -ngo.ph -mil.ph -i.ph - -// pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK -pk -com.pk -net.pk -edu.pk -org.pk -fam.pk -biz.pk -web.pk -gov.pk -gob.pk -gok.pk -gon.pk -gop.pk -gos.pk -info.pk - -// pl : http://www.dns.pl/english/ -pl -// NASK functional domains (nask.pl / dns.pl) : http://www.dns.pl/english/dns-funk.html -aid.pl -agro.pl -atm.pl -auto.pl -biz.pl -com.pl -edu.pl -gmina.pl -gsm.pl -info.pl -mail.pl -miasta.pl -media.pl -mil.pl -net.pl -nieruchomosci.pl -nom.pl -org.pl -pc.pl -powiat.pl -priv.pl -realestate.pl -rel.pl -sex.pl -shop.pl -sklep.pl -sos.pl -szkola.pl -targi.pl -tm.pl -tourism.pl -travel.pl -turystyka.pl -// ICM functional domains (icm.edu.pl) -6bone.pl -art.pl -mbone.pl -// Government domains (administred by ippt.gov.pl) -gov.pl -uw.gov.pl -um.gov.pl -ug.gov.pl -upow.gov.pl -starostwo.gov.pl -so.gov.pl -sr.gov.pl -po.gov.pl -pa.gov.pl -// other functional domains -ngo.pl -irc.pl -usenet.pl -// NASK geographical domains : http://www.dns.pl/english/dns-regiony.html -augustow.pl -babia-gora.pl -bedzin.pl -beskidy.pl -bialowieza.pl -bialystok.pl -bielawa.pl -bieszczady.pl -boleslawiec.pl -bydgoszcz.pl -bytom.pl -cieszyn.pl -czeladz.pl -czest.pl -dlugoleka.pl -elblag.pl -elk.pl -glogow.pl -gniezno.pl -gorlice.pl -grajewo.pl -ilawa.pl -jaworzno.pl -jelenia-gora.pl -jgora.pl -kalisz.pl -kazimierz-dolny.pl -karpacz.pl -kartuzy.pl -kaszuby.pl -katowice.pl -kepno.pl -ketrzyn.pl -klodzko.pl -kobierzyce.pl -kolobrzeg.pl -konin.pl -konskowola.pl -kutno.pl -lapy.pl -lebork.pl -legnica.pl -lezajsk.pl -limanowa.pl -lomza.pl -lowicz.pl -lubin.pl -lukow.pl -malbork.pl -malopolska.pl -mazowsze.pl -mazury.pl -mielec.pl -mielno.pl -mragowo.pl -naklo.pl -nowaruda.pl -nysa.pl -olawa.pl -olecko.pl -olkusz.pl -olsztyn.pl -opoczno.pl -opole.pl -ostroda.pl -ostroleka.pl -ostrowiec.pl -ostrowwlkp.pl -pila.pl -pisz.pl -podhale.pl -podlasie.pl -polkowice.pl -pomorze.pl -pomorskie.pl -prochowice.pl -pruszkow.pl -przeworsk.pl -pulawy.pl -radom.pl -rawa-maz.pl -rybnik.pl -rzeszow.pl -sanok.pl -sejny.pl -siedlce.pl -slask.pl -slupsk.pl -sosnowiec.pl -stalowa-wola.pl -skoczow.pl -starachowice.pl -stargard.pl -suwalki.pl -swidnica.pl -swiebodzin.pl -swinoujscie.pl -szczecin.pl -szczytno.pl -tarnobrzeg.pl -tgory.pl -turek.pl -tychy.pl -ustka.pl -walbrzych.pl -warmia.pl -warszawa.pl -waw.pl -wegrow.pl -wielun.pl -wlocl.pl -wloclawek.pl -wodzislaw.pl -wolomin.pl -wroclaw.pl -zachpomor.pl -zagan.pl -zarow.pl -zgora.pl -zgorzelec.pl -// TASK geographical domains (www.task.gda.pl/uslugi/dns) -gda.pl -gdansk.pl -gdynia.pl -med.pl -sopot.pl -// other geographical domains -gliwice.pl -krakow.pl -poznan.pl -wroc.pl -zakopane.pl - -// pm : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf -pm - -// pn : http://www.government.pn/PnRegistry/policies.htm -pn -gov.pn -co.pn -org.pn -edu.pn -net.pn - -// pr : http://www.nic.pr/index.asp?f=1 -pr -com.pr -net.pr -org.pr -gov.pr -edu.pr -isla.pr -pro.pr -biz.pr -info.pr -name.pr -// these aren't mentioned on nic.pr, but on http://en.wikipedia.org/wiki/.pr -est.pr -prof.pr -ac.pr - -// pro : http://www.nic.pro/support_faq.htm -pro -aca.pro -bar.pro -cpa.pro -jur.pro -law.pro -med.pro -eng.pro - -// ps : http://en.wikipedia.org/wiki/.ps -// http://www.nic.ps/registration/policy.html#reg -ps -edu.ps -gov.ps -sec.ps -plo.ps -com.ps -org.ps -net.ps - -// pt : http://online.dns.pt/dns/start_dns -pt -net.pt -gov.pt -org.pt -edu.pt -int.pt -publ.pt -com.pt -nome.pt - -// pw : http://en.wikipedia.org/wiki/.pw -pw -co.pw -ne.pw -or.pw -ed.pw -go.pw -belau.pw - -// py : http://www.nic.py/faq_a.html#faq_b -*.py - -// qa : http://domains.qa/en/ -qa -com.qa -edu.qa -gov.qa -mil.qa -name.qa -net.qa -org.qa -sch.qa - -// re : http://www.afnic.re/obtenir/chartes/nommage-re/annexe-descriptifs -re -com.re -asso.re -nom.re - -// ro : http://www.rotld.ro/ -ro -com.ro -org.ro -tm.ro -nt.ro -nom.ro -info.ro -rec.ro -arts.ro -firm.ro -store.ro -www.ro - -// rs : http://en.wikipedia.org/wiki/.rs -rs -co.rs -org.rs -edu.rs -ac.rs -gov.rs -in.rs - -// ru : http://www.cctld.ru/ru/docs/aktiv_8.php -// Industry domains -ru -ac.ru -com.ru -edu.ru -int.ru -net.ru -org.ru -pp.ru -// Geographical domains -adygeya.ru -altai.ru -amur.ru -arkhangelsk.ru -astrakhan.ru -bashkiria.ru -belgorod.ru -bir.ru -bryansk.ru -buryatia.ru -cbg.ru -chel.ru -chelyabinsk.ru -chita.ru -chukotka.ru -chuvashia.ru -dagestan.ru -dudinka.ru -e-burg.ru -grozny.ru -irkutsk.ru -ivanovo.ru -izhevsk.ru -jar.ru -joshkar-ola.ru -kalmykia.ru -kaluga.ru -kamchatka.ru -karelia.ru -kazan.ru -kchr.ru -kemerovo.ru -khabarovsk.ru -khakassia.ru -khv.ru -kirov.ru -koenig.ru -komi.ru -kostroma.ru -krasnoyarsk.ru -kuban.ru -kurgan.ru -kursk.ru -lipetsk.ru -magadan.ru -mari.ru -mari-el.ru -marine.ru -mordovia.ru -mosreg.ru -msk.ru -murmansk.ru -nalchik.ru -nnov.ru -nov.ru -novosibirsk.ru -nsk.ru -omsk.ru -orenburg.ru -oryol.ru -palana.ru -penza.ru -perm.ru -pskov.ru -ptz.ru -rnd.ru -ryazan.ru -sakhalin.ru -samara.ru -saratov.ru -simbirsk.ru -smolensk.ru -spb.ru -stavropol.ru -stv.ru -surgut.ru -tambov.ru -tatarstan.ru -tom.ru -tomsk.ru -tsaritsyn.ru -tsk.ru -tula.ru -tuva.ru -tver.ru -tyumen.ru -udm.ru -udmurtia.ru -ulan-ude.ru -vladikavkaz.ru -vladimir.ru -vladivostok.ru -volgograd.ru -vologda.ru -voronezh.ru -vrn.ru -vyatka.ru -yakutia.ru -yamal.ru -yaroslavl.ru -yekaterinburg.ru -yuzhno-sakhalinsk.ru -// More geographical domains -amursk.ru -baikal.ru -cmw.ru -fareast.ru -jamal.ru -kms.ru -k-uralsk.ru -kustanai.ru -kuzbass.ru -magnitka.ru -mytis.ru -nakhodka.ru -nkz.ru -norilsk.ru -oskol.ru -pyatigorsk.ru -rubtsovsk.ru -snz.ru -syzran.ru -vdonsk.ru -zgrad.ru -// State domains -gov.ru -mil.ru -// Technical domains -test.ru - -// rw : http://www.nic.rw/cgi-bin/policy.pl -rw -gov.rw -net.rw -edu.rw -ac.rw -com.rw -co.rw -int.rw -mil.rw -gouv.rw - -// sa : http://www.nic.net.sa/ -sa -com.sa -net.sa -org.sa -gov.sa -med.sa -pub.sa -edu.sa -sch.sa - -// sb : http://www.sbnic.net.sb/ -// Submitted by registry <lee.humphries@telekom.com.sb> 2008-06-08 -sb -com.sb -edu.sb -gov.sb -net.sb -org.sb - -// sc : http://www.nic.sc/ -sc -com.sc -gov.sc -net.sc -org.sc -edu.sc - -// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm -// Submitted by registry <admin@isoc.sd> 2008-06-17 -sd -com.sd -net.sd -org.sd -edu.sd -med.sd -gov.sd -info.sd - -// se : http://en.wikipedia.org/wiki/.se -// Submitted by registry <Patrik.Wallstrom@iis.se> 2008-06-24 -se -a.se -ac.se -b.se -bd.se -brand.se -c.se -d.se -e.se -f.se -fh.se -fhsk.se -fhv.se -g.se -h.se -i.se -k.se -komforb.se -kommunalforbund.se -komvux.se -l.se -lanbib.se -m.se -n.se -naturbruksgymn.se -o.se -org.se -p.se -parti.se -pp.se -press.se -r.se -s.se -sshn.se -t.se -tm.se -u.se -w.se -x.se -y.se -z.se - -// sg : http://www.nic.net.sg/sub_policies_agreement/2ld.html -sg -com.sg -net.sg -org.sg -gov.sg -edu.sg -per.sg - -// sh : http://www.nic.sh/rules.html -// list of 2nd level domains ? -sh - -// si : http://en.wikipedia.org/wiki/.si -si - -// sj : No registrations at this time. -// Submitted by registry <jarle@uninett.no> 2008-06-16 - -// sk : http://en.wikipedia.org/wiki/.sk -// list of 2nd level domains ? -sk - -// sl : http://www.nic.sl -// Submitted by registry <adam@neoip.com> 2008-06-12 -sl -com.sl -net.sl -edu.sl -gov.sl -org.sl - -// sm : http://en.wikipedia.org/wiki/.sm -sm - -// sn : http://en.wikipedia.org/wiki/.sn -sn -art.sn -com.sn -edu.sn -gouv.sn -org.sn -perso.sn -univ.sn - -// so : http://www.soregistry.com/ -so -com.so -net.so -org.so - -// sr : http://en.wikipedia.org/wiki/.sr -sr - -// st : http://www.nic.st/html/policyrules/ -st -co.st -com.st -consulado.st -edu.st -embaixada.st -gov.st -mil.st -net.st -org.st -principe.st -saotome.st -store.st - -// su : http://en.wikipedia.org/wiki/.su -su - -// sv : http://www.svnet.org.sv/svpolicy.html -*.sv - -// sy : http://en.wikipedia.org/wiki/.sy -// see also: http://www.gobin.info/domainname/sy.doc -sy -edu.sy -gov.sy -net.sy -mil.sy -com.sy -org.sy - -// sz : http://en.wikipedia.org/wiki/.sz -// http://www.sispa.org.sz/ -sz -co.sz -ac.sz -org.sz - -// tc : http://en.wikipedia.org/wiki/.tc -tc - -// td : http://en.wikipedia.org/wiki/.td -td - -// tel: http://en.wikipedia.org/wiki/.tel -// http://www.telnic.org/ -tel - -// tf : http://en.wikipedia.org/wiki/.tf -tf - -// tg : http://en.wikipedia.org/wiki/.tg -// http://www.nic.tg/nictg/index.php implies no reserved 2nd-level domains, -// although this contradicts wikipedia. -tg - -// th : http://en.wikipedia.org/wiki/.th -// Submitted by registry <krit@thains.co.th> 2008-06-17 -th -ac.th -co.th -go.th -in.th -mi.th -net.th -or.th - -// tj : http://www.nic.tj/policy.htm -tj -ac.tj -biz.tj -co.tj -com.tj -edu.tj -go.tj -gov.tj -int.tj -mil.tj -name.tj -net.tj -nic.tj -org.tj -test.tj -web.tj - -// tk : http://en.wikipedia.org/wiki/.tk -tk - -// tl : http://en.wikipedia.org/wiki/.tl -tl -gov.tl - -// tm : http://www.nic.tm/rules.html -// list of 2nd level tlds ? -tm - -// tn : http://en.wikipedia.org/wiki/.tn -// http://whois.ati.tn/ -tn -com.tn -ens.tn -fin.tn -gov.tn -ind.tn -intl.tn -nat.tn -net.tn -org.tn -info.tn -perso.tn -tourism.tn -edunet.tn -rnrt.tn -rns.tn -rnu.tn -mincom.tn -agrinet.tn -defense.tn -turen.tn - -// to : http://en.wikipedia.org/wiki/.to -// Submitted by registry <egullich@colo.to> 2008-06-17 -to -com.to -gov.to -net.to -org.to -edu.to -mil.to - -// tr : http://en.wikipedia.org/wiki/.tr -*.tr -!nic.tr -// Used by government in the TRNC -// http://en.wikipedia.org/wiki/.nc.tr -gov.nc.tr - -// travel : http://en.wikipedia.org/wiki/.travel -travel - -// tt : http://www.nic.tt/ -tt -co.tt -com.tt -org.tt -net.tt -biz.tt -info.tt -pro.tt -int.tt -coop.tt -jobs.tt -mobi.tt -travel.tt -museum.tt -aero.tt -name.tt -gov.tt -edu.tt - -// tv : http://en.wikipedia.org/wiki/.tv -// Not listing any 2LDs as reserved since none seem to exist in practice, -// Wikipedia notwithstanding. -tv - -// tw : http://en.wikipedia.org/wiki/.tw -tw -edu.tw -gov.tw -mil.tw -com.tw -net.tw -org.tw -idv.tw -game.tw -ebiz.tw -club.tw -網路.tw -組織.tw -商業.tw - -// tz : http://en.wikipedia.org/wiki/.tz -// Submitted by registry <randy@psg.com> 2008-06-17 -// Updated from http://www.tznic.or.tz/index.php/domains.html 2010-10-25 -ac.tz -co.tz -go.tz -mil.tz -ne.tz -or.tz -sc.tz - -// ua : http://www.nic.net.ua/ -ua -com.ua -edu.ua -gov.ua -in.ua -net.ua -org.ua -// ua geo-names -cherkassy.ua -chernigov.ua -chernovtsy.ua -ck.ua -cn.ua -crimea.ua -cv.ua -dn.ua -dnepropetrovsk.ua -donetsk.ua -dp.ua -if.ua -ivano-frankivsk.ua -kh.ua -kharkov.ua -kherson.ua -khmelnitskiy.ua -kiev.ua -kirovograd.ua -km.ua -kr.ua -ks.ua -kv.ua -lg.ua -lugansk.ua -lutsk.ua -lviv.ua -mk.ua -nikolaev.ua -od.ua -odessa.ua -pl.ua -poltava.ua -rovno.ua -rv.ua -sebastopol.ua -sumy.ua -te.ua -ternopil.ua -uzhgorod.ua -vinnica.ua -vn.ua -zaporizhzhe.ua -zp.ua -zhitomir.ua -zt.ua - -// Private registries in .ua -co.ua -pp.ua - -// ug : http://www.registry.co.ug/ -ug -co.ug -ac.ug -sc.ug -go.ug -ne.ug -or.ug - -// uk : http://en.wikipedia.org/wiki/.uk -*.uk -*.sch.uk -!bl.uk -!british-library.uk -!icnet.uk -!jet.uk -!mod.uk -!nel.uk -!nhs.uk -!nic.uk -!nls.uk -!national-library-scotland.uk -!parliament.uk -!police.uk - -// us : http://en.wikipedia.org/wiki/.us -us -dni.us -fed.us -isa.us -kids.us -nsn.us -// us geographic names -ak.us -al.us -ar.us -as.us -az.us -ca.us -co.us -ct.us -dc.us -de.us -fl.us -ga.us -gu.us -hi.us -ia.us -id.us -il.us -in.us -ks.us -ky.us -la.us -ma.us -md.us -me.us -mi.us -mn.us -mo.us -ms.us -mt.us -nc.us -nd.us -ne.us -nh.us -nj.us -nm.us -nv.us -ny.us -oh.us -ok.us -or.us -pa.us -pr.us -ri.us -sc.us -sd.us -tn.us -tx.us -ut.us -vi.us -vt.us -va.us -wa.us -wi.us -wv.us -wy.us -// The registrar notes several more specific domains available in each state, -// such as state.*.us, dst.*.us, etc., but resolution of these is somewhat -// haphazard; in some states these domains resolve as addresses, while in others -// only subdomains are available, or even nothing at all. We include the -// most common ones where it's clear that different sites are different -// entities. -k12.ak.us -k12.al.us -k12.ar.us -k12.as.us -k12.az.us -k12.ca.us -k12.co.us -k12.ct.us -k12.dc.us -k12.de.us -k12.fl.us -k12.ga.us -k12.gu.us -// k12.hi.us Hawaii has a state-wide DOE login: bug 614565 -k12.ia.us -k12.id.us -k12.il.us -k12.in.us -k12.ks.us -k12.ky.us -k12.la.us -k12.ma.us -k12.md.us -k12.me.us -k12.mi.us -k12.mn.us -k12.mo.us -k12.ms.us -k12.mt.us -k12.nc.us -k12.nd.us -k12.ne.us -k12.nh.us -k12.nj.us -k12.nm.us -k12.nv.us -k12.ny.us -k12.oh.us -k12.ok.us -k12.or.us -k12.pa.us -k12.pr.us -k12.ri.us -k12.sc.us -k12.sd.us -k12.tn.us -k12.tx.us -k12.ut.us -k12.vi.us -k12.vt.us -k12.va.us -k12.wa.us -k12.wi.us -k12.wv.us -k12.wy.us - -cc.ak.us -cc.al.us -cc.ar.us -cc.as.us -cc.az.us -cc.ca.us -cc.co.us -cc.ct.us -cc.dc.us -cc.de.us -cc.fl.us -cc.ga.us -cc.gu.us -cc.hi.us -cc.ia.us -cc.id.us -cc.il.us -cc.in.us -cc.ks.us -cc.ky.us -cc.la.us -cc.ma.us -cc.md.us -cc.me.us -cc.mi.us -cc.mn.us -cc.mo.us -cc.ms.us -cc.mt.us -cc.nc.us -cc.nd.us -cc.ne.us -cc.nh.us -cc.nj.us -cc.nm.us -cc.nv.us -cc.ny.us -cc.oh.us -cc.ok.us -cc.or.us -cc.pa.us -cc.pr.us -cc.ri.us -cc.sc.us -cc.sd.us -cc.tn.us -cc.tx.us -cc.ut.us -cc.vi.us -cc.vt.us -cc.va.us -cc.wa.us -cc.wi.us -cc.wv.us -cc.wy.us - -lib.ak.us -lib.al.us -lib.ar.us -lib.as.us -lib.az.us -lib.ca.us -lib.co.us -lib.ct.us -lib.dc.us -lib.de.us -lib.fl.us -lib.ga.us -lib.gu.us -lib.hi.us -lib.ia.us -lib.id.us -lib.il.us -lib.in.us -lib.ks.us -lib.ky.us -lib.la.us -lib.ma.us -lib.md.us -lib.me.us -lib.mi.us -lib.mn.us -lib.mo.us -lib.ms.us -lib.mt.us -lib.nc.us -lib.nd.us -lib.ne.us -lib.nh.us -lib.nj.us -lib.nm.us -lib.nv.us -lib.ny.us -lib.oh.us -lib.ok.us -lib.or.us -lib.pa.us -lib.pr.us -lib.ri.us -lib.sc.us -lib.sd.us -lib.tn.us -lib.tx.us -lib.ut.us -lib.vi.us -lib.vt.us -lib.va.us -lib.wa.us -lib.wi.us -lib.wv.us -lib.wy.us - -// k12.ma.us contains school districts in Massachusetts. The 4LDs are -// managed indepedently except for private (PVT), charter (CHTR) and -// parochial (PAROCH) schools. Those are delegated dorectly to the -// 5LD operators. <k12-ma-hostmaster _ at _ rsuc.gweep.net> -pvt.k12.ma.us -chtr.k12.ma.us -paroch.k12.ma.us - -// uy : http://www.antel.com.uy/ -*.uy - -// uz : http://www.reg.uz/registerr.html -// are there other 2nd level tlds ? -uz -com.uz -co.uz - -// va : http://en.wikipedia.org/wiki/.va -va - -// vc : http://en.wikipedia.org/wiki/.vc -// Submitted by registry <kshah@ca.afilias.info> 2008-06-13 -vc -com.vc -net.vc -org.vc -gov.vc -mil.vc -edu.vc - -// ve : http://registro.nic.ve/nicve/registro/index.html -*.ve - -// vg : http://en.wikipedia.org/wiki/.vg -vg - -// vi : http://www.nic.vi/newdomainform.htm -// http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other -// TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they -// are available for registration (which they do not seem to be). -vi -co.vi -com.vi -k12.vi -net.vi -org.vi - -// vn : https://www.dot.vn/vnnic/vnnic/domainregistration.jsp -vn -com.vn -net.vn -org.vn -edu.vn -gov.vn -int.vn -ac.vn -biz.vn -info.vn -name.vn -pro.vn -health.vn - -// vu : http://en.wikipedia.org/wiki/.vu -// list of 2nd level tlds ? -vu - -// wf : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf -wf - -// ws : http://en.wikipedia.org/wiki/.ws -// http://samoanic.ws/index.dhtml -ws -com.ws -net.ws -org.ws -gov.ws -edu.ws - -// yt : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf -yt - -// IDN ccTLDs -// Please sort by ISO 3166 ccTLD, then punicode string -// when submitting patches and follow this format: -// <Punicode> ("<english word>" <language>) : <ISO 3166 ccTLD> -// [optional sponsoring org] -// <URL> - -// xn--mgbaam7a8h ("Emerat" Arabic) : AE -//http://nic.ae/english/arabicdomain/rules.jsp -امارات - -// xn--54b7fta0cc ("Bangla" Bangla) : BD -বাংলা - -// xn--fiqs8s ("China" Chinese-Han-Simplified <.Zhonggou>) : CN -// CNNIC -// http://cnnic.cn/html/Dir/2005/10/11/3218.htm -中国 - -// xn--fiqz9s ("China" Chinese-Han-Traditional <.Zhonggou>) : CN -// CNNIC -// http://cnnic.cn/html/Dir/2005/10/11/3218.htm -中國 - -// xn--lgbbat1ad8j ("Algeria / Al Jazair" Arabic) : DZ -الجزائر - -// xn--wgbh1c ("Egypt" Arabic .masr) : EG -// http://www.dotmasr.eg/ -مصر - -// xn--node ("ge" Georgian (Mkhedruli)) : GE -გე - -// xn--j6w193g ("Hong Kong" Chinese-Han) : HK -// https://www2.hkirc.hk/register/rules.jsp -香港 - -// xn--h2brj9c ("Bharat" Devanagari) : IN -// India -भारत - -// xn--mgbbh1a71e ("Bharat" Arabic) : IN -// India -بھارت - -// xn--fpcrj9c3d ("Bharat" Telugu) : IN -// India -భారత్ - -// xn--gecrj9c ("Bharat" Gujarati) : IN -// India -ભારત - -// xn--s9brj9c ("Bharat" Gurmukhi) : IN -// India -ਭਾਰਤ - -// xn--45brj9c ("Bharat" Bengali) : IN -// India -ভারত - -// xn--xkc2dl3a5ee0h ("India" Tamil) : IN -// India -இந்தியா - -// xn--mgba3a4f16a ("Iran" Persian) : IR -ایران - -// xn--mgba3a4fra ("Iran" Arabic) : IR -ايران - -//xn--mgbayh7gpa ("al-Ordon" Arabic) JO -//National Information Technology Center (NITC) -//Royal Scientific Society, Al-Jubeiha -الاردن - -// xn--3e0b707e ("Republic of Korea" Hangul) : KR -한국 - -// xn--fzc2c9e2c ("Lanka" Sinhalese-Sinhala) : LK -// http://nic.lk -ලංකා - -// xn--xkc2al3hye2a ("Ilangai" Tamil) : LK -// http://nic.lk -இலங்கை - -// xn--mgbc0a9azcg ("Morocco / al-Maghrib" Arabic) : MA -المغرب - -// xn--mgb9awbf ("Oman" Arabic) : OM -عمان - -// xn--ygbi2ammx ("Falasteen" Arabic) : PS -// The Palestinian National Internet Naming Authority (PNINA) -// http://www.pnina.ps -فلسطين - -// xn--90a3ac ("srb" Cyrillic) : RS -срб - -// xn--p1ai ("rf" Russian-Cyrillic) : RU -// http://www.cctld.ru/en/docs/rulesrf.php -рф - -// xn--wgbl6a ("Qatar" Arabic) : QA -// http://www.ict.gov.qa/ -قطر - -// xn--mgberp4a5d4ar ("AlSaudiah" Arabic) : SA -// http://www.nic.net.sa/ -السعودية - -// xn--mgberp4a5d4a87g ("AlSaudiah" Arabic) variant : SA -السعودیة - -// xn--mgbqly7c0a67fbc ("AlSaudiah" Arabic) variant : SA -السعودیۃ - -// xn--mgbqly7cvafr ("AlSaudiah" Arabic) variant : SA -السعوديه - -// xn--ogbpf8fl ("Syria" Arabic) : SY -سورية - -// xn--mgbtf8fl ("Syria" Arabic) variant : SY -سوريا - -// xn--yfro4i67o Singapore ("Singapore" Chinese-Han) : SG -新加坡 - -// xn--clchc0ea0b2g2a9gcd ("Singapore" Tamil) : SG -சிங்கப்பூர் - -// xn--o3cw4h ("Thai" Thai) : TH -// http://www.thnic.co.th -ไทย - -// xn--pgbs0dh ("Tunis") : TN -// http://nic.tn -تونس - -// xn--kpry57d ("Taiwan" Chinese-Han-Traditional) : TW -// http://www.twnic.net/english/dn/dn_07a.htm -台灣 - -// xn--kprw13d ("Taiwan" Chinese-Han-Simplified) : TW -// http://www.twnic.net/english/dn/dn_07a.htm -台湾 - -// xn--nnx388a ("Taiwan") variant : TW -臺灣 - -// xn--j1amh ("ukr" Cyrillic) : UA -укр - -// xn--mgb2ddes ("AlYemen" Arabic) : YE -اليمن - -// xxx : http://icmregistry.com -xxx - -// ye : http://www.y.net.ye/services/domain_name.htm -*.ye - -// za : http://www.zadna.org.za/slds.html -*.za - -// zm : http://en.wikipedia.org/wiki/.zm -*.zm - -// zw : http://en.wikipedia.org/wiki/.zw -*.zw - -// ===END ICANN DOMAINS=== -// ===BEGIN PRIVATE DOMAINS=== - -// info.at : http://www.info.at/ -biz.at -info.at - -// priv.at : http://www.nic.priv.at/ -// Submitted by registry <lendl@nic.at> 2008-06-09 -priv.at - -// co.ca : http://registry.co.ca -co.ca - -// CentralNic : http://www.centralnic.com/names/domains -// Confirmed by registry <gavin.brown@centralnic.com> 2008-06-09 -ar.com -br.com -cn.com -de.com -eu.com -gb.com -gr.com -hu.com -jpn.com -kr.com -no.com -qc.com -ru.com -sa.com -se.com -uk.com -us.com -uy.com -za.com -gb.net -jp.net -se.net -uk.net -ae.org -us.org -com.de - -// Opera Software, A.S.A. -// Requested by Yngve Pettersen <yngve@opera.com> 2009-11-26 -operaunite.com - -// Google, Inc. -// Requested by Eduardo Vela <evn@google.com> 2010-09-06 -appspot.com - -// iki.fi : Submitted by Hannu Aronsson <haa@iki.fi> 2009-11-05 -iki.fi - -// c.la : http://www.c.la/ -c.la - -// ZaNiC : http://www.za.net/ -// Confirmed by registry <hostmaster@nic.za.net> 2009-10-03 -za.net -za.org - -// CoDNS B.V. -// Added 2010-05-23. -co.nl -co.no - -// Mainseek Sp. z o.o. : http://www.co.pl/ -co.pl - -// DynDNS.com : http://www.dyndns.com/services/dns/dyndns/ -dyndns-at-home.com -dyndns-at-work.com -dyndns-blog.com -dyndns-free.com -dyndns-home.com -dyndns-ip.com -dyndns-mail.com -dyndns-office.com -dyndns-pics.com -dyndns-remote.com -dyndns-server.com -dyndns-web.com -dyndns-wiki.com -dyndns-work.com -dyndns.biz -dyndns.info -dyndns.org -dyndns.tv -at-band-camp.net -ath.cx -barrel-of-knowledge.info -barrell-of-knowledge.info -better-than.tv -blogdns.com -blogdns.net -blogdns.org -blogsite.org -boldlygoingnowhere.org -broke-it.net -buyshouses.net -cechire.com -dnsalias.com -dnsalias.net -dnsalias.org -dnsdojo.com -dnsdojo.net -dnsdojo.org -does-it.net -doesntexist.com -doesntexist.org -dontexist.com -dontexist.net -dontexist.org -doomdns.com -doomdns.org -dvrdns.org -dyn-o-saur.com -dynalias.com -dynalias.net -dynalias.org -dynathome.net -dyndns.ws -endofinternet.net -endofinternet.org -endoftheinternet.org -est-a-la-maison.com -est-a-la-masion.com -est-le-patron.com -est-mon-blogueur.com -for-better.biz -for-more.biz -for-our.info -for-some.biz -for-the.biz -forgot.her.name -forgot.his.name -from-ak.com -from-al.com -from-ar.com -from-az.net -from-ca.com -from-co.net -from-ct.com -from-dc.com -from-de.com -from-fl.com -from-ga.com -from-hi.com -from-ia.com -from-id.com -from-il.com -from-in.com -from-ks.com -from-ky.com -from-la.net -from-ma.com -from-md.com -from-me.org -from-mi.com -from-mn.com -from-mo.com -from-ms.com -from-mt.com -from-nc.com -from-nd.com -from-ne.com -from-nh.com -from-nj.com -from-nm.com -from-nv.com -from-ny.net -from-oh.com -from-ok.com -from-or.com -from-pa.com -from-pr.com -from-ri.com -from-sc.com -from-sd.com -from-tn.com -from-tx.com -from-ut.com -from-va.com -from-vt.com -from-wa.com -from-wi.com -from-wv.com -from-wy.com -ftpaccess.cc -fuettertdasnetz.de -game-host.org -game-server.cc -getmyip.com -gets-it.net -go.dyndns.org -gotdns.com -gotdns.org -groks-the.info -groks-this.info -ham-radio-op.net -here-for-more.info -hobby-site.com -hobby-site.org -home.dyndns.org -homedns.org -homeftp.net -homeftp.org -homeip.net -homelinux.com -homelinux.net -homelinux.org -homeunix.com -homeunix.net -homeunix.org -iamallama.com -in-the-band.net -is-a-anarchist.com -is-a-blogger.com -is-a-bookkeeper.com -is-a-bruinsfan.org -is-a-bulls-fan.com -is-a-candidate.org -is-a-caterer.com -is-a-celticsfan.org -is-a-chef.com -is-a-chef.net -is-a-chef.org -is-a-conservative.com -is-a-cpa.com -is-a-cubicle-slave.com -is-a-democrat.com -is-a-designer.com -is-a-doctor.com -is-a-financialadvisor.com -is-a-geek.com -is-a-geek.net -is-a-geek.org -is-a-green.com -is-a-guru.com -is-a-hard-worker.com -is-a-hunter.com -is-a-knight.org -is-a-landscaper.com -is-a-lawyer.com -is-a-liberal.com -is-a-libertarian.com -is-a-linux-user.org -is-a-llama.com -is-a-musician.com -is-a-nascarfan.com -is-a-nurse.com -is-a-painter.com -is-a-patsfan.org -is-a-personaltrainer.com -is-a-photographer.com -is-a-player.com -is-a-republican.com -is-a-rockstar.com -is-a-socialist.com -is-a-soxfan.org -is-a-student.com -is-a-teacher.com -is-a-techie.com -is-a-therapist.com -is-an-accountant.com -is-an-actor.com -is-an-actress.com -is-an-anarchist.com -is-an-artist.com -is-an-engineer.com -is-an-entertainer.com -is-by.us -is-certified.com -is-found.org -is-gone.com -is-into-anime.com -is-into-cars.com -is-into-cartoons.com -is-into-games.com -is-leet.com -is-lost.org -is-not-certified.com -is-saved.org -is-slick.com -is-uberleet.com -is-very-bad.org -is-very-evil.org -is-very-good.org -is-very-nice.org -is-very-sweet.org -is-with-theband.com -isa-geek.com -isa-geek.net -isa-geek.org -isa-hockeynut.com -issmarterthanyou.com -isteingeek.de -istmein.de -kicks-ass.net -kicks-ass.org -knowsitall.info -land-4-sale.us -lebtimnetz.de -leitungsen.de -likes-pie.com -likescandy.com -merseine.nu -mine.nu -misconfused.org -mypets.ws -myphotos.cc -neat-url.com -office-on-the.net -on-the-web.tv -podzone.net -podzone.org -readmyblog.org -saves-the-whales.com -scrapper-site.net -scrapping.cc -selfip.biz -selfip.com -selfip.info -selfip.net -selfip.org -sells-for-less.com -sells-for-u.com -sells-it.net -sellsyourhome.org -servebbs.com -servebbs.net -servebbs.org -serveftp.net -serveftp.org -servegame.org -shacknet.nu -simple-url.com -space-to-rent.com -stuff-4-sale.org -stuff-4-sale.us -teaches-yoga.com -thruhere.net -traeumtgerade.de -webhop.biz -webhop.info -webhop.net -webhop.org -worse-than.tv -writesthisblog.com - -// ===END PRIVATE DOMAINS=== diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/test.js deleted file mode 100644 index 3cce815e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/test.js +++ /dev/null @@ -1,1340 +0,0 @@ -/* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - -var vows = require('vows'); -var assert = require('assert'); -var async = require('async'); - -// NOTE use require("tough-cookie") in your own code: -var tough = require('./lib/cookie'); -var Cookie = tough.Cookie; -var CookieJar = tough.CookieJar; - - -function dateVows(table) { - var theVows = { }; - var keys = Object.keys(table).forEach(function(date) { - var expect = table[date]; - theVows[date] = function() { - var got = tough.parseDate(date) ? 'valid' : 'invalid'; - assert.equal(got, expect ? 'valid' : 'invalid'); - }; - }); - return { "date parsing": theVows }; -} - -function matchVows(func,table) { - var theVows = {}; - table.forEach(function(item) { - var str = item[0]; - var dom = item[1]; - var expect = item[2]; - var label = str+(expect?" matches ":" doesn't match ")+dom; - theVows[label] = function() { - assert.equal(func(str,dom),expect); - }; - }); - return theVows; -} - -function defaultPathVows(table) { - var theVows = {}; - table.forEach(function(item) { - var str = item[0]; - var expect = item[1]; - var label = str+" gives "+expect; - theVows[label] = function() { - assert.equal(tough.defaultPath(str),expect); - }; - }); - return theVows; -} - -var atNow = Date.now(); -function at(offset) { return {now: new Date(atNow+offset)} } - -vows.describe('Cookie Jar') -.addBatch({ - "all defined": function() { - assert.ok(Cookie); - assert.ok(CookieJar); - }, -}) -.addBatch( - dateVows({ - "Wed, 09 Jun 2021 10:18:14 GMT": true, - "Wed, 09 Jun 2021 22:18:14 GMT": true, - "Tue, 18 Oct 2011 07:42:42.123 GMT": true, - "18 Oct 2011 07:42:42 GMT": true, - "8 Oct 2011 7:42:42 GMT": true, - "8 Oct 2011 7:2:42 GMT": false, - "Oct 18 2011 07:42:42 GMT": true, - "Tue Oct 18 2011 07:05:03 GMT+0000 (GMT)": true, - "09 Jun 2021 10:18:14 GMT": true, - "99 Jix 3038 48:86:72 ZMT": false, - '01 Jan 1970 00:00:00 GMT': true, - '01 Jan 1600 00:00:00 GMT': false, // before 1601 - '01 Jan 1601 00:00:00 GMT': true, - '10 Feb 81 13:00:00 GMT': true, // implicit year - 'Thu, 01 Jan 1970 00:00:010 GMT': true, // strange time, non-strict OK - 'Thu, 17-Apr-2014 02:12:29 GMT': true, // dashes - 'Thu, 17-Apr-2014 02:12:29 UTC': true, // dashes and UTC - }) -) -.addBatch({ - "strict date parse of Thu, 01 Jan 1970 00:00:010 GMT": { - topic: function() { - return tough.parseDate('Thu, 01 Jan 1970 00:00:010 GMT', true) ? true : false; - }, - "invalid": function(date) { - assert.equal(date,false); - }, - } -}) -.addBatch({ - "formatting": { - "a simple cookie": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=b'); - }, - }, - "a cookie with spaces in the value": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'beta gamma'; - return c; - }, - "doesn't validate": function(c) { - assert.ok(!c.validate()); - }, - "to string": function(c) { - assert.equal(c.toString(), 'a="beta gamma"'); - }, - }, - "with an empty value and HttpOnly": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.httpOnly = true; - return c; - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=; HttpOnly'); - } - }, - "with an expiry": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.setExpires("Oct 18 2011 07:05:03 GMT"); - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=b; Expires=Tue, 18 Oct 2011 07:05:03 GMT'); - }, - "to short string": function(c) { - assert.equal(c.cookieString(), 'a=b'); - }, - }, - "with a max-age": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.setExpires("Oct 18 2011 07:05:03 GMT"); - c.maxAge = 12345; - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); // mabe this one *shouldn't*? - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=b; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Max-Age=12345'); - }, - }, - "with a bunch of things": function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.setExpires("Oct 18 2011 07:05:03 GMT"); - c.maxAge = 12345; - c.domain = 'example.com'; - c.path = '/foo'; - c.secure = true; - c.httpOnly = true; - c.extensions = ['MyExtension']; - assert.equal(c.toString(), 'a=b; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Max-Age=12345; Domain=example.com; Path=/foo; Secure; HttpOnly; MyExtension'); - }, - "a host-only cookie": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.hostOnly = true; - c.domain = 'shouldnt-stringify.example.com'; - c.path = '/should-stringify'; - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=b; Path=/should-stringify'); - }, - }, - "minutes are '10'": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.expires = new Date(1284113410000); - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); - }, - "to string": function(c) { - var str = c.toString(); - assert.notEqual(str, 'a=b; Expires=Fri, 010 Sep 2010 010:010:010 GMT'); - assert.equal(str, 'a=b; Expires=Fri, 10 Sep 2010 10:10:10 GMT'); - }, - } - } -}) -.addBatch({ - "TTL with max-age": function() { - var c = new Cookie(); - c.maxAge = 123; - assert.equal(c.TTL(), 123000); - assert.equal(c.expiryTime(new Date(9000000)), 9123000); - }, - "TTL with zero max-age": function() { - var c = new Cookie(); - c.key = 'a'; c.value = 'b'; - c.maxAge = 0; // should be treated as "earliest representable" - assert.equal(c.TTL(), 0); - assert.equal(c.expiryTime(new Date(9000000)), -Infinity); - assert.ok(!c.validate()); // not valid, really: non-zero-digit *DIGIT - }, - "TTL with negative max-age": function() { - var c = new Cookie(); - c.key = 'a'; c.value = 'b'; - c.maxAge = -1; // should be treated as "earliest representable" - assert.equal(c.TTL(), 0); - assert.equal(c.expiryTime(new Date(9000000)), -Infinity); - assert.ok(!c.validate()); // not valid, really: non-zero-digit *DIGIT - }, - "TTL with max-age and expires": function() { - var c = new Cookie(); - c.maxAge = 123; - c.expires = new Date(Date.now()+9000); - assert.equal(c.TTL(), 123000); - assert.ok(c.isPersistent()); - }, - "TTL with expires": function() { - var c = new Cookie(); - var now = Date.now(); - c.expires = new Date(now+9000); - assert.equal(c.TTL(now), 9000); - assert.equal(c.expiryTime(), c.expires.getTime()); - }, - "TTL with old expires": function() { - var c = new Cookie(); - c.setExpires('17 Oct 2010 00:00:00 GMT'); - assert.ok(c.TTL() < 0); - assert.ok(c.isPersistent()); - }, - "default TTL": { - topic: function() { return new Cookie() }, - "is Infinite-future": function(c) { assert.equal(c.TTL(), Infinity) }, - "is a 'session' cookie": function(c) { assert.ok(!c.isPersistent()) }, - }, -}).addBatch({ - "Parsing": { - "simple": { - topic: function() { - return Cookie.parse('a=bcd',true) || null; - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'a') }, - "value": function(c) { assert.equal(c.value, 'bcd') }, - "no path": function(c) { assert.equal(c.path, null) }, - "no domain": function(c) { assert.equal(c.domain, null) }, - "no extensions": function(c) { assert.ok(!c.extensions) }, - }, - "with expiry": { - topic: function() { - return Cookie.parse('a=bcd; Expires=Tue, 18 Oct 2011 07:05:03 GMT',true) || null; - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'a') }, - "value": function(c) { assert.equal(c.value, 'bcd') }, - "has expires": function(c) { - assert.ok(c.expires !== Infinity, 'expiry is infinite when it shouldn\'t be'); - assert.equal(c.expires.getTime(), 1318921503000); - }, - }, - "with expiry and path": { - topic: function() { - return Cookie.parse('abc="xyzzy!"; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Path=/aBc',true) || null; - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'abc') }, - "value": function(c) { assert.equal(c.value, 'xyzzy!') }, - "has expires": function(c) { - assert.ok(c.expires !== Infinity, 'expiry is infinite when it shouldn\'t be'); - assert.equal(c.expires.getTime(), 1318921503000); - }, - "has path": function(c) { assert.equal(c.path, '/aBc'); }, - "no httponly or secure": function(c) { - assert.ok(!c.httpOnly); - assert.ok(!c.secure); - }, - }, - "with everything": { - topic: function() { - return Cookie.parse('abc="xyzzy!"; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Path=/aBc; Domain=example.com; Secure; HTTPOnly; Max-Age=1234; Foo=Bar; Baz', true) || null; - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'abc') }, - "value": function(c) { assert.equal(c.value, 'xyzzy!') }, - "has expires": function(c) { - assert.ok(c.expires !== Infinity, 'expiry is infinite when it shouldn\'t be'); - assert.equal(c.expires.getTime(), 1318921503000); - }, - "has path": function(c) { assert.equal(c.path, '/aBc'); }, - "has domain": function(c) { assert.equal(c.domain, 'example.com'); }, - "has httponly": function(c) { assert.equal(c.httpOnly, true); }, - "has secure": function(c) { assert.equal(c.secure, true); }, - "has max-age": function(c) { assert.equal(c.maxAge, 1234); }, - "has extensions": function(c) { - assert.ok(c.extensions); - assert.equal(c.extensions[0], 'Foo=Bar'); - assert.equal(c.extensions[1], 'Baz'); - }, - }, - "invalid expires": { - "strict": function() { assert.ok(!Cookie.parse("a=b; Expires=xyzzy", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; Expires=xyzzy"); - assert.ok(c); - assert.equal(c.expires, Infinity); - }, - }, - "zero max-age": { - "strict": function() { assert.ok(!Cookie.parse("a=b; Max-Age=0", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; Max-Age=0"); - assert.ok(c); - assert.equal(c.maxAge, 0); - }, - }, - "negative max-age": { - "strict": function() { assert.ok(!Cookie.parse("a=b; Max-Age=-1", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; Max-Age=-1"); - assert.ok(c); - assert.equal(c.maxAge, -1); - }, - }, - "empty domain": { - "strict": function() { assert.ok(!Cookie.parse("a=b; domain=", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; domain="); - assert.ok(c); - assert.equal(c.domain, null); - }, - }, - "dot domain": { - "strict": function() { assert.ok(!Cookie.parse("a=b; domain=.", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; domain=."); - assert.ok(c); - assert.equal(c.domain, null); - }, - }, - "uppercase domain": { - "strict lowercases": function() { - var c = Cookie.parse("a=b; domain=EXAMPLE.COM"); - assert.ok(c); - assert.equal(c.domain, 'example.com'); - }, - "non-strict lowercases": function() { - var c = Cookie.parse("a=b; domain=EXAMPLE.COM"); - assert.ok(c); - assert.equal(c.domain, 'example.com'); - }, - }, - "trailing dot in domain": { - topic: function() { - return Cookie.parse("a=b; Domain=example.com.", true) || null; - }, - "has the domain": function(c) { assert.equal(c.domain,"example.com.") }, - "but doesn't validate": function(c) { assert.equal(c.validate(),false) }, - }, - "empty path": { - "strict": function() { assert.ok(!Cookie.parse("a=b; path=", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; path="); - assert.ok(c); - assert.equal(c.path, null); - }, - }, - "no-slash path": { - "strict": function() { assert.ok(!Cookie.parse("a=b; path=xyzzy", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; path=xyzzy"); - assert.ok(c); - assert.equal(c.path, null); - }, - }, - "trailing semi-colons after path": { - topic: function () { - return [ - "a=b; path=/;", - "c=d;;;;" - ]; - }, - "strict": function (t) { - assert.ok(!Cookie.parse(t[0], true)); - assert.ok(!Cookie.parse(t[1], true)); - }, - "non-strict": function (t) { - var c1 = Cookie.parse(t[0]); - var c2 = Cookie.parse(t[1]); - assert.ok(c1); - assert.ok(c2); - assert.equal(c1.path, '/'); - } - }, - "secure-with-value": { - "strict": function() { assert.ok(!Cookie.parse("a=b; Secure=xyzzy", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; Secure=xyzzy"); - assert.ok(c); - assert.equal(c.secure, true); - }, - }, - "httponly-with-value": { - "strict": function() { assert.ok(!Cookie.parse("a=b; HttpOnly=xyzzy", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; HttpOnly=xyzzy"); - assert.ok(c); - assert.equal(c.httpOnly, true); - }, - }, - "garbage": { - topic: function() { - return Cookie.parse("\x08", true) || null; - }, - "doesn't parse": function(c) { assert.equal(c,null) }, - }, - "public suffix domain": { - topic: function() { - return Cookie.parse("a=b; domain=kyoto.jp", true) || null; - }, - "parses fine": function(c) { - assert.ok(c); - assert.equal(c.domain, 'kyoto.jp'); - }, - "but fails validation": function(c) { - assert.ok(c); - assert.ok(!c.validate()); - }, - }, - "Ironically, Google 'GAPS' cookie has very little whitespace": { - topic: function() { - return Cookie.parse("GAPS=1:A1aaaaAaAAa1aaAaAaaAAAaaa1a11a:aaaAaAaAa-aaaA1-;Path=/;Expires=Thu, 17-Apr-2014 02:12:29 GMT;Secure;HttpOnly"); - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'GAPS') }, - "value": function(c) { assert.equal(c.value, '1:A1aaaaAaAAa1aaAaAaaAAAaaa1a11a:aaaAaAaAa-aaaA1-') }, - "path": function(c) { - assert.notEqual(c.path, '/;Expires'); // BUG - assert.equal(c.path, '/'); - }, - "expires": function(c) { - assert.notEqual(c.expires, Infinity); - assert.equal(c.expires.getTime(), 1397700749000); - }, - "secure": function(c) { assert.ok(c.secure) }, - "httponly": function(c) { assert.ok(c.httpOnly) }, - }, - "lots of equal signs": { - topic: function() { - return Cookie.parse("queryPref=b=c&d=e; Path=/f=g; Expires=Thu, 17 Apr 2014 02:12:29 GMT; HttpOnly"); - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'queryPref') }, - "value": function(c) { assert.equal(c.value, 'b=c&d=e') }, - "path": function(c) { - assert.equal(c.path, '/f=g'); - }, - "expires": function(c) { - assert.notEqual(c.expires, Infinity); - assert.equal(c.expires.getTime(), 1397700749000); - }, - "httponly": function(c) { assert.ok(c.httpOnly) }, - } - } -}) -.addBatch({ - "domain normalization": { - "simple": function() { - var c = new Cookie(); - c.domain = "EXAMPLE.com"; - assert.equal(c.canonicalizedDomain(), "example.com"); - }, - "extra dots": function() { - var c = new Cookie(); - c.domain = ".EXAMPLE.com"; - assert.equal(c.cdomain(), "example.com"); - }, - "weird trailing dot": function() { - var c = new Cookie(); - c.domain = "EXAMPLE.ca."; - assert.equal(c.canonicalizedDomain(), "example.ca."); - }, - "weird internal dots": function() { - var c = new Cookie(); - c.domain = "EXAMPLE...ca."; - assert.equal(c.canonicalizedDomain(), "example...ca."); - }, - "IDN": function() { - var c = new Cookie(); - c.domain = "δοκιμή.δοκιμή"; // "test.test" in greek - assert.equal(c.canonicalizedDomain(), "xn--jxalpdlp.xn--jxalpdlp"); - } - } -}) -.addBatch({ - "Domain Match":matchVows(tough.domainMatch, [ - // str, dom, expect - ["example.com", "example.com", true], - ["eXaMpLe.cOm", "ExAmPlE.CoM", true], - ["no.ca", "yes.ca", false], - ["wwwexample.com", "example.com", false], - ["www.example.com", "example.com", true], - ["example.com", "www.example.com", false], - ["www.subdom.example.com", "example.com", true], - ["www.subdom.example.com", "subdom.example.com", true], - ["example.com", "example.com.", false], // RFC6265 S4.1.2.3 - ["192.168.0.1", "168.0.1", false], // S5.1.3 "The string is a host name" - [null, "example.com", null], - ["example.com", null, null], - [null, null, null], - [undefined, undefined, null], - ]) -}) -.addBatch({ - "default-path": defaultPathVows([ - [null,"/"], - ["/","/"], - ["/file","/"], - ["/dir/file","/dir"], - ["noslash","/"], - ]) -}) -.addBatch({ - "Path-Match": matchVows(tough.pathMatch, [ - // request, cookie, match - ["/","/",true], - ["/dir","/",true], - ["/","/dir",false], - ["/dir/","/dir/", true], - ["/dir/file","/dir/",true], - ["/dir/file","/dir",true], - ["/directory","/dir",false], - ]) -}) -.addBatch({ - "Cookie Sorting": { - topic: function() { - var cookies = []; - var now = Date.now(); - cookies.push(Cookie.parse("a=0; Domain=example.com")); - cookies.push(Cookie.parse("b=1; Domain=www.example.com")); - cookies.push(Cookie.parse("c=2; Domain=example.com; Path=/pathA")); - cookies.push(Cookie.parse("d=3; Domain=www.example.com; Path=/pathA")); - cookies.push(Cookie.parse("e=4; Domain=example.com; Path=/pathA/pathB")); - cookies.push(Cookie.parse("f=5; Domain=www.example.com; Path=/pathA/pathB")); - - // force a stable creation time consistent with the order above since - // some may have been created at now + 1ms. - var i = cookies.length; - cookies.forEach(function(cookie) { - cookie.creation = new Date(now - 100*(i--)); - }); - - // weak shuffle: - cookies = cookies.sort(function(){return Math.random()-0.5}); - - cookies = cookies.sort(tough.cookieCompare); - return cookies; - }, - "got": function(cookies) { - assert.lengthOf(cookies, 6); - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['e','f','c','d','a','b']); - }, - } -}) -.addBatch({ - "CookieJar": { - "Setting a basic cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com; Path=/"); - assert.strictEqual(c.hostOnly, null); - assert.instanceOf(c.creation, Date); - assert.strictEqual(c.lastAccessed, null); - c.creation = new Date(Date.now()-10000); - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "works": function(c) { assert.instanceOf(c,Cookie) }, // C is for Cookie, good enough for me - "gets timestamped": function(c) { - assert.ok(c.creation); - assert.ok(Date.now() - c.creation.getTime() < 5000); // recently stamped - assert.ok(c.lastAccessed); - assert.equal(c.creation, c.lastAccessed); - assert.equal(c.TTL(), Infinity); - assert.ok(!c.isPersistent()); - }, - }, - "Setting a no-path cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com"); - assert.strictEqual(c.hostOnly, null); - assert.instanceOf(c.creation, Date); - assert.strictEqual(c.lastAccessed, null); - c.creation = new Date(Date.now()-10000); - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "domain": function(c) { assert.equal(c.domain, 'example.com') }, - "path is /": function(c) { assert.equal(c.path, '/') }, - "path was derived": function(c) { assert.strictEqual(c.pathIsDefault, true) }, - }, - "Setting a cookie already marked as host-only": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com"); - assert.strictEqual(c.hostOnly, null); - assert.instanceOf(c.creation, Date); - assert.strictEqual(c.lastAccessed, null); - c.creation = new Date(Date.now()-10000); - c.hostOnly = true; - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "domain": function(c) { assert.equal(c.domain, 'example.com') }, - "still hostOnly": function(c) { assert.strictEqual(c.hostOnly, true) }, - }, - "Setting a session cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b"); - assert.strictEqual(c.path, null); - cj.setCookie(c, 'http://www.example.com/dir/index.html', this.callback); - }, - "works": function(c) { assert.instanceOf(c,Cookie) }, - "gets the domain": function(c) { assert.equal(c.domain, 'www.example.com') }, - "gets the default path": function(c) { assert.equal(c.path, '/dir') }, - "is 'hostOnly'": function(c) { assert.ok(c.hostOnly) }, - }, - "Setting wrong domain cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=fooxample.com; Path=/"); - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "fails": function(err,c) { - assert.ok(err.message.match(/domain/i)); - assert.ok(!c); - }, - }, - "Setting sub-domain cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=www.example.com; Path=/"); - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "fails": function(err,c) { - assert.ok(err.message.match(/domain/i)); - assert.ok(!c); - }, - }, - "Setting super-domain cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com; Path=/"); - cj.setCookie(c, 'http://www.app.example.com/index.html', this.callback); - }, - "success": function(err,c) { - assert.ok(!err); - assert.equal(c.domain, 'example.com'); - }, - }, - "Setting HttpOnly cookie over non-HTTP API": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com; Path=/; HttpOnly"); - cj.setCookie(c, 'http://example.com/index.html', {http:false}, this.callback); - }, - "fails": function(err,c) { - assert.match(err.message, /HttpOnly/i); - assert.ok(!c); - }, - }, - }, - "Cookie Jar store eight cookies": { - topic: function() { - var cj = new CookieJar(); - var ex = 'http://example.com/index.html'; - var tasks = []; - tasks.push(function(next) { - cj.setCookie('a=1; Domain=example.com; Path=/',ex,at(0),next); - }); - tasks.push(function(next) { - cj.setCookie('b=2; Domain=example.com; Path=/; HttpOnly',ex,at(1000),next); - }); - tasks.push(function(next) { - cj.setCookie('c=3; Domain=example.com; Path=/; Secure',ex,at(2000),next); - }); - tasks.push(function(next) { // path - cj.setCookie('d=4; Domain=example.com; Path=/foo',ex,at(3000),next); - }); - tasks.push(function(next) { // host only - cj.setCookie('e=5',ex,at(4000),next); - }); - tasks.push(function(next) { // other domain - cj.setCookie('f=6; Domain=nodejs.org; Path=/','http://nodejs.org',at(5000),next); - }); - tasks.push(function(next) { // expired - cj.setCookie('g=7; Domain=example.com; Path=/; Expires=Tue, 18 Oct 2011 00:00:00 GMT',ex,at(6000),next); - }); - tasks.push(function(next) { // expired via Max-Age - cj.setCookie('h=8; Domain=example.com; Path=/; Max-Age=1',ex,next); - }); - var cb = this.callback; - async.parallel(tasks, function(err,results){ - setTimeout(function() { - cb(err,cj,results); - }, 2000); // so that 'h=8' expires - }); - }, - "setup ok": function(err,cj,results) { - assert.ok(1); - }, - "then retrieving for http://nodejs.org": { - topic: function(cj,results) { - cj.getCookies('http://nodejs.org',this.callback); - }, - "get a nodejs cookie": function(cookies) { - assert.lengthOf(cookies, 1); - var cookie = cookies[0]; - assert.equal(cookie.domain, 'nodejs.org'); - }, - }, - "then retrieving for https://example.com": { - topic: function(cj,results) { - cj.getCookies('https://example.com',{secure:true},this.callback); - }, - "get a secure example cookie with others": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','b','c','e']); - }, - }, - "then retrieving for https://example.com (missing options)": { - topic: function(cj,results) { - cj.getCookies('https://example.com',this.callback); - }, - "get a secure example cookie with others": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','b','c','e']); - }, - }, - "then retrieving for http://example.com": { - topic: function(cj,results) { - cj.getCookies('http://example.com',this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','b','e']); - }, - }, - "then retrieving for http://EXAMPlE.com": { - topic: function(cj,results) { - cj.getCookies('http://EXAMPlE.com',this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','b','e']); - }, - }, - "then retrieving for http://example.com, non-HTTP": { - topic: function(cj,results) { - cj.getCookies('http://example.com',{http:false},this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','e']); - }, - }, - "then retrieving for http://example.com/foo/bar": { - topic: function(cj,results) { - cj.getCookies('http://example.com/foo/bar',this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['d','a','b','e']); - }, - }, - "then retrieving for http://example.com as a string": { - topic: function(cj,results) { - cj.getCookieString('http://example.com',this.callback); - }, - "get a single string": function(cookieHeader) { - assert.equal(cookieHeader, "a=1; b=2; e=5"); - }, - }, - "then retrieving for http://example.com as a set-cookie header": { - topic: function(cj,results) { - cj.getSetCookieStrings('http://example.com',this.callback); - }, - "get a single string": function(cookieHeaders) { - assert.lengthOf(cookieHeaders, 3); - assert.equal(cookieHeaders[0], "a=1; Domain=example.com; Path=/"); - assert.equal(cookieHeaders[1], "b=2; Domain=example.com; Path=/; HttpOnly"); - assert.equal(cookieHeaders[2], "e=5; Path=/"); - }, - }, - "then retrieving for http://www.example.com/": { - topic: function(cj,results) { - cj.getCookies('http://www.example.com/foo/bar',this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['d','a','b']); // note lack of 'e' - }, - }, - }, - "Repeated names": { - topic: function() { - var cb = this.callback; - var cj = new CookieJar(); - var ex = 'http://www.example.com/'; - var sc = cj.setCookie; - var tasks = []; - var now = Date.now(); - tasks.push(sc.bind(cj,'aaaa=xxxx',ex,at(0))); - tasks.push(sc.bind(cj,'aaaa=1111; Domain=www.example.com',ex,at(1000))); - tasks.push(sc.bind(cj,'aaaa=2222; Domain=example.com',ex,at(2000))); - tasks.push(sc.bind(cj,'aaaa=3333; Domain=www.example.com; Path=/pathA',ex,at(3000))); - async.series(tasks,function(err,results) { - results = results.filter(function(e) {return e !== undefined}); - cb(err,{cj:cj, cookies:results, now:now}); - }); - }, - "all got set": function(err,t) { - assert.lengthOf(t.cookies,4); - }, - "then getting 'em back": { - topic: function(t) { - var cj = t.cj; - cj.getCookies('http://www.example.com/pathA',this.callback); - }, - "there's just three": function (err,cookies) { - var vals = cookies.map(function(c) {return c.value}); - // may break with sorting; sorting should put 3333 first due to longest path: - assert.deepEqual(vals, ['3333','1111','2222']); - } - }, - }, - "CookieJar setCookie errors": { - "public-suffix domain": { - topic: function() { - var cj = new CookieJar(); - cj.setCookie('i=9; Domain=kyoto.jp; Path=/','kyoto.jp',this.callback); - }, - "errors": function(err,cookie) { - assert.ok(err); - assert.ok(!cookie); - assert.match(err.message, /public suffix/i); - }, - }, - "wrong domain": { - topic: function() { - var cj = new CookieJar(); - cj.setCookie('j=10; Domain=google.com; Path=/','google.ca',this.callback); - }, - "errors": function(err,cookie) { - assert.ok(err); - assert.ok(!cookie); - assert.match(err.message, /not in this host's domain/i); - }, - }, - "old cookie is HttpOnly": { - topic: function() { - var cb = this.callback; - var next = function (err,c) { - return cb(err,cj); - }; - var cj = new CookieJar(); - cj.setCookie('k=11; Domain=example.ca; Path=/; HttpOnly','http://example.ca',{http:true},next); - }, - "initial cookie is set": function(err,cj) { - assert.ok(!err); - }, - "but when trying to overwrite": { - topic: function(cj) { - var cb = this.callback; - cj.setCookie('k=12; Domain=example.ca; Path=/','http://example.ca',{http:false},function(err,c) {cb(null,err)}); - }, - "it's an error": function(err) { - assert.ok(err); - }, - "then, checking the original": { - topic: function(ignored,cj) { - assert.ok(cj instanceof CookieJar); - cj.getCookies('http://example.ca',{http:true},this.callback); - }, - "cookie has original value": function(err,cookies) { - assert.equal(err,null); - assert.lengthOf(cookies, 1); - assert.equal(cookies[0].value,11); - }, - }, - }, - }, - }, -}) -.addBatch({ - "JSON": { - "serialization": { - topic: function() { - var c = Cookie.parse('alpha=beta; Domain=example.com; Path=/foo; Expires=Tue, 19 Jan 2038 03:14:07 GMT; HttpOnly'); - return JSON.stringify(c); - }, - "gives a string": function(str) { - assert.equal(typeof str, "string"); - }, - "date is in ISO format": function(str) { - assert.match(str, /"expires":"2038-01-19T03:14:07\.000Z"/, 'expires is in ISO format'); - }, - }, - "deserialization": { - topic: function() { - var json = '{"key":"alpha","value":"beta","domain":"example.com","path":"/foo","expires":"2038-01-19T03:14:07.000Z","httpOnly":true,"lastAccessed":2000000000123}'; - return Cookie.fromJSON(json); - }, - "works": function(c) { - assert.ok(c); - }, - "key": function(c) { assert.equal(c.key, "alpha") }, - "value": function(c) { assert.equal(c.value, "beta") }, - "domain": function(c) { assert.equal(c.domain, "example.com") }, - "path": function(c) { assert.equal(c.path, "/foo") }, - "httpOnly": function(c) { assert.strictEqual(c.httpOnly, true) }, - "secure": function(c) { assert.strictEqual(c.secure, false) }, - "hostOnly": function(c) { assert.strictEqual(c.hostOnly, null) }, - "expires is a date object": function(c) { - assert.equal(c.expires.getTime(), 2147483647000); - }, - "lastAccessed is a date object": function(c) { - assert.equal(c.lastAccessed.getTime(), 2000000000123); - }, - "creation defaulted": function(c) { - assert.ok(c.creation.getTime()); - } - }, - "null deserialization": { - topic: function() { - return Cookie.fromJSON(null); - }, - "is null": function(cookie) { - assert.equal(cookie,null); - }, - }, - }, - "expiry deserialization": { - "Infinity": { - topic: Cookie.fromJSON.bind(null, '{"expires":"Infinity"}'), - "is infinite": function(c) { - assert.strictEqual(c.expires, "Infinity"); - assert.equal(c.expires, Infinity); - }, - }, - }, - "maxAge serialization": { - topic: function() { - return function(toSet) { - var c = new Cookie(); - c.key = 'foo'; c.value = 'bar'; - c.setMaxAge(toSet); - return JSON.stringify(c); - }; - }, - "zero": { - topic: function(f) { return f(0) }, - "looks good": function(str) { - assert.match(str, /"maxAge":0/); - }, - }, - "Infinity": { - topic: function(f) { return f(Infinity) }, - "looks good": function(str) { - assert.match(str, /"maxAge":"Infinity"/); - }, - }, - "-Infinity": { - topic: function(f) { return f(-Infinity) }, - "looks good": function(str) { - assert.match(str, /"maxAge":"-Infinity"/); - }, - }, - "null": { - topic: function(f) { return f(null) }, - "looks good": function(str) { - assert.match(str, /"maxAge":null/); - }, - }, - }, - "maxAge deserialization": { - "number": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":123}'), - "is the number": function(c) { - assert.strictEqual(c.maxAge, 123); - }, - }, - "null": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":null}'), - "is null": function(c) { - assert.strictEqual(c.maxAge, null); - }, - }, - "less than zero": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":-123}'), - "is -123": function(c) { - assert.strictEqual(c.maxAge, -123); - }, - }, - "Infinity": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":"Infinity"}'), - "is inf-as-string": function(c) { - assert.strictEqual(c.maxAge, "Infinity"); - }, - }, - "-Infinity": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":"-Infinity"}'), - "is inf-as-string": function(c) { - assert.strictEqual(c.maxAge, "-Infinity"); - }, - }, - } -}) -.addBatch({ - "permuteDomain": { - "base case": { - topic: tough.permuteDomain.bind(null,'example.com'), - "got the domain": function(list) { - assert.deepEqual(list, ['example.com']); - }, - }, - "two levels": { - topic: tough.permuteDomain.bind(null,'foo.bar.example.com'), - "got three things": function(list) { - assert.deepEqual(list, ['example.com','bar.example.com','foo.bar.example.com']); - }, - }, - "invalid domain": { - topic: tough.permuteDomain.bind(null,'foo.bar.example.localduhmain'), - "got three things": function(list) { - assert.equal(list, null); - }, - }, - }, - "permutePath": { - "base case": { - topic: tough.permutePath.bind(null,'/'), - "just slash": function(list) { - assert.deepEqual(list,['/']); - }, - }, - "single case": { - topic: tough.permutePath.bind(null,'/foo'), - "two things": function(list) { - assert.deepEqual(list,['/foo','/']); - }, - "path matching": function(list) { - list.forEach(function(e) { - assert.ok(tough.pathMatch('/foo',e)); - }); - }, - }, - "double case": { - topic: tough.permutePath.bind(null,'/foo/bar'), - "four things": function(list) { - assert.deepEqual(list,['/foo/bar','/foo','/']); - }, - "path matching": function(list) { - list.forEach(function(e) { - assert.ok(tough.pathMatch('/foo/bar',e)); - }); - }, - }, - "trailing slash": { - topic: tough.permutePath.bind(null,'/foo/bar/'), - "three things": function(list) { - assert.deepEqual(list,['/foo/bar','/foo','/']); - }, - "path matching": function(list) { - list.forEach(function(e) { - assert.ok(tough.pathMatch('/foo/bar/',e)); - }); - }, - }, - } -}) -.addBatch({ - "Issue 1": { - topic: function() { - var cj = new CookieJar(); - cj.setCookie('hello=world; path=/some/path/', 'http://domain/some/path/file', function(err,cookie) { - this.callback(err,{cj:cj, cookie:cookie}); - }.bind(this)); - }, - "stored a cookie": function(t) { - assert.ok(t.cookie); - }, - "cookie's path was modified to remove unnecessary slash": function(t) { - assert.equal(t.cookie.path, '/some/path'); - }, - "getting it back": { - topic: function(t) { - t.cj.getCookies('http://domain/some/path/file', function(err,cookies) { - this.callback(err, {cj:t.cj, cookies:cookies||[]}); - }.bind(this)); - }, - "got one cookie": function(t) { - assert.lengthOf(t.cookies, 1); - }, - "it's the right one": function(t) { - var c = t.cookies[0]; - assert.equal(c.key, 'hello'); - assert.equal(c.value, 'world'); - }, - } - } -}) -.addBatch({ - "expiry option": { - topic: function() { - var cb = this.callback; - var cj = new CookieJar(); - cj.setCookie('near=expiry; Domain=example.com; Path=/; Max-Age=1','http://www.example.com',at(-1), function(err,cookie) { - - cb(err, {cj:cj, cookie:cookie}); - }); - }, - "set the cookie": function(t) { - assert.ok(t.cookie, "didn't set?!"); - assert.equal(t.cookie.key, 'near'); - }, - "then, retrieving": { - topic: function(t) { - var cb = this.callback; - setTimeout(function() { - t.cj.getCookies('http://www.example.com', {http:true, expire:false}, function(err,cookies) { - t.cookies = cookies; - cb(err,t); - }); - },2000); - }, - "got the cookie": function(t) { - assert.lengthOf(t.cookies, 1); - assert.equal(t.cookies[0].key, 'near'); - }, - } - } -}) -.addBatch({ - "trailing semi-colon set into cj": { - topic: function () { - var cb = this.callback; - var cj = new CookieJar(); - var ex = 'http://www.example.com'; - var tasks = []; - tasks.push(function(next) { - cj.setCookie('broken_path=testme; path=/;',ex,at(-1),next); - }); - tasks.push(function(next) { - cj.setCookie('b=2; Path=/;;;;',ex,at(-1),next); - }); - async.parallel(tasks, function (err, cookies) { - cb(null, { - cj: cj, - cookies: cookies - }); - }); - }, - "check number of cookies": function (t) { - assert.lengthOf(t.cookies, 2, "didn't set"); - }, - "check *broken_path* was set properly": function (t) { - assert.equal(t.cookies[0].key, "broken_path"); - assert.equal(t.cookies[0].value, "testme"); - assert.equal(t.cookies[0].path, "/"); - }, - "check *b* was set properly": function (t) { - assert.equal(t.cookies[1].key, "b"); - assert.equal(t.cookies[1].value, "2"); - assert.equal(t.cookies[1].path, "/"); - }, - "retrieve the cookie": { - topic: function (t) { - var cb = this.callback; - t.cj.getCookies('http://www.example.com', {}, function (err, cookies) { - t.cookies = cookies; - cb(err, t); - }); - }, - "get the cookie": function(t) { - assert.lengthOf(t.cookies, 2); - assert.equal(t.cookies[0].key, 'broken_path'); - assert.equal(t.cookies[0].value, 'testme'); - assert.equal(t.cookies[1].key, "b"); - assert.equal(t.cookies[1].value, "2"); - assert.equal(t.cookies[1].path, "/"); - }, - }, - } -}) -.addBatch({ - "Constructor":{ - topic: function () { - return new Cookie({ - key: 'test', - value: 'b', - maxAge: 60 - }); - }, - 'check for key property': function (c) { - assert.ok(c); - assert.equal(c.key, 'test'); - }, - 'check for value property': function (c) { - assert.equal(c.value, 'b'); - }, - 'check for maxAge': function (c) { - assert.equal(c.maxAge, 60); - }, - 'check for default values for unspecified properties': function (c) { - assert.equal(c.expires, "Infinity"); - assert.equal(c.secure, false); - assert.equal(c.httpOnly, false); - } - } -}) -.addBatch({ - "allPaths option": { - topic: function() { - var cj = new CookieJar(); - var tasks = []; - tasks.push(cj.setCookie.bind(cj, 'nopath_dom=qq; Path=/; Domain=example.com', 'http://example.com', {})); - tasks.push(cj.setCookie.bind(cj, 'path_dom=qq; Path=/foo; Domain=example.com', 'http://example.com', {})); - tasks.push(cj.setCookie.bind(cj, 'nopath_host=qq; Path=/', 'http://www.example.com', {})); - tasks.push(cj.setCookie.bind(cj, 'path_host=qq; Path=/foo', 'http://www.example.com', {})); - tasks.push(cj.setCookie.bind(cj, 'other=qq; Path=/', 'http://other.example.com/', {})); - tasks.push(cj.setCookie.bind(cj, 'other2=qq; Path=/foo', 'http://other.example.com/foo', {})); - var cb = this.callback; - async.parallel(tasks, function(err,results) { - cb(err, {cj:cj, cookies: results}); - }); - }, - "all set": function(t) { - assert.equal(t.cookies.length, 6); - assert.ok(t.cookies.every(function(c) { return !!c })); - }, - "getting without allPaths": { - topic: function(t) { - var cb = this.callback; - var cj = t.cj; - cj.getCookies('http://www.example.com/', {}, function(err,cookies) { - cb(err, {cj:cj, cookies:cookies}); - }); - }, - "found just two cookies": function(t) { - assert.equal(t.cookies.length, 2); - }, - "all are path=/": function(t) { - assert.ok(t.cookies.every(function(c) { return c.path === '/' })); - }, - "no 'other' cookies": function(t) { - assert.ok(!t.cookies.some(function(c) { return (/^other/).test(c.name) })); - }, - }, - "getting without allPaths for /foo": { - topic: function(t) { - var cb = this.callback; - var cj = t.cj; - cj.getCookies('http://www.example.com/foo', {}, function(err,cookies) { - cb(err, {cj:cj, cookies:cookies}); - }); - }, - "found four cookies": function(t) { - assert.equal(t.cookies.length, 4); - }, - "no 'other' cookies": function(t) { - assert.ok(!t.cookies.some(function(c) { return (/^other/).test(c.name) })); - }, - }, - "getting with allPaths:true": { - topic: function(t) { - var cb = this.callback; - var cj = t.cj; - cj.getCookies('http://www.example.com/', {allPaths:true}, function(err,cookies) { - cb(err, {cj:cj, cookies:cookies}); - }); - }, - "found four cookies": function(t) { - assert.equal(t.cookies.length, 4); - }, - "no 'other' cookies": function(t) { - assert.ok(!t.cookies.some(function(c) { return (/^other/).test(c.name) })); - }, - }, - } -}) -.export(module); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/README.md deleted file mode 100644 index bb533d56..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/README.md +++ /dev/null @@ -1,4 +0,0 @@ -tunnel-agent -============ - -HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/index.js deleted file mode 100644 index 3f7bbb90..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/index.js +++ /dev/null @@ -1,227 +0,0 @@ -'use strict' - -var net = require('net') - , tls = require('tls') - , http = require('http') - , https = require('https') - , events = require('events') - , assert = require('assert') - , util = require('util') - ; - -exports.httpOverHttp = httpOverHttp -exports.httpsOverHttp = httpsOverHttp -exports.httpOverHttps = httpOverHttps -exports.httpsOverHttps = httpsOverHttps - - -function httpOverHttp(options) { - var agent = new TunnelingAgent(options) - agent.request = http.request - return agent -} - -function httpsOverHttp(options) { - var agent = new TunnelingAgent(options) - agent.request = http.request - agent.createSocket = createSecureSocket - return agent -} - -function httpOverHttps(options) { - var agent = new TunnelingAgent(options) - agent.request = https.request - return agent -} - -function httpsOverHttps(options) { - var agent = new TunnelingAgent(options) - agent.request = https.request - agent.createSocket = createSecureSocket - return agent -} - - -function TunnelingAgent(options) { - var self = this - self.options = options || {} - self.proxyOptions = self.options.proxy || {} - self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets - self.requests = [] - self.sockets = [] - - self.on('free', function onFree(socket, host, port) { - for (var i = 0, len = self.requests.length; i < len; ++i) { - var pending = self.requests[i] - if (pending.host === host && pending.port === port) { - // Detect the request to connect same origin server, - // reuse the connection. - self.requests.splice(i, 1) - pending.request.onSocket(socket) - return - } - } - socket.destroy() - self.removeSocket(socket) - }) -} -util.inherits(TunnelingAgent, events.EventEmitter) - -TunnelingAgent.prototype.addRequest = function addRequest(req, host, port) { - var self = this - - if (self.sockets.length >= this.maxSockets) { - // We are over limit so we'll add it to the queue. - self.requests.push({host: host, port: port, request: req}) - return - } - - // If we are under maxSockets create a new one. - self.createSocket({host: host, port: port, request: req}, function(socket) { - socket.on('free', onFree) - socket.on('close', onCloseOrRemove) - socket.on('agentRemove', onCloseOrRemove) - req.onSocket(socket) - - function onFree() { - self.emit('free', socket, host, port) - } - - function onCloseOrRemove(err) { - self.removeSocket() - socket.removeListener('free', onFree) - socket.removeListener('close', onCloseOrRemove) - socket.removeListener('agentRemove', onCloseOrRemove) - } - }) -} - -TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { - var self = this - var placeholder = {} - self.sockets.push(placeholder) - - var connectOptions = mergeOptions({}, self.proxyOptions, - { method: 'CONNECT' - , path: options.host + ':' + options.port - , agent: false - } - ) - if (connectOptions.proxyAuth) { - connectOptions.headers = connectOptions.headers || {} - connectOptions.headers['Proxy-Authorization'] = 'Basic ' + - new Buffer(connectOptions.proxyAuth).toString('base64') - } - - debug('making CONNECT request') - var connectReq = self.request(connectOptions) - connectReq.useChunkedEncodingByDefault = false // for v0.6 - connectReq.once('response', onResponse) // for v0.6 - connectReq.once('upgrade', onUpgrade) // for v0.6 - connectReq.once('connect', onConnect) // for v0.7 or later - connectReq.once('error', onError) - connectReq.end() - - function onResponse(res) { - // Very hacky. This is necessary to avoid http-parser leaks. - res.upgrade = true - } - - function onUpgrade(res, socket, head) { - // Hacky. - process.nextTick(function() { - onConnect(res, socket, head) - }) - } - - function onConnect(res, socket, head) { - connectReq.removeAllListeners() - socket.removeAllListeners() - - if (res.statusCode === 200) { - assert.equal(head.length, 0) - debug('tunneling connection has established') - self.sockets[self.sockets.indexOf(placeholder)] = socket - cb(socket) - } else { - debug('tunneling socket could not be established, statusCode=%d', res.statusCode) - var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode) - error.code = 'ECONNRESET' - options.request.emit('error', error) - self.removeSocket(placeholder) - } - } - - function onError(cause) { - connectReq.removeAllListeners() - - debug('tunneling socket could not be established, cause=%s\n', cause.message, cause.stack) - var error = new Error('tunneling socket could not be established, ' + 'cause=' + cause.message) - error.code = 'ECONNRESET' - options.request.emit('error', error) - self.removeSocket(placeholder) - } -} - -TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { - var pos = this.sockets.indexOf(socket) - if (pos === -1) return - - this.sockets.splice(pos, 1) - - var pending = this.requests.shift() - if (pending) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createSocket(pending, function(socket) { - pending.request.onSocket(socket) - }) - } -} - -function createSecureSocket(options, cb) { - var self = this - TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { - // 0 is dummy port for v0.6 - var secureSocket = tls.connect(0, mergeOptions({}, self.options, - { servername: options.host - , socket: socket - } - )) - cb(secureSocket) - }) -} - - -function mergeOptions(target) { - for (var i = 1, len = arguments.length; i < len; ++i) { - var overrides = arguments[i] - if (typeof overrides === 'object') { - var keys = Object.keys(overrides) - for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { - var k = keys[j] - if (overrides[k] !== undefined) { - target[k] = overrides[k] - } - } - } - } - return target -} - - -var debug -if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug = function() { - var args = Array.prototype.slice.call(arguments) - if (typeof args[0] === 'string') { - args[0] = 'TUNNEL: ' + args[0] - } else { - args.unshift('TUNNEL:') - } - console.error.apply(console, args) - } -} else { - debug = function() {} -} -exports.debug = debug // for test diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/package.json deleted file mode 100644 index acfa6e1c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "tunnel-agent", - "description": "HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.", - "version": "0.3.0", - "repository": { - "url": "https://github.com/mikeal/tunnel-agent" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "tunnel-agent\n============\n\nHTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/tunnel-agent/issues" - }, - "homepage": "https://github.com/mikeal/tunnel-agent", - "_id": "tunnel-agent@0.3.0", - "dist": { - "shasum": "ad681b68f5321ad2827c4cfb1b7d5df2cfe942ee" - }, - "_from": "tunnel-agent@~0.3.0", - "_resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/package.json deleted file mode 100755 index 57c99c02..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "request", - "description": "Simplified HTTP request client.", - "tags": [ - "http", - "simple", - "util", - "utility" - ], - "version": "2.31.0", - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com" - }, - "repository": { - "type": "git", - "url": "http://github.com/mikeal/request.git" - }, - "bugs": { - "url": "http://github.com/mikeal/request/issues" - }, - "engines": [ - "node >= 0.8.0" - ], - "main": "index.js", - "dependencies": { - "qs": "~0.6.0", - "json-stringify-safe": "~5.0.0", - "forever-agent": "~0.5.0", - "node-uuid": "~1.4.0", - "mime": "~1.2.9", - "tough-cookie": "~0.9.15", - "form-data": "~0.1.0", - "tunnel-agent": "~0.3.0", - "http-signature": "~0.10.0", - "oauth-sign": "~0.3.0", - "hawk": "~1.0.0", - "aws-sign2": "~0.5.0" - }, - "optionalDependencies": { - "tough-cookie": "~0.9.15", - "form-data": "~0.1.0", - "tunnel-agent": "~0.3.0", - "http-signature": "~0.10.0", - "oauth-sign": "~0.3.0", - "hawk": "~1.0.0", - "aws-sign2": "~0.5.0" - }, - "scripts": { - "test": "node tests/run.js" - }, - "readme": "# Request -- Simplified HTTP client\n\n[![NPM](https://nodei.co/npm/request.png)](https://nodei.co/npm/request/)\n\n## Super simple to use\n\nRequest is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default.\n\n```javascript\nvar request = require('request');\nrequest('http://www.google.com', function (error, response, body) {\n if (!error && response.statusCode == 200) {\n console.log(body) // Print the google web page.\n }\n})\n```\n\n## Streaming\n\nYou can stream any response to a file stream.\n\n```javascript\nrequest('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))\n```\n\nYou can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one).\n\n```javascript\nfs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json'))\n```\n\nRequest can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers.\n\n```javascript\nrequest.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))\n```\n\nNow let’s get fancy.\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n if (req.method === 'PUT') {\n req.pipe(request.put('http://mysite.com/doodle.png'))\n } else if (req.method === 'GET' || req.method === 'HEAD') {\n request.get('http://mysite.com/doodle.png').pipe(resp)\n }\n }\n})\n```\n\nYou can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don't really care about security, you can do:\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n var x = request('http://mysite.com/doodle.png')\n req.pipe(x)\n x.pipe(resp)\n }\n})\n```\n\nAnd since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :)\n\n```javascript\nreq.pipe(request('http://mysite.com/doodle.png')).pipe(resp)\n```\n\nAlso, none of this new functionality conflicts with requests previous features, it just expands them.\n\n```javascript\nvar r = request.defaults({'proxy':'http://localproxy.com'})\n\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n r.get('http://google.com/doodle.png').pipe(resp)\n }\n})\n```\n\nYou can still use intermediate proxies, the requests will still follow HTTP forwards, etc.\n\n## Forms\n\n`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API.\n\nURL-encoded forms are simple.\n\n```javascript\nrequest.post('http://service.com/upload', {form:{key:'value'}})\n// or\nrequest.post('http://service.com/upload').form({key:'value'})\n```\n\nFor `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). You don’t need to worry about piping the form object or setting the headers, `request` will handle that for you.\n\n```javascript\nvar r = request.post('http://service.com/upload')\nvar form = r.form()\nform.append('my_field', 'my_value')\nform.append('my_buffer', new Buffer([1, 2, 3]))\nform.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png'))\nform.append('remote_file', request('http://google.com/doodle.png'))\n```\n\n## HTTP Authentication\n\n```javascript\nrequest.get('http://some.server.com/').auth('username', 'password', false);\n// or\nrequest.get('http://some.server.com/', {\n 'auth': {\n 'user': 'username',\n 'pass': 'password',\n 'sendImmediately': false\n }\n});\n```\n\nIf passed as an option, `auth` should be a hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). The method form takes parameters `auth(username, password, sendImmediately)`.\n\n`sendImmediately` defaults to `true`, which causes a basic authentication header to be sent. If `sendImmediately` is `false`, then `request` will retry with a proper authentication header after receiving a `401` response from the server (which must contain a `WWW-Authenticate` header indicating the required authentication method).\n\nDigest authentication is supported, but it only works with `sendImmediately` set to `false`; otherwise `request` will send basic authentication on the initial request, which will probably cause the request to fail.\n\n## OAuth Signing\n\n```javascript\n// Twitter OAuth\nvar qs = require('querystring')\n , oauth =\n { callback: 'http://mysite.com/callback/'\n , consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n }\n , url = 'https://api.twitter.com/oauth/request_token'\n ;\nrequest.post({url:url, oauth:oauth}, function (e, r, body) {\n // Ideally, you would take the body in the response\n // and construct a URL that a user clicks on (like a sign in button).\n // The verifier is only available in the response after a user has\n // verified with twitter that they are authorizing your app.\n var access_token = qs.parse(body)\n , oauth =\n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: access_token.oauth_token\n , verifier: access_token.oauth_verifier\n }\n , url = 'https://api.twitter.com/oauth/access_token'\n ;\n request.post({url:url, oauth:oauth}, function (e, r, body) {\n var perm_token = qs.parse(body)\n , oauth =\n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: perm_token.oauth_token\n , token_secret: perm_token.oauth_token_secret\n }\n , url = 'https://api.twitter.com/1.1/users/show.json?'\n , params =\n { screen_name: perm_token.screen_name\n , user_id: perm_token.user_id\n }\n ;\n url += qs.stringify(params)\n request.get({url:url, oauth:oauth, json:true}, function (e, r, user) {\n console.log(user)\n })\n })\n})\n```\n\n### Custom HTTP Headers\n\nHTTP Headers, such as `User-Agent`, can be set in the `options` object.\nIn the example below, we call the github API to find out the number\nof stars and forks for the request repository. This requires a\ncustom `User-Agent` header as well as https.\n\n```javascript\nvar request = require('request');\n\nvar options = {\n\turl: 'https://api.github.com/repos/mikeal/request',\n\theaders: {\n\t\t'User-Agent': 'request'\n\t}\n};\n\nfunction callback(error, response, body) {\n\tif (!error && response.statusCode == 200) {\n\t\tvar info = JSON.parse(body);\n\t\tconsole.log(info.stargazers_count + \" Stars\");\n\t\tconsole.log(info.forks_count + \" Forks\");\n\t}\n}\n\nrequest(options, callback);\n```\n\n### request(options, callback)\n\nThe first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional.\n\n* `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()`\n* `qs` - object containing querystring values to be appended to the `uri`\n* `method` - http method (default: `\"GET\"`)\n* `headers` - http headers (default: `{}`)\n* `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer` or `String`.\n* `form` - when passed an object, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded; charset=utf-8` header. When passed no options, a `FormData` instance is returned (and is piped to request).\n* `auth` - A hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). See documentation above.\n* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON.\n* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below.\n* `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`)\n* `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`)\n* `maxRedirects` - the maximum number of redirects to follow (default: `10`)\n* `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`.\n* `pool` - A hash object containing the agents for these requests. If omitted, the request will use the global pool (which is set to node's default `maxSockets`)\n* `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool.\n* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request\n* `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`)\n* `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above.\n* `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example).\n* `strictSSL` - If `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option.\n* `jar` - If `true`, remember cookies for future use (or define your custom cookie jar; see examples section)\n* `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`. Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services)\n* `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options.\n* `localAddress` - Local interface to bind for network connections.\n\n\nThe callback argument gets 3 arguments: \n\n1. An `error` when applicable (usually from [`http.ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) object)\n2. An [`http.IncomingMessage`](http://nodejs.org/api/http.html#http_http_incomingmessage) object\n3. The third is the `response` body (`String` or `Buffer`, or JSON object if the `json` option is supplied)\n\n## Convenience methods\n\nThere are also shorthand methods for different HTTP METHODs and some other conveniences.\n\n### request.defaults(options)\n\nThis method returns a wrapper around the normal request API that defaults to whatever options you pass in to it.\n\n### request.put\n\nSame as `request()`, but defaults to `method: \"PUT\"`.\n\n```javascript\nrequest.put(url)\n```\n\n### request.patch\n\nSame as `request()`, but defaults to `method: \"PATCH\"`.\n\n```javascript\nrequest.patch(url)\n```\n\n### request.post\n\nSame as `request()`, but defaults to `method: \"POST\"`.\n\n```javascript\nrequest.post(url)\n```\n\n### request.head\n\nSame as request() but defaults to `method: \"HEAD\"`.\n\n```javascript\nrequest.head(url)\n```\n\n### request.del\n\nSame as `request()`, but defaults to `method: \"DELETE\"`.\n\n```javascript\nrequest.del(url)\n```\n\n### request.get\n\nSame as `request()` (for uniformity).\n\n```javascript\nrequest.get(url)\n```\n### request.cookie\n\nFunction that creates a new cookie.\n\n```javascript\nrequest.cookie('cookie_string_here')\n```\n### request.jar\n\nFunction that creates a new cookie jar.\n\n```javascript\nrequest.jar()\n```\n\n\n## Examples:\n\n```javascript\n var request = require('request')\n , rand = Math.floor(Math.random()*100000000).toString()\n ;\n request(\n { method: 'PUT'\n , uri: 'http://mikeal.iriscouch.com/testjs/' + rand\n , multipart:\n [ { 'content-type': 'application/json'\n , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}})\n }\n , { body: 'I am an attachment' }\n ]\n }\n , function (error, response, body) {\n if(response.statusCode == 201){\n console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand)\n } else {\n console.log('error: '+ response.statusCode)\n console.log(body)\n }\n }\n )\n```\n\nCookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`).\n\n```javascript\nvar request = request.defaults({jar: true})\nrequest('http://www.google.com', function () {\n request('http://images.google.com')\n})\n```\n\nTo use a custom cookie jar (instead `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`)\n\n```javascript\nvar j = request.jar()\nvar request = request.defaults({jar:j})\nrequest('http://www.google.com', function () {\n request('http://images.google.com')\n})\n```\nOR\n\nNote that `setCookie` requires at least three parameters, and the last is required to be a callback.\n\n```javascript\nvar j = request.jar()\nvar cookie = request.cookie('your_cookie_here')\nj.setCookie(cookie, uri, function (err, cookie){})\nrequest({url: 'http://www.google.com', jar: j}, function () {\n request('http://images.google.com')\n})\n```\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/mikeal/request", - "_id": "request@2.31.0", - "dist": { - "shasum": "4c8ac967c9a4b9410cb4ba1a61fdb644267eeeff" - }, - "_from": "request@~2.31.0", - "_resolved": "https://registry.npmjs.org/request/-/request-2.31.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/request.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/request.js deleted file mode 100644 index 3c03c47d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/request.js +++ /dev/null @@ -1,1260 +0,0 @@ -var optional = require('./lib/optional') - , http = require('http') - , https = optional('https') - , tls = optional('tls') - , url = require('url') - , util = require('util') - , stream = require('stream') - , qs = require('qs') - , querystring = require('querystring') - , crypto = require('crypto') - - , oauth = optional('oauth-sign') - , hawk = optional('hawk') - , aws = optional('aws-sign') - , httpSignature = optional('http-signature') - , uuid = require('node-uuid') - , mime = require('mime') - , tunnel = optional('tunnel-agent') - , _safeStringify = require('json-stringify-safe') - - , ForeverAgent = require('forever-agent') - , FormData = optional('form-data') - - , Cookie = optional('tough-cookie') - , CookieJar = Cookie && Cookie.CookieJar - , cookieJar = CookieJar && new CookieJar - - , copy = require('./lib/copy') - , debug = require('./lib/debug') - , getSafe = require('./lib/getSafe') - ; - -function safeStringify (obj) { - var ret - try { ret = JSON.stringify(obj) } - catch (e) { ret = _safeStringify(obj) } - return ret -} - -var globalPool = {} -var isUrl = /^https?:/i - - -// Hacky fix for pre-0.4.4 https -if (https && !https.Agent) { - https.Agent = function (options) { - http.Agent.call(this, options) - } - util.inherits(https.Agent, http.Agent) - https.Agent.prototype._getConnection = function (host, port, cb) { - var s = tls.connect(port, host, this.options, function () { - // do other checks here? - if (cb) cb() - }) - return s - } -} - -function isReadStream (rs) { - if (rs.readable && rs.path && rs.mode) { - return true - } -} - -function toBase64 (str) { - return (new Buffer(str || "", "ascii")).toString("base64") -} - -function md5 (str) { - return crypto.createHash('md5').update(str).digest('hex') -} - -function Request (options) { - stream.Stream.call(this) - this.readable = true - this.writable = true - - if (typeof options === 'string') { - options = {uri:options} - } - - var reserved = Object.keys(Request.prototype) - for (var i in options) { - if (reserved.indexOf(i) === -1) { - this[i] = options[i] - } else { - if (typeof options[i] === 'function') { - delete options[i] - } - } - } - - if (options.method) { - this.explicitMethod = true - } - - this.canTunnel = options.tunnel !== false && tunnel; - - this.init(options) -} -util.inherits(Request, stream.Stream) -Request.prototype.init = function (options) { - // init() contains all the code to setup the request object. - // the actual outgoing request is not started until start() is called - // this function is called from both the constructor and on redirect. - var self = this - if (!options) options = {} - - if (!self.method) self.method = options.method || 'GET' - self.localAddress = options.localAddress - - debug(options) - if (!self.pool && self.pool !== false) self.pool = globalPool - self.dests = self.dests || [] - self.__isRequestRequest = true - - // Protect against double callback - if (!self._callback && self.callback) { - self._callback = self.callback - self.callback = function () { - if (self._callbackCalled) return // Print a warning maybe? - self._callbackCalled = true - self._callback.apply(self, arguments) - } - self.on('error', self.callback.bind()) - self.on('complete', self.callback.bind(self, null)) - } - - if (self.url && !self.uri) { - // People use this property instead all the time so why not just support it. - self.uri = self.url - delete self.url - } - - if (!self.uri) { - // this will throw if unhandled but is handleable when in a redirect - return self.emit('error', new Error("options.uri is a required argument")) - } else { - if (typeof self.uri == "string") self.uri = url.parse(self.uri) - } - - if (self.strictSSL === false) { - self.rejectUnauthorized = false - } - - if (self.proxy) { - if (typeof self.proxy == 'string') self.proxy = url.parse(self.proxy) - - // do the HTTP CONNECT dance using koichik/node-tunnel - if (http.globalAgent && self.uri.protocol === "https:" && self.canTunnel) { - var tunnelFn = self.proxy.protocol === "http:" - ? tunnel.httpsOverHttp : tunnel.httpsOverHttps - - var tunnelOptions = { proxy: { host: self.proxy.hostname - , port: +self.proxy.port - , proxyAuth: self.proxy.auth - , headers: { Host: self.uri.hostname + ':' + - (self.uri.port || self.uri.protocol === 'https:' ? 443 : 80) }} - , rejectUnauthorized: self.rejectUnauthorized - , ca: this.ca } - - self.agent = tunnelFn(tunnelOptions) - self.tunnel = true - } - } - - if (!self.uri.pathname) {self.uri.pathname = '/'} - - if (!self.uri.host) { - // Invalid URI: it may generate lot of bad errors, like "TypeError: Cannot call method 'indexOf' of undefined" in CookieJar - // Detect and reject it as soon as possible - var faultyUri = url.format(self.uri) - var message = 'Invalid URI "' + faultyUri + '"' - if (Object.keys(options).length === 0) { - // No option ? This can be the sign of a redirect - // As this is a case where the user cannot do anything (they didn't call request directly with this URL) - // they should be warned that it can be caused by a redirection (can save some hair) - message += '. This can be caused by a crappy redirection.' - } - self.emit('error', new Error(message)) - return // This error was fatal - } - - self._redirectsFollowed = self._redirectsFollowed || 0 - self.maxRedirects = (self.maxRedirects !== undefined) ? self.maxRedirects : 10 - self.followRedirect = (self.followRedirect !== undefined) ? self.followRedirect : true - self.followAllRedirects = (self.followAllRedirects !== undefined) ? self.followAllRedirects : false - if (self.followRedirect || self.followAllRedirects) - self.redirects = self.redirects || [] - - self.headers = self.headers ? copy(self.headers) : {} - - self.setHost = false - if (!self.hasHeader('host')) { - self.setHeader('host', self.uri.hostname) - if (self.uri.port) { - if ( !(self.uri.port === 80 && self.uri.protocol === 'http:') && - !(self.uri.port === 443 && self.uri.protocol === 'https:') ) - self.setHeader('host', self.getHeader('host') + (':'+self.uri.port) ) - } - self.setHost = true - } - - self.jar(self._jar || options.jar) - - if (!self.uri.port) { - if (self.uri.protocol == 'http:') {self.uri.port = 80} - else if (self.uri.protocol == 'https:') {self.uri.port = 443} - } - - if (self.proxy && !self.tunnel) { - self.port = self.proxy.port - self.host = self.proxy.hostname - } else { - self.port = self.uri.port - self.host = self.uri.hostname - } - - self.clientErrorHandler = function (error) { - if (self._aborted) return - if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' - && self.agent.addRequestNoreuse) { - self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) } - self.start() - self.req.end() - return - } - if (self.timeout && self.timeoutTimer) { - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - } - self.emit('error', error) - } - - self._parserErrorHandler = function (error) { - if (this.res) { - if (this.res.request) { - this.res.request.emit('error', error) - } else { - this.res.emit('error', error) - } - } else { - this._httpMessage.emit('error', error) - } - } - - if (options.form) { - self.form(options.form) - } - - if (options.qs) self.qs(options.qs) - - if (self.uri.path) { - self.path = self.uri.path - } else { - self.path = self.uri.pathname + (self.uri.search || "") - } - - if (self.path.length === 0) self.path = '/' - - - // Auth must happen last in case signing is dependent on other headers - if (options.oauth) { - self.oauth(options.oauth) - } - - if (options.aws) { - self.aws(options.aws) - } - - if (options.hawk) { - self.hawk(options.hawk) - } - - if (options.httpSignature) { - self.httpSignature(options.httpSignature) - } - - if (options.auth) { - if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) options.auth.user = options.auth.username - if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) options.auth.pass = options.auth.password - - self.auth( - options.auth.user, - options.auth.pass, - options.auth.sendImmediately - ) - } - - if (self.uri.auth && !self.hasHeader('authorization')) { - var authPieces = self.uri.auth.split(':').map(function(item){ return querystring.unescape(item) }) - self.auth(authPieces[0], authPieces.slice(1).join(':'), true) - } - if (self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization') && !self.tunnel) { - self.setHeader('proxy-authorization', "Basic " + toBase64(self.proxy.auth.split(':').map(function(item){ return querystring.unescape(item)}).join(':'))) - } - - - if (self.proxy && !self.tunnel) self.path = (self.uri.protocol + '//' + self.uri.host + self.path) - - if (options.json) { - self.json(options.json) - } else if (options.multipart) { - self.boundary = uuid() - self.multipart(options.multipart) - } - - if (self.body) { - var length = 0 - if (!Buffer.isBuffer(self.body)) { - if (Array.isArray(self.body)) { - for (var i = 0; i < self.body.length; i++) { - length += self.body[i].length - } - } else { - self.body = new Buffer(self.body) - length = self.body.length - } - } else { - length = self.body.length - } - if (length) { - if (!self.hasHeader('content-length')) self.setHeader('content-length', length) - } else { - throw new Error('Argument error, options.body.') - } - } - - var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol - , defaultModules = {'http:':http, 'https:':https} - , httpModules = self.httpModules || {} - ; - self.httpModule = httpModules[protocol] || defaultModules[protocol] - - if (!self.httpModule) return this.emit('error', new Error("Invalid protocol")) - - if (options.ca) self.ca = options.ca - - if (!self.agent) { - if (options.agentOptions) self.agentOptions = options.agentOptions - - if (options.agentClass) { - self.agentClass = options.agentClass - } else if (options.forever) { - self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL - } else { - self.agentClass = self.httpModule.Agent - } - } - - if (self.pool === false) { - self.agent = false - } else { - self.agent = self.agent || self.getAgent() - if (self.maxSockets) { - // Don't use our pooling if node has the refactored client - self.agent.maxSockets = self.maxSockets - } - if (self.pool.maxSockets) { - // Don't use our pooling if node has the refactored client - self.agent.maxSockets = self.pool.maxSockets - } - } - - self.on('pipe', function (src) { - if (self.ntick && self._started) throw new Error("You cannot pipe to this stream after the outbound request has started.") - self.src = src - if (isReadStream(src)) { - if (!self.hasHeader('content-type')) self.setHeader('content-type', mime.lookup(src.path)) - } else { - if (src.headers) { - for (var i in src.headers) { - if (!self.hasHeader(i)) { - self.setHeader(i, src.headers[i]) - } - } - } - if (self._json && !self.hasHeader('content-type')) - self.setHeader('content-type', 'application/json') - if (src.method && !self.explicitMethod) { - self.method = src.method - } - } - - // self.on('pipe', function () { - // console.error("You have already piped to this stream. Pipeing twice is likely to break the request.") - // }) - }) - - process.nextTick(function () { - if (self._aborted) return - - if (self._form) { - self.setHeaders(self._form.getHeaders()) - self._form.pipe(self) - } - if (self.body) { - if (Array.isArray(self.body)) { - self.body.forEach(function (part) { - self.write(part) - }) - } else { - self.write(self.body) - } - self.end() - } else if (self.requestBodyStream) { - console.warn("options.requestBodyStream is deprecated, please pass the request object to stream.pipe.") - self.requestBodyStream.pipe(self) - } else if (!self.src) { - if (self.method !== 'GET' && typeof self.method !== 'undefined') { - self.setHeader('content-length', 0) - } - self.end() - } - self.ntick = true - }) -} - -// Must call this when following a redirect from https to http or vice versa -// Attempts to keep everything as identical as possible, but update the -// httpModule, Tunneling agent, and/or Forever Agent in use. -Request.prototype._updateProtocol = function () { - var self = this - var protocol = self.uri.protocol - - if (protocol === 'https:') { - // previously was doing http, now doing https - // if it's https, then we might need to tunnel now. - if (self.proxy && self.canTunnel) { - self.tunnel = true - var tunnelFn = self.proxy.protocol === 'http:' - ? tunnel.httpsOverHttp : tunnel.httpsOverHttps - var tunnelOptions = { proxy: { host: self.proxy.hostname - , port: +self.proxy.port - , proxyAuth: self.proxy.auth } - , rejectUnauthorized: self.rejectUnauthorized - , ca: self.ca } - self.agent = tunnelFn(tunnelOptions) - return - } - - self.httpModule = https - switch (self.agentClass) { - case ForeverAgent: - self.agentClass = ForeverAgent.SSL - break - case http.Agent: - self.agentClass = https.Agent - break - default: - // nothing we can do. Just hope for the best. - return - } - - // if there's an agent, we need to get a new one. - if (self.agent) self.agent = self.getAgent() - - } else { - // previously was doing https, now doing http - // stop any tunneling. - if (self.tunnel) self.tunnel = false - self.httpModule = http - switch (self.agentClass) { - case ForeverAgent.SSL: - self.agentClass = ForeverAgent - break - case https.Agent: - self.agentClass = http.Agent - break - default: - // nothing we can do. just hope for the best - return - } - - // if there's an agent, then get a new one. - if (self.agent) { - self.agent = null - self.agent = self.getAgent() - } - } -} - -Request.prototype.getAgent = function () { - var Agent = this.agentClass - var options = {} - if (this.agentOptions) { - for (var i in this.agentOptions) { - options[i] = this.agentOptions[i] - } - } - if (this.ca) options.ca = this.ca - if (this.ciphers) options.ciphers = this.ciphers - if (this.secureProtocol) options.secureProtocol = this.secureProtocol - if (typeof this.rejectUnauthorized !== 'undefined') options.rejectUnauthorized = this.rejectUnauthorized - - if (this.cert && this.key) { - options.key = this.key - options.cert = this.cert - } - - var poolKey = '' - - // different types of agents are in different pools - if (Agent !== this.httpModule.Agent) { - poolKey += Agent.name - } - - if (!this.httpModule.globalAgent) { - // node 0.4.x - options.host = this.host - options.port = this.port - if (poolKey) poolKey += ':' - poolKey += this.host + ':' + this.port - } - - // ca option is only relevant if proxy or destination are https - var proxy = this.proxy - if (typeof proxy === 'string') proxy = url.parse(proxy) - var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:' - if (isHttps) { - if (options.ca) { - if (poolKey) poolKey += ':' - poolKey += options.ca - } - - if (typeof options.rejectUnauthorized !== 'undefined') { - if (poolKey) poolKey += ':' - poolKey += options.rejectUnauthorized - } - - if (options.cert) - poolKey += options.cert.toString('ascii') + options.key.toString('ascii') - - if (options.ciphers) { - if (poolKey) poolKey += ':' - poolKey += options.ciphers - } - - if (options.secureProtocol) { - if (poolKey) poolKey += ':' - poolKey += options.secureProtocol - } - } - - if (this.pool === globalPool && !poolKey && Object.keys(options).length === 0 && this.httpModule.globalAgent) { - // not doing anything special. Use the globalAgent - return this.httpModule.globalAgent - } - - // we're using a stored agent. Make sure it's protocol-specific - poolKey = this.uri.protocol + poolKey - - // already generated an agent for this setting - if (this.pool[poolKey]) return this.pool[poolKey] - - return this.pool[poolKey] = new Agent(options) -} - -Request.prototype.start = function () { - // start() is called once we are ready to send the outgoing HTTP request. - // this is usually called on the first write(), end() or on nextTick() - var self = this - - if (self._aborted) return - - self._started = true - self.method = self.method || 'GET' - self.href = self.uri.href - - if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) { - self.setHeader('content-length', self.src.stat.size) - } - if (self._aws) { - self.aws(self._aws, true) - } - - // We have a method named auth, which is completely different from the http.request - // auth option. If we don't remove it, we're gonna have a bad time. - var reqOptions = copy(self) - delete reqOptions.auth - - debug('make request', self.uri.href) - self.req = self.httpModule.request(reqOptions, self.onResponse.bind(self)) - - if (self.timeout && !self.timeoutTimer) { - self.timeoutTimer = setTimeout(function () { - self.req.abort() - var e = new Error("ETIMEDOUT") - e.code = "ETIMEDOUT" - self.emit("error", e) - }, self.timeout) - - // Set additional timeout on socket - in case if remote - // server freeze after sending headers - if (self.req.setTimeout) { // only works on node 0.6+ - self.req.setTimeout(self.timeout, function () { - if (self.req) { - self.req.abort() - var e = new Error("ESOCKETTIMEDOUT") - e.code = "ESOCKETTIMEDOUT" - self.emit("error", e) - } - }) - } - } - - self.req.on('error', self.clientErrorHandler) - self.req.on('drain', function() { - self.emit('drain') - }) - self.on('end', function() { - if ( self.req.connection ) self.req.connection.removeListener('error', self._parserErrorHandler) - }) - self.emit('request', self.req) -} -Request.prototype.onResponse = function (response) { - var self = this - debug('onResponse', self.uri.href, response.statusCode, response.headers) - response.on('end', function() { - debug('response end', self.uri.href, response.statusCode, response.headers) - }); - - if (response.connection.listeners('error').indexOf(self._parserErrorHandler) === -1) { - response.connection.once('error', self._parserErrorHandler) - } - if (self._aborted) { - debug('aborted', self.uri.href) - response.resume() - return - } - if (self._paused) response.pause() - else response.resume() - - self.response = response - response.request = self - response.toJSON = toJSON - - // XXX This is different on 0.10, because SSL is strict by default - if (self.httpModule === https && - self.strictSSL && - !response.client.authorized) { - debug('strict ssl error', self.uri.href) - var sslErr = response.client.authorizationError - self.emit('error', new Error('SSL Error: '+ sslErr)) - return - } - - if (self.setHost && self.hasHeader('host')) delete self.headers[self.hasHeader('host')] - if (self.timeout && self.timeoutTimer) { - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - } - - var addCookie = function (cookie) { - if (self._jar){ - var targetCookieJar = self._jar.setCookie?self._jar:cookieJar; - - //set the cookie if it's domain in the href's domain. - targetCookieJar.setCookie(cookie, self.uri.href, function(err){ - if (err){ - console.warn('set cookie failed,'+ err) - } - }) - } - - } - - if (hasHeader('set-cookie', response.headers) && (!self._disableCookies)) { - var headerName = hasHeader('set-cookie', response.headers) - if (Array.isArray(response.headers[headerName])) response.headers[headerName].forEach(addCookie) - else addCookie(response.headers[headerName]) - } - - var redirectTo = null - if (response.statusCode >= 300 && response.statusCode < 400 && hasHeader('location', response.headers)) { - var location = response.headers[hasHeader('location', response.headers)] - debug('redirect', location) - - if (self.followAllRedirects) { - redirectTo = location - } else if (self.followRedirect) { - switch (self.method) { - case 'PATCH': - case 'PUT': - case 'POST': - case 'DELETE': - // Do not follow redirects - break - default: - redirectTo = location - break - } - } - } else if (response.statusCode == 401 && self._hasAuth && !self._sentAuth) { - var authHeader = response.headers[hasHeader('www-authenticate', response.headers)] - var authVerb = authHeader && authHeader.split(' ')[0] - debug('reauth', authVerb) - - switch (authVerb) { - case 'Basic': - self.auth(self._user, self._pass, true) - redirectTo = self.uri - break - - case 'Digest': - // TODO: More complete implementation of RFC 2617. - // - check challenge.algorithm - // - support algorithm="MD5-sess" - // - handle challenge.domain - // - support qop="auth-int" only - // - handle Authentication-Info (not necessarily?) - // - check challenge.stale (not necessarily?) - // - increase nc (not necessarily?) - // For reference: - // http://tools.ietf.org/html/rfc2617#section-3 - // https://github.com/bagder/curl/blob/master/lib/http_digest.c - - var challenge = {} - var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi - for (;;) { - var match = re.exec(authHeader) - if (!match) break - challenge[match[1]] = match[2] || match[3]; - } - - var ha1 = md5(self._user + ':' + challenge.realm + ':' + self._pass) - var ha2 = md5(self.method + ':' + self.uri.path) - var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth' - var nc = qop && '00000001' - var cnonce = qop && uuid().replace(/-/g, '') - var digestResponse = qop ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2) : md5(ha1 + ':' + challenge.nonce + ':' + ha2) - var authValues = { - username: self._user, - realm: challenge.realm, - nonce: challenge.nonce, - uri: self.uri.path, - qop: qop, - response: digestResponse, - nc: nc, - cnonce: cnonce, - algorithm: challenge.algorithm, - opaque: challenge.opaque - } - - authHeader = [] - for (var k in authValues) { - if (!authValues[k]) { - //ignore - } else if (k === 'qop' || k === 'nc' || k === 'algorithm') { - authHeader.push(k + '=' + authValues[k]) - } else { - authHeader.push(k + '="' + authValues[k] + '"') - } - } - authHeader = 'Digest ' + authHeader.join(', ') - self.setHeader('authorization', authHeader) - self._sentAuth = true - - redirectTo = self.uri - break - } - } - - if (redirectTo) { - debug('redirect to', redirectTo) - - // ignore any potential response body. it cannot possibly be useful - // to us at this point. - if (self._paused) response.resume() - - if (self._redirectsFollowed >= self.maxRedirects) { - self.emit('error', new Error("Exceeded maxRedirects. Probably stuck in a redirect loop "+self.uri.href)) - return - } - self._redirectsFollowed += 1 - - if (!isUrl.test(redirectTo)) { - redirectTo = url.resolve(self.uri.href, redirectTo) - } - - var uriPrev = self.uri - self.uri = url.parse(redirectTo) - - // handle the case where we change protocol from https to http or vice versa - if (self.uri.protocol !== uriPrev.protocol) { - self._updateProtocol() - } - - self.redirects.push( - { statusCode : response.statusCode - , redirectUri: redirectTo - } - ) - if (self.followAllRedirects && response.statusCode != 401) self.method = 'GET' - // self.method = 'GET' // Force all redirects to use GET || commented out fixes #215 - delete self.src - delete self.req - delete self.agent - delete self._started - if (response.statusCode != 401) { - // Remove parameters from the previous response, unless this is the second request - // for a server that requires digest authentication. - delete self.body - delete self._form - if (self.headers) { - if (self.hasHeader('host')) delete self.headers[self.hasHeader('host')] - if (self.hasHeader('content-type')) delete self.headers[self.hasHeader('content-type')] - if (self.hasHeader('content-length')) delete self.headers[self.hasHeader('content-length')] - } - } - - self.emit('redirect'); - - self.init() - return // Ignore the rest of the response - } else { - self._redirectsFollowed = self._redirectsFollowed || 0 - // Be a good stream and emit end when the response is finished. - // Hack to emit end on close because of a core bug that never fires end - response.on('close', function () { - if (!self._ended) self.response.emit('end') - }) - - if (self.encoding) { - if (self.dests.length !== 0) { - console.error("Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.") - } else { - response.setEncoding(self.encoding) - } - } - - self.emit('response', response) - - self.dests.forEach(function (dest) { - self.pipeDest(dest) - }) - - response.on("data", function (chunk) { - self._destdata = true - self.emit("data", chunk) - }) - response.on("end", function (chunk) { - self._ended = true - self.emit("end", chunk) - }) - response.on("close", function () {self.emit("close")}) - - if (self.callback) { - var buffer = [] - var bodyLen = 0 - self.on("data", function (chunk) { - buffer.push(chunk) - bodyLen += chunk.length - }) - self.on("end", function () { - debug('end event', self.uri.href) - if (self._aborted) { - debug('aborted', self.uri.href) - return - } - - if (buffer.length && Buffer.isBuffer(buffer[0])) { - debug('has body', self.uri.href, bodyLen) - var body = new Buffer(bodyLen) - var i = 0 - buffer.forEach(function (chunk) { - chunk.copy(body, i, 0, chunk.length) - i += chunk.length - }) - if (self.encoding === null) { - response.body = body - } else { - response.body = body.toString(self.encoding) - } - } else if (buffer.length) { - // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation. - // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse(). - if (self.encoding === 'utf8' && buffer[0].length > 0 && buffer[0][0] === "\uFEFF") { - buffer[0] = buffer[0].substring(1) - } - response.body = buffer.join('') - } - - if (self._json) { - try { - response.body = JSON.parse(response.body) - } catch (e) {} - } - debug('emitting complete', self.uri.href) - if(response.body == undefined && !self._json) { - response.body = ""; - } - self.emit('complete', response, response.body) - }) - } - //if no callback - else{ - self.on("end", function () { - if (self._aborted) { - debug('aborted', self.uri.href) - return - } - self.emit('complete', response); - }); - } - } - debug('finish init function', self.uri.href) -} - -Request.prototype.abort = function () { - this._aborted = true - - if (this.req) { - this.req.abort() - } - else if (this.response) { - this.response.abort() - } - - this.emit("abort") -} - -Request.prototype.pipeDest = function (dest) { - var response = this.response - // Called after the response is received - if (dest.headers && !dest.headersSent) { - if (hasHeader('content-type', response.headers)) { - var ctname = hasHeader('content-type', response.headers) - if (dest.setHeader) dest.setHeader(ctname, response.headers[ctname]) - else dest.headers[ctname] = response.headers[ctname] - } - - if (hasHeader('content-length', response.headers)) { - var clname = hasHeader('content-length', response.headers) - if (dest.setHeader) dest.setHeader(clname, response.headers[clname]) - else dest.headers[clname] = response.headers[clname] - } - } - if (dest.setHeader && !dest.headersSent) { - for (var i in response.headers) { - dest.setHeader(i, response.headers[i]) - } - dest.statusCode = response.statusCode - } - if (this.pipefilter) this.pipefilter(response, dest) -} - -// Composable API -Request.prototype.setHeader = function (name, value, clobber) { - if (clobber === undefined) clobber = true - if (clobber || !this.hasHeader(name)) this.headers[name] = value - else this.headers[this.hasHeader(name)] += ',' + value - return this -} -Request.prototype.setHeaders = function (headers) { - for (var i in headers) {this.setHeader(i, headers[i])} - return this -} -Request.prototype.hasHeader = function (header, headers) { - var headers = Object.keys(headers || this.headers) - , lheaders = headers.map(function (h) {return h.toLowerCase()}) - ; - header = header.toLowerCase() - for (var i=0;i<lheaders.length;i++) { - if (lheaders[i] === header) return headers[i] - } - return false -} - -var hasHeader = Request.prototype.hasHeader - -Request.prototype.qs = function (q, clobber) { - var base - if (!clobber && this.uri.query) base = qs.parse(this.uri.query) - else base = {} - - for (var i in q) { - base[i] = q[i] - } - - if (qs.stringify(base) === ''){ - return this - } - - this.uri = url.parse(this.uri.href.split('?')[0] + '?' + qs.stringify(base)) - this.url = this.uri - this.path = this.uri.path - - return this -} -Request.prototype.form = function (form) { - if (form) { - this.setHeader('content-type', 'application/x-www-form-urlencoded; charset=utf-8') - this.body = qs.stringify(form).toString('utf8') - return this - } - // create form-data object - this._form = new FormData() - return this._form -} -Request.prototype.multipart = function (multipart) { - var self = this - self.body = [] - - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) - } else { - var headerName = self.hasHeader('content-type'); - self.setHeader(headerName, self.headers[headerName].split(';')[0] + '; boundary=' + self.boundary) - } - - if (!multipart.forEach) throw new Error('Argument error, options.multipart.') - - if (self.preambleCRLF) { - self.body.push(new Buffer('\r\n')) - } - - multipart.forEach(function (part) { - var body = part.body - if(body == null) throw Error('Body attribute missing in multipart.') - delete part.body - var preamble = '--' + self.boundary + '\r\n' - Object.keys(part).forEach(function (key) { - preamble += key + ': ' + part[key] + '\r\n' - }) - preamble += '\r\n' - self.body.push(new Buffer(preamble)) - self.body.push(new Buffer(body)) - self.body.push(new Buffer('\r\n')) - }) - self.body.push(new Buffer('--' + self.boundary + '--')) - return self -} -Request.prototype.json = function (val) { - var self = this - - if (!self.hasHeader('accept')) self.setHeader('accept', 'application/json') - - this._json = true - if (typeof val === 'boolean') { - if (typeof this.body === 'object') { - this.body = safeStringify(this.body) - self.setHeader('content-type', 'application/json') - } - } else { - this.body = safeStringify(val) - self.setHeader('content-type', 'application/json') - } - return this -} -Request.prototype.getHeader = function (name, headers) { - var result, re, match - if (!headers) headers = this.headers - Object.keys(headers).forEach(function (key) { - re = new RegExp(name, 'i') - match = key.match(re) - if (match) result = headers[key] - }) - return result -} -var getHeader = Request.prototype.getHeader - -Request.prototype.auth = function (user, pass, sendImmediately) { - if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) { - throw new Error('auth() received invalid user or password') - } - this._user = user - this._pass = pass - this._hasAuth = true - var header = typeof pass !== 'undefined' ? user + ':' + pass : user - if (sendImmediately || typeof sendImmediately == 'undefined') { - this.setHeader('authorization', 'Basic ' + toBase64(header)) - this._sentAuth = true - } - return this -} -Request.prototype.aws = function (opts, now) { - if (!now) { - this._aws = opts - return this - } - var date = new Date() - this.setHeader('date', date.toUTCString()) - var auth = - { key: opts.key - , secret: opts.secret - , verb: this.method.toUpperCase() - , date: date - , contentType: this.getHeader('content-type') || '' - , md5: this.getHeader('content-md5') || '' - , amazonHeaders: aws.canonicalizeHeaders(this.headers) - } - if (opts.bucket && this.path) { - auth.resource = '/' + opts.bucket + this.path - } else if (opts.bucket && !this.path) { - auth.resource = '/' + opts.bucket - } else if (!opts.bucket && this.path) { - auth.resource = this.path - } else if (!opts.bucket && !this.path) { - auth.resource = '/' - } - auth.resource = aws.canonicalizeResource(auth.resource) - this.setHeader('authorization', aws.authorization(auth)) - - return this -} -Request.prototype.httpSignature = function (opts) { - var req = this - httpSignature.signRequest({ - getHeader: function(header) { - return getHeader(header, req.headers) - }, - setHeader: function(header, value) { - req.setHeader(header, value) - }, - method: this.method, - path: this.path - }, opts) - debug('httpSignature authorization', this.getHeader('authorization')) - - return this -} - -Request.prototype.hawk = function (opts) { - this.setHeader('Authorization', hawk.client.header(this.uri, this.method, opts).field) -} - -Request.prototype.oauth = function (_oauth) { - var form - if (this.hasHeader('content-type') && - this.getHeader('content-type').slice(0, 'application/x-www-form-urlencoded'.length) === - 'application/x-www-form-urlencoded' - ) { - form = qs.parse(this.body) - } - if (this.uri.query) { - form = qs.parse(this.uri.query) - } - if (!form) form = {} - var oa = {} - for (var i in form) oa[i] = form[i] - for (var i in _oauth) oa['oauth_'+i] = _oauth[i] - if (!oa.oauth_version) oa.oauth_version = '1.0' - if (!oa.oauth_timestamp) oa.oauth_timestamp = Math.floor( Date.now() / 1000 ).toString() - if (!oa.oauth_nonce) oa.oauth_nonce = uuid().replace(/-/g, '') - - oa.oauth_signature_method = 'HMAC-SHA1' - - var consumer_secret = oa.oauth_consumer_secret - delete oa.oauth_consumer_secret - var token_secret = oa.oauth_token_secret - delete oa.oauth_token_secret - var timestamp = oa.oauth_timestamp - - var baseurl = this.uri.protocol + '//' + this.uri.host + this.uri.pathname - var signature = oauth.hmacsign(this.method, baseurl, oa, consumer_secret, token_secret) - - // oa.oauth_signature = signature - for (var i in form) { - if ( i.slice(0, 'oauth_') in _oauth) { - // skip - } else { - delete oa['oauth_'+i] - if (i !== 'x_auth_mode') delete oa[i] - } - } - oa.oauth_timestamp = timestamp - var authHeader = 'OAuth '+Object.keys(oa).sort().map(function (i) {return i+'="'+oauth.rfc3986(oa[i])+'"'}).join(',') - authHeader += ',oauth_signature="' + oauth.rfc3986(signature) + '"' - this.setHeader('Authorization', authHeader) - return this -} -Request.prototype.jar = function (jar) { - var cookies - - if (this._redirectsFollowed === 0) { - this.originalCookieHeader = this.getHeader('cookie') - } - - if (!jar) { - // disable cookies - cookies = false - this._disableCookies = true - } else { - var targetCookieJar = (jar && jar.getCookieString)?jar:cookieJar; - var urihref = this.uri.href - - //fetch cookie in the Specified host - targetCookieJar.getCookieString(urihref, function(err, hrefCookie){ - if (err){ - console.warn('get cookieString failed,' +err) - } else { - cookies = hrefCookie - } - }) - - } - - //if need cookie and cookie is not empty - if (cookies && cookies.length) { - if (this.originalCookieHeader) { - // Don't overwrite existing Cookie header - this.setHeader('cookie', this.originalCookieHeader + '; ' + cookies) - } else { - this.setHeader('cookie', cookies) - } - } - this._jar = jar - return this -} - - -// Stream API -Request.prototype.pipe = function (dest, opts) { - if (this.response) { - if (this._destdata) { - throw new Error("You cannot pipe after data has been emitted from the response.") - } else if (this._ended) { - throw new Error("You cannot pipe after the response has been ended.") - } else { - stream.Stream.prototype.pipe.call(this, dest, opts) - this.pipeDest(dest) - return dest - } - } else { - this.dests.push(dest) - stream.Stream.prototype.pipe.call(this, dest, opts) - return dest - } -} -Request.prototype.write = function () { - if (!this._started) this.start() - return this.req.write.apply(this.req, arguments) -} -Request.prototype.end = function (chunk) { - if (chunk) this.write(chunk) - if (!this._started) this.start() - this.req.end() -} -Request.prototype.pause = function () { - if (!this.response) this._paused = true - else this.response.pause.apply(this.response, arguments) -} -Request.prototype.resume = function () { - if (!this.response) this._paused = false - else this.response.resume.apply(this.response, arguments) -} -Request.prototype.destroy = function () { - if (!this._ended) this.end() - else if (this.response) this.response.destroy() -} - -function toJSON () { - return getSafe(this, '__' + (((1+Math.random())*0x10000)|0).toString(16)) -} - -Request.prototype.toJSON = toJSON - - -module.exports = Request diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.jshintrc b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.jshintrc deleted file mode 100644 index c8ef3ca4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.travis.yml deleted file mode 100644 index 12b1a310..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/LICENSE deleted file mode 100644 index f6a0029d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/README.md deleted file mode 100644 index c9388b38..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/README.md +++ /dev/null @@ -1,131 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/.npmignore deleted file mode 100644 index 38344f87..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -build/ -test/ -examples/ -fs.js -zlib.js \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/README.md deleted file mode 100644 index be976683..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/README.md +++ /dev/null @@ -1,768 +0,0 @@ -# readable-stream - -A new class of streams for Node.js - -This module provides the new Stream base classes introduced in Node -v0.10, for use in Node v0.8. You can use it to have programs that -have to work with node v0.8, while being forward-compatible for v0.10 -and beyond. When you drop support for v0.8, you can remove this -module, and only use the native streams. - -This is almost exactly the same codebase as appears in Node v0.10. -However: - -1. The exported object is actually the Readable class. Decorating the - native `stream` module would be global pollution. -2. In v0.10, you can safely use `base64` as an argument to - `setEncoding` in Readable streams. However, in v0.8, the - StringDecoder class has no `end()` method, which is problematic for - Base64. So, don't use that, because it'll break and be weird. - -Other than that, the API is the same as `require('stream')` in v0.10, -so the API docs are reproduced below. - ----------- - - Stability: 2 - Unstable - -A stream is an abstract interface implemented by various objects in -Node. For example a request to an HTTP server is a stream, as is -stdout. Streams are readable, writable, or both. All streams are -instances of [EventEmitter][] - -You can load the Stream base classes by doing `require('stream')`. -There are base classes provided for Readable streams, Writable -streams, Duplex streams, and Transform streams. - -## Compatibility - -In earlier versions of Node, the Readable stream interface was -simpler, but also less powerful and less useful. - -* Rather than waiting for you to call the `read()` method, `'data'` - events would start emitting immediately. If you needed to do some - I/O to decide how to handle data, then you had to store the chunks - in some kind of buffer so that they would not be lost. -* The `pause()` method was advisory, rather than guaranteed. This - meant that you still had to be prepared to receive `'data'` events - even when the stream was in a paused state. - -In Node v0.10, the Readable class described below was added. For -backwards compatibility with older Node programs, Readable streams -switch into "old mode" when a `'data'` event handler is added, or when -the `pause()` or `resume()` methods are called. The effect is that, -even if you are not using the new `read()` method and `'readable'` -event, you no longer have to worry about losing `'data'` chunks. - -Most programs will continue to function normally. However, this -introduces an edge case in the following conditions: - -* No `'data'` event handler is added. -* The `pause()` and `resume()` methods are never called. - -For example, consider the following code: - -```javascript -// WARNING! BROKEN! -net.createServer(function(socket) { - - // we add an 'end' method, but never consume the data - socket.on('end', function() { - // It will never get here. - socket.end('I got your message (but didnt read it)\n'); - }); - -}).listen(1337); -``` - -In versions of node prior to v0.10, the incoming message data would be -simply discarded. However, in Node v0.10 and beyond, the socket will -remain paused forever. - -The workaround in this situation is to call the `resume()` method to -trigger "old mode" behavior: - -```javascript -// Workaround -net.createServer(function(socket) { - - socket.on('end', function() { - socket.end('I got your message (but didnt read it)\n'); - }); - - // start the flow of data, discarding it. - socket.resume(); - -}).listen(1337); -``` - -In addition to new Readable streams switching into old-mode, pre-v0.10 -style streams can be wrapped in a Readable class using the `wrap()` -method. - -## Class: stream.Readable - -<!--type=class--> - -A `Readable Stream` has the following methods, members, and events. - -Note that `stream.Readable` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -method. (See below.) - -### new stream.Readable([options]) - -* `options` {Object} - * `highWaterMark` {Number} The maximum number of bytes to store in - the internal buffer before ceasing to read from the underlying - resource. Default=16kb - * `encoding` {String} If specified, then buffers will be decoded to - strings using the specified encoding. Default=null - * `objectMode` {Boolean} Whether this stream should behave - as a stream of objects. Meaning that stream.read(n) returns - a single value instead of a Buffer of size n - -In classes that extend the Readable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### readable.\_read(size) - -* `size` {Number} Number of bytes to read asynchronously - -Note: **This function should NOT be called directly.** It should be -implemented by child classes, and called by the internal Readable -class methods only. - -All Readable stream implementations must provide a `_read` method -to fetch data from the underlying resource. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -When data is available, put it into the read queue by calling -`readable.push(chunk)`. If `push` returns false, then you should stop -reading. When `_read` is called again, you should start pushing more -data. - -The `size` argument is advisory. Implementations where a "read" is a -single call that returns data can use this to know how much data to -fetch. Implementations where that is not relevant, such as TCP or -TLS, may ignore this argument, and simply provide data whenever it -becomes available. There is no need, for example to "wait" until -`size` bytes are available before calling `stream.push(chunk)`. - -### readable.push(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to push into the read queue -* return {Boolean} Whether or not more pushes should be performed - -Note: **This function should be called by Readable implementors, NOT -by consumers of Readable subclasses.** The `_read()` function will not -be called again until at least one `push(chunk)` call is made. If no -data is available, then you MAY call `push('')` (an empty string) to -allow a future `_read` call, without adding any data to the queue. - -The `Readable` class works by putting data into a read queue to be -pulled out later by calling the `read()` method when the `'readable'` -event fires. - -The `push()` method will explicitly insert some data into the read -queue. If it is called with `null` then it will signal the end of the -data. - -In some cases, you may be wrapping a lower-level source which has some -sort of pause/resume mechanism, and a data callback. In those cases, -you could wrap the low-level source object by doing something like -this: - -```javascript -// source is an object with readStop() and readStart() methods, -// and an `ondata` member that gets called when it has data, and -// an `onend` member that gets called when the data is over. - -var stream = new Readable(); - -source.ondata = function(chunk) { - // if push() returns false, then we need to stop reading from source - if (!stream.push(chunk)) - source.readStop(); -}; - -source.onend = function() { - stream.push(null); -}; - -// _read will be called when the stream wants to pull more data in -// the advisory size argument is ignored in this case. -stream._read = function(n) { - source.readStart(); -}; -``` - -### readable.unshift(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue -* return {Boolean} Whether or not more pushes should be performed - -This is the corollary of `readable.push(chunk)`. Rather than putting -the data at the *end* of the read queue, it puts it at the *front* of -the read queue. - -This is useful in certain use-cases where a stream is being consumed -by a parser, which needs to "un-consume" some data that it has -optimistically pulled out of the source. - -```javascript -// A parser for a simple data protocol. -// The "header" is a JSON object, followed by 2 \n characters, and -// then a message body. -// -// Note: This can be done more simply as a Transform stream. See below. - -function SimpleProtocol(source, options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Readable.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - - // source is a readable stream, such as a socket or file - this._source = source; - - var self = this; - source.on('end', function() { - self.push(null); - }); - - // give it a kick whenever the source is readable - // read(0) will not consume any bytes - source.on('readable', function() { - self.read(0); - }); - - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Readable.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._read = function(n) { - if (!this._inBody) { - var chunk = this._source.read(); - - // if the source doesn't have data, we don't have data yet. - if (chunk === null) - return this.push(''); - - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - this.push(''); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // now, because we got some extra data, unshift the rest - // back into the read queue so that our consumer will see it. - var b = chunk.slice(split); - this.unshift(b); - - // and let them know that we are done parsing the header. - this.emit('header', this.header); - } - } else { - // from there on, just provide the data to our consumer. - // careful not to push(null), since that would indicate EOF. - var chunk = this._source.read(); - if (chunk) this.push(chunk); - } -}; - -// Usage: -var parser = new SimpleProtocol(source); -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - -### readable.wrap(stream) - -* `stream` {Stream} An "old style" readable stream - -If you are using an older Node library that emits `'data'` events and -has a `pause()` method that is advisory only, then you can use the -`wrap()` method to create a Readable stream that uses the old stream -as its data source. - -For example: - -```javascript -var OldReader = require('./old-api-module.js').OldReader; -var oreader = new OldReader; -var Readable = require('stream').Readable; -var myReader = new Readable().wrap(oreader); - -myReader.on('readable', function() { - myReader.read(); // etc. -}); -``` - -### Event: 'readable' - -When there is data ready to be consumed, this event will fire. - -When this event emits, call the `read()` method to consume the data. - -### Event: 'end' - -Emitted when the stream has received an EOF (FIN in TCP terminology). -Indicates that no more `'data'` events will happen. If the stream is -also writable, it may be possible to continue writing. - -### Event: 'data' - -The `'data'` event emits either a `Buffer` (by default) or a string if -`setEncoding()` was used. - -Note that adding a `'data'` event listener will switch the Readable -stream into "old mode", where data is emitted as soon as it is -available, rather than waiting for you to call `read()` to consume it. - -### Event: 'error' - -Emitted if there was an error receiving data. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### readable.setEncoding(encoding) - -Makes the `'data'` event emit a string instead of a `Buffer`. `encoding` -can be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`. - -The encoding can also be set by specifying an `encoding` field to the -constructor. - -### readable.read([size]) - -* `size` {Number | null} Optional number of bytes to read. -* Return: {Buffer | String | null} - -Note: **This function SHOULD be called by Readable stream users.** - -Call this method to consume data once the `'readable'` event is -emitted. - -The `size` argument will set a minimum number of bytes that you are -interested in. If not set, then the entire content of the internal -buffer is returned. - -If there is no data to consume, or if there are fewer bytes in the -internal buffer than the `size` argument, then `null` is returned, and -a future `'readable'` event will be emitted when more is available. - -Calling `stream.read(0)` will always return `null`, and will trigger a -refresh of the internal buffer, but otherwise be a no-op. - -### readable.pipe(destination, [options]) - -* `destination` {Writable Stream} -* `options` {Object} Optional - * `end` {Boolean} Default=true - -Connects this readable stream to `destination` WriteStream. Incoming -data on this stream gets written to `destination`. Properly manages -back-pressure so that a slow destination will not be overwhelmed by a -fast readable stream. - -This function returns the `destination` stream. - -For example, emulating the Unix `cat` command: - - process.stdin.pipe(process.stdout); - -By default `end()` is called on the destination when the source stream -emits `end`, so that `destination` is no longer writable. Pass `{ end: -false }` as `options` to keep the destination stream open. - -This keeps `writer` open so that "Goodbye" can be written at the -end. - - reader.pipe(writer, { end: false }); - reader.on("end", function() { - writer.end("Goodbye\n"); - }); - -Note that `process.stderr` and `process.stdout` are never closed until -the process exits, regardless of the specified options. - -### readable.unpipe([destination]) - -* `destination` {Writable Stream} Optional - -Undo a previously established `pipe()`. If no destination is -provided, then all previously established pipes are removed. - -### readable.pause() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Ceases the flow of data. No `'data'` events are emitted while the -stream is in a paused state. - -### readable.resume() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Resumes the incoming `'data'` events after a `pause()`. - - -## Class: stream.Writable - -<!--type=class--> - -A `Writable` Stream has the following methods, members, and events. - -Note that `stream.Writable` is an abstract class designed to be -extended with an underlying implementation of the -`_write(chunk, encoding, cb)` method. (See below.) - -### new stream.Writable([options]) - -* `options` {Object} - * `highWaterMark` {Number} Buffer level when `write()` starts - returning false. Default=16kb - * `decodeStrings` {Boolean} Whether or not to decode strings into - Buffers before passing them to `_write()`. Default=true - -In classes that extend the Writable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### writable.\_write(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be written. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. Ignore chunk is a buffer. Note that chunk will - **always** be a buffer unless the `decodeStrings` option is - explicitly set to `false`. -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -All Writable stream implementations must provide a `_write` method to -send data to the underlying resource. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Writable -class methods only. - -Call the callback using the standard `callback(error)` pattern to -signal that the write completed successfully or with an error. - -If the `decodeStrings` flag is set in the constructor options, then -`chunk` may be a string rather than a Buffer, and `encoding` will -indicate the sort of string that it is. This is to support -implementations that have an optimized handling for certain string -data encodings. If you do not explicitly set the `decodeStrings` -option to `false`, then you can safely ignore the `encoding` argument, -and assume that `chunk` will always be a Buffer. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - - -### writable.write(chunk, [encoding], [callback]) - -* `chunk` {Buffer | String} Data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when this chunk is - successfully written. -* Returns {Boolean} - -Writes `chunk` to the stream. Returns `true` if the data has been -flushed to the underlying resource. Returns `false` to indicate that -the buffer is full, and the data will be sent out in the future. The -`'drain'` event will indicate when the buffer is empty again. - -The specifics of when `write()` will return false, is determined by -the `highWaterMark` option provided to the constructor. - -### writable.end([chunk], [encoding], [callback]) - -* `chunk` {Buffer | String} Optional final data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when the final chunk is - successfully written. - -Call this method to signal the end of the data being written to the -stream. - -### Event: 'drain' - -Emitted when the stream's write queue empties and it's safe to write -without buffering again. Listen for it when `stream.write()` returns -`false`. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### Event: 'finish' - -When `end()` is called and there are no more chunks to write, this -event is emitted. - -### Event: 'pipe' - -* `source` {Readable Stream} - -Emitted when the stream is passed to a readable stream's pipe method. - -### Event 'unpipe' - -* `source` {Readable Stream} - -Emitted when a previously established `pipe()` is removed using the -source Readable stream's `unpipe()` method. - -## Class: stream.Duplex - -<!--type=class--> - -A "duplex" stream is one that is both Readable and Writable, such as a -TCP socket connection. - -Note that `stream.Duplex` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -and `_write(chunk, encoding, callback)` methods as you would with a Readable or -Writable stream class. - -Since JavaScript doesn't have multiple prototypal inheritance, this -class prototypally inherits from Readable, and then parasitically from -Writable. It is thus up to the user to implement both the lowlevel -`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method -on extension duplex classes. - -### new stream.Duplex(options) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then - the stream will automatically end the readable side when the - writable side ends and vice versa. - -In classes that extend the Duplex class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -## Class: stream.Transform - -A "transform" stream is a duplex stream where the output is causally -connected in some way to the input, such as a zlib stream or a crypto -stream. - -There is no requirement that the output be the same size as the input, -the same number of chunks, or arrive at the same time. For example, a -Hash stream will only ever have a single chunk of output which is -provided when the input is ended. A zlib stream will either produce -much smaller or much larger than its input. - -Rather than implement the `_read()` and `_write()` methods, Transform -classes must implement the `_transform()` method, and may optionally -also implement the `_flush()` method. (See below.) - -### new stream.Transform([options]) - -* `options` {Object} Passed to both Writable and Readable - constructors. - -In classes that extend the Transform class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### transform.\_transform(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be transformed. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. (Ignore if `decodeStrings` chunk is a buffer.) -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Transform -class methods only. - -All Transform stream implementations must provide a `_transform` -method to accept input and produce output. - -`_transform` should do whatever has to be done in this specific -Transform class, to handle the bytes being written, and pass them off -to the readable portion of the interface. Do asynchronous I/O, -process things, and so on. - -Call `transform.push(outputChunk)` 0 or more times to generate output -from this input chunk, depending on how much data you want to output -as a result of this chunk. - -Call the callback function only when the current chunk is completely -consumed. Note that there may or may not be output as a result of any -particular input chunk. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### transform.\_flush(callback) - -* `callback` {Function} Call this function (optionally with an error - argument) when you are done flushing any remaining data. - -Note: **This function MUST NOT be called directly.** It MAY be implemented -by child classes, and if so, will be called by the internal Transform -class methods only. - -In some cases, your transform operation may need to emit a bit more -data at the end of the stream. For example, a `Zlib` compression -stream will store up some internal state so that it can optimally -compress the output. At the end, however, it needs to do the best it -can with what is left, so that the data will be complete. - -In those cases, you can implement a `_flush` method, which will be -called at the very end, after all the written data is consumed, but -before emitting `end` to signal the end of the readable side. Just -like with `_transform`, call `transform.push(chunk)` zero or more -times, as appropriate, and call `callback` when the flush operation is -complete. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### Example: `SimpleProtocol` parser - -The example above of a simple protocol parser can be implemented much -more simply by using the higher level `Transform` stream class. - -In this example, rather than providing the input as an argument, it -would be piped into the parser, which is a more idiomatic Node stream -approach. - -```javascript -function SimpleProtocol(options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Transform.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Transform.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._transform = function(chunk, encoding, done) { - if (!this._inBody) { - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // and let them know that we are done parsing the header. - this.emit('header', this.header); - - // now, because we got some extra data, emit this first. - this.push(b); - } - } else { - // from there on, just provide the data to our consumer as-is. - this.push(b); - } - done(); -}; - -var parser = new SimpleProtocol(); -source.pipe(parser) - -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - - -## Class: stream.PassThrough - -This is a trivial implementation of a `Transform` stream that simply -passes the input bytes across to the output. Its purpose is mainly -for examples and testing, but there are occasionally use cases where -it can come in handy. - - -[EventEmitter]: events.html#events_class_events_eventemitter diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/duplex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/duplex.js deleted file mode 100644 index ca807af8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/float.patch b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/float.patch deleted file mode 100644 index 0ad71a1f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/float.patch +++ /dev/null @@ -1,68 +0,0 @@ -diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js -index c5a741c..a2e0d8e 100644 ---- a/lib/_stream_duplex.js -+++ b/lib/_stream_duplex.js -@@ -26,8 +26,8 @@ - - module.exports = Duplex; - var util = require('util'); --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('./_stream_readable'); -+var Writable = require('./_stream_writable'); - - util.inherits(Duplex, Readable); - -diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js -index a5e9864..330c247 100644 ---- a/lib/_stream_passthrough.js -+++ b/lib/_stream_passthrough.js -@@ -25,7 +25,7 @@ - - module.exports = PassThrough; - --var Transform = require('_stream_transform'); -+var Transform = require('./_stream_transform'); - var util = require('util'); - util.inherits(PassThrough, Transform); - -diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js -index 2259d2e..e6681ee 100644 ---- a/lib/_stream_readable.js -+++ b/lib/_stream_readable.js -@@ -23,6 +23,9 @@ 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 StringDecoder; -diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js -index e925b4b..f08b05e 100644 ---- a/lib/_stream_transform.js -+++ b/lib/_stream_transform.js -@@ -64,7 +64,7 @@ - - module.exports = Transform; - --var Duplex = require('_stream_duplex'); -+var Duplex = require('./_stream_duplex'); - var util = require('util'); - util.inherits(Transform, Duplex); - -diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js -index a26f711..56ca47d 100644 ---- a/lib/_stream_writable.js -+++ b/lib/_stream_writable.js -@@ -109,7 +109,7 @@ function WritableState(options, stream) { - function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. -- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex)) -+ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex'))) - return new Writable(options); - - this._writableState = new WritableState(options, this); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index a2e0d8e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,69 +0,0 @@ -// 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 330c247d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,41 +0,0 @@ -// 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 323f3305..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,927 +0,0 @@ -// 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 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index 707e4b3b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,205 +0,0 @@ -// 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index 9eaf4ec2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,371 +0,0 @@ -// 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 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 = []; -} - -function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof require('./_stream_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.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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE deleted file mode 100644 index 6de584a4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md deleted file mode 100644 index 4d2aa001..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md +++ /dev/null @@ -1,7 +0,0 @@ -**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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js deleted file mode 100755 index 46470cfd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env node - -const hyperquest = require('hyperzip')(require('hyperdirect')) - , bl = require('bl') - , fs = require('fs') - , path = require('path') - , cheerio = require('cheerio') - - , files = require('./files') - , testReplace = require('./test-replacements') - - , srcurlpfx = 'https://raw.github.com/joyent/node/v' + process.argv[2] + '-release/' - , libsrcurl = srcurlpfx + 'lib/' - , testsrcurl = srcurlpfx + 'test/simple/' - , testlisturl = 'https://github.com/joyent/node/tree/v' + process.argv[2] + '-release/test/simple' - , libourroot = path.join(__dirname, '../') - , testourroot = path.join(__dirname, '../test/simple/') - - -function processFile (url, out, replacements) { - hyperquest(url).pipe(bl(function (err, data) { - if (err) - throw err - - data = data.toString() - replacements.forEach(function (replacement) { - data = data.replace.apply(data, replacement) - }) - - fs.writeFile(out, data, 'utf8', function (err) { - if (err) - throw err - - console.log('Wrote', out) - }) - })) -} - -function processLibFile (file) { - var replacements = files[file] - , url = libsrcurl + file - , out = path.join(libourroot, replacements.out || file) - - processFile(url, out, replacements) -} - - -function processTestFile (file) { - var replacements = testReplace.all - , url = testsrcurl + file - , out = path.join(testourroot, file) - - if (testReplace[file]) - replacements = replacements.concat(testReplace[file]) - - processFile(url, out, replacements) -} - - -if (!/0\.1\d\.\d+/.test(process.argv[2])) { - console.log('Usage: build.js <node version>') - return process.exit(-1) -} - - -//-------------------------------------------------------------------- -// Grab & process files in ../lib/ - -Object.keys(files).forEach(processLibFile) - -//-------------------------------------------------------------------- -// Discover, grab and process all test-string-decoder* files on joyent/node - -hyperquest(testlisturl).pipe(bl(function (err, data) { - if (err) - throw err - - var $ = cheerio.load(data.toString()) - - $('table.files .js-directory-link').each(function () { - var file = $(this).text() - if (/^test-string-decoder/.test(file) || file == 'common.js') - processTestFile(file) - }) -})) - -//-------------------------------------------------------------------- -// Grab the joyent/node test/common.js - -processFile( - testsrcurl + '../common.js' - , path.join(testourroot, '../common.js') - , testReplace['common.js'] -) \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js deleted file mode 100644 index 7396a4f4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js +++ /dev/null @@ -1,36 +0,0 @@ -/* This file lists the files to be fetched from the node repo - * in the /lib/ directory which will be placed in the ../lib/ - * directory after having each of the "replacements" in the - * array for that file applied to it. The replacements are - * simply the arguments to String#replace, so they can be - * strings, regexes, functions. - */ - -module.exports['string_decoder.js'] = [ - - // pull in Bufer as a require - // add Buffer.isEncoding where missing - [ - /^(\/\/ USE OR OTHER DEALINGS IN THE SOFTWARE\.)/m - , '$1\n\nvar Buffer = require(\'buffer\').Buffer;' - + '\n' - + '\nvar isBufferEncoding = Buffer.isEncoding' - + '\n || function(encoding) {' - + '\n switch (encoding && encoding.toLowerCase()) {' - + '\n 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;' - + '\n default: return false;' - + '\n }' - + '\n }' - + '\n' - - ] - - // use custom Buffer.isEncoding reference - , [ - /Buffer\.isEncoding\(/g - , 'isBufferEncoding\(' - ] - -] - -module.exports['string_decoder.js'].out = 'index.js' \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json deleted file mode 100644 index f7ee6a46..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "string_decoder-build", - "version": "0.0.0", - "description": "", - "main": "build.js", - "dependencies": { - "bl": "~0.6.0", - "hyperzip": "0.0.0", - "hyperdirect": "0.0.0", - "cheerio": "~0.13.1" - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js deleted file mode 100644 index 5bbf6028..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports.all = [ - [ - /require\(['"]string_decoder['"]\)/g - , 'require(\'../../\')' - ] - -] - -module.exports['common.js'] = [ - [ - /^ setImmediate,$/m - , ' typeof setImmediate == \'undefined\' ? null : setImmediate,' - ] - - , [ - /^ clearImmediate,$/m - , ' typeof clearImmediate == \'undefined\' ? null : clearImmediate,' - ] - - , [ - /^ global];$/m - , ' global].filter(Boolean);' - ] -] diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js deleted file mode 100644 index 2e44a03e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json deleted file mode 100644 index c7cac1a5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "string_decoder", - "version": "0.10.25", - "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", - "dist": { - "shasum": "aa026a29a0177ff13c8df4472dcda2f26d646900" - }, - "_from": "string_decoder@~0.10.x", - "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.25.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js deleted file mode 100644 index ed5ff08d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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 path = require('path'); -var assert = require('assert'); - -exports.testDir = path.dirname(__filename); -exports.fixturesDir = path.join(exports.testDir, 'fixtures'); -exports.libDir = path.join(exports.testDir, '../lib'); -exports.tmpDir = path.join(exports.testDir, 'tmp'); -exports.PORT = +process.env.NODE_COMMON_PORT || 12346; - -if (process.platform === 'win32') { - exports.PIPE = '\\\\.\\pipe\\libuv-test'; -} else { - exports.PIPE = exports.tmpDir + '/test.sock'; -} - -var util = require('util'); -for (var i in util) exports[i] = util[i]; -//for (var i in exports) global[i] = exports[i]; - -function protoCtrChain(o) { - var result = []; - for (; o; o = o.__proto__) { result.push(o.constructor); } - return result.join(); -} - -exports.indirectInstanceOf = function(obj, cls) { - if (obj instanceof cls) { return true; } - var clsChain = protoCtrChain(cls.prototype); - var objChain = protoCtrChain(obj); - return objChain.slice(-clsChain.length) === clsChain; -}; - - -exports.ddCommand = function(filename, kilobytes) { - if (process.platform === 'win32') { - var p = path.resolve(exports.fixturesDir, 'create-file.js'); - return '"' + process.argv[0] + '" "' + p + '" "' + - filename + '" ' + (kilobytes * 1024); - } else { - return 'dd if=/dev/zero of="' + filename + '" bs=1024 count=' + kilobytes; - } -}; - - -exports.spawnCat = function(options) { - var spawn = require('child_process').spawn; - - if (process.platform === 'win32') { - return spawn('more', [], options); - } else { - return spawn('cat', [], options); - } -}; - - -exports.spawnPwd = function(options) { - var spawn = require('child_process').spawn; - - if (process.platform === 'win32') { - return spawn('cmd.exe', ['/c', 'cd'], options); - } else { - return spawn('pwd', [], options); - } -}; - - -// Turn this off if the test should not check for global leaks. -exports.globalCheck = true; - -process.on('exit', function() { - if (!exports.globalCheck) return; - var knownGlobals = [setTimeout, - setInterval, - typeof setImmediate == 'undefined' ? null : setImmediate, - clearTimeout, - clearInterval, - typeof clearImmediate == 'undefined' ? null : clearImmediate, - console, - Buffer, - process, - global].filter(Boolean); - - if (global.gc) { - knownGlobals.push(gc); - } - - if (global.DTRACE_HTTP_SERVER_RESPONSE) { - knownGlobals.push(DTRACE_HTTP_SERVER_RESPONSE); - knownGlobals.push(DTRACE_HTTP_SERVER_REQUEST); - knownGlobals.push(DTRACE_HTTP_CLIENT_RESPONSE); - knownGlobals.push(DTRACE_HTTP_CLIENT_REQUEST); - knownGlobals.push(DTRACE_NET_STREAM_END); - knownGlobals.push(DTRACE_NET_SERVER_CONNECTION); - knownGlobals.push(DTRACE_NET_SOCKET_READ); - knownGlobals.push(DTRACE_NET_SOCKET_WRITE); - } - if (global.COUNTER_NET_SERVER_CONNECTION) { - knownGlobals.push(COUNTER_NET_SERVER_CONNECTION); - knownGlobals.push(COUNTER_NET_SERVER_CONNECTION_CLOSE); - knownGlobals.push(COUNTER_HTTP_SERVER_REQUEST); - knownGlobals.push(COUNTER_HTTP_SERVER_RESPONSE); - knownGlobals.push(COUNTER_HTTP_CLIENT_REQUEST); - knownGlobals.push(COUNTER_HTTP_CLIENT_RESPONSE); - } - - if (global.ArrayBuffer) { - knownGlobals.push(ArrayBuffer); - knownGlobals.push(Int8Array); - knownGlobals.push(Uint8Array); - knownGlobals.push(Uint8ClampedArray); - knownGlobals.push(Int16Array); - knownGlobals.push(Uint16Array); - knownGlobals.push(Int32Array); - knownGlobals.push(Uint32Array); - knownGlobals.push(Float32Array); - knownGlobals.push(Float64Array); - knownGlobals.push(DataView); - } - - for (var x in global) { - var found = false; - - for (var y in knownGlobals) { - if (global[x] === knownGlobals[y]) { - found = true; - break; - } - } - - if (!found) { - console.error('Unknown global: %s', x); - assert.ok(false, 'Unknown global found'); - } - } -}); - - -var mustCallChecks = []; - - -function runCallChecks(exitCode) { - if (exitCode !== 0) return; - - var failed = mustCallChecks.filter(function(context) { - return context.actual !== context.expected; - }); - - failed.forEach(function(context) { - console.log('Mismatched %s function calls. Expected %d, actual %d.', - context.name, - context.expected, - context.actual); - console.log(context.stack.split('\n').slice(2).join('\n')); - }); - - if (failed.length) process.exit(1); -} - - -exports.mustCall = function(fn, expected) { - if (typeof expected !== 'number') expected = 1; - - var context = { - expected: expected, - actual: 0, - stack: (new Error).stack, - name: fn.name || '<anonymous>' - }; - - // add the exit listener only once to avoid listener leak warnings - if (mustCallChecks.length === 0) process.on('exit', runCallChecks); - - mustCallChecks.push(context); - - return function() { - context.actual++; - return fn.apply(this, arguments); - }; -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js deleted file mode 100644 index 869a4116..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js +++ /dev/null @@ -1,75 +0,0 @@ -// 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. - -// verify that the string decoder works getting 1 byte at a time, -// the whole buffer at once, and that both match the .toString(enc) -// result of the entire buffer. - -var assert = require('assert'); -var SD = require('../../').StringDecoder; -var encodings = ['base64', 'hex', 'utf8', 'utf16le', 'ucs2']; - -var bufs = [ '☃💩', 'asdf' ].map(function(b) { - return new Buffer(b); -}); - -// also test just arbitrary bytes from 0-15. -for (var i = 1; i <= 16; i++) { - var bytes = new Array(i).join('.').split('.').map(function(_, j) { - return j + 0x78; - }); - bufs.push(new Buffer(bytes)); -} - -encodings.forEach(testEncoding); - -console.log('ok'); - -function testEncoding(encoding) { - bufs.forEach(function(buf) { - testBuf(encoding, buf); - }); -} - -function testBuf(encoding, buf) { - console.error('# %s', encoding, buf); - - // write one byte at a time. - var s = new SD(encoding); - var res1 = ''; - for (var i = 0; i < buf.length; i++) { - res1 += s.write(buf.slice(i, i + 1)); - } - res1 += s.end(); - - // write the whole buffer at once. - var res2 = ''; - var s = new SD(encoding); - res2 += s.write(buf); - res2 += s.end(); - - // .toString() on the buffer - var res3 = buf.toString(encoding); - - console.log('expect=%j', res3); - assert.equal(res1, res3, 'one byte at a time should match toString'); - assert.equal(res2, res3, 'all bytes at once should match toString'); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js deleted file mode 100644 index 7f69f7ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js +++ /dev/null @@ -1,163 +0,0 @@ -// 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 common = require('../common'); -var assert = require('assert'); -var StringDecoder = require('../../').StringDecoder; -var decoder = new StringDecoder('utf8'); - - - -var buffer = new Buffer('$'); -assert.deepEqual('$', decoder.write(buffer)); - -buffer = new Buffer('¢'); -assert.deepEqual('', decoder.write(buffer.slice(0, 1))); -assert.deepEqual('¢', decoder.write(buffer.slice(1, 2))); - -buffer = new Buffer('€'); -assert.deepEqual('', decoder.write(buffer.slice(0, 1))); -assert.deepEqual('', decoder.write(buffer.slice(1, 2))); -assert.deepEqual('€', decoder.write(buffer.slice(2, 3))); - -buffer = new Buffer([0xF0, 0xA4, 0xAD, 0xA2]); -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); -s += decoder.write(buffer.slice(2, 3)); -s += decoder.write(buffer.slice(3, 4)); -assert.ok(s.length > 0); - -// CESU-8 -buffer = new Buffer('EDA0BDEDB18D', 'hex'); // THUMBS UP SIGN (in CESU-8) -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); -s += decoder.write(buffer.slice(2, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 4)); -s += decoder.write(buffer.slice(4, 5)); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 2)); -s += decoder.write(buffer.slice(2, 4)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(4, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 4)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(4, 5)); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 5)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 6)); -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - - -// UCS-2 -decoder = new StringDecoder('ucs2'); -buffer = new Buffer('ab', 'ucs2'); -assert.equal(decoder.write(buffer), 'ab'); // 2 complete chars -buffer = new Buffer('abc', 'ucs2'); -assert.equal(decoder.write(buffer.slice(0, 3)), 'a'); // 'a' and first of 'b' -assert.equal(decoder.write(buffer.slice(3, 6)), 'bc'); // second of 'b' and 'c' - - -// UTF-16LE -buffer = new Buffer('3DD84DDC', 'hex'); // THUMBS UP SIGN (in CESU-8) -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(2, 3)); -s += decoder.write(buffer.slice(3, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 2)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(2, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 4)); -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - - -// A mixed ascii and non-ascii string -// Test stolen from deps/v8/test/cctest/test-strings.cc -// U+02E4 -> CB A4 -// U+0064 -> 64 -// U+12E4 -> E1 8B A4 -// U+0030 -> 30 -// U+3045 -> E3 81 85 -var expected = '\u02e4\u0064\u12e4\u0030\u3045'; -var buffer = new Buffer([0xCB, 0xA4, 0x64, 0xE1, 0x8B, 0xA4, - 0x30, 0xE3, 0x81, 0x85]); -var charLengths = [0, 0, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5]; - -// Split the buffer into 3 segments -// |----|------|-------| -// 0 i j buffer.length -// Scan through every possible 3 segment combination -// and make sure that the string is always parsed. -common.print('scanning '); -for (var j = 2; j < buffer.length; j++) { - for (var i = 1; i < j; i++) { - var decoder = new StringDecoder('utf8'); - - var sum = decoder.write(buffer.slice(0, i)); - - // just check that we've received the right amount - // after the first write - assert.equal(charLengths[i], sum.length); - - sum += decoder.write(buffer.slice(i, j)); - sum += decoder.write(buffer.slice(j, buffer.length)); - assert.equal(expected, sum); - common.print('.'); - } -} -console.log(' crayon!'); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/package.json deleted file mode 100644 index c9e268d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "readable-stream", - "version": "1.0.25", - "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\nA new class of streams for Node.js\n\nThis module provides the new Stream base classes introduced in Node\nv0.10, for use in Node v0.8. You can use it to have programs that\nhave to work with node v0.8, while being forward-compatible for v0.10\nand beyond. When you drop support for v0.8, you can remove this\nmodule, and only use the native streams.\n\nThis is almost exactly the same codebase as appears in Node v0.10.\nHowever:\n\n1. The exported object is actually the Readable class. Decorating the\n native `stream` module would be global pollution.\n2. In v0.10, you can safely use `base64` as an argument to\n `setEncoding` in Readable streams. However, in v0.8, the\n StringDecoder class has no `end()` method, which is problematic for\n Base64. So, don't use that, because it'll break and be weird.\n\nOther than that, the API is the same as `require('stream')` in v0.10,\nso the API docs are reproduced below.\n\n----------\n\n Stability: 2 - Unstable\n\nA stream is an abstract interface implemented by various objects in\nNode. For example a request to an HTTP server is a stream, as is\nstdout. Streams are readable, writable, or both. All streams are\ninstances of [EventEmitter][]\n\nYou can load the Stream base classes by doing `require('stream')`.\nThere are base classes provided for Readable streams, Writable\nstreams, Duplex streams, and Transform streams.\n\n## Compatibility\n\nIn earlier versions of Node, the Readable stream interface was\nsimpler, but also less powerful and less useful.\n\n* Rather than waiting for you to call the `read()` method, `'data'`\n events would start emitting immediately. If you needed to do some\n I/O to decide how to handle data, then you had to store the chunks\n in some kind of buffer so that they would not be lost.\n* The `pause()` method was advisory, rather than guaranteed. This\n meant that you still had to be prepared to receive `'data'` events\n even when the stream was in a paused state.\n\nIn Node v0.10, the Readable class described below was added. For\nbackwards compatibility with older Node programs, Readable streams\nswitch into \"old mode\" when a `'data'` event handler is added, or when\nthe `pause()` or `resume()` methods are called. The effect is that,\neven if you are not using the new `read()` method and `'readable'`\nevent, you no longer have to worry about losing `'data'` chunks.\n\nMost programs will continue to function normally. However, this\nintroduces an edge case in the following conditions:\n\n* No `'data'` event handler is added.\n* The `pause()` and `resume()` methods are never called.\n\nFor example, consider the following code:\n\n```javascript\n// WARNING! BROKEN!\nnet.createServer(function(socket) {\n\n // we add an 'end' method, but never consume the data\n socket.on('end', function() {\n // It will never get here.\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n}).listen(1337);\n```\n\nIn versions of node prior to v0.10, the incoming message data would be\nsimply discarded. However, in Node v0.10 and beyond, the socket will\nremain paused forever.\n\nThe workaround in this situation is to call the `resume()` method to\ntrigger \"old mode\" behavior:\n\n```javascript\n// Workaround\nnet.createServer(function(socket) {\n\n socket.on('end', function() {\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n // start the flow of data, discarding it.\n socket.resume();\n\n}).listen(1337);\n```\n\nIn addition to new Readable streams switching into old-mode, pre-v0.10\nstyle streams can be wrapped in a Readable class using the `wrap()`\nmethod.\n\n## Class: stream.Readable\n\n<!--type=class-->\n\nA `Readable Stream` has the following methods, members, and events.\n\nNote that `stream.Readable` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nmethod. (See below.)\n\n### new stream.Readable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} The maximum number of bytes to store in\n the internal buffer before ceasing to read from the underlying\n resource. Default=16kb\n * `encoding` {String} If specified, then buffers will be decoded to\n strings using the specified encoding. Default=null\n * `objectMode` {Boolean} Whether this stream should behave\n as a stream of objects. Meaning that stream.read(n) returns\n a single value instead of a Buffer of size n\n\nIn classes that extend the Readable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### readable.\\_read(size)\n\n* `size` {Number} Number of bytes to read asynchronously\n\nNote: **This function should NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Readable\nclass methods only.\n\nAll Readable stream implementations must provide a `_read` method\nto fetch data from the underlying resource.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\nWhen data is available, put it into the read queue by calling\n`readable.push(chunk)`. If `push` returns false, then you should stop\nreading. When `_read` is called again, you should start pushing more\ndata.\n\nThe `size` argument is advisory. Implementations where a \"read\" is a\nsingle call that returns data can use this to know how much data to\nfetch. Implementations where that is not relevant, such as TCP or\nTLS, may ignore this argument, and simply provide data whenever it\nbecomes available. There is no need, for example to \"wait\" until\n`size` bytes are available before calling `stream.push(chunk)`.\n\n### readable.push(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to push into the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nNote: **This function should be called by Readable implementors, NOT\nby consumers of Readable subclasses.** The `_read()` function will not\nbe called again until at least one `push(chunk)` call is made. If no\ndata is available, then you MAY call `push('')` (an empty string) to\nallow a future `_read` call, without adding any data to the queue.\n\nThe `Readable` class works by putting data into a read queue to be\npulled out later by calling the `read()` method when the `'readable'`\nevent fires.\n\nThe `push()` method will explicitly insert some data into the read\nqueue. If it is called with `null` then it will signal the end of the\ndata.\n\nIn some cases, you may be wrapping a lower-level source which has some\nsort of pause/resume mechanism, and a data callback. In those cases,\nyou could wrap the low-level source object by doing something like\nthis:\n\n```javascript\n// source is an object with readStop() and readStart() methods,\n// and an `ondata` member that gets called when it has data, and\n// an `onend` member that gets called when the data is over.\n\nvar stream = new Readable();\n\nsource.ondata = function(chunk) {\n // if push() returns false, then we need to stop reading from source\n if (!stream.push(chunk))\n source.readStop();\n};\n\nsource.onend = function() {\n stream.push(null);\n};\n\n// _read will be called when the stream wants to pull more data in\n// the advisory size argument is ignored in this case.\nstream._read = function(n) {\n source.readStart();\n};\n```\n\n### readable.unshift(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nThis is the corollary of `readable.push(chunk)`. Rather than putting\nthe data at the *end* of the read queue, it puts it at the *front* of\nthe read queue.\n\nThis is useful in certain use-cases where a stream is being consumed\nby a parser, which needs to \"un-consume\" some data that it has\noptimistically pulled out of the source.\n\n```javascript\n// A parser for a simple data protocol.\n// The \"header\" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// Note: This can be done more simply as a Transform stream. See below.\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Readable.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\nvar parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n### readable.wrap(stream)\n\n* `stream` {Stream} An \"old style\" readable stream\n\nIf you are using an older Node library that emits `'data'` events and\nhas a `pause()` method that is advisory only, then you can use the\n`wrap()` method to create a Readable stream that uses the old stream\nas its data source.\n\nFor example:\n\n```javascript\nvar OldReader = require('./old-api-module.js').OldReader;\nvar oreader = new OldReader;\nvar Readable = require('stream').Readable;\nvar myReader = new Readable().wrap(oreader);\n\nmyReader.on('readable', function() {\n myReader.read(); // etc.\n});\n```\n\n### Event: 'readable'\n\nWhen there is data ready to be consumed, this event will fire.\n\nWhen this event emits, call the `read()` method to consume the data.\n\n### Event: 'end'\n\nEmitted when the stream has received an EOF (FIN in TCP terminology).\nIndicates that no more `'data'` events will happen. If the stream is\nalso writable, it may be possible to continue writing.\n\n### Event: 'data'\n\nThe `'data'` event emits either a `Buffer` (by default) or a string if\n`setEncoding()` was used.\n\nNote that adding a `'data'` event listener will switch the Readable\nstream into \"old mode\", where data is emitted as soon as it is\navailable, rather than waiting for you to call `read()` to consume it.\n\n### Event: 'error'\n\nEmitted if there was an error receiving data.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### readable.setEncoding(encoding)\n\nMakes the `'data'` event emit a string instead of a `Buffer`. `encoding`\ncan be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`.\n\nThe encoding can also be set by specifying an `encoding` field to the\nconstructor.\n\n### readable.read([size])\n\n* `size` {Number | null} Optional number of bytes to read.\n* Return: {Buffer | String | null}\n\nNote: **This function SHOULD be called by Readable stream users.**\n\nCall this method to consume data once the `'readable'` event is\nemitted.\n\nThe `size` argument will set a minimum number of bytes that you are\ninterested in. If not set, then the entire content of the internal\nbuffer is returned.\n\nIf there is no data to consume, or if there are fewer bytes in the\ninternal buffer than the `size` argument, then `null` is returned, and\na future `'readable'` event will be emitted when more is available.\n\nCalling `stream.read(0)` will always return `null`, and will trigger a\nrefresh of the internal buffer, but otherwise be a no-op.\n\n### readable.pipe(destination, [options])\n\n* `destination` {Writable Stream}\n* `options` {Object} Optional\n * `end` {Boolean} Default=true\n\nConnects this readable stream to `destination` WriteStream. Incoming\ndata on this stream gets written to `destination`. Properly manages\nback-pressure so that a slow destination will not be overwhelmed by a\nfast readable stream.\n\nThis function returns the `destination` stream.\n\nFor example, emulating the Unix `cat` command:\n\n process.stdin.pipe(process.stdout);\n\nBy default `end()` is called on the destination when the source stream\nemits `end`, so that `destination` is no longer writable. Pass `{ end:\nfalse }` as `options` to keep the destination stream open.\n\nThis keeps `writer` open so that \"Goodbye\" can be written at the\nend.\n\n reader.pipe(writer, { end: false });\n reader.on(\"end\", function() {\n writer.end(\"Goodbye\\n\");\n });\n\nNote that `process.stderr` and `process.stdout` are never closed until\nthe process exits, regardless of the specified options.\n\n### readable.unpipe([destination])\n\n* `destination` {Writable Stream} Optional\n\nUndo a previously established `pipe()`. If no destination is\nprovided, then all previously established pipes are removed.\n\n### readable.pause()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nCeases the flow of data. No `'data'` events are emitted while the\nstream is in a paused state.\n\n### readable.resume()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nResumes the incoming `'data'` events after a `pause()`.\n\n\n## Class: stream.Writable\n\n<!--type=class-->\n\nA `Writable` Stream has the following methods, members, and events.\n\nNote that `stream.Writable` is an abstract class designed to be\nextended with an underlying implementation of the\n`_write(chunk, encoding, cb)` method. (See below.)\n\n### new stream.Writable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} Buffer level when `write()` starts\n returning false. Default=16kb\n * `decodeStrings` {Boolean} Whether or not to decode strings into\n Buffers before passing them to `_write()`. Default=true\n\nIn classes that extend the Writable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### writable.\\_write(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be written. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. Ignore chunk is a buffer. Note that chunk will\n **always** be a buffer unless the `decodeStrings` option is\n explicitly set to `false`.\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nAll Writable stream implementations must provide a `_write` method to\nsend data to the underlying resource.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Writable\nclass methods only.\n\nCall the callback using the standard `callback(error)` pattern to\nsignal that the write completed successfully or with an error.\n\nIf the `decodeStrings` flag is set in the constructor options, then\n`chunk` may be a string rather than a Buffer, and `encoding` will\nindicate the sort of string that it is. This is to support\nimplementations that have an optimized handling for certain string\ndata encodings. If you do not explicitly set the `decodeStrings`\noption to `false`, then you can safely ignore the `encoding` argument,\nand assume that `chunk` will always be a Buffer.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n\n### writable.write(chunk, [encoding], [callback])\n\n* `chunk` {Buffer | String} Data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when this chunk is\n successfully written.\n* Returns {Boolean}\n\nWrites `chunk` to the stream. Returns `true` if the data has been\nflushed to the underlying resource. Returns `false` to indicate that\nthe buffer is full, and the data will be sent out in the future. The\n`'drain'` event will indicate when the buffer is empty again.\n\nThe specifics of when `write()` will return false, is determined by\nthe `highWaterMark` option provided to the constructor.\n\n### writable.end([chunk], [encoding], [callback])\n\n* `chunk` {Buffer | String} Optional final data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when the final chunk is\n successfully written.\n\nCall this method to signal the end of the data being written to the\nstream.\n\n### Event: 'drain'\n\nEmitted when the stream's write queue empties and it's safe to write\nwithout buffering again. Listen for it when `stream.write()` returns\n`false`.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### Event: 'finish'\n\nWhen `end()` is called and there are no more chunks to write, this\nevent is emitted.\n\n### Event: 'pipe'\n\n* `source` {Readable Stream}\n\nEmitted when the stream is passed to a readable stream's pipe method.\n\n### Event 'unpipe'\n\n* `source` {Readable Stream}\n\nEmitted when a previously established `pipe()` is removed using the\nsource Readable stream's `unpipe()` method.\n\n## Class: stream.Duplex\n\n<!--type=class-->\n\nA \"duplex\" stream is one that is both Readable and Writable, such as a\nTCP socket connection.\n\nNote that `stream.Duplex` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nand `_write(chunk, encoding, callback)` methods as you would with a Readable or\nWritable stream class.\n\nSince JavaScript doesn't have multiple prototypal inheritance, this\nclass prototypally inherits from Readable, and then parasitically from\nWritable. It is thus up to the user to implement both the lowlevel\n`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method\non extension duplex classes.\n\n### new stream.Duplex(options)\n\n* `options` {Object} Passed to both Writable and Readable\n constructors. Also has the following fields:\n * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then\n the stream will automatically end the readable side when the\n writable side ends and vice versa.\n\nIn classes that extend the Duplex class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n## Class: stream.Transform\n\nA \"transform\" stream is a duplex stream where the output is causally\nconnected in some way to the input, such as a zlib stream or a crypto\nstream.\n\nThere is no requirement that the output be the same size as the input,\nthe same number of chunks, or arrive at the same time. For example, a\nHash stream will only ever have a single chunk of output which is\nprovided when the input is ended. A zlib stream will either produce\nmuch smaller or much larger than its input.\n\nRather than implement the `_read()` and `_write()` methods, Transform\nclasses must implement the `_transform()` method, and may optionally\nalso implement the `_flush()` method. (See below.)\n\n### new stream.Transform([options])\n\n* `options` {Object} Passed to both Writable and Readable\n constructors.\n\nIn classes that extend the Transform class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### transform.\\_transform(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be transformed. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. (Ignore if `decodeStrings` chunk is a buffer.)\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Transform\nclass methods only.\n\nAll Transform stream implementations must provide a `_transform`\nmethod to accept input and produce output.\n\n`_transform` should do whatever has to be done in this specific\nTransform class, to handle the bytes being written, and pass them off\nto the readable portion of the interface. Do asynchronous I/O,\nprocess things, and so on.\n\nCall `transform.push(outputChunk)` 0 or more times to generate output\nfrom this input chunk, depending on how much data you want to output\nas a result of this chunk.\n\nCall the callback function only when the current chunk is completely\nconsumed. Note that there may or may not be output as a result of any\nparticular input chunk.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### transform.\\_flush(callback)\n\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done flushing any remaining data.\n\nNote: **This function MUST NOT be called directly.** It MAY be implemented\nby child classes, and if so, will be called by the internal Transform\nclass methods only.\n\nIn some cases, your transform operation may need to emit a bit more\ndata at the end of the stream. For example, a `Zlib` compression\nstream will store up some internal state so that it can optimally\ncompress the output. At the end, however, it needs to do the best it\ncan with what is left, so that the data will be complete.\n\nIn those cases, you can implement a `_flush` method, which will be\ncalled at the very end, after all the written data is consumed, but\nbefore emitting `end` to signal the end of the readable side. Just\nlike with `_transform`, call `transform.push(chunk)` zero or more\ntimes, as appropriate, and call `callback` when the flush operation is\ncomplete.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### Example: `SimpleProtocol` parser\n\nThe example above of a simple protocol parser can be implemented much\nmore simply by using the higher level `Transform` stream class.\n\nIn this example, rather than providing the input as an argument, it\nwould be piped into the parser, which is a more idiomatic Node stream\napproach.\n\n```javascript\nfunction SimpleProtocol(options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Transform.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Transform.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._transform = function(chunk, encoding, done) {\n if (!this._inBody) {\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n\n // now, because we got some extra data, emit this first.\n this.push(b);\n }\n } else {\n // from there on, just provide the data to our consumer as-is.\n this.push(b);\n }\n done();\n};\n\nvar parser = new SimpleProtocol();\nsource.pipe(parser)\n\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n\n## Class: stream.PassThrough\n\nThis is a trivial implementation of a `Transform` stream that simply\npasses the input bytes across to the output. Its purpose is mainly\nfor examples and testing, but there are occasionally use cases where\nit can come in handy.\n\n\n[EventEmitter]: events.html#events_class_events_eventemitter\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.25", - "dist": { - "shasum": "3d234b55fd2a25db8327618f088e50a32044df50" - }, - "_from": "readable-stream@~1.0.17", - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.25.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/passthrough.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/passthrough.js deleted file mode 100644 index 27e8d8a5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/readable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/readable.js deleted file mode 100644 index 4d1ddfc7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,6 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/transform.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/transform.js deleted file mode 100644 index 5d482f07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/writable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/writable.js deleted file mode 100644 index e1e9efdf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/writable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/LICENCE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/LICENCE deleted file mode 100644 index a23e08a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/README.md deleted file mode 100644 index 389adae3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/has-keys.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/has-keys.js deleted file mode 100644 index 62391e78..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/has-keys.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = hasKeys - -function hasKeys(source) { - return source !== null && - (typeof source === "object" || - typeof source === "function") -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/index.js deleted file mode 100644 index 20937d19..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/index.js +++ /dev/null @@ -1,25 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/mutable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/mutable.js deleted file mode 100644 index 17454ae4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/mutable.js +++ /dev/null @@ -1,25 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml deleted file mode 100644 index 60d00ce1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.8" - - "0.6" diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md deleted file mode 100644 index ab32d0ad..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md +++ /dev/null @@ -1,39 +0,0 @@ -#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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js deleted file mode 100644 index db32d458..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js +++ /dev/null @@ -1,40 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js deleted file mode 100644 index f5b24b6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js +++ /dev/null @@ -1,2 +0,0 @@ -module.exports = Object.keys || require('./shim'); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js deleted file mode 100644 index 74a09897..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js +++ /dev/null @@ -1,16 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json deleted file mode 100644 index 9dfda8dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "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", - "dist": { - "shasum": "28a6aae7428dd2c3a92f3d95f21335dd204e0336" - }, - "_from": "object-keys@~0.4.0", - "_resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js deleted file mode 100644 index b88421be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js +++ /dev/null @@ -1,62 +0,0 @@ -(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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js deleted file mode 100644 index f29f065a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js +++ /dev/null @@ -1,156 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js deleted file mode 100644 index 8b77b1fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js +++ /dev/null @@ -1,6 +0,0 @@ - -require('./foreach'); -require('./isArguments'); - -require('./shim'); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js deleted file mode 100644 index 62a07c2d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js +++ /dev/null @@ -1,10 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js deleted file mode 100644 index 9d932712..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js +++ /dev/null @@ -1,134 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/package.json deleted file mode 100644 index a761197d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "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", - "dist": { - "shasum": "5e8f75d1b0d9ca976fee0f1aa88f80c7619210d5" - }, - "_from": "xtend@~2.1.1", - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/test.js deleted file mode 100644 index 3369d796..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/test.js +++ /dev/null @@ -1,63 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/package.json deleted file mode 100644 index 9612fee2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "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", - "dist": { - "shasum": "48772c8b50c4955c25e7cdbe69f4220f4138178b" - }, - "_from": "through2@~0.4.0", - "_resolved": "https://registry.npmjs.org/through2/-/through2-0.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/basic-test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/basic-test.js deleted file mode 100644 index 9d137c7f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/basic-test.js +++ /dev/null @@ -1,334 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/bench.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/bench.js deleted file mode 100644 index cc10868b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/bench.js +++ /dev/null @@ -1,42 +0,0 @@ -/* -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/sauce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/sauce.js deleted file mode 100644 index a6d28625..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/sauce.js +++ /dev/null @@ -1,38 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/test.js deleted file mode 100644 index aa9b4877..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/test.js +++ /dev/null @@ -1,9 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/through2.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/through2.js deleted file mode 100644 index c1104848..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/through2.js +++ /dev/null @@ -1,78 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/package.json deleted file mode 100644 index d289871c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/download/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "download", - "version": "0.1.10", - "description": "Download and extract files effortlessly", - "keywords": [ - "url", - "http", - "download", - "extract" - ], - "homepage": "https://github.com/kevva/download", - "bugs": { - "url": "https://github.com/kevva/download/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/kevva/download.git" - }, - "scripts": { - "test": "mocha --reporter list" - }, - "main": "download.js", - "files": [ - "download.js" - ], - "dependencies": { - "decompress": "~0.1.5", - "each-async": "~0.1.1", - "mkdirp": "~0.3.5", - "request": "~2.31.0", - "through2": "~0.4.0" - }, - "devDependencies": { - "mocha": "~1.17.0", - "nock": "~0.27.1", - "rimraf": "~2.2.5" - }, - "engines": { - "node": ">=0.10.0" - }, - "readme": "# download [![Build Status](https://secure.travis-ci.org/kevva/download.png?branch=master)](http://travis-ci.org/kevva/download)\n\nDownload and extract files effortlessly in Node.js.\n\n## Getting started\n\nInstall with [npm](https://npmjs.org/package/download): `npm install download`\n\n## Examples\n\nIf you're fetching an archive you can set `extract: true` in options and\nit'll extract it for you.\n\n```js\nvar download = require('download');\n\n// download and extract `foo.tar.gz` into `bar/`\ndownload('foo.tar.gz', 'bar', { extract: true });\n\n// download and save `foo.exe` into `bar/foo.exe` with mode `0755`\ndownload('foo.exe', 'bar', { mode: '0755' });\n\n// download and save `foo.zip` into `bar/foobar.zip`\ndownload({ url: 'foo.zip', name: 'foobar.zip' }, 'bar');\n\n// download and save an array of files in `bar/`\nvar files = ['foo.jpg', 'bar.jpg', 'cat.jpg'];\ndownload(files, 'bar');\n\n// download, save and rename an array of files in `bar/`\nvar files = [{\n url: 'foo.jpg',\n name: 'foobar.jpg'\n}, {\n url: 'cat.jpg',\n name: 'dog.jpg'\n}];\ndownload(files, 'bar');\n```\n\n## API\n\n### download(url, dest, opts)\n\nDownload a file or an array of files to a given destination. Returns an EventEmitter \nthat emits the following possible events:\n\n* `response` — Relayed when the underlying `http.ClientRequest` emits the same \nevent. Listeners called with a `http.IncomingMessage` instance.\n* `data` — Relayed when the underlying `http.IncomingMessage` emits the same \nevent. Listeners called with a `Buffer` instance.\n* `error` — Relayed when the underlying `http.ClientRequest` emits the same event \nor when the response status code is not in the 200s. Listeners called with an \n`Error` instance (in the first case) or the response status code.\n* `close` — Relayed when the underlying `stream.Duplex` emits the same event.\n\n## Options\n\nYou can define options accepted by the [request](https://github.com/mikeal/request/) module besides from the options below.\n\n### extract\n\nType: `Boolean` \nDefault: `false`\n\nIf set to `true`, try extracting the file using [decompress](https://github.com/kevva/decompress/).\n\n### mode\n\nType: `String` \nDefault: `undefined`\n\nSet mode on the downloaded files.\n\n### strip\n\nType: `Number` \nDefault: `0`\n\nEquivalent to `--strip-components` for tar.\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com)\n", - "readmeFilename": "README.md", - "_id": "download@0.1.10", - "dist": { - "shasum": "dc5d3ab4a7fc78e374e2de0381273b7b999bc29d" - }, - "_from": "download@~0.1.2", - "_resolved": "https://registry.npmjs.org/download/-/download-0.1.10.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/.npmignore deleted file mode 100644 index 2ccbe465..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules/ diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/.travis.yml deleted file mode 100644 index c1ffcb31..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.8 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/History.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/History.md deleted file mode 100644 index d1fa5334..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/History.md +++ /dev/null @@ -1,20 +0,0 @@ - -0.0.2 / 2013-05-29 -================== - - * Updated github url - * Fix bug calling isbin with list of paths - * Add tests for sync version - * Added travis CI passing image to readme - * Added node engines and keywords - * Added travis CI config - * Added basic readme - * Added basic test suite and Makefile - * Add async version - * Some refactorings using 'some' function - * Fixed issue with wrong paths if called multiple times - -0.0.1 / 2012-12-06 -================== - - * Initial release diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/Makefile deleted file mode 100644 index 1a2444a1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -REPORTER ?= dot - -test: - @NODE_ENV=test ./node_modules/mocha/bin/mocha -R $(REPORTER) - -.PHONY: test diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/README.md deleted file mode 100644 index 5224d614..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/README.md +++ /dev/null @@ -1,59 +0,0 @@ -[![Build Status](https://secure.travis-ci.org/mbehrendt/isbin.png?branch=master)](https://travis-ci.org/mbehrendt/isbin) - -# Isbin - -Tiny little helper library to determine if a certain binary is available within $PATH or any additional folder. - -# Installation - -```bash -$ npm install isbin -``` - -# Usage - -```js -var isbin = require('isbin'); - -// Test against $PATH -isbin('mysql', function(exists) { - console.log(exists); // ==> Boolean -}); - -// With additional path to test -isbin('mysql', '/usr/local/bin', function(exists) { - console.log(exists); // ==> Boolean -}); - -// Or multiple ones -isbin('mysql', ['/usr/local/bin', '/home/me/bins'], function(exists) { - console.log(exists); // ==> Boolean -}); -``` - -There are also synchronous versions available - -```js -var exists = isbin('mysql'); -var exists = isbin('mysql', '/usr/local/bin'); -var exists = isbin('mysql', ['/usr/local/bin', '/home/me/bins']); -``` - -# Running the tests - -```bash -$ npm install -$ make test -``` - -# License - -(The MIT License) - -Copyright (c) 2012 Mario Behrendt info@mario-behrendt.de, Stephan Hoyer <ste.hoyer@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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/index.js deleted file mode 100644 index bb0a047c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/lib/index.js deleted file mode 100644 index 1b8a5cac..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/lib/index.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Require dependencies - */ - -var fs = require('fs') - , async = require('async'); - -/** - * Check if given binary exists - * - * @param {String} bin Binary to test - * @param {String|Array} additional Additional paths to check - * @param {Function(result)} isbinChecked Callback when check is done async, optional - * @return {Boolean} True if binary was found - */ - -function isbin(bin, additional, isbinChecked) { - // isbin(bin, cb) - if (!isbinChecked) isbinChecked = additional; - - // Read $PATH to get set up bin folders - var paths = process.env.PATH.split(':') || []; - - // isbin(bin, 'path', cb) - if ('string' === typeof additional) { - paths.push(additional); - } - - // isbin(bin, ['path1', 'path2'], cb) - if ('object' === typeof additional && additional.length !== null) { - paths.concat(additional); - } - - // async check - if ('function' === typeof isbinChecked) { - return async.some(paths, function(path, pathChecked) { - fs.exists(path + '/' + bin, pathChecked); - }, isbinChecked); - } - - // sync check - return paths.reverse().some(function(path) { - return fs.existsSync(path + '/' + bin); - }); -}; - -/** - * Expose module - */ - -module.exports = isbin; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.gitmodules b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.gitmodules deleted file mode 100644 index a9aae984..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.gitmodules +++ /dev/null @@ -1,9 +0,0 @@ -[submodule "deps/nodeunit"] - path = deps/nodeunit - url = git://github.com/caolan/nodeunit.git -[submodule "deps/UglifyJS"] - path = deps/UglifyJS - url = https://github.com/mishoo/UglifyJS.git -[submodule "deps/nodelint"] - path = deps/nodelint - url = https://github.com/tav/nodelint.git diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.npmignore deleted file mode 100644 index 9bdfc97c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -deps -dist -test -nodelint.cfg \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/LICENSE deleted file mode 100644 index b7f9d500..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010 Caolan McMahon - -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/Makefile deleted file mode 100644 index bad647c6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -PACKAGE = asyncjs -NODEJS = $(if $(shell test -f /usr/bin/nodejs && echo "true"),nodejs,node) -CWD := $(shell pwd) -NODEUNIT = $(CWD)/node_modules/nodeunit/bin/nodeunit -UGLIFY = $(CWD)/node_modules/uglify-js/bin/uglifyjs -NODELINT = $(CWD)/node_modules/nodelint/nodelint - -BUILDDIR = dist - -all: clean test build - -build: $(wildcard lib/*.js) - mkdir -p $(BUILDDIR) - $(UGLIFY) lib/async.js > $(BUILDDIR)/async.min.js - -test: - $(NODEUNIT) test - -clean: - rm -rf $(BUILDDIR) - -lint: - $(NODELINT) --config nodelint.cfg lib/async.js - -.PHONY: test build all diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/README.md deleted file mode 100644 index 1bbbc477..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/README.md +++ /dev/null @@ -1,1021 +0,0 @@ -# Async.js - -Async is a utility module which provides straight-forward, powerful functions -for working with asynchronous JavaScript. Although originally designed for -use with [node.js](http://nodejs.org), it can also be used directly in the -browser. - -Async provides around 20 functions that include the usual 'functional' -suspects (map, reduce, filter, forEach…) as well as some common patterns -for asynchronous control flow (parallel, series, waterfall…). All these -functions assume you follow the node.js convention of providing a single -callback as the last argument of your async function. - - -## Quick Examples - - async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file - }); - - async.filter(['file1','file2','file3'], path.exists, function(results){ - // results now equals an array of the existing files - }); - - async.parallel([ - function(){ ... }, - function(){ ... } - ], callback); - - async.series([ - function(){ ... }, - function(){ ... } - ]); - -There are many more functions available so take a look at the docs below for a -full list. This module aims to be comprehensive, so if you feel anything is -missing please create a GitHub issue for it. - - -## Download - -Releases are available for download from -[GitHub](http://github.com/caolan/async/downloads). -Alternatively, you can install using Node Package Manager (npm): - - npm install async - - -__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 17.5kb Uncompressed - -__Production:__ [async.min.js](https://github.com/caolan/async/raw/master/dist/async.min.js) - 1.7kb Packed and Gzipped - - -## In the Browser - -So far its been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage: - - <script type="text/javascript" src="async.js"></script> - <script type="text/javascript"> - - async.map(data, asyncProcess, function(err, results){ - alert(results); - }); - - </script> - - -## Documentation - -### Collections - -* [forEach](#forEach) -* [map](#map) -* [filter](#filter) -* [reject](#reject) -* [reduce](#reduce) -* [detect](#detect) -* [sortBy](#sortBy) -* [some](#some) -* [every](#every) -* [concat](#concat) - -### Control Flow - -* [series](#series) -* [parallel](#parallel) -* [whilst](#whilst) -* [until](#until) -* [waterfall](#waterfall) -* [queue](#queue) -* [auto](#auto) -* [iterator](#iterator) -* [apply](#apply) -* [nextTick](#nextTick) - -### Utils - -* [memoize](#memoize) -* [unmemoize](#unmemoize) -* [log](#log) -* [dir](#dir) -* [noConflict](#noConflict) - - -## Collections - -<a name="forEach" /> -### forEach(arr, iterator, callback) - -Applies an iterator function to each item in an array, in parallel. -The iterator is called with an item from the list and a callback for when it -has finished. If the iterator passes an error to this callback, the main -callback for the forEach function is immediately called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - - // assuming openFiles is an array of file names and saveFile is a function - // to save the modified contents of that file: - - async.forEach(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error - }); - ---------------------------------------- - -<a name="forEachSeries" /> -### forEachSeries(arr, iterator, callback) - -The same as forEach only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. This means the iterator functions will complete in order. - - ---------------------------------------- - -<a name="forEachLimit" /> -### forEachLimit(arr, limit, iterator, callback) - -The same as forEach only the iterator is applied to batches of items in the -array, in series. The next batch of iterators is only called once the current -one has completed processing. - -__Arguments__ - -* arr - An array to iterate over. -* limit - How many items should be in each batch. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - - // Assume documents is an array of JSON objects and requestApi is a - // function that interacts with a rate-limited REST api. - - async.forEachLimit(documents, 20, requestApi, function(err){ - // if any of the saves produced an error, err would equal that error - }); ---------------------------------------- - -<a name="map" /> -### map(arr, iterator, callback) - -Produces a new array of values by mapping each value in the given array through -the iterator function. The iterator is called with an item from the array and a -callback for when it has finished processing. The callback takes 2 arguments, -an error and the transformed item from the array. If the iterator passes an -error to this callback, the main callback for the map function is immediately -called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order, however -the results array will be in the same order as the original array. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed - with an error (which can be null) and a transformed item. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array of the - transformed items from the original array. - -__Example__ - - async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file - }); - ---------------------------------------- - -<a name="mapSeries" /> -### mapSeries(arr, iterator, callback) - -The same as map only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - - ---------------------------------------- - -<a name="filter" /> -### filter(arr, iterator, callback) - -__Alias:__ select - -Returns a new array of all the values which pass an async truth test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like path.exists. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(results) - A callback which is called after all the iterator - functions have finished. - -__Example__ - - async.filter(['file1','file2','file3'], path.exists, function(results){ - // results now equals an array of the existing files - }); - ---------------------------------------- - -<a name="filterSeries" /> -### filterSeries(arr, iterator, callback) - -__alias:__ selectSeries - -The same as filter only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - ---------------------------------------- - -<a name="reject" /> -### reject(arr, iterator, callback) - -The opposite of filter. Removes values that pass an async truth test. - ---------------------------------------- - -<a name="rejectSeries" /> -### rejectSeries(arr, iterator, callback) - -The same as filter, only the iterator is applied to each item in the array -in series. - - ---------------------------------------- - -<a name="reduce" /> -### reduce(arr, memo, iterator, callback) - -__aliases:__ inject, foldl - -Reduces a list of values into a single value using an async iterator to return -each successive step. Memo is the initial state of the reduction. This -function only operates in series. For performance reasons, it may make sense to -split a call to this function into a parallel map, then use the normal -Array.prototype.reduce on the results. This function is for situations where -each step in the reduction needs to be async, if you can get the data before -reducing it then its probably a good idea to do so. - -__Arguments__ - -* arr - An array to iterate over. -* memo - The initial state of the reduction. -* iterator(memo, item, callback) - A function applied to each item in the - array to produce the next step in the reduction. The iterator is passed a - callback which accepts an optional error as its first argument, and the state - of the reduction as the second. If an error is passed to the callback, the - reduction is stopped and the main callback is immediately called with the - error. -* callback(err, result) - A callback which is called after all the iterator - functions have finished. Result is the reduced value. - -__Example__ - - async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); - }, function(err, result){ - // result is now equal to the last value of memo, which is 6 - }); - ---------------------------------------- - -<a name="reduceRight" /> -### reduceRight(arr, memo, iterator, callback) - -__Alias:__ foldr - -Same as reduce, only operates on the items in the array in reverse order. - - ---------------------------------------- - -<a name="detect" /> -### detect(arr, iterator, callback) - -Returns the first value in a list that passes an async truth test. The -iterator is applied in parallel, meaning the first iterator to return true will -fire the detect callback with that result. That means the result might not be -the first item in the original array (in terms of order) that passes the test. - -If order within the original array is important then look at detectSeries. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value undefined if none passed. - -__Example__ - - async.detect(['file1','file2','file3'], path.exists, function(result){ - // result now equals the first file in the list that exists - }); - ---------------------------------------- - -<a name="detectSeries" /> -### detectSeries(arr, iterator, callback) - -The same as detect, only the iterator is applied to each item in the array -in series. This means the result is always the first in the original array (in -terms of array order) that passes the truth test. - - ---------------------------------------- - -<a name="sortBy" /> -### sortBy(arr, iterator, callback) - -Sorts a list by the results of running each value through an async iterator. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed - with an error (which can be null) and a value to use as the sort criteria. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is the items from - the original array sorted by the values returned by the iterator calls. - -__Example__ - - async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); - }, function(err, results){ - // results is now the original array of files sorted by - // modified date - }); - - ---------------------------------------- - -<a name="some" /> -### some(arr, iterator, callback) - -__Alias:__ any - -Returns true if at least one element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like path.exists. Once any iterator -call returns true, the main callback is immediately called. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - either true or false depending on the values of the async tests. - -__Example__ - - async.some(['file1','file2','file3'], path.exists, function(result){ - // if result is true then at least one of the files exists - }); - ---------------------------------------- - -<a name="every" /> -### every(arr, iterator, callback) - -__Alias:__ all - -Returns true if every element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like path.exists. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(result) - A callback which is called after all the iterator - functions have finished. Result will be either true or false depending on - the values of the async tests. - -__Example__ - - async.every(['file1','file2','file3'], path.exists, function(result){ - // if result is true then every file exists - }); - ---------------------------------------- - -<a name="concat" /> -### concat(arr, iterator, callback) - -Applies an iterator to each item in a list, concatenating the results. Returns the -concatenated list. The iterators are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of the arguments passed to the iterator function. - -__Arguments__ - -* arr - An array to iterate over -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed - with an error (which can be null) and an array of results. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array containing - the concatenated results of the iterator function. - -__Example__ - - async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories - }); - ---------------------------------------- - -<a name="concatSeries" /> -### concatSeries(arr, iterator, callback) - -Same as async.concat, but executes in series instead of parallel. - - -## Control Flow - -<a name="series" /> -### series(tasks, [callback]) - -Run an array of functions in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run and the callback for the series is -immediately called with the value of the error. Once the tasks have completed, -the results are passed to the final callback as an array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.series. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback it must call on completion. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets an array of all the arguments passed to - the callbacks used in the array. - -__Example__ - - async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - }, - ], - // optional callback - function(err, results){ - // results is now equal to ['one', 'two'] - }); - - - // an example using an object instead of an array - async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - }, - }, - function(err, results) { - // results is now equal to: {one: 1, two: 2} - }); - - ---------------------------------------- - -<a name="parallel" /> -### parallel(tasks, [callback]) - -Run an array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main callback is immediately called with the value of the error. -Once the tasks have completed, the results are passed to the final callback as an -array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.parallel. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed a - callback it must call on completion. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets an array of all the arguments passed to - the callbacks used in the array. - -__Example__ - - async.parallel([ - function(callback){ - setTimeout(function(){ - callback(null, 'one'); - }, 200); - }, - function(callback){ - setTimeout(function(){ - callback(null, 'two'); - }, 100); - }, - ], - // optional callback - function(err, results){ - // the results array will equal ['one','two'] even though - // the second function had a shorter timeout. - }); - - - // an example using an object instead of an array - async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - }, - }, - function(err, results) { - // results is now equals to: {one: 1, two: 2} - }); - - ---------------------------------------- - -<a name="whilst" /> -### whilst(test, fn, callback) - -Repeatedly call fn, while test returns true. Calls the callback when stopped, -or an error occurs. - -__Arguments__ - -* test() - synchronous truth test to perform before each execution of fn. -* fn(callback) - A function to call each time the test passes. The function is - passed a callback which must be called once it has completed with an optional - error as the first argument. -* callback(err) - A callback which is called after the test fails and repeated - execution of fn has stopped. - -__Example__ - - var count = 0; - - async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } - ); - - ---------------------------------------- - -<a name="until" /> -### until(test, fn, callback) - -Repeatedly call fn, until test returns true. Calls the callback when stopped, -or an error occurs. - -The inverse of async.whilst. - - ---------------------------------------- - -<a name="waterfall" /> -### waterfall(tasks, [callback]) - -Runs an array of functions in series, each passing their results to the next in -the array. However, if any of the functions pass an error to the callback, the -next function is not executed and the main callback is immediately called with -the error. - -__Arguments__ - -* tasks - An array of functions to run, each function is passed a callback it - must call on completion. -* callback(err, [results]) - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - - async.waterfall([ - function(callback){ - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback){ - callback(null, 'three'); - }, - function(arg1, callback){ - // arg1 now equals 'three' - callback(null, 'done'); - } - ], function (err, result) { - // result now equals 'done' - }); - - ---------------------------------------- - -<a name="queue" /> -### queue(worker, concurrency) - -Creates a queue object with the specified concurrency. Tasks added to the -queue will be processed in parallel (up to the concurrency limit). If all -workers are in progress, the task is queued until one is available. Once -a worker has completed a task, the task's callback is called. - -__Arguments__ - -* worker(task, callback) - An asynchronous function for processing a queued - task. -* concurrency - An integer for determining how many worker functions should be - run in parallel. - -__Queue objects__ - -The queue object returned by this function has the following properties and -methods: - -* length() - a function returning the number of items waiting to be processed. -* concurrency - an integer for determining how many worker functions should be - run in parallel. This property can be changed after a queue is created to - alter the concurrency on-the-fly. -* push(task, [callback]) - add a new task to the queue, the callback is called - once the worker has finished processing the task. - instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list. -* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued -* empty - a callback that is called when the last item from the queue is given to a worker -* drain - a callback that is called when the last item from the queue has returned from the worker - -__Example__ - - // create a queue object with concurrency 2 - - var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); - }, 2); - - - // assign a callback - q.drain = function() { - console.log('all items have been processed'); - } - - // add some items to the queue - - q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); - }); - q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); - }); - - // add some items to the queue (batch-wise) - - q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing bar'); - }); - - ---------------------------------------- - -<a name="auto" /> -### auto(tasks, [callback]) - -Determines the best order for running functions based on their requirements. -Each function can optionally depend on other functions being completed first, -and each function is run as soon as its requirements are satisfied. If any of -the functions pass an error to their callback, that function will not complete -(so any other functions depending on it will not run) and the main callback -will be called immediately with the error. Functions also receive an object -containing the results of functions which have completed so far. - -__Arguments__ - -* tasks - An object literal containing named functions or an array of - requirements, with the function itself the last item in the array. The key - used for each function or array is used when specifying requirements. The - syntax is easier to understand by looking at the example. -* callback(err, results) - An optional callback which is called when all the - tasks have been completed. The callback will receive an error as an argument - if any tasks pass an error to their callback. If all tasks complete - successfully, it will receive an object containing their results. - -__Example__ - - async.auto({ - get_data: function(callback){ - // async code to get some data - }, - make_folder: function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - }, - write_file: ['get_data', 'make_folder', function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, filename); - }], - email_link: ['write_file', function(callback, results){ - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - }] - }); - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - - async.parallel([ - function(callback){ - // async code to get some data - }, - function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - } - ], - function(results){ - async.series([ - function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - }, - email_link: function(callback){ - // once the file is written let's email a link to it... - } - ]); - }); - -For a complicated series of async tasks using the auto function makes adding -new tasks much easier and makes the code more readable. - - ---------------------------------------- - -<a name="iterator" /> -### iterator(tasks) - -Creates an iterator function which calls the next function in the array, -returning a continuation to call the next one after that. Its also possible to -'peek' the next iterator by doing iterator.next(). - -This function is used internally by the async module but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* tasks - An array of functions to run, each function is passed a callback it - must call on completion. - -__Example__ - - var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } - ]); - - node> var iterator2 = iterator(); - 'one' - node> var iterator3 = iterator2(); - 'two' - node> iterator3(); - 'three' - node> var nextfn = iterator2.next(); - node> nextfn(); - 'three' - - ---------------------------------------- - -<a name="apply" /> -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied, a useful -shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - - // using apply - - async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), - ]); - - - // the same process without using apply - - async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - }, - ]); - -It's possible to pass any number of additional arguments when calling the -continuation: - - node> var fn = async.apply(sys.puts, 'one'); - node> fn('two', 'three'); - one - two - three - ---------------------------------------- - -<a name="nextTick" /> -### nextTick(callback) - -Calls the callback on a later loop around the event loop. In node.js this just -calls process.nextTick, in the browser it falls back to setTimeout(callback, 0), -which means other higher priority events may precede the execution of the callback. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* callback - The function to call on a later loop around the event loop. - -__Example__ - - var call_order = []; - async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two] - }); - call_order.push('one') - - -## Utils - -<a name="memoize" /> -### memoize(fn, [hasher]) - -Caches the results of an async function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -__Arguments__ - -* fn - the function you to proxy and cache results from. -* hasher - an optional function for generating a custom hash for storing - results, it has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - - var slow_fn = function (name, callback) { - // do something - callback(null, result); - }; - var fn = async.memoize(slow_fn); - - // fn can now be used as if it were slow_fn - fn('some name', function () { - // callback - }); - -<a name="unmemoize" /> -### unmemoize(fn) - -Undoes a memoized function, reverting it to the original, unmemoized -form. Comes handy in tests. - -__Arguments__ - -* fn - the memoized function - -<a name="log" /> -### log(function, arguments) - -Logs the result of an async function to the console. Only works in node.js or -in browsers that support console.log and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.log is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - - var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); - }; - - node> async.log(hello, 'world'); - 'hello world' - - ---------------------------------------- - -<a name="dir" /> -### dir(function, arguments) - -Logs the result of an async function to the console using console.dir to -display the properties of the resulting object. Only works in node.js or -in browsers that support console.dir and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.dir is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - - var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); - }; - - node> async.dir(hello, 'world'); - {hello: 'world'} - - ---------------------------------------- - -<a name="noConflict" /> -### noConflict() - -Changes the value of async back to its original value, returning a reference to the -async object. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/index.js deleted file mode 100644 index 8e238453..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// This file is just added for convenience so this repository can be -// directly checked out into a project's deps folder -module.exports = require('./lib/async'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/lib/async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/lib/async.js deleted file mode 100644 index 7cc4f5ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/lib/async.js +++ /dev/null @@ -1,692 +0,0 @@ -/*global setTimeout: false, console: false */ -(function () { - - var async = {}; - - // global on the server, window in the browser - var root = this, - previous_async = root.async; - - if (typeof module !== 'undefined' && module.exports) { - module.exports = async; - } - else { - root.async = async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - //// cross-browser compatiblity functions //// - - var _forEach = function (arr, iterator) { - if (arr.forEach) { - return arr.forEach(iterator); - } - for (var i = 0; i < arr.length; i += 1) { - iterator(arr[i], i, arr); - } - }; - - var _map = function (arr, iterator) { - if (arr.map) { - return arr.map(iterator); - } - var results = []; - _forEach(arr, function (x, i, a) { - results.push(iterator(x, i, a)); - }); - return results; - }; - - var _reduce = function (arr, iterator, memo) { - if (arr.reduce) { - return arr.reduce(iterator, memo); - } - _forEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - }; - - var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - if (typeof process === 'undefined' || !(process.nextTick)) { - async.nextTick = function (fn) { - setTimeout(fn, 0); - }; - } - else { - async.nextTick = process.nextTick; - } - - async.forEach = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - _forEach(arr, function (x) { - iterator(x, function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed === arr.length) { - callback(null); - } - } - }); - }); - }; - - async.forEachSeries = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - var iterate = function () { - iterator(arr[completed], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed === arr.length) { - callback(null); - } - else { - iterate(); - } - } - }); - }; - iterate(); - }; - - async.forEachLimit = function (arr, limit, iterator, callback) { - callback = callback || function () {}; - if (!arr.length || limit <= 0) { - return callback(); - } - var completed = 0; - var started = 0; - var running = 0; - - (function replenish () { - if (completed === arr.length) { - return callback(); - } - - while (running < limit && started < arr.length) { - started += 1; - running += 1; - iterator(arr[started - 1], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - running -= 1; - if (completed === arr.length) { - callback(); - } - else { - replenish(); - } - } - }); - } - })(); - }; - - - var doParallel = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.forEach].concat(args)); - }; - }; - var doSeries = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.forEachSeries].concat(args)); - }; - }; - - - var _asyncMap = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (err, v) { - results[x.index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - }; - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.reduce = function (arr, memo, iterator, callback) { - async.forEachSeries(arr, function (x, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - // inject alias - async.inject = async.reduce; - // foldl alias - async.foldl = async.reduce; - - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, function (x) { - return x; - }).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - // foldr alias - async.foldr = async.reduceRight; - - var _filter = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.filter = doParallel(_filter); - async.filterSeries = doSeries(_filter); - // select alias - async.select = async.filter; - async.selectSeries = async.filterSeries; - - var _reject = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (!v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.reject = doParallel(_reject); - async.rejectSeries = doSeries(_reject); - - var _detect = function (eachfn, arr, iterator, main_callback) { - eachfn(arr, function (x, callback) { - iterator(x, function (result) { - if (result) { - main_callback(x); - main_callback = function () {}; - } - else { - callback(); - } - }); - }, function (err) { - main_callback(); - }); - }; - async.detect = doParallel(_detect); - async.detectSeries = doSeries(_detect); - - async.some = function (arr, iterator, main_callback) { - async.forEach(arr, function (x, callback) { - iterator(x, function (v) { - if (v) { - main_callback(true); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(false); - }); - }; - // any alias - async.any = async.some; - - async.every = function (arr, iterator, main_callback) { - async.forEach(arr, function (x, callback) { - iterator(x, function (v) { - if (!v) { - main_callback(false); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(true); - }); - }; - // all alias - async.all = async.every; - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - var fn = function (left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }; - callback(null, _map(results.sort(fn), function (x) { - return x.value; - })); - } - }); - }; - - async.auto = function (tasks, callback) { - callback = callback || function () {}; - var keys = _keys(tasks); - if (!keys.length) { - return callback(null); - } - - var results = {}; - - var listeners = []; - var addListener = function (fn) { - listeners.unshift(fn); - }; - var removeListener = function (fn) { - for (var i = 0; i < listeners.length; i += 1) { - if (listeners[i] === fn) { - listeners.splice(i, 1); - return; - } - } - }; - var taskComplete = function () { - _forEach(listeners.slice(0), function (fn) { - fn(); - }); - }; - - addListener(function () { - if (_keys(results).length === keys.length) { - callback(null, results); - callback = function () {}; - } - }); - - _forEach(keys, function (k) { - var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k]; - var taskCallback = function (err) { - if (err) { - callback(err); - // stop subsequent errors hitting callback multiple times - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - taskComplete(); - } - }; - var requires = task.slice(0, Math.abs(task.length - 1)) || []; - var ready = function () { - return _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - }; - if (ready()) { - task[task.length - 1](taskCallback, results); - } - else { - var listener = function () { - if (ready()) { - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - }; - addListener(listener); - } - }); - }; - - async.waterfall = function (tasks, callback) { - callback = callback || function () {}; - if (!tasks.length) { - return callback(); - } - var wrapIterator = function (iterator) { - return function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - async.nextTick(function () { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(async.iterator(tasks))(); - }; - - async.parallel = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.map(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - async.forEach(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.series = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.mapSeries(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - async.forEachSeries(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.iterator = function (tasks) { - var makeCallback = function (index) { - var fn = function () { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - }; - return makeCallback(0); - }; - - async.apply = function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return fn.apply( - null, args.concat(Array.prototype.slice.call(arguments)) - ); - }; - }; - - var _concat = function (eachfn, arr, fn, callback) { - var r = []; - eachfn(arr, function (x, cb) { - fn(x, function (err, y) { - r = r.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, r); - }); - }; - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - if (test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.whilst(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.until = function (test, iterator, callback) { - if (!test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.until(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.queue = function (worker, concurrency) { - var workers = 0; - var q = { - tasks: [], - concurrency: concurrency, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _forEach(data, function(task) { - q.tasks.push({ - data: task, - callback: typeof callback === 'function' ? callback : null - }); - if (q.saturated && q.tasks.length == concurrency) { - q.saturated(); - } - async.nextTick(q.process); - }); - }, - process: function () { - if (workers < q.concurrency && q.tasks.length) { - var task = q.tasks.shift(); - if(q.empty && q.tasks.length == 0) q.empty(); - workers += 1; - worker(task.data, function () { - workers -= 1; - if (task.callback) { - task.callback.apply(task, arguments); - } - if(q.drain && q.tasks.length + workers == 0) q.drain(); - q.process(); - }); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - } - }; - return q; - }; - - var _console_fn = function (name) { - return function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - fn.apply(null, args.concat([function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (typeof console !== 'undefined') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _forEach(args, function (x) { - console[name](x); - }); - } - } - }])); - }; - }; - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - hasher = hasher || function (x) { - return x; - }; - var memoized = function () { - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - var key = hasher.apply(null, args); - if (key in memo) { - callback.apply(null, memo[key]); - } - else if (key in queues) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([function () { - memo[key] = arguments; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, arguments); - } - }])); - } - }; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - -}()); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/package.json deleted file mode 100644 index 31e18559..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "async", - "description": "Higher-order functions and common patterns for asynchronous code", - "main": "./index", - "author": { - "name": "Caolan McMahon" - }, - "version": "0.1.22", - "repository": { - "type": "git", - "url": "http://github.com/caolan/async.git" - }, - "bugs": { - "url": "http://github.com/caolan/async/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/caolan/async/raw/master/LICENSE" - } - ], - "devDependencies": { - "nodeunit": ">0.0.0", - "uglify-js": "1.2.x", - "nodelint": ">0.0.0" - }, - "readme": "# Async.js\n\nAsync is a utility module which provides straight-forward, powerful functions\nfor working with asynchronous JavaScript. Although originally designed for\nuse with [node.js](http://nodejs.org), it can also be used directly in the\nbrowser.\n\nAsync provides around 20 functions that include the usual 'functional'\nsuspects (map, reduce, filter, forEach…) as well as some common patterns\nfor asynchronous control flow (parallel, series, waterfall…). All these\nfunctions assume you follow the node.js convention of providing a single\ncallback as the last argument of your async function.\n\n\n## Quick Examples\n\n async.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n });\n\n async.filter(['file1','file2','file3'], path.exists, function(results){\n // results now equals an array of the existing files\n });\n\n async.parallel([\n function(){ ... },\n function(){ ... }\n ], callback);\n\n async.series([\n function(){ ... },\n function(){ ... }\n ]);\n\nThere are many more functions available so take a look at the docs below for a\nfull list. This module aims to be comprehensive, so if you feel anything is\nmissing please create a GitHub issue for it.\n\n\n## Download\n\nReleases are available for download from\n[GitHub](http://github.com/caolan/async/downloads).\nAlternatively, you can install using Node Package Manager (npm):\n\n npm install async\n\n\n__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 17.5kb Uncompressed\n\n__Production:__ [async.min.js](https://github.com/caolan/async/raw/master/dist/async.min.js) - 1.7kb Packed and Gzipped\n\n\n## In the Browser\n\nSo far its been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage:\n\n <script type=\"text/javascript\" src=\"async.js\"></script>\n <script type=\"text/javascript\">\n\n async.map(data, asyncProcess, function(err, results){\n alert(results);\n });\n\n </script>\n\n\n## Documentation\n\n### Collections\n\n* [forEach](#forEach)\n* [map](#map)\n* [filter](#filter)\n* [reject](#reject)\n* [reduce](#reduce)\n* [detect](#detect)\n* [sortBy](#sortBy)\n* [some](#some)\n* [every](#every)\n* [concat](#concat)\n\n### Control Flow\n\n* [series](#series)\n* [parallel](#parallel)\n* [whilst](#whilst)\n* [until](#until)\n* [waterfall](#waterfall)\n* [queue](#queue)\n* [auto](#auto)\n* [iterator](#iterator)\n* [apply](#apply)\n* [nextTick](#nextTick)\n\n### Utils\n\n* [memoize](#memoize)\n* [unmemoize](#unmemoize)\n* [log](#log)\n* [dir](#dir)\n* [noConflict](#noConflict)\n\n\n## Collections\n\n<a name=\"forEach\" />\n### forEach(arr, iterator, callback)\n\nApplies an iterator function to each item in an array, in parallel.\nThe iterator is called with an item from the list and a callback for when it\nhas finished. If the iterator passes an error to this callback, the main\ncallback for the forEach function is immediately called with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n // assuming openFiles is an array of file names and saveFile is a function\n // to save the modified contents of that file:\n\n async.forEach(openFiles, saveFile, function(err){\n // if any of the saves produced an error, err would equal that error\n });\n\n---------------------------------------\n\n<a name=\"forEachSeries\" />\n### forEachSeries(arr, iterator, callback)\n\nThe same as forEach only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. This means the iterator functions will complete in order.\n\n\n---------------------------------------\n\n<a name=\"forEachLimit\" />\n### forEachLimit(arr, limit, iterator, callback)\n\nThe same as forEach only the iterator is applied to batches of items in the\narray, in series. The next batch of iterators is only called once the current\none has completed processing.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - How many items should be in each batch.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n // Assume documents is an array of JSON objects and requestApi is a\n // function that interacts with a rate-limited REST api.\n\n async.forEachLimit(documents, 20, requestApi, function(err){\n // if any of the saves produced an error, err would equal that error\n });\n---------------------------------------\n\n<a name=\"map\" />\n### map(arr, iterator, callback)\n\nProduces a new array of values by mapping each value in the given array through\nthe iterator function. The iterator is called with an item from the array and a\ncallback for when it has finished processing. The callback takes 2 arguments, \nan error and the transformed item from the array. If the iterator passes an\nerror to this callback, the main callback for the map function is immediately\ncalled with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order, however\nthe results array will be in the same order as the original array.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed\n with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n async.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n });\n\n---------------------------------------\n\n<a name=\"mapSeries\" />\n### mapSeries(arr, iterator, callback)\n\nThe same as map only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n---------------------------------------\n\n<a name=\"filter\" />\n### filter(arr, iterator, callback)\n\n__Alias:__ select\n\nReturns a new array of all the values which pass an async truth test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists. This operation is\nperformed in parallel, but the results array will be in the same order as the\noriginal.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(results) - A callback which is called after all the iterator\n functions have finished.\n\n__Example__\n\n async.filter(['file1','file2','file3'], path.exists, function(results){\n // results now equals an array of the existing files\n });\n\n---------------------------------------\n\n<a name=\"filterSeries\" />\n### filterSeries(arr, iterator, callback)\n\n__alias:__ selectSeries\n\nThe same as filter only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n---------------------------------------\n\n<a name=\"reject\" />\n### reject(arr, iterator, callback)\n\nThe opposite of filter. Removes values that pass an async truth test.\n\n---------------------------------------\n\n<a name=\"rejectSeries\" />\n### rejectSeries(arr, iterator, callback)\n\nThe same as filter, only the iterator is applied to each item in the array\nin series.\n\n\n---------------------------------------\n\n<a name=\"reduce\" />\n### reduce(arr, memo, iterator, callback)\n\n__aliases:__ inject, foldl\n\nReduces a list of values into a single value using an async iterator to return\neach successive step. Memo is the initial state of the reduction. This\nfunction only operates in series. For performance reasons, it may make sense to\nsplit a call to this function into a parallel map, then use the normal\nArray.prototype.reduce on the results. This function is for situations where\neach step in the reduction needs to be async, if you can get the data before\nreducing it then its probably a good idea to do so.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* memo - The initial state of the reduction.\n* iterator(memo, item, callback) - A function applied to each item in the\n array to produce the next step in the reduction. The iterator is passed a\n callback which accepts an optional error as its first argument, and the state\n of the reduction as the second. If an error is passed to the callback, the\n reduction is stopped and the main callback is immediately called with the\n error.\n* callback(err, result) - A callback which is called after all the iterator\n functions have finished. Result is the reduced value.\n\n__Example__\n\n async.reduce([1,2,3], 0, function(memo, item, callback){\n // pointless async:\n process.nextTick(function(){\n callback(null, memo + item)\n });\n }, function(err, result){\n // result is now equal to the last value of memo, which is 6\n });\n\n---------------------------------------\n\n<a name=\"reduceRight\" />\n### reduceRight(arr, memo, iterator, callback)\n\n__Alias:__ foldr\n\nSame as reduce, only operates on the items in the array in reverse order.\n\n\n---------------------------------------\n\n<a name=\"detect\" />\n### detect(arr, iterator, callback)\n\nReturns the first value in a list that passes an async truth test. The\niterator is applied in parallel, meaning the first iterator to return true will\nfire the detect callback with that result. That means the result might not be\nthe first item in the original array (in terms of order) that passes the test.\n\nIf order within the original array is important then look at detectSeries.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n the first item in the array that passes the truth test (iterator) or the\n value undefined if none passed.\n\n__Example__\n\n async.detect(['file1','file2','file3'], path.exists, function(result){\n // result now equals the first file in the list that exists\n });\n\n---------------------------------------\n\n<a name=\"detectSeries\" />\n### detectSeries(arr, iterator, callback)\n\nThe same as detect, only the iterator is applied to each item in the array\nin series. This means the result is always the first in the original array (in\nterms of array order) that passes the truth test.\n\n\n---------------------------------------\n\n<a name=\"sortBy\" />\n### sortBy(arr, iterator, callback)\n\nSorts a list by the results of running each value through an async iterator.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed\n with an error (which can be null) and a value to use as the sort criteria.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is the items from\n the original array sorted by the values returned by the iterator calls.\n\n__Example__\n\n async.sortBy(['file1','file2','file3'], function(file, callback){\n fs.stat(file, function(err, stats){\n callback(err, stats.mtime);\n });\n }, function(err, results){\n // results is now the original array of files sorted by\n // modified date\n });\n\n\n---------------------------------------\n\n<a name=\"some\" />\n### some(arr, iterator, callback)\n\n__Alias:__ any\n\nReturns true if at least one element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists. Once any iterator\ncall returns true, the main callback is immediately called.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n either true or false depending on the values of the async tests.\n\n__Example__\n\n async.some(['file1','file2','file3'], path.exists, function(result){\n // if result is true then at least one of the files exists\n });\n\n---------------------------------------\n\n<a name=\"every\" />\n### every(arr, iterator, callback)\n\n__Alias:__ all\n\nReturns true if every element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(result) - A callback which is called after all the iterator\n functions have finished. Result will be either true or false depending on\n the values of the async tests.\n\n__Example__\n\n async.every(['file1','file2','file3'], path.exists, function(result){\n // if result is true then every file exists\n });\n\n---------------------------------------\n\n<a name=\"concat\" />\n### concat(arr, iterator, callback)\n\nApplies an iterator to each item in a list, concatenating the results. Returns the\nconcatenated list. The iterators are called in parallel, and the results are\nconcatenated as they return. There is no guarantee that the results array will\nbe returned in the original order of the arguments passed to the iterator function.\n\n__Arguments__\n\n* arr - An array to iterate over\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed\n with an error (which can be null) and an array of results.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array containing\n the concatenated results of the iterator function.\n\n__Example__\n\n async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){\n // files is now a list of filenames that exist in the 3 directories\n });\n\n---------------------------------------\n\n<a name=\"concatSeries\" />\n### concatSeries(arr, iterator, callback)\n\nSame as async.concat, but executes in series instead of parallel.\n\n\n## Control Flow\n\n<a name=\"series\" />\n### series(tasks, [callback])\n\nRun an array of functions in series, each one running once the previous\nfunction has completed. If any functions in the series pass an error to its\ncallback, no more functions are run and the callback for the series is\nimmediately called with the value of the error. Once the tasks have completed,\nthe results are passed to the final callback as an array.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.series.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed\n a callback it must call on completion.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets an array of all the arguments passed to\n the callbacks used in the array.\n\n__Example__\n\n async.series([\n function(callback){\n // do some stuff ...\n callback(null, 'one');\n },\n function(callback){\n // do some more stuff ...\n callback(null, 'two');\n },\n ],\n // optional callback\n function(err, results){\n // results is now equal to ['one', 'two']\n });\n\n\n // an example using an object instead of an array\n async.series({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n },\n },\n function(err, results) {\n // results is now equal to: {one: 1, two: 2}\n });\n\n\n---------------------------------------\n\n<a name=\"parallel\" />\n### parallel(tasks, [callback])\n\nRun an array of functions in parallel, without waiting until the previous\nfunction has completed. If any of the functions pass an error to its\ncallback, the main callback is immediately called with the value of the error.\nOnce the tasks have completed, the results are passed to the final callback as an\narray.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.parallel.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed a\n callback it must call on completion.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets an array of all the arguments passed to\n the callbacks used in the array.\n\n__Example__\n\n async.parallel([\n function(callback){\n setTimeout(function(){\n callback(null, 'one');\n }, 200);\n },\n function(callback){\n setTimeout(function(){\n callback(null, 'two');\n }, 100);\n },\n ],\n // optional callback\n function(err, results){\n // the results array will equal ['one','two'] even though\n // the second function had a shorter timeout.\n });\n\n\n // an example using an object instead of an array\n async.parallel({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n },\n },\n function(err, results) {\n // results is now equals to: {one: 1, two: 2}\n });\n\n\n---------------------------------------\n\n<a name=\"whilst\" />\n### whilst(test, fn, callback)\n\nRepeatedly call fn, while test returns true. Calls the callback when stopped,\nor an error occurs.\n\n__Arguments__\n\n* test() - synchronous truth test to perform before each execution of fn.\n* fn(callback) - A function to call each time the test passes. The function is\n passed a callback which must be called once it has completed with an optional\n error as the first argument.\n* callback(err) - A callback which is called after the test fails and repeated\n execution of fn has stopped.\n\n__Example__\n\n var count = 0;\n\n async.whilst(\n function () { return count < 5; },\n function (callback) {\n count++;\n setTimeout(callback, 1000);\n },\n function (err) {\n // 5 seconds have passed\n }\n );\n\n\n---------------------------------------\n\n<a name=\"until\" />\n### until(test, fn, callback)\n\nRepeatedly call fn, until test returns true. Calls the callback when stopped,\nor an error occurs.\n\nThe inverse of async.whilst.\n\n\n---------------------------------------\n\n<a name=\"waterfall\" />\n### waterfall(tasks, [callback])\n\nRuns an array of functions in series, each passing their results to the next in\nthe array. However, if any of the functions pass an error to the callback, the\nnext function is not executed and the main callback is immediately called with\nthe error.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a callback it\n must call on completion.\n* callback(err, [results]) - An optional callback to run once all the functions\n have completed. This will be passed the results of the last task's callback.\n\n\n\n__Example__\n\n async.waterfall([\n function(callback){\n callback(null, 'one', 'two');\n },\n function(arg1, arg2, callback){\n callback(null, 'three');\n },\n function(arg1, callback){\n // arg1 now equals 'three'\n callback(null, 'done');\n }\n ], function (err, result) {\n // result now equals 'done' \n });\n\n\n---------------------------------------\n\n<a name=\"queue\" />\n### queue(worker, concurrency)\n\nCreates a queue object with the specified concurrency. Tasks added to the\nqueue will be processed in parallel (up to the concurrency limit). If all\nworkers are in progress, the task is queued until one is available. Once\na worker has completed a task, the task's callback is called.\n\n__Arguments__\n\n* worker(task, callback) - An asynchronous function for processing a queued\n task.\n* concurrency - An integer for determining how many worker functions should be\n run in parallel.\n\n__Queue objects__\n\nThe queue object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* concurrency - an integer for determining how many worker functions should be\n run in parallel. This property can be changed after a queue is created to\n alter the concurrency on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n // create a queue object with concurrency 2\n\n var q = async.queue(function (task, callback) {\n console.log('hello ' + task.name);\n callback();\n }, 2);\n\n\n // assign a callback\n q.drain = function() {\n console.log('all items have been processed');\n }\n\n // add some items to the queue\n\n q.push({name: 'foo'}, function (err) {\n console.log('finished processing foo');\n });\n q.push({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n });\n\n // add some items to the queue (batch-wise)\n\n q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) {\n console.log('finished processing bar');\n });\n\n\n---------------------------------------\n\n<a name=\"auto\" />\n### auto(tasks, [callback])\n\nDetermines the best order for running functions based on their requirements.\nEach function can optionally depend on other functions being completed first,\nand each function is run as soon as its requirements are satisfied. If any of\nthe functions pass an error to their callback, that function will not complete\n(so any other functions depending on it will not run) and the main callback\nwill be called immediately with the error. Functions also receive an object\ncontaining the results of functions which have completed so far.\n\n__Arguments__\n\n* tasks - An object literal containing named functions or an array of\n requirements, with the function itself the last item in the array. The key\n used for each function or array is used when specifying requirements. The\n syntax is easier to understand by looking at the example.\n* callback(err, results) - An optional callback which is called when all the\n tasks have been completed. The callback will receive an error as an argument\n if any tasks pass an error to their callback. If all tasks complete\n successfully, it will receive an object containing their results.\n\n__Example__\n\n async.auto({\n get_data: function(callback){\n // async code to get some data\n },\n make_folder: function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n },\n write_file: ['get_data', 'make_folder', function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n callback(null, filename);\n }],\n email_link: ['write_file', function(callback, results){\n // once the file is written let's email a link to it...\n // results.write_file contains the filename returned by write_file.\n }]\n });\n\nThis is a fairly trivial example, but to do this using the basic parallel and\nseries functions would look like this:\n\n async.parallel([\n function(callback){\n // async code to get some data\n },\n function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n }\n ],\n function(results){\n async.series([\n function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n },\n email_link: function(callback){\n // once the file is written let's email a link to it...\n }\n ]);\n });\n\nFor a complicated series of async tasks using the auto function makes adding\nnew tasks much easier and makes the code more readable.\n\n\n---------------------------------------\n\n<a name=\"iterator\" />\n### iterator(tasks)\n\nCreates an iterator function which calls the next function in the array,\nreturning a continuation to call the next one after that. Its also possible to\n'peek' the next iterator by doing iterator.next().\n\nThis function is used internally by the async module but can be useful when\nyou want to manually control the flow of functions in series.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a callback it\n must call on completion.\n\n__Example__\n\n var iterator = async.iterator([\n function(){ sys.p('one'); },\n function(){ sys.p('two'); },\n function(){ sys.p('three'); }\n ]);\n\n node> var iterator2 = iterator();\n 'one'\n node> var iterator3 = iterator2();\n 'two'\n node> iterator3();\n 'three'\n node> var nextfn = iterator2.next();\n node> nextfn();\n 'three'\n\n\n---------------------------------------\n\n<a name=\"apply\" />\n### apply(function, arguments..)\n\nCreates a continuation function with some arguments already applied, a useful\nshorthand when combined with other control flow functions. Any arguments\npassed to the returned function are added to the arguments originally passed\nto apply.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to automatically apply when the\n continuation is called.\n\n__Example__\n\n // using apply\n\n async.parallel([\n async.apply(fs.writeFile, 'testfile1', 'test1'),\n async.apply(fs.writeFile, 'testfile2', 'test2'),\n ]);\n\n\n // the same process without using apply\n\n async.parallel([\n function(callback){\n fs.writeFile('testfile1', 'test1', callback);\n },\n function(callback){\n fs.writeFile('testfile2', 'test2', callback);\n },\n ]);\n\nIt's possible to pass any number of additional arguments when calling the\ncontinuation:\n\n node> var fn = async.apply(sys.puts, 'one');\n node> fn('two', 'three');\n one\n two\n three\n\n---------------------------------------\n\n<a name=\"nextTick\" />\n### nextTick(callback)\n\nCalls the callback on a later loop around the event loop. In node.js this just\ncalls process.nextTick, in the browser it falls back to setTimeout(callback, 0),\nwhich means other higher priority events may precede the execution of the callback.\n\nThis is used internally for browser-compatibility purposes.\n\n__Arguments__\n\n* callback - The function to call on a later loop around the event loop.\n\n__Example__\n\n var call_order = [];\n async.nextTick(function(){\n call_order.push('two');\n // call_order now equals ['one','two]\n });\n call_order.push('one')\n\n\n## Utils\n\n<a name=\"memoize\" />\n### memoize(fn, [hasher])\n\nCaches the results of an async function. When creating a hash to store function\nresults against, the callback is omitted from the hash and an optional hash\nfunction can be used.\n\n__Arguments__\n\n* fn - the function you to proxy and cache results from.\n* hasher - an optional function for generating a custom hash for storing\n results, it has all the arguments applied to it apart from the callback, and\n must be synchronous.\n\n__Example__\n\n var slow_fn = function (name, callback) {\n // do something\n callback(null, result);\n };\n var fn = async.memoize(slow_fn);\n\n // fn can now be used as if it were slow_fn\n fn('some name', function () {\n // callback\n });\n\n<a name=\"unmemoize\" />\n### unmemoize(fn)\n\nUndoes a memoized function, reverting it to the original, unmemoized\nform. Comes handy in tests.\n\n__Arguments__\n\n* fn - the memoized function\n\n<a name=\"log\" />\n### log(function, arguments)\n\nLogs the result of an async function to the console. Only works in node.js or\nin browsers that support console.log and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.log is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n var hello = function(name, callback){\n setTimeout(function(){\n callback(null, 'hello ' + name);\n }, 1000);\n };\n\n node> async.log(hello, 'world');\n 'hello world'\n\n\n---------------------------------------\n\n<a name=\"dir\" />\n### dir(function, arguments)\n\nLogs the result of an async function to the console using console.dir to\ndisplay the properties of the resulting object. Only works in node.js or\nin browsers that support console.dir and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.dir is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n var hello = function(name, callback){\n setTimeout(function(){\n callback(null, {hello: name});\n }, 1000);\n };\n\n node> async.dir(hello, 'world');\n {hello: 'world'}\n\n\n---------------------------------------\n\n<a name=\"noConflict\" />\n### noConflict()\n\nChanges the value of async back to its original value, returning a reference to the\nasync object.\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/caolan/async", - "_id": "async@0.1.22", - "dist": { - "shasum": "3b270eedc0419d6f92a664444ce98e0f59a8fef7" - }, - "_from": "async@0.1.22", - "_resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/package.json deleted file mode 100644 index 1d8c8459..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "isbin", - "version": "0.0.2", - "description": "Checks for available binaries on unix machines", - "main": "index.js", - "engines": { - "node": ">= 0.8.0" - }, - "keywords": [ - "fs", - "bin", - "binary", - "exists", - "check", - "path" - ], - "scripts": { - "test": "make test" - }, - "repository": { - "type": "git", - "url": "git://github.com/behrendtio/isbin.git" - }, - "author": "", - "license": "MIT", - "dependencies": { - "async": "0.1.22" - }, - "devDependencies": { - "mocha": "1.7.3", - "should": "1.2.1" - }, - "readme": "[![Build Status](https://secure.travis-ci.org/mbehrendt/isbin.png?branch=master)](https://travis-ci.org/mbehrendt/isbin)\n\n# Isbin\n\nTiny little helper library to determine if a certain binary is available within $PATH or any additional folder.\n\n# Installation\n\n```bash\n$ npm install isbin\n```\n\n# Usage\n\n```js\nvar isbin = require('isbin');\n\n// Test against $PATH\nisbin('mysql', function(exists) {\n console.log(exists); // ==> Boolean\n});\n\n// With additional path to test\nisbin('mysql', '/usr/local/bin', function(exists) {\n console.log(exists); // ==> Boolean\n});\n\n// Or multiple ones\nisbin('mysql', ['/usr/local/bin', '/home/me/bins'], function(exists) {\n console.log(exists); // ==> Boolean\n});\n```\n\nThere are also synchronous versions available\n\n```js\nvar exists = isbin('mysql');\nvar exists = isbin('mysql', '/usr/local/bin');\nvar exists = isbin('mysql', ['/usr/local/bin', '/home/me/bins']);\n```\n\n# Running the tests\n\n```bash\n$ npm install\n$ make test\n```\n\n# License\n\n(The MIT License)\n\nCopyright (c) 2012 Mario Behrendt info@mario-behrendt.de, Stephan Hoyer <ste.hoyer@gmail.com>\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/behrendtio/isbin/issues" - }, - "homepage": "https://github.com/behrendtio/isbin", - "_id": "isbin@0.0.2", - "dist": { - "shasum": "2a35fb234ad5ee30f78da61b57e8f42ac43ec5a4" - }, - "_from": "isbin@0.0.2", - "_resolved": "https://registry.npmjs.org/isbin/-/isbin-0.0.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/test/isbin.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/test/isbin.js deleted file mode 100644 index 068a38a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/test/isbin.js +++ /dev/null @@ -1,39 +0,0 @@ -var isbin = require('../'); - -describe('isbin', function() { - it('accepts binary, additional path and callback', function(done) { - isbin('ls', '/etc', function(exists) { - exists.should.be.a('boolean'); - done(); - }) - }); - - it('accepts array of paths', function(done) { - isbin('ls', ['/etc', '/home'], function(exists) { - exists.should.be.a('boolean'); - done(); - }); - }); - - it('accepts just binary and callback', function(done) { - isbin('ls', function(exists) { - exists.should.be.a('boolean'); - done(); - }); - }); - - it('accepts binary, additional path and callback', function() { - var exists = isbin('ls', '/etc'); - exists.should.be.a('boolean'); - }); - - it('accepts array of paths', function() { - var exists = isbin('ls', ['/etc', '/home']); - exists.should.be.a('boolean'); - }); - - it('accepts just binary', function() { - var exists = isbin('ls'); - exists.should.be.a('boolean'); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/test/mocha.opts b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/test/mocha.opts deleted file mode 100644 index e5eb9f87..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/isbin/test/mocha.opts +++ /dev/null @@ -1,4 +0,0 @@ ---require should ---bail ---ui bdd ---slow 100 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.editorconfig b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.editorconfig deleted file mode 100644 index e036e247..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -; EditorConfig is awesome: http://EditorConfig.org - -; top-most EditorConfig file -root = true - -; base rules -[*] -end_of_line = lf -insert_final_newline = false -indent_style = space -indent_size = 4 -charset = utf-8 -trim_trailing_whitespace = true - -; The default indent on package.json is 2 spaces, better to keep it so we can -; use `npm install --save` and other features that rewrites the package.json -; file automatically -[package.json] -indent_style = space -indent_size = 2 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.jshintrc b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.jshintrc deleted file mode 100644 index bbdb29cf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.jshintrc +++ /dev/null @@ -1,69 +0,0 @@ -{ - // Settings - "passfail" : false, // Stop on first error. - "maxerr" : 50, // Maximum error before stopping. - - - // Predefined globals whom JSHint will ignore. - "browser" : true, // Standard browser globals e.g. `window`, `document`. - "couch" : false, - "dojo" : false, - "jquery" : true, - "mootools" : false, - "node" : false, - "prototypejs" : false, - "rhino" : false, - "wsh" : false, - - // Custom globals. - "predef" : [ - "define", - "require" - ], - - - // Development. - "debug" : false, // Allow debugger statements e.g. browser breakpoints. - "devel" : false, // Allow developments statements e.g. `console.log();`. - - - // EcmaScript 5. - "es5" : false, // Allow EcmaScript 5 syntax. - "globalstrict" : false, // Allow global "use strict" (also enables 'strict'). - "strict" : false, // Require `use strict` pragma in every file. - - - // The Good Parts. - "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons). - "bitwise" : false, // Prohibit bitwise operators (&, |, ^, etc.). - "boss" : true, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. - "curly" : false, // Require {} for every new block or scope. - "eqeqeq" : true, // Require triple equals i.e. `===`. - "eqnull" : true, // Tolerate use of `== null`. - "evil" : false, // Tolerate use of `eval`. - "expr" : false, // Tolerate `ExpressionStatement` as Programs. - "forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`. - "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` - "latedef" : false, // Prohibit variable use before definition. - "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. - "loopfunc" : false, // Allow functions to be defined within loops. - "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. - "regexdash" : true, // Tolerate unescaped last dash i.e. `[-...]`. - "regexp" : false, // Prohibit `.` and `[^...]` in regular expressions. - "scripturl" : false, // Tolerate script-targeted URLs. - "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. - "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. - "undef" : false, // Require all non-global variables be declared before they are used. - - - // Personal styling prefrences. - "newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`. - "noempty" : true, // Prohipit use of empty blocks. - "nomen" : false, // Prohibit use of initial or trailing underbars in names. - "nonew" : true, // Prohibit use of constructors for side-effects. - "onevar" : false, // Allow only one `var` statement per function. - "plusplus" : false, // Prohibit use of `++` & `--`. - "sub" : false, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. - "trailing" : true, // Prohibit trailing whitespaces. - "white" : false // Check against strict whitespace and indentation rules. -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.npmignore deleted file mode 100644 index 1341acd9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.npmignore +++ /dev/null @@ -1,30 +0,0 @@ -# dumb files -# ========== - -.tmp* -.project -.settings/ -.livereload -.DS_Store? -ehthumbs.db -Icon? -Thumbs.db - - -# stuff not needed by node -# ======================== - -node_modules/ -tests/ -_build/ -doc_html/ -coverage/ - -# we keep the doc/ folder in case npm decides to display it in the future -# also good in case user is using an old version or working offline - -# we also keep the src/ folder in case the user still needs the AMD modules -# after build (see issue #102) - -bower.json -build.js diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.travis.yml deleted file mode 100644 index 36de1532..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ - language: node_js - node_js: - - "0.8" - script: "npm test --coverage" - notifications: - irc: - channels: - - "irc.freenode.org#moutjs" - on_success: always - on_failure: always - use_notice: true - skip_join: true - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/CHANGELOG.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/CHANGELOG.md deleted file mode 100644 index 0f5eac12..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/CHANGELOG.md +++ /dev/null @@ -1,93 +0,0 @@ -mout changelog -============== - -v0.6.0 (2013/05/22) -------------------- - - - add optional delimeter to `string/unCamelCase` - - allow custom char on `number/pad` - - allow underscore characters in `string/removeNonWord` - - accept `level` on `array/flatten` instead of a flag - - convert underscores to camelCase in `string/camelCase` - - remove `create()` from number/currencyFormat - - add `date/dayOfTheYear` - - add `date/diff` - - add `date/isSame` - - add `date/startOf` - - add `date/strftime` - - add `date/timezoneAbbr` - - add `date/timezoneOffset` - - add `date/totalDaysInYear` - - add `date/weekOfTheYear` - - add `function/timeout` - - add `object/bindAll` - - add `object/functions` - - add `time/convert` - - -v0.5.0 (2013/04/04) -------------------- - - - add `array/collect` - - add `callback` parameter to `object/equals` and `object/deepEquals` to allow - custom compare operations. - - normalize behavior in `array/*` methods to treat `null` values as empty - arrays when reading from array - - add `date/parseIso` - - add `date/isLeapYear` - - add `date/totalDaysInMonth` - - add `object/deepMatches` - - change `function/makeIterator_` to use `deepMatches` (affects nearly all - iteration methods) - - add `thisObj` parameter to `array/min` and `array/max` - - -v0.4.0 (2013/02/26) -------------------- - - - add `object/equals` - - add `object/deepEquals` - - add `object/matches`. - - add `lang/is` and `lang/isnt`. - - add `lang/isInteger`. - - add `array/findIndex`. - - add shorthand syntax to `array/*`, `object/*` and `collection/*` methods. - - improve `number/sign` behavior when value is NaN or +0 or -0. - - improve `lang/isNaN` to actually check if value *is not a number* without - coercing value; so `[]`, `""`, `null` and `"12"` are considered NaN (#39). - - improve `string/contains` to match ES6 behavior (add fromIndex argument). - - -v0.3.0 (2013/02/01) -------------------- - - - add `lang/clone`. - - add `lang/toString`. - - add `string/replace`. - - add `string/WHITE_SPACES` - - rename `function/curry` to `function/partial`. - - allow custom chars in `string/trim`, `ltrim`, and `rtrim`. - - convert values to strings in the `string/*` functions. - - -v0.2.0 (2013/01/13) -------------------- - - - fix bug in `math/ceil` for negative radixes. - - change `object/deepFillIn` and `object/deepMixIn` to recurse only if both - existing and new values are plain objects. Will not recurse into arrays - or objects not created by the Object constructor. - - add `lang/isPlainObject` to check if a file is a valid object and is created - by the Object constructor - - change `lang/clone` behavior when dealing with custom types (avoid cloning - it by default) and add second argument to allow custom behavior if needed. - - rename `lang/clone` to `lang/deepClone`. - - add VERSION property to index.js - - simplify `math/floor`, `math/round`, `math/ceil` and `math/countSteps`. - - -v0.1.0 (2013/01/09) -------------------- - -- Rename project from "amd-utils" to "mout" - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/CONTRIBUTING.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/CONTRIBUTING.md deleted file mode 100644 index 65d9add1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/CONTRIBUTING.md +++ /dev/null @@ -1,61 +0,0 @@ -# Contributing - -Fork the repo at https://github.com/mout/mout - - > "Write clearly, don't be too clever" - The Elements of Programming Style - -Avoid unnamed functions and follow the other modules structure. By only using named functions it will be easier to extract the code from the AMD module if needed and it will also give better error messages, JavaScript minifiers like [Google Closure Compiler](http://code.google.com/closure/compiler/) and [UglifyJS](https://github.com/mishoo/UglifyJS) will make sure code is as small/optimized as possible. - - > "Make it clear before you make it faster." - The Elements of Programming Style - -Be sure to always create tests for each proposed module. Features will only be merged if they contain proper tests and documentation. - - > "Good code is its own best documentation." - Steve McConnell - -We should do a code review before merging to make sure names makes sense and implementation is as good as possible. - -Try to split your pull requests into logical groups, the smaller the easier to be reviewed/merged. - - - -## Tests & Code Coverage ## - -Tests can be found inside the `tests` folder, to execute them in the browser open the `tests/runner.html`. The same tests also work on node.js by running `npm test`. - -We should have tests for all methods and ensure we have a high code coverage through our continuous integration server ([travis](https://travis-ci.org/mout/mout)). When you ask for a pull request Travis will automatically run the tests on node.js and check the code coverage as well. - -We run `node build pkg` automatically before any `npm test`, so specs and packages should always be in sync. (will avoid human mistakes) - -To check code coverage run `npm test --coverage`, it will generate the reports inside the `coverage` folder and also log the results. Please note that node.js doesn't execute all code branches since we have some conditionals that are only met on old JavaScript engines (eg. IE 7-8), so we will never have 100% code coverage (but should be close to it). - - - -## Build Script ## - -The [build script](https://github.com/mout/mout/wiki/Build-Script) can be extremely helpful and can avoid human mistakes, use it. - - - -## Admins / Pull Requests ## - -Even if you are an admin (have commit rights) please do pull requests when adding new features or changing current behavior, that way we can review the work and discuss. Feel free to push changes that doesn't affect behavior without asking for a pull request (readme, changelog, build script, typos, refactoring, ...). - - - -## Large changes ## - -If you are proposing some major change, please create an issue to discuss it first. (maybe it's outside the scope of the project) - - - -## Questions / IRC / Wiki / Issue Tracker ## - -When in doubt ask someone on IRC to help you ([#moutjs on irc.freenode.net](http://webchat.freenode.net/?channels=moutjs)) or create a [new issue](http://github.com/mout/mout/issues). - -The [project wiki](https://github.com/mout/mout/wiki) can also be a good resource of information. - - ---- - -Check the [contributors list at github](https://github.com/mout/mout/contributors). - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/LICENSE.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/LICENSE.md deleted file mode 100644 index e9ccc2be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -# The MIT License (MIT) -## Copyright (c) 2012, 2013 moutjs team and contributors (http://moutjs.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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/README.md deleted file mode 100644 index 872943bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/README.md +++ /dev/null @@ -1,63 +0,0 @@ -![mout](http://moutjs.com/logo.png "Modular JavaScript Utilties") - -http://moutjs.com/ - -[![Build Status](https://travis-ci.org/mout/mout.png?branch=master)](https://travis-ci.org/mout/mout) - -All code is library agnostic and consist mostly of helper methods that aren't -directly related with the DOM, the purpose of this library isn't to replace -Dojo, jQuery, YUI, Mootools, etc, but to provide modular solutions for common -problems that aren't solved by most of them. Consider it as a crossbrowser -JavaScript standard library. - - - -## Main goals ## - - - increase code reuse; - - be clear (code should be clean/readable); - - be easy to debug; - - be easy to maintain; - - follow best practices; - - follow standards when possible; - - **don't convert JavaScript into another language!** - - be compatible with other frameworks; - - be modular; - - have unit tests for all modules; - - work on multiple environments (IE7+, modern browsers, node.js); - - - -## What shouldn't be here ## - - - UI components; - - CSS selector engine; - - Event system - pub/sub; - - Template engine; - - Anything that isn't generic enough to be on a standard library; - - Anything that could be a separate library and/or isn't a modular utility... - - - -## API Documentation ## - -Online documentation can be found at http://moutjs.com/ or inside the -`doc` folder. - - - -## FAQ / Wiki / IRC ## - -For more info about project structure, design decisions, tips, how to -contribute, build system, etc, please check the [project -wiki](https://github.com/mout/mout/wiki). - -We also have an IRC channel [#moutjs on -irc.freenode.net](http://webchat.freenode.net/?channels=moutjs) - - - -## License ## - -Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php). - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array.js deleted file mode 100644 index 89d388ba..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array.js +++ /dev/null @@ -1,46 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'append' : require('./array/append'), - 'collect' : require('./array/collect'), - 'combine' : require('./array/combine'), - 'compact' : require('./array/compact'), - 'contains' : require('./array/contains'), - 'difference' : require('./array/difference'), - 'every' : require('./array/every'), - 'filter' : require('./array/filter'), - 'find' : require('./array/find'), - 'findIndex' : require('./array/findIndex'), - 'flatten' : require('./array/flatten'), - 'forEach' : require('./array/forEach'), - 'indexOf' : require('./array/indexOf'), - 'insert' : require('./array/insert'), - 'intersection' : require('./array/intersection'), - 'invoke' : require('./array/invoke'), - 'join' : require('./array/join'), - 'lastIndexOf' : require('./array/lastIndexOf'), - 'map' : require('./array/map'), - 'max' : require('./array/max'), - 'min' : require('./array/min'), - 'pick' : require('./array/pick'), - 'pluck' : require('./array/pluck'), - 'range' : require('./array/range'), - 'reduce' : require('./array/reduce'), - 'reduceRight' : require('./array/reduceRight'), - 'reject' : require('./array/reject'), - 'remove' : require('./array/remove'), - 'removeAll' : require('./array/removeAll'), - 'shuffle' : require('./array/shuffle'), - 'some' : require('./array/some'), - 'sort' : require('./array/sort'), - 'split' : require('./array/split'), - 'toLookup' : require('./array/toLookup'), - 'union' : require('./array/union'), - 'unique' : require('./array/unique'), - 'xor' : require('./array/xor'), - 'zip' : require('./array/zip') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/append.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/append.js deleted file mode 100644 index bf74037e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/append.js +++ /dev/null @@ -1,21 +0,0 @@ - - - /** - * Appends an array to the end of another. - * The first array will be modified. - */ - function append(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var pad = arr1.length, - i = -1, - len = arr2.length; - while (++i < len) { - arr1[pad + i] = arr2[i]; - } - return arr1; - } - module.exports = append; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/collect.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/collect.js deleted file mode 100644 index 58637493..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/collect.js +++ /dev/null @@ -1,27 +0,0 @@ -var append = require('./append'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Maps the items in the array and concatenates the result arrays. - */ - function collect(arr, callback, thisObj){ - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - var value = callback(arr[i], i, arr); - if (value != null) { - append(results, value); - } - } - - return results; - } - - module.exports = collect; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/combine.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/combine.js deleted file mode 100644 index d66e6212..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/combine.js +++ /dev/null @@ -1,22 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Combines an array with all the items of another. - * Does not allow duplicates and is case and type sensitive. - */ - function combine(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var i = -1, len = arr2.length; - while (++i < len) { - if (indexOf(arr1, arr2[i]) === -1) { - arr1.push(arr2[i]); - } - } - - return arr1; - } - module.exports = combine; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/compact.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/compact.js deleted file mode 100644 index 74c176ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/compact.js +++ /dev/null @@ -1,13 +0,0 @@ -var filter = require('./filter'); - - /** - * Remove all null/undefined items from array. - */ - function compact(arr) { - return filter(arr, function(val){ - return (val != null); - }); - } - - module.exports = compact; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/contains.js deleted file mode 100644 index 92bb6ad9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/contains.js +++ /dev/null @@ -1,10 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * If array contains values. - */ - function contains(arr, val) { - return indexOf(arr, val) !== -1; - } - module.exports = contains; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/difference.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/difference.js deleted file mode 100644 index d0570510..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/difference.js +++ /dev/null @@ -1,22 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var some = require('./some'); -var contains = require('./contains'); - - - /** - * Return a new Array with elements that aren't present in the other Arrays. - */ - function difference(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return !some(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - module.exports = difference; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/every.js deleted file mode 100644 index ac598832..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/every.js +++ /dev/null @@ -1,27 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array every - */ - function every(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (!callback(arr[i], i, arr) ) { - result = false; - break; - } - } - - return result; - } - - module.exports = every; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/filter.js deleted file mode 100644 index ebeb58dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/filter.js +++ /dev/null @@ -1,27 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Array filter - */ - function filter(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - module.exports = filter; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/find.js deleted file mode 100644 index b4a73131..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/find.js +++ /dev/null @@ -1,13 +0,0 @@ -var findIndex = require('./findIndex'); - - /** - * Returns first item that matches criteria - */ - function find(arr, iterator, thisObj){ - var idx = findIndex(arr, iterator, thisObj); - return idx >= 0? arr[idx] : void(0); - } - - module.exports = find; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/findIndex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/findIndex.js deleted file mode 100644 index 53f22a5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/findIndex.js +++ /dev/null @@ -1,23 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Returns the index of the first item that matches criteria - */ - function findIndex(arr, iterator, thisObj){ - iterator = makeIterator(iterator, thisObj); - if (arr == null) { - return -1; - } - - var i = -1, len = arr.length; - while (++i < len) { - if (iterator(arr[i], i, arr)) { - return i; - } - } - - return -1; - } - - module.exports = findIndex; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/flatten.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/flatten.js deleted file mode 100644 index aa9757ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/flatten.js +++ /dev/null @@ -1,43 +0,0 @@ -var isArray = require('../lang/isArray'); -var append = require('./append'); - - /* - * Helper function to flatten to a destination array. - * Used to remove the need to create intermediate arrays while flattening. - */ - function flattenTo(arr, result, level) { - if (arr == null) { - return result; - } else if (level === 0) { - append(result, arr); - return result; - } - - var value, - i = -1, - len = arr.length; - while (++i < len) { - value = arr[i]; - if (isArray(value)) { - flattenTo(value, result, level - 1); - } else { - result.push(value); - } - } - return result; - } - - /** - * Recursively flattens an array. - * A new array containing all the elements is returned. - * If `shallow` is true, it will only flatten one level. - */ - function flatten(arr, level) { - level = level == null? -1 : level; - return flattenTo(arr, [], level); - } - - module.exports = flatten; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/forEach.js deleted file mode 100644 index 268e506f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/forEach.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Array forEach - */ - function forEach(arr, callback, thisObj) { - if (arr == null) { - return; - } - var i = -1, - len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback.call(thisObj, arr[i], i, arr) === false ) { - break; - } - } - } - - module.exports = forEach; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/indexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/indexOf.js deleted file mode 100644 index 6a9ac832..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/indexOf.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Array.indexOf - */ - function indexOf(arr, item, fromIndex) { - fromIndex = fromIndex || 0; - if (arr == null) { - return -1; - } - - var len = arr.length, - i = fromIndex < 0 ? len + fromIndex : fromIndex; - while (i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[i] === item) { - return i; - } - - i++; - } - - return -1; - } - - module.exports = indexOf; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/insert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/insert.js deleted file mode 100644 index f1f95b75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/insert.js +++ /dev/null @@ -1,15 +0,0 @@ -var difference = require('./difference'); -var toArray = require('../lang/toArray'); - - /** - * Insert item into array if not already present. - */ - function insert(arr, rest_items) { - var diff = difference(toArray(arguments).slice(1), arr); - if (diff.length) { - Array.prototype.push.apply(arr, diff); - } - return arr.length; - } - module.exports = insert; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/intersection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/intersection.js deleted file mode 100644 index e6170062..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/intersection.js +++ /dev/null @@ -1,23 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var every = require('./every'); -var contains = require('./contains'); - - - /** - * Return a new Array with elements common to all Arrays. - * - based on underscore.js implementation - */ - function intersection(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return every(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - module.exports = intersection; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/invoke.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/invoke.js deleted file mode 100644 index c01aab1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/invoke.js +++ /dev/null @@ -1,23 +0,0 @@ -var forEach = require('./forEach'); - - /** - * Call `methodName` on each item of the array passing custom arguments if - * needed. - */ - function invoke(arr, methodName, var_args){ - if (arr == null) { - return arr; - } - - var args = Array.prototype.slice.call(arguments, 2); - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - value[methodName].apply(value, args); - } - - return arr; - } - - module.exports = invoke; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/join.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/join.js deleted file mode 100644 index 71d8bd20..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/join.js +++ /dev/null @@ -1,17 +0,0 @@ -var filter = require('./filter'); - - function isValidString(val) { - return (val != null && val !== ''); - } - - /** - * Joins strings with the specified separator inserted between each value. - * Null values and empty strings will be excluded. - */ - function join(items, separator) { - separator = separator || ''; - return filter(items, isValidString).join(separator); - } - - module.exports = join; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/lastIndexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/lastIndexOf.js deleted file mode 100644 index ee44a25b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/lastIndexOf.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Array lastIndexOf - */ - function lastIndexOf(arr, item, fromIndex) { - if (arr == null) { - return -1; - } - - var len = arr.length; - fromIndex = (fromIndex == null || fromIndex >= len)? len - 1 : fromIndex; - fromIndex = (fromIndex < 0)? len + fromIndex : fromIndex; - - while (fromIndex >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[fromIndex] === item) { - return fromIndex; - } - fromIndex--; - } - - return -1; - } - - module.exports = lastIndexOf; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/map.js deleted file mode 100644 index 54064f6b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/map.js +++ /dev/null @@ -1,23 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Array map - */ - function map(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null){ - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - results[i] = callback(arr[i], i, arr); - } - - return results; - } - - module.exports = map; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/max.js deleted file mode 100644 index 183b10ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/max.js +++ /dev/null @@ -1,35 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Return maximum value inside array - */ - function max(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return Infinity; - } else if (arr.length && !iterator) { - return Math.max.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = -Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp > compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - module.exports = max; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/min.js deleted file mode 100644 index dd00b6cf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/min.js +++ /dev/null @@ -1,35 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Return minimum value inside array - */ - function min(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return -Infinity; - } else if (arr.length && !iterator) { - return Math.min.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp < compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - module.exports = min; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/pick.js deleted file mode 100644 index 6a54846c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/pick.js +++ /dev/null @@ -1,14 +0,0 @@ -var randInt = require('../random/randInt'); - - /** - * Remove a random item from the Array and return it - */ - function pick(arr){ - if (arr == null || !arr.length) return; - var idx = randInt(0, arr.length - 1); - return arr.splice(idx, 1)[0]; - } - - module.exports = pick; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/pluck.js deleted file mode 100644 index fef4043b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -var map = require('./map'); - - /** - * Extract a list of property values. - */ - function pluck(arr, propName){ - return map(arr, propName); - } - - module.exports = pluck; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/range.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/range.js deleted file mode 100644 index 31d3c770..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/range.js +++ /dev/null @@ -1,27 +0,0 @@ -var countSteps = require('../math/countSteps'); - - /** - * Returns an Array of numbers inside range. - */ - function range(start, stop, step) { - if (stop == null) { - stop = start; - start = 0; - } - step = step || 1; - - var result = [], - nSteps = countSteps(stop - start, step), - i = start; - - while (i <= stop) { - result.push(i); - i += step; - } - - return result; - } - - module.exports = range; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/reduce.js deleted file mode 100644 index 1a350c6e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/reduce.js +++ /dev/null @@ -1,33 +0,0 @@ -var forEach = require('./forEach'); - - /** - * Array reduce - */ - function reduce(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2, - result = initVal; - - if (arr == null || !arr.length) { - if (!hasInit) { - throw new Error('reduce of empty array with no initial value'); - } else { - return initVal; - } - } - - var i = -1, len = arr.length; - while (++i < len) { - if (!hasInit) { - result = arr[i]; - hasInit = true; - } else { - result = fn(result, arr[i], i, arr); - } - } - - return result; - } - - module.exports = reduce; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/reduceRight.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/reduceRight.js deleted file mode 100644 index e36fd4aa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/reduceRight.js +++ /dev/null @@ -1,34 +0,0 @@ - - - /** - * Array reduceRight - */ - function reduceRight(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2; - - if (arr == null || !arr.length) { - if (hasInit) { - return initVal; - } else { - throw new Error('reduce of empty array with no initial value'); - } - } - - var i = arr.length, result = initVal, value; - while (--i >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - value = arr[i]; - if (!hasInit) { - result = value; - hasInit = true; - } else { - result = fn(result, value, i, arr); - } - } - return result; - } - - module.exports = reduceRight; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/reject.js deleted file mode 100644 index 685f2918..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/reject.js +++ /dev/null @@ -1,26 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Array reject - */ - function reject(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (!callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - module.exports = reject; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/remove.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/remove.js deleted file mode 100644 index aa6517db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/remove.js +++ /dev/null @@ -1,13 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Remove a single item from the array. - * (it won't remove duplicates, just a single item) - */ - function remove(arr, item){ - var idx = indexOf(arr, item); - if (idx !== -1) arr.splice(idx, 1); - } - - module.exports = remove; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/removeAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/removeAll.js deleted file mode 100644 index d5f7f3b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/removeAll.js +++ /dev/null @@ -1,15 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Remove all instances of an item from array. - */ - function removeAll(arr, item){ - var idx = indexOf(arr, item); - while (idx !== -1) { - arr.splice(idx, 1); - idx = indexOf(arr, item, idx); - } - } - - module.exports = removeAll; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/shuffle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/shuffle.js deleted file mode 100644 index 97805ec8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/shuffle.js +++ /dev/null @@ -1,29 +0,0 @@ -var randInt = require('../random/randInt'); -var forEach = require('./forEach'); - - /** - * Shuffle array items. - */ - function shuffle(arr) { - var results = [], - rnd; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - if (!i) { - results[0] = arr[0]; - } else { - rnd = randInt(0, i); - results[i] = results[rnd]; - results[rnd] = arr[i]; - } - } - - return results; - } - - module.exports = shuffle; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/some.js deleted file mode 100644 index 8d17772b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/some.js +++ /dev/null @@ -1,27 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array some - */ - function some(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback(arr[i], i, arr) ) { - result = true; - break; - } - } - - return result; - } - - module.exports = some; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/sort.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/sort.js deleted file mode 100644 index 7807339b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/sort.js +++ /dev/null @@ -1,55 +0,0 @@ - - - /** - * Merge sort (http://en.wikipedia.org/wiki/Merge_sort) - */ - function mergeSort(arr, compareFn) { - if (arr == null) { - return []; - } else if (arr.length < 2) { - return arr; - } - - if (compareFn == null) { - compareFn = defaultCompare; - } - - var mid, left, right; - - mid = ~~(arr.length / 2); - left = mergeSort( arr.slice(0, mid), compareFn ); - right = mergeSort( arr.slice(mid, arr.length), compareFn ); - - return merge(left, right, compareFn); - } - - function defaultCompare(a, b) { - return a < b ? -1 : (a > b? 1 : 0); - } - - function merge(left, right, compareFn) { - var result = []; - - while (left.length && right.length) { - if (compareFn(left[0], right[0]) <= 0) { - // if 0 it should preserve same order (stable) - result.push(left.shift()); - } else { - result.push(right.shift()); - } - } - - if (left.length) { - result.push.apply(result, left); - } - - if (right.length) { - result.push.apply(result, right); - } - - return result; - } - - module.exports = mergeSort; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/split.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/split.js deleted file mode 100644 index 4f3ba50c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/split.js +++ /dev/null @@ -1,35 +0,0 @@ - - - /** - * Split array into a fixed number of segments. - */ - function split(array, segments) { - segments = segments || 2; - var results = []; - if (array == null) { - return results; - } - - var minLength = Math.floor(array.length / segments), - remainder = array.length % segments, - i = 0, - len = array.length, - segmentIndex = 0, - segmentLength; - - while (i < len) { - segmentLength = minLength; - if (segmentIndex < remainder) { - segmentLength++; - } - - results.push(array.slice(i, i + segmentLength)); - - segmentIndex++; - i += segmentLength; - } - - return results; - } - module.exports = split; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/toLookup.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/toLookup.js deleted file mode 100644 index ce4c55dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/toLookup.js +++ /dev/null @@ -1,28 +0,0 @@ -var isFunction = require('../lang/isFunction'); - - /** - * Creates an object that holds a lookup for the objects in the array. - */ - function toLookup(arr, key) { - var result = {}; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length, value; - if (isFunction(key)) { - while (++i < len) { - value = arr[i]; - result[key(value)] = value; - } - } else { - while (++i < len) { - value = arr[i]; - result[value[key]] = value; - } - } - - return result; - } - module.exports = toLookup; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/union.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/union.js deleted file mode 100644 index f1334a91..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/union.js +++ /dev/null @@ -1,19 +0,0 @@ -var unique = require('./unique'); -var append = require('./append'); - - /** - * Concat multiple arrays and remove duplicates - */ - function union(arrs) { - var results = []; - var i = -1, len = arguments.length; - while (++i < len) { - append(results, arguments[i]); - } - - return unique(results); - } - - module.exports = union; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/unique.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/unique.js deleted file mode 100644 index 0192b2df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/unique.js +++ /dev/null @@ -1,17 +0,0 @@ -var indexOf = require('./indexOf'); -var filter = require('./filter'); - - /** - * @return {array} Array of unique items - */ - function unique(arr){ - return filter(arr, isUnique); - } - - function isUnique(item, i, arr){ - return indexOf(arr, item, i+1) === -1; - } - - module.exports = unique; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/xor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/xor.js deleted file mode 100644 index c125a996..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/xor.js +++ /dev/null @@ -1,26 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var contains = require('./contains'); - - - /** - * Exclusive OR. Returns items that are present in a single array. - * - like ptyhon's `symmetric_difference` - */ - function xor(arr1, arr2) { - arr1 = unique(arr1); - arr2 = unique(arr2); - - var a1 = filter(arr1, function(item){ - return !contains(arr2, item); - }), - a2 = filter(arr2, function(item){ - return !contains(arr1, item); - }); - - return a1.concat(a2); - } - - module.exports = xor; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/zip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/zip.js deleted file mode 100644 index 931eb818..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/array/zip.js +++ /dev/null @@ -1,29 +0,0 @@ -var max = require('./max'); -var pluck = require('./pluck'); -var map = require('./map'); - - function getLength(arr) { - return arr == null ? 0 : arr.length; - } - - /** - * Merges together the values of each of the arrays with the values at the - * corresponding position. - */ - function zip(arr){ - var len = arr ? max(map(arguments, getLength)) : 0, - results = [], - i = -1, - item; - while (++i < len) { - results.push(map(arguments, function(item) { - return item == null ? undefined : item[i]; - })); - } - - return results; - } - - module.exports = zip; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection.js deleted file mode 100644 index d5cf6cad..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection.js +++ /dev/null @@ -1,22 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'contains' : require('./collection/contains'), - 'every' : require('./collection/every'), - 'filter' : require('./collection/filter'), - 'find' : require('./collection/find'), - 'forEach' : require('./collection/forEach'), - 'make_' : require('./collection/make_'), - 'map' : require('./collection/map'), - 'max' : require('./collection/max'), - 'min' : require('./collection/min'), - 'pluck' : require('./collection/pluck'), - 'reduce' : require('./collection/reduce'), - 'reject' : require('./collection/reject'), - 'size' : require('./collection/size'), - 'some' : require('./collection/some') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/contains.js deleted file mode 100644 index a73f994b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/contains.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrContains = require('../array/contains'); -var objContains = require('../object/contains'); - - /** - */ - module.exports = make(arrContains, objContains); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/every.js deleted file mode 100644 index 300e03c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/every.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrEvery = require('../array/every'); -var objEvery = require('../object/every'); - - /** - */ - module.exports = make(arrEvery, objEvery); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/filter.js deleted file mode 100644 index 38757005..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/filter.js +++ /dev/null @@ -1,23 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * filter collection values, returns array. - */ - function filter(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - var results = []; - if (!list) { - return results; - } - forEach(list, function(value, index, list) { - if (iterator(value, index, list)) { - results[results.length] = value; - } - }); - return results; - } - - module.exports = filter; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/find.js deleted file mode 100644 index 14317e64..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/find.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrFind = require('../array/find'); -var objFind = require('../object/find'); - - /** - * Find value that returns true on iterator check. - */ - module.exports = make(arrFind, objFind); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/forEach.js deleted file mode 100644 index 6e28dcb1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/forEach.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrForEach = require('../array/forEach'); -var objForEach = require('../object/forOwn'); - - /** - */ - module.exports = make(arrForEach, objForEach); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/make_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/make_.js deleted file mode 100644 index 029d27bf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/make_.js +++ /dev/null @@ -1,19 +0,0 @@ - - - /** - * internal method used to create other collection modules. - */ - function makeCollectionMethod(arrMethod, objMethod, defaultReturn) { - return function(){ - var args = Array.prototype.slice.call(arguments); - if (args[0] == null) { - return defaultReturn; - } - // array-like is treated as array - return (typeof args[0].length === 'number')? arrMethod.apply(null, args) : objMethod.apply(null, args); - }; - } - - module.exports = makeCollectionMethod; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/map.js deleted file mode 100644 index fc157f53..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/map.js +++ /dev/null @@ -1,23 +0,0 @@ -var isObject = require('../lang/isObject'); -var values = require('../object/values'); -var arrMap = require('../array/map'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Map collection values, returns Array. - */ - function map(list, callback, thisObj) { - callback = makeIterator(callback, thisObj); - // list.length to check array-like object, if not array-like - // we simply map all the object values - if( isObject(list) && list.length == null ){ - list = values(list); - } - return arrMap(list, function (val, key, list) { - return callback(val, key, list); - }); - } - - module.exports = map; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/max.js deleted file mode 100644 index a8490e7e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/max.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrMax = require('../array/max'); -var objMax = require('../object/max'); - - /** - * Get maximum value inside collection - */ - module.exports = make(arrMax, objMax); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/min.js deleted file mode 100644 index 51d9f148..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/min.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrMin = require('../array/min'); -var objMin = require('../object/min'); - - /** - * Get minimum value inside collection. - */ - module.exports = make(arrMin, objMin); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/pluck.js deleted file mode 100644 index 9b283776..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/pluck.js +++ /dev/null @@ -1,14 +0,0 @@ -var map = require('./map'); - - /** - * Extract a list of property values. - */ - function pluck(list, key) { - return map(list, function(value) { - return value[key]; - }); - } - - module.exports = pluck; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/reduce.js deleted file mode 100644 index 4c075735..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/reduce.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrReduce = require('../array/reduce'); -var objReduce = require('../object/reduce'); - - /** - */ - module.exports = make(arrReduce, objReduce); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/reject.js deleted file mode 100644 index 2a92e3b3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/reject.js +++ /dev/null @@ -1,16 +0,0 @@ -var filter = require('./filter'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Inverse or collection/filter - */ - function reject(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - return filter(list, function(value, index, list) { - return !iterator(value, index, list); - }, thisObj); - } - - module.exports = reject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/size.js deleted file mode 100644 index 244e33e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/size.js +++ /dev/null @@ -1,19 +0,0 @@ -var isArray = require('../lang/isArray'); -var objSize = require('../object/size'); - - /** - * Get collection size - */ - function size(list) { - if (!list) { - return 0; - } - if (isArray(list)) { - return list.length; - } - return objSize(list); - } - - module.exports = size; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/some.js deleted file mode 100644 index 48fd252e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/collection/some.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrSome = require('../array/some'); -var objSome = require('../object/some'); - - /** - */ - module.exports = make(arrSome, objSome); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date.js deleted file mode 100644 index 1cde1a95..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date.js +++ /dev/null @@ -1,21 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'dayOfTheYear' : require('./date/dayOfTheYear'), - 'diff' : require('./date/diff'), - 'i18n_' : require('./date/i18n_'), - 'isLeapYear' : require('./date/isLeapYear'), - 'isSame' : require('./date/isSame'), - 'parseIso' : require('./date/parseIso'), - 'startOf' : require('./date/startOf'), - 'strftime' : require('./date/strftime'), - 'timezoneAbbr' : require('./date/timezoneAbbr'), - 'timezoneOffset' : require('./date/timezoneOffset'), - 'totalDaysInMonth' : require('./date/totalDaysInMonth'), - 'totalDaysInYear' : require('./date/totalDaysInYear'), - 'weekOfTheYear' : require('./date/weekOfTheYear') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/dayOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/dayOfTheYear.js deleted file mode 100644 index 85905c5a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/dayOfTheYear.js +++ /dev/null @@ -1,13 +0,0 @@ -var isDate = require('../lang/isDate'); - - /** - * return the day of the year (1..366) - */ - function dayOfTheYear(date){ - return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - - Date.UTC(date.getFullYear(), 0, 1)) / 86400000 + 1; - } - - module.exports = dayOfTheYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/diff.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/diff.js deleted file mode 100644 index 1131cdcb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/diff.js +++ /dev/null @@ -1,130 +0,0 @@ -var totalDaysInMonth = require('./totalDaysInMonth'); -var totalDaysInYear = require('./totalDaysInYear'); -var convert = require('../time/convert'); - - /** - * calculate the difference between dates (range) - */ - function diff(start, end, unitName){ - // sort the dates to make it easier to process (specially year/month) - if (start > end) { - var swap = start; - start = end; - end = swap; - } - - var output; - - if (unitName === 'month') { - output = getMonthsDiff(start, end); - } else if (unitName === 'year'){ - output = getYearsDiff(start, end); - } else if (unitName != null) { - if (unitName === 'day') { - // ignore timezone difference because of daylight savings time - start = toUtc(start); - end = toUtc(end); - } - output = convert(end - start, 'ms', unitName); - } else { - output = end - start; - } - - return output; - } - - - function toUtc(d){ - // we ignore timezone differences on purpose because of daylight - // savings time, otherwise it would return fractional days/weeks even - // if a full day elapsed. eg: - // Wed Feb 12 2014 00:00:00 GMT-0200 (BRST) - // Sun Feb 16 2014 00:00:00 GMT-0300 (BRT) - // diff should be 4 days and not 4.041666666666667 - return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), - d.getHours(), d.getMinutes(), d.getSeconds(), - d.getMilliseconds()); - } - - - function getMonthsDiff(start, end){ - return getElapsedMonths(start, end) + - getElapsedYears(start, end) * 12 + - getFractionalMonth(start, end); - } - - - function getYearsDiff(start, end){ - var elapsedYears = getElapsedYears(start, end); - return elapsedYears + getFractionalYear(start, end, elapsedYears); - } - - - function getElapsedMonths(start, end){ - var monthDiff = end.getMonth() - start.getMonth(); - if (monthDiff < 0) { - monthDiff += 12; - } - // less than a full month - if (start.getDate() > end.getDate()) { - monthDiff -= 1; - } - return monthDiff; - } - - - function getElapsedYears(start, end){ - var yearDiff = end.getFullYear() - start.getFullYear(); - // less than a full year - if (start.getMonth() > end.getMonth()) { - yearDiff -= 1; - } - return yearDiff; - } - - - function getFractionalMonth(start, end){ - var fractionalDiff = 0; - var startDay = start.getDate(); - var endDay = end.getDate(); - - if (startDay !== endDay) { - var startTotalDays = totalDaysInMonth(start); - var endTotalDays = totalDaysInMonth(end); - var totalDays; - var daysElapsed; - - if (startDay > endDay) { - // eg: Jan 29 - Feb 27 (29 days elapsed but not a full month) - var baseDay = startTotalDays - startDay; - daysElapsed = endDay + baseDay; - // total days should be relative to 1st day of next month if - // startDay > endTotalDays - totalDays = (startDay > endTotalDays)? - endTotalDays + baseDay + 1 : startDay + baseDay; - } else { - // fractional is only based on endMonth eg: Jan 12 - Feb 18 - // (6 fractional days, 28 days until next full month) - daysElapsed = endDay - startDay; - totalDays = endTotalDays; - } - - fractionalDiff = daysElapsed / totalDays; - } - - return fractionalDiff; - } - - - function getFractionalYear(start, end, elapsedYears){ - var base = elapsedYears? - new Date(end.getFullYear(), start.getMonth(), start.getDate()) : - start; - var elapsedDays = diff(base, end, 'day'); - return elapsedDays / totalDaysInYear(end); - } - - - module.exports = diff; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/en-US.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/en-US.js deleted file mode 100644 index f9526ce4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/en-US.js +++ /dev/null @@ -1,61 +0,0 @@ - - // en-US (English, United States) - module.exports = { - "am" : "AM", - "pm" : "PM", - - "x": "%m/%d/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %I:%M:%S %p %Z", - - "months" : [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - - "months_abbr" : [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - - "days" : [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - - "days_abbr" : [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ] - }; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/pt-BR.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/pt-BR.js deleted file mode 100644 index 71ebadb5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/pt-BR.js +++ /dev/null @@ -1,61 +0,0 @@ - - // pt-BR (Brazillian Portuguese) - module.exports = { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Janeiro", - "Fevereiro", - "Março", - "Abril", - "Maio", - "Junho", - "Julho", - "Agosto", - "Setembro", - "Outubro", - "Novembro", - "Dezembro" - ], - - "months_abbr" : [ - "Jan", - "Fev", - "Mar", - "Abr", - "Mai", - "Jun", - "Jul", - "Ago", - "Set", - "Out", - "Nov", - "Dez" - ], - - "days" : [ - "Domingo", - "Segunda", - "Terça", - "Quarta", - "Quinta", - "Sexta", - "Sábado" - ], - - "days_abbr" : [ - "Dom", - "Seg", - "Ter", - "Qua", - "Qui", - "Sex", - "Sáb" - ] - }; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n_.js deleted file mode 100644 index 723fc103..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n_.js +++ /dev/null @@ -1,14 +0,0 @@ -var mixIn = require('../object/mixIn'); -var enUS = require('./i18n/en-US'); - - // we also use mixIn to make sure we don't affect the original locale - var activeLocale = mixIn({}, enUS, { - // we expose a "set" method to allow overriding the global locale - set : function(localeData){ - mixIn(activeLocale, localeData); - } - }); - - module.exports = activeLocale; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/isLeapYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/isLeapYear.js deleted file mode 100644 index 4212870b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/isLeapYear.js +++ /dev/null @@ -1,15 +0,0 @@ -var isDate = require('../lang/isDate'); - - /** - * checks if it's a leap year - */ - function isLeapYear(fullYear){ - if (isDate(fullYear)) { - fullYear = fullYear.getFullYear(); - } - return fullYear % 400 === 0 || (fullYear % 100 !== 0 && fullYear % 4 === 0); - } - - module.exports = isLeapYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/isSame.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/isSame.js deleted file mode 100644 index 4097d29b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/isSame.js +++ /dev/null @@ -1,16 +0,0 @@ -var startOf = require('./startOf'); - - /** - * Check if date is "same" with optional period - */ - function isSame(date1, date2, period){ - if (period) { - date1 = startOf(date1, period); - date2 = startOf(date2, period); - } - return Number(date1) === Number(date2); - } - - module.exports = isSame; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/parseIso.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/parseIso.js deleted file mode 100644 index 8ea2b171..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/parseIso.js +++ /dev/null @@ -1,146 +0,0 @@ -var some = require('../array/some'); - - var datePatterns = [ - /^([0-9]{4})$/, // YYYY - /^([0-9]{4})-([0-9]{2})$/, // YYYY-MM (YYYYMM not allowed) - /^([0-9]{4})-?([0-9]{2})-?([0-9]{2})$/ // YYYY-MM-DD or YYYYMMDD - ]; - var ORD_DATE = /^([0-9]{4})-?([0-9]{3})$/; // YYYY-DDD - - var timePatterns = [ - /^([0-9]{2}(?:\.[0-9]*)?)$/, // HH.hh - /^([0-9]{2}):?([0-9]{2}(?:\.[0-9]*)?)$/, // HH:MM.mm - /^([0-9]{2}):?([0-9]{2}):?([0-9]{2}(\.[0-9]*)?)$/ // HH:MM:SS.ss - ]; - - var DATE_TIME = /^(.+)T(.+)$/; - var TIME_ZONE = /^(.+)([+\-])([0-9]{2}):?([0-9]{2})$/; - - function matchAll(str, patterns) { - var match; - var found = some(patterns, function(pattern) { - return !!(match = pattern.exec(str)); - }); - - return found ? match : null; - } - - function getDate(year, month, day) { - var date = new Date(Date.UTC(year, month, day)); - - // Explicitly set year to avoid Date.UTC making dates < 100 relative to - // 1900 - date.setUTCFullYear(year); - - var valid = - date.getUTCFullYear() === year && - date.getUTCMonth() === month && - date.getUTCDate() === day; - return valid ? +date : NaN; - } - - function parseOrdinalDate(str) { - var match = ORD_DATE.exec(str); - if (match ) { - var year = +match[1], - day = +match[2], - date = new Date(Date.UTC(year, 0, day)); - - if (date.getUTCFullYear() === year) { - return +date; - } - } - - return NaN; - } - - function parseDate(str) { - var match, year, month, day; - - var match = matchAll(str, datePatterns); - if (match === null) { - // Ordinal dates are verified differently. - return parseOrdinalDate(str); - } - - year = (match[1] === void 0) ? 0 : +match[1]; - month = (match[2] === void 0) ? 0 : +match[2] - 1; - day = (match[3] === void 0) ? 1 : +match[3]; - - return getDate(year, month, day); - } - - function getTime(hr, min, sec) { - var valid = - (hr < 24 && hr >= 0 && - min < 60 && min >= 0 && - sec < 60 && min >= 0) || - (hr === 24 && min === 0 && sec === 0); - if (!valid) { - return NaN; - } - - return ((hr * 60 + min) * 60 + sec) * 1000; - } - - function parseOffset(str) { - var match; - if (str.charAt(str.length - 1) === 'Z') { - str = str.substring(0, str.length - 1); - } else if ((match = TIME_ZONE.exec(str))) { - var match = TIME_ZONE.exec(str); - if (match) { - var hours = +match[3], - minutes = (match[4] === void 0) ? 0 : +match[4], - offset = getTime(hours, minutes, 0); - - if (match[2] === '-') { - offset *= -1; - } - - return { offset: offset, time: match[1] }; - } - } - - // No time zone specified, assume UTC - return { offset: 0, time: str }; - } - - function parseTime(str) { - var match; - var offset = parseOffset(str); - - str = offset.time; - offset = offset.offset; - if (isNaN(offset)) { - return NaN; - } - - match = matchAll(str, timePatterns); - if (match === null) { - return NaN; - } - - var hours = (match[1] === void 0) ? 0 : +match[1], - minutes = (match[2] === void 0) ? 0 : +match[2], - seconds = (match[3] === void 0) ? 0 : +match[3]; - - return getTime(hours, minutes, seconds) - offset; - } - - /** - * Parse an ISO8601 formatted date string, and return a Date object. - */ - function parseISO8601(str){ - var match = DATE_TIME.exec(str); - if (!match) { - // No time specified - return parseDate(str); - } - - return parseDate(match[1]) + parseTime(match[2]); - } - - module.exports = parseISO8601; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/startOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/startOf.js deleted file mode 100644 index 072bc0ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/startOf.js +++ /dev/null @@ -1,54 +0,0 @@ -var clone = require('../lang/clone'); - - /** - * get a new Date object representing start of period - */ - function startOf(date, period){ - date = clone(date); - - // intentionally removed "break" from switch since start of - // month/year/etc should also reset the following periods - switch (period) { - case 'year': - date.setMonth(0); - /* falls through */ - case 'month': - date.setDate(1); - /* falls through */ - case 'week': - case 'day': - date.setHours(0); - /* falls through */ - case 'hour': - date.setMinutes(0); - /* falls through */ - case 'minute': - date.setSeconds(0); - /* falls through */ - case 'second': - date.setMilliseconds(0); - break; - default: - throw new Error('"'+ period +'" is not a valid period'); - } - - // week is the only case that should reset the weekDay and maybe even - // overflow to previous month - if (period === 'week') { - var weekDay = date.getDay(); - var baseDate = date.getDate(); - if (weekDay) { - if (weekDay >= baseDate) { - //start of the week is on previous month - date.setDate(0); - } - date.setDate(date.getDate() - date.getDay()); - } - } - - return date; - } - - module.exports = startOf; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/strftime.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/strftime.js deleted file mode 100644 index f033d10f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/strftime.js +++ /dev/null @@ -1,118 +0,0 @@ -var pad = require('../number/pad'); -var i18n = require('./i18n_'); -var dayOfTheYear = require('./dayOfTheYear'); -var timezoneOffset = require('./timezoneOffset'); -var timezoneAbbr = require('./timezoneAbbr'); -var weekOfTheYear = require('./weekOfTheYear'); - - var _combinations = { - 'D': '%m/%d/%y', - 'F': '%Y-%m-%d', - 'r': '%I:%M:%S %p', - 'R': '%H:%M', - 'T': '%H:%M:%S', - 'x': 'locale', - 'X': 'locale', - 'c': 'locale' - }; - - - /** - * format date based on strftime format - */ - function strftime(date, format, localeData){ - localeData = localeData || i18n; - var reToken = /%([a-z%])/gi; - - function makeIterator(fn) { - return function(match, token){ - return fn(date, token, localeData); - }; - } - - return format - .replace(reToken, makeIterator(expandCombinations)) - .replace(reToken, makeIterator(convertToken)); - } - - - function expandCombinations(date, token, l10n){ - if (token in _combinations) { - var expanded = _combinations[token]; - return expanded === 'locale'? l10n[token] : expanded; - } else { - return '%'+ token; - } - } - - - function convertToken(date, token, l10n){ - switch (token){ - case 'a': - return l10n.days_abbr[date.getDay()]; - case 'A': - return l10n.days[date.getDay()]; - case 'h': - case 'b': - return l10n.months_abbr[date.getMonth()]; - case 'B': - return l10n.months[date.getMonth()]; - case 'C': - return pad(Math.floor(date.getFullYear() / 100), 2); - case 'd': - return pad(date.getDate(), 2); - case 'e': - return pad(date.getDate(), 2, ' '); - case 'H': - return pad(date.getHours(), 2); - case 'I': - return pad(date.getHours() % 12, 2); - case 'j': - return pad(dayOfTheYear(date), 3); - case 'L': - return pad(date.getMilliseconds(), 3); - case 'm': - return pad(date.getMonth() + 1, 2); - case 'M': - return pad(date.getMinutes(), 2); - case 'n': - return '\n'; - case 'p': - return date.getHours() >= 12? l10n.pm : l10n.am; - case 'P': - return convertToken(date, 'p', l10n).toLowerCase(); - case 's': - return date.getTime() / 1000; - case 'S': - return pad(date.getSeconds(), 2); - case 't': - return '\t'; - case 'u': - var day = date.getDay(); - return day === 0? 7 : day; - case 'U': - return pad(weekOfTheYear(date), 2); - case 'w': - return date.getDay(); - case 'W': - return pad(weekOfTheYear(date, 1), 2); - case 'y': - return pad(date.getFullYear() % 100, 2); - case 'Y': - return pad(date.getFullYear(), 4); - case 'z': - return timezoneOffset(date); - case 'Z': - return timezoneAbbr(date); - case '%': - return '%'; - default: - // keep unrecognized tokens - return '%'+ token; - } - } - - - module.exports = strftime; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneAbbr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneAbbr.js deleted file mode 100644 index b1006875..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneAbbr.js +++ /dev/null @@ -1,17 +0,0 @@ -var timezoneOffset = require('./timezoneOffset'); - - /** - * Abbreviated time zone name or similar information. - */ - function timezoneAbbr(date){ - // Date.toString gives different results depending on the - // browser/system so we fallback to timezone offset - // chrome: 'Mon Apr 08 2013 09:02:04 GMT-0300 (BRT)' - // IE: 'Mon Apr 8 09:02:04 UTC-0300 2013' - var tz = /\(([A-Z]{3,4})\)/.exec(date.toString()); - return tz? tz[1] : timezoneOffset(date); - } - - module.exports = timezoneAbbr; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneOffset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneOffset.js deleted file mode 100644 index 9492dceb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneOffset.js +++ /dev/null @@ -1,16 +0,0 @@ -var pad = require('../number/pad'); - - /** - * time zone as hour and minute offset from UTC (e.g. +0900) - */ - function timezoneOffset(date){ - var offset = date.getTimezoneOffset(); - var abs = Math.abs(offset); - var h = pad(Math.floor(abs / 60), 2); - var m = pad(abs % 60, 2); - return (offset > 0? '-' : '+') + h + m; - } - - module.exports = timezoneOffset; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInMonth.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInMonth.js deleted file mode 100644 index 8aafeb84..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInMonth.js +++ /dev/null @@ -1,25 +0,0 @@ -var isDate = require('../lang/isDate'); -var isLeapYear = require('./isLeapYear'); - - var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - - /** - * returns the total amount of days in the month (considering leap years) - */ - function totalDaysInMonth(fullYear, monthIndex){ - if (isDate(fullYear)) { - var date = fullYear; - year = date.getFullYear(); - monthIndex = date.getMonth(); - } - - if (monthIndex === 1 && isLeapYear(fullYear)) { - return 29; - } else { - return DAYS_IN_MONTH[monthIndex]; - } - } - - module.exports = totalDaysInMonth; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInYear.js deleted file mode 100644 index b4b7e9b7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInYear.js +++ /dev/null @@ -1,13 +0,0 @@ -var isLeapYear = require('./isLeapYear'); - - /** - * return the amount of days in the year following the gregorian calendar - * and leap years - */ - function totalDaysInYear(fullYear){ - return isLeapYear(fullYear)? 366 : 365; - } - - module.exports = totalDaysInYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/weekOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/weekOfTheYear.js deleted file mode 100644 index dd51b7f1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/date/weekOfTheYear.js +++ /dev/null @@ -1,16 +0,0 @@ -var dayOfTheYear = require('./dayOfTheYear'); - - /** - * Return the week of the year based on given firstDayOfWeek - */ - function weekOfTheYear(date, firstDayOfWeek){ - firstDayOfWeek = firstDayOfWeek == null? 0 : firstDayOfWeek; - var doy = dayOfTheYear(date); - var dow = (7 + date.getDay() - firstDayOfWeek) % 7; - var relativeWeekDay = 6 - firstDayOfWeek - dow; - return Math.floor((doy + relativeWeekDay) / 7); - } - - module.exports = weekOfTheYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/array.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/array.md deleted file mode 100644 index 1f390fbc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/array.md +++ /dev/null @@ -1,773 +0,0 @@ -# array # - -Array utilities. - - - - -## append(arr1, arr2):Array - -Appends an array to the end of the other. -The first array will be modified and will contain the appended items. - -See: [`union()`](#union), [`combine()`](#combine) - -```js -var foo = ['a', 'b'], - bar = ['b', 'd']; - -append(foo, bar); // ['a', 'b', 'b', 'd'] -``` - - - -## collect(arr, callback, [thisObj]):Array - -Maps the items in `arr` and concatenates the resulting arrays. - -See: [`map()`](#map) - -```js -collect([1, 2, 3], function(val) { - return [val, val % 2]; -}); // [1, 1, 2, 0, 3, 1]; - -collect(['a', 'bb', ''], function(val) { - return val.split(''); -}); // ['a', 'b', 'b'] -``` - -It also supports a shorthand syntax: - -```js -var items = [{ a: [1] }, { b: 'foo' }, { a: [2, 3] }]; -collect(items, 'a'); // [1, 2, 3]; -``` - - - -## combine(arr1, arr2):Array - -Combines an array with all the items of another. -The first array will be modified and will contain the combined items. -Does not allow duplicates and is case and type sensitive. - -See: [`union()`](#union), [`append()`](#append) - -```js -var foo = ['a', 'b'], - bar = ['b', 'd']; - -combine(foo, bar); // ['a', 'b', 'd'] -``` - - - -## compact(arr):Array - -Returns a new Array without any `null` or `undefined` values. Note that it will -keep empty strings and other falsy values (simillar to Ruby Array#compact). - -```js -var arr = [0, 1, null, false, '', 'foo', undefined, 'bar']; -compact(arr); // [0, 1, false, '', 'foo', 'bar']; -``` - - - -## contains(arr, value):Boolean - -Checks if Array contains value. Alias to `indexOf(arr, val) !== -1`. - -```js -var arr = [1, 2, 3]; -contains(arr, 2); // true -contains(arr, 'foo'); // false -``` - - - -## difference(...arrs):Array - -Return a new Array with elements that aren't present in the other Arrays -besides the first one. - -Works like [Python set#difference](http://docs.python.org/library/stdtypes.html#set.difference). - -It will remove duplicates. - -See: [`xor()`](#xor), [`intersection()`](#intersection) - -```js -var a = ['a', 'b', 1]; -var b = ['c', 1]; -difference(a, b); // ['a', 'b'] -``` - - - -## every(arr, callback, [thisObj]):Array - -Crossbrowser `Array.every()`. - -Tests whether all elements in the array pass the test implemented by the provided function. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = [1, 'foo', 'bar']; -every(items, isString); // false -every(items, isFunction); // false -every(items, function(val, key, arr){ - return val != null; -}); // true -``` - -more info at [MDN Array#every](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every) - -It also supports a shorthand syntax: - -```js -var items = [{id:1, active:true}, {id:3, active:true}, {id:8, active:true}]; -// all items with `id === 8` -every(items, {id:8}); // false -// `active` is truthy on all items -every(items, 'active'); // true -``` - - - -## filter(arr, callback, [thisObj]):Array - -Crossbrowser `Array.filter()`. - -Creates a new array with all elements that pass the callback test. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var nums = [1, 2, 3, 4, 5, 6]; -var oddNumbers = filter(nums, function(val, key, arr){ - return (val % 2) !== 0; -}); -// > [1, 3, 5] -``` - -more info at [MDN Array#filter](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter) - -Filter also supports shorthand notation: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true}, - {name:'jane', surname:'doe', beard:false} -]; -// filter item that matches all properties/values pairs -filter(arr, {name:'john', beard:false}); -// > [{name:'john', surnname:'connor', beard:false}] -// items where 'beard' is a truthy value -filter(arr, 'beard'); -// > [{name:'john', surnname:'doe', beard:true}] -``` - -See [`reject()`](#reject) - - - -## find(arr, callback, [thisObj]):void - -Loops through all the items in the Array and returns the first one that passes -a truth test (callback). - -```js -var arr = [123, {a:'b'}, 'foo', 'bar']; -find(arr, isString); // "foo" -find(arr, isNumber); // 123 -find(arr, isObject); // {a:'b'} -``` - -Find also supports shorthand notation: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true} -]; -// first item that matches all properties/values pairs -find(arr, {name:'john'}); // {name:'john', surnname:'connor', beard:false} -// first item where 'beard' is a truthy value -find(arr, 'beard'); // {name:'john', surnname:'doe', beard:true} -``` - -See: [findIndex()](#findIndex) - - - -## findIndex(arr, iterator, [thisObj]):Number - -Loops through the items in the Array and returns the index of the first one -that passes a truth test (callback). - -Returns `-1` if no item was found that passes the truth test. - -```js -var arr = [1, { a: 1 }, 'foo', 'bar']; -findIndex(arr, isString); // 2 -findIndex(arr, isNumber); // 0 -findIndex(arr, isObject); // 1 -findIndex(arr, isRegExp); // -1 -``` - -`findIndex` also supports shorthand notation: - -```js -var pets = [ - { pet: 'dog', name: 'Sam' }, - { pet: 'dog', name: 'Maggie' } -]; - -findIndex(pets, { pet: 'dog' }); // 0 -findIndex(pets, { name: 'Maggie' }); // 1 -``` - -See: [find()](#find) - - - -## flatten(arr, [level]):Array - -Recursively flattens an array. A new array containing all the elements is -returned. If `level` is specified, it will only flatten up to that level. - -### Example - -```js -flatten([1, [2], [3, [4, 5]]]); -// > [1, 2, 3, 4, 5] -flatten([1, [2], [3, [4, 5]]], 1); -// > [1, 2, 3, [4, 5]] -``` - - - -## forEach(arr, callback, [thisObj]):void - -Crossbrowser `Array.forEach()`. - -It allows exiting the iteration early by returning `false` on the callback. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = ['foo', 'bar', 'lorem', 'ipsum']; -forEach(items, function(val, key, arr){ - console.log(key +' : '+ val); - if (val === 'lorem') { - // stop iteration (break) - return false; - } -}); -``` - -more info at [MDN Array#forEach](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach) - - - -## indexOf(arr, item, [fromIndex]):Number - -Crossbrowser `Array.indexOf()`. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#indexOf](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf) - - - - -## insert(arr, ...items):Number - -Push items into array only if they aren't contained by it. Returns the new -`length` of the array. - -See: [`remove()`](#remove), [`removeAll()`](#removeAll), -[`contains()`](#contains) - -```js -var arr = ['a', 'b']; -insert(arr, 'a'); // 2 : ['a', 'b'] -insert(arr, 'c'); // 3 : ['a', 'b', 'c'] -insert(arr, 1, 2, 'b'); // 5 : ['a', 'b', 'c', 1, 2] -``` - - - -## intersection(...arrs):Array - -Return a new Array with elements common to all Arrays. - -Similar to Python set#intersection and underscore.js intersection. - -It will remove duplicates. - -See: [`difference()`](#difference), [`xor()`](#xor) - -```js -var a = ['a', 'b', 1], - b = ['c', 1], - c = [1, 2, 3]; -intersection(a, b, c); // [1] -``` - - - -## invoke(arr, methodName[, ...args]):Array - -Call `methodName` on each item of the array passing custom arguments if needed. - -```js -invoke([[3,2,1], [9,5,2]], 'sort'); // [[1,2,3], [2,5,9]] -``` - - - -## join(arr, [separator]):String - -Joins the strings in `arr`, inserting `separator` between each value. - -This ignores null values and empty strings that are in the array. `separator` -defaults to an empty string. This will convert all non-string objects in the -array to a string. - -### Example - -```js -join(['a', 'b', 'c']); // 'abc' -join(['foo', 'bar'], ', '); // 'foo, bar' -join([null, 'foo', '', 'bar', undefined], ':'); // 'foo:bar' -``` - - - -## lastIndexOf(arr, item, [fromIndex]):Number - -Crossbrowser `Array.lastIndexOf()`. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#lastIndexOf](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf) - - - -## map(arr, callback, [thisObj]]):Array - -Crossbrowser `Array.map()`. - -Creates a new array with the results of calling a provided function on every -element in this array. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -See: [`collect()`](#collect) - -```js -var nums = [1,2,3,4]; -var double = map(nums, function(val, key, arr){ - return val * 2; -}); -// > [2, 4, 6, 8] -``` - -more info at [MDN Array#map](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map) - -It also supports a shorthand notation which can be used to achieve same result -as [`array/pluck`](#pluck): - -```js -var src = ['lorem', 'ipsum', 'foo', 'amet']; -// grab the "length" property of all items -var lengths = map(src, 'length'); // [5, 5, 3, 4] -``` - - - -## max(arr, [iterator], [thisObj]):* - -Returns maximum value inside array or use a custom iterator to define how items -should be compared. - -See: [`min()`](#min) - -```js -max([10, 2, 7]); // 10 -max(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'lorem' -``` - -It also supports a shorthand notation: - -```js -max(['foo', 'lorem', 'amet'], 'length'); // "lorem" -``` - - - -## min(arr, [iterator], [thisObj]):* - -Returns minimum value inside array or use a custom iterator to define how items -should be compared. - -See: [`max()`](#max) - -```js -min([10, 2, 7]); // 2 -min(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'foo' -``` - -It also supports a shorthand notation: - -```js -min(['foo', 'lorem', 'amet'], 'length'); // "foo" -``` - - - -## pick(arr):* - -Gets a random item and remove it from the array. - -### Example: - - var arr = [1, 2, 3, 4, 5, 6]; - var item_1 = pick(arr); // 4 - var item_2 = pick(arr); // 1 - console.log(arr); // [2, 3, 5, 6] - - - -## pluck(arr, propName):Array - -Extract a list of property values. - -See: [`function/prop()`](function.html#prop) - -```js -var users = [{name : 'John', age: 21}, {name: 'Jane', age : 27}]; -var names = pluck(users, 'name'); // ["John", "Jane"] -var ages = pluck(users, 'age'); // [21, 27] -``` - - - -## range([start], stop[, step]):Array - -Creates a new Array with all the values inside the range. Works similarly to -Python#range or PHP#range. - -### Arguments - - 1. `[start]` (Number) : Range start. Default is `0`. - 2. `stop` (Number) : Range limit. - 3. `[step]` (Number) : Step size. Default is `1`. - -### Example - -```js -range(5); // [0, 1, 2, 3, 4, 5] -range(0, 5); // [0, 1, 2, 3, 4, 5] -range(0, 5, 2); // [0, 2, 4] -range(20, 40, 5); // [20, 25, 30, 35, 40] -``` - - - -## reduce(arr, fn):* - -Crossbrowser `Array.reduce()`. - -Apply a function against an accumulator and each value of the array (from -left-to-right) as to reduce it to a single value. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#reduce](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce) - - - -## reduceRight(arr, fn):* - -Crossbrowser `Array.reduceRight()`. - -Apply a function simultaneously against two values of the array (from -right-to-left) as to reduce it to a single value. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#reduceRight](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduceRight) - - - -## reject(arr, fn, thisObj):Array - -Creates a new array with all the elements that do **not** pass the truth test. -Opposite of [`filter()`](#filter). - -See [`filter()`](#filter) - -### Example - -```js -var numbers = [1, 2, 3, 4, 5, 6]; -reject(numbers, function(x) { return (x % 2) !== 0; }); // [2, 4, 6] -``` - -It also supports a shorthand syntax: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true}, - {name:'jane', surname:'doe', beard:false} -]; -// reject items that matches all properties/values pairs -reject(arr, {name:'john'}); -// > [{name:'jane', surnname:'doe', beard:false}] -// reject items where 'beard' is a truthy value -filter(arr, 'beard'); -// > [{name:'john', surnname:'connor', beard:false}, -// {name:'jane', surname:'doe', beard:false}] -``` - - - -## remove(arr, item):void - -Remove a single item from the array. - -IMPORTANT: it won't remove duplicates, just a single item. - -### Example - -```js -var foo = [1, 2, 3, 4]; -remove(foo, 2); -console.log(foo); // [1, 3, 4] -``` - - - -## removeAll(arr, item):void - -Remove all instances of an item from the array. - -### Example - -```js -var foo = [1, 2, 3, 4, 2, 2]; -removeAll(foo, 2); -console.log(foo); // [1, 3, 4]; -``` - - - -## shuffle(arr):Array - -Returns a new Array with items randomly sorted (shuffled). Similar to Ruby Array#shuffle. - -### Example - -```js -var arr = ['a', 'b', 'c', 'd', 'e']; -shuffle(arr); // ['b', 'd', 'e', 'c', 'a'] -``` - - - -## some(arr, callback, [thisObj]):Array - -Crossbrowser `Array.some()`. - -Tests whether some element in the array passes the test implemented by the provided function. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = [1, 'foo', 'bar']; -some(items, isString); // true -some(items, isFunction); // false -``` - -more info at [MDN Array#some](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some) - -It also supports a shorthand syntax: - -```js -var items = [{id:1, active:true}, {id:3, active:false}, {id:8, active:false}]; -// at least one item with `id === 8` -some(items, {id:8}); // true -// `active` is truthy on at least one item -some(items, 'active'); // true -``` - -see also: [`object/matches`](object.html#matches) - - - -## sort(arr, [compareFn]):Array - -Returns a sorted Array using the [Merge Sort](http://en.wikipedia.org/wiki/Merge_sort) algorithm (stable sort). - -The `Array.prototype.sort` browser implementations differ since the sorting algorithm isn't described in the ES spec - [in V8 it isn't stable](http://code.google.com/p/v8/issues/detail?id=90) and [on Firefox it is stable](https://bugzilla.mozilla.org/show_bug.cgi?id=224128) - so this function doesn't use the browser native implementation and is recommended in cases where a stable sort is required (items should preserve same order if already sorted). - -**Important:** It does logical comparisson by default (greater/less than) and -not a string comparisson like the native `Array#sort`. - -### compareFn - -If `compareFn` is supplied elements are sorted based on the value returned by -the `compareFn`. - - - If `compareFn(a, b)` is less than `0`, sort `a` to a lower index than `b`. - - If `compareFn(a, b)` returns `0`, leave `a` and `b` unchanged with respect - to each other, but sorted with respect to all different elements. - - If `compareFn(a, b)` is greater than `0`, sort `b` to a lower index than - `a`. - -### Example - -```js -sort([187, 23, 47, 987, 12, 59, 0]); // [0, 12, 23, 47, 59, 187, 987] -sort(['a', 'z', 'c', 'beta', 'b']); // ['a', 'b', 'beta', 'c', 'z'] - -// ['sit', 'amet', 'lorem', 'ipsum'] -sort(['lorem', 'ipsum', 'sit', 'amet'], function(a, b){ - // sort by length, items with same length - // will keep the relative order (stable) - return a.length - b.length; -}); - -// [4, 3, 2, 1] -sort([2, 3, 1, 4], function(a, b){ - // reverse sort - return b - a; -}); -``` - - - -## split(arr, [segments]):Array - -Splits an array into a fixed number of segments. - -The number of segments is specified by `segments` and defaults to 2. If the -array cannot be evenly split, the first segments will contain the extra items. -If `arr` is empty, an empty array is returned. If `arr.length` is less than -`segments`, then the resulting array will have `arr.length` number of -single-element arrays. - -### Example -```js -split([1, 2, 3, 4, 5], 3) // [ [1, 2], [3, 4], [5] ] -split([1, 2, 3, 4, 5]) // [ [1, 2, 3], [4, 5] ] -split([]) // [] -split([1, 2], 3) // [ [1], [2] ] -``` - - - -## toLookup(arr, key):Object - -Create an object that indexes the items in the array by a key. If `key` is a function, the key for each value in the resulting object will be the result of calling the function with the value as an argument. Otherwise `key` specifies the property on each value to use as the key. - -### Example - -```js -var foo = [{ name: 'a', thing: 1 }, { name: 'b', thing: 2 }]; -// { a: { name: 'a', thing: 1 }, b: { name: 'b', thing: 2 } } -toLookup(foo, 'name'); -// same as above -toLookup(foo, function (value) { return value.name; }); -``` - - - -## union(...arrs):Array - -Concat multiple arrays removing duplicates. - -```js -var a = ['a', 'b'], - b = ['c', 'a'], - c = [1, 'b', 2, 3, 'a']; - -//note that unique remove from begin to end -union(a, b, c); // ['c', 1, 'b', 2, 3, 'a'] -``` - - - -## unique(arr):Array - -Return a new Array of unique items. - -### Example - -```js -var foo = [1, 2, 3, 4, 2, 2, 3, 4]; -var bar = unique(foo); -console.log(foo); // [1, 2, 3, 4]; -``` - - - -## xor(arr1, arr2):Array - -Exclusive OR. Returns items that are present in a single array. - -Works like [Python set#symmetric_difference](http://docs.python.org/library/stdtypes.html#set.symmetric_difference) renamed for brevity. - -It will remove duplicates. - -See: [`difference()`](#difference), [`intersection()`](#intersection) - -```js -var a = ['a', 'b', 1]; -var b = ['c', 1]; -xor(a, b); // ['a', 'b', 'c'] -``` - - - -## zip(...arrs):Array - -Groups the elements of each array at their corresponding indexes. - -Useful for separate data sources that are coordinated through matching array -indexes. For a matrix of nested arrays, `zip.apply(...)` can transpose the -matrix in a similar fashion. - -```js -// [['moe', 30, true], ['larry', 40, false], ['curly', 50, false]] -zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]); -``` - - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/collection.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/collection.md deleted file mode 100644 index 2ffcab10..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/collection.md +++ /dev/null @@ -1,233 +0,0 @@ -# collection # - -Methods for dealing with collections (Array or Objects). - - - -## contains(list, value):Boolean - -Checks if collection contains value. - -```js -contains({a: 1, b: 2, c: 'bar'}, 2); // true -contains([1, 2, 3], 'foo'); // false -``` - -See: [array/contains](array.html#contains), [object/contains](object.html#contains) - - - -## every(list, callback, [thisObj]):Boolean - -Tests whether all values in the collection pass the test implemented by the -provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -every(obj, isNumber); // false -``` - -See: [array/every](array.html#every), [object/every](object.html#every) - - - -## filter(list, callback, [thisObj]):Array - -Filter collection properties. - -See: [array/filter](array.html#filter), [object/filter](object.html#filter) - - - -## find(list, callback, [thisObj]):* - -Loops through all the values in the collection and returns the first one that -passes a truth test (callback). - -**Important:** loop order over objects properties isn't guaranteed to be the -same on all environments. - -```js -find({a: 'foo', b: 12}, isString); // 'foo' -find(['foo', 12], isNumber); // 12 -``` - -See: [array/find](array.html#find), [object/find](object.html#find) - - - -## forEach(list, callback, [thisObj]) - -Loop through all values of the collection. - -See: [array/forEach](array.html#forEach), [object/forOwn](object.html#forOwn) - - - -## map(list, callback, [thisObj]):Array - -Returns a new collection where the properties values are the result of calling -the callback for each property in the original collection. - -See: [array/map](array.html#map), [object/map](object.html#map) - - - -## max(list, [iterator]):* - -Returns maximum value inside collection or use a custom iterator to define how -items should be compared. - -See: [`min()`](#min), [array/max](array.html#max), [object/max](object.html#max) - -```js -max({a: 100, b: 2, c: 1, d: 3, e: 200}); // 200 -max(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'lorem' -``` - - - -## min(list, [iterator]):* - -Returns minimum value inside collection or use a custom iterator to define how -items should be compared. - -See: [`max()`](#max), [array/min](array.html#min), [object/min](object.html#min) - -```js -min([10, 2, 7]); // 2 -min({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'foo' -``` - - - -## pluck(list, propName):Array - -Extract a list of property values. - -```js -var users = [ - { - name : 'John', - age : 21 - }, - { - name : 'Jane', - age : 27 - } -]; - -pluck(users, 'name'); // ["John", "Jane"] -pluck(users, 'age'); // [21, 27] - -users = { - first: { - name : 'John', - age : 21 - }, - second: { - name : 'Mary', - age : 25 - } -}; - -pluck(users, 'name'); // ['John', 'Mary'] -``` - -See: [array/pluck](array.html#pluck), [object/pluck](object.html#pluck) - - - -## reduce(list, callback, initial, [thisObj]):* - -Apply a function against an accumulator and each value in the collection as to -reduce it to a single value. - -```js -var obj = {a: 1, b: 2, c: 3, d: 4}; - -function sum(prev, cur, key, list) { - return prev + cur; -} - -reduce(obj, sum); // 10 -``` - -See: [array/reduce](array.html#reduce), [object/reduce](object.html#reduce) - - - -## reject(list, fn, [thisObj]):Array - -Creates a new array with all the elements that do **not** pass the truth test. -Opposite of [`filter()`](#filter). - -### Example - -```js -var numbers = [1, 2, 3, 4, 5]; -reject(numbers, function(x) { return (x % 2) !== 0; }); // [2, 4] - -var obj = {a: 1, b: 2, c: 3, d: 4, e: 5}; -reject(obj, function(x) { return (x % 2) !== 0; }); // [2, 4] -``` - -See: [array/reject](array.html#reject), [object/reject](object.html#reject) - - - -## size(list):Number - -Returns the number of values in the collection. - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -size(obj); // 3 -size([1,2,3]); // 3 -size(null); // 0 -``` - -See: [object/size](object.html#size) - - - -## some(list, callback, [thisObj]):Boolean - -Tests whether any values in the collection pass the test implemented by the -provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -some(obj, isNumber); // true -some(obj, isString); // true -some([1, 2, 3], isNumber) // true -some([1, 2, 3], isString) // false -``` - -See: [array/some](array.html#some), [object/some](object.html#some) - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/date.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/date.md deleted file mode 100644 index b3f7f40e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/date.md +++ /dev/null @@ -1,295 +0,0 @@ -# date # - -Date utilities. - - -## dayOfTheYear(date):Number - -How many days elapsed since begining of the year (following gregorian -calendar). - -```js -// Jan 1st -dayOfTheYear(new Date(2013, 0, 1)); // 1 -// Dec 31th -dayOfTheYear(new Date(2013, 11, 31)); // 364 -``` - - - -## diff(date1, date2, [unitName]):Number - -Calculate the difference between dates (range). - -The returned value is always positive. The default `unitName` is `"ms"`. - -Available units: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`, -`millisecond`. - -See: [`time/convert()`](time.html#convert) - -```js -var d1 = new Date(2012, 4, 5); -var d2 = new Date(2013, 4, 8); -diff(d1, d2); // 31795200000 -diff(d1, d2, 'hour'); // 8832 -diff(d1, d2, 'week'); // 52.57142857142857 -diff(d1, d2, 'month'); // 12.096774193548388 -diff(d1, d2, 'year'); // 1.0082191780821919 -``` - - - -## isLeapYear(fullYear|date):Boolean - -Checks if it's a [leap year](http://en.wikipedia.org/wiki/Leap_year) according -to the Gregorian calendar. - -see: [`totalDaysInMonth()`](#totalDaysInMonth) - -```js -isLeapYear(2012); // true -isLeapYear(2013); // false -isLeapYear(new Date(2012, 2, 28)); // true -``` - - -## isSame(date1, date2[, period]):Boolean - -Check if both dates are the "same". - -You can pass an optional *period* used to set the comparisson precision. - -Available periods: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`. - -```js -var date1 = new Date(2013, 1, 3); -var date2 = new Date(2013, 2, 9); -isSame(date1, date2); // false -isSame(date1, date2, 'day'); // false -isSame(date1, date2, 'month'); // false -isSame(date1, date2, 'year'); // true -``` - - - -## parseIso(str):Number - -Parses an [ISO8601](http://en.wikipedia.org/wiki/Iso8601) date and returns the -number of milliseconds since January 1, 1970, 00:00:00 UTC, or `NaN` if it is -not a valid ISO8601 date. - -This parses *all* ISO8601 dates, including dates without times, [ordinal -dates](https://en.wikipedia.org/wiki/ISO_8601#Ordinal_dates), and the compact -representation (omitting delimeters). The only exception is [ISO week -dates](https://en.wikipedia.org/wiki/ISO_week_date), which are not parsed. - -If no time zone offset is specified, it assumes UTC time. - -```js -// Jan 01, 1970 00:00 GMT -parseIso('1970-01-01T00:00:00') // 0 -parseIso('1970-001') // 0 -parseIso('1970-01-01') // 0 -parseIso('19700101T000000.00') // 0 -parseIso('1970-01-01T02:00+02:00') // 0 - -// Jan 02, 2000 20:10 GMT+04:00 -parseIso('2000-01-02T20:10+04:00') // 946829400000 -``` - - - -## startOf(date, period):Date - -Get a new Date at the start of the period. - -Available periods: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`. - -```js -// Apr 05 2013 11:27:43 -var date = new Date(2013, 3, 5, 11, 27, 43, 123); -startOf(date, 'year'); // Jan 01 2013 00:00:00 -startOf(date, 'month'); // Apr 01 2013 00:00:00 -startOf(date, 'day'); // Apr 05 2013 00:00:00 -startOf(date, 'hour'); // Apr 05 2013 11:00:00 -``` - - - -## strftime(date, format, [l10n]):String - -Format date based on strftime format. - -Replaced tokens: - -<dl> -<dt>%a</dt><dd> locale's abbreviated weekday name.</dd> -<dt>%A</dt><dd> locale's full weekday name.</dd> -<dt>%b</dt><dd> locale's abbreviated month name.</dd> -<dt>%B</dt><dd> locale's full month name.</dd> -<dt>%c</dt><dd> locale's appropriate date and time representation.</dd> -<dt>%C</dt><dd> century number (the year divided by 100 and truncated -to an integer) as a decimal number [00..99].</dd> -<dt>%d</dt><dd> day of the month as a decimal number [01..31].</dd> -<dt>%D</dt><dd>same as %m/%d/%y.</dd> -<dt>%e</dt><dd> day of the month as a decimal number [1..31]; -a single digit is preceded by a space.</dd> -<dt>%F</dt><dd>The ISO 8601 date format (%Y-%m-%d)</dd> -<dt>%h</dt><dd>same as %b.</dd> -<dt>%H</dt><dd> hour (24-hour clock) as a decimal number [00..23].</dd> -<dt>%I</dt><dd> hour (12-hour clock) as a decimal number [01..12].</dd> -<dt>%j</dt><dd> day of the year as a decimal number [001..366].</dd> -<dt>%L</dt><dd> zero-padded milliseconds [000..999]</dd> -<dt>%m</dt><dd> month as a decimal number [01..12].</dd> -<dt>%M</dt><dd> minute as a decimal number [00..59].</dd> -<dt>%n</dt><dd> newline character.</dd> -<dt>%p</dt><dd> locale's equivalent of either "am" or "pm"</dd> -<dt>%P</dt><dd> locale's equivalent of either "AM" or "PM"</dd> -<dt>%r</dt><dd> time in a.m. and -p.m. notation; in the POSIX locale this is equivalent to %I:%M:%S %p.</dd> -<dt>%R</dt><dd> time in 24 hour notation (%H:%M).</dd> -<dt>%s</dt><dd> seconds since Epoch (1970-01-01 00:00:00 UTC)</dd> -<dt>%S</dt><dd> second as a decimal number [00..60].</dd> -<dt>%t</dt><dd> tab character.</dd> -<dt>%T</dt><dd> time (%H:%M:%S).</dd> -<dt>%u</dt><dd> weekday as a decimal number [1..7], with 1 representing -Monday.</dd> -<dt>%U</dt><dd> week number of the year (Sunday as the first day of -the week) as a decimal number [00..53].</dd> -<del><dt>%V</dt><dd> week number of the year (Monday as the first day of the -week) as a decimal number [01..53]. If the week containing 1 January has -four or more days in the new year, then it is considered week 1. Otherwise, -it is the last week of the previous year, and the next week is week 1.</dd></del> -<dt>%w</dt><dd> weekday as a decimal number [0..6], with 0 representing -Sunday.</dd> -<dt>%W</dt><dd> week number of the year (Monday as the first day of -the week) as a decimal number [00..53]. All days in a new year preceding -the first Monday are considered to be in week 0.</dd> -<dt>%x</dt><dd> locale's appropriate date representation.</dd> -<dt>%X</dt><dd> locale's appropriate time representation.</dd> -<dt>%y</dt><dd> year without century as a decimal number [00..99].</dd> -<dt>%Y</dt><dd> year with century as a decimal number.</dd> -<dt>%Z</dt><dd> timezone name or abbreviation, or by no bytes -if no timezone information exists.</dd> -<dt>%%</dt><dd>is replaced by %.</dd> -</dl> - -```js -var date = new Date(2013, 3, 8, 9, 2, 4); -strftime(date, '%Y-%m-%d'); // "2013-04-08" -strftime(date, '%R'); // "09:02" -strftime(date, '%Y-%m-%dT%H:%M:%S%z'); // "2013-04-08T09:02:04+0000" -``` - -You can also set a custom locale: - -```js -var ptBr = require('mout/date/i18n/pt-BR'); -strftime(date, '%a, %d %b', ptBr); // 'Seg, 08 Abr' -strftime(date, '%A, %d %B', ptBr); // 'Segunda, 08 Abril' -``` - -To set it globally: - -```js -require('mout/date/i18n_').set( customLocaleData ); -``` - -See [date/i18n](https://github.com/mout/mout/tree/master/src/date/i18n) -for localization examples. - - - -## timezoneAbbr(date):String - -Return timezone abbreviation or similar data. - -The result will vary based on the OS/browser since some environments doesn't -provide enough info about the current locale. - -```js -// IE 7-8 -timezoneAbbr(new Date()); // "-0500" -// Chrome, FF, V8 -timezoneAbbr(new Date()); // "EST" -``` - - - -## timezoneOffset(date):String - -Return time zone as hour and minute offset from UTC (e.g. +0900). - -It's important to note that JavaScript Date object will use the system locale -info to determinate the [timezone -offset](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset) -and that daylight saving time affects the result. - -```js -// if system locale is EST -timezoneOffset(new Date()); // -0500 -``` - - - -## totalDaysInMonth(fullYear, monthIndex):Number - -Returns the amount of days in the month taking into consideration leap years -(following Gregorian calendar). - -see: [`isLeapYear()`](#isLeapYear) - -```js -totalDaysInMonth(2008, 1); // 29 (leap year) -totalDaysInMonth(2009, 1); // 28 - -// you can also pass a Date object as single argument -totalDaysInMonth( new Date(2013, 0, 1) ); // 31 -``` - - -## totalDaysInYear(fullYear):Number - -Returns the amount of days in the year taking into consideration leap years -(following Gregorian calendar). - -see: [`isLeapYear()`](#isLeapYear), [`totalDaysInMonth()`](#totalDaysInMonth) - -```js -totalDaysInYear(2008); // 366 (leap year) -totalDaysInYear(2009); // 365 - -// you can also pass a Date object as single argument -totalDaysInYear( new Date(2013, 0, 1) ); // 365 -``` - - - -## weekOfTheYear(date, [firstDayOfWeek]):Number - -Returns how many weeks elapsed since start of the year (`0..53`). - -`firstDayOfWeek` can be `0` (Sunday) or `1` (Monday). By default weeks start at -Sunday. - -It will return `0` if `date` is before the first `firstDayOfWeek` of the year. - -```js -// Tue Jan 01 2013 -weekOfTheYear( new Date(2013,0,1) ); // 0 -// Wed Jan 09 2013 -weekOfTheYear( new Date(2013,0,9) ); // 1 -// Sun Jan 01 2012 -weekOfTheYear( new Date(2012,0,1) ); // 1 -// Mon Jan 09 2012 -weekOfTheYear( new Date(2012,0,9) ); // 2 -``` - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/function.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/function.md deleted file mode 100644 index 2695a025..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/function.md +++ /dev/null @@ -1,174 +0,0 @@ -# function # - -Function*(al)* utilities. - - - -## bind(fn, context, [...args]):Function - -Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - -### Arguments - - 1. `fn` (Function) : Target Function - 2. `context` (Object) : Execution context (object used as `this`) - 3. `[...args]` (*) : Arguments (0...n arguments) - -See: [`partial()`](#partial), [object/bindAll](./object.html#bindAll) - - - -## compose(...fn):Function - -Returns the composition of a list of functions, where each function consumes -the return value of the function that follows. In math terms, composing the -functions `f()`, `g()`, and `h()` produces `f(g(h()))`. - -```js -function add2(x) { return x + 2 } -function multi2(x) { return x * 2 } -map([1, 2, 3], compose(add2, multi2)); // [4, 6, 8] - -//same as -map([1, 2, 3], function(x){ - return add2( multi2(x) ); -}); -``` - - - -## debounce(fn, delay[, isAsap]):Function - -Creates a function that will delay the execution of `fn` until after `delay` -milliseconds have elapsed since the last time it was invoked. - -Subsequent calls to the debounced function will return the result of the last -`fn` call. - -```js -// sometimes less is more -var lazyRedraw = debounce(redraw, 300); -foo.on.resize.add(lazyRedraw); -``` - -In this visualization, `|` is a debounced-function call and `X` is the actual -callback execution: - - Default - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X - - Debounced with `isAsap == true`: - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X - -See: [`throttle()`](#throttle) - - -## func(name):Function - -Returns a function that calls a method with given `name` on supplied object. -Useful for iteration methods like `array/map` and `array/forEach`. - -See: [`prop()`](#prop) - -```js -// will call the method `getName()` for each `user` -var names = map(users, func('getName')); -``` - - - -## partial(fn, [...args]):Function - -Return a partially applied function supplying default arguments. - -This method is similar to [`bind`](#bind), except it does not alter the this -binding. - -### Arguments - - 1. `fn` (Function) : Target Function - 3. `[...args]` (*) : Arguments (0...n arguments) - -See: [`bind()`](#bind) - -```js -function add(a, b){ return a + b } -var add10 = partial(add, 10); -console.log( add10(2) ); // 12 -``` - - - -## prop(name):Function - -Returns a function that gets a property with given `name` from supplied object. -Useful for using in conjunction with `array/map` and/or for creating getters. - -See: [`array/pluck()`](array.html#pluck) - -```js -var users = [{name:"John", age:21}, {name:"Jane", age:25}]; -// ["John", "Jane"] -var names = map(users, prop('name')); -``` - - - -## series(...fn):Function - -Returns a function that will execute all the supplied functions in order and -passing the same parameters to all of them. Useful for combining multiple -`array/forEach` into a single one and/or for debugging. - - -```js -// call `console.log()` and `doStuff()` for each item item in the array -forEach(arr, series(console.log, doStuff)); -``` - - - -## throttle(fn, interval):Function - -Creates a function that, when executed, will only call the `fn` function at -most once per every `interval` milliseconds. - -If the throttled function is invoked more than once during the wait timeout, -`fn` will also be called on the trailing edge of the timeout. - -Subsequent calls to the throttled function will return the result of the last -`fn` call. - -```js -// sometimes less is more -var lazyRedraw = throttle(redraw, 300); -foo.on.resize.add(lazyRedraw); -``` - -In this visualization, `|` is a throttled-function call and `X` is the actual -`fn` execution: - - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X X X X X X X X X X X - -See: [`debounce()`](#debounce) - - -## timeout(fn, millis, context, [...args]):Number - -Functions as a wrapper for `setTimeout`. Calls a the function `fn` after a given delay `millis` in milliseconds. -The function is called within the specified context. The return value can be used to clear the timeout using `clearTimeout`. - -```js -var id = timeout(doStuff, 300, this); - -clearTimeout(id); -``` - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/lang.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/lang.md deleted file mode 100644 index 56d7879b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/lang.md +++ /dev/null @@ -1,385 +0,0 @@ -# lang # - -Language Utilities. Easier inheritance, scope handling, type checks. - - - -## clone(val):* - -Clone native types like Object, Array, RegExp, Date and primitives. - -This method will not clone values that are referenced within `val`. It will -only copy the value reference to the new value. If the value is not a plain -object but is an object, it will return the value unchanged. - -### Example - -```js -var a = { foo: 'bar' }; -var b = clone(a); -console.log(a === b); // false -console.log(a.foo === b.foo); // true - -var c = [1, 2, 3]; -var d = clone(b); -console.log(c === d); // false -console.log(c); // [1, 2, 3] -``` - -See: [`deepClone()`](#deepClone) - - - -## createObject(parent, [props]):Object - -Create Object using prototypal inheritance and setting custom properties. - -Mix between [Douglas Crockford Prototypal Inheritance](http://javascript.crockford.com/prototypal.html) and the EcmaScript 5 `Object.create()` method. - -### Arguments - - 1. `parent` (Object) : Parent Object - 2. `[props]` (Object) : Object properties - -### Example - -```js -var base = { - trace : function(){ - console.log(this.name); - } -}; - -var myObj = createObject(base, { - name : 'Lorem Ipsum' -}); - -myObject.trace(); // "Lorem Ipsum" -``` - - - -## ctorApply(constructor, args):Object - -Do `Function.prototype.apply()` on a constructor while maintaining prototype -chain. - -```js -function Person(name, surname) { - this.name = name; - this.surname = surname; -} - -Person.prototype.walk = function(){ - console.log(this.name +' is walking'); -}; - -var args = ['John', 'Doe']; - -// "similar" effect as calling `new Person("John", "Doe")` -var john = ctorApply(Person, args); -john.walk(); // "John is walking" -``` - - - -## deepClone(val, [instanceClone]):* - -Deep clone native types like Object, Array, RegExp, Date and primitives. - -The `instanceClone` function will be invoked to clone objects that are not -"plain" objects (as defined by [`isPlainObject`](#isPlainObject)) if it is -provided. If `instanceClone` is not specified, it will not attempt to clone -non-plain objects, and will copy the object reference. - -### Example - -```js -var a = {foo:'bar', obj: {a:1, b:2}}; -var b = deepClone(a); // {foo:'bar', obj: {a:1, b:2}} -console.log( a === b ); // false -console.log( a.obj === b.obj ); // false - -var c = [1, 2, [3, 4]]; -var d = deepClone(c); // [1, 2, [3, 4]] -var e = c.concat(); // [1, 2, [3, 4]] - -console.log( c[2] === d[2] ); // false -// concat doesn't do a deep clone, arrays are passed by reference -console.log( e[2] === d[2] ); // true - -function Custom() { } -function cloneCustom(x) { return new Custom(); } -var f = { test: new Custom() }; -var g = deepClone(f, cloneCustom); -g.test === f.test // false, since new Custom instance will be created -``` - -See: [`clone()`](#clone) - - - -## defaults(val, ...defaults):void - -Return first value that isn't `null` or `undefined`. - - function doSomethingAwesome(foo, bar) { - // default arguments - foo = defaults(foo, 'lorem'); - bar = defaults(bar, 123); - // ... - } - - - -## inheritPrototype(child, parent):void - -Inherit prototype from another Object. - -```js -function Foo(name){ - this.name = name; -} -Foo.prototype = { - getName : function(){ - return this.name; - } -}; - -function Bar(name){ - this.name = name; -} -//should be called before calling constructor -inheritPrototype(Bar, Foo); - -var myObj = new Bar('lorem ipsum'); -myObj.getName(); // "lorem ipsum" -``` - - -## is(x, y):Boolean - -Check if both values are identical/egal. - -```js -// wtfjs -NaN === NaN; // false --0 === +0; // true - -is(NaN, NaN); // true -is(-0, +0); // false -is('a', 'b'); // false -``` - -See: [`isnt()`](#isnt) - - - -## isnt(x, y):Boolean - -Check if both values are not identical/egal. - -```js -// wtfjs -NaN === NaN; // false --0 === +0; // true - -isnt(NaN, NaN); // false -isnt(-0, +0); // true -isnt('a', 'b'); // true -``` - -See: [`is()`](#is) - - - - -## isArguments(val):Boolean - -If value is an "Arguments" object. - - - -## isArray(val):Boolean - -If value is an Array. Uses native ES5 `Array.isArray()` if available. - - - -## isBoolean(val):Boolean - -If value is a Boolean. - - - -## isDate(val):Boolean - -If value is a Date. - - - -## isEmpty(val):Boolean - -Checks if Array/Object/String is empty. - - -```js -isEmpty(''); // true -isEmpty('bar'); // false -isEmpty([]); // true -isEmpty([1, 2]); // false -isEmpty({}); // true -isEmpty({a:1, b:2}); // false -``` - - -## isFinite(val):Boolean - -Checks if value is Finite. - -Note: This is not the same as native `isFinite`, which will return `true` for -booleans and empty strings. See http://es5.github.com/#x15.1.2.5. - - - -## isFunction(val):Boolean - -If value is a Function. - - - -## isKind(val, kind):Boolean - -If value is of "kind". (used internally by some of the *isSomething* checks). - -Favor the other methods since strings are commonly mistyped and also because -some "kinds" can only be accurately checked by using other methods (e.g. -`Arguments`), some of the other checks are also faster. - -```js -isKind([1,2], 'Array'); // true -isKind(3, 'Array'); // false -isKind(3, 'Number'); // true -``` - -See: [`kindOf()`](#kindOf) - - - -## isInteger(val):Boolean - -Check if value is an integer. - -```js -isInteger(123); // true -isInteger(123.45); // false -isInteger({}); // false -isInteger('foo'); // false -isInteger('123'); // false -``` - - - -## isNaN(val):Boolean - -Check if value is `NaN`. - -Note: This is not the same as native `isNaN`, which will return `true` for -`undefined` and other values. See [ES5 isNaN](http://es5.github.com/#x15.1.2.4) - - - -## isNull(val):Boolean - -If value is `null`. - - - -## isNumber(val):Boolean - -If value is a Number. - - - -## isObject(val):Boolean - -If value is an Object. - - - -## isPlainObject(val):Boolean - -If the value is an Object created by the Object constructor. - - - -## isRegExp(val):Boolean - -If value is a RegExp. - - - -## isString(val):Boolean - -If value is a String. - - - -## isUndefined(val):Boolean - -If value is `undefined`. - - - -## kindOf(val):String - -Gets kind of value (e.g. "String", "Number", "RegExp", "Null", "Date"). -Used internally by `isKind()` and most of the other *isSomething* checks. - -```js -kindOf([1,2]); // "Array" -kindOf('foo'); // "String" -kindOf(3); // "Number" -``` - -See: [`isKind()`](#isKind) - - -## toArray(val):Array - -Convert array-like object into Array or wrap value into Array. - -```js -toArray({ - "0" : "foo", - "1" : "bar", - "length" : 2 -}); // ["foo", "bar"] - -function foo(){ - return toArray(arguments); -} -foo("lorem", 123); // ["lorem", 123] - -toArray("lorem ipsum"); // ["lorem ipsum"] -toArray(window); // [window] -toArray({foo:"bar", lorem:123}); // [{foo:"bar", lorem:123}] -``` - -See: object/values() - - - -## toString(val):String - -Convert any value to its string representation. - -Will return an empty string for `undefined` or `null`, otherwise will convert -the value to its string representation. - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/math.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/math.md deleted file mode 100644 index f45be3ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/math.md +++ /dev/null @@ -1,298 +0,0 @@ -# math # - -Math utilities. - - -## ceil(val[, step]):Number - -Round value up to full steps. Similar to `Math.ceil()` but can round value -to an arbitrary *radix*. - - ceil(7.2); // 8 - ceil(7.8); // 8 - ceil(7, 5); // 10 - ceil(11, 5); // 15 - ceil(15, 5); // 15 - -### Common use cases - -Round values by increments of 5/10/1000/etc. - -See: [`round()`](#round), [`floor()`](#floor), [`countSteps()`](#countSteps) - - - -## clamp(val, min, max):Number - -Clamps value inside range. - -`clamp()` is extremely useful in cases where you need to limit a value inside -a certain range. So instead of doing a complex `if/else` to filter/process the -value you can restrict it to always be inside the desired range: - - clamp(-5, 0, 10); // 0 - clamp(7, 1, 10); // 7 - clamp(8, 1, 10); // 8 - clamp(10, 1, 10); // 10 - clamp(11, 1, 10); // 10 - -If the value is smaller than `min` it returns the `min`, if `val` is higher -than `max` it returns `max`. - -### Common use cases - -Any situation where you need to limit a number inside a range like: slider -position, image galleries <small>(so user can't skip to an image that doesn't -exist)</small>, drag and drop, scroll boundaries, etc. - -See: [`loop()`](#loop) - - - - -## countSteps(val, step[, overflow]):Number - -Count number of full steps. - -### Arguments: - - 1. `val` (Number) : Value. - 2. `step` (Number) : Step size. - 3. `[overflow]` (Number) : Maximum number of steps, nSteps will loop if -`>=` than overflow. - - -Count steps is very useful for cases where you need to know how many "full -steps" the number *completed*. Think of it as a division that only returns -integers and ignore remainders. - - countSteps(3, 5); // 0 - countSteps(6, 5); // 1 - countSteps(12, 5); // 2 - countSteps(18, 5); // 3 - countSteps(21, 5); // 4 - -You can also set an `overflow` which will reset the *counter* before reaching -this number. - - countSteps(3, 5, 3); // 0 - countSteps(6, 5, 3); // 1 - countSteps(12, 5, 3); // 2 - countSteps(18, 5, 3); // 0 - countSteps(21, 5, 3); // 1 - -### Common use cases - -#### How many items fit inside an area: - - var containerWidth = 100; - var itemWidth = 8; - var howManyFit = countSteps(containerWidth, itemWidth); // 12 - -#### Split value into different scales or convert value from one scale to another - -From [mout/time/parseMs](time.html#parseMs): - - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - // {days:27, hours:4, minutes:26, seconds:5, milliseconds:454} - parseMs(2348765454); - - - -## floor(val[, step]):Number - -Round value down to full steps. Similar to `Math.floor()` but can round value -to an arbitrary *radix*. (formerly `snap`) - - floor(7.2); // 7 - floor(7.8); // 7 - floor(7, 5); // 5 - floor(11, 5); // 10 - floor(15, 5); // 15 - -### Common use cases - -Round values by increments of 5/10/1000/etc. - -See: [`round()`](#round), [`ceil()`](#ceil), [`countSteps()`](#countSteps) - - - -## inRange(val, min, max[, threshold]):Boolean - -Checks if value is inside the range. - - inRange(-6, 1, 10); // false - inRange( 5, 1, 10); // true - inRange(12, 1, 10); // false - -The threshold can be useful when you want granular control of what should match -and/or the precision could change at runtime or by some configuration option, -avoids the clutter of adding/subtracting the `threshold` from `mix` and `max`. - - inRange(12, 1, 10, 2); // true - inRange(13, 1, 10, 2); // false - -### Common use cases - -Anything that needs to check if value is inside a range, be it collision -detection, limiting interaction by mouse position, ignoring parts of the logic -that shouldn't happen if value isn't valid, simplify `if/else` conditions, -making code more readable, etc... - - - - -## isNear(val, target, threshold):Boolean - -Check if value is close to target. - -Similar to `inRange()` but used to check if value is close to a certain value -or match the desired value. Basically to simplify `if/else` conditions and to -make code clearer. - - isNear( 10.2, 10, 0.5); // true - isNear( 10.5, 10, 0.5); // true - isNear(10.51, 10, 0.5); // false - -### Common use cases - -Games where a certain action should happen if an *actor* is close to a target, -gravity fields, any numeric check that has some tolerance. - - - - -## lerp(ratio, start, end):Number - -Linear interpolation. - - lerp(0.5, 0, 10); // 5 - lerp(0.75, 0, 10); // 7.5 - -### Common use cases - -Linear interpolation is commonly used to create animations of elements moving -from one point to another, where you simply update the current ratio (which in -this case represents time) and get back the position of the element at that -"frame". - -The core idea of `lerp` is that you are using a number that goes from `0` to -`1` to specify a ratio inside that scale. This concept can be applied to -convert numbers from different scales easily. - -See: [`map()`](#map), [`norm()`](#norm) - - - - -## loop(val, min, max):Number - -Loops value inside range. Will return `min` if `val > max` and `max` if `val -< min`, otherwise it returns `val`. - - loop(-1, 0, 10); // 10 - loop( 1, 0, 10); // 1 - loop( 5, 0, 10); // 5 - loop( 9, 0, 10); // 9 - loop(10, 0, 10); // 10 - loop(11, 0, 10); // 0 - -Similar to [`clamp()`](#clamp) but *loops* the value inside the range when an -overflow occurs. - -### Common use cases - -Image galleries, infinite scroll, any kind of logic that requires that the -first item should be displayed after the last one or the last one should be -displayed after first if going on the opposite direction. - -See: [`clamp()`](#clamp) - - - - -## map(val, min1, max1, min2, max2):Number - -Maps a number from one scale to another. - - map(3, 0, 4, -1, 1) // 0.5 - map(3, 0, 10, 0, 100) // 30 - -### Common use cases - -Very useful to convert values from/to multiple scales. - -Let's suppose we have a slider that needs to go from `2000` to `5000` and that slider -has `300px` of width, here is how we would translate the knob position into the -current value: - - var knobX = 123; - var sliderWid = 300; - var minVal = 2000; - var maxVal = 5000; - - var curVal = map(knobX, 0, sliderWid, minVal, maxVal); // 3230 - -See: [`lerp()`](#lerp), [`norm()`](#norm) - - - - -## norm(val, min, max):Number - -Gets normalized ratio of value inside range. - - norm(50, 0, 100); // 0.5 - norm(75, 0, 100); // 0.75 - -### Common use cases - -Convert values between scales, used by [`map()`](#map) internally. Direct -opposite of [`lerp()`](#lerp). - -See: [`lerp()`](#lerp), [`map()`](#map) - - - -## round(val[, step]):Number - -Round value to full steps. Similar to `Math.round()` but allow setting an -arbitrary *radix*. - - // default - round(0.22); // 0 - round(0.49); // 0 - round(0.51); // 1 - - // custom radix - round(0.22, 0.5); // 0 - round(0.49, 0.5); // 0.5 - round(0.51, 0.5); // 0.5 - round(0.74, 0.5); // 0.5 - round(0.75, 0.5); // 1 - round(1.24, 0.5); // 1 - round(1.25, 0.5); // 1.5 - round(1.74, 0.5); // 1.5 - -### Common use cases - -Round values by increments of 0.5/5/10/1000/etc. - -See: [`floor()`](#floor), [`ceil()`](#ceil), [`countSteps()`](#countSteps) - - - -------------------------------------------------------------------------------- - -For more usage more info check the specs and source code. - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/number.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/number.md deleted file mode 100644 index 8d93865b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/number.md +++ /dev/null @@ -1,225 +0,0 @@ -# number # - -Number utilities. - - -## abbreviate(val[, nDecimalDigits, dictionary]):String - -Abbreviate number to thousands (K), millions (M) or billions (B). - -The default value for `nDecimalDigits` is `1`. - -### Example - - abbreviate(123456); // "123.5K" - abbreviate(12345678); // "12.3M" - abbreviate(1234567890); // "1.2B" - -You can set the amount of decimal digits (default is `1`): - - abbreviate(543); // "0.5K" - abbreviate(543, 1); // "0.5K" - abbreviate(543, 2); // "0.54K" - abbreviate(543, 3); // "0.543K" - -You can customize the abbreviation by passing a custom "dictionary": - - var _ptbrDict = { - thousands : ' mil', - millions : ' Mi', - billions : ' Bi' - }; - function customAbbr(val) { - return abbreviate(val, 1, _ptbrDict); - } - - customAbbr(123456); // "123.5 mil" - customAbbr(12345678); // "12.3 Mi" - customAbbr(1234567890); // "1.2 Bi" - - - -## currencyFormat(val[, nDecimalDigits, decimalSeparator, thousandsSeparator]):String - -Format a number as currency. - -### Example: - - currencyFormat(1000); // "1,000.00" - currencyFormat(1000, 1); // "1,000.0" - currencyFormat(1000, 2, ',', '.'); // "1.000,00" - - - -## enforcePrecision(val, nDecimalDigits):Number - -Enforce a specific amount of decimal digits and also fix floating point -rounding issues. - -### Example: - -```js -enforcePrecision(0.615, 2); // 0.62 -enforcePrecision(0.625, 2); // 0.63 -//floating point rounding "error" (rounds to odd number) -+(0.615).toFixed(2); // 0.61 -+(0.625).toFixed(2); // 0.63 -``` - - - -## MAX_INT:Number - -Maximum 32-bit signed integer value. `Math.pow(2, 31) - 1` - -### Example: - -```js -console.log( MAX_INT ); // 2147483647 -``` - - -## MAX_UINT:Number - -Maximum 32-bit unsigned integer value. `Math.pow(2, 32) - 1` - -### Example: - -```js -console.log( MAX_UINT ); // 4294967295 -``` - - -## MIN_INT:Number - -Minimum 32-bit signed integer value. `Math.pow(2, 31) * -1`. - -### Example: - -```js -console.log( MIN_INT ); // -2147483648 -``` - - -## pad(n, minLength[, char]):String - -Add padding zeros if `n.length` < `minLength`. - -### Example: - -```js -pad(1, 5); // "00001" -pad(12, 5); // "00012" -pad(123, 5); // "00123" -pad(1234, 5); // "01234" -pad(12345, 5); // "12345" -pad(123456, 5); // "123456" - -// you can also specify the "char" used for padding -pad(12, 5, '_'); // "___12" -``` - -see: [string/lpad](./string.html#lpad) - - - -## rol(val, shift):Number - -Bitwise circular shift left. - -More info at [Wikipedia#Circular_shift](http://en.wikipedia.org/wiki/Circular_shift) - - - -## ror(val, shift):Number - -Bitwise circular shift right. - -More info at [Wikipedia#Circular_shift](http://en.wikipedia.org/wiki/Circular_shift) - - - -## sign(val):Number - -Returns `-1` if value is negative, `0` if the value is `0` and `1` if value is positive. Useful for -multiplications. - -```js -sign(-123); // -1 -sign(123); // 1 -sign(0); // 0 -``` - - - -## toInt(val):Number - -"Convert" value into an 32-bit integer. Works like `Math.floor` if `val > 0` and -`Math.ceil` if `val < 0`. - -**IMPORTANT:** val will wrap at [number/MIN_INT](#MIN_INT) and -[number/MAX_INT](#MAX_INT). - -Created because most people don't know bitwise operations and also because this -feature is commonly needed. - -[Perf tests](http://jsperf.com/vs-vs-parseint-bitwise-operators/7) - -### Example: - -```js -toInt(1.25); // 1 -toInt(0.75); // 0 -toInt(-0.55); // 0 -toInt(-5.0001) // -5 -``` - - - -## toUInt(val):Number - -"Convert" value into an 32-bit unsigned integer. - -Works like AS3#uint(). - -**IMPORTANT:** val will wrap at 2^32. - -### Example: - -```js -toUInt(1.25); // 1 -toUInt(0.75); // 0 -toUInt(-0.55); // 0 -toUInt(-5.0001); // 4294967291 -toUInt(Math.pow(2,32) - 0.5); // 4294967295 -toUInt(Math.pow(2,32) + 0.5); // 0 -``` - - -## toUInt31(val):Number - -"Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - -Useful since all bitwise operators besides `>>>` treat numbers as signed -integers. - -**IMPORTANT:** val will wrap at 2^31 and negative numbers will be treated as -`zero`. - -### Example: - -```js -toUInt31(1.25); // 1 -toUInt31(0.75); // 0 -toUInt31(-0.55); // 0 -toUInt31(-5.0001); // 0 -toUInt31(Math.pow(2,31) - 0.5); // 21474836470 -toUInt31(Math.pow(2,31) + 0.5); // 0 -``` - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/object.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/object.md deleted file mode 100644 index b4d5e483..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/object.md +++ /dev/null @@ -1,780 +0,0 @@ -# object # - -Object utilities. - - - -## bindAll(obj, [...methodNames]):void - -Bind methods of the target object to always execute on its own context -(ovewritting the original function). - -See: [function/bind](./function.html#bind) - -```js -var view = { - name: 'Lorem Ipsum', - logNameOnClick: function() { - console.log(this.name); - } -}; - -// binds all methods by default -bindAll(view); -jQuery('#docs').on('click', view.logNameOnClick); -``` - -You can also specify the list of methods that you want to bind (in case you -just want to bind a few of them). - -```js -// only the listed methods will be bound to `obj` context -bindAll(obj, 'logNameOnClick', 'doAwesomeStuffOnDrag'); -``` - - - -## contains(obj, value):Boolean - -Similar to [Array/contains](array.html#contains). Checks if Object contains -value. - -```js -var obj = { - a: 1, - b: 2, - c: 'bar' -}; -contains(obj, 2); // true -contains(obj, 'foo'); // false -``` - - - -## deepEquals(a, b, [callback]):Boolean - -Recursively tests whether two objects contain the same keys and equal values. - -`callback` specifies the equality comparison function used to compare -non-object values. It defaults to using the strict equals (`===`) operator. - -If the values are both an object, it will recurse into the objects, checking if -their keys/values are equal. It will only check the keys and values contained -by the objects; it will not check the objects' prototypes. If the either of -the values are not objects, they will be checked using the `callback` function. - -Example: - -```js -deepEquals({ a: 1 }, { a: 1 }); // true -deepEquals({ value: { a: 1 } }, { value: { a: 1 } }); // true -deepEquals({ value: { a: 1 } }, { value: { a: 2 } }); // false -deepEquals({ value: { a: 1 } }, { value: { a: 1, b: 2 } }); // false -deepEquals({}, null); // false -deepEquals(null, null); // true -deepEquals( - { a: { b: 1 } }, - { a: { b: '1' } }, - function(a, b) { return a == b; }); // true -``` - -See: [`equals()`](#equals) - - - -## deepFillIn(target, ...objects):Object - -Fill missing properties recursively. - -It's different from `deepMixIn` since it won't override any existing property. -It's also different from `merge` since it won't clone child objects during the -process. - -It returns the target object and mutates it in place. - -See: [`fillIn()`](#fillIn), [`deepMixIn()`](#deepMixIn), [`merge()`](#merge) - -```js -var base = { - foo : { - bar : 123 - }, - lorem : 'ipsum' -}; -var options = deepFillIn({foo : { baz : 45 }, lorem : 'amet'}, base); -// > {foo: {bar:123, baz : 45}, lorem : 'amet'} -``` - - - -## deepMatches(target, pattern):Boolean - -Recursively checks if object contains all properties/value pairs. When both -the target and pattern values are arrays, it checks that the target value -contain matches for all the items in the pattern array (independent of order). - -```js -var john = { - name: 'John', - age: 22, - pets: [ - { type: 'cat', name: 'Grumpy Cat' }, - { type: 'dog', name: 'Hawk' } - ] -}; - -deepMatches(john, { name: 'John' }); // true -deepMatches(john, { age: 21 }); // false -deepMatches(john, { pets: [ { type: 'cat' } ] }); // true -deepMatches(john, { pets: [ { name: 'Hawk' } ] }); // true -deepMatches(john, { pets: [ { name: 'Hairball' } ] }); // false -``` - -See [`matches()`](#matches) - - - -## deepMixIn(target, ...objects):Object - -Mixes objects into the target object, recursively mixing existing child objects -as well. - -It will only recursively mix objects if both (existing and new) values are -plain objects. - -Returns the target object. Like [`merge()`](#merge), but mutates the target -object, and does not clone child objects. - -```js -var target = { - foo: { - name: "foo", - id: 1 - } -}; - -deepMixIn(target, { foo: { id: 2 } }); -console.log(target); // { foo: { name: "foo", id: 2 } } -``` - -See: [`mixIn()`](#mixIn), [`merge()`](#merge), [`deepFillIn()`](#deepFillIn) - - - -## equals(a, b, [callback]):Boolean - -Tests whether two objects contain the same keys and values. - -`callback` specifies the equality comparison function used to compare the -values. It defaults to using the strict equals (`===`) operator. - -It will only check the keys and values contained by the objects; it will not -check the objects' prototypes. If either of the values are not objects, they -will be compared using the `callback` function. - -```js -equals({}, {}); // true -equals({ a: 1 }, { a: 1 }); // true -equals({ a: 1 }, { a: 2 }); // false -equals({ a: 1, b: 2 }, { a: 1 }); // false -equals({ a: 1 }, { a: 1, b: 2 }); // false -equals(null, null); // true -equals(null, {}); // false -equals({ a: 1 }, { a: '1' }, function(a, b) { return a == b; }); // true -``` - - - -## every(obj, callback, [thisObj]):Boolean - -Similar to [Array/every](array.html#every). Tests whether all properties in the -object pass the test implemented by the provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -every(obj, isNumber); // false -``` - - - -## fillIn(obj, ...default):Object - -Fill in missing properties in object with values from the *defaults* objects. - - var base = { - foo : 'bar', - num : 123 - }; - - fillIn({foo:'ipsum'}, base); // {foo:'ipsum', num:123} - -PS: it allows merging multiple objects at once, the first ones will take -precedence. - -See: [`mixIn()`](#mixIn), [`merge()`](#merge), [`deepFillIn()`](#deepFillIn) - - - -## filter(obj, callback, [thisObj]) - -Returns a new object containing all properties where `callback` returns true, -similar to Array/filter. It does not use properties from the object's -prototype. - -Callback receives the same arguments as `forOwn()`. - -See: [`forOwn()`](#forOwn), [`forIn()`](#forIn), [`pick()`](#pick) - -```js -var obj = { - foo: 'value', - bar: 'bar value' -}; - -// returns { bar: 'bar value' } -filter(obj, function(v) { return value.length > 5; }); - -// returns { foo: 'value' } -filter(obj, function(v, k) { return k === 'foo'; }); -``` - - - -## find(obj, callback, [thisObj]) - -Loops through all the properties in the Object and returns the first one that -passes a truth test (callback), similar to [Array/find](array.html#find). -Unlike Array/find, order of iteration is not guaranteed. - -```js -var obj = { - a: 'foo', - b: 12 -}; - -find(obj, isString); // 'foo' -find(obj, isNumber); // 12 -``` - - - -## forIn(obj, callback[, thisObj]) - -Iterate over all properties of an Object, similar to -[Array/forEach](array.html#forEach). - -It [avoids don't enum bug on IE](https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug). -It **will** iterate over inherited (enumerable) properties from the prototype. - -It allows exiting the iteration early by returning `false` on the callback. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys), [`values()`](#values) - -### Callback arguments - -Callback will receive the following arguments: - - 1. Property Value (*) - 2. Key name (String) - 3. Target object (Object) - -### Example - -```js -function Foo(){ - this.foo = 1; - this.bar = 2; -} - -Foo.prototype.lorem = 4; - -var obj = new Foo(); - -var result = 0; -var keys = []; - -forIn(obj, function(val, key, o){ - result += val; - keys.push(key); -}); - -console.log(result); // 7 -console.log(keys); // ['foo', 'bar', 'lorem'] -``` - - - -## forOwn(obj, callback[, thisObj]) - -Iterate over all own properties from an Object, similar to -[Array/forEach](array.html#forEach). - -It [avoids don't enum bug on IE](https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug). -Notice that it **won't** iterate over properties from the prototype. - -It allows exiting the iteration early by returning `false` on the callback. - -See: [`forIn()`](#forIn), [`keys()`](#keys), [`values()`](#values) - -### Callback arguments - -Callback will receive the following arguments: - - 1. Property Value (*) - 2. Key name (String) - 3. Target object (Object) - -### Example - -```js -function Foo(){ - this.foo = 1; - this.bar = 2; -} - -// will be ignored -Foo.prototype.lorem = 4; - -var obj = new Foo(); - -var result = 0; -var keys = []; - -forOwn(obj, function(val, key, o){ - result += val; - keys.push(key); -}); - -console.log(result); // 3 -console.log(keys); // ['foo', 'bar'] -``` - - - -## functions(obj):Array - -Returns a sorted list of all enumerable properties that have function values -(including inherited properties). - -```js -var obj = { - foo : function(){}, - bar : 'baz' -}; -functions(obj); // ['foo'] -``` - - - -## get(obj, propName):* - -Returns nested property value. Will return `undefined` if property doesn't -exist. - -See: [`set()`](#set), [`namespace()`](#namespace), [`has()`](#has) - -```js -var lorem = { - ipsum : { - dolor : { - sit : 'amet' - } - } - }; - -get(lorem, 'ipsum.dolor.sit'); // "amet" -get(lorem, 'foo.bar'); // undefined -``` - - - -## has(obj, propName):Boolean - -Checks if object contains a child property. Useful for cases where you need to -check if an object contain a *nested* property. It will get properties -inherited by the prototype. - -see: [`hasOwn()`](#hasOwn), [`get()`](#get) - -```js -var a = { - b : { - c : 123 - } - }; - -has(a, 'b.c'); // true -has(a, 'foo.c'); // false -``` - -### Common use case - -```js -if( has(a, 'foo.c') ){ // false - // ... -} - -if( a.foo.c ){ // ReferenceError: `foo` is not defined - // ... -} -``` - - - -## hasOwn(obj, propName):Boolean - -Safer `Object.hasOwnProperty`. Returns a boolean indicating whether the object -has the specified property. - -see: [`has()`](#has) - -```js -var obj = { - foo: 1, - hasOwnProperty : 'bar' -}; - -obj.hasOwnProperty('foo'); // ERROR! hasOwnProperty is not a function - -hasOwn(obj, 'foo'); // true -hasOwn(obj, 'hasOwnProperty'); // true -hasOwn(obj, 'toString'); // false -``` - - - -## keys(obj):Array - -Returns an array of all own enumerable properties found upon a given object. -It will use the native `Object.keys` if present. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`values()`](#values) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -keys(obj); // ['foo', 'bar', 'lorem'] -``` - - - -## map(obj, callback, [thisObj]):Object - -Returns a new object where the property values are the result of calling the -callback for each property in the original object, similar to Array/map. - -The callback function receives the same arguments as in `forOwn()`. - -See: [`forOwn()`](#forOwn) - -```js -var obj = { foo: 1, bar: 2 }, - data = { foo: 0, bar: 1 }; - -map(obj, function(v) { return v + 1; }); // { foo: 2, bar: 3 } -map(obj, function(v, k) { return k; }); // { foo: "foo", bar: "bar" } -map(obj, function(v, k) { return this[k]; }, data); // { foo: 0, bar: 1 } -``` - - - -## matches(obj, props):Boolean - -Checks if object contains all properties/values pairs. Useful for validation -and filtering. - -```js -var john = {age:25, hair:'long', beard:true}; -var mark = {age:27, hair:'short', beard:false}; -var hippie = {hair:'long', beard:true}; -matches(john, hippie); // true -matches(mark, hippie); // false -``` - -See [`deepMatches()`](#deepMatches) - - - -## merge(...objects):Object - -Deep merges objects. Note that objects and properties will be cloned during the -process to avoid undesired side effects. It return a new object and won't -affect source objects. - -```js -var obj1 = {a: {b: 1, c: 1, d: {e: 1, f: 1}}}; -var obj2 = {a: {b: 2, d : {f : 'yeah'} }}; - -merge(obj1, obj2); // {a: {b : 2, c : 1, d : {e : 1, f : 'yeah'}}} -``` - -See: [`deepMixIn()`](#deppMixIn), [`deepFillIn()`](#deepFillIn) - - - -## max(obj[, iterator]):* - -Returns maximum value inside object or use a custom iterator to define how -items should be compared. Similar to [Array/max](array.html#max). - -See: [`min()`](#min) - -```js -max({a: 100, b: 2, c: 1, d: 3, e: 200}); // 200 -max({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'lorem' -``` - - - -## min(obj[, iterator]):* - -Returns minimum value inside object or use a custom iterator to define how -items should be compared. Similar to [Array/min](array.html#min). - -See: [`max()`](#max) - -```js -min({a: 100, b: 2, c: 1, d: 3, e: 200}); // 1 -min({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'foo' -``` - - - -## mixIn(target, ...objects):Object - -Combine properties from all the objects into first one. - -This method affects target object in place, if you want to create a new Object -pass an empty object as first parameter. - -### Arguments - - 1. `target` (Object) : Target Object. - 2. `...objects` (...Object) : Objects to be combined (0...n objects). - -### Example - -```js -var a = {foo: "bar"}; -var b = {lorem: 123}; - -mixIn({}, a, b); // {foo: "bar", lorem: 123} -console.log(a); // {foo: "bar"} - -mixIn(a, b); // {foo: "bar", lorem: 123} -console.log(a); // {foo: "bar", lorem: 123} -``` - -See: [`fillIn()`](#fillIn), [`merge()`](#merge) - - - - -## namespace(obj, propName):Object - -Creates an empty object inside namespace if not existent. Will return created -object or existing object. - -See: [`get()`](#get), [`set()`](#set) - -```js -var obj = {}; -namespace(obj, 'foo.bar'); // {} -console.log(obj); // {foo:{bar:{}}} -``` - - - -## pick(obj, ...keys):Object - -Return a copy of the object that contains only the whitelisted keys. - -See: [`filter()`](#filter) - -```js -var user = { - firstName : 'John', - lastName : 'Doe', - dob : '1985/07/23', - gender : 'male' -}; - -// can pass an array of keys as second argument -var keys = ['firstName', 'dob'] -pick(user, keys); // {firstName:"John", dob: "1985/07/23"} - -// or multiple arguments -pick(user, 'firstName', 'lastName'); // {firstName:"John", lastName: "Doe"} -``` - - - -## pluck(obj, propName):Object - -Extract an object containing property values with keys as they appear in the -passed object. - -```js -var users = { - first: { - name : 'John', - age : 21 - }, - second: { - name : 'Mary', - age : 25 - } -}; - -pluck(users, 'name'); // {first: 'John', second: 'Mary'} ); -pluck(users, 'age'); // {first: 21, second: 25} ); -``` - - - -## reduce(obj, callback, initial, [thisObj]):* - -Similar to [Array/reduce](array.html#reduce). - -Apply a function against an accumulator and each property of the object (order -is undefined) as to reduce it to a single value. - -```js -var obj = {a: 1, b: 2, c: 3, d: 4}; - -function sum(prev, cur, key, list) { - compare1.push(prev); - return prev + cur; -} - -reduce(obj, sum); // 10 -``` - - - -## reject(obj, callback, thisObj):Object - -Returns a new object containing all properties where `callback` returns true, -similar to [Array/reject](array.html#reject). It does not use properties from -the object's prototype. Opposite of [`filter()`](#filter). - -See [`filter()`](#filter) - -### Example - -```js -var obj = {a: 1, b: 2, c: 3, d: 4, e: 5}; -reject(obj, function(x) { return (x % 2) !== 0; }); // {b: 2, d: 4} -``` - - - -## values(obj):Array - -Returns an array of all own enumerable properties values found upon a given object. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -values(obj); // [1, 2, 3] -``` - - - -## set(obj, propName, value) - -Sets a nested property value. - -See: [`get()`](#get), [`namespace()`](#namespace) - -```js -var obj = {}; -set(obj, 'foo.bar', 123); -console.log(obj.foo.bar); // 123 -console.log(obj); // {foo:{bar:123}} -``` - - - -## size(obj):Number - -Returns the count of own enumerable properties found upon a given object. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -size(obj); // 3 -``` - - - -## some(obj, callback, [thisObj]):Boolean - -Similar to [Array/some](array.html#some). Tests whether any properties in the -object pass the test implemented by the provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -some(obj, isNumber); // true -``` - - - -## unset(obj, propName):Boolean - -Delete object property if existent and returns a boolean indicating succes. It -will also return `true` if property doesn't exist. - -Some properties can't be deleted, to understand why [check this -article](http://perfectionkills.com/understanding-delete/). - -See: [`set()`](#set) - -```js -var lorem = { - ipsum : { - dolor : { - sit : 'amet' - } - } - }; - -unset(lorem, 'ipsum.dolor.sit'); // true -console.log(lorem.ipsum.dolor); // {} -unset(lorem, 'foo.bar'); // true -``` diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/queryString.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/queryString.md deleted file mode 100644 index 1be3c102..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/queryString.md +++ /dev/null @@ -1,115 +0,0 @@ -# queryString # - -Utilities for query string manipulation. - - - -## contains(url, paramName):Boolen - -Checks if query string contains parameter. - -### Arguments: - - 1. `url` (String) : URL or query string. - 2. `paramName` (String) : Parameter name. - -### Example: - -```js -var url = 'example.com/?lorem=ipsum'; -contains(url, 'lorem'); // true -contains(url, 'foo'); //false -``` - - - -## decode(queryStr[, shouldTypecast]):Object - -Parses query string and creates an object of keys => vals. - -Will typecast value with [`string/typecast`](string.html#typecast) by default -and decode string parameters using `decodeURIComponent()`. - -```js -var query = '?foo=bar&lorem=123'; -decode(query); // {foo: "bar", lorem: 123} -decode(query, false); // {foo: "bar", lorem: "123"} -``` - - -## encode(obj):String - -Encode object into a query string. - -Will encode parameters with `encodeURIComponent()`. - -```js -encode({foo: "bar", lorem: 123}); // "?foo=bar&lorem=123" -``` - - -## getParam(url, param[, shouldTypecast]):* - -Get query parameter value. - -Will typecast value with [`string/typecast`](string.html#typecast) by default. - -See: [`setParam()`](#setParam) - -### Arguments: - - 1. `url` (String) : Url. - 2. `param` (String) : Parameter name. - 3. `[shouldTypecast]` (Boolean) : If it should typecast value. - -### Example: - -```js -var url = 'example.com/?foo=bar&lorem=123&ipsum=false'; -getParam(url, 'dolor'); // "amet" -getParam(url, 'lorem'); // 123 -getParam(url, 'lorem', false); // "123" -``` - - -## parse(url[, shouldTypecast]):Object - -Parses URL, extracts query string and decodes it. - -It will typecast all properties of the query object unless second argument is -`false`. - -Alias to: `decode(getQuery(url))`. - -```js -var url = 'example.com/?lorem=ipsum&a=123'; -parse(url); // {lorem: "ipsum", a: 123} -parse(url, false); // {lorem: "ipsum", a: "123"} -``` - - -## getQuery(url):String - -Gets full query as string with all special chars decoded. - -```js -getQuery('example.com/?lorem=ipsum'); // "?lorem=ipsum" -``` - - -## setParam(url, paramName, value):String - -Add new query string parameter to URL or update existing value. - -See: [`getParam()`](#getParam) - -```js -setParam('?foo=bar&lorem=0', 'lorem', 'ipsum'); // '?foo=bar&lorem=ipsum' -setParam('?lorem=1', 'foo', 123); // '?lorem=1&foo=123' -``` - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/random.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/random.md deleted file mode 100644 index b058b4e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/random.md +++ /dev/null @@ -1,218 +0,0 @@ -# random # - -Pseudo-random generators. - -mout uses `Math.random` by default on all the pseudo-random generators, if -you need a seeded random or a better algorithm see the [`random()`](#random) -documentation for instructions. - - - -## choice(...items):* - -Returns a random element from the supplied arguments or from an array if single -argument is an array. - -### Example: - -```js -choice(1, 2, 3, 4, 5); // 3 - -var arr = ['lorem', 'ipsum', 'dolor']; -choice(arr); // 'dolor' -``` - - - -## guid():String - -Generates a pseudo-random [Globally Unique Identifier](http://en.wikipedia.org/wiki/Globally_unique_identifier) (v4). - -Since the total number of GUIDs is 2<sup>122</sup> the chance of generating the -same value twice is negligible. - -**Important:** this method uses `Math.random` by default so the UUID isn't -*safe* (sequence of outputs can be predicted in some cases), check the -[`random()`](#random) documentation for more info on how to replace the default -PRNG if you need extra safety or need *seeded* results. - -See: [`randHex()`](#randHex), [`random()`](#random) - -### Example: - -```js -guid(); // 830e9f50-ac7f-4369-a14f-ed0e62b2fa0b -guid(); // 5de3d09b-e79c-4727-932b-48c49228d508 -``` - - - -## rand([min], [max]):Number - -Gets a random number inside range or snap to min/max values. - -### Arguments: - - 1. `[min]` (Number) : Minimum value. Defaults to `number/MIN_INT`. - 2. `[max]` (Number) : Maximum value. Defaults to `number/MAX_INT`. - - -### Example: - -```js -rand(); // 448740433.55274725 -rand(); // -31797596.097682 -rand(0, 10); // 7.369723 -rand(0, 10); // 5.987042 -``` - -See: [`random()`](#random) - - - -## randBit():Number - -Returns a random "bit" (0 or 1). Useful for addition/subtraction. - -It's slightly faster than `choice(0, 1)` since implementation is simpler (not -that it will make a huge difference in most cases). - -See: [`choice()`](#choice) - -### Example: - -```js -randBit(); // 1 -randBit(); // 0 - -//same effect as -choice(0, 1); -``` - - - -## randHex([size]):String - -Returns a random hexadecimal string. - -The default `size` is `6`. - -### Example: - -```js -randHex(); // "dd8575" -randHex(); // "e6baeb" -randHex(2); // "a2" -randHex(30); // "effd7e2ad9a4a3067e30525fab983a" -``` - - - -## randInt([min], [max]):Number - -Gets a random integer inside range or snap to min/max values. - -### Arguments: - - 1. `[min]` (Number) : Minimum value. Defaults to `number/MIN_INT`. - 2. `[max]` (Number) : Maximum value. Defaults to `number/MAX_INT`. - - -### Example: - -```js -randInt(); // 448740433 -randInt(); // -31797596 -randInt(0, 10); // 7 -randInt(0, 10); // 5 -``` - - - -## randSign():Number - -Returns a random "sign" (-1 or 1). Useful for multiplications. - -It's slightly faster than `choice(-1, 1)` since implementation is simpler (not -that it will make a huge difference in most cases). - -See: [`choice()`](#choice) - -### Example: - -```js -randSign(); // -1 -randSign(); // 1 - -//same effect as -choice(-1, 1); -``` - - - -## random():Number - -Returns a random number between `0` and `1`. Same as `Math.random()`. - -```js -random(); // 0.35435103671625257 -random(); // 0.8768321881070733 -``` - -**Important:** No methods inside mout should call `Math.random()` -directly, they all use `random/random` as a proxy, that way we can -inject/replace the pseudo-random number generator if needed (ie. in case we -need a seeded random or a better algorithm than the native one). - -### Replacing the PRNG - -In some cases we might need better/different algorithms than the one provided -by `Math.random` (ie. safer, seeded). - -Because of licensing issues, file size limitations and different needs we -decided to **not** implement a custom PRNG and instead provide a easy way to -override the default behavior. - [issue #99](https://github.com/millermedeiros/amd-utils/issues/99) - -If you are using mout with a loader that supports the [AMD map -config](https://github.com/amdjs/amdjs-api/wiki/Common-Config), such as -[RequireJS](http://requirejs.org/), you can use it to replace the PRNG -(recommended approach): - -```js -requirejs.config({ - map : { - // all modules will load "my_custom_prng" instead of - // "mout/random/random" - '*' : { - 'mout/random/random' : 'my_custom_prng' - } - } -}); -``` - -You also have the option to override `random.get` in case you are using -mout on node.js or with a loader which doesn't support the map config: - -```js -// replace the PRNG -var n = 0; -random.get = function(){ - return ++n % 2? 0 : 1; // not so random :P -}; -random(); // 0 -random(); // 1 -random(); // 0 -random(); // 1 -``` - -See this [detailed explanation about PRNG in -JavaScript](http://baagoe.org/en/w/index.php/Better_random_numbers_for_javascript) -to understand the issues with the native `Math.random` and also for a list of -algorithms that could be used instead. - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/string.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/string.md deleted file mode 100644 index 2b282315..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/string.md +++ /dev/null @@ -1,594 +0,0 @@ -# string # - -String utilities. - - -## camelCase(str):String - -Convert string to "camelCase" text. - -See: [`pascalCase()`](#pascalCase), [`unCamelCase()`](#unCamelCase) - -### Example - -```js -camelCase('lorem-ipsum-dolor'); // "loremIpsumDolor" -camelCase('lorem ipsum dolor'); // "loremIpsumDolor" -``` - - - -## contains(str, substring, [fromIndex]):Boolean - -Checks if string contains the given substring. - -See: [`startsWith()`](#startsWith), [`endsWith()`](#endsWith) - -### Example - -```js -contains('lorem', 'or'); // true -contains('lorem', 'bar'); // false -``` - - - -## crop(str, maxChars, [append]):String - -Truncate string at full words. Alias to `truncate(str, maxChars, append, true);`. - -See: [`truncate()`](#truncate) - -### Example - -```js -crop('lorem ipsum dolor', 10); // "lorem..." -crop('lorem ipsum dolor', 10, '+'); // "lorem+" -``` - - - -## endsWith(str, suffix):Boolean - -Checks if string ends with specified suffix. - -See: [`startsWith()`](#startsWith), [`contains()`](#contains) - -### Example - -```js -endsWith('lorem ipsum', 'lorem'); // false -endsWith('lorem ipsum', 'ipsum'); // true -``` - - - -## escapeHtml(str):String - -Escapes HTML special chars (`>`, `<`, `&`, `"`, `'`). - -See: [`unescapeHtml()`](#unescapeHtml) - -### Example - -```js -escapeHtml('lorem & "ipsum"'); // "lorem &amp; &quot;ipsum&quot;" -``` - - - -## escapeRegExp(str):String - -Escape special chars to be used as literals in RegExp constructors. - -### Example - -```js -str = escapeRegExp('[lorem.ipsum]'); // "\\[lorem\\.ipsum\\]" -reg = new RegExp(str); // /\[lorem\.ipsum\]/ -``` - - - -## escapeUnicode(str[, shouldEscapePrintable]):String - -Unicode escape chars. - -It will only escape non-printable ASCII chars unless `shouldEscapePrintable` is -set to `true`. - -See: [`unescapeUnicode()`](#unescapeUnicode) - -```js -escapeUnicode('føo bår'); -// > "f\u00f8o b\u00e5r" -escapeUnicode('føo bår', true); -// > "\u0066\u00f8\u006f\u0020\u0062\u00e5\u0072" -``` - - - -## hyphenate(str):String - -Replaces spaces with hyphens, split camelCase text, remove non-word chars, -remove accents and convert to lower case. - -See: [`slugify()`](#slugify), [`underscore()`](#underscore), -[`unhyphenate`](#unhyphenate) - -```js -hyphenate(' %# lorem ipsum ? $ dolor'); // "lorem-ipsum-dolor" -hyphenate('spéçïãl çhârs'); // "special-chars" -hyphenate('loremIpsum'); // "lorem-ipsum" -``` - - - -## interpolate(str, replacements[, syntax]):String - -String interpolation. Format/replace tokens with object properties. - -```js -var tmpl = 'Hello {{name}}!'; -interpolate(tmpl, {name: 'World'}); // "Hello World!" -interpolate(tmpl, {name: 'Lorem Ipsum'}); // "Hello Lorem Ipsum!" -``` - -It uses a mustache-like syntax by default but you can set your own format if -needed. You can also use Arrays for the replacements (since Arrays are -objects as well): - -```js -// matches everything inside "${}" -var syntax = /\$\{([^}]+)\}/g; -var tmpl = "Hello ${0}!"; -interpolate(tmpl, ['Foo Bar'], syntax); // "Hello Foo Bar!" -``` - - - -## lowerCase(str):String - -"Safer" `String.toLowerCase()`. (Used internally) - -### Example - -```js -(null).toLowerCase(); // Error! -(undefined).toLowerCase(); // Error! -lowerCase(null); // "" -lowerCase(undefined); // "" -``` - - - -## lpad(str, minLength[, char]):String - -Pad string from left with `char` if its' length is smaller than `minLen`. - -See: [`rpad()`](#rpad) - -### Example - -```js -lpad('a', 5); // " a" -lpad('a', 5, '-'); // "----a" -lpad('abc', 3, '-'); // "abc" -lpad('abc', 4, '-'); // "-abc" -``` - - - -## ltrim(str, [chars]):String - -Remove chars or white-spaces from beginning of string. - -`chars` is an array of chars to remove from the beginning of the string. If -`chars` is not specified, Unicode whitespace chars will be used instead. - -See: [`rtrim()`](#rtrim), [`trim()`](#trim) - -### Example - -```js -ltrim(' lorem ipsum '); // "lorem ipsum " -ltrim('--lorem ipsum--', ['-']); // "lorem ipsum--" -``` - - - -## makePath(...args):String - -Group arguments as path segments, if any of the args is `null` or `undefined` -it will be ignored from resulting path. It will also remove duplicate "/". - -See: [`array/join()`](array.html#join) - -### Example - -```js -makePath('lorem', 'ipsum', null, 'dolor'); // "lorem/ipsum/dolor" -makePath('foo///bar/'); // "foo/bar/" -``` - - - -## normalizeLineBreaks(str, [lineBreak]):String - -Normalize line breaks to a single format. Defaults to Unix `\n`. - -It handles DOS (`\r\n`), Mac (`\r`) and Unix (`\n`) formats. - -### Example - -```js -// "foo\nbar\nlorem\nipsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum'); - -// "foo\rbar\rlorem\ripsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum', '\r'); - -// "foo bar lorem ipsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum', ' '); -``` - - - -## pascalCase(str):String - -Convert string to "PascalCase" text. - -See: [`camelCase()`](#camelCase) - -### Example - -```js -pascalCase('lorem-ipsum-dolor'); // "LoremIpsumDolor" -pascalCase('lorem ipsum dolor'); // "LoremIpsumDolor" -``` - - - -## properCase(str):String - -UPPERCASE first char of each word, lowercase other chars. - -### Example - -```js -properCase('loRem iPSum'); // "Lorem Ipsum" -``` - - - -## removeNonASCII(str):String - -Remove [non-printable ASCII -chars](http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters). - -### Example - -```js -removeNonASCII('äÄçÇéÉêlorem-ipsumöÖÐþúÚ'); // "lorem-ipsum" -``` - - - -## removeNonWord(str):String - -Remove non-word chars. - -### Example - -```js -var str = 'lorem ~!@#$%^&*()_+`-={}[]|\\:";\'/?><., ipsum'; -removeNonWord(str); // "lorem - ipsum" -``` - - - -## repeat(str, n):String - -Repeat string n-times. - -### Example - -```js -repeat('a', 3); // "aaa" -repeat('bc', 2); // "bcbc" -repeat('a', 0); // "" -``` - - - -## replace(str, search, replacements):String - -Replace string(s) with the replacement(s) in the source. - -`search` and `replacements` can be an array, or a single item. For every item -in `search`, it will call `str.replace` with the search item and the matching -replacement in `replacements`. If `replacements` only contains one replacement, -it will be used for all the searches, otherwise it will use the replacement at -the same index as the search. - -### Example - -```js -replace('foo bar', 'foo', 'test'); // "test bar" -replace('test 1 2', ['1', '2'], 'n'); // "test n n" -replace('test 1 2', ['1', '2'], ['one', 'two']); // "test one two" -replace('123abc', [/\d/g, /[a-z]/g], ['0', '.']); // "000..." -``` - - - -## replaceAccents(str):String - -Replaces all accented chars with regular ones. - -**Important:** Only covers **Basic Latin** and **Latin-1** unicode chars. - -### Example - -```js -replaceAccents('spéçïãl çhârs'); // "special chars" -``` - - - -## rpad(str, minLength[, char]):String - -Pad string from right with `char` if its' length is smaller than `minLen`. - -See: [`lpad()`](#lpad) - -### Example - -```js -rpad('a', 5); // "a " -rpad('a', 5, '-'); // "a----" -rpad('abc', 3, '-'); // "abc" -rpad('abc', 4, '-'); // "abc-" -``` - - - -## rtrim(str, [chars]):String - -Remove chars or white-spaces from end of string. - -`chars` is an array of chars to remove from the end of the string. If -`chars` is not specified, Unicode whitespace chars will be used instead. - -See: [`trim()`](#trim), [`ltrim()`](#ltrim) - -### Example - -```js -rtrim(' lorem ipsum '); // " lorem ipsum" -rtrim('--lorem ipsum--', ['-']); // "--lorem ipsum" -``` - - - -## sentenceCase(str):String - -UPPERCASE first char of each sentence and lowercase other chars. - -### Example - -```js -var str = 'Lorem IpSum DoLOr. maeCeNnas Ullamcor.'; -sentenceCase(str); // "Lorem ipsum dolor. Maecennas ullamcor." -``` - - - -## stripHtmlTags(str):String - -Remove HTML/XML tags from string. - -### Example - -```js -var str = '<p><em>lorem</em> <strong>ipsum</strong></p>'; -stripHtmlTags(str); // "lorem ipsum" -``` - - - -## startsWith(str, prefix):Boolean - -Checks if string starts with specified prefix. - -See: [`endsWith()`](#endsWith), [`contains()`](#contains) - -### Example - -```js -startsWith('lorem ipsum', 'lorem'); // true -startsWith('lorem ipsum', 'ipsum'); // false -``` - - - -## slugify(str[, delimeter]):String - -Convert to lower case, remove accents, remove non-word chars and replace spaces -with the delimeter. The default delimeter is a hyphen. - -Note that this does not split camelCase text. - -See: [`hyphenate()`](#hyphenate) and [`underscore()`](#underscore) - -### Example - -```js -var str = 'loremIpsum dolor spéçïãl chârs'; -slugify(str); // "loremipsum-dolor-special-chars" -slugify(str, '_'); // "loremipsum_dolor_special_chars" -``` - - - -## trim(str, [chars]):String - -Remove chars or white-spaces from beginning and end of string. - -`chars` is an array of chars to remove from the beginning and end of the -string. If `chars` is not specified, Unicode whitespace chars will be used -instead. - -See: [`rtrim()`](#rtrim), [`ltrim()`](#ltrim) - -### Example - -```js -trim(' lorem ipsum '); // "lorem ipsum" -trim('-+-lorem ipsum-+-', ['-', '+']); // "lorem ipsum" -``` - - - -## truncate(str, maxChars, [append], [onlyFullWords]):String - -Limit number of chars. Returned string `length` will be `<= maxChars`. - -See: [`crop()`](#crop) - -### Arguments - - 1. `str` (String) : String - 2. `maxChars` (Number) : Maximum number of characters including `append.length`. - 3. `[append]` (String) : Value that should be added to the end of string. - Defaults to "...". - 4. `[onlyFullWords]` (Boolean) : If it shouldn't break words. Default is - `false`. (favor [`crop()`](#crop) since code will be clearer). - -### Example - -```js -truncate('lorem ipsum dolor', 11); // "lorem ip..." -truncate('lorem ipsum dolor', 11, '+'); // "lorem ipsu+" -truncate('lorem ipsum dolor', 11, null, true); // "lorem..." -``` - - - -## typecast(str):* - -Parses string and convert it into a native value. - -### Example - -```js -typecast('lorem ipsum'); // "lorem ipsum" -typecast('123'); // 123 -typecast('123.45'); // 123.45 -typecast('false'); // false -typecast('true'); // true -typecast('null'); // null -typecast('undefined'); // undefined -``` - - - -## unCamelCase(str, [delimiter]):String - -Add the delimiter between camelCase text and convert first char of each word to -lower case. - -The delimiter defaults to a space character. - -See: [`camelCase()`][#camelCase] - -### Example - -```js -unCamelCase('loremIpsumDolor'); // "lorem ipsum dolor" -unCamelCase('loremIpsumDolor', '-'); // "lorem-ipsum-color" -``` - - -## underscore(str):String - -Replaces spaces with underscores, split camelCase text, remove non-word chars, -remove accents and convert to lower case. - -See: [`slugify()`](#slugify), [`hyphenate()`](#hyphenate) - -```js -underscore(' %# lorem ipsum ? $ dolor'); // "lorem_ipsum_dolor" -underscore('spéçïãl çhârs'); // "special_chars" -underscore('loremIpsum'); // "lorem_ipsum" -``` - - - -## unescapeHtml(str):String - -Unescapes HTML special chars (`>`, `<`, `&`, `"`, `'`). - -See: [`escapeHtml()`](#escapeHtml) - -### Example - -```js -unescapeHtml('lorem &amp; &quot;ipsum&quot;'); // 'lorem & "ipsum"' -``` - - - -## unescapeUnicode(str):String - -Unescapes unicode char sequences. - -See: [`escapeUnicode()`](#escapeUnicode) - -```js -unescapeUnicode('\\u0066\\u00f8\\u006f\\u0020\\u0062\\u00e5\\u0072'); -// > 'føo bår' -``` - - - -## unhyphenate(str):String - -Replaces hyphens with spaces. (only hyphens between word chars) - -See : [`hyphenate()`](#hyphenate) - -### Example - -```js -unhyphenate('lorem-ipsum-dolor'); // "lorem ipsum dolor" -``` - - -## upperCase(str):String - -"Safer" `String.toUpperCase()`. (Used internally) - -### Example - -```js -(null).toUpperCase(); // Error! -(undefined).toUpperCase(); // Error! -upperCase(null); // "" -upperCase(undefined); // "" -``` - - - -## WHITE_SPACES:Array - -Constant array of all [Unicode white-space -characters](http://en.wikipedia.org/wiki/Whitespace_character). - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/time.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/time.md deleted file mode 100644 index 628c2a9b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/doc/time.md +++ /dev/null @@ -1,64 +0,0 @@ -# time # - -Utilities for time manipulation. - - -## convert(value, sourceUnit, [destinationUnit]):Number - -Converts time between units. - -Available units: `millisecond`, `second`, `minute`, `hour`, `day`, `week`. -Abbreviations: `ms`, `s`, `m`, `h`, `d`, `w`. - -We do **not** support year and month as a time unit since their values are not -fixed. - -The default `destinationUnit` is `ms`. - -```js -convert(1, 'minute'); // 60000 -convert(2.5, 's', 'ms'); // 2500 -convert(2, 'm', 's'); // 120 -convert(500, 'ms', 's'); // 0.5 -``` - - - -## now():Number - -Returns the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC. -Uses `Date.now()` if available. - -### Example - -```js -now(); // 1335449614650 -``` - - - -## parseMs(ms):Object - -Parse timestamp (milliseconds) into an object `{milliseconds:number, -seconds:number, minutes:number, hours:number, days:number}`. - -### Example - -```js -// {days:27, hours:4, minutes:26, seconds:5, milliseconds:454} -parseMs(2348765454); -``` - - - -## toTimeString(ms):String - -Convert timestamp (milliseconds) into a time string in the format "[H:]MM:SS". - -### Example - -```js -toTimeString(12513); // "00:12" -toTimeString(951233); // "15:51" -toTimeString(8765235); // "2:26:05" -``` diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function.js deleted file mode 100644 index 43a16ef4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function.js +++ /dev/null @@ -1,18 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'bind' : require('./function/bind'), - 'compose' : require('./function/compose'), - 'debounce' : require('./function/debounce'), - 'func' : require('./function/func'), - 'makeIterator_' : require('./function/makeIterator_'), - 'partial' : require('./function/partial'), - 'prop' : require('./function/prop'), - 'series' : require('./function/series'), - 'throttle' : require('./function/throttle'), - 'timeout' : require('./function/timeout') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/bind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/bind.js deleted file mode 100644 index 71bc1257..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/bind.js +++ /dev/null @@ -1,23 +0,0 @@ - - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - * @param {Function} fn Function. - * @param {object} context Execution context. - * @param {rest} args Arguments (0...n arguments). - * @return {Function} Wrapped Function. - */ - function bind(fn, context, args){ - var argsArr = slice(arguments, 2); //curried args - return function(){ - return fn.apply(context, argsArr.concat(slice(arguments))); - }; - } - - module.exports = bind; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/compose.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/compose.js deleted file mode 100644 index 8cd5c5f3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/compose.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Returns a function that composes multiple functions, passing results to - * each other. - */ - function compose() { - var fns = arguments; - return function(arg){ - // only cares about the first argument since the chain can only - // deal with a single return value anyway. It should start from - // the last fn. - var n = fns.length; - while (n--) { - arg = fns[n].call(this, arg); - } - return arg; - }; - } - - module.exports = compose; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/debounce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/debounce.js deleted file mode 100644 index a0ed07f5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/debounce.js +++ /dev/null @@ -1,29 +0,0 @@ - - - /** - * Debounce callback execution - */ - function debounce(fn, threshold, isAsap){ - var timeout, result; - function debounced(){ - var args = arguments, context = this; - function delayed(){ - if (! isAsap) { - result = fn.apply(context, args); - } - timeout = null; - } - if (timeout) { - clearTimeout(timeout); - } else if (isAsap) { - result = fn.apply(context, args); - } - timeout = setTimeout(delayed, threshold); - return result; - } - return debounced; - } - - module.exports = debounce; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/func.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/func.js deleted file mode 100644 index b81bf0a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/func.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Returns a function that call a method on the passed object - */ - function func(name){ - return function(obj){ - return obj[name](); - }; - } - - module.exports = func; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/makeIterator_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/makeIterator_.js deleted file mode 100644 index 767610a5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/makeIterator_.js +++ /dev/null @@ -1,34 +0,0 @@ -var prop = require('./prop'); -var deepMatches = require('../object/deepMatches'); - - /** - * Converts argument into a valid iterator. - * Used internally on most array/object/collection methods that receives a - * callback/iterator providing a shortcut syntax. - */ - function makeIterator(src, thisObj){ - switch(typeof src) { - case 'object': - // typeof null == "object" - return (src != null)? function(val, key, target){ - return deepMatches(val, src); - } : src; - case 'string': - case 'number': - return prop(src); - case 'function': - if (typeof thisObj === 'undefined') { - return src; - } else { - return function(val, i, arr){ - return src.call(thisObj, val, i, arr); - }; - } - default: - return src; - } - } - - module.exports = makeIterator; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/partial.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/partial.js deleted file mode 100644 index d63ff1be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/partial.js +++ /dev/null @@ -1,19 +0,0 @@ - - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Creates a partially applied function. - */ - function partial(fn, var_args){ - var argsArr = slice(arguments, 1); //curried args - return function(){ - return fn.apply(this, argsArr.concat(slice(arguments))); - }; - } - - module.exports = partial; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/prop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/prop.js deleted file mode 100644 index 734acb7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/prop.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Returns a function that gets a property of the passed object - */ - function prop(name){ - return function(obj){ - return obj[name]; - }; - } - - module.exports = prop; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/series.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/series.js deleted file mode 100644 index 25159c2c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/series.js +++ /dev/null @@ -1,22 +0,0 @@ - - - /** - * Returns a function that will execute a list of functions in sequence - * passing the same arguments to each one. (useful for batch processing - * items during a forEach loop) - */ - function series(){ - var fns = arguments; - return function(){ - var i = 0, - n = fns.length; - while (i < n) { - fns[i].apply(this, arguments); - i += 1; - } - }; - } - - module.exports = series; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/throttle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/throttle.js deleted file mode 100644 index 619dc540..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/throttle.js +++ /dev/null @@ -1,32 +0,0 @@ -var now = require('../time/now'); - - /** - */ - function throttle(fn, delay){ - var context, timeout, result, args, - cur, diff, prev = 0; - function delayed(){ - prev = now(); - timeout = null; - result = fn.apply(context, args); - } - function throttled(){ - context = this; - args = arguments; - cur = now(); - diff = delay - (cur - prev); - if (diff <= 0) { - clearTimeout(timeout); - prev = cur; - result = fn.apply(context, args); - } else if (! timeout) { - timeout = setTimeout(delayed, diff); - } - return result; - } - return throttled; - } - - module.exports = throttle; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/timeout.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/timeout.js deleted file mode 100644 index e0d21a66..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/function/timeout.js +++ /dev/null @@ -1,21 +0,0 @@ - - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Delays the call of a function within a given context. - */ - function timeout(fn, millis, context){ - - var args = slice(arguments, 3); - - return setTimeout(function() { - fn.apply(context, args); - }, millis); - } - - module.exports = timeout; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/index.js deleted file mode 100644 index 32a1c639..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/index.js +++ /dev/null @@ -1,24 +0,0 @@ -/**@license - * mout v0.6.0 | http://moutjs.com | MIT license - */ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'VERSION' : '0.6.0', - 'array' : require('./array'), - 'collection' : require('./collection'), - 'date' : require('./date'), - 'function' : require('./function'), - 'lang' : require('./lang'), - 'math' : require('./math'), - 'number' : require('./number'), - 'object' : require('./object'), - 'queryString' : require('./queryString'), - 'random' : require('./random'), - 'string' : require('./string'), - 'time' : require('./time') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang.js deleted file mode 100644 index b9816218..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang.js +++ /dev/null @@ -1,36 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'clone' : require('./lang/clone'), - 'createObject' : require('./lang/createObject'), - 'ctorApply' : require('./lang/ctorApply'), - 'deepClone' : require('./lang/deepClone'), - 'defaults' : require('./lang/defaults'), - 'inheritPrototype' : require('./lang/inheritPrototype'), - 'is' : require('./lang/is'), - 'isArguments' : require('./lang/isArguments'), - 'isArray' : require('./lang/isArray'), - 'isBoolean' : require('./lang/isBoolean'), - 'isDate' : require('./lang/isDate'), - 'isEmpty' : require('./lang/isEmpty'), - 'isFinite' : require('./lang/isFinite'), - 'isFunction' : require('./lang/isFunction'), - 'isInteger' : require('./lang/isInteger'), - 'isKind' : require('./lang/isKind'), - 'isNaN' : require('./lang/isNaN'), - 'isNull' : require('./lang/isNull'), - 'isNumber' : require('./lang/isNumber'), - 'isObject' : require('./lang/isObject'), - 'isPlainObject' : require('./lang/isPlainObject'), - 'isRegExp' : require('./lang/isRegExp'), - 'isString' : require('./lang/isString'), - 'isUndefined' : require('./lang/isUndefined'), - 'isnt' : require('./lang/isnt'), - 'kindOf' : require('./lang/kindOf'), - 'toArray' : require('./lang/toArray'), - 'toString' : require('./lang/toString') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/clone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/clone.js deleted file mode 100644 index 33c4e949..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/clone.js +++ /dev/null @@ -1,49 +0,0 @@ -var kindOf = require('./kindOf'); -var isPlainObject = require('./isPlainObject'); -var mixIn = require('../object/mixIn'); - - /** - * Clone native types. - */ - function clone(val){ - switch (kindOf(val)) { - case 'Object': - return cloneObject(val); - case 'Array': - return cloneArray(val); - case 'RegExp': - return cloneRegExp(val); - case 'Date': - return cloneDate(val); - default: - return val; - } - } - - function cloneObject(source) { - if (isPlainObject(source)) { - return mixIn({}, source); - } else { - return source; - } - } - - function cloneRegExp(r) { - var flags = ''; - flags += r.multiline ? 'm' : ''; - flags += r.global ? 'g' : ''; - flags += r.ignorecase ? 'i' : ''; - return new RegExp(r.source, flags); - } - - function cloneDate(date) { - return new Date(+date); - } - - function cloneArray(arr) { - return arr.slice(); - } - - module.exports = clone; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/createObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/createObject.js deleted file mode 100644 index bbc14c1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/createObject.js +++ /dev/null @@ -1,18 +0,0 @@ -var mixIn = require('../object/mixIn'); - - /** - * Create Object using prototypal inheritance and setting custom properties. - * - Mix between Douglas Crockford Prototypal Inheritance <http://javascript.crockford.com/prototypal.html> and the EcmaScript 5 `Object.create()` method. - * @param {object} parent Parent Object. - * @param {object} [props] Object properties. - * @return {object} Created object. - */ - function createObject(parent, props){ - function F(){} - F.prototype = parent; - return mixIn(new F(), props); - - } - module.exports = createObject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/ctorApply.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/ctorApply.js deleted file mode 100644 index d68dc506..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/ctorApply.js +++ /dev/null @@ -1,17 +0,0 @@ - - - function F(){} - - /** - * Do fn.apply on a constructor. - */ - function ctorApply(ctor, args) { - F.prototype = ctor.prototype; - var instance = new F(); - ctor.apply(instance, args); - return instance; - } - - module.exports = ctorApply; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/deepClone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/deepClone.js deleted file mode 100644 index 25fd95f1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/deepClone.js +++ /dev/null @@ -1,48 +0,0 @@ -var clone = require('./clone'); -var forOwn = require('../object/forOwn'); -var kindOf = require('./kindOf'); -var isPlainObject = require('./isPlainObject'); - - /** - * Recursively clone native types. - */ - function deepClone(val, instanceClone) { - switch ( kindOf(val) ) { - case 'Object': - return cloneObject(val, instanceClone); - case 'Array': - return cloneArray(val, instanceClone); - default: - return clone(val); - } - } - - function cloneObject(source, instanceClone) { - if (isPlainObject(source)) { - var out = {}; - forOwn(source, function(val, key) { - this[key] = deepClone(val, instanceClone); - }, out); - return out; - } else if (instanceClone) { - return instanceClone(source); - } else { - return source; - } - } - - function cloneArray(arr, instanceClone) { - var out = [], - i = -1, - n = arr.length, - val; - while (++i < n) { - out[i] = deepClone(arr[i], instanceClone); - } - return out; - } - - module.exports = deepClone; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/defaults.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/defaults.js deleted file mode 100644 index 1111b2ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/defaults.js +++ /dev/null @@ -1,17 +0,0 @@ -var toArray = require('./toArray'); -var find = require('../array/find'); - - /** - * Return first non void argument - */ - function defaults(var_args){ - return find(toArray(arguments), nonVoid); - } - - function nonVoid(val){ - return val != null; - } - - module.exports = defaults; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/inheritPrototype.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/inheritPrototype.js deleted file mode 100644 index cd8a379e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/inheritPrototype.js +++ /dev/null @@ -1,16 +0,0 @@ -var createObject = require('./createObject'); - - /** - * Inherit prototype from another Object. - * - inspired by Nicholas Zackas <http://nczonline.net> Solution - * @param {object} child Child object - * @param {object} parent Parent Object - */ - function inheritPrototype(child, parent){ - var p = createObject(parent.prototype); - p.constructor = child; - child.prototype = p; - } - - module.exports = inheritPrototype; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/is.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/is.js deleted file mode 100644 index 4a835739..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/is.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Check if both arguments are egal. - */ - function is(x, y){ - // implementation borrowed from harmony:egal spec - if (x === y) { - // 0 === -0, but they are not identical - return x !== 0 || 1 / x === 1 / y; - } - - // NaN !== NaN, but they are identical. - // NaNs are the only non-reflexive value, i.e., if x !== x, - // then x is a NaN. - // isNaN is broken: it converts its argument to number, so - // isNaN("foo") => true - return x !== x && y !== y; - } - - module.exports = is; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArguments.js deleted file mode 100644 index f7b08ba4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArguments.js +++ /dev/null @@ -1,15 +0,0 @@ -var isKind = require('./isKind'); - - /** - */ - var isArgs = isKind(arguments, 'Arguments')? - function(val){ - return isKind(val, 'Arguments'); - } : - function(val){ - // Arguments is an Object on IE7 - return !!(val && Object.prototype.hasOwnProperty.call(val, 'callee')); - }; - - module.exports = isArgs; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArray.js deleted file mode 100644 index 262ee400..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArray.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - var isArray = Array.isArray || function (val) { - return isKind(val, 'Array'); - }; - module.exports = isArray; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isBoolean.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isBoolean.js deleted file mode 100644 index 86557cb9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isBoolean.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isBoolean(val) { - return isKind(val, 'Boolean'); - } - module.exports = isBoolean; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isDate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isDate.js deleted file mode 100644 index 4a5130f2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isDate.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isDate(val) { - return isKind(val, 'Date'); - } - module.exports = isDate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isEmpty.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isEmpty.js deleted file mode 100644 index 0e9f77da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isEmpty.js +++ /dev/null @@ -1,24 +0,0 @@ -var forOwn = require('../object/forOwn'); -var isArray = require('./isArray'); - - function isEmpty(val){ - if (val == null) { - // typeof null == 'object' so we check it first - return false; - } else if ( typeof val === 'string' || isArray(val) ) { - return !val.length; - } else if ( typeof val === 'object' || typeof val === 'function' ) { - var result = true; - forOwn(val, function(){ - result = false; - return false; // break loop - }); - return result; - } else { - return false; - } - } - - module.exports = isEmpty; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFinite.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFinite.js deleted file mode 100644 index 6d4006f9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFinite.js +++ /dev/null @@ -1,21 +0,0 @@ -var isNumber = require('./isNumber'); - - var global = this; - - /** - * Check if value is finite - */ - function isFinite(val){ - var is = false; - if (typeof val === 'string' && val !== '') { - is = global.isFinite( parseFloat(val) ); - } else if (isNumber(val)){ - // need to use isNumber because of Number constructor - is = global.isFinite( val ); - } - return is; - } - - module.exports = isFinite; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFunction.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFunction.js deleted file mode 100644 index 216879f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFunction.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isFunction(val) { - return isKind(val, 'Function'); - } - module.exports = isFunction; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isInteger.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isInteger.js deleted file mode 100644 index 29f95d96..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -var isNumber = require('./isNumber'); - - /** - * Check if value is an integer - */ - function isInteger(val){ - return isNumber(val) && (val % 1 === 0); - } - - module.exports = isInteger; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isKind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isKind.js deleted file mode 100644 index 02301e04..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isKind.js +++ /dev/null @@ -1,9 +0,0 @@ -var kindOf = require('./kindOf'); - /** - * Check if value is from a specific "kind". - */ - function isKind(val, kind){ - return kindOf(val) === kind; - } - module.exports = isKind; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNaN.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNaN.js deleted file mode 100644 index f6efeb1f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNaN.js +++ /dev/null @@ -1,15 +0,0 @@ -var isNumber = require('./isNumber'); - - /** - * Check if value is NaN for realz - */ - function isNaN(val){ - // based on the fact that NaN !== NaN - // need to check if it's a number to avoid conflicts with host objects - // also need to coerce ToNumber to avoid edge case `new Number(NaN)` - return !isNumber(val) || val != +val; - } - - module.exports = isNaN; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNull.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNull.js deleted file mode 100644 index 6252f9ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNull.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - */ - function isNull(val){ - return val === null; - } - module.exports = isNull; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNumber.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNumber.js deleted file mode 100644 index 126c1cce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNumber.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isNumber(val) { - return isKind(val, 'Number'); - } - module.exports = isNumber; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isObject.js deleted file mode 100644 index 7350c891..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isObject.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isObject(val) { - return isKind(val, 'Object'); - } - module.exports = isObject; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isPlainObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isPlainObject.js deleted file mode 100644 index 0d2d7b65..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isPlainObject.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Checks if the value is created by the `Object` constructor. - */ - function isPlainObject(value) { - return (!!value - && typeof value === 'object' - && value.constructor === Object); - } - - module.exports = isPlainObject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isRegExp.js deleted file mode 100644 index fc5459a9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isRegExp.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isRegExp(val) { - return isKind(val, 'RegExp'); - } - module.exports = isRegExp; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isString.js deleted file mode 100644 index f8906584..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isString.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isString(val) { - return isKind(val, 'String'); - } - module.exports = isString; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isUndefined.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isUndefined.js deleted file mode 100644 index fb2261df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isUndefined.js +++ /dev/null @@ -1,10 +0,0 @@ - - var UNDEF; - - /** - */ - function isUndef(val){ - return val === UNDEF; - } - module.exports = isUndef; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isnt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isnt.js deleted file mode 100644 index 9dad58ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/isnt.js +++ /dev/null @@ -1,12 +0,0 @@ -var is = require('./is'); - - /** - * Check if both values are not identical/egal - */ - function isnt(x, y){ - return !is(x, y); - } - - module.exports = isnt; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/kindOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/kindOf.js deleted file mode 100644 index 663464d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/kindOf.js +++ /dev/null @@ -1,20 +0,0 @@ - - - var _rKind = /^\[object (.*)\]$/, - _toString = Object.prototype.toString, - UNDEF; - - /** - * Gets the "kind" of value. (e.g. "String", "Number", etc) - */ - function kindOf(val) { - if (val === null) { - return 'Null'; - } else if (val === UNDEF) { - return 'Undefined'; - } else { - return _rKind.exec( _toString.call(val) )[1]; - } - } - module.exports = kindOf; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/toArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/toArray.js deleted file mode 100644 index e39b8734..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/toArray.js +++ /dev/null @@ -1,31 +0,0 @@ -var kindOf = require('./kindOf'); - - var _win = this; - - /** - * Convert array-like object into array - */ - function toArray(val){ - var ret = [], - kind = kindOf(val), - n; - - if (val != null) { - if ( val.length == null || kind === 'String' || kind === 'Function' || kind === 'RegExp' || val === _win ) { - //string, regexp, function have .length but user probably just want - //to wrap value into an array.. - ret[ret.length] = val; - } else { - //window returns true on isObject in IE7 and may have length - //property. `typeof NodeList` returns `function` on Safari so - //we can't use it (#58) - n = val.length; - while (n--) { - ret[n] = val[n]; - } - } - } - return ret; - } - module.exports = toArray; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/toString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/toString.js deleted file mode 100644 index ae5c2b0f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/lang/toString.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * Typecast a value to a String, using an empty string value for null or - * undefined. - */ - function toString(val){ - return val == null ? '' : val.toString(); - } - - module.exports = toString; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math.js deleted file mode 100644 index c6ee889b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math.js +++ /dev/null @@ -1,19 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'ceil' : require('./math/ceil'), - 'clamp' : require('./math/clamp'), - 'countSteps' : require('./math/countSteps'), - 'floor' : require('./math/floor'), - 'inRange' : require('./math/inRange'), - 'isNear' : require('./math/isNear'), - 'lerp' : require('./math/lerp'), - 'loop' : require('./math/loop'), - 'map' : require('./math/map'), - 'norm' : require('./math/norm'), - 'round' : require('./math/round') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/ceil.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/ceil.js deleted file mode 100644 index a279e158..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/ceil.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Round value up with a custom radix. - */ - function ceil(val, step){ - step = Math.abs(step || 1); - return Math.ceil(val / step) * step; - } - - module.exports = ceil; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/clamp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/clamp.js deleted file mode 100644 index e929a9a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/clamp.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Clamps value inside range. - */ - function clamp(val, min, max){ - return val < min? min : (val > max? max : val); - } - module.exports = clamp; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/countSteps.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/countSteps.js deleted file mode 100644 index 60ac90c3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/countSteps.js +++ /dev/null @@ -1,16 +0,0 @@ - - /** - * Count number of full steps. - */ - function countSteps(val, step, overflow){ - val = Math.floor(val / step); - - if (overflow) { - return val % overflow; - } - - return val; - } - - module.exports = countSteps; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/floor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/floor.js deleted file mode 100644 index 9de50531..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/floor.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Floor value to full steps. - */ - function floor(val, step){ - step = Math.abs(step || 1); - return Math.floor(val / step) * step; - } - module.exports = floor; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/inRange.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/inRange.js deleted file mode 100644 index 763218f8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/inRange.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Checks if value is inside the range. - */ - function inRange(val, min, max, threshold){ - threshold = threshold || 0; - return (val + threshold >= min && val - threshold <= max); - } - - module.exports = inRange; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/isNear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/isNear.js deleted file mode 100644 index 45486b6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/isNear.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Check if value is close to target. - */ - function isNear(val, target, threshold){ - return (Math.abs(val - target) <= threshold); - } - module.exports = isNear; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/lerp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/lerp.js deleted file mode 100644 index 111e2717..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/lerp.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Linear interpolation. - * IMPORTANT:will return `Infinity` if numbers overflow Number.MAX_VALUE - */ - function lerp(ratio, start, end){ - return start + (end - start) * ratio; - } - - module.exports = lerp; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/loop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/loop.js deleted file mode 100644 index 35207c1a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/loop.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Loops value inside range. - */ - function loop(val, min, max){ - return val < min? max : (val > max? min : val); - } - - module.exports = loop; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/map.js deleted file mode 100644 index 96c4b787..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/map.js +++ /dev/null @@ -1,11 +0,0 @@ -var lerp = require('./lerp'); -var norm = require('./norm'); - /** - * Maps a number from one scale to another. - * @example map(3, 0, 4, -1, 1) -> 0.5 - */ - function map(val, min1, max1, min2, max2){ - return lerp( norm(val, min1, max1), min2, max2 ); - } - module.exports = map; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/norm.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/norm.js deleted file mode 100644 index 54caf78a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/norm.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Gets normalized ratio of value inside range. - */ - function norm(val, min, max){ - return (val - min) / (max - min); - } - module.exports = norm; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/round.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/round.js deleted file mode 100644 index d108e6cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/math/round.js +++ /dev/null @@ -1,12 +0,0 @@ - - /** - * Round number to a specific radix - */ - function round(value, radix){ - radix = radix || 1; // default round 1 - return Math.round(value / radix) * radix; - } - - module.exports = round; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number.js deleted file mode 100644 index 0b6186cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number.js +++ /dev/null @@ -1,21 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'MAX_INT' : require('./number/MAX_INT'), - 'MAX_UINT' : require('./number/MAX_UINT'), - 'MIN_INT' : require('./number/MIN_INT'), - 'abbreviate' : require('./number/abbreviate'), - 'currencyFormat' : require('./number/currencyFormat'), - 'enforcePrecision' : require('./number/enforcePrecision'), - 'pad' : require('./number/pad'), - 'rol' : require('./number/rol'), - 'ror' : require('./number/ror'), - 'sign' : require('./number/sign'), - 'toInt' : require('./number/toInt'), - 'toUInt' : require('./number/toUInt'), - 'toUInt31' : require('./number/toUInt31') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_INT.js deleted file mode 100644 index 1d6f0e48..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit signed integer value. (2^31 - 1) - */ - - module.exports = 2147483647; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_UINT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_UINT.js deleted file mode 100644 index 700da0f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_UINT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit unsigned integet value (2^32 - 1) - */ - - module.exports = 4294967295; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/MIN_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/MIN_INT.js deleted file mode 100644 index b34ab2ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/MIN_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Minimum 32-bit signed integer value (-2^31). - */ - - module.exports = -2147483648; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/abbreviate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/abbreviate.js deleted file mode 100644 index dd6716b9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/abbreviate.js +++ /dev/null @@ -1,35 +0,0 @@ -var enforcePrecision = require('./enforcePrecision'); - - var _defaultDict = { - thousand : 'K', - million : 'M', - billion : 'B' - }; - - /** - * Abbreviate number if bigger than 1000. (eg: 2.5K, 17.5M, 3.4B, ...) - */ - function abbreviateNumber(val, nDecimals, dict){ - nDecimals = nDecimals != null? nDecimals : 1; - dict = dict || _defaultDict; - val = enforcePrecision(val, nDecimals); - - var str, mod; - - if (val < 1000000) { - mod = enforcePrecision(val / 1000, nDecimals); - // might overflow to next scale during rounding - str = mod < 1000? mod + dict.thousand : 1 + dict.million; - } else if (val < 1000000000) { - mod = enforcePrecision(val / 1000000, nDecimals); - str = mod < 1000? mod + dict.million : 1 + dict.billion; - } else { - str = enforcePrecision(val / 1000000000, nDecimals) + dict.billion; - } - - return str; - } - - module.exports = abbreviateNumber; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/currencyFormat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/currencyFormat.js deleted file mode 100644 index 1cf02497..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/currencyFormat.js +++ /dev/null @@ -1,26 +0,0 @@ - - - /** - * Converts number into currency format - */ - function currencyFormat(val, nDecimalDigits, decimalSeparator, thousandsSeparator) { - nDecimalDigits = nDecimalDigits == null? 2 : nDecimalDigits; - decimalSeparator = decimalSeparator == null? '.' : decimalSeparator; - thousandsSeparator = thousandsSeparator == null? ',' : thousandsSeparator; - - //can't use enforce precision since it returns a number and we are - //doing a RegExp over the string - var fixed = val.toFixed(nDecimalDigits), - //separate begin [$1], middle [$2] and decimal digits [$4] - parts = new RegExp('^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{'+ nDecimalDigits +'}))?$').exec( fixed ); - - if(parts){ //val >= 1000 || val <= -1000 - return parts[1] + parts[2].replace(/\d{3}/g, thousandsSeparator + '$&') + (parts[4] ? decimalSeparator + parts[4] : ''); - }else{ - return fixed.replace('.', decimalSeparator); - } - } - - module.exports = currencyFormat; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/enforcePrecision.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/enforcePrecision.js deleted file mode 100644 index f73a92d7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/enforcePrecision.js +++ /dev/null @@ -1,13 +0,0 @@ - - /** - * Enforce a specific amount of decimal digits and also fix floating - * point rounding issues. - * @example `enforcePrecision(0.615, 2) -> 0.62`, `(0.615).toFixed(2) -> - * 0.61` - */ - function enforcePrecision(val, nDecimalDigits){ - var pow = Math.pow(10, nDecimalDigits); - return +(Math.round(val * pow) / pow).toFixed(nDecimalDigits); - } - module.exports = enforcePrecision; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/pad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/pad.js deleted file mode 100644 index da752706..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/pad.js +++ /dev/null @@ -1,12 +0,0 @@ -var lpad = require('../string/lpad'); - - /** - * Add padding zeros if n.length < minLength. - */ - function pad(n, minLength, char){ - return lpad(''+ n, minLength, char || '0'); - } - - module.exports = pad; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/rol.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/rol.js deleted file mode 100644 index ecd58da4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/rol.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Bitwise circular shift left - * http://en.wikipedia.org/wiki/Circular_shift - */ - function rol(val, shift){ - return (val << shift) | (val >> (32 - shift)); - } - module.exports = rol; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/ror.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/ror.js deleted file mode 100644 index 2eda81da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/ror.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Bitwise circular shift right - * http://en.wikipedia.org/wiki/Circular_shift - */ - function ror(val, shift){ - return (val >> shift) | (val << (32 - shift)); - } - module.exports = ror; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/sign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/sign.js deleted file mode 100644 index b854a4ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/sign.js +++ /dev/null @@ -1,15 +0,0 @@ - - - /** - * Get sign of the value. - */ - function sign(val) { - var num = Number(val); - if (num === 0) return num; // +0 and +0 === 0 - if (isNaN(num)) return num; // NaN - return num < 0? -1 : 1; - } - - module.exports = sign; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/toInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/toInt.js deleted file mode 100644 index bcefae0e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/toInt.js +++ /dev/null @@ -1,15 +0,0 @@ - - - /** - * "Convert" value into an 32-bit integer. - * Works like `Math.floor` if val > 0 and `Math.ceil` if val < 0. - * IMPORTANT: val will wrap at 2^31 and -2^31. - * Perf tests: http://jsperf.com/vs-vs-parseint-bitwise-operators/7 - */ - function toInt(val){ - return ~~val; - } - - module.exports = toInt; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt.js deleted file mode 100644 index 5290b627..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * "Convert" value into a 32-bit unsigned integer. - * IMPORTANT: Value will wrap at 2^32. - */ - function toUInt(val){ - return val >>> 0; - } - - module.exports = toUInt; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt31.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt31.js deleted file mode 100644 index fcc5a97c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt31.js +++ /dev/null @@ -1,13 +0,0 @@ -var MAX_INT = require('./MAX_INT'); - - /** - * "Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - * IMPORTANT: value wil wrap at 2^31, if negative will return 0. - */ - function toUInt31(val){ - return (val <= 0)? 0 : (val > MAX_INT? ~~(val % (MAX_INT + 1)) : ~~val); - } - - module.exports = toUInt31; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object.js deleted file mode 100644 index 76c06424..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object.js +++ /dev/null @@ -1,42 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'bindAll' : require('./object/bindAll'), - 'contains' : require('./object/contains'), - 'deepEquals' : require('./object/deepEquals'), - 'deepFillIn' : require('./object/deepFillIn'), - 'deepMatches' : require('./object/deepMatches'), - 'deepMixIn' : require('./object/deepMixIn'), - 'equals' : require('./object/equals'), - 'every' : require('./object/every'), - 'fillIn' : require('./object/fillIn'), - 'filter' : require('./object/filter'), - 'find' : require('./object/find'), - 'forIn' : require('./object/forIn'), - 'forOwn' : require('./object/forOwn'), - 'functions' : require('./object/functions'), - 'get' : require('./object/get'), - 'has' : require('./object/has'), - 'hasOwn' : require('./object/hasOwn'), - 'keys' : require('./object/keys'), - 'map' : require('./object/map'), - 'matches' : require('./object/matches'), - 'max' : require('./object/max'), - 'merge' : require('./object/merge'), - 'min' : require('./object/min'), - 'mixIn' : require('./object/mixIn'), - 'namespace' : require('./object/namespace'), - 'pick' : require('./object/pick'), - 'pluck' : require('./object/pluck'), - 'reduce' : require('./object/reduce'), - 'reject' : require('./object/reject'), - 'set' : require('./object/set'), - 'size' : require('./object/size'), - 'some' : require('./object/some'), - 'unset' : require('./object/unset'), - 'values' : require('./object/values') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/bindAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/bindAll.js deleted file mode 100644 index b2f27d08..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/bindAll.js +++ /dev/null @@ -1,18 +0,0 @@ -var functions = require('./functions'); -var bind = require('../function/bind'); -var forEach = require('../array/forEach'); - - /** - * Binds methods of the object to be run in it's own context. - */ - function bindAll(obj, rest_methodNames){ - var keys = arguments.length > 1? - Array.prototype.slice.call(arguments, 1) : functions(obj); - forEach(keys, function(key){ - obj[key] = bind(obj[key], obj); - }); - } - - module.exports = bindAll; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/contains.js deleted file mode 100644 index 8076e2c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/contains.js +++ /dev/null @@ -1,13 +0,0 @@ -var some = require('./some'); - - /** - * Check if object contains value - */ - function contains(obj, needle) { - return some(obj, function(val) { - return (val === needle); - }); - } - module.exports = contains; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepEquals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepEquals.js deleted file mode 100644 index fcde9449..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepEquals.js +++ /dev/null @@ -1,27 +0,0 @@ -var isObject = require('../lang/isObject'); -var equals = require('./equals'); - - function defaultCompare(a, b) { - return a === b; - } - - /** - * Recursively checks for same properties and values. - */ - function deepEquals(a, b, callback){ - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - function compare(a, b){ - return deepEquals(a, b, callback); - } - - return equals(a, b, compare); - } - - module.exports = deepEquals; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepFillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepFillIn.js deleted file mode 100644 index d27db44d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepFillIn.js +++ /dev/null @@ -1,32 +0,0 @@ -var forOwn = require('./forOwn'); -var isPlainObject = require('../lang/isPlainObject'); - - /** - * Deeply copy missing properties in the target from the defaults. - */ - function deepFillIn(target, defaults){ - var i = 0, - n = arguments.length, - obj; - - while(++i < n) { - obj = arguments[i]; - if (obj) { - forOwn(obj, function(newValue, key) { - var curValue = target[key]; - if (curValue == null) { - target[key] = newValue; - } else if (isPlainObject(curValue) - && isPlainObject(newValue)) { - deepFillIn(curValue, newValue); - } - }); - } - } - - return target; - } - - module.exports = deepFillIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMatches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMatches.js deleted file mode 100644 index 3366c52d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMatches.js +++ /dev/null @@ -1,55 +0,0 @@ -var forOwn = require('./forOwn'); -var isArray = require('../lang/isArray'); - - function containsMatch(array, pattern) { - var i = -1, length = array.length; - while (++i < length) { - if (deepMatches(array[i], pattern)) { - return true; - } - } - - return false; - } - - function matchArray(target, pattern) { - var i = -1, patternLength = pattern.length; - while (++i < patternLength) { - if (!containsMatch(target, pattern[i])) { - return false; - } - } - - return true; - } - - function matchObject(target, pattern) { - var result = true; - forOwn(pattern, function(val, key) { - if (!deepMatches(target[key], val)) { - // Return false to break out of forOwn early - return (result = false); - } - }); - - return result; - } - - /** - * Recursively check if the objects match. - */ - function deepMatches(target, pattern){ - if (target && typeof target === 'object') { - if (isArray(target) && isArray(pattern)) { - return matchArray(target, pattern); - } else { - return matchObject(target, pattern); - } - } else { - return target === pattern; - } - } - - module.exports = deepMatches; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMixIn.js deleted file mode 100644 index a97e98d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMixIn.js +++ /dev/null @@ -1,34 +0,0 @@ -var forOwn = require('./forOwn'); -var isPlainObject = require('../lang/isPlainObject'); - - /** - * Mixes objects into the target object, recursively mixing existing child - * objects. - */ - function deepMixIn(target, objects) { - var i = 0, - n = arguments.length, - obj; - - while(++i < n){ - obj = arguments[i]; - if (obj) { - forOwn(obj, copyProp, target); - } - } - - return target; - } - - function copyProp(val, key) { - var existing = this[key]; - if (isPlainObject(val) && isPlainObject(existing)) { - deepMixIn(existing, val); - } else { - this[key] = val; - } - } - - module.exports = deepMixIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/equals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/equals.js deleted file mode 100644 index f50cbe4e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/equals.js +++ /dev/null @@ -1,36 +0,0 @@ -var hasOwn = require('./hasOwn'); -var every = require('./every'); -var isObject = require('../lang/isObject'); - - function defaultCompare(a, b) { - return a === b; - } - - // Makes a function to compare the object values from the specified compare - // operation callback. - function makeCompare(callback) { - return function(value, key) { - return hasOwn(this, key) && callback(value, this[key]); - }; - } - - function checkProperties(value, key) { - return hasOwn(this, key); - } - - /** - * Checks if two objects have the same keys and values. - */ - function equals(a, b, callback) { - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - return (every(a, makeCompare(callback), b) && - every(b, checkProperties, a)); - } - - module.exports = equals; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/every.js deleted file mode 100644 index 01106e5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/every.js +++ /dev/null @@ -1,23 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object every - */ - function every(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - forOwn(obj, function(val, key) { - // we consider any falsy values as "false" on purpose so shorthand - // syntax can be used to check property existence - if (!callback(val, key, obj)) { - result = false; - return false; // break - } - }); - return result; - } - - module.exports = every; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/fillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/fillIn.js deleted file mode 100644 index 80dcdf07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/fillIn.js +++ /dev/null @@ -1,20 +0,0 @@ -var forEach = require('../array/forEach'); -var forOwn = require('./forOwn'); - - /** - * Copy missing properties in the obj from the defaults. - */ - function fillIn(obj, var_defaults){ - forEach(Array.prototype.slice.call(arguments, 1), function(base){ - forOwn(base, function(val, key){ - if (obj[key] == null) { - obj[key] = val; - } - }); - }); - return obj; - } - - module.exports = fillIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/filter.js deleted file mode 100644 index 3a83a92f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/filter.js +++ /dev/null @@ -1,20 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Creates a new object with all the properties where the callback returns - * true. - */ - function filterValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - output[key] = value; - } - }); - - return output; - } - module.exports = filterValues; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/find.js deleted file mode 100644 index d39c0706..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/find.js +++ /dev/null @@ -1,21 +0,0 @@ -var some = require('./some'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Returns first item that matches criteria - */ - function find(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result; - some(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - result = value; - return true; //break - } - }); - return result; - } - - module.exports = find; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/forIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/forIn.js deleted file mode 100644 index 367f08ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/forIn.js +++ /dev/null @@ -1,62 +0,0 @@ - - - var _hasDontEnumBug, - _dontEnums; - - function checkDontEnum(){ - _dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - - _hasDontEnumBug = true; - - for (var key in {'toString': null}) { - _hasDontEnumBug = false; - } - } - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forIn(obj, fn, thisObj){ - var key, i = 0; - // no need to check if argument is a real object that way we can use - // it for arrays, functions, date, etc. - - //post-pone check till needed - if (_hasDontEnumBug == null) checkDontEnum(); - - for (key in obj) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - - if (_hasDontEnumBug) { - while (key = _dontEnums[i++]) { - // since we aren't using hasOwn check we need to make sure the - // property was overwritten - if (obj[key] !== Object.prototype[key]) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - } - } - } - - function exec(fn, obj, key, thisObj){ - return fn.call(thisObj, obj[key], key, obj); - } - - module.exports = forIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/forOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/forOwn.js deleted file mode 100644 index 5f2dfbfc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/forOwn.js +++ /dev/null @@ -1,19 +0,0 @@ -var hasOwn = require('./hasOwn'); -var forIn = require('./forIn'); - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forOwn(obj, fn, thisObj){ - forIn(obj, function(val, key){ - if (hasOwn(obj, key)) { - return fn.call(thisObj, obj[key], key, obj); - } - }); - } - - module.exports = forOwn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/functions.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/functions.js deleted file mode 100644 index f5717979..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/functions.js +++ /dev/null @@ -1,18 +0,0 @@ -var forIn = require('./forIn'); - - /** - * return a list of all enumerable properties that have function values - */ - function functions(obj){ - var keys = []; - forIn(obj, function(val, key){ - if (typeof val === 'function'){ - keys.push(key); - } - }); - return keys.sort(); - } - - module.exports = functions; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/get.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/get.js deleted file mode 100644 index 6673561e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/get.js +++ /dev/null @@ -1,20 +0,0 @@ - - - /** - * get "nested" object property - */ - function get(obj, prop){ - var parts = prop.split('.'), - last = parts.pop(); - - while (prop = parts.shift()) { - obj = obj[prop]; - if (typeof obj !== 'object') return; - } - - return obj[last]; - } - - module.exports = get; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/has.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/has.js deleted file mode 100644 index ca9f2289..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/has.js +++ /dev/null @@ -1,15 +0,0 @@ -var get = require('./get'); - - var UNDEF; - - /** - * Check if object has nested property. - */ - function has(obj, prop){ - return get(obj, prop) !== UNDEF; - } - - module.exports = has; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/hasOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/hasOwn.js deleted file mode 100644 index 7e3c82ae..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/hasOwn.js +++ /dev/null @@ -1,12 +0,0 @@ - - - /** - * Safer Object.hasOwnProperty - */ - function hasOwn(obj, prop){ - return Object.prototype.hasOwnProperty.call(obj, prop); - } - - module.exports = hasOwn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/keys.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/keys.js deleted file mode 100644 index dd2f4f55..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/keys.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object keys - */ - var keys = Object.keys || function (obj) { - var keys = []; - forOwn(obj, function(val, key){ - keys.push(key); - }); - return keys; - }; - - module.exports = keys; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/map.js deleted file mode 100644 index dd449a78..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/map.js +++ /dev/null @@ -1,18 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Creates a new object where all the values are the result of calling - * `callback`. - */ - function mapValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(val, key, obj) { - output[key] = callback(val, key, obj); - }); - - return output; - } - module.exports = mapValues; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/matches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/matches.js deleted file mode 100644 index 6074faa2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/matches.js +++ /dev/null @@ -1,20 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * checks if a object contains all given properties/values - */ - function matches(target, props){ - // can't use "object/every" because of circular dependency - var result = true; - forOwn(props, function(val, key){ - if (target[key] !== val) { - // break loop at first difference - return (result = false); - } - }); - return result; - } - - module.exports = matches; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/max.js deleted file mode 100644 index 3e8e92c7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/max.js +++ /dev/null @@ -1,12 +0,0 @@ -var arrMax = require('../array/max'); -var values = require('./values'); - - /** - * Returns maximum value inside object. - */ - function max(obj, compareFn) { - return arrMax(values(obj), compareFn); - } - - module.exports = max; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/merge.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/merge.js deleted file mode 100644 index 6961f608..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/merge.js +++ /dev/null @@ -1,40 +0,0 @@ -var hasOwn = require('./hasOwn'); -var deepClone = require('../lang/deepClone'); -var isObject = require('../lang/isObject'); - - /** - * Deep merge objects. - */ - function merge() { - var i = 1, - key, val, obj, target; - - // make sure we don't modify source element and it's properties - // objects are passed by reference - target = deepClone( arguments[0] ); - - while (obj = arguments[i++]) { - for (key in obj) { - if ( ! hasOwn(obj, key) ) { - continue; - } - - val = obj[key]; - - if ( isObject(val) && isObject(target[key]) ){ - // inception, deep merge objects - target[key] = merge(target[key], val); - } else { - // make sure arrays, regexp, date, objects are cloned - target[key] = deepClone(val); - } - - } - } - - return target; - } - - module.exports = merge; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/min.js deleted file mode 100644 index e1e66976..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/min.js +++ /dev/null @@ -1,12 +0,0 @@ -var arrMin = require('../array/min'); -var values = require('./values'); - - /** - * Returns minimum value inside object. - */ - function min(obj, iterator) { - return arrMin(values(obj), iterator); - } - - module.exports = min; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/mixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/mixIn.js deleted file mode 100644 index 55ec8fd5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/mixIn.js +++ /dev/null @@ -1,28 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Combine properties from all the objects into first one. - * - This method affects target object in place, if you want to create a new Object pass an empty object as first param. - * @param {object} target Target Object - * @param {...object} objects Objects to be combined (0...n objects). - * @return {object} Target Object. - */ - function mixIn(target, objects){ - var i = 0, - n = arguments.length, - obj; - while(++i < n){ - obj = arguments[i]; - if (obj != null) { - forOwn(obj, copyProp, target); - } - } - return target; - } - - function copyProp(val, key){ - this[key] = val; - } - - module.exports = mixIn; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/namespace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/namespace.js deleted file mode 100644 index c6e79f63..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/namespace.js +++ /dev/null @@ -1,19 +0,0 @@ -var forEach = require('../array/forEach'); - - /** - * Create nested object if non-existent - */ - function namespace(obj, path){ - if (!path) return obj; - forEach(path.split('.'), function(key){ - if (!obj[key]) { - obj[key] = {}; - } - obj = obj[key]; - }); - return obj; - } - - module.exports = namespace; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/pick.js deleted file mode 100644 index 74e56f98..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/pick.js +++ /dev/null @@ -1,18 +0,0 @@ - - - /** - * Return a copy of the object, filtered to only have values for the whitelisted keys. - */ - function pick(obj, var_keys){ - var keys = typeof arguments[1] !== 'string'? arguments[1] : Array.prototype.slice.call(arguments, 1), - out = {}, - i = 0, key; - while (key = keys[i++]) { - out[key] = obj[key]; - } - return out; - } - - module.exports = pick; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/pluck.js deleted file mode 100644 index e844df47..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/pluck.js +++ /dev/null @@ -1,13 +0,0 @@ -var map = require('./map'); -var prop = require('../function/prop'); - - /** - * Extract a list of property values. - */ - function pluck(obj, propName){ - return map(obj, prop(propName)); - } - - module.exports = pluck; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/reduce.js deleted file mode 100644 index 6f19a3a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/reduce.js +++ /dev/null @@ -1,29 +0,0 @@ -var forOwn = require('./forOwn'); -var size = require('./size'); - - /** - * Object reduce - */ - function reduce(obj, callback, memo, thisObj) { - var initial = arguments.length > 2; - - if (!size(obj) && !initial) { - throw new Error('reduce of empty object with no initial value'); - } - - forOwn(obj, function(value, key, list) { - if (!initial) { - memo = value; - initial = true; - } - else { - memo = callback.call(thisObj, memo, value, key, list); - } - }); - - return memo; - } - - module.exports = reduce; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/reject.js deleted file mode 100644 index 74643795..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/reject.js +++ /dev/null @@ -1,16 +0,0 @@ -var filter = require('./filter'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object reject - */ - function reject(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - return filter(obj, function(value, index, obj) { - return !callback(value, index, obj); - }, thisObj); - } - - module.exports = reject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/set.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/set.js deleted file mode 100644 index 9b3cdc48..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/set.js +++ /dev/null @@ -1,17 +0,0 @@ -var namespace = require('./namespace'); - - /** - * set "nested" object property - */ - function set(obj, prop, val){ - var parts = (/^(.+)\.(.+)$/).exec(prop); - if (parts){ - namespace(obj, parts[1])[parts[2]] = val; - } else { - obj[prop] = val; - } - } - - module.exports = set; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/size.js deleted file mode 100644 index 97885953..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/size.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object size - */ - function size(obj) { - var count = 0; - forOwn(obj, function(){ - count++; - }); - return count; - } - - module.exports = size; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/some.js deleted file mode 100644 index 384c6f3c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/some.js +++ /dev/null @@ -1,21 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object some - */ - function some(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - forOwn(obj, function(val, key) { - if (callback(val, key, obj)) { - result = true; - return false; // break - } - }); - return result; - } - - module.exports = some; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/unset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/unset.js deleted file mode 100644 index 343bca0a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/unset.js +++ /dev/null @@ -1,23 +0,0 @@ -var has = require('./has'); - - /** - * Unset object property. - */ - function unset(obj, prop){ - if (has(obj, prop)) { - var parts = prop.split('.'), - last = parts.pop(); - while (prop = parts.shift()) { - obj = obj[prop]; - } - return (delete obj[last]); - - } else { - // if property doesn't exist treat as deleted - return true; - } - } - - module.exports = unset; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/values.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/values.js deleted file mode 100644 index 265a6938..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/object/values.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object values - */ - function values(obj) { - var vals = []; - forOwn(obj, function(val, key){ - vals.push(val); - }); - return vals; - } - - module.exports = values; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/package.json deleted file mode 100644 index 76eadf21..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/package.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "name": "mout", - "description": "Modular Utilities", - "version": "0.6.0", - "homepage": "http://moutjs.com/", - "contributors": [ - { - "name": "Adam Nowotny" - }, - { - "name": "André Cruz", - "email": "amdfcruz@gmail.com" - }, - { - "name": "Conrad Zimmerman", - "url": "http://www.conradz.com" - }, - { - "name": "Friedemann Altrock", - "email": "frodenius@gmail.com" - }, - { - "name": "Jarrod Overson", - "url": "http://jarrodoverson.com" - }, - { - "name": "Miller Medeiros", - "email": "contact@millermedeiros.com", - "url": "http://blog.millermedeiros.com" - }, - { - "name": "Zach Shipley" - } - ], - "keywords": [ - "utilities", - "functional", - "amd-utils", - "stdlib" - ], - "repository": { - "type": "git", - "url": "git://github.com/mout/mout.git" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://www.opensource.org/licenses/mit-license.php" - } - ], - "bugs": { - "url": "https://github.com/mout/mout/issues/" - }, - "main": "./index.js", - "scripts": { - "prepublish": "node build cjs .", - "pretest": "node build pkg", - "test": "node node_modules/istanbul/lib/cli test tests/runner.js --hook-run-in-context" - }, - "directories": { - "doc": "./doc" - }, - "devDependencies": { - "istanbul": "~0.1.27", - "jasmine-node": "~1.2.2", - "requirejs": "2.x", - "nodefy": "*", - "mdoc": "~0.3.2", - "handlebars": "~1.0.6", - "commander": "~1.0.5", - "rocambole": "~0.2.3" - }, - "testling": { - "preprocess": "node build testling", - "browsers": { - "ie": [ - 7, - 8, - 9, - 10 - ], - "firefox": [ - 17, - "nightly" - ], - "chrome": [ - 23, - "canary" - ], - "opera": [ - 12, - "next" - ], - "safari": [ - 5.1, - 6 - ], - "iphone": [ - 6 - ], - "ipad": [ - 6 - ] - }, - "scripts": [ - "tests/lib/jasmine/jasmine.js", - "tests/lib/jasmine/jasmine.async.js", - "tests/lib/jasmine/jasmine-tap.js", - "tests/lib/requirejs/require.js", - "tests/testling/src.js", - "tests/testling/specs.js", - "tests/runner.js" - ] - }, - "readme": "![mout](http://moutjs.com/logo.png \"Modular JavaScript Utilties\")\n\nhttp://moutjs.com/\n\n[![Build Status](https://travis-ci.org/mout/mout.png?branch=master)](https://travis-ci.org/mout/mout)\n\nAll code is library agnostic and consist mostly of helper methods that aren't\ndirectly related with the DOM, the purpose of this library isn't to replace\nDojo, jQuery, YUI, Mootools, etc, but to provide modular solutions for common\nproblems that aren't solved by most of them. Consider it as a crossbrowser\nJavaScript standard library.\n\n\n\n## Main goals ##\n\n - increase code reuse;\n - be clear (code should be clean/readable);\n - be easy to debug;\n - be easy to maintain;\n - follow best practices;\n - follow standards when possible;\n - **don't convert JavaScript into another language!**\n - be compatible with other frameworks;\n - be modular;\n - have unit tests for all modules;\n - work on multiple environments (IE7+, modern browsers, node.js);\n\n\n\n## What shouldn't be here ##\n\n - UI components;\n - CSS selector engine;\n - Event system - pub/sub;\n - Template engine;\n - Anything that isn't generic enough to be on a standard library;\n - Anything that could be a separate library and/or isn't a modular utility...\n\n\n\n## API Documentation ##\n\nOnline documentation can be found at http://moutjs.com/ or inside the\n`doc` folder.\n\n\n\n## FAQ / Wiki / IRC ##\n\nFor more info about project structure, design decisions, tips, how to\ncontribute, build system, etc, please check the [project\nwiki](https://github.com/mout/mout/wiki).\n\nWe also have an IRC channel [#moutjs on\nirc.freenode.net](http://webchat.freenode.net/?channels=moutjs)\n\n\n\n## License ##\n\nReleased under the [MIT License](http://www.opensource.org/licenses/mit-license.php).\n\n", - "readmeFilename": "README.md", - "_id": "mout@0.6.0", - "dist": { - "shasum": "d2f7a6e5a796040bf7b6259a41b46705f49d271d" - }, - "_from": "mout@~0.6.0", - "_resolved": "https://registry.npmjs.org/mout/-/mout-0.6.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString.js deleted file mode 100644 index 22685a7f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString.js +++ /dev/null @@ -1,15 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'contains' : require('./queryString/contains'), - 'decode' : require('./queryString/decode'), - 'encode' : require('./queryString/encode'), - 'getParam' : require('./queryString/getParam'), - 'getQuery' : require('./queryString/getQuery'), - 'parse' : require('./queryString/parse'), - 'setParam' : require('./queryString/setParam') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/contains.js deleted file mode 100644 index da678cf4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/contains.js +++ /dev/null @@ -1,12 +0,0 @@ -var getQuery = require('./getQuery'); - - /** - * Checks if query string contains parameter. - */ - function contains(url, paramName) { - var regex = new RegExp('(\\?|&)'+ paramName +'=', 'g'); //matches `?param=` or `¶m=` - return regex.test(getQuery(url)); - } - - module.exports = contains; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/decode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/decode.js deleted file mode 100644 index 7e689990..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/decode.js +++ /dev/null @@ -1,21 +0,0 @@ -var typecast = require('../string/typecast'); -var isString = require('../lang/isString'); - - /** - * Decode query string into an object of keys => vals. - */ - function decode(queryStr, shouldTypecast) { - var queryArr = (queryStr || '').replace('?', '').split('&'), - n = queryArr.length, - obj = {}, - item, val; - while (n--) { - item = queryArr[n].split('='); - val = shouldTypecast === false? item[1] : typecast(item[1]); - obj[item[0]] = isString(val)? decodeURIComponent(val) : val; - } - return obj; - } - - module.exports = decode; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/encode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/encode.js deleted file mode 100644 index 6d2b12f8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/encode.js +++ /dev/null @@ -1,15 +0,0 @@ -var forOwn = require('../object/forOwn'); - - /** - * Encode object into a query string. - */ - function encode(obj){ - var query = []; - forOwn(obj, function(val, key){ - query.push( key +'='+ encodeURIComponent(val) ); - }); - return (query.length)? '?'+ query.join('&') : ''; - } - - module.exports = encode; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getParam.js deleted file mode 100644 index f149c3ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getParam.js +++ /dev/null @@ -1,15 +0,0 @@ -var typecast = require('../string/typecast'); -var getQuery = require('./getQuery'); - - /** - * Get query parameter value. - */ - function getParam(url, param, shouldTypecast){ - var regexp = new RegExp('(\\?|&)'+ param + '=([^&]*)'), //matches `?param=value` or `¶m=value`, value = $2 - result = regexp.exec( getQuery(url) ), - val = (result && result[2])? result[2] : null; - return shouldTypecast === false? val : typecast(val); - } - - module.exports = getParam; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getQuery.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getQuery.js deleted file mode 100644 index 5194af2d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getQuery.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * Gets full query as string with all special chars decoded. - */ - function getQuery(url) { - url = url.replace(/#.*/, ''); //removes hash (to avoid getting hash query) - var queryString = /\?[a-zA-Z0-9\=\&\%\$\-\_\.\+\!\*\'\(\)\,]+/.exec(url); //valid chars according to: http://www.ietf.org/rfc/rfc1738.txt - return (queryString)? decodeURIComponent(queryString[0]) : ''; - } - - module.exports = getQuery; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/parse.js deleted file mode 100644 index 532906c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/parse.js +++ /dev/null @@ -1,13 +0,0 @@ -var decode = require('./decode'); -var getQuery = require('./getQuery'); - - /** - * Get query string, parses and decodes it. - */ - function parse(url, shouldTypecast) { - return decode(getQuery(url), shouldTypecast); - } - - module.exports = parse; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/setParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/setParam.js deleted file mode 100644 index 052a9ba6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/queryString/setParam.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Set query string parameter value - */ - function setParam(url, paramName, value){ - url = url || ''; - - var re = new RegExp('(\\?|&)'+ paramName +'=[^&]*' ); - var param = paramName +'='+ encodeURIComponent( value ); - - if ( re.test(url) ) { - return url.replace(re, '$1'+ param); - } else { - if (url.indexOf('?') === -1) { - url += '?'; - } - if (url.indexOf('=') !== -1) { - url += '&'; - } - return url + param; - } - - } - - module.exports = setParam; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random.js deleted file mode 100644 index d9267f01..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random.js +++ /dev/null @@ -1,16 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'choice' : require('./random/choice'), - 'guid' : require('./random/guid'), - 'rand' : require('./random/rand'), - 'randBit' : require('./random/randBit'), - 'randHex' : require('./random/randHex'), - 'randInt' : require('./random/randInt'), - 'randSign' : require('./random/randSign'), - 'random' : require('./random/random') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/choice.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/choice.js deleted file mode 100644 index 51aa82a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/choice.js +++ /dev/null @@ -1,15 +0,0 @@ -var randInt = require('./randInt'); -var isArray = require('../lang/isArray'); - - /** - * Returns a random element from the supplied arguments - * or from the array (if single argument is an array). - */ - function choice(items) { - var target = (arguments.length === 1 && isArray(items))? items : arguments; - return target[ randInt(0, target.length - 1) ]; - } - - module.exports = choice; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/guid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/guid.js deleted file mode 100644 index 41f6eddc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/guid.js +++ /dev/null @@ -1,24 +0,0 @@ -var randHex = require('./randHex'); -var choice = require('./choice'); - - /** - * Returns pseudo-random guid (UUID v4) - * IMPORTANT: it's not totally "safe" since randHex/choice uses Math.random - * by default and sequences can be predicted in some cases. See the - * "random/random" documentation for more info about it and how to replace - * the default PRNG. - */ - function guid() { - return ( - randHex(8)+'-'+ - randHex(4)+'-'+ - // v4 UUID always contain "4" at this position to specify it was - // randomly generated - '4' + randHex(3) +'-'+ - // v4 UUID always contain chars [a,b,8,9] at this position - choice(8, 9, 'a', 'b') + randHex(3)+'-'+ - randHex(12) - ); - } - module.exports = guid; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/rand.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/rand.js deleted file mode 100644 index 782dec88..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/rand.js +++ /dev/null @@ -1,15 +0,0 @@ -var random = require('./random'); -var MIN_INT = require('../number/MIN_INT'); -var MAX_INT = require('../number/MAX_INT'); - - /** - * Returns random number inside range - */ - function rand(min, max){ - min = min == null? MIN_INT : min; - max = max == null? MAX_INT : max; - return min + (max - min) * random(); - } - - module.exports = rand; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randBit.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randBit.js deleted file mode 100644 index bd20b4a0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randBit.js +++ /dev/null @@ -1,11 +0,0 @@ -var random = require('./random'); - - /** - * Returns random bit (0 or 1) - */ - function randomBit() { - return random() > 0.5? 1 : 0; - } - - module.exports = randomBit; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randHex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randHex.js deleted file mode 100644 index d8d711c3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randHex.js +++ /dev/null @@ -1,19 +0,0 @@ -var choice = require('./choice'); - - var _chars = '0123456789abcdef'.split(''); - - /** - * Returns a random hexadecimal string - */ - function randHex(size){ - size = size && size > 0? size : 6; - var str = ''; - while (size--) { - str += choice(_chars); - } - return str; - } - - module.exports = randHex; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randInt.js deleted file mode 100644 index e237d964..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randInt.js +++ /dev/null @@ -1,18 +0,0 @@ -var MIN_INT = require('../number/MIN_INT'); -var MAX_INT = require('../number/MAX_INT'); -var rand = require('./rand'); - - /** - * Gets random integer inside range or snap to min/max values. - */ - function randInt(min, max){ - min = min == null? MIN_INT : ~~min; - max = max == null? MAX_INT : ~~max; - // can't be max + 0.5 otherwise it will round up if `rand` - // returns `max` causing it to overflow range. - // -0.5 and + 0.49 are required to avoid bias caused by rounding - return Math.round( rand(min - 0.5, max + 0.499999999999) ); - } - - module.exports = randInt; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randSign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randSign.js deleted file mode 100644 index 5a9fed76..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/randSign.js +++ /dev/null @@ -1,11 +0,0 @@ -var random = require('./random'); - - /** - * Returns random sign (-1 or 1) - */ - function randomSign() { - return random() > 0.5? 1 : -1; - } - - module.exports = randomSign; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/random.js deleted file mode 100644 index 670a3cc4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/random/random.js +++ /dev/null @@ -1,18 +0,0 @@ - - - /** - * Just a wrapper to Math.random. No methods inside mout/random should call - * Math.random() directly so we can inject the pseudo-random number - * generator if needed (ie. in case we need a seeded random or a better - * algorithm than the native one) - */ - function random(){ - return random.get(); - } - - // we expose the method so it can be swapped if needed - random.get = Math.random; - - module.exports = random; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array.js deleted file mode 100644 index 7bcc961b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array.js +++ /dev/null @@ -1,46 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'append' : require('./array/append'), - 'collect' : require('./array/collect'), - 'combine' : require('./array/combine'), - 'compact' : require('./array/compact'), - 'contains' : require('./array/contains'), - 'difference' : require('./array/difference'), - 'every' : require('./array/every'), - 'filter' : require('./array/filter'), - 'find' : require('./array/find'), - 'findIndex' : require('./array/findIndex'), - 'flatten' : require('./array/flatten'), - 'forEach' : require('./array/forEach'), - 'indexOf' : require('./array/indexOf'), - 'insert' : require('./array/insert'), - 'intersection' : require('./array/intersection'), - 'invoke' : require('./array/invoke'), - 'join' : require('./array/join'), - 'lastIndexOf' : require('./array/lastIndexOf'), - 'map' : require('./array/map'), - 'max' : require('./array/max'), - 'min' : require('./array/min'), - 'pick' : require('./array/pick'), - 'pluck' : require('./array/pluck'), - 'range' : require('./array/range'), - 'reduce' : require('./array/reduce'), - 'reduceRight' : require('./array/reduceRight'), - 'reject' : require('./array/reject'), - 'remove' : require('./array/remove'), - 'removeAll' : require('./array/removeAll'), - 'shuffle' : require('./array/shuffle'), - 'some' : require('./array/some'), - 'sort' : require('./array/sort'), - 'split' : require('./array/split'), - 'toLookup' : require('./array/toLookup'), - 'union' : require('./array/union'), - 'unique' : require('./array/unique'), - 'xor' : require('./array/xor'), - 'zip' : require('./array/zip') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/append.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/append.js deleted file mode 100644 index 549d8754..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/append.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function () { - - /** - * Appends an array to the end of another. - * The first array will be modified. - */ - function append(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var pad = arr1.length, - i = -1, - len = arr2.length; - while (++i < len) { - arr1[pad + i] = arr2[i]; - } - return arr1; - } - return append; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/collect.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/collect.js deleted file mode 100644 index 8f60cda2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/collect.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['./append', '../function/makeIterator_'], function (append, makeIterator) { - - /** - * Maps the items in the array and concatenates the result arrays. - */ - function collect(arr, callback, thisObj){ - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - var value = callback(arr[i], i, arr); - if (value != null) { - append(results, value); - } - } - - return results; - } - - return collect; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/combine.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/combine.js deleted file mode 100644 index 22efb860..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/combine.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./indexOf'], function (indexOf) { - - /** - * Combines an array with all the items of another. - * Does not allow duplicates and is case and type sensitive. - */ - function combine(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var i = -1, len = arr2.length; - while (++i < len) { - if (indexOf(arr1, arr2[i]) === -1) { - arr1.push(arr2[i]); - } - } - - return arr1; - } - return combine; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/compact.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/compact.js deleted file mode 100644 index 02a81098..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/compact.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./filter'], function (filter) { - - /** - * Remove all null/undefined items from array. - */ - function compact(arr) { - return filter(arr, function(val){ - return (val != null); - }); - } - - return compact; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/contains.js deleted file mode 100644 index fca4f7cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/contains.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['./indexOf'], function (indexOf) { - - /** - * If array contains values. - */ - function contains(arr, val) { - return indexOf(arr, val) !== -1; - } - return contains; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/difference.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/difference.js deleted file mode 100644 index 819bda3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/difference.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./unique', './filter', './some', './contains'], function (unique, filter, some, contains) { - - - /** - * Return a new Array with elements that aren't present in the other Arrays. - */ - function difference(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return !some(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - return difference; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/every.js deleted file mode 100644 index 78ba46d3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/every.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array every - */ - function every(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (!callback(arr[i], i, arr) ) { - result = false; - break; - } - } - - return result; - } - - return every; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/filter.js deleted file mode 100644 index 52cf685a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/filter.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * Array filter - */ - function filter(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - return filter; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/find.js deleted file mode 100644 index 3957dcd5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/find.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./findIndex'], function (findIndex) { - - /** - * Returns first item that matches criteria - */ - function find(arr, iterator, thisObj){ - var idx = findIndex(arr, iterator, thisObj); - return idx >= 0? arr[idx] : void(0); - } - - return find; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/findIndex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/findIndex.js deleted file mode 100644 index 59dfeeb9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/findIndex.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Returns the index of the first item that matches criteria - */ - function findIndex(arr, iterator, thisObj){ - iterator = makeIterator(iterator, thisObj); - if (arr == null) { - return -1; - } - - var i = -1, len = arr.length; - while (++i < len) { - if (iterator(arr[i], i, arr)) { - return i; - } - } - - return -1; - } - - return findIndex; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/flatten.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/flatten.js deleted file mode 100644 index 42e87f43..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/flatten.js +++ /dev/null @@ -1,42 +0,0 @@ -define(['../lang/isArray', './append'], function (isArray, append) { - - /* - * Helper function to flatten to a destination array. - * Used to remove the need to create intermediate arrays while flattening. - */ - function flattenTo(arr, result, level) { - if (arr == null) { - return result; - } else if (level === 0) { - append(result, arr); - return result; - } - - var value, - i = -1, - len = arr.length; - while (++i < len) { - value = arr[i]; - if (isArray(value)) { - flattenTo(value, result, level - 1); - } else { - result.push(value); - } - } - return result; - } - - /** - * Recursively flattens an array. - * A new array containing all the elements is returned. - * If `shallow` is true, it will only flatten one level. - */ - function flatten(arr, level) { - level = level == null? -1 : level; - return flattenTo(arr, [], level); - } - - return flatten; - -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/forEach.js deleted file mode 100644 index 0e045868..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/forEach.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Array forEach - */ - function forEach(arr, callback, thisObj) { - if (arr == null) { - return; - } - var i = -1, - len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback.call(thisObj, arr[i], i, arr) === false ) { - break; - } - } - } - - return forEach; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/indexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/indexOf.js deleted file mode 100644 index 0e75f99b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/indexOf.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Array.indexOf - */ - function indexOf(arr, item, fromIndex) { - fromIndex = fromIndex || 0; - if (arr == null) { - return -1; - } - - var len = arr.length, - i = fromIndex < 0 ? len + fromIndex : fromIndex; - while (i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[i] === item) { - return i; - } - - i++; - } - - return -1; - } - - return indexOf; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/insert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/insert.js deleted file mode 100644 index d8d831f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/insert.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./difference', '../lang/toArray'], function (difference, toArray) { - - /** - * Insert item into array if not already present. - */ - function insert(arr, rest_items) { - var diff = difference(toArray(arguments).slice(1), arr); - if (diff.length) { - Array.prototype.push.apply(arr, diff); - } - return arr.length; - } - return insert; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/intersection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/intersection.js deleted file mode 100644 index 64e6ee97..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/intersection.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./unique', './filter', './every', './contains'], function (unique, filter, every, contains) { - - - /** - * Return a new Array with elements common to all Arrays. - * - based on underscore.js implementation - */ - function intersection(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return every(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - return intersection; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/invoke.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/invoke.js deleted file mode 100644 index a2e78b39..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/invoke.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./forEach'], function (forEach) { - - /** - * Call `methodName` on each item of the array passing custom arguments if - * needed. - */ - function invoke(arr, methodName, var_args){ - if (arr == null) { - return arr; - } - - var args = Array.prototype.slice.call(arguments, 2); - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - value[methodName].apply(value, args); - } - - return arr; - } - - return invoke; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/join.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/join.js deleted file mode 100644 index 2c618d29..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/join.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./filter'], function(filter) { - - function isValidString(val) { - return (val != null && val !== ''); - } - - /** - * Joins strings with the specified separator inserted between each value. - * Null values and empty strings will be excluded. - */ - function join(items, separator) { - separator = separator || ''; - return filter(items, isValidString).join(separator); - } - - return join; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/lastIndexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/lastIndexOf.js deleted file mode 100644 index 931235f4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/lastIndexOf.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Array lastIndexOf - */ - function lastIndexOf(arr, item, fromIndex) { - if (arr == null) { - return -1; - } - - var len = arr.length; - fromIndex = (fromIndex == null || fromIndex >= len)? len - 1 : fromIndex; - fromIndex = (fromIndex < 0)? len + fromIndex : fromIndex; - - while (fromIndex >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[fromIndex] === item) { - return fromIndex; - } - fromIndex--; - } - - return -1; - } - - return lastIndexOf; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/map.js deleted file mode 100644 index 1580b481..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/map.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * Array map - */ - function map(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null){ - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - results[i] = callback(arr[i], i, arr); - } - - return results; - } - - return map; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/max.js deleted file mode 100644 index a7326c89..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/max.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * Return maximum value inside array - */ - function max(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return Infinity; - } else if (arr.length && !iterator) { - return Math.max.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = -Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp > compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - return max; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/min.js deleted file mode 100644 index 41644480..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/min.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * Return minimum value inside array - */ - function min(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return -Infinity; - } else if (arr.length && !iterator) { - return Math.min.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp < compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - return min; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pick.js deleted file mode 100644 index 97d7f595..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pick.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../random/randInt'], function (randInt) { - - /** - * Remove a random item from the Array and return it - */ - function pick(arr){ - if (arr == null || !arr.length) return; - var idx = randInt(0, arr.length - 1); - return arr.splice(idx, 1)[0]; - } - - return pick; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pluck.js deleted file mode 100644 index c908856e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./map'], function (map) { - - /** - * Extract a list of property values. - */ - function pluck(arr, propName){ - return map(arr, propName); - } - - return pluck; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/range.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/range.js deleted file mode 100644 index 148ebf96..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/range.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../math/countSteps'], function (countSteps) { - - /** - * Returns an Array of numbers inside range. - */ - function range(start, stop, step) { - if (stop == null) { - stop = start; - start = 0; - } - step = step || 1; - - var result = [], - nSteps = countSteps(stop - start, step), - i = start; - - while (i <= stop) { - result.push(i); - i += step; - } - - return result; - } - - return range; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduce.js deleted file mode 100644 index 88aacfd5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduce.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['./forEach'], function (forEach) { - - /** - * Array reduce - */ - function reduce(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2, - result = initVal; - - if (arr == null || !arr.length) { - if (!hasInit) { - throw new Error('reduce of empty array with no initial value'); - } else { - return initVal; - } - } - - var i = -1, len = arr.length; - while (++i < len) { - if (!hasInit) { - result = arr[i]; - hasInit = true; - } else { - result = fn(result, arr[i], i, arr); - } - } - - return result; - } - - return reduce; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduceRight.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduceRight.js deleted file mode 100644 index ddae0e7f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduceRight.js +++ /dev/null @@ -1,34 +0,0 @@ -define(function () { - - /** - * Array reduceRight - */ - function reduceRight(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2; - - if (arr == null || !arr.length) { - if (hasInit) { - return initVal; - } else { - throw new Error('reduce of empty array with no initial value'); - } - } - - var i = arr.length, result = initVal, value; - while (--i >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - value = arr[i]; - if (!hasInit) { - result = value; - hasInit = true; - } else { - result = fn(result, value, i, arr); - } - } - return result; - } - - return reduceRight; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reject.js deleted file mode 100644 index db105dde..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reject.js +++ /dev/null @@ -1,25 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function(forEach, makeIterator) { - - /** - * Array reject - */ - function reject(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (!callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - return reject; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/remove.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/remove.js deleted file mode 100644 index dec9134d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/remove.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./indexOf'], function(indexOf){ - - /** - * Remove a single item from the array. - * (it won't remove duplicates, just a single item) - */ - function remove(arr, item){ - var idx = indexOf(arr, item); - if (idx !== -1) arr.splice(idx, 1); - } - - return remove; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/removeAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/removeAll.js deleted file mode 100644 index e81022b8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/removeAll.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./indexOf'], function(indexOf){ - - /** - * Remove all instances of an item from array. - */ - function removeAll(arr, item){ - var idx = indexOf(arr, item); - while (idx !== -1) { - arr.splice(idx, 1); - idx = indexOf(arr, item, idx); - } - } - - return removeAll; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/shuffle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/shuffle.js deleted file mode 100644 index f5a60972..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/shuffle.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['../random/randInt', './forEach'], function (randInt, forEach) { - - /** - * Shuffle array items. - */ - function shuffle(arr) { - var results = [], - rnd; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - if (!i) { - results[0] = arr[0]; - } else { - rnd = randInt(0, i); - results[i] = results[rnd]; - results[rnd] = arr[i]; - } - } - - return results; - } - - return shuffle; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/some.js deleted file mode 100644 index e46a9781..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/some.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array some - */ - function some(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback(arr[i], i, arr) ) { - result = true; - break; - } - } - - return result; - } - - return some; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/sort.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/sort.js deleted file mode 100644 index 4c194042..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/sort.js +++ /dev/null @@ -1,55 +0,0 @@ -define(function () { - - /** - * Merge sort (http://en.wikipedia.org/wiki/Merge_sort) - */ - function mergeSort(arr, compareFn) { - if (arr == null) { - return []; - } else if (arr.length < 2) { - return arr; - } - - if (compareFn == null) { - compareFn = defaultCompare; - } - - var mid, left, right; - - mid = ~~(arr.length / 2); - left = mergeSort( arr.slice(0, mid), compareFn ); - right = mergeSort( arr.slice(mid, arr.length), compareFn ); - - return merge(left, right, compareFn); - } - - function defaultCompare(a, b) { - return a < b ? -1 : (a > b? 1 : 0); - } - - function merge(left, right, compareFn) { - var result = []; - - while (left.length && right.length) { - if (compareFn(left[0], right[0]) <= 0) { - // if 0 it should preserve same order (stable) - result.push(left.shift()); - } else { - result.push(right.shift()); - } - } - - if (left.length) { - result.push.apply(result, left); - } - - if (right.length) { - result.push.apply(result, right); - } - - return result; - } - - return mergeSort; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/split.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/split.js deleted file mode 100644 index a17275eb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/split.js +++ /dev/null @@ -1,35 +0,0 @@ -define(function() { - - /** - * Split array into a fixed number of segments. - */ - function split(array, segments) { - segments = segments || 2; - var results = []; - if (array == null) { - return results; - } - - var minLength = Math.floor(array.length / segments), - remainder = array.length % segments, - i = 0, - len = array.length, - segmentIndex = 0, - segmentLength; - - while (i < len) { - segmentLength = minLength; - if (segmentIndex < remainder) { - segmentLength++; - } - - results.push(array.slice(i, i + segmentLength)); - - segmentIndex++; - i += segmentLength; - } - - return results; - } - return split; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/toLookup.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/toLookup.js deleted file mode 100644 index aac8fd1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/toLookup.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['../lang/isFunction'], function (isFunction) { - - /** - * Creates an object that holds a lookup for the objects in the array. - */ - function toLookup(arr, key) { - var result = {}; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length, value; - if (isFunction(key)) { - while (++i < len) { - value = arr[i]; - result[key(value)] = value; - } - } else { - while (++i < len) { - value = arr[i]; - result[value[key]] = value; - } - } - - return result; - } - return toLookup; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/union.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/union.js deleted file mode 100644 index 5f9922e5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/union.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./unique', './append'], function (unique, append) { - - /** - * Concat multiple arrays and remove duplicates - */ - function union(arrs) { - var results = []; - var i = -1, len = arguments.length; - while (++i < len) { - append(results, arguments[i]); - } - - return unique(results); - } - - return union; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/unique.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/unique.js deleted file mode 100644 index c4bd23b4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/unique.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./indexOf', './filter'], function(indexOf, filter){ - - /** - * @return {array} Array of unique items - */ - function unique(arr){ - return filter(arr, isUnique); - } - - function isUnique(item, i, arr){ - return indexOf(arr, item, i+1) === -1; - } - - return unique; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/xor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/xor.js deleted file mode 100644 index 7df89d9c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/xor.js +++ /dev/null @@ -1,24 +0,0 @@ -define(['./unique', './filter', './contains'], function (unique, filter, contains) { - - - /** - * Exclusive OR. Returns items that are present in a single array. - * - like ptyhon's `symmetric_difference` - */ - function xor(arr1, arr2) { - arr1 = unique(arr1); - arr2 = unique(arr2); - - var a1 = filter(arr1, function(item){ - return !contains(arr2, item); - }), - a2 = filter(arr2, function(item){ - return !contains(arr1, item); - }); - - return a1.concat(a2); - } - - return xor; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/zip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/zip.js deleted file mode 100644 index 374cd282..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/array/zip.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['./max', './pluck', './map'], function (max, pluck, map) { - - function getLength(arr) { - return arr == null ? 0 : arr.length; - } - - /** - * Merges together the values of each of the arrays with the values at the - * corresponding position. - */ - function zip(arr){ - var len = arr ? max(map(arguments, getLength)) : 0, - results = [], - i = -1, - item; - while (++i < len) { - results.push(map(arguments, function(item) { - return item == null ? undefined : item[i]; - })); - } - - return results; - } - - return zip; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection.js deleted file mode 100644 index 386e6da9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection.js +++ /dev/null @@ -1,22 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'contains' : require('./collection/contains'), - 'every' : require('./collection/every'), - 'filter' : require('./collection/filter'), - 'find' : require('./collection/find'), - 'forEach' : require('./collection/forEach'), - 'make_' : require('./collection/make_'), - 'map' : require('./collection/map'), - 'max' : require('./collection/max'), - 'min' : require('./collection/min'), - 'pluck' : require('./collection/pluck'), - 'reduce' : require('./collection/reduce'), - 'reject' : require('./collection/reject'), - 'size' : require('./collection/size'), - 'some' : require('./collection/some') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/contains.js deleted file mode 100644 index 192167e8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/contains.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/contains', '../object/contains'], function (make, arrContains, objContains) { - - /** - */ - return make(arrContains, objContains); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/every.js deleted file mode 100644 index 6317f503..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/every.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/every', '../object/every'], function (make, arrEvery, objEvery) { - - /** - */ - return make(arrEvery, objEvery); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/filter.js deleted file mode 100644 index 4e7fadc8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/filter.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * filter collection values, returns array. - */ - function filter(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - var results = []; - if (!list) { - return results; - } - forEach(list, function(value, index, list) { - if (iterator(value, index, list)) { - results[results.length] = value; - } - }); - return results; - } - - return filter; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/find.js deleted file mode 100644 index 681f9414..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/find.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/find', '../object/find'], function(make, arrFind, objFind) { - - /** - * Find value that returns true on iterator check. - */ - return make(arrFind, objFind); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/forEach.js deleted file mode 100644 index 3b39d3ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/forEach.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/forEach', '../object/forOwn'], function (make, arrForEach, objForEach) { - - /** - */ - return make(arrForEach, objForEach); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/make_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/make_.js deleted file mode 100644 index 312e0564..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/make_.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function(){ - - /** - * internal method used to create other collection modules. - */ - function makeCollectionMethod(arrMethod, objMethod, defaultReturn) { - return function(){ - var args = Array.prototype.slice.call(arguments); - if (args[0] == null) { - return defaultReturn; - } - // array-like is treated as array - return (typeof args[0].length === 'number')? arrMethod.apply(null, args) : objMethod.apply(null, args); - }; - } - - return makeCollectionMethod; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/map.js deleted file mode 100644 index 96e24987..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/map.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../lang/isObject', '../object/values', '../array/map', '../function/makeIterator_'], function (isObject, values, arrMap, makeIterator) { - - /** - * Map collection values, returns Array. - */ - function map(list, callback, thisObj) { - callback = makeIterator(callback, thisObj); - // list.length to check array-like object, if not array-like - // we simply map all the object values - if( isObject(list) && list.length == null ){ - list = values(list); - } - return arrMap(list, function (val, key, list) { - return callback(val, key, list); - }); - } - - return map; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/max.js deleted file mode 100644 index de9a6da5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/max.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/max', '../object/max'], function (make, arrMax, objMax) { - - /** - * Get maximum value inside collection - */ - return make(arrMax, objMax); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/min.js deleted file mode 100644 index f0c239a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/min.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/min', '../object/min'], function (make, arrMin, objMin) { - - /** - * Get minimum value inside collection. - */ - return make(arrMin, objMin); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/pluck.js deleted file mode 100644 index ef784a7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/pluck.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./map'], function (map) { - - /** - * Extract a list of property values. - */ - function pluck(list, key) { - return map(list, function(value) { - return value[key]; - }); - } - - return pluck; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reduce.js deleted file mode 100644 index bd05d43d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reduce.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/reduce', '../object/reduce'], function (make, arrReduce, objReduce) { - - /** - */ - return make(arrReduce, objReduce); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reject.js deleted file mode 100644 index 581adfdc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reject.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./filter', '../function/makeIterator_'], function (filter, makeIterator) { - - /** - * Inverse or collection/filter - */ - function reject(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - return filter(list, function(value, index, list) { - return !iterator(value, index, list); - }, thisObj); - } - - return reject; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/size.js deleted file mode 100644 index 4e5ab419..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/size.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/isArray', '../object/size'], function (isArray, objSize) { - - /** - * Get collection size - */ - function size(list) { - if (!list) { - return 0; - } - if (isArray(list)) { - return list.length; - } - return objSize(list); - } - - return size; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/some.js deleted file mode 100644 index c0aebee2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/some.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/some', '../object/some'], function (make, arrSome, objSome) { - - /** - */ - return make(arrSome, objSome); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date.js deleted file mode 100644 index 4d449150..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'dayOfTheYear' : require('./date/dayOfTheYear'), - 'diff' : require('./date/diff'), - 'i18n_' : require('./date/i18n_'), - 'isLeapYear' : require('./date/isLeapYear'), - 'isSame' : require('./date/isSame'), - 'parseIso' : require('./date/parseIso'), - 'startOf' : require('./date/startOf'), - 'strftime' : require('./date/strftime'), - 'timezoneAbbr' : require('./date/timezoneAbbr'), - 'timezoneOffset' : require('./date/timezoneOffset'), - 'totalDaysInMonth' : require('./date/totalDaysInMonth'), - 'totalDaysInYear' : require('./date/totalDaysInYear'), - 'weekOfTheYear' : require('./date/weekOfTheYear') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/dayOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/dayOfTheYear.js deleted file mode 100644 index dc77ae1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/dayOfTheYear.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/isDate'], function (isDate) { - - /** - * return the day of the year (1..366) - */ - function dayOfTheYear(date){ - return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - - Date.UTC(date.getFullYear(), 0, 1)) / 86400000 + 1; - } - - return dayOfTheYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/diff.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/diff.js deleted file mode 100644 index 667165fe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/diff.js +++ /dev/null @@ -1,128 +0,0 @@ -define(['./totalDaysInMonth', './totalDaysInYear', '../time/convert'], function(totalDaysInMonth, totalDaysInYear, convert){ - - /** - * calculate the difference between dates (range) - */ - function diff(start, end, unitName){ - // sort the dates to make it easier to process (specially year/month) - if (start > end) { - var swap = start; - start = end; - end = swap; - } - - var output; - - if (unitName === 'month') { - output = getMonthsDiff(start, end); - } else if (unitName === 'year'){ - output = getYearsDiff(start, end); - } else if (unitName != null) { - if (unitName === 'day') { - // ignore timezone difference because of daylight savings time - start = toUtc(start); - end = toUtc(end); - } - output = convert(end - start, 'ms', unitName); - } else { - output = end - start; - } - - return output; - } - - - function toUtc(d){ - // we ignore timezone differences on purpose because of daylight - // savings time, otherwise it would return fractional days/weeks even - // if a full day elapsed. eg: - // Wed Feb 12 2014 00:00:00 GMT-0200 (BRST) - // Sun Feb 16 2014 00:00:00 GMT-0300 (BRT) - // diff should be 4 days and not 4.041666666666667 - return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), - d.getHours(), d.getMinutes(), d.getSeconds(), - d.getMilliseconds()); - } - - - function getMonthsDiff(start, end){ - return getElapsedMonths(start, end) + - getElapsedYears(start, end) * 12 + - getFractionalMonth(start, end); - } - - - function getYearsDiff(start, end){ - var elapsedYears = getElapsedYears(start, end); - return elapsedYears + getFractionalYear(start, end, elapsedYears); - } - - - function getElapsedMonths(start, end){ - var monthDiff = end.getMonth() - start.getMonth(); - if (monthDiff < 0) { - monthDiff += 12; - } - // less than a full month - if (start.getDate() > end.getDate()) { - monthDiff -= 1; - } - return monthDiff; - } - - - function getElapsedYears(start, end){ - var yearDiff = end.getFullYear() - start.getFullYear(); - // less than a full year - if (start.getMonth() > end.getMonth()) { - yearDiff -= 1; - } - return yearDiff; - } - - - function getFractionalMonth(start, end){ - var fractionalDiff = 0; - var startDay = start.getDate(); - var endDay = end.getDate(); - - if (startDay !== endDay) { - var startTotalDays = totalDaysInMonth(start); - var endTotalDays = totalDaysInMonth(end); - var totalDays; - var daysElapsed; - - if (startDay > endDay) { - // eg: Jan 29 - Feb 27 (29 days elapsed but not a full month) - var baseDay = startTotalDays - startDay; - daysElapsed = endDay + baseDay; - // total days should be relative to 1st day of next month if - // startDay > endTotalDays - totalDays = (startDay > endTotalDays)? - endTotalDays + baseDay + 1 : startDay + baseDay; - } else { - // fractional is only based on endMonth eg: Jan 12 - Feb 18 - // (6 fractional days, 28 days until next full month) - daysElapsed = endDay - startDay; - totalDays = endTotalDays; - } - - fractionalDiff = daysElapsed / totalDays; - } - - return fractionalDiff; - } - - - function getFractionalYear(start, end, elapsedYears){ - var base = elapsedYears? - new Date(end.getFullYear(), start.getMonth(), start.getDate()) : - start; - var elapsedDays = diff(base, end, 'day'); - return elapsedDays / totalDaysInYear(end); - } - - - return diff; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/en-US.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/en-US.js deleted file mode 100644 index 5e640c22..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/en-US.js +++ /dev/null @@ -1,61 +0,0 @@ -define(function(){ - // en-US (English, United States) - return { - "am" : "AM", - "pm" : "PM", - - "x": "%m/%d/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %I:%M:%S %p %Z", - - "months" : [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - - "months_abbr" : [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - - "days" : [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - - "days_abbr" : [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ] - }; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/pt-BR.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/pt-BR.js deleted file mode 100644 index 47256dd2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/pt-BR.js +++ /dev/null @@ -1,61 +0,0 @@ -define(function(){ - // pt-BR (Brazillian Portuguese) - return { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Janeiro", - "Fevereiro", - "Março", - "Abril", - "Maio", - "Junho", - "Julho", - "Agosto", - "Setembro", - "Outubro", - "Novembro", - "Dezembro" - ], - - "months_abbr" : [ - "Jan", - "Fev", - "Mar", - "Abr", - "Mai", - "Jun", - "Jul", - "Ago", - "Set", - "Out", - "Nov", - "Dez" - ], - - "days" : [ - "Domingo", - "Segunda", - "Terça", - "Quarta", - "Quinta", - "Sexta", - "Sábado" - ], - - "days_abbr" : [ - "Dom", - "Seg", - "Ter", - "Qua", - "Qui", - "Sex", - "Sáb" - ] - }; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n_.js deleted file mode 100644 index c04ce885..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n_.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../object/mixIn', './i18n/en-US'], function(mixIn, enUS){ - - // we also use mixIn to make sure we don't affect the original locale - var activeLocale = mixIn({}, enUS, { - // we expose a "set" method to allow overriding the global locale - set : function(localeData){ - mixIn(activeLocale, localeData); - } - }); - - return activeLocale; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isLeapYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isLeapYear.js deleted file mode 100644 index e400b43d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isLeapYear.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../lang/isDate'], function (isDate) { - - /** - * checks if it's a leap year - */ - function isLeapYear(fullYear){ - if (isDate(fullYear)) { - fullYear = fullYear.getFullYear(); - } - return fullYear % 400 === 0 || (fullYear % 100 !== 0 && fullYear % 4 === 0); - } - - return isLeapYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isSame.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isSame.js deleted file mode 100644 index f30531fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isSame.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./startOf'], function (startOf) { - - /** - * Check if date is "same" with optional period - */ - function isSame(date1, date2, period){ - if (period) { - date1 = startOf(date1, period); - date2 = startOf(date2, period); - } - return Number(date1) === Number(date2); - } - - return isSame; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/parseIso.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/parseIso.js deleted file mode 100644 index 9a2aacb0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/parseIso.js +++ /dev/null @@ -1,146 +0,0 @@ -define(['../array/some'], function (some) { - - var datePatterns = [ - /^([0-9]{4})$/, // YYYY - /^([0-9]{4})-([0-9]{2})$/, // YYYY-MM (YYYYMM not allowed) - /^([0-9]{4})-?([0-9]{2})-?([0-9]{2})$/ // YYYY-MM-DD or YYYYMMDD - ]; - var ORD_DATE = /^([0-9]{4})-?([0-9]{3})$/; // YYYY-DDD - - var timePatterns = [ - /^([0-9]{2}(?:\.[0-9]*)?)$/, // HH.hh - /^([0-9]{2}):?([0-9]{2}(?:\.[0-9]*)?)$/, // HH:MM.mm - /^([0-9]{2}):?([0-9]{2}):?([0-9]{2}(\.[0-9]*)?)$/ // HH:MM:SS.ss - ]; - - var DATE_TIME = /^(.+)T(.+)$/; - var TIME_ZONE = /^(.+)([+\-])([0-9]{2}):?([0-9]{2})$/; - - function matchAll(str, patterns) { - var match; - var found = some(patterns, function(pattern) { - return !!(match = pattern.exec(str)); - }); - - return found ? match : null; - } - - function getDate(year, month, day) { - var date = new Date(Date.UTC(year, month, day)); - - // Explicitly set year to avoid Date.UTC making dates < 100 relative to - // 1900 - date.setUTCFullYear(year); - - var valid = - date.getUTCFullYear() === year && - date.getUTCMonth() === month && - date.getUTCDate() === day; - return valid ? +date : NaN; - } - - function parseOrdinalDate(str) { - var match = ORD_DATE.exec(str); - if (match ) { - var year = +match[1], - day = +match[2], - date = new Date(Date.UTC(year, 0, day)); - - if (date.getUTCFullYear() === year) { - return +date; - } - } - - return NaN; - } - - function parseDate(str) { - var match, year, month, day; - - var match = matchAll(str, datePatterns); - if (match === null) { - // Ordinal dates are verified differently. - return parseOrdinalDate(str); - } - - year = (match[1] === void 0) ? 0 : +match[1]; - month = (match[2] === void 0) ? 0 : +match[2] - 1; - day = (match[3] === void 0) ? 1 : +match[3]; - - return getDate(year, month, day); - } - - function getTime(hr, min, sec) { - var valid = - (hr < 24 && hr >= 0 && - min < 60 && min >= 0 && - sec < 60 && min >= 0) || - (hr === 24 && min === 0 && sec === 0); - if (!valid) { - return NaN; - } - - return ((hr * 60 + min) * 60 + sec) * 1000; - } - - function parseOffset(str) { - var match; - if (str.charAt(str.length - 1) === 'Z') { - str = str.substring(0, str.length - 1); - } else if ((match = TIME_ZONE.exec(str))) { - var match = TIME_ZONE.exec(str); - if (match) { - var hours = +match[3], - minutes = (match[4] === void 0) ? 0 : +match[4], - offset = getTime(hours, minutes, 0); - - if (match[2] === '-') { - offset *= -1; - } - - return { offset: offset, time: match[1] }; - } - } - - // No time zone specified, assume UTC - return { offset: 0, time: str }; - } - - function parseTime(str) { - var match; - var offset = parseOffset(str); - - str = offset.time; - offset = offset.offset; - if (isNaN(offset)) { - return NaN; - } - - match = matchAll(str, timePatterns); - if (match === null) { - return NaN; - } - - var hours = (match[1] === void 0) ? 0 : +match[1], - minutes = (match[2] === void 0) ? 0 : +match[2], - seconds = (match[3] === void 0) ? 0 : +match[3]; - - return getTime(hours, minutes, seconds) - offset; - } - - /** - * Parse an ISO8601 formatted date string, and return a Date object. - */ - function parseISO8601(str){ - var match = DATE_TIME.exec(str); - if (!match) { - // No time specified - return parseDate(str); - } - - return parseDate(match[1]) + parseTime(match[2]); - } - - return parseISO8601; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/startOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/startOf.js deleted file mode 100644 index 747f114d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/startOf.js +++ /dev/null @@ -1,54 +0,0 @@ -define(['../lang/clone'], function (clone) { - - /** - * get a new Date object representing start of period - */ - function startOf(date, period){ - date = clone(date); - - // intentionally removed "break" from switch since start of - // month/year/etc should also reset the following periods - switch (period) { - case 'year': - date.setMonth(0); - /* falls through */ - case 'month': - date.setDate(1); - /* falls through */ - case 'week': - case 'day': - date.setHours(0); - /* falls through */ - case 'hour': - date.setMinutes(0); - /* falls through */ - case 'minute': - date.setSeconds(0); - /* falls through */ - case 'second': - date.setMilliseconds(0); - break; - default: - throw new Error('"'+ period +'" is not a valid period'); - } - - // week is the only case that should reset the weekDay and maybe even - // overflow to previous month - if (period === 'week') { - var weekDay = date.getDay(); - var baseDate = date.getDate(); - if (weekDay) { - if (weekDay >= baseDate) { - //start of the week is on previous month - date.setDate(0); - } - date.setDate(date.getDate() - date.getDay()); - } - } - - return date; - } - - return startOf; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/strftime.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/strftime.js deleted file mode 100644 index dd782505..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/strftime.js +++ /dev/null @@ -1,113 +0,0 @@ -define(['../number/pad', './i18n_', './dayOfTheYear', './timezoneOffset', './timezoneAbbr', './weekOfTheYear'], function (pad, i18n, dayOfTheYear, timezoneOffset, timezoneAbbr, weekOfTheYear) { - - var _combinations = { - 'D': '%m/%d/%y', - 'F': '%Y-%m-%d', - 'r': '%I:%M:%S %p', - 'R': '%H:%M', - 'T': '%H:%M:%S', - 'x': 'locale', - 'X': 'locale', - 'c': 'locale' - }; - - - /** - * format date based on strftime format - */ - function strftime(date, format, localeData){ - localeData = localeData || i18n; - var reToken = /%([a-z%])/gi; - - function makeIterator(fn) { - return function(match, token){ - return fn(date, token, localeData); - }; - } - - return format - .replace(reToken, makeIterator(expandCombinations)) - .replace(reToken, makeIterator(convertToken)); - } - - - function expandCombinations(date, token, l10n){ - if (token in _combinations) { - var expanded = _combinations[token]; - return expanded === 'locale'? l10n[token] : expanded; - } else { - return '%'+ token; - } - } - - - function convertToken(date, token, l10n){ - switch (token){ - case 'a': - return l10n.days_abbr[date.getDay()]; - case 'A': - return l10n.days[date.getDay()]; - case 'h': - case 'b': - return l10n.months_abbr[date.getMonth()]; - case 'B': - return l10n.months[date.getMonth()]; - case 'C': - return pad(Math.floor(date.getFullYear() / 100), 2); - case 'd': - return pad(date.getDate(), 2); - case 'e': - return pad(date.getDate(), 2, ' '); - case 'H': - return pad(date.getHours(), 2); - case 'I': - return pad(date.getHours() % 12, 2); - case 'j': - return pad(dayOfTheYear(date), 3); - case 'L': - return pad(date.getMilliseconds(), 3); - case 'm': - return pad(date.getMonth() + 1, 2); - case 'M': - return pad(date.getMinutes(), 2); - case 'n': - return '\n'; - case 'p': - return date.getHours() >= 12? l10n.pm : l10n.am; - case 'P': - return convertToken(date, 'p', l10n).toLowerCase(); - case 's': - return date.getTime() / 1000; - case 'S': - return pad(date.getSeconds(), 2); - case 't': - return '\t'; - case 'u': - var day = date.getDay(); - return day === 0? 7 : day; - case 'U': - return pad(weekOfTheYear(date), 2); - case 'w': - return date.getDay(); - case 'W': - return pad(weekOfTheYear(date, 1), 2); - case 'y': - return pad(date.getFullYear() % 100, 2); - case 'Y': - return pad(date.getFullYear(), 4); - case 'z': - return timezoneOffset(date); - case 'Z': - return timezoneAbbr(date); - case '%': - return '%'; - default: - // keep unrecognized tokens - return '%'+ token; - } - } - - - return strftime; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneAbbr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneAbbr.js deleted file mode 100644 index 225a6856..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneAbbr.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./timezoneOffset'], function(timezoneOffset) { - - /** - * Abbreviated time zone name or similar information. - */ - function timezoneAbbr(date){ - // Date.toString gives different results depending on the - // browser/system so we fallback to timezone offset - // chrome: 'Mon Apr 08 2013 09:02:04 GMT-0300 (BRT)' - // IE: 'Mon Apr 8 09:02:04 UTC-0300 2013' - var tz = /\(([A-Z]{3,4})\)/.exec(date.toString()); - return tz? tz[1] : timezoneOffset(date); - } - - return timezoneAbbr; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneOffset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneOffset.js deleted file mode 100644 index ca06705d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneOffset.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../number/pad'], function (pad) { - - /** - * time zone as hour and minute offset from UTC (e.g. +0900) - */ - function timezoneOffset(date){ - var offset = date.getTimezoneOffset(); - var abs = Math.abs(offset); - var h = pad(Math.floor(abs / 60), 2); - var m = pad(abs % 60, 2); - return (offset > 0? '-' : '+') + h + m; - } - - return timezoneOffset; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInMonth.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInMonth.js deleted file mode 100644 index 98f7e9d1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInMonth.js +++ /dev/null @@ -1,24 +0,0 @@ -define(['../lang/isDate', './isLeapYear'], function (isDate, isLeapYear) { - - var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - - /** - * returns the total amount of days in the month (considering leap years) - */ - function totalDaysInMonth(fullYear, monthIndex){ - if (isDate(fullYear)) { - var date = fullYear; - year = date.getFullYear(); - monthIndex = date.getMonth(); - } - - if (monthIndex === 1 && isLeapYear(fullYear)) { - return 29; - } else { - return DAYS_IN_MONTH[monthIndex]; - } - } - - return totalDaysInMonth; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInYear.js deleted file mode 100644 index e9036b42..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInYear.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./isLeapYear'], function (isLeapYear) { - - /** - * return the amount of days in the year following the gregorian calendar - * and leap years - */ - function totalDaysInYear(fullYear){ - return isLeapYear(fullYear)? 366 : 365; - } - - return totalDaysInYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/weekOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/weekOfTheYear.js deleted file mode 100644 index 8dabc458..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/date/weekOfTheYear.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./dayOfTheYear'], function (dayOfTheYear) { - - /** - * Return the week of the year based on given firstDayOfWeek - */ - function weekOfTheYear(date, firstDayOfWeek){ - firstDayOfWeek = firstDayOfWeek == null? 0 : firstDayOfWeek; - var doy = dayOfTheYear(date); - var dow = (7 + date.getDay() - firstDayOfWeek) % 7; - var relativeWeekDay = 6 - firstDayOfWeek - dow; - return Math.floor((doy + relativeWeekDay) / 7); - } - - return weekOfTheYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function.js deleted file mode 100644 index 23f4fd74..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'bind' : require('./function/bind'), - 'compose' : require('./function/compose'), - 'debounce' : require('./function/debounce'), - 'func' : require('./function/func'), - 'makeIterator_' : require('./function/makeIterator_'), - 'partial' : require('./function/partial'), - 'prop' : require('./function/prop'), - 'series' : require('./function/series'), - 'throttle' : require('./function/throttle'), - 'timeout' : require('./function/timeout') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/bind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/bind.js deleted file mode 100644 index 09e5e20a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/bind.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function(){ - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - * @param {Function} fn Function. - * @param {object} context Execution context. - * @param {rest} args Arguments (0...n arguments). - * @return {Function} Wrapped Function. - */ - function bind(fn, context, args){ - var argsArr = slice(arguments, 2); //curried args - return function(){ - return fn.apply(context, argsArr.concat(slice(arguments))); - }; - } - - return bind; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/compose.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/compose.js deleted file mode 100644 index d8b228fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/compose.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Returns a function that composes multiple functions, passing results to - * each other. - */ - function compose() { - var fns = arguments; - return function(arg){ - // only cares about the first argument since the chain can only - // deal with a single return value anyway. It should start from - // the last fn. - var n = fns.length; - while (n--) { - arg = fns[n].call(this, arg); - } - return arg; - }; - } - - return compose; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/debounce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/debounce.js deleted file mode 100644 index 21644ecc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/debounce.js +++ /dev/null @@ -1,29 +0,0 @@ -define(function () { - - /** - * Debounce callback execution - */ - function debounce(fn, threshold, isAsap){ - var timeout, result; - function debounced(){ - var args = arguments, context = this; - function delayed(){ - if (! isAsap) { - result = fn.apply(context, args); - } - timeout = null; - } - if (timeout) { - clearTimeout(timeout); - } else if (isAsap) { - result = fn.apply(context, args); - } - timeout = setTimeout(delayed, threshold); - return result; - } - return debounced; - } - - return debounce; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/func.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/func.js deleted file mode 100644 index b920e00e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/func.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Returns a function that call a method on the passed object - */ - function func(name){ - return function(obj){ - return obj[name](); - }; - } - - return func; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/makeIterator_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/makeIterator_.js deleted file mode 100644 index deb6e137..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/makeIterator_.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['./prop', '../object/deepMatches'], function(prop, deepMatches) { - - /** - * Converts argument into a valid iterator. - * Used internally on most array/object/collection methods that receives a - * callback/iterator providing a shortcut syntax. - */ - function makeIterator(src, thisObj){ - switch(typeof src) { - case 'object': - // typeof null == "object" - return (src != null)? function(val, key, target){ - return deepMatches(val, src); - } : src; - case 'string': - case 'number': - return prop(src); - case 'function': - if (typeof thisObj === 'undefined') { - return src; - } else { - return function(val, i, arr){ - return src.call(thisObj, val, i, arr); - }; - } - default: - return src; - } - } - - return makeIterator; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/partial.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/partial.js deleted file mode 100644 index ad730746..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/partial.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function () { - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Creates a partially applied function. - */ - function partial(fn, var_args){ - var argsArr = slice(arguments, 1); //curried args - return function(){ - return fn.apply(this, argsArr.concat(slice(arguments))); - }; - } - - return partial; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/prop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/prop.js deleted file mode 100644 index c9df78ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/prop.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Returns a function that gets a property of the passed object - */ - function prop(name){ - return function(obj){ - return obj[name]; - }; - } - - return prop; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/series.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/series.js deleted file mode 100644 index c8856a27..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/series.js +++ /dev/null @@ -1,22 +0,0 @@ -define(function () { - - /** - * Returns a function that will execute a list of functions in sequence - * passing the same arguments to each one. (useful for batch processing - * items during a forEach loop) - */ - function series(){ - var fns = arguments; - return function(){ - var i = 0, - n = fns.length; - while (i < n) { - fns[i].apply(this, arguments); - i += 1; - } - }; - } - - return series; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/throttle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/throttle.js deleted file mode 100644 index 8ce3929a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/throttle.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../time/now'], function (now) { - - /** - */ - function throttle(fn, delay){ - var context, timeout, result, args, - cur, diff, prev = 0; - function delayed(){ - prev = now(); - timeout = null; - result = fn.apply(context, args); - } - function throttled(){ - context = this; - args = arguments; - cur = now(); - diff = delay - (cur - prev); - if (diff <= 0) { - clearTimeout(timeout); - prev = cur; - result = fn.apply(context, args); - } else if (! timeout) { - timeout = setTimeout(delayed, diff); - } - return result; - } - return throttled; - } - - return throttle; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/timeout.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/timeout.js deleted file mode 100644 index 15388bdd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/function/timeout.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function () { - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Delays the call of a function within a given context. - */ - function timeout(fn, millis, context){ - - var args = slice(arguments, 3); - - return setTimeout(function() { - fn.apply(context, args); - }, millis); - } - - return timeout; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/index.js deleted file mode 100644 index 744bb119..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/index.js +++ /dev/null @@ -1,24 +0,0 @@ -/**@license - * mout v0.6.0 | http://moutjs.com | MIT license - */ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'VERSION' : '0.6.0', - 'array' : require('./array'), - 'collection' : require('./collection'), - 'date' : require('./date'), - 'function' : require('./function'), - 'lang' : require('./lang'), - 'math' : require('./math'), - 'number' : require('./number'), - 'object' : require('./object'), - 'queryString' : require('./queryString'), - 'random' : require('./random'), - 'string' : require('./string'), - 'time' : require('./time') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang.js deleted file mode 100644 index de16b597..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang.js +++ /dev/null @@ -1,36 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'clone' : require('./lang/clone'), - 'createObject' : require('./lang/createObject'), - 'ctorApply' : require('./lang/ctorApply'), - 'deepClone' : require('./lang/deepClone'), - 'defaults' : require('./lang/defaults'), - 'inheritPrototype' : require('./lang/inheritPrototype'), - 'is' : require('./lang/is'), - 'isArguments' : require('./lang/isArguments'), - 'isArray' : require('./lang/isArray'), - 'isBoolean' : require('./lang/isBoolean'), - 'isDate' : require('./lang/isDate'), - 'isEmpty' : require('./lang/isEmpty'), - 'isFinite' : require('./lang/isFinite'), - 'isFunction' : require('./lang/isFunction'), - 'isInteger' : require('./lang/isInteger'), - 'isKind' : require('./lang/isKind'), - 'isNaN' : require('./lang/isNaN'), - 'isNull' : require('./lang/isNull'), - 'isNumber' : require('./lang/isNumber'), - 'isObject' : require('./lang/isObject'), - 'isPlainObject' : require('./lang/isPlainObject'), - 'isRegExp' : require('./lang/isRegExp'), - 'isString' : require('./lang/isString'), - 'isUndefined' : require('./lang/isUndefined'), - 'isnt' : require('./lang/isnt'), - 'kindOf' : require('./lang/kindOf'), - 'toArray' : require('./lang/toArray'), - 'toString' : require('./lang/toString') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/clone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/clone.js deleted file mode 100644 index 468489a1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/clone.js +++ /dev/null @@ -1,47 +0,0 @@ -define(['./kindOf', './isPlainObject', '../object/mixIn'], function (kindOf, isPlainObject, mixIn) { - - /** - * Clone native types. - */ - function clone(val){ - switch (kindOf(val)) { - case 'Object': - return cloneObject(val); - case 'Array': - return cloneArray(val); - case 'RegExp': - return cloneRegExp(val); - case 'Date': - return cloneDate(val); - default: - return val; - } - } - - function cloneObject(source) { - if (isPlainObject(source)) { - return mixIn({}, source); - } else { - return source; - } - } - - function cloneRegExp(r) { - var flags = ''; - flags += r.multiline ? 'm' : ''; - flags += r.global ? 'g' : ''; - flags += r.ignorecase ? 'i' : ''; - return new RegExp(r.source, flags); - } - - function cloneDate(date) { - return new Date(+date); - } - - function cloneArray(arr) { - return arr.slice(); - } - - return clone; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/createObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/createObject.js deleted file mode 100644 index f7661500..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/createObject.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../object/mixIn'], function(mixIn){ - - /** - * Create Object using prototypal inheritance and setting custom properties. - * - Mix between Douglas Crockford Prototypal Inheritance <http://javascript.crockford.com/prototypal.html> and the EcmaScript 5 `Object.create()` method. - * @param {object} parent Parent Object. - * @param {object} [props] Object properties. - * @return {object} Created object. - */ - function createObject(parent, props){ - function F(){} - F.prototype = parent; - return mixIn(new F(), props); - - } - return createObject; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/ctorApply.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/ctorApply.js deleted file mode 100644 index a9ac1c54..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/ctorApply.js +++ /dev/null @@ -1,17 +0,0 @@ -define(function () { - - function F(){} - - /** - * Do fn.apply on a constructor. - */ - function ctorApply(ctor, args) { - F.prototype = ctor.prototype; - var instance = new F(); - ctor.apply(instance, args); - return instance; - } - - return ctorApply; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/deepClone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/deepClone.js deleted file mode 100644 index d45c10aa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/deepClone.js +++ /dev/null @@ -1,45 +0,0 @@ -define(['./clone', '../object/forOwn', './kindOf', './isPlainObject'], function (clone, forOwn, kindOf, isPlainObject) { - - /** - * Recursively clone native types. - */ - function deepClone(val, instanceClone) { - switch ( kindOf(val) ) { - case 'Object': - return cloneObject(val, instanceClone); - case 'Array': - return cloneArray(val, instanceClone); - default: - return clone(val); - } - } - - function cloneObject(source, instanceClone) { - if (isPlainObject(source)) { - var out = {}; - forOwn(source, function(val, key) { - this[key] = deepClone(val, instanceClone); - }, out); - return out; - } else if (instanceClone) { - return instanceClone(source); - } else { - return source; - } - } - - function cloneArray(arr, instanceClone) { - var out = [], - i = -1, - n = arr.length, - val; - while (++i < n) { - out[i] = deepClone(arr[i], instanceClone); - } - return out; - } - - return deepClone; - -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/defaults.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/defaults.js deleted file mode 100644 index 5156b1bb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/defaults.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./toArray', '../array/find'], function (toArray, find) { - - /** - * Return first non void argument - */ - function defaults(var_args){ - return find(toArray(arguments), nonVoid); - } - - function nonVoid(val){ - return val != null; - } - - return defaults; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/inheritPrototype.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/inheritPrototype.js deleted file mode 100644 index c1fda3a7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/inheritPrototype.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./createObject'], function(createObject){ - - /** - * Inherit prototype from another Object. - * - inspired by Nicholas Zackas <http://nczonline.net> Solution - * @param {object} child Child object - * @param {object} parent Parent Object - */ - function inheritPrototype(child, parent){ - var p = createObject(parent.prototype); - p.constructor = child; - child.prototype = p; - } - - return inheritPrototype; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/is.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/is.js deleted file mode 100644 index 261a2077..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/is.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Check if both arguments are egal. - */ - function is(x, y){ - // implementation borrowed from harmony:egal spec - if (x === y) { - // 0 === -0, but they are not identical - return x !== 0 || 1 / x === 1 / y; - } - - // NaN !== NaN, but they are identical. - // NaNs are the only non-reflexive value, i.e., if x !== x, - // then x is a NaN. - // isNaN is broken: it converts its argument to number, so - // isNaN("foo") => true - return x !== x && y !== y; - } - - return is; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArguments.js deleted file mode 100644 index f889ee8e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArguments.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./isKind'], function (isKind) { - - /** - */ - var isArgs = isKind(arguments, 'Arguments')? - function(val){ - return isKind(val, 'Arguments'); - } : - function(val){ - // Arguments is an Object on IE7 - return !!(val && Object.prototype.hasOwnProperty.call(val, 'callee')); - }; - - return isArgs; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArray.js deleted file mode 100644 index 886e2aa5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArray.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - var isArray = Array.isArray || function (val) { - return isKind(val, 'Array'); - }; - return isArray; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isBoolean.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isBoolean.js deleted file mode 100644 index 1ca27a69..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isBoolean.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isBoolean(val) { - return isKind(val, 'Boolean'); - } - return isBoolean; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isDate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isDate.js deleted file mode 100644 index 2708d676..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isDate.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isDate(val) { - return isKind(val, 'Date'); - } - return isDate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isEmpty.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isEmpty.js deleted file mode 100644 index 4cc3d2db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isEmpty.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../object/forOwn', './isArray'], function (forOwn, isArray) { - - function isEmpty(val){ - if (val == null) { - // typeof null == 'object' so we check it first - return false; - } else if ( typeof val === 'string' || isArray(val) ) { - return !val.length; - } else if ( typeof val === 'object' || typeof val === 'function' ) { - var result = true; - forOwn(val, function(){ - result = false; - return false; // break loop - }); - return result; - } else { - return false; - } - } - - return isEmpty; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFinite.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFinite.js deleted file mode 100644 index 5a982f4b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFinite.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - var global = this; - - /** - * Check if value is finite - */ - function isFinite(val){ - var is = false; - if (typeof val === 'string' && val !== '') { - is = global.isFinite( parseFloat(val) ); - } else if (isNumber(val)){ - // need to use isNumber because of Number constructor - is = global.isFinite( val ); - } - return is; - } - - return isFinite; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFunction.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFunction.js deleted file mode 100644 index ff5df7f0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFunction.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isFunction(val) { - return isKind(val, 'Function'); - } - return isFunction; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isInteger.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isInteger.js deleted file mode 100644 index 1931f516..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - /** - * Check if value is an integer - */ - function isInteger(val){ - return isNumber(val) && (val % 1 === 0); - } - - return isInteger; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isKind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isKind.js deleted file mode 100644 index 6937a12f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isKind.js +++ /dev/null @@ -1,9 +0,0 @@ -define(['./kindOf'], function (kindOf) { - /** - * Check if value is from a specific "kind". - */ - function isKind(val, kind){ - return kindOf(val) === kind; - } - return isKind; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNaN.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNaN.js deleted file mode 100644 index 9467a3c8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNaN.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - /** - * Check if value is NaN for realz - */ - function isNaN(val){ - // based on the fact that NaN !== NaN - // need to check if it's a number to avoid conflicts with host objects - // also need to coerce ToNumber to avoid edge case `new Number(NaN)` - return !isNumber(val) || val != +val; - } - - return isNaN; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNull.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNull.js deleted file mode 100644 index 506e05ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNull.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function () { - /** - */ - function isNull(val){ - return val === null; - } - return isNull; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNumber.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNumber.js deleted file mode 100644 index 9a832c5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNumber.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isNumber(val) { - return isKind(val, 'Number'); - } - return isNumber; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isObject.js deleted file mode 100644 index 0befb063..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isObject.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isObject(val) { - return isKind(val, 'Object'); - } - return isObject; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isPlainObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isPlainObject.js deleted file mode 100644 index 6c5854fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isPlainObject.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Checks if the value is created by the `Object` constructor. - */ - function isPlainObject(value) { - return (!!value - && typeof value === 'object' - && value.constructor === Object); - } - - return isPlainObject; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isRegExp.js deleted file mode 100644 index d78a03da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isRegExp.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isRegExp(val) { - return isKind(val, 'RegExp'); - } - return isRegExp; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isString.js deleted file mode 100644 index 8a42fe01..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isString.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isString(val) { - return isKind(val, 'String'); - } - return isString; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isUndefined.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isUndefined.js deleted file mode 100644 index c57b28eb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isUndefined.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function () { - var UNDEF; - - /** - */ - function isUndef(val){ - return val === UNDEF; - } - return isUndef; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isnt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isnt.js deleted file mode 100644 index d4336222..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isnt.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./is'], function (is) { - - /** - * Check if both values are not identical/egal - */ - function isnt(x, y){ - return !is(x, y); - } - - return isnt; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/kindOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/kindOf.js deleted file mode 100644 index 97d21d15..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/kindOf.js +++ /dev/null @@ -1,20 +0,0 @@ -define(function () { - - var _rKind = /^\[object (.*)\]$/, - _toString = Object.prototype.toString, - UNDEF; - - /** - * Gets the "kind" of value. (e.g. "String", "Number", etc) - */ - function kindOf(val) { - if (val === null) { - return 'Null'; - } else if (val === UNDEF) { - return 'Undefined'; - } else { - return _rKind.exec( _toString.call(val) )[1]; - } - } - return kindOf; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toArray.js deleted file mode 100644 index 552916f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toArray.js +++ /dev/null @@ -1,31 +0,0 @@ -define(['./kindOf'], function (kindOf) { - - var _win = this; - - /** - * Convert array-like object into array - */ - function toArray(val){ - var ret = [], - kind = kindOf(val), - n; - - if (val != null) { - if ( val.length == null || kind === 'String' || kind === 'Function' || kind === 'RegExp' || val === _win ) { - //string, regexp, function have .length but user probably just want - //to wrap value into an array.. - ret[ret.length] = val; - } else { - //window returns true on isObject in IE7 and may have length - //property. `typeof NodeList` returns `function` on Safari so - //we can't use it (#58) - n = val.length; - while (n--) { - ret[n] = val[n]; - } - } - } - return ret; - } - return toArray; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toString.js deleted file mode 100644 index c28b89af..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toString.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * Typecast a value to a String, using an empty string value for null or - * undefined. - */ - function toString(val){ - return val == null ? '' : val.toString(); - } - - return toString; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math.js deleted file mode 100644 index e2ba8705..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'ceil' : require('./math/ceil'), - 'clamp' : require('./math/clamp'), - 'countSteps' : require('./math/countSteps'), - 'floor' : require('./math/floor'), - 'inRange' : require('./math/inRange'), - 'isNear' : require('./math/isNear'), - 'lerp' : require('./math/lerp'), - 'loop' : require('./math/loop'), - 'map' : require('./math/map'), - 'norm' : require('./math/norm'), - 'round' : require('./math/round') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/ceil.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/ceil.js deleted file mode 100644 index d73b0581..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/ceil.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Round value up with a custom radix. - */ - function ceil(val, step){ - step = Math.abs(step || 1); - return Math.ceil(val / step) * step; - } - - return ceil; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/clamp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/clamp.js deleted file mode 100644 index fb5a1484..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/clamp.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Clamps value inside range. - */ - function clamp(val, min, max){ - return val < min? min : (val > max? max : val); - } - return clamp; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/countSteps.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/countSteps.js deleted file mode 100644 index 0ecb32f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/countSteps.js +++ /dev/null @@ -1,16 +0,0 @@ -define(function(){ - /** - * Count number of full steps. - */ - function countSteps(val, step, overflow){ - val = Math.floor(val / step); - - if (overflow) { - return val % overflow; - } - - return val; - } - - return countSteps; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/floor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/floor.js deleted file mode 100644 index 8a4456b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/floor.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Floor value to full steps. - */ - function floor(val, step){ - step = Math.abs(step || 1); - return Math.floor(val / step) * step; - } - return floor; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/inRange.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/inRange.js deleted file mode 100644 index 0c890536..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/inRange.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Checks if value is inside the range. - */ - function inRange(val, min, max, threshold){ - threshold = threshold || 0; - return (val + threshold >= min && val - threshold <= max); - } - - return inRange; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/isNear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/isNear.js deleted file mode 100644 index b308a0b0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/isNear.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Check if value is close to target. - */ - function isNear(val, target, threshold){ - return (Math.abs(val - target) <= threshold); - } - return isNear; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/lerp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/lerp.js deleted file mode 100644 index 26b99d04..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/lerp.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Linear interpolation. - * IMPORTANT:will return `Infinity` if numbers overflow Number.MAX_VALUE - */ - function lerp(ratio, start, end){ - return start + (end - start) * ratio; - } - - return lerp; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/loop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/loop.js deleted file mode 100644 index c735ecf6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/loop.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Loops value inside range. - */ - function loop(val, min, max){ - return val < min? max : (val > max? min : val); - } - - return loop; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/map.js deleted file mode 100644 index bf7dc5d5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/map.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['./lerp', './norm'], function(lerp, norm){ - /** - * Maps a number from one scale to another. - * @example map(3, 0, 4, -1, 1) -> 0.5 - */ - function map(val, min1, max1, min2, max2){ - return lerp( norm(val, min1, max1), min2, max2 ); - } - return map; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/norm.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/norm.js deleted file mode 100644 index fccae20e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/norm.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Gets normalized ratio of value inside range. - */ - function norm(val, min, max){ - return (val - min) / (max - min); - } - return norm; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/round.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/round.js deleted file mode 100644 index b43e4ac2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/math/round.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - /** - * Round number to a specific radix - */ - function round(value, radix){ - radix = radix || 1; // default round 1 - return Math.round(value / radix) * radix; - } - - return round; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number.js deleted file mode 100644 index cb52fc75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'MAX_INT' : require('./number/MAX_INT'), - 'MAX_UINT' : require('./number/MAX_UINT'), - 'MIN_INT' : require('./number/MIN_INT'), - 'abbreviate' : require('./number/abbreviate'), - 'currencyFormat' : require('./number/currencyFormat'), - 'enforcePrecision' : require('./number/enforcePrecision'), - 'pad' : require('./number/pad'), - 'rol' : require('./number/rol'), - 'ror' : require('./number/ror'), - 'sign' : require('./number/sign'), - 'toInt' : require('./number/toInt'), - 'toUInt' : require('./number/toUInt'), - 'toUInt31' : require('./number/toUInt31') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_INT.js deleted file mode 100644 index 23a6e1a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit signed integer value. (2^31 - 1) - */ -define(function(){ - return 2147483647; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_UINT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_UINT.js deleted file mode 100644 index a035096c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_UINT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit unsigned integet value (2^32 - 1) - */ -define(function(){ - return 4294967295; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MIN_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MIN_INT.js deleted file mode 100644 index 9b3e9781..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MIN_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Minimum 32-bit signed integer value (-2^31). - */ -define(function(){ - return -2147483648; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/abbreviate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/abbreviate.js deleted file mode 100644 index 7e7405ad..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/abbreviate.js +++ /dev/null @@ -1,35 +0,0 @@ -define(['./enforcePrecision'], function (enforcePrecision) { - - var _defaultDict = { - thousand : 'K', - million : 'M', - billion : 'B' - }; - - /** - * Abbreviate number if bigger than 1000. (eg: 2.5K, 17.5M, 3.4B, ...) - */ - function abbreviateNumber(val, nDecimals, dict){ - nDecimals = nDecimals != null? nDecimals : 1; - dict = dict || _defaultDict; - val = enforcePrecision(val, nDecimals); - - var str, mod; - - if (val < 1000000) { - mod = enforcePrecision(val / 1000, nDecimals); - // might overflow to next scale during rounding - str = mod < 1000? mod + dict.thousand : 1 + dict.million; - } else if (val < 1000000000) { - mod = enforcePrecision(val / 1000000, nDecimals); - str = mod < 1000? mod + dict.million : 1 + dict.billion; - } else { - str = enforcePrecision(val / 1000000000, nDecimals) + dict.billion; - } - - return str; - } - - return abbreviateNumber; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/currencyFormat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/currencyFormat.js deleted file mode 100644 index dcde8fc7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/currencyFormat.js +++ /dev/null @@ -1,26 +0,0 @@ -define(function () { - - /** - * Converts number into currency format - */ - function currencyFormat(val, nDecimalDigits, decimalSeparator, thousandsSeparator) { - nDecimalDigits = nDecimalDigits == null? 2 : nDecimalDigits; - decimalSeparator = decimalSeparator == null? '.' : decimalSeparator; - thousandsSeparator = thousandsSeparator == null? ',' : thousandsSeparator; - - //can't use enforce precision since it returns a number and we are - //doing a RegExp over the string - var fixed = val.toFixed(nDecimalDigits), - //separate begin [$1], middle [$2] and decimal digits [$4] - parts = new RegExp('^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{'+ nDecimalDigits +'}))?$').exec( fixed ); - - if(parts){ //val >= 1000 || val <= -1000 - return parts[1] + parts[2].replace(/\d{3}/g, thousandsSeparator + '$&') + (parts[4] ? decimalSeparator + parts[4] : ''); - }else{ - return fixed.replace('.', decimalSeparator); - } - } - - return currencyFormat; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/enforcePrecision.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/enforcePrecision.js deleted file mode 100644 index 84554d0e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/enforcePrecision.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function(){ - /** - * Enforce a specific amount of decimal digits and also fix floating - * point rounding issues. - * @example `enforcePrecision(0.615, 2) -> 0.62`, `(0.615).toFixed(2) -> - * 0.61` - */ - function enforcePrecision(val, nDecimalDigits){ - var pow = Math.pow(10, nDecimalDigits); - return +(Math.round(val * pow) / pow).toFixed(nDecimalDigits); - } - return enforcePrecision; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/pad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/pad.js deleted file mode 100644 index 3b2c062a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/pad.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../string/lpad'], function(lpad){ - - /** - * Add padding zeros if n.length < minLength. - */ - function pad(n, minLength, char){ - return lpad(''+ n, minLength, char || '0'); - } - - return pad; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/rol.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/rol.js deleted file mode 100644 index a148f444..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/rol.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Bitwise circular shift left - * http://en.wikipedia.org/wiki/Circular_shift - */ - function rol(val, shift){ - return (val << shift) | (val >> (32 - shift)); - } - return rol; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/ror.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/ror.js deleted file mode 100644 index b5c66f92..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/ror.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Bitwise circular shift right - * http://en.wikipedia.org/wiki/Circular_shift - */ - function ror(val, shift){ - return (val >> shift) | (val << (32 - shift)); - } - return ror; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/sign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/sign.js deleted file mode 100644 index dfc131d5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/sign.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function () { - - /** - * Get sign of the value. - */ - function sign(val) { - var num = Number(val); - if (num === 0) return num; // +0 and +0 === 0 - if (isNaN(num)) return num; // NaN - return num < 0? -1 : 1; - } - - return sign; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toInt.js deleted file mode 100644 index 1e9b4c0b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toInt.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function(){ - - /** - * "Convert" value into an 32-bit integer. - * Works like `Math.floor` if val > 0 and `Math.ceil` if val < 0. - * IMPORTANT: val will wrap at 2^31 and -2^31. - * Perf tests: http://jsperf.com/vs-vs-parseint-bitwise-operators/7 - */ - function toInt(val){ - return ~~val; - } - - return toInt; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt.js deleted file mode 100644 index d5b25b2c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * "Convert" value into a 32-bit unsigned integer. - * IMPORTANT: Value will wrap at 2^32. - */ - function toUInt(val){ - return val >>> 0; - } - - return toUInt; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt31.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt31.js deleted file mode 100644 index 9785a054..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt31.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./MAX_INT'], function(MAX_INT){ - - /** - * "Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - * IMPORTANT: value wil wrap at 2^31, if negative will return 0. - */ - function toUInt31(val){ - return (val <= 0)? 0 : (val > MAX_INT? ~~(val % (MAX_INT + 1)) : ~~val); - } - - return toUInt31; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object.js deleted file mode 100644 index 343e7826..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object.js +++ /dev/null @@ -1,42 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'bindAll' : require('./object/bindAll'), - 'contains' : require('./object/contains'), - 'deepEquals' : require('./object/deepEquals'), - 'deepFillIn' : require('./object/deepFillIn'), - 'deepMatches' : require('./object/deepMatches'), - 'deepMixIn' : require('./object/deepMixIn'), - 'equals' : require('./object/equals'), - 'every' : require('./object/every'), - 'fillIn' : require('./object/fillIn'), - 'filter' : require('./object/filter'), - 'find' : require('./object/find'), - 'forIn' : require('./object/forIn'), - 'forOwn' : require('./object/forOwn'), - 'functions' : require('./object/functions'), - 'get' : require('./object/get'), - 'has' : require('./object/has'), - 'hasOwn' : require('./object/hasOwn'), - 'keys' : require('./object/keys'), - 'map' : require('./object/map'), - 'matches' : require('./object/matches'), - 'max' : require('./object/max'), - 'merge' : require('./object/merge'), - 'min' : require('./object/min'), - 'mixIn' : require('./object/mixIn'), - 'namespace' : require('./object/namespace'), - 'pick' : require('./object/pick'), - 'pluck' : require('./object/pluck'), - 'reduce' : require('./object/reduce'), - 'reject' : require('./object/reject'), - 'set' : require('./object/set'), - 'size' : require('./object/size'), - 'some' : require('./object/some'), - 'unset' : require('./object/unset'), - 'values' : require('./object/values') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/bindAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/bindAll.js deleted file mode 100644 index b131ed15..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/bindAll.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./functions', '../function/bind', '../array/forEach'], function (functions, bind, forEach) { - - /** - * Binds methods of the object to be run in it's own context. - */ - function bindAll(obj, rest_methodNames){ - var keys = arguments.length > 1? - Array.prototype.slice.call(arguments, 1) : functions(obj); - forEach(keys, function(key){ - obj[key] = bind(obj[key], obj); - }); - } - - return bindAll; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/contains.js deleted file mode 100644 index 297e8986..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/contains.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./some'], function (some) { - - /** - * Check if object contains value - */ - function contains(obj, needle) { - return some(obj, function(val) { - return (val === needle); - }); - } - return contains; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepEquals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepEquals.js deleted file mode 100644 index 8b7d5d15..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepEquals.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['../lang/isObject', './equals'], function (isObject, equals) { - - function defaultCompare(a, b) { - return a === b; - } - - /** - * Recursively checks for same properties and values. - */ - function deepEquals(a, b, callback){ - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - function compare(a, b){ - return deepEquals(a, b, callback); - } - - return equals(a, b, compare); - } - - return deepEquals; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepFillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepFillIn.js deleted file mode 100644 index 84ba154a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepFillIn.js +++ /dev/null @@ -1,31 +0,0 @@ -define(['./forOwn', '../lang/isPlainObject'], function (forOwn, isPlainObject) { - - /** - * Deeply copy missing properties in the target from the defaults. - */ - function deepFillIn(target, defaults){ - var i = 0, - n = arguments.length, - obj; - - while(++i < n) { - obj = arguments[i]; - if (obj) { - forOwn(obj, function(newValue, key) { - var curValue = target[key]; - if (curValue == null) { - target[key] = newValue; - } else if (isPlainObject(curValue) - && isPlainObject(newValue)) { - deepFillIn(curValue, newValue); - } - }); - } - } - - return target; - } - - return deepFillIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMatches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMatches.js deleted file mode 100644 index 2eae6297..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMatches.js +++ /dev/null @@ -1,54 +0,0 @@ -define(['./forOwn', '../lang/isArray'], function(forOwn, isArray) { - - function containsMatch(array, pattern) { - var i = -1, length = array.length; - while (++i < length) { - if (deepMatches(array[i], pattern)) { - return true; - } - } - - return false; - } - - function matchArray(target, pattern) { - var i = -1, patternLength = pattern.length; - while (++i < patternLength) { - if (!containsMatch(target, pattern[i])) { - return false; - } - } - - return true; - } - - function matchObject(target, pattern) { - var result = true; - forOwn(pattern, function(val, key) { - if (!deepMatches(target[key], val)) { - // Return false to break out of forOwn early - return (result = false); - } - }); - - return result; - } - - /** - * Recursively check if the objects match. - */ - function deepMatches(target, pattern){ - if (target && typeof target === 'object') { - if (isArray(target) && isArray(pattern)) { - return matchArray(target, pattern); - } else { - return matchObject(target, pattern); - } - } else { - return target === pattern; - } - } - - return deepMatches; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMixIn.js deleted file mode 100644 index 1b4178ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMixIn.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['./forOwn', '../lang/isPlainObject'], function (forOwn, isPlainObject) { - - /** - * Mixes objects into the target object, recursively mixing existing child - * objects. - */ - function deepMixIn(target, objects) { - var i = 0, - n = arguments.length, - obj; - - while(++i < n){ - obj = arguments[i]; - if (obj) { - forOwn(obj, copyProp, target); - } - } - - return target; - } - - function copyProp(val, key) { - var existing = this[key]; - if (isPlainObject(val) && isPlainObject(existing)) { - deepMixIn(existing, val); - } else { - this[key] = val; - } - } - - return deepMixIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/equals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/equals.js deleted file mode 100644 index 596cb952..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/equals.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['./hasOwn', './every', '../lang/isObject'], function(hasOwn, every, isObject) { - - function defaultCompare(a, b) { - return a === b; - } - - // Makes a function to compare the object values from the specified compare - // operation callback. - function makeCompare(callback) { - return function(value, key) { - return hasOwn(this, key) && callback(value, this[key]); - }; - } - - function checkProperties(value, key) { - return hasOwn(this, key); - } - - /** - * Checks if two objects have the same keys and values. - */ - function equals(a, b, callback) { - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - return (every(a, makeCompare(callback), b) && - every(b, checkProperties, a)); - } - - return equals; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/every.js deleted file mode 100644 index 52983a5e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/every.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Object every - */ - function every(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - forOwn(obj, function(val, key) { - // we consider any falsy values as "false" on purpose so shorthand - // syntax can be used to check property existence - if (!callback(val, key, obj)) { - result = false; - return false; // break - } - }); - return result; - } - - return every; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/fillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/fillIn.js deleted file mode 100644 index 0845d3c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/fillIn.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['../array/forEach', './forOwn'], function (forEach, forOwn) { - - /** - * Copy missing properties in the obj from the defaults. - */ - function fillIn(obj, var_defaults){ - forEach(Array.prototype.slice.call(arguments, 1), function(base){ - forOwn(base, function(val, key){ - if (obj[key] == null) { - obj[key] = val; - } - }); - }); - return obj; - } - - return fillIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/filter.js deleted file mode 100644 index f213b915..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/filter.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Creates a new object with all the properties where the callback returns - * true. - */ - function filterValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - output[key] = value; - } - }); - - return output; - } - return filterValues; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/find.js deleted file mode 100644 index 47e6b09d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/find.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./some', '../function/makeIterator_'], function(some, makeIterator) { - - /** - * Returns first item that matches criteria - */ - function find(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result; - some(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - result = value; - return true; //break - } - }); - return result; - } - - return find; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forIn.js deleted file mode 100644 index 2058e9cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forIn.js +++ /dev/null @@ -1,62 +0,0 @@ -define(function () { - - var _hasDontEnumBug, - _dontEnums; - - function checkDontEnum(){ - _dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - - _hasDontEnumBug = true; - - for (var key in {'toString': null}) { - _hasDontEnumBug = false; - } - } - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forIn(obj, fn, thisObj){ - var key, i = 0; - // no need to check if argument is a real object that way we can use - // it for arrays, functions, date, etc. - - //post-pone check till needed - if (_hasDontEnumBug == null) checkDontEnum(); - - for (key in obj) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - - if (_hasDontEnumBug) { - while (key = _dontEnums[i++]) { - // since we aren't using hasOwn check we need to make sure the - // property was overwritten - if (obj[key] !== Object.prototype[key]) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - } - } - } - - function exec(fn, obj, key, thisObj){ - return fn.call(thisObj, obj[key], key, obj); - } - - return forIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forOwn.js deleted file mode 100644 index b40cbaf1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forOwn.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./hasOwn', './forIn'], function (hasOwn, forIn) { - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forOwn(obj, fn, thisObj){ - forIn(obj, function(val, key){ - if (hasOwn(obj, key)) { - return fn.call(thisObj, obj[key], key, obj); - } - }); - } - - return forOwn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/functions.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/functions.js deleted file mode 100644 index 60fee3dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/functions.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./forIn'], function (forIn) { - - /** - * return a list of all enumerable properties that have function values - */ - function functions(obj){ - var keys = []; - forIn(obj, function(val, key){ - if (typeof val === 'function'){ - keys.push(key); - } - }); - return keys.sort(); - } - - return functions; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/get.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/get.js deleted file mode 100644 index ca80b059..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/get.js +++ /dev/null @@ -1,20 +0,0 @@ -define(function () { - - /** - * get "nested" object property - */ - function get(obj, prop){ - var parts = prop.split('.'), - last = parts.pop(); - - while (prop = parts.shift()) { - obj = obj[prop]; - if (typeof obj !== 'object') return; - } - - return obj[last]; - } - - return get; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/has.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/has.js deleted file mode 100644 index cc29817f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/has.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./get'], function (get) { - - var UNDEF; - - /** - * Check if object has nested property. - */ - function has(obj, prop){ - return get(obj, prop) !== UNDEF; - } - - return has; - -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/hasOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/hasOwn.js deleted file mode 100644 index 5c53bcf2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/hasOwn.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - - /** - * Safer Object.hasOwnProperty - */ - function hasOwn(obj, prop){ - return Object.prototype.hasOwnProperty.call(obj, prop); - } - - return hasOwn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/keys.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/keys.js deleted file mode 100644 index ed7c4f91..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/keys.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object keys - */ - var keys = Object.keys || function (obj) { - var keys = []; - forOwn(obj, function(val, key){ - keys.push(key); - }); - return keys; - }; - - return keys; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/map.js deleted file mode 100644 index 2958f6b0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/map.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Creates a new object where all the values are the result of calling - * `callback`. - */ - function mapValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(val, key, obj) { - output[key] = callback(val, key, obj); - }); - - return output; - } - return mapValues; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/matches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/matches.js deleted file mode 100644 index 73ff427c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/matches.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * checks if a object contains all given properties/values - */ - function matches(target, props){ - // can't use "object/every" because of circular dependency - var result = true; - forOwn(props, function(val, key){ - if (target[key] !== val) { - // break loop at first difference - return (result = false); - } - }); - return result; - } - - return matches; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/max.js deleted file mode 100644 index ef311dcb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/max.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../array/max', './values'], function(arrMax, values) { - - /** - * Returns maximum value inside object. - */ - function max(obj, compareFn) { - return arrMax(values(obj), compareFn); - } - - return max; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/merge.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/merge.js deleted file mode 100644 index d7cfedec..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/merge.js +++ /dev/null @@ -1,38 +0,0 @@ -define(['./hasOwn', '../lang/deepClone', '../lang/isObject'], function (hasOwn, deepClone, isObject) { - - /** - * Deep merge objects. - */ - function merge() { - var i = 1, - key, val, obj, target; - - // make sure we don't modify source element and it's properties - // objects are passed by reference - target = deepClone( arguments[0] ); - - while (obj = arguments[i++]) { - for (key in obj) { - if ( ! hasOwn(obj, key) ) { - continue; - } - - val = obj[key]; - - if ( isObject(val) && isObject(target[key]) ){ - // inception, deep merge objects - target[key] = merge(target[key], val); - } else { - // make sure arrays, regexp, date, objects are cloned - target[key] = deepClone(val); - } - - } - } - - return target; - } - - return merge; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/min.js deleted file mode 100644 index 9fb4c1a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/min.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../array/min', './values'], function(arrMin, values) { - - /** - * Returns minimum value inside object. - */ - function min(obj, iterator) { - return arrMin(values(obj), iterator); - } - - return min; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/mixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/mixIn.js deleted file mode 100644 index 6210b7e7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/mixIn.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['./forOwn'], function(forOwn){ - - /** - * Combine properties from all the objects into first one. - * - This method affects target object in place, if you want to create a new Object pass an empty object as first param. - * @param {object} target Target Object - * @param {...object} objects Objects to be combined (0...n objects). - * @return {object} Target Object. - */ - function mixIn(target, objects){ - var i = 0, - n = arguments.length, - obj; - while(++i < n){ - obj = arguments[i]; - if (obj != null) { - forOwn(obj, copyProp, target); - } - } - return target; - } - - function copyProp(val, key){ - this[key] = val; - } - - return mixIn; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/namespace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/namespace.js deleted file mode 100644 index 7ed65db8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/namespace.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['../array/forEach'], function (forEach) { - - /** - * Create nested object if non-existent - */ - function namespace(obj, path){ - if (!path) return obj; - forEach(path.split('.'), function(key){ - if (!obj[key]) { - obj[key] = {}; - } - obj = obj[key]; - }); - return obj; - } - - return namespace; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pick.js deleted file mode 100644 index 76e22bfc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pick.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function(){ - - /** - * Return a copy of the object, filtered to only have values for the whitelisted keys. - */ - function pick(obj, var_keys){ - var keys = typeof arguments[1] !== 'string'? arguments[1] : Array.prototype.slice.call(arguments, 1), - out = {}, - i = 0, key; - while (key = keys[i++]) { - out[key] = obj[key]; - } - return out; - } - - return pick; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pluck.js deleted file mode 100644 index d47744bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./map', '../function/prop'], function (map, prop) { - - /** - * Extract a list of property values. - */ - function pluck(obj, propName){ - return map(obj, prop(propName)); - } - - return pluck; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reduce.js deleted file mode 100644 index d3a57788..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reduce.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['./forOwn', './size'], function(forOwn, size) { - - /** - * Object reduce - */ - function reduce(obj, callback, memo, thisObj) { - var initial = arguments.length > 2; - - if (!size(obj) && !initial) { - throw new Error('reduce of empty object with no initial value'); - } - - forOwn(obj, function(value, key, list) { - if (!initial) { - memo = value; - initial = true; - } - else { - memo = callback.call(thisObj, memo, value, key, list); - } - }); - - return memo; - } - - return reduce; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reject.js deleted file mode 100644 index 84296428..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reject.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./filter', '../function/makeIterator_'], function (filter, makeIterator) { - - /** - * Object reject - */ - function reject(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - return filter(obj, function(value, index, obj) { - return !callback(value, index, obj); - }, thisObj); - } - - return reject; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/set.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/set.js deleted file mode 100644 index b8fa25a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/set.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./namespace'], function (namespace) { - - /** - * set "nested" object property - */ - function set(obj, prop, val){ - var parts = (/^(.+)\.(.+)$/).exec(prop); - if (parts){ - namespace(obj, parts[1])[parts[2]] = val; - } else { - obj[prop] = val; - } - } - - return set; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/size.js deleted file mode 100644 index c6e377cf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/size.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object size - */ - function size(obj) { - var count = 0; - forOwn(obj, function(){ - count++; - }); - return count; - } - - return size; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/some.js deleted file mode 100644 index 1bd6fdae..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/some.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Object some - */ - function some(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - forOwn(obj, function(val, key) { - if (callback(val, key, obj)) { - result = true; - return false; // break - } - }); - return result; - } - - return some; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/unset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/unset.js deleted file mode 100644 index 787fc19a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/unset.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./has'], function (has) { - - /** - * Unset object property. - */ - function unset(obj, prop){ - if (has(obj, prop)) { - var parts = prop.split('.'), - last = parts.pop(); - while (prop = parts.shift()) { - obj = obj[prop]; - } - return (delete obj[last]); - - } else { - // if property doesn't exist treat as deleted - return true; - } - } - - return unset; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/values.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/values.js deleted file mode 100644 index b311fd09..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/object/values.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object values - */ - function values(obj) { - var vals = []; - forOwn(obj, function(val, key){ - vals.push(val); - }); - return vals; - } - - return values; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString.js deleted file mode 100644 index 44346127..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'contains' : require('./queryString/contains'), - 'decode' : require('./queryString/decode'), - 'encode' : require('./queryString/encode'), - 'getParam' : require('./queryString/getParam'), - 'getQuery' : require('./queryString/getQuery'), - 'parse' : require('./queryString/parse'), - 'setParam' : require('./queryString/setParam') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/contains.js deleted file mode 100644 index a6d11cce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/contains.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./getQuery'], function (getQuery) { - - /** - * Checks if query string contains parameter. - */ - function contains(url, paramName) { - var regex = new RegExp('(\\?|&)'+ paramName +'=', 'g'); //matches `?param=` or `¶m=` - return regex.test(getQuery(url)); - } - - return contains; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/decode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/decode.js deleted file mode 100644 index 02bc1609..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/decode.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../string/typecast', '../lang/isString'], function (typecast, isString) { - - /** - * Decode query string into an object of keys => vals. - */ - function decode(queryStr, shouldTypecast) { - var queryArr = (queryStr || '').replace('?', '').split('&'), - n = queryArr.length, - obj = {}, - item, val; - while (n--) { - item = queryArr[n].split('='); - val = shouldTypecast === false? item[1] : typecast(item[1]); - obj[item[0]] = isString(val)? decodeURIComponent(val) : val; - } - return obj; - } - - return decode; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/encode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/encode.js deleted file mode 100644 index bd72a5b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/encode.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../object/forOwn'], function (forOwn) { - - /** - * Encode object into a query string. - */ - function encode(obj){ - var query = []; - forOwn(obj, function(val, key){ - query.push( key +'='+ encodeURIComponent(val) ); - }); - return (query.length)? '?'+ query.join('&') : ''; - } - - return encode; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getParam.js deleted file mode 100644 index d9813724..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getParam.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../string/typecast', './getQuery'], function (typecast, getQuery) { - - /** - * Get query parameter value. - */ - function getParam(url, param, shouldTypecast){ - var regexp = new RegExp('(\\?|&)'+ param + '=([^&]*)'), //matches `?param=value` or `¶m=value`, value = $2 - result = regexp.exec( getQuery(url) ), - val = (result && result[2])? result[2] : null; - return shouldTypecast === false? val : typecast(val); - } - - return getParam; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getQuery.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getQuery.js deleted file mode 100644 index aa3d99f3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getQuery.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * Gets full query as string with all special chars decoded. - */ - function getQuery(url) { - url = url.replace(/#.*/, ''); //removes hash (to avoid getting hash query) - var queryString = /\?[a-zA-Z0-9\=\&\%\$\-\_\.\+\!\*\'\(\)\,]+/.exec(url); //valid chars according to: http://www.ietf.org/rfc/rfc1738.txt - return (queryString)? decodeURIComponent(queryString[0]) : ''; - } - - return getQuery; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/parse.js deleted file mode 100644 index ac153e3f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/parse.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./decode', './getQuery'], function (decode, getQuery) { - - /** - * Get query string, parses and decodes it. - */ - function parse(url, shouldTypecast) { - return decode(getQuery(url), shouldTypecast); - } - - return parse; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/setParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/setParam.js deleted file mode 100644 index 97081aa7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/setParam.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Set query string parameter value - */ - function setParam(url, paramName, value){ - url = url || ''; - - var re = new RegExp('(\\?|&)'+ paramName +'=[^&]*' ); - var param = paramName +'='+ encodeURIComponent( value ); - - if ( re.test(url) ) { - return url.replace(re, '$1'+ param); - } else { - if (url.indexOf('?') === -1) { - url += '?'; - } - if (url.indexOf('=') !== -1) { - url += '&'; - } - return url + param; - } - - } - - return setParam; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random.js deleted file mode 100644 index b2641ee3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random.js +++ /dev/null @@ -1,16 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'choice' : require('./random/choice'), - 'guid' : require('./random/guid'), - 'rand' : require('./random/rand'), - 'randBit' : require('./random/randBit'), - 'randHex' : require('./random/randHex'), - 'randInt' : require('./random/randInt'), - 'randSign' : require('./random/randSign'), - 'random' : require('./random/random') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/choice.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/choice.js deleted file mode 100644 index 0d0c38df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/choice.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./randInt', '../lang/isArray'], function (randInt, isArray) { - - /** - * Returns a random element from the supplied arguments - * or from the array (if single argument is an array). - */ - function choice(items) { - var target = (arguments.length === 1 && isArray(items))? items : arguments; - return target[ randInt(0, target.length - 1) ]; - } - - return choice; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/guid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/guid.js deleted file mode 100644 index 82f3a2db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/guid.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./randHex', './choice'], function (randHex, choice) { - - /** - * Returns pseudo-random guid (UUID v4) - * IMPORTANT: it's not totally "safe" since randHex/choice uses Math.random - * by default and sequences can be predicted in some cases. See the - * "random/random" documentation for more info about it and how to replace - * the default PRNG. - */ - function guid() { - return ( - randHex(8)+'-'+ - randHex(4)+'-'+ - // v4 UUID always contain "4" at this position to specify it was - // randomly generated - '4' + randHex(3) +'-'+ - // v4 UUID always contain chars [a,b,8,9] at this position - choice(8, 9, 'a', 'b') + randHex(3)+'-'+ - randHex(12) - ); - } - return guid; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/rand.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/rand.js deleted file mode 100644 index b8c231dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/rand.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./random', '../number/MIN_INT', '../number/MAX_INT'], function(random, MIN_INT, MAX_INT){ - - /** - * Returns random number inside range - */ - function rand(min, max){ - min = min == null? MIN_INT : min; - max = max == null? MAX_INT : max; - return min + (max - min) * random(); - } - - return rand; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randBit.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randBit.js deleted file mode 100644 index b3422d2d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randBit.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['./random'], function (random) { - - /** - * Returns random bit (0 or 1) - */ - function randomBit() { - return random() > 0.5? 1 : 0; - } - - return randomBit; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randHex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randHex.js deleted file mode 100644 index 6e9bf1c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randHex.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./choice'], function (choice) { - - var _chars = '0123456789abcdef'.split(''); - - /** - * Returns a random hexadecimal string - */ - function randHex(size){ - size = size && size > 0? size : 6; - var str = ''; - while (size--) { - str += choice(_chars); - } - return str; - } - - return randHex; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randInt.js deleted file mode 100644 index 1750e9de..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randInt.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../number/MIN_INT', '../number/MAX_INT', './rand'], function(MIN_INT, MAX_INT, rand){ - - /** - * Gets random integer inside range or snap to min/max values. - */ - function randInt(min, max){ - min = min == null? MIN_INT : ~~min; - max = max == null? MAX_INT : ~~max; - // can't be max + 0.5 otherwise it will round up if `rand` - // returns `max` causing it to overflow range. - // -0.5 and + 0.49 are required to avoid bias caused by rounding - return Math.round( rand(min - 0.5, max + 0.499999999999) ); - } - - return randInt; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randSign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randSign.js deleted file mode 100644 index 4141cdf6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randSign.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['./random'], function (random) { - - /** - * Returns random sign (-1 or 1) - */ - function randomSign() { - return random() > 0.5? 1 : -1; - } - - return randomSign; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/random.js deleted file mode 100644 index 4270822e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/random/random.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function () { - - /** - * Just a wrapper to Math.random. No methods inside mout/random should call - * Math.random() directly so we can inject the pseudo-random number - * generator if needed (ie. in case we need a seeded random or a better - * algorithm than the native one) - */ - function random(){ - return random.get(); - } - - // we expose the method so it can be swapped if needed - random.get = Math.random; - - return random; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string.js deleted file mode 100644 index 3f5fd804..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string.js +++ /dev/null @@ -1,45 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'WHITE_SPACES' : require('./string/WHITE_SPACES'), - 'camelCase' : require('./string/camelCase'), - 'contains' : require('./string/contains'), - 'crop' : require('./string/crop'), - 'endsWith' : require('./string/endsWith'), - 'escapeHtml' : require('./string/escapeHtml'), - 'escapeRegExp' : require('./string/escapeRegExp'), - 'escapeUnicode' : require('./string/escapeUnicode'), - 'hyphenate' : require('./string/hyphenate'), - 'interpolate' : require('./string/interpolate'), - 'lowerCase' : require('./string/lowerCase'), - 'lpad' : require('./string/lpad'), - 'ltrim' : require('./string/ltrim'), - 'makePath' : require('./string/makePath'), - 'normalizeLineBreaks' : require('./string/normalizeLineBreaks'), - 'pascalCase' : require('./string/pascalCase'), - 'properCase' : require('./string/properCase'), - 'removeNonASCII' : require('./string/removeNonASCII'), - 'removeNonWord' : require('./string/removeNonWord'), - 'repeat' : require('./string/repeat'), - 'replace' : require('./string/replace'), - 'replaceAccents' : require('./string/replaceAccents'), - 'rpad' : require('./string/rpad'), - 'rtrim' : require('./string/rtrim'), - 'sentenceCase' : require('./string/sentenceCase'), - 'slugify' : require('./string/slugify'), - 'startsWith' : require('./string/startsWith'), - 'stripHtmlTags' : require('./string/stripHtmlTags'), - 'trim' : require('./string/trim'), - 'truncate' : require('./string/truncate'), - 'typecast' : require('./string/typecast'), - 'unCamelCase' : require('./string/unCamelCase'), - 'underscore' : require('./string/underscore'), - 'unescapeHtml' : require('./string/unescapeHtml'), - 'unescapeUnicode' : require('./string/unescapeUnicode'), - 'unhyphenate' : require('./string/unhyphenate'), - 'upperCase' : require('./string/upperCase') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/WHITE_SPACES.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/WHITE_SPACES.js deleted file mode 100644 index e830d86d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/WHITE_SPACES.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function() { - /** - * Contains all Unicode white-spaces. Taken from - * http://en.wikipedia.org/wiki/Whitespace_character. - */ - return [ - ' ', '\n', '\r', '\t', '\f', '\v', '\u00A0', '\u1680', '\u180E', - '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', - '\u2007', '\u2008', '\u2009', '\u200A', '\u2028', '\u2029', '\u202F', - '\u205F', '\u3000' - ]; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/camelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/camelCase.js deleted file mode 100644 index 02e6c04d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/camelCase.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString', './replaceAccents', './removeNonWord', './upperCase', './lowerCase'], function(toString, replaceAccents, removeNonWord, upperCase, lowerCase){ - /** - * Convert string to camelCase text. - */ - function camelCase(str){ - str = toString(str); - str = replaceAccents(str); - str = removeNonWord(str) - .replace(/[\-_]/g, ' ') //convert all hyphens and underscores to spaces - .replace(/\s[a-z]/g, upperCase) //convert first char of each word to UPPERCASE - .replace(/\s+/g, '') //remove spaces - .replace(/^[A-Z]/g, lowerCase); //convert first char to lowercase - return str; - } - return camelCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/contains.js deleted file mode 100644 index 825b5a5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/contains.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Searches for a given substring - */ - function contains(str, substring, fromIndex){ - str = toString(str); - substring = toString(substring); - return str.indexOf(substring, fromIndex) !== -1; - } - - return contains; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/crop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/crop.js deleted file mode 100644 index 3c073f05..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/crop.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './truncate'], function (toString, truncate) { - /** - * Truncate string at full words. - */ - function crop(str, maxChars, append) { - str = toString(str); - return truncate(str, maxChars, append, true); - } - - return crop; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/endsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/endsWith.js deleted file mode 100644 index 31a73f20..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/endsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function(toString) { - /** - * Checks if string ends with specified suffix. - */ - function endsWith(str, suffix) { - str = toString(str); - suffix = toString(suffix); - - return str.indexOf(suffix, str.length - suffix.length) !== -1; - } - - return endsWith; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeHtml.js deleted file mode 100644 index de34b61b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Escapes a string for insertion into HTML. - */ - function escapeHtml(str){ - str = toString(str) - .replace(/&/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/'/g, ''') - .replace(/"/g, '"'); - return str; - } - - return escapeHtml; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeRegExp.js deleted file mode 100644 index 32facac0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeRegExp.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../lang/toString'], function(toString) { - - var ESCAPE_CHARS = /[\\.+*?\^$\[\](){}\/'#]/g; - - /** - * Escape RegExp string chars. - */ - function escapeRegExp(str) { - str = toString(str); - return str.replace(ESCAPE_CHARS,'\\$&'); - } - - return escapeRegExp; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeUnicode.js deleted file mode 100644 index bd5e8c4c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeUnicode.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Escape string into unicode sequences - */ - function escapeUnicode(str, shouldEscapePrintable){ - str = toString(str); - return str.replace(/[\s\S]/g, function(ch){ - // skip printable ASCII chars if we should not escape them - if (!shouldEscapePrintable && (/[\x20-\x7E]/).test(ch)) { - return ch; - } - // we use "000" and slice(-4) for brevity, need to pad zeros, - // unicode escape always have 4 chars after "\u" - return '\\u'+ ('000'+ ch.charCodeAt(0).toString(16)).slice(-4); - }); - } - - return escapeUnicode; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/hyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/hyphenate.js deleted file mode 100644 index 679c405c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/hyphenate.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toString', './slugify', './unCamelCase'], function(toString, slugify, unCamelCase){ - /** - * Replaces spaces with hyphens, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function hyphenate(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "-"); - } - - return hyphenate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/interpolate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/interpolate.js deleted file mode 100644 index ecb8ba80..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/interpolate.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function(toString) { - - var stache = /\{\{(\w+)\}\}/g; //mustache-like - - /** - * String interpolation - */ - function interpolate(template, replacements, syntax){ - template = toString(template); - var replaceFn = function(match, prop){ - return (prop in replacements)? toString(replacements[prop]) : ''; - }; - return template.replace(syntax || stache, replaceFn); - } - - return interpolate; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lowerCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lowerCase.js deleted file mode 100644 index b045d69c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lowerCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * "Safer" String.toLowerCase() - */ - function lowerCase(str){ - str = toString(str); - return str.toLowerCase(); - } - - return lowerCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lpad.js deleted file mode 100644 index ea4f5fbf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lpad.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString', './repeat'], function(toString, repeat) { - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function lpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - - return ((str.length < minLen) - ? repeat(ch, minLen - str.length) + str : str); - } - - return lpad; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/ltrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/ltrim.js deleted file mode 100644 index 477df953..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/ltrim.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES'], function(toString, WHITE_SPACES){ - /** - * Remove chars from beginning of string. - */ - function ltrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var start = 0, - len = str.length, - charLen = chars.length, - found = true, - i, c; - - while (found && start < len) { - found = false; - i = -1; - c = str.charAt(start); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - start++; - break; - } - } - } - - return (start >= len) ? '' : str.substr(start, len); - } - - return ltrim; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/makePath.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/makePath.js deleted file mode 100644 index 7aa7baba..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/makePath.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../array/join'], function(join){ - - /** - * Group arguments as path segments, if any of the args is `null` or an - * empty string it will be ignored from resulting path. - */ - function makePath(var_args){ - var result = join(Array.prototype.slice.call(arguments), '/'); - return result.replace(/\/{2,}/g, '/'); - } - - return makePath; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/normalizeLineBreaks.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/normalizeLineBreaks.js deleted file mode 100644 index 44e4194f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/normalizeLineBreaks.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function (toString) { - - /** - * Convert line-breaks from DOS/MAC to a single standard (UNIX by default) - */ - function normalizeLineBreaks(str, lineEnd) { - str = toString(str); - lineEnd = lineEnd || '\n'; - - return str - .replace(/\r\n/g, lineEnd) // DOS - .replace(/\r/g, lineEnd) // Mac - .replace(/\n/g, lineEnd); // Unix - } - - return normalizeLineBreaks; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/pascalCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/pascalCase.js deleted file mode 100644 index ead9ead4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/pascalCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './camelCase', './upperCase'], function(toString, camelCase, upperCase){ - /** - * camelCase + UPPERCASE first char - */ - function pascalCase(str){ - str = toString(str); - return camelCase(str).replace(/^[a-z]/, upperCase); - } - - return pascalCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/properCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/properCase.js deleted file mode 100644 index 2987b507..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/properCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './lowerCase', './upperCase'], function(toString, lowerCase, upperCase){ - /** - * UPPERCASE first char of each word. - */ - function properCase(str){ - str = toString(str); - return lowerCase(str).replace(/^\w|\s\w/g, upperCase); - } - - return properCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonASCII.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonASCII.js deleted file mode 100644 index 4905869d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonASCII.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove non-printable ASCII chars - */ - function removeNonASCII(str){ - str = toString(str); - - // Matches non-printable ASCII chars - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters - return str.replace(/[^\x20-\x7E]/g, ''); - } - - return removeNonASCII; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonWord.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonWord.js deleted file mode 100644 index 2b1a2040..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonWord.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove non-word chars. - */ - function removeNonWord(str){ - str = toString(str); - return str.replace(/[^0-9a-zA-Z\xC0-\xFF \-_]/g, ''); - } - - return removeNonWord; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/repeat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/repeat.js deleted file mode 100644 index 02f5659f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/repeat.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function(toString){ - - /** - * Repeat string n times - */ - function repeat(str, n){ - str = toString(str); - return (new Array(n + 1)).join(str); - } - - return repeat; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replace.js deleted file mode 100644 index 8b762fdc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replace.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../lang/toString', '../lang/toArray'], function (toString, toArray) { - - /** - * Replace string(s) with the replacement(s) in the source. - */ - function replace(str, search, replacements) { - str = toString(str); - search = toArray(search); - replacements = toArray(replacements); - - var searchLength = search.length, - replacementsLength = replacements.length; - - if (replacementsLength !== 1 && searchLength !== replacementsLength) { - throw new Error('Unequal number of searches and replacements'); - } - - var i = -1; - while (++i < searchLength) { - // Use the first replacement for all searches if only one - // replacement is provided - str = str.replace( - search[i], - replacements[(replacementsLength === 1) ? 0 : i]); - } - - return str; - } - - return replace; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replaceAccents.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replaceAccents.js deleted file mode 100644 index 3a63f55a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replaceAccents.js +++ /dev/null @@ -1,36 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Replaces all accented chars with regular ones - */ - function replaceAccents(str){ - str = toString(str); - - // verifies if the String has accents and replace them - if (str.search(/[\xC0-\xFF]/g) > -1) { - str = str - .replace(/[\xC0-\xC5]/g, "A") - .replace(/[\xC6]/g, "AE") - .replace(/[\xC7]/g, "C") - .replace(/[\xC8-\xCB]/g, "E") - .replace(/[\xCC-\xCF]/g, "I") - .replace(/[\xD0]/g, "D") - .replace(/[\xD1]/g, "N") - .replace(/[\xD2-\xD6\xD8]/g, "O") - .replace(/[\xD9-\xDC]/g, "U") - .replace(/[\xDD]/g, "Y") - .replace(/[\xDE]/g, "P") - .replace(/[\xE0-\xE5]/g, "a") - .replace(/[\xE6]/g, "ae") - .replace(/[\xE7]/g, "c") - .replace(/[\xE8-\xEB]/g, "e") - .replace(/[\xEC-\xEF]/g, "i") - .replace(/[\xF1]/g, "n") - .replace(/[\xF2-\xF6\xF8]/g, "o") - .replace(/[\xF9-\xFC]/g, "u") - .replace(/[\xFE]/g, "p") - .replace(/[\xFD\xFF]/g, "y"); - } - return str; - } - return replaceAccents; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rpad.js deleted file mode 100644 index 2efd9c88..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rpad.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString', './repeat'], function (toString, repeat) { - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function rpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - return (str.length < minLen)? str + repeat(ch, minLen - str.length) : str; - } - - return rpad; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rtrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rtrim.js deleted file mode 100644 index a4cc282d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rtrim.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES'], function(toString, WHITE_SPACES){ - /** - * Remove chars from end of string. - */ - function rtrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var end = str.length - 1, - charLen = chars.length, - found = true, - i, c; - - while (found && end >= 0) { - found = false; - i = -1; - c = str.charAt(end); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - end--; - break; - } - } - } - - return (end >= 0) ? str.substring(0, end + 1) : ''; - } - - return rtrim; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/sentenceCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/sentenceCase.js deleted file mode 100644 index cfe45af5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/sentenceCase.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString', './lowerCase', './upperCase'], function(toString, lowerCase, upperCase){ - /** - * UPPERCASE first char of each sentence and lowercase other chars. - */ - function sentenceCase(str){ - str = toString(str); - - // Replace first char of each sentence (new line or after '.\s+') to - // UPPERCASE - return lowerCase(str).replace(/(^\w)|\.\s+(\w)/gm, upperCase); - } - return sentenceCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/slugify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/slugify.js deleted file mode 100644 index c6d68c7e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/slugify.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['../lang/toString', './replaceAccents', './removeNonWord', './trim'], function(toString, replaceAccents, removeNonWord, trim){ - /** - * Convert to lower case, remove accents, remove non-word chars and - * replace spaces with the specified delimeter. - * Does not split camelCase text. - */ - function slugify(str, delimeter){ - str = toString(str); - - if (delimeter == null) { - delimeter = "-"; - } - str = replaceAccents(str); - str = removeNonWord(str); - str = trim(str) //should come after removeNonWord - .replace(/ +/g, delimeter) //replace spaces with delimeter - .toLowerCase(); - return str; - } - return slugify; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/startsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/startsWith.js deleted file mode 100644 index 88ae5453..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/startsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function (toString) { - /** - * Checks if string starts with specified prefix. - */ - function startsWith(str, prefix) { - str = toString(str); - prefix = toString(prefix); - - return str.indexOf(prefix) === 0; - } - - return startsWith; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/stripHtmlTags.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/stripHtmlTags.js deleted file mode 100644 index e8da956d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/stripHtmlTags.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove HTML tags from string. - */ - function stripHtmlTags(str){ - str = toString(str); - - return str.replace(/<[^>]*>/g, ''); - } - return stripHtmlTags; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/trim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/trim.js deleted file mode 100644 index 55526041..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/trim.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES', './ltrim', './rtrim'], function(toString, WHITE_SPACES, ltrim, rtrim){ - /** - * Remove white-spaces from beginning and end of string. - */ - function trim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - return ltrim(rtrim(str, chars), chars); - } - - return trim; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/truncate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/truncate.js deleted file mode 100644 index 34000d9f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/truncate.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../lang/toString', './trim'], function(toString, trim){ - /** - * Limit number of chars. - */ - function truncate(str, maxChars, append, onlyFullWords){ - str = toString(str); - append = append || '...'; - maxChars = onlyFullWords? maxChars + 1 : maxChars; - - str = trim(str); - if(str.length <= maxChars){ - return str; - } - str = str.substr(0, maxChars - append.length); - //crop at last space or remove trailing whitespace - str = onlyFullWords? str.substr(0, str.lastIndexOf(' ')) : trim(str); - return str + append; - } - return truncate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/typecast.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/typecast.js deleted file mode 100644 index a7c83153..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/typecast.js +++ /dev/null @@ -1,29 +0,0 @@ -define(function () { - - var UNDEF; - - /** - * Parses string and convert it into a native value. - */ - function typecast(val) { - var r; - if ( val === null || val === 'null' ) { - r = null; - } else if ( val === 'true' ) { - r = true; - } else if ( val === 'false' ) { - r = false; - } else if ( val === UNDEF || val === 'undefined' ) { - r = UNDEF; - } else if ( val === '' || isNaN(val) ) { - //isNaN('') returns false - r = val; - } else { - //parseFloat(null || '') returns NaN - r = parseFloat(val); - } - return r; - } - - return typecast; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unCamelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unCamelCase.js deleted file mode 100644 index eeef39b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unCamelCase.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../lang/toString'], function(toString){ - - var CAMEL_CASE_BORDER = /([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g; - - /** - * Add space between camelCase text. - */ - function unCamelCase(str, delimiter){ - if (delimiter == null) { - delimiter = ' '; - } - - function join(str, c1, c2) { - return c1 + delimiter + c2; - } - - str = toString(str); - str = str.replace(CAMEL_CASE_BORDER, join); - str = str.toLowerCase(); //add space between camelCase text - return str; - } - return unCamelCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/underscore.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/underscore.js deleted file mode 100644 index 75dd4649..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/underscore.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './slugify', './unCamelCase'], function(toString, slugify, unCamelCase){ - /** - * Replaces spaces with underscores, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function underscore(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "_"); - } - return underscore; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeHtml.js deleted file mode 100644 index 173c69c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function (toString) { - - /** - * Unescapes HTML special chars - */ - function unescapeHtml(str){ - str = toString(str) - .replace(/&/g , '&') - .replace(/</g , '<') - .replace(/>/g , '>') - .replace(/'/g , "'") - .replace(/"/g, '"'); - return str; - } - - return unescapeHtml; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeUnicode.js deleted file mode 100644 index d4a7ba1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeUnicode.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Unescape unicode char sequences - */ - function unescapeUnicode(str){ - str = toString(str); - return str.replace(/\\u[0-9a-f]{4}/g, function(ch){ - var code = parseInt(ch.slice(2), 16); - return String.fromCharCode(code); - }); - } - - return unescapeUnicode; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unhyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unhyphenate.js deleted file mode 100644 index 6ac2fa4c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unhyphenate.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Replaces hyphens with spaces. (only hyphens between word chars) - */ - function unhyphenate(str){ - str = toString(str); - return str.replace(/(\w)(-)(\w)/g, '$1 $3'); - } - return unhyphenate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/upperCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/upperCase.js deleted file mode 100644 index 8b2073e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/string/upperCase.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * "Safer" String.toUpperCase() - */ - function upperCase(str){ - str = toString(str); - return str.toUpperCase(); - } - return upperCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time.js deleted file mode 100644 index 67c90685..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'convert' : require('./time/convert'), - 'now' : require('./time/now'), - 'parseMs' : require('./time/parseMs'), - 'toTimeString' : require('./time/toTimeString') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/convert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/convert.js deleted file mode 100644 index 2de0cf2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/convert.js +++ /dev/null @@ -1,41 +0,0 @@ -define(function () { - - /** - * convert time into another unit - */ - function convert(val, sourceUnitName, destinationUnitName){ - destinationUnitName = destinationUnitName || 'ms'; - return (val * getUnit(sourceUnitName)) / getUnit(destinationUnitName); - } - - - //TODO: maybe extract to a separate module - function getUnit(unitName){ - switch(unitName){ - case 'ms': - case 'millisecond': - return 1; - case 's': - case 'second': - return 1000; - case 'm': - case 'minute': - return 60000; - case 'h': - case 'hour': - return 3600000; - case 'd': - case 'day': - return 86400000; - case 'w': - case 'week': - return 604800000; - default: - throw new Error('"'+ unitName + '" is not a valid unit'); - } - } - - - return convert; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/now.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/now.js deleted file mode 100644 index a3a38bcb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/now.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - - /** - * Get current time in miliseconds - */ - var now = (typeof Date.now === 'function')? Date.now : function(){ - return +(new Date()); - }; - - return now; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/parseMs.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/parseMs.js deleted file mode 100644 index 964929ae..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/parseMs.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['../math/countSteps'], function(countSteps){ - - /** - * Parse timestamp into an object. - */ - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - return parseMs; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/toTimeString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/toTimeString.js deleted file mode 100644 index edf18218..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/src/time/toTimeString.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../math/countSteps', '../number/pad'], function(countSteps, pad){ - - var HOUR = 3600000, - MINUTE = 60000, - SECOND = 1000; - - /** - * Format timestamp into a time string. - */ - function toTimeString(ms){ - var h = ms < HOUR ? 0 : countSteps(ms, HOUR), - m = ms < MINUTE ? 0 : countSteps(ms, MINUTE, 60), - s = ms < SECOND ? 0 : countSteps(ms, SECOND, 60), - str = ''; - - str += h? h + ':' : ''; - str += pad(m, 2) + ':'; - str += pad(s, 2); - - return str; - } - return toTimeString; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string.js deleted file mode 100644 index 7f0ca3bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string.js +++ /dev/null @@ -1,45 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'WHITE_SPACES' : require('./string/WHITE_SPACES'), - 'camelCase' : require('./string/camelCase'), - 'contains' : require('./string/contains'), - 'crop' : require('./string/crop'), - 'endsWith' : require('./string/endsWith'), - 'escapeHtml' : require('./string/escapeHtml'), - 'escapeRegExp' : require('./string/escapeRegExp'), - 'escapeUnicode' : require('./string/escapeUnicode'), - 'hyphenate' : require('./string/hyphenate'), - 'interpolate' : require('./string/interpolate'), - 'lowerCase' : require('./string/lowerCase'), - 'lpad' : require('./string/lpad'), - 'ltrim' : require('./string/ltrim'), - 'makePath' : require('./string/makePath'), - 'normalizeLineBreaks' : require('./string/normalizeLineBreaks'), - 'pascalCase' : require('./string/pascalCase'), - 'properCase' : require('./string/properCase'), - 'removeNonASCII' : require('./string/removeNonASCII'), - 'removeNonWord' : require('./string/removeNonWord'), - 'repeat' : require('./string/repeat'), - 'replace' : require('./string/replace'), - 'replaceAccents' : require('./string/replaceAccents'), - 'rpad' : require('./string/rpad'), - 'rtrim' : require('./string/rtrim'), - 'sentenceCase' : require('./string/sentenceCase'), - 'slugify' : require('./string/slugify'), - 'startsWith' : require('./string/startsWith'), - 'stripHtmlTags' : require('./string/stripHtmlTags'), - 'trim' : require('./string/trim'), - 'truncate' : require('./string/truncate'), - 'typecast' : require('./string/typecast'), - 'unCamelCase' : require('./string/unCamelCase'), - 'underscore' : require('./string/underscore'), - 'unescapeHtml' : require('./string/unescapeHtml'), - 'unescapeUnicode' : require('./string/unescapeUnicode'), - 'unhyphenate' : require('./string/unhyphenate'), - 'upperCase' : require('./string/upperCase') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/WHITE_SPACES.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/WHITE_SPACES.js deleted file mode 100644 index 03e01254..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/WHITE_SPACES.js +++ /dev/null @@ -1,12 +0,0 @@ - - /** - * Contains all Unicode white-spaces. Taken from - * http://en.wikipedia.org/wiki/Whitespace_character. - */ - module.exports = [ - ' ', '\n', '\r', '\t', '\f', '\v', '\u00A0', '\u1680', '\u180E', - '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', - '\u2007', '\u2008', '\u2009', '\u200A', '\u2028', '\u2029', '\u202F', - '\u205F', '\u3000' - ]; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/camelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/camelCase.js deleted file mode 100644 index aadb69a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/camelCase.js +++ /dev/null @@ -1,20 +0,0 @@ -var toString = require('../lang/toString'); -var replaceAccents = require('./replaceAccents'); -var removeNonWord = require('./removeNonWord'); -var upperCase = require('./upperCase'); -var lowerCase = require('./lowerCase'); - /** - * Convert string to camelCase text. - */ - function camelCase(str){ - str = toString(str); - str = replaceAccents(str); - str = removeNonWord(str) - .replace(/[\-_]/g, ' ') //convert all hyphens and underscores to spaces - .replace(/\s[a-z]/g, upperCase) //convert first char of each word to UPPERCASE - .replace(/\s+/g, '') //remove spaces - .replace(/^[A-Z]/g, lowerCase); //convert first char to lowercase - return str; - } - module.exports = camelCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/contains.js deleted file mode 100644 index cb22cae4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/contains.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Searches for a given substring - */ - function contains(str, substring, fromIndex){ - str = toString(str); - substring = toString(substring); - return str.indexOf(substring, fromIndex) !== -1; - } - - module.exports = contains; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/crop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/crop.js deleted file mode 100644 index 53b93b49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/crop.js +++ /dev/null @@ -1,12 +0,0 @@ -var toString = require('../lang/toString'); -var truncate = require('./truncate'); - /** - * Truncate string at full words. - */ - function crop(str, maxChars, append) { - str = toString(str); - return truncate(str, maxChars, append, true); - } - - module.exports = crop; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/endsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/endsWith.js deleted file mode 100644 index d504e9dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/endsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Checks if string ends with specified suffix. - */ - function endsWith(str, suffix) { - str = toString(str); - suffix = toString(suffix); - - return str.indexOf(suffix, str.length - suffix.length) !== -1; - } - - module.exports = endsWith; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeHtml.js deleted file mode 100644 index e67c4b21..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Escapes a string for insertion into HTML. - */ - function escapeHtml(str){ - str = toString(str) - .replace(/&/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/'/g, ''') - .replace(/"/g, '"'); - return str; - } - - module.exports = escapeHtml; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeRegExp.js deleted file mode 100644 index 70cb84ff..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeRegExp.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); - - var ESCAPE_CHARS = /[\\.+*?\^$\[\](){}\/'#]/g; - - /** - * Escape RegExp string chars. - */ - function escapeRegExp(str) { - str = toString(str); - return str.replace(ESCAPE_CHARS,'\\$&'); - } - - module.exports = escapeRegExp; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeUnicode.js deleted file mode 100644 index ec649adf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeUnicode.js +++ /dev/null @@ -1,21 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Escape string into unicode sequences - */ - function escapeUnicode(str, shouldEscapePrintable){ - str = toString(str); - return str.replace(/[\s\S]/g, function(ch){ - // skip printable ASCII chars if we should not escape them - if (!shouldEscapePrintable && (/[\x20-\x7E]/).test(ch)) { - return ch; - } - // we use "000" and slice(-4) for brevity, need to pad zeros, - // unicode escape always have 4 chars after "\u" - return '\\u'+ ('000'+ ch.charCodeAt(0).toString(16)).slice(-4); - }); - } - - module.exports = escapeUnicode; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/hyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/hyphenate.js deleted file mode 100644 index 95e32436..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/hyphenate.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); -var slugify = require('./slugify'); -var unCamelCase = require('./unCamelCase'); - /** - * Replaces spaces with hyphens, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function hyphenate(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "-"); - } - - module.exports = hyphenate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/interpolate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/interpolate.js deleted file mode 100644 index ac88fac2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/interpolate.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - var stache = /\{\{(\w+)\}\}/g; //mustache-like - - /** - * String interpolation - */ - function interpolate(template, replacements, syntax){ - template = toString(template); - var replaceFn = function(match, prop){ - return (prop in replacements)? toString(replacements[prop]) : ''; - }; - return template.replace(syntax || stache, replaceFn); - } - - module.exports = interpolate; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/lowerCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/lowerCase.js deleted file mode 100644 index 30bb7ad9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/lowerCase.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * "Safer" String.toLowerCase() - */ - function lowerCase(str){ - str = toString(str); - return str.toLowerCase(); - } - - module.exports = lowerCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/lpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/lpad.js deleted file mode 100644 index 694d711e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/lpad.js +++ /dev/null @@ -1,17 +0,0 @@ -var toString = require('../lang/toString'); -var repeat = require('./repeat'); - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function lpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - - return ((str.length < minLen) - ? repeat(ch, minLen - str.length) + str : str); - } - - module.exports = lpad; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/ltrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/ltrim.js deleted file mode 100644 index 23d7b33f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/ltrim.js +++ /dev/null @@ -1,34 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); - /** - * Remove chars from beginning of string. - */ - function ltrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var start = 0, - len = str.length, - charLen = chars.length, - found = true, - i, c; - - while (found && start < len) { - found = false; - i = -1; - c = str.charAt(start); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - start++; - break; - } - } - } - - return (start >= len) ? '' : str.substr(start, len); - } - - module.exports = ltrim; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/makePath.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/makePath.js deleted file mode 100644 index 69aef310..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/makePath.js +++ /dev/null @@ -1,13 +0,0 @@ -var join = require('../array/join'); - - /** - * Group arguments as path segments, if any of the args is `null` or an - * empty string it will be ignored from resulting path. - */ - function makePath(var_args){ - var result = join(Array.prototype.slice.call(arguments), '/'); - return result.replace(/\/{2,}/g, '/'); - } - - module.exports = makePath; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/normalizeLineBreaks.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/normalizeLineBreaks.js deleted file mode 100644 index 8a8dccfd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/normalizeLineBreaks.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Convert line-breaks from DOS/MAC to a single standard (UNIX by default) - */ - function normalizeLineBreaks(str, lineEnd) { - str = toString(str); - lineEnd = lineEnd || '\n'; - - return str - .replace(/\r\n/g, lineEnd) // DOS - .replace(/\r/g, lineEnd) // Mac - .replace(/\n/g, lineEnd); // Unix - } - - module.exports = normalizeLineBreaks; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/pascalCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/pascalCase.js deleted file mode 100644 index fd190353..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/pascalCase.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var camelCase = require('./camelCase'); -var upperCase = require('./upperCase'); - /** - * camelCase + UPPERCASE first char - */ - function pascalCase(str){ - str = toString(str); - return camelCase(str).replace(/^[a-z]/, upperCase); - } - - module.exports = pascalCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/properCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/properCase.js deleted file mode 100644 index 61636be4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/properCase.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var lowerCase = require('./lowerCase'); -var upperCase = require('./upperCase'); - /** - * UPPERCASE first char of each word. - */ - function properCase(str){ - str = toString(str); - return lowerCase(str).replace(/^\w|\s\w/g, upperCase); - } - - module.exports = properCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonASCII.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonASCII.js deleted file mode 100644 index fb463816..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonASCII.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove non-printable ASCII chars - */ - function removeNonASCII(str){ - str = toString(str); - - // Matches non-printable ASCII chars - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters - return str.replace(/[^\x20-\x7E]/g, ''); - } - - module.exports = removeNonASCII; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonWord.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonWord.js deleted file mode 100644 index bdd153b9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonWord.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove non-word chars. - */ - function removeNonWord(str){ - str = toString(str); - return str.replace(/[^0-9a-zA-Z\xC0-\xFF \-_]/g, ''); - } - - module.exports = removeNonWord; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/repeat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/repeat.js deleted file mode 100644 index 0f9b4754..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/repeat.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Repeat string n times - */ - function repeat(str, n){ - str = toString(str); - return (new Array(n + 1)).join(str); - } - - module.exports = repeat; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/replace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/replace.js deleted file mode 100644 index 14433fc7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/replace.js +++ /dev/null @@ -1,33 +0,0 @@ -var toString = require('../lang/toString'); -var toArray = require('../lang/toArray'); - - /** - * Replace string(s) with the replacement(s) in the source. - */ - function replace(str, search, replacements) { - str = toString(str); - search = toArray(search); - replacements = toArray(replacements); - - var searchLength = search.length, - replacementsLength = replacements.length; - - if (replacementsLength !== 1 && searchLength !== replacementsLength) { - throw new Error('Unequal number of searches and replacements'); - } - - var i = -1; - while (++i < searchLength) { - // Use the first replacement for all searches if only one - // replacement is provided - str = str.replace( - search[i], - replacements[(replacementsLength === 1) ? 0 : i]); - } - - return str; - } - - module.exports = replace; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/replaceAccents.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/replaceAccents.js deleted file mode 100644 index bb221265..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/replaceAccents.js +++ /dev/null @@ -1,36 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Replaces all accented chars with regular ones - */ - function replaceAccents(str){ - str = toString(str); - - // verifies if the String has accents and replace them - if (str.search(/[\xC0-\xFF]/g) > -1) { - str = str - .replace(/[\xC0-\xC5]/g, "A") - .replace(/[\xC6]/g, "AE") - .replace(/[\xC7]/g, "C") - .replace(/[\xC8-\xCB]/g, "E") - .replace(/[\xCC-\xCF]/g, "I") - .replace(/[\xD0]/g, "D") - .replace(/[\xD1]/g, "N") - .replace(/[\xD2-\xD6\xD8]/g, "O") - .replace(/[\xD9-\xDC]/g, "U") - .replace(/[\xDD]/g, "Y") - .replace(/[\xDE]/g, "P") - .replace(/[\xE0-\xE5]/g, "a") - .replace(/[\xE6]/g, "ae") - .replace(/[\xE7]/g, "c") - .replace(/[\xE8-\xEB]/g, "e") - .replace(/[\xEC-\xEF]/g, "i") - .replace(/[\xF1]/g, "n") - .replace(/[\xF2-\xF6\xF8]/g, "o") - .replace(/[\xF9-\xFC]/g, "u") - .replace(/[\xFE]/g, "p") - .replace(/[\xFD\xFF]/g, "y"); - } - return str; - } - module.exports = replaceAccents; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/rpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/rpad.js deleted file mode 100644 index 99f6378d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/rpad.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var repeat = require('./repeat'); - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function rpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - return (str.length < minLen)? str + repeat(ch, minLen - str.length) : str; - } - - module.exports = rpad; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/rtrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/rtrim.js deleted file mode 100644 index 66ba80e9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/rtrim.js +++ /dev/null @@ -1,33 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); - /** - * Remove chars from end of string. - */ - function rtrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var end = str.length - 1, - charLen = chars.length, - found = true, - i, c; - - while (found && end >= 0) { - found = false; - i = -1; - c = str.charAt(end); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - end--; - break; - } - } - } - - return (end >= 0) ? str.substring(0, end + 1) : ''; - } - - module.exports = rtrim; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/sentenceCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/sentenceCase.js deleted file mode 100644 index 354104c6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/sentenceCase.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var lowerCase = require('./lowerCase'); -var upperCase = require('./upperCase'); - /** - * UPPERCASE first char of each sentence and lowercase other chars. - */ - function sentenceCase(str){ - str = toString(str); - - // Replace first char of each sentence (new line or after '.\s+') to - // UPPERCASE - return lowerCase(str).replace(/(^\w)|\.\s+(\w)/gm, upperCase); - } - module.exports = sentenceCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/slugify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/slugify.js deleted file mode 100644 index 142f0d9b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/slugify.js +++ /dev/null @@ -1,24 +0,0 @@ -var toString = require('../lang/toString'); -var replaceAccents = require('./replaceAccents'); -var removeNonWord = require('./removeNonWord'); -var trim = require('./trim'); - /** - * Convert to lower case, remove accents, remove non-word chars and - * replace spaces with the specified delimeter. - * Does not split camelCase text. - */ - function slugify(str, delimeter){ - str = toString(str); - - if (delimeter == null) { - delimeter = "-"; - } - str = replaceAccents(str); - str = removeNonWord(str); - str = trim(str) //should come after removeNonWord - .replace(/ +/g, delimeter) //replace spaces with delimeter - .toLowerCase(); - return str; - } - module.exports = slugify; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/startsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/startsWith.js deleted file mode 100644 index bce2bd20..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/startsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Checks if string starts with specified prefix. - */ - function startsWith(str, prefix) { - str = toString(str); - prefix = toString(prefix); - - return str.indexOf(prefix) === 0; - } - - module.exports = startsWith; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/stripHtmlTags.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/stripHtmlTags.js deleted file mode 100644 index 01d17b0e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/stripHtmlTags.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove HTML tags from string. - */ - function stripHtmlTags(str){ - str = toString(str); - - return str.replace(/<[^>]*>/g, ''); - } - module.exports = stripHtmlTags; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/trim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/trim.js deleted file mode 100644 index 9652b0c7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/trim.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); -var ltrim = require('./ltrim'); -var rtrim = require('./rtrim'); - /** - * Remove white-spaces from beginning and end of string. - */ - function trim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - return ltrim(rtrim(str, chars), chars); - } - - module.exports = trim; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/truncate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/truncate.js deleted file mode 100644 index a98d6c7d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/truncate.js +++ /dev/null @@ -1,21 +0,0 @@ -var toString = require('../lang/toString'); -var trim = require('./trim'); - /** - * Limit number of chars. - */ - function truncate(str, maxChars, append, onlyFullWords){ - str = toString(str); - append = append || '...'; - maxChars = onlyFullWords? maxChars + 1 : maxChars; - - str = trim(str); - if(str.length <= maxChars){ - return str; - } - str = str.substr(0, maxChars - append.length); - //crop at last space or remove trailing whitespace - str = onlyFullWords? str.substr(0, str.lastIndexOf(' ')) : trim(str); - return str + append; - } - module.exports = truncate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/typecast.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/typecast.js deleted file mode 100644 index c1386a49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/typecast.js +++ /dev/null @@ -1,29 +0,0 @@ - - - var UNDEF; - - /** - * Parses string and convert it into a native value. - */ - function typecast(val) { - var r; - if ( val === null || val === 'null' ) { - r = null; - } else if ( val === 'true' ) { - r = true; - } else if ( val === 'false' ) { - r = false; - } else if ( val === UNDEF || val === 'undefined' ) { - r = UNDEF; - } else if ( val === '' || isNaN(val) ) { - //isNaN('') returns false - r = val; - } else { - //parseFloat(null || '') returns NaN - r = parseFloat(val); - } - return r; - } - - module.exports = typecast; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unCamelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unCamelCase.js deleted file mode 100644 index 4968f378..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unCamelCase.js +++ /dev/null @@ -1,23 +0,0 @@ -var toString = require('../lang/toString'); - - var CAMEL_CASE_BORDER = /([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g; - - /** - * Add space between camelCase text. - */ - function unCamelCase(str, delimiter){ - if (delimiter == null) { - delimiter = ' '; - } - - function join(str, c1, c2) { - return c1 + delimiter + c2; - } - - str = toString(str); - str = str.replace(CAMEL_CASE_BORDER, join); - str = str.toLowerCase(); //add space between camelCase text - return str; - } - module.exports = unCamelCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/underscore.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/underscore.js deleted file mode 100644 index ebd6e2b7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/underscore.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var slugify = require('./slugify'); -var unCamelCase = require('./unCamelCase'); - /** - * Replaces spaces with underscores, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function underscore(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "_"); - } - module.exports = underscore; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeHtml.js deleted file mode 100644 index 52cf3f45..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Unescapes HTML special chars - */ - function unescapeHtml(str){ - str = toString(str) - .replace(/&/g , '&') - .replace(/</g , '<') - .replace(/>/g , '>') - .replace(/'/g , "'") - .replace(/"/g, '"'); - return str; - } - - module.exports = unescapeHtml; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeUnicode.js deleted file mode 100644 index 0b7fb73b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeUnicode.js +++ /dev/null @@ -1,16 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Unescape unicode char sequences - */ - function unescapeUnicode(str){ - str = toString(str); - return str.replace(/\\u[0-9a-f]{4}/g, function(ch){ - var code = parseInt(ch.slice(2), 16); - return String.fromCharCode(code); - }); - } - - module.exports = unescapeUnicode; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unhyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unhyphenate.js deleted file mode 100644 index 311dfa17..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/unhyphenate.js +++ /dev/null @@ -1,10 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Replaces hyphens with spaces. (only hyphens between word chars) - */ - function unhyphenate(str){ - str = toString(str); - return str.replace(/(\w)(-)(\w)/g, '$1 $3'); - } - module.exports = unhyphenate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/upperCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/upperCase.js deleted file mode 100644 index 6c92552c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/string/upperCase.js +++ /dev/null @@ -1,10 +0,0 @@ -var toString = require('../lang/toString'); - /** - * "Safer" String.toUpperCase() - */ - function upperCase(str){ - str = toString(str); - return str.toUpperCase(); - } - module.exports = upperCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time.js deleted file mode 100644 index 9f533296..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time.js +++ /dev/null @@ -1,12 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'convert' : require('./time/convert'), - 'now' : require('./time/now'), - 'parseMs' : require('./time/parseMs'), - 'toTimeString' : require('./time/toTimeString') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/convert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/convert.js deleted file mode 100644 index 852a0f03..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/convert.js +++ /dev/null @@ -1,41 +0,0 @@ - - - /** - * convert time into another unit - */ - function convert(val, sourceUnitName, destinationUnitName){ - destinationUnitName = destinationUnitName || 'ms'; - return (val * getUnit(sourceUnitName)) / getUnit(destinationUnitName); - } - - - //TODO: maybe extract to a separate module - function getUnit(unitName){ - switch(unitName){ - case 'ms': - case 'millisecond': - return 1; - case 's': - case 'second': - return 1000; - case 'm': - case 'minute': - return 60000; - case 'h': - case 'hour': - return 3600000; - case 'd': - case 'day': - return 86400000; - case 'w': - case 'week': - return 604800000; - default: - throw new Error('"'+ unitName + '" is not a valid unit'); - } - } - - - module.exports = convert; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/now.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/now.js deleted file mode 100644 index effcfbe3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/now.js +++ /dev/null @@ -1,12 +0,0 @@ - - - /** - * Get current time in miliseconds - */ - var now = (typeof Date.now === 'function')? Date.now : function(){ - return +(new Date()); - }; - - module.exports = now; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/parseMs.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/parseMs.js deleted file mode 100644 index 6d997976..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/parseMs.js +++ /dev/null @@ -1,17 +0,0 @@ -var countSteps = require('../math/countSteps'); - - /** - * Parse timestamp into an object. - */ - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - module.exports = parseMs; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/toTimeString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/toTimeString.js deleted file mode 100644 index 101d69fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/mout/time/toTimeString.js +++ /dev/null @@ -1,24 +0,0 @@ -var countSteps = require('../math/countSteps'); -var pad = require('../number/pad'); - - var HOUR = 3600000, - MINUTE = 60000, - SECOND = 1000; - - /** - * Format timestamp into a time string. - */ - function toTimeString(ms){ - var h = ms < HOUR ? 0 : countSteps(ms, HOUR), - m = ms < MINUTE ? 0 : countSteps(ms, MINUTE, 60), - s = ms < SECOND ? 0 : countSteps(ms, SECOND, 60), - str = ''; - - str += h? h + ':' : ''; - str += pad(m, 2) + ':'; - str += pad(s, 2); - - return str; - } - module.exports = toTimeString; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/History.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/History.md deleted file mode 100644 index 88119480..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/History.md +++ /dev/null @@ -1,42 +0,0 @@ - -1.0.0 / 2013-06-18 -================== - - * remove .version - * >=. Closes #19 - * Merge pull request #15 from davglass/readline-osx - * On OSX revert back to terminal hack to avoid a readline bug - -0.1.0 / 2012-09-19 -================== - - * Fixed logic bug that caused bar to jump one extra space at the end [davglass] - * Working with readline impl, even on Windows [davglass] - * Using readline instead of the \r hack [davglass] - -0.0.5 / 2012-08-07 -================== - - * add ability to tick by zero chunks - tick(0) - * fix ETA. Closes #4 [lwille] - -0.0.4 / 2011-11-14 -================== - - * Allow more recent versions of node - -0.0.3 / 2011-04-20 -================== - - * Changed; erase the line when complete - -0.0.2 / 2011-04-20 -================== - - * Added custom tokens support - * Fixed; clear line before writing - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/Makefile deleted file mode 100644 index 36a3ed7d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/Makefile +++ /dev/null @@ -1,5 +0,0 @@ - -test: - @echo "populate me" - -.PHONY: test \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/Readme.md deleted file mode 100644 index 4e08a49b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/Readme.md +++ /dev/null @@ -1,117 +0,0 @@ -# node-progress - - Flexible ascii progress bar - -## Installation - - npm install progress - -## Usage - - First we create a `ProgressBar`, giving it a format string - as well as the `total`, telling the progress bar when it will - be considered complete. After that all we need to do is `tick()` appropriately. - -```javascript -var ProgressBar = require('progress'); - -var bar = new ProgressBar(':bar', { total: 10 }); -var timer = setInterval(function(){ - bar.tick(); - if (bar.complete) { - console.log('\ncomplete\n'); - clearInterval(timer); - } -}, 100); -``` - -## Options: - - - `total` total number of ticks to complete - - `width` the displayed width of the progress bar defaulting to total - - `stream` the output stream defaulting to stdout - - `complete` completion character defaulting to "=" - - `incomplete` incomplete character defaulting to "-" - - `clear` option to clear the bar on completion defaulting to false - - `callback` optional function to call when the progress bar completes - -## Tokens: - - - `:bar` the progress bar itself - - `:current` current tick number - - `:total` total ticks - - `:elapsed` time elapsed in seconds - - `:percent` completion percentage - - `:eta` estimated completion time in seconds - -## Examples - -### Download - - In our download example each tick has a variable influence, so we pass the chunk length which adjusts the progress bar appropriately relative to the total length. - -```javascript -var ProgressBar = require('../') - , https = require('https'); - -var req = https.request({ - host: 'download.github.com' - , port: 443 - , path: '/visionmedia-node-jscoverage-0d4608a.zip' -}); - -req.on('response', function(res){ - var len = parseInt(res.headers['content-length'], 10); - - console.log(); - var bar = new ProgressBar(' downloading [:bar] :percent :etas', { - complete: '=' - , incomplete: ' ' - , width: 20 - , total: len - }); - - res.on('data', function(chunk){ - bar.tick(chunk.length); - }); - - res.on('end', function(){ - console.log('\n'); - }); -}); - -req.end(); -``` - - The code above will generate a progress bar that looks like this: - -``` -downloading [===== ] 29% 3.7s -``` - -You can see more examples in the `examples` folder. - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk `<tj@vision-media.ca>` - -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/index.js deleted file mode 100644 index 4449dd30..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/node-progress'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/lib/node-progress.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/lib/node-progress.js deleted file mode 100644 index ca0ce4f0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/lib/node-progress.js +++ /dev/null @@ -1,183 +0,0 @@ -/*! - * node-progress - * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca> - * MIT Licensed - */ - -/** - * Expose `ProgressBar`. - */ - -exports = module.exports = ProgressBar; - -/** - * Initialize a `ProgressBar` with the given - * `fmt` string and `options` or `total`. - * - * Options: - * - * - `total` total number of ticks to complete - * - `width` the displayed width of the progress bar defaulting to total - * - `stream` the output stream defaulting to stdout - * - `complete` completion character defaulting to "=" - * - `incomplete` incomplete character defaulting to "-" - * - `callback` optional function to call when the progress bar completes - * - * Tokens: - * - * - `:bar` the progress bar itself - * - `:current` current tick number - * - `:total` total ticks - * - `:elapsed` time elapsed in seconds - * - `:percent` completion percentage - * - `:eta` eta in seconds - * - * @param {String} fmt - * @param {Object|Number} options or total - * @api public - */ - -function ProgressBar(fmt, options) { - this.rl = require('readline').createInterface({ - input: process.stdin, - output: options.stream || process.stdout - }); - this.rl.setPrompt('', 0); - this.rl.clearLine = function() { - this.write(null, {ctrl: true, name: 'u'}); - }; - - if (typeof(options) == 'number') { - var total = options; - options = {}; - options.total = total; - } else { - options = options || {}; - if ('string' != typeof fmt) throw new Error('format required'); - if ('number' != typeof options.total) throw new Error('total required'); - } - - this.fmt = fmt; - this.curr = 0; - this.total = options.total; - this.width = options.width || this.total; - this.clear = options.clear - this.chars = { - complete: options.complete || '=' - , incomplete: options.incomplete || '-' - }; - this.callback = options.callback || function () {}; -} - -/** - * "tick" the progress bar with optional `len` and - * optional `tokens`. - * - * @param {Number|Object} len or tokens - * @param {Object} tokens - * @api public - */ - -ProgressBar.prototype.tick = function(len, tokens){ - if (len !== 0) - len = len || 1; - - // swap tokens - if ('object' == typeof len) tokens = len, len = 1; - - // start time for eta - if (0 == this.curr) this.start = new Date; - - this.curr += len - this.render(tokens); - - // progress complete - if (this.curr >= this.total) { - this.complete = true; - this.terminate(); - this.callback(this); - return; - } -}; - -/** - * Method to render the progress bar with optional `tokens` to - * place in the progress bar's `fmt` field. - * - * @param {Object} tokens - * @api public - */ - -ProgressBar.prototype.render = function(tokens){ - if(!process.stdout.isTTY) { - return; - } - - var ratio = this.curr / this.total; - ratio = Math.min(Math.max(ratio, 0), 1); - - var percent = ratio * 100 - , complete = Math.round(this.width * ratio) - , incomplete - , elapsed = new Date - this.start - , eta = (percent == 100) ? 0 : elapsed * (this.total / this.curr - 1); - - complete = Array(complete).join(this.chars.complete); - incomplete = Array(this.width - complete.length).join(this.chars.incomplete); - - var str = this.fmt - .replace(':bar', complete + incomplete) - .replace(':current', this.curr) - .replace(':total', this.total) - .replace(':elapsed', isNaN(elapsed) ? "0.0" : (elapsed / 1000).toFixed(1)) - .replace(':eta', (isNaN(eta) || !isFinite(eta)) ? "0.0" : (eta / 1000).toFixed(1)) - .replace(':percent', percent.toFixed(0) + '%'); - - if (tokens) { - for (var key in tokens) { - str = str.replace(':' + key, tokens[key]); - } - } - - this.rl.clearLine(); - this.rl.write(str); -}; - -/** - * "update" the progress bar to represent an exact percentage. - * The ratio (between 0 and 1) specified will be multiplied by `total` and - * floored, representing the closest available "tick." For example, if a - * progress bar has a length of 3 and `update(0.5)` is called, the progress - * will be set to 1. - * - * A ratio of 0.5 will attempt to set the progress to halfway. - * - * @param {Number} ratio The ratio (between 0 and 1 inclusive) to set the - * overall completion to. - * @api public - */ - -ProgressBar.prototype.update = function(ratio, tokens) { - var goal = Math.floor(ratio * this.total); - var delta = goal - this.curr; - - this.tick(delta, tokens); -}; - -/** - * Terminates a progress bar. - * - * @api public - */ - -ProgressBar.prototype.terminate = function() { - this.rl.resume(); - - if (this.clear) { - this.rl.clearLine(); - this.rl.close(); - } else { - this.rl.close(); - console.log(); - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/package.json deleted file mode 100644 index c4744b51..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/progress/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "progress", - "version": "1.1.3", - "description": "Flexible ascii progress bar", - "keywords": [ - "cli", - "progress" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "dependencies": {}, - "main": "index", - "engines": { - "node": ">=0.4.0" - }, - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/node-progress" - }, - "readme": "# node-progress\n\n Flexible ascii progress bar\n\n## Installation\n\n npm install progress\n\n## Usage\n\n First we create a `ProgressBar`, giving it a format string\n as well as the `total`, telling the progress bar when it will\n be considered complete. After that all we need to do is `tick()` appropriately.\n\n```javascript\nvar ProgressBar = require('progress');\n\nvar bar = new ProgressBar(':bar', { total: 10 });\nvar timer = setInterval(function(){\n bar.tick();\n if (bar.complete) {\n console.log('\\ncomplete\\n');\n clearInterval(timer);\n }\n}, 100);\n```\n\n## Options:\n\n - `total` total number of ticks to complete\n - `width` the displayed width of the progress bar defaulting to total\n - `stream` the output stream defaulting to stdout\n - `complete` completion character defaulting to \"=\"\n - `incomplete` incomplete character defaulting to \"-\"\n - `clear` option to clear the bar on completion defaulting to false\n - `callback` optional function to call when the progress bar completes\n\n## Tokens:\n\n - `:bar` the progress bar itself\n - `:current` current tick number\n - `:total` total ticks\n - `:elapsed` time elapsed in seconds\n - `:percent` completion percentage\n - `:eta` estimated completion time in seconds\n\n## Examples\n\n### Download\n\n In our download example each tick has a variable influence, so we pass the chunk length which adjusts the progress bar appropriately relative to the total length.\n\n```javascript\nvar ProgressBar = require('../')\n , https = require('https');\n\nvar req = https.request({\n host: 'download.github.com'\n , port: 443\n , path: '/visionmedia-node-jscoverage-0d4608a.zip'\n});\n\nreq.on('response', function(res){\n var len = parseInt(res.headers['content-length'], 10);\n\n console.log();\n var bar = new ProgressBar(' downloading [:bar] :percent :etas', {\n complete: '='\n , incomplete: ' '\n , width: 20\n , total: len\n });\n\n res.on('data', function(chunk){\n bar.tick(chunk.length);\n });\n\n res.on('end', function(){\n console.log('\\n');\n });\n});\n\nreq.end();\n```\n\n The code above will generate a progress bar that looks like this:\n\n```\ndownloading [===== ] 29% 3.7s\n```\n\nYou can see more examples in the `examples` folder.\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk `<tj@vision-media.ca>`\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/node-progress/issues" - }, - "homepage": "https://github.com/visionmedia/node-progress", - "_id": "progress@1.1.3", - "dist": { - "shasum": "42f89c5fc3b6f0408a0bdd68993b174f96aababf" - }, - "_from": "progress@~1.1.0", - "_resolved": "https://registry.npmjs.org/progress/-/progress-1.1.3.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/AUTHORS b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/AUTHORS deleted file mode 100644 index 247b7543..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/AUTHORS +++ /dev/null @@ -1,6 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/LICENSE deleted file mode 100644 index 05a40109..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/README.md deleted file mode 100644 index cd123b65..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/README.md +++ /dev/null @@ -1,30 +0,0 @@ -`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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/bin.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/bin.js deleted file mode 100755 index 29bfa8a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/bin.js +++ /dev/null @@ -1,33 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/package.json deleted file mode 100644 index 211cc9dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "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", - "dist": { - "shasum": "7ada6a6d39b2301af3c8fe7b936c2e46e7c4463d" - }, - "_from": "rimraf@~2.2.6", - "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/rimraf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/rimraf.js deleted file mode 100644 index ce62051f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/rimraf.js +++ /dev/null @@ -1,178 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/run.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/run.sh deleted file mode 100644 index 598f0163..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/setup.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/setup.sh deleted file mode 100644 index 2602e631..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/setup.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-async.js deleted file mode 100644 index 9c2e0b7b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-async.js +++ /dev/null @@ -1,5 +0,0 @@ -var rimraf = require("../rimraf") - , path = require("path") -rimraf(path.join(__dirname, "target"), function (er) { - if (er) throw er -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-sync.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-sync.js deleted file mode 100644 index eb71f104..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-sync.js +++ /dev/null @@ -1,3 +0,0 @@ -var rimraf = require("../rimraf") - , path = require("path") -rimraf.sync(path.join(__dirname, "target")) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/LICENSE deleted file mode 100644 index 05a40109..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/README.md deleted file mode 100644 index ff1eb531..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The "which" util from npm's guts. - -Finds the first instance of a specified executable in the PATH -environment variable. Does not cache the results, so `hash -r` is not -needed when the PATH changes. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/bin/which b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/bin/which deleted file mode 100755 index 8432ce2f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/bin/which +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env node -var which = require("../") -if (process.argv.length < 3) { - console.error("Usage: which <thing>") - process.exit(1) -} - -which(process.argv[2], function (er, thing) { - if (er) { - console.error(er.message) - process.exit(er.errno || 127) - } - console.log(thing) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/package.json deleted file mode 100644 index f1938b07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "which", - "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.", - "version": "1.0.5", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-which.git" - }, - "main": "which.js", - "bin": { - "which": "./bin/which" - }, - "engines": { - "node": "*" - }, - "dependencies": {}, - "devDependencies": {}, - "readme": "The \"which\" util from npm's guts.\n\nFinds the first instance of a specified executable in the PATH\nenvironment variable. Does not cache the results, so `hash -r` is not\nneeded when the PATH changes.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-which/issues" - }, - "homepage": "https://github.com/isaacs/node-which", - "_id": "which@1.0.5", - "dist": { - "shasum": "195619a6ad7e8fefd0aa76445a6d4c8d370a322c" - }, - "_from": "which@~1.0.5", - "_resolved": "https://registry.npmjs.org/which/-/which-1.0.5.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/which.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/which.js deleted file mode 100644 index db7e8f74..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/node_modules/which/which.js +++ /dev/null @@ -1,104 +0,0 @@ -module.exports = which -which.sync = whichSync - -var path = require("path") - , fs - , COLON = process.platform === "win32" ? ";" : ":" - , isExe - -try { - fs = require("graceful-fs") -} catch (ex) { - fs = require("fs") -} - -if (process.platform == "win32") { - // On windows, there is no good way to check that a file is executable - isExe = function isExe () { return true } -} else { - isExe = function isExe (mod, uid, gid) { - //console.error(mod, uid, gid); - //console.error("isExe?", (mod & 0111).toString(8)) - var ret = (mod & 0001) - || (mod & 0010) && process.getgid && gid === process.getgid() - || (mod & 0100) && process.getuid && uid === process.getuid() - //console.error("isExe?", ret) - return ret - } -} - - - -function which (cmd, cb) { - if (isAbsolute(cmd)) return cb(null, cmd) - var pathEnv = (process.env.PATH || "").split(COLON) - , pathExt = [""] - if (process.platform === "win32") { - pathEnv.push(process.cwd()) - pathExt = (process.env.PATHEXT || ".EXE").split(COLON) - if (cmd.indexOf(".") !== -1) pathExt.unshift("") - } - //console.error("pathEnv", pathEnv) - ;(function F (i, l) { - if (i === l) return cb(new Error("not found: "+cmd)) - var p = path.resolve(pathEnv[i], cmd) - ;(function E (ii, ll) { - if (ii === ll) return F(i + 1, l) - var ext = pathExt[ii] - //console.error(p + ext) - fs.stat(p + ext, function (er, stat) { - if (!er && - stat && - stat.isFile() && - isExe(stat.mode, stat.uid, stat.gid)) { - //console.error("yes, exe!", p + ext) - return cb(null, p + ext) - } - return E(ii + 1, ll) - }) - })(0, pathExt.length) - })(0, pathEnv.length) -} - -function whichSync (cmd) { - if (isAbsolute(cmd)) return cmd - var pathEnv = (process.env.PATH || "").split(COLON) - , pathExt = [""] - if (process.platform === "win32") { - pathEnv.push(process.cwd()) - pathExt = (process.env.PATHEXT || ".EXE").split(COLON) - if (cmd.indexOf(".") !== -1) pathExt.unshift("") - } - for (var i = 0, l = pathEnv.length; i < l; i ++) { - var p = path.join(pathEnv[i], cmd) - for (var j = 0, ll = pathExt.length; j < ll; j ++) { - var cur = p + pathExt[j] - var stat - try { stat = fs.statSync(cur) } catch (ex) {} - if (stat && - stat.isFile() && - isExe(stat.mode, stat.uid, stat.gid)) return cur - } - } - throw new Error("not found: "+cmd) -} - -var isAbsolute = process.platform === "win32" ? absWin : absUnix - -function absWin (p) { - if (absUnix(p)) return true - // pull off the device/UNC bit from a windows path. - // from node's lib/path.js - var splitDeviceRe = - /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?/ - , result = splitDeviceRe.exec(p) - , device = result[1] || '' - , isUnc = device && device.charAt(1) !== ':' - , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute - - return isAbsolute -} - -function absUnix (p) { - return p.charAt(0) === "/" || p === "" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/package.json deleted file mode 100644 index 66d4488e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/bin-wrapper/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "bin-wrapper", - "version": "0.1.9", - "description": "Binary wrapper for Node.js that makes your programs seamlessly available as local dependencies", - "keywords": [ - "bin", - "build", - "make", - "wrapper" - ], - "homepage": "https://github.com/kevva/bin-wrapper", - "bugs": { - "url": "https://github.com/kevva/bin-wrapper/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/kevva/bin-wrapper.git" - }, - "scripts": { - "test": "mocha --reporter list --timeout 0" - }, - "main": "bin-wrapper.js", - "files": [ - "bin-wrapper.js" - ], - "dependencies": { - "download": "~0.1.2", - "isbin": "0.0.2", - "mout": "~0.6.0", - "progress": "~1.1.0", - "rimraf": "~2.2.6", - "which": "~1.0.5" - }, - "devDependencies": { - "mocha": "~1.12.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "readme": "# bin-wrapper [![Build Status](https://secure.travis-ci.org/kevva/bin-wrapper.png?branch=master)](http://travis-ci.org/kevva/bin-wrapper)\n\nBinary wrapper for Node.js that makes your programs seamlessly available as local dependencies\n\n## Getting started\n\nInstall with [npm](https://npmjs.org/package/bin-wrapper): `npm install bin-wrapper`\n\n## Examples\n\nAll `platform` and `arch` specific options takes precedence over the base \noptions. See [test.js](test.js) for a full fleshed example.\n\n```js\nvar Bin = require('bin-wrapper');\n\nvar opts = {\n name: 'Gifsicle',\n bin: 'gifsicle',\n path: 'vendor',\n url: 'http://url/to/gifsicle',\n src: 'http://www.lcdf.org/gifsicle/gifsicle-1.71.tar.gz',\n buildScript: './configure --bindir=\"vendor\" && make install',\n platform: {\n win32: {\n bin: 'gifsicle.exe',\n url: [\n 'http://url/to/gifsicle.exe'\n 'http://url/to/gifsicle.dll'\n ]\n }\n }\n}\nvar bin = new Bin(opts);\n\nbin.check('--version', function (works) {\n if (!works) {\n console.log('Pre-build test failed, compiling from source');\n return bin.build();\n }\n\n console.log('Binary passed the test');\n});\n```\n\nGet the path to your binary with `bin.path`.\n\n```js\nconsole.log(bin.path);\n// => path/to/vendor/gifsicle\n```\n\n## API\n\n### .check(cmd, cb)\n\nCheck if a binary is present and working. If it isn't, download and test it by \nrunning the binary with `cmd` and see if it exits correctly.\n\n### .build(cb)\n\nDownload the source archive defined in the `src` property and build it using the \nbuild script defined in the `buildScript` property.\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com)\n", - "readmeFilename": "README.md", - "_id": "bin-wrapper@0.1.9", - "dist": { - "shasum": "237ee496fb6049caedaba51ad9e62fc199a86060" - }, - "_from": "bin-wrapper@~0.1.3", - "_resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-0.1.9.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/chalk.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/chalk.js deleted file mode 100644 index 17c6dbab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/chalk.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; -var ansi = require('ansi-styles'); -var defineProps = Object.defineProperties; - -ansi.grey = ansi.gray; - -var styles = (function () { - var ret = {}; - - Object.keys(ansi).forEach(function (key) { - ret[key] = { - get: function () { - this._styles.push(key); - return this; - } - }; - }); - - return ret; -})(); - -var chalk = module.exports = defineProps({}, init()); - -function init() { - var ret = {}; - - Object.keys(styles).forEach(function (name) { - ret[name] = { - get: function () { - var obj = defineProps(function self(str) { - if (!chalk.enabled) { - return str; - } - - return self._styles.reduce(function (str, name) { - var code = ansi[name]; - return code[0] + (str || '') + code[1]; - }, str); - }, styles); - - obj._styles = []; - - return obj[name]; - } - } - }); - - return ret; -} - -chalk.styles = ansi; - -chalk.stripColor = function (str) { - return str.replace(/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]/g, ''); -}; - -chalk.supportsColor = require('has-color'); - -// detect mode if not set manually -if (chalk.enabled === undefined) { - chalk.enabled = chalk.supportsColor; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js deleted file mode 100644 index 56a5d19b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; -module.exports = { - reset: ['\x1b[0m', '\x1b[0m'], - - bold: ['\x1b[1m', '\x1b[22m'], - italic: ['\x1b[3m', '\x1b[23m'], - underline: ['\x1b[4m', '\x1b[24m'], - inverse: ['\x1b[7m', '\x1b[27m'], - strikethrough: ['\x1b[9m', '\x1b[29m'], - - black: ['\x1b[30m', '\x1b[39m'], - red: ['\x1b[31m', '\x1b[39m'], - green: ['\x1b[32m', '\x1b[39m'], - yellow: ['\x1b[33m', '\x1b[39m'], - blue: ['\x1b[34m', '\x1b[39m'], - magenta: ['\x1b[35m', '\x1b[39m'], - cyan: ['\x1b[36m', '\x1b[39m'], - white: ['\x1b[37m', '\x1b[39m'], - gray: ['\x1B[90m', '\x1b[39m'], - - bgBlack: ['\x1b[40m', '\x1b[49m'], - bgRed: ['\x1b[41m', '\x1b[49m'], - bgGreen: ['\x1b[42m', '\x1b[49m'], - bgYellow: ['\x1b[43m', '\x1b[49m'], - bgBlue: ['\x1b[44m', '\x1b[49m'], - bgMagenta: ['\x1b[45m', '\x1b[49m'], - bgCyan: ['\x1b[46m', '\x1b[49m'], - bgWhite: ['\x1b[47m', '\x1b[49m'] -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/ansi-styles/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/ansi-styles/package.json deleted file mode 100644 index 8acdb5e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "ansi-styles", - "version": "0.2.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 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[0] + 'Hello world!' + ansi.green[1]);\n```\n\n## API\n\nEach style is an array of a start and end escape code.\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 License • © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "_id": "ansi-styles@0.2.0", - "dist": { - "shasum": "359ab4b15dcd64ba6d74734b72c36360a9af2c19" - }, - "_from": "ansi-styles@~0.2.0", - "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-0.2.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/ansi-styles/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/ansi-styles/readme.md deleted file mode 100644 index 646837c6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,65 +0,0 @@ -# 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 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[0] + 'Hello world!' + ansi.green[1]); -``` - -## API - -Each style is an array of a start and end escape code. - - -## 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 License • © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/has-color/has-color.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/has-color/has-color.js deleted file mode 100644 index 27316b1f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/has-color/has-color.js +++ /dev/null @@ -1,24 +0,0 @@ -'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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/has-color/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/has-color/package.json deleted file mode 100644 index d60b2d0a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/has-color/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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", - "dist": { - "shasum": "d1dadeea5b9e8b446bf08603532333710c95a290" - }, - "_from": "has-color@~0.1.0", - "_resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/has-color/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/has-color/readme.md deleted file mode 100644 index 0918c851..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/node_modules/has-color/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/package.json deleted file mode 100644 index 46a63f05..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "chalk", - "version": "0.2.1", - "description": "Terminal string styling done right", - "keywords": [ - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "ansi", - "styles", - "tty", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "homepage": "https://github.com/sindresorhus/chalk", - "bugs": { - "url": "https://github.com/sindresorhus/chalk/issues" - }, - "license": "MIT", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "files": [ - "chalk.js" - ], - "main": "chalk", - "repository": { - "type": "git", - "url": "git://github.com/sindresorhus/chalk.git" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "has-color": "~0.1.0", - "ansi-styles": "~0.2.0" - }, - "devDependencies": { - "mocha": "~1.12.0" - }, - "engines": { - "node": ">=0.8.0" - }, - "readme": "# chalk [![Build Status](https://secure.travis-ci.org/sindresorhus/chalk.png?branch=master)](http://travis-ci.org/sindresorhus/chalk)\n\n> Terminal string styling done right.\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. 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\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 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\nchalk.red('Hello' + chalk.underline.bgBlue('world') + '!');\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)\n\nChain [styles](#styles) and call the last one as a method with a string argument.\n\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\n```js\nvar chalk = require('chalk');\n\nconsole.log(chalk.styles.red);\n//=> ['\\x1b[31m', '\\x1b[39m']\n\nconsole.log(chalk.styles.red[0] + 'Hello' + chalk.styles.red[1]);\n// first item is the style escape code and second is the reset escape code\n```\n\n### chalk.stripColor(string)\n\nStrip color from a string.\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 License • © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "_id": "chalk@0.2.1", - "dist": { - "shasum": "7613e1575145b21386483f7f485aa5ffa8cbd10c" - }, - "_from": "chalk@~0.2.0", - "_resolved": "https://registry.npmjs.org/chalk/-/chalk-0.2.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/readme.md deleted file mode 100644 index d369d2ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/node_modules/chalk/readme.md +++ /dev/null @@ -1,130 +0,0 @@ -# chalk [![Build Status](https://secure.travis-ci.org/sindresorhus/chalk.png?branch=master)](http://travis-ci.org/sindresorhus/chalk) - -> Terminal string styling done right. - -[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. 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 - - -## 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 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 -chalk.red('Hello' + chalk.underline.bgBlue('world') + '!'); -``` - -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) - -Chain [styles](#styles) and call the last one as a method with a string argument. - - -### 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). - -```js -var chalk = require('chalk'); - -console.log(chalk.styles.red); -//=> ['\x1b[31m', '\x1b[39m'] - -console.log(chalk.styles.red[0] + 'Hello' + chalk.styles.red[1]); -// first item is the style escape code and second is the reset escape code -``` - -### chalk.stripColor(string) - -Strip color from a string. - - -## 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 License • © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/package.json deleted file mode 100644 index 4206dbf3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "jpegtran-bin", - "version": "0.2.3", - "description": "jpegtran (part of libjpeg-turbo) wrapper that makes it seamlessly available as a local dependency on OS X, Linux, FreeBSD, Solaris and Windows. Most commonly used to losslessly minify JPEG images.", - "keywords": [ - "jpeg", - "jpg", - "img", - "image", - "compress", - "minify", - "optimize" - ], - "homepage": "https://github.com/yeoman/node-jpegtran-bin", - "bugs": { - "url": "https://github.com/yeoman/node-jpegtran-bin/issues" - }, - "license": "BSD", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "maintainers": [ - { - "name": "Duncan Wong" - }, - { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - } - ], - "main": "lib/jpegtran", - "bin": { - "jpegtran": "bin/jpegtran.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/yeoman/node-jpegtran-bin.git" - }, - "scripts": { - "test": "mocha", - "postinstall": "node lib/check.js" - }, - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "bin-wrapper": "~0.1.3", - "chalk": "~0.2.0" - }, - "devDependencies": { - "mocha": "~1.13.0" - }, - "files": [ - "bin", - "lib", - "test" - ], - "readme": "# node-jpegtran-bin [![Build Status](https://secure.travis-ci.org/yeoman/node-jpegtran-bin.png?branch=master)](http://travis-ci.org/yeoman/node-jpegtran-bin)\n\njpegtran 1.3 (part of [libjpeg-turbo](http://libjpeg-turbo.virtualgl.org/)) Node.js wrapper that makes it seamlessly available as a local dependency on OS X, Linux, FreeBSD, Solaris and Windows. Most commonly used to losslessly minify JPEG images.\n\n> libjpeg-turbo is a derivative of libjpeg that uses SIMD instructions (MMX, SSE2, NEON) to accelerate baseline JPEG compression and decompression on x86, x86-64, and ARM systems. On such systems, libjpeg-turbo is generally 2-4x as fast as the unmodified version of libjpeg, all else being equal.\n\n\n## Install\n\n- Install with [npm](https://npmjs.org/package/jpegtran-bin): `npm install --save jpegtran-bin`\n\n\n## Example usage\n\n```js\nvar execFile = require('child_process').execFile;\nvar jpegtranPath = require('jpegtran-bin').path;\n\nexecFile(jpegtranPath, ['-outfile', 'output.jpg', 'input.jpg'], function() {\n console.log('Image minified');\n});\n```\n\nCan also be run directly from `./node_modules/.bin/jpegtran`.\n\n\n## Dev\n\nNote to self on how to update the binaries.\n\n### OS X and Linux\n\n- Run `npm install` to build the binary.\n\nThe `nasm` (Netwide Assember) package is required to build the binary on Ubuntu.\n\n### Windows\n\n- Download the [Windows files 32/64-bit](http://sourceforge.net/projects/libjpeg-turbo/files/) (GCC compiled) on a Windows machine\n\n (current version 1.3.0, x64 `libjpeg-turbo-1.3.0-gcc64.exe` and for x86 `libjpeg-turbo-1.3.0-gcc.exe`)\n- Run the downloaded file to extract\n- In the extracted folder go to the `bin` folder and copy `jpegtran.exe` and `libjpeg-62.dll` to `jpegtran-bin\\vendor\\` folder\n \n (for `grunt-contrib-imagemin` the folder is `grunt-contrib-imagemin\\node_modules\\jpegtran-bin\\vendor\\`)\n\n\n## License\n\nEverything excluding the binaries licensed under the [BSD license](http://opensource.org/licenses/bsd-license.php) and copyright Google.\n\nlibjpeg-turbo licensed under the BSD license and copyright dcommander.\n", - "readmeFilename": "readme.md", - "_id": "jpegtran-bin@0.2.3", - "dist": { - "shasum": "81fa02d7b3330d5db57f369d4a316601220cd854" - }, - "_from": "jpegtran-bin@~0.2.0", - "_resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-0.2.3.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/readme.md deleted file mode 100644 index 4e32f68e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/readme.md +++ /dev/null @@ -1,52 +0,0 @@ -# node-jpegtran-bin [![Build Status](https://secure.travis-ci.org/yeoman/node-jpegtran-bin.png?branch=master)](http://travis-ci.org/yeoman/node-jpegtran-bin) - -jpegtran 1.3 (part of [libjpeg-turbo](http://libjpeg-turbo.virtualgl.org/)) Node.js wrapper that makes it seamlessly available as a local dependency on OS X, Linux, FreeBSD, Solaris and Windows. Most commonly used to losslessly minify JPEG images. - -> libjpeg-turbo is a derivative of libjpeg that uses SIMD instructions (MMX, SSE2, NEON) to accelerate baseline JPEG compression and decompression on x86, x86-64, and ARM systems. On such systems, libjpeg-turbo is generally 2-4x as fast as the unmodified version of libjpeg, all else being equal. - - -## Install - -- Install with [npm](https://npmjs.org/package/jpegtran-bin): `npm install --save jpegtran-bin` - - -## Example usage - -```js -var execFile = require('child_process').execFile; -var jpegtranPath = require('jpegtran-bin').path; - -execFile(jpegtranPath, ['-outfile', 'output.jpg', 'input.jpg'], function() { - console.log('Image minified'); -}); -``` - -Can also be run directly from `./node_modules/.bin/jpegtran`. - - -## Dev - -Note to self on how to update the binaries. - -### OS X and Linux - -- Run `npm install` to build the binary. - -The `nasm` (Netwide Assember) package is required to build the binary on Ubuntu. - -### Windows - -- Download the [Windows files 32/64-bit](http://sourceforge.net/projects/libjpeg-turbo/files/) (GCC compiled) on a Windows machine - - (current version 1.3.0, x64 `libjpeg-turbo-1.3.0-gcc64.exe` and for x86 `libjpeg-turbo-1.3.0-gcc.exe`) -- Run the downloaded file to extract -- In the extracted folder go to the `bin` folder and copy `jpegtran.exe` and `libjpeg-62.dll` to `jpegtran-bin\vendor\` folder - - (for `grunt-contrib-imagemin` the folder is `grunt-contrib-imagemin\node_modules\jpegtran-bin\vendor\`) - - -## License - -Everything excluding the binaries licensed under the [BSD license](http://opensource.org/licenses/bsd-license.php) and copyright Google. - -libjpeg-turbo licensed under the BSD license and copyright dcommander. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/fixtures/test.jpg b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/fixtures/test.jpg deleted file mode 100644 index 831b4375425dc371ee8922bdcefcdb247a067838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2139 zcma)63s4hB7~bR(60l<lqK?moD1u0myUT;*O0<|j0Zog5ipo^a<RB*`7cYkdeAGJl zsFa7+s;$;XM+=J9aavlHS_QFMpRG<2p-u<vXj>?)iX*MqbT2?kXSD4%+1r0N-~ZTu z|9^eWzBbU5=%sT2NJ)tSQUE{@7%dP30hH#zF{WRB4a(61#J?|uGA0m$@o<KU0EhBu zIG4aduNV0_yP(WtD;&J7fjPm>ET-gX4u)eq4#q7vXXxct(nh=ZHNa6!qeQhz)R2kk z2^=F(d<u#aC<+h&DkVS!EulD$3itGR35RQ>Uk-yZkG|R031pT6TV4_L&TGvFz}JSf zIXKQusMRiyisS=P*%+tVOS;vV3RQ#nX<j#J%cD5?Vk(z*nH0a)ol?kYyGb!uXGN`U zGv%O@i&-k8_?1jsah}a+S4^8KkM|N@r`t(!q}=PwcX<e}N#Qq6K$+iGE98C(muFJ+ z9Y4#OCO0!ICD*AmN*jt{a=l)KX?1!%7AuE2z||=H>6Mt4(7`ms$@`&z-dKAMk#0%q z_XSrbMgO4+3ky|+8WqFlsxhO{$lJhiC1fZ)MJ|r?DqWrl0~Rcl$Hvlbj%HkP-Xgh} zDd0>B7-`=ToNlW%VEC!oayt2Q`Pm*Wo%%bBr?NenMQ%!+PI;ID)<!}4gaKu{E#Svp zz~=kIx7*ZIKINoboCn?v7H|af93Vf{4Q~`iPFNUQ0k587F)84V%1+yfM9hq#sM%~Z z7>pQ}h#N3{T#{L@ovzU(8MFq&fNqM*!;vl<HK0rXtvmhMx^^3p!>~>gCXsfMxs-Z| zo67Z@B+M*Da+C!QlY+loC59<+EE6*jI8JCZQ&3puXdl(e*y)_20QKp;&`*VxWhXiE zf06wmFl;8n<PX%~Gg^=@kp3J}EWM1fC$WrE?!RGz9+Vk<qTW0`&a6pD)EMFnNd{D7 zv>3JK1Pi9oCh4?sihdpYpquzl9W`{W=F4$Vc@AvBn&-tpv%y86T`3prQ5H6%uL}(I zw-~UWhD|T<wZcb95P%R$LLvOZPahB=0s%iF9*Ecv2@h!iygFoy5kxEzi^PNe2~hrB z@SO%SDSVg05rGT{WdcMd@HK*s00`l$HVDBX66p}=?4SD*xD*9RLje#WBC#}NKnE^@ z1VTyJuy84mX|%&5Foi91gg$N-&Q7p2>Zsb_b;%*np8ydF1!DdU<{^MSWuk~MaS$d+ zm_;sa8;1K@z;g(6Dnn#o8emrRe!I3QGM?3q(G53kY4;pm5>}75SJz8>Qk;!rLN?x? z@_g`Wg)lq3v<!QLtTwifEzWKk{urseyA;27=S;>VVgxOFN!6Ngt@A>iwKsd*;}vTX zqr0c>uQ=a!d1Awbvape=aCNs+Se8}iTqK<{dt_|Twi&x0eBC_nV)@GKil953Ebotu z+U@OW+_h_0KihETcxY<*s7*Ig!<O!uxcZQB-o_!JXNP)!F3J62eX4`$Fx^#abc?o) zw}?U)I6@AII~!k=y$-T=JgGUhJnBF}zDxPx?YAQ$Rfl#rId*EJ%=?xepyNUdC(BBD zViO(9%cIt`XT6J#oZE9Tt?u~IBG(Pwj`$N#Mo+r2yE=B&_w3pEo&+nsk~u$T(E{x` zV$|$W4SQ!^Iy~xS;wJaWt>B0%V{2;t<mCK)GopcjB(cie5Fs*gQeCZ}q5ihy{Hd<v zJv&Rji6~pJ1QY$Ji*cRsfxWiwX_fi0ru)g)pLCq;c&M6rxoLr;d>-4qrDbly!H(<o zqKn({^$qW+79SqpHC7Y0&beWH&9KvJH|3OEyAm6@HFDR<hn?|LGw(;cvs*ed*NuMv zf*>+!UsiK(bLqU&mX&vpu*WK^#%*lw3dV=UZ~pEV5VPLWvbyxvTbsv?bPrkP_%r5G z!=u8|D)J+=H!6H#VWYcdgtFt~m0hMUDh_}3L9HbHr@g<|Ss#sCoAle4=dPS-ty*}q zxTY-TVD;xK)bE)d=e)|aRp6WAhSq%g<YMst*{LtI?0)lJ)q|@CRu$guK6u1;^Dnmc Bjrafn diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/minified.jpg b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/minified.jpg deleted file mode 100644 index 22f4cfdbadb7b99943bc0a530177b2c73d82155d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 927 zcmex=<NpH&0WUXCHwH#V1_nkTWcYuZ!5PSd0VW`Wi3vyo2?$_jVg>>r!2$xztYE+n z0vvDvG6ZA-PzNhBGb=kQ3oDW=Tp51G{{swy91KDXBFv0}3`~NI%z}*nk1$989mx!I zCjxM>b8vD4Wh?|37=R99VQ1lnN;0#svN1BTa|j8GFbIm8a4ISpo0%tbi5Z3{8=1Oz z1f~|XZ9M|iDFt*Y0~0gCNCtKwmxYZ3D5nOrn~|9X=o6ScBap=+$jT<9$Zja?XcU-O z`0)QN1|FcJm;{*x8SEM2zJCrAkC^iD#Fd;YA>V>K&mCRi&2qYHF^lp;)$IZWTG}Vp z*r+jda25pVnH*znd+@xY@NJEm_9wQ5>u$x~KAX18yF}-bQbX*H=4+8tE9U$<Ve{iR zOIP5HYOni&n`e2piAt&H#c0G&+{I;`^!8|jVq{3l2HBLD-?qH1vkUi!D<9lh#j*9T z=B+b@8djN^>9>z0-sw<v=Q;6uDW}B+A%`%THAh)HlG<&`os7RaZ#6N0JNI*WWz`1n zd?h9h-6O1F%oa(q9p@Jq_|<p4lk>b49d+9~bIX$*p5Cj~Pn-Bj3156=ab?S#4x1?* zhib)?cFDc&e6eHNGGDf^y3Ha+p9<2FkA67ZzP|qHrrgS38<UrQyRq8$LU2@k^c$@Q z(I&^f=!T?owHh03NtJn>dg*eBO52?0x!NpC6*o=PS-`;B+H%Zsjs^$MgxUHc?A+`< z^2zpZi{F}ZE^?OIE|SFgqAcWT^`AEW7ylU&9wghonYjG&y6@|+>@<3}c3a17-My-2 zQ!ixg`trfi=o!z#4@<pgtaiV9xGgE*oFVhwrV4>WIu~X|9&OolWb^TTw(ah_=DG55 z&q?i?aCq}c2bC3XdSvAH2=*9O`q#XD8+J+L^4h4o2i2U?C&kQDU=4UNCqQt{#!1eX zJ~0-ZvhUh#vhUr;lDB4V^IKkZfBMxY+RSGAqj+EQ_iuIE!%kh1b@$~zdn^CMcTwrX zvghZv@AQv<TC3B$YSoH8HToqr-^={>e>gtVV@~_h&-+(qnyp&t{4x0Ze5rby-`>CP Le}5Yq|NkZcl^sW1 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/test-build.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/test-build.js deleted file mode 100644 index 3788b95d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/test-build.js +++ /dev/null @@ -1,30 +0,0 @@ -/*global describe, it */ -'use strict'; - -var assert = require('assert'); -var Bin = require('bin-wrapper'); -var fs = require('fs'); -var options = require('../lib/jpegtran').options; -var path = require('path'); - -describe('jpegtran.build()', function () { - it('should rebuild the jpegtran binaries', function (cb) { - this.timeout(false); - var bin = new Bin(options); - - bin.path = path.join(__dirname, '../tmp', bin.bin); - bin.buildScript = './configure --disable-shared --prefix="' + bin.path + '" && ' + 'make install'; - - bin.build(function (err) { - if (err) { - cb(err); - } - - var origCTime = fs.statSync(bin.path).ctime; - var actualCTime = fs.statSync(bin.path).ctime; - - assert(actualCTime !== origCTime); - cb(); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/test-path.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/test-path.js deleted file mode 100644 index db3690f1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/test/test-path.js +++ /dev/null @@ -1,49 +0,0 @@ -/*global describe, it, after */ -'use strict'; - -var assert = require('assert'); -var execFile = require('child_process').execFile; -var fs = require('fs'); -var path = require('path'); - -describe('jpegtran()', function () { - after(function () { - fs.unlinkSync('test/minified.jpg'); - }); - - it('should return path to jpegtran binary', function (cb) { - var binPath = require('../lib/jpegtran').path; - - execFile(binPath, ['-v', '-'], function (err, stdout, stderr) { - assert(stderr.toString().indexOf('libjpeg-turbo') !== -1); - cb(); - }); - }); - - it('should successfully proxy jpegtran', function (cb) { - var binPath = path.join(__dirname, '../bin/jpegtran.js'); - - execFile('node', [binPath, '-v', '-'], function (err, stdout, stderr) { - assert(stderr.toString().indexOf('libjpeg-turbo') !== -1); - cb(); - }); - }); - - it('should minify a .jpg', function (cb) { - var binPath = path.join(__dirname, '../bin/jpegtran.js'); - var args = [ - '-copy', 'none', - '-optimize', - '-outfile', path.join(__dirname, 'minified.jpg'), - path.join(__dirname, 'fixtures', 'test.jpg') - ]; - - execFile('node', [binPath].concat(args), function () { - var actual = fs.statSync('test/minified.jpg').size; - var original = fs.statSync('test/fixtures/test.jpg').size; - - assert(actual < original); - cb(); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/vendor/jpegtran b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/jpegtran-bin/vendor/jpegtran deleted file mode 100755 index 04d0dfe411f1f41a24626cdba2d8383989f5f7df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137944 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 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/.npmignore deleted file mode 100644 index 9303c347..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/.travis.yml deleted file mode 100644 index 84fd7ca2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.9 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/examples/pow.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e6924212..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/index.js deleted file mode 100644 index fda6de8a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/index.js +++ /dev/null @@ -1,82 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/package.json deleted file mode 100644 index 221a22e3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "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.5" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/readme.markdown b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/readme.markdown deleted file mode 100644 index 83b0216a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/readme.markdown +++ /dev/null @@ -1,63 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/mkdirp/test/chmod.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 520dcb8e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,38 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/test/clobber.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 0eb70998..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/test/mkdirp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index b07cd70c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/test/perm.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/perm.js deleted file mode 100644 index 23a7abbd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/test/perm_sync.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index f685f609..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,39 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/test/race.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/race.js deleted file mode 100644 index 96a04476..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,41 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/test/rel.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 79858243..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/test/return.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/return.js deleted file mode 100644 index bce68e56..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/return.js +++ /dev/null @@ -1,25 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/test/return_sync.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/return_sync.js deleted file mode 100644 index 7c222d35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/return_sync.js +++ /dev/null @@ -1,24 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/test/root.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/root.js deleted file mode 100644 index 97ad7a2f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/root.js +++ /dev/null @@ -1,18 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/test/sync.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/sync.js deleted file mode 100644 index 7530cada..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,32 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/test/umask.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 64ccafe2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mkdirp/test/umask_sync.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index 35bd5cbb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,32 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/mout/.editorconfig b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.editorconfig deleted file mode 100644 index e036e247..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -; EditorConfig is awesome: http://EditorConfig.org - -; top-most EditorConfig file -root = true - -; base rules -[*] -end_of_line = lf -insert_final_newline = false -indent_style = space -indent_size = 4 -charset = utf-8 -trim_trailing_whitespace = true - -; The default indent on package.json is 2 spaces, better to keep it so we can -; use `npm install --save` and other features that rewrites the package.json -; file automatically -[package.json] -indent_style = space -indent_size = 2 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.jshintrc b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.jshintrc deleted file mode 100644 index bbdb29cf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.jshintrc +++ /dev/null @@ -1,69 +0,0 @@ -{ - // Settings - "passfail" : false, // Stop on first error. - "maxerr" : 50, // Maximum error before stopping. - - - // Predefined globals whom JSHint will ignore. - "browser" : true, // Standard browser globals e.g. `window`, `document`. - "couch" : false, - "dojo" : false, - "jquery" : true, - "mootools" : false, - "node" : false, - "prototypejs" : false, - "rhino" : false, - "wsh" : false, - - // Custom globals. - "predef" : [ - "define", - "require" - ], - - - // Development. - "debug" : false, // Allow debugger statements e.g. browser breakpoints. - "devel" : false, // Allow developments statements e.g. `console.log();`. - - - // EcmaScript 5. - "es5" : false, // Allow EcmaScript 5 syntax. - "globalstrict" : false, // Allow global "use strict" (also enables 'strict'). - "strict" : false, // Require `use strict` pragma in every file. - - - // The Good Parts. - "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons). - "bitwise" : false, // Prohibit bitwise operators (&, |, ^, etc.). - "boss" : true, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. - "curly" : false, // Require {} for every new block or scope. - "eqeqeq" : true, // Require triple equals i.e. `===`. - "eqnull" : true, // Tolerate use of `== null`. - "evil" : false, // Tolerate use of `eval`. - "expr" : false, // Tolerate `ExpressionStatement` as Programs. - "forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`. - "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` - "latedef" : false, // Prohibit variable use before definition. - "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. - "loopfunc" : false, // Allow functions to be defined within loops. - "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. - "regexdash" : true, // Tolerate unescaped last dash i.e. `[-...]`. - "regexp" : false, // Prohibit `.` and `[^...]` in regular expressions. - "scripturl" : false, // Tolerate script-targeted URLs. - "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. - "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. - "undef" : false, // Require all non-global variables be declared before they are used. - - - // Personal styling prefrences. - "newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`. - "noempty" : true, // Prohipit use of empty blocks. - "nomen" : false, // Prohibit use of initial or trailing underbars in names. - "nonew" : true, // Prohibit use of constructors for side-effects. - "onevar" : false, // Allow only one `var` statement per function. - "plusplus" : false, // Prohibit use of `++` & `--`. - "sub" : false, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. - "trailing" : true, // Prohibit trailing whitespaces. - "white" : false // Check against strict whitespace and indentation rules. -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.npmignore deleted file mode 100644 index 1341acd9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.npmignore +++ /dev/null @@ -1,30 +0,0 @@ -# dumb files -# ========== - -.tmp* -.project -.settings/ -.livereload -.DS_Store? -ehthumbs.db -Icon? -Thumbs.db - - -# stuff not needed by node -# ======================== - -node_modules/ -tests/ -_build/ -doc_html/ -coverage/ - -# we keep the doc/ folder in case npm decides to display it in the future -# also good in case user is using an old version or working offline - -# we also keep the src/ folder in case the user still needs the AMD modules -# after build (see issue #102) - -bower.json -build.js diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.travis.yml deleted file mode 100644 index 324041b4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ - language: node_js - node_js: - - "0.8" - script: - - "npm test --coverage" - - "jshint src" - notifications: - irc: - channels: - - "irc.freenode.org#moutjs" - on_success: always - on_failure: always - use_notice: true - skip_join: true - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/CHANGELOG.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/CHANGELOG.md deleted file mode 100644 index 6ce1d6f3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/CHANGELOG.md +++ /dev/null @@ -1,116 +0,0 @@ -mout changelog -============== - -v0.7.1 (2013/09/18) -------------------- - - - fix `null` value handling in object/get. - -v0.7.0 (2013/09/05) -------------------- - - - add bower ignores. - - add german translation for date localization. - - alias `function` package as `fn` since "function" is a reserved keyword. - - allow second argument on `array/pick`. - - improve `string/makePath` to not remove "//" after protocol. - - make sure methods inside `number` package works with mixed types. - - support arrays on `queryString/encode`. - - support multiple values for same property on `queryString/decode`. - - add `cancel()` method to `throttled/debounced` functions. - - add `function/times`. - - add `lang/toNumber`. - - add `string/insert`. - - add `super_` to constructor on `lang/inheritPrototype`. - - -v0.6.0 (2013/05/22) -------------------- - - - add optional delimeter to `string/unCamelCase` - - allow custom char on `number/pad` - - allow underscore characters in `string/removeNonWord` - - accept `level` on `array/flatten` instead of a flag - - convert underscores to camelCase in `string/camelCase` - - remove `create()` from number/currencyFormat - - add `date/dayOfTheYear` - - add `date/diff` - - add `date/isSame` - - add `date/startOf` - - add `date/strftime` - - add `date/timezoneAbbr` - - add `date/timezoneOffset` - - add `date/totalDaysInYear` - - add `date/weekOfTheYear` - - add `function/timeout` - - add `object/bindAll` - - add `object/functions` - - add `time/convert` - - -v0.5.0 (2013/04/04) -------------------- - - - add `array/collect` - - add `callback` parameter to `object/equals` and `object/deepEquals` to allow - custom compare operations. - - normalize behavior in `array/*` methods to treat `null` values as empty - arrays when reading from array - - add `date/parseIso` - - add `date/isLeapYear` - - add `date/totalDaysInMonth` - - add `object/deepMatches` - - change `function/makeIterator_` to use `deepMatches` (affects nearly all - iteration methods) - - add `thisObj` parameter to `array/min` and `array/max` - - -v0.4.0 (2013/02/26) -------------------- - - - add `object/equals` - - add `object/deepEquals` - - add `object/matches`. - - add `lang/is` and `lang/isnt`. - - add `lang/isInteger`. - - add `array/findIndex`. - - add shorthand syntax to `array/*`, `object/*` and `collection/*` methods. - - improve `number/sign` behavior when value is NaN or +0 or -0. - - improve `lang/isNaN` to actually check if value *is not a number* without - coercing value; so `[]`, `""`, `null` and `"12"` are considered NaN (#39). - - improve `string/contains` to match ES6 behavior (add fromIndex argument). - - -v0.3.0 (2013/02/01) -------------------- - - - add `lang/clone`. - - add `lang/toString`. - - add `string/replace`. - - add `string/WHITE_SPACES` - - rename `function/curry` to `function/partial`. - - allow custom chars in `string/trim`, `ltrim`, and `rtrim`. - - convert values to strings in the `string/*` functions. - - -v0.2.0 (2013/01/13) -------------------- - - - fix bug in `math/ceil` for negative radixes. - - change `object/deepFillIn` and `object/deepMixIn` to recurse only if both - existing and new values are plain objects. Will not recurse into arrays - or objects not created by the Object constructor. - - add `lang/isPlainObject` to check if a file is a valid object and is created - by the Object constructor - - change `lang/clone` behavior when dealing with custom types (avoid cloning - it by default) and add second argument to allow custom behavior if needed. - - rename `lang/clone` to `lang/deepClone`. - - add VERSION property to index.js - - simplify `math/floor`, `math/round`, `math/ceil` and `math/countSteps`. - - -v0.1.0 (2013/01/09) -------------------- - -- Rename project from "amd-utils" to "mout" - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/CONTRIBUTING.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/CONTRIBUTING.md deleted file mode 100644 index 65d9add1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/CONTRIBUTING.md +++ /dev/null @@ -1,61 +0,0 @@ -# Contributing - -Fork the repo at https://github.com/mout/mout - - > "Write clearly, don't be too clever" - The Elements of Programming Style - -Avoid unnamed functions and follow the other modules structure. By only using named functions it will be easier to extract the code from the AMD module if needed and it will also give better error messages, JavaScript minifiers like [Google Closure Compiler](http://code.google.com/closure/compiler/) and [UglifyJS](https://github.com/mishoo/UglifyJS) will make sure code is as small/optimized as possible. - - > "Make it clear before you make it faster." - The Elements of Programming Style - -Be sure to always create tests for each proposed module. Features will only be merged if they contain proper tests and documentation. - - > "Good code is its own best documentation." - Steve McConnell - -We should do a code review before merging to make sure names makes sense and implementation is as good as possible. - -Try to split your pull requests into logical groups, the smaller the easier to be reviewed/merged. - - - -## Tests & Code Coverage ## - -Tests can be found inside the `tests` folder, to execute them in the browser open the `tests/runner.html`. The same tests also work on node.js by running `npm test`. - -We should have tests for all methods and ensure we have a high code coverage through our continuous integration server ([travis](https://travis-ci.org/mout/mout)). When you ask for a pull request Travis will automatically run the tests on node.js and check the code coverage as well. - -We run `node build pkg` automatically before any `npm test`, so specs and packages should always be in sync. (will avoid human mistakes) - -To check code coverage run `npm test --coverage`, it will generate the reports inside the `coverage` folder and also log the results. Please note that node.js doesn't execute all code branches since we have some conditionals that are only met on old JavaScript engines (eg. IE 7-8), so we will never have 100% code coverage (but should be close to it). - - - -## Build Script ## - -The [build script](https://github.com/mout/mout/wiki/Build-Script) can be extremely helpful and can avoid human mistakes, use it. - - - -## Admins / Pull Requests ## - -Even if you are an admin (have commit rights) please do pull requests when adding new features or changing current behavior, that way we can review the work and discuss. Feel free to push changes that doesn't affect behavior without asking for a pull request (readme, changelog, build script, typos, refactoring, ...). - - - -## Large changes ## - -If you are proposing some major change, please create an issue to discuss it first. (maybe it's outside the scope of the project) - - - -## Questions / IRC / Wiki / Issue Tracker ## - -When in doubt ask someone on IRC to help you ([#moutjs on irc.freenode.net](http://webchat.freenode.net/?channels=moutjs)) or create a [new issue](http://github.com/mout/mout/issues). - -The [project wiki](https://github.com/mout/mout/wiki) can also be a good resource of information. - - ---- - -Check the [contributors list at github](https://github.com/mout/mout/contributors). - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/LICENSE.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/LICENSE.md deleted file mode 100644 index e9ccc2be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -# The MIT License (MIT) -## Copyright (c) 2012, 2013 moutjs team and contributors (http://moutjs.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-imagemin/node_modules/image-min/node_modules/mout/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/README.md deleted file mode 100644 index 872943bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/README.md +++ /dev/null @@ -1,63 +0,0 @@ -![mout](http://moutjs.com/logo.png "Modular JavaScript Utilties") - -http://moutjs.com/ - -[![Build Status](https://travis-ci.org/mout/mout.png?branch=master)](https://travis-ci.org/mout/mout) - -All code is library agnostic and consist mostly of helper methods that aren't -directly related with the DOM, the purpose of this library isn't to replace -Dojo, jQuery, YUI, Mootools, etc, but to provide modular solutions for common -problems that aren't solved by most of them. Consider it as a crossbrowser -JavaScript standard library. - - - -## Main goals ## - - - increase code reuse; - - be clear (code should be clean/readable); - - be easy to debug; - - be easy to maintain; - - follow best practices; - - follow standards when possible; - - **don't convert JavaScript into another language!** - - be compatible with other frameworks; - - be modular; - - have unit tests for all modules; - - work on multiple environments (IE7+, modern browsers, node.js); - - - -## What shouldn't be here ## - - - UI components; - - CSS selector engine; - - Event system - pub/sub; - - Template engine; - - Anything that isn't generic enough to be on a standard library; - - Anything that could be a separate library and/or isn't a modular utility... - - - -## API Documentation ## - -Online documentation can be found at http://moutjs.com/ or inside the -`doc` folder. - - - -## FAQ / Wiki / IRC ## - -For more info about project structure, design decisions, tips, how to -contribute, build system, etc, please check the [project -wiki](https://github.com/mout/mout/wiki). - -We also have an IRC channel [#moutjs on -irc.freenode.net](http://webchat.freenode.net/?channels=moutjs) - - - -## License ## - -Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php). - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array.js deleted file mode 100644 index 89d388ba..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array.js +++ /dev/null @@ -1,46 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'append' : require('./array/append'), - 'collect' : require('./array/collect'), - 'combine' : require('./array/combine'), - 'compact' : require('./array/compact'), - 'contains' : require('./array/contains'), - 'difference' : require('./array/difference'), - 'every' : require('./array/every'), - 'filter' : require('./array/filter'), - 'find' : require('./array/find'), - 'findIndex' : require('./array/findIndex'), - 'flatten' : require('./array/flatten'), - 'forEach' : require('./array/forEach'), - 'indexOf' : require('./array/indexOf'), - 'insert' : require('./array/insert'), - 'intersection' : require('./array/intersection'), - 'invoke' : require('./array/invoke'), - 'join' : require('./array/join'), - 'lastIndexOf' : require('./array/lastIndexOf'), - 'map' : require('./array/map'), - 'max' : require('./array/max'), - 'min' : require('./array/min'), - 'pick' : require('./array/pick'), - 'pluck' : require('./array/pluck'), - 'range' : require('./array/range'), - 'reduce' : require('./array/reduce'), - 'reduceRight' : require('./array/reduceRight'), - 'reject' : require('./array/reject'), - 'remove' : require('./array/remove'), - 'removeAll' : require('./array/removeAll'), - 'shuffle' : require('./array/shuffle'), - 'some' : require('./array/some'), - 'sort' : require('./array/sort'), - 'split' : require('./array/split'), - 'toLookup' : require('./array/toLookup'), - 'union' : require('./array/union'), - 'unique' : require('./array/unique'), - 'xor' : require('./array/xor'), - 'zip' : require('./array/zip') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/append.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/append.js deleted file mode 100644 index bf74037e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/append.js +++ /dev/null @@ -1,21 +0,0 @@ - - - /** - * Appends an array to the end of another. - * The first array will be modified. - */ - function append(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var pad = arr1.length, - i = -1, - len = arr2.length; - while (++i < len) { - arr1[pad + i] = arr2[i]; - } - return arr1; - } - module.exports = append; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/collect.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/collect.js deleted file mode 100644 index 58637493..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/collect.js +++ /dev/null @@ -1,27 +0,0 @@ -var append = require('./append'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Maps the items in the array and concatenates the result arrays. - */ - function collect(arr, callback, thisObj){ - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - var value = callback(arr[i], i, arr); - if (value != null) { - append(results, value); - } - } - - return results; - } - - module.exports = collect; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/combine.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/combine.js deleted file mode 100644 index d66e6212..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/combine.js +++ /dev/null @@ -1,22 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Combines an array with all the items of another. - * Does not allow duplicates and is case and type sensitive. - */ - function combine(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var i = -1, len = arr2.length; - while (++i < len) { - if (indexOf(arr1, arr2[i]) === -1) { - arr1.push(arr2[i]); - } - } - - return arr1; - } - module.exports = combine; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/compact.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/compact.js deleted file mode 100644 index 74c176ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/compact.js +++ /dev/null @@ -1,13 +0,0 @@ -var filter = require('./filter'); - - /** - * Remove all null/undefined items from array. - */ - function compact(arr) { - return filter(arr, function(val){ - return (val != null); - }); - } - - module.exports = compact; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/contains.js deleted file mode 100644 index 92bb6ad9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/contains.js +++ /dev/null @@ -1,10 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * If array contains values. - */ - function contains(arr, val) { - return indexOf(arr, val) !== -1; - } - module.exports = contains; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/difference.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/difference.js deleted file mode 100644 index d0570510..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/difference.js +++ /dev/null @@ -1,22 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var some = require('./some'); -var contains = require('./contains'); - - - /** - * Return a new Array with elements that aren't present in the other Arrays. - */ - function difference(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return !some(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - module.exports = difference; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/every.js deleted file mode 100644 index ac598832..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/every.js +++ /dev/null @@ -1,27 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array every - */ - function every(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (!callback(arr[i], i, arr) ) { - result = false; - break; - } - } - - return result; - } - - module.exports = every; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/filter.js deleted file mode 100644 index f0e74199..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/filter.js +++ /dev/null @@ -1,26 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array filter - */ - function filter(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - module.exports = filter; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/find.js deleted file mode 100644 index b4a73131..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/find.js +++ /dev/null @@ -1,13 +0,0 @@ -var findIndex = require('./findIndex'); - - /** - * Returns first item that matches criteria - */ - function find(arr, iterator, thisObj){ - var idx = findIndex(arr, iterator, thisObj); - return idx >= 0? arr[idx] : void(0); - } - - module.exports = find; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/findIndex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/findIndex.js deleted file mode 100644 index 53f22a5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/findIndex.js +++ /dev/null @@ -1,23 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Returns the index of the first item that matches criteria - */ - function findIndex(arr, iterator, thisObj){ - iterator = makeIterator(iterator, thisObj); - if (arr == null) { - return -1; - } - - var i = -1, len = arr.length; - while (++i < len) { - if (iterator(arr[i], i, arr)) { - return i; - } - } - - return -1; - } - - module.exports = findIndex; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/flatten.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/flatten.js deleted file mode 100644 index aa9757ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/flatten.js +++ /dev/null @@ -1,43 +0,0 @@ -var isArray = require('../lang/isArray'); -var append = require('./append'); - - /* - * Helper function to flatten to a destination array. - * Used to remove the need to create intermediate arrays while flattening. - */ - function flattenTo(arr, result, level) { - if (arr == null) { - return result; - } else if (level === 0) { - append(result, arr); - return result; - } - - var value, - i = -1, - len = arr.length; - while (++i < len) { - value = arr[i]; - if (isArray(value)) { - flattenTo(value, result, level - 1); - } else { - result.push(value); - } - } - return result; - } - - /** - * Recursively flattens an array. - * A new array containing all the elements is returned. - * If `shallow` is true, it will only flatten one level. - */ - function flatten(arr, level) { - level = level == null? -1 : level; - return flattenTo(arr, [], level); - } - - module.exports = flatten; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/forEach.js deleted file mode 100644 index 268e506f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/forEach.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Array forEach - */ - function forEach(arr, callback, thisObj) { - if (arr == null) { - return; - } - var i = -1, - len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback.call(thisObj, arr[i], i, arr) === false ) { - break; - } - } - } - - module.exports = forEach; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/indexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/indexOf.js deleted file mode 100644 index 6a9ac832..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/indexOf.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Array.indexOf - */ - function indexOf(arr, item, fromIndex) { - fromIndex = fromIndex || 0; - if (arr == null) { - return -1; - } - - var len = arr.length, - i = fromIndex < 0 ? len + fromIndex : fromIndex; - while (i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[i] === item) { - return i; - } - - i++; - } - - return -1; - } - - module.exports = indexOf; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/insert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/insert.js deleted file mode 100644 index f1f95b75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/insert.js +++ /dev/null @@ -1,15 +0,0 @@ -var difference = require('./difference'); -var toArray = require('../lang/toArray'); - - /** - * Insert item into array if not already present. - */ - function insert(arr, rest_items) { - var diff = difference(toArray(arguments).slice(1), arr); - if (diff.length) { - Array.prototype.push.apply(arr, diff); - } - return arr.length; - } - module.exports = insert; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/intersection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/intersection.js deleted file mode 100644 index e6170062..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/intersection.js +++ /dev/null @@ -1,23 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var every = require('./every'); -var contains = require('./contains'); - - - /** - * Return a new Array with elements common to all Arrays. - * - based on underscore.js implementation - */ - function intersection(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return every(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - module.exports = intersection; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/invoke.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/invoke.js deleted file mode 100644 index d7be6cdc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/invoke.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Call `methodName` on each item of the array passing custom arguments if - * needed. - */ - function invoke(arr, methodName, var_args){ - if (arr == null) { - return arr; - } - - var args = Array.prototype.slice.call(arguments, 2); - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - value[methodName].apply(value, args); - } - - return arr; - } - - module.exports = invoke; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/join.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/join.js deleted file mode 100644 index 71d8bd20..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/join.js +++ /dev/null @@ -1,17 +0,0 @@ -var filter = require('./filter'); - - function isValidString(val) { - return (val != null && val !== ''); - } - - /** - * Joins strings with the specified separator inserted between each value. - * Null values and empty strings will be excluded. - */ - function join(items, separator) { - separator = separator || ''; - return filter(items, isValidString).join(separator); - } - - module.exports = join; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/lastIndexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/lastIndexOf.js deleted file mode 100644 index ee44a25b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/lastIndexOf.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Array lastIndexOf - */ - function lastIndexOf(arr, item, fromIndex) { - if (arr == null) { - return -1; - } - - var len = arr.length; - fromIndex = (fromIndex == null || fromIndex >= len)? len - 1 : fromIndex; - fromIndex = (fromIndex < 0)? len + fromIndex : fromIndex; - - while (fromIndex >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[fromIndex] === item) { - return fromIndex; - } - fromIndex--; - } - - return -1; - } - - module.exports = lastIndexOf; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/map.js deleted file mode 100644 index 7b7fb331..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/map.js +++ /dev/null @@ -1,22 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array map - */ - function map(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null){ - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - results[i] = callback(arr[i], i, arr); - } - - return results; - } - - module.exports = map; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/max.js deleted file mode 100644 index 0b8f2594..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/max.js +++ /dev/null @@ -1,34 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Return maximum value inside array - */ - function max(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return Infinity; - } else if (arr.length && !iterator) { - return Math.max.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = -Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp > compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - module.exports = max; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/min.js deleted file mode 100644 index ed6cc6a1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/min.js +++ /dev/null @@ -1,34 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Return minimum value inside array - */ - function min(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return -Infinity; - } else if (arr.length && !iterator) { - return Math.min.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp < compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - module.exports = min; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/pick.js deleted file mode 100644 index 64086784..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/pick.js +++ /dev/null @@ -1,31 +0,0 @@ -var randInt = require('../random/randInt'); - - /** - * Remove random item(s) from the Array and return it. - * Returns an Array of items if [nItems] is provided or a single item if - * it isn't specified. - */ - function pick(arr, nItems){ - if (nItems != null) { - var result = []; - if (nItems > 0 && arr && arr.length) { - nItems = nItems > arr.length? arr.length : nItems; - while (nItems--) { - result.push( pickOne(arr) ); - } - } - return result; - } - return (arr && arr.length)? pickOne(arr) : void(0); - } - - - function pickOne(arr){ - var idx = randInt(0, arr.length - 1); - return arr.splice(idx, 1)[0]; - } - - - module.exports = pick; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/pluck.js deleted file mode 100644 index fef4043b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -var map = require('./map'); - - /** - * Extract a list of property values. - */ - function pluck(arr, propName){ - return map(arr, propName); - } - - module.exports = pluck; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/range.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/range.js deleted file mode 100644 index 31d3c770..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/range.js +++ /dev/null @@ -1,27 +0,0 @@ -var countSteps = require('../math/countSteps'); - - /** - * Returns an Array of numbers inside range. - */ - function range(start, stop, step) { - if (stop == null) { - stop = start; - start = 0; - } - step = step || 1; - - var result = [], - nSteps = countSteps(stop - start, step), - i = start; - - while (i <= stop) { - result.push(i); - i += step; - } - - return result; - } - - module.exports = range; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/reduce.js deleted file mode 100644 index 827f428f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/reduce.js +++ /dev/null @@ -1,33 +0,0 @@ - - - /** - * Array reduce - */ - function reduce(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2, - result = initVal; - - if (arr == null || !arr.length) { - if (!hasInit) { - throw new Error('reduce of empty array with no initial value'); - } else { - return initVal; - } - } - - var i = -1, len = arr.length; - while (++i < len) { - if (!hasInit) { - result = arr[i]; - hasInit = true; - } else { - result = fn(result, arr[i], i, arr); - } - } - - return result; - } - - module.exports = reduce; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/reduceRight.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/reduceRight.js deleted file mode 100644 index e36fd4aa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/reduceRight.js +++ /dev/null @@ -1,34 +0,0 @@ - - - /** - * Array reduceRight - */ - function reduceRight(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2; - - if (arr == null || !arr.length) { - if (hasInit) { - return initVal; - } else { - throw new Error('reduce of empty array with no initial value'); - } - } - - var i = arr.length, result = initVal, value; - while (--i >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - value = arr[i]; - if (!hasInit) { - result = value; - hasInit = true; - } else { - result = fn(result, value, i, arr); - } - } - return result; - } - - module.exports = reduceRight; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/reject.js deleted file mode 100644 index 0cfc8b1a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/reject.js +++ /dev/null @@ -1,25 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array reject - */ - function reject(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (!callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - module.exports = reject; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/remove.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/remove.js deleted file mode 100644 index aa6517db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/remove.js +++ /dev/null @@ -1,13 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Remove a single item from the array. - * (it won't remove duplicates, just a single item) - */ - function remove(arr, item){ - var idx = indexOf(arr, item); - if (idx !== -1) arr.splice(idx, 1); - } - - module.exports = remove; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/removeAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/removeAll.js deleted file mode 100644 index d5f7f3b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/removeAll.js +++ /dev/null @@ -1,15 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Remove all instances of an item from array. - */ - function removeAll(arr, item){ - var idx = indexOf(arr, item); - while (idx !== -1) { - arr.splice(idx, 1); - idx = indexOf(arr, item, idx); - } - } - - module.exports = removeAll; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/shuffle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/shuffle.js deleted file mode 100644 index 99d0660f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/shuffle.js +++ /dev/null @@ -1,28 +0,0 @@ -var randInt = require('../random/randInt'); - - /** - * Shuffle array items. - */ - function shuffle(arr) { - var results = [], - rnd; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - if (!i) { - results[0] = arr[0]; - } else { - rnd = randInt(0, i); - results[i] = results[rnd]; - results[rnd] = arr[i]; - } - } - - return results; - } - - module.exports = shuffle; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/some.js deleted file mode 100644 index 8d17772b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/some.js +++ /dev/null @@ -1,27 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array some - */ - function some(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback(arr[i], i, arr) ) { - result = true; - break; - } - } - - return result; - } - - module.exports = some; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/sort.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/sort.js deleted file mode 100644 index 7807339b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/sort.js +++ /dev/null @@ -1,55 +0,0 @@ - - - /** - * Merge sort (http://en.wikipedia.org/wiki/Merge_sort) - */ - function mergeSort(arr, compareFn) { - if (arr == null) { - return []; - } else if (arr.length < 2) { - return arr; - } - - if (compareFn == null) { - compareFn = defaultCompare; - } - - var mid, left, right; - - mid = ~~(arr.length / 2); - left = mergeSort( arr.slice(0, mid), compareFn ); - right = mergeSort( arr.slice(mid, arr.length), compareFn ); - - return merge(left, right, compareFn); - } - - function defaultCompare(a, b) { - return a < b ? -1 : (a > b? 1 : 0); - } - - function merge(left, right, compareFn) { - var result = []; - - while (left.length && right.length) { - if (compareFn(left[0], right[0]) <= 0) { - // if 0 it should preserve same order (stable) - result.push(left.shift()); - } else { - result.push(right.shift()); - } - } - - if (left.length) { - result.push.apply(result, left); - } - - if (right.length) { - result.push.apply(result, right); - } - - return result; - } - - module.exports = mergeSort; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/split.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/split.js deleted file mode 100644 index 4f3ba50c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/split.js +++ /dev/null @@ -1,35 +0,0 @@ - - - /** - * Split array into a fixed number of segments. - */ - function split(array, segments) { - segments = segments || 2; - var results = []; - if (array == null) { - return results; - } - - var minLength = Math.floor(array.length / segments), - remainder = array.length % segments, - i = 0, - len = array.length, - segmentIndex = 0, - segmentLength; - - while (i < len) { - segmentLength = minLength; - if (segmentIndex < remainder) { - segmentLength++; - } - - results.push(array.slice(i, i + segmentLength)); - - segmentIndex++; - i += segmentLength; - } - - return results; - } - module.exports = split; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/toLookup.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/toLookup.js deleted file mode 100644 index ce4c55dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/toLookup.js +++ /dev/null @@ -1,28 +0,0 @@ -var isFunction = require('../lang/isFunction'); - - /** - * Creates an object that holds a lookup for the objects in the array. - */ - function toLookup(arr, key) { - var result = {}; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length, value; - if (isFunction(key)) { - while (++i < len) { - value = arr[i]; - result[key(value)] = value; - } - } else { - while (++i < len) { - value = arr[i]; - result[value[key]] = value; - } - } - - return result; - } - module.exports = toLookup; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/union.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/union.js deleted file mode 100644 index f1334a91..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/union.js +++ /dev/null @@ -1,19 +0,0 @@ -var unique = require('./unique'); -var append = require('./append'); - - /** - * Concat multiple arrays and remove duplicates - */ - function union(arrs) { - var results = []; - var i = -1, len = arguments.length; - while (++i < len) { - append(results, arguments[i]); - } - - return unique(results); - } - - module.exports = union; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/unique.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/unique.js deleted file mode 100644 index 0192b2df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/unique.js +++ /dev/null @@ -1,17 +0,0 @@ -var indexOf = require('./indexOf'); -var filter = require('./filter'); - - /** - * @return {array} Array of unique items - */ - function unique(arr){ - return filter(arr, isUnique); - } - - function isUnique(item, i, arr){ - return indexOf(arr, item, i+1) === -1; - } - - module.exports = unique; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/xor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/xor.js deleted file mode 100644 index c125a996..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/xor.js +++ /dev/null @@ -1,26 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var contains = require('./contains'); - - - /** - * Exclusive OR. Returns items that are present in a single array. - * - like ptyhon's `symmetric_difference` - */ - function xor(arr1, arr2) { - arr1 = unique(arr1); - arr2 = unique(arr2); - - var a1 = filter(arr1, function(item){ - return !contains(arr2, item); - }), - a2 = filter(arr2, function(item){ - return !contains(arr1, item); - }); - - return a1.concat(a2); - } - - module.exports = xor; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/zip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/zip.js deleted file mode 100644 index 8bce9c07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/array/zip.js +++ /dev/null @@ -1,28 +0,0 @@ -var max = require('./max'); -var map = require('./map'); - - function getLength(arr) { - return arr == null ? 0 : arr.length; - } - - /** - * Merges together the values of each of the arrays with the values at the - * corresponding position. - */ - function zip(arr){ - var len = arr ? max(map(arguments, getLength)) : 0, - results = [], - i = -1; - while (++i < len) { - // jshint loopfunc: true - results.push(map(arguments, function(item) { - return item == null ? undefined : item[i]; - })); - } - - return results; - } - - module.exports = zip; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection.js deleted file mode 100644 index d5cf6cad..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection.js +++ /dev/null @@ -1,22 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'contains' : require('./collection/contains'), - 'every' : require('./collection/every'), - 'filter' : require('./collection/filter'), - 'find' : require('./collection/find'), - 'forEach' : require('./collection/forEach'), - 'make_' : require('./collection/make_'), - 'map' : require('./collection/map'), - 'max' : require('./collection/max'), - 'min' : require('./collection/min'), - 'pluck' : require('./collection/pluck'), - 'reduce' : require('./collection/reduce'), - 'reject' : require('./collection/reject'), - 'size' : require('./collection/size'), - 'some' : require('./collection/some') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/contains.js deleted file mode 100644 index a73f994b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/contains.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrContains = require('../array/contains'); -var objContains = require('../object/contains'); - - /** - */ - module.exports = make(arrContains, objContains); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/every.js deleted file mode 100644 index 300e03c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/every.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrEvery = require('../array/every'); -var objEvery = require('../object/every'); - - /** - */ - module.exports = make(arrEvery, objEvery); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/filter.js deleted file mode 100644 index 38757005..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/filter.js +++ /dev/null @@ -1,23 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * filter collection values, returns array. - */ - function filter(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - var results = []; - if (!list) { - return results; - } - forEach(list, function(value, index, list) { - if (iterator(value, index, list)) { - results[results.length] = value; - } - }); - return results; - } - - module.exports = filter; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/find.js deleted file mode 100644 index 14317e64..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/find.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrFind = require('../array/find'); -var objFind = require('../object/find'); - - /** - * Find value that returns true on iterator check. - */ - module.exports = make(arrFind, objFind); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/forEach.js deleted file mode 100644 index 6e28dcb1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/forEach.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrForEach = require('../array/forEach'); -var objForEach = require('../object/forOwn'); - - /** - */ - module.exports = make(arrForEach, objForEach); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/make_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/make_.js deleted file mode 100644 index 029d27bf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/make_.js +++ /dev/null @@ -1,19 +0,0 @@ - - - /** - * internal method used to create other collection modules. - */ - function makeCollectionMethod(arrMethod, objMethod, defaultReturn) { - return function(){ - var args = Array.prototype.slice.call(arguments); - if (args[0] == null) { - return defaultReturn; - } - // array-like is treated as array - return (typeof args[0].length === 'number')? arrMethod.apply(null, args) : objMethod.apply(null, args); - }; - } - - module.exports = makeCollectionMethod; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/map.js deleted file mode 100644 index fc157f53..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/map.js +++ /dev/null @@ -1,23 +0,0 @@ -var isObject = require('../lang/isObject'); -var values = require('../object/values'); -var arrMap = require('../array/map'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Map collection values, returns Array. - */ - function map(list, callback, thisObj) { - callback = makeIterator(callback, thisObj); - // list.length to check array-like object, if not array-like - // we simply map all the object values - if( isObject(list) && list.length == null ){ - list = values(list); - } - return arrMap(list, function (val, key, list) { - return callback(val, key, list); - }); - } - - module.exports = map; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/max.js deleted file mode 100644 index a8490e7e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/max.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrMax = require('../array/max'); -var objMax = require('../object/max'); - - /** - * Get maximum value inside collection - */ - module.exports = make(arrMax, objMax); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/min.js deleted file mode 100644 index 51d9f148..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/min.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrMin = require('../array/min'); -var objMin = require('../object/min'); - - /** - * Get minimum value inside collection. - */ - module.exports = make(arrMin, objMin); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/pluck.js deleted file mode 100644 index 9b283776..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/pluck.js +++ /dev/null @@ -1,14 +0,0 @@ -var map = require('./map'); - - /** - * Extract a list of property values. - */ - function pluck(list, key) { - return map(list, function(value) { - return value[key]; - }); - } - - module.exports = pluck; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/reduce.js deleted file mode 100644 index 4c075735..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/reduce.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrReduce = require('../array/reduce'); -var objReduce = require('../object/reduce'); - - /** - */ - module.exports = make(arrReduce, objReduce); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/reject.js deleted file mode 100644 index 2a92e3b3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/reject.js +++ /dev/null @@ -1,16 +0,0 @@ -var filter = require('./filter'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Inverse or collection/filter - */ - function reject(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - return filter(list, function(value, index, list) { - return !iterator(value, index, list); - }, thisObj); - } - - module.exports = reject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/size.js deleted file mode 100644 index 244e33e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/size.js +++ /dev/null @@ -1,19 +0,0 @@ -var isArray = require('../lang/isArray'); -var objSize = require('../object/size'); - - /** - * Get collection size - */ - function size(list) { - if (!list) { - return 0; - } - if (isArray(list)) { - return list.length; - } - return objSize(list); - } - - module.exports = size; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/some.js deleted file mode 100644 index 48fd252e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/collection/some.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrSome = require('../array/some'); -var objSome = require('../object/some'); - - /** - */ - module.exports = make(arrSome, objSome); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date.js deleted file mode 100644 index 1cde1a95..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date.js +++ /dev/null @@ -1,21 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'dayOfTheYear' : require('./date/dayOfTheYear'), - 'diff' : require('./date/diff'), - 'i18n_' : require('./date/i18n_'), - 'isLeapYear' : require('./date/isLeapYear'), - 'isSame' : require('./date/isSame'), - 'parseIso' : require('./date/parseIso'), - 'startOf' : require('./date/startOf'), - 'strftime' : require('./date/strftime'), - 'timezoneAbbr' : require('./date/timezoneAbbr'), - 'timezoneOffset' : require('./date/timezoneOffset'), - 'totalDaysInMonth' : require('./date/totalDaysInMonth'), - 'totalDaysInYear' : require('./date/totalDaysInYear'), - 'weekOfTheYear' : require('./date/weekOfTheYear') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/dayOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/dayOfTheYear.js deleted file mode 100644 index 85905c5a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/dayOfTheYear.js +++ /dev/null @@ -1,13 +0,0 @@ -var isDate = require('../lang/isDate'); - - /** - * return the day of the year (1..366) - */ - function dayOfTheYear(date){ - return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - - Date.UTC(date.getFullYear(), 0, 1)) / 86400000 + 1; - } - - module.exports = dayOfTheYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/diff.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/diff.js deleted file mode 100644 index 1131cdcb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/diff.js +++ /dev/null @@ -1,130 +0,0 @@ -var totalDaysInMonth = require('./totalDaysInMonth'); -var totalDaysInYear = require('./totalDaysInYear'); -var convert = require('../time/convert'); - - /** - * calculate the difference between dates (range) - */ - function diff(start, end, unitName){ - // sort the dates to make it easier to process (specially year/month) - if (start > end) { - var swap = start; - start = end; - end = swap; - } - - var output; - - if (unitName === 'month') { - output = getMonthsDiff(start, end); - } else if (unitName === 'year'){ - output = getYearsDiff(start, end); - } else if (unitName != null) { - if (unitName === 'day') { - // ignore timezone difference because of daylight savings time - start = toUtc(start); - end = toUtc(end); - } - output = convert(end - start, 'ms', unitName); - } else { - output = end - start; - } - - return output; - } - - - function toUtc(d){ - // we ignore timezone differences on purpose because of daylight - // savings time, otherwise it would return fractional days/weeks even - // if a full day elapsed. eg: - // Wed Feb 12 2014 00:00:00 GMT-0200 (BRST) - // Sun Feb 16 2014 00:00:00 GMT-0300 (BRT) - // diff should be 4 days and not 4.041666666666667 - return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), - d.getHours(), d.getMinutes(), d.getSeconds(), - d.getMilliseconds()); - } - - - function getMonthsDiff(start, end){ - return getElapsedMonths(start, end) + - getElapsedYears(start, end) * 12 + - getFractionalMonth(start, end); - } - - - function getYearsDiff(start, end){ - var elapsedYears = getElapsedYears(start, end); - return elapsedYears + getFractionalYear(start, end, elapsedYears); - } - - - function getElapsedMonths(start, end){ - var monthDiff = end.getMonth() - start.getMonth(); - if (monthDiff < 0) { - monthDiff += 12; - } - // less than a full month - if (start.getDate() > end.getDate()) { - monthDiff -= 1; - } - return monthDiff; - } - - - function getElapsedYears(start, end){ - var yearDiff = end.getFullYear() - start.getFullYear(); - // less than a full year - if (start.getMonth() > end.getMonth()) { - yearDiff -= 1; - } - return yearDiff; - } - - - function getFractionalMonth(start, end){ - var fractionalDiff = 0; - var startDay = start.getDate(); - var endDay = end.getDate(); - - if (startDay !== endDay) { - var startTotalDays = totalDaysInMonth(start); - var endTotalDays = totalDaysInMonth(end); - var totalDays; - var daysElapsed; - - if (startDay > endDay) { - // eg: Jan 29 - Feb 27 (29 days elapsed but not a full month) - var baseDay = startTotalDays - startDay; - daysElapsed = endDay + baseDay; - // total days should be relative to 1st day of next month if - // startDay > endTotalDays - totalDays = (startDay > endTotalDays)? - endTotalDays + baseDay + 1 : startDay + baseDay; - } else { - // fractional is only based on endMonth eg: Jan 12 - Feb 18 - // (6 fractional days, 28 days until next full month) - daysElapsed = endDay - startDay; - totalDays = endTotalDays; - } - - fractionalDiff = daysElapsed / totalDays; - } - - return fractionalDiff; - } - - - function getFractionalYear(start, end, elapsedYears){ - var base = elapsedYears? - new Date(end.getFullYear(), start.getMonth(), start.getDate()) : - start; - var elapsedDays = diff(base, end, 'day'); - return elapsedDays / totalDaysInYear(end); - } - - - module.exports = diff; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n/de-DE.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n/de-DE.js deleted file mode 100644 index b3ab6207..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n/de-DE.js +++ /dev/null @@ -1,61 +0,0 @@ - - // de-DE (German) - module.exports = { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Januar", - "Februar", - "März", - "April", - "Mai", - "Juni", - "Juli", - "August", - "September", - "Oktober", - "November", - "Dezember" - ], - - "months_abbr" : [ - "Jan", - "Febr", - "März", - "Apr", - "Mai", - "Juni", - "Juli", - "Aug", - "Sept", - "Okt", - "Nov", - "Dez" - ], - - "days" : [ - "Sonntag", - "Montag", - "Dienstag", - "Mittwoch", - "Donnerstag", - "Freitag", - "Samstag" - ], - - "days_abbr" : [ - "So", - "Mo", - "Di", - "Mi", - "Do", - "Fr", - "Sa" - ] - }; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n/en-US.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n/en-US.js deleted file mode 100644 index f9526ce4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n/en-US.js +++ /dev/null @@ -1,61 +0,0 @@ - - // en-US (English, United States) - module.exports = { - "am" : "AM", - "pm" : "PM", - - "x": "%m/%d/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %I:%M:%S %p %Z", - - "months" : [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - - "months_abbr" : [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - - "days" : [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - - "days_abbr" : [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ] - }; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n/pt-BR.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n/pt-BR.js deleted file mode 100644 index 71ebadb5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n/pt-BR.js +++ /dev/null @@ -1,61 +0,0 @@ - - // pt-BR (Brazillian Portuguese) - module.exports = { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Janeiro", - "Fevereiro", - "Março", - "Abril", - "Maio", - "Junho", - "Julho", - "Agosto", - "Setembro", - "Outubro", - "Novembro", - "Dezembro" - ], - - "months_abbr" : [ - "Jan", - "Fev", - "Mar", - "Abr", - "Mai", - "Jun", - "Jul", - "Ago", - "Set", - "Out", - "Nov", - "Dez" - ], - - "days" : [ - "Domingo", - "Segunda", - "Terça", - "Quarta", - "Quinta", - "Sexta", - "Sábado" - ], - - "days_abbr" : [ - "Dom", - "Seg", - "Ter", - "Qua", - "Qui", - "Sex", - "Sáb" - ] - }; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n_.js deleted file mode 100644 index 723fc103..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/i18n_.js +++ /dev/null @@ -1,14 +0,0 @@ -var mixIn = require('../object/mixIn'); -var enUS = require('./i18n/en-US'); - - // we also use mixIn to make sure we don't affect the original locale - var activeLocale = mixIn({}, enUS, { - // we expose a "set" method to allow overriding the global locale - set : function(localeData){ - mixIn(activeLocale, localeData); - } - }); - - module.exports = activeLocale; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/isLeapYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/isLeapYear.js deleted file mode 100644 index 4212870b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/isLeapYear.js +++ /dev/null @@ -1,15 +0,0 @@ -var isDate = require('../lang/isDate'); - - /** - * checks if it's a leap year - */ - function isLeapYear(fullYear){ - if (isDate(fullYear)) { - fullYear = fullYear.getFullYear(); - } - return fullYear % 400 === 0 || (fullYear % 100 !== 0 && fullYear % 4 === 0); - } - - module.exports = isLeapYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/isSame.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/isSame.js deleted file mode 100644 index 4097d29b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/isSame.js +++ /dev/null @@ -1,16 +0,0 @@ -var startOf = require('./startOf'); - - /** - * Check if date is "same" with optional period - */ - function isSame(date1, date2, period){ - if (period) { - date1 = startOf(date1, period); - date2 = startOf(date2, period); - } - return Number(date1) === Number(date2); - } - - module.exports = isSame; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/parseIso.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/parseIso.js deleted file mode 100644 index 40a70a88..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/parseIso.js +++ /dev/null @@ -1,146 +0,0 @@ -var some = require('../array/some'); - - var datePatterns = [ - /^([0-9]{4})$/, // YYYY - /^([0-9]{4})-([0-9]{2})$/, // YYYY-MM (YYYYMM not allowed) - /^([0-9]{4})-?([0-9]{2})-?([0-9]{2})$/ // YYYY-MM-DD or YYYYMMDD - ]; - var ORD_DATE = /^([0-9]{4})-?([0-9]{3})$/; // YYYY-DDD - - var timePatterns = [ - /^([0-9]{2}(?:\.[0-9]*)?)$/, // HH.hh - /^([0-9]{2}):?([0-9]{2}(?:\.[0-9]*)?)$/, // HH:MM.mm - /^([0-9]{2}):?([0-9]{2}):?([0-9]{2}(\.[0-9]*)?)$/ // HH:MM:SS.ss - ]; - - var DATE_TIME = /^(.+)T(.+)$/; - var TIME_ZONE = /^(.+)([+\-])([0-9]{2}):?([0-9]{2})$/; - - function matchAll(str, patterns) { - var match; - var found = some(patterns, function(pattern) { - return !!(match = pattern.exec(str)); - }); - - return found ? match : null; - } - - function getDate(year, month, day) { - var date = new Date(Date.UTC(year, month, day)); - - // Explicitly set year to avoid Date.UTC making dates < 100 relative to - // 1900 - date.setUTCFullYear(year); - - var valid = - date.getUTCFullYear() === year && - date.getUTCMonth() === month && - date.getUTCDate() === day; - return valid ? +date : NaN; - } - - function parseOrdinalDate(str) { - var match = ORD_DATE.exec(str); - if (match ) { - var year = +match[1], - day = +match[2], - date = new Date(Date.UTC(year, 0, day)); - - if (date.getUTCFullYear() === year) { - return +date; - } - } - - return NaN; - } - - function parseDate(str) { - var match, year, month, day; - - match = matchAll(str, datePatterns); - if (match === null) { - // Ordinal dates are verified differently. - return parseOrdinalDate(str); - } - - year = (match[1] === void 0) ? 0 : +match[1]; - month = (match[2] === void 0) ? 0 : +match[2] - 1; - day = (match[3] === void 0) ? 1 : +match[3]; - - return getDate(year, month, day); - } - - function getTime(hr, min, sec) { - var valid = - (hr < 24 && hr >= 0 && - min < 60 && min >= 0 && - sec < 60 && min >= 0) || - (hr === 24 && min === 0 && sec === 0); - if (!valid) { - return NaN; - } - - return ((hr * 60 + min) * 60 + sec) * 1000; - } - - function parseOffset(str) { - var match; - if (str.charAt(str.length - 1) === 'Z') { - str = str.substring(0, str.length - 1); - } else { - match = TIME_ZONE.exec(str); - if (match) { - var hours = +match[3], - minutes = (match[4] === void 0) ? 0 : +match[4], - offset = getTime(hours, minutes, 0); - - if (match[2] === '-') { - offset *= -1; - } - - return { offset: offset, time: match[1] }; - } - } - - // No time zone specified, assume UTC - return { offset: 0, time: str }; - } - - function parseTime(str) { - var match; - var offset = parseOffset(str); - - str = offset.time; - offset = offset.offset; - if (isNaN(offset)) { - return NaN; - } - - match = matchAll(str, timePatterns); - if (match === null) { - return NaN; - } - - var hours = (match[1] === void 0) ? 0 : +match[1], - minutes = (match[2] === void 0) ? 0 : +match[2], - seconds = (match[3] === void 0) ? 0 : +match[3]; - - return getTime(hours, minutes, seconds) - offset; - } - - /** - * Parse an ISO8601 formatted date string, and return a Date object. - */ - function parseISO8601(str){ - var match = DATE_TIME.exec(str); - if (!match) { - // No time specified - return parseDate(str); - } - - return parseDate(match[1]) + parseTime(match[2]); - } - - module.exports = parseISO8601; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/startOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/startOf.js deleted file mode 100644 index 072bc0ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/startOf.js +++ /dev/null @@ -1,54 +0,0 @@ -var clone = require('../lang/clone'); - - /** - * get a new Date object representing start of period - */ - function startOf(date, period){ - date = clone(date); - - // intentionally removed "break" from switch since start of - // month/year/etc should also reset the following periods - switch (period) { - case 'year': - date.setMonth(0); - /* falls through */ - case 'month': - date.setDate(1); - /* falls through */ - case 'week': - case 'day': - date.setHours(0); - /* falls through */ - case 'hour': - date.setMinutes(0); - /* falls through */ - case 'minute': - date.setSeconds(0); - /* falls through */ - case 'second': - date.setMilliseconds(0); - break; - default: - throw new Error('"'+ period +'" is not a valid period'); - } - - // week is the only case that should reset the weekDay and maybe even - // overflow to previous month - if (period === 'week') { - var weekDay = date.getDay(); - var baseDate = date.getDate(); - if (weekDay) { - if (weekDay >= baseDate) { - //start of the week is on previous month - date.setDate(0); - } - date.setDate(date.getDate() - date.getDay()); - } - } - - return date; - } - - module.exports = startOf; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/strftime.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/strftime.js deleted file mode 100644 index f033d10f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/strftime.js +++ /dev/null @@ -1,118 +0,0 @@ -var pad = require('../number/pad'); -var i18n = require('./i18n_'); -var dayOfTheYear = require('./dayOfTheYear'); -var timezoneOffset = require('./timezoneOffset'); -var timezoneAbbr = require('./timezoneAbbr'); -var weekOfTheYear = require('./weekOfTheYear'); - - var _combinations = { - 'D': '%m/%d/%y', - 'F': '%Y-%m-%d', - 'r': '%I:%M:%S %p', - 'R': '%H:%M', - 'T': '%H:%M:%S', - 'x': 'locale', - 'X': 'locale', - 'c': 'locale' - }; - - - /** - * format date based on strftime format - */ - function strftime(date, format, localeData){ - localeData = localeData || i18n; - var reToken = /%([a-z%])/gi; - - function makeIterator(fn) { - return function(match, token){ - return fn(date, token, localeData); - }; - } - - return format - .replace(reToken, makeIterator(expandCombinations)) - .replace(reToken, makeIterator(convertToken)); - } - - - function expandCombinations(date, token, l10n){ - if (token in _combinations) { - var expanded = _combinations[token]; - return expanded === 'locale'? l10n[token] : expanded; - } else { - return '%'+ token; - } - } - - - function convertToken(date, token, l10n){ - switch (token){ - case 'a': - return l10n.days_abbr[date.getDay()]; - case 'A': - return l10n.days[date.getDay()]; - case 'h': - case 'b': - return l10n.months_abbr[date.getMonth()]; - case 'B': - return l10n.months[date.getMonth()]; - case 'C': - return pad(Math.floor(date.getFullYear() / 100), 2); - case 'd': - return pad(date.getDate(), 2); - case 'e': - return pad(date.getDate(), 2, ' '); - case 'H': - return pad(date.getHours(), 2); - case 'I': - return pad(date.getHours() % 12, 2); - case 'j': - return pad(dayOfTheYear(date), 3); - case 'L': - return pad(date.getMilliseconds(), 3); - case 'm': - return pad(date.getMonth() + 1, 2); - case 'M': - return pad(date.getMinutes(), 2); - case 'n': - return '\n'; - case 'p': - return date.getHours() >= 12? l10n.pm : l10n.am; - case 'P': - return convertToken(date, 'p', l10n).toLowerCase(); - case 's': - return date.getTime() / 1000; - case 'S': - return pad(date.getSeconds(), 2); - case 't': - return '\t'; - case 'u': - var day = date.getDay(); - return day === 0? 7 : day; - case 'U': - return pad(weekOfTheYear(date), 2); - case 'w': - return date.getDay(); - case 'W': - return pad(weekOfTheYear(date, 1), 2); - case 'y': - return pad(date.getFullYear() % 100, 2); - case 'Y': - return pad(date.getFullYear(), 4); - case 'z': - return timezoneOffset(date); - case 'Z': - return timezoneAbbr(date); - case '%': - return '%'; - default: - // keep unrecognized tokens - return '%'+ token; - } - } - - - module.exports = strftime; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/timezoneAbbr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/timezoneAbbr.js deleted file mode 100644 index b1006875..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/timezoneAbbr.js +++ /dev/null @@ -1,17 +0,0 @@ -var timezoneOffset = require('./timezoneOffset'); - - /** - * Abbreviated time zone name or similar information. - */ - function timezoneAbbr(date){ - // Date.toString gives different results depending on the - // browser/system so we fallback to timezone offset - // chrome: 'Mon Apr 08 2013 09:02:04 GMT-0300 (BRT)' - // IE: 'Mon Apr 8 09:02:04 UTC-0300 2013' - var tz = /\(([A-Z]{3,4})\)/.exec(date.toString()); - return tz? tz[1] : timezoneOffset(date); - } - - module.exports = timezoneAbbr; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/timezoneOffset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/timezoneOffset.js deleted file mode 100644 index 9492dceb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/timezoneOffset.js +++ /dev/null @@ -1,16 +0,0 @@ -var pad = require('../number/pad'); - - /** - * time zone as hour and minute offset from UTC (e.g. +0900) - */ - function timezoneOffset(date){ - var offset = date.getTimezoneOffset(); - var abs = Math.abs(offset); - var h = pad(Math.floor(abs / 60), 2); - var m = pad(abs % 60, 2); - return (offset > 0? '-' : '+') + h + m; - } - - module.exports = timezoneOffset; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/totalDaysInMonth.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/totalDaysInMonth.js deleted file mode 100644 index 8aafeb84..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/totalDaysInMonth.js +++ /dev/null @@ -1,25 +0,0 @@ -var isDate = require('../lang/isDate'); -var isLeapYear = require('./isLeapYear'); - - var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - - /** - * returns the total amount of days in the month (considering leap years) - */ - function totalDaysInMonth(fullYear, monthIndex){ - if (isDate(fullYear)) { - var date = fullYear; - year = date.getFullYear(); - monthIndex = date.getMonth(); - } - - if (monthIndex === 1 && isLeapYear(fullYear)) { - return 29; - } else { - return DAYS_IN_MONTH[monthIndex]; - } - } - - module.exports = totalDaysInMonth; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/totalDaysInYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/totalDaysInYear.js deleted file mode 100644 index b4b7e9b7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/totalDaysInYear.js +++ /dev/null @@ -1,13 +0,0 @@ -var isLeapYear = require('./isLeapYear'); - - /** - * return the amount of days in the year following the gregorian calendar - * and leap years - */ - function totalDaysInYear(fullYear){ - return isLeapYear(fullYear)? 366 : 365; - } - - module.exports = totalDaysInYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/weekOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/weekOfTheYear.js deleted file mode 100644 index dd51b7f1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/date/weekOfTheYear.js +++ /dev/null @@ -1,16 +0,0 @@ -var dayOfTheYear = require('./dayOfTheYear'); - - /** - * Return the week of the year based on given firstDayOfWeek - */ - function weekOfTheYear(date, firstDayOfWeek){ - firstDayOfWeek = firstDayOfWeek == null? 0 : firstDayOfWeek; - var doy = dayOfTheYear(date); - var dow = (7 + date.getDay() - firstDayOfWeek) % 7; - var relativeWeekDay = 6 - firstDayOfWeek - dow; - return Math.floor((doy + relativeWeekDay) / 7); - } - - module.exports = weekOfTheYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/array.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/array.md deleted file mode 100644 index a81a50b5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/array.md +++ /dev/null @@ -1,781 +0,0 @@ -# array # - -Array utilities. - - - - -## append(arr1, arr2):Array - -Appends an array to the end of the other. -The first array will be modified and will contain the appended items. - -See: [`union()`](#union), [`combine()`](#combine) - -```js -var foo = ['a', 'b'], - bar = ['b', 'd']; - -append(foo, bar); // ['a', 'b', 'b', 'd'] -``` - - - -## collect(arr, callback, [thisObj]):Array - -Maps the items in `arr` and concatenates the resulting arrays. - -See: [`map()`](#map) - -```js -collect([1, 2, 3], function(val) { - return [val, val % 2]; -}); // [1, 1, 2, 0, 3, 1]; - -collect(['a', 'bb', ''], function(val) { - return val.split(''); -}); // ['a', 'b', 'b'] -``` - -It also supports a shorthand syntax: - -```js -var items = [{ a: [1] }, { b: 'foo' }, { a: [2, 3] }]; -collect(items, 'a'); // [1, 2, 3]; -``` - - - -## combine(arr1, arr2):Array - -Combines an array with all the items of another. -The first array will be modified and will contain the combined items. -Does not allow duplicates and is case and type sensitive. - -See: [`union()`](#union), [`append()`](#append) - -```js -var foo = ['a', 'b'], - bar = ['b', 'd']; - -combine(foo, bar); // ['a', 'b', 'd'] -``` - - - -## compact(arr):Array - -Returns a new Array without any `null` or `undefined` values. Note that it will -keep empty strings and other falsy values (simillar to Ruby Array#compact). - -```js -var arr = [0, 1, null, false, '', 'foo', undefined, 'bar']; -compact(arr); // [0, 1, false, '', 'foo', 'bar']; -``` - - - -## contains(arr, value):Boolean - -Checks if Array contains value. Alias to `indexOf(arr, val) !== -1`. - -```js -var arr = [1, 2, 3]; -contains(arr, 2); // true -contains(arr, 'foo'); // false -``` - - - -## difference(...arrs):Array - -Return a new Array with elements that aren't present in the other Arrays -besides the first one. - -Works like [Python set#difference](http://docs.python.org/library/stdtypes.html#set.difference). - -It will remove duplicates. - -See: [`xor()`](#xor), [`intersection()`](#intersection) - -```js -var a = ['a', 'b', 1]; -var b = ['c', 1]; -difference(a, b); // ['a', 'b'] -``` - - - -## every(arr, callback, [thisObj]):Array - -Crossbrowser `Array.every()`. - -Tests whether all elements in the array pass the test implemented by the provided function. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = [1, 'foo', 'bar']; -every(items, isString); // false -every(items, isFunction); // false -every(items, function(val, key, arr){ - return val != null; -}); // true -``` - -more info at [MDN Array#every](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every) - -It also supports a shorthand syntax: - -```js -var items = [{id:1, active:true}, {id:3, active:true}, {id:8, active:true}]; -// all items with `id === 8` -every(items, {id:8}); // false -// `active` is truthy on all items -every(items, 'active'); // true -``` - - - -## filter(arr, callback, [thisObj]):Array - -Crossbrowser `Array.filter()`. - -Creates a new array with all elements that pass the callback test. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var nums = [1, 2, 3, 4, 5, 6]; -var oddNumbers = filter(nums, function(val, key, arr){ - return (val % 2) !== 0; -}); -// > [1, 3, 5] -``` - -more info at [MDN Array#filter](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter) - -Filter also supports shorthand notation: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true}, - {name:'jane', surname:'doe', beard:false} -]; -// filter item that matches all properties/values pairs -filter(arr, {name:'john', beard:false}); -// > [{name:'john', surnname:'connor', beard:false}] -// items where 'beard' is a truthy value -filter(arr, 'beard'); -// > [{name:'john', surnname:'doe', beard:true}] -``` - -See [`reject()`](#reject) - - - -## find(arr, callback, [thisObj]):void - -Loops through all the items in the Array and returns the first one that passes -a truth test (callback). - -```js -var arr = [123, {a:'b'}, 'foo', 'bar']; -find(arr, isString); // "foo" -find(arr, isNumber); // 123 -find(arr, isObject); // {a:'b'} -``` - -Find also supports shorthand notation: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true} -]; -// first item that matches all properties/values pairs -find(arr, {name:'john'}); // {name:'john', surnname:'connor', beard:false} -// first item where 'beard' is a truthy value -find(arr, 'beard'); // {name:'john', surnname:'doe', beard:true} -``` - -See: [findIndex()](#findIndex) - - - -## findIndex(arr, iterator, [thisObj]):Number - -Loops through the items in the Array and returns the index of the first one -that passes a truth test (callback). - -Returns `-1` if no item was found that passes the truth test. - -```js -var arr = [1, { a: 1 }, 'foo', 'bar']; -findIndex(arr, isString); // 2 -findIndex(arr, isNumber); // 0 -findIndex(arr, isObject); // 1 -findIndex(arr, isRegExp); // -1 -``` - -`findIndex` also supports shorthand notation: - -```js -var pets = [ - { pet: 'dog', name: 'Sam' }, - { pet: 'dog', name: 'Maggie' } -]; - -findIndex(pets, { pet: 'dog' }); // 0 -findIndex(pets, { name: 'Maggie' }); // 1 -``` - -See: [find()](#find) - - - -## flatten(arr, [level]):Array - -Recursively flattens an array. A new array containing all the elements is -returned. If `level` is specified, it will only flatten up to that level. - -### Example - -```js -flatten([1, [2], [3, [4, 5]]]); -// > [1, 2, 3, 4, 5] -flatten([1, [2], [3, [4, 5]]], 1); -// > [1, 2, 3, [4, 5]] -``` - - - -## forEach(arr, callback, [thisObj]):void - -Crossbrowser `Array.forEach()`. - -It allows exiting the iteration early by returning `false` on the callback. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = ['foo', 'bar', 'lorem', 'ipsum']; -forEach(items, function(val, key, arr){ - console.log(key +' : '+ val); - if (val === 'lorem') { - // stop iteration (break) - return false; - } -}); -``` - -more info at [MDN Array#forEach](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach) - - - -## indexOf(arr, item, [fromIndex]):Number - -Crossbrowser `Array.indexOf()`. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#indexOf](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf) - - - - -## insert(arr, ...items):Number - -Push items into array only if they aren't contained by it. Returns the new -`length` of the array. - -See: [`remove()`](#remove), [`removeAll()`](#removeAll), -[`contains()`](#contains) - -```js -var arr = ['a', 'b']; -insert(arr, 'a'); // 2 : ['a', 'b'] -insert(arr, 'c'); // 3 : ['a', 'b', 'c'] -insert(arr, 1, 2, 'b'); // 5 : ['a', 'b', 'c', 1, 2] -``` - - - -## intersection(...arrs):Array - -Return a new Array with elements common to all Arrays. - -Similar to Python set#intersection and underscore.js intersection. - -It will remove duplicates. - -See: [`difference()`](#difference), [`xor()`](#xor) - -```js -var a = ['a', 'b', 1], - b = ['c', 1], - c = [1, 2, 3]; -intersection(a, b, c); // [1] -``` - - - -## invoke(arr, methodName[, ...args]):Array - -Call `methodName` on each item of the array passing custom arguments if needed. - -```js -invoke([[3,2,1], [9,5,2]], 'sort'); // [[1,2,3], [2,5,9]] -``` - - - -## join(arr, [separator]):String - -Joins the strings in `arr`, inserting `separator` between each value. - -This ignores null values and empty strings that are in the array. `separator` -defaults to an empty string. This will convert all non-string objects in the -array to a string. - -### Example - -```js -join(['a', 'b', 'c']); // 'abc' -join(['foo', 'bar'], ', '); // 'foo, bar' -join([null, 'foo', '', 'bar', undefined], ':'); // 'foo:bar' -``` - - - -## lastIndexOf(arr, item, [fromIndex]):Number - -Crossbrowser `Array.lastIndexOf()`. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#lastIndexOf](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf) - - - -## map(arr, callback, [thisObj]]):Array - -Crossbrowser `Array.map()`. - -Creates a new array with the results of calling a provided function on every -element in this array. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -See: [`collect()`](#collect) - -```js -var nums = [1,2,3,4]; -var double = map(nums, function(val, key, arr){ - return val * 2; -}); -// > [2, 4, 6, 8] -``` - -more info at [MDN Array#map](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map) - -It also supports a shorthand notation which can be used to achieve same result -as [`array/pluck`](#pluck): - -```js -var src = ['lorem', 'ipsum', 'foo', 'amet']; -// grab the "length" property of all items -var lengths = map(src, 'length'); // [5, 5, 3, 4] -``` - - - -## max(arr, [iterator], [thisObj]):* - -Returns maximum value inside array or use a custom iterator to define how items -should be compared. - -See: [`min()`](#min) - -```js -max([10, 2, 7]); // 10 -max(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'lorem' -``` - -It also supports a shorthand notation: - -```js -max(['foo', 'lorem', 'amet'], 'length'); // "lorem" -``` - - - -## min(arr, [iterator], [thisObj]):* - -Returns minimum value inside array or use a custom iterator to define how items -should be compared. - -See: [`max()`](#max) - -```js -min([10, 2, 7]); // 2 -min(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'foo' -``` - -It also supports a shorthand notation: - -```js -min(['foo', 'lorem', 'amet'], 'length'); // "foo" -``` - - - -## pick(arr, [nItems]):* - -Gets random item(s) and removes it from the original array. - -If `nItems` is specified it will return a new Array contained the *picked* -items otherwise it returns a single item. - -See: [`random/choice()`](./random.html#choice) - -### Example: - -```js -var arr = [1, 2, 3, 4, 5, 6]; -var item1 = pick(arr); // 4 -var item2 = pick(arr); // 1 -var items = pick(arr, 2); // [5, 2] -console.log(arr); // [3, 6] -``` - - - -## pluck(arr, propName):Array - -Extract a list of property values. - -See: [`function/prop()`](function.html#prop) - -```js -var users = [{name : 'John', age: 21}, {name: 'Jane', age : 27}]; -var names = pluck(users, 'name'); // ["John", "Jane"] -var ages = pluck(users, 'age'); // [21, 27] -``` - - - -## range([start], stop[, step]):Array - -Creates a new Array with all the values inside the range. Works similarly to -Python#range or PHP#range. - -### Arguments - - 1. `[start]` (Number) : Range start. Default is `0`. - 2. `stop` (Number) : Range limit. - 3. `[step]` (Number) : Step size. Default is `1`. - -### Example - -```js -range(5); // [0, 1, 2, 3, 4, 5] -range(0, 5); // [0, 1, 2, 3, 4, 5] -range(0, 5, 2); // [0, 2, 4] -range(20, 40, 5); // [20, 25, 30, 35, 40] -``` - - - -## reduce(arr, fn):* - -Crossbrowser `Array.reduce()`. - -Apply a function against an accumulator and each value of the array (from -left-to-right) as to reduce it to a single value. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#reduce](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce) - - - -## reduceRight(arr, fn):* - -Crossbrowser `Array.reduceRight()`. - -Apply a function simultaneously against two values of the array (from -right-to-left) as to reduce it to a single value. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#reduceRight](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduceRight) - - - -## reject(arr, fn, thisObj):Array - -Creates a new array with all the elements that do **not** pass the truth test. -Opposite of [`filter()`](#filter). - -See [`filter()`](#filter) - -### Example - -```js -var numbers = [1, 2, 3, 4, 5, 6]; -reject(numbers, function(x) { return (x % 2) !== 0; }); // [2, 4, 6] -``` - -It also supports a shorthand syntax: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true}, - {name:'jane', surname:'doe', beard:false} -]; -// reject items that matches all properties/values pairs -reject(arr, {name:'john'}); -// > [{name:'jane', surnname:'doe', beard:false}] -// reject items where 'beard' is a truthy value -filter(arr, 'beard'); -// > [{name:'john', surnname:'connor', beard:false}, -// {name:'jane', surname:'doe', beard:false}] -``` - - - -## remove(arr, item):void - -Remove a single item from the array. - -IMPORTANT: it won't remove duplicates, just a single item. - -### Example - -```js -var foo = [1, 2, 3, 4]; -remove(foo, 2); -console.log(foo); // [1, 3, 4] -``` - - - -## removeAll(arr, item):void - -Remove all instances of an item from the array. - -### Example - -```js -var foo = [1, 2, 3, 4, 2, 2]; -removeAll(foo, 2); -console.log(foo); // [1, 3, 4]; -``` - - - -## shuffle(arr):Array - -Returns a new Array with items randomly sorted (shuffled). Similar to Ruby Array#shuffle. - -### Example - -```js -var arr = ['a', 'b', 'c', 'd', 'e']; -shuffle(arr); // ['b', 'd', 'e', 'c', 'a'] -``` - - - -## some(arr, callback, [thisObj]):Array - -Crossbrowser `Array.some()`. - -Tests whether some element in the array passes the test implemented by the provided function. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = [1, 'foo', 'bar']; -some(items, isString); // true -some(items, isFunction); // false -``` - -more info at [MDN Array#some](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some) - -It also supports a shorthand syntax: - -```js -var items = [{id:1, active:true}, {id:3, active:false}, {id:8, active:false}]; -// at least one item with `id === 8` -some(items, {id:8}); // true -// `active` is truthy on at least one item -some(items, 'active'); // true -``` - -see also: [`object/matches`](object.html#matches) - - - -## sort(arr, [compareFn]):Array - -Returns a sorted Array using the [Merge Sort](http://en.wikipedia.org/wiki/Merge_sort) algorithm (stable sort). - -The `Array.prototype.sort` browser implementations differ since the sorting algorithm isn't described in the ES spec - [in V8 it isn't stable](http://code.google.com/p/v8/issues/detail?id=90) and [on Firefox it is stable](https://bugzilla.mozilla.org/show_bug.cgi?id=224128) - so this function doesn't use the browser native implementation and is recommended in cases where a stable sort is required (items should preserve same order if already sorted). - -**Important:** It does logical comparisson by default (greater/less than) and -not a string comparisson like the native `Array#sort`. - -### compareFn - -If `compareFn` is supplied elements are sorted based on the value returned by -the `compareFn`. - - - If `compareFn(a, b)` is less than `0`, sort `a` to a lower index than `b`. - - If `compareFn(a, b)` returns `0`, leave `a` and `b` unchanged with respect - to each other, but sorted with respect to all different elements. - - If `compareFn(a, b)` is greater than `0`, sort `b` to a lower index than - `a`. - -### Example - -```js -sort([187, 23, 47, 987, 12, 59, 0]); // [0, 12, 23, 47, 59, 187, 987] -sort(['a', 'z', 'c', 'beta', 'b']); // ['a', 'b', 'beta', 'c', 'z'] - -// ['sit', 'amet', 'lorem', 'ipsum'] -sort(['lorem', 'ipsum', 'sit', 'amet'], function(a, b){ - // sort by length, items with same length - // will keep the relative order (stable) - return a.length - b.length; -}); - -// [4, 3, 2, 1] -sort([2, 3, 1, 4], function(a, b){ - // reverse sort - return b - a; -}); -``` - - - -## split(arr, [segments]):Array - -Splits an array into a fixed number of segments. - -The number of segments is specified by `segments` and defaults to 2. If the -array cannot be evenly split, the first segments will contain the extra items. -If `arr` is empty, an empty array is returned. If `arr.length` is less than -`segments`, then the resulting array will have `arr.length` number of -single-element arrays. - -### Example -```js -split([1, 2, 3, 4, 5], 3) // [ [1, 2], [3, 4], [5] ] -split([1, 2, 3, 4, 5]) // [ [1, 2, 3], [4, 5] ] -split([]) // [] -split([1, 2], 3) // [ [1], [2] ] -``` - - - -## toLookup(arr, key):Object - -Create an object that indexes the items in the array by a key. If `key` is a function, the key for each value in the resulting object will be the result of calling the function with the value as an argument. Otherwise `key` specifies the property on each value to use as the key. - -### Example - -```js -var foo = [{ name: 'a', thing: 1 }, { name: 'b', thing: 2 }]; -// { a: { name: 'a', thing: 1 }, b: { name: 'b', thing: 2 } } -toLookup(foo, 'name'); -// same as above -toLookup(foo, function (value) { return value.name; }); -``` - - - -## union(...arrs):Array - -Concat multiple arrays removing duplicates. - -```js -var a = ['a', 'b'], - b = ['c', 'a'], - c = [1, 'b', 2, 3, 'a']; - -//note that unique remove from begin to end -union(a, b, c); // ['c', 1, 'b', 2, 3, 'a'] -``` - - - -## unique(arr):Array - -Return a new Array of unique items. - -### Example - -```js -var foo = [1, 2, 3, 4, 2, 2, 3, 4]; -var bar = unique(foo); -console.log(foo); // [1, 2, 3, 4]; -``` - - - -## xor(arr1, arr2):Array - -Exclusive OR. Returns items that are present in a single array. - -Works like [Python set#symmetric_difference](http://docs.python.org/library/stdtypes.html#set.symmetric_difference) renamed for brevity. - -It will remove duplicates. - -See: [`difference()`](#difference), [`intersection()`](#intersection) - -```js -var a = ['a', 'b', 1]; -var b = ['c', 1]; -xor(a, b); // ['a', 'b', 'c'] -``` - - - -## zip(...arrs):Array - -Groups the elements of each array at their corresponding indexes. - -Useful for separate data sources that are coordinated through matching array -indexes. For a matrix of nested arrays, `zip.apply(...)` can transpose the -matrix in a similar fashion. - -```js -// [['moe', 30, true], ['larry', 40, false], ['curly', 50, false]] -zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]); -``` - - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/collection.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/collection.md deleted file mode 100644 index 2ffcab10..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/collection.md +++ /dev/null @@ -1,233 +0,0 @@ -# collection # - -Methods for dealing with collections (Array or Objects). - - - -## contains(list, value):Boolean - -Checks if collection contains value. - -```js -contains({a: 1, b: 2, c: 'bar'}, 2); // true -contains([1, 2, 3], 'foo'); // false -``` - -See: [array/contains](array.html#contains), [object/contains](object.html#contains) - - - -## every(list, callback, [thisObj]):Boolean - -Tests whether all values in the collection pass the test implemented by the -provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -every(obj, isNumber); // false -``` - -See: [array/every](array.html#every), [object/every](object.html#every) - - - -## filter(list, callback, [thisObj]):Array - -Filter collection properties. - -See: [array/filter](array.html#filter), [object/filter](object.html#filter) - - - -## find(list, callback, [thisObj]):* - -Loops through all the values in the collection and returns the first one that -passes a truth test (callback). - -**Important:** loop order over objects properties isn't guaranteed to be the -same on all environments. - -```js -find({a: 'foo', b: 12}, isString); // 'foo' -find(['foo', 12], isNumber); // 12 -``` - -See: [array/find](array.html#find), [object/find](object.html#find) - - - -## forEach(list, callback, [thisObj]) - -Loop through all values of the collection. - -See: [array/forEach](array.html#forEach), [object/forOwn](object.html#forOwn) - - - -## map(list, callback, [thisObj]):Array - -Returns a new collection where the properties values are the result of calling -the callback for each property in the original collection. - -See: [array/map](array.html#map), [object/map](object.html#map) - - - -## max(list, [iterator]):* - -Returns maximum value inside collection or use a custom iterator to define how -items should be compared. - -See: [`min()`](#min), [array/max](array.html#max), [object/max](object.html#max) - -```js -max({a: 100, b: 2, c: 1, d: 3, e: 200}); // 200 -max(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'lorem' -``` - - - -## min(list, [iterator]):* - -Returns minimum value inside collection or use a custom iterator to define how -items should be compared. - -See: [`max()`](#max), [array/min](array.html#min), [object/min](object.html#min) - -```js -min([10, 2, 7]); // 2 -min({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'foo' -``` - - - -## pluck(list, propName):Array - -Extract a list of property values. - -```js -var users = [ - { - name : 'John', - age : 21 - }, - { - name : 'Jane', - age : 27 - } -]; - -pluck(users, 'name'); // ["John", "Jane"] -pluck(users, 'age'); // [21, 27] - -users = { - first: { - name : 'John', - age : 21 - }, - second: { - name : 'Mary', - age : 25 - } -}; - -pluck(users, 'name'); // ['John', 'Mary'] -``` - -See: [array/pluck](array.html#pluck), [object/pluck](object.html#pluck) - - - -## reduce(list, callback, initial, [thisObj]):* - -Apply a function against an accumulator and each value in the collection as to -reduce it to a single value. - -```js -var obj = {a: 1, b: 2, c: 3, d: 4}; - -function sum(prev, cur, key, list) { - return prev + cur; -} - -reduce(obj, sum); // 10 -``` - -See: [array/reduce](array.html#reduce), [object/reduce](object.html#reduce) - - - -## reject(list, fn, [thisObj]):Array - -Creates a new array with all the elements that do **not** pass the truth test. -Opposite of [`filter()`](#filter). - -### Example - -```js -var numbers = [1, 2, 3, 4, 5]; -reject(numbers, function(x) { return (x % 2) !== 0; }); // [2, 4] - -var obj = {a: 1, b: 2, c: 3, d: 4, e: 5}; -reject(obj, function(x) { return (x % 2) !== 0; }); // [2, 4] -``` - -See: [array/reject](array.html#reject), [object/reject](object.html#reject) - - - -## size(list):Number - -Returns the number of values in the collection. - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -size(obj); // 3 -size([1,2,3]); // 3 -size(null); // 0 -``` - -See: [object/size](object.html#size) - - - -## some(list, callback, [thisObj]):Boolean - -Tests whether any values in the collection pass the test implemented by the -provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -some(obj, isNumber); // true -some(obj, isString); // true -some([1, 2, 3], isNumber) // true -some([1, 2, 3], isString) // false -``` - -See: [array/some](array.html#some), [object/some](object.html#some) - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/date.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/date.md deleted file mode 100644 index b3f7f40e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/date.md +++ /dev/null @@ -1,295 +0,0 @@ -# date # - -Date utilities. - - -## dayOfTheYear(date):Number - -How many days elapsed since begining of the year (following gregorian -calendar). - -```js -// Jan 1st -dayOfTheYear(new Date(2013, 0, 1)); // 1 -// Dec 31th -dayOfTheYear(new Date(2013, 11, 31)); // 364 -``` - - - -## diff(date1, date2, [unitName]):Number - -Calculate the difference between dates (range). - -The returned value is always positive. The default `unitName` is `"ms"`. - -Available units: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`, -`millisecond`. - -See: [`time/convert()`](time.html#convert) - -```js -var d1 = new Date(2012, 4, 5); -var d2 = new Date(2013, 4, 8); -diff(d1, d2); // 31795200000 -diff(d1, d2, 'hour'); // 8832 -diff(d1, d2, 'week'); // 52.57142857142857 -diff(d1, d2, 'month'); // 12.096774193548388 -diff(d1, d2, 'year'); // 1.0082191780821919 -``` - - - -## isLeapYear(fullYear|date):Boolean - -Checks if it's a [leap year](http://en.wikipedia.org/wiki/Leap_year) according -to the Gregorian calendar. - -see: [`totalDaysInMonth()`](#totalDaysInMonth) - -```js -isLeapYear(2012); // true -isLeapYear(2013); // false -isLeapYear(new Date(2012, 2, 28)); // true -``` - - -## isSame(date1, date2[, period]):Boolean - -Check if both dates are the "same". - -You can pass an optional *period* used to set the comparisson precision. - -Available periods: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`. - -```js -var date1 = new Date(2013, 1, 3); -var date2 = new Date(2013, 2, 9); -isSame(date1, date2); // false -isSame(date1, date2, 'day'); // false -isSame(date1, date2, 'month'); // false -isSame(date1, date2, 'year'); // true -``` - - - -## parseIso(str):Number - -Parses an [ISO8601](http://en.wikipedia.org/wiki/Iso8601) date and returns the -number of milliseconds since January 1, 1970, 00:00:00 UTC, or `NaN` if it is -not a valid ISO8601 date. - -This parses *all* ISO8601 dates, including dates without times, [ordinal -dates](https://en.wikipedia.org/wiki/ISO_8601#Ordinal_dates), and the compact -representation (omitting delimeters). The only exception is [ISO week -dates](https://en.wikipedia.org/wiki/ISO_week_date), which are not parsed. - -If no time zone offset is specified, it assumes UTC time. - -```js -// Jan 01, 1970 00:00 GMT -parseIso('1970-01-01T00:00:00') // 0 -parseIso('1970-001') // 0 -parseIso('1970-01-01') // 0 -parseIso('19700101T000000.00') // 0 -parseIso('1970-01-01T02:00+02:00') // 0 - -// Jan 02, 2000 20:10 GMT+04:00 -parseIso('2000-01-02T20:10+04:00') // 946829400000 -``` - - - -## startOf(date, period):Date - -Get a new Date at the start of the period. - -Available periods: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`. - -```js -// Apr 05 2013 11:27:43 -var date = new Date(2013, 3, 5, 11, 27, 43, 123); -startOf(date, 'year'); // Jan 01 2013 00:00:00 -startOf(date, 'month'); // Apr 01 2013 00:00:00 -startOf(date, 'day'); // Apr 05 2013 00:00:00 -startOf(date, 'hour'); // Apr 05 2013 11:00:00 -``` - - - -## strftime(date, format, [l10n]):String - -Format date based on strftime format. - -Replaced tokens: - -<dl> -<dt>%a</dt><dd> locale's abbreviated weekday name.</dd> -<dt>%A</dt><dd> locale's full weekday name.</dd> -<dt>%b</dt><dd> locale's abbreviated month name.</dd> -<dt>%B</dt><dd> locale's full month name.</dd> -<dt>%c</dt><dd> locale's appropriate date and time representation.</dd> -<dt>%C</dt><dd> century number (the year divided by 100 and truncated -to an integer) as a decimal number [00..99].</dd> -<dt>%d</dt><dd> day of the month as a decimal number [01..31].</dd> -<dt>%D</dt><dd>same as %m/%d/%y.</dd> -<dt>%e</dt><dd> day of the month as a decimal number [1..31]; -a single digit is preceded by a space.</dd> -<dt>%F</dt><dd>The ISO 8601 date format (%Y-%m-%d)</dd> -<dt>%h</dt><dd>same as %b.</dd> -<dt>%H</dt><dd> hour (24-hour clock) as a decimal number [00..23].</dd> -<dt>%I</dt><dd> hour (12-hour clock) as a decimal number [01..12].</dd> -<dt>%j</dt><dd> day of the year as a decimal number [001..366].</dd> -<dt>%L</dt><dd> zero-padded milliseconds [000..999]</dd> -<dt>%m</dt><dd> month as a decimal number [01..12].</dd> -<dt>%M</dt><dd> minute as a decimal number [00..59].</dd> -<dt>%n</dt><dd> newline character.</dd> -<dt>%p</dt><dd> locale's equivalent of either "am" or "pm"</dd> -<dt>%P</dt><dd> locale's equivalent of either "AM" or "PM"</dd> -<dt>%r</dt><dd> time in a.m. and -p.m. notation; in the POSIX locale this is equivalent to %I:%M:%S %p.</dd> -<dt>%R</dt><dd> time in 24 hour notation (%H:%M).</dd> -<dt>%s</dt><dd> seconds since Epoch (1970-01-01 00:00:00 UTC)</dd> -<dt>%S</dt><dd> second as a decimal number [00..60].</dd> -<dt>%t</dt><dd> tab character.</dd> -<dt>%T</dt><dd> time (%H:%M:%S).</dd> -<dt>%u</dt><dd> weekday as a decimal number [1..7], with 1 representing -Monday.</dd> -<dt>%U</dt><dd> week number of the year (Sunday as the first day of -the week) as a decimal number [00..53].</dd> -<del><dt>%V</dt><dd> week number of the year (Monday as the first day of the -week) as a decimal number [01..53]. If the week containing 1 January has -four or more days in the new year, then it is considered week 1. Otherwise, -it is the last week of the previous year, and the next week is week 1.</dd></del> -<dt>%w</dt><dd> weekday as a decimal number [0..6], with 0 representing -Sunday.</dd> -<dt>%W</dt><dd> week number of the year (Monday as the first day of -the week) as a decimal number [00..53]. All days in a new year preceding -the first Monday are considered to be in week 0.</dd> -<dt>%x</dt><dd> locale's appropriate date representation.</dd> -<dt>%X</dt><dd> locale's appropriate time representation.</dd> -<dt>%y</dt><dd> year without century as a decimal number [00..99].</dd> -<dt>%Y</dt><dd> year with century as a decimal number.</dd> -<dt>%Z</dt><dd> timezone name or abbreviation, or by no bytes -if no timezone information exists.</dd> -<dt>%%</dt><dd>is replaced by %.</dd> -</dl> - -```js -var date = new Date(2013, 3, 8, 9, 2, 4); -strftime(date, '%Y-%m-%d'); // "2013-04-08" -strftime(date, '%R'); // "09:02" -strftime(date, '%Y-%m-%dT%H:%M:%S%z'); // "2013-04-08T09:02:04+0000" -``` - -You can also set a custom locale: - -```js -var ptBr = require('mout/date/i18n/pt-BR'); -strftime(date, '%a, %d %b', ptBr); // 'Seg, 08 Abr' -strftime(date, '%A, %d %B', ptBr); // 'Segunda, 08 Abril' -``` - -To set it globally: - -```js -require('mout/date/i18n_').set( customLocaleData ); -``` - -See [date/i18n](https://github.com/mout/mout/tree/master/src/date/i18n) -for localization examples. - - - -## timezoneAbbr(date):String - -Return timezone abbreviation or similar data. - -The result will vary based on the OS/browser since some environments doesn't -provide enough info about the current locale. - -```js -// IE 7-8 -timezoneAbbr(new Date()); // "-0500" -// Chrome, FF, V8 -timezoneAbbr(new Date()); // "EST" -``` - - - -## timezoneOffset(date):String - -Return time zone as hour and minute offset from UTC (e.g. +0900). - -It's important to note that JavaScript Date object will use the system locale -info to determinate the [timezone -offset](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset) -and that daylight saving time affects the result. - -```js -// if system locale is EST -timezoneOffset(new Date()); // -0500 -``` - - - -## totalDaysInMonth(fullYear, monthIndex):Number - -Returns the amount of days in the month taking into consideration leap years -(following Gregorian calendar). - -see: [`isLeapYear()`](#isLeapYear) - -```js -totalDaysInMonth(2008, 1); // 29 (leap year) -totalDaysInMonth(2009, 1); // 28 - -// you can also pass a Date object as single argument -totalDaysInMonth( new Date(2013, 0, 1) ); // 31 -``` - - -## totalDaysInYear(fullYear):Number - -Returns the amount of days in the year taking into consideration leap years -(following Gregorian calendar). - -see: [`isLeapYear()`](#isLeapYear), [`totalDaysInMonth()`](#totalDaysInMonth) - -```js -totalDaysInYear(2008); // 366 (leap year) -totalDaysInYear(2009); // 365 - -// you can also pass a Date object as single argument -totalDaysInYear( new Date(2013, 0, 1) ); // 365 -``` - - - -## weekOfTheYear(date, [firstDayOfWeek]):Number - -Returns how many weeks elapsed since start of the year (`0..53`). - -`firstDayOfWeek` can be `0` (Sunday) or `1` (Monday). By default weeks start at -Sunday. - -It will return `0` if `date` is before the first `firstDayOfWeek` of the year. - -```js -// Tue Jan 01 2013 -weekOfTheYear( new Date(2013,0,1) ); // 0 -// Wed Jan 09 2013 -weekOfTheYear( new Date(2013,0,9) ); // 1 -// Sun Jan 01 2012 -weekOfTheYear( new Date(2012,0,1) ); // 1 -// Mon Jan 09 2012 -weekOfTheYear( new Date(2012,0,9) ); // 2 -``` - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/function.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/function.md deleted file mode 100644 index f753744e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/function.md +++ /dev/null @@ -1,210 +0,0 @@ -# function # - -Function*(al)* utilities. - - - -## bind(fn, context, [...args]):Function - -Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - -### Arguments - - 1. `fn` (Function) : Target Function - 2. `context` (Object) : Execution context (object used as `this`) - 3. `[...args]` (*) : Arguments (0...n arguments) - -See: [`partial()`](#partial), [object/bindAll](./object.html#bindAll) - - - -## compose(...fn):Function - -Returns the composition of a list of functions, where each function consumes -the return value of the function that follows. In math terms, composing the -functions `f()`, `g()`, and `h()` produces `f(g(h()))`. - -```js -function add2(x) { return x + 2 } -function multi2(x) { return x * 2 } -map([1, 2, 3], compose(add2, multi2)); // [4, 6, 8] - -//same as -map([1, 2, 3], function(x){ - return add2( multi2(x) ); -}); -``` - - - -## debounce(fn, delay[, isAsap]):Function - -Creates a function that will delay the execution of `fn` until after `delay` -milliseconds have elapsed since the last time it was invoked. - -Subsequent calls to the debounced function will return the result of the last -`fn` call. - -```js -// sometimes less is more -var lazyRedraw = debounce(redraw, 300); -foo.on.resize.add(lazyRedraw); -``` - -In this visualization, `|` is a debounced-function call and `X` is the actual -callback execution: - - Default - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X - - Debounced with `isAsap == true`: - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X - -You also have the option to cancel the debounced call if it didn't happen yet: - -```js -lazyRedraw(); -// lazyRedraw won't be called since `cancel` was called before the `delay` -lazyRedraw.cancel(); -``` - -See: [`throttle()`](#throttle) - - -## func(name):Function - -Returns a function that calls a method with given `name` on supplied object. -Useful for iteration methods like `array/map` and `array/forEach`. - -See: [`prop()`](#prop) - -```js -// will call the method `getName()` for each `user` -var names = map(users, func('getName')); -``` - - - -## partial(fn, [...args]):Function - -Return a partially applied function supplying default arguments. - -This method is similar to [`bind`](#bind), except it does not alter the this -binding. - -### Arguments - - 1. `fn` (Function) : Target Function - 2. `[...args]` (*) : Arguments (0...n arguments) - -See: [`bind()`](#bind) - -```js -function add(a, b){ return a + b } -var add10 = partial(add, 10); -console.log( add10(2) ); // 12 -``` - - - -## prop(name):Function - -Returns a function that gets a property with given `name` from supplied object. -Useful for using in conjunction with `array/map` and/or for creating getters. - -See: [`array/pluck()`](array.html#pluck) - -```js -var users = [{name:"John", age:21}, {name:"Jane", age:25}]; -// ["John", "Jane"] -var names = map(users, prop('name')); -``` - - - -## series(...fn):Function - -Returns a function that will execute all the supplied functions in order and -passing the same parameters to all of them. Useful for combining multiple -`array/forEach` into a single one and/or for debugging. - -```js -// call `console.log()` and `doStuff()` for each item item in the array -forEach(arr, series(console.log, doStuff)); -``` - - - -## throttle(fn, interval):Function - -Creates a function that, when executed, will only call the `fn` function at -most once per every `interval` milliseconds. - -If the throttled function is invoked more than once during the wait timeout, -`fn` will also be called on the trailing edge of the timeout. - -Subsequent calls to the throttled function will return the result of the last -`fn` call. - -```js -// sometimes less is more -var lazyRedraw = throttle(redraw, 300); -foo.on.resize.add(lazyRedraw); -``` - -In this visualization, `|` is a throttled-function call and `X` is the actual -`fn` execution: - - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X X X X X X X X X X X - -You also have the option to cancel the throttled call if it didn't happen yet: - -```js -lazyRedraw(); -setTimeout(function(){ - lazyRedraw(); - // lazyRedraw will be called only once since `cancel` was called before - // the `interval` for 2nd call completed - lazyRedraw.cancel(); -}, 250); -``` - -See: [`debounce()`](#debounce) - - -## timeout(fn, millis, context, [...args]):Number - -Functions as a wrapper for `setTimeout`. Calls a the function `fn` after a given delay `millis` in milliseconds. -The function is called within the specified context. The return value can be used to clear the timeout using `clearTimeout`. - -```js -var id = timeout(doStuff, 300, this); - -clearTimeout(id); -``` - -## times(n, callback, [context]):void - -Iterates over a callback `n` times. - -### Arguments - - 1. `n` (Number) : Number of iterations - 2. `callback` (Function) : Closure executed for every iteration - 3. `context` (Object) : Execution context (object used as `this`) - -```js -var output = ''; -times(5, function(i) { - output += i.toString(); -}); -// output: 01234 -``` - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/lang.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/lang.md deleted file mode 100644 index 8ad3928b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/lang.md +++ /dev/null @@ -1,464 +0,0 @@ -# lang # - -Language Utilities. Easier inheritance, scope handling, type checks. - - - -## clone(val):* - -Clone native types like Object, Array, RegExp, Date and primitives. - -This method will not clone values that are referenced within `val`. It will -only copy the value reference to the new value. If the value is not a plain -object but is an object, it will return the value unchanged. - -### Example - -```js -var a = { foo: 'bar' }; -var b = clone(a); -console.log(a === b); // false -console.log(a.foo === b.foo); // true - -var c = [1, 2, 3]; -var d = clone(b); -console.log(c === d); // false -console.log(c); // [1, 2, 3] -``` - -See: [`deepClone()`](#deepClone) - - - -## createObject(parent, [props]):Object - -Create Object using prototypal inheritance and setting custom properties. - -Mix between [Douglas Crockford Prototypal Inheritance](http://javascript.crockford.com/prototypal.html) and [`object/mixIn`](./object.html#mixIn). - -### Arguments - - 1. `parent` (Object) : Parent Object - 2. `[props]` (Object) : Object properties - -### Example - -```js -var base = { - trace : function(){ - console.log(this.name); - } -}; - -var myObj = createObject(base, { - name : 'Lorem Ipsum' -}); - -myObject.trace(); // "Lorem Ipsum" -``` - - - -## ctorApply(constructor, args):Object - -Do `Function.prototype.apply()` on a constructor while maintaining prototype -chain. - -```js -function Person(name, surname) { - this.name = name; - this.surname = surname; -} - -Person.prototype.walk = function(){ - console.log(this.name +' is walking'); -}; - -var args = ['John', 'Doe']; - -// "similar" effect as calling `new Person("John", "Doe")` -var john = ctorApply(Person, args); -john.walk(); // "John is walking" -``` - - - -## deepClone(val, [instanceClone]):* - -Deep clone native types like Object, Array, RegExp, Date and primitives. - -The `instanceClone` function will be invoked to clone objects that are not -"plain" objects (as defined by [`isPlainObject`](#isPlainObject)) if it is -provided. If `instanceClone` is not specified, it will not attempt to clone -non-plain objects, and will copy the object reference. - -### Example - -```js -var a = {foo:'bar', obj: {a:1, b:2}}; -var b = deepClone(a); // {foo:'bar', obj: {a:1, b:2}} -console.log( a === b ); // false -console.log( a.obj === b.obj ); // false - -var c = [1, 2, [3, 4]]; -var d = deepClone(c); // [1, 2, [3, 4]] -var e = c.concat(); // [1, 2, [3, 4]] - -console.log( c[2] === d[2] ); // false -// concat doesn't do a deep clone, arrays are passed by reference -console.log( e[2] === d[2] ); // true - -function Custom() { } -function cloneCustom(x) { return new Custom(); } -var f = { test: new Custom() }; -var g = deepClone(f, cloneCustom); -g.test === f.test // false, since new Custom instance will be created -``` - -See: [`clone()`](#clone) - - - -## defaults(val, ...defaults):void - -Return first value that isn't `null` or `undefined`. - - function doSomethingAwesome(foo, bar) { - // default arguments - foo = defaults(foo, 'lorem'); - bar = defaults(bar, 123); - // ... - } - - - -## inheritPrototype(childCtor, parentCtor):void - -Inherit the prototype methods from one constructor into another. - -Similar to [node.js util/inherits](http://nodejs.org/docs/latest/api/util.html#util_util_inherits_constructor_superconstructor). - -```js -function Foo(name){ - this.name = name; -} -Foo.prototype = { - getName : function(){ - return this.name; - } -}; - -function Bar(name){ - Foo.call(this, name); -} -//should be called before calling constructor -inheritPrototype(Bar, Foo); - -var myObj = new Bar('lorem ipsum'); -myObj.getName(); // "lorem ipsum" - -console.log(myObj instanceof Foo); // true - -// you also have access to the "super" constructor -console.log(Bar.super_ === Foo); // true -``` - - -## is(x, y):Boolean - -Check if both values are identical/egal. - -```js -// wtfjs -NaN === NaN; // false --0 === +0; // true - -is(NaN, NaN); // true -is(-0, +0); // false -is('a', 'b'); // false -``` - -See: [`isnt()`](#isnt) - - - -## isnt(x, y):Boolean - -Check if both values are not identical/egal. - -```js -// wtfjs -NaN === NaN; // false --0 === +0; // true - -isnt(NaN, NaN); // false -isnt(-0, +0); // true -isnt('a', 'b'); // true -``` - -See: [`is()`](#is) - - - - -## isArguments(val):Boolean - -If value is an "Arguments" object. - - - -## isArray(val):Boolean - -If value is an Array. Uses native ES5 `Array.isArray()` if available. - - - -## isBoolean(val):Boolean - -If value is a Boolean. - - - -## isDate(val):Boolean - -If value is a Date. - - - -## isEmpty(val):Boolean - -Checks if Array/Object/String is empty. - - -```js -isEmpty(''); // true -isEmpty('bar'); // false -isEmpty([]); // true -isEmpty([1, 2]); // false -isEmpty({}); // true -isEmpty({a:1, b:2}); // false -``` - - -## isFinite(val):Boolean - -Checks if value is Finite. - -**IMPORTANT:** This is not the same as native `isFinite`, which will return -`true` for values that can be coerced into finite numbers. See -http://es5.github.com/#x15.1.2.5. - -```js -isFinite(123); // true -isFinite(Infinity); // false - -// this is different than native behavior -isFinite(''); // false -isFinite(true); // false -isFinite([]); // false -isFinite(null); // false -``` - - -## isFunction(val):Boolean - -If value is a Function. - - - -## isKind(val, kind):Boolean - -If value is of "kind". (used internally by some of the *isSomething* checks). - -Favor the other methods since strings are commonly mistyped and also because -some "kinds" can only be accurately checked by using other methods (e.g. -`Arguments`), some of the other checks are also faster. - -```js -isKind([1,2], 'Array'); // true -isKind(3, 'Array'); // false -isKind(3, 'Number'); // true -``` - -See: [`kindOf()`](#kindOf) - - - -## isInteger(val):Boolean - -Check if value is an integer. - -```js -isInteger(123); // true -isInteger(123.45); // false -isInteger({}); // false -isInteger('foo'); // false -isInteger('123'); // false -``` - - - -## isNaN(val):Boolean - -Check if value is not a number. - -It doesn't coerce value into number before doing the check, giving better -results than native `isNaN`. Returns `true` for everything besides numeric -values. - -**IMPORTANT:** behavior is very different than the native `isNaN` and way more -useful!!! See: http://es5.github.io/#x15.1.2.4 - -```js -isNaN(123); // false - -isNaN(NaN); // true -isNaN({}); // true -isNaN(undefined); // true -isNaN([4,5]); // true - -// these are all "false" on native isNaN and main reason why this module exists -isNaN(''); // true -isNaN(null); // true -isNaN(true); // true -isNaN(false); // true -isNaN("123"); // true -isNaN([]); // true -isNaN([5]); // true -``` - - - -## isNull(val):Boolean - -If value is `null`. - - - -## isNumber(val):Boolean - -If value is a Number. - - - -## isObject(val):Boolean - -If value is an Object. - - - -## isPlainObject(val):Boolean - -If the value is an Object created by the Object constructor. - - - -## isRegExp(val):Boolean - -If value is a RegExp. - - - -## isString(val):Boolean - -If value is a String. - - - -## isUndefined(val):Boolean - -If value is `undefined`. - - - -## kindOf(val):String - -Gets kind of value (e.g. "String", "Number", "RegExp", "Null", "Date"). -Used internally by `isKind()` and most of the other *isSomething* checks. - -```js -kindOf([1,2]); // "Array" -kindOf('foo'); // "String" -kindOf(3); // "Number" -``` - -See: [`isKind()`](#isKind) - - -## toArray(val):Array - -Convert array-like object into Array or wrap value into Array. - -```js -toArray({ - "0" : "foo", - "1" : "bar", - "length" : 2 -}); // ["foo", "bar"] - -function foo(){ - return toArray(arguments); -} -foo("lorem", 123); // ["lorem", 123] - -toArray("lorem ipsum"); // ["lorem ipsum"] -toArray(window); // [window] -toArray({foo:"bar", lorem:123}); // [{foo:"bar", lorem:123}] -``` - -See: object/values() - - - -## toNumber(val):Number - -Convert value into number. - -```js -// numeric values are typecasted as Number -toNumber('123'); // 123 -toNumber(-567); // -567 - -// falsy values returns zero -toNumber(''); // 0 -toNumber(null); // 0 -toNumber(undefined); // 0 -toNumber(false); // 0 - -// non-numeric values returns NaN -toNumber('asd'); // NaN -toNumber({}); // NaN -toNumber([]); // NaN - -// Date objects return milliseconds since epoch -toNumber(new Date(1985, 6, 23)); // 490935600000 -``` - - - -## toString(val):String - -Convert any value to its string representation. - -Will return an empty string for `undefined` or `null`, otherwise will convert -the value to its string representation. - -```js -// null and undefined are converted into empty strings -toString(null); // "" -toString(undefined); // "" - -toString(1); // "1" -toString([1,2,3]); // "1,2,3" -toString(false); // "false" - -// uses `val.toString()` to convert value -toString({toString:funtion(){ return 'foo'; }}); // "foo" -``` - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/math.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/math.md deleted file mode 100644 index f45be3ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/math.md +++ /dev/null @@ -1,298 +0,0 @@ -# math # - -Math utilities. - - -## ceil(val[, step]):Number - -Round value up to full steps. Similar to `Math.ceil()` but can round value -to an arbitrary *radix*. - - ceil(7.2); // 8 - ceil(7.8); // 8 - ceil(7, 5); // 10 - ceil(11, 5); // 15 - ceil(15, 5); // 15 - -### Common use cases - -Round values by increments of 5/10/1000/etc. - -See: [`round()`](#round), [`floor()`](#floor), [`countSteps()`](#countSteps) - - - -## clamp(val, min, max):Number - -Clamps value inside range. - -`clamp()` is extremely useful in cases where you need to limit a value inside -a certain range. So instead of doing a complex `if/else` to filter/process the -value you can restrict it to always be inside the desired range: - - clamp(-5, 0, 10); // 0 - clamp(7, 1, 10); // 7 - clamp(8, 1, 10); // 8 - clamp(10, 1, 10); // 10 - clamp(11, 1, 10); // 10 - -If the value is smaller than `min` it returns the `min`, if `val` is higher -than `max` it returns `max`. - -### Common use cases - -Any situation where you need to limit a number inside a range like: slider -position, image galleries <small>(so user can't skip to an image that doesn't -exist)</small>, drag and drop, scroll boundaries, etc. - -See: [`loop()`](#loop) - - - - -## countSteps(val, step[, overflow]):Number - -Count number of full steps. - -### Arguments: - - 1. `val` (Number) : Value. - 2. `step` (Number) : Step size. - 3. `[overflow]` (Number) : Maximum number of steps, nSteps will loop if -`>=` than overflow. - - -Count steps is very useful for cases where you need to know how many "full -steps" the number *completed*. Think of it as a division that only returns -integers and ignore remainders. - - countSteps(3, 5); // 0 - countSteps(6, 5); // 1 - countSteps(12, 5); // 2 - countSteps(18, 5); // 3 - countSteps(21, 5); // 4 - -You can also set an `overflow` which will reset the *counter* before reaching -this number. - - countSteps(3, 5, 3); // 0 - countSteps(6, 5, 3); // 1 - countSteps(12, 5, 3); // 2 - countSteps(18, 5, 3); // 0 - countSteps(21, 5, 3); // 1 - -### Common use cases - -#### How many items fit inside an area: - - var containerWidth = 100; - var itemWidth = 8; - var howManyFit = countSteps(containerWidth, itemWidth); // 12 - -#### Split value into different scales or convert value from one scale to another - -From [mout/time/parseMs](time.html#parseMs): - - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - // {days:27, hours:4, minutes:26, seconds:5, milliseconds:454} - parseMs(2348765454); - - - -## floor(val[, step]):Number - -Round value down to full steps. Similar to `Math.floor()` but can round value -to an arbitrary *radix*. (formerly `snap`) - - floor(7.2); // 7 - floor(7.8); // 7 - floor(7, 5); // 5 - floor(11, 5); // 10 - floor(15, 5); // 15 - -### Common use cases - -Round values by increments of 5/10/1000/etc. - -See: [`round()`](#round), [`ceil()`](#ceil), [`countSteps()`](#countSteps) - - - -## inRange(val, min, max[, threshold]):Boolean - -Checks if value is inside the range. - - inRange(-6, 1, 10); // false - inRange( 5, 1, 10); // true - inRange(12, 1, 10); // false - -The threshold can be useful when you want granular control of what should match -and/or the precision could change at runtime or by some configuration option, -avoids the clutter of adding/subtracting the `threshold` from `mix` and `max`. - - inRange(12, 1, 10, 2); // true - inRange(13, 1, 10, 2); // false - -### Common use cases - -Anything that needs to check if value is inside a range, be it collision -detection, limiting interaction by mouse position, ignoring parts of the logic -that shouldn't happen if value isn't valid, simplify `if/else` conditions, -making code more readable, etc... - - - - -## isNear(val, target, threshold):Boolean - -Check if value is close to target. - -Similar to `inRange()` but used to check if value is close to a certain value -or match the desired value. Basically to simplify `if/else` conditions and to -make code clearer. - - isNear( 10.2, 10, 0.5); // true - isNear( 10.5, 10, 0.5); // true - isNear(10.51, 10, 0.5); // false - -### Common use cases - -Games where a certain action should happen if an *actor* is close to a target, -gravity fields, any numeric check that has some tolerance. - - - - -## lerp(ratio, start, end):Number - -Linear interpolation. - - lerp(0.5, 0, 10); // 5 - lerp(0.75, 0, 10); // 7.5 - -### Common use cases - -Linear interpolation is commonly used to create animations of elements moving -from one point to another, where you simply update the current ratio (which in -this case represents time) and get back the position of the element at that -"frame". - -The core idea of `lerp` is that you are using a number that goes from `0` to -`1` to specify a ratio inside that scale. This concept can be applied to -convert numbers from different scales easily. - -See: [`map()`](#map), [`norm()`](#norm) - - - - -## loop(val, min, max):Number - -Loops value inside range. Will return `min` if `val > max` and `max` if `val -< min`, otherwise it returns `val`. - - loop(-1, 0, 10); // 10 - loop( 1, 0, 10); // 1 - loop( 5, 0, 10); // 5 - loop( 9, 0, 10); // 9 - loop(10, 0, 10); // 10 - loop(11, 0, 10); // 0 - -Similar to [`clamp()`](#clamp) but *loops* the value inside the range when an -overflow occurs. - -### Common use cases - -Image galleries, infinite scroll, any kind of logic that requires that the -first item should be displayed after the last one or the last one should be -displayed after first if going on the opposite direction. - -See: [`clamp()`](#clamp) - - - - -## map(val, min1, max1, min2, max2):Number - -Maps a number from one scale to another. - - map(3, 0, 4, -1, 1) // 0.5 - map(3, 0, 10, 0, 100) // 30 - -### Common use cases - -Very useful to convert values from/to multiple scales. - -Let's suppose we have a slider that needs to go from `2000` to `5000` and that slider -has `300px` of width, here is how we would translate the knob position into the -current value: - - var knobX = 123; - var sliderWid = 300; - var minVal = 2000; - var maxVal = 5000; - - var curVal = map(knobX, 0, sliderWid, minVal, maxVal); // 3230 - -See: [`lerp()`](#lerp), [`norm()`](#norm) - - - - -## norm(val, min, max):Number - -Gets normalized ratio of value inside range. - - norm(50, 0, 100); // 0.5 - norm(75, 0, 100); // 0.75 - -### Common use cases - -Convert values between scales, used by [`map()`](#map) internally. Direct -opposite of [`lerp()`](#lerp). - -See: [`lerp()`](#lerp), [`map()`](#map) - - - -## round(val[, step]):Number - -Round value to full steps. Similar to `Math.round()` but allow setting an -arbitrary *radix*. - - // default - round(0.22); // 0 - round(0.49); // 0 - round(0.51); // 1 - - // custom radix - round(0.22, 0.5); // 0 - round(0.49, 0.5); // 0.5 - round(0.51, 0.5); // 0.5 - round(0.74, 0.5); // 0.5 - round(0.75, 0.5); // 1 - round(1.24, 0.5); // 1 - round(1.25, 0.5); // 1.5 - round(1.74, 0.5); // 1.5 - -### Common use cases - -Round values by increments of 0.5/5/10/1000/etc. - -See: [`floor()`](#floor), [`ceil()`](#ceil), [`countSteps()`](#countSteps) - - - -------------------------------------------------------------------------------- - -For more usage more info check the specs and source code. - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/number.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/number.md deleted file mode 100644 index 8d93865b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/number.md +++ /dev/null @@ -1,225 +0,0 @@ -# number # - -Number utilities. - - -## abbreviate(val[, nDecimalDigits, dictionary]):String - -Abbreviate number to thousands (K), millions (M) or billions (B). - -The default value for `nDecimalDigits` is `1`. - -### Example - - abbreviate(123456); // "123.5K" - abbreviate(12345678); // "12.3M" - abbreviate(1234567890); // "1.2B" - -You can set the amount of decimal digits (default is `1`): - - abbreviate(543); // "0.5K" - abbreviate(543, 1); // "0.5K" - abbreviate(543, 2); // "0.54K" - abbreviate(543, 3); // "0.543K" - -You can customize the abbreviation by passing a custom "dictionary": - - var _ptbrDict = { - thousands : ' mil', - millions : ' Mi', - billions : ' Bi' - }; - function customAbbr(val) { - return abbreviate(val, 1, _ptbrDict); - } - - customAbbr(123456); // "123.5 mil" - customAbbr(12345678); // "12.3 Mi" - customAbbr(1234567890); // "1.2 Bi" - - - -## currencyFormat(val[, nDecimalDigits, decimalSeparator, thousandsSeparator]):String - -Format a number as currency. - -### Example: - - currencyFormat(1000); // "1,000.00" - currencyFormat(1000, 1); // "1,000.0" - currencyFormat(1000, 2, ',', '.'); // "1.000,00" - - - -## enforcePrecision(val, nDecimalDigits):Number - -Enforce a specific amount of decimal digits and also fix floating point -rounding issues. - -### Example: - -```js -enforcePrecision(0.615, 2); // 0.62 -enforcePrecision(0.625, 2); // 0.63 -//floating point rounding "error" (rounds to odd number) -+(0.615).toFixed(2); // 0.61 -+(0.625).toFixed(2); // 0.63 -``` - - - -## MAX_INT:Number - -Maximum 32-bit signed integer value. `Math.pow(2, 31) - 1` - -### Example: - -```js -console.log( MAX_INT ); // 2147483647 -``` - - -## MAX_UINT:Number - -Maximum 32-bit unsigned integer value. `Math.pow(2, 32) - 1` - -### Example: - -```js -console.log( MAX_UINT ); // 4294967295 -``` - - -## MIN_INT:Number - -Minimum 32-bit signed integer value. `Math.pow(2, 31) * -1`. - -### Example: - -```js -console.log( MIN_INT ); // -2147483648 -``` - - -## pad(n, minLength[, char]):String - -Add padding zeros if `n.length` < `minLength`. - -### Example: - -```js -pad(1, 5); // "00001" -pad(12, 5); // "00012" -pad(123, 5); // "00123" -pad(1234, 5); // "01234" -pad(12345, 5); // "12345" -pad(123456, 5); // "123456" - -// you can also specify the "char" used for padding -pad(12, 5, '_'); // "___12" -``` - -see: [string/lpad](./string.html#lpad) - - - -## rol(val, shift):Number - -Bitwise circular shift left. - -More info at [Wikipedia#Circular_shift](http://en.wikipedia.org/wiki/Circular_shift) - - - -## ror(val, shift):Number - -Bitwise circular shift right. - -More info at [Wikipedia#Circular_shift](http://en.wikipedia.org/wiki/Circular_shift) - - - -## sign(val):Number - -Returns `-1` if value is negative, `0` if the value is `0` and `1` if value is positive. Useful for -multiplications. - -```js -sign(-123); // -1 -sign(123); // 1 -sign(0); // 0 -``` - - - -## toInt(val):Number - -"Convert" value into an 32-bit integer. Works like `Math.floor` if `val > 0` and -`Math.ceil` if `val < 0`. - -**IMPORTANT:** val will wrap at [number/MIN_INT](#MIN_INT) and -[number/MAX_INT](#MAX_INT). - -Created because most people don't know bitwise operations and also because this -feature is commonly needed. - -[Perf tests](http://jsperf.com/vs-vs-parseint-bitwise-operators/7) - -### Example: - -```js -toInt(1.25); // 1 -toInt(0.75); // 0 -toInt(-0.55); // 0 -toInt(-5.0001) // -5 -``` - - - -## toUInt(val):Number - -"Convert" value into an 32-bit unsigned integer. - -Works like AS3#uint(). - -**IMPORTANT:** val will wrap at 2^32. - -### Example: - -```js -toUInt(1.25); // 1 -toUInt(0.75); // 0 -toUInt(-0.55); // 0 -toUInt(-5.0001); // 4294967291 -toUInt(Math.pow(2,32) - 0.5); // 4294967295 -toUInt(Math.pow(2,32) + 0.5); // 0 -``` - - -## toUInt31(val):Number - -"Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - -Useful since all bitwise operators besides `>>>` treat numbers as signed -integers. - -**IMPORTANT:** val will wrap at 2^31 and negative numbers will be treated as -`zero`. - -### Example: - -```js -toUInt31(1.25); // 1 -toUInt31(0.75); // 0 -toUInt31(-0.55); // 0 -toUInt31(-5.0001); // 0 -toUInt31(Math.pow(2,31) - 0.5); // 21474836470 -toUInt31(Math.pow(2,31) + 0.5); // 0 -``` - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/object.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/object.md deleted file mode 100644 index b120aeed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/object.md +++ /dev/null @@ -1,780 +0,0 @@ -# object # - -Object utilities. - - - -## bindAll(obj, [...methodNames]):void - -Bind methods of the target object to always execute on its own context -(ovewritting the original function). - -See: [function/bind](./function.html#bind) - -```js -var view = { - name: 'Lorem Ipsum', - logNameOnClick: function() { - console.log(this.name); - } -}; - -// binds all methods by default -bindAll(view); -jQuery('#docs').on('click', view.logNameOnClick); -``` - -You can also specify the list of methods that you want to bind (in case you -just want to bind a few of them). - -```js -// only the listed methods will be bound to `obj` context -bindAll(obj, 'logNameOnClick', 'doAwesomeStuffOnDrag'); -``` - - - -## contains(obj, value):Boolean - -Similar to [Array/contains](array.html#contains). Checks if Object contains -value. - -```js -var obj = { - a: 1, - b: 2, - c: 'bar' -}; -contains(obj, 2); // true -contains(obj, 'foo'); // false -``` - - - -## deepEquals(a, b, [callback]):Boolean - -Recursively tests whether two objects contain the same keys and equal values. - -`callback` specifies the equality comparison function used to compare -non-object values. It defaults to using the strict equals (`===`) operator. - -If the values are both an object, it will recurse into the objects, checking if -their keys/values are equal. It will only check the keys and values contained -by the objects; it will not check the objects' prototypes. If the either of -the values are not objects, they will be checked using the `callback` function. - -Example: - -```js -deepEquals({ a: 1 }, { a: 1 }); // true -deepEquals({ value: { a: 1 } }, { value: { a: 1 } }); // true -deepEquals({ value: { a: 1 } }, { value: { a: 2 } }); // false -deepEquals({ value: { a: 1 } }, { value: { a: 1, b: 2 } }); // false -deepEquals({}, null); // false -deepEquals(null, null); // true -deepEquals( - { a: { b: 1 } }, - { a: { b: '1' } }, - function(a, b) { return a == b; }); // true -``` - -See: [`equals()`](#equals) - - - -## deepFillIn(target, ...objects):Object - -Fill missing properties recursively. - -It's different from `deepMixIn` since it won't override any existing property. -It's also different from `merge` since it won't clone child objects during the -process. - -It returns the target object and mutates it in place. - -See: [`fillIn()`](#fillIn), [`deepMixIn()`](#deepMixIn), [`merge()`](#merge) - -```js -var base = { - foo : { - bar : 123 - }, - lorem : 'ipsum' -}; -var options = deepFillIn({foo : { baz : 45 }, lorem : 'amet'}, base); -// > {foo: {bar:123, baz : 45}, lorem : 'amet'} -``` - - - -## deepMatches(target, pattern):Boolean - -Recursively checks if object contains all properties/value pairs. When both -the target and pattern values are arrays, it checks that the target value -contain matches for all the items in the pattern array (independent of order). - -```js -var john = { - name: 'John', - age: 22, - pets: [ - { type: 'cat', name: 'Grumpy Cat' }, - { type: 'dog', name: 'Hawk' } - ] -}; - -deepMatches(john, { name: 'John' }); // true -deepMatches(john, { age: 21 }); // false -deepMatches(john, { pets: [ { type: 'cat' } ] }); // true -deepMatches(john, { pets: [ { name: 'Hawk' } ] }); // true -deepMatches(john, { pets: [ { name: 'Hairball' } ] }); // false -``` - -See [`matches()`](#matches) - - - -## deepMixIn(target, ...objects):Object - -Mixes objects into the target object, recursively mixing existing child objects -as well. - -It will only recursively mix objects if both (existing and new) values are -plain objects. - -Returns the target object. Like [`merge()`](#merge), but mutates the target -object, and does not clone child objects. - -```js -var target = { - foo: { - name: "foo", - id: 1 - } -}; - -deepMixIn(target, { foo: { id: 2 } }); -console.log(target); // { foo: { name: "foo", id: 2 } } -``` - -See: [`mixIn()`](#mixIn), [`merge()`](#merge), [`deepFillIn()`](#deepFillIn) - - - -## equals(a, b, [callback]):Boolean - -Tests whether two objects contain the same keys and values. - -`callback` specifies the equality comparison function used to compare the -values. It defaults to using the strict equals (`===`) operator. - -It will only check the keys and values contained by the objects; it will not -check the objects' prototypes. If either of the values are not objects, they -will be compared using the `callback` function. - -```js -equals({}, {}); // true -equals({ a: 1 }, { a: 1 }); // true -equals({ a: 1 }, { a: 2 }); // false -equals({ a: 1, b: 2 }, { a: 1 }); // false -equals({ a: 1 }, { a: 1, b: 2 }); // false -equals(null, null); // true -equals(null, {}); // false -equals({ a: 1 }, { a: '1' }, function(a, b) { return a == b; }); // true -``` - - - -## every(obj, callback, [thisObj]):Boolean - -Similar to [Array/every](array.html#every). Tests whether all properties in the -object pass the test implemented by the provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -every(obj, isNumber); // false -``` - - - -## fillIn(obj, ...default):Object - -Fill in missing properties in object with values from the *defaults* objects. - - var base = { - foo : 'bar', - num : 123 - }; - - fillIn({foo:'ipsum'}, base); // {foo:'ipsum', num:123} - -PS: it allows merging multiple objects at once, the first ones will take -precedence. - -See: [`mixIn()`](#mixIn), [`merge()`](#merge), [`deepFillIn()`](#deepFillIn) - - - -## filter(obj, callback, [thisObj]) - -Returns a new object containing all properties where `callback` returns true, -similar to Array/filter. It does not use properties from the object's -prototype. - -Callback receives the same arguments as `forOwn()`. - -See: [`forOwn()`](#forOwn), [`forIn()`](#forIn), [`pick()`](#pick) - -```js -var obj = { - foo: 'value', - bar: 'bar value' -}; - -// returns { bar: 'bar value' } -filter(obj, function(v) { return value.length > 5; }); - -// returns { foo: 'value' } -filter(obj, function(v, k) { return k === 'foo'; }); -``` - - - -## find(obj, callback, [thisObj]) - -Loops through all the properties in the Object and returns the first one that -passes a truth test (callback), similar to [Array/find](array.html#find). -Unlike Array/find, order of iteration is not guaranteed. - -```js -var obj = { - a: 'foo', - b: 12 -}; - -find(obj, isString); // 'foo' -find(obj, isNumber); // 12 -``` - - - -## forIn(obj, callback[, thisObj]) - -Iterate over all properties of an Object, similar to -[Array/forEach](array.html#forEach). - -It [avoids don't enum bug on IE](https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug). -It **will** iterate over inherited (enumerable) properties from the prototype. - -It allows exiting the iteration early by returning `false` on the callback. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys), [`values()`](#values) - -### Callback arguments - -Callback will receive the following arguments: - - 1. Property Value (*) - 2. Key name (String) - 3. Target object (Object) - -### Example - -```js -function Foo(){ - this.foo = 1; - this.bar = 2; -} - -Foo.prototype.lorem = 4; - -var obj = new Foo(); - -var result = 0; -var keys = []; - -forIn(obj, function(val, key, o){ - result += val; - keys.push(key); -}); - -console.log(result); // 7 -console.log(keys); // ['foo', 'bar', 'lorem'] -``` - - - -## forOwn(obj, callback[, thisObj]) - -Iterate over all own properties from an Object, similar to -[Array/forEach](array.html#forEach). - -It [avoids don't enum bug on IE](https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug). -Notice that it **won't** iterate over properties from the prototype. - -It allows exiting the iteration early by returning `false` on the callback. - -See: [`forIn()`](#forIn), [`keys()`](#keys), [`values()`](#values) - -### Callback arguments - -Callback will receive the following arguments: - - 1. Property Value (*) - 2. Key name (String) - 3. Target object (Object) - -### Example - -```js -function Foo(){ - this.foo = 1; - this.bar = 2; -} - -// will be ignored -Foo.prototype.lorem = 4; - -var obj = new Foo(); - -var result = 0; -var keys = []; - -forOwn(obj, function(val, key, o){ - result += val; - keys.push(key); -}); - -console.log(result); // 3 -console.log(keys); // ['foo', 'bar'] -``` - - - -## functions(obj):Array - -Returns a sorted list of all enumerable properties that have function values -(including inherited properties). - -```js -var obj = { - foo : function(){}, - bar : 'baz' -}; -functions(obj); // ['foo'] -``` - - - -## get(obj, propName):* - -Returns nested property value. Will return `undefined` if property doesn't -exist. - -See: [`set()`](#set), [`namespace()`](#namespace), [`has()`](#has) - -```js -var lorem = { - ipsum : { - dolor : { - sit : 'amet' - } - } - }; - -get(lorem, 'ipsum.dolor.sit'); // "amet" -get(lorem, 'foo.bar'); // undefined -``` - - - -## has(obj, propName):Boolean - -Checks if object contains a child property. Useful for cases where you need to -check if an object contain a *nested* property. It will get properties -inherited by the prototype. - -see: [`hasOwn()`](#hasOwn), [`get()`](#get) - -```js -var a = { - b : { - c : 123 - } - }; - -has(a, 'b.c'); // true -has(a, 'foo.c'); // false -``` - -### Common use case - -```js -if( has(a, 'foo.c') ){ // false - // ... -} - -if( a.foo.c ){ // ReferenceError: `foo` is not defined - // ... -} -``` - - - -## hasOwn(obj, propName):Boolean - -Safer `Object.hasOwnProperty`. Returns a boolean indicating whether the object -has the specified property. - -see: [`has()`](#has) - -```js -var obj = { - foo: 1, - hasOwnProperty : 'bar' -}; - -obj.hasOwnProperty('foo'); // ERROR! hasOwnProperty is not a function - -hasOwn(obj, 'foo'); // true -hasOwn(obj, 'hasOwnProperty'); // true -hasOwn(obj, 'toString'); // false -``` - - - -## keys(obj):Array - -Returns an array of all own enumerable properties found upon a given object. -It will use the native `Object.keys` if present. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`values()`](#values) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -keys(obj); // ['foo', 'bar', 'lorem'] -``` - - - -## map(obj, callback, [thisObj]):Object - -Returns a new object where the property values are the result of calling the -callback for each property in the original object, similar to Array/map. - -The callback function receives the same arguments as in `forOwn()`. - -See: [`forOwn()`](#forOwn) - -```js -var obj = { foo: 1, bar: 2 }, - data = { foo: 0, bar: 1 }; - -map(obj, function(v) { return v + 1; }); // { foo: 2, bar: 3 } -map(obj, function(v, k) { return k; }); // { foo: "foo", bar: "bar" } -map(obj, function(v, k) { return this[k]; }, data); // { foo: 0, bar: 1 } -``` - - - -## matches(obj, props):Boolean - -Checks if object contains all properties/values pairs. Useful for validation -and filtering. - -```js -var john = {age:25, hair:'long', beard:true}; -var mark = {age:27, hair:'short', beard:false}; -var hippie = {hair:'long', beard:true}; -matches(john, hippie); // true -matches(mark, hippie); // false -``` - -See [`deepMatches()`](#deepMatches) - - - -## merge(...objects):Object - -Deep merges objects. Note that objects and properties will be cloned during the -process to avoid undesired side effects. It return a new object and won't -affect source objects. - -```js -var obj1 = {a: {b: 1, c: 1, d: {e: 1, f: 1}}}; -var obj2 = {a: {b: 2, d : {f : 'yeah'} }}; - -merge(obj1, obj2); // {a: {b : 2, c : 1, d : {e : 1, f : 'yeah'}}} -``` - -See: [`deepMixIn()`](#deepMixIn), [`deepFillIn()`](#deepFillIn) - - - -## max(obj[, iterator]):* - -Returns maximum value inside object or use a custom iterator to define how -items should be compared. Similar to [Array/max](array.html#max). - -See: [`min()`](#min) - -```js -max({a: 100, b: 2, c: 1, d: 3, e: 200}); // 200 -max({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'lorem' -``` - - - -## min(obj[, iterator]):* - -Returns minimum value inside object or use a custom iterator to define how -items should be compared. Similar to [Array/min](array.html#min). - -See: [`max()`](#max) - -```js -min({a: 100, b: 2, c: 1, d: 3, e: 200}); // 1 -min({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'foo' -``` - - - -## mixIn(target, ...objects):Object - -Combine properties from all the objects into first one. - -This method affects target object in place, if you want to create a new Object -pass an empty object as first parameter. - -### Arguments - - 1. `target` (Object) : Target Object. - 2. `...objects` (...Object) : Objects to be combined (0...n objects). - -### Example - -```js -var a = {foo: "bar"}; -var b = {lorem: 123}; - -mixIn({}, a, b); // {foo: "bar", lorem: 123} -console.log(a); // {foo: "bar"} - -mixIn(a, b); // {foo: "bar", lorem: 123} -console.log(a); // {foo: "bar", lorem: 123} -``` - -See: [`fillIn()`](#fillIn), [`merge()`](#merge) - - - - -## namespace(obj, propName):Object - -Creates an empty object inside namespace if not existent. Will return created -object or existing object. - -See: [`get()`](#get), [`set()`](#set) - -```js -var obj = {}; -namespace(obj, 'foo.bar'); // {} -console.log(obj); // {foo:{bar:{}}} -``` - - - -## pick(obj, ...keys):Object - -Return a copy of the object that contains only the whitelisted keys. - -See: [`filter()`](#filter) - -```js -var user = { - firstName : 'John', - lastName : 'Doe', - dob : '1985/07/23', - gender : 'male' -}; - -// can pass an array of keys as second argument -var keys = ['firstName', 'dob'] -pick(user, keys); // {firstName:"John", dob: "1985/07/23"} - -// or multiple arguments -pick(user, 'firstName', 'lastName'); // {firstName:"John", lastName: "Doe"} -``` - - - -## pluck(obj, propName):Object - -Extract an object containing property values with keys as they appear in the -passed object. - -```js -var users = { - first: { - name : 'John', - age : 21 - }, - second: { - name : 'Mary', - age : 25 - } -}; - -pluck(users, 'name'); // {first: 'John', second: 'Mary'} ); -pluck(users, 'age'); // {first: 21, second: 25} ); -``` - - - -## reduce(obj, callback, initial, [thisObj]):* - -Similar to [Array/reduce](array.html#reduce). - -Apply a function against an accumulator and each property of the object (order -is undefined) as to reduce it to a single value. - -```js -var obj = {a: 1, b: 2, c: 3, d: 4}; - -function sum(prev, cur, key, list) { - compare1.push(prev); - return prev + cur; -} - -reduce(obj, sum); // 10 -``` - - - -## reject(obj, callback, thisObj):Object - -Returns a new object containing all properties where `callback` returns true, -similar to [Array/reject](array.html#reject). It does not use properties from -the object's prototype. Opposite of [`filter()`](#filter). - -See [`filter()`](#filter) - -### Example - -```js -var obj = {a: 1, b: 2, c: 3, d: 4, e: 5}; -reject(obj, function(x) { return (x % 2) !== 0; }); // {b: 2, d: 4} -``` - - - -## values(obj):Array - -Returns an array of all own enumerable properties values found upon a given object. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -values(obj); // [1, 2, 3] -``` - - - -## set(obj, propName, value) - -Sets a nested property value. - -See: [`get()`](#get), [`namespace()`](#namespace) - -```js -var obj = {}; -set(obj, 'foo.bar', 123); -console.log(obj.foo.bar); // 123 -console.log(obj); // {foo:{bar:123}} -``` - - - -## size(obj):Number - -Returns the count of own enumerable properties found upon a given object. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -size(obj); // 3 -``` - - - -## some(obj, callback, [thisObj]):Boolean - -Similar to [Array/some](array.html#some). Tests whether any properties in the -object pass the test implemented by the provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -some(obj, isNumber); // true -``` - - - -## unset(obj, propName):Boolean - -Delete object property if existent and returns a boolean indicating succes. It -will also return `true` if property doesn't exist. - -Some properties can't be deleted, to understand why [check this -article](http://perfectionkills.com/understanding-delete/). - -See: [`set()`](#set) - -```js -var lorem = { - ipsum : { - dolor : { - sit : 'amet' - } - } - }; - -unset(lorem, 'ipsum.dolor.sit'); // true -console.log(lorem.ipsum.dolor); // {} -unset(lorem, 'foo.bar'); // true -``` diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/queryString.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/queryString.md deleted file mode 100644 index 1be3c102..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/queryString.md +++ /dev/null @@ -1,115 +0,0 @@ -# queryString # - -Utilities for query string manipulation. - - - -## contains(url, paramName):Boolen - -Checks if query string contains parameter. - -### Arguments: - - 1. `url` (String) : URL or query string. - 2. `paramName` (String) : Parameter name. - -### Example: - -```js -var url = 'example.com/?lorem=ipsum'; -contains(url, 'lorem'); // true -contains(url, 'foo'); //false -``` - - - -## decode(queryStr[, shouldTypecast]):Object - -Parses query string and creates an object of keys => vals. - -Will typecast value with [`string/typecast`](string.html#typecast) by default -and decode string parameters using `decodeURIComponent()`. - -```js -var query = '?foo=bar&lorem=123'; -decode(query); // {foo: "bar", lorem: 123} -decode(query, false); // {foo: "bar", lorem: "123"} -``` - - -## encode(obj):String - -Encode object into a query string. - -Will encode parameters with `encodeURIComponent()`. - -```js -encode({foo: "bar", lorem: 123}); // "?foo=bar&lorem=123" -``` - - -## getParam(url, param[, shouldTypecast]):* - -Get query parameter value. - -Will typecast value with [`string/typecast`](string.html#typecast) by default. - -See: [`setParam()`](#setParam) - -### Arguments: - - 1. `url` (String) : Url. - 2. `param` (String) : Parameter name. - 3. `[shouldTypecast]` (Boolean) : If it should typecast value. - -### Example: - -```js -var url = 'example.com/?foo=bar&lorem=123&ipsum=false'; -getParam(url, 'dolor'); // "amet" -getParam(url, 'lorem'); // 123 -getParam(url, 'lorem', false); // "123" -``` - - -## parse(url[, shouldTypecast]):Object - -Parses URL, extracts query string and decodes it. - -It will typecast all properties of the query object unless second argument is -`false`. - -Alias to: `decode(getQuery(url))`. - -```js -var url = 'example.com/?lorem=ipsum&a=123'; -parse(url); // {lorem: "ipsum", a: 123} -parse(url, false); // {lorem: "ipsum", a: "123"} -``` - - -## getQuery(url):String - -Gets full query as string with all special chars decoded. - -```js -getQuery('example.com/?lorem=ipsum'); // "?lorem=ipsum" -``` - - -## setParam(url, paramName, value):String - -Add new query string parameter to URL or update existing value. - -See: [`getParam()`](#getParam) - -```js -setParam('?foo=bar&lorem=0', 'lorem', 'ipsum'); // '?foo=bar&lorem=ipsum' -setParam('?lorem=1', 'foo', 123); // '?lorem=1&foo=123' -``` - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/random.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/random.md deleted file mode 100644 index b058b4e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/random.md +++ /dev/null @@ -1,218 +0,0 @@ -# random # - -Pseudo-random generators. - -mout uses `Math.random` by default on all the pseudo-random generators, if -you need a seeded random or a better algorithm see the [`random()`](#random) -documentation for instructions. - - - -## choice(...items):* - -Returns a random element from the supplied arguments or from an array if single -argument is an array. - -### Example: - -```js -choice(1, 2, 3, 4, 5); // 3 - -var arr = ['lorem', 'ipsum', 'dolor']; -choice(arr); // 'dolor' -``` - - - -## guid():String - -Generates a pseudo-random [Globally Unique Identifier](http://en.wikipedia.org/wiki/Globally_unique_identifier) (v4). - -Since the total number of GUIDs is 2<sup>122</sup> the chance of generating the -same value twice is negligible. - -**Important:** this method uses `Math.random` by default so the UUID isn't -*safe* (sequence of outputs can be predicted in some cases), check the -[`random()`](#random) documentation for more info on how to replace the default -PRNG if you need extra safety or need *seeded* results. - -See: [`randHex()`](#randHex), [`random()`](#random) - -### Example: - -```js -guid(); // 830e9f50-ac7f-4369-a14f-ed0e62b2fa0b -guid(); // 5de3d09b-e79c-4727-932b-48c49228d508 -``` - - - -## rand([min], [max]):Number - -Gets a random number inside range or snap to min/max values. - -### Arguments: - - 1. `[min]` (Number) : Minimum value. Defaults to `number/MIN_INT`. - 2. `[max]` (Number) : Maximum value. Defaults to `number/MAX_INT`. - - -### Example: - -```js -rand(); // 448740433.55274725 -rand(); // -31797596.097682 -rand(0, 10); // 7.369723 -rand(0, 10); // 5.987042 -``` - -See: [`random()`](#random) - - - -## randBit():Number - -Returns a random "bit" (0 or 1). Useful for addition/subtraction. - -It's slightly faster than `choice(0, 1)` since implementation is simpler (not -that it will make a huge difference in most cases). - -See: [`choice()`](#choice) - -### Example: - -```js -randBit(); // 1 -randBit(); // 0 - -//same effect as -choice(0, 1); -``` - - - -## randHex([size]):String - -Returns a random hexadecimal string. - -The default `size` is `6`. - -### Example: - -```js -randHex(); // "dd8575" -randHex(); // "e6baeb" -randHex(2); // "a2" -randHex(30); // "effd7e2ad9a4a3067e30525fab983a" -``` - - - -## randInt([min], [max]):Number - -Gets a random integer inside range or snap to min/max values. - -### Arguments: - - 1. `[min]` (Number) : Minimum value. Defaults to `number/MIN_INT`. - 2. `[max]` (Number) : Maximum value. Defaults to `number/MAX_INT`. - - -### Example: - -```js -randInt(); // 448740433 -randInt(); // -31797596 -randInt(0, 10); // 7 -randInt(0, 10); // 5 -``` - - - -## randSign():Number - -Returns a random "sign" (-1 or 1). Useful for multiplications. - -It's slightly faster than `choice(-1, 1)` since implementation is simpler (not -that it will make a huge difference in most cases). - -See: [`choice()`](#choice) - -### Example: - -```js -randSign(); // -1 -randSign(); // 1 - -//same effect as -choice(-1, 1); -``` - - - -## random():Number - -Returns a random number between `0` and `1`. Same as `Math.random()`. - -```js -random(); // 0.35435103671625257 -random(); // 0.8768321881070733 -``` - -**Important:** No methods inside mout should call `Math.random()` -directly, they all use `random/random` as a proxy, that way we can -inject/replace the pseudo-random number generator if needed (ie. in case we -need a seeded random or a better algorithm than the native one). - -### Replacing the PRNG - -In some cases we might need better/different algorithms than the one provided -by `Math.random` (ie. safer, seeded). - -Because of licensing issues, file size limitations and different needs we -decided to **not** implement a custom PRNG and instead provide a easy way to -override the default behavior. - [issue #99](https://github.com/millermedeiros/amd-utils/issues/99) - -If you are using mout with a loader that supports the [AMD map -config](https://github.com/amdjs/amdjs-api/wiki/Common-Config), such as -[RequireJS](http://requirejs.org/), you can use it to replace the PRNG -(recommended approach): - -```js -requirejs.config({ - map : { - // all modules will load "my_custom_prng" instead of - // "mout/random/random" - '*' : { - 'mout/random/random' : 'my_custom_prng' - } - } -}); -``` - -You also have the option to override `random.get` in case you are using -mout on node.js or with a loader which doesn't support the map config: - -```js -// replace the PRNG -var n = 0; -random.get = function(){ - return ++n % 2? 0 : 1; // not so random :P -}; -random(); // 0 -random(); // 1 -random(); // 0 -random(); // 1 -``` - -See this [detailed explanation about PRNG in -JavaScript](http://baagoe.org/en/w/index.php/Better_random_numbers_for_javascript) -to understand the issues with the native `Math.random` and also for a list of -algorithms that could be used instead. - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/string.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/string.md deleted file mode 100644 index 04f61a76..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/string.md +++ /dev/null @@ -1,606 +0,0 @@ -# string # - -String utilities. - - -## camelCase(str):String - -Convert string to "camelCase" text. - -See: [`pascalCase()`](#pascalCase), [`unCamelCase()`](#unCamelCase) - -### Example - -```js -camelCase('lorem-ipsum-dolor'); // "loremIpsumDolor" -camelCase('lorem ipsum dolor'); // "loremIpsumDolor" -``` - - - -## contains(str, substring, [fromIndex]):Boolean - -Checks if string contains the given substring. - -See: [`startsWith()`](#startsWith), [`endsWith()`](#endsWith) - -### Example - -```js -contains('lorem', 'or'); // true -contains('lorem', 'bar'); // false -``` - - - -## crop(str, maxChars, [append]):String - -Truncate string at full words. Alias to `truncate(str, maxChars, append, true);`. - -See: [`truncate()`](#truncate) - -### Example - -```js -crop('lorem ipsum dolor', 10); // "lorem..." -crop('lorem ipsum dolor', 10, '+'); // "lorem+" -``` - - - -## endsWith(str, suffix):Boolean - -Checks if string ends with specified suffix. - -See: [`startsWith()`](#startsWith), [`contains()`](#contains) - -### Example - -```js -endsWith('lorem ipsum', 'lorem'); // false -endsWith('lorem ipsum', 'ipsum'); // true -``` - - - -## escapeHtml(str):String - -Escapes HTML special chars (`>`, `<`, `&`, `"`, `'`). - -See: [`unescapeHtml()`](#unescapeHtml) - -### Example - -```js -escapeHtml('lorem & "ipsum"'); // "lorem &amp; &quot;ipsum&quot;" -``` - - - -## escapeRegExp(str):String - -Escape special chars to be used as literals in RegExp constructors. - -### Example - -```js -str = escapeRegExp('[lorem.ipsum]'); // "\\[lorem\\.ipsum\\]" -reg = new RegExp(str); // /\[lorem\.ipsum\]/ -``` - - - -## escapeUnicode(str[, shouldEscapePrintable]):String - -Unicode escape chars. - -It will only escape non-printable ASCII chars unless `shouldEscapePrintable` is -set to `true`. - -See: [`unescapeUnicode()`](#unescapeUnicode) - -```js -escapeUnicode('føo bår'); -// > "f\u00f8o b\u00e5r" -escapeUnicode('føo bår', true); -// > "\u0066\u00f8\u006f\u0020\u0062\u00e5\u0072" -``` - - - -## hyphenate(str):String - -Replaces spaces with hyphens, split camelCase text, remove non-word chars, -remove accents and convert to lower case. - -See: [`slugify()`](#slugify), [`underscore()`](#underscore), -[`unhyphenate`](#unhyphenate) - -```js -hyphenate(' %# lorem ipsum ? $ dolor'); // "lorem-ipsum-dolor" -hyphenate('spéçïãl çhârs'); // "special-chars" -hyphenate('loremIpsum'); // "lorem-ipsum" -``` - - - -## insert(str, index, partial):String - -Inserts a `partial` before the given `index` in the provided `str`. -If the index is larger than the length of the string the partial is appended at the end. -A negative index is treated as `length - index` where `length` is the length or the string. - -```js -insert('this is a sentence', 10, 'sample '); // "this is a sample sentence" -insert('foo', 100, 'bar'); // "foobar" -insert('image.png', -4, '-large'); // "image-large.png" -``` - -## interpolate(str, replacements[, syntax]):String - -String interpolation. Format/replace tokens with object properties. - -```js -var tmpl = 'Hello {{name}}!'; -interpolate(tmpl, {name: 'World'}); // "Hello World!" -interpolate(tmpl, {name: 'Lorem Ipsum'}); // "Hello Lorem Ipsum!" -``` - -It uses a mustache-like syntax by default but you can set your own format if -needed. You can also use Arrays for the replacements (since Arrays are -objects as well): - -```js -// matches everything inside "${}" -var syntax = /\$\{([^}]+)\}/g; -var tmpl = "Hello ${0}!"; -interpolate(tmpl, ['Foo Bar'], syntax); // "Hello Foo Bar!" -``` - - - -## lowerCase(str):String - -"Safer" `String.toLowerCase()`. (Used internally) - -### Example - -```js -(null).toLowerCase(); // Error! -(undefined).toLowerCase(); // Error! -lowerCase(null); // "" -lowerCase(undefined); // "" -``` - - - -## lpad(str, minLength[, char]):String - -Pad string from left with `char` if its' length is smaller than `minLen`. - -See: [`rpad()`](#rpad) - -### Example - -```js -lpad('a', 5); // " a" -lpad('a', 5, '-'); // "----a" -lpad('abc', 3, '-'); // "abc" -lpad('abc', 4, '-'); // "-abc" -``` - - - -## ltrim(str, [chars]):String - -Remove chars or white-spaces from beginning of string. - -`chars` is an array of chars to remove from the beginning of the string. If -`chars` is not specified, Unicode whitespace chars will be used instead. - -See: [`rtrim()`](#rtrim), [`trim()`](#trim) - -### Example - -```js -ltrim(' lorem ipsum '); // "lorem ipsum " -ltrim('--lorem ipsum--', ['-']); // "lorem ipsum--" -``` - - - -## makePath(...args):String - -Group arguments as path segments, if any of the args is `null` or `undefined` -it will be ignored from resulting path. It will also remove duplicate "/". - -See: [`array/join()`](array.html#join) - -### Example - -```js -makePath('lorem', 'ipsum', null, 'dolor'); // "lorem/ipsum/dolor" -makePath('foo///bar/'); // "foo/bar/" -``` - - - -## normalizeLineBreaks(str, [lineBreak]):String - -Normalize line breaks to a single format. Defaults to Unix `\n`. - -It handles DOS (`\r\n`), Mac (`\r`) and Unix (`\n`) formats. - -### Example - -```js -// "foo\nbar\nlorem\nipsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum'); - -// "foo\rbar\rlorem\ripsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum', '\r'); - -// "foo bar lorem ipsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum', ' '); -``` - - - -## pascalCase(str):String - -Convert string to "PascalCase" text. - -See: [`camelCase()`](#camelCase) - -### Example - -```js -pascalCase('lorem-ipsum-dolor'); // "LoremIpsumDolor" -pascalCase('lorem ipsum dolor'); // "LoremIpsumDolor" -``` - - - -## properCase(str):String - -UPPERCASE first char of each word, lowercase other chars. - -### Example - -```js -properCase('loRem iPSum'); // "Lorem Ipsum" -``` - - - -## removeNonASCII(str):String - -Remove [non-printable ASCII -chars](http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters). - -### Example - -```js -removeNonASCII('äÄçÇéÉêlorem-ipsumöÖÐþúÚ'); // "lorem-ipsum" -``` - - - -## removeNonWord(str):String - -Remove non-word chars. - -### Example - -```js -var str = 'lorem ~!@#$%^&*()_+`-={}[]|\\:";\'/?><., ipsum'; -removeNonWord(str); // "lorem - ipsum" -``` - - - -## repeat(str, n):String - -Repeat string n-times. - -### Example - -```js -repeat('a', 3); // "aaa" -repeat('bc', 2); // "bcbc" -repeat('a', 0); // "" -``` - - - -## replace(str, search, replacements):String - -Replace string(s) with the replacement(s) in the source. - -`search` and `replacements` can be an array, or a single item. For every item -in `search`, it will call `str.replace` with the search item and the matching -replacement in `replacements`. If `replacements` only contains one replacement, -it will be used for all the searches, otherwise it will use the replacement at -the same index as the search. - -### Example - -```js -replace('foo bar', 'foo', 'test'); // "test bar" -replace('test 1 2', ['1', '2'], 'n'); // "test n n" -replace('test 1 2', ['1', '2'], ['one', 'two']); // "test one two" -replace('123abc', [/\d/g, /[a-z]/g], ['0', '.']); // "000..." -``` - - - -## replaceAccents(str):String - -Replaces all accented chars with regular ones. - -**Important:** Only covers **Basic Latin** and **Latin-1** unicode chars. - -### Example - -```js -replaceAccents('spéçïãl çhârs'); // "special chars" -``` - - - -## rpad(str, minLength[, char]):String - -Pad string from right with `char` if its' length is smaller than `minLen`. - -See: [`lpad()`](#lpad) - -### Example - -```js -rpad('a', 5); // "a " -rpad('a', 5, '-'); // "a----" -rpad('abc', 3, '-'); // "abc" -rpad('abc', 4, '-'); // "abc-" -``` - - - -## rtrim(str, [chars]):String - -Remove chars or white-spaces from end of string. - -`chars` is an array of chars to remove from the end of the string. If -`chars` is not specified, Unicode whitespace chars will be used instead. - -See: [`trim()`](#trim), [`ltrim()`](#ltrim) - -### Example - -```js -rtrim(' lorem ipsum '); // " lorem ipsum" -rtrim('--lorem ipsum--', ['-']); // "--lorem ipsum" -``` - - - -## sentenceCase(str):String - -UPPERCASE first char of each sentence and lowercase other chars. - -### Example - -```js -var str = 'Lorem IpSum DoLOr. maeCeNnas Ullamcor.'; -sentenceCase(str); // "Lorem ipsum dolor. Maecennas ullamcor." -``` - - - -## stripHtmlTags(str):String - -Remove HTML/XML tags from string. - -### Example - -```js -var str = '<p><em>lorem</em> <strong>ipsum</strong></p>'; -stripHtmlTags(str); // "lorem ipsum" -``` - - - -## startsWith(str, prefix):Boolean - -Checks if string starts with specified prefix. - -See: [`endsWith()`](#endsWith), [`contains()`](#contains) - -### Example - -```js -startsWith('lorem ipsum', 'lorem'); // true -startsWith('lorem ipsum', 'ipsum'); // false -``` - - - -## slugify(str[, delimeter]):String - -Convert to lower case, remove accents, remove non-word chars and replace spaces -with the delimeter. The default delimeter is a hyphen. - -Note that this does not split camelCase text. - -See: [`hyphenate()`](#hyphenate) and [`underscore()`](#underscore) - -### Example - -```js -var str = 'loremIpsum dolor spéçïãl chârs'; -slugify(str); // "loremipsum-dolor-special-chars" -slugify(str, '_'); // "loremipsum_dolor_special_chars" -``` - - - -## trim(str, [chars]):String - -Remove chars or white-spaces from beginning and end of string. - -`chars` is an array of chars to remove from the beginning and end of the -string. If `chars` is not specified, Unicode whitespace chars will be used -instead. - -See: [`rtrim()`](#rtrim), [`ltrim()`](#ltrim) - -### Example - -```js -trim(' lorem ipsum '); // "lorem ipsum" -trim('-+-lorem ipsum-+-', ['-', '+']); // "lorem ipsum" -``` - - - -## truncate(str, maxChars, [append], [onlyFullWords]):String - -Limit number of chars. Returned string `length` will be `<= maxChars`. - -See: [`crop()`](#crop) - -### Arguments - - 1. `str` (String) : String - 2. `maxChars` (Number) : Maximum number of characters including `append.length`. - 3. `[append]` (String) : Value that should be added to the end of string. - Defaults to "...". - 4. `[onlyFullWords]` (Boolean) : If it shouldn't break words. Default is - `false`. (favor [`crop()`](#crop) since code will be clearer). - -### Example - -```js -truncate('lorem ipsum dolor', 11); // "lorem ip..." -truncate('lorem ipsum dolor', 11, '+'); // "lorem ipsu+" -truncate('lorem ipsum dolor', 11, null, true); // "lorem..." -``` - - - -## typecast(str):* - -Parses string and convert it into a native value. - -### Example - -```js -typecast('lorem ipsum'); // "lorem ipsum" -typecast('123'); // 123 -typecast('123.45'); // 123.45 -typecast('false'); // false -typecast('true'); // true -typecast('null'); // null -typecast('undefined'); // undefined -``` - - - -## unCamelCase(str, [delimiter]):String - -Add the delimiter between camelCase text and convert first char of each word to -lower case. - -The delimiter defaults to a space character. - -See: [`camelCase()`][#camelCase] - -### Example - -```js -unCamelCase('loremIpsumDolor'); // "lorem ipsum dolor" -unCamelCase('loremIpsumDolor', '-'); // "lorem-ipsum-color" -``` - - -## underscore(str):String - -Replaces spaces with underscores, split camelCase text, remove non-word chars, -remove accents and convert to lower case. - -See: [`slugify()`](#slugify), [`hyphenate()`](#hyphenate) - -```js -underscore(' %# lorem ipsum ? $ dolor'); // "lorem_ipsum_dolor" -underscore('spéçïãl çhârs'); // "special_chars" -underscore('loremIpsum'); // "lorem_ipsum" -``` - - - -## unescapeHtml(str):String - -Unescapes HTML special chars (`>`, `<`, `&`, `"`, `'`). - -See: [`escapeHtml()`](#escapeHtml) - -### Example - -```js -unescapeHtml('lorem &amp; &quot;ipsum&quot;'); // 'lorem & "ipsum"' -``` - - - -## unescapeUnicode(str):String - -Unescapes unicode char sequences. - -See: [`escapeUnicode()`](#escapeUnicode) - -```js -unescapeUnicode('\\u0066\\u00f8\\u006f\\u0020\\u0062\\u00e5\\u0072'); -// > 'føo bår' -``` - - - -## unhyphenate(str):String - -Replaces hyphens with spaces. (only hyphens between word chars) - -See : [`hyphenate()`](#hyphenate) - -### Example - -```js -unhyphenate('lorem-ipsum-dolor'); // "lorem ipsum dolor" -``` - - -## upperCase(str):String - -"Safer" `String.toUpperCase()`. (Used internally) - -### Example - -```js -(null).toUpperCase(); // Error! -(undefined).toUpperCase(); // Error! -upperCase(null); // "" -upperCase(undefined); // "" -``` - - - -## WHITE_SPACES:Array - -Constant array of all [Unicode white-space -characters](http://en.wikipedia.org/wiki/Whitespace_character). - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/time.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/time.md deleted file mode 100644 index 628c2a9b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/doc/time.md +++ /dev/null @@ -1,64 +0,0 @@ -# time # - -Utilities for time manipulation. - - -## convert(value, sourceUnit, [destinationUnit]):Number - -Converts time between units. - -Available units: `millisecond`, `second`, `minute`, `hour`, `day`, `week`. -Abbreviations: `ms`, `s`, `m`, `h`, `d`, `w`. - -We do **not** support year and month as a time unit since their values are not -fixed. - -The default `destinationUnit` is `ms`. - -```js -convert(1, 'minute'); // 60000 -convert(2.5, 's', 'ms'); // 2500 -convert(2, 'm', 's'); // 120 -convert(500, 'ms', 's'); // 0.5 -``` - - - -## now():Number - -Returns the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC. -Uses `Date.now()` if available. - -### Example - -```js -now(); // 1335449614650 -``` - - - -## parseMs(ms):Object - -Parse timestamp (milliseconds) into an object `{milliseconds:number, -seconds:number, minutes:number, hours:number, days:number}`. - -### Example - -```js -// {days:27, hours:4, minutes:26, seconds:5, milliseconds:454} -parseMs(2348765454); -``` - - - -## toTimeString(ms):String - -Convert timestamp (milliseconds) into a time string in the format "[H:]MM:SS". - -### Example - -```js -toTimeString(12513); // "00:12" -toTimeString(951233); // "15:51" -toTimeString(8765235); // "2:26:05" -``` diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function.js deleted file mode 100644 index 75d0c7e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function.js +++ /dev/null @@ -1,19 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'bind' : require('./function/bind'), - 'compose' : require('./function/compose'), - 'debounce' : require('./function/debounce'), - 'func' : require('./function/func'), - 'makeIterator_' : require('./function/makeIterator_'), - 'partial' : require('./function/partial'), - 'prop' : require('./function/prop'), - 'series' : require('./function/series'), - 'throttle' : require('./function/throttle'), - 'timeout' : require('./function/timeout'), - 'times' : require('./function/times') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/bind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/bind.js deleted file mode 100644 index 71bc1257..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/bind.js +++ /dev/null @@ -1,23 +0,0 @@ - - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - * @param {Function} fn Function. - * @param {object} context Execution context. - * @param {rest} args Arguments (0...n arguments). - * @return {Function} Wrapped Function. - */ - function bind(fn, context, args){ - var argsArr = slice(arguments, 2); //curried args - return function(){ - return fn.apply(context, argsArr.concat(slice(arguments))); - }; - } - - module.exports = bind; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/compose.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/compose.js deleted file mode 100644 index 8cd5c5f3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/compose.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Returns a function that composes multiple functions, passing results to - * each other. - */ - function compose() { - var fns = arguments; - return function(arg){ - // only cares about the first argument since the chain can only - // deal with a single return value anyway. It should start from - // the last fn. - var n = fns.length; - while (n--) { - arg = fns[n].call(this, arg); - } - return arg; - }; - } - - module.exports = compose; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/debounce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/debounce.js deleted file mode 100644 index 7f6f3021..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/debounce.js +++ /dev/null @@ -1,32 +0,0 @@ - - - /** - * Debounce callback execution - */ - function debounce(fn, threshold, isAsap){ - var timeout, result; - function debounced(){ - var args = arguments, context = this; - function delayed(){ - if (! isAsap) { - result = fn.apply(context, args); - } - timeout = null; - } - if (timeout) { - clearTimeout(timeout); - } else if (isAsap) { - result = fn.apply(context, args); - } - timeout = setTimeout(delayed, threshold); - return result; - } - debounced.cancel = function(){ - clearTimeout(timeout); - }; - return debounced; - } - - module.exports = debounce; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/func.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/func.js deleted file mode 100644 index b81bf0a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/func.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Returns a function that call a method on the passed object - */ - function func(name){ - return function(obj){ - return obj[name](); - }; - } - - module.exports = func; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/makeIterator_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/makeIterator_.js deleted file mode 100644 index b6e6a00e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/makeIterator_.js +++ /dev/null @@ -1,31 +0,0 @@ -var prop = require('./prop'); -var deepMatches = require('../object/deepMatches'); - - /** - * Converts argument into a valid iterator. - * Used internally on most array/object/collection methods that receives a - * callback/iterator providing a shortcut syntax. - */ - function makeIterator(src, thisObj){ - switch(typeof src) { - case 'function': - // function is the first to improve perf (most common case) - return (typeof thisObj !== 'undefined')? function(val, i, arr){ - return src.call(thisObj, val, i, arr); - } : src; - case 'object': - // typeof null == "object" - return (src != null)? function(val){ - return deepMatches(val, src); - } : src; - case 'string': - case 'number': - return prop(src); - default: - return src; - } - } - - module.exports = makeIterator; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/partial.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/partial.js deleted file mode 100644 index d63ff1be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/partial.js +++ /dev/null @@ -1,19 +0,0 @@ - - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Creates a partially applied function. - */ - function partial(fn, var_args){ - var argsArr = slice(arguments, 1); //curried args - return function(){ - return fn.apply(this, argsArr.concat(slice(arguments))); - }; - } - - module.exports = partial; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/prop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/prop.js deleted file mode 100644 index 734acb7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/prop.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Returns a function that gets a property of the passed object - */ - function prop(name){ - return function(obj){ - return obj[name]; - }; - } - - module.exports = prop; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/series.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/series.js deleted file mode 100644 index 25159c2c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/series.js +++ /dev/null @@ -1,22 +0,0 @@ - - - /** - * Returns a function that will execute a list of functions in sequence - * passing the same arguments to each one. (useful for batch processing - * items during a forEach loop) - */ - function series(){ - var fns = arguments; - return function(){ - var i = 0, - n = fns.length; - while (i < n) { - fns[i].apply(this, arguments); - i += 1; - } - }; - } - - module.exports = series; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/throttle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/throttle.js deleted file mode 100644 index 10bdc1f0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/throttle.js +++ /dev/null @@ -1,35 +0,0 @@ -var now = require('../time/now'); - - /** - */ - function throttle(fn, delay){ - var context, timeout, result, args, - cur, diff, prev = 0; - function delayed(){ - prev = now(); - timeout = null; - result = fn.apply(context, args); - } - function throttled(){ - context = this; - args = arguments; - cur = now(); - diff = delay - (cur - prev); - if (diff <= 0) { - clearTimeout(timeout); - prev = cur; - result = fn.apply(context, args); - } else if (! timeout) { - timeout = setTimeout(delayed, diff); - } - return result; - } - throttled.cancel = function(){ - clearTimeout(timeout); - }; - return throttled; - } - - module.exports = throttle; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/timeout.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/timeout.js deleted file mode 100644 index e0d21a66..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/timeout.js +++ /dev/null @@ -1,21 +0,0 @@ - - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Delays the call of a function within a given context. - */ - function timeout(fn, millis, context){ - - var args = slice(arguments, 3); - - return setTimeout(function() { - fn.apply(context, args); - }, millis); - } - - module.exports = timeout; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/times.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/times.js deleted file mode 100644 index 04a11c26..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/function/times.js +++ /dev/null @@ -1,17 +0,0 @@ - - - /** - * Iterates over a callback a set amount of times - */ - function times(n, callback, thisObj){ - var i = -1; - while (++i < n) { - if ( callback.call(thisObj, i) === false ) { - break; - } - } - } - - module.exports = times; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/index.js deleted file mode 100644 index 5016d085..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/**@license - * mout v0.7.1 | http://moutjs.com | MIT license - */ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'VERSION' : '0.7.1', - 'array' : require('./array'), - 'collection' : require('./collection'), - 'date' : require('./date'), - 'function' : require('./function'), - 'lang' : require('./lang'), - 'math' : require('./math'), - 'number' : require('./number'), - 'object' : require('./object'), - 'queryString' : require('./queryString'), - 'random' : require('./random'), - 'string' : require('./string'), - 'time' : require('./time'), - 'fn' : require('./function') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang.js deleted file mode 100644 index 024f7fa5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang.js +++ /dev/null @@ -1,37 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'clone' : require('./lang/clone'), - 'createObject' : require('./lang/createObject'), - 'ctorApply' : require('./lang/ctorApply'), - 'deepClone' : require('./lang/deepClone'), - 'defaults' : require('./lang/defaults'), - 'inheritPrototype' : require('./lang/inheritPrototype'), - 'is' : require('./lang/is'), - 'isArguments' : require('./lang/isArguments'), - 'isArray' : require('./lang/isArray'), - 'isBoolean' : require('./lang/isBoolean'), - 'isDate' : require('./lang/isDate'), - 'isEmpty' : require('./lang/isEmpty'), - 'isFinite' : require('./lang/isFinite'), - 'isFunction' : require('./lang/isFunction'), - 'isInteger' : require('./lang/isInteger'), - 'isKind' : require('./lang/isKind'), - 'isNaN' : require('./lang/isNaN'), - 'isNull' : require('./lang/isNull'), - 'isNumber' : require('./lang/isNumber'), - 'isObject' : require('./lang/isObject'), - 'isPlainObject' : require('./lang/isPlainObject'), - 'isRegExp' : require('./lang/isRegExp'), - 'isString' : require('./lang/isString'), - 'isUndefined' : require('./lang/isUndefined'), - 'isnt' : require('./lang/isnt'), - 'kindOf' : require('./lang/kindOf'), - 'toArray' : require('./lang/toArray'), - 'toNumber' : require('./lang/toNumber'), - 'toString' : require('./lang/toString') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/clone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/clone.js deleted file mode 100644 index 33c4e949..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/clone.js +++ /dev/null @@ -1,49 +0,0 @@ -var kindOf = require('./kindOf'); -var isPlainObject = require('./isPlainObject'); -var mixIn = require('../object/mixIn'); - - /** - * Clone native types. - */ - function clone(val){ - switch (kindOf(val)) { - case 'Object': - return cloneObject(val); - case 'Array': - return cloneArray(val); - case 'RegExp': - return cloneRegExp(val); - case 'Date': - return cloneDate(val); - default: - return val; - } - } - - function cloneObject(source) { - if (isPlainObject(source)) { - return mixIn({}, source); - } else { - return source; - } - } - - function cloneRegExp(r) { - var flags = ''; - flags += r.multiline ? 'm' : ''; - flags += r.global ? 'g' : ''; - flags += r.ignorecase ? 'i' : ''; - return new RegExp(r.source, flags); - } - - function cloneDate(date) { - return new Date(+date); - } - - function cloneArray(arr) { - return arr.slice(); - } - - module.exports = clone; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/createObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/createObject.js deleted file mode 100644 index bbc14c1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/createObject.js +++ /dev/null @@ -1,18 +0,0 @@ -var mixIn = require('../object/mixIn'); - - /** - * Create Object using prototypal inheritance and setting custom properties. - * - Mix between Douglas Crockford Prototypal Inheritance <http://javascript.crockford.com/prototypal.html> and the EcmaScript 5 `Object.create()` method. - * @param {object} parent Parent Object. - * @param {object} [props] Object properties. - * @return {object} Created object. - */ - function createObject(parent, props){ - function F(){} - F.prototype = parent; - return mixIn(new F(), props); - - } - module.exports = createObject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/ctorApply.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/ctorApply.js deleted file mode 100644 index d68dc506..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/ctorApply.js +++ /dev/null @@ -1,17 +0,0 @@ - - - function F(){} - - /** - * Do fn.apply on a constructor. - */ - function ctorApply(ctor, args) { - F.prototype = ctor.prototype; - var instance = new F(); - ctor.apply(instance, args); - return instance; - } - - module.exports = ctorApply; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/deepClone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/deepClone.js deleted file mode 100644 index 25fd95f1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/deepClone.js +++ /dev/null @@ -1,48 +0,0 @@ -var clone = require('./clone'); -var forOwn = require('../object/forOwn'); -var kindOf = require('./kindOf'); -var isPlainObject = require('./isPlainObject'); - - /** - * Recursively clone native types. - */ - function deepClone(val, instanceClone) { - switch ( kindOf(val) ) { - case 'Object': - return cloneObject(val, instanceClone); - case 'Array': - return cloneArray(val, instanceClone); - default: - return clone(val); - } - } - - function cloneObject(source, instanceClone) { - if (isPlainObject(source)) { - var out = {}; - forOwn(source, function(val, key) { - this[key] = deepClone(val, instanceClone); - }, out); - return out; - } else if (instanceClone) { - return instanceClone(source); - } else { - return source; - } - } - - function cloneArray(arr, instanceClone) { - var out = [], - i = -1, - n = arr.length, - val; - while (++i < n) { - out[i] = deepClone(arr[i], instanceClone); - } - return out; - } - - module.exports = deepClone; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/defaults.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/defaults.js deleted file mode 100644 index 1111b2ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/defaults.js +++ /dev/null @@ -1,17 +0,0 @@ -var toArray = require('./toArray'); -var find = require('../array/find'); - - /** - * Return first non void argument - */ - function defaults(var_args){ - return find(toArray(arguments), nonVoid); - } - - function nonVoid(val){ - return val != null; - } - - module.exports = defaults; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/inheritPrototype.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/inheritPrototype.js deleted file mode 100644 index eb17b9ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/inheritPrototype.js +++ /dev/null @@ -1,17 +0,0 @@ -var createObject = require('./createObject'); - - /** - * Inherit prototype from another Object. - * - inspired by Nicholas Zackas <http://nczonline.net> Solution - * @param {object} child Child object - * @param {object} parent Parent Object - */ - function inheritPrototype(child, parent){ - var p = createObject(parent.prototype); - p.constructor = child; - child.prototype = p; - child.super_ = parent; - } - - module.exports = inheritPrototype; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/is.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/is.js deleted file mode 100644 index 4a835739..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/is.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Check if both arguments are egal. - */ - function is(x, y){ - // implementation borrowed from harmony:egal spec - if (x === y) { - // 0 === -0, but they are not identical - return x !== 0 || 1 / x === 1 / y; - } - - // NaN !== NaN, but they are identical. - // NaNs are the only non-reflexive value, i.e., if x !== x, - // then x is a NaN. - // isNaN is broken: it converts its argument to number, so - // isNaN("foo") => true - return x !== x && y !== y; - } - - module.exports = is; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isArguments.js deleted file mode 100644 index f7b08ba4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isArguments.js +++ /dev/null @@ -1,15 +0,0 @@ -var isKind = require('./isKind'); - - /** - */ - var isArgs = isKind(arguments, 'Arguments')? - function(val){ - return isKind(val, 'Arguments'); - } : - function(val){ - // Arguments is an Object on IE7 - return !!(val && Object.prototype.hasOwnProperty.call(val, 'callee')); - }; - - module.exports = isArgs; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isArray.js deleted file mode 100644 index 262ee400..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isArray.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - var isArray = Array.isArray || function (val) { - return isKind(val, 'Array'); - }; - module.exports = isArray; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isBoolean.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isBoolean.js deleted file mode 100644 index 86557cb9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isBoolean.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isBoolean(val) { - return isKind(val, 'Boolean'); - } - module.exports = isBoolean; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isDate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isDate.js deleted file mode 100644 index 4a5130f2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isDate.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isDate(val) { - return isKind(val, 'Date'); - } - module.exports = isDate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isEmpty.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isEmpty.js deleted file mode 100644 index 0e9f77da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isEmpty.js +++ /dev/null @@ -1,24 +0,0 @@ -var forOwn = require('../object/forOwn'); -var isArray = require('./isArray'); - - function isEmpty(val){ - if (val == null) { - // typeof null == 'object' so we check it first - return false; - } else if ( typeof val === 'string' || isArray(val) ) { - return !val.length; - } else if ( typeof val === 'object' || typeof val === 'function' ) { - var result = true; - forOwn(val, function(){ - result = false; - return false; // break loop - }); - return result; - } else { - return false; - } - } - - module.exports = isEmpty; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isFinite.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isFinite.js deleted file mode 100644 index 6d4006f9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isFinite.js +++ /dev/null @@ -1,21 +0,0 @@ -var isNumber = require('./isNumber'); - - var global = this; - - /** - * Check if value is finite - */ - function isFinite(val){ - var is = false; - if (typeof val === 'string' && val !== '') { - is = global.isFinite( parseFloat(val) ); - } else if (isNumber(val)){ - // need to use isNumber because of Number constructor - is = global.isFinite( val ); - } - return is; - } - - module.exports = isFinite; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isFunction.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isFunction.js deleted file mode 100644 index 216879f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isFunction.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isFunction(val) { - return isKind(val, 'Function'); - } - module.exports = isFunction; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isInteger.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isInteger.js deleted file mode 100644 index 29f95d96..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -var isNumber = require('./isNumber'); - - /** - * Check if value is an integer - */ - function isInteger(val){ - return isNumber(val) && (val % 1 === 0); - } - - module.exports = isInteger; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isKind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isKind.js deleted file mode 100644 index 02301e04..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isKind.js +++ /dev/null @@ -1,9 +0,0 @@ -var kindOf = require('./kindOf'); - /** - * Check if value is from a specific "kind". - */ - function isKind(val, kind){ - return kindOf(val) === kind; - } - module.exports = isKind; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isNaN.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isNaN.js deleted file mode 100644 index 4ea3065d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isNaN.js +++ /dev/null @@ -1,16 +0,0 @@ -var isNumber = require('./isNumber'); - - /** - * Check if value is NaN for realz - */ - function isNaN(val){ - // based on the fact that NaN !== NaN - // need to check if it's a number to avoid conflicts with host objects - // also need to coerce ToNumber to avoid edge case `new Number(NaN)` - // jshint eqeqeq: false - return !isNumber(val) || val != +val; - } - - module.exports = isNaN; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isNull.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isNull.js deleted file mode 100644 index 6252f9ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isNull.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - */ - function isNull(val){ - return val === null; - } - module.exports = isNull; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isNumber.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isNumber.js deleted file mode 100644 index 126c1cce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isNumber.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isNumber(val) { - return isKind(val, 'Number'); - } - module.exports = isNumber; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isObject.js deleted file mode 100644 index 7350c891..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isObject.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isObject(val) { - return isKind(val, 'Object'); - } - module.exports = isObject; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isPlainObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isPlainObject.js deleted file mode 100644 index b81342ee..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isPlainObject.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * Checks if the value is created by the `Object` constructor. - */ - function isPlainObject(value) { - return (!!value && typeof value === 'object' && - value.constructor === Object); - } - - module.exports = isPlainObject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isRegExp.js deleted file mode 100644 index fc5459a9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isRegExp.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isRegExp(val) { - return isKind(val, 'RegExp'); - } - module.exports = isRegExp; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isString.js deleted file mode 100644 index f8906584..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isString.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isString(val) { - return isKind(val, 'String'); - } - module.exports = isString; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isUndefined.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isUndefined.js deleted file mode 100644 index fb2261df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isUndefined.js +++ /dev/null @@ -1,10 +0,0 @@ - - var UNDEF; - - /** - */ - function isUndef(val){ - return val === UNDEF; - } - module.exports = isUndef; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isnt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isnt.js deleted file mode 100644 index 9dad58ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/isnt.js +++ /dev/null @@ -1,12 +0,0 @@ -var is = require('./is'); - - /** - * Check if both values are not identical/egal - */ - function isnt(x, y){ - return !is(x, y); - } - - module.exports = isnt; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/kindOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/kindOf.js deleted file mode 100644 index 663464d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/kindOf.js +++ /dev/null @@ -1,20 +0,0 @@ - - - var _rKind = /^\[object (.*)\]$/, - _toString = Object.prototype.toString, - UNDEF; - - /** - * Gets the "kind" of value. (e.g. "String", "Number", etc) - */ - function kindOf(val) { - if (val === null) { - return 'Null'; - } else if (val === UNDEF) { - return 'Undefined'; - } else { - return _rKind.exec( _toString.call(val) )[1]; - } - } - module.exports = kindOf; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/toArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/toArray.js deleted file mode 100644 index e39b8734..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/toArray.js +++ /dev/null @@ -1,31 +0,0 @@ -var kindOf = require('./kindOf'); - - var _win = this; - - /** - * Convert array-like object into array - */ - function toArray(val){ - var ret = [], - kind = kindOf(val), - n; - - if (val != null) { - if ( val.length == null || kind === 'String' || kind === 'Function' || kind === 'RegExp' || val === _win ) { - //string, regexp, function have .length but user probably just want - //to wrap value into an array.. - ret[ret.length] = val; - } else { - //window returns true on isObject in IE7 and may have length - //property. `typeof NodeList` returns `function` on Safari so - //we can't use it (#58) - n = val.length; - while (n--) { - ret[n] = val[n]; - } - } - } - return ret; - } - module.exports = toArray; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/toNumber.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/toNumber.js deleted file mode 100644 index 8b6df344..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/toNumber.js +++ /dev/null @@ -1,20 +0,0 @@ -var isArray = require('./isArray'); - - /** - * covert value into number if numeric - */ - function toNumber(val){ - // numberic values should come first because of -0 - if (typeof val === 'number') return val; - // we want all falsy values (besides -0) to return zero to avoid - // headaches - if (!val) return 0; - if (typeof val === 'string') return parseFloat(val); - // arrays are edge cases. `Number([4]) === 4` - if (isArray(val)) return NaN; - return Number(val); - } - - module.exports = toNumber; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/toString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/toString.js deleted file mode 100644 index ae5c2b0f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/lang/toString.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * Typecast a value to a String, using an empty string value for null or - * undefined. - */ - function toString(val){ - return val == null ? '' : val.toString(); - } - - module.exports = toString; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math.js deleted file mode 100644 index c6ee889b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math.js +++ /dev/null @@ -1,19 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'ceil' : require('./math/ceil'), - 'clamp' : require('./math/clamp'), - 'countSteps' : require('./math/countSteps'), - 'floor' : require('./math/floor'), - 'inRange' : require('./math/inRange'), - 'isNear' : require('./math/isNear'), - 'lerp' : require('./math/lerp'), - 'loop' : require('./math/loop'), - 'map' : require('./math/map'), - 'norm' : require('./math/norm'), - 'round' : require('./math/round') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/ceil.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/ceil.js deleted file mode 100644 index a279e158..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/ceil.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Round value up with a custom radix. - */ - function ceil(val, step){ - step = Math.abs(step || 1); - return Math.ceil(val / step) * step; - } - - module.exports = ceil; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/clamp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/clamp.js deleted file mode 100644 index e929a9a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/clamp.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Clamps value inside range. - */ - function clamp(val, min, max){ - return val < min? min : (val > max? max : val); - } - module.exports = clamp; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/countSteps.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/countSteps.js deleted file mode 100644 index 60ac90c3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/countSteps.js +++ /dev/null @@ -1,16 +0,0 @@ - - /** - * Count number of full steps. - */ - function countSteps(val, step, overflow){ - val = Math.floor(val / step); - - if (overflow) { - return val % overflow; - } - - return val; - } - - module.exports = countSteps; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/floor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/floor.js deleted file mode 100644 index 9de50531..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/floor.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Floor value to full steps. - */ - function floor(val, step){ - step = Math.abs(step || 1); - return Math.floor(val / step) * step; - } - module.exports = floor; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/inRange.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/inRange.js deleted file mode 100644 index 763218f8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/inRange.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Checks if value is inside the range. - */ - function inRange(val, min, max, threshold){ - threshold = threshold || 0; - return (val + threshold >= min && val - threshold <= max); - } - - module.exports = inRange; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/isNear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/isNear.js deleted file mode 100644 index 45486b6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/isNear.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Check if value is close to target. - */ - function isNear(val, target, threshold){ - return (Math.abs(val - target) <= threshold); - } - module.exports = isNear; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/lerp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/lerp.js deleted file mode 100644 index 111e2717..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/lerp.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Linear interpolation. - * IMPORTANT:will return `Infinity` if numbers overflow Number.MAX_VALUE - */ - function lerp(ratio, start, end){ - return start + (end - start) * ratio; - } - - module.exports = lerp; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/loop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/loop.js deleted file mode 100644 index 35207c1a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/loop.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Loops value inside range. - */ - function loop(val, min, max){ - return val < min? max : (val > max? min : val); - } - - module.exports = loop; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/map.js deleted file mode 100644 index 96c4b787..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/map.js +++ /dev/null @@ -1,11 +0,0 @@ -var lerp = require('./lerp'); -var norm = require('./norm'); - /** - * Maps a number from one scale to another. - * @example map(3, 0, 4, -1, 1) -> 0.5 - */ - function map(val, min1, max1, min2, max2){ - return lerp( norm(val, min1, max1), min2, max2 ); - } - module.exports = map; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/norm.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/norm.js deleted file mode 100644 index 54caf78a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/norm.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Gets normalized ratio of value inside range. - */ - function norm(val, min, max){ - return (val - min) / (max - min); - } - module.exports = norm; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/round.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/round.js deleted file mode 100644 index d108e6cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/math/round.js +++ /dev/null @@ -1,12 +0,0 @@ - - /** - * Round number to a specific radix - */ - function round(value, radix){ - radix = radix || 1; // default round 1 - return Math.round(value / radix) * radix; - } - - module.exports = round; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number.js deleted file mode 100644 index 0b6186cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number.js +++ /dev/null @@ -1,21 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'MAX_INT' : require('./number/MAX_INT'), - 'MAX_UINT' : require('./number/MAX_UINT'), - 'MIN_INT' : require('./number/MIN_INT'), - 'abbreviate' : require('./number/abbreviate'), - 'currencyFormat' : require('./number/currencyFormat'), - 'enforcePrecision' : require('./number/enforcePrecision'), - 'pad' : require('./number/pad'), - 'rol' : require('./number/rol'), - 'ror' : require('./number/ror'), - 'sign' : require('./number/sign'), - 'toInt' : require('./number/toInt'), - 'toUInt' : require('./number/toUInt'), - 'toUInt31' : require('./number/toUInt31') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/MAX_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/MAX_INT.js deleted file mode 100644 index 1d6f0e48..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/MAX_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit signed integer value. (2^31 - 1) - */ - - module.exports = 2147483647; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/MAX_UINT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/MAX_UINT.js deleted file mode 100644 index 700da0f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/MAX_UINT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit unsigned integet value (2^32 - 1) - */ - - module.exports = 4294967295; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/MIN_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/MIN_INT.js deleted file mode 100644 index b34ab2ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/MIN_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Minimum 32-bit signed integer value (-2^31). - */ - - module.exports = -2147483648; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/abbreviate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/abbreviate.js deleted file mode 100644 index dd6716b9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/abbreviate.js +++ /dev/null @@ -1,35 +0,0 @@ -var enforcePrecision = require('./enforcePrecision'); - - var _defaultDict = { - thousand : 'K', - million : 'M', - billion : 'B' - }; - - /** - * Abbreviate number if bigger than 1000. (eg: 2.5K, 17.5M, 3.4B, ...) - */ - function abbreviateNumber(val, nDecimals, dict){ - nDecimals = nDecimals != null? nDecimals : 1; - dict = dict || _defaultDict; - val = enforcePrecision(val, nDecimals); - - var str, mod; - - if (val < 1000000) { - mod = enforcePrecision(val / 1000, nDecimals); - // might overflow to next scale during rounding - str = mod < 1000? mod + dict.thousand : 1 + dict.million; - } else if (val < 1000000000) { - mod = enforcePrecision(val / 1000000, nDecimals); - str = mod < 1000? mod + dict.million : 1 + dict.billion; - } else { - str = enforcePrecision(val / 1000000000, nDecimals) + dict.billion; - } - - return str; - } - - module.exports = abbreviateNumber; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/currencyFormat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/currencyFormat.js deleted file mode 100644 index c85a6685..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/currencyFormat.js +++ /dev/null @@ -1,27 +0,0 @@ -var toNumber = require('../lang/toNumber'); - - /** - * Converts number into currency format - */ - function currencyFormat(val, nDecimalDigits, decimalSeparator, thousandsSeparator) { - val = toNumber(val); - nDecimalDigits = nDecimalDigits == null? 2 : nDecimalDigits; - decimalSeparator = decimalSeparator == null? '.' : decimalSeparator; - thousandsSeparator = thousandsSeparator == null? ',' : thousandsSeparator; - - //can't use enforce precision since it returns a number and we are - //doing a RegExp over the string - var fixed = val.toFixed(nDecimalDigits), - //separate begin [$1], middle [$2] and decimal digits [$4] - parts = new RegExp('^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{'+ nDecimalDigits +'}))?$').exec( fixed ); - - if(parts){ //val >= 1000 || val <= -1000 - return parts[1] + parts[2].replace(/\d{3}/g, thousandsSeparator + '$&') + (parts[4] ? decimalSeparator + parts[4] : ''); - }else{ - return fixed.replace('.', decimalSeparator); - } - } - - module.exports = currencyFormat; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/enforcePrecision.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/enforcePrecision.js deleted file mode 100644 index 3d3b2d40..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/enforcePrecision.js +++ /dev/null @@ -1,12 +0,0 @@ -var toNumber = require('../lang/toNumber'); - /** - * Enforce a specific amount of decimal digits and also fix floating - * point rounding issues. - */ - function enforcePrecision(val, nDecimalDigits){ - val = toNumber(val); - var pow = Math.pow(10, nDecimalDigits); - return +(Math.round(val * pow) / pow).toFixed(nDecimalDigits); - } - module.exports = enforcePrecision; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/pad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/pad.js deleted file mode 100644 index 1f83af45..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/pad.js +++ /dev/null @@ -1,14 +0,0 @@ -var lpad = require('../string/lpad'); -var toNumber = require('../lang/toNumber'); - - /** - * Add padding zeros if n.length < minLength. - */ - function pad(n, minLength, char){ - n = toNumber(n); - return lpad(''+ n, minLength, char || '0'); - } - - module.exports = pad; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/rol.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/rol.js deleted file mode 100644 index ecd58da4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/rol.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Bitwise circular shift left - * http://en.wikipedia.org/wiki/Circular_shift - */ - function rol(val, shift){ - return (val << shift) | (val >> (32 - shift)); - } - module.exports = rol; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/ror.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/ror.js deleted file mode 100644 index 2eda81da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/ror.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Bitwise circular shift right - * http://en.wikipedia.org/wiki/Circular_shift - */ - function ror(val, shift){ - return (val >> shift) | (val << (32 - shift)); - } - module.exports = ror; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/sign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/sign.js deleted file mode 100644 index 7f9a1e2f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/sign.js +++ /dev/null @@ -1,15 +0,0 @@ -var toNumber = require('../lang/toNumber'); - - /** - * Get sign of the value. - */ - function sign(val) { - var num = toNumber(val); - if (num === 0) return num; // +0 and +0 === 0 - if (isNaN(num)) return num; // NaN - return num < 0? -1 : 1; - } - - module.exports = sign; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/toInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/toInt.js deleted file mode 100644 index 72fd7de4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/toInt.js +++ /dev/null @@ -1,17 +0,0 @@ - - - /** - * "Convert" value into an 32-bit integer. - * Works like `Math.floor` if val > 0 and `Math.ceil` if val < 0. - * IMPORTANT: val will wrap at 2^31 and -2^31. - * Perf tests: http://jsperf.com/vs-vs-parseint-bitwise-operators/7 - */ - function toInt(val){ - // we do not use lang/toNumber because of perf and also because it - // doesn't break the functionality - return ~~val; - } - - module.exports = toInt; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/toUInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/toUInt.js deleted file mode 100644 index d2796563..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/toUInt.js +++ /dev/null @@ -1,15 +0,0 @@ - - - /** - * "Convert" value into a 32-bit unsigned integer. - * IMPORTANT: Value will wrap at 2^32. - */ - function toUInt(val){ - // we do not use lang/toNumber because of perf and also because it - // doesn't break the functionality - return val >>> 0; - } - - module.exports = toUInt; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/toUInt31.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/toUInt31.js deleted file mode 100644 index 6cd3bb52..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/number/toUInt31.js +++ /dev/null @@ -1,15 +0,0 @@ -var MAX_INT = require('./MAX_INT'); - - /** - * "Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - * IMPORTANT: value wil wrap at 2^31, if negative will return 0. - */ - function toUInt31(val){ - // we do not use lang/toNumber because of perf and also because it - // doesn't break the functionality - return (val <= 0)? 0 : (val > MAX_INT? ~~(val % (MAX_INT + 1)) : ~~val); - } - - module.exports = toUInt31; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object.js deleted file mode 100644 index 76c06424..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object.js +++ /dev/null @@ -1,42 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'bindAll' : require('./object/bindAll'), - 'contains' : require('./object/contains'), - 'deepEquals' : require('./object/deepEquals'), - 'deepFillIn' : require('./object/deepFillIn'), - 'deepMatches' : require('./object/deepMatches'), - 'deepMixIn' : require('./object/deepMixIn'), - 'equals' : require('./object/equals'), - 'every' : require('./object/every'), - 'fillIn' : require('./object/fillIn'), - 'filter' : require('./object/filter'), - 'find' : require('./object/find'), - 'forIn' : require('./object/forIn'), - 'forOwn' : require('./object/forOwn'), - 'functions' : require('./object/functions'), - 'get' : require('./object/get'), - 'has' : require('./object/has'), - 'hasOwn' : require('./object/hasOwn'), - 'keys' : require('./object/keys'), - 'map' : require('./object/map'), - 'matches' : require('./object/matches'), - 'max' : require('./object/max'), - 'merge' : require('./object/merge'), - 'min' : require('./object/min'), - 'mixIn' : require('./object/mixIn'), - 'namespace' : require('./object/namespace'), - 'pick' : require('./object/pick'), - 'pluck' : require('./object/pluck'), - 'reduce' : require('./object/reduce'), - 'reject' : require('./object/reject'), - 'set' : require('./object/set'), - 'size' : require('./object/size'), - 'some' : require('./object/some'), - 'unset' : require('./object/unset'), - 'values' : require('./object/values') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/bindAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/bindAll.js deleted file mode 100644 index b2f27d08..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/bindAll.js +++ /dev/null @@ -1,18 +0,0 @@ -var functions = require('./functions'); -var bind = require('../function/bind'); -var forEach = require('../array/forEach'); - - /** - * Binds methods of the object to be run in it's own context. - */ - function bindAll(obj, rest_methodNames){ - var keys = arguments.length > 1? - Array.prototype.slice.call(arguments, 1) : functions(obj); - forEach(keys, function(key){ - obj[key] = bind(obj[key], obj); - }); - } - - module.exports = bindAll; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/contains.js deleted file mode 100644 index 8076e2c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/contains.js +++ /dev/null @@ -1,13 +0,0 @@ -var some = require('./some'); - - /** - * Check if object contains value - */ - function contains(obj, needle) { - return some(obj, function(val) { - return (val === needle); - }); - } - module.exports = contains; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepEquals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepEquals.js deleted file mode 100644 index fcde9449..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepEquals.js +++ /dev/null @@ -1,27 +0,0 @@ -var isObject = require('../lang/isObject'); -var equals = require('./equals'); - - function defaultCompare(a, b) { - return a === b; - } - - /** - * Recursively checks for same properties and values. - */ - function deepEquals(a, b, callback){ - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - function compare(a, b){ - return deepEquals(a, b, callback); - } - - return equals(a, b, compare); - } - - module.exports = deepEquals; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepFillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepFillIn.js deleted file mode 100644 index 6568ea87..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepFillIn.js +++ /dev/null @@ -1,33 +0,0 @@ -var forOwn = require('./forOwn'); -var isPlainObject = require('../lang/isPlainObject'); - - /** - * Deeply copy missing properties in the target from the defaults. - */ - function deepFillIn(target, defaults){ - var i = 0, - n = arguments.length, - obj; - - while(++i < n) { - obj = arguments[i]; - if (obj) { - // jshint loopfunc: true - forOwn(obj, function(newValue, key) { - var curValue = target[key]; - if (curValue == null) { - target[key] = newValue; - } else if (isPlainObject(curValue) && - isPlainObject(newValue)) { - deepFillIn(curValue, newValue); - } - }); - } - } - - return target; - } - - module.exports = deepFillIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepMatches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepMatches.js deleted file mode 100644 index 3366c52d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepMatches.js +++ /dev/null @@ -1,55 +0,0 @@ -var forOwn = require('./forOwn'); -var isArray = require('../lang/isArray'); - - function containsMatch(array, pattern) { - var i = -1, length = array.length; - while (++i < length) { - if (deepMatches(array[i], pattern)) { - return true; - } - } - - return false; - } - - function matchArray(target, pattern) { - var i = -1, patternLength = pattern.length; - while (++i < patternLength) { - if (!containsMatch(target, pattern[i])) { - return false; - } - } - - return true; - } - - function matchObject(target, pattern) { - var result = true; - forOwn(pattern, function(val, key) { - if (!deepMatches(target[key], val)) { - // Return false to break out of forOwn early - return (result = false); - } - }); - - return result; - } - - /** - * Recursively check if the objects match. - */ - function deepMatches(target, pattern){ - if (target && typeof target === 'object') { - if (isArray(target) && isArray(pattern)) { - return matchArray(target, pattern); - } else { - return matchObject(target, pattern); - } - } else { - return target === pattern; - } - } - - module.exports = deepMatches; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepMixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepMixIn.js deleted file mode 100644 index a97e98d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/deepMixIn.js +++ /dev/null @@ -1,34 +0,0 @@ -var forOwn = require('./forOwn'); -var isPlainObject = require('../lang/isPlainObject'); - - /** - * Mixes objects into the target object, recursively mixing existing child - * objects. - */ - function deepMixIn(target, objects) { - var i = 0, - n = arguments.length, - obj; - - while(++i < n){ - obj = arguments[i]; - if (obj) { - forOwn(obj, copyProp, target); - } - } - - return target; - } - - function copyProp(val, key) { - var existing = this[key]; - if (isPlainObject(val) && isPlainObject(existing)) { - deepMixIn(existing, val); - } else { - this[key] = val; - } - } - - module.exports = deepMixIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/equals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/equals.js deleted file mode 100644 index f50cbe4e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/equals.js +++ /dev/null @@ -1,36 +0,0 @@ -var hasOwn = require('./hasOwn'); -var every = require('./every'); -var isObject = require('../lang/isObject'); - - function defaultCompare(a, b) { - return a === b; - } - - // Makes a function to compare the object values from the specified compare - // operation callback. - function makeCompare(callback) { - return function(value, key) { - return hasOwn(this, key) && callback(value, this[key]); - }; - } - - function checkProperties(value, key) { - return hasOwn(this, key); - } - - /** - * Checks if two objects have the same keys and values. - */ - function equals(a, b, callback) { - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - return (every(a, makeCompare(callback), b) && - every(b, checkProperties, a)); - } - - module.exports = equals; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/every.js deleted file mode 100644 index 01106e5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/every.js +++ /dev/null @@ -1,23 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object every - */ - function every(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - forOwn(obj, function(val, key) { - // we consider any falsy values as "false" on purpose so shorthand - // syntax can be used to check property existence - if (!callback(val, key, obj)) { - result = false; - return false; // break - } - }); - return result; - } - - module.exports = every; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/fillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/fillIn.js deleted file mode 100644 index 80dcdf07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/fillIn.js +++ /dev/null @@ -1,20 +0,0 @@ -var forEach = require('../array/forEach'); -var forOwn = require('./forOwn'); - - /** - * Copy missing properties in the obj from the defaults. - */ - function fillIn(obj, var_defaults){ - forEach(Array.prototype.slice.call(arguments, 1), function(base){ - forOwn(base, function(val, key){ - if (obj[key] == null) { - obj[key] = val; - } - }); - }); - return obj; - } - - module.exports = fillIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/filter.js deleted file mode 100644 index 3a83a92f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/filter.js +++ /dev/null @@ -1,20 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Creates a new object with all the properties where the callback returns - * true. - */ - function filterValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - output[key] = value; - } - }); - - return output; - } - module.exports = filterValues; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/find.js deleted file mode 100644 index d39c0706..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/find.js +++ /dev/null @@ -1,21 +0,0 @@ -var some = require('./some'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Returns first item that matches criteria - */ - function find(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result; - some(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - result = value; - return true; //break - } - }); - return result; - } - - module.exports = find; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/forIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/forIn.js deleted file mode 100644 index 367f08ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/forIn.js +++ /dev/null @@ -1,62 +0,0 @@ - - - var _hasDontEnumBug, - _dontEnums; - - function checkDontEnum(){ - _dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - - _hasDontEnumBug = true; - - for (var key in {'toString': null}) { - _hasDontEnumBug = false; - } - } - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forIn(obj, fn, thisObj){ - var key, i = 0; - // no need to check if argument is a real object that way we can use - // it for arrays, functions, date, etc. - - //post-pone check till needed - if (_hasDontEnumBug == null) checkDontEnum(); - - for (key in obj) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - - if (_hasDontEnumBug) { - while (key = _dontEnums[i++]) { - // since we aren't using hasOwn check we need to make sure the - // property was overwritten - if (obj[key] !== Object.prototype[key]) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - } - } - } - - function exec(fn, obj, key, thisObj){ - return fn.call(thisObj, obj[key], key, obj); - } - - module.exports = forIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/forOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/forOwn.js deleted file mode 100644 index 5f2dfbfc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/forOwn.js +++ /dev/null @@ -1,19 +0,0 @@ -var hasOwn = require('./hasOwn'); -var forIn = require('./forIn'); - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forOwn(obj, fn, thisObj){ - forIn(obj, function(val, key){ - if (hasOwn(obj, key)) { - return fn.call(thisObj, obj[key], key, obj); - } - }); - } - - module.exports = forOwn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/functions.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/functions.js deleted file mode 100644 index f5717979..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/functions.js +++ /dev/null @@ -1,18 +0,0 @@ -var forIn = require('./forIn'); - - /** - * return a list of all enumerable properties that have function values - */ - function functions(obj){ - var keys = []; - forIn(obj, function(val, key){ - if (typeof val === 'function'){ - keys.push(key); - } - }); - return keys.sort(); - } - - module.exports = functions; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/get.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/get.js deleted file mode 100644 index 7cf9d9bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/get.js +++ /dev/null @@ -1,20 +0,0 @@ - - - /** - * get "nested" object property - */ - function get(obj, prop){ - var parts = prop.split('.'), - last = parts.pop(); - - while (prop = parts.shift()) { - obj = obj[prop]; - if (typeof obj !== 'object' || !obj) return; - } - - return obj[last]; - } - - module.exports = get; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/has.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/has.js deleted file mode 100644 index ca9f2289..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/has.js +++ /dev/null @@ -1,15 +0,0 @@ -var get = require('./get'); - - var UNDEF; - - /** - * Check if object has nested property. - */ - function has(obj, prop){ - return get(obj, prop) !== UNDEF; - } - - module.exports = has; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/hasOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/hasOwn.js deleted file mode 100644 index 7e3c82ae..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/hasOwn.js +++ /dev/null @@ -1,12 +0,0 @@ - - - /** - * Safer Object.hasOwnProperty - */ - function hasOwn(obj, prop){ - return Object.prototype.hasOwnProperty.call(obj, prop); - } - - module.exports = hasOwn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/keys.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/keys.js deleted file mode 100644 index dd2f4f55..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/keys.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object keys - */ - var keys = Object.keys || function (obj) { - var keys = []; - forOwn(obj, function(val, key){ - keys.push(key); - }); - return keys; - }; - - module.exports = keys; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/map.js deleted file mode 100644 index dd449a78..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/map.js +++ /dev/null @@ -1,18 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Creates a new object where all the values are the result of calling - * `callback`. - */ - function mapValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(val, key, obj) { - output[key] = callback(val, key, obj); - }); - - return output; - } - module.exports = mapValues; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/matches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/matches.js deleted file mode 100644 index 6074faa2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/matches.js +++ /dev/null @@ -1,20 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * checks if a object contains all given properties/values - */ - function matches(target, props){ - // can't use "object/every" because of circular dependency - var result = true; - forOwn(props, function(val, key){ - if (target[key] !== val) { - // break loop at first difference - return (result = false); - } - }); - return result; - } - - module.exports = matches; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/max.js deleted file mode 100644 index 3e8e92c7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/max.js +++ /dev/null @@ -1,12 +0,0 @@ -var arrMax = require('../array/max'); -var values = require('./values'); - - /** - * Returns maximum value inside object. - */ - function max(obj, compareFn) { - return arrMax(values(obj), compareFn); - } - - module.exports = max; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/merge.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/merge.js deleted file mode 100644 index 6961f608..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/merge.js +++ /dev/null @@ -1,40 +0,0 @@ -var hasOwn = require('./hasOwn'); -var deepClone = require('../lang/deepClone'); -var isObject = require('../lang/isObject'); - - /** - * Deep merge objects. - */ - function merge() { - var i = 1, - key, val, obj, target; - - // make sure we don't modify source element and it's properties - // objects are passed by reference - target = deepClone( arguments[0] ); - - while (obj = arguments[i++]) { - for (key in obj) { - if ( ! hasOwn(obj, key) ) { - continue; - } - - val = obj[key]; - - if ( isObject(val) && isObject(target[key]) ){ - // inception, deep merge objects - target[key] = merge(target[key], val); - } else { - // make sure arrays, regexp, date, objects are cloned - target[key] = deepClone(val); - } - - } - } - - return target; - } - - module.exports = merge; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/min.js deleted file mode 100644 index e1e66976..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/min.js +++ /dev/null @@ -1,12 +0,0 @@ -var arrMin = require('../array/min'); -var values = require('./values'); - - /** - * Returns minimum value inside object. - */ - function min(obj, iterator) { - return arrMin(values(obj), iterator); - } - - module.exports = min; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/mixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/mixIn.js deleted file mode 100644 index 55ec8fd5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/mixIn.js +++ /dev/null @@ -1,28 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Combine properties from all the objects into first one. - * - This method affects target object in place, if you want to create a new Object pass an empty object as first param. - * @param {object} target Target Object - * @param {...object} objects Objects to be combined (0...n objects). - * @return {object} Target Object. - */ - function mixIn(target, objects){ - var i = 0, - n = arguments.length, - obj; - while(++i < n){ - obj = arguments[i]; - if (obj != null) { - forOwn(obj, copyProp, target); - } - } - return target; - } - - function copyProp(val, key){ - this[key] = val; - } - - module.exports = mixIn; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/namespace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/namespace.js deleted file mode 100644 index c6e79f63..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/namespace.js +++ /dev/null @@ -1,19 +0,0 @@ -var forEach = require('../array/forEach'); - - /** - * Create nested object if non-existent - */ - function namespace(obj, path){ - if (!path) return obj; - forEach(path.split('.'), function(key){ - if (!obj[key]) { - obj[key] = {}; - } - obj = obj[key]; - }); - return obj; - } - - module.exports = namespace; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/pick.js deleted file mode 100644 index 74e56f98..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/pick.js +++ /dev/null @@ -1,18 +0,0 @@ - - - /** - * Return a copy of the object, filtered to only have values for the whitelisted keys. - */ - function pick(obj, var_keys){ - var keys = typeof arguments[1] !== 'string'? arguments[1] : Array.prototype.slice.call(arguments, 1), - out = {}, - i = 0, key; - while (key = keys[i++]) { - out[key] = obj[key]; - } - return out; - } - - module.exports = pick; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/pluck.js deleted file mode 100644 index e844df47..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/pluck.js +++ /dev/null @@ -1,13 +0,0 @@ -var map = require('./map'); -var prop = require('../function/prop'); - - /** - * Extract a list of property values. - */ - function pluck(obj, propName){ - return map(obj, prop(propName)); - } - - module.exports = pluck; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/reduce.js deleted file mode 100644 index 6f19a3a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/reduce.js +++ /dev/null @@ -1,29 +0,0 @@ -var forOwn = require('./forOwn'); -var size = require('./size'); - - /** - * Object reduce - */ - function reduce(obj, callback, memo, thisObj) { - var initial = arguments.length > 2; - - if (!size(obj) && !initial) { - throw new Error('reduce of empty object with no initial value'); - } - - forOwn(obj, function(value, key, list) { - if (!initial) { - memo = value; - initial = true; - } - else { - memo = callback.call(thisObj, memo, value, key, list); - } - }); - - return memo; - } - - module.exports = reduce; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/reject.js deleted file mode 100644 index 74643795..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/reject.js +++ /dev/null @@ -1,16 +0,0 @@ -var filter = require('./filter'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object reject - */ - function reject(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - return filter(obj, function(value, index, obj) { - return !callback(value, index, obj); - }, thisObj); - } - - module.exports = reject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/set.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/set.js deleted file mode 100644 index 9b3cdc48..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/set.js +++ /dev/null @@ -1,17 +0,0 @@ -var namespace = require('./namespace'); - - /** - * set "nested" object property - */ - function set(obj, prop, val){ - var parts = (/^(.+)\.(.+)$/).exec(prop); - if (parts){ - namespace(obj, parts[1])[parts[2]] = val; - } else { - obj[prop] = val; - } - } - - module.exports = set; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/size.js deleted file mode 100644 index 97885953..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/size.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object size - */ - function size(obj) { - var count = 0; - forOwn(obj, function(){ - count++; - }); - return count; - } - - module.exports = size; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/some.js deleted file mode 100644 index 384c6f3c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/some.js +++ /dev/null @@ -1,21 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object some - */ - function some(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - forOwn(obj, function(val, key) { - if (callback(val, key, obj)) { - result = true; - return false; // break - } - }); - return result; - } - - module.exports = some; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/unset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/unset.js deleted file mode 100644 index 343bca0a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/unset.js +++ /dev/null @@ -1,23 +0,0 @@ -var has = require('./has'); - - /** - * Unset object property. - */ - function unset(obj, prop){ - if (has(obj, prop)) { - var parts = prop.split('.'), - last = parts.pop(); - while (prop = parts.shift()) { - obj = obj[prop]; - } - return (delete obj[last]); - - } else { - // if property doesn't exist treat as deleted - return true; - } - } - - module.exports = unset; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/values.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/values.js deleted file mode 100644 index 265a6938..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/object/values.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object values - */ - function values(obj) { - var vals = []; - forOwn(obj, function(val, key){ - vals.push(val); - }); - return vals; - } - - module.exports = values; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/package.json deleted file mode 100644 index c4fabf3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/package.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "name": "mout", - "description": "Modular Utilities", - "version": "0.7.1", - "homepage": "http://moutjs.com/", - "contributors": [ - { - "name": "Adam Nowotny" - }, - { - "name": "André Cruz", - "email": "amdfcruz@gmail.com" - }, - { - "name": "Conrad Zimmerman", - "url": "http://www.conradz.com" - }, - { - "name": "Friedemann Altrock", - "email": "frodenius@gmail.com" - }, - { - "name": "Jarrod Overson", - "url": "http://jarrodoverson.com" - }, - { - "name": "Miller Medeiros", - "email": "contact@millermedeiros.com", - "url": "http://blog.millermedeiros.com" - }, - { - "name": "Zach Shipley" - } - ], - "keywords": [ - "utilities", - "functional", - "amd-utils", - "stdlib" - ], - "repository": { - "type": "git", - "url": "git://github.com/mout/mout.git" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://www.opensource.org/licenses/mit-license.php" - } - ], - "bugs": { - "url": "https://github.com/mout/mout/issues/" - }, - "main": "./index.js", - "scripts": { - "prepublish": "node build cjs .", - "pretest": "node build pkg", - "test": "node node_modules/istanbul/lib/cli test tests/runner.js --hook-run-in-context" - }, - "directories": { - "doc": "./doc" - }, - "devDependencies": { - "istanbul": "~0.1.27", - "jasmine-node": "~1.2.2", - "requirejs": "2.x", - "nodefy": "*", - "mdoc": "~0.3.2", - "handlebars": "~1.0.6", - "commander": "~1.0.5", - "rocambole": "~0.2.3", - "jshint": "2.x" - }, - "testling": { - "preprocess": "node build testling", - "browsers": { - "ie": [ - 7, - 8, - 9, - 10 - ], - "firefox": [ - 17, - "nightly" - ], - "chrome": [ - 23, - "canary" - ], - "opera": [ - 12, - "next" - ], - "safari": [ - 5.1, - 6 - ], - "iphone": [ - 6 - ], - "ipad": [ - 6 - ] - }, - "scripts": [ - "tests/lib/jasmine/jasmine.js", - "tests/lib/jasmine/jasmine.async.js", - "tests/lib/jasmine/jasmine-tap.js", - "tests/lib/requirejs/require.js", - "tests/testling/src.js", - "tests/testling/specs.js", - "tests/runner.js" - ] - }, - "readme": "![mout](http://moutjs.com/logo.png \"Modular JavaScript Utilties\")\n\nhttp://moutjs.com/\n\n[![Build Status](https://travis-ci.org/mout/mout.png?branch=master)](https://travis-ci.org/mout/mout)\n\nAll code is library agnostic and consist mostly of helper methods that aren't\ndirectly related with the DOM, the purpose of this library isn't to replace\nDojo, jQuery, YUI, Mootools, etc, but to provide modular solutions for common\nproblems that aren't solved by most of them. Consider it as a crossbrowser\nJavaScript standard library.\n\n\n\n## Main goals ##\n\n - increase code reuse;\n - be clear (code should be clean/readable);\n - be easy to debug;\n - be easy to maintain;\n - follow best practices;\n - follow standards when possible;\n - **don't convert JavaScript into another language!**\n - be compatible with other frameworks;\n - be modular;\n - have unit tests for all modules;\n - work on multiple environments (IE7+, modern browsers, node.js);\n\n\n\n## What shouldn't be here ##\n\n - UI components;\n - CSS selector engine;\n - Event system - pub/sub;\n - Template engine;\n - Anything that isn't generic enough to be on a standard library;\n - Anything that could be a separate library and/or isn't a modular utility...\n\n\n\n## API Documentation ##\n\nOnline documentation can be found at http://moutjs.com/ or inside the\n`doc` folder.\n\n\n\n## FAQ / Wiki / IRC ##\n\nFor more info about project structure, design decisions, tips, how to\ncontribute, build system, etc, please check the [project\nwiki](https://github.com/mout/mout/wiki).\n\nWe also have an IRC channel [#moutjs on\nirc.freenode.net](http://webchat.freenode.net/?channels=moutjs)\n\n\n\n## License ##\n\nReleased under the [MIT License](http://www.opensource.org/licenses/mit-license.php).\n\n", - "readmeFilename": "README.md", - "_id": "mout@0.7.1", - "dist": { - "shasum": "218de2b0880b220d99f4fbaee3fc0c3a5310bda8" - }, - "_from": "mout@~0.7.1", - "_resolved": "https://registry.npmjs.org/mout/-/mout-0.7.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString.js deleted file mode 100644 index 22685a7f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString.js +++ /dev/null @@ -1,15 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'contains' : require('./queryString/contains'), - 'decode' : require('./queryString/decode'), - 'encode' : require('./queryString/encode'), - 'getParam' : require('./queryString/getParam'), - 'getQuery' : require('./queryString/getQuery'), - 'parse' : require('./queryString/parse'), - 'setParam' : require('./queryString/setParam') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/contains.js deleted file mode 100644 index da678cf4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/contains.js +++ /dev/null @@ -1,12 +0,0 @@ -var getQuery = require('./getQuery'); - - /** - * Checks if query string contains parameter. - */ - function contains(url, paramName) { - var regex = new RegExp('(\\?|&)'+ paramName +'=', 'g'); //matches `?param=` or `¶m=` - return regex.test(getQuery(url)); - } - - module.exports = contains; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/decode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/decode.js deleted file mode 100644 index 1c15785b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/decode.js +++ /dev/null @@ -1,38 +0,0 @@ -var typecast = require('../string/typecast'); -var isString = require('../lang/isString'); -var isArray = require('../lang/isArray'); -var hasOwn = require('../object/hasOwn'); - - /** - * Decode query string into an object of keys => vals. - */ - function decode(queryStr, shouldTypecast) { - var queryArr = (queryStr || '').replace('?', '').split('&'), - count = -1, - length = queryArr.length, - obj = {}, - item, pValue, pName, toSet; - - while (++count < length) { - item = queryArr[count].split('='); - pName = item[0]; - if (!pName || !pName.length){ - continue; - } - pValue = shouldTypecast === false ? item[1] : typecast(item[1]); - toSet = isString(pValue) ? decodeURIComponent(pValue) : pValue; - if (hasOwn(obj,pName)){ - if(isArray(obj[pName])){ - obj[pName].push(toSet); - } else { - obj[pName] = [obj[pName],toSet]; - } - } else { - obj[pName] = toSet; - } - } - return obj; - } - - module.exports = decode; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/encode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/encode.js deleted file mode 100644 index 3a4fd0a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/encode.js +++ /dev/null @@ -1,27 +0,0 @@ -var forOwn = require('../object/forOwn'); -var isArray = require('../lang/isArray'); -var forEach = require('../array/forEach'); - - /** - * Encode object into a query string. - */ - function encode(obj){ - var query = [], - arrValues, reg; - forOwn(obj, function (val, key) { - if (isArray(val)) { - arrValues = key + '='; - reg = new RegExp('&'+key+'+=$'); - forEach(val, function (aValue) { - arrValues += encodeURIComponent(aValue) + '&' + key + '='; - }); - query.push(arrValues.replace(reg, '')); - } else { - query.push(key + '=' + encodeURIComponent(val)); - } - }); - return (query.length) ? '?' + query.join('&') : ''; - } - - module.exports = encode; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/getParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/getParam.js deleted file mode 100644 index f149c3ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/getParam.js +++ /dev/null @@ -1,15 +0,0 @@ -var typecast = require('../string/typecast'); -var getQuery = require('./getQuery'); - - /** - * Get query parameter value. - */ - function getParam(url, param, shouldTypecast){ - var regexp = new RegExp('(\\?|&)'+ param + '=([^&]*)'), //matches `?param=value` or `¶m=value`, value = $2 - result = regexp.exec( getQuery(url) ), - val = (result && result[2])? result[2] : null; - return shouldTypecast === false? val : typecast(val); - } - - module.exports = getParam; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/getQuery.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/getQuery.js deleted file mode 100644 index 5194af2d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/getQuery.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * Gets full query as string with all special chars decoded. - */ - function getQuery(url) { - url = url.replace(/#.*/, ''); //removes hash (to avoid getting hash query) - var queryString = /\?[a-zA-Z0-9\=\&\%\$\-\_\.\+\!\*\'\(\)\,]+/.exec(url); //valid chars according to: http://www.ietf.org/rfc/rfc1738.txt - return (queryString)? decodeURIComponent(queryString[0]) : ''; - } - - module.exports = getQuery; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/parse.js deleted file mode 100644 index 532906c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/parse.js +++ /dev/null @@ -1,13 +0,0 @@ -var decode = require('./decode'); -var getQuery = require('./getQuery'); - - /** - * Get query string, parses and decodes it. - */ - function parse(url, shouldTypecast) { - return decode(getQuery(url), shouldTypecast); - } - - module.exports = parse; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/setParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/setParam.js deleted file mode 100644 index 052a9ba6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/queryString/setParam.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Set query string parameter value - */ - function setParam(url, paramName, value){ - url = url || ''; - - var re = new RegExp('(\\?|&)'+ paramName +'=[^&]*' ); - var param = paramName +'='+ encodeURIComponent( value ); - - if ( re.test(url) ) { - return url.replace(re, '$1'+ param); - } else { - if (url.indexOf('?') === -1) { - url += '?'; - } - if (url.indexOf('=') !== -1) { - url += '&'; - } - return url + param; - } - - } - - module.exports = setParam; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random.js deleted file mode 100644 index d9267f01..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random.js +++ /dev/null @@ -1,16 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'choice' : require('./random/choice'), - 'guid' : require('./random/guid'), - 'rand' : require('./random/rand'), - 'randBit' : require('./random/randBit'), - 'randHex' : require('./random/randHex'), - 'randInt' : require('./random/randInt'), - 'randSign' : require('./random/randSign'), - 'random' : require('./random/random') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/choice.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/choice.js deleted file mode 100644 index 51aa82a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/choice.js +++ /dev/null @@ -1,15 +0,0 @@ -var randInt = require('./randInt'); -var isArray = require('../lang/isArray'); - - /** - * Returns a random element from the supplied arguments - * or from the array (if single argument is an array). - */ - function choice(items) { - var target = (arguments.length === 1 && isArray(items))? items : arguments; - return target[ randInt(0, target.length - 1) ]; - } - - module.exports = choice; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/guid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/guid.js deleted file mode 100644 index 41f6eddc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/guid.js +++ /dev/null @@ -1,24 +0,0 @@ -var randHex = require('./randHex'); -var choice = require('./choice'); - - /** - * Returns pseudo-random guid (UUID v4) - * IMPORTANT: it's not totally "safe" since randHex/choice uses Math.random - * by default and sequences can be predicted in some cases. See the - * "random/random" documentation for more info about it and how to replace - * the default PRNG. - */ - function guid() { - return ( - randHex(8)+'-'+ - randHex(4)+'-'+ - // v4 UUID always contain "4" at this position to specify it was - // randomly generated - '4' + randHex(3) +'-'+ - // v4 UUID always contain chars [a,b,8,9] at this position - choice(8, 9, 'a', 'b') + randHex(3)+'-'+ - randHex(12) - ); - } - module.exports = guid; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/rand.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/rand.js deleted file mode 100644 index 782dec88..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/rand.js +++ /dev/null @@ -1,15 +0,0 @@ -var random = require('./random'); -var MIN_INT = require('../number/MIN_INT'); -var MAX_INT = require('../number/MAX_INT'); - - /** - * Returns random number inside range - */ - function rand(min, max){ - min = min == null? MIN_INT : min; - max = max == null? MAX_INT : max; - return min + (max - min) * random(); - } - - module.exports = rand; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randBit.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randBit.js deleted file mode 100644 index bd20b4a0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randBit.js +++ /dev/null @@ -1,11 +0,0 @@ -var random = require('./random'); - - /** - * Returns random bit (0 or 1) - */ - function randomBit() { - return random() > 0.5? 1 : 0; - } - - module.exports = randomBit; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randHex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randHex.js deleted file mode 100644 index d8d711c3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randHex.js +++ /dev/null @@ -1,19 +0,0 @@ -var choice = require('./choice'); - - var _chars = '0123456789abcdef'.split(''); - - /** - * Returns a random hexadecimal string - */ - function randHex(size){ - size = size && size > 0? size : 6; - var str = ''; - while (size--) { - str += choice(_chars); - } - return str; - } - - module.exports = randHex; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randInt.js deleted file mode 100644 index e237d964..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randInt.js +++ /dev/null @@ -1,18 +0,0 @@ -var MIN_INT = require('../number/MIN_INT'); -var MAX_INT = require('../number/MAX_INT'); -var rand = require('./rand'); - - /** - * Gets random integer inside range or snap to min/max values. - */ - function randInt(min, max){ - min = min == null? MIN_INT : ~~min; - max = max == null? MAX_INT : ~~max; - // can't be max + 0.5 otherwise it will round up if `rand` - // returns `max` causing it to overflow range. - // -0.5 and + 0.49 are required to avoid bias caused by rounding - return Math.round( rand(min - 0.5, max + 0.499999999999) ); - } - - module.exports = randInt; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randSign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randSign.js deleted file mode 100644 index 5a9fed76..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/randSign.js +++ /dev/null @@ -1,11 +0,0 @@ -var random = require('./random'); - - /** - * Returns random sign (-1 or 1) - */ - function randomSign() { - return random() > 0.5? 1 : -1; - } - - module.exports = randomSign; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/random.js deleted file mode 100644 index 670a3cc4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/random/random.js +++ /dev/null @@ -1,18 +0,0 @@ - - - /** - * Just a wrapper to Math.random. No methods inside mout/random should call - * Math.random() directly so we can inject the pseudo-random number - * generator if needed (ie. in case we need a seeded random or a better - * algorithm than the native one) - */ - function random(){ - return random.get(); - } - - // we expose the method so it can be swapped if needed - random.get = Math.random; - - module.exports = random; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array.js deleted file mode 100644 index 7bcc961b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array.js +++ /dev/null @@ -1,46 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'append' : require('./array/append'), - 'collect' : require('./array/collect'), - 'combine' : require('./array/combine'), - 'compact' : require('./array/compact'), - 'contains' : require('./array/contains'), - 'difference' : require('./array/difference'), - 'every' : require('./array/every'), - 'filter' : require('./array/filter'), - 'find' : require('./array/find'), - 'findIndex' : require('./array/findIndex'), - 'flatten' : require('./array/flatten'), - 'forEach' : require('./array/forEach'), - 'indexOf' : require('./array/indexOf'), - 'insert' : require('./array/insert'), - 'intersection' : require('./array/intersection'), - 'invoke' : require('./array/invoke'), - 'join' : require('./array/join'), - 'lastIndexOf' : require('./array/lastIndexOf'), - 'map' : require('./array/map'), - 'max' : require('./array/max'), - 'min' : require('./array/min'), - 'pick' : require('./array/pick'), - 'pluck' : require('./array/pluck'), - 'range' : require('./array/range'), - 'reduce' : require('./array/reduce'), - 'reduceRight' : require('./array/reduceRight'), - 'reject' : require('./array/reject'), - 'remove' : require('./array/remove'), - 'removeAll' : require('./array/removeAll'), - 'shuffle' : require('./array/shuffle'), - 'some' : require('./array/some'), - 'sort' : require('./array/sort'), - 'split' : require('./array/split'), - 'toLookup' : require('./array/toLookup'), - 'union' : require('./array/union'), - 'unique' : require('./array/unique'), - 'xor' : require('./array/xor'), - 'zip' : require('./array/zip') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/append.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/append.js deleted file mode 100644 index 549d8754..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/append.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function () { - - /** - * Appends an array to the end of another. - * The first array will be modified. - */ - function append(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var pad = arr1.length, - i = -1, - len = arr2.length; - while (++i < len) { - arr1[pad + i] = arr2[i]; - } - return arr1; - } - return append; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/collect.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/collect.js deleted file mode 100644 index 8f60cda2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/collect.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['./append', '../function/makeIterator_'], function (append, makeIterator) { - - /** - * Maps the items in the array and concatenates the result arrays. - */ - function collect(arr, callback, thisObj){ - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - var value = callback(arr[i], i, arr); - if (value != null) { - append(results, value); - } - } - - return results; - } - - return collect; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/combine.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/combine.js deleted file mode 100644 index 22efb860..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/combine.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./indexOf'], function (indexOf) { - - /** - * Combines an array with all the items of another. - * Does not allow duplicates and is case and type sensitive. - */ - function combine(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var i = -1, len = arr2.length; - while (++i < len) { - if (indexOf(arr1, arr2[i]) === -1) { - arr1.push(arr2[i]); - } - } - - return arr1; - } - return combine; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/compact.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/compact.js deleted file mode 100644 index 02a81098..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/compact.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./filter'], function (filter) { - - /** - * Remove all null/undefined items from array. - */ - function compact(arr) { - return filter(arr, function(val){ - return (val != null); - }); - } - - return compact; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/contains.js deleted file mode 100644 index fca4f7cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/contains.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['./indexOf'], function (indexOf) { - - /** - * If array contains values. - */ - function contains(arr, val) { - return indexOf(arr, val) !== -1; - } - return contains; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/difference.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/difference.js deleted file mode 100644 index 819bda3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/difference.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./unique', './filter', './some', './contains'], function (unique, filter, some, contains) { - - - /** - * Return a new Array with elements that aren't present in the other Arrays. - */ - function difference(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return !some(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - return difference; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/every.js deleted file mode 100644 index 78ba46d3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/every.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array every - */ - function every(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (!callback(arr[i], i, arr) ) { - result = false; - break; - } - } - - return result; - } - - return every; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/filter.js deleted file mode 100644 index 38add180..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/filter.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array filter - */ - function filter(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - return filter; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/find.js deleted file mode 100644 index 3957dcd5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/find.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./findIndex'], function (findIndex) { - - /** - * Returns first item that matches criteria - */ - function find(arr, iterator, thisObj){ - var idx = findIndex(arr, iterator, thisObj); - return idx >= 0? arr[idx] : void(0); - } - - return find; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/findIndex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/findIndex.js deleted file mode 100644 index 59dfeeb9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/findIndex.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Returns the index of the first item that matches criteria - */ - function findIndex(arr, iterator, thisObj){ - iterator = makeIterator(iterator, thisObj); - if (arr == null) { - return -1; - } - - var i = -1, len = arr.length; - while (++i < len) { - if (iterator(arr[i], i, arr)) { - return i; - } - } - - return -1; - } - - return findIndex; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/flatten.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/flatten.js deleted file mode 100644 index 42e87f43..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/flatten.js +++ /dev/null @@ -1,42 +0,0 @@ -define(['../lang/isArray', './append'], function (isArray, append) { - - /* - * Helper function to flatten to a destination array. - * Used to remove the need to create intermediate arrays while flattening. - */ - function flattenTo(arr, result, level) { - if (arr == null) { - return result; - } else if (level === 0) { - append(result, arr); - return result; - } - - var value, - i = -1, - len = arr.length; - while (++i < len) { - value = arr[i]; - if (isArray(value)) { - flattenTo(value, result, level - 1); - } else { - result.push(value); - } - } - return result; - } - - /** - * Recursively flattens an array. - * A new array containing all the elements is returned. - * If `shallow` is true, it will only flatten one level. - */ - function flatten(arr, level) { - level = level == null? -1 : level; - return flattenTo(arr, [], level); - } - - return flatten; - -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/forEach.js deleted file mode 100644 index 0e045868..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/forEach.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Array forEach - */ - function forEach(arr, callback, thisObj) { - if (arr == null) { - return; - } - var i = -1, - len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback.call(thisObj, arr[i], i, arr) === false ) { - break; - } - } - } - - return forEach; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/indexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/indexOf.js deleted file mode 100644 index 0e75f99b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/indexOf.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Array.indexOf - */ - function indexOf(arr, item, fromIndex) { - fromIndex = fromIndex || 0; - if (arr == null) { - return -1; - } - - var len = arr.length, - i = fromIndex < 0 ? len + fromIndex : fromIndex; - while (i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[i] === item) { - return i; - } - - i++; - } - - return -1; - } - - return indexOf; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/insert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/insert.js deleted file mode 100644 index d8d831f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/insert.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./difference', '../lang/toArray'], function (difference, toArray) { - - /** - * Insert item into array if not already present. - */ - function insert(arr, rest_items) { - var diff = difference(toArray(arguments).slice(1), arr); - if (diff.length) { - Array.prototype.push.apply(arr, diff); - } - return arr.length; - } - return insert; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/intersection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/intersection.js deleted file mode 100644 index 64e6ee97..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/intersection.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./unique', './filter', './every', './contains'], function (unique, filter, every, contains) { - - - /** - * Return a new Array with elements common to all Arrays. - * - based on underscore.js implementation - */ - function intersection(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return every(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - return intersection; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/invoke.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/invoke.js deleted file mode 100644 index f94a9a4a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/invoke.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Call `methodName` on each item of the array passing custom arguments if - * needed. - */ - function invoke(arr, methodName, var_args){ - if (arr == null) { - return arr; - } - - var args = Array.prototype.slice.call(arguments, 2); - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - value[methodName].apply(value, args); - } - - return arr; - } - - return invoke; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/join.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/join.js deleted file mode 100644 index 2c618d29..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/join.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./filter'], function(filter) { - - function isValidString(val) { - return (val != null && val !== ''); - } - - /** - * Joins strings with the specified separator inserted between each value. - * Null values and empty strings will be excluded. - */ - function join(items, separator) { - separator = separator || ''; - return filter(items, isValidString).join(separator); - } - - return join; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/lastIndexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/lastIndexOf.js deleted file mode 100644 index 931235f4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/lastIndexOf.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Array lastIndexOf - */ - function lastIndexOf(arr, item, fromIndex) { - if (arr == null) { - return -1; - } - - var len = arr.length; - fromIndex = (fromIndex == null || fromIndex >= len)? len - 1 : fromIndex; - fromIndex = (fromIndex < 0)? len + fromIndex : fromIndex; - - while (fromIndex >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[fromIndex] === item) { - return fromIndex; - } - fromIndex--; - } - - return -1; - } - - return lastIndexOf; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/map.js deleted file mode 100644 index 14377ab6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/map.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array map - */ - function map(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null){ - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - results[i] = callback(arr[i], i, arr); - } - - return results; - } - - return map; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/max.js deleted file mode 100644 index d0628f0a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/max.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Return maximum value inside array - */ - function max(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return Infinity; - } else if (arr.length && !iterator) { - return Math.max.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = -Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp > compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - return max; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/min.js deleted file mode 100644 index 07a0c71f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/min.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Return minimum value inside array - */ - function min(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return -Infinity; - } else if (arr.length && !iterator) { - return Math.min.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp < compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - return min; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/pick.js deleted file mode 100644 index dc5b222f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/pick.js +++ /dev/null @@ -1,31 +0,0 @@ -define(['../random/randInt'], function (randInt) { - - /** - * Remove random item(s) from the Array and return it. - * Returns an Array of items if [nItems] is provided or a single item if - * it isn't specified. - */ - function pick(arr, nItems){ - if (nItems != null) { - var result = []; - if (nItems > 0 && arr && arr.length) { - nItems = nItems > arr.length? arr.length : nItems; - while (nItems--) { - result.push( pickOne(arr) ); - } - } - return result; - } - return (arr && arr.length)? pickOne(arr) : void(0); - } - - - function pickOne(arr){ - var idx = randInt(0, arr.length - 1); - return arr.splice(idx, 1)[0]; - } - - - return pick; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/pluck.js deleted file mode 100644 index c908856e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./map'], function (map) { - - /** - * Extract a list of property values. - */ - function pluck(arr, propName){ - return map(arr, propName); - } - - return pluck; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/range.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/range.js deleted file mode 100644 index 148ebf96..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/range.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../math/countSteps'], function (countSteps) { - - /** - * Returns an Array of numbers inside range. - */ - function range(start, stop, step) { - if (stop == null) { - stop = start; - start = 0; - } - step = step || 1; - - var result = [], - nSteps = countSteps(stop - start, step), - i = start; - - while (i <= stop) { - result.push(i); - i += step; - } - - return result; - } - - return range; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/reduce.js deleted file mode 100644 index 5f97ae8e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/reduce.js +++ /dev/null @@ -1,33 +0,0 @@ -define(function () { - - /** - * Array reduce - */ - function reduce(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2, - result = initVal; - - if (arr == null || !arr.length) { - if (!hasInit) { - throw new Error('reduce of empty array with no initial value'); - } else { - return initVal; - } - } - - var i = -1, len = arr.length; - while (++i < len) { - if (!hasInit) { - result = arr[i]; - hasInit = true; - } else { - result = fn(result, arr[i], i, arr); - } - } - - return result; - } - - return reduce; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/reduceRight.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/reduceRight.js deleted file mode 100644 index ddae0e7f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/reduceRight.js +++ /dev/null @@ -1,34 +0,0 @@ -define(function () { - - /** - * Array reduceRight - */ - function reduceRight(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2; - - if (arr == null || !arr.length) { - if (hasInit) { - return initVal; - } else { - throw new Error('reduce of empty array with no initial value'); - } - } - - var i = arr.length, result = initVal, value; - while (--i >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - value = arr[i]; - if (!hasInit) { - result = value; - hasInit = true; - } else { - result = fn(result, value, i, arr); - } - } - return result; - } - - return reduceRight; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/reject.js deleted file mode 100644 index cad40384..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/reject.js +++ /dev/null @@ -1,25 +0,0 @@ -define(['../function/makeIterator_'], function(makeIterator) { - - /** - * Array reject - */ - function reject(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (!callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - return reject; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/remove.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/remove.js deleted file mode 100644 index dec9134d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/remove.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./indexOf'], function(indexOf){ - - /** - * Remove a single item from the array. - * (it won't remove duplicates, just a single item) - */ - function remove(arr, item){ - var idx = indexOf(arr, item); - if (idx !== -1) arr.splice(idx, 1); - } - - return remove; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/removeAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/removeAll.js deleted file mode 100644 index e81022b8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/removeAll.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./indexOf'], function(indexOf){ - - /** - * Remove all instances of an item from array. - */ - function removeAll(arr, item){ - var idx = indexOf(arr, item); - while (idx !== -1) { - arr.splice(idx, 1); - idx = indexOf(arr, item, idx); - } - } - - return removeAll; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/shuffle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/shuffle.js deleted file mode 100644 index 891d1677..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/shuffle.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['../random/randInt'], function (randInt) { - - /** - * Shuffle array items. - */ - function shuffle(arr) { - var results = [], - rnd; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - if (!i) { - results[0] = arr[0]; - } else { - rnd = randInt(0, i); - results[i] = results[rnd]; - results[rnd] = arr[i]; - } - } - - return results; - } - - return shuffle; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/some.js deleted file mode 100644 index e46a9781..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/some.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array some - */ - function some(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback(arr[i], i, arr) ) { - result = true; - break; - } - } - - return result; - } - - return some; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/sort.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/sort.js deleted file mode 100644 index 4c194042..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/sort.js +++ /dev/null @@ -1,55 +0,0 @@ -define(function () { - - /** - * Merge sort (http://en.wikipedia.org/wiki/Merge_sort) - */ - function mergeSort(arr, compareFn) { - if (arr == null) { - return []; - } else if (arr.length < 2) { - return arr; - } - - if (compareFn == null) { - compareFn = defaultCompare; - } - - var mid, left, right; - - mid = ~~(arr.length / 2); - left = mergeSort( arr.slice(0, mid), compareFn ); - right = mergeSort( arr.slice(mid, arr.length), compareFn ); - - return merge(left, right, compareFn); - } - - function defaultCompare(a, b) { - return a < b ? -1 : (a > b? 1 : 0); - } - - function merge(left, right, compareFn) { - var result = []; - - while (left.length && right.length) { - if (compareFn(left[0], right[0]) <= 0) { - // if 0 it should preserve same order (stable) - result.push(left.shift()); - } else { - result.push(right.shift()); - } - } - - if (left.length) { - result.push.apply(result, left); - } - - if (right.length) { - result.push.apply(result, right); - } - - return result; - } - - return mergeSort; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/split.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/split.js deleted file mode 100644 index a17275eb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/split.js +++ /dev/null @@ -1,35 +0,0 @@ -define(function() { - - /** - * Split array into a fixed number of segments. - */ - function split(array, segments) { - segments = segments || 2; - var results = []; - if (array == null) { - return results; - } - - var minLength = Math.floor(array.length / segments), - remainder = array.length % segments, - i = 0, - len = array.length, - segmentIndex = 0, - segmentLength; - - while (i < len) { - segmentLength = minLength; - if (segmentIndex < remainder) { - segmentLength++; - } - - results.push(array.slice(i, i + segmentLength)); - - segmentIndex++; - i += segmentLength; - } - - return results; - } - return split; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/toLookup.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/toLookup.js deleted file mode 100644 index aac8fd1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/toLookup.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['../lang/isFunction'], function (isFunction) { - - /** - * Creates an object that holds a lookup for the objects in the array. - */ - function toLookup(arr, key) { - var result = {}; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length, value; - if (isFunction(key)) { - while (++i < len) { - value = arr[i]; - result[key(value)] = value; - } - } else { - while (++i < len) { - value = arr[i]; - result[value[key]] = value; - } - } - - return result; - } - return toLookup; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/union.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/union.js deleted file mode 100644 index 5f9922e5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/union.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./unique', './append'], function (unique, append) { - - /** - * Concat multiple arrays and remove duplicates - */ - function union(arrs) { - var results = []; - var i = -1, len = arguments.length; - while (++i < len) { - append(results, arguments[i]); - } - - return unique(results); - } - - return union; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/unique.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/unique.js deleted file mode 100644 index c4bd23b4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/unique.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./indexOf', './filter'], function(indexOf, filter){ - - /** - * @return {array} Array of unique items - */ - function unique(arr){ - return filter(arr, isUnique); - } - - function isUnique(item, i, arr){ - return indexOf(arr, item, i+1) === -1; - } - - return unique; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/xor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/xor.js deleted file mode 100644 index 7df89d9c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/xor.js +++ /dev/null @@ -1,24 +0,0 @@ -define(['./unique', './filter', './contains'], function (unique, filter, contains) { - - - /** - * Exclusive OR. Returns items that are present in a single array. - * - like ptyhon's `symmetric_difference` - */ - function xor(arr1, arr2) { - arr1 = unique(arr1); - arr2 = unique(arr2); - - var a1 = filter(arr1, function(item){ - return !contains(arr2, item); - }), - a2 = filter(arr2, function(item){ - return !contains(arr1, item); - }); - - return a1.concat(a2); - } - - return xor; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/zip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/zip.js deleted file mode 100644 index bd0dbb84..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/array/zip.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['./max', './map'], function (max, map) { - - function getLength(arr) { - return arr == null ? 0 : arr.length; - } - - /** - * Merges together the values of each of the arrays with the values at the - * corresponding position. - */ - function zip(arr){ - var len = arr ? max(map(arguments, getLength)) : 0, - results = [], - i = -1; - while (++i < len) { - // jshint loopfunc: true - results.push(map(arguments, function(item) { - return item == null ? undefined : item[i]; - })); - } - - return results; - } - - return zip; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection.js deleted file mode 100644 index 386e6da9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection.js +++ /dev/null @@ -1,22 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'contains' : require('./collection/contains'), - 'every' : require('./collection/every'), - 'filter' : require('./collection/filter'), - 'find' : require('./collection/find'), - 'forEach' : require('./collection/forEach'), - 'make_' : require('./collection/make_'), - 'map' : require('./collection/map'), - 'max' : require('./collection/max'), - 'min' : require('./collection/min'), - 'pluck' : require('./collection/pluck'), - 'reduce' : require('./collection/reduce'), - 'reject' : require('./collection/reject'), - 'size' : require('./collection/size'), - 'some' : require('./collection/some') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/contains.js deleted file mode 100644 index 192167e8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/contains.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/contains', '../object/contains'], function (make, arrContains, objContains) { - - /** - */ - return make(arrContains, objContains); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/every.js deleted file mode 100644 index 6317f503..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/every.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/every', '../object/every'], function (make, arrEvery, objEvery) { - - /** - */ - return make(arrEvery, objEvery); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/filter.js deleted file mode 100644 index 4e7fadc8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/filter.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * filter collection values, returns array. - */ - function filter(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - var results = []; - if (!list) { - return results; - } - forEach(list, function(value, index, list) { - if (iterator(value, index, list)) { - results[results.length] = value; - } - }); - return results; - } - - return filter; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/find.js deleted file mode 100644 index 681f9414..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/find.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/find', '../object/find'], function(make, arrFind, objFind) { - - /** - * Find value that returns true on iterator check. - */ - return make(arrFind, objFind); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/forEach.js deleted file mode 100644 index 3b39d3ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/forEach.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/forEach', '../object/forOwn'], function (make, arrForEach, objForEach) { - - /** - */ - return make(arrForEach, objForEach); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/make_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/make_.js deleted file mode 100644 index 312e0564..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/make_.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function(){ - - /** - * internal method used to create other collection modules. - */ - function makeCollectionMethod(arrMethod, objMethod, defaultReturn) { - return function(){ - var args = Array.prototype.slice.call(arguments); - if (args[0] == null) { - return defaultReturn; - } - // array-like is treated as array - return (typeof args[0].length === 'number')? arrMethod.apply(null, args) : objMethod.apply(null, args); - }; - } - - return makeCollectionMethod; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/map.js deleted file mode 100644 index 96e24987..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/map.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../lang/isObject', '../object/values', '../array/map', '../function/makeIterator_'], function (isObject, values, arrMap, makeIterator) { - - /** - * Map collection values, returns Array. - */ - function map(list, callback, thisObj) { - callback = makeIterator(callback, thisObj); - // list.length to check array-like object, if not array-like - // we simply map all the object values - if( isObject(list) && list.length == null ){ - list = values(list); - } - return arrMap(list, function (val, key, list) { - return callback(val, key, list); - }); - } - - return map; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/max.js deleted file mode 100644 index de9a6da5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/max.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/max', '../object/max'], function (make, arrMax, objMax) { - - /** - * Get maximum value inside collection - */ - return make(arrMax, objMax); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/min.js deleted file mode 100644 index f0c239a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/min.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/min', '../object/min'], function (make, arrMin, objMin) { - - /** - * Get minimum value inside collection. - */ - return make(arrMin, objMin); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/pluck.js deleted file mode 100644 index ef784a7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/pluck.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./map'], function (map) { - - /** - * Extract a list of property values. - */ - function pluck(list, key) { - return map(list, function(value) { - return value[key]; - }); - } - - return pluck; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/reduce.js deleted file mode 100644 index bd05d43d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/reduce.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/reduce', '../object/reduce'], function (make, arrReduce, objReduce) { - - /** - */ - return make(arrReduce, objReduce); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/reject.js deleted file mode 100644 index 581adfdc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/reject.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./filter', '../function/makeIterator_'], function (filter, makeIterator) { - - /** - * Inverse or collection/filter - */ - function reject(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - return filter(list, function(value, index, list) { - return !iterator(value, index, list); - }, thisObj); - } - - return reject; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/size.js deleted file mode 100644 index 4e5ab419..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/size.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/isArray', '../object/size'], function (isArray, objSize) { - - /** - * Get collection size - */ - function size(list) { - if (!list) { - return 0; - } - if (isArray(list)) { - return list.length; - } - return objSize(list); - } - - return size; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/some.js deleted file mode 100644 index c0aebee2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/collection/some.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/some', '../object/some'], function (make, arrSome, objSome) { - - /** - */ - return make(arrSome, objSome); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date.js deleted file mode 100644 index 4d449150..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'dayOfTheYear' : require('./date/dayOfTheYear'), - 'diff' : require('./date/diff'), - 'i18n_' : require('./date/i18n_'), - 'isLeapYear' : require('./date/isLeapYear'), - 'isSame' : require('./date/isSame'), - 'parseIso' : require('./date/parseIso'), - 'startOf' : require('./date/startOf'), - 'strftime' : require('./date/strftime'), - 'timezoneAbbr' : require('./date/timezoneAbbr'), - 'timezoneOffset' : require('./date/timezoneOffset'), - 'totalDaysInMonth' : require('./date/totalDaysInMonth'), - 'totalDaysInYear' : require('./date/totalDaysInYear'), - 'weekOfTheYear' : require('./date/weekOfTheYear') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/dayOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/dayOfTheYear.js deleted file mode 100644 index dc77ae1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/dayOfTheYear.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/isDate'], function (isDate) { - - /** - * return the day of the year (1..366) - */ - function dayOfTheYear(date){ - return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - - Date.UTC(date.getFullYear(), 0, 1)) / 86400000 + 1; - } - - return dayOfTheYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/diff.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/diff.js deleted file mode 100644 index 667165fe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/diff.js +++ /dev/null @@ -1,128 +0,0 @@ -define(['./totalDaysInMonth', './totalDaysInYear', '../time/convert'], function(totalDaysInMonth, totalDaysInYear, convert){ - - /** - * calculate the difference between dates (range) - */ - function diff(start, end, unitName){ - // sort the dates to make it easier to process (specially year/month) - if (start > end) { - var swap = start; - start = end; - end = swap; - } - - var output; - - if (unitName === 'month') { - output = getMonthsDiff(start, end); - } else if (unitName === 'year'){ - output = getYearsDiff(start, end); - } else if (unitName != null) { - if (unitName === 'day') { - // ignore timezone difference because of daylight savings time - start = toUtc(start); - end = toUtc(end); - } - output = convert(end - start, 'ms', unitName); - } else { - output = end - start; - } - - return output; - } - - - function toUtc(d){ - // we ignore timezone differences on purpose because of daylight - // savings time, otherwise it would return fractional days/weeks even - // if a full day elapsed. eg: - // Wed Feb 12 2014 00:00:00 GMT-0200 (BRST) - // Sun Feb 16 2014 00:00:00 GMT-0300 (BRT) - // diff should be 4 days and not 4.041666666666667 - return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), - d.getHours(), d.getMinutes(), d.getSeconds(), - d.getMilliseconds()); - } - - - function getMonthsDiff(start, end){ - return getElapsedMonths(start, end) + - getElapsedYears(start, end) * 12 + - getFractionalMonth(start, end); - } - - - function getYearsDiff(start, end){ - var elapsedYears = getElapsedYears(start, end); - return elapsedYears + getFractionalYear(start, end, elapsedYears); - } - - - function getElapsedMonths(start, end){ - var monthDiff = end.getMonth() - start.getMonth(); - if (monthDiff < 0) { - monthDiff += 12; - } - // less than a full month - if (start.getDate() > end.getDate()) { - monthDiff -= 1; - } - return monthDiff; - } - - - function getElapsedYears(start, end){ - var yearDiff = end.getFullYear() - start.getFullYear(); - // less than a full year - if (start.getMonth() > end.getMonth()) { - yearDiff -= 1; - } - return yearDiff; - } - - - function getFractionalMonth(start, end){ - var fractionalDiff = 0; - var startDay = start.getDate(); - var endDay = end.getDate(); - - if (startDay !== endDay) { - var startTotalDays = totalDaysInMonth(start); - var endTotalDays = totalDaysInMonth(end); - var totalDays; - var daysElapsed; - - if (startDay > endDay) { - // eg: Jan 29 - Feb 27 (29 days elapsed but not a full month) - var baseDay = startTotalDays - startDay; - daysElapsed = endDay + baseDay; - // total days should be relative to 1st day of next month if - // startDay > endTotalDays - totalDays = (startDay > endTotalDays)? - endTotalDays + baseDay + 1 : startDay + baseDay; - } else { - // fractional is only based on endMonth eg: Jan 12 - Feb 18 - // (6 fractional days, 28 days until next full month) - daysElapsed = endDay - startDay; - totalDays = endTotalDays; - } - - fractionalDiff = daysElapsed / totalDays; - } - - return fractionalDiff; - } - - - function getFractionalYear(start, end, elapsedYears){ - var base = elapsedYears? - new Date(end.getFullYear(), start.getMonth(), start.getDate()) : - start; - var elapsedDays = diff(base, end, 'day'); - return elapsedDays / totalDaysInYear(end); - } - - - return diff; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n/de-DE.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n/de-DE.js deleted file mode 100644 index 46f5c6aa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n/de-DE.js +++ /dev/null @@ -1,61 +0,0 @@ -define(function(){ - // de-DE (German) - return { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Januar", - "Februar", - "März", - "April", - "Mai", - "Juni", - "Juli", - "August", - "September", - "Oktober", - "November", - "Dezember" - ], - - "months_abbr" : [ - "Jan", - "Febr", - "März", - "Apr", - "Mai", - "Juni", - "Juli", - "Aug", - "Sept", - "Okt", - "Nov", - "Dez" - ], - - "days" : [ - "Sonntag", - "Montag", - "Dienstag", - "Mittwoch", - "Donnerstag", - "Freitag", - "Samstag" - ], - - "days_abbr" : [ - "So", - "Mo", - "Di", - "Mi", - "Do", - "Fr", - "Sa" - ] - }; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n/en-US.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n/en-US.js deleted file mode 100644 index 5e640c22..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n/en-US.js +++ /dev/null @@ -1,61 +0,0 @@ -define(function(){ - // en-US (English, United States) - return { - "am" : "AM", - "pm" : "PM", - - "x": "%m/%d/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %I:%M:%S %p %Z", - - "months" : [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - - "months_abbr" : [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - - "days" : [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - - "days_abbr" : [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ] - }; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n/pt-BR.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n/pt-BR.js deleted file mode 100644 index 47256dd2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n/pt-BR.js +++ /dev/null @@ -1,61 +0,0 @@ -define(function(){ - // pt-BR (Brazillian Portuguese) - return { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Janeiro", - "Fevereiro", - "Março", - "Abril", - "Maio", - "Junho", - "Julho", - "Agosto", - "Setembro", - "Outubro", - "Novembro", - "Dezembro" - ], - - "months_abbr" : [ - "Jan", - "Fev", - "Mar", - "Abr", - "Mai", - "Jun", - "Jul", - "Ago", - "Set", - "Out", - "Nov", - "Dez" - ], - - "days" : [ - "Domingo", - "Segunda", - "Terça", - "Quarta", - "Quinta", - "Sexta", - "Sábado" - ], - - "days_abbr" : [ - "Dom", - "Seg", - "Ter", - "Qua", - "Qui", - "Sex", - "Sáb" - ] - }; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n_.js deleted file mode 100644 index c04ce885..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/i18n_.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../object/mixIn', './i18n/en-US'], function(mixIn, enUS){ - - // we also use mixIn to make sure we don't affect the original locale - var activeLocale = mixIn({}, enUS, { - // we expose a "set" method to allow overriding the global locale - set : function(localeData){ - mixIn(activeLocale, localeData); - } - }); - - return activeLocale; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/isLeapYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/isLeapYear.js deleted file mode 100644 index e400b43d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/isLeapYear.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../lang/isDate'], function (isDate) { - - /** - * checks if it's a leap year - */ - function isLeapYear(fullYear){ - if (isDate(fullYear)) { - fullYear = fullYear.getFullYear(); - } - return fullYear % 400 === 0 || (fullYear % 100 !== 0 && fullYear % 4 === 0); - } - - return isLeapYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/isSame.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/isSame.js deleted file mode 100644 index f30531fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/isSame.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./startOf'], function (startOf) { - - /** - * Check if date is "same" with optional period - */ - function isSame(date1, date2, period){ - if (period) { - date1 = startOf(date1, period); - date2 = startOf(date2, period); - } - return Number(date1) === Number(date2); - } - - return isSame; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/parseIso.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/parseIso.js deleted file mode 100644 index b21c8797..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/parseIso.js +++ /dev/null @@ -1,146 +0,0 @@ -define(['../array/some'], function (some) { - - var datePatterns = [ - /^([0-9]{4})$/, // YYYY - /^([0-9]{4})-([0-9]{2})$/, // YYYY-MM (YYYYMM not allowed) - /^([0-9]{4})-?([0-9]{2})-?([0-9]{2})$/ // YYYY-MM-DD or YYYYMMDD - ]; - var ORD_DATE = /^([0-9]{4})-?([0-9]{3})$/; // YYYY-DDD - - var timePatterns = [ - /^([0-9]{2}(?:\.[0-9]*)?)$/, // HH.hh - /^([0-9]{2}):?([0-9]{2}(?:\.[0-9]*)?)$/, // HH:MM.mm - /^([0-9]{2}):?([0-9]{2}):?([0-9]{2}(\.[0-9]*)?)$/ // HH:MM:SS.ss - ]; - - var DATE_TIME = /^(.+)T(.+)$/; - var TIME_ZONE = /^(.+)([+\-])([0-9]{2}):?([0-9]{2})$/; - - function matchAll(str, patterns) { - var match; - var found = some(patterns, function(pattern) { - return !!(match = pattern.exec(str)); - }); - - return found ? match : null; - } - - function getDate(year, month, day) { - var date = new Date(Date.UTC(year, month, day)); - - // Explicitly set year to avoid Date.UTC making dates < 100 relative to - // 1900 - date.setUTCFullYear(year); - - var valid = - date.getUTCFullYear() === year && - date.getUTCMonth() === month && - date.getUTCDate() === day; - return valid ? +date : NaN; - } - - function parseOrdinalDate(str) { - var match = ORD_DATE.exec(str); - if (match ) { - var year = +match[1], - day = +match[2], - date = new Date(Date.UTC(year, 0, day)); - - if (date.getUTCFullYear() === year) { - return +date; - } - } - - return NaN; - } - - function parseDate(str) { - var match, year, month, day; - - match = matchAll(str, datePatterns); - if (match === null) { - // Ordinal dates are verified differently. - return parseOrdinalDate(str); - } - - year = (match[1] === void 0) ? 0 : +match[1]; - month = (match[2] === void 0) ? 0 : +match[2] - 1; - day = (match[3] === void 0) ? 1 : +match[3]; - - return getDate(year, month, day); - } - - function getTime(hr, min, sec) { - var valid = - (hr < 24 && hr >= 0 && - min < 60 && min >= 0 && - sec < 60 && min >= 0) || - (hr === 24 && min === 0 && sec === 0); - if (!valid) { - return NaN; - } - - return ((hr * 60 + min) * 60 + sec) * 1000; - } - - function parseOffset(str) { - var match; - if (str.charAt(str.length - 1) === 'Z') { - str = str.substring(0, str.length - 1); - } else { - match = TIME_ZONE.exec(str); - if (match) { - var hours = +match[3], - minutes = (match[4] === void 0) ? 0 : +match[4], - offset = getTime(hours, minutes, 0); - - if (match[2] === '-') { - offset *= -1; - } - - return { offset: offset, time: match[1] }; - } - } - - // No time zone specified, assume UTC - return { offset: 0, time: str }; - } - - function parseTime(str) { - var match; - var offset = parseOffset(str); - - str = offset.time; - offset = offset.offset; - if (isNaN(offset)) { - return NaN; - } - - match = matchAll(str, timePatterns); - if (match === null) { - return NaN; - } - - var hours = (match[1] === void 0) ? 0 : +match[1], - minutes = (match[2] === void 0) ? 0 : +match[2], - seconds = (match[3] === void 0) ? 0 : +match[3]; - - return getTime(hours, minutes, seconds) - offset; - } - - /** - * Parse an ISO8601 formatted date string, and return a Date object. - */ - function parseISO8601(str){ - var match = DATE_TIME.exec(str); - if (!match) { - // No time specified - return parseDate(str); - } - - return parseDate(match[1]) + parseTime(match[2]); - } - - return parseISO8601; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/startOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/startOf.js deleted file mode 100644 index 747f114d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/startOf.js +++ /dev/null @@ -1,54 +0,0 @@ -define(['../lang/clone'], function (clone) { - - /** - * get a new Date object representing start of period - */ - function startOf(date, period){ - date = clone(date); - - // intentionally removed "break" from switch since start of - // month/year/etc should also reset the following periods - switch (period) { - case 'year': - date.setMonth(0); - /* falls through */ - case 'month': - date.setDate(1); - /* falls through */ - case 'week': - case 'day': - date.setHours(0); - /* falls through */ - case 'hour': - date.setMinutes(0); - /* falls through */ - case 'minute': - date.setSeconds(0); - /* falls through */ - case 'second': - date.setMilliseconds(0); - break; - default: - throw new Error('"'+ period +'" is not a valid period'); - } - - // week is the only case that should reset the weekDay and maybe even - // overflow to previous month - if (period === 'week') { - var weekDay = date.getDay(); - var baseDate = date.getDate(); - if (weekDay) { - if (weekDay >= baseDate) { - //start of the week is on previous month - date.setDate(0); - } - date.setDate(date.getDate() - date.getDay()); - } - } - - return date; - } - - return startOf; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/strftime.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/strftime.js deleted file mode 100644 index dd782505..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/strftime.js +++ /dev/null @@ -1,113 +0,0 @@ -define(['../number/pad', './i18n_', './dayOfTheYear', './timezoneOffset', './timezoneAbbr', './weekOfTheYear'], function (pad, i18n, dayOfTheYear, timezoneOffset, timezoneAbbr, weekOfTheYear) { - - var _combinations = { - 'D': '%m/%d/%y', - 'F': '%Y-%m-%d', - 'r': '%I:%M:%S %p', - 'R': '%H:%M', - 'T': '%H:%M:%S', - 'x': 'locale', - 'X': 'locale', - 'c': 'locale' - }; - - - /** - * format date based on strftime format - */ - function strftime(date, format, localeData){ - localeData = localeData || i18n; - var reToken = /%([a-z%])/gi; - - function makeIterator(fn) { - return function(match, token){ - return fn(date, token, localeData); - }; - } - - return format - .replace(reToken, makeIterator(expandCombinations)) - .replace(reToken, makeIterator(convertToken)); - } - - - function expandCombinations(date, token, l10n){ - if (token in _combinations) { - var expanded = _combinations[token]; - return expanded === 'locale'? l10n[token] : expanded; - } else { - return '%'+ token; - } - } - - - function convertToken(date, token, l10n){ - switch (token){ - case 'a': - return l10n.days_abbr[date.getDay()]; - case 'A': - return l10n.days[date.getDay()]; - case 'h': - case 'b': - return l10n.months_abbr[date.getMonth()]; - case 'B': - return l10n.months[date.getMonth()]; - case 'C': - return pad(Math.floor(date.getFullYear() / 100), 2); - case 'd': - return pad(date.getDate(), 2); - case 'e': - return pad(date.getDate(), 2, ' '); - case 'H': - return pad(date.getHours(), 2); - case 'I': - return pad(date.getHours() % 12, 2); - case 'j': - return pad(dayOfTheYear(date), 3); - case 'L': - return pad(date.getMilliseconds(), 3); - case 'm': - return pad(date.getMonth() + 1, 2); - case 'M': - return pad(date.getMinutes(), 2); - case 'n': - return '\n'; - case 'p': - return date.getHours() >= 12? l10n.pm : l10n.am; - case 'P': - return convertToken(date, 'p', l10n).toLowerCase(); - case 's': - return date.getTime() / 1000; - case 'S': - return pad(date.getSeconds(), 2); - case 't': - return '\t'; - case 'u': - var day = date.getDay(); - return day === 0? 7 : day; - case 'U': - return pad(weekOfTheYear(date), 2); - case 'w': - return date.getDay(); - case 'W': - return pad(weekOfTheYear(date, 1), 2); - case 'y': - return pad(date.getFullYear() % 100, 2); - case 'Y': - return pad(date.getFullYear(), 4); - case 'z': - return timezoneOffset(date); - case 'Z': - return timezoneAbbr(date); - case '%': - return '%'; - default: - // keep unrecognized tokens - return '%'+ token; - } - } - - - return strftime; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/timezoneAbbr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/timezoneAbbr.js deleted file mode 100644 index 225a6856..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/timezoneAbbr.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./timezoneOffset'], function(timezoneOffset) { - - /** - * Abbreviated time zone name or similar information. - */ - function timezoneAbbr(date){ - // Date.toString gives different results depending on the - // browser/system so we fallback to timezone offset - // chrome: 'Mon Apr 08 2013 09:02:04 GMT-0300 (BRT)' - // IE: 'Mon Apr 8 09:02:04 UTC-0300 2013' - var tz = /\(([A-Z]{3,4})\)/.exec(date.toString()); - return tz? tz[1] : timezoneOffset(date); - } - - return timezoneAbbr; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/timezoneOffset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/timezoneOffset.js deleted file mode 100644 index ca06705d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/timezoneOffset.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../number/pad'], function (pad) { - - /** - * time zone as hour and minute offset from UTC (e.g. +0900) - */ - function timezoneOffset(date){ - var offset = date.getTimezoneOffset(); - var abs = Math.abs(offset); - var h = pad(Math.floor(abs / 60), 2); - var m = pad(abs % 60, 2); - return (offset > 0? '-' : '+') + h + m; - } - - return timezoneOffset; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/totalDaysInMonth.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/totalDaysInMonth.js deleted file mode 100644 index 98f7e9d1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/totalDaysInMonth.js +++ /dev/null @@ -1,24 +0,0 @@ -define(['../lang/isDate', './isLeapYear'], function (isDate, isLeapYear) { - - var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - - /** - * returns the total amount of days in the month (considering leap years) - */ - function totalDaysInMonth(fullYear, monthIndex){ - if (isDate(fullYear)) { - var date = fullYear; - year = date.getFullYear(); - monthIndex = date.getMonth(); - } - - if (monthIndex === 1 && isLeapYear(fullYear)) { - return 29; - } else { - return DAYS_IN_MONTH[monthIndex]; - } - } - - return totalDaysInMonth; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/totalDaysInYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/totalDaysInYear.js deleted file mode 100644 index e9036b42..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/totalDaysInYear.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./isLeapYear'], function (isLeapYear) { - - /** - * return the amount of days in the year following the gregorian calendar - * and leap years - */ - function totalDaysInYear(fullYear){ - return isLeapYear(fullYear)? 366 : 365; - } - - return totalDaysInYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/weekOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/weekOfTheYear.js deleted file mode 100644 index 8dabc458..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/date/weekOfTheYear.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./dayOfTheYear'], function (dayOfTheYear) { - - /** - * Return the week of the year based on given firstDayOfWeek - */ - function weekOfTheYear(date, firstDayOfWeek){ - firstDayOfWeek = firstDayOfWeek == null? 0 : firstDayOfWeek; - var doy = dayOfTheYear(date); - var dow = (7 + date.getDay() - firstDayOfWeek) % 7; - var relativeWeekDay = 6 - firstDayOfWeek - dow; - return Math.floor((doy + relativeWeekDay) / 7); - } - - return weekOfTheYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function.js deleted file mode 100644 index 71307246..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'bind' : require('./function/bind'), - 'compose' : require('./function/compose'), - 'debounce' : require('./function/debounce'), - 'func' : require('./function/func'), - 'makeIterator_' : require('./function/makeIterator_'), - 'partial' : require('./function/partial'), - 'prop' : require('./function/prop'), - 'series' : require('./function/series'), - 'throttle' : require('./function/throttle'), - 'timeout' : require('./function/timeout'), - 'times' : require('./function/times') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/bind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/bind.js deleted file mode 100644 index 09e5e20a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/bind.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function(){ - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - * @param {Function} fn Function. - * @param {object} context Execution context. - * @param {rest} args Arguments (0...n arguments). - * @return {Function} Wrapped Function. - */ - function bind(fn, context, args){ - var argsArr = slice(arguments, 2); //curried args - return function(){ - return fn.apply(context, argsArr.concat(slice(arguments))); - }; - } - - return bind; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/compose.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/compose.js deleted file mode 100644 index d8b228fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/compose.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Returns a function that composes multiple functions, passing results to - * each other. - */ - function compose() { - var fns = arguments; - return function(arg){ - // only cares about the first argument since the chain can only - // deal with a single return value anyway. It should start from - // the last fn. - var n = fns.length; - while (n--) { - arg = fns[n].call(this, arg); - } - return arg; - }; - } - - return compose; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/debounce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/debounce.js deleted file mode 100644 index 8c5fd47f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/debounce.js +++ /dev/null @@ -1,32 +0,0 @@ -define(function () { - - /** - * Debounce callback execution - */ - function debounce(fn, threshold, isAsap){ - var timeout, result; - function debounced(){ - var args = arguments, context = this; - function delayed(){ - if (! isAsap) { - result = fn.apply(context, args); - } - timeout = null; - } - if (timeout) { - clearTimeout(timeout); - } else if (isAsap) { - result = fn.apply(context, args); - } - timeout = setTimeout(delayed, threshold); - return result; - } - debounced.cancel = function(){ - clearTimeout(timeout); - }; - return debounced; - } - - return debounce; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/func.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/func.js deleted file mode 100644 index b920e00e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/func.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Returns a function that call a method on the passed object - */ - function func(name){ - return function(obj){ - return obj[name](); - }; - } - - return func; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/makeIterator_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/makeIterator_.js deleted file mode 100644 index c498e131..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/makeIterator_.js +++ /dev/null @@ -1,30 +0,0 @@ -define(['./prop', '../object/deepMatches'], function(prop, deepMatches) { - - /** - * Converts argument into a valid iterator. - * Used internally on most array/object/collection methods that receives a - * callback/iterator providing a shortcut syntax. - */ - function makeIterator(src, thisObj){ - switch(typeof src) { - case 'function': - // function is the first to improve perf (most common case) - return (typeof thisObj !== 'undefined')? function(val, i, arr){ - return src.call(thisObj, val, i, arr); - } : src; - case 'object': - // typeof null == "object" - return (src != null)? function(val){ - return deepMatches(val, src); - } : src; - case 'string': - case 'number': - return prop(src); - default: - return src; - } - } - - return makeIterator; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/partial.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/partial.js deleted file mode 100644 index ad730746..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/partial.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function () { - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Creates a partially applied function. - */ - function partial(fn, var_args){ - var argsArr = slice(arguments, 1); //curried args - return function(){ - return fn.apply(this, argsArr.concat(slice(arguments))); - }; - } - - return partial; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/prop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/prop.js deleted file mode 100644 index c9df78ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/prop.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Returns a function that gets a property of the passed object - */ - function prop(name){ - return function(obj){ - return obj[name]; - }; - } - - return prop; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/series.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/series.js deleted file mode 100644 index c8856a27..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/series.js +++ /dev/null @@ -1,22 +0,0 @@ -define(function () { - - /** - * Returns a function that will execute a list of functions in sequence - * passing the same arguments to each one. (useful for batch processing - * items during a forEach loop) - */ - function series(){ - var fns = arguments; - return function(){ - var i = 0, - n = fns.length; - while (i < n) { - fns[i].apply(this, arguments); - i += 1; - } - }; - } - - return series; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/throttle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/throttle.js deleted file mode 100644 index 1885fc6a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/throttle.js +++ /dev/null @@ -1,35 +0,0 @@ -define(['../time/now'], function (now) { - - /** - */ - function throttle(fn, delay){ - var context, timeout, result, args, - cur, diff, prev = 0; - function delayed(){ - prev = now(); - timeout = null; - result = fn.apply(context, args); - } - function throttled(){ - context = this; - args = arguments; - cur = now(); - diff = delay - (cur - prev); - if (diff <= 0) { - clearTimeout(timeout); - prev = cur; - result = fn.apply(context, args); - } else if (! timeout) { - timeout = setTimeout(delayed, diff); - } - return result; - } - throttled.cancel = function(){ - clearTimeout(timeout); - }; - return throttled; - } - - return throttle; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/timeout.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/timeout.js deleted file mode 100644 index 15388bdd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/timeout.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function () { - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Delays the call of a function within a given context. - */ - function timeout(fn, millis, context){ - - var args = slice(arguments, 3); - - return setTimeout(function() { - fn.apply(context, args); - }, millis); - } - - return timeout; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/times.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/times.js deleted file mode 100644 index ec10caeb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/function/times.js +++ /dev/null @@ -1,17 +0,0 @@ -define(function () { - - /** - * Iterates over a callback a set amount of times - */ - function times(n, callback, thisObj){ - var i = -1; - while (++i < n) { - if ( callback.call(thisObj, i) === false ) { - break; - } - } - } - - return times; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/index.js deleted file mode 100644 index 3098aff6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/**@license - * mout v0.7.1 | http://moutjs.com | MIT license - */ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'VERSION' : '0.7.1', - 'array' : require('./array'), - 'collection' : require('./collection'), - 'date' : require('./date'), - 'function' : require('./function'), - 'lang' : require('./lang'), - 'math' : require('./math'), - 'number' : require('./number'), - 'object' : require('./object'), - 'queryString' : require('./queryString'), - 'random' : require('./random'), - 'string' : require('./string'), - 'time' : require('./time'), - 'fn' : require('./function') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang.js deleted file mode 100644 index 434916a7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang.js +++ /dev/null @@ -1,37 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'clone' : require('./lang/clone'), - 'createObject' : require('./lang/createObject'), - 'ctorApply' : require('./lang/ctorApply'), - 'deepClone' : require('./lang/deepClone'), - 'defaults' : require('./lang/defaults'), - 'inheritPrototype' : require('./lang/inheritPrototype'), - 'is' : require('./lang/is'), - 'isArguments' : require('./lang/isArguments'), - 'isArray' : require('./lang/isArray'), - 'isBoolean' : require('./lang/isBoolean'), - 'isDate' : require('./lang/isDate'), - 'isEmpty' : require('./lang/isEmpty'), - 'isFinite' : require('./lang/isFinite'), - 'isFunction' : require('./lang/isFunction'), - 'isInteger' : require('./lang/isInteger'), - 'isKind' : require('./lang/isKind'), - 'isNaN' : require('./lang/isNaN'), - 'isNull' : require('./lang/isNull'), - 'isNumber' : require('./lang/isNumber'), - 'isObject' : require('./lang/isObject'), - 'isPlainObject' : require('./lang/isPlainObject'), - 'isRegExp' : require('./lang/isRegExp'), - 'isString' : require('./lang/isString'), - 'isUndefined' : require('./lang/isUndefined'), - 'isnt' : require('./lang/isnt'), - 'kindOf' : require('./lang/kindOf'), - 'toArray' : require('./lang/toArray'), - 'toNumber' : require('./lang/toNumber'), - 'toString' : require('./lang/toString') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/clone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/clone.js deleted file mode 100644 index 468489a1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/clone.js +++ /dev/null @@ -1,47 +0,0 @@ -define(['./kindOf', './isPlainObject', '../object/mixIn'], function (kindOf, isPlainObject, mixIn) { - - /** - * Clone native types. - */ - function clone(val){ - switch (kindOf(val)) { - case 'Object': - return cloneObject(val); - case 'Array': - return cloneArray(val); - case 'RegExp': - return cloneRegExp(val); - case 'Date': - return cloneDate(val); - default: - return val; - } - } - - function cloneObject(source) { - if (isPlainObject(source)) { - return mixIn({}, source); - } else { - return source; - } - } - - function cloneRegExp(r) { - var flags = ''; - flags += r.multiline ? 'm' : ''; - flags += r.global ? 'g' : ''; - flags += r.ignorecase ? 'i' : ''; - return new RegExp(r.source, flags); - } - - function cloneDate(date) { - return new Date(+date); - } - - function cloneArray(arr) { - return arr.slice(); - } - - return clone; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/createObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/createObject.js deleted file mode 100644 index f7661500..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/createObject.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../object/mixIn'], function(mixIn){ - - /** - * Create Object using prototypal inheritance and setting custom properties. - * - Mix between Douglas Crockford Prototypal Inheritance <http://javascript.crockford.com/prototypal.html> and the EcmaScript 5 `Object.create()` method. - * @param {object} parent Parent Object. - * @param {object} [props] Object properties. - * @return {object} Created object. - */ - function createObject(parent, props){ - function F(){} - F.prototype = parent; - return mixIn(new F(), props); - - } - return createObject; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/ctorApply.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/ctorApply.js deleted file mode 100644 index a9ac1c54..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/ctorApply.js +++ /dev/null @@ -1,17 +0,0 @@ -define(function () { - - function F(){} - - /** - * Do fn.apply on a constructor. - */ - function ctorApply(ctor, args) { - F.prototype = ctor.prototype; - var instance = new F(); - ctor.apply(instance, args); - return instance; - } - - return ctorApply; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/deepClone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/deepClone.js deleted file mode 100644 index d45c10aa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/deepClone.js +++ /dev/null @@ -1,45 +0,0 @@ -define(['./clone', '../object/forOwn', './kindOf', './isPlainObject'], function (clone, forOwn, kindOf, isPlainObject) { - - /** - * Recursively clone native types. - */ - function deepClone(val, instanceClone) { - switch ( kindOf(val) ) { - case 'Object': - return cloneObject(val, instanceClone); - case 'Array': - return cloneArray(val, instanceClone); - default: - return clone(val); - } - } - - function cloneObject(source, instanceClone) { - if (isPlainObject(source)) { - var out = {}; - forOwn(source, function(val, key) { - this[key] = deepClone(val, instanceClone); - }, out); - return out; - } else if (instanceClone) { - return instanceClone(source); - } else { - return source; - } - } - - function cloneArray(arr, instanceClone) { - var out = [], - i = -1, - n = arr.length, - val; - while (++i < n) { - out[i] = deepClone(arr[i], instanceClone); - } - return out; - } - - return deepClone; - -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/defaults.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/defaults.js deleted file mode 100644 index 5156b1bb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/defaults.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./toArray', '../array/find'], function (toArray, find) { - - /** - * Return first non void argument - */ - function defaults(var_args){ - return find(toArray(arguments), nonVoid); - } - - function nonVoid(val){ - return val != null; - } - - return defaults; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/inheritPrototype.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/inheritPrototype.js deleted file mode 100644 index d47d0fee..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/inheritPrototype.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./createObject'], function(createObject){ - - /** - * Inherit prototype from another Object. - * - inspired by Nicholas Zackas <http://nczonline.net> Solution - * @param {object} child Child object - * @param {object} parent Parent Object - */ - function inheritPrototype(child, parent){ - var p = createObject(parent.prototype); - p.constructor = child; - child.prototype = p; - child.super_ = parent; - } - - return inheritPrototype; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/is.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/is.js deleted file mode 100644 index 261a2077..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/is.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Check if both arguments are egal. - */ - function is(x, y){ - // implementation borrowed from harmony:egal spec - if (x === y) { - // 0 === -0, but they are not identical - return x !== 0 || 1 / x === 1 / y; - } - - // NaN !== NaN, but they are identical. - // NaNs are the only non-reflexive value, i.e., if x !== x, - // then x is a NaN. - // isNaN is broken: it converts its argument to number, so - // isNaN("foo") => true - return x !== x && y !== y; - } - - return is; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isArguments.js deleted file mode 100644 index f889ee8e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isArguments.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./isKind'], function (isKind) { - - /** - */ - var isArgs = isKind(arguments, 'Arguments')? - function(val){ - return isKind(val, 'Arguments'); - } : - function(val){ - // Arguments is an Object on IE7 - return !!(val && Object.prototype.hasOwnProperty.call(val, 'callee')); - }; - - return isArgs; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isArray.js deleted file mode 100644 index 886e2aa5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isArray.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - var isArray = Array.isArray || function (val) { - return isKind(val, 'Array'); - }; - return isArray; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isBoolean.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isBoolean.js deleted file mode 100644 index 1ca27a69..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isBoolean.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isBoolean(val) { - return isKind(val, 'Boolean'); - } - return isBoolean; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isDate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isDate.js deleted file mode 100644 index 2708d676..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isDate.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isDate(val) { - return isKind(val, 'Date'); - } - return isDate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isEmpty.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isEmpty.js deleted file mode 100644 index 4cc3d2db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isEmpty.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../object/forOwn', './isArray'], function (forOwn, isArray) { - - function isEmpty(val){ - if (val == null) { - // typeof null == 'object' so we check it first - return false; - } else if ( typeof val === 'string' || isArray(val) ) { - return !val.length; - } else if ( typeof val === 'object' || typeof val === 'function' ) { - var result = true; - forOwn(val, function(){ - result = false; - return false; // break loop - }); - return result; - } else { - return false; - } - } - - return isEmpty; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isFinite.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isFinite.js deleted file mode 100644 index 5a982f4b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isFinite.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - var global = this; - - /** - * Check if value is finite - */ - function isFinite(val){ - var is = false; - if (typeof val === 'string' && val !== '') { - is = global.isFinite( parseFloat(val) ); - } else if (isNumber(val)){ - // need to use isNumber because of Number constructor - is = global.isFinite( val ); - } - return is; - } - - return isFinite; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isFunction.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isFunction.js deleted file mode 100644 index ff5df7f0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isFunction.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isFunction(val) { - return isKind(val, 'Function'); - } - return isFunction; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isInteger.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isInteger.js deleted file mode 100644 index 1931f516..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - /** - * Check if value is an integer - */ - function isInteger(val){ - return isNumber(val) && (val % 1 === 0); - } - - return isInteger; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isKind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isKind.js deleted file mode 100644 index 6937a12f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isKind.js +++ /dev/null @@ -1,9 +0,0 @@ -define(['./kindOf'], function (kindOf) { - /** - * Check if value is from a specific "kind". - */ - function isKind(val, kind){ - return kindOf(val) === kind; - } - return isKind; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isNaN.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isNaN.js deleted file mode 100644 index b25e8c36..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isNaN.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - /** - * Check if value is NaN for realz - */ - function isNaN(val){ - // based on the fact that NaN !== NaN - // need to check if it's a number to avoid conflicts with host objects - // also need to coerce ToNumber to avoid edge case `new Number(NaN)` - // jshint eqeqeq: false - return !isNumber(val) || val != +val; - } - - return isNaN; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isNull.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isNull.js deleted file mode 100644 index 506e05ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isNull.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function () { - /** - */ - function isNull(val){ - return val === null; - } - return isNull; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isNumber.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isNumber.js deleted file mode 100644 index 9a832c5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isNumber.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isNumber(val) { - return isKind(val, 'Number'); - } - return isNumber; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isObject.js deleted file mode 100644 index 0befb063..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isObject.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isObject(val) { - return isKind(val, 'Object'); - } - return isObject; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isPlainObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isPlainObject.js deleted file mode 100644 index 406a2797..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isPlainObject.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * Checks if the value is created by the `Object` constructor. - */ - function isPlainObject(value) { - return (!!value && typeof value === 'object' && - value.constructor === Object); - } - - return isPlainObject; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isRegExp.js deleted file mode 100644 index d78a03da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isRegExp.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isRegExp(val) { - return isKind(val, 'RegExp'); - } - return isRegExp; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isString.js deleted file mode 100644 index 8a42fe01..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isString.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isString(val) { - return isKind(val, 'String'); - } - return isString; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isUndefined.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isUndefined.js deleted file mode 100644 index c57b28eb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isUndefined.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function () { - var UNDEF; - - /** - */ - function isUndef(val){ - return val === UNDEF; - } - return isUndef; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isnt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isnt.js deleted file mode 100644 index d4336222..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/isnt.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./is'], function (is) { - - /** - * Check if both values are not identical/egal - */ - function isnt(x, y){ - return !is(x, y); - } - - return isnt; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/kindOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/kindOf.js deleted file mode 100644 index 97d21d15..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/kindOf.js +++ /dev/null @@ -1,20 +0,0 @@ -define(function () { - - var _rKind = /^\[object (.*)\]$/, - _toString = Object.prototype.toString, - UNDEF; - - /** - * Gets the "kind" of value. (e.g. "String", "Number", etc) - */ - function kindOf(val) { - if (val === null) { - return 'Null'; - } else if (val === UNDEF) { - return 'Undefined'; - } else { - return _rKind.exec( _toString.call(val) )[1]; - } - } - return kindOf; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/toArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/toArray.js deleted file mode 100644 index 552916f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/toArray.js +++ /dev/null @@ -1,31 +0,0 @@ -define(['./kindOf'], function (kindOf) { - - var _win = this; - - /** - * Convert array-like object into array - */ - function toArray(val){ - var ret = [], - kind = kindOf(val), - n; - - if (val != null) { - if ( val.length == null || kind === 'String' || kind === 'Function' || kind === 'RegExp' || val === _win ) { - //string, regexp, function have .length but user probably just want - //to wrap value into an array.. - ret[ret.length] = val; - } else { - //window returns true on isObject in IE7 and may have length - //property. `typeof NodeList` returns `function` on Safari so - //we can't use it (#58) - n = val.length; - while (n--) { - ret[n] = val[n]; - } - } - } - return ret; - } - return toArray; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/toNumber.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/toNumber.js deleted file mode 100644 index 39767386..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/toNumber.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./isArray'], function (isArray) { - - /** - * covert value into number if numeric - */ - function toNumber(val){ - // numberic values should come first because of -0 - if (typeof val === 'number') return val; - // we want all falsy values (besides -0) to return zero to avoid - // headaches - if (!val) return 0; - if (typeof val === 'string') return parseFloat(val); - // arrays are edge cases. `Number([4]) === 4` - if (isArray(val)) return NaN; - return Number(val); - } - - return toNumber; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/toString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/toString.js deleted file mode 100644 index c28b89af..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/lang/toString.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * Typecast a value to a String, using an empty string value for null or - * undefined. - */ - function toString(val){ - return val == null ? '' : val.toString(); - } - - return toString; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math.js deleted file mode 100644 index e2ba8705..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'ceil' : require('./math/ceil'), - 'clamp' : require('./math/clamp'), - 'countSteps' : require('./math/countSteps'), - 'floor' : require('./math/floor'), - 'inRange' : require('./math/inRange'), - 'isNear' : require('./math/isNear'), - 'lerp' : require('./math/lerp'), - 'loop' : require('./math/loop'), - 'map' : require('./math/map'), - 'norm' : require('./math/norm'), - 'round' : require('./math/round') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/ceil.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/ceil.js deleted file mode 100644 index d73b0581..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/ceil.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Round value up with a custom radix. - */ - function ceil(val, step){ - step = Math.abs(step || 1); - return Math.ceil(val / step) * step; - } - - return ceil; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/clamp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/clamp.js deleted file mode 100644 index fb5a1484..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/clamp.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Clamps value inside range. - */ - function clamp(val, min, max){ - return val < min? min : (val > max? max : val); - } - return clamp; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/countSteps.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/countSteps.js deleted file mode 100644 index 0ecb32f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/countSteps.js +++ /dev/null @@ -1,16 +0,0 @@ -define(function(){ - /** - * Count number of full steps. - */ - function countSteps(val, step, overflow){ - val = Math.floor(val / step); - - if (overflow) { - return val % overflow; - } - - return val; - } - - return countSteps; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/floor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/floor.js deleted file mode 100644 index 8a4456b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/floor.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Floor value to full steps. - */ - function floor(val, step){ - step = Math.abs(step || 1); - return Math.floor(val / step) * step; - } - return floor; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/inRange.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/inRange.js deleted file mode 100644 index 0c890536..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/inRange.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Checks if value is inside the range. - */ - function inRange(val, min, max, threshold){ - threshold = threshold || 0; - return (val + threshold >= min && val - threshold <= max); - } - - return inRange; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/isNear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/isNear.js deleted file mode 100644 index b308a0b0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/isNear.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Check if value is close to target. - */ - function isNear(val, target, threshold){ - return (Math.abs(val - target) <= threshold); - } - return isNear; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/lerp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/lerp.js deleted file mode 100644 index 26b99d04..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/lerp.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Linear interpolation. - * IMPORTANT:will return `Infinity` if numbers overflow Number.MAX_VALUE - */ - function lerp(ratio, start, end){ - return start + (end - start) * ratio; - } - - return lerp; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/loop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/loop.js deleted file mode 100644 index c735ecf6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/loop.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Loops value inside range. - */ - function loop(val, min, max){ - return val < min? max : (val > max? min : val); - } - - return loop; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/map.js deleted file mode 100644 index bf7dc5d5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/map.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['./lerp', './norm'], function(lerp, norm){ - /** - * Maps a number from one scale to another. - * @example map(3, 0, 4, -1, 1) -> 0.5 - */ - function map(val, min1, max1, min2, max2){ - return lerp( norm(val, min1, max1), min2, max2 ); - } - return map; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/norm.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/norm.js deleted file mode 100644 index fccae20e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/norm.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Gets normalized ratio of value inside range. - */ - function norm(val, min, max){ - return (val - min) / (max - min); - } - return norm; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/round.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/round.js deleted file mode 100644 index b43e4ac2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/math/round.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - /** - * Round number to a specific radix - */ - function round(value, radix){ - radix = radix || 1; // default round 1 - return Math.round(value / radix) * radix; - } - - return round; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number.js deleted file mode 100644 index cb52fc75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'MAX_INT' : require('./number/MAX_INT'), - 'MAX_UINT' : require('./number/MAX_UINT'), - 'MIN_INT' : require('./number/MIN_INT'), - 'abbreviate' : require('./number/abbreviate'), - 'currencyFormat' : require('./number/currencyFormat'), - 'enforcePrecision' : require('./number/enforcePrecision'), - 'pad' : require('./number/pad'), - 'rol' : require('./number/rol'), - 'ror' : require('./number/ror'), - 'sign' : require('./number/sign'), - 'toInt' : require('./number/toInt'), - 'toUInt' : require('./number/toUInt'), - 'toUInt31' : require('./number/toUInt31') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/MAX_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/MAX_INT.js deleted file mode 100644 index 23a6e1a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/MAX_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit signed integer value. (2^31 - 1) - */ -define(function(){ - return 2147483647; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/MAX_UINT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/MAX_UINT.js deleted file mode 100644 index a035096c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/MAX_UINT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit unsigned integet value (2^32 - 1) - */ -define(function(){ - return 4294967295; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/MIN_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/MIN_INT.js deleted file mode 100644 index 9b3e9781..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/MIN_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Minimum 32-bit signed integer value (-2^31). - */ -define(function(){ - return -2147483648; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/abbreviate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/abbreviate.js deleted file mode 100644 index 7e7405ad..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/abbreviate.js +++ /dev/null @@ -1,35 +0,0 @@ -define(['./enforcePrecision'], function (enforcePrecision) { - - var _defaultDict = { - thousand : 'K', - million : 'M', - billion : 'B' - }; - - /** - * Abbreviate number if bigger than 1000. (eg: 2.5K, 17.5M, 3.4B, ...) - */ - function abbreviateNumber(val, nDecimals, dict){ - nDecimals = nDecimals != null? nDecimals : 1; - dict = dict || _defaultDict; - val = enforcePrecision(val, nDecimals); - - var str, mod; - - if (val < 1000000) { - mod = enforcePrecision(val / 1000, nDecimals); - // might overflow to next scale during rounding - str = mod < 1000? mod + dict.thousand : 1 + dict.million; - } else if (val < 1000000000) { - mod = enforcePrecision(val / 1000000, nDecimals); - str = mod < 1000? mod + dict.million : 1 + dict.billion; - } else { - str = enforcePrecision(val / 1000000000, nDecimals) + dict.billion; - } - - return str; - } - - return abbreviateNumber; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/currencyFormat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/currencyFormat.js deleted file mode 100644 index 1e5fecba..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/currencyFormat.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../lang/toNumber'], function (toNumber) { - - /** - * Converts number into currency format - */ - function currencyFormat(val, nDecimalDigits, decimalSeparator, thousandsSeparator) { - val = toNumber(val); - nDecimalDigits = nDecimalDigits == null? 2 : nDecimalDigits; - decimalSeparator = decimalSeparator == null? '.' : decimalSeparator; - thousandsSeparator = thousandsSeparator == null? ',' : thousandsSeparator; - - //can't use enforce precision since it returns a number and we are - //doing a RegExp over the string - var fixed = val.toFixed(nDecimalDigits), - //separate begin [$1], middle [$2] and decimal digits [$4] - parts = new RegExp('^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{'+ nDecimalDigits +'}))?$').exec( fixed ); - - if(parts){ //val >= 1000 || val <= -1000 - return parts[1] + parts[2].replace(/\d{3}/g, thousandsSeparator + '$&') + (parts[4] ? decimalSeparator + parts[4] : ''); - }else{ - return fixed.replace('.', decimalSeparator); - } - } - - return currencyFormat; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/enforcePrecision.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/enforcePrecision.js deleted file mode 100644 index 1e65e505..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/enforcePrecision.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toNumber'], function(toNumber){ - /** - * Enforce a specific amount of decimal digits and also fix floating - * point rounding issues. - */ - function enforcePrecision(val, nDecimalDigits){ - val = toNumber(val); - var pow = Math.pow(10, nDecimalDigits); - return +(Math.round(val * pow) / pow).toFixed(nDecimalDigits); - } - return enforcePrecision; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/pad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/pad.js deleted file mode 100644 index 194a3df3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/pad.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../string/lpad', '../lang/toNumber'], function(lpad, toNumber){ - - /** - * Add padding zeros if n.length < minLength. - */ - function pad(n, minLength, char){ - n = toNumber(n); - return lpad(''+ n, minLength, char || '0'); - } - - return pad; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/rol.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/rol.js deleted file mode 100644 index a148f444..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/rol.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Bitwise circular shift left - * http://en.wikipedia.org/wiki/Circular_shift - */ - function rol(val, shift){ - return (val << shift) | (val >> (32 - shift)); - } - return rol; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/ror.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/ror.js deleted file mode 100644 index b5c66f92..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/ror.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Bitwise circular shift right - * http://en.wikipedia.org/wiki/Circular_shift - */ - function ror(val, shift){ - return (val >> shift) | (val << (32 - shift)); - } - return ror; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/sign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/sign.js deleted file mode 100644 index b387c957..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/sign.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../lang/toNumber'], function (toNumber) { - - /** - * Get sign of the value. - */ - function sign(val) { - var num = toNumber(val); - if (num === 0) return num; // +0 and +0 === 0 - if (isNaN(num)) return num; // NaN - return num < 0? -1 : 1; - } - - return sign; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/toInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/toInt.js deleted file mode 100644 index 5ea59e51..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/toInt.js +++ /dev/null @@ -1,17 +0,0 @@ -define(function(){ - - /** - * "Convert" value into an 32-bit integer. - * Works like `Math.floor` if val > 0 and `Math.ceil` if val < 0. - * IMPORTANT: val will wrap at 2^31 and -2^31. - * Perf tests: http://jsperf.com/vs-vs-parseint-bitwise-operators/7 - */ - function toInt(val){ - // we do not use lang/toNumber because of perf and also because it - // doesn't break the functionality - return ~~val; - } - - return toInt; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/toUInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/toUInt.js deleted file mode 100644 index 36bbdadd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/toUInt.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function () { - - /** - * "Convert" value into a 32-bit unsigned integer. - * IMPORTANT: Value will wrap at 2^32. - */ - function toUInt(val){ - // we do not use lang/toNumber because of perf and also because it - // doesn't break the functionality - return val >>> 0; - } - - return toUInt; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/toUInt31.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/toUInt31.js deleted file mode 100644 index c1c4affd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/number/toUInt31.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./MAX_INT'], function(MAX_INT){ - - /** - * "Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - * IMPORTANT: value wil wrap at 2^31, if negative will return 0. - */ - function toUInt31(val){ - // we do not use lang/toNumber because of perf and also because it - // doesn't break the functionality - return (val <= 0)? 0 : (val > MAX_INT? ~~(val % (MAX_INT + 1)) : ~~val); - } - - return toUInt31; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object.js deleted file mode 100644 index 343e7826..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object.js +++ /dev/null @@ -1,42 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'bindAll' : require('./object/bindAll'), - 'contains' : require('./object/contains'), - 'deepEquals' : require('./object/deepEquals'), - 'deepFillIn' : require('./object/deepFillIn'), - 'deepMatches' : require('./object/deepMatches'), - 'deepMixIn' : require('./object/deepMixIn'), - 'equals' : require('./object/equals'), - 'every' : require('./object/every'), - 'fillIn' : require('./object/fillIn'), - 'filter' : require('./object/filter'), - 'find' : require('./object/find'), - 'forIn' : require('./object/forIn'), - 'forOwn' : require('./object/forOwn'), - 'functions' : require('./object/functions'), - 'get' : require('./object/get'), - 'has' : require('./object/has'), - 'hasOwn' : require('./object/hasOwn'), - 'keys' : require('./object/keys'), - 'map' : require('./object/map'), - 'matches' : require('./object/matches'), - 'max' : require('./object/max'), - 'merge' : require('./object/merge'), - 'min' : require('./object/min'), - 'mixIn' : require('./object/mixIn'), - 'namespace' : require('./object/namespace'), - 'pick' : require('./object/pick'), - 'pluck' : require('./object/pluck'), - 'reduce' : require('./object/reduce'), - 'reject' : require('./object/reject'), - 'set' : require('./object/set'), - 'size' : require('./object/size'), - 'some' : require('./object/some'), - 'unset' : require('./object/unset'), - 'values' : require('./object/values') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/bindAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/bindAll.js deleted file mode 100644 index b131ed15..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/bindAll.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./functions', '../function/bind', '../array/forEach'], function (functions, bind, forEach) { - - /** - * Binds methods of the object to be run in it's own context. - */ - function bindAll(obj, rest_methodNames){ - var keys = arguments.length > 1? - Array.prototype.slice.call(arguments, 1) : functions(obj); - forEach(keys, function(key){ - obj[key] = bind(obj[key], obj); - }); - } - - return bindAll; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/contains.js deleted file mode 100644 index 297e8986..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/contains.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./some'], function (some) { - - /** - * Check if object contains value - */ - function contains(obj, needle) { - return some(obj, function(val) { - return (val === needle); - }); - } - return contains; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepEquals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepEquals.js deleted file mode 100644 index 8b7d5d15..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepEquals.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['../lang/isObject', './equals'], function (isObject, equals) { - - function defaultCompare(a, b) { - return a === b; - } - - /** - * Recursively checks for same properties and values. - */ - function deepEquals(a, b, callback){ - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - function compare(a, b){ - return deepEquals(a, b, callback); - } - - return equals(a, b, compare); - } - - return deepEquals; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepFillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepFillIn.js deleted file mode 100644 index ee69c3d5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepFillIn.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['./forOwn', '../lang/isPlainObject'], function (forOwn, isPlainObject) { - - /** - * Deeply copy missing properties in the target from the defaults. - */ - function deepFillIn(target, defaults){ - var i = 0, - n = arguments.length, - obj; - - while(++i < n) { - obj = arguments[i]; - if (obj) { - // jshint loopfunc: true - forOwn(obj, function(newValue, key) { - var curValue = target[key]; - if (curValue == null) { - target[key] = newValue; - } else if (isPlainObject(curValue) && - isPlainObject(newValue)) { - deepFillIn(curValue, newValue); - } - }); - } - } - - return target; - } - - return deepFillIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepMatches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepMatches.js deleted file mode 100644 index 2eae6297..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepMatches.js +++ /dev/null @@ -1,54 +0,0 @@ -define(['./forOwn', '../lang/isArray'], function(forOwn, isArray) { - - function containsMatch(array, pattern) { - var i = -1, length = array.length; - while (++i < length) { - if (deepMatches(array[i], pattern)) { - return true; - } - } - - return false; - } - - function matchArray(target, pattern) { - var i = -1, patternLength = pattern.length; - while (++i < patternLength) { - if (!containsMatch(target, pattern[i])) { - return false; - } - } - - return true; - } - - function matchObject(target, pattern) { - var result = true; - forOwn(pattern, function(val, key) { - if (!deepMatches(target[key], val)) { - // Return false to break out of forOwn early - return (result = false); - } - }); - - return result; - } - - /** - * Recursively check if the objects match. - */ - function deepMatches(target, pattern){ - if (target && typeof target === 'object') { - if (isArray(target) && isArray(pattern)) { - return matchArray(target, pattern); - } else { - return matchObject(target, pattern); - } - } else { - return target === pattern; - } - } - - return deepMatches; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepMixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepMixIn.js deleted file mode 100644 index 1b4178ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/deepMixIn.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['./forOwn', '../lang/isPlainObject'], function (forOwn, isPlainObject) { - - /** - * Mixes objects into the target object, recursively mixing existing child - * objects. - */ - function deepMixIn(target, objects) { - var i = 0, - n = arguments.length, - obj; - - while(++i < n){ - obj = arguments[i]; - if (obj) { - forOwn(obj, copyProp, target); - } - } - - return target; - } - - function copyProp(val, key) { - var existing = this[key]; - if (isPlainObject(val) && isPlainObject(existing)) { - deepMixIn(existing, val); - } else { - this[key] = val; - } - } - - return deepMixIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/equals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/equals.js deleted file mode 100644 index 596cb952..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/equals.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['./hasOwn', './every', '../lang/isObject'], function(hasOwn, every, isObject) { - - function defaultCompare(a, b) { - return a === b; - } - - // Makes a function to compare the object values from the specified compare - // operation callback. - function makeCompare(callback) { - return function(value, key) { - return hasOwn(this, key) && callback(value, this[key]); - }; - } - - function checkProperties(value, key) { - return hasOwn(this, key); - } - - /** - * Checks if two objects have the same keys and values. - */ - function equals(a, b, callback) { - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - return (every(a, makeCompare(callback), b) && - every(b, checkProperties, a)); - } - - return equals; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/every.js deleted file mode 100644 index 52983a5e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/every.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Object every - */ - function every(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - forOwn(obj, function(val, key) { - // we consider any falsy values as "false" on purpose so shorthand - // syntax can be used to check property existence - if (!callback(val, key, obj)) { - result = false; - return false; // break - } - }); - return result; - } - - return every; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/fillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/fillIn.js deleted file mode 100644 index 0845d3c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/fillIn.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['../array/forEach', './forOwn'], function (forEach, forOwn) { - - /** - * Copy missing properties in the obj from the defaults. - */ - function fillIn(obj, var_defaults){ - forEach(Array.prototype.slice.call(arguments, 1), function(base){ - forOwn(base, function(val, key){ - if (obj[key] == null) { - obj[key] = val; - } - }); - }); - return obj; - } - - return fillIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/filter.js deleted file mode 100644 index f213b915..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/filter.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Creates a new object with all the properties where the callback returns - * true. - */ - function filterValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - output[key] = value; - } - }); - - return output; - } - return filterValues; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/find.js deleted file mode 100644 index 47e6b09d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/find.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./some', '../function/makeIterator_'], function(some, makeIterator) { - - /** - * Returns first item that matches criteria - */ - function find(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result; - some(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - result = value; - return true; //break - } - }); - return result; - } - - return find; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/forIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/forIn.js deleted file mode 100644 index 2058e9cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/forIn.js +++ /dev/null @@ -1,62 +0,0 @@ -define(function () { - - var _hasDontEnumBug, - _dontEnums; - - function checkDontEnum(){ - _dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - - _hasDontEnumBug = true; - - for (var key in {'toString': null}) { - _hasDontEnumBug = false; - } - } - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forIn(obj, fn, thisObj){ - var key, i = 0; - // no need to check if argument is a real object that way we can use - // it for arrays, functions, date, etc. - - //post-pone check till needed - if (_hasDontEnumBug == null) checkDontEnum(); - - for (key in obj) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - - if (_hasDontEnumBug) { - while (key = _dontEnums[i++]) { - // since we aren't using hasOwn check we need to make sure the - // property was overwritten - if (obj[key] !== Object.prototype[key]) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - } - } - } - - function exec(fn, obj, key, thisObj){ - return fn.call(thisObj, obj[key], key, obj); - } - - return forIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/forOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/forOwn.js deleted file mode 100644 index b40cbaf1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/forOwn.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./hasOwn', './forIn'], function (hasOwn, forIn) { - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forOwn(obj, fn, thisObj){ - forIn(obj, function(val, key){ - if (hasOwn(obj, key)) { - return fn.call(thisObj, obj[key], key, obj); - } - }); - } - - return forOwn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/functions.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/functions.js deleted file mode 100644 index 60fee3dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/functions.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./forIn'], function (forIn) { - - /** - * return a list of all enumerable properties that have function values - */ - function functions(obj){ - var keys = []; - forIn(obj, function(val, key){ - if (typeof val === 'function'){ - keys.push(key); - } - }); - return keys.sort(); - } - - return functions; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/get.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/get.js deleted file mode 100644 index b498153d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/get.js +++ /dev/null @@ -1,20 +0,0 @@ -define(function () { - - /** - * get "nested" object property - */ - function get(obj, prop){ - var parts = prop.split('.'), - last = parts.pop(); - - while (prop = parts.shift()) { - obj = obj[prop]; - if (typeof obj !== 'object' || !obj) return; - } - - return obj[last]; - } - - return get; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/has.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/has.js deleted file mode 100644 index cc29817f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/has.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./get'], function (get) { - - var UNDEF; - - /** - * Check if object has nested property. - */ - function has(obj, prop){ - return get(obj, prop) !== UNDEF; - } - - return has; - -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/hasOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/hasOwn.js deleted file mode 100644 index 5c53bcf2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/hasOwn.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - - /** - * Safer Object.hasOwnProperty - */ - function hasOwn(obj, prop){ - return Object.prototype.hasOwnProperty.call(obj, prop); - } - - return hasOwn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/keys.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/keys.js deleted file mode 100644 index ed7c4f91..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/keys.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object keys - */ - var keys = Object.keys || function (obj) { - var keys = []; - forOwn(obj, function(val, key){ - keys.push(key); - }); - return keys; - }; - - return keys; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/map.js deleted file mode 100644 index 2958f6b0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/map.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Creates a new object where all the values are the result of calling - * `callback`. - */ - function mapValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(val, key, obj) { - output[key] = callback(val, key, obj); - }); - - return output; - } - return mapValues; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/matches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/matches.js deleted file mode 100644 index 73ff427c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/matches.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * checks if a object contains all given properties/values - */ - function matches(target, props){ - // can't use "object/every" because of circular dependency - var result = true; - forOwn(props, function(val, key){ - if (target[key] !== val) { - // break loop at first difference - return (result = false); - } - }); - return result; - } - - return matches; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/max.js deleted file mode 100644 index ef311dcb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/max.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../array/max', './values'], function(arrMax, values) { - - /** - * Returns maximum value inside object. - */ - function max(obj, compareFn) { - return arrMax(values(obj), compareFn); - } - - return max; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/merge.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/merge.js deleted file mode 100644 index d7cfedec..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/merge.js +++ /dev/null @@ -1,38 +0,0 @@ -define(['./hasOwn', '../lang/deepClone', '../lang/isObject'], function (hasOwn, deepClone, isObject) { - - /** - * Deep merge objects. - */ - function merge() { - var i = 1, - key, val, obj, target; - - // make sure we don't modify source element and it's properties - // objects are passed by reference - target = deepClone( arguments[0] ); - - while (obj = arguments[i++]) { - for (key in obj) { - if ( ! hasOwn(obj, key) ) { - continue; - } - - val = obj[key]; - - if ( isObject(val) && isObject(target[key]) ){ - // inception, deep merge objects - target[key] = merge(target[key], val); - } else { - // make sure arrays, regexp, date, objects are cloned - target[key] = deepClone(val); - } - - } - } - - return target; - } - - return merge; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/min.js deleted file mode 100644 index 9fb4c1a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/min.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../array/min', './values'], function(arrMin, values) { - - /** - * Returns minimum value inside object. - */ - function min(obj, iterator) { - return arrMin(values(obj), iterator); - } - - return min; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/mixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/mixIn.js deleted file mode 100644 index 6210b7e7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/mixIn.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['./forOwn'], function(forOwn){ - - /** - * Combine properties from all the objects into first one. - * - This method affects target object in place, if you want to create a new Object pass an empty object as first param. - * @param {object} target Target Object - * @param {...object} objects Objects to be combined (0...n objects). - * @return {object} Target Object. - */ - function mixIn(target, objects){ - var i = 0, - n = arguments.length, - obj; - while(++i < n){ - obj = arguments[i]; - if (obj != null) { - forOwn(obj, copyProp, target); - } - } - return target; - } - - function copyProp(val, key){ - this[key] = val; - } - - return mixIn; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/namespace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/namespace.js deleted file mode 100644 index 7ed65db8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/namespace.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['../array/forEach'], function (forEach) { - - /** - * Create nested object if non-existent - */ - function namespace(obj, path){ - if (!path) return obj; - forEach(path.split('.'), function(key){ - if (!obj[key]) { - obj[key] = {}; - } - obj = obj[key]; - }); - return obj; - } - - return namespace; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/pick.js deleted file mode 100644 index 76e22bfc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/pick.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function(){ - - /** - * Return a copy of the object, filtered to only have values for the whitelisted keys. - */ - function pick(obj, var_keys){ - var keys = typeof arguments[1] !== 'string'? arguments[1] : Array.prototype.slice.call(arguments, 1), - out = {}, - i = 0, key; - while (key = keys[i++]) { - out[key] = obj[key]; - } - return out; - } - - return pick; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/pluck.js deleted file mode 100644 index d47744bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./map', '../function/prop'], function (map, prop) { - - /** - * Extract a list of property values. - */ - function pluck(obj, propName){ - return map(obj, prop(propName)); - } - - return pluck; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/reduce.js deleted file mode 100644 index d3a57788..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/reduce.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['./forOwn', './size'], function(forOwn, size) { - - /** - * Object reduce - */ - function reduce(obj, callback, memo, thisObj) { - var initial = arguments.length > 2; - - if (!size(obj) && !initial) { - throw new Error('reduce of empty object with no initial value'); - } - - forOwn(obj, function(value, key, list) { - if (!initial) { - memo = value; - initial = true; - } - else { - memo = callback.call(thisObj, memo, value, key, list); - } - }); - - return memo; - } - - return reduce; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/reject.js deleted file mode 100644 index 84296428..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/reject.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./filter', '../function/makeIterator_'], function (filter, makeIterator) { - - /** - * Object reject - */ - function reject(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - return filter(obj, function(value, index, obj) { - return !callback(value, index, obj); - }, thisObj); - } - - return reject; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/set.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/set.js deleted file mode 100644 index b8fa25a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/set.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./namespace'], function (namespace) { - - /** - * set "nested" object property - */ - function set(obj, prop, val){ - var parts = (/^(.+)\.(.+)$/).exec(prop); - if (parts){ - namespace(obj, parts[1])[parts[2]] = val; - } else { - obj[prop] = val; - } - } - - return set; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/size.js deleted file mode 100644 index c6e377cf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/size.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object size - */ - function size(obj) { - var count = 0; - forOwn(obj, function(){ - count++; - }); - return count; - } - - return size; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/some.js deleted file mode 100644 index 1bd6fdae..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/some.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Object some - */ - function some(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - forOwn(obj, function(val, key) { - if (callback(val, key, obj)) { - result = true; - return false; // break - } - }); - return result; - } - - return some; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/unset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/unset.js deleted file mode 100644 index 787fc19a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/unset.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./has'], function (has) { - - /** - * Unset object property. - */ - function unset(obj, prop){ - if (has(obj, prop)) { - var parts = prop.split('.'), - last = parts.pop(); - while (prop = parts.shift()) { - obj = obj[prop]; - } - return (delete obj[last]); - - } else { - // if property doesn't exist treat as deleted - return true; - } - } - - return unset; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/values.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/values.js deleted file mode 100644 index b311fd09..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/object/values.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object values - */ - function values(obj) { - var vals = []; - forOwn(obj, function(val, key){ - vals.push(val); - }); - return vals; - } - - return values; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString.js deleted file mode 100644 index 44346127..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'contains' : require('./queryString/contains'), - 'decode' : require('./queryString/decode'), - 'encode' : require('./queryString/encode'), - 'getParam' : require('./queryString/getParam'), - 'getQuery' : require('./queryString/getQuery'), - 'parse' : require('./queryString/parse'), - 'setParam' : require('./queryString/setParam') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/contains.js deleted file mode 100644 index a6d11cce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/contains.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./getQuery'], function (getQuery) { - - /** - * Checks if query string contains parameter. - */ - function contains(url, paramName) { - var regex = new RegExp('(\\?|&)'+ paramName +'=', 'g'); //matches `?param=` or `¶m=` - return regex.test(getQuery(url)); - } - - return contains; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/decode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/decode.js deleted file mode 100644 index 50da3f66..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/decode.js +++ /dev/null @@ -1,35 +0,0 @@ -define(['../string/typecast', '../lang/isString', '../lang/isArray', '../object/hasOwn'], function (typecast, isString, isArray, hasOwn) { - - /** - * Decode query string into an object of keys => vals. - */ - function decode(queryStr, shouldTypecast) { - var queryArr = (queryStr || '').replace('?', '').split('&'), - count = -1, - length = queryArr.length, - obj = {}, - item, pValue, pName, toSet; - - while (++count < length) { - item = queryArr[count].split('='); - pName = item[0]; - if (!pName || !pName.length){ - continue; - } - pValue = shouldTypecast === false ? item[1] : typecast(item[1]); - toSet = isString(pValue) ? decodeURIComponent(pValue) : pValue; - if (hasOwn(obj,pName)){ - if(isArray(obj[pName])){ - obj[pName].push(toSet); - } else { - obj[pName] = [obj[pName],toSet]; - } - } else { - obj[pName] = toSet; - } - } - return obj; - } - - return decode; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/encode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/encode.js deleted file mode 100644 index c249287a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/encode.js +++ /dev/null @@ -1,25 +0,0 @@ -define(['../object/forOwn','../lang/isArray','../array/forEach'], function (forOwn,isArray,forEach) { - - /** - * Encode object into a query string. - */ - function encode(obj){ - var query = [], - arrValues, reg; - forOwn(obj, function (val, key) { - if (isArray(val)) { - arrValues = key + '='; - reg = new RegExp('&'+key+'+=$'); - forEach(val, function (aValue) { - arrValues += encodeURIComponent(aValue) + '&' + key + '='; - }); - query.push(arrValues.replace(reg, '')); - } else { - query.push(key + '=' + encodeURIComponent(val)); - } - }); - return (query.length) ? '?' + query.join('&') : ''; - } - - return encode; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/getParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/getParam.js deleted file mode 100644 index d9813724..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/getParam.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../string/typecast', './getQuery'], function (typecast, getQuery) { - - /** - * Get query parameter value. - */ - function getParam(url, param, shouldTypecast){ - var regexp = new RegExp('(\\?|&)'+ param + '=([^&]*)'), //matches `?param=value` or `¶m=value`, value = $2 - result = regexp.exec( getQuery(url) ), - val = (result && result[2])? result[2] : null; - return shouldTypecast === false? val : typecast(val); - } - - return getParam; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/getQuery.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/getQuery.js deleted file mode 100644 index aa3d99f3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/getQuery.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * Gets full query as string with all special chars decoded. - */ - function getQuery(url) { - url = url.replace(/#.*/, ''); //removes hash (to avoid getting hash query) - var queryString = /\?[a-zA-Z0-9\=\&\%\$\-\_\.\+\!\*\'\(\)\,]+/.exec(url); //valid chars according to: http://www.ietf.org/rfc/rfc1738.txt - return (queryString)? decodeURIComponent(queryString[0]) : ''; - } - - return getQuery; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/parse.js deleted file mode 100644 index ac153e3f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/parse.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./decode', './getQuery'], function (decode, getQuery) { - - /** - * Get query string, parses and decodes it. - */ - function parse(url, shouldTypecast) { - return decode(getQuery(url), shouldTypecast); - } - - return parse; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/setParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/setParam.js deleted file mode 100644 index 97081aa7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/queryString/setParam.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Set query string parameter value - */ - function setParam(url, paramName, value){ - url = url || ''; - - var re = new RegExp('(\\?|&)'+ paramName +'=[^&]*' ); - var param = paramName +'='+ encodeURIComponent( value ); - - if ( re.test(url) ) { - return url.replace(re, '$1'+ param); - } else { - if (url.indexOf('?') === -1) { - url += '?'; - } - if (url.indexOf('=') !== -1) { - url += '&'; - } - return url + param; - } - - } - - return setParam; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random.js deleted file mode 100644 index b2641ee3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random.js +++ /dev/null @@ -1,16 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'choice' : require('./random/choice'), - 'guid' : require('./random/guid'), - 'rand' : require('./random/rand'), - 'randBit' : require('./random/randBit'), - 'randHex' : require('./random/randHex'), - 'randInt' : require('./random/randInt'), - 'randSign' : require('./random/randSign'), - 'random' : require('./random/random') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/choice.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/choice.js deleted file mode 100644 index 0d0c38df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/choice.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./randInt', '../lang/isArray'], function (randInt, isArray) { - - /** - * Returns a random element from the supplied arguments - * or from the array (if single argument is an array). - */ - function choice(items) { - var target = (arguments.length === 1 && isArray(items))? items : arguments; - return target[ randInt(0, target.length - 1) ]; - } - - return choice; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/guid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/guid.js deleted file mode 100644 index 82f3a2db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/guid.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./randHex', './choice'], function (randHex, choice) { - - /** - * Returns pseudo-random guid (UUID v4) - * IMPORTANT: it's not totally "safe" since randHex/choice uses Math.random - * by default and sequences can be predicted in some cases. See the - * "random/random" documentation for more info about it and how to replace - * the default PRNG. - */ - function guid() { - return ( - randHex(8)+'-'+ - randHex(4)+'-'+ - // v4 UUID always contain "4" at this position to specify it was - // randomly generated - '4' + randHex(3) +'-'+ - // v4 UUID always contain chars [a,b,8,9] at this position - choice(8, 9, 'a', 'b') + randHex(3)+'-'+ - randHex(12) - ); - } - return guid; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/rand.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/rand.js deleted file mode 100644 index b8c231dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/rand.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./random', '../number/MIN_INT', '../number/MAX_INT'], function(random, MIN_INT, MAX_INT){ - - /** - * Returns random number inside range - */ - function rand(min, max){ - min = min == null? MIN_INT : min; - max = max == null? MAX_INT : max; - return min + (max - min) * random(); - } - - return rand; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randBit.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randBit.js deleted file mode 100644 index b3422d2d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randBit.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['./random'], function (random) { - - /** - * Returns random bit (0 or 1) - */ - function randomBit() { - return random() > 0.5? 1 : 0; - } - - return randomBit; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randHex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randHex.js deleted file mode 100644 index 6e9bf1c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randHex.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./choice'], function (choice) { - - var _chars = '0123456789abcdef'.split(''); - - /** - * Returns a random hexadecimal string - */ - function randHex(size){ - size = size && size > 0? size : 6; - var str = ''; - while (size--) { - str += choice(_chars); - } - return str; - } - - return randHex; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randInt.js deleted file mode 100644 index 1750e9de..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randInt.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../number/MIN_INT', '../number/MAX_INT', './rand'], function(MIN_INT, MAX_INT, rand){ - - /** - * Gets random integer inside range or snap to min/max values. - */ - function randInt(min, max){ - min = min == null? MIN_INT : ~~min; - max = max == null? MAX_INT : ~~max; - // can't be max + 0.5 otherwise it will round up if `rand` - // returns `max` causing it to overflow range. - // -0.5 and + 0.49 are required to avoid bias caused by rounding - return Math.round( rand(min - 0.5, max + 0.499999999999) ); - } - - return randInt; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randSign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randSign.js deleted file mode 100644 index 4141cdf6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/randSign.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['./random'], function (random) { - - /** - * Returns random sign (-1 or 1) - */ - function randomSign() { - return random() > 0.5? 1 : -1; - } - - return randomSign; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/random.js deleted file mode 100644 index 4270822e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/random/random.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function () { - - /** - * Just a wrapper to Math.random. No methods inside mout/random should call - * Math.random() directly so we can inject the pseudo-random number - * generator if needed (ie. in case we need a seeded random or a better - * algorithm than the native one) - */ - function random(){ - return random.get(); - } - - // we expose the method so it can be swapped if needed - random.get = Math.random; - - return random; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string.js deleted file mode 100644 index a157e4cc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string.js +++ /dev/null @@ -1,46 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'WHITE_SPACES' : require('./string/WHITE_SPACES'), - 'camelCase' : require('./string/camelCase'), - 'contains' : require('./string/contains'), - 'crop' : require('./string/crop'), - 'endsWith' : require('./string/endsWith'), - 'escapeHtml' : require('./string/escapeHtml'), - 'escapeRegExp' : require('./string/escapeRegExp'), - 'escapeUnicode' : require('./string/escapeUnicode'), - 'hyphenate' : require('./string/hyphenate'), - 'insert' : require('./string/insert'), - 'interpolate' : require('./string/interpolate'), - 'lowerCase' : require('./string/lowerCase'), - 'lpad' : require('./string/lpad'), - 'ltrim' : require('./string/ltrim'), - 'makePath' : require('./string/makePath'), - 'normalizeLineBreaks' : require('./string/normalizeLineBreaks'), - 'pascalCase' : require('./string/pascalCase'), - 'properCase' : require('./string/properCase'), - 'removeNonASCII' : require('./string/removeNonASCII'), - 'removeNonWord' : require('./string/removeNonWord'), - 'repeat' : require('./string/repeat'), - 'replace' : require('./string/replace'), - 'replaceAccents' : require('./string/replaceAccents'), - 'rpad' : require('./string/rpad'), - 'rtrim' : require('./string/rtrim'), - 'sentenceCase' : require('./string/sentenceCase'), - 'slugify' : require('./string/slugify'), - 'startsWith' : require('./string/startsWith'), - 'stripHtmlTags' : require('./string/stripHtmlTags'), - 'trim' : require('./string/trim'), - 'truncate' : require('./string/truncate'), - 'typecast' : require('./string/typecast'), - 'unCamelCase' : require('./string/unCamelCase'), - 'underscore' : require('./string/underscore'), - 'unescapeHtml' : require('./string/unescapeHtml'), - 'unescapeUnicode' : require('./string/unescapeUnicode'), - 'unhyphenate' : require('./string/unhyphenate'), - 'upperCase' : require('./string/upperCase') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/WHITE_SPACES.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/WHITE_SPACES.js deleted file mode 100644 index e830d86d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/WHITE_SPACES.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function() { - /** - * Contains all Unicode white-spaces. Taken from - * http://en.wikipedia.org/wiki/Whitespace_character. - */ - return [ - ' ', '\n', '\r', '\t', '\f', '\v', '\u00A0', '\u1680', '\u180E', - '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', - '\u2007', '\u2008', '\u2009', '\u200A', '\u2028', '\u2029', '\u202F', - '\u205F', '\u3000' - ]; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/camelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/camelCase.js deleted file mode 100644 index 02e6c04d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/camelCase.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString', './replaceAccents', './removeNonWord', './upperCase', './lowerCase'], function(toString, replaceAccents, removeNonWord, upperCase, lowerCase){ - /** - * Convert string to camelCase text. - */ - function camelCase(str){ - str = toString(str); - str = replaceAccents(str); - str = removeNonWord(str) - .replace(/[\-_]/g, ' ') //convert all hyphens and underscores to spaces - .replace(/\s[a-z]/g, upperCase) //convert first char of each word to UPPERCASE - .replace(/\s+/g, '') //remove spaces - .replace(/^[A-Z]/g, lowerCase); //convert first char to lowercase - return str; - } - return camelCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/contains.js deleted file mode 100644 index 825b5a5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/contains.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Searches for a given substring - */ - function contains(str, substring, fromIndex){ - str = toString(str); - substring = toString(substring); - return str.indexOf(substring, fromIndex) !== -1; - } - - return contains; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/crop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/crop.js deleted file mode 100644 index 3c073f05..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/crop.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './truncate'], function (toString, truncate) { - /** - * Truncate string at full words. - */ - function crop(str, maxChars, append) { - str = toString(str); - return truncate(str, maxChars, append, true); - } - - return crop; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/endsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/endsWith.js deleted file mode 100644 index 31a73f20..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/endsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function(toString) { - /** - * Checks if string ends with specified suffix. - */ - function endsWith(str, suffix) { - str = toString(str); - suffix = toString(suffix); - - return str.indexOf(suffix, str.length - suffix.length) !== -1; - } - - return endsWith; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/escapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/escapeHtml.js deleted file mode 100644 index de34b61b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/escapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Escapes a string for insertion into HTML. - */ - function escapeHtml(str){ - str = toString(str) - .replace(/&/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/'/g, ''') - .replace(/"/g, '"'); - return str; - } - - return escapeHtml; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/escapeRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/escapeRegExp.js deleted file mode 100644 index 32facac0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/escapeRegExp.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../lang/toString'], function(toString) { - - var ESCAPE_CHARS = /[\\.+*?\^$\[\](){}\/'#]/g; - - /** - * Escape RegExp string chars. - */ - function escapeRegExp(str) { - str = toString(str); - return str.replace(ESCAPE_CHARS,'\\$&'); - } - - return escapeRegExp; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/escapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/escapeUnicode.js deleted file mode 100644 index bd5e8c4c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/escapeUnicode.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Escape string into unicode sequences - */ - function escapeUnicode(str, shouldEscapePrintable){ - str = toString(str); - return str.replace(/[\s\S]/g, function(ch){ - // skip printable ASCII chars if we should not escape them - if (!shouldEscapePrintable && (/[\x20-\x7E]/).test(ch)) { - return ch; - } - // we use "000" and slice(-4) for brevity, need to pad zeros, - // unicode escape always have 4 chars after "\u" - return '\\u'+ ('000'+ ch.charCodeAt(0).toString(16)).slice(-4); - }); - } - - return escapeUnicode; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/hyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/hyphenate.js deleted file mode 100644 index 679c405c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/hyphenate.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toString', './slugify', './unCamelCase'], function(toString, slugify, unCamelCase){ - /** - * Replaces spaces with hyphens, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function hyphenate(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "-"); - } - - return hyphenate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/insert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/insert.js deleted file mode 100644 index 79c45be7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/insert.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../math/clamp', '../lang/toString'], function (clamp, toString) { - - /** - * Inserts a string at a given index. - */ - function insert(string, index, partial){ - string = toString(string); - - if (index < 0) { - index = string.length + index; - } - - index = clamp(index, 0, string.length); - - return string.substr(0, index) + partial + string.substr(index); - } - - return insert; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/interpolate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/interpolate.js deleted file mode 100644 index ecb8ba80..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/interpolate.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function(toString) { - - var stache = /\{\{(\w+)\}\}/g; //mustache-like - - /** - * String interpolation - */ - function interpolate(template, replacements, syntax){ - template = toString(template); - var replaceFn = function(match, prop){ - return (prop in replacements)? toString(replacements[prop]) : ''; - }; - return template.replace(syntax || stache, replaceFn); - } - - return interpolate; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/lowerCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/lowerCase.js deleted file mode 100644 index b045d69c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/lowerCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * "Safer" String.toLowerCase() - */ - function lowerCase(str){ - str = toString(str); - return str.toLowerCase(); - } - - return lowerCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/lpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/lpad.js deleted file mode 100644 index 134b4150..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/lpad.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString', './repeat'], function(toString, repeat) { - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function lpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - - return (str.length < minLen) ? - repeat(ch, minLen - str.length) + str : str; - } - - return lpad; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/ltrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/ltrim.js deleted file mode 100644 index 477df953..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/ltrim.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES'], function(toString, WHITE_SPACES){ - /** - * Remove chars from beginning of string. - */ - function ltrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var start = 0, - len = str.length, - charLen = chars.length, - found = true, - i, c; - - while (found && start < len) { - found = false; - i = -1; - c = str.charAt(start); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - start++; - break; - } - } - } - - return (start >= len) ? '' : str.substr(start, len); - } - - return ltrim; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/makePath.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/makePath.js deleted file mode 100644 index 149275fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/makePath.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../array/join'], function(join){ - - /** - * Group arguments as path segments, if any of the args is `null` or an - * empty string it will be ignored from resulting path. - */ - function makePath(var_args){ - var result = join(Array.prototype.slice.call(arguments), '/'); - // need to disconsider duplicate '/' after protocol (eg: 'http://') - return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); - } - - return makePath; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/normalizeLineBreaks.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/normalizeLineBreaks.js deleted file mode 100644 index 44e4194f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/normalizeLineBreaks.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function (toString) { - - /** - * Convert line-breaks from DOS/MAC to a single standard (UNIX by default) - */ - function normalizeLineBreaks(str, lineEnd) { - str = toString(str); - lineEnd = lineEnd || '\n'; - - return str - .replace(/\r\n/g, lineEnd) // DOS - .replace(/\r/g, lineEnd) // Mac - .replace(/\n/g, lineEnd); // Unix - } - - return normalizeLineBreaks; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/pascalCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/pascalCase.js deleted file mode 100644 index ead9ead4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/pascalCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './camelCase', './upperCase'], function(toString, camelCase, upperCase){ - /** - * camelCase + UPPERCASE first char - */ - function pascalCase(str){ - str = toString(str); - return camelCase(str).replace(/^[a-z]/, upperCase); - } - - return pascalCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/properCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/properCase.js deleted file mode 100644 index 2987b507..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/properCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './lowerCase', './upperCase'], function(toString, lowerCase, upperCase){ - /** - * UPPERCASE first char of each word. - */ - function properCase(str){ - str = toString(str); - return lowerCase(str).replace(/^\w|\s\w/g, upperCase); - } - - return properCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/removeNonASCII.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/removeNonASCII.js deleted file mode 100644 index 4905869d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/removeNonASCII.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove non-printable ASCII chars - */ - function removeNonASCII(str){ - str = toString(str); - - // Matches non-printable ASCII chars - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters - return str.replace(/[^\x20-\x7E]/g, ''); - } - - return removeNonASCII; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/removeNonWord.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/removeNonWord.js deleted file mode 100644 index 2b1a2040..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/removeNonWord.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove non-word chars. - */ - function removeNonWord(str){ - str = toString(str); - return str.replace(/[^0-9a-zA-Z\xC0-\xFF \-_]/g, ''); - } - - return removeNonWord; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/repeat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/repeat.js deleted file mode 100644 index 02f5659f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/repeat.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function(toString){ - - /** - * Repeat string n times - */ - function repeat(str, n){ - str = toString(str); - return (new Array(n + 1)).join(str); - } - - return repeat; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/replace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/replace.js deleted file mode 100644 index 8b762fdc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/replace.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../lang/toString', '../lang/toArray'], function (toString, toArray) { - - /** - * Replace string(s) with the replacement(s) in the source. - */ - function replace(str, search, replacements) { - str = toString(str); - search = toArray(search); - replacements = toArray(replacements); - - var searchLength = search.length, - replacementsLength = replacements.length; - - if (replacementsLength !== 1 && searchLength !== replacementsLength) { - throw new Error('Unequal number of searches and replacements'); - } - - var i = -1; - while (++i < searchLength) { - // Use the first replacement for all searches if only one - // replacement is provided - str = str.replace( - search[i], - replacements[(replacementsLength === 1) ? 0 : i]); - } - - return str; - } - - return replace; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/replaceAccents.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/replaceAccents.js deleted file mode 100644 index 3a63f55a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/replaceAccents.js +++ /dev/null @@ -1,36 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Replaces all accented chars with regular ones - */ - function replaceAccents(str){ - str = toString(str); - - // verifies if the String has accents and replace them - if (str.search(/[\xC0-\xFF]/g) > -1) { - str = str - .replace(/[\xC0-\xC5]/g, "A") - .replace(/[\xC6]/g, "AE") - .replace(/[\xC7]/g, "C") - .replace(/[\xC8-\xCB]/g, "E") - .replace(/[\xCC-\xCF]/g, "I") - .replace(/[\xD0]/g, "D") - .replace(/[\xD1]/g, "N") - .replace(/[\xD2-\xD6\xD8]/g, "O") - .replace(/[\xD9-\xDC]/g, "U") - .replace(/[\xDD]/g, "Y") - .replace(/[\xDE]/g, "P") - .replace(/[\xE0-\xE5]/g, "a") - .replace(/[\xE6]/g, "ae") - .replace(/[\xE7]/g, "c") - .replace(/[\xE8-\xEB]/g, "e") - .replace(/[\xEC-\xEF]/g, "i") - .replace(/[\xF1]/g, "n") - .replace(/[\xF2-\xF6\xF8]/g, "o") - .replace(/[\xF9-\xFC]/g, "u") - .replace(/[\xFE]/g, "p") - .replace(/[\xFD\xFF]/g, "y"); - } - return str; - } - return replaceAccents; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/rpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/rpad.js deleted file mode 100644 index 2efd9c88..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/rpad.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString', './repeat'], function (toString, repeat) { - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function rpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - return (str.length < minLen)? str + repeat(ch, minLen - str.length) : str; - } - - return rpad; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/rtrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/rtrim.js deleted file mode 100644 index a4cc282d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/rtrim.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES'], function(toString, WHITE_SPACES){ - /** - * Remove chars from end of string. - */ - function rtrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var end = str.length - 1, - charLen = chars.length, - found = true, - i, c; - - while (found && end >= 0) { - found = false; - i = -1; - c = str.charAt(end); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - end--; - break; - } - } - } - - return (end >= 0) ? str.substring(0, end + 1) : ''; - } - - return rtrim; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/sentenceCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/sentenceCase.js deleted file mode 100644 index cfe45af5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/sentenceCase.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString', './lowerCase', './upperCase'], function(toString, lowerCase, upperCase){ - /** - * UPPERCASE first char of each sentence and lowercase other chars. - */ - function sentenceCase(str){ - str = toString(str); - - // Replace first char of each sentence (new line or after '.\s+') to - // UPPERCASE - return lowerCase(str).replace(/(^\w)|\.\s+(\w)/gm, upperCase); - } - return sentenceCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/slugify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/slugify.js deleted file mode 100644 index c6d68c7e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/slugify.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['../lang/toString', './replaceAccents', './removeNonWord', './trim'], function(toString, replaceAccents, removeNonWord, trim){ - /** - * Convert to lower case, remove accents, remove non-word chars and - * replace spaces with the specified delimeter. - * Does not split camelCase text. - */ - function slugify(str, delimeter){ - str = toString(str); - - if (delimeter == null) { - delimeter = "-"; - } - str = replaceAccents(str); - str = removeNonWord(str); - str = trim(str) //should come after removeNonWord - .replace(/ +/g, delimeter) //replace spaces with delimeter - .toLowerCase(); - return str; - } - return slugify; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/startsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/startsWith.js deleted file mode 100644 index 88ae5453..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/startsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function (toString) { - /** - * Checks if string starts with specified prefix. - */ - function startsWith(str, prefix) { - str = toString(str); - prefix = toString(prefix); - - return str.indexOf(prefix) === 0; - } - - return startsWith; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/stripHtmlTags.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/stripHtmlTags.js deleted file mode 100644 index e8da956d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/stripHtmlTags.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove HTML tags from string. - */ - function stripHtmlTags(str){ - str = toString(str); - - return str.replace(/<[^>]*>/g, ''); - } - return stripHtmlTags; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/trim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/trim.js deleted file mode 100644 index 55526041..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/trim.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES', './ltrim', './rtrim'], function(toString, WHITE_SPACES, ltrim, rtrim){ - /** - * Remove white-spaces from beginning and end of string. - */ - function trim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - return ltrim(rtrim(str, chars), chars); - } - - return trim; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/truncate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/truncate.js deleted file mode 100644 index 34000d9f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/truncate.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../lang/toString', './trim'], function(toString, trim){ - /** - * Limit number of chars. - */ - function truncate(str, maxChars, append, onlyFullWords){ - str = toString(str); - append = append || '...'; - maxChars = onlyFullWords? maxChars + 1 : maxChars; - - str = trim(str); - if(str.length <= maxChars){ - return str; - } - str = str.substr(0, maxChars - append.length); - //crop at last space or remove trailing whitespace - str = onlyFullWords? str.substr(0, str.lastIndexOf(' ')) : trim(str); - return str + append; - } - return truncate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/typecast.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/typecast.js deleted file mode 100644 index a7c83153..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/typecast.js +++ /dev/null @@ -1,29 +0,0 @@ -define(function () { - - var UNDEF; - - /** - * Parses string and convert it into a native value. - */ - function typecast(val) { - var r; - if ( val === null || val === 'null' ) { - r = null; - } else if ( val === 'true' ) { - r = true; - } else if ( val === 'false' ) { - r = false; - } else if ( val === UNDEF || val === 'undefined' ) { - r = UNDEF; - } else if ( val === '' || isNaN(val) ) { - //isNaN('') returns false - r = val; - } else { - //parseFloat(null || '') returns NaN - r = parseFloat(val); - } - return r; - } - - return typecast; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unCamelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unCamelCase.js deleted file mode 100644 index eeef39b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unCamelCase.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../lang/toString'], function(toString){ - - var CAMEL_CASE_BORDER = /([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g; - - /** - * Add space between camelCase text. - */ - function unCamelCase(str, delimiter){ - if (delimiter == null) { - delimiter = ' '; - } - - function join(str, c1, c2) { - return c1 + delimiter + c2; - } - - str = toString(str); - str = str.replace(CAMEL_CASE_BORDER, join); - str = str.toLowerCase(); //add space between camelCase text - return str; - } - return unCamelCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/underscore.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/underscore.js deleted file mode 100644 index 75dd4649..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/underscore.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './slugify', './unCamelCase'], function(toString, slugify, unCamelCase){ - /** - * Replaces spaces with underscores, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function underscore(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "_"); - } - return underscore; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unescapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unescapeHtml.js deleted file mode 100644 index 173c69c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unescapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function (toString) { - - /** - * Unescapes HTML special chars - */ - function unescapeHtml(str){ - str = toString(str) - .replace(/&/g , '&') - .replace(/</g , '<') - .replace(/>/g , '>') - .replace(/'/g , "'") - .replace(/"/g, '"'); - return str; - } - - return unescapeHtml; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unescapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unescapeUnicode.js deleted file mode 100644 index d4a7ba1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unescapeUnicode.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Unescape unicode char sequences - */ - function unescapeUnicode(str){ - str = toString(str); - return str.replace(/\\u[0-9a-f]{4}/g, function(ch){ - var code = parseInt(ch.slice(2), 16); - return String.fromCharCode(code); - }); - } - - return unescapeUnicode; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unhyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unhyphenate.js deleted file mode 100644 index 6ac2fa4c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/unhyphenate.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Replaces hyphens with spaces. (only hyphens between word chars) - */ - function unhyphenate(str){ - str = toString(str); - return str.replace(/(\w)(-)(\w)/g, '$1 $3'); - } - return unhyphenate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/upperCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/upperCase.js deleted file mode 100644 index 8b2073e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/string/upperCase.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * "Safer" String.toUpperCase() - */ - function upperCase(str){ - str = toString(str); - return str.toUpperCase(); - } - return upperCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time.js deleted file mode 100644 index 67c90685..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'convert' : require('./time/convert'), - 'now' : require('./time/now'), - 'parseMs' : require('./time/parseMs'), - 'toTimeString' : require('./time/toTimeString') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/convert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/convert.js deleted file mode 100644 index 2de0cf2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/convert.js +++ /dev/null @@ -1,41 +0,0 @@ -define(function () { - - /** - * convert time into another unit - */ - function convert(val, sourceUnitName, destinationUnitName){ - destinationUnitName = destinationUnitName || 'ms'; - return (val * getUnit(sourceUnitName)) / getUnit(destinationUnitName); - } - - - //TODO: maybe extract to a separate module - function getUnit(unitName){ - switch(unitName){ - case 'ms': - case 'millisecond': - return 1; - case 's': - case 'second': - return 1000; - case 'm': - case 'minute': - return 60000; - case 'h': - case 'hour': - return 3600000; - case 'd': - case 'day': - return 86400000; - case 'w': - case 'week': - return 604800000; - default: - throw new Error('"'+ unitName + '" is not a valid unit'); - } - } - - - return convert; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/now.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/now.js deleted file mode 100644 index a3a38bcb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/now.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - - /** - * Get current time in miliseconds - */ - var now = (typeof Date.now === 'function')? Date.now : function(){ - return +(new Date()); - }; - - return now; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/parseMs.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/parseMs.js deleted file mode 100644 index 964929ae..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/parseMs.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['../math/countSteps'], function(countSteps){ - - /** - * Parse timestamp into an object. - */ - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - return parseMs; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/toTimeString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/toTimeString.js deleted file mode 100644 index edf18218..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/src/time/toTimeString.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../math/countSteps', '../number/pad'], function(countSteps, pad){ - - var HOUR = 3600000, - MINUTE = 60000, - SECOND = 1000; - - /** - * Format timestamp into a time string. - */ - function toTimeString(ms){ - var h = ms < HOUR ? 0 : countSteps(ms, HOUR), - m = ms < MINUTE ? 0 : countSteps(ms, MINUTE, 60), - s = ms < SECOND ? 0 : countSteps(ms, SECOND, 60), - str = ''; - - str += h? h + ':' : ''; - str += pad(m, 2) + ':'; - str += pad(s, 2); - - return str; - } - return toTimeString; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string.js deleted file mode 100644 index 6115811a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string.js +++ /dev/null @@ -1,46 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'WHITE_SPACES' : require('./string/WHITE_SPACES'), - 'camelCase' : require('./string/camelCase'), - 'contains' : require('./string/contains'), - 'crop' : require('./string/crop'), - 'endsWith' : require('./string/endsWith'), - 'escapeHtml' : require('./string/escapeHtml'), - 'escapeRegExp' : require('./string/escapeRegExp'), - 'escapeUnicode' : require('./string/escapeUnicode'), - 'hyphenate' : require('./string/hyphenate'), - 'insert' : require('./string/insert'), - 'interpolate' : require('./string/interpolate'), - 'lowerCase' : require('./string/lowerCase'), - 'lpad' : require('./string/lpad'), - 'ltrim' : require('./string/ltrim'), - 'makePath' : require('./string/makePath'), - 'normalizeLineBreaks' : require('./string/normalizeLineBreaks'), - 'pascalCase' : require('./string/pascalCase'), - 'properCase' : require('./string/properCase'), - 'removeNonASCII' : require('./string/removeNonASCII'), - 'removeNonWord' : require('./string/removeNonWord'), - 'repeat' : require('./string/repeat'), - 'replace' : require('./string/replace'), - 'replaceAccents' : require('./string/replaceAccents'), - 'rpad' : require('./string/rpad'), - 'rtrim' : require('./string/rtrim'), - 'sentenceCase' : require('./string/sentenceCase'), - 'slugify' : require('./string/slugify'), - 'startsWith' : require('./string/startsWith'), - 'stripHtmlTags' : require('./string/stripHtmlTags'), - 'trim' : require('./string/trim'), - 'truncate' : require('./string/truncate'), - 'typecast' : require('./string/typecast'), - 'unCamelCase' : require('./string/unCamelCase'), - 'underscore' : require('./string/underscore'), - 'unescapeHtml' : require('./string/unescapeHtml'), - 'unescapeUnicode' : require('./string/unescapeUnicode'), - 'unhyphenate' : require('./string/unhyphenate'), - 'upperCase' : require('./string/upperCase') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/WHITE_SPACES.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/WHITE_SPACES.js deleted file mode 100644 index 03e01254..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/WHITE_SPACES.js +++ /dev/null @@ -1,12 +0,0 @@ - - /** - * Contains all Unicode white-spaces. Taken from - * http://en.wikipedia.org/wiki/Whitespace_character. - */ - module.exports = [ - ' ', '\n', '\r', '\t', '\f', '\v', '\u00A0', '\u1680', '\u180E', - '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', - '\u2007', '\u2008', '\u2009', '\u200A', '\u2028', '\u2029', '\u202F', - '\u205F', '\u3000' - ]; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/camelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/camelCase.js deleted file mode 100644 index aadb69a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/camelCase.js +++ /dev/null @@ -1,20 +0,0 @@ -var toString = require('../lang/toString'); -var replaceAccents = require('./replaceAccents'); -var removeNonWord = require('./removeNonWord'); -var upperCase = require('./upperCase'); -var lowerCase = require('./lowerCase'); - /** - * Convert string to camelCase text. - */ - function camelCase(str){ - str = toString(str); - str = replaceAccents(str); - str = removeNonWord(str) - .replace(/[\-_]/g, ' ') //convert all hyphens and underscores to spaces - .replace(/\s[a-z]/g, upperCase) //convert first char of each word to UPPERCASE - .replace(/\s+/g, '') //remove spaces - .replace(/^[A-Z]/g, lowerCase); //convert first char to lowercase - return str; - } - module.exports = camelCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/contains.js deleted file mode 100644 index cb22cae4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/contains.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Searches for a given substring - */ - function contains(str, substring, fromIndex){ - str = toString(str); - substring = toString(substring); - return str.indexOf(substring, fromIndex) !== -1; - } - - module.exports = contains; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/crop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/crop.js deleted file mode 100644 index 53b93b49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/crop.js +++ /dev/null @@ -1,12 +0,0 @@ -var toString = require('../lang/toString'); -var truncate = require('./truncate'); - /** - * Truncate string at full words. - */ - function crop(str, maxChars, append) { - str = toString(str); - return truncate(str, maxChars, append, true); - } - - module.exports = crop; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/endsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/endsWith.js deleted file mode 100644 index d504e9dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/endsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Checks if string ends with specified suffix. - */ - function endsWith(str, suffix) { - str = toString(str); - suffix = toString(suffix); - - return str.indexOf(suffix, str.length - suffix.length) !== -1; - } - - module.exports = endsWith; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/escapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/escapeHtml.js deleted file mode 100644 index e67c4b21..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/escapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Escapes a string for insertion into HTML. - */ - function escapeHtml(str){ - str = toString(str) - .replace(/&/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/'/g, ''') - .replace(/"/g, '"'); - return str; - } - - module.exports = escapeHtml; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/escapeRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/escapeRegExp.js deleted file mode 100644 index 70cb84ff..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/escapeRegExp.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); - - var ESCAPE_CHARS = /[\\.+*?\^$\[\](){}\/'#]/g; - - /** - * Escape RegExp string chars. - */ - function escapeRegExp(str) { - str = toString(str); - return str.replace(ESCAPE_CHARS,'\\$&'); - } - - module.exports = escapeRegExp; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/escapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/escapeUnicode.js deleted file mode 100644 index ec649adf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/escapeUnicode.js +++ /dev/null @@ -1,21 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Escape string into unicode sequences - */ - function escapeUnicode(str, shouldEscapePrintable){ - str = toString(str); - return str.replace(/[\s\S]/g, function(ch){ - // skip printable ASCII chars if we should not escape them - if (!shouldEscapePrintable && (/[\x20-\x7E]/).test(ch)) { - return ch; - } - // we use "000" and slice(-4) for brevity, need to pad zeros, - // unicode escape always have 4 chars after "\u" - return '\\u'+ ('000'+ ch.charCodeAt(0).toString(16)).slice(-4); - }); - } - - module.exports = escapeUnicode; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/hyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/hyphenate.js deleted file mode 100644 index 95e32436..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/hyphenate.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); -var slugify = require('./slugify'); -var unCamelCase = require('./unCamelCase'); - /** - * Replaces spaces with hyphens, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function hyphenate(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "-"); - } - - module.exports = hyphenate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/insert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/insert.js deleted file mode 100644 index 8f042c6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/insert.js +++ /dev/null @@ -1,21 +0,0 @@ -var clamp = require('../math/clamp'); -var toString = require('../lang/toString'); - - /** - * Inserts a string at a given index. - */ - function insert(string, index, partial){ - string = toString(string); - - if (index < 0) { - index = string.length + index; - } - - index = clamp(index, 0, string.length); - - return string.substr(0, index) + partial + string.substr(index); - } - - module.exports = insert; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/interpolate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/interpolate.js deleted file mode 100644 index ac88fac2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/interpolate.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - var stache = /\{\{(\w+)\}\}/g; //mustache-like - - /** - * String interpolation - */ - function interpolate(template, replacements, syntax){ - template = toString(template); - var replaceFn = function(match, prop){ - return (prop in replacements)? toString(replacements[prop]) : ''; - }; - return template.replace(syntax || stache, replaceFn); - } - - module.exports = interpolate; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/lowerCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/lowerCase.js deleted file mode 100644 index 30bb7ad9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/lowerCase.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * "Safer" String.toLowerCase() - */ - function lowerCase(str){ - str = toString(str); - return str.toLowerCase(); - } - - module.exports = lowerCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/lpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/lpad.js deleted file mode 100644 index 63641d3f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/lpad.js +++ /dev/null @@ -1,17 +0,0 @@ -var toString = require('../lang/toString'); -var repeat = require('./repeat'); - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function lpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - - return (str.length < minLen) ? - repeat(ch, minLen - str.length) + str : str; - } - - module.exports = lpad; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/ltrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/ltrim.js deleted file mode 100644 index 23d7b33f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/ltrim.js +++ /dev/null @@ -1,34 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); - /** - * Remove chars from beginning of string. - */ - function ltrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var start = 0, - len = str.length, - charLen = chars.length, - found = true, - i, c; - - while (found && start < len) { - found = false; - i = -1; - c = str.charAt(start); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - start++; - break; - } - } - } - - return (start >= len) ? '' : str.substr(start, len); - } - - module.exports = ltrim; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/makePath.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/makePath.js deleted file mode 100644 index 81a1a6e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/makePath.js +++ /dev/null @@ -1,14 +0,0 @@ -var join = require('../array/join'); - - /** - * Group arguments as path segments, if any of the args is `null` or an - * empty string it will be ignored from resulting path. - */ - function makePath(var_args){ - var result = join(Array.prototype.slice.call(arguments), '/'); - // need to disconsider duplicate '/' after protocol (eg: 'http://') - return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); - } - - module.exports = makePath; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/normalizeLineBreaks.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/normalizeLineBreaks.js deleted file mode 100644 index 8a8dccfd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/normalizeLineBreaks.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Convert line-breaks from DOS/MAC to a single standard (UNIX by default) - */ - function normalizeLineBreaks(str, lineEnd) { - str = toString(str); - lineEnd = lineEnd || '\n'; - - return str - .replace(/\r\n/g, lineEnd) // DOS - .replace(/\r/g, lineEnd) // Mac - .replace(/\n/g, lineEnd); // Unix - } - - module.exports = normalizeLineBreaks; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/pascalCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/pascalCase.js deleted file mode 100644 index fd190353..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/pascalCase.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var camelCase = require('./camelCase'); -var upperCase = require('./upperCase'); - /** - * camelCase + UPPERCASE first char - */ - function pascalCase(str){ - str = toString(str); - return camelCase(str).replace(/^[a-z]/, upperCase); - } - - module.exports = pascalCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/properCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/properCase.js deleted file mode 100644 index 61636be4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/properCase.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var lowerCase = require('./lowerCase'); -var upperCase = require('./upperCase'); - /** - * UPPERCASE first char of each word. - */ - function properCase(str){ - str = toString(str); - return lowerCase(str).replace(/^\w|\s\w/g, upperCase); - } - - module.exports = properCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/removeNonASCII.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/removeNonASCII.js deleted file mode 100644 index fb463816..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/removeNonASCII.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove non-printable ASCII chars - */ - function removeNonASCII(str){ - str = toString(str); - - // Matches non-printable ASCII chars - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters - return str.replace(/[^\x20-\x7E]/g, ''); - } - - module.exports = removeNonASCII; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/removeNonWord.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/removeNonWord.js deleted file mode 100644 index bdd153b9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/removeNonWord.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove non-word chars. - */ - function removeNonWord(str){ - str = toString(str); - return str.replace(/[^0-9a-zA-Z\xC0-\xFF \-_]/g, ''); - } - - module.exports = removeNonWord; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/repeat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/repeat.js deleted file mode 100644 index 0f9b4754..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/repeat.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Repeat string n times - */ - function repeat(str, n){ - str = toString(str); - return (new Array(n + 1)).join(str); - } - - module.exports = repeat; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/replace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/replace.js deleted file mode 100644 index 14433fc7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/replace.js +++ /dev/null @@ -1,33 +0,0 @@ -var toString = require('../lang/toString'); -var toArray = require('../lang/toArray'); - - /** - * Replace string(s) with the replacement(s) in the source. - */ - function replace(str, search, replacements) { - str = toString(str); - search = toArray(search); - replacements = toArray(replacements); - - var searchLength = search.length, - replacementsLength = replacements.length; - - if (replacementsLength !== 1 && searchLength !== replacementsLength) { - throw new Error('Unequal number of searches and replacements'); - } - - var i = -1; - while (++i < searchLength) { - // Use the first replacement for all searches if only one - // replacement is provided - str = str.replace( - search[i], - replacements[(replacementsLength === 1) ? 0 : i]); - } - - return str; - } - - module.exports = replace; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/replaceAccents.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/replaceAccents.js deleted file mode 100644 index bb221265..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/replaceAccents.js +++ /dev/null @@ -1,36 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Replaces all accented chars with regular ones - */ - function replaceAccents(str){ - str = toString(str); - - // verifies if the String has accents and replace them - if (str.search(/[\xC0-\xFF]/g) > -1) { - str = str - .replace(/[\xC0-\xC5]/g, "A") - .replace(/[\xC6]/g, "AE") - .replace(/[\xC7]/g, "C") - .replace(/[\xC8-\xCB]/g, "E") - .replace(/[\xCC-\xCF]/g, "I") - .replace(/[\xD0]/g, "D") - .replace(/[\xD1]/g, "N") - .replace(/[\xD2-\xD6\xD8]/g, "O") - .replace(/[\xD9-\xDC]/g, "U") - .replace(/[\xDD]/g, "Y") - .replace(/[\xDE]/g, "P") - .replace(/[\xE0-\xE5]/g, "a") - .replace(/[\xE6]/g, "ae") - .replace(/[\xE7]/g, "c") - .replace(/[\xE8-\xEB]/g, "e") - .replace(/[\xEC-\xEF]/g, "i") - .replace(/[\xF1]/g, "n") - .replace(/[\xF2-\xF6\xF8]/g, "o") - .replace(/[\xF9-\xFC]/g, "u") - .replace(/[\xFE]/g, "p") - .replace(/[\xFD\xFF]/g, "y"); - } - return str; - } - module.exports = replaceAccents; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/rpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/rpad.js deleted file mode 100644 index 99f6378d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/rpad.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var repeat = require('./repeat'); - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function rpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - return (str.length < minLen)? str + repeat(ch, minLen - str.length) : str; - } - - module.exports = rpad; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/rtrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/rtrim.js deleted file mode 100644 index 66ba80e9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/rtrim.js +++ /dev/null @@ -1,33 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); - /** - * Remove chars from end of string. - */ - function rtrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var end = str.length - 1, - charLen = chars.length, - found = true, - i, c; - - while (found && end >= 0) { - found = false; - i = -1; - c = str.charAt(end); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - end--; - break; - } - } - } - - return (end >= 0) ? str.substring(0, end + 1) : ''; - } - - module.exports = rtrim; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/sentenceCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/sentenceCase.js deleted file mode 100644 index 354104c6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/sentenceCase.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var lowerCase = require('./lowerCase'); -var upperCase = require('./upperCase'); - /** - * UPPERCASE first char of each sentence and lowercase other chars. - */ - function sentenceCase(str){ - str = toString(str); - - // Replace first char of each sentence (new line or after '.\s+') to - // UPPERCASE - return lowerCase(str).replace(/(^\w)|\.\s+(\w)/gm, upperCase); - } - module.exports = sentenceCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/slugify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/slugify.js deleted file mode 100644 index 142f0d9b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/slugify.js +++ /dev/null @@ -1,24 +0,0 @@ -var toString = require('../lang/toString'); -var replaceAccents = require('./replaceAccents'); -var removeNonWord = require('./removeNonWord'); -var trim = require('./trim'); - /** - * Convert to lower case, remove accents, remove non-word chars and - * replace spaces with the specified delimeter. - * Does not split camelCase text. - */ - function slugify(str, delimeter){ - str = toString(str); - - if (delimeter == null) { - delimeter = "-"; - } - str = replaceAccents(str); - str = removeNonWord(str); - str = trim(str) //should come after removeNonWord - .replace(/ +/g, delimeter) //replace spaces with delimeter - .toLowerCase(); - return str; - } - module.exports = slugify; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/startsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/startsWith.js deleted file mode 100644 index bce2bd20..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/startsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Checks if string starts with specified prefix. - */ - function startsWith(str, prefix) { - str = toString(str); - prefix = toString(prefix); - - return str.indexOf(prefix) === 0; - } - - module.exports = startsWith; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/stripHtmlTags.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/stripHtmlTags.js deleted file mode 100644 index 01d17b0e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/stripHtmlTags.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove HTML tags from string. - */ - function stripHtmlTags(str){ - str = toString(str); - - return str.replace(/<[^>]*>/g, ''); - } - module.exports = stripHtmlTags; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/trim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/trim.js deleted file mode 100644 index 9652b0c7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/trim.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); -var ltrim = require('./ltrim'); -var rtrim = require('./rtrim'); - /** - * Remove white-spaces from beginning and end of string. - */ - function trim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - return ltrim(rtrim(str, chars), chars); - } - - module.exports = trim; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/truncate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/truncate.js deleted file mode 100644 index a98d6c7d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/truncate.js +++ /dev/null @@ -1,21 +0,0 @@ -var toString = require('../lang/toString'); -var trim = require('./trim'); - /** - * Limit number of chars. - */ - function truncate(str, maxChars, append, onlyFullWords){ - str = toString(str); - append = append || '...'; - maxChars = onlyFullWords? maxChars + 1 : maxChars; - - str = trim(str); - if(str.length <= maxChars){ - return str; - } - str = str.substr(0, maxChars - append.length); - //crop at last space or remove trailing whitespace - str = onlyFullWords? str.substr(0, str.lastIndexOf(' ')) : trim(str); - return str + append; - } - module.exports = truncate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/typecast.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/typecast.js deleted file mode 100644 index c1386a49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/typecast.js +++ /dev/null @@ -1,29 +0,0 @@ - - - var UNDEF; - - /** - * Parses string and convert it into a native value. - */ - function typecast(val) { - var r; - if ( val === null || val === 'null' ) { - r = null; - } else if ( val === 'true' ) { - r = true; - } else if ( val === 'false' ) { - r = false; - } else if ( val === UNDEF || val === 'undefined' ) { - r = UNDEF; - } else if ( val === '' || isNaN(val) ) { - //isNaN('') returns false - r = val; - } else { - //parseFloat(null || '') returns NaN - r = parseFloat(val); - } - return r; - } - - module.exports = typecast; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unCamelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unCamelCase.js deleted file mode 100644 index 4968f378..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unCamelCase.js +++ /dev/null @@ -1,23 +0,0 @@ -var toString = require('../lang/toString'); - - var CAMEL_CASE_BORDER = /([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g; - - /** - * Add space between camelCase text. - */ - function unCamelCase(str, delimiter){ - if (delimiter == null) { - delimiter = ' '; - } - - function join(str, c1, c2) { - return c1 + delimiter + c2; - } - - str = toString(str); - str = str.replace(CAMEL_CASE_BORDER, join); - str = str.toLowerCase(); //add space between camelCase text - return str; - } - module.exports = unCamelCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/underscore.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/underscore.js deleted file mode 100644 index ebd6e2b7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/underscore.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var slugify = require('./slugify'); -var unCamelCase = require('./unCamelCase'); - /** - * Replaces spaces with underscores, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function underscore(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "_"); - } - module.exports = underscore; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unescapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unescapeHtml.js deleted file mode 100644 index 52cf3f45..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unescapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Unescapes HTML special chars - */ - function unescapeHtml(str){ - str = toString(str) - .replace(/&/g , '&') - .replace(/</g , '<') - .replace(/>/g , '>') - .replace(/'/g , "'") - .replace(/"/g, '"'); - return str; - } - - module.exports = unescapeHtml; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unescapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unescapeUnicode.js deleted file mode 100644 index 0b7fb73b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unescapeUnicode.js +++ /dev/null @@ -1,16 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Unescape unicode char sequences - */ - function unescapeUnicode(str){ - str = toString(str); - return str.replace(/\\u[0-9a-f]{4}/g, function(ch){ - var code = parseInt(ch.slice(2), 16); - return String.fromCharCode(code); - }); - } - - module.exports = unescapeUnicode; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unhyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unhyphenate.js deleted file mode 100644 index 311dfa17..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/unhyphenate.js +++ /dev/null @@ -1,10 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Replaces hyphens with spaces. (only hyphens between word chars) - */ - function unhyphenate(str){ - str = toString(str); - return str.replace(/(\w)(-)(\w)/g, '$1 $3'); - } - module.exports = unhyphenate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/upperCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/upperCase.js deleted file mode 100644 index 6c92552c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/string/upperCase.js +++ /dev/null @@ -1,10 +0,0 @@ -var toString = require('../lang/toString'); - /** - * "Safer" String.toUpperCase() - */ - function upperCase(str){ - str = toString(str); - return str.toUpperCase(); - } - module.exports = upperCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time.js deleted file mode 100644 index 9f533296..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time.js +++ /dev/null @@ -1,12 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'convert' : require('./time/convert'), - 'now' : require('./time/now'), - 'parseMs' : require('./time/parseMs'), - 'toTimeString' : require('./time/toTimeString') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/convert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/convert.js deleted file mode 100644 index 852a0f03..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/convert.js +++ /dev/null @@ -1,41 +0,0 @@ - - - /** - * convert time into another unit - */ - function convert(val, sourceUnitName, destinationUnitName){ - destinationUnitName = destinationUnitName || 'ms'; - return (val * getUnit(sourceUnitName)) / getUnit(destinationUnitName); - } - - - //TODO: maybe extract to a separate module - function getUnit(unitName){ - switch(unitName){ - case 'ms': - case 'millisecond': - return 1; - case 's': - case 'second': - return 1000; - case 'm': - case 'minute': - return 60000; - case 'h': - case 'hour': - return 3600000; - case 'd': - case 'day': - return 86400000; - case 'w': - case 'week': - return 604800000; - default: - throw new Error('"'+ unitName + '" is not a valid unit'); - } - } - - - module.exports = convert; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/now.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/now.js deleted file mode 100644 index effcfbe3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/now.js +++ /dev/null @@ -1,12 +0,0 @@ - - - /** - * Get current time in miliseconds - */ - var now = (typeof Date.now === 'function')? Date.now : function(){ - return +(new Date()); - }; - - module.exports = now; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/parseMs.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/parseMs.js deleted file mode 100644 index 6d997976..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/parseMs.js +++ /dev/null @@ -1,17 +0,0 @@ -var countSteps = require('../math/countSteps'); - - /** - * Parse timestamp into an object. - */ - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - module.exports = parseMs; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/toTimeString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/toTimeString.js deleted file mode 100644 index 101d69fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/mout/time/toTimeString.js +++ /dev/null @@ -1,24 +0,0 @@ -var countSteps = require('../math/countSteps'); -var pad = require('../number/pad'); - - var HOUR = 3600000, - MINUTE = 60000, - SECOND = 1000; - - /** - * Format timestamp into a time string. - */ - function toTimeString(ms){ - var h = ms < HOUR ? 0 : countSteps(ms, HOUR), - m = ms < MINUTE ? 0 : countSteps(ms, MINUTE, 60), - s = ms < SECOND ? 0 : countSteps(ms, SECOND, 60), - str = ''; - - str += h? h + ':' : ''; - str += pad(m, 2) + ':'; - str += pad(s, 2); - - return str; - } - module.exports = toTimeString; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/bin/optipng.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/bin/optipng.js deleted file mode 100755 index 311d46f2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/bin/optipng.js +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -var binPath = require('../lib/optipng').path; -var spawn = require('child_process').spawn; - -spawn(binPath, process.argv.slice(2), { stdio: 'inherit' }) - .on('exit', process.exit); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/lib/check.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/lib/check.js deleted file mode 100644 index 0ac3db68..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/lib/check.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var bin = require('./optipng').bin; -var chalk = require('chalk'); - -bin.check(function (w) { - if (!w) { - console.log(chalk.red('✗ pre-build test failed, compiling from source...')); - - if (process.platform === 'win32') { - throw new Error('building is not supported on ' + process.platform); - } - - return bin.build(function (err) { - if (err) { - return console.log(chalk.red('✗ ' + err.message)); - } - - console.log(chalk.green('✓ optipng rebuilt successfully')); - }); - } - - console.log(chalk.green('✓ pre-build test passed successfully')); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/lib/optipng.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/lib/optipng.js deleted file mode 100644 index 45fa96df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/lib/optipng.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -var Bin = require('bin-wrapper'); -var path = require('path'); - -var options = { - name: 'optipng', - bin: 'optipng', - path: path.join(__dirname, '../vendor'), - src: 'http://downloads.sourceforge.net/project/optipng/OptiPNG/optipng-0.7.4/optipng-0.7.4.tar.gz', - buildScript: './configure --with-system-zlib --bindir="' + path.join(__dirname, '../vendor') + '" && ' + - 'make install', - platform: { - darwin: { - url: 'https://raw.github.com/yeoman/node-optipng-bin/master/vendor/osx/optipng' - }, - freebsd: { - url: 'https://raw.github.com/yeoman/node-optipng-bin/master/vendor/freebsd/optipng' - }, - linux: { - url: 'https://raw.github.com/yeoman/node-optipng-bin/master/vendor/linux/x86/optipng', - arch: { - x64: { - url: 'https://raw.github.com/yeoman/node-optipng-bin/master/vendor/linux/x64/optipng' - } - } - }, - sunos: { - url: 'https://raw.github.com/yeoman/node-optipng-bin/master/vendor/sunos/x86/optipng', - arch: { - x64: { - url: 'https://raw.github.com/yeoman/node-optipng-bin/master/vendor/sunos/x64/optipng', - } - } - }, - win32: { - bin: 'optipng.exe', - url: 'https://raw.github.com/yeoman/node-optipng-bin/master/vendor/win/optipng.exe' - } - } -}; -var bin = new Bin(options); - -exports.bin = bin; -exports.options = options; -exports.path = bin.path; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/README.md deleted file mode 100644 index 05419cd4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# bin-wrapper [![Build Status](https://secure.travis-ci.org/kevva/bin-wrapper.png?branch=master)](http://travis-ci.org/kevva/bin-wrapper) - -Binary wrapper for Node.js that makes your programs seamlessly available as local dependencies - -## Getting started - -Install with [npm](https://npmjs.org/package/bin-wrapper): `npm install bin-wrapper` - -## Examples - -All `platform` and `arch` specific options takes precedence over the base -options. See [test.js](test.js) for a full fleshed example. - -```js -var Bin = require('bin-wrapper'); - -var opts = { - name: 'Gifsicle', - bin: 'gifsicle', - path: 'vendor', - url: 'http://url/to/gifsicle', - src: 'http://www.lcdf.org/gifsicle/gifsicle-1.71.tar.gz', - buildScript: './configure --bindir="vendor" && make install', - platform: { - win32: { - bin: 'gifsicle.exe', - url: [ - 'http://url/to/gifsicle.exe' - 'http://url/to/gifsicle.dll' - ] - } - } -} -var bin = new Bin(opts); - -bin.check('--version', function (works) { - if (!works) { - console.log('Pre-build test failed, compiling from source'); - return bin.build(); - } - - console.log('Binary passed the test'); -}); -``` - -Get the path to your binary with `bin.path`. - -```js -console.log(bin.path); -// => path/to/vendor/gifsicle -``` - -## API - -### .check(cmd, cb) - -Check if a binary is present and working. If it isn't, download and test it by -running the binary with `cmd` and see if it exits correctly. - -### .build(cb) - -Download the source archive defined in the `src` property and build it using the -build script defined in the `buildScript` property. - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/bin-wrapper.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/bin-wrapper.js deleted file mode 100644 index ccfe9342..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/bin-wrapper.js +++ /dev/null @@ -1,222 +0,0 @@ -'use strict'; - -var download = require('download'); -var exec = require('child_process').exec; -var fs = require('fs'); -var hasOwn = require('mout/object/hasOwn'); -var isbin = require('isbin'); -var isFunction = require('mout/lang/isFunction'); -var mixIn = require('mout/object/mixIn'); -var os = require('os'); -var path = require('path'); -var ProgressBar = require('progress'); -var rm = require('rimraf'); -var spawn = require('child_process').spawn; -var which = require('which'); - -/** - * Initialize BinWrapper with options - * - * @param {Object} opts - * @api public - */ - -function BinWrapper(opts) { - opts = opts || {}; - this.opts = this._parse(opts); - this.name = this.opts.name; - this.bin = this.opts.bin; - this.dest = this.opts.path; - this.path = this._path() || path.join(this.dest, this.bin); - this.url = this.opts.url; - this.src = this.opts.src; - this.buildScript = this.opts.buildScript; - this.proxy = process.env.http_proxy || - process.env.HTTP_PROXY || - process.env.https_proxy || - process.env.HTTPS_PROXY || - null; -} - -/** - * Check if a binary is present and working - * - * @param {String|Array} cmd - * @param {Function} cb - * @api public - */ - -BinWrapper.prototype.check = function (cmd, cb) { - var self = this; - - if (!cb && isFunction(cmd)) { - cb = cmd; - cmd = ['--help']; - } - - cmd = cmd; - cmd = Array.isArray(cmd) ? cmd : [cmd]; - - if (this._path()) { - return self._test(cmd, cb); - } - - this._download(this.url, this.dest, { mode: '0755', proxy: this.proxy }) - .on('close', function () { - return self._test(cmd, cb); - }); -}; - -/** - * Download source and build a binary - * - * @param {Function} cb - * @api public - */ - -BinWrapper.prototype.build = function (cb) { - var self = this; - var tmpDir = os.tmpdir ? os.tmpdir() : os.tmpDir(); - var tmp = path.join(tmpDir, this.name); - var get = this._download(this.src, tmp, { mode: '0777', extract: true, strip: '1', proxy: this.proxy }); - - if (!cb || !isFunction(cb)) { - cb = function () {}; - } - - get.on('close', function () { - exec(self.buildScript, { cwd: tmp }, function (err) { - if (err) { - return cb(err); - } - - rm.sync(tmp); - - return cb(); - }); - }); -}; - -/** - * Download a string or an array of files - * - * @param {String|Array} src - * @param {String} dest - * @param {Object} opts - * @api private - */ - -BinWrapper.prototype._download = function (src, dest, opts) { - var get = download(src, dest, opts); - - get.on('response', function (res) { - var len = parseInt(res.headers['content-length'], 10); - var bar = new ProgressBar(' ' + path.basename(src) + ': downloading [:bar] :percent :etas', { - complete: '=', - incomplete: ' ', - width: 20, - total: len - }); - - res.on('data', function (data) { - bar.tick(data.length); - }); - - res.on('end', function () { - console.log('\n'); - }); - }); - - return get; -}; - -/** - * If a binary exists, get its path - * - * @api private - */ - -BinWrapper.prototype._path = function () { - var self = this; - - if (fs.existsSync(path.join(this.dest, this.bin))) { - return path.join(self.dest, self.bin); - } - - if (isbin(this.bin)) { - if (which.sync(self.bin).indexOf('node_modules/.bin') === -1) { - return which.sync(self.bin); - } - } - - return false; -}; - -/** - * Test if a binary is working by checking its exit code - * - * @param {Array} cmd - * @param {Function} cb - * @api private - */ - -BinWrapper.prototype._test = function (cmd, cb) { - var working; - var bin = spawn(this.path, cmd); - - bin.on('error', function () { - working = false; - return cb(working); - }); - - bin.on('exit', function (code) { - working = code === 0; - return cb(working); - }); -}; - -/** - * Parse options - * - * @param {Object} opts - * @api private - */ - -BinWrapper.prototype._parse = function (opts) { - opts.platform = opts.platform || {}; - opts.arch = opts.arch || {}; - - var platform = process.platform; - var arch = process.arch === 'x64' ? 'x64' : process.arch === 'arm' ? 'arm' : 'x86'; - var required = [ - 'bin', - 'name', - 'path', - 'url' - ]; - - if (hasOwn(opts.platform, [platform])) { - opts = mixIn(opts, opts.platform[platform]); - } - - if (hasOwn(opts.arch, [arch])) { - opts = mixIn(opts, opts.arch[arch]); - } - - required.forEach(function (val) { - if (!hasOwn(opts, val)) { - throw new Error(val + ' option is required'); - } - }); - - delete opts.platform; - delete opts.arch; - - return opts; -}; - -/** - * Module exports - */ - -module.exports = BinWrapper; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/.bin/rimraf b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/.bin/rimraf deleted file mode 120000 index 4cd49a49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/.bin/rimraf +++ /dev/null @@ -1 +0,0 @@ -../rimraf/bin.js \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/.bin/which b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/.bin/which deleted file mode 120000 index f62471c8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/.bin/which +++ /dev/null @@ -1 +0,0 @@ -../which/bin/which \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/README.md deleted file mode 100644 index f57b2f41..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# download [![Build Status](https://secure.travis-ci.org/kevva/download.png?branch=master)](http://travis-ci.org/kevva/download) - -Download and extract files effortlessly in Node.js. - -## Getting started - -Install with [npm](https://npmjs.org/package/download): `npm install download` - -## Examples - -If you're fetching an archive you can set `extract: true` in options and -it'll extract it for you. - -```js -var download = require('download'); - -// download and extract `foo.tar.gz` into `bar/` -download('foo.tar.gz', 'bar', { extract: true }); - -// download and save `foo.exe` into `bar/foo.exe` with mode `0755` -download('foo.exe', 'bar', { mode: '0755' }); - -// download and save `foo.zip` into `bar/foobar.zip` -download({ url: 'foo.zip', name: 'foobar.zip' }, 'bar'); - -// download and save an array of files in `bar/` -var files = ['foo.jpg', 'bar.jpg', 'cat.jpg']; -download(files, 'bar'); - -// download, save and rename an array of files in `bar/` -var files = [{ - url: 'foo.jpg', - name: 'foobar.jpg' -}, { - url: 'cat.jpg', - name: 'dog.jpg' -}]; -download(files, 'bar'); -``` - -## API - -### download(url, dest, opts) - -Download a file or an array of files to a given destination. Returns an EventEmitter -that emits the following possible events: - -* `response` — Relayed when the underlying `http.ClientRequest` emits the same -event. Listeners called with a `http.IncomingMessage` instance. -* `data` — Relayed when the underlying `http.IncomingMessage` emits the same -event. Listeners called with a `Buffer` instance. -* `error` — Relayed when the underlying `http.ClientRequest` emits the same event -or when the response status code is not in the 200s. Listeners called with an -`Error` instance (in the first case) or the response status code. -* `close` — Relayed when the underlying `stream.Duplex` emits the same event. - -## Options - -You can define options accepted by the [request](https://github.com/mikeal/request/) module besides from the options below. - -### extract - -Type: `Boolean` -Default: `false` - -If set to `true`, try extracting the file using [decompress](https://github.com/kevva/decompress/). - -### mode - -Type: `String` -Default: `undefined` - -Set mode on the downloaded files. - -### strip - -Type: `Number` -Default: `0` - -Equivalent to `--strip-components` for tar. - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/download.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/download.js deleted file mode 100644 index 4b9c05e2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/download.js +++ /dev/null @@ -1,100 +0,0 @@ -'use strict'; - -var decompress = require('decompress'); -var eachAsync = require('each-async'); -var fs = require('fs'); -var mkdir = require('mkdirp'); -var path = require('path'); -var request = require('request'); -var through = require('through2'); - -/** - * Download a file to a given destination - * - * Options: - * - * - `extract` Try extracting the file - * - `mode` Set mode on the downloaded files - * - `strip` Equivalent to --strip-components for tar - * - * @param {String|Array|Object} url - * @param {String} dest - * @param {Object} opts - * @api public - */ - -module.exports = function (url, dest, opts) { - url = Array.isArray(url) ? url : [url]; - opts = opts || {}; - - var stream = through(); - var strip = opts.strip || '0'; - - eachAsync(url, function (url, index, done) { - opts.url = url; - var target = path.join(dest, path.basename(url)); - - if (url.url && url.name) { - target = path.join(dest, url.name); - opts.url = url.url; - } - - var req = request.get(opts) - .on('response', function (res) { - stream.emit('response', res); - }) - .on('data', function (data) { - stream.emit('data', data); - }) - .on('error', function (err) { - stream.emit('error', err); - }); - - req.on('response', function (res) { - var mime = res.headers['content-type']; - var status = res.statusCode; - var end; - - if (status < 200 || status >= 300) { - stream.emit('error', status); - return; - } - - if (opts.extract && decompress.canExtract(url, mime)) { - var ext; - - if (decompress.canExtract(url)) { - ext = url; - } else { - ext = mime; - } - - end = decompress.extract({ - ext: ext, - path: dest, - strip: strip - }); - } else { - if (!fs.existsSync(dest)) { - mkdir.sync(dest); - } - - end = fs.createWriteStream(target); - } - - req.pipe(end); - - end.on('close', function () { - if (!opts.extract && opts.mode) { - fs.chmodSync(target, opts.mode); - } - - done(); - }); - }); - }, function () { - stream.emit('close'); - }); - - return stream; -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/README.md deleted file mode 100644 index 4226d3f5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# decompress [![Build Status](https://secure.travis-ci.org/kevva/decompress.png?branch=master)](http://travis-ci.org/kevva/decompress) - -Easily extract `.zip`, `.tar` and `.tar.gz` archives. Based on the extract -utility in [Bower](https://github.com/bower/bower). - -## Getting started - -Install with [npm](https://npmjs.org/package/decompress): `npm install decompress` - -## Examples - -You'll only need to pass a type into `ext` and it'll figure the rest out for -you. - -```js -var decompress = require('decompress'); -var fs = require('fs'); - -var src = fs.createReadStream('foo.tar.gz'); -var dest = decompress.extract({ ext: '.tar.gz' }); - -src.pipe(dest); -``` - -## API - -### .extract(opts) - -Extract an archive using the `ext` option to determine which extractor to use. -If no `path` is specified it'll extract it to your current location. - -### .canExtract(src, mime) - -Determine if a file can be extracted or not by checking the file extension -and/or the MIME type. - -```js -decompress.canExtract('foo.zip'); -// => true - -decompress.canExtract('application/zip'); -// => true -``` - -## Options - -### `ext` - -Type: `String` -Default: `''` - -String that can be a file name, URL, MIME type etc. - -### `path` - -Type: `String` -Default: `process.cwd()` - -Path to extract the archive to. If no `path` is defined it'll extract it to your -current location. - -### strip - -Type: `Number` -Default: `0` - -Equivalent to `--strip-components` for tar. - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/decompress.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/decompress.js deleted file mode 100644 index e110d93c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/decompress.js +++ /dev/null @@ -1,168 +0,0 @@ -'use strict'; - -var AdmZip = require('adm-zip'); -var endsWith = require('mout/string/endsWith'); -var find = require('mout/array/find'); -var fs = require('fs'); -var mkdir = require('mkdirp'); -var path = require('path'); -var pipeline = require('stream-combiner'); -var rm = require('rimraf'); -var tar = require('tar'); -var tempfile = require('tempfile'); -var zlib = require('zlib'); - -/** - * Initialize Decompress with options - * - * Options: - * - * - `ext` String with file name, MIME type, etc - * - `path` Path to extract to - * - * @param {Object} opts - * @api private - */ - -function Decompress(opts) { - opts = opts || {}; - opts.strip = opts.strip || 0; - this.opts = opts; - this.path = opts.path || process.cwd(); - this.ext = opts.ext || ''; - this.strip = opts.strip >= 0 ? opts.strip : 0; - this.extractors = { - '.zip': this._extractZip, - '.tar': this._extractTar, - '.tar.gz': this._extractTarGz, - '.tgz': this._extractTarGz, - 'application/zip': this._extractZip, - 'application/x-tar': this._extractTar, - 'application/x-tgz': this._extractTarGz - }; - this.extractorTypes = Object.keys(this.extractors); - this.extractor = this._getExtractor(this.ext); -} - -/** - * Extract an archive - * - * @api public - */ - -Decompress.prototype.extract = function () { - var self = this; - var stream = this.extractor(); - - if (!fs.existsSync(this.path)) { - mkdir.sync(self.path); - } - - return stream; -}; - -/** - * Check if a file can be extracted - * - * @param {String} src - * @param {String} mime - * @api public - */ - -Decompress.prototype.canExtract = function (src, mime) { - if (this._getExtractor(src)) { - return true; - } - - if (mime && this._getExtractor(mime)) { - return true; - } - - return false; -}; - -/** - * Get the extractor for a desired file - * - * @param {String} src - * @api private - */ - -Decompress.prototype._getExtractor = function (src) { - src = src.toLowerCase(); - - var ext = find(this.extractorTypes, function (ext) { - return endsWith(src, ext); - }); - - return ext ? this.extractors[ext] : null; -}; - -/** - * Extract a zip file - * - * @api private - */ - -Decompress.prototype._extractZip = function () { - var self = this; - var tmp = tempfile('.zip'); - - var stream = fs.createWriteStream(tmp).on('close', function () { - var zip = new AdmZip(tmp); - var zipEntries = zip.getEntries(); - - zipEntries.forEach(function (entry) { - if (!entry.isDirectory) { - var entryFile = path.basename(entry.entryName.toString()); - var entryDir = path.dirname(entry.entryName.toString().split('/').slice(self.strip).join('/')); - var dest = path.join(self.path, entryDir, entryFile); - - mkdir.sync(path.dirname(dest)); - fs.writeFileSync(dest, entry.getData()); - } - }); - }); - - return stream.on('close', function () { - rm.sync(tmp); - }); -}; - -/** - * Extract a tar file - * - * @api private - */ - -Decompress.prototype._extractTar = function () { - var stream = tar.Extract(this.opts); - return stream; -}; - -/** - * Extract a tar.gz file - * - * @api private - */ - -Decompress.prototype._extractTarGz = function () { - var stream = zlib.Unzip(); - var dest = tar.Extract(this.opts); - - return pipeline(stream, dest); -}; - -/** - * Module exports - */ - -module.exports.extract = function (opts) { - var decompress = new Decompress(opts); - return decompress.extract(); -}; - -module.exports.canExtract = function (src, mime) { - var decompress = new Decompress(); - return decompress.canExtract(src, mime); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/.idea/scopes/scope_settings.xml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/.idea/scopes/scope_settings.xml deleted file mode 100644 index 0d5175ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/.idea/scopes/scope_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ -<component name="DependencyValidationManager"> - <state> - <option name="SKIP_IMPORT_STATEMENTS" value="false" /> - </state> -</component> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/MIT-LICENSE.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/MIT-LICENSE.txt deleted file mode 100644 index 14c3ee5c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/MIT-LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2012 Another-D-Mention Software and other contributors, -http://www.another-d-mention.ro/ - -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/README.md deleted file mode 100644 index 030fab8a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# ADM-ZIP for NodeJS - -ADM-ZIP is a pure JavaScript implementation for zip data compression for [NodeJS](http://nodejs.org/). - -# Installation - -With [npm](http://npmjs.org) do: - - $ npm install adm-zip - -## What is it good for? -The library allows you to: - -* decompress zip files directly to disk or in memory buffers -* compress files and store them to disk in .zip format or in compressed buffers -* update content of/add new/delete files from an existing .zip - -# Dependencies -There are no other nodeJS libraries that ADM-ZIP is dependent of - -# Examples - -## Basic usage -```javascript - - var AdmZip = require('adm-zip'); - - // reading archives - var zip = new AdmZip("./my_file.zip"); - var zipEntries = zip.getEntries(); // an array of ZipEntry records - - zipEntries.forEach(function(zipEntry) { - console.log(zipEntry.toString()); // outputs zip entries information - if (zipEntry.entryName == "my_file.txt") { - console.log(zipEntry.data.toString('utf8')); - } - }); - // outputs the content of some_folder/my_file.txt - console.log(zip.readAsText("some_folder/my_file.txt")); - // extracts the specified file to the specified location - zip.extractEntryTo(/*entry name*/"some_folder/my_file.txt", /*target path*/"/home/me/tempfolder", /*maintainEntryPath*/false, /*overwrite*/true); - // extracts everything - zip.extractAllTo(/*target path*/"/home/me/zipcontent/", /*overwrite*/true); - - - // creating archives - var zip = new AdmZip(); - - // add file directly - zip.addFile("test.txt", new Buffer("inner content of the file"), "entry comment goes here"); - // add local file - zip.addLocalFile("/home/me/some_picture.png"); - // get everything as a buffer - var willSendthis = zip.toBuffer(); - // or write everything to disk - zip.writeZip(/*target file name*/"/home/me/files.zip"); - - - // ... more examples in the wiki -``` - -For more detailed information please check out the [wiki](https://github.com/cthackers/adm-zip/wiki). - -[![build status](https://secure.travis-ci.org/cthackers/adm-zip.png)](http://travis-ci.org/cthackers/adm-zip) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/adm-zip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/adm-zip.js deleted file mode 100644 index 46595fc5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/adm-zip.js +++ /dev/null @@ -1,404 +0,0 @@ -var fs = require("fs"), - pth = require("path"); - -fs.existsSync = fs.existsSync || pth.existsSync; - -var ZipEntry = require("./zipEntry"), - ZipFile = require("./zipFile"), - Utils = require("./util"); - -module.exports = function(/*String*/input) { - var _zip = undefined, - _filename = ""; - - if (input && typeof input === "string") { // load zip file - if (fs.existsSync(input)) { - _filename = input; - _zip = new ZipFile(input, Utils.Constants.FILE); - } else { - throw Utils.Errors.INVALID_FILENAME; - } - } else if(input && Buffer.isBuffer(input)) { // load buffer - _zip = new ZipFile(input, Utils.Constants.BUFFER); - } else { // create new zip file - _zip = new ZipFile(null, Utils.Constants.NONE); - } - - function getEntry(/*Object*/entry) { - if (entry && _zip) { - var item; - // If entry was given as a file name - if (typeof entry === "string") - item = _zip.getEntry(entry); - // if entry was given as a ZipEntry object - if (typeof entry === "object" && entry.entryName != undefined && entry.header != undefined) - item = _zip.getEntry(entry.entryName); - - if (item) { - return item; - } - } - return null; - } - - return { - /** - * Extracts the given entry from the archive and returns the content as a Buffer object - * @param entry ZipEntry object or String with the full path of the entry - * - * @return Buffer or Null in case of error - */ - readFile : function(/*Object*/entry) { - var item = getEntry(entry); - return item && item.getData() || null; - }, - - /** - * Asynchronous readFile - * @param entry ZipEntry object or String with the full path of the entry - * @param callback - * - * @return Buffer or Null in case of error - */ - readFileAsync : function(/*Object*/entry, /*Function*/callback) { - var item = getEntry(entry); - if (item) { - item.getDataAsync(callback); - } else { - callback(null,"getEntry failed for:" + entry) - } - }, - - /** - * Extracts the given entry from the archive and returns the content as plain text in the given encoding - * @param entry ZipEntry object or String with the full path of the entry - * @param encoding Optional. If no encoding is specified utf8 is used - * - * @return String - */ - readAsText : function(/*Object*/entry, /*String - Optional*/encoding) { - var item = getEntry(entry); - if (item) { - var data = item.getData(); - if (data && data.length) { - return data.toString(encoding || "utf8"); - } - } - return ""; - }, - - /** - * Asynchronous readAsText - * @param entry ZipEntry object or String with the full path of the entry - * @param callback - * @param encoding Optional. If no encoding is specified utf8 is used - * - * @return String - */ - readAsTextAsync : function(/*Object*/entry, /*Function*/callback, /*String - Optional*/encoding) { - var item = getEntry(entry); - if (item) { - item.getDataAsync(function(data) { - if (data && data.length) { - callback(data.toString(encoding || "utf8")); - } else { - callback(""); - } - }) - } else { - callback(""); - } - }, - - /** - * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory - * - * @param entry - */ - deleteFile : function(/*Object*/entry) { // @TODO: test deleteFile - var item = getEntry(entry); - if (item) { - _zip.deleteEntry(item.entryName); - } - }, - - /** - * Adds a comment to the zip. The zip must be rewritten after adding the comment. - * - * @param comment - */ - addZipComment : function(/*String*/comment) { // @TODO: test addZipComment - _zip.comment = comment; - }, - - /** - * Returns the zip comment - * - * @return String - */ - getZipComment : function() { - return _zip.comment || ''; - }, - - /** - * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment - * The comment cannot exceed 65535 characters in length - * - * @param entry - * @param comment - */ - addZipEntryComment : function(/*Object*/entry,/*String*/comment) { - var item = getEntry(entry); - if (item) { - item.comment = comment; - } - }, - - /** - * Returns the comment of the specified entry - * - * @param entry - * @return String - */ - getZipEntryComment : function(/*Object*/entry) { - var item = getEntry(entry); - if (item) { - return item.comment || ''; - } - return '' - }, - - /** - * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content - * - * @param entry - * @param content - */ - updateFile : function(/*Object*/entry, /*Buffer*/content) { - var item = getEntry(entry); - if (item) { - item.setData(content); - } - }, - - /** - * Adds a file from the disk to the archive - * - * @param localPath - */ - addLocalFile : function(/*String*/localPath, /*String*/zipPath) { - if (fs.existsSync(localPath)) { - if(zipPath){ - zipPath=zipPath.split("\\").join("/"); - if(zipPath.charAt(zipPath.length - 1) != "/"){ - zipPath += "/"; - } - }else{ - zipPath=""; - } - var p = localPath.split("\\").join("/").split("/").pop(); - - this.addFile(zipPath+p, fs.readFileSync(localPath), "", 0) - } else { - throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); - } - }, - - /** - * Adds a local directory and all its nested files and directories to the archive - * - * @param localPath - */ - addLocalFolder : function(/*String*/localPath, /*String*/zipPath) { - if(zipPath){ - zipPath=zipPath.split("\\").join("/"); - if(zipPath.charAt(zipPath.length - 1) != "/"){ - zipPath += "/"; - } - }else{ - zipPath=""; - } - localPath = localPath.split("\\").join("/"); //windows fix - if (localPath.charAt(localPath.length - 1) != "/") - localPath += "/"; - - if (fs.existsSync(localPath)) { - - var items = Utils.findFiles(localPath), - self = this; - - if (items.length) { - items.forEach(function(path) { - var p = path.split("\\").join("/").replace(localPath, ""); //windows fix - if (p.charAt(p.length - 1) !== "/") { - self.addFile(zipPath+p, fs.readFileSync(path), "", 0) - } else { - self.addFile(zipPath+p, new Buffer(0), "", 0) - } - }); - } - } else { - throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); - } - }, - - /** - * Allows you to create a entry (file or directory) in the zip file. - * If you want to create a directory the entryName must end in / and a null buffer should be provided. - * Comment and attributes are optional - * - * @param entryName - * @param content - * @param comment - * @param attr - */ - addFile : function(/*String*/entryName, /*Buffer*/content, /*String*/comment, /*Number*/attr) { - var entry = new ZipEntry(); - entry.entryName = entryName; - entry.comment = comment || ""; - entry.attr = attr || 438; //0666; - if (entry.isDirectory && content.length) { - // throw Utils.Errors.DIRECTORY_CONTENT_ERROR; - } - entry.setData(content); - _zip.setEntry(entry); - }, - - /** - * Returns an array of ZipEntry objects representing the files and folders inside the archive - * - * @return Array - */ - getEntries : function() { - if (_zip) { - return _zip.entries; - } else { - return []; - } - }, - - /** - * Returns a ZipEntry object representing the file or folder specified by ``name``. - * - * @param name - * @return ZipEntry - */ - getEntry : function(/*String*/name) { - return getEntry(name); - }, - - /** - * Extracts the given entry to the given targetPath - * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted - * - * @param entry ZipEntry object or String with the full path of the entry - * @param targetPath Target folder where to write the file - * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder - * will be created in targetPath as well. Default is TRUE - * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. - * Default is FALSE - * - * @return Boolean - */ - extractEntryTo : function(/*Object*/entry, /*String*/targetPath, /*Boolean*/maintainEntryPath, /*Boolean*/overwrite) { - overwrite = overwrite || false; - maintainEntryPath = typeof maintainEntryPath == "undefined" ? true : maintainEntryPath; - - var item = getEntry(entry); - if (!item) { - throw Utils.Errors.NO_ENTRY; - } - - var target = pth.resolve(targetPath, maintainEntryPath ? item.entryName : pth.basename(item.entryName)); - - if (item.isDirectory) { - target = pth.resolve(target, ".."); - var children = _zip.getEntryChildren(item); - children.forEach(function(child) { - if (child.isDirectory) return; - var content = child.getData(); - if (!content) { - throw Utils.Errors.CANT_EXTRACT_FILE; - } - Utils.writeFileTo(pth.resolve(targetPath, maintainEntryPath ? child.entryName : child.entryName.substr(item.entryName.length)), content, overwrite); - }); - return true; - } - - var content = item.getData(); - if (!content) throw Utils.Errors.CANT_EXTRACT_FILE; - - if (fs.existsSync(targetPath) && !overwrite) { - throw Utils.Errors.CANT_OVERRIDE; - } - Utils.writeFileTo(target, content, overwrite); - - return true; - }, - - /** - * Extracts the entire archive to the given location - * - * @param targetPath Target location - * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. - * Default is FALSE - */ - extractAllTo : function(/*String*/targetPath, /*Boolean*/overwrite) { - overwrite = overwrite || false; - if (!_zip) { - throw Utils.Errors.NO_ZIP; - } - - _zip.entries.forEach(function(entry) { - if (entry.isDirectory) { - Utils.makeDir(pth.resolve(targetPath, entry.entryName.toString())); - return; - } - var content = entry.getData(); - if (!content) { - throw Utils.Errors.CANT_EXTRACT_FILE + "2"; - } - Utils.writeFileTo(pth.resolve(targetPath, entry.entryName.toString()), content, overwrite); - }) - }, - - /** - * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip - * - * @param targetFileName - * @param callback - */ - writeZip : function(/*String*/targetFileName, /*Function*/callback) { - if (arguments.length == 1) { - if (typeof targetFileName == "function") { - callback = targetFileName; - targetFileName = ""; - } - } - - if (!targetFileName && _filename) { - targetFileName = _filename; - } - if (!targetFileName) return; - - var zipData = _zip.compressToBuffer(); - if (zipData) { - Utils.writeFileTo(targetFileName, zipData, true); - } - }, - - /** - * Returns the content of the entire zip file as a Buffer object - * - * @return Buffer - */ - toBuffer : function(/*Function*/onSuccess,/*Function*/onFail,/*Function*/onItemStart,/*Function*/onItemEnd) { - this.valueOf = 2; - if (typeof onSuccess == "function") { - _zip.toAsyncBuffer(onSuccess,onFail,onItemStart,onItemEnd); - return null; - } - return _zip.compressToBuffer() - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/entryHeader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/entryHeader.js deleted file mode 100644 index a29c70f1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/entryHeader.js +++ /dev/null @@ -1,261 +0,0 @@ -var Utils = require("../util"), - Constants = Utils.Constants; - -/* The central directory file header */ -module.exports = function () { - var _verMade = 0x0A, - _version = 0x0A, - _flags = 0, - _method = 0, - _time = 0, - _crc = 0, - _compressedSize = 0, - _size = 0, - _fnameLen = 0, - _extraLen = 0, - - _comLen = 0, - _diskStart = 0, - _inattr = 0, - _attr = 0, - _offset = 0; - - var _dataHeader = {}; - - function setTime(val) { - var val = new Date(val); - _time = (val.getFullYear() - 1980 & 0x7f) << 25 // b09-16 years from 1980 - | (val.getMonth() + 1) << 21 // b05-08 month - | val.getDay() << 16 // b00-04 hour - - // 2 bytes time - | val.getHours() << 11 // b11-15 hour - | val.getMinutes() << 5 // b05-10 minute - | val.getSeconds() >> 1; // b00-04 seconds divided by 2 - } - - setTime(+new Date()); - - return { - get made () { return _verMade; }, - set made (val) { _verMade = val; }, - - get version () { return _version; }, - set version (val) { _version = val }, - - get flags () { return _flags }, - set flags (val) { _flags = val; }, - - get method () { return _method; }, - set method (val) { _method = val; }, - - get time () { return new Date( - ((_time >> 25) & 0x7f) + 1980, - ((_time >> 21) & 0x0f) - 1, - (_time >> 16) & 0x1f, - (_time >> 11) & 0x1f, - (_time >> 5) & 0x3f, - (_time & 0x1f) << 1 - ); - }, - set time (val) { - setTime(val); - }, - - get crc () { return _crc; }, - set crc (val) { _crc = val; }, - - get compressedSize () { return _compressedSize; }, - set compressedSize (val) { _compressedSize = val; }, - - get size () { return _size; }, - set size (val) { _size = val; }, - - get fileNameLength () { return _fnameLen; }, - set fileNameLength (val) { _fnameLen = val; }, - - get extraLength () { return _extraLen }, - set extraLength (val) { _extraLen = val; }, - - get commentLength () { return _comLen }, - set commentLength (val) { _comLen = val }, - - get diskNumStart () { return _diskStart }, - set diskNumStart (val) { _diskStart = val }, - - get inAttr () { return _inattr }, - set inAttr (val) { _inattr = val }, - - get attr () { return _attr }, - set attr (val) { _attr = val }, - - get offset () { return _offset }, - set offset (val) { _offset = val }, - - get encripted () { return (_flags & 1) == 1 }, - - get entryHeaderSize () { - return Constants.CENHDR + _fnameLen + _extraLen + _comLen; - }, - - get realDataOffset () { - return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen; - }, - - get dataHeader () { - return _dataHeader; - }, - - loadDataHeaderFromBinary : function(/*Buffer*/input) { - var data = input.slice(_offset, _offset + Constants.LOCHDR); - // 30 bytes and should start with "PK\003\004" - if (data.readUInt32LE(0) != Constants.LOCSIG) { - throw Utils.Errors.INVALID_LOC; - } - _dataHeader = { - // version needed to extract - version : data.readUInt16LE(Constants.LOCVER), - // general purpose bit flag - flags : data.readUInt16LE(Constants.LOCFLG), - // compression method - method : data.readUInt16LE(Constants.LOCHOW), - // modification time (2 bytes time, 2 bytes date) - time : data.readUInt32LE(Constants.LOCTIM), - // uncompressed file crc-32 value - crc : data.readUInt32LE(Constants.LOCCRC), - // compressed size - compressedSize : data.readUInt32LE(Constants.LOCSIZ), - // uncompressed size - size : data.readUInt32LE(Constants.LOCLEN), - // filename length - fnameLen : data.readUInt16LE(Constants.LOCNAM), - // extra field length - extraLen : data.readUInt16LE(Constants.LOCEXT) - } - }, - - loadFromBinary : function(/*Buffer*/data) { - // data should be 46 bytes and start with "PK 01 02" - if (data.length != Constants.CENHDR || data.readUInt32LE(0) != Constants.CENSIG) { - throw Utils.Errors.INVALID_CEN; - } - // version made by - _verMade = data.readUInt16LE(Constants.CENVEM); - // version needed to extract - _version = data.readUInt16LE(Constants.CENVER); - // encrypt, decrypt flags - _flags = data.readUInt16LE(Constants.CENFLG); - // compression method - _method = data.readUInt16LE(Constants.CENHOW); - // modification time (2 bytes time, 2 bytes date) - _time = data.readUInt32LE(Constants.CENTIM); - // uncompressed file crc-32 value - _crc = data.readUInt32LE(Constants.CENCRC); - // compressed size - _compressedSize = data.readUInt32LE(Constants.CENSIZ); - // uncompressed size - _size = data.readUInt32LE(Constants.CENLEN); - // filename length - _fnameLen = data.readUInt16LE(Constants.CENNAM); - // extra field length - _extraLen = data.readUInt16LE(Constants.CENEXT); - // file comment length - _comLen = data.readUInt16LE(Constants.CENCOM); - // volume number start - _diskStart = data.readUInt16LE(Constants.CENDSK); - // internal file attributes - _inattr = data.readUInt16LE(Constants.CENATT); - // external file attributes - _attr = data.readUInt32LE(Constants.CENATX); - // LOC header offset - _offset = data.readUInt32LE(Constants.CENOFF); - }, - - dataHeaderToBinary : function() { - // LOC header size (30 bytes) - var data = new Buffer(Constants.LOCHDR); - // "PK\003\004" - data.writeUInt32LE(Constants.LOCSIG, 0); - // version needed to extract - data.writeUInt16LE(_version, Constants.LOCVER); - // general purpose bit flag - data.writeUInt16LE(_flags, Constants.LOCFLG); - // compression method - data.writeUInt16LE(_method, Constants.LOCHOW); - // modification time (2 bytes time, 2 bytes date) - data.writeUInt32LE(_time, Constants.LOCTIM); - // uncompressed file crc-32 value - data.writeUInt32LE(_crc, Constants.LOCCRC); - // compressed size - data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); - // uncompressed size - data.writeUInt32LE(_size, Constants.LOCLEN); - // filename length - data.writeUInt16LE(_fnameLen, Constants.LOCNAM); - // extra field length - data.writeUInt16LE(_extraLen, Constants.LOCEXT); - return data; - }, - - entryHeaderToBinary : function() { - // CEN header size (46 bytes) - var data = new Buffer(Constants.CENHDR + _fnameLen + _extraLen + _comLen); - // "PK\001\002" - data.writeUInt32LE(Constants.CENSIG, 0); - // version made by - data.writeUInt16LE(_verMade, Constants.CENVEM); - // version needed to extract - data.writeUInt16LE(_version, Constants.CENVER); - // encrypt, decrypt flags - data.writeUInt16LE(_flags, Constants.CENFLG); - // compression method - data.writeUInt16LE(_method, Constants.CENHOW); - // modification time (2 bytes time, 2 bytes date) - data.writeUInt32LE(_time, Constants.CENTIM); - // uncompressed file crc-32 value - data.writeInt32LE(_crc, Constants.CENCRC, true); - // compressed size - data.writeUInt32LE(_compressedSize, Constants.CENSIZ); - // uncompressed size - data.writeUInt32LE(_size, Constants.CENLEN); - // filename length - data.writeUInt16LE(_fnameLen, Constants.CENNAM); - // extra field length - data.writeUInt16LE(_extraLen, Constants.CENEXT); - // file comment length - data.writeUInt16LE(_comLen, Constants.CENCOM); - // volume number start - data.writeUInt16LE(_diskStart, Constants.CENDSK); - // internal file attributes - data.writeUInt16LE(_inattr, Constants.CENATT); - // external file attributes - data.writeUInt32LE(_attr, Constants.CENATX); - // LOC header offset - data.writeUInt32LE(_offset, Constants.CENOFF); - // fill all with - data.fill(0x00, Constants.CENHDR); - return data; - }, - - toString : function() { - return '{\n' + - '\t"made" : ' + _verMade + ",\n" + - '\t"version" : ' + _version + ",\n" + - '\t"flags" : ' + _flags + ",\n" + - '\t"method" : ' + Utils.methodToString(_method) + ",\n" + - '\t"time" : ' + _time + ",\n" + - '\t"crc" : 0x' + _crc.toString(16).toUpperCase() + ",\n" + - '\t"compressedSize" : ' + _compressedSize + " bytes,\n" + - '\t"size" : ' + _size + " bytes,\n" + - '\t"fileNameLength" : ' + _fnameLen + ",\n" + - '\t"extraLength" : ' + _extraLen + " bytes,\n" + - '\t"commentLength" : ' + _comLen + " bytes,\n" + - '\t"diskNumStart" : ' + _diskStart + ",\n" + - '\t"inAttr" : ' + _inattr + ",\n" + - '\t"attr" : ' + _attr + ",\n" + - '\t"offset" : ' + _offset + ",\n" + - '\t"entryHeaderSize" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + " bytes\n" + - '}'; - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/index.js deleted file mode 100644 index b8c67b96..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.EntryHeader = require("./entryHeader"); -exports.MainHeader = require("./mainHeader"); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/mainHeader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/mainHeader.js deleted file mode 100644 index 002bc8a7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/headers/mainHeader.js +++ /dev/null @@ -1,80 +0,0 @@ -var Utils = require("../util"), - Constants = Utils.Constants; - -/* The entries in the end of central directory */ -module.exports = function () { - var _volumeEntries = 0, - _totalEntries = 0, - _size = 0, - _offset = 0, - _commentLength = 0; - - return { - get diskEntries () { return _volumeEntries }, - set diskEntries (/*Number*/val) { _volumeEntries = _totalEntries = val; }, - - get totalEntries () { return _totalEntries }, - set totalEntries (/*Number*/val) { _totalEntries = _volumeEntries = val; }, - - get size () { return _size }, - set size (/*Number*/val) { _size = val; }, - - get offset () { return _offset }, - set offset (/*Number*/val) { _offset = val; }, - - get commentLength () { return _commentLength }, - set commentLength (/*Number*/val) { _commentLength = val; }, - - get mainHeaderSize () { - return Constants.ENDHDR + _commentLength; - }, - - loadFromBinary : function(/*Buffer*/data) { - // data should be 22 bytes and start with "PK 05 06" - if (data.length != Constants.ENDHDR || data.readUInt32LE(0) != Constants.ENDSIG) - throw Utils.Errors.INVALID_END; - - // number of entries on this volume - _volumeEntries = data.readUInt16LE(Constants.ENDSUB); - // total number of entries - _totalEntries = data.readUInt16LE(Constants.ENDTOT); - // central directory size in bytes - _size = data.readUInt32LE(Constants.ENDSIZ); - // offset of first CEN header - _offset = data.readUInt32LE(Constants.ENDOFF); - // zip file comment length - _commentLength = data.readUInt16LE(Constants.ENDCOM); - }, - - toBinary : function() { - var b = new Buffer(Constants.ENDHDR + _commentLength); - // "PK 05 06" signature - b.writeUInt32LE(Constants.ENDSIG, 0); - b.writeUInt32LE(0, 4); - // number of entries on this volume - b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); - // total number of entries - b.writeUInt16LE(_totalEntries, Constants.ENDTOT); - // central directory size in bytes - b.writeUInt32LE(_size, Constants.ENDSIZ); - // offset of first CEN header - b.writeUInt32LE(_offset, Constants.ENDOFF); - // zip file comment length - b.writeUInt16LE(_commentLength, Constants.ENDCOM); - // fill comment memory with spaces so no garbage is left there - b.fill(" ", Constants.ENDHDR); - - return b; - }, - - toString : function() { - return '{\n' + - '\t"diskEntries" : ' + _volumeEntries + ",\n" + - '\t"totalEntries" : ' + _totalEntries + ",\n" + - '\t"size" : ' + _size + " bytes,\n" + - '\t"offset" : 0x' + _offset.toString(16).toUpperCase() + ",\n" + - '\t"commentLength" : 0x' + _commentLength + "\n" + - '}'; - } - } -}; \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/deflater.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/deflater.js deleted file mode 100644 index 32679434..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/deflater.js +++ /dev/null @@ -1,1578 +0,0 @@ -/* - * $Id: rawdeflate.js,v 0.5 2013/04/09 14:25:38 dankogai Exp dankogai $ - * - * GNU General Public License, version 2 (GPL-2.0) - * http://opensource.org/licenses/GPL-2.0 - * Original: - * http://www.onicos.com/staff/iz/amuse/javascript/expert/deflate.txt - */ -function JSDeflater(/*inbuff*/inbuf) { - - /* Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp> - * Version: 1.0.1 - * LastModified: Dec 25 1999 - */ - - var WSIZE = 32768, // Sliding Window size - zip_STORED_BLOCK = 0, - zip_STATIC_TREES = 1, - zip_DYN_TREES = 2, - zip_DEFAULT_LEVEL = 6, - zip_FULL_SEARCH = true, - zip_INBUFSIZ = 32768, // Input buffer size - zip_INBUF_EXTRA = 64, // Extra buffer - zip_OUTBUFSIZ = 1024 * 8, - zip_window_size = 2 * WSIZE, - MIN_MATCH = 3, - MAX_MATCH = 258, - zip_BITS = 16, - LIT_BUFSIZE = 0x2000, - zip_HASH_BITS = 13, - zip_DIST_BUFSIZE = LIT_BUFSIZE, - zip_HASH_SIZE = 1 << zip_HASH_BITS, - zip_HASH_MASK = zip_HASH_SIZE - 1, - zip_WMASK = WSIZE - 1, - zip_NIL = 0, // Tail of hash chains - zip_TOO_FAR = 4096, - zip_MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1, - zip_MAX_DIST = WSIZE - zip_MIN_LOOKAHEAD, - zip_SMALLEST = 1, - zip_MAX_BITS = 15, - zip_MAX_BL_BITS = 7, - zip_LENGTH_CODES = 29, - zip_LITERALS = 256, - zip_END_BLOCK = 256, - zip_L_CODES = zip_LITERALS + 1 + zip_LENGTH_CODES, - zip_D_CODES = 30, - zip_BL_CODES = 19, - zip_REP_3_6 = 16, - zip_REPZ_3_10 = 17, - zip_REPZ_11_138 = 18, - zip_HEAP_SIZE = 2 * zip_L_CODES + 1, - zip_H_SHIFT = parseInt((zip_HASH_BITS + MIN_MATCH - 1) / MIN_MATCH); - - var zip_free_queue, zip_qhead, zip_qtail, zip_initflag, zip_outbuf = null, zip_outcnt, zip_outoff, zip_complete, - zip_window, zip_d_buf, zip_l_buf, zip_prev, zip_bi_buf, zip_bi_valid, zip_block_start, zip_ins_h, zip_hash_head, - zip_prev_match, zip_match_available, zip_match_length, zip_prev_length, zip_strstart, zip_match_start, zip_eofile, - zip_lookahead, zip_max_chain_length, zip_max_lazy_match, zip_compr_level, zip_good_match, zip_nice_match, - zip_dyn_ltree, zip_dyn_dtree, zip_static_ltree, zip_static_dtree, zip_bl_tree, zip_l_desc, zip_d_desc, zip_bl_desc, - zip_bl_count, zip_heap, zip_heap_len, zip_heap_max, zip_depth, zip_length_code, zip_dist_code, zip_base_length, - zip_base_dist, zip_flag_buf, zip_last_lit, zip_last_dist, zip_last_flags, zip_flags, zip_flag_bit, zip_opt_len, - zip_static_len, zip_deflate_data, zip_deflate_pos; - - var zip_DeflateCT = function () { - this.fc = 0; // frequency count or bit string - this.dl = 0; // father node in Huffman tree or length of bit string - }; - - var zip_DeflateTreeDesc = function () { - this.dyn_tree = null; // the dynamic tree - this.static_tree = null; // corresponding static tree or NULL - this.extra_bits = null; // extra bits for each code or NULL - this.extra_base = 0; // base index for extra_bits - this.elems = 0; // max number of elements in the tree - this.max_length = 0; // max bit length for the codes - this.max_code = 0; // largest code with non zero frequency - }; - - /* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ - var zip_DeflateConfiguration = function (a, b, c, d) { - this.good_length = a; // reduce lazy search above this match length - this.max_lazy = b; // do not perform lazy search above this match length - this.nice_length = c; // quit search above this match length - this.max_chain = d; - }; - - var zip_DeflateBuffer = function () { - this.next = null; - this.len = 0; - this.ptr = new Array(zip_OUTBUFSIZ); - this.off = 0; - }; - - /* constant tables */ - var zip_extra_lbits = new Array( - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0); - var zip_extra_dbits = new Array( - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13); - var zip_extra_blbits = new Array( - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7); - var zip_bl_order = new Array( - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15); - var zip_configuration_table = new Array( - new zip_DeflateConfiguration(0, 0, 0, 0), - new zip_DeflateConfiguration(4, 4, 8, 4), - new zip_DeflateConfiguration(4, 5, 16, 8), - new zip_DeflateConfiguration(4, 6, 32, 32), - new zip_DeflateConfiguration(4, 4, 16, 16), - new zip_DeflateConfiguration(8, 16, 32, 32), - new zip_DeflateConfiguration(8, 16, 128, 128), - new zip_DeflateConfiguration(8, 32, 128, 256), - new zip_DeflateConfiguration(32, 128, 258, 1024), - new zip_DeflateConfiguration(32, 258, 258, 4096)); - - - /* routines (deflate) */ - - var zip_deflate_start = function (level) { - var i; - - if (!level) - level = zip_DEFAULT_LEVEL; - else if (level < 1) - level = 1; - else if (level > 9) - level = 9; - - zip_compr_level = level; - zip_initflag = false; - zip_eofile = false; - if (zip_outbuf != null) - return; - - zip_free_queue = zip_qhead = zip_qtail = null; - zip_outbuf = new Array(zip_OUTBUFSIZ); - zip_window = new Array(zip_window_size); - zip_d_buf = new Array(zip_DIST_BUFSIZE); - zip_l_buf = new Array(zip_INBUFSIZ + zip_INBUF_EXTRA); - zip_prev = new Array(1 << zip_BITS); - zip_dyn_ltree = new Array(zip_HEAP_SIZE); - for (i = 0; i < zip_HEAP_SIZE; i++) zip_dyn_ltree[i] = new zip_DeflateCT(); - zip_dyn_dtree = new Array(2 * zip_D_CODES + 1); - for (i = 0; i < 2 * zip_D_CODES + 1; i++) zip_dyn_dtree[i] = new zip_DeflateCT(); - zip_static_ltree = new Array(zip_L_CODES + 2); - for (i = 0; i < zip_L_CODES + 2; i++) zip_static_ltree[i] = new zip_DeflateCT(); - zip_static_dtree = new Array(zip_D_CODES); - for (i = 0; i < zip_D_CODES; i++) zip_static_dtree[i] = new zip_DeflateCT(); - zip_bl_tree = new Array(2 * zip_BL_CODES + 1); - for (i = 0; i < 2 * zip_BL_CODES + 1; i++) zip_bl_tree[i] = new zip_DeflateCT(); - zip_l_desc = new zip_DeflateTreeDesc(); - zip_d_desc = new zip_DeflateTreeDesc(); - zip_bl_desc = new zip_DeflateTreeDesc(); - zip_bl_count = new Array(zip_MAX_BITS + 1); - zip_heap = new Array(2 * zip_L_CODES + 1); - zip_depth = new Array(2 * zip_L_CODES + 1); - zip_length_code = new Array(MAX_MATCH - MIN_MATCH + 1); - zip_dist_code = new Array(512); - zip_base_length = new Array(zip_LENGTH_CODES); - zip_base_dist = new Array(zip_D_CODES); - zip_flag_buf = new Array(parseInt(LIT_BUFSIZE / 8)); - }; - - var zip_deflate_end = function () { - zip_free_queue = zip_qhead = zip_qtail = null; - zip_outbuf = null; - zip_window = null; - zip_d_buf = null; - zip_l_buf = null; - zip_prev = null; - zip_dyn_ltree = null; - zip_dyn_dtree = null; - zip_static_ltree = null; - zip_static_dtree = null; - zip_bl_tree = null; - zip_l_desc = null; - zip_d_desc = null; - zip_bl_desc = null; - zip_bl_count = null; - zip_heap = null; - zip_depth = null; - zip_length_code = null; - zip_dist_code = null; - zip_base_length = null; - zip_base_dist = null; - zip_flag_buf = null; - }; - - var zip_reuse_queue = function (p) { - p.next = zip_free_queue; - zip_free_queue = p; - }; - - var zip_new_queue = function () { - var p; - - if (zip_free_queue != null) { - p = zip_free_queue; - zip_free_queue = zip_free_queue.next; - } - else - p = new zip_DeflateBuffer(); - p.next = null; - p.len = p.off = 0; - - return p; - }; - - var zip_head1 = function (i) { - return zip_prev[WSIZE + i]; - }; - - var zip_head2 = function (i, val) { - return zip_prev[WSIZE + i] = val; - }; - - /* put_byte is used for the compressed output, put_ubyte for the - * uncompressed output. However unlzw() uses window for its - * suffix table instead of its output buffer, so it does not use put_ubyte - * (to be cleaned up). - */ - var zip_put_byte = function (c) { - zip_outbuf[zip_outoff + zip_outcnt++] = c; - if (zip_outoff + zip_outcnt == zip_OUTBUFSIZ) - zip_qoutbuf(); - }; - - /* Output a 16 bit value, lsb first */ - var zip_put_short = function (w) { - w &= 0xffff; - if (zip_outoff + zip_outcnt < zip_OUTBUFSIZ - 2) { - zip_outbuf[zip_outoff + zip_outcnt++] = (w & 0xff); - zip_outbuf[zip_outoff + zip_outcnt++] = (w >>> 8); - } else { - zip_put_byte(w & 0xff); - zip_put_byte(w >>> 8); - } - }; - - /* ========================================================================== - * Insert string s in the dictionary and set match_head to the previous head - * of the hash chain (the most recent string with same hash key). Return - * the previous length of the hash chain. - * IN assertion: all calls to to INSERT_STRING are made with consecutive - * input characters and the first MIN_MATCH bytes of s are valid - * (except for the last MIN_MATCH-1 bytes of the input file). - */ - var zip_INSERT_STRING = function () { - zip_ins_h = ((zip_ins_h << zip_H_SHIFT) - ^ (zip_window[zip_strstart + MIN_MATCH - 1] & 0xff)) - & zip_HASH_MASK; - zip_hash_head = zip_head1(zip_ins_h); - zip_prev[zip_strstart & zip_WMASK] = zip_hash_head; - zip_head2(zip_ins_h, zip_strstart); - }; - - /* Send a code of the given tree. c and tree must not have side effects */ - var zip_SEND_CODE = function (c, tree) { - zip_send_bits(tree[c].fc, tree[c].dl); - }; - - /* Mapping from a distance to a distance code. dist is the distance - 1 and - * must not have side effects. dist_code[256] and dist_code[257] are never - * used. - */ - var zip_D_CODE = function (dist) { - return (dist < 256 ? zip_dist_code[dist] - : zip_dist_code[256 + (dist >> 7)]) & 0xff; - }; - - /* ========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ - var zip_SMALLER = function (tree, n, m) { - return tree[n].fc < tree[m].fc || - (tree[n].fc == tree[m].fc && zip_depth[n] <= zip_depth[m]); - }; - - /* ========================================================================== - * read string data - */ - var zip_read_buff = function (buff, offset, n) { - var i; - for (i = 0; i < n && zip_deflate_pos < zip_deflate_data.length; i++) - buff[offset + i] = - zip_deflate_data[zip_deflate_pos++] & 0xff; - return i; - }; - - /* ========================================================================== - * Initialize the "longest match" routines for a new file - */ - var zip_lm_init = function () { - var j; - - /* Initialize the hash table. */ - for (j = 0; j < zip_HASH_SIZE; j++) - zip_prev[WSIZE + j] = 0; - zip_max_lazy_match = zip_configuration_table[zip_compr_level].max_lazy; - zip_good_match = zip_configuration_table[zip_compr_level].good_length; - if (!zip_FULL_SEARCH) - zip_nice_match = zip_configuration_table[zip_compr_level].nice_length; - zip_max_chain_length = zip_configuration_table[zip_compr_level].max_chain; - - zip_strstart = 0; - zip_block_start = 0; - - zip_lookahead = zip_read_buff(zip_window, 0, 2 * WSIZE); - if (zip_lookahead <= 0) { - zip_eofile = true; - zip_lookahead = 0; - return; - } - zip_eofile = false; - /* Make sure that we always have enough lookahead. This is important - * if input comes from a device such as a tty. - */ - while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) - zip_fill_window(); - - /* If lookahead < MIN_MATCH, ins_h is garbage, but this is - * not important since only literal bytes will be emitted. - */ - zip_ins_h = 0; - for (j = 0; j < MIN_MATCH - 1; j++) { - zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[j] & 0xff)) & zip_HASH_MASK; - } - }; - - /* ========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - */ - var zip_longest_match = function (cur_match) { - var chain_length = zip_max_chain_length; // max hash chain length - var scanp = zip_strstart; // current string - var matchp; // matched string - var len; // length of current match - var best_len = zip_prev_length; // best match length so far - - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - var limit = (zip_strstart > zip_MAX_DIST ? zip_strstart - zip_MAX_DIST : zip_NIL); - - var strendp = zip_strstart + MAX_MATCH; - var scan_end1 = zip_window[scanp + best_len - 1]; - var scan_end = zip_window[scanp + best_len]; - - /* Do not waste too much time if we already have a good match: */ - if (zip_prev_length >= zip_good_match) - chain_length >>= 2; - - do { - matchp = cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2: - */ - if (zip_window[matchp + best_len] != scan_end || - zip_window[matchp + best_len - 1] != scan_end1 || - zip_window[matchp] != zip_window[scanp] || - zip_window[++matchp] != zip_window[scanp + 1]) { - continue; - } - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scanp += 2; - matchp++; - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - } while (zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - scanp < strendp); - - len = MAX_MATCH - (strendp - scanp); - scanp = strendp - MAX_MATCH; - - if (len > best_len) { - zip_match_start = cur_match; - best_len = len; - if (zip_FULL_SEARCH) { - if (len >= MAX_MATCH) break; - } else { - if (len >= zip_nice_match) break; - } - - scan_end1 = zip_window[scanp + best_len - 1]; - scan_end = zip_window[scanp + best_len]; - } - } while ((cur_match = zip_prev[cur_match & zip_WMASK]) > limit - && --chain_length != 0); - - return best_len; - }; - - /* ========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead, and sets eofile if end of input file. - * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0 - * OUT assertions: at least one byte has been read, or eofile is set; - * file reads are performed for at least two bytes (required for the - * translate_eol option). - */ - var zip_fill_window = function () { - var n, m; - - // Amount of free space at the end of the window. - var more = zip_window_size - zip_lookahead - zip_strstart; - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (more == -1) { - /* Very unlikely, but possible on 16 bit machine if strstart == 0 - * and lookahead == 1 (input done one byte at time) - */ - more--; - } else if (zip_strstart >= WSIZE + zip_MAX_DIST) { - /* By the IN assertion, the window is not empty so we can't confuse - * more == 0 with more == 64K on a 16 bit machine. - */ - for (n = 0; n < WSIZE; n++) - zip_window[n] = zip_window[n + WSIZE]; - - zip_match_start -= WSIZE; - zip_strstart -= WSIZE; - /* we now have strstart >= MAX_DIST: */ - zip_block_start -= WSIZE; - - for (n = 0; n < zip_HASH_SIZE; n++) { - m = zip_head1(n); - zip_head2(n, m >= WSIZE ? m - WSIZE : zip_NIL); - } - for (n = 0; n < WSIZE; n++) { - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - m = zip_prev[n]; - zip_prev[n] = (m >= WSIZE ? m - WSIZE : zip_NIL); - } - more += WSIZE; - } - // At this point, more >= 2 - if (!zip_eofile) { - n = zip_read_buff(zip_window, zip_strstart + zip_lookahead, more); - if (n <= 0) - zip_eofile = true; - else - zip_lookahead += n; - } - }; - - /* ========================================================================== - * Processes a new input file and return its compressed length. This - * function does not perform lazy evaluationof matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ - var zip_deflate_fast = function () { - while (zip_lookahead != 0 && zip_qhead == null) { - var flush; // set if current block must be flushed - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - zip_INSERT_STRING(); - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if (zip_hash_head != zip_NIL && - zip_strstart - zip_hash_head <= zip_MAX_DIST) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - zip_match_length = zip_longest_match(zip_hash_head); - /* longest_match() sets match_start */ - if (zip_match_length > zip_lookahead) - zip_match_length = zip_lookahead; - } - if (zip_match_length >= MIN_MATCH) { - flush = zip_ct_tally(zip_strstart - zip_match_start, - zip_match_length - MIN_MATCH); - zip_lookahead -= zip_match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ - if (zip_match_length <= zip_max_lazy_match) { - zip_match_length--; // string at strstart already in hash table - do { - zip_strstart++; - zip_INSERT_STRING(); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH - * these bytes are garbage, but it does not matter since - * the next lookahead bytes will be emitted as literals. - */ - } while (--zip_match_length != 0); - zip_strstart++; - } else { - zip_strstart += zip_match_length; - zip_match_length = 0; - zip_ins_h = zip_window[zip_strstart] & 0xff; - zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[zip_strstart + 1] & 0xff)) & zip_HASH_MASK; - } - } else { - /* No match, output a literal byte */ - flush = zip_ct_tally(0, zip_window[zip_strstart] & 0xff); - zip_lookahead--; - zip_strstart++; - } - if (flush) { - zip_flush_block(0); - zip_block_start = zip_strstart; - } - - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) - zip_fill_window(); - } - }; - - var zip_deflate_better = function () { - /* Process the input block. */ - while (zip_lookahead != 0 && zip_qhead == null) { - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - zip_INSERT_STRING(); - - /* Find the longest match, discarding those <= prev_length. - */ - zip_prev_length = zip_match_length; - zip_prev_match = zip_match_start; - zip_match_length = MIN_MATCH - 1; - - if (zip_hash_head != zip_NIL && - zip_prev_length < zip_max_lazy_match && - zip_strstart - zip_hash_head <= zip_MAX_DIST) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - zip_match_length = zip_longest_match(zip_hash_head); - /* longest_match() sets match_start */ - if (zip_match_length > zip_lookahead) - zip_match_length = zip_lookahead; - - /* Ignore a length 3 match if it is too distant: */ - if (zip_match_length == MIN_MATCH && - zip_strstart - zip_match_start > zip_TOO_FAR) { - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - zip_match_length--; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if (zip_prev_length >= MIN_MATCH && - zip_match_length <= zip_prev_length) { - var flush; // set if current block must be flushed - flush = zip_ct_tally(zip_strstart - 1 - zip_prev_match, - zip_prev_length - MIN_MATCH); - - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. - */ - zip_lookahead -= zip_prev_length - 1; - zip_prev_length -= 2; - do { - zip_strstart++; - zip_INSERT_STRING(); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH - * these bytes are garbage, but it does not matter since the - * next lookahead bytes will always be emitted as literals. - */ - } while (--zip_prev_length != 0); - zip_match_available = 0; - zip_match_length = MIN_MATCH - 1; - zip_strstart++; - if (flush) { - zip_flush_block(0); - zip_block_start = zip_strstart; - } - } else if (zip_match_available != 0) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - if (zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff)) { - zip_flush_block(0); - zip_block_start = zip_strstart; - } - zip_strstart++; - zip_lookahead--; - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - zip_match_available = 1; - zip_strstart++; - zip_lookahead--; - } - - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) - zip_fill_window(); - } - }; - - var zip_init_deflate = function () { - if (zip_eofile) - return; - zip_bi_buf = 0; - zip_bi_valid = 0; - zip_ct_init(); - zip_lm_init(); - - zip_qhead = null; - zip_outcnt = 0; - zip_outoff = 0; - zip_match_available = 0; - - if (zip_compr_level <= 3) { - zip_prev_length = MIN_MATCH - 1; - zip_match_length = 0; - } - else { - zip_match_length = MIN_MATCH - 1; - zip_match_available = 0; - zip_match_available = 0; - } - - zip_complete = false; - }; - - /* ========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ - var zip_deflate_internal = function (buff, off, buff_size) { - var n; - - if (!zip_initflag) { - zip_init_deflate(); - zip_initflag = true; - if (zip_lookahead == 0) { // empty - zip_complete = true; - return 0; - } - } - - if ((n = zip_qcopy(buff, off, buff_size)) == buff_size) - return buff_size; - - if (zip_complete) - return n; - - if (zip_compr_level <= 3) // optimized for speed - zip_deflate_fast(); - else - zip_deflate_better(); - if (zip_lookahead == 0) { - if (zip_match_available != 0) - zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff); - zip_flush_block(1); - zip_complete = true; - } - return n + zip_qcopy(buff, n + off, buff_size - n); - }; - - var zip_qcopy = function (buff, off, buff_size) { - var n, i, j; - - n = 0; - while (zip_qhead != null && n < buff_size) { - i = buff_size - n; - if (i > zip_qhead.len) - i = zip_qhead.len; - for (j = 0; j < i; j++) - buff[off + n + j] = zip_qhead.ptr[zip_qhead.off + j]; - - zip_qhead.off += i; - zip_qhead.len -= i; - n += i; - if (zip_qhead.len == 0) { - var p; - p = zip_qhead; - zip_qhead = zip_qhead.next; - zip_reuse_queue(p); - } - } - - if (n == buff_size) - return n; - - if (zip_outoff < zip_outcnt) { - i = buff_size - n; - if (i > zip_outcnt - zip_outoff) - i = zip_outcnt - zip_outoff; - // System.arraycopy(outbuf, outoff, buff, off + n, i); - for (j = 0; j < i; j++) - buff[off + n + j] = zip_outbuf[zip_outoff + j]; - zip_outoff += i; - n += i; - if (zip_outcnt == zip_outoff) - zip_outcnt = zip_outoff = 0; - } - return n; - }; - - /* ========================================================================== - * Allocate the match buffer, initialize the various tables and save the - * location of the internal file attribute (ascii/binary) and method - * (DEFLATE/STORE). - */ - var zip_ct_init = function () { - var n; // iterates over tree elements - var bits; // bit counter - var length; // length value - var code; // code value - var dist; // distance index - - if (zip_static_dtree[0].dl != 0) return; // ct_init already called - - zip_l_desc.dyn_tree = zip_dyn_ltree; - zip_l_desc.static_tree = zip_static_ltree; - zip_l_desc.extra_bits = zip_extra_lbits; - zip_l_desc.extra_base = zip_LITERALS + 1; - zip_l_desc.elems = zip_L_CODES; - zip_l_desc.max_length = zip_MAX_BITS; - zip_l_desc.max_code = 0; - - zip_d_desc.dyn_tree = zip_dyn_dtree; - zip_d_desc.static_tree = zip_static_dtree; - zip_d_desc.extra_bits = zip_extra_dbits; - zip_d_desc.extra_base = 0; - zip_d_desc.elems = zip_D_CODES; - zip_d_desc.max_length = zip_MAX_BITS; - zip_d_desc.max_code = 0; - - zip_bl_desc.dyn_tree = zip_bl_tree; - zip_bl_desc.static_tree = null; - zip_bl_desc.extra_bits = zip_extra_blbits; - zip_bl_desc.extra_base = 0; - zip_bl_desc.elems = zip_BL_CODES; - zip_bl_desc.max_length = zip_MAX_BL_BITS; - zip_bl_desc.max_code = 0; - - // Initialize the mapping length (0..255) -> length code (0..28) - length = 0; - for (code = 0; code < zip_LENGTH_CODES - 1; code++) { - zip_base_length[code] = length; - for (n = 0; n < (1 << zip_extra_lbits[code]); n++) - zip_length_code[length++] = code; - } - /* Note that the length 255 (match length 258) can be represented - * in two different ways: code 284 + 5 bits or code 285, so we - * overwrite length_code[255] to use the best encoding: - */ - zip_length_code[length - 1] = code; - - /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ - dist = 0; - for (code = 0; code < 16; code++) { - zip_base_dist[code] = dist; - for (n = 0; n < (1 << zip_extra_dbits[code]); n++) { - zip_dist_code[dist++] = code; - } - } - dist >>= 7; // from now on, all distances are divided by 128 - for (; code < zip_D_CODES; code++) { - zip_base_dist[code] = dist << 7; - for (n = 0; n < (1 << (zip_extra_dbits[code] - 7)); n++) - zip_dist_code[256 + dist++] = code; - } - // Construct the codes of the static literal tree - for (bits = 0; bits <= zip_MAX_BITS; bits++) - zip_bl_count[bits] = 0; - n = 0; - while (n <= 143) { - zip_static_ltree[n++].dl = 8; - zip_bl_count[8]++; - } - while (n <= 255) { - zip_static_ltree[n++].dl = 9; - zip_bl_count[9]++; - } - while (n <= 279) { - zip_static_ltree[n++].dl = 7; - zip_bl_count[7]++; - } - while (n <= 287) { - zip_static_ltree[n++].dl = 8; - zip_bl_count[8]++; - } - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - zip_gen_codes(zip_static_ltree, zip_L_CODES + 1); - - /* The static distance tree is trivial: */ - for (n = 0; n < zip_D_CODES; n++) { - zip_static_dtree[n].dl = 5; - zip_static_dtree[n].fc = zip_bi_reverse(n, 5); - } - - // Initialize the first block of the first file: - zip_init_block(); - }; - - /* ========================================================================== - * Initialize a new block. - */ - var zip_init_block = function () { - var n; // iterates over tree elements - - // Initialize the trees. - for (n = 0; n < zip_L_CODES; n++) zip_dyn_ltree[n].fc = 0; - for (n = 0; n < zip_D_CODES; n++) zip_dyn_dtree[n].fc = 0; - for (n = 0; n < zip_BL_CODES; n++) zip_bl_tree[n].fc = 0; - - zip_dyn_ltree[zip_END_BLOCK].fc = 1; - zip_opt_len = zip_static_len = 0; - zip_last_lit = zip_last_dist = zip_last_flags = 0; - zip_flags = 0; - zip_flag_bit = 1; - }; - - /* ========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ - var zip_pqdownheap = function (tree, // the tree to restore - k) { // node to move down - var v = zip_heap[k]; - var j = k << 1; // left son of k - - while (j <= zip_heap_len) { - // Set j to the smallest of the two sons: - if (j < zip_heap_len && - zip_SMALLER(tree, zip_heap[j + 1], zip_heap[j])) - j++; - - // Exit if v is smaller than both sons - if (zip_SMALLER(tree, v, zip_heap[j])) - break; - - // Exchange v with the smallest son - zip_heap[k] = zip_heap[j]; - k = j; - - // And continue down the tree, setting j to the left son of k - j <<= 1; - } - zip_heap[k] = v; - }; - - /* ========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ - var zip_gen_bitlen = function (desc) { // the tree descriptor - var tree = desc.dyn_tree; - var extra = desc.extra_bits; - var base = desc.extra_base; - var max_code = desc.max_code; - var max_length = desc.max_length; - var stree = desc.static_tree; - var h; // heap index - var n, m; // iterate over the tree elements - var bits; // bit length - var xbits; // extra bits - var f; // frequency - var overflow = 0; // number of elements with bit length too large - - for (bits = 0; bits <= zip_MAX_BITS; bits++) - zip_bl_count[bits] = 0; - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[zip_heap[zip_heap_max]].dl = 0; // root of the heap - - for (h = zip_heap_max + 1; h < zip_HEAP_SIZE; h++) { - n = zip_heap[h]; - bits = tree[tree[n].dl].dl + 1; - if (bits > max_length) { - bits = max_length; - overflow++; - } - tree[n].dl = bits; - // We overwrite tree[n].dl which is no longer needed - - if (n > max_code) - continue; // not a leaf node - - zip_bl_count[bits]++; - xbits = 0; - if (n >= base) - xbits = extra[n - base]; - f = tree[n].fc; - zip_opt_len += f * (bits + xbits); - if (stree != null) - zip_static_len += f * (stree[n].dl + xbits); - } - if (overflow == 0) - return; - - // This happens for example on obj2 and pic of the Calgary corpus - - // Find the first bit length which could increase: - do { - bits = max_length - 1; - while (zip_bl_count[bits] == 0) - bits--; - zip_bl_count[bits]--; // move one leaf down the tree - zip_bl_count[bits + 1] += 2; // move one overflow item as its brother - zip_bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits != 0; bits--) { - n = zip_bl_count[bits]; - while (n != 0) { - m = zip_heap[--h]; - if (m > max_code) - continue; - if (tree[m].dl != bits) { - zip_opt_len += (bits - tree[m].dl) * tree[m].fc; - tree[m].fc = bits; - } - n--; - } - } - }; - - /* ========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ - var zip_gen_codes = function (tree, // the tree to decorate - max_code) { // largest code with non zero frequency - var next_code = new Array(zip_MAX_BITS + 1); // next code value for each bit length - var code = 0; // running code value - var bits; // bit index - var n; // code index - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= zip_MAX_BITS; bits++) { - code = ((code + zip_bl_count[bits - 1]) << 1); - next_code[bits] = code; - } - - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - for (n = 0; n <= max_code; n++) { - var len = tree[n].dl; - if (len == 0) - continue; - // Now reverse the bits - tree[n].fc = zip_bi_reverse(next_code[len]++, len); - } - }; - - /* ========================================================================== - * Construct one Huffman tree and assigns the code bit strings and lengths. - * Update the total bit length for the current block. - * IN assertion: the field freq is set for all tree elements. - * OUT assertions: the fields len and code are set to the optimal bit length - * and corresponding code. The length opt_len is updated; static_len is - * also updated if stree is not null. The field max_code is set. - */ - var zip_build_tree = function (desc) { // the tree descriptor - var tree = desc.dyn_tree; - var stree = desc.static_tree; - var elems = desc.elems; - var n, m; // iterate over heap elements - var max_code = -1; // largest code with non zero frequency - var node = elems; // next internal node of the tree - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - zip_heap_len = 0; - zip_heap_max = zip_HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n].fc != 0) { - zip_heap[++zip_heap_len] = max_code = n; - zip_depth[n] = 0; - } else - tree[n].dl = 0; - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (zip_heap_len < 2) { - var xnew = zip_heap[++zip_heap_len] = (max_code < 2 ? ++max_code : 0); - tree[xnew].fc = 1; - zip_depth[xnew] = 0; - zip_opt_len--; - if (stree != null) - zip_static_len -= stree[xnew].dl; - // new is 0 or 1 so it does not have extra bits - } - desc.max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = zip_heap_len >> 1; n >= 1; n--) - zip_pqdownheap(tree, n); - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - do { - n = zip_heap[zip_SMALLEST]; - zip_heap[zip_SMALLEST] = zip_heap[zip_heap_len--]; - zip_pqdownheap(tree, zip_SMALLEST); - - m = zip_heap[zip_SMALLEST]; // m = node of next least frequency - - // keep the nodes sorted by frequency - zip_heap[--zip_heap_max] = n; - zip_heap[--zip_heap_max] = m; - - // Create a new node father of n and m - tree[node].fc = tree[n].fc + tree[m].fc; - if (zip_depth[n] > zip_depth[m] + 1) - zip_depth[node] = zip_depth[n]; - else - zip_depth[node] = zip_depth[m] + 1; - tree[n].dl = tree[m].dl = node; - - // and insert the new node in the heap - zip_heap[zip_SMALLEST] = node++; - zip_pqdownheap(tree, zip_SMALLEST); - - } while (zip_heap_len >= 2); - - zip_heap[--zip_heap_max] = zip_heap[zip_SMALLEST]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - zip_gen_bitlen(desc); - - // The field len is now set, we can generate the bit codes - zip_gen_codes(tree, max_code); - }; - - /* ========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. Updates opt_len to take into account the repeat - * counts. (The contribution of the bit length codes will be added later - * during the construction of bl_tree.) - */ - var zip_scan_tree = function (tree,// the tree to be scanned - max_code) { // and its largest code of non zero frequency - var n; // iterates over all tree elements - var prevlen = -1; // last emitted length - var curlen; // length of current code - var nextlen = tree[0].dl; // length of next code - var count = 0; // repeat count of the current code - var max_count = 7; // max repeat count - var min_count = 4; // min repeat count - - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } - tree[max_code + 1].dl = 0xffff; // guard - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[n + 1].dl; - if (++count < max_count && curlen == nextlen) - continue; - else if (count < min_count) - zip_bl_tree[curlen].fc += count; - else if (curlen != 0) { - if (curlen != prevlen) - zip_bl_tree[curlen].fc++; - zip_bl_tree[zip_REP_3_6].fc++; - } else if (count <= 10) - zip_bl_tree[zip_REPZ_3_10].fc++; - else - zip_bl_tree[zip_REPZ_11_138].fc++; - count = 0; - prevlen = curlen; - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } else if (curlen == nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } - }; - - /* ========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ - var zip_send_tree = function (tree, // the tree to be scanned - max_code) { // and its largest code of non zero frequency - var n; // iterates over all tree elements - var prevlen = -1; // last emitted length - var curlen; // length of current code - var nextlen = tree[0].dl; // length of next code - var count = 0; // repeat count of the current code - var max_count = 7; // max repeat count - var min_count = 4; // min repeat count - - /* tree[max_code+1].dl = -1; */ - /* guard already set */ - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[n + 1].dl; - if (++count < max_count && curlen == nextlen) { - continue; - } else if (count < min_count) { - do { - zip_SEND_CODE(curlen, zip_bl_tree); - } while (--count != 0); - } else if (curlen != 0) { - if (curlen != prevlen) { - zip_SEND_CODE(curlen, zip_bl_tree); - count--; - } - // Assert(count >= 3 && count <= 6, " 3_6?"); - zip_SEND_CODE(zip_REP_3_6, zip_bl_tree); - zip_send_bits(count - 3, 2); - } else if (count <= 10) { - zip_SEND_CODE(zip_REPZ_3_10, zip_bl_tree); - zip_send_bits(count - 3, 3); - } else { - zip_SEND_CODE(zip_REPZ_11_138, zip_bl_tree); - zip_send_bits(count - 11, 7); - } - count = 0; - prevlen = curlen; - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } else if (curlen == nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } - }; - - /* ========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ - var zip_build_bl_tree = function () { - var max_blindex; // index of last bit length code of non zero freq - - // Determine the bit length frequencies for literal and distance trees - zip_scan_tree(zip_dyn_ltree, zip_l_desc.max_code); - zip_scan_tree(zip_dyn_dtree, zip_d_desc.max_code); - - // Build the bit length tree: - zip_build_tree(zip_bl_desc); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = zip_BL_CODES - 1; max_blindex >= 3; max_blindex--) { - if (zip_bl_tree[zip_bl_order[max_blindex]].dl != 0) break; - } - /* Update opt_len to include the bit length tree and counts */ - zip_opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - return max_blindex; - }; - - /* ========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ - var zip_send_all_trees = function (lcodes, dcodes, blcodes) { // number of codes for each tree - var rank; // index in bl_order - zip_send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt - zip_send_bits(dcodes - 1, 5); - zip_send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt - for (rank = 0; rank < blcodes; rank++) { - zip_send_bits(zip_bl_tree[zip_bl_order[rank]].dl, 3); - } - - // send the literal tree - zip_send_tree(zip_dyn_ltree, lcodes - 1); - - // send the distance tree - zip_send_tree(zip_dyn_dtree, dcodes - 1); - }; - - /* ========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ - var zip_flush_block = function (eof) { // true if this is the last block for a file - var opt_lenb, static_lenb; // opt_len and static_len in bytes - var max_blindex; // index of last bit length code of non zero freq - var stored_len; // length of input block - - stored_len = zip_strstart - zip_block_start; - zip_flag_buf[zip_last_flags] = zip_flags; // Save the flags for the last 8 items - - // Construct the literal and distance trees - zip_build_tree(zip_l_desc); - zip_build_tree(zip_d_desc); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = zip_build_bl_tree(); - - // Determine the best encoding. Compute first the block length in bytes - opt_lenb = (zip_opt_len + 3 + 7) >> 3; - static_lenb = (zip_static_len + 3 + 7) >> 3; - if (static_lenb <= opt_lenb) - opt_lenb = static_lenb; - if (stored_len + 4 <= opt_lenb // 4: two words for the lengths - && zip_block_start >= 0) { - var i; - - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - zip_send_bits((zip_STORED_BLOCK << 1) + eof, 3); - /* send block type */ - zip_bi_windup(); - /* align on byte boundary */ - zip_put_short(stored_len); - zip_put_short(~stored_len); - - // copy block - for (i = 0; i < stored_len; i++) - zip_put_byte(zip_window[zip_block_start + i]); - - } else if (static_lenb == opt_lenb) { - zip_send_bits((zip_STATIC_TREES << 1) + eof, 3); - zip_compress_block(zip_static_ltree, zip_static_dtree); - } else { - zip_send_bits((zip_DYN_TREES << 1) + eof, 3); - zip_send_all_trees(zip_l_desc.max_code + 1, - zip_d_desc.max_code + 1, - max_blindex + 1); - zip_compress_block(zip_dyn_ltree, zip_dyn_dtree); - } - - zip_init_block(); - - if (eof != 0) - zip_bi_windup(); - }; - - /* ========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ - var zip_ct_tally = function (dist, // distance of matched string - lc) { // match length-MIN_MATCH or unmatched char (if dist==0) - zip_l_buf[zip_last_lit++] = lc; - if (dist == 0) { - // lc is the unmatched char - zip_dyn_ltree[lc].fc++; - } else { - // Here, lc is the match length - MIN_MATCH - dist--; // dist = match distance - 1 - zip_dyn_ltree[zip_length_code[lc] + zip_LITERALS + 1].fc++; - zip_dyn_dtree[zip_D_CODE(dist)].fc++; - - zip_d_buf[zip_last_dist++] = dist; - zip_flags |= zip_flag_bit; - } - zip_flag_bit <<= 1; - - // Output the flags if they fill a byte - if ((zip_last_lit & 7) == 0) { - zip_flag_buf[zip_last_flags++] = zip_flags; - zip_flags = 0; - zip_flag_bit = 1; - } - // Try to guess if it is profitable to stop the current block here - if (zip_compr_level > 2 && (zip_last_lit & 0xfff) == 0) { - // Compute an upper bound for the compressed length - var out_length = zip_last_lit * 8; - var in_length = zip_strstart - zip_block_start; - var dcode; - - for (dcode = 0; dcode < zip_D_CODES; dcode++) { - out_length += zip_dyn_dtree[dcode].fc * (5 + zip_extra_dbits[dcode]); - } - out_length >>= 3; - if (zip_last_dist < parseInt(zip_last_lit / 2) && - out_length < parseInt(in_length / 2)) - return true; - } - return (zip_last_lit == LIT_BUFSIZE - 1 || - zip_last_dist == zip_DIST_BUFSIZE); - /* We avoid equality with LIT_BUFSIZE because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ - }; - - /* ========================================================================== - * Send the block data compressed using the given Huffman trees - */ - var zip_compress_block = function (ltree, // literal tree - dtree) { // distance tree - var dist; // distance of matched string - var lc; // match length or unmatched char (if dist == 0) - var lx = 0; // running index in l_buf - var dx = 0; // running index in d_buf - var fx = 0; // running index in flag_buf - var flag = 0; // current flags - var code; // the code to send - var extra; // number of extra bits to send - - if (zip_last_lit != 0) do { - if ((lx & 7) == 0) - flag = zip_flag_buf[fx++]; - lc = zip_l_buf[lx++] & 0xff; - if ((flag & 1) == 0) { - zip_SEND_CODE(lc, ltree); - /* send a literal byte */ - } else { - // Here, lc is the match length - MIN_MATCH - code = zip_length_code[lc]; - zip_SEND_CODE(code + zip_LITERALS + 1, ltree); // send the length code - extra = zip_extra_lbits[code]; - if (extra != 0) { - lc -= zip_base_length[code]; - zip_send_bits(lc, extra); // send the extra length bits - } - dist = zip_d_buf[dx++]; - // Here, dist is the match distance - 1 - code = zip_D_CODE(dist); - zip_SEND_CODE(code, dtree); // send the distance code - extra = zip_extra_dbits[code]; - if (extra != 0) { - dist -= zip_base_dist[code]; - zip_send_bits(dist, extra); // send the extra distance bits - } - } // literal or match pair ? - flag >>= 1; - } while (lx < zip_last_lit); - - zip_SEND_CODE(zip_END_BLOCK, ltree); - }; - - /* ========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ - var zip_Buf_size = 16; // bit size of bi_buf - var zip_send_bits = function (value, // value to send - length) { // number of bits - /* If not enough room in bi_buf, use (valid) bits from bi_buf and - * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) - * unused bits in value. - */ - if (zip_bi_valid > zip_Buf_size - length) { - zip_bi_buf |= (value << zip_bi_valid); - zip_put_short(zip_bi_buf); - zip_bi_buf = (value >> (zip_Buf_size - zip_bi_valid)); - zip_bi_valid += length - zip_Buf_size; - } else { - zip_bi_buf |= value << zip_bi_valid; - zip_bi_valid += length; - } - }; - - /* ========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ - var zip_bi_reverse = function (code, // the value to invert - len) { // its bit length - var res = 0; - do { - res |= code & 1; - code >>= 1; - res <<= 1; - } while (--len > 0); - return res >> 1; - }; - - /* ========================================================================== - * Write out any remaining bits in an incomplete byte. - */ - var zip_bi_windup = function () { - if (zip_bi_valid > 8) { - zip_put_short(zip_bi_buf); - } else if (zip_bi_valid > 0) { - zip_put_byte(zip_bi_buf); - } - zip_bi_buf = 0; - zip_bi_valid = 0; - }; - - var zip_qoutbuf = function () { - if (zip_outcnt != 0) { - var q, i; - q = zip_new_queue(); - if (zip_qhead == null) - zip_qhead = zip_qtail = q; - else - zip_qtail = zip_qtail.next = q; - q.len = zip_outcnt - zip_outoff; - for (i = 0; i < q.len; i++) - q.ptr[i] = zip_outbuf[zip_outoff + i]; - zip_outcnt = zip_outoff = 0; - } - }; - - function deflate(buffData, level) { - zip_deflate_data = buffData; - zip_deflate_pos = 0; - zip_deflate_start(level); - - var buff = new Array(1024), - pages = [], - totalSize = 0, - i; - - for (i = 0; i < 1024; i++) buff[i] = 0; - while ((i = zip_deflate_internal(buff, 0, buff.length)) > 0) { - var buf = new Buffer(buff.slice(0, i)); - pages.push(buf); - totalSize += buf.length; - } - - if (pages.length == 1) { - return pages[0]; - } - - var result = new Buffer(totalSize), - index = 0; - - for (i = 0; i < pages.length; i++) { - pages[i].copy(result, index); - index = index + pages[i].length - } - - return result; - } - - return { - deflate: function () { - return deflate(inbuf, 8); - } - } -} - -module.exports = function (/*Buffer*/inbuf) { - - var zlib = require("zlib"); - - return { - deflate: function () { - return new JSDeflater(inbuf).deflate(); - }, - - deflateAsync: function (/*Function*/callback) { - var tmp = zlib.createDeflateRaw({chunkSize:(parseInt(inbuf.length / 1024) + 1)*1024}), - parts = [], total = 0; - tmp.on('data', function(data) { - parts.push(data); - total += data.length; - }); - tmp.on('end', function() { - var buf = new Buffer(total), written = 0; - buf.fill(0); - - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - part.copy(buf, written); - written += part.length; - } - callback && callback(buf); - }); - tmp.end(inbuf); - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/index.js deleted file mode 100644 index ddcbba60..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.Deflater = require("./deflater"); -exports.Inflater = require("./inflater"); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/inflater.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/inflater.js deleted file mode 100644 index 59536c90..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/methods/inflater.js +++ /dev/null @@ -1,448 +0,0 @@ -var Buffer = require("buffer").Buffer; - -function JSInflater(/*Buffer*/input) { - - var WSIZE = 0x8000, - slide = new Buffer(0x10000), - windowPos = 0, - fixedTableList = null, - fixedTableDist, - fixedLookup, - bitBuf = 0, - bitLen = 0, - method = -1, - eof = false, - copyLen = 0, - copyDist = 0, - tblList, tblDist, bitList, bitdist, - - inputPosition = 0, - - MASK_BITS = [0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff], - LENS = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], - LEXT = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99], - DISTS = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577], - DEXT = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], - BITORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; - - function HuffTable(clen, cnum, cval, blist, elist, lookupm) { - - this.status = 0; - this.root = null; - this.maxbit = 0; - - var el, f, tail, - offsets = [], - countTbl = [], - sTbl = [], - values = [], - tentry = {extra: 0, bitcnt: 0, lbase: 0, next: null}; - - tail = this.root = null; - for(var i = 0; i < 0x11; i++) { countTbl[i] = 0; sTbl[i] = 0; offsets[i] = 0; } - for(i = 0; i < 0x120; i++) values[i] = 0; - - el = cnum > 256 ? clen[256] : 16; - - var pidx = -1; - while (++pidx < cnum) countTbl[clen[pidx]]++; - - if(countTbl[0] == cnum) return; - - for(var j = 1; j <= 16; j++) if(countTbl[j] != 0) break; - var bitLen = j; - for(i = 16; i != 0; i--) if(countTbl[i] != 0) break; - var maxLen = i; - - lookupm < j && (lookupm = j); - - var dCodes = 1 << j; - for(; j < i; j++, dCodes <<= 1) - if((dCodes -= countTbl[j]) < 0) { - this.status = 2; - this.maxbit = lookupm; - return; - } - - if((dCodes -= countTbl[i]) < 0) { - this.status = 2; - this.maxbit = lookupm; - return; - } - - countTbl[i] += dCodes; - offsets[1] = j = 0; - pidx = 1; - var xp = 2; - while(--i > 0) offsets[xp++] = (j += countTbl[pidx++]); - pidx = 0; - i = 0; - do { - (j = clen[pidx++]) && (values[offsets[j]++] = i); - } while(++i < cnum); - cnum = offsets[maxLen]; - offsets[0] = i = 0; - pidx = 0; - - var level = -1, - w = sTbl[0] = 0, - cnode = null, - tblCnt = 0, - tblStack = []; - - for(; bitLen <= maxLen; bitLen++) { - var kccnt = countTbl[bitLen]; - while(kccnt-- > 0) { - while(bitLen > w + sTbl[1 + level]) { - w += sTbl[1 + level]; - level++; - tblCnt = (tblCnt = maxLen - w) > lookupm ? lookupm : tblCnt; - if((f = 1 << (j = bitLen - w)) > kccnt + 1) { - f -= kccnt + 1; - xp = bitLen; - while(++j < tblCnt) { - if((f <<= 1) <= countTbl[++xp]) break; - f -= countTbl[xp]; - } - } - if(w + j > el && w < el) j = el - w; - tblCnt = 1 << j; - sTbl[1 + level] = j; - cnode = []; - while (cnode.length < tblCnt) cnode.push({extra: 0, bitcnt: 0, lbase: 0, next: null}); - if (tail == null) { - tail = this.root = {next:null, list:null}; - } else { - tail = tail.next = {next:null, list:null} - } - tail.next = null; - tail.list = cnode; - - tblStack[level] = cnode; - - if(level > 0) { - offsets[level] = i; - tentry.bitcnt = sTbl[level]; - tentry.extra = 16 + j; - tentry.next = cnode; - j = (i & ((1 << w) - 1)) >> (w - sTbl[level]); - - tblStack[level-1][j].extra = tentry.extra; - tblStack[level-1][j].bitcnt = tentry.bitcnt; - tblStack[level-1][j].lbase = tentry.lbase; - tblStack[level-1][j].next = tentry.next; - } - } - tentry.bitcnt = bitLen - w; - if(pidx >= cnum) - tentry.extra = 99; - else if(values[pidx] < cval) { - tentry.extra = (values[pidx] < 256 ? 16 : 15); - tentry.lbase = values[pidx++]; - } else { - tentry.extra = elist[values[pidx] - cval]; - tentry.lbase = blist[values[pidx++] - cval]; - } - - f = 1 << (bitLen - w); - for(j = i >> w; j < tblCnt; j += f) { - cnode[j].extra = tentry.extra; - cnode[j].bitcnt = tentry.bitcnt; - cnode[j].lbase = tentry.lbase; - cnode[j].next = tentry.next; - } - for(j = 1 << (bitLen - 1); (i & j) != 0; j >>= 1) - i ^= j; - i ^= j; - while((i & ((1 << w) - 1)) != offsets[level]) { - w -= sTbl[level]; - level--; - } - } - } - - this.maxbit = sTbl[1]; - this.status = ((dCodes != 0 && maxLen != 1) ? 1 : 0); - } - - function addBits(n) { - while(bitLen < n) { - bitBuf |= input[inputPosition++] << bitLen; - bitLen += 8; - } - return bitBuf; - } - - function cutBits(n) { - bitLen -= n; - return bitBuf >>= n; - } - - function maskBits(n) { - while(bitLen < n) { - bitBuf |= input[inputPosition++] << bitLen; - bitLen += 8; - } - var res = bitBuf & MASK_BITS[n]; - bitBuf >>= n; - bitLen -= n; - return res; - } - - function codes(buff, off, size) { - var e, t; - if(size == 0) return 0; - - var n = 0; - for(;;) { - t = tblList.list[addBits(bitList) & MASK_BITS[bitList]]; - e = t.extra; - while(e > 16) { - if(e == 99) return -1; - cutBits(t.bitcnt); - e -= 16; - t = t.next[addBits(e) & MASK_BITS[e]]; - e = t.extra; - } - cutBits(t.bitcnt); - if(e == 16) { - windowPos &= WSIZE - 1; - buff[off + n++] = slide[windowPos++] = t.lbase; - if(n == size) return size; - continue; - } - if(e == 15) break; - - copyLen = t.lbase + maskBits(e); - t = tblDist.list[addBits(bitdist) & MASK_BITS[bitdist]]; - e = t.extra; - - while(e > 16) { - if(e == 99) return -1; - cutBits(t.bitcnt); - e -= 16; - t = t.next[addBits(e) & MASK_BITS[e]]; - e = t.extra - } - cutBits(t.bitcnt); - copyDist = windowPos - t.lbase - maskBits(e); - - while(copyLen > 0 && n < size) { - copyLen--; - copyDist &= WSIZE - 1; - windowPos &= WSIZE - 1; - buff[off + n++] = slide[windowPos++] = slide[copyDist++]; - } - - if(n == size) return size; - } - - method = -1; // done - return n; - } - - function stored(buff, off, size) { - cutBits(bitLen & 7); - var n = maskBits(0x10); - if(n != ((~maskBits(0x10)) & 0xffff)) return -1; - copyLen = n; - - n = 0; - while(copyLen > 0 && n < size) { - copyLen--; - windowPos &= WSIZE - 1; - buff[off + n++] = slide[windowPos++] = maskBits(8); - } - - if(copyLen == 0) method = -1; - return n; - } - - function fixed(buff, off, size) { - var fixed_bd = 0; - if(fixedTableList == null) { - var lengths = []; - - for(var symbol = 0; symbol < 144; symbol++) lengths[symbol] = 8; - for(; symbol < 256; symbol++) lengths[symbol] = 9; - for(; symbol < 280; symbol++) lengths[symbol] = 7; - for(; symbol < 288; symbol++) lengths[symbol] = 8; - - fixedLookup = 7; - - var htbl = new HuffTable(lengths, 288, 257, LENS, LEXT, fixedLookup); - - if(htbl.status != 0) return -1; - - fixedTableList = htbl.root; - fixedLookup = htbl.maxbit; - - for(symbol = 0; symbol < 30; symbol++) lengths[symbol] = 5; - fixed_bd = 5; - - htbl = new HuffTable(lengths, 30, 0, DISTS, DEXT, fixed_bd); - if(htbl.status > 1) { - fixedTableList = null; - return -1; - } - fixedTableDist = htbl.root; - fixed_bd = htbl.maxbit; - } - - tblList = fixedTableList; - tblDist = fixedTableDist; - bitList = fixedLookup; - bitdist = fixed_bd; - return codes(buff, off, size); - } - - function dynamic(buff, off, size) { - var ll = new Array(0x023C); - - for (var m = 0; m < 0x023C; m++) ll[m] = 0; - - var llencnt = 257 + maskBits(5), - dcodescnt = 1 + maskBits(5), - bitlencnt = 4 + maskBits(4); - - if(llencnt > 286 || dcodescnt > 30) return -1; - - for(var j = 0; j < bitlencnt; j++) ll[BITORDER[j]] = maskBits(3); - for(; j < 19; j++) ll[BITORDER[j]] = 0; - - // build decoding table for trees--single level, 7 bit lookup - bitList = 7; - var hufTable = new HuffTable(ll, 19, 19, null, null, bitList); - if(hufTable.status != 0) - return -1; // incomplete code set - - tblList = hufTable.root; - bitList = hufTable.maxbit; - var lencnt = llencnt + dcodescnt, - i = 0, - lastLen = 0; - while(i < lencnt) { - var hufLcode = tblList.list[addBits(bitList) & MASK_BITS[bitList]]; - j = hufLcode.bitcnt; - cutBits(j); - j = hufLcode.lbase; - if(j < 16) - ll[i++] = lastLen = j; - else if(j == 16) { - j = 3 + maskBits(2); - if(i + j > lencnt) return -1; - while(j-- > 0) ll[i++] = lastLen; - } else if(j == 17) { - j = 3 + maskBits(3); - if(i + j > lencnt) return -1; - while(j-- > 0) ll[i++] = 0; - lastLen = 0; - } else { - j = 11 + maskBits(7); - if(i + j > lencnt) return -1; - while(j-- > 0) ll[i++] = 0; - lastLen = 0; - } - } - bitList = 9; - hufTable = new HuffTable(ll, llencnt, 257, LENS, LEXT, bitList); - bitList == 0 && (hufTable.status = 1); - - if (hufTable.status != 0) return -1; - - tblList = hufTable.root; - bitList = hufTable.maxbit; - - for(i = 0; i < dcodescnt; i++) ll[i] = ll[i + llencnt]; - bitdist = 6; - hufTable = new HuffTable(ll, dcodescnt, 0, DISTS, DEXT, bitdist); - tblDist = hufTable.root; - bitdist = hufTable.maxbit; - - if((bitdist == 0 && llencnt > 257) || hufTable.status != 0) return -1; - - return codes(buff, off, size); - } - - return { - inflate : function(/*Buffer*/outputBuffer) { - tblList = null; - - var size = outputBuffer.length, - offset = 0, i; - - while(offset < size) { - if(eof && method == -1) return; - if(copyLen > 0) { - if(method != 0) { - while(copyLen > 0 && offset < size) { - copyLen--; - copyDist &= WSIZE - 1; - windowPos &= WSIZE - 1; - outputBuffer[offset++] = (slide[windowPos++] = slide[copyDist++]); - } - } else { - while(copyLen > 0 && offset < size) { - copyLen--; - windowPos &= WSIZE - 1; - outputBuffer[offset++] = (slide[windowPos++] = maskBits(8)); - } - copyLen == 0 && (method = -1); // done - } - if (offset == size) return; - } - - if(method == -1) { - if(eof) break; - eof = maskBits(1) != 0; - method = maskBits(2); - tblList = null; - copyLen = 0; - } - switch(method) { - case 0: i = stored(outputBuffer, offset, size - offset); break; - case 1: i = tblList != null ? codes(outputBuffer, offset, size - offset) : fixed(outputBuffer, offset, size - offset); break; - case 2: i = tblList != null ? codes(outputBuffer, offset, size - offset) : dynamic(outputBuffer, offset, size - offset); break; - default: i = -1; break; - } - - if(i == -1) return; - offset += i; - } - } - }; -} - -module.exports = function(/*Buffer*/inbuf) { - var zlib = require("zlib"); - return { - inflateAsync : function(/*Function*/callback) { - var tmp = zlib.createInflateRaw(), - parts = [], total = 0; - tmp.on('data', function(data) { - parts.push(data); - total += data.length; - }); - tmp.on('end', function() { - var buf = new Buffer(total), written = 0; - buf.fill(0); - - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - part.copy(buf, written); - written += part.length; - } - callback && callback(buf); - }); - tmp.end(inbuf) - }, - - inflate : function(/*Buffer*/outputBuffer) { - var x = { - x: new JSInflater(inbuf) - }; - x.x.inflate(outputBuffer); - delete(x.x); - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/package.json deleted file mode 100644 index 807d3cd1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "adm-zip", - "version": "0.4.4", - "description": "A Javascript implementation of zip for nodejs. Allows user to create or extract zip files both in memory or to/from disk", - "keywords": [ - "zip", - "methods", - "archive", - "unzip" - ], - "homepage": "http://github.com/cthackers/adm-zip", - "author": { - "name": "Nasca Iacob", - "email": "sy@another-d-mention.ro", - "url": "https://github.com/cthackers" - }, - "bugs": { - "url": "https://github.com/cthackers/adm-zip/issues", - "email": "sy@another-d-mention.ro" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://raw.github.com/cthackers/adm-zip/master/MIT-LICENSE.txt" - } - ], - "main": "adm-zip.js", - "repository": { - "type": "git", - "url": "https://github.com/cthackers/adm-zip.git" - }, - "engines": { - "node": ">=0.3.0" - }, - "readme": "# ADM-ZIP for NodeJS\r\n\r\nADM-ZIP is a pure JavaScript implementation for zip data compression for [NodeJS](http://nodejs.org/). \r\n\r\n# Installation\r\n\r\nWith [npm](http://npmjs.org) do:\r\n\r\n $ npm install adm-zip\r\n\t\r\n## What is it good for?\r\nThe library allows you to:\r\n\r\n* decompress zip files directly to disk or in memory buffers\r\n* compress files and store them to disk in .zip format or in compressed buffers\r\n* update content of/add new/delete files from an existing .zip\r\n\r\n# Dependencies\r\nThere are no other nodeJS libraries that ADM-ZIP is dependent of\r\n\r\n# Examples\r\n\r\n## Basic usage\r\n```javascript\r\n\r\n\tvar AdmZip = require('adm-zip');\r\n\r\n\t// reading archives\r\n\tvar zip = new AdmZip(\"./my_file.zip\");\r\n\tvar zipEntries = zip.getEntries(); // an array of ZipEntry records\r\n\r\n\tzipEntries.forEach(function(zipEntry) {\r\n\t console.log(zipEntry.toString()); // outputs zip entries information\r\n\t\tif (zipEntry.entryName == \"my_file.txt\") {\r\n\t\t console.log(zipEntry.data.toString('utf8')); \r\n\t\t}\r\n\t});\r\n\t// outputs the content of some_folder/my_file.txt\r\n\tconsole.log(zip.readAsText(\"some_folder/my_file.txt\")); \r\n\t// extracts the specified file to the specified location\r\n\tzip.extractEntryTo(/*entry name*/\"some_folder/my_file.txt\", /*target path*/\"/home/me/tempfolder\", /*maintainEntryPath*/false, /*overwrite*/true);\r\n\t// extracts everything\r\n\tzip.extractAllTo(/*target path*/\"/home/me/zipcontent/\", /*overwrite*/true);\r\n\t\r\n\t\r\n\t// creating archives\r\n\tvar zip = new AdmZip();\r\n\t\r\n\t// add file directly\r\n\tzip.addFile(\"test.txt\", new Buffer(\"inner content of the file\"), \"entry comment goes here\");\r\n\t// add local file\r\n\tzip.addLocalFile(\"/home/me/some_picture.png\");\r\n\t// get everything as a buffer\r\n\tvar willSendthis = zip.toBuffer();\r\n\t// or write everything to disk\r\n\tzip.writeZip(/*target file name*/\"/home/me/files.zip\");\r\n\t\r\n\t\r\n\t// ... more examples in the wiki\r\n```\r\n\r\nFor more detailed information please check out the [wiki](https://github.com/cthackers/adm-zip/wiki).\r\n\r\n[![build status](https://secure.travis-ci.org/cthackers/adm-zip.png)](http://travis-ci.org/cthackers/adm-zip)\r\n", - "readmeFilename": "README.md", - "_id": "adm-zip@0.4.4", - "dist": { - "shasum": "b493a1464b82a89ecd8c77b99faa046d8f03ded4" - }, - "_from": "adm-zip@~0.4.3", - "_resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test.zip deleted file mode 100644 index d57bfc075800e3f49b0a3e0ceca9a199d82c4c7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4189 zcmWIWW@h1H00FMbOb0LnN(cby#FCPt%%swi)Z%y`F3}HwtL8vcErLaLVsQ!{9hx|F z_@$OBgrruKD7fS&m*%GCmFSgJlprkrS%K<IIV{E`<s{~1E2L%Sq@wEmgQiy&x8D4m zl++?5*DIj;R~m~}kjv8$8buhG7&sWjfEtf9@wEjpF);jNW?)douQ4MtB_%Zv<m}kM zvwgD-1onLvSv)6-Gxz;o%Lgp08zvT-ot@agxsIc6L*|zJ`;wFHUJY|{nm6-({xYM_ zSF7^xvRpfykXBsReEN>h!4ktSn++dSWwfX5n<3HEoL1F5d!{YZ9ZQq4O_y1vGVZ?B zJ#^AQp|`wthxz7%5Ba3t$7V}EX+F30^i`jQoJ+3XzF6@?jE#Brug)7a@vc^vdnV3p zsCuuv<F>&L)dM*-GjhFU3~#KIo!)1&XS;j#R)5x}^WThE<P~2&GGzSO^YE3`?aTMq zY|J}dxuvdS;bxcGI3_V$(P(2quHruh#udhWf<_Tv_NM(U*?w-qS7}`noA4(qi{$To z%@%sSxNfHU6cg=b#XB~Ie(cX=4$at8{`kc^k+r44>6#P&OS(!$pS}6lG<%w<oR8ju ztL>~-2i|^Ob$*)stiqPfm3lm-Z$$!M+Me_IWcT1<uJNI>XIJ0*Zx|n7|2W|ETsxzq zj#mOSe`*EIJJfdd$Gsy3B36^xc`X)3tn^nXKX6L;k5H-<^Z!`Qxa$g`DqULQGTDoK zJ~?Zhvds|;_u}2D(c%`Q+sHCMr0Kd#Si#hkA1Tojxof)?&%K~p_-+Xkn`m&9O8Xqm z6@05EnY#ZJ$@C6<C$j28)AV1gp&Qx$h{^|~>zw!0N@6cre?nemla=Pi^Cl@q{+43f zW#(?oJtrR|p>=YmMv_P5!EZILo+*KXy|#A_8a@tDvTciB)T*QDrsTc$gJiPTQu_t& zfuAL22$|}pEKd=1-{R+TVk%3aYW;=_s~(<qEoiydKC529=~QH2OvSuUr+>!%V+3U) z?1@s3m_!+0l$w~5pO;fPnmR{QCp}ZAI{wr-nk+{P&4DO12_(zn{M=Mn6J)e5AFa!& zU6(U5i7?=5xvKz6Ob`II;Xwes9nZy}02XItkYL!5|8C>gzh@X>w1M9C*&u#^H^K(Y z);_Wg*jf*uwm-5h1>LM0K&Haz3BqA32-%{^0J8<;+5{j*_Xo%pto;RiR>Pct>_N<4 z1+vx4u~?1T$3V94z`N1~Ag`g*$o66OL}2!TqU<ql`yky5Wa|WGJzWg44xL7}4zu@y zY@Hk<X2>G-Wsog<a4hx|$TAoWOEeJ6us1GMq0z|5pak?+IDX3z{U2m&9S$Bm0J1hg z!TS(0jn7&=xV6eaYu^C7Ug)U@$&V0gQChfI?O*PH0&G8&#%I4e+<rx%{atK$?MH6I zV6*tcC!wPti(xcz7ApWPR^-HMF>)=1&Ef@>M>m5khS34utU#XtM+<<kf`x%$2R8$Q YI73NBX0ZYg<yL}w-3rP1xuBjq04-@*$N&HU diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt deleted file mode 100644 index 3c3ca551..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt deleted file mode 100644 index 3c3ca551..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt deleted file mode 100644 index 3c3ca551..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt deleted file mode 100644 index 3c3ca551..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/blank file.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/attributes_test/blank file.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fast.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fast.zip deleted file mode 100644 index f4ed17b98c9d7bcd21efc4523ce75fbe2b071d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4194 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPu^^f#DxB1A{7ljTxCK zDXDoNXU7Jf?VD{Nu<x_T;yF>Ax$pN{9*kVW<aX?)iF=(-fonmF@8a6u=O(1Aj^*S$ zTk-7o>`Q0FU+*myj^J;e>HC@Q`ObMwFOy!RCm;BFf$wXLnIQ}N*DrkG#?>(ezAN6Q zEH}P#Vb|;GmdS|@67PQ%tWIw}EPLhN?rYaN*ym<X@1E%-+p&K8;*TG6dDzUZCMSQc zRekAW>sIDu!hBwR$4!GBst0mvX5@NH7~WVZJH5}uX1;s%Mt-)a`EM&Z?3^wfUCew* z^6=5pZOivZ=EhD>+fvuDa5KwY9md)7X04r>!Cm{Oz_`M=Pf#i1%HFEK>+|L+zMR4P z$zJKxm7TorKHcp68o2+Aa8Qy)%Jsw)?Z@($*<M|!cz^8T-4ju-mz|rW{NK3C#O`YE z@9Z%B)wVNY99EWdmNbMO`MauL-TumB4&I{mjf(5%DrMQeU9fxUM@Ihq*MjTv;(qSC zRpa<?inHqXUnfM^107dBne9=*BpsHxxAUP!i59<9fzw8(`3~<IMb&?(cB!!a+a0oJ zmBT8JC#h-{-&{7H=IhjmOYE+0y)vOQCWGawP{#*GRf~6T6`yBKPdd3xN%)tDd-X!@ zLwCGcdAycwxgl$`Y=O;+pfH)2!Y#Tk8^cc=Dvo<0o^n*~gSpNEugGbFp-1>u#7(rj zaq`oWBiXAIr$!#yxbx|Xo?PR)<xau7dpd2}TAsd{dPQ?W$08-E-K(3EPpx#V;n_b| zY?Fetb!0|sYLDL3e-XA_UB?ehS)nmu@1#nZz&Se_l{uQKS@$mvxRUK4FMd#P6@SJr zP7cm=$)tysUH;Fjf3m|eF=pD-BPMOe7o{eq<mcs7jwaI4L^=S8R2_dJ9Zj91Md$z) zp#)NAaei(ptX(o%!H-t(G^*eknd}*Gwdz%X<tGS$+V>!U-UjDlPymZFGDt9l|M}3p z*6=JNjDGOyJ(wThjoSth24owsH7P*-0%TiM+99^UXyF71A7Trx-UG}QkZTiw7~LNr zTd?*ekgYE0X5H}h?-@pz)i4^_YRn!7venD6SdH5MK(_C|yV3<9`<N^tUWC!e0gBm6 zf!PO&vd6gXgLFNRtrM8_bTP;}({&K*U^KFI=>0xvl=zcl#0*)aeh#u_PJe%b69<fj zB^rcfm@Q6KxMfN}e}&_>4AD12w$|a`!2=*a8asUjTMwi0S*r)PRvBpRXJEGsJ@p{@ z5n?S$vlpBFtAf9Q?T69$>{o}|uL!h%1{+@cky|v_ELKeY4z?IZ6KAmk&|))AycQ!@ dR@f|tMKp{K@MZ=2gn@wz2rF0^7_M-GcmP+qZUz7V diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fastest.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/fastest.zip deleted file mode 100644 index f4ed17b98c9d7bcd21efc4523ce75fbe2b071d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4194 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPu^^f#DxB1A{7ljTxCK zDXDoNXU7Jf?VD{Nu<x_T;yF>Ax$pN{9*kVW<aX?)iF=(-fonmF@8a6u=O(1Aj^*S$ zTk-7o>`Q0FU+*myj^J;e>HC@Q`ObMwFOy!RCm;BFf$wXLnIQ}N*DrkG#?>(ezAN6Q zEH}P#Vb|;GmdS|@67PQ%tWIw}EPLhN?rYaN*ym<X@1E%-+p&K8;*TG6dDzUZCMSQc zRekAW>sIDu!hBwR$4!GBst0mvX5@NH7~WVZJH5}uX1;s%Mt-)a`EM&Z?3^wfUCew* z^6=5pZOivZ=EhD>+fvuDa5KwY9md)7X04r>!Cm{Oz_`M=Pf#i1%HFEK>+|L+zMR4P z$zJKxm7TorKHcp68o2+Aa8Qy)%Jsw)?Z@($*<M|!cz^8T-4ju-mz|rW{NK3C#O`YE z@9Z%B)wVNY99EWdmNbMO`MauL-TumB4&I{mjf(5%DrMQeU9fxUM@Ihq*MjTv;(qSC zRpa<?inHqXUnfM^107dBne9=*BpsHxxAUP!i59<9fzw8(`3~<IMb&?(cB!!a+a0oJ zmBT8JC#h-{-&{7H=IhjmOYE+0y)vOQCWGawP{#*GRf~6T6`yBKPdd3xN%)tDd-X!@ zLwCGcdAycwxgl$`Y=O;+pfH)2!Y#Tk8^cc=Dvo<0o^n*~gSpNEugGbFp-1>u#7(rj zaq`oWBiXAIr$!#yxbx|Xo?PR)<xau7dpd2}TAsd{dPQ?W$08-E-K(3EPpx#V;n_b| zY?Fetb!0|sYLDL3e-XA_UB?ehS)nmu@1#nZz&Se_l{uQKS@$mvxRUK4FMd#P6@SJr zP7cm=$)tysUH;Fjf3m|eF=pD-BPMOe7o{eq<mcs7jwaI4L^=S8R2_dJ9Zj91Md$z) zp#)NAaei(ptX(o%!H-t(G^*eknd}*Gwdz%X<tGS$+V>!U-UjDlPymZFGDt9l|M}3p z*6=JNjDGOyJ(wThjoSth24owsH7P*-0%TiM+99^UXyF71A7Trx-UG}QkZTiw7~LNr zTd?*ekgYE0X5H}h?-@pz)i4^_YRn!7venD6SdH5MK(_C|yV3<9`<N^tUWC!e0gBm6 zf!PO&vd6gXgLFNRtrM8_bTP;}({&K*U^KFI=>0xvl=zcl#0*)aeh#u_PJe%b69<fj zB^rcfm@Q6KxMfN}e}&_>4AD12w$|a`!2=*a8asUjTMwi0S*r)PRvBpRXJEGsJ@p{@ z5n?S$vlpBFtAf9Q?T69$>{o}|uL!h%1{+@cky|v_ELKeY4z?IZ6KAmk&|))AycQ!@ dR@f|tMKp{K@MZ=2gn@wz2rF0^7_M-GcmP+qZUz7V diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/linux_arc.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/linux_arc.zip deleted file mode 100644 index 188eccbe8bdb2b5b288857de8a397b77ff8e7414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmWIWW@Zs#U|`^2P@7ZZFx{>BaWati9*FrEWEe_Pi%axDgkExfURr1fCj+yAMzOy( z5SLbPGcdBeU}j(d6I0I|<ZLkDakyB$`~_1P^FiAq&Q}7Me3dg@3aUhxT$mmAzunx; zNHaw3`LPw7^8fM5uJNfXYM*p)&V}!93wvx9PusoumgEef6sbiXJ|`SBbq<M6)!}lx z)U@^AVV-W&bHe)s#RGs&<pMg4fk7PTR4@Zdu)>@QcA+THb;_774De=Tl4Hi@R|&9D zj6iZrBZ!Iab5@AY(R>Xt6PKePW->4cF#L5~4Kp(|1ZWh<i5Nz)vVkmS0>b$~`W1-7 F004HEX6gU{ diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/maximum.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/maximum.zip deleted file mode 100644 index 86a8ec776107c075ce2c7f803472aa97dc25cbf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4086 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKug#8$f#DxB1A{7ljTxCK zDXDoNXNLrOXB{!%x%*orDNL7T*LzK_x2!VJeW5bi5k-gZ?Avsb=Zu!4|9kcN#M_=N zJD50Aa(3KH%-*MUj5Wxa#ZO>UzO>!~o_+To9#C_85NaE`O1grh=FZ&QEHlZ6OP1$n zoEF@}!TxC(`$Xsa8&_R_IDN%}1GCdwZht?zW3T_@j(rxZ3^uT{sAoP~cOhU)poA26 z0Pj-w(;r&6-<DYNR4vwBZ6W-&>GYYM2hL5r^yAT*(l1*lJYiMheYtftZz>OSSaPqN z{2hl4BI#T$OmpHcos|uc+iv*(wTqEj`m?`VIXk`ghHgG`vXke~<&Wacw^G)r>$RQ_ z)Gg>Wkvh4&*q-g@)c*x#Grum_6m>;1(eA*<nyc(8H>Wdc$FU#Iu+Qs}E4{VhzkYX4 zkaAn1#-8(<N7fv^<JdVh;>yMz9sgOW(_5XqZ~qRqG+=f<I9vVCzUA}h$J_t;eVe_e zw(k3$`s6rUd!dlX9Cy_RT&_=#H8RC)*tM@`!)Dh^wtvosw;4AvJY$ZtXcv63RpTnx zBIbNm!^+;zbD|#XIrL<o4qK<WS^KO8_IrUoTMwIEvfOo~Q~0(aA9wV-Gp-^6T&q6b z5z?Bn%vGzhrXc6po)yb4xZPYg@0IC-+1x7xgI@(Qn{_YRYd>SD%&BaXj!8_Fg-RYh z!HeWd`ApTH<hC?OuPfPgMAJ%TUpagAlDJouFY?W%y-BvPo4rfspv&9DyE`v&tcdyT zBsMiyW=UkZM|(;9vdKm3q~_@<RlN#($=KpBV@~MZKPCHK%foUiW&+eBCIQA5r6#82 z=jBw6ro_>dNUM~njz1-iCc)9dkk*AEfh1U*pPLG6MvT_SqxCT*^)VxpJp-<mwhFK$ z1OZT+8wAkX#as*uU~xtU35M`LAG+5Xo@Ip54_>_o^8>tb+aSV#Yy-9y0I02wY>P@e z#1<GWoB-iNY{Au{huH#hZ2}OZ`vYVP*7iNJ)dk(G8@~QM!w9n)Mk8B|*$Y6ndN~%W zQTqhQ_8oXvx&UM!lO@E9Fd8{PF?$X$`#@3l7`J_p?f|lN0<)ej23cpi4q_dQMz#*U zFD8u=e{zhNA&b=aK(@^3?@w^zfYGo-gRl&<fv5_%ObO_(aQv1b`YXuRIvhNB0OUtw zr>|h^VKhE#_2AYj1FgLQ>?)zB9wa|PtVL<1VzYl$@HepiFdCoz>TvrNf%Ye{;k6&R zZGz2W#nkU$i(xcz7ApWPe#(K@V&obLo5iq*hS34utU#YIFmM531q%a11~-TY0JSC= A-v9sr diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/normal.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/normal.zip deleted file mode 100644 index b4602c94ee000ee54c71c9302b9db956b3fd9f0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4170 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPvB~f#DxB1A{7ljTxCK zDXDoNXQu|9?VD{Nu<x_T;yF>Ax$pN{9*kVW<aX?)i93_p4ke3CzKi$N9zW;5dzFZ0 zMcTgoGox;9F7ul$xurQUvUJbEliN0j*K#$7a-Ctgd*jw*uY=MV&!uCglyVrj-+vW( zUOi)>@$~4X$#pJL>1_46YY#n?i+b*}Jo-uVy^_<BXZL+|%)c<X=)=)|uCTMr8-Gc; zR$cY$oTvC@p6-q;`&mbuL(fIuW$hFBa>v)ZUoP&g=ls%;9f#N2_1;tU*kv)*ZNBCl z-}UVu)+enwT{LHlbnuJP1$KIJ-FhO{rpj7Rex&JGnEG-WWqgs{^slshzT@je^A-Oi zCUQ@GopEk{TH)oB8*WIdh93FC7A_`Qzw%tNY9D{vtTUpE7rxwiU2)>?c`8EDZ!i7{ zGxY9Z-~2JdG-8MRgHO9&ZGL*JY}SJna@@hTbt((L^dvX$`CL(P*RR0P?8RU4&%9rY zxp?oNvK17GVBY#bUT3l78jt4pp<LB!#rq~V2sed%VyNL>Vs(H&ELHQu{H+UonPXJe ztl@Uscx;vL#?ujB`Ld6M#yB1HQkxi3<Zw`3bg{33_R1SieyC)J8B}^q)}0*s;7$=E zOO}$#?KfOX3+{E!G8cJjyku>}R?!ts-ccvbLyk&a;IDC*Jb4jE5a-Q>)q;Nxwq0jG zc(0h#Qs1cSsHtmuO6&y%QRiH)L#ITHf+m$q1<FLaG$r$wZ#bW+!D`#Izc*#iAqkIo z&&Km2!CXI^-bFeGD>RuVDn=hXZE~=bjfG!@G5q2Qp>W>+aV+kSs;^%VS4^2Aa^kAO zkIO&r{bPV-U(8ggM@*`WFG@{J$<NEF98I31$&;?hQyqWu98H&_#pZw%n*`Ejaei(p ztQ9g^osU-MRIkn%nd}*Gwcb^LWhMxK+VLQO-qz+~PymZFGDt9l|M}3p*6=JNjDGOy zJ(wThjoSth24owsH6TFke`H%!+99^UXyF71A7TrxUINS(kZTiw7~LNrTd?*SkgYE0 zX5H}h?-@pz)i4^_YRsMmvenD6SdH4xK(_C|yV3<9`<N^tUWC!e0gBlhf!PO&vd6gX zgLE;FtrM8_bTP;}({&K*U^KFI=>0osl=zcl#0*)a{tU8ZPJe%b69<fjB^rcfnC(kd zxMfN}e}&_>4ABQdw$|a`!2=*a8asUjTMwi0S*r)PRvBpRTVVGKJ@p{@5n?S$BNv<f ztAf9Q?T69$>{o}|uL!iihYhd&$gLP`7AvNH2U`rIiL+P%Xt4?>UW<{dDQp(QA{s^q Vc(Ve1!oa`<gcU3d412giJOGZ1Gxh)g diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/store.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/store.zip deleted file mode 100644 index e2add30dc0e3129dc89e20a71abe7314052d0002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5878 zcmeI0PmkMF5Wv0tgTRNXf(jv3RMVxaQprk%5C^!hPU38=b!^La8Wst)PW-ZY;MgnM zVRvu90S^5Fh!YYABqS<6LMw5E?|?vDH~^P|Dz%82=Q!(Rlh8ZPt~2rToB7SmvqtZY zy?gfDC5b-ozISh1{Fr`SMCoT)!uykqrML0QZrUqnla0mMei{f3Sy+7bW4<kZOuufR zT&7{NL-5#92F-Xd8M7#>Wk(r-b2E=Vnm2Q0iJ5-rM<2kDhpf=eLwvlT`|@htI1E^_ zCf>_SRLS$<iDK^Wix~FzpIrF#pR<xg*VcN)5f1_u3Ab4?=4r~~2zUx3mazUY>?eMd zu|R=g!WhIu7>xX6pDB>V;77-Bz>*Xd;(q4yh)4V2!yrC5mT_h_LNjSR%ntp8;p71P zG>r$`M|%)VbM0ruqs*o7YBpl9=}t8^ZwN@h{7~i*T4PW=f<vB-;z<Sxz9R`AkPQWR zGzcdF`A|F#`Iu)pfz%VeKgv=WJ)fi)0r{!GI1c!bBokpBO!^^DM+yX-Ow+5VKuUuH z7LgXlaWhUJWnn0z1&)4;SWmnYb0|NU8{|(@l+wuIC?3y8!c%!TNg_mIQgB8PW6A{a zeKyEwggnPZ4&y@#Z4gHRr+Cx1WZA<<en0+@iC9E<5XBj~D$*?$Ksb@F>hw`M^1~4N zY??6S@<^tkA{>lv(oZv7c<zUA5GR7S7-kLmZ4F$j<@HoY1KkDNv2N*2tqGf|i}#xf z^mMOnbv?itj%s>)V6{Ls_h45yn+j;}*pBA9U^%khu?=0rG2Lt!-KK8tKppi=%L7C2 z=pGvNEFj?2l&+y(3p$$9XrpDdt{b|yr^qecGs$MlazF)Jbv(V%HB<-eu47xShWI9$ zHFdM)AVuqFrdLBMj)8UyZ@_J<hCwJ<?V|S%`3DWl-gESwwg+v?XlgiE*U&SyZfH3Q zgK8M6-cg{bcGMm6&H)RpI5JJky@Os`qaos{_}}n!%cL+GmgzZot6-FlH&gBDuBL$M z=q@Fs<yaj>rgWkPT1O+OXKJ|>O0`JPY(;PiC9I1<7rsDKQw_9*%VW+hU+tveEf$d4 z(-e@~3G;(E3XiKwQdN?wl2nxhi-xpVNv^N2BvlEiHY3$$q}q&VYc?bQQ9{yq%x1^1 z>O7-Bb)Eq_tySll|KE9L<ILOAs!r22+MeKtdQS9N><h^fi17{SC8_uL&%58g_Txq& zfBNkYac}RgCR~!rgk>iv>Q$8~*FMWBg?!;oexFlTb+if!d3y)1#W;wvw7*qGAKX3v z-NPq8Y!v81meHrXU}f~zOVIN@u`=)e?~^ZycjnDJ#6p%6db)E~@My_?S<TDaVP)LK zFMj=saBtkpafK}77JHGG=hpAa#_7zKdT(V|{mCQoaul+7Y09}=+!k-mV4E0MZ$0d! zUsuL%KX`DTVtl>+P~Z!>4qKaHUqS5W=hw!VW9Lr!%lO~8e+hme*YU5<_*aqt^K)zY w<+H&u@KyG=02lJ<z<}Vb3v0pU9mO(mvCxIIch5hARwWt#j?PKa=y|&P7yOI$IRF3v diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/ultra.zip b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/assets/ultra.zip deleted file mode 100644 index 86a8ec776107c075ce2c7f803472aa97dc25cbf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4086 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR<Q#Hs8bk&K)DPSF3U=ukS zGabMTD4_|YvFY$jEmsIhtte4&$xklLP0cIOE2$^}Sqw4eX9KD+a#)N>%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKug#8$f#DxB1A{7ljTxCK zDXDoNXNLrOXB{!%x%*orDNL7T*LzK_x2!VJeW5bi5k-gZ?Avsb=Zu!4|9kcN#M_=N zJD50Aa(3KH%-*MUj5Wxa#ZO>UzO>!~o_+To9#C_85NaE`O1grh=FZ&QEHlZ6OP1$n zoEF@}!TxC(`$Xsa8&_R_IDN%}1GCdwZht?zW3T_@j(rxZ3^uT{sAoP~cOhU)poA26 z0Pj-w(;r&6-<DYNR4vwBZ6W-&>GYYM2hL5r^yAT*(l1*lJYiMheYtftZz>OSSaPqN z{2hl4BI#T$OmpHcos|uc+iv*(wTqEj`m?`VIXk`ghHgG`vXke~<&Wacw^G)r>$RQ_ z)Gg>Wkvh4&*q-g@)c*x#Grum_6m>;1(eA*<nyc(8H>Wdc$FU#Iu+Qs}E4{VhzkYX4 zkaAn1#-8(<N7fv^<JdVh;>yMz9sgOW(_5XqZ~qRqG+=f<I9vVCzUA}h$J_t;eVe_e zw(k3$`s6rUd!dlX9Cy_RT&_=#H8RC)*tM@`!)Dh^wtvosw;4AvJY$ZtXcv63RpTnx zBIbNm!^+;zbD|#XIrL<o4qK<WS^KO8_IrUoTMwIEvfOo~Q~0(aA9wV-Gp-^6T&q6b z5z?Bn%vGzhrXc6po)yb4xZPYg@0IC-+1x7xgI@(Qn{_YRYd>SD%&BaXj!8_Fg-RYh z!HeWd`ApTH<hC?OuPfPgMAJ%TUpagAlDJouFY?W%y-BvPo4rfspv&9DyE`v&tcdyT zBsMiyW=UkZM|(;9vdKm3q~_@<RlN#($=KpBV@~MZKPCHK%foUiW&+eBCIQA5r6#82 z=jBw6ro_>dNUM~njz1-iCc)9dkk*AEfh1U*pPLG6MvT_SqxCT*^)VxpJp-<mwhFK$ z1OZT+8wAkX#as*uU~xtU35M`LAG+5Xo@Ip54_>_o^8>tb+aSV#Yy-9y0I02wY>P@e z#1<GWoB-iNY{Au{huH#hZ2}OZ`vYVP*7iNJ)dk(G8@~QM!w9n)Mk8B|*$Y6ndN~%W zQTqhQ_8oXvx&UM!lO@E9Fd8{PF?$X$`#@3l7`J_p?f|lN0<)ej23cpi4q_dQMz#*U zFD8u=e{zhNA&b=aK(@^3?@w^zfYGo-gRl&<fv5_%ObO_(aQv1b`YXuRIvhNB0OUtw zr>|h^VKhE#_2AYj1FgLQ>?)zB9wa|PtVL<1VzYl$@HepiFdCoz>TvrNf%Ye{;k6&R zZGz2W#nkU$i(xcz7ApWPe#(K@V&obLo5iq*hS34utU#YIFmM531q%a11~-TY0JSC= A-v9sr diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/index.js deleted file mode 100644 index 70acb517..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/test/index.js +++ /dev/null @@ -1,5 +0,0 @@ -var Attr = require("../util").FileAttr, - Zip = require("../adm-zip"), - fs = require("fs"); - -//zip.addLocalFile("./test/readonly.txt"); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/constants.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/constants.js deleted file mode 100644 index 05480541..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/constants.js +++ /dev/null @@ -1,84 +0,0 @@ -module.exports = { - /* The local file header */ - LOCHDR : 30, // LOC header size - LOCSIG : 0x04034b50, // "PK\003\004" - LOCVER : 4, // version needed to extract - LOCFLG : 6, // general purpose bit flag - LOCHOW : 8, // compression method - LOCTIM : 10, // modification time (2 bytes time, 2 bytes date) - LOCCRC : 14, // uncompressed file crc-32 value - LOCSIZ : 18, // compressed size - LOCLEN : 22, // uncompressed size - LOCNAM : 26, // filename length - LOCEXT : 28, // extra field length - - /* The Data descriptor */ - EXTSIG : 0x08074b50, // "PK\007\008" - EXTHDR : 16, // EXT header size - EXTCRC : 4, // uncompressed file crc-32 value - EXTSIZ : 8, // compressed size - EXTLEN : 12, // uncompressed size - - /* The central directory file header */ - CENHDR : 46, // CEN header size - CENSIG : 0x02014b50, // "PK\001\002" - CENVEM : 4, // version made by - CENVER : 6, // version needed to extract - CENFLG : 8, // encrypt, decrypt flags - CENHOW : 10, // compression method - CENTIM : 12, // modification time (2 bytes time, 2 bytes date) - CENCRC : 16, // uncompressed file crc-32 value - CENSIZ : 20, // compressed size - CENLEN : 24, // uncompressed size - CENNAM : 28, // filename length - CENEXT : 30, // extra field length - CENCOM : 32, // file comment length - CENDSK : 34, // volume number start - CENATT : 36, // internal file attributes - CENATX : 38, // external file attributes (host system dependent) - CENOFF : 42, // LOC header offset - - /* The entries in the end of central directory */ - ENDHDR : 22, // END header size - ENDSIG : 0x06054b50, // "PK\005\006" - ENDSUB : 8, // number of entries on this disk - ENDTOT : 10, // total number of entries - ENDSIZ : 12, // central directory size in bytes - ENDOFF : 16, // offset of first CEN header - ENDCOM : 20, // zip file comment length - - /* Compression methods */ - STORED : 0, // no compression - SHRUNK : 1, // shrunk - REDUCED1 : 2, // reduced with compression factor 1 - REDUCED2 : 3, // reduced with compression factor 2 - REDUCED3 : 4, // reduced with compression factor 3 - REDUCED4 : 5, // reduced with compression factor 4 - IMPLODED : 6, // imploded - // 7 reserved - DEFLATED : 8, // deflated - ENHANCED_DEFLATED: 9, // enhanced deflated - PKWARE : 10,// PKWare DCL imploded - // 11 reserved - BZIP2 : 12, // compressed using BZIP2 - // 13 reserved - LZMA : 14, // LZMA - // 15-17 reserved - IBM_TERSE : 18, // compressed using IBM TERSE - IBM_LZ77 : 19, //IBM LZ77 z - - /* General purpose bit flag */ - FLG_ENC : 0, // encripted file - FLG_COMP1 : 1, // compression option - FLG_COMP2 : 2, // compression option - FLG_DESC : 4, // data descriptor - FLG_ENH : 8, // enhanced deflation - FLG_STR : 16, // strong encryption - FLG_LNG : 1024, // language encoding - FLG_MSK : 4096, // mask header values - - /* Load type */ - FILE : 0, - BUFFER : 1, - NONE : 2 -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/errors.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/errors.js deleted file mode 100644 index db5d69e9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/errors.js +++ /dev/null @@ -1,35 +0,0 @@ -module.exports = { - /* Header error messages */ - "INVALID_LOC" : "Invalid LOC header (bad signature)", - "INVALID_CEN" : "Invalid CEN header (bad signature)", - "INVALID_END" : "Invalid END header (bad signature)", - - /* ZipEntry error messages*/ - "NO_DATA" : "Nothing to decompress", - "BAD_CRC" : "CRC32 checksum failed", - "FILE_IN_THE_WAY" : "There is a file in the way: %s", - "UNKNOWN_METHOD" : "Invalid/unsupported compression method", - - /* Inflater error messages */ - "AVAIL_DATA" : "inflate::Available inflate data did not terminate", - "INVALID_DISTANCE" : "inflate::Invalid literal/length or distance code in fixed or dynamic block", - "TO_MANY_CODES" : "inflate::Dynamic block code description: too many length or distance codes", - "INVALID_REPEAT_LEN" : "inflate::Dynamic block code description: repeat more than specified lengths", - "INVALID_REPEAT_FIRST" : "inflate::Dynamic block code description: repeat lengths with no first length", - "INCOMPLETE_CODES" : "inflate::Dynamic block code description: code lengths codes incomplete", - "INVALID_DYN_DISTANCE": "inflate::Dynamic block code description: invalid distance code lengths", - "INVALID_CODES_LEN": "inflate::Dynamic block code description: invalid literal/length code lengths", - "INVALID_STORE_BLOCK" : "inflate::Stored block length did not match one's complement", - "INVALID_BLOCK_TYPE" : "inflate::Invalid block type (type == 3)", - - /* ADM-ZIP error messages */ - "CANT_EXTRACT_FILE" : "Could not extract the file", - "CANT_OVERRIDE" : "Target file already exists", - "NO_ZIP" : "No zip file was loaded", - "NO_ENTRY" : "Entry doesn't exist", - "DIRECTORY_CONTENT_ERROR" : "A directory cannot have content", - "FILE_NOT_FOUND" : "File not found: %s", - "NOT_IMPLEMENTED" : "Not implemented", - "INVALID_FILENAME" : "Invalid filename", - "INVALID_FORMAT" : "Invalid or unsupported zip format. No END header found" -}; \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/fattr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/fattr.js deleted file mode 100644 index 2191ec1c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/fattr.js +++ /dev/null @@ -1,84 +0,0 @@ -var fs = require("fs"), - pth = require("path"); - -fs.existsSync = fs.existsSync || pth.existsSync; - -module.exports = function(/*String*/path) { - - var _path = path || "", - _permissions = 0, - _obj = newAttr(), - _stat = null; - - function newAttr() { - return { - directory : false, - readonly : false, - hidden : false, - executable : false, - mtime : 0, - atime : 0 - } - } - - if (_path && fs.existsSync(_path)) { - _stat = fs.statSync(_path); - _obj.directory = _stat.isDirectory(); - _obj.mtime = _stat.mtime; - _obj.atime = _stat.atime; - _obj.executable = !!(1 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); - _obj.readonly = !!(2 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); - _obj.hidden = pth.basename(_path)[0] === "."; - } else { - console.warn("Invalid path: " + _path) - } - - return { - - get directory () { - return _obj.directory; - }, - - get readOnly () { - return _obj.readonly; - }, - - get hidden () { - return _obj.hidden; - }, - - get mtime () { - return _obj.mtime; - }, - - get atime () { - return _obj.atime; - }, - - - get executable () { - return _obj.executable; - }, - - decodeAttributes : function(val) { - - }, - - encodeAttributes : function (val) { - - }, - - toString : function() { - return '{\n' + - '\t"path" : "' + _path + ",\n" + - '\t"isDirectory" : ' + _obj.directory + ",\n" + - '\t"isReadOnly" : ' + _obj.readonly + ",\n" + - '\t"isHidden" : ' + _obj.hidden + ",\n" + - '\t"isExecutable" : ' + _obj.executable + ",\n" + - '\t"mTime" : ' + _obj.mtime + "\n" + - '\t"aTime" : ' + _obj.atime + "\n" + - '}'; - } - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/index.js deleted file mode 100644 index 935fc1a4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = require("./utils"); -module.exports.Constants = require("./constants"); -module.exports.Errors = require("./errors"); -module.exports.FileAttr = require("./fattr"); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/utils.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/utils.js deleted file mode 100644 index b14db8c1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/util/utils.js +++ /dev/null @@ -1,145 +0,0 @@ -var fs = require("fs"), - pth = require('path'); - -fs.existsSync = fs.existsSync || pth.existsSync; - -module.exports = (function() { - - var crcTable = [], - Constants = require('./constants'), - Errors = require('./errors'), - - PATH_SEPARATOR = pth.normalize("/"); - - - function mkdirSync(/*String*/path) { - var resolvedPath = path.split(PATH_SEPARATOR)[0]; - path.split(PATH_SEPARATOR).forEach(function(name) { - if (!name || name.substr(-1,1) == ":") return; - resolvedPath += PATH_SEPARATOR + name; - var stat; - try { - stat = fs.statSync(resolvedPath); - } catch (e) { - fs.mkdirSync(resolvedPath); - } - if (stat && stat.isFile()) - throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath); - }); - } - - function findSync(/*String*/root, /*RegExp*/pattern, /*Boolean*/recoursive) { - if (typeof pattern === 'boolean') { - recoursive = pattern; - pattern = undefined; - } - var files = []; - fs.readdirSync(root).forEach(function(file) { - var path = pth.join(root, file); - - if (fs.statSync(path).isDirectory() && recoursive) - files = files.concat(findSync(path, pattern, recoursive)); - - if (!pattern || pattern.test(path)) { - files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : "")); - } - - }); - return files; - } - - return { - makeDir : function(/*String*/path) { - mkdirSync(path); - }, - - crc32 : function(buf) { - var b = new Buffer(4); - if (!crcTable.length) { - for (var n = 0; n < 256; n++) { - var c = n; - for (var k = 8; --k >= 0;) // - if ((c & 1) != 0) { c = 0xedb88320 ^ (c >>> 1); } else { c = c >>> 1; } - if (c < 0) { - b.writeInt32LE(c, 0); - c = b.readUInt32LE(0); - } - crcTable[n] = c; - } - } - var crc = 0, off = 0, len = buf.length, c1 = ~crc; - while(--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ (c1 >>> 8); - crc = ~c1; - b.writeInt32LE(crc & 0xffffffff, 0); - return b.readUInt32LE(0); - }, - - methodToString : function(/*Number*/method) { - switch (method) { - case Constants.STORED: - return 'STORED (' + method + ')'; - case Constants.DEFLATED: - return 'DEFLATED (' + method + ')'; - default: - return 'UNSUPPORTED (' + method + ')' - } - - }, - - writeFileTo : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr) { - if (fs.existsSync(path)) { - if (!overwrite) - return false; // cannot overwite - - var stat = fs.statSync(path); - if (stat.isDirectory()) { - return false; - } - } - var folder = pth.dirname(path); - if (!fs.existsSync(folder)) { - mkdirSync(folder); - } - - var fd; - try { - fd = fs.openSync(path, 'w', 438); // 0666 - } catch(e) { - fs.chmodSync(path, 438); - fd = fs.openSync(path, 'w', 438); - } - if (fd) { - fs.writeSync(fd, content, 0, content.length, 0); - fs.closeSync(fd); - } - fs.chmodSync(path, attr || 438); - return true; - }, - - findFiles : function(/*String*/path) { - return findSync(path, true); - }, - - getAttributes : function(/*String*/path) { - - }, - - setAttributes : function(/*String*/path) { - - }, - - toBuffer : function(input) { - if (Buffer.isBuffer(input)) { - return input; - } else { - if (input.length == 0) { - return new Buffer(0) - } - return new Buffer(input, 'utf8'); - } - }, - - Constants : Constants, - Errors : Errors - } -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipEntry.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipEntry.js deleted file mode 100644 index 02c31725..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipEntry.js +++ /dev/null @@ -1,224 +0,0 @@ -var Utils = require("./util"), - Headers = require("./headers"), - Constants = Utils.Constants, - Methods = require("./methods"); - -module.exports = function (/*Buffer*/input) { - - var _entryHeader = new Headers.EntryHeader(), - _entryName = new Buffer(0), - _comment = new Buffer(0), - _isDirectory = false, - uncompressedData = null, - _extra = new Buffer(0); - - function getCompressedDataFromZip() { - if (!input || !Buffer.isBuffer(input)) { - return new Buffer(0); - } - _entryHeader.loadDataHeaderFromBinary(input); - return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize) - } - - function crc32OK(data) { - // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written - if (_entryHeader.flags & 0x8 != 0x8) { - if (Utils.crc32(data) != _entryHeader.crc) { - return false; - } - } else { - // @TODO: load and check data descriptor header - // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure - // (optionally preceded by a 4-byte signature) immediately after the compressed data: - } - return true; - } - - function decompress(/*Boolean*/async, /*Function*/callback) { - if (_isDirectory) { - if (async && callback) { - callback(new Buffer(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error. - } - return new Buffer(0); - } - - var compressedData = getCompressedDataFromZip(); - if (compressedData.length == 0) { - if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error. - return compressedData; - } - - var data = new Buffer(_entryHeader.size); - data.fill(0); - - switch (_entryHeader.method) { - case Utils.Constants.STORED: - compressedData.copy(data); - if (!crc32OK(data)) { - if (async && callback) callback(data, Utils.Errors.BAD_CRC);//si added error - return Utils.Errors.BAD_CRC; - } else {//si added otherwise did not seem to return data. - if (async && callback) callback(data); - return data; - } - break; - case Utils.Constants.DEFLATED: - var inflater = new Methods.Inflater(compressedData); - if (!async) { - inflater.inflate(data); - if (!crc32OK(data)) { - console.warn(Utils.Errors.BAD_CRC + " " + _entryName.toString()) - } - return data; - } else { - inflater.inflateAsync(function(result) { - result.copy(data, 0); - if (crc32OK(data)) { - if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error - } else { //si added otherwise did not seem to return data. - if (callback) callback(data); - } - }) - } - break; - default: - if (async && callback) callback(new Buffer(0), Utils.Errors.UNKNOWN_METHOD); - return Utils.Errors.UNKNOWN_METHOD; - } - } - - function compress(/*Boolean*/async, /*Function*/callback) { - if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) { - // no data set or the data wasn't changed to require recompression - if (async && callback) callback(getCompressedDataFromZip()); - return getCompressedDataFromZip(); - } - - if (uncompressedData.length && !_isDirectory) { - var compressedData; - // Local file header - switch (_entryHeader.method) { - case Utils.Constants.STORED: - _entryHeader.compressedSize = _entryHeader.size; - - compressedData = new Buffer(uncompressedData.length); - uncompressedData.copy(compressedData); - - if (async && callback) callback(compressedData); - return compressedData; - - break; - default: - case Utils.Constants.DEFLATED: - - var deflater = new Methods.Deflater(uncompressedData); - if (!async) { - var deflated = deflater.deflate(); - _entryHeader.compressedSize = deflated.length; - return deflated; - } else { - deflater.deflateAsync(function(data) { - compressedData = new Buffer(data.length); - _entryHeader.compressedSize = data.length; - data.copy(compressedData); - callback && callback(compressedData); - }) - } - deflater = null; - break; - } - } else { - if (async && callback) { - callback(new Buffer(0)); - } else { - return new Buffer(0); - } - } - } - - return { - get entryName () { return _entryName.toString(); }, - get rawEntryName() { return _entryName; }, - set entryName (val) { - _entryName = Utils.toBuffer(val); - var lastChar = _entryName[_entryName.length - 1]; - _isDirectory = (lastChar == 47) || (lastChar == 92); - _entryHeader.fileNameLength = _entryName.length; - }, - - get extra () { return _extra; }, - set extra (val) { - _extra = val; - _entryHeader.extraLength = val.length; - }, - - get comment () { return _comment.toString(); }, - set comment (val) { - _comment = Utils.toBuffer(val); - _entryHeader.commentLength = _comment.length; - }, - - get name () { var n = _entryName.toString(); return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop(); }, - get isDirectory () { return _isDirectory }, - - getCompressedData : function() { - return compress(false, null) - }, - - getCompressedDataAsync : function(/*Function*/callback) { - compress(true, callback) - }, - - setData : function(value) { - uncompressedData = Utils.toBuffer(value); - if (!_isDirectory && uncompressedData.length) { - _entryHeader.size = uncompressedData.length; - _entryHeader.method = Utils.Constants.DEFLATED; - _entryHeader.crc = Utils.crc32(value); - } else { // folders and blank files should be stored - _entryHeader.method = Utils.Constants.STORED; - } - }, - - getData : function() { - return decompress(false, null); - }, - - getDataAsync : function(/*Function*/callback) { - decompress(true, callback) - }, - - set header(/*Buffer*/data) { - _entryHeader.loadFromBinary(data); - }, - - get header() { - return _entryHeader; - }, - - packHeader : function() { - var header = _entryHeader.entryHeaderToBinary(); - // add - _entryName.copy(header, Utils.Constants.CENHDR); - if (_entryHeader.extraLength) { - _extra.copy(header, Utils.Constants.CENHDR + _entryName.length) - } - if (_entryHeader.commentLength) { - _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length); - } - return header; - }, - - toString : function() { - return '{\n' + - '\t"entryName" : "' + _entryName.toString() + "\",\n" + - '\t"name" : "' + _entryName.toString().split("/").pop() + "\",\n" + - '\t"comment" : "' + _comment.toString() + "\",\n" + - '\t"isDirectory" : ' + _isDirectory + ",\n" + - '\t"header" : ' + _entryHeader.toString().replace(/\t/mg, "\t\t") + ",\n" + - '\t"compressedData" : <' + (input && input.length + " bytes buffer" || "null") + ">\n" + - '\t"data" : <' + (uncompressedData && uncompressedData.length + " bytes buffer" || "null") + ">\n" + - '}'; - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipFile.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipFile.js deleted file mode 100644 index f066d7ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/adm-zip/zipFile.js +++ /dev/null @@ -1,311 +0,0 @@ -var ZipEntry = require("./zipEntry"), - Headers = require("./headers"), - Utils = require("./util"); - -module.exports = function(/*String|Buffer*/input, /*Number*/inputType) { - var entryList = [], - entryTable = {}, - _comment = new Buffer(0), - filename = "", - fs = require("fs"), - inBuffer = null, - mainHeader = new Headers.MainHeader(); - - if (inputType == Utils.Constants.FILE) { - // is a filename - filename = input; - inBuffer = fs.readFileSync(filename); - readMainHeader(); - } else if (inputType == Utils.Constants.BUFFER) { - // is a memory buffer - inBuffer = input; - readMainHeader(); - } else { - // none. is a new file - } - - function readEntries() { - entryTable = {}; - entryList = new Array(mainHeader.diskEntries); // total number of entries - var index = mainHeader.offset; // offset of first CEN header - for(var i = 0; i < entryList.length; i++) { - - var tmp = index, - entry = new ZipEntry(inBuffer); - entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR); - - entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength); - - if (entry.header.extraLength) { - entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength); - } - - if (entry.header.commentLength) - entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength); - - index += entry.header.entryHeaderSize; - - entryList[i] = entry; - entryTable[entry.entryName] = entry; - } - } - - function readMainHeader() { - var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size - n = Math.max(0, i - 0xFFFF), // 0xFFFF is the max zip file comment length - endOffset = 0; // Start offset of the END header - - for (i; i >= n; i--) { - if (inBuffer[i] != 0x50) continue; // quick check that the byte is 'P' - if (inBuffer.readUInt32LE(i) == Utils.Constants.ENDSIG) { // "PK\005\006" - endOffset = i; - break; - } - } - if (!endOffset) - throw Utils.Errors.INVALID_FORMAT; - - mainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR)); - if (mainHeader.commentLength) { - _comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR); - } - readEntries(); - } - - return { - /** - * Returns an array of ZipEntry objects existent in the current opened archive - * @return Array - */ - get entries () { - return entryList; - }, - - /** - * Archive comment - * @return {String} - */ - get comment () { return _comment.toString(); }, - set comment(val) { - mainHeader.commentLength = val.length; - _comment = val; - }, - - /** - * Returns a reference to the entry with the given name or null if entry is inexistent - * - * @param entryName - * @return ZipEntry - */ - getEntry : function(/*String*/entryName) { - return entryTable[entryName] || null; - }, - - /** - * Adds the given entry to the entry list - * - * @param entry - */ - setEntry : function(/*ZipEntry*/entry) { - entryList.push(entry); - entryTable[entry.entryName] = entry; - mainHeader.totalEntries = entryList.length; - }, - - /** - * Removes the entry with the given name from the entry list. - * - * If the entry is a directory, then all nested files and directories will be removed - * @param entryName - */ - deleteEntry : function(/*String*/entryName) { - var entry = entryTable[entryName]; - if (entry && entry.isDirectory) { - var _self = this; - this.getEntryChildren(entry).forEach(function(child) { - if (child.entryName != entryName) { - _self.deleteEntry(child.entryName) - } - }) - } - entryList.splice(entryList.indexOf(entry), 1); - delete(entryTable[entryName]); - mainHeader.totalEntries = entryList.length; - }, - - /** - * Iterates and returns all nested files and directories of the given entry - * - * @param entry - * @return Array - */ - getEntryChildren : function(/*ZipEntry*/entry) { - if (entry.isDirectory) { - var list = [], - name = entry.entryName, - len = name.length; - - entryList.forEach(function(zipEntry) { - if (zipEntry.entryName.substr(0, len) == name) { - list.push(zipEntry); - } - }); - return list; - } - return [] - }, - - /** - * Returns the zip file - * - * @return Buffer - */ - compressToBuffer : function() { - if (entryList.length > 1) { - entryList.sort(function(a, b) { - var nameA = a.entryName.toLowerCase(); - var nameB = b.entryName.toLowerCase(); - if (nameA < nameB) {return -1} - if (nameA > nameB) {return 1} - return 0; - }); - } - - var totalSize = 0, - dataBlock = [], - entryHeaders = [], - dindex = 0; - - mainHeader.size = 0; - mainHeader.offset = 0; - - entryList.forEach(function(entry) { - entry.header.offset = dindex; - - // compress data and set local and entry header accordingly. Reason why is called first - var compressedData = entry.getCompressedData(); - // data header - var dataHeader = entry.header.dataHeaderToBinary(); - var postHeader = new Buffer(entry.entryName + entry.extra.toString()); - var dataLength = dataHeader.length + postHeader.length + compressedData.length; - - dindex += dataLength; - - dataBlock.push(dataHeader); - dataBlock.push(postHeader); - dataBlock.push(compressedData); - - var entryHeader = entry.packHeader(); - entryHeaders.push(entryHeader); - mainHeader.size += entryHeader.length; - totalSize += (dataLength + entryHeader.length); - }); - - totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length - // point to end of data and begining of central directory first record - mainHeader.offset = dindex; - - dindex = 0; - var outBuffer = new Buffer(totalSize); - dataBlock.forEach(function(content) { - content.copy(outBuffer, dindex); // write data blocks - dindex += content.length; - }); - entryHeaders.forEach(function(content) { - content.copy(outBuffer, dindex); // write central directory entries - dindex += content.length; - }); - - var mh = mainHeader.toBinary(); - if (_comment) { - _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment - } - - mh.copy(outBuffer, dindex); // write main header - - return outBuffer - }, - - toAsyncBuffer : function(/*Function*/onSuccess,/*Function*/onFail,/*Function*/onItemStart,/*Function*/onItemEnd) { - if (entryList.length > 1) { - entryList.sort(function(a, b) { - var nameA = a.entryName.toLowerCase(); - var nameB = b.entryName.toLowerCase(); - if (nameA > nameB) {return -1} - if (nameA < nameB) {return 1} - return 0; - }); - } - - var totalSize = 0, - dataBlock = [], - entryHeaders = [], - dindex = 0; - - mainHeader.size = 0; - mainHeader.offset = 0; - - var compress=function(entryList){ - var self=arguments.callee; - var entry; - if(entryList.length){ - var entry=entryList.pop(); - var name=entry.entryName + entry.extra.toString(); - if(onItemStart)onItemStart(name); - entry.getCompressedDataAsync(function(compressedData){ - if(onItemEnd)onItemEnd(name); - - entry.header.offset = dindex; - // data header - var dataHeader = entry.header.dataHeaderToBinary(); - var postHeader = new Buffer(name); - var dataLength = dataHeader.length + postHeader.length + compressedData.length; - - dindex += dataLength; - - dataBlock.push(dataHeader); - dataBlock.push(postHeader); - dataBlock.push(compressedData); - - var entryHeader = entry.packHeader(); - entryHeaders.push(entryHeader); - mainHeader.size += entryHeader.length; - totalSize += (dataLength + entryHeader.length); - - if(entryList.length){ - self(entryList); - }else{ - - - totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length - // point to end of data and begining of central directory first record - mainHeader.offset = dindex; - - dindex = 0; - var outBuffer = new Buffer(totalSize); - dataBlock.forEach(function(content) { - content.copy(outBuffer, dindex); // write data blocks - dindex += content.length; - }); - entryHeaders.forEach(function(content) { - content.copy(outBuffer, dindex); // write central directory entries - dindex += content.length; - }); - - var mh = mainHeader.toBinary(); - if (_comment) { - _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment - } - - mh.copy(outBuffer, dindex); // write main header - - onSuccess(outBuffer); - } - }); - } - }; - - compress(entryList); - } - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.npmignore deleted file mode 100644 index 13abef4f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.travis.yml deleted file mode 100644 index 895dbd36..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/LICENSE deleted file mode 100644 index 6d03581f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 'Dominic Tarr' - -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/README.md deleted file mode 100644 index 565e0e26..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# stream-combiner - -<img src=https://secure.travis-ci.org/dominictarr/stream-combiner.png?branch=master> - -## Combine (stream1,...,streamN) - -Turn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream -and reads from the last stream. - -Listening for 'error' will recieve errors from all streams inside the pipe. - -``` js - var Combine = require('stream-combiner') - var es = require('event-stream') - - Combine( //connect streams together with `pipe` - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - callback(null - , inspect(JSON.parse(data))) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) -``` - -## License - -MIT diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/index.js deleted file mode 100644 index 99cf5b61..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/index.js +++ /dev/null @@ -1,39 +0,0 @@ -var duplexer = require('duplexer') - -module.exports = function () { - - var streams = [].slice.call(arguments) - , first = streams[0] - , last = streams[streams.length - 1] - , thepipe = duplexer(first, last) - - if(streams.length == 1) - return streams[0] - else if (!streams.length) - throw new Error('connect called with empty args') - - //pipe all the streams together - - function recurse (streams) { - if(streams.length < 2) - return - streams[0].pipe(streams[1]) - recurse(streams.slice(1)) - } - - recurse(streams) - - function onerror () { - var args = [].slice.call(arguments) - args.unshift('error') - thepipe.emit.apply(thepipe, args) - } - - //es.duplex already reemits the error from the first and last stream. - //add a listener for the inner streams in the pipeline. - for(var i = 1; i < streams.length - 1; i ++) - streams[i].on('error', onerror) - - return thepipe -} - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.npmignore deleted file mode 100644 index 062c11e8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -*.err \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.travis.yml deleted file mode 100644 index ed05f88d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" - - "0.8" - - "0.6" diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/LICENCE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/LICENCE deleted file mode 100644 index a23e08a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/README.md deleted file mode 100644 index 61ff71aa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# duplexer - -[![build status][1]][2] [![dependency status][3]][4] - -[![browser support][5]][6] - -Creates a duplex stream - -Taken from [event-stream][7] - -## duplex (writeStream, readStream) - -Takes a writable stream and a readable stream and makes them appear as a readable writable stream. - -It is assumed that the two streams are connected to each other in some way. - -## Example - -```js -var grep = cp.exec('grep Stream') - -duplex(grep.stdin, grep.stdout) -``` - -## Installation - -`npm install duplexer` - -## Tests - -`npm test` - -## Contributors - - - Dominictarr - - Raynos - - samccone - -## MIT Licenced - - [1]: https://secure.travis-ci.org/Raynos/duplexer.png - [2]: https://travis-ci.org/Raynos/duplexer - [3]: https://david-dm.org/Raynos/duplexer.png - [4]: https://david-dm.org/Raynos/duplexer - [5]: https://ci.testling.com/Raynos/duplexer.png - [6]: https://ci.testling.com/Raynos/duplexer - [7]: https://github.com/dominictarr/event-stream#duplex-writestream-readstream diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/index.js deleted file mode 100644 index a188a210..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/index.js +++ /dev/null @@ -1,87 +0,0 @@ -var Stream = require("stream") -var writeMethods = ["write", "end", "destroy"] -var readMethods = ["resume", "pause"] -var readEvents = ["data", "close"] -var slice = Array.prototype.slice - -module.exports = duplex - -function forEach (arr, fn) { - if (arr.forEach) { - return arr.forEach(fn) - } - - for (var i = 0; i < arr.length; i++) { - fn(arr[i], i) - } -} - -function duplex(writer, reader) { - var stream = new Stream() - var ended = false - - forEach(writeMethods, proxyWriter) - - forEach(readMethods, proxyReader) - - forEach(readEvents, proxyStream) - - reader.on("end", handleEnd) - - writer.on("drain", function() { - stream.emit("drain") - }) - - writer.on("error", reemit) - reader.on("error", reemit) - - stream.writable = writer.writable - stream.readable = reader.readable - - return stream - - function proxyWriter(methodName) { - stream[methodName] = method - - function method() { - return writer[methodName].apply(writer, arguments) - } - } - - function proxyReader(methodName) { - stream[methodName] = method - - function method() { - stream.emit(methodName) - var func = reader[methodName] - if (func) { - return func.apply(reader, arguments) - } - reader.emit(methodName) - } - } - - function proxyStream(methodName) { - reader.on(methodName, reemit) - - function reemit() { - var args = slice.call(arguments) - args.unshift(methodName) - stream.emit.apply(stream, args) - } - } - - function handleEnd() { - if (ended) { - return - } - ended = true - var args = slice.call(arguments) - args.unshift("end") - stream.emit.apply(stream, args) - } - - function reemit(err) { - stream.emit("error", err) - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/package.json deleted file mode 100644 index d78e4d07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "duplexer", - "version": "0.1.1", - "description": "Creates a duplex stream", - "keywords": [], - "author": { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - "repository": { - "type": "git", - "url": "git://github.com/Raynos/duplexer.git" - }, - "main": "index", - "homepage": "https://github.com/Raynos/duplexer", - "contributors": [ - { - "name": "Jake Verbaten" - } - ], - "bugs": { - "url": "https://github.com/Raynos/duplexer/issues", - "email": "raynos2@gmail.com" - }, - "devDependencies": { - "tape": "0.3.3", - "through": "~0.1.4" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/Raynos/duplexer/raw/master/LICENSE" - } - ], - "scripts": { - "test": "node test" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "ie/8..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" - ] - }, - "readme": "# duplexer\n\n[![build status][1]][2] [![dependency status][3]][4]\n\n[![browser support][5]][6]\n\nCreates a duplex stream\n\nTaken from [event-stream][7]\n\n## duplex (writeStream, readStream)\n\nTakes a writable stream and a readable stream and makes them appear as a readable writable stream.\n\nIt is assumed that the two streams are connected to each other in some way.\n\n## Example\n\n```js\nvar grep = cp.exec('grep Stream')\n\nduplex(grep.stdin, grep.stdout)\n```\n\n## Installation\n\n`npm install duplexer`\n\n## Tests\n\n`npm test`\n\n## Contributors\n\n - Dominictarr\n - Raynos\n - samccone\n\n## MIT Licenced\n\n [1]: https://secure.travis-ci.org/Raynos/duplexer.png\n [2]: https://travis-ci.org/Raynos/duplexer\n [3]: https://david-dm.org/Raynos/duplexer.png\n [4]: https://david-dm.org/Raynos/duplexer\n [5]: https://ci.testling.com/Raynos/duplexer.png\n [6]: https://ci.testling.com/Raynos/duplexer\n [7]: https://github.com/dominictarr/event-stream#duplex-writestream-readstream\n", - "readmeFilename": "README.md", - "_id": "duplexer@0.1.1", - "dist": { - "shasum": "7fb4a6591c344b842e6f6764796a996ff912e7f4" - }, - "_from": "duplexer@~0.1.1", - "_resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/test/index.js deleted file mode 100644 index 4988e0d9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/node_modules/duplexer/test/index.js +++ /dev/null @@ -1,31 +0,0 @@ -var through = require("through") -var test = require("tape") - -var duplex = require("../index") - -var readable = through() -var writable = through(write) -var written = 0 -var data = 0 - -var stream = duplex(writable, readable) - -function write() { - written++ -} - -stream.on("data", ondata) - -function ondata() { - data++ -} - -test("emit and write", function(t) { - t.plan(2) - - stream.write() - readable.emit("data") - - t.equal(written, 1, "should have written once") - t.equal(data, 1, "should have recived once") -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/package.json deleted file mode 100644 index 3a25f682..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "stream-combiner", - "version": "0.0.4", - "homepage": "https://github.com/dominictarr/stream-combiner", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/stream-combiner.git" - }, - "dependencies": { - "duplexer": "~0.1.1" - }, - "devDependencies": { - "tape": "~2.3.0", - "event-stream": "~3.0.7" - }, - "scripts": { - "test": "set -e; for t in test/*.js; do node $t; done" - }, - "author": { - "name": "'Dominic Tarr'", - "email": "dominic.tarr@gmail.com", - "url": "http://dominictarr.com" - }, - "license": "MIT", - "readme": "# stream-combiner\n\n<img src=https://secure.travis-ci.org/dominictarr/stream-combiner.png?branch=master>\n\n## Combine (stream1,...,streamN)\n\nTurn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream\nand reads from the last stream. \n\nListening for 'error' will recieve errors from all streams inside the pipe.\n\n``` js\n var Combine = require('stream-combiner')\n var es = require('event-stream')\n\n Combine( //connect streams together with `pipe`\n process.openStdin(), //open stdin\n es.split(), //split stream to break on newlines\n es.map(function (data, callback) {//turn this async function into a stream\n callback(null\n , inspect(JSON.parse(data))) //render it nicely\n }),\n process.stdout // pipe it to stdout !\n )\n```\n\n## License\n\nMIT\n", - "readmeFilename": "README.md", - "description": "<img src=https://secure.travis-ci.org/dominictarr/stream-combiner.png?branch=master>", - "bugs": { - "url": "https://github.com/dominictarr/stream-combiner/issues" - }, - "_id": "stream-combiner@0.0.4", - "dist": { - "shasum": "0d1c68aea72345d3619884ed3eb44e8a4e583129" - }, - "_from": "stream-combiner@~0.0.2", - "_resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/test/index.js deleted file mode 100644 index d17ddada..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/stream-combiner/test/index.js +++ /dev/null @@ -1,52 +0,0 @@ -var es = require('event-stream') -var combine = require('..') -var test = require('tape') - -test('do not duplicate errors', function (test) { - - var errors = 0; - var pipe = combine( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }) - ) - - pipe.on('error', function(err) { - errors++ - test.ok(errors, 'expected error count') - process.nextTick(function () { - return test.end(); - }) - }) - - return pipe.write('meh'); -}) - -test('3 pipe do not duplicate errors', function (test) { - - var errors = 0; - var pipe = combine( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }), - es.through() - ) - - pipe.on('error', function(err) { - errors++ - test.ok(errors, 'expected error count') - process.nextTick(function () { - return test.end(); - }) - }) - - return pipe.write('meh'); - -}) - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.npmignore deleted file mode 100644 index c167ad5b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -.*.swp -node_modules -examples/extract/ -test/tmp/ -test/fixtures/ diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.travis.yml deleted file mode 100644 index 2d26206d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.6 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/LICENCE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/LICENCE deleted file mode 100644 index 74489e2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/LICENCE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) Isaac Z. Schlueter -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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/README.md deleted file mode 100644 index 5bcc82cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# node-tar - -Tar for Node.js. - -[![NPM](https://nodei.co/npm/tar.png)](https://nodei.co/npm/tar/) - -## API - -See `examples/` for usage examples. - -### var tar = require('tar') - -Returns an object with `.Pack`, `.Extract` and `.Parse` methods. - -### tar.Pack([properties]) - -Returns a through stream. Use -[fstream](https://npmjs.org/package/fstream) to write files into the -pack stream and you will receive tar archive data from the pack -stream. - -The optional `properties` object are used to set properties in the tar -'Global Extended Header'. - -### tar.Extract([options]) - -Returns a through stream. Write tar data to the stream and the files -in the tarball will be extracted onto the filesystem. - -`options` can be: - -```js -{ - path: '/path/to/extract/tar/into', - strip: 0, // how many path segments to strip from the root when extracting -} -``` - -`options` also get passed to the `fstream.Writer` instance that `tar` -uses internally. - -### tar.Parse() - -Returns a writable stream. Write tar data to it and it will emit -`entry` events for each entry parsed from the tarball. This is used by -`tar.Extract`. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/extracter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/extracter.js deleted file mode 100644 index e150abf2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/extracter.js +++ /dev/null @@ -1,11 +0,0 @@ -var tar = require("../tar.js") - , fs = require("fs") - -fs.createReadStream(__dirname + "/../test/fixtures/c.tar") - .pipe(tar.Extract({ path: __dirname + "/extract" })) - .on("error", function (er) { - console.error("error here") - }) - .on("end", function () { - console.error("done") - }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/reader.js deleted file mode 100644 index 39f3f088..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/examples/reader.js +++ /dev/null @@ -1,36 +0,0 @@ -var tar = require("../tar.js") - , fs = require("fs") - -fs.createReadStream(__dirname + "/../test/fixtures/c.tar") - .pipe(tar.Parse()) - .on("extendedHeader", function (e) { - console.error("extended pax header", e.props) - e.on("end", function () { - console.error("extended pax fields:", e.fields) - }) - }) - .on("ignoredEntry", function (e) { - console.error("ignoredEntry?!?", e.props) - }) - .on("longLinkpath", function (e) { - console.error("longLinkpath entry", e.props) - e.on("end", function () { - console.error("value=%j", e.body.toString()) - }) - }) - .on("longPath", function (e) { - console.error("longPath entry", e.props) - e.on("end", function () { - console.error("value=%j", e.body.toString()) - }) - }) - .on("entry", function (e) { - console.error("entry", e.props) - e.on("data", function (c) { - console.error(" >>>" + c.toString().replace(/\n/g, "\\n")) - }) - e.on("end", function () { - console.error(" <<<EOF") - }) - }) - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/buffer-entry.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/buffer-entry.js deleted file mode 100644 index 6c1da237..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/buffer-entry.js +++ /dev/null @@ -1,30 +0,0 @@ -// just like the Entry class, but it buffers the contents -// -// XXX It would be good to set a maximum BufferEntry filesize, -// since it eats up memory. In normal operation, -// these are only for long filenames or link names, which are -// rarely very big. - -module.exports = BufferEntry - -var inherits = require("inherits") - , Entry = require("./entry.js") - -function BufferEntry () { - Entry.apply(this, arguments) - this._buffer = new Buffer(this.props.size) - this._offset = 0 - this.body = "" - this.on("end", function () { - this.body = this._buffer.toString().slice(0, -1) - }) -} - -inherits(BufferEntry, Entry) - -// collect the bytes as they come in. -BufferEntry.prototype.write = function (c) { - c.copy(this._buffer, this._offset) - this._offset += c.length - Entry.prototype.write.call(this, c) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry-writer.js deleted file mode 100644 index 8e09042d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry-writer.js +++ /dev/null @@ -1,169 +0,0 @@ -module.exports = EntryWriter - -var tar = require("../tar.js") - , TarHeader = require("./header.js") - , Entry = require("./entry.js") - , inherits = require("inherits") - , BlockStream = require("block-stream") - , ExtendedHeaderWriter - , Stream = require("stream").Stream - , EOF = {} - -inherits(EntryWriter, Stream) - -function EntryWriter (props) { - var me = this - - if (!(me instanceof EntryWriter)) { - return new EntryWriter(props) - } - - Stream.apply(this) - - me.writable = true - me.readable = true - - me._stream = new BlockStream(512) - - me._stream.on("data", function (c) { - me.emit("data", c) - }) - - me._stream.on("drain", function () { - me.emit("drain") - }) - - me._stream.on("end", function () { - me.emit("end") - me.emit("close") - }) - - me.props = props - if (props.type === "Directory") { - props.size = 0 - } - props.ustar = "ustar\0" - props.ustarver = "00" - me.path = props.path - - me._buffer = [] - me._didHeader = false - me._meta = false - - me.on("pipe", function () { - me._process() - }) -} - -EntryWriter.prototype.write = function (c) { - // console.error(".. ew write") - if (this._ended) return this.emit("error", new Error("write after end")) - this._buffer.push(c) - this._process() - this._needDrain = this._buffer.length > 0 - return !this._needDrain -} - -EntryWriter.prototype.end = function (c) { - // console.error(".. ew end") - if (c) this._buffer.push(c) - this._buffer.push(EOF) - this._ended = true - this._process() - this._needDrain = this._buffer.length > 0 -} - -EntryWriter.prototype.pause = function () { - // console.error(".. ew pause") - this._paused = true - this.emit("pause") -} - -EntryWriter.prototype.resume = function () { - // console.error(".. ew resume") - this._paused = false - this.emit("resume") - this._process() -} - -EntryWriter.prototype.add = function (entry) { - // console.error(".. ew add") - if (!this.parent) return this.emit("error", new Error("no parent")) - - // make sure that the _header and such is emitted, and clear out - // the _currentEntry link on the parent. - if (!this._ended) this.end() - - return this.parent.add(entry) -} - -EntryWriter.prototype._header = function () { - // console.error(".. ew header") - if (this._didHeader) return - this._didHeader = true - - var headerBlock = TarHeader.encode(this.props) - - if (this.props.needExtended && !this._meta) { - var me = this - - ExtendedHeaderWriter = ExtendedHeaderWriter || - require("./extended-header-writer.js") - - ExtendedHeaderWriter(this.props) - .on("data", function (c) { - me.emit("data", c) - }) - .on("error", function (er) { - me.emit("error", er) - }) - .end() - } - - // console.error(".. .. ew headerBlock emitting") - this.emit("data", headerBlock) - this.emit("header") -} - -EntryWriter.prototype._process = function () { - // console.error(".. .. ew process") - if (!this._didHeader && !this._meta) { - this._header() - } - - if (this._paused || this._processing) { - // console.error(".. .. .. paused=%j, processing=%j", this._paused, this._processing) - return - } - - this._processing = true - - var buf = this._buffer - for (var i = 0; i < buf.length; i ++) { - // console.error(".. .. .. i=%d", i) - - var c = buf[i] - - if (c === EOF) this._stream.end() - else this._stream.write(c) - - if (this._paused) { - // console.error(".. .. .. paused mid-emission") - this._processing = false - if (i < buf.length) { - this._needDrain = true - this._buffer = buf.slice(i + 1) - } - return - } - } - - // console.error(".. .. .. emitted") - this._buffer.length = 0 - this._processing = false - - // console.error(".. .. .. emitting drain") - this.emit("drain") -} - -EntryWriter.prototype.destroy = function () {} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry.js deleted file mode 100644 index 4af5c410..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/entry.js +++ /dev/null @@ -1,213 +0,0 @@ -// A passthrough read/write stream that sets its properties -// based on a header, extendedHeader, and globalHeader -// -// Can be either a file system object of some sort, or -// a pax/ustar metadata entry. - -module.exports = Entry - -var TarHeader = require("./header.js") - , tar = require("../tar") - , assert = require("assert").ok - , Stream = require("stream").Stream - , inherits = require("inherits") - , fstream = require("fstream").Abstract - -function Entry (header, extended, global) { - Stream.call(this) - this.readable = true - this.writable = true - - this._needDrain = false - this._paused = false - this._reading = false - this._ending = false - this._ended = false - this._remaining = 0 - this._queue = [] - this._index = 0 - this._queueLen = 0 - - this._read = this._read.bind(this) - - this.props = {} - this._header = header - this._extended = extended || {} - - // globals can change throughout the course of - // a file parse operation. Freeze it at its current state. - this._global = {} - var me = this - Object.keys(global || {}).forEach(function (g) { - me._global[g] = global[g] - }) - - this._setProps() -} - -inherits(Entry, Stream) - -Entry.prototype.write = function (c) { - if (this._ending) this.error("write() after end()", null, true) - if (this._remaining === 0) { - this.error("invalid bytes past eof") - } - - // often we'll get a bunch of \0 at the end of the last write, - // since chunks will always be 512 bytes when reading a tarball. - if (c.length > this._remaining) { - c = c.slice(0, this._remaining) - } - this._remaining -= c.length - - // put it on the stack. - var ql = this._queueLen - this._queue.push(c) - this._queueLen ++ - - this._read() - - // either paused, or buffered - if (this._paused || ql > 0) { - this._needDrain = true - return false - } - - return true -} - -Entry.prototype.end = function (c) { - if (c) this.write(c) - this._ending = true - this._read() -} - -Entry.prototype.pause = function () { - this._paused = true - this.emit("pause") -} - -Entry.prototype.resume = function () { - // console.error(" Tar Entry resume", this.path) - this.emit("resume") - this._paused = false - this._read() - return this._queueLen - this._index > 1 -} - - // This is bound to the instance -Entry.prototype._read = function () { - // console.error(" Tar Entry _read", this.path) - - if (this._paused || this._reading || this._ended) return - - // set this flag so that event handlers don't inadvertently - // get multiple _read() calls running. - this._reading = true - - // have any data to emit? - while (this._index < this._queueLen && !this._paused) { - var chunk = this._queue[this._index ++] - this.emit("data", chunk) - } - - // check if we're drained - if (this._index >= this._queueLen) { - this._queue.length = this._queueLen = this._index = 0 - if (this._needDrain) { - this._needDrain = false - this.emit("drain") - } - if (this._ending) { - this._ended = true - this.emit("end") - } - } - - // if the queue gets too big, then pluck off whatever we can. - // this should be fairly rare. - var mql = this._maxQueueLen - if (this._queueLen > mql && this._index > 0) { - mql = Math.min(this._index, mql) - this._index -= mql - this._queueLen -= mql - this._queue = this._queue.slice(mql) - } - - this._reading = false -} - -Entry.prototype._setProps = function () { - // props = extended->global->header->{} - var header = this._header - , extended = this._extended - , global = this._global - , props = this.props - - // first get the values from the normal header. - var fields = tar.fields - for (var f = 0; fields[f] !== null; f ++) { - var field = fields[f] - , val = header[field] - if (typeof val !== "undefined") props[field] = val - } - - // next, the global header for this file. - // numeric values, etc, will have already been parsed. - ;[global, extended].forEach(function (p) { - Object.keys(p).forEach(function (f) { - if (typeof p[f] !== "undefined") props[f] = p[f] - }) - }) - - // no nulls allowed in path or linkpath - ;["path", "linkpath"].forEach(function (p) { - if (props.hasOwnProperty(p)) { - props[p] = props[p].split("\0")[0] - } - }) - - - // set date fields to be a proper date - ;["mtime", "ctime", "atime"].forEach(function (p) { - if (props.hasOwnProperty(p)) { - props[p] = new Date(props[p] * 1000) - } - }) - - // set the type so that we know what kind of file to create - var type - switch (tar.types[props.type]) { - case "OldFile": - case "ContiguousFile": - type = "File" - break - - case "GNUDumpDir": - type = "Directory" - break - - case undefined: - type = "Unknown" - break - - case "Link": - case "SymbolicLink": - case "CharacterDevice": - case "BlockDevice": - case "Directory": - case "FIFO": - default: - type = tar.types[props.type] - } - - this.type = type - this.path = props.path - this.size = props.size - - // size is special, since it signals when the file needs to end. - this._remaining = props.size -} - -Entry.prototype.warn = fstream.warn -Entry.prototype.error = fstream.error diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header-writer.js deleted file mode 100644 index 1728c458..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header-writer.js +++ /dev/null @@ -1,191 +0,0 @@ - -module.exports = ExtendedHeaderWriter - -var inherits = require("inherits") - , EntryWriter = require("./entry-writer.js") - -inherits(ExtendedHeaderWriter, EntryWriter) - -var tar = require("../tar.js") - , path = require("path") - , TarHeader = require("./header.js") - -// props is the props of the thing we need to write an -// extended header for. -// Don't be shy with it. Just encode everything. -function ExtendedHeaderWriter (props) { - // console.error(">> ehw ctor") - var me = this - - if (!(me instanceof ExtendedHeaderWriter)) { - return new ExtendedHeaderWriter(props) - } - - me.fields = props - - var p = - { path : ("PaxHeader" + path.join("/", props.path || "")) - .replace(/\\/g, "/").substr(0, 100) - , mode : props.mode || 0666 - , uid : props.uid || 0 - , gid : props.gid || 0 - , size : 0 // will be set later - , mtime : props.mtime || Date.now() / 1000 - , type : "x" - , linkpath : "" - , ustar : "ustar\0" - , ustarver : "00" - , uname : props.uname || "" - , gname : props.gname || "" - , devmaj : props.devmaj || 0 - , devmin : props.devmin || 0 - } - - - EntryWriter.call(me, p) - // console.error(">> ehw props", me.props) - me.props = p - - me._meta = true -} - -ExtendedHeaderWriter.prototype.end = function () { - // console.error(">> ehw end") - var me = this - - if (me._ended) return - me._ended = true - - me._encodeFields() - - if (me.props.size === 0) { - // nothing to write! - me._ready = true - me._stream.end() - return - } - - me._stream.write(TarHeader.encode(me.props)) - me.body.forEach(function (l) { - me._stream.write(l) - }) - me._ready = true - - // console.error(">> ehw _process calling end()", me.props) - this._stream.end() -} - -ExtendedHeaderWriter.prototype._encodeFields = function () { - // console.error(">> ehw _encodeFields") - this.body = [] - if (this.fields.prefix) { - this.fields.path = this.fields.prefix + "/" + this.fields.path - this.fields.prefix = "" - } - encodeFields(this.fields, "", this.body, this.fields.noProprietary) - var me = this - this.body.forEach(function (l) { - me.props.size += l.length - }) -} - -function encodeFields (fields, prefix, body, nop) { - // console.error(">> >> ehw encodeFields") - // "%d %s=%s\n", <length>, <keyword>, <value> - // The length is a decimal number, and includes itself and the \n - // Numeric values are decimal strings. - - Object.keys(fields).forEach(function (k) { - var val = fields[k] - , numeric = tar.numeric[k] - - if (prefix) k = prefix + "." + k - - // already including NODETAR.type, don't need File=true also - if (k === fields.type && val === true) return - - switch (k) { - // don't include anything that's always handled just fine - // in the normal header, or only meaningful in the context - // of nodetar - case "mode": - case "cksum": - case "ustar": - case "ustarver": - case "prefix": - case "basename": - case "dirname": - case "needExtended": - case "block": - case "filter": - return - - case "rdev": - if (val === 0) return - break - - case "nlink": - case "dev": // Truly a hero among men, Creator of Star! - case "ino": // Speak his name with reverent awe! It is: - k = "SCHILY." + k - break - - default: break - } - - if (val && typeof val === "object" && - !Buffer.isBuffer(val)) encodeFields(val, k, body, nop) - else if (val === null || val === undefined) return - else body.push.apply(body, encodeField(k, val, nop)) - }) - - return body -} - -function encodeField (k, v, nop) { - // lowercase keys must be valid, otherwise prefix with - // "NODETAR." - if (k.charAt(0) === k.charAt(0).toLowerCase()) { - var m = k.split(".")[0] - if (!tar.knownExtended[m]) k = "NODETAR." + k - } - - // no proprietary - if (nop && k.charAt(0) !== k.charAt(0).toLowerCase()) { - return [] - } - - if (typeof val === "number") val = val.toString(10) - - var s = new Buffer(" " + k + "=" + v + "\n") - , digits = Math.floor(Math.log(s.length) / Math.log(10)) + 1 - - // console.error("1 s=%j digits=%j s.length=%d", s.toString(), digits, s.length) - - // if adding that many digits will make it go over that length, - // then add one to it. For example, if the string is: - // " foo=bar\n" - // then that's 9 characters. With the "9", that bumps the length - // up to 10. However, this is invalid: - // "10 foo=bar\n" - // but, since that's actually 11 characters, since 10 adds another - // character to the length, and the length includes the number - // itself. In that case, just bump it up again. - if (s.length + digits >= Math.pow(10, digits)) digits += 1 - // console.error("2 s=%j digits=%j s.length=%d", s.toString(), digits, s.length) - - var len = digits + s.length - // console.error("3 s=%j digits=%j s.length=%d len=%d", s.toString(), digits, s.length, len) - var lenBuf = new Buffer("" + len) - if (lenBuf.length + s.length !== len) { - throw new Error("Bad length calculation\n"+ - "len="+len+"\n"+ - "lenBuf="+JSON.stringify(lenBuf.toString())+"\n"+ - "lenBuf.length="+lenBuf.length+"\n"+ - "digits="+digits+"\n"+ - "s="+JSON.stringify(s.toString())+"\n"+ - "s.length="+s.length) - } - - return [lenBuf, s] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header.js deleted file mode 100644 index 74f432ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extended-header.js +++ /dev/null @@ -1,140 +0,0 @@ -// An Entry consisting of: -// -// "%d %s=%s\n", <length>, <keyword>, <value> -// -// The length is a decimal number, and includes itself and the \n -// \0 does not terminate anything. Only the length terminates the string. -// Numeric values are decimal strings. - -module.exports = ExtendedHeader - -var Entry = require("./entry.js") - , inherits = require("inherits") - , tar = require("../tar.js") - , numeric = tar.numeric - , keyTrans = { "SCHILY.dev": "dev" - , "SCHILY.ino": "ino" - , "SCHILY.nlink": "nlink" } - -function ExtendedHeader () { - Entry.apply(this, arguments) - this.on("data", this._parse) - this.fields = {} - this._position = 0 - this._fieldPos = 0 - this._state = SIZE - this._sizeBuf = [] - this._keyBuf = [] - this._valBuf = [] - this._size = -1 - this._key = "" -} - -inherits(ExtendedHeader, Entry) -ExtendedHeader.prototype._parse = parse - -var s = 0 - , states = ExtendedHeader.states = {} - , SIZE = states.SIZE = s++ - , KEY = states.KEY = s++ - , VAL = states.VAL = s++ - , ERR = states.ERR = s++ - -Object.keys(states).forEach(function (s) { - states[states[s]] = states[s] -}) - -states[s] = null - -// char code values for comparison -var _0 = "0".charCodeAt(0) - , _9 = "9".charCodeAt(0) - , point = ".".charCodeAt(0) - , a = "a".charCodeAt(0) - , Z = "Z".charCodeAt(0) - , a = "a".charCodeAt(0) - , z = "z".charCodeAt(0) - , space = " ".charCodeAt(0) - , eq = "=".charCodeAt(0) - , cr = "\n".charCodeAt(0) - -function parse (c) { - if (this._state === ERR) return - - for ( var i = 0, l = c.length - ; i < l - ; this._position++, this._fieldPos++, i++) { - // console.error("top of loop, size="+this._size) - - var b = c[i] - - if (this._size >= 0 && this._fieldPos > this._size) { - error(this, "field exceeds length="+this._size) - return - } - - switch (this._state) { - case ERR: return - - case SIZE: - // console.error("parsing size, b=%d, rest=%j", b, c.slice(i).toString()) - if (b === space) { - this._state = KEY - // this._fieldPos = this._sizeBuf.length - this._size = parseInt(new Buffer(this._sizeBuf).toString(), 10) - this._sizeBuf.length = 0 - continue - } - if (b < _0 || b > _9) { - error(this, "expected [" + _0 + ".." + _9 + "], got " + b) - return - } - this._sizeBuf.push(b) - continue - - case KEY: - // can be any char except =, not > size. - if (b === eq) { - this._state = VAL - this._key = new Buffer(this._keyBuf).toString() - if (keyTrans[this._key]) this._key = keyTrans[this._key] - this._keyBuf.length = 0 - continue - } - this._keyBuf.push(b) - continue - - case VAL: - // field must end with cr - if (this._fieldPos === this._size - 1) { - // console.error("finished with "+this._key) - if (b !== cr) { - error(this, "expected \\n at end of field") - return - } - var val = new Buffer(this._valBuf).toString() - if (numeric[this._key]) { - val = parseFloat(val) - } - this.fields[this._key] = val - - this._valBuf.length = 0 - this._state = SIZE - this._size = -1 - this._fieldPos = -1 - continue - } - this._valBuf.push(b) - continue - } - } -} - -function error (me, msg) { - msg = "invalid header: " + msg - + "\nposition=" + me._position - + "\nfield position=" + me._fieldPos - - me.error(msg) - me.state = ERR -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extract.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extract.js deleted file mode 100644 index c34a81e2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/extract.js +++ /dev/null @@ -1,78 +0,0 @@ -// give it a tarball and a path, and it'll dump the contents - -module.exports = Extract - -var tar = require("../tar.js") - , fstream = require("fstream") - , inherits = require("inherits") - , path = require("path") - -function Extract (opts) { - if (!(this instanceof Extract)) return new Extract(opts) - tar.Parse.apply(this) - - // have to dump into a directory - opts.type = "Directory" - opts.Directory = true - - if (typeof opts !== "object") { - opts = { path: opts } - } - - // better to drop in cwd? seems more standard. - opts.path = opts.path || path.resolve("node-tar-extract") - opts.type = "Directory" - opts.Directory = true - - // similar to --strip or --strip-components - opts.strip = +opts.strip - if (!opts.strip || opts.strip <= 0) opts.strip = 0 - - this._fst = fstream.Writer(opts) - - this.pause() - var me = this - - // Hardlinks in tarballs are relative to the root - // of the tarball. So, they need to be resolved against - // the target directory in order to be created properly. - me.on("entry", function (entry) { - // if there's a "strip" argument, then strip off that many - // path components. - if (opts.strip) { - var p = entry.path.split("/").slice(opts.strip).join("/") - entry.path = entry.props.path = p - if (entry.linkpath) { - var lp = entry.linkpath.split("/").slice(opts.strip).join("/") - entry.linkpath = entry.props.linkpath = lp - } - } - if (entry.type !== "Link") return - entry.linkpath = entry.props.linkpath = - path.join(opts.path, path.join("/", entry.props.linkpath)) - }) - - this._fst.on("ready", function () { - me.pipe(me._fst, { end: false }) - me.resume() - }) - - // this._fst.on("end", function () { - // console.error("\nEEEE Extract End", me._fst.path) - // }) - - this._fst.on("close", function () { - // console.error("\nEEEE Extract End", me._fst.path) - me.emit("end") - me.emit("close") - }) -} - -inherits(Extract, tar.Parse) - -Extract.prototype._streamEnd = function () { - var me = this - if (!me._ended) me.error("unexpected eof") - me._fst.end() - // my .end() is coming later. -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/global-header-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/global-header-writer.js deleted file mode 100644 index 0bfc7b80..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/global-header-writer.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = GlobalHeaderWriter - -var ExtendedHeaderWriter = require("./extended-header-writer.js") - , inherits = require("inherits") - -inherits(GlobalHeaderWriter, ExtendedHeaderWriter) - -function GlobalHeaderWriter (props) { - if (!(this instanceof GlobalHeaderWriter)) { - return new GlobalHeaderWriter(props) - } - ExtendedHeaderWriter.call(this, props) - this.props.type = "g" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/header.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/header.js deleted file mode 100644 index 05b237c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/header.js +++ /dev/null @@ -1,385 +0,0 @@ -// parse a 512-byte header block to a data object, or vice-versa -// If the data won't fit nicely in a simple header, then generate -// the appropriate extended header file, and return that. - -module.exports = TarHeader - -var tar = require("../tar.js") - , fields = tar.fields - , fieldOffs = tar.fieldOffs - , fieldEnds = tar.fieldEnds - , fieldSize = tar.fieldSize - , numeric = tar.numeric - , assert = require("assert").ok - , space = " ".charCodeAt(0) - , slash = "/".charCodeAt(0) - , bslash = process.platform === "win32" ? "\\".charCodeAt(0) : null - -function TarHeader (block) { - if (!(this instanceof TarHeader)) return new TarHeader(block) - if (block) this.decode(block) -} - -TarHeader.prototype = - { decode : decode - , encode: encode - , calcSum: calcSum - , checkSum: checkSum - } - -TarHeader.parseNumeric = parseNumeric -TarHeader.encode = encode -TarHeader.decode = decode - -// note that this will only do the normal ustar header, not any kind -// of extended posix header file. If something doesn't fit comfortably, -// then it will set obj.needExtended = true, and set the block to -// the closest approximation. -function encode (obj) { - if (!obj && !(this instanceof TarHeader)) throw new Error( - "encode must be called on a TarHeader, or supplied an object") - - obj = obj || this - var block = obj.block = new Buffer(512) - - // if the object has a "prefix", then that's actually an extension of - // the path field. - if (obj.prefix) { - // console.error("%% header encoding, got a prefix", obj.prefix) - obj.path = obj.prefix + "/" + obj.path - // console.error("%% header encoding, prefixed path", obj.path) - obj.prefix = "" - } - - obj.needExtended = false - - if (obj.mode) { - if (typeof obj.mode === "string") obj.mode = parseInt(obj.mode, 8) - obj.mode = obj.mode & 0777 - } - - for (var f = 0; fields[f] !== null; f ++) { - var field = fields[f] - , off = fieldOffs[f] - , end = fieldEnds[f] - , ret - - switch (field) { - case "cksum": - // special, done below, after all the others - break - - case "prefix": - // special, this is an extension of the "path" field. - // console.error("%% header encoding, skip prefix later") - break - - case "type": - // convert from long name to a single char. - var type = obj.type || "0" - if (type.length > 1) { - type = tar.types[obj.type] - if (!type) type = "0" - } - writeText(block, off, end, type) - break - - case "path": - // uses the "prefix" field if > 100 bytes, but <= 255 - var pathLen = Buffer.byteLength(obj.path) - , pathFSize = fieldSize[fields.path] - , prefFSize = fieldSize[fields.prefix] - - // paths between 100 and 255 should use the prefix field. - // longer than 255 - if (pathLen > pathFSize && - pathLen <= pathFSize + prefFSize) { - // need to find a slash somewhere in the middle so that - // path and prefix both fit in their respective fields - var searchStart = pathLen - 1 - pathFSize - , searchEnd = prefFSize - , found = false - , pathBuf = new Buffer(obj.path) - - for ( var s = searchStart - ; (s <= searchEnd) - ; s ++ ) { - if (pathBuf[s] === slash || pathBuf[s] === bslash) { - found = s - break - } - } - - if (found !== false) { - prefix = pathBuf.slice(0, found).toString("utf8") - path = pathBuf.slice(found + 1).toString("utf8") - - ret = writeText(block, off, end, path) - off = fieldOffs[fields.prefix] - end = fieldEnds[fields.prefix] - // console.error("%% header writing prefix", off, end, prefix) - ret = writeText(block, off, end, prefix) || ret - break - } - } - - // paths less than 100 chars don't need a prefix - // and paths longer than 255 need an extended header and will fail - // on old implementations no matter what we do here. - // Null out the prefix, and fallthrough to default. - // console.error("%% header writing no prefix") - var poff = fieldOffs[fields.prefix] - , pend = fieldEnds[fields.prefix] - writeText(block, poff, pend, "") - // fallthrough - - // all other fields are numeric or text - default: - ret = numeric[field] - ? writeNumeric(block, off, end, obj[field]) - : writeText(block, off, end, obj[field] || "") - break - } - obj.needExtended = obj.needExtended || ret - } - - var off = fieldOffs[fields.cksum] - , end = fieldEnds[fields.cksum] - - writeNumeric(block, off, end, calcSum.call(this, block)) - - return block -} - -// if it's a negative number, or greater than will fit, -// then use write256. -var MAXNUM = { 12: 077777777777 - , 11: 07777777777 - , 8 : 07777777 - , 7 : 0777777 } -function writeNumeric (block, off, end, num) { - var writeLen = end - off - , maxNum = MAXNUM[writeLen] || 0 - - num = num || 0 - // console.error(" numeric", num) - - if (num instanceof Date || - Object.prototype.toString.call(num) === "[object Date]") { - num = num.getTime() / 1000 - } - - if (num > maxNum || num < 0) { - write256(block, off, end, num) - // need an extended header if negative or too big. - return true - } - - // god, tar is so annoying - // if the string is small enough, you should put a space - // between the octal string and the \0, but if it doesn't - // fit, then don't. - var numStr = Math.floor(num).toString(8) - if (num < MAXNUM[writeLen - 1]) numStr += " " - - // pad with "0" chars - if (numStr.length < writeLen) { - numStr = (new Array(writeLen - numStr.length).join("0")) + numStr - } - - if (numStr.length !== writeLen - 1) { - throw new Error("invalid length: " + JSON.stringify(numStr) + "\n" + - "expected: "+writeLen) - } - block.write(numStr, off, writeLen, "utf8") - block[end - 1] = 0 -} - -function write256 (block, off, end, num) { - var buf = block.slice(off, end) - var positive = num >= 0 - buf[0] = positive ? 0x80 : 0xFF - - // get the number as a base-256 tuple - if (!positive) num *= -1 - var tuple = [] - do { - var n = num % 256 - tuple.push(n) - num = (num - n) / 256 - } while (num) - - var bytes = tuple.length - - var fill = buf.length - bytes - for (var i = 1; i < fill; i ++) { - buf[i] = positive ? 0 : 0xFF - } - - // tuple is a base256 number, with [0] as the *least* significant byte - // if it's negative, then we need to flip all the bits once we hit the - // first non-zero bit. The 2's-complement is (0x100 - n), and the 1's- - // complement is (0xFF - n). - var zero = true - for (i = bytes; i > 0; i --) { - var byte = tuple[bytes - i] - if (positive) buf[fill + i] = byte - else if (zero && byte === 0) buf[fill + i] = 0 - else if (zero) { - zero = false - buf[fill + i] = 0x100 - byte - } else buf[fill + i] = 0xFF - byte - } -} - -function writeText (block, off, end, str) { - // strings are written as utf8, then padded with \0 - var strLen = Buffer.byteLength(str) - , writeLen = Math.min(strLen, end - off) - // non-ascii fields need extended headers - // long fields get truncated - , needExtended = strLen !== str.length || strLen > writeLen - - // write the string, and null-pad - if (writeLen > 0) block.write(str, off, writeLen, "utf8") - for (var i = off + writeLen; i < end; i ++) block[i] = 0 - - return needExtended -} - -function calcSum (block) { - block = block || this.block - assert(Buffer.isBuffer(block) && block.length === 512) - - if (!block) throw new Error("Need block to checksum") - - // now figure out what it would be if the cksum was " " - var sum = 0 - , start = fieldOffs[fields.cksum] - , end = fieldEnds[fields.cksum] - - for (var i = 0; i < fieldOffs[fields.cksum]; i ++) { - sum += block[i] - } - - for (var i = start; i < end; i ++) { - sum += space - } - - for (var i = end; i < 512; i ++) { - sum += block[i] - } - - return sum -} - - -function checkSum (block) { - var sum = calcSum.call(this, block) - block = block || this.block - - var cksum = block.slice(fieldOffs[fields.cksum], fieldEnds[fields.cksum]) - cksum = parseNumeric(cksum) - - return cksum === sum -} - -function decode (block) { - block = block || this.block - assert(Buffer.isBuffer(block) && block.length === 512) - - this.block = block - this.cksumValid = this.checkSum() - - var prefix = null - - // slice off each field. - for (var f = 0; fields[f] !== null; f ++) { - var field = fields[f] - , val = block.slice(fieldOffs[f], fieldEnds[f]) - - switch (field) { - case "ustar": - // if not ustar, then everything after that is just padding. - if (val.toString() !== "ustar\0") { - this.ustar = false - return - } else { - // console.error("ustar:", val, val.toString()) - this.ustar = val.toString() - } - break - - // prefix is special, since it might signal the xstar header - case "prefix": - var atime = parseNumeric(val.slice(131, 131 + 12)) - , ctime = parseNumeric(val.slice(131 + 12, 131 + 12 + 12)) - if ((val[130] === 0 || val[130] === space) && - typeof atime === "number" && - typeof ctime === "number" && - val[131 + 12] === space && - val[131 + 12 + 12] === space) { - this.atime = atime - this.ctime = ctime - val = val.slice(0, 130) - } - prefix = val.toString("utf8").replace(/\0+$/, "") - // console.error("%% header reading prefix", prefix) - break - - // all other fields are null-padding text - // or a number. - default: - if (numeric[field]) { - this[field] = parseNumeric(val) - } else { - this[field] = val.toString("utf8").replace(/\0+$/, "") - } - break - } - } - - // if we got a prefix, then prepend it to the path. - if (prefix) { - this.path = prefix + "/" + this.path - // console.error("%% header got a prefix", this.path) - } -} - -function parse256 (buf) { - // first byte MUST be either 80 or FF - // 80 for positive, FF for 2's comp - var positive - if (buf[0] === 0x80) positive = true - else if (buf[0] === 0xFF) positive = false - else return null - - // build up a base-256 tuple from the least sig to the highest - var zero = false - , tuple = [] - for (var i = buf.length - 1; i > 0; i --) { - var byte = buf[i] - if (positive) tuple.push(byte) - else if (zero && byte === 0) tuple.push(0) - else if (zero) { - zero = false - tuple.push(0x100 - byte) - } else tuple.push(0xFF - byte) - } - - for (var sum = 0, i = 0, l = tuple.length; i < l; i ++) { - sum += tuple[i] * Math.pow(256, i) - } - - return positive ? sum : -1 * sum -} - -function parseNumeric (f) { - if (f[0] & 0x80) return parse256(f) - - var str = f.toString("utf8").split("\0")[0].trim() - , res = parseInt(str, 8) - - return isNaN(res) ? null : res -} - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/pack.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/pack.js deleted file mode 100644 index 3ff14dd6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/pack.js +++ /dev/null @@ -1,231 +0,0 @@ -// pipe in an fstream, and it'll make a tarball. -// key-value pair argument is global extended header props. - -module.exports = Pack - -var EntryWriter = require("./entry-writer.js") - , Stream = require("stream").Stream - , path = require("path") - , inherits = require("inherits") - , GlobalHeaderWriter = require("./global-header-writer.js") - , collect = require("fstream").collect - , eof = new Buffer(512) - -for (var i = 0; i < 512; i ++) eof[i] = 0 - -inherits(Pack, Stream) - -function Pack (props) { - // console.error("-- p ctor") - var me = this - if (!(me instanceof Pack)) return new Pack(props) - - if (props) me._noProprietary = props.noProprietary - else me._noProprietary = false - - me._global = props - - me.readable = true - me.writable = true - me._buffer = [] - // console.error("-- -- set current to null in ctor") - me._currentEntry = null - me._processing = false - - me._pipeRoot = null - me.on("pipe", function (src) { - if (src.root === me._pipeRoot) return - me._pipeRoot = src - src.on("end", function () { - me._pipeRoot = null - }) - me.add(src) - }) -} - -Pack.prototype.addGlobal = function (props) { - // console.error("-- p addGlobal") - if (this._didGlobal) return - this._didGlobal = true - - var me = this - GlobalHeaderWriter(props) - .on("data", function (c) { - me.emit("data", c) - }) - .end() -} - -Pack.prototype.add = function (stream) { - if (this._global && !this._didGlobal) this.addGlobal(this._global) - - if (this._ended) return this.emit("error", new Error("add after end")) - - collect(stream) - this._buffer.push(stream) - this._process() - this._needDrain = this._buffer.length > 0 - return !this._needDrain -} - -Pack.prototype.pause = function () { - this._paused = true - if (this._currentEntry) this._currentEntry.pause() - this.emit("pause") -} - -Pack.prototype.resume = function () { - this._paused = false - if (this._currentEntry) this._currentEntry.resume() - this.emit("resume") - this._process() -} - -Pack.prototype.end = function () { - this._ended = true - this._buffer.push(eof) - this._process() -} - -Pack.prototype._process = function () { - var me = this - if (me._paused || me._processing) { - return - } - - var entry = me._buffer.shift() - - if (!entry) { - if (me._needDrain) { - me.emit("drain") - } - return - } - - if (entry.ready === false) { - // console.error("-- entry is not ready", entry) - me._buffer.unshift(entry) - entry.on("ready", function () { - // console.error("-- -- ready!", entry) - me._process() - }) - return - } - - me._processing = true - - if (entry === eof) { - // need 2 ending null blocks. - me.emit("data", eof) - me.emit("data", eof) - me.emit("end") - me.emit("close") - return - } - - // Change the path to be relative to the root dir that was - // added to the tarball. - // - // XXX This should be more like how -C works, so you can - // explicitly set a root dir, and also explicitly set a pathname - // in the tarball to use. That way we can skip a lot of extra - // work when resolving symlinks for bundled dependencies in npm. - - var root = path.dirname((entry.root || entry).path) - var wprops = {} - - Object.keys(entry.props || {}).forEach(function (k) { - wprops[k] = entry.props[k] - }) - - if (me._noProprietary) wprops.noProprietary = true - - wprops.path = path.relative(root, entry.path || '') - - // actually not a matter of opinion or taste. - if (process.platform === "win32") { - wprops.path = wprops.path.replace(/\\/g, "/") - } - - if (!wprops.type) - wprops.type = 'Directory' - - switch (wprops.type) { - // sockets not supported - case "Socket": - return - - case "Directory": - wprops.path += "/" - wprops.size = 0 - break - - case "Link": - var lp = path.resolve(path.dirname(entry.path), entry.linkpath) - wprops.linkpath = path.relative(root, lp) || "." - wprops.size = 0 - break - - case "SymbolicLink": - var lp = path.resolve(path.dirname(entry.path), entry.linkpath) - wprops.linkpath = path.relative(path.dirname(entry.path), lp) || "." - wprops.size = 0 - break - } - - // console.error("-- new writer", wprops) - // if (!wprops.type) { - // // console.error("-- no type?", entry.constructor.name, entry) - // } - - // console.error("-- -- set current to new writer", wprops.path) - var writer = me._currentEntry = EntryWriter(wprops) - - writer.parent = me - - // writer.on("end", function () { - // // console.error("-- -- writer end", writer.path) - // }) - - writer.on("data", function (c) { - me.emit("data", c) - }) - - writer.on("header", function () { - Buffer.prototype.toJSON = function () { - return this.toString().split(/\0/).join(".") - } - // console.error("-- -- writer header %j", writer.props) - if (writer.props.size === 0) nextEntry() - }) - writer.on("close", nextEntry) - - var ended = false - function nextEntry () { - if (ended) return - ended = true - - // console.error("-- -- writer close", writer.path) - // console.error("-- -- set current to null", wprops.path) - me._currentEntry = null - me._processing = false - me._process() - } - - writer.on("error", function (er) { - // console.error("-- -- writer error", writer.path) - me.emit("error", er) - }) - - // if it's the root, then there's no need to add its entries, - // or data, since they'll be added directly. - if (entry === me._pipeRoot) { - // console.error("-- is the root, don't auto-add") - writer.add = null - } - - entry.pipe(writer) -} - -Pack.prototype.destroy = function () {} -Pack.prototype.write = function () {} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/parse.js deleted file mode 100644 index 884e73db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/lib/parse.js +++ /dev/null @@ -1,270 +0,0 @@ - -// A writable stream. -// It emits "entry" events, which provide a readable stream that has -// header info attached. - -module.exports = Parse.create = Parse - -var stream = require("stream") - , Stream = stream.Stream - , BlockStream = require("block-stream") - , tar = require("../tar.js") - , TarHeader = require("./header.js") - , Entry = require("./entry.js") - , BufferEntry = require("./buffer-entry.js") - , ExtendedHeader = require("./extended-header.js") - , assert = require("assert").ok - , inherits = require("inherits") - , fstream = require("fstream") - -// reading a tar is a lot like reading a directory -// However, we're actually not going to run the ctor, -// since it does a stat and various other stuff. -// This inheritance gives us the pause/resume/pipe -// behavior that is desired. -inherits(Parse, fstream.Reader) - -function Parse () { - var me = this - if (!(me instanceof Parse)) return new Parse() - - // doesn't apply fstream.Reader ctor? - // no, becasue we don't want to stat/etc, we just - // want to get the entry/add logic from .pipe() - Stream.apply(me) - - me.writable = true - me.readable = true - me._stream = new BlockStream(512) - me.position = 0 - - me._stream.on("error", function (e) { - me.emit("error", e) - }) - - me._stream.on("data", function (c) { - me._process(c) - }) - - me._stream.on("end", function () { - me._streamEnd() - }) - - me._stream.on("drain", function () { - me.emit("drain") - }) -} - -// overridden in Extract class, since it needs to -// wait for its DirWriter part to finish before -// emitting "end" -Parse.prototype._streamEnd = function () { - var me = this - if (!me._ended) me.error("unexpected eof") - me.emit("end") -} - -// a tar reader is actually a filter, not just a readable stream. -// So, you should pipe a tarball stream into it, and it needs these -// write/end methods to do that. -Parse.prototype.write = function (c) { - if (this._ended) { - // gnutar puts a LOT of nulls at the end. - // you can keep writing these things forever. - // Just ignore them. - for (var i = 0, l = c.length; i > l; i ++) { - if (c[i] !== 0) return this.error("write() after end()") - } - return - } - return this._stream.write(c) -} - -Parse.prototype.end = function (c) { - this._ended = true - return this._stream.end(c) -} - -// don't need to do anything, since we're just -// proxying the data up from the _stream. -// Just need to override the parent's "Not Implemented" -// error-thrower. -Parse.prototype._read = function () {} - -Parse.prototype._process = function (c) { - assert(c && c.length === 512, "block size should be 512") - - // one of three cases. - // 1. A new header - // 2. A part of a file/extended header - // 3. One of two or more EOF null blocks - - if (this._entry) { - var entry = this._entry - entry.write(c) - if (entry._remaining === 0) { - entry.end() - this._entry = null - } - } else { - // either zeroes or a header - var zero = true - for (var i = 0; i < 512 && zero; i ++) { - zero = c[i] === 0 - } - - // eof is *at least* 2 blocks of nulls, and then the end of the - // file. you can put blocks of nulls between entries anywhere, - // so appending one tarball to another is technically valid. - // ending without the eof null blocks is not allowed, however. - if (zero) { - this._ended = this._eofStarted - this._eofStarted = true - } else { - this._ended = this._eofStarted = false - this._startEntry(c) - } - - } - - this.position += 512 -} - -// take a header chunk, start the right kind of entry. -Parse.prototype._startEntry = function (c) { - var header = new TarHeader(c) - , self = this - , entry - , ev - , EntryType - , onend - , meta = false - - if (null === header.size || !header.cksumValid) { - var e = new Error("invalid tar file") - e.header = header - e.tar_file_offset = this.position - e.tar_block = this.position / 512 - this.emit("error", e) - } - - switch (tar.types[header.type]) { - case "File": - case "OldFile": - case "Link": - case "SymbolicLink": - case "CharacterDevice": - case "BlockDevice": - case "Directory": - case "FIFO": - case "ContiguousFile": - case "GNUDumpDir": - // start a file. - // pass in any extended headers - // These ones consumers are typically most interested in. - EntryType = Entry - ev = "entry" - break - - case "GlobalExtendedHeader": - // extended headers that apply to the rest of the tarball - EntryType = ExtendedHeader - onend = function () { - self._global = self._global || {} - Object.keys(entry.fields).forEach(function (k) { - self._global[k] = entry.fields[k] - }) - } - ev = "globalExtendedHeader" - meta = true - break - - case "ExtendedHeader": - case "OldExtendedHeader": - // extended headers that apply to the next entry - EntryType = ExtendedHeader - onend = function () { - self._extended = entry.fields - } - ev = "extendedHeader" - meta = true - break - - case "NextFileHasLongLinkpath": - // set linkpath=<contents> in extended header - EntryType = BufferEntry - onend = function () { - self._extended = self._extended || {} - self._extended.linkpath = entry.body - } - ev = "longLinkpath" - meta = true - break - - case "NextFileHasLongPath": - case "OldGnuLongPath": - // set path=<contents> in file-extended header - EntryType = BufferEntry - onend = function () { - self._extended = self._extended || {} - self._extended.path = entry.body - } - ev = "longPath" - meta = true - break - - default: - // all the rest we skip, but still set the _entry - // member, so that we can skip over their data appropriately. - // emit an event to say that this is an ignored entry type? - EntryType = Entry - ev = "ignoredEntry" - break - } - - var global, extended - if (meta) { - global = extended = null - } else { - var global = this._global - var extended = this._extended - - // extendedHeader only applies to one entry, so once we start - // an entry, it's over. - this._extended = null - } - entry = new EntryType(header, extended, global) - entry.meta = meta - - // only proxy data events of normal files. - if (!meta) { - entry.on("data", function (c) { - me.emit("data", c) - }) - } - - if (onend) entry.on("end", onend) - - this._entry = entry - var me = this - - entry.on("pause", function () { - me.pause() - }) - - entry.on("resume", function () { - me.resume() - }) - - if (this.listeners("*").length) { - this.emit("*", ev, entry) - } - - this.emit(ev, entry) - - // Zero-byte entry. End immediately. - if (entry.props.size === 0) { - entry.end() - this._entry = null - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/LICENCE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/LICENCE deleted file mode 100644 index 74489e2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/LICENCE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) Isaac Z. Schlueter -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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/README.md deleted file mode 100644 index c16e9c46..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# block-stream - -A stream of blocks. - -Write data into it, and it'll output data in buffer blocks the size you -specify, padding with zeroes if necessary. - -```javascript -var block = new BlockStream(512) -fs.createReadStream("some-file").pipe(block) -block.pipe(fs.createWriteStream("block-file")) -``` - -When `.end()` or `.flush()` is called, it'll pad the block with zeroes. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream-pause.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream-pause.js deleted file mode 100644 index 9328844a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream-pause.js +++ /dev/null @@ -1,70 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - f.pause() - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - f.resume() - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream.js deleted file mode 100644 index 1141f3a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/block-stream.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper-pause.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper-pause.js deleted file mode 100644 index 93e4068e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper-pause.js +++ /dev/null @@ -1,70 +0,0 @@ -var BlockStream = require("dropper") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - f.pause() - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - f.resume() - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper.js deleted file mode 100644 index 55fa1330..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/bench/dropper.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("dropper") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/block-stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/block-stream.js deleted file mode 100644 index 008de035..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/block-stream.js +++ /dev/null @@ -1,209 +0,0 @@ -// write data to it, and it'll emit data in 512 byte blocks. -// if you .end() or .flush(), it'll emit whatever it's got, -// padded with nulls to 512 bytes. - -module.exports = BlockStream - -var Stream = require("stream").Stream - , inherits = require("inherits") - , assert = require("assert").ok - , debug = process.env.DEBUG ? console.error : function () {} - -function BlockStream (size, opt) { - this.writable = this.readable = true - this._opt = opt || {} - this._chunkSize = size || 512 - this._offset = 0 - this._buffer = [] - this._bufferLength = 0 - if (this._opt.nopad) this._zeroes = false - else { - this._zeroes = new Buffer(this._chunkSize) - for (var i = 0; i < this._chunkSize; i ++) { - this._zeroes[i] = 0 - } - } -} - -inherits(BlockStream, Stream) - -BlockStream.prototype.write = function (c) { - // debug(" BS write", c) - if (this._ended) throw new Error("BlockStream: write after end") - if (c && !Buffer.isBuffer(c)) c = new Buffer(c + "") - if (c.length) { - this._buffer.push(c) - this._bufferLength += c.length - } - // debug("pushed onto buffer", this._bufferLength) - if (this._bufferLength >= this._chunkSize) { - if (this._paused) { - // debug(" BS paused, return false, need drain") - this._needDrain = true - return false - } - this._emitChunk() - } - return true -} - -BlockStream.prototype.pause = function () { - // debug(" BS pausing") - this._paused = true -} - -BlockStream.prototype.resume = function () { - // debug(" BS resume") - this._paused = false - return this._emitChunk() -} - -BlockStream.prototype.end = function (chunk) { - // debug("end", chunk) - if (typeof chunk === "function") cb = chunk, chunk = null - if (chunk) this.write(chunk) - this._ended = true - this.flush() -} - -BlockStream.prototype.flush = function () { - this._emitChunk(true) -} - -BlockStream.prototype._emitChunk = function (flush) { - // debug("emitChunk flush=%j emitting=%j paused=%j", flush, this._emitting, this._paused) - - // emit a <chunkSize> chunk - if (flush && this._zeroes) { - // debug(" BS push zeroes", this._bufferLength) - // push a chunk of zeroes - var padBytes = (this._bufferLength % this._chunkSize) - if (padBytes !== 0) padBytes = this._chunkSize - padBytes - if (padBytes > 0) { - // debug("padBytes", padBytes, this._zeroes.slice(0, padBytes)) - this._buffer.push(this._zeroes.slice(0, padBytes)) - this._bufferLength += padBytes - // debug(this._buffer[this._buffer.length - 1].length, this._bufferLength) - } - } - - if (this._emitting || this._paused) return - this._emitting = true - - // debug(" BS entering loops") - var bufferIndex = 0 - while (this._bufferLength >= this._chunkSize && - (flush || !this._paused)) { - // debug(" BS data emission loop", this._bufferLength) - - var out - , outOffset = 0 - , outHas = this._chunkSize - - while (outHas > 0 && (flush || !this._paused) ) { - // debug(" BS data inner emit loop", this._bufferLength) - var cur = this._buffer[bufferIndex] - , curHas = cur.length - this._offset - // debug("cur=", cur) - // debug("curHas=%j", curHas) - // If it's not big enough to fill the whole thing, then we'll need - // to copy multiple buffers into one. However, if it is big enough, - // then just slice out the part we want, to save unnecessary copying. - // Also, need to copy if we've already done some copying, since buffers - // can't be joined like cons strings. - if (out || curHas < outHas) { - out = out || new Buffer(this._chunkSize) - cur.copy(out, outOffset, - this._offset, this._offset + Math.min(curHas, outHas)) - } else if (cur.length === outHas && this._offset === 0) { - // shortcut -- cur is exactly long enough, and no offset. - out = cur - } else { - // slice out the piece of cur that we need. - out = cur.slice(this._offset, this._offset + outHas) - } - - if (curHas > outHas) { - // means that the current buffer couldn't be completely output - // update this._offset to reflect how much WAS written - this._offset += outHas - outHas = 0 - } else { - // output the entire current chunk. - // toss it away - outHas -= curHas - outOffset += curHas - bufferIndex ++ - this._offset = 0 - } - } - - this._bufferLength -= this._chunkSize - assert(out.length === this._chunkSize) - // debug("emitting data", out) - // debug(" BS emitting, paused=%j", this._paused, this._bufferLength) - this.emit("data", out) - out = null - } - // debug(" BS out of loops", this._bufferLength) - - // whatever is left, it's not enough to fill up a block, or we're paused - this._buffer = this._buffer.slice(bufferIndex) - if (this._paused) { - // debug(" BS paused, leaving", this._bufferLength) - this._needsDrain = true - this._emitting = false - return - } - - // if flushing, and not using null-padding, then need to emit the last - // chunk(s) sitting in the queue. We know that it's not enough to - // fill up a whole block, because otherwise it would have been emitted - // above, but there may be some offset. - var l = this._buffer.length - if (flush && !this._zeroes && l) { - if (l === 1) { - if (this._offset) { - this.emit("data", this._buffer[0].slice(this._offset)) - } else { - this.emit("data", this._buffer[0]) - } - } else { - var outHas = this._bufferLength - , out = new Buffer(outHas) - , outOffset = 0 - for (var i = 0; i < l; i ++) { - var cur = this._buffer[i] - , curHas = cur.length - this._offset - cur.copy(out, outOffset, this._offset) - this._offset = 0 - outOffset += curHas - this._bufferLength -= curHas - } - this.emit("data", out) - } - // truncate - this._buffer.length = 0 - this._bufferLength = 0 - this._offset = 0 - } - - // now either drained or ended - // debug("either draining, or ended", this._bufferLength, this._ended) - // means that we've flushed out all that we can so far. - if (this._needDrain) { - // debug("emitting drain", this._bufferLength) - this._needDrain = false - this.emit("drain") - } - - if ((this._bufferLength === 0) && this._ended && !this._endEmitted) { - // debug("emitting end", this._bufferLength) - this._endEmitted = true - this.emit("end") - } - - this._emitting = false - - // debug(" BS no longer emitting", flush, this._paused, this._emitting, this._bufferLength, this._chunkSize) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/package.json deleted file mode 100644 index a9dec954..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "block-stream", - "description": "a stream of blocks", - "version": "0.0.7", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/block-stream.git" - }, - "engines": { - "node": "0.4 || >=0.5.8" - }, - "main": "block-stream.js", - "dependencies": { - "inherits": "~2.0.0" - }, - "devDependencies": { - "tap": "0.x" - }, - "scripts": { - "test": "tap test/" - }, - "license": "BSD", - "readme": "# block-stream\n\nA stream of blocks.\n\nWrite data into it, and it'll output data in buffer blocks the size you\nspecify, padding with zeroes if necessary.\n\n```javascript\nvar block = new BlockStream(512)\nfs.createReadStream(\"some-file\").pipe(block)\nblock.pipe(fs.createWriteStream(\"block-file\"))\n```\n\nWhen `.end()` or `.flush()` is called, it'll pad the block with zeroes.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/block-stream/issues" - }, - "homepage": "https://github.com/isaacs/block-stream", - "_id": "block-stream@0.0.7", - "dist": { - "shasum": "f02594aed4110922c417d5d634b45e55a4ffaefd" - }, - "_from": "block-stream@*", - "_resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/basic.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/basic.js deleted file mode 100644 index b4b93051..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/basic.js +++ /dev/null @@ -1,27 +0,0 @@ -var tap = require("tap") - , BlockStream = require("../block-stream.js") - -tap.test("basic test", function (t) { - var b = new BlockStream(16) - var fs = require("fs") - var fstr = fs.createReadStream(__filename, {encoding: "utf8"}) - fstr.pipe(b) - - var stat - t.doesNotThrow(function () { - stat = fs.statSync(__filename) - }, "stat should not throw") - - var totalBytes = 0 - b.on("data", function (c) { - t.equal(c.length, 16, "chunks should be 16 bytes long") - t.type(c, Buffer, "chunks should be buffer objects") - totalBytes += c.length - }) - b.on("end", function () { - var expectedBytes = stat.size + (16 - stat.size % 16) - t.equal(totalBytes, expectedBytes, "Should be multiple of 16") - t.end() - }) - -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad-thorough.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad-thorough.js deleted file mode 100644 index 7a8de88b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad-thorough.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16]//, 25]//, 1024] - , writeSizes = [4, 15, 16, 17, 64 ]//, 64, 100] - , writeCounts = [1, 10]//, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad.js deleted file mode 100644 index 6d38429f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/nopad.js +++ /dev/null @@ -1,57 +0,0 @@ -var BlockStream = require("../") -var tap = require("tap") - - -tap.test("don't pad, small writes", function (t) { - var f = new BlockStream(16, { nopad: true }) - t.plan(1) - - f.on("data", function (c) { - t.equal(c.toString(), "abc", "should get 'abc'") - }) - - f.on("end", function () { t.end() }) - - f.write(new Buffer("a")) - f.write(new Buffer("b")) - f.write(new Buffer("c")) - f.end() -}) - -tap.test("don't pad, exact write", function (t) { - var f = new BlockStream(16, { nopad: true }) - t.plan(1) - - var first = true - f.on("data", function (c) { - if (first) { - first = false - t.equal(c.toString(), "abcdefghijklmnop", "first chunk") - } else { - t.fail("should only get one") - } - }) - - f.on("end", function () { t.end() }) - - f.end(new Buffer("abcdefghijklmnop")) -}) - -tap.test("don't pad, big write", function (t) { - var f = new BlockStream(16, { nopad: true }) - t.plan(2) - - var first = true - f.on("data", function (c) { - if (first) { - first = false - t.equal(c.toString(), "abcdefghijklmnop", "first chunk") - } else { - t.equal(c.toString(), "q") - } - }) - - f.on("end", function () { t.end() }) - - f.end(new Buffer("abcdefghijklmnopq")) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/pause-resume.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/pause-resume.js deleted file mode 100644 index 64d0d091..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/pause-resume.js +++ /dev/null @@ -1,73 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16] - , writeSizes = [15, 16, 17] - , writeCounts = [1, 10]//, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - var paused = false - - f.on("data", function (c) { - timeouts ++ - t.notOk(paused, "should not be paused when emitting data") - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - paused = true - f.pause() - process.nextTick(function () { - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - paused = false - f.resume() - timeouts -- - }) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = expectChunks * blockSize - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 200) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/thorough.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/thorough.js deleted file mode 100644 index 1cc9ea08..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/thorough.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16]//, 25]//, 1024] - , writeSizes = [4, 15, 16, 17, 64 ]//, 64, 100] - , writeCounts = [1, 10]//, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = expectChunks * blockSize - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/two-stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/two-stream.js deleted file mode 100644 index c6db79a4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/block-stream/test/two-stream.js +++ /dev/null @@ -1,59 +0,0 @@ -var log = console.log, - assert = require( 'assert' ), - BlockStream = require("../block-stream.js"), - isize = 0, tsize = 0, fsize = 0, psize = 0, i = 0, - filter = null, paper = null, stack = null, - -// a source data buffer -tsize = 1 * 1024; // <- 1K -stack = new Buffer( tsize ); -for ( ; i < tsize; i++) stack[i] = "x".charCodeAt(0); - -isize = 1 * 1024; // <- initial packet size with 4K no bug! -fsize = 2 * 1024 ; // <- first block-stream size -psize = Math.ceil( isize / 6 ); // <- second block-stream size - -fexpected = Math.ceil( tsize / fsize ); // <- packets expected for first -pexpected = Math.ceil( tsize / psize ); // <- packets expected for second - - -filter = new BlockStream( fsize, { nopad : true } ); -paper = new BlockStream( psize, { nopad : true } ); - - -var fcounter = 0; -filter.on( 'data', function (c) { - // verify that they're not null-padded - for (var i = 0; i < c.length; i ++) { - assert.strictEqual(c[i], "x".charCodeAt(0)) - } - ++fcounter; -} ); - -var pcounter = 0; -paper.on( 'data', function (c) { - // verify that they're not null-padded - for (var i = 0; i < c.length; i ++) { - assert.strictEqual(c[i], "x".charCodeAt(0)) - } - ++pcounter; -} ); - -filter.pipe( paper ); - -filter.on( 'end', function () { - log("fcounter: %s === %s", fcounter, fexpected) - assert.strictEqual( fcounter, fexpected ); -} ); - -paper.on( 'end', function () { - log("pcounter: %s === %s", pcounter, pexpected); - assert.strictEqual( pcounter, pexpected ); -} ); - - -for ( i = 0, j = isize; j <= tsize; j += isize ) { - filter.write( stack.slice( j - isize, j ) ); -} - -filter.end(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.npmignore deleted file mode 100644 index 494272a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -.*.swp -node_modules/ -examples/deep-copy/ -examples/path/ -examples/filter-copy/ diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.travis.yml deleted file mode 100644 index 2d26206d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.6 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/README.md deleted file mode 100644 index 9d8cb77e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/README.md +++ /dev/null @@ -1,76 +0,0 @@ -Like FS streams, but with stat on them, and supporting directories and -symbolic links, as well as normal files. Also, you can use this to set -the stats on a file, even if you don't change its contents, or to create -a symlink, etc. - -So, for example, you can "write" a directory, and it'll call `mkdir`. You -can specify a uid and gid, and it'll call `chown`. You can specify a -`mtime` and `atime`, and it'll call `utimes`. You can call it a symlink -and provide a `linkpath` and it'll call `symlink`. - -Note that it won't automatically resolve symbolic links. So, if you -call `fstream.Reader('/some/symlink')` then you'll get an object -that stats and then ends immediately (since it has no data). To follow -symbolic links, do this: `fstream.Reader({path:'/some/symlink', follow: -true })`. - -There are various checks to make sure that the bytes emitted are the -same as the intended size, if the size is set. - -## Examples - -```javascript -fstream - .Writer({ path: "path/to/file" - , mode: 0755 - , size: 6 - }) - .write("hello\n") - .end() -``` - -This will create the directories if they're missing, and then write -`hello\n` into the file, chmod it to 0755, and assert that 6 bytes have -been written when it's done. - -```javascript -fstream - .Writer({ path: "path/to/file" - , mode: 0755 - , size: 6 - , flags: "a" - }) - .write("hello\n") - .end() -``` - -You can pass flags in, if you want to append to a file. - -```javascript -fstream - .Writer({ path: "path/to/symlink" - , linkpath: "./file" - , SymbolicLink: true - , mode: "0755" // octal strings supported - }) - .end() -``` - -If isSymbolicLink is a function, it'll be called, and if it returns -true, then it'll treat it as a symlink. If it's not a function, then -any truish value will make a symlink, or you can set `type: -'SymbolicLink'`, which does the same thing. - -Note that the linkpath is relative to the symbolic link location, not -the parent dir or cwd. - -```javascript -fstream - .Reader("path/to/dir") - .pipe(fstream.Writer("path/to/other/dir")) -``` - -This will do like `cp -Rp path/to/dir path/to/other/dir`. If the other -dir exists and isn't a directory, then it'll emit an error. It'll also -set the uid, gid, mode, etc. to be identical. In this way, it's more -like `rsync -a` than simply a copy. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/filter-pipe.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/filter-pipe.js deleted file mode 100644 index c6b55b3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/filter-pipe.js +++ /dev/null @@ -1,131 +0,0 @@ -var fstream = require("../fstream.js") -var path = require("path") - -var r = fstream.Reader({ path: path.dirname(__dirname) - , filter: function () { - return !this.basename.match(/^\./) && - !this.basename.match(/^node_modules$/) - !this.basename.match(/^deep-copy$/) - !this.basename.match(/^filter-copy$/) - } - }) - -// this writer will only write directories -var w = fstream.Writer({ path: path.resolve(__dirname, "filter-copy") - , type: "Directory" - , filter: function () { - return this.type === "Directory" - } - }) - -var indent = "" -var escape = {} - -r.on("entry", appears) -r.on("ready", function () { - console.error("ready to begin!", r.path) -}) - -function appears (entry) { - console.error(indent + "a %s appears!", entry.type, entry.basename, typeof entry.basename) - if (foggy) { - console.error("FOGGY!") - var p = entry - do { - console.error(p.depth, p.path, p._paused) - } while (p = p.parent) - - throw new Error("\033[mshould not have entries while foggy") - } - indent += "\t" - entry.on("data", missile(entry)) - entry.on("end", runaway(entry)) - entry.on("entry", appears) -} - -var foggy -function missile (entry) { - if (entry.type === "Directory") { - var ended = false - entry.once("end", function () { ended = true }) - return function (c) { - // throw in some pathological pause()/resume() behavior - // just for extra fun. - process.nextTick(function () { - if (!foggy && !ended) { // && Math.random() < 0.3) { - console.error(indent +"%s casts a spell", entry.basename) - console.error("\na slowing fog comes over the battlefield...\n\033[32m") - entry.pause() - entry.once("resume", liftFog) - foggy = setTimeout(liftFog, 1000) - - function liftFog (who) { - if (!foggy) return - if (who) { - console.error("%s breaks the spell!", who && who.path) - } else { - console.error("the spell expires!") - } - console.error("\033[mthe fog lifts!\n") - clearTimeout(foggy) - foggy = null - if (entry._paused) entry.resume() - } - - } - }) - } - } - - return function (c) { - var e = Math.random() < 0.5 - console.error(indent + "%s %s for %d damage!", - entry.basename, - e ? "is struck" : "fires a chunk", - c.length) - } -} - -function runaway (entry) { return function () { - var e = Math.random() < 0.5 - console.error(indent + "%s %s", - entry.basename, - e ? "turns to flee" : "is vanquished!") - indent = indent.slice(0, -1) -}} - - -w.on("entry", attacks) -//w.on("ready", function () { attacks(w) }) -function attacks (entry) { - console.error(indent + "%s %s!", entry.basename, - entry.type === "Directory" ? "calls for backup" : "attacks") - entry.on("entry", attacks) -} - -ended = false -var i = 1 -r.on("end", function () { - if (foggy) clearTimeout(foggy) - console.error("\033[mIT'S OVER!!") - console.error("A WINNAR IS YOU!") - - console.log("ok " + (i ++) + " A WINNAR IS YOU") - ended = true - // now go through and verify that everything in there is a dir. - var p = path.resolve(__dirname, "filter-copy") - var checker = fstream.Reader({ path: p }) - checker.checker = true - checker.on("child", function (e) { - var ok = e.type === "Directory" - console.log((ok ? "" : "not ") + "ok " + (i ++) + - " should be a dir: " + - e.path.substr(checker.path.length + 1)) - }) -}) - -process.on("exit", function () { - console.log((ended ? "" : "not ") + "ok " + (i ++) + " ended") -}) - -r.pipe(w) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/pipe.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/pipe.js deleted file mode 100644 index 648ec849..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/pipe.js +++ /dev/null @@ -1,115 +0,0 @@ -var fstream = require("../fstream.js") -var path = require("path") - -var r = fstream.Reader({ path: path.dirname(__dirname) - , filter: function () { - return !this.basename.match(/^\./) && - !this.basename.match(/^node_modules$/) - !this.basename.match(/^deep-copy$/) - } - }) - -var w = fstream.Writer({ path: path.resolve(__dirname, "deep-copy") - , type: "Directory" - }) - -var indent = "" -var escape = {} - -r.on("entry", appears) -r.on("ready", function () { - console.error("ready to begin!", r.path) -}) - -function appears (entry) { - console.error(indent + "a %s appears!", entry.type, entry.basename, typeof entry.basename, entry) - if (foggy) { - console.error("FOGGY!") - var p = entry - do { - console.error(p.depth, p.path, p._paused) - } while (p = p.parent) - - throw new Error("\033[mshould not have entries while foggy") - } - indent += "\t" - entry.on("data", missile(entry)) - entry.on("end", runaway(entry)) - entry.on("entry", appears) -} - -var foggy -function missile (entry) { - if (entry.type === "Directory") { - var ended = false - entry.once("end", function () { ended = true }) - return function (c) { - // throw in some pathological pause()/resume() behavior - // just for extra fun. - process.nextTick(function () { - if (!foggy && !ended) { // && Math.random() < 0.3) { - console.error(indent +"%s casts a spell", entry.basename) - console.error("\na slowing fog comes over the battlefield...\n\033[32m") - entry.pause() - entry.once("resume", liftFog) - foggy = setTimeout(liftFog, 10) - - function liftFog (who) { - if (!foggy) return - if (who) { - console.error("%s breaks the spell!", who && who.path) - } else { - console.error("the spell expires!") - } - console.error("\033[mthe fog lifts!\n") - clearTimeout(foggy) - foggy = null - if (entry._paused) entry.resume() - } - - } - }) - } - } - - return function (c) { - var e = Math.random() < 0.5 - console.error(indent + "%s %s for %d damage!", - entry.basename, - e ? "is struck" : "fires a chunk", - c.length) - } -} - -function runaway (entry) { return function () { - var e = Math.random() < 0.5 - console.error(indent + "%s %s", - entry.basename, - e ? "turns to flee" : "is vanquished!") - indent = indent.slice(0, -1) -}} - - -w.on("entry", attacks) -//w.on("ready", function () { attacks(w) }) -function attacks (entry) { - console.error(indent + "%s %s!", entry.basename, - entry.type === "Directory" ? "calls for backup" : "attacks") - entry.on("entry", attacks) -} - -ended = false -r.on("end", function () { - if (foggy) clearTimeout(foggy) - console.error("\033[mIT'S OVER!!") - console.error("A WINNAR IS YOU!") - - console.log("ok 1 A WINNAR IS YOU") - ended = true -}) - -process.on("exit", function () { - console.log((ended ? "" : "not ") + "ok 2 ended") -}) - -r.pipe(w) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/reader.js deleted file mode 100644 index 9aa1a953..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/reader.js +++ /dev/null @@ -1,54 +0,0 @@ -var fstream = require("../fstream.js") -var tap = require("tap") -var fs = require("fs") -var path = require("path") -var children = -1 -var dir = path.dirname(__dirname) - -var gotReady = false -var ended = false - -tap.test("reader test", function (t) { - - var r = fstream.Reader({ path: dir - , filter: function () { - // return this.parent === r - return this.parent === r || this === r - } - }) - - r.on("ready", function () { - gotReady = true - children = fs.readdirSync(dir).length - console.error("Setting expected children to "+children) - t.equal(r.type, "Directory", "should be a directory") - }) - - r.on("entry", function (entry) { - children -- - if (!gotReady) { - t.fail("children before ready!") - } - t.equal(entry.dirname, r.path, "basename is parent dir") - }) - - r.on("error", function (er) { - t.fail(er) - t.end() - process.exit(1) - }) - - r.on("end", function () { - t.equal(children, 0, "should have seen all children") - ended = true - }) - - var closed = false - r.on("close", function () { - t.ok(ended, "saw end before close") - t.notOk(closed, "close should only happen once") - closed = true - t.end() - }) - -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/symlink-write.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/symlink-write.js deleted file mode 100644 index d7816d24..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/examples/symlink-write.js +++ /dev/null @@ -1,24 +0,0 @@ -var fstream = require("../fstream.js") - , closed = false - -fstream - .Writer({ path: "path/to/symlink" - , linkpath: "./file" - , isSymbolicLink: true - , mode: "0755" // octal strings supported - }) - .on("close", function () { - closed = true - var fs = require("fs") - var s = fs.lstatSync("path/to/symlink") - var isSym = s.isSymbolicLink() - console.log((isSym?"":"not ") +"ok 1 should be symlink") - var t = fs.readlinkSync("path/to/symlink") - var isTarget = t === "./file" - console.log((isTarget?"":"not ") +"ok 2 should link to ./file") - }) - .end() - -process.on("exit", function () { - console.log((closed?"":"not ")+"ok 3 should be closed") -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/fstream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/fstream.js deleted file mode 100644 index c66d26f5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/fstream.js +++ /dev/null @@ -1,31 +0,0 @@ -exports.Abstract = require("./lib/abstract.js") -exports.Reader = require("./lib/reader.js") -exports.Writer = require("./lib/writer.js") - -exports.File = - { Reader: require("./lib/file-reader.js") - , Writer: require("./lib/file-writer.js") } - -exports.Dir = - { Reader : require("./lib/dir-reader.js") - , Writer : require("./lib/dir-writer.js") } - -exports.Link = - { Reader : require("./lib/link-reader.js") - , Writer : require("./lib/link-writer.js") } - -exports.Proxy = - { Reader : require("./lib/proxy-reader.js") - , Writer : require("./lib/proxy-writer.js") } - -exports.Reader.Dir = exports.DirReader = exports.Dir.Reader -exports.Reader.File = exports.FileReader = exports.File.Reader -exports.Reader.Link = exports.LinkReader = exports.Link.Reader -exports.Reader.Proxy = exports.ProxyReader = exports.Proxy.Reader - -exports.Writer.Dir = exports.DirWriter = exports.Dir.Writer -exports.Writer.File = exports.FileWriter = exports.File.Writer -exports.Writer.Link = exports.LinkWriter = exports.Link.Writer -exports.Writer.Proxy = exports.ProxyWriter = exports.Proxy.Writer - -exports.collect = require("./lib/collect.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/abstract.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/abstract.js deleted file mode 100644 index 11ef0e28..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/abstract.js +++ /dev/null @@ -1,85 +0,0 @@ -// the parent class for all fstreams. - -module.exports = Abstract - -var Stream = require("stream").Stream - , inherits = require("inherits") - -function Abstract () { - Stream.call(this) -} - -inherits(Abstract, Stream) - -Abstract.prototype.on = function (ev, fn) { - if (ev === "ready" && this.ready) { - process.nextTick(fn.bind(this)) - } else { - Stream.prototype.on.call(this, ev, fn) - } - return this -} - -Abstract.prototype.abort = function () { - this._aborted = true - this.emit("abort") -} - -Abstract.prototype.destroy = function () {} - -Abstract.prototype.warn = function (msg, code) { - var me = this - , er = decorate(msg, code, me) - if (!me.listeners("warn")) { - console.error("%s %s\n" + - "path = %s\n" + - "syscall = %s\n" + - "fstream_type = %s\n" + - "fstream_path = %s\n" + - "fstream_unc_path = %s\n" + - "fstream_class = %s\n" + - "fstream_stack =\n%s\n", - code || "UNKNOWN", - er.stack, - er.path, - er.syscall, - er.fstream_type, - er.fstream_path, - er.fstream_unc_path, - er.fstream_class, - er.fstream_stack.join("\n")) - } else { - me.emit("warn", er) - } -} - -Abstract.prototype.info = function (msg, code) { - this.emit("info", msg, code) -} - -Abstract.prototype.error = function (msg, code, th) { - var er = decorate(msg, code, this) - if (th) throw er - else this.emit("error", er) -} - -function decorate (er, code, me) { - if (!(er instanceof Error)) er = new Error(er) - er.code = er.code || code - er.path = er.path || me.path - er.fstream_type = er.fstream_type || me.type - er.fstream_path = er.fstream_path || me.path - if (me._path !== me.path) { - er.fstream_unc_path = er.fstream_unc_path || me._path - } - if (me.linkpath) { - er.fstream_linkpath = er.fstream_linkpath || me.linkpath - } - er.fstream_class = er.fstream_class || me.constructor.name - er.fstream_stack = er.fstream_stack || - new Error().stack.split(/\n/).slice(3).map(function (s) { - return s.replace(/^ at /, "") - }) - - return er -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/collect.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/collect.js deleted file mode 100644 index a36f780e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/collect.js +++ /dev/null @@ -1,67 +0,0 @@ -module.exports = collect - -function collect (stream) { - if (stream._collected) return - - stream._collected = true - stream.pause() - - stream.on("data", save) - stream.on("end", save) - var buf = [] - function save (b) { - if (typeof b === "string") b = new Buffer(b) - if (Buffer.isBuffer(b) && !b.length) return - buf.push(b) - } - - stream.on("entry", saveEntry) - var entryBuffer = [] - function saveEntry (e) { - collect(e) - entryBuffer.push(e) - } - - stream.on("proxy", proxyPause) - function proxyPause (p) { - p.pause() - } - - - // replace the pipe method with a new version that will - // unlock the buffered stuff. if you just call .pipe() - // without a destination, then it'll re-play the events. - stream.pipe = (function (orig) { return function (dest) { - // console.error(" === open the pipes", dest && dest.path) - - // let the entries flow through one at a time. - // Once they're all done, then we can resume completely. - var e = 0 - ;(function unblockEntry () { - var entry = entryBuffer[e++] - // console.error(" ==== unblock entry", entry && entry.path) - if (!entry) return resume() - entry.on("end", unblockEntry) - if (dest) dest.add(entry) - else stream.emit("entry", entry) - })() - - function resume () { - stream.removeListener("entry", saveEntry) - stream.removeListener("data", save) - stream.removeListener("end", save) - - stream.pipe = orig - if (dest) stream.pipe(dest) - - buf.forEach(function (b) { - if (b) stream.emit("data", b) - else stream.emit("end") - }) - - stream.resume() - } - - return dest - }})(stream.pipe) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-reader.js deleted file mode 100644 index 346ac2b8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-reader.js +++ /dev/null @@ -1,251 +0,0 @@ -// A thing that emits "entry" events with Reader objects -// Pausing it causes it to stop emitting entry events, and also -// pauses the current entry if there is one. - -module.exports = DirReader - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , Reader = fstream.Reader - , inherits = require("inherits") - , mkdir = require("mkdirp") - , path = require("path") - , Reader = require("./reader.js") - , assert = require("assert").ok - -inherits(DirReader, Reader) - -function DirReader (props) { - var me = this - if (!(me instanceof DirReader)) throw new Error( - "DirReader must be called as constructor.") - - // should already be established as a Directory type - if (props.type !== "Directory" || !props.Directory) { - throw new Error("Non-directory type "+ props.type) - } - - me.entries = null - me._index = -1 - me._paused = false - me._length = -1 - - if (props.sort) { - this.sort = props.sort - } - - Reader.call(this, props) -} - -DirReader.prototype._getEntries = function () { - var me = this - - // race condition. might pause() before calling _getEntries, - // and then resume, and try to get them a second time. - if (me._gotEntries) return - me._gotEntries = true - - fs.readdir(me._path, function (er, entries) { - if (er) return me.error(er) - - me.entries = entries - - me.emit("entries", entries) - if (me._paused) me.once("resume", processEntries) - else processEntries() - - function processEntries () { - me._length = me.entries.length - if (typeof me.sort === "function") { - me.entries = me.entries.sort(me.sort.bind(me)) - } - me._read() - } - }) -} - -// start walking the dir, and emit an "entry" event for each one. -DirReader.prototype._read = function () { - var me = this - - if (!me.entries) return me._getEntries() - - if (me._paused || me._currentEntry || me._aborted) { - // console.error("DR paused=%j, current=%j, aborted=%j", me._paused, !!me._currentEntry, me._aborted) - return - } - - me._index ++ - if (me._index >= me.entries.length) { - if (!me._ended) { - me._ended = true - me.emit("end") - me.emit("close") - } - return - } - - // ok, handle this one, then. - - // save creating a proxy, by stat'ing the thing now. - var p = path.resolve(me._path, me.entries[me._index]) - assert(p !== me._path) - assert(me.entries[me._index]) - - // set this to prevent trying to _read() again in the stat time. - me._currentEntry = p - fs[ me.props.follow ? "stat" : "lstat" ](p, function (er, stat) { - if (er) return me.error(er) - - var who = me._proxy || me - - stat.path = p - stat.basename = path.basename(p) - stat.dirname = path.dirname(p) - var childProps = me.getChildProps.call(who, stat) - childProps.path = p - childProps.basename = path.basename(p) - childProps.dirname = path.dirname(p) - - var entry = Reader(childProps, stat) - - // console.error("DR Entry", p, stat.size) - - me._currentEntry = entry - - // "entry" events are for direct entries in a specific dir. - // "child" events are for any and all children at all levels. - // This nomenclature is not completely final. - - entry.on("pause", function (who) { - if (!me._paused && !entry._disowned) { - me.pause(who) - } - }) - - entry.on("resume", function (who) { - if (me._paused && !entry._disowned) { - me.resume(who) - } - }) - - entry.on("stat", function (props) { - me.emit("_entryStat", entry, props) - if (entry._aborted) return - if (entry._paused) entry.once("resume", function () { - me.emit("entryStat", entry, props) - }) - else me.emit("entryStat", entry, props) - }) - - entry.on("ready", function EMITCHILD () { - // console.error("DR emit child", entry._path) - if (me._paused) { - // console.error(" DR emit child - try again later") - // pause the child, and emit the "entry" event once we drain. - // console.error("DR pausing child entry") - entry.pause(me) - return me.once("resume", EMITCHILD) - } - - // skip over sockets. they can't be piped around properly, - // so there's really no sense even acknowledging them. - // if someone really wants to see them, they can listen to - // the "socket" events. - if (entry.type === "Socket") { - me.emit("socket", entry) - } else { - me.emitEntry(entry) - } - }) - - var ended = false - entry.on("close", onend) - entry.on("disown", onend) - function onend () { - if (ended) return - ended = true - me.emit("childEnd", entry) - me.emit("entryEnd", entry) - me._currentEntry = null - if (!me._paused) { - me._read() - } - } - - // XXX Remove this. Works in node as of 0.6.2 or so. - // Long filenames should not break stuff. - entry.on("error", function (er) { - if (entry._swallowErrors) { - me.warn(er) - entry.emit("end") - entry.emit("close") - } else { - me.emit("error", er) - } - }) - - // proxy up some events. - ; [ "child" - , "childEnd" - , "warn" - ].forEach(function (ev) { - entry.on(ev, me.emit.bind(me, ev)) - }) - }) -} - -DirReader.prototype.disown = function (entry) { - entry.emit("beforeDisown") - entry._disowned = true - entry.parent = entry.root = null - if (entry === this._currentEntry) { - this._currentEntry = null - } - entry.emit("disown") -} - -DirReader.prototype.getChildProps = function (stat) { - return { depth: this.depth + 1 - , root: this.root || this - , parent: this - , follow: this.follow - , filter: this.filter - , sort: this.props.sort - , hardlinks: this.props.hardlinks - } -} - -DirReader.prototype.pause = function (who) { - var me = this - if (me._paused) return - who = who || me - me._paused = true - if (me._currentEntry && me._currentEntry.pause) { - me._currentEntry.pause(who) - } - me.emit("pause", who) -} - -DirReader.prototype.resume = function (who) { - var me = this - if (!me._paused) return - who = who || me - - me._paused = false - // console.error("DR Emit Resume", me._path) - me.emit("resume", who) - if (me._paused) { - // console.error("DR Re-paused", me._path) - return - } - - if (me._currentEntry) { - if (me._currentEntry.resume) me._currentEntry.resume(who) - } else me._read() -} - -DirReader.prototype.emitEntry = function (entry) { - this.emit("entry", entry) - this.emit("child", entry) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-writer.js deleted file mode 100644 index 7073b883..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/dir-writer.js +++ /dev/null @@ -1,171 +0,0 @@ -// It is expected that, when .add() returns false, the consumer -// of the DirWriter will pause until a "drain" event occurs. Note -// that this is *almost always going to be the case*, unless the -// thing being written is some sort of unsupported type, and thus -// skipped over. - -module.exports = DirWriter - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , Writer = require("./writer.js") - , inherits = require("inherits") - , mkdir = require("mkdirp") - , path = require("path") - , collect = require("./collect.js") - -inherits(DirWriter, Writer) - -function DirWriter (props) { - var me = this - if (!(me instanceof DirWriter)) me.error( - "DirWriter must be called as constructor.", null, true) - - // should already be established as a Directory type - if (props.type !== "Directory" || !props.Directory) { - me.error("Non-directory type "+ props.type + " " + - JSON.stringify(props), null, true) - } - - Writer.call(this, props) -} - -DirWriter.prototype._create = function () { - var me = this - mkdir(me._path, Writer.dirmode, function (er) { - if (er) return me.error(er) - // ready to start getting entries! - me.ready = true - me.emit("ready") - me._process() - }) -} - -// a DirWriter has an add(entry) method, but its .write() doesn't -// do anything. Why a no-op rather than a throw? Because this -// leaves open the door for writing directory metadata for -// gnu/solaris style dumpdirs. -DirWriter.prototype.write = function () { - return true -} - -DirWriter.prototype.end = function () { - this._ended = true - this._process() -} - -DirWriter.prototype.add = function (entry) { - var me = this - - // console.error("\tadd", entry._path, "->", me._path) - collect(entry) - if (!me.ready || me._currentEntry) { - me._buffer.push(entry) - return false - } - - // create a new writer, and pipe the incoming entry into it. - if (me._ended) { - return me.error("add after end") - } - - me._buffer.push(entry) - me._process() - - return 0 === this._buffer.length -} - -DirWriter.prototype._process = function () { - var me = this - - // console.error("DW Process p=%j", me._processing, me.basename) - - if (me._processing) return - - var entry = me._buffer.shift() - if (!entry) { - // console.error("DW Drain") - me.emit("drain") - if (me._ended) me._finish() - return - } - - me._processing = true - // console.error("DW Entry", entry._path) - - me.emit("entry", entry) - - // ok, add this entry - // - // don't allow recursive copying - var p = entry - do { - var pp = p._path || p.path - if (pp === me.root._path || pp === me._path || - (pp && pp.indexOf(me._path) === 0)) { - // console.error("DW Exit (recursive)", entry.basename, me._path) - me._processing = false - if (entry._collected) entry.pipe() - return me._process() - } - } while (p = p.parent) - - // console.error("DW not recursive") - - // chop off the entry's root dir, replace with ours - var props = { parent: me - , root: me.root || me - , type: entry.type - , depth: me.depth + 1 } - - var p = entry._path || entry.path || entry.props.path - if (entry.parent) { - p = p.substr(entry.parent._path.length + 1) - } - // get rid of any ../../ shenanigans - props.path = path.join(me.path, path.join("/", p)) - - // if i have a filter, the child should inherit it. - props.filter = me.filter - - // all the rest of the stuff, copy over from the source. - Object.keys(entry.props).forEach(function (k) { - if (!props.hasOwnProperty(k)) { - props[k] = entry.props[k] - } - }) - - // not sure at this point what kind of writer this is. - var child = me._currentChild = new Writer(props) - child.on("ready", function () { - // console.error("DW Child Ready", child.type, child._path) - // console.error(" resuming", entry._path) - entry.pipe(child) - entry.resume() - }) - - // XXX Make this work in node. - // Long filenames should not break stuff. - child.on("error", function (er) { - if (child._swallowErrors) { - me.warn(er) - child.emit("end") - child.emit("close") - } else { - me.emit("error", er) - } - }) - - // we fire _end internally *after* end, so that we don't move on - // until any "end" listeners have had their chance to do stuff. - child.on("close", onend) - var ended = false - function onend () { - if (ended) return - ended = true - // console.error("* DW Child end", child.basename) - me._currentChild = null - me._processing = false - me._process() - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-reader.js deleted file mode 100644 index b1f98618..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-reader.js +++ /dev/null @@ -1,147 +0,0 @@ -// Basically just a wrapper around an fs.ReadStream - -module.exports = FileReader - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , Reader = fstream.Reader - , inherits = require("inherits") - , mkdir = require("mkdirp") - , Reader = require("./reader.js") - , EOF = {EOF: true} - , CLOSE = {CLOSE: true} - -inherits(FileReader, Reader) - -function FileReader (props) { - // console.error(" FR create", props.path, props.size, new Error().stack) - var me = this - if (!(me instanceof FileReader)) throw new Error( - "FileReader must be called as constructor.") - - // should already be established as a File type - // XXX Todo: preserve hardlinks by tracking dev+inode+nlink, - // with a HardLinkReader class. - if (!((props.type === "Link" && props.Link) || - (props.type === "File" && props.File))) { - throw new Error("Non-file type "+ props.type) - } - - me._buffer = [] - me._bytesEmitted = 0 - Reader.call(me, props) -} - -FileReader.prototype._getStream = function () { - var me = this - , stream = me._stream = fs.createReadStream(me._path, me.props) - - if (me.props.blksize) { - stream.bufferSize = me.props.blksize - } - - stream.on("open", me.emit.bind(me, "open")) - - stream.on("data", function (c) { - // console.error("\t\t%d %s", c.length, me.basename) - me._bytesEmitted += c.length - // no point saving empty chunks - if (!c.length) return - else if (me._paused || me._buffer.length) { - me._buffer.push(c) - me._read() - } else me.emit("data", c) - }) - - stream.on("end", function () { - if (me._paused || me._buffer.length) { - // console.error("FR Buffering End", me._path) - me._buffer.push(EOF) - me._read() - } else { - me.emit("end") - } - - if (me._bytesEmitted !== me.props.size) { - me.error("Didn't get expected byte count\n"+ - "expect: "+me.props.size + "\n" + - "actual: "+me._bytesEmitted) - } - }) - - stream.on("close", function () { - if (me._paused || me._buffer.length) { - // console.error("FR Buffering Close", me._path) - me._buffer.push(CLOSE) - me._read() - } else { - // console.error("FR close 1", me._path) - me.emit("close") - } - }) - - me._read() -} - -FileReader.prototype._read = function () { - var me = this - // console.error("FR _read", me._path) - if (me._paused) { - // console.error("FR _read paused", me._path) - return - } - - if (!me._stream) { - // console.error("FR _getStream calling", me._path) - return me._getStream() - } - - // clear out the buffer, if there is one. - if (me._buffer.length) { - // console.error("FR _read has buffer", me._buffer.length, me._path) - var buf = me._buffer - for (var i = 0, l = buf.length; i < l; i ++) { - var c = buf[i] - if (c === EOF) { - // console.error("FR Read emitting buffered end", me._path) - me.emit("end") - } else if (c === CLOSE) { - // console.error("FR Read emitting buffered close", me._path) - me.emit("close") - } else { - // console.error("FR Read emitting buffered data", me._path) - me.emit("data", c) - } - - if (me._paused) { - // console.error("FR Read Re-pausing at "+i, me._path) - me._buffer = buf.slice(i) - return - } - } - me._buffer.length = 0 - } - // console.error("FR _read done") - // that's about all there is to it. -} - -FileReader.prototype.pause = function (who) { - var me = this - // console.error("FR Pause", me._path) - if (me._paused) return - who = who || me - me._paused = true - if (me._stream) me._stream.pause() - me.emit("pause", who) -} - -FileReader.prototype.resume = function (who) { - var me = this - // console.error("FR Resume", me._path) - if (!me._paused) return - who = who || me - me.emit("resume", who) - me._paused = false - if (me._stream) me._stream.resume() - me._read() -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-writer.js deleted file mode 100644 index 68114625..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/file-writer.js +++ /dev/null @@ -1,100 +0,0 @@ -module.exports = FileWriter - -var fs = require("graceful-fs") - , mkdir = require("mkdirp") - , Writer = require("./writer.js") - , inherits = require("inherits") - , EOF = {} - -inherits(FileWriter, Writer) - -function FileWriter (props) { - var me = this - if (!(me instanceof FileWriter)) throw new Error( - "FileWriter must be called as constructor.") - - // should already be established as a File type - if (props.type !== "File" || !props.File) { - throw new Error("Non-file type "+ props.type) - } - - me._buffer = [] - me._bytesWritten = 0 - - Writer.call(this, props) -} - -FileWriter.prototype._create = function () { - var me = this - if (me._stream) return - - var so = {} - if (me.props.flags) so.flags = me.props.flags - so.mode = Writer.filemode - if (me._old && me._old.blksize) so.bufferSize = me._old.blksize - - me._stream = fs.createWriteStream(me._path, so) - - me._stream.on("open", function (fd) { - // console.error("FW open", me._buffer, me._path) - me.ready = true - me._buffer.forEach(function (c) { - if (c === EOF) me._stream.end() - else me._stream.write(c) - }) - me.emit("ready") - // give this a kick just in case it needs it. - me.emit("drain") - }) - - me._stream.on("drain", function () { me.emit("drain") }) - - me._stream.on("close", function () { - // console.error("\n\nFW Stream Close", me._path, me.size) - me._finish() - }) -} - -FileWriter.prototype.write = function (c) { - var me = this - - me._bytesWritten += c.length - - if (!me.ready) { - if (!Buffer.isBuffer(c) && typeof c !== 'string') - throw new Error('invalid write data') - me._buffer.push(c) - return false - } - - var ret = me._stream.write(c) - // console.error("\t-- fw wrote, _stream says", ret, me._stream._queue.length) - - // allow 2 buffered writes, because otherwise there's just too - // much stop and go bs. - return ret || (me._stream._queue && me._stream._queue.length <= 2) -} - -FileWriter.prototype.end = function (c) { - var me = this - - if (c) me.write(c) - - if (!me.ready) { - me._buffer.push(EOF) - return false - } - - return me._stream.end() -} - -FileWriter.prototype._finish = function () { - var me = this - if (typeof me.size === "number" && me._bytesWritten != me.size) { - me.error( - "Did not get expected byte count.\n" + - "expect: " + me.size + "\n" + - "actual: " + me._bytesWritten) - } - Writer.prototype._finish.call(me) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/get-type.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/get-type.js deleted file mode 100644 index cd65c41d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/get-type.js +++ /dev/null @@ -1,32 +0,0 @@ -module.exports = getType - -function getType (st) { - var types = - [ "Directory" - , "File" - , "SymbolicLink" - , "Link" // special for hardlinks from tarballs - , "BlockDevice" - , "CharacterDevice" - , "FIFO" - , "Socket" ] - , type - - if (st.type && -1 !== types.indexOf(st.type)) { - st[st.type] = true - return st.type - } - - for (var i = 0, l = types.length; i < l; i ++) { - type = types[i] - var is = st[type] || st["is" + type] - if (typeof is === "function") is = is.call(st) - if (is) { - st[type] = true - st.type = type - return type - } - } - - return null -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-reader.js deleted file mode 100644 index 7e7ab6ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-reader.js +++ /dev/null @@ -1,54 +0,0 @@ -// Basically just a wrapper around an fs.readlink -// -// XXX: Enhance this to support the Link type, by keeping -// a lookup table of {<dev+inode>:<path>}, so that hardlinks -// can be preserved in tarballs. - -module.exports = LinkReader - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , inherits = require("inherits") - , mkdir = require("mkdirp") - , Reader = require("./reader.js") - -inherits(LinkReader, Reader) - -function LinkReader (props) { - var me = this - if (!(me instanceof LinkReader)) throw new Error( - "LinkReader must be called as constructor.") - - if (!((props.type === "Link" && props.Link) || - (props.type === "SymbolicLink" && props.SymbolicLink))) { - throw new Error("Non-link type "+ props.type) - } - - Reader.call(me, props) -} - -// When piping a LinkReader into a LinkWriter, we have to -// already have the linkpath property set, so that has to -// happen *before* the "ready" event, which means we need to -// override the _stat method. -LinkReader.prototype._stat = function (currentStat) { - var me = this - fs.readlink(me._path, function (er, linkpath) { - if (er) return me.error(er) - me.linkpath = me.props.linkpath = linkpath - me.emit("linkpath", linkpath) - Reader.prototype._stat.call(me, currentStat) - }) -} - -LinkReader.prototype._read = function () { - var me = this - if (me._paused) return - // basically just a no-op, since we got all the info we need - // from the _stat method - if (!me._ended) { - me.emit("end") - me.emit("close") - me._ended = true - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-writer.js deleted file mode 100644 index 5c8f1e70..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/link-writer.js +++ /dev/null @@ -1,95 +0,0 @@ - -module.exports = LinkWriter - -var fs = require("graceful-fs") - , Writer = require("./writer.js") - , inherits = require("inherits") - , path = require("path") - , rimraf = require("rimraf") - -inherits(LinkWriter, Writer) - -function LinkWriter (props) { - var me = this - if (!(me instanceof LinkWriter)) throw new Error( - "LinkWriter must be called as constructor.") - - // should already be established as a Link type - if (!((props.type === "Link" && props.Link) || - (props.type === "SymbolicLink" && props.SymbolicLink))) { - throw new Error("Non-link type "+ props.type) - } - - if (props.linkpath === "") props.linkpath = "." - if (!props.linkpath) { - me.error("Need linkpath property to create " + props.type) - } - - Writer.call(this, props) -} - -LinkWriter.prototype._create = function () { - // console.error(" LW _create") - var me = this - , hard = me.type === "Link" || process.platform === "win32" - , link = hard ? "link" : "symlink" - , lp = hard ? path.resolve(me.dirname, me.linkpath) : me.linkpath - - // can only change the link path by clobbering - // For hard links, let's just assume that's always the case, since - // there's no good way to read them if we don't already know. - if (hard) return clobber(me, lp, link) - - fs.readlink(me._path, function (er, p) { - // only skip creation if it's exactly the same link - if (p && p === lp) return finish(me) - clobber(me, lp, link) - }) -} - -function clobber (me, lp, link) { - rimraf(me._path, function (er) { - if (er) return me.error(er) - create(me, lp, link) - }) -} - -function create (me, lp, link) { - fs[link](lp, me._path, function (er) { - // if this is a hard link, and we're in the process of writing out a - // directory, it's very possible that the thing we're linking to - // doesn't exist yet (especially if it was intended as a symlink), - // so swallow ENOENT errors here and just soldier in. - // Additionally, an EPERM or EACCES can happen on win32 if it's trying - // to make a link to a directory. Again, just skip it. - // A better solution would be to have fs.symlink be supported on - // windows in some nice fashion. - if (er) { - if ((er.code === "ENOENT" || - er.code === "EACCES" || - er.code === "EPERM" ) && process.platform === "win32") { - me.ready = true - me.emit("ready") - me.emit("end") - me.emit("close") - me.end = me._finish = function () {} - } else return me.error(er) - } - finish(me) - }) -} - -function finish (me) { - me.ready = true - me.emit("ready") - if (me._ended && !me._finished) me._finish() -} - -LinkWriter.prototype.end = function () { - // console.error("LW finish in end") - this._ended = true - if (this.ready) { - this._finished = true - this._finish() - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-reader.js deleted file mode 100644 index a0ece34a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-reader.js +++ /dev/null @@ -1,93 +0,0 @@ -// A reader for when we don't yet know what kind of thing -// the thing is. - -module.exports = ProxyReader - -var Reader = require("./reader.js") - , getType = require("./get-type.js") - , inherits = require("inherits") - , fs = require("graceful-fs") - -inherits(ProxyReader, Reader) - -function ProxyReader (props) { - var me = this - if (!(me instanceof ProxyReader)) throw new Error( - "ProxyReader must be called as constructor.") - - me.props = props - me._buffer = [] - me.ready = false - - Reader.call(me, props) -} - -ProxyReader.prototype._stat = function () { - var me = this - , props = me.props - // stat the thing to see what the proxy should be. - , stat = props.follow ? "stat" : "lstat" - - fs[stat](props.path, function (er, current) { - var type - if (er || !current) { - type = "File" - } else { - type = getType(current) - } - - props[type] = true - props.type = me.type = type - - me._old = current - me._addProxy(Reader(props, current)) - }) -} - -ProxyReader.prototype._addProxy = function (proxy) { - var me = this - if (me._proxyTarget) { - return me.error("proxy already set") - } - - me._proxyTarget = proxy - proxy._proxy = me - - ; [ "error" - , "data" - , "end" - , "close" - , "linkpath" - , "entry" - , "entryEnd" - , "child" - , "childEnd" - , "warn" - , "stat" - ].forEach(function (ev) { - // console.error("~~ proxy event", ev, me.path) - proxy.on(ev, me.emit.bind(me, ev)) - }) - - me.emit("proxy", proxy) - - proxy.on("ready", function () { - // console.error("~~ proxy is ready!", me.path) - me.ready = true - me.emit("ready") - }) - - var calls = me._buffer - me._buffer.length = 0 - calls.forEach(function (c) { - proxy[c[0]].apply(proxy, c[1]) - }) -} - -ProxyReader.prototype.pause = function () { - return this._proxyTarget ? this._proxyTarget.pause() : false -} - -ProxyReader.prototype.resume = function () { - return this._proxyTarget ? this._proxyTarget.resume() : false -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-writer.js deleted file mode 100644 index b0476633..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/proxy-writer.js +++ /dev/null @@ -1,109 +0,0 @@ -// A writer for when we don't know what kind of thing -// the thing is. That is, it's not explicitly set, -// so we're going to make it whatever the thing already -// is, or "File" -// -// Until then, collect all events. - -module.exports = ProxyWriter - -var Writer = require("./writer.js") - , getType = require("./get-type.js") - , inherits = require("inherits") - , collect = require("./collect.js") - , fs = require("fs") - -inherits(ProxyWriter, Writer) - -function ProxyWriter (props) { - var me = this - if (!(me instanceof ProxyWriter)) throw new Error( - "ProxyWriter must be called as constructor.") - - me.props = props - me._needDrain = false - - Writer.call(me, props) -} - -ProxyWriter.prototype._stat = function () { - var me = this - , props = me.props - // stat the thing to see what the proxy should be. - , stat = props.follow ? "stat" : "lstat" - - fs[stat](props.path, function (er, current) { - var type - if (er || !current) { - type = "File" - } else { - type = getType(current) - } - - props[type] = true - props.type = me.type = type - - me._old = current - me._addProxy(Writer(props, current)) - }) -} - -ProxyWriter.prototype._addProxy = function (proxy) { - // console.error("~~ set proxy", this.path) - var me = this - if (me._proxy) { - return me.error("proxy already set") - } - - me._proxy = proxy - ; [ "ready" - , "error" - , "close" - , "pipe" - , "drain" - , "warn" - ].forEach(function (ev) { - proxy.on(ev, me.emit.bind(me, ev)) - }) - - me.emit("proxy", proxy) - - var calls = me._buffer - calls.forEach(function (c) { - // console.error("~~ ~~ proxy buffered call", c[0], c[1]) - proxy[c[0]].apply(proxy, c[1]) - }) - me._buffer.length = 0 - if (me._needsDrain) me.emit("drain") -} - -ProxyWriter.prototype.add = function (entry) { - // console.error("~~ proxy add") - collect(entry) - - if (!this._proxy) { - this._buffer.push(["add", [entry]]) - this._needDrain = true - return false - } - return this._proxy.add(entry) -} - -ProxyWriter.prototype.write = function (c) { - // console.error("~~ proxy write") - if (!this._proxy) { - this._buffer.push(["write", [c]]) - this._needDrain = true - return false - } - return this._proxy.write(c) -} - -ProxyWriter.prototype.end = function (c) { - // console.error("~~ proxy end") - if (!this._proxy) { - this._buffer.push(["end", [c]]) - return false - } - return this._proxy.end(c) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/reader.js deleted file mode 100644 index eaf921cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/reader.js +++ /dev/null @@ -1,260 +0,0 @@ - -module.exports = Reader - -var fs = require("graceful-fs") - , Stream = require("stream").Stream - , inherits = require("inherits") - , path = require("path") - , getType = require("./get-type.js") - , hardLinks = Reader.hardLinks = {} - , Abstract = require("./abstract.js") - -// Must do this *before* loading the child classes -inherits(Reader, Abstract) - -var DirReader = require("./dir-reader.js") - , FileReader = require("./file-reader.js") - , LinkReader = require("./link-reader.js") - , SocketReader = require("./socket-reader.js") - , ProxyReader = require("./proxy-reader.js") - -function Reader (props, currentStat) { - var me = this - if (!(me instanceof Reader)) return new Reader(props, currentStat) - - if (typeof props === "string") { - props = { path: props } - } - - if (!props.path) { - me.error("Must provide a path", null, true) - } - - // polymorphism. - // call fstream.Reader(dir) to get a DirReader object, etc. - // Note that, unlike in the Writer case, ProxyReader is going - // to be the *normal* state of affairs, since we rarely know - // the type of a file prior to reading it. - - - var type - , ClassType - - if (props.type && typeof props.type === "function") { - type = props.type - ClassType = type - } else { - type = getType(props) - ClassType = Reader - } - - if (currentStat && !type) { - type = getType(currentStat) - props[type] = true - props.type = type - } - - switch (type) { - case "Directory": - ClassType = DirReader - break - - case "Link": - // XXX hard links are just files. - // However, it would be good to keep track of files' dev+inode - // and nlink values, and create a HardLinkReader that emits - // a linkpath value of the original copy, so that the tar - // writer can preserve them. - // ClassType = HardLinkReader - // break - - case "File": - ClassType = FileReader - break - - case "SymbolicLink": - ClassType = LinkReader - break - - case "Socket": - ClassType = SocketReader - break - - case null: - ClassType = ProxyReader - break - } - - if (!(me instanceof ClassType)) { - return new ClassType(props) - } - - Abstract.call(me) - - me.readable = true - me.writable = false - - me.type = type - me.props = props - me.depth = props.depth = props.depth || 0 - me.parent = props.parent || null - me.root = props.root || (props.parent && props.parent.root) || me - - me._path = me.path = path.resolve(props.path) - if (process.platform === "win32") { - me.path = me._path = me.path.replace(/\?/g, "_") - if (me._path.length >= 260) { - // how DOES one create files on the moon? - // if the path has spaces in it, then UNC will fail. - me._swallowErrors = true - //if (me._path.indexOf(" ") === -1) { - me._path = "\\\\?\\" + me.path.replace(/\//g, "\\") - //} - } - } - me.basename = props.basename = path.basename(me.path) - me.dirname = props.dirname = path.dirname(me.path) - - // these have served their purpose, and are now just noisy clutter - props.parent = props.root = null - - // console.error("\n\n\n%s setting size to", props.path, props.size) - me.size = props.size - me.filter = typeof props.filter === "function" ? props.filter : null - if (props.sort === "alpha") props.sort = alphasort - - // start the ball rolling. - // this will stat the thing, and then call me._read() - // to start reading whatever it is. - // console.error("calling stat", props.path, currentStat) - me._stat(currentStat) -} - -function alphasort (a, b) { - return a === b ? 0 - : a.toLowerCase() > b.toLowerCase() ? 1 - : a.toLowerCase() < b.toLowerCase() ? -1 - : a > b ? 1 - : -1 -} - -Reader.prototype._stat = function (currentStat) { - var me = this - , props = me.props - , stat = props.follow ? "stat" : "lstat" - // console.error("Reader._stat", me._path, currentStat) - if (currentStat) process.nextTick(statCb.bind(null, null, currentStat)) - else fs[stat](me._path, statCb) - - - function statCb (er, props_) { - // console.error("Reader._stat, statCb", me._path, props_, props_.nlink) - if (er) return me.error(er) - - Object.keys(props_).forEach(function (k) { - props[k] = props_[k] - }) - - // if it's not the expected size, then abort here. - if (undefined !== me.size && props.size !== me.size) { - return me.error("incorrect size") - } - me.size = props.size - - var type = getType(props) - var handleHardlinks = props.hardlinks !== false - - // special little thing for handling hardlinks. - if (handleHardlinks && type !== "Directory" && props.nlink && props.nlink > 1) { - var k = props.dev + ":" + props.ino - // console.error("Reader has nlink", me._path, k) - if (hardLinks[k] === me._path || !hardLinks[k]) hardLinks[k] = me._path - else { - // switch into hardlink mode. - type = me.type = me.props.type = "Link" - me.Link = me.props.Link = true - me.linkpath = me.props.linkpath = hardLinks[k] - // console.error("Hardlink detected, switching mode", me._path, me.linkpath) - // Setting __proto__ would arguably be the "correct" - // approach here, but that just seems too wrong. - me._stat = me._read = LinkReader.prototype._read - } - } - - if (me.type && me.type !== type) { - me.error("Unexpected type: " + type) - } - - // if the filter doesn't pass, then just skip over this one. - // still have to emit end so that dir-walking can move on. - if (me.filter) { - var who = me._proxy || me - // special handling for ProxyReaders - if (!me.filter.call(who, who, props)) { - if (!me._disowned) { - me.abort() - me.emit("end") - me.emit("close") - } - return - } - } - - // last chance to abort or disown before the flow starts! - var events = ["_stat", "stat", "ready"] - var e = 0 - ;(function go () { - if (me._aborted) { - me.emit("end") - me.emit("close") - return - } - - if (me._paused) { - me.once("resume", go) - return - } - - var ev = events[e ++] - if (!ev) return me._read() - me.emit(ev, props) - go() - })() - } -} - -Reader.prototype.pipe = function (dest, opts) { - var me = this - if (typeof dest.add === "function") { - // piping to a multi-compatible, and we've got directory entries. - me.on("entry", function (entry) { - var ret = dest.add(entry) - if (false === ret) { - me.pause() - } - }) - } - - // console.error("R Pipe apply Stream Pipe") - return Stream.prototype.pipe.apply(this, arguments) -} - -Reader.prototype.pause = function (who) { - this._paused = true - who = who || this - this.emit("pause", who) - if (this._stream) this._stream.pause(who) -} - -Reader.prototype.resume = function (who) { - this._paused = false - who = who || this - this.emit("resume", who) - if (this._stream) this._stream.resume(who) - this._read() -} - -Reader.prototype._read = function () { - this.error("Cannot read unknown type: "+this.type) -} - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/socket-reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/socket-reader.js deleted file mode 100644 index e89c1731..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/socket-reader.js +++ /dev/null @@ -1,38 +0,0 @@ -// Just get the stats, and then don't do anything. -// You can't really "read" from a socket. You "connect" to it. -// Mostly, this is here so that reading a dir with a socket in it -// doesn't blow up. - -module.exports = SocketReader - -var fs = require("graceful-fs") - , fstream = require("../fstream.js") - , inherits = require("inherits") - , mkdir = require("mkdirp") - , Reader = require("./reader.js") - -inherits(SocketReader, Reader) - -function SocketReader (props) { - var me = this - if (!(me instanceof SocketReader)) throw new Error( - "SocketReader must be called as constructor.") - - if (!(props.type === "Socket" && props.Socket)) { - throw new Error("Non-socket type "+ props.type) - } - - Reader.call(me, props) -} - -SocketReader.prototype._read = function () { - var me = this - if (me._paused) return - // basically just a no-op, since we got all the info we have - // from the _stat method - if (!me._ended) { - me.emit("end") - me.emit("close") - me._ended = true - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/writer.js deleted file mode 100644 index 5599fb22..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/lib/writer.js +++ /dev/null @@ -1,389 +0,0 @@ - -module.exports = Writer - -var fs = require("graceful-fs") - , inherits = require("inherits") - , rimraf = require("rimraf") - , mkdir = require("mkdirp") - , path = require("path") - , umask = process.platform === "win32" ? 0 : process.umask() - , getType = require("./get-type.js") - , Abstract = require("./abstract.js") - -// Must do this *before* loading the child classes -inherits(Writer, Abstract) - -Writer.dirmode = 0777 & (~umask) -Writer.filemode = 0666 & (~umask) - -var DirWriter = require("./dir-writer.js") - , LinkWriter = require("./link-writer.js") - , FileWriter = require("./file-writer.js") - , ProxyWriter = require("./proxy-writer.js") - -// props is the desired state. current is optionally the current stat, -// provided here so that subclasses can avoid statting the target -// more than necessary. -function Writer (props, current) { - var me = this - - if (typeof props === "string") { - props = { path: props } - } - - if (!props.path) me.error("Must provide a path", null, true) - - // polymorphism. - // call fstream.Writer(dir) to get a DirWriter object, etc. - var type = getType(props) - , ClassType = Writer - - switch (type) { - case "Directory": - ClassType = DirWriter - break - case "File": - ClassType = FileWriter - break - case "Link": - case "SymbolicLink": - ClassType = LinkWriter - break - case null: - // Don't know yet what type to create, so we wrap in a proxy. - ClassType = ProxyWriter - break - } - - if (!(me instanceof ClassType)) return new ClassType(props) - - // now get down to business. - - Abstract.call(me) - - // props is what we want to set. - // set some convenience properties as well. - me.type = props.type - me.props = props - me.depth = props.depth || 0 - me.clobber = false === props.clobber ? props.clobber : true - me.parent = props.parent || null - me.root = props.root || (props.parent && props.parent.root) || me - - me._path = me.path = path.resolve(props.path) - if (process.platform === "win32") { - me.path = me._path = me.path.replace(/\?/g, "_") - if (me._path.length >= 260) { - me._swallowErrors = true - me._path = "\\\\?\\" + me.path.replace(/\//g, "\\") - } - } - me.basename = path.basename(props.path) - me.dirname = path.dirname(props.path) - me.linkpath = props.linkpath || null - - props.parent = props.root = null - - // console.error("\n\n\n%s setting size to", props.path, props.size) - me.size = props.size - - if (typeof props.mode === "string") { - props.mode = parseInt(props.mode, 8) - } - - me.readable = false - me.writable = true - - // buffer until ready, or while handling another entry - me._buffer = [] - me.ready = false - - me.filter = typeof props.filter === "function" ? props.filter: null - - // start the ball rolling. - // this checks what's there already, and then calls - // me._create() to call the impl-specific creation stuff. - me._stat(current) -} - -// Calling this means that it's something we can't create. -// Just assert that it's already there, otherwise raise a warning. -Writer.prototype._create = function () { - var me = this - fs[me.props.follow ? "stat" : "lstat"](me._path, function (er, current) { - if (er) { - return me.warn("Cannot create " + me._path + "\n" + - "Unsupported type: "+me.type, "ENOTSUP") - } - me._finish() - }) -} - -Writer.prototype._stat = function (current) { - var me = this - , props = me.props - , stat = props.follow ? "stat" : "lstat" - , who = me._proxy || me - - if (current) statCb(null, current) - else fs[stat](me._path, statCb) - - function statCb (er, current) { - if (me.filter && !me.filter.call(who, who, current)) { - me._aborted = true - me.emit("end") - me.emit("close") - return - } - - // if it's not there, great. We'll just create it. - // if it is there, then we'll need to change whatever differs - if (er || !current) { - return create(me) - } - - me._old = current - var currentType = getType(current) - - // if it's a type change, then we need to clobber or error. - // if it's not a type change, then let the impl take care of it. - if (currentType !== me.type) { - return rimraf(me._path, function (er) { - if (er) return me.error(er) - me._old = null - create(me) - }) - } - - // otherwise, just handle in the app-specific way - // this creates a fs.WriteStream, or mkdir's, or whatever - create(me) - } -} - -function create (me) { - // console.error("W create", me._path, Writer.dirmode) - - // XXX Need to clobber non-dirs that are in the way, - // unless { clobber: false } in the props. - mkdir(path.dirname(me._path), Writer.dirmode, function (er, made) { - // console.error("W created", path.dirname(me._path), er) - if (er) return me.error(er) - - // later on, we have to set the mode and owner for these - me._madeDir = made - return me._create() - }) -} - -function endChmod (me, want, current, path, cb) { - var wantMode = want.mode - , chmod = want.follow || me.type !== "SymbolicLink" - ? "chmod" : "lchmod" - - if (!fs[chmod]) return cb() - if (typeof wantMode !== "number") return cb() - - var curMode = current.mode & 0777 - wantMode = wantMode & 0777 - if (wantMode === curMode) return cb() - - fs[chmod](path, wantMode, cb) -} - - -function endChown (me, want, current, path, cb) { - // Don't even try it unless root. Too easy to EPERM. - if (process.platform === "win32") return cb() - if (!process.getuid || !process.getuid() === 0) return cb() - if (typeof want.uid !== "number" && - typeof want.gid !== "number" ) return cb() - - if (current.uid === want.uid && - current.gid === want.gid) return cb() - - var chown = (me.props.follow || me.type !== "SymbolicLink") - ? "chown" : "lchown" - if (!fs[chown]) return cb() - - if (typeof want.uid !== "number") want.uid = current.uid - if (typeof want.gid !== "number") want.gid = current.gid - - fs[chown](path, want.uid, want.gid, cb) -} - -function endUtimes (me, want, current, path, cb) { - if (!fs.utimes || process.platform === "win32") return cb() - - var utimes = (want.follow || me.type !== "SymbolicLink") - ? "utimes" : "lutimes" - - if (utimes === "lutimes" && !fs[utimes]) { - utimes = "utimes" - } - - if (!fs[utimes]) return cb() - - var curA = current.atime - , curM = current.mtime - , meA = want.atime - , meM = want.mtime - - if (meA === undefined) meA = curA - if (meM === undefined) meM = curM - - if (!isDate(meA)) meA = new Date(meA) - if (!isDate(meM)) meA = new Date(meM) - - if (meA.getTime() === curA.getTime() && - meM.getTime() === curM.getTime()) return cb() - - fs[utimes](path, meA, meM, cb) -} - - -// XXX This function is beastly. Break it up! -Writer.prototype._finish = function () { - var me = this - - // console.error(" W Finish", me._path, me.size) - - // set up all the things. - // At this point, we're already done writing whatever we've gotta write, - // adding files to the dir, etc. - var todo = 0 - var errState = null - var done = false - - if (me._old) { - // the times will almost *certainly* have changed. - // adds the utimes syscall, but remove another stat. - me._old.atime = new Date(0) - me._old.mtime = new Date(0) - // console.error(" W Finish Stale Stat", me._path, me.size) - setProps(me._old) - } else { - var stat = me.props.follow ? "stat" : "lstat" - // console.error(" W Finish Stating", me._path, me.size) - fs[stat](me._path, function (er, current) { - // console.error(" W Finish Stated", me._path, me.size, current) - if (er) { - // if we're in the process of writing out a - // directory, it's very possible that the thing we're linking to - // doesn't exist yet (especially if it was intended as a symlink), - // so swallow ENOENT errors here and just soldier on. - if (er.code === "ENOENT" && - (me.type === "Link" || me.type === "SymbolicLink") && - process.platform === "win32") { - me.ready = true - me.emit("ready") - me.emit("end") - me.emit("close") - me.end = me._finish = function () {} - return - } else return me.error(er) - } - setProps(me._old = current) - }) - } - - return - - function setProps (current) { - todo += 3 - endChmod(me, me.props, current, me._path, next("chmod")) - endChown(me, me.props, current, me._path, next("chown")) - endUtimes(me, me.props, current, me._path, next("utimes")) - } - - function next (what) { - return function (er) { - // console.error(" W Finish", what, todo) - if (errState) return - if (er) { - er.fstream_finish_call = what - return me.error(errState = er) - } - if (--todo > 0) return - if (done) return - done = true - - // we may still need to set the mode/etc. on some parent dirs - // that were created previously. delay end/close until then. - if (!me._madeDir) return end() - else endMadeDir(me, me._path, end) - - function end (er) { - if (er) { - er.fstream_finish_call = "setupMadeDir" - return me.error(er) - } - // all the props have been set, so we're completely done. - me.emit("end") - me.emit("close") - } - } - } -} - -function endMadeDir (me, p, cb) { - var made = me._madeDir - // everything *between* made and path.dirname(me._path) - // needs to be set up. Note that this may just be one dir. - var d = path.dirname(p) - - endMadeDir_(me, d, function (er) { - if (er) return cb(er) - if (d === made) { - return cb() - } - endMadeDir(me, d, cb) - }) -} - -function endMadeDir_ (me, p, cb) { - var dirProps = {} - Object.keys(me.props).forEach(function (k) { - dirProps[k] = me.props[k] - - // only make non-readable dirs if explicitly requested. - if (k === "mode" && me.type !== "Directory") { - dirProps[k] = dirProps[k] | 0111 - } - }) - - var todo = 3 - , errState = null - fs.stat(p, function (er, current) { - if (er) return cb(errState = er) - endChmod(me, dirProps, current, p, next) - endChown(me, dirProps, current, p, next) - endUtimes(me, dirProps, current, p, next) - }) - - function next (er) { - if (errState) return - if (er) return cb(errState = er) - if (-- todo === 0) return cb() - } -} - -Writer.prototype.pipe = function () { - this.error("Can't pipe from writable stream") -} - -Writer.prototype.add = function () { - this.error("Cannot add to non-Directory type") -} - -Writer.prototype.write = function () { - return true -} - -function objectToString (d) { - return Object.prototype.toString.call(d) -} - -function isDate(d) { - return typeof d === 'object' && objectToString(d) === '[object Date]'; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/package.json deleted file mode 100644 index c3b07d0a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/fstream/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "fstream", - "description": "Advanced file system stream things", - "version": "0.1.25", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/fstream.git" - }, - "main": "fstream.js", - "engines": { - "node": ">=0.6" - }, - "dependencies": { - "rimraf": "2", - "mkdirp": "0.3", - "graceful-fs": "~2.0.0", - "inherits": "~2.0.0" - }, - "devDependencies": { - "tap": "" - }, - "scripts": { - "test": "tap examples/*.js" - }, - "license": "BSD", - "readme": "Like FS streams, but with stat on them, and supporting directories and\nsymbolic links, as well as normal files. Also, you can use this to set\nthe stats on a file, even if you don't change its contents, or to create\na symlink, etc.\n\nSo, for example, you can \"write\" a directory, and it'll call `mkdir`. You\ncan specify a uid and gid, and it'll call `chown`. You can specify a\n`mtime` and `atime`, and it'll call `utimes`. You can call it a symlink\nand provide a `linkpath` and it'll call `symlink`.\n\nNote that it won't automatically resolve symbolic links. So, if you\ncall `fstream.Reader('/some/symlink')` then you'll get an object\nthat stats and then ends immediately (since it has no data). To follow\nsymbolic links, do this: `fstream.Reader({path:'/some/symlink', follow:\ntrue })`.\n\nThere are various checks to make sure that the bytes emitted are the\nsame as the intended size, if the size is set.\n\n## Examples\n\n```javascript\nfstream\n .Writer({ path: \"path/to/file\"\n , mode: 0755\n , size: 6\n })\n .write(\"hello\\n\")\n .end()\n```\n\nThis will create the directories if they're missing, and then write\n`hello\\n` into the file, chmod it to 0755, and assert that 6 bytes have\nbeen written when it's done.\n\n```javascript\nfstream\n .Writer({ path: \"path/to/file\"\n , mode: 0755\n , size: 6\n , flags: \"a\"\n })\n .write(\"hello\\n\")\n .end()\n```\n\nYou can pass flags in, if you want to append to a file.\n\n```javascript\nfstream\n .Writer({ path: \"path/to/symlink\"\n , linkpath: \"./file\"\n , SymbolicLink: true\n , mode: \"0755\" // octal strings supported\n })\n .end()\n```\n\nIf isSymbolicLink is a function, it'll be called, and if it returns\ntrue, then it'll treat it as a symlink. If it's not a function, then\nany truish value will make a symlink, or you can set `type:\n'SymbolicLink'`, which does the same thing.\n\nNote that the linkpath is relative to the symbolic link location, not\nthe parent dir or cwd.\n\n```javascript\nfstream\n .Reader(\"path/to/dir\")\n .pipe(fstream.Writer(\"path/to/other/dir\"))\n```\n\nThis will do like `cp -Rp path/to/dir path/to/other/dir`. If the other\ndir exists and isn't a directory, then it'll emit an error. It'll also\nset the uid, gid, mode, etc. to be identical. In this way, it's more\nlike `rsync -a` than simply a copy.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/fstream/issues" - }, - "homepage": "https://github.com/isaacs/fstream", - "_id": "fstream@0.1.25", - "dist": { - "shasum": "cca977eec0cdc5382161b2feeeb567d5f95783b0" - }, - "_from": "fstream@~0.1.8", - "_resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.25.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/LICENSE deleted file mode 100644 index dea3013d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/README.md deleted file mode 100644 index b1c56658..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/README.md +++ /dev/null @@ -1,42 +0,0 @@ -Browser-friendly inheritance fully compatible with standard node.js -[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). - -This package exports standard `inherits` from node.js `util` module in -node environment, but also provides alternative browser-friendly -implementation through [browser -field](https://gist.github.com/shtylman/4339901). Alternative -implementation is a literal copy of standard one located in standalone -module to avoid requiring of `util`. It also has a shim for old -browsers with no `Object.create` support. - -While keeping you sure you are using standard `inherits` -implementation in node.js environment, it allows bundlers such as -[browserify](https://github.com/substack/node-browserify) to not -include full `util` package to your client code if all you need is -just `inherits` function. It worth, because browser shim for `util` -package is large and `inherits` is often the single function you need -from it. - -It's recommended to use this package instead of -`require('util').inherits` for any code that has chances to be used -not only in node.js but in browser too. - -## usage - -```js -var inherits = require('inherits'); -// then use exactly as the standard one -``` - -## note on version ~1.0 - -Version ~1.0 had completely different motivation and is not compatible -neither with 2.0 nor with standard node.js `inherits`. - -If you are using version ~1.0 and planning to switch to ~2.0, be -careful: - -* new version uses `super_` instead of `super` for referencing - superclass -* new version overwrites current prototype while old one preserves any - existing fields on it diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits.js deleted file mode 100644 index 29f5e24f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('util').inherits diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits_browser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits_browser.js deleted file mode 100644 index c1e78a75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/inherits_browser.js +++ /dev/null @@ -1,23 +0,0 @@ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/package.json deleted file mode 100644 index 8b3b563d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "inherits", - "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", - "version": "2.0.1", - "keywords": [ - "inheritance", - "class", - "klass", - "oop", - "object-oriented", - "inherits", - "browser", - "browserify" - ], - "main": "./inherits.js", - "browser": "./inherits_browser.js", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/inherits" - }, - "license": "ISC", - "scripts": { - "test": "node test" - }, - "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n superclass\n* new version overwrites current prototype while old one preserves any\n existing fields on it\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/inherits/issues" - }, - "homepage": "https://github.com/isaacs/inherits", - "_id": "inherits@2.0.1", - "dist": { - "shasum": "b084742f5bd8d0e2e285cb3a8957f7e733389ef2" - }, - "_from": "inherits@2", - "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/test.js deleted file mode 100644 index fc53012d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/node_modules/inherits/test.js +++ /dev/null @@ -1,25 +0,0 @@ -var inherits = require('./inherits.js') -var assert = require('assert') - -function test(c) { - assert(c.constructor === Child) - assert(c.constructor.super_ === Parent) - assert(Object.getPrototypeOf(c) === Child.prototype) - assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype) - assert(c instanceof Child) - assert(c instanceof Parent) -} - -function Child() { - Parent.call(this) - test(this) -} - -function Parent() {} - -inherits(Child, Parent) - -var c = new Child -test(c) - -console.log('ok') diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/package.json deleted file mode 100644 index fd335461..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "tar", - "description": "tar for node", - "version": "0.1.19", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-tar.git" - }, - "main": "tar.js", - "scripts": { - "test": "tap test/*.js" - }, - "dependencies": { - "inherits": "2", - "block-stream": "*", - "fstream": "~0.1.8" - }, - "devDependencies": { - "tap": "0.x", - "rimraf": "1.x" - }, - "license": "BSD", - "readme": "# node-tar\n\nTar for Node.js.\n\n[![NPM](https://nodei.co/npm/tar.png)](https://nodei.co/npm/tar/)\n\n## API\n\nSee `examples/` for usage examples.\n\n### var tar = require('tar')\n\nReturns an object with `.Pack`, `.Extract` and `.Parse` methods.\n\n### tar.Pack([properties])\n\nReturns a through stream. Use\n[fstream](https://npmjs.org/package/fstream) to write files into the\npack stream and you will receive tar archive data from the pack\nstream.\n\nThe optional `properties` object are used to set properties in the tar\n'Global Extended Header'.\n\n### tar.Extract([options])\n\nReturns a through stream. Write tar data to the stream and the files\nin the tarball will be extracted onto the filesystem.\n\n`options` can be:\n\n```js\n{\n path: '/path/to/extract/tar/into',\n strip: 0, // how many path segments to strip from the root when extracting\n}\n```\n\n`options` also get passed to the `fstream.Writer` instance that `tar`\nuses internally.\n\n### tar.Parse()\n\nReturns a writable stream. Write tar data to it and it will emit\n`entry` events for each entry parsed from the tarball. This is used by\n`tar.Extract`.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-tar/issues" - }, - "homepage": "https://github.com/isaacs/node-tar", - "_id": "tar@0.1.19", - "dist": { - "shasum": "bd31a1030d51bfbbbf4b3e174603500389a1250d" - }, - "_from": "tar@~0.1.18", - "_resolved": "https://registry.npmjs.org/tar/-/tar-0.1.19.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/tar.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/tar.js deleted file mode 100644 index a81298b9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/tar.js +++ /dev/null @@ -1,173 +0,0 @@ -// field paths that every tar file must have. -// header is padded to 512 bytes. -var f = 0 - , fields = {} - , path = fields.path = f++ - , mode = fields.mode = f++ - , uid = fields.uid = f++ - , gid = fields.gid = f++ - , size = fields.size = f++ - , mtime = fields.mtime = f++ - , cksum = fields.cksum = f++ - , type = fields.type = f++ - , linkpath = fields.linkpath = f++ - , headerSize = 512 - , blockSize = 512 - , fieldSize = [] - -fieldSize[path] = 100 -fieldSize[mode] = 8 -fieldSize[uid] = 8 -fieldSize[gid] = 8 -fieldSize[size] = 12 -fieldSize[mtime] = 12 -fieldSize[cksum] = 8 -fieldSize[type] = 1 -fieldSize[linkpath] = 100 - -// "ustar\0" may introduce another bunch of headers. -// these are optional, and will be nulled out if not present. - -var ustar = fields.ustar = f++ - , ustarver = fields.ustarver = f++ - , uname = fields.uname = f++ - , gname = fields.gname = f++ - , devmaj = fields.devmaj = f++ - , devmin = fields.devmin = f++ - , prefix = fields.prefix = f++ - , fill = fields.fill = f++ - -// terminate fields. -fields[f] = null - -fieldSize[ustar] = 6 -fieldSize[ustarver] = 2 -fieldSize[uname] = 32 -fieldSize[gname] = 32 -fieldSize[devmaj] = 8 -fieldSize[devmin] = 8 -fieldSize[prefix] = 155 -fieldSize[fill] = 12 - -// nb: prefix field may in fact be 130 bytes of prefix, -// a null char, 12 bytes for atime, 12 bytes for ctime. -// -// To recognize this format: -// 1. prefix[130] === ' ' or '\0' -// 2. atime and ctime are octal numeric values -// 3. atime and ctime have ' ' in their last byte - -var fieldEnds = {} - , fieldOffs = {} - , fe = 0 -for (var i = 0; i < f; i ++) { - fieldOffs[i] = fe - fieldEnds[i] = (fe += fieldSize[i]) -} - -// build a translation table of field paths. -Object.keys(fields).forEach(function (f) { - if (fields[f] !== null) fields[fields[f]] = f -}) - -// different values of the 'type' field -// paths match the values of Stats.isX() functions, where appropriate -var types = - { 0: "File" - , "\0": "OldFile" // like 0 - , "": "OldFile" - , 1: "Link" - , 2: "SymbolicLink" - , 3: "CharacterDevice" - , 4: "BlockDevice" - , 5: "Directory" - , 6: "FIFO" - , 7: "ContiguousFile" // like 0 - // posix headers - , g: "GlobalExtendedHeader" // k=v for the rest of the archive - , x: "ExtendedHeader" // k=v for the next file - // vendor-specific stuff - , A: "SolarisACL" // skip - , D: "GNUDumpDir" // like 5, but with data, which should be skipped - , I: "Inode" // metadata only, skip - , K: "NextFileHasLongLinkpath" // data = link path of next file - , L: "NextFileHasLongPath" // data = path of next file - , M: "ContinuationFile" // skip - , N: "OldGnuLongPath" // like L - , S: "SparseFile" // skip - , V: "TapeVolumeHeader" // skip - , X: "OldExtendedHeader" // like x - } - -Object.keys(types).forEach(function (t) { - types[types[t]] = types[types[t]] || t -}) - -// values for the mode field -var modes = - { suid: 04000 // set uid on extraction - , sgid: 02000 // set gid on extraction - , svtx: 01000 // set restricted deletion flag on dirs on extraction - , uread: 0400 - , uwrite: 0200 - , uexec: 0100 - , gread: 040 - , gwrite: 020 - , gexec: 010 - , oread: 4 - , owrite: 2 - , oexec: 1 - , all: 07777 - } - -var numeric = - { mode: true - , uid: true - , gid: true - , size: true - , mtime: true - , devmaj: true - , devmin: true - , cksum: true - , atime: true - , ctime: true - , dev: true - , ino: true - , nlink: true - } - -Object.keys(modes).forEach(function (t) { - modes[modes[t]] = modes[modes[t]] || t -}) - -var knownExtended = - { atime: true - , charset: true - , comment: true - , ctime: true - , gid: true - , gname: true - , linkpath: true - , mtime: true - , path: true - , realtime: true - , security: true - , size: true - , uid: true - , uname: true } - - -exports.fields = fields -exports.fieldSize = fieldSize -exports.fieldOffs = fieldOffs -exports.fieldEnds = fieldEnds -exports.types = types -exports.modes = modes -exports.numeric = numeric -exports.headerSize = headerSize -exports.blockSize = blockSize -exports.knownExtended = knownExtended - -exports.Pack = require("./lib/pack.js") -exports.Parse = require("./lib/parse.js") -exports.Extract = require("./lib/extract.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/00-setup-fixtures.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/00-setup-fixtures.js deleted file mode 100644 index 1524ff7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/00-setup-fixtures.js +++ /dev/null @@ -1,53 +0,0 @@ -// the fixtures have some weird stuff that is painful -// to include directly in the repo for various reasons. -// -// So, unpack the fixtures with the system tar first. -// -// This means, of course, that it'll only work if you -// already have a tar implementation, and some of them -// will not properly unpack the fixtures anyway. -// -// But, since usually those tests will fail on Windows -// and other systems with less capable filesystems anyway, -// at least this way we don't cause inconveniences by -// merely cloning the repo or installing the package. - -var tap = require("tap") -, child_process = require("child_process") -, rimraf = require("rimraf") -, test = tap.test -, path = require("path") - -test("clean fixtures", function (t) { - rimraf(path.resolve(__dirname, "fixtures"), function (er) { - t.ifError(er, "rimraf ./fixtures/") - t.end() - }) -}) - -test("clean tmp", function (t) { - rimraf(path.resolve(__dirname, "tmp"), function (er) { - t.ifError(er, "rimraf ./tmp/") - t.end() - }) -}) - -test("extract fixtures", function (t) { - var c = child_process.spawn("tar" - ,["xzvf", "fixtures.tgz"] - ,{ cwd: __dirname }) - - c.stdout.on("data", errwrite) - c.stderr.on("data", errwrite) - function errwrite (chunk) { - process.stderr.write(chunk) - } - - c.on("exit", function (code) { - t.equal(code, 0, "extract fixtures should exit with 0") - if (code) { - t.comment("Note, all tests from here on out will fail because of this.") - } - t.end() - }) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/extract.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/extract.js deleted file mode 100644 index fff48181..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/extract.js +++ /dev/null @@ -1,358 +0,0 @@ -var tap = require("tap") - , tar = require("../tar.js") - , fs = require("fs") - , path = require("path") - , file = path.resolve(__dirname, "fixtures/c.tar") - , target = path.resolve(__dirname, "tmp/extract-test") - , index = 0 - , fstream = require("fstream") - - , ee = 0 - , expectEntries = -[ { path: 'c.txt', - mode: '644', - type: '0', - depth: undefined, - size: 513, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'cc.txt', - mode: '644', - type: '0', - depth: undefined, - size: 513, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 100, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'Ω.txt', - mode: '644', - type: '0', - depth: undefined, - size: 2, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'Ω.txt', - mode: '644', - type: '0', - depth: undefined, - size: 2, - linkpath: '', - nlink: 1, - dev: 234881026, - ino: 51693379 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 200, - linkpath: '', - nlink: 1, - dev: 234881026, - ino: 51681874 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 201, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: '777', - type: '2', - depth: undefined, - size: 0, - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: '200-hard', - mode: '644', - type: '0', - depth: undefined, - size: 200, - linkpath: '', - nlink: 2, - dev: 234881026, - ino: 51681874 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '1', - depth: undefined, - size: 0, - linkpath: path.resolve(target, '200-hard'), - nlink: 2, - dev: 234881026, - ino: 51681874 } ] - - , ef = 0 - , expectFiles = -[ { path: '', - mode: '40755', - type: 'Directory', - depth: 0, - linkpath: undefined }, - { path: '/200-hard', - mode: '100644', - type: 'File', - depth: 1, - size: 200, - linkpath: undefined, - nlink: 2 }, - { path: '/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '100644', - type: 'Link', - depth: 1, - size: 200, - linkpath: path.join(target, '200-hard'), - nlink: 2 }, - { path: '/200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: '120777', - type: 'SymbolicLink', - depth: 1, - size: 200, - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - nlink: 1 }, - { path: '/c.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 513, - linkpath: undefined, - nlink: 1 }, - { path: '/cc.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 513, - linkpath: undefined, - nlink: 1 }, - { path: '/r', - mode: '40755', - type: 'Directory', - depth: 1, - linkpath: undefined }, - { path: '/r/e', - mode: '40755', - type: 'Directory', - depth: 2, - linkpath: undefined }, - { path: '/r/e/a', - mode: '40755', - type: 'Directory', - depth: 3, - linkpath: undefined }, - { path: '/r/e/a/l', - mode: '40755', - type: 'Directory', - depth: 4, - linkpath: undefined }, - { path: '/r/e/a/l/l', - mode: '40755', - type: 'Directory', - depth: 5, - linkpath: undefined }, - { path: '/r/e/a/l/l/y', - mode: '40755', - type: 'Directory', - depth: 6, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-', - mode: '40755', - type: 'Directory', - depth: 7, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d', - mode: '40755', - type: 'Directory', - depth: 8, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e', - mode: '40755', - type: 'Directory', - depth: 9, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e', - mode: '40755', - type: 'Directory', - depth: 10, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p', - mode: '40755', - type: 'Directory', - depth: 11, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-', - mode: '40755', - type: 'Directory', - depth: 12, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f', - mode: '40755', - type: 'Directory', - depth: 13, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o', - mode: '40755', - type: 'Directory', - depth: 14, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l', - mode: '40755', - type: 'Directory', - depth: 15, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d', - mode: '40755', - type: 'Directory', - depth: 16, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e', - mode: '40755', - type: 'Directory', - depth: 17, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r', - mode: '40755', - type: 'Directory', - depth: 18, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-', - mode: '40755', - type: 'Directory', - depth: 19, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p', - mode: '40755', - type: 'Directory', - depth: 20, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a', - mode: '40755', - type: 'Directory', - depth: 21, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t', - mode: '40755', - type: 'Directory', - depth: 22, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h', - mode: '40755', - type: 'Directory', - depth: 23, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '100644', - type: 'File', - depth: 24, - size: 100, - linkpath: undefined, - nlink: 1 }, - { path: '/Ω.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 2, - linkpath: undefined, - nlink: 1 } ] - - - -// The extract class basically just pipes the input -// to a Reader, and then to a fstream.DirWriter - -// So, this is as much a test of fstream.Reader and fstream.Writer -// as it is of tar.Extract, but it sort of makes sense. - -tap.test("extract test", function (t) { - var extract = tar.Extract(target) - var inp = fs.createReadStream(file) - - // give it a weird buffer size to try to break in odd places - inp.bufferSize = 1234 - - inp.pipe(extract) - - extract.on("end", function () { - t.equal(ee, expectEntries.length, "should see "+ee+" entries") - - // should get no more entries after end - extract.removeAllListeners("entry") - extract.on("entry", function (e) { - t.fail("Should not get entries after end!") - }) - - next() - }) - - extract.on("entry", function (entry) { - var found = - { path: entry.path - , mode: entry.props.mode.toString(8) - , type: entry.props.type - , depth: entry.props.depth - , size: entry.props.size - , linkpath: entry.props.linkpath - , nlink: entry.props.nlink - , dev: entry.props.dev - , ino: entry.props.ino - } - - var wanted = expectEntries[ee ++] - - t.equivalent(found, wanted, "tar entry " + ee + " " + wanted.path) - }) - - function next () { - var r = fstream.Reader({ path: target - , type: "Directory" - // this is just to encourage consistency - , sort: "alpha" }) - - r.on("ready", function () { - foundEntry(r) - }) - - r.on("end", finish) - - function foundEntry (entry) { - var p = entry.path.substr(target.length) - var found = - { path: p - , mode: entry.props.mode.toString(8) - , type: entry.props.type - , depth: entry.props.depth - , size: entry.props.size - , linkpath: entry.props.linkpath - , nlink: entry.props.nlink - } - - var wanted = expectFiles[ef ++] - - t.has(found, wanted, "unpacked file " + ef + " " + wanted.path) - - entry.on("entry", foundEntry) - } - - function finish () { - t.equal(ef, expectFiles.length, "should have "+ef+" items") - t.end() - } - } -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/fixtures.tgz b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/fixtures.tgz deleted file mode 100644 index 4501bcf22695435b84edb3d4076cd9a70687b035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19205 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 L7Wcr_0GI;+;ZGx1 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/header.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/header.js deleted file mode 100644 index 8ea6f795..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/header.js +++ /dev/null @@ -1,183 +0,0 @@ -var tap = require("tap") -var TarHeader = require("../lib/header.js") -var tar = require("../tar.js") -var fs = require("fs") - - -var headers = - { "a.txt file header": - [ "612e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303430312031313635313336303333332030313234353100203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'a.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 257 - , mtime: 1319493851 - , cksum: 5417 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "omega pax": // the extended header from omega tar. - [ "5061784865616465722fcea92e74787400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303137302031313534333731303631312030313530353100207800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'PaxHeader/Ω.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 120 - , mtime: 1301254537 - , cksum: 6697 - , type: 'x' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } ] - - , "omega file header": - [ "cea92e7478740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303030322031313534333731303631312030313330373200203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'Ω.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 2 - , mtime: 1301254537 - , cksum: 5690 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } ] - - , "foo.js file header": - [ "666f6f2e6a730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303030342031313534333637303734312030313236313700203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'foo.js' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 4 - , mtime: 1301246433 - , cksum: 5519 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "b.txt file header": - [ "622e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030313030302031313635313336303637372030313234363100203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'b.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 512 - , mtime: 1319494079 - , cksum: 5425 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "deep nested file": - [ "636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363633030303634342000303537373631200030303030323420003030303030303030313434203131363532313531353333203034333331340020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075737461720030306973616163730000000000000000000000000000000000000000000000000000737461666600000000000000000000000000000000000000000000000000000030303030303020003030303030302000722f652f612f6c2f6c2f792f2d2f642f652f652f702f2d2f662f6f2f6c2f642f652f722f2d2f702f612f742f680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true, - path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 100 - , mtime: 1319687003 - , cksum: 18124 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - } - -tap.test("parsing", function (t) { - Object.keys(headers).forEach(function (name) { - var h = headers[name] - , header = new Buffer(h[0], "hex") - , expect = h[1] - , parsed = new TarHeader(header) - - // console.error(parsed) - t.has(parsed, expect, "parse " + name) - }) - t.end() -}) - -tap.test("encoding", function (t) { - Object.keys(headers).forEach(function (name) { - var h = headers[name] - , expect = new Buffer(h[0], "hex") - , encoded = TarHeader.encode(h[1]) - - // might have slightly different bytes, since the standard - // isn't very strict, but should have the same semantics - // checkSum will be different, but cksumValid will be true - - var th = new TarHeader(encoded) - delete h[1].block - delete h[1].needExtended - delete h[1].cksum - t.has(th, h[1], "fields "+name) - }) - t.end() -}) - -// test these manually. they're a bit rare to find in the wild -tap.test("parseNumeric tests", function (t) { - var parseNumeric = TarHeader.parseNumeric - , numbers = - { "303737373737373700": 2097151 - , "30373737373737373737373700": 8589934591 - , "303030303036343400": 420 - , "800000ffffffffffff": 281474976710655 - , "ffffff000000000001": -281474976710654 - , "ffffff000000000000": -281474976710655 - , "800000000000200000": 2097152 - , "8000000000001544c5": 1393861 - , "ffffffffffff1544c5": -15383354 } - Object.keys(numbers).forEach(function (n) { - var b = new Buffer(n, "hex") - t.equal(parseNumeric(b), numbers[n], n + " === " + numbers[n]) - }) - t.end() -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack-no-proprietary.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack-no-proprietary.js deleted file mode 100644 index 5bf0e540..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack-no-proprietary.js +++ /dev/null @@ -1,854 +0,0 @@ -// This is exactly like test/pack.js, except that it's excluding -// any proprietary headers. -// -// This loses some information about the filesystem, but creates -// tarballs that are supported by more versions of tar, especially -// old non-spec-compliant copies of gnutar. - -// the symlink file is excluded from git, because it makes -// windows freak the hell out. -var fs = require("fs") - , path = require("path") - , symlink = path.resolve(__dirname, "fixtures/symlink") -try { fs.unlinkSync(symlink) } catch (e) {} -fs.symlinkSync("./hardlink-1", symlink) -process.on("exit", function () { - fs.unlinkSync(symlink) -}) - -var tap = require("tap") - , tar = require("../tar.js") - , pkg = require("../package.json") - , Pack = tar.Pack - , fstream = require("fstream") - , Reader = fstream.Reader - , Writer = fstream.Writer - , input = path.resolve(__dirname, "fixtures/") - , target = path.resolve(__dirname, "tmp/pack.tar") - , uid = process.getuid ? process.getuid() : 0 - , gid = process.getgid ? process.getgid() : 0 - - , entries = - - // the global header and root fixtures/ dir are going to get - // a different date each time, so omit that bit. - // Also, dev/ino values differ across machines, so that's not - // included. - [ [ 'entry', - { path: 'fixtures/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/200cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - uid: uid, - gid: gid, - size: 200 } ] - - , [ 'entry', - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/a.txt', - mode: 420, - uid: uid, - gid: gid, - size: 257, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/b.txt', - mode: 420, - uid: uid, - gid: gid, - size: 512, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/c.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/cc.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/foo.js', - mode: 420, - uid: uid, - gid: gid, - size: 4, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-1', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-2', - mode: 420, - uid: uid, - gid: gid, - size: 0, - type: '1', - linkpath: 'fixtures/hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/star.4.html', - mode: 420, - uid: uid, - gid: gid, - size: 54081, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/packtest/Ω.txt', - uid: uid, - gid: gid, - size: 2 } ] - - , [ 'entry', - { path: 'fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 100, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/symlink', - uid: uid, - gid: gid, - size: 0, - type: '2', - linkpath: 'hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: "fixtures/Ω.txt" - , uid: uid - , gid: gid - , size: 2 } ] - - , [ 'entry', - { path: 'fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - ] - - -// first, make sure that the hardlinks are actually hardlinks, or this -// won't work. Git has a way of replacing them with a copy. -var hard1 = path.resolve(__dirname, "fixtures/hardlink-1") - , hard2 = path.resolve(__dirname, "fixtures/hardlink-2") - , fs = require("fs") - -try { fs.unlinkSync(hard2) } catch (e) {} -fs.linkSync(hard1, hard2) - -tap.test("with global header", { timeout: 10000 }, function (t) { - runTest(t, true) -}) - -tap.test("without global header", { timeout: 10000 }, function (t) { - runTest(t, false) -}) - -function alphasort (a, b) { - return a === b ? 0 - : a.toLowerCase() > b.toLowerCase() ? 1 - : a.toLowerCase() < b.toLowerCase() ? -1 - : a > b ? 1 - : -1 -} - - -function runTest (t, doGH) { - var reader = Reader({ path: input - , filter: function () { - return !this.path.match(/\.(tar|hex)$/) - } - , sort: alphasort - }) - - var props = doGH ? pkg : {} - props.noProprietary = true - var pack = Pack(props) - var writer = Writer(target) - - // global header should be skipped regardless, since it has no content. - var entry = 0 - - t.ok(reader, "reader ok") - t.ok(pack, "pack ok") - t.ok(writer, "writer ok") - - pack.pipe(writer) - - var parse = tar.Parse() - t.ok(parse, "parser should be ok") - - pack.on("data", function (c) { - // console.error("PACK DATA") - if (c.length !== 512) { - // this one is too noisy, only assert if it'll be relevant - t.equal(c.length, 512, "parser should emit data in 512byte blocks") - } - parse.write(c) - }) - - pack.on("end", function () { - // console.error("PACK END") - t.pass("parser ends") - parse.end() - }) - - pack.on("error", function (er) { - t.fail("pack error", er) - }) - - parse.on("error", function (er) { - t.fail("parse error", er) - }) - - writer.on("error", function (er) { - t.fail("writer error", er) - }) - - reader.on("error", function (er) { - t.fail("reader error", er) - }) - - parse.on("*", function (ev, e) { - var wanted = entries[entry++] - if (!wanted) { - t.fail("unexpected event: "+ev) - return - } - t.equal(ev, wanted[0], "event type should be "+wanted[0]) - - if (ev !== wanted[0] || e.path !== wanted[1].path) { - console.error(wanted) - console.error([ev, e.props]) - e.on("end", function () { - console.error(e.fields) - throw "break" - }) - } - - t.has(e.props, wanted[1], "properties "+wanted[1].path) - if (wanted[2]) { - e.on("end", function () { - if (!e.fields) { - t.ok(e.fields, "should get fields") - } else { - t.has(e.fields, wanted[2], "should get expected fields") - } - }) - } - }) - - reader.pipe(pack) - - writer.on("close", function () { - t.equal(entry, entries.length, "should get all expected entries") - t.pass("it finished") - t.end() - }) - -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack.js deleted file mode 100644 index 0f509945..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/pack.js +++ /dev/null @@ -1,897 +0,0 @@ - -// the symlink file is excluded from git, because it makes -// windows freak the hell out. -var fs = require("fs") - , path = require("path") - , symlink = path.resolve(__dirname, "fixtures/symlink") -try { fs.unlinkSync(symlink) } catch (e) {} -fs.symlinkSync("./hardlink-1", symlink) -process.on("exit", function () { - fs.unlinkSync(symlink) -}) - - -var tap = require("tap") - , tar = require("../tar.js") - , pkg = require("../package.json") - , Pack = tar.Pack - , fstream = require("fstream") - , Reader = fstream.Reader - , Writer = fstream.Writer - , input = path.resolve(__dirname, "fixtures/") - , target = path.resolve(__dirname, "tmp/pack.tar") - , uid = process.getuid ? process.getuid() : 0 - , gid = process.getgid ? process.getgid() : 0 - - , entries = - - // the global header and root fixtures/ dir are going to get - // a different date each time, so omit that bit. - // Also, dev/ino values differ across machines, so that's not - // included. - [ [ 'globalExtendedHeader', - { path: 'PaxHeader/', - mode: 438, - uid: 0, - gid: 0, - type: 'g', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { "NODETAR.author": pkg.author, - "NODETAR.name": pkg.name, - "NODETAR.description": pkg.description, - "NODETAR.version": pkg.version, - "NODETAR.repository.type": pkg.repository.type, - "NODETAR.repository.url": pkg.repository.url, - "NODETAR.main": pkg.main, - "NODETAR.scripts.test": pkg.scripts.test } ] - - , [ 'entry', - { path: 'fixtures/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/200cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - uid: uid, - gid: gid, - size: 200, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/a.txt', - mode: 420, - uid: uid, - gid: gid, - size: 257, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/b.txt', - mode: 420, - uid: uid, - gid: gid, - size: 512, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/c.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/cc.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/foo.js', - mode: 420, - uid: uid, - gid: gid, - size: 4, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-1', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-2', - mode: 420, - uid: uid, - gid: gid, - size: 0, - type: '1', - linkpath: 'fixtures/hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/star.4.html', - mode: 420, - uid: uid, - gid: gid, - size: 54081, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/packtest/Ω.txt', - 'NODETAR.depth': '2', - 'NODETAR.type': 'File', - nlink: 1, - uid: uid, - gid: gid, - size: 2, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '2', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 100, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/symlink', - uid: uid, - gid: gid, - size: 0, - type: '2', - linkpath: 'hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: "fixtures/Ω.txt" - , "NODETAR.depth": "1" - , "NODETAR.type": "File" - , nlink: 1 - , uid: uid - , gid: gid - , size: 2 - , "NODETAR.blksize": "4096" - , "NODETAR.blocks": "8" } ] - - , [ 'entry', - { path: 'fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - ] - - -// first, make sure that the hardlinks are actually hardlinks, or this -// won't work. Git has a way of replacing them with a copy. -var hard1 = path.resolve(__dirname, "fixtures/hardlink-1") - , hard2 = path.resolve(__dirname, "fixtures/hardlink-2") - , fs = require("fs") - -try { fs.unlinkSync(hard2) } catch (e) {} -fs.linkSync(hard1, hard2) - -tap.test("with global header", { timeout: 10000 }, function (t) { - runTest(t, true) -}) - -tap.test("without global header", { timeout: 10000 }, function (t) { - runTest(t, false) -}) - -function alphasort (a, b) { - return a === b ? 0 - : a.toLowerCase() > b.toLowerCase() ? 1 - : a.toLowerCase() < b.toLowerCase() ? -1 - : a > b ? 1 - : -1 -} - - -function runTest (t, doGH) { - var reader = Reader({ path: input - , filter: function () { - return !this.path.match(/\.(tar|hex)$/) - } - , sort: alphasort - }) - - var pack = Pack(doGH ? pkg : null) - var writer = Writer(target) - - // skip the global header if we're not doing that. - var entry = doGH ? 0 : 1 - - t.ok(reader, "reader ok") - t.ok(pack, "pack ok") - t.ok(writer, "writer ok") - - pack.pipe(writer) - - var parse = tar.Parse() - t.ok(parse, "parser should be ok") - - pack.on("data", function (c) { - // console.error("PACK DATA") - if (c.length !== 512) { - // this one is too noisy, only assert if it'll be relevant - t.equal(c.length, 512, "parser should emit data in 512byte blocks") - } - parse.write(c) - }) - - pack.on("end", function () { - // console.error("PACK END") - t.pass("parser ends") - parse.end() - }) - - pack.on("error", function (er) { - t.fail("pack error", er) - }) - - parse.on("error", function (er) { - t.fail("parse error", er) - }) - - writer.on("error", function (er) { - t.fail("writer error", er) - }) - - reader.on("error", function (er) { - t.fail("reader error", er) - }) - - parse.on("*", function (ev, e) { - var wanted = entries[entry++] - if (!wanted) { - t.fail("unexpected event: "+ev) - return - } - t.equal(ev, wanted[0], "event type should be "+wanted[0]) - - // if (ev !== wanted[0] || e.path !== wanted[1].path) { - // console.error(wanted) - // console.error([ev, e.props]) - // throw "break" - // } - - t.has(e.props, wanted[1], "properties "+wanted[1].path) - if (wanted[2]) { - e.on("end", function () { - if (!e.fields) { - t.ok(e.fields, "should get fields") - } else { - t.has(e.fields, wanted[2], "should get expected fields") - } - }) - } - }) - - reader.pipe(pack) - - writer.on("close", function () { - t.equal(entry, entries.length, "should get all expected entries") - t.pass("it finished") - t.end() - }) - -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/parse.js deleted file mode 100644 index f765a501..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/parse.js +++ /dev/null @@ -1,359 +0,0 @@ -var tap = require("tap") - , tar = require("../tar.js") - , fs = require("fs") - , path = require("path") - , file = path.resolve(__dirname, "fixtures/c.tar") - , index = 0 - - , expect = -[ [ 'entry', - { path: 'c.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 513, - mtime: new Date('Wed, 26 Oct 2011 01:10:58 GMT'), - cksum: 5422, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'cc.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 513, - mtime: new Date('Wed, 26 Oct 2011 01:11:02 GMT'), - cksum: 5525, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 100, - mtime: new Date('Thu, 27 Oct 2011 03:43:23 GMT'), - cksum: 18124, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 2, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 5695, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 120, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 6702, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'Ω.txt', - ctime: 1319737909, - atime: 1319739061, - dev: 234881026, - ino: 51693379, - nlink: 1 } ], - [ 'entry', - { path: 'Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 2, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 5695, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - atime: new Date('Thu, 27 Oct 2011 18:11:01 GMT'), - dev: 234881026, - ino: 51693379, - nlink: 1 }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 353, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14488, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ctime: 1319686868, - atime: 1319741254, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 1 } ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 200, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14570, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - atime: new Date('Thu, 27 Oct 2011 18:47:34 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 1 }, - undefined ], - [ 'longPath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4976, - type: 'L', - linkpath: '', - ustar: false }, - '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 1000, - gid: 1000, - size: 201, - mtime: new Date('Thu, 27 Oct 2011 22:21:50 GMT'), - cksum: 14086, - type: '0', - linkpath: '', - ustar: false }, - undefined ], - [ 'longLinkpath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4975, - type: 'K', - linkpath: '', - ustar: false }, - '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ], - [ 'longPath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4976, - type: 'L', - linkpath: '', - ustar: false }, - '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL' ], - [ 'entry', - { path: '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: 511, - uid: 1000, - gid: 1000, - size: 0, - mtime: new Date('Fri, 28 Oct 2011 23:05:17 GMT'), - cksum: 21603, - type: '2', - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ustar: false }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200-hard', - mode: 420, - uid: 24561, - gid: 20, - size: 143, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 6533, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { ctime: 1320617144, - atime: 1320617232, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 } ], - [ 'entry', - { path: '200-hard', - mode: 420, - uid: 24561, - gid: 20, - size: 200, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 5526, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Sun, 06 Nov 2011 22:05:44 GMT'), - atime: new Date('Sun, 06 Nov 2011 22:07:12 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 353, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14488, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ctime: 1320617144, - atime: 1320617406, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 } ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 15173, - type: '1', - linkpath: '200-hard', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Sun, 06 Nov 2011 22:05:44 GMT'), - atime: new Date('Sun, 06 Nov 2011 22:10:06 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 }, - undefined ] ] - - -tap.test("parser test", function (t) { - var parser = tar.Parse() - - parser.on("end", function () { - t.equal(index, expect.length, "saw all expected events") - t.end() - }) - - fs.createReadStream(file) - .pipe(parser) - .on("*", function (ev, entry) { - var wanted = expect[index] - if (!wanted) { - return t.fail("Unexpected event: " + ev) - } - var result = [ev, entry.props] - entry.on("end", function () { - result.push(entry.fields || entry.body) - - t.equal(ev, wanted[0], index + " event type") - t.equivalent(entry.props, wanted[1], wanted[1].path + " entry properties") - if (wanted[2]) { - t.equivalent(result[2], wanted[2], "metadata values") - } - index ++ - }) - }) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/zz-cleanup.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/zz-cleanup.js deleted file mode 100644 index a00ff7fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tar/test/zz-cleanup.js +++ /dev/null @@ -1,20 +0,0 @@ -// clean up the fixtures - -var tap = require("tap") -, rimraf = require("rimraf") -, test = tap.test -, path = require("path") - -test("clean fixtures", function (t) { - rimraf(path.resolve(__dirname, "fixtures"), function (er) { - t.ifError(er, "rimraf ./fixtures/") - t.end() - }) -}) - -test("clean tmp", function (t) { - rimraf(path.resolve(__dirname, "tmp"), function (er) { - t.ifError(er, "rimraf ./tmp/") - t.end() - }) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/index.js deleted file mode 100644 index da99ffef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/index.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; -var path = require('path'); -var tmpdir = require('os').tmpdir(); -var uuid = require('uuid'); - -module.exports = function (ext) { - return path.join(tmpdir, uuid.v4() + (ext || '')); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.npmignore deleted file mode 100644 index fd4f2b06..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.DS_Store diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.travis.yml deleted file mode 100644 index b6d42c3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.9 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/LICENSE.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/LICENSE.md deleted file mode 100644 index f039427f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/LICENSE.md +++ /dev/null @@ -1,2 +0,0 @@ -Copyright (c) 2010-2012 Robert Kieffer -MIT License - http://opensource.org/licenses/mit-license.php diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/README.md deleted file mode 100644 index d2adba18..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/README.md +++ /dev/null @@ -1,204 +0,0 @@ -# uuid [![Build Status](https://secure.travis-ci.org/shtylman/node-uuid.png?branch=master)](http://travis-ci.org/shtylman/node-uuid) # - -[![browser support](http://ci.testling.com/shtylman/node-uuid.png)](http://ci.testling.com/shtylman/node-uuid) - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Generate RFC4122 version 1 or version 4 UUIDs -* Runs in node.js and all browsers. -* Cryptographically strong random # generation on supporting platforms -* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! ) -* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html) - -## Getting Started - -Install it in your browser: - -```html -<script src="uuid.js"></script> -``` - -Or in node.js: - -``` -npm install uuid -``` - -```javascript -var uuid = require('uuid'); - -// Generate a v1 (time-based) id -uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - -// Generate a v4 (random) id -uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' -``` - -## API - -### uuid.v1([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Notes: - -1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v1({ - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -var arr = new Array(32); // -> [] -uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] - -// Optionally use uuid.unparse() to get stringify the ids -uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' -uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' -``` - -### uuid.v4([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v4({ - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" -``` - -Example: Generate two IDs in a single buffer - -```javascript -var buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); -``` - -### uuid.parse(id[, buffer[, offset]]) -### uuid.unparse(buffer[, offset]) - -Parse and unparse UUIDs - - * `id` - (String) UUID(-like) string - * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used - * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 - -Example parsing and unparsing a UUID string - -```javascript -var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10> -var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' -``` - -### uuid.noConflict() - -(Browsers only) Set `uuid` property back to it's previous value. - -Returns the uuid object. - -Example: - -```javascript -var myUuid = uuid.noConflict(); -myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' -``` - -## Deprecated APIs - -Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. - -### uuid([format [, buffer [, offset]]]) - -uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). - -### uuid.BufferClass - -The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API. - -## Testing - -In node.js - -``` -> cd test -> node test.js -``` - -In Browser - -``` -open test/test.html -``` - -### Benchmarking - -Requires node.js - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -For a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark) - -For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - -## Release notes - -### 1.4.0 - -* Improved module context detection -* Removed public RNG functions - -### 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - -### 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/README.md deleted file mode 100644 index aaeb2ea0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# node-uuid Benchmarks - -### Results - -To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark - -### Run them yourself - -node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. - -To prepare and run the benchmark issue; - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -You'll see an output like this one: - -``` -# v4 -nodeuuid.v4(): 854700 uuids/second -nodeuuid.v4('binary'): 788643 uuids/second -nodeuuid.v4('binary', buffer): 1336898 uuids/second -uuid(): 479386 uuids/second -uuid('binary'): 582072 uuids/second -uuidjs.create(4): 312304 uuids/second - -# v1 -nodeuuid.v1(): 938086 uuids/second -nodeuuid.v1('binary'): 683060 uuids/second -nodeuuid.v1('binary', buffer): 1644736 uuids/second -uuidjs.create(1): 190621 uuids/second -``` - -* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. -* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. - -If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: - -``` -for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; -``` - -If you're interested in how performance varies between different node versions, you can issue the above command multiple times. - -You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: - -``` -(cd benchmark/ && ./bench.sh) -``` - -This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.gnu b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.gnu deleted file mode 100644 index a342fbbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.gnu +++ /dev/null @@ -1,174 +0,0 @@ -#!/opt/local/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.4 patchlevel 3 -# last modified March 2011 -# System: Darwin 10.8.0 -# -# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 -# Thomas Williams, Colin Kelley and many others -# -# gnuplot home: http://www.gnuplot.info -# faq, bugs, etc: type "help seeking-assistance" -# immediate help: type "help" -# plot window: hit 'h' -set terminal postscript eps noenhanced defaultplex \ - leveldefault color colortext \ - solid linewidth 1.2 butt noclip \ - palfuncparam 2000,0.003 \ - "Helvetica" 14 -set output 'bench.eps' -unset clip points -set clip one -unset clip two -set bar 1.000000 front -set border 31 front linetype -1 linewidth 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 -set style circle radius graph 0.02, first 0, 0 -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 -set key maxcolumns 2 maxrows 0 -unset label -unset arrow -set style increment default -unset style line -set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 -unset style arrow -set style histogram clustered gap 2 title offset character 0, 0, 0 -unset logscale -set offsets graph 0.05, 0.15, 0, 0 -set pointsize 1.5 -set pointintervalbox 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -unset hidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data points -set style function lines -set xzeroaxis linetype -2 linewidth 1.000 -set yzeroaxis linetype -2 linewidth 1.000 -set zzeroaxis linetype -2 linewidth 1.000 -set x2zeroaxis linetype -2 linewidth 1.000 -set y2zeroaxis linetype -2 linewidth 1.000 -set ticslevel 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set xtics norangelimit -set xtics () -set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set ytics autofreq norangelimit -set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 -set ztics autofreq norangelimit -set nox2tics -set noy2tics -set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set cbtics autofreq norangelimit -set title "" -set title offset character 0, 0, 0 font "" norotate -set timestamp bottom -set timestamp "" -set timestamp offset character 0, 0, 0 font "" norotate -set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale rfixmin -set autoscale rfixmax -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set autoscale tfixmin -set autoscale tfixmax -set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale ufixmin -set autoscale ufixmax -set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale vfixmin -set autoscale vfixmax -set xlabel "" -set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set x2label "" -set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate -set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) -set autoscale xfixmin -set autoscale xfixmax -set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) -set autoscale x2fixmin -set autoscale x2fixmax -set ylabel "" -set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set y2label "" -set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) -set autoscale yfixmin -set autoscale yfixmax -set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) -set autoscale y2fixmin -set autoscale y2fixmax -set zlabel "" -set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale zfixmin -set autoscale zfixmax -set cblabel "" -set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale cbfixmin -set autoscale cbfixmax -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set pm3d explicit at s -set pm3d scansautomatic -set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault -set loadpath -set fontpath -set fit noerrorvariables -GNUTERM = "aqua" -plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 -# EOF diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.sh deleted file mode 100755 index d870a0cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/bench.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# for a given node version run: -# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; - -PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte') -FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es) -INDICES=(2 3 2 3 2 2 2 2 2) -VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) -TMPJOIN="tmp_join" -OUTPUT="bench_results.txt" - -for I in ${!FILES[*]}; do - F=${FILES[$I]} - P=${PATTERNS[$I]} - INDEX=${INDICES[$I]} - echo "version $F" > $F - for V in $VERSIONS; do - (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F - done - if [ $I == 0 ]; then - cat $F > $TMPJOIN - else - join $TMPJOIN $F > $OUTPUT - cp $OUTPUT $TMPJOIN - fi - rm $F -done - -rm $TMPJOIN - -gnuplot bench.gnu -convert -density 200 -resize 800x560 -flatten bench.eps bench.png -rm bench.eps diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark-native.c b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark-native.c deleted file mode 100644 index dbfc75f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include <stdio.h> -#include <unistd.h> -#include <sys/time.h> -#include <uuid/uuid.h> - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark.js deleted file mode 100644 index 40e6efbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/benchmark/benchmark.js +++ /dev/null @@ -1,84 +0,0 @@ -try { - var nodeuuid = require('../uuid'); -} catch (e) { - console.error('node-uuid require failed - skipping tests'); -} - -try { - var uuid = require('uuid'); -} catch (e) { - console.error('uuid require failed - skipping tests'); -} - -try { - var uuidjs = require('uuid-js'); -} catch (e) { - console.error('uuid-js require failed - skipping tests'); -} - -var N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -console.log('# v4'); - -// node-uuid - string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); - rate('nodeuuid.v4() - using node.js crypto RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG}); - rate('nodeuuid.v4() - using Math.random() RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); - rate('nodeuuid.v4(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); - rate('nodeuuid.v4(\'binary\', buffer)', t); -} - -// libuuid - string form -if (uuid) { - for (var i = 0, t = Date.now(); i < N; i++) uuid(); - rate('uuid()', t); - - for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); - rate('uuid(\'binary\')', t); -} - -// uuid-js - string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); - rate('uuidjs.create(4)', t); -} - -// 140byte.es -for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)}); -rate('140byte.es_v4', t); - -console.log(''); -console.log('# v1'); - -// node-uuid - v1 string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); - rate('nodeuuid.v1()', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); - rate('nodeuuid.v1(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); - rate('nodeuuid.v1(\'binary\', buffer)', t); -} - -// uuid-js - v1 string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); - rate('uuidjs.create(1)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/compare.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/compare.js deleted file mode 100644 index 3de34151..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/compare.js +++ /dev/null @@ -1,62 +0,0 @@ -var assert = require('assert'), - nodeuuid = require('../'), - uuidjs = require('uuid-js'), - util = require('util'), - exec = require('child_process').exec, - os = require('os'); - -// On Mac Os X / macports there's only the ossp-uuid package that provides uuid -// On Linux there's uuid-runtime which provides uuidgen -var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t'; - -function compare(ids) { - console.log(ids); - for (var i = 0; i < ids.length; i++) { - var id = ids[i].split('-'); - id = [id[2], id[1], id[0]].join(''); - ids[i] = id; - } - var sorted = ([].concat(ids)).sort(); - - if (sorted.toString() !== ids.toString()) { - console.log('Warning: sorted !== ids'); - } else { - console.log('everything in order!'); - } -} - -// Test time order of v1 uuids -var ids = []; -while (ids.length < 10e3) ids.push(nodeuuid.v1()); - -var max = 10; -console.log('node-uuid:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(nodeuuid.v1()); -compare(ids); - -console.log(''); -console.log('uuidjs:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString()); -compare(ids); - -console.log(''); -console.log('libuuid:'); -ids = []; -var count = 0; -var last = function() { - compare(ids); -} -var cb = function(err, stdout, stderr) { - ids.push(stdout.substring(0, stdout.length-1)); - count++; - if (count < max) { - return next(); - } - last(); -}; -var next = function() { - exec(uuidCmd, cb); -}; -next(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/perf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/perf.js deleted file mode 100644 index bdc9eb46..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/misc/perf.js +++ /dev/null @@ -1,102 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -var log = console.log; - -var generators = { - v1: uuid.v1, - v4: uuid.v4 -}; - -var UUID_FORMAT = { - v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i, - v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i -}; - -var N = 1e4; - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second'); -} - -for (var version in generators) { - var counts = {}, max = 0; - var generator = generators[version]; - var format = UUID_FORMAT[version]; - - log('\nSanity check ' + N + ' ' + version + ' uuids'); - for (var i = 0, ok = 0; i < N; i++) { - id = generator(); - if (!format.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - assert(fail, id + ' is not a valid id'); - } - - // Count digits for our randomness check - if (version == 'v4') { - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } - } - } - - // Check randomness for v4 UUIDs - if (version == 'v4') { - // Limit that we get worried about randomness. (Purely empirical choice, this!) - var limit = 2*100*Math.sqrt(1/N); - - log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)'); - - for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)'); - } - } -} - -// Perf tests -for (var version in generators) { - log('\nPerformance testing ' + version + ' UUIDs'); - var generator = generators[version]; - var buf = new uuid.BufferClass(16); - - for (var i = 0, t = Date.now(); i < N; i++) generator(); - rate('uuid.' + version + '()', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary'); - rate('uuid.' + version + '(\'binary\')', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf); - rate('uuid.' + version + '(\'binary\', buffer)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/package.json deleted file mode 100644 index d9f8435b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "uuid", - "version": "1.4.1", - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com" - }, - "contributors": [ - { - "name": "Christoph Tavan", - "email": "dev@tavan.de" - } - ], - "main": "./uuid.js", - "devDependencies": { - "mocha": "1.8.0" - }, - "scripts": { - "test": "mocha test/test.js" - }, - "browser": { - "./rng.js": "./rng-browser.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/shtylman/node-uuid.git" - }, - "testling": { - "browsers": [ - "ie6..latest", - "firefox/3.6..latest", - "chrome/22..latest", - "safari/5.1..latest" - ], - "harness": "mocha-tdd", - "files": "test/*.js" - }, - "readme": "# uuid [![Build Status](https://secure.travis-ci.org/shtylman/node-uuid.png?branch=master)](http://travis-ci.org/shtylman/node-uuid) #\n\n[![browser support](http://ci.testling.com/shtylman/node-uuid.png)](http://ci.testling.com/shtylman/node-uuid)\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src=\"uuid.js\"></script>\n```\n\nOr in node.js:\n\n```\nnpm install uuid\n```\n\n```javascript\nvar uuid = require('uuid');\n\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/shtylman/node-uuid/issues" - }, - "homepage": "https://github.com/shtylman/node-uuid", - "_id": "uuid@1.4.1", - "dist": { - "shasum": "4e6bbab179cc65c2f120508576c631bd7751af7c" - }, - "_from": "uuid@~1.4.0", - "_resolved": "https://registry.npmjs.org/uuid/-/uuid-1.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng-browser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng-browser.js deleted file mode 100644 index 57b58d4b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng-browser.js +++ /dev/null @@ -1,31 +0,0 @@ - -var rng; - -if (global.crypto && crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // Moderately fast, high quality - var _rnds8 = new Uint8Array(16); - rng = function whatwgRNG() { - crypto.getRandomValues(_rnds8); - return _rnds8; - }; -} - -if (!rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - rng = function() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return _rnds; - }; -} - -module.exports = rng; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng.js deleted file mode 100644 index 3977f798..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/rng.js +++ /dev/null @@ -1,4 +0,0 @@ -var rb = require('crypto').randomBytes; -module.exports = function() { - return rb(16); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/mocha.opts b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/mocha.opts deleted file mode 100644 index e2bfcc5a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---ui qunit diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/test.js deleted file mode 100644 index 4c9872ff..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/test/test.js +++ /dev/null @@ -1,105 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -// Verify ordering of v1 ids created with explicit times -var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 - -function compare(name, ids) { - test(name, function() { - // avoid .map for older browsers - for (var i=0 ; i<ids.length ; ++i) { - ids[i] = ids[i].split('-').reverse().join('-'); - } - ids = ids.sort(); - var sorted = ([].concat(ids)).sort(); - - assert(sorted.toString() == ids.toString(), name + ' have expected order'); - }); -} - -// Verify ordering of v1 ids created using default behavior -compare('uuids with current time', [ - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1() -]); - -// Verify ordering of v1 ids created with explicit times -compare('uuids with time option', [ - uuid.v1({msecs: TIME - 10*3600*1000}), - uuid.v1({msecs: TIME - 1}), - uuid.v1({msecs: TIME}), - uuid.v1({msecs: TIME + 1}), - uuid.v1({msecs: TIME + 28*24*3600*1000}) -]); - -test('msec', function() { - assert( - uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}), - 'IDs created at same msec are different' - ); -}); - -test('exception thrown when > 10k ids created in 1ms', function() { - // Verify throw if too many ids created - var thrown = false; - try { - uuid.v1({msecs: TIME, nsecs: 10000}); - } catch (e) { - thrown = true; - } - assert(thrown, 'Exception thrown when > 10K ids created in 1 ms'); -}); - -test('clock regression by msec', function() { - // Verify clock regression bumps clockseq - var uidt = uuid.v1({msecs: TIME}); - var uidtb = uuid.v1({msecs: TIME - 1}); - assert( - parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq' - ); -}); - -test('clock regression by nsec', function() { - // Verify clock regression bumps clockseq - var uidtn = uuid.v1({msecs: TIME, nsecs: 10}); - var uidtnb = uuid.v1({msecs: TIME, nsecs: 9}); - assert( - parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq' - ); -}); - -test('explicit options product expected id', function() { - // Verify explicit options produce expected id - var id = uuid.v1({ - msecs: 1321651533573, - nsecs: 5432, - clockseq: 0x385c, - node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ] - }); - assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); -}); - -test('ids spanning 1ms boundary are 100ns apart', function() { - // Verify adjacent ids across a msec boundary are 1 time unit apart - var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); - var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - - var before = u0.split('-')[0], after = u1.split('-')[0]; - var dt = parseInt(after, 16) - parseInt(before, 16); - assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); -}); - -test('parse/unparse', function() { - var id = '00112233445566778899aabbccddeeff'; - assert(uuid.unparse(uuid.parse(id.substr(0,10))) == - '00112233-4400-0000-0000-000000000000', 'Short parse'); - assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) == - '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse'); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/uuid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/uuid.js deleted file mode 100644 index d0062fb4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/node_modules/uuid/uuid.js +++ /dev/null @@ -1,187 +0,0 @@ -// uuid.js -// -// Copyright (c) 2010-2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -// Unique ID creation requires a high quality random # generator. We feature -// detect to determine the best RNG source, normalizing to a function that -// returns 128-bits of randomness, since that's what's usually required -var _rng = require('./rng'); - -// Buffer class to use -var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array; - -// Maps for number <-> hex string conversion -var _byteToHex = []; -var _hexToByte = {}; -for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; -} - -// **`parse()` - Parse a UUID into it's component bytes** -function parse(s, buf, offset) { - var i = (buf && offset) || 0, ii = 0; - - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) { - if (ii < 16) { // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); - - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; - } - - return buf; -} - -// **`unparse()` - Convert UUID byte array (ala parse()) into a string** -function unparse(buf, offset) { - var i = offset || 0, bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]]; -} - -// **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html - -// random #'s we need to init node and clockseq -var _seedBytes = _rng(); - -// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) -var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] -]; - -// Per 4.2.2, randomize (14 bit) clockseq -var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; - -// Previous uuid creation time -var _lastMSecs = 0, _lastNSecs = 0; - -// See https://github.com/broofa/node-uuid for API details -function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - - var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; - } - - return buf ? buf : unparse(b); -} - -// **`v4()` - Generate random UUID** - -// See https://github.com/broofa/node-uuid for API details -function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options == 'binary' ? new BufferClass(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || _rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || unparse(rnds); -} - -// Export public API -var uuid = v4; -uuid.v1 = v1; -uuid.v4 = v4; -uuid.parse = parse; -uuid.unparse = unparse; -uuid.BufferClass = BufferClass; - -module.exports = uuid; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/package.json deleted file mode 100644 index 561465e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "tempfile", - "version": "0.1.2", - "description": "Get a random temp file path", - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/sindresorhus/tempfile" - }, - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "files": [ - "index.js" - ], - "keywords": [ - "tmp", - "temp", - "temporary", - "tempfile", - "file", - "path", - "random", - "rand" - ], - "dependencies": { - "uuid": "~1.4.0" - }, - "devDependencies": { - "mocha": "*" - }, - "readme": "# tempfile [![Build Status](https://travis-ci.org/sindresorhus/tempfile.png?branch=master)](http://travis-ci.org/sindresorhus/tempfile)\n\n> Get a random temp file path\n\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/tempfile)\n\n```\nnpm install --save tempfile\n```\n\n\n## Example\n\n```js\nvar tempfile = require('tempfile');\ntempfile('.png');\n//=> /var/folders/_1/tk89k8215ts0rg0kmb096nj80000gn/T/4049f192-43e7-43b2-98d9-094e6760861b.png\n```\n\n## API\n\n### tempfile(extension)\n\n#### extension\n\nType: `String`\n\nOptionally supply an extension to append to the path.\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/sindresorhus/tempfile/issues" - }, - "homepage": "https://github.com/sindresorhus/tempfile", - "_id": "tempfile@0.1.2", - "dist": { - "shasum": "81d4e51f35856592f3b51d568135791af3b038e0" - }, - "_from": "tempfile@~0.1.2", - "_resolved": "https://registry.npmjs.org/tempfile/-/tempfile-0.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/readme.md deleted file mode 100644 index 672a0ac6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/node_modules/tempfile/readme.md +++ /dev/null @@ -1,36 +0,0 @@ -# tempfile [![Build Status](https://travis-ci.org/sindresorhus/tempfile.png?branch=master)](http://travis-ci.org/sindresorhus/tempfile) - -> Get a random temp file path - - -## Install - -Install with [npm](https://npmjs.org/package/tempfile) - -``` -npm install --save tempfile -``` - - -## Example - -```js -var tempfile = require('tempfile'); -tempfile('.png'); -//=> /var/folders/_1/tk89k8215ts0rg0kmb096nj80000gn/T/4049f192-43e7-43b2-98d9-094e6760861b.png -``` - -## API - -### tempfile(extension) - -#### extension - -Type: `String` - -Optionally supply an extension to append to the path. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/package.json deleted file mode 100644 index 6e75932a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/decompress/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "decompress", - "version": "0.1.6", - "description": "Easily extract zip, tar and tar.gz archives", - "keywords": [ - "extract", - "zip", - "tar", - "tar.gz" - ], - "homepage": "https://github.com/kevva/decompress", - "bugs": { - "url": "https://github.com/kevva/decompress/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/kevva/decompress.git" - }, - "scripts": { - "test": "mocha --reporter list" - }, - "main": "decompress.js", - "files": [ - "decompress.js" - ], - "dependencies": { - "adm-zip": "~0.4.3", - "mkdirp": "~0.3.5", - "mout": "~0.6.0", - "rimraf": "~2.2.2", - "stream-combiner": "~0.0.2", - "tar": "~0.1.18", - "tempfile": "~0.1.2" - }, - "devDependencies": { - "mocha": "~1.12.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "readme": "# decompress [![Build Status](https://secure.travis-ci.org/kevva/decompress.png?branch=master)](http://travis-ci.org/kevva/decompress)\n\nEasily extract `.zip`, `.tar` and `.tar.gz` archives. Based on the extract \nutility in [Bower](https://github.com/bower/bower).\n\n## Getting started\n\nInstall with [npm](https://npmjs.org/package/decompress): `npm install decompress`\n\n## Examples\n\nYou'll only need to pass a type into `ext` and it'll figure the rest out for \nyou.\n\n```js\nvar decompress = require('decompress');\nvar fs = require('fs');\n\nvar src = fs.createReadStream('foo.tar.gz');\nvar dest = decompress.extract({ ext: '.tar.gz' });\n\nsrc.pipe(dest);\n```\n\n## API\n\n### .extract(opts)\n\nExtract an archive using the `ext` option to determine which extractor to use. \nIf no `path` is specified it'll extract it to your current location.\n\n### .canExtract(src, mime)\n\nDetermine if a file can be extracted or not by checking the file extension \nand/or the MIME type.\n\n```js\ndecompress.canExtract('foo.zip');\n// => true\n\ndecompress.canExtract('application/zip');\n// => true\n```\n\n## Options\n\n### `ext`\n\nType: `String` \nDefault: `''`\n\nString that can be a file name, URL, MIME type etc.\n\n### `path`\n\nType: `String` \nDefault: `process.cwd()`\n\nPath to extract the archive to. If no `path` is defined it'll extract it to your \ncurrent location.\n\n### strip\n\nType: `Number` \nDefault: `0`\n\nEquivalent to `--strip-components` for tar.\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com)\n", - "readmeFilename": "README.md", - "_id": "decompress@0.1.6", - "dist": { - "shasum": "dc920bd81312e06f3e97aa46add56f1e95e21a4e" - }, - "_from": "decompress@~0.1.5", - "_resolved": "https://registry.npmjs.org/decompress/-/decompress-0.1.6.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/each-async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/each-async.js deleted file mode 100644 index a43b4363..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/each-async.js +++ /dev/null @@ -1,72 +0,0 @@ -/*! - each-async - Async concurrent iterator (async forEach) - https://github.com/sindresorhus/each-async - by Sindre Sorhus - MIT License -*/ -(function () { - 'use strict'; - - function once(fn) { - var called = false; - - if (typeof fn !== 'function') { - throw new TypeError; - } - - return function () { - if (called) { - throw new Error('Callback already called.'); - } - called = true; - fn.apply(this, arguments); - } - } - - function each(arr, next, cb) { - var failed = false; - var count = 0; - - cb = cb || function () {}; - - if (!Array.isArray(arr)) { - throw new TypeError('First argument must be an array'); - } - - if (typeof next !== 'function') { - throw new TypeError('Second argument must be a function'); - } - - var len = arr.length; - - if (!len) { - return cb(); - } - - function callback(err) { - if (failed) { - return; - } - - if (err !== undefined && err !== null) { - failed = true; - return cb(err); - } - - if (++count === len) { - return cb(); - } - } - - for (var i = 0; i < len; i++) { - next(arr[i], i, once(callback)); - } - } - - if (typeof module !== 'undefined' && module.exports) { - module.exports = each; - } else { - window.eachAsync = each; - } -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/package.json deleted file mode 100644 index 8e17c2d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "each-async", - "version": "0.1.2", - "description": "Async concurrent iterator", - "license": "MIT", - "main": "each-async.js", - "repository": { - "type": "git", - "url": "git://github.com/sindresorhus/each-async" - }, - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "files": [ - "each-async.js" - ], - "keywords": [ - "each", - "async", - "asynchronous", - "iteration", - "iterate", - "loop", - "foreach", - "parallel", - "concurrent", - "array", - "flow", - "control flow" - ], - "devDependencies": { - "mocha": "*" - }, - "readme": "# each-async [![Build Status](https://secure.travis-ci.org/sindresorhus/each-async.png?branch=master)](http://travis-ci.org/sindresorhus/each-async)\n\n> Async concurrent iterator (async forEach)\n\nLike [async.each()](https://github.com/caolan/async#eacharr-iterator-callback), but tiny.\n\nI often use `async.each()` for doing async operations when iterating, but I almost never use the other gadzillion methods in `async`.\n\nAsync iteration is one of the most used async control flow patterns.\n\n\n## Install\n\nDownload [manually](https://github.com/sindresorhus/each-async/releases) or with a package-manager.\n\n#### [npm](https://npmjs.org/package/each-async)\n\n```\nnpm install --save each-async\n```\n\n#### [Bower](http://bower.io)\n\n```\nbower install --save each-async\n```\n\n#### [Component](https://github.com/component/component)\n\n```\ncomponent install sindresorhus/each-async\n```\n\n\n## Examples\n\n### Node.js\n\n```js\neachAsync(['foo','bar','baz'], function (item, index, done) {\n\tconsole.log(item, index);\n\tdone();\n}, function (error) {\n\tconsole.log('finished');\n});\n//=> foo 0\n//=> bar 1\n//=> baz 2\n//=> finished\n```\n\n\n## API\n\n### eachAsync(array, callback, finishedCallback)\n\n#### array\n\nThe array you want to iterate.\n\n#### callback(item, index, done)\n\nA function which is called for each item in the array with the following arguments:\n\n- `item`: the current item in the array\n- `index`: the current index\n- `done([error])`: call this when you're done with an optional error. Supplying anything other than `undefined`/`null` will stop the iteration.\n\nNote that order is not guaranteed since each item is handled concurrently.\n\n#### finishedCallback(error)\n\nA function which is called when the iteration is finished or on the first error. First argument is the error passed from `done()` in the `callback`.\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/sindresorhus/each-async/issues" - }, - "homepage": "https://github.com/sindresorhus/each-async", - "_id": "each-async@0.1.2", - "dist": { - "shasum": "d5b900bd92705ed5b8cad3307a6536adb0f134c6" - }, - "_from": "each-async@~0.1.1", - "_resolved": "https://registry.npmjs.org/each-async/-/each-async-0.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/readme.md deleted file mode 100644 index e5e5bb14..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/each-async/readme.md +++ /dev/null @@ -1,78 +0,0 @@ -# each-async [![Build Status](https://secure.travis-ci.org/sindresorhus/each-async.png?branch=master)](http://travis-ci.org/sindresorhus/each-async) - -> Async concurrent iterator (async forEach) - -Like [async.each()](https://github.com/caolan/async#eacharr-iterator-callback), but tiny. - -I often use `async.each()` for doing async operations when iterating, but I almost never use the other gadzillion methods in `async`. - -Async iteration is one of the most used async control flow patterns. - - -## Install - -Download [manually](https://github.com/sindresorhus/each-async/releases) or with a package-manager. - -#### [npm](https://npmjs.org/package/each-async) - -``` -npm install --save each-async -``` - -#### [Bower](http://bower.io) - -``` -bower install --save each-async -``` - -#### [Component](https://github.com/component/component) - -``` -component install sindresorhus/each-async -``` - - -## Examples - -### Node.js - -```js -eachAsync(['foo','bar','baz'], function (item, index, done) { - console.log(item, index); - done(); -}, function (error) { - console.log('finished'); -}); -//=> foo 0 -//=> bar 1 -//=> baz 2 -//=> finished -``` - - -## API - -### eachAsync(array, callback, finishedCallback) - -#### array - -The array you want to iterate. - -#### callback(item, index, done) - -A function which is called for each item in the array with the following arguments: - -- `item`: the current item in the array -- `index`: the current index -- `done([error])`: call this when you're done with an optional error. Supplying anything other than `undefined`/`null` will stop the iteration. - -Note that order is not guaranteed since each item is handled concurrently. - -#### finishedCallback(error) - -A function which is called when the iteration is finished or on the first error. First argument is the error passed from `done()` in the `callback`. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.npmignore deleted file mode 100644 index 80e59ef5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -tests -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.travis.yml deleted file mode 100644 index 0bce8152..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: node_js -node_js: - - 0.8 - - 0.10 - -env: - - OPTIONALS=Y - - OPTIONALS=N - -install: - - if [[ "$OPTIONALS" == "Y" ]]; then npm install; fi - - if [[ "$OPTIONALS" == "N" ]]; then npm install --no-optional; fi diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/README.md deleted file mode 100644 index 5c0c081f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/README.md +++ /dev/null @@ -1,366 +0,0 @@ -# Request -- Simplified HTTP client - -[![NPM](https://nodei.co/npm/request.png)](https://nodei.co/npm/request/) - -## Super simple to use - -Request is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default. - -```javascript -var request = require('request'); -request('http://www.google.com', function (error, response, body) { - if (!error && response.statusCode == 200) { - console.log(body) // Print the google web page. - } -}) -``` - -## Streaming - -You can stream any response to a file stream. - -```javascript -request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png')) -``` - -You can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one). - -```javascript -fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json')) -``` - -Request can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers. - -```javascript -request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png')) -``` - -Now let’s get fancy. - -```javascript -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - if (req.method === 'PUT') { - req.pipe(request.put('http://mysite.com/doodle.png')) - } else if (req.method === 'GET' || req.method === 'HEAD') { - request.get('http://mysite.com/doodle.png').pipe(resp) - } - } -}) -``` - -You can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don't really care about security, you can do: - -```javascript -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - var x = request('http://mysite.com/doodle.png') - req.pipe(x) - x.pipe(resp) - } -}) -``` - -And since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :) - -```javascript -req.pipe(request('http://mysite.com/doodle.png')).pipe(resp) -``` - -Also, none of this new functionality conflicts with requests previous features, it just expands them. - -```javascript -var r = request.defaults({'proxy':'http://localproxy.com'}) - -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - r.get('http://google.com/doodle.png').pipe(resp) - } -}) -``` - -You can still use intermediate proxies, the requests will still follow HTTP forwards, etc. - -## Forms - -`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API. - -URL-encoded forms are simple. - -```javascript -request.post('http://service.com/upload', {form:{key:'value'}}) -// or -request.post('http://service.com/upload').form({key:'value'}) -``` - -For `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). You don’t need to worry about piping the form object or setting the headers, `request` will handle that for you. - -```javascript -var r = request.post('http://service.com/upload') -var form = r.form() -form.append('my_field', 'my_value') -form.append('my_buffer', new Buffer([1, 2, 3])) -form.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png')) -form.append('remote_file', request('http://google.com/doodle.png')) -``` - -## HTTP Authentication - -```javascript -request.get('http://some.server.com/').auth('username', 'password', false); -// or -request.get('http://some.server.com/', { - 'auth': { - 'user': 'username', - 'pass': 'password', - 'sendImmediately': false - } -}); -``` - -If passed as an option, `auth` should be a hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). The method form takes parameters `auth(username, password, sendImmediately)`. - -`sendImmediately` defaults to `true`, which causes a basic authentication header to be sent. If `sendImmediately` is `false`, then `request` will retry with a proper authentication header after receiving a `401` response from the server (which must contain a `WWW-Authenticate` header indicating the required authentication method). - -Digest authentication is supported, but it only works with `sendImmediately` set to `false`; otherwise `request` will send basic authentication on the initial request, which will probably cause the request to fail. - -## OAuth Signing - -```javascript -// Twitter OAuth -var qs = require('querystring') - , oauth = - { callback: 'http://mysite.com/callback/' - , consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - } - , url = 'https://api.twitter.com/oauth/request_token' - ; -request.post({url:url, oauth:oauth}, function (e, r, body) { - // Ideally, you would take the body in the response - // and construct a URL that a user clicks on (like a sign in button). - // The verifier is only available in the response after a user has - // verified with twitter that they are authorizing your app. - var access_token = qs.parse(body) - , oauth = - { consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - , token: access_token.oauth_token - , verifier: access_token.oauth_verifier - } - , url = 'https://api.twitter.com/oauth/access_token' - ; - request.post({url:url, oauth:oauth}, function (e, r, body) { - var perm_token = qs.parse(body) - , oauth = - { consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - , token: perm_token.oauth_token - , token_secret: perm_token.oauth_token_secret - } - , url = 'https://api.twitter.com/1.1/users/show.json?' - , params = - { screen_name: perm_token.screen_name - , user_id: perm_token.user_id - } - ; - url += qs.stringify(params) - request.get({url:url, oauth:oauth, json:true}, function (e, r, user) { - console.log(user) - }) - }) -}) -``` - -### Custom HTTP Headers - -HTTP Headers, such as `User-Agent`, can be set in the `options` object. -In the example below, we call the github API to find out the number -of stars and forks for the request repository. This requires a -custom `User-Agent` header as well as https. - -```javascript -var request = require('request'); - -var options = { - url: 'https://api.github.com/repos/mikeal/request', - headers: { - 'User-Agent': 'request' - } -}; - -function callback(error, response, body) { - if (!error && response.statusCode == 200) { - var info = JSON.parse(body); - console.log(info.stargazers_count + " Stars"); - console.log(info.forks_count + " Forks"); - } -} - -request(options, callback); -``` - -### request(options, callback) - -The first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional. - -* `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()` -* `qs` - object containing querystring values to be appended to the `uri` -* `method` - http method (default: `"GET"`) -* `headers` - http headers (default: `{}`) -* `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer` or `String`. -* `form` - when passed an object, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded; charset=utf-8` header. When passed no options, a `FormData` instance is returned (and is piped to request). -* `auth` - A hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). See documentation above. -* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON. -* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below. -* `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`) -* `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`) -* `maxRedirects` - the maximum number of redirects to follow (default: `10`) -* `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`. -* `pool` - A hash object containing the agents for these requests. If omitted, the request will use the global pool (which is set to node's default `maxSockets`) -* `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool. -* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request -* `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`) -* `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above. -* `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example). -* `strictSSL` - If `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option. -* `jar` - If `true`, remember cookies for future use (or define your custom cookie jar; see examples section) -* `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`. Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services) -* `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options. -* `localAddress` - Local interface to bind for network connections. - - -The callback argument gets 3 arguments: - -1. An `error` when applicable (usually from [`http.ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) object) -2. An [`http.IncomingMessage`](http://nodejs.org/api/http.html#http_http_incomingmessage) object -3. The third is the `response` body (`String` or `Buffer`, or JSON object if the `json` option is supplied) - -## Convenience methods - -There are also shorthand methods for different HTTP METHODs and some other conveniences. - -### request.defaults(options) - -This method returns a wrapper around the normal request API that defaults to whatever options you pass in to it. - -### request.put - -Same as `request()`, but defaults to `method: "PUT"`. - -```javascript -request.put(url) -``` - -### request.patch - -Same as `request()`, but defaults to `method: "PATCH"`. - -```javascript -request.patch(url) -``` - -### request.post - -Same as `request()`, but defaults to `method: "POST"`. - -```javascript -request.post(url) -``` - -### request.head - -Same as request() but defaults to `method: "HEAD"`. - -```javascript -request.head(url) -``` - -### request.del - -Same as `request()`, but defaults to `method: "DELETE"`. - -```javascript -request.del(url) -``` - -### request.get - -Same as `request()` (for uniformity). - -```javascript -request.get(url) -``` -### request.cookie - -Function that creates a new cookie. - -```javascript -request.cookie('cookie_string_here') -``` -### request.jar - -Function that creates a new cookie jar. - -```javascript -request.jar() -``` - - -## Examples: - -```javascript - var request = require('request') - , rand = Math.floor(Math.random()*100000000).toString() - ; - request( - { method: 'PUT' - , uri: 'http://mikeal.iriscouch.com/testjs/' + rand - , multipart: - [ { 'content-type': 'application/json' - , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) - } - , { body: 'I am an attachment' } - ] - } - , function (error, response, body) { - if(response.statusCode == 201){ - console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand) - } else { - console.log('error: '+ response.statusCode) - console.log(body) - } - } - ) -``` - -Cookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`). - -```javascript -var request = request.defaults({jar: true}) -request('http://www.google.com', function () { - request('http://images.google.com') -}) -``` - -To use a custom cookie jar (instead `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`) - -```javascript -var j = request.jar() -var request = request.defaults({jar:j}) -request('http://www.google.com', function () { - request('http://images.google.com') -}) -``` -OR - -Note that `setCookie` requires at least three parameters, and the last is required to be a callback. - -```javascript -var j = request.jar() -var cookie = request.cookie('your_cookie_here') -j.setCookie(cookie, uri, function (err, cookie){}) -request({url: 'http://www.google.com', jar: j}, function () { - request('http://images.google.com') -}) -``` diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/dns-request.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/dns-request.js deleted file mode 100644 index 6a847f6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/dns-request.js +++ /dev/null @@ -1,7 +0,0 @@ -var request = require('request') - , dns = require('dns') - ; - -function wrap (fn) { - var -} \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/index.js deleted file mode 100755 index 465e5ae3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/index.js +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2010-2012 Mikeal Rogers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -var optional = require('./lib/optional') - , cookie = optional('tough-cookie') - , Cookie = cookie && cookie.Cookie - , CookieJar = cookie && cookie.CookieJar - , cookieJar = CookieJar && new CookieJar - - , copy = require('./lib/copy') - , Request = require('./request') - ; - - - -// organize params for patch, post, put, head, del -function initParams(uri, options, callback) { - if ((typeof options === 'function') && !callback) callback = options - if (options && typeof options === 'object') { - options.uri = uri - } else if (typeof uri === 'string') { - options = {uri:uri} - } else { - options = uri - uri = options.uri - } - return { uri: uri, options: options, callback: callback } -} - -function request (uri, options, callback) { - if (typeof uri === 'undefined') throw new Error('undefined is not a valid uri or options object.') - if ((typeof options === 'function') && !callback) callback = options - if (options && typeof options === 'object') { - options.uri = uri - } else if (typeof uri === 'string') { - options = {uri:uri} - } else { - options = uri - } - - options = copy(options) - - if (callback) options.callback = callback - var r = new Request(options) - return r -} - -module.exports = request - -request.Request = Request; - -request.debug = process.env.NODE_DEBUG && /request/.test(process.env.NODE_DEBUG) - -request.initParams = initParams - -request.defaults = function (options, requester) { - var def = function (method) { - var d = function (uri, opts, callback) { - var params = initParams(uri, opts, callback) - for (var i in options) { - if (params.options[i] === undefined) params.options[i] = options[i] - } - if(typeof requester === 'function') { - if(method === request) { - method = requester - } else { - params.options._requester = requester - } - } - return method(params.options, params.callback) - } - return d - } - var de = def(request) - de.get = def(request.get) - de.patch = def(request.patch) - de.post = def(request.post) - de.put = def(request.put) - de.head = def(request.head) - de.del = def(request.del) - de.cookie = def(request.cookie) - de.jar = request.jar - return de -} - -function requester(params) { - if(typeof params.options._requester === 'function') { - return params.options._requester - } else { - return request - } -} - -request.forever = function (agentOptions, optionsArg) { - var options = {} - if (optionsArg) { - for (var option in optionsArg) { - options[option] = optionsArg[option] - } - } - if (agentOptions) options.agentOptions = agentOptions - options.forever = true - return request.defaults(options) -} - -request.get = request -request.post = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'POST' - return requester(params)(params.uri || null, params.options, params.callback) -} -request.put = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'PUT' - return requester(params)(params.uri || null, params.options, params.callback) -} -request.patch = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'PATCH' - return requester(params)(params.uri || null, params.options, params.callback) -} -request.head = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'HEAD' - if (params.options.body || - params.options.requestBodyStream || - (params.options.json && typeof params.options.json !== 'boolean') || - params.options.multipart) { - throw new Error("HTTP HEAD requests MUST NOT include a request body.") - } - - return requester(params)(params.uri || null, params.options, params.callback) -} -request.del = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.options.method = 'DELETE' - return requester(params)(params.uri || null, params.options, params.callback) -} -request.jar = function () { - return new CookieJar -} -request.cookie = function (str) { - if (str && str.uri) str = str.uri - if (typeof str !== 'string') throw new Error("The cookie function only accepts STRING as param") - return new Cookie(str) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/copy.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/copy.js deleted file mode 100644 index 56831ff8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/copy.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = -function copy (obj) { - var o = {} - Object.keys(obj).forEach(function (i) { - o[i] = obj[i] - }) - return o -} \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/debug.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/debug.js deleted file mode 100644 index fa27b24b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/debug.js +++ /dev/null @@ -1,7 +0,0 @@ -var util = require('util') - -module.exports = -function debug () { - if (/\brequest\b/.test(process.env.NODE_DEBUG)) - console.error('REQUEST %s', util.format.apply(util, arguments)) -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/getSafe.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/getSafe.js deleted file mode 100644 index 28e07ea5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/getSafe.js +++ /dev/null @@ -1,34 +0,0 @@ -// Safe toJSON -module.exports = -function getSafe (self, uuid) { - if (typeof self === 'object' || typeof self === 'function') var safe = {} - if (Array.isArray(self)) var safe = [] - - var recurse = [] - - Object.defineProperty(self, uuid, {}) - - var attrs = Object.keys(self).filter(function (i) { - if (i === uuid) return false - if ( (typeof self[i] !== 'object' && typeof self[i] !== 'function') || self[i] === null) return true - return !(Object.getOwnPropertyDescriptor(self[i], uuid)) - }) - - - for (var i=0;i<attrs.length;i++) { - if ( (typeof self[attrs[i]] !== 'object' && typeof self[attrs[i]] !== 'function') || - self[attrs[i]] === null - ) { - safe[attrs[i]] = self[attrs[i]] - } else { - recurse.push(attrs[i]) - Object.defineProperty(self[attrs[i]], uuid, {}) - } - } - - for (var i=0;i<recurse.length;i++) { - safe[recurse[i]] = getSafe(self[recurse[i]], uuid) - } - - return safe -} \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/optional.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/optional.js deleted file mode 100644 index 0c4fe853..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/lib/optional.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = function(module) { - try { - return require(module); - } catch (e) {} -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/README.md deleted file mode 100644 index 763564e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/README.md +++ /dev/null @@ -1,4 +0,0 @@ -aws-sign -======== - -AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/index.js deleted file mode 100644 index 576e49dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/index.js +++ /dev/null @@ -1,202 +0,0 @@ - -/*! - * knox - auth - * Copyright(c) 2010 LearnBoost <dev@learnboost.com> - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var crypto = require('crypto') - , parse = require('url').parse - ; - -/** - * Valid keys. - */ - -var keys = - [ 'acl' - , 'location' - , 'logging' - , 'notification' - , 'partNumber' - , 'policy' - , 'requestPayment' - , 'torrent' - , 'uploadId' - , 'uploads' - , 'versionId' - , 'versioning' - , 'versions' - , 'website' - ] - -/** - * Return an "Authorization" header value with the given `options` - * in the form of "AWS <key>:<signature>" - * - * @param {Object} options - * @return {String} - * @api private - */ - -function authorization (options) { - return 'AWS ' + options.key + ':' + sign(options) -} - -module.exports = authorization -module.exports.authorization = authorization - -/** - * Simple HMAC-SHA1 Wrapper - * - * @param {Object} options - * @return {String} - * @api private - */ - -function hmacSha1 (options) { - return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64') -} - -module.exports.hmacSha1 = hmacSha1 - -/** - * Create a base64 sha1 HMAC for `options`. - * - * @param {Object} options - * @return {String} - * @api private - */ - -function sign (options) { - options.message = stringToSign(options) - return hmacSha1(options) -} -module.exports.sign = sign - -/** - * Create a base64 sha1 HMAC for `options`. - * - * Specifically to be used with S3 presigned URLs - * - * @param {Object} options - * @return {String} - * @api private - */ - -function signQuery (options) { - options.message = queryStringToSign(options) - return hmacSha1(options) -} -module.exports.signQuery= signQuery - -/** - * Return a string for sign() with the given `options`. - * - * Spec: - * - * <verb>\n - * <md5>\n - * <content-type>\n - * <date>\n - * [headers\n] - * <resource> - * - * @param {Object} options - * @return {String} - * @api private - */ - -function stringToSign (options) { - var headers = options.amazonHeaders || '' - if (headers) headers += '\n' - var r = - [ options.verb - , options.md5 - , options.contentType - , options.date ? options.date.toUTCString() : '' - , headers + options.resource - ] - return r.join('\n') -} -module.exports.queryStringToSign = stringToSign - -/** - * Return a string for sign() with the given `options`, but is meant exclusively - * for S3 presigned URLs - * - * Spec: - * - * <date>\n - * <resource> - * - * @param {Object} options - * @return {String} - * @api private - */ - -function queryStringToSign (options){ - return 'GET\n\n\n' + options.date + '\n' + options.resource -} -module.exports.queryStringToSign = queryStringToSign - -/** - * Perform the following: - * - * - ignore non-amazon headers - * - lowercase fields - * - sort lexicographically - * - trim whitespace between ":" - * - join with newline - * - * @param {Object} headers - * @return {String} - * @api private - */ - -function canonicalizeHeaders (headers) { - var buf = [] - , fields = Object.keys(headers) - ; - for (var i = 0, len = fields.length; i < len; ++i) { - var field = fields[i] - , val = headers[field] - , field = field.toLowerCase() - ; - if (0 !== field.indexOf('x-amz')) continue - buf.push(field + ':' + val) - } - return buf.sort().join('\n') -} -module.exports.canonicalizeHeaders = canonicalizeHeaders - -/** - * Perform the following: - * - * - ignore non sub-resources - * - sort lexicographically - * - * @param {String} resource - * @return {String} - * @api private - */ - -function canonicalizeResource (resource) { - var url = parse(resource, true) - , path = url.pathname - , buf = [] - ; - - Object.keys(url.query).forEach(function(key){ - if (!~keys.indexOf(key)) return - var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key]) - buf.push(key + val) - }) - - return path + (buf.length ? '?' + buf.sort().join('&') : '') -} -module.exports.canonicalizeResource = canonicalizeResource diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/package.json deleted file mode 100644 index ae98297e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/aws-sign2/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "aws-sign2", - "description": "AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.", - "version": "0.5.0", - "repository": { - "url": "https://github.com/mikeal/aws-sign" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "aws-sign\n========\n\nAWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/aws-sign/issues" - }, - "homepage": "https://github.com/mikeal/aws-sign", - "_id": "aws-sign2@0.5.0", - "dist": { - "shasum": "c57103f7a17fc037f02d7c2e64b602ea223f7d63" - }, - "_from": "aws-sign2@~0.5.0", - "_resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/README.md deleted file mode 100644 index 9d5b6634..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/README.md +++ /dev/null @@ -1,4 +0,0 @@ -forever-agent -============= - -HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/index.js deleted file mode 100644 index 1e8efcdf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/index.js +++ /dev/null @@ -1,119 +0,0 @@ -module.exports = ForeverAgent -ForeverAgent.SSL = ForeverAgentSSL - -var util = require('util') - , Agent = require('http').Agent - , net = require('net') - , tls = require('tls') - , AgentSSL = require('https').Agent - -function ForeverAgent(options) { - var self = this - self.options = options || {} - self.requests = {} - self.sockets = {} - self.freeSockets = {} - self.maxSockets = self.options.maxSockets || Agent.defaultMaxSockets - self.minSockets = self.options.minSockets || ForeverAgent.defaultMinSockets - self.on('free', function(socket, host, port) { - var name = host + ':' + port - if (self.requests[name] && self.requests[name].length) { - self.requests[name].shift().onSocket(socket) - } else if (self.sockets[name].length < self.minSockets) { - if (!self.freeSockets[name]) self.freeSockets[name] = [] - self.freeSockets[name].push(socket) - - // if an error happens while we don't use the socket anyway, meh, throw the socket away - var onIdleError = function() { - socket.destroy() - } - socket._onIdleError = onIdleError - socket.on('error', onIdleError) - } else { - // If there are no pending requests just destroy the - // socket and it will get removed from the pool. This - // gets us out of timeout issues and allows us to - // default to Connection:keep-alive. - socket.destroy() - } - }) - -} -util.inherits(ForeverAgent, Agent) - -ForeverAgent.defaultMinSockets = 5 - - -ForeverAgent.prototype.createConnection = net.createConnection -ForeverAgent.prototype.addRequestNoreuse = Agent.prototype.addRequest -ForeverAgent.prototype.addRequest = function(req, host, port) { - var name = host + ':' + port - if (this.freeSockets[name] && this.freeSockets[name].length > 0 && !req.useChunkedEncodingByDefault) { - var idleSocket = this.freeSockets[name].pop() - idleSocket.removeListener('error', idleSocket._onIdleError) - delete idleSocket._onIdleError - req._reusedSocket = true - req.onSocket(idleSocket) - } else { - this.addRequestNoreuse(req, host, port) - } -} - -ForeverAgent.prototype.removeSocket = function(s, name, host, port) { - if (this.sockets[name]) { - var index = this.sockets[name].indexOf(s) - if (index !== -1) { - this.sockets[name].splice(index, 1) - } - } else if (this.sockets[name] && this.sockets[name].length === 0) { - // don't leak - delete this.sockets[name] - delete this.requests[name] - } - - if (this.freeSockets[name]) { - var index = this.freeSockets[name].indexOf(s) - if (index !== -1) { - this.freeSockets[name].splice(index, 1) - if (this.freeSockets[name].length === 0) { - delete this.freeSockets[name] - } - } - } - - if (this.requests[name] && this.requests[name].length) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createSocket(name, host, port).emit('free') - } -} - -function ForeverAgentSSL (options) { - ForeverAgent.call(this, options) -} -util.inherits(ForeverAgentSSL, ForeverAgent) - -ForeverAgentSSL.prototype.createConnection = createConnectionSSL -ForeverAgentSSL.prototype.addRequestNoreuse = AgentSSL.prototype.addRequest - -function createConnectionSSL (port, host, options) { - if (typeof port === 'object') { - options = port; - } else if (typeof host === 'object') { - options = host; - } else if (typeof options === 'object') { - options = options; - } else { - options = {}; - } - - if (typeof port === 'number') { - options.port = port; - } - - if (typeof host === 'string') { - options.host = host; - } - - return tls.connect(options); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/package.json deleted file mode 100644 index 2044778a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/forever-agent/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "forever-agent", - "description": "HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.", - "version": "0.5.2", - "repository": { - "url": "https://github.com/mikeal/forever-agent" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "forever-agent\n=============\n\nHTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/forever-agent/issues" - }, - "homepage": "https://github.com/mikeal/forever-agent", - "_id": "forever-agent@0.5.2", - "dist": { - "shasum": "6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" - }, - "_from": "forever-agent@~0.5.0", - "_resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/License b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/License deleted file mode 100644 index c7ff12a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/License +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/Readme.md deleted file mode 100644 index dc73c463..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/Readme.md +++ /dev/null @@ -1,163 +0,0 @@ -# Form-Data [![Build Status](https://travis-ci.org/felixge/node-form-data.png?branch=master)](https://travis-ci.org/felixge/node-form-data) [![Dependency Status](https://gemnasium.com/felixge/node-form-data.png)](https://gemnasium.com/felixge/node-form-data) - -A module to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. - -The API of this module is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. - -[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface -[streams2-thing]: http://nodejs.org/api/stream.html#stream_compatibility_with_older_node_versions - -## Install - -``` -npm install form-data -``` - -## Usage - -In this example we are constructing a form with 3 fields that contain a string, -a buffer and a file stream. - -``` javascript -var FormData = require('form-data'); -var fs = require('fs'); - -var form = new FormData(); -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_file', fs.createReadStream('/foo/bar.jpg')); -``` - -Also you can use http-response stream: - -``` javascript -var FormData = require('form-data'); -var http = require('http'); - -var form = new FormData(); - -http.request('http://nodejs.org/images/logo.png', function(response) { - form.append('my_field', 'my value'); - form.append('my_buffer', new Buffer(10)); - form.append('my_logo', response); -}); -``` - -Or @mikeal's request stream: - -``` javascript -var FormData = require('form-data'); -var request = require('request'); - -var form = new FormData(); - -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_logo', request('http://nodejs.org/images/logo.png')); -``` - -In order to submit this form to a web application, call ```submit(url, [callback])``` method: - -``` javascript -form.submit('http://example.org/', function(err, res) { - // res – response object (http.IncomingMessage) // - res.resume(); // for node-0.10.x -}); - -``` - -For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. - -### Alternative submission methods - -You can use node's http client interface: - -``` javascript -var http = require('http'); - -var request = http.request({ - method: 'post', - host: 'example.org', - path: '/upload', - headers: form.getHeaders() -}); - -form.pipe(request); - -request.on('response', function(res) { - console.log(res.statusCode); -}); -``` - -Or if you would prefer the `'Content-Length'` header to be set for you: - -``` javascript -form.submit('example.org/upload', function(err, res) { - console.log(res.statusCode); -}); -``` - -To use custom headers and pre-known length in parts: - -``` javascript -var CRLF = '\r\n'; -var form = new FormData(); - -var options = { - header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, - knownLength: 1 -}; - -form.append('my_buffer', buffer, options); - -form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); -}); -``` - -Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: - -``` javascript -someModule.stream(function(err, stdout, stderr) { - if (err) throw err; - - var form = new FormData(); - - form.append('file', stdout, { - filename: 'unicycle.jpg', - contentType: 'image/jpg', - knownLength: 19806 - }); - - form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); - }); -}); -``` - -For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: - -``` javascript -form.submit({ - host: 'example.com', - path: '/probably.php?extra=params', - auth: 'username:password' -}, function(err, res) { - console.log(res.statusCode); -}); -``` - -## Notes - -- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. -- If it feels like FormData hangs after submit and you're on ```node-0.10```, please check [Compatibility with Older Node Versions][streams2-thing] - -## TODO - -- Add new streams (0.10) support and try really hard not to break it for 0.8.x. - -## License - -Form-Data is licensed under the MIT license. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/lib/form_data.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/lib/form_data.js deleted file mode 100644 index d1064748..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/lib/form_data.js +++ /dev/null @@ -1,325 +0,0 @@ -var CombinedStream = require('combined-stream'); -var util = require('util'); -var path = require('path'); -var http = require('http'); -var https = require('https'); -var parseUrl = require('url').parse; -var fs = require('fs'); -var mime = require('mime'); -var async = require('async'); - -module.exports = FormData; -function FormData() { - this._overheadLength = 0; - this._valueLength = 0; - this._lengthRetrievers = []; - - CombinedStream.call(this); -} -util.inherits(FormData, CombinedStream); - -FormData.LINE_BREAK = '\r\n'; - -FormData.prototype.append = function(field, value, options) { - options = options || {}; - - var append = CombinedStream.prototype.append.bind(this); - - // all that streamy business can't handle numbers - if (typeof value == 'number') value = ''+value; - - // https://github.com/felixge/node-form-data/issues/38 - if (util.isArray(value)) { - // Please convert your array into string - // the way web server expects it - this._error(new Error('Arrays are not supported.')); - return; - } - - var header = this._multiPartHeader(field, value, options); - var footer = this._multiPartFooter(field, value, options); - - append(header); - append(value); - append(footer); - - // pass along options.knownLength - this._trackLength(header, value, options); -}; - -FormData.prototype._trackLength = function(header, value, options) { - var valueLength = 0; - - // used w/ getLengthSync(), when length is known. - // e.g. for streaming directly from a remote server, - // w/ a known file a size, and not wanting to wait for - // incoming file to finish to get its size. - if (options.knownLength != null) { - valueLength += +options.knownLength; - } else if (Buffer.isBuffer(value)) { - valueLength = value.length; - } else if (typeof value === 'string') { - valueLength = Buffer.byteLength(value); - } - - this._valueLength += valueLength; - - // @check why add CRLF? does this account for custom/multiple CRLFs? - this._overheadLength += - Buffer.byteLength(header) + - + FormData.LINE_BREAK.length; - - // empty or either doesn't have path or not an http response - if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) { - return; - } - - // no need to bother with the length - if (!options.knownLength) - this._lengthRetrievers.push(function(next) { - - if (value.hasOwnProperty('fd')) { - fs.stat(value.path, function(err, stat) { - if (err) { - next(err); - return; - } - - next(null, stat.size); - }); - - // or http response - } else if (value.hasOwnProperty('httpVersion')) { - next(null, +value.headers['content-length']); - - // or request stream http://github.com/mikeal/request - } else if (value.hasOwnProperty('httpModule')) { - // wait till response come back - value.on('response', function(response) { - value.pause(); - next(null, +response.headers['content-length']); - }); - value.resume(); - - // something else - } else { - next('Unknown stream'); - } - }); -}; - -FormData.prototype._multiPartHeader = function(field, value, options) { - var boundary = this.getBoundary(); - var header = ''; - - // custom header specified (as string)? - // it becomes responsible for boundary - // (e.g. to handle extra CRLFs on .NET servers) - if (options.header != null) { - header = options.header; - } else { - header += '--' + boundary + FormData.LINE_BREAK + - 'Content-Disposition: form-data; name="' + field + '"'; - - // fs- and request- streams have path property - // or use custom filename and/or contentType - // TODO: Use request's response mime-type - if (options.filename || value.path) { - header += - '; filename="' + path.basename(options.filename || value.path) + '"' + FormData.LINE_BREAK + - 'Content-Type: ' + (options.contentType || mime.lookup(options.filename || value.path)); - - // http response has not - } else if (value.readable && value.hasOwnProperty('httpVersion')) { - header += - '; filename="' + path.basename(value.client._httpMessage.path) + '"' + FormData.LINE_BREAK + - 'Content-Type: ' + value.headers['content-type']; - } - - header += FormData.LINE_BREAK + FormData.LINE_BREAK; - } - - return header; -}; - -FormData.prototype._multiPartFooter = function(field, value, options) { - return function(next) { - var footer = FormData.LINE_BREAK; - - var lastPart = (this._streams.length === 0); - if (lastPart) { - footer += this._lastBoundary(); - } - - next(footer); - }.bind(this); -}; - -FormData.prototype._lastBoundary = function() { - return '--' + this.getBoundary() + '--'; -}; - -FormData.prototype.getHeaders = function(userHeaders) { - var formHeaders = { - 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() - }; - - for (var header in userHeaders) { - formHeaders[header.toLowerCase()] = userHeaders[header]; - } - - return formHeaders; -} - -FormData.prototype.getCustomHeaders = function(contentType) { - contentType = contentType ? contentType : 'multipart/form-data'; - - var formHeaders = { - 'content-type': contentType + '; boundary=' + this.getBoundary(), - 'content-length': this.getLengthSync() - }; - - return formHeaders; -} - -FormData.prototype.getBoundary = function() { - if (!this._boundary) { - this._generateBoundary(); - } - - return this._boundary; -}; - -FormData.prototype._generateBoundary = function() { - // This generates a 50 character boundary similar to those used by Firefox. - // They are optimized for boyer-moore parsing. - var boundary = '--------------------------'; - for (var i = 0; i < 24; i++) { - boundary += Math.floor(Math.random() * 10).toString(16); - } - - this._boundary = boundary; -}; - -// Note: getLengthSync DOESN'T calculate streams length -// As workaround one can calculate file size manually -// and add it as knownLength option -FormData.prototype.getLengthSync = function(debug) { - var knownLength = this._overheadLength + this._valueLength; - - // Don't get confused, there are 3 "internal" streams for each keyval pair - // so it basically checks if there is any value added to the form - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - - // https://github.com/felixge/node-form-data/issues/40 - if (this._lengthRetrievers.length) { - // Some async length retrivers are present - // therefore synchronous length calculation is false. - // Please use getLength(callback) to get proper length - this._error(new Error('Cannot calculate proper length in synchronous way.')); - } - - return knownLength; -}; - -FormData.prototype.getLength = function(cb) { - var knownLength = this._overheadLength + this._valueLength; - - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - - if (!this._lengthRetrievers.length) { - process.nextTick(cb.bind(this, null, knownLength)); - return; - } - - async.parallel(this._lengthRetrievers, function(err, values) { - if (err) { - cb(err); - return; - } - - values.forEach(function(length) { - knownLength += length; - }); - - cb(null, knownLength); - }); -}; - -FormData.prototype.submit = function(params, cb) { - - var request - , options - , defaults = { - method : 'post', - headers: this.getHeaders() - }; - - // parse provided url if it's string - // or treat it as options object - if (typeof params == 'string') { - params = parseUrl(params); - - options = populate({ - port: params.port, - path: params.pathname, - host: params.hostname - }, defaults); - } - else // use custom params - { - options = populate(params, defaults); - // if no port provided use default one - if (!options.port) { - options.port = options.protocol == 'https:' ? 443 : 80; - } - } - - // https if specified, fallback to http in any other case - if (params.protocol == 'https:') { - request = https.request(options); - } else { - request = http.request(options); - } - - // get content length and fire away - this.getLength(function(err, length) { - - // TODO: Add chunked encoding when no length (if err) - - // add content length - request.setHeader('Content-Length', length); - - this.pipe(request); - if (cb) { - request.on('error', cb); - request.on('response', cb.bind(this, null)); - } - }.bind(this)); - - return request; -}; - -FormData.prototype._error = function(err) { - if (this.error) return; - - this.error = err; - this.pause(); - this.emit('error', err); -}; - -/* - * Santa's little helpers - */ - -// populates missing values -function populate(dst, src) { - for (var prop in src) { - if (!dst[prop]) dst[prop] = src[prop]; - } - return dst; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/LICENSE deleted file mode 100644 index b7f9d500..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010 Caolan McMahon - -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/README.md deleted file mode 100644 index 951f76e9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/README.md +++ /dev/null @@ -1,1425 +0,0 @@ -# Async.js - -Async is a utility module which provides straight-forward, powerful functions -for working with asynchronous JavaScript. Although originally designed for -use with [node.js](http://nodejs.org), it can also be used directly in the -browser. Also supports [component](https://github.com/component/component). - -Async provides around 20 functions that include the usual 'functional' -suspects (map, reduce, filter, each…) as well as some common patterns -for asynchronous control flow (parallel, series, waterfall…). All these -functions assume you follow the node.js convention of providing a single -callback as the last argument of your async function. - - -## Quick Examples - -```javascript -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); - -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); - -async.parallel([ - function(){ ... }, - function(){ ... } -], callback); - -async.series([ - function(){ ... }, - function(){ ... } -]); -``` - -There are many more functions available so take a look at the docs below for a -full list. This module aims to be comprehensive, so if you feel anything is -missing please create a GitHub issue for it. - -## Common Pitfalls - -### Binding a context to an iterator - -This section is really about bind, not about async. If you are wondering how to -make async execute your iterators in a given context, or are confused as to why -a method of another library isn't working as an iterator, study this example: - -```js -// Here is a simple object with an (unnecessarily roundabout) squaring method -var AsyncSquaringLibrary = { - squareExponent: 2, - square: function(number, callback){ - var result = Math.pow(number, this.squareExponent); - setTimeout(function(){ - callback(null, result); - }, 200); - } -}; - -async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){ - // result is [NaN, NaN, NaN] - // This fails because the `this.squareExponent` expression in the square - // function is not evaluated in the context of AsyncSquaringLibrary, and is - // therefore undefined. -}); - -async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){ - // result is [1, 4, 9] - // With the help of bind we can attach a context to the iterator before - // passing it to async. Now the square function will be executed in its - // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent` - // will be as expected. -}); -``` - -## Download - -The source is available for download from -[GitHub](http://github.com/caolan/async). -Alternatively, you can install using Node Package Manager (npm): - - npm install async - -__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed - -## In the Browser - -So far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage: - -```html -<script type="text/javascript" src="async.js"></script> -<script type="text/javascript"> - - async.map(data, asyncProcess, function(err, results){ - alert(results); - }); - -</script> -``` - -## Documentation - -### Collections - -* [each](#each) -* [eachSeries](#eachSeries) -* [eachLimit](#eachLimit) -* [map](#map) -* [mapSeries](#mapSeries) -* [mapLimit](#mapLimit) -* [filter](#filter) -* [filterSeries](#filterSeries) -* [reject](#reject) -* [rejectSeries](#rejectSeries) -* [reduce](#reduce) -* [reduceRight](#reduceRight) -* [detect](#detect) -* [detectSeries](#detectSeries) -* [sortBy](#sortBy) -* [some](#some) -* [every](#every) -* [concat](#concat) -* [concatSeries](#concatSeries) - -### Control Flow - -* [series](#series) -* [parallel](#parallel) -* [parallelLimit](#parallellimittasks-limit-callback) -* [whilst](#whilst) -* [doWhilst](#doWhilst) -* [until](#until) -* [doUntil](#doUntil) -* [forever](#forever) -* [waterfall](#waterfall) -* [compose](#compose) -* [applyEach](#applyEach) -* [applyEachSeries](#applyEachSeries) -* [queue](#queue) -* [cargo](#cargo) -* [auto](#auto) -* [iterator](#iterator) -* [apply](#apply) -* [nextTick](#nextTick) -* [times](#times) -* [timesSeries](#timesSeries) - -### Utils - -* [memoize](#memoize) -* [unmemoize](#unmemoize) -* [log](#log) -* [dir](#dir) -* [noConflict](#noConflict) - - -## Collections - -<a name="forEach" /> -<a name="each" /> -### each(arr, iterator, callback) - -Applies an iterator function to each item in an array, in parallel. -The iterator is called with an item from the list and a callback for when it -has finished. If the iterator passes an error to this callback, the main -callback for the each function is immediately called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err) which must be called once it has - completed. If no error has occured, the callback should be run without - arguments or with an explicit null argument. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - -```js -// assuming openFiles is an array of file names and saveFile is a function -// to save the modified contents of that file: - -async.each(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - ---------------------------------------- - -<a name="forEachSeries" /> -<a name="eachSeries" /> -### eachSeries(arr, iterator, callback) - -The same as each only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. This means the iterator functions will complete in order. - - ---------------------------------------- - -<a name="forEachLimit" /> -<a name="eachLimit" /> -### eachLimit(arr, limit, iterator, callback) - -The same as each only no more than "limit" iterators will be simultaneously -running at any time. - -Note that the items are not processed in batches, so there is no guarantee that - the first "limit" iterator functions will complete before any others are -started. - -__Arguments__ - -* arr - An array to iterate over. -* limit - The maximum number of iterators to run at any time. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err) which must be called once it has - completed. If no error has occured, the callback should be run without - arguments or with an explicit null argument. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - -```js -// Assume documents is an array of JSON objects and requestApi is a -// function that interacts with a rate-limited REST api. - -async.eachLimit(documents, 20, requestApi, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - ---------------------------------------- - -<a name="map" /> -### map(arr, iterator, callback) - -Produces a new array of values by mapping each value in the given array through -the iterator function. The iterator is called with an item from the array and a -callback for when it has finished processing. The callback takes 2 arguments, -an error and the transformed item from the array. If the iterator passes an -error to this callback, the main callback for the map function is immediately -called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order, however -the results array will be in the same order as the original array. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, transformed) which must be called once - it has completed with an error (which can be null) and a transformed item. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array of the - transformed items from the original array. - -__Example__ - -```js -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - ---------------------------------------- - -<a name="mapSeries" /> -### mapSeries(arr, iterator, callback) - -The same as map only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - - ---------------------------------------- - -<a name="mapLimit" /> -### mapLimit(arr, limit, iterator, callback) - -The same as map only no more than "limit" iterators will be simultaneously -running at any time. - -Note that the items are not processed in batches, so there is no guarantee that - the first "limit" iterator functions will complete before any others are -started. - -__Arguments__ - -* arr - An array to iterate over. -* limit - The maximum number of iterators to run at any time. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, transformed) which must be called once - it has completed with an error (which can be null) and a transformed item. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array of the - transformed items from the original array. - -__Example__ - -```js -async.mapLimit(['file1','file2','file3'], 1, fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - ---------------------------------------- - -<a name="filter" /> -### filter(arr, iterator, callback) - -__Alias:__ select - -Returns a new array of all the values which pass an async truth test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like fs.exists. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(results) - A callback which is called after all the iterator - functions have finished. - -__Example__ - -```js -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); -``` - ---------------------------------------- - -<a name="filterSeries" /> -### filterSeries(arr, iterator, callback) - -__alias:__ selectSeries - -The same as filter only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - ---------------------------------------- - -<a name="reject" /> -### reject(arr, iterator, callback) - -The opposite of filter. Removes values that pass an async truth test. - ---------------------------------------- - -<a name="rejectSeries" /> -### rejectSeries(arr, iterator, callback) - -The same as reject, only the iterator is applied to each item in the array -in series. - - ---------------------------------------- - -<a name="reduce" /> -### reduce(arr, memo, iterator, callback) - -__aliases:__ inject, foldl - -Reduces a list of values into a single value using an async iterator to return -each successive step. Memo is the initial state of the reduction. This -function only operates in series. For performance reasons, it may make sense to -split a call to this function into a parallel map, then use the normal -Array.prototype.reduce on the results. This function is for situations where -each step in the reduction needs to be async, if you can get the data before -reducing it then it's probably a good idea to do so. - -__Arguments__ - -* arr - An array to iterate over. -* memo - The initial state of the reduction. -* iterator(memo, item, callback) - A function applied to each item in the - array to produce the next step in the reduction. The iterator is passed a - callback(err, reduction) which accepts an optional error as its first - argument, and the state of the reduction as the second. If an error is - passed to the callback, the reduction is stopped and the main callback is - immediately called with the error. -* callback(err, result) - A callback which is called after all the iterator - functions have finished. Result is the reduced value. - -__Example__ - -```js -async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); -}, function(err, result){ - // result is now equal to the last value of memo, which is 6 -}); -``` - ---------------------------------------- - -<a name="reduceRight" /> -### reduceRight(arr, memo, iterator, callback) - -__Alias:__ foldr - -Same as reduce, only operates on the items in the array in reverse order. - - ---------------------------------------- - -<a name="detect" /> -### detect(arr, iterator, callback) - -Returns the first value in a list that passes an async truth test. The -iterator is applied in parallel, meaning the first iterator to return true will -fire the detect callback with that result. That means the result might not be -the first item in the original array (in terms of order) that passes the test. - -If order within the original array is important then look at detectSeries. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value undefined if none passed. - -__Example__ - -```js -async.detect(['file1','file2','file3'], fs.exists, function(result){ - // result now equals the first file in the list that exists -}); -``` - ---------------------------------------- - -<a name="detectSeries" /> -### detectSeries(arr, iterator, callback) - -The same as detect, only the iterator is applied to each item in the array -in series. This means the result is always the first in the original array (in -terms of array order) that passes the truth test. - - ---------------------------------------- - -<a name="sortBy" /> -### sortBy(arr, iterator, callback) - -Sorts a list by the results of running each value through an async iterator. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, sortValue) which must be called once it - has completed with an error (which can be null) and a value to use as the sort - criteria. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is the items from - the original array sorted by the values returned by the iterator calls. - -__Example__ - -```js -async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); -}, function(err, results){ - // results is now the original array of files sorted by - // modified date -}); -``` - ---------------------------------------- - -<a name="some" /> -### some(arr, iterator, callback) - -__Alias:__ any - -Returns true if at least one element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like fs.exists. Once any iterator -call returns true, the main callback is immediately called. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - either true or false depending on the values of the async tests. - -__Example__ - -```js -async.some(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then at least one of the files exists -}); -``` - ---------------------------------------- - -<a name="every" /> -### every(arr, iterator, callback) - -__Alias:__ all - -Returns true if every element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like fs.exists. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(result) - A callback which is called after all the iterator - functions have finished. Result will be either true or false depending on - the values of the async tests. - -__Example__ - -```js -async.every(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then every file exists -}); -``` - ---------------------------------------- - -<a name="concat" /> -### concat(arr, iterator, callback) - -Applies an iterator to each item in a list, concatenating the results. Returns the -concatenated list. The iterators are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of the arguments passed to the iterator function. - -__Arguments__ - -* arr - An array to iterate over -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, results) which must be called once it - has completed with an error (which can be null) and an array of results. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array containing - the concatenated results of the iterator function. - -__Example__ - -```js -async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories -}); -``` - ---------------------------------------- - -<a name="concatSeries" /> -### concatSeries(arr, iterator, callback) - -Same as async.concat, but executes in series instead of parallel. - - -## Control Flow - -<a name="series" /> -### series(tasks, [callback]) - -Run an array of functions in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run and the callback for the series is -immediately called with the value of the error. Once the tasks have completed, -the results are passed to the final callback as an array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.series. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback(err, result) it must call on completion with an error (which can - be null) and an optional result value. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - } -], -// optional callback -function(err, results){ - // results is now equal to ['one', 'two'] -}); - - -// an example using an object instead of an array -async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equal to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - -<a name="parallel" /> -### parallel(tasks, [callback]) - -Run an array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main callback is immediately called with the value of the error. -Once the tasks have completed, the results are passed to the final callback as an -array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.parallel. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback(err, result) it must call on completion with an error (which can - be null) and an optional result value. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.parallel([ - function(callback){ - setTimeout(function(){ - callback(null, 'one'); - }, 200); - }, - function(callback){ - setTimeout(function(){ - callback(null, 'two'); - }, 100); - } -], -// optional callback -function(err, results){ - // the results array will equal ['one','two'] even though - // the second function had a shorter timeout. -}); - - -// an example using an object instead of an array -async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equals to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - -<a name="parallel" /> -### parallelLimit(tasks, limit, [callback]) - -The same as parallel only the tasks are executed in parallel with a maximum of "limit" -tasks executing at any time. - -Note that the tasks are not executed in batches, so there is no guarantee that -the first "limit" tasks will complete before any others are started. - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback(err, result) it must call on completion with an error (which can - be null) and an optional result value. -* limit - The maximum number of tasks to run at any time. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - ---------------------------------------- - -<a name="whilst" /> -### whilst(test, fn, callback) - -Repeatedly call fn, while test returns true. Calls the callback when stopped, -or an error occurs. - -__Arguments__ - -* test() - synchronous truth test to perform before each execution of fn. -* fn(callback) - A function to call each time the test passes. The function is - passed a callback(err) which must be called once it has completed with an - optional error argument. -* callback(err) - A callback which is called after the test fails and repeated - execution of fn has stopped. - -__Example__ - -```js -var count = 0; - -async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } -); -``` - ---------------------------------------- - -<a name="doWhilst" /> -### doWhilst(fn, test, callback) - -The post check version of whilst. To reflect the difference in the order of operations `test` and `fn` arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. - ---------------------------------------- - -<a name="until" /> -### until(test, fn, callback) - -Repeatedly call fn, until test returns true. Calls the callback when stopped, -or an error occurs. - -The inverse of async.whilst. - ---------------------------------------- - -<a name="doUntil" /> -### doUntil(fn, test, callback) - -Like doWhilst except the test is inverted. Note the argument ordering differs from `until`. - ---------------------------------------- - -<a name="forever" /> -### forever(fn, callback) - -Calls the asynchronous function 'fn' repeatedly, in series, indefinitely. -If an error is passed to fn's callback then 'callback' is called with the -error, otherwise it will never be called. - ---------------------------------------- - -<a name="waterfall" /> -### waterfall(tasks, [callback]) - -Runs an array of functions in series, each passing their results to the next in -the array. However, if any of the functions pass an error to the callback, the -next function is not executed and the main callback is immediately called with -the error. - -__Arguments__ - -* tasks - An array of functions to run, each function is passed a - callback(err, result1, result2, ...) it must call on completion. The first - argument is an error (which can be null) and any further arguments will be - passed as arguments in order to the next task. -* callback(err, [results]) - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - -```js -async.waterfall([ - function(callback){ - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback){ - callback(null, 'three'); - }, - function(arg1, callback){ - // arg1 now equals 'three' - callback(null, 'done'); - } -], function (err, result) { - // result now equals 'done' -}); -``` - ---------------------------------------- -<a name="compose" /> -### compose(fn1, fn2...) - -Creates a function which is a composition of the passed asynchronous -functions. Each function consumes the return value of the function that -follows. Composing functions f(), g() and h() would produce the result of -f(g(h())), only this version uses callbacks to obtain the return values. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* functions... - the asynchronous functions to compose - - -__Example__ - -```js -function add1(n, callback) { - setTimeout(function () { - callback(null, n + 1); - }, 10); -} - -function mul3(n, callback) { - setTimeout(function () { - callback(null, n * 3); - }, 10); -} - -var add1mul3 = async.compose(mul3, add1); - -add1mul3(4, function (err, result) { - // result now equals 15 -}); -``` - ---------------------------------------- -<a name="applyEach" /> -### applyEach(fns, args..., callback) - -Applies the provided arguments to each function in the array, calling the -callback after all functions have completed. If you only provide the first -argument then it will return a function which lets you pass in the -arguments as if it were a single function call. - -__Arguments__ - -* fns - the asynchronous functions to all call with the same arguments -* args... - any number of separate arguments to pass to the function -* callback - the final argument should be the callback, called when all - functions have completed processing - - -__Example__ - -```js -async.applyEach([enableSearch, updateSchema], 'bucket', callback); - -// partial application example: -async.each( - buckets, - async.applyEach([enableSearch, updateSchema]), - callback -); -``` - ---------------------------------------- - -<a name="applyEachSeries" /> -### applyEachSeries(arr, iterator, callback) - -The same as applyEach only the functions are applied in series. - ---------------------------------------- - -<a name="queue" /> -### queue(worker, concurrency) - -Creates a queue object with the specified concurrency. Tasks added to the -queue will be processed in parallel (up to the concurrency limit). If all -workers are in progress, the task is queued until one is available. Once -a worker has completed a task, the task's callback is called. - -__Arguments__ - -* worker(task, callback) - An asynchronous function for processing a queued - task, which must call its callback(err) argument when finished, with an - optional error as an argument. -* concurrency - An integer for determining how many worker functions should be - run in parallel. - -__Queue objects__ - -The queue object returned by this function has the following properties and -methods: - -* length() - a function returning the number of items waiting to be processed. -* concurrency - an integer for determining how many worker functions should be - run in parallel. This property can be changed after a queue is created to - alter the concurrency on-the-fly. -* push(task, [callback]) - add a new task to the queue, the callback is called - once the worker has finished processing the task. - instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list. -* unshift(task, [callback]) - add a new task to the front of the queue. -* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued -* empty - a callback that is called when the last item from the queue is given to a worker -* drain - a callback that is called when the last item from the queue has returned from the worker - -__Example__ - -```js -// create a queue object with concurrency 2 - -var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); -}, 2); - - -// assign a callback -q.drain = function() { - console.log('all items have been processed'); -} - -// add some items to the queue - -q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); - -// add some items to the queue (batch-wise) - -q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing bar'); -}); - -// add some items to the front of the queue - -q.unshift({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -``` - ---------------------------------------- - -<a name="cargo" /> -### cargo(worker, [payload]) - -Creates a cargo object with the specified payload. Tasks added to the -cargo will be processed altogether (up to the payload limit). If the -worker is in progress, the task is queued until it is available. Once -the worker has completed some tasks, each callback of those tasks is called. - -__Arguments__ - -* worker(tasks, callback) - An asynchronous function for processing an array of - queued tasks, which must call its callback(err) argument when finished, with - an optional error as an argument. -* payload - An optional integer for determining how many tasks should be - processed per round; if omitted, the default is unlimited. - -__Cargo objects__ - -The cargo object returned by this function has the following properties and -methods: - -* length() - a function returning the number of items waiting to be processed. -* payload - an integer for determining how many tasks should be - process per round. This property can be changed after a cargo is created to - alter the payload on-the-fly. -* push(task, [callback]) - add a new task to the queue, the callback is called - once the worker has finished processing the task. - instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list. -* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued -* empty - a callback that is called when the last item from the queue is given to a worker -* drain - a callback that is called when the last item from the queue has returned from the worker - -__Example__ - -```js -// create a cargo object with payload 2 - -var cargo = async.cargo(function (tasks, callback) { - for(var i=0; i<tasks.length; i++){ - console.log('hello ' + tasks[i].name); - } - callback(); -}, 2); - - -// add some items - -cargo.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -cargo.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -cargo.push({name: 'baz'}, function (err) { - console.log('finished processing baz'); -}); -``` - ---------------------------------------- - -<a name="auto" /> -### auto(tasks, [callback]) - -Determines the best order for running functions based on their requirements. -Each function can optionally depend on other functions being completed first, -and each function is run as soon as its requirements are satisfied. If any of -the functions pass an error to their callback, that function will not complete -(so any other functions depending on it will not run) and the main callback -will be called immediately with the error. Functions also receive an object -containing the results of functions which have completed so far. - -Note, all functions are called with a results object as a second argument, -so it is unsafe to pass functions in the tasks object which cannot handle the -extra argument. For example, this snippet of code: - -```js -async.auto({ - readData: async.apply(fs.readFile, 'data.txt', 'utf-8') -}, callback); -``` - -will have the effect of calling readFile with the results object as the last -argument, which will fail: - -```js -fs.readFile('data.txt', 'utf-8', cb, {}); -``` - -Instead, wrap the call to readFile in a function which does not forward the -results object: - -```js -async.auto({ - readData: function(cb, results){ - fs.readFile('data.txt', 'utf-8', cb); - } -}, callback); -``` - -__Arguments__ - -* tasks - An object literal containing named functions or an array of - requirements, with the function itself the last item in the array. The key - used for each function or array is used when specifying requirements. The - function receives two arguments: (1) a callback(err, result) which must be - called when finished, passing an error (which can be null) and the result of - the function's execution, and (2) a results object, containing the results of - the previously executed functions. -* callback(err, results) - An optional callback which is called when all the - tasks have been completed. The callback will receive an error as an argument - if any tasks pass an error to their callback. Results will always be passed - but if an error occurred, no other tasks will be performed, and the results - object will only contain partial results. - - -__Example__ - -```js -async.auto({ - get_data: function(callback){ - // async code to get some data - }, - make_folder: function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - }, - write_file: ['get_data', 'make_folder', function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, filename); - }], - email_link: ['write_file', function(callback, results){ - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - }] -}); -``` - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - -```js -async.parallel([ - function(callback){ - // async code to get some data - }, - function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - } -], -function(err, results){ - async.series([ - function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - }, - function(callback){ - // once the file is written let's email a link to it... - } - ]); -}); -``` - -For a complicated series of async tasks using the auto function makes adding -new tasks much easier and makes the code more readable. - - ---------------------------------------- - -<a name="iterator" /> -### iterator(tasks) - -Creates an iterator function which calls the next function in the array, -returning a continuation to call the next one after that. It's also possible to -'peek' the next iterator by doing iterator.next(). - -This function is used internally by the async module but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* tasks - An array of functions to run. - -__Example__ - -```js -var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } -]); - -node> var iterator2 = iterator(); -'one' -node> var iterator3 = iterator2(); -'two' -node> iterator3(); -'three' -node> var nextfn = iterator2.next(); -node> nextfn(); -'three' -``` - ---------------------------------------- - -<a name="apply" /> -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied, a useful -shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - -```js -// using apply - -async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), -]); - - -// the same process without using apply - -async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - } -]); -``` - -It's possible to pass any number of additional arguments when calling the -continuation: - -```js -node> var fn = async.apply(sys.puts, 'one'); -node> fn('two', 'three'); -one -two -three -``` - ---------------------------------------- - -<a name="nextTick" /> -### nextTick(callback) - -Calls the callback on a later loop around the event loop. In node.js this just -calls process.nextTick, in the browser it falls back to setImmediate(callback) -if available, otherwise setTimeout(callback, 0), which means other higher priority -events may precede the execution of the callback. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* callback - The function to call on a later loop around the event loop. - -__Example__ - -```js -var call_order = []; -async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two'] -}); -call_order.push('one') -``` - -<a name="times" /> -### times(n, callback) - -Calls the callback n times and accumulates results in the same manner -you would use with async.map. - -__Arguments__ - -* n - The number of times to run the function. -* callback - The function to call n times. - -__Example__ - -```js -// Pretend this is some complicated async factory -var createUser = function(id, callback) { - callback(null, { - id: 'user' + id - }) -} -// generate 5 users -async.times(5, function(n, next){ - createUser(n, function(err, user) { - next(err, user) - }) -}, function(err, users) { - // we should now have 5 users -}); -``` - -<a name="timesSeries" /> -### timesSeries(n, callback) - -The same as times only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - - -## Utils - -<a name="memoize" /> -### memoize(fn, [hasher]) - -Caches the results of an async function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -The cache of results is exposed as the `memo` property of the function returned -by `memoize`. - -__Arguments__ - -* fn - the function you to proxy and cache results from. -* hasher - an optional function for generating a custom hash for storing - results, it has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - -```js -var slow_fn = function (name, callback) { - // do something - callback(null, result); -}; -var fn = async.memoize(slow_fn); - -// fn can now be used as if it were slow_fn -fn('some name', function () { - // callback -}); -``` - -<a name="unmemoize" /> -### unmemoize(fn) - -Undoes a memoized function, reverting it to the original, unmemoized -form. Comes handy in tests. - -__Arguments__ - -* fn - the memoized function - -<a name="log" /> -### log(function, arguments) - -Logs the result of an async function to the console. Only works in node.js or -in browsers that support console.log and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.log is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); -}; -``` -```js -node> async.log(hello, 'world'); -'hello world' -``` - ---------------------------------------- - -<a name="dir" /> -### dir(function, arguments) - -Logs the result of an async function to the console using console.dir to -display the properties of the resulting object. Only works in node.js or -in browsers that support console.dir and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.dir is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); -}; -``` -```js -node> async.dir(hello, 'world'); -{hello: 'world'} -``` - ---------------------------------------- - -<a name="noConflict" /> -### noConflict() - -Changes the value of async back to its original value, returning a reference to the -async object. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/component.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/component.json deleted file mode 100644 index bbb01154..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/component.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "async", - "repo": "caolan/async", - "description": "Higher-order functions and common patterns for asynchronous code", - "version": "0.1.23", - "keywords": [], - "dependencies": {}, - "development": {}, - "main": "lib/async.js", - "scripts": [ "lib/async.js" ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js deleted file mode 100755 index 1eebb153..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js +++ /dev/null @@ -1,958 +0,0 @@ -/*global setImmediate: false, setTimeout: false, console: false */ -(function () { - - var async = {}; - - // global on the server, window in the browser - var root, previous_async; - - root = this; - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - var called = false; - return function() { - if (called) throw new Error("Callback was already called."); - called = true; - fn.apply(root, arguments); - } - } - - //// cross-browser compatiblity functions //// - - var _each = function (arr, iterator) { - if (arr.forEach) { - return arr.forEach(iterator); - } - for (var i = 0; i < arr.length; i += 1) { - iterator(arr[i], i, arr); - } - }; - - var _map = function (arr, iterator) { - if (arr.map) { - return arr.map(iterator); - } - var results = []; - _each(arr, function (x, i, a) { - results.push(iterator(x, i, a)); - }); - return results; - }; - - var _reduce = function (arr, iterator, memo) { - if (arr.reduce) { - return arr.reduce(iterator, memo); - } - _each(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - }; - - var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - if (typeof process === 'undefined' || !(process.nextTick)) { - if (typeof setImmediate === 'function') { - async.nextTick = function (fn) { - // not a direct alias for IE10 compatibility - setImmediate(fn); - }; - async.setImmediate = async.nextTick; - } - else { - async.nextTick = function (fn) { - setTimeout(fn, 0); - }; - async.setImmediate = async.nextTick; - } - } - else { - async.nextTick = process.nextTick; - if (typeof setImmediate !== 'undefined') { - async.setImmediate = function (fn) { - // not a direct alias for IE10 compatibility - setImmediate(fn); - }; - } - else { - async.setImmediate = async.nextTick; - } - } - - async.each = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - _each(arr, function (x) { - iterator(x, only_once(function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed >= arr.length) { - callback(null); - } - } - })); - }); - }; - async.forEach = async.each; - - async.eachSeries = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - var iterate = function () { - iterator(arr[completed], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed >= arr.length) { - callback(null); - } - else { - iterate(); - } - } - }); - }; - iterate(); - }; - async.forEachSeries = async.eachSeries; - - async.eachLimit = function (arr, limit, iterator, callback) { - var fn = _eachLimit(limit); - fn.apply(null, [arr, iterator, callback]); - }; - async.forEachLimit = async.eachLimit; - - var _eachLimit = function (limit) { - - return function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length || limit <= 0) { - return callback(); - } - var completed = 0; - var started = 0; - var running = 0; - - (function replenish () { - if (completed >= arr.length) { - return callback(); - } - - while (running < limit && started < arr.length) { - started += 1; - running += 1; - iterator(arr[started - 1], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - running -= 1; - if (completed >= arr.length) { - callback(); - } - else { - replenish(); - } - } - }); - } - })(); - }; - }; - - - var doParallel = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.each].concat(args)); - }; - }; - var doParallelLimit = function(limit, fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [_eachLimit(limit)].concat(args)); - }; - }; - var doSeries = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.eachSeries].concat(args)); - }; - }; - - - var _asyncMap = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (err, v) { - results[x.index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - }; - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = function (arr, limit, iterator, callback) { - return _mapLimit(limit)(arr, iterator, callback); - }; - - var _mapLimit = function(limit) { - return doParallelLimit(limit, _asyncMap); - }; - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.reduce = function (arr, memo, iterator, callback) { - async.eachSeries(arr, function (x, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - // inject alias - async.inject = async.reduce; - // foldl alias - async.foldl = async.reduce; - - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, function (x) { - return x; - }).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - // foldr alias - async.foldr = async.reduceRight; - - var _filter = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.filter = doParallel(_filter); - async.filterSeries = doSeries(_filter); - // select alias - async.select = async.filter; - async.selectSeries = async.filterSeries; - - var _reject = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (!v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.reject = doParallel(_reject); - async.rejectSeries = doSeries(_reject); - - var _detect = function (eachfn, arr, iterator, main_callback) { - eachfn(arr, function (x, callback) { - iterator(x, function (result) { - if (result) { - main_callback(x); - main_callback = function () {}; - } - else { - callback(); - } - }); - }, function (err) { - main_callback(); - }); - }; - async.detect = doParallel(_detect); - async.detectSeries = doSeries(_detect); - - async.some = function (arr, iterator, main_callback) { - async.each(arr, function (x, callback) { - iterator(x, function (v) { - if (v) { - main_callback(true); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(false); - }); - }; - // any alias - async.any = async.some; - - async.every = function (arr, iterator, main_callback) { - async.each(arr, function (x, callback) { - iterator(x, function (v) { - if (!v) { - main_callback(false); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(true); - }); - }; - // all alias - async.all = async.every; - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - var fn = function (left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }; - callback(null, _map(results.sort(fn), function (x) { - return x.value; - })); - } - }); - }; - - async.auto = function (tasks, callback) { - callback = callback || function () {}; - var keys = _keys(tasks); - if (!keys.length) { - return callback(null); - } - - var results = {}; - - var listeners = []; - var addListener = function (fn) { - listeners.unshift(fn); - }; - var removeListener = function (fn) { - for (var i = 0; i < listeners.length; i += 1) { - if (listeners[i] === fn) { - listeners.splice(i, 1); - return; - } - } - }; - var taskComplete = function () { - _each(listeners.slice(0), function (fn) { - fn(); - }); - }; - - addListener(function () { - if (_keys(results).length === keys.length) { - callback(null, results); - callback = function () {}; - } - }); - - _each(keys, function (k) { - var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k]; - var taskCallback = function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _each(_keys(results), function(rkey) { - safeResults[rkey] = results[rkey]; - }); - safeResults[k] = args; - callback(err, safeResults); - // stop subsequent errors hitting callback multiple times - callback = function () {}; - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }; - var requires = task.slice(0, Math.abs(task.length - 1)) || []; - var ready = function () { - return _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - }; - if (ready()) { - task[task.length - 1](taskCallback, results); - } - else { - var listener = function () { - if (ready()) { - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - }; - addListener(listener); - } - }); - }; - - async.waterfall = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor !== Array) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - var wrapIterator = function (iterator) { - return function (err) { - if (err) { - callback.apply(null, arguments); - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - async.setImmediate(function () { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(async.iterator(tasks))(); - }; - - var _parallel = function(eachfn, tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - eachfn.map(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - eachfn.each(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.parallel = function (tasks, callback) { - _parallel({ map: async.map, each: async.each }, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback); - }; - - async.series = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.mapSeries(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - async.eachSeries(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.iterator = function (tasks) { - var makeCallback = function (index) { - var fn = function () { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - }; - return makeCallback(0); - }; - - async.apply = function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return fn.apply( - null, args.concat(Array.prototype.slice.call(arguments)) - ); - }; - }; - - var _concat = function (eachfn, arr, fn, callback) { - var r = []; - eachfn(arr, function (x, cb) { - fn(x, function (err, y) { - r = r.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, r); - }); - }; - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - if (test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.whilst(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.doWhilst = function (iterator, test, callback) { - iterator(function (err) { - if (err) { - return callback(err); - } - if (test()) { - async.doWhilst(iterator, test, callback); - } - else { - callback(); - } - }); - }; - - async.until = function (test, iterator, callback) { - if (!test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.until(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.doUntil = function (iterator, test, callback) { - iterator(function (err) { - if (err) { - return callback(err); - } - if (!test()) { - async.doUntil(iterator, test, callback); - } - else { - callback(); - } - }); - }; - - async.queue = function (worker, concurrency) { - if (concurrency === undefined) { - concurrency = 1; - } - function _insert(q, data, pos, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _each(data, function(task) { - var item = { - data: task, - callback: typeof callback === 'function' ? callback : null - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.saturated && q.tasks.length === concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - var workers = 0; - var q = { - tasks: [], - concurrency: concurrency, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - if (workers < q.concurrency && q.tasks.length) { - var task = q.tasks.shift(); - if (q.empty && q.tasks.length === 0) { - q.empty(); - } - workers += 1; - var next = function () { - workers -= 1; - if (task.callback) { - task.callback.apply(task, arguments); - } - if (q.drain && q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - var cb = only_once(next); - worker(task.data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - } - }; - return q; - }; - - async.cargo = function (worker, payload) { - var working = false, - tasks = []; - - var cargo = { - tasks: tasks, - payload: payload, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _each(data, function(task) { - tasks.push({ - data: task, - callback: typeof callback === 'function' ? callback : null - }); - if (cargo.saturated && tasks.length === payload) { - cargo.saturated(); - } - }); - async.setImmediate(cargo.process); - }, - process: function process() { - if (working) return; - if (tasks.length === 0) { - if(cargo.drain) cargo.drain(); - return; - } - - var ts = typeof payload === 'number' - ? tasks.splice(0, payload) - : tasks.splice(0); - - var ds = _map(ts, function (task) { - return task.data; - }); - - if(cargo.empty) cargo.empty(); - working = true; - worker(ds, function () { - working = false; - - var args = arguments; - _each(ts, function (data) { - if (data.callback) { - data.callback.apply(null, args); - } - }); - - process(); - }); - }, - length: function () { - return tasks.length; - }, - running: function () { - return working; - } - }; - return cargo; - }; - - var _console_fn = function (name) { - return function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - fn.apply(null, args.concat([function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (typeof console !== 'undefined') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _each(args, function (x) { - console[name](x); - }); - } - } - }])); - }; - }; - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - hasher = hasher || function (x) { - return x; - }; - var memoized = function () { - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - var key = hasher.apply(null, args); - if (key in memo) { - callback.apply(null, memo[key]); - } - else if (key in queues) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([function () { - memo[key] = arguments; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, arguments); - } - }])); - } - }; - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - async.times = function (count, iterator, callback) { - var counter = []; - for (var i = 0; i < count; i++) { - counter.push(i); - } - return async.map(counter, iterator, callback); - }; - - async.timesSeries = function (count, iterator, callback) { - var counter = []; - for (var i = 0; i < count; i++) { - counter.push(i); - } - return async.mapSeries(counter, iterator, callback); - }; - - async.compose = function (/* functions... */) { - var fns = Array.prototype.reverse.call(arguments); - return function () { - var that = this; - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([function () { - var err = arguments[0]; - var nextargs = Array.prototype.slice.call(arguments, 1); - cb(err, nextargs); - }])) - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }; - }; - - var _applyEach = function (eachfn, fns /*args...*/) { - var go = function () { - var that = this; - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - return eachfn(fns, function (fn, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }; - if (arguments.length > 2) { - var args = Array.prototype.slice.call(arguments, 2); - return go.apply(this, args); - } - else { - return go; - } - }; - async.applyEach = doParallel(_applyEach); - async.applyEachSeries = doSeries(_applyEach); - - async.forever = function (fn, callback) { - function next(err) { - if (err) { - if (callback) { - return callback(err); - } - throw err; - } - fn(next); - } - next(); - }; - - // AMD / RequireJS - if (typeof define !== 'undefined' && define.amd) { - define([], function () { - return async; - }); - } - // Node.js - else if (typeof module !== 'undefined' && module.exports) { - module.exports = async; - } - // included directly via <script> tag - else { - root.async = async; - } - -}()); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/package.json deleted file mode 100644 index c586b717..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/async/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "async", - "description": "Higher-order functions and common patterns for asynchronous code", - "main": "./lib/async", - "author": { - "name": "Caolan McMahon" - }, - "version": "0.2.10", - "repository": { - "type": "git", - "url": "https://github.com/caolan/async.git" - }, - "bugs": { - "url": "https://github.com/caolan/async/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/caolan/async/raw/master/LICENSE" - } - ], - "devDependencies": { - "nodeunit": ">0.0.0", - "uglify-js": "1.2.x", - "nodelint": ">0.0.0" - }, - "jam": { - "main": "lib/async.js", - "include": [ - "lib/async.js", - "README.md", - "LICENSE" - ] - }, - "scripts": { - "test": "nodeunit test/test-async.js" - }, - "readme": "# Async.js\n\nAsync is a utility module which provides straight-forward, powerful functions\nfor working with asynchronous JavaScript. Although originally designed for\nuse with [node.js](http://nodejs.org), it can also be used directly in the\nbrowser. Also supports [component](https://github.com/component/component).\n\nAsync provides around 20 functions that include the usual 'functional'\nsuspects (map, reduce, filter, each…) as well as some common patterns\nfor asynchronous control flow (parallel, series, waterfall…). All these\nfunctions assume you follow the node.js convention of providing a single\ncallback as the last argument of your async function.\n\n\n## Quick Examples\n\n```javascript\nasync.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n\nasync.filter(['file1','file2','file3'], fs.exists, function(results){\n // results now equals an array of the existing files\n});\n\nasync.parallel([\n function(){ ... },\n function(){ ... }\n], callback);\n\nasync.series([\n function(){ ... },\n function(){ ... }\n]);\n```\n\nThere are many more functions available so take a look at the docs below for a\nfull list. This module aims to be comprehensive, so if you feel anything is\nmissing please create a GitHub issue for it.\n\n## Common Pitfalls\n\n### Binding a context to an iterator\n\nThis section is really about bind, not about async. If you are wondering how to\nmake async execute your iterators in a given context, or are confused as to why\na method of another library isn't working as an iterator, study this example:\n\n```js\n// Here is a simple object with an (unnecessarily roundabout) squaring method\nvar AsyncSquaringLibrary = {\n squareExponent: 2,\n square: function(number, callback){ \n var result = Math.pow(number, this.squareExponent);\n setTimeout(function(){\n callback(null, result);\n }, 200);\n }\n};\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){\n // result is [NaN, NaN, NaN]\n // This fails because the `this.squareExponent` expression in the square\n // function is not evaluated in the context of AsyncSquaringLibrary, and is\n // therefore undefined.\n});\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){\n // result is [1, 4, 9]\n // With the help of bind we can attach a context to the iterator before\n // passing it to async. Now the square function will be executed in its \n // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent`\n // will be as expected.\n});\n```\n\n## Download\n\nThe source is available for download from\n[GitHub](http://github.com/caolan/async).\nAlternatively, you can install using Node Package Manager (npm):\n\n npm install async\n\n__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed\n\n## In the Browser\n\nSo far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage:\n\n```html\n<script type=\"text/javascript\" src=\"async.js\"></script>\n<script type=\"text/javascript\">\n\n async.map(data, asyncProcess, function(err, results){\n alert(results);\n });\n\n</script>\n```\n\n## Documentation\n\n### Collections\n\n* [each](#each)\n* [eachSeries](#eachSeries)\n* [eachLimit](#eachLimit)\n* [map](#map)\n* [mapSeries](#mapSeries)\n* [mapLimit](#mapLimit)\n* [filter](#filter)\n* [filterSeries](#filterSeries)\n* [reject](#reject)\n* [rejectSeries](#rejectSeries)\n* [reduce](#reduce)\n* [reduceRight](#reduceRight)\n* [detect](#detect)\n* [detectSeries](#detectSeries)\n* [sortBy](#sortBy)\n* [some](#some)\n* [every](#every)\n* [concat](#concat)\n* [concatSeries](#concatSeries)\n\n### Control Flow\n\n* [series](#series)\n* [parallel](#parallel)\n* [parallelLimit](#parallellimittasks-limit-callback)\n* [whilst](#whilst)\n* [doWhilst](#doWhilst)\n* [until](#until)\n* [doUntil](#doUntil)\n* [forever](#forever)\n* [waterfall](#waterfall)\n* [compose](#compose)\n* [applyEach](#applyEach)\n* [applyEachSeries](#applyEachSeries)\n* [queue](#queue)\n* [cargo](#cargo)\n* [auto](#auto)\n* [iterator](#iterator)\n* [apply](#apply)\n* [nextTick](#nextTick)\n* [times](#times)\n* [timesSeries](#timesSeries)\n\n### Utils\n\n* [memoize](#memoize)\n* [unmemoize](#unmemoize)\n* [log](#log)\n* [dir](#dir)\n* [noConflict](#noConflict)\n\n\n## Collections\n\n<a name=\"forEach\" />\n<a name=\"each\" />\n### each(arr, iterator, callback)\n\nApplies an iterator function to each item in an array, in parallel.\nThe iterator is called with an item from the list and a callback for when it\nhas finished. If the iterator passes an error to this callback, the main\ncallback for the each function is immediately called with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// assuming openFiles is an array of file names and saveFile is a function\n// to save the modified contents of that file:\n\nasync.each(openFiles, saveFile, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name=\"forEachSeries\" />\n<a name=\"eachSeries\" />\n### eachSeries(arr, iterator, callback)\n\nThe same as each only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. This means the iterator functions will complete in order.\n\n\n---------------------------------------\n\n<a name=\"forEachLimit\" />\n<a name=\"eachLimit\" />\n### eachLimit(arr, limit, iterator, callback)\n\nThe same as each only no more than \"limit\" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first \"limit\" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// Assume documents is an array of JSON objects and requestApi is a\n// function that interacts with a rate-limited REST api.\n\nasync.eachLimit(documents, 20, requestApi, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name=\"map\" />\n### map(arr, iterator, callback)\n\nProduces a new array of values by mapping each value in the given array through\nthe iterator function. The iterator is called with an item from the array and a\ncallback for when it has finished processing. The callback takes 2 arguments, \nan error and the transformed item from the array. If the iterator passes an\nerror to this callback, the main callback for the map function is immediately\ncalled with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order, however\nthe results array will be in the same order as the original array.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name=\"mapSeries\" />\n### mapSeries(arr, iterator, callback)\n\nThe same as map only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n---------------------------------------\n\n<a name=\"mapLimit\" />\n### mapLimit(arr, limit, iterator, callback)\n\nThe same as map only no more than \"limit\" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first \"limit\" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.mapLimit(['file1','file2','file3'], 1, fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name=\"filter\" />\n### filter(arr, iterator, callback)\n\n__Alias:__ select\n\nReturns a new array of all the values which pass an async truth test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists. This operation is\nperformed in parallel, but the results array will be in the same order as the\noriginal.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(results) - A callback which is called after all the iterator\n functions have finished.\n\n__Example__\n\n```js\nasync.filter(['file1','file2','file3'], fs.exists, function(results){\n // results now equals an array of the existing files\n});\n```\n\n---------------------------------------\n\n<a name=\"filterSeries\" />\n### filterSeries(arr, iterator, callback)\n\n__alias:__ selectSeries\n\nThe same as filter only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n---------------------------------------\n\n<a name=\"reject\" />\n### reject(arr, iterator, callback)\n\nThe opposite of filter. Removes values that pass an async truth test.\n\n---------------------------------------\n\n<a name=\"rejectSeries\" />\n### rejectSeries(arr, iterator, callback)\n\nThe same as reject, only the iterator is applied to each item in the array\nin series.\n\n\n---------------------------------------\n\n<a name=\"reduce\" />\n### reduce(arr, memo, iterator, callback)\n\n__aliases:__ inject, foldl\n\nReduces a list of values into a single value using an async iterator to return\neach successive step. Memo is the initial state of the reduction. This\nfunction only operates in series. For performance reasons, it may make sense to\nsplit a call to this function into a parallel map, then use the normal\nArray.prototype.reduce on the results. This function is for situations where\neach step in the reduction needs to be async, if you can get the data before\nreducing it then it's probably a good idea to do so.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* memo - The initial state of the reduction.\n* iterator(memo, item, callback) - A function applied to each item in the\n array to produce the next step in the reduction. The iterator is passed a\n callback(err, reduction) which accepts an optional error as its first \n argument, and the state of the reduction as the second. If an error is \n passed to the callback, the reduction is stopped and the main callback is \n immediately called with the error.\n* callback(err, result) - A callback which is called after all the iterator\n functions have finished. Result is the reduced value.\n\n__Example__\n\n```js\nasync.reduce([1,2,3], 0, function(memo, item, callback){\n // pointless async:\n process.nextTick(function(){\n callback(null, memo + item)\n });\n}, function(err, result){\n // result is now equal to the last value of memo, which is 6\n});\n```\n\n---------------------------------------\n\n<a name=\"reduceRight\" />\n### reduceRight(arr, memo, iterator, callback)\n\n__Alias:__ foldr\n\nSame as reduce, only operates on the items in the array in reverse order.\n\n\n---------------------------------------\n\n<a name=\"detect\" />\n### detect(arr, iterator, callback)\n\nReturns the first value in a list that passes an async truth test. The\niterator is applied in parallel, meaning the first iterator to return true will\nfire the detect callback with that result. That means the result might not be\nthe first item in the original array (in terms of order) that passes the test.\n\nIf order within the original array is important then look at detectSeries.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n the first item in the array that passes the truth test (iterator) or the\n value undefined if none passed.\n\n__Example__\n\n```js\nasync.detect(['file1','file2','file3'], fs.exists, function(result){\n // result now equals the first file in the list that exists\n});\n```\n\n---------------------------------------\n\n<a name=\"detectSeries\" />\n### detectSeries(arr, iterator, callback)\n\nThe same as detect, only the iterator is applied to each item in the array\nin series. This means the result is always the first in the original array (in\nterms of array order) that passes the truth test.\n\n\n---------------------------------------\n\n<a name=\"sortBy\" />\n### sortBy(arr, iterator, callback)\n\nSorts a list by the results of running each value through an async iterator.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, sortValue) which must be called once it\n has completed with an error (which can be null) and a value to use as the sort\n criteria.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is the items from\n the original array sorted by the values returned by the iterator calls.\n\n__Example__\n\n```js\nasync.sortBy(['file1','file2','file3'], function(file, callback){\n fs.stat(file, function(err, stats){\n callback(err, stats.mtime);\n });\n}, function(err, results){\n // results is now the original array of files sorted by\n // modified date\n});\n```\n\n---------------------------------------\n\n<a name=\"some\" />\n### some(arr, iterator, callback)\n\n__Alias:__ any\n\nReturns true if at least one element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists. Once any iterator\ncall returns true, the main callback is immediately called.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n either true or false depending on the values of the async tests.\n\n__Example__\n\n```js\nasync.some(['file1','file2','file3'], fs.exists, function(result){\n // if result is true then at least one of the files exists\n});\n```\n\n---------------------------------------\n\n<a name=\"every\" />\n### every(arr, iterator, callback)\n\n__Alias:__ all\n\nReturns true if every element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called after all the iterator\n functions have finished. Result will be either true or false depending on\n the values of the async tests.\n\n__Example__\n\n```js\nasync.every(['file1','file2','file3'], fs.exists, function(result){\n // if result is true then every file exists\n});\n```\n\n---------------------------------------\n\n<a name=\"concat\" />\n### concat(arr, iterator, callback)\n\nApplies an iterator to each item in a list, concatenating the results. Returns the\nconcatenated list. The iterators are called in parallel, and the results are\nconcatenated as they return. There is no guarantee that the results array will\nbe returned in the original order of the arguments passed to the iterator function.\n\n__Arguments__\n\n* arr - An array to iterate over\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, results) which must be called once it \n has completed with an error (which can be null) and an array of results.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array containing\n the concatenated results of the iterator function.\n\n__Example__\n\n```js\nasync.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){\n // files is now a list of filenames that exist in the 3 directories\n});\n```\n\n---------------------------------------\n\n<a name=\"concatSeries\" />\n### concatSeries(arr, iterator, callback)\n\nSame as async.concat, but executes in series instead of parallel.\n\n\n## Control Flow\n\n<a name=\"series\" />\n### series(tasks, [callback])\n\nRun an array of functions in series, each one running once the previous\nfunction has completed. If any functions in the series pass an error to its\ncallback, no more functions are run and the callback for the series is\nimmediately called with the value of the error. Once the tasks have completed,\nthe results are passed to the final callback as an array.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.series.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed\n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.series([\n function(callback){\n // do some stuff ...\n callback(null, 'one');\n },\n function(callback){\n // do some more stuff ...\n callback(null, 'two');\n }\n],\n// optional callback\nfunction(err, results){\n // results is now equal to ['one', 'two']\n});\n\n\n// an example using an object instead of an array\nasync.series({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equal to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name=\"parallel\" />\n### parallel(tasks, [callback])\n\nRun an array of functions in parallel, without waiting until the previous\nfunction has completed. If any of the functions pass an error to its\ncallback, the main callback is immediately called with the value of the error.\nOnce the tasks have completed, the results are passed to the final callback as an\narray.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.parallel.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.parallel([\n function(callback){\n setTimeout(function(){\n callback(null, 'one');\n }, 200);\n },\n function(callback){\n setTimeout(function(){\n callback(null, 'two');\n }, 100);\n }\n],\n// optional callback\nfunction(err, results){\n // the results array will equal ['one','two'] even though\n // the second function had a shorter timeout.\n});\n\n\n// an example using an object instead of an array\nasync.parallel({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equals to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name=\"parallel\" />\n### parallelLimit(tasks, limit, [callback])\n\nThe same as parallel only the tasks are executed in parallel with a maximum of \"limit\" \ntasks executing at any time.\n\nNote that the tasks are not executed in batches, so there is no guarantee that \nthe first \"limit\" tasks will complete before any others are started.\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* limit - The maximum number of tasks to run at any time.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n---------------------------------------\n\n<a name=\"whilst\" />\n### whilst(test, fn, callback)\n\nRepeatedly call fn, while test returns true. Calls the callback when stopped,\nor an error occurs.\n\n__Arguments__\n\n* test() - synchronous truth test to perform before each execution of fn.\n* fn(callback) - A function to call each time the test passes. The function is\n passed a callback(err) which must be called once it has completed with an \n optional error argument.\n* callback(err) - A callback which is called after the test fails and repeated\n execution of fn has stopped.\n\n__Example__\n\n```js\nvar count = 0;\n\nasync.whilst(\n function () { return count < 5; },\n function (callback) {\n count++;\n setTimeout(callback, 1000);\n },\n function (err) {\n // 5 seconds have passed\n }\n);\n```\n\n---------------------------------------\n\n<a name=\"doWhilst\" />\n### doWhilst(fn, test, callback)\n\nThe post check version of whilst. To reflect the difference in the order of operations `test` and `fn` arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n\n---------------------------------------\n\n<a name=\"until\" />\n### until(test, fn, callback)\n\nRepeatedly call fn, until test returns true. Calls the callback when stopped,\nor an error occurs.\n\nThe inverse of async.whilst.\n\n---------------------------------------\n\n<a name=\"doUntil\" />\n### doUntil(fn, test, callback)\n\nLike doWhilst except the test is inverted. Note the argument ordering differs from `until`.\n\n---------------------------------------\n\n<a name=\"forever\" />\n### forever(fn, callback)\n\nCalls the asynchronous function 'fn' repeatedly, in series, indefinitely.\nIf an error is passed to fn's callback then 'callback' is called with the\nerror, otherwise it will never be called.\n\n---------------------------------------\n\n<a name=\"waterfall\" />\n### waterfall(tasks, [callback])\n\nRuns an array of functions in series, each passing their results to the next in\nthe array. However, if any of the functions pass an error to the callback, the\nnext function is not executed and the main callback is immediately called with\nthe error.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a \n callback(err, result1, result2, ...) it must call on completion. The first\n argument is an error (which can be null) and any further arguments will be \n passed as arguments in order to the next task.\n* callback(err, [results]) - An optional callback to run once all the functions\n have completed. This will be passed the results of the last task's callback.\n\n\n\n__Example__\n\n```js\nasync.waterfall([\n function(callback){\n callback(null, 'one', 'two');\n },\n function(arg1, arg2, callback){\n callback(null, 'three');\n },\n function(arg1, callback){\n // arg1 now equals 'three'\n callback(null, 'done');\n }\n], function (err, result) {\n // result now equals 'done' \n});\n```\n\n---------------------------------------\n<a name=\"compose\" />\n### compose(fn1, fn2...)\n\nCreates a function which is a composition of the passed asynchronous\nfunctions. Each function consumes the return value of the function that\nfollows. Composing functions f(), g() and h() would produce the result of\nf(g(h())), only this version uses callbacks to obtain the return values.\n\nEach function is executed with the `this` binding of the composed function.\n\n__Arguments__\n\n* functions... - the asynchronous functions to compose\n\n\n__Example__\n\n```js\nfunction add1(n, callback) {\n setTimeout(function () {\n callback(null, n + 1);\n }, 10);\n}\n\nfunction mul3(n, callback) {\n setTimeout(function () {\n callback(null, n * 3);\n }, 10);\n}\n\nvar add1mul3 = async.compose(mul3, add1);\n\nadd1mul3(4, function (err, result) {\n // result now equals 15\n});\n```\n\n---------------------------------------\n<a name=\"applyEach\" />\n### applyEach(fns, args..., callback)\n\nApplies the provided arguments to each function in the array, calling the\ncallback after all functions have completed. If you only provide the first\nargument then it will return a function which lets you pass in the\narguments as if it were a single function call.\n\n__Arguments__\n\n* fns - the asynchronous functions to all call with the same arguments\n* args... - any number of separate arguments to pass to the function\n* callback - the final argument should be the callback, called when all\n functions have completed processing\n\n\n__Example__\n\n```js\nasync.applyEach([enableSearch, updateSchema], 'bucket', callback);\n\n// partial application example:\nasync.each(\n buckets,\n async.applyEach([enableSearch, updateSchema]),\n callback\n);\n```\n\n---------------------------------------\n\n<a name=\"applyEachSeries\" />\n### applyEachSeries(arr, iterator, callback)\n\nThe same as applyEach only the functions are applied in series.\n\n---------------------------------------\n\n<a name=\"queue\" />\n### queue(worker, concurrency)\n\nCreates a queue object with the specified concurrency. Tasks added to the\nqueue will be processed in parallel (up to the concurrency limit). If all\nworkers are in progress, the task is queued until one is available. Once\na worker has completed a task, the task's callback is called.\n\n__Arguments__\n\n* worker(task, callback) - An asynchronous function for processing a queued\n task, which must call its callback(err) argument when finished, with an \n optional error as an argument.\n* concurrency - An integer for determining how many worker functions should be\n run in parallel.\n\n__Queue objects__\n\nThe queue object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* concurrency - an integer for determining how many worker functions should be\n run in parallel. This property can be changed after a queue is created to\n alter the concurrency on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* unshift(task, [callback]) - add a new task to the front of the queue.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a queue object with concurrency 2\n\nvar q = async.queue(function (task, callback) {\n console.log('hello ' + task.name);\n callback();\n}, 2);\n\n\n// assign a callback\nq.drain = function() {\n console.log('all items have been processed');\n}\n\n// add some items to the queue\n\nq.push({name: 'foo'}, function (err) {\n console.log('finished processing foo');\n});\nq.push({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n});\n\n// add some items to the queue (batch-wise)\n\nq.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) {\n console.log('finished processing bar');\n});\n\n// add some items to the front of the queue\n\nq.unshift({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n});\n```\n\n---------------------------------------\n\n<a name=\"cargo\" />\n### cargo(worker, [payload])\n\nCreates a cargo object with the specified payload. Tasks added to the\ncargo will be processed altogether (up to the payload limit). If the\nworker is in progress, the task is queued until it is available. Once\nthe worker has completed some tasks, each callback of those tasks is called.\n\n__Arguments__\n\n* worker(tasks, callback) - An asynchronous function for processing an array of\n queued tasks, which must call its callback(err) argument when finished, with \n an optional error as an argument.\n* payload - An optional integer for determining how many tasks should be\n processed per round; if omitted, the default is unlimited.\n\n__Cargo objects__\n\nThe cargo object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* payload - an integer for determining how many tasks should be\n process per round. This property can be changed after a cargo is created to\n alter the payload on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a cargo object with payload 2\n\nvar cargo = async.cargo(function (tasks, callback) {\n for(var i=0; i<tasks.length; i++){\n console.log('hello ' + tasks[i].name);\n }\n callback();\n}, 2);\n\n\n// add some items\n\ncargo.push({name: 'foo'}, function (err) {\n console.log('finished processing foo');\n});\ncargo.push({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n});\ncargo.push({name: 'baz'}, function (err) {\n console.log('finished processing baz');\n});\n```\n\n---------------------------------------\n\n<a name=\"auto\" />\n### auto(tasks, [callback])\n\nDetermines the best order for running functions based on their requirements.\nEach function can optionally depend on other functions being completed first,\nand each function is run as soon as its requirements are satisfied. If any of\nthe functions pass an error to their callback, that function will not complete\n(so any other functions depending on it will not run) and the main callback\nwill be called immediately with the error. Functions also receive an object\ncontaining the results of functions which have completed so far.\n\nNote, all functions are called with a results object as a second argument, \nso it is unsafe to pass functions in the tasks object which cannot handle the\nextra argument. For example, this snippet of code:\n\n```js\nasync.auto({\n readData: async.apply(fs.readFile, 'data.txt', 'utf-8')\n}, callback);\n```\n\nwill have the effect of calling readFile with the results object as the last\nargument, which will fail:\n\n```js\nfs.readFile('data.txt', 'utf-8', cb, {});\n```\n\nInstead, wrap the call to readFile in a function which does not forward the \nresults object:\n\n```js\nasync.auto({\n readData: function(cb, results){\n fs.readFile('data.txt', 'utf-8', cb);\n }\n}, callback);\n```\n\n__Arguments__\n\n* tasks - An object literal containing named functions or an array of\n requirements, with the function itself the last item in the array. The key\n used for each function or array is used when specifying requirements. The \n function receives two arguments: (1) a callback(err, result) which must be \n called when finished, passing an error (which can be null) and the result of \n the function's execution, and (2) a results object, containing the results of\n the previously executed functions.\n* callback(err, results) - An optional callback which is called when all the\n tasks have been completed. The callback will receive an error as an argument\n if any tasks pass an error to their callback. Results will always be passed\n\tbut if an error occurred, no other tasks will be performed, and the results\n\tobject will only contain partial results.\n \n\n__Example__\n\n```js\nasync.auto({\n get_data: function(callback){\n // async code to get some data\n },\n make_folder: function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n },\n write_file: ['get_data', 'make_folder', function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n callback(null, filename);\n }],\n email_link: ['write_file', function(callback, results){\n // once the file is written let's email a link to it...\n // results.write_file contains the filename returned by write_file.\n }]\n});\n```\n\nThis is a fairly trivial example, but to do this using the basic parallel and\nseries functions would look like this:\n\n```js\nasync.parallel([\n function(callback){\n // async code to get some data\n },\n function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n }\n],\nfunction(err, results){\n async.series([\n function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n },\n function(callback){\n // once the file is written let's email a link to it...\n }\n ]);\n});\n```\n\nFor a complicated series of async tasks using the auto function makes adding\nnew tasks much easier and makes the code more readable.\n\n\n---------------------------------------\n\n<a name=\"iterator\" />\n### iterator(tasks)\n\nCreates an iterator function which calls the next function in the array,\nreturning a continuation to call the next one after that. It's also possible to\n'peek' the next iterator by doing iterator.next().\n\nThis function is used internally by the async module but can be useful when\nyou want to manually control the flow of functions in series.\n\n__Arguments__\n\n* tasks - An array of functions to run.\n\n__Example__\n\n```js\nvar iterator = async.iterator([\n function(){ sys.p('one'); },\n function(){ sys.p('two'); },\n function(){ sys.p('three'); }\n]);\n\nnode> var iterator2 = iterator();\n'one'\nnode> var iterator3 = iterator2();\n'two'\nnode> iterator3();\n'three'\nnode> var nextfn = iterator2.next();\nnode> nextfn();\n'three'\n```\n\n---------------------------------------\n\n<a name=\"apply\" />\n### apply(function, arguments..)\n\nCreates a continuation function with some arguments already applied, a useful\nshorthand when combined with other control flow functions. Any arguments\npassed to the returned function are added to the arguments originally passed\nto apply.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to automatically apply when the\n continuation is called.\n\n__Example__\n\n```js\n// using apply\n\nasync.parallel([\n async.apply(fs.writeFile, 'testfile1', 'test1'),\n async.apply(fs.writeFile, 'testfile2', 'test2'),\n]);\n\n\n// the same process without using apply\n\nasync.parallel([\n function(callback){\n fs.writeFile('testfile1', 'test1', callback);\n },\n function(callback){\n fs.writeFile('testfile2', 'test2', callback);\n }\n]);\n```\n\nIt's possible to pass any number of additional arguments when calling the\ncontinuation:\n\n```js\nnode> var fn = async.apply(sys.puts, 'one');\nnode> fn('two', 'three');\none\ntwo\nthree\n```\n\n---------------------------------------\n\n<a name=\"nextTick\" />\n### nextTick(callback)\n\nCalls the callback on a later loop around the event loop. In node.js this just\ncalls process.nextTick, in the browser it falls back to setImmediate(callback)\nif available, otherwise setTimeout(callback, 0), which means other higher priority\nevents may precede the execution of the callback.\n\nThis is used internally for browser-compatibility purposes.\n\n__Arguments__\n\n* callback - The function to call on a later loop around the event loop.\n\n__Example__\n\n```js\nvar call_order = [];\nasync.nextTick(function(){\n call_order.push('two');\n // call_order now equals ['one','two']\n});\ncall_order.push('one')\n```\n\n<a name=\"times\" />\n### times(n, callback)\n\nCalls the callback n times and accumulates results in the same manner\nyou would use with async.map.\n\n__Arguments__\n\n* n - The number of times to run the function.\n* callback - The function to call n times.\n\n__Example__\n\n```js\n// Pretend this is some complicated async factory\nvar createUser = function(id, callback) {\n callback(null, {\n id: 'user' + id\n })\n}\n// generate 5 users\nasync.times(5, function(n, next){\n createUser(n, function(err, user) {\n next(err, user)\n })\n}, function(err, users) {\n // we should now have 5 users\n});\n```\n\n<a name=\"timesSeries\" />\n### timesSeries(n, callback)\n\nThe same as times only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n## Utils\n\n<a name=\"memoize\" />\n### memoize(fn, [hasher])\n\nCaches the results of an async function. When creating a hash to store function\nresults against, the callback is omitted from the hash and an optional hash\nfunction can be used.\n\nThe cache of results is exposed as the `memo` property of the function returned\nby `memoize`.\n\n__Arguments__\n\n* fn - the function you to proxy and cache results from.\n* hasher - an optional function for generating a custom hash for storing\n results, it has all the arguments applied to it apart from the callback, and\n must be synchronous.\n\n__Example__\n\n```js\nvar slow_fn = function (name, callback) {\n // do something\n callback(null, result);\n};\nvar fn = async.memoize(slow_fn);\n\n// fn can now be used as if it were slow_fn\nfn('some name', function () {\n // callback\n});\n```\n\n<a name=\"unmemoize\" />\n### unmemoize(fn)\n\nUndoes a memoized function, reverting it to the original, unmemoized\nform. Comes handy in tests.\n\n__Arguments__\n\n* fn - the memoized function\n\n<a name=\"log\" />\n### log(function, arguments)\n\nLogs the result of an async function to the console. Only works in node.js or\nin browsers that support console.log and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.log is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, 'hello ' + name);\n }, 1000);\n};\n```\n```js\nnode> async.log(hello, 'world');\n'hello world'\n```\n\n---------------------------------------\n\n<a name=\"dir\" />\n### dir(function, arguments)\n\nLogs the result of an async function to the console using console.dir to\ndisplay the properties of the resulting object. Only works in node.js or\nin browsers that support console.dir and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.dir is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, {hello: name});\n }, 1000);\n};\n```\n```js\nnode> async.dir(hello, 'world');\n{hello: 'world'}\n```\n\n---------------------------------------\n\n<a name=\"noConflict\" />\n### noConflict()\n\nChanges the value of async back to its original value, returning a reference to the\nasync object.\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/caolan/async", - "_id": "async@0.2.10", - "dist": { - "shasum": "a06e6818541aa1851d6ac822c8dbbfd6206eb72f" - }, - "_from": "async@~0.2.9", - "_resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore deleted file mode 100644 index aba34f01..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -*.un~ -/node_modules -/test/tmp diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/License b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/License deleted file mode 100644 index 4804b7ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/License +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Debuggable Limited <felix@debuggable.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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile deleted file mode 100644 index b4ff85a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -SHELL := /bin/bash - -test: - @./test/run.js - -.PHONY: test - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md deleted file mode 100644 index 1a9999eb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md +++ /dev/null @@ -1,132 +0,0 @@ -# combined-stream - -A stream that emits multiple other streams one after another. - -## Installation - -``` bash -npm install combined-stream -``` - -## Usage - -Here is a simple example that shows how you can use combined-stream to combine -two files into one: - -``` javascript -var CombinedStream = require('combined-stream'); -var fs = require('fs'); - -var combinedStream = CombinedStream.create(); -combinedStream.append(fs.createReadStream('file1.txt')); -combinedStream.append(fs.createReadStream('file2.txt')); - -combinedStream.pipe(fs.createWriteStream('combined.txt')); -``` - -While the example above works great, it will pause all source streams until -they are needed. If you don't want that to happen, you can set `pauseStreams` -to `false`: - -``` javascript -var CombinedStream = require('combined-stream'); -var fs = require('fs'); - -var combinedStream = CombinedStream.create({pauseStreams: false}); -combinedStream.append(fs.createReadStream('file1.txt')); -combinedStream.append(fs.createReadStream('file2.txt')); - -combinedStream.pipe(fs.createWriteStream('combined.txt')); -``` - -However, what if you don't have all the source streams yet, or you don't want -to allocate the resources (file descriptors, memory, etc.) for them right away? -Well, in that case you can simply provide a callback that supplies the stream -by calling a `next()` function: - -``` javascript -var CombinedStream = require('combined-stream'); -var fs = require('fs'); - -var combinedStream = CombinedStream.create(); -combinedStream.append(function(next) { - next(fs.createReadStream('file1.txt')); -}); -combinedStream.append(function(next) { - next(fs.createReadStream('file2.txt')); -}); - -combinedStream.pipe(fs.createWriteStream('combined.txt')); -``` - -## API - -### CombinedStream.create([options]) - -Returns a new combined stream object. Available options are: - -* `maxDataSize` -* `pauseStreams` - -The effect of those options is described below. - -### combinedStream.pauseStreams = true - -Whether to apply back pressure to the underlaying streams. If set to `false`, -the underlaying streams will never be paused. If set to `true`, the -underlaying streams will be paused right after being appended, as well as when -`delayedStream.pipe()` wants to throttle. - -### combinedStream.maxDataSize = 2 * 1024 * 1024 - -The maximum amount of bytes (or characters) to buffer for all source streams. -If this value is exceeded, `combinedStream` emits an `'error'` event. - -### combinedStream.dataSize = 0 - -The amount of bytes (or characters) currently buffered by `combinedStream`. - -### combinedStream.append(stream) - -Appends the given `stream` to the combinedStream object. If `pauseStreams` is -set to `true, this stream will also be paused right away. - -`streams` can also be a function that takes one parameter called `next`. `next` -is a function that must be invoked in order to provide the `next` stream, see -example above. - -Regardless of how the `stream` is appended, combined-stream always attaches an -`'error'` listener to it, so you don't have to do that manually. - -Special case: `stream` can also be a String or Buffer. - -### combinedStream.write(data) - -You should not call this, `combinedStream` takes care of piping the appended -streams into itself for you. - -### combinedStream.resume() - -Causes `combinedStream` to start drain the streams it manages. The function is -idempotent, and also emits a `'resume'` event each time which usually goes to -the stream that is currently being drained. - -### combinedStream.pause(); - -If `combinedStream.pauseStreams` is set to `false`, this does nothing. -Otherwise a `'pause'` event is emitted, this goes to the stream that is -currently being drained, so you can use it to apply back pressure. - -### combinedStream.end(); - -Sets `combinedStream.writable` to false, emits an `'end'` event, and removes -all streams from the queue. - -### combinedStream.destroy(); - -Same as `combinedStream.end()`, except it emits a `'close'` event instead of -`'end'`. - -## License - -combined-stream is licensed under the MIT license. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js deleted file mode 100644 index 32849fd1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js +++ /dev/null @@ -1,185 +0,0 @@ -var util = require('util'); -var Stream = require('stream').Stream; -var DelayedStream = require('delayed-stream'); - -module.exports = CombinedStream; -function CombinedStream() { - this.writable = false; - this.readable = true; - this.dataSize = 0; - this.maxDataSize = 2 * 1024 * 1024; - this.pauseStreams = true; - - this._released = false; - this._streams = []; - this._currentStream = null; -} -util.inherits(CombinedStream, Stream); - -CombinedStream.create = function(options) { - var combinedStream = new this(); - - options = options || {}; - for (var option in options) { - combinedStream[option] = options[option]; - } - - return combinedStream; -}; - -CombinedStream.isStreamLike = function(stream) { - return (typeof stream !== 'function') - && (typeof stream !== 'string') - && (typeof stream !== 'boolean') - && (typeof stream !== 'number') - && (!Buffer.isBuffer(stream)); -}; - -CombinedStream.prototype.append = function(stream) { - var isStreamLike = CombinedStream.isStreamLike(stream); - - if (isStreamLike) { - if (!(stream instanceof DelayedStream)) { - stream.on('data', this._checkDataSize.bind(this)); - - stream = DelayedStream.create(stream, { - maxDataSize: Infinity, - pauseStream: this.pauseStreams, - }); - } - - this._handleErrors(stream); - - if (this.pauseStreams) { - stream.pause(); - } - } - - this._streams.push(stream); - return this; -}; - -CombinedStream.prototype.pipe = function(dest, options) { - Stream.prototype.pipe.call(this, dest, options); - this.resume(); -}; - -CombinedStream.prototype._getNext = function() { - this._currentStream = null; - var stream = this._streams.shift(); - - - if (typeof stream == 'undefined') { - this.end(); - return; - } - - if (typeof stream !== 'function') { - this._pipeNext(stream); - return; - } - - var getStream = stream; - getStream(function(stream) { - var isStreamLike = CombinedStream.isStreamLike(stream); - if (isStreamLike) { - stream.on('data', this._checkDataSize.bind(this)); - this._handleErrors(stream); - } - - this._pipeNext(stream); - }.bind(this)); -}; - -CombinedStream.prototype._pipeNext = function(stream) { - this._currentStream = stream; - - var isStreamLike = CombinedStream.isStreamLike(stream); - if (isStreamLike) { - stream.on('end', this._getNext.bind(this)) - stream.pipe(this, {end: false}); - return; - } - - var value = stream; - this.write(value); - this._getNext(); -}; - -CombinedStream.prototype._handleErrors = function(stream) { - var self = this; - stream.on('error', function(err) { - self._emitError(err); - }); -}; - -CombinedStream.prototype.write = function(data) { - this.emit('data', data); -}; - -CombinedStream.prototype.pause = function() { - if (!this.pauseStreams) { - return; - } - - this.emit('pause'); -}; - -CombinedStream.prototype.resume = function() { - if (!this._released) { - this._released = true; - this.writable = true; - this._getNext(); - } - - this.emit('resume'); -}; - -CombinedStream.prototype.end = function() { - this._reset(); - this.emit('end'); -}; - -CombinedStream.prototype.destroy = function() { - this._reset(); - this.emit('close'); -}; - -CombinedStream.prototype._reset = function() { - this.writable = false; - this._streams = []; - this._currentStream = null; -}; - -CombinedStream.prototype._checkDataSize = function() { - this._updateDataSize(); - if (this.dataSize <= this.maxDataSize) { - return; - } - - var message = - 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' - this._emitError(new Error(message)); -}; - -CombinedStream.prototype._updateDataSize = function() { - this.dataSize = 0; - - var self = this; - this._streams.forEach(function(stream) { - if (!stream.dataSize) { - return; - } - - self.dataSize += stream.dataSize; - }); - - if (this._currentStream && this._currentStream.dataSize) { - this.dataSize += this._currentStream.dataSize; - } -}; - -CombinedStream.prototype._emitError = function(err) { - this._reset(); - this.emit('error', err); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore deleted file mode 100644 index 2fedb26c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -*.un~ -/node_modules/* diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License deleted file mode 100644 index 4804b7ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Debuggable Limited <felix@debuggable.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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile deleted file mode 100644 index b4ff85a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -SHELL := /bin/bash - -test: - @./test/run.js - -.PHONY: test - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md deleted file mode 100644 index 5cb5b35e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md +++ /dev/null @@ -1,154 +0,0 @@ -# delayed-stream - -Buffers events from a stream until you are ready to handle them. - -## Installation - -``` bash -npm install delayed-stream -``` - -## Usage - -The following example shows how to write a http echo server that delays its -response by 1000 ms. - -``` javascript -var DelayedStream = require('delayed-stream'); -var http = require('http'); - -http.createServer(function(req, res) { - var delayed = DelayedStream.create(req); - - setTimeout(function() { - res.writeHead(200); - delayed.pipe(res); - }, 1000); -}); -``` - -If you are not using `Stream#pipe`, you can also manually release the buffered -events by calling `delayedStream.resume()`: - -``` javascript -var delayed = DelayedStream.create(req); - -setTimeout(function() { - // Emit all buffered events and resume underlaying source - delayed.resume(); -}, 1000); -``` - -## Implementation - -In order to use this meta stream properly, here are a few things you should -know about the implementation. - -### Event Buffering / Proxying - -All events of the `source` stream are hijacked by overwriting the `source.emit` -method. Until node implements a catch-all event listener, this is the only way. - -However, delayed-stream still continues to emit all events it captures on the -`source`, regardless of whether you have released the delayed stream yet or -not. - -Upon creation, delayed-stream captures all `source` events and stores them in -an internal event buffer. Once `delayedStream.release()` is called, all -buffered events are emitted on the `delayedStream`, and the event buffer is -cleared. After that, delayed-stream merely acts as a proxy for the underlaying -source. - -### Error handling - -Error events on `source` are buffered / proxied just like any other events. -However, `delayedStream.create` attaches a no-op `'error'` listener to the -`source`. This way you only have to handle errors on the `delayedStream` -object, rather than in two places. - -### Buffer limits - -delayed-stream provides a `maxDataSize` property that can be used to limit -the amount of data being buffered. In order to protect you from bad `source` -streams that don't react to `source.pause()`, this feature is enabled by -default. - -## API - -### DelayedStream.create(source, [options]) - -Returns a new `delayedStream`. Available options are: - -* `pauseStream` -* `maxDataSize` - -The description for those properties can be found below. - -### delayedStream.source - -The `source` stream managed by this object. This is useful if you are -passing your `delayedStream` around, and you still want to access properties -on the `source` object. - -### delayedStream.pauseStream = true - -Whether to pause the underlaying `source` when calling -`DelayedStream.create()`. Modifying this property afterwards has no effect. - -### delayedStream.maxDataSize = 1024 * 1024 - -The amount of data to buffer before emitting an `error`. - -If the underlaying source is emitting `Buffer` objects, the `maxDataSize` -refers to bytes. - -If the underlaying source is emitting JavaScript strings, the size refers to -characters. - -If you know what you are doing, you can set this property to `Infinity` to -disable this feature. You can also modify this property during runtime. - -### delayedStream.maxDataSize = 1024 * 1024 - -The amount of data to buffer before emitting an `error`. - -If the underlaying source is emitting `Buffer` objects, the `maxDataSize` -refers to bytes. - -If the underlaying source is emitting JavaScript strings, the size refers to -characters. - -If you know what you are doing, you can set this property to `Infinity` to -disable this feature. - -### delayedStream.dataSize = 0 - -The amount of data buffered so far. - -### delayedStream.readable - -An ECMA5 getter that returns the value of `source.readable`. - -### delayedStream.resume() - -If the `delayedStream` has not been released so far, `delayedStream.release()` -is called. - -In either case, `source.resume()` is called. - -### delayedStream.pause() - -Calls `source.pause()`. - -### delayedStream.pipe(dest) - -Calls `delayedStream.resume()` and then proxies the arguments to `source.pipe`. - -### delayedStream.release() - -Emits and clears all events that have been buffered up so far. This does not -resume the underlaying source, use `delayedStream.resume()` instead. - -## License - -delayed-stream is licensed under the MIT license. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js deleted file mode 100644 index 7c10d482..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js +++ /dev/null @@ -1,99 +0,0 @@ -var Stream = require('stream').Stream; -var util = require('util'); - -module.exports = DelayedStream; -function DelayedStream() { - this.source = null; - this.dataSize = 0; - this.maxDataSize = 1024 * 1024; - this.pauseStream = true; - - this._maxDataSizeExceeded = false; - this._released = false; - this._bufferedEvents = []; -} -util.inherits(DelayedStream, Stream); - -DelayedStream.create = function(source, options) { - var delayedStream = new this(); - - options = options || {}; - for (var option in options) { - delayedStream[option] = options[option]; - } - - delayedStream.source = source; - - var realEmit = source.emit; - source.emit = function() { - delayedStream._handleEmit(arguments); - return realEmit.apply(source, arguments); - }; - - source.on('error', function() {}); - if (delayedStream.pauseStream) { - source.pause(); - } - - return delayedStream; -}; - -DelayedStream.prototype.__defineGetter__('readable', function() { - return this.source.readable; -}); - -DelayedStream.prototype.resume = function() { - if (!this._released) { - this.release(); - } - - this.source.resume(); -}; - -DelayedStream.prototype.pause = function() { - this.source.pause(); -}; - -DelayedStream.prototype.release = function() { - this._released = true; - - this._bufferedEvents.forEach(function(args) { - this.emit.apply(this, args); - }.bind(this)); - this._bufferedEvents = []; -}; - -DelayedStream.prototype.pipe = function() { - var r = Stream.prototype.pipe.apply(this, arguments); - this.resume(); - return r; -}; - -DelayedStream.prototype._handleEmit = function(args) { - if (this._released) { - this.emit.apply(this, args); - return; - } - - if (args[0] === 'data') { - this.dataSize += args[1].length; - this._checkIfMaxDataSizeExceeded(); - } - - this._bufferedEvents.push(args); -}; - -DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { - if (this._maxDataSizeExceeded) { - return; - } - - if (this.dataSize <= this.maxDataSize) { - return; - } - - this._maxDataSizeExceeded = true; - var message = - 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' - this.emit('error', new Error(message)); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json deleted file mode 100644 index 2ba5526d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "author": { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com", - "url": "http://debuggable.com/" - }, - "name": "delayed-stream", - "description": "Buffers events from a stream until you are ready to handle them.", - "version": "0.0.5", - "homepage": "https://github.com/felixge/node-delayed-stream", - "repository": { - "type": "git", - "url": "git://github.com/felixge/node-delayed-stream.git" - }, - "main": "./lib/delayed_stream", - "engines": { - "node": ">=0.4.0" - }, - "dependencies": {}, - "devDependencies": { - "fake": "0.2.0", - "far": "0.0.1" - }, - "readme": "# delayed-stream\n\nBuffers events from a stream until you are ready to handle them.\n\n## Installation\n\n``` bash\nnpm install delayed-stream\n```\n\n## Usage\n\nThe following example shows how to write a http echo server that delays its\nresponse by 1000 ms.\n\n``` javascript\nvar DelayedStream = require('delayed-stream');\nvar http = require('http');\n\nhttp.createServer(function(req, res) {\n var delayed = DelayedStream.create(req);\n\n setTimeout(function() {\n res.writeHead(200);\n delayed.pipe(res);\n }, 1000);\n});\n```\n\nIf you are not using `Stream#pipe`, you can also manually release the buffered\nevents by calling `delayedStream.resume()`:\n\n``` javascript\nvar delayed = DelayedStream.create(req);\n\nsetTimeout(function() {\n // Emit all buffered events and resume underlaying source\n delayed.resume();\n}, 1000);\n```\n\n## Implementation\n\nIn order to use this meta stream properly, here are a few things you should\nknow about the implementation.\n\n### Event Buffering / Proxying\n\nAll events of the `source` stream are hijacked by overwriting the `source.emit`\nmethod. Until node implements a catch-all event listener, this is the only way.\n\nHowever, delayed-stream still continues to emit all events it captures on the\n`source`, regardless of whether you have released the delayed stream yet or\nnot.\n\nUpon creation, delayed-stream captures all `source` events and stores them in\nan internal event buffer. Once `delayedStream.release()` is called, all\nbuffered events are emitted on the `delayedStream`, and the event buffer is\ncleared. After that, delayed-stream merely acts as a proxy for the underlaying\nsource.\n\n### Error handling\n\nError events on `source` are buffered / proxied just like any other events.\nHowever, `delayedStream.create` attaches a no-op `'error'` listener to the\n`source`. This way you only have to handle errors on the `delayedStream`\nobject, rather than in two places.\n\n### Buffer limits\n\ndelayed-stream provides a `maxDataSize` property that can be used to limit\nthe amount of data being buffered. In order to protect you from bad `source`\nstreams that don't react to `source.pause()`, this feature is enabled by\ndefault.\n\n## API\n\n### DelayedStream.create(source, [options])\n\nReturns a new `delayedStream`. Available options are:\n\n* `pauseStream`\n* `maxDataSize`\n\nThe description for those properties can be found below.\n\n### delayedStream.source\n\nThe `source` stream managed by this object. This is useful if you are\npassing your `delayedStream` around, and you still want to access properties\non the `source` object.\n\n### delayedStream.pauseStream = true\n\nWhether to pause the underlaying `source` when calling\n`DelayedStream.create()`. Modifying this property afterwards has no effect.\n\n### delayedStream.maxDataSize = 1024 * 1024\n\nThe amount of data to buffer before emitting an `error`.\n\nIf the underlaying source is emitting `Buffer` objects, the `maxDataSize`\nrefers to bytes.\n\nIf the underlaying source is emitting JavaScript strings, the size refers to\ncharacters.\n\nIf you know what you are doing, you can set this property to `Infinity` to\ndisable this feature. You can also modify this property during runtime.\n\n### delayedStream.maxDataSize = 1024 * 1024\n\nThe amount of data to buffer before emitting an `error`.\n\nIf the underlaying source is emitting `Buffer` objects, the `maxDataSize`\nrefers to bytes.\n\nIf the underlaying source is emitting JavaScript strings, the size refers to\ncharacters.\n\nIf you know what you are doing, you can set this property to `Infinity` to\ndisable this feature.\n\n### delayedStream.dataSize = 0\n\nThe amount of data buffered so far.\n\n### delayedStream.readable\n\nAn ECMA5 getter that returns the value of `source.readable`.\n\n### delayedStream.resume()\n\nIf the `delayedStream` has not been released so far, `delayedStream.release()`\nis called.\n\nIn either case, `source.resume()` is called.\n\n### delayedStream.pause()\n\nCalls `source.pause()`.\n\n### delayedStream.pipe(dest)\n\nCalls `delayedStream.resume()` and then proxies the arguments to `source.pipe`.\n\n### delayedStream.release()\n\nEmits and clears all events that have been buffered up so far. This does not\nresume the underlaying source, use `delayedStream.resume()` instead.\n\n## License\n\ndelayed-stream is licensed under the MIT license.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/felixge/node-delayed-stream/issues" - }, - "_id": "delayed-stream@0.0.5", - "dist": { - "shasum": "66839603c076296710bcc7f2e84ebd3348ae6343" - }, - "_from": "delayed-stream@0.0.5", - "_resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js deleted file mode 100644 index 4d71b8a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js +++ /dev/null @@ -1,6 +0,0 @@ -var common = module.exports; - -common.DelayedStream = require('..'); -common.assert = require('assert'); -common.fake = require('fake'); -common.PORT = 49252; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js deleted file mode 100644 index 9ecad5b8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js +++ /dev/null @@ -1,38 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var DelayedStream = common.DelayedStream; -var http = require('http'); - -var UPLOAD = new Buffer(10 * 1024 * 1024); - -var server = http.createServer(function(req, res) { - var delayed = DelayedStream.create(req, {maxDataSize: UPLOAD.length}); - - setTimeout(function() { - res.writeHead(200); - delayed.pipe(res); - }, 10); -}); -server.listen(common.PORT, function() { - var request = http.request({ - method: 'POST', - port: common.PORT, - }); - - request.write(UPLOAD); - request.end(); - - request.on('response', function(res) { - var received = 0; - res - .on('data', function(chunk) { - received += chunk.length; - }) - .on('end', function() { - assert.equal(received, UPLOAD.length); - server.close(); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js deleted file mode 100644 index 6f417f3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js +++ /dev/null @@ -1,21 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testAutoPause() { - var source = new Stream(); - - fake.expect(source, 'pause', 1); - var delayedStream = DelayedStream.create(source); - fake.verify(); -})(); - -(function testDisableAutoPause() { - var source = new Stream(); - fake.expect(source, 'pause', 0); - - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - fake.verify(); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js deleted file mode 100644 index b50c3978..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js +++ /dev/null @@ -1,14 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testDelayEventsUntilResume() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - fake.expect(source, 'pause'); - delayedStream.pause(); - fake.verify(); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js deleted file mode 100644 index fc4047e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js +++ /dev/null @@ -1,48 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testDelayEventsUntilResume() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - // delayedStream must not emit until we resume - fake.expect(delayedStream, 'emit', 0); - - // but our original source must emit - var params = []; - source.on('foo', function(param) { - params.push(param); - }); - - source.emit('foo', 1); - source.emit('foo', 2); - - // Make sure delayedStream did not emit, and source did - assert.deepEqual(params, [1, 2]); - fake.verify(); - - // After resume, delayedStream must playback all events - fake - .stub(delayedStream, 'emit') - .times(Infinity) - .withArg(1, 'newListener'); - fake.expect(delayedStream, 'emit', ['foo', 1]); - fake.expect(delayedStream, 'emit', ['foo', 2]); - fake.expect(source, 'resume'); - - delayedStream.resume(); - fake.verify(); - - // Calling resume again will delegate to source - fake.expect(source, 'resume'); - delayedStream.resume(); - fake.verify(); - - // Emitting more events directly leads to them being emitted - fake.expect(delayedStream, 'emit', ['foo', 3]); - source.emit('foo', 3); - fake.verify(); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js deleted file mode 100644 index a9d35e72..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js +++ /dev/null @@ -1,15 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testHandleSourceErrors() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - // We deal with this by attaching a no-op listener to 'error' on the source - // when creating a new DelayedStream. This way error events on the source - // won't throw. - source.emit('error', new Error('something went wrong')); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js deleted file mode 100644 index 7638a2bf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js +++ /dev/null @@ -1,18 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testMaxDataSize() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {maxDataSize: 1024, pauseStream: false}); - - source.emit('data', new Buffer(1024)); - - fake - .expect(delayedStream, 'emit') - .withArg(1, 'error'); - source.emit('data', new Buffer(1)); - fake.verify(); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js deleted file mode 100644 index 7d312ab1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js +++ /dev/null @@ -1,13 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testPipeReleases() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - fake.expect(delayedStream, 'resume'); - delayedStream.pipe(new Stream()); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js deleted file mode 100644 index d436163b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js +++ /dev/null @@ -1,13 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var fake = common.fake.create(); -var DelayedStream = common.DelayedStream; -var Stream = require('stream').Stream; - -(function testProxyReadableProperty() { - var source = new Stream(); - var delayedStream = DelayedStream.create(source, {pauseStream: false}); - - source.readable = fake.value('source.readable'); - assert.strictEqual(delayedStream.readable, source.readable); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js deleted file mode 100755 index 0bb8e822..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var far = require('far').create(); - -far.add(__dirname); -far.include(/test-.*\.js$/); - -far.execute(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json deleted file mode 100644 index ecc71ada..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "author": { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com", - "url": "http://debuggable.com/" - }, - "name": "combined-stream", - "description": "A stream that emits multiple other streams one after another.", - "version": "0.0.4", - "homepage": "https://github.com/felixge/node-combined-stream", - "repository": { - "type": "git", - "url": "git://github.com/felixge/node-combined-stream.git" - }, - "main": "./lib/combined_stream", - "engines": { - "node": "*" - }, - "dependencies": { - "delayed-stream": "0.0.5" - }, - "devDependencies": { - "far": "0.0.1" - }, - "readme": "# combined-stream\n\nA stream that emits multiple other streams one after another.\n\n## Installation\n\n``` bash\nnpm install combined-stream\n```\n\n## Usage\n\nHere is a simple example that shows how you can use combined-stream to combine\ntwo files into one:\n\n``` javascript\nvar CombinedStream = require('combined-stream');\nvar fs = require('fs');\n\nvar combinedStream = CombinedStream.create();\ncombinedStream.append(fs.createReadStream('file1.txt'));\ncombinedStream.append(fs.createReadStream('file2.txt'));\n\ncombinedStream.pipe(fs.createWriteStream('combined.txt'));\n```\n\nWhile the example above works great, it will pause all source streams until\nthey are needed. If you don't want that to happen, you can set `pauseStreams`\nto `false`:\n\n``` javascript\nvar CombinedStream = require('combined-stream');\nvar fs = require('fs');\n\nvar combinedStream = CombinedStream.create({pauseStreams: false});\ncombinedStream.append(fs.createReadStream('file1.txt'));\ncombinedStream.append(fs.createReadStream('file2.txt'));\n\ncombinedStream.pipe(fs.createWriteStream('combined.txt'));\n```\n\nHowever, what if you don't have all the source streams yet, or you don't want\nto allocate the resources (file descriptors, memory, etc.) for them right away?\nWell, in that case you can simply provide a callback that supplies the stream\nby calling a `next()` function:\n\n``` javascript\nvar CombinedStream = require('combined-stream');\nvar fs = require('fs');\n\nvar combinedStream = CombinedStream.create();\ncombinedStream.append(function(next) {\n next(fs.createReadStream('file1.txt'));\n});\ncombinedStream.append(function(next) {\n next(fs.createReadStream('file2.txt'));\n});\n\ncombinedStream.pipe(fs.createWriteStream('combined.txt'));\n```\n\n## API\n\n### CombinedStream.create([options])\n\nReturns a new combined stream object. Available options are:\n\n* `maxDataSize`\n* `pauseStreams`\n\nThe effect of those options is described below.\n\n### combinedStream.pauseStreams = true\n\nWhether to apply back pressure to the underlaying streams. If set to `false`,\nthe underlaying streams will never be paused. If set to `true`, the\nunderlaying streams will be paused right after being appended, as well as when\n`delayedStream.pipe()` wants to throttle.\n\n### combinedStream.maxDataSize = 2 * 1024 * 1024\n\nThe maximum amount of bytes (or characters) to buffer for all source streams.\nIf this value is exceeded, `combinedStream` emits an `'error'` event.\n\n### combinedStream.dataSize = 0\n\nThe amount of bytes (or characters) currently buffered by `combinedStream`.\n\n### combinedStream.append(stream)\n\nAppends the given `stream` to the combinedStream object. If `pauseStreams` is\nset to `true, this stream will also be paused right away.\n\n`streams` can also be a function that takes one parameter called `next`. `next`\nis a function that must be invoked in order to provide the `next` stream, see\nexample above.\n\nRegardless of how the `stream` is appended, combined-stream always attaches an\n`'error'` listener to it, so you don't have to do that manually.\n\nSpecial case: `stream` can also be a String or Buffer.\n\n### combinedStream.write(data)\n\nYou should not call this, `combinedStream` takes care of piping the appended\nstreams into itself for you.\n\n### combinedStream.resume()\n\nCauses `combinedStream` to start drain the streams it manages. The function is\nidempotent, and also emits a `'resume'` event each time which usually goes to\nthe stream that is currently being drained.\n\n### combinedStream.pause();\n\nIf `combinedStream.pauseStreams` is set to `false`, this does nothing.\nOtherwise a `'pause'` event is emitted, this goes to the stream that is\ncurrently being drained, so you can use it to apply back pressure.\n\n### combinedStream.end();\n\nSets `combinedStream.writable` to false, emits an `'end'` event, and removes\nall streams from the queue.\n\n### combinedStream.destroy();\n\nSame as `combinedStream.end()`, except it emits a `'close'` event instead of\n`'end'`.\n\n## License\n\ncombined-stream is licensed under the MIT license.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/felixge/node-combined-stream/issues" - }, - "_id": "combined-stream@0.0.4", - "dist": { - "shasum": "6562a96c9e6862c7a1349ac563047313599d0e86" - }, - "_from": "combined-stream@~0.0.4", - "_resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js deleted file mode 100644 index 81543485..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js +++ /dev/null @@ -1,23 +0,0 @@ -var common = module.exports; - -var path = require('path'); -var fs = require('fs'); -var root = path.join(__dirname, '..'); - -common.dir = { - fixture: root + '/test/fixture', - tmp: root + '/test/tmp', -}; - -// Create tmp directory if it does not exist -// Not using fs.exists so as to be node 0.6.x compatible -try { - fs.statSync(common.dir.tmp); -} -catch (e) { - // Dir does not exist - fs.mkdirSync(common.dir.tmp); -} - -common.CombinedStream = require(root); -common.assert = require('assert'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt deleted file mode 100644 index 50e0218d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt +++ /dev/null @@ -1,256 +0,0 @@ -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 -10101010101010101010101010101010101010101010101010101010101010101010101010101010 -01010101010101010101010101010101010101010101010101010101010101010101010101010101 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt deleted file mode 100644 index da1d821f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt +++ /dev/null @@ -1,256 +0,0 @@ -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 -20202020202020202020202020202020202020202020202020202020202020202020202020202020 -02020202020202020202020202020202020202020202020202020202020202020202020202020202 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js deleted file mode 100644 index 44ecabab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js +++ /dev/null @@ -1,27 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var FILE2 = common.dir.fixture + '/file2.txt'; -var EXPECTED = fs.readFileSync(FILE1) + fs.readFileSync(FILE2); - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create(); - combinedStream.append(function(next) { - next(fs.createReadStream(FILE1)); - }); - combinedStream.append(function(next) { - next(fs.createReadStream(FILE2)); - }); - - var tmpFile = common.dir.tmp + '/combined.txt'; - var dest = fs.createWriteStream(tmpFile); - combinedStream.pipe(dest); - - dest.on('end', function() { - var written = fs.readFileSync(tmpFile, 'utf8'); - assert.strictEqual(written, EXPECTED); - }); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js deleted file mode 100644 index e3fbd184..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js +++ /dev/null @@ -1,34 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; - -(function testDataSizeGetter() { - var combinedStream = CombinedStream.create(); - - assert.strictEqual(combinedStream.dataSize, 0); - - // Test one stream - combinedStream._streams.push({dataSize: 10}); - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 10); - - // Test two streams - combinedStream._streams.push({dataSize: 23}); - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 33); - - // Test currentStream - combinedStream._currentStream = {dataSize: 20}; - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 53); - - // Test currentStream without dataSize - combinedStream._currentStream = {}; - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 33); - - // Test stream function - combinedStream._streams.push(function() {}); - combinedStream._updateDataSize(); - assert.strictEqual(combinedStream.dataSize, 33); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js deleted file mode 100644 index c678575c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js +++ /dev/null @@ -1,38 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var BUFFER = new Buffer('Bacon is delicious'); -var FILE2 = common.dir.fixture + '/file2.txt'; -var STRING = 'The € kicks the $\'s ass!'; - -var EXPECTED = - fs.readFileSync(FILE1) - + BUFFER - + fs.readFileSync(FILE2) - + STRING; -var GOT; - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create(); - combinedStream.append(fs.createReadStream(FILE1)); - combinedStream.append(BUFFER); - combinedStream.append(fs.createReadStream(FILE2)); - combinedStream.append(function(next) { - next(STRING); - }); - - var tmpFile = common.dir.tmp + '/combined-file1-buffer-file2-string.txt'; - var dest = fs.createWriteStream(tmpFile); - combinedStream.pipe(dest); - - dest.on('close', function() { - GOT = fs.readFileSync(tmpFile, 'utf8'); - }); -})(); - -process.on('exit', function() { - assert.strictEqual(GOT, EXPECTED); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js deleted file mode 100644 index 263cfdf7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js +++ /dev/null @@ -1,35 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var FILE2 = common.dir.fixture + '/file2.txt'; -var EXPECTED = fs.readFileSync(FILE1) + fs.readFileSync(FILE2); -var GOT; - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create(); - combinedStream.append(fs.createReadStream(FILE1)); - combinedStream.append(fs.createReadStream(FILE2)); - - var stream1 = combinedStream._streams[0]; - var stream2 = combinedStream._streams[1]; - - stream1.on('end', function() { - assert.equal(stream2.dataSize, 0); - }); - - var tmpFile = common.dir.tmp + '/combined.txt'; - var dest = fs.createWriteStream(tmpFile); - combinedStream.pipe(dest); - - dest.on('close', function() { - GOT = fs.readFileSync(tmpFile, 'utf8'); - }); -})(); - -process.on('exit', function() { - console.error(GOT.length, EXPECTED.length); - assert.strictEqual(GOT, EXPECTED); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js deleted file mode 100644 index c3d288d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js +++ /dev/null @@ -1,39 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var util = require('util'); -var Stream = require('stream').Stream; - -var s = CombinedStream.create(); - - -function StringStream(){ - this.writable=true; - this.str="" -} -util.inherits(StringStream,Stream); - -StringStream.prototype.write=function(chunk,encoding){ - this.str+=chunk.toString(); - this.emit('data',chunk); -} - -StringStream.prototype.end=function(chunk,encoding){ - this.emit('end'); -} - -StringStream.prototype.toString=function(){ - return this.str; -} - - -s.append("foo."); -s.append(""); -s.append("bar"); - -var ss = new StringStream(); - -s.pipe(ss); -s.resume(); - -assert.equal(ss.toString(),"foo.bar"); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js deleted file mode 100644 index aefa36e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js +++ /dev/null @@ -1,17 +0,0 @@ -var fs = require('fs'); -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var FILE1 = common.dir.fixture + '/file1.txt'; -var fileStream = fs.createReadStream(FILE1); - -var foo = function(){}; - -(function testIsStreamLike() { - assert(! CombinedStream.isStreamLike(true)); - assert(! CombinedStream.isStreamLike("I am a string")); - assert(! CombinedStream.isStreamLike(7)); - assert(! CombinedStream.isStreamLike(foo)); - - assert(CombinedStream.isStreamLike(fileStream)); -})(); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js deleted file mode 100644 index 25f47a47..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js +++ /dev/null @@ -1,24 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var FILE2 = common.dir.fixture + '/file2.txt'; -var EXPECTED = fs.readFileSync(FILE1) + fs.readFileSync(FILE2); - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create({pauseStreams: false, maxDataSize: 20736}); - combinedStream.append(fs.createReadStream(FILE1)); - combinedStream.append(fs.createReadStream(FILE2)); - - var gotErr = null; - combinedStream.on('error', function(err) { - gotErr = err; - }); - - process.on('exit', function() { - assert.ok(gotErr); - assert.ok(gotErr.message.match(/bytes/)); - }); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js deleted file mode 100644 index 30a3a6f8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js +++ /dev/null @@ -1,30 +0,0 @@ -var common = require('../common'); -var assert = common.assert; -var CombinedStream = common.CombinedStream; -var fs = require('fs'); - -var FILE1 = common.dir.fixture + '/file1.txt'; -var FILE2 = common.dir.fixture + '/file2.txt'; -var EXPECTED = fs.readFileSync(FILE1) + fs.readFileSync(FILE2); - -(function testDelayedStreams() { - var combinedStream = CombinedStream.create({pauseStreams: false}); - combinedStream.append(fs.createReadStream(FILE1)); - combinedStream.append(fs.createReadStream(FILE2)); - - var stream1 = combinedStream._streams[0]; - var stream2 = combinedStream._streams[1]; - - stream1.on('end', function() { - assert.ok(stream2.dataSize > 0); - }); - - var tmpFile = common.dir.tmp + '/combined.txt'; - var dest = fs.createWriteStream(tmpFile); - combinedStream.pipe(dest); - - dest.on('end', function() { - var written = fs.readFileSync(tmpFile, 'utf8'); - assert.strictEqual(written, EXPECTED); - }); -})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js deleted file mode 100755 index 0bb8e822..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var far = require('far').create(); - -far.add(__dirname); -far.include(/test-.*\.js$/); - -far.execute(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/package.json deleted file mode 100644 index 5d424f23..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "author": { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com", - "url": "http://debuggable.com/" - }, - "name": "form-data", - "description": "A module to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.", - "version": "0.1.2", - "repository": { - "type": "git", - "url": "git://github.com/felixge/node-form-data.git" - }, - "main": "./lib/form_data", - "scripts": { - "test": "node test/run.js" - }, - "engines": { - "node": ">= 0.6" - }, - "dependencies": { - "combined-stream": "~0.0.4", - "mime": "~1.2.11", - "async": "~0.2.9" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://raw.github.com/felixge/node-form-data/master/License" - } - ], - "devDependencies": { - "fake": "~0.2.2", - "far": "~0.0.7", - "formidable": "~1.0.14", - "request": "~2.27.0" - }, - "readme": "# Form-Data [![Build Status](https://travis-ci.org/felixge/node-form-data.png?branch=master)](https://travis-ci.org/felixge/node-form-data) [![Dependency Status](https://gemnasium.com/felixge/node-form-data.png)](https://gemnasium.com/felixge/node-form-data)\n\nA module to create readable ```\"multipart/form-data\"``` streams. Can be used to submit forms and file uploads to other web applications.\n\nThe API of this module is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd].\n\n[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface\n[streams2-thing]: http://nodejs.org/api/stream.html#stream_compatibility_with_older_node_versions\n\n## Install\n\n```\nnpm install form-data\n```\n\n## Usage\n\nIn this example we are constructing a form with 3 fields that contain a string,\na buffer and a file stream.\n\n``` javascript\nvar FormData = require('form-data');\nvar fs = require('fs');\n\nvar form = new FormData();\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_file', fs.createReadStream('/foo/bar.jpg'));\n```\n\nAlso you can use http-response stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar http = require('http');\n\nvar form = new FormData();\n\nhttp.request('http://nodejs.org/images/logo.png', function(response) {\n form.append('my_field', 'my value');\n form.append('my_buffer', new Buffer(10));\n form.append('my_logo', response);\n});\n```\n\nOr @mikeal's request stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar request = require('request');\n\nvar form = new FormData();\n\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_logo', request('http://nodejs.org/images/logo.png'));\n```\n\nIn order to submit this form to a web application, call ```submit(url, [callback])``` method:\n\n``` javascript\nform.submit('http://example.org/', function(err, res) {\n // res – response object (http.IncomingMessage) //\n res.resume(); // for node-0.10.x\n});\n\n```\n\nFor more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods.\n\n### Alternative submission methods\n\nYou can use node's http client interface:\n\n``` javascript\nvar http = require('http');\n\nvar request = http.request({\n method: 'post',\n host: 'example.org',\n path: '/upload',\n headers: form.getHeaders()\n});\n\nform.pipe(request);\n\nrequest.on('response', function(res) {\n console.log(res.statusCode);\n});\n```\n\nOr if you would prefer the `'Content-Length'` header to be set for you:\n\n``` javascript\nform.submit('example.org/upload', function(err, res) {\n console.log(res.statusCode);\n});\n```\n\nTo use custom headers and pre-known length in parts:\n\n``` javascript\nvar CRLF = '\\r\\n';\nvar form = new FormData();\n\nvar options = {\n header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,\n knownLength: 1\n};\n\nform.append('my_buffer', buffer, options);\n\nform.submit('http://example.com/', function(err, res) {\n if (err) throw err;\n console.log('Done');\n});\n```\n\nForm-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide \"file\"-related information manually:\n\n``` javascript\nsomeModule.stream(function(err, stdout, stderr) {\n if (err) throw err;\n\n var form = new FormData();\n\n form.append('file', stdout, {\n filename: 'unicycle.jpg',\n contentType: 'image/jpg',\n knownLength: 19806\n });\n\n form.submit('http://example.com/', function(err, res) {\n if (err) throw err;\n console.log('Done');\n });\n});\n```\n\nFor edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:\n\n``` javascript\nform.submit({\n host: 'example.com',\n path: '/probably.php?extra=params',\n auth: 'username:password'\n}, function(err, res) {\n console.log(res.statusCode);\n});\n```\n\n## Notes\n\n- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround.\n- If it feels like FormData hangs after submit and you're on ```node-0.10```, please check [Compatibility with Older Node Versions][streams2-thing]\n\n## TODO\n\n- Add new streams (0.10) support and try really hard not to break it for 0.8.x.\n\n## License\n\nForm-Data is licensed under the MIT license.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/felixge/node-form-data/issues" - }, - "homepage": "https://github.com/felixge/node-form-data", - "_id": "form-data@0.1.2", - "dist": { - "shasum": "1143c21357911a78dd7913b189b4bab5d5d57445" - }, - "_from": "form-data@~0.1.0", - "_resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.npmignore deleted file mode 100644 index 77ba16cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.travis.yml deleted file mode 100755 index 047f7e3d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/LICENSE deleted file mode 100755 index e699a7bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2013, Eran Hammer. -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 Eran Hammer 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 ERAN HAMMER 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/Makefile deleted file mode 100755 index 5f339bf3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -test: - @node node_modules/lab/bin/lab -test-cov: - @node node_modules/lab/bin/lab -r threshold -t 100 -test-cov-html: - @node node_modules/lab/bin/lab -r html -o coverage.html -complexity: - @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/README.md deleted file mode 100755 index 010bac6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/README.md +++ /dev/null @@ -1,627 +0,0 @@ -![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png) - -<img align="right" src="https://raw.github.com/hueniverse/hawk/master/images/logo.png" /> **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial -HTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz). - -Current version: **1.0** - -[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk) - -# Table of Content - -- [**Introduction**](#introduction) - - [Replay Protection](#replay-protection) - - [Usage Example](#usage-example) - - [Protocol Example](#protocol-example) - - [Payload Validation](#payload-validation) - - [Response Payload Validation](#response-payload-validation) - - [Browser Support and Considerations](#browser-support-and-considerations) -<p></p> -- [**Single URI Authorization**](#single-uri-authorization) - - [Usage Example](#bewit-usage-example) -<p></p> -- [**Security Considerations**](#security-considerations) - - [MAC Keys Transmission](#mac-keys-transmission) - - [Confidentiality of Requests](#confidentiality-of-requests) - - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers) - - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials) - - [Entropy of Keys](#entropy-of-keys) - - [Coverage Limitations](#coverage-limitations) - - [Future Time Manipulation](#future-time-manipulation) - - [Client Clock Poisoning](#client-clock-poisoning) - - [Bewit Limitations](#bewit-limitations) - - [Host Header Forgery](#host-header-forgery) -<p></p> -- [**Frequently Asked Questions**](#frequently-asked-questions) -<p></p> -- [**Acknowledgements**](#acknowledgements) - -# Introduction - -**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with -partial cryptographic verification of the request and response, covering the HTTP method, request URI, host, -and optionally the request payload. - -Similar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of -client credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme, -the key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is -included in its place. - -However, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of -replay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less -"chattiness" (interaction with the server). - -Also unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because -the client and server must both have access to the key material in the clear. - -The primary design goals of this scheme are to: -* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources, -* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where - to send an authenticated request), and -* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client - failure to validate the server's identity as part of its TLS handshake. - -In addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using -a query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk). - -The **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server, -which is beyond the scope of this module. Typically, the shared credentials are established via an initial -TLS-protected phase or derived from some other shared confidential information available to both the client -and the server. - - -## Replay Protection - -Without replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more -than once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when -making requests. This gives the server enough information to prevent replay attacks. - -The nonce is generated by the client, and is a string unique across all requests with the same timestamp and -key identifier combination. - -The timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards -are rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks. -By default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in -practice translates to a maximum of 2 minutes as the skew can be positive or negative). - -Using a timestamp requires the client's clock to be in sync with the server's clock. **Hawk** requires both the client -clock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types -(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response -to a bad timestamp. - -There is no expectation that the client will adjust its system clock to match the server (in fact, this would be a -potential attack vector). Instead, the client only uses the server's time to calculate an offset used only -for communications with that particular server. The protocol rewards clients with synchronized clocks by reducing -the number of round trips required to authenticate the first request. - - -## Usage Example - -Server code: - -```javascript -var Http = require('http'); -var Hawk = require('hawk'); - - -// Credentials lookup function - -var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'Steve' - }; - - return callback(null, credentials); -}; - -// Create HTTP server - -var handler = function (req, res) { - - // Authenticate incoming request - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - // Prepare response - - var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!'); - var headers = { 'Content-Type': 'text/plain' }; - - // Generate Server-Authorization response header - - var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers['Content-Type'] }); - headers['Server-Authorization'] = header; - - // Send the response back - - res.writeHead(!err ? 200 : 401, headers); - res.end(payload); - }); -}; - -// Start server - -Http.createServer(handler).listen(8000, 'example.com'); -``` - -Client code: - -```javascript -var Request = require('request'); -var Hawk = require('hawk'); - - -// Client credentials - -var credentials = { - id: 'dh37fgj492je', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' -} - -// Request options - -var requestOptions = { - uri: 'http://example.com:8000/resource/1?b=1&a=2', - method: 'GET', - headers: {} -}; - -// Generate Authorization request header - -var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' }); -requestOptions.headers.Authorization = header.field; - -// Send authenticated request - -Request(requestOptions, function (error, response, body) { - - // Authenticate the server's response - - var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body }); - - // Output results - - console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)')); -}); -``` - -**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local -machine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP 'start()' method. - -```javascript -Hawk.sntp.start(); -``` - - -## Protocol Example - -The client attempts to access a protected resource without authentication, sending the following HTTP request to -the resource server: - -``` -GET /resource/1?b=1&a=2 HTTP/1.1 -Host: example.com:8000 -``` - -The resource server returns an authentication challenge. - -``` -HTTP/1.1 401 Unauthorized -WWW-Authenticate: Hawk -``` - -The client has previously obtained a set of **Hawk** credentials for accessing resources on the "http://example.com/" -server. The **Hawk** credentials issued to the client include the following attributes: - -* Key identifier: dh37fgj492je -* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn -* Algorithm: sha256 - -The client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1, -1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline -character): - -``` -hawk.1.header -1353832234 -j4h3g2 -GET -/resource/1?b=1&a=2 -example.com -8000 - -some-app-ext-data - -``` - -The request MAC is calculated using HMAC with the specified hash algorithm "sha256" and the key over the normalized request string. -The result is base64-encoded to produce the request MAC: - -``` -6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE= -``` - -The client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using -the HTTP `Authorization` request header field: - -``` -GET /resource/1?b=1&a=2 HTTP/1.1 -Host: example.com:8000 -Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=" -``` - -The server validates the request by calculating the request MAC again based on the request received and verifies the validity -and scope of the **Hawk** credentials. If valid, the server responds with the requested resource. - - -### Payload Validation - -**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash -using the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character): -* `hawk.1.payload` -* the content-type in lowercase, without any parameters (e.g. `application/json`) -* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability) - -For example: - -* Payload: `Thank you for flying Hawk` -* Content Type: `text/plain` -* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=` - -Results in the following input to the payload hash function (newline terminated values): - -``` -hawk.1.payload -text/plain -Thank you for flying Hawk - -``` - -Which produces the following hash value: - -``` -Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY= -``` - -The client constructs the normalized request string (newline terminated values): - -``` -hawk.1.header -1353832234 -j4h3g2 -POST -/resource/1?a=1&b=2 -example.com -8000 -Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY= -some-app-ext-data - -``` - -Then calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data, -and request MAC, with the request using the HTTP `Authorization` request header field: - -``` -POST /resource/1?a=1&b=2 HTTP/1.1 -Host: example.com:8000 -Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", hash="Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=", ext="some-app-ext-data", mac="aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw=" -``` - -It is up to the server if and when it validates the payload for any given request, based solely on it's security policy -and the nature of the data included. - -If the payload is available at the time of authentication, the server uses the hash value provided by the client to construct -the normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value -with the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash. - -However, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed -at a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value -provided by the client after validating the MAC. - -It is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value -included in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided -by the client, the payload may be modified by an attacker. - - -## Response Payload Validation - -**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the -client to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header -as a response header using the exact same syntax as the `Authorization` request header field. - -The header is contructed using the same process as the client's request header. The server uses the same credentials and other -artifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with -new values based on the server response. The rest as identical to those used by the client. - -The result MAC digest is included with the optional `hash` and `ext` values: - -``` -Server-Authorization: Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific" -``` - - -## Browser Support and Considerations - -A browser script is provided for including using a `<script>` tag in [lib/browser.js](/lib/browser.js). - -**Hawk** relies on the _Server-Authorization_ and _WWW-Authenticate_ headers in its response to communicate with the client. -Therefore, in case of CORS requests, it is important to consider sending _Access-Control-Expose-Headers_ with the value -_"WWW-Authenticate, Server-Authorization"_ on each response from your server. As explained in the -[specifications](http://www.w3.org/TR/cors/#access-control-expose-headers-response-header), it will indicate that these headers -can safely be accessed by the client (using getResponseHeader() on the XmlHttpRequest object). Otherwise you will be met with a -["simple response header"](http://www.w3.org/TR/cors/#simple-response-header) which excludes these fields and would prevent the -Hawk client from authenticating the requests.You can read more about the why and how in this -[article](http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server) - - -# Single URI Authorization - -There are cases in which limited and short-term access to a protected resource is granted to a third party which does not -have access to the shared credentials. For example, displaying a protected image on a web page accessed by anyone. **Hawk** -provides limited support for such URIs in the form of a _bewit_ - a URI query parameter appended to the request URI which contains -the necessary credentials to authenticate the request. - -Because of the significant security risks involved in issuing such access, bewit usage is purposely limited only to GET requests -and for a finite period of time. Both the client and server can issue bewit credentials, however, the server should not use the same -credentials as the client to maintain clear traceability as to who issued which credentials. - -In order to simplify implementation, bewit credentials do not support single-use policy and can be replayed multiple times within -the granted access timeframe. - - -## Bewit Usage Example - -Server code: - -```javascript -var Http = require('http'); -var Hawk = require('hawk'); - - -// Credentials lookup function - -var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' - }; - - return callback(null, credentials); -}; - -// Create HTTP server - -var handler = function (req, res) { - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - res.writeHead(!err ? 200 : 401, { 'Content-Type': 'text/plain' }); - res.end(!err ? 'Access granted' : 'Shoosh!'); - }); -}; - -Http.createServer(handler).listen(8000, 'example.com'); -``` - -Bewit code generation: - -```javascript -var Request = require('request'); -var Hawk = require('hawk'); - - -// Client credentials - -var credentials = { - id: 'dh37fgj492je', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' -} - -// Generate bewit - -var duration = 60 * 5; // 5 Minutes -var bewit = Hawk.uri.getBewit('http://example.com:8080/resource/1?b=1&a=2', { credentials: credentials, ttlSec: duration, ext: 'some-app-data' }); -var uri = 'http://example.com:8000/resource/1?b=1&a=2' + '&bewit=' + bewit; -``` - - -# Security Considerations - -The greatest sources of security risks are usually found not in **Hawk** but in the policies and procedures surrounding its use. -Implementers are strongly encouraged to assess how this module addresses their security requirements. This section includes -an incomplete list of security considerations that must be reviewed and understood before deploying **Hawk** on the server. -Many of the protections provided in **Hawk** depends on whether and how they are used. - -### MAC Keys Transmission - -**Hawk** does not provide any mechanism for obtaining or transmitting the set of shared credentials required. Any mechanism used -to obtain **Hawk** credentials must ensure that these transmissions are protected using transport-layer mechanisms such as TLS. - -### Confidentiality of Requests - -While **Hawk** provides a mechanism for verifying the integrity of HTTP requests, it provides no guarantee of request -confidentiality. Unless other precautions are taken, eavesdroppers will have full access to the request content. Servers should -carefully consider the types of data likely to be sent as part of such requests, and employ transport-layer security mechanisms -to protect sensitive resources. - -### Spoofing by Counterfeit Servers - -**Hawk** provides limited verification of the server authenticity. When receiving a response back from the server, the server -may choose to include a response `Server-Authorization` header which the client can use to verify the response. However, it is up to -the server to determine when such measure is included, to up to the client to enforce that policy. - -A hostile party could take advantage of this by intercepting the client's requests and returning misleading or otherwise -incorrect responses. Service providers should consider such attacks when developing services using this protocol, and should -require transport-layer security for any requests where the authenticity of the resource server or of server responses is an issue. - -### Plaintext Storage of Credentials - -The **Hawk** key functions the same way passwords do in traditional authentication systems. In order to compute the request MAC, -the server must have access to the key in plaintext form. This is in contrast, for example, to modern operating systems, which -store only a one-way hash of user credentials. - -If an attacker were to gain access to these keys - or worse, to the server's database of all such keys - he or she would be able -to perform any action on behalf of any resource owner. Accordingly, it is critical that servers protect these keys from unauthorized -access. - -### Entropy of Keys - -Unless a transport-layer security protocol is used, eavesdroppers will have full access to authenticated requests and request -MAC values, and will thus be able to mount offline brute-force attacks to recover the key used. Servers should be careful to -assign keys which are long enough, and random enough, to resist such attacks for at least the length of time that the **Hawk** -credentials are valid. - -For example, if the credentials are valid for two weeks, servers should ensure that it is not possible to mount a brute force -attack that recovers the key in less than two weeks. Of course, servers are urged to err on the side of caution, and use the -longest key reasonable. - -It is equally important that the pseudo-random number generator (PRNG) used to generate these keys be of sufficiently high -quality. Many PRNG implementations generate number sequences that may appear to be random, but which nevertheless exhibit -patterns or other weaknesses which make cryptanalysis or brute force attacks easier. Implementers should be careful to use -cryptographically secure PRNGs to avoid these problems. - -### Coverage Limitations - -The request MAC only covers the HTTP `Host` header and optionally the `Content-Type` header. It does not cover any other headers -which can often affect how the request body is interpreted by the server. If the server behavior is influenced by the presence -or value of such headers, an attacker can manipulate the request headers without being detected. Implementers should use the -`ext` feature to pass application-specific information via the `Authorization` header which is protected by the request MAC. - -The response authentication, when performed, only covers the response payload, content-type, and the request information -provided by the client in it's request (method, resource, timestamp, nonce, etc.). It does not cover the HTTP status code or -any other response header field (e.g. Location) which can affect the client's behaviour. - -### Future Time Manipulation - -The protocol relies on a clock sync between the client and server. To accomplish this, the server informs the client of its -current time when an invalid timestamp is received. - -If an attacker is able to manipulate this information and cause the client to use an incorrect time, it would be able to cause -the client to generate authenticated requests using time in the future. Such requests will fail when sent by the client, and will -not likely leave a trace on the server (given the common implementation of nonce, if at all enforced). The attacker will then -be able to replay the request at the correct time without detection. - -The client must only use the time information provided by the server if: -* it was delivered over a TLS connection and the server identity has been verified, or -* the `tsm` MAC digest calculated using the same client credentials over the timestamp has been verified. - -### Client Clock Poisoning - -When receiving a request with a bad timestamp, the server provides the client with its current time. The client must never use -the time received from the server to adjust its own clock, and must only use it to calculate an offset for communicating with -that particular server. - -### Bewit Limitations - -Special care must be taken when issuing bewit credentials to third parties. Bewit credentials are valid until expiration and cannot -be revoked or limited without using other means. Whatever resource they grant access to will be completely exposed to anyone with -access to the bewit credentials which act as bearer credentials for that particular resource. While bewit usage is limited to GET -requests only and therefore cannot be used to perform transactions or change server state, it can still be used to expose private -and sensitive information. - -### Host Header Forgery - -Hawk validates the incoming request MAC against the incoming HTTP Host header. However, unless the optional `host` and `port` -options are used with `server.authenticate()`, a malicous client can mint new host names pointing to the server's IP address and -use that to craft an attack by sending a valid request that's meant for another hostname than the one used by the server. Server -implementors must manually verify that the host header received matches their expectation (or use the options mentioned above). - -# Frequently Asked Questions - -### Where is the protocol specification? - -If you are looking for some prose explaining how all this works, **this is it**. **Hawk** is being developed as an open source -project instead of a standard. In other words, the [code](/hueniverse/hawk/tree/master/lib) is the specification. Not sure about -something? Open an issue! - -### Is it done? - -At if version 0.10.0, **Hawk** is feature-complete. However, until this module reaches version 1.0.0 it is considered experimental -and is likely to change. This also means your feedback and contribution are very welcome. Feel free to open issues with questions -and suggestions. - -### Where can I find **Hawk** implementations in other languages? - -**Hawk**'s only reference implementation is provided in JavaScript as a node.js module. However, others are actively porting it to other -platforms. There is already a [PHP](https://github.com/alexbilbie/PHP-Hawk), -[.NET](https://github.com/pcibraro/hawknet), and [JAVA](https://github.com/wealdtech/hawk) libraries available. The full list -is maintained [here](https://github.com/hueniverse/hawk/issues?labels=port). Please add an issue if you are working on another -port. A cross-platform test-suite is in the works. - -### Why isn't the algorithm part of the challenge or dynamically negotiated? - -The algorithm used is closely related to the key issued as different algorithms require different key sizes (and other -requirements). While some keys can be used for multiple algorithm, the protocol is designed to closely bind the key and algorithm -together as part of the issued credentials. - -### Why is Host and Content-Type the only headers covered by the request MAC? - -It is really hard to include other headers. Headers can be changed by proxies and other intermediaries and there is no -well-established way to normalize them. Many platforms change the case of header field names and values. The only -straight-forward solution is to include the headers in some blob (say, base64 encoded JSON) and include that with the request, -an approach taken by JWT and other such formats. However, that design violates the HTTP header boundaries, repeats information, -and introduces other security issues because firewalls will not be aware of these "hidden" headers. In addition, any information -repeated must be compared to the duplicated information in the header and therefore only moves the problem elsewhere. - -### Why not just use HTTP Digest? - -Digest requires pre-negotiation to establish a nonce. This means you can't just make a request - you must first send -a protocol handshake to the server. This pattern has become unacceptable for most web services, especially mobile -where extra round-trip are costly. - -### Why bother with all this nonce and timestamp business? - -**Hawk** is an attempt to find a reasonable, practical compromise between security and usability. OAuth 1.0 got timestamp -and nonces halfway right but failed when it came to scalability and consistent developer experience. **Hawk** addresses -it by requiring the client to sync its clock, but provides it with tools to accomplish it. - -In general, replay protection is a matter of application-specific threat model. It is less of an issue on a TLS-protected -system where the clients are implemented using best practices and are under the control of the server. Instead of dropping -replay protection, **Hawk** offers a required time window and an optional nonce verification. Together, it provides developers -with the ability to decide how to enforce their security policy without impacting the client's implementation. - -### What are `app` and `dlg` in the authorization header and normalized mac string? - -The original motivation for **Hawk** was to replace the OAuth 1.0 use cases. This included both a simple client-server mode which -this module is specifically designed for, and a delegated access mode which is being developed separately in -[Oz](https://github.com/hueniverse/oz). In addition to the **Hawk** use cases, Oz requires another attribute: the application id `app`. -This provides binding between the credentials and the application in a way that prevents an attacker from tricking an application -to use credentials issued to someone else. It also has an optional 'delegated-by' attribute `dlg` which is the application id of the -application the credentials were directly issued to. The goal of these two additions is to allow Oz to utilize **Hawk** directly, -but with the additional security of delegated credentials. - -### What is the purpose of the static strings used in each normalized MAC input? - -When calculating a hash or MAC, a static prefix (tag) is added. The prefix is used to prevent MAC values from being -used or reused for a purpose other than what they were created for (i.e. prevents switching MAC values between a request, -response, and a bewit use cases). It also protects against expliots created after a potential change in how the protocol -creates the normalized string. For example, if a future version would switch the order of nonce and timestamp, it -can create an exploit opportunity for cases where the nonce is similar in format to a timestamp. - -### Does **Hawk** have anything to do with OAuth? - -Short answer: no. - -**Hawk** was originally proposed as the OAuth MAC Token specification. However, the OAuth working group in its consistent -incompetence failed to produce a final, usable solution to address one of the most popular use cases of OAuth 1.0 - using it -to authenticate simple client-server transactions (i.e. two-legged). As you can guess, the OAuth working group is still hard -at work to produce more garbage. - -**Hawk** provides a simple HTTP authentication scheme for making client-server requests. It does not address the OAuth use case -of delegating access to a third party. If you are looking for an OAuth alternative, check out [Oz](https://github.com/hueniverse/oz). - - -# Acknowledgements - -**Hawk** is a derivative work of the [HTTP MAC Authentication Scheme](http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05) proposal -co-authored by Ben Adida, Adam Barth, and Eran Hammer, which in turn was based on the OAuth 1.0 community specification. - -Special thanks to Ben Laurie for his always insightful feedback and advice. - -The **Hawk** logo was created by [Chris Carrasco](http://chriscarrasco.com). diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/example/usage.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/example/usage.js deleted file mode 100755 index 8c063f6c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/example/usage.js +++ /dev/null @@ -1,78 +0,0 @@ -// Load modules - -var Http = require('http'); -var Request = require('request'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = { - credentials: { - dh37fgj492je: { - id: 'dh37fgj492je', // Required by Hawk.client.header - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'Steve' - } - } -}; - - -// Credentials lookup function - -var credentialsFunc = function (id, callback) { - - return callback(null, internals.credentials[id]); -}; - - -// Create HTTP server - -var handler = function (req, res) { - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!'); - var headers = { - 'Content-Type': 'text/plain', - 'Server-Authorization': Hawk.server.header(credentials, artifacts, { payload: payload, contentType: 'text/plain' }) - }; - - res.writeHead(!err ? 200 : 401, headers); - res.end(payload); - }); -}; - -Http.createServer(handler).listen(8000, '127.0.0.1'); - - -// Send unauthenticated request - -Request('http://127.0.0.1:8000/resource/1?b=1&a=2', function (error, response, body) { - - console.log(response.statusCode + ': ' + body); -}); - - -// Send authenticated request - -credentialsFunc('dh37fgj492je', function (err, credentials) { - - var header = Hawk.client.header('http://127.0.0.1:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'and welcome!' }); - var options = { - uri: 'http://127.0.0.1:8000/resource/1?b=1&a=2', - method: 'GET', - headers: { - authorization: header.field - } - }; - - Request(options, function (error, response, body) { - - var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body }); - console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)')); - process.exit(0); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/hawk.png b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/hawk.png deleted file mode 100755 index a0e15cda0144a7d7ed222e74a2ea4afbab32555c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6945 zcmb`LWmMJCv-f}Gp}XPGEsgY{>j2V?(#ipm?(Qz>lJ1c1@(=<7lG5EE0@4lF|FfRD z@9$cBe`fYtGdsSoW>1ucnj$s^1qJ{B*h)}2EdW4Z`{%>ZQ2+5=R}=d`gYF15bosYZ z_|HTjN|BWY01R~-Sy>GYYX?^c7i$McS|wRoT1RIGE1ORr0Kju8M;oT2eMlmHvvw(? z5*e7H;-E#0Myn+g6G)WE%ua`nryNOFut==gi!U#aOgWq%i4-3n7)z|lffbFh0NSA| zj1MV_j2?N|^eM8P>$=(d`P@7&v0r_W(>MWwqhX~%`85Rsu_|P!@i#(-1_n2GxTJzG z7##sTw8r;zE>8>yz^y+7@`@e~>H!cuXE4zKxN0_>hbrO)_qR;uJA}Yc1h{LWunJlr z5g_FqFH;IgDIf&qWH4(3`N)9TsHMd=puq{4u>|bR0D(ETnLY@>+Y~xtg#1K+mheNQ z9AGU5R8Qzd%L4{H0Fjl-fC#X_3GgWCTS0-kRscSZhuHw2VF5gvkzs5AvJYT3%)sCY zgk}On3g`NevsX2E`~S4{%xr+PGm6Luy+z}60_p2>QL~OKk-j1lG)FYglH%&~$|UCt zdX2krF$MtniNyb2d-3Esj#D!}E*Rf}W6Jsa8|n+ag~j&s?nITN6aZ|x`cFM`a5qu} zilGMDJr^>aAX}SY=DXd*ST*2EH3RvFOZpd%|ItRi;B))p;_lAQg7SdOTk{cpzh_vV zDO~^Q)15!$@#boyXNxh2&p1dC`F5jk?D9<s)kG3{sKv@&g5qN<=F1~^hJHZFqTPU< zXj_xODPArs_JXg3K1wEu?K{)-%loZ$jt3-(bpfF6qXdFaB4@d=CDOGD3!Z^1eCq}P z&O04?f3cz=1zLw}PI$bWN<Jy(GXa5CN=Z%tU?RuJr8CkfIfMoPa`{2*b<&iVy<{A4 zRH|N-m0rw8Gr>?9#(_Q=JQ<AlfmF_BY}LUstl>ZF!0cw+zofvg;hNUr$&NT&eY$Np z;*PlY=4iRStX)Cq$kM}TgywWhkq8#i1`P3Nq?uv2biGhyf*3~HACW|w^eTx0P+qNQ z9a>!|_*~o>Q6%D>LPw(5Fu)i57~ZAGn-bKZDgFzqS+>1gh$2*>5OeaqD{oc;Nq+XE za}$MltYE?ZWR*4UQi6o+5D)x-48%Y1iHB>jU#4D|13lStw4S~it7?#<POloNGwRB6 zqTU0UAV?mLE{N<QLu*bg4K;XUptb-lr=?<ijlYC0gpL%d*~dbkT&~i@+<|{LKxV<m z8({$DV3;FFAmqmLiIg1>VkC%?<zs38jHpy!tTRn8tuSq`#c;?`k^LG<!I1o8>Ah_O zNF;@W_SJCMPR>sM4*w424&C`%j2sIor{Y`fEmp0OkILk`c)PE6Q9oqxN$VD6X|0wQ z=->+^7|DDsXwj<Gj3_63?Up6-GlWD*rQ~a2>I{W7sr8Lb?SX3t{%R_<TKc5^^ys1D zLHYsGr3V&vIC02OB#f0jn+!w-BljSy&3IEvJ`+Peq{Ab`dz7)CiJR%5Yrx*Z?n|6F zf|076%A88c&aG2XSz5VPiK%;`JF1gVVWRC<qoB*Ly<LI+E3HbmGDqV`n^GHAAyyty z2`hKdku3H%e2PLf?0?g*E?cabUvIkIHAstTN#5wmL1&9y748-!Fu+{@bJ5qGy))wp z+!-TYSy3P&%dgC@->7wwVkHUM&TzW@;;M$e&svs#;UB$5bjr5HMp^p$O*`+0cea&j z>1hU4&??O;#iMS)n&YyZ(r)=q!-pUo=^<s7cPxsqgmILdeeFf<)iR7S5>;{0s~WCK z+Y-uxPC1Wn_GKp-xjiO<xo;fG*1Wp+@2UK_pLCw=?#r$eu?$cfu^3U8vBt?D-vyi; zAYksH<ugrL<9;dG67y8^^v%%3_9;lwtU{auZmiAVyKTm8yFt6bB4$)(I%XBs->N5B zTB_}(Y^7pv#NG`39Q#@Lb1qXLTby^EZ$EoKdp>);)y&A#h@+*vrR{@K!;Vp@;YmxE zeVCDmVTpmRk#VEK*PO3RbDdv1%kazE)soe!a_3<Eb!RO<S}Iz}>vk7Vmup(=TKvpm z7NoG&?=}4=$=%6*9e#07;vnpZMVu<I5!m0Q$(cx0PjoG7{L6`?-}lS3LvEPC1m45~ z|8@)EDBFNdj&}BpB8(K)?h<kl855-vJj#_W!Ie!pxH{auqwIR+WW4D;eU+2lnB8|= zzFd1Ecw%!Bv646TI*%>akl$spe^_=yb9YJ-GcT3LcD>qPT~<8^*1XTaZONUe|8>5u zwZx<H#{862;#$HvZ(Cv;BDBW0W@tJl1aBQ~9aZml$TbaHmknTedH>@5G6j?cG9kc_ zqJpG@-XcESdi&CSi<cB#{&3x}cq|>8-!4rooe=yrc(?Z}o%Qga&tK_o_A|y4$8B)J zH2e?dCPC(V<}v;LSS(=?Vfx{c@s5!O6jQwE0v=N<vM%d#_i|}+YuPYfb&*<5WdU}H zO0JKPC83Vj9g>4wR)%A<1~~>wpH!$sxY%n1?LYObKOSF1Y~^fWZu^jCa1R?hdKHZK zU51sBRB#b+h^9%siBuC#`74dbUQQCrbWZ5O6p!K62kwK>b599QMJ~v`W2aU-hq9}B zC;dt667XXD&R@c@+aAhN@ww{__M6pg(Oi-&cUn6>anWwxkfg-VPBN8rs>v;|->^L^ z_tEMPVGYmU?PFTGsZ&8eY#TpUqZo2xw8)em=oqoivx6F7AM~xh{frtBNvq0z_49bF zab)?k(3jJ^mt%rHg3Y9sl5iD$PO!mVclAe+28ff_GR8JB%Byfa)M`jubPK!Pta{b4 zetM06H?y~@ZIDUtNN{g6g6$EeF2-({-_gqav9Y=Vx8ZuT`F(f}r37(QbPdrmX*zMh z0_%$BE@gzn$hXXul%|TRf%f+kR?}98duyDzZ*kHp)A!PG?6DV@ny}aPnvSoo<(IkB zf3hxjhP24G7kz`Yb$uxNG5%9bQm0twQs-Vr@ML<m*?j)ie(HqMr|bIlpV{TNT{lk> zKYEsR5p-2&t!6(wC_OaZNY+GE9^R%s*cpFSvvWEgLYhW;0x{sU%(wrV1y76XXeG?O zI#R?LqUm|gIrZSg7R1(#`!cx2;3(&{b9jTkenX8dy5t_~Q@shAp>YSpz}z2Yvd*&< zvbD1w-deovP#=?+n)|)x{iwK1gZt$*#L!FmLg$Cg(qZsSGVFXJHYYX5&!6jV#ca8- z#b@7geElP?!)XVe>*lolOU%Alm)Q8b^ETJ>hUHyC{WkrqT2WKG->$zQ&&f0DL!Dnb zvufJk*|wi}cQ^Z3-5gTp3XQK`c6*(Xyv)t!iiodvUwAv*e80I`Ct3A(W_cPP?OgO= zIr-Y9-er0zbu7IoyBaYo`Sy8b;dCY7BitkZVroV41~n{X;yLju0aq3!Av0k#96S6d zS6D(sWJ}Wd>F}{kcH;d6b1vy~;qzz>DG9g#?d;L~_*BMJLHc=m@;5u*lBeJBBl6ni z!M;K2o*$n4ye5}=568V8D<0s}qIF#L9bei2))(u$`YY|pvWH~y<m4A*q>PJ4OMcGf zfAuD<B~(il0KAz1ATR^~?q2@cLjZ8&0f66T03ezH0Hh8{rr-b7qj+zW<fL^xm;U5< zr4WB7j`(ICj*w{l-bq@A=-<G5Cxyn2z}tJA|CtOj7$=vRAs0vO!AmAYBmfdoSV41A zB8r@nLy#{D#x#?|C;E<(qDrPfW@dG+I6LseWzA>Rxb^<Z$K{*L{TR(fM@L7R>AdsN z8hzgknK1H!@qQ)heF3X-k~Oj`(mkSIAVUzvM!BzdR1#XSE2~D<dFS^fY9glnKMp7r zt;EF)fqQpr`YQBjNrkNKF!fh*et%|3t+mU!#jp&}be0OtQfw1j$mP$}OwCB@O6jg< z3B+K>MOU?~QTt|Qa<V>$3Pz{Vh2>DT{|)*Q*670ji|CX>*69C$T`T(k!~b;ne?Q{? z?f$>K|8p7TkODc@90%~JBo-OgC8{@~55n>9#{ls<3<KmbkQI{cMc1Dj<a>nGAitoe zz;P+teDXRK<+~ar36KOL2~zEH)rjm`77_>%gs}Rl=Nh<16<u(jnSO4;SU~p0-~gV{ z$B^AW-V}bdn}`6!14EA8ka*gG^;RM>)Gxqg^Rf4h=*v3dCuE7nr#nA0^uMTeqS}2Q zq~f*(xOYa05Rd|u1RKrs^id$#RLP1Ab0+ZGAVWAs5MM2V;KE?fHw_6IP#V%~{GE{n zN)27ql+=dIhP|0unrJThnTRFI(ilDN={ix{3Jz7_-qBQXq>kc-2OOh7%?JsC;;L-c zZ-?^*2eN12C0%n2mwRAxk>*pkJwB+LZ0C?!tY)W8{0;Kmcq_YwS3wOAY2m*+D7Fof zMz^l(1d9Gx+f>2KD^I<#tyA$5E9+;bwn8I+n85MGy3^iE4K&zj0rYM`W_j0KT8H7a z;>S(ZqTx6l;9JdjQFy&xsL;MthE{EQ;2=7F1;xfA*-=6L6KyWWI}`|3SEd%XI)-GU z{DAXe(h$8a@*6yRmNog03d&gz3#eLP7tksy6<9mM8a)<iO*N3G#AKcYTHHgF5pK2R zx<PK1X<Usvtzd+{Z~h_F`7m{e-Yp`+eapC*x|)BrT~JXwXX%JPKW<2E3bT!dRXtyL z)+99p+|C%O6L<Ws$CFpae;j|je+A7;m|0!^V{n;Zl3sD~8$3bt7I2wa3)rRmnx{A3 zxtJUSk`9V#FM)fG*;|k;nT^qiE_;AMO{BvUo@QAQHyo((v5xBpqBMHwJ&}&;5?R(M z2>PNcrZ#2kqkk+OVD9f9;<~%yi|3d=G1e0b!)2KSlr}m`JN35ht2@O8!{zBEyCJ`Z z=<qMJ!v4hnEk@;8r9A#S1`C?uDa9yAY!F`OG><mLdK{7MNQGZQ?tZ%=-wT)4laQ&A z$aV&P+1>;vM0=VtjB!;HEz_?wG9)NygfPU1nhug#;|^tD*u@wbhK-OF+Fe*N9K1Hi z{)_0C2mTrl!~-2mY&w*&SMEY)jDzDgC5|Q!7{&F}ZAP>?{E(*BXPldOk}*ZMP@j>D zVwx-9S)mQQt-N6oYdE>AbulJfN;7H~0k(|j0P`qHbr_W7M%L%2`R+NY6Sqd*lm4Lr z#s{cqqVA{K@I;oAeNg7xB>o8oY<e4<WYAPF1+mU_TY2%U9-;XX@I9&fzB%@b{-rSH zzPpKVF&%F$#&lS-?n6*<=ElBbC03legII8r$COcKi+s-DW%9L1%D-kj5h^c!L{SD6 z=;v^bP<kMKFKA?eU!mK=Ae8Vq&zQIBh2ZWsoh9+3ZA627?zDp(mLj&yG>S)OD>q7+ zZxQkctX{+91pRI$6`i!gA~wi9!<D8tS^Uc-MX$nGu$%q{*I31VoerRnwmXzAGJyID z5Xhab9W?meNpI718x?rqCUc_EHt_3A<2??n747apov;VTP0Z0ba$OyHyk(RqilpMu zJzi3YwvqoUUfXo$<A*3IifM*!8$_E}qLERl0@v~3-l2^m<krrMV-8l<bn`E$xA$f- zQNKDfP|mJo4s{V;@StV9KSVYt(yq|QX0$VAkhx;<h82Bc<5G|b3K#iyPSaVMem(_m zWOL5yP1;}Ou(2gpUVm=&2%WZ(_SedULv+!6Avgnm`p2HV9=}<5ws4jQ)0pe*ap6=w zT<8ny6R4$wiS>-jN`8?^a=CcWez(_dU4O-LwmbudK7R{%W$w0w+DJ%sId;U&>pyKl z_k+G!?}|3@5qu*slng#iC#jeLKWLC8-bY)*o{FK(uH5xBx%LRBG@wV`aV!?Y;+9Hk z#w6!h8W&PjJb!Rmn!TJ*n(7d*oaE?yt|RD*l-X>=B>e{&EKoX~*6MrCCS%Mm=Gl<o zobyyOHFCL4M%+_v<VWGHZlCbSCl&O{Ar&4Ls^Dp45u}A+JT|8Gu|dDaoq@=kxWAWb z3=C_e?u2G0@kb|=4<2NWu+WEz?+enEP_`&5q&+mb75Z6%?aD<^NR+!wp<?8^y@LI` zD0^x~oe@9%^^3)Z0x=ttse(3_E7N0CAYtUmH*v}m!Kb=Qtg~g(zl1EjSe&0$n_Z!n zME;K<70~Zeyv&n_WMjSCl9s`lHE=T63GJ<6c{_T5eiX{D0=j@ayVV2lp+`CN9sI#^ zS9iqUc4Sk*Qol-APo{Lpe>k4xDwDp)A#c5Y=kH_YyAO#FsmfqH{SpKD)>&1R@-5s` z&yuh6+|aztcA4t@LU$O~15=C-BgtK0^SDBbJiG3CRuU&@I#I_J)nc5?KR(JxjA*-8 zy3DtioTv~Rhq<wSv+<f?bL*~9eABm-hLHXRlP4YzGb&rRI7vx=na-q-jEO{Gqaowa zGk{V|9H+0s@Y&So-M-ThB#iep_I8xHH^SVDnFZQN6+Ll$-U8b%9!?Cvgeglbw*w1( zK~2%>HUMSa?s#J0C%r^$l&nVLIeto0Z)~Yfaj*-@VEufJ5z&jK*a_yNbkD$$`HCtm z%Y80aV*z>0X?UU_W20r!n!@6vFwOSgT09Yq+ky#DinS!>K>Kh9y-D~P=@p%o>XB`1 zqOph-sE(ph9wLc5vgfrjz6FLYo0kf^!agW5%pyK34aM^Z|KU;z$Ae4`H6fnT5PlN- zyQf`=wYoYgr@rDI`?0n)=%OJOt#~~^6ARll;PHeYHOWig0h8I;-FS&$e1+i(g8*>< z2yYsRvSKu%u}oYqSmsC>hvuB@#&<g5#tGmPR-3b1Wp{qQMY~<tPH|w(^tj61e~6e8 z5>}H1%`*5_JTV^}oT2~wKls)Igp41urHq6&fAkhd>s$|tF7U?b!gVDg`q1G5m%gPa z2fT(Ss;#!yO|t%33pUoG_Yq|H>*<rC54cuH2MlJ>Qr@6#7N9y>hlGm&YRTmfNoTe* z9tkU&Y5K1BzJ+gH&igH=e$4HgxxZy$WEEYR@Oz^u!^WyO2FI95>))u5PaGA{k}|fF z@kL<G7Wg0lYOUM+dYmqts@X!#r&==IZupGV`dRmoWGx1r`ssEJd2Uu=Z1bce{zeZo zu2d8uy%PF;2+natAbm%><)`bVqxY6aP@C)5{;JuhG@pj{IyZ7vu-sG6L<GSf&ryol zvY_I643|(=;)<zX#BdXKt+PpW)|_(t&!dzJDck~bvq5B(RD7{1CgVw^NA)@PrM{%d zT^@Y7Ta#WgA79U6wW-RpQ+uPAG!_J<q*p<~l+Hv~Xp8grYpxtGzt~J+!G^{9c#SlU zbj1qVMLe7JI>nI21PxJ5F{PfkViNOMt)d3~96oMzTCEvGwM=6iD%{N%>|Ab~1z4%Y zod0>;>~L5`2Z(OnlwB)REDl+WVNE|3wyVp)lT|4oPbR$wN2?`(z)Mwfjm~lkY+k+L z8T+Jz7%;r;9zbcIP221`l(AM0^<qSqmiO2(%xqUktjIb4Ko|nD{1QIbA<`3Rw#HGm zh_BSsfN`6wVWdyj^hqn6Iz~x|Z}_VIivv|2*hBdAI>W87{LT-Tu!cREp&g@89xFbp zEG)y4^9b?LUF>A)Ge56jY0uJPPfW_Te3?yNeDUM<mP$w8*`lhY|9mZ2(m<StE}5@+ zlswe5*5xdElG3Hkw-xx-y&f-jo}&v#lCc4Y7gd=PS6o63qdXkjT4gpCo#xM|h8`wH z&tKSh_bbo{^&ph%7F`HL7(%p-GayHismGxzC`!ghr8-j_`AXhFkk6N~i;QcFG0kLF zuX8_lXXo5n`H}_-!<f4WG#W5eo*mORY+7V`b1hE9-(M&3yqVuCVBkS;W8Us3YHV4I z%r^7RpGPB0M2Ap`<udxzT<*|mCntf&X847AZ2L;f#=eFf%3o`ovVzPu6UUvLro{ob z;KQrF+kD*JX?b~eaV=0tr={9m#0Q7`9QegVUw}caj>+Zcy?!!~of2UM?ho~&^Zb<v zrv=vUj&IY0!j%8z#GuS%g^J9i#JR&Kcv{5s2soh9f<}lQ@9$Iz-?xtYAq#eoo;|0F ztI7tbJTEqe6=1aC8G6VT@jmxtp>!8uH78dl)C_mn7)Od=&LM2Cxtr$W{?&d(UyBc! ze4lc}Hdb)hlA-;GWVb3Aw>X{0XyEblvr{|OV2%UcGv~WfC&f(a?EW6_m<Yi;oWZB2 z=oDG%w500DdWl-4zAGVh9*6$0^Vga@>a%3?o!IilS-|Pm(2zGdd2ru>D>r|FHNJ3E z3i2qjqE;<N&$_HT<D^FUfTvJ7o?0u4Bg>%rvs=d1GLHLUk(fp$eQG8fH9Hg5@{je& z6>hW=m(C6E$P{QQlD;7PxsHf%?I*|wX?{u6D1;Zm2;)z|zxa1c-@4*Nk~B&B8}$fJ zChhS^{ywpCncrbF5;7X*sh~`^$M^BAVD*~@+HU#gN9(xTGv(g8HS3uFvA?&Z_lDqf zZJv2KEW$WR)I7xgMq5%OE1mX3*lQ5<*ZV_7Y=>9=wNcBVDA_T2G7$5Ibc5cu_|ukV z+d!vb2bcMU=D?ye57xQwf)$98oB8j;E=c8W@b#dvLk7h|GUOedq@gur%S<$4w!3hL zVXEtAi{5=sy2ckrws_a!ZR6bYo#`6t(R!X(RWs8kk%m3y3Vl-I3dcXF5C#K;x4b4) zAx3GYAHQvB=C$?-UT$TG>hdxRnk@L9$c_8C`1z_eeLYuW*Sc~RKHn4FCG+6@sassg zOC{6~XM!`4^^eqD4t??i`OUe%u`Ww?dEK1{F7Pe&8J~$o^Xf=hN!Ce3WNp@lCot^U zg8qsQTDy`Ba$)lHIHw#?g`Oq55Dl8Yh4r|+Zk?&As_qYMFfo5+Uh|aHse$|j`HPLb zEsdD&O3>Mtx-r4Qy9@@wY!?HC&R=$p2#e8=!R@xWg2@liUnQZ!%1PnukEnO7h^Xdj z`j<!@2zI|yZkS`EdX+c)d^nqF)*Oyh{(eIO`bIl*@vxE`{`DXLC3!Wu8X2?T{{m)1 B50U@? diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/logo.png b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/images/logo.png deleted file mode 100755 index b8ff5901718a8a5529d25602a4a581d2f68d67cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71732 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 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/browser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/browser.js deleted file mode 100755 index 27494f23..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/browser.js +++ /dev/null @@ -1,485 +0,0 @@ -/* - HTTP Hawk Authentication Scheme - Copyright (c) 2012-2013, Eran Hammer <eran@hueniverse.com> - MIT Licensed -*/ - - -// Declare namespace - -var hawk = {}; - - -// Export if used as a module - -if (typeof module !== "undefined" && module.exports) { - module.exports = hawk; -} - -hawk.client = { - - // Generate an Authorization header for a given request - - /* - uri: 'http://example.com/resource?a=b' - method: HTTP verb (e.g. 'GET', 'POST') - options: { - - // Required - - credentials: { - id: 'dh37fgj492je', - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - - // Optional - - ext: 'application-specific', // Application specific data sent via the ext attribute - timestamp: Date.now() / 1000, // A pre-calculated timestamp in seconds - nonce: '2334f34f', // A pre-generated nonce - localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided) - payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided) - contentType: 'application/json', // Payload content-type (ignored if hash provided) - hash: 'U4MKKSmiVxk37JCCrAVIjV=', // Pre-calculated payload hash - app: '24s23423f34dx', // Oz application id - dlg: '234sz34tww3sd' // Oz delegated-by application id - } - */ - - header: function (uri, method, options) { - - var result = { - field: '', - artifacts: {} - }; - - // Validate inputs - - if (!uri || (typeof uri !== 'string' && typeof uri !== 'object') || - !method || typeof method !== 'string' || - !options || typeof options !== 'object') { - - return result; - } - - // Application time - - var timestamp = options.timestamp || Math.floor((hawk.utils.now() + (options.localtimeOffsetMsec || 0)) / 1000) - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return result; - } - - if (hawk.crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return result; - } - - // Parse URI - - if (typeof uri === 'string') { - uri = hawk.utils.parseUri(uri); - } - - // Calculate signature - - var artifacts = { - ts: timestamp, - nonce: options.nonce || hawk.utils.randomString(6), - method: method, - resource: uri.relative, - host: uri.hostname, - port: uri.port, - hash: options.hash, - ext: options.ext, - app: options.app, - dlg: options.dlg - }; - - result.artifacts = artifacts; - - // Calculate payload hash - - if (!artifacts.hash && - options.hasOwnProperty('payload')) { - - artifacts.hash = hawk.crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType); - } - - var mac = hawk.crypto.calculateMac('header', credentials, artifacts); - - // Construct header - - var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''; // Other falsey values allowed - var header = 'Hawk id="' + credentials.id + - '", ts="' + artifacts.ts + - '", nonce="' + artifacts.nonce + - (artifacts.hash ? '", hash="' + artifacts.hash : '') + - (hasExt ? '", ext="' + hawk.utils.escapeHeaderAttribute(artifacts.ext) : '') + - '", mac="' + mac + '"'; - - if (artifacts.app) { - header += ', app="' + artifacts.app + - (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"'; - } - - result.field = header; - - return result; - }, - - - // Validate server response - - /* - request: object created via 'new XMLHttpRequest()' after response received - artifacts: object recieved from header().artifacts - options: { - payload: optional payload received - required: specifies if a Server-Authorization header is required. Defaults to 'false' - } - */ - - authenticate: function (request, credentials, artifacts, options) { - - options = options || {}; - - if (request.getResponseHeader('www-authenticate')) { - - // Parse HTTP WWW-Authenticate header - - var attributes = hawk.utils.parseAuthorizationHeader(request.getResponseHeader('www-authenticate'), ['ts', 'tsm', 'error']); - if (!attributes) { - return false; - } - - if (attributes.ts) { - var tsm = hawk.crypto.calculateTsMac(attributes.ts, credentials); - if (tsm !== attributes.tsm) { - return false; - } - - hawk.utils.setNtpOffset(attributes.ts - Math.floor(Date.now() / 1000)); // Keep offset at 1 second precision - } - } - - // Parse HTTP Server-Authorization header - - if (!request.getResponseHeader('server-authorization') && - !options.required) { - - return true; - } - - var attributes = hawk.utils.parseAuthorizationHeader(request.getResponseHeader('server-authorization'), ['mac', 'ext', 'hash']); - if (!attributes) { - return false; - } - - var modArtifacts = { - ts: artifacts.ts, - nonce: artifacts.nonce, - method: artifacts.method, - resource: artifacts.resource, - host: artifacts.host, - port: artifacts.port, - hash: attributes.hash, - ext: attributes.ext, - app: artifacts.app, - dlg: artifacts.dlg - }; - - var mac = hawk.crypto.calculateMac('response', credentials, modArtifacts); - if (mac !== attributes.mac) { - return false; - } - - if (!options.hasOwnProperty('payload')) { - return true; - } - - if (!attributes.hash) { - return false; - } - - var calculatedHash = hawk.crypto.calculatePayloadHash(options.payload, credentials.algorithm, request.getResponseHeader('content-type')); - return (calculatedHash === attributes.hash); - }, - - message: function (host, port, message, options) { - - // Validate inputs - - if (!host || typeof host !== 'string' || - !port || typeof port !== 'number' || - message === null || message === undefined || typeof message !== 'string' || - !options || typeof options !== 'object') { - - return null; - } - - // Application time - - var timestamp = options.timestamp || Math.floor((hawk.utils.now() + (options.localtimeOffsetMsec || 0)) / 1000) - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return null; - } - - if (hawk.crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return null; - } - - // Calculate signature - - var artifacts = { - ts: timestamp, - nonce: options.nonce || hawk.utils.randomString(6), - host: host, - port: port, - hash: hawk.crypto.calculatePayloadHash(message, credentials.algorithm) - }; - - // Construct authorization - - var result = { - id: credentials.id, - ts: artifacts.ts, - nonce: artifacts.nonce, - hash: artifacts.hash, - mac: hawk.crypto.calculateMac('message', credentials, artifacts) - }; - - return result; - } -}; - - -hawk.crypto = { - - headerVersion: '1', - - algorithms: ['sha1', 'sha256'], - - calculateMac: function (type, credentials, options) { - - var normalized = hawk.crypto.generateNormalizedString(type, options); - - var hmac = CryptoJS['Hmac' + credentials.algorithm.toUpperCase()](normalized, credentials.key); - return hmac.toString(CryptoJS.enc.Base64); - }, - - generateNormalizedString: function (type, options) { - - var normalized = 'hawk.' + hawk.crypto.headerVersion + '.' + type + '\n' + - options.ts + '\n' + - options.nonce + '\n' + - (options.method || '').toUpperCase() + '\n' + - (options.resource || '') + '\n' + - options.host.toLowerCase() + '\n' + - options.port + '\n' + - (options.hash || '') + '\n'; - - if (options.ext) { - normalized += options.ext.replace('\\', '\\\\').replace('\n', '\\n'); - } - - normalized += '\n'; - - if (options.app) { - normalized += options.app + '\n' + - (options.dlg || '') + '\n'; - } - - return normalized; - }, - - calculatePayloadHash: function (payload, algorithm, contentType) { - - var hash = CryptoJS.algo[algorithm.toUpperCase()].create(); - hash.update('hawk.' + hawk.crypto.headerVersion + '.payload\n'); - hash.update(hawk.utils.parseContentType(contentType) + '\n'); - hash.update(payload || ''); - hash.update('\n'); - return hash.finalize().toString(CryptoJS.enc.Base64); - }, - - calculateTsMac: function (ts, credentials) { - - var hash = CryptoJS['Hmac' + credentials.algorithm.toUpperCase()]('hawk.' + hawk.crypto.headerVersion + '.ts\n' + ts + '\n', credentials.key); - return hash.toString(CryptoJS.enc.Base64); - } -}; - - -hawk.utils = { - - storage: { // localStorage compatible interface - _cache: {}, - setItem: function (key, value) { - - hawk.utils.storage._cache[key] = value; - }, - getItem: function (key) { - - return hawk.utils.storage._cache[key]; - } - }, - - setStorage: function (storage) { - - var ntpOffset = hawk.utils.getNtpOffset() || 0; - hawk.utils.storage = storage; - hawk.utils.setNtpOffset(ntpOffset); - }, - - setNtpOffset: function (offset) { - - hawk.utils.storage.setItem('hawk_ntp_offset', offset); - }, - - getNtpOffset: function () { - - return parseInt(hawk.utils.storage.getItem('hawk_ntp_offset') || '0', 10); - }, - - now: function () { - - return Date.now() + hawk.utils.getNtpOffset(); - }, - - escapeHeaderAttribute: function (attribute) { - - return attribute.replace(/\\/g, '\\\\').replace(/\"/g, '\\"'); - }, - - parseContentType: function (header) { - - if (!header) { - return ''; - } - - return header.split(';')[0].trim().toLowerCase(); - }, - - parseAuthorizationHeader: function (header, keys) { - - if (!header) { - return null; - } - - var headerParts = header.match(/^(\w+)(?:\s+(.*))?$/); // Header: scheme[ something] - if (!headerParts) { - return null; - } - - var scheme = headerParts[1]; - if (scheme.toLowerCase() !== 'hawk') { - return null; - } - - var attributesString = headerParts[2]; - if (!attributesString) { - return null; - } - - var attributes = {}; - var verify = attributesString.replace(/(\w+)="([^"\\]*)"\s*(?:,\s*|$)/g, function ($0, $1, $2) { - - // Check valid attribute names - - if (keys.indexOf($1) === -1) { - return; - } - - // Allowed attribute value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9 - - if ($2.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~]+$/) === null) { - return; - } - - // Check for duplicates - - if (attributes.hasOwnProperty($1)) { - return; - } - - attributes[$1] = $2; - return ''; - }); - - if (verify !== '') { - return null; - } - - return attributes; - }, - - randomString: function (size) { - - var randomSource = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; - var len = randomSource.length; - - var result = []; - for (var i = 0; i < size; ++i) { - result[i] = randomSource[Math.floor(Math.random() * len)]; - } - - return result.join(''); - }, - - parseUri: function (input) { - - // Based on: parseURI 1.2.2 - // http://blog.stevenlevithan.com/archives/parseuri - // (c) Steven Levithan <stevenlevithan.com> - // MIT License - - var keys = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'hostname', 'port', 'resource', 'relative', 'pathname', 'directory', 'file', 'query', 'fragment']; - - var uriRegex = /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?(((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?)(?:#(.*))?)/; - var uriByNumber = uriRegex.exec(input); - var uri = {}; - - var i = 15; - while (i--) { - uri[keys[i]] = uriByNumber[i] || ''; - } - - if (uri.port === null || - uri.port === '') { - - uri.port = (uri.protocol.toLowerCase() === 'http' ? '80' : (uri.protocol.toLowerCase() === 'https' ? '443' : '')); - } - - return uri; - } -}; - - -// Based on: Crypto-JS v3.1.2 -// Copyright (c) 2009-2013, Jeff Mott. All rights reserved. -// http://code.google.com/p/crypto-js/ -// http://code.google.com/p/crypto-js/wiki/License - -var CryptoJS=CryptoJS||function(h,r){var k={},l=k.lib={},n=function(){},f=l.Base={extend:function(a){n.prototype=this;var b=new n;a&&b.mixIn(a);b.hasOwnProperty("init")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},j=l.WordArray=f.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=r?b:4*a.length},toString:function(a){return(a||s).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var e=0;e<a;e++)b[c+e>>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((c+e)%4);else if(65535<d.length)for(e=0;e<a;e+=4)b[c+e>>>2]=d[e>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<32-8*(b%4);a.length=h.ceil(b/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],d=0;d<a;d+=4)b.push(4294967296*h.random()|0);return new j.init(b,a)}}),m=k.enc={},s=m.Hex={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++){var e=b[c>>>2]>>>24-8*(c%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c+=2)d[c>>>3]|=parseInt(a.substr(c,2),16)<<24-4*(c%8);return new j.init(d,b/2)}},p=m.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++)d.push(String.fromCharCode(b[c>>>2]>>>24-8*(c%4)&255));return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c++)d[c>>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new j.init(d,b)}},t=m.Utf8={stringify:function(a){try{return decodeURIComponent(escape(p.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return p.parse(unescape(encodeURIComponent(a)))}},q=l.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new j.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=t.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,d=b.words,c=b.sigBytes,e=this.blockSize,f=c/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;c=h.min(4*a,c);if(a){for(var g=0;g<a;g+=e)this._doProcessBlock(d,g);g=d.splice(0,a);b.sigBytes-=c}return new j.init(g,c)},clone:function(){var a=f.clone.call(this);a._data=this._data.clone();return a},_minBufferSize:0});l.Hasher=q.extend({cfg:f.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){q.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,d){return(new a.init(d)).finalize(b)}},_createHmacHelper:function(a){return function(b,d){return(new u.HMAC.init(a,d)).finalize(b)}}});var u=k.algo={};return k}(Math); -(function () { var k = CryptoJS, b = k.lib, m = b.WordArray, l = b.Hasher, d = [], b = k.algo.SHA1 = l.extend({ _doReset: function () { this._hash = new m.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) }, _doProcessBlock: function (n, p) { for (var a = this._hash.words, e = a[0], f = a[1], h = a[2], j = a[3], b = a[4], c = 0; 80 > c; c++) { if (16 > c) d[c] = n[p + c] | 0; else { var g = d[c - 3] ^ d[c - 8] ^ d[c - 14] ^ d[c - 16]; d[c] = g << 1 | g >>> 31 } g = (e << 5 | e >>> 27) + b + d[c]; g = 20 > c ? g + ((f & h | ~f & j) + 1518500249) : 40 > c ? g + ((f ^ h ^ j) + 1859775393) : 60 > c ? g + ((f & h | f & j | h & j) - 1894007588) : g + ((f ^ h ^ j) - 899497514); b = j; j = h; h = f << 30 | f >>> 2; f = e; e = g } a[0] = a[0] + e | 0; a[1] = a[1] + f | 0; a[2] = a[2] + h | 0; a[3] = a[3] + j | 0; a[4] = a[4] + b | 0 }, _doFinalize: function () { var b = this._data, d = b.words, a = 8 * this._nDataBytes, e = 8 * b.sigBytes; d[e >>> 5] |= 128 << 24 - e % 32; d[(e + 64 >>> 9 << 4) + 14] = Math.floor(a / 4294967296); d[(e + 64 >>> 9 << 4) + 15] = a; b.sigBytes = 4 * d.length; this._process(); return this._hash }, clone: function () { var b = l.clone.call(this); b._hash = this._hash.clone(); return b } }); k.SHA1 = l._createHelper(b); k.HmacSHA1 = l._createHmacHelper(b) })(); -(function (k) { for (var g = CryptoJS, h = g.lib, v = h.WordArray, j = h.Hasher, h = g.algo, s = [], t = [], u = function (q) { return 4294967296 * (q - (q | 0)) | 0 }, l = 2, b = 0; 64 > b;) { var d; a: { d = l; for (var w = k.sqrt(d), r = 2; r <= w; r++) if (!(d % r)) { d = !1; break a } d = !0 } d && (8 > b && (s[b] = u(k.pow(l, 0.5))), t[b] = u(k.pow(l, 1 / 3)), b++); l++ } var n = [], h = h.SHA256 = j.extend({ _doReset: function () { this._hash = new v.init(s.slice(0)) }, _doProcessBlock: function (q, h) { for (var a = this._hash.words, c = a[0], d = a[1], b = a[2], k = a[3], f = a[4], g = a[5], j = a[6], l = a[7], e = 0; 64 > e; e++) { if (16 > e) n[e] = q[h + e] | 0; else { var m = n[e - 15], p = n[e - 2]; n[e] = ((m << 25 | m >>> 7) ^ (m << 14 | m >>> 18) ^ m >>> 3) + n[e - 7] + ((p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10) + n[e - 16] } m = l + ((f << 26 | f >>> 6) ^ (f << 21 | f >>> 11) ^ (f << 7 | f >>> 25)) + (f & g ^ ~f & j) + t[e] + n[e]; p = ((c << 30 | c >>> 2) ^ (c << 19 | c >>> 13) ^ (c << 10 | c >>> 22)) + (c & d ^ c & b ^ d & b); l = j; j = g; g = f; f = k + m | 0; k = b; b = d; d = c; c = m + p | 0 } a[0] = a[0] + c | 0; a[1] = a[1] + d | 0; a[2] = a[2] + b | 0; a[3] = a[3] + k | 0; a[4] = a[4] + f | 0; a[5] = a[5] + g | 0; a[6] = a[6] + j | 0; a[7] = a[7] + l | 0 }, _doFinalize: function () { var d = this._data, b = d.words, a = 8 * this._nDataBytes, c = 8 * d.sigBytes; b[c >>> 5] |= 128 << 24 - c % 32; b[(c + 64 >>> 9 << 4) + 14] = k.floor(a / 4294967296); b[(c + 64 >>> 9 << 4) + 15] = a; d.sigBytes = 4 * b.length; this._process(); return this._hash }, clone: function () { var b = j.clone.call(this); b._hash = this._hash.clone(); return b } }); g.SHA256 = j._createHelper(h); g.HmacSHA256 = j._createHmacHelper(h) })(Math); -(function(){var c=CryptoJS,k=c.enc.Utf8;c.algo.HMAC=c.lib.Base.extend({init:function(a,b){a=this._hasher=new a.init;"string"==typeof b&&(b=k.parse(b));var c=a.blockSize,e=4*c;b.sigBytes>e&&(b=a.finalize(b));b.clamp();for(var f=this._oKey=b.clone(),g=this._iKey=b.clone(),h=f.words,j=g.words,d=0;d<c;d++)h[d]^=1549556828,j[d]^=909522486;f.sigBytes=g.sigBytes=e;this.reset()},reset:function(){var a=this._hasher;a.reset();a.update(this._iKey)},update:function(a){this._hasher.update(a);return this},finalize:function(a){var b=this._hasher;a=b.finalize(a);b.reset();return b.finalize(this._oKey.clone().concat(a))}})})(); -(function(){var h=CryptoJS,j=h.lib.WordArray;h.enc.Base64={stringify:function(b){var e=b.words,f=b.sigBytes,c=this._map;b.clamp();b=[];for(var a=0;a<f;a+=3)for(var d=(e[a>>>2]>>>24-8*(a%4)&255)<<16|(e[a+1>>>2]>>>24-8*((a+1)%4)&255)<<8|e[a+2>>>2]>>>24-8*((a+2)%4)&255,g=0;4>g&&a+0.75*g<f;g++)b.push(c.charAt(d>>>6*(3-g)&63));if(e=c.charAt(64))for(;b.length%4;)b.push(e);return b.join("")},parse:function(b){var e=b.length,f=this._map,c=f.charAt(64);c&&(c=b.indexOf(c),-1!=c&&(e=c));for(var c=[],a=0,d=0;d<e;d++)if(d%4){var g=f.indexOf(b.charAt(d-1))<<2*(d%4),h=f.indexOf(b.charAt(d))>>>6-2*(d%4);c[a>>>2]|=(g|h)<<24-8*(a%4);a++}return j.create(c,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/client.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/client.js deleted file mode 100755 index 41984582..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/client.js +++ /dev/null @@ -1,367 +0,0 @@ -// Load modules - -var Url = require('url'); -var Hoek = require('hoek'); -var Cryptiles = require('cryptiles'); -var Crypto = require('./crypto'); -var Utils = require('./utils'); - - -// Declare internals - -var internals = {}; - - -// Generate an Authorization header for a given request - -/* - uri: 'http://example.com/resource?a=b' or object from Url.parse() - method: HTTP verb (e.g. 'GET', 'POST') - options: { - - // Required - - credentials: { - id: 'dh37fgj492je', - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - - // Optional - - ext: 'application-specific', // Application specific data sent via the ext attribute - timestamp: Date.now(), // A pre-calculated timestamp - nonce: '2334f34f', // A pre-generated nonce - localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided) - payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided) - contentType: 'application/json', // Payload content-type (ignored if hash provided) - hash: 'U4MKKSmiVxk37JCCrAVIjV=', // Pre-calculated payload hash - app: '24s23423f34dx', // Oz application id - dlg: '234sz34tww3sd' // Oz delegated-by application id - } -*/ - -exports.header = function (uri, method, options) { - - var result = { - field: '', - artifacts: {} - }; - - // Validate inputs - - if (!uri || (typeof uri !== 'string' && typeof uri !== 'object') || - !method || typeof method !== 'string' || - !options || typeof options !== 'object') { - - return result; - } - - // Application time - - var timestamp = options.timestamp || Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000) - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return result; - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return result; - } - - // Parse URI - - if (typeof uri === 'string') { - uri = Url.parse(uri); - } - - // Calculate signature - - var artifacts = { - ts: timestamp, - nonce: options.nonce || Cryptiles.randomString(6), - method: method, - resource: uri.pathname + (uri.search || ''), // Maintain trailing '?' - host: uri.hostname, - port: uri.port || (uri.protocol === 'http:' ? 80 : 443), - hash: options.hash, - ext: options.ext, - app: options.app, - dlg: options.dlg - }; - - result.artifacts = artifacts; - - // Calculate payload hash - - if (!artifacts.hash && - options.hasOwnProperty('payload')) { - - artifacts.hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType); - } - - var mac = Crypto.calculateMac('header', credentials, artifacts); - - // Construct header - - var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''; // Other falsey values allowed - var header = 'Hawk id="' + credentials.id + - '", ts="' + artifacts.ts + - '", nonce="' + artifacts.nonce + - (artifacts.hash ? '", hash="' + artifacts.hash : '') + - (hasExt ? '", ext="' + Utils.escapeHeaderAttribute(artifacts.ext) : '') + - '", mac="' + mac + '"'; - - if (artifacts.app) { - header += ', app="' + artifacts.app + - (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"'; - } - - result.field = header; - - return result; -}; - - -// Validate server response - -/* - res: node's response object - artifacts: object recieved from header().artifacts - options: { - payload: optional payload received - required: specifies if a Server-Authorization header is required. Defaults to 'false' - } -*/ - -exports.authenticate = function (res, credentials, artifacts, options) { - - artifacts = Hoek.clone(artifacts); - options = options || {}; - - if (res.headers['www-authenticate']) { - - // Parse HTTP WWW-Authenticate header - - var attributes = Utils.parseAuthorizationHeader(res.headers['www-authenticate'], ['ts', 'tsm', 'error']); - if (attributes instanceof Error) { - return false; - } - - if (attributes.ts) { - var tsm = Crypto.calculateTsMac(attributes.ts, credentials); - if (tsm !== attributes.tsm) { - return false; - } - } - } - - // Parse HTTP Server-Authorization header - - if (!res.headers['server-authorization'] && - !options.required) { - - return true; - } - - var attributes = Utils.parseAuthorizationHeader(res.headers['server-authorization'], ['mac', 'ext', 'hash']); - if (attributes instanceof Error) { - return false; - } - - artifacts.ext = attributes.ext; - artifacts.hash = attributes.hash; - - var mac = Crypto.calculateMac('response', credentials, artifacts); - if (mac !== attributes.mac) { - return false; - } - - if (!options.hasOwnProperty('payload')) { - return true; - } - - if (!attributes.hash) { - return false; - } - - var calculatedHash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, res.headers['content-type']); - return (calculatedHash === attributes.hash); -}; - - -// Generate a bewit value for a given URI - -/* - * credentials is an object with the following keys: 'id, 'key', 'algorithm'. - * options is an object with the following optional keys: 'ext', 'localtimeOffsetMsec' - */ -/* - uri: 'http://example.com/resource?a=b' or object from Url.parse() - options: { - - // Required - - credentials: { - id: 'dh37fgj492je', - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - ttlSec: 60 * 60, // TTL in seconds - - // Optional - - ext: 'application-specific', // Application specific data sent via the ext attribute - localtimeOffsetMsec: 400 // Time offset to sync with server time - }; -*/ - -exports.getBewit = function (uri, options) { - - // Validate inputs - - if (!uri || - (typeof uri !== 'string' && typeof uri !== 'object') || - !options || - typeof options !== 'object' || - !options.ttlSec) { - - return ''; - } - - options.ext = (options.ext === null || options.ext === undefined ? '' : options.ext); // Zero is valid value - - // Application time - - var now = Utils.now() + (options.localtimeOffsetMsec || 0); - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - return ''; - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return ''; - } - - // Parse URI - - if (typeof uri === 'string') { - uri = Url.parse(uri); - } - - // Calculate signature - - var exp = Math.floor(now / 1000) + options.ttlSec; - var mac = Crypto.calculateMac('bewit', credentials, { - ts: exp, - nonce: '', - method: 'GET', - resource: uri.pathname + (uri.search || ''), // Maintain trailing '?' - host: uri.hostname, - port: uri.port || (uri.protocol === 'http:' ? 80 : 443), - ext: options.ext - }); - - // Construct bewit: id\exp\mac\ext - - var bewit = credentials.id + '\\' + exp + '\\' + mac + '\\' + options.ext; - return Utils.base64urlEncode(bewit); -}; - - -// Generate an authorization string for a message - -/* - host: 'example.com', - port: 8000, - message: '{"some":"payload"}', // UTF-8 encoded string for body hash generation - options: { - - // Required - - credentials: { - id: 'dh37fgj492je', - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - - // Optional - - timestamp: Date.now(), // A pre-calculated timestamp - nonce: '2334f34f', // A pre-generated nonce - localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided) - } -*/ - -exports.message = function (host, port, message, options) { - - // Validate inputs - - if (!host || typeof host !== 'string' || - !port || typeof port !== 'number' || - message === null || message === undefined || typeof message !== 'string' || - !options || typeof options !== 'object') { - - return null; - } - - // Application time - - var timestamp = options.timestamp || Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000) - - // Validate credentials - - var credentials = options.credentials; - if (!credentials || - !credentials.id || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return null; - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return null; - } - - // Calculate signature - - var artifacts = { - ts: timestamp, - nonce: options.nonce || Cryptiles.randomString(6), - host: host, - port: port, - hash: Crypto.calculatePayloadHash(message, credentials.algorithm) - }; - - // Construct authorization - - var result = { - id: credentials.id, - ts: artifacts.ts, - nonce: artifacts.nonce, - hash: artifacts.hash, - mac: Crypto.calculateMac('message', credentials, artifacts) - }; - - return result; -}; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/crypto.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/crypto.js deleted file mode 100755 index 150340a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/crypto.js +++ /dev/null @@ -1,111 +0,0 @@ -// Load modules - -var Crypto = require('crypto'); -var Url = require('url'); -var Utils = require('./utils'); - - -// Declare internals - -var internals = {}; - - -// MAC normalization format version - -exports.headerVersion = '1'; // Prevent comparison of mac values generated with different normalized string formats - - -// Supported HMAC algorithms - -exports.algorithms = ['sha1', 'sha256']; - - -// Calculate the request MAC - -/* - type: 'header', // 'header', 'bewit', 'response' - credentials: { - key: 'aoijedoaijsdlaksjdl', - algorithm: 'sha256' // 'sha1', 'sha256' - }, - options: { - method: 'GET', - resource: '/resource?a=1&b=2', - host: 'example.com', - port: 8080, - ts: 1357718381034, - nonce: 'd3d345f', - hash: 'U4MKKSmiVxk37JCCrAVIjV/OhB3y+NdwoCr6RShbVkE=', - ext: 'app-specific-data', - app: 'hf48hd83qwkj', // Application id (Oz) - dlg: 'd8djwekds9cj' // Delegated by application id (Oz), requires options.app - } -*/ - -exports.calculateMac = function (type, credentials, options) { - - var normalized = exports.generateNormalizedString(type, options); - - var hmac = Crypto.createHmac(credentials.algorithm, credentials.key).update(normalized); - var digest = hmac.digest('base64'); - return digest; -}; - - -exports.generateNormalizedString = function (type, options) { - - var normalized = 'hawk.' + exports.headerVersion + '.' + type + '\n' + - options.ts + '\n' + - options.nonce + '\n' + - (options.method || '').toUpperCase() + '\n' + - (options.resource || '') + '\n' + - options.host.toLowerCase() + '\n' + - options.port + '\n' + - (options.hash || '') + '\n'; - - if (options.ext) { - normalized += options.ext.replace('\\', '\\\\').replace('\n', '\\n'); - } - - normalized += '\n'; - - if (options.app) { - normalized += options.app + '\n' + - (options.dlg || '') + '\n'; - } - - return normalized; -}; - - -exports.calculatePayloadHash = function (payload, algorithm, contentType) { - - var hash = exports.initializePayloadHash(algorithm, contentType); - hash.update(payload || ''); - return exports.finalizePayloadHash(hash); -}; - - -exports.initializePayloadHash = function (algorithm, contentType) { - - var hash = Crypto.createHash(algorithm); - hash.update('hawk.' + exports.headerVersion + '.payload\n'); - hash.update(Utils.parseContentType(contentType) + '\n'); - return hash; -}; - - -exports.finalizePayloadHash = function (hash) { - - hash.update('\n'); - return hash.digest('base64'); -}; - - -exports.calculateTsMac = function (ts, credentials) { - - var hmac = Crypto.createHmac(credentials.algorithm, credentials.key); - hmac.update('hawk.' + exports.headerVersion + '.ts\n' + ts + '\n'); - return hmac.digest('base64'); -}; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/index.js deleted file mode 100755 index 1d713cb6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/index.js +++ /dev/null @@ -1,15 +0,0 @@ -// Export sub-modules - -exports.error = exports.Error = require('boom'); -exports.sntp = require('sntp'); -exports.server = require('./server'); -exports.client = require('./client'); -exports.crypto = require('./crypto'); -exports.utils = require('./utils'); - -exports.uri = { - authenticate: exports.server.authenticateBewit, - getBewit: exports.client.getBewit -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/server.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/server.js deleted file mode 100755 index 478c47b3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/server.js +++ /dev/null @@ -1,524 +0,0 @@ -// Load modules - -var Boom = require('boom'); -var Hoek = require('hoek'); -var Cryptiles = require('cryptiles'); -var Crypto = require('./crypto'); -var Utils = require('./utils'); - - -// Declare internals - -var internals = {}; - - -// Hawk authentication - -/* - req: node's HTTP request object or an object as follows: - - var request = { - method: 'GET', - url: '/resource/4?a=1&b=2', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE="' - }; - - credentialsFunc: required function to lookup the set of Hawk credentials based on the provided credentials id. - The credentials include the MAC key, MAC algorithm, and other attributes (such as username) - needed by the application. This function is the equivalent of verifying the username and - password in Basic authentication. - - var credentialsFunc = function (id, callback) { - - // Lookup credentials in database - db.lookup(id, function (err, item) { - - if (err || !item) { - return callback(err); - } - - var credentials = { - // Required - key: item.key, - algorithm: item.algorithm, - // Application specific - user: item.user - }; - - return callback(null, credentials); - }); - }; - - options: { - - hostHeaderName: optional header field name, used to override the default 'Host' header when used - behind a cache of a proxy. Apache2 changes the value of the 'Host' header while preserving - the original (which is what the module must verify) in the 'x-forwarded-host' header field. - Only used when passed a node Http.ServerRequest object. - - nonceFunc: optional nonce validation function. The function signature is function(nonce, ts, callback) - where 'callback' must be called using the signature function(err). - - timestampSkewSec: optional number of seconds of permitted clock skew for incoming timestamps. Defaults to 60 seconds. - Provides a +/- skew which means actual allowed window is double the number of seconds. - - localtimeOffsetMsec: optional local clock time offset express in a number of milliseconds (positive or negative). - Defaults to 0. - - payload: optional payload for validation. The client calculates the hash value and includes it via the 'hash' - header attribute. The server always ensures the value provided has been included in the request - MAC. When this option is provided, it validates the hash value itself. Validation is done by calculating - a hash value over the entire payload (assuming it has already be normalized to the same format and - encoding used by the client to calculate the hash on request). If the payload is not available at the time - of authentication, the authenticatePayload() method can be used by passing it the credentials and - attributes.hash returned in the authenticate callback. - - host: optional host name override. Only used when passed a node request object. - port: optional port override. Only used when passed a node request object. - } - - callback: function (err, credentials, artifacts) { } - */ - -exports.authenticate = function (req, credentialsFunc, options, callback) { - - callback = Utils.nextTick(callback); - - // Default options - - options.nonceFunc = options.nonceFunc || function (nonce, ts, nonceCallback) { return nonceCallback(); }; // No validation - options.timestampSkewSec = options.timestampSkewSec || 60; // 60 seconds - - // Application time - - var now = Utils.now() + (options.localtimeOffsetMsec || 0); // Measure now before any other processing - - // Convert node Http request object to a request configuration object - - var request = Utils.parseRequest(req, options); - if (request instanceof Error) { - return callback(Boom.badRequest(request.message)); - } - - // Parse HTTP Authorization header - - var attributes = Utils.parseAuthorizationHeader(request.authorization); - if (attributes instanceof Error) { - return callback(attributes); - } - - // Construct artifacts container - - var artifacts = { - method: request.method, - host: request.host, - port: request.port, - resource: request.url, - ts: attributes.ts, - nonce: attributes.nonce, - hash: attributes.hash, - ext: attributes.ext, - app: attributes.app, - dlg: attributes.dlg, - mac: attributes.mac, - id: attributes.id - }; - - // Verify required header attributes - - if (!attributes.id || - !attributes.ts || - !attributes.nonce || - !attributes.mac) { - - return callback(Boom.badRequest('Missing attributes'), null, artifacts); - } - - // Fetch Hawk credentials - - credentialsFunc(attributes.id, function (err, credentials) { - - if (err) { - return callback(err, credentials || null, artifacts); - } - - if (!credentials) { - return callback(Boom.unauthorized('Unknown credentials', 'Hawk'), null, artifacts); - } - - if (!credentials.key || - !credentials.algorithm) { - - return callback(Boom.internal('Invalid credentials'), credentials, artifacts); - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return callback(Boom.internal('Unknown algorithm'), credentials, artifacts); - } - - // Calculate MAC - - var mac = Crypto.calculateMac('header', credentials, artifacts); - if (!Cryptiles.fixedTimeComparison(mac, attributes.mac)) { - return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials, artifacts); - } - - // Check payload hash - - if (options.payload !== null && - options.payload !== undefined) { // '' is valid - - if (!attributes.hash) { - return callback(Boom.unauthorized('Missing required payload hash', 'Hawk'), credentials, artifacts); - } - - var hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, request.contentType); - if (!Cryptiles.fixedTimeComparison(hash, attributes.hash)) { - return callback(Boom.unauthorized('Bad payload hash', 'Hawk'), credentials, artifacts); - } - } - - // Check nonce - - options.nonceFunc(attributes.nonce, attributes.ts, function (err) { - - if (err) { - return callback(Boom.unauthorized('Invalid nonce', 'Hawk'), credentials, artifacts); - } - - // Check timestamp staleness - - if (Math.abs((attributes.ts * 1000) - now) > (options.timestampSkewSec * 1000)) { - var fresh = Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000); // Get fresh now - var tsm = Crypto.calculateTsMac(fresh, credentials); - return callback(Boom.unauthorized('Stale timestamp', 'Hawk', { ts: fresh, tsm: tsm }), credentials, artifacts); - } - - // Successful authentication - - return callback(null, credentials, artifacts); - }); - }); -}; - - -// Authenticate payload hash - used when payload cannot be provided during authenticate() - -/* - payload: raw request payload - credentials: from authenticate callback - artifacts: from authenticate callback - contentType: req.headers['content-type'] -*/ - -exports.authenticatePayload = function (payload, credentials, artifacts, contentType) { - - var calculatedHash = Crypto.calculatePayloadHash(payload, credentials.algorithm, contentType); - return Cryptiles.fixedTimeComparison(calculatedHash, artifacts.hash); -}; - - -// Generate a Server-Authorization header for a given response - -/* - credentials: {}, // Object received from authenticate() - artifacts: {} // Object received from authenticate(); 'mac', 'hash', and 'ext' - ignored - options: { - ext: 'application-specific', // Application specific data sent via the ext attribute - payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided) - contentType: 'application/json', // Payload content-type (ignored if hash provided) - hash: 'U4MKKSmiVxk37JCCrAVIjV=' // Pre-calculated payload hash - } -*/ - -exports.header = function (credentials, artifacts, options) { - - // Prepare inputs - - options = options || {}; - - if (!artifacts || - typeof artifacts !== 'object' || - typeof options !== 'object') { - - return ''; - } - - artifacts = Hoek.clone(artifacts); - delete artifacts.mac; - artifacts.hash = options.hash; - artifacts.ext = options.ext; - - // Validate credentials - - if (!credentials || - !credentials.key || - !credentials.algorithm) { - - // Invalid credential object - return ''; - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return ''; - } - - // Calculate payload hash - - if (!artifacts.hash && - options.hasOwnProperty('payload')) { - - artifacts.hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType); - } - - var mac = Crypto.calculateMac('response', credentials, artifacts); - - // Construct header - - var header = 'Hawk mac="' + mac + '"' + - (artifacts.hash ? ', hash="' + artifacts.hash + '"' : ''); - - if (artifacts.ext !== null && - artifacts.ext !== undefined && - artifacts.ext !== '') { // Other falsey values allowed - - header += ', ext="' + Utils.escapeHeaderAttribute(artifacts.ext) + '"'; - } - - return header; -}; - - -/* - * Arguments and options are the same as authenticate() with the exception that the only supported options are: - * 'hostHeaderName', 'localtimeOffsetMsec', 'host', 'port' - */ - -exports.authenticateBewit = function (req, credentialsFunc, options, callback) { - - callback = Utils.nextTick(callback); - - // Application time - - var now = Utils.now() + (options.localtimeOffsetMsec || 0); - - // Convert node Http request object to a request configuration object - - var request = Utils.parseRequest(req, options); - if (request instanceof Error) { - return callback(Boom.badRequest(request.message)); - } - - // Extract bewit - - // 1 2 3 4 - var resource = request.url.match(/^(\/.*)([\?&])bewit\=([^&$]*)(?:&(.+))?$/); - if (!resource) { - return callback(Boom.unauthorized(null, 'Hawk')); - } - - // Bewit not empty - - if (!resource[3]) { - return callback(Boom.unauthorized('Empty bewit', 'Hawk')); - } - - // Verify method is GET - - if (request.method !== 'GET' && - request.method !== 'HEAD') { - - return callback(Boom.unauthorized('Invalid method', 'Hawk')); - } - - // No other authentication - - if (request.authorization) { - return callback(Boom.badRequest('Multiple authentications', 'Hawk')); - } - - // Parse bewit - - var bewitString = Utils.base64urlDecode(resource[3]); - if (bewitString instanceof Error) { - return callback(Boom.badRequest('Invalid bewit encoding')); - } - - // Bewit format: id\exp\mac\ext ('\' is used because it is a reserved header attribute character) - - var bewitParts = bewitString.split('\\'); - if (!bewitParts || - bewitParts.length !== 4) { - - return callback(Boom.badRequest('Invalid bewit structure')); - } - - var bewit = { - id: bewitParts[0], - exp: parseInt(bewitParts[1], 10), - mac: bewitParts[2], - ext: bewitParts[3] || '' - }; - - if (!bewit.id || - !bewit.exp || - !bewit.mac) { - - return callback(Boom.badRequest('Missing bewit attributes')); - } - - // Construct URL without bewit - - var url = resource[1]; - if (resource[4]) { - url += resource[2] + resource[4]; - } - - // Check expiration - - if (bewit.exp * 1000 <= now) { - return callback(Boom.unauthorized('Access expired', 'Hawk'), null, bewit); - } - - // Fetch Hawk credentials - - credentialsFunc(bewit.id, function (err, credentials) { - - if (err) { - return callback(err, credentials || null, bewit.ext); - } - - if (!credentials) { - return callback(Boom.unauthorized('Unknown credentials', 'Hawk'), null, bewit); - } - - if (!credentials.key || - !credentials.algorithm) { - - return callback(Boom.internal('Invalid credentials'), credentials, bewit); - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return callback(Boom.internal('Unknown algorithm'), credentials, bewit); - } - - // Calculate MAC - - var mac = Crypto.calculateMac('bewit', credentials, { - ts: bewit.exp, - nonce: '', - method: 'GET', - resource: url, - host: request.host, - port: request.port, - ext: bewit.ext - }); - - if (!Cryptiles.fixedTimeComparison(mac, bewit.mac)) { - return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials, bewit); - } - - // Successful authentication - - return callback(null, credentials, bewit); - }); -}; - - -/* - * options are the same as authenticate() with the exception that the only supported options are: - * 'nonceFunc', 'timestampSkewSec', 'localtimeOffsetMsec' - */ - -exports.authenticateMessage = function (host, port, message, authorization, credentialsFunc, options, callback) { - - callback = Utils.nextTick(callback); - - // Default options - - options.nonceFunc = options.nonceFunc || function (nonce, ts, nonceCallback) { return nonceCallback(); }; // No validation - options.timestampSkewSec = options.timestampSkewSec || 60; // 60 seconds - - // Application time - - var now = Utils.now() + (options.localtimeOffsetMsec || 0); // Measure now before any other processing - - // Validate authorization - - if (!authorization.id || - !authorization.ts || - !authorization.nonce || - !authorization.hash || - !authorization.mac) { - - return callback(Boom.badRequest('Invalid authorization')) - } - - // Fetch Hawk credentials - - credentialsFunc(authorization.id, function (err, credentials) { - - if (err) { - return callback(err, credentials || null); - } - - if (!credentials) { - return callback(Boom.unauthorized('Unknown credentials', 'Hawk')); - } - - if (!credentials.key || - !credentials.algorithm) { - - return callback(Boom.internal('Invalid credentials'), credentials); - } - - if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) { - return callback(Boom.internal('Unknown algorithm'), credentials); - } - - // Construct artifacts container - - var artifacts = { - ts: authorization.ts, - nonce: authorization.nonce, - host: host, - port: port, - hash: authorization.hash - }; - - // Calculate MAC - - var mac = Crypto.calculateMac('message', credentials, artifacts); - if (!Cryptiles.fixedTimeComparison(mac, authorization.mac)) { - return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials); - } - - // Check payload hash - - var hash = Crypto.calculatePayloadHash(message, credentials.algorithm); - if (!Cryptiles.fixedTimeComparison(hash, authorization.hash)) { - return callback(Boom.unauthorized('Bad message hash', 'Hawk'), credentials); - } - - // Check nonce - - options.nonceFunc(authorization.nonce, authorization.ts, function (err) { - - if (err) { - return callback(Boom.unauthorized('Invalid nonce', 'Hawk'), credentials); - } - - // Check timestamp staleness - - if (Math.abs((authorization.ts * 1000) - now) > (options.timestampSkewSec * 1000)) { - return callback(Boom.unauthorized('Stale timestamp'), credentials); - } - - // Successful authentication - - return callback(null, credentials); - }); - }); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/utils.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/utils.js deleted file mode 100755 index c8938fe8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/lib/utils.js +++ /dev/null @@ -1,183 +0,0 @@ -// Load modules - -var Hoek = require('hoek'); -var Sntp = require('sntp'); -var Boom = require('boom'); - - -// Declare internals - -var internals = {}; - - -// Import Hoek Utilities - -internals.import = function () { - - for (var i in Hoek) { - if (Hoek.hasOwnProperty(i)) { - exports[i] = Hoek[i]; - } - } -}; - -internals.import(); - - -// Hawk version - -exports.version = function () { - - return exports.loadPackage(__dirname + '/..').version; -}; - - -// Extract host and port from request - -exports.parseHost = function (req, hostHeaderName) { - - hostHeaderName = (hostHeaderName ? hostHeaderName.toLowerCase() : 'host'); - var hostHeader = req.headers[hostHeaderName]; - if (!hostHeader) { - return null; - } - - var hostHeaderRegex; - if (hostHeader[0] === '[') { - hostHeaderRegex = /^(?:(?:\r\n)?\s)*(\[[^\]]+\])(?::(\d+))?(?:(?:\r\n)?\s)*$/; // IPv6 - } - else { - hostHeaderRegex = /^(?:(?:\r\n)?\s)*([^:]+)(?::(\d+))?(?:(?:\r\n)?\s)*$/; // IPv4, hostname - } - - var hostParts = hostHeader.match(hostHeaderRegex); - - if (!hostParts || - hostParts.length !== 3 || - !hostParts[1]) { - - return null; - } - - return { - name: hostParts[1], - port: (hostParts[2] ? hostParts[2] : (req.connection && req.connection.encrypted ? 443 : 80)) - }; -}; - - -// Parse Content-Type header content - -exports.parseContentType = function (header) { - - if (!header) { - return ''; - } - - return header.split(';')[0].trim().toLowerCase(); -}; - - -// Convert node's to request configuration object - -exports.parseRequest = function (req, options) { - - if (!req.headers) { - return req; - } - - // Obtain host and port information - - if (!options.host || !options.port) { - var host = exports.parseHost(req, options.hostHeaderName); - if (!host) { - return new Error('Invalid Host header'); - } - } - - var request = { - method: req.method, - url: req.url, - host: options.host || host.name, - port: options.port || host.port, - authorization: req.headers.authorization, - contentType: req.headers['content-type'] || '' - }; - - return request; -}; - - -exports.now = function () { - - return Sntp.now(); -}; - - -// Parse Hawk HTTP Authorization header - -exports.parseAuthorizationHeader = function (header, keys) { - - keys = keys || ['id', 'ts', 'nonce', 'hash', 'ext', 'mac', 'app', 'dlg']; - - if (!header) { - return Boom.unauthorized(null, 'Hawk'); - } - - var headerParts = header.match(/^(\w+)(?:\s+(.*))?$/); // Header: scheme[ something] - if (!headerParts) { - return Boom.badRequest('Invalid header syntax'); - } - - var scheme = headerParts[1]; - if (scheme.toLowerCase() !== 'hawk') { - return Boom.unauthorized(null, 'Hawk'); - } - - var attributesString = headerParts[2]; - if (!attributesString) { - return Boom.badRequest('Invalid header syntax'); - } - - var attributes = {}; - var errorMessage = ''; - var verify = attributesString.replace(/(\w+)="([^"\\]*)"\s*(?:,\s*|$)/g, function ($0, $1, $2) { - - // Check valid attribute names - - if (keys.indexOf($1) === -1) { - errorMessage = 'Unknown attribute: ' + $1; - return; - } - - // Allowed attribute value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9 - - if ($2.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~]+$/) === null) { - errorMessage = 'Bad attribute value: ' + $1; - return; - } - - // Check for duplicates - - if (attributes.hasOwnProperty($1)) { - errorMessage = 'Duplicate attribute: ' + $1; - return; - } - - attributes[$1] = $2; - return ''; - }); - - if (verify !== '') { - return Boom.badRequest(errorMessage || 'Bad header format'); - } - - return attributes; -}; - - -exports.unauthorized = function (message) { - - return Boom.unauthorized(message, 'Hawk'); -}; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore deleted file mode 100644 index 77ba16cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml deleted file mode 100755 index 047f7e3d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE deleted file mode 100755 index 911b97ee..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2013, Walmart. -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 Walmart 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 WALMART 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/Makefile deleted file mode 100755 index 884ec6db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -test: - @node node_modules/lab/bin/lab -test-cov: - @node node_modules/lab/bin/lab -r threshold -t 100 -test-cov-html: - @node node_modules/lab/bin/lab -r html -o coverage.html -complexity: - @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/README.md deleted file mode 100755 index 1970b1c4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/README.md +++ /dev/null @@ -1,6 +0,0 @@ -<a href="https://github.com/spumko"><img src="https://raw.github.com/spumko/spumko/master/images/from.png" align="right" /></a> -![boom Logo](https://raw.github.com/spumko/boom/master/images/boom.png) - -HTTP-friendly error objects - -[![Build Status](https://secure.travis-ci.org/spumko/boom.png)](http://travis-ci.org/spumko/boom) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/images/boom.png b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/images/boom.png deleted file mode 100755 index 373bc13455bc0a71a6a4538158aee59c6994b761..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29479 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 QhhSjjq?9Eq#J`37AMgo!6951J diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js deleted file mode 100755 index 0bbeed95..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js +++ /dev/null @@ -1,207 +0,0 @@ -// Load modules - -var Http = require('http'); -var NodeUtil = require('util'); -var Hoek = require('hoek'); - - -// Declare internals - -var internals = {}; - - -exports = module.exports = internals.Boom = function (/* (new Error) or (code, message) */) { - - var self = this; - - Hoek.assert(this.constructor === internals.Boom, 'Error must be instantiated using new'); - - Error.call(this); - this.isBoom = true; - - this.response = { - code: 0, - payload: {}, - headers: {} - // type: 'content-type' - }; - - if (arguments[0] instanceof Error) { - - // Error - - var error = arguments[0]; - - this.data = error; - this.response.code = error.code || 500; - if (error.message) { - this.message = error.message; - } - } - else { - - // code, message - - var code = arguments[0]; - var message = arguments[1]; - - Hoek.assert(!isNaN(parseFloat(code)) && isFinite(code) && code >= 400, 'First argument must be a number (400+)'); - - this.response.code = code; - if (message) { - this.message = message; - } - } - - // Response format - - this.reformat(); - - return this; -}; - -NodeUtil.inherits(internals.Boom, Error); - - -internals.Boom.prototype.reformat = function () { - - this.response.payload.code = this.response.code; - this.response.payload.error = Http.STATUS_CODES[this.response.code] || 'Unknown'; - if (this.message) { - this.response.payload.message = Hoek.escapeHtml(this.message); // Prevent XSS from error message - } -}; - - -// Utilities - -internals.Boom.badRequest = function (message) { - - return new internals.Boom(400, message); -}; - - -internals.Boom.unauthorized = function (message, scheme, attributes) { // Or function (message, wwwAuthenticate[]) - - var err = new internals.Boom(401, message); - - if (!scheme) { - return err; - } - - var wwwAuthenticate = ''; - - if (typeof scheme === 'string') { - - // function (message, scheme, attributes) - - wwwAuthenticate = scheme; - if (attributes) { - var names = Object.keys(attributes); - for (var i = 0, il = names.length; i < il; ++i) { - if (i) { - wwwAuthenticate += ','; - } - - var value = attributes[names[i]]; - if (value === null || - value === undefined) { // Value can be zero - - value = ''; - } - wwwAuthenticate += ' ' + names[i] + '="' + Hoek.escapeHeaderAttribute(value.toString()) + '"'; - } - } - - if (message) { - if (attributes) { - wwwAuthenticate += ','; - } - wwwAuthenticate += ' error="' + Hoek.escapeHeaderAttribute(message) + '"'; - } - else { - err.isMissing = true; - } - } - else { - - // function (message, wwwAuthenticate[]) - - var wwwArray = scheme; - for (var i = 0, il = wwwArray.length; i < il; ++i) { - if (i) { - wwwAuthenticate += ', '; - } - - wwwAuthenticate += wwwArray[i]; - } - } - - err.response.headers['WWW-Authenticate'] = wwwAuthenticate; - - return err; -}; - - -internals.Boom.clientTimeout = function (message) { - - return new internals.Boom(408, message); -}; - - -internals.Boom.serverTimeout = function (message) { - - return new internals.Boom(503, message); -}; - - -internals.Boom.forbidden = function (message) { - - return new internals.Boom(403, message); -}; - - -internals.Boom.notFound = function (message) { - - return new internals.Boom(404, message); -}; - - -internals.Boom.internal = function (message, data) { - - var err = new internals.Boom(500, message); - - if (data && data.stack) { - err.trace = data.stack.split('\n'); - err.outterTrace = Hoek.displayStack(1); - } - else { - err.trace = Hoek.displayStack(1); - } - - err.data = data; - err.response.payload.message = 'An internal server error occurred'; // Hide actual error from user - - return err; -}; - - -internals.Boom.passThrough = function (code, payload, contentType, headers) { - - var err = new internals.Boom(500, 'Pass-through'); // 500 code is only used to initialize - - err.data = { - code: code, - payload: payload, - type: contentType - }; - - err.response.code = code; - err.response.type = contentType; - err.response.headers = headers; - err.response.payload = payload; - - return err; -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/package.json deleted file mode 100755 index a6c56b90..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "boom", - "description": "HTTP-friendly error objects", - "version": "0.4.2", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [], - "repository": { - "type": "git", - "url": "git://github.com/spumko/boom" - }, - "main": "index", - "keywords": [ - "error", - "http" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "hoek": "0.9.x" - }, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/spumko/boom/raw/master/LICENSE" - } - ], - "readme": "<a href=\"https://github.com/spumko\"><img src=\"https://raw.github.com/spumko/spumko/master/images/from.png\" align=\"right\" /></a>\n![boom Logo](https://raw.github.com/spumko/boom/master/images/boom.png)\n\nHTTP-friendly error objects\n\n[![Build Status](https://secure.travis-ci.org/spumko/boom.png)](http://travis-ci.org/spumko/boom)\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/spumko/boom/issues" - }, - "homepage": "https://github.com/spumko/boom", - "_id": "boom@0.4.2", - "dist": { - "shasum": "92a32f029aba10e290058f22c83377d073ed5cdd" - }, - "_from": "boom@0.4.x", - "_resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js deleted file mode 100755 index a20c1c34..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js +++ /dev/null @@ -1,245 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Boom = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Boom', function () { - - it('returns an error with info when constructed using another error', function (done) { - - var error = new Error('ka-boom'); - error.xyz = 123; - var err = new Boom(error); - expect(err.data.xyz).to.equal(123); - expect(err.message).to.equal('ka-boom'); - expect(err.response).to.deep.equal({ - code: 500, - payload: { - code: 500, - error: 'Internal Server Error', - message: 'ka-boom' - }, - headers: {} - }); - done(); - }); - - describe('#isBoom', function () { - - it('returns true for Boom object', function (done) { - - expect(Boom.badRequest().isBoom).to.equal(true); - done(); - }); - - it('returns false for Error object', function (done) { - - expect(new Error().isBoom).to.not.exist; - done(); - }); - }); - - describe('#badRequest', function () { - - it('returns a 400 error code', function (done) { - - expect(Boom.badRequest().response.code).to.equal(400); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.badRequest('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#unauthorized', function () { - - it('returns a 401 error code', function (done) { - - var err = Boom.unauthorized(); - expect(err.response.code).to.equal(401); - expect(err.response.headers).to.deep.equal({}); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.unauthorized('my message').message).to.equal('my message'); - done(); - }); - - it('returns a WWW-Authenticate header when passed a scheme', function (done) { - - var err = Boom.unauthorized('boom', 'Test'); - expect(err.response.code).to.equal(401); - expect(err.response.headers['WWW-Authenticate']).to.equal('Test error="boom"'); - done(); - }); - - it('returns a WWW-Authenticate header when passed a scheme and attributes', function (done) { - - var err = Boom.unauthorized('boom', 'Test', { a: 1, b: 'something', c: null, d: 0 }); - expect(err.response.code).to.equal(401); - expect(err.response.headers['WWW-Authenticate']).to.equal('Test a="1", b="something", c="", d="0", error="boom"'); - done(); - }); - - it('sets the isMissing flag when error message is empty', function (done) { - - var err = Boom.unauthorized('', 'Basic'); - expect(err.isMissing).to.equal(true); - done(); - }); - - it('does not set the isMissing flag when error message is not empty', function (done) { - - var err = Boom.unauthorized('message', 'Basic'); - expect(err.isMissing).to.equal(undefined); - done(); - }); - - it('sets a WWW-Authenticate when passed as an array', function (done) { - - var err = Boom.unauthorized('message', ['Basic', 'Example e="1"', 'Another x="3", y="4"']); - expect(err.response.headers['WWW-Authenticate']).to.equal('Basic, Example e="1", Another x="3", y="4"'); - done(); - }); - }); - - describe('#clientTimeout', function () { - - it('returns a 408 error code', function (done) { - - expect(Boom.clientTimeout().response.code).to.equal(408); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.clientTimeout('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#serverTimeout', function () { - - it('returns a 503 error code', function (done) { - - expect(Boom.serverTimeout().response.code).to.equal(503); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.serverTimeout('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#forbidden', function () { - - it('returns a 403 error code', function (done) { - - expect(Boom.forbidden().response.code).to.equal(403); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.forbidden('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#notFound', function () { - - it('returns a 404 error code', function (done) { - - expect(Boom.notFound().response.code).to.equal(404); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.notFound('my message').message).to.equal('my message'); - done(); - }); - }); - - describe('#internal', function () { - - it('returns a 500 error code', function (done) { - - expect(Boom.internal().response.code).to.equal(500); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - var err = Boom.internal('my message'); - expect(err.message).to.equal('my message'); - expect(err.response.payload.message).to.equal('An internal server error occurred'); - done(); - }); - - it('passes data on the callback if its passed in', function (done) { - - expect(Boom.internal('my message', { my: 'data' }).data.my).to.equal('data'); - done(); - }); - - it('uses passed in stack if its available', function (done) { - - var error = new Error(); - error.stack = 'my stack line\nmy second stack line'; - expect(Boom.internal('my message', error).trace[0]).to.equal('my stack line'); - done(); - }); - }); - - describe('#passThrough', function () { - - it('returns a pass-through error', function (done) { - - var err = Boom.passThrough(499, { a: 1 }, 'application/text', { 'X-Test': 'Boom' }); - expect(err.response.code).to.equal(499); - expect(err.message).to.equal('Pass-through'); - expect(err.response).to.deep.equal({ - code: 499, - payload: { a: 1 }, - headers: { 'X-Test': 'Boom' }, - type: 'application/text' - }); - done(); - }); - }); - - describe('#reformat', function () { - - it('encodes any HTML markup in the response payload', function (done) { - - var boom = new Boom(new Error('<script>alert(1)</script>')); - expect(boom.response.payload.message).to.not.contain('<script>'); - done(); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore deleted file mode 100644 index b3bb5176..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml deleted file mode 100755 index 40ca59ee..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE deleted file mode 100755 index e699a7bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2013, Eran Hammer. -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 Eran Hammer 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 ERAN HAMMER 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile deleted file mode 100755 index 9e7138c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -test: - @./node_modules/.bin/lab -test-cov: - @./node_modules/.bin/lab -r threshold -t 100 -test-cov-html: - @./node_modules/.bin/lab -r html -o coverage.html -complexity: - @./node_modules/.bin/cr -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md deleted file mode 100644 index 6a900a49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md +++ /dev/null @@ -1,6 +0,0 @@ -cryptiles -========= - -General purpose crypto utilities - -[![Build Status](https://secure.travis-ci.org/hueniverse/cryptiles.png)](http://travis-ci.org/hueniverse/cryptiles) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js deleted file mode 100755 index dcf2bc38..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js +++ /dev/null @@ -1,68 +0,0 @@ -// Load modules - -var Crypto = require('crypto'); -var Boom = require('boom'); - - -// Declare internals - -var internals = {}; - - -// Generate a cryptographically strong pseudo-random data - -exports.randomString = function (size) { - - var buffer = exports.randomBits((size + 1) * 6); - if (buffer instanceof Error) { - return buffer; - } - - var string = buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, ''); - return string.slice(0, size); -}; - - -exports.randomBits = function (bits) { - - if (!bits || - bits < 0) { - - return Boom.internal('Invalid random bits count'); - } - - var bytes = Math.ceil(bits / 8); - try { - return Crypto.randomBytes(bytes); - } - catch (err) { - return Boom.internal('Failed generating random bits: ' + err.message); - } -}; - - -// Compare two strings using fixed time algorithm (to prevent time-based analysis of MAC digest match) - -exports.fixedTimeComparison = function (a, b) { - - if (typeof a !== 'string' || - typeof b !== 'string') { - - return false; - } - - var mismatch = (a.length === b.length ? 0 : 1); - if (mismatch) { - b = a; - } - - for (var i = 0, il = a.length; i < il; ++i) { - var ac = a.charCodeAt(i); - var bc = b.charCodeAt(i); - mismatch += (ac === bc ? 0 : 1); - } - - return (mismatch === 0); -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json deleted file mode 100755 index cafe4c1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "cryptiles", - "description": "General purpose crypto utilities", - "version": "0.2.2", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [], - "repository": { - "type": "git", - "url": "git://github.com/hueniverse/cryptiles" - }, - "main": "index", - "keywords": [ - "cryptography", - "security", - "utilites" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "boom": "0.4.x" - }, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/hueniverse/cryptiles/raw/master/LICENSE" - } - ], - "readme": "cryptiles\n=========\n\nGeneral purpose crypto utilities\n\n[![Build Status](https://secure.travis-ci.org/hueniverse/cryptiles.png)](http://travis-ci.org/hueniverse/cryptiles)\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/hueniverse/cryptiles/issues" - }, - "homepage": "https://github.com/hueniverse/cryptiles", - "_id": "cryptiles@0.2.2", - "dist": { - "shasum": "0462e8adb7667ffa104947a34a96e68627d8c95d" - }, - "_from": "cryptiles@0.2.x", - "_resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js deleted file mode 100755 index 58aaa70b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js +++ /dev/null @@ -1,101 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Cryptiles = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Cryptiles', function () { - - describe('#randomString', function () { - - it('should generate the right length string', function (done) { - - for (var i = 1; i <= 1000; ++i) { - expect(Cryptiles.randomString(i).length).to.equal(i); - } - - done(); - }); - - it('returns an error on invalid bits size', function (done) { - - expect(Cryptiles.randomString(99999999999999999999).message).to.equal('Failed generating random bits: Argument #1 must be number > 0'); - done(); - }); - }); - - describe('#randomBits', function () { - - it('returns an error on invalid input', function (done) { - - expect(Cryptiles.randomBits(0).message).to.equal('Invalid random bits count'); - done(); - }); - }); - - describe('#fixedTimeComparison', function () { - - var a = Cryptiles.randomString(50000); - var b = Cryptiles.randomString(150000); - - it('should take the same amount of time comparing different string sizes', function (done) { - - var now = Date.now(); - Cryptiles.fixedTimeComparison(b, a); - var t1 = Date.now() - now; - - now = Date.now(); - Cryptiles.fixedTimeComparison(b, b); - var t2 = Date.now() - now; - - expect(t2 - t1).to.be.within(-20, 20); - done(); - }); - - it('should return true for equal strings', function (done) { - - expect(Cryptiles.fixedTimeComparison(a, a)).to.equal(true); - done(); - }); - - it('should return false for different strings (size, a < b)', function (done) { - - expect(Cryptiles.fixedTimeComparison(a, a + 'x')).to.equal(false); - done(); - }); - - it('should return false for different strings (size, a > b)', function (done) { - - expect(Cryptiles.fixedTimeComparison(a + 'x', a)).to.equal(false); - done(); - }); - - it('should return false for different strings (size, a = b)', function (done) { - - expect(Cryptiles.fixedTimeComparison(a + 'x', a + 'y')).to.equal(false); - done(); - }); - - it('should return false when not a string', function (done) { - - expect(Cryptiles.fixedTimeComparison('x', null)).to.equal(false); - done(); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore deleted file mode 100644 index 9966e5e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov -complexity.md diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml deleted file mode 100755 index 40ca59ee..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE deleted file mode 100755 index 394adcff..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE +++ /dev/null @@ -1,33 +0,0 @@ -Copyright (c) 2011-2013, Walmart. -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 Walmart 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 WALMART 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. - - - * * * - - -Portions of this project were initially based on Postmile, Copyright (c) 2011, Yahoo Inc. -Postmile is published at https://github.com/yahoo/postmile and its licensing terms are -published at https://github.com/yahoo/postmile/blob/master/LICENSE. - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile deleted file mode 100755 index e605d6c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -test: - @node node_modules/lab/bin/lab -test-cov: - @node node_modules/lab/bin/lab -r threshold -t 100 -test-cov-html: - @node node_modules/lab/bin/lab -r html -o coverage.html -complexity: - @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/README.md deleted file mode 100755 index ac64e2fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/README.md +++ /dev/null @@ -1,436 +0,0 @@ -<a href="https://github.com/spumko"><img src="https://raw.github.com/spumko/spumko/master/images/from.png" align="right" /></a> -![hoek Logo](https://raw.github.com/spumko/hoek/master/images/hoek.png) - -General purpose node utilities - -[![Build Status](https://secure.travis-ci.org/spumko/hoek.png)](http://travis-ci.org/spumko/hoek) - -# Table of Contents - -* [Introduction](#introduction "Introduction") -* [Object](#object "Object") - * [clone](#cloneobj "clone") - * [merge](#mergetarget-source-isnulloverride-ismergearrays "merge") - * [applyToDefaults](#applytodefaultsdefaults-options "applyToDefaults") - * [unique](#uniquearray-key "unique") - * [mapToObject](#maptoobjectarray-key "mapToObject") - * [intersect](#intersectarray1-array2 "intersect") - * [matchKeys](#matchkeysobj-keys "matchKeys") - * [flatten](#flattenarray-target "flatten") - * [removeKeys](#removekeysobject-keys "removeKeys") - * [reach](#reachobj-chain "reach") - * [inheritAsync](#inheritasyncself-obj-keys "inheritAsync") - * [rename](#renameobj-from-to "rename") -* [Timer](#timer "Timer") -* [Binary Encoding/Decoding](#binary "Binary Encoding/Decoding") - * [base64urlEncode](#binary64urlEncodevalue "binary64urlEncode") - * [base64urlDecode](#binary64urlDecodevalue "binary64urlDecode") -* [Escaping Characters](#escaped "Escaping Characters") - * [escapeHtml](#escapeHtmlstring "escapeHtml") - * [escapeHeaderAttribute](#escapeHeaderAttributeattribute "escapeHeaderAttribute") - * [escapeRegex](#escapeRegexstring "escapeRegex") -* [Errors](#errors "Errors") - * [assert](#assertmessage "assert") - * [abort](#abortmessage "abort") - * [displayStack](#displayStackslice "displayStack") - * [callStack](#callStackslice "callStack") - * [toss](#tosscondition "toss") -* [Load files](#load-files "Load Files") - * [loadPackage](#loadPackagedir "loadpackage") - * [loadDirModules](#loadDirModulespath-excludefiles-target "loaddirmodules") - - - -# Introduction - -The *Hoek* general purpose node utilities library is used to aid in a variety of manners. It comes with useful methods for Arrays (clone, merge, applyToDefaults), Objects (removeKeys, copy), Asserting and more. - -For example, to use Hoek to set configuration with default options: -```javascript -var Hoek = require('hoek'); - -var default = {url : "www.github.com", port : "8000", debug : true} - -var config = Hoek.applyToDefaults(default, {port : "3000", admin : true}); - -// In this case, config would be { url: 'www.github.com', port: '3000', debug: true, admin: true } -``` - -Under each of the sections (such as Array), there are subsections which correspond to Hoek methods. Each subsection will explain how to use the corresponding method. In each js excerpt below, the var Hoek = require('hoek') is omitted for brevity. - -## Object - -Hoek provides several helpful methods for objects and arrays. - -### clone(obj) - -This method is used to clone an object or an array. A *deep copy* is made (duplicates everything, including values that are objects). - -```javascript - -var nestedObj = { - w: /^something$/ig, - x: { - a: [1, 2, 3], - b: 123456, - c: new Date() - }, - y: 'y', - z: new Date() - }; - -var copy = Hoek.clone(nestedObj); - -copy.x.b = 100; - -console.log(copy.y) // results in 'y' -console.log(nestedObj.x.b) // results in 123456 -console.log(copy.x.b) // results in 100 -``` - -### merge(target, source, isNullOverride, isMergeArrays) -isNullOverride, isMergeArrays default to true - -Merge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied - - -```javascript - -var target = {a: 1, b : 2} -var source = {a: 0, c: 5} -var source2 = {a: null, c: 5} - -var targetArray = [1, 2, 3]; -var sourceArray = [4, 5]; - -var newTarget = Hoek.merge(target, source); // results in {a: 0, b: 2, c: 5} -newTarget = Hoek.merge(target, source2); // results in {a: null, b: 2, c: 5} -newTarget = Hoek.merge(target, source2, false); // results in {a: 1, b: 2, c: 5} - -newTarget = Hoek.merge(targetArray, sourceArray) // results in [1, 2, 3, 4, 5] -newTarget = Hoek.merge(targetArray, sourceArray, true, false) // results in [4, 5] - - - - -``` - -### applyToDefaults(defaults, options) - -Apply options to a copy of the defaults - -```javascript - -var defaults = {host: "localhost", port: 8000}; -var options = {port: 8080}; - -var config = Hoek.applyToDefaults(defaults, options); // results in {host: "localhost", port: 8080}; - - -``` - -### unique(array, key) - -Remove duplicate items from Array - -```javascript - -var array = [1, 2, 2, 3, 3, 4, 5, 6]; - -var newArray = Hoek.unique(array); // results in [1,2,3,4,5,6]; - -array = [{id: 1}, {id: 1}, {id: 2}]; - -newArray = Hoek.unique(array, "id") // results in [{id: 1}, {id: 2}] - -``` - -### mapToObject(array, key) - -Convert an Array into an Object - -```javascript - -var array = [1,2,3]; -var newObject = Hoek.mapToObject(array); // results in [{"1": true}, {"2": true}, {"3": true}] - -array = [{id: 1}, {id: 2}]; -newObject = Hoek.mapToObject(array, "id") // results in [{"id": 1}, {"id": 2}] - -``` -### intersect(array1, array2) - -Find the common unique items in two arrays - -```javascript - -var array1 = [1, 2, 3]; -var array2 = [1, 4, 5]; - -var newArray = Hoek.intersect(array1, array2) // results in [1] - -``` - -### matchKeys(obj, keys) - -Find which keys are present - -```javascript - -var obj = {a: 1, b: 2, c: 3}; -var keys = ["a", "e"]; - -Hoek.matchKeys(obj, keys) // returns ["a"] - -``` - -### flatten(array, target) - -Flatten an array - -```javascript - -var array = [1, 2, 3]; -var target = [4, 5]; - -var flattenedArray = Hoek.flatten(array, target) // results in [4, 5, 1, 2, 3]; - -``` - -### removeKeys(object, keys) - -Remove keys - -```javascript - -var object = {a: 1, b: 2, c: 3, d: 4}; - -var keys = ["a", "b"]; - -Hoek.removeKeys(object, keys) // object is now {c: 3, d: 4} - -``` - -### reach(obj, chain) - -Converts an object key chain string to reference - -```javascript - -var chain = 'a.b.c'; -var obj = {a : {b : { c : 1}}}; - -Hoek.reach(obj, chain) // returns 1 - -``` - -### inheritAsync(self, obj, keys) - -Inherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors - -```javascript - -var targetFunc = function () { }; - -var proto = { - a: function () { - return 'a!'; - }, - b: function () { - return 'b!'; - }, - c: function () { - throw new Error('c!'); - } - }; - -var keys = ['a', 'c']; - -Hoek.inheritAsync(targetFunc, proto, ['a', 'c']); - -var target = new targetFunc(); - -target.a(function(err, result){console.log(result)} // returns 'a!' - -target.c(function(err, result){console.log(result)} // returns undefined - -target.b(function(err, result){console.log(result)} // gives error: Object [object Object] has no method 'b' - -``` - -### rename(obj, from, to) - -Rename a key of an object - -```javascript - -var obj = {a : 1, b : 2}; - -Hoek.rename(obj, "a", "c"); // obj is now {c : 1, b : 2} - -``` - - -# Timer - -A Timer object. Initializing a new timer object sets the ts to the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC. - -```javascript - - -example : - - -var timerObj = new Hoek.Timer(); -console.log("Time is now: " + timerObj.ts) -console.log("Elapsed time from initialization: " + timerObj.elapsed() + 'milliseconds') - -``` - -# Binary Encoding/Decoding - -### base64urlEncode(value) - -Encodes value in Base64 or URL encoding - -### base64urlDecode(value) - -Decodes data in Base64 or URL encoding. -# Escaping Characters - -Hoek provides convenient methods for escaping html characters. The escaped characters are as followed: - -```javascript - -internals.htmlEscaped = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' -}; - -``` - -### escapeHtml(string) - -```javascript - -var string = '<html> hey </html>'; -var escapedString = Hoek.escapeHtml(string); // returns <html> hey </html> - -``` - -### escapeHeaderAttribute(attribute) - -Escape attribute value for use in HTTP header - -```javascript - -var a = Hoek.escapeHeaderAttribute('I said "go w\\o me"'); //returns I said \"go w\\o me\" - - -``` - - -### escapeRegex(string) - -Escape string for Regex construction - -```javascript - -var a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\/`"(>)[<]d{}s,'); // returns 4\^f\$s\.4\*5\+\-_\?%\=#\!\:@\|~\\\/`"\(>\)\[<\]d\{\}s\, - - - -``` - -# Errors - -### assert(message) - -```javascript - -var a = 1, b =2; - -Hoek.assert(a === b, 'a should equal b'); // ABORT: a should equal b - -``` - -### abort(message) - -First checks if process.env.NODE_ENV === 'test', and if so, throws error message. Otherwise, -displays most recent stack and then exits process. - - - -### displayStack(slice) - -Displays the trace stack - -```javascript - -var stack = Hoek.displayStack(); -console.log(stack) // returns something like: - -[ 'null (/Users/user/Desktop/hoek/test.js:4:18)', - 'Module._compile (module.js:449:26)', - 'Module._extensions..js (module.js:467:10)', - 'Module.load (module.js:356:32)', - 'Module._load (module.js:312:12)', - 'Module.runMain (module.js:492:10)', - 'startup.processNextTick.process._tickCallback (node.js:244:9)' ] - -``` - -### callStack(slice) - -Returns a trace stack array. - -```javascript - -var stack = Hoek.callStack(); -console.log(stack) // returns something like: - -[ [ '/Users/user/Desktop/hoek/test.js', 4, 18, null, false ], - [ 'module.js', 449, 26, 'Module._compile', false ], - [ 'module.js', 467, 10, 'Module._extensions..js', false ], - [ 'module.js', 356, 32, 'Module.load', false ], - [ 'module.js', 312, 12, 'Module._load', false ], - [ 'module.js', 492, 10, 'Module.runMain', false ], - [ 'node.js', - 244, - 9, - 'startup.processNextTick.process._tickCallback', - false ] ] - - -``` - -### toss(condition) - -toss(condition /*, [message], callback */) - -Return an error as first argument of a callback - - -# Load Files - -### loadPackage(dir) - -Load and parse package.json process root or given directory - -```javascript - -var pack = Hoek.loadPackage(); // pack.name === 'hoek' - -``` - -### loadDirModules(path, excludeFiles, target) - -Loads modules from a given path; option to exclude files (array). - - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/images/hoek.png b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/images/hoek.png deleted file mode 100755 index 6ccfcb12be76a7a8331428c87337b20b901e869c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37939 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 T*vZ8J00000NkvXXu0mjfKFT-e diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js deleted file mode 100755 index 666b3dc8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js +++ /dev/null @@ -1,132 +0,0 @@ -// Declare internals - -var internals = {}; - - -exports.escapeJavaScript = function (input) { - - if (!input) { - return ''; - } - - var escaped = ''; - - for (var i = 0, il = input.length; i < il; ++i) { - - var charCode = input.charCodeAt(i); - - if (internals.isSafe(charCode)) { - escaped += input[i]; - } - else { - escaped += internals.escapeJavaScriptChar(charCode); - } - } - - return escaped; -}; - - -exports.escapeHtml = function (input) { - - if (!input) { - return ''; - } - - var escaped = ''; - - for (var i = 0, il = input.length; i < il; ++i) { - - var charCode = input.charCodeAt(i); - - if (internals.isSafe(charCode)) { - escaped += input[i]; - } - else { - escaped += internals.escapeHtmlChar(charCode); - } - } - - return escaped; -}; - - -internals.escapeJavaScriptChar = function (charCode) { - - if (charCode >= 256) { - return '\\u' + internals.padLeft('' + charCode, 4); - } - - var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex'); - return '\\x' + internals.padLeft(hexValue, 2); -}; - - -internals.escapeHtmlChar = function (charCode) { - - var namedEscape = internals.namedHtml[charCode]; - if (typeof namedEscape !== 'undefined') { - return namedEscape; - } - - if (charCode >= 256) { - return '&#' + charCode + ';'; - } - - var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex'); - return '&#x' + internals.padLeft(hexValue, 2) + ';'; -}; - - -internals.padLeft = function (str, len) { - - while (str.length < len) { - str = '0' + str; - } - - return str; -}; - - -internals.isSafe = function (charCode) { - - return (typeof internals.safeCharCodes[charCode] !== 'undefined'); -}; - - -internals.namedHtml = { - '38': '&', - '60': '<', - '62': '>', - '34': '"', - '160': ' ', - '162': '¢', - '163': '£', - '164': '¤', - '169': '©', - '174': '®' -}; - - -internals.safeCharCodes = (function () { - - var safe = {}; - - for (var i = 32; i < 123; ++i) { - - if ((i >= 97 && i <= 122) || // a-z - (i >= 65 && i <= 90) || // A-Z - (i >= 48 && i <= 57) || // 0-9 - i === 32 || // space - i === 46 || // . - i === 44 || // , - i === 45 || // - - i === 58 || // : - i === 95) { // _ - - safe[i] = null; - } - } - - return safe; -}()); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js deleted file mode 100755 index 806260d2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js +++ /dev/null @@ -1,585 +0,0 @@ -// Load modules - -var Fs = require('fs'); -var Escape = require('./escape'); - - -// Declare internals - -var internals = {}; - - -// Clone object or array - -exports.clone = function (obj, seen) { - - if (typeof obj !== 'object' || - obj === null) { - - return obj; - } - - seen = seen || { orig: [], copy: [] }; - - var lookup = seen.orig.indexOf(obj); - if (lookup !== -1) { - return seen.copy[lookup]; - } - - var newObj = (obj instanceof Array) ? [] : {}; - - seen.orig.push(obj); - seen.copy.push(newObj); - - for (var i in obj) { - if (obj.hasOwnProperty(i)) { - if (obj[i] instanceof Buffer) { - newObj[i] = new Buffer(obj[i]); - } - else if (obj[i] instanceof Date) { - newObj[i] = new Date(obj[i].getTime()); - } - else if (obj[i] instanceof RegExp) { - var flags = '' + (obj[i].global ? 'g' : '') + (obj[i].ignoreCase ? 'i' : '') + (obj[i].multiline ? 'm' : ''); - newObj[i] = new RegExp(obj[i].source, flags); - } - else { - newObj[i] = exports.clone(obj[i], seen); - } - } - } - - return newObj; -}; - - -// Merge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied - -exports.merge = function (target, source, isNullOverride /* = true */, isMergeArrays /* = true */) { - - exports.assert(target && typeof target == 'object', 'Invalid target value: must be an object'); - exports.assert(source === null || source === undefined || typeof source === 'object', 'Invalid source value: must be null, undefined, or an object'); - - if (!source) { - return target; - } - - if (source instanceof Array) { - exports.assert(target instanceof Array, 'Cannot merge array onto an object'); - if (isMergeArrays === false) { // isMergeArrays defaults to true - target.length = 0; // Must not change target assignment - } - - for (var i = 0, il = source.length; i < il; ++i) { - target.push(source[i]); - } - - return target; - } - - var keys = Object.keys(source); - for (var k = 0, kl = keys.length; k < kl; ++k) { - var key = keys[k]; - var value = source[key]; - if (value && - typeof value === 'object') { - - if (!target[key] || - typeof target[key] !== 'object') { - - target[key] = exports.clone(value); - } - else { - exports.merge(target[key], source[key], isNullOverride, isMergeArrays); - } - } - else { - if (value !== null && value !== undefined) { // Explicit to preserve empty strings - target[key] = value; - } - else if (isNullOverride !== false) { // Defaults to true - target[key] = value; - } - } - } - - return target; -}; - - -// Apply options to a copy of the defaults - -exports.applyToDefaults = function (defaults, options) { - - exports.assert(defaults && typeof defaults == 'object', 'Invalid defaults value: must be an object'); - exports.assert(!options || options === true || typeof options === 'object', 'Invalid options value: must be true, falsy or an object'); - - if (!options) { // If no options, return null - return null; - } - - var copy = exports.clone(defaults); - - if (options === true) { // If options is set to true, use defaults - return copy; - } - - return exports.merge(copy, options, false, false); -}; - - -// Remove duplicate items from array - -exports.unique = function (array, key) { - - var index = {}; - var result = []; - - for (var i = 0, il = array.length; i < il; ++i) { - var id = (key ? array[i][key] : array[i]); - if (index[id] !== true) { - - result.push(array[i]); - index[id] = true; - } - } - - return result; -}; - - -// Convert array into object - -exports.mapToObject = function (array, key) { - - if (!array) { - return null; - } - - var obj = {}; - for (var i = 0, il = array.length; i < il; ++i) { - if (key) { - if (array[i][key]) { - obj[array[i][key]] = true; - } - } - else { - obj[array[i]] = true; - } - } - - return obj; -}; - - -// Find the common unique items in two arrays - -exports.intersect = function (array1, array2, justFirst) { - - if (!array1 || !array2) { - return []; - } - - var common = []; - var hash = (array1 instanceof Array ? exports.mapToObject(array1) : array1); - var found = {}; - for (var i = 0, il = array2.length; i < il; ++i) { - if (hash[array2[i]] && !found[array2[i]]) { - if (justFirst) { - return array2[i]; - } - - common.push(array2[i]); - found[array2[i]] = true; - } - } - - return (justFirst ? null : common); -}; - - -// Find which keys are present - -exports.matchKeys = function (obj, keys) { - - var matched = []; - for (var i = 0, il = keys.length; i < il; ++i) { - if (obj.hasOwnProperty(keys[i])) { - matched.push(keys[i]); - } - } - return matched; -}; - - -// Flatten array - -exports.flatten = function (array, target) { - - var result = target || []; - - for (var i = 0, il = array.length; i < il; ++i) { - if (Array.isArray(array[i])) { - exports.flatten(array[i], result); - } - else { - result.push(array[i]); - } - } - - return result; -}; - - -// Remove keys - -exports.removeKeys = function (object, keys) { - - for (var i = 0, il = keys.length; i < il; i++) { - delete object[keys[i]]; - } -}; - - -// Convert an object key chain string ('a.b.c') to reference (object[a][b][c]) - -exports.reach = function (obj, chain) { - - var path = chain.split('.'); - var ref = obj; - for (var i = 0, il = path.length; i < il; ++i) { - if (ref) { - ref = ref[path[i]]; - } - } - - return ref; -}; - - -// Inherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors - -exports.inheritAsync = function (self, obj, keys) { - - keys = keys || null; - - for (var i in obj) { - if (obj.hasOwnProperty(i)) { - if (keys instanceof Array && - keys.indexOf(i) < 0) { - - continue; - } - - self.prototype[i] = (function (fn) { - - return function (next) { - - var result = null; - try { - result = fn(); - } - catch (err) { - return next(err); - } - - return next(null, result); - }; - })(obj[i]); - } - } -}; - - -exports.formatStack = function (stack) { - - var trace = []; - for (var i = 0, il = stack.length; i < il; ++i) { - var item = stack[i]; - trace.push([item.getFileName(), item.getLineNumber(), item.getColumnNumber(), item.getFunctionName(), item.isConstructor()]); - } - - return trace; -}; - - -exports.formatTrace = function (trace) { - - var display = []; - - for (var i = 0, il = trace.length; i < il; ++i) { - var row = trace[i]; - display.push((row[4] ? 'new ' : '') + row[3] + ' (' + row[0] + ':' + row[1] + ':' + row[2] + ')'); - } - - return display; -}; - - -exports.callStack = function (slice) { - - // http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi - - var v8 = Error.prepareStackTrace; - Error.prepareStackTrace = function (err, stack) { - - return stack; - }; - - var capture = {}; - Error.captureStackTrace(capture, arguments.callee); - var stack = capture.stack; - - Error.prepareStackTrace = v8; - - var trace = exports.formatStack(stack); - - if (slice) { - return trace.slice(slice); - } - - return trace; -}; - - -exports.displayStack = function (slice) { - - var trace = exports.callStack(slice === undefined ? 1 : slice + 1); - - return exports.formatTrace(trace); -}; - - -exports.abortThrow = false; - - -exports.abort = function (message, hideStack) { - - if (process.env.NODE_ENV === 'test' || exports.abortThrow === true) { - throw new Error(message || 'Unknown error'); - } - - var stack = ''; - if (!hideStack) { - stack = exports.displayStack(1).join('\n\t'); - } - console.log('ABORT: ' + message + '\n\t' + stack); - process.exit(1); -}; - - -exports.assert = function (condition /*, msg1, msg2, msg3 */) { - - if (condition) { - return; - } - - var msgs = Array.prototype.slice.call(arguments, 1); - msgs = msgs.map(function (msg) { - - return typeof msg === 'string' ? msg : msg instanceof Error ? msg.message : JSON.stringify(msg); - }); - throw new Error(msgs.join(' ') || 'Unknown error'); -}; - - -exports.loadDirModules = function (path, excludeFiles, target) { // target(filename, name, capName) - - var exclude = {}; - for (var i = 0, il = excludeFiles.length; i < il; ++i) { - exclude[excludeFiles[i] + '.js'] = true; - } - - var files = Fs.readdirSync(path); - for (i = 0, il = files.length; i < il; ++i) { - var filename = files[i]; - if (/\.js$/.test(filename) && - !exclude[filename]) { - - var name = filename.substr(0, filename.lastIndexOf('.')); - var capName = name.charAt(0).toUpperCase() + name.substr(1).toLowerCase(); - - if (typeof target !== 'function') { - target[capName] = require(path + '/' + name); - } - else { - target(path + '/' + name, name, capName); - } - } - } -}; - - -exports.rename = function (obj, from, to) { - - obj[to] = obj[from]; - delete obj[from]; -}; - - -exports.Timer = function () { - - this.reset(); -}; - - -exports.Timer.prototype.reset = function () { - - this.ts = Date.now(); -}; - - -exports.Timer.prototype.elapsed = function () { - - return Date.now() - this.ts; -}; - - -// Load and parse package.json process root or given directory - -exports.loadPackage = function (dir) { - - var result = {}; - var filepath = (dir || process.env.PWD) + '/package.json'; - if (Fs.existsSync(filepath)) { - try { - result = JSON.parse(Fs.readFileSync(filepath)); - } - catch (e) { } - } - - return result; -}; - - -// Escape string for Regex construction - -exports.escapeRegex = function (string) { - - // Escape ^$.*+-?=!:|\/()[]{}, - return string.replace(/[\^\$\.\*\+\-\?\=\!\:\|\\\/\(\)\[\]\{\}\,]/g, '\\$&'); -}; - - -// Return an error as first argument of a callback - -exports.toss = function (condition /*, [message], next */) { - - var message = (arguments.length === 3 ? arguments[1] : ''); - var next = (arguments.length === 3 ? arguments[2] : arguments[1]); - - var err = (message instanceof Error ? message : (message ? new Error(message) : (condition instanceof Error ? condition : new Error()))); - - if (condition instanceof Error || - !condition) { - - return next(err); - } -}; - - -// Base64url (RFC 4648) encode - -exports.base64urlEncode = function (value) { - - return (new Buffer(value, 'binary')).toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, ''); -}; - - -// Base64url (RFC 4648) decode - -exports.base64urlDecode = function (encoded) { - - if (encoded && - !encoded.match(/^[\w\-]*$/)) { - - return new Error('Invalid character'); - } - - try { - return (new Buffer(encoded.replace(/-/g, '+').replace(/:/g, '/'), 'base64')).toString('binary'); - } - catch (err) { - return err; - } -}; - - -// Escape attribute value for use in HTTP header - -exports.escapeHeaderAttribute = function (attribute) { - - // Allowed value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9, \, " - - exports.assert(attribute.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~\"\\]*$/), 'Bad attribute value (' + attribute + ')'); - - return attribute.replace(/\\/g, '\\\\').replace(/\"/g, '\\"'); // Escape quotes and slash -}; - - -exports.escapeHtml = function (string) { - - return Escape.escapeHtml(string); -}; - - -exports.escapeJavaScript = function (string) { - - return Escape.escapeJavaScript(string); -}; - - -/* -var event = { - timestamp: now.getTime(), - tags: ['tag'], - data: { some: 'data' } -}; -*/ - -exports.consoleFunc = console.log; - -exports.printEvent = function (event) { - - var pad = function (value) { - - return (value < 10 ? '0' : '') + value; - }; - - var now = new Date(event.timestamp); - var timestring = (now.getYear() - 100).toString() + - pad(now.getMonth() + 1) + - pad(now.getDate()) + - '/' + - pad(now.getHours()) + - pad(now.getMinutes()) + - pad(now.getSeconds()) + - '.' + - now.getMilliseconds(); - - var data = event.data; - if (typeof event.data !== 'string') { - try { - data = JSON.stringify(event.data); - } - catch (e) { - data = 'JSON Error: ' + e.message; - } - } - - var output = timestring + ', ' + event.tags[0] + ', ' + data; - exports.consoleFunc(output); -}; - - -exports.nextTick = function (callback) { - - return function () { - - var args = arguments; - process.nextTick(function () { - - callback.apply(null, args); - }); - }; -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/package.json deleted file mode 100755 index 158eb318..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "hoek", - "description": "General purpose node utilities", - "version": "0.9.1", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [ - { - "name": "Van Nguyen", - "email": "the.gol.effect@gmail.com" - } - ], - "repository": { - "type": "git", - "url": "git://github.com/spumko/hoek" - }, - "main": "index", - "keywords": [ - "utilities" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": {}, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/spumko/hoek/raw/master/LICENSE" - } - ], - "readme": "<a href=\"https://github.com/spumko\"><img src=\"https://raw.github.com/spumko/spumko/master/images/from.png\" align=\"right\" /></a>\r\n![hoek Logo](https://raw.github.com/spumko/hoek/master/images/hoek.png)\r\n\r\nGeneral purpose node utilities\r\n\r\n[![Build Status](https://secure.travis-ci.org/spumko/hoek.png)](http://travis-ci.org/spumko/hoek)\r\n\r\n# Table of Contents\r\n\r\n* [Introduction](#introduction \"Introduction\")\r\n* [Object](#object \"Object\")\r\n * [clone](#cloneobj \"clone\")\r\n * [merge](#mergetarget-source-isnulloverride-ismergearrays \"merge\")\r\n * [applyToDefaults](#applytodefaultsdefaults-options \"applyToDefaults\")\r\n * [unique](#uniquearray-key \"unique\")\r\n * [mapToObject](#maptoobjectarray-key \"mapToObject\")\r\n * [intersect](#intersectarray1-array2 \"intersect\")\r\n * [matchKeys](#matchkeysobj-keys \"matchKeys\")\r\n * [flatten](#flattenarray-target \"flatten\")\r\n * [removeKeys](#removekeysobject-keys \"removeKeys\")\r\n * [reach](#reachobj-chain \"reach\")\r\n * [inheritAsync](#inheritasyncself-obj-keys \"inheritAsync\")\r\n * [rename](#renameobj-from-to \"rename\")\r\n* [Timer](#timer \"Timer\")\r\n* [Binary Encoding/Decoding](#binary \"Binary Encoding/Decoding\")\r\n * [base64urlEncode](#binary64urlEncodevalue \"binary64urlEncode\")\r\n * [base64urlDecode](#binary64urlDecodevalue \"binary64urlDecode\")\r\n* [Escaping Characters](#escaped \"Escaping Characters\")\r\n * [escapeHtml](#escapeHtmlstring \"escapeHtml\")\r\n * [escapeHeaderAttribute](#escapeHeaderAttributeattribute \"escapeHeaderAttribute\")\r\n * [escapeRegex](#escapeRegexstring \"escapeRegex\")\r\n* [Errors](#errors \"Errors\")\r\n * [assert](#assertmessage \"assert\")\r\n * [abort](#abortmessage \"abort\")\r\n * [displayStack](#displayStackslice \"displayStack\")\r\n * [callStack](#callStackslice \"callStack\")\r\n * [toss](#tosscondition \"toss\")\r\n* [Load files](#load-files \"Load Files\")\r\n * [loadPackage](#loadPackagedir \"loadpackage\")\r\n * [loadDirModules](#loadDirModulespath-excludefiles-target \"loaddirmodules\")\r\n\r\n\r\n\r\n# Introduction\r\n\r\nThe *Hoek* general purpose node utilities library is used to aid in a variety of manners. It comes with useful methods for Arrays (clone, merge, applyToDefaults), Objects (removeKeys, copy), Asserting and more. \r\n\r\nFor example, to use Hoek to set configuration with default options:\r\n```javascript\r\nvar Hoek = require('hoek');\r\n\r\nvar default = {url : \"www.github.com\", port : \"8000\", debug : true}\r\n\r\nvar config = Hoek.applyToDefaults(default, {port : \"3000\", admin : true});\r\n\r\n// In this case, config would be { url: 'www.github.com', port: '3000', debug: true, admin: true }\r\n```\r\n\r\nUnder each of the sections (such as Array), there are subsections which correspond to Hoek methods. Each subsection will explain how to use the corresponding method. In each js excerpt below, the var Hoek = require('hoek') is omitted for brevity.\r\n\r\n## Object\r\n\r\nHoek provides several helpful methods for objects and arrays.\r\n\r\n### clone(obj)\r\n\r\nThis method is used to clone an object or an array. A *deep copy* is made (duplicates everything, including values that are objects). \r\n\r\n```javascript\r\n\r\nvar nestedObj = {\r\n w: /^something$/ig,\r\n x: {\r\n a: [1, 2, 3],\r\n b: 123456,\r\n c: new Date()\r\n },\r\n y: 'y',\r\n z: new Date()\r\n };\r\n\r\nvar copy = Hoek.clone(nestedObj);\r\n\r\ncopy.x.b = 100;\r\n\r\nconsole.log(copy.y) // results in 'y'\r\nconsole.log(nestedObj.x.b) // results in 123456\r\nconsole.log(copy.x.b) // results in 100\r\n```\r\n\r\n### merge(target, source, isNullOverride, isMergeArrays)\r\nisNullOverride, isMergeArrays default to true\r\n\r\nMerge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied\r\n\r\n\r\n```javascript\r\n\r\nvar target = {a: 1, b : 2}\r\nvar source = {a: 0, c: 5}\r\nvar source2 = {a: null, c: 5}\r\n\r\nvar targetArray = [1, 2, 3];\r\nvar sourceArray = [4, 5];\r\n\r\nvar newTarget = Hoek.merge(target, source); // results in {a: 0, b: 2, c: 5}\r\nnewTarget = Hoek.merge(target, source2); // results in {a: null, b: 2, c: 5}\r\nnewTarget = Hoek.merge(target, source2, false); // results in {a: 1, b: 2, c: 5}\r\n\r\nnewTarget = Hoek.merge(targetArray, sourceArray) // results in [1, 2, 3, 4, 5]\r\nnewTarget = Hoek.merge(targetArray, sourceArray, true, false) // results in [4, 5]\r\n\r\n\r\n\r\n\r\n```\r\n\r\n### applyToDefaults(defaults, options)\r\n\r\nApply options to a copy of the defaults\r\n\r\n```javascript\r\n\r\nvar defaults = {host: \"localhost\", port: 8000};\r\nvar options = {port: 8080};\r\n\r\nvar config = Hoek.applyToDefaults(defaults, options); // results in {host: \"localhost\", port: 8080};\r\n\r\n\r\n```\r\n\r\n### unique(array, key)\r\n\r\nRemove duplicate items from Array\r\n\r\n```javascript\r\n\r\nvar array = [1, 2, 2, 3, 3, 4, 5, 6];\r\n\r\nvar newArray = Hoek.unique(array); // results in [1,2,3,4,5,6];\r\n\r\narray = [{id: 1}, {id: 1}, {id: 2}];\r\n\r\nnewArray = Hoek.unique(array, \"id\") // results in [{id: 1}, {id: 2}]\r\n\r\n```\r\n\r\n### mapToObject(array, key)\r\n\r\nConvert an Array into an Object\r\n\r\n```javascript\r\n\r\nvar array = [1,2,3];\r\nvar newObject = Hoek.mapToObject(array); // results in [{\"1\": true}, {\"2\": true}, {\"3\": true}]\r\n\r\narray = [{id: 1}, {id: 2}];\r\nnewObject = Hoek.mapToObject(array, \"id\") // results in [{\"id\": 1}, {\"id\": 2}]\r\n\r\n```\r\n### intersect(array1, array2)\r\n\r\nFind the common unique items in two arrays\r\n\r\n```javascript\r\n\r\nvar array1 = [1, 2, 3];\r\nvar array2 = [1, 4, 5];\r\n\r\nvar newArray = Hoek.intersect(array1, array2) // results in [1]\r\n\r\n```\r\n\r\n### matchKeys(obj, keys) \r\n\r\nFind which keys are present\r\n\r\n```javascript\r\n\r\nvar obj = {a: 1, b: 2, c: 3};\r\nvar keys = [\"a\", \"e\"];\r\n\r\nHoek.matchKeys(obj, keys) // returns [\"a\"]\r\n\r\n```\r\n\r\n### flatten(array, target)\r\n\r\nFlatten an array\r\n\r\n```javascript\r\n\r\nvar array = [1, 2, 3];\r\nvar target = [4, 5]; \r\n\r\nvar flattenedArray = Hoek.flatten(array, target) // results in [4, 5, 1, 2, 3];\r\n\r\n```\r\n\r\n### removeKeys(object, keys)\r\n\r\nRemove keys\r\n\r\n```javascript\r\n\r\nvar object = {a: 1, b: 2, c: 3, d: 4};\r\n\r\nvar keys = [\"a\", \"b\"];\r\n\r\nHoek.removeKeys(object, keys) // object is now {c: 3, d: 4}\r\n\r\n```\r\n\r\n### reach(obj, chain)\r\n\r\nConverts an object key chain string to reference\r\n\r\n```javascript\r\n\r\nvar chain = 'a.b.c';\r\nvar obj = {a : {b : { c : 1}}};\r\n\r\nHoek.reach(obj, chain) // returns 1\r\n\r\n```\r\n\r\n### inheritAsync(self, obj, keys) \r\n\r\nInherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors\r\n\r\n```javascript\r\n\r\nvar targetFunc = function () { };\r\n\r\nvar proto = {\r\n a: function () {\r\n return 'a!';\r\n },\r\n b: function () {\r\n return 'b!';\r\n },\r\n c: function () {\r\n throw new Error('c!');\r\n }\r\n };\r\n\r\nvar keys = ['a', 'c'];\r\n\r\nHoek.inheritAsync(targetFunc, proto, ['a', 'c']);\r\n\r\nvar target = new targetFunc();\r\n\r\ntarget.a(function(err, result){console.log(result)} // returns 'a!' \r\n\r\ntarget.c(function(err, result){console.log(result)} // returns undefined\r\n\r\ntarget.b(function(err, result){console.log(result)} // gives error: Object [object Object] has no method 'b'\r\n\r\n```\r\n\r\n### rename(obj, from, to)\r\n\r\nRename a key of an object\r\n\r\n```javascript\r\n\r\nvar obj = {a : 1, b : 2};\r\n\r\nHoek.rename(obj, \"a\", \"c\"); // obj is now {c : 1, b : 2}\r\n\r\n```\r\n\r\n\r\n# Timer\r\n\r\nA Timer object. Initializing a new timer object sets the ts to the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.\r\n\r\n```javascript\r\n\r\n\r\nexample : \r\n\r\n\r\nvar timerObj = new Hoek.Timer();\r\nconsole.log(\"Time is now: \" + timerObj.ts)\r\nconsole.log(\"Elapsed time from initialization: \" + timerObj.elapsed() + 'milliseconds')\r\n\r\n```\r\n\r\n# Binary Encoding/Decoding\r\n\r\n### base64urlEncode(value)\r\n\r\nEncodes value in Base64 or URL encoding\r\n\r\n### base64urlDecode(value)\r\n\r\nDecodes data in Base64 or URL encoding.\r\n# Escaping Characters\r\n\r\nHoek provides convenient methods for escaping html characters. The escaped characters are as followed:\r\n\r\n```javascript\r\n\r\ninternals.htmlEscaped = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": ''',\r\n '`': '`'\r\n};\r\n\r\n```\r\n\r\n### escapeHtml(string)\r\n\r\n```javascript\r\n\r\nvar string = '<html> hey </html>';\r\nvar escapedString = Hoek.escapeHtml(string); // returns <html> hey </html>\r\n\r\n```\r\n\r\n### escapeHeaderAttribute(attribute)\r\n\r\nEscape attribute value for use in HTTP header\r\n\r\n```javascript\r\n\r\nvar a = Hoek.escapeHeaderAttribute('I said \"go w\\\\o me\"'); //returns I said \\\"go w\\\\o me\\\"\r\n\r\n\r\n```\r\n\r\n\r\n### escapeRegex(string)\r\n\r\nEscape string for Regex construction\r\n\r\n```javascript\r\n\r\nvar a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\\\/`\"(>)[<]d{}s,'); // returns 4\\^f\\$s\\.4\\*5\\+\\-_\\?%\\=#\\!\\:@\\|~\\\\\\/`\"\\(>\\)\\[<\\]d\\{\\}s\\,\r\n\r\n\r\n\r\n```\r\n\r\n# Errors\r\n\r\n### assert(message)\r\n\r\n```javascript\r\n\r\nvar a = 1, b =2;\r\n\r\nHoek.assert(a === b, 'a should equal b'); // ABORT: a should equal b\r\n\r\n```\r\n\r\n### abort(message)\r\n\r\nFirst checks if process.env.NODE_ENV === 'test', and if so, throws error message. Otherwise,\r\ndisplays most recent stack and then exits process.\r\n\r\n\r\n\r\n### displayStack(slice)\r\n\r\nDisplays the trace stack\r\n\r\n```javascript\r\n\r\nvar stack = Hoek.displayStack();\r\nconsole.log(stack) // returns something like:\r\n\r\n[ 'null (/Users/user/Desktop/hoek/test.js:4:18)',\r\n 'Module._compile (module.js:449:26)',\r\n 'Module._extensions..js (module.js:467:10)',\r\n 'Module.load (module.js:356:32)',\r\n 'Module._load (module.js:312:12)',\r\n 'Module.runMain (module.js:492:10)',\r\n 'startup.processNextTick.process._tickCallback (node.js:244:9)' ]\r\n\r\n```\r\n\r\n### callStack(slice)\r\n\r\nReturns a trace stack array.\r\n\r\n```javascript\r\n\r\nvar stack = Hoek.callStack();\r\nconsole.log(stack) // returns something like:\r\n\r\n[ [ '/Users/user/Desktop/hoek/test.js', 4, 18, null, false ],\r\n [ 'module.js', 449, 26, 'Module._compile', false ],\r\n [ 'module.js', 467, 10, 'Module._extensions..js', false ],\r\n [ 'module.js', 356, 32, 'Module.load', false ],\r\n [ 'module.js', 312, 12, 'Module._load', false ],\r\n [ 'module.js', 492, 10, 'Module.runMain', false ],\r\n [ 'node.js',\r\n 244,\r\n 9,\r\n 'startup.processNextTick.process._tickCallback',\r\n false ] ]\r\n\r\n\r\n```\r\n\r\n### toss(condition)\r\n\r\ntoss(condition /*, [message], callback */)\r\n\r\nReturn an error as first argument of a callback\r\n\r\n\r\n# Load Files\r\n\r\n### loadPackage(dir)\r\n\r\nLoad and parse package.json process root or given directory\r\n\r\n```javascript\r\n\r\nvar pack = Hoek.loadPackage(); // pack.name === 'hoek'\r\n\r\n```\r\n\r\n### loadDirModules(path, excludeFiles, target) \r\n\r\nLoads modules from a given path; option to exclude files (array).\r\n\r\n\r\n\r\n\r\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/spumko/hoek/issues" - }, - "homepage": "https://github.com/spumko/hoek", - "_id": "hoek@0.9.1", - "dist": { - "shasum": "8525a65589a017e905052fd24b26898c26a20c6f" - }, - "_from": "hoek@0.9.x", - "_resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js deleted file mode 100644 index 4dddd77d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js +++ /dev/null @@ -1,86 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hoek = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hoek', function () { - - describe('#escapeJavaScript', function () { - - it('encodes / characters', function (done) { - - var encoded = Hoek.escapeJavaScript('<script>alert(1)</script>'); - expect(encoded).to.equal('\\x3cscript\\x3ealert\\x281\\x29\\x3c\\x2fscript\\x3e'); - done(); - }); - - it('encodes \' characters', function (done) { - - var encoded = Hoek.escapeJavaScript('something(\'param\')'); - expect(encoded).to.equal('something\\x28\\x27param\\x27\\x29'); - done(); - }); - - it('encodes large unicode characters with the correct padding', function (done) { - - var encoded = Hoek.escapeJavaScript(String.fromCharCode(500) + String.fromCharCode(1000)); - expect(encoded).to.equal('\\u0500\\u1000'); - done(); - }); - - it('doesn\'t throw an exception when passed null', function (done) { - - var encoded = Hoek.escapeJavaScript(null); - expect(encoded).to.equal(''); - done(); - }); - }); - - describe('#escapeHtml', function () { - - it('encodes / characters', function (done) { - - var encoded = Hoek.escapeHtml('<script>alert(1)</script>'); - expect(encoded).to.equal('<script>alert(1)</script>'); - done(); - }); - - it('encodes < and > as named characters', function (done) { - - var encoded = Hoek.escapeHtml('<script><>'); - expect(encoded).to.equal('<script><>'); - done(); - }); - - it('encodes large unicode characters', function (done) { - - var encoded = Hoek.escapeHtml(String.fromCharCode(500) + String.fromCharCode(1000)); - expect(encoded).to.equal('ǴϨ'); - done(); - }); - - it('doesn\'t throw an exception when passed null', function (done) { - - var encoded = Hoek.escapeHtml(null); - expect(encoded).to.equal(''); - done(); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js deleted file mode 100755 index c40e3ad9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js +++ /dev/null @@ -1,1078 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hoek = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hoek', function () { - - var nestedObj = { - v: [7,8,9], - w: /^something$/igm, - x: { - a: [1, 2, 3], - b: 123456, - c: new Date(), - d: /hi/igm, - e: /hello/ - }, - y: 'y', - z: new Date() - }; - - var dupsArray = [nestedObj, { z: 'z' }, nestedObj]; - var reducedDupsArray = [nestedObj, { z: 'z' }]; - - describe('#clone', function () { - - it('should clone a nested object', function (done) { - - var a = nestedObj; - var b = Hoek.clone(a); - - expect(a).to.deep.equal(b); - expect(a.z.getTime()).to.equal(b.z.getTime()); - done(); - }); - - it('should clone a null object', function (done) { - - var b = Hoek.clone(null); - - expect(b).to.equal(null); - done(); - }); - - it('should not convert undefined properties to null', function (done) { - - var obj = { something: undefined }; - var b = Hoek.clone(obj); - - expect(typeof b.something).to.equal('undefined'); - done(); - }); - - it('should not throw on circular reference', function (done) { - - var a = {}; - a.x = a; - - var test = (function () { - - var b = Hoek.clone(a); - }); - - expect(test).to.not.throw(); - done(); - }); - - it('should properly clone circular reference', function (done) { - - var x = { - 'z': new Date() - }; - x.y = x; - - var b = Hoek.clone(x); - expect(Object.keys(b.y)).to.deep.equal(Object.keys(x)) - expect(b.z).to.not.equal(x.z); - expect(b.y).to.not.equal(x.y); - expect(b.y.z).to.not.equal(x.y.z); - expect(b.y).to.equal(b); - expect(b.y.y.y.y).to.equal(b); - done(); - }); - - it('should properly clone deeply nested object', function (done) { - - var a = { - x: { - y: { - a: [1, 2, 3], - b: 123456, - c: new Date(), - d: /hi/igm, - e: /hello/ - }, - } - }; - - var b = Hoek.clone(a); - - expect(a).to.deep.equal(b); - expect(a.x.y.c.getTime()).to.equal(b.x.y.c.getTime()); - done(); - }); - - it('should properly clone arrays', function (done) { - - var a = [1,2,3]; - - var b = Hoek.clone(a); - - expect(a).to.deep.equal(b); - done(); - }); - - it('should perform actual copy for shallow keys (no pass by reference)', function (done) { - - var x = Hoek.clone(nestedObj); - var y = Hoek.clone(nestedObj); - - // Date - expect(x.z).to.not.equal(nestedObj.z); - expect(x.z).to.not.equal(y.z); - - // Regex - expect(x.w).to.not.equal(nestedObj.w); - expect(x.w).to.not.equal(y.w); - - // Array - expect(x.v).to.not.equal(nestedObj.v); - expect(x.v).to.not.equal(y.v); - - // Immutable(s) - x.y = 5; - expect(x.y).to.not.equal(nestedObj.y); - expect(x.y).to.not.equal(y.y); - - done(); - }); - - it('should perform actual copy for deep keys (no pass by reference)', function (done) { - - var x = Hoek.clone(nestedObj); - var y = Hoek.clone(nestedObj); - - expect(x.x.c).to.not.equal(nestedObj.x.c); - expect(x.x.c).to.not.equal(y.x.c); - - expect(x.x.c.getTime()).to.equal(nestedObj.x.c.getTime()); - expect(x.x.c.getTime()).to.equal(y.x.c.getTime()); - done(); - }); - - it('copies functions with properties', function (done) { - - var a = { - x: function () { return 1; }, - y: {} - }; - a.x.z = 'string in function'; - a.x.v = function () { return 2; }; - a.y.u = a.x; - - var b = Hoek.clone(a); - expect(b.x()).to.equal(1); - expect(b.x.v()).to.equal(2); - expect(b.y.u).to.equal(b.x); - expect(b.x.z).to.equal('string in function'); - done(); - }); - - it('should copy a buffer', function(done){ - var tls = { - key: new Buffer([1,2,3,4,5]), - cert: new Buffer([1,2,3,4,5,6,10]) - } - - copiedTls = Hoek.clone(tls); - expect(Buffer.isBuffer(copiedTls.key)).to.equal(true); - expect(JSON.stringify(copiedTls.key)).to.equal(JSON.stringify(tls.key)) - expect(Buffer.isBuffer(copiedTls.cert)).to.equal(true); - expect(JSON.stringify(copiedTls.cert)).to.equal(JSON.stringify(tls.cert)) - done(); - }); - }); - - describe('#merge', function () { - - it('does not throw if source is null', function (done) { - - var a = {}; - var b = null; - var c = null; - - expect(function () { - - c = Hoek.merge(a, b); - }).to.not.throw(); - - expect(c).to.equal(a); - done(); - }); - - it('does not throw if source is undefined', function (done) { - - var a = {}; - var b = undefined; - var c = null; - - expect(function () { - - c = Hoek.merge(a, b); - }).to.not.throw(); - - expect(c).to.equal(a); - done(); - }); - - it('throws if source is not an object', function (done) { - - expect(function () { - - var a = {}; - var b = 0; - - Hoek.merge(a, b); - }).to.throw('Invalid source value: must be null, undefined, or an object'); - done(); - }); - - it('throws if target is not an object', function (done) { - - expect(function () { - - var a = 0; - var b = {}; - - Hoek.merge(a, b); - }).to.throw('Invalid target value: must be an object'); - done(); - }); - - it('throws if target is not an array and source is', function (done) { - - expect(function () { - - var a = {}; - var b = [1, 2]; - - Hoek.merge(a, b); - }).to.throw('Cannot merge array onto an object'); - done(); - }); - - it('returns the same object when merging arrays', function (done) { - - var a = []; - var b = [1, 2]; - - expect(Hoek.merge(a, b)).to.equal(a); - done(); - }); - - it('should combine an empty object with a non-empty object', function (done) { - - var a = {}; - var b = nestedObj; - - var c = Hoek.merge(a, b); - expect(a).to.deep.equal(b); - expect(c).to.deep.equal(b); - done(); - }); - - it('should override values in target', function (done) { - - var a = { x: 1, y: 2, z: 3, v: 5, t: 'test', m: 'abc' }; - var b = { x: null, z: 4, v: 0, t: { u: 6 }, m: '123' }; - - var c = Hoek.merge(a, b); - expect(c.x).to.equal(null); - expect(c.y).to.equal(2); - expect(c.z).to.equal(4); - expect(c.v).to.equal(0); - expect(c.m).to.equal('123'); - expect(c.t).to.deep.equal({ u: 6 }); - done(); - }); - - it('should override values in target (flip)', function (done) { - - var a = { x: 1, y: 2, z: 3, v: 5, t: 'test', m: 'abc' }; - var b = { x: null, z: 4, v: 0, t: { u: 6 }, m: '123' }; - - var d = Hoek.merge(b, a); - expect(d.x).to.equal(1); - expect(d.y).to.equal(2); - expect(d.z).to.equal(3); - expect(d.v).to.equal(5); - expect(d.m).to.equal('abc'); - expect(d.t).to.deep.equal('test'); - done(); - }); - }); - - describe('#applyToDefaults', function () { - - var defaults = { - a: 1, - b: 2, - c: { - d: 3, - e: [5, 6] - }, - f: 6, - g: 'test' - }; - - it('should return null if options is false', function (done) { - - var result = Hoek.applyToDefaults(defaults, false); - expect(result).to.equal(null); - done(); - }); - - it('should return a copy of defaults if options is true', function (done) { - - var result = Hoek.applyToDefaults(defaults, true); - expect(result).to.deep.equal(result); - done(); - }); - - it('should apply object to defaults', function (done) { - - var obj = { - a: null, - c: { - e: [4] - }, - f: 0, - g: { - h: 5 - } - }; - - var result = Hoek.applyToDefaults(defaults, obj); - expect(result.c.e).to.deep.equal([4]); - expect(result.a).to.equal(1); - expect(result.b).to.equal(2); - expect(result.f).to.equal(0); - expect(result.g).to.deep.equal({ h: 5 }); - done(); - }); - }); - - describe('#unique', function () { - - it('should ensure uniqueness within array of objects based on subkey', function (done) { - - var a = Hoek.unique(dupsArray, 'x'); - expect(a).to.deep.equal(reducedDupsArray); - done(); - }); - - it('removes duplicated without key', function (done) { - - expect(Hoek.unique([1, 2, 3, 4, 2, 1, 5])).to.deep.equal([1, 2, 3, 4, 5]); - done(); - }); - }); - - describe('#mapToObject', function () { - - it('should return null on null array', function (done) { - - var a = Hoek.mapToObject(null); - expect(a).to.equal(null); - done(); - }); - - it('should convert basic array to existential object', function (done) { - - var keys = [1, 2, 3, 4]; - var a = Hoek.mapToObject(keys); - for (var i in keys) { - expect(a[keys[i]]).to.equal(true); - } - done(); - }); - - it('should convert array of objects to existential object', function (done) { - - var keys = [{ x: 1 }, { x: 2 }, { x: 3 }]; - var subkey = 'x'; - var a = Hoek.mapToObject(keys, subkey); - for (var i in keys) { - expect(a[keys[i][subkey]]).to.equal(true); - } - done(); - }); - }); - - describe('#intersect', function () { - - it('should return the common objects of two arrays', function (done) { - - var array1 = [1, 2, 3, 4, 4, 5, 5]; - var array2 = [5, 4, 5, 6, 7]; - var common = Hoek.intersect(array1, array2); - expect(common.length).to.equal(2); - done(); - }); - - it('should return just the first common object of two arrays', function (done) { - - var array1 = [1, 2, 3, 4, 4, 5, 5]; - var array2 = [5, 4, 5, 6, 7]; - var common = Hoek.intersect(array1, array2, true); - expect(common).to.equal(5); - done(); - }); - - it('should return an empty array if either input is null', function (done) { - - expect(Hoek.intersect([1], null).length).to.equal(0); - expect(Hoek.intersect(null, [1]).length).to.equal(0); - done(); - }); - - it('should return the common objects of object and array', function (done) { - - var array1 = [1, 2, 3, 4, 4, 5, 5]; - var array2 = [5, 4, 5, 6, 7]; - var common = Hoek.intersect(Hoek.mapToObject(array1), array2); - expect(common.length).to.equal(2); - done(); - }); - }); - - describe('#matchKeys', function () { - - it('should match the existing object keys', function (done) { - - var obj = { - a: 1, - b: 2, - c: 3, - d: null - }; - - expect(Hoek.matchKeys(obj, ['b', 'c', 'd', 'e'])).to.deep.equal(['b', 'c', 'd']); - done(); - }); - }); - - describe('#flatten', function () { - - it('should return a flat array', function (done) { - - var result = Hoek.flatten([1, 2, [3, 4, [5, 6], [7], 8], [9], [10, [11, 12]], 13]); - expect(result.length).to.equal(13); - expect(result).to.deep.equal([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]); - done(); - }); - }); - - describe('#removeKeys', function () { - - var objWithHiddenKeys = { - location: { - name: 'San Bruno' - }, - company: { - name: '@WalmartLabs' - } - }; - - it('should delete params with definition\'s hide set to true', function (done) { - - var a = Hoek.removeKeys(objWithHiddenKeys, ['location']); - expect(objWithHiddenKeys.location).to.not.exist; - expect(objWithHiddenKeys.company).to.exist; - done(); - }); - }); - - describe('#reach', function () { - - var obj = { - a: { - b: { - c: { - d: 1, - e: 2 - }, - f: 'hello' - }, - g: { - h: 3 - } - }, - i: function () { } - }; - - it('returns a valid member', function (done) { - - expect(Hoek.reach(obj, 'a.b.c.d')).to.equal(1); - done(); - }); - - it('returns null on null object', function (done) { - - expect(Hoek.reach(null, 'a.b.c.d')).to.not.exist; - done(); - }); - - it('returns null on missing member', function (done) { - - expect(Hoek.reach(obj, 'a.b.c.d.x')).to.not.exist; - done(); - }); - - it('returns null on invalid member', function (done) { - - expect(Hoek.reach(obj, 'a.b.c.d-.x')).to.not.exist; - done(); - }); - - it('returns function member', function (done) { - - expect(typeof Hoek.reach(obj, 'i')).to.equal('function'); - done(); - }); - }); - - describe('#inheritAsync', function () { - - it('should inherit selected methods and wrap in async call', function (done) { - - var proto = { - a: function () { - return 'a!'; - }, - b: function () { - return 'b!'; - }, - c: function () { - throw new Error('c!'); - } - }; - - var targetFunc = function () { }; - targetFunc.prototype.c = function () { - - return 'oops'; - }; - - Hoek.inheritAsync(targetFunc, proto, ['a', 'c']); - var target = new targetFunc(); - - expect(typeof target.a).to.equal('function'); - expect(typeof target.c).to.equal('function'); - expect(target.b).to.not.exist; - - target.a(function (err, result) { - - expect(err).to.not.exist; - expect(result).to.equal('a!'); - - target.c(function (err, result) { - - expect(result).to.not.exist; - expect(err.message).to.equal('c!'); - done(); - }); - }); - }); - }); - - describe('#callStack', function () { - - it('should return the full call stack', function (done) { - - var stack = Hoek.callStack(); - expect(stack[0][0]).to.contain('index.js'); - expect(stack[0][2]).to.equal(30); - done(); - }); - }); - - describe('#displayStack ', function () { - - it('should return the full call stack for display', function (done) { - - var stack = Hoek.displayStack(); - expect(stack[0]).to.contain('test/index.js:'); - done(); - }); - - it('should include constructor functions correctly', function (done) { - - var Something = function (next) { - - next(); - }; - - var something = new Something(function () { - - var stack = Hoek.displayStack(); - expect(stack[1]).to.contain('new Something'); - done(); - }); - }); - }); - - describe('#abort', function () { - - it('should exit process when not in test mode', function (done) { - - var env = process.env.NODE_ENV; - var write = process.stdout.write; - var exit = process.exit; - - process.env.NODE_ENV = 'nottatest'; - process.stdout.write = function () { }; - process.exit = function (state) { - - process.exit = exit; - process.env.NODE_ENV = env; - process.stdout.write = write; - - expect(state).to.equal(1); - done(); - }; - - Hoek.abort('Boom'); - }); - - it('should throw when not in test mode and abortThrow is true', function (done) { - - var env = process.env.NODE_ENV; - process.env.NODE_ENV = 'nottatest'; - Hoek.abortThrow = true; - - var fn = function () { - - Hoek.abort('my error message'); - }; - - expect(fn).to.throw('my error message'); - Hoek.abortThrow = false; - process.env.NODE_ENV = env; - - done(); - }); - - - it('should respect hideStack argument', function (done) { - - var env = process.env.NODE_ENV; - var write = process.stdout.write; - var exit = process.exit; - var output = ''; - - process.exit = function () { }; - process.env.NODE_ENV = ''; - process.stdout.write = function (message) { - - output = message; - }; - - Hoek.abort('my error message', true); - - process.env.NODE_ENV = env; - process.stdout.write = write; - process.exit = exit; - - expect(output).to.equal('ABORT: my error message\n\t\n'); - - done(); - }); - - it('should default to showing stack', function (done) { - - var env = process.env.NODE_ENV; - var write = process.stdout.write; - var exit = process.exit; - var output = ''; - - process.exit = function () { }; - process.env.NODE_ENV = ''; - process.stdout.write = function (message) { - - output = message; - }; - - Hoek.abort('my error message'); - - process.env.NODE_ENV = env; - process.stdout.write = write; - process.exit = exit; - - expect(output).to.contain('index.js'); - - done(); - }); - }); - - describe('#assert', function () { - - it('should throw an Error when using assert in a test', function (done) { - - var fn = function () { - - Hoek.assert(false, 'my error message'); - }; - - expect(fn).to.throw('my error message'); - done(); - }); - - it('should throw an Error when using assert in a test with no message', function (done) { - - var fn = function () { - - Hoek.assert(false); - }; - - expect(fn).to.throw('Unknown error'); - done(); - }); - - it('should throw an Error when using assert in a test with multipart message', function (done) { - - var fn = function () { - - Hoek.assert(false, 'This', 'is', 'my message'); - }; - - expect(fn).to.throw('This is my message'); - done(); - }); - - it('should throw an Error when using assert in a test with object message', function (done) { - - var fn = function () { - - Hoek.assert(false, 'This', 'is', { spinal: 'tap' }); - }; - - expect(fn).to.throw('This is {"spinal":"tap"}'); - done(); - }); - - it('should throw an Error when using assert in a test with error object message', function (done) { - - var fn = function () { - - Hoek.assert(false, new Error('This is spinal tap')); - }; - - expect(fn).to.throw('This is spinal tap'); - done(); - }); - }); - - describe('#loadDirModules', function () { - - it('should load modules from directory', function (done) { - - var target = {}; - Hoek.loadDirModules(__dirname + '/modules', ['test2'], target); - expect(target.Test1.x).to.equal(1); - expect(target.Test2).to.not.exist; - expect(target.Test3.z).to.equal(3); - done(); - }); - - it('should list modules from directory into function', function (done) { - - var target = {}; - Hoek.loadDirModules(__dirname + '/modules', ['test2'], function (path, name, capName) { - - target[name] = capName; - }); - - expect(target.test1).to.equal('Test1'); - expect(target.test2).to.not.exist; - expect(target.test3).to.equal('Test3'); - done(); - }); - }); - - describe('#rename', function () { - - it('should rename object key', function (done) { - - var a = { b: 'c' }; - Hoek.rename(a, 'b', 'x'); - expect(a.b).to.not.exist; - expect(a.x).to.equal('c'); - done(); - }); - }); - - describe('Timer', function () { - - it('should return time elapsed', function (done) { - - var timer = new Hoek.Timer(); - setTimeout(function () { - - expect(timer.elapsed()).to.be.above(9); - done(); - }, 12); - }); - }); - - describe('#loadPackage', function () { - - it('should', function (done) { - - var pack = Hoek.loadPackage(); - expect(pack.name).to.equal('hoek'); - done(); - }); - }); - - describe('#escapeRegex', function () { - - it('should escape all special regular expression characters', function (done) { - - var a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\/`"(>)[<]d{}s,'); - expect(a).to.equal('4\\^f\\$s\\.4\\*5\\+\\-_\\?%\\=#\\!\\:@\\|~\\\\\\/`"\\(>\\)\\[<\\]d\\{\\}s\\,'); - done(); - }); - }); - - describe('#toss', function () { - - it('should call callback with new error', function (done) { - - var callback = function (err) { - - expect(err).to.exist; - expect(err.message).to.equal('bug'); - done(); - }; - - Hoek.toss(true, 'feature', callback); - Hoek.toss(false, 'bug', callback); - }); - - it('should call callback with new error and no message', function (done) { - - Hoek.toss(false, function (err) { - - expect(err).to.exist; - expect(err.message).to.equal(''); - done(); - }); - }); - - it('should call callback with error condition', function (done) { - - Hoek.toss(new Error('boom'), function (err) { - - expect(err).to.exist; - expect(err.message).to.equal('boom'); - done(); - }); - }); - - it('should call callback with new error using message with error condition', function (done) { - - Hoek.toss(new Error('ka'), 'boom', function (err) { - - expect(err).to.exist; - expect(err.message).to.equal('boom'); - done(); - }); - }); - - it('should call callback with new error using passed error with error condition', function (done) { - - Hoek.toss(new Error('ka'), new Error('boom'), function (err) { - - expect(err).to.exist; - expect(err.message).to.equal('boom'); - done(); - }); - }); - }); - - describe('Base64Url', function () { - - var base64str = 'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0-P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn-AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq-wsbKztLW2t7i5uru8vb6_wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t_g4eLj5OXm5-jp6uvs7e7v8PHy8_T19vf4-fr7_P3-_w'; - var str = unescape('%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20%21%22%23%24%25%26%27%28%29*+%2C-./0123456789%3A%3B%3C%3D%3E%3F@ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF'); - - describe('#base64urlEncode', function () { - - it('should base64 URL-safe a string', function (done) { - - expect(Hoek.base64urlEncode(str)).to.equal(base64str); - done(); - }); - }); - - describe('#base64urlDecode', function () { - - it('should un-base64 URL-safe a string', function (done) { - - expect(Hoek.base64urlDecode(base64str)).to.equal(str); - done(); - }); - - it('should return error on undefined input', function (done) { - - expect(Hoek.base64urlDecode().message).to.exist; - done(); - }); - - it('should return error on invalid input', function (done) { - - expect(Hoek.base64urlDecode('*').message).to.exist; - done(); - }); - }); - }); - - describe('#escapeHeaderAttribute', function () { - - it('should not alter ascii values', function (done) { - - var a = Hoek.escapeHeaderAttribute('My Value'); - expect(a).to.equal('My Value'); - done(); - }); - - it('should escape all special HTTP header attribute characters', function (done) { - - var a = Hoek.escapeHeaderAttribute('I said go!!!#"' + String.fromCharCode(92)); - expect(a).to.equal('I said go!!!#\\"\\\\'); - done(); - }); - - it('should throw on large unicode characters', function (done) { - - var fn = function () { - - Hoek.escapeHeaderAttribute('this is a test' + String.fromCharCode(500) + String.fromCharCode(300)); - }; - - expect(fn).to.throw(Error); - done(); - }); - - it('should throw on CRLF to prevent response splitting', function (done) { - - var fn = function () { - - Hoek.escapeHeaderAttribute('this is a test\r\n'); - }; - - expect(fn).to.throw(Error); - done(); - }); - }); - - describe('#escapeHtml', function () { - - it('should escape all special HTML characters', function (done) { - - var a = Hoek.escapeHtml('&<>"\'`'); - expect(a).to.equal('&<>"'`'); - done(); - }); - - it('should return empty string on falsy input', function (done) { - - var a = Hoek.escapeHtml(''); - expect(a).to.equal(''); - done(); - }); - - it('should return unchanged string on no reserved input', function (done) { - - var a = Hoek.escapeHtml('abc'); - expect(a).to.equal('abc'); - done(); - }); - }); - - describe('#printEvent', function () { - - it('outputs event as string', function (done) { - - var event = { - timestamp: (new Date(2013, 1, 1, 6, 30, 45, 123)).getTime(), - tags: ['a', 'b', 'c'], - data: { some: 'data' } - }; - - Hoek.consoleFunc = function (string) { - - Hoek.consoleFunc = console.log; - expect(string).to.equal('130201/063045.123, a, {"some":"data"}'); - done(); - }; - - Hoek.printEvent(event); - }); - - it('outputs JSON error', function (done) { - - var event = { - timestamp: (new Date(2013, 1, 1, 6, 30, 45, 123)).getTime(), - tags: ['a', 'b', 'c'], - data: { some: 'data' } - }; - - event.data.a = event.data; - - Hoek.consoleFunc = function (string) { - - Hoek.consoleFunc = console.log; - expect(string).to.equal('130201/063045.123, a, JSON Error: Converting circular structure to JSON'); - done(); - }; - - Hoek.printEvent(event); - }); - }); - - describe('#nextTick', function () { - - it('calls the provided callback on nextTick', function (done) { - - var a = 0; - - var inc = function (step, next) { - - a += step; - next(); - }; - - var ticked = Hoek.nextTick(inc); - - ticked(5, function () { - - expect(a).to.equal(6); - done(); - }); - - expect(a).to.equal(0); - inc(1, function () { - - expect(a).to.equal(1); - }); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js deleted file mode 100755 index 3f41e601..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js +++ /dev/null @@ -1 +0,0 @@ -exports.x = 1; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js deleted file mode 100755 index 38556b27..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js +++ /dev/null @@ -1 +0,0 @@ -exports.y = 2; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js deleted file mode 100755 index 436b860b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js +++ /dev/null @@ -1 +0,0 @@ -exports.z = 3; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore deleted file mode 100644 index 77ba16cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml deleted file mode 100755 index 047f7e3d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE deleted file mode 100755 index e699a7bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2013, Eran Hammer. -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 Eran Hammer 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 ERAN HAMMER 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile deleted file mode 100755 index 9e7138c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -test: - @./node_modules/.bin/lab -test-cov: - @./node_modules/.bin/lab -r threshold -t 100 -test-cov-html: - @./node_modules/.bin/lab -r html -o coverage.html -complexity: - @./node_modules/.bin/cr -o complexity.md -f markdown lib - -.PHONY: test test-cov test-cov-html complexity - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/README.md deleted file mode 100755 index 98a6e025..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# sntp - -An SNTP v4 client (RFC4330) for node. Simpy connects to the NTP or SNTP server requested and returns the server time -along with the roundtrip duration and clock offset. To adjust the local time to the NTP time, add the returned `t` offset -to the local time. - -[![Build Status](https://secure.travis-ci.org/hueniverse/sntp.png)](http://travis-ci.org/hueniverse/sntp) - -# Usage - -```javascript -var Sntp = require('sntp'); - -// All options are optional - -var options = { - host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org - port: 123, // Defaults to 123 (NTP) - resolveReference: true, // Default to false (not resolving) - timeout: 1000 // Defaults to zero (no timeout) -}; - -// Request server time - -Sntp.time(options, function (err, time) { - - if (err) { - console.log('Failed: ' + err.message); - process.exit(1); - } - - console.log('Local clock is off by: ' + time.t + ' milliseconds'); - process.exit(0); -}); -``` - -If an application needs to maintain continuous time synchronization, the module provides a stateful method for -querying the current offset only when the last one is too old (defaults to daily). - -```javascript -// Request offset once - -Sntp.offset(function (err, offset) { - - console.log(offset); // New (served fresh) - - // Request offset again - - Sntp.offset(function (err, offset) { - - console.log(offset); // Identical (served from cache) - }); -}); -``` - -To set a background offset refresh, start the interval and use the provided now() method. If for any reason the -client fails to obtain an up-to-date offset, the current system clock is used. - -```javascript -var before = Sntp.now(); // System time without offset - -Sntp.start(function () { - - var now = Sntp.now(); // With offset - Sntp.stop(); -}); -``` - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js deleted file mode 100755 index 0303f6dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js +++ /dev/null @@ -1,16 +0,0 @@ -var Sntp = require('../lib'); - -// Request offset once - -Sntp.offset(function (err, offset) { - - console.log(offset); // New (served fresh) - - // Request offset again - - Sntp.offset(function (err, offset) { - - console.log(offset); // Identical (served from cache) - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js deleted file mode 100755 index bd70d0e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js +++ /dev/null @@ -1,25 +0,0 @@ -var Sntp = require('../lib'); - -// All options are optional - -var options = { - host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org - port: 123, // Defaults to 123 (NTP) - resolveReference: true, // Default to false (not resolving) - timeout: 1000 // Defaults to zero (no timeout) -}; - -// Request server time - -Sntp.time(options, function (err, time) { - - if (err) { - console.log('Failed: ' + err.message); - process.exit(1); - } - - console.log(time); - console.log('Local clock is off by: ' + time.t + ' milliseconds'); - process.exit(0); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/index.js deleted file mode 100755 index 4cc88b35..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js deleted file mode 100755 index e492cd93..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js +++ /dev/null @@ -1,409 +0,0 @@ -// Load modules - -var Dgram = require('dgram'); -var Dns = require('dns'); -var Hoek = require('hoek'); - - -// Declare internals - -var internals = {}; - - -exports.time = function (options, callback) { - - if (arguments.length !== 2) { - callback = arguments[0]; - options = {}; - } - - var settings = Hoek.clone(options); - settings.host = settings.host || 'pool.ntp.org'; - settings.port = settings.port || 123; - settings.resolveReference = settings.resolveReference || false; - - // Declare variables used by callback - - var timeoutId = 0; - var sent = 0; - - // Ensure callback is only called once - - var isFinished = false; - var finish = function (err, result) { - - if (timeoutId) { - clearTimeout(timeoutId); - timeoutId = 0; - } - - if (!isFinished) { - isFinished = true; - socket.removeAllListeners(); - socket.close(); - return callback(err, result); - } - }; - - // Create UDP socket - - var socket = Dgram.createSocket('udp4'); - - socket.once('error', function (err) { - - return finish(err); - }); - - // Listen to incoming messages - - socket.on('message', function (buffer, rinfo) { - - var received = Date.now(); - - var message = new internals.NtpMessage(buffer); - if (!message.isValid) { - return finish(new Error('Invalid server response'), message); - } - - if (message.originateTimestamp !== sent) { - return finish(new Error('Wrong originate timestamp'), message); - } - - // Timestamp Name ID When Generated - // ------------------------------------------------------------ - // Originate Timestamp T1 time request sent by client - // Receive Timestamp T2 time request received by server - // Transmit Timestamp T3 time reply sent by server - // Destination Timestamp T4 time reply received by client - // - // The roundtrip delay d and system clock offset t are defined as: - // - // d = (T4 - T1) - (T3 - T2) t = ((T2 - T1) + (T3 - T4)) / 2 - - var T1 = message.originateTimestamp; - var T2 = message.receiveTimestamp; - var T3 = message.transmitTimestamp; - var T4 = received; - - message.d = (T4 - T1) - (T3 - T2); - message.t = ((T2 - T1) + (T3 - T4)) / 2; - message.receivedLocally = received; - - if (!settings.resolveReference || - message.stratum !== 'secondary') { - - return finish(null, message); - } - - // Resolve reference IP address - - Dns.reverse(message.referenceId, function (err, domains) { - - if (!err) { - message.referenceHost = domains[0]; - } - - return finish(null, message); - }); - }); - - // Set timeout - - if (settings.timeout) { - timeoutId = setTimeout(function () { - - timeoutId = 0; - return finish(new Error('Timeout')); - }, settings.timeout); - } - - // Construct NTP message - - var message = new Buffer(48); - for (var i = 0; i < 48; i++) { // Zero message - message[i] = 0; - } - - message[0] = (0 << 6) + (4 << 3) + (3 << 0) // Set version number to 4 and Mode to 3 (client) - sent = Date.now(); - internals.fromMsecs(sent, message, 40); // Set transmit timestamp (returns as originate) - - // Send NTP request - - socket.send(message, 0, message.length, settings.port, settings.host, function (err, bytes) { - - if (err || - bytes !== 48) { - - return finish(err || new Error('Could not send entire message')); - } - }); -}; - - -internals.NtpMessage = function (buffer) { - - this.isValid = false; - - // Validate - - if (buffer.length !== 48) { - return; - } - - // Leap indicator - - var li = (buffer[0] >> 6); - switch (li) { - case 0: this.leapIndicator = 'no-warning'; break; - case 1: this.leapIndicator = 'last-minute-61'; break; - case 2: this.leapIndicator = 'last-minute-59'; break; - case 3: this.leapIndicator = 'alarm'; break; - } - - // Version - - var vn = ((buffer[0] & 0x38) >> 3); - this.version = vn; - - // Mode - - var mode = (buffer[0] & 0x7); - switch (mode) { - case 1: this.mode = 'symmetric-active'; break; - case 2: this.mode = 'symmetric-passive'; break; - case 3: this.mode = 'client'; break; - case 4: this.mode = 'server'; break; - case 5: this.mode = 'broadcast'; break; - case 0: - case 6: - case 7: this.mode = 'reserved'; break; - } - - // Stratum - - var stratum = buffer[1]; - if (stratum === 0) { - this.stratum = 'death'; - } - else if (stratum === 1) { - this.stratum = 'primary'; - } - else if (stratum <= 15) { - this.stratum = 'secondary'; - } - else { - this.stratum = 'reserved'; - } - - // Poll interval (msec) - - this.pollInterval = Math.round(Math.pow(2, buffer[2])) * 1000; - - // Precision (msecs) - - this.precision = Math.pow(2, buffer[3]) * 1000; - - // Root delay (msecs) - - var rootDelay = 256 * (256 * (256 * buffer[4] + buffer[5]) + buffer[6]) + buffer[7]; - this.rootDelay = 1000 * (rootDelay / 0x10000); - - // Root dispersion (msecs) - - this.rootDispersion = ((buffer[8] << 8) + buffer[9] + ((buffer[10] << 8) + buffer[11]) / Math.pow(2, 16)) * 1000; - - // Reference identifier - - this.referenceId = ''; - switch (this.stratum) { - case 'death': - case 'primary': - this.referenceId = String.fromCharCode(buffer[12]) + String.fromCharCode(buffer[13]) + String.fromCharCode(buffer[14]) + String.fromCharCode(buffer[15]); - break; - case 'secondary': - this.referenceId = '' + buffer[12] + '.' + buffer[13] + '.' + buffer[14] + '.' + buffer[15]; - break; - } - - // Reference timestamp - - this.referenceTimestamp = internals.toMsecs(buffer, 16); - - // Originate timestamp - - this.originateTimestamp = internals.toMsecs(buffer, 24); - - // Receive timestamp - - this.receiveTimestamp = internals.toMsecs(buffer, 32); - - // Transmit timestamp - - this.transmitTimestamp = internals.toMsecs(buffer, 40); - - // Validate - - if (this.version === 4 && - this.stratum !== 'reserved' && - this.mode === 'server' && - this.originateTimestamp && - this.receiveTimestamp && - this.transmitTimestamp) { - - this.isValid = true; - } - - return this; -}; - - -internals.toMsecs = function (buffer, offset) { - - var seconds = 0; - var fraction = 0; - - for (var i = 0; i < 4; ++i) { - seconds = (seconds * 256) + buffer[offset + i]; - } - - for (i = 4; i < 8; ++i) { - fraction = (fraction * 256) + buffer[offset + i]; - } - - return ((seconds - 2208988800 + (fraction / Math.pow(2, 32))) * 1000); -}; - - -internals.fromMsecs = function (ts, buffer, offset) { - - var seconds = Math.floor(ts / 1000) + 2208988800; - var fraction = Math.round((ts % 1000) / 1000 * Math.pow(2, 32)); - - buffer[offset + 0] = (seconds & 0xFF000000) >> 24; - buffer[offset + 1] = (seconds & 0x00FF0000) >> 16; - buffer[offset + 2] = (seconds & 0x0000FF00) >> 8; - buffer[offset + 3] = (seconds & 0x000000FF); - - buffer[offset + 4] = (fraction & 0xFF000000) >> 24; - buffer[offset + 5] = (fraction & 0x00FF0000) >> 16; - buffer[offset + 6] = (fraction & 0x0000FF00) >> 8; - buffer[offset + 7] = (fraction & 0x000000FF); -}; - - -// Offset singleton - -internals.last = { - offset: 0, - expires: 0, - host: '', - port: 0 -}; - - -exports.offset = function (options, callback) { - - if (arguments.length !== 2) { - callback = arguments[0]; - options = {}; - } - - var now = Date.now(); - var clockSyncRefresh = options.clockSyncRefresh || 24 * 60 * 60 * 1000; // Daily - - if (internals.last.offset && - internals.last.host === options.host && - internals.last.port === options.port && - now < internals.last.expires) { - - process.nextTick(function () { - - callback(null, internals.last.offset); - }); - - return; - } - - exports.time(options, function (err, time) { - - if (err) { - return callback(err, 0); - } - - internals.last = { - offset: Math.round(time.t), - expires: now + clockSyncRefresh, - host: options.host, - port: options.port - }; - - return callback(null, internals.last.offset); - }); -}; - - -// Now singleton - -internals.now = { - intervalId: 0 -}; - - -exports.start = function (options, callback) { - - if (arguments.length !== 2) { - callback = arguments[0]; - options = {}; - } - - if (internals.now.intervalId) { - process.nextTick(function () { - - callback(); - }); - - return; - } - - exports.offset(options, function (err, offset) { - - internals.now.intervalId = setInterval(function () { - - exports.offset(options, function () { }); - }, options.clockSyncRefresh || 24 * 60 * 60 * 1000); // Daily - - return callback(); - }); -}; - - -exports.stop = function () { - - if (!internals.now.intervalId) { - return; - } - - clearInterval(internals.now.intervalId); - internals.now.intervalId = 0; -}; - - -exports.isLive = function () { - - return !!internals.now.intervalId; -}; - - -exports.now = function () { - - var now = Date.now(); - if (!exports.isLive() || - now >= internals.last.expires) { - - return now; - } - - return now + internals.last.offset; -}; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/package.json deleted file mode 100755 index 8ce7a61f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "sntp", - "description": "SNTP Client", - "version": "0.2.4", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [], - "repository": { - "type": "git", - "url": "git://github.com/hueniverse/sntp" - }, - "main": "index", - "keywords": [ - "sntp", - "ntp", - "time" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "hoek": "0.9.x" - }, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/hueniverse/sntp/raw/master/LICENSE" - } - ], - "readme": "# sntp\n\nAn SNTP v4 client (RFC4330) for node. Simpy connects to the NTP or SNTP server requested and returns the server time\nalong with the roundtrip duration and clock offset. To adjust the local time to the NTP time, add the returned `t` offset\nto the local time.\n\n[![Build Status](https://secure.travis-ci.org/hueniverse/sntp.png)](http://travis-ci.org/hueniverse/sntp)\n\n# Usage\n\n```javascript\nvar Sntp = require('sntp');\n\n// All options are optional\n\nvar options = {\n host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org\n port: 123, // Defaults to 123 (NTP)\n resolveReference: true, // Default to false (not resolving)\n timeout: 1000 // Defaults to zero (no timeout)\n};\n\n// Request server time\n\nSntp.time(options, function (err, time) {\n\n if (err) {\n console.log('Failed: ' + err.message);\n process.exit(1);\n }\n\n console.log('Local clock is off by: ' + time.t + ' milliseconds');\n process.exit(0);\n});\n```\n\nIf an application needs to maintain continuous time synchronization, the module provides a stateful method for\nquerying the current offset only when the last one is too old (defaults to daily).\n\n```javascript\n// Request offset once\n\nSntp.offset(function (err, offset) {\n\n console.log(offset); // New (served fresh)\n\n // Request offset again\n\n Sntp.offset(function (err, offset) {\n\n console.log(offset); // Identical (served from cache)\n });\n});\n```\n\nTo set a background offset refresh, start the interval and use the provided now() method. If for any reason the\nclient fails to obtain an up-to-date offset, the current system clock is used.\n\n```javascript\nvar before = Sntp.now(); // System time without offset\n\nSntp.start(function () {\n\n var now = Sntp.now(); // With offset\n Sntp.stop();\n});\n```\n\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/hueniverse/sntp/issues" - }, - "homepage": "https://github.com/hueniverse/sntp", - "_id": "sntp@0.2.4", - "dist": { - "shasum": "657ad142a4f42d39c3e8f4b507ec2dd8f0ecfd9f" - }, - "_from": "sntp@0.2.x", - "_resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js deleted file mode 100755 index 38a55346..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js +++ /dev/null @@ -1,359 +0,0 @@ -// Load modules - -var Dgram = require('dgram'); -var Lab = require('lab'); -var Sntp = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('SNTP', function () { - - describe('#time', function () { - - it('returns consistent result over multiple tries', function (done) { - - Sntp.time(function (err, time) { - - expect(err).to.not.exist; - expect(time).to.exist; - var t1 = time.t; - - Sntp.time(function (err, time) { - - expect(err).to.not.exist; - expect(time).to.exist; - var t2 = time.t; - expect(Math.abs(t1 - t2)).is.below(200); - done(); - }); - }); - }); - - it('resolves reference IP', function (done) { - - Sntp.time({ host: 'ntp.exnet.com', resolveReference: true }, function (err, time) { - - expect(err).to.not.exist; - expect(time).to.exist; - expect(time.referenceHost).to.exist; - done(); - }); - }); - - it('times out on no response', function (done) { - - Sntp.time({ port: 124, timeout: 100 }, function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.equal('Timeout'); - done(); - }); - }); - - it('errors on error event', function (done) { - - var orig = Dgram.createSocket; - Dgram.createSocket = function (type) { - - Dgram.createSocket = orig; - var socket = Dgram.createSocket(type); - process.nextTick(function () { socket.emit('error', new Error('Fake')) }); - return socket; - }; - - Sntp.time(function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.equal('Fake'); - done(); - }); - }); - - it('times out on invalid host', function (done) { - - Sntp.time({ host: 'error', timeout: 10000 }, function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.equal('getaddrinfo ENOTFOUND'); - done(); - }); - }); - - it('fails on bad response buffer size', function (done) { - - var server = Dgram.createSocket('udp4'); - server.on('message', function (message, remote) { - var message = new Buffer(10); - server.send(message, 0, message.length, remote.port, remote.address, function (err, bytes) { - - server.close(); - }); - }); - - server.bind(49123); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid server response'); - done(); - }); - }); - - var messup = function (bytes) { - - var server = Dgram.createSocket('udp4'); - server.on('message', function (message, remote) { - - var message = new Buffer([ - 0x24, 0x01, 0x00, 0xe3, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x41, 0x43, 0x54, 0x53, - 0xd4, 0xa8, 0x2d, 0xc7, - 0x1c, 0x5d, 0x49, 0x1b, - 0xd4, 0xa8, 0x2d, 0xe6, - 0x67, 0xef, 0x9d, 0xb2, - 0xd4, 0xa8, 0x2d, 0xe6, - 0x71, 0xed, 0xb5, 0xfb, - 0xd4, 0xa8, 0x2d, 0xe6, - 0x71, 0xee, 0x6c, 0xc5 - ]); - - for (var i = 0, il = bytes.length; i < il; ++i) { - message[bytes[i][0]] = bytes[i][1]; - } - - server.send(message, 0, message.length, remote.port, remote.address, function (err, bytes) { - - server.close(); - }); - }); - - server.bind(49123); - }; - - it('fails on bad version', function (done) { - - messup([[0, (0 << 6) + (3 << 3) + (4 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.version).to.equal(3); - expect(err.message).to.equal('Invalid server response'); - done(); - }); - }); - - it('fails on bad originate timestamp and alarm li', function (done) { - - messup([[0, (3 << 6) + (4 << 3) + (4 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(err.message).to.equal('Wrong originate timestamp'); - expect(time.leapIndicator).to.equal('alarm'); - done(); - }); - }); - - it('returns time with death stratum and last61 li', function (done) { - - messup([[0, (1 << 6) + (4 << 3) + (4 << 0)], [1, 0]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(time.stratum).to.equal('death'); - expect(time.leapIndicator).to.equal('last-minute-61'); - done(); - }); - }); - - it('returns time with reserved stratum and last59 li', function (done) { - - messup([[0, (2 << 6) + (4 << 3) + (4 << 0)], [1, 0x1f]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(time.stratum).to.equal('reserved'); - expect(time.leapIndicator).to.equal('last-minute-59'); - done(); - }); - }); - - it('fails on bad mode (symmetric-active)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (1 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('symmetric-active'); - done(); - }); - }); - - it('fails on bad mode (symmetric-passive)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (2 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('symmetric-passive'); - done(); - }); - }); - - it('fails on bad mode (client)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (3 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('client'); - done(); - }); - }); - - it('fails on bad mode (broadcast)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (5 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('broadcast'); - done(); - }); - }); - - it('fails on bad mode (reserved)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (6 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('reserved'); - done(); - }); - }); - }); - - describe('#offset', function () { - - it('gets the current offset', function (done) { - - Sntp.offset(function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.not.equal(0); - done(); - }); - }); - - it('gets the current offset from cache', function (done) { - - Sntp.offset(function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.not.equal(0); - var offset1 = offset; - Sntp.offset({}, function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.equal(offset1); - done(); - }); - }); - }); - - it('fails getting the current offset on invalid server', function (done) { - - Sntp.offset({ host: 'error' }, function (err, offset) { - - expect(err).to.exist; - expect(offset).to.equal(0); - done(); - }); - }); - }); - - describe('#now', function () { - - it('starts auto-sync, gets now, then stops', function (done) { - - Sntp.stop(); - - var before = Sntp.now(); - expect(before).to.equal(Date.now()); - - Sntp.start(function () { - - var now = Sntp.now(); - expect(now).to.not.equal(Date.now()); - Sntp.stop(); - - done(); - }); - }); - - it('starts twice', function (done) { - - Sntp.start(function () { - - Sntp.start(function () { - - var now = Sntp.now(); - expect(now).to.not.equal(Date.now()); - Sntp.stop(); - - done(); - }); - }); - }); - - it('starts auto-sync, gets now, waits, gets again after timeout', function (done) { - - Sntp.stop(); - - var before = Sntp.now(); - expect(before).to.equal(Date.now()); - - Sntp.start({ clockSyncRefresh: 100 }, function () { - - var now = Sntp.now(); - expect(now).to.not.equal(Date.now()); - expect(now).to.equal(Sntp.now()); - - setTimeout(function () { - - expect(Sntp.now()).to.not.equal(now); - Sntp.stop(); - done(); - }, 110); - }); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/package.json deleted file mode 100755 index 8bf4c5c7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "hawk", - "description": "HTTP Hawk Authentication Scheme", - "version": "1.0.0", - "author": { - "name": "Eran Hammer", - "email": "eran@hueniverse.com", - "url": "http://hueniverse.com" - }, - "contributors": [], - "repository": { - "type": "git", - "url": "git://github.com/hueniverse/hawk" - }, - "main": "index", - "keywords": [ - "http", - "authentication", - "scheme", - "hawk" - ], - "engines": { - "node": ">=0.8.0" - }, - "dependencies": { - "hoek": "0.9.x", - "boom": "0.4.x", - "cryptiles": "0.2.x", - "sntp": "0.2.x" - }, - "devDependencies": { - "lab": "0.1.x", - "complexity-report": "0.x.x", - "localStorage": "1.0.x" - }, - "scripts": { - "test": "make test-cov" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/hueniverse/hawk/raw/master/LICENSE" - } - ], - "readme": "![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png)\n\n<img align=\"right\" src=\"https://raw.github.com/hueniverse/hawk/master/images/logo.png\" /> **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial\nHTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz).\n\nCurrent version: **1.0**\n\n[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk)\n\n# Table of Content\n\n- [**Introduction**](#introduction)\n - [Replay Protection](#replay-protection)\n - [Usage Example](#usage-example)\n - [Protocol Example](#protocol-example)\n - [Payload Validation](#payload-validation)\n - [Response Payload Validation](#response-payload-validation)\n - [Browser Support and Considerations](#browser-support-and-considerations)\n<p></p>\n- [**Single URI Authorization**](#single-uri-authorization)\n - [Usage Example](#bewit-usage-example)\n<p></p>\n- [**Security Considerations**](#security-considerations)\n - [MAC Keys Transmission](#mac-keys-transmission)\n - [Confidentiality of Requests](#confidentiality-of-requests)\n - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers)\n - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials)\n - [Entropy of Keys](#entropy-of-keys)\n - [Coverage Limitations](#coverage-limitations)\n - [Future Time Manipulation](#future-time-manipulation)\n - [Client Clock Poisoning](#client-clock-poisoning)\n - [Bewit Limitations](#bewit-limitations)\n - [Host Header Forgery](#host-header-forgery)\n<p></p>\n- [**Frequently Asked Questions**](#frequently-asked-questions)\n<p></p>\n- [**Acknowledgements**](#acknowledgements)\n\n# Introduction\n\n**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with\npartial cryptographic verification of the request and response, covering the HTTP method, request URI, host,\nand optionally the request payload.\n\nSimilar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of\nclient credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme,\nthe key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is\nincluded in its place.\n\nHowever, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of\nreplay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less\n\"chattiness\" (interaction with the server).\n\nAlso unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because\nthe client and server must both have access to the key material in the clear.\n\nThe primary design goals of this scheme are to:\n* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources,\n* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where\n to send an authenticated request), and\n* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client\n failure to validate the server's identity as part of its TLS handshake.\n\nIn addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using\na query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk).\n\nThe **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server,\nwhich is beyond the scope of this module. Typically, the shared credentials are established via an initial\nTLS-protected phase or derived from some other shared confidential information available to both the client\nand the server.\n\n\n## Replay Protection\n\nWithout replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more \nthan once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when \nmaking requests. This gives the server enough information to prevent replay attacks.\n\nThe nonce is generated by the client, and is a string unique across all requests with the same timestamp and\nkey identifier combination. \n\nThe timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards\nare rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks.\nBy default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in\npractice translates to a maximum of 2 minutes as the skew can be positive or negative).\n\nUsing a timestamp requires the client's clock to be in sync with the server's clock. **Hawk** requires both the client\nclock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types\n(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response\nto a bad timestamp.\n\nThere is no expectation that the client will adjust its system clock to match the server (in fact, this would be a\npotential attack vector). Instead, the client only uses the server's time to calculate an offset used only\nfor communications with that particular server. The protocol rewards clients with synchronized clocks by reducing\nthe number of round trips required to authenticate the first request.\n\n\n## Usage Example\n\nServer code:\n\n```javascript\nvar Http = require('http');\nvar Hawk = require('hawk');\n\n\n// Credentials lookup function\n\nvar credentialsFunc = function (id, callback) {\n\n var credentials = {\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256',\n user: 'Steve'\n };\n\n return callback(null, credentials);\n};\n\n// Create HTTP server\n\nvar handler = function (req, res) {\n\n // Authenticate incoming request\n\n Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {\n\n // Prepare response\n\n var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!');\n var headers = { 'Content-Type': 'text/plain' };\n\n // Generate Server-Authorization response header\n\n var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers['Content-Type'] });\n headers['Server-Authorization'] = header;\n\n // Send the response back\n\n res.writeHead(!err ? 200 : 401, headers);\n res.end(payload);\n });\n};\n\n// Start server\n\nHttp.createServer(handler).listen(8000, 'example.com');\n```\n\nClient code:\n\n```javascript\nvar Request = require('request');\nvar Hawk = require('hawk');\n\n\n// Client credentials\n\nvar credentials = {\n id: 'dh37fgj492je',\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256'\n}\n\n// Request options\n\nvar requestOptions = {\n uri: 'http://example.com:8000/resource/1?b=1&a=2',\n method: 'GET',\n headers: {}\n};\n\n// Generate Authorization request header\n\nvar header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' });\nrequestOptions.headers.Authorization = header.field;\n\n// Send authenticated request\n\nRequest(requestOptions, function (error, response, body) {\n\n // Authenticate the server's response\n\n var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body });\n\n // Output results\n\n console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)'));\n});\n```\n\n**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local\nmachine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP 'start()' method.\n\n```javascript\nHawk.sntp.start();\n```\n\n\n## Protocol Example\n\nThe client attempts to access a protected resource without authentication, sending the following HTTP request to\nthe resource server:\n\n```\nGET /resource/1?b=1&a=2 HTTP/1.1\nHost: example.com:8000\n```\n\nThe resource server returns an authentication challenge.\n\n```\nHTTP/1.1 401 Unauthorized\nWWW-Authenticate: Hawk\n```\n\nThe client has previously obtained a set of **Hawk** credentials for accessing resources on the \"http://example.com/\"\nserver. The **Hawk** credentials issued to the client include the following attributes:\n\n* Key identifier: dh37fgj492je\n* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\n* Algorithm: sha256\n\nThe client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1,\n1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline\ncharacter):\n\n```\nhawk.1.header\n1353832234\nj4h3g2\nGET\n/resource/1?b=1&a=2\nexample.com\n8000\n\nsome-app-ext-data\n\n```\n\nThe request MAC is calculated using HMAC with the specified hash algorithm \"sha256\" and the key over the normalized request string.\nThe result is base64-encoded to produce the request MAC:\n\n```\n6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=\n```\n\nThe client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using\nthe HTTP `Authorization` request header field:\n\n```\nGET /resource/1?b=1&a=2 HTTP/1.1\nHost: example.com:8000\nAuthorization: Hawk id=\"dh37fgj492je\", ts=\"1353832234\", nonce=\"j4h3g2\", ext=\"some-app-ext-data\", mac=\"6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=\"\n```\n\nThe server validates the request by calculating the request MAC again based on the request received and verifies the validity\nand scope of the **Hawk** credentials. If valid, the server responds with the requested resource.\n\n\n### Payload Validation\n\n**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash\nusing the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character):\n* `hawk.1.payload`\n* the content-type in lowercase, without any parameters (e.g. `application/json`)\n* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability)\n\nFor example:\n\n* Payload: `Thank you for flying Hawk`\n* Content Type: `text/plain`\n* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=`\n\nResults in the following input to the payload hash function (newline terminated values):\n\n```\nhawk.1.payload\ntext/plain\nThank you for flying Hawk\n\n```\n\nWhich produces the following hash value:\n\n```\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\n```\n\nThe client constructs the normalized request string (newline terminated values):\n\n```\nhawk.1.header\n1353832234\nj4h3g2\nPOST\n/resource/1?a=1&b=2\nexample.com\n8000\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\nsome-app-ext-data\n\n```\n\nThen calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data,\nand request MAC, with the request using the HTTP `Authorization` request header field:\n\n```\nPOST /resource/1?a=1&b=2 HTTP/1.1\nHost: example.com:8000\nAuthorization: Hawk id=\"dh37fgj492je\", ts=\"1353832234\", nonce=\"j4h3g2\", hash=\"Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\", ext=\"some-app-ext-data\", mac=\"aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw=\"\n```\n\nIt is up to the server if and when it validates the payload for any given request, based solely on it's security policy\nand the nature of the data included.\n\nIf the payload is available at the time of authentication, the server uses the hash value provided by the client to construct\nthe normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value\nwith the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash.\n\nHowever, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed\nat a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value\nprovided by the client after validating the MAC.\n\nIt is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value\nincluded in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided\nby the client, the payload may be modified by an attacker.\n\n\n## Response Payload Validation\n\n**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the\nclient to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header\nas a response header using the exact same syntax as the `Authorization` request header field.\n\nThe header is contructed using the same process as the client's request header. The server uses the same credentials and other\nartifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with\nnew values based on the server response. The rest as identical to those used by the client.\n\nThe result MAC digest is included with the optional `hash` and `ext` values:\n\n```\nServer-Authorization: Hawk mac=\"XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=\", hash=\"f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=\", ext=\"response-specific\"\n```\n\n\n## Browser Support and Considerations\n\nA browser script is provided for including using a `<script>` tag in [lib/browser.js](/lib/browser.js).\n\n**Hawk** relies on the _Server-Authorization_ and _WWW-Authenticate_ headers in its response to communicate with the client.\nTherefore, in case of CORS requests, it is important to consider sending _Access-Control-Expose-Headers_ with the value\n_\"WWW-Authenticate, Server-Authorization\"_ on each response from your server. As explained in the\n[specifications](http://www.w3.org/TR/cors/#access-control-expose-headers-response-header), it will indicate that these headers\ncan safely be accessed by the client (using getResponseHeader() on the XmlHttpRequest object). Otherwise you will be met with a\n[\"simple response header\"](http://www.w3.org/TR/cors/#simple-response-header) which excludes these fields and would prevent the\nHawk client from authenticating the requests.You can read more about the why and how in this\n[article](http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server)\n\n\n# Single URI Authorization\n\nThere are cases in which limited and short-term access to a protected resource is granted to a third party which does not\nhave access to the shared credentials. For example, displaying a protected image on a web page accessed by anyone. **Hawk**\nprovides limited support for such URIs in the form of a _bewit_ - a URI query parameter appended to the request URI which contains\nthe necessary credentials to authenticate the request.\n\nBecause of the significant security risks involved in issuing such access, bewit usage is purposely limited only to GET requests\nand for a finite period of time. Both the client and server can issue bewit credentials, however, the server should not use the same\ncredentials as the client to maintain clear traceability as to who issued which credentials.\n\nIn order to simplify implementation, bewit credentials do not support single-use policy and can be replayed multiple times within\nthe granted access timeframe. \n\n\n## Bewit Usage Example\n\nServer code:\n\n```javascript\nvar Http = require('http');\nvar Hawk = require('hawk');\n\n\n// Credentials lookup function\n\nvar credentialsFunc = function (id, callback) {\n\n var credentials = {\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256'\n };\n\n return callback(null, credentials);\n};\n\n// Create HTTP server\n\nvar handler = function (req, res) {\n\n Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) {\n\n res.writeHead(!err ? 200 : 401, { 'Content-Type': 'text/plain' });\n res.end(!err ? 'Access granted' : 'Shoosh!');\n });\n};\n\nHttp.createServer(handler).listen(8000, 'example.com');\n```\n\nBewit code generation:\n\n```javascript\nvar Request = require('request');\nvar Hawk = require('hawk');\n\n\n// Client credentials\n\nvar credentials = {\n id: 'dh37fgj492je',\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256'\n}\n\n// Generate bewit\n\nvar duration = 60 * 5; // 5 Minutes\nvar bewit = Hawk.uri.getBewit('http://example.com:8080/resource/1?b=1&a=2', { credentials: credentials, ttlSec: duration, ext: 'some-app-data' });\nvar uri = 'http://example.com:8000/resource/1?b=1&a=2' + '&bewit=' + bewit;\n```\n\n\n# Security Considerations\n\nThe greatest sources of security risks are usually found not in **Hawk** but in the policies and procedures surrounding its use.\nImplementers are strongly encouraged to assess how this module addresses their security requirements. This section includes\nan incomplete list of security considerations that must be reviewed and understood before deploying **Hawk** on the server.\nMany of the protections provided in **Hawk** depends on whether and how they are used.\n\n### MAC Keys Transmission\n\n**Hawk** does not provide any mechanism for obtaining or transmitting the set of shared credentials required. Any mechanism used\nto obtain **Hawk** credentials must ensure that these transmissions are protected using transport-layer mechanisms such as TLS.\n\n### Confidentiality of Requests\n\nWhile **Hawk** provides a mechanism for verifying the integrity of HTTP requests, it provides no guarantee of request\nconfidentiality. Unless other precautions are taken, eavesdroppers will have full access to the request content. Servers should\ncarefully consider the types of data likely to be sent as part of such requests, and employ transport-layer security mechanisms\nto protect sensitive resources.\n\n### Spoofing by Counterfeit Servers\n\n**Hawk** provides limited verification of the server authenticity. When receiving a response back from the server, the server\nmay choose to include a response `Server-Authorization` header which the client can use to verify the response. However, it is up to\nthe server to determine when such measure is included, to up to the client to enforce that policy.\n\nA hostile party could take advantage of this by intercepting the client's requests and returning misleading or otherwise\nincorrect responses. Service providers should consider such attacks when developing services using this protocol, and should\nrequire transport-layer security for any requests where the authenticity of the resource server or of server responses is an issue.\n\n### Plaintext Storage of Credentials\n\nThe **Hawk** key functions the same way passwords do in traditional authentication systems. In order to compute the request MAC,\nthe server must have access to the key in plaintext form. This is in contrast, for example, to modern operating systems, which\nstore only a one-way hash of user credentials.\n\nIf an attacker were to gain access to these keys - or worse, to the server's database of all such keys - he or she would be able\nto perform any action on behalf of any resource owner. Accordingly, it is critical that servers protect these keys from unauthorized\naccess.\n\n### Entropy of Keys\n\nUnless a transport-layer security protocol is used, eavesdroppers will have full access to authenticated requests and request\nMAC values, and will thus be able to mount offline brute-force attacks to recover the key used. Servers should be careful to\nassign keys which are long enough, and random enough, to resist such attacks for at least the length of time that the **Hawk**\ncredentials are valid.\n\nFor example, if the credentials are valid for two weeks, servers should ensure that it is not possible to mount a brute force\nattack that recovers the key in less than two weeks. Of course, servers are urged to err on the side of caution, and use the\nlongest key reasonable.\n\nIt is equally important that the pseudo-random number generator (PRNG) used to generate these keys be of sufficiently high\nquality. Many PRNG implementations generate number sequences that may appear to be random, but which nevertheless exhibit\npatterns or other weaknesses which make cryptanalysis or brute force attacks easier. Implementers should be careful to use\ncryptographically secure PRNGs to avoid these problems.\n\n### Coverage Limitations\n\nThe request MAC only covers the HTTP `Host` header and optionally the `Content-Type` header. It does not cover any other headers\nwhich can often affect how the request body is interpreted by the server. If the server behavior is influenced by the presence\nor value of such headers, an attacker can manipulate the request headers without being detected. Implementers should use the\n`ext` feature to pass application-specific information via the `Authorization` header which is protected by the request MAC.\n\nThe response authentication, when performed, only covers the response payload, content-type, and the request information \nprovided by the client in it's request (method, resource, timestamp, nonce, etc.). It does not cover the HTTP status code or\nany other response header field (e.g. Location) which can affect the client's behaviour.\n\n### Future Time Manipulation\n\nThe protocol relies on a clock sync between the client and server. To accomplish this, the server informs the client of its\ncurrent time when an invalid timestamp is received.\n\nIf an attacker is able to manipulate this information and cause the client to use an incorrect time, it would be able to cause\nthe client to generate authenticated requests using time in the future. Such requests will fail when sent by the client, and will\nnot likely leave a trace on the server (given the common implementation of nonce, if at all enforced). The attacker will then\nbe able to replay the request at the correct time without detection.\n\nThe client must only use the time information provided by the server if:\n* it was delivered over a TLS connection and the server identity has been verified, or\n* the `tsm` MAC digest calculated using the same client credentials over the timestamp has been verified.\n\n### Client Clock Poisoning\n\nWhen receiving a request with a bad timestamp, the server provides the client with its current time. The client must never use\nthe time received from the server to adjust its own clock, and must only use it to calculate an offset for communicating with\nthat particular server.\n\n### Bewit Limitations\n\nSpecial care must be taken when issuing bewit credentials to third parties. Bewit credentials are valid until expiration and cannot\nbe revoked or limited without using other means. Whatever resource they grant access to will be completely exposed to anyone with\naccess to the bewit credentials which act as bearer credentials for that particular resource. While bewit usage is limited to GET\nrequests only and therefore cannot be used to perform transactions or change server state, it can still be used to expose private\nand sensitive information.\n\n### Host Header Forgery\n\nHawk validates the incoming request MAC against the incoming HTTP Host header. However, unless the optional `host` and `port`\noptions are used with `server.authenticate()`, a malicous client can mint new host names pointing to the server's IP address and\nuse that to craft an attack by sending a valid request that's meant for another hostname than the one used by the server. Server\nimplementors must manually verify that the host header received matches their expectation (or use the options mentioned above).\n\n# Frequently Asked Questions\n\n### Where is the protocol specification?\n\nIf you are looking for some prose explaining how all this works, **this is it**. **Hawk** is being developed as an open source\nproject instead of a standard. In other words, the [code](/hueniverse/hawk/tree/master/lib) is the specification. Not sure about\nsomething? Open an issue!\n\n### Is it done?\n\nAt if version 0.10.0, **Hawk** is feature-complete. However, until this module reaches version 1.0.0 it is considered experimental\nand is likely to change. This also means your feedback and contribution are very welcome. Feel free to open issues with questions\nand suggestions.\n\n### Where can I find **Hawk** implementations in other languages?\n\n**Hawk**'s only reference implementation is provided in JavaScript as a node.js module. However, others are actively porting it to other\nplatforms. There is already a [PHP](https://github.com/alexbilbie/PHP-Hawk),\n[.NET](https://github.com/pcibraro/hawknet), and [JAVA](https://github.com/wealdtech/hawk) libraries available. The full list\nis maintained [here](https://github.com/hueniverse/hawk/issues?labels=port). Please add an issue if you are working on another\nport. A cross-platform test-suite is in the works.\n\n### Why isn't the algorithm part of the challenge or dynamically negotiated?\n\nThe algorithm used is closely related to the key issued as different algorithms require different key sizes (and other\nrequirements). While some keys can be used for multiple algorithm, the protocol is designed to closely bind the key and algorithm\ntogether as part of the issued credentials.\n\n### Why is Host and Content-Type the only headers covered by the request MAC?\n\nIt is really hard to include other headers. Headers can be changed by proxies and other intermediaries and there is no\nwell-established way to normalize them. Many platforms change the case of header field names and values. The only\nstraight-forward solution is to include the headers in some blob (say, base64 encoded JSON) and include that with the request,\nan approach taken by JWT and other such formats. However, that design violates the HTTP header boundaries, repeats information,\nand introduces other security issues because firewalls will not be aware of these \"hidden\" headers. In addition, any information\nrepeated must be compared to the duplicated information in the header and therefore only moves the problem elsewhere.\n\n### Why not just use HTTP Digest?\n\nDigest requires pre-negotiation to establish a nonce. This means you can't just make a request - you must first send\na protocol handshake to the server. This pattern has become unacceptable for most web services, especially mobile\nwhere extra round-trip are costly.\n\n### Why bother with all this nonce and timestamp business?\n\n**Hawk** is an attempt to find a reasonable, practical compromise between security and usability. OAuth 1.0 got timestamp\nand nonces halfway right but failed when it came to scalability and consistent developer experience. **Hawk** addresses\nit by requiring the client to sync its clock, but provides it with tools to accomplish it.\n\nIn general, replay protection is a matter of application-specific threat model. It is less of an issue on a TLS-protected\nsystem where the clients are implemented using best practices and are under the control of the server. Instead of dropping\nreplay protection, **Hawk** offers a required time window and an optional nonce verification. Together, it provides developers\nwith the ability to decide how to enforce their security policy without impacting the client's implementation.\n\n### What are `app` and `dlg` in the authorization header and normalized mac string?\n\nThe original motivation for **Hawk** was to replace the OAuth 1.0 use cases. This included both a simple client-server mode which\nthis module is specifically designed for, and a delegated access mode which is being developed separately in\n[Oz](https://github.com/hueniverse/oz). In addition to the **Hawk** use cases, Oz requires another attribute: the application id `app`.\nThis provides binding between the credentials and the application in a way that prevents an attacker from tricking an application\nto use credentials issued to someone else. It also has an optional 'delegated-by' attribute `dlg` which is the application id of the\napplication the credentials were directly issued to. The goal of these two additions is to allow Oz to utilize **Hawk** directly,\nbut with the additional security of delegated credentials.\n\n### What is the purpose of the static strings used in each normalized MAC input?\n\nWhen calculating a hash or MAC, a static prefix (tag) is added. The prefix is used to prevent MAC values from being\nused or reused for a purpose other than what they were created for (i.e. prevents switching MAC values between a request,\nresponse, and a bewit use cases). It also protects against expliots created after a potential change in how the protocol\ncreates the normalized string. For example, if a future version would switch the order of nonce and timestamp, it\ncan create an exploit opportunity for cases where the nonce is similar in format to a timestamp.\n\n### Does **Hawk** have anything to do with OAuth?\n\nShort answer: no.\n\n**Hawk** was originally proposed as the OAuth MAC Token specification. However, the OAuth working group in its consistent\nincompetence failed to produce a final, usable solution to address one of the most popular use cases of OAuth 1.0 - using it\nto authenticate simple client-server transactions (i.e. two-legged). As you can guess, the OAuth working group is still hard\nat work to produce more garbage.\n\n**Hawk** provides a simple HTTP authentication scheme for making client-server requests. It does not address the OAuth use case\nof delegating access to a third party. If you are looking for an OAuth alternative, check out [Oz](https://github.com/hueniverse/oz).\n\n\n# Acknowledgements\n\n**Hawk** is a derivative work of the [HTTP MAC Authentication Scheme](http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05) proposal\nco-authored by Ben Adida, Adam Barth, and Eran Hammer, which in turn was based on the OAuth 1.0 community specification.\n\nSpecial thanks to Ben Laurie for his always insightful feedback and advice.\n\nThe **Hawk** logo was created by [Chris Carrasco](http://chriscarrasco.com).\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/hueniverse/hawk/issues" - }, - "homepage": "https://github.com/hueniverse/hawk", - "_id": "hawk@1.0.0", - "dist": { - "shasum": "54a49d24842997b48ab16d30e69195e4a574149b" - }, - "_from": "hawk@~1.0.0", - "_resolved": "https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/browser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/browser.js deleted file mode 100755 index b25a10fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/browser.js +++ /dev/null @@ -1,771 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hoek = require('hoek'); -var Hawk = require('../lib'); -var Browser = require('../lib/browser'); -var LocalStorage = require('localStorage'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Browser', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: (id === '1' ? 'sha1' : 'sha256'), - user: 'steve' - }; - - return callback(null, credentials); - }; - - it('should generate a header then successfully parse it (configuration)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (node request)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts, { payload: 'some reply', contentType: 'text/plain', ext: 'response-specific' }); - expect(res.headers['server-authorization']).to.exist; - - expect(Browser.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (no server header options)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts); - expect(res.headers['server-authorization']).to.exist; - - expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (no server header)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header with stale ts and successfully authenticate on second call', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - Browser.utils.setNtpOffset(60 * 60 * 1000); - var header = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }); - req.authorization = header.field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Stale timestamp'); - - var res = { - headers: { - 'www-authenticate': err.response.headers['WWW-Authenticate'] - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.utils.getNtpOffset()).to.equal(60 * 60 * 1000); - expect(Browser.client.authenticate(res, credentials, header.artifacts)).to.equal(true); - expect(Browser.utils.getNtpOffset()).to.equal(0); - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - }); - - it('should generate a header with stale ts and successfully authenticate on second call (manual localStorage)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - Browser.utils.setStorage(LocalStorage) - - Browser.utils.setNtpOffset(60 * 60 * 1000); - var header = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }); - req.authorization = header.field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Stale timestamp'); - - var res = { - headers: { - 'www-authenticate': err.response.headers['WWW-Authenticate'] - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(parseInt(LocalStorage.getItem('hawk_ntp_offset'))).to.equal(60 * 60 * 1000); - expect(Browser.utils.getNtpOffset()).to.equal(60 * 60 * 1000); - expect(Browser.client.authenticate(res, credentials, header.artifacts)).to.equal(true); - expect(Browser.utils.getNtpOffset()).to.equal(0); - expect(parseInt(LocalStorage.getItem('hawk_ntp_offset'))).to.equal(0); - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - }); - - it('should generate a header then fails to parse it (missing server header hash)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts); - expect(res.headers['server-authorization']).to.exist; - - expect(Browser.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(false); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (with hash)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it then validate payload', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload('hola!', credentials, artifacts)).to.be.true; - expect(Hawk.server.authenticatePayload('hello!', credentials, artifacts)).to.be.false; - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (app)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(artifacts.app).to.equal('asd23ased'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (app, dlg)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased', dlg: '23434szr3q4d' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(artifacts.app).to.equal('asd23ased'); - expect(artifacts.dlg).to.equal('23434szr3q4d'); - done(); - }); - }); - }); - - it('should generate a header then fail authentication due to bad hash', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, { payload: 'byebye!' }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad payload hash'); - done(); - }); - }); - }); - - it('should generate a header for one resource then fail to authenticate another', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - req.url = '/something/else'; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(credentials).to.exist; - done(); - }); - }); - }); - - describe('client', function () { - - describe('#header', function () { - - it('should return a valid authorization header (sha1)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha1' - }; - - var header = Browser.client.header('http://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="bsvY3IfUllw6V5rvk4tStEvpBhE=", ext="Bazinga!", mac="qbf1ZPG/r/e06F4ht+T77LXi5vw="'); - done(); - }); - - it('should return a valid authorization header (sha256)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", ext="Bazinga!", mac="q1CwFoSHzPZSkbIvl0oYlD+91rBUEvFk763nMjMndj8="'); - done(); - }); - - it('should return a valid authorization header (no ext)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", mac="HTgtd0jPI6E4izx8e4OHdO36q00xFCU0FolNq3RiCYs="'); - done(); - }); - - it('should return an empty authorization header on missing options', function (done) { - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST').field; - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid credentials', function (done) { - - var credentials = { - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207 }).field; - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid algorithm', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, payload: 'something, anything!', ext: 'Bazinga!', timestamp: 1353809207 }).field; - expect(header).to.equal(''); - done(); - }); - }); - - describe('#authenticate', function () { - - it('should return false on invalid header', function (done) { - - var res = { - headers: { - 'server-authorization': 'Hawk mac="abc", bad="xyz"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.client.authenticate(res, {})).to.equal(false); - done(); - }); - - it('should return false on invalid mac', function (done) { - - var res = { - headers: { - 'content-type': 'text/plain', - 'server-authorization': 'Hawk mac="_IJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - var artifacts = { - method: 'POST', - host: 'example.com', - port: '8080', - resource: '/resource/4?filter=a', - ts: '1362336900', - nonce: 'eb5S_L', - hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=', - ext: 'some-app-data', - app: undefined, - dlg: undefined, - mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=', - id: '123456' - }; - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(false); - done(); - }); - - it('should return true on ignoring hash', function (done) { - - var res = { - headers: { - 'content-type': 'text/plain', - 'server-authorization': 'Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - var artifacts = { - method: 'POST', - host: 'example.com', - port: '8080', - resource: '/resource/4?filter=a', - ts: '1362336900', - nonce: 'eb5S_L', - hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=', - ext: 'some-app-data', - app: undefined, - dlg: undefined, - mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=', - id: '123456' - }; - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - - it('should fail on invalid WWW-Authenticate header format', function (done) { - - var res = { - headers: { - 'www-authenticate': 'Hawk ts="1362346425875", tsm="PhwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", x="Stale timestamp"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.client.authenticate(res, {})).to.equal(false); - done(); - }); - - it('should fail on invalid WWW-Authenticate header format', function (done) { - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - var res = { - headers: { - 'www-authenticate': 'Hawk ts="1362346425875", tsm="hwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", error="Stale timestamp"' - }, - getResponseHeader: function (header) { - - return res.headers[header.toLowerCase()]; - } - }; - - expect(Browser.client.authenticate(res, credentials)).to.equal(false); - done(); - }); - }); - - describe('#message', function () { - it('should generate an authorization then successfully parse it', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Browser.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - }); - - it('should fail on missing host', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Browser.client.message(null, 8080, 'some message', { credentials: credentials }); - expect(auth).to.not.exist; - done(); - }); - }); - - it('should fail on missing credentials', function (done) { - - var auth = Browser.client.message('example.com', 8080, 'some message', {}); - expect(auth).to.not.exist; - done(); - }); - - it('should fail on invalid algorithm', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var creds = Hoek.clone(credentials); - creds.algorithm = 'blah'; - var auth = Browser.client.message('example.com', 8080, 'some message', { credentials: creds }); - expect(auth).to.not.exist; - done(); - }); - }); - }); - }); - - describe('#parseAuthorizationHeader', function (done) { - - it('returns null on missing header', function (done) { - - expect(Browser.utils.parseAuthorizationHeader()).to.equal(null); - done(); - }); - - it('returns null on bad header syntax (structure)', function (done) { - - expect(Browser.utils.parseAuthorizationHeader('Hawk')).to.equal(null); - done(); - }); - - it('returns null on bad header syntax (parts)', function (done) { - - expect(Browser.utils.parseAuthorizationHeader(' ')).to.equal(null); - done(); - }); - - it('returns null on bad scheme name', function (done) { - - expect(Browser.utils.parseAuthorizationHeader('Basic asdasd')).to.equal(null); - done(); - }); - - it('returns null on bad attribute value', function (done) { - - expect(Browser.utils.parseAuthorizationHeader('Hawk test="\t"', ['test'])).to.equal(null); - done(); - }); - - it('returns null on duplicated attribute', function (done) { - - expect(Browser.utils.parseAuthorizationHeader('Hawk test="a", test="b"', ['test'])).to.equal(null); - done(); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/client.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/client.js deleted file mode 100755 index bcc4222a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/client.js +++ /dev/null @@ -1,206 +0,0 @@ -// Load modules - -var Url = require('url'); -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('client', function () { - - describe('#header', function () { - - it('should return a valid authorization header (sha1)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha1' - }; - - var header = Hawk.client.header('http://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="bsvY3IfUllw6V5rvk4tStEvpBhE=", ext="Bazinga!", mac="qbf1ZPG/r/e06F4ht+T77LXi5vw="'); - done(); - }); - - it('should return a valid authorization header (sha256)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", ext="Bazinga!", mac="q1CwFoSHzPZSkbIvl0oYlD+91rBUEvFk763nMjMndj8="'); - done(); - }); - - it('should return a valid authorization header (no ext)', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field; - expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", mac="HTgtd0jPI6E4izx8e4OHdO36q00xFCU0FolNq3RiCYs="'); - done(); - }); - - it('should return an empty authorization header on missing options', function (done) { - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST').field; - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid credentials', function (done) { - - var credentials = { - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207 }).field; - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid algorithm', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, payload: 'something, anything!', ext: 'Bazinga!', timestamp: 1353809207 }).field; - expect(header).to.equal(''); - done(); - }); - }); - - describe('#authenticate', function () { - - it('should return false on invalid header', function (done) { - - var res = { - headers: { - 'server-authorization': 'Hawk mac="abc", bad="xyz"' - } - }; - - expect(Hawk.client.authenticate(res, {})).to.equal(false); - done(); - }); - - it('should return false on invalid mac', function (done) { - - var res = { - headers: { - 'content-type': 'text/plain', - 'server-authorization': 'Hawk mac="_IJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"' - } - }; - - var artifacts = { - method: 'POST', - host: 'example.com', - port: '8080', - resource: '/resource/4?filter=a', - ts: '1362336900', - nonce: 'eb5S_L', - hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=', - ext: 'some-app-data', - app: undefined, - dlg: undefined, - mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=', - id: '123456' - }; - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(false); - done(); - }); - - it('should return true on ignoring hash', function (done) { - - var res = { - headers: { - 'content-type': 'text/plain', - 'server-authorization': 'Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"' - } - }; - - var artifacts = { - method: 'POST', - host: 'example.com', - port: '8080', - resource: '/resource/4?filter=a', - ts: '1362336900', - nonce: 'eb5S_L', - hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=', - ext: 'some-app-data', - app: undefined, - dlg: undefined, - mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=', - id: '123456' - }; - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - - it('should fail on invalid WWW-Authenticate header format', function (done) { - - var header = 'Hawk ts="1362346425875", tsm="PhwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", x="Stale timestamp"'; - expect(Hawk.client.authenticate({ headers: { 'www-authenticate': header } }, {})).to.equal(false); - done(); - }); - - it('should fail on invalid WWW-Authenticate header format', function (done) { - - var credentials = { - id: '123456', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - var header = 'Hawk ts="1362346425875", tsm="hwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", error="Stale timestamp"'; - expect(Hawk.client.authenticate({ headers: { 'www-authenticate': header } }, credentials)).to.equal(false); - done(); - }); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/crypto.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/crypto.js deleted file mode 100755 index b62c2177..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/crypto.js +++ /dev/null @@ -1,86 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('Crypto', function () { - - describe('#generateNormalizedString', function () { - - it('should return a valid normalized string', function (done) { - - expect(Hawk.crypto.generateNormalizedString('header', { - credentials: { - key: 'dasdfasdf', - algorithm: 'sha256' - }, - ts: 1357747017, - nonce: 'k3k4j5', - method: 'GET', - resource: '/resource/something', - host: 'example.com', - port: 8080 - })).to.equal('hawk.1.header\n1357747017\nk3k4j5\nGET\n/resource/something\nexample.com\n8080\n\n\n'); - - done(); - }); - - it('should return a valid normalized string (ext)', function (done) { - - expect(Hawk.crypto.generateNormalizedString('header', { - credentials: { - key: 'dasdfasdf', - algorithm: 'sha256' - }, - ts: 1357747017, - nonce: 'k3k4j5', - method: 'GET', - resource: '/resource/something', - host: 'example.com', - port: 8080, - ext: 'this is some app data' - })).to.equal('hawk.1.header\n1357747017\nk3k4j5\nGET\n/resource/something\nexample.com\n8080\n\nthis is some app data\n'); - - done(); - }); - - it('should return a valid normalized string (payload + ext)', function (done) { - - expect(Hawk.crypto.generateNormalizedString('header', { - credentials: { - key: 'dasdfasdf', - algorithm: 'sha256' - }, - ts: 1357747017, - nonce: 'k3k4j5', - method: 'GET', - resource: '/resource/something', - host: 'example.com', - port: 8080, - hash: 'U4MKKSmiVxk37JCCrAVIjV/OhB3y+NdwoCr6RShbVkE=', - ext: 'this is some app data' - })).to.equal('hawk.1.header\n1357747017\nk3k4j5\nGET\n/resource/something\nexample.com\n8080\nU4MKKSmiVxk37JCCrAVIjV/OhB3y+NdwoCr6RShbVkE=\nthis is some app data\n'); - - done(); - }); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/index.js deleted file mode 100755 index ba837388..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/index.js +++ /dev/null @@ -1,316 +0,0 @@ -// Load modules - -var Url = require('url'); -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: (id === '1' ? 'sha1' : 'sha256'), - user: 'steve' - }; - - return callback(null, credentials); - }; - - it('should generate a header then successfully parse it (configuration)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header(Url.parse('http://example.com:8080/resource/4?filter=a'), req.method, { credentials: credentials, ext: 'some-app-data' }).field; - expect(req.authorization).to.exist; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (node request)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts, { payload: 'some reply', contentType: 'text/plain', ext: 'response-specific' }); - expect(res.headers['server-authorization']).to.exist; - - expect(Hawk.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (no server header options)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts); - expect(res.headers['server-authorization']).to.exist; - - expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - }); - }); - - it('should generate a header then fails to parse it (missing server header hash)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:8080', - 'content-type': 'text/plain;x=y' - } - }; - - var payload = 'some not so random text'; - - credentialsFunc('123456', function (err, credentials) { - - var reqHeader = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] }); - req.headers.authorization = reqHeader.field; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true); - - var res = { - headers: { - 'content-type': 'text/plain' - } - }; - - res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts); - expect(res.headers['server-authorization']).to.exist; - - expect(Hawk.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(false); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (with hash)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it then validate payload', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(Hawk.server.authenticatePayload('hola!', credentials, artifacts)).to.be.true; - expect(Hawk.server.authenticatePayload('hello!', credentials, artifacts)).to.be.false; - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (app)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(artifacts.app).to.equal('asd23ased'); - done(); - }); - }); - }); - - it('should generate a header then successfully parse it (app, dlg)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased', dlg: '23434szr3q4d' }).field; - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(artifacts.ext).to.equal('some-app-data'); - expect(artifacts.app).to.equal('asd23ased'); - expect(artifacts.dlg).to.equal('23434szr3q4d'); - done(); - }); - }); - }); - - it('should generate a header then fail authentication due to bad hash', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field; - Hawk.server.authenticate(req, credentialsFunc, { payload: 'byebye!' }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad payload hash'); - done(); - }); - }); - }); - - it('should generate a header for one resource then fail to authenticate another', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - credentialsFunc('123456', function (err, credentials) { - - req.authorization = Hawk.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field; - req.url = '/something/else'; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(credentials).to.exist; - done(); - }); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/message.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/message.js deleted file mode 100755 index 04b91d41..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/message.js +++ /dev/null @@ -1,246 +0,0 @@ -// Load modules - -var Url = require('url'); -var Lab = require('lab'); -var Hoek = require('hoek'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: (id === '1' ? 'sha1' : 'sha256'), - user: 'steve' - }; - - return callback(null, credentials); - }; - - it('should generate an authorization then successfully parse it', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - }); - - it('should fail authorization on mismatching host', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example1.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Bad mac'); - done(); - }); - }); - }); - - it('should fail authorization on stale timestamp', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, { localtimeOffsetMsec: 100000 }, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Stale timestamp'); - done(); - }); - }); - }); - - it('should fail authorization on invalid authorization', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - delete auth.id; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid authorization'); - done(); - }); - }); - }); - - it('should fail authorization on bad hash', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message1', auth, credentialsFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Bad message hash'); - done(); - }); - }); - }); - - it('should fail authorization on nonce error', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, { nonceFunc: function (nonce, ts, callback) { callback (new Error('kaboom')); } }, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid nonce'); - done(); - }); - }); - }); - - it('should fail authorization on credentials error', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - var errFunc = function (id, callback) { - - callback(new Error('kablooey')); - }; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('kablooey'); - done(); - }); - }); - }); - - it('should fail authorization on missing credentials', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - var errFunc = function (id, callback) { - - callback(); - }; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown credentials'); - done(); - }); - }); - }); - - it('should fail authorization on invalid credentials', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - var errFunc = function (id, callback) { - - callback(null, {}); - }; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid credentials'); - done(); - }); - }); - }); - - it('should fail authorization on invalid credentials algorithm', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials }); - expect(auth).to.exist; - - var errFunc = function (id, callback) { - - callback(null, { key: '123', algorithm: '456' }); - }; - - Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown algorithm'); - done(); - }); - }); - }); - - it('should fail on missing host', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var auth = Hawk.client.message(null, 8080, 'some message', { credentials: credentials }); - expect(auth).to.not.exist; - done(); - }); - }); - - it('should fail on missing credentials', function (done) { - - var auth = Hawk.client.message('example.com', 8080, 'some message', {}); - expect(auth).to.not.exist; - done(); - }); - - it('should fail on invalid algorithm', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var creds = Hoek.clone(credentials); - creds.algorithm = 'blah'; - var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: creds }); - expect(auth).to.not.exist; - done(); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/readme.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/readme.js deleted file mode 100755 index f39e033d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/readme.js +++ /dev/null @@ -1,98 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hoek = require('hoek'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('README', function () { - - describe('core', function () { - - var credentials = { - id: 'dh37fgj492je', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' - }; - - var options = { - credentials: credentials, - timestamp: 1353832234, - nonce: 'j4h3g2', - ext: 'some-app-ext-data' - }; - - it('should generate a header protocol example', function (done) { - - var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', options).field; - - expect(header).to.equal('Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE="'); - done(); - }); - - it('should generate a normalized string protocol example', function (done) { - - var normalized = Hawk.crypto.generateNormalizedString('header', { - credentials: credentials, - ts: options.timestamp, - nonce: options.nonce, - method: 'GET', - resource: '/resource?a=1&b=2', - host: 'example.com', - port: 8000, - ext: options.ext - }); - - expect(normalized).to.equal('hawk.1.header\n1353832234\nj4h3g2\nGET\n/resource?a=1&b=2\nexample.com\n8000\n\nsome-app-ext-data\n'); - done(); - }); - - var payloadOptions = Hoek.clone(options); - payloadOptions.payload = 'Thank you for flying Hawk'; - payloadOptions.contentType = 'text/plain'; - - it('should generate a header protocol example (with payload)', function (done) { - - var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'POST', payloadOptions).field; - - expect(header).to.equal('Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", hash="Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=", ext="some-app-ext-data", mac="aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw="'); - done(); - }); - - it('should generate a normalized string protocol example (with payload)', function (done) { - - var normalized = Hawk.crypto.generateNormalizedString('header', { - credentials: credentials, - ts: options.timestamp, - nonce: options.nonce, - method: 'POST', - resource: '/resource?a=1&b=2', - host: 'example.com', - port: 8000, - hash: Hawk.crypto.calculatePayloadHash(payloadOptions.payload, credentials.algorithm, payloadOptions.contentType), - ext: options.ext - }); - - expect(normalized).to.equal('hawk.1.header\n1353832234\nj4h3g2\nPOST\n/resource?a=1&b=2\nexample.com\n8000\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\nsome-app-ext-data\n'); - done(); - }); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/server.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/server.js deleted file mode 100755 index 3e92427a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/server.js +++ /dev/null @@ -1,686 +0,0 @@ -// Load modules - -var Url = require('url'); -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('server', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: (id === '1' ? 'sha1' : 'sha256'), - user: 'steve' - }; - - return callback(null, credentials); - }; - - describe('#authenticate', function () { - - it('should parse a valid authentication header (sha1)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should parse a valid authentication header (sha256)', function (done) { - - var req = { - method: 'GET', - url: '/resource/1?b=1&a=2', - host: 'example.com', - port: 8000, - authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", mac="m8r1rHbXN6NgO+KIIhjO7sFRyd78RNGVUwehe8Cp2dU=", ext="some-app-data"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353832234000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should parse a valid authentication header (host override)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - host: 'example1.com:8080', - authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { host: 'example.com', localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should parse a valid authentication header (host port override)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - host: 'example1.com:80', - authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { host: 'example.com', port: 8080, localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should parse a valid authentication header (POST with payload)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123456", ts="1357926341", nonce="1AwuJD", hash="qAiXIVv+yjDATneWxZP2YCTa9aHRgQdnH9b3Wc+o3dg=", ext="some-app-data", mac="UeYcj5UoTVaAWXNvJfLVia7kU3VabxCqrccXP8sUGC4="' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1357926341000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - - it('should fail on missing hash', function (done) { - - var req = { - method: 'GET', - url: '/resource/1?b=1&a=2', - host: 'example.com', - port: 8000, - authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", mac="m8r1rHbXN6NgO+KIIhjO7sFRyd78RNGVUwehe8Cp2dU=", ext="some-app-data"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { payload: 'body', localtimeOffsetMsec: 1353832234000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing required payload hash'); - done(); - }); - }); - - it('should fail on a stale timestamp', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123456", ts="1362337299", nonce="UzmxSs", ext="some-app-data", mac="wnNUxchvvryMH2RxckTdZ/gY3ijzvccx4keVvELC61w="' - }; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Stale timestamp'); - var header = err.response.headers['WWW-Authenticate']; - var ts = header.match(/^Hawk ts\=\"(\d+)\"\, tsm\=\"([^\"]+)\"\, error=\"Stale timestamp\"$/); - var now = Hawk.utils.now(); - expect(parseInt(ts[1], 10) * 1000).to.be.within(now - 1000, now + 1000); - - var res = { - headers: { - 'www-authenticate': header - } - }; - - expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(true); - done(); - }); - }); - - it('should fail on a replay', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="bXx7a7p1h9QYQNZ8x7QhvDQym8ACgab4m3lVSFn4DBw=", ext="hello"' - }; - - var memoryCache = {}; - var options = { - localtimeOffsetMsec: 1353788437000 - Hawk.utils.now(), - nonceFunc: function (nonce, ts, callback) { - - if (memoryCache[nonce]) { - return callback(new Error()); - } - - memoryCache[nonce] = true; - return callback(); - } - }; - - Hawk.server.authenticate(req, credentialsFunc, options, function (err, credentials, artifacts) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - - Hawk.server.authenticate(req, credentialsFunc, options, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid nonce'); - done(); - }); - }); - }); - - it('should fail on an invalid authentication header: wrong scheme', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Basic asdasdasdasd' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.not.exist; - done(); - }); - }); - - it('should fail on an invalid authentication header: no scheme', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: '!@#' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid header syntax'); - done(); - }); - }); - - it('should fail on an missing authorization header', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.isMissing).to.equal(true); - done(); - }); - }); - - it('should fail on an missing host header', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid Host header'); - done(); - }); - }); - - it('should fail on an missing authorization attribute (id)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing attributes'); - done(); - }); - }); - - it('should fail on an missing authorization attribute (ts)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing attributes'); - done(); - }); - }); - - it('should fail on an missing authorization attribute (nonce)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing attributes'); - done(); - }); - }); - - it('should fail on an missing authorization attribute (mac)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing attributes'); - done(); - }); - }); - - it('should fail on an unknown authorization attribute', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", x="3", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Unknown attribute: x'); - done(); - }); - }); - - it('should fail on an bad authorization header format', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123\\", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad header format'); - done(); - }); - }); - - it('should fail on an bad authorization attribute value', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="\t", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad attribute value: id'); - done(); - }); - }); - - it('should fail on an empty authorization attribute value', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad attribute value: id'); - done(); - }); - }); - - it('should fail on duplicated authorization attribute key', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", id="456", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Duplicate attribute: id'); - done(); - }); - }); - - it('should fail on an invalid authorization header format', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk' - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid header syntax'); - done(); - }); - }); - - it('should fail on an bad host header (missing host)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - host: ':8080', - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid Host header'); - done(); - }); - }); - - it('should fail on an bad host header (pad port)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - headers: { - host: 'example.com:something', - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - } - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid Host header'); - done(); - }); - }); - - it('should fail on credentialsFunc error', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - return callback(new Error('Unknown user')); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown user'); - done(); - }); - }); - - it('should fail on missing credentials', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - return callback(null, null); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Unknown credentials'); - done(); - }); - }); - - it('should fail on invalid credentials', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - user: 'steve' - }; - - return callback(null, credentials); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid credentials'); - expect(err.response.payload.message).to.equal('An internal server error occurred'); - done(); - }); - }); - - it('should fail on unknown credentials algorithm', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcUyW6EEgUH4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'hmac-sha-0', - user: 'steve' - }; - - return callback(null, credentials); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown algorithm'); - expect(err.response.payload.message).to.equal('An internal server error occurred'); - done(); - }); - }); - - it('should fail on unknown bad mac', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080, - authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="/qwS4UjfVWMcU4jlr7T/wuKe3dKijvTvSos=", ext="hello"' - }; - - var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - return callback(null, credentials); - }; - - Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad mac'); - done(); - }); - }); - }); - - describe('#header', function () { - - it('should return an empty authorization header on missing options', function (done) { - - var header = Hawk.server.header(); - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on missing credentials', function (done) { - - var header = Hawk.server.header(null, {}); - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid credentials', function (done) { - - var credentials = { - key: '2983d45yun89q' - }; - - var header = Hawk.server.header(credentials); - expect(header).to.equal(''); - done(); - }); - - it('should return an empty authorization header on invalid algorithm', function (done) { - - var artifacts = { - id: '123456' - }; - - var credentials = { - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var header = Hawk.server.header(credentials, artifacts); - expect(header).to.equal(''); - done(); - }); - }); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/uri.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/uri.js deleted file mode 100755 index 44ffd7fb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/uri.js +++ /dev/null @@ -1,456 +0,0 @@ -// Load modules - -var Http = require('http'); -var Lab = require('lab'); -var Hawk = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('Uri', function () { - - var credentialsFunc = function (id, callback) { - - var credentials = { - id: id, - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'steve' - }; - - return callback(null, credentials); - }; - - it('should generate a bewit then successfully authenticate it', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?a=1&b=2', - host: 'example.com', - port: 80 - }; - - credentialsFunc('123456', function (err, credentials) { - - var bewit = Hawk.uri.getBewit('http://example.com/resource/4?a=1&b=2', { credentials: credentials, ttlSec: 60 * 60 * 24 * 365 * 100, ext: 'some-app-data' }); - req.url += '&bewit=' + bewit; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(attributes.ext).to.equal('some-app-data'); - done(); - }); - }); - }); - - it('should generate a bewit then successfully authenticate it (no ext)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?a=1&b=2', - host: 'example.com', - port: 80 - }; - - credentialsFunc('123456', function (err, credentials) { - - var bewit = Hawk.uri.getBewit('http://example.com/resource/4?a=1&b=2', { credentials: credentials, ttlSec: 60 * 60 * 24 * 365 * 100 }); - req.url += '&bewit=' + bewit; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - done(); - }); - }); - }); - - it('should successfully authenticate a request (last param)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?a=1&b=2&bewit=MTIzNDU2XDQ1MTE0ODQ2MjFcMzFjMmNkbUJFd1NJRVZDOVkva1NFb2c3d3YrdEVNWjZ3RXNmOGNHU2FXQT1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(attributes.ext).to.equal('some-app-data'); - done(); - }); - }); - - it('should successfully authenticate a request (first param)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MTE0ODQ2MjFcMzFjMmNkbUJFd1NJRVZDOVkva1NFb2c3d3YrdEVNWjZ3RXNmOGNHU2FXQT1cc29tZS1hcHAtZGF0YQ&a=1&b=2', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(attributes.ext).to.equal('some-app-data'); - done(); - }); - }); - - it('should successfully authenticate a request (only param)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MTE0ODQ2NDFcZm1CdkNWT3MvcElOTUUxSTIwbWhrejQ3UnBwTmo4Y1VrSHpQd3Q5OXJ1cz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.not.exist; - expect(credentials.user).to.equal('steve'); - expect(attributes.ext).to.equal('some-app-data'); - done(); - }); - }); - - it('should fail on multiple authentication', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MTE0ODQ2NDFcZm1CdkNWT3MvcElOTUUxSTIwbWhrejQ3UnBwTmo4Y1VrSHpQd3Q5OXJ1cz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080, - authorization: 'Basic asdasdasdasd' - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Multiple authentications'); - done(); - }); - }); - - it('should fail on method other than GET', function (done) { - - credentialsFunc('123456', function (err, credentials) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - host: 'example.com', - port: 8080 - }; - - var exp = Math.floor(Hawk.utils.now() / 1000) + 60; - var ext = 'some-app-data'; - var mac = Hawk.crypto.calculateMac('bewit', credentials, { - timestamp: exp, - nonce: '', - method: req.method, - resource: req.url, - host: req.host, - port: req.port, - ext: ext - }); - - var bewit = credentials.id + '\\' + exp + '\\' + mac + '\\' + ext; - - req.url += '&bewit=' + Hawk.utils.base64urlEncode(bewit); - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid method'); - done(); - }); - }); - }); - - it('should fail on invalid host header', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - headers: { - host: 'example.com:something' - } - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid Host header'); - done(); - }); - }); - - it('should fail on empty bewit', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Empty bewit'); - expect(err.isMissing).to.not.exist; - done(); - }); - }); - - it('should fail on invalid bewit', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=*', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid bewit encoding'); - expect(err.isMissing).to.not.exist; - done(); - }); - }); - - it('should fail on missing bewit', function (done) { - - var req = { - method: 'GET', - url: '/resource/4', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.not.exist; - expect(err.isMissing).to.equal(true); - done(); - }); - }); - - it('should fail on invalid bewit structure', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=abc', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Invalid bewit structure'); - done(); - }); - }); - - it('should fail on empty bewit attribute', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=YVxcY1xk', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Missing bewit attributes'); - done(); - }); - }); - - it('should fail on expired access', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?a=1&b=2&bewit=MTIzNDU2XDEzNTY0MTg1ODNcWk1wZlMwWU5KNHV0WHpOMmRucTRydEk3NXNXTjFjeWVITTcrL0tNZFdVQT1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Access expired'); - done(); - }); - }); - - it('should fail on credentials function error', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(Hawk.error.badRequest('Boom')); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Boom'); - done(); - }); - }); - - it('should fail on null credentials function response', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(null, null); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Unknown credentials'); - done(); - }); - }); - - it('should fail on invalid credentials function response', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(null, {}); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid credentials'); - done(); - }); - }); - - it('should fail on invalid credentials function response (unknown algorithm)', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(null, { key: 'xxx', algorithm: 'xxx' }); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.message).to.equal('Unknown algorithm'); - done(); - }); - }); - - it('should fail on expired access', function (done) { - - var req = { - method: 'GET', - url: '/resource/4?bewit=MTIzNDU2XDQ1MDk5OTE3MTlcTUE2eWkwRWRwR0pEcWRwb0JkYVdvVDJrL0hDSzA1T0Y3MkhuZlVmVy96Zz1cc29tZS1hcHAtZGF0YQ', - host: 'example.com', - port: 8080 - }; - - Hawk.uri.authenticate(req, function (id, callback) { callback(null, { key: 'xxx', algorithm: 'sha256' }); }, {}, function (err, credentials, attributes) { - - expect(err).to.exist; - expect(err.response.payload.message).to.equal('Bad mac'); - done(); - }); - }); - }); - - describe('#getBewit', function () { - - it('should return a valid bewit value', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var bewit = Hawk.uri.getBewit('https://example.com/somewhere/over/the/rainbow', { credentials: credentials, ttlSec: 300, localtimeOffsetMsec: 1356420407232 - Hawk.utils.now(), ext: 'xandyandz' }); - expect(bewit).to.equal('MTIzNDU2XDEzNTY0MjA3MDdca3NjeHdOUjJ0SnBQMVQxekRMTlBiQjVVaUtJVTl0T1NKWFRVZEc3WDloOD1ceGFuZHlhbmR6'); - done(); - }); - - it('should return an empty bewit on invalid credentials', function (done) { - - var credentials = { - key: '2983d45yun89q', - algorithm: 'sha256' - }; - - var bewit = Hawk.uri.getBewit('https://example.com/somewhere/over/the/rainbow', { credentials: credentials, ttlSec: 3000, ext: 'xandyandz' }); - expect(bewit).to.equal(''); - done(); - }); - - it('should return an empty bewit on invalid algorithm', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var bewit = Hawk.uri.getBewit('https://example.com/somewhere/over/the/rainbow', { credentials: credentials, ttlSec: 300, ext: 'xandyandz' }); - expect(bewit).to.equal(''); - done(); - }); - - it('should return an empty bewit on missing options', function (done) { - - var credentials = { - id: '123456', - key: '2983d45yun89q', - algorithm: 'hmac-sha-0' - }; - - var bewit = Hawk.uri.getBewit('https://example.com/somewhere/over/the/rainbow'); - expect(bewit).to.equal(''); - done(); - }); - }); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/utils.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/utils.js deleted file mode 100755 index 0f5fef77..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/hawk/test/utils.js +++ /dev/null @@ -1,120 +0,0 @@ -// Load modules - -var Lab = require('lab'); -var Hawk = require('../lib'); -var Package = require('../package.json'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var expect = Lab.expect; -var before = Lab.before; -var after = Lab.after; -var describe = Lab.experiment; -var it = Lab.test; - - -describe('Hawk', function () { - - describe('Utils', function () { - - describe('#parseHost', function () { - - it('returns port 80 for non tls node request', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com', - 'content-type': 'text/plain;x=y' - } - }; - - expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(80); - done(); - }); - - it('returns port 443 for non tls node request', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: 'example.com', - 'content-type': 'text/plain;x=y' - }, - connection: { - encrypted: true - } - }; - - expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443); - done(); - }); - - it('returns port 443 for non tls node request (IPv6)', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: '[123:123:123]', - 'content-type': 'text/plain;x=y' - }, - connection: { - encrypted: true - } - }; - - expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443); - done(); - }); - - it('parses IPv6 headers', function (done) { - - var req = { - method: 'POST', - url: '/resource/4?filter=a', - headers: { - host: '[123:123:123]:8000', - 'content-type': 'text/plain;x=y' - }, - connection: { - encrypted: true - } - }; - - var host = Hawk.utils.parseHost(req, 'Host'); - expect(host.port).to.equal('8000'); - expect(host.name).to.equal('[123:123:123]'); - done(); - }); - }); - - describe('#version', function () { - - it('returns the correct package version number', function (done) { - - expect(Hawk.utils.version()).to.equal(Package.version); - done(); - }); - }); - - describe('#unauthorized', function () { - - it('returns a hawk 401', function (done) { - - expect(Hawk.utils.unauthorized('kaboom').response.headers['WWW-Authenticate']).to.equal('Hawk error="kaboom"'); - done(); - }); - }); - }); -}); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.dir-locals.el b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.dir-locals.el deleted file mode 100644 index 3bc9235f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.dir-locals.el +++ /dev/null @@ -1,6 +0,0 @@ -((nil . ((indent-tabs-mode . nil) - (tab-width . 8) - (fill-column . 80))) - (js-mode . ((js-indent-level . 2) - (indent-tabs-mode . nil) - ))) \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.npmignore deleted file mode 100644 index c143fb3a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -.gitmodules -deps -docs -Makefile -node_modules -test -tools \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/LICENSE deleted file mode 100644 index f6d947d2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/README.md deleted file mode 100644 index 0c707149..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# node-http-signature - -node-http-signature is a node.js library that has client and server components -for Joyent's [HTTP Signature Scheme](http_signing.md). - -## Usage - -Note the example below signs a request with the same key/cert used to start an -HTTP server. This is almost certainly not what you actaully want, but is just -used to illustrate the API calls; you will need to provide your own key -management in addition to this library. - -### Client - - var fs = require('fs'); - var https = require('https'); - var httpSignature = require('http-signature'); - - var key = fs.readFileSync('./key.pem', 'ascii'); - - var options = { - host: 'localhost', - port: 8443, - path: '/', - method: 'GET', - headers: {} - }; - - // Adds a 'Date' header in, signs it, and adds the - // 'Authorization' header in. - var req = https.request(options, function(res) { - console.log(res.statusCode); - }); - - - httpSignature.sign(req, { - key: key, - keyId: './cert.pem' - }); - - req.end(); - -### Server - - var fs = require('fs'); - var https = require('https'); - var httpSignature = require('http-signature'); - - var options = { - key: fs.readFileSync('./key.pem'), - cert: fs.readFileSync('./cert.pem') - }; - - https.createServer(options, function (req, res) { - var rc = 200; - var parsed = httpSignature.parseRequest(req); - var pub = fs.readFileSync(parsed.keyId, 'ascii'); - if (!httpSignature.verifySignature(parsed, pub)) - rc = 401; - - res.writeHead(rc); - res.end(); - }).listen(8443); - -## Installation - - npm install http-signature - -## License - -MIT. - -## Bugs - -See <https://github.com/joyent/node-http-signature/issues>. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/http_signing.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/http_signing.md deleted file mode 100644 index ba7321da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/http_signing.md +++ /dev/null @@ -1,296 +0,0 @@ -# Abstract - -This document describes a way to add origin authentication, message integrity, -and replay resistance to HTTP REST requests. It is intended to be used over -the HTTPS protocol. - -# Copyright Notice - -Copyright (c) 2011 Joyent, Inc. and the persons identified as document authors. -All rights reserved. - -Code Components extracted from this document must include MIT License text. - -# Introduction - -This protocol is intended to provide a standard way for clients to sign HTTP -requests. RFC2617 (HTTP Authentication) defines Basic and Digest authentication -mechanisms, and RFC5246 (TLS 1.2) defines client-auth, both of which are widely -employed on the Internet today. However, it is common place that the burdens of -PKI prevent web service operators from deploying that methodoloy, and so many -fall back to Basic authentication, which has poor security characteristics. - -Additionally, OAuth provides a fully-specified alternative for authorization -of web service requests, but is not (always) ideal for machine to machine -communication, as the key acquisition steps (generally) imply a fixed -infrastructure that may not make sense to a service provider (e.g., symmetric -keys). - -Several web service providers have invented their own schemes for signing -HTTP requests, but to date, none have been placed in the public domain as a -standard. This document serves that purpose. There are no techniques in this -proposal that are novel beyond previous art, however, this aims to be a simple -mechanism for signing these requests. - -# Signature Authentication Scheme - -The "signature" authentication scheme is based on the model that the client must -authenticate itself with a digital signature produced by either a private -asymmetric key (e.g., RSA) or a shared symmetric key (e.g., HMAC). The scheme -is parameterized enough such that it is not bound to any particular key type or -signing algorithm. However, it does explicitly assume that clients can send an -HTTP `Date` header. - -## Authorization Header - -The client is expected to send an Authorization header (as defined in RFC 2617) -with the following parameterization: - - credentials := "Signature" params - params := 1#(keyId | algorithm | [headers] | [ext] | signature) - digitalSignature := plain-string - - keyId := "keyId" "=" <"> plain-string <"> - algorithm := "algorithm" "=" <"> plain-string <"> - headers := "headers" "=" <"> 1#headers-value <"> - ext := "ext" "=" <"> plain-string <"> - signature := "signature" "=" <"> plain-string <"> - - headers-value := plain-string - plain-string = 1*( %x20-21 / %x23-5B / %x5D-7E ) - -### Signature Parameters - -#### keyId - -REQUIRED. The `keyId` field is an opaque string that the server can use to look -up the component they need to validate the signature. It could be an SSH key -fingerprint, an LDAP DN, etc. Management of keys and assignment of `keyId` is -out of scope for this document. - -#### algorithm - -REQUIRED. The `algorithm` parameter is used if the client and server agree on a -non-standard digital signature algorithm. The full list of supported signature -mechanisms is listed below. - -#### headers - -OPTIONAL. The `headers` parameter is used to specify the list of HTTP headers -used to sign the request. If specified, it should be a quoted list of HTTP -header names, separated by a single space character. By default, only one -HTTP header is signed, which is the `Date` header. Note that the list MUST be -specified in the order the values are concatenated together during signing. To -include the HTTP request line in the signature calculation, use the special -`request-line` value. While this is overloading the definition of `headers` in -HTTP linguism, the request-line is defined in RFC 2616, and as the outlier from -headers in useful signature calculation, it is deemed simpler to simply use -`request-line` than to add a separate parameter for it. - -#### extensions - -OPTIONAL. The `extensions` parameter is used to include additional information -which is covered by the request. The content and format of the string is out of -scope for this document, and expected to be specified by implementors. - -#### signature - -REQUIRED. The `signature` parameter is a `Base64` encoded digital signature -generated by the client. The client uses the `algorithm` and `headers` request -parameters to form a canonicalized `signing string`. This `signing string` is -then signed with the key associated with `keyId` and the algorithm -corresponding to `algorithm`. The `signature` parameter is then set to the -`Base64` encoding of the signature. - -### Signing String Composition - -In order to generate the string that is signed with a key, the client MUST take -the values of each HTTP header specified by `headers` in the order they appear. - -1. If the header name is not `request-line` then append the lowercased header - name followed with an ASCII colon `:` and an ASCII space ` `. -2. If the header name is `request-line` then appened the HTTP request line, - otherwise append the header value. -3. If value is not the last value then append an ASCII newline `\n`. The string - MUST NOT include a trailing ASCII newline. - -# Example Requests - -All requests refer to the following request (body ommitted): - - POST /foo HTTP/1.1 - Host: example.org - Date: Tue, 07 Jun 2011 20:51:35 GMT - Content-Type: application/json - Content-MD5: h0auK8hnYJKmHTLhKtMTkQ== - Content-Length: 123 - -The "rsa-key-1" keyId refers to a private key known to the client and a public -key known to the server. The "hmac-key-1" keyId refers to key known to the -client and server. - -## Default parameterization - -The authorization header and signature would be generated as: - - Authorization: Signature keyId="rsa-key-1",algorithm="rsa-sha256",signature="Base64(RSA-SHA256(signing string))" - -The client would compose the signing string as: - - date: Tue, 07 Jun 2011 20:51:35 GMT - -## Header List - -The authorization header and signature would be generated as: - - Authorization: Signature keyId="rsa-key-1",algorithm="rsa-sha256",headers="request-line date content-type content-md5",signature="Base64(RSA-SHA256(signing string))" - -The client would compose the signing string as (`+ "\n"` inserted for -readability): - - POST /foo HTTP/1.1 + "\n" - date: Tue, 07 Jun 2011 20:51:35 GMT + "\n" - content-type: application/json + "\n" - content-md5: h0auK8hnYJKmHTLhKtMTkQ== - -## Algorithm - -The authorization header and signature would be generated as: - - Authorization: Signature keyId="hmac-key-1",algorithm="hmac-sha1",signature="Base64(HMAC-SHA1(signing string))" - -The client would compose the signing string as: - - date: Tue, 07 Jun 2011 20:51:35 GMT - -# Signing Algorithms - -Currently supported algorithm names are: - -* rsa-sha1 -* rsa-sha256 -* rsa-sha512 -* dsa-sha1 -* hmac-sha1 -* hmac-sha256 -* hmac-sha512 - -# Security Considerations - -## Default Parameters - -Note the default parameterization of the `Signature` scheme is only safe if all -requests are carried over a secure transport (i.e., TLS). Sending the default -scheme over a non-secure transport will leave the request vulnerable to -spoofing, tampering, replay/repudiaton, and integrity violations (if using the -STRIDE threat-modeling methodology). - -## Insecure Transports - -If sending the request over plain HTTP, service providers SHOULD require clients -to sign ALL HTTP headers, and the `request-line`. Additionally, service -providers SHOULD require `Content-MD5` calculations to be performed to ensure -against any tampering from clients. - -## Nonces - -Nonces are out of scope for this document simply because many service providers -fail to implement them correctly, or do not adopt security specfiications -because of the infrastructure complexity. Given the `header` parameterization, -a service provider is fully enabled to add nonce semantics into this scheme by -using something like an `x-request-nonce` header, and ensuring it is signed -with the `Date` header. - -## Clock Skew - -As the default scheme is to sign the `Date` header, service providers SHOULD -protect against logged replay attacks by enforcing a clock skew. The server -SHOULD be synchronized with NTP, and the recommendation in this specification -is to allow 300s of clock skew (in either direction). - -## Required Headers to Sign - -It is out of scope for this document to dictate what headers a service provider -will want to enforce, but service providers SHOULD at minimum include the -`Date` header. - -# References - -## Normative References - -* [RFC2616] Hypertext Transfer Protocol -- HTTP/1.1 -* [RFC2617] HTTP Authentication: Basic and Digest Access Authentication -* [RFC5246] The Transport Layer Security (TLS) Protocol Version 1.2 - -## Informative References - - Name: Mark Cavage (editor) - Company: Joyent, Inc. - Email: mark.cavage@joyent.com - URI: http://www.joyent.com - -# Appendix A - Test Values - -The following test data uses the RSA (2048b) keys, which we will refer -to as `keyId=Test` in the following samples: - - -----BEGIN PUBLIC KEY----- - MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3 - 6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6 - Z4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw - oYi+1hqp1fIekaxsyQIDAQAB - -----END PUBLIC KEY----- - - -----BEGIN RSA PRIVATE KEY----- - MIICXgIBAAKBgQDCFENGw33yGihy92pDjZQhl0C36rPJj+CvfSC8+q28hxA161QF - NUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6Z4UMR7EOcpfdUE9Hf3m/hs+F - UR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJwoYi+1hqp1fIekaxsyQIDAQAB - AoGBAJR8ZkCUvx5kzv+utdl7T5MnordT1TvoXXJGXK7ZZ+UuvMNUCdN2QPc4sBiA - QWvLw1cSKt5DsKZ8UETpYPy8pPYnnDEz2dDYiaew9+xEpubyeW2oH4Zx71wqBtOK - kqwrXa/pzdpiucRRjk6vE6YY7EBBs/g7uanVpGibOVAEsqH1AkEA7DkjVH28WDUg - f1nqvfn2Kj6CT7nIcE3jGJsZZ7zlZmBmHFDONMLUrXR/Zm3pR5m0tCmBqa5RK95u - 412jt1dPIwJBANJT3v8pnkth48bQo/fKel6uEYyboRtA5/uHuHkZ6FQF7OUkGogc - mSJluOdc5t6hI1VsLn0QZEjQZMEOWr+wKSMCQQCC4kXJEsHAve77oP6HtG/IiEn7 - kpyUXRNvFsDE0czpJJBvL/aRFUJxuRK91jhjC68sA7NsKMGg5OXb5I5Jj36xAkEA - gIT7aFOYBFwGgQAQkWNKLvySgKbAZRTeLBacpHMuQdl1DfdntvAyqpAZ0lY0RKmW - G6aFKaqQfOXKCyWoUiVknQJAXrlgySFci/2ueKlIE1QqIiLSZ8V8OlpFLRnb1pzI - 7U1yQXnTAEFYM560yJlzUpOb1V4cScGd365tiSMvxLOvTA== - -----END RSA PRIVATE KEY----- - -And all examples use this request: - - POST /foo?param=value&pet=dog HTTP/1.1 - Host: example.com - Date: Thu, 05 Jan 2012 21:31:40 GMT - Content-Type: application/json - Content-MD5: Sd/dVLAcvNLSq16eXua5uQ== - Content-Length: 18 - - {"hello": "world"} - -### Default - -The string to sign would be: - - date: Thu, 05 Jan 2012 21:31:40 GMT - -The Authorization header would be: - - Authorization: Signature keyId="Test",algorithm="rsa-sha256",signature="JldXnt8W9t643M2Sce10gqCh/+E7QIYLiI+bSjnFBGCti7s+mPPvOjVb72sbd1FjeOUwPTDpKbrQQORrm+xBYfAwCxF3LBSSzORvyJ5nRFCFxfJ3nlQD6Kdxhw8wrVZX5nSem4A/W3C8qH5uhFTRwF4ruRjh+ENHWuovPgO/HGQ=" - -### All Headers - -Parameterized to include all headers, the string to sign would be (`+ "\n"` -inserted for readability): - - POST /foo?param=value&pet=dog HTTP/1.1 + "\n" - host: example.com + "\n" - date: Thu, 05 Jan 2012 21:31:40 GMT + "\n" - content-type: application/json + "\n" - content-md5: Sd/dVLAcvNLSq16eXua5uQ== + "\n" - content-length: 18 - -The Authorization header would be: - - Authorization: Signature keyId="Test",algorithm="rsa-sha256",headers="request-line host date content-type content-md5 content-length",signature="Gm7W/r+e90REDpWytALMrft4MqZxCmslOTOvwJX17ViEBA5E65QqvWI0vIH3l/vSsGiaMVmuUgzYsJLYMLcm5dGrv1+a+0fCoUdVKPZWHyImQEqpLkopVwqEH67LVECFBqFTAKlQgBn676zrfXQbb+b/VebAsNUtvQMe6cTjnDY=" - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/index.js deleted file mode 100644 index 3ac70b77..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/index.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2011 Joyent, Inc. All rights reserved. - -var parser = require('./parser'); -var signer = require('./signer'); -var verify = require('./verify'); -var util = require('./util'); - - - -///--- API - -module.exports = { - - parse: parser.parseRequest, - parseRequest: parser.parseRequest, - - sign: signer.signRequest, - signRequest: signer.signRequest, - - sshKeyToPEM: util.sshKeyToPEM, - sshKeyFingerprint: util.fingerprint, - - verify: verify.verifySignature, - verifySignature: verify.verifySignature -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/parser.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/parser.js deleted file mode 100644 index fd9ac102..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/parser.js +++ /dev/null @@ -1,304 +0,0 @@ -// Copyright 2012 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var util = require('util'); - - - -///--- Globals - -var Algorithms = { - 'rsa-sha1': true, - 'rsa-sha256': true, - 'rsa-sha512': true, - 'dsa-sha1': true, - 'hmac-sha1': true, - 'hmac-sha256': true, - 'hmac-sha512': true -}; - -var State = { - New: 0, - Params: 1 -}; - -var ParamsState = { - Name: 0, - Quote: 1, - Value: 2, - Comma: 3 -}; - - - -///--- Specific Errors - -function HttpSignatureError(message, caller) { - if (Error.captureStackTrace) - Error.captureStackTrace(this, caller || HttpSignatureError); - - this.message = message; - this.name = caller.name; -} -util.inherits(HttpSignatureError, Error); - -function ExpiredRequestError(message) { - HttpSignatureError.call(this, message, ExpiredRequestError); -} -util.inherits(ExpiredRequestError, HttpSignatureError); - - -function InvalidHeaderError(message) { - HttpSignatureError.call(this, message, InvalidHeaderError); -} -util.inherits(InvalidHeaderError, HttpSignatureError); - - -function InvalidParamsError(message) { - HttpSignatureError.call(this, message, InvalidParamsError); -} -util.inherits(InvalidParamsError, HttpSignatureError); - - -function MissingHeaderError(message) { - HttpSignatureError.call(this, message, MissingHeaderError); -} -util.inherits(MissingHeaderError, HttpSignatureError); - - - -///--- Exported API - -module.exports = { - - /** - * Parses the 'Authorization' header out of an http.ServerRequest object. - * - * Note that this API will fully validate the Authorization header, and throw - * on any error. It will not however check the signature, or the keyId format - * as those are specific to your environment. You can use the options object - * to pass in extra constraints. - * - * As a response object you can expect this: - * - * { - * "scheme": "Signature", - * "params": { - * "keyId": "foo", - * "algorithm": "rsa-sha256", - * "headers": [ - * "date" or "x-date", - * "content-md5" - * ], - * "signature": "base64" - * }, - * "signingString": "ready to be passed to crypto.verify()" - * } - * - * @param {Object} request an http.ServerRequest. - * @param {Object} options an optional options object with: - * - clockSkew: allowed clock skew in seconds (default 300). - * - headers: required header names (def: date or x-date) - * - algorithms: algorithms to support (default: all). - * @return {Object} parsed out object (see above). - * @throws {TypeError} on invalid input. - * @throws {InvalidHeaderError} on an invalid Authorization header error. - * @throws {InvalidParamsError} if the params in the scheme are invalid. - * @throws {MissingHeaderError} if the params indicate a header not present, - * either in the request headers from the params, - * or not in the params from a required header - * in options. - * @throws {ExpiredRequestError} if the value of date or x-date exceeds skew. - */ - parseRequest: function parseRequest(request, options) { - assert.object(request, 'request'); - assert.object(request.headers, 'request.headers'); - if (options === undefined) { - options = {}; - } - if (options.headers === undefined) { - options.headers = [request.headers['x-date'] ? 'x-date' : 'date']; - } - assert.object(options, 'options'); - assert.arrayOfString(options.headers, 'options.headers'); - assert.optionalNumber(options.clockSkew, 'options.clockSkew'); - - if (!request.headers.authorization) - throw new MissingHeaderError('no authorization header present in ' + - 'the request'); - - options.clockSkew = options.clockSkew || 300; - - - var i = 0; - var state = State.New; - var substate = ParamsState.Name; - var tmpName = ''; - var tmpValue = ''; - - var parsed = { - scheme: '', - params: {}, - signingString: '', - - get algorithm() { - return this.params.algorithm.toUpperCase(); - }, - - get keyId() { - return this.params.keyId; - } - - }; - - var authz = request.headers.authorization; - for (i = 0; i < authz.length; i++) { - var c = authz.charAt(i); - - switch (Number(state)) { - - case State.New: - if (c !== ' ') parsed.scheme += c; - else state = State.Params; - break; - - case State.Params: - switch (Number(substate)) { - - case ParamsState.Name: - var code = c.charCodeAt(0); - // restricted name of A-Z / a-z - if ((code >= 0x41 && code <= 0x5a) || // A-Z - (code >= 0x61 && code <= 0x7a)) { // a-z - tmpName += c; - } else if (c === '=') { - if (tmpName.length === 0) - throw new InvalidHeaderError('bad param format'); - substate = ParamsState.Quote; - } else { - throw new InvalidHeaderError('bad param format'); - } - break; - - case ParamsState.Quote: - if (c === '"') { - tmpValue = ''; - substate = ParamsState.Value; - } else { - throw new InvalidHeaderError('bad param format'); - } - break; - - case ParamsState.Value: - if (c === '"') { - parsed.params[tmpName] = tmpValue; - substate = ParamsState.Comma; - } else { - tmpValue += c; - } - break; - - case ParamsState.Comma: - if (c === ',') { - tmpName = ''; - substate = ParamsState.Name; - } else { - throw new InvalidHeaderError('bad param format'); - } - break; - - default: - throw new Error('Invalid substate'); - } - break; - - default: - throw new Error('Invalid substate'); - } - - } - - if (!parsed.params.headers || parsed.params.headers === '') { - if (request.headers['x-date']) { - parsed.params.headers = ['x-date']; - } else { - parsed.params.headers = ['date']; - } - } else { - parsed.params.headers = parsed.params.headers.split(' '); - } - - // Minimally validate the parsed object - if (!parsed.scheme || parsed.scheme !== 'Signature') - throw new InvalidHeaderError('scheme was not "Signature"'); - - if (!parsed.params.keyId) - throw new InvalidHeaderError('keyId was not specified'); - - if (!parsed.params.algorithm) - throw new InvalidHeaderError('algorithm was not specified'); - - if (!parsed.params.signature) - throw new InvalidHeaderError('signature was not specified'); - - // Check the algorithm against the official list - parsed.params.algorithm = parsed.params.algorithm.toLowerCase(); - if (!Algorithms[parsed.params.algorithm]) - throw new InvalidParamsError(parsed.params.algorithm + - ' is not supported'); - - // Build the signingString - for (i = 0; i < parsed.params.headers.length; i++) { - var h = parsed.params.headers[i].toLowerCase(); - parsed.params.headers[i] = h; - - if (h !== 'request-line') { - var value = request.headers[h]; - if (!value) - throw new MissingHeaderError(h + ' was not in the request'); - parsed.signingString += h + ': ' + value; - } else { - parsed.signingString += - request.method + ' ' + request.url + ' HTTP/' + request.httpVersion; - } - - if ((i + 1) < parsed.params.headers.length) - parsed.signingString += '\n'; - } - - // Check against the constraints - var date; - if (request.headers.date || request.headers['x-date']) { - if (request.headers['x-date']) { - date = new Date(request.headers['x-date']); - } else { - date = new Date(request.headers.date); - } - var now = new Date(); - var skew = Math.abs(now.getTime() - date.getTime()); - - if (skew > options.clockSkew * 1000) { - throw new ExpiredRequestError('clock skew of ' + - (skew / 1000) + - 's was greater than ' + - options.clockSkew + 's'); - } - } - - options.headers.forEach(function (hdr) { - // Remember that we already checked any headers in the params - // were in the request, so if this passes we're good. - if (parsed.params.headers.indexOf(hdr) < 0) - throw new MissingHeaderError(hdr + ' was not a signed header'); - }); - - if (options.algorithms) { - if (options.algorithms.indexOf(parsed.params.algorithm) === -1) - throw new InvalidParamsError(parsed.params.algorithm + - ' is not a supported algorithm'); - } - - return parsed; - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/signer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/signer.js deleted file mode 100644 index 8095f0d1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/signer.js +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2012 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var crypto = require('crypto'); -var http = require('http'); - -var sprintf = require('util').format; - - - -///--- Globals - -var Algorithms = { - 'rsa-sha1': true, - 'rsa-sha256': true, - 'rsa-sha512': true, - 'dsa-sha1': true, - 'hmac-sha1': true, - 'hmac-sha256': true, - 'hmac-sha512': true -}; - -var Authorization = - 'Signature keyId="%s",algorithm="%s",headers="%s",signature="%s"'; - - - -///--- Specific Errors - -function MissingHeaderError(message) { - this.name = 'MissingHeaderError'; - this.message = message; - this.stack = (new Error()).stack; -} -MissingHeaderError.prototype = new Error(); - - -function InvalidAlgorithmError(message) { - this.name = 'InvalidAlgorithmError'; - this.message = message; - this.stack = (new Error()).stack; -} -InvalidAlgorithmError.prototype = new Error(); - - - -///--- Internal Functions - -function _pad(val) { - if (parseInt(val, 10) < 10) { - val = '0' + val; - } - return val; -} - - -function _rfc1123() { - var date = new Date(); - - var months = ['Jan', - 'Feb', - 'Mar', - 'Apr', - 'May', - 'Jun', - 'Jul', - 'Aug', - 'Sep', - 'Oct', - 'Nov', - 'Dec']; - var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; - return days[date.getUTCDay()] + ', ' + - _pad(date.getUTCDate()) + ' ' + - months[date.getUTCMonth()] + ' ' + - date.getUTCFullYear() + ' ' + - _pad(date.getUTCHours()) + ':' + - _pad(date.getUTCMinutes()) + ':' + - _pad(date.getUTCSeconds()) + - ' GMT'; -} - - - -///--- Exported API - -module.exports = { - - /** - * Adds an 'Authorization' header to an http.ClientRequest object. - * - * Note that this API will add a Date header if it's not already set. Any - * other headers in the options.headers array MUST be present, or this - * will throw. - * - * You shouldn't need to check the return type; it's just there if you want - * to be pedantic. - * - * @param {Object} request an instance of http.ClientRequest. - * @param {Object} options signing parameters object: - * - {String} keyId required. - * - {String} key required (either a PEM or HMAC key). - * - {Array} headers optional; defaults to ['date']. - * - {String} algorithm optional; defaults to 'rsa-sha256'. - * - {String} httpVersion optional; defaults to '1.1'. - * @return {Boolean} true if Authorization (and optionally Date) were added. - * @throws {TypeError} on bad parameter types (input). - * @throws {InvalidAlgorithmError} if algorithm was bad. - * @throws {MissingHeaderError} if a header to be signed was specified but - * was not present. - */ - signRequest: function signRequest(request, options) { - assert.object(request, 'request'); - assert.object(options, 'options'); - assert.optionalString(options.algorithm, 'options.algorithm'); - assert.string(options.keyId, 'options.keyId'); - assert.optionalArrayOfString(options.headers, 'options.headers'); - assert.optionalString(options.httpVersion, 'options.httpVersion'); - - if (!request.getHeader('Date')) - request.setHeader('Date', _rfc1123()); - if (!options.headers) - options.headers = ['date']; - if (!options.algorithm) - options.algorithm = 'rsa-sha256'; - if (!options.httpVersion) - options.httpVersion = '1.1'; - - options.algorithm = options.algorithm.toLowerCase(); - - if (!Algorithms[options.algorithm]) - throw new InvalidAlgorithmError(options.algorithm + ' is not supported'); - - var i; - var stringToSign = ''; - for (i = 0; i < options.headers.length; i++) { - if (typeof (options.headers[i]) !== 'string') - throw new TypeError('options.headers must be an array of Strings'); - - var h = options.headers[i].toLowerCase(); - - if (h !== 'request-line') { - var value = request.getHeader(h); - if (!value) { - throw new MissingHeaderError(h + ' was not in the request'); - } - stringToSign += h + ': ' + value; - } else { - value = - stringToSign += - request.method + ' ' + request.path + ' HTTP/' + options.httpVersion; - } - - if ((i + 1) < options.headers.length) - stringToSign += '\n'; - } - - var alg = options.algorithm.match(/(hmac|rsa)-(\w+)/); - var signature; - if (alg[1] === 'hmac') { - var hmac = crypto.createHmac(alg[2].toUpperCase(), options.key); - hmac.update(stringToSign); - signature = hmac.digest('base64'); - } else { - var signer = crypto.createSign(options.algorithm.toUpperCase()); - signer.update(stringToSign); - signature = signer.sign(options.key, 'base64'); - } - - request.setHeader('Authorization', sprintf(Authorization, - options.keyId, - options.algorithm, - options.headers.join(' '), - signature)); - - return true; - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/util.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/util.js deleted file mode 100644 index 30bbf045..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/util.js +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright 2012 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var crypto = require('crypto'); - -var asn1 = require('asn1'); -var ctype = require('ctype'); - - - -///--- Helpers - -function readNext(buffer, offset) { - var len = ctype.ruint32(buffer, 'big', offset); - offset += 4; - - var newOffset = offset + len; - - return { - data: buffer.slice(offset, newOffset), - offset: newOffset - }; -} - - -function writeInt(writer, buffer) { - writer.writeByte(0x02); // ASN1.Integer - writer.writeLength(buffer.length); - - for (var i = 0; i < buffer.length; i++) - writer.writeByte(buffer[i]); - - return writer; -} - - -function rsaToPEM(key) { - var buffer; - var der; - var exponent; - var i; - var modulus; - var newKey = ''; - var offset = 0; - var type; - var tmp; - - try { - buffer = new Buffer(key.split(' ')[1], 'base64'); - - tmp = readNext(buffer, offset); - type = tmp.data.toString(); - offset = tmp.offset; - - if (type !== 'ssh-rsa') - throw new Error('Invalid ssh key type: ' + type); - - tmp = readNext(buffer, offset); - exponent = tmp.data; - offset = tmp.offset; - - tmp = readNext(buffer, offset); - modulus = tmp.data; - } catch (e) { - throw new Error('Invalid ssh key: ' + key); - } - - // DER is a subset of BER - der = new asn1.BerWriter(); - - der.startSequence(); - - der.startSequence(); - der.writeOID('1.2.840.113549.1.1.1'); - der.writeNull(); - der.endSequence(); - - der.startSequence(0x03); // bit string - der.writeByte(0x00); - - // Actual key - der.startSequence(); - writeInt(der, modulus); - writeInt(der, exponent); - der.endSequence(); - - // bit string - der.endSequence(); - - der.endSequence(); - - tmp = der.buffer.toString('base64'); - for (i = 0; i < tmp.length; i++) { - if ((i % 64) === 0) - newKey += '\n'; - newKey += tmp.charAt(i); - } - - if (!/\\n$/.test(newKey)) - newKey += '\n'; - - return '-----BEGIN PUBLIC KEY-----' + newKey + '-----END PUBLIC KEY-----\n'; -} - - -function dsaToPEM(key) { - var buffer; - var offset = 0; - var tmp; - var der; - var newKey = ''; - - var type; - var p; - var q; - var g; - var y; - - try { - buffer = new Buffer(key.split(' ')[1], 'base64'); - - tmp = readNext(buffer, offset); - type = tmp.data.toString(); - offset = tmp.offset; - - /* JSSTYLED */ - if (!/^ssh-ds[as].*/.test(type)) - throw new Error('Invalid ssh key type: ' + type); - - tmp = readNext(buffer, offset); - p = tmp.data; - offset = tmp.offset; - - tmp = readNext(buffer, offset); - q = tmp.data; - offset = tmp.offset; - - tmp = readNext(buffer, offset); - g = tmp.data; - offset = tmp.offset; - - tmp = readNext(buffer, offset); - y = tmp.data; - } catch (e) { - console.log(e.stack); - throw new Error('Invalid ssh key: ' + key); - } - - // DER is a subset of BER - der = new asn1.BerWriter(); - - der.startSequence(); - - der.startSequence(); - der.writeOID('1.2.840.10040.4.1'); - - der.startSequence(); - writeInt(der, p); - writeInt(der, q); - writeInt(der, g); - der.endSequence(); - - der.endSequence(); - - der.startSequence(0x03); // bit string - der.writeByte(0x00); - writeInt(der, y); - der.endSequence(); - - der.endSequence(); - - tmp = der.buffer.toString('base64'); - for (var i = 0; i < tmp.length; i++) { - if ((i % 64) === 0) - newKey += '\n'; - newKey += tmp.charAt(i); - } - - if (!/\\n$/.test(newKey)) - newKey += '\n'; - - return '-----BEGIN PUBLIC KEY-----' + newKey + '-----END PUBLIC KEY-----\n'; -} - - -///--- API - -module.exports = { - - /** - * Converts an OpenSSH public key (rsa only) to a PKCS#8 PEM file. - * - * The intent of this module is to interoperate with OpenSSL only, - * specifically the node crypto module's `verify` method. - * - * @param {String} key an OpenSSH public key. - * @return {String} PEM encoded form of the RSA public key. - * @throws {TypeError} on bad input. - * @throws {Error} on invalid ssh key formatted data. - */ - sshKeyToPEM: function sshKeyToPEM(key) { - assert.string(key, 'ssh_key'); - - /* JSSTYLED */ - if (/^ssh-rsa.*/.test(key)) - return rsaToPEM(key); - - /* JSSTYLED */ - if (/^ssh-ds[as].*/.test(key)) - return dsaToPEM(key); - - throw new Error('Only RSA and DSA public keys are allowed'); - }, - - - /** - * Generates an OpenSSH fingerprint from an ssh public key. - * - * @param {String} key an OpenSSH public key. - * @return {String} key fingerprint. - * @throws {TypeError} on bad input. - * @throws {Error} if what you passed doesn't look like an ssh public key. - */ - fingerprint: function fingerprint(key) { - assert.string(key, 'ssh_key'); - - var pieces = key.split(' '); - if (!pieces || !pieces.length || pieces.length < 2) - throw new Error('invalid ssh key'); - - var data = new Buffer(pieces[1], 'base64'); - - var hash = crypto.createHash('md5'); - hash.update(data); - var digest = hash.digest('hex'); - - var fp = ''; - for (var i = 0; i < digest.length; i++) { - if (i && i % 2 === 0) - fp += ':'; - - fp += digest[i]; - } - - return fp; - } - - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/verify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/verify.js deleted file mode 100644 index 5bf95896..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/lib/verify.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2011 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var crypto = require('crypto'); - - - -///--- Exported API - -module.exports = { - - /** - * Simply wraps up the node crypto operations for you, and returns - * true or false. You are expected to pass in an object that was - * returned from `parse()`. - * - * @param {Object} parsedSignature the object you got from `parse`. - * @param {String} key either an RSA private key PEM or HMAC secret. - * @return {Boolean} true if valid, false otherwise. - * @throws {TypeError} if you pass in bad arguments. - */ - verifySignature: function verifySignature(parsedSignature, key) { - assert.object(parsedSignature, 'parsedSignature'); - assert.string(key, 'key'); - - var alg = parsedSignature.algorithm.match(/(HMAC|RSA|DSA)-(\w+)/); - if (!alg || alg.length !== 3) - throw new TypeError('parsedSignature: unsupported algorithm ' + - parsedSignature.algorithm); - - if (alg[1] === 'HMAC') { - var hmac = crypto.createHmac(alg[2].toUpperCase(), key); - hmac.update(parsedSignature.signingString); - return (hmac.digest('base64') === parsedSignature.params.signature); - } else { - var verify = crypto.createVerify(alg[0]); - verify.update(parsedSignature.signingString); - return verify.verify(key, parsedSignature.params.signature, 'base64'); - } - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore deleted file mode 100644 index eb03e3e1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -*.log diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE deleted file mode 100644 index 9b5dcdb7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Mark Cavage, 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md deleted file mode 100644 index 7cebf7a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md +++ /dev/null @@ -1,50 +0,0 @@ -node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS. -Currently BER encoding is supported; at some point I'll likely have to do DER. - -## Usage - -Mostly, if you're *actually* needing to read and write ASN.1, you probably don't -need this readme to explain what and why. If you have no idea what ASN.1 is, -see this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc - -The source is pretty much self-explanatory, and has read/write methods for the -common types out there. - -### Decoding - -The following reads an ASN.1 sequence with a boolean. - - var Ber = require('asn1').Ber; - - var reader = new Ber.Reader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff])); - - reader.readSequence(); - console.log('Sequence len: ' + reader.length); - if (reader.peek() === Ber.Boolean) - console.log(reader.readBoolean()); - -### Encoding - -The following generates the same payload as above. - - var Ber = require('asn1').Ber; - - var writer = new Ber.Writer(); - - writer.startSequence(); - writer.writeBoolean(true); - writer.endSequence(); - - console.log(writer.buffer); - -## Installation - - npm install asn1 - -## License - -MIT. - -## Bugs - -See <https://github.com/mcavage/node-asn1/issues>. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js deleted file mode 100644 index ff21d4fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - - -module.exports = { - - newInvalidAsn1Error: function(msg) { - var e = new Error(); - e.name = 'InvalidAsn1Error'; - e.message = msg || ''; - return e; - } - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js deleted file mode 100644 index 4fb90aea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var errors = require('./errors'); -var types = require('./types'); - -var Reader = require('./reader'); -var Writer = require('./writer'); - - -///--- Exports - -module.exports = { - - Reader: Reader, - - Writer: Writer - -}; - -for (var t in types) { - if (types.hasOwnProperty(t)) - module.exports[t] = types[t]; -} -for (var e in errors) { - if (errors.hasOwnProperty(e)) - module.exports[e] = errors[e]; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js deleted file mode 100644 index bd3357a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var assert = require('assert'); - -var ASN1 = require('./types'); -var errors = require('./errors'); - - -///--- Globals - -var newInvalidAsn1Error = errors.newInvalidAsn1Error; - - - -///--- API - -function Reader(data) { - if (!data || !Buffer.isBuffer(data)) - throw new TypeError('data must be a node Buffer'); - - this._buf = data; - this._size = data.length; - - // These hold the "current" state - this._len = 0; - this._offset = 0; - - var self = this; - this.__defineGetter__('length', function() { return self._len; }); - this.__defineGetter__('offset', function() { return self._offset; }); - this.__defineGetter__('remain', function() { - return self._size - self._offset; - }); - this.__defineGetter__('buffer', function() { - return self._buf.slice(self._offset); - }); -} - - -/** - * Reads a single byte and advances offset; you can pass in `true` to make this - * a "peek" operation (i.e., get the byte, but don't advance the offset). - * - * @param {Boolean} peek true means don't move offset. - * @return {Number} the next byte, null if not enough data. - */ -Reader.prototype.readByte = function(peek) { - if (this._size - this._offset < 1) - return null; - - var b = this._buf[this._offset] & 0xff; - - if (!peek) - this._offset += 1; - - return b; -}; - - -Reader.prototype.peek = function() { - return this.readByte(true); -}; - - -/** - * Reads a (potentially) variable length off the BER buffer. This call is - * not really meant to be called directly, as callers have to manipulate - * the internal buffer afterwards. - * - * As a result of this call, you can call `Reader.length`, until the - * next thing called that does a readLength. - * - * @return {Number} the amount of offset to advance the buffer. - * @throws {InvalidAsn1Error} on bad ASN.1 - */ -Reader.prototype.readLength = function(offset) { - if (offset === undefined) - offset = this._offset; - - if (offset >= this._size) - return null; - - var lenB = this._buf[offset++] & 0xff; - if (lenB === null) - return null; - - if ((lenB & 0x80) == 0x80) { - lenB &= 0x7f; - - if (lenB == 0) - throw newInvalidAsn1Error('Indefinite length not supported'); - - if (lenB > 4) - throw newInvalidAsn1Error('encoding too long'); - - if (this._size - offset < lenB) - return null; - - this._len = 0; - for (var i = 0; i < lenB; i++) - this._len = (this._len << 8) + (this._buf[offset++] & 0xff); - - } else { - // Wasn't a variable length - this._len = lenB; - } - - return offset; -}; - - -/** - * Parses the next sequence in this BER buffer. - * - * To get the length of the sequence, call `Reader.length`. - * - * @return {Number} the sequence's tag. - */ -Reader.prototype.readSequence = function(tag) { - var seq = this.peek(); - if (seq === null) - return null; - if (tag !== undefined && tag !== seq) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + seq.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - this._offset = o; - return seq; -}; - - -Reader.prototype.readInt = function() { - return this._readTag(ASN1.Integer); -}; - - -Reader.prototype.readBoolean = function() { - return (this._readTag(ASN1.Boolean) === 0 ? false : true); -}; - - -Reader.prototype.readEnumeration = function() { - return this._readTag(ASN1.Enumeration); -}; - - -Reader.prototype.readString = function(tag, retbuf) { - if (!tag) - tag = ASN1.OctetString; - - var b = this.peek(); - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - - if (o === null) - return null; - - if (this.length > this._size - o) - return null; - - this._offset = o; - - if (this.length === 0) - return ''; - - var str = this._buf.slice(this._offset, this._offset + this.length); - this._offset += this.length; - - return retbuf ? str : str.toString('utf8'); -}; - -Reader.prototype.readOID = function(tag) { - if (!tag) - tag = ASN1.OID; - - var b = this.peek(); - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - if (this.length > this._size - o) - return null; - - this._offset = o; - - var values = []; - var value = 0; - - for (var i = 0; i < this.length; i++) { - var byte = this._buf[this._offset++] & 0xff; - - value <<= 7; - value += byte & 0x7f; - if ((byte & 0x80) == 0) { - values.push(value); - value = 0; - } - } - - value = values.shift(); - values.unshift(value % 40); - values.unshift((value / 40) >> 0); - - return values.join('.'); -}; - - -Reader.prototype._readTag = function(tag) { - assert.ok(tag !== undefined); - - var b = this.peek(); - - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - if (this.length > 4) - throw newInvalidAsn1Error('Integer too long: ' + this.length); - - if (this.length > this._size - o) - return null; - this._offset = o; - - var fb = this._buf[this._offset++]; - var value = 0; - - value = fb & 0x7F; - for (var i = 1; i < this.length; i++) { - value <<= 8; - value |= (this._buf[this._offset++] & 0xff); - } - - if ((fb & 0x80) == 0x80) - value = -value; - - return value; -}; - - - -///--- Exported API - -module.exports = Reader; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js deleted file mode 100644 index 8aea0001..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - - -module.exports = { - EOC: 0, - Boolean: 1, - Integer: 2, - BitString: 3, - OctetString: 4, - Null: 5, - OID: 6, - ObjectDescriptor: 7, - External: 8, - Real: 9, // float - Enumeration: 10, - PDV: 11, - Utf8String: 12, - RelativeOID: 13, - Sequence: 16, - Set: 17, - NumericString: 18, - PrintableString: 19, - T61String: 20, - VideotexString: 21, - IA5String: 22, - UTCTime: 23, - GeneralizedTime: 24, - GraphicString: 25, - VisibleString: 26, - GeneralString: 28, - UniversalString: 29, - CharacterString: 30, - BMPString: 31, - Constructor: 32, - Context: 128 -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js deleted file mode 100644 index 7b445cc6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js +++ /dev/null @@ -1,317 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var assert = require('assert'); -var ASN1 = require('./types'); -var errors = require('./errors'); - - -///--- Globals - -var newInvalidAsn1Error = errors.newInvalidAsn1Error; - -var DEFAULT_OPTS = { - size: 1024, - growthFactor: 8 -}; - - -///--- Helpers - -function merge(from, to) { - assert.ok(from); - assert.equal(typeof(from), 'object'); - assert.ok(to); - assert.equal(typeof(to), 'object'); - - var keys = Object.getOwnPropertyNames(from); - keys.forEach(function(key) { - if (to[key]) - return; - - var value = Object.getOwnPropertyDescriptor(from, key); - Object.defineProperty(to, key, value); - }); - - return to; -} - - - -///--- API - -function Writer(options) { - options = merge(DEFAULT_OPTS, options || {}); - - this._buf = new Buffer(options.size || 1024); - this._size = this._buf.length; - this._offset = 0; - this._options = options; - - // A list of offsets in the buffer where we need to insert - // sequence tag/len pairs. - this._seq = []; - - var self = this; - this.__defineGetter__('buffer', function() { - if (self._seq.length) - throw new InvalidAsn1Error(self._seq.length + ' unended sequence(s)'); - - return self._buf.slice(0, self._offset); - }); -} - - -Writer.prototype.writeByte = function(b) { - if (typeof(b) !== 'number') - throw new TypeError('argument must be a Number'); - - this._ensure(1); - this._buf[this._offset++] = b; -}; - - -Writer.prototype.writeInt = function(i, tag) { - if (typeof(i) !== 'number') - throw new TypeError('argument must be a Number'); - if (typeof(tag) !== 'number') - tag = ASN1.Integer; - - var sz = 4; - - while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000)) && - (sz > 1)) { - sz--; - i <<= 8; - } - - if (sz > 4) - throw new InvalidAsn1Error('BER ints cannot be > 0xffffffff'); - - this._ensure(2 + sz); - this._buf[this._offset++] = tag; - this._buf[this._offset++] = sz; - - while (sz-- > 0) { - this._buf[this._offset++] = ((i & 0xff000000) >> 24); - i <<= 8; - } - -}; - - -Writer.prototype.writeNull = function() { - this.writeByte(ASN1.Null); - this.writeByte(0x00); -}; - - -Writer.prototype.writeEnumeration = function(i, tag) { - if (typeof(i) !== 'number') - throw new TypeError('argument must be a Number'); - if (typeof(tag) !== 'number') - tag = ASN1.Enumeration; - - return this.writeInt(i, tag); -}; - - -Writer.prototype.writeBoolean = function(b, tag) { - if (typeof(b) !== 'boolean') - throw new TypeError('argument must be a Boolean'); - if (typeof(tag) !== 'number') - tag = ASN1.Boolean; - - this._ensure(3); - this._buf[this._offset++] = tag; - this._buf[this._offset++] = 0x01; - this._buf[this._offset++] = b ? 0xff : 0x00; -}; - - -Writer.prototype.writeString = function(s, tag) { - if (typeof(s) !== 'string') - throw new TypeError('argument must be a string (was: ' + typeof(s) + ')'); - if (typeof(tag) !== 'number') - tag = ASN1.OctetString; - - var len = Buffer.byteLength(s); - this.writeByte(tag); - this.writeLength(len); - if (len) { - this._ensure(len); - this._buf.write(s, this._offset); - this._offset += len; - } -}; - - -Writer.prototype.writeBuffer = function(buf, tag) { - if (typeof(tag) !== 'number') - throw new TypeError('tag must be a number'); - if (!Buffer.isBuffer(buf)) - throw new TypeError('argument must be a buffer'); - - this.writeByte(tag); - this.writeLength(buf.length); - this._ensure(buf.length); - buf.copy(this._buf, this._offset, 0, buf.length); - this._offset += buf.length; -}; - - -Writer.prototype.writeStringArray = function(strings) { - if ((!strings instanceof Array)) - throw new TypeError('argument must be an Array[String]'); - - var self = this; - strings.forEach(function(s) { - self.writeString(s); - }); -}; - -// This is really to solve DER cases, but whatever for now -Writer.prototype.writeOID = function(s, tag) { - if (typeof(s) !== 'string') - throw new TypeError('argument must be a string'); - if (typeof(tag) !== 'number') - tag = ASN1.OID; - - if (!/^([0-9]+\.){3,}[0-9]+$/.test(s)) - throw new Error('argument is not a valid OID string'); - - function encodeOctet(bytes, octet) { - if (octet < 128) { - bytes.push(octet); - } else if (octet < 16384) { - bytes.push((octet >>> 7) | 0x80); - bytes.push(octet & 0x7F); - } else if (octet < 2097152) { - bytes.push((octet >>> 14) | 0x80); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } else if (octet < 268435456) { - bytes.push((octet >>> 21) | 0x80); - bytes.push(((octet >>> 14) | 0x80) & 0xFF); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } else { - bytes.push(((octet >>> 28) | 0x80) & 0xFF); - bytes.push(((octet >>> 21) | 0x80) & 0xFF); - bytes.push(((octet >>> 14) | 0x80) & 0xFF); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } - } - - var tmp = s.split('.'); - var bytes = []; - bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10)); - tmp.slice(2).forEach(function(b) { - encodeOctet(bytes, parseInt(b, 10)); - }); - - var self = this; - this._ensure(2 + bytes.length); - this.writeByte(tag); - this.writeLength(bytes.length); - bytes.forEach(function(b) { - self.writeByte(b); - }); -}; - - -Writer.prototype.writeLength = function(len) { - if (typeof(len) !== 'number') - throw new TypeError('argument must be a Number'); - - this._ensure(4); - - if (len <= 0x7f) { - this._buf[this._offset++] = len; - } else if (len <= 0xff) { - this._buf[this._offset++] = 0x81; - this._buf[this._offset++] = len; - } else if (len <= 0xffff) { - this._buf[this._offset++] = 0x82; - this._buf[this._offset++] = len >> 8; - this._buf[this._offset++] = len; - } else if (len <= 0xffffff) { - this._shift(start, len, 1); - this._buf[this._offset++] = 0x83; - this._buf[this._offset++] = len >> 16; - this._buf[this._offset++] = len >> 8; - this._buf[this._offset++] = len; - } else { - throw new InvalidAsn1ERror('Length too long (> 4 bytes)'); - } -}; - -Writer.prototype.startSequence = function(tag) { - if (typeof(tag) !== 'number') - tag = ASN1.Sequence | ASN1.Constructor; - - this.writeByte(tag); - this._seq.push(this._offset); - this._ensure(3); - this._offset += 3; -}; - - -Writer.prototype.endSequence = function() { - var seq = this._seq.pop(); - var start = seq + 3; - var len = this._offset - start; - - if (len <= 0x7f) { - this._shift(start, len, -2); - this._buf[seq] = len; - } else if (len <= 0xff) { - this._shift(start, len, -1); - this._buf[seq] = 0x81; - this._buf[seq + 1] = len; - } else if (len <= 0xffff) { - this._buf[seq] = 0x82; - this._buf[seq + 1] = len >> 8; - this._buf[seq + 2] = len; - } else if (len <= 0xffffff) { - this._shift(start, len, 1); - this._buf[seq] = 0x83; - this._buf[seq + 1] = len >> 16; - this._buf[seq + 2] = len >> 8; - this._buf[seq + 3] = len; - } else { - throw new InvalidAsn1Error('Sequence too long'); - } -}; - - -Writer.prototype._shift = function(start, len, shift) { - assert.ok(start !== undefined); - assert.ok(len !== undefined); - assert.ok(shift); - - this._buf.copy(this._buf, start + shift, start, start + len); - this._offset += shift; -}; - -Writer.prototype._ensure = function(len) { - assert.ok(len); - - if (this._size - this._offset < len) { - var sz = this._size * this._options.growthFactor; - if (sz - this._offset < len) - sz += len; - - var buf = new Buffer(sz); - - this._buf.copy(buf, 0, 0, this._offset); - this._buf = buf; - this._size = sz; - } -}; - - - -///--- Exported API - -module.exports = Writer; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js deleted file mode 100644 index d1766e7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -// If you have no idea what ASN.1 or BER is, see this: -// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc - -var Ber = require('./ber/index'); - - - -///--- Exported API - -module.exports = { - - Ber: Ber, - - BerReader: Ber.Reader, - - BerWriter: Ber.Writer - -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json deleted file mode 100644 index 8fbee012..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "author": { - "name": "Mark Cavage", - "email": "mcavage@gmail.com" - }, - "contributors": [ - { - "name": "David Gwynne", - "email": "loki@animata.net" - }, - { - "name": "Yunong Xiao", - "email": "yunong@joyent.com" - } - ], - "name": "asn1", - "description": "Contains parsers and serializers for ASN.1 (currently BER only)", - "version": "0.1.11", - "repository": { - "type": "git", - "url": "git://github.com/mcavage/node-asn1.git" - }, - "main": "lib/index.js", - "engines": { - "node": ">=0.4.9" - }, - "dependencies": {}, - "devDependencies": { - "tap": "0.1.4" - }, - "scripts": { - "pretest": "which gjslint; if [[ \"$?\" = 0 ]] ; then gjslint --nojsdoc -r lib -r tst; else echo \"Missing gjslint. Skipping lint\"; fi", - "test": "tap ./tst" - }, - "readme": "node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS.\nCurrently BER encoding is supported; at some point I'll likely have to do DER.\n\n## Usage\n\nMostly, if you're *actually* needing to read and write ASN.1, you probably don't\nneed this readme to explain what and why. If you have no idea what ASN.1 is,\nsee this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc\n\nThe source is pretty much self-explanatory, and has read/write methods for the\ncommon types out there.\n\n### Decoding\n\nThe following reads an ASN.1 sequence with a boolean.\n\n var Ber = require('asn1').Ber;\n\n var reader = new Ber.Reader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff]));\n\n reader.readSequence();\n console.log('Sequence len: ' + reader.length);\n if (reader.peek() === Ber.Boolean)\n console.log(reader.readBoolean());\n\n### Encoding\n\nThe following generates the same payload as above.\n\n var Ber = require('asn1').Ber;\n\n var writer = new Ber.Writer();\n\n writer.startSequence();\n writer.writeBoolean(true);\n writer.endSequence();\n\n console.log(writer.buffer);\n\n## Installation\n\n npm install asn1\n\n## License\n\nMIT.\n\n## Bugs\n\nSee <https://github.com/mcavage/node-asn1/issues>.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mcavage/node-asn1/issues" - }, - "homepage": "https://github.com/mcavage/node-asn1", - "_id": "asn1@0.1.11", - "dist": { - "shasum": "6d27af76b17126a28e5250c7ce288790af7ab63c" - }, - "_from": "asn1@0.1.11", - "_resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js deleted file mode 100644 index 0b78b474..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var test = require('tap').test; - - - -///--- Globals - -var BerReader; - - - -///--- Tests - -test('load library', function(t) { - BerReader = require('../../lib/index').BerReader; - t.ok(BerReader); - try { - new BerReader(); - t.fail('Should have thrown'); - } catch (e) { - t.ok(e instanceof TypeError, 'Should have been a type error'); - } - t.end(); -}); - - -test('read byte', function(t) { - var reader = new BerReader(new Buffer([0xde])); - t.ok(reader); - t.equal(reader.readByte(), 0xde, 'wrong value'); - t.end(); -}); - - -test('read 1 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x01, 0x03])); - t.ok(reader); - t.equal(reader.readInt(), 0x03, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read 2 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x02, 0x7e, 0xde])); - t.ok(reader); - t.equal(reader.readInt(), 0x7ede, 'wrong value'); - t.equal(reader.length, 0x02, 'wrong length'); - t.end(); -}); - - -test('read 3 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x03, 0x7e, 0xde, 0x03])); - t.ok(reader); - t.equal(reader.readInt(), 0x7ede03, 'wrong value'); - t.equal(reader.length, 0x03, 'wrong length'); - t.end(); -}); - - -test('read 4 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x04, 0x7e, 0xde, 0x03, 0x01])); - t.ok(reader); - t.equal(reader.readInt(), 0x7ede0301, 'wrong value'); - t.equal(reader.length, 0x04, 'wrong length'); - t.end(); -}); - - -test('read boolean true', function(t) { - var reader = new BerReader(new Buffer([0x01, 0x01, 0xff])); - t.ok(reader); - t.equal(reader.readBoolean(), true, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read boolean false', function(t) { - var reader = new BerReader(new Buffer([0x01, 0x01, 0x00])); - t.ok(reader); - t.equal(reader.readBoolean(), false, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read enumeration', function(t) { - var reader = new BerReader(new Buffer([0x0a, 0x01, 0x20])); - t.ok(reader); - t.equal(reader.readEnumeration(), 0x20, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read string', function(t) { - var dn = 'cn=foo,ou=unit,o=test'; - var buf = new Buffer(dn.length + 2); - buf[0] = 0x04; - buf[1] = Buffer.byteLength(dn); - buf.write(dn, 2); - var reader = new BerReader(buf); - t.ok(reader); - t.equal(reader.readString(), dn, 'wrong value'); - t.equal(reader.length, dn.length, 'wrong length'); - t.end(); -}); - - -test('read sequence', function(t) { - var reader = new BerReader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff])); - t.ok(reader); - t.equal(reader.readSequence(), 0x30, 'wrong value'); - t.equal(reader.length, 0x03, 'wrong length'); - t.equal(reader.readBoolean(), true, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('anonymous LDAPv3 bind', function(t) { - var BIND = new Buffer(14); - BIND[0] = 0x30; // Sequence - BIND[1] = 12; // len - BIND[2] = 0x02; // ASN.1 Integer - BIND[3] = 1; // len - BIND[4] = 0x04; // msgid (make up 4) - BIND[5] = 0x60; // Bind Request - BIND[6] = 7; // len - BIND[7] = 0x02; // ASN.1 Integer - BIND[8] = 1; // len - BIND[9] = 0x03; // v3 - BIND[10] = 0x04; // String (bind dn) - BIND[11] = 0; // len - BIND[12] = 0x80; // ContextSpecific (choice) - BIND[13] = 0; // simple bind - - // Start testing ^^ - var ber = new BerReader(BIND); - t.equal(ber.readSequence(), 48, 'Not an ASN.1 Sequence'); - t.equal(ber.length, 12, 'Message length should be 12'); - t.equal(ber.readInt(), 4, 'Message id should have been 4'); - t.equal(ber.readSequence(), 96, 'Bind Request should have been 96'); - t.equal(ber.length, 7, 'Bind length should have been 7'); - t.equal(ber.readInt(), 3, 'LDAP version should have been 3'); - t.equal(ber.readString(), '', 'Bind DN should have been empty'); - t.equal(ber.length, 0, 'string length should have been 0'); - t.equal(ber.readByte(), 0x80, 'Should have been ContextSpecific (choice)'); - t.equal(ber.readByte(), 0, 'Should have been simple bind'); - t.equal(null, ber.readByte(), 'Should be out of data'); - t.end(); -}); - - -test('long string', function(t) { - var buf = new Buffer(256); - var o; - var s = - '2;649;CN=Red Hat CS 71GA Demo,O=Red Hat CS 71GA Demo,C=US;' + - 'CN=RHCS Agent - admin01,UID=admin01,O=redhat,C=US [1] This is ' + - 'Teena Vradmin\'s description.'; - buf[0] = 0x04; - buf[1] = 0x81; - buf[2] = 0x94; - buf.write(s, 3); - var ber = new BerReader(buf.slice(0, 3 + s.length)); - t.equal(ber.readString(), s); - t.end(); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js deleted file mode 100644 index add0b9fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js +++ /dev/null @@ -1,296 +0,0 @@ -// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved. - -var test = require('tap').test; -var sys = require('sys'); - -///--- Globals - -var BerWriter; - -var BerReader; - - -///--- Tests - -test('load library', function(t) { - BerWriter = require('../../lib/index').BerWriter; - t.ok(BerWriter); - t.ok(new BerWriter()); - t.end(); -}); - - -test('write byte', function(t) { - var writer = new BerWriter(); - - writer.writeByte(0xC2); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 1, 'Wrong length'); - t.equal(ber[0], 0xC2, 'value wrong'); - - t.end(); -}); - - -test('write 1 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7f); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 3, 'Wrong length for an int: ' + ber.length); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong (2) -> ' + ber[0]); - t.equal(ber[1], 0x01, 'length wrong(1) -> ' + ber[1]); - t.equal(ber[2], 0x7f, 'value wrong(3) -> ' + ber[2]); - - t.end(); -}); - - -test('write 2 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7ffe); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 4, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x02, 'length wrong'); - t.equal(ber[2], 0x7f, 'value wrong (byte 1)'); - t.equal(ber[3], 0xfe, 'value wrong (byte 2)'); - - t.end(); -}); - - -test('write 3 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7ffffe); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 5, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x03, 'length wrong'); - t.equal(ber[2], 0x7f, 'value wrong (byte 1)'); - t.equal(ber[3], 0xff, 'value wrong (byte 2)'); - t.equal(ber[4], 0xfe, 'value wrong (byte 3)'); - - t.end(); -}); - - -test('write 4 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7ffffffe); - var ber = writer.buffer; - - t.ok(ber); - - t.equal(ber.length, 6, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x04, 'length wrong'); - t.equal(ber[2], 0x7f, 'value wrong (byte 1)'); - t.equal(ber[3], 0xff, 'value wrong (byte 2)'); - t.equal(ber[4], 0xff, 'value wrong (byte 3)'); - t.equal(ber[5], 0xfe, 'value wrong (byte 4)'); - - t.end(); -}); - - -test('write boolean', function(t) { - var writer = new BerWriter(); - - writer.writeBoolean(true); - writer.writeBoolean(false); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 6, 'Wrong length'); - t.equal(ber[0], 0x01, 'tag wrong'); - t.equal(ber[1], 0x01, 'length wrong'); - t.equal(ber[2], 0xff, 'value wrong'); - t.equal(ber[3], 0x01, 'tag wrong'); - t.equal(ber[4], 0x01, 'length wrong'); - t.equal(ber[5], 0x00, 'value wrong'); - - t.end(); -}); - - -test('write string', function(t) { - var writer = new BerWriter(); - writer.writeString('hello world'); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 13, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - -test('write buffer', function(t) { - var writer = new BerWriter(); - // write some stuff to start with - writer.writeString('hello world'); - var ber = writer.buffer; - var buf = new Buffer([0x04, 0x0b, 0x30, 0x09, 0x02, 0x01, 0x0f, 0x01, 0x01, - 0xff, 0x01, 0x01, 0xff]); - writer.writeBuffer(buf.slice(2, buf.length), 0x04); - ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 26, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2, 13).toString('utf8'), 'hello world', 'wrong value'); - t.equal(ber[13], buf[0], 'wrong tag'); - t.equal(ber[14], buf[1], 'wrong length'); - for (var i = 13, j = 0; i < ber.length && j < buf.length; i++, j++) { - t.equal(ber[i], buf[j], 'buffer contents not identical'); - } - t.end(); -}); - -test('write string array', function(t) { - var writer = new BerWriter(); - writer.writeStringArray(['hello world', 'fubar!']); - var ber = writer.buffer; - - t.ok(ber); - - t.equal(ber.length, 21, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2, 13).toString('utf8'), 'hello world', 'wrong value'); - - t.equal(ber[13], 0x04, 'wrong tag'); - t.equal(ber[14], 6, 'wrong length'); - t.equal(ber.slice(15).toString('utf8'), 'fubar!', 'wrong value'); - - t.end(); -}); - - -test('resize internal buffer', function(t) { - var writer = new BerWriter({size: 2}); - writer.writeString('hello world'); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 13, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - - -test('sequence', function(t) { - var writer = new BerWriter({size: 25}); - writer.startSequence(); - writer.writeString('hello world'); - writer.endSequence(); - var ber = writer.buffer; - - t.ok(ber); - console.log(ber); - t.equal(ber.length, 15, 'wrong length'); - t.equal(ber[0], 0x30, 'wrong tag'); - t.equal(ber[1], 13, 'wrong length'); - t.equal(ber[2], 0x04, 'wrong tag'); - t.equal(ber[3], 11, 'wrong length'); - t.equal(ber.slice(4).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - - -test('nested sequence', function(t) { - var writer = new BerWriter({size: 25}); - writer.startSequence(); - writer.writeString('hello world'); - writer.startSequence(); - writer.writeString('hello world'); - writer.endSequence(); - writer.endSequence(); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 30, 'wrong length'); - t.equal(ber[0], 0x30, 'wrong tag'); - t.equal(ber[1], 28, 'wrong length'); - t.equal(ber[2], 0x04, 'wrong tag'); - t.equal(ber[3], 11, 'wrong length'); - t.equal(ber.slice(4, 15).toString('utf8'), 'hello world', 'wrong value'); - t.equal(ber[15], 0x30, 'wrong tag'); - t.equal(ber[16], 13, 'wrong length'); - t.equal(ber[17], 0x04, 'wrong tag'); - t.equal(ber[18], 11, 'wrong length'); - t.equal(ber.slice(19, 30).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - - -test('LDAP bind message', function(t) { - var dn = 'cn=foo,ou=unit,o=test'; - var writer = new BerWriter(); - writer.startSequence(); - writer.writeInt(3); // msgid = 3 - writer.startSequence(0x60); // ldap bind - writer.writeInt(3); // ldap v3 - writer.writeString(dn); - writer.writeByte(0x80); - writer.writeByte(0x00); - writer.endSequence(); - writer.endSequence(); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 35, 'wrong length (buffer)'); - t.equal(ber[0], 0x30, 'wrong tag'); - t.equal(ber[1], 33, 'wrong length'); - t.equal(ber[2], 0x02, 'wrong tag'); - t.equal(ber[3], 1, 'wrong length'); - t.equal(ber[4], 0x03, 'wrong value'); - t.equal(ber[5], 0x60, 'wrong tag'); - t.equal(ber[6], 28, 'wrong length'); - t.equal(ber[7], 0x02, 'wrong tag'); - t.equal(ber[8], 1, 'wrong length'); - t.equal(ber[9], 0x03, 'wrong value'); - t.equal(ber[10], 0x04, 'wrong tag'); - t.equal(ber[11], dn.length, 'wrong length'); - t.equal(ber.slice(12, 33).toString('utf8'), dn, 'wrong value'); - t.equal(ber[33], 0x80, 'wrong tag'); - t.equal(ber[34], 0x00, 'wrong len'); - - t.end(); -}); - - -test('Write OID', function(t) { - var oid = '1.2.840.113549.1.1.1'; - var writer = new BerWriter(); - writer.writeOID(oid); - - var ber = writer.buffer; - t.ok(ber); - console.log(require('util').inspect(ber)); - console.log(require('util').inspect(new Buffer([0x06, 0x09, 0x2a, 0x86, - 0x48, 0x86, 0xf7, 0x0d, - 0x01, 0x01, 0x01]))); - - t.end(); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md deleted file mode 100644 index c0c3a530..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md +++ /dev/null @@ -1,126 +0,0 @@ -# node-assert-plus - -This library is a super small wrapper over node's assert module that has two -things: (1) the ability to disable assertions with the environment variable -NODE_NDEBUG, and (2) some API wrappers for argument testing. Like -`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks -like this: - - var assert = require('assert-plus'); - - function fooAccount(options, callback) { - assert.object(options, 'options'); - assert.number(options.id, 'options.id); - assert.bool(options.isManager, 'options.isManager'); - assert.string(options.name, 'options.name'); - assert.arrayOfString(options.email, 'options.email'); - assert.func(callback, 'callback'); - - // Do stuff - callback(null, {}); - } - -# API - -All methods that *aren't* part of node's core assert API are simply assumed to -take an argument, and then a string 'name' that's not a message; `AssertionError` -will be thrown if the assertion fails with a message like: - - AssertionError: foo (string) is required - at test (/home/mark/work/foo/foo.js:3:9) - at Object.<anonymous> (/home/mark/work/foo/foo.js:15:1) - at Module._compile (module.js:446:26) - at Object..js (module.js:464:10) - at Module.load (module.js:353:31) - at Function._load (module.js:311:12) - at Array.0 (module.js:484:10) - at EventEmitter._tickCallback (node.js:190:38) - -from: - - function test(foo) { - assert.string(foo, 'foo'); - } - -There you go. You can check that arrays are of a homogenous type with `Arrayof$Type`: - - function test(foo) { - assert.arrayOfString(foo, 'foo'); - } - -You can assert IFF an argument is not `undefined` (i.e., an optional arg): - - assert.optionalString(foo, 'foo'); - -Lastly, you can opt-out of assertion checking altogether by setting the -environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have -lots of assertions, and don't want to pay `typeof ()` taxes to v8 in -production. - -The complete list of APIs is: - -* assert.bool -* assert.buffer -* assert.func -* assert.number -* assert.object -* assert.string -* assert.arrayOfBool -* assert.arrayOfFunc -* assert.arrayOfNumber -* assert.arrayOfObject -* assert.arrayOfString -* assert.optionalBool -* assert.optionalBuffer -* assert.optionalFunc -* assert.optionalNumber -* assert.optionalObject -* assert.optionalString -* assert.optionalArrayOfBool -* assert.optionalArrayOfFunc -* assert.optionalArrayOfNumber -* assert.optionalArrayOfObject -* assert.optionalArrayOfString -* assert.AssertionError -* assert.fail -* assert.ok -* assert.equal -* assert.notEqual -* assert.deepEqual -* assert.notDeepEqual -* assert.strictEqual -* assert.notStrictEqual -* assert.throws -* assert.doesNotThrow -* assert.ifError - -# Installation - - npm install assert-plus - -## License - -The MIT License (MIT) -Copyright (c) 2012 Mark Cavage - -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. - -## Bugs - -See <https://github.com/mcavage/node-assert-plus/issues>. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js deleted file mode 100644 index 70583f12..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright (c) 2012, Mark Cavage. All rights reserved. - -var assert = require('assert'); -var Stream = require('stream').Stream; -var util = require('util'); - - - -///--- Globals - -var NDEBUG = process.env.NODE_NDEBUG || false; - - - -///--- Messages - -var ARRAY_TYPE_REQUIRED = '%s ([%s]) required'; -var TYPE_REQUIRED = '%s (%s) is required'; - - - -///--- Internal - -function capitalize(str) { - return (str.charAt(0).toUpperCase() + str.slice(1)); -} - -function uncapitalize(str) { - return (str.charAt(0).toLowerCase() + str.slice(1)); -} - -function _() { - return (util.format.apply(util, arguments)); -} - - -function _assert(arg, type, name, stackFunc) { - if (!NDEBUG) { - name = name || type; - stackFunc = stackFunc || _assert.caller; - var t = typeof (arg); - - if (t !== type) { - throw new assert.AssertionError({ - message: _(TYPE_REQUIRED, name, type), - actual: t, - expected: type, - operator: '===', - stackStartFunction: stackFunc - }); - } - } -} - - - -///--- API - -function array(arr, type, name) { - if (!NDEBUG) { - name = name || type; - - if (!Array.isArray(arr)) { - throw new assert.AssertionError({ - message: _(ARRAY_TYPE_REQUIRED, name, type), - actual: typeof (arr), - expected: 'array', - operator: 'Array.isArray', - stackStartFunction: array.caller - }); - } - - for (var i = 0; i < arr.length; i++) { - _assert(arr[i], type, name, array); - } - } -} - - -function bool(arg, name) { - _assert(arg, 'boolean', name, bool); -} - - -function buffer(arg, name) { - if (!Buffer.isBuffer(arg)) { - throw new assert.AssertionError({ - message: _(TYPE_REQUIRED, name, type), - actual: typeof (arg), - expected: 'buffer', - operator: 'Buffer.isBuffer', - stackStartFunction: buffer - }); - } -} - - -function func(arg, name) { - _assert(arg, 'function', name); -} - - -function number(arg, name) { - _assert(arg, 'number', name); -} - - -function object(arg, name) { - _assert(arg, 'object', name); -} - - -function stream(arg, name) { - if (!(arg instanceof Stream)) { - throw new assert.AssertionError({ - message: _(TYPE_REQUIRED, name, type), - actual: typeof (arg), - expected: 'Stream', - operator: 'instanceof', - stackStartFunction: buffer - }); - } -} - - -function string(arg, name) { - _assert(arg, 'string', name); -} - - - -///--- Exports - -module.exports = { - bool: bool, - buffer: buffer, - func: func, - number: number, - object: object, - stream: stream, - string: string -}; - - -Object.keys(module.exports).forEach(function (k) { - if (k === 'buffer') - return; - - var name = 'arrayOf' + capitalize(k); - - if (k === 'bool') - k = 'boolean'; - if (k === 'func') - k = 'function'; - module.exports[name] = function (arg, name) { - array(arg, k, name); - }; -}); - -Object.keys(module.exports).forEach(function (k) { - var _name = 'optional' + capitalize(k); - var s = uncapitalize(k.replace('arrayOf', '')); - if (s === 'bool') - s = 'boolean'; - if (s === 'func') - s = 'function'; - - if (k.indexOf('arrayOf') !== -1) { - module.exports[_name] = function (arg, name) { - if (!NDEBUG && arg !== undefined) { - array(arg, s, name); - } - }; - } else { - module.exports[_name] = function (arg, name) { - if (!NDEBUG && arg !== undefined) { - _assert(arg, s, name); - } - }; - } -}); - - -// Reexport built-in assertions -Object.keys(assert).forEach(function (k) { - if (k === 'AssertionError') { - module.exports[k] = assert[k]; - return; - } - - module.exports[k] = function () { - if (!NDEBUG) { - assert[k].apply(assert[k], arguments); - } - }; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json deleted file mode 100644 index aade0f97..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "author": { - "name": "Mark Cavage", - "email": "mcavage@gmail.com" - }, - "name": "assert-plus", - "description": "Extra assertions on top of node's assert module", - "version": "0.1.2", - "main": "./assert.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": ">=0.6" - }, - "readme": "# node-assert-plus\n\nThis library is a super small wrapper over node's assert module that has two\nthings: (1) the ability to disable assertions with the environment variable\nNODE_NDEBUG, and (2) some API wrappers for argument testing. Like\n`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks\nlike this:\n\n var assert = require('assert-plus');\n\n function fooAccount(options, callback) {\n\t assert.object(options, 'options');\n\t\tassert.number(options.id, 'options.id);\n\t\tassert.bool(options.isManager, 'options.isManager');\n\t\tassert.string(options.name, 'options.name');\n\t\tassert.arrayOfString(options.email, 'options.email');\n\t\tassert.func(callback, 'callback');\n\n // Do stuff\n\t\tcallback(null, {});\n }\n\n# API\n\nAll methods that *aren't* part of node's core assert API are simply assumed to\ntake an argument, and then a string 'name' that's not a message; `AssertionError`\nwill be thrown if the assertion fails with a message like:\n\n AssertionError: foo (string) is required\n\tat test (/home/mark/work/foo/foo.js:3:9)\n\tat Object.<anonymous> (/home/mark/work/foo/foo.js:15:1)\n\tat Module._compile (module.js:446:26)\n\tat Object..js (module.js:464:10)\n\tat Module.load (module.js:353:31)\n\tat Function._load (module.js:311:12)\n\tat Array.0 (module.js:484:10)\n\tat EventEmitter._tickCallback (node.js:190:38)\n\nfrom:\n\n function test(foo) {\n\t assert.string(foo, 'foo');\n }\n\nThere you go. You can check that arrays are of a homogenous type with `Arrayof$Type`:\n\n function test(foo) {\n\t assert.arrayOfString(foo, 'foo');\n }\n\nYou can assert IFF an argument is not `undefined` (i.e., an optional arg):\n\n assert.optionalString(foo, 'foo');\n\nLastly, you can opt-out of assertion checking altogether by setting the\nenvironment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have\nlots of assertions, and don't want to pay `typeof ()` taxes to v8 in\nproduction.\n\nThe complete list of APIs is:\n\n* assert.bool\n* assert.buffer\n* assert.func\n* assert.number\n* assert.object\n* assert.string\n* assert.arrayOfBool\n* assert.arrayOfFunc\n* assert.arrayOfNumber\n* assert.arrayOfObject\n* assert.arrayOfString\n* assert.optionalBool\n* assert.optionalBuffer\n* assert.optionalFunc\n* assert.optionalNumber\n* assert.optionalObject\n* assert.optionalString\n* assert.optionalArrayOfBool\n* assert.optionalArrayOfFunc\n* assert.optionalArrayOfNumber\n* assert.optionalArrayOfObject\n* assert.optionalArrayOfString\n* assert.AssertionError\n* assert.fail\n* assert.ok\n* assert.equal\n* assert.notEqual\n* assert.deepEqual\n* assert.notDeepEqual\n* assert.strictEqual\n* assert.notStrictEqual\n* assert.throws\n* assert.doesNotThrow\n* assert.ifError\n\n# Installation\n\n npm install assert-plus\n\n## License\n\nThe MIT License (MIT)\nCopyright (c) 2012 Mark Cavage\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n## Bugs\n\nSee <https://github.com/mcavage/node-assert-plus/issues>.\n", - "readmeFilename": "README.md", - "_id": "assert-plus@0.1.2", - "dist": { - "shasum": "53cfb5f7859525b28cbf0ba62afc8971ca7ad1a1" - }, - "_from": "assert-plus@0.1.2", - "_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG deleted file mode 100644 index 078c03ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG +++ /dev/null @@ -1,71 +0,0 @@ -This contains tickets fixed in each version release in reverse chronological -order. There is one ticket per line. Each commits message has the tickets fixed -in it. The commit message also has the corresponding github issue. i.e. CTYPE-42 -would be issue 42. Each issue can be found at: -https://github.com/rmustacc/node-ctype/issues/%d. - -CTYPE v0.5.2 -CTYPE-46 Release 0.5.2 -CTYPE-45 error in setEndian logic - -v0.5.1 -CTYPE-44 Release 0.5.1 -Contributed by Terin Stock: -CTYPE-41 CTypeParser.writeStruct should return its offset -Contributed by Terin Stock: -CTYPE-42 int64_t returns wrong size - -v0.5.0 -CTYPE-40 Release 0.5.0 -CTYPE-39 want > 0.6 engine support - -v0.4.0 -CTYPE-37 Release v0.4.0 -CTYPE-6 want additional entry point for write -CTYPE-20 Add 64-bit int support into core parser -CTYPE-31 Fix bounds errors node/2129 -CTYPE-33 Update copyright holders -CTYPE-34 ctf.js confuses sign bit. -CTYPE-35 Make the README more useful for getting started -CTYPE-36 want manual page on ctio functions - -v0.3.1 -CTYPE-29 Release 0.3.1 -CTYPE-28 Want v0.6 npm support - -v0.3.0 -CTYPE-27 Release v0.3.0 -CTYPE-26 Want alternate default char behavior - -v0.2.1 -CTYPE-25 Release v0.2.1 -CTYPE-24 Writing structs is busted - -v0.2.0: -CTYPE-23 Release v0.2.0 -CTYPE-21 Add support for CTF JSON data -CTYPE-22 Add Javascriptlint profile -CTYPE-15 Pull in ctio updates from node/master - -v0.1.0: -CTYPE-18 Bump version to v0.1.0 -CTYPE-17 Fix nested structures -CTYPE-16 Remove extraneous logging -CTYPE-14 toAbs64 and toApprox64 are not exported - -v0.0.3: -CTYPE-12 Bump version to v0.0.3 -CTYPE-11 fix typo in wuint64 -CTYPE-10 Integrate jsstyle - -v0.0.2: -CTYPE-8 dump npm version to v0.0.2 -CTYPE-9 want changelog -CTYPE-7 fix typo in detypes. - -v0.0.1: -CTYPE-5 Missing from NPM registry -CTYPE-4 int16_t calls wrong read function -CTYPE-3 API example types are missing quotes as strings -CTYPE-2 doc missing 64-bit functions -CTYPE-1 Need license diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE deleted file mode 100644 index 22ced3e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -The following license applies to all files unless the file is specified below. -Each file specified below has its license information embedded in it: - -tools/jsstyle - -Copyright 2011, Robert Mustacchi. All rights reserved. -Copyright 2011, Joyent, Inc. 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README deleted file mode 100644 index 4efd7ee5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README +++ /dev/null @@ -1,82 +0,0 @@ -Node-CType is a way to read and write binary data in structured and easy to use -format. Its name comes from the C header file. - -To get started, simply clone the repository or use npm to install it. Once it is -there, simply require it. - -git clone git://github.com/rmustacc/node-ctype -npm install ctype -var mod_ctype = require('ctype') - - -There are two APIs that you can use, depending on what abstraction you'd like. -The low level API let's you read and write individual integers and floats from -buffers. The higher level API let's you read and write structures of these. To -illustrate this, let's looks look at how we would read and write a binary -encoded x,y point. - -In C we would define this structure as follows: - -typedef struct point { - uint16_t p_x; - uint16_t p_y; -} point_t; - -To read a binary encoded point from a Buffer, we first need to create a CType -parser (where we specify the endian and other options) and add the typedef. - -var parser = new mod_ctype.Parser({ endian: 'big' }); -parser.typedef('point_t', [ - { x: { type: 'uint16_t' } }, - { y: { type: 'uint16_t' } } -]); - -From here, given a buffer buf and an offset into it, we can read a point. - -var out = parser.readData([ { point: { type: 'point_t' } } ], buffer, 0); -console.log(out); -{ point: { x: 23, y: 42 } } - -Another way to get the same information would be to use the low level methods. -Note that these require you to manually deal with the offset. Here's how we'd -get the same values of x and y from the buffer. - -var x = mod_ctype.ruint16(buf, 'big', 0); -var y = mod_ctype.ruint16(buf, 'big', 2); -console.log(x + ', ' + y); -23, 42 - -The true power of this API comes from the ability to define and nest typedefs, -just as you would in C. By default, the following types are defined by default. -Note that they return a Number, unless indicated otherwise. - - * int8_t - * int16_t - * int32_t - * int64_t (returns an array where val[0] << 32 + val[1] would be the value) - * uint8_t - * uint16_t - * uint32_t - * uint64_t (returns an array where val[0] << 32 + val[1] would be the value) - * float - * double - * char (either returns a buffer with that character or a uint8_t) - * char[] (returns an object with the buffer and the number of characters read which is either the total amount requested or until the first 0) - - -ctf2json integration: - -Node-CType supports consuming the output of ctf2json. Once you read in a JSON file, -all you have to do to add all the definitions it contains is: - -var data, parser; -data = JSON.parse(parsedJSONData); -parser = mod_ctype.parseCTF(data, { endian: 'big' }); - -For more documentation, see the file README.old. Full documentation is in the -process of being rewritten as a series of manual pages which will be available -in the repository and online for viewing. - -To read the ctio manual page simple run, from the root of the workspace: - -man -Mman -s 3ctype ctio diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old deleted file mode 100644 index 9326b725..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old +++ /dev/null @@ -1,298 +0,0 @@ -This library provides a way to read and write binary data. - -Node CType is a way to read and write binary data in structured and easy to use -formats. It's name comes from the header file, though it does not share as much -with it as it perhaps should. - -There are two levels of the API. One is the raw API which everything is built on -top of, while the other provides a much nicer abstraction and is built entirely -by using the lower level API. The hope is that the low level API is both clear -and useful. The low level API gets it's names from stdint.h (a rather -appropriate source). The lower level API is presented at the end of this -document. - -Standard CType API - -The CType interface is presented as a parser object that controls the -endianness combined with a series of methods to change that value, parse and -write out buffers, and a way to provide typedefs. Standard Types - -The CType parser supports the following basic types which return Numbers except -as indicated: - - * int8_t - * int16_t - * int32_t - * int64_t (returns an array where val[0] << 32 + val[1] would be the value) - * uint8_t - * uint16_t - * uint32_t - * uint64_t (returns an array where val[0] << 32 + val[1] would be the value) - * float - * double - * char (returns a buffer with just that single character) - * char[] (returns an object with the buffer and the number of characters read which is either the total amount requested or until the first 0) - -Specifying Structs - -The CType parser also supports the notion of structs. A struct is an array of -JSON objects that defines an order of keys which have types and values. One -would build a struct to represent a point (x,y) as follows: - -[ - { x: { type: 'int16_t' }}, - { y: { type: 'int16_t' }} -] - -When this is passed into the read routine, it would read the first two bytes -(as defined by int16_t) to determine the Number to use for X, and then it would -read the next two bytes to determine the value of Y. When read this could -return something like: - -{ - x: 42, - y: -23 -} - -When someone wants to write values, we use the same format as above, but with -additional value field: - -[ - { x: { type: 'int16_t', value: 42 }}, - { y: { type: 'int16_t', value: -23 }} -] - -Now, the structure above may be optionally annotated with offsets. This tells -us to rather than read continuously we should read the given value at the -specified offset. If an offset is provided, it is is effectively the equivalent -of lseek(offset, SEEK_SET). Thus, subsequent values will be read from that -offset and incremented by the appropriate value. As an example: - -[ - { x: { type: 'int16_t' }}, - { y: { type: 'int16_t', offset: 20 }}, - { z: { type: 'int16_t' }} -] - -We would read x from the first starting offset given to us, for the sake of -example, let's assume that's 0. After reading x, the next offset to read from -would be 2; however, y specifies an offset, thus we jump directly to that -offset and read y from byte 20. We would then read z from byte 22. - -The same offsets may be used when writing values. - -Typedef - -The basic set of types while covers the basics, is somewhat limiting. To make -this richer, there is functionality to typedef something like in C. One can use -typedef to add a new name to an existing type or to define a name to refer to a -struct. Thus the following are all examples of a typedef: - -typedef('size_t', 'uint32_t'); -typedef('ssize_t', 'int32_t'); -typedef('point_t', [ - { x: { type: 'int16_t' }}, - { y: { type: 'int16_t' }} -]); - -Once something has been typedef'd it can be used in any of the definitions -previously shown. - -One cannot remove a typedef once created, this is analogous to C. - -The set of defined types can be printed with lstypes. The format of this output -is subject to change, but likely will look something like: - -> lstypes(); -{ - size_t: 'uint32_t', - ssize_t: 'int32_t', - point_t: [ - { x: { type: 'int16_t' }}, - { y: { type: 'int16_t' }} - ] -} - -Specifying arrays - -Arrays can be specified by appending []s to a type. Arrays must have the size -specified. The size must be specified and it can be done in one of two ways: - - * An explicit non-zero integer size - * A name of a previously declared variable in the struct whose value is a - number. - -Note, that when using the name of a variable, it should be the string name for -the key. This is only valid inside structs and the value must be declared -before the value with the array. The following are examples: - -[ - { ip_addr4: { type: 'uint8_t[4]' }}, - { len: { type: 'uint32_t' }}, - { data: { type: 'uint8_t[len]' }} -] - -Arrays are permitted in typedefs; however, they must have a declared integer -size. The following are examples of valid and invalid arrays: - -typedef('path', 'char[1024]'); /* Good */ -typedef('path', 'char[len]'); /* Bad! */ - -64 bit values: - -Unfortunately Javascript represents values with a double, so you lose precision -and the ability to represent Integers roughly beyond 2^53. To alleviate this, I -propose the following for returning 64 bit integers when read: - -value[2]: Each entry is a 32 bit number which can be reconstructed to the -original by the following formula: - -value[0] << 32 + value[1] (Note this will not work in Javascript) - -CTF JSON data: - -node-ctype can also handle JSON data that mathces the format described in the -documentation of the tool ctf2json. Given the JSON data which specifies type -information, it will transform that into a parser that understands all of the -types defined inside of it. This is useful for more complicated structures that -have a lot of typedefs. - -Interface overview - -The following is the header-file like interface to the parser object: - -/* - * Create a new instance of the parser. Each parser has its own store of - * typedefs and endianness. Conf is an object with the following values: - * - * endian Either 'big' or 'little' do determine the endianness we - * want to read from or write to. - * - */ -function CTypeParser(conf); - -/* - * Parses the CTF JSON data and creates a parser that understands all of those - * types. - * - * data Parsed JSON data that maches that CTF JSON - * specification. - * - * conf The configuration object to create a new CTypeParser - * from. - */ -CTypeParser parseCTF(data, conf); - -/* - * This is what we were born to do. We read the data from a buffer and return it - * in an object whose keys match the values from the object. - * - * def The array definition of the data to read in - * - * buffer The buffer to read data from - * - * offset The offset to start writing to - * - * Returns an object where each key corresponds to an entry in def and the value - * is the read value. - */ -Object CTypeParser.readData(<Type Definition>, buffer, offset); - -/* - * This is the second half of what we were born to do, write out the data - * itself. - * - * def The array definition of the data to write out with - * values - * - * buffer The buffer to write to - * - * offset The offset in the buffer to write to - */ -void CTypeParser.writeData(<Type Definition>, buffer, offset); - -/* - * A user has requested to add a type, let us honor their request. Yet, if their - * request doth spurn us, send them unto the Hells which Dante describes. - * - * name The string for the type definition we're adding - * - * value Either a string that is a type/array name or an object - * that describes a struct. - */ -void CTypeParser.prototype.typedef(name, value); - -Object CTypeParser.prototype.lstypes(); - -/* - * Get the endian value for the current parser - */ -String CTypeParser.prototype.getEndian(); - -/* - * Sets the current endian value for the Parser. If the value is not valid, - * throws an Error. - * - * endian Either 'big' or 'little' do determine the endianness we - * want to read from or write to. - * - */ -void CTypeParser.protoype.setEndian(String); - -/* - * Attempts to convert an array of two integers returned from rsint64 / ruint64 - * into an absolute 64 bit number. If however the value would exceed 2^52 this - * will instead throw an error. The mantissa in a double is a 52 bit number and - * rather than potentially give you a value that is an approximation this will - * error. If you would rather an approximation, please see toApprox64. - * - * val An array of two 32-bit integers - */ -Number function toAbs64(val) - -/* - * Will return the 64 bit value as returned in an array from rsint64 / ruint64 - * to a value as close as it can. Note that Javascript stores all numbers as a - * double and the mantissa only has 52 bits. Thus this version may approximate - * the value. - * - * val An array of two 32-bit integers - */ -Number function toApprox64(val) - -Low Level API - -The following function are provided at the low level: - -Read unsigned integers from a buffer: -Number ruint8(buffer, endian, offset); -Number ruint16(buffer, endian, offset); -Number ruint32(buffer, endian, offset); -Number[] ruint64(buffer, endian, offset); - -Read signed integers from a buffer: -Number rsint8(buffer, endian, offset); -Number rsint16(buffer, endian, offset); -Number rsint32(buffer, endian, offset); -Number[] rsint64(buffer, endian, offset); - -Read floating point numbers from a buffer: -Number rfloat(buffer, endian, offset); /* IEEE-754 Single precision */ -Number rdouble(buffer, endian, offset); /* IEEE-754 Double precision */ - -Write unsigned integers to a buffer: -void wuint8(Number, endian, buffer, offset); -void wuint16(Number, endian, buffer, offset); -void wuint32(Number, endian, buffer, offset); -void wuint64(Number[], endian, buffer, offset); - -Write signed integers from a buffer: -void wsint8(Number, endian, buffer, offset); -void wsint16(Number, endian, buffer, offset); -void wsint32(Number, endian, buffer, offset); -void wsint64(Number[], endian, buffer offset); - -Write floating point numbers from a buffer: -void wfloat(Number, buffer, endian, offset); /* IEEE-754 Single precision */ -void wdouble(Number, buffer, endian, offset); /* IEEE-754 Double precision */ - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js deleted file mode 100644 index 66d5f735..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js +++ /dev/null @@ -1,245 +0,0 @@ -/* - * ctf.js - * - * Understand and parse all of the different JSON formats of CTF data and - * translate that into a series of node-ctype friendly pieces. The reason for - * the abstraction is to handle different changes in the file format. - * - * We have to be careful here that we don't end up using a name that is already - * a built in type. - */ -var mod_assert = require('assert'); -var ASSERT = mod_assert.ok; - -var ctf_versions = [ '1.0' ]; -var ctf_entries = [ 'integer', 'float', 'typedef', 'struct' ]; -var ctf_deftypes = [ 'int8_t', 'uint8_t', 'int16_t', 'uint16_t', 'int32_t', - 'uint32_t', 'float', 'double' ]; - -function ctfParseInteger(entry, ctype) -{ - var name, sign, len, type; - - name = entry['name']; - if (!('signed' in entry['integer'])) - throw (new Error('Malformed CTF JSON: integer missing ' + - 'signed value')); - - - if (!('length' in entry['integer'])) - throw (new Error('Malformed CTF JSON: integer missing ' + - 'length value')); - - sign = entry['integer']['signed']; - len = entry['integer']['length']; - type = null; - - if (sign && len == 1) - type = 'int8_t'; - else if (len == 1) - type = 'uint8_t'; - else if (sign && len == 2) - type = 'int16_t'; - else if (len == 2) - type = 'uint16_t'; - else if (sign && len == 4) - type = 'int32_t'; - else if (len == 4) - type = 'uint32_t'; - else if (sign && len == 8) - type = 'int64_t'; - else if (len == 8) - type = 'uint64_t'; - - if (type === null) - throw (new Error('Malformed CTF JSON: integer has ' + - 'unsupported length and sign - ' + len + '/' + sign)); - - /* - * This means that this is the same as one of our built in types. If - * that's the case defining it would be an error. So instead of trying - * to typedef it, we'll return here. - */ - if (name == type) - return; - - if (name == 'char') { - ASSERT(type == 'int8_t'); - return; - } - - ctype.typedef(name, type); -} - -function ctfParseFloat(entry, ctype) -{ - var name, len; - - name = entry['name']; - if (!('length' in entry['float'])) - throw (new Error('Malformed CTF JSON: float missing ' + - 'length value')); - - len = entry['float']['length']; - if (len != 4 && len != 8) - throw (new Error('Malformed CTF JSON: float has invalid ' + - 'length value')); - - if (len == 4) { - if (name == 'float') - return; - ctype.typedef(name, 'float'); - } else if (len == 8) { - if (name == 'double') - return; - ctype.typedef(name, 'double'); - } -} - -function ctfParseTypedef(entry, ctype) -{ - var name, type, ii; - - name = entry['name']; - if (typeof (entry['typedef']) != 'string') - throw (new Error('Malformed CTF JSON: typedef value in not ' + - 'a string')); - - type = entry['typedef']; - - /* - * We need to ensure that we're not looking at type that's one of our - * built in types. Traditionally in C a uint32_t would be a typedef to - * some kind of integer. However, those size types are built ins. - */ - for (ii = 0; ii < ctf_deftypes.length; ii++) { - if (name == ctf_deftypes[ii]) - return; - } - - ctype.typedef(name, type); -} - -function ctfParseStruct(entry, ctype) -{ - var name, type, ii, val, index, member, push; - - member = []; - if (!Array.isArray(entry['struct'])) - throw (new Error('Malformed CTF JSON: struct value is not ' + - 'an array')); - - for (ii = 0; ii < entry['struct'].length; ii++) { - val = entry['struct'][ii]; - if (!('name' in val)) - throw (new Error('Malformed CTF JSON: struct member ' + - 'missing name')); - - if (!('type' in val)) - throw (new Error('Malformed CTF JSON: struct member ' + - 'missing type')); - - if (typeof (val['name']) != 'string') - throw (new Error('Malformed CTF JSON: struct member ' + - 'name isn\'t a string')); - - if (typeof (val['type']) != 'string') - throw (new Error('Malformed CTF JSON: struct member ' + - 'type isn\'t a string')); - - /* - * CTF version 2 specifies array names as <type> [<num>] where - * as node-ctype does this as <type>[<num>]. - */ - name = val['name']; - type = val['type']; - index = type.indexOf(' ['); - if (index != -1) { - type = type.substring(0, index) + - type.substring(index + 1, type.length); - } - push = {}; - push[name] = { 'type': type }; - member.push(push); - } - - name = entry['name']; - ctype.typedef(name, member); -} - -function ctfParseEntry(entry, ctype) -{ - var ii, found; - - if (!('name' in entry)) - throw (new Error('Malformed CTF JSON: entry missing "name" ' + - 'section')); - - for (ii = 0; ii < ctf_entries.length; ii++) { - if (ctf_entries[ii] in entry) - found++; - } - - if (found === 0) - throw (new Error('Malformed CTF JSON: found no entries')); - - if (found >= 2) - throw (new Error('Malformed CTF JSON: found more than one ' + - 'entry')); - - if ('integer' in entry) { - ctfParseInteger(entry, ctype); - return; - } - - if ('float' in entry) { - ctfParseFloat(entry, ctype); - return; - } - - if ('typedef' in entry) { - ctfParseTypedef(entry, ctype); - return; - } - - if ('struct' in entry) { - ctfParseStruct(entry, ctype); - return; - } - - ASSERT(false, 'shouldn\'t reach here'); -} - -function ctfParseJson(json, ctype) -{ - var version, ii; - - ASSERT(json); - ASSERT(ctype); - if (!('metadata' in json)) - throw (new Error('Invalid CTF JSON: missing metadata section')); - - if (!('ctf2json_version' in json['metadata'])) - throw (new Error('Invalid CTF JSON: missing ctf2json_version')); - - version = json['metadata']['ctf2json_version']; - for (ii = 0; ii < ctf_versions.length; ii++) { - if (ctf_versions[ii] == version) - break; - } - - if (ii == ctf_versions.length) - throw (new Error('Unsuported ctf2json_version: ' + version)); - - if (!('data' in json)) - throw (new Error('Invalid CTF JSON: missing data section')); - - if (!Array.isArray(json['data'])) - throw (new Error('Malformed CTF JSON: data section is not ' + - 'an array')); - - for (ii = 0; ii < json['data'].length; ii++) - ctfParseEntry(json['data'][ii], ctype); -} - -exports.ctfParseJson = ctfParseJson; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js deleted file mode 100644 index 62c5d7b2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js +++ /dev/null @@ -1,1485 +0,0 @@ -/* - * rm - Feb 2011 - * ctio.js: - * - * A simple way to read and write simple ctypes. Of course, as you'll find the - * code isn't as simple as it might appear. The following types are currently - * supported in big and little endian formats: - * - * uint8_t int8_t - * uint16_t int16_t - * uint32_t int32_t - * float (single precision IEEE 754) - * double (double precision IEEE 754) - * - * This is designed to work in Node and v8. It may in fact work in other - * Javascript interpreters (that'd be pretty neat), but it hasn't been tested. - * If you find that it does in fact work, that's pretty cool. Try and pass word - * back to the original author. - * - * Note to the reader: If you're tabstop isn't set to 8, parts of this may look - * weird. - */ - -/* - * Numbers in Javascript have a secret: all numbers must be represented with an - * IEEE-754 double. The double has a mantissa with a length of 52 bits with an - * implicit one. Thus the range of integers that can be represented is limited - * to the size of the mantissa, this makes reading and writing 64-bit integers - * difficult, but far from impossible. - * - * Another side effect of this representation is what happens when you use the - * bitwise operators, i.e. shift left, shift right, and, or, etc. In Javascript, - * each operand and the result is cast to a signed 32-bit number. However, in - * the case of >>> the values are cast to an unsigned number. - */ - -/* - * A reminder on endian related issues: - * - * Big Endian: MSB -> First byte - * Little Endian: MSB->Last byte - */ -var mod_assert = require('assert'); - -/* - * An 8 bit unsigned integer involves doing no significant work. - */ -function ruint8(buffer, endian, offset) -{ - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - return (buffer[offset]); -} - -/* - * For 16 bit unsigned numbers we can do all the casting that we want to do. - */ -function rgint16(buffer, endian, offset) -{ - var val = 0; - - if (endian == 'big') { - val = buffer[offset] << 8; - val |= buffer[offset+1]; - } else { - val = buffer[offset]; - val |= buffer[offset+1] << 8; - } - - return (val); - -} - -function ruint16(buffer, endian, offset) -{ - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 1 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - return (rgint16(buffer, endian, offset)); -} - -/* - * Because most bitshifting is done using signed numbers, if we would go into - * the realm where we use that 32nd bit, we'll end up going into the negative - * range. i.e.: - * > 200 << 24 - * -939524096 - * - * Not the value you'd expect. To work around this, we end up having to do some - * abuse of the JavaScript standard. in this case, we know that a >>> shift is - * defined to cast our value to an *unsigned* 32-bit number. Because of that, we - * use that instead to save us some additional math, though it does feel a - * little weird and it isn't obvious as to why you woul dwant to do this at - * first. - */ -function rgint32(buffer, endian, offset) -{ - var val = 0; - - if (endian == 'big') { - val = buffer[offset+1] << 16; - val |= buffer[offset+2] << 8; - val |= buffer[offset+3]; - val = val + (buffer[offset] << 24 >>> 0); - } else { - val = buffer[offset+2] << 16; - val |= buffer[offset+1] << 8; - val |= buffer[offset]; - val = val + (buffer[offset + 3] << 24 >>> 0); - } - - return (val); -} - -function ruint32(buffer, endian, offset) -{ - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - return (rgint32(buffer, endian, offset)); -} - -/* - * Reads a 64-bit unsigned number. The astue observer will note that this - * doesn't quite work. Javascript has chosen to only have numbers that can be - * represented by a double. A double only has 52 bits of mantissa with an - * implicit 1, thus we have up to 53 bits to represent an integer. However, 2^53 - * doesn't quite give us what we want. Isn't 53 bits enough for anyone? What - * could you have possibly wanted to represent that was larger than that? Oh, - * maybe a size? You mean we bypassed the 4 GB limit on file sizes, when did - * that happen? - * - * To get around this egregious language issue, we're going to instead construct - * an array of two 32 bit unsigned integers. Where arr[0] << 32 + arr[1] would - * give the actual number. However, note that the above code probably won't - * produce the desired results because of the way Javascript numbers are - * doubles. - */ -function rgint64(buffer, endian, offset) -{ - var val = new Array(2); - - if (endian == 'big') { - val[0] = ruint32(buffer, endian, offset); - val[1] = ruint32(buffer, endian, offset+4); - } else { - val[0] = ruint32(buffer, endian, offset+4); - val[1] = ruint32(buffer, endian, offset); - } - - return (val); -} - -function ruint64(buffer, endian, offset) -{ - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - return (rgint64(buffer, endian, offset)); -} - - -/* - * Signed integer types, yay team! A reminder on how two's complement actually - * works. The first bit is the signed bit, i.e. tells us whether or not the - * number should be positive or negative. If the two's complement value is - * positive, then we're done, as it's equivalent to the unsigned representation. - * - * Now if the number is positive, you're pretty much done, you can just leverage - * the unsigned translations and return those. Unfortunately, negative numbers - * aren't quite that straightforward. - * - * At first glance, one might be inclined to use the traditional formula to - * translate binary numbers between the positive and negative values in two's - * complement. (Though it doesn't quite work for the most negative value) - * Mainly: - * - invert all the bits - * - add one to the result - * - * Of course, this doesn't quite work in Javascript. Take for example the value - * of -128. This could be represented in 16 bits (big-endian) as 0xff80. But of - * course, Javascript will do the following: - * - * > ~0xff80 - * -65409 - * - * Whoh there, Javascript, that's not quite right. But wait, according to - * Javascript that's perfectly correct. When Javascript ends up seeing the - * constant 0xff80, it has no notion that it is actually a signed number. It - * assumes that we've input the unsigned value 0xff80. Thus, when it does the - * binary negation, it casts it into a signed value, (positive 0xff80). Then - * when you perform binary negation on that, it turns it into a negative number. - * - * Instead, we're going to have to use the following general formula, that works - * in a rather Javascript friendly way. I'm glad we don't support this kind of - * weird numbering scheme in the kernel. - * - * (BIT-MAX - (unsigned)val + 1) * -1 - * - * The astute observer, may think that this doesn't make sense for 8-bit numbers - * (really it isn't necessary for them). However, when you get 16-bit numbers, - * you do. Let's go back to our prior example and see how this will look: - * - * (0xffff - 0xff80 + 1) * -1 - * (0x007f + 1) * -1 - * (0x0080) * -1 - * - * Doing it this way ends up allowing us to treat it appropriately in - * Javascript. Sigh, that's really quite ugly for what should just be a few bit - * shifts, ~ and &. - */ - -/* - * Endianness doesn't matter for 8-bit signed values. We could in fact optimize - * this case because the more traditional methods work, but for consistency, - * we'll keep doing this the same way. - */ -function rsint8(buffer, endian, offset) -{ - var neg; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - neg = buffer[offset] & 0x80; - if (!neg) - return (buffer[offset]); - - return ((0xff - buffer[offset] + 1) * -1); -} - -/* - * The 16-bit version requires a bit more effort. In this case, we can leverage - * our unsigned code to generate the value we want to return. - */ -function rsint16(buffer, endian, offset) -{ - var neg, val; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 1 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = rgint16(buffer, endian, offset); - neg = val & 0x8000; - if (!neg) - return (val); - - return ((0xffff - val + 1) * -1); -} - -/* - * We really shouldn't leverage our 32-bit code here and instead utilize the - * fact that we know that since these are signed numbers, we can do all the - * shifting and binary anding to generate the 32-bit number. But, for - * consistency we'll do the same. If we want to do otherwise, we should instead - * make the 32 bit unsigned code do the optimization. But as long as there - * aren't floats secretly under the hood for that, we /should/ be okay. - */ -function rsint32(buffer, endian, offset) -{ - var neg, val; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = rgint32(buffer, endian, offset); - neg = val & 0x80000000; - if (!neg) - return (val); - - return ((0xffffffff - val + 1) * -1); -} - -/* - * The signed version of this code suffers from all of the same problems of the - * other 64 bit version. - */ -function rsint64(buffer, endian, offset) -{ - var neg, val; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = rgint64(buffer, endian, offset); - neg = val[0] & 0x80000000; - - if (!neg) - return (val); - - val[0] = (0xffffffff - val[0]) * -1; - val[1] = (0xffffffff - val[1] + 1) * -1; - - /* - * If we had the key 0x8000000000000000, that would leave the lower 32 - * bits as 0xffffffff, however, since we're goint to add one, that would - * actually leave the lower 32-bits as 0x100000000, which would break - * our ability to write back a value that we received. To work around - * this, if we actually get that value, we're going to bump the upper - * portion by 1 and set this to zero. - */ - mod_assert.ok(val[1] <= 0x100000000); - if (val[1] == -0x100000000) { - val[1] = 0; - val[0]--; - } - - return (val); -} - -/* - * We now move onto IEEE 754: The traditional form for floating point numbers - * and what is secretly hiding at the heart of everything in this. I really hope - * that someone is actually using this, as otherwise, this effort is probably - * going to be more wasted. - * - * One might be tempted to use parseFloat here, but that wouldn't work at all - * for several reasons. Mostly due to the way floats actually work, and - * parseFloat only actually works in base 10. I don't see base 10 anywhere near - * this file. - * - * In this case we'll implement the single and double precision versions. The - * quadruple precision, while probably useful, wouldn't really be accepted by - * Javascript, so let's not even waste our time. - * - * So let's review how this format looks like. A single precision value is 32 - * bits and has three parts: - * - Sign bit - * - Exponent (Using bias notation) - * - Mantissa - * - * |s|eeeeeeee|mmmmmmmmmmmmmmmmmmmmmmmmm| - * 31| 30-23 | 22 - 0 | - * - * The exponent is stored in a biased input. The bias in this case 127. - * Therefore, our exponent is equal to the 8-bit value - 127. - * - * By default, a number is normalized in IEEE, that means that the mantissa has - * an implicit one that we don't see. So really the value stored is 1.m. - * However, if the exponent is all zeros, then instead we have to shift - * everything to the right one and there is no more implicit one. - * - * Special values: - * - Positive Infinity: - * Sign: 0 - * Exponent: All 1s - * Mantissa: 0 - * - Negative Infinity: - * Sign: 1 - * Exponent: All 1s - * Mantissa: 0 - * - NaN: - * Sign: * - * Exponent: All 1s - * Mantissa: non-zero - * - Zero: - * Sign: * - * Exponent: All 0s - * Mantissa: 0 - * - * In the case of zero, the sign bit determines whether we get a positive or - * negative zero. However, since Javascript cannot determine the difference - * between the two: i.e. -0 == 0, we just always return 0. - * - */ -function rfloat(buffer, endian, offset) -{ - var bytes = []; - var sign, exponent, mantissa, val; - var bias = 127; - var maxexp = 0xff; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - /* Normalize the bytes to be in endian order */ - if (endian == 'big') { - bytes[0] = buffer[offset]; - bytes[1] = buffer[offset+1]; - bytes[2] = buffer[offset+2]; - bytes[3] = buffer[offset+3]; - } else { - bytes[3] = buffer[offset]; - bytes[2] = buffer[offset+1]; - bytes[1] = buffer[offset+2]; - bytes[0] = buffer[offset+3]; - } - - sign = bytes[0] & 0x80; - exponent = (bytes[0] & 0x7f) << 1; - exponent |= (bytes[1] & 0x80) >>> 7; - mantissa = (bytes[1] & 0x7f) << 16; - mantissa |= bytes[2] << 8; - mantissa |= bytes[3]; - - /* Check for special cases before we do general parsing */ - if (!sign && exponent == maxexp && mantissa === 0) - return (Number.POSITIVE_INFINITY); - - if (sign && exponent == maxexp && mantissa === 0) - return (Number.NEGATIVE_INFINITY); - - if (exponent == maxexp && mantissa !== 0) - return (Number.NaN); - - /* - * Javascript really doesn't have support for positive or negative zero. - * So we're not going to try and give it to you. That would be just - * plain weird. Besides -0 == 0. - */ - if (exponent === 0 && mantissa === 0) - return (0); - - /* - * Now we can deal with the bias and the determine whether the mantissa - * has the implicit one or not. - */ - exponent -= bias; - if (exponent == -bias) { - exponent++; - val = 0; - } else { - val = 1; - } - - val = (val + mantissa * Math.pow(2, -23)) * Math.pow(2, exponent); - - if (sign) - val *= -1; - - return (val); -} - -/* - * Doubles in IEEE 754 are like their brothers except for a few changes and - * increases in size: - * - The exponent is now 11 bits - * - The mantissa is now 52 bits - * - The bias is now 1023 - * - * |s|eeeeeeeeeee|mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm| - * 63| 62 - 52 | 51 - 0 | - * 63| 62 - 52 | 51 - 0 | - * - * While the size has increased a fair amount, we're going to end up keeping the - * same general formula for calculating the final value. As a reminder, this - * formula is: - * - * (-1)^s * (n + m) * 2^(e-b) - * - * Where: - * s is the sign bit - * n is (exponent > 0) ? 1 : 0 -- Determines whether we're normalized - * or not - * m is the mantissa - * e is the exponent specified - * b is the bias for the exponent - * - */ -function rdouble(buffer, endian, offset) -{ - var bytes = []; - var sign, exponent, mantissa, val, lowmant; - var bias = 1023; - var maxexp = 0x7ff; - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - /* Normalize the bytes to be in endian order */ - if (endian == 'big') { - bytes[0] = buffer[offset]; - bytes[1] = buffer[offset+1]; - bytes[2] = buffer[offset+2]; - bytes[3] = buffer[offset+3]; - bytes[4] = buffer[offset+4]; - bytes[5] = buffer[offset+5]; - bytes[6] = buffer[offset+6]; - bytes[7] = buffer[offset+7]; - } else { - bytes[7] = buffer[offset]; - bytes[6] = buffer[offset+1]; - bytes[5] = buffer[offset+2]; - bytes[4] = buffer[offset+3]; - bytes[3] = buffer[offset+4]; - bytes[2] = buffer[offset+5]; - bytes[1] = buffer[offset+6]; - bytes[0] = buffer[offset+7]; - } - - /* - * We can construct the exponent and mantissa the same way as we did in - * the case of a float, just increase the range of the exponent. - */ - sign = bytes[0] & 0x80; - exponent = (bytes[0] & 0x7f) << 4; - exponent |= (bytes[1] & 0xf0) >>> 4; - - /* - * This is going to be ugly but then again, we're dealing with IEEE 754. - * This could probably be done as a node add on in a few lines of C++, - * but oh we'll, we've made it this far so let's be native the rest of - * the way... - * - * What we're going to do is break the mantissa into two parts, the - * lower 24 bits and the upper 28 bits. We'll multiply the upper 28 bits - * by the appropriate power and then add in the lower 24-bits. Not - * really that great. It's pretty much a giant kludge to deal with - * Javascript eccentricities around numbers. - */ - lowmant = bytes[7]; - lowmant |= bytes[6] << 8; - lowmant |= bytes[5] << 16; - mantissa = bytes[4]; - mantissa |= bytes[3] << 8; - mantissa |= bytes[2] << 16; - mantissa |= (bytes[1] & 0x0f) << 24; - mantissa *= Math.pow(2, 24); /* Equivalent to << 24, but JS compat */ - mantissa += lowmant; - - /* Check for special cases before we do general parsing */ - if (!sign && exponent == maxexp && mantissa === 0) - return (Number.POSITIVE_INFINITY); - - if (sign && exponent == maxexp && mantissa === 0) - return (Number.NEGATIVE_INFINITY); - - if (exponent == maxexp && mantissa !== 0) - return (Number.NaN); - - /* - * Javascript really doesn't have support for positive or negative zero. - * So we're not going to try and give it to you. That would be just - * plain weird. Besides -0 == 0. - */ - if (exponent === 0 && mantissa === 0) - return (0); - - /* - * Now we can deal with the bias and the determine whether the mantissa - * has the implicit one or not. - */ - exponent -= bias; - if (exponent == -bias) { - exponent++; - val = 0; - } else { - val = 1; - } - - val = (val + mantissa * Math.pow(2, -52)) * Math.pow(2, exponent); - - if (sign) - val *= -1; - - return (val); -} - -/* - * Now that we have gone through the pain of reading the individual types, we're - * probably going to want some way to write these back. None of this is going to - * be good. But since we have Javascript numbers this should certainly be more - * interesting. Though we can constrain this end a little bit more in what is - * valid. For now, let's go back to our friends the unsigned value. - */ - -/* - * Unsigned numbers seem deceptively easy. Here are the general steps and rules - * that we are going to take: - * - If the number is negative, throw an Error - * - Truncate any floating point portion - * - Take the modulus of the number in our base - * - Write it out to the buffer in the endian format requested at the offset - */ - -/* - * We have to make sure that the value is a valid integer. This means that it is - * non-negative. It has no fractional component and that it does not exceed the - * maximum allowed value. - * - * value The number to check for validity - * - * max The maximum value - */ -function prepuint(value, max) -{ - if (typeof (value) != 'number') - throw (new (Error('cannot write a non-number as a number'))); - - if (value < 0) - throw (new Error('specified a negative value for writing an ' + - 'unsigned value')); - - if (value > max) - throw (new Error('value is larger than maximum value for ' + - 'type')); - - if (Math.floor(value) !== value) - throw (new Error('value has a fractional component')); - - return (value); -} - -/* - * 8-bit version, classy. We can ignore endianness which is good. - */ -function wuint8(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepuint(value, 0xff); - buffer[offset] = val; -} - -/* - * Pretty much the same as the 8-bit version, just this time we need to worry - * about endian related issues. - */ -function wgint16(val, endian, buffer, offset) -{ - if (endian == 'big') { - buffer[offset] = (val & 0xff00) >>> 8; - buffer[offset+1] = val & 0x00ff; - } else { - buffer[offset+1] = (val & 0xff00) >>> 8; - buffer[offset] = val & 0x00ff; - } -} - -function wuint16(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 1 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepuint(value, 0xffff); - wgint16(val, endian, buffer, offset); -} - -/* - * The 32-bit version is going to have to be a little different unfortunately. - * We can't quite bitshift to get the largest byte, because that would end up - * getting us caught by the signed values. - * - * And yes, we do want to subtract out the lower part by default. This means - * that when we do the division, it will be treated as a bit shift and we won't - * end up generating a floating point value. If we did generate a floating point - * value we'd have to truncate it intelligently, this saves us that problem and - * may even be somewhat faster under the hood. - */ -function wgint32(val, endian, buffer, offset) -{ - if (endian == 'big') { - buffer[offset] = (val - (val & 0x00ffffff)) / Math.pow(2, 24); - buffer[offset+1] = (val >>> 16) & 0xff; - buffer[offset+2] = (val >>> 8) & 0xff; - buffer[offset+3] = val & 0xff; - } else { - buffer[offset+3] = (val - (val & 0x00ffffff)) / - Math.pow(2, 24); - buffer[offset+2] = (val >>> 16) & 0xff; - buffer[offset+1] = (val >>> 8) & 0xff; - buffer[offset] = val & 0xff; - } -} - -function wuint32(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepuint(value, 0xffffffff); - wgint32(val, endian, buffer, offset); -} - -/* - * Unlike the other versions, we expect the value to be in the form of two - * arrays where value[0] << 32 + value[1] would result in the value that we - * want. - */ -function wgint64(value, endian, buffer, offset) -{ - if (endian == 'big') { - wgint32(value[0], endian, buffer, offset); - wgint32(value[1], endian, buffer, offset+4); - } else { - wgint32(value[0], endian, buffer, offset+4); - wgint32(value[1], endian, buffer, offset); - } -} - -function wuint64(value, endian, buffer, offset) -{ - if (value === undefined) - throw (new Error('missing value')); - - if (!(value instanceof Array)) - throw (new Error('value must be an array')); - - if (value.length != 2) - throw (new Error('value must be an array of length 2')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - prepuint(value[0], 0xffffffff); - prepuint(value[1], 0xffffffff); - wgint64(value, endian, buffer, offset); -} - -/* - * We now move onto our friends in the signed number category. Unlike unsigned - * numbers, we're going to have to worry a bit more about how we put values into - * arrays. Since we are only worrying about signed 32-bit values, we're in - * slightly better shape. Unfortunately, we really can't do our favorite binary - * & in this system. It really seems to do the wrong thing. For example: - * - * > -32 & 0xff - * 224 - * - * What's happening above is really: 0xe0 & 0xff = 0xe0. However, the results of - * this aren't treated as a signed number. Ultimately a bad thing. - * - * What we're going to want to do is basically create the unsigned equivalent of - * our representation and pass that off to the wuint* functions. To do that - * we're going to do the following: - * - * - if the value is positive - * we can pass it directly off to the equivalent wuint - * - if the value is negative - * we do the following computation: - * mb + val + 1, where - * mb is the maximum unsigned value in that byte size - * val is the Javascript negative integer - * - * - * As a concrete value, take -128. In signed 16 bits this would be 0xff80. If - * you do out the computations: - * - * 0xffff - 128 + 1 - * 0xffff - 127 - * 0xff80 - * - * You can then encode this value as the signed version. This is really rather - * hacky, but it should work and get the job done which is our goal here. - * - * Thus the overall flow is: - * - Truncate the floating point part of the number - * - We don't have to take the modulus, because the unsigned versions will - * take care of that for us. And we don't have to worry about that - * potentially causing bad things to happen because of sign extension - * - Pass it off to the appropriate unsigned version, potentially modifying - * the negative portions as necessary. - */ - -/* - * A series of checks to make sure we actually have a signed 32-bit number - */ -function prepsint(value, max, min) -{ - if (typeof (value) != 'number') - throw (new (Error('cannot write a non-number as a number'))); - - if (value > max) - throw (new Error('value larger than maximum allowed value')); - - if (value < min) - throw (new Error('value smaller than minimum allowed value')); - - if (Math.floor(value) !== value) - throw (new Error('value has a fractional component')); - - return (value); -} - -/* - * The 8-bit version of the signed value. Overall, fairly straightforward. - */ -function wsint8(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepsint(value, 0x7f, -0x80); - if (val >= 0) - wuint8(val, endian, buffer, offset); - else - wuint8(0xff + val + 1, endian, buffer, offset); -} - -/* - * The 16-bit version of the signed value. Also, fairly straightforward. - */ -function wsint16(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 1 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepsint(value, 0x7fff, -0x8000); - if (val >= 0) - wgint16(val, endian, buffer, offset); - else - wgint16(0xffff + val + 1, endian, buffer, offset); - -} - -/* - * We can do this relatively easily by leveraging the code used for 32-bit - * unsigned code. - */ -function wsint32(value, endian, buffer, offset) -{ - var val; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - val = prepsint(value, 0x7fffffff, -0x80000000); - if (val >= 0) - wgint32(val, endian, buffer, offset); - else - wgint32(0xffffffff + val + 1, endian, buffer, offset); -} - -/* - * The signed 64 bit integer should by in the same format as when received. - * Mainly it should ensure that the value is an array of two integers where - * value[0] << 32 + value[1] is the desired number. Furthermore, the two values - * need to be equal. - */ -function wsint64(value, endian, buffer, offset) -{ - var vzpos, vopos; - var vals = new Array(2); - - if (value === undefined) - throw (new Error('missing value')); - - if (!(value instanceof Array)) - throw (new Error('value must be an array')); - - if (value.length != 2) - throw (new Error('value must be an array of length 2')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - /* - * We need to make sure that we have the same sign on both values. The - * hokiest way to to do this is to multiply the number by +inf. If we do - * this, we'll get either +/-inf depending on the sign of the value. - * Once we have this, we can compare it to +inf to see if the number is - * positive or not. - */ - vzpos = (value[0] * Number.POSITIVE_INFINITY) == - Number.POSITIVE_INFINITY; - vopos = (value[1] * Number.POSITIVE_INFINITY) == - Number.POSITIVE_INFINITY; - - /* - * If either of these is zero, then we don't actually need this check. - */ - if (value[0] != 0 && value[1] != 0 && vzpos != vopos) - throw (new Error('Both entries in the array must have ' + - 'the same sign')); - - /* - * Doing verification for a signed 64-bit integer is actually a big - * trickier than it appears. We can't quite use our standard techniques - * because we need to compare both sets of values. The first value is - * pretty straightforward. If the first value is beond the extremes than - * we error out. However, the valid range of the second value varies - * based on the first one. If the first value is negative, and *not* the - * largest negative value, than it can be any integer within the range [ - * 0, 0xffffffff ]. If it is the largest negative number, it must be - * zero. - * - * If the first number is positive, than it doesn't matter what the - * value is. We just simply have to make sure we have a valid positive - * integer. - */ - if (vzpos) { - prepuint(value[0], 0x7fffffff); - prepuint(value[1], 0xffffffff); - } else { - prepsint(value[0], 0, -0x80000000); - prepsint(value[1], 0, -0xffffffff); - if (value[0] == -0x80000000 && value[1] != 0) - throw (new Error('value smaller than minimum ' + - 'allowed value')); - } - - /* Fix negative numbers */ - if (value[0] < 0 || value[1] < 0) { - vals[0] = 0xffffffff - Math.abs(value[0]); - vals[1] = 0x100000000 - Math.abs(value[1]); - if (vals[1] == 0x100000000) { - vals[1] = 0; - vals[0]++; - } - } else { - vals[0] = value[0]; - vals[1] = value[1]; - } - wgint64(vals, endian, buffer, offset); -} - -/* - * Now we are moving onto the weirder of these, the float and double. For this - * we're going to just have to do something that's pretty weird. First off, we - * have no way to get at the underlying float representation, at least not - * easily. But that doesn't mean we can't figure it out, we just have to use our - * heads. - * - * One might propose to use Number.toString(2). Of course, this is not really - * that good, because the ECMAScript 262 v3 Standard says the following Section - * 15.7.4.2-Number.prototype.toString (radix): - * - * If radix is an integer from 2 to 36, but not 10, the result is a string, the - * choice of which is implementation-dependent. - * - * Well that doesn't really help us one bit now does it? We could use the - * standard base 10 version of the string, but that's just going to create more - * errors as we end up trying to convert it back to a binary value. So, really - * this just means we have to be non-lazy and parse the structure intelligently. - * - * First off, we can do the basic checks: NaN, positive and negative infinity. - * - * Now that those are done we can work backwards to generate the mantissa and - * exponent. - * - * The first thing we need to do is determine the sign bit, easy to do, check - * whether the value is less than 0. And convert the number to its absolute - * value representation. Next, we need to determine if the value is less than - * one or greater than or equal to one and from there determine what power was - * used to get there. What follows is now specific to floats, though the general - * ideas behind this will hold for doubles as well, but the exact numbers - * involved will change. - * - * Once we have that power we can determine the exponent and the mantissa. Call - * the value that has the number of bits to reach the power ebits. In the - * general case they have the following values: - * - * exponent 127 + ebits - * mantissa value * 2^(23 - ebits) & 0x7fffff - * - * In the case where the value of ebits is <= -127 we are now in the case where - * we no longer have normalized numbers. In this case the values take on the - * following values: - * - * exponent 0 - * mantissa value * 2^149 & 0x7fffff - * - * Once we have the values for the sign, mantissa, and exponent. We reconstruct - * the four bytes as follows: - * - * byte0 sign bit and seven most significant bits from the exp - * sign << 7 | (exponent & 0xfe) >>> 1 - * - * byte1 lsb from the exponent and 7 top bits from the mantissa - * (exponent & 0x01) << 7 | (mantissa & 0x7f0000) >>> 16 - * - * byte2 bits 8-15 (zero indexing) from mantissa - * mantissa & 0xff00 >> 8 - * - * byte3 bits 0-7 from mantissa - * mantissa & 0xff - * - * Once we have this we have to assign them into the buffer in proper endian - * order. - */ - -/* - * Compute the log base 2 of the value. Now, someone who remembers basic - * properties of logarithms will point out that we could use the change of base - * formula for logs, and in fact that would be astute, because that's what we'll - * do for now. It feels cleaner, albeit it may be less efficient than just - * iterating and dividing by 2. We may want to come back and revisit that some - * day. - */ -function log2(value) -{ - return (Math.log(value) / Math.log(2)); -} - -/* - * Helper to determine the exponent of the number we're looking at. - */ -function intexp(value) -{ - return (Math.floor(log2(value))); -} - -/* - * Helper to determine the exponent of the fractional part of the value. - */ -function fracexp(value) -{ - return (Math.floor(log2(value))); -} - -function wfloat(value, endian, buffer, offset) -{ - var sign, exponent, mantissa, ebits; - var bytes = []; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - - if (offset + 3 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - if (isNaN(value)) { - sign = 0; - exponent = 0xff; - mantissa = 23; - } else if (value == Number.POSITIVE_INFINITY) { - sign = 0; - exponent = 0xff; - mantissa = 0; - } else if (value == Number.NEGATIVE_INFINITY) { - sign = 1; - exponent = 0xff; - mantissa = 0; - } else { - /* Well we have some work to do */ - - /* Thankfully the sign bit is trivial */ - if (value < 0) { - sign = 1; - value = Math.abs(value); - } else { - sign = 0; - } - - /* Use the correct function to determine number of bits */ - if (value < 1) - ebits = fracexp(value); - else - ebits = intexp(value); - - /* Time to deal with the issues surrounding normalization */ - if (ebits <= -127) { - exponent = 0; - mantissa = (value * Math.pow(2, 149)) & 0x7fffff; - } else { - exponent = 127 + ebits; - mantissa = value * Math.pow(2, 23 - ebits); - mantissa &= 0x7fffff; - } - } - - bytes[0] = sign << 7 | (exponent & 0xfe) >>> 1; - bytes[1] = (exponent & 0x01) << 7 | (mantissa & 0x7f0000) >>> 16; - bytes[2] = (mantissa & 0x00ff00) >>> 8; - bytes[3] = mantissa & 0x0000ff; - - if (endian == 'big') { - buffer[offset] = bytes[0]; - buffer[offset+1] = bytes[1]; - buffer[offset+2] = bytes[2]; - buffer[offset+3] = bytes[3]; - } else { - buffer[offset] = bytes[3]; - buffer[offset+1] = bytes[2]; - buffer[offset+2] = bytes[1]; - buffer[offset+3] = bytes[0]; - } -} - -/* - * Now we move onto doubles. Doubles are similar to floats in pretty much all - * ways except that the processing isn't quite as straightforward because we - * can't always use shifting, i.e. we have > 32 bit values. - * - * We're going to proceed in an identical fashion to floats and utilize the same - * helper functions. All that really is changing are the specific values that we - * use to do the calculations. Thus, to review we have to do the following. - * - * First get the sign bit and convert the value to its absolute value - * representation. Next, we determine the number of bits that we used to get to - * the value, branching whether the value is greater than or less than 1. Once - * we have that value which we will again call ebits, we have to do the - * following in the general case: - * - * exponent 1023 + ebits - * mantissa [value * 2^(52 - ebits)] % 2^52 - * - * In the case where the value of ebits <= -1023 we no longer use normalized - * numbers, thus like with floats we have to do slightly different processing: - * - * exponent 0 - * mantissa [value * 2^1074] % 2^52 - * - * Once we have determined the sign, exponent and mantissa we can construct the - * bytes as follows: - * - * byte0 sign bit and seven most significant bits form the exp - * sign << 7 | (exponent & 0x7f0) >>> 4 - * - * byte1 Remaining 4 bits from the exponent and the four most - * significant bits from the mantissa 48-51 - * (exponent & 0x00f) << 4 | mantissa >>> 48 - * - * byte2 Bits 40-47 from the mantissa - * (mantissa >>> 40) & 0xff - * - * byte3 Bits 32-39 from the mantissa - * (mantissa >>> 32) & 0xff - * - * byte4 Bits 24-31 from the mantissa - * (mantissa >>> 24) & 0xff - * - * byte5 Bits 16-23 from the Mantissa - * (mantissa >>> 16) & 0xff - * - * byte6 Bits 8-15 from the mantissa - * (mantissa >>> 8) & 0xff - * - * byte7 Bits 0-7 from the mantissa - * mantissa & 0xff - * - * Now we can't quite do the right shifting that we want in bytes 1 - 3, because - * we'll have extended too far and we'll lose those values when we try and do - * the shift. Instead we have to use an alternate approach. To try and stay out - * of floating point, what we'll do is say that mantissa -= bytes[4-7] and then - * divide by 2^32. Once we've done that we can use binary arithmetic. Oof, - * that's ugly, but it seems to avoid using floating point (just based on how v8 - * seems to be optimizing for base 2 arithmetic). - */ -function wdouble(value, endian, buffer, offset) -{ - var sign, exponent, mantissa, ebits; - var bytes = []; - - if (value === undefined) - throw (new Error('missing value')); - - if (endian === undefined) - throw (new Error('missing endian')); - - if (buffer === undefined) - throw (new Error('missing buffer')); - - if (offset === undefined) - throw (new Error('missing offset')); - - - if (offset + 7 >= buffer.length) - throw (new Error('Trying to read beyond buffer length')); - - if (isNaN(value)) { - sign = 0; - exponent = 0x7ff; - mantissa = 23; - } else if (value == Number.POSITIVE_INFINITY) { - sign = 0; - exponent = 0x7ff; - mantissa = 0; - } else if (value == Number.NEGATIVE_INFINITY) { - sign = 1; - exponent = 0x7ff; - mantissa = 0; - } else { - /* Well we have some work to do */ - - /* Thankfully the sign bit is trivial */ - if (value < 0) { - sign = 1; - value = Math.abs(value); - } else { - sign = 0; - } - - /* Use the correct function to determine number of bits */ - if (value < 1) - ebits = fracexp(value); - else - ebits = intexp(value); - - /* - * This is a total hack to determine a denormalized value. - * Unfortunately, we sometimes do not get a proper value for - * ebits, i.e. we lose the values that would get rounded off. - * - * - * The astute observer may wonder why we would be - * multiplying by two Math.pows rather than just summing - * them. Well, that's to get around a small bug in the - * way v8 seems to implement the function. On occasion - * doing: - * - * foo * Math.pow(2, 1023 + 51) - * - * Causes us to overflow to infinity, where as doing: - * - * foo * Math.pow(2, 1023) * Math.pow(2, 51) - * - * Does not cause us to overflow. Go figure. - * - */ - if (value <= 2.225073858507201e-308 || ebits <= -1023) { - exponent = 0; - mantissa = value * Math.pow(2, 1023) * Math.pow(2, 51); - mantissa %= Math.pow(2, 52); - } else { - /* - * We might have gotten fucked by our floating point - * logarithm magic. This is rather crappy, but that's - * our luck. If we just had a log base 2 or access to - * the stupid underlying representation this would have - * been much easier and we wouldn't have such stupid - * kludges or hacks. - */ - if (ebits > 1023) - ebits = 1023; - exponent = 1023 + ebits; - mantissa = value * Math.pow(2, -ebits); - mantissa *= Math.pow(2, 52); - mantissa %= Math.pow(2, 52); - } - } - - /* Fill the bytes in backwards to deal with the size issues */ - bytes[7] = mantissa & 0xff; - bytes[6] = (mantissa >>> 8) & 0xff; - bytes[5] = (mantissa >>> 16) & 0xff; - mantissa = (mantissa - (mantissa & 0xffffff)) / Math.pow(2, 24); - bytes[4] = mantissa & 0xff; - bytes[3] = (mantissa >>> 8) & 0xff; - bytes[2] = (mantissa >>> 16) & 0xff; - bytes[1] = (exponent & 0x00f) << 4 | mantissa >>> 24; - bytes[0] = (sign << 7) | (exponent & 0x7f0) >>> 4; - - if (endian == 'big') { - buffer[offset] = bytes[0]; - buffer[offset+1] = bytes[1]; - buffer[offset+2] = bytes[2]; - buffer[offset+3] = bytes[3]; - buffer[offset+4] = bytes[4]; - buffer[offset+5] = bytes[5]; - buffer[offset+6] = bytes[6]; - buffer[offset+7] = bytes[7]; - } else { - buffer[offset+7] = bytes[0]; - buffer[offset+6] = bytes[1]; - buffer[offset+5] = bytes[2]; - buffer[offset+4] = bytes[3]; - buffer[offset+3] = bytes[4]; - buffer[offset+2] = bytes[5]; - buffer[offset+1] = bytes[6]; - buffer[offset] = bytes[7]; - } -} - -/* - * Actually export our work above. One might argue that we shouldn't expose - * these interfaces and just force people to use the higher level abstractions - * around this work. However, unlike say other libraries we've come across, this - * interface has several properties: it makes sense, it's simple, and it's - * useful. - */ -exports.ruint8 = ruint8; -exports.ruint16 = ruint16; -exports.ruint32 = ruint32; -exports.ruint64 = ruint64; -exports.wuint8 = wuint8; -exports.wuint16 = wuint16; -exports.wuint32 = wuint32; -exports.wuint64 = wuint64; - -exports.rsint8 = rsint8; -exports.rsint16 = rsint16; -exports.rsint32 = rsint32; -exports.rsint64 = rsint64; -exports.wsint8 = wsint8; -exports.wsint16 = wsint16; -exports.wsint32 = wsint32; -exports.wsint64 = wsint64; - -exports.rfloat = rfloat; -exports.rdouble = rdouble; -exports.wfloat = wfloat; -exports.wdouble = wdouble; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js deleted file mode 100644 index 7d2f4a5a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js +++ /dev/null @@ -1,944 +0,0 @@ -/* - * rm - Feb 2011 - * ctype.js - * - * This module provides a simple abstraction towards reading and writing - * different types of binary data. It is designed to use ctio.js and provide a - * richer and more expressive API on top of it. - * - * By default we support the following as built in basic types: - * int8_t - * int16_t - * int32_t - * uint8_t - * uint16_t - * uint32_t - * uint64_t - * float - * double - * char - * char[] - * - * Each type is returned as a Number, with the exception of char and char[] - * which are returned as Node Buffers. A char is considered a uint8_t. - * - * Requests to read and write data are specified as an array of JSON objects. - * This is also the same way that one declares structs. Even if just a single - * value is requested, it must be done as a struct. The array order determines - * the order that we try and read values. Each entry has the following format - * with values marked with a * being optional. - * - * { key: { type: /type/, value*: /value/, offset*: /offset/ } - * - * If offset is defined, we lseek(offset, SEEK_SET) before reading the next - * value. Value is defined when we're writing out data, otherwise it's ignored. - * - */ - -var mod_ctf = require('./ctf.js'); -var mod_ctio = require('./ctio.js'); -var mod_assert = require('assert'); - -/* - * This is the set of basic types that we support. - * - * read The function to call to read in a value from a buffer - * - * write The function to call to write a value to a buffer - * - */ -var deftypes = { - 'uint8_t': { read: ctReadUint8, write: ctWriteUint8 }, - 'uint16_t': { read: ctReadUint16, write: ctWriteUint16 }, - 'uint32_t': { read: ctReadUint32, write: ctWriteUint32 }, - 'uint64_t': { read: ctReadUint64, write: ctWriteUint64 }, - 'int8_t': { read: ctReadSint8, write: ctWriteSint8 }, - 'int16_t': { read: ctReadSint16, write: ctWriteSint16 }, - 'int32_t': { read: ctReadSint32, write: ctWriteSint32 }, - 'int64_t': { read: ctReadSint64, write: ctWriteSint64 }, - 'float': { read: ctReadFloat, write: ctWriteFloat }, - 'double': { read: ctReadDouble, write: ctWriteDouble }, - 'char': { read: ctReadChar, write: ctWriteChar }, - 'char[]': { read: ctReadCharArray, write: ctWriteCharArray } -}; - -/* - * The following are wrappers around the CType IO low level API. They encode - * knowledge about the size and return something in the expected format. - */ -function ctReadUint8(endian, buffer, offset) -{ - var val = mod_ctio.ruint8(buffer, endian, offset); - return ({ value: val, size: 1 }); -} - -function ctReadUint16(endian, buffer, offset) -{ - var val = mod_ctio.ruint16(buffer, endian, offset); - return ({ value: val, size: 2 }); -} - -function ctReadUint32(endian, buffer, offset) -{ - var val = mod_ctio.ruint32(buffer, endian, offset); - return ({ value: val, size: 4 }); -} - -function ctReadUint64(endian, buffer, offset) -{ - var val = mod_ctio.ruint64(buffer, endian, offset); - return ({ value: val, size: 8 }); -} - -function ctReadSint8(endian, buffer, offset) -{ - var val = mod_ctio.rsint8(buffer, endian, offset); - return ({ value: val, size: 1 }); -} - -function ctReadSint16(endian, buffer, offset) -{ - var val = mod_ctio.rsint16(buffer, endian, offset); - return ({ value: val, size: 2 }); -} - -function ctReadSint32(endian, buffer, offset) -{ - var val = mod_ctio.rsint32(buffer, endian, offset); - return ({ value: val, size: 4 }); -} - -function ctReadSint64(endian, buffer, offset) -{ - var val = mod_ctio.rsint64(buffer, endian, offset); - return ({ value: val, size: 8 }); -} - -function ctReadFloat(endian, buffer, offset) -{ - var val = mod_ctio.rfloat(buffer, endian, offset); - return ({ value: val, size: 4 }); -} - -function ctReadDouble(endian, buffer, offset) -{ - var val = mod_ctio.rdouble(buffer, endian, offset); - return ({ value: val, size: 8 }); -} - -/* - * Reads a single character into a node buffer - */ -function ctReadChar(endian, buffer, offset) -{ - var res = new Buffer(1); - res[0] = mod_ctio.ruint8(buffer, endian, offset); - return ({ value: res, size: 1 }); -} - -function ctReadCharArray(length, endian, buffer, offset) -{ - var ii; - var res = new Buffer(length); - - for (ii = 0; ii < length; ii++) - res[ii] = mod_ctio.ruint8(buffer, endian, offset + ii); - - return ({ value: res, size: length }); -} - -function ctWriteUint8(value, endian, buffer, offset) -{ - mod_ctio.wuint8(value, endian, buffer, offset); - return (1); -} - -function ctWriteUint16(value, endian, buffer, offset) -{ - mod_ctio.wuint16(value, endian, buffer, offset); - return (2); -} - -function ctWriteUint32(value, endian, buffer, offset) -{ - mod_ctio.wuint32(value, endian, buffer, offset); - return (4); -} - -function ctWriteUint64(value, endian, buffer, offset) -{ - mod_ctio.wuint64(value, endian, buffer, offset); - return (8); -} - -function ctWriteSint8(value, endian, buffer, offset) -{ - mod_ctio.wsint8(value, endian, buffer, offset); - return (1); -} - -function ctWriteSint16(value, endian, buffer, offset) -{ - mod_ctio.wsint16(value, endian, buffer, offset); - return (2); -} - -function ctWriteSint32(value, endian, buffer, offset) -{ - mod_ctio.wsint32(value, endian, buffer, offset); - return (4); -} - -function ctWriteSint64(value, endian, buffer, offset) -{ - mod_ctio.wsint64(value, endian, buffer, offset); - return (8); -} - -function ctWriteFloat(value, endian, buffer, offset) -{ - mod_ctio.wfloat(value, endian, buffer, offset); - return (4); -} - -function ctWriteDouble(value, endian, buffer, offset) -{ - mod_ctio.wdouble(value, endian, buffer, offset); - return (8); -} - -/* - * Writes a single character into a node buffer - */ -function ctWriteChar(value, endian, buffer, offset) -{ - if (!(value instanceof Buffer)) - throw (new Error('Input must be a buffer')); - - mod_ctio.ruint8(value[0], endian, buffer, offset); - return (1); -} - -/* - * We're going to write 0s into the buffer if the string is shorter than the - * length of the array. - */ -function ctWriteCharArray(value, length, endian, buffer, offset) -{ - var ii; - - if (!(value instanceof Buffer)) - throw (new Error('Input must be a buffer')); - - if (value.length > length) - throw (new Error('value length greater than array length')); - - for (ii = 0; ii < value.length && ii < length; ii++) - mod_ctio.wuint8(value[ii], endian, buffer, offset + ii); - - for (; ii < length; ii++) - mod_ctio.wuint8(0, endian, offset + ii); - - - return (length); -} - -/* - * Each parser has their own set of types. We want to make sure that they each - * get their own copy as they may need to modify it. - */ -function ctGetBasicTypes() -{ - var ret = {}; - var key; - for (key in deftypes) - ret[key] = deftypes[key]; - - return (ret); -} - -/* - * Given a string in the form of type[length] we want to split this into an - * object that extracts that information. We want to note that we could possibly - * have nested arrays so this should only check the furthest one. It may also be - * the case that we have no [] pieces, in which case we just return the current - * type. - */ -function ctParseType(str) -{ - var begInd, endInd; - var type, len; - if (typeof (str) != 'string') - throw (new Error('type must be a Javascript string')); - - endInd = str.lastIndexOf(']'); - if (endInd == -1) { - if (str.lastIndexOf('[') != -1) - throw (new Error('found invalid type with \'[\' but ' + - 'no corresponding \']\'')); - - return ({ type: str }); - } - - begInd = str.lastIndexOf('['); - if (begInd == -1) - throw (new Error('found invalid type with \']\' but ' + - 'no corresponding \'[\'')); - - if (begInd >= endInd) - throw (new Error('malformed type, \']\' appears before \'[\'')); - - type = str.substring(0, begInd); - len = str.substring(begInd + 1, endInd); - - return ({ type: type, len: len }); -} - -/* - * Given a request validate that all of the fields for it are valid and make - * sense. This includes verifying the following notions: - * - Each type requested is present in types - * - Only allow a name for a field to be specified once - * - If an array is specified, validate that the requested field exists and - * comes before it. - * - If fields is defined, check that each entry has the occurrence of field - */ -function ctCheckReq(def, types, fields) -{ - var ii, jj; - var req, keys, key; - var found = {}; - - if (!(def instanceof Array)) - throw (new Error('definition is not an array')); - - if (def.length === 0) - throw (new Error('definition must have at least one element')); - - for (ii = 0; ii < def.length; ii++) { - req = def[ii]; - if (!(req instanceof Object)) - throw (new Error('definition must be an array of' + - 'objects')); - - keys = Object.keys(req); - if (keys.length != 1) - throw (new Error('definition entry must only have ' + - 'one key')); - - if (keys[0] in found) - throw (new Error('Specified name already ' + - 'specified: ' + keys[0])); - - if (!('type' in req[keys[0]])) - throw (new Error('missing required type definition')); - - key = ctParseType(req[keys[0]]['type']); - - /* - * We may have nested arrays, we need to check the validity of - * the types until the len field is undefined in key. However, - * each time len is defined we need to verify it is either an - * integer or corresponds to an already seen key. - */ - while (key['len'] !== undefined) { - if (isNaN(parseInt(key['len'], 10))) { - if (!(key['len'] in found)) - throw (new Error('Given an array ' + - 'length without a matching type')); - - } - - key = ctParseType(key['type']); - } - - /* Now we can validate if the type is valid */ - if (!(key['type'] in types)) - throw (new Error('type not found or typdefed: ' + - key['type'])); - - /* Check for any required fields */ - if (fields !== undefined) { - for (jj = 0; jj < fields.length; jj++) { - if (!(fields[jj] in req[keys[0]])) - throw (new Error('Missing required ' + - 'field: ' + fields[jj])); - } - } - - found[keys[0]] = true; - } -} - - -/* - * Create a new instance of the parser. Each parser has its own store of - * typedefs and endianness. Conf is an object with the following required - * values: - * - * endian Either 'big' or 'little' do determine the endianness we - * want to read from or write to. - * - * And the following optional values: - * - * char-type Valid options here are uint8 and int8. If uint8 is - * specified this changes the default behavior of a single - * char from being a buffer of a single character to being - * a uint8_t. If int8, it becomes an int8_t instead. - */ -function CTypeParser(conf) -{ - if (!conf) throw (new Error('missing required argument')); - - if (!('endian' in conf)) - throw (new Error('missing required endian value')); - - if (conf['endian'] != 'big' && conf['endian'] != 'little') - throw (new Error('Invalid endian type')); - - if ('char-type' in conf && (conf['char-type'] != 'uint8' && - conf['char-type'] != 'int8')) - throw (new Error('invalid option for char-type: ' + - conf['char-type'])); - - this.endian = conf['endian']; - this.types = ctGetBasicTypes(); - - /* - * There may be a more graceful way to do this, but this will have to - * serve. - */ - if ('char-type' in conf && conf['char-type'] == 'uint8') - this.types['char'] = this.types['uint8_t']; - - if ('char-type' in conf && conf['char-type'] == 'int8') - this.types['char'] = this.types['int8_t']; -} - -/* - * Sets the current endian value for the Parser. If the value is not valid, - * throws an Error. - * - * endian Either 'big' or 'little' do determine the endianness we - * want to read from or write to. - * - */ -CTypeParser.prototype.setEndian = function (endian) -{ - if (endian != 'big' && endian != 'little') - throw (new Error('invalid endian type, must be big or ' + - 'little')); - - this.endian = endian; -}; - -/* - * Returns the current value of the endian value for the parser. - */ -CTypeParser.prototype.getEndian = function () -{ - return (this.endian); -}; - -/* - * A user has requested to add a type, let us honor their request. Yet, if their - * request doth spurn us, send them unto the Hells which Dante describes. - * - * name The string for the type definition we're adding - * - * value Either a string that is a type/array name or an object - * that describes a struct. - */ -CTypeParser.prototype.typedef = function (name, value) -{ - var type; - - if (name === undefined) - throw (new (Error('missing required typedef argument: name'))); - - if (value === undefined) - throw (new (Error('missing required typedef argument: value'))); - - if (typeof (name) != 'string') - throw (new (Error('the name of a type must be a string'))); - - type = ctParseType(name); - - if (type['len'] !== undefined) - throw (new Error('Cannot have an array in the typedef name')); - - if (name in this.types) - throw (new Error('typedef name already present: ' + name)); - - if (typeof (value) != 'string' && !(value instanceof Array)) - throw (new Error('typedef value must either be a string or ' + - 'struct')); - - if (typeof (value) == 'string') { - type = ctParseType(value); - if (type['len'] !== undefined) { - if (isNaN(parseInt(type['len'], 10))) - throw (new (Error('typedef value must use ' + - 'fixed size array when outside of a ' + - 'struct'))); - } - - this.types[name] = value; - } else { - /* We have a struct, validate it */ - ctCheckReq(value, this.types); - this.types[name] = value; - } -}; - -/* - * Include all of the typedefs, but none of the built in types. This should be - * treated as read-only. - */ -CTypeParser.prototype.lstypes = function () -{ - var key; - var ret = {}; - - for (key in this.types) { - if (key in deftypes) - continue; - ret[key] = this.types[key]; - } - - return (ret); -}; - -/* - * Given a type string that may have array types that aren't numbers, try and - * fill them in from the values object. The object should be of the format where - * indexing into it should return a number for that type. - * - * str The type string - * - * values An object that can be used to fulfill type information - */ -function ctResolveArray(str, values) -{ - var ret = ''; - var type = ctParseType(str); - - while (type['len'] !== undefined) { - if (isNaN(parseInt(type['len'], 10))) { - if (typeof (values[type['len']]) != 'number') - throw (new Error('cannot sawp in non-number ' + - 'for array value')); - ret = '[' + values[type['len']] + ']' + ret; - } else { - ret = '[' + type['len'] + ']' + ret; - } - type = ctParseType(type['type']); - } - - ret = type['type'] + ret; - - return (ret); -} - -/* - * [private] Either the typedef resolves to another type string or to a struct. - * If it resolves to a struct, we just pass it off to read struct. If not, we - * can just pass it off to read entry. - */ -CTypeParser.prototype.resolveTypedef = function (type, dispatch, buffer, - offset, value) -{ - var pt; - - mod_assert.ok(type in this.types); - if (typeof (this.types[type]) == 'string') { - pt = ctParseType(this.types[type]); - if (dispatch == 'read') - return (this.readEntry(pt, buffer, offset)); - else if (dispatch == 'write') - return (this.writeEntry(value, pt, buffer, offset)); - else - throw (new Error('invalid dispatch type to ' + - 'resolveTypedef')); - } else { - if (dispatch == 'read') - return (this.readStruct(this.types[type], buffer, - offset)); - else if (dispatch == 'write') - return (this.writeStruct(value, this.types[type], - buffer, offset)); - else - throw (new Error('invalid dispatch type to ' + - 'resolveTypedef')); - } - -}; - -/* - * [private] Try and read in the specific entry. - */ -CTypeParser.prototype.readEntry = function (type, buffer, offset) -{ - var parse, len; - - /* - * Because we want to special case char[]s this is unfortunately - * a bit uglier than it really should be. We want to special - * case char[]s so that we return a node buffer, thus they are a - * first class type where as all other arrays just call into a - * generic array routine which calls their data-specific routine - * the specified number of times. - * - * The valid dispatch options we have are: - * - Array and char => char[] handler - * - Generic array handler - * - Generic typedef handler - * - Basic type handler - */ - if (type['len'] !== undefined) { - len = parseInt(type['len'], 10); - if (isNaN(len)) - throw (new Error('somehow got a non-numeric length')); - - if (type['type'] == 'char') - parse = this.types['char[]']['read'](len, - this.endian, buffer, offset); - else - parse = this.readArray(type['type'], - len, buffer, offset); - } else { - if (type['type'] in deftypes) - parse = this.types[type['type']]['read'](this.endian, - buffer, offset); - else - parse = this.resolveTypedef(type['type'], 'read', - buffer, offset); - } - - return (parse); -}; - -/* - * [private] Read an array of data - */ -CTypeParser.prototype.readArray = function (type, length, buffer, offset) -{ - var ii, ent, pt; - var baseOffset = offset; - var ret = new Array(length); - pt = ctParseType(type); - - for (ii = 0; ii < length; ii++) { - ent = this.readEntry(pt, buffer, offset); - offset += ent['size']; - ret[ii] = ent['value']; - } - - return ({ value: ret, size: offset - baseOffset }); -}; - -/* - * [private] Read a single struct in. - */ -CTypeParser.prototype.readStruct = function (def, buffer, offset) -{ - var parse, ii, type, entry, key; - var baseOffset = offset; - var ret = {}; - - /* Walk it and handle doing what's necessary */ - for (ii = 0; ii < def.length; ii++) { - key = Object.keys(def[ii])[0]; - entry = def[ii][key]; - - /* Resolve all array values */ - type = ctParseType(ctResolveArray(entry['type'], ret)); - - if ('offset' in entry) - offset = baseOffset + entry['offset']; - - parse = this.readEntry(type, buffer, offset); - - offset += parse['size']; - ret[key] = parse['value']; - } - - return ({ value: ret, size: (offset-baseOffset)}); -}; - -/* - * This is what we were born to do. We read the data from a buffer and return it - * in an object whose keys match the values from the object. - * - * def The array definition of the data to read in - * - * buffer The buffer to read data from - * - * offset The offset to start writing to - * - * Returns an object where each key corresponds to an entry in def and the value - * is the read value. - */ -CTypeParser.prototype.readData = function (def, buffer, offset) -{ - /* Sanity check for arguments */ - if (def === undefined) - throw (new Error('missing definition for what we should be' + - 'parsing')); - - if (buffer === undefined) - throw (new Error('missing buffer for what we should be ' + - 'parsing')); - - if (offset === undefined) - throw (new Error('missing offset for what we should be ' + - 'parsing')); - - /* Sanity check the object definition */ - ctCheckReq(def, this.types); - - return (this.readStruct(def, buffer, offset)['value']); -}; - -/* - * [private] Write out an array of data - */ -CTypeParser.prototype.writeArray = function (value, type, length, buffer, - offset) -{ - var ii, pt; - var baseOffset = offset; - if (!(value instanceof Array)) - throw (new Error('asked to write an array, but value is not ' + - 'an array')); - - if (value.length != length) - throw (new Error('asked to write array of length ' + length + - ' but that does not match value length: ' + value.length)); - - pt = ctParseType(type); - for (ii = 0; ii < length; ii++) - offset += this.writeEntry(value[ii], pt, buffer, offset); - - return (offset - baseOffset); -}; - -/* - * [private] Write the specific entry - */ -CTypeParser.prototype.writeEntry = function (value, type, buffer, offset) -{ - var len, ret; - - if (type['len'] !== undefined) { - len = parseInt(type['len'], 10); - if (isNaN(len)) - throw (new Error('somehow got a non-numeric length')); - - if (type['type'] == 'char') - ret = this.types['char[]']['write'](value, len, - this.endian, buffer, offset); - else - ret = this.writeArray(value, type['type'], - len, buffer, offset); - } else { - if (type['type'] in deftypes) - ret = this.types[type['type']]['write'](value, - this.endian, buffer, offset); - else - ret = this.resolveTypedef(type['type'], 'write', - buffer, offset, value); - } - - return (ret); -}; - -/* - * [private] Write a single struct out. - */ -CTypeParser.prototype.writeStruct = function (value, def, buffer, offset) -{ - var ii, entry, type, key; - var baseOffset = offset; - var vals = {}; - - for (ii = 0; ii < def.length; ii++) { - key = Object.keys(def[ii])[0]; - entry = def[ii][key]; - - type = ctParseType(ctResolveArray(entry['type'], vals)); - - if ('offset' in entry) - offset = baseOffset + entry['offset']; - - offset += this.writeEntry(value[ii], type, buffer, offset); - /* Now that we've written it out, we can use it for arrays */ - vals[key] = value[ii]; - } - - return (offset); -}; - -/* - * Unfortunately, we're stuck with the sins of an initial poor design. Because - * of that, we are going to have to support the old way of writing data via - * writeData. There we insert the values that you want to write into the - * definition. A little baroque. Internally, we use the new model. So we need to - * just get those values out of there. But to maintain the principle of least - * surprise, we're not going to modify the input data. - */ -function getValues(def) -{ - var ii, out, key; - out = []; - for (ii = 0; ii < def.length; ii++) { - key = Object.keys(def[ii])[0]; - mod_assert.ok('value' in def[ii][key]); - out.push(def[ii][key]['value']); - } - - return (out); -} - -/* - * This is the second half of what we were born to do, write out the data - * itself. Historically this function required you to put your values in the - * definition section. This was not the smartest thing to do and a bit of an - * oversight to be honest. As such, this function now takes a values argument. - * If values is non-null and non-undefined, it will be used to determine the - * values. This means that the old method is still supported, but is no longer - * acceptable. - * - * def The array definition of the data to write out with - * values - * - * buffer The buffer to write to - * - * offset The offset in the buffer to write to - * - * values An array of values to write. - */ -CTypeParser.prototype.writeData = function (def, buffer, offset, values) -{ - var hv; - - if (def === undefined) - throw (new Error('missing definition for what we should be' + - 'parsing')); - - if (buffer === undefined) - throw (new Error('missing buffer for what we should be ' + - 'parsing')); - - if (offset === undefined) - throw (new Error('missing offset for what we should be ' + - 'parsing')); - - hv = (values != null && values != undefined); - if (hv) { - if (!Array.isArray(values)) - throw (new Error('missing values for writing')); - ctCheckReq(def, this.types); - } else { - ctCheckReq(def, this.types, [ 'value' ]); - } - - this.writeStruct(hv ? values : getValues(def), def, buffer, offset); -}; - -/* - * Functions to go to and from 64 bit numbers in a way that is compatible with - * Javascript limitations. There are two sets. One where the user is okay with - * an approximation and one where they are definitely not okay with an - * approximation. - */ - -/* - * Attempts to convert an array of two integers returned from rsint64 / ruint64 - * into an absolute 64 bit number. If however the value would exceed 2^52 this - * will instead throw an error. The mantissa in a double is a 52 bit number and - * rather than potentially give you a value that is an approximation this will - * error. If you would rather an approximation, please see toApprox64. - * - * val An array of two 32-bit integers - */ -function toAbs64(val) -{ - if (val === undefined) - throw (new Error('missing required arg: value')); - - if (!Array.isArray(val)) - throw (new Error('value must be an array')); - - if (val.length != 2) - throw (new Error('value must be an array of length 2')); - - /* We have 20 bits worth of precision in this range */ - if (val[0] >= 0x100000) - throw (new Error('value would become approximated')); - - return (val[0] * Math.pow(2, 32) + val[1]); -} - -/* - * Will return the 64 bit value as returned in an array from rsint64 / ruint64 - * to a value as close as it can. Note that Javascript stores all numbers as a - * double and the mantissa only has 52 bits. Thus this version may approximate - * the value. - * - * val An array of two 32-bit integers - */ -function toApprox64(val) -{ - if (val === undefined) - throw (new Error('missing required arg: value')); - - if (!Array.isArray(val)) - throw (new Error('value must be an array')); - - if (val.length != 2) - throw (new Error('value must be an array of length 2')); - - return (Math.pow(2, 32) * val[0] + val[1]); -} - -function parseCTF(json, conf) -{ - var ctype = new CTypeParser(conf); - mod_ctf.ctfParseJson(json, ctype); - - return (ctype); -} - -/* - * Export the few things we actually want to. Currently this is just the CType - * Parser and ctio. - */ -exports.Parser = CTypeParser; -exports.toAbs64 = toAbs64; -exports.toApprox64 = toApprox64; - -exports.parseCTF = parseCTF; - -exports.ruint8 = mod_ctio.ruint8; -exports.ruint16 = mod_ctio.ruint16; -exports.ruint32 = mod_ctio.ruint32; -exports.ruint64 = mod_ctio.ruint64; -exports.wuint8 = mod_ctio.wuint8; -exports.wuint16 = mod_ctio.wuint16; -exports.wuint32 = mod_ctio.wuint32; -exports.wuint64 = mod_ctio.wuint64; - -exports.rsint8 = mod_ctio.rsint8; -exports.rsint16 = mod_ctio.rsint16; -exports.rsint32 = mod_ctio.rsint32; -exports.rsint64 = mod_ctio.rsint64; -exports.wsint8 = mod_ctio.wsint8; -exports.wsint16 = mod_ctio.wsint16; -exports.wsint32 = mod_ctio.wsint32; -exports.wsint64 = mod_ctio.wsint64; - -exports.rfloat = mod_ctio.rfloat; -exports.rdouble = mod_ctio.rdouble; -exports.wfloat = mod_ctio.wfloat; -exports.wdouble = mod_ctio.wdouble; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype deleted file mode 100644 index 3f94986a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype +++ /dev/null @@ -1,241 +0,0 @@ -'\" te -.\" Copyright (c) 2011, Robert Mustacchi. All Rights Reserved. -.\" Copyright (c) 2011, Joyent, Inc. 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. -.TH CTIO 3CTYPE "December 12, 2011" -.SH NAME -ctio, ruint8, ruint16, ruint32, ruint64, wuint8, wuint16, wuint32, wuint64, -rsint8, rsint16, rsint32, rsint64, wsint8, wsint16, wsint32, wsint64, rfloat, -rdouble, wfloat, wdouble \- integer and float operations -.SH SYNOPSIS -.LP -.nf -var mod_ctype = require('ctype'); - -\fBNumber\fR \fBmod_ctype.ruint8\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.ruint16\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.ruint32\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber[2]\fR \fBmod_ctype.ruint64\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rsint8\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rsint16\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rsint32\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber[2]\fR \fBmod_ctype.rsint64\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rfloat\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBNumber\fR \fBmod_ctype.rdouble\fR(\fBBuffer\fR \fIbuf\fR, \fBString\fR \fIendian\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wuint8\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wuint16\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wuint32\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wuint64\fR(\fBNumber[2]\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wsint8\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wsint16\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wsint32\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wsint64\fR(\fBNumber[2]\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wfloat\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.LP -.nf -\fBvoid\fR \fBmod_ctype.wdouble\fR(\fBNumber\fR value, \fBString\fR \fIendian\fR, \fBBuffer\fR \fIbuf\fR, \fBNumber\fR \fIoffset\fR); -.fi - -.SH DESCRIPTION -.sp -.LP -The argument \fIbuf\fR refers to a valid buffer (from calling new Buffer()). The -argument \fIendian\fR is either the string 'big' or 'little' and controls -whether the data in the buffer is interpreted as big or little endian. The argument -\fIoffset\fR indicates the starting index into the buffer to read or write. All -functions ensure that starting at \fIoffset\fR does not overflow the end of the -buffer. The argument \fIvalue\fR is a Number that is the valid type for the -specific function. All functions that take \fIvalue\fR as an argument, verify -that the passed value is valid. - -.SS "\fBruint8()\fR, \fBruint16()\fR, \fBruint32()\fR" -.sp -.LP -The \fBruint8()\fR, \fBruint16()\fR, and \fBruint32()\fR functions read an 8, -16, and 32-bit unsigned value from \fIbuf\fR and return it. The value read is -influenced by the values of \fIoffset\fR and \fRendian\fI. - - -.SS "\fBrsint8()\fR, \fBrsint16()\fR, \fBrsint32()\fR" -.sp -.LP -The \fBruint8()\fR, \fBruint16()\fR, and \fBruint32()\fR functions work just as -\fBruint8()\fR, \fBruint16()\fR, and \fBruint32()\fR, except they return signed -integers. - -.SS "\fBruint64()\fR, \fBrsint64()\fR" -.sp -.LP -The \fBruint64()\fR and \fBrsint64()\fR functions read unsigned and signed 64 -bit integers respectively from \fBbuf\fR. Due to the limitations of ECMAScript's -\fBNumber\fR type, they cannot be stored as one value without a loss of -precision. Instead of returning the values as a single \fBNumber\fR, the -functions return an array of two numbers. The first entry always contains the -upper 32-bits and the second value contains the lower 32-bits. The lossy -transformation into a number would be \fIres[0]*Math.pow(2,32)+res[1]\fR. -Note that, unless an entry is zero, both array entries are guaranteed to have -the same sign. - -.SS "\fBwuint8()\fR, \fBwuint16()\fR, \fBwuint32()\fR" -.sp -.LP -The functions \fBwuint8()\fR, \fBwuint16()\fR, and \fBwuint32()\fR modify the -contents of \fBbuf\fR by writing an 8, 16, and 32-bit unsigned integer -respectively to \fBbuf\fR. It is illegal to pass a number that is not an integer -within the domain of the integer size, for example, for \fBwuint8()\fR the valid -range is \fB[0, 255]\fR. The value will be written in either big or little -endian format based upon the value of \fBendian\fR. - - -.SS "\fBwsint8()\fR, \fBwsint16()\fR, \fBwsint32()\fR" -.sp -.LP -The functions \fBwsint8()\fR, \fBwsint16()\fR, and \fBwsint32()\fR function -identically to the functions \fBwuint8()\fR, \fBwuint16()\fR, and -\fBwuint32()\fR except that they the valid domain for \fBvalue\fR is that of a -signed number instead of an unsigned number. For example the \fBwsint8()\fR has -a domain of \fB[-128, 127]\fR. - -.SS "\fBwuint64()\fR, \fBwsint64()\fR" -.sp -.LP -The functions \fBwuint64()\fR and \fBswint64()\fR write out 64-bit unsigned and -signed integers to \fBbuf\fR. The \fBvalue\fR argument must be in the same -format as described in \fBruint64()\fR and \fBrsint64()\fR. - -.SS "\fBrfloat()\fR, \fBrdouble()\fR" -.sp -.LP -The functions "\fBrfloat()\fR and \fBrdouble()\fR" work like the other read -functions, except that they read a single precision and double precision -IEEE-754 floating point value instead. - -.SS "\fBwfloat()\fR, \fBwdouble()\fR" -.sp -.LP -The functions "\fBrfloat()\fR and \fBrdouble()\fR" work like the other write -functions, except that the domain for a float is that of a single precision 4 -byte value. The domain for a double is any \fBNumber\fR in ECMAScript, which is -defined to be represented by a double. - -.SH ATTRIBUTES -.sp -.LP -See \fBattributes\fR(5) for descriptions of the following attributes: -.sp - -.sp -.TS -box; -c | c -l | l . -ATTRIBUTE TYPE ATTRIBUTE VALUE -_ -Interface Stability Committed -_ -MT-Level See below. -_ -Standard Not standardized. -.TE - -.sp -.LP - -All functions are MT-safe in so far as there aren't shared memory MT concerns in -most node programs. If one where to concoct such an environment, these functions -wouldn't be MT-safe. - -.SH SEE ALSO -.sp -.LP diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json deleted file mode 100644 index 90d917e2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "ctype", - "version": "0.5.2", - "description": "read and write binary structures and data types", - "homepage": "https://github.com/rmustacc/node-ctype", - "author": { - "name": "Robert Mustacchi", - "email": "rm@fingolfin.org" - }, - "engines": { - "node": ">= 0.4" - }, - "main": "ctype.js", - "readme": "Node-CType is a way to read and write binary data in structured and easy to use\nformat. Its name comes from the C header file.\n\nTo get started, simply clone the repository or use npm to install it. Once it is\nthere, simply require it.\n\ngit clone git://github.com/rmustacc/node-ctype\nnpm install ctype\nvar mod_ctype = require('ctype')\n\n\nThere are two APIs that you can use, depending on what abstraction you'd like.\nThe low level API let's you read and write individual integers and floats from\nbuffers. The higher level API let's you read and write structures of these. To\nillustrate this, let's looks look at how we would read and write a binary\nencoded x,y point.\n\nIn C we would define this structure as follows:\n\ntypedef struct point {\n\tuint16_t\tp_x;\n\tuint16_t\tp_y;\n} point_t;\n\nTo read a binary encoded point from a Buffer, we first need to create a CType\nparser (where we specify the endian and other options) and add the typedef.\n\nvar parser = new mod_ctype.Parser({ endian: 'big' });\nparser.typedef('point_t', [\n\t{ x: { type: 'uint16_t' } },\n\t{ y: { type: 'uint16_t' } }\n]);\n\nFrom here, given a buffer buf and an offset into it, we can read a point.\n\nvar out = parser.readData([ { point: { type: 'point_t' } } ], buffer, 0);\nconsole.log(out);\n{ point: { x: 23, y: 42 } }\n\nAnother way to get the same information would be to use the low level methods.\nNote that these require you to manually deal with the offset. Here's how we'd\nget the same values of x and y from the buffer.\n\nvar x = mod_ctype.ruint16(buf, 'big', 0);\nvar y = mod_ctype.ruint16(buf, 'big', 2);\nconsole.log(x + ', ' + y);\n23, 42\n\nThe true power of this API comes from the ability to define and nest typedefs,\njust as you would in C. By default, the following types are defined by default.\nNote that they return a Number, unless indicated otherwise.\n\n * int8_t\n * int16_t\n * int32_t\n * int64_t (returns an array where val[0] << 32 + val[1] would be the value)\n * uint8_t\n * uint16_t\n * uint32_t\n * uint64_t (returns an array where val[0] << 32 + val[1] would be the value)\n * float\n * double\n * char (either returns a buffer with that character or a uint8_t)\n * char[] (returns an object with the buffer and the number of characters read which is either the total amount requested or until the first 0)\n\n\nctf2json integration:\n\nNode-CType supports consuming the output of ctf2json. Once you read in a JSON file,\nall you have to do to add all the definitions it contains is:\n\nvar data, parser;\ndata = JSON.parse(parsedJSONData);\nparser = mod_ctype.parseCTF(data, { endian: 'big' });\n\nFor more documentation, see the file README.old. Full documentation is in the\nprocess of being rewritten as a series of manual pages which will be available\nin the repository and online for viewing.\n\nTo read the ctio manual page simple run, from the root of the workspace:\n\nman -Mman -s 3ctype ctio\n", - "readmeFilename": "README", - "_id": "ctype@0.5.2", - "dist": { - "shasum": "c2ddce3ef5e24701c870d46f42c33b116c8f67da" - }, - "_from": "ctype@0.5.2", - "_resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf deleted file mode 100755 index 845f367a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf +++ /dev/null @@ -1,129 +0,0 @@ -# -# Configuration File for JavaScript Lint 0.3.0 -# Developed by Matthias Miller (http://www.JavaScriptLint.com) -# -# This configuration file can be used to lint a collection of scripts, or to enable -# or disable warnings for scripts that are linted via the command line. -# - -### Warnings -# Enable or disable warnings based on requirements. -# Use "+WarningName" to display or "-WarningName" to suppress. -# -+no_return_value # function {0} does not always return a value -+duplicate_formal # duplicate formal argument {0} -+equal_as_assign # test for equality (==) mistyped as assignment (=)?{0} -+var_hides_arg # variable {0} hides argument -+redeclared_var # redeclaration of {0} {1} -+anon_no_return_value # anonymous function does not always return a value -+missing_semicolon # missing semicolon -+meaningless_block # meaningless block; curly braces have no impact -+comma_separated_stmts # multiple statements separated by commas (use semicolons?) -+unreachable_code # unreachable code -+missing_break # missing break statement -+missing_break_for_last_case # missing break statement for last case in switch -+comparison_type_conv # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==) --inc_dec_within_stmt # increment (++) and decrement (--) operators used as part of greater statement -+useless_void # use of the void type may be unnecessary (void is always undefined) --useless_quotes # quotation marks are unnecessary -+multiple_plus_minus # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs -+use_of_label # use of label --block_without_braces # block statement without curly braces -+leading_decimal_point # leading decimal point may indicate a number or an object member -+trailing_decimal_point # trailing decimal point may indicate a number or an object member --octal_number # leading zeros make an octal number -+nested_comment # nested comment -+misplaced_regex # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma -+ambiguous_newline # unexpected end of line; it is ambiguous whether these lines are part of the same statement -+empty_statement # empty statement or extra semicolon --missing_option_explicit # the "option explicit" control comment is missing -+partial_option_explicit # the "option explicit" control comment, if used, must be in the first script tag -+dup_option_explicit # duplicate "option explicit" control comment -+useless_assign # useless assignment -+ambiguous_nested_stmt # block statements containing block statements should use curly braces to resolve ambiguity -+ambiguous_else_stmt # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent) -+missing_default_case # missing default case in switch statement -+duplicate_case_in_switch # duplicate case in switch statements -+default_not_at_end # the default case is not at the end of the switch statement -+legacy_cc_not_understood # couldn't understand control comment using /*@keyword@*/ syntax -+jsl_cc_not_understood # couldn't understand control comment using /*jsl:keyword*/ syntax -+useless_comparison # useless comparison; comparing identical expressions -+with_statement # with statement hides undeclared variables; use temporary variable instead -+trailing_comma_in_array # extra comma is not recommended in array initializers -+assign_to_function_call # assignment to a function call -+parseint_missing_radix # parseInt missing radix parameter --unreferenced_argument # argument declared but never referenced: {name} - -### Output format -# Customize the format of the error message. -# __FILE__ indicates current file path -# __FILENAME__ indicates current file name -# __LINE__ indicates current line -# __ERROR__ indicates error message -# -# Visual Studio syntax (default): -+output-format __FILE__(__LINE__): __ERROR__ -# Alternative syntax: -#+output-format __FILE__:__LINE__: __ERROR__ - - -### Context -# Show the in-line position of the error. -# Use "+context" to display or "-context" to suppress. -# -+context - - -### Semicolons -# By default, assignments of an anonymous function to a variable or -# property (such as a function prototype) must be followed by a semicolon. -# -#+lambda_assign_requires_semicolon # deprecated setting - - -### Control Comments -# Both JavaScript Lint and the JScript interpreter confuse each other with the syntax for -# the /*@keyword@*/ control comments and JScript conditional comments. (The latter is -# enabled in JScript with @cc_on@). The /*jsl:keyword*/ syntax is preferred for this reason, -# although legacy control comments are enabled by default for backward compatibility. -# -+legacy_control_comments - - -### JScript Function Extensions -# JScript allows member functions to be defined like this: -# function MyObj() { /*constructor*/ } -# function MyObj.prototype.go() { /*member function*/ } -# -# It also allows events to be attached like this: -# function window::onload() { /*init page*/ } -# -# This is a Microsoft-only JavaScript extension. Enable this setting to allow them. -# -#-jscript_function_extensions # deprecated setting - - -### Defining identifiers -# By default, "option explicit" is enabled on a per-file basis. -# To enable this for all files, use "+always_use_option_explicit" --always_use_option_explicit - -# Define certain identifiers of which the lint is not aware. -# (Use this in conjunction with the "undeclared identifier" warning.) -# -# Common uses for webpages might be: -#+define window -#+define document -+define require -+define exports -+define console -+define Buffer -+define JSON - -### Files -# Specify which files to lint -# Use "+recurse" to enable recursion (disabled by default). -# To add a set of files, use "+process FileName", "+process Folder\Path\*.js", -# or "+process Folder\Path\*.htm". -# -#+process jsl-test.js diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle deleted file mode 100755 index 96c72b6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle +++ /dev/null @@ -1,839 +0,0 @@ -#!/usr/bin/env perl -# -# CDDL HEADER START -# -# The contents of this file are subject to the terms of the -# Common Development and Distribution License (the "License"). -# You may not use this file except in compliance with the License. -# -# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE -# or http://www.opensolaris.org/os/licensing. -# See the License for the specific language governing permissions -# and limitations under the License. -# -# When distributing Covered Code, include this CDDL HEADER in each -# file and include the License file at usr/src/OPENSOLARIS.LICENSE. -# If applicable, add the following below this CDDL HEADER, with the -# fields enclosed by brackets "[]" replaced with your own identifying -# information: Portions Copyright [yyyy] [name of copyright owner] -# -# CDDL HEADER END -# -# -# Copyright 2008 Sun Microsystems, Inc. All rights reserved. -# Use is subject to license terms. -# -# Copyright 2011 Joyent, Inc. All rights reserved. -# -# jsstyle - check for some common stylistic errors. -# -# jsstyle is a sort of "lint" for Javascript coding style. This tool is -# derived from the cstyle tool, used to check for the style used in the -# Solaris kernel, sometimes known as "Bill Joy Normal Form". -# -# There's a lot this can't check for, like proper indentation of code -# blocks. There's also a lot more this could check for. -# -# A note to the non perl literate: -# -# perl regular expressions are pretty much like egrep -# regular expressions, with the following special symbols -# -# \s any space character -# \S any non-space character -# \w any "word" character [a-zA-Z0-9_] -# \W any non-word character -# \d a digit [0-9] -# \D a non-digit -# \b word boundary (between \w and \W) -# \B non-word boundary -# - -require 5.0; -use IO::File; -use Getopt::Std; -use strict; - -my $usage = -"usage: jsstyle [-chvC] [-o constructs] file ... - -c check continuation indentation inside functions - -h perform heuristic checks that are sometimes wrong - -v verbose - -C don't check anything in header block comments - -o constructs - allow a comma-seperated list of optional constructs: - doxygen allow doxygen-style block comments (/** /*!) - splint allow splint-style lint comments (/*@ ... @*/) -"; - -my %opts; - -if (!getopts("cho:vC", \%opts)) { - print $usage; - exit 2; -} - -my $check_continuation = $opts{'c'}; -my $heuristic = $opts{'h'}; -my $verbose = $opts{'v'}; -my $ignore_hdr_comment = $opts{'C'}; - -my $doxygen_comments = 0; -my $splint_comments = 0; - -if (defined($opts{'o'})) { - for my $x (split /,/, $opts{'o'}) { - if ($x eq "doxygen") { - $doxygen_comments = 1; - } elsif ($x eq "splint") { - $splint_comments = 1; - } else { - print "jsstyle: unrecognized construct \"$x\"\n"; - print $usage; - exit 2; - } - } -} - -my ($filename, $line, $prev); # shared globals - -my $fmt; -my $hdr_comment_start; - -if ($verbose) { - $fmt = "%s: %d: %s\n%s\n"; -} else { - $fmt = "%s: %d: %s\n"; -} - -if ($doxygen_comments) { - # doxygen comments look like "/*!" or "/**"; allow them. - $hdr_comment_start = qr/^\s*\/\*[\!\*]?$/; -} else { - $hdr_comment_start = qr/^\s*\/\*$/; -} - -# Note, following must be in single quotes so that \s and \w work right. -my $lint_re = qr/\/\*(?: - jsl:\w+?|ARGSUSED[0-9]*|NOTREACHED|LINTLIBRARY|VARARGS[0-9]*| - CONSTCOND|CONSTANTCOND|CONSTANTCONDITION|EMPTY| - FALLTHRU|FALLTHROUGH|LINTED.*?|PRINTFLIKE[0-9]*| - PROTOLIB[0-9]*|SCANFLIKE[0-9]*|JSSTYLED.*? - )\*\//x; - -my $splint_re = qr/\/\*@.*?@\*\//x; - -my $err_stat = 0; # exit status - -if ($#ARGV >= 0) { - foreach my $arg (@ARGV) { - my $fh = new IO::File $arg, "r"; - if (!defined($fh)) { - printf "%s: cannot open\n", $arg; - } else { - &jsstyle($arg, $fh); - close $fh; - } - } -} else { - &jsstyle("<stdin>", *STDIN); -} -exit $err_stat; - -my $no_errs = 0; # set for JSSTYLED-protected lines - -sub err($) { - my ($error) = @_; - unless ($no_errs) { - printf $fmt, $filename, $., $error, $line; - $err_stat = 1; - } -} - -sub err_prefix($$) { - my ($prevline, $error) = @_; - my $out = $prevline."\n".$line; - unless ($no_errs) { - printf $fmt, $filename, $., $error, $out; - $err_stat = 1; - } -} - -sub err_prev($) { - my ($error) = @_; - unless ($no_errs) { - printf $fmt, $filename, $. - 1, $error, $prev; - $err_stat = 1; - } -} - -sub jsstyle($$) { - -my ($fn, $filehandle) = @_; -$filename = $fn; # share it globally - -my $in_cpp = 0; -my $next_in_cpp = 0; - -my $in_comment = 0; -my $in_header_comment = 0; -my $comment_done = 0; -my $in_function = 0; -my $in_function_header = 0; -my $in_declaration = 0; -my $note_level = 0; -my $nextok = 0; -my $nocheck = 0; - -my $in_string = 0; - -my ($okmsg, $comment_prefix); - -$line = ''; -$prev = ''; -reset_indent(); - -line: while (<$filehandle>) { - s/\r?\n$//; # strip return and newline - - # save the original line, then remove all text from within - # double or single quotes, we do not want to check such text. - - $line = $_; - - # - # C allows strings to be continued with a backslash at the end of - # the line. We translate that into a quoted string on the previous - # line followed by an initial quote on the next line. - # - # (we assume that no-one will use backslash-continuation with character - # constants) - # - $_ = '"' . $_ if ($in_string && !$nocheck && !$in_comment); - - # - # normal strings and characters - # - s/'([^\\']|\\.)*'/\'\'/g; - s/"([^\\"]|\\.)*"/\"\"/g; - - # - # detect string continuation - # - if ($nocheck || $in_comment) { - $in_string = 0; - } else { - # - # Now that all full strings are replaced with "", we check - # for unfinished strings continuing onto the next line. - # - $in_string = - (s/([^"](?:"")*)"([^\\"]|\\.)*\\$/$1""/ || - s/^("")*"([^\\"]|\\.)*\\$/""/); - } - - # - # figure out if we are in a cpp directive - # - $in_cpp = $next_in_cpp || /^\s*#/; # continued or started - $next_in_cpp = $in_cpp && /\\$/; # only if continued - - # strip off trailing backslashes, which appear in long macros - s/\s*\\$//; - - # an /* END JSSTYLED */ comment ends a no-check block. - if ($nocheck) { - if (/\/\* *END *JSSTYLED *\*\//) { - $nocheck = 0; - } else { - reset_indent(); - next line; - } - } - - # a /*JSSTYLED*/ comment indicates that the next line is ok. - if ($nextok) { - if ($okmsg) { - err($okmsg); - } - $nextok = 0; - $okmsg = 0; - if (/\/\* *JSSTYLED.*\*\//) { - /^.*\/\* *JSSTYLED *(.*) *\*\/.*$/; - $okmsg = $1; - $nextok = 1; - } - $no_errs = 1; - } elsif ($no_errs) { - $no_errs = 0; - } - - # check length of line. - # first, a quick check to see if there is any chance of being too long. - if (($line =~ tr/\t/\t/) * 7 + length($line) > 80) { - # yes, there is a chance. - # replace tabs with spaces and check again. - my $eline = $line; - 1 while $eline =~ - s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e; - if (length($eline) > 80) { - err("line > 80 characters"); - } - } - - # ignore NOTE(...) annotations (assumes NOTE is on lines by itself). - if ($note_level || /\b_?NOTE\s*\(/) { # if in NOTE or this is NOTE - s/[^()]//g; # eliminate all non-parens - $note_level += s/\(//g - length; # update paren nest level - next; - } - - # a /* BEGIN JSSTYLED */ comment starts a no-check block. - if (/\/\* *BEGIN *JSSTYLED *\*\//) { - $nocheck = 1; - } - - # a /*JSSTYLED*/ comment indicates that the next line is ok. - if (/\/\* *JSSTYLED.*\*\//) { - /^.*\/\* *JSSTYLED *(.*) *\*\/.*$/; - $okmsg = $1; - $nextok = 1; - } - if (/\/\/ *JSSTYLED/) { - /^.*\/\/ *JSSTYLED *(.*)$/; - $okmsg = $1; - $nextok = 1; - } - - # universal checks; apply to everything - if (/\t +\t/) { - err("spaces between tabs"); - } - if (/ \t+ /) { - err("tabs between spaces"); - } - if (/\s$/) { - err("space or tab at end of line"); - } - if (/[^ \t(]\/\*/ && !/\w\(\/\*.*\*\/\);/) { - err("comment preceded by non-blank"); - } - - # is this the beginning or ending of a function? - # (not if "struct foo\n{\n") - if (/^{$/ && $prev =~ /\)\s*(const\s*)?(\/\*.*\*\/\s*)?\\?$/) { - $in_function = 1; - $in_declaration = 1; - $in_function_header = 0; - $prev = $line; - next line; - } - if (/^}\s*(\/\*.*\*\/\s*)*$/) { - if ($prev =~ /^\s*return\s*;/) { - err_prev("unneeded return at end of function"); - } - $in_function = 0; - reset_indent(); # we don't check between functions - $prev = $line; - next line; - } - if (/^\w*\($/) { - $in_function_header = 1; - } - - # a blank line terminates the declarations within a function. - # XXX - but still a problem in sub-blocks. - if ($in_declaration && /^$/) { - $in_declaration = 0; - } - - if ($comment_done) { - $in_comment = 0; - $in_header_comment = 0; - $comment_done = 0; - } - # does this looks like the start of a block comment? - if (/$hdr_comment_start/) { - if (!/^\t*\/\*/) { - err("block comment not indented by tabs"); - } - $in_comment = 1; - /^(\s*)\//; - $comment_prefix = $1; - if ($comment_prefix eq "") { - $in_header_comment = 1; - } - $prev = $line; - next line; - } - # are we still in the block comment? - if ($in_comment) { - if (/^$comment_prefix \*\/$/) { - $comment_done = 1; - } elsif (/\*\//) { - $comment_done = 1; - err("improper block comment close") - unless ($ignore_hdr_comment && $in_header_comment); - } elsif (!/^$comment_prefix \*[ \t]/ && - !/^$comment_prefix \*$/) { - err("improper block comment") - unless ($ignore_hdr_comment && $in_header_comment); - } - } - - if ($in_header_comment && $ignore_hdr_comment) { - $prev = $line; - next line; - } - - # check for errors that might occur in comments and in code. - - # allow spaces to be used to draw pictures in header comments. - #if (/[^ ] / && !/".* .*"/ && !$in_header_comment) { - # err("spaces instead of tabs"); - #} - #if (/^ / && !/^ \*[ \t\/]/ && !/^ \*$/ && - # (!/^ \w/ || $in_function != 0)) { - # err("indent by spaces instead of tabs"); - #} - if (/^ {2,}/ && !/^ [^ ]/) { - err("indent by spaces instead of tabs"); - } - if (/^\t+ [^ \t\*]/ || /^\t+ \S/ || /^\t+ \S/) { - err("continuation line not indented by 4 spaces"); - } - - if (/^\s*\/\*./ && !/^\s*\/\*.*\*\// && !/$hdr_comment_start/) { - err("improper first line of block comment"); - } - - if ($in_comment) { # still in comment, don't do further checks - $prev = $line; - next line; - } - - if ((/[^(]\/\*\S/ || /^\/\*\S/) && - !(/$lint_re/ || ($splint_comments && /$splint_re/))) { - err("missing blank after open comment"); - } - if (/\S\*\/[^)]|\S\*\/$/ && - !(/$lint_re/ || ($splint_comments && /$splint_re/))) { - err("missing blank before close comment"); - } - if (/\/\/\S/) { # C++ comments - err("missing blank after start comment"); - } - # check for unterminated single line comments, but allow them when - # they are used to comment out the argument list of a function - # declaration. - if (/\S.*\/\*/ && !/\S.*\/\*.*\*\// && !/\(\/\*/) { - err("unterminated single line comment"); - } - - if (/^(#else|#endif|#include)(.*)$/) { - $prev = $line; - next line; - } - - # - # delete any comments and check everything else. Note that - # ".*?" is a non-greedy match, so that we don't get confused by - # multiple comments on the same line. - # - s/\/\*.*?\*\///g; - s/\/\/.*$//; # C++ comments - - # delete any trailing whitespace; we have already checked for that. - s/\s*$//; - - # following checks do not apply to text in comments. - if (/"/) { - err("literal string using double-quote instead of single"); - } - - if (/[^=!<>\s][!<>=]=/ || /[^<>!=][!<>=]==?[^\s,=]/ || - (/[^->]>[^,=>\s]/ && !/[^->]>$/) || - (/[^<]<[^,=<\s]/ && !/[^<]<$/) || - /[^<\s]<[^<]/ || /[^->\s]>[^>]/) { - err("missing space around relational operator"); - } - if (/\S>>=/ || /\S<<=/ || />>=\S/ || /<<=\S/ || /\S[-+*\/&|^%]=/ || - (/[^-+*\/&|^%!<>=\s]=[^=]/ && !/[^-+*\/&|^%!<>=\s]=$/) || - (/[^!<>=]=[^=\s]/ && !/[^!<>=]=$/)) { - # XXX - should only check this for C++ code - # XXX - there are probably other forms that should be allowed - if (!/\soperator=/) { - err("missing space around assignment operator"); - } - } - if (/[,;]\S/ && !/\bfor \(;;\)/) { - err("comma or semicolon followed by non-blank"); - } - # allow "for" statements to have empty "while" clauses - if (/\s[,;]/ && !/^[\t]+;$/ && !/^\s*for \([^;]*; ;[^;]*\)/) { - err("comma or semicolon preceded by blank"); - } - if (/^\s*(&&|\|\|)/) { - err("improper boolean continuation"); - } - if (/\S *(&&|\|\|)/ || /(&&|\|\|) *\S/) { - err("more than one space around boolean operator"); - } - if (/\b(delete|typeof|instanceOf|throw|with|catch|new|function|in|for|if|while|switch|return|case)\(/) { - err("missing space between keyword and paren"); - } - if (/(\b(catch|for|if|with|while|switch|return)\b.*){2,}/) { - # multiple "case" and "sizeof" allowed - err("more than one keyword on line"); - } - if (/\b(delete|typeof|instanceOf|with|throw|catch|new|function|in|for|if|while|switch|return|case)\s\s+\(/ && - !/^#if\s+\(/) { - err("extra space between keyword and paren"); - } - # try to detect "func (x)" but not "if (x)" or - # "#define foo (x)" or "int (*func)();" - if (/\w\s\(/) { - my $s = $_; - # strip off all keywords on the line - s/\b(delete|typeof|instanceOf|throw|with|catch|new|function|in|for|if|while|switch|return|case)\s\(/XXX(/g; - s/#elif\s\(/XXX(/g; - s/^#define\s+\w+\s+\(/XXX(/; - # do not match things like "void (*f)();" - # or "typedef void (func_t)();" - s/\w\s\(+\*/XXX(*/g; - s/\b(void)\s+\(+/XXX(/og; - if (/\w\s\(/) { - err("extra space between function name and left paren"); - } - $_ = $s; - } - - if (/^\s*return\W[^;]*;/ && !/^\s*return\s*\(.*\);/) { - err("unparenthesized return expression"); - } - if (/\btypeof\b/ && !/\btypeof\s*\(.*\)/) { - err("unparenthesized typeof expression"); - } - if (/\(\s/) { - err("whitespace after left paren"); - } - # allow "for" statements to have empty "continue" clauses - if (/\s\)/ && !/^\s*for \([^;]*;[^;]*; \)/) { - err("whitespace before right paren"); - } - if (/^\s*\(void\)[^ ]/) { - err("missing space after (void) cast"); - } - if (/\S{/ && !/({|\(){/) { - err("missing space before left brace"); - } - if ($in_function && /^\s+{/ && - ($prev =~ /\)\s*$/ || $prev =~ /\bstruct\s+\w+$/)) { - err("left brace starting a line"); - } - if (/}(else|while)/) { - err("missing space after right brace"); - } - if (/}\s\s+(else|while)/) { - err("extra space after right brace"); - } - if (/^\s+#/) { - err("preprocessor statement not in column 1"); - } - if (/^#\s/) { - err("blank after preprocessor #"); - } - - # - # We completely ignore, for purposes of indentation: - # * lines outside of functions - # * preprocessor lines - # - if ($check_continuation && $in_function && !$in_cpp) { - process_indent($_); - } - - if ($heuristic) { - # cannot check this everywhere due to "struct {\n...\n} foo;" - if ($in_function && !$in_declaration && - /}./ && !/}\s+=/ && !/{.*}[;,]$/ && !/}(\s|)*$/ && - !/} (else|while)/ && !/}}/) { - err("possible bad text following right brace"); - } - # cannot check this because sub-blocks in - # the middle of code are ok - if ($in_function && /^\s+{/) { - err("possible left brace starting a line"); - } - } - if (/^\s*else\W/) { - if ($prev =~ /^\s*}$/) { - err_prefix($prev, - "else and right brace should be on same line"); - } - } - $prev = $line; -} - -if ($prev eq "") { - err("last line in file is blank"); -} - -} - -# -# Continuation-line checking -# -# The rest of this file contains the code for the continuation checking -# engine. It's a pretty simple state machine which tracks the expression -# depth (unmatched '('s and '['s). -# -# Keep in mind that the argument to process_indent() has already been heavily -# processed; all comments have been replaced by control-A, and the contents of -# strings and character constants have been elided. -# - -my $cont_in; # currently inside of a continuation -my $cont_off; # skipping an initializer or definition -my $cont_noerr; # suppress cascading errors -my $cont_start; # the line being continued -my $cont_base; # the base indentation -my $cont_first; # this is the first line of a statement -my $cont_multiseg; # this continuation has multiple segments - -my $cont_special; # this is a C statement (if, for, etc.) -my $cont_macro; # this is a macro -my $cont_case; # this is a multi-line case - -my @cont_paren; # the stack of unmatched ( and [s we've seen - -sub -reset_indent() -{ - $cont_in = 0; - $cont_off = 0; -} - -sub -delabel($) -{ - # - # replace labels with tabs. Note that there may be multiple - # labels on a line. - # - local $_ = $_[0]; - - while (/^(\t*)( *(?:(?:\w+\s*)|(?:case\b[^:]*)): *)(.*)$/) { - my ($pre_tabs, $label, $rest) = ($1, $2, $3); - $_ = $pre_tabs; - while ($label =~ s/^([^\t]*)(\t+)//) { - $_ .= "\t" x (length($2) + length($1) / 8); - } - $_ .= ("\t" x (length($label) / 8)).$rest; - } - - return ($_); -} - -sub -process_indent($) -{ - require strict; - local $_ = $_[0]; # preserve the global $_ - - s///g; # No comments - s/\s+$//; # Strip trailing whitespace - - return if (/^$/); # skip empty lines - - # regexps used below; keywords taking (), macros, and continued cases - my $special = '(?:(?:\}\s*)?else\s+)?(?:if|for|while|switch)\b'; - my $macro = '[A-Z_][A-Z_0-9]*\('; - my $case = 'case\b[^:]*$'; - - # skip over enumerations, array definitions, initializers, etc. - if ($cont_off <= 0 && !/^\s*$special/ && - (/(?:(?:\b(?:enum|struct|union)\s*[^\{]*)|(?:\s+=\s*)){/ || - (/^\s*{/ && $prev =~ /=\s*(?:\/\*.*\*\/\s*)*$/))) { - $cont_in = 0; - $cont_off = tr/{/{/ - tr/}/}/; - return; - } - if ($cont_off) { - $cont_off += tr/{/{/ - tr/}/}/; - return; - } - - if (!$cont_in) { - $cont_start = $line; - - if (/^\t* /) { - err("non-continuation indented 4 spaces"); - $cont_noerr = 1; # stop reporting - } - $_ = delabel($_); # replace labels with tabs - - # check if the statement is complete - return if (/^\s*\}?$/); - return if (/^\s*\}?\s*else\s*\{?$/); - return if (/^\s*do\s*\{?$/); - return if (/{$/); - return if (/}[,;]?$/); - - # Allow macros on their own lines - return if (/^\s*[A-Z_][A-Z_0-9]*$/); - - # cases we don't deal with, generally non-kosher - if (/{/) { - err("stuff after {"); - return; - } - - # Get the base line, and set up the state machine - /^(\t*)/; - $cont_base = $1; - $cont_in = 1; - @cont_paren = (); - $cont_first = 1; - $cont_multiseg = 0; - - # certain things need special processing - $cont_special = /^\s*$special/? 1 : 0; - $cont_macro = /^\s*$macro/? 1 : 0; - $cont_case = /^\s*$case/? 1 : 0; - } else { - $cont_first = 0; - - # Strings may be pulled back to an earlier (half-)tabstop - unless ($cont_noerr || /^$cont_base / || - (/^\t*(?: )?(?:gettext\()?\"/ && !/^$cont_base\t/)) { - err_prefix($cont_start, - "continuation should be indented 4 spaces"); - } - } - - my $rest = $_; # keeps the remainder of the line - - # - # The split matches 0 characters, so that each 'special' character - # is processed separately. Parens and brackets are pushed and - # popped off the @cont_paren stack. For normal processing, we wait - # until a ; or { terminates the statement. "special" processing - # (if/for/while/switch) is allowed to stop when the stack empties, - # as is macro processing. Case statements are terminated with a : - # and an empty paren stack. - # - foreach $_ (split /[^\(\)\[\]\{\}\;\:]*/) { - next if (length($_) == 0); - - # rest contains the remainder of the line - my $rxp = "[^\Q$_\E]*\Q$_\E"; - $rest =~ s/^$rxp//; - - if (/\(/ || /\[/) { - push @cont_paren, $_; - } elsif (/\)/ || /\]/) { - my $cur = $_; - tr/\)\]/\(\[/; - - my $old = (pop @cont_paren); - if (!defined($old)) { - err("unexpected '$cur'"); - $cont_in = 0; - last; - } elsif ($old ne $_) { - err("'$cur' mismatched with '$old'"); - $cont_in = 0; - last; - } - - # - # If the stack is now empty, do special processing - # for if/for/while/switch and macro statements. - # - next if (@cont_paren != 0); - if ($cont_special) { - if ($rest =~ /^\s*{?$/) { - $cont_in = 0; - last; - } - if ($rest =~ /^\s*;$/) { - err("empty if/for/while body ". - "not on its own line"); - $cont_in = 0; - last; - } - if (!$cont_first && $cont_multiseg == 1) { - err_prefix($cont_start, - "multiple statements continued ". - "over multiple lines"); - $cont_multiseg = 2; - } elsif ($cont_multiseg == 0) { - $cont_multiseg = 1; - } - # We've finished this section, start - # processing the next. - goto section_ended; - } - if ($cont_macro) { - if ($rest =~ /^$/) { - $cont_in = 0; - last; - } - } - } elsif (/\;/) { - if ($cont_case) { - err("unexpected ;"); - } elsif (!$cont_special) { - err("unexpected ;") if (@cont_paren != 0); - if (!$cont_first && $cont_multiseg == 1) { - err_prefix($cont_start, - "multiple statements continued ". - "over multiple lines"); - $cont_multiseg = 2; - } elsif ($cont_multiseg == 0) { - $cont_multiseg = 1; - } - if ($rest =~ /^$/) { - $cont_in = 0; - last; - } - if ($rest =~ /^\s*special/) { - err("if/for/while/switch not started ". - "on its own line"); - } - goto section_ended; - } - } elsif (/\{/) { - err("{ while in parens/brackets") if (@cont_paren != 0); - err("stuff after {") if ($rest =~ /[^\s}]/); - $cont_in = 0; - last; - } elsif (/\}/) { - err("} while in parens/brackets") if (@cont_paren != 0); - if (!$cont_special && $rest !~ /^\s*(while|else)\b/) { - if ($rest =~ /^$/) { - err("unexpected }"); - } else { - err("stuff after }"); - } - $cont_in = 0; - last; - } - } elsif (/\:/ && $cont_case && @cont_paren == 0) { - err("stuff after multi-line case") if ($rest !~ /$^/); - $cont_in = 0; - last; - } - next; -section_ended: - # End of a statement or if/while/for loop. Reset - # cont_special and cont_macro based on the rest of the - # line. - $cont_special = ($rest =~ /^\s*$special/)? 1 : 0; - $cont_macro = ($rest =~ /^\s*$macro/)? 1 : 0; - $cont_case = 0; - next; - } - $cont_noerr = 0 if (!$cont_in); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json deleted file mode 100644 index 29d7bd89..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json +++ /dev/null @@ -1,13 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316563626, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "float" ] - }, -"data": - [ - { "name": "float", "float": { "length": 4 } } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json deleted file mode 100644 index f9773a14..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json +++ /dev/null @@ -1,13 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316563631, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "int" ] - }, -"data": - [ - { "name": "int", "integer": { "length": 4, "signed": true } } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json deleted file mode 100644 index e0ee5e0d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json +++ /dev/null @@ -1,104 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316563573, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "psinfo_t" ] - }, -"data": - [ - { "name": "int", "integer": { "length": 4, "signed": true } }, - { "name": "char", "integer": { "length": 1, "signed": true } }, - { "name": "unsigned short", "integer": { "length": 2, "signed": false } }, - { "name": "long", "integer": { "length": 4, "signed": true } }, - { "name": "unsigned", "integer": { "length": 4, "signed": false } }, - { "name": "size_t", "typedef": "unsigned" }, - { "name": "unsigned long", "integer": { "length": 4, "signed": false } }, - { "name": "time_t", "typedef": "long" }, - { "name": "struct timespec", "struct": [ - { "name": "tv_sec", "type": "time_t" }, - { "name": "tv_nsec", "type": "long" } - ] }, - { "name": "zoneid_t", "typedef": "long" }, - { "name": "taskid_t", "typedef": "long" }, - { "name": "dev_t", "typedef": "unsigned long" }, - { "name": "uid_t", "typedef": "unsigned" }, - { "name": "gid_t", "typedef": "unsigned" }, - { "name": "timestruc_t", "typedef": "struct timespec" }, - { "name": "short", "integer": { "length": 2, "signed": true } }, - { "name": "projid_t", "typedef": "long" }, - { "name": "ushort_t", "typedef": "unsigned short" }, - { "name": "poolid_t", "typedef": "long" }, - { "name": "uintptr_t", "typedef": "unsigned" }, - { "name": "id_t", "typedef": "long" }, - { "name": "pid_t", "typedef": "long" }, - { "name": "processorid_t", "typedef": "int" }, - { "name": "psetid_t", "typedef": "int" }, - { "name": "struct lwpsinfo", "struct": [ - { "name": "pr_flag", "type": "int" }, - { "name": "pr_lwpid", "type": "id_t" }, - { "name": "pr_addr", "type": "uintptr_t" }, - { "name": "pr_wchan", "type": "uintptr_t" }, - { "name": "pr_stype", "type": "char" }, - { "name": "pr_state", "type": "char" }, - { "name": "pr_sname", "type": "char" }, - { "name": "pr_nice", "type": "char" }, - { "name": "pr_syscall", "type": "short" }, - { "name": "pr_oldpri", "type": "char" }, - { "name": "pr_cpu", "type": "char" }, - { "name": "pr_pri", "type": "int" }, - { "name": "pr_pctcpu", "type": "ushort_t" }, - { "name": "pr_pad", "type": "ushort_t" }, - { "name": "pr_start", "type": "timestruc_t" }, - { "name": "pr_time", "type": "timestruc_t" }, - { "name": "pr_clname", "type": "char [8]" }, - { "name": "pr_name", "type": "char [16]" }, - { "name": "pr_onpro", "type": "processorid_t" }, - { "name": "pr_bindpro", "type": "processorid_t" }, - { "name": "pr_bindpset", "type": "psetid_t" }, - { "name": "pr_lgrp", "type": "int" }, - { "name": "pr_filler", "type": "int [4]" } - ] }, - { "name": "lwpsinfo_t", "typedef": "struct lwpsinfo" }, - { "name": "struct psinfo", "struct": [ - { "name": "pr_flag", "type": "int" }, - { "name": "pr_nlwp", "type": "int" }, - { "name": "pr_pid", "type": "pid_t" }, - { "name": "pr_ppid", "type": "pid_t" }, - { "name": "pr_pgid", "type": "pid_t" }, - { "name": "pr_sid", "type": "pid_t" }, - { "name": "pr_uid", "type": "uid_t" }, - { "name": "pr_euid", "type": "uid_t" }, - { "name": "pr_gid", "type": "gid_t" }, - { "name": "pr_egid", "type": "gid_t" }, - { "name": "pr_addr", "type": "uintptr_t" }, - { "name": "pr_size", "type": "size_t" }, - { "name": "pr_rssize", "type": "size_t" }, - { "name": "pr_pad1", "type": "size_t" }, - { "name": "pr_ttydev", "type": "dev_t" }, - { "name": "pr_pctcpu", "type": "ushort_t" }, - { "name": "pr_pctmem", "type": "ushort_t" }, - { "name": "pr_start", "type": "timestruc_t" }, - { "name": "pr_time", "type": "timestruc_t" }, - { "name": "pr_ctime", "type": "timestruc_t" }, - { "name": "pr_fname", "type": "char [16]" }, - { "name": "pr_psargs", "type": "char [80]" }, - { "name": "pr_wstat", "type": "int" }, - { "name": "pr_argc", "type": "int" }, - { "name": "pr_argv", "type": "uintptr_t" }, - { "name": "pr_envp", "type": "uintptr_t" }, - { "name": "pr_dmodel", "type": "char" }, - { "name": "pr_pad2", "type": "char [3]" }, - { "name": "pr_taskid", "type": "taskid_t" }, - { "name": "pr_projid", "type": "projid_t" }, - { "name": "pr_nzomb", "type": "int" }, - { "name": "pr_poolid", "type": "poolid_t" }, - { "name": "pr_zoneid", "type": "zoneid_t" }, - { "name": "pr_contract", "type": "id_t" }, - { "name": "pr_filler", "type": "int [1]" }, - { "name": "pr_lwp", "type": "lwpsinfo_t" } - ] }, - { "name": "psinfo_t", "typedef": "struct psinfo" } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json deleted file mode 100644 index e0542ff4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json +++ /dev/null @@ -1,19 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316563648, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "timestruc_t" ] - }, -"data": - [ - { "name": "long", "integer": { "length": 4, "signed": true } }, - { "name": "time_t", "typedef": "long" }, - { "name": "struct timespec", "struct": [ - { "name": "tv_sec", "type": "time_t" }, - { "name": "tv_nsec", "type": "long" } - ] }, - { "name": "timestruc_t", "typedef": "struct timespec" } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js deleted file mode 100644 index d6a52cbb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Test several conditions that should always cause us to throw. - */ -var mod_assert = require('assert'); -var mod_ctype = require('../../ctype.js'); - -var cases = [ -{ json: { }, msg: 'bad JSON - no metadata or data' }, -{ json: { metadata: {} }, msg: 'bad JSON - bad metadata section' }, -{ json: { metadata: { 'JSON version': [] } }, - msg: 'bad JSON - bad JSON version' }, -{ json: { metadata: { 'JSON version': 2 } }, - msg: 'bad JSON - bad JSON version' }, -{ json: { metadata: { 'JSON version': '100.20' } }, - msg: 'bad JSON - bad JSON version' }, -{ json: { metadata: { 'JSON version': '1.0' } }, - msg: 'missing data section' }, -{ json: { metadata: { 'JSON version': '1.0' }, data: 1 }, - msg: 'invalid data section' }, -{ json: { metadata: { 'JSON version': '1.0' }, data: 1.1 }, - msg: 'invalid data section' }, -{ json: { metadata: { 'JSON version': '1.0' }, data: '1.1' }, - msg: 'invalid data section' }, -{ json: { metadata: { 'JSON version': '1.0' }, data: {} }, - msg: 'invalid data section' } -]; - -function test() -{ - var ii; - - for (ii = 0; ii < cases.length; ii++) { - mod_assert.throws(function () { - mod_ctype.parseCTF(cases[ii].json); - }, Error, cases[ii].msg); - } -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js deleted file mode 100644 index f2144994..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js +++ /dev/null @@ -1,14 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var data, parser; - - data = JSON.parse(mod_fs.readFileSync('./float.json').toString()); - parser = mod_ctype.parseCTF(data, { endian: 'big' }); - mod_assert.deepEqual(parser.lstypes(), {}); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js deleted file mode 100644 index 0ec0f769..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js +++ /dev/null @@ -1,14 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var data, parser; - - data = JSON.parse(mod_fs.readFileSync('./int.json').toString()); - parser = mod_ctype.parseCTF(data, { endian: 'big' }); - mod_assert.deepEqual(parser.lstypes(), { 'int': 'int32_t' }); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js deleted file mode 100644 index ca1a544c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js +++ /dev/null @@ -1,17 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -/* - * This is too unwieldly to actually write out. Just make sure we can parse it - * without errrors. - */ -function test() -{ - var data; - - data = JSON.parse(mod_fs.readFileSync('./psinfo.json').toString()); - mod_ctype.parseCTF(data, { endian: 'big' }); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js deleted file mode 100644 index c62f41f9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js +++ /dev/null @@ -1,18 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var data, parser; - - data = JSON.parse(mod_fs.readFileSync('./struct.json').toString()); - parser = mod_ctype.parseCTF(data, { endian: 'big' }); - mod_assert.deepEqual(parser.lstypes(), { 'long': 'int32_t', - 'time_t': 'long', - 'timestruc_t': 'struct timespec', - 'struct timespec': [ { 'tv_sec': { 'type': 'time_t' } }, - { 'tv_nsec': { 'type': 'long' } } ] }); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js deleted file mode 100644 index 9006cd1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js +++ /dev/null @@ -1,15 +0,0 @@ -var mod_fs = require('fs'); -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var data, parser; - - data = JSON.parse(mod_fs.readFileSync('./typedef.json').toString()); - parser = mod_ctype.parseCTF(data, { endian: 'big' }); - mod_assert.deepEqual(parser.lstypes(), { 'bar_t': 'int', - 'int': 'int32_t' }); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json deleted file mode 100644 index 35ddb50d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json +++ /dev/null @@ -1,14 +0,0 @@ -{ "metadata": - { - "ctf2json_version": "1.0", - "created_at": 1316302348, - "derived_from": "/lib/libc.so", - "ctf_version": 2, - "requested_types": [ "bar_t" ] - }, -"data": - [ - { "name": "int", "integer": { "length": 4, "signed": true } }, - { "name": "bar_t", "typedef": "int" } - ] -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js deleted file mode 100644 index 2c9504a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js +++ /dev/null @@ -1,767 +0,0 @@ -/* - * Battery of tests to break our floating point implementation. Oh ho ho. - * - * There are a few useful ways to generate the expected output. The first is - * just write a C program and write raw bytes out and inspect with xxd. Remember - * to consider whether or not you're on a big endian or little endian machine. - * Another useful site I found to help with some of this was: - * - * http://babbage.cs.qc.edu/IEEE-754/ - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -function testfloat() -{ - var buffer = new Buffer(4); - /* Start off with some of the easy ones: +zero */ - buffer[0] = 0; - buffer[1] = 0; - buffer[2] = 0; - buffer[3] = 0; - - ASSERT.equal(0, mod_ctype.rfloat(buffer, 'big', 0)); - ASSERT.equal(0, mod_ctype.rfloat(buffer, 'little', 0)); - - /* Test -0 */ - buffer[0] = 0x80; - ASSERT.equal(0, mod_ctype.rfloat(buffer, 'big', 0)); - buffer[3] = buffer[0]; - buffer[0] = 0; - ASSERT.equal(0, mod_ctype.rfloat(buffer, 'little', 0)); - - /* Catch +infin */ - buffer[0] = 0x7f; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(Number.POSITIVE_INFINITY, - mod_ctype.rfloat(buffer, 'big', 0)); - buffer[3] = 0x7f; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(Number.POSITIVE_INFINITY, - mod_ctype.rfloat(buffer, 'litle', 0)); - - /* Catch -infin */ - buffer[0] = 0xff; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(Number.NEGATIVE_INFINITY, - mod_ctype.rfloat(buffer, 'big', 0)); - buffer[3] = 0xff; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(Number.NEGATIVE_INFINITY, - mod_ctype.rfloat(buffer, 'litle', 0)); - - /* Catch NaN */ - - buffer[0] = 0x7f; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x23; - ASSERT.ok(isNaN(mod_ctype.rfloat(buffer, 'big', 0))); - buffer[3] = 0x7f; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x23; - ASSERT.ok(isNaN(mod_ctype.rfloat(buffer, 'little', 0))); - - /* Catch -infin */ - buffer[0] = 0xff; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x23; - ASSERT.ok(isNaN(mod_ctype.rfloat(buffer, 'big', 0))); - buffer[3] = 0xff; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x23; - ASSERT.ok(isNaN(mod_ctype.rfloat(buffer, 'little', 0))); - - /* On to some basic tests */ - /* 1.125 */ - buffer[0] = 0x3f; - buffer[1] = 0x90; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(1.125, mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x3f; - buffer[2] = 0x90; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(1.125, mod_ctype.rfloat(buffer, 'little', 0)); - - /* ff34a2b0 -2.4010576103645774e+38 */ - buffer[0] = 0xff; - buffer[1] = 0x34; - buffer[2] = 0xa2; - buffer[3] = 0xb0; - ASSERT.equal(-2.4010576103645774e+38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0xff; - buffer[2] = 0x34; - buffer[1] = 0xa2; - buffer[0] = 0xb0; - ASSERT.equal(-2.4010576103645774e+38, - mod_ctype.rfloat(buffer, 'little', 0)); - - /* Denormalized tests */ - - /* 0003f89a +/- 3.6468792534053364e-40 */ - buffer[0] = 0x00; - buffer[1] = 0x03; - buffer[2] = 0xf8; - buffer[3] = 0x9a; - ASSERT.equal(3.6468792534053364e-40, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x00; - buffer[2] = 0x03; - buffer[1] = 0xf8; - buffer[0] = 0x9a; - ASSERT.equal(3.6468792534053364e-40, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x03; - buffer[2] = 0xf8; - buffer[3] = 0x9a; - ASSERT.equal(-3.6468792534053364e-40, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x80; - buffer[2] = 0x03; - buffer[1] = 0xf8; - buffer[0] = 0x9a; - ASSERT.equal(-3.6468792534053364e-40, - mod_ctype.rfloat(buffer, 'little', 0)); - - - /* Maximum and minimum normalized and denormalized values */ - - /* Largest normalized number +/- 3.4028234663852886e+38 */ - - buffer[0] = 0x7f; - buffer[1] = 0x7f; - buffer[2] = 0xff; - buffer[3] = 0xff; - ASSERT.equal(3.4028234663852886e+38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x7f; - buffer[2] = 0x7f; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(3.4028234663852886e+38, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0xff; - buffer[1] = 0x7f; - buffer[2] = 0xff; - buffer[3] = 0xff; - ASSERT.equal(-3.4028234663852886e+38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0xff; - buffer[2] = 0x7f; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(-3.4028234663852886e+38, - mod_ctype.rfloat(buffer, 'little', 0)); - - /* Smallest normalied number +/- 1.1754943508222875e-38 */ - buffer[0] = 0x00; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(1.1754943508222875e-38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x00; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(1.1754943508222875e-38, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x80; - buffer[2] = 0x00; - buffer[3] = 0x00; - ASSERT.equal(-1.1754943508222875e-38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x80; - buffer[2] = 0x80; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(-1.1754943508222875e-38, - mod_ctype.rfloat(buffer, 'little', 0)); - - - /* Smallest denormalized number 1.401298464324817e-45 */ - buffer[0] = 0x00; - buffer[1] = 0x00; - buffer[2] = 0x00; - buffer[3] = 0x01; - ASSERT.equal(1.401298464324817e-45, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x01; - ASSERT.equal(1.401298464324817e-45, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x00; - buffer[2] = 0x00; - buffer[3] = 0x01; - ASSERT.equal(-1.401298464324817e-45, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x80; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x01; - ASSERT.equal(-1.401298464324817e-45, - mod_ctype.rfloat(buffer, 'little', 0)); - - /* Largest denormalized value +/- 1.1754942106924411e-38 */ - buffer[0] = 0x00; - buffer[1] = 0x7f; - buffer[2] = 0xff; - buffer[3] = 0xff; - ASSERT.equal(1.1754942106924411e-38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x00; - buffer[2] = 0x7f; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(1.1754942106924411e-38, - mod_ctype.rfloat(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x7f; - buffer[2] = 0xff; - buffer[3] = 0xff; - ASSERT.equal(-1.1754942106924411e-38, - mod_ctype.rfloat(buffer, 'big', 0)); - - buffer[3] = 0x80; - buffer[2] = 0x7f; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(-1.1754942106924411e-38, - mod_ctype.rfloat(buffer, 'little', 0)); - - /* Do some quick offset testing */ - buffer = new Buffer(6); - buffer[0] = 0x7f; - buffer[1] = 0x4e; - buffer[2] = 0x8a; - buffer[3] = 0x79; - buffer[4] = 0xcd; - buffer[5] = 0x3f; - - ASSERT.equal(2.745399582697325e+38, - mod_ctype.rfloat(buffer, 'big', 0)); - ASSERT.equal(1161619072, - mod_ctype.rfloat(buffer, 'big', 1)); - ASSERT.equal(-1.2027516403607578e-32, - mod_ctype.rfloat(buffer, 'big', 2)); - - ASSERT.equal(8.97661320504413e+34, - mod_ctype.rfloat(buffer, 'little', 0)); - ASSERT.equal(-261661920, - mod_ctype.rfloat(buffer, 'little', 1)); - ASSERT.equal(1.605271577835083, - mod_ctype.rfloat(buffer, 'little', 2)); - -} - -function testdouble() -{ - var buffer = new Buffer(10); - - /* Check 0 */ - buffer[0] = 0; - buffer[1] = 0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(0, - mod_ctype.rdouble(buffer, 'big', 0)); - ASSERT.equal(0, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(0, - mod_ctype.rdouble(buffer, 'big', 0)); - buffer[7] = 0x80; - buffer[6] = 0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(0, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Check NaN */ - buffer[0] = 0x7f; - buffer[1] = 0xf0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 23; - ASSERT.ok(isNaN(mod_ctype.rdouble(buffer, 'big', 0))); - - buffer[7] = 0x7f; - buffer[6] = 0xf0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 23; - ASSERT.ok(isNaN(mod_ctype.rdouble(buffer, 'little', 0))); - - buffer[0] = 0xff; - buffer[1] = 0xf0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 23; - ASSERT.ok(isNaN(mod_ctype.rdouble(buffer, 'big', 0))); - - buffer[7] = 0xff; - buffer[6] = 0xf0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 23; - ASSERT.ok(isNaN(mod_ctype.rdouble(buffer, 'little', 0))); - - /* pos inf */ - buffer[0] = 0x7f; - buffer[1] = 0xf0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(Number.POSITIVE_INFINITY, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x7f; - buffer[6] = 0xf0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(Number.POSITIVE_INFINITY, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* neg inf */ - buffer[0] = 0xff; - buffer[1] = 0xf0; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(Number.NEGATIVE_INFINITY, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0xff; - buffer[6] = 0xf0; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(Number.NEGATIVE_INFINITY, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Simple normalized values */ - - /* +/- 1.125 */ - buffer[0] = 0x3f; - buffer[1] = 0xf2; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(1.125, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x3f; - buffer[6] = 0xf2; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(1.125, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0xbf; - buffer[1] = 0xf2; - buffer[2] = 0; - buffer[3] = 0; - buffer[4] = 0; - buffer[5] = 0; - buffer[6] = 0; - buffer[7] = 0; - ASSERT.equal(-1.125, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0xbf; - buffer[6] = 0xf2; - buffer[5] = 0; - buffer[4] = 0; - buffer[3] = 0; - buffer[2] = 0; - buffer[1] = 0; - buffer[0] = 0; - ASSERT.equal(-1.125, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* +/- 1.4397318913736026e+283 */ - buffer[0] = 0x7a; - buffer[1] = 0xb8; - buffer[2] = 0xc9; - buffer[3] = 0x34; - buffer[4] = 0x72; - buffer[5] = 0x16; - buffer[6] = 0xf9; - buffer[7] = 0x0e; - ASSERT.equal(1.4397318913736026e+283, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x7a; - buffer[6] = 0xb8; - buffer[5] = 0xc9; - buffer[4] = 0x34; - buffer[3] = 0x72; - buffer[2] = 0x16; - buffer[1] = 0xf9; - buffer[0] = 0x0e; - ASSERT.equal(1.4397318913736026e+283, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0xfa; - buffer[1] = 0xb8; - buffer[2] = 0xc9; - buffer[3] = 0x34; - buffer[4] = 0x72; - buffer[5] = 0x16; - buffer[6] = 0xf9; - buffer[7] = 0x0e; - ASSERT.equal(-1.4397318913736026e+283, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0xfa; - buffer[6] = 0xb8; - buffer[5] = 0xc9; - buffer[4] = 0x34; - buffer[3] = 0x72; - buffer[2] = 0x16; - buffer[1] = 0xf9; - buffer[0] = 0x0e; - ASSERT.equal(-1.4397318913736026e+283, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Denormalized values */ - /* +/- 8.82521232268344e-309 */ - buffer[0] = 0x00; - buffer[1] = 0x06; - buffer[2] = 0x58; - buffer[3] = 0x94; - buffer[4] = 0x13; - buffer[5] = 0x27; - buffer[6] = 0x8a; - buffer[7] = 0xcd; - ASSERT.equal(8.82521232268344e-309, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x00; - buffer[6] = 0x06; - buffer[5] = 0x58; - buffer[4] = 0x94; - buffer[3] = 0x13; - buffer[2] = 0x27; - buffer[1] = 0x8a; - buffer[0] = 0xcd; - ASSERT.equal(8.82521232268344e-309, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x06; - buffer[2] = 0x58; - buffer[3] = 0x94; - buffer[4] = 0x13; - buffer[5] = 0x27; - buffer[6] = 0x8a; - buffer[7] = 0xcd; - ASSERT.equal(-8.82521232268344e-309, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x80; - buffer[6] = 0x06; - buffer[5] = 0x58; - buffer[4] = 0x94; - buffer[3] = 0x13; - buffer[2] = 0x27; - buffer[1] = 0x8a; - buffer[0] = 0xcd; - ASSERT.equal(-8.82521232268344e-309, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Edge cases, maximum and minimum values */ - - /* Smallest denormalized value 5e-324 */ - buffer[0] = 0x00; - buffer[1] = 0x00; - buffer[2] = 0x00; - buffer[3] = 0x00; - buffer[4] = 0x00; - buffer[5] = 0x00; - buffer[6] = 0x00; - buffer[7] = 0x01; - ASSERT.equal(5e-324, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x00; - buffer[6] = 0x00; - buffer[5] = 0x00; - buffer[4] = 0x00; - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x01; - ASSERT.equal(5e-324, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x00; - buffer[2] = 0x00; - buffer[3] = 0x00; - buffer[4] = 0x00; - buffer[5] = 0x00; - buffer[6] = 0x00; - buffer[7] = 0x01; - ASSERT.equal(-5e-324, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x80; - buffer[6] = 0x00; - buffer[5] = 0x00; - buffer[4] = 0x00; - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x01; - ASSERT.equal(-5e-324, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Largest denormalized value 2.225073858507201e-308 */ - buffer[0] = 0x00; - buffer[1] = 0x0f; - buffer[2] = 0xff; - buffer[3] = 0xff; - buffer[4] = 0xff; - buffer[5] = 0xff; - buffer[6] = 0xff; - buffer[7] = 0xff; - ASSERT.equal(2.225073858507201e-308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x00; - buffer[6] = 0x0f; - buffer[5] = 0xff; - buffer[4] = 0xff; - buffer[3] = 0xff; - buffer[2] = 0xff; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(2.225073858507201e-308, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x0f; - buffer[2] = 0xff; - buffer[3] = 0xff; - buffer[4] = 0xff; - buffer[5] = 0xff; - buffer[6] = 0xff; - buffer[7] = 0xff; - ASSERT.equal(-2.225073858507201e-308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x80; - buffer[6] = 0x0f; - buffer[5] = 0xff; - buffer[4] = 0xff; - buffer[3] = 0xff; - buffer[2] = 0xff; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(-2.225073858507201e-308, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Smallest normalized value 2.2250738585072014e-308 */ - buffer[0] = 0x00; - buffer[1] = 0x10; - buffer[2] = 0x00; - buffer[3] = 0x00; - buffer[4] = 0x00; - buffer[5] = 0x00; - buffer[6] = 0x00; - buffer[7] = 0x00; - ASSERT.equal(2.2250738585072014e-308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x00; - buffer[6] = 0x10; - buffer[5] = 0x00; - buffer[4] = 0x00; - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(2.2250738585072014e-308, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0x80; - buffer[1] = 0x10; - buffer[2] = 0x00; - buffer[3] = 0x00; - buffer[4] = 0x00; - buffer[5] = 0x00; - buffer[6] = 0x00; - buffer[7] = 0x00; - ASSERT.equal(-2.2250738585072014e-308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x80; - buffer[6] = 0x10; - buffer[5] = 0x00; - buffer[4] = 0x00; - buffer[3] = 0x00; - buffer[2] = 0x00; - buffer[1] = 0x00; - buffer[0] = 0x00; - ASSERT.equal(-2.2250738585072014e-308, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Largest normalized value 1.7976931348623157e+308 */ - buffer[0] = 0x7f; - buffer[1] = 0xef; - buffer[2] = 0xff; - buffer[3] = 0xff; - buffer[4] = 0xff; - buffer[5] = 0xff; - buffer[6] = 0xff; - buffer[7] = 0xff; - ASSERT.equal(1.7976931348623157e+308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0x7f; - buffer[6] = 0xef; - buffer[5] = 0xff; - buffer[4] = 0xff; - buffer[3] = 0xff; - buffer[2] = 0xff; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(1.7976931348623157e+308, - mod_ctype.rdouble(buffer, 'little', 0)); - - buffer[0] = 0xff; - buffer[1] = 0xef; - buffer[2] = 0xff; - buffer[3] = 0xff; - buffer[4] = 0xff; - buffer[5] = 0xff; - buffer[6] = 0xff; - buffer[7] = 0xff; - ASSERT.equal(-1.7976931348623157e+308, - mod_ctype.rdouble(buffer, 'big', 0)); - - buffer[7] = 0xff; - buffer[6] = 0xef; - buffer[5] = 0xff; - buffer[4] = 0xff; - buffer[3] = 0xff; - buffer[2] = 0xff; - buffer[1] = 0xff; - buffer[0] = 0xff; - ASSERT.equal(-1.7976931348623157e+308, - mod_ctype.rdouble(buffer, 'little', 0)); - - /* Try offsets */ - buffer[0] = 0xde; - buffer[1] = 0xad; - buffer[2] = 0xbe; - buffer[3] = 0xef; - buffer[4] = 0xba; - buffer[5] = 0xdd; - buffer[6] = 0xca; - buffer[7] = 0xfe; - buffer[8] = 0x16; - buffer[9] = 0x79; - - ASSERT.equal(-1.1885958404126936e+148, - mod_ctype.rdouble(buffer, 'big', 0)); - ASSERT.equal(-2.4299184080448593e-88, - mod_ctype.rdouble(buffer, 'big', 1)); - ASSERT.equal(-0.000015130017658081283, - mod_ctype.rdouble(buffer, 'big', 2)); - - ASSERT.equal(-5.757458694845505e+302, - mod_ctype.rdouble(buffer, 'little', 0)); - ASSERT.equal(6.436459604192476e-198, - mod_ctype.rdouble(buffer, 'little', 1)); - ASSERT.equal(1.9903745632417286e+275, - mod_ctype.rdouble(buffer, 'little', 2)); -} - -testfloat(); -testdouble(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js deleted file mode 100644 index b5fd95cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js +++ /dev/null @@ -1,753 +0,0 @@ -/* - * Another place to find bugs that may yet plague us. This time with writing out - * floats to arrays. We are lazy and did basically just take the opposite of our - * test code to read in values. - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - - -/* - * A useful thing to keep around for debugging - * console.log('buffer[0]: ' + buffer[0].toString(16)); - * console.log('buffer[1]: ' + buffer[1].toString(16)); - * console.log('buffer[2]: ' + buffer[2].toString(16)); - * console.log('buffer[3]: ' + buffer[3].toString(16)); - * console.log('buffer[4]: ' + buffer[4].toString(16)); - * console.log('buffer[5]: ' + buffer[5].toString(16)); - * console.log('buffer[6]: ' + buffer[6].toString(16)); - * console.log('buffer[7]: ' + buffer[7].toString(16)); - */ - -function testfloat() -{ - var buffer = new Buffer(4); - mod_ctype.wfloat(0, 'big', buffer, 0); - /* Start off with some of the easy ones: +zero */ - ASSERT.equal(0, buffer[0]); - ASSERT.equal(0, buffer[1]); - ASSERT.equal(0, buffer[2]); - ASSERT.equal(0, buffer[3]); - mod_ctype.wfloat(0, 'little', buffer, 0); - ASSERT.equal(0, buffer[0]); - ASSERT.equal(0, buffer[1]); - ASSERT.equal(0, buffer[2]); - ASSERT.equal(0, buffer[3]); - - /* Catch +infin */ - mod_ctype.wfloat(Number.POSITIVE_INFINITY, 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(Number.POSITIVE_INFINITY, 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Catch -infin */ - mod_ctype.wfloat(Number.NEGATIVE_INFINITY, 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(Number.NEGATIVE_INFINITY, 'little', buffer, 0); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Catch NaN */ - - /* - * NaN Is a litle weird in its requirements, so we're going to encode a - * bit of how we actually implement it into this test. Probably not the - * best, since technically the sign is a don't care and the mantissa - * needs to just be non-zero. - */ - mod_ctype.wfloat(NaN, 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x17, buffer[3]); - mod_ctype.wfloat(NaN, 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x17, buffer[0]); - - /* On to some basic tests */ - /* 1.125 */ - mod_ctype.wfloat(1.125, 'big', buffer, 0); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0x90, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(1.125, 'little', buffer, 0); - ASSERT.equal(0x3f, buffer[3]); - ASSERT.equal(0x90, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - mod_ctype.wfloat(1.0000001192092896, 'big', buffer, 0); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(1.0000001192092896, 'little', buffer, 0); - ASSERT.equal(0x3f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - mod_ctype.wfloat(1.0000001192092896, 'big', buffer, 0); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(1.0000001192092896, 'little', buffer, 0); - ASSERT.equal(0x3f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - mod_ctype.wfloat(2.3283067140944524e-10, 'big', buffer, 0); - ASSERT.equal(0x2f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(2.3283067140944524e-10, 'little', buffer, 0); - ASSERT.equal(0x2f, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - /* ff34a2b0 -2.4010576103645774e+38 */ - mod_ctype.wfloat(-2.4010576103645774e+38, - 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0x34, buffer[1]); - ASSERT.equal(0xa2, buffer[2]); - ASSERT.equal(0xb0, buffer[3]); - mod_ctype.wfloat(-2.4010576103645774e+38, - 'little', buffer, 0); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0x34, buffer[2]); - ASSERT.equal(0xa2, buffer[1]); - ASSERT.equal(0xb0, buffer[0]); - - /* Denormalized tests */ - - /* 0003f89a +/- 3.6468792534053364e-40 */ - mod_ctype.wfloat(3.6468792534053364e-40, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x03, buffer[1]); - ASSERT.equal(0xf8, buffer[2]); - ASSERT.equal(0x9a, buffer[3]); - mod_ctype.wfloat(3.6468792534053364e-40, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x03, buffer[2]); - ASSERT.equal(0xf8, buffer[1]); - ASSERT.equal(0x9a, buffer[0]); - - mod_ctype.wfloat(-3.6468792534053364e-40, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x03, buffer[1]); - ASSERT.equal(0xf8, buffer[2]); - ASSERT.equal(0x9a, buffer[3]); - mod_ctype.wfloat(-3.6468792534053364e-40, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[3]); - ASSERT.equal(0x03, buffer[2]); - ASSERT.equal(0xf8, buffer[1]); - ASSERT.equal(0x9a, buffer[0]); - - /* Maximum and minimum normalized and denormalized values */ - - /* Largest normalized number +/- 3.4028234663852886e+38 */ - - mod_ctype.wfloat(3.4028234663852886e+38, - 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - mod_ctype.wfloat(3.4028234663852886e+38, - 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[3]); - ASSERT.equal(0x7f, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - mod_ctype.wfloat(-3.4028234663852886e+38, - 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - mod_ctype.wfloat(-3.4028234663852886e+38, - 'little', buffer, 0); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0x7f, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - /* Smallest normalied number +/- 1.1754943508222875e-38 */ - - mod_ctype.wfloat(1.1754943508222875e-38, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(1.1754943508222875e-38, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - mod_ctype.wfloat(-1.1754943508222875e-38, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wfloat(-1.1754943508222875e-38, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[3]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Smallest denormalized number 1.401298464324817e-45 */ - mod_ctype.wfloat(1.401298464324817e-45, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(1.401298464324817e-45, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - mod_ctype.wfloat(-1.401298464324817e-45, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x01, buffer[3]); - mod_ctype.wfloat(-1.401298464324817e-45, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - /* Largest denormalized value +/- 1.1754942106924411e-38 */ - - mod_ctype.wfloat(1.1754942106924411e-38, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - mod_ctype.wfloat(1.1754942106924411e-38, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x7f, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - mod_ctype.wfloat(-1.1754942106924411e-38, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - mod_ctype.wfloat(-1.1754942106924411e-38, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[3]); - ASSERT.equal(0x7f, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - /* Do some quick offset testing */ - buffer = new Buffer(6); - mod_ctype.wfloat(-1.2027516403607578e-32, - 'big', buffer, 2); - ASSERT.equal(0x8a, buffer[2]); - ASSERT.equal(0x79, buffer[3]); - ASSERT.equal(0xcd, buffer[4]); - ASSERT.equal(0x3f, buffer[5]); - - mod_ctype.wfloat(-1.2027516403607578e-32, - 'little', buffer, 2); - ASSERT.equal(0x8a, buffer[5]); - ASSERT.equal(0x79, buffer[4]); - ASSERT.equal(0xcd, buffer[3]); - ASSERT.equal(0x3f, buffer[2]); - -} - -function testdouble() -{ - var buffer = new Buffer(10); - - /* Check 0 */ - mod_ctype.wdouble(0, 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - mod_ctype.wdouble(0, 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Check NaN */ - /* Similar to floats we are only generating a subset of values */ - mod_ctype.wdouble(NaN, 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0xf0, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x17, buffer[7]); - mod_ctype.wdouble(NaN, 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[7]); - ASSERT.equal(0xf0, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x17, buffer[0]); - - /* pos inf */ - mod_ctype.wdouble(Number.POSITIVE_INFINITY, - 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0xf0, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - mod_ctype.wdouble(Number.POSITIVE_INFINITY, - 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[7]); - ASSERT.equal(0xf0, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* neg inf */ - mod_ctype.wdouble(Number.NEGATIVE_INFINITY, - 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xf0, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - mod_ctype.wdouble(Number.NEGATIVE_INFINITY, - 'little', buffer, 0); - ASSERT.equal(0xff, buffer[7]); - ASSERT.equal(0xf0, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - /* Simple normalized values */ - - /* +/- 1.125 */ - mod_ctype.wdouble(1.125, - 'big', buffer, 0); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0xf2, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wdouble(1.125, - 'little', buffer, 0); - ASSERT.equal(0x3f, buffer[7]); - ASSERT.equal(0xf2, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - mod_ctype.wdouble(-1.125, - 'big', buffer, 0); - ASSERT.equal(0xbf, buffer[0]); - ASSERT.equal(0xf2, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wdouble(-1.125, - 'little', buffer, 0); - ASSERT.equal(0xbf, buffer[7]); - ASSERT.equal(0xf2, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - - /* +/- 1.4397318913736026e+283 */ - mod_ctype.wdouble(1.4397318913736026e+283, - 'big', buffer, 0); - ASSERT.equal(0x7a, buffer[0]); - ASSERT.equal(0xb8, buffer[1]); - ASSERT.equal(0xc9, buffer[2]); - ASSERT.equal(0x34, buffer[3]); - ASSERT.equal(0x72, buffer[4]); - ASSERT.equal(0x16, buffer[5]); - ASSERT.equal(0xf9, buffer[6]); - ASSERT.equal(0x0e, buffer[7]); - - mod_ctype.wdouble(1.4397318913736026e+283, - 'little', buffer, 0); - ASSERT.equal(0x7a, buffer[7]); - ASSERT.equal(0xb8, buffer[6]); - ASSERT.equal(0xc9, buffer[5]); - ASSERT.equal(0x34, buffer[4]); - ASSERT.equal(0x72, buffer[3]); - ASSERT.equal(0x16, buffer[2]); - ASSERT.equal(0xf9, buffer[1]); - ASSERT.equal(0x0e, buffer[0]); - - mod_ctype.wdouble(-1.4397318913736026e+283, - 'big', buffer, 0); - ASSERT.equal(0xfa, buffer[0]); - ASSERT.equal(0xb8, buffer[1]); - ASSERT.equal(0xc9, buffer[2]); - ASSERT.equal(0x34, buffer[3]); - ASSERT.equal(0x72, buffer[4]); - ASSERT.equal(0x16, buffer[5]); - ASSERT.equal(0xf9, buffer[6]); - ASSERT.equal(0x0e, buffer[7]); - - mod_ctype.wdouble(-1.4397318913736026e+283, - 'little', buffer, 0); - ASSERT.equal(0xfa, buffer[7]); - ASSERT.equal(0xb8, buffer[6]); - ASSERT.equal(0xc9, buffer[5]); - ASSERT.equal(0x34, buffer[4]); - ASSERT.equal(0x72, buffer[3]); - ASSERT.equal(0x16, buffer[2]); - ASSERT.equal(0xf9, buffer[1]); - ASSERT.equal(0x0e, buffer[0]); - - /* Denormalized values */ - /* +/- 8.82521232268344e-309 */ - mod_ctype.wdouble(8.82521232268344e-309, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x06, buffer[1]); - ASSERT.equal(0x58, buffer[2]); - ASSERT.equal(0x94, buffer[3]); - ASSERT.equal(0x13, buffer[4]); - ASSERT.equal(0x27, buffer[5]); - ASSERT.equal(0x8a, buffer[6]); - ASSERT.equal(0xcd, buffer[7]); - - mod_ctype.wdouble(8.82521232268344e-309, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x06, buffer[6]); - ASSERT.equal(0x58, buffer[5]); - ASSERT.equal(0x94, buffer[4]); - ASSERT.equal(0x13, buffer[3]); - ASSERT.equal(0x27, buffer[2]); - ASSERT.equal(0x8a, buffer[1]); - ASSERT.equal(0xcd, buffer[0]); - - mod_ctype.wdouble(-8.82521232268344e-309, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x06, buffer[1]); - ASSERT.equal(0x58, buffer[2]); - ASSERT.equal(0x94, buffer[3]); - ASSERT.equal(0x13, buffer[4]); - ASSERT.equal(0x27, buffer[5]); - ASSERT.equal(0x8a, buffer[6]); - ASSERT.equal(0xcd, buffer[7]); - - mod_ctype.wdouble(-8.82521232268344e-309, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[7]); - ASSERT.equal(0x06, buffer[6]); - ASSERT.equal(0x58, buffer[5]); - ASSERT.equal(0x94, buffer[4]); - ASSERT.equal(0x13, buffer[3]); - ASSERT.equal(0x27, buffer[2]); - ASSERT.equal(0x8a, buffer[1]); - ASSERT.equal(0xcd, buffer[0]); - - - /* Edge cases, maximum and minimum values */ - - /* Smallest denormalized value 5e-324 */ - mod_ctype.wdouble(5e-324, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x01, buffer[7]); - - mod_ctype.wdouble(5e-324, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - mod_ctype.wdouble(-5e-324, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x01, buffer[7]); - - mod_ctype.wdouble(-5e-324, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[7]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x01, buffer[0]); - - - - /* Largest denormalized value 2.225073858507201e-308 */ - mod_ctype.wdouble(2.225073858507201e-308, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x0f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wdouble(2.225073858507201e-308, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x0f, buffer[6]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - mod_ctype.wdouble(-2.225073858507201e-308, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x0f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wdouble(-2.225073858507201e-308, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[7]); - ASSERT.equal(0x0f, buffer[6]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - - /* Smallest normalized value 2.2250738585072014e-308 */ - mod_ctype.wdouble(2.2250738585072014e-308, - 'big', buffer, 0); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x10, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wdouble(2.2250738585072014e-308, - 'little', buffer, 0); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x10, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - mod_ctype.wdouble(-2.2250738585072014e-308, - 'big', buffer, 0); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x10, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wdouble(-2.2250738585072014e-308, - 'little', buffer, 0); - ASSERT.equal(0x80, buffer[7]); - ASSERT.equal(0x10, buffer[6]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[0]); - - - /* Largest normalized value 1.7976931348623157e+308 */ - mod_ctype.wdouble(1.7976931348623157e+308, - 'big', buffer, 0); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0xef, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wdouble(1.7976931348623157e+308, - 'little', buffer, 0); - ASSERT.equal(0x7f, buffer[7]); - ASSERT.equal(0xef, buffer[6]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - mod_ctype.wdouble(-1.7976931348623157e+308, - 'big', buffer, 0); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xef, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wdouble(-1.7976931348623157e+308, - 'little', buffer, 0); - ASSERT.equal(0xff, buffer[7]); - ASSERT.equal(0xef, buffer[6]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[0]); - - - /* Try offsets */ - buffer[0] = 0xde; - buffer[1] = 0xad; - buffer[2] = 0xbe; - buffer[3] = 0xef; - buffer[4] = 0xba; - buffer[5] = 0xdd; - buffer[6] = 0xca; - buffer[7] = 0xfe; - buffer[8] = 0x16; - buffer[9] = 0x79; - - mod_ctype.wdouble(-0.000015130017658081283, - 'big', buffer, 2); - ASSERT.equal(0xbe, buffer[2]); - ASSERT.equal(0xef, buffer[3]); - ASSERT.equal(0xba, buffer[4]); - ASSERT.equal(0xdd, buffer[5]); - ASSERT.equal(0xca, buffer[6]); - ASSERT.equal(0xfe, buffer[7]); - ASSERT.equal(0x16, buffer[8]); - ASSERT.equal(0x79, buffer[9]); - - mod_ctype.wdouble(-0.000015130017658081283, - 'little', buffer, 2); - ASSERT.equal(0xbe, buffer[9]); - ASSERT.equal(0xef, buffer[8]); - ASSERT.equal(0xba, buffer[7]); - ASSERT.equal(0xdd, buffer[6]); - ASSERT.equal(0xca, buffer[5]); - ASSERT.equal(0xfe, buffer[4]); - ASSERT.equal(0x16, buffer[3]); - ASSERT.equal(0x79, buffer[2]); -} - -testfloat(); -testdouble(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js deleted file mode 100644 index 1ffdac09..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js +++ /dev/null @@ -1,638 +0,0 @@ -/* - * Test our ability to read and write signed 64-bit integers. - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -function testRead() -{ - var res, data; - data = new Buffer(10); - - data[0] = 0x32; - data[1] = 0x65; - data[2] = 0x42; - data[3] = 0x56; - data[4] = 0x23; - data[5] = 0xff; - data[6] = 0xff; - data[7] = 0xff; - data[8] = 0x89; - data[9] = 0x11; - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(0x32654256, res[0]); - ASSERT.equal(0x23ffffff, res[1]); - res = mod_ctype.rsint64(data, 'big', 1); - ASSERT.equal(0x65425623, res[0]); - ASSERT.equal(0xffffff89, res[1]); - res = mod_ctype.rsint64(data, 'big', 2); - ASSERT.equal(0x425623ff, res[0]); - ASSERT.equal(0xffff8911, res[1]); - res = mod_ctype.rsint64(data, 'little', 0); - ASSERT.equal(-0x000000dc, res[0]); - ASSERT.equal(-0xa9bd9ace, res[1]); - res = mod_ctype.rsint64(data, 'little', 1); - ASSERT.equal(-0x76000000, res[0]); - ASSERT.equal(-0xdca9bd9b, res[1]); - res = mod_ctype.rsint64(data, 'little', 2); - ASSERT.equal(0x1189ffff, res[0]); - ASSERT.equal(0xff235642, res[1]); - - data.fill(0x00); - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'big', 1); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'big', 2); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'little', 0); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'little', 1); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - res = mod_ctype.rsint64(data, 'little', 2); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(0x00000000, res[1]); - - data.fill(0xff); - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'big', 1); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'big', 2); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'little', 0); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'little', 1); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - res = mod_ctype.rsint64(data, 'little', 2); - ASSERT.equal(0x00000000, res[0]); - ASSERT.equal(-1, res[1]); - - data[0] = 0x80; - data[1] = 0x00; - data[2] = 0x00; - data[3] = 0x00; - data[4] = 0x00; - data[5] = 0x00; - data[6] = 0x00; - data[7] = 0x00; - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(-0x80000000, res[0]); - ASSERT.equal(0, res[1]); - - - data[7] = 0x80; - data[6] = 0x00; - data[5] = 0x00; - data[4] = 0x00; - data[3] = 0x00; - data[2] = 0x00; - data[1] = 0x00; - data[0] = 0x00; - res = mod_ctype.rsint64(data, 'little', 0); - ASSERT.equal(-0x80000000, res[0]); - ASSERT.equal(0, res[1]); - - data[0] = 0x80; - data[1] = 0x00; - data[2] = 0x00; - data[3] = 0x00; - data[4] = 0x00; - data[5] = 0x00; - data[6] = 0x00; - data[7] = 0x01; - res = mod_ctype.rsint64(data, 'big', 0); - ASSERT.equal(-0x7fffffff, res[0]); - ASSERT.equal(-0xffffffff, res[1]); - - -} - -function testWriteZero() -{ - var data, buf; - buf = new Buffer(10); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0, buf[9]); - - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wsint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0, buf[9]); -} - -/* - * Also include tests that are going to force us to go into a negative value and - * insure that it's written correctly. - */ -function testWrite() -{ - var data, buf; - - buf = new Buffer(10); - data = [ 0x234456, 0x87 ]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0x00, buf[0]); - ASSERT.equal(0x23, buf[1]); - ASSERT.equal(0x44, buf[2]); - ASSERT.equal(0x56, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x87, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x23, buf[2]); - ASSERT.equal(0x44, buf[3]); - ASSERT.equal(0x56, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x87, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x23, buf[3]); - ASSERT.equal(0x44, buf[4]); - ASSERT.equal(0x56, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x87, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0x87, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x56, buf[4]); - ASSERT.equal(0x44, buf[5]); - ASSERT.equal(0x23, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x87, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x56, buf[5]); - ASSERT.equal(0x44, buf[6]); - ASSERT.equal(0x23, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x66, buf[9]); - - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x87, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x56, buf[6]); - ASSERT.equal(0x44, buf[7]); - ASSERT.equal(0x23, buf[8]); - ASSERT.equal(0x00, buf[9]); - - data = [0x3421, 0x34abcdba]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0x00, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x34, buf[2]); - ASSERT.equal(0x21, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0xab, buf[5]); - ASSERT.equal(0xcd, buf[6]); - ASSERT.equal(0xba, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x34, buf[3]); - ASSERT.equal(0x21, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0xab, buf[6]); - ASSERT.equal(0xcd, buf[7]); - ASSERT.equal(0xba, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0x21, buf[5]); - ASSERT.equal(0x34, buf[6]); - ASSERT.equal(0xab, buf[7]); - ASSERT.equal(0xcd, buf[8]); - ASSERT.equal(0xba, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0xba, buf[0]); - ASSERT.equal(0xcd, buf[1]); - ASSERT.equal(0xab, buf[2]); - ASSERT.equal(0x34, buf[3]); - ASSERT.equal(0x21, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0xba, buf[1]); - ASSERT.equal(0xcd, buf[2]); - ASSERT.equal(0xab, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0x21, buf[5]); - ASSERT.equal(0x34, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0xba, buf[2]); - ASSERT.equal(0xcd, buf[3]); - ASSERT.equal(0xab, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0x21, buf[6]); - ASSERT.equal(0x34, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x00, buf[9]); - - - data = [ -0x80000000, 0 ]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0x80, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0x00, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x80, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - data = [ -0x7fffffff, -0xffffffff ]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0x80, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x01, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0x01, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x80, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - data = [ 0x0, -0x1]; - buf.fill(0x66); - mod_ctype.wsint64(data, 'big', buf, 0); - ASSERT.equal(0xff, buf[0]); - ASSERT.equal(0xff, buf[1]); - ASSERT.equal(0xff, buf[2]); - ASSERT.equal(0xff, buf[3]); - ASSERT.equal(0xff, buf[4]); - ASSERT.equal(0xff, buf[5]); - ASSERT.equal(0xff, buf[6]); - ASSERT.equal(0xff, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wsint64(data, 'little', buf, 0); - ASSERT.equal(0xff, buf[0]); - ASSERT.equal(0xff, buf[1]); - ASSERT.equal(0xff, buf[2]); - ASSERT.equal(0xff, buf[3]); - ASSERT.equal(0xff, buf[4]); - ASSERT.equal(0xff, buf[5]); - ASSERT.equal(0xff, buf[6]); - ASSERT.equal(0xff, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); -} - -/* - * Make sure we catch invalid writes. - */ -function testWriteInvalid() -{ - var data, buf; - - /* Buffer too small */ - buf = new Buffer(4); - data = [ 0, 0]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 0); - }, Error, 'buffer too small'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 0); - }, Error, 'buffer too small'); - - /* Beyond the end of the buffer */ - buf = new Buffer(12); - data = [ 0, 0]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 11); - }, Error, 'write beyond end of buffer'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 11); - }, Error, 'write beyond end of buffer'); - - /* Write fractional values */ - buf = new Buffer(12); - data = [ 3.33, 0 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 0, 3.3 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ -3.33, 0 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 0, -3.3 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 3.33, 2.42 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 3.33, -2.42 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ -3.33, -2.42 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ -3.33, 2.42 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - /* Signs don't match */ - buf = new Buffer(12); - data = [ 0x800000, -0x32 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ -0x800000, 0x32 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - /* Write values that are too large */ - buf = new Buffer(12); - data = [ 0x80000000, 0 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0x7fffffff, 0x100000000 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0x00, 0x800000000 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0xffffffffff, 0xffffff238 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0x23, 0xffffff238 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ -0x80000000, -0xfff238 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ -0x80000004, -0xfff238 ]; - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wsint64(data, 'little', buf, 1); - }, Error, 'write too large'); -} - - -testRead(); -testWrite(); -testWriteZero(); -testWriteInvalid(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js deleted file mode 100644 index 5236d268..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Tests to verify we're reading in signed integers correctly - */ -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -/* - * Test 8 bit signed integers - */ -function test8() -{ - var data = new Buffer(4); - - data[0] = 0x23; - ASSERT.equal(0x23, mod_ctype.rsint8(data, 'big', 0)); - ASSERT.equal(0x23, mod_ctype.rsint8(data, 'little', 0)); - - data[0] = 0xff; - ASSERT.equal(-1, mod_ctype.rsint8(data, 'big', 0)); - ASSERT.equal(-1, mod_ctype.rsint8(data, 'little', 0)); - - data[0] = 0x87; - data[1] = 0xab; - data[2] = 0x7c; - data[3] = 0xef; - ASSERT.equal(-121, mod_ctype.rsint8(data, 'big', 0)); - ASSERT.equal(-85, mod_ctype.rsint8(data, 'big', 1)); - ASSERT.equal(124, mod_ctype.rsint8(data, 'big', 2)); - ASSERT.equal(-17, mod_ctype.rsint8(data, 'big', 3)); - ASSERT.equal(-121, mod_ctype.rsint8(data, 'little', 0)); - ASSERT.equal(-85, mod_ctype.rsint8(data, 'little', 1)); - ASSERT.equal(124, mod_ctype.rsint8(data, 'little', 2)); - ASSERT.equal(-17, mod_ctype.rsint8(data, 'little', 3)); -} - -function test16() -{ - var buffer = new Buffer(6); - buffer[0] = 0x16; - buffer[1] = 0x79; - ASSERT.equal(0x1679, mod_ctype.rsint16(buffer, 'big', 0)); - ASSERT.equal(0x7916, mod_ctype.rsint16(buffer, 'little', 0)); - - buffer[0] = 0xff; - buffer[1] = 0x80; - ASSERT.equal(-128, mod_ctype.rsint16(buffer, 'big', 0)); - ASSERT.equal(-32513, mod_ctype.rsint16(buffer, 'little', 0)); - - /* test offset with weenix */ - buffer[0] = 0x77; - buffer[1] = 0x65; - buffer[2] = 0x65; - buffer[3] = 0x6e; - buffer[4] = 0x69; - buffer[5] = 0x78; - ASSERT.equal(0x7765, mod_ctype.rsint16(buffer, 'big', 0)); - ASSERT.equal(0x6565, mod_ctype.rsint16(buffer, 'big', 1)); - ASSERT.equal(0x656e, mod_ctype.rsint16(buffer, 'big', 2)); - ASSERT.equal(0x6e69, mod_ctype.rsint16(buffer, 'big', 3)); - ASSERT.equal(0x6978, mod_ctype.rsint16(buffer, 'big', 4)); - ASSERT.equal(0x6577, mod_ctype.rsint16(buffer, 'little', 0)); - ASSERT.equal(0x6565, mod_ctype.rsint16(buffer, 'little', 1)); - ASSERT.equal(0x6e65, mod_ctype.rsint16(buffer, 'little', 2)); - ASSERT.equal(0x696e, mod_ctype.rsint16(buffer, 'little', 3)); - ASSERT.equal(0x7869, mod_ctype.rsint16(buffer, 'little', 4)); -} - -function test32() -{ - var buffer = new Buffer(6); - buffer[0] = 0x43; - buffer[1] = 0x53; - buffer[2] = 0x16; - buffer[3] = 0x79; - ASSERT.equal(0x43531679, mod_ctype.rsint32(buffer, 'big', 0)); - ASSERT.equal(0x79165343, mod_ctype.rsint32(buffer, 'little', 0)); - - buffer[0] = 0xff; - buffer[1] = 0xfe; - buffer[2] = 0xef; - buffer[3] = 0xfa; - ASSERT.equal(-69638, mod_ctype.rsint32(buffer, 'big', 0)); - ASSERT.equal(-84934913, mod_ctype.rsint32(buffer, 'little', 0)); - - buffer[0] = 0x42; - buffer[1] = 0xc3; - buffer[2] = 0x95; - buffer[3] = 0xa9; - buffer[4] = 0x36; - buffer[5] = 0x17; - ASSERT.equal(0x42c395a9, mod_ctype.rsint32(buffer, 'big', 0)); - ASSERT.equal(-1013601994, mod_ctype.rsint32(buffer, 'big', 1)); - ASSERT.equal(-1784072681, mod_ctype.rsint32(buffer, 'big', 2)); - ASSERT.equal(-1449802942, mod_ctype.rsint32(buffer, 'little', 0)); - ASSERT.equal(917083587, mod_ctype.rsint32(buffer, 'little', 1)); - ASSERT.equal(389458325, mod_ctype.rsint32(buffer, 'little', 2)); -} - -test8(); -test16(); -test32(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js deleted file mode 100644 index 5488177b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Test to make sure that we properly are erroring whenever we try to write - * beyond the size of the integer. - */ - -var mod_ctio = require('../../../ctio.js'); -var mod_assert = require('assert'); -var tb = new Buffer(16); /* Largest buffer we'll need */ - -var cases = [ - { func: - function () { - mod_ctio.wsint8(0x80, 'big', tb, 0); - }, test: '+int8_t' }, - { func: - function () { - mod_ctio.wsint8(-0x81, 'big', tb, 0); - }, test: '-int8_t' }, - - { func: - function () { - mod_ctio.wsint16(0x8000, 'big', tb, 0); - }, test: '+int16_t' }, - { func: - function () { - mod_ctio.wsint16(-0x8001, 'big', tb, 0); - }, test: '-int16_t' }, - { func: - function () { - mod_ctio.wsint32(0x80000000, 'big', tb, 0); - }, test: '+int32_t' }, - { func: - function () { - mod_ctio.wsint32(-0x80000001, 'big', tb, 0); - }, test: '-int32_t' }, - { func: - function () { - mod_ctio.wsint64([ 0x80000000, 0 ], 'big', tb, 0); - }, test: '+int64_t' }, - { func: - function () { - mod_ctio.wsint64([ -0x80000000, -1 ], 'big', tb, 0); - }, test: '-int64_t' } -]; - -function test() -{ - var ii; - for (ii = 0; ii < cases.length; ii++) - mod_assert.throws(cases[ii]['func'], Error, cases[ii]['test']); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js deleted file mode 100644 index 98b6a32a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Tests to verify we're writing signed integers correctly - */ -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -function test8() -{ - var buffer = new Buffer(4); - mod_ctype.wsint8(0x23, 'big', buffer, 0); - mod_ctype.wsint8(0x23, 'little', buffer, 1); - mod_ctype.wsint8(-5, 'big', buffer, 2); - mod_ctype.wsint8(-5, 'little', buffer, 3); - - ASSERT.equal(0x23, buffer[0]); - ASSERT.equal(0x23, buffer[1]); - ASSERT.equal(0xfb, buffer[2]); - ASSERT.equal(0xfb, buffer[3]); - - /* Make sure we handle truncation correctly */ - ASSERT.throws(function () { - mod_ctype.wsint8(0xabc, 'big', buffer, 0); - }); - ASSERT.throws(function () { - mod_ctype.wsint8(0xabc, 'little', buffer, 0); - }); -} - -function test16() -{ - var buffer = new Buffer(6); - mod_ctype.wsint16(0x0023, 'big', buffer, 0); - mod_ctype.wsint16(0x0023, 'little', buffer, 2); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x23, buffer[1]); - ASSERT.equal(0x23, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - mod_ctype.wsint16(-5, 'big', buffer, 0); - mod_ctype.wsint16(-5, 'little', buffer, 2); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xfb, buffer[1]); - ASSERT.equal(0xfb, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - - mod_ctype.wsint16(-1679, 'big', buffer, 1); - mod_ctype.wsint16(-1679, 'little', buffer, 3); - ASSERT.equal(0xf9, buffer[1]); - ASSERT.equal(0x71, buffer[2]); - ASSERT.equal(0x71, buffer[3]); - ASSERT.equal(0xf9, buffer[4]); -} - -function test32() -{ - var buffer = new Buffer(8); - mod_ctype.wsint32(0x23, 'big', buffer, 0); - mod_ctype.wsint32(0x23, 'little', buffer, 4); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x23, buffer[3]); - ASSERT.equal(0x23, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - - mod_ctype.wsint32(-5, 'big', buffer, 0); - mod_ctype.wsint32(-5, 'little', buffer, 4); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xfb, buffer[3]); - ASSERT.equal(0xfb, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - - mod_ctype.wsint32(-805306713, 'big', buffer, 0); - mod_ctype.wsint32(-805306713, 'litle', buffer, 4); - ASSERT.equal(0xcf, buffer[0]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xfe, buffer[2]); - ASSERT.equal(0xa7, buffer[3]); - ASSERT.equal(0xa7, buffer[4]); - ASSERT.equal(0xfe, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xcf, buffer[7]); -} - -test8(); -test16(); -test32(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js deleted file mode 100644 index cf66ac7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Test our ability to read and write unsigned 64-bit integers. - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -function testRead() -{ - var res, data; - data = new Buffer(10); - - data[0] = 0x32; - data[1] = 0x65; - data[2] = 0x42; - data[3] = 0x56; - data[4] = 0x23; - data[5] = 0xff; - data[6] = 0xff; - data[7] = 0xff; - data[8] = 0x89; - data[9] = 0x11; - res = mod_ctype.ruint64(data, 'big', 0); - ASSERT.equal(0x32654256, res[0]); - ASSERT.equal(0x23ffffff, res[1]); - res = mod_ctype.ruint64(data, 'big', 1); - ASSERT.equal(0x65425623, res[0]); - ASSERT.equal(0xffffff89, res[1]); - res = mod_ctype.ruint64(data, 'big', 2); - ASSERT.equal(0x425623ff, res[0]); - ASSERT.equal(0xffff8911, res[1]); - res = mod_ctype.ruint64(data, 'little', 0); - ASSERT.equal(0xffffff23, res[0]); - ASSERT.equal(0x56426532, res[1]); - res = mod_ctype.ruint64(data, 'little', 1); - ASSERT.equal(0x89ffffff, res[0]); - ASSERT.equal(0x23564265, res[1]); - res = mod_ctype.ruint64(data, 'little', 2); - ASSERT.equal(0x1189ffff, res[0]); - ASSERT.equal(0xff235642, res[1]); - -} - -function testReadOver() -{ - var res, data; - data = new Buffer(10); - - data[0] = 0x80; - data[1] = 0xff; - data[2] = 0x80; - data[3] = 0xff; - data[4] = 0x80; - data[5] = 0xff; - data[6] = 0x80; - data[7] = 0xff; - data[8] = 0x80; - data[9] = 0xff; - res = mod_ctype.ruint64(data, 'big', 0); - ASSERT.equal(0x80ff80ff, res[0]); - ASSERT.equal(0x80ff80ff, res[1]); - res = mod_ctype.ruint64(data, 'big', 1); - ASSERT.equal(0xff80ff80, res[0]); - ASSERT.equal(0xff80ff80, res[1]); - res = mod_ctype.ruint64(data, 'big', 2); - ASSERT.equal(0x80ff80ff, res[0]); - ASSERT.equal(0x80ff80ff, res[1]); - res = mod_ctype.ruint64(data, 'little', 0); - ASSERT.equal(0xff80ff80, res[0]); - ASSERT.equal(0xff80ff80, res[1]); - res = mod_ctype.ruint64(data, 'little', 1); - ASSERT.equal(0x80ff80ff, res[0]); - ASSERT.equal(0x80ff80ff, res[1]); - res = mod_ctype.ruint64(data, 'little', 2); - ASSERT.equal(0xff80ff80, res[0]); - ASSERT.equal(0xff80ff80, res[1]); -} - -function testWriteZero() -{ - var data, buf; - buf = new Buffer(10); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'big', buf, 0); - ASSERT.equal(0, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0, buf[9]); - - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'little', buf, 0); - ASSERT.equal(0, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - data = [0, 0]; - mod_ctype.wuint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0, buf[2]); - ASSERT.equal(0, buf[3]); - ASSERT.equal(0, buf[4]); - ASSERT.equal(0, buf[5]); - ASSERT.equal(0, buf[6]); - ASSERT.equal(0, buf[7]); - ASSERT.equal(0, buf[8]); - ASSERT.equal(0, buf[9]); -} - -/* - * Also include tests that are going to force us to go into a negative value and - * insure that it's written correctly. - */ -function testWrite() -{ - var data, buf; - - buf = new Buffer(10); - data = [ 0x234456, 0x87 ]; - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 0); - ASSERT.equal(0x00, buf[0]); - ASSERT.equal(0x23, buf[1]); - ASSERT.equal(0x44, buf[2]); - ASSERT.equal(0x56, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x87, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x23, buf[2]); - ASSERT.equal(0x44, buf[3]); - ASSERT.equal(0x56, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x87, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x23, buf[3]); - ASSERT.equal(0x44, buf[4]); - ASSERT.equal(0x56, buf[5]); - ASSERT.equal(0x00, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x87, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 0); - ASSERT.equal(0x87, buf[0]); - ASSERT.equal(0x00, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x56, buf[4]); - ASSERT.equal(0x44, buf[5]); - ASSERT.equal(0x23, buf[6]); - ASSERT.equal(0x00, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x87, buf[1]); - ASSERT.equal(0x00, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x56, buf[5]); - ASSERT.equal(0x44, buf[6]); - ASSERT.equal(0x23, buf[7]); - ASSERT.equal(0x00, buf[8]); - ASSERT.equal(0x66, buf[9]); - - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0x87, buf[2]); - ASSERT.equal(0x00, buf[3]); - ASSERT.equal(0x00, buf[4]); - ASSERT.equal(0x00, buf[5]); - ASSERT.equal(0x56, buf[6]); - ASSERT.equal(0x44, buf[7]); - ASSERT.equal(0x23, buf[8]); - ASSERT.equal(0x00, buf[9]); - - data = [0xffff3421, 0x34abcdba]; - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 0); - ASSERT.equal(0xff, buf[0]); - ASSERT.equal(0xff, buf[1]); - ASSERT.equal(0x34, buf[2]); - ASSERT.equal(0x21, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0xab, buf[5]); - ASSERT.equal(0xcd, buf[6]); - ASSERT.equal(0xba, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0xff, buf[1]); - ASSERT.equal(0xff, buf[2]); - ASSERT.equal(0x34, buf[3]); - ASSERT.equal(0x21, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0xab, buf[6]); - ASSERT.equal(0xcd, buf[7]); - ASSERT.equal(0xba, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'big', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0xff, buf[2]); - ASSERT.equal(0xff, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0x21, buf[5]); - ASSERT.equal(0x34, buf[6]); - ASSERT.equal(0xab, buf[7]); - ASSERT.equal(0xcd, buf[8]); - ASSERT.equal(0xba, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 0); - ASSERT.equal(0xba, buf[0]); - ASSERT.equal(0xcd, buf[1]); - ASSERT.equal(0xab, buf[2]); - ASSERT.equal(0x34, buf[3]); - ASSERT.equal(0x21, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0xff, buf[6]); - ASSERT.equal(0xff, buf[7]); - ASSERT.equal(0x66, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 1); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0xba, buf[1]); - ASSERT.equal(0xcd, buf[2]); - ASSERT.equal(0xab, buf[3]); - ASSERT.equal(0x34, buf[4]); - ASSERT.equal(0x21, buf[5]); - ASSERT.equal(0x34, buf[6]); - ASSERT.equal(0xff, buf[7]); - ASSERT.equal(0xff, buf[8]); - ASSERT.equal(0x66, buf[9]); - - buf.fill(0x66); - mod_ctype.wuint64(data, 'little', buf, 2); - ASSERT.equal(0x66, buf[0]); - ASSERT.equal(0x66, buf[1]); - ASSERT.equal(0xba, buf[2]); - ASSERT.equal(0xcd, buf[3]); - ASSERT.equal(0xab, buf[4]); - ASSERT.equal(0x34, buf[5]); - ASSERT.equal(0x21, buf[6]); - ASSERT.equal(0x34, buf[7]); - ASSERT.equal(0xff, buf[8]); - ASSERT.equal(0xff, buf[9]); -} - -/* - * Make sure we catch invalid writes. - */ -function testWriteInvalid() -{ - var data, buf; - - /* Buffer too small */ - buf = new Buffer(4); - data = [ 0, 0]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 0); - }, Error, 'buffer too small'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 0); - }, Error, 'buffer too small'); - - /* Beyond the end of the buffer */ - buf = new Buffer(12); - data = [ 0, 0]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 11); - }, Error, 'write beyond end of buffer'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 11); - }, Error, 'write beyond end of buffer'); - - /* Write negative values */ - buf = new Buffer(12); - data = [ -3, 0 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write negative number'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write negative number'); - - data = [ 0, -3 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write negative number'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write negative number'); - - data = [ -3, -3 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write negative number'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write negative number'); - - - /* Write fractional values */ - buf = new Buffer(12); - data = [ 3.33, 0 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 0, 3.3 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - data = [ 3.33, 2.42 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write fractions'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write fractions'); - - /* Write values that are too large */ - buf = new Buffer(12); - data = [ 0xffffffffff, 23 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0xffffffffff, 0xffffff238 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write too large'); - - data = [ 0x23, 0xffffff238 ]; - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'big', buf, 1); - }, Error, 'write too large'); - ASSERT.throws(function () { - mod_ctype.wuint64(data, 'little', buf, 1); - }, Error, 'write too large'); -} - - -testRead(); -testReadOver(); -testWriteZero(); -testWrite(); -testWriteInvalid(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js deleted file mode 100644 index 87ae59b7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js +++ /dev/null @@ -1,81 +0,0 @@ -/* - * A battery of tests for sucessful round-trip between writes and reads - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - - -/* - * What the heck, let's just test every value for 8-bits. - */ - -function test8() { - var data = new Buffer(1); - var i; - for (i = 0; i < 256; i++) { - mod_ctype.wuint8(i, 'big', data, 0); - ASSERT.equal(i, mod_ctype.ruint8(data, 'big', 0)); - mod_ctype.wuint8(i, 'little', data, 0); - ASSERT.equal(i, mod_ctype.ruint8(data, 'little', 0)); - } - ASSERT.ok(true); -} - -/* - * Test a random sample of 256 values in the 16-bit unsigned range - */ - -function test16() { - var data = new Buffer(2); - var i = 0; - for (i = 0; i < 256; i++) { - var value = Math.round(Math.random() * Math.pow(2, 16)); - mod_ctype.wuint16(value, 'big', data, 0); - ASSERT.equal(value, mod_ctype.ruint16(data, 'big', 0)); - mod_ctype.wuint16(value, 'little', data, 0); - ASSERT.equal(value, mod_ctype.ruint16(data, 'little', 0)); - } -} - -/* - * Test a random sample of 256 values in the 32-bit unsigned range - */ - -function test32() { - var data = new Buffer(4); - var i = 0; - for (i = 0; i < 256; i++) { - var value = Math.round(Math.random() * Math.pow(2, 32)); - mod_ctype.wuint32(value, 'big', data, 0); - ASSERT.equal(value, mod_ctype.ruint32(data, 'big', 0)); - mod_ctype.wuint32(value, 'little', data, 0); - ASSERT.equal(value, mod_ctype.ruint32(data, 'little', 0)); - } -} - -/* - * Test a random sample of 256 values in the 64-bit unsigned range - */ - -function test64() { - var data = new Buffer(8); - var i = 0; - for (i = 0; i < 256; i++) { - var low = Math.round(Math.random() * Math.pow(2, 32)); - var high = Math.round(Math.random() * Math.pow(2, 32)); - mod_ctype.wuint64([high, low], 'big', data, 0); - var result = mod_ctype.ruint64(data, 'big', 0); - ASSERT.equal(high, result[0]); - ASSERT.equal(low, result[1]); - mod_ctype.wuint64([high, low], 'little', data, 0); - result = mod_ctype.ruint64(data, 'little', 0); - ASSERT.equal(high, result[0]); - ASSERT.equal(low, result[1]); - } -} - -exports.test8 = test8; -exports.test16 = test16; -exports.test32 = test32; -exports.test64 = test64; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js deleted file mode 100644 index b67c077f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js +++ /dev/null @@ -1,95 +0,0 @@ -/* - * A battery of tests to help us read a series of uints - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -/* - * We need to check the following things: - * - We are correctly resolving big endian (doesn't mean anything for 8 bit) - * - Correctly resolving little endian (doesn't mean anything for 8 bit) - * - Correctly using the offsets - * - Correctly interpreting values that are beyond the signed range as unsigned - */ -function test8() -{ - var data = new Buffer(4); - data[0] = 23; - data[1] = 23; - data[2] = 23; - data[3] = 23; - ASSERT.equal(23, mod_ctype.ruint8(data, 'big', 0)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'little', 0)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'big', 1)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'little', 1)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'big', 2)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'little', 2)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'big', 3)); - ASSERT.equal(23, mod_ctype.ruint8(data, 'little', 3)); - data[0] = 255; /* If it became a signed int, would be -1 */ - ASSERT.equal(255, mod_ctype.ruint8(data, 'big', 0)); - ASSERT.equal(255, mod_ctype.ruint8(data, 'little', 0)); -} - -/* - * Test 16 bit unsigned integers. We need to verify the same set as 8 bit, only - * now some of the issues actually matter: - * - We are correctly resolving big endian - * - Correctly resolving little endian - * - Correctly using the offsets - * - Correctly interpreting values that are beyond the signed range as unsigned - */ -function test16() -{ - var data = new Buffer(4); - /* Test signed values first */ - data[0] = 0; - data[1] = 0x23; - data[2] = 0x42; - data[3] = 0x3f; - - ASSERT.equal(0x23, mod_ctype.ruint16(data, 'big', 0)); - ASSERT.equal(0x2342, mod_ctype.ruint16(data, 'big', 1)); - ASSERT.equal(0x423f, mod_ctype.ruint16(data, 'big', 2)); - - ASSERT.equal(0x2300, mod_ctype.ruint16(data, 'little', 0)); - ASSERT.equal(0x4223, mod_ctype.ruint16(data, 'little', 1)); - ASSERT.equal(0x3f42, mod_ctype.ruint16(data, 'little', 2)); - - data[0] = 0xfe; - data[1] = 0xfe; - - ASSERT.equal(0xfefe, mod_ctype.ruint16(data, 'big', 0)); - ASSERT.equal(0xfefe, mod_ctype.ruint16(data, 'little', 0)); -} - -/* - * Test 32 bit unsigned integers. We need to verify the same set as 8 bit, only - * now some of the issues actually matter: - * - We are correctly resolving big endian - * - Correctly using the offsets - * - Correctly interpreting values that are beyond the signed range as unsigned - */ -function test32() -{ - var data = new Buffer(8); - data[0] = 0x32; - data[1] = 0x65; - data[2] = 0x42; - data[3] = 0x56; - data[4] = 0x23; - data[5] = 0xff; - - ASSERT.equal(0x32654256, mod_ctype.ruint32(data, 'big', 0)); - ASSERT.equal(0x65425623, mod_ctype.ruint32(data, 'big', 1)); - ASSERT.equal(0x425623ff, mod_ctype.ruint32(data, 'big', 2)); - - ASSERT.equal(0x56426532, mod_ctype.ruint32(data, 'little', 0)); - ASSERT.equal(0x23564265, mod_ctype.ruint32(data, 'little', 1)); - ASSERT.equal(0xff235642, mod_ctype.ruint32(data, 'little', 2)); -} - -test8(); -test16(); -test32(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js deleted file mode 100644 index d6c4230f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * A battery of tests to help us read a series of uints - */ - -var mod_ctype = require('../../../ctio.js'); -var ASSERT = require('assert'); - -/* - * We need to check the following things: - * - We are correctly resolving big endian (doesn't mean anything for 8 bit) - * - Correctly resolving little endian (doesn't mean anything for 8 bit) - * - Correctly using the offsets - * - Correctly interpreting values that are beyond the signed range as unsigned - */ -function test8() -{ - var data = new Buffer(4); - mod_ctype.wuint8(23, 'big', data, 0); - mod_ctype.wuint8(23, 'big', data, 1); - mod_ctype.wuint8(23, 'big', data, 2); - mod_ctype.wuint8(23, 'big', data, 3); - ASSERT.equal(23, data[0]); - ASSERT.equal(23, data[1]); - ASSERT.equal(23, data[2]); - ASSERT.equal(23, data[3]); - mod_ctype.wuint8(23, 'little', data, 0); - mod_ctype.wuint8(23, 'little', data, 1); - mod_ctype.wuint8(23, 'little', data, 2); - mod_ctype.wuint8(23, 'little', data, 3); - ASSERT.equal(23, data[0]); - ASSERT.equal(23, data[1]); - ASSERT.equal(23, data[2]); - ASSERT.equal(23, data[3]); - mod_ctype.wuint8(255, 'big', data, 0); - ASSERT.equal(255, data[0]); - mod_ctype.wuint8(255, 'little', data, 0); - ASSERT.equal(255, data[0]); -} - -function test16() -{ - var value = 0x2343; - var data = new Buffer(4); - mod_ctype.wuint16(value, 'big', data, 0); - ASSERT.equal(0x23, data[0]); - ASSERT.equal(0x43, data[1]); - mod_ctype.wuint16(value, 'big', data, 1); - ASSERT.equal(0x23, data[1]); - ASSERT.equal(0x43, data[2]); - mod_ctype.wuint16(value, 'big', data, 2); - ASSERT.equal(0x23, data[2]); - ASSERT.equal(0x43, data[3]); - - mod_ctype.wuint16(value, 'little', data, 0); - ASSERT.equal(0x23, data[1]); - ASSERT.equal(0x43, data[0]); - - mod_ctype.wuint16(value, 'little', data, 1); - ASSERT.equal(0x23, data[2]); - ASSERT.equal(0x43, data[1]); - - mod_ctype.wuint16(value, 'little', data, 2); - ASSERT.equal(0x23, data[3]); - ASSERT.equal(0x43, data[2]); - - value = 0xff80; - mod_ctype.wuint16(value, 'little', data, 0); - ASSERT.equal(0xff, data[1]); - ASSERT.equal(0x80, data[0]); - - mod_ctype.wuint16(value, 'big', data, 0); - ASSERT.equal(0xff, data[0]); - ASSERT.equal(0x80, data[1]); -} - -function test32() -{ - var data = new Buffer(6); - var value = 0xe7f90a6d; - - mod_ctype.wuint32(value, 'big', data, 0); - ASSERT.equal(0xe7, data[0]); - ASSERT.equal(0xf9, data[1]); - ASSERT.equal(0x0a, data[2]); - ASSERT.equal(0x6d, data[3]); - - mod_ctype.wuint32(value, 'big', data, 1); - ASSERT.equal(0xe7, data[1]); - ASSERT.equal(0xf9, data[2]); - ASSERT.equal(0x0a, data[3]); - ASSERT.equal(0x6d, data[4]); - - mod_ctype.wuint32(value, 'big', data, 2); - ASSERT.equal(0xe7, data[2]); - ASSERT.equal(0xf9, data[3]); - ASSERT.equal(0x0a, data[4]); - ASSERT.equal(0x6d, data[5]); - - mod_ctype.wuint32(value, 'little', data, 0); - ASSERT.equal(0xe7, data[3]); - ASSERT.equal(0xf9, data[2]); - ASSERT.equal(0x0a, data[1]); - ASSERT.equal(0x6d, data[0]); - - mod_ctype.wuint32(value, 'little', data, 1); - ASSERT.equal(0xe7, data[4]); - ASSERT.equal(0xf9, data[3]); - ASSERT.equal(0x0a, data[2]); - ASSERT.equal(0x6d, data[1]); - - mod_ctype.wuint32(value, 'little', data, 2); - ASSERT.equal(0xe7, data[5]); - ASSERT.equal(0xf9, data[4]); - ASSERT.equal(0x0a, data[3]); - ASSERT.equal(0x6d, data[2]); -} - -function test64() -{ - var data = new Buffer(10); - var value = 0x0007cda8e7f90a6d; - var high = Math.floor(value / Math.pow(2, 32)); - var low = value - (high * Math.pow(2, 32)); - ASSERT.equal(0x0007cda8, high); - ASSERT.equal(0xe7f90a6d, low); - - mod_ctype.wuint64([high, low], 'big', data, 0); - ASSERT.equal(0x00, data[0]); - ASSERT.equal(0x07, data[1]); - ASSERT.equal(0xcd, data[2]); - ASSERT.equal(0xa8, data[3]); - ASSERT.equal(0xe7, data[4]); - ASSERT.equal(0xf9, data[5]); - ASSERT.equal(0x0a, data[6]); - ASSERT.equal(0x6d, data[7]); - - mod_ctype.wuint64([high, low], 'little', data, 0); - ASSERT.equal(0x6d, data[0]); - ASSERT.equal(0x0a, data[1]); - ASSERT.equal(0xf9, data[2]); - ASSERT.equal(0xe7, data[3]); - ASSERT.equal(0xa8, data[4]); - ASSERT.equal(0xcd, data[5]); - ASSERT.equal(0x07, data[6]); - ASSERT.equal(0x00, data[7]); -} - -test8(); -test16(); -test32(); -test64(); - -exports.test8 = test8; -exports.test16 = test16; -exports.test32 = test32; -exports.test64 = test64; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js deleted file mode 100644 index e9895152..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Simple does to see if it works at all - */ -var mod_ctype = require('../../ctype'); -var ASSERT = require('assert'); -var mod_sys = require('sys'); - -function test() -{ - var ii, p, result, buffer; - - p = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer(4); - buffer[0] = 23; - buffer[3] = 42; - result = p.readData([ { x: { type: 'uint8_t' }}, - { y: { type: 'uint8_t', offset: 3 }} - ], buffer, 0); - ASSERT.equal(23, result['x']); - ASSERT.equal(42, result['y']); - - buffer = new Buffer(23); - for (ii = 0; ii < 23; ii++) - buffer[ii] = 0; - - buffer.write('Hello, world!'); - result = p.readData([ { x: { type: 'char[20]' }} ], buffer, 0); - - /* - * This is currently broken behvaior, need to redesign check - * ASSERT.equal('Hello, world!', result['x'].toString('utf-8', 0, - * result['x'].length)); - */ - - buffer = new Buffer(4); - buffer[0] = 0x03; - buffer[1] = 0x24; - buffer[2] = 0x25; - buffer[3] = 0x26; - result = p.readData([ { y: { type: 'uint8_t' }}, - { x: { type: 'uint8_t[y]' }}], buffer, 0); - console.log(mod_sys.inspect(result, true)); - - p.typedef('ssize_t', 'int32_t'); - ASSERT.deepEqual({ 'ssize_t': 'int32_t' }, p.lstypes()); - result = p.readData([ { x: { type: 'ssize_t' } } ], buffer, 0); - ASSERT.equal(0x26252403, result['x']); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js deleted file mode 100644 index 89d446f2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Simple does it fucking work at all test - */ - -var mod_ctype = require('../../ctype'); -var ASSERT = require('assert'); -var mod_sys = require('sys'); - -function test() -{ - var ii, p, buffer, buf2; - - p = new mod_ctype.Parser({ endian: 'big' }); - buffer = new Buffer(4); - p.writeData([ { x: { type: 'uint8_t', value: 23 }}, - { y: { type: 'uint8_t', offset: 3, value: 42 }} - ], buffer, 0); - ASSERT.equal(23, buffer[0]); - ASSERT.equal(42, buffer[3]); - - buffer = new Buffer(20); - for (ii = 0; ii < 20; ii++) - buffer[ii] = 0; - - buffer.write('Hello, world!'); - buf2 = new Buffer(22); - p.writeData([ { x: { type: 'char[20]', value: buffer }} ], buf2, 0); - for (ii = 0; ii < 20; ii++) - ASSERT.equal(buffer[ii], buf2[ii]); - /* - * This is currently broken behvaior, need to redesign check - * ASSERT.equal('Hello, world!', result['x'].toString('utf-8', 0, - * result['x'].length)); - */ - - buffer = new Buffer(4); - p.writeData([ { y: { type: 'uint8_t', value: 3 }}, - { x: { type: 'uint8_t[y]', value: [ 0x24, 0x25, 0x26] }}], - buffer, 0); - console.log(mod_sys.inspect(buffer)); - - p.typedef('ssize_t', 'int32_t'); - ASSERT.deepEqual({ 'ssize_t': 'int32_t' }, p.lstypes()); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js deleted file mode 100644 index 14d9529c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Test the different forms of reading characters: - * - * - the default, a single element buffer - * - uint8, values are uint8_ts - * - int8, values are int8_ts - */ -var mod_ctype = require('../../ctype'); -var mod_assert = require('assert'); - -function test() -{ - var p, buf, res; - - buf = new Buffer(1); - buf[0] = 255; - - p = new mod_ctype.Parser({ endian: 'little'}); - res = p.readData([ { c: { type: 'char' }} ], buf, 0); - res = res['c']; - mod_assert.ok(res instanceof Buffer); - mod_assert.equal(255, res[0]); - - p = new mod_ctype.Parser({ endian: 'little', - 'char-type': 'int8' }); - res = p.readData([ { c: { type: 'char' }} ], buf, 0); - res = res['c']; - mod_assert.ok(typeof (res) == 'number', 'got typeof (res): ' + - typeof (res)); - mod_assert.equal(-1, res); - - p = new mod_ctype.Parser({ endian: 'little', - 'char-type': 'uint8' }); - res = p.readData([ { c: { type: 'char' }} ], buf, 0); - res = res['c']; - mod_assert.ok(typeof (res) == 'number', 'got typeof (res): ' + - typeof (res)); - mod_assert.equal(255, res); - -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js deleted file mode 100644 index 11fc2d2c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Simple test to make sure that the endian setting works. - */ - -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var parser, buf; - - parser = new mod_ctype.Parser({ - endian: 'little' - }); - - buf = new Buffer(2); - parser.writeData([ { key: { type: 'uint16_t' } } ], buf, 0, [ 0x1234 ]); - mod_assert.equal(buf[0], 0x34); - mod_assert.equal(buf[1], 0x12); - parser.setEndian('big'); - - parser.writeData([ { key: { type: 'uint16_t' } } ], buf, 0, [ 0x1234 ]); - mod_assert.equal(buf[0], 0x12); - mod_assert.equal(buf[1], 0x34); - - parser.setEndian('little'); - parser.writeData([ { key: { type: 'uint16_t' } } ], buf, 0, [ 0x1234 ]); - mod_assert.equal(buf[0], 0x34); - mod_assert.equal(buf[1], 0x12); -} - -function fail() -{ - var parser; - - parser = new mod_ctype.Parser({ - endian: 'little' - }); - mod_assert.throws(function () { - parser.setEndian('littlebigwrong'); - }); -} - -test(); -fail(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js deleted file mode 100644 index 9491cf6e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * A long overdue test to go through and verify that we can read and write - * structures as well as nested structures. - */ - -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var parser, buf, data; - parser = new mod_ctype.Parser({ - endian: 'little' - }); - parser.typedef('point_t', [ - { x: { type: 'uint8_t' } }, - { y: { type: 'uint8_t' } } - ]); - buf = new Buffer(2); - data = [ - { point: { type: 'point_t', value: [ 23, 42 ] } } - ]; - parser.writeData(data, buf, 0); - mod_assert.ok(buf[0] == 23); - mod_assert.ok(buf[1] == 42); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js deleted file mode 100644 index 6c490a2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Testing to ensure we're reading the expected number bytes - */ -var mod_ctype = require('../../ctype'); -var ASSERT = require('assert'); - -function testUint8() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('80', 'hex'); - result = parser.readStruct([ { item: { type: 'uint8_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 1); -} - -function testSint8() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('80', 'hex'); - result = parser.readStruct([ { item: { type: 'int8_t' } } ], buffer, 0); - ASSERT.equal(result['size'], 1); -} - -function testUint16() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('8000', 'hex'); - result = parser.readStruct([ { item: { type: 'uint16_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 2); -} - -function testSint16() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('8000', 'hex'); - result = parser.readStruct([ { item: { type: 'int16_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 2); -} - -function testUint32() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('80000000', 'hex'); - result = parser.readStruct([ { item: { type: 'uint32_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 4); -} - -function testSint32() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('80000000', 'hex'); - result = parser.readStruct([ { item: { type: 'int32_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 4); -} - -function testUint64() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('8000000000000000', 'hex'); - result = parser.readStruct([ { item: { type: 'uint64_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 8); -} - -function testSint64() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('8000000000000000', 'hex'); - result = parser.readStruct([ { item: { type: 'int64_t' } } ], buffer, - 0); - ASSERT.equal(result['size'], 8); -} - -function testFloat() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('ABAAAA3E', 'hex'); - result = parser.readStruct([ { item: { type: 'float' } } ], buffer, 0); - ASSERT.equal(result['size'], 4); -} - -function testDouble() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('000000000000F03F', 'hex'); - result = parser.readStruct([ { item: { type: 'double' } } ], buffer, 0); - ASSERT.equal(result['size'], 8); -} - -function testChar() -{ - var parser, result, buffer; - parser = new mod_ctype.Parser({ endian: 'little' }); - buffer = new Buffer('t'); - result = parser.readStruct([ { item: { type: 'char' } } ], buffer, 0); - ASSERT.equal(result['size'], 1); -} - -function test() -{ - testSint8(); - testUint8(); - testSint16(); - testUint16(); - testSint32(); - testUint32(); - testSint64(); - testUint64(); - testFloat(); - testDouble(); - testChar(); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js deleted file mode 100644 index 09c1a5ba..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * A long overdue test to go through and verify that we can read and write - * structures as well as nested structures. - */ - -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var parser, buf, data; - parser = new mod_ctype.Parser({ - endian: 'little' - }); - parser.typedef('point_t', [ - { x: { type: 'uint8_t' } }, - { y: { type: 'uint8_t' } } - ]); - buf = new Buffer(2); - data = [ - { point: { type: 'point_t' } } - ]; - parser.writeData(data, buf, 0, [ [ 23, 42 ] ]); - mod_assert.ok(buf[0] == 23); - mod_assert.ok(buf[1] == 42); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js deleted file mode 100644 index 48556667..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Test to verify that the offset is incremented when structures are written to. - * Hopefully we will not regress issue #41 - */ - -var mod_ctype = require('../../ctype.js'); -var mod_assert = require('assert'); - -function test() -{ - var parser, buf, data; - parser = new mod_ctype.Parser({ - endian: 'little' - }); - parser.typedef('point_t', [ - { x: { type: 'uint8_t' } }, - { y: { type: 'uint8_t' } } - ]); - buf = new Buffer(4); - data = [ - { point1: { type: 'point_t' } }, - { point2: { type: 'point_t' } } - ]; - parser.writeData(data, buf, 0, [ [ 23, 42 ], [ 91, 18 ] ]); - mod_assert.ok(buf[0] == 23); - mod_assert.ok(buf[1] == 42); - mod_assert.ok(buf[2] == 91); - mod_assert.ok(buf[3] == 18); -} - -test(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/package.json deleted file mode 100644 index 416f618a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/http-signature/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Joyent, Inc" - }, - "name": "http-signature", - "description": "Reference implementation of Joyent's HTTP Signature Scheme", - "version": "0.10.0", - "repository": { - "type": "git", - "url": "git://github.com/joyent/node-http-signature.git" - }, - "engines": { - "node": ">=0.8" - }, - "main": "lib/index.js", - "scripts": { - "test": "tap tst/*.js" - }, - "dependencies": { - "assert-plus": "0.1.2", - "asn1": "0.1.11", - "ctype": "0.5.2" - }, - "devDependencies": { - "node-uuid": "1.4.0", - "tap": "0.4.2" - }, - "readme": "# node-http-signature\n\nnode-http-signature is a node.js library that has client and server components\nfor Joyent's [HTTP Signature Scheme](http_signing.md).\n\n## Usage\n\nNote the example below signs a request with the same key/cert used to start an\nHTTP server. This is almost certainly not what you actaully want, but is just\nused to illustrate the API calls; you will need to provide your own key\nmanagement in addition to this library.\n\n### Client\n\n var fs = require('fs');\n var https = require('https');\n var httpSignature = require('http-signature');\n\n var key = fs.readFileSync('./key.pem', 'ascii');\n\n var options = {\n host: 'localhost',\n port: 8443,\n path: '/',\n method: 'GET',\n headers: {}\n };\n\n // Adds a 'Date' header in, signs it, and adds the\n // 'Authorization' header in.\n var req = https.request(options, function(res) {\n console.log(res.statusCode);\n });\n\n\n httpSignature.sign(req, {\n key: key,\n keyId: './cert.pem'\n });\n\n req.end();\n\n### Server\n\n var fs = require('fs');\n var https = require('https');\n var httpSignature = require('http-signature');\n\n var options = {\n key: fs.readFileSync('./key.pem'),\n cert: fs.readFileSync('./cert.pem')\n };\n\n https.createServer(options, function (req, res) {\n var rc = 200;\n var parsed = httpSignature.parseRequest(req);\n var pub = fs.readFileSync(parsed.keyId, 'ascii');\n if (!httpSignature.verifySignature(parsed, pub))\n rc = 401;\n\n res.writeHead(rc);\n res.end();\n }).listen(8443);\n\n## Installation\n\n npm install http-signature\n\n## License\n\nMIT.\n\n## Bugs\n\nSee <https://github.com/joyent/node-http-signature/issues>.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/joyent/node-http-signature/issues" - }, - "homepage": "https://github.com/joyent/node-http-signature", - "_id": "http-signature@0.10.0", - "dist": { - "shasum": "ed3c3415949cf275765bb5394a145ada7a1e506a" - }, - "_from": "http-signature@~0.10.0", - "_resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/README.md deleted file mode 100644 index 5d764f3a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# json-stringify-safe - -Like JSON.stringify, but doesn't throw on circular references. - -## Usage - -Takes the same arguments as `JSON.stringify`. - -```javascript -var stringify = require('json-stringify-safe'); -var circularObj = {}; -circularObj.circularRef = circularObj; -circularObj.list = [ circularObj, circularObj ]; -console.log(stringify(circularObj, null, 2)); -``` - -Output: - -```json -{ - "circularRef": "[Circular]", - "list": [ - "[Circular]", - "[Circular]" - ] -} -``` - -## Details - -``` -stringify(obj, serializer, indent, decycler) -``` - -The first three arguments are the same as to JSON.stringify. The last -is an argument that's only used when the object has been seen already. - -The default `decycler` function returns the string `'[Circular]'`. -If, for example, you pass in `function(k,v){}` (return nothing) then it -will prune cycles. If you pass in `function(k,v){ return {foo: 'bar'}}`, -then cyclical objects will always be represented as `{"foo":"bar"}` in -the result. - -``` -stringify.getSerialize(serializer, decycler) -``` - -Returns a serializer that can be used elsewhere. This is the actual -function that's passed to JSON.stringify. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/package.json deleted file mode 100644 index dc9929d9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "json-stringify-safe", - "version": "5.0.0", - "description": "Like JSON.stringify, but doesn't blow up on circular refs", - "main": "stringify.js", - "scripts": { - "test": "node test.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/json-stringify-safe" - }, - "keywords": [ - "json", - "stringify", - "circular", - "safe" - ], - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "license": "BSD", - "readmeFilename": "README.md", - "readme": "# json-stringify-safe\n\nLike JSON.stringify, but doesn't throw on circular references.\n\n## Usage\n\nTakes the same arguments as `JSON.stringify`.\n\n```javascript\nvar stringify = require('json-stringify-safe');\nvar circularObj = {};\ncircularObj.circularRef = circularObj;\ncircularObj.list = [ circularObj, circularObj ];\nconsole.log(stringify(circularObj, null, 2));\n```\n\nOutput:\n\n```json\n{\n \"circularRef\": \"[Circular]\",\n \"list\": [\n \"[Circular]\",\n \"[Circular]\"\n ]\n}\n```\n\n## Details\n\n```\nstringify(obj, serializer, indent, decycler)\n```\n\nThe first three arguments are the same as to JSON.stringify. The last\nis an argument that's only used when the object has been seen already.\n\nThe default `decycler` function returns the string `'[Circular]'`.\nIf, for example, you pass in `function(k,v){}` (return nothing) then it\nwill prune cycles. If you pass in `function(k,v){ return {foo: 'bar'}}`,\nthen cyclical objects will always be represented as `{\"foo\":\"bar\"}` in\nthe result.\n\n```\nstringify.getSerialize(serializer, decycler)\n```\n\nReturns a serializer that can be used elsewhere. This is the actual\nfunction that's passed to JSON.stringify.\n", - "bugs": { - "url": "https://github.com/isaacs/json-stringify-safe/issues" - }, - "homepage": "https://github.com/isaacs/json-stringify-safe", - "_id": "json-stringify-safe@5.0.0", - "dist": { - "shasum": "3bef04524e23eb51118883db0bcf4e18c49ed92c" - }, - "_from": "json-stringify-safe@~5.0.0", - "_resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/stringify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/stringify.js deleted file mode 100644 index 853ef9b2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/stringify.js +++ /dev/null @@ -1,39 +0,0 @@ -module.exports = stringify; - -function getSerialize (fn, decycle) { - var seen = [], keys = []; - decycle = decycle || function(key, value) { - return '[Circular ' + getPath(value, seen, keys) + ']' - }; - return function(key, value) { - var ret = value; - if (typeof value === 'object' && value) { - if (seen.indexOf(value) !== -1) - ret = decycle(key, value); - else { - seen.push(value); - keys.push(key); - } - } - if (fn) ret = fn(key, ret); - return ret; - } -} - -function getPath (value, seen, keys) { - var index = seen.indexOf(value); - var path = [ keys[index] ]; - for (index--; index >= 0; index--) { - if (seen[index][ path[0] ] === value) { - value = seen[index]; - path.unshift(keys[index]); - } - } - return '~' + path.join('.'); -} - -function stringify(obj, fn, spaces, decycle) { - return JSON.stringify(obj, getSerialize(fn, decycle), spaces); -} - -stringify.getSerialize = getSerialize; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/test.js deleted file mode 100644 index 991e9197..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/json-stringify-safe/test.js +++ /dev/null @@ -1,128 +0,0 @@ -var stringify = require('./stringify.js'); - -var circularObj = { a: 'b' }; -circularObj.circularRef = circularObj; -circularObj.list = [ circularObj, circularObj ]; - -////////// -// default -var testObj = { - "a": "b", - "circularRef": "[Circular ~]", - "list": [ - "[Circular ~]", - "[Circular ~]" - ] -}; - -var assert = require('assert'); -assert.equal(JSON.stringify(testObj, null, 2), - stringify(circularObj, null, 2)); - -assert.equal(JSON.stringify(testObj, null, 2), - JSON.stringify(circularObj, stringify.getSerialize(), 2)); - - -//////// -// prune -testObj = { - "a": "b", - "list": [ - null, - null - ] -}; - -function prune(k, v) {} - -assert.equal(JSON.stringify(testObj, null, 2), - stringify(circularObj, null, 2, prune)); - -/////////// -// re-cycle -// (throws) -function recycle(k, v) { - return v; -} - -assert.throws(function() { - stringify(circularObj, null, 2, recycle); -}); - -//////// -// fancy -testObj = { - "a": "b", - "circularRef": "circularRef{a:string,circularRef:Object,list:Array}", - "list": [ - "0{a:string,circularRef:Object,list:Array}", - "1{a:string,circularRef:Object,list:Array}" - ] -}; - -function signer(key, value) { - var ret = key + '{'; - var f = false; - for (var i in value) { - if (f) - ret += ','; - f = true; - ret += i + ':'; - var v = value[i]; - switch (typeof v) { - case 'object': - if (!v) - ret += 'null'; - else if (Array.isArray(v)) - ret += 'Array' - else - ret += v.constructor && v.constructor.name || 'Object'; - break; - default: - ret += typeof v; - break; - } - } - ret += '}'; - return ret; -} - -assert.equal(JSON.stringify(testObj, null, 2), - stringify(circularObj, null, 2, signer)); - - -/////// -//multi -var a = { x: 1 }; -a.a = a; -var b = { x: 2 }; -b.a = a; - -var c = { a: a, b: b }; -var d = { list: [ a, b, c ] }; -d.d = d; - -var multi = { - "list": [ - { - "x": 1, - "a": "[Circular ~.list.0]" - }, - { - "x": 2, - "a": "[Circular ~.list.0]" - }, - { - "a": "[Circular ~.list.0]", - "b": "[Circular ~.list.1]" - } - ], - "d": "[Circular ~]" -}; - -assert.equal(JSON.stringify(multi, null, 2), - stringify(d, null, 2)); - -//////// -// pass! -console.log('ok'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/LICENSE deleted file mode 100644 index 451fc455..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/README.md deleted file mode 100644 index 6ca19bd1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# mime - -Comprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community. - -## Install - -Install with [npm](http://github.com/isaacs/npm): - - npm install mime - -## API - Queries - -### mime.lookup(path) -Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. - - var mime = require('mime'); - - mime.lookup('/path/to/file.txt'); // => 'text/plain' - mime.lookup('file.txt'); // => 'text/plain' - mime.lookup('.TXT'); // => 'text/plain' - mime.lookup('htm'); // => 'text/html' - -### mime.default_type -Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) - -### mime.extension(type) -Get the default extension for `type` - - mime.extension('text/html'); // => 'html' - mime.extension('application/octet-stream'); // => 'bin' - -### mime.charsets.lookup() - -Map mime-type to charset - - mime.charsets.lookup('text/plain'); // => 'UTF-8' - -(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) - -## API - Defining Custom Types - -The following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types). - -### mime.define() - -Add custom mime/extension mappings - - mime.define({ - 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], - 'application/x-my-type': ['x-mt', 'x-mtt'], - // etc ... - }); - - mime.lookup('x-sft'); // => 'text/x-some-format' - -The first entry in the extensions array is returned by `mime.extension()`. E.g. - - mime.extension('text/x-some-format'); // => 'x-sf' - -### mime.load(filepath) - -Load mappings from an Apache ".types" format file - - mime.load('./my_project.types'); - -The .types file format is simple - See the `types` dir for examples. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/mime.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/mime.js deleted file mode 100644 index 48be0c5e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/mime.js +++ /dev/null @@ -1,114 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -function Mime() { - // Map of extension -> mime type - this.types = Object.create(null); - - // Map of mime type -> extension - this.extensions = Object.create(null); -} - -/** - * Define mimetype -> extension mappings. Each key is a mime-type that maps - * to an array of extensions associated with the type. The first extension is - * used as the default extension for the type. - * - * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); - * - * @param map (Object) type definitions - */ -Mime.prototype.define = function (map) { - for (var type in map) { - var exts = map[type]; - - for (var i = 0; i < exts.length; i++) { - if (process.env.DEBUG_MIME && this.types[exts]) { - console.warn(this._loading.replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + - this.types[exts] + ' to ' + type); - } - - this.types[exts[i]] = type; - } - - // Default extension is the first one we encounter - if (!this.extensions[type]) { - this.extensions[type] = exts[0]; - } - } -}; - -/** - * Load an Apache2-style ".types" file - * - * This may be called multiple times (it's expected). Where files declare - * overlapping types/extensions, the last file wins. - * - * @param file (String) path of file to load. - */ -Mime.prototype.load = function(file) { - - this._loading = file; - // Read file and split into lines - var map = {}, - content = fs.readFileSync(file, 'ascii'), - lines = content.split(/[\r\n]+/); - - lines.forEach(function(line) { - // Clean up whitespace/comments, and split into fields - var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); - map[fields.shift()] = fields; - }); - - this.define(map); - - this._loading = null; -}; - -/** - * Lookup a mime type based on extension - */ -Mime.prototype.lookup = function(path, fallback) { - var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase(); - - return this.types[ext] || fallback || this.default_type; -}; - -/** - * Return file extension associated with a mime type - */ -Mime.prototype.extension = function(mimeType) { - var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); - return this.extensions[type]; -}; - -// Default instance -var mime = new Mime(); - -// Load local copy of -// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types -mime.load(path.join(__dirname, 'types/mime.types')); - -// Load additional types from node.js community -mime.load(path.join(__dirname, 'types/node.types')); - -// Default type -mime.default_type = mime.lookup('bin'); - -// -// Additional API specific to the default instance -// - -mime.Mime = Mime; - -/** - * Lookup a charset based on mime type. - */ -mime.charsets = { - lookup: function(mimeType, fallback) { - // Assume text types are utf8 - return (/^text\//).test(mimeType) ? 'UTF-8' : fallback; - } -}; - -module.exports = mime; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/package.json deleted file mode 100644 index a9759392..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com", - "url": "http://github.com/broofa" - }, - "contributors": [ - { - "name": "Benjamin Thomas", - "email": "benjamin@benjaminthomas.org", - "url": "http://github.com/bentomas" - } - ], - "dependencies": {}, - "description": "A comprehensive library for mime-type mapping", - "devDependencies": {}, - "keywords": [ - "util", - "mime" - ], - "main": "mime.js", - "name": "mime", - "repository": { - "url": "https://github.com/broofa/node-mime", - "type": "git" - }, - "version": "1.2.11", - "readme": "# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.\n\n var mime = require('mime');\n\n mime.lookup('/path/to/file.txt'); // => 'text/plain'\n mime.lookup('file.txt'); // => 'text/plain'\n mime.lookup('.TXT'); // => 'text/plain'\n mime.lookup('htm'); // => 'text/html'\n\n### mime.default_type\nSets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension('text/html'); // => 'html'\n mime.extension('application/octet-stream'); // => 'bin'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup('text/plain'); // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n 'application/x-my-type': ['x-mt', 'x-mtt'],\n // etc ...\n });\n\n mime.lookup('x-sft'); // => 'text/x-some-format'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n mime.load('./my_project.types');\n\nThe .types file format is simple - See the `types` dir for examples.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/broofa/node-mime/issues" - }, - "homepage": "https://github.com/broofa/node-mime", - "_id": "mime@1.2.11", - "_from": "mime@~1.2.9" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/test.js deleted file mode 100644 index 2cda1c7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/test.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Usage: node test.js - */ - -var mime = require('./mime'); -var assert = require('assert'); -var path = require('path'); - -function eq(a, b) { - console.log('Test: ' + a + ' === ' + b); - assert.strictEqual.apply(null, arguments); -} - -console.log(Object.keys(mime.extensions).length + ' types'); -console.log(Object.keys(mime.types).length + ' extensions\n'); - -// -// Test mime lookups -// - -eq('text/plain', mime.lookup('text.txt')); // normal file -eq('text/plain', mime.lookup('TEXT.TXT')); // uppercase -eq('text/plain', mime.lookup('dir/text.txt')); // dir + file -eq('text/plain', mime.lookup('.text.txt')); // hidden file -eq('text/plain', mime.lookup('.txt')); // nameless -eq('text/plain', mime.lookup('txt')); // extension-only -eq('text/plain', mime.lookup('/txt')); // extension-less () -eq('text/plain', mime.lookup('\\txt')); // Windows, extension-less -eq('application/octet-stream', mime.lookup('text.nope')); // unrecognized -eq('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default - -// -// Test extensions -// - -eq('txt', mime.extension(mime.types.text)); -eq('html', mime.extension(mime.types.htm)); -eq('bin', mime.extension('application/octet-stream')); -eq('bin', mime.extension('application/octet-stream ')); -eq('html', mime.extension(' text/html; charset=UTF-8')); -eq('html', mime.extension('text/html; charset=UTF-8 ')); -eq('html', mime.extension('text/html; charset=UTF-8')); -eq('html', mime.extension('text/html ; charset=UTF-8')); -eq('html', mime.extension('text/html;charset=UTF-8')); -eq('html', mime.extension('text/Html;charset=UTF-8')); -eq(undefined, mime.extension('unrecognized')); - -// -// Test node.types lookups -// - -eq('application/font-woff', mime.lookup('file.woff')); -eq('application/octet-stream', mime.lookup('file.buffer')); -eq('audio/mp4', mime.lookup('file.m4a')); -eq('font/opentype', mime.lookup('file.otf')); - -// -// Test charsets -// - -eq('UTF-8', mime.charsets.lookup('text/plain')); -eq(undefined, mime.charsets.lookup(mime.types.js)); -eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); - -// -// Test for overlaps between mime.types and node.types -// - -var apacheTypes = new mime.Mime(), nodeTypes = new mime.Mime(); -apacheTypes.load(path.join(__dirname, 'types/mime.types')); -nodeTypes.load(path.join(__dirname, 'types/node.types')); - -var keys = [].concat(Object.keys(apacheTypes.types)) - .concat(Object.keys(nodeTypes.types)); -keys.sort(); -for (var i = 1; i < keys.length; i++) { - if (keys[i] == keys[i-1]) { - console.warn('Warning: ' + - 'node.types defines ' + keys[i] + '->' + nodeTypes.types[keys[i]] + - ', mime.types defines ' + keys[i] + '->' + apacheTypes.types[keys[i]]); - } -} - -console.log('\nOK'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/mime.types b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/mime.types deleted file mode 100644 index da8cd691..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/mime.types +++ /dev/null @@ -1,1588 +0,0 @@ -# This file maps Internet media types to unique file extension(s). -# Although created for httpd, this file is used by many software systems -# and has been placed in the public domain for unlimited redisribution. -# -# The table below contains both registered and (common) unregistered types. -# A type that has no unique extension can be ignored -- they are listed -# here to guide configurations toward known types and to make it easier to -# identify "new" types. File extensions are also commonly used to indicate -# content languages and encodings, so choose them carefully. -# -# Internet media types should be registered as described in RFC 4288. -# The registry is at <http://www.iana.org/assignments/media-types/>. -# -# MIME type (lowercased) Extensions -# ============================================ ========== -# application/1d-interleaved-parityfec -# application/3gpp-ims+xml -# application/activemessage -application/andrew-inset ez -# application/applefile -application/applixware aw -application/atom+xml atom -application/atomcat+xml atomcat -# application/atomicmail -application/atomsvc+xml atomsvc -# application/auth-policy+xml -# application/batch-smtp -# application/beep+xml -# application/calendar+xml -# application/cals-1840 -# application/ccmp+xml -application/ccxml+xml ccxml -application/cdmi-capability cdmia -application/cdmi-container cdmic -application/cdmi-domain cdmid -application/cdmi-object cdmio -application/cdmi-queue cdmiq -# application/cea-2018+xml -# application/cellml+xml -# application/cfw -# application/cnrp+xml -# application/commonground -# application/conference-info+xml -# application/cpl+xml -# application/csta+xml -# application/cstadata+xml -application/cu-seeme cu -# application/cybercash -application/davmount+xml davmount -# application/dca-rft -# application/dec-dx -# application/dialog-info+xml -# application/dicom -# application/dns -application/docbook+xml dbk -# application/dskpp+xml -application/dssc+der dssc -application/dssc+xml xdssc -# application/dvcs -application/ecmascript ecma -# application/edi-consent -# application/edi-x12 -# application/edifact -application/emma+xml emma -# application/epp+xml -application/epub+zip epub -# application/eshop -# application/example -application/exi exi -# application/fastinfoset -# application/fastsoap -# application/fits -application/font-tdpfr pfr -# application/framework-attributes+xml -application/gml+xml gml -application/gpx+xml gpx -application/gxf gxf -# application/h224 -# application/held+xml -# application/http -application/hyperstudio stk -# application/ibe-key-request+xml -# application/ibe-pkg-reply+xml -# application/ibe-pp-data -# application/iges -# application/im-iscomposing+xml -# application/index -# application/index.cmd -# application/index.obj -# application/index.response -# application/index.vnd -application/inkml+xml ink inkml -# application/iotp -application/ipfix ipfix -# application/ipp -# application/isup -application/java-archive jar -application/java-serialized-object ser -application/java-vm class -application/javascript js -application/json json -application/jsonml+json jsonml -# application/kpml-request+xml -# application/kpml-response+xml -application/lost+xml lostxml -application/mac-binhex40 hqx -application/mac-compactpro cpt -# application/macwriteii -application/mads+xml mads -application/marc mrc -application/marcxml+xml mrcx -application/mathematica ma nb mb -# application/mathml-content+xml -# application/mathml-presentation+xml -application/mathml+xml mathml -# application/mbms-associated-procedure-description+xml -# application/mbms-deregister+xml -# application/mbms-envelope+xml -# application/mbms-msk+xml -# application/mbms-msk-response+xml -# application/mbms-protection-description+xml -# application/mbms-reception-report+xml -# application/mbms-register+xml -# application/mbms-register-response+xml -# application/mbms-user-service-description+xml -application/mbox mbox -# application/media_control+xml -application/mediaservercontrol+xml mscml -application/metalink+xml metalink -application/metalink4+xml meta4 -application/mets+xml mets -# application/mikey -application/mods+xml mods -# application/moss-keys -# application/moss-signature -# application/mosskey-data -# application/mosskey-request -application/mp21 m21 mp21 -application/mp4 mp4s -# application/mpeg4-generic -# application/mpeg4-iod -# application/mpeg4-iod-xmt -# application/msc-ivr+xml -# application/msc-mixer+xml -application/msword doc dot -application/mxf mxf -# application/nasdata -# application/news-checkgroups -# application/news-groupinfo -# application/news-transmission -# application/nss -# application/ocsp-request -# application/ocsp-response -application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy -application/oda oda -application/oebps-package+xml opf -application/ogg ogx -application/omdoc+xml omdoc -application/onenote onetoc onetoc2 onetmp onepkg -application/oxps oxps -# application/parityfec -application/patch-ops-error+xml xer -application/pdf pdf -application/pgp-encrypted pgp -# application/pgp-keys -application/pgp-signature asc sig -application/pics-rules prf -# application/pidf+xml -# application/pidf-diff+xml -application/pkcs10 p10 -application/pkcs7-mime p7m p7c -application/pkcs7-signature p7s -application/pkcs8 p8 -application/pkix-attr-cert ac -application/pkix-cert cer -application/pkix-crl crl -application/pkix-pkipath pkipath -application/pkixcmp pki -application/pls+xml pls -# application/poc-settings+xml -application/postscript ai eps ps -# application/prs.alvestrand.titrax-sheet -application/prs.cww cww -# application/prs.nprend -# application/prs.plucker -# application/prs.rdf-xml-crypt -# application/prs.xsf+xml -application/pskc+xml pskcxml -# application/qsig -application/rdf+xml rdf -application/reginfo+xml rif -application/relax-ng-compact-syntax rnc -# application/remote-printing -application/resource-lists+xml rl -application/resource-lists-diff+xml rld -# application/riscos -# application/rlmi+xml -application/rls-services+xml rs -application/rpki-ghostbusters gbr -application/rpki-manifest mft -application/rpki-roa roa -# application/rpki-updown -application/rsd+xml rsd -application/rss+xml rss -application/rtf rtf -# application/rtx -# application/samlassertion+xml -# application/samlmetadata+xml -application/sbml+xml sbml -application/scvp-cv-request scq -application/scvp-cv-response scs -application/scvp-vp-request spq -application/scvp-vp-response spp -application/sdp sdp -# application/set-payment -application/set-payment-initiation setpay -# application/set-registration -application/set-registration-initiation setreg -# application/sgml -# application/sgml-open-catalog -application/shf+xml shf -# application/sieve -# application/simple-filter+xml -# application/simple-message-summary -# application/simplesymbolcontainer -# application/slate -# application/smil -application/smil+xml smi smil -# application/soap+fastinfoset -# application/soap+xml -application/sparql-query rq -application/sparql-results+xml srx -# application/spirits-event+xml -application/srgs gram -application/srgs+xml grxml -application/sru+xml sru -application/ssdl+xml ssdl -application/ssml+xml ssml -# application/tamp-apex-update -# application/tamp-apex-update-confirm -# application/tamp-community-update -# application/tamp-community-update-confirm -# application/tamp-error -# application/tamp-sequence-adjust -# application/tamp-sequence-adjust-confirm -# application/tamp-status-query -# application/tamp-status-response -# application/tamp-update -# application/tamp-update-confirm -application/tei+xml tei teicorpus -application/thraud+xml tfi -# application/timestamp-query -# application/timestamp-reply -application/timestamped-data tsd -# application/tve-trigger -# application/ulpfec -# application/vcard+xml -# application/vemmi -# application/vividence.scriptfile -# application/vnd.3gpp.bsf+xml -application/vnd.3gpp.pic-bw-large plb -application/vnd.3gpp.pic-bw-small psb -application/vnd.3gpp.pic-bw-var pvb -# application/vnd.3gpp.sms -# application/vnd.3gpp2.bcmcsinfo+xml -# application/vnd.3gpp2.sms -application/vnd.3gpp2.tcap tcap -application/vnd.3m.post-it-notes pwn -application/vnd.accpac.simply.aso aso -application/vnd.accpac.simply.imp imp -application/vnd.acucobol acu -application/vnd.acucorp atc acutc -application/vnd.adobe.air-application-installer-package+zip air -application/vnd.adobe.formscentral.fcdt fcdt -application/vnd.adobe.fxp fxp fxpl -# application/vnd.adobe.partial-upload -application/vnd.adobe.xdp+xml xdp -application/vnd.adobe.xfdf xfdf -# application/vnd.aether.imp -# application/vnd.ah-barcode -application/vnd.ahead.space ahead -application/vnd.airzip.filesecure.azf azf -application/vnd.airzip.filesecure.azs azs -application/vnd.amazon.ebook azw -application/vnd.americandynamics.acc acc -application/vnd.amiga.ami ami -# application/vnd.amundsen.maze+xml -application/vnd.android.package-archive apk -application/vnd.anser-web-certificate-issue-initiation cii -application/vnd.anser-web-funds-transfer-initiation fti -application/vnd.antix.game-component atx -application/vnd.apple.installer+xml mpkg -application/vnd.apple.mpegurl m3u8 -# application/vnd.arastra.swi -application/vnd.aristanetworks.swi swi -application/vnd.astraea-software.iota iota -application/vnd.audiograph aep -# application/vnd.autopackage -# application/vnd.avistar+xml -application/vnd.blueice.multipass mpm -# application/vnd.bluetooth.ep.oob -application/vnd.bmi bmi -application/vnd.businessobjects rep -# application/vnd.cab-jscript -# application/vnd.canon-cpdl -# application/vnd.canon-lips -# application/vnd.cendio.thinlinc.clientconf -application/vnd.chemdraw+xml cdxml -application/vnd.chipnuts.karaoke-mmd mmd -application/vnd.cinderella cdy -# application/vnd.cirpack.isdn-ext -application/vnd.claymore cla -application/vnd.cloanto.rp9 rp9 -application/vnd.clonk.c4group c4g c4d c4f c4p c4u -application/vnd.cluetrust.cartomobile-config c11amc -application/vnd.cluetrust.cartomobile-config-pkg c11amz -# application/vnd.collection+json -# application/vnd.commerce-battelle -application/vnd.commonspace csp -application/vnd.contact.cmsg cdbcmsg -application/vnd.cosmocaller cmc -application/vnd.crick.clicker clkx -application/vnd.crick.clicker.keyboard clkk -application/vnd.crick.clicker.palette clkp -application/vnd.crick.clicker.template clkt -application/vnd.crick.clicker.wordbank clkw -application/vnd.criticaltools.wbs+xml wbs -application/vnd.ctc-posml pml -# application/vnd.ctct.ws+xml -# application/vnd.cups-pdf -# application/vnd.cups-postscript -application/vnd.cups-ppd ppd -# application/vnd.cups-raster -# application/vnd.cups-raw -# application/vnd.curl -application/vnd.curl.car car -application/vnd.curl.pcurl pcurl -# application/vnd.cybank -application/vnd.dart dart -application/vnd.data-vision.rdz rdz -application/vnd.dece.data uvf uvvf uvd uvvd -application/vnd.dece.ttml+xml uvt uvvt -application/vnd.dece.unspecified uvx uvvx -application/vnd.dece.zip uvz uvvz -application/vnd.denovo.fcselayout-link fe_launch -# application/vnd.dir-bi.plate-dl-nosuffix -application/vnd.dna dna -application/vnd.dolby.mlp mlp -# application/vnd.dolby.mobile.1 -# application/vnd.dolby.mobile.2 -application/vnd.dpgraph dpg -application/vnd.dreamfactory dfac -application/vnd.ds-keypoint kpxx -application/vnd.dvb.ait ait -# application/vnd.dvb.dvbj -# application/vnd.dvb.esgcontainer -# application/vnd.dvb.ipdcdftnotifaccess -# application/vnd.dvb.ipdcesgaccess -# application/vnd.dvb.ipdcesgaccess2 -# application/vnd.dvb.ipdcesgpdd -# application/vnd.dvb.ipdcroaming -# application/vnd.dvb.iptv.alfec-base -# application/vnd.dvb.iptv.alfec-enhancement -# application/vnd.dvb.notif-aggregate-root+xml -# application/vnd.dvb.notif-container+xml -# application/vnd.dvb.notif-generic+xml -# application/vnd.dvb.notif-ia-msglist+xml -# application/vnd.dvb.notif-ia-registration-request+xml -# application/vnd.dvb.notif-ia-registration-response+xml -# application/vnd.dvb.notif-init+xml -# application/vnd.dvb.pfr -application/vnd.dvb.service svc -# application/vnd.dxr -application/vnd.dynageo geo -# application/vnd.easykaraoke.cdgdownload -# application/vnd.ecdis-update -application/vnd.ecowin.chart mag -# application/vnd.ecowin.filerequest -# application/vnd.ecowin.fileupdate -# application/vnd.ecowin.series -# application/vnd.ecowin.seriesrequest -# application/vnd.ecowin.seriesupdate -# application/vnd.emclient.accessrequest+xml -application/vnd.enliven nml -# application/vnd.eprints.data+xml -application/vnd.epson.esf esf -application/vnd.epson.msf msf -application/vnd.epson.quickanime qam -application/vnd.epson.salt slt -application/vnd.epson.ssf ssf -# application/vnd.ericsson.quickcall -application/vnd.eszigno3+xml es3 et3 -# application/vnd.etsi.aoc+xml -# application/vnd.etsi.cug+xml -# application/vnd.etsi.iptvcommand+xml -# application/vnd.etsi.iptvdiscovery+xml -# application/vnd.etsi.iptvprofile+xml -# application/vnd.etsi.iptvsad-bc+xml -# application/vnd.etsi.iptvsad-cod+xml -# application/vnd.etsi.iptvsad-npvr+xml -# application/vnd.etsi.iptvservice+xml -# application/vnd.etsi.iptvsync+xml -# application/vnd.etsi.iptvueprofile+xml -# application/vnd.etsi.mcid+xml -# application/vnd.etsi.overload-control-policy-dataset+xml -# application/vnd.etsi.sci+xml -# application/vnd.etsi.simservs+xml -# application/vnd.etsi.tsl+xml -# application/vnd.etsi.tsl.der -# application/vnd.eudora.data -application/vnd.ezpix-album ez2 -application/vnd.ezpix-package ez3 -# application/vnd.f-secure.mobile -application/vnd.fdf fdf -application/vnd.fdsn.mseed mseed -application/vnd.fdsn.seed seed dataless -# application/vnd.ffsns -# application/vnd.fints -application/vnd.flographit gph -application/vnd.fluxtime.clip ftc -# application/vnd.font-fontforge-sfd -application/vnd.framemaker fm frame maker book -application/vnd.frogans.fnc fnc -application/vnd.frogans.ltf ltf -application/vnd.fsc.weblaunch fsc -application/vnd.fujitsu.oasys oas -application/vnd.fujitsu.oasys2 oa2 -application/vnd.fujitsu.oasys3 oa3 -application/vnd.fujitsu.oasysgp fg5 -application/vnd.fujitsu.oasysprs bh2 -# application/vnd.fujixerox.art-ex -# application/vnd.fujixerox.art4 -# application/vnd.fujixerox.hbpl -application/vnd.fujixerox.ddd ddd -application/vnd.fujixerox.docuworks xdw -application/vnd.fujixerox.docuworks.binder xbd -# application/vnd.fut-misnet -application/vnd.fuzzysheet fzs -application/vnd.genomatix.tuxedo txd -# application/vnd.geocube+xml -application/vnd.geogebra.file ggb -application/vnd.geogebra.tool ggt -application/vnd.geometry-explorer gex gre -application/vnd.geonext gxt -application/vnd.geoplan g2w -application/vnd.geospace g3w -# application/vnd.globalplatform.card-content-mgt -# application/vnd.globalplatform.card-content-mgt-response -application/vnd.gmx gmx -application/vnd.google-earth.kml+xml kml -application/vnd.google-earth.kmz kmz -application/vnd.grafeq gqf gqs -# application/vnd.gridmp -application/vnd.groove-account gac -application/vnd.groove-help ghf -application/vnd.groove-identity-message gim -application/vnd.groove-injector grv -application/vnd.groove-tool-message gtm -application/vnd.groove-tool-template tpl -application/vnd.groove-vcard vcg -# application/vnd.hal+json -application/vnd.hal+xml hal -application/vnd.handheld-entertainment+xml zmm -application/vnd.hbci hbci -# application/vnd.hcl-bireports -application/vnd.hhe.lesson-player les -application/vnd.hp-hpgl hpgl -application/vnd.hp-hpid hpid -application/vnd.hp-hps hps -application/vnd.hp-jlyt jlt -application/vnd.hp-pcl pcl -application/vnd.hp-pclxl pclxl -# application/vnd.httphone -application/vnd.hydrostatix.sof-data sfd-hdstx -# application/vnd.hzn-3d-crossword -# application/vnd.ibm.afplinedata -# application/vnd.ibm.electronic-media -application/vnd.ibm.minipay mpy -application/vnd.ibm.modcap afp listafp list3820 -application/vnd.ibm.rights-management irm -application/vnd.ibm.secure-container sc -application/vnd.iccprofile icc icm -application/vnd.igloader igl -application/vnd.immervision-ivp ivp -application/vnd.immervision-ivu ivu -# application/vnd.informedcontrol.rms+xml -# application/vnd.informix-visionary -# application/vnd.infotech.project -# application/vnd.infotech.project+xml -# application/vnd.innopath.wamp.notification -application/vnd.insors.igm igm -application/vnd.intercon.formnet xpw xpx -application/vnd.intergeo i2g -# application/vnd.intertrust.digibox -# application/vnd.intertrust.nncp -application/vnd.intu.qbo qbo -application/vnd.intu.qfx qfx -# application/vnd.iptc.g2.conceptitem+xml -# application/vnd.iptc.g2.knowledgeitem+xml -# application/vnd.iptc.g2.newsitem+xml -# application/vnd.iptc.g2.newsmessage+xml -# application/vnd.iptc.g2.packageitem+xml -# application/vnd.iptc.g2.planningitem+xml -application/vnd.ipunplugged.rcprofile rcprofile -application/vnd.irepository.package+xml irp -application/vnd.is-xpr xpr -application/vnd.isac.fcs fcs -application/vnd.jam jam -# application/vnd.japannet-directory-service -# application/vnd.japannet-jpnstore-wakeup -# application/vnd.japannet-payment-wakeup -# application/vnd.japannet-registration -# application/vnd.japannet-registration-wakeup -# application/vnd.japannet-setstore-wakeup -# application/vnd.japannet-verification -# application/vnd.japannet-verification-wakeup -application/vnd.jcp.javame.midlet-rms rms -application/vnd.jisp jisp -application/vnd.joost.joda-archive joda -application/vnd.kahootz ktz ktr -application/vnd.kde.karbon karbon -application/vnd.kde.kchart chrt -application/vnd.kde.kformula kfo -application/vnd.kde.kivio flw -application/vnd.kde.kontour kon -application/vnd.kde.kpresenter kpr kpt -application/vnd.kde.kspread ksp -application/vnd.kde.kword kwd kwt -application/vnd.kenameaapp htke -application/vnd.kidspiration kia -application/vnd.kinar kne knp -application/vnd.koan skp skd skt skm -application/vnd.kodak-descriptor sse -application/vnd.las.las+xml lasxml -# application/vnd.liberty-request+xml -application/vnd.llamagraphics.life-balance.desktop lbd -application/vnd.llamagraphics.life-balance.exchange+xml lbe -application/vnd.lotus-1-2-3 123 -application/vnd.lotus-approach apr -application/vnd.lotus-freelance pre -application/vnd.lotus-notes nsf -application/vnd.lotus-organizer org -application/vnd.lotus-screencam scm -application/vnd.lotus-wordpro lwp -application/vnd.macports.portpkg portpkg -# application/vnd.marlin.drm.actiontoken+xml -# application/vnd.marlin.drm.conftoken+xml -# application/vnd.marlin.drm.license+xml -# application/vnd.marlin.drm.mdcf -application/vnd.mcd mcd -application/vnd.medcalcdata mc1 -application/vnd.mediastation.cdkey cdkey -# application/vnd.meridian-slingshot -application/vnd.mfer mwf -application/vnd.mfmp mfm -application/vnd.micrografx.flo flo -application/vnd.micrografx.igx igx -application/vnd.mif mif -# application/vnd.minisoft-hp3000-save -# application/vnd.mitsubishi.misty-guard.trustweb -application/vnd.mobius.daf daf -application/vnd.mobius.dis dis -application/vnd.mobius.mbk mbk -application/vnd.mobius.mqy mqy -application/vnd.mobius.msl msl -application/vnd.mobius.plc plc -application/vnd.mobius.txf txf -application/vnd.mophun.application mpn -application/vnd.mophun.certificate mpc -# application/vnd.motorola.flexsuite -# application/vnd.motorola.flexsuite.adsi -# application/vnd.motorola.flexsuite.fis -# application/vnd.motorola.flexsuite.gotap -# application/vnd.motorola.flexsuite.kmr -# application/vnd.motorola.flexsuite.ttc -# application/vnd.motorola.flexsuite.wem -# application/vnd.motorola.iprm -application/vnd.mozilla.xul+xml xul -application/vnd.ms-artgalry cil -# application/vnd.ms-asf -application/vnd.ms-cab-compressed cab -# application/vnd.ms-color.iccprofile -application/vnd.ms-excel xls xlm xla xlc xlt xlw -application/vnd.ms-excel.addin.macroenabled.12 xlam -application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb -application/vnd.ms-excel.sheet.macroenabled.12 xlsm -application/vnd.ms-excel.template.macroenabled.12 xltm -application/vnd.ms-fontobject eot -application/vnd.ms-htmlhelp chm -application/vnd.ms-ims ims -application/vnd.ms-lrm lrm -# application/vnd.ms-office.activex+xml -application/vnd.ms-officetheme thmx -# application/vnd.ms-opentype -# application/vnd.ms-package.obfuscated-opentype -application/vnd.ms-pki.seccat cat -application/vnd.ms-pki.stl stl -# application/vnd.ms-playready.initiator+xml -application/vnd.ms-powerpoint ppt pps pot -application/vnd.ms-powerpoint.addin.macroenabled.12 ppam -application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm -application/vnd.ms-powerpoint.slide.macroenabled.12 sldm -application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm -application/vnd.ms-powerpoint.template.macroenabled.12 potm -# application/vnd.ms-printing.printticket+xml -application/vnd.ms-project mpp mpt -# application/vnd.ms-tnef -# application/vnd.ms-wmdrm.lic-chlg-req -# application/vnd.ms-wmdrm.lic-resp -# application/vnd.ms-wmdrm.meter-chlg-req -# application/vnd.ms-wmdrm.meter-resp -application/vnd.ms-word.document.macroenabled.12 docm -application/vnd.ms-word.template.macroenabled.12 dotm -application/vnd.ms-works wps wks wcm wdb -application/vnd.ms-wpl wpl -application/vnd.ms-xpsdocument xps -application/vnd.mseq mseq -# application/vnd.msign -# application/vnd.multiad.creator -# application/vnd.multiad.creator.cif -# application/vnd.music-niff -application/vnd.musician mus -application/vnd.muvee.style msty -application/vnd.mynfc taglet -# application/vnd.ncd.control -# application/vnd.ncd.reference -# application/vnd.nervana -# application/vnd.netfpx -application/vnd.neurolanguage.nlu nlu -application/vnd.nitf ntf nitf -application/vnd.noblenet-directory nnd -application/vnd.noblenet-sealer nns -application/vnd.noblenet-web nnw -# application/vnd.nokia.catalogs -# application/vnd.nokia.conml+wbxml -# application/vnd.nokia.conml+xml -# application/vnd.nokia.isds-radio-presets -# application/vnd.nokia.iptv.config+xml -# application/vnd.nokia.landmark+wbxml -# application/vnd.nokia.landmark+xml -# application/vnd.nokia.landmarkcollection+xml -# application/vnd.nokia.n-gage.ac+xml -application/vnd.nokia.n-gage.data ngdat -application/vnd.nokia.n-gage.symbian.install n-gage -# application/vnd.nokia.ncd -# application/vnd.nokia.pcd+wbxml -# application/vnd.nokia.pcd+xml -application/vnd.nokia.radio-preset rpst -application/vnd.nokia.radio-presets rpss -application/vnd.novadigm.edm edm -application/vnd.novadigm.edx edx -application/vnd.novadigm.ext ext -# application/vnd.ntt-local.file-transfer -# application/vnd.ntt-local.sip-ta_remote -# application/vnd.ntt-local.sip-ta_tcp_stream -application/vnd.oasis.opendocument.chart odc -application/vnd.oasis.opendocument.chart-template otc -application/vnd.oasis.opendocument.database odb -application/vnd.oasis.opendocument.formula odf -application/vnd.oasis.opendocument.formula-template odft -application/vnd.oasis.opendocument.graphics odg -application/vnd.oasis.opendocument.graphics-template otg -application/vnd.oasis.opendocument.image odi -application/vnd.oasis.opendocument.image-template oti -application/vnd.oasis.opendocument.presentation odp -application/vnd.oasis.opendocument.presentation-template otp -application/vnd.oasis.opendocument.spreadsheet ods -application/vnd.oasis.opendocument.spreadsheet-template ots -application/vnd.oasis.opendocument.text odt -application/vnd.oasis.opendocument.text-master odm -application/vnd.oasis.opendocument.text-template ott -application/vnd.oasis.opendocument.text-web oth -# application/vnd.obn -# application/vnd.oftn.l10n+json -# application/vnd.oipf.contentaccessdownload+xml -# application/vnd.oipf.contentaccessstreaming+xml -# application/vnd.oipf.cspg-hexbinary -# application/vnd.oipf.dae.svg+xml -# application/vnd.oipf.dae.xhtml+xml -# application/vnd.oipf.mippvcontrolmessage+xml -# application/vnd.oipf.pae.gem -# application/vnd.oipf.spdiscovery+xml -# application/vnd.oipf.spdlist+xml -# application/vnd.oipf.ueprofile+xml -# application/vnd.oipf.userprofile+xml -application/vnd.olpc-sugar xo -# application/vnd.oma-scws-config -# application/vnd.oma-scws-http-request -# application/vnd.oma-scws-http-response -# application/vnd.oma.bcast.associated-procedure-parameter+xml -# application/vnd.oma.bcast.drm-trigger+xml -# application/vnd.oma.bcast.imd+xml -# application/vnd.oma.bcast.ltkm -# application/vnd.oma.bcast.notification+xml -# application/vnd.oma.bcast.provisioningtrigger -# application/vnd.oma.bcast.sgboot -# application/vnd.oma.bcast.sgdd+xml -# application/vnd.oma.bcast.sgdu -# application/vnd.oma.bcast.simple-symbol-container -# application/vnd.oma.bcast.smartcard-trigger+xml -# application/vnd.oma.bcast.sprov+xml -# application/vnd.oma.bcast.stkm -# application/vnd.oma.cab-address-book+xml -# application/vnd.oma.cab-feature-handler+xml -# application/vnd.oma.cab-pcc+xml -# application/vnd.oma.cab-user-prefs+xml -# application/vnd.oma.dcd -# application/vnd.oma.dcdc -application/vnd.oma.dd2+xml dd2 -# application/vnd.oma.drm.risd+xml -# application/vnd.oma.group-usage-list+xml -# application/vnd.oma.pal+xml -# application/vnd.oma.poc.detailed-progress-report+xml -# application/vnd.oma.poc.final-report+xml -# application/vnd.oma.poc.groups+xml -# application/vnd.oma.poc.invocation-descriptor+xml -# application/vnd.oma.poc.optimized-progress-report+xml -# application/vnd.oma.push -# application/vnd.oma.scidm.messages+xml -# application/vnd.oma.xcap-directory+xml -# application/vnd.omads-email+xml -# application/vnd.omads-file+xml -# application/vnd.omads-folder+xml -# application/vnd.omaloc-supl-init -application/vnd.openofficeorg.extension oxt -# application/vnd.openxmlformats-officedocument.custom-properties+xml -# application/vnd.openxmlformats-officedocument.customxmlproperties+xml -# application/vnd.openxmlformats-officedocument.drawing+xml -# application/vnd.openxmlformats-officedocument.drawingml.chart+xml -# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml -# application/vnd.openxmlformats-officedocument.extended-properties+xml -# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml -# application/vnd.openxmlformats-officedocument.presentationml.comments+xml -# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml -# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml -# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml -application/vnd.openxmlformats-officedocument.presentationml.presentation pptx -# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml -application/vnd.openxmlformats-officedocument.presentationml.slide sldx -# application/vnd.openxmlformats-officedocument.presentationml.slide+xml -# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml -# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml -application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx -# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml -# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml -# application/vnd.openxmlformats-officedocument.presentationml.tags+xml -application/vnd.openxmlformats-officedocument.presentationml.template potx -# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx -# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx -# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml -# application/vnd.openxmlformats-officedocument.theme+xml -# application/vnd.openxmlformats-officedocument.themeoverride+xml -# application/vnd.openxmlformats-officedocument.vmldrawing -# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.document docx -# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx -# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml -# application/vnd.openxmlformats-package.core-properties+xml -# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml -# application/vnd.openxmlformats-package.relationships+xml -# application/vnd.quobject-quoxdocument -# application/vnd.osa.netdeploy -application/vnd.osgeo.mapguide.package mgp -# application/vnd.osgi.bundle -application/vnd.osgi.dp dp -application/vnd.osgi.subsystem esa -# application/vnd.otps.ct-kip+xml -application/vnd.palm pdb pqa oprc -# application/vnd.paos.xml -application/vnd.pawaafile paw -application/vnd.pg.format str -application/vnd.pg.osasli ei6 -# application/vnd.piaccess.application-licence -application/vnd.picsel efif -application/vnd.pmi.widget wg -# application/vnd.poc.group-advertisement+xml -application/vnd.pocketlearn plf -application/vnd.powerbuilder6 pbd -# application/vnd.powerbuilder6-s -# application/vnd.powerbuilder7 -# application/vnd.powerbuilder7-s -# application/vnd.powerbuilder75 -# application/vnd.powerbuilder75-s -# application/vnd.preminet -application/vnd.previewsystems.box box -application/vnd.proteus.magazine mgz -application/vnd.publishare-delta-tree qps -application/vnd.pvi.ptid1 ptid -# application/vnd.pwg-multiplexed -# application/vnd.pwg-xhtml-print+xml -# application/vnd.qualcomm.brew-app-res -application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb -# application/vnd.radisys.moml+xml -# application/vnd.radisys.msml+xml -# application/vnd.radisys.msml-audit+xml -# application/vnd.radisys.msml-audit-conf+xml -# application/vnd.radisys.msml-audit-conn+xml -# application/vnd.radisys.msml-audit-dialog+xml -# application/vnd.radisys.msml-audit-stream+xml -# application/vnd.radisys.msml-conf+xml -# application/vnd.radisys.msml-dialog+xml -# application/vnd.radisys.msml-dialog-base+xml -# application/vnd.radisys.msml-dialog-fax-detect+xml -# application/vnd.radisys.msml-dialog-fax-sendrecv+xml -# application/vnd.radisys.msml-dialog-group+xml -# application/vnd.radisys.msml-dialog-speech+xml -# application/vnd.radisys.msml-dialog-transform+xml -# application/vnd.rainstor.data -# application/vnd.rapid -application/vnd.realvnc.bed bed -application/vnd.recordare.musicxml mxl -application/vnd.recordare.musicxml+xml musicxml -# application/vnd.renlearn.rlprint -application/vnd.rig.cryptonote cryptonote -application/vnd.rim.cod cod -application/vnd.rn-realmedia rm -application/vnd.rn-realmedia-vbr rmvb -application/vnd.route66.link66+xml link66 -# application/vnd.rs-274x -# application/vnd.ruckus.download -# application/vnd.s3sms -application/vnd.sailingtracker.track st -# application/vnd.sbm.cid -# application/vnd.sbm.mid2 -# application/vnd.scribus -# application/vnd.sealed.3df -# application/vnd.sealed.csf -# application/vnd.sealed.doc -# application/vnd.sealed.eml -# application/vnd.sealed.mht -# application/vnd.sealed.net -# application/vnd.sealed.ppt -# application/vnd.sealed.tiff -# application/vnd.sealed.xls -# application/vnd.sealedmedia.softseal.html -# application/vnd.sealedmedia.softseal.pdf -application/vnd.seemail see -application/vnd.sema sema -application/vnd.semd semd -application/vnd.semf semf -application/vnd.shana.informed.formdata ifm -application/vnd.shana.informed.formtemplate itp -application/vnd.shana.informed.interchange iif -application/vnd.shana.informed.package ipk -application/vnd.simtech-mindmapper twd twds -application/vnd.smaf mmf -# application/vnd.smart.notebook -application/vnd.smart.teacher teacher -# application/vnd.software602.filler.form+xml -# application/vnd.software602.filler.form-xml-zip -application/vnd.solent.sdkm+xml sdkm sdkd -application/vnd.spotfire.dxp dxp -application/vnd.spotfire.sfs sfs -# application/vnd.sss-cod -# application/vnd.sss-dtf -# application/vnd.sss-ntf -application/vnd.stardivision.calc sdc -application/vnd.stardivision.draw sda -application/vnd.stardivision.impress sdd -application/vnd.stardivision.math smf -application/vnd.stardivision.writer sdw vor -application/vnd.stardivision.writer-global sgl -application/vnd.stepmania.package smzip -application/vnd.stepmania.stepchart sm -# application/vnd.street-stream -application/vnd.sun.xml.calc sxc -application/vnd.sun.xml.calc.template stc -application/vnd.sun.xml.draw sxd -application/vnd.sun.xml.draw.template std -application/vnd.sun.xml.impress sxi -application/vnd.sun.xml.impress.template sti -application/vnd.sun.xml.math sxm -application/vnd.sun.xml.writer sxw -application/vnd.sun.xml.writer.global sxg -application/vnd.sun.xml.writer.template stw -# application/vnd.sun.wadl+xml -application/vnd.sus-calendar sus susp -application/vnd.svd svd -# application/vnd.swiftview-ics -application/vnd.symbian.install sis sisx -application/vnd.syncml+xml xsm -application/vnd.syncml.dm+wbxml bdm -application/vnd.syncml.dm+xml xdm -# application/vnd.syncml.dm.notification -# application/vnd.syncml.ds.notification -application/vnd.tao.intent-module-archive tao -application/vnd.tcpdump.pcap pcap cap dmp -application/vnd.tmobile-livetv tmo -application/vnd.trid.tpt tpt -application/vnd.triscape.mxs mxs -application/vnd.trueapp tra -# application/vnd.truedoc -# application/vnd.ubisoft.webplayer -application/vnd.ufdl ufd ufdl -application/vnd.uiq.theme utz -application/vnd.umajin umj -application/vnd.unity unityweb -application/vnd.uoml+xml uoml -# application/vnd.uplanet.alert -# application/vnd.uplanet.alert-wbxml -# application/vnd.uplanet.bearer-choice -# application/vnd.uplanet.bearer-choice-wbxml -# application/vnd.uplanet.cacheop -# application/vnd.uplanet.cacheop-wbxml -# application/vnd.uplanet.channel -# application/vnd.uplanet.channel-wbxml -# application/vnd.uplanet.list -# application/vnd.uplanet.list-wbxml -# application/vnd.uplanet.listcmd -# application/vnd.uplanet.listcmd-wbxml -# application/vnd.uplanet.signal -application/vnd.vcx vcx -# application/vnd.vd-study -# application/vnd.vectorworks -# application/vnd.verimatrix.vcas -# application/vnd.vidsoft.vidconference -application/vnd.visio vsd vst vss vsw -application/vnd.visionary vis -# application/vnd.vividence.scriptfile -application/vnd.vsf vsf -# application/vnd.wap.sic -# application/vnd.wap.slc -application/vnd.wap.wbxml wbxml -application/vnd.wap.wmlc wmlc -application/vnd.wap.wmlscriptc wmlsc -application/vnd.webturbo wtb -# application/vnd.wfa.wsc -# application/vnd.wmc -# application/vnd.wmf.bootstrap -# application/vnd.wolfram.mathematica -# application/vnd.wolfram.mathematica.package -application/vnd.wolfram.player nbp -application/vnd.wordperfect wpd -application/vnd.wqd wqd -# application/vnd.wrq-hp3000-labelled -application/vnd.wt.stf stf -# application/vnd.wv.csp+wbxml -# application/vnd.wv.csp+xml -# application/vnd.wv.ssp+xml -application/vnd.xara xar -application/vnd.xfdl xfdl -# application/vnd.xfdl.webform -# application/vnd.xmi+xml -# application/vnd.xmpie.cpkg -# application/vnd.xmpie.dpkg -# application/vnd.xmpie.plan -# application/vnd.xmpie.ppkg -# application/vnd.xmpie.xlim -application/vnd.yamaha.hv-dic hvd -application/vnd.yamaha.hv-script hvs -application/vnd.yamaha.hv-voice hvp -application/vnd.yamaha.openscoreformat osf -application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg -# application/vnd.yamaha.remote-setup -application/vnd.yamaha.smaf-audio saf -application/vnd.yamaha.smaf-phrase spf -# application/vnd.yamaha.through-ngn -# application/vnd.yamaha.tunnel-udpencap -application/vnd.yellowriver-custom-menu cmp -application/vnd.zul zir zirz -application/vnd.zzazz.deck+xml zaz -application/voicexml+xml vxml -# application/vq-rtcpxr -# application/watcherinfo+xml -# application/whoispp-query -# application/whoispp-response -application/widget wgt -application/winhlp hlp -# application/wita -# application/wordperfect5.1 -application/wsdl+xml wsdl -application/wspolicy+xml wspolicy -application/x-7z-compressed 7z -application/x-abiword abw -application/x-ace-compressed ace -# application/x-amf -application/x-apple-diskimage dmg -application/x-authorware-bin aab x32 u32 vox -application/x-authorware-map aam -application/x-authorware-seg aas -application/x-bcpio bcpio -application/x-bittorrent torrent -application/x-blorb blb blorb -application/x-bzip bz -application/x-bzip2 bz2 boz -application/x-cbr cbr cba cbt cbz cb7 -application/x-cdlink vcd -application/x-cfs-compressed cfs -application/x-chat chat -application/x-chess-pgn pgn -application/x-conference nsc -# application/x-compress -application/x-cpio cpio -application/x-csh csh -application/x-debian-package deb udeb -application/x-dgc-compressed dgc -application/x-director dir dcr dxr cst cct cxt w3d fgd swa -application/x-doom wad -application/x-dtbncx+xml ncx -application/x-dtbook+xml dtb -application/x-dtbresource+xml res -application/x-dvi dvi -application/x-envoy evy -application/x-eva eva -application/x-font-bdf bdf -# application/x-font-dos -# application/x-font-framemaker -application/x-font-ghostscript gsf -# application/x-font-libgrx -application/x-font-linux-psf psf -application/x-font-otf otf -application/x-font-pcf pcf -application/x-font-snf snf -# application/x-font-speedo -# application/x-font-sunos-news -application/x-font-ttf ttf ttc -application/x-font-type1 pfa pfb pfm afm -application/font-woff woff -# application/x-font-vfont -application/x-freearc arc -application/x-futuresplash spl -application/x-gca-compressed gca -application/x-glulx ulx -application/x-gnumeric gnumeric -application/x-gramps-xml gramps -application/x-gtar gtar -# application/x-gzip -application/x-hdf hdf -application/x-install-instructions install -application/x-iso9660-image iso -application/x-java-jnlp-file jnlp -application/x-latex latex -application/x-lzh-compressed lzh lha -application/x-mie mie -application/x-mobipocket-ebook prc mobi -application/x-ms-application application -application/x-ms-shortcut lnk -application/x-ms-wmd wmd -application/x-ms-wmz wmz -application/x-ms-xbap xbap -application/x-msaccess mdb -application/x-msbinder obd -application/x-mscardfile crd -application/x-msclip clp -application/x-msdownload exe dll com bat msi -application/x-msmediaview mvb m13 m14 -application/x-msmetafile wmf wmz emf emz -application/x-msmoney mny -application/x-mspublisher pub -application/x-msschedule scd -application/x-msterminal trm -application/x-mswrite wri -application/x-netcdf nc cdf -application/x-nzb nzb -application/x-pkcs12 p12 pfx -application/x-pkcs7-certificates p7b spc -application/x-pkcs7-certreqresp p7r -application/x-rar-compressed rar -application/x-research-info-systems ris -application/x-sh sh -application/x-shar shar -application/x-shockwave-flash swf -application/x-silverlight-app xap -application/x-sql sql -application/x-stuffit sit -application/x-stuffitx sitx -application/x-subrip srt -application/x-sv4cpio sv4cpio -application/x-sv4crc sv4crc -application/x-t3vm-image t3 -application/x-tads gam -application/x-tar tar -application/x-tcl tcl -application/x-tex tex -application/x-tex-tfm tfm -application/x-texinfo texinfo texi -application/x-tgif obj -application/x-ustar ustar -application/x-wais-source src -application/x-x509-ca-cert der crt -application/x-xfig fig -application/x-xliff+xml xlf -application/x-xpinstall xpi -application/x-xz xz -application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8 -# application/x400-bp -application/xaml+xml xaml -# application/xcap-att+xml -# application/xcap-caps+xml -application/xcap-diff+xml xdf -# application/xcap-el+xml -# application/xcap-error+xml -# application/xcap-ns+xml -# application/xcon-conference-info-diff+xml -# application/xcon-conference-info+xml -application/xenc+xml xenc -application/xhtml+xml xhtml xht -# application/xhtml-voice+xml -application/xml xml xsl -application/xml-dtd dtd -# application/xml-external-parsed-entity -# application/xmpp+xml -application/xop+xml xop -application/xproc+xml xpl -application/xslt+xml xslt -application/xspf+xml xspf -application/xv+xml mxml xhvml xvml xvm -application/yang yang -application/yin+xml yin -application/zip zip -# audio/1d-interleaved-parityfec -# audio/32kadpcm -# audio/3gpp -# audio/3gpp2 -# audio/ac3 -audio/adpcm adp -# audio/amr -# audio/amr-wb -# audio/amr-wb+ -# audio/asc -# audio/atrac-advanced-lossless -# audio/atrac-x -# audio/atrac3 -audio/basic au snd -# audio/bv16 -# audio/bv32 -# audio/clearmode -# audio/cn -# audio/dat12 -# audio/dls -# audio/dsr-es201108 -# audio/dsr-es202050 -# audio/dsr-es202211 -# audio/dsr-es202212 -# audio/dv -# audio/dvi4 -# audio/eac3 -# audio/evrc -# audio/evrc-qcp -# audio/evrc0 -# audio/evrc1 -# audio/evrcb -# audio/evrcb0 -# audio/evrcb1 -# audio/evrcwb -# audio/evrcwb0 -# audio/evrcwb1 -# audio/example -# audio/fwdred -# audio/g719 -# audio/g722 -# audio/g7221 -# audio/g723 -# audio/g726-16 -# audio/g726-24 -# audio/g726-32 -# audio/g726-40 -# audio/g728 -# audio/g729 -# audio/g7291 -# audio/g729d -# audio/g729e -# audio/gsm -# audio/gsm-efr -# audio/gsm-hr-08 -# audio/ilbc -# audio/ip-mr_v2.5 -# audio/isac -# audio/l16 -# audio/l20 -# audio/l24 -# audio/l8 -# audio/lpc -audio/midi mid midi kar rmi -# audio/mobile-xmf -audio/mp4 mp4a -# audio/mp4a-latm -# audio/mpa -# audio/mpa-robust -audio/mpeg mpga mp2 mp2a mp3 m2a m3a -# audio/mpeg4-generic -# audio/musepack -audio/ogg oga ogg spx -# audio/opus -# audio/parityfec -# audio/pcma -# audio/pcma-wb -# audio/pcmu-wb -# audio/pcmu -# audio/prs.sid -# audio/qcelp -# audio/red -# audio/rtp-enc-aescm128 -# audio/rtp-midi -# audio/rtx -audio/s3m s3m -audio/silk sil -# audio/smv -# audio/smv0 -# audio/smv-qcp -# audio/sp-midi -# audio/speex -# audio/t140c -# audio/t38 -# audio/telephone-event -# audio/tone -# audio/uemclip -# audio/ulpfec -# audio/vdvi -# audio/vmr-wb -# audio/vnd.3gpp.iufp -# audio/vnd.4sb -# audio/vnd.audiokoz -# audio/vnd.celp -# audio/vnd.cisco.nse -# audio/vnd.cmles.radio-events -# audio/vnd.cns.anp1 -# audio/vnd.cns.inf1 -audio/vnd.dece.audio uva uvva -audio/vnd.digital-winds eol -# audio/vnd.dlna.adts -# audio/vnd.dolby.heaac.1 -# audio/vnd.dolby.heaac.2 -# audio/vnd.dolby.mlp -# audio/vnd.dolby.mps -# audio/vnd.dolby.pl2 -# audio/vnd.dolby.pl2x -# audio/vnd.dolby.pl2z -# audio/vnd.dolby.pulse.1 -audio/vnd.dra dra -audio/vnd.dts dts -audio/vnd.dts.hd dtshd -# audio/vnd.dvb.file -# audio/vnd.everad.plj -# audio/vnd.hns.audio -audio/vnd.lucent.voice lvp -audio/vnd.ms-playready.media.pya pya -# audio/vnd.nokia.mobile-xmf -# audio/vnd.nortel.vbk -audio/vnd.nuera.ecelp4800 ecelp4800 -audio/vnd.nuera.ecelp7470 ecelp7470 -audio/vnd.nuera.ecelp9600 ecelp9600 -# audio/vnd.octel.sbc -# audio/vnd.qcelp -# audio/vnd.rhetorex.32kadpcm -audio/vnd.rip rip -# audio/vnd.sealedmedia.softseal.mpeg -# audio/vnd.vmx.cvsd -# audio/vorbis -# audio/vorbis-config -audio/webm weba -audio/x-aac aac -audio/x-aiff aif aiff aifc -audio/x-caf caf -audio/x-flac flac -audio/x-matroska mka -audio/x-mpegurl m3u -audio/x-ms-wax wax -audio/x-ms-wma wma -audio/x-pn-realaudio ram ra -audio/x-pn-realaudio-plugin rmp -# audio/x-tta -audio/x-wav wav -audio/xm xm -chemical/x-cdx cdx -chemical/x-cif cif -chemical/x-cmdf cmdf -chemical/x-cml cml -chemical/x-csml csml -# chemical/x-pdb -chemical/x-xyz xyz -image/bmp bmp -image/cgm cgm -# image/example -# image/fits -image/g3fax g3 -image/gif gif -image/ief ief -# image/jp2 -image/jpeg jpeg jpg jpe -# image/jpm -# image/jpx -image/ktx ktx -# image/naplps -image/png png -image/prs.btif btif -# image/prs.pti -image/sgi sgi -image/svg+xml svg svgz -# image/t38 -image/tiff tiff tif -# image/tiff-fx -image/vnd.adobe.photoshop psd -# image/vnd.cns.inf2 -image/vnd.dece.graphic uvi uvvi uvg uvvg -image/vnd.dvb.subtitle sub -image/vnd.djvu djvu djv -image/vnd.dwg dwg -image/vnd.dxf dxf -image/vnd.fastbidsheet fbs -image/vnd.fpx fpx -image/vnd.fst fst -image/vnd.fujixerox.edmics-mmr mmr -image/vnd.fujixerox.edmics-rlc rlc -# image/vnd.globalgraphics.pgb -# image/vnd.microsoft.icon -# image/vnd.mix -image/vnd.ms-modi mdi -image/vnd.ms-photo wdp -image/vnd.net-fpx npx -# image/vnd.radiance -# image/vnd.sealed.png -# image/vnd.sealedmedia.softseal.gif -# image/vnd.sealedmedia.softseal.jpg -# image/vnd.svf -image/vnd.wap.wbmp wbmp -image/vnd.xiff xif -image/webp webp -image/x-3ds 3ds -image/x-cmu-raster ras -image/x-cmx cmx -image/x-freehand fh fhc fh4 fh5 fh7 -image/x-icon ico -image/x-mrsid-image sid -image/x-pcx pcx -image/x-pict pic pct -image/x-portable-anymap pnm -image/x-portable-bitmap pbm -image/x-portable-graymap pgm -image/x-portable-pixmap ppm -image/x-rgb rgb -image/x-tga tga -image/x-xbitmap xbm -image/x-xpixmap xpm -image/x-xwindowdump xwd -# message/cpim -# message/delivery-status -# message/disposition-notification -# message/example -# message/external-body -# message/feedback-report -# message/global -# message/global-delivery-status -# message/global-disposition-notification -# message/global-headers -# message/http -# message/imdn+xml -# message/news -# message/partial -message/rfc822 eml mime -# message/s-http -# message/sip -# message/sipfrag -# message/tracking-status -# message/vnd.si.simp -# model/example -model/iges igs iges -model/mesh msh mesh silo -model/vnd.collada+xml dae -model/vnd.dwf dwf -# model/vnd.flatland.3dml -model/vnd.gdl gdl -# model/vnd.gs-gdl -# model/vnd.gs.gdl -model/vnd.gtw gtw -# model/vnd.moml+xml -model/vnd.mts mts -# model/vnd.parasolid.transmit.binary -# model/vnd.parasolid.transmit.text -model/vnd.vtu vtu -model/vrml wrl vrml -model/x3d+binary x3db x3dbz -model/x3d+vrml x3dv x3dvz -model/x3d+xml x3d x3dz -# multipart/alternative -# multipart/appledouble -# multipart/byteranges -# multipart/digest -# multipart/encrypted -# multipart/example -# multipart/form-data -# multipart/header-set -# multipart/mixed -# multipart/parallel -# multipart/related -# multipart/report -# multipart/signed -# multipart/voice-message -# text/1d-interleaved-parityfec -text/cache-manifest appcache -text/calendar ics ifb -text/css css -text/csv csv -# text/directory -# text/dns -# text/ecmascript -# text/enriched -# text/example -# text/fwdred -text/html html htm -# text/javascript -text/n3 n3 -# text/parityfec -text/plain txt text conf def list log in -# text/prs.fallenstein.rst -text/prs.lines.tag dsc -# text/vnd.radisys.msml-basic-layout -# text/red -# text/rfc822-headers -text/richtext rtx -# text/rtf -# text/rtp-enc-aescm128 -# text/rtx -text/sgml sgml sgm -# text/t140 -text/tab-separated-values tsv -text/troff t tr roff man me ms -text/turtle ttl -# text/ulpfec -text/uri-list uri uris urls -text/vcard vcard -# text/vnd.abc -text/vnd.curl curl -text/vnd.curl.dcurl dcurl -text/vnd.curl.scurl scurl -text/vnd.curl.mcurl mcurl -# text/vnd.dmclientscript -text/vnd.dvb.subtitle sub -# text/vnd.esmertec.theme-descriptor -text/vnd.fly fly -text/vnd.fmi.flexstor flx -text/vnd.graphviz gv -text/vnd.in3d.3dml 3dml -text/vnd.in3d.spot spot -# text/vnd.iptc.newsml -# text/vnd.iptc.nitf -# text/vnd.latex-z -# text/vnd.motorola.reflex -# text/vnd.ms-mediapackage -# text/vnd.net2phone.commcenter.command -# text/vnd.si.uricatalogue -text/vnd.sun.j2me.app-descriptor jad -# text/vnd.trolltech.linguist -# text/vnd.wap.si -# text/vnd.wap.sl -text/vnd.wap.wml wml -text/vnd.wap.wmlscript wmls -text/x-asm s asm -text/x-c c cc cxx cpp h hh dic -text/x-fortran f for f77 f90 -text/x-java-source java -text/x-opml opml -text/x-pascal p pas -text/x-nfo nfo -text/x-setext etx -text/x-sfv sfv -text/x-uuencode uu -text/x-vcalendar vcs -text/x-vcard vcf -# text/xml -# text/xml-external-parsed-entity -# video/1d-interleaved-parityfec -video/3gpp 3gp -# video/3gpp-tt -video/3gpp2 3g2 -# video/bmpeg -# video/bt656 -# video/celb -# video/dv -# video/example -video/h261 h261 -video/h263 h263 -# video/h263-1998 -# video/h263-2000 -video/h264 h264 -# video/h264-rcdo -# video/h264-svc -video/jpeg jpgv -# video/jpeg2000 -video/jpm jpm jpgm -video/mj2 mj2 mjp2 -# video/mp1s -# video/mp2p -# video/mp2t -video/mp4 mp4 mp4v mpg4 -# video/mp4v-es -video/mpeg mpeg mpg mpe m1v m2v -# video/mpeg4-generic -# video/mpv -# video/nv -video/ogg ogv -# video/parityfec -# video/pointer -video/quicktime qt mov -# video/raw -# video/rtp-enc-aescm128 -# video/rtx -# video/smpte292m -# video/ulpfec -# video/vc1 -# video/vnd.cctv -video/vnd.dece.hd uvh uvvh -video/vnd.dece.mobile uvm uvvm -# video/vnd.dece.mp4 -video/vnd.dece.pd uvp uvvp -video/vnd.dece.sd uvs uvvs -video/vnd.dece.video uvv uvvv -# video/vnd.directv.mpeg -# video/vnd.directv.mpeg-tts -# video/vnd.dlna.mpeg-tts -video/vnd.dvb.file dvb -video/vnd.fvt fvt -# video/vnd.hns.video -# video/vnd.iptvforum.1dparityfec-1010 -# video/vnd.iptvforum.1dparityfec-2005 -# video/vnd.iptvforum.2dparityfec-1010 -# video/vnd.iptvforum.2dparityfec-2005 -# video/vnd.iptvforum.ttsavc -# video/vnd.iptvforum.ttsmpeg2 -# video/vnd.motorola.video -# video/vnd.motorola.videop -video/vnd.mpegurl mxu m4u -video/vnd.ms-playready.media.pyv pyv -# video/vnd.nokia.interleaved-multimedia -# video/vnd.nokia.videovoip -# video/vnd.objectvideo -# video/vnd.sealed.mpeg1 -# video/vnd.sealed.mpeg4 -# video/vnd.sealed.swf -# video/vnd.sealedmedia.softseal.mov -video/vnd.uvvu.mp4 uvu uvvu -video/vnd.vivo viv -video/webm webm -video/x-f4v f4v -video/x-fli fli -video/x-flv flv -video/x-m4v m4v -video/x-matroska mkv mk3d mks -video/x-mng mng -video/x-ms-asf asf asx -video/x-ms-vob vob -video/x-ms-wm wm -video/x-ms-wmv wmv -video/x-ms-wmx wmx -video/x-ms-wvx wvx -video/x-msvideo avi -video/x-sgi-movie movie -video/x-smv smv -x-conference/x-cooltalk ice diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/node.types b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/node.types deleted file mode 100644 index 55b2cf79..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/mime/types/node.types +++ /dev/null @@ -1,77 +0,0 @@ -# What: WebVTT -# Why: To allow formats intended for marking up external text track resources. -# http://dev.w3.org/html5/webvtt/ -# Added by: niftylettuce -text/vtt vtt - -# What: Google Chrome Extension -# Why: To allow apps to (work) be served with the right content type header. -# http://codereview.chromium.org/2830017 -# Added by: niftylettuce -application/x-chrome-extension crx - -# What: HTC support -# Why: To properly render .htc files such as CSS3PIE -# Added by: niftylettuce -text/x-component htc - -# What: HTML5 application cache manifes ('.manifest' extension) -# Why: De-facto standard. Required by Mozilla browser when serving HTML5 apps -# per https://developer.mozilla.org/en/offline_resources_in_firefox -# Added by: louisremi -text/cache-manifest manifest - -# What: node binary buffer format -# Why: semi-standard extension w/in the node community -# Added by: tootallnate -application/octet-stream buffer - -# What: The "protected" MP-4 formats used by iTunes. -# Why: Required for streaming music to browsers (?) -# Added by: broofa -application/mp4 m4p -audio/mp4 m4a - -# What: Video format, Part of RFC1890 -# Why: See https://github.com/bentomas/node-mime/pull/6 -# Added by: mjrusso -video/MP2T ts - -# What: EventSource mime type -# Why: mime type of Server-Sent Events stream -# http://www.w3.org/TR/eventsource/#text-event-stream -# Added by: francois2metz -text/event-stream event-stream - -# What: Mozilla App manifest mime type -# Why: https://developer.mozilla.org/en/Apps/Manifest#Serving_manifests -# Added by: ednapiranha -application/x-web-app-manifest+json webapp - -# What: Lua file types -# Why: Googling around shows de-facto consensus on these -# Added by: creationix (Issue #45) -text/x-lua lua -application/x-lua-bytecode luac - -# What: Markdown files, as per http://daringfireball.net/projects/markdown/syntax -# Why: http://stackoverflow.com/questions/10701983/what-is-the-mime-type-for-markdown -# Added by: avoidwork -text/x-markdown markdown md mkd - -# What: ini files -# Why: because they're just text files -# Added by: Matthew Kastor -text/plain ini - -# What: DASH Adaptive Streaming manifest -# Why: https://developer.mozilla.org/en-US/docs/DASH_Adaptive_Streaming_for_HTML_5_Video -# Added by: eelcocramer -application/dash+xml mdp - -# What: OpenType font files - http://www.microsoft.com/typography/otspec/ -# Why: Browsers usually ignore the font MIME types and sniff the content, -# but Chrome, shows a warning if OpenType fonts aren't served with -# the `font/opentype` MIME type: http://i.imgur.com/8c5RN8M.png. -# Added by: alrra -font/opentype otf diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/.npmignore deleted file mode 100644 index fd4f2b06..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.DS_Store diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/LICENSE.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/LICENSE.md deleted file mode 100644 index f039427f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/LICENSE.md +++ /dev/null @@ -1,2 +0,0 @@ -Copyright (c) 2010-2012 Robert Kieffer -MIT License - http://opensource.org/licenses/mit-license.php diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/README.md deleted file mode 100644 index e436a89f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/README.md +++ /dev/null @@ -1,207 +0,0 @@ -# node-uuid - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Generate RFC4122 version 1 or version 4 UUIDs -* Runs in node.js and all browsers. -* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid'). -* Cryptographically strong random # generation on supporting platforms -* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! ) -* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html) - -## Getting Started - -Install it in your browser: - -```html -<script src="uuid.js"></script> -``` - -Or in node.js: - -``` -npm install node-uuid -``` - -```javascript -var uuid = require('node-uuid'); -``` - -Then create some ids ... - -```javascript -// Generate a v1 (time-based) id -uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - -// Generate a v4 (random) id -uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' -``` - -## API - -### uuid.v1([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Notes: - -1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v1({ - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -var arr = new Array(32); // -> [] -uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] - -// Optionally use uuid.unparse() to get stringify the ids -uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' -uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' -``` - -### uuid.v4([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v4({ - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" -``` - -Example: Generate two IDs in a single buffer - -```javascript -var buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); -``` - -### uuid.parse(id[, buffer[, offset]]) -### uuid.unparse(buffer[, offset]) - -Parse and unparse UUIDs - - * `id` - (String) UUID(-like) string - * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used - * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 - -Example parsing and unparsing a UUID string - -```javascript -var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10> -var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' -``` - -### uuid.noConflict() - -(Browsers only) Set `uuid` property back to it's previous value. - -Returns the node-uuid object. - -Example: - -```javascript -var myUuid = uuid.noConflict(); -myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' -``` - -## Deprecated APIs - -Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. - -### uuid([format [, buffer [, offset]]]) - -uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). - -### uuid.BufferClass - -The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API. - -## Testing - -In node.js - -``` -> cd test -> node test.js -``` - -In Browser - -``` -open test/test.html -``` - -### Benchmarking - -Requires node.js - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -For a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark) - -For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - -## Release notes - -### 1.4.0 - -* Improved module context detection -* Removed public RNG functions - -### 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - -### 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/README.md deleted file mode 100644 index aaeb2ea0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# node-uuid Benchmarks - -### Results - -To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark - -### Run them yourself - -node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. - -To prepare and run the benchmark issue; - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -You'll see an output like this one: - -``` -# v4 -nodeuuid.v4(): 854700 uuids/second -nodeuuid.v4('binary'): 788643 uuids/second -nodeuuid.v4('binary', buffer): 1336898 uuids/second -uuid(): 479386 uuids/second -uuid('binary'): 582072 uuids/second -uuidjs.create(4): 312304 uuids/second - -# v1 -nodeuuid.v1(): 938086 uuids/second -nodeuuid.v1('binary'): 683060 uuids/second -nodeuuid.v1('binary', buffer): 1644736 uuids/second -uuidjs.create(1): 190621 uuids/second -``` - -* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. -* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. - -If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: - -``` -for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; -``` - -If you're interested in how performance varies between different node versions, you can issue the above command multiple times. - -You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: - -``` -(cd benchmark/ && ./bench.sh) -``` - -This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu deleted file mode 100644 index a342fbbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu +++ /dev/null @@ -1,174 +0,0 @@ -#!/opt/local/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.4 patchlevel 3 -# last modified March 2011 -# System: Darwin 10.8.0 -# -# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 -# Thomas Williams, Colin Kelley and many others -# -# gnuplot home: http://www.gnuplot.info -# faq, bugs, etc: type "help seeking-assistance" -# immediate help: type "help" -# plot window: hit 'h' -set terminal postscript eps noenhanced defaultplex \ - leveldefault color colortext \ - solid linewidth 1.2 butt noclip \ - palfuncparam 2000,0.003 \ - "Helvetica" 14 -set output 'bench.eps' -unset clip points -set clip one -unset clip two -set bar 1.000000 front -set border 31 front linetype -1 linewidth 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 -set style circle radius graph 0.02, first 0, 0 -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 -set key maxcolumns 2 maxrows 0 -unset label -unset arrow -set style increment default -unset style line -set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 -unset style arrow -set style histogram clustered gap 2 title offset character 0, 0, 0 -unset logscale -set offsets graph 0.05, 0.15, 0, 0 -set pointsize 1.5 -set pointintervalbox 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -unset hidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data points -set style function lines -set xzeroaxis linetype -2 linewidth 1.000 -set yzeroaxis linetype -2 linewidth 1.000 -set zzeroaxis linetype -2 linewidth 1.000 -set x2zeroaxis linetype -2 linewidth 1.000 -set y2zeroaxis linetype -2 linewidth 1.000 -set ticslevel 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set xtics norangelimit -set xtics () -set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set ytics autofreq norangelimit -set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 -set ztics autofreq norangelimit -set nox2tics -set noy2tics -set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set cbtics autofreq norangelimit -set title "" -set title offset character 0, 0, 0 font "" norotate -set timestamp bottom -set timestamp "" -set timestamp offset character 0, 0, 0 font "" norotate -set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale rfixmin -set autoscale rfixmax -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set autoscale tfixmin -set autoscale tfixmax -set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale ufixmin -set autoscale ufixmax -set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale vfixmin -set autoscale vfixmax -set xlabel "" -set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set x2label "" -set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate -set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) -set autoscale xfixmin -set autoscale xfixmax -set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) -set autoscale x2fixmin -set autoscale x2fixmax -set ylabel "" -set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set y2label "" -set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) -set autoscale yfixmin -set autoscale yfixmax -set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) -set autoscale y2fixmin -set autoscale y2fixmax -set zlabel "" -set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale zfixmin -set autoscale zfixmax -set cblabel "" -set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale cbfixmin -set autoscale cbfixmax -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set pm3d explicit at s -set pm3d scansautomatic -set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault -set loadpath -set fontpath -set fit noerrorvariables -GNUTERM = "aqua" -plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 -# EOF diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.sh deleted file mode 100755 index d870a0cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/bench.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# for a given node version run: -# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; - -PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte') -FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es) -INDICES=(2 3 2 3 2 2 2 2 2) -VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) -TMPJOIN="tmp_join" -OUTPUT="bench_results.txt" - -for I in ${!FILES[*]}; do - F=${FILES[$I]} - P=${PATTERNS[$I]} - INDEX=${INDICES[$I]} - echo "version $F" > $F - for V in $VERSIONS; do - (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F - done - if [ $I == 0 ]; then - cat $F > $TMPJOIN - else - join $TMPJOIN $F > $OUTPUT - cp $OUTPUT $TMPJOIN - fi - rm $F -done - -rm $TMPJOIN - -gnuplot bench.gnu -convert -density 200 -resize 800x560 -flatten bench.eps bench.png -rm bench.eps diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c deleted file mode 100644 index dbfc75f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include <stdio.h> -#include <unistd.h> -#include <sys/time.h> -#include <uuid/uuid.h> - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js deleted file mode 100644 index 40e6efbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js +++ /dev/null @@ -1,84 +0,0 @@ -try { - var nodeuuid = require('../uuid'); -} catch (e) { - console.error('node-uuid require failed - skipping tests'); -} - -try { - var uuid = require('uuid'); -} catch (e) { - console.error('uuid require failed - skipping tests'); -} - -try { - var uuidjs = require('uuid-js'); -} catch (e) { - console.error('uuid-js require failed - skipping tests'); -} - -var N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -console.log('# v4'); - -// node-uuid - string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); - rate('nodeuuid.v4() - using node.js crypto RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG}); - rate('nodeuuid.v4() - using Math.random() RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); - rate('nodeuuid.v4(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); - rate('nodeuuid.v4(\'binary\', buffer)', t); -} - -// libuuid - string form -if (uuid) { - for (var i = 0, t = Date.now(); i < N; i++) uuid(); - rate('uuid()', t); - - for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); - rate('uuid(\'binary\')', t); -} - -// uuid-js - string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); - rate('uuidjs.create(4)', t); -} - -// 140byte.es -for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)}); -rate('140byte.es_v4', t); - -console.log(''); -console.log('# v1'); - -// node-uuid - v1 string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); - rate('nodeuuid.v1()', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); - rate('nodeuuid.v1(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); - rate('nodeuuid.v1(\'binary\', buffer)', t); -} - -// uuid-js - v1 string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); - rate('uuidjs.create(1)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/component.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/component.json deleted file mode 100644 index ace21348..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/component.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "node-uuid", - "repo": "broofa/node-uuid", - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "version": "1.4.0", - "author": "Robert Kieffer <robert@broofa.com>", - "contributors": [ - {"name": "Christoph Tavan <dev@tavan.de>", "github": "https://github.com/ctavan"} - ], - "keywords": ["uuid", "guid", "rfc4122"], - "dependencies": {}, - "development": {}, - "main": "uuid.js", - "scripts": [ - "uuid.js" - ], - "license": "MIT" -} \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/package.json deleted file mode 100644 index e6f518be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "node-uuid", - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "url": "http://github.com/broofa/node-uuid", - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com" - }, - "contributors": [ - { - "name": "Christoph Tavan", - "email": "dev@tavan.de" - } - ], - "lib": ".", - "main": "./uuid.js", - "repository": { - "type": "git", - "url": "https://github.com/broofa/node-uuid.git" - }, - "version": "1.4.1", - "readme": "# node-uuid\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid').\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src=\"uuid.js\"></script>\n```\n\nOr in node.js:\n\n```\nnpm install node-uuid\n```\n\n```javascript\nvar uuid = require('node-uuid');\n```\n\nThen create some ids ...\n\n```javascript\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the node-uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/broofa/node-uuid/issues" - }, - "homepage": "https://github.com/broofa/node-uuid", - "_id": "node-uuid@1.4.1", - "dist": { - "shasum": "e937c5cdd70594274f11a11d3ae751f5c5857c73" - }, - "_from": "node-uuid@~1.4.0", - "_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/compare_v1.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/compare_v1.js deleted file mode 100644 index 05af8221..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/compare_v1.js +++ /dev/null @@ -1,63 +0,0 @@ -var assert = require('assert'), - nodeuuid = require('../uuid'), - uuidjs = require('uuid-js'), - libuuid = require('uuid').generate, - util = require('util'), - exec = require('child_process').exec, - os = require('os'); - -// On Mac Os X / macports there's only the ossp-uuid package that provides uuid -// On Linux there's uuid-runtime which provides uuidgen -var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t'; - -function compare(ids) { - console.log(ids); - for (var i = 0; i < ids.length; i++) { - var id = ids[i].split('-'); - id = [id[2], id[1], id[0]].join(''); - ids[i] = id; - } - var sorted = ([].concat(ids)).sort(); - - if (sorted.toString() !== ids.toString()) { - console.log('Warning: sorted !== ids'); - } else { - console.log('everything in order!'); - } -} - -// Test time order of v1 uuids -var ids = []; -while (ids.length < 10e3) ids.push(nodeuuid.v1()); - -var max = 10; -console.log('node-uuid:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(nodeuuid.v1()); -compare(ids); - -console.log(''); -console.log('uuidjs:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString()); -compare(ids); - -console.log(''); -console.log('libuuid:'); -ids = []; -var count = 0; -var last = function() { - compare(ids); -} -var cb = function(err, stdout, stderr) { - ids.push(stdout.substring(0, stdout.length-1)); - count++; - if (count < max) { - return next(); - } - last(); -}; -var next = function() { - exec(uuidCmd, cb); -}; -next(); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.html b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.html deleted file mode 100644 index d80326ec..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.html +++ /dev/null @@ -1,17 +0,0 @@ -<html> - <head> - <style> - div { - font-family: monospace; - font-size: 8pt; - } - div.log {color: #444;} - div.warn {color: #550;} - div.error {color: #800; font-weight: bold;} - </style> - <script src="../uuid.js"></script> - </head> - <body> - <script src="./test.js"></script> - </body> -</html> diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.js deleted file mode 100644 index 24692256..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/test/test.js +++ /dev/null @@ -1,228 +0,0 @@ -if (!this.uuid) { - // node.js - uuid = require('../uuid'); -} - -// -// x-platform log/assert shims -// - -function _log(msg, type) { - type = type || 'log'; - - if (typeof(document) != 'undefined') { - document.write('<div class="' + type + '">' + msg.replace(/\n/g, '<br />') + '</div>'); - } - if (typeof(console) != 'undefined') { - var color = { - log: '\033[39m', - warn: '\033[33m', - error: '\033[31m' - }; - console[type](color[type] + msg + color.log); - } -} - -function log(msg) {_log(msg, 'log');} -function warn(msg) {_log(msg, 'warn');} -function error(msg) {_log(msg, 'error');} - -function assert(res, msg) { - if (!res) { - error('FAIL: ' + msg); - } else { - log('Pass: ' + msg); - } -} - -// -// Unit tests -// - -// Verify ordering of v1 ids created with explicit times -var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 - -function compare(name, ids) { - ids = ids.map(function(id) { - return id.split('-').reverse().join('-'); - }).sort(); - var sorted = ([].concat(ids)).sort(); - - assert(sorted.toString() == ids.toString(), name + ' have expected order'); -} - -// Verify ordering of v1 ids created using default behavior -compare('uuids with current time', [ - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1() -]); - -// Verify ordering of v1 ids created with explicit times -compare('uuids with time option', [ - uuid.v1({msecs: TIME - 10*3600*1000}), - uuid.v1({msecs: TIME - 1}), - uuid.v1({msecs: TIME}), - uuid.v1({msecs: TIME + 1}), - uuid.v1({msecs: TIME + 28*24*3600*1000}) -]); - -assert( - uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}), - 'IDs created at same msec are different' -); - -// Verify throw if too many ids created -var thrown = false; -try { - uuid.v1({msecs: TIME, nsecs: 10000}); -} catch (e) { - thrown = true; -} -assert(thrown, 'Exception thrown when > 10K ids created in 1 ms'); - -// Verify clock regression bumps clockseq -var uidt = uuid.v1({msecs: TIME}); -var uidtb = uuid.v1({msecs: TIME - 1}); -assert( - parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq' -); - -// Verify clock regression bumps clockseq -var uidtn = uuid.v1({msecs: TIME, nsecs: 10}); -var uidtnb = uuid.v1({msecs: TIME, nsecs: 9}); -assert( - parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq' -); - -// Verify explicit options produce expected id -var id = uuid.v1({ - msecs: 1321651533573, - nsecs: 5432, - clockseq: 0x385c, - node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ] -}); -assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); - -// Verify adjacent ids across a msec boundary are 1 time unit apart -var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); -var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - -var before = u0.split('-')[0], after = u1.split('-')[0]; -var dt = parseInt(after, 16) - parseInt(before, 16); -assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); - -// -// Test parse/unparse -// - -id = '00112233445566778899aabbccddeeff'; -assert(uuid.unparse(uuid.parse(id.substr(0,10))) == - '00112233-4400-0000-0000-000000000000', 'Short parse'); -assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) == - '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse'); - -// -// Perf tests -// - -var generators = { - v1: uuid.v1, - v4: uuid.v4 -}; - -var UUID_FORMAT = { - v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i, - v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i -}; - -var N = 1e4; - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second'); -} - -for (var version in generators) { - var counts = {}, max = 0; - var generator = generators[version]; - var format = UUID_FORMAT[version]; - - log('\nSanity check ' + N + ' ' + version + ' uuids'); - for (var i = 0, ok = 0; i < N; i++) { - id = generator(); - if (!format.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - assert(fail, id + ' is not a valid id'); - } - - // Count digits for our randomness check - if (version == 'v4') { - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } - } - } - - // Check randomness for v4 UUIDs - if (version == 'v4') { - // Limit that we get worried about randomness. (Purely empirical choice, this!) - var limit = 2*100*Math.sqrt(1/N); - - log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)'); - - for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)'); - } - } -} - -// Perf tests -for (var version in generators) { - log('\nPerformance testing ' + version + ' UUIDs'); - var generator = generators[version]; - var buf = new uuid.BufferClass(16); - - for (var i = 0, t = Date.now(); i < N; i++) generator(); - rate('uuid.' + version + '()', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary'); - rate('uuid.' + version + '(\'binary\')', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf); - rate('uuid.' + version + '(\'binary\', buffer)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/uuid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/uuid.js deleted file mode 100644 index 2fac6dc4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/node-uuid/uuid.js +++ /dev/null @@ -1,245 +0,0 @@ -// uuid.js -// -// Copyright (c) 2010-2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -(function() { - var _global = this; - - // Unique ID creation requires a high quality random # generator. We feature - // detect to determine the best RNG source, normalizing to a function that - // returns 128-bits of randomness, since that's what's usually required - var _rng; - - // Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html - // - // Moderately fast, high quality - if (typeof(require) == 'function') { - try { - var _rb = require('crypto').randomBytes; - _rng = _rb && function() {return _rb(16);}; - } catch(e) {} - } - - if (!_rng && _global.crypto && crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // - // Moderately fast, high quality - var _rnds8 = new Uint8Array(16); - _rng = function whatwgRNG() { - crypto.getRandomValues(_rnds8); - return _rnds8; - }; - } - - if (!_rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - _rng = function() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return _rnds; - }; - } - - // Buffer class to use - var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array; - - // Maps for number <-> hex string conversion - var _byteToHex = []; - var _hexToByte = {}; - for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; - } - - // **`parse()` - Parse a UUID into it's component bytes** - function parse(s, buf, offset) { - var i = (buf && offset) || 0, ii = 0; - - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) { - if (ii < 16) { // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); - - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; - } - - return buf; - } - - // **`unparse()` - Convert UUID byte array (ala parse()) into a string** - function unparse(buf, offset) { - var i = offset || 0, bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]]; - } - - // **`v1()` - Generate time-based UUID** - // - // Inspired by https://github.com/LiosK/UUID.js - // and http://docs.python.org/library/uuid.html - - // random #'s we need to init node and clockseq - var _seedBytes = _rng(); - - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] - ]; - - // Per 4.2.2, randomize (14 bit) clockseq - var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; - - // Previous uuid creation time - var _lastMSecs = 0, _lastNSecs = 0; - - // See https://github.com/broofa/node-uuid for API details - function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - - var clockseq = options.clockseq != null ? options.clockseq : _clockseq; - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs != null ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs != null ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq == null) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; - } - - return buf ? buf : unparse(b); - } - - // **`v4()` - Generate random UUID** - - // See https://github.com/broofa/node-uuid for API details - function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options == 'binary' ? new BufferClass(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || _rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || unparse(rnds); - } - - // Export public API - var uuid = v4; - uuid.v1 = v1; - uuid.v4 = v4; - uuid.parse = parse; - uuid.unparse = unparse; - uuid.BufferClass = BufferClass; - - if (typeof define === 'function' && define.amd) { - // Publish as AMD module - define(function() {return uuid;}); - } else if (typeof(module) != 'undefined' && module.exports) { - // Publish as node.js module - module.exports = uuid; - } else { - // Publish as global (in browsers) - var _previousRoot = _global.uuid; - - // **`noConflict()` - (browser only) to reset global 'uuid' var** - uuid.noConflict = function() { - _global.uuid = _previousRoot; - return uuid; - }; - - _global.uuid = uuid; - } -}).call(this); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/README.md deleted file mode 100644 index 34c4a85d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/README.md +++ /dev/null @@ -1,4 +0,0 @@ -oauth-sign -========== - -OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/index.js deleted file mode 100644 index e35bfa67..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/index.js +++ /dev/null @@ -1,43 +0,0 @@ -var crypto = require('crypto') - , qs = require('querystring') - ; - -function sha1 (key, body) { - return crypto.createHmac('sha1', key).update(body).digest('base64') -} - -function rfc3986 (str) { - return encodeURIComponent(str) - .replace(/!/g,'%21') - .replace(/\*/g,'%2A') - .replace(/\(/g,'%28') - .replace(/\)/g,'%29') - .replace(/'/g,'%27') - ; -} - -function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) { - // adapted from https://dev.twitter.com/docs/auth/oauth and - // https://dev.twitter.com/docs/auth/creating-signature - - var querystring = Object.keys(params).sort().map(function(key){ - // big WTF here with the escape + encoding but it's what twitter wants - return escape(rfc3986(key)) + "%3D" + escape(rfc3986(params[key])) - }).join('%26') - - var base = [ - httpMethod ? httpMethod.toUpperCase() : 'GET', - rfc3986(base_uri), - querystring - ].join('&') - - var key = [ - consumer_secret, - token_secret || '' - ].map(rfc3986).join('&') - - return sha1(key, base) -} - -exports.hmacsign = hmacsign -exports.rfc3986 = rfc3986 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/package.json deleted file mode 100644 index abc9d21d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "oauth-sign", - "description": "OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module.", - "version": "0.3.0", - "repository": { - "url": "https://github.com/mikeal/oauth-sign" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "scripts": { - "test": "node test.js" - }, - "readme": "oauth-sign\n==========\n\nOAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. \n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/oauth-sign/issues" - }, - "homepage": "https://github.com/mikeal/oauth-sign", - "_id": "oauth-sign@0.3.0", - "dist": { - "shasum": "cb540f93bb2b22a7d5941691a288d60e8ea9386e" - }, - "_from": "oauth-sign@~0.3.0", - "_resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/test.js deleted file mode 100644 index 46955ff6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/oauth-sign/test.js +++ /dev/null @@ -1,49 +0,0 @@ -var hmacsign = require('./index').hmacsign - , assert = require('assert') - , qs = require('querystring') - ; - -// Tests from Twitter documentation https://dev.twitter.com/docs/auth/oauth - -var reqsign = hmacsign('POST', 'https://api.twitter.com/oauth/request_token', - { oauth_callback: 'http://localhost:3005/the_dance/process_callback?service_provider_id=11' - , oauth_consumer_key: 'GDdmIQH6jhtmLUypg82g' - , oauth_nonce: 'QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk' - , oauth_signature_method: 'HMAC-SHA1' - , oauth_timestamp: '1272323042' - , oauth_version: '1.0' - }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98") - -console.log(reqsign) -console.log('8wUi7m5HFQy76nowoCThusfgB+Q=') -assert.equal(reqsign, '8wUi7m5HFQy76nowoCThusfgB+Q=') - -var accsign = hmacsign('POST', 'https://api.twitter.com/oauth/access_token', - { oauth_consumer_key: 'GDdmIQH6jhtmLUypg82g' - , oauth_nonce: '9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8' - , oauth_signature_method: 'HMAC-SHA1' - , oauth_token: '8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc' - , oauth_timestamp: '1272323047' - , oauth_verifier: 'pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY' - , oauth_version: '1.0' - }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98", "x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA") - -console.log(accsign) -console.log('PUw/dHA4fnlJYM6RhXk5IU/0fCc=') -assert.equal(accsign, 'PUw/dHA4fnlJYM6RhXk5IU/0fCc=') - -var upsign = hmacsign('POST', 'http://api.twitter.com/1/statuses/update.json', - { oauth_consumer_key: "GDdmIQH6jhtmLUypg82g" - , oauth_nonce: "oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y" - , oauth_signature_method: "HMAC-SHA1" - , oauth_token: "819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw" - , oauth_timestamp: "1272325550" - , oauth_version: "1.0" - , status: 'setting up my twitter 私のさえずりを設定する' - }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98", "J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA") - -console.log(upsign) -console.log('yOahq5m0YjDDjfjxHaXEsW9D+X0=') -assert.equal(upsign, 'yOahq5m0YjDDjfjxHaXEsW9D+X0=') - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.gitmodules b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.gitmodules deleted file mode 100644 index 49e31dac..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "support/expresso"] - path = support/expresso - url = git://github.com/visionmedia/expresso.git -[submodule "support/should"] - path = support/should - url = git://github.com/visionmedia/should.js.git diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.npmignore deleted file mode 100644 index e85ce2af..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -test -.travis.yml -benchmark.js -component.json -examples.js -History.md -Makefile diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/Readme.md deleted file mode 100644 index 27e54a4a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/Readme.md +++ /dev/null @@ -1,58 +0,0 @@ -# node-querystring - - query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others. - -## Installation - - $ npm install qs - -## Examples - -```js -var qs = require('qs'); - -qs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com'); -// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } } - -qs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }}) -// => user[name]=Tobi&user[email]=tobi%40learnboost.com -``` - -## Testing - -Install dev dependencies: - - $ npm install -d - -and execute: - - $ make test - -browser: - - $ open test/browser/index.html - -## License - -(The MIT License) - -Copyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca> - -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/index.js deleted file mode 100644 index b05938ac..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/index.js +++ /dev/null @@ -1,366 +0,0 @@ -/** - * Object#toString() ref for stringify(). - */ - -var toString = Object.prototype.toString; - -/** - * Object#hasOwnProperty ref - */ - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * Array#indexOf shim. - */ - -var indexOf = typeof Array.prototype.indexOf === 'function' - ? function(arr, el) { return arr.indexOf(el); } - : function(arr, el) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === el) return i; - } - return -1; - }; - -/** - * Array.isArray shim. - */ - -var isArray = Array.isArray || function(arr) { - return toString.call(arr) == '[object Array]'; -}; - -/** - * Object.keys shim. - */ - -var objectKeys = Object.keys || function(obj) { - var ret = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - ret.push(key); - } - } - return ret; -}; - -/** - * Array#forEach shim. - */ - -var forEach = typeof Array.prototype.forEach === 'function' - ? function(arr, fn) { return arr.forEach(fn); } - : function(arr, fn) { - for (var i = 0; i < arr.length; i++) fn(arr[i]); - }; - -/** - * Array#reduce shim. - */ - -var reduce = function(arr, fn, initial) { - if (typeof arr.reduce === 'function') return arr.reduce(fn, initial); - var res = initial; - for (var i = 0; i < arr.length; i++) res = fn(res, arr[i]); - return res; -}; - -/** - * Cache non-integer test regexp. - */ - -var isint = /^[0-9]+$/; - -function promote(parent, key) { - if (parent[key].length == 0) return parent[key] = {} - var t = {}; - for (var i in parent[key]) { - if (hasOwnProperty.call(parent[key], i)) { - t[i] = parent[key][i]; - } - } - parent[key] = t; - return t; -} - -function parse(parts, parent, key, val) { - var part = parts.shift(); - - // illegal - if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return; - - // end - if (!part) { - if (isArray(parent[key])) { - parent[key].push(val); - } else if ('object' == typeof parent[key]) { - parent[key] = val; - } else if ('undefined' == typeof parent[key]) { - parent[key] = val; - } else { - parent[key] = [parent[key], val]; - } - // array - } else { - var obj = parent[key] = parent[key] || []; - if (']' == part) { - if (isArray(obj)) { - if ('' != val) obj.push(val); - } else if ('object' == typeof obj) { - obj[objectKeys(obj).length] = val; - } else { - obj = parent[key] = [parent[key], val]; - } - // prop - } else if (~indexOf(part, ']')) { - part = part.substr(0, part.length - 1); - if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - // key - } else { - if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - } - } -} - -/** - * Merge parent key/val pair. - */ - -function merge(parent, key, val){ - if (~indexOf(key, ']')) { - var parts = key.split('[') - , len = parts.length - , last = len - 1; - parse(parts, parent, 'base', val); - // optimize - } else { - if (!isint.test(key) && isArray(parent.base)) { - var t = {}; - for (var k in parent.base) t[k] = parent.base[k]; - parent.base = t; - } - set(parent.base, key, val); - } - - return parent; -} - -/** - * Compact sparse arrays. - */ - -function compact(obj) { - if ('object' != typeof obj) return obj; - - if (isArray(obj)) { - var ret = []; - - for (var i in obj) { - if (hasOwnProperty.call(obj, i)) { - ret.push(obj[i]); - } - } - - return ret; - } - - for (var key in obj) { - obj[key] = compact(obj[key]); - } - - return obj; -} - -/** - * Parse the given obj. - */ - -function parseObject(obj){ - var ret = { base: {} }; - - forEach(objectKeys(obj), function(name){ - merge(ret, name, obj[name]); - }); - - return compact(ret.base); -} - -/** - * Parse the given str. - */ - -function parseString(str){ - var ret = reduce(String(str).split('&'), function(ret, pair){ - var eql = indexOf(pair, '=') - , brace = lastBraceInKey(pair) - , key = pair.substr(0, brace || eql) - , val = pair.substr(brace || eql, pair.length) - , val = val.substr(indexOf(val, '=') + 1, val.length); - - // ?foo - if ('' == key) key = pair, val = ''; - if ('' == key) return ret; - - return merge(ret, decode(key), decode(val)); - }, { base: {} }).base; - - return compact(ret); -} - -/** - * Parse the given query `str` or `obj`, returning an object. - * - * @param {String} str | {Object} obj - * @return {Object} - * @api public - */ - -exports.parse = function(str){ - if (null == str || '' == str) return {}; - return 'object' == typeof str - ? parseObject(str) - : parseString(str); -}; - -/** - * Turn the given `obj` into a query string - * - * @param {Object} obj - * @return {String} - * @api public - */ - -var stringify = exports.stringify = function(obj, prefix) { - if (isArray(obj)) { - return stringifyArray(obj, prefix); - } else if ('[object Object]' == toString.call(obj)) { - return stringifyObject(obj, prefix); - } else if ('string' == typeof obj) { - return stringifyString(obj, prefix); - } else { - return prefix + '=' + encodeURIComponent(String(obj)); - } -}; - -/** - * Stringify the given `str`. - * - * @param {String} str - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyString(str, prefix) { - if (!prefix) throw new TypeError('stringify expects an object'); - return prefix + '=' + encodeURIComponent(str); -} - -/** - * Stringify the given `arr`. - * - * @param {Array} arr - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyArray(arr, prefix) { - var ret = []; - if (!prefix) throw new TypeError('stringify expects an object'); - for (var i = 0; i < arr.length; i++) { - ret.push(stringify(arr[i], prefix + '[' + i + ']')); - } - return ret.join('&'); -} - -/** - * Stringify the given `obj`. - * - * @param {Object} obj - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyObject(obj, prefix) { - var ret = [] - , keys = objectKeys(obj) - , key; - - for (var i = 0, len = keys.length; i < len; ++i) { - key = keys[i]; - if ('' == key) continue; - if (null == obj[key]) { - ret.push(encodeURIComponent(key) + '='); - } else { - ret.push(stringify(obj[key], prefix - ? prefix + '[' + encodeURIComponent(key) + ']' - : encodeURIComponent(key))); - } - } - - return ret.join('&'); -} - -/** - * Set `obj`'s `key` to `val` respecting - * the weird and wonderful syntax of a qs, - * where "foo=bar&foo=baz" becomes an array. - * - * @param {Object} obj - * @param {String} key - * @param {String} val - * @api private - */ - -function set(obj, key, val) { - var v = obj[key]; - if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return; - if (undefined === v) { - obj[key] = val; - } else if (isArray(v)) { - v.push(val); - } else { - obj[key] = [v, val]; - } -} - -/** - * Locate last brace in `str` within the key. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function lastBraceInKey(str) { - var len = str.length - , brace - , c; - for (var i = 0; i < len; ++i) { - c = str[i]; - if (']' == c) brace = false; - if ('[' == c) brace = true; - if ('=' == c && !brace) return i; - } -} - -/** - * Decode `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -function decode(str) { - try { - return decodeURIComponent(str.replace(/\+/g, ' ')); - } catch (err) { - return str; - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/package.json deleted file mode 100644 index 313485c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/qs/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "qs", - "description": "querystring parser", - "version": "0.6.6", - "keywords": [ - "query string", - "parser", - "component" - ], - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/node-querystring.git" - }, - "devDependencies": { - "mocha": "*", - "expect.js": "*" - }, - "scripts": { - "test": "make test" - }, - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "main": "index", - "engines": { - "node": "*" - }, - "readme": "# node-querystring\n\n query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others.\n\n## Installation\n\n $ npm install qs\n\n## Examples\n\n```js\nvar qs = require('qs');\n\nqs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com');\n// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } }\n\nqs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }})\n// => user[name]=Tobi&user[email]=tobi%40learnboost.com\n```\n\n## Testing\n\nInstall dev dependencies:\n\n $ npm install -d\n\nand execute:\n\n $ make test\n\nbrowser:\n\n $ open test/browser/index.html\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/node-querystring/issues" - }, - "homepage": "https://github.com/visionmedia/node-querystring", - "_id": "qs@0.6.6", - "_from": "qs@~0.6.0" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.jshintrc b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.jshintrc deleted file mode 100644 index 8fcead4f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.jshintrc +++ /dev/null @@ -1,72 +0,0 @@ -{ - // Settings - "passfail" : false, // Stop on first error. - "maxerr" : 100, // Maximum error before stopping. - - - // Predefined globals whom JSHint will ignore. - "browser" : false, // Standard browser globals e.g. `window`, `document`. - "node" : true, - "rhino" : false, - "couch" : false, - "wsh" : false, // Windows Scripting Host. - - "jquery" : false, - "prototypejs" : false, - "mootools" : false, - "dojo" : false, - - "predef" : [ // Custom globals. - "escape", "unescape" // aren't picked up by node flag above :/ - ], - - - // Development. - "debug" : false, // Allow debugger statements e.g. browser breakpoints. - "devel" : false, // Allow developments statements e.g. `console.log();`. - - - // EcmaScript 5. - "es5" : true, // Allow EcmaScript 5 syntax. - "esnext" : true, // Allow ES "next" syntax, specifically 'const' (V8 has this) - "strict" : false, // Require `use strict` pragma in every file. - "globalstrict" : false, // Allow global "use strict" (also enables 'strict'). - - - // The Good Parts. - "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons). - "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. - "bitwise" : true, // Prohibit bitwise operators (&, |, ^, etc.). - "boss" : false, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. - "curly" : false, // Require {} for every new block or scope. - "eqeqeq" : false, // Require triple equals i.e. `===`. - "eqnull" : true, // Tolerate use of `== null`. - "evil" : false, // Tolerate use of `eval`. - "expr" : true, // Tolerate `ExpressionStatement` as Programs. - "forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`. - "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` - "latedef" : false, // Prohibit variable use before definition. - "loopfunc" : false, // Allow functions to be defined within loops. - "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. - "regexp" : true, // Prohibit `.` and `[^...]` in regular expressions. - "regexdash" : false, // Tolerate unescaped last dash i.e. `[-...]`. - "scripturl" : true, // Tolerate script-targeted URLs. - "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. - "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. - "undef" : true, // Require all non-global variables be declared before they are used. - - - // Personal styling prefrences. - "lastsemic" : true, // Prohibit missing semicolon for the last statement in a one-line block - "newcap" : false, // Require capitalization of all constructor functions e.g. `new F()`. - "noempty" : true, // Prohipit use of empty blocks. - "nonew" : true, // Prohibit use of constructors for side-effects. - "nomen" : false, // Prohibit use of initial or trailing underbars in names. - "onevar" : false, // Allow only one `var` statement per function. - "onecase" : false, // Allow switches with one case statement - "plusplus" : false, // Prohibit use of `++` & `--`. - "proto" : false, // Allow use of __proto__ - "sub" : true, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. - "trailing" : true, // Prohibit trailing whitespaces. - "white" : false // Check against strict whitespace and indentation rules. -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.npmignore deleted file mode 100644 index 54efff98..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -.*.sw[nmop] -npm-debug.log diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/LICENSE deleted file mode 100644 index 3fac4c85..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/LICENSE +++ /dev/null @@ -1,78 +0,0 @@ -Copyright GoInstant, Inc. and other contributors. 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. - -The following exceptions apply: - -=== - -`pubSufTest()` of generate-pubsuffix.js is in the public domain. - - // Any copyright is dedicated to the Public Domain. - // http://creativecommons.org/publicdomain/zero/1.0/ - -=== - -`public-suffix.txt` was obtained from -<https://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1> -via <http://publicsuffix.org>. - -That file contains the usual Mozilla triple-license, for which this project uses it -under the terms of the MPL 1.1: - - // ***** BEGIN LICENSE BLOCK ***** - // Version: MPL 1.1/GPL 2.0/LGPL 2.1 - // - // The contents of this file are subject to the Mozilla Public License Version - // 1.1 (the "License"); you may not use this file except in compliance with - // the License. You may obtain a copy of the License at - // http://www.mozilla.org/MPL/ - // - // Software distributed under the License is distributed on an "AS IS" basis, - // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - // for the specific language governing rights and limitations under the - // License. - // - // The Original Code is the Public Suffix List. - // - // The Initial Developer of the Original Code is - // Jo Hermans <jo.hermans@gmail.com>. - // Portions created by the Initial Developer are Copyright (C) 2007 - // the Initial Developer. All Rights Reserved. - // - // Contributor(s): - // Ruben Arakelyan <ruben@rubenarakelyan.com> - // Gervase Markham <gerv@gerv.net> - // Pamela Greene <pamg.bugs@gmail.com> - // David Triendl <david@triendl.name> - // Jothan Frakes <jothan@gmail.com> - // The kind representatives of many TLD registries - // - // Alternatively, the contents of this file may be used under the terms of - // either the GNU General Public License Version 2 or later (the "GPL"), or - // the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - // in which case the provisions of the GPL or the LGPL are applicable instead - // of those above. If you wish to allow use of your version of this file only - // under the terms of either the GPL or the LGPL, and not to allow others to - // use your version of this file under the terms of the MPL, indicate your - // decision by deleting the provisions above and replace them with the notice - // and other provisions required by the GPL or the LGPL. If you do not delete - // the provisions above, a recipient may use your version of this file under - // the terms of any one of the MPL, the GPL or the LGPL. - // - // ***** END LICENSE BLOCK ***** diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/README.md deleted file mode 100644 index fd1dbb1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/README.md +++ /dev/null @@ -1,380 +0,0 @@ -[RFC6265](http://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js - -![Tough Cookie](http://www.goinstant.com.s3.amazonaws.com/tough-cookie.jpg) - -# Synopsis - -``` javascript -var cookies = require('tough-cookie'); // note: not 'cookie', 'cookies' or 'node-cookie' -var Cookie = cookies.Cookie; -var cookie = Cookie.parse(header); -cookie.value = 'somethingdifferent'; -header = cookie.toString(); - -var cookiejar = new cookies.CookieJar(); -cookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb); -// ... -cookiejar.getCookies('http://example.com/otherpath',function(err,cookies) { - res.headers['cookie'] = cookies.join('; '); -}); -``` - -# Installation - -It's _so_ easy! - -`npm install tough-cookie` - -Requires `punycode`, which should get installed automatically for you. Note that node.js v0.6.2+ bundles punycode by default. - -Why the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken. - -# API - -cookies -======= - -Functions on the module you get from `require('tough-cookie')`. All can be used as pure functions and don't need to be "bound". - -parseDate(string[,strict]) ------------------ - -Parse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`. If strict is set to true then leading/trailing non-seperator characters around the time part will cause the parsing to fail (e.g. "Thu, 01 Jan 1970 00:00:010 GMT" has an extra trailing zero but Chrome, an assumedly RFC-compliant browser, treats this as valid). - -formatDate(date) ----------------- - -Format a Date into a RFC1123 string (the RFC6265-recommended format). - -canonicalDomain(str) --------------------- - -Transforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects). - -domainMatch(str,domStr[,canonicalize=true]) -------------------------------------------- - -Answers "does this real domain match the domain in a cookie?". The `str` is the "current" domain-name and the `domStr` is the "cookie" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a "suffix match". - -The `canonicalize` parameter will run the other two paramters through `canonicalDomain` or not. - -defaultPath(path) ------------------ - -Given a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the "directory" of a "file" in the path, but is specified by Section 5.1.4 of the RFC. - -The `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node's `uri.parse()` output. - -pathMatch(reqPath,cookiePath) ------------------------------ - -Answers "does the request-path path-match a given cookie-path?" as per RFC6265 Section 5.1.4. Returns a boolean. - -This is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`. - -parse(header[,strict=false]) ----------------------------- - -alias for `Cookie.parse(header[,strict])` - -fromJSON(string) ----------------- - -alias for `Cookie.fromJSON(string)` - -getPublicSuffix(hostname) -------------------------- - -Returns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it. - -For example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`. - -For further information, see http://publicsuffix.org/. This module derives its list from that site. - -cookieCompare(a,b) ------------------- - -For use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). Longest `.path`s go first, then sorted oldest to youngest. - -``` javascript -var cookies = [ /* unsorted array of Cookie objects */ ]; -cookies = cookies.sort(cookieCompare); -``` - -permuteDomain(domain) ---------------------- - -Generates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores. - - -permutePath(path) ------------------ - -Generates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores. - -Cookie -====== - -Cookie.parse(header[,strict=false]) ------------------------------------ - -Parses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can't be parsed. If in strict mode, returns `undefined` if the cookie doesn't follow the guidelines in section 4 of RFC6265. Generally speaking, strict mode can be used to validate your own generated Set-Cookie headers, but acting as a client you want to be lenient and leave strict mode off. - -Here's how to process the Set-Cookie header(s) on a node HTTP/HTTPS response: - -``` javascript -if (res.headers['set-cookie'] instanceof Array) - cookies = res.headers['set-cookie'].map(Cookie.parse); -else - cookies = [Cookie.parse(res.headers['set-cookie'])]; -``` - -Cookie.fromJSON(string) ------------------------ - -Convert a JSON string to a `Cookie` object. Does a `JSON.parse()` and converts the `.created`, `.lastAccessed` and `.expires` properties into `Date` objects. - -Properties -========== - - * _key_ - string - the name or key of the cookie (default "") - * _value_ - string - the value of the cookie (default "") - * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `"Infinity"`). See `setExpires()` - * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `"Infinity"` and `"-Infinity"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()` - * _domain_ - string - the `Domain=` attribute of the cookie - * _path_ - string - the `Path=` of the cookie - * _secure_ - boolean - the `Secure` cookie flag - * _httpOnly_ - boolean - the `HttpOnly` cookie flag - * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside) - -After a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes: - - * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied) - * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one. - * _created_ - `Date` - when this cookie was added to the jar - * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute. - -Construction([{options}]) ------------- - -Receives an options object that can contain any Cookie properties, uses the default for unspecified properties. - -.toString() ------------ - -encode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`. - -.cookieString() ---------------- - -encode to a Cookie header value (i.e. the `.key` and `.value` properties joined with '='). - -.setExpires(String) -------------------- - -sets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can't parse this date string), `.expires` is set to `"Infinity"` (a string) is set. - -.setMaxAge(number) -------------------- - -sets the maxAge in seconds. Coerces `-Infinity` to `"-Infinity"` and `Infinity` to `"Infinity"` so it JSON serializes correctly. - -.expiryTime([now=Date.now()]) ------------------------------ - -.expiryDate([now=Date.now()]) ------------------------------ - -expiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds. - -Max-Age takes precedence over Expires (as per the RFC). The `.created` attribute -- or, by default, the `now` paramter -- is used to offset the `.maxAge` attribute. - -If Expires (`.expires`) is set, that's returned. - -Otherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for "Tue, 19 Jan 2038 03:14:07 GMT" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents). - -.TTL([now=Date.now()]) ---------- - -compute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply. - -The "number" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned. - -.canonicalizedDoman() ---------------------- - -.cdomain() ----------- - -return the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters. - -.validate() ------------ - -Status: *IN PROGRESS*. Works for a few things, but is by no means comprehensive. - -validates cookie attributes for semantic correctness. Useful for "lint" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct: - -``` javascript -if (cookie.validate() === true) { - // it's tasty -} else { - // yuck! -} -``` - -CookieJar -========= - -Construction([store = new MemoryCookieStore()][, rejectPublicSuffixes]) ------------- - -Simply use `new CookieJar()`. If you'd like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used. - - -Attributes ----------- - - * _rejectPublicSuffixes_ - boolean - reject cookies with domains like "com" and "co.uk" (default: `true`) - -Since eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods. - -.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie)) -------------------------------------------------------------------- - -Attempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.created`, `.lastAccessed` and `.hostOnly` properties. - -The `options` object can be omitted and can have the following properties: - - * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. - * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. - * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies - * _strict_ - boolean - default `false` - perform extra checks - * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. CookieStore errors aren't ignored by this option. - -As per the RFC, the `.hostOnly` property is set if there was no "Domain=" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual). - -.storeCookie(cookie, [{options},] cb(err,cookie)) -------------------------------------------------- - -__REMOVED__ removed in lieu of the CookieStore API below - -.getCookies(currentUrl, [{options},] cb(err,cookies)) ------------------------------------------------------ - -Retrieve the list of cookies that can be sent in a Cookie header for the current url. - -If an error is encountered, that's passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given. - -The `options` object can be omitted and can have the following properties: - - * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. - * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. - * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies - * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially). - * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the CookieStore `fetchCookies` function (the default MemoryCookieStore supports it). - -The `.lastAccessed` property of the returned cookies will have been updated. - -.getCookieString(...) ---------------------- - -Accepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`. - -.getSetCookieStrings(...) -------------------------- - -Accepts the same options as `.getCookies()` but passes an array of strings suitable for Set-Cookie headers (rather than an array of `Cookie`s) to the callback. Simply maps the cookie array via `.toString()`. - -# CookieStore API - -The storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores. - -All `domain` parameters will have been normalized before calling. - -The Cookie store must have all of the following methods. - -store.findCookie(domain, path, key, cb(err,cookie)) ---------------------------------------------------- - -Retrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned. - -Callback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error). - -store.findCookies(domain, path, cb(err,cookies)) ------------------------------------------------- - -Locates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above. - -If no cookies are found, the callback MUST be passed an empty array. - -The resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it's OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done. - -As of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only). - -store.putCookie(cookie, cb(err)) --------------------------------- - -Adds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it's possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur. - -The `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties. - -Pass an error if the cookie cannot be stored. - -store.updateCookie(oldCookie, newCookie, cb(err)) -------------------------------------------------- - -Update an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store. - -The `.lastAccessed` property will always be different between the two objects and `.created` will always be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are sorted (or selected for deletion). - -Stores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn't define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object. - -The `newCookie` and `oldCookie` objects MUST NOT be modified. - -Pass an error if the newCookie cannot be stored. - -store.removeCookie(domain, path, key, cb(err)) ----------------------------------------------- - -Remove a cookie from the store (see notes on `findCookie` about the uniqueness constraint). - -The implementation MUST NOT pass an error if the cookie doesn't exist; only pass an error due to the failure to remove an existing cookie. - -store.removeCookies(domain, path, cb(err)) ------------------------------------------- - -Removes matching cookies from the store. The `path` paramter is optional, and if missing means all paths in a domain should be removed. - -Pass an error ONLY if removing any existing cookies failed. - -# TODO - - * _full_ RFC5890/RFC5891 canonicalization for domains in `cdomain()` - * the optional `punycode` requirement implements RFC3492, but RFC6265 requires RFC5891 - * better tests for `validate()`? - -# Copyright and License - -(tl;dr: MIT with some MPL/1.1) - -Copyright GoInstant, Inc. and other contributors. 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. - -Portions may be licensed under different licenses (in particular public-suffix.txt is MPL/1.1); please read the LICENSE file for full details. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js deleted file mode 100644 index a7fa5452..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - -var fs = require('fs'); -var assert = require('assert'); -var punycode = require('punycode'); - -fs.readFile('./public-suffix.txt', 'utf8', function(err,string) { - if (err) throw err; - var lines = string.split("\n"); - process.nextTick(function() { - processList(lines); - }); -}); - -var index = {}; - -var COMMENT = new RegExp('//.+'); -function processList(lines) { - while (lines.length) { - var line = lines.shift(); - line = line.replace(COMMENT,'').trim(); - if (!line) continue; - addToIndex(index,line); - } - - pubSufTest(); - - var w = fs.createWriteStream('./lib/pubsuffix.js',{ - flags: 'w', - encoding: 'utf8', - mode: 0644, - }); - w.on('end', process.exit); - w.write("/****************************************************\n"); - w.write(" * AUTOMATICALLY GENERATED by generate-pubsuffix.js *\n"); - w.write(" * DO NOT EDIT! *\n"); - w.write(" ****************************************************/\n\n"); - - w.write("module.exports.getPublicSuffix = "); - w.write(getPublicSuffix.toString()); - w.write(";\n\n"); - - w.write("// The following generated structure is used under the MPL version 1.1\n"); - w.write("// See public-suffix.txt for more information\n\n"); - w.write("var index = module.exports.index = Object.freeze(\n"); - w.write(JSON.stringify(index)); - w.write(");\n\n"); - w.write("// END of automatically generated file\n"); - - w.end(); -} - -function addToIndex(index,line) { - var prefix = ''; - if (line.replace(/^(!|\*\.)/)) { - prefix = RegExp.$1; - line = line.slice(prefix.length); - } - line = prefix + punycode.toASCII(line); - - if (line.substr(0,1) == '!') - index[line.substr(1)] = false; - else - index[line] = true; -} - -// include the licence in the function since it gets written to pubsuffix.js -function getPublicSuffix(domain) { - /* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - if (!domain) return null; - if (domain.match(/^\./)) return null; - - domain = domain.toLowerCase(); - var parts = domain.split('.').reverse(); - - var suffix = ''; - var suffixLen = 0; - for (var i=0; i<parts.length; i++) { - var part = parts[i]; - var starstr = '*'+suffix; - var partstr = part+suffix; - - if (index[starstr]) { // star rule matches - suffixLen = i+1; - if (index[partstr] === false) { // exception rule matches (NB: false, not undefined) - suffixLen--; - } - } else if (index[partstr]) { // exact match, not exception - suffixLen = i+1; - } - - suffix = '.'+part+suffix; - } - - if (index['*'+suffix]) { // *.domain exists (e.g. *.kyoto.jp for domain='kyoto.jp'); - return null; - } - - if (suffixLen && parts.length > suffixLen) { - return parts.slice(0,suffixLen+1).reverse().join('.'); - } - - return null; -} - -function checkPublicSuffix(give,get) { - var got = getPublicSuffix(give); - assert.equal(got, get, give+' should be '+(get==null?'NULL':get)+' but got '+got); -} - -// pubSufTest() was converted to JavaScript from http://publicsuffix.org/list/test.txt -function pubSufTest() { - // For this function-scope and this function-scope ONLY: - // Any copyright is dedicated to the Public Domain. - // http://creativecommons.org/publicdomain/zero/1.0/ - - // NULL input. - checkPublicSuffix(null, null); - // Mixed case. - checkPublicSuffix('COM', null); - checkPublicSuffix('example.COM', 'example.com'); - checkPublicSuffix('WwW.example.COM', 'example.com'); - // Leading dot. - checkPublicSuffix('.com', null); - checkPublicSuffix('.example', null); - checkPublicSuffix('.example.com', null); - checkPublicSuffix('.example.example', null); - // Unlisted TLD. - checkPublicSuffix('example', null); - checkPublicSuffix('example.example', null); - checkPublicSuffix('b.example.example', null); - checkPublicSuffix('a.b.example.example', null); - // Listed, but non-Internet, TLD. - checkPublicSuffix('local', null); - checkPublicSuffix('example.local', null); - checkPublicSuffix('b.example.local', null); - checkPublicSuffix('a.b.example.local', null); - // TLD with only 1 rule. - checkPublicSuffix('biz', null); - checkPublicSuffix('domain.biz', 'domain.biz'); - checkPublicSuffix('b.domain.biz', 'domain.biz'); - checkPublicSuffix('a.b.domain.biz', 'domain.biz'); - // TLD with some 2-level rules. - checkPublicSuffix('com', null); - checkPublicSuffix('example.com', 'example.com'); - checkPublicSuffix('b.example.com', 'example.com'); - checkPublicSuffix('a.b.example.com', 'example.com'); - checkPublicSuffix('uk.com', null); - checkPublicSuffix('example.uk.com', 'example.uk.com'); - checkPublicSuffix('b.example.uk.com', 'example.uk.com'); - checkPublicSuffix('a.b.example.uk.com', 'example.uk.com'); - checkPublicSuffix('test.ac', 'test.ac'); - // TLD with only 1 (wildcard) rule. - checkPublicSuffix('cy', null); - checkPublicSuffix('c.cy', null); - checkPublicSuffix('b.c.cy', 'b.c.cy'); - checkPublicSuffix('a.b.c.cy', 'b.c.cy'); - // More complex TLD. - checkPublicSuffix('jp', null); - checkPublicSuffix('test.jp', 'test.jp'); - checkPublicSuffix('www.test.jp', 'test.jp'); - checkPublicSuffix('ac.jp', null); - checkPublicSuffix('test.ac.jp', 'test.ac.jp'); - checkPublicSuffix('www.test.ac.jp', 'test.ac.jp'); - checkPublicSuffix('kyoto.jp', null); - checkPublicSuffix('c.kyoto.jp', null); - checkPublicSuffix('b.c.kyoto.jp', 'b.c.kyoto.jp'); - checkPublicSuffix('a.b.c.kyoto.jp', 'b.c.kyoto.jp'); - checkPublicSuffix('pref.kyoto.jp', 'pref.kyoto.jp'); // Exception rule. - checkPublicSuffix('www.pref.kyoto.jp', 'pref.kyoto.jp'); // Exception rule. - checkPublicSuffix('city.kyoto.jp', 'city.kyoto.jp'); // Exception rule. - checkPublicSuffix('www.city.kyoto.jp', 'city.kyoto.jp'); // Exception rule. - // TLD with a wildcard rule and exceptions. - checkPublicSuffix('om', null); - checkPublicSuffix('test.om', null); - checkPublicSuffix('b.test.om', 'b.test.om'); - checkPublicSuffix('a.b.test.om', 'b.test.om'); - checkPublicSuffix('songfest.om', 'songfest.om'); - checkPublicSuffix('www.songfest.om', 'songfest.om'); - // US K12. - checkPublicSuffix('us', null); - checkPublicSuffix('test.us', 'test.us'); - checkPublicSuffix('www.test.us', 'test.us'); - checkPublicSuffix('ak.us', null); - checkPublicSuffix('test.ak.us', 'test.ak.us'); - checkPublicSuffix('www.test.ak.us', 'test.ak.us'); - checkPublicSuffix('k12.ak.us', null); - checkPublicSuffix('test.k12.ak.us', 'test.k12.ak.us'); - checkPublicSuffix('www.test.k12.ak.us', 'test.k12.ak.us'); - - -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/cookie.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/cookie.js deleted file mode 100644 index 1d8615b5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/cookie.js +++ /dev/null @@ -1,947 +0,0 @@ -/* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - -/*jshint regexp:false */ -var net = require('net'); -var urlParse = require('url').parse; -var pubsuffix = require('./pubsuffix'); - -var punycode; -try { - punycode = require('punycode'); -} catch(e) { - console.warn("cookie: can't load punycode; won't use punycode for domain normalization"); -} - -var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/; - -// From RFC2616 S2.2: -var TOKEN = /[\x21\x23-\x26\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7A\x7C\x7E]/; - -// From RFC6265 S4.1.1 -// note that it excludes \x3B ";" -var COOKIE_OCTET = /[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]/; -var COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/; - -// The name/key cannot be empty but the value can (S5.2): -var COOKIE_PAIR_STRICT = new RegExp('^('+TOKEN.source+'+)=("?)('+COOKIE_OCTET.source+'*)\\2'); -var COOKIE_PAIR = /^([^=\s]+)\s*=\s*("?)\s*(.*)\s*\2/; - -// RFC6265 S4.1.1 defines extension-av as 'any CHAR except CTLs or ";"' -// Note ';' is \x3B -var NON_CTL_SEMICOLON = /[\x20-\x3A\x3C-\x7E]+/; -var EXTENSION_AV = NON_CTL_SEMICOLON; -var PATH_VALUE = NON_CTL_SEMICOLON; - -// Used for checking whether or not there is a trailing semi-colon -var TRAILING_SEMICOLON = /;+$/; - -/* RFC6265 S5.1.1.5: - * [fail if] the day-of-month-value is less than 1 or greater than 31 - */ -var DAY_OF_MONTH = /^(0?[1-9]|[12][0-9]|3[01])$/; - -/* RFC6265 S5.1.1.5: - * [fail if] - * * the hour-value is greater than 23, - * * the minute-value is greater than 59, or - * * the second-value is greater than 59. - */ -var TIME = /(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])/; -var STRICT_TIME = /^(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/; - -var MONTH = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)$/i; -var MONTH_TO_NUM = { - jan:0, feb:1, mar:2, apr:3, may:4, jun:5, jul:6, aug:7, sep:8, oct:9, nov:10, dec:11 -}; -var NUM_TO_MONTH = [ - 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec' -]; -var NUM_TO_DAY = [ - 'Sun','Mon','Tue','Wed','Thu','Fri','Sat' -]; - -var YEAR = /^([1-9][0-9]{1,3})$/; // 2 to 4 digits (will check range when parsing) - -var MAX_TIME = 2147483647000; // 31-bit max -var MAX_DATE = new Date(CookieJar.MAX_TIME); // 31-bit max -var MIN_TIME = 0; // 31-bit min -var MIN_DATE = new Date(CookieJar.MIN_TIME); // 31-bit min - - -// RFC6265 S5.1.1 date parser: -function parseDate(str,strict) { - if (!str) return; - var found_time, found_dom, found_month, found_year; - - /* RFC6265 S5.1.1: - * 2. Process each date-token sequentially in the order the date-tokens - * appear in the cookie-date - */ - var tokens = str.split(DATE_DELIM); - if (!tokens) return; - - var date = new Date(); - date.setMilliseconds(0); - - for (var i=0; i<tokens.length; i++) { - var token = tokens[i].trim(); - if (!token.length) continue; - - var result; - - /* 2.1. If the found-time flag is not set and the token matches the time - * production, set the found-time flag and set the hour- value, - * minute-value, and second-value to the numbers denoted by the digits in - * the date-token, respectively. Skip the remaining sub-steps and continue - * to the next date-token. - */ - if (!found_time) { - result = (strict ? STRICT_TIME : TIME).exec(token); - if (result) { - found_time = true; - date.setUTCHours(result[1]); - date.setUTCMinutes(result[2]); - date.setUTCSeconds(result[3]); - continue; - } - } - - /* 2.2. If the found-day-of-month flag is not set and the date-token matches - * the day-of-month production, set the found-day-of- month flag and set - * the day-of-month-value to the number denoted by the date-token. Skip - * the remaining sub-steps and continue to the next date-token. - */ - if (!found_dom) { - result = DAY_OF_MONTH.exec(token); - if (result) { - found_dom = true; - date.setUTCDate(result[1]); - continue; - } - } - - /* 2.3. If the found-month flag is not set and the date-token matches the - * month production, set the found-month flag and set the month-value to - * the month denoted by the date-token. Skip the remaining sub-steps and - * continue to the next date-token. - */ - if (!found_month) { - result = MONTH.exec(token); - if (result) { - found_month = true; - date.setUTCMonth(MONTH_TO_NUM[result[1].toLowerCase()]); - continue; - } - } - - /* 2.4. If the found-year flag is not set and the date-token matches the year - * production, set the found-year flag and set the year-value to the number - * denoted by the date-token. Skip the remaining sub-steps and continue to - * the next date-token. - */ - if (!found_year) { - result = YEAR.exec(token); - if (result) { - var year = result[0]; - /* From S5.1.1: - * 3. If the year-value is greater than or equal to 70 and less - * than or equal to 99, increment the year-value by 1900. - * 4. If the year-value is greater than or equal to 0 and less - * than or equal to 69, increment the year-value by 2000. - */ - if (70 <= year && year <= 99) - year += 1900; - else if (0 <= year && year <= 69) - year += 2000; - - if (year < 1601) - return; // 5. ... the year-value is less than 1601 - - found_year = true; - date.setUTCFullYear(year); - continue; - } - } - } - - if (!(found_time && found_dom && found_month && found_year)) { - return; // 5. ... at least one of the found-day-of-month, found-month, found- - // year, or found-time flags is not set, - } - - return date; -} - -function formatDate(date) { - var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d; - var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h; - var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m; - var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s; - return NUM_TO_DAY[date.getUTCDay()] + ', ' + - d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+ - h+':'+m+':'+s+' GMT'; -} - -// S5.1.2 Canonicalized Host Names -function canonicalDomain(str) { - if (str == null) return null; - str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading . - - // convert to IDN if any non-ASCII characters - if (punycode && /[^\u0001-\u007f]/.test(str)) - str = punycode.toASCII(str); - - return str.toLowerCase(); -} - -// S5.1.3 Domain Matching -function domainMatch(str, domStr, canonicalize) { - if (str == null || domStr == null) return null; - if (canonicalize !== false) { - str = canonicalDomain(str); - domStr = canonicalDomain(domStr); - } - - /* - * "The domain string and the string are identical. (Note that both the - * domain string and the string will have been canonicalized to lower case at - * this point)" - */ - if (str == domStr) return true; - - /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */ - - /* "* The string is a host name (i.e., not an IP address)." */ - if (net.isIP(str)) return false; - - /* "* The domain string is a suffix of the string" */ - var idx = str.indexOf(domStr); - if (idx <= 0) return false; // it's a non-match (-1) or prefix (0) - - // e.g "a.b.c".indexOf("b.c") === 2 - // 5 === 3+2 - if (str.length !== domStr.length + idx) // it's not a suffix - return false; - - /* "* The last character of the string that is not included in the domain - * string is a %x2E (".") character." */ - if (str.substr(idx-1,1) !== '.') return false; - return true; -} - - -// RFC6265 S5.1.4 Paths and Path-Match - -/* - * "The user agent MUST use an algorithm equivalent to the following algorithm - * to compute the default-path of a cookie:" - * - * Assumption: the path (and not query part or absolute uri) is passed in. - */ -function defaultPath(path) { - // "2. If the uri-path is empty or if the first character of the uri-path is not - // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps. - if (!path || path.substr(0,1) !== "/") return "/"; - - // "3. If the uri-path contains no more than one %x2F ("/") character, output - // %x2F ("/") and skip the remaining step." - if (path === "/") return path; - - var rightSlash = path.lastIndexOf("/"); - if (rightSlash === 0) return "/"; - - // "4. Output the characters of the uri-path from the first character up to, - // but not including, the right-most %x2F ("/")." - return path.slice(0, rightSlash); -} - -/* - * "A request-path path-matches a given cookie-path if at least one of the - * following conditions holds:" - */ -function pathMatch(reqPath,cookiePath) { - // "o The cookie-path and the request-path are identical." - if (cookiePath === reqPath) - return true; - - var idx = reqPath.indexOf(cookiePath); - if (idx === 0) { - // "o The cookie-path is a prefix of the request-path, and the last - // character of the cookie-path is %x2F ("/")." - if (cookiePath.substr(-1) === "/") - return true; - - // " o The cookie-path is a prefix of the request-path, and the first - // character of the request-path that is not included in the cookie- path - // is a %x2F ("/") character." - if (reqPath.substr(cookiePath.length,1) === "/") - return true; - } - - return false; -} - -function parse(str, strict) { - str = str.trim(); - - // S4.1.1 Trailing semi-colons are not part of the specification. - // If we are not in strict mode we remove the trailing semi-colons. - var semiColonCheck = TRAILING_SEMICOLON.exec(str); - if (semiColonCheck) { - if (strict) return; - str = str.slice(0, semiColonCheck.index); - } - - // We use a regex to parse the "name-value-pair" part of S5.2 - var firstSemi = str.indexOf(';'); // S5.2 step 1 - var pairRx = strict ? COOKIE_PAIR_STRICT : COOKIE_PAIR; - var result = pairRx.exec(firstSemi === -1 ? str : str.substr(0,firstSemi)); - - // Rx satisfies the "the name string is empty" and "lacks a %x3D ("=")" - // constraints as well as trimming any whitespace. - if (!result) return; - - var c = new Cookie(); - c.key = result[1]; // the regexp should trim() already - c.value = result[3]; // [2] is quotes or empty-string - - if (firstSemi === -1) return c; - - // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string - // (including the %x3B (";") in question)." plus later on in the same section - // "discard the first ";" and trim". - var unparsed = str.slice(firstSemi).replace(/^\s*;\s*/,'').trim(); - - // "If the unparsed-attributes string is empty, skip the rest of these - // steps." - if (unparsed.length === 0) return c; - - /* - * S5.2 says that when looping over the items "[p]rocess the attribute-name - * and attribute-value according to the requirements in the following - * subsections" for every item. Plus, for many of the individual attributes - * in S5.3 it says to use the "attribute-value of the last attribute in the - * cookie-attribute-list". Therefore, in this implementation, we overwrite - * the previous value. - */ - var cookie_avs = unparsed.split(/\s*;\s*/); - while (cookie_avs.length) { - var av = cookie_avs.shift(); - - if (strict && !EXTENSION_AV.test(av)) return; - - var av_sep = av.indexOf('='); - var av_key, av_value; - if (av_sep === -1) { - av_key = av; - av_value = null; - } else { - av_key = av.substr(0,av_sep); - av_value = av.substr(av_sep+1); - } - - av_key = av_key.trim().toLowerCase(); - if (av_value) av_value = av_value.trim(); - - switch(av_key) { - case 'expires': // S5.2.1 - if (!av_value) { if(strict){return}else{break;} } - var exp = parseDate(av_value,strict); - // "If the attribute-value failed to parse as a cookie date, ignore the - // cookie-av." - if (exp == null) { if(strict){return}else{break;} } - c.expires = exp; - // over and underflow not realistically a concern: V8's getTime() seems to - // store something larger than a 32-bit time_t (even with 32-bit node) - break; - - case 'max-age': // S5.2.2 - if (!av_value) { if(strict){return}else{break;} } - // "If the first character of the attribute-value is not a DIGIT or a "-" - // character ...[or]... If the remainder of attribute-value contains a - // non-DIGIT character, ignore the cookie-av." - if (!/^-?[0-9]+$/.test(av_value)) { if(strict){return}else{break;} } - var delta = parseInt(av_value,10); - if (strict && delta <= 0) return; // S4.1.1 - // "If delta-seconds is less than or equal to zero (0), let expiry-time - // be the earliest representable date and time." - c.setMaxAge(delta); - break; - - case 'domain': // S5.2.3 - // "If the attribute-value is empty, the behavior is undefined. However, - // the user agent SHOULD ignore the cookie-av entirely." - if (!av_value) { if(strict){return}else{break;} } - // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E - // (".") character." - var domain = av_value.trim().replace(/^\./,''); - if (!domain) { if(strict){return}else{break;} } // see "is empty" above - // "Convert the cookie-domain to lower case." - c.domain = domain.toLowerCase(); - break; - - case 'path': // S5.2.4 - /* - * "If the attribute-value is empty or if the first character of the - * attribute-value is not %x2F ("/"): - * Let cookie-path be the default-path. - * Otherwise: - * Let cookie-path be the attribute-value." - * - * We'll represent the default-path as null since it depends on the - * context of the parsing. - */ - if (!av_value || av_value.substr(0,1) != "/") { if(strict){return}else{break;} } - c.path = av_value; - break; - - case 'secure': // S5.2.5 - /* - * "If the attribute-name case-insensitively matches the string "Secure", - * the user agent MUST append an attribute to the cookie-attribute-list - * with an attribute-name of Secure and an empty attribute-value." - */ - if (av_value != null) { if(strict){return} } - c.secure = true; - break; - - case 'httponly': // S5.2.6 -- effectively the same as 'secure' - if (av_value != null) { if(strict){return} } - c.httpOnly = true; - break; - - default: - c.extensions = c.extensions || []; - c.extensions.push(av); - break; - } - } - - // ensure a default date for sorting: - c.creation = new Date(); - return c; -} - -function fromJSON(str) { - if (!str) return null; - - var obj; - try { - obj = JSON.parse(str); - } catch (e) { - return null; - } - - var c = new Cookie(); - for (var i=0; i<numCookieProperties; i++) { - var prop = cookieProperties[i]; - if (obj[prop] == null) continue; - if (prop === 'expires' || - prop === 'creation' || - prop === 'lastAccessed') - { - c[prop] = obj[prop] == "Infinity" ? "Infinity" : new Date(obj[prop]); - } else { - c[prop] = obj[prop]; - } - } - - - // ensure a default date for sorting: - c.creation = c.creation || new Date(); - - return c; -} - -/* Section 5.4 part 2: - * "* Cookies with longer paths are listed before cookies with - * shorter paths. - * - * * Among cookies that have equal-length path fields, cookies with - * earlier creation-times are listed before cookies with later - * creation-times." - */ - -function cookieCompare(a,b) { - // descending for length: b CMP a - var deltaLen = (b.path ? b.path.length : 0) - (a.path ? a.path.length : 0); - if (deltaLen !== 0) return deltaLen; - // ascending for time: a CMP b - return (a.creation ? a.creation.getTime() : MAX_TIME) - - (b.creation ? b.creation.getTime() : MAX_TIME); -} - -// Gives the permutation of all possible domainMatch()es of a given domain. The -// array is in shortest-to-longest order. Handy for indexing. -function permuteDomain(domain) { - var pubSuf = pubsuffix.getPublicSuffix(domain); - if (!pubSuf) return null; - if (pubSuf == domain) return [domain]; - - var prefix = domain.slice(0,-(pubSuf.length+1)); // ".example.com" - var parts = prefix.split('.').reverse(); - var cur = pubSuf; - var permutations = [cur]; - while (parts.length) { - cur = parts.shift()+'.'+cur; - permutations.push(cur); - } - return permutations; -} - -// Gives the permutation of all possible pathMatch()es of a given path. The -// array is in longest-to-shortest order. Handy for indexing. -function permutePath(path) { - var origPath = path; - if (path === '/') return ['/']; - if (path.lastIndexOf('/') === path.length-1) - path = path.substr(0,path.length-1); - var permutations = [path]; - while (path.length > 1) { - var lindex = path.lastIndexOf('/'); - if (lindex === 0) break; - path = path.substr(0,lindex); - permutations.push(path); - } - permutations.push('/'); - return permutations; -} - - -function Cookie (opts) { - if (typeof opts !== "object") return; - Object.keys(opts).forEach(function (key) { - if (Cookie.prototype.hasOwnProperty(key)) { - this[key] = opts[key] || Cookie.prototype[key]; - } - }.bind(this)); -} - -Cookie.parse = parse; -Cookie.fromJSON = fromJSON; - -Cookie.prototype.key = ""; -Cookie.prototype.value = ""; - -// the order in which the RFC has them: -Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity -Cookie.prototype.maxAge = null; // takes precedence over expires for TTL -Cookie.prototype.domain = null; -Cookie.prototype.path = null; -Cookie.prototype.secure = false; -Cookie.prototype.httpOnly = false; -Cookie.prototype.extensions = null; - -// set by the CookieJar: -Cookie.prototype.hostOnly = null; // boolean when set -Cookie.prototype.pathIsDefault = null; // boolean when set -Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse -Cookie.prototype.lastAccessed = null; // Date when set - -var cookieProperties = Object.freeze(Object.keys(Cookie.prototype).map(function(p) { - if (p instanceof Function) return; - return p; -})); -var numCookieProperties = cookieProperties.length; - -Cookie.prototype.inspect = function inspect() { - var now = Date.now(); - return 'Cookie="'+this.toString() + - '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') + - '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') + - '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') + - '"'; -}; - -Cookie.prototype.validate = function validate() { - if (!COOKIE_OCTETS.test(this.value)) - return false; - if (this.expires != Infinity && !(this.expires instanceof Date) && !parseDate(this.expires,true)) - return false; - if (this.maxAge != null && this.maxAge <= 0) - return false; // "Max-Age=" non-zero-digit *DIGIT - if (this.path != null && !PATH_VALUE.test(this.path)) - return false; - - var cdomain = this.cdomain(); - if (cdomain) { - if (cdomain.match(/\.$/)) - return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this - var suffix = pubsuffix.getPublicSuffix(cdomain); - if (suffix == null) // it's a public suffix - return false; - } - return true; -}; - -Cookie.prototype.setExpires = function setExpires(exp) { - if (exp instanceof Date) this.expires = exp; - else this.expires = parseDate(exp) || "Infinity"; -}; - -Cookie.prototype.setMaxAge = function setMaxAge(age) { - if (age === Infinity || age === -Infinity) - this.maxAge = age.toString(); // so JSON.stringify() works - else - this.maxAge = age; -}; - -// gives Cookie header format -Cookie.prototype.cookieString = function cookieString() { - var val = this.value; - if (val == null) val = ''; - if (!val.length || COOKIE_OCTETS.test(val)) - return this.key+'='+val; - else - return this.key+'="'+val+'"'; -}; - -// gives Set-Cookie header format -Cookie.prototype.toString = function toString() { - var str = this.cookieString(); - - if (this.expires != Infinity) { - if (this.expires instanceof Date) - str += '; Expires='+formatDate(this.expires); - else - str += '; Expires='+this.expires; - } - - if (this.maxAge != null && this.maxAge != Infinity) - str += '; Max-Age='+this.maxAge; - - if (this.domain && !this.hostOnly) - str += '; Domain='+this.domain; - if (this.path) - str += '; Path='+this.path; - - if (this.secure) str += '; Secure'; - if (this.httpOnly) str += '; HttpOnly'; - if (this.extensions) { - this.extensions.forEach(function(ext) { - str += '; '+ext; - }); - } - - return str; -}; - -// TTL() partially replaces the "expiry-time" parts of S5.3 step 3 (setCookie() -// elsewhere) -// S5.3 says to give the "latest representable date" for which we use Infinity -// For "expired" we use 0 -Cookie.prototype.TTL = function TTL(now) { - /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires - * attribute, the Max-Age attribute has precedence and controls the - * expiration date of the cookie. - * (Concurs with S5.3 step 3) - */ - if (this.maxAge != null) { - return this.maxAge<=0 ? 0 : this.maxAge*1000; - } - - var expires = this.expires; - if (expires != Infinity) { - if (!(expires instanceof Date)) { - expires = parseDate(expires) || Infinity; - } - - if (expires == Infinity) - return Infinity; - - return expires.getTime() - (now || Date.now()); - } - - return Infinity; -}; - -// expiryTime() replaces the "expiry-time" parts of S5.3 step 3 (setCookie() -// elsewhere) -Cookie.prototype.expiryTime = function expiryTime(now) { - if (this.maxAge != null) { - var relativeTo = this.creation || now || new Date(); - var age = (this.maxAge <= 0) ? -Infinity : this.maxAge*1000; - return relativeTo.getTime() + age; - } - - if (this.expires == Infinity) return Infinity; - return this.expires.getTime(); -}; - -// expiryDate() replaces the "expiry-time" parts of S5.3 step 3 (setCookie() -// elsewhere), except it returns a Date -Cookie.prototype.expiryDate = function expiryDate(now) { - var millisec = this.expiryTime(now); - if (millisec == Infinity) return new Date(MAX_TIME); - else if (millisec == -Infinity) return new Date(MIN_TIME); - else return new Date(millisec); -}; - -// This replaces the "persistent-flag" parts of S5.3 step 3 -Cookie.prototype.isPersistent = function isPersistent() { - return (this.maxAge != null || this.expires != Infinity); -}; - -// Mostly S5.1.2 and S5.2.3: -Cookie.prototype.cdomain = -Cookie.prototype.canonicalizedDomain = function canonicalizedDomain() { - if (this.domain == null) return null; - return canonicalDomain(this.domain); -}; - - -var memstore; -function CookieJar(store, rejectPublicSuffixes) { - if (rejectPublicSuffixes != null) this.rejectPublicSuffixes = rejectPublicSuffixes; - if (!store) { - memstore = memstore || require('./memstore'); - store = new memstore.MemoryCookieStore(); - } - this.store = store; -} -CookieJar.prototype.store = null; -CookieJar.prototype.rejectPublicSuffixes = true; - -CookieJar.prototype.setCookie = function setCookie(cookie, url, options, cb) { - var err; - var context = (url instanceof Object) ? url : urlParse(url); - if (options instanceof Function) { - cb = options; - options = {}; - } - - var host = canonicalDomain(context.hostname); - - // S5.3 step 1 - if (!(cookie instanceof Cookie)) - cookie = Cookie.parse(cookie, options.strict === true); - if (!cookie) { - err = new Error("Cookie failed to parse"); - return cb(options.ignoreError ? null : err); - } - - // S5.3 step 2 - var now = options.now || new Date(); // will assign later to save effort in the face of errors - - // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie() - - // S5.3 step 4: NOOP; domain is null by default - - // S5.3 step 5: public suffixes - if (this.rejectPublicSuffixes && cookie.domain) { - var suffix = pubsuffix.getPublicSuffix(cookie.cdomain()); - if (suffix == null) { // e.g. "com" - err = new Error("Cookie has domain set to a public suffix"); - return cb(options.ignoreError ? null : err); - } - } - - // S5.3 step 6: - if (cookie.domain) { - if (!domainMatch(host, cookie.cdomain(), false)) { - err = new Error("Cookie not in this host's domain. Cookie:"+cookie.cdomain()+" Request:"+host); - return cb(options.ignoreError ? null : err); - } - - if (cookie.hostOnly == null) // don't reset if already set - cookie.hostOnly = false; - - } else { - cookie.hostOnly = true; - cookie.domain = host; - } - - // S5.3 step 7: "Otherwise, set the cookie's path to the default-path of the - // request-uri" - if (!cookie.path) { - cookie.path = defaultPath(context.pathname); - cookie.pathIsDefault = true; - } else { - if (cookie.path.length > 1 && cookie.path.substr(-1) == '/') - cookie.path = cookie.path.slice(0,-1); - } - - // S5.3 step 8: NOOP; secure attribute - // S5.3 step 9: NOOP; httpOnly attribute - - // S5.3 step 10 - if (options.http === false && cookie.httpOnly) { - err = new Error("Cookie is HttpOnly and this isn't an HTTP API"); - return cb(options.ignoreError ? null : err); - } - - var store = this.store; - - if (!store.updateCookie) { - store.updateCookie = function stubUpdateCookie(oldCookie, newCookie, cb) { - this.putCookie(newCookie, cb); - }; - } - - store.findCookie(cookie.domain, cookie.path, cookie.key, function(err,oldCookie) { - if (err) return cb(err); - - var next = function(err) { - if (err) return cb(err); - else cb(null, cookie); - }; - - if (oldCookie) { - // S5.3 step 11 - "If the cookie store contains a cookie with the same name, - // domain, and path as the newly created cookie:" - if (options.http === false && oldCookie.httpOnly) { // step 11.2 - err = new Error("old Cookie is HttpOnly and this isn't an HTTP API"); - return cb(options.ignoreError ? null : err); - } - cookie.creation = oldCookie.creation; // step 11.3 - cookie.lastAccessed = now; - // Step 11.4 (delete cookie) is implied by just setting the new one: - store.updateCookie(oldCookie, cookie, next); // step 12 - - } else { - cookie.creation = cookie.lastAccessed = now; - store.putCookie(cookie, next); // step 12 - } - }); -}; - -// RFC6365 S5.4 -CookieJar.prototype.getCookies = function getCookies(url, options, cb) { - var context = (url instanceof Object) ? url : urlParse(url); - if (options instanceof Function) { - cb = options; - options = {}; - } - - var host = canonicalDomain(context.hostname); - var path = context.pathname || '/'; - - var secure = options.secure; - if (secure == null && context.protocol && - (context.protocol == 'https:' || context.protocol == 'wss:')) - { - secure = true; - } - - var http = options.http; - if (http == null) http = true; - - var now = options.now || Date.now(); - var expireCheck = options.expire !== false; - var allPaths = !!options.allPaths; - var store = this.store; - - function matchingCookie(c) { - // "Either: - // The cookie's host-only-flag is true and the canonicalized - // request-host is identical to the cookie's domain. - // Or: - // The cookie's host-only-flag is false and the canonicalized - // request-host domain-matches the cookie's domain." - if (c.hostOnly) { - if (c.domain != host) return false; - } else { - if (!domainMatch(host, c.domain, false)) return false; - } - - // "The request-uri's path path-matches the cookie's path." - if (!allPaths && !pathMatch(path, c.path)) - return false; - - // "If the cookie's secure-only-flag is true, then the request-uri's - // scheme must denote a "secure" protocol" - if (c.secure && !secure) - return false; - - // "If the cookie's http-only-flag is true, then exclude the cookie if the - // cookie-string is being generated for a "non-HTTP" API" - if (c.httpOnly && !http) - return false; - - // deferred from S5.3 - // non-RFC: allow retention of expired cookies by choice - if (expireCheck && c.expiryTime() <= now) { - store.removeCookie(c.domain, c.path, c.key, function(){}); // result ignored - return false; - } - - return true; - } - - store.findCookies(host, allPaths ? null : path, function(err,cookies) { - if (err) return cb(err); - - cookies = cookies.filter(matchingCookie); - - // sorting of S5.4 part 2 - if (options.sort !== false) - cookies = cookies.sort(cookieCompare); - - // S5.4 part 3 - var now = new Date(); - cookies.forEach(function(c) { c.lastAccessed = now }); - // TODO persist lastAccessed - - cb(null,cookies); - }); -}; - -CookieJar.prototype.getCookieString = function(/*..., cb*/) { - var args = Array.prototype.slice.call(arguments,0); - var cb = args.pop(); - var next = function(err,cookies) { - if (err) cb(err); - else cb(null, cookies.map(function(c){return c.cookieString()}).join('; ')); - }; - args.push(next); - this.getCookies.apply(this,args); -}; - -CookieJar.prototype.getSetCookieStrings = function(/*..., cb*/) { - var args = Array.prototype.slice.call(arguments,0); - var cb = args.pop(); - var next = function(err,cookies) { - if (err) cb(err); - else cb(null, cookies.map(function(c){return c.toString()})); - }; - args.push(next); - this.getCookies.apply(this,args); -}; - - - -module.exports = { - CookieJar: CookieJar, - Cookie: Cookie, - parseDate: parseDate, - formatDate: formatDate, - parse: parse, - fromJSON: fromJSON, - domainMatch: domainMatch, - defaultPath: defaultPath, - pathMatch: pathMatch, - getPublicSuffix: pubsuffix.getPublicSuffix, - cookieCompare: cookieCompare, - permuteDomain: permuteDomain, - permutePath: permutePath, - canonicalDomain: canonicalDomain, -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/memstore.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/memstore.js deleted file mode 100644 index 66abb376..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/memstore.js +++ /dev/null @@ -1,102 +0,0 @@ -var tough = require('./cookie'); -var permuteDomain = tough.permuteDomain; -var permutePath = tough.permutePath; -var util = require('util'); - -function MemoryCookieStore() { - this.idx = {}; -} -module.exports.MemoryCookieStore = MemoryCookieStore; -MemoryCookieStore.prototype.idx = null; - -// force a default depth: -MemoryCookieStore.prototype.inspect = function inspect() { - return "{ idx: "+util.inspect(this.idx, false, 2)+' }'; -}; - -MemoryCookieStore.prototype.findCookie = function findCookie(domain, path, key, cb) { - if (!this.idx[domain]) return cb(null,undefined); - if (!this.idx[domain][path]) return cb(null,undefined); - return cb(null,this.idx[domain][path][key]||null); -}; - -MemoryCookieStore.prototype.findCookies = function findCookies(domain, path, cb) { - var results = []; - if (!domain) return cb(null,[]); - - var pathMatcher; - if (!path) { - // null or '/' means "all paths" - pathMatcher = function matchAll(domainIndex) { - for (var curPath in domainIndex) { - var pathIndex = domainIndex[curPath]; - for (var key in pathIndex) { - results.push(pathIndex[key]); - } - } - }; - - } else if (path === '/') { - pathMatcher = function matchSlash(domainIndex) { - var pathIndex = domainIndex['/']; - if (!pathIndex) return; - for (var key in pathIndex) { - results.push(pathIndex[key]); - } - }; - - } else { - var paths = permutePath(path) || [path]; - pathMatcher = function matchRFC(domainIndex) { - paths.forEach(function(curPath) { - var pathIndex = domainIndex[curPath]; - if (!pathIndex) return; - for (var key in pathIndex) { - results.push(pathIndex[key]); - } - }); - }; - } - - var domains = permuteDomain(domain) || [domain]; - var idx = this.idx; - domains.forEach(function(curDomain) { - var domainIndex = idx[curDomain]; - if (!domainIndex) return; - pathMatcher(domainIndex); - }); - - cb(null,results); -}; - -MemoryCookieStore.prototype.putCookie = function putCookie(cookie, cb) { - if (!this.idx[cookie.domain]) this.idx[cookie.domain] = {}; - if (!this.idx[cookie.domain][cookie.path]) this.idx[cookie.domain][cookie.path] = {}; - this.idx[cookie.domain][cookie.path][cookie.key] = cookie; - cb(null); -}; - -MemoryCookieStore.prototype.updateCookie = function updateCookie(oldCookie, newCookie, cb) { - // updateCookie() may avoid updating cookies that are identical. For example, - // lastAccessed may not be important to some stores and an equality - // comparison could exclude that field. - this.putCookie(newCookie,cb); -}; - -MemoryCookieStore.prototype.removeCookie = function removeCookie(domain, path, key, cb) { - if (this.idx[domain] && this.idx[domain][path] && this.idx[domain][path][key]) { - delete this.idx[domain][path][key]; - } - cb(null); -}; - -MemoryCookieStore.prototype.removeCookies = function removeCookies(domain, path, cb) { - if (!this.idx[domain]) { - if (path) { - delete this.idx[domain][path]; - } else { - delete this.idx[domain]; - } - } - return cb(null); -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js deleted file mode 100644 index a7031473..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************** - * AUTOMATICALLY GENERATED by generate-pubsuffix.js * - * DO NOT EDIT! * - ****************************************************/ - -module.exports.getPublicSuffix = function getPublicSuffix(domain) { - /* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - if (!domain) return null; - if (domain.match(/^\./)) return null; - - domain = domain.toLowerCase(); - var parts = domain.split('.').reverse(); - - var suffix = ''; - var suffixLen = 0; - for (var i=0; i<parts.length; i++) { - var part = parts[i]; - var starstr = '*'+suffix; - var partstr = part+suffix; - - if (index[starstr]) { // star rule matches - suffixLen = i+1; - if (index[partstr] === false) { // exception rule matches (NB: false, not undefined) - suffixLen--; - } - } else if (index[partstr]) { // exact match, not exception - suffixLen = i+1; - } - - suffix = '.'+part+suffix; - } - - if (index['*'+suffix]) { // *.domain exists (e.g. *.kyoto.jp for domain='kyoto.jp'); - return null; - } - - if (suffixLen && parts.length > suffixLen) { - return parts.slice(0,suffixLen+1).reverse().join('.'); - } - - return null; -}; - -// The following generated structure is used under the MPL version 1.1 -// See public-suffix.txt for more information - -var index = module.exports.index = Object.freeze( -{"ac":true,"com.ac":true,"edu.ac":true,"gov.ac":true,"net.ac":true,"mil.ac":true,"org.ac":true,"ad":true,"nom.ad":true,"ae":true,"co.ae":true,"net.ae":true,"org.ae":true,"sch.ae":true,"ac.ae":true,"gov.ae":true,"mil.ae":true,"aero":true,"accident-investigation.aero":true,"accident-prevention.aero":true,"aerobatic.aero":true,"aeroclub.aero":true,"aerodrome.aero":true,"agents.aero":true,"aircraft.aero":true,"airline.aero":true,"airport.aero":true,"air-surveillance.aero":true,"airtraffic.aero":true,"air-traffic-control.aero":true,"ambulance.aero":true,"amusement.aero":true,"association.aero":true,"author.aero":true,"ballooning.aero":true,"broker.aero":true,"caa.aero":true,"cargo.aero":true,"catering.aero":true,"certification.aero":true,"championship.aero":true,"charter.aero":true,"civilaviation.aero":true,"club.aero":true,"conference.aero":true,"consultant.aero":true,"consulting.aero":true,"control.aero":true,"council.aero":true,"crew.aero":true,"design.aero":true,"dgca.aero":true,"educator.aero":true,"emergency.aero":true,"engine.aero":true,"engineer.aero":true,"entertainment.aero":true,"equipment.aero":true,"exchange.aero":true,"express.aero":true,"federation.aero":true,"flight.aero":true,"freight.aero":true,"fuel.aero":true,"gliding.aero":true,"government.aero":true,"groundhandling.aero":true,"group.aero":true,"hanggliding.aero":true,"homebuilt.aero":true,"insurance.aero":true,"journal.aero":true,"journalist.aero":true,"leasing.aero":true,"logistics.aero":true,"magazine.aero":true,"maintenance.aero":true,"marketplace.aero":true,"media.aero":true,"microlight.aero":true,"modelling.aero":true,"navigation.aero":true,"parachuting.aero":true,"paragliding.aero":true,"passenger-association.aero":true,"pilot.aero":true,"press.aero":true,"production.aero":true,"recreation.aero":true,"repbody.aero":true,"res.aero":true,"research.aero":true,"rotorcraft.aero":true,"safety.aero":true,"scientist.aero":true,"services.aero":true,"show.aero":true,"skydiving.aero":true,"software.aero":true,"student.aero":true,"taxi.aero":true,"trader.aero":true,"trading.aero":true,"trainer.aero":true,"union.aero":true,"workinggroup.aero":true,"works.aero":true,"af":true,"gov.af":true,"com.af":true,"org.af":true,"net.af":true,"edu.af":true,"ag":true,"com.ag":true,"org.ag":true,"net.ag":true,"co.ag":true,"nom.ag":true,"ai":true,"off.ai":true,"com.ai":true,"net.ai":true,"org.ai":true,"al":true,"com.al":true,"edu.al":true,"gov.al":true,"mil.al":true,"net.al":true,"org.al":true,"am":true,"an":true,"com.an":true,"net.an":true,"org.an":true,"edu.an":true,"ao":true,"ed.ao":true,"gv.ao":true,"og.ao":true,"co.ao":true,"pb.ao":true,"it.ao":true,"aq":true,"*.ar":true,"congresodelalengua3.ar":false,"educ.ar":false,"gobiernoelectronico.ar":false,"mecon.ar":false,"nacion.ar":false,"nic.ar":false,"promocion.ar":false,"retina.ar":false,"uba.ar":false,"e164.arpa":true,"in-addr.arpa":true,"ip6.arpa":true,"iris.arpa":true,"uri.arpa":true,"urn.arpa":true,"as":true,"gov.as":true,"asia":true,"at":true,"ac.at":true,"co.at":true,"gv.at":true,"or.at":true,"com.au":true,"net.au":true,"org.au":true,"edu.au":true,"gov.au":true,"csiro.au":true,"asn.au":true,"id.au":true,"info.au":true,"conf.au":true,"oz.au":true,"act.au":true,"nsw.au":true,"nt.au":true,"qld.au":true,"sa.au":true,"tas.au":true,"vic.au":true,"wa.au":true,"act.edu.au":true,"nsw.edu.au":true,"nt.edu.au":true,"qld.edu.au":true,"sa.edu.au":true,"tas.edu.au":true,"vic.edu.au":true,"wa.edu.au":true,"act.gov.au":true,"nt.gov.au":true,"qld.gov.au":true,"sa.gov.au":true,"tas.gov.au":true,"vic.gov.au":true,"wa.gov.au":true,"aw":true,"com.aw":true,"ax":true,"az":true,"com.az":true,"net.az":true,"int.az":true,"gov.az":true,"org.az":true,"edu.az":true,"info.az":true,"pp.az":true,"mil.az":true,"name.az":true,"pro.az":true,"biz.az":true,"ba":true,"org.ba":true,"net.ba":true,"edu.ba":true,"gov.ba":true,"mil.ba":true,"unsa.ba":true,"unbi.ba":true,"co.ba":true,"com.ba":true,"rs.ba":true,"bb":true,"biz.bb":true,"com.bb":true,"edu.bb":true,"gov.bb":true,"info.bb":true,"net.bb":true,"org.bb":true,"store.bb":true,"*.bd":true,"be":true,"ac.be":true,"bf":true,"gov.bf":true,"bg":true,"a.bg":true,"b.bg":true,"c.bg":true,"d.bg":true,"e.bg":true,"f.bg":true,"g.bg":true,"h.bg":true,"i.bg":true,"j.bg":true,"k.bg":true,"l.bg":true,"m.bg":true,"n.bg":true,"o.bg":true,"p.bg":true,"q.bg":true,"r.bg":true,"s.bg":true,"t.bg":true,"u.bg":true,"v.bg":true,"w.bg":true,"x.bg":true,"y.bg":true,"z.bg":true,"0.bg":true,"1.bg":true,"2.bg":true,"3.bg":true,"4.bg":true,"5.bg":true,"6.bg":true,"7.bg":true,"8.bg":true,"9.bg":true,"bh":true,"com.bh":true,"edu.bh":true,"net.bh":true,"org.bh":true,"gov.bh":true,"bi":true,"co.bi":true,"com.bi":true,"edu.bi":true,"or.bi":true,"org.bi":true,"biz":true,"bj":true,"asso.bj":true,"barreau.bj":true,"gouv.bj":true,"bm":true,"com.bm":true,"edu.bm":true,"gov.bm":true,"net.bm":true,"org.bm":true,"*.bn":true,"bo":true,"com.bo":true,"edu.bo":true,"gov.bo":true,"gob.bo":true,"int.bo":true,"org.bo":true,"net.bo":true,"mil.bo":true,"tv.bo":true,"br":true,"adm.br":true,"adv.br":true,"agr.br":true,"am.br":true,"arq.br":true,"art.br":true,"ato.br":true,"b.br":true,"bio.br":true,"blog.br":true,"bmd.br":true,"can.br":true,"cim.br":true,"cng.br":true,"cnt.br":true,"com.br":true,"coop.br":true,"ecn.br":true,"edu.br":true,"emp.br":true,"eng.br":true,"esp.br":true,"etc.br":true,"eti.br":true,"far.br":true,"flog.br":true,"fm.br":true,"fnd.br":true,"fot.br":true,"fst.br":true,"g12.br":true,"ggf.br":true,"gov.br":true,"imb.br":true,"ind.br":true,"inf.br":true,"jor.br":true,"jus.br":true,"lel.br":true,"mat.br":true,"med.br":true,"mil.br":true,"mus.br":true,"net.br":true,"nom.br":true,"not.br":true,"ntr.br":true,"odo.br":true,"org.br":true,"ppg.br":true,"pro.br":true,"psc.br":true,"psi.br":true,"qsl.br":true,"radio.br":true,"rec.br":true,"slg.br":true,"srv.br":true,"taxi.br":true,"teo.br":true,"tmp.br":true,"trd.br":true,"tur.br":true,"tv.br":true,"vet.br":true,"vlog.br":true,"wiki.br":true,"zlg.br":true,"bs":true,"com.bs":true,"net.bs":true,"org.bs":true,"edu.bs":true,"gov.bs":true,"bt":true,"com.bt":true,"edu.bt":true,"gov.bt":true,"net.bt":true,"org.bt":true,"bw":true,"co.bw":true,"org.bw":true,"by":true,"gov.by":true,"mil.by":true,"com.by":true,"of.by":true,"bz":true,"com.bz":true,"net.bz":true,"org.bz":true,"edu.bz":true,"gov.bz":true,"ca":true,"ab.ca":true,"bc.ca":true,"mb.ca":true,"nb.ca":true,"nf.ca":true,"nl.ca":true,"ns.ca":true,"nt.ca":true,"nu.ca":true,"on.ca":true,"pe.ca":true,"qc.ca":true,"sk.ca":true,"yk.ca":true,"gc.ca":true,"cat":true,"cc":true,"cd":true,"gov.cd":true,"cf":true,"cg":true,"ch":true,"ci":true,"org.ci":true,"or.ci":true,"com.ci":true,"co.ci":true,"edu.ci":true,"ed.ci":true,"ac.ci":true,"net.ci":true,"go.ci":true,"asso.ci":true,"xn--aroport-bya.ci":true,"int.ci":true,"presse.ci":true,"md.ci":true,"gouv.ci":true,"*.ck":true,"www.ck":false,"cl":true,"gov.cl":true,"gob.cl":true,"co.cl":true,"mil.cl":true,"cm":true,"gov.cm":true,"cn":true,"ac.cn":true,"com.cn":true,"edu.cn":true,"gov.cn":true,"net.cn":true,"org.cn":true,"mil.cn":true,"xn--55qx5d.cn":true,"xn--io0a7i.cn":true,"xn--od0alg.cn":true,"ah.cn":true,"bj.cn":true,"cq.cn":true,"fj.cn":true,"gd.cn":true,"gs.cn":true,"gz.cn":true,"gx.cn":true,"ha.cn":true,"hb.cn":true,"he.cn":true,"hi.cn":true,"hl.cn":true,"hn.cn":true,"jl.cn":true,"js.cn":true,"jx.cn":true,"ln.cn":true,"nm.cn":true,"nx.cn":true,"qh.cn":true,"sc.cn":true,"sd.cn":true,"sh.cn":true,"sn.cn":true,"sx.cn":true,"tj.cn":true,"xj.cn":true,"xz.cn":true,"yn.cn":true,"zj.cn":true,"hk.cn":true,"mo.cn":true,"tw.cn":true,"co":true,"arts.co":true,"com.co":true,"edu.co":true,"firm.co":true,"gov.co":true,"info.co":true,"int.co":true,"mil.co":true,"net.co":true,"nom.co":true,"org.co":true,"rec.co":true,"web.co":true,"com":true,"coop":true,"cr":true,"ac.cr":true,"co.cr":true,"ed.cr":true,"fi.cr":true,"go.cr":true,"or.cr":true,"sa.cr":true,"cu":true,"com.cu":true,"edu.cu":true,"org.cu":true,"net.cu":true,"gov.cu":true,"inf.cu":true,"cv":true,"cx":true,"gov.cx":true,"*.cy":true,"cz":true,"de":true,"dj":true,"dk":true,"dm":true,"com.dm":true,"net.dm":true,"org.dm":true,"edu.dm":true,"gov.dm":true,"do":true,"art.do":true,"com.do":true,"edu.do":true,"gob.do":true,"gov.do":true,"mil.do":true,"net.do":true,"org.do":true,"sld.do":true,"web.do":true,"dz":true,"com.dz":true,"org.dz":true,"net.dz":true,"gov.dz":true,"edu.dz":true,"asso.dz":true,"pol.dz":true,"art.dz":true,"ec":true,"com.ec":true,"info.ec":true,"net.ec":true,"fin.ec":true,"k12.ec":true,"med.ec":true,"pro.ec":true,"org.ec":true,"edu.ec":true,"gov.ec":true,"gob.ec":true,"mil.ec":true,"edu":true,"ee":true,"edu.ee":true,"gov.ee":true,"riik.ee":true,"lib.ee":true,"med.ee":true,"com.ee":true,"pri.ee":true,"aip.ee":true,"org.ee":true,"fie.ee":true,"eg":true,"com.eg":true,"edu.eg":true,"eun.eg":true,"gov.eg":true,"mil.eg":true,"name.eg":true,"net.eg":true,"org.eg":true,"sci.eg":true,"*.er":true,"es":true,"com.es":true,"nom.es":true,"org.es":true,"gob.es":true,"edu.es":true,"*.et":true,"eu":true,"fi":true,"aland.fi":true,"*.fj":true,"*.fk":true,"fm":true,"fo":true,"fr":true,"com.fr":true,"asso.fr":true,"nom.fr":true,"prd.fr":true,"presse.fr":true,"tm.fr":true,"aeroport.fr":true,"assedic.fr":true,"avocat.fr":true,"avoues.fr":true,"cci.fr":true,"chambagri.fr":true,"chirurgiens-dentistes.fr":true,"experts-comptables.fr":true,"geometre-expert.fr":true,"gouv.fr":true,"greta.fr":true,"huissier-justice.fr":true,"medecin.fr":true,"notaires.fr":true,"pharmacien.fr":true,"port.fr":true,"veterinaire.fr":true,"ga":true,"gd":true,"ge":true,"com.ge":true,"edu.ge":true,"gov.ge":true,"org.ge":true,"mil.ge":true,"net.ge":true,"pvt.ge":true,"gf":true,"gg":true,"co.gg":true,"org.gg":true,"net.gg":true,"sch.gg":true,"gov.gg":true,"gh":true,"com.gh":true,"edu.gh":true,"gov.gh":true,"org.gh":true,"mil.gh":true,"gi":true,"com.gi":true,"ltd.gi":true,"gov.gi":true,"mod.gi":true,"edu.gi":true,"org.gi":true,"gl":true,"gm":true,"ac.gn":true,"com.gn":true,"edu.gn":true,"gov.gn":true,"org.gn":true,"net.gn":true,"gov":true,"gp":true,"com.gp":true,"net.gp":true,"mobi.gp":true,"edu.gp":true,"org.gp":true,"asso.gp":true,"gq":true,"gr":true,"com.gr":true,"edu.gr":true,"net.gr":true,"org.gr":true,"gov.gr":true,"gs":true,"*.gt":true,"www.gt":false,"*.gu":true,"gw":true,"gy":true,"co.gy":true,"com.gy":true,"net.gy":true,"hk":true,"com.hk":true,"edu.hk":true,"gov.hk":true,"idv.hk":true,"net.hk":true,"org.hk":true,"xn--55qx5d.hk":true,"xn--wcvs22d.hk":true,"xn--lcvr32d.hk":true,"xn--mxtq1m.hk":true,"xn--gmqw5a.hk":true,"xn--ciqpn.hk":true,"xn--gmq050i.hk":true,"xn--zf0avx.hk":true,"xn--io0a7i.hk":true,"xn--mk0axi.hk":true,"xn--od0alg.hk":true,"xn--od0aq3b.hk":true,"xn--tn0ag.hk":true,"xn--uc0atv.hk":true,"xn--uc0ay4a.hk":true,"hm":true,"hn":true,"com.hn":true,"edu.hn":true,"org.hn":true,"net.hn":true,"mil.hn":true,"gob.hn":true,"hr":true,"iz.hr":true,"from.hr":true,"name.hr":true,"com.hr":true,"ht":true,"com.ht":true,"shop.ht":true,"firm.ht":true,"info.ht":true,"adult.ht":true,"net.ht":true,"pro.ht":true,"org.ht":true,"med.ht":true,"art.ht":true,"coop.ht":true,"pol.ht":true,"asso.ht":true,"edu.ht":true,"rel.ht":true,"gouv.ht":true,"perso.ht":true,"hu":true,"co.hu":true,"info.hu":true,"org.hu":true,"priv.hu":true,"sport.hu":true,"tm.hu":true,"2000.hu":true,"agrar.hu":true,"bolt.hu":true,"casino.hu":true,"city.hu":true,"erotica.hu":true,"erotika.hu":true,"film.hu":true,"forum.hu":true,"games.hu":true,"hotel.hu":true,"ingatlan.hu":true,"jogasz.hu":true,"konyvelo.hu":true,"lakas.hu":true,"media.hu":true,"news.hu":true,"reklam.hu":true,"sex.hu":true,"shop.hu":true,"suli.hu":true,"szex.hu":true,"tozsde.hu":true,"utazas.hu":true,"video.hu":true,"id":true,"ac.id":true,"co.id":true,"go.id":true,"mil.id":true,"net.id":true,"or.id":true,"sch.id":true,"web.id":true,"ie":true,"gov.ie":true,"*.il":true,"im":true,"co.im":true,"ltd.co.im":true,"plc.co.im":true,"net.im":true,"gov.im":true,"org.im":true,"nic.im":true,"ac.im":true,"in":true,"co.in":true,"firm.in":true,"net.in":true,"org.in":true,"gen.in":true,"ind.in":true,"nic.in":true,"ac.in":true,"edu.in":true,"res.in":true,"gov.in":true,"mil.in":true,"info":true,"int":true,"eu.int":true,"io":true,"com.io":true,"iq":true,"gov.iq":true,"edu.iq":true,"mil.iq":true,"com.iq":true,"org.iq":true,"net.iq":true,"ir":true,"ac.ir":true,"co.ir":true,"gov.ir":true,"id.ir":true,"net.ir":true,"org.ir":true,"sch.ir":true,"xn--mgba3a4f16a.ir":true,"xn--mgba3a4fra.ir":true,"is":true,"net.is":true,"com.is":true,"edu.is":true,"gov.is":true,"org.is":true,"int.is":true,"it":true,"gov.it":true,"edu.it":true,"agrigento.it":true,"ag.it":true,"alessandria.it":true,"al.it":true,"ancona.it":true,"an.it":true,"aosta.it":true,"aoste.it":true,"ao.it":true,"arezzo.it":true,"ar.it":true,"ascoli-piceno.it":true,"ascolipiceno.it":true,"ap.it":true,"asti.it":true,"at.it":true,"avellino.it":true,"av.it":true,"bari.it":true,"ba.it":true,"andria-barletta-trani.it":true,"andriabarlettatrani.it":true,"trani-barletta-andria.it":true,"tranibarlettaandria.it":true,"barletta-trani-andria.it":true,"barlettatraniandria.it":true,"andria-trani-barletta.it":true,"andriatranibarletta.it":true,"trani-andria-barletta.it":true,"traniandriabarletta.it":true,"bt.it":true,"belluno.it":true,"bl.it":true,"benevento.it":true,"bn.it":true,"bergamo.it":true,"bg.it":true,"biella.it":true,"bi.it":true,"bologna.it":true,"bo.it":true,"bolzano.it":true,"bozen.it":true,"balsan.it":true,"alto-adige.it":true,"altoadige.it":true,"suedtirol.it":true,"bz.it":true,"brescia.it":true,"bs.it":true,"brindisi.it":true,"br.it":true,"cagliari.it":true,"ca.it":true,"caltanissetta.it":true,"cl.it":true,"campobasso.it":true,"cb.it":true,"carboniaiglesias.it":true,"carbonia-iglesias.it":true,"iglesias-carbonia.it":true,"iglesiascarbonia.it":true,"ci.it":true,"caserta.it":true,"ce.it":true,"catania.it":true,"ct.it":true,"catanzaro.it":true,"cz.it":true,"chieti.it":true,"ch.it":true,"como.it":true,"co.it":true,"cosenza.it":true,"cs.it":true,"cremona.it":true,"cr.it":true,"crotone.it":true,"kr.it":true,"cuneo.it":true,"cn.it":true,"dell-ogliastra.it":true,"dellogliastra.it":true,"ogliastra.it":true,"og.it":true,"enna.it":true,"en.it":true,"ferrara.it":true,"fe.it":true,"fermo.it":true,"fm.it":true,"firenze.it":true,"florence.it":true,"fi.it":true,"foggia.it":true,"fg.it":true,"forli-cesena.it":true,"forlicesena.it":true,"cesena-forli.it":true,"cesenaforli.it":true,"fc.it":true,"frosinone.it":true,"fr.it":true,"genova.it":true,"genoa.it":true,"ge.it":true,"gorizia.it":true,"go.it":true,"grosseto.it":true,"gr.it":true,"imperia.it":true,"im.it":true,"isernia.it":true,"is.it":true,"laquila.it":true,"aquila.it":true,"aq.it":true,"la-spezia.it":true,"laspezia.it":true,"sp.it":true,"latina.it":true,"lt.it":true,"lecce.it":true,"le.it":true,"lecco.it":true,"lc.it":true,"livorno.it":true,"li.it":true,"lodi.it":true,"lo.it":true,"lucca.it":true,"lu.it":true,"macerata.it":true,"mc.it":true,"mantova.it":true,"mn.it":true,"massa-carrara.it":true,"massacarrara.it":true,"carrara-massa.it":true,"carraramassa.it":true,"ms.it":true,"matera.it":true,"mt.it":true,"medio-campidano.it":true,"mediocampidano.it":true,"campidano-medio.it":true,"campidanomedio.it":true,"vs.it":true,"messina.it":true,"me.it":true,"milano.it":true,"milan.it":true,"mi.it":true,"modena.it":true,"mo.it":true,"monza.it":true,"monza-brianza.it":true,"monzabrianza.it":true,"monzaebrianza.it":true,"monzaedellabrianza.it":true,"monza-e-della-brianza.it":true,"mb.it":true,"napoli.it":true,"naples.it":true,"na.it":true,"novara.it":true,"no.it":true,"nuoro.it":true,"nu.it":true,"oristano.it":true,"or.it":true,"padova.it":true,"padua.it":true,"pd.it":true,"palermo.it":true,"pa.it":true,"parma.it":true,"pr.it":true,"pavia.it":true,"pv.it":true,"perugia.it":true,"pg.it":true,"pescara.it":true,"pe.it":true,"pesaro-urbino.it":true,"pesarourbino.it":true,"urbino-pesaro.it":true,"urbinopesaro.it":true,"pu.it":true,"piacenza.it":true,"pc.it":true,"pisa.it":true,"pi.it":true,"pistoia.it":true,"pt.it":true,"pordenone.it":true,"pn.it":true,"potenza.it":true,"pz.it":true,"prato.it":true,"po.it":true,"ragusa.it":true,"rg.it":true,"ravenna.it":true,"ra.it":true,"reggio-calabria.it":true,"reggiocalabria.it":true,"rc.it":true,"reggio-emilia.it":true,"reggioemilia.it":true,"re.it":true,"rieti.it":true,"ri.it":true,"rimini.it":true,"rn.it":true,"roma.it":true,"rome.it":true,"rm.it":true,"rovigo.it":true,"ro.it":true,"salerno.it":true,"sa.it":true,"sassari.it":true,"ss.it":true,"savona.it":true,"sv.it":true,"siena.it":true,"si.it":true,"siracusa.it":true,"sr.it":true,"sondrio.it":true,"so.it":true,"taranto.it":true,"ta.it":true,"tempio-olbia.it":true,"tempioolbia.it":true,"olbia-tempio.it":true,"olbiatempio.it":true,"ot.it":true,"teramo.it":true,"te.it":true,"terni.it":true,"tr.it":true,"torino.it":true,"turin.it":true,"to.it":true,"trapani.it":true,"tp.it":true,"trento.it":true,"trentino.it":true,"tn.it":true,"treviso.it":true,"tv.it":true,"trieste.it":true,"ts.it":true,"udine.it":true,"ud.it":true,"varese.it":true,"va.it":true,"venezia.it":true,"venice.it":true,"ve.it":true,"verbania.it":true,"vb.it":true,"vercelli.it":true,"vc.it":true,"verona.it":true,"vr.it":true,"vibo-valentia.it":true,"vibovalentia.it":true,"vv.it":true,"vicenza.it":true,"vi.it":true,"viterbo.it":true,"vt.it":true,"je":true,"co.je":true,"org.je":true,"net.je":true,"sch.je":true,"gov.je":true,"*.jm":true,"jo":true,"com.jo":true,"org.jo":true,"net.jo":true,"edu.jo":true,"sch.jo":true,"gov.jo":true,"mil.jo":true,"name.jo":true,"jobs":true,"jp":true,"ac.jp":true,"ad.jp":true,"co.jp":true,"ed.jp":true,"go.jp":true,"gr.jp":true,"lg.jp":true,"ne.jp":true,"or.jp":true,"*.aichi.jp":true,"*.akita.jp":true,"*.aomori.jp":true,"*.chiba.jp":true,"*.ehime.jp":true,"*.fukui.jp":true,"*.fukuoka.jp":true,"*.fukushima.jp":true,"*.gifu.jp":true,"*.gunma.jp":true,"*.hiroshima.jp":true,"*.hokkaido.jp":true,"*.hyogo.jp":true,"*.ibaraki.jp":true,"*.ishikawa.jp":true,"*.iwate.jp":true,"*.kagawa.jp":true,"*.kagoshima.jp":true,"*.kanagawa.jp":true,"*.kawasaki.jp":true,"*.kitakyushu.jp":true,"*.kobe.jp":true,"*.kochi.jp":true,"*.kumamoto.jp":true,"*.kyoto.jp":true,"*.mie.jp":true,"*.miyagi.jp":true,"*.miyazaki.jp":true,"*.nagano.jp":true,"*.nagasaki.jp":true,"*.nagoya.jp":true,"*.nara.jp":true,"*.niigata.jp":true,"*.oita.jp":true,"*.okayama.jp":true,"*.okinawa.jp":true,"*.osaka.jp":true,"*.saga.jp":true,"*.saitama.jp":true,"*.sapporo.jp":true,"*.sendai.jp":true,"*.shiga.jp":true,"*.shimane.jp":true,"*.shizuoka.jp":true,"*.tochigi.jp":true,"*.tokushima.jp":true,"*.tokyo.jp":true,"*.tottori.jp":true,"*.toyama.jp":true,"*.wakayama.jp":true,"*.yamagata.jp":true,"*.yamaguchi.jp":true,"*.yamanashi.jp":true,"*.yokohama.jp":true,"metro.tokyo.jp":false,"pref.aichi.jp":false,"pref.akita.jp":false,"pref.aomori.jp":false,"pref.chiba.jp":false,"pref.ehime.jp":false,"pref.fukui.jp":false,"pref.fukuoka.jp":false,"pref.fukushima.jp":false,"pref.gifu.jp":false,"pref.gunma.jp":false,"pref.hiroshima.jp":false,"pref.hokkaido.jp":false,"pref.hyogo.jp":false,"pref.ibaraki.jp":false,"pref.ishikawa.jp":false,"pref.iwate.jp":false,"pref.kagawa.jp":false,"pref.kagoshima.jp":false,"pref.kanagawa.jp":false,"pref.kochi.jp":false,"pref.kumamoto.jp":false,"pref.kyoto.jp":false,"pref.mie.jp":false,"pref.miyagi.jp":false,"pref.miyazaki.jp":false,"pref.nagano.jp":false,"pref.nagasaki.jp":false,"pref.nara.jp":false,"pref.niigata.jp":false,"pref.oita.jp":false,"pref.okayama.jp":false,"pref.okinawa.jp":false,"pref.osaka.jp":false,"pref.saga.jp":false,"pref.saitama.jp":false,"pref.shiga.jp":false,"pref.shimane.jp":false,"pref.shizuoka.jp":false,"pref.tochigi.jp":false,"pref.tokushima.jp":false,"pref.tottori.jp":false,"pref.toyama.jp":false,"pref.wakayama.jp":false,"pref.yamagata.jp":false,"pref.yamaguchi.jp":false,"pref.yamanashi.jp":false,"city.chiba.jp":false,"city.fukuoka.jp":false,"city.hiroshima.jp":false,"city.kawasaki.jp":false,"city.kitakyushu.jp":false,"city.kobe.jp":false,"city.kyoto.jp":false,"city.nagoya.jp":false,"city.niigata.jp":false,"city.okayama.jp":false,"city.osaka.jp":false,"city.saitama.jp":false,"city.sapporo.jp":false,"city.sendai.jp":false,"city.shizuoka.jp":false,"city.yokohama.jp":false,"*.ke":true,"kg":true,"org.kg":true,"net.kg":true,"com.kg":true,"edu.kg":true,"gov.kg":true,"mil.kg":true,"*.kh":true,"ki":true,"edu.ki":true,"biz.ki":true,"net.ki":true,"org.ki":true,"gov.ki":true,"info.ki":true,"com.ki":true,"km":true,"org.km":true,"nom.km":true,"gov.km":true,"prd.km":true,"tm.km":true,"edu.km":true,"mil.km":true,"ass.km":true,"com.km":true,"coop.km":true,"asso.km":true,"presse.km":true,"medecin.km":true,"notaires.km":true,"pharmaciens.km":true,"veterinaire.km":true,"gouv.km":true,"kn":true,"net.kn":true,"org.kn":true,"edu.kn":true,"gov.kn":true,"com.kp":true,"edu.kp":true,"gov.kp":true,"org.kp":true,"rep.kp":true,"tra.kp":true,"kr":true,"ac.kr":true,"co.kr":true,"es.kr":true,"go.kr":true,"hs.kr":true,"kg.kr":true,"mil.kr":true,"ms.kr":true,"ne.kr":true,"or.kr":true,"pe.kr":true,"re.kr":true,"sc.kr":true,"busan.kr":true,"chungbuk.kr":true,"chungnam.kr":true,"daegu.kr":true,"daejeon.kr":true,"gangwon.kr":true,"gwangju.kr":true,"gyeongbuk.kr":true,"gyeonggi.kr":true,"gyeongnam.kr":true,"incheon.kr":true,"jeju.kr":true,"jeonbuk.kr":true,"jeonnam.kr":true,"seoul.kr":true,"ulsan.kr":true,"*.kw":true,"ky":true,"edu.ky":true,"gov.ky":true,"com.ky":true,"org.ky":true,"net.ky":true,"kz":true,"org.kz":true,"edu.kz":true,"net.kz":true,"gov.kz":true,"mil.kz":true,"com.kz":true,"la":true,"int.la":true,"net.la":true,"info.la":true,"edu.la":true,"gov.la":true,"per.la":true,"com.la":true,"org.la":true,"com.lb":true,"edu.lb":true,"gov.lb":true,"net.lb":true,"org.lb":true,"lc":true,"com.lc":true,"net.lc":true,"co.lc":true,"org.lc":true,"edu.lc":true,"gov.lc":true,"li":true,"lk":true,"gov.lk":true,"sch.lk":true,"net.lk":true,"int.lk":true,"com.lk":true,"org.lk":true,"edu.lk":true,"ngo.lk":true,"soc.lk":true,"web.lk":true,"ltd.lk":true,"assn.lk":true,"grp.lk":true,"hotel.lk":true,"com.lr":true,"edu.lr":true,"gov.lr":true,"org.lr":true,"net.lr":true,"ls":true,"co.ls":true,"org.ls":true,"lt":true,"gov.lt":true,"lu":true,"lv":true,"com.lv":true,"edu.lv":true,"gov.lv":true,"org.lv":true,"mil.lv":true,"id.lv":true,"net.lv":true,"asn.lv":true,"conf.lv":true,"ly":true,"com.ly":true,"net.ly":true,"gov.ly":true,"plc.ly":true,"edu.ly":true,"sch.ly":true,"med.ly":true,"org.ly":true,"id.ly":true,"ma":true,"co.ma":true,"net.ma":true,"gov.ma":true,"org.ma":true,"ac.ma":true,"press.ma":true,"mc":true,"tm.mc":true,"asso.mc":true,"md":true,"me":true,"co.me":true,"net.me":true,"org.me":true,"edu.me":true,"ac.me":true,"gov.me":true,"its.me":true,"priv.me":true,"mg":true,"org.mg":true,"nom.mg":true,"gov.mg":true,"prd.mg":true,"tm.mg":true,"edu.mg":true,"mil.mg":true,"com.mg":true,"mh":true,"mil":true,"mk":true,"com.mk":true,"org.mk":true,"net.mk":true,"edu.mk":true,"gov.mk":true,"inf.mk":true,"name.mk":true,"ml":true,"com.ml":true,"edu.ml":true,"gouv.ml":true,"gov.ml":true,"net.ml":true,"org.ml":true,"presse.ml":true,"*.mm":true,"mn":true,"gov.mn":true,"edu.mn":true,"org.mn":true,"mo":true,"com.mo":true,"net.mo":true,"org.mo":true,"edu.mo":true,"gov.mo":true,"mobi":true,"mp":true,"mq":true,"mr":true,"gov.mr":true,"ms":true,"*.mt":true,"mu":true,"com.mu":true,"net.mu":true,"org.mu":true,"gov.mu":true,"ac.mu":true,"co.mu":true,"or.mu":true,"museum":true,"academy.museum":true,"agriculture.museum":true,"air.museum":true,"airguard.museum":true,"alabama.museum":true,"alaska.museum":true,"amber.museum":true,"ambulance.museum":true,"american.museum":true,"americana.museum":true,"americanantiques.museum":true,"americanart.museum":true,"amsterdam.museum":true,"and.museum":true,"annefrank.museum":true,"anthro.museum":true,"anthropology.museum":true,"antiques.museum":true,"aquarium.museum":true,"arboretum.museum":true,"archaeological.museum":true,"archaeology.museum":true,"architecture.museum":true,"art.museum":true,"artanddesign.museum":true,"artcenter.museum":true,"artdeco.museum":true,"arteducation.museum":true,"artgallery.museum":true,"arts.museum":true,"artsandcrafts.museum":true,"asmatart.museum":true,"assassination.museum":true,"assisi.museum":true,"association.museum":true,"astronomy.museum":true,"atlanta.museum":true,"austin.museum":true,"australia.museum":true,"automotive.museum":true,"aviation.museum":true,"axis.museum":true,"badajoz.museum":true,"baghdad.museum":true,"bahn.museum":true,"bale.museum":true,"baltimore.museum":true,"barcelona.museum":true,"baseball.museum":true,"basel.museum":true,"baths.museum":true,"bauern.museum":true,"beauxarts.museum":true,"beeldengeluid.museum":true,"bellevue.museum":true,"bergbau.museum":true,"berkeley.museum":true,"berlin.museum":true,"bern.museum":true,"bible.museum":true,"bilbao.museum":true,"bill.museum":true,"birdart.museum":true,"birthplace.museum":true,"bonn.museum":true,"boston.museum":true,"botanical.museum":true,"botanicalgarden.museum":true,"botanicgarden.museum":true,"botany.museum":true,"brandywinevalley.museum":true,"brasil.museum":true,"bristol.museum":true,"british.museum":true,"britishcolumbia.museum":true,"broadcast.museum":true,"brunel.museum":true,"brussel.museum":true,"brussels.museum":true,"bruxelles.museum":true,"building.museum":true,"burghof.museum":true,"bus.museum":true,"bushey.museum":true,"cadaques.museum":true,"california.museum":true,"cambridge.museum":true,"can.museum":true,"canada.museum":true,"capebreton.museum":true,"carrier.museum":true,"cartoonart.museum":true,"casadelamoneda.museum":true,"castle.museum":true,"castres.museum":true,"celtic.museum":true,"center.museum":true,"chattanooga.museum":true,"cheltenham.museum":true,"chesapeakebay.museum":true,"chicago.museum":true,"children.museum":true,"childrens.museum":true,"childrensgarden.museum":true,"chiropractic.museum":true,"chocolate.museum":true,"christiansburg.museum":true,"cincinnati.museum":true,"cinema.museum":true,"circus.museum":true,"civilisation.museum":true,"civilization.museum":true,"civilwar.museum":true,"clinton.museum":true,"clock.museum":true,"coal.museum":true,"coastaldefence.museum":true,"cody.museum":true,"coldwar.museum":true,"collection.museum":true,"colonialwilliamsburg.museum":true,"coloradoplateau.museum":true,"columbia.museum":true,"columbus.museum":true,"communication.museum":true,"communications.museum":true,"community.museum":true,"computer.museum":true,"computerhistory.museum":true,"xn--comunicaes-v6a2o.museum":true,"contemporary.museum":true,"contemporaryart.museum":true,"convent.museum":true,"copenhagen.museum":true,"corporation.museum":true,"xn--correios-e-telecomunicaes-ghc29a.museum":true,"corvette.museum":true,"costume.museum":true,"countryestate.museum":true,"county.museum":true,"crafts.museum":true,"cranbrook.museum":true,"creation.museum":true,"cultural.museum":true,"culturalcenter.museum":true,"culture.museum":true,"cyber.museum":true,"cymru.museum":true,"dali.museum":true,"dallas.museum":true,"database.museum":true,"ddr.museum":true,"decorativearts.museum":true,"delaware.museum":true,"delmenhorst.museum":true,"denmark.museum":true,"depot.museum":true,"design.museum":true,"detroit.museum":true,"dinosaur.museum":true,"discovery.museum":true,"dolls.museum":true,"donostia.museum":true,"durham.museum":true,"eastafrica.museum":true,"eastcoast.museum":true,"education.museum":true,"educational.museum":true,"egyptian.museum":true,"eisenbahn.museum":true,"elburg.museum":true,"elvendrell.museum":true,"embroidery.museum":true,"encyclopedic.museum":true,"england.museum":true,"entomology.museum":true,"environment.museum":true,"environmentalconservation.museum":true,"epilepsy.museum":true,"essex.museum":true,"estate.museum":true,"ethnology.museum":true,"exeter.museum":true,"exhibition.museum":true,"family.museum":true,"farm.museum":true,"farmequipment.museum":true,"farmers.museum":true,"farmstead.museum":true,"field.museum":true,"figueres.museum":true,"filatelia.museum":true,"film.museum":true,"fineart.museum":true,"finearts.museum":true,"finland.museum":true,"flanders.museum":true,"florida.museum":true,"force.museum":true,"fortmissoula.museum":true,"fortworth.museum":true,"foundation.museum":true,"francaise.museum":true,"frankfurt.museum":true,"franziskaner.museum":true,"freemasonry.museum":true,"freiburg.museum":true,"fribourg.museum":true,"frog.museum":true,"fundacio.museum":true,"furniture.museum":true,"gallery.museum":true,"garden.museum":true,"gateway.museum":true,"geelvinck.museum":true,"gemological.museum":true,"geology.museum":true,"georgia.museum":true,"giessen.museum":true,"glas.museum":true,"glass.museum":true,"gorge.museum":true,"grandrapids.museum":true,"graz.museum":true,"guernsey.museum":true,"halloffame.museum":true,"hamburg.museum":true,"handson.museum":true,"harvestcelebration.museum":true,"hawaii.museum":true,"health.museum":true,"heimatunduhren.museum":true,"hellas.museum":true,"helsinki.museum":true,"hembygdsforbund.museum":true,"heritage.museum":true,"histoire.museum":true,"historical.museum":true,"historicalsociety.museum":true,"historichouses.museum":true,"historisch.museum":true,"historisches.museum":true,"history.museum":true,"historyofscience.museum":true,"horology.museum":true,"house.museum":true,"humanities.museum":true,"illustration.museum":true,"imageandsound.museum":true,"indian.museum":true,"indiana.museum":true,"indianapolis.museum":true,"indianmarket.museum":true,"intelligence.museum":true,"interactive.museum":true,"iraq.museum":true,"iron.museum":true,"isleofman.museum":true,"jamison.museum":true,"jefferson.museum":true,"jerusalem.museum":true,"jewelry.museum":true,"jewish.museum":true,"jewishart.museum":true,"jfk.museum":true,"journalism.museum":true,"judaica.museum":true,"judygarland.museum":true,"juedisches.museum":true,"juif.museum":true,"karate.museum":true,"karikatur.museum":true,"kids.museum":true,"koebenhavn.museum":true,"koeln.museum":true,"kunst.museum":true,"kunstsammlung.museum":true,"kunstunddesign.museum":true,"labor.museum":true,"labour.museum":true,"lajolla.museum":true,"lancashire.museum":true,"landes.museum":true,"lans.museum":true,"xn--lns-qla.museum":true,"larsson.museum":true,"lewismiller.museum":true,"lincoln.museum":true,"linz.museum":true,"living.museum":true,"livinghistory.museum":true,"localhistory.museum":true,"london.museum":true,"losangeles.museum":true,"louvre.museum":true,"loyalist.museum":true,"lucerne.museum":true,"luxembourg.museum":true,"luzern.museum":true,"mad.museum":true,"madrid.museum":true,"mallorca.museum":true,"manchester.museum":true,"mansion.museum":true,"mansions.museum":true,"manx.museum":true,"marburg.museum":true,"maritime.museum":true,"maritimo.museum":true,"maryland.museum":true,"marylhurst.museum":true,"media.museum":true,"medical.museum":true,"medizinhistorisches.museum":true,"meeres.museum":true,"memorial.museum":true,"mesaverde.museum":true,"michigan.museum":true,"midatlantic.museum":true,"military.museum":true,"mill.museum":true,"miners.museum":true,"mining.museum":true,"minnesota.museum":true,"missile.museum":true,"missoula.museum":true,"modern.museum":true,"moma.museum":true,"money.museum":true,"monmouth.museum":true,"monticello.museum":true,"montreal.museum":true,"moscow.museum":true,"motorcycle.museum":true,"muenchen.museum":true,"muenster.museum":true,"mulhouse.museum":true,"muncie.museum":true,"museet.museum":true,"museumcenter.museum":true,"museumvereniging.museum":true,"music.museum":true,"national.museum":true,"nationalfirearms.museum":true,"nationalheritage.museum":true,"nativeamerican.museum":true,"naturalhistory.museum":true,"naturalhistorymuseum.museum":true,"naturalsciences.museum":true,"nature.museum":true,"naturhistorisches.museum":true,"natuurwetenschappen.museum":true,"naumburg.museum":true,"naval.museum":true,"nebraska.museum":true,"neues.museum":true,"newhampshire.museum":true,"newjersey.museum":true,"newmexico.museum":true,"newport.museum":true,"newspaper.museum":true,"newyork.museum":true,"niepce.museum":true,"norfolk.museum":true,"north.museum":true,"nrw.museum":true,"nuernberg.museum":true,"nuremberg.museum":true,"nyc.museum":true,"nyny.museum":true,"oceanographic.museum":true,"oceanographique.museum":true,"omaha.museum":true,"online.museum":true,"ontario.museum":true,"openair.museum":true,"oregon.museum":true,"oregontrail.museum":true,"otago.museum":true,"oxford.museum":true,"pacific.museum":true,"paderborn.museum":true,"palace.museum":true,"paleo.museum":true,"palmsprings.museum":true,"panama.museum":true,"paris.museum":true,"pasadena.museum":true,"pharmacy.museum":true,"philadelphia.museum":true,"philadelphiaarea.museum":true,"philately.museum":true,"phoenix.museum":true,"photography.museum":true,"pilots.museum":true,"pittsburgh.museum":true,"planetarium.museum":true,"plantation.museum":true,"plants.museum":true,"plaza.museum":true,"portal.museum":true,"portland.museum":true,"portlligat.museum":true,"posts-and-telecommunications.museum":true,"preservation.museum":true,"presidio.museum":true,"press.museum":true,"project.museum":true,"public.museum":true,"pubol.museum":true,"quebec.museum":true,"railroad.museum":true,"railway.museum":true,"research.museum":true,"resistance.museum":true,"riodejaneiro.museum":true,"rochester.museum":true,"rockart.museum":true,"roma.museum":true,"russia.museum":true,"saintlouis.museum":true,"salem.museum":true,"salvadordali.museum":true,"salzburg.museum":true,"sandiego.museum":true,"sanfrancisco.museum":true,"santabarbara.museum":true,"santacruz.museum":true,"santafe.museum":true,"saskatchewan.museum":true,"satx.museum":true,"savannahga.museum":true,"schlesisches.museum":true,"schoenbrunn.museum":true,"schokoladen.museum":true,"school.museum":true,"schweiz.museum":true,"science.museum":true,"scienceandhistory.museum":true,"scienceandindustry.museum":true,"sciencecenter.museum":true,"sciencecenters.museum":true,"science-fiction.museum":true,"sciencehistory.museum":true,"sciences.museum":true,"sciencesnaturelles.museum":true,"scotland.museum":true,"seaport.museum":true,"settlement.museum":true,"settlers.museum":true,"shell.museum":true,"sherbrooke.museum":true,"sibenik.museum":true,"silk.museum":true,"ski.museum":true,"skole.museum":true,"society.museum":true,"sologne.museum":true,"soundandvision.museum":true,"southcarolina.museum":true,"southwest.museum":true,"space.museum":true,"spy.museum":true,"square.museum":true,"stadt.museum":true,"stalbans.museum":true,"starnberg.museum":true,"state.museum":true,"stateofdelaware.museum":true,"station.museum":true,"steam.museum":true,"steiermark.museum":true,"stjohn.museum":true,"stockholm.museum":true,"stpetersburg.museum":true,"stuttgart.museum":true,"suisse.museum":true,"surgeonshall.museum":true,"surrey.museum":true,"svizzera.museum":true,"sweden.museum":true,"sydney.museum":true,"tank.museum":true,"tcm.museum":true,"technology.museum":true,"telekommunikation.museum":true,"television.museum":true,"texas.museum":true,"textile.museum":true,"theater.museum":true,"time.museum":true,"timekeeping.museum":true,"topology.museum":true,"torino.museum":true,"touch.museum":true,"town.museum":true,"transport.museum":true,"tree.museum":true,"trolley.museum":true,"trust.museum":true,"trustee.museum":true,"uhren.museum":true,"ulm.museum":true,"undersea.museum":true,"university.museum":true,"usa.museum":true,"usantiques.museum":true,"usarts.museum":true,"uscountryestate.museum":true,"usculture.museum":true,"usdecorativearts.museum":true,"usgarden.museum":true,"ushistory.museum":true,"ushuaia.museum":true,"uslivinghistory.museum":true,"utah.museum":true,"uvic.museum":true,"valley.museum":true,"vantaa.museum":true,"versailles.museum":true,"viking.museum":true,"village.museum":true,"virginia.museum":true,"virtual.museum":true,"virtuel.museum":true,"vlaanderen.museum":true,"volkenkunde.museum":true,"wales.museum":true,"wallonie.museum":true,"war.museum":true,"washingtondc.museum":true,"watchandclock.museum":true,"watch-and-clock.museum":true,"western.museum":true,"westfalen.museum":true,"whaling.museum":true,"wildlife.museum":true,"williamsburg.museum":true,"windmill.museum":true,"workshop.museum":true,"york.museum":true,"yorkshire.museum":true,"yosemite.museum":true,"youth.museum":true,"zoological.museum":true,"zoology.museum":true,"xn--9dbhblg6di.museum":true,"xn--h1aegh.museum":true,"mv":true,"aero.mv":true,"biz.mv":true,"com.mv":true,"coop.mv":true,"edu.mv":true,"gov.mv":true,"info.mv":true,"int.mv":true,"mil.mv":true,"museum.mv":true,"name.mv":true,"net.mv":true,"org.mv":true,"pro.mv":true,"mw":true,"ac.mw":true,"biz.mw":true,"co.mw":true,"com.mw":true,"coop.mw":true,"edu.mw":true,"gov.mw":true,"int.mw":true,"museum.mw":true,"net.mw":true,"org.mw":true,"mx":true,"com.mx":true,"org.mx":true,"gob.mx":true,"edu.mx":true,"net.mx":true,"my":true,"com.my":true,"net.my":true,"org.my":true,"gov.my":true,"edu.my":true,"mil.my":true,"name.my":true,"*.mz":true,"na":true,"info.na":true,"pro.na":true,"name.na":true,"school.na":true,"or.na":true,"dr.na":true,"us.na":true,"mx.na":true,"ca.na":true,"in.na":true,"cc.na":true,"tv.na":true,"ws.na":true,"mobi.na":true,"co.na":true,"com.na":true,"org.na":true,"name":true,"nc":true,"asso.nc":true,"ne":true,"net":true,"nf":true,"com.nf":true,"net.nf":true,"per.nf":true,"rec.nf":true,"web.nf":true,"arts.nf":true,"firm.nf":true,"info.nf":true,"other.nf":true,"store.nf":true,"ac.ng":true,"com.ng":true,"edu.ng":true,"gov.ng":true,"net.ng":true,"org.ng":true,"*.ni":true,"nl":true,"bv.nl":true,"no":true,"fhs.no":true,"vgs.no":true,"fylkesbibl.no":true,"folkebibl.no":true,"museum.no":true,"idrett.no":true,"priv.no":true,"mil.no":true,"stat.no":true,"dep.no":true,"kommune.no":true,"herad.no":true,"aa.no":true,"ah.no":true,"bu.no":true,"fm.no":true,"hl.no":true,"hm.no":true,"jan-mayen.no":true,"mr.no":true,"nl.no":true,"nt.no":true,"of.no":true,"ol.no":true,"oslo.no":true,"rl.no":true,"sf.no":true,"st.no":true,"svalbard.no":true,"tm.no":true,"tr.no":true,"va.no":true,"vf.no":true,"gs.aa.no":true,"gs.ah.no":true,"gs.bu.no":true,"gs.fm.no":true,"gs.hl.no":true,"gs.hm.no":true,"gs.jan-mayen.no":true,"gs.mr.no":true,"gs.nl.no":true,"gs.nt.no":true,"gs.of.no":true,"gs.ol.no":true,"gs.oslo.no":true,"gs.rl.no":true,"gs.sf.no":true,"gs.st.no":true,"gs.svalbard.no":true,"gs.tm.no":true,"gs.tr.no":true,"gs.va.no":true,"gs.vf.no":true,"akrehamn.no":true,"xn--krehamn-dxa.no":true,"algard.no":true,"xn--lgrd-poac.no":true,"arna.no":true,"brumunddal.no":true,"bryne.no":true,"bronnoysund.no":true,"xn--brnnysund-m8ac.no":true,"drobak.no":true,"xn--drbak-wua.no":true,"egersund.no":true,"fetsund.no":true,"floro.no":true,"xn--flor-jra.no":true,"fredrikstad.no":true,"hokksund.no":true,"honefoss.no":true,"xn--hnefoss-q1a.no":true,"jessheim.no":true,"jorpeland.no":true,"xn--jrpeland-54a.no":true,"kirkenes.no":true,"kopervik.no":true,"krokstadelva.no":true,"langevag.no":true,"xn--langevg-jxa.no":true,"leirvik.no":true,"mjondalen.no":true,"xn--mjndalen-64a.no":true,"mo-i-rana.no":true,"mosjoen.no":true,"xn--mosjen-eya.no":true,"nesoddtangen.no":true,"orkanger.no":true,"osoyro.no":true,"xn--osyro-wua.no":true,"raholt.no":true,"xn--rholt-mra.no":true,"sandnessjoen.no":true,"xn--sandnessjen-ogb.no":true,"skedsmokorset.no":true,"slattum.no":true,"spjelkavik.no":true,"stathelle.no":true,"stavern.no":true,"stjordalshalsen.no":true,"xn--stjrdalshalsen-sqb.no":true,"tananger.no":true,"tranby.no":true,"vossevangen.no":true,"afjord.no":true,"xn--fjord-lra.no":true,"agdenes.no":true,"al.no":true,"xn--l-1fa.no":true,"alesund.no":true,"xn--lesund-hua.no":true,"alstahaug.no":true,"alta.no":true,"xn--lt-liac.no":true,"alaheadju.no":true,"xn--laheadju-7ya.no":true,"alvdal.no":true,"amli.no":true,"xn--mli-tla.no":true,"amot.no":true,"xn--mot-tla.no":true,"andebu.no":true,"andoy.no":true,"xn--andy-ira.no":true,"andasuolo.no":true,"ardal.no":true,"xn--rdal-poa.no":true,"aremark.no":true,"arendal.no":true,"xn--s-1fa.no":true,"aseral.no":true,"xn--seral-lra.no":true,"asker.no":true,"askim.no":true,"askvoll.no":true,"askoy.no":true,"xn--asky-ira.no":true,"asnes.no":true,"xn--snes-poa.no":true,"audnedaln.no":true,"aukra.no":true,"aure.no":true,"aurland.no":true,"aurskog-holand.no":true,"xn--aurskog-hland-jnb.no":true,"austevoll.no":true,"austrheim.no":true,"averoy.no":true,"xn--avery-yua.no":true,"balestrand.no":true,"ballangen.no":true,"balat.no":true,"xn--blt-elab.no":true,"balsfjord.no":true,"bahccavuotna.no":true,"xn--bhccavuotna-k7a.no":true,"bamble.no":true,"bardu.no":true,"beardu.no":true,"beiarn.no":true,"bajddar.no":true,"xn--bjddar-pta.no":true,"baidar.no":true,"xn--bidr-5nac.no":true,"berg.no":true,"bergen.no":true,"berlevag.no":true,"xn--berlevg-jxa.no":true,"bearalvahki.no":true,"xn--bearalvhki-y4a.no":true,"bindal.no":true,"birkenes.no":true,"bjarkoy.no":true,"xn--bjarky-fya.no":true,"bjerkreim.no":true,"bjugn.no":true,"bodo.no":true,"xn--bod-2na.no":true,"badaddja.no":true,"xn--bdddj-mrabd.no":true,"budejju.no":true,"bokn.no":true,"bremanger.no":true,"bronnoy.no":true,"xn--brnny-wuac.no":true,"bygland.no":true,"bykle.no":true,"barum.no":true,"xn--brum-voa.no":true,"bo.telemark.no":true,"xn--b-5ga.telemark.no":true,"bo.nordland.no":true,"xn--b-5ga.nordland.no":true,"bievat.no":true,"xn--bievt-0qa.no":true,"bomlo.no":true,"xn--bmlo-gra.no":true,"batsfjord.no":true,"xn--btsfjord-9za.no":true,"bahcavuotna.no":true,"xn--bhcavuotna-s4a.no":true,"dovre.no":true,"drammen.no":true,"drangedal.no":true,"dyroy.no":true,"xn--dyry-ira.no":true,"donna.no":true,"xn--dnna-gra.no":true,"eid.no":true,"eidfjord.no":true,"eidsberg.no":true,"eidskog.no":true,"eidsvoll.no":true,"eigersund.no":true,"elverum.no":true,"enebakk.no":true,"engerdal.no":true,"etne.no":true,"etnedal.no":true,"evenes.no":true,"evenassi.no":true,"xn--eveni-0qa01ga.no":true,"evje-og-hornnes.no":true,"farsund.no":true,"fauske.no":true,"fuossko.no":true,"fuoisku.no":true,"fedje.no":true,"fet.no":true,"finnoy.no":true,"xn--finny-yua.no":true,"fitjar.no":true,"fjaler.no":true,"fjell.no":true,"flakstad.no":true,"flatanger.no":true,"flekkefjord.no":true,"flesberg.no":true,"flora.no":true,"fla.no":true,"xn--fl-zia.no":true,"folldal.no":true,"forsand.no":true,"fosnes.no":true,"frei.no":true,"frogn.no":true,"froland.no":true,"frosta.no":true,"frana.no":true,"xn--frna-woa.no":true,"froya.no":true,"xn--frya-hra.no":true,"fusa.no":true,"fyresdal.no":true,"forde.no":true,"xn--frde-gra.no":true,"gamvik.no":true,"gangaviika.no":true,"xn--ggaviika-8ya47h.no":true,"gaular.no":true,"gausdal.no":true,"gildeskal.no":true,"xn--gildeskl-g0a.no":true,"giske.no":true,"gjemnes.no":true,"gjerdrum.no":true,"gjerstad.no":true,"gjesdal.no":true,"gjovik.no":true,"xn--gjvik-wua.no":true,"gloppen.no":true,"gol.no":true,"gran.no":true,"grane.no":true,"granvin.no":true,"gratangen.no":true,"grimstad.no":true,"grong.no":true,"kraanghke.no":true,"xn--kranghke-b0a.no":true,"grue.no":true,"gulen.no":true,"hadsel.no":true,"halden.no":true,"halsa.no":true,"hamar.no":true,"hamaroy.no":true,"habmer.no":true,"xn--hbmer-xqa.no":true,"hapmir.no":true,"xn--hpmir-xqa.no":true,"hammerfest.no":true,"hammarfeasta.no":true,"xn--hmmrfeasta-s4ac.no":true,"haram.no":true,"hareid.no":true,"harstad.no":true,"hasvik.no":true,"aknoluokta.no":true,"xn--koluokta-7ya57h.no":true,"hattfjelldal.no":true,"aarborte.no":true,"haugesund.no":true,"hemne.no":true,"hemnes.no":true,"hemsedal.no":true,"heroy.more-og-romsdal.no":true,"xn--hery-ira.xn--mre-og-romsdal-qqb.no":true,"heroy.nordland.no":true,"xn--hery-ira.nordland.no":true,"hitra.no":true,"hjartdal.no":true,"hjelmeland.no":true,"hobol.no":true,"xn--hobl-ira.no":true,"hof.no":true,"hol.no":true,"hole.no":true,"holmestrand.no":true,"holtalen.no":true,"xn--holtlen-hxa.no":true,"hornindal.no":true,"horten.no":true,"hurdal.no":true,"hurum.no":true,"hvaler.no":true,"hyllestad.no":true,"hagebostad.no":true,"xn--hgebostad-g3a.no":true,"hoyanger.no":true,"xn--hyanger-q1a.no":true,"hoylandet.no":true,"xn--hylandet-54a.no":true,"ha.no":true,"xn--h-2fa.no":true,"ibestad.no":true,"inderoy.no":true,"xn--indery-fya.no":true,"iveland.no":true,"jevnaker.no":true,"jondal.no":true,"jolster.no":true,"xn--jlster-bya.no":true,"karasjok.no":true,"karasjohka.no":true,"xn--krjohka-hwab49j.no":true,"karlsoy.no":true,"galsa.no":true,"xn--gls-elac.no":true,"karmoy.no":true,"xn--karmy-yua.no":true,"kautokeino.no":true,"guovdageaidnu.no":true,"klepp.no":true,"klabu.no":true,"xn--klbu-woa.no":true,"kongsberg.no":true,"kongsvinger.no":true,"kragero.no":true,"xn--krager-gya.no":true,"kristiansand.no":true,"kristiansund.no":true,"krodsherad.no":true,"xn--krdsherad-m8a.no":true,"kvalsund.no":true,"rahkkeravju.no":true,"xn--rhkkervju-01af.no":true,"kvam.no":true,"kvinesdal.no":true,"kvinnherad.no":true,"kviteseid.no":true,"kvitsoy.no":true,"xn--kvitsy-fya.no":true,"kvafjord.no":true,"xn--kvfjord-nxa.no":true,"giehtavuoatna.no":true,"kvanangen.no":true,"xn--kvnangen-k0a.no":true,"navuotna.no":true,"xn--nvuotna-hwa.no":true,"kafjord.no":true,"xn--kfjord-iua.no":true,"gaivuotna.no":true,"xn--givuotna-8ya.no":true,"larvik.no":true,"lavangen.no":true,"lavagis.no":true,"loabat.no":true,"xn--loabt-0qa.no":true,"lebesby.no":true,"davvesiida.no":true,"leikanger.no":true,"leirfjord.no":true,"leka.no":true,"leksvik.no":true,"lenvik.no":true,"leangaviika.no":true,"xn--leagaviika-52b.no":true,"lesja.no":true,"levanger.no":true,"lier.no":true,"lierne.no":true,"lillehammer.no":true,"lillesand.no":true,"lindesnes.no":true,"lindas.no":true,"xn--linds-pra.no":true,"lom.no":true,"loppa.no":true,"lahppi.no":true,"xn--lhppi-xqa.no":true,"lund.no":true,"lunner.no":true,"luroy.no":true,"xn--lury-ira.no":true,"luster.no":true,"lyngdal.no":true,"lyngen.no":true,"ivgu.no":true,"lardal.no":true,"lerdal.no":true,"xn--lrdal-sra.no":true,"lodingen.no":true,"xn--ldingen-q1a.no":true,"lorenskog.no":true,"xn--lrenskog-54a.no":true,"loten.no":true,"xn--lten-gra.no":true,"malvik.no":true,"masoy.no":true,"xn--msy-ula0h.no":true,"muosat.no":true,"xn--muost-0qa.no":true,"mandal.no":true,"marker.no":true,"marnardal.no":true,"masfjorden.no":true,"meland.no":true,"meldal.no":true,"melhus.no":true,"meloy.no":true,"xn--mely-ira.no":true,"meraker.no":true,"xn--merker-kua.no":true,"moareke.no":true,"xn--moreke-jua.no":true,"midsund.no":true,"midtre-gauldal.no":true,"modalen.no":true,"modum.no":true,"molde.no":true,"moskenes.no":true,"moss.no":true,"mosvik.no":true,"malselv.no":true,"xn--mlselv-iua.no":true,"malatvuopmi.no":true,"xn--mlatvuopmi-s4a.no":true,"namdalseid.no":true,"aejrie.no":true,"namsos.no":true,"namsskogan.no":true,"naamesjevuemie.no":true,"xn--nmesjevuemie-tcba.no":true,"laakesvuemie.no":true,"nannestad.no":true,"narvik.no":true,"narviika.no":true,"naustdal.no":true,"nedre-eiker.no":true,"nes.akershus.no":true,"nes.buskerud.no":true,"nesna.no":true,"nesodden.no":true,"nesseby.no":true,"unjarga.no":true,"xn--unjrga-rta.no":true,"nesset.no":true,"nissedal.no":true,"nittedal.no":true,"nord-aurdal.no":true,"nord-fron.no":true,"nord-odal.no":true,"norddal.no":true,"nordkapp.no":true,"davvenjarga.no":true,"xn--davvenjrga-y4a.no":true,"nordre-land.no":true,"nordreisa.no":true,"raisa.no":true,"xn--risa-5na.no":true,"nore-og-uvdal.no":true,"notodden.no":true,"naroy.no":true,"xn--nry-yla5g.no":true,"notteroy.no":true,"xn--nttery-byae.no":true,"odda.no":true,"oksnes.no":true,"xn--ksnes-uua.no":true,"oppdal.no":true,"oppegard.no":true,"xn--oppegrd-ixa.no":true,"orkdal.no":true,"orland.no":true,"xn--rland-uua.no":true,"orskog.no":true,"xn--rskog-uua.no":true,"orsta.no":true,"xn--rsta-fra.no":true,"os.hedmark.no":true,"os.hordaland.no":true,"osen.no":true,"osteroy.no":true,"xn--ostery-fya.no":true,"ostre-toten.no":true,"xn--stre-toten-zcb.no":true,"overhalla.no":true,"ovre-eiker.no":true,"xn--vre-eiker-k8a.no":true,"oyer.no":true,"xn--yer-zna.no":true,"oygarden.no":true,"xn--ygarden-p1a.no":true,"oystre-slidre.no":true,"xn--ystre-slidre-ujb.no":true,"porsanger.no":true,"porsangu.no":true,"xn--porsgu-sta26f.no":true,"porsgrunn.no":true,"radoy.no":true,"xn--rady-ira.no":true,"rakkestad.no":true,"rana.no":true,"ruovat.no":true,"randaberg.no":true,"rauma.no":true,"rendalen.no":true,"rennebu.no":true,"rennesoy.no":true,"xn--rennesy-v1a.no":true,"rindal.no":true,"ringebu.no":true,"ringerike.no":true,"ringsaker.no":true,"rissa.no":true,"risor.no":true,"xn--risr-ira.no":true,"roan.no":true,"rollag.no":true,"rygge.no":true,"ralingen.no":true,"xn--rlingen-mxa.no":true,"rodoy.no":true,"xn--rdy-0nab.no":true,"romskog.no":true,"xn--rmskog-bya.no":true,"roros.no":true,"xn--rros-gra.no":true,"rost.no":true,"xn--rst-0na.no":true,"royken.no":true,"xn--ryken-vua.no":true,"royrvik.no":true,"xn--ryrvik-bya.no":true,"rade.no":true,"xn--rde-ula.no":true,"salangen.no":true,"siellak.no":true,"saltdal.no":true,"salat.no":true,"xn--slt-elab.no":true,"xn--slat-5na.no":true,"samnanger.no":true,"sande.more-og-romsdal.no":true,"sande.xn--mre-og-romsdal-qqb.no":true,"sande.vestfold.no":true,"sandefjord.no":true,"sandnes.no":true,"sandoy.no":true,"xn--sandy-yua.no":true,"sarpsborg.no":true,"sauda.no":true,"sauherad.no":true,"sel.no":true,"selbu.no":true,"selje.no":true,"seljord.no":true,"sigdal.no":true,"siljan.no":true,"sirdal.no":true,"skaun.no":true,"skedsmo.no":true,"ski.no":true,"skien.no":true,"skiptvet.no":true,"skjervoy.no":true,"xn--skjervy-v1a.no":true,"skierva.no":true,"xn--skierv-uta.no":true,"skjak.no":true,"xn--skjk-soa.no":true,"skodje.no":true,"skanland.no":true,"xn--sknland-fxa.no":true,"skanit.no":true,"xn--sknit-yqa.no":true,"smola.no":true,"xn--smla-hra.no":true,"snillfjord.no":true,"snasa.no":true,"xn--snsa-roa.no":true,"snoasa.no":true,"snaase.no":true,"xn--snase-nra.no":true,"sogndal.no":true,"sokndal.no":true,"sola.no":true,"solund.no":true,"songdalen.no":true,"sortland.no":true,"spydeberg.no":true,"stange.no":true,"stavanger.no":true,"steigen.no":true,"steinkjer.no":true,"stjordal.no":true,"xn--stjrdal-s1a.no":true,"stokke.no":true,"stor-elvdal.no":true,"stord.no":true,"stordal.no":true,"storfjord.no":true,"omasvuotna.no":true,"strand.no":true,"stranda.no":true,"stryn.no":true,"sula.no":true,"suldal.no":true,"sund.no":true,"sunndal.no":true,"surnadal.no":true,"sveio.no":true,"svelvik.no":true,"sykkylven.no":true,"sogne.no":true,"xn--sgne-gra.no":true,"somna.no":true,"xn--smna-gra.no":true,"sondre-land.no":true,"xn--sndre-land-0cb.no":true,"sor-aurdal.no":true,"xn--sr-aurdal-l8a.no":true,"sor-fron.no":true,"xn--sr-fron-q1a.no":true,"sor-odal.no":true,"xn--sr-odal-q1a.no":true,"sor-varanger.no":true,"xn--sr-varanger-ggb.no":true,"matta-varjjat.no":true,"xn--mtta-vrjjat-k7af.no":true,"sorfold.no":true,"xn--srfold-bya.no":true,"sorreisa.no":true,"xn--srreisa-q1a.no":true,"sorum.no":true,"xn--srum-gra.no":true,"tana.no":true,"deatnu.no":true,"time.no":true,"tingvoll.no":true,"tinn.no":true,"tjeldsund.no":true,"dielddanuorri.no":true,"tjome.no":true,"xn--tjme-hra.no":true,"tokke.no":true,"tolga.no":true,"torsken.no":true,"tranoy.no":true,"xn--trany-yua.no":true,"tromso.no":true,"xn--troms-zua.no":true,"tromsa.no":true,"romsa.no":true,"trondheim.no":true,"troandin.no":true,"trysil.no":true,"trana.no":true,"xn--trna-woa.no":true,"trogstad.no":true,"xn--trgstad-r1a.no":true,"tvedestrand.no":true,"tydal.no":true,"tynset.no":true,"tysfjord.no":true,"divtasvuodna.no":true,"divttasvuotna.no":true,"tysnes.no":true,"tysvar.no":true,"xn--tysvr-vra.no":true,"tonsberg.no":true,"xn--tnsberg-q1a.no":true,"ullensaker.no":true,"ullensvang.no":true,"ulvik.no":true,"utsira.no":true,"vadso.no":true,"xn--vads-jra.no":true,"cahcesuolo.no":true,"xn--hcesuolo-7ya35b.no":true,"vaksdal.no":true,"valle.no":true,"vang.no":true,"vanylven.no":true,"vardo.no":true,"xn--vard-jra.no":true,"varggat.no":true,"xn--vrggt-xqad.no":true,"vefsn.no":true,"vaapste.no":true,"vega.no":true,"vegarshei.no":true,"xn--vegrshei-c0a.no":true,"vennesla.no":true,"verdal.no":true,"verran.no":true,"vestby.no":true,"vestnes.no":true,"vestre-slidre.no":true,"vestre-toten.no":true,"vestvagoy.no":true,"xn--vestvgy-ixa6o.no":true,"vevelstad.no":true,"vik.no":true,"vikna.no":true,"vindafjord.no":true,"volda.no":true,"voss.no":true,"varoy.no":true,"xn--vry-yla5g.no":true,"vagan.no":true,"xn--vgan-qoa.no":true,"voagat.no":true,"vagsoy.no":true,"xn--vgsy-qoa0j.no":true,"vaga.no":true,"xn--vg-yiab.no":true,"valer.ostfold.no":true,"xn--vler-qoa.xn--stfold-9xa.no":true,"valer.hedmark.no":true,"xn--vler-qoa.hedmark.no":true,"*.np":true,"nr":true,"biz.nr":true,"info.nr":true,"gov.nr":true,"edu.nr":true,"org.nr":true,"net.nr":true,"com.nr":true,"nu":true,"*.nz":true,"*.om":true,"mediaphone.om":false,"nawrastelecom.om":false,"nawras.om":false,"omanmobile.om":false,"omanpost.om":false,"omantel.om":false,"rakpetroleum.om":false,"siemens.om":false,"songfest.om":false,"statecouncil.om":false,"org":true,"pa":true,"ac.pa":true,"gob.pa":true,"com.pa":true,"org.pa":true,"sld.pa":true,"edu.pa":true,"net.pa":true,"ing.pa":true,"abo.pa":true,"med.pa":true,"nom.pa":true,"pe":true,"edu.pe":true,"gob.pe":true,"nom.pe":true,"mil.pe":true,"org.pe":true,"com.pe":true,"net.pe":true,"pf":true,"com.pf":true,"org.pf":true,"edu.pf":true,"*.pg":true,"ph":true,"com.ph":true,"net.ph":true,"org.ph":true,"gov.ph":true,"edu.ph":true,"ngo.ph":true,"mil.ph":true,"i.ph":true,"pk":true,"com.pk":true,"net.pk":true,"edu.pk":true,"org.pk":true,"fam.pk":true,"biz.pk":true,"web.pk":true,"gov.pk":true,"gob.pk":true,"gok.pk":true,"gon.pk":true,"gop.pk":true,"gos.pk":true,"info.pk":true,"pl":true,"aid.pl":true,"agro.pl":true,"atm.pl":true,"auto.pl":true,"biz.pl":true,"com.pl":true,"edu.pl":true,"gmina.pl":true,"gsm.pl":true,"info.pl":true,"mail.pl":true,"miasta.pl":true,"media.pl":true,"mil.pl":true,"net.pl":true,"nieruchomosci.pl":true,"nom.pl":true,"org.pl":true,"pc.pl":true,"powiat.pl":true,"priv.pl":true,"realestate.pl":true,"rel.pl":true,"sex.pl":true,"shop.pl":true,"sklep.pl":true,"sos.pl":true,"szkola.pl":true,"targi.pl":true,"tm.pl":true,"tourism.pl":true,"travel.pl":true,"turystyka.pl":true,"6bone.pl":true,"art.pl":true,"mbone.pl":true,"gov.pl":true,"uw.gov.pl":true,"um.gov.pl":true,"ug.gov.pl":true,"upow.gov.pl":true,"starostwo.gov.pl":true,"so.gov.pl":true,"sr.gov.pl":true,"po.gov.pl":true,"pa.gov.pl":true,"ngo.pl":true,"irc.pl":true,"usenet.pl":true,"augustow.pl":true,"babia-gora.pl":true,"bedzin.pl":true,"beskidy.pl":true,"bialowieza.pl":true,"bialystok.pl":true,"bielawa.pl":true,"bieszczady.pl":true,"boleslawiec.pl":true,"bydgoszcz.pl":true,"bytom.pl":true,"cieszyn.pl":true,"czeladz.pl":true,"czest.pl":true,"dlugoleka.pl":true,"elblag.pl":true,"elk.pl":true,"glogow.pl":true,"gniezno.pl":true,"gorlice.pl":true,"grajewo.pl":true,"ilawa.pl":true,"jaworzno.pl":true,"jelenia-gora.pl":true,"jgora.pl":true,"kalisz.pl":true,"kazimierz-dolny.pl":true,"karpacz.pl":true,"kartuzy.pl":true,"kaszuby.pl":true,"katowice.pl":true,"kepno.pl":true,"ketrzyn.pl":true,"klodzko.pl":true,"kobierzyce.pl":true,"kolobrzeg.pl":true,"konin.pl":true,"konskowola.pl":true,"kutno.pl":true,"lapy.pl":true,"lebork.pl":true,"legnica.pl":true,"lezajsk.pl":true,"limanowa.pl":true,"lomza.pl":true,"lowicz.pl":true,"lubin.pl":true,"lukow.pl":true,"malbork.pl":true,"malopolska.pl":true,"mazowsze.pl":true,"mazury.pl":true,"mielec.pl":true,"mielno.pl":true,"mragowo.pl":true,"naklo.pl":true,"nowaruda.pl":true,"nysa.pl":true,"olawa.pl":true,"olecko.pl":true,"olkusz.pl":true,"olsztyn.pl":true,"opoczno.pl":true,"opole.pl":true,"ostroda.pl":true,"ostroleka.pl":true,"ostrowiec.pl":true,"ostrowwlkp.pl":true,"pila.pl":true,"pisz.pl":true,"podhale.pl":true,"podlasie.pl":true,"polkowice.pl":true,"pomorze.pl":true,"pomorskie.pl":true,"prochowice.pl":true,"pruszkow.pl":true,"przeworsk.pl":true,"pulawy.pl":true,"radom.pl":true,"rawa-maz.pl":true,"rybnik.pl":true,"rzeszow.pl":true,"sanok.pl":true,"sejny.pl":true,"siedlce.pl":true,"slask.pl":true,"slupsk.pl":true,"sosnowiec.pl":true,"stalowa-wola.pl":true,"skoczow.pl":true,"starachowice.pl":true,"stargard.pl":true,"suwalki.pl":true,"swidnica.pl":true,"swiebodzin.pl":true,"swinoujscie.pl":true,"szczecin.pl":true,"szczytno.pl":true,"tarnobrzeg.pl":true,"tgory.pl":true,"turek.pl":true,"tychy.pl":true,"ustka.pl":true,"walbrzych.pl":true,"warmia.pl":true,"warszawa.pl":true,"waw.pl":true,"wegrow.pl":true,"wielun.pl":true,"wlocl.pl":true,"wloclawek.pl":true,"wodzislaw.pl":true,"wolomin.pl":true,"wroclaw.pl":true,"zachpomor.pl":true,"zagan.pl":true,"zarow.pl":true,"zgora.pl":true,"zgorzelec.pl":true,"gda.pl":true,"gdansk.pl":true,"gdynia.pl":true,"med.pl":true,"sopot.pl":true,"gliwice.pl":true,"krakow.pl":true,"poznan.pl":true,"wroc.pl":true,"zakopane.pl":true,"pm":true,"pn":true,"gov.pn":true,"co.pn":true,"org.pn":true,"edu.pn":true,"net.pn":true,"pr":true,"com.pr":true,"net.pr":true,"org.pr":true,"gov.pr":true,"edu.pr":true,"isla.pr":true,"pro.pr":true,"biz.pr":true,"info.pr":true,"name.pr":true,"est.pr":true,"prof.pr":true,"ac.pr":true,"pro":true,"aca.pro":true,"bar.pro":true,"cpa.pro":true,"jur.pro":true,"law.pro":true,"med.pro":true,"eng.pro":true,"ps":true,"edu.ps":true,"gov.ps":true,"sec.ps":true,"plo.ps":true,"com.ps":true,"org.ps":true,"net.ps":true,"pt":true,"net.pt":true,"gov.pt":true,"org.pt":true,"edu.pt":true,"int.pt":true,"publ.pt":true,"com.pt":true,"nome.pt":true,"pw":true,"co.pw":true,"ne.pw":true,"or.pw":true,"ed.pw":true,"go.pw":true,"belau.pw":true,"*.py":true,"qa":true,"com.qa":true,"edu.qa":true,"gov.qa":true,"mil.qa":true,"name.qa":true,"net.qa":true,"org.qa":true,"sch.qa":true,"re":true,"com.re":true,"asso.re":true,"nom.re":true,"ro":true,"com.ro":true,"org.ro":true,"tm.ro":true,"nt.ro":true,"nom.ro":true,"info.ro":true,"rec.ro":true,"arts.ro":true,"firm.ro":true,"store.ro":true,"www.ro":true,"rs":true,"co.rs":true,"org.rs":true,"edu.rs":true,"ac.rs":true,"gov.rs":true,"in.rs":true,"ru":true,"ac.ru":true,"com.ru":true,"edu.ru":true,"int.ru":true,"net.ru":true,"org.ru":true,"pp.ru":true,"adygeya.ru":true,"altai.ru":true,"amur.ru":true,"arkhangelsk.ru":true,"astrakhan.ru":true,"bashkiria.ru":true,"belgorod.ru":true,"bir.ru":true,"bryansk.ru":true,"buryatia.ru":true,"cbg.ru":true,"chel.ru":true,"chelyabinsk.ru":true,"chita.ru":true,"chukotka.ru":true,"chuvashia.ru":true,"dagestan.ru":true,"dudinka.ru":true,"e-burg.ru":true,"grozny.ru":true,"irkutsk.ru":true,"ivanovo.ru":true,"izhevsk.ru":true,"jar.ru":true,"joshkar-ola.ru":true,"kalmykia.ru":true,"kaluga.ru":true,"kamchatka.ru":true,"karelia.ru":true,"kazan.ru":true,"kchr.ru":true,"kemerovo.ru":true,"khabarovsk.ru":true,"khakassia.ru":true,"khv.ru":true,"kirov.ru":true,"koenig.ru":true,"komi.ru":true,"kostroma.ru":true,"krasnoyarsk.ru":true,"kuban.ru":true,"kurgan.ru":true,"kursk.ru":true,"lipetsk.ru":true,"magadan.ru":true,"mari.ru":true,"mari-el.ru":true,"marine.ru":true,"mordovia.ru":true,"mosreg.ru":true,"msk.ru":true,"murmansk.ru":true,"nalchik.ru":true,"nnov.ru":true,"nov.ru":true,"novosibirsk.ru":true,"nsk.ru":true,"omsk.ru":true,"orenburg.ru":true,"oryol.ru":true,"palana.ru":true,"penza.ru":true,"perm.ru":true,"pskov.ru":true,"ptz.ru":true,"rnd.ru":true,"ryazan.ru":true,"sakhalin.ru":true,"samara.ru":true,"saratov.ru":true,"simbirsk.ru":true,"smolensk.ru":true,"spb.ru":true,"stavropol.ru":true,"stv.ru":true,"surgut.ru":true,"tambov.ru":true,"tatarstan.ru":true,"tom.ru":true,"tomsk.ru":true,"tsaritsyn.ru":true,"tsk.ru":true,"tula.ru":true,"tuva.ru":true,"tver.ru":true,"tyumen.ru":true,"udm.ru":true,"udmurtia.ru":true,"ulan-ude.ru":true,"vladikavkaz.ru":true,"vladimir.ru":true,"vladivostok.ru":true,"volgograd.ru":true,"vologda.ru":true,"voronezh.ru":true,"vrn.ru":true,"vyatka.ru":true,"yakutia.ru":true,"yamal.ru":true,"yaroslavl.ru":true,"yekaterinburg.ru":true,"yuzhno-sakhalinsk.ru":true,"amursk.ru":true,"baikal.ru":true,"cmw.ru":true,"fareast.ru":true,"jamal.ru":true,"kms.ru":true,"k-uralsk.ru":true,"kustanai.ru":true,"kuzbass.ru":true,"magnitka.ru":true,"mytis.ru":true,"nakhodka.ru":true,"nkz.ru":true,"norilsk.ru":true,"oskol.ru":true,"pyatigorsk.ru":true,"rubtsovsk.ru":true,"snz.ru":true,"syzran.ru":true,"vdonsk.ru":true,"zgrad.ru":true,"gov.ru":true,"mil.ru":true,"test.ru":true,"rw":true,"gov.rw":true,"net.rw":true,"edu.rw":true,"ac.rw":true,"com.rw":true,"co.rw":true,"int.rw":true,"mil.rw":true,"gouv.rw":true,"sa":true,"com.sa":true,"net.sa":true,"org.sa":true,"gov.sa":true,"med.sa":true,"pub.sa":true,"edu.sa":true,"sch.sa":true,"sb":true,"com.sb":true,"edu.sb":true,"gov.sb":true,"net.sb":true,"org.sb":true,"sc":true,"com.sc":true,"gov.sc":true,"net.sc":true,"org.sc":true,"edu.sc":true,"sd":true,"com.sd":true,"net.sd":true,"org.sd":true,"edu.sd":true,"med.sd":true,"gov.sd":true,"info.sd":true,"se":true,"a.se":true,"ac.se":true,"b.se":true,"bd.se":true,"brand.se":true,"c.se":true,"d.se":true,"e.se":true,"f.se":true,"fh.se":true,"fhsk.se":true,"fhv.se":true,"g.se":true,"h.se":true,"i.se":true,"k.se":true,"komforb.se":true,"kommunalforbund.se":true,"komvux.se":true,"l.se":true,"lanbib.se":true,"m.se":true,"n.se":true,"naturbruksgymn.se":true,"o.se":true,"org.se":true,"p.se":true,"parti.se":true,"pp.se":true,"press.se":true,"r.se":true,"s.se":true,"sshn.se":true,"t.se":true,"tm.se":true,"u.se":true,"w.se":true,"x.se":true,"y.se":true,"z.se":true,"sg":true,"com.sg":true,"net.sg":true,"org.sg":true,"gov.sg":true,"edu.sg":true,"per.sg":true,"sh":true,"si":true,"sk":true,"sl":true,"com.sl":true,"net.sl":true,"edu.sl":true,"gov.sl":true,"org.sl":true,"sm":true,"sn":true,"art.sn":true,"com.sn":true,"edu.sn":true,"gouv.sn":true,"org.sn":true,"perso.sn":true,"univ.sn":true,"so":true,"com.so":true,"net.so":true,"org.so":true,"sr":true,"st":true,"co.st":true,"com.st":true,"consulado.st":true,"edu.st":true,"embaixada.st":true,"gov.st":true,"mil.st":true,"net.st":true,"org.st":true,"principe.st":true,"saotome.st":true,"store.st":true,"su":true,"*.sv":true,"sy":true,"edu.sy":true,"gov.sy":true,"net.sy":true,"mil.sy":true,"com.sy":true,"org.sy":true,"sz":true,"co.sz":true,"ac.sz":true,"org.sz":true,"tc":true,"td":true,"tel":true,"tf":true,"tg":true,"th":true,"ac.th":true,"co.th":true,"go.th":true,"in.th":true,"mi.th":true,"net.th":true,"or.th":true,"tj":true,"ac.tj":true,"biz.tj":true,"co.tj":true,"com.tj":true,"edu.tj":true,"go.tj":true,"gov.tj":true,"int.tj":true,"mil.tj":true,"name.tj":true,"net.tj":true,"nic.tj":true,"org.tj":true,"test.tj":true,"web.tj":true,"tk":true,"tl":true,"gov.tl":true,"tm":true,"tn":true,"com.tn":true,"ens.tn":true,"fin.tn":true,"gov.tn":true,"ind.tn":true,"intl.tn":true,"nat.tn":true,"net.tn":true,"org.tn":true,"info.tn":true,"perso.tn":true,"tourism.tn":true,"edunet.tn":true,"rnrt.tn":true,"rns.tn":true,"rnu.tn":true,"mincom.tn":true,"agrinet.tn":true,"defense.tn":true,"turen.tn":true,"to":true,"com.to":true,"gov.to":true,"net.to":true,"org.to":true,"edu.to":true,"mil.to":true,"*.tr":true,"nic.tr":false,"gov.nc.tr":true,"travel":true,"tt":true,"co.tt":true,"com.tt":true,"org.tt":true,"net.tt":true,"biz.tt":true,"info.tt":true,"pro.tt":true,"int.tt":true,"coop.tt":true,"jobs.tt":true,"mobi.tt":true,"travel.tt":true,"museum.tt":true,"aero.tt":true,"name.tt":true,"gov.tt":true,"edu.tt":true,"tv":true,"tw":true,"edu.tw":true,"gov.tw":true,"mil.tw":true,"com.tw":true,"net.tw":true,"org.tw":true,"idv.tw":true,"game.tw":true,"ebiz.tw":true,"club.tw":true,"xn--zf0ao64a.tw":true,"xn--uc0atv.tw":true,"xn--czrw28b.tw":true,"ac.tz":true,"co.tz":true,"go.tz":true,"mil.tz":true,"ne.tz":true,"or.tz":true,"sc.tz":true,"ua":true,"com.ua":true,"edu.ua":true,"gov.ua":true,"in.ua":true,"net.ua":true,"org.ua":true,"cherkassy.ua":true,"chernigov.ua":true,"chernovtsy.ua":true,"ck.ua":true,"cn.ua":true,"crimea.ua":true,"cv.ua":true,"dn.ua":true,"dnepropetrovsk.ua":true,"donetsk.ua":true,"dp.ua":true,"if.ua":true,"ivano-frankivsk.ua":true,"kh.ua":true,"kharkov.ua":true,"kherson.ua":true,"khmelnitskiy.ua":true,"kiev.ua":true,"kirovograd.ua":true,"km.ua":true,"kr.ua":true,"ks.ua":true,"kv.ua":true,"lg.ua":true,"lugansk.ua":true,"lutsk.ua":true,"lviv.ua":true,"mk.ua":true,"nikolaev.ua":true,"od.ua":true,"odessa.ua":true,"pl.ua":true,"poltava.ua":true,"rovno.ua":true,"rv.ua":true,"sebastopol.ua":true,"sumy.ua":true,"te.ua":true,"ternopil.ua":true,"uzhgorod.ua":true,"vinnica.ua":true,"vn.ua":true,"zaporizhzhe.ua":true,"zp.ua":true,"zhitomir.ua":true,"zt.ua":true,"co.ua":true,"pp.ua":true,"ug":true,"co.ug":true,"ac.ug":true,"sc.ug":true,"go.ug":true,"ne.ug":true,"or.ug":true,"*.uk":true,"*.sch.uk":true,"bl.uk":false,"british-library.uk":false,"icnet.uk":false,"jet.uk":false,"mod.uk":false,"nel.uk":false,"nhs.uk":false,"nic.uk":false,"nls.uk":false,"national-library-scotland.uk":false,"parliament.uk":false,"police.uk":false,"us":true,"dni.us":true,"fed.us":true,"isa.us":true,"kids.us":true,"nsn.us":true,"ak.us":true,"al.us":true,"ar.us":true,"as.us":true,"az.us":true,"ca.us":true,"co.us":true,"ct.us":true,"dc.us":true,"de.us":true,"fl.us":true,"ga.us":true,"gu.us":true,"hi.us":true,"ia.us":true,"id.us":true,"il.us":true,"in.us":true,"ks.us":true,"ky.us":true,"la.us":true,"ma.us":true,"md.us":true,"me.us":true,"mi.us":true,"mn.us":true,"mo.us":true,"ms.us":true,"mt.us":true,"nc.us":true,"nd.us":true,"ne.us":true,"nh.us":true,"nj.us":true,"nm.us":true,"nv.us":true,"ny.us":true,"oh.us":true,"ok.us":true,"or.us":true,"pa.us":true,"pr.us":true,"ri.us":true,"sc.us":true,"sd.us":true,"tn.us":true,"tx.us":true,"ut.us":true,"vi.us":true,"vt.us":true,"va.us":true,"wa.us":true,"wi.us":true,"wv.us":true,"wy.us":true,"k12.ak.us":true,"k12.al.us":true,"k12.ar.us":true,"k12.as.us":true,"k12.az.us":true,"k12.ca.us":true,"k12.co.us":true,"k12.ct.us":true,"k12.dc.us":true,"k12.de.us":true,"k12.fl.us":true,"k12.ga.us":true,"k12.gu.us":true,"k12.ia.us":true,"k12.id.us":true,"k12.il.us":true,"k12.in.us":true,"k12.ks.us":true,"k12.ky.us":true,"k12.la.us":true,"k12.ma.us":true,"k12.md.us":true,"k12.me.us":true,"k12.mi.us":true,"k12.mn.us":true,"k12.mo.us":true,"k12.ms.us":true,"k12.mt.us":true,"k12.nc.us":true,"k12.nd.us":true,"k12.ne.us":true,"k12.nh.us":true,"k12.nj.us":true,"k12.nm.us":true,"k12.nv.us":true,"k12.ny.us":true,"k12.oh.us":true,"k12.ok.us":true,"k12.or.us":true,"k12.pa.us":true,"k12.pr.us":true,"k12.ri.us":true,"k12.sc.us":true,"k12.sd.us":true,"k12.tn.us":true,"k12.tx.us":true,"k12.ut.us":true,"k12.vi.us":true,"k12.vt.us":true,"k12.va.us":true,"k12.wa.us":true,"k12.wi.us":true,"k12.wv.us":true,"k12.wy.us":true,"cc.ak.us":true,"cc.al.us":true,"cc.ar.us":true,"cc.as.us":true,"cc.az.us":true,"cc.ca.us":true,"cc.co.us":true,"cc.ct.us":true,"cc.dc.us":true,"cc.de.us":true,"cc.fl.us":true,"cc.ga.us":true,"cc.gu.us":true,"cc.hi.us":true,"cc.ia.us":true,"cc.id.us":true,"cc.il.us":true,"cc.in.us":true,"cc.ks.us":true,"cc.ky.us":true,"cc.la.us":true,"cc.ma.us":true,"cc.md.us":true,"cc.me.us":true,"cc.mi.us":true,"cc.mn.us":true,"cc.mo.us":true,"cc.ms.us":true,"cc.mt.us":true,"cc.nc.us":true,"cc.nd.us":true,"cc.ne.us":true,"cc.nh.us":true,"cc.nj.us":true,"cc.nm.us":true,"cc.nv.us":true,"cc.ny.us":true,"cc.oh.us":true,"cc.ok.us":true,"cc.or.us":true,"cc.pa.us":true,"cc.pr.us":true,"cc.ri.us":true,"cc.sc.us":true,"cc.sd.us":true,"cc.tn.us":true,"cc.tx.us":true,"cc.ut.us":true,"cc.vi.us":true,"cc.vt.us":true,"cc.va.us":true,"cc.wa.us":true,"cc.wi.us":true,"cc.wv.us":true,"cc.wy.us":true,"lib.ak.us":true,"lib.al.us":true,"lib.ar.us":true,"lib.as.us":true,"lib.az.us":true,"lib.ca.us":true,"lib.co.us":true,"lib.ct.us":true,"lib.dc.us":true,"lib.de.us":true,"lib.fl.us":true,"lib.ga.us":true,"lib.gu.us":true,"lib.hi.us":true,"lib.ia.us":true,"lib.id.us":true,"lib.il.us":true,"lib.in.us":true,"lib.ks.us":true,"lib.ky.us":true,"lib.la.us":true,"lib.ma.us":true,"lib.md.us":true,"lib.me.us":true,"lib.mi.us":true,"lib.mn.us":true,"lib.mo.us":true,"lib.ms.us":true,"lib.mt.us":true,"lib.nc.us":true,"lib.nd.us":true,"lib.ne.us":true,"lib.nh.us":true,"lib.nj.us":true,"lib.nm.us":true,"lib.nv.us":true,"lib.ny.us":true,"lib.oh.us":true,"lib.ok.us":true,"lib.or.us":true,"lib.pa.us":true,"lib.pr.us":true,"lib.ri.us":true,"lib.sc.us":true,"lib.sd.us":true,"lib.tn.us":true,"lib.tx.us":true,"lib.ut.us":true,"lib.vi.us":true,"lib.vt.us":true,"lib.va.us":true,"lib.wa.us":true,"lib.wi.us":true,"lib.wv.us":true,"lib.wy.us":true,"pvt.k12.ma.us":true,"chtr.k12.ma.us":true,"paroch.k12.ma.us":true,"*.uy":true,"uz":true,"com.uz":true,"co.uz":true,"va":true,"vc":true,"com.vc":true,"net.vc":true,"org.vc":true,"gov.vc":true,"mil.vc":true,"edu.vc":true,"*.ve":true,"vg":true,"vi":true,"co.vi":true,"com.vi":true,"k12.vi":true,"net.vi":true,"org.vi":true,"vn":true,"com.vn":true,"net.vn":true,"org.vn":true,"edu.vn":true,"gov.vn":true,"int.vn":true,"ac.vn":true,"biz.vn":true,"info.vn":true,"name.vn":true,"pro.vn":true,"health.vn":true,"vu":true,"wf":true,"ws":true,"com.ws":true,"net.ws":true,"org.ws":true,"gov.ws":true,"edu.ws":true,"yt":true,"xn--mgbaam7a8h":true,"xn--54b7fta0cc":true,"xn--fiqs8s":true,"xn--fiqz9s":true,"xn--lgbbat1ad8j":true,"xn--wgbh1c":true,"xn--node":true,"xn--j6w193g":true,"xn--h2brj9c":true,"xn--mgbbh1a71e":true,"xn--fpcrj9c3d":true,"xn--gecrj9c":true,"xn--s9brj9c":true,"xn--45brj9c":true,"xn--xkc2dl3a5ee0h":true,"xn--mgba3a4f16a":true,"xn--mgba3a4fra":true,"xn--mgbayh7gpa":true,"xn--3e0b707e":true,"xn--fzc2c9e2c":true,"xn--xkc2al3hye2a":true,"xn--mgbc0a9azcg":true,"xn--mgb9awbf":true,"xn--ygbi2ammx":true,"xn--90a3ac":true,"xn--p1ai":true,"xn--wgbl6a":true,"xn--mgberp4a5d4ar":true,"xn--mgberp4a5d4a87g":true,"xn--mgbqly7c0a67fbc":true,"xn--mgbqly7cvafr":true,"xn--ogbpf8fl":true,"xn--mgbtf8fl":true,"xn--yfro4i67o":true,"xn--clchc0ea0b2g2a9gcd":true,"xn--o3cw4h":true,"xn--pgbs0dh":true,"xn--kpry57d":true,"xn--kprw13d":true,"xn--nnx388a":true,"xn--j1amh":true,"xn--mgb2ddes":true,"xxx":true,"*.ye":true,"*.za":true,"*.zm":true,"*.zw":true,"biz.at":true,"info.at":true,"priv.at":true,"co.ca":true,"ar.com":true,"br.com":true,"cn.com":true,"de.com":true,"eu.com":true,"gb.com":true,"gr.com":true,"hu.com":true,"jpn.com":true,"kr.com":true,"no.com":true,"qc.com":true,"ru.com":true,"sa.com":true,"se.com":true,"uk.com":true,"us.com":true,"uy.com":true,"za.com":true,"gb.net":true,"jp.net":true,"se.net":true,"uk.net":true,"ae.org":true,"us.org":true,"com.de":true,"operaunite.com":true,"appspot.com":true,"iki.fi":true,"c.la":true,"za.net":true,"za.org":true,"co.nl":true,"co.no":true,"co.pl":true,"dyndns-at-home.com":true,"dyndns-at-work.com":true,"dyndns-blog.com":true,"dyndns-free.com":true,"dyndns-home.com":true,"dyndns-ip.com":true,"dyndns-mail.com":true,"dyndns-office.com":true,"dyndns-pics.com":true,"dyndns-remote.com":true,"dyndns-server.com":true,"dyndns-web.com":true,"dyndns-wiki.com":true,"dyndns-work.com":true,"dyndns.biz":true,"dyndns.info":true,"dyndns.org":true,"dyndns.tv":true,"at-band-camp.net":true,"ath.cx":true,"barrel-of-knowledge.info":true,"barrell-of-knowledge.info":true,"better-than.tv":true,"blogdns.com":true,"blogdns.net":true,"blogdns.org":true,"blogsite.org":true,"boldlygoingnowhere.org":true,"broke-it.net":true,"buyshouses.net":true,"cechire.com":true,"dnsalias.com":true,"dnsalias.net":true,"dnsalias.org":true,"dnsdojo.com":true,"dnsdojo.net":true,"dnsdojo.org":true,"does-it.net":true,"doesntexist.com":true,"doesntexist.org":true,"dontexist.com":true,"dontexist.net":true,"dontexist.org":true,"doomdns.com":true,"doomdns.org":true,"dvrdns.org":true,"dyn-o-saur.com":true,"dynalias.com":true,"dynalias.net":true,"dynalias.org":true,"dynathome.net":true,"dyndns.ws":true,"endofinternet.net":true,"endofinternet.org":true,"endoftheinternet.org":true,"est-a-la-maison.com":true,"est-a-la-masion.com":true,"est-le-patron.com":true,"est-mon-blogueur.com":true,"for-better.biz":true,"for-more.biz":true,"for-our.info":true,"for-some.biz":true,"for-the.biz":true,"forgot.her.name":true,"forgot.his.name":true,"from-ak.com":true,"from-al.com":true,"from-ar.com":true,"from-az.net":true,"from-ca.com":true,"from-co.net":true,"from-ct.com":true,"from-dc.com":true,"from-de.com":true,"from-fl.com":true,"from-ga.com":true,"from-hi.com":true,"from-ia.com":true,"from-id.com":true,"from-il.com":true,"from-in.com":true,"from-ks.com":true,"from-ky.com":true,"from-la.net":true,"from-ma.com":true,"from-md.com":true,"from-me.org":true,"from-mi.com":true,"from-mn.com":true,"from-mo.com":true,"from-ms.com":true,"from-mt.com":true,"from-nc.com":true,"from-nd.com":true,"from-ne.com":true,"from-nh.com":true,"from-nj.com":true,"from-nm.com":true,"from-nv.com":true,"from-ny.net":true,"from-oh.com":true,"from-ok.com":true,"from-or.com":true,"from-pa.com":true,"from-pr.com":true,"from-ri.com":true,"from-sc.com":true,"from-sd.com":true,"from-tn.com":true,"from-tx.com":true,"from-ut.com":true,"from-va.com":true,"from-vt.com":true,"from-wa.com":true,"from-wi.com":true,"from-wv.com":true,"from-wy.com":true,"ftpaccess.cc":true,"fuettertdasnetz.de":true,"game-host.org":true,"game-server.cc":true,"getmyip.com":true,"gets-it.net":true,"go.dyndns.org":true,"gotdns.com":true,"gotdns.org":true,"groks-the.info":true,"groks-this.info":true,"ham-radio-op.net":true,"here-for-more.info":true,"hobby-site.com":true,"hobby-site.org":true,"home.dyndns.org":true,"homedns.org":true,"homeftp.net":true,"homeftp.org":true,"homeip.net":true,"homelinux.com":true,"homelinux.net":true,"homelinux.org":true,"homeunix.com":true,"homeunix.net":true,"homeunix.org":true,"iamallama.com":true,"in-the-band.net":true,"is-a-anarchist.com":true,"is-a-blogger.com":true,"is-a-bookkeeper.com":true,"is-a-bruinsfan.org":true,"is-a-bulls-fan.com":true,"is-a-candidate.org":true,"is-a-caterer.com":true,"is-a-celticsfan.org":true,"is-a-chef.com":true,"is-a-chef.net":true,"is-a-chef.org":true,"is-a-conservative.com":true,"is-a-cpa.com":true,"is-a-cubicle-slave.com":true,"is-a-democrat.com":true,"is-a-designer.com":true,"is-a-doctor.com":true,"is-a-financialadvisor.com":true,"is-a-geek.com":true,"is-a-geek.net":true,"is-a-geek.org":true,"is-a-green.com":true,"is-a-guru.com":true,"is-a-hard-worker.com":true,"is-a-hunter.com":true,"is-a-knight.org":true,"is-a-landscaper.com":true,"is-a-lawyer.com":true,"is-a-liberal.com":true,"is-a-libertarian.com":true,"is-a-linux-user.org":true,"is-a-llama.com":true,"is-a-musician.com":true,"is-a-nascarfan.com":true,"is-a-nurse.com":true,"is-a-painter.com":true,"is-a-patsfan.org":true,"is-a-personaltrainer.com":true,"is-a-photographer.com":true,"is-a-player.com":true,"is-a-republican.com":true,"is-a-rockstar.com":true,"is-a-socialist.com":true,"is-a-soxfan.org":true,"is-a-student.com":true,"is-a-teacher.com":true,"is-a-techie.com":true,"is-a-therapist.com":true,"is-an-accountant.com":true,"is-an-actor.com":true,"is-an-actress.com":true,"is-an-anarchist.com":true,"is-an-artist.com":true,"is-an-engineer.com":true,"is-an-entertainer.com":true,"is-by.us":true,"is-certified.com":true,"is-found.org":true,"is-gone.com":true,"is-into-anime.com":true,"is-into-cars.com":true,"is-into-cartoons.com":true,"is-into-games.com":true,"is-leet.com":true,"is-lost.org":true,"is-not-certified.com":true,"is-saved.org":true,"is-slick.com":true,"is-uberleet.com":true,"is-very-bad.org":true,"is-very-evil.org":true,"is-very-good.org":true,"is-very-nice.org":true,"is-very-sweet.org":true,"is-with-theband.com":true,"isa-geek.com":true,"isa-geek.net":true,"isa-geek.org":true,"isa-hockeynut.com":true,"issmarterthanyou.com":true,"isteingeek.de":true,"istmein.de":true,"kicks-ass.net":true,"kicks-ass.org":true,"knowsitall.info":true,"land-4-sale.us":true,"lebtimnetz.de":true,"leitungsen.de":true,"likes-pie.com":true,"likescandy.com":true,"merseine.nu":true,"mine.nu":true,"misconfused.org":true,"mypets.ws":true,"myphotos.cc":true,"neat-url.com":true,"office-on-the.net":true,"on-the-web.tv":true,"podzone.net":true,"podzone.org":true,"readmyblog.org":true,"saves-the-whales.com":true,"scrapper-site.net":true,"scrapping.cc":true,"selfip.biz":true,"selfip.com":true,"selfip.info":true,"selfip.net":true,"selfip.org":true,"sells-for-less.com":true,"sells-for-u.com":true,"sells-it.net":true,"sellsyourhome.org":true,"servebbs.com":true,"servebbs.net":true,"servebbs.org":true,"serveftp.net":true,"serveftp.org":true,"servegame.org":true,"shacknet.nu":true,"simple-url.com":true,"space-to-rent.com":true,"stuff-4-sale.org":true,"stuff-4-sale.us":true,"teaches-yoga.com":true,"thruhere.net":true,"traeumtgerade.de":true,"webhop.biz":true,"webhop.info":true,"webhop.net":true,"webhop.org":true,"worse-than.tv":true,"writesthisblog.com":true}); - -// END of automatically generated file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt deleted file mode 100644 index 11dddd00..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt +++ /dev/null @@ -1,278 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt deleted file mode 100644 index 97067e54..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens <http://mathiasbynens.be/> - -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json deleted file mode 100644 index 69e12ae2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "punycode", - "version": "1.2.3", - "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", - "homepage": "http://mths.be/punycode", - "main": "punycode.js", - "keywords": [ - "punycode", - "unicode", - "idn", - "idna", - "dns", - "url", - "domain" - ], - "licenses": [ - { - "type": "MIT", - "url": "http://mths.be/mit" - }, - { - "type": "GPL", - "url": "http://mths.be/gpl" - } - ], - "author": { - "name": "Mathias Bynens", - "email": "mathias@qiwi.be", - "url": "http://mathiasbynens.be/" - }, - "contributors": [ - { - "name": "Mathias Bynens", - "email": "mathias@qiwi.be", - "url": "http://mathiasbynens.be/" - }, - { - "name": "John-David Dalton", - "email": "john.david.dalton@gmail.com", - "url": "http://allyoucanleet.com/" - } - ], - "bugs": { - "url": "https://github.com/bestiejs/punycode.js/issues" - }, - "repository": { - "type": "git", - "url": "https://github.com/bestiejs/punycode.js.git" - }, - "engines": [ - "node", - "rhino" - ], - "directories": { - "doc": "docs", - "test": "tests" - }, - "scripts": { - "test": "node tests/tests.js" - }, - "devDependencies": { - "grunt": "~0.4.1", - "grunt-contrib-uglify": "~0.2.2", - "grunt-shell": "~0.2.2", - "istanbul": "~0.1.37", - "qunit-clib": "~1.3.0", - "qunitjs": "~1.11.0", - "requirejs": "~2.1.6" - }, - "readme": "ERROR: No README data found!", - "_id": "punycode@1.2.3", - "dist": { - "shasum": "b4e304471082d783c73b3bafabf2fd9b6a486266" - }, - "_from": "punycode@>=0.2.0", - "_resolved": "https://registry.npmjs.org/punycode/-/punycode-1.2.3.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js deleted file mode 100644 index 41803ba4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js +++ /dev/null @@ -1,508 +0,0 @@ -/*! http://mths.be/punycode v1.2.3 by @mathias */ -;(function(root) { - - /** Detect free variables */ - var freeExports = typeof exports == 'object' && exports; - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /** - * The `punycode` object. - * @name punycode - * @type Object - */ - var punycode, - - /** Highest positive signed 32-bit float value */ - maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 - - /** Bootstring parameters */ - base = 36, - tMin = 1, - tMax = 26, - skew = 38, - damp = 700, - initialBias = 72, - initialN = 128, // 0x80 - delimiter = '-', // '\x2D' - - /** Regular expressions */ - regexPunycode = /^xn--/, - regexNonASCII = /[^ -~]/, // unprintable ASCII chars + non-ASCII chars - regexSeparators = /\x2E|\u3002|\uFF0E|\uFF61/g, // RFC 3490 separators - - /** Error messages */ - errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' - }, - - /** Convenience shortcuts */ - baseMinusTMin = base - tMin, - floor = Math.floor, - stringFromCharCode = String.fromCharCode, - - /** Temporary variable */ - key; - - /*--------------------------------------------------------------------------*/ - - /** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ - function error(type) { - throw RangeError(errors[type]); - } - - /** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ - function map(array, fn) { - var length = array.length; - while (length--) { - array[length] = fn(array[length]); - } - return array; - } - - /** - * A simple `Array#map`-like wrapper to work with domain name strings. - * @private - * @param {String} domain The domain name. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ - function mapDomain(string, fn) { - return map(string.split(regexSeparators), fn).join('.'); - } - - /** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see <http://mathiasbynens.be/notes/javascript-encoding> - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ - function ucs2decode(string) { - var output = [], - counter = 0, - length = string.length, - value, - extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - /** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ - function ucs2encode(array) { - return map(array, function(value) { - var output = ''; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - return output; - }).join(''); - } - - /** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } - - /** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ - function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } - - /** - * Bias adaptation function as per section 3.4 of RFC 3492. - * http://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } - - /** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ - function decode(input) { - // Don't use UCS-2 - var output = [], - inputLength = input.length, - out, - i = 0, - n = initialN, - bias = initialBias, - basic, - j, - index, - oldi, - w, - k, - digit, - t, - length, - /** Cached calculation results */ - baseMinusT; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - for (oldi = i, w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output - output.splice(i++, 0, n); - - } - - return ucs2encode(output); - } - - /** - * Converts a string of Unicode symbols to a Punycode string of ASCII-only - * symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ - function encode(input) { - var n, - delta, - handledCPCount, - basicLength, - bias, - j, - m, - q, - k, - t, - currentValue, - output = [], - /** `inputLength` will hold the number of code points in `input`. */ - inputLength, - /** Cached calculation results */ - handledCPCountPlusOne, - baseMinusT, - qMinusT; - - // Convert the input in UCS-2 to Unicode - input = ucs2decode(input); - - // Cache the length - inputLength = input.length; - - // Initialize the state - n = initialN; - delta = 0; - bias = initialBias; - - // Handle the basic code points - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - handledCPCount = basicLength = output.length; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string - if it is not empty - with a delimiter - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, - // but guard against overflow - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - - if (currentValue == n) { - // Represent delta as a generalized variable-length integer - for (q = delta, k = base; /* no condition */; k += base) { - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); - } - - /** - * Converts a Punycode string representing a domain name to Unicode. Only the - * Punycoded parts of the domain name will be converted, i.e. it doesn't - * matter if you call it on a string that has already been converted to - * Unicode. - * @memberOf punycode - * @param {String} domain The Punycode domain name to convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ - function toUnicode(domain) { - return mapDomain(domain, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); - } - - /** - * Converts a Unicode string representing a domain name to Punycode. Only the - * non-ASCII parts of the domain name will be converted, i.e. it doesn't - * matter if you call it with a domain that's already in ASCII. - * @memberOf punycode - * @param {String} domain The domain name to convert, as a Unicode string. - * @returns {String} The Punycode representation of the given domain name. - */ - function toASCII(domain) { - return mapDomain(domain, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); - } - - /*--------------------------------------------------------------------------*/ - - /** Define the public API */ - punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '1.2.3', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see <http://mathiasbynens.be/notes/javascript-encoding> - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode - }; - - /** Expose `punycode` */ - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return punycode; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = punycode; - } else { // in Narwhal or RingoJS v0.7.0- - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { // in Rhino or a web browser - root.punycode = punycode; - } - -}(this)); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js deleted file mode 100644 index ac5d914a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! http://mths.be/punycode v1.2.3 by @mathias */ -(function(o){function e(o){throw RangeError(L[o])}function n(o,e){for(var n=o.length;n--;)o[n]=e(o[n]);return o}function t(o,e){return n(o.split(S),e).join(".")}function r(o){for(var e,n,t=[],r=0,u=o.length;u>r;)e=o.charCodeAt(r++),e>=55296&&56319>=e&&u>r?(n=o.charCodeAt(r++),56320==(64512&n)?t.push(((1023&e)<<10)+(1023&n)+65536):(t.push(e),r--)):t.push(e);return t}function u(o){return n(o,function(o){var e="";return o>65535&&(o-=65536,e+=R(55296|1023&o>>>10),o=56320|1023&o),e+=R(o)}).join("")}function i(o){return 10>o-48?o-22:26>o-65?o-65:26>o-97?o-97:x}function f(o,e){return o+22+75*(26>o)-((0!=e)<<5)}function c(o,e,n){var t=0;for(o=n?P(o/m):o>>1,o+=P(o/e);o>M*y>>1;t+=x)o=P(o/M);return P(t+(M+1)*o/(o+j))}function l(o){var n,t,r,f,l,d,s,a,p,h,v=[],g=o.length,w=0,j=I,m=A;for(t=o.lastIndexOf(F),0>t&&(t=0),r=0;t>r;++r)o.charCodeAt(r)>=128&&e("not-basic"),v.push(o.charCodeAt(r));for(f=t>0?t+1:0;g>f;){for(l=w,d=1,s=x;f>=g&&e("invalid-input"),a=i(o.charCodeAt(f++)),(a>=x||a>P((b-w)/d))&&e("overflow"),w+=a*d,p=m>=s?C:s>=m+y?y:s-m,!(p>a);s+=x)h=x-p,d>P(b/h)&&e("overflow"),d*=h;n=v.length+1,m=c(w-l,n,0==l),P(w/n)>b-j&&e("overflow"),j+=P(w/n),w%=n,v.splice(w++,0,j)}return u(v)}function d(o){var n,t,u,i,l,d,s,a,p,h,v,g,w,j,m,E=[];for(o=r(o),g=o.length,n=I,t=0,l=A,d=0;g>d;++d)v=o[d],128>v&&E.push(R(v));for(u=i=E.length,i&&E.push(F);g>u;){for(s=b,d=0;g>d;++d)v=o[d],v>=n&&s>v&&(s=v);for(w=u+1,s-n>P((b-t)/w)&&e("overflow"),t+=(s-n)*w,n=s,d=0;g>d;++d)if(v=o[d],n>v&&++t>b&&e("overflow"),v==n){for(a=t,p=x;h=l>=p?C:p>=l+y?y:p-l,!(h>a);p+=x)m=a-h,j=x-h,E.push(R(f(h+m%j,0))),a=P(m/j);E.push(R(f(a,0))),l=c(t,w,u==i),t=0,++u}++t,++n}return E.join("")}function s(o){return t(o,function(o){return E.test(o)?l(o.slice(4).toLowerCase()):o})}function a(o){return t(o,function(o){return O.test(o)?"xn--"+d(o):o})}var p="object"==typeof exports&&exports,h="object"==typeof module&&module&&module.exports==p&&module,v="object"==typeof global&&global;(v.global===v||v.window===v)&&(o=v);var g,w,b=2147483647,x=36,C=1,y=26,j=38,m=700,A=72,I=128,F="-",E=/^xn--/,O=/[^ -~]/,S=/\x2E|\u3002|\uFF0E|\uFF61/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},M=x-C,P=Math.floor,R=String.fromCharCode;if(g={version:"1.2.3",ucs2:{decode:r,encode:u},decode:l,encode:d,toASCII:a,toUnicode:s},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return g});else if(p&&!p.nodeType)if(h)h.exports=g;else for(w in g)g.hasOwnProperty(w)&&(p[w]=g[w]);else o.punycode=g})(this); \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt deleted file mode 100644 index a7501f98..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright 2011-2013 John-David Dalton <http://allyoucanleet.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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md deleted file mode 100644 index fbddce91..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Docdown <sup>v1.0.0</sup> - -A simple JSDoc to Markdown documentation generator. - -## Documentation - -The documentation for Docdown can be viewed here: [/doc/README.md](https://github.com/jdalton/docdown/blob/master/doc/README.md#readme) - -For a list of upcoming features, check out our [roadmap](https://github.com/jdalton/docdown/wiki/Roadmap). - -## Installation and usage - -Usage example: - -```php -require("docdown.php"); - -// generate Markdown -$markdown = docdown(array( - "path" => $filepath, - "url" => "https://github.com/username/project/blob/master/my.js" -)); -``` - -## Author - -| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](http://twitter.com/jdalton "Follow @jdalton on Twitter") | -|---| -| [John-David Dalton](http://allyoucanleet.com/) | - -## Contributors - -| [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](http://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md deleted file mode 100644 index 459d36ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# Docdown <sup>v1.0.0</sup> - -<!-- div --> - - -<!-- div --> - -## <a id="docdown"></a>`docdown` -* [`docdown`](#docdown$optionsarray) - -<!-- /div --> - - -<!-- /div --> - - -<!-- div --> - - -<!-- div --> - -## `docdown` - -<!-- div --> - -### <a id="docdown$optionsarray"></a>`docdown([$options=array()])` -<a href="#docdown$optionsarray">#</a> [Ⓢ](https://github.com/jdalton/docdown/blob/master/docdown.php#L34 "View in source") [Ⓣ][1] - -Generates Markdown from JSDoc entries in a given file. - -#### Arguments -1. `[$options=array()]` *(Array)*: The options array. - -#### Returns -*(String)*: The generated Markdown. - -#### Example -```php -// specify a file path -$markdown = docdown(array( - // path to js file - 'path' => $filepath, - // url used to reference line numbers in code - 'url' => 'https://github.com/username/project/blob/master/my.js' -)); - -// or pass raw js -$markdown = docdown(array( - // raw JavaScript source - 'source' => $rawJS, - // documentation title - 'title' => 'My API Documentation', - // url used to reference line numbers in code - 'url' => 'https://github.com/username/project/blob/master/my.js' -)); -``` - -* * * - -<!-- /div --> - - -<!-- /div --> - - -<!-- /div --> - - - [1]: #docdown "Jump back to the TOC." \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php deleted file mode 100644 index eca8d145..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - - // cleanup requested filepath - $file = isset($_GET['f']) ? $_GET['f'] : 'docdown'; - $file = preg_replace('#(\.*[\/])+#', '', $file); - $file .= preg_match('/\.[a-z]+$/', $file) ? '' : '.php'; - - // output filename - if (isset($_GET['o'])) { - $output = $_GET['o']; - } else if (isset($_SERVER['argv'][1])) { - $output = $_SERVER['argv'][1]; - } else { - $output = basename($file); - } - - /*--------------------------------------------------------------------------*/ - - require('../docdown.php'); - - // generate Markdown - $markdown = docdown(array( - 'path' => '../' . $file, - 'title' => 'Docdown <sup>v1.0.0</sup>', - 'url' => 'https://github.com/jdalton/docdown/blob/master/docdown.php' - )); - - // save to a .md file - file_put_contents($output . '.md', $markdown); - - // print - header('Content-Type: text/plain;charset=utf-8'); - echo $markdown . PHP_EOL; - -?> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php deleted file mode 100644 index 4a786d75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php -/*! - * Docdown v1.0.0-pre - * Copyright 2011-2013 John-David Dalton <http://allyoucanleet.com/> - * Available under MIT license <http://mths.be/mit> - */ -require(dirname(__FILE__) . '/src/DocDown/Generator.php'); - -/** - * Generates Markdown from JSDoc entries in a given file. - * - * @param {Array} [$options=array()] The options array. - * @returns {String} The generated Markdown. - * @example - * - * // specify a file path - * $markdown = docdown(array( - * // path to js file - * 'path' => $filepath, - * // url used to reference line numbers in code - * 'url' => 'https://github.com/username/project/blob/master/my.js' - * )); - * - * // or pass raw js - * $markdown = docdown(array( - * // raw JavaScript source - * 'source' => $rawJS, - * // documentation title - * 'title' => 'My API Documentation', - * // url used to reference line numbers in code - * 'url' => 'https://github.com/username/project/blob/master/my.js' - * )); - */ -function docdown( $options = array() ) { - $gen = new Generator($options); - return $gen->generate(); -} -?> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php deleted file mode 100644 index 0a7c552e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php +++ /dev/null @@ -1,226 +0,0 @@ -<?php - -/** - * A class to represent a JSDoc entry alias. - */ -class Alias { - - /** - * The alias owner. - * - * @memberOf Alias - * @type Object - */ - public $owner; - - /*--------------------------------------------------------------------------*/ - - /** - * The Alias constructor. - * - * @constructor - * @param {String} $name The alias name. - * @param {Object} $owner The alias owner. - */ - public function __construct( $name, $owner ) { - $this->owner = $owner; - $this->_name = $name; - $this->_call = $owner->getCall(); - $this->_category = $owner->getCategory(); - $this->_desc = $owner->getDesc(); - $this->_example = $owner->getExample(); - $this->_isCtor = $owner->isCtor(); - $this->_isLicense = $owner->isLicense(); - $this->_isPlugin = $owner->isPlugin(); - $this->_isPrivate = $owner->isPrivate(); - $this->_isStatic = $owner->isStatic(); - $this->_lineNumber = $owner->getLineNumber(); - $this->_members = $owner->getMembers(); - $this->_params = $owner->getParams(); - $this->_returns = $owner->getReturns(); - $this->_type = $owner->getType(); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Extracts the entry's `alias` objects. - * - * @memberOf Alias - * @param {Number} $index The index of the array value to return. - * @returns {Array|String} The entry's `alias` objects. - */ - public function getAliases( $index = null ) { - $result = array(); - return $index !== null - ? @$result[$index] - : $result; - } - - /** - * Extracts the function call from the owner entry. - * - * @memberOf Alias - * @returns {String} The function call. - */ - public function getCall() { - return $this->_call; - } - - /** - * Extracts the owner entry's `category` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `category` data. - */ - public function getCategory() { - return $this->_category; - } - - /** - * Extracts the owner entry's description. - * - * @memberOf Alias - * @returns {String} The owner entry's description. - */ - public function getDesc() { - return $this->_desc; - } - - /** - * Extracts the owner entry's `example` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `example` data. - */ - public function getExample() { - return $this->_example; - } - - /** - * Checks if the entry is an alias. - * - * @memberOf Alias - * @returns {Boolean} Returns `true`. - */ - public function isAlias() { - return true; - } - - /** - * Checks if the owner entry is a constructor. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if a constructor, else `false`. - */ - public function isCtor() { - return $this->_isCtor; - } - - /** - * Checks if the owner entry is a license. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if a license, else `false`. - */ - public function isLicense() { - return $this->_isLicense; - } - - /** - * Checks if the owner entry *is* assigned to a prototype. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if assigned to a prototype, else `false`. - */ - public function isPlugin() { - return $this->_isPlugin; - } - - /** - * Checks if the owner entry is private. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if private, else `false`. - */ - public function isPrivate() { - return $this->_isPrivate; - } - - /** - * Checks if the owner entry is *not* assigned to a prototype. - * - * @memberOf Alias - * @returns {Boolean} Returns `true` if not assigned to a prototype, else `false`. - */ - public function isStatic() { - return $this->_isStatic; - } - - /** - * Resolves the owner entry's line number. - * - * @memberOf Alias - * @returns {Number} The owner entry's line number. - */ - public function getLineNumber() { - return $this->_lineNumber; - } - - /** - * Extracts the owner entry's `member` data. - * - * @memberOf Alias - * @param {Number} $index The index of the array value to return. - * @returns {Array|String} The owner entry's `member` data. - */ - public function getMembers( $index = null ) { - return $index !== null - ? @$this->_members[$index] - : $this->_members; - } - - /** - * Extracts the owner entry's `name` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `name` data. - */ - public function getName() { - return $this->_name; - } - - /** - * Extracts the owner entry's `param` data. - * - * @memberOf Alias - * @param {Number} $index The index of the array value to return. - * @returns {Array} The owner entry's `param` data. - */ - public function getParams( $index = null ) { - return $index !== null - ? @$this->_params[$index] - : $this->_params; - } - - /** - * Extracts the owner entry's `returns` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `returns` data. - */ - public function getReturns() { - return $this->_returns; - } - - /** - * Extracts the owner entry's `type` data. - * - * @memberOf Alias - * @returns {String} The owner entry's `type` data. - */ - public function getType() { - return $this->_type; - } -} -?> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php deleted file mode 100644 index a973d9a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php +++ /dev/null @@ -1,442 +0,0 @@ -<?php - -require(dirname(__FILE__) . "/Alias.php"); - -/** - * A class to simplify parsing a single JSDoc entry. - */ -class Entry { - - /** - * The documentation entry. - * - * @memberOf Entry - * @type String - */ - public $entry = ''; - - /** - * The language highlighter used for code examples. - * - * @memberOf Entry - * @type String - */ - public $lang = ''; - - /** - * The source code. - * - * @memberOf Entry - * @type String - */ - public $source = ''; - - /*--------------------------------------------------------------------------*/ - - /** - * The Entry constructor. - * - * @constructor - * @param {String} $entry The documentation entry to analyse. - * @param {String} $source The source code. - * @param {String} [$lang ='js'] The language highlighter used for code examples. - */ - public function __construct( $entry, $source, $lang = 'js' ) { - $this->entry = $entry; - $this->lang = $lang; - $this->source = str_replace(PHP_EOL, "\n", $source); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Extracts the documentation entries from source code. - * - * @static - * @memberOf Entry - * @param {String} $source The source code. - * @returns {Array} The array of entries. - */ - public static function getEntries( $source ) { - preg_match_all('#/\*\*(?![-!])[\s\S]*?\*/\s*.+#', $source, $result); - return array_pop($result); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Checks if the entry is a function reference. - * - * @private - * @memberOf Entry - * @returns {Boolean} Returns `true` if the entry is a function reference, else `false`. - */ - private function isFunction() { - if (!isset($this->_isFunction)) { - $this->_isFunction = !!( - $this->isCtor() || - count($this->getParams()) || - count($this->getReturns()) || - preg_match('/\*[\t ]*@function\b/', $this->entry) - ); - } - return $this->_isFunction; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Extracts the entry's `alias` objects. - * - * @memberOf Entry - * @param {Number} $index The index of the array value to return. - * @returns {Array|String} The entry's `alias` objects. - */ - public function getAliases( $index = null ) { - if (!isset($this->_aliases)) { - preg_match('#\*[\t ]*@alias\s+(.+)#', $this->entry, $result); - - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - $result = preg_split('/,\s*/', $result); - natsort($result); - - foreach ($result as $resultIndex => $value) { - $result[$resultIndex] = new Alias($value, $this); - } - } - $this->_aliases = $result; - } - return $index !== null - ? @$this->_aliases[$index] - : $this->_aliases; - } - - /** - * Extracts the function call from the entry. - * - * @memberOf Entry - * @returns {String} The function call. - */ - public function getCall() { - if (isset($this->_call)) { - return $this->_call; - } - - preg_match('#\*/\s*(?:function ([^(]*)|(.*?)(?=[:=,]|return\b))#', $this->entry, $result); - if ($result = array_pop($result)) { - $result = array_pop(explode('var ', trim(trim(array_pop(explode('.', $result))), "'"))); - } - // resolve name - // avoid $this->getName() because it calls $this->getCall() - preg_match('#\*[\t ]*@name\s+(.+)#', $this->entry, $name); - if (count($name)) { - $name = trim($name[1]); - } else { - $name = $result; - } - // compile function call syntax - if ($this->isFunction()) { - // compose parts - $result = array($result); - $params = $this->getParams(); - foreach ($params as $param) { - $result[] = $param[1]; - } - // format - $result = $name .'('. implode(array_slice($result, 1), ', ') .')'; - $result = str_replace(', [', ' [, ', str_replace('], [', ', ', $result)); - } - - $this->_call = $result ? $result : $name; - return $this->_call; - } - - /** - * Extracts the entry's `category` data. - * - * @memberOf Entry - * @returns {String} The entry's `category` data. - */ - public function getCategory() { - if (isset($this->_category)) { - return $this->_category; - } - - preg_match('#\*[\t ]*@category\s+(.+)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - } else { - $result = $this->getType() == 'Function' ? 'Methods' : 'Properties'; - } - $this->_category = $result; - return $result; - } - - /** - * Extracts the entry's description. - * - * @memberOf Entry - * @returns {String} The entry's description. - */ - public function getDesc() { - if (isset($this->_desc)) { - return $this->_desc; - } - - preg_match('#/\*\*(?:\s*\*)?([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result); - if (count($result)) { - $type = $this->getType(); - $result = preg_replace('/:\n[\t ]*\*[\t ]*/', ":<br>\n", $result[1]); - $result = preg_replace('/(?:^|\n)[\t ]*\*\n[\t ]*\*[\t ]*/', "\n\n", $result); - $result = preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result); - $result = trim($result); - $result = ($type == 'Function' ? '' : '(' . str_replace('|', ', ', trim($type, '{}')) . '): ') . $result; - } - $this->_desc = $result; - return $result; - } - - /** - * Extracts the entry's `example` data. - * - * @memberOf Entry - * @returns {String} The entry's `example` data. - */ - public function getExample() { - if (isset($this->_example)) { - return $this->_example; - } - - preg_match('#\*[\t ]*@example\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', "\n", $result[1])); - $result = '```' . $this->lang . "\n" . $result . "\n```"; - } - $this->_example = $result; - return $result; - } - - /** - * Checks if the entry is an alias. - * - * @memberOf Entry - * @returns {Boolean} Returns `false`. - */ - public function isAlias() { - return false; - } - - /** - * Checks if the entry is a constructor. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if a constructor, else `false`. - */ - public function isCtor() { - if (!isset($this->_isCtor)) { - $this->_isCtor = !!preg_match('/\*[\t ]*@constructor\b/', $this->entry); - } - return $this->_isCtor; - } - - /** - * Checks if the entry is a license. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if a license, else `false`. - */ - public function isLicense() { - if (!isset($this->_isLicense)) { - $this->_isLicense = !!preg_match('/\*[\t ]*@license\b/', $this->entry); - } - return $this->_isLicense; - } - - /** - * Checks if the entry *is* assigned to a prototype. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if assigned to a prototype, else `false`. - */ - public function isPlugin() { - if (!isset($this->_isPlugin)) { - $this->_isPlugin = !$this->isCtor() && !$this->isPrivate() && !$this->isStatic(); - } - return $this->_isPlugin; - } - - /** - * Checks if the entry is private. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if private, else `false`. - */ - public function isPrivate() { - if (!isset($this->_isPrivate)) { - $this->_isPrivate = $this->isLicense() || !!preg_match('/\*[\t ]*@private\b/', $this->entry) || !preg_match('/\*[\t ]*@[a-z]+\b/', $this->entry); - } - return $this->_isPrivate; - } - - /** - * Checks if the entry is *not* assigned to a prototype. - * - * @memberOf Entry - * @returns {Boolean} Returns `true` if not assigned to a prototype, else `false`. - */ - public function isStatic() { - if (isset($this->_isStatic)) { - return $this->_isStatic; - } - - $public = !$this->isPrivate(); - $result = $public && !!preg_match('/\*[\t ]*@static\b/', $this->entry); - - // set in cases where it isn't explicitly stated - if ($public && !$result) { - if ($parent = array_pop(preg_split('/[#.]/', $this->getMembers(0)))) { - foreach (Entry::getEntries($this->source) as $entry) { - $entry = new Entry($entry, $this->source); - if ($entry->getName() == $parent) { - $result = !$entry->isCtor(); - break; - } - } - } else { - $result = true; - } - } - $this->_isStatic = $result; - return $result; - } - - /** - * Resolves the entry's line number. - * - * @memberOf Entry - * @returns {Number} The entry's line number. - */ - public function getLineNumber() { - if (!isset($this->_lineNumber)) { - preg_match_all('/\n/', substr($this->source, 0, strrpos($this->source, $this->entry) + strlen($this->entry)), $lines); - $this->_lineNumber = count(array_pop($lines)) + 1; - } - return $this->_lineNumber; - } - - /** - * Extracts the entry's `member` data. - * - * @memberOf Entry - * @param {Number} $index The index of the array value to return. - * @returns {Array|String} The entry's `member` data. - */ - public function getMembers( $index = null ) { - if (!isset($this->_members)) { - preg_match('#\*[\t ]*@member(?:Of)?\s+(.+)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - $result = preg_split('/,\s*/', $result); - natsort($result); - } - $this->_members = $result; - } - return $index !== null - ? @$this->_members[$index] - : $this->_members; - } - - /** - * Extracts the entry's `name` data. - * - * @memberOf Entry - * @returns {String} The entry's `name` data. - */ - public function getName() { - if (isset($this->_name)) { - return $this->_name; - } - - preg_match('#\*[\t ]*@name\s+(.+)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - } else { - $result = array_shift(explode('(', $this->getCall())); - } - $this->_name = $result; - return $result; - } - - /** - * Extracts the entry's `param` data. - * - * @memberOf Entry - * @param {Number} $index The index of the array value to return. - * @returns {Array} The entry's `param` data. - */ - public function getParams( $index = null ) { - if (!isset($this->_params)) { - preg_match_all('#\*[\t ]*@param\s+\{([^}]+)\}\s+(\[.+\]|[$\w|]+(?:\[.+\])?)\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#i', $this->entry, $result); - if (count($result = array_filter(array_slice($result, 1)))) { - // repurpose array - foreach ($result as $param) { - foreach ($param as $key => $value) { - if (!is_array($result[0][$key])) { - $result[0][$key] = array(); - } - $result[0][$key][] = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]*/', ' ', $value)); - } - } - $result = $result[0]; - } - $this->_params = $result; - } - return $index !== null - ? @$this->_params[$index] - : $this->_params; - } - - /** - * Extracts the entry's `returns` data. - * - * @memberOf Entry - * @returns {String} The entry's `returns` data. - */ - public function getReturns() { - if (isset($this->_returns)) { - return $this->_returns; - } - - preg_match('#\*[\t ]*@returns\s+\{([^}]+)\}\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result); - if (count($result)) { - $result = array_map('trim', array_slice($result, 1)); - $result[0] = str_replace('|', ', ', $result[0]); - $result[1] = preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1]); - } - $this->_returns = $result; - return $result; - } - - /** - * Extracts the entry's `type` data. - * - * @memberOf Entry - * @returns {String} The entry's `type` data. - */ - public function getType() { - if (isset($this->_type)) { - return $this->_type; - } - - preg_match('#\*[\t ]*@type\s+(.+)#', $this->entry, $result); - if (count($result)) { - $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1])); - } else { - $result = $this->isFunction() ? 'Function' : 'Unknown'; - } - $this->_type = $result; - return $result; - } -} -?> \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php deleted file mode 100644 index 5dc2583f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php +++ /dev/null @@ -1,563 +0,0 @@ -<?php - -require(dirname(__FILE__) . "/Entry.php"); - -/** - * Generates Markdown from JSDoc entries. - */ -class Generator { - - /** - * The HTML for the close tag. - * - * @static - * @memberOf Generator - * @type String - */ - public $closeTag = "\n<!-- /div -->\n"; - - /** - * An array of JSDoc entries. - * - * @memberOf Generator - * @type Array - */ - public $entries = array(); - - /** - * The HTML for the open tag. - * - * @static - * @memberOf Generator - * @type String - */ - public $openTag = "\n<!-- div -->\n"; - - /** - * An options array used to configure the generator. - * - * @memberOf Generator - * @type Array - */ - public $options = array(); - - /** - * The file's source code. - * - * @memberOf Generator - * @type String - */ - public $source = ''; - - /*--------------------------------------------------------------------------*/ - - /** - * The Generator constructor. - * - * @constructor - * @param {String} $source The source code to parse. - * @param {Array} $options The options array. - */ - public function __construct( $source, $options = array() ) { - // juggle arguments - if (is_array($source)) { - $options = $source; - } else { - $options['source'] = $source; - } - if (isset($options['source']) && realpath($options['source'])) { - $options['path'] = $options['source']; - } - if (isset($options['path'])) { - preg_match('/(?<=\.)[a-z]+$/', $options['path'], $ext); - $options['source'] = file_get_contents($options['path']); - $ext = array_pop($ext); - - if (!isset($options['lang']) && $ext) { - $options['lang'] = $ext; - } - if (!isset($options['title'])) { - $options['title'] = ucfirst(basename($options['path'])) . ' API documentation'; - } - } - if (!isset($options['lang'])) { - $options['lang'] = 'js'; - } - if (!isset($options['toc'])) { - $options['toc'] = 'properties'; - } - - $this->options = $options; - $this->source = str_replace(PHP_EOL, "\n", $options['source']); - $this->entries = Entry::getEntries($this->source); - - foreach ($this->entries as $index => $value) { - $this->entries[$index] = new Entry($value, $this->source, $options['lang']); - } - } - - /*--------------------------------------------------------------------------*/ - - /** - * Performs common string formatting operations. - * - * @private - * @static - * @memberOf Generator - * @param {String} $string The string to format. - * @returns {String} The formatted string. - */ - private static function format( $string ) { - $counter = 0; - - // tokenize inline code snippets - preg_match_all('/`[^`]+`/', $string, $tokenized); - $tokenized = $tokenized[0]; - foreach ($tokenized as $snippet) { - $string = str_replace($snippet, '__token' . ($counter++) .'__', $string); - } - - // italicize parentheses - $string = preg_replace('/(^|\s)(\([^)]+\))/', '$1*$2*', $string); - - // mark numbers as inline code - $string = preg_replace('/[\t ](-?\d+(?:.\d+)?)(?!\.[^\n])/', ' `$1`', $string); - - // detokenize inline code snippets - $counter = 0; - foreach ($tokenized as $snippet) { - $string = str_replace('__token' . ($counter++) . '__', $snippet, $string); - } - - return trim($string); - } - - /** - * Modify a string by replacing named tokens with matching assoc. array values. - * - * @private - * @static - * @memberOf Generator - * @param {String} $string The string to modify. - * @param {Array|Object} $object The template object. - * @returns {String} The modified string. - */ - private static function interpolate( $string, $object ) { - preg_match_all('/#\{([^}]+)\}/', $string, $tokens); - $tokens = array_unique(array_pop($tokens)); - - foreach ($tokens as $token) { - $pattern = '/#\{' . $token . '\}/'; - $replacement = ''; - - if (is_object($object)) { - preg_match('/\(([^)]+?)\)$/', $token, $args); - $args = preg_split('/,\s*/', array_pop($args)); - $method = 'get' . ucfirst(str_replace('/\([^)]+?\)$/', '', $token)); - - if (method_exists($object, $method)) { - $replacement = (string) call_user_func_array(array($object, $method), $args); - } else if (isset($object->{$token})) { - $replacement = (string) $object->{$token}; - } - } else if (isset($object[$token])) { - $replacement = (string) $object[$token]; - } - $string = preg_replace($pattern, trim($replacement), $string); - } - return Generator::format($string); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Adds the given `$entries` to the `$result` array. - * - * @private - * @memberOf Generator - * @param {Array} $result The result array to modify. - * @param {Array} $entries The entries to add to the `$result`. - */ - private function addEntries( &$result, $entries ) { - foreach ($entries as $entry) { - // skip aliases - if ($entry->isAlias()) { - continue; - } - // name and description - array_push( - $result, - $this->openTag, - Generator::interpolate("### <a id=\"#{hash}\"></a>`#{member}#{separator}#{call}`\n<a href=\"##{hash}\">#</a> [Ⓢ](#{href} \"View in source\") [Ⓣ][1]\n\n#{desc}", $entry) - ); - - // @alias - if (count($aliases = $entry->getAliases())) { - array_push($result, '', '#### Aliases'); - foreach ($aliases as $index => $alias) { - $aliases[$index] = $alias->getName(); - } - $result[] = '*' . implode(', ', $aliases) . '*'; - } - // @param - if (count($params = $entry->getParams())) { - array_push($result, '', '#### Arguments'); - foreach ($params as $index => $param) { - $result[] = Generator::interpolate('#{num}. `#{name}` (#{type}): #{desc}', array( - 'desc' => $param[2], - 'name' => $param[1], - 'num' => $index + 1, - 'type' => $param[0] - )); - } - } - // @returns - if (count($returns = $entry->getReturns())) { - array_push( - $result, '', - '#### Returns', - Generator::interpolate('(#{type}): #{desc}', array('desc' => $returns[1], 'type' => $returns[0])) - ); - } - // @example - if ($example = $entry->getExample()) { - array_push($result, '', '#### Example', $example); - } - array_push($result, "\n* * *", $this->closeTag); - } - } - - /** - * Resolves the entry's hash used to navigate the documentation. - * - * @private - * @memberOf Generator - * @param {Number|Object} $entry The entry object. - * @param {String} $member The name of the member. - * @returns {String} The url hash. - */ - private function getHash( $entry, $member = '' ) { - $entry = is_numeric($entry) ? $this->entries[$entry] : $entry; - $member = !$member ? $entry->getMembers(0) : $member; - $result = ($member ? $member . ($entry->isPlugin() ? 'prototype' : '') : '') . $entry->getCall(); - $result = preg_replace('/\(\[|\[\]/', '', $result); - $result = preg_replace('/[ =|\'"{}.()\]]/', '', $result); - $result = preg_replace('/[[#,]/', '-', $result); - return strtolower($result); - } - - /** - * Resolves the entry's url for the specific line number. - * - * @private - * @memberOf Generator - * @param {Number|Object} $entry The entry object. - * @returns {String} The url. - */ - private function getLineUrl( $entry ) { - $entry = is_numeric($entry) ? $this->entries($entry) : $entry; - return $this->options['url'] . '#L' . $entry->getLineNumber(); - } - - /** - * Extracts the character used to separate the entry's name from its member. - * - * @private - * @memberOf Generator - * @param {Number|Object} $entry The entry object. - * @returns {String} The separator. - */ - private function getSeparator( $entry ) { - $entry = is_numeric($entry) ? $this->entries($entry) : $entry; - return $entry->isPlugin() ? '.prototype.' : '.'; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Generates Markdown from JSDoc entries. - * - * @memberOf Generator - * @returns {String} The rendered Markdown. - */ - public function generate() { - $api = array(); - $byCategory = $this->options['toc'] == 'categories'; - $categories = array(); - $closeTag = $this->closeTag; - $compiling = false; - $openTag = $this->openTag; - $result = array('# ' . $this->options['title']); - $toc = 'toc'; - - // initialize $api array - foreach ($this->entries as $entry) { - // skip invalid or private entries - $name = $entry->getName(); - if (!$name || $entry->isPrivate()) { - continue; - } - - $members = $entry->getMembers(); - $members = count($members) ? $members : array(''); - - foreach ($members as $member) { - // create api category arrays - if ($member && !isset($api[$member])) { - // create temporary entry to be replaced later - $api[$member] = new stdClass; - $api[$member]->static = array(); - $api[$member]->plugin = array(); - } - - // append entry to api member - if (!$member || $entry->isCtor() || ($entry->getType() == 'Object' && - !preg_match('/[=:]\s*(?:null|undefined)\s*[,;]?$/', $entry->entry))) { - - // assign the real entry, replacing the temporary entry if it exist - $member = ($member ? $member . ($entry->isPlugin() ? '#' : '.') : '') . $name; - $entry->static = @$api[$member] ? $api[$member]->static : array(); - $entry->plugin = @$api[$member] ? $api[$member]->plugin : array(); - - $api[$member] = $entry; - foreach ($entry->getAliases() as $alias) { - $api[$member]->static[] = $alias; - } - } - else if ($entry->isStatic()) { - $api[$member]->static[] = $entry; - foreach ($entry->getAliases() as $alias) { - $api[$member]->static[] = $alias; - } - } - else if (!$entry->isCtor()) { - $api[$member]->plugin[] = $entry; - foreach ($entry->getAliases() as $alias) { - $api[$member]->plugin[] = $alias; - } - } - } - } - - // add properties to each entry - foreach ($api as $entry) { - $entry->hash = $this->getHash($entry); - $entry->href = $this->getLineUrl($entry); - - $member = $entry->getMembers(0); - $member = ($member ? $member . ($entry->isPlugin() ? '.prototype.' : '.') : '') . $entry->getName(); - $entry->member = preg_replace('/' . $entry->getName() . '$/', '', $member); - - // add properties to static and plugin sub-entries - foreach (array('static', 'plugin') as $kind) { - foreach ($entry->{$kind} as $subentry) { - $subentry->hash = $this->getHash($subentry); - $subentry->href = $this->getLineUrl($subentry); - $subentry->member = $member; - $subentry->separator = $this->getSeparator($subentry); - } - } - } - - /*------------------------------------------------------------------------*/ - - // custom sort for root level entries - // TODO: see how well it handles deeper namespace traversal - function sortCompare($a, $b) { - $score = array( 'a' => 0, 'b' => 0); - foreach (array( 'a' => $a, 'b' => $b) as $key => $value) { - // capitalized properties are last - if (preg_match('/[#.][A-Z]/', $value)) { - $score[$key] = 0; - } - // lowercase prototype properties are next to last - else if (preg_match('/#[a-z]/', $value)) { - $score[$key] = 1; - } - // lowercase static properties next to first - else if (preg_match('/\.[a-z]/', $value)) { - $score[$key] = 2; - } - // root properties are first - else if (preg_match('/^[^#.]+$/', $value)) { - $score[$key] = 3; - } - } - $score = $score['b'] - $score['a']; - return $score ? $score : strcasecmp($a, $b); - } - - uksort($api, 'sortCompare'); - - // sort static and plugin sub-entries - foreach ($api as $entry) { - foreach (array('static', 'plugin') as $kind) { - $sortBy = array( 'a' => array(), 'b' => array(), 'c' => array() ); - foreach ($entry->{$kind} as $subentry) { - $name = $subentry->getName(); - // functions w/o ALL-CAPs names are last - $sortBy['a'][] = $subentry->getType() == 'Function' && !preg_match('/^[A-Z_]+$/', $name); - // ALL-CAPs properties first - $sortBy['b'][] = preg_match('/^[A-Z_]+$/', $name); - // lowercase alphanumeric sort - $sortBy['c'][] = strtolower($name); - } - array_multisort($sortBy['a'], SORT_ASC, $sortBy['b'], SORT_DESC, $sortBy['c'], SORT_ASC, $entry->{$kind}); - } - } - - /*------------------------------------------------------------------------*/ - - // add categories - foreach ($api as $entry) { - $categories[$entry->getCategory()][] = $entry; - foreach (array('static', 'plugin') as $kind) { - foreach ($entry->{$kind} as $subentry) { - $categories[$subentry->getCategory()][] = $subentry; - } - } - } - - // sort categories - ksort($categories); - - foreach(array('Methods', 'Properties') as $category) { - if (isset($categories[$category])) { - $entries = $categories[$category]; - unset($categories[$category]); - $categories[$category] = $entries; - } - } - - /*------------------------------------------------------------------------*/ - - // compile TOC - $result[] = $openTag; - - // compile TOC by categories - if ($byCategory) { - foreach ($categories as $category => $entries) { - if ($compiling) { - $result[] = $closeTag; - } else { - $compiling = true; - } - // assign TOC hash - if (count($result) == 2) { - $toc = $category; - } - // add category - array_push( - $result, - $openTag, '## ' . (count($result) == 2 ? '<a id="' . $toc . '"></a>' : '') . '`' . $category . '`' - ); - // add entries - foreach ($entries as $entry) { - $result[] = Generator::interpolate('* [`#{member}#{separator}#{name}`](##{hash})', $entry); - } - } - } - // compile TOC by namespace - else { - foreach ($api as $entry) { - if ($compiling) { - $result[] = $closeTag; - } else { - $compiling = true; - } - $member = $entry->member . $entry->getName(); - - // assign TOC hash - if (count($result) == 2) { - $toc = $member; - } - // add root entry - array_push( - $result, - $openTag, '## ' . (count($result) == 2 ? '<a id="' . $toc . '"></a>' : '') . '`' . $member . '`', - Generator::interpolate('* [`' . $member . '`](##{hash})', $entry) - ); - - // add static and plugin sub-entries - foreach (array('static', 'plugin') as $kind) { - if ($kind == 'plugin' && count($entry->plugin)) { - array_push( - $result, - $closeTag, - $openTag, - '## `' . $member . ($entry->isCtor() ? '.prototype`' : '`') - ); - } - foreach ($entry->{$kind} as $subentry) { - $subentry->member = $member; - $result[] = Generator::interpolate('* [`#{member}#{separator}#{name}`](##{hash})', $subentry); - } - } - } - } - - array_push($result, $closeTag, $closeTag); - - /*------------------------------------------------------------------------*/ - - // compile content - $compiling = false; - $result[] = $openTag; - - if ($byCategory) { - foreach ($categories as $category => $entries) { - if ($compiling) { - $result[] = $closeTag; - } else { - $compiling = true; - } - if ($category != 'Methods' && $category != 'Properties') { - $category = '“' . $category . '” Methods'; - } - array_push($result, $openTag, '## `' . $category . '`'); - $this->addEntries($result, $entries); - } - } - else { - foreach ($api as $entry) { - // skip aliases - if ($entry->isAlias()) { - continue; - } - if ($compiling) { - $result[] = $closeTag; - } else { - $compiling = true; - } - // add root entry name - $member = $entry->member . $entry->getName(); - array_push($result, $openTag, '## `' . $member . '`'); - - foreach (array($entry, 'static', 'plugin') as $kind) { - $subentries = is_string($kind) ? $entry->{$kind} : array($kind); - - // add sub-entry name - if ($kind != 'static' && $entry->getType() != 'Object' && - count($subentries) && $subentries[0] != $kind) { - if ($kind == 'plugin') { - $result[] = $closeTag; - } - array_push( - $result, - $openTag, - '## `' . $member . ($kind == 'plugin' ? '.prototype`' : '`') - ); - } - $this->addEntries($result, $subentries); - } - } - } - - // close tags add TOC link reference - array_push($result, $closeTag, $closeTag, '', ' [1]: #' . $toc . ' "Jump back to the TOC."'); - - // cleanup whitespace - return trim(preg_replace('/[\t ]+\n/', "\n", join($result, "\n"))); - } -} -?> diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/package.json deleted file mode 100644 index 167c7c6a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "author": { - "name": "Jeremy Stashewsky", - "email": "jeremy@goinstant.com", - "url": "https://github.com/stash" - }, - "name": "tough-cookie", - "description": "RFC6265 Cookies and Cookie Jar for node.js", - "keywords": [ - "HTTP", - "cookie", - "cookies", - "set-cookie", - "cookiejar", - "jar", - "RFC6265", - "RFC2965" - ], - "version": "0.9.15", - "homepage": "https://github.com/goinstant/node-cookie", - "repository": { - "type": "git", - "url": "git://github.com/goinstant/node-cookie.git" - }, - "bugs": { - "url": "https://github.com/goinstant/node-cookie/issues" - }, - "main": "./lib/cookie", - "scripts": { - "test": "vows test.js" - }, - "engines": { - "node": ">=0.4.12" - }, - "dependencies": { - "punycode": ">=0.2.0" - }, - "devDependencies": { - "vows": ">=0.6.0", - "async": ">=0.1.12" - }, - "readme": "[RFC6265](http://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js\n\n![Tough Cookie](http://www.goinstant.com.s3.amazonaws.com/tough-cookie.jpg)\n\n# Synopsis\n\n``` javascript\nvar cookies = require('tough-cookie'); // note: not 'cookie', 'cookies' or 'node-cookie'\nvar Cookie = cookies.Cookie;\nvar cookie = Cookie.parse(header);\ncookie.value = 'somethingdifferent';\nheader = cookie.toString();\n\nvar cookiejar = new cookies.CookieJar();\ncookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb);\n// ...\ncookiejar.getCookies('http://example.com/otherpath',function(err,cookies) {\n res.headers['cookie'] = cookies.join('; ');\n});\n```\n\n# Installation\n\nIt's _so_ easy!\n\n`npm install tough-cookie`\n\nRequires `punycode`, which should get installed automatically for you. Note that node.js v0.6.2+ bundles punycode by default.\n\nWhy the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken.\n\n# API\n\ncookies\n=======\n\nFunctions on the module you get from `require('tough-cookie')`. All can be used as pure functions and don't need to be \"bound\".\n\nparseDate(string[,strict])\n-----------------\n\nParse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`. If strict is set to true then leading/trailing non-seperator characters around the time part will cause the parsing to fail (e.g. \"Thu, 01 Jan 1970 00:00:010 GMT\" has an extra trailing zero but Chrome, an assumedly RFC-compliant browser, treats this as valid).\n\nformatDate(date)\n----------------\n\nFormat a Date into a RFC1123 string (the RFC6265-recommended format).\n\ncanonicalDomain(str)\n--------------------\n\nTransforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects).\n\ndomainMatch(str,domStr[,canonicalize=true])\n-------------------------------------------\n\nAnswers \"does this real domain match the domain in a cookie?\". The `str` is the \"current\" domain-name and the `domStr` is the \"cookie\" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a \"suffix match\".\n\nThe `canonicalize` parameter will run the other two paramters through `canonicalDomain` or not.\n\ndefaultPath(path)\n-----------------\n\nGiven a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the \"directory\" of a \"file\" in the path, but is specified by Section 5.1.4 of the RFC.\n\nThe `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node's `uri.parse()` output.\n\npathMatch(reqPath,cookiePath)\n-----------------------------\n\nAnswers \"does the request-path path-match a given cookie-path?\" as per RFC6265 Section 5.1.4. Returns a boolean.\n\nThis is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`.\n\nparse(header[,strict=false])\n----------------------------\n\nalias for `Cookie.parse(header[,strict])`\n\nfromJSON(string)\n----------------\n\nalias for `Cookie.fromJSON(string)`\n\ngetPublicSuffix(hostname)\n-------------------------\n\nReturns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it.\n\nFor example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`.\n\nFor further information, see http://publicsuffix.org/. This module derives its list from that site.\n\ncookieCompare(a,b)\n------------------\n\nFor use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). Longest `.path`s go first, then sorted oldest to youngest.\n\n``` javascript\nvar cookies = [ /* unsorted array of Cookie objects */ ];\ncookies = cookies.sort(cookieCompare);\n```\n\npermuteDomain(domain)\n---------------------\n\nGenerates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores.\n\n\npermutePath(path)\n-----------------\n\nGenerates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores.\n\nCookie\n======\n\nCookie.parse(header[,strict=false])\n-----------------------------------\n\nParses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can't be parsed. If in strict mode, returns `undefined` if the cookie doesn't follow the guidelines in section 4 of RFC6265. Generally speaking, strict mode can be used to validate your own generated Set-Cookie headers, but acting as a client you want to be lenient and leave strict mode off.\n\nHere's how to process the Set-Cookie header(s) on a node HTTP/HTTPS response:\n\n``` javascript\nif (res.headers['set-cookie'] instanceof Array)\n cookies = res.headers['set-cookie'].map(Cookie.parse);\nelse\n cookies = [Cookie.parse(res.headers['set-cookie'])];\n```\n\nCookie.fromJSON(string)\n-----------------------\n\nConvert a JSON string to a `Cookie` object. Does a `JSON.parse()` and converts the `.created`, `.lastAccessed` and `.expires` properties into `Date` objects.\n\nProperties\n==========\n\n * _key_ - string - the name or key of the cookie (default \"\")\n * _value_ - string - the value of the cookie (default \"\")\n * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `\"Infinity\"`). See `setExpires()`\n * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `\"Infinity\"` and `\"-Infinity\"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()`\n * _domain_ - string - the `Domain=` attribute of the cookie\n * _path_ - string - the `Path=` of the cookie\n * _secure_ - boolean - the `Secure` cookie flag\n * _httpOnly_ - boolean - the `HttpOnly` cookie flag\n * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside)\n \nAfter a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes:\n\n * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied)\n * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one.\n * _created_ - `Date` - when this cookie was added to the jar\n * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute.\n\nConstruction([{options}])\n------------\n\nReceives an options object that can contain any Cookie properties, uses the default for unspecified properties.\n\n.toString()\n-----------\n\nencode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`.\n\n.cookieString()\n---------------\n\nencode to a Cookie header value (i.e. the `.key` and `.value` properties joined with '=').\n\n.setExpires(String)\n-------------------\n\nsets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can't parse this date string), `.expires` is set to `\"Infinity\"` (a string) is set.\n\n.setMaxAge(number)\n-------------------\n\nsets the maxAge in seconds. Coerces `-Infinity` to `\"-Infinity\"` and `Infinity` to `\"Infinity\"` so it JSON serializes correctly.\n\n.expiryTime([now=Date.now()])\n-----------------------------\n\n.expiryDate([now=Date.now()])\n-----------------------------\n\nexpiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds.\n\nMax-Age takes precedence over Expires (as per the RFC). The `.created` attribute -- or, by default, the `now` paramter -- is used to offset the `.maxAge` attribute.\n\nIf Expires (`.expires`) is set, that's returned.\n\nOtherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for \"Tue, 19 Jan 2038 03:14:07 GMT\" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents).\n\n.TTL([now=Date.now()])\n---------\n\ncompute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply.\n\nThe \"number\" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned.\n\n.canonicalizedDoman()\n---------------------\n\n.cdomain()\n----------\n\nreturn the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters.\n\n.validate()\n-----------\n\nStatus: *IN PROGRESS*. Works for a few things, but is by no means comprehensive.\n\nvalidates cookie attributes for semantic correctness. Useful for \"lint\" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct:\n\n``` javascript\nif (cookie.validate() === true) {\n // it's tasty\n} else {\n // yuck!\n}\n```\n\nCookieJar\n=========\n\nConstruction([store = new MemoryCookieStore()][, rejectPublicSuffixes])\n------------\n\nSimply use `new CookieJar()`. If you'd like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used.\n\n\nAttributes\n----------\n\n * _rejectPublicSuffixes_ - boolean - reject cookies with domains like \"com\" and \"co.uk\" (default: `true`)\n \nSince eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods.\n\n.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie))\n-------------------------------------------------------------------\n\nAttempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.created`, `.lastAccessed` and `.hostOnly` properties.\n\nThe `options` object can be omitted and can have the following properties:\n\n * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies.\n * _secure_ - boolean - autodetect from url - indicates if this is a \"Secure\" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`.\n * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies\n * _strict_ - boolean - default `false` - perform extra checks\n * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. CookieStore errors aren't ignored by this option.\n\nAs per the RFC, the `.hostOnly` property is set if there was no \"Domain=\" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual).\n\n.storeCookie(cookie, [{options},] cb(err,cookie))\n-------------------------------------------------\n\n__REMOVED__ removed in lieu of the CookieStore API below\n \n.getCookies(currentUrl, [{options},] cb(err,cookies))\n-----------------------------------------------------\n\nRetrieve the list of cookies that can be sent in a Cookie header for the current url.\n\nIf an error is encountered, that's passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given.\n\nThe `options` object can be omitted and can have the following properties:\n\n * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies.\n * _secure_ - boolean - autodetect from url - indicates if this is a \"Secure\" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`.\n * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies\n * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially).\n * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the CookieStore `fetchCookies` function (the default MemoryCookieStore supports it).\n\nThe `.lastAccessed` property of the returned cookies will have been updated.\n\n.getCookieString(...)\n---------------------\n\nAccepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`.\n\n.getSetCookieStrings(...)\n-------------------------\n\nAccepts the same options as `.getCookies()` but passes an array of strings suitable for Set-Cookie headers (rather than an array of `Cookie`s) to the callback. Simply maps the cookie array via `.toString()`.\n\n# CookieStore API\n\nThe storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores.\n\nAll `domain` parameters will have been normalized before calling.\n\nThe Cookie store must have all of the following methods.\n\nstore.findCookie(domain, path, key, cb(err,cookie))\n---------------------------------------------------\n\nRetrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned.\n\nCallback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error).\n\nstore.findCookies(domain, path, cb(err,cookies))\n------------------------------------------------\n\nLocates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above.\n\nIf no cookies are found, the callback MUST be passed an empty array.\n\nThe resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it's OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done.\n\nAs of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only).\n\nstore.putCookie(cookie, cb(err))\n--------------------------------\n\nAdds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it's possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur.\n\nThe `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties.\n\nPass an error if the cookie cannot be stored.\n\nstore.updateCookie(oldCookie, newCookie, cb(err))\n-------------------------------------------------\n\nUpdate an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store.\n\nThe `.lastAccessed` property will always be different between the two objects and `.created` will always be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are sorted (or selected for deletion).\n\nStores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn't define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object.\n\nThe `newCookie` and `oldCookie` objects MUST NOT be modified.\n\nPass an error if the newCookie cannot be stored.\n\nstore.removeCookie(domain, path, key, cb(err))\n----------------------------------------------\n\nRemove a cookie from the store (see notes on `findCookie` about the uniqueness constraint).\n\nThe implementation MUST NOT pass an error if the cookie doesn't exist; only pass an error due to the failure to remove an existing cookie.\n\nstore.removeCookies(domain, path, cb(err))\n------------------------------------------\n\nRemoves matching cookies from the store. The `path` paramter is optional, and if missing means all paths in a domain should be removed.\n\nPass an error ONLY if removing any existing cookies failed.\n\n# TODO\n\n * _full_ RFC5890/RFC5891 canonicalization for domains in `cdomain()`\n * the optional `punycode` requirement implements RFC3492, but RFC6265 requires RFC5891\n * better tests for `validate()`?\n\n# Copyright and License\n\n(tl;dr: MIT with some MPL/1.1)\n\nCopyright GoInstant, Inc. and other contributors. All rights reserved.\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n\nPortions may be licensed under different licenses (in particular public-suffix.txt is MPL/1.1); please read the LICENSE file for full details.\n", - "readmeFilename": "README.md", - "_id": "tough-cookie@0.9.15", - "dist": { - "shasum": "0fbda7fb5b5bca17e4f97909a0818dc8c2c12588" - }, - "_from": "tough-cookie@~0.9.15", - "_resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.9.15.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/public-suffix.txt b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/public-suffix.txt deleted file mode 100644 index 2c201312..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/public-suffix.txt +++ /dev/null @@ -1,5229 +0,0 @@ -// ***** BEGIN LICENSE BLOCK ***** -// Version: MPL 1.1/GPL 2.0/LGPL 2.1 -// -// The contents of this file are subject to the Mozilla Public License Version -// 1.1 (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// http://www.mozilla.org/MPL/ -// -// Software distributed under the License is distributed on an "AS IS" basis, -// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -// for the specific language governing rights and limitations under the -// License. -// -// The Original Code is the Public Suffix List. -// -// The Initial Developer of the Original Code is -// Jo Hermans <jo.hermans@gmail.com>. -// Portions created by the Initial Developer are Copyright (C) 2007 -// the Initial Developer. All Rights Reserved. -// -// Contributor(s): -// Ruben Arakelyan <ruben@rubenarakelyan.com> -// Gervase Markham <gerv@gerv.net> -// Pamela Greene <pamg.bugs@gmail.com> -// David Triendl <david@triendl.name> -// Jothan Frakes <jothan@gmail.com> -// The kind representatives of many TLD registries -// -// Alternatively, the contents of this file may be used under the terms of -// either the GNU General Public License Version 2 or later (the "GPL"), or -// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -// in which case the provisions of the GPL or the LGPL are applicable instead -// of those above. If you wish to allow use of your version of this file only -// under the terms of either the GPL or the LGPL, and not to allow others to -// use your version of this file under the terms of the MPL, indicate your -// decision by deleting the provisions above and replace them with the notice -// and other provisions required by the GPL or the LGPL. If you do not delete -// the provisions above, a recipient may use your version of this file under -// the terms of any one of the MPL, the GPL or the LGPL. -// -// ***** END LICENSE BLOCK ***** - -// ===BEGIN ICANN DOMAINS=== - -// ac : http://en.wikipedia.org/wiki/.ac -ac -com.ac -edu.ac -gov.ac -net.ac -mil.ac -org.ac - -// ad : http://en.wikipedia.org/wiki/.ad -ad -nom.ad - -// ae : http://en.wikipedia.org/wiki/.ae -// see also: "Domain Name Eligibility Policy" at http://www.aeda.ae/eng/aepolicy.php -ae -co.ae -net.ae -org.ae -sch.ae -ac.ae -gov.ae -mil.ae - -// aero : see http://www.information.aero/index.php?id=66 -aero -accident-investigation.aero -accident-prevention.aero -aerobatic.aero -aeroclub.aero -aerodrome.aero -agents.aero -aircraft.aero -airline.aero -airport.aero -air-surveillance.aero -airtraffic.aero -air-traffic-control.aero -ambulance.aero -amusement.aero -association.aero -author.aero -ballooning.aero -broker.aero -caa.aero -cargo.aero -catering.aero -certification.aero -championship.aero -charter.aero -civilaviation.aero -club.aero -conference.aero -consultant.aero -consulting.aero -control.aero -council.aero -crew.aero -design.aero -dgca.aero -educator.aero -emergency.aero -engine.aero -engineer.aero -entertainment.aero -equipment.aero -exchange.aero -express.aero -federation.aero -flight.aero -freight.aero -fuel.aero -gliding.aero -government.aero -groundhandling.aero -group.aero -hanggliding.aero -homebuilt.aero -insurance.aero -journal.aero -journalist.aero -leasing.aero -logistics.aero -magazine.aero -maintenance.aero -marketplace.aero -media.aero -microlight.aero -modelling.aero -navigation.aero -parachuting.aero -paragliding.aero -passenger-association.aero -pilot.aero -press.aero -production.aero -recreation.aero -repbody.aero -res.aero -research.aero -rotorcraft.aero -safety.aero -scientist.aero -services.aero -show.aero -skydiving.aero -software.aero -student.aero -taxi.aero -trader.aero -trading.aero -trainer.aero -union.aero -workinggroup.aero -works.aero - -// af : http://www.nic.af/help.jsp -af -gov.af -com.af -org.af -net.af -edu.af - -// ag : http://www.nic.ag/prices.htm -ag -com.ag -org.ag -net.ag -co.ag -nom.ag - -// ai : http://nic.com.ai/ -ai -off.ai -com.ai -net.ai -org.ai - -// al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31 -al -com.al -edu.al -gov.al -mil.al -net.al -org.al - -// am : http://en.wikipedia.org/wiki/.am -am - -// an : http://www.una.an/an_domreg/default.asp -an -com.an -net.an -org.an -edu.an - -// ao : http://en.wikipedia.org/wiki/.ao -// http://www.dns.ao/REGISTR.DOC -ao -ed.ao -gv.ao -og.ao -co.ao -pb.ao -it.ao - -// aq : http://en.wikipedia.org/wiki/.aq -aq - -// ar : http://en.wikipedia.org/wiki/.ar -*.ar -!congresodelalengua3.ar -!educ.ar -!gobiernoelectronico.ar -!mecon.ar -!nacion.ar -!nic.ar -!promocion.ar -!retina.ar -!uba.ar - -// arpa : http://en.wikipedia.org/wiki/.arpa -// Confirmed by registry <iana-questions@icann.org> 2008-06-18 -e164.arpa -in-addr.arpa -ip6.arpa -iris.arpa -uri.arpa -urn.arpa - -// as : http://en.wikipedia.org/wiki/.as -as -gov.as - -// asia : http://en.wikipedia.org/wiki/.asia -asia - -// at : http://en.wikipedia.org/wiki/.at -// Confirmed by registry <it@nic.at> 2008-06-17 -at -ac.at -co.at -gv.at -or.at - -// au : http://en.wikipedia.org/wiki/.au -// http://www.auda.org.au/ -// 2LDs -com.au -net.au -org.au -edu.au -gov.au -csiro.au -asn.au -id.au -// Historic 2LDs (closed to new registration, but sites still exist) -info.au -conf.au -oz.au -// CGDNs - http://www.cgdn.org.au/ -act.au -nsw.au -nt.au -qld.au -sa.au -tas.au -vic.au -wa.au -// 3LDs -act.edu.au -nsw.edu.au -nt.edu.au -qld.edu.au -sa.edu.au -tas.edu.au -vic.edu.au -wa.edu.au -act.gov.au -// Removed at request of Shae.Donelan@services.nsw.gov.au, 2010-03-04 -// nsw.gov.au -nt.gov.au -qld.gov.au -sa.gov.au -tas.gov.au -vic.gov.au -wa.gov.au - -// aw : http://en.wikipedia.org/wiki/.aw -aw -com.aw - -// ax : http://en.wikipedia.org/wiki/.ax -ax - -// az : http://en.wikipedia.org/wiki/.az -az -com.az -net.az -int.az -gov.az -org.az -edu.az -info.az -pp.az -mil.az -name.az -pro.az -biz.az - -// ba : http://en.wikipedia.org/wiki/.ba -ba -org.ba -net.ba -edu.ba -gov.ba -mil.ba -unsa.ba -unbi.ba -co.ba -com.ba -rs.ba - -// bb : http://en.wikipedia.org/wiki/.bb -bb -biz.bb -com.bb -edu.bb -gov.bb -info.bb -net.bb -org.bb -store.bb - -// bd : http://en.wikipedia.org/wiki/.bd -*.bd - -// be : http://en.wikipedia.org/wiki/.be -// Confirmed by registry <tech@dns.be> 2008-06-08 -be -ac.be - -// bf : http://en.wikipedia.org/wiki/.bf -bf -gov.bf - -// bg : http://en.wikipedia.org/wiki/.bg -// https://www.register.bg/user/static/rules/en/index.html -bg -a.bg -b.bg -c.bg -d.bg -e.bg -f.bg -g.bg -h.bg -i.bg -j.bg -k.bg -l.bg -m.bg -n.bg -o.bg -p.bg -q.bg -r.bg -s.bg -t.bg -u.bg -v.bg -w.bg -x.bg -y.bg -z.bg -0.bg -1.bg -2.bg -3.bg -4.bg -5.bg -6.bg -7.bg -8.bg -9.bg - -// bh : http://en.wikipedia.org/wiki/.bh -bh -com.bh -edu.bh -net.bh -org.bh -gov.bh - -// bi : http://en.wikipedia.org/wiki/.bi -// http://whois.nic.bi/ -bi -co.bi -com.bi -edu.bi -or.bi -org.bi - -// biz : http://en.wikipedia.org/wiki/.biz -biz - -// bj : http://en.wikipedia.org/wiki/.bj -bj -asso.bj -barreau.bj -gouv.bj - -// bm : http://www.bermudanic.bm/dnr-text.txt -bm -com.bm -edu.bm -gov.bm -net.bm -org.bm - -// bn : http://en.wikipedia.org/wiki/.bn -*.bn - -// bo : http://www.nic.bo/ -bo -com.bo -edu.bo -gov.bo -gob.bo -int.bo -org.bo -net.bo -mil.bo -tv.bo - -// br : http://registro.br/dominio/dpn.html -// Updated by registry <fneves@registro.br> 2011-03-01 -br -adm.br -adv.br -agr.br -am.br -arq.br -art.br -ato.br -b.br -bio.br -blog.br -bmd.br -can.br -cim.br -cng.br -cnt.br -com.br -coop.br -ecn.br -edu.br -emp.br -eng.br -esp.br -etc.br -eti.br -far.br -flog.br -fm.br -fnd.br -fot.br -fst.br -g12.br -ggf.br -gov.br -imb.br -ind.br -inf.br -jor.br -jus.br -lel.br -mat.br -med.br -mil.br -mus.br -net.br -nom.br -not.br -ntr.br -odo.br -org.br -ppg.br -pro.br -psc.br -psi.br -qsl.br -radio.br -rec.br -slg.br -srv.br -taxi.br -teo.br -tmp.br -trd.br -tur.br -tv.br -vet.br -vlog.br -wiki.br -zlg.br - -// bs : http://www.nic.bs/rules.html -bs -com.bs -net.bs -org.bs -edu.bs -gov.bs - -// bt : http://en.wikipedia.org/wiki/.bt -bt -com.bt -edu.bt -gov.bt -net.bt -org.bt - -// bv : No registrations at this time. -// Submitted by registry <jarle@uninett.no> 2006-06-16 - -// bw : http://en.wikipedia.org/wiki/.bw -// http://www.gobin.info/domainname/bw.doc -// list of other 2nd level tlds ? -bw -co.bw -org.bw - -// by : http://en.wikipedia.org/wiki/.by -// http://tld.by/rules_2006_en.html -// list of other 2nd level tlds ? -by -gov.by -mil.by -// Official information does not indicate that com.by is a reserved -// second-level domain, but it's being used as one (see www.google.com.by and -// www.yahoo.com.by, for example), so we list it here for safety's sake. -com.by - -// http://hoster.by/ -of.by - -// bz : http://en.wikipedia.org/wiki/.bz -// http://www.belizenic.bz/ -bz -com.bz -net.bz -org.bz -edu.bz -gov.bz - -// ca : http://en.wikipedia.org/wiki/.ca -ca -// ca geographical names -ab.ca -bc.ca -mb.ca -nb.ca -nf.ca -nl.ca -ns.ca -nt.ca -nu.ca -on.ca -pe.ca -qc.ca -sk.ca -yk.ca -// gc.ca: http://en.wikipedia.org/wiki/.gc.ca -// see also: http://registry.gc.ca/en/SubdomainFAQ -gc.ca - -// cat : http://en.wikipedia.org/wiki/.cat -cat - -// cc : http://en.wikipedia.org/wiki/.cc -cc - -// cd : http://en.wikipedia.org/wiki/.cd -// see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1 -cd -gov.cd - -// cf : http://en.wikipedia.org/wiki/.cf -cf - -// cg : http://en.wikipedia.org/wiki/.cg -cg - -// ch : http://en.wikipedia.org/wiki/.ch -ch - -// ci : http://en.wikipedia.org/wiki/.ci -// http://www.nic.ci/index.php?page=charte -ci -org.ci -or.ci -com.ci -co.ci -edu.ci -ed.ci -ac.ci -net.ci -go.ci -asso.ci -aéroport.ci -int.ci -presse.ci -md.ci -gouv.ci - -// ck : http://en.wikipedia.org/wiki/.ck -*.ck -!www.ck - -// cl : http://en.wikipedia.org/wiki/.cl -cl -gov.cl -gob.cl -co.cl -mil.cl - -// cm : http://en.wikipedia.org/wiki/.cm -cm -gov.cm - -// cn : http://en.wikipedia.org/wiki/.cn -// Submitted by registry <tanyaling@cnnic.cn> 2008-06-11 -cn -ac.cn -com.cn -edu.cn -gov.cn -net.cn -org.cn -mil.cn -公司.cn -网络.cn -網絡.cn -// cn geographic names -ah.cn -bj.cn -cq.cn -fj.cn -gd.cn -gs.cn -gz.cn -gx.cn -ha.cn -hb.cn -he.cn -hi.cn -hl.cn -hn.cn -jl.cn -js.cn -jx.cn -ln.cn -nm.cn -nx.cn -qh.cn -sc.cn -sd.cn -sh.cn -sn.cn -sx.cn -tj.cn -xj.cn -xz.cn -yn.cn -zj.cn -hk.cn -mo.cn -tw.cn - -// co : http://en.wikipedia.org/wiki/.co -// Submitted by registry <tecnico@uniandes.edu.co> 2008-06-11 -co -arts.co -com.co -edu.co -firm.co -gov.co -info.co -int.co -mil.co -net.co -nom.co -org.co -rec.co -web.co - -// com : http://en.wikipedia.org/wiki/.com -com - -// coop : http://en.wikipedia.org/wiki/.coop -coop - -// cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do -cr -ac.cr -co.cr -ed.cr -fi.cr -go.cr -or.cr -sa.cr - -// cu : http://en.wikipedia.org/wiki/.cu -cu -com.cu -edu.cu -org.cu -net.cu -gov.cu -inf.cu - -// cv : http://en.wikipedia.org/wiki/.cv -cv - -// cx : http://en.wikipedia.org/wiki/.cx -// list of other 2nd level tlds ? -cx -gov.cx - -// cy : http://en.wikipedia.org/wiki/.cy -*.cy - -// cz : http://en.wikipedia.org/wiki/.cz -cz - -// de : http://en.wikipedia.org/wiki/.de -// Confirmed by registry <ops@denic.de> (with technical -// reservations) 2008-07-01 -de - -// dj : http://en.wikipedia.org/wiki/.dj -dj - -// dk : http://en.wikipedia.org/wiki/.dk -// Confirmed by registry <robert@dk-hostmaster.dk> 2008-06-17 -dk - -// dm : http://en.wikipedia.org/wiki/.dm -dm -com.dm -net.dm -org.dm -edu.dm -gov.dm - -// do : http://en.wikipedia.org/wiki/.do -do -art.do -com.do -edu.do -gob.do -gov.do -mil.do -net.do -org.do -sld.do -web.do - -// dz : http://en.wikipedia.org/wiki/.dz -dz -com.dz -org.dz -net.dz -gov.dz -edu.dz -asso.dz -pol.dz -art.dz - -// ec : http://www.nic.ec/reg/paso1.asp -// Submitted by registry <vabboud@nic.ec> 2008-07-04 -ec -com.ec -info.ec -net.ec -fin.ec -k12.ec -med.ec -pro.ec -org.ec -edu.ec -gov.ec -gob.ec -mil.ec - -// edu : http://en.wikipedia.org/wiki/.edu -edu - -// ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B -ee -edu.ee -gov.ee -riik.ee -lib.ee -med.ee -com.ee -pri.ee -aip.ee -org.ee -fie.ee - -// eg : http://en.wikipedia.org/wiki/.eg -eg -com.eg -edu.eg -eun.eg -gov.eg -mil.eg -name.eg -net.eg -org.eg -sci.eg - -// er : http://en.wikipedia.org/wiki/.er -*.er - -// es : https://www.nic.es/site_ingles/ingles/dominios/index.html -es -com.es -nom.es -org.es -gob.es -edu.es - -// et : http://en.wikipedia.org/wiki/.et -*.et - -// eu : http://en.wikipedia.org/wiki/.eu -eu - -// fi : http://en.wikipedia.org/wiki/.fi -fi -// aland.fi : http://en.wikipedia.org/wiki/.ax -// This domain is being phased out in favor of .ax. As there are still many -// domains under aland.fi, we still keep it on the list until aland.fi is -// completely removed. -// TODO: Check for updates (expected to be phased out around Q1/2009) -aland.fi - -// fj : http://en.wikipedia.org/wiki/.fj -*.fj - -// fk : http://en.wikipedia.org/wiki/.fk -*.fk - -// fm : http://en.wikipedia.org/wiki/.fm -fm - -// fo : http://en.wikipedia.org/wiki/.fo -fo - -// fr : http://www.afnic.fr/ -// domaines descriptifs : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-descriptifs -fr -com.fr -asso.fr -nom.fr -prd.fr -presse.fr -tm.fr -// domaines sectoriels : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-sectoriels -aeroport.fr -assedic.fr -avocat.fr -avoues.fr -cci.fr -chambagri.fr -chirurgiens-dentistes.fr -experts-comptables.fr -geometre-expert.fr -gouv.fr -greta.fr -huissier-justice.fr -medecin.fr -notaires.fr -pharmacien.fr -port.fr -veterinaire.fr - -// ga : http://en.wikipedia.org/wiki/.ga -ga - -// gb : This registry is effectively dormant -// Submitted by registry <Damien.Shaw@ja.net> 2008-06-12 - -// gd : http://en.wikipedia.org/wiki/.gd -gd - -// ge : http://www.nic.net.ge/policy_en.pdf -ge -com.ge -edu.ge -gov.ge -org.ge -mil.ge -net.ge -pvt.ge - -// gf : http://en.wikipedia.org/wiki/.gf -gf - -// gg : http://www.channelisles.net/applic/avextn.shtml -gg -co.gg -org.gg -net.gg -sch.gg -gov.gg - -// gh : http://en.wikipedia.org/wiki/.gh -// see also: http://www.nic.gh/reg_now.php -// Although domains directly at second level are not possible at the moment, -// they have been possible for some time and may come back. -gh -com.gh -edu.gh -gov.gh -org.gh -mil.gh - -// gi : http://www.nic.gi/rules.html -gi -com.gi -ltd.gi -gov.gi -mod.gi -edu.gi -org.gi - -// gl : http://en.wikipedia.org/wiki/.gl -// http://nic.gl -gl - -// gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm -gm - -// gn : http://psg.com/dns/gn/gn.txt -// Submitted by registry <randy@psg.com> 2008-06-17 -ac.gn -com.gn -edu.gn -gov.gn -org.gn -net.gn - -// gov : http://en.wikipedia.org/wiki/.gov -gov - -// gp : http://www.nic.gp/index.php?lang=en -gp -com.gp -net.gp -mobi.gp -edu.gp -org.gp -asso.gp - -// gq : http://en.wikipedia.org/wiki/.gq -gq - -// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html -// Submitted by registry <segred@ics.forth.gr> 2008-06-09 -gr -com.gr -edu.gr -net.gr -org.gr -gov.gr - -// gs : http://en.wikipedia.org/wiki/.gs -gs - -// gt : http://www.gt/politicas.html -*.gt -!www.gt - -// gu : http://gadao.gov.gu/registration.txt -*.gu - -// gw : http://en.wikipedia.org/wiki/.gw -gw - -// gy : http://en.wikipedia.org/wiki/.gy -// http://registry.gy/ -gy -co.gy -com.gy -net.gy - -// hk : https://www.hkdnr.hk -// Submitted by registry <hk.tech@hkirc.hk> 2008-06-11 -hk -com.hk -edu.hk -gov.hk -idv.hk -net.hk -org.hk -公司.hk -教育.hk -敎育.hk -政府.hk -個人.hk -个人.hk -箇人.hk -網络.hk -网络.hk -组織.hk -網絡.hk -网絡.hk -组织.hk -組織.hk -組织.hk - -// hm : http://en.wikipedia.org/wiki/.hm -hm - -// hn : http://www.nic.hn/politicas/ps02,,05.html -hn -com.hn -edu.hn -org.hn -net.hn -mil.hn -gob.hn - -// hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf -hr -iz.hr -from.hr -name.hr -com.hr - -// ht : http://www.nic.ht/info/charte.cfm -ht -com.ht -shop.ht -firm.ht -info.ht -adult.ht -net.ht -pro.ht -org.ht -med.ht -art.ht -coop.ht -pol.ht -asso.ht -edu.ht -rel.ht -gouv.ht -perso.ht - -// hu : http://www.domain.hu/domain/English/sld.html -// Confirmed by registry <pasztor@iszt.hu> 2008-06-12 -hu -co.hu -info.hu -org.hu -priv.hu -sport.hu -tm.hu -2000.hu -agrar.hu -bolt.hu -casino.hu -city.hu -erotica.hu -erotika.hu -film.hu -forum.hu -games.hu -hotel.hu -ingatlan.hu -jogasz.hu -konyvelo.hu -lakas.hu -media.hu -news.hu -reklam.hu -sex.hu -shop.hu -suli.hu -szex.hu -tozsde.hu -utazas.hu -video.hu - -// id : http://en.wikipedia.org/wiki/.id -// see also: https://register.pandi.or.id/ -id -ac.id -co.id -go.id -mil.id -net.id -or.id -sch.id -web.id - -// ie : http://en.wikipedia.org/wiki/.ie -ie -gov.ie - -// il : http://en.wikipedia.org/wiki/.il -*.il - -// im : https://www.nic.im/pdfs/imfaqs.pdf -im -co.im -ltd.co.im -plc.co.im -net.im -gov.im -org.im -nic.im -ac.im - -// in : http://en.wikipedia.org/wiki/.in -// see also: http://www.inregistry.in/policies/ -// Please note, that nic.in is not an offical eTLD, but used by most -// government institutions. -in -co.in -firm.in -net.in -org.in -gen.in -ind.in -nic.in -ac.in -edu.in -res.in -gov.in -mil.in - -// info : http://en.wikipedia.org/wiki/.info -info - -// int : http://en.wikipedia.org/wiki/.int -// Confirmed by registry <iana-questions@icann.org> 2008-06-18 -int -eu.int - -// io : http://www.nic.io/rules.html -// list of other 2nd level tlds ? -io -com.io - -// iq : http://www.cmc.iq/english/iq/iqregister1.htm -iq -gov.iq -edu.iq -mil.iq -com.iq -org.iq -net.iq - -// ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules -// Also see http://www.nic.ir/Internationalized_Domain_Names -// Two <iran>.ir entries added at request of <tech-team@nic.ir>, 2010-04-16 -ir -ac.ir -co.ir -gov.ir -id.ir -net.ir -org.ir -sch.ir -// xn--mgba3a4f16a.ir (<iran>.ir, Persian YEH) -ایران.ir -// xn--mgba3a4fra.ir (<iran>.ir, Arabic YEH) -ايران.ir - -// is : http://www.isnic.is/domain/rules.php -// Confirmed by registry <marius@isgate.is> 2008-12-06 -is -net.is -com.is -edu.is -gov.is -org.is -int.is - -// it : http://en.wikipedia.org/wiki/.it -it -gov.it -edu.it -// list of reserved geo-names : -// http://www.nic.it/documenti/regolamenti-e-linee-guida/regolamento-assegnazione-versione-6.0.pdf -// (There is also a list of reserved geo-names corresponding to Italian -// municipalities : http://www.nic.it/documenti/appendice-c.pdf , but it is -// not included here.) -agrigento.it -ag.it -alessandria.it -al.it -ancona.it -an.it -aosta.it -aoste.it -ao.it -arezzo.it -ar.it -ascoli-piceno.it -ascolipiceno.it -ap.it -asti.it -at.it -avellino.it -av.it -bari.it -ba.it -andria-barletta-trani.it -andriabarlettatrani.it -trani-barletta-andria.it -tranibarlettaandria.it -barletta-trani-andria.it -barlettatraniandria.it -andria-trani-barletta.it -andriatranibarletta.it -trani-andria-barletta.it -traniandriabarletta.it -bt.it -belluno.it -bl.it -benevento.it -bn.it -bergamo.it -bg.it -biella.it -bi.it -bologna.it -bo.it -bolzano.it -bozen.it -balsan.it -alto-adige.it -altoadige.it -suedtirol.it -bz.it -brescia.it -bs.it -brindisi.it -br.it -cagliari.it -ca.it -caltanissetta.it -cl.it -campobasso.it -cb.it -carboniaiglesias.it -carbonia-iglesias.it -iglesias-carbonia.it -iglesiascarbonia.it -ci.it -caserta.it -ce.it -catania.it -ct.it -catanzaro.it -cz.it -chieti.it -ch.it -como.it -co.it -cosenza.it -cs.it -cremona.it -cr.it -crotone.it -kr.it -cuneo.it -cn.it -dell-ogliastra.it -dellogliastra.it -ogliastra.it -og.it -enna.it -en.it -ferrara.it -fe.it -fermo.it -fm.it -firenze.it -florence.it -fi.it -foggia.it -fg.it -forli-cesena.it -forlicesena.it -cesena-forli.it -cesenaforli.it -fc.it -frosinone.it -fr.it -genova.it -genoa.it -ge.it -gorizia.it -go.it -grosseto.it -gr.it -imperia.it -im.it -isernia.it -is.it -laquila.it -aquila.it -aq.it -la-spezia.it -laspezia.it -sp.it -latina.it -lt.it -lecce.it -le.it -lecco.it -lc.it -livorno.it -li.it -lodi.it -lo.it -lucca.it -lu.it -macerata.it -mc.it -mantova.it -mn.it -massa-carrara.it -massacarrara.it -carrara-massa.it -carraramassa.it -ms.it -matera.it -mt.it -medio-campidano.it -mediocampidano.it -campidano-medio.it -campidanomedio.it -vs.it -messina.it -me.it -milano.it -milan.it -mi.it -modena.it -mo.it -monza.it -monza-brianza.it -monzabrianza.it -monzaebrianza.it -monzaedellabrianza.it -monza-e-della-brianza.it -mb.it -napoli.it -naples.it -na.it -novara.it -no.it -nuoro.it -nu.it -oristano.it -or.it -padova.it -padua.it -pd.it -palermo.it -pa.it -parma.it -pr.it -pavia.it -pv.it -perugia.it -pg.it -pescara.it -pe.it -pesaro-urbino.it -pesarourbino.it -urbino-pesaro.it -urbinopesaro.it -pu.it -piacenza.it -pc.it -pisa.it -pi.it -pistoia.it -pt.it -pordenone.it -pn.it -potenza.it -pz.it -prato.it -po.it -ragusa.it -rg.it -ravenna.it -ra.it -reggio-calabria.it -reggiocalabria.it -rc.it -reggio-emilia.it -reggioemilia.it -re.it -rieti.it -ri.it -rimini.it -rn.it -roma.it -rome.it -rm.it -rovigo.it -ro.it -salerno.it -sa.it -sassari.it -ss.it -savona.it -sv.it -siena.it -si.it -siracusa.it -sr.it -sondrio.it -so.it -taranto.it -ta.it -tempio-olbia.it -tempioolbia.it -olbia-tempio.it -olbiatempio.it -ot.it -teramo.it -te.it -terni.it -tr.it -torino.it -turin.it -to.it -trapani.it -tp.it -trento.it -trentino.it -tn.it -treviso.it -tv.it -trieste.it -ts.it -udine.it -ud.it -varese.it -va.it -venezia.it -venice.it -ve.it -verbania.it -vb.it -vercelli.it -vc.it -verona.it -vr.it -vibo-valentia.it -vibovalentia.it -vv.it -vicenza.it -vi.it -viterbo.it -vt.it - -// je : http://www.channelisles.net/applic/avextn.shtml -je -co.je -org.je -net.je -sch.je -gov.je - -// jm : http://www.com.jm/register.html -*.jm - -// jo : http://www.dns.jo/Registration_policy.aspx -jo -com.jo -org.jo -net.jo -edu.jo -sch.jo -gov.jo -mil.jo -name.jo - -// jobs : http://en.wikipedia.org/wiki/.jobs -jobs - -// jp : http://en.wikipedia.org/wiki/.jp -// http://jprs.co.jp/en/jpdomain.html -// Submitted by registry <yone@jprs.co.jp> 2008-06-11 -// Updated by registry <yone@jprs.co.jp> 2008-12-04 -jp -// jp organizational type names -ac.jp -ad.jp -co.jp -ed.jp -go.jp -gr.jp -lg.jp -ne.jp -or.jp -// jp geographic type names -// http://jprs.jp/doc/rule/saisoku-1.html -*.aichi.jp -*.akita.jp -*.aomori.jp -*.chiba.jp -*.ehime.jp -*.fukui.jp -*.fukuoka.jp -*.fukushima.jp -*.gifu.jp -*.gunma.jp -*.hiroshima.jp -*.hokkaido.jp -*.hyogo.jp -*.ibaraki.jp -*.ishikawa.jp -*.iwate.jp -*.kagawa.jp -*.kagoshima.jp -*.kanagawa.jp -*.kawasaki.jp -*.kitakyushu.jp -*.kobe.jp -*.kochi.jp -*.kumamoto.jp -*.kyoto.jp -*.mie.jp -*.miyagi.jp -*.miyazaki.jp -*.nagano.jp -*.nagasaki.jp -*.nagoya.jp -*.nara.jp -*.niigata.jp -*.oita.jp -*.okayama.jp -*.okinawa.jp -*.osaka.jp -*.saga.jp -*.saitama.jp -*.sapporo.jp -*.sendai.jp -*.shiga.jp -*.shimane.jp -*.shizuoka.jp -*.tochigi.jp -*.tokushima.jp -*.tokyo.jp -*.tottori.jp -*.toyama.jp -*.wakayama.jp -*.yamagata.jp -*.yamaguchi.jp -*.yamanashi.jp -*.yokohama.jp -!metro.tokyo.jp -!pref.aichi.jp -!pref.akita.jp -!pref.aomori.jp -!pref.chiba.jp -!pref.ehime.jp -!pref.fukui.jp -!pref.fukuoka.jp -!pref.fukushima.jp -!pref.gifu.jp -!pref.gunma.jp -!pref.hiroshima.jp -!pref.hokkaido.jp -!pref.hyogo.jp -!pref.ibaraki.jp -!pref.ishikawa.jp -!pref.iwate.jp -!pref.kagawa.jp -!pref.kagoshima.jp -!pref.kanagawa.jp -!pref.kochi.jp -!pref.kumamoto.jp -!pref.kyoto.jp -!pref.mie.jp -!pref.miyagi.jp -!pref.miyazaki.jp -!pref.nagano.jp -!pref.nagasaki.jp -!pref.nara.jp -!pref.niigata.jp -!pref.oita.jp -!pref.okayama.jp -!pref.okinawa.jp -!pref.osaka.jp -!pref.saga.jp -!pref.saitama.jp -!pref.shiga.jp -!pref.shimane.jp -!pref.shizuoka.jp -!pref.tochigi.jp -!pref.tokushima.jp -!pref.tottori.jp -!pref.toyama.jp -!pref.wakayama.jp -!pref.yamagata.jp -!pref.yamaguchi.jp -!pref.yamanashi.jp -!city.chiba.jp -!city.fukuoka.jp -!city.hiroshima.jp -!city.kawasaki.jp -!city.kitakyushu.jp -!city.kobe.jp -!city.kyoto.jp -!city.nagoya.jp -!city.niigata.jp -!city.okayama.jp -!city.osaka.jp -!city.saitama.jp -!city.sapporo.jp -!city.sendai.jp -!city.shizuoka.jp -!city.yokohama.jp - -// ke : http://www.kenic.or.ke/index.php?option=com_content&task=view&id=117&Itemid=145 -*.ke - -// kg : http://www.domain.kg/dmn_n.html -kg -org.kg -net.kg -com.kg -edu.kg -gov.kg -mil.kg - -// kh : http://www.mptc.gov.kh/dns_registration.htm -*.kh - -// ki : http://www.ki/dns/index.html -ki -edu.ki -biz.ki -net.ki -org.ki -gov.ki -info.ki -com.ki - -// km : http://en.wikipedia.org/wiki/.km -// http://www.domaine.km/documents/charte.doc -km -org.km -nom.km -gov.km -prd.km -tm.km -edu.km -mil.km -ass.km -com.km -// These are only mentioned as proposed suggestions at domaine.km, but -// http://en.wikipedia.org/wiki/.km says they're available for registration: -coop.km -asso.km -presse.km -medecin.km -notaires.km -pharmaciens.km -veterinaire.km -gouv.km - -// kn : http://en.wikipedia.org/wiki/.kn -// http://www.dot.kn/domainRules.html -kn -net.kn -org.kn -edu.kn -gov.kn - -// kp : http://www.kcce.kp/en_index.php -com.kp -edu.kp -gov.kp -org.kp -rep.kp -tra.kp - -// kr : http://en.wikipedia.org/wiki/.kr -// see also: http://domain.nida.or.kr/eng/registration.jsp -kr -ac.kr -co.kr -es.kr -go.kr -hs.kr -kg.kr -mil.kr -ms.kr -ne.kr -or.kr -pe.kr -re.kr -sc.kr -// kr geographical names -busan.kr -chungbuk.kr -chungnam.kr -daegu.kr -daejeon.kr -gangwon.kr -gwangju.kr -gyeongbuk.kr -gyeonggi.kr -gyeongnam.kr -incheon.kr -jeju.kr -jeonbuk.kr -jeonnam.kr -seoul.kr -ulsan.kr - -// kw : http://en.wikipedia.org/wiki/.kw -*.kw - -// ky : http://www.icta.ky/da_ky_reg_dom.php -// Confirmed by registry <kysupport@perimeterusa.com> 2008-06-17 -ky -edu.ky -gov.ky -com.ky -org.ky -net.ky - -// kz : http://en.wikipedia.org/wiki/.kz -// see also: http://www.nic.kz/rules/index.jsp -kz -org.kz -edu.kz -net.kz -gov.kz -mil.kz -com.kz - -// la : http://en.wikipedia.org/wiki/.la -// Submitted by registry <gavin.brown@nic.la> 2008-06-10 -la -int.la -net.la -info.la -edu.la -gov.la -per.la -com.la -org.la - -// lb : http://en.wikipedia.org/wiki/.lb -// Submitted by registry <randy@psg.com> 2008-06-17 -com.lb -edu.lb -gov.lb -net.lb -org.lb - -// lc : http://en.wikipedia.org/wiki/.lc -// see also: http://www.nic.lc/rules.htm -lc -com.lc -net.lc -co.lc -org.lc -edu.lc -gov.lc - -// li : http://en.wikipedia.org/wiki/.li -li - -// lk : http://www.nic.lk/seclevpr.html -lk -gov.lk -sch.lk -net.lk -int.lk -com.lk -org.lk -edu.lk -ngo.lk -soc.lk -web.lk -ltd.lk -assn.lk -grp.lk -hotel.lk - -// lr : http://psg.com/dns/lr/lr.txt -// Submitted by registry <randy@psg.com> 2008-06-17 -com.lr -edu.lr -gov.lr -org.lr -net.lr - -// ls : http://en.wikipedia.org/wiki/.ls -ls -co.ls -org.ls - -// lt : http://en.wikipedia.org/wiki/.lt -lt -// gov.lt : http://www.gov.lt/index_en.php -gov.lt - -// lu : http://www.dns.lu/en/ -lu - -// lv : http://www.nic.lv/DNS/En/generic.php -lv -com.lv -edu.lv -gov.lv -org.lv -mil.lv -id.lv -net.lv -asn.lv -conf.lv - -// ly : http://www.nic.ly/regulations.php -ly -com.ly -net.ly -gov.ly -plc.ly -edu.ly -sch.ly -med.ly -org.ly -id.ly - -// ma : http://en.wikipedia.org/wiki/.ma -// http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf -ma -co.ma -net.ma -gov.ma -org.ma -ac.ma -press.ma - -// mc : http://www.nic.mc/ -mc -tm.mc -asso.mc - -// md : http://en.wikipedia.org/wiki/.md -md - -// me : http://en.wikipedia.org/wiki/.me -me -co.me -net.me -org.me -edu.me -ac.me -gov.me -its.me -priv.me - -// mg : http://www.nic.mg/tarif.htm -mg -org.mg -nom.mg -gov.mg -prd.mg -tm.mg -edu.mg -mil.mg -com.mg - -// mh : http://en.wikipedia.org/wiki/.mh -mh - -// mil : http://en.wikipedia.org/wiki/.mil -mil - -// mk : http://en.wikipedia.org/wiki/.mk -// see also: http://dns.marnet.net.mk/postapka.php -mk -com.mk -org.mk -net.mk -edu.mk -gov.mk -inf.mk -name.mk - -// ml : http://www.gobin.info/domainname/ml-template.doc -// see also: http://en.wikipedia.org/wiki/.ml -ml -com.ml -edu.ml -gouv.ml -gov.ml -net.ml -org.ml -presse.ml - -// mm : http://en.wikipedia.org/wiki/.mm -*.mm - -// mn : http://en.wikipedia.org/wiki/.mn -mn -gov.mn -edu.mn -org.mn - -// mo : http://www.monic.net.mo/ -mo -com.mo -net.mo -org.mo -edu.mo -gov.mo - -// mobi : http://en.wikipedia.org/wiki/.mobi -mobi - -// mp : http://www.dot.mp/ -// Confirmed by registry <dcamacho@saipan.com> 2008-06-17 -mp - -// mq : http://en.wikipedia.org/wiki/.mq -mq - -// mr : http://en.wikipedia.org/wiki/.mr -mr -gov.mr - -// ms : http://en.wikipedia.org/wiki/.ms -ms - -// mt : https://www.nic.org.mt/dotmt/ -*.mt - -// mu : http://en.wikipedia.org/wiki/.mu -mu -com.mu -net.mu -org.mu -gov.mu -ac.mu -co.mu -or.mu - -// museum : http://about.museum/naming/ -// http://index.museum/ -museum -academy.museum -agriculture.museum -air.museum -airguard.museum -alabama.museum -alaska.museum -amber.museum -ambulance.museum -american.museum -americana.museum -americanantiques.museum -americanart.museum -amsterdam.museum -and.museum -annefrank.museum -anthro.museum -anthropology.museum -antiques.museum -aquarium.museum -arboretum.museum -archaeological.museum -archaeology.museum -architecture.museum -art.museum -artanddesign.museum -artcenter.museum -artdeco.museum -arteducation.museum -artgallery.museum -arts.museum -artsandcrafts.museum -asmatart.museum -assassination.museum -assisi.museum -association.museum -astronomy.museum -atlanta.museum -austin.museum -australia.museum -automotive.museum -aviation.museum -axis.museum -badajoz.museum -baghdad.museum -bahn.museum -bale.museum -baltimore.museum -barcelona.museum -baseball.museum -basel.museum -baths.museum -bauern.museum -beauxarts.museum -beeldengeluid.museum -bellevue.museum -bergbau.museum -berkeley.museum -berlin.museum -bern.museum -bible.museum -bilbao.museum -bill.museum -birdart.museum -birthplace.museum -bonn.museum -boston.museum -botanical.museum -botanicalgarden.museum -botanicgarden.museum -botany.museum -brandywinevalley.museum -brasil.museum -bristol.museum -british.museum -britishcolumbia.museum -broadcast.museum -brunel.museum -brussel.museum -brussels.museum -bruxelles.museum -building.museum -burghof.museum -bus.museum -bushey.museum -cadaques.museum -california.museum -cambridge.museum -can.museum -canada.museum -capebreton.museum -carrier.museum -cartoonart.museum -casadelamoneda.museum -castle.museum -castres.museum -celtic.museum -center.museum -chattanooga.museum -cheltenham.museum -chesapeakebay.museum -chicago.museum -children.museum -childrens.museum -childrensgarden.museum -chiropractic.museum -chocolate.museum -christiansburg.museum -cincinnati.museum -cinema.museum -circus.museum -civilisation.museum -civilization.museum -civilwar.museum -clinton.museum -clock.museum -coal.museum -coastaldefence.museum -cody.museum -coldwar.museum -collection.museum -colonialwilliamsburg.museum -coloradoplateau.museum -columbia.museum -columbus.museum -communication.museum -communications.museum -community.museum -computer.museum -computerhistory.museum -comunicações.museum -contemporary.museum -contemporaryart.museum -convent.museum -copenhagen.museum -corporation.museum -correios-e-telecomunicações.museum -corvette.museum -costume.museum -countryestate.museum -county.museum -crafts.museum -cranbrook.museum -creation.museum -cultural.museum -culturalcenter.museum -culture.museum -cyber.museum -cymru.museum -dali.museum -dallas.museum -database.museum -ddr.museum -decorativearts.museum -delaware.museum -delmenhorst.museum -denmark.museum -depot.museum -design.museum -detroit.museum -dinosaur.museum -discovery.museum -dolls.museum -donostia.museum -durham.museum -eastafrica.museum -eastcoast.museum -education.museum -educational.museum -egyptian.museum -eisenbahn.museum -elburg.museum -elvendrell.museum -embroidery.museum -encyclopedic.museum -england.museum -entomology.museum -environment.museum -environmentalconservation.museum -epilepsy.museum -essex.museum -estate.museum -ethnology.museum -exeter.museum -exhibition.museum -family.museum -farm.museum -farmequipment.museum -farmers.museum -farmstead.museum -field.museum -figueres.museum -filatelia.museum -film.museum -fineart.museum -finearts.museum -finland.museum -flanders.museum -florida.museum -force.museum -fortmissoula.museum -fortworth.museum -foundation.museum -francaise.museum -frankfurt.museum -franziskaner.museum -freemasonry.museum -freiburg.museum -fribourg.museum -frog.museum -fundacio.museum -furniture.museum -gallery.museum -garden.museum -gateway.museum -geelvinck.museum -gemological.museum -geology.museum -georgia.museum -giessen.museum -glas.museum -glass.museum -gorge.museum -grandrapids.museum -graz.museum -guernsey.museum -halloffame.museum -hamburg.museum -handson.museum -harvestcelebration.museum -hawaii.museum -health.museum -heimatunduhren.museum -hellas.museum -helsinki.museum -hembygdsforbund.museum -heritage.museum -histoire.museum -historical.museum -historicalsociety.museum -historichouses.museum -historisch.museum -historisches.museum -history.museum -historyofscience.museum -horology.museum -house.museum -humanities.museum -illustration.museum -imageandsound.museum -indian.museum -indiana.museum -indianapolis.museum -indianmarket.museum -intelligence.museum -interactive.museum -iraq.museum -iron.museum -isleofman.museum -jamison.museum -jefferson.museum -jerusalem.museum -jewelry.museum -jewish.museum -jewishart.museum -jfk.museum -journalism.museum -judaica.museum -judygarland.museum -juedisches.museum -juif.museum -karate.museum -karikatur.museum -kids.museum -koebenhavn.museum -koeln.museum -kunst.museum -kunstsammlung.museum -kunstunddesign.museum -labor.museum -labour.museum -lajolla.museum -lancashire.museum -landes.museum -lans.museum -läns.museum -larsson.museum -lewismiller.museum -lincoln.museum -linz.museum -living.museum -livinghistory.museum -localhistory.museum -london.museum -losangeles.museum -louvre.museum -loyalist.museum -lucerne.museum -luxembourg.museum -luzern.museum -mad.museum -madrid.museum -mallorca.museum -manchester.museum -mansion.museum -mansions.museum -manx.museum -marburg.museum -maritime.museum -maritimo.museum -maryland.museum -marylhurst.museum -media.museum -medical.museum -medizinhistorisches.museum -meeres.museum -memorial.museum -mesaverde.museum -michigan.museum -midatlantic.museum -military.museum -mill.museum -miners.museum -mining.museum -minnesota.museum -missile.museum -missoula.museum -modern.museum -moma.museum -money.museum -monmouth.museum -monticello.museum -montreal.museum -moscow.museum -motorcycle.museum -muenchen.museum -muenster.museum -mulhouse.museum -muncie.museum -museet.museum -museumcenter.museum -museumvereniging.museum -music.museum -national.museum -nationalfirearms.museum -nationalheritage.museum -nativeamerican.museum -naturalhistory.museum -naturalhistorymuseum.museum -naturalsciences.museum -nature.museum -naturhistorisches.museum -natuurwetenschappen.museum -naumburg.museum -naval.museum -nebraska.museum -neues.museum -newhampshire.museum -newjersey.museum -newmexico.museum -newport.museum -newspaper.museum -newyork.museum -niepce.museum -norfolk.museum -north.museum -nrw.museum -nuernberg.museum -nuremberg.museum -nyc.museum -nyny.museum -oceanographic.museum -oceanographique.museum -omaha.museum -online.museum -ontario.museum -openair.museum -oregon.museum -oregontrail.museum -otago.museum -oxford.museum -pacific.museum -paderborn.museum -palace.museum -paleo.museum -palmsprings.museum -panama.museum -paris.museum -pasadena.museum -pharmacy.museum -philadelphia.museum -philadelphiaarea.museum -philately.museum -phoenix.museum -photography.museum -pilots.museum -pittsburgh.museum -planetarium.museum -plantation.museum -plants.museum -plaza.museum -portal.museum -portland.museum -portlligat.museum -posts-and-telecommunications.museum -preservation.museum -presidio.museum -press.museum -project.museum -public.museum -pubol.museum -quebec.museum -railroad.museum -railway.museum -research.museum -resistance.museum -riodejaneiro.museum -rochester.museum -rockart.museum -roma.museum -russia.museum -saintlouis.museum -salem.museum -salvadordali.museum -salzburg.museum -sandiego.museum -sanfrancisco.museum -santabarbara.museum -santacruz.museum -santafe.museum -saskatchewan.museum -satx.museum -savannahga.museum -schlesisches.museum -schoenbrunn.museum -schokoladen.museum -school.museum -schweiz.museum -science.museum -scienceandhistory.museum -scienceandindustry.museum -sciencecenter.museum -sciencecenters.museum -science-fiction.museum -sciencehistory.museum -sciences.museum -sciencesnaturelles.museum -scotland.museum -seaport.museum -settlement.museum -settlers.museum -shell.museum -sherbrooke.museum -sibenik.museum -silk.museum -ski.museum -skole.museum -society.museum -sologne.museum -soundandvision.museum -southcarolina.museum -southwest.museum -space.museum -spy.museum -square.museum -stadt.museum -stalbans.museum -starnberg.museum -state.museum -stateofdelaware.museum -station.museum -steam.museum -steiermark.museum -stjohn.museum -stockholm.museum -stpetersburg.museum -stuttgart.museum -suisse.museum -surgeonshall.museum -surrey.museum -svizzera.museum -sweden.museum -sydney.museum -tank.museum -tcm.museum -technology.museum -telekommunikation.museum -television.museum -texas.museum -textile.museum -theater.museum -time.museum -timekeeping.museum -topology.museum -torino.museum -touch.museum -town.museum -transport.museum -tree.museum -trolley.museum -trust.museum -trustee.museum -uhren.museum -ulm.museum -undersea.museum -university.museum -usa.museum -usantiques.museum -usarts.museum -uscountryestate.museum -usculture.museum -usdecorativearts.museum -usgarden.museum -ushistory.museum -ushuaia.museum -uslivinghistory.museum -utah.museum -uvic.museum -valley.museum -vantaa.museum -versailles.museum -viking.museum -village.museum -virginia.museum -virtual.museum -virtuel.museum -vlaanderen.museum -volkenkunde.museum -wales.museum -wallonie.museum -war.museum -washingtondc.museum -watchandclock.museum -watch-and-clock.museum -western.museum -westfalen.museum -whaling.museum -wildlife.museum -williamsburg.museum -windmill.museum -workshop.museum -york.museum -yorkshire.museum -yosemite.museum -youth.museum -zoological.museum -zoology.museum -ירושלים.museum -иком.museum - -// mv : http://en.wikipedia.org/wiki/.mv -// "mv" included because, contra Wikipedia, google.mv exists. -mv -aero.mv -biz.mv -com.mv -coop.mv -edu.mv -gov.mv -info.mv -int.mv -mil.mv -museum.mv -name.mv -net.mv -org.mv -pro.mv - -// mw : http://www.registrar.mw/ -mw -ac.mw -biz.mw -co.mw -com.mw -coop.mw -edu.mw -gov.mw -int.mw -museum.mw -net.mw -org.mw - -// mx : http://www.nic.mx/ -// Submitted by registry <farias@nic.mx> 2008-06-19 -mx -com.mx -org.mx -gob.mx -edu.mx -net.mx - -// my : http://www.mynic.net.my/ -my -com.my -net.my -org.my -gov.my -edu.my -mil.my -name.my - -// mz : http://www.gobin.info/domainname/mz-template.doc -*.mz - -// na : http://www.na-nic.com.na/ -// http://www.info.na/domain/ -na -info.na -pro.na -name.na -school.na -or.na -dr.na -us.na -mx.na -ca.na -in.na -cc.na -tv.na -ws.na -mobi.na -co.na -com.na -org.na - -// name : has 2nd-level tlds, but there's no list of them -name - -// nc : http://www.cctld.nc/ -nc -asso.nc - -// ne : http://en.wikipedia.org/wiki/.ne -ne - -// net : http://en.wikipedia.org/wiki/.net -net - -// nf : http://en.wikipedia.org/wiki/.nf -nf -com.nf -net.nf -per.nf -rec.nf -web.nf -arts.nf -firm.nf -info.nf -other.nf -store.nf - -// ng : http://psg.com/dns/ng/ -// Submitted by registry <randy@psg.com> 2008-06-17 -ac.ng -com.ng -edu.ng -gov.ng -net.ng -org.ng - -// ni : http://www.nic.ni/dominios.htm -*.ni - -// nl : http://www.domain-registry.nl/ace.php/c,728,122,,,,Home.html -// Confirmed by registry <Antoin.Verschuren@sidn.nl> (with technical -// reservations) 2008-06-08 -nl - -// BV.nl will be a registry for dutch BV's (besloten vennootschap) -bv.nl - -// no : http://www.norid.no/regelverk/index.en.html -// The Norwegian registry has declined to notify us of updates. The web pages -// referenced below are the official source of the data. There is also an -// announce mailing list: -// https://postlister.uninett.no/sympa/info/norid-diskusjon -no -// Norid generic domains : http://www.norid.no/regelverk/vedlegg-c.en.html -fhs.no -vgs.no -fylkesbibl.no -folkebibl.no -museum.no -idrett.no -priv.no -// Non-Norid generic domains : http://www.norid.no/regelverk/vedlegg-d.en.html -mil.no -stat.no -dep.no -kommune.no -herad.no -// no geographical names : http://www.norid.no/regelverk/vedlegg-b.en.html -// counties -aa.no -ah.no -bu.no -fm.no -hl.no -hm.no -jan-mayen.no -mr.no -nl.no -nt.no -of.no -ol.no -oslo.no -rl.no -sf.no -st.no -svalbard.no -tm.no -tr.no -va.no -vf.no -// primary and lower secondary schools per county -gs.aa.no -gs.ah.no -gs.bu.no -gs.fm.no -gs.hl.no -gs.hm.no -gs.jan-mayen.no -gs.mr.no -gs.nl.no -gs.nt.no -gs.of.no -gs.ol.no -gs.oslo.no -gs.rl.no -gs.sf.no -gs.st.no -gs.svalbard.no -gs.tm.no -gs.tr.no -gs.va.no -gs.vf.no -// cities -akrehamn.no -åkrehamn.no -algard.no -ålgård.no -arna.no -brumunddal.no -bryne.no -bronnoysund.no -brønnøysund.no -drobak.no -drøbak.no -egersund.no -fetsund.no -floro.no -florø.no -fredrikstad.no -hokksund.no -honefoss.no -hønefoss.no -jessheim.no -jorpeland.no -jørpeland.no -kirkenes.no -kopervik.no -krokstadelva.no -langevag.no -langevåg.no -leirvik.no -mjondalen.no -mjøndalen.no -mo-i-rana.no -mosjoen.no -mosjøen.no -nesoddtangen.no -orkanger.no -osoyro.no -osøyro.no -raholt.no -råholt.no -sandnessjoen.no -sandnessjøen.no -skedsmokorset.no -slattum.no -spjelkavik.no -stathelle.no -stavern.no -stjordalshalsen.no -stjørdalshalsen.no -tananger.no -tranby.no -vossevangen.no -// communities -afjord.no -åfjord.no -agdenes.no -al.no -ål.no -alesund.no -ålesund.no -alstahaug.no -alta.no -áltá.no -alaheadju.no -álaheadju.no -alvdal.no -amli.no -åmli.no -amot.no -åmot.no -andebu.no -andoy.no -andøy.no -andasuolo.no -ardal.no -årdal.no -aremark.no -arendal.no -ås.no -aseral.no -åseral.no -asker.no -askim.no -askvoll.no -askoy.no -askøy.no -asnes.no -åsnes.no -audnedaln.no -aukra.no -aure.no -aurland.no -aurskog-holand.no -aurskog-høland.no -austevoll.no -austrheim.no -averoy.no -averøy.no -balestrand.no -ballangen.no -balat.no -bálát.no -balsfjord.no -bahccavuotna.no -báhccavuotna.no -bamble.no -bardu.no -beardu.no -beiarn.no -bajddar.no -bájddar.no -baidar.no -báidár.no -berg.no -bergen.no -berlevag.no -berlevåg.no -bearalvahki.no -bearalváhki.no -bindal.no -birkenes.no -bjarkoy.no -bjarkøy.no -bjerkreim.no -bjugn.no -bodo.no -bodø.no -badaddja.no -bådåddjå.no -budejju.no -bokn.no -bremanger.no -bronnoy.no -brønnøy.no -bygland.no -bykle.no -barum.no -bærum.no -bo.telemark.no -bø.telemark.no -bo.nordland.no -bø.nordland.no -bievat.no -bievát.no -bomlo.no -bømlo.no -batsfjord.no -båtsfjord.no -bahcavuotna.no -báhcavuotna.no -dovre.no -drammen.no -drangedal.no -dyroy.no -dyrøy.no -donna.no -dønna.no -eid.no -eidfjord.no -eidsberg.no -eidskog.no -eidsvoll.no -eigersund.no -elverum.no -enebakk.no -engerdal.no -etne.no -etnedal.no -evenes.no -evenassi.no -evenášši.no -evje-og-hornnes.no -farsund.no -fauske.no -fuossko.no -fuoisku.no -fedje.no -fet.no -finnoy.no -finnøy.no -fitjar.no -fjaler.no -fjell.no -flakstad.no -flatanger.no -flekkefjord.no -flesberg.no -flora.no -fla.no -flå.no -folldal.no -forsand.no -fosnes.no -frei.no -frogn.no -froland.no -frosta.no -frana.no -fræna.no -froya.no -frøya.no -fusa.no -fyresdal.no -forde.no -førde.no -gamvik.no -gangaviika.no -gáŋgaviika.no -gaular.no -gausdal.no -gildeskal.no -gildeskål.no -giske.no -gjemnes.no -gjerdrum.no -gjerstad.no -gjesdal.no -gjovik.no -gjøvik.no -gloppen.no -gol.no -gran.no -grane.no -granvin.no -gratangen.no -grimstad.no -grong.no -kraanghke.no -kråanghke.no -grue.no -gulen.no -hadsel.no -halden.no -halsa.no -hamar.no -hamaroy.no -habmer.no -hábmer.no -hapmir.no -hápmir.no -hammerfest.no -hammarfeasta.no -hámmárfeasta.no -haram.no -hareid.no -harstad.no -hasvik.no -aknoluokta.no -ákŋoluokta.no -hattfjelldal.no -aarborte.no -haugesund.no -hemne.no -hemnes.no -hemsedal.no -heroy.more-og-romsdal.no -herøy.møre-og-romsdal.no -heroy.nordland.no -herøy.nordland.no -hitra.no -hjartdal.no -hjelmeland.no -hobol.no -hobøl.no -hof.no -hol.no -hole.no -holmestrand.no -holtalen.no -holtålen.no -hornindal.no -horten.no -hurdal.no -hurum.no -hvaler.no -hyllestad.no -hagebostad.no -hægebostad.no -hoyanger.no -høyanger.no -hoylandet.no -høylandet.no -ha.no -hå.no -ibestad.no -inderoy.no -inderøy.no -iveland.no -jevnaker.no -jondal.no -jolster.no -jølster.no -karasjok.no -karasjohka.no -kárášjohka.no -karlsoy.no -galsa.no -gálsá.no -karmoy.no -karmøy.no -kautokeino.no -guovdageaidnu.no -klepp.no -klabu.no -klæbu.no -kongsberg.no -kongsvinger.no -kragero.no -kragerø.no -kristiansand.no -kristiansund.no -krodsherad.no -krødsherad.no -kvalsund.no -rahkkeravju.no -ráhkkerávju.no -kvam.no -kvinesdal.no -kvinnherad.no -kviteseid.no -kvitsoy.no -kvitsøy.no -kvafjord.no -kvæfjord.no -giehtavuoatna.no -kvanangen.no -kvænangen.no -navuotna.no -návuotna.no -kafjord.no -kåfjord.no -gaivuotna.no -gáivuotna.no -larvik.no -lavangen.no -lavagis.no -loabat.no -loabát.no -lebesby.no -davvesiida.no -leikanger.no -leirfjord.no -leka.no -leksvik.no -lenvik.no -leangaviika.no -leaŋgaviika.no -lesja.no -levanger.no -lier.no -lierne.no -lillehammer.no -lillesand.no -lindesnes.no -lindas.no -lindås.no -lom.no -loppa.no -lahppi.no -láhppi.no -lund.no -lunner.no -luroy.no -lurøy.no -luster.no -lyngdal.no -lyngen.no -ivgu.no -lardal.no -lerdal.no -lærdal.no -lodingen.no -lødingen.no -lorenskog.no -lørenskog.no -loten.no -løten.no -malvik.no -masoy.no -måsøy.no -muosat.no -muosát.no -mandal.no -marker.no -marnardal.no -masfjorden.no -meland.no -meldal.no -melhus.no -meloy.no -meløy.no -meraker.no -meråker.no -moareke.no -moåreke.no -midsund.no -midtre-gauldal.no -modalen.no -modum.no -molde.no -moskenes.no -moss.no -mosvik.no -malselv.no -målselv.no -malatvuopmi.no -málatvuopmi.no -namdalseid.no -aejrie.no -namsos.no -namsskogan.no -naamesjevuemie.no -nååmesjevuemie.no -laakesvuemie.no -nannestad.no -narvik.no -narviika.no -naustdal.no -nedre-eiker.no -nes.akershus.no -nes.buskerud.no -nesna.no -nesodden.no -nesseby.no -unjarga.no -unjárga.no -nesset.no -nissedal.no -nittedal.no -nord-aurdal.no -nord-fron.no -nord-odal.no -norddal.no -nordkapp.no -davvenjarga.no -davvenjárga.no -nordre-land.no -nordreisa.no -raisa.no -ráisa.no -nore-og-uvdal.no -notodden.no -naroy.no -nærøy.no -notteroy.no -nøtterøy.no -odda.no -oksnes.no -øksnes.no -oppdal.no -oppegard.no -oppegård.no -orkdal.no -orland.no -ørland.no -orskog.no -ørskog.no -orsta.no -ørsta.no -os.hedmark.no -os.hordaland.no -osen.no -osteroy.no -osterøy.no -ostre-toten.no -østre-toten.no -overhalla.no -ovre-eiker.no -øvre-eiker.no -oyer.no -øyer.no -oygarden.no -øygarden.no -oystre-slidre.no -øystre-slidre.no -porsanger.no -porsangu.no -porsáŋgu.no -porsgrunn.no -radoy.no -radøy.no -rakkestad.no -rana.no -ruovat.no -randaberg.no -rauma.no -rendalen.no -rennebu.no -rennesoy.no -rennesøy.no -rindal.no -ringebu.no -ringerike.no -ringsaker.no -rissa.no -risor.no -risør.no -roan.no -rollag.no -rygge.no -ralingen.no -rælingen.no -rodoy.no -rødøy.no -romskog.no -rømskog.no -roros.no -røros.no -rost.no -røst.no -royken.no -røyken.no -royrvik.no -røyrvik.no -rade.no -råde.no -salangen.no -siellak.no -saltdal.no -salat.no -sálát.no -sálat.no -samnanger.no -sande.more-og-romsdal.no -sande.møre-og-romsdal.no -sande.vestfold.no -sandefjord.no -sandnes.no -sandoy.no -sandøy.no -sarpsborg.no -sauda.no -sauherad.no -sel.no -selbu.no -selje.no -seljord.no -sigdal.no -siljan.no -sirdal.no -skaun.no -skedsmo.no -ski.no -skien.no -skiptvet.no -skjervoy.no -skjervøy.no -skierva.no -skiervá.no -skjak.no -skjåk.no -skodje.no -skanland.no -skånland.no -skanit.no -skánit.no -smola.no -smøla.no -snillfjord.no -snasa.no -snåsa.no -snoasa.no -snaase.no -snåase.no -sogndal.no -sokndal.no -sola.no -solund.no -songdalen.no -sortland.no -spydeberg.no -stange.no -stavanger.no -steigen.no -steinkjer.no -stjordal.no -stjørdal.no -stokke.no -stor-elvdal.no -stord.no -stordal.no -storfjord.no -omasvuotna.no -strand.no -stranda.no -stryn.no -sula.no -suldal.no -sund.no -sunndal.no -surnadal.no -sveio.no -svelvik.no -sykkylven.no -sogne.no -søgne.no -somna.no -sømna.no -sondre-land.no -søndre-land.no -sor-aurdal.no -sør-aurdal.no -sor-fron.no -sør-fron.no -sor-odal.no -sør-odal.no -sor-varanger.no -sør-varanger.no -matta-varjjat.no -mátta-várjjat.no -sorfold.no -sørfold.no -sorreisa.no -sørreisa.no -sorum.no -sørum.no -tana.no -deatnu.no -time.no -tingvoll.no -tinn.no -tjeldsund.no -dielddanuorri.no -tjome.no -tjøme.no -tokke.no -tolga.no -torsken.no -tranoy.no -tranøy.no -tromso.no -tromsø.no -tromsa.no -romsa.no -trondheim.no -troandin.no -trysil.no -trana.no -træna.no -trogstad.no -trøgstad.no -tvedestrand.no -tydal.no -tynset.no -tysfjord.no -divtasvuodna.no -divttasvuotna.no -tysnes.no -tysvar.no -tysvær.no -tonsberg.no -tønsberg.no -ullensaker.no -ullensvang.no -ulvik.no -utsira.no -vadso.no -vadsø.no -cahcesuolo.no -čáhcesuolo.no -vaksdal.no -valle.no -vang.no -vanylven.no -vardo.no -vardø.no -varggat.no -várggát.no -vefsn.no -vaapste.no -vega.no -vegarshei.no -vegårshei.no -vennesla.no -verdal.no -verran.no -vestby.no -vestnes.no -vestre-slidre.no -vestre-toten.no -vestvagoy.no -vestvågøy.no -vevelstad.no -vik.no -vikna.no -vindafjord.no -volda.no -voss.no -varoy.no -værøy.no -vagan.no -vågan.no -voagat.no -vagsoy.no -vågsøy.no -vaga.no -vågå.no -valer.ostfold.no -våler.østfold.no -valer.hedmark.no -våler.hedmark.no - -// np : http://www.mos.com.np/register.html -*.np - -// nr : http://cenpac.net.nr/dns/index.html -// Confirmed by registry <technician@cenpac.net.nr> 2008-06-17 -nr -biz.nr -info.nr -gov.nr -edu.nr -org.nr -net.nr -com.nr - -// nu : http://en.wikipedia.org/wiki/.nu -nu - -// nz : http://en.wikipedia.org/wiki/.nz -*.nz - -// om : http://en.wikipedia.org/wiki/.om -*.om -!mediaphone.om -!nawrastelecom.om -!nawras.om -!omanmobile.om -!omanpost.om -!omantel.om -!rakpetroleum.om -!siemens.om -!songfest.om -!statecouncil.om - -// org : http://en.wikipedia.org/wiki/.org -org - -// pa : http://www.nic.pa/ -// Some additional second level "domains" resolve directly as hostnames, such as -// pannet.pa, so we add a rule for "pa". -pa -ac.pa -gob.pa -com.pa -org.pa -sld.pa -edu.pa -net.pa -ing.pa -abo.pa -med.pa -nom.pa - -// pe : https://www.nic.pe/InformeFinalComision.pdf -pe -edu.pe -gob.pe -nom.pe -mil.pe -org.pe -com.pe -net.pe - -// pf : http://www.gobin.info/domainname/formulaire-pf.pdf -pf -com.pf -org.pf -edu.pf - -// pg : http://en.wikipedia.org/wiki/.pg -*.pg - -// ph : http://www.domains.ph/FAQ2.asp -// Submitted by registry <jed@email.com.ph> 2008-06-13 -ph -com.ph -net.ph -org.ph -gov.ph -edu.ph -ngo.ph -mil.ph -i.ph - -// pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK -pk -com.pk -net.pk -edu.pk -org.pk -fam.pk -biz.pk -web.pk -gov.pk -gob.pk -gok.pk -gon.pk -gop.pk -gos.pk -info.pk - -// pl : http://www.dns.pl/english/ -pl -// NASK functional domains (nask.pl / dns.pl) : http://www.dns.pl/english/dns-funk.html -aid.pl -agro.pl -atm.pl -auto.pl -biz.pl -com.pl -edu.pl -gmina.pl -gsm.pl -info.pl -mail.pl -miasta.pl -media.pl -mil.pl -net.pl -nieruchomosci.pl -nom.pl -org.pl -pc.pl -powiat.pl -priv.pl -realestate.pl -rel.pl -sex.pl -shop.pl -sklep.pl -sos.pl -szkola.pl -targi.pl -tm.pl -tourism.pl -travel.pl -turystyka.pl -// ICM functional domains (icm.edu.pl) -6bone.pl -art.pl -mbone.pl -// Government domains (administred by ippt.gov.pl) -gov.pl -uw.gov.pl -um.gov.pl -ug.gov.pl -upow.gov.pl -starostwo.gov.pl -so.gov.pl -sr.gov.pl -po.gov.pl -pa.gov.pl -// other functional domains -ngo.pl -irc.pl -usenet.pl -// NASK geographical domains : http://www.dns.pl/english/dns-regiony.html -augustow.pl -babia-gora.pl -bedzin.pl -beskidy.pl -bialowieza.pl -bialystok.pl -bielawa.pl -bieszczady.pl -boleslawiec.pl -bydgoszcz.pl -bytom.pl -cieszyn.pl -czeladz.pl -czest.pl -dlugoleka.pl -elblag.pl -elk.pl -glogow.pl -gniezno.pl -gorlice.pl -grajewo.pl -ilawa.pl -jaworzno.pl -jelenia-gora.pl -jgora.pl -kalisz.pl -kazimierz-dolny.pl -karpacz.pl -kartuzy.pl -kaszuby.pl -katowice.pl -kepno.pl -ketrzyn.pl -klodzko.pl -kobierzyce.pl -kolobrzeg.pl -konin.pl -konskowola.pl -kutno.pl -lapy.pl -lebork.pl -legnica.pl -lezajsk.pl -limanowa.pl -lomza.pl -lowicz.pl -lubin.pl -lukow.pl -malbork.pl -malopolska.pl -mazowsze.pl -mazury.pl -mielec.pl -mielno.pl -mragowo.pl -naklo.pl -nowaruda.pl -nysa.pl -olawa.pl -olecko.pl -olkusz.pl -olsztyn.pl -opoczno.pl -opole.pl -ostroda.pl -ostroleka.pl -ostrowiec.pl -ostrowwlkp.pl -pila.pl -pisz.pl -podhale.pl -podlasie.pl -polkowice.pl -pomorze.pl -pomorskie.pl -prochowice.pl -pruszkow.pl -przeworsk.pl -pulawy.pl -radom.pl -rawa-maz.pl -rybnik.pl -rzeszow.pl -sanok.pl -sejny.pl -siedlce.pl -slask.pl -slupsk.pl -sosnowiec.pl -stalowa-wola.pl -skoczow.pl -starachowice.pl -stargard.pl -suwalki.pl -swidnica.pl -swiebodzin.pl -swinoujscie.pl -szczecin.pl -szczytno.pl -tarnobrzeg.pl -tgory.pl -turek.pl -tychy.pl -ustka.pl -walbrzych.pl -warmia.pl -warszawa.pl -waw.pl -wegrow.pl -wielun.pl -wlocl.pl -wloclawek.pl -wodzislaw.pl -wolomin.pl -wroclaw.pl -zachpomor.pl -zagan.pl -zarow.pl -zgora.pl -zgorzelec.pl -// TASK geographical domains (www.task.gda.pl/uslugi/dns) -gda.pl -gdansk.pl -gdynia.pl -med.pl -sopot.pl -// other geographical domains -gliwice.pl -krakow.pl -poznan.pl -wroc.pl -zakopane.pl - -// pm : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf -pm - -// pn : http://www.government.pn/PnRegistry/policies.htm -pn -gov.pn -co.pn -org.pn -edu.pn -net.pn - -// pr : http://www.nic.pr/index.asp?f=1 -pr -com.pr -net.pr -org.pr -gov.pr -edu.pr -isla.pr -pro.pr -biz.pr -info.pr -name.pr -// these aren't mentioned on nic.pr, but on http://en.wikipedia.org/wiki/.pr -est.pr -prof.pr -ac.pr - -// pro : http://www.nic.pro/support_faq.htm -pro -aca.pro -bar.pro -cpa.pro -jur.pro -law.pro -med.pro -eng.pro - -// ps : http://en.wikipedia.org/wiki/.ps -// http://www.nic.ps/registration/policy.html#reg -ps -edu.ps -gov.ps -sec.ps -plo.ps -com.ps -org.ps -net.ps - -// pt : http://online.dns.pt/dns/start_dns -pt -net.pt -gov.pt -org.pt -edu.pt -int.pt -publ.pt -com.pt -nome.pt - -// pw : http://en.wikipedia.org/wiki/.pw -pw -co.pw -ne.pw -or.pw -ed.pw -go.pw -belau.pw - -// py : http://www.nic.py/faq_a.html#faq_b -*.py - -// qa : http://domains.qa/en/ -qa -com.qa -edu.qa -gov.qa -mil.qa -name.qa -net.qa -org.qa -sch.qa - -// re : http://www.afnic.re/obtenir/chartes/nommage-re/annexe-descriptifs -re -com.re -asso.re -nom.re - -// ro : http://www.rotld.ro/ -ro -com.ro -org.ro -tm.ro -nt.ro -nom.ro -info.ro -rec.ro -arts.ro -firm.ro -store.ro -www.ro - -// rs : http://en.wikipedia.org/wiki/.rs -rs -co.rs -org.rs -edu.rs -ac.rs -gov.rs -in.rs - -// ru : http://www.cctld.ru/ru/docs/aktiv_8.php -// Industry domains -ru -ac.ru -com.ru -edu.ru -int.ru -net.ru -org.ru -pp.ru -// Geographical domains -adygeya.ru -altai.ru -amur.ru -arkhangelsk.ru -astrakhan.ru -bashkiria.ru -belgorod.ru -bir.ru -bryansk.ru -buryatia.ru -cbg.ru -chel.ru -chelyabinsk.ru -chita.ru -chukotka.ru -chuvashia.ru -dagestan.ru -dudinka.ru -e-burg.ru -grozny.ru -irkutsk.ru -ivanovo.ru -izhevsk.ru -jar.ru -joshkar-ola.ru -kalmykia.ru -kaluga.ru -kamchatka.ru -karelia.ru -kazan.ru -kchr.ru -kemerovo.ru -khabarovsk.ru -khakassia.ru -khv.ru -kirov.ru -koenig.ru -komi.ru -kostroma.ru -krasnoyarsk.ru -kuban.ru -kurgan.ru -kursk.ru -lipetsk.ru -magadan.ru -mari.ru -mari-el.ru -marine.ru -mordovia.ru -mosreg.ru -msk.ru -murmansk.ru -nalchik.ru -nnov.ru -nov.ru -novosibirsk.ru -nsk.ru -omsk.ru -orenburg.ru -oryol.ru -palana.ru -penza.ru -perm.ru -pskov.ru -ptz.ru -rnd.ru -ryazan.ru -sakhalin.ru -samara.ru -saratov.ru -simbirsk.ru -smolensk.ru -spb.ru -stavropol.ru -stv.ru -surgut.ru -tambov.ru -tatarstan.ru -tom.ru -tomsk.ru -tsaritsyn.ru -tsk.ru -tula.ru -tuva.ru -tver.ru -tyumen.ru -udm.ru -udmurtia.ru -ulan-ude.ru -vladikavkaz.ru -vladimir.ru -vladivostok.ru -volgograd.ru -vologda.ru -voronezh.ru -vrn.ru -vyatka.ru -yakutia.ru -yamal.ru -yaroslavl.ru -yekaterinburg.ru -yuzhno-sakhalinsk.ru -// More geographical domains -amursk.ru -baikal.ru -cmw.ru -fareast.ru -jamal.ru -kms.ru -k-uralsk.ru -kustanai.ru -kuzbass.ru -magnitka.ru -mytis.ru -nakhodka.ru -nkz.ru -norilsk.ru -oskol.ru -pyatigorsk.ru -rubtsovsk.ru -snz.ru -syzran.ru -vdonsk.ru -zgrad.ru -// State domains -gov.ru -mil.ru -// Technical domains -test.ru - -// rw : http://www.nic.rw/cgi-bin/policy.pl -rw -gov.rw -net.rw -edu.rw -ac.rw -com.rw -co.rw -int.rw -mil.rw -gouv.rw - -// sa : http://www.nic.net.sa/ -sa -com.sa -net.sa -org.sa -gov.sa -med.sa -pub.sa -edu.sa -sch.sa - -// sb : http://www.sbnic.net.sb/ -// Submitted by registry <lee.humphries@telekom.com.sb> 2008-06-08 -sb -com.sb -edu.sb -gov.sb -net.sb -org.sb - -// sc : http://www.nic.sc/ -sc -com.sc -gov.sc -net.sc -org.sc -edu.sc - -// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm -// Submitted by registry <admin@isoc.sd> 2008-06-17 -sd -com.sd -net.sd -org.sd -edu.sd -med.sd -gov.sd -info.sd - -// se : http://en.wikipedia.org/wiki/.se -// Submitted by registry <Patrik.Wallstrom@iis.se> 2008-06-24 -se -a.se -ac.se -b.se -bd.se -brand.se -c.se -d.se -e.se -f.se -fh.se -fhsk.se -fhv.se -g.se -h.se -i.se -k.se -komforb.se -kommunalforbund.se -komvux.se -l.se -lanbib.se -m.se -n.se -naturbruksgymn.se -o.se -org.se -p.se -parti.se -pp.se -press.se -r.se -s.se -sshn.se -t.se -tm.se -u.se -w.se -x.se -y.se -z.se - -// sg : http://www.nic.net.sg/sub_policies_agreement/2ld.html -sg -com.sg -net.sg -org.sg -gov.sg -edu.sg -per.sg - -// sh : http://www.nic.sh/rules.html -// list of 2nd level domains ? -sh - -// si : http://en.wikipedia.org/wiki/.si -si - -// sj : No registrations at this time. -// Submitted by registry <jarle@uninett.no> 2008-06-16 - -// sk : http://en.wikipedia.org/wiki/.sk -// list of 2nd level domains ? -sk - -// sl : http://www.nic.sl -// Submitted by registry <adam@neoip.com> 2008-06-12 -sl -com.sl -net.sl -edu.sl -gov.sl -org.sl - -// sm : http://en.wikipedia.org/wiki/.sm -sm - -// sn : http://en.wikipedia.org/wiki/.sn -sn -art.sn -com.sn -edu.sn -gouv.sn -org.sn -perso.sn -univ.sn - -// so : http://www.soregistry.com/ -so -com.so -net.so -org.so - -// sr : http://en.wikipedia.org/wiki/.sr -sr - -// st : http://www.nic.st/html/policyrules/ -st -co.st -com.st -consulado.st -edu.st -embaixada.st -gov.st -mil.st -net.st -org.st -principe.st -saotome.st -store.st - -// su : http://en.wikipedia.org/wiki/.su -su - -// sv : http://www.svnet.org.sv/svpolicy.html -*.sv - -// sy : http://en.wikipedia.org/wiki/.sy -// see also: http://www.gobin.info/domainname/sy.doc -sy -edu.sy -gov.sy -net.sy -mil.sy -com.sy -org.sy - -// sz : http://en.wikipedia.org/wiki/.sz -// http://www.sispa.org.sz/ -sz -co.sz -ac.sz -org.sz - -// tc : http://en.wikipedia.org/wiki/.tc -tc - -// td : http://en.wikipedia.org/wiki/.td -td - -// tel: http://en.wikipedia.org/wiki/.tel -// http://www.telnic.org/ -tel - -// tf : http://en.wikipedia.org/wiki/.tf -tf - -// tg : http://en.wikipedia.org/wiki/.tg -// http://www.nic.tg/nictg/index.php implies no reserved 2nd-level domains, -// although this contradicts wikipedia. -tg - -// th : http://en.wikipedia.org/wiki/.th -// Submitted by registry <krit@thains.co.th> 2008-06-17 -th -ac.th -co.th -go.th -in.th -mi.th -net.th -or.th - -// tj : http://www.nic.tj/policy.htm -tj -ac.tj -biz.tj -co.tj -com.tj -edu.tj -go.tj -gov.tj -int.tj -mil.tj -name.tj -net.tj -nic.tj -org.tj -test.tj -web.tj - -// tk : http://en.wikipedia.org/wiki/.tk -tk - -// tl : http://en.wikipedia.org/wiki/.tl -tl -gov.tl - -// tm : http://www.nic.tm/rules.html -// list of 2nd level tlds ? -tm - -// tn : http://en.wikipedia.org/wiki/.tn -// http://whois.ati.tn/ -tn -com.tn -ens.tn -fin.tn -gov.tn -ind.tn -intl.tn -nat.tn -net.tn -org.tn -info.tn -perso.tn -tourism.tn -edunet.tn -rnrt.tn -rns.tn -rnu.tn -mincom.tn -agrinet.tn -defense.tn -turen.tn - -// to : http://en.wikipedia.org/wiki/.to -// Submitted by registry <egullich@colo.to> 2008-06-17 -to -com.to -gov.to -net.to -org.to -edu.to -mil.to - -// tr : http://en.wikipedia.org/wiki/.tr -*.tr -!nic.tr -// Used by government in the TRNC -// http://en.wikipedia.org/wiki/.nc.tr -gov.nc.tr - -// travel : http://en.wikipedia.org/wiki/.travel -travel - -// tt : http://www.nic.tt/ -tt -co.tt -com.tt -org.tt -net.tt -biz.tt -info.tt -pro.tt -int.tt -coop.tt -jobs.tt -mobi.tt -travel.tt -museum.tt -aero.tt -name.tt -gov.tt -edu.tt - -// tv : http://en.wikipedia.org/wiki/.tv -// Not listing any 2LDs as reserved since none seem to exist in practice, -// Wikipedia notwithstanding. -tv - -// tw : http://en.wikipedia.org/wiki/.tw -tw -edu.tw -gov.tw -mil.tw -com.tw -net.tw -org.tw -idv.tw -game.tw -ebiz.tw -club.tw -網路.tw -組織.tw -商業.tw - -// tz : http://en.wikipedia.org/wiki/.tz -// Submitted by registry <randy@psg.com> 2008-06-17 -// Updated from http://www.tznic.or.tz/index.php/domains.html 2010-10-25 -ac.tz -co.tz -go.tz -mil.tz -ne.tz -or.tz -sc.tz - -// ua : http://www.nic.net.ua/ -ua -com.ua -edu.ua -gov.ua -in.ua -net.ua -org.ua -// ua geo-names -cherkassy.ua -chernigov.ua -chernovtsy.ua -ck.ua -cn.ua -crimea.ua -cv.ua -dn.ua -dnepropetrovsk.ua -donetsk.ua -dp.ua -if.ua -ivano-frankivsk.ua -kh.ua -kharkov.ua -kherson.ua -khmelnitskiy.ua -kiev.ua -kirovograd.ua -km.ua -kr.ua -ks.ua -kv.ua -lg.ua -lugansk.ua -lutsk.ua -lviv.ua -mk.ua -nikolaev.ua -od.ua -odessa.ua -pl.ua -poltava.ua -rovno.ua -rv.ua -sebastopol.ua -sumy.ua -te.ua -ternopil.ua -uzhgorod.ua -vinnica.ua -vn.ua -zaporizhzhe.ua -zp.ua -zhitomir.ua -zt.ua - -// Private registries in .ua -co.ua -pp.ua - -// ug : http://www.registry.co.ug/ -ug -co.ug -ac.ug -sc.ug -go.ug -ne.ug -or.ug - -// uk : http://en.wikipedia.org/wiki/.uk -*.uk -*.sch.uk -!bl.uk -!british-library.uk -!icnet.uk -!jet.uk -!mod.uk -!nel.uk -!nhs.uk -!nic.uk -!nls.uk -!national-library-scotland.uk -!parliament.uk -!police.uk - -// us : http://en.wikipedia.org/wiki/.us -us -dni.us -fed.us -isa.us -kids.us -nsn.us -// us geographic names -ak.us -al.us -ar.us -as.us -az.us -ca.us -co.us -ct.us -dc.us -de.us -fl.us -ga.us -gu.us -hi.us -ia.us -id.us -il.us -in.us -ks.us -ky.us -la.us -ma.us -md.us -me.us -mi.us -mn.us -mo.us -ms.us -mt.us -nc.us -nd.us -ne.us -nh.us -nj.us -nm.us -nv.us -ny.us -oh.us -ok.us -or.us -pa.us -pr.us -ri.us -sc.us -sd.us -tn.us -tx.us -ut.us -vi.us -vt.us -va.us -wa.us -wi.us -wv.us -wy.us -// The registrar notes several more specific domains available in each state, -// such as state.*.us, dst.*.us, etc., but resolution of these is somewhat -// haphazard; in some states these domains resolve as addresses, while in others -// only subdomains are available, or even nothing at all. We include the -// most common ones where it's clear that different sites are different -// entities. -k12.ak.us -k12.al.us -k12.ar.us -k12.as.us -k12.az.us -k12.ca.us -k12.co.us -k12.ct.us -k12.dc.us -k12.de.us -k12.fl.us -k12.ga.us -k12.gu.us -// k12.hi.us Hawaii has a state-wide DOE login: bug 614565 -k12.ia.us -k12.id.us -k12.il.us -k12.in.us -k12.ks.us -k12.ky.us -k12.la.us -k12.ma.us -k12.md.us -k12.me.us -k12.mi.us -k12.mn.us -k12.mo.us -k12.ms.us -k12.mt.us -k12.nc.us -k12.nd.us -k12.ne.us -k12.nh.us -k12.nj.us -k12.nm.us -k12.nv.us -k12.ny.us -k12.oh.us -k12.ok.us -k12.or.us -k12.pa.us -k12.pr.us -k12.ri.us -k12.sc.us -k12.sd.us -k12.tn.us -k12.tx.us -k12.ut.us -k12.vi.us -k12.vt.us -k12.va.us -k12.wa.us -k12.wi.us -k12.wv.us -k12.wy.us - -cc.ak.us -cc.al.us -cc.ar.us -cc.as.us -cc.az.us -cc.ca.us -cc.co.us -cc.ct.us -cc.dc.us -cc.de.us -cc.fl.us -cc.ga.us -cc.gu.us -cc.hi.us -cc.ia.us -cc.id.us -cc.il.us -cc.in.us -cc.ks.us -cc.ky.us -cc.la.us -cc.ma.us -cc.md.us -cc.me.us -cc.mi.us -cc.mn.us -cc.mo.us -cc.ms.us -cc.mt.us -cc.nc.us -cc.nd.us -cc.ne.us -cc.nh.us -cc.nj.us -cc.nm.us -cc.nv.us -cc.ny.us -cc.oh.us -cc.ok.us -cc.or.us -cc.pa.us -cc.pr.us -cc.ri.us -cc.sc.us -cc.sd.us -cc.tn.us -cc.tx.us -cc.ut.us -cc.vi.us -cc.vt.us -cc.va.us -cc.wa.us -cc.wi.us -cc.wv.us -cc.wy.us - -lib.ak.us -lib.al.us -lib.ar.us -lib.as.us -lib.az.us -lib.ca.us -lib.co.us -lib.ct.us -lib.dc.us -lib.de.us -lib.fl.us -lib.ga.us -lib.gu.us -lib.hi.us -lib.ia.us -lib.id.us -lib.il.us -lib.in.us -lib.ks.us -lib.ky.us -lib.la.us -lib.ma.us -lib.md.us -lib.me.us -lib.mi.us -lib.mn.us -lib.mo.us -lib.ms.us -lib.mt.us -lib.nc.us -lib.nd.us -lib.ne.us -lib.nh.us -lib.nj.us -lib.nm.us -lib.nv.us -lib.ny.us -lib.oh.us -lib.ok.us -lib.or.us -lib.pa.us -lib.pr.us -lib.ri.us -lib.sc.us -lib.sd.us -lib.tn.us -lib.tx.us -lib.ut.us -lib.vi.us -lib.vt.us -lib.va.us -lib.wa.us -lib.wi.us -lib.wv.us -lib.wy.us - -// k12.ma.us contains school districts in Massachusetts. The 4LDs are -// managed indepedently except for private (PVT), charter (CHTR) and -// parochial (PAROCH) schools. Those are delegated dorectly to the -// 5LD operators. <k12-ma-hostmaster _ at _ rsuc.gweep.net> -pvt.k12.ma.us -chtr.k12.ma.us -paroch.k12.ma.us - -// uy : http://www.antel.com.uy/ -*.uy - -// uz : http://www.reg.uz/registerr.html -// are there other 2nd level tlds ? -uz -com.uz -co.uz - -// va : http://en.wikipedia.org/wiki/.va -va - -// vc : http://en.wikipedia.org/wiki/.vc -// Submitted by registry <kshah@ca.afilias.info> 2008-06-13 -vc -com.vc -net.vc -org.vc -gov.vc -mil.vc -edu.vc - -// ve : http://registro.nic.ve/nicve/registro/index.html -*.ve - -// vg : http://en.wikipedia.org/wiki/.vg -vg - -// vi : http://www.nic.vi/newdomainform.htm -// http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other -// TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they -// are available for registration (which they do not seem to be). -vi -co.vi -com.vi -k12.vi -net.vi -org.vi - -// vn : https://www.dot.vn/vnnic/vnnic/domainregistration.jsp -vn -com.vn -net.vn -org.vn -edu.vn -gov.vn -int.vn -ac.vn -biz.vn -info.vn -name.vn -pro.vn -health.vn - -// vu : http://en.wikipedia.org/wiki/.vu -// list of 2nd level tlds ? -vu - -// wf : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf -wf - -// ws : http://en.wikipedia.org/wiki/.ws -// http://samoanic.ws/index.dhtml -ws -com.ws -net.ws -org.ws -gov.ws -edu.ws - -// yt : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf -yt - -// IDN ccTLDs -// Please sort by ISO 3166 ccTLD, then punicode string -// when submitting patches and follow this format: -// <Punicode> ("<english word>" <language>) : <ISO 3166 ccTLD> -// [optional sponsoring org] -// <URL> - -// xn--mgbaam7a8h ("Emerat" Arabic) : AE -//http://nic.ae/english/arabicdomain/rules.jsp -امارات - -// xn--54b7fta0cc ("Bangla" Bangla) : BD -বাংলা - -// xn--fiqs8s ("China" Chinese-Han-Simplified <.Zhonggou>) : CN -// CNNIC -// http://cnnic.cn/html/Dir/2005/10/11/3218.htm -中国 - -// xn--fiqz9s ("China" Chinese-Han-Traditional <.Zhonggou>) : CN -// CNNIC -// http://cnnic.cn/html/Dir/2005/10/11/3218.htm -中國 - -// xn--lgbbat1ad8j ("Algeria / Al Jazair" Arabic) : DZ -الجزائر - -// xn--wgbh1c ("Egypt" Arabic .masr) : EG -// http://www.dotmasr.eg/ -مصر - -// xn--node ("ge" Georgian (Mkhedruli)) : GE -გე - -// xn--j6w193g ("Hong Kong" Chinese-Han) : HK -// https://www2.hkirc.hk/register/rules.jsp -香港 - -// xn--h2brj9c ("Bharat" Devanagari) : IN -// India -भारत - -// xn--mgbbh1a71e ("Bharat" Arabic) : IN -// India -بھارت - -// xn--fpcrj9c3d ("Bharat" Telugu) : IN -// India -భారత్ - -// xn--gecrj9c ("Bharat" Gujarati) : IN -// India -ભારત - -// xn--s9brj9c ("Bharat" Gurmukhi) : IN -// India -ਭਾਰਤ - -// xn--45brj9c ("Bharat" Bengali) : IN -// India -ভারত - -// xn--xkc2dl3a5ee0h ("India" Tamil) : IN -// India -இந்தியா - -// xn--mgba3a4f16a ("Iran" Persian) : IR -ایران - -// xn--mgba3a4fra ("Iran" Arabic) : IR -ايران - -//xn--mgbayh7gpa ("al-Ordon" Arabic) JO -//National Information Technology Center (NITC) -//Royal Scientific Society, Al-Jubeiha -الاردن - -// xn--3e0b707e ("Republic of Korea" Hangul) : KR -한국 - -// xn--fzc2c9e2c ("Lanka" Sinhalese-Sinhala) : LK -// http://nic.lk -ලංකා - -// xn--xkc2al3hye2a ("Ilangai" Tamil) : LK -// http://nic.lk -இலங்கை - -// xn--mgbc0a9azcg ("Morocco / al-Maghrib" Arabic) : MA -المغرب - -// xn--mgb9awbf ("Oman" Arabic) : OM -عمان - -// xn--ygbi2ammx ("Falasteen" Arabic) : PS -// The Palestinian National Internet Naming Authority (PNINA) -// http://www.pnina.ps -فلسطين - -// xn--90a3ac ("srb" Cyrillic) : RS -срб - -// xn--p1ai ("rf" Russian-Cyrillic) : RU -// http://www.cctld.ru/en/docs/rulesrf.php -рф - -// xn--wgbl6a ("Qatar" Arabic) : QA -// http://www.ict.gov.qa/ -قطر - -// xn--mgberp4a5d4ar ("AlSaudiah" Arabic) : SA -// http://www.nic.net.sa/ -السعودية - -// xn--mgberp4a5d4a87g ("AlSaudiah" Arabic) variant : SA -السعودیة - -// xn--mgbqly7c0a67fbc ("AlSaudiah" Arabic) variant : SA -السعودیۃ - -// xn--mgbqly7cvafr ("AlSaudiah" Arabic) variant : SA -السعوديه - -// xn--ogbpf8fl ("Syria" Arabic) : SY -سورية - -// xn--mgbtf8fl ("Syria" Arabic) variant : SY -سوريا - -// xn--yfro4i67o Singapore ("Singapore" Chinese-Han) : SG -新加坡 - -// xn--clchc0ea0b2g2a9gcd ("Singapore" Tamil) : SG -சிங்கப்பூர் - -// xn--o3cw4h ("Thai" Thai) : TH -// http://www.thnic.co.th -ไทย - -// xn--pgbs0dh ("Tunis") : TN -// http://nic.tn -تونس - -// xn--kpry57d ("Taiwan" Chinese-Han-Traditional) : TW -// http://www.twnic.net/english/dn/dn_07a.htm -台灣 - -// xn--kprw13d ("Taiwan" Chinese-Han-Simplified) : TW -// http://www.twnic.net/english/dn/dn_07a.htm -台湾 - -// xn--nnx388a ("Taiwan") variant : TW -臺灣 - -// xn--j1amh ("ukr" Cyrillic) : UA -укр - -// xn--mgb2ddes ("AlYemen" Arabic) : YE -اليمن - -// xxx : http://icmregistry.com -xxx - -// ye : http://www.y.net.ye/services/domain_name.htm -*.ye - -// za : http://www.zadna.org.za/slds.html -*.za - -// zm : http://en.wikipedia.org/wiki/.zm -*.zm - -// zw : http://en.wikipedia.org/wiki/.zw -*.zw - -// ===END ICANN DOMAINS=== -// ===BEGIN PRIVATE DOMAINS=== - -// info.at : http://www.info.at/ -biz.at -info.at - -// priv.at : http://www.nic.priv.at/ -// Submitted by registry <lendl@nic.at> 2008-06-09 -priv.at - -// co.ca : http://registry.co.ca -co.ca - -// CentralNic : http://www.centralnic.com/names/domains -// Confirmed by registry <gavin.brown@centralnic.com> 2008-06-09 -ar.com -br.com -cn.com -de.com -eu.com -gb.com -gr.com -hu.com -jpn.com -kr.com -no.com -qc.com -ru.com -sa.com -se.com -uk.com -us.com -uy.com -za.com -gb.net -jp.net -se.net -uk.net -ae.org -us.org -com.de - -// Opera Software, A.S.A. -// Requested by Yngve Pettersen <yngve@opera.com> 2009-11-26 -operaunite.com - -// Google, Inc. -// Requested by Eduardo Vela <evn@google.com> 2010-09-06 -appspot.com - -// iki.fi : Submitted by Hannu Aronsson <haa@iki.fi> 2009-11-05 -iki.fi - -// c.la : http://www.c.la/ -c.la - -// ZaNiC : http://www.za.net/ -// Confirmed by registry <hostmaster@nic.za.net> 2009-10-03 -za.net -za.org - -// CoDNS B.V. -// Added 2010-05-23. -co.nl -co.no - -// Mainseek Sp. z o.o. : http://www.co.pl/ -co.pl - -// DynDNS.com : http://www.dyndns.com/services/dns/dyndns/ -dyndns-at-home.com -dyndns-at-work.com -dyndns-blog.com -dyndns-free.com -dyndns-home.com -dyndns-ip.com -dyndns-mail.com -dyndns-office.com -dyndns-pics.com -dyndns-remote.com -dyndns-server.com -dyndns-web.com -dyndns-wiki.com -dyndns-work.com -dyndns.biz -dyndns.info -dyndns.org -dyndns.tv -at-band-camp.net -ath.cx -barrel-of-knowledge.info -barrell-of-knowledge.info -better-than.tv -blogdns.com -blogdns.net -blogdns.org -blogsite.org -boldlygoingnowhere.org -broke-it.net -buyshouses.net -cechire.com -dnsalias.com -dnsalias.net -dnsalias.org -dnsdojo.com -dnsdojo.net -dnsdojo.org -does-it.net -doesntexist.com -doesntexist.org -dontexist.com -dontexist.net -dontexist.org -doomdns.com -doomdns.org -dvrdns.org -dyn-o-saur.com -dynalias.com -dynalias.net -dynalias.org -dynathome.net -dyndns.ws -endofinternet.net -endofinternet.org -endoftheinternet.org -est-a-la-maison.com -est-a-la-masion.com -est-le-patron.com -est-mon-blogueur.com -for-better.biz -for-more.biz -for-our.info -for-some.biz -for-the.biz -forgot.her.name -forgot.his.name -from-ak.com -from-al.com -from-ar.com -from-az.net -from-ca.com -from-co.net -from-ct.com -from-dc.com -from-de.com -from-fl.com -from-ga.com -from-hi.com -from-ia.com -from-id.com -from-il.com -from-in.com -from-ks.com -from-ky.com -from-la.net -from-ma.com -from-md.com -from-me.org -from-mi.com -from-mn.com -from-mo.com -from-ms.com -from-mt.com -from-nc.com -from-nd.com -from-ne.com -from-nh.com -from-nj.com -from-nm.com -from-nv.com -from-ny.net -from-oh.com -from-ok.com -from-or.com -from-pa.com -from-pr.com -from-ri.com -from-sc.com -from-sd.com -from-tn.com -from-tx.com -from-ut.com -from-va.com -from-vt.com -from-wa.com -from-wi.com -from-wv.com -from-wy.com -ftpaccess.cc -fuettertdasnetz.de -game-host.org -game-server.cc -getmyip.com -gets-it.net -go.dyndns.org -gotdns.com -gotdns.org -groks-the.info -groks-this.info -ham-radio-op.net -here-for-more.info -hobby-site.com -hobby-site.org -home.dyndns.org -homedns.org -homeftp.net -homeftp.org -homeip.net -homelinux.com -homelinux.net -homelinux.org -homeunix.com -homeunix.net -homeunix.org -iamallama.com -in-the-band.net -is-a-anarchist.com -is-a-blogger.com -is-a-bookkeeper.com -is-a-bruinsfan.org -is-a-bulls-fan.com -is-a-candidate.org -is-a-caterer.com -is-a-celticsfan.org -is-a-chef.com -is-a-chef.net -is-a-chef.org -is-a-conservative.com -is-a-cpa.com -is-a-cubicle-slave.com -is-a-democrat.com -is-a-designer.com -is-a-doctor.com -is-a-financialadvisor.com -is-a-geek.com -is-a-geek.net -is-a-geek.org -is-a-green.com -is-a-guru.com -is-a-hard-worker.com -is-a-hunter.com -is-a-knight.org -is-a-landscaper.com -is-a-lawyer.com -is-a-liberal.com -is-a-libertarian.com -is-a-linux-user.org -is-a-llama.com -is-a-musician.com -is-a-nascarfan.com -is-a-nurse.com -is-a-painter.com -is-a-patsfan.org -is-a-personaltrainer.com -is-a-photographer.com -is-a-player.com -is-a-republican.com -is-a-rockstar.com -is-a-socialist.com -is-a-soxfan.org -is-a-student.com -is-a-teacher.com -is-a-techie.com -is-a-therapist.com -is-an-accountant.com -is-an-actor.com -is-an-actress.com -is-an-anarchist.com -is-an-artist.com -is-an-engineer.com -is-an-entertainer.com -is-by.us -is-certified.com -is-found.org -is-gone.com -is-into-anime.com -is-into-cars.com -is-into-cartoons.com -is-into-games.com -is-leet.com -is-lost.org -is-not-certified.com -is-saved.org -is-slick.com -is-uberleet.com -is-very-bad.org -is-very-evil.org -is-very-good.org -is-very-nice.org -is-very-sweet.org -is-with-theband.com -isa-geek.com -isa-geek.net -isa-geek.org -isa-hockeynut.com -issmarterthanyou.com -isteingeek.de -istmein.de -kicks-ass.net -kicks-ass.org -knowsitall.info -land-4-sale.us -lebtimnetz.de -leitungsen.de -likes-pie.com -likescandy.com -merseine.nu -mine.nu -misconfused.org -mypets.ws -myphotos.cc -neat-url.com -office-on-the.net -on-the-web.tv -podzone.net -podzone.org -readmyblog.org -saves-the-whales.com -scrapper-site.net -scrapping.cc -selfip.biz -selfip.com -selfip.info -selfip.net -selfip.org -sells-for-less.com -sells-for-u.com -sells-it.net -sellsyourhome.org -servebbs.com -servebbs.net -servebbs.org -serveftp.net -serveftp.org -servegame.org -shacknet.nu -simple-url.com -space-to-rent.com -stuff-4-sale.org -stuff-4-sale.us -teaches-yoga.com -thruhere.net -traeumtgerade.de -webhop.biz -webhop.info -webhop.net -webhop.org -worse-than.tv -writesthisblog.com - -// ===END PRIVATE DOMAINS=== diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/test.js deleted file mode 100644 index 3cce815e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tough-cookie/test.js +++ /dev/null @@ -1,1340 +0,0 @@ -/* - * Copyright GoInstant, Inc. and other contributors. 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. - */ - -var vows = require('vows'); -var assert = require('assert'); -var async = require('async'); - -// NOTE use require("tough-cookie") in your own code: -var tough = require('./lib/cookie'); -var Cookie = tough.Cookie; -var CookieJar = tough.CookieJar; - - -function dateVows(table) { - var theVows = { }; - var keys = Object.keys(table).forEach(function(date) { - var expect = table[date]; - theVows[date] = function() { - var got = tough.parseDate(date) ? 'valid' : 'invalid'; - assert.equal(got, expect ? 'valid' : 'invalid'); - }; - }); - return { "date parsing": theVows }; -} - -function matchVows(func,table) { - var theVows = {}; - table.forEach(function(item) { - var str = item[0]; - var dom = item[1]; - var expect = item[2]; - var label = str+(expect?" matches ":" doesn't match ")+dom; - theVows[label] = function() { - assert.equal(func(str,dom),expect); - }; - }); - return theVows; -} - -function defaultPathVows(table) { - var theVows = {}; - table.forEach(function(item) { - var str = item[0]; - var expect = item[1]; - var label = str+" gives "+expect; - theVows[label] = function() { - assert.equal(tough.defaultPath(str),expect); - }; - }); - return theVows; -} - -var atNow = Date.now(); -function at(offset) { return {now: new Date(atNow+offset)} } - -vows.describe('Cookie Jar') -.addBatch({ - "all defined": function() { - assert.ok(Cookie); - assert.ok(CookieJar); - }, -}) -.addBatch( - dateVows({ - "Wed, 09 Jun 2021 10:18:14 GMT": true, - "Wed, 09 Jun 2021 22:18:14 GMT": true, - "Tue, 18 Oct 2011 07:42:42.123 GMT": true, - "18 Oct 2011 07:42:42 GMT": true, - "8 Oct 2011 7:42:42 GMT": true, - "8 Oct 2011 7:2:42 GMT": false, - "Oct 18 2011 07:42:42 GMT": true, - "Tue Oct 18 2011 07:05:03 GMT+0000 (GMT)": true, - "09 Jun 2021 10:18:14 GMT": true, - "99 Jix 3038 48:86:72 ZMT": false, - '01 Jan 1970 00:00:00 GMT': true, - '01 Jan 1600 00:00:00 GMT': false, // before 1601 - '01 Jan 1601 00:00:00 GMT': true, - '10 Feb 81 13:00:00 GMT': true, // implicit year - 'Thu, 01 Jan 1970 00:00:010 GMT': true, // strange time, non-strict OK - 'Thu, 17-Apr-2014 02:12:29 GMT': true, // dashes - 'Thu, 17-Apr-2014 02:12:29 UTC': true, // dashes and UTC - }) -) -.addBatch({ - "strict date parse of Thu, 01 Jan 1970 00:00:010 GMT": { - topic: function() { - return tough.parseDate('Thu, 01 Jan 1970 00:00:010 GMT', true) ? true : false; - }, - "invalid": function(date) { - assert.equal(date,false); - }, - } -}) -.addBatch({ - "formatting": { - "a simple cookie": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=b'); - }, - }, - "a cookie with spaces in the value": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'beta gamma'; - return c; - }, - "doesn't validate": function(c) { - assert.ok(!c.validate()); - }, - "to string": function(c) { - assert.equal(c.toString(), 'a="beta gamma"'); - }, - }, - "with an empty value and HttpOnly": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.httpOnly = true; - return c; - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=; HttpOnly'); - } - }, - "with an expiry": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.setExpires("Oct 18 2011 07:05:03 GMT"); - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=b; Expires=Tue, 18 Oct 2011 07:05:03 GMT'); - }, - "to short string": function(c) { - assert.equal(c.cookieString(), 'a=b'); - }, - }, - "with a max-age": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.setExpires("Oct 18 2011 07:05:03 GMT"); - c.maxAge = 12345; - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); // mabe this one *shouldn't*? - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=b; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Max-Age=12345'); - }, - }, - "with a bunch of things": function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.setExpires("Oct 18 2011 07:05:03 GMT"); - c.maxAge = 12345; - c.domain = 'example.com'; - c.path = '/foo'; - c.secure = true; - c.httpOnly = true; - c.extensions = ['MyExtension']; - assert.equal(c.toString(), 'a=b; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Max-Age=12345; Domain=example.com; Path=/foo; Secure; HttpOnly; MyExtension'); - }, - "a host-only cookie": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.hostOnly = true; - c.domain = 'shouldnt-stringify.example.com'; - c.path = '/should-stringify'; - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); - }, - "to string": function(c) { - assert.equal(c.toString(), 'a=b; Path=/should-stringify'); - }, - }, - "minutes are '10'": { - topic: function() { - var c = new Cookie(); - c.key = 'a'; - c.value = 'b'; - c.expires = new Date(1284113410000); - return c; - }, - "validates": function(c) { - assert.ok(c.validate()); - }, - "to string": function(c) { - var str = c.toString(); - assert.notEqual(str, 'a=b; Expires=Fri, 010 Sep 2010 010:010:010 GMT'); - assert.equal(str, 'a=b; Expires=Fri, 10 Sep 2010 10:10:10 GMT'); - }, - } - } -}) -.addBatch({ - "TTL with max-age": function() { - var c = new Cookie(); - c.maxAge = 123; - assert.equal(c.TTL(), 123000); - assert.equal(c.expiryTime(new Date(9000000)), 9123000); - }, - "TTL with zero max-age": function() { - var c = new Cookie(); - c.key = 'a'; c.value = 'b'; - c.maxAge = 0; // should be treated as "earliest representable" - assert.equal(c.TTL(), 0); - assert.equal(c.expiryTime(new Date(9000000)), -Infinity); - assert.ok(!c.validate()); // not valid, really: non-zero-digit *DIGIT - }, - "TTL with negative max-age": function() { - var c = new Cookie(); - c.key = 'a'; c.value = 'b'; - c.maxAge = -1; // should be treated as "earliest representable" - assert.equal(c.TTL(), 0); - assert.equal(c.expiryTime(new Date(9000000)), -Infinity); - assert.ok(!c.validate()); // not valid, really: non-zero-digit *DIGIT - }, - "TTL with max-age and expires": function() { - var c = new Cookie(); - c.maxAge = 123; - c.expires = new Date(Date.now()+9000); - assert.equal(c.TTL(), 123000); - assert.ok(c.isPersistent()); - }, - "TTL with expires": function() { - var c = new Cookie(); - var now = Date.now(); - c.expires = new Date(now+9000); - assert.equal(c.TTL(now), 9000); - assert.equal(c.expiryTime(), c.expires.getTime()); - }, - "TTL with old expires": function() { - var c = new Cookie(); - c.setExpires('17 Oct 2010 00:00:00 GMT'); - assert.ok(c.TTL() < 0); - assert.ok(c.isPersistent()); - }, - "default TTL": { - topic: function() { return new Cookie() }, - "is Infinite-future": function(c) { assert.equal(c.TTL(), Infinity) }, - "is a 'session' cookie": function(c) { assert.ok(!c.isPersistent()) }, - }, -}).addBatch({ - "Parsing": { - "simple": { - topic: function() { - return Cookie.parse('a=bcd',true) || null; - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'a') }, - "value": function(c) { assert.equal(c.value, 'bcd') }, - "no path": function(c) { assert.equal(c.path, null) }, - "no domain": function(c) { assert.equal(c.domain, null) }, - "no extensions": function(c) { assert.ok(!c.extensions) }, - }, - "with expiry": { - topic: function() { - return Cookie.parse('a=bcd; Expires=Tue, 18 Oct 2011 07:05:03 GMT',true) || null; - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'a') }, - "value": function(c) { assert.equal(c.value, 'bcd') }, - "has expires": function(c) { - assert.ok(c.expires !== Infinity, 'expiry is infinite when it shouldn\'t be'); - assert.equal(c.expires.getTime(), 1318921503000); - }, - }, - "with expiry and path": { - topic: function() { - return Cookie.parse('abc="xyzzy!"; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Path=/aBc',true) || null; - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'abc') }, - "value": function(c) { assert.equal(c.value, 'xyzzy!') }, - "has expires": function(c) { - assert.ok(c.expires !== Infinity, 'expiry is infinite when it shouldn\'t be'); - assert.equal(c.expires.getTime(), 1318921503000); - }, - "has path": function(c) { assert.equal(c.path, '/aBc'); }, - "no httponly or secure": function(c) { - assert.ok(!c.httpOnly); - assert.ok(!c.secure); - }, - }, - "with everything": { - topic: function() { - return Cookie.parse('abc="xyzzy!"; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Path=/aBc; Domain=example.com; Secure; HTTPOnly; Max-Age=1234; Foo=Bar; Baz', true) || null; - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'abc') }, - "value": function(c) { assert.equal(c.value, 'xyzzy!') }, - "has expires": function(c) { - assert.ok(c.expires !== Infinity, 'expiry is infinite when it shouldn\'t be'); - assert.equal(c.expires.getTime(), 1318921503000); - }, - "has path": function(c) { assert.equal(c.path, '/aBc'); }, - "has domain": function(c) { assert.equal(c.domain, 'example.com'); }, - "has httponly": function(c) { assert.equal(c.httpOnly, true); }, - "has secure": function(c) { assert.equal(c.secure, true); }, - "has max-age": function(c) { assert.equal(c.maxAge, 1234); }, - "has extensions": function(c) { - assert.ok(c.extensions); - assert.equal(c.extensions[0], 'Foo=Bar'); - assert.equal(c.extensions[1], 'Baz'); - }, - }, - "invalid expires": { - "strict": function() { assert.ok(!Cookie.parse("a=b; Expires=xyzzy", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; Expires=xyzzy"); - assert.ok(c); - assert.equal(c.expires, Infinity); - }, - }, - "zero max-age": { - "strict": function() { assert.ok(!Cookie.parse("a=b; Max-Age=0", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; Max-Age=0"); - assert.ok(c); - assert.equal(c.maxAge, 0); - }, - }, - "negative max-age": { - "strict": function() { assert.ok(!Cookie.parse("a=b; Max-Age=-1", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; Max-Age=-1"); - assert.ok(c); - assert.equal(c.maxAge, -1); - }, - }, - "empty domain": { - "strict": function() { assert.ok(!Cookie.parse("a=b; domain=", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; domain="); - assert.ok(c); - assert.equal(c.domain, null); - }, - }, - "dot domain": { - "strict": function() { assert.ok(!Cookie.parse("a=b; domain=.", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; domain=."); - assert.ok(c); - assert.equal(c.domain, null); - }, - }, - "uppercase domain": { - "strict lowercases": function() { - var c = Cookie.parse("a=b; domain=EXAMPLE.COM"); - assert.ok(c); - assert.equal(c.domain, 'example.com'); - }, - "non-strict lowercases": function() { - var c = Cookie.parse("a=b; domain=EXAMPLE.COM"); - assert.ok(c); - assert.equal(c.domain, 'example.com'); - }, - }, - "trailing dot in domain": { - topic: function() { - return Cookie.parse("a=b; Domain=example.com.", true) || null; - }, - "has the domain": function(c) { assert.equal(c.domain,"example.com.") }, - "but doesn't validate": function(c) { assert.equal(c.validate(),false) }, - }, - "empty path": { - "strict": function() { assert.ok(!Cookie.parse("a=b; path=", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; path="); - assert.ok(c); - assert.equal(c.path, null); - }, - }, - "no-slash path": { - "strict": function() { assert.ok(!Cookie.parse("a=b; path=xyzzy", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; path=xyzzy"); - assert.ok(c); - assert.equal(c.path, null); - }, - }, - "trailing semi-colons after path": { - topic: function () { - return [ - "a=b; path=/;", - "c=d;;;;" - ]; - }, - "strict": function (t) { - assert.ok(!Cookie.parse(t[0], true)); - assert.ok(!Cookie.parse(t[1], true)); - }, - "non-strict": function (t) { - var c1 = Cookie.parse(t[0]); - var c2 = Cookie.parse(t[1]); - assert.ok(c1); - assert.ok(c2); - assert.equal(c1.path, '/'); - } - }, - "secure-with-value": { - "strict": function() { assert.ok(!Cookie.parse("a=b; Secure=xyzzy", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; Secure=xyzzy"); - assert.ok(c); - assert.equal(c.secure, true); - }, - }, - "httponly-with-value": { - "strict": function() { assert.ok(!Cookie.parse("a=b; HttpOnly=xyzzy", true)) }, - "non-strict": function() { - var c = Cookie.parse("a=b; HttpOnly=xyzzy"); - assert.ok(c); - assert.equal(c.httpOnly, true); - }, - }, - "garbage": { - topic: function() { - return Cookie.parse("\x08", true) || null; - }, - "doesn't parse": function(c) { assert.equal(c,null) }, - }, - "public suffix domain": { - topic: function() { - return Cookie.parse("a=b; domain=kyoto.jp", true) || null; - }, - "parses fine": function(c) { - assert.ok(c); - assert.equal(c.domain, 'kyoto.jp'); - }, - "but fails validation": function(c) { - assert.ok(c); - assert.ok(!c.validate()); - }, - }, - "Ironically, Google 'GAPS' cookie has very little whitespace": { - topic: function() { - return Cookie.parse("GAPS=1:A1aaaaAaAAa1aaAaAaaAAAaaa1a11a:aaaAaAaAa-aaaA1-;Path=/;Expires=Thu, 17-Apr-2014 02:12:29 GMT;Secure;HttpOnly"); - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'GAPS') }, - "value": function(c) { assert.equal(c.value, '1:A1aaaaAaAAa1aaAaAaaAAAaaa1a11a:aaaAaAaAa-aaaA1-') }, - "path": function(c) { - assert.notEqual(c.path, '/;Expires'); // BUG - assert.equal(c.path, '/'); - }, - "expires": function(c) { - assert.notEqual(c.expires, Infinity); - assert.equal(c.expires.getTime(), 1397700749000); - }, - "secure": function(c) { assert.ok(c.secure) }, - "httponly": function(c) { assert.ok(c.httpOnly) }, - }, - "lots of equal signs": { - topic: function() { - return Cookie.parse("queryPref=b=c&d=e; Path=/f=g; Expires=Thu, 17 Apr 2014 02:12:29 GMT; HttpOnly"); - }, - "parsed": function(c) { assert.ok(c) }, - "key": function(c) { assert.equal(c.key, 'queryPref') }, - "value": function(c) { assert.equal(c.value, 'b=c&d=e') }, - "path": function(c) { - assert.equal(c.path, '/f=g'); - }, - "expires": function(c) { - assert.notEqual(c.expires, Infinity); - assert.equal(c.expires.getTime(), 1397700749000); - }, - "httponly": function(c) { assert.ok(c.httpOnly) }, - } - } -}) -.addBatch({ - "domain normalization": { - "simple": function() { - var c = new Cookie(); - c.domain = "EXAMPLE.com"; - assert.equal(c.canonicalizedDomain(), "example.com"); - }, - "extra dots": function() { - var c = new Cookie(); - c.domain = ".EXAMPLE.com"; - assert.equal(c.cdomain(), "example.com"); - }, - "weird trailing dot": function() { - var c = new Cookie(); - c.domain = "EXAMPLE.ca."; - assert.equal(c.canonicalizedDomain(), "example.ca."); - }, - "weird internal dots": function() { - var c = new Cookie(); - c.domain = "EXAMPLE...ca."; - assert.equal(c.canonicalizedDomain(), "example...ca."); - }, - "IDN": function() { - var c = new Cookie(); - c.domain = "δοκιμή.δοκιμή"; // "test.test" in greek - assert.equal(c.canonicalizedDomain(), "xn--jxalpdlp.xn--jxalpdlp"); - } - } -}) -.addBatch({ - "Domain Match":matchVows(tough.domainMatch, [ - // str, dom, expect - ["example.com", "example.com", true], - ["eXaMpLe.cOm", "ExAmPlE.CoM", true], - ["no.ca", "yes.ca", false], - ["wwwexample.com", "example.com", false], - ["www.example.com", "example.com", true], - ["example.com", "www.example.com", false], - ["www.subdom.example.com", "example.com", true], - ["www.subdom.example.com", "subdom.example.com", true], - ["example.com", "example.com.", false], // RFC6265 S4.1.2.3 - ["192.168.0.1", "168.0.1", false], // S5.1.3 "The string is a host name" - [null, "example.com", null], - ["example.com", null, null], - [null, null, null], - [undefined, undefined, null], - ]) -}) -.addBatch({ - "default-path": defaultPathVows([ - [null,"/"], - ["/","/"], - ["/file","/"], - ["/dir/file","/dir"], - ["noslash","/"], - ]) -}) -.addBatch({ - "Path-Match": matchVows(tough.pathMatch, [ - // request, cookie, match - ["/","/",true], - ["/dir","/",true], - ["/","/dir",false], - ["/dir/","/dir/", true], - ["/dir/file","/dir/",true], - ["/dir/file","/dir",true], - ["/directory","/dir",false], - ]) -}) -.addBatch({ - "Cookie Sorting": { - topic: function() { - var cookies = []; - var now = Date.now(); - cookies.push(Cookie.parse("a=0; Domain=example.com")); - cookies.push(Cookie.parse("b=1; Domain=www.example.com")); - cookies.push(Cookie.parse("c=2; Domain=example.com; Path=/pathA")); - cookies.push(Cookie.parse("d=3; Domain=www.example.com; Path=/pathA")); - cookies.push(Cookie.parse("e=4; Domain=example.com; Path=/pathA/pathB")); - cookies.push(Cookie.parse("f=5; Domain=www.example.com; Path=/pathA/pathB")); - - // force a stable creation time consistent with the order above since - // some may have been created at now + 1ms. - var i = cookies.length; - cookies.forEach(function(cookie) { - cookie.creation = new Date(now - 100*(i--)); - }); - - // weak shuffle: - cookies = cookies.sort(function(){return Math.random()-0.5}); - - cookies = cookies.sort(tough.cookieCompare); - return cookies; - }, - "got": function(cookies) { - assert.lengthOf(cookies, 6); - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['e','f','c','d','a','b']); - }, - } -}) -.addBatch({ - "CookieJar": { - "Setting a basic cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com; Path=/"); - assert.strictEqual(c.hostOnly, null); - assert.instanceOf(c.creation, Date); - assert.strictEqual(c.lastAccessed, null); - c.creation = new Date(Date.now()-10000); - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "works": function(c) { assert.instanceOf(c,Cookie) }, // C is for Cookie, good enough for me - "gets timestamped": function(c) { - assert.ok(c.creation); - assert.ok(Date.now() - c.creation.getTime() < 5000); // recently stamped - assert.ok(c.lastAccessed); - assert.equal(c.creation, c.lastAccessed); - assert.equal(c.TTL(), Infinity); - assert.ok(!c.isPersistent()); - }, - }, - "Setting a no-path cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com"); - assert.strictEqual(c.hostOnly, null); - assert.instanceOf(c.creation, Date); - assert.strictEqual(c.lastAccessed, null); - c.creation = new Date(Date.now()-10000); - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "domain": function(c) { assert.equal(c.domain, 'example.com') }, - "path is /": function(c) { assert.equal(c.path, '/') }, - "path was derived": function(c) { assert.strictEqual(c.pathIsDefault, true) }, - }, - "Setting a cookie already marked as host-only": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com"); - assert.strictEqual(c.hostOnly, null); - assert.instanceOf(c.creation, Date); - assert.strictEqual(c.lastAccessed, null); - c.creation = new Date(Date.now()-10000); - c.hostOnly = true; - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "domain": function(c) { assert.equal(c.domain, 'example.com') }, - "still hostOnly": function(c) { assert.strictEqual(c.hostOnly, true) }, - }, - "Setting a session cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b"); - assert.strictEqual(c.path, null); - cj.setCookie(c, 'http://www.example.com/dir/index.html', this.callback); - }, - "works": function(c) { assert.instanceOf(c,Cookie) }, - "gets the domain": function(c) { assert.equal(c.domain, 'www.example.com') }, - "gets the default path": function(c) { assert.equal(c.path, '/dir') }, - "is 'hostOnly'": function(c) { assert.ok(c.hostOnly) }, - }, - "Setting wrong domain cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=fooxample.com; Path=/"); - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "fails": function(err,c) { - assert.ok(err.message.match(/domain/i)); - assert.ok(!c); - }, - }, - "Setting sub-domain cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=www.example.com; Path=/"); - cj.setCookie(c, 'http://example.com/index.html', this.callback); - }, - "fails": function(err,c) { - assert.ok(err.message.match(/domain/i)); - assert.ok(!c); - }, - }, - "Setting super-domain cookie": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com; Path=/"); - cj.setCookie(c, 'http://www.app.example.com/index.html', this.callback); - }, - "success": function(err,c) { - assert.ok(!err); - assert.equal(c.domain, 'example.com'); - }, - }, - "Setting HttpOnly cookie over non-HTTP API": { - topic: function() { - var cj = new CookieJar(); - var c = Cookie.parse("a=b; Domain=example.com; Path=/; HttpOnly"); - cj.setCookie(c, 'http://example.com/index.html', {http:false}, this.callback); - }, - "fails": function(err,c) { - assert.match(err.message, /HttpOnly/i); - assert.ok(!c); - }, - }, - }, - "Cookie Jar store eight cookies": { - topic: function() { - var cj = new CookieJar(); - var ex = 'http://example.com/index.html'; - var tasks = []; - tasks.push(function(next) { - cj.setCookie('a=1; Domain=example.com; Path=/',ex,at(0),next); - }); - tasks.push(function(next) { - cj.setCookie('b=2; Domain=example.com; Path=/; HttpOnly',ex,at(1000),next); - }); - tasks.push(function(next) { - cj.setCookie('c=3; Domain=example.com; Path=/; Secure',ex,at(2000),next); - }); - tasks.push(function(next) { // path - cj.setCookie('d=4; Domain=example.com; Path=/foo',ex,at(3000),next); - }); - tasks.push(function(next) { // host only - cj.setCookie('e=5',ex,at(4000),next); - }); - tasks.push(function(next) { // other domain - cj.setCookie('f=6; Domain=nodejs.org; Path=/','http://nodejs.org',at(5000),next); - }); - tasks.push(function(next) { // expired - cj.setCookie('g=7; Domain=example.com; Path=/; Expires=Tue, 18 Oct 2011 00:00:00 GMT',ex,at(6000),next); - }); - tasks.push(function(next) { // expired via Max-Age - cj.setCookie('h=8; Domain=example.com; Path=/; Max-Age=1',ex,next); - }); - var cb = this.callback; - async.parallel(tasks, function(err,results){ - setTimeout(function() { - cb(err,cj,results); - }, 2000); // so that 'h=8' expires - }); - }, - "setup ok": function(err,cj,results) { - assert.ok(1); - }, - "then retrieving for http://nodejs.org": { - topic: function(cj,results) { - cj.getCookies('http://nodejs.org',this.callback); - }, - "get a nodejs cookie": function(cookies) { - assert.lengthOf(cookies, 1); - var cookie = cookies[0]; - assert.equal(cookie.domain, 'nodejs.org'); - }, - }, - "then retrieving for https://example.com": { - topic: function(cj,results) { - cj.getCookies('https://example.com',{secure:true},this.callback); - }, - "get a secure example cookie with others": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','b','c','e']); - }, - }, - "then retrieving for https://example.com (missing options)": { - topic: function(cj,results) { - cj.getCookies('https://example.com',this.callback); - }, - "get a secure example cookie with others": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','b','c','e']); - }, - }, - "then retrieving for http://example.com": { - topic: function(cj,results) { - cj.getCookies('http://example.com',this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','b','e']); - }, - }, - "then retrieving for http://EXAMPlE.com": { - topic: function(cj,results) { - cj.getCookies('http://EXAMPlE.com',this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','b','e']); - }, - }, - "then retrieving for http://example.com, non-HTTP": { - topic: function(cj,results) { - cj.getCookies('http://example.com',{http:false},this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['a','e']); - }, - }, - "then retrieving for http://example.com/foo/bar": { - topic: function(cj,results) { - cj.getCookies('http://example.com/foo/bar',this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['d','a','b','e']); - }, - }, - "then retrieving for http://example.com as a string": { - topic: function(cj,results) { - cj.getCookieString('http://example.com',this.callback); - }, - "get a single string": function(cookieHeader) { - assert.equal(cookieHeader, "a=1; b=2; e=5"); - }, - }, - "then retrieving for http://example.com as a set-cookie header": { - topic: function(cj,results) { - cj.getSetCookieStrings('http://example.com',this.callback); - }, - "get a single string": function(cookieHeaders) { - assert.lengthOf(cookieHeaders, 3); - assert.equal(cookieHeaders[0], "a=1; Domain=example.com; Path=/"); - assert.equal(cookieHeaders[1], "b=2; Domain=example.com; Path=/; HttpOnly"); - assert.equal(cookieHeaders[2], "e=5; Path=/"); - }, - }, - "then retrieving for http://www.example.com/": { - topic: function(cj,results) { - cj.getCookies('http://www.example.com/foo/bar',this.callback); - }, - "get a bunch of cookies": function(cookies) { - var names = cookies.map(function(c) {return c.key}); - assert.deepEqual(names, ['d','a','b']); // note lack of 'e' - }, - }, - }, - "Repeated names": { - topic: function() { - var cb = this.callback; - var cj = new CookieJar(); - var ex = 'http://www.example.com/'; - var sc = cj.setCookie; - var tasks = []; - var now = Date.now(); - tasks.push(sc.bind(cj,'aaaa=xxxx',ex,at(0))); - tasks.push(sc.bind(cj,'aaaa=1111; Domain=www.example.com',ex,at(1000))); - tasks.push(sc.bind(cj,'aaaa=2222; Domain=example.com',ex,at(2000))); - tasks.push(sc.bind(cj,'aaaa=3333; Domain=www.example.com; Path=/pathA',ex,at(3000))); - async.series(tasks,function(err,results) { - results = results.filter(function(e) {return e !== undefined}); - cb(err,{cj:cj, cookies:results, now:now}); - }); - }, - "all got set": function(err,t) { - assert.lengthOf(t.cookies,4); - }, - "then getting 'em back": { - topic: function(t) { - var cj = t.cj; - cj.getCookies('http://www.example.com/pathA',this.callback); - }, - "there's just three": function (err,cookies) { - var vals = cookies.map(function(c) {return c.value}); - // may break with sorting; sorting should put 3333 first due to longest path: - assert.deepEqual(vals, ['3333','1111','2222']); - } - }, - }, - "CookieJar setCookie errors": { - "public-suffix domain": { - topic: function() { - var cj = new CookieJar(); - cj.setCookie('i=9; Domain=kyoto.jp; Path=/','kyoto.jp',this.callback); - }, - "errors": function(err,cookie) { - assert.ok(err); - assert.ok(!cookie); - assert.match(err.message, /public suffix/i); - }, - }, - "wrong domain": { - topic: function() { - var cj = new CookieJar(); - cj.setCookie('j=10; Domain=google.com; Path=/','google.ca',this.callback); - }, - "errors": function(err,cookie) { - assert.ok(err); - assert.ok(!cookie); - assert.match(err.message, /not in this host's domain/i); - }, - }, - "old cookie is HttpOnly": { - topic: function() { - var cb = this.callback; - var next = function (err,c) { - return cb(err,cj); - }; - var cj = new CookieJar(); - cj.setCookie('k=11; Domain=example.ca; Path=/; HttpOnly','http://example.ca',{http:true},next); - }, - "initial cookie is set": function(err,cj) { - assert.ok(!err); - }, - "but when trying to overwrite": { - topic: function(cj) { - var cb = this.callback; - cj.setCookie('k=12; Domain=example.ca; Path=/','http://example.ca',{http:false},function(err,c) {cb(null,err)}); - }, - "it's an error": function(err) { - assert.ok(err); - }, - "then, checking the original": { - topic: function(ignored,cj) { - assert.ok(cj instanceof CookieJar); - cj.getCookies('http://example.ca',{http:true},this.callback); - }, - "cookie has original value": function(err,cookies) { - assert.equal(err,null); - assert.lengthOf(cookies, 1); - assert.equal(cookies[0].value,11); - }, - }, - }, - }, - }, -}) -.addBatch({ - "JSON": { - "serialization": { - topic: function() { - var c = Cookie.parse('alpha=beta; Domain=example.com; Path=/foo; Expires=Tue, 19 Jan 2038 03:14:07 GMT; HttpOnly'); - return JSON.stringify(c); - }, - "gives a string": function(str) { - assert.equal(typeof str, "string"); - }, - "date is in ISO format": function(str) { - assert.match(str, /"expires":"2038-01-19T03:14:07\.000Z"/, 'expires is in ISO format'); - }, - }, - "deserialization": { - topic: function() { - var json = '{"key":"alpha","value":"beta","domain":"example.com","path":"/foo","expires":"2038-01-19T03:14:07.000Z","httpOnly":true,"lastAccessed":2000000000123}'; - return Cookie.fromJSON(json); - }, - "works": function(c) { - assert.ok(c); - }, - "key": function(c) { assert.equal(c.key, "alpha") }, - "value": function(c) { assert.equal(c.value, "beta") }, - "domain": function(c) { assert.equal(c.domain, "example.com") }, - "path": function(c) { assert.equal(c.path, "/foo") }, - "httpOnly": function(c) { assert.strictEqual(c.httpOnly, true) }, - "secure": function(c) { assert.strictEqual(c.secure, false) }, - "hostOnly": function(c) { assert.strictEqual(c.hostOnly, null) }, - "expires is a date object": function(c) { - assert.equal(c.expires.getTime(), 2147483647000); - }, - "lastAccessed is a date object": function(c) { - assert.equal(c.lastAccessed.getTime(), 2000000000123); - }, - "creation defaulted": function(c) { - assert.ok(c.creation.getTime()); - } - }, - "null deserialization": { - topic: function() { - return Cookie.fromJSON(null); - }, - "is null": function(cookie) { - assert.equal(cookie,null); - }, - }, - }, - "expiry deserialization": { - "Infinity": { - topic: Cookie.fromJSON.bind(null, '{"expires":"Infinity"}'), - "is infinite": function(c) { - assert.strictEqual(c.expires, "Infinity"); - assert.equal(c.expires, Infinity); - }, - }, - }, - "maxAge serialization": { - topic: function() { - return function(toSet) { - var c = new Cookie(); - c.key = 'foo'; c.value = 'bar'; - c.setMaxAge(toSet); - return JSON.stringify(c); - }; - }, - "zero": { - topic: function(f) { return f(0) }, - "looks good": function(str) { - assert.match(str, /"maxAge":0/); - }, - }, - "Infinity": { - topic: function(f) { return f(Infinity) }, - "looks good": function(str) { - assert.match(str, /"maxAge":"Infinity"/); - }, - }, - "-Infinity": { - topic: function(f) { return f(-Infinity) }, - "looks good": function(str) { - assert.match(str, /"maxAge":"-Infinity"/); - }, - }, - "null": { - topic: function(f) { return f(null) }, - "looks good": function(str) { - assert.match(str, /"maxAge":null/); - }, - }, - }, - "maxAge deserialization": { - "number": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":123}'), - "is the number": function(c) { - assert.strictEqual(c.maxAge, 123); - }, - }, - "null": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":null}'), - "is null": function(c) { - assert.strictEqual(c.maxAge, null); - }, - }, - "less than zero": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":-123}'), - "is -123": function(c) { - assert.strictEqual(c.maxAge, -123); - }, - }, - "Infinity": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":"Infinity"}'), - "is inf-as-string": function(c) { - assert.strictEqual(c.maxAge, "Infinity"); - }, - }, - "-Infinity": { - topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":"-Infinity"}'), - "is inf-as-string": function(c) { - assert.strictEqual(c.maxAge, "-Infinity"); - }, - }, - } -}) -.addBatch({ - "permuteDomain": { - "base case": { - topic: tough.permuteDomain.bind(null,'example.com'), - "got the domain": function(list) { - assert.deepEqual(list, ['example.com']); - }, - }, - "two levels": { - topic: tough.permuteDomain.bind(null,'foo.bar.example.com'), - "got three things": function(list) { - assert.deepEqual(list, ['example.com','bar.example.com','foo.bar.example.com']); - }, - }, - "invalid domain": { - topic: tough.permuteDomain.bind(null,'foo.bar.example.localduhmain'), - "got three things": function(list) { - assert.equal(list, null); - }, - }, - }, - "permutePath": { - "base case": { - topic: tough.permutePath.bind(null,'/'), - "just slash": function(list) { - assert.deepEqual(list,['/']); - }, - }, - "single case": { - topic: tough.permutePath.bind(null,'/foo'), - "two things": function(list) { - assert.deepEqual(list,['/foo','/']); - }, - "path matching": function(list) { - list.forEach(function(e) { - assert.ok(tough.pathMatch('/foo',e)); - }); - }, - }, - "double case": { - topic: tough.permutePath.bind(null,'/foo/bar'), - "four things": function(list) { - assert.deepEqual(list,['/foo/bar','/foo','/']); - }, - "path matching": function(list) { - list.forEach(function(e) { - assert.ok(tough.pathMatch('/foo/bar',e)); - }); - }, - }, - "trailing slash": { - topic: tough.permutePath.bind(null,'/foo/bar/'), - "three things": function(list) { - assert.deepEqual(list,['/foo/bar','/foo','/']); - }, - "path matching": function(list) { - list.forEach(function(e) { - assert.ok(tough.pathMatch('/foo/bar/',e)); - }); - }, - }, - } -}) -.addBatch({ - "Issue 1": { - topic: function() { - var cj = new CookieJar(); - cj.setCookie('hello=world; path=/some/path/', 'http://domain/some/path/file', function(err,cookie) { - this.callback(err,{cj:cj, cookie:cookie}); - }.bind(this)); - }, - "stored a cookie": function(t) { - assert.ok(t.cookie); - }, - "cookie's path was modified to remove unnecessary slash": function(t) { - assert.equal(t.cookie.path, '/some/path'); - }, - "getting it back": { - topic: function(t) { - t.cj.getCookies('http://domain/some/path/file', function(err,cookies) { - this.callback(err, {cj:t.cj, cookies:cookies||[]}); - }.bind(this)); - }, - "got one cookie": function(t) { - assert.lengthOf(t.cookies, 1); - }, - "it's the right one": function(t) { - var c = t.cookies[0]; - assert.equal(c.key, 'hello'); - assert.equal(c.value, 'world'); - }, - } - } -}) -.addBatch({ - "expiry option": { - topic: function() { - var cb = this.callback; - var cj = new CookieJar(); - cj.setCookie('near=expiry; Domain=example.com; Path=/; Max-Age=1','http://www.example.com',at(-1), function(err,cookie) { - - cb(err, {cj:cj, cookie:cookie}); - }); - }, - "set the cookie": function(t) { - assert.ok(t.cookie, "didn't set?!"); - assert.equal(t.cookie.key, 'near'); - }, - "then, retrieving": { - topic: function(t) { - var cb = this.callback; - setTimeout(function() { - t.cj.getCookies('http://www.example.com', {http:true, expire:false}, function(err,cookies) { - t.cookies = cookies; - cb(err,t); - }); - },2000); - }, - "got the cookie": function(t) { - assert.lengthOf(t.cookies, 1); - assert.equal(t.cookies[0].key, 'near'); - }, - } - } -}) -.addBatch({ - "trailing semi-colon set into cj": { - topic: function () { - var cb = this.callback; - var cj = new CookieJar(); - var ex = 'http://www.example.com'; - var tasks = []; - tasks.push(function(next) { - cj.setCookie('broken_path=testme; path=/;',ex,at(-1),next); - }); - tasks.push(function(next) { - cj.setCookie('b=2; Path=/;;;;',ex,at(-1),next); - }); - async.parallel(tasks, function (err, cookies) { - cb(null, { - cj: cj, - cookies: cookies - }); - }); - }, - "check number of cookies": function (t) { - assert.lengthOf(t.cookies, 2, "didn't set"); - }, - "check *broken_path* was set properly": function (t) { - assert.equal(t.cookies[0].key, "broken_path"); - assert.equal(t.cookies[0].value, "testme"); - assert.equal(t.cookies[0].path, "/"); - }, - "check *b* was set properly": function (t) { - assert.equal(t.cookies[1].key, "b"); - assert.equal(t.cookies[1].value, "2"); - assert.equal(t.cookies[1].path, "/"); - }, - "retrieve the cookie": { - topic: function (t) { - var cb = this.callback; - t.cj.getCookies('http://www.example.com', {}, function (err, cookies) { - t.cookies = cookies; - cb(err, t); - }); - }, - "get the cookie": function(t) { - assert.lengthOf(t.cookies, 2); - assert.equal(t.cookies[0].key, 'broken_path'); - assert.equal(t.cookies[0].value, 'testme'); - assert.equal(t.cookies[1].key, "b"); - assert.equal(t.cookies[1].value, "2"); - assert.equal(t.cookies[1].path, "/"); - }, - }, - } -}) -.addBatch({ - "Constructor":{ - topic: function () { - return new Cookie({ - key: 'test', - value: 'b', - maxAge: 60 - }); - }, - 'check for key property': function (c) { - assert.ok(c); - assert.equal(c.key, 'test'); - }, - 'check for value property': function (c) { - assert.equal(c.value, 'b'); - }, - 'check for maxAge': function (c) { - assert.equal(c.maxAge, 60); - }, - 'check for default values for unspecified properties': function (c) { - assert.equal(c.expires, "Infinity"); - assert.equal(c.secure, false); - assert.equal(c.httpOnly, false); - } - } -}) -.addBatch({ - "allPaths option": { - topic: function() { - var cj = new CookieJar(); - var tasks = []; - tasks.push(cj.setCookie.bind(cj, 'nopath_dom=qq; Path=/; Domain=example.com', 'http://example.com', {})); - tasks.push(cj.setCookie.bind(cj, 'path_dom=qq; Path=/foo; Domain=example.com', 'http://example.com', {})); - tasks.push(cj.setCookie.bind(cj, 'nopath_host=qq; Path=/', 'http://www.example.com', {})); - tasks.push(cj.setCookie.bind(cj, 'path_host=qq; Path=/foo', 'http://www.example.com', {})); - tasks.push(cj.setCookie.bind(cj, 'other=qq; Path=/', 'http://other.example.com/', {})); - tasks.push(cj.setCookie.bind(cj, 'other2=qq; Path=/foo', 'http://other.example.com/foo', {})); - var cb = this.callback; - async.parallel(tasks, function(err,results) { - cb(err, {cj:cj, cookies: results}); - }); - }, - "all set": function(t) { - assert.equal(t.cookies.length, 6); - assert.ok(t.cookies.every(function(c) { return !!c })); - }, - "getting without allPaths": { - topic: function(t) { - var cb = this.callback; - var cj = t.cj; - cj.getCookies('http://www.example.com/', {}, function(err,cookies) { - cb(err, {cj:cj, cookies:cookies}); - }); - }, - "found just two cookies": function(t) { - assert.equal(t.cookies.length, 2); - }, - "all are path=/": function(t) { - assert.ok(t.cookies.every(function(c) { return c.path === '/' })); - }, - "no 'other' cookies": function(t) { - assert.ok(!t.cookies.some(function(c) { return (/^other/).test(c.name) })); - }, - }, - "getting without allPaths for /foo": { - topic: function(t) { - var cb = this.callback; - var cj = t.cj; - cj.getCookies('http://www.example.com/foo', {}, function(err,cookies) { - cb(err, {cj:cj, cookies:cookies}); - }); - }, - "found four cookies": function(t) { - assert.equal(t.cookies.length, 4); - }, - "no 'other' cookies": function(t) { - assert.ok(!t.cookies.some(function(c) { return (/^other/).test(c.name) })); - }, - }, - "getting with allPaths:true": { - topic: function(t) { - var cb = this.callback; - var cj = t.cj; - cj.getCookies('http://www.example.com/', {allPaths:true}, function(err,cookies) { - cb(err, {cj:cj, cookies:cookies}); - }); - }, - "found four cookies": function(t) { - assert.equal(t.cookies.length, 4); - }, - "no 'other' cookies": function(t) { - assert.ok(!t.cookies.some(function(c) { return (/^other/).test(c.name) })); - }, - }, - } -}) -.export(module); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/README.md deleted file mode 100644 index bb533d56..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/README.md +++ /dev/null @@ -1,4 +0,0 @@ -tunnel-agent -============ - -HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/index.js deleted file mode 100644 index 3f7bbb90..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/index.js +++ /dev/null @@ -1,227 +0,0 @@ -'use strict' - -var net = require('net') - , tls = require('tls') - , http = require('http') - , https = require('https') - , events = require('events') - , assert = require('assert') - , util = require('util') - ; - -exports.httpOverHttp = httpOverHttp -exports.httpsOverHttp = httpsOverHttp -exports.httpOverHttps = httpOverHttps -exports.httpsOverHttps = httpsOverHttps - - -function httpOverHttp(options) { - var agent = new TunnelingAgent(options) - agent.request = http.request - return agent -} - -function httpsOverHttp(options) { - var agent = new TunnelingAgent(options) - agent.request = http.request - agent.createSocket = createSecureSocket - return agent -} - -function httpOverHttps(options) { - var agent = new TunnelingAgent(options) - agent.request = https.request - return agent -} - -function httpsOverHttps(options) { - var agent = new TunnelingAgent(options) - agent.request = https.request - agent.createSocket = createSecureSocket - return agent -} - - -function TunnelingAgent(options) { - var self = this - self.options = options || {} - self.proxyOptions = self.options.proxy || {} - self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets - self.requests = [] - self.sockets = [] - - self.on('free', function onFree(socket, host, port) { - for (var i = 0, len = self.requests.length; i < len; ++i) { - var pending = self.requests[i] - if (pending.host === host && pending.port === port) { - // Detect the request to connect same origin server, - // reuse the connection. - self.requests.splice(i, 1) - pending.request.onSocket(socket) - return - } - } - socket.destroy() - self.removeSocket(socket) - }) -} -util.inherits(TunnelingAgent, events.EventEmitter) - -TunnelingAgent.prototype.addRequest = function addRequest(req, host, port) { - var self = this - - if (self.sockets.length >= this.maxSockets) { - // We are over limit so we'll add it to the queue. - self.requests.push({host: host, port: port, request: req}) - return - } - - // If we are under maxSockets create a new one. - self.createSocket({host: host, port: port, request: req}, function(socket) { - socket.on('free', onFree) - socket.on('close', onCloseOrRemove) - socket.on('agentRemove', onCloseOrRemove) - req.onSocket(socket) - - function onFree() { - self.emit('free', socket, host, port) - } - - function onCloseOrRemove(err) { - self.removeSocket() - socket.removeListener('free', onFree) - socket.removeListener('close', onCloseOrRemove) - socket.removeListener('agentRemove', onCloseOrRemove) - } - }) -} - -TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { - var self = this - var placeholder = {} - self.sockets.push(placeholder) - - var connectOptions = mergeOptions({}, self.proxyOptions, - { method: 'CONNECT' - , path: options.host + ':' + options.port - , agent: false - } - ) - if (connectOptions.proxyAuth) { - connectOptions.headers = connectOptions.headers || {} - connectOptions.headers['Proxy-Authorization'] = 'Basic ' + - new Buffer(connectOptions.proxyAuth).toString('base64') - } - - debug('making CONNECT request') - var connectReq = self.request(connectOptions) - connectReq.useChunkedEncodingByDefault = false // for v0.6 - connectReq.once('response', onResponse) // for v0.6 - connectReq.once('upgrade', onUpgrade) // for v0.6 - connectReq.once('connect', onConnect) // for v0.7 or later - connectReq.once('error', onError) - connectReq.end() - - function onResponse(res) { - // Very hacky. This is necessary to avoid http-parser leaks. - res.upgrade = true - } - - function onUpgrade(res, socket, head) { - // Hacky. - process.nextTick(function() { - onConnect(res, socket, head) - }) - } - - function onConnect(res, socket, head) { - connectReq.removeAllListeners() - socket.removeAllListeners() - - if (res.statusCode === 200) { - assert.equal(head.length, 0) - debug('tunneling connection has established') - self.sockets[self.sockets.indexOf(placeholder)] = socket - cb(socket) - } else { - debug('tunneling socket could not be established, statusCode=%d', res.statusCode) - var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode) - error.code = 'ECONNRESET' - options.request.emit('error', error) - self.removeSocket(placeholder) - } - } - - function onError(cause) { - connectReq.removeAllListeners() - - debug('tunneling socket could not be established, cause=%s\n', cause.message, cause.stack) - var error = new Error('tunneling socket could not be established, ' + 'cause=' + cause.message) - error.code = 'ECONNRESET' - options.request.emit('error', error) - self.removeSocket(placeholder) - } -} - -TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { - var pos = this.sockets.indexOf(socket) - if (pos === -1) return - - this.sockets.splice(pos, 1) - - var pending = this.requests.shift() - if (pending) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createSocket(pending, function(socket) { - pending.request.onSocket(socket) - }) - } -} - -function createSecureSocket(options, cb) { - var self = this - TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { - // 0 is dummy port for v0.6 - var secureSocket = tls.connect(0, mergeOptions({}, self.options, - { servername: options.host - , socket: socket - } - )) - cb(secureSocket) - }) -} - - -function mergeOptions(target) { - for (var i = 1, len = arguments.length; i < len; ++i) { - var overrides = arguments[i] - if (typeof overrides === 'object') { - var keys = Object.keys(overrides) - for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { - var k = keys[j] - if (overrides[k] !== undefined) { - target[k] = overrides[k] - } - } - } - } - return target -} - - -var debug -if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug = function() { - var args = Array.prototype.slice.call(arguments) - if (typeof args[0] === 'string') { - args[0] = 'TUNNEL: ' + args[0] - } else { - args.unshift('TUNNEL:') - } - console.error.apply(console, args) - } -} else { - debug = function() {} -} -exports.debug = debug // for test diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/package.json deleted file mode 100644 index acfa6e1c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/tunnel-agent/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "tunnel-agent", - "description": "HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.", - "version": "0.3.0", - "repository": { - "url": "https://github.com/mikeal/tunnel-agent" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "tunnel-agent\n============\n\nHTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/tunnel-agent/issues" - }, - "homepage": "https://github.com/mikeal/tunnel-agent", - "_id": "tunnel-agent@0.3.0", - "dist": { - "shasum": "ad681b68f5321ad2827c4cfb1b7d5df2cfe942ee" - }, - "_from": "tunnel-agent@~0.3.0", - "_resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/package.json deleted file mode 100755 index 57c99c02..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "request", - "description": "Simplified HTTP request client.", - "tags": [ - "http", - "simple", - "util", - "utility" - ], - "version": "2.31.0", - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com" - }, - "repository": { - "type": "git", - "url": "http://github.com/mikeal/request.git" - }, - "bugs": { - "url": "http://github.com/mikeal/request/issues" - }, - "engines": [ - "node >= 0.8.0" - ], - "main": "index.js", - "dependencies": { - "qs": "~0.6.0", - "json-stringify-safe": "~5.0.0", - "forever-agent": "~0.5.0", - "node-uuid": "~1.4.0", - "mime": "~1.2.9", - "tough-cookie": "~0.9.15", - "form-data": "~0.1.0", - "tunnel-agent": "~0.3.0", - "http-signature": "~0.10.0", - "oauth-sign": "~0.3.0", - "hawk": "~1.0.0", - "aws-sign2": "~0.5.0" - }, - "optionalDependencies": { - "tough-cookie": "~0.9.15", - "form-data": "~0.1.0", - "tunnel-agent": "~0.3.0", - "http-signature": "~0.10.0", - "oauth-sign": "~0.3.0", - "hawk": "~1.0.0", - "aws-sign2": "~0.5.0" - }, - "scripts": { - "test": "node tests/run.js" - }, - "readme": "# Request -- Simplified HTTP client\n\n[![NPM](https://nodei.co/npm/request.png)](https://nodei.co/npm/request/)\n\n## Super simple to use\n\nRequest is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default.\n\n```javascript\nvar request = require('request');\nrequest('http://www.google.com', function (error, response, body) {\n if (!error && response.statusCode == 200) {\n console.log(body) // Print the google web page.\n }\n})\n```\n\n## Streaming\n\nYou can stream any response to a file stream.\n\n```javascript\nrequest('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))\n```\n\nYou can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one).\n\n```javascript\nfs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json'))\n```\n\nRequest can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers.\n\n```javascript\nrequest.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))\n```\n\nNow let’s get fancy.\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n if (req.method === 'PUT') {\n req.pipe(request.put('http://mysite.com/doodle.png'))\n } else if (req.method === 'GET' || req.method === 'HEAD') {\n request.get('http://mysite.com/doodle.png').pipe(resp)\n }\n }\n})\n```\n\nYou can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don't really care about security, you can do:\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n var x = request('http://mysite.com/doodle.png')\n req.pipe(x)\n x.pipe(resp)\n }\n})\n```\n\nAnd since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :)\n\n```javascript\nreq.pipe(request('http://mysite.com/doodle.png')).pipe(resp)\n```\n\nAlso, none of this new functionality conflicts with requests previous features, it just expands them.\n\n```javascript\nvar r = request.defaults({'proxy':'http://localproxy.com'})\n\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n r.get('http://google.com/doodle.png').pipe(resp)\n }\n})\n```\n\nYou can still use intermediate proxies, the requests will still follow HTTP forwards, etc.\n\n## Forms\n\n`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API.\n\nURL-encoded forms are simple.\n\n```javascript\nrequest.post('http://service.com/upload', {form:{key:'value'}})\n// or\nrequest.post('http://service.com/upload').form({key:'value'})\n```\n\nFor `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). You don’t need to worry about piping the form object or setting the headers, `request` will handle that for you.\n\n```javascript\nvar r = request.post('http://service.com/upload')\nvar form = r.form()\nform.append('my_field', 'my_value')\nform.append('my_buffer', new Buffer([1, 2, 3]))\nform.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png'))\nform.append('remote_file', request('http://google.com/doodle.png'))\n```\n\n## HTTP Authentication\n\n```javascript\nrequest.get('http://some.server.com/').auth('username', 'password', false);\n// or\nrequest.get('http://some.server.com/', {\n 'auth': {\n 'user': 'username',\n 'pass': 'password',\n 'sendImmediately': false\n }\n});\n```\n\nIf passed as an option, `auth` should be a hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). The method form takes parameters `auth(username, password, sendImmediately)`.\n\n`sendImmediately` defaults to `true`, which causes a basic authentication header to be sent. If `sendImmediately` is `false`, then `request` will retry with a proper authentication header after receiving a `401` response from the server (which must contain a `WWW-Authenticate` header indicating the required authentication method).\n\nDigest authentication is supported, but it only works with `sendImmediately` set to `false`; otherwise `request` will send basic authentication on the initial request, which will probably cause the request to fail.\n\n## OAuth Signing\n\n```javascript\n// Twitter OAuth\nvar qs = require('querystring')\n , oauth =\n { callback: 'http://mysite.com/callback/'\n , consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n }\n , url = 'https://api.twitter.com/oauth/request_token'\n ;\nrequest.post({url:url, oauth:oauth}, function (e, r, body) {\n // Ideally, you would take the body in the response\n // and construct a URL that a user clicks on (like a sign in button).\n // The verifier is only available in the response after a user has\n // verified with twitter that they are authorizing your app.\n var access_token = qs.parse(body)\n , oauth =\n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: access_token.oauth_token\n , verifier: access_token.oauth_verifier\n }\n , url = 'https://api.twitter.com/oauth/access_token'\n ;\n request.post({url:url, oauth:oauth}, function (e, r, body) {\n var perm_token = qs.parse(body)\n , oauth =\n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: perm_token.oauth_token\n , token_secret: perm_token.oauth_token_secret\n }\n , url = 'https://api.twitter.com/1.1/users/show.json?'\n , params =\n { screen_name: perm_token.screen_name\n , user_id: perm_token.user_id\n }\n ;\n url += qs.stringify(params)\n request.get({url:url, oauth:oauth, json:true}, function (e, r, user) {\n console.log(user)\n })\n })\n})\n```\n\n### Custom HTTP Headers\n\nHTTP Headers, such as `User-Agent`, can be set in the `options` object.\nIn the example below, we call the github API to find out the number\nof stars and forks for the request repository. This requires a\ncustom `User-Agent` header as well as https.\n\n```javascript\nvar request = require('request');\n\nvar options = {\n\turl: 'https://api.github.com/repos/mikeal/request',\n\theaders: {\n\t\t'User-Agent': 'request'\n\t}\n};\n\nfunction callback(error, response, body) {\n\tif (!error && response.statusCode == 200) {\n\t\tvar info = JSON.parse(body);\n\t\tconsole.log(info.stargazers_count + \" Stars\");\n\t\tconsole.log(info.forks_count + \" Forks\");\n\t}\n}\n\nrequest(options, callback);\n```\n\n### request(options, callback)\n\nThe first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional.\n\n* `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()`\n* `qs` - object containing querystring values to be appended to the `uri`\n* `method` - http method (default: `\"GET\"`)\n* `headers` - http headers (default: `{}`)\n* `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer` or `String`.\n* `form` - when passed an object, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded; charset=utf-8` header. When passed no options, a `FormData` instance is returned (and is piped to request).\n* `auth` - A hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). See documentation above.\n* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON.\n* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below.\n* `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`)\n* `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`)\n* `maxRedirects` - the maximum number of redirects to follow (default: `10`)\n* `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`.\n* `pool` - A hash object containing the agents for these requests. If omitted, the request will use the global pool (which is set to node's default `maxSockets`)\n* `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool.\n* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request\n* `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`)\n* `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above.\n* `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example).\n* `strictSSL` - If `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option.\n* `jar` - If `true`, remember cookies for future use (or define your custom cookie jar; see examples section)\n* `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`. Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services)\n* `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options.\n* `localAddress` - Local interface to bind for network connections.\n\n\nThe callback argument gets 3 arguments: \n\n1. An `error` when applicable (usually from [`http.ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) object)\n2. An [`http.IncomingMessage`](http://nodejs.org/api/http.html#http_http_incomingmessage) object\n3. The third is the `response` body (`String` or `Buffer`, or JSON object if the `json` option is supplied)\n\n## Convenience methods\n\nThere are also shorthand methods for different HTTP METHODs and some other conveniences.\n\n### request.defaults(options)\n\nThis method returns a wrapper around the normal request API that defaults to whatever options you pass in to it.\n\n### request.put\n\nSame as `request()`, but defaults to `method: \"PUT\"`.\n\n```javascript\nrequest.put(url)\n```\n\n### request.patch\n\nSame as `request()`, but defaults to `method: \"PATCH\"`.\n\n```javascript\nrequest.patch(url)\n```\n\n### request.post\n\nSame as `request()`, but defaults to `method: \"POST\"`.\n\n```javascript\nrequest.post(url)\n```\n\n### request.head\n\nSame as request() but defaults to `method: \"HEAD\"`.\n\n```javascript\nrequest.head(url)\n```\n\n### request.del\n\nSame as `request()`, but defaults to `method: \"DELETE\"`.\n\n```javascript\nrequest.del(url)\n```\n\n### request.get\n\nSame as `request()` (for uniformity).\n\n```javascript\nrequest.get(url)\n```\n### request.cookie\n\nFunction that creates a new cookie.\n\n```javascript\nrequest.cookie('cookie_string_here')\n```\n### request.jar\n\nFunction that creates a new cookie jar.\n\n```javascript\nrequest.jar()\n```\n\n\n## Examples:\n\n```javascript\n var request = require('request')\n , rand = Math.floor(Math.random()*100000000).toString()\n ;\n request(\n { method: 'PUT'\n , uri: 'http://mikeal.iriscouch.com/testjs/' + rand\n , multipart:\n [ { 'content-type': 'application/json'\n , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}})\n }\n , { body: 'I am an attachment' }\n ]\n }\n , function (error, response, body) {\n if(response.statusCode == 201){\n console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand)\n } else {\n console.log('error: '+ response.statusCode)\n console.log(body)\n }\n }\n )\n```\n\nCookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`).\n\n```javascript\nvar request = request.defaults({jar: true})\nrequest('http://www.google.com', function () {\n request('http://images.google.com')\n})\n```\n\nTo use a custom cookie jar (instead `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`)\n\n```javascript\nvar j = request.jar()\nvar request = request.defaults({jar:j})\nrequest('http://www.google.com', function () {\n request('http://images.google.com')\n})\n```\nOR\n\nNote that `setCookie` requires at least three parameters, and the last is required to be a callback.\n\n```javascript\nvar j = request.jar()\nvar cookie = request.cookie('your_cookie_here')\nj.setCookie(cookie, uri, function (err, cookie){})\nrequest({url: 'http://www.google.com', jar: j}, function () {\n request('http://images.google.com')\n})\n```\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/mikeal/request", - "_id": "request@2.31.0", - "dist": { - "shasum": "4c8ac967c9a4b9410cb4ba1a61fdb644267eeeff" - }, - "_from": "request@~2.31.0", - "_resolved": "https://registry.npmjs.org/request/-/request-2.31.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/request.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/request.js deleted file mode 100644 index 3c03c47d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/request.js +++ /dev/null @@ -1,1260 +0,0 @@ -var optional = require('./lib/optional') - , http = require('http') - , https = optional('https') - , tls = optional('tls') - , url = require('url') - , util = require('util') - , stream = require('stream') - , qs = require('qs') - , querystring = require('querystring') - , crypto = require('crypto') - - , oauth = optional('oauth-sign') - , hawk = optional('hawk') - , aws = optional('aws-sign') - , httpSignature = optional('http-signature') - , uuid = require('node-uuid') - , mime = require('mime') - , tunnel = optional('tunnel-agent') - , _safeStringify = require('json-stringify-safe') - - , ForeverAgent = require('forever-agent') - , FormData = optional('form-data') - - , Cookie = optional('tough-cookie') - , CookieJar = Cookie && Cookie.CookieJar - , cookieJar = CookieJar && new CookieJar - - , copy = require('./lib/copy') - , debug = require('./lib/debug') - , getSafe = require('./lib/getSafe') - ; - -function safeStringify (obj) { - var ret - try { ret = JSON.stringify(obj) } - catch (e) { ret = _safeStringify(obj) } - return ret -} - -var globalPool = {} -var isUrl = /^https?:/i - - -// Hacky fix for pre-0.4.4 https -if (https && !https.Agent) { - https.Agent = function (options) { - http.Agent.call(this, options) - } - util.inherits(https.Agent, http.Agent) - https.Agent.prototype._getConnection = function (host, port, cb) { - var s = tls.connect(port, host, this.options, function () { - // do other checks here? - if (cb) cb() - }) - return s - } -} - -function isReadStream (rs) { - if (rs.readable && rs.path && rs.mode) { - return true - } -} - -function toBase64 (str) { - return (new Buffer(str || "", "ascii")).toString("base64") -} - -function md5 (str) { - return crypto.createHash('md5').update(str).digest('hex') -} - -function Request (options) { - stream.Stream.call(this) - this.readable = true - this.writable = true - - if (typeof options === 'string') { - options = {uri:options} - } - - var reserved = Object.keys(Request.prototype) - for (var i in options) { - if (reserved.indexOf(i) === -1) { - this[i] = options[i] - } else { - if (typeof options[i] === 'function') { - delete options[i] - } - } - } - - if (options.method) { - this.explicitMethod = true - } - - this.canTunnel = options.tunnel !== false && tunnel; - - this.init(options) -} -util.inherits(Request, stream.Stream) -Request.prototype.init = function (options) { - // init() contains all the code to setup the request object. - // the actual outgoing request is not started until start() is called - // this function is called from both the constructor and on redirect. - var self = this - if (!options) options = {} - - if (!self.method) self.method = options.method || 'GET' - self.localAddress = options.localAddress - - debug(options) - if (!self.pool && self.pool !== false) self.pool = globalPool - self.dests = self.dests || [] - self.__isRequestRequest = true - - // Protect against double callback - if (!self._callback && self.callback) { - self._callback = self.callback - self.callback = function () { - if (self._callbackCalled) return // Print a warning maybe? - self._callbackCalled = true - self._callback.apply(self, arguments) - } - self.on('error', self.callback.bind()) - self.on('complete', self.callback.bind(self, null)) - } - - if (self.url && !self.uri) { - // People use this property instead all the time so why not just support it. - self.uri = self.url - delete self.url - } - - if (!self.uri) { - // this will throw if unhandled but is handleable when in a redirect - return self.emit('error', new Error("options.uri is a required argument")) - } else { - if (typeof self.uri == "string") self.uri = url.parse(self.uri) - } - - if (self.strictSSL === false) { - self.rejectUnauthorized = false - } - - if (self.proxy) { - if (typeof self.proxy == 'string') self.proxy = url.parse(self.proxy) - - // do the HTTP CONNECT dance using koichik/node-tunnel - if (http.globalAgent && self.uri.protocol === "https:" && self.canTunnel) { - var tunnelFn = self.proxy.protocol === "http:" - ? tunnel.httpsOverHttp : tunnel.httpsOverHttps - - var tunnelOptions = { proxy: { host: self.proxy.hostname - , port: +self.proxy.port - , proxyAuth: self.proxy.auth - , headers: { Host: self.uri.hostname + ':' + - (self.uri.port || self.uri.protocol === 'https:' ? 443 : 80) }} - , rejectUnauthorized: self.rejectUnauthorized - , ca: this.ca } - - self.agent = tunnelFn(tunnelOptions) - self.tunnel = true - } - } - - if (!self.uri.pathname) {self.uri.pathname = '/'} - - if (!self.uri.host) { - // Invalid URI: it may generate lot of bad errors, like "TypeError: Cannot call method 'indexOf' of undefined" in CookieJar - // Detect and reject it as soon as possible - var faultyUri = url.format(self.uri) - var message = 'Invalid URI "' + faultyUri + '"' - if (Object.keys(options).length === 0) { - // No option ? This can be the sign of a redirect - // As this is a case where the user cannot do anything (they didn't call request directly with this URL) - // they should be warned that it can be caused by a redirection (can save some hair) - message += '. This can be caused by a crappy redirection.' - } - self.emit('error', new Error(message)) - return // This error was fatal - } - - self._redirectsFollowed = self._redirectsFollowed || 0 - self.maxRedirects = (self.maxRedirects !== undefined) ? self.maxRedirects : 10 - self.followRedirect = (self.followRedirect !== undefined) ? self.followRedirect : true - self.followAllRedirects = (self.followAllRedirects !== undefined) ? self.followAllRedirects : false - if (self.followRedirect || self.followAllRedirects) - self.redirects = self.redirects || [] - - self.headers = self.headers ? copy(self.headers) : {} - - self.setHost = false - if (!self.hasHeader('host')) { - self.setHeader('host', self.uri.hostname) - if (self.uri.port) { - if ( !(self.uri.port === 80 && self.uri.protocol === 'http:') && - !(self.uri.port === 443 && self.uri.protocol === 'https:') ) - self.setHeader('host', self.getHeader('host') + (':'+self.uri.port) ) - } - self.setHost = true - } - - self.jar(self._jar || options.jar) - - if (!self.uri.port) { - if (self.uri.protocol == 'http:') {self.uri.port = 80} - else if (self.uri.protocol == 'https:') {self.uri.port = 443} - } - - if (self.proxy && !self.tunnel) { - self.port = self.proxy.port - self.host = self.proxy.hostname - } else { - self.port = self.uri.port - self.host = self.uri.hostname - } - - self.clientErrorHandler = function (error) { - if (self._aborted) return - if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' - && self.agent.addRequestNoreuse) { - self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) } - self.start() - self.req.end() - return - } - if (self.timeout && self.timeoutTimer) { - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - } - self.emit('error', error) - } - - self._parserErrorHandler = function (error) { - if (this.res) { - if (this.res.request) { - this.res.request.emit('error', error) - } else { - this.res.emit('error', error) - } - } else { - this._httpMessage.emit('error', error) - } - } - - if (options.form) { - self.form(options.form) - } - - if (options.qs) self.qs(options.qs) - - if (self.uri.path) { - self.path = self.uri.path - } else { - self.path = self.uri.pathname + (self.uri.search || "") - } - - if (self.path.length === 0) self.path = '/' - - - // Auth must happen last in case signing is dependent on other headers - if (options.oauth) { - self.oauth(options.oauth) - } - - if (options.aws) { - self.aws(options.aws) - } - - if (options.hawk) { - self.hawk(options.hawk) - } - - if (options.httpSignature) { - self.httpSignature(options.httpSignature) - } - - if (options.auth) { - if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) options.auth.user = options.auth.username - if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) options.auth.pass = options.auth.password - - self.auth( - options.auth.user, - options.auth.pass, - options.auth.sendImmediately - ) - } - - if (self.uri.auth && !self.hasHeader('authorization')) { - var authPieces = self.uri.auth.split(':').map(function(item){ return querystring.unescape(item) }) - self.auth(authPieces[0], authPieces.slice(1).join(':'), true) - } - if (self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization') && !self.tunnel) { - self.setHeader('proxy-authorization', "Basic " + toBase64(self.proxy.auth.split(':').map(function(item){ return querystring.unescape(item)}).join(':'))) - } - - - if (self.proxy && !self.tunnel) self.path = (self.uri.protocol + '//' + self.uri.host + self.path) - - if (options.json) { - self.json(options.json) - } else if (options.multipart) { - self.boundary = uuid() - self.multipart(options.multipart) - } - - if (self.body) { - var length = 0 - if (!Buffer.isBuffer(self.body)) { - if (Array.isArray(self.body)) { - for (var i = 0; i < self.body.length; i++) { - length += self.body[i].length - } - } else { - self.body = new Buffer(self.body) - length = self.body.length - } - } else { - length = self.body.length - } - if (length) { - if (!self.hasHeader('content-length')) self.setHeader('content-length', length) - } else { - throw new Error('Argument error, options.body.') - } - } - - var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol - , defaultModules = {'http:':http, 'https:':https} - , httpModules = self.httpModules || {} - ; - self.httpModule = httpModules[protocol] || defaultModules[protocol] - - if (!self.httpModule) return this.emit('error', new Error("Invalid protocol")) - - if (options.ca) self.ca = options.ca - - if (!self.agent) { - if (options.agentOptions) self.agentOptions = options.agentOptions - - if (options.agentClass) { - self.agentClass = options.agentClass - } else if (options.forever) { - self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL - } else { - self.agentClass = self.httpModule.Agent - } - } - - if (self.pool === false) { - self.agent = false - } else { - self.agent = self.agent || self.getAgent() - if (self.maxSockets) { - // Don't use our pooling if node has the refactored client - self.agent.maxSockets = self.maxSockets - } - if (self.pool.maxSockets) { - // Don't use our pooling if node has the refactored client - self.agent.maxSockets = self.pool.maxSockets - } - } - - self.on('pipe', function (src) { - if (self.ntick && self._started) throw new Error("You cannot pipe to this stream after the outbound request has started.") - self.src = src - if (isReadStream(src)) { - if (!self.hasHeader('content-type')) self.setHeader('content-type', mime.lookup(src.path)) - } else { - if (src.headers) { - for (var i in src.headers) { - if (!self.hasHeader(i)) { - self.setHeader(i, src.headers[i]) - } - } - } - if (self._json && !self.hasHeader('content-type')) - self.setHeader('content-type', 'application/json') - if (src.method && !self.explicitMethod) { - self.method = src.method - } - } - - // self.on('pipe', function () { - // console.error("You have already piped to this stream. Pipeing twice is likely to break the request.") - // }) - }) - - process.nextTick(function () { - if (self._aborted) return - - if (self._form) { - self.setHeaders(self._form.getHeaders()) - self._form.pipe(self) - } - if (self.body) { - if (Array.isArray(self.body)) { - self.body.forEach(function (part) { - self.write(part) - }) - } else { - self.write(self.body) - } - self.end() - } else if (self.requestBodyStream) { - console.warn("options.requestBodyStream is deprecated, please pass the request object to stream.pipe.") - self.requestBodyStream.pipe(self) - } else if (!self.src) { - if (self.method !== 'GET' && typeof self.method !== 'undefined') { - self.setHeader('content-length', 0) - } - self.end() - } - self.ntick = true - }) -} - -// Must call this when following a redirect from https to http or vice versa -// Attempts to keep everything as identical as possible, but update the -// httpModule, Tunneling agent, and/or Forever Agent in use. -Request.prototype._updateProtocol = function () { - var self = this - var protocol = self.uri.protocol - - if (protocol === 'https:') { - // previously was doing http, now doing https - // if it's https, then we might need to tunnel now. - if (self.proxy && self.canTunnel) { - self.tunnel = true - var tunnelFn = self.proxy.protocol === 'http:' - ? tunnel.httpsOverHttp : tunnel.httpsOverHttps - var tunnelOptions = { proxy: { host: self.proxy.hostname - , port: +self.proxy.port - , proxyAuth: self.proxy.auth } - , rejectUnauthorized: self.rejectUnauthorized - , ca: self.ca } - self.agent = tunnelFn(tunnelOptions) - return - } - - self.httpModule = https - switch (self.agentClass) { - case ForeverAgent: - self.agentClass = ForeverAgent.SSL - break - case http.Agent: - self.agentClass = https.Agent - break - default: - // nothing we can do. Just hope for the best. - return - } - - // if there's an agent, we need to get a new one. - if (self.agent) self.agent = self.getAgent() - - } else { - // previously was doing https, now doing http - // stop any tunneling. - if (self.tunnel) self.tunnel = false - self.httpModule = http - switch (self.agentClass) { - case ForeverAgent.SSL: - self.agentClass = ForeverAgent - break - case https.Agent: - self.agentClass = http.Agent - break - default: - // nothing we can do. just hope for the best - return - } - - // if there's an agent, then get a new one. - if (self.agent) { - self.agent = null - self.agent = self.getAgent() - } - } -} - -Request.prototype.getAgent = function () { - var Agent = this.agentClass - var options = {} - if (this.agentOptions) { - for (var i in this.agentOptions) { - options[i] = this.agentOptions[i] - } - } - if (this.ca) options.ca = this.ca - if (this.ciphers) options.ciphers = this.ciphers - if (this.secureProtocol) options.secureProtocol = this.secureProtocol - if (typeof this.rejectUnauthorized !== 'undefined') options.rejectUnauthorized = this.rejectUnauthorized - - if (this.cert && this.key) { - options.key = this.key - options.cert = this.cert - } - - var poolKey = '' - - // different types of agents are in different pools - if (Agent !== this.httpModule.Agent) { - poolKey += Agent.name - } - - if (!this.httpModule.globalAgent) { - // node 0.4.x - options.host = this.host - options.port = this.port - if (poolKey) poolKey += ':' - poolKey += this.host + ':' + this.port - } - - // ca option is only relevant if proxy or destination are https - var proxy = this.proxy - if (typeof proxy === 'string') proxy = url.parse(proxy) - var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:' - if (isHttps) { - if (options.ca) { - if (poolKey) poolKey += ':' - poolKey += options.ca - } - - if (typeof options.rejectUnauthorized !== 'undefined') { - if (poolKey) poolKey += ':' - poolKey += options.rejectUnauthorized - } - - if (options.cert) - poolKey += options.cert.toString('ascii') + options.key.toString('ascii') - - if (options.ciphers) { - if (poolKey) poolKey += ':' - poolKey += options.ciphers - } - - if (options.secureProtocol) { - if (poolKey) poolKey += ':' - poolKey += options.secureProtocol - } - } - - if (this.pool === globalPool && !poolKey && Object.keys(options).length === 0 && this.httpModule.globalAgent) { - // not doing anything special. Use the globalAgent - return this.httpModule.globalAgent - } - - // we're using a stored agent. Make sure it's protocol-specific - poolKey = this.uri.protocol + poolKey - - // already generated an agent for this setting - if (this.pool[poolKey]) return this.pool[poolKey] - - return this.pool[poolKey] = new Agent(options) -} - -Request.prototype.start = function () { - // start() is called once we are ready to send the outgoing HTTP request. - // this is usually called on the first write(), end() or on nextTick() - var self = this - - if (self._aborted) return - - self._started = true - self.method = self.method || 'GET' - self.href = self.uri.href - - if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) { - self.setHeader('content-length', self.src.stat.size) - } - if (self._aws) { - self.aws(self._aws, true) - } - - // We have a method named auth, which is completely different from the http.request - // auth option. If we don't remove it, we're gonna have a bad time. - var reqOptions = copy(self) - delete reqOptions.auth - - debug('make request', self.uri.href) - self.req = self.httpModule.request(reqOptions, self.onResponse.bind(self)) - - if (self.timeout && !self.timeoutTimer) { - self.timeoutTimer = setTimeout(function () { - self.req.abort() - var e = new Error("ETIMEDOUT") - e.code = "ETIMEDOUT" - self.emit("error", e) - }, self.timeout) - - // Set additional timeout on socket - in case if remote - // server freeze after sending headers - if (self.req.setTimeout) { // only works on node 0.6+ - self.req.setTimeout(self.timeout, function () { - if (self.req) { - self.req.abort() - var e = new Error("ESOCKETTIMEDOUT") - e.code = "ESOCKETTIMEDOUT" - self.emit("error", e) - } - }) - } - } - - self.req.on('error', self.clientErrorHandler) - self.req.on('drain', function() { - self.emit('drain') - }) - self.on('end', function() { - if ( self.req.connection ) self.req.connection.removeListener('error', self._parserErrorHandler) - }) - self.emit('request', self.req) -} -Request.prototype.onResponse = function (response) { - var self = this - debug('onResponse', self.uri.href, response.statusCode, response.headers) - response.on('end', function() { - debug('response end', self.uri.href, response.statusCode, response.headers) - }); - - if (response.connection.listeners('error').indexOf(self._parserErrorHandler) === -1) { - response.connection.once('error', self._parserErrorHandler) - } - if (self._aborted) { - debug('aborted', self.uri.href) - response.resume() - return - } - if (self._paused) response.pause() - else response.resume() - - self.response = response - response.request = self - response.toJSON = toJSON - - // XXX This is different on 0.10, because SSL is strict by default - if (self.httpModule === https && - self.strictSSL && - !response.client.authorized) { - debug('strict ssl error', self.uri.href) - var sslErr = response.client.authorizationError - self.emit('error', new Error('SSL Error: '+ sslErr)) - return - } - - if (self.setHost && self.hasHeader('host')) delete self.headers[self.hasHeader('host')] - if (self.timeout && self.timeoutTimer) { - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - } - - var addCookie = function (cookie) { - if (self._jar){ - var targetCookieJar = self._jar.setCookie?self._jar:cookieJar; - - //set the cookie if it's domain in the href's domain. - targetCookieJar.setCookie(cookie, self.uri.href, function(err){ - if (err){ - console.warn('set cookie failed,'+ err) - } - }) - } - - } - - if (hasHeader('set-cookie', response.headers) && (!self._disableCookies)) { - var headerName = hasHeader('set-cookie', response.headers) - if (Array.isArray(response.headers[headerName])) response.headers[headerName].forEach(addCookie) - else addCookie(response.headers[headerName]) - } - - var redirectTo = null - if (response.statusCode >= 300 && response.statusCode < 400 && hasHeader('location', response.headers)) { - var location = response.headers[hasHeader('location', response.headers)] - debug('redirect', location) - - if (self.followAllRedirects) { - redirectTo = location - } else if (self.followRedirect) { - switch (self.method) { - case 'PATCH': - case 'PUT': - case 'POST': - case 'DELETE': - // Do not follow redirects - break - default: - redirectTo = location - break - } - } - } else if (response.statusCode == 401 && self._hasAuth && !self._sentAuth) { - var authHeader = response.headers[hasHeader('www-authenticate', response.headers)] - var authVerb = authHeader && authHeader.split(' ')[0] - debug('reauth', authVerb) - - switch (authVerb) { - case 'Basic': - self.auth(self._user, self._pass, true) - redirectTo = self.uri - break - - case 'Digest': - // TODO: More complete implementation of RFC 2617. - // - check challenge.algorithm - // - support algorithm="MD5-sess" - // - handle challenge.domain - // - support qop="auth-int" only - // - handle Authentication-Info (not necessarily?) - // - check challenge.stale (not necessarily?) - // - increase nc (not necessarily?) - // For reference: - // http://tools.ietf.org/html/rfc2617#section-3 - // https://github.com/bagder/curl/blob/master/lib/http_digest.c - - var challenge = {} - var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi - for (;;) { - var match = re.exec(authHeader) - if (!match) break - challenge[match[1]] = match[2] || match[3]; - } - - var ha1 = md5(self._user + ':' + challenge.realm + ':' + self._pass) - var ha2 = md5(self.method + ':' + self.uri.path) - var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth' - var nc = qop && '00000001' - var cnonce = qop && uuid().replace(/-/g, '') - var digestResponse = qop ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2) : md5(ha1 + ':' + challenge.nonce + ':' + ha2) - var authValues = { - username: self._user, - realm: challenge.realm, - nonce: challenge.nonce, - uri: self.uri.path, - qop: qop, - response: digestResponse, - nc: nc, - cnonce: cnonce, - algorithm: challenge.algorithm, - opaque: challenge.opaque - } - - authHeader = [] - for (var k in authValues) { - if (!authValues[k]) { - //ignore - } else if (k === 'qop' || k === 'nc' || k === 'algorithm') { - authHeader.push(k + '=' + authValues[k]) - } else { - authHeader.push(k + '="' + authValues[k] + '"') - } - } - authHeader = 'Digest ' + authHeader.join(', ') - self.setHeader('authorization', authHeader) - self._sentAuth = true - - redirectTo = self.uri - break - } - } - - if (redirectTo) { - debug('redirect to', redirectTo) - - // ignore any potential response body. it cannot possibly be useful - // to us at this point. - if (self._paused) response.resume() - - if (self._redirectsFollowed >= self.maxRedirects) { - self.emit('error', new Error("Exceeded maxRedirects. Probably stuck in a redirect loop "+self.uri.href)) - return - } - self._redirectsFollowed += 1 - - if (!isUrl.test(redirectTo)) { - redirectTo = url.resolve(self.uri.href, redirectTo) - } - - var uriPrev = self.uri - self.uri = url.parse(redirectTo) - - // handle the case where we change protocol from https to http or vice versa - if (self.uri.protocol !== uriPrev.protocol) { - self._updateProtocol() - } - - self.redirects.push( - { statusCode : response.statusCode - , redirectUri: redirectTo - } - ) - if (self.followAllRedirects && response.statusCode != 401) self.method = 'GET' - // self.method = 'GET' // Force all redirects to use GET || commented out fixes #215 - delete self.src - delete self.req - delete self.agent - delete self._started - if (response.statusCode != 401) { - // Remove parameters from the previous response, unless this is the second request - // for a server that requires digest authentication. - delete self.body - delete self._form - if (self.headers) { - if (self.hasHeader('host')) delete self.headers[self.hasHeader('host')] - if (self.hasHeader('content-type')) delete self.headers[self.hasHeader('content-type')] - if (self.hasHeader('content-length')) delete self.headers[self.hasHeader('content-length')] - } - } - - self.emit('redirect'); - - self.init() - return // Ignore the rest of the response - } else { - self._redirectsFollowed = self._redirectsFollowed || 0 - // Be a good stream and emit end when the response is finished. - // Hack to emit end on close because of a core bug that never fires end - response.on('close', function () { - if (!self._ended) self.response.emit('end') - }) - - if (self.encoding) { - if (self.dests.length !== 0) { - console.error("Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.") - } else { - response.setEncoding(self.encoding) - } - } - - self.emit('response', response) - - self.dests.forEach(function (dest) { - self.pipeDest(dest) - }) - - response.on("data", function (chunk) { - self._destdata = true - self.emit("data", chunk) - }) - response.on("end", function (chunk) { - self._ended = true - self.emit("end", chunk) - }) - response.on("close", function () {self.emit("close")}) - - if (self.callback) { - var buffer = [] - var bodyLen = 0 - self.on("data", function (chunk) { - buffer.push(chunk) - bodyLen += chunk.length - }) - self.on("end", function () { - debug('end event', self.uri.href) - if (self._aborted) { - debug('aborted', self.uri.href) - return - } - - if (buffer.length && Buffer.isBuffer(buffer[0])) { - debug('has body', self.uri.href, bodyLen) - var body = new Buffer(bodyLen) - var i = 0 - buffer.forEach(function (chunk) { - chunk.copy(body, i, 0, chunk.length) - i += chunk.length - }) - if (self.encoding === null) { - response.body = body - } else { - response.body = body.toString(self.encoding) - } - } else if (buffer.length) { - // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation. - // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse(). - if (self.encoding === 'utf8' && buffer[0].length > 0 && buffer[0][0] === "\uFEFF") { - buffer[0] = buffer[0].substring(1) - } - response.body = buffer.join('') - } - - if (self._json) { - try { - response.body = JSON.parse(response.body) - } catch (e) {} - } - debug('emitting complete', self.uri.href) - if(response.body == undefined && !self._json) { - response.body = ""; - } - self.emit('complete', response, response.body) - }) - } - //if no callback - else{ - self.on("end", function () { - if (self._aborted) { - debug('aborted', self.uri.href) - return - } - self.emit('complete', response); - }); - } - } - debug('finish init function', self.uri.href) -} - -Request.prototype.abort = function () { - this._aborted = true - - if (this.req) { - this.req.abort() - } - else if (this.response) { - this.response.abort() - } - - this.emit("abort") -} - -Request.prototype.pipeDest = function (dest) { - var response = this.response - // Called after the response is received - if (dest.headers && !dest.headersSent) { - if (hasHeader('content-type', response.headers)) { - var ctname = hasHeader('content-type', response.headers) - if (dest.setHeader) dest.setHeader(ctname, response.headers[ctname]) - else dest.headers[ctname] = response.headers[ctname] - } - - if (hasHeader('content-length', response.headers)) { - var clname = hasHeader('content-length', response.headers) - if (dest.setHeader) dest.setHeader(clname, response.headers[clname]) - else dest.headers[clname] = response.headers[clname] - } - } - if (dest.setHeader && !dest.headersSent) { - for (var i in response.headers) { - dest.setHeader(i, response.headers[i]) - } - dest.statusCode = response.statusCode - } - if (this.pipefilter) this.pipefilter(response, dest) -} - -// Composable API -Request.prototype.setHeader = function (name, value, clobber) { - if (clobber === undefined) clobber = true - if (clobber || !this.hasHeader(name)) this.headers[name] = value - else this.headers[this.hasHeader(name)] += ',' + value - return this -} -Request.prototype.setHeaders = function (headers) { - for (var i in headers) {this.setHeader(i, headers[i])} - return this -} -Request.prototype.hasHeader = function (header, headers) { - var headers = Object.keys(headers || this.headers) - , lheaders = headers.map(function (h) {return h.toLowerCase()}) - ; - header = header.toLowerCase() - for (var i=0;i<lheaders.length;i++) { - if (lheaders[i] === header) return headers[i] - } - return false -} - -var hasHeader = Request.prototype.hasHeader - -Request.prototype.qs = function (q, clobber) { - var base - if (!clobber && this.uri.query) base = qs.parse(this.uri.query) - else base = {} - - for (var i in q) { - base[i] = q[i] - } - - if (qs.stringify(base) === ''){ - return this - } - - this.uri = url.parse(this.uri.href.split('?')[0] + '?' + qs.stringify(base)) - this.url = this.uri - this.path = this.uri.path - - return this -} -Request.prototype.form = function (form) { - if (form) { - this.setHeader('content-type', 'application/x-www-form-urlencoded; charset=utf-8') - this.body = qs.stringify(form).toString('utf8') - return this - } - // create form-data object - this._form = new FormData() - return this._form -} -Request.prototype.multipart = function (multipart) { - var self = this - self.body = [] - - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) - } else { - var headerName = self.hasHeader('content-type'); - self.setHeader(headerName, self.headers[headerName].split(';')[0] + '; boundary=' + self.boundary) - } - - if (!multipart.forEach) throw new Error('Argument error, options.multipart.') - - if (self.preambleCRLF) { - self.body.push(new Buffer('\r\n')) - } - - multipart.forEach(function (part) { - var body = part.body - if(body == null) throw Error('Body attribute missing in multipart.') - delete part.body - var preamble = '--' + self.boundary + '\r\n' - Object.keys(part).forEach(function (key) { - preamble += key + ': ' + part[key] + '\r\n' - }) - preamble += '\r\n' - self.body.push(new Buffer(preamble)) - self.body.push(new Buffer(body)) - self.body.push(new Buffer('\r\n')) - }) - self.body.push(new Buffer('--' + self.boundary + '--')) - return self -} -Request.prototype.json = function (val) { - var self = this - - if (!self.hasHeader('accept')) self.setHeader('accept', 'application/json') - - this._json = true - if (typeof val === 'boolean') { - if (typeof this.body === 'object') { - this.body = safeStringify(this.body) - self.setHeader('content-type', 'application/json') - } - } else { - this.body = safeStringify(val) - self.setHeader('content-type', 'application/json') - } - return this -} -Request.prototype.getHeader = function (name, headers) { - var result, re, match - if (!headers) headers = this.headers - Object.keys(headers).forEach(function (key) { - re = new RegExp(name, 'i') - match = key.match(re) - if (match) result = headers[key] - }) - return result -} -var getHeader = Request.prototype.getHeader - -Request.prototype.auth = function (user, pass, sendImmediately) { - if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) { - throw new Error('auth() received invalid user or password') - } - this._user = user - this._pass = pass - this._hasAuth = true - var header = typeof pass !== 'undefined' ? user + ':' + pass : user - if (sendImmediately || typeof sendImmediately == 'undefined') { - this.setHeader('authorization', 'Basic ' + toBase64(header)) - this._sentAuth = true - } - return this -} -Request.prototype.aws = function (opts, now) { - if (!now) { - this._aws = opts - return this - } - var date = new Date() - this.setHeader('date', date.toUTCString()) - var auth = - { key: opts.key - , secret: opts.secret - , verb: this.method.toUpperCase() - , date: date - , contentType: this.getHeader('content-type') || '' - , md5: this.getHeader('content-md5') || '' - , amazonHeaders: aws.canonicalizeHeaders(this.headers) - } - if (opts.bucket && this.path) { - auth.resource = '/' + opts.bucket + this.path - } else if (opts.bucket && !this.path) { - auth.resource = '/' + opts.bucket - } else if (!opts.bucket && this.path) { - auth.resource = this.path - } else if (!opts.bucket && !this.path) { - auth.resource = '/' - } - auth.resource = aws.canonicalizeResource(auth.resource) - this.setHeader('authorization', aws.authorization(auth)) - - return this -} -Request.prototype.httpSignature = function (opts) { - var req = this - httpSignature.signRequest({ - getHeader: function(header) { - return getHeader(header, req.headers) - }, - setHeader: function(header, value) { - req.setHeader(header, value) - }, - method: this.method, - path: this.path - }, opts) - debug('httpSignature authorization', this.getHeader('authorization')) - - return this -} - -Request.prototype.hawk = function (opts) { - this.setHeader('Authorization', hawk.client.header(this.uri, this.method, opts).field) -} - -Request.prototype.oauth = function (_oauth) { - var form - if (this.hasHeader('content-type') && - this.getHeader('content-type').slice(0, 'application/x-www-form-urlencoded'.length) === - 'application/x-www-form-urlencoded' - ) { - form = qs.parse(this.body) - } - if (this.uri.query) { - form = qs.parse(this.uri.query) - } - if (!form) form = {} - var oa = {} - for (var i in form) oa[i] = form[i] - for (var i in _oauth) oa['oauth_'+i] = _oauth[i] - if (!oa.oauth_version) oa.oauth_version = '1.0' - if (!oa.oauth_timestamp) oa.oauth_timestamp = Math.floor( Date.now() / 1000 ).toString() - if (!oa.oauth_nonce) oa.oauth_nonce = uuid().replace(/-/g, '') - - oa.oauth_signature_method = 'HMAC-SHA1' - - var consumer_secret = oa.oauth_consumer_secret - delete oa.oauth_consumer_secret - var token_secret = oa.oauth_token_secret - delete oa.oauth_token_secret - var timestamp = oa.oauth_timestamp - - var baseurl = this.uri.protocol + '//' + this.uri.host + this.uri.pathname - var signature = oauth.hmacsign(this.method, baseurl, oa, consumer_secret, token_secret) - - // oa.oauth_signature = signature - for (var i in form) { - if ( i.slice(0, 'oauth_') in _oauth) { - // skip - } else { - delete oa['oauth_'+i] - if (i !== 'x_auth_mode') delete oa[i] - } - } - oa.oauth_timestamp = timestamp - var authHeader = 'OAuth '+Object.keys(oa).sort().map(function (i) {return i+'="'+oauth.rfc3986(oa[i])+'"'}).join(',') - authHeader += ',oauth_signature="' + oauth.rfc3986(signature) + '"' - this.setHeader('Authorization', authHeader) - return this -} -Request.prototype.jar = function (jar) { - var cookies - - if (this._redirectsFollowed === 0) { - this.originalCookieHeader = this.getHeader('cookie') - } - - if (!jar) { - // disable cookies - cookies = false - this._disableCookies = true - } else { - var targetCookieJar = (jar && jar.getCookieString)?jar:cookieJar; - var urihref = this.uri.href - - //fetch cookie in the Specified host - targetCookieJar.getCookieString(urihref, function(err, hrefCookie){ - if (err){ - console.warn('get cookieString failed,' +err) - } else { - cookies = hrefCookie - } - }) - - } - - //if need cookie and cookie is not empty - if (cookies && cookies.length) { - if (this.originalCookieHeader) { - // Don't overwrite existing Cookie header - this.setHeader('cookie', this.originalCookieHeader + '; ' + cookies) - } else { - this.setHeader('cookie', cookies) - } - } - this._jar = jar - return this -} - - -// Stream API -Request.prototype.pipe = function (dest, opts) { - if (this.response) { - if (this._destdata) { - throw new Error("You cannot pipe after data has been emitted from the response.") - } else if (this._ended) { - throw new Error("You cannot pipe after the response has been ended.") - } else { - stream.Stream.prototype.pipe.call(this, dest, opts) - this.pipeDest(dest) - return dest - } - } else { - this.dests.push(dest) - stream.Stream.prototype.pipe.call(this, dest, opts) - return dest - } -} -Request.prototype.write = function () { - if (!this._started) this.start() - return this.req.write.apply(this.req, arguments) -} -Request.prototype.end = function (chunk) { - if (chunk) this.write(chunk) - if (!this._started) this.start() - this.req.end() -} -Request.prototype.pause = function () { - if (!this.response) this._paused = true - else this.response.pause.apply(this.response, arguments) -} -Request.prototype.resume = function () { - if (!this.response) this._paused = false - else this.response.resume.apply(this.response, arguments) -} -Request.prototype.destroy = function () { - if (!this._ended) this.end() - else if (this.response) this.response.destroy() -} - -function toJSON () { - return getSafe(this, '__' + (((1+Math.random())*0x10000)|0).toString(16)) -} - -Request.prototype.toJSON = toJSON - - -module.exports = Request diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.jshintrc b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.jshintrc deleted file mode 100644 index c8ef3ca4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.travis.yml deleted file mode 100644 index 12b1a310..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/LICENSE deleted file mode 100644 index f6a0029d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/README.md deleted file mode 100644 index c9388b38..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/README.md +++ /dev/null @@ -1,131 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/.npmignore deleted file mode 100644 index 38344f87..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -build/ -test/ -examples/ -fs.js -zlib.js \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/README.md deleted file mode 100644 index be976683..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/README.md +++ /dev/null @@ -1,768 +0,0 @@ -# readable-stream - -A new class of streams for Node.js - -This module provides the new Stream base classes introduced in Node -v0.10, for use in Node v0.8. You can use it to have programs that -have to work with node v0.8, while being forward-compatible for v0.10 -and beyond. When you drop support for v0.8, you can remove this -module, and only use the native streams. - -This is almost exactly the same codebase as appears in Node v0.10. -However: - -1. The exported object is actually the Readable class. Decorating the - native `stream` module would be global pollution. -2. In v0.10, you can safely use `base64` as an argument to - `setEncoding` in Readable streams. However, in v0.8, the - StringDecoder class has no `end()` method, which is problematic for - Base64. So, don't use that, because it'll break and be weird. - -Other than that, the API is the same as `require('stream')` in v0.10, -so the API docs are reproduced below. - ----------- - - Stability: 2 - Unstable - -A stream is an abstract interface implemented by various objects in -Node. For example a request to an HTTP server is a stream, as is -stdout. Streams are readable, writable, or both. All streams are -instances of [EventEmitter][] - -You can load the Stream base classes by doing `require('stream')`. -There are base classes provided for Readable streams, Writable -streams, Duplex streams, and Transform streams. - -## Compatibility - -In earlier versions of Node, the Readable stream interface was -simpler, but also less powerful and less useful. - -* Rather than waiting for you to call the `read()` method, `'data'` - events would start emitting immediately. If you needed to do some - I/O to decide how to handle data, then you had to store the chunks - in some kind of buffer so that they would not be lost. -* The `pause()` method was advisory, rather than guaranteed. This - meant that you still had to be prepared to receive `'data'` events - even when the stream was in a paused state. - -In Node v0.10, the Readable class described below was added. For -backwards compatibility with older Node programs, Readable streams -switch into "old mode" when a `'data'` event handler is added, or when -the `pause()` or `resume()` methods are called. The effect is that, -even if you are not using the new `read()` method and `'readable'` -event, you no longer have to worry about losing `'data'` chunks. - -Most programs will continue to function normally. However, this -introduces an edge case in the following conditions: - -* No `'data'` event handler is added. -* The `pause()` and `resume()` methods are never called. - -For example, consider the following code: - -```javascript -// WARNING! BROKEN! -net.createServer(function(socket) { - - // we add an 'end' method, but never consume the data - socket.on('end', function() { - // It will never get here. - socket.end('I got your message (but didnt read it)\n'); - }); - -}).listen(1337); -``` - -In versions of node prior to v0.10, the incoming message data would be -simply discarded. However, in Node v0.10 and beyond, the socket will -remain paused forever. - -The workaround in this situation is to call the `resume()` method to -trigger "old mode" behavior: - -```javascript -// Workaround -net.createServer(function(socket) { - - socket.on('end', function() { - socket.end('I got your message (but didnt read it)\n'); - }); - - // start the flow of data, discarding it. - socket.resume(); - -}).listen(1337); -``` - -In addition to new Readable streams switching into old-mode, pre-v0.10 -style streams can be wrapped in a Readable class using the `wrap()` -method. - -## Class: stream.Readable - -<!--type=class--> - -A `Readable Stream` has the following methods, members, and events. - -Note that `stream.Readable` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -method. (See below.) - -### new stream.Readable([options]) - -* `options` {Object} - * `highWaterMark` {Number} The maximum number of bytes to store in - the internal buffer before ceasing to read from the underlying - resource. Default=16kb - * `encoding` {String} If specified, then buffers will be decoded to - strings using the specified encoding. Default=null - * `objectMode` {Boolean} Whether this stream should behave - as a stream of objects. Meaning that stream.read(n) returns - a single value instead of a Buffer of size n - -In classes that extend the Readable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### readable.\_read(size) - -* `size` {Number} Number of bytes to read asynchronously - -Note: **This function should NOT be called directly.** It should be -implemented by child classes, and called by the internal Readable -class methods only. - -All Readable stream implementations must provide a `_read` method -to fetch data from the underlying resource. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -When data is available, put it into the read queue by calling -`readable.push(chunk)`. If `push` returns false, then you should stop -reading. When `_read` is called again, you should start pushing more -data. - -The `size` argument is advisory. Implementations where a "read" is a -single call that returns data can use this to know how much data to -fetch. Implementations where that is not relevant, such as TCP or -TLS, may ignore this argument, and simply provide data whenever it -becomes available. There is no need, for example to "wait" until -`size` bytes are available before calling `stream.push(chunk)`. - -### readable.push(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to push into the read queue -* return {Boolean} Whether or not more pushes should be performed - -Note: **This function should be called by Readable implementors, NOT -by consumers of Readable subclasses.** The `_read()` function will not -be called again until at least one `push(chunk)` call is made. If no -data is available, then you MAY call `push('')` (an empty string) to -allow a future `_read` call, without adding any data to the queue. - -The `Readable` class works by putting data into a read queue to be -pulled out later by calling the `read()` method when the `'readable'` -event fires. - -The `push()` method will explicitly insert some data into the read -queue. If it is called with `null` then it will signal the end of the -data. - -In some cases, you may be wrapping a lower-level source which has some -sort of pause/resume mechanism, and a data callback. In those cases, -you could wrap the low-level source object by doing something like -this: - -```javascript -// source is an object with readStop() and readStart() methods, -// and an `ondata` member that gets called when it has data, and -// an `onend` member that gets called when the data is over. - -var stream = new Readable(); - -source.ondata = function(chunk) { - // if push() returns false, then we need to stop reading from source - if (!stream.push(chunk)) - source.readStop(); -}; - -source.onend = function() { - stream.push(null); -}; - -// _read will be called when the stream wants to pull more data in -// the advisory size argument is ignored in this case. -stream._read = function(n) { - source.readStart(); -}; -``` - -### readable.unshift(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue -* return {Boolean} Whether or not more pushes should be performed - -This is the corollary of `readable.push(chunk)`. Rather than putting -the data at the *end* of the read queue, it puts it at the *front* of -the read queue. - -This is useful in certain use-cases where a stream is being consumed -by a parser, which needs to "un-consume" some data that it has -optimistically pulled out of the source. - -```javascript -// A parser for a simple data protocol. -// The "header" is a JSON object, followed by 2 \n characters, and -// then a message body. -// -// Note: This can be done more simply as a Transform stream. See below. - -function SimpleProtocol(source, options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Readable.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - - // source is a readable stream, such as a socket or file - this._source = source; - - var self = this; - source.on('end', function() { - self.push(null); - }); - - // give it a kick whenever the source is readable - // read(0) will not consume any bytes - source.on('readable', function() { - self.read(0); - }); - - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Readable.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._read = function(n) { - if (!this._inBody) { - var chunk = this._source.read(); - - // if the source doesn't have data, we don't have data yet. - if (chunk === null) - return this.push(''); - - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - this.push(''); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // now, because we got some extra data, unshift the rest - // back into the read queue so that our consumer will see it. - var b = chunk.slice(split); - this.unshift(b); - - // and let them know that we are done parsing the header. - this.emit('header', this.header); - } - } else { - // from there on, just provide the data to our consumer. - // careful not to push(null), since that would indicate EOF. - var chunk = this._source.read(); - if (chunk) this.push(chunk); - } -}; - -// Usage: -var parser = new SimpleProtocol(source); -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - -### readable.wrap(stream) - -* `stream` {Stream} An "old style" readable stream - -If you are using an older Node library that emits `'data'` events and -has a `pause()` method that is advisory only, then you can use the -`wrap()` method to create a Readable stream that uses the old stream -as its data source. - -For example: - -```javascript -var OldReader = require('./old-api-module.js').OldReader; -var oreader = new OldReader; -var Readable = require('stream').Readable; -var myReader = new Readable().wrap(oreader); - -myReader.on('readable', function() { - myReader.read(); // etc. -}); -``` - -### Event: 'readable' - -When there is data ready to be consumed, this event will fire. - -When this event emits, call the `read()` method to consume the data. - -### Event: 'end' - -Emitted when the stream has received an EOF (FIN in TCP terminology). -Indicates that no more `'data'` events will happen. If the stream is -also writable, it may be possible to continue writing. - -### Event: 'data' - -The `'data'` event emits either a `Buffer` (by default) or a string if -`setEncoding()` was used. - -Note that adding a `'data'` event listener will switch the Readable -stream into "old mode", where data is emitted as soon as it is -available, rather than waiting for you to call `read()` to consume it. - -### Event: 'error' - -Emitted if there was an error receiving data. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### readable.setEncoding(encoding) - -Makes the `'data'` event emit a string instead of a `Buffer`. `encoding` -can be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`. - -The encoding can also be set by specifying an `encoding` field to the -constructor. - -### readable.read([size]) - -* `size` {Number | null} Optional number of bytes to read. -* Return: {Buffer | String | null} - -Note: **This function SHOULD be called by Readable stream users.** - -Call this method to consume data once the `'readable'` event is -emitted. - -The `size` argument will set a minimum number of bytes that you are -interested in. If not set, then the entire content of the internal -buffer is returned. - -If there is no data to consume, or if there are fewer bytes in the -internal buffer than the `size` argument, then `null` is returned, and -a future `'readable'` event will be emitted when more is available. - -Calling `stream.read(0)` will always return `null`, and will trigger a -refresh of the internal buffer, but otherwise be a no-op. - -### readable.pipe(destination, [options]) - -* `destination` {Writable Stream} -* `options` {Object} Optional - * `end` {Boolean} Default=true - -Connects this readable stream to `destination` WriteStream. Incoming -data on this stream gets written to `destination`. Properly manages -back-pressure so that a slow destination will not be overwhelmed by a -fast readable stream. - -This function returns the `destination` stream. - -For example, emulating the Unix `cat` command: - - process.stdin.pipe(process.stdout); - -By default `end()` is called on the destination when the source stream -emits `end`, so that `destination` is no longer writable. Pass `{ end: -false }` as `options` to keep the destination stream open. - -This keeps `writer` open so that "Goodbye" can be written at the -end. - - reader.pipe(writer, { end: false }); - reader.on("end", function() { - writer.end("Goodbye\n"); - }); - -Note that `process.stderr` and `process.stdout` are never closed until -the process exits, regardless of the specified options. - -### readable.unpipe([destination]) - -* `destination` {Writable Stream} Optional - -Undo a previously established `pipe()`. If no destination is -provided, then all previously established pipes are removed. - -### readable.pause() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Ceases the flow of data. No `'data'` events are emitted while the -stream is in a paused state. - -### readable.resume() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Resumes the incoming `'data'` events after a `pause()`. - - -## Class: stream.Writable - -<!--type=class--> - -A `Writable` Stream has the following methods, members, and events. - -Note that `stream.Writable` is an abstract class designed to be -extended with an underlying implementation of the -`_write(chunk, encoding, cb)` method. (See below.) - -### new stream.Writable([options]) - -* `options` {Object} - * `highWaterMark` {Number} Buffer level when `write()` starts - returning false. Default=16kb - * `decodeStrings` {Boolean} Whether or not to decode strings into - Buffers before passing them to `_write()`. Default=true - -In classes that extend the Writable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### writable.\_write(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be written. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. Ignore chunk is a buffer. Note that chunk will - **always** be a buffer unless the `decodeStrings` option is - explicitly set to `false`. -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -All Writable stream implementations must provide a `_write` method to -send data to the underlying resource. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Writable -class methods only. - -Call the callback using the standard `callback(error)` pattern to -signal that the write completed successfully or with an error. - -If the `decodeStrings` flag is set in the constructor options, then -`chunk` may be a string rather than a Buffer, and `encoding` will -indicate the sort of string that it is. This is to support -implementations that have an optimized handling for certain string -data encodings. If you do not explicitly set the `decodeStrings` -option to `false`, then you can safely ignore the `encoding` argument, -and assume that `chunk` will always be a Buffer. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - - -### writable.write(chunk, [encoding], [callback]) - -* `chunk` {Buffer | String} Data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when this chunk is - successfully written. -* Returns {Boolean} - -Writes `chunk` to the stream. Returns `true` if the data has been -flushed to the underlying resource. Returns `false` to indicate that -the buffer is full, and the data will be sent out in the future. The -`'drain'` event will indicate when the buffer is empty again. - -The specifics of when `write()` will return false, is determined by -the `highWaterMark` option provided to the constructor. - -### writable.end([chunk], [encoding], [callback]) - -* `chunk` {Buffer | String} Optional final data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when the final chunk is - successfully written. - -Call this method to signal the end of the data being written to the -stream. - -### Event: 'drain' - -Emitted when the stream's write queue empties and it's safe to write -without buffering again. Listen for it when `stream.write()` returns -`false`. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### Event: 'finish' - -When `end()` is called and there are no more chunks to write, this -event is emitted. - -### Event: 'pipe' - -* `source` {Readable Stream} - -Emitted when the stream is passed to a readable stream's pipe method. - -### Event 'unpipe' - -* `source` {Readable Stream} - -Emitted when a previously established `pipe()` is removed using the -source Readable stream's `unpipe()` method. - -## Class: stream.Duplex - -<!--type=class--> - -A "duplex" stream is one that is both Readable and Writable, such as a -TCP socket connection. - -Note that `stream.Duplex` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -and `_write(chunk, encoding, callback)` methods as you would with a Readable or -Writable stream class. - -Since JavaScript doesn't have multiple prototypal inheritance, this -class prototypally inherits from Readable, and then parasitically from -Writable. It is thus up to the user to implement both the lowlevel -`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method -on extension duplex classes. - -### new stream.Duplex(options) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then - the stream will automatically end the readable side when the - writable side ends and vice versa. - -In classes that extend the Duplex class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -## Class: stream.Transform - -A "transform" stream is a duplex stream where the output is causally -connected in some way to the input, such as a zlib stream or a crypto -stream. - -There is no requirement that the output be the same size as the input, -the same number of chunks, or arrive at the same time. For example, a -Hash stream will only ever have a single chunk of output which is -provided when the input is ended. A zlib stream will either produce -much smaller or much larger than its input. - -Rather than implement the `_read()` and `_write()` methods, Transform -classes must implement the `_transform()` method, and may optionally -also implement the `_flush()` method. (See below.) - -### new stream.Transform([options]) - -* `options` {Object} Passed to both Writable and Readable - constructors. - -In classes that extend the Transform class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### transform.\_transform(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be transformed. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. (Ignore if `decodeStrings` chunk is a buffer.) -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Transform -class methods only. - -All Transform stream implementations must provide a `_transform` -method to accept input and produce output. - -`_transform` should do whatever has to be done in this specific -Transform class, to handle the bytes being written, and pass them off -to the readable portion of the interface. Do asynchronous I/O, -process things, and so on. - -Call `transform.push(outputChunk)` 0 or more times to generate output -from this input chunk, depending on how much data you want to output -as a result of this chunk. - -Call the callback function only when the current chunk is completely -consumed. Note that there may or may not be output as a result of any -particular input chunk. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### transform.\_flush(callback) - -* `callback` {Function} Call this function (optionally with an error - argument) when you are done flushing any remaining data. - -Note: **This function MUST NOT be called directly.** It MAY be implemented -by child classes, and if so, will be called by the internal Transform -class methods only. - -In some cases, your transform operation may need to emit a bit more -data at the end of the stream. For example, a `Zlib` compression -stream will store up some internal state so that it can optimally -compress the output. At the end, however, it needs to do the best it -can with what is left, so that the data will be complete. - -In those cases, you can implement a `_flush` method, which will be -called at the very end, after all the written data is consumed, but -before emitting `end` to signal the end of the readable side. Just -like with `_transform`, call `transform.push(chunk)` zero or more -times, as appropriate, and call `callback` when the flush operation is -complete. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### Example: `SimpleProtocol` parser - -The example above of a simple protocol parser can be implemented much -more simply by using the higher level `Transform` stream class. - -In this example, rather than providing the input as an argument, it -would be piped into the parser, which is a more idiomatic Node stream -approach. - -```javascript -function SimpleProtocol(options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Transform.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Transform.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._transform = function(chunk, encoding, done) { - if (!this._inBody) { - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // and let them know that we are done parsing the header. - this.emit('header', this.header); - - // now, because we got some extra data, emit this first. - this.push(b); - } - } else { - // from there on, just provide the data to our consumer as-is. - this.push(b); - } - done(); -}; - -var parser = new SimpleProtocol(); -source.pipe(parser) - -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - - -## Class: stream.PassThrough - -This is a trivial implementation of a `Transform` stream that simply -passes the input bytes across to the output. Its purpose is mainly -for examples and testing, but there are occasionally use cases where -it can come in handy. - - -[EventEmitter]: events.html#events_class_events_eventemitter diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/duplex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/duplex.js deleted file mode 100644 index ca807af8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/float.patch b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/float.patch deleted file mode 100644 index 0ad71a1f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/float.patch +++ /dev/null @@ -1,68 +0,0 @@ -diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js -index c5a741c..a2e0d8e 100644 ---- a/lib/_stream_duplex.js -+++ b/lib/_stream_duplex.js -@@ -26,8 +26,8 @@ - - module.exports = Duplex; - var util = require('util'); --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('./_stream_readable'); -+var Writable = require('./_stream_writable'); - - util.inherits(Duplex, Readable); - -diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js -index a5e9864..330c247 100644 ---- a/lib/_stream_passthrough.js -+++ b/lib/_stream_passthrough.js -@@ -25,7 +25,7 @@ - - module.exports = PassThrough; - --var Transform = require('_stream_transform'); -+var Transform = require('./_stream_transform'); - var util = require('util'); - util.inherits(PassThrough, Transform); - -diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js -index 2259d2e..e6681ee 100644 ---- a/lib/_stream_readable.js -+++ b/lib/_stream_readable.js -@@ -23,6 +23,9 @@ 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 StringDecoder; -diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js -index e925b4b..f08b05e 100644 ---- a/lib/_stream_transform.js -+++ b/lib/_stream_transform.js -@@ -64,7 +64,7 @@ - - module.exports = Transform; - --var Duplex = require('_stream_duplex'); -+var Duplex = require('./_stream_duplex'); - var util = require('util'); - util.inherits(Transform, Duplex); - -diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js -index a26f711..56ca47d 100644 ---- a/lib/_stream_writable.js -+++ b/lib/_stream_writable.js -@@ -109,7 +109,7 @@ function WritableState(options, stream) { - function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. -- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex)) -+ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex'))) - return new Writable(options); - - this._writableState = new WritableState(options, this); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index a2e0d8e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,69 +0,0 @@ -// 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 330c247d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,41 +0,0 @@ -// 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 323f3305..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,927 +0,0 @@ -// 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 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index 707e4b3b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,205 +0,0 @@ -// 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index 9eaf4ec2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,371 +0,0 @@ -// 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 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 = []; -} - -function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof require('./_stream_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.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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE deleted file mode 100644 index 6de584a4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md deleted file mode 100644 index 4d2aa001..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md +++ /dev/null @@ -1,7 +0,0 @@ -**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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js deleted file mode 100755 index 46470cfd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env node - -const hyperquest = require('hyperzip')(require('hyperdirect')) - , bl = require('bl') - , fs = require('fs') - , path = require('path') - , cheerio = require('cheerio') - - , files = require('./files') - , testReplace = require('./test-replacements') - - , srcurlpfx = 'https://raw.github.com/joyent/node/v' + process.argv[2] + '-release/' - , libsrcurl = srcurlpfx + 'lib/' - , testsrcurl = srcurlpfx + 'test/simple/' - , testlisturl = 'https://github.com/joyent/node/tree/v' + process.argv[2] + '-release/test/simple' - , libourroot = path.join(__dirname, '../') - , testourroot = path.join(__dirname, '../test/simple/') - - -function processFile (url, out, replacements) { - hyperquest(url).pipe(bl(function (err, data) { - if (err) - throw err - - data = data.toString() - replacements.forEach(function (replacement) { - data = data.replace.apply(data, replacement) - }) - - fs.writeFile(out, data, 'utf8', function (err) { - if (err) - throw err - - console.log('Wrote', out) - }) - })) -} - -function processLibFile (file) { - var replacements = files[file] - , url = libsrcurl + file - , out = path.join(libourroot, replacements.out || file) - - processFile(url, out, replacements) -} - - -function processTestFile (file) { - var replacements = testReplace.all - , url = testsrcurl + file - , out = path.join(testourroot, file) - - if (testReplace[file]) - replacements = replacements.concat(testReplace[file]) - - processFile(url, out, replacements) -} - - -if (!/0\.1\d\.\d+/.test(process.argv[2])) { - console.log('Usage: build.js <node version>') - return process.exit(-1) -} - - -//-------------------------------------------------------------------- -// Grab & process files in ../lib/ - -Object.keys(files).forEach(processLibFile) - -//-------------------------------------------------------------------- -// Discover, grab and process all test-string-decoder* files on joyent/node - -hyperquest(testlisturl).pipe(bl(function (err, data) { - if (err) - throw err - - var $ = cheerio.load(data.toString()) - - $('table.files .js-directory-link').each(function () { - var file = $(this).text() - if (/^test-string-decoder/.test(file) || file == 'common.js') - processTestFile(file) - }) -})) - -//-------------------------------------------------------------------- -// Grab the joyent/node test/common.js - -processFile( - testsrcurl + '../common.js' - , path.join(testourroot, '../common.js') - , testReplace['common.js'] -) \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js deleted file mode 100644 index 7396a4f4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js +++ /dev/null @@ -1,36 +0,0 @@ -/* This file lists the files to be fetched from the node repo - * in the /lib/ directory which will be placed in the ../lib/ - * directory after having each of the "replacements" in the - * array for that file applied to it. The replacements are - * simply the arguments to String#replace, so they can be - * strings, regexes, functions. - */ - -module.exports['string_decoder.js'] = [ - - // pull in Bufer as a require - // add Buffer.isEncoding where missing - [ - /^(\/\/ USE OR OTHER DEALINGS IN THE SOFTWARE\.)/m - , '$1\n\nvar Buffer = require(\'buffer\').Buffer;' - + '\n' - + '\nvar isBufferEncoding = Buffer.isEncoding' - + '\n || function(encoding) {' - + '\n switch (encoding && encoding.toLowerCase()) {' - + '\n 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;' - + '\n default: return false;' - + '\n }' - + '\n }' - + '\n' - - ] - - // use custom Buffer.isEncoding reference - , [ - /Buffer\.isEncoding\(/g - , 'isBufferEncoding\(' - ] - -] - -module.exports['string_decoder.js'].out = 'index.js' \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json deleted file mode 100644 index f7ee6a46..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "string_decoder-build", - "version": "0.0.0", - "description": "", - "main": "build.js", - "dependencies": { - "bl": "~0.6.0", - "hyperzip": "0.0.0", - "hyperdirect": "0.0.0", - "cheerio": "~0.13.1" - } -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js deleted file mode 100644 index 5bbf6028..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports.all = [ - [ - /require\(['"]string_decoder['"]\)/g - , 'require(\'../../\')' - ] - -] - -module.exports['common.js'] = [ - [ - /^ setImmediate,$/m - , ' typeof setImmediate == \'undefined\' ? null : setImmediate,' - ] - - , [ - /^ clearImmediate,$/m - , ' typeof clearImmediate == \'undefined\' ? null : clearImmediate,' - ] - - , [ - /^ global];$/m - , ' global].filter(Boolean);' - ] -] diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js deleted file mode 100644 index 2e44a03e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json deleted file mode 100644 index c7cac1a5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "string_decoder", - "version": "0.10.25", - "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", - "dist": { - "shasum": "aa026a29a0177ff13c8df4472dcda2f26d646900" - }, - "_from": "string_decoder@~0.10.x", - "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.25.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js deleted file mode 100644 index ed5ff08d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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 path = require('path'); -var assert = require('assert'); - -exports.testDir = path.dirname(__filename); -exports.fixturesDir = path.join(exports.testDir, 'fixtures'); -exports.libDir = path.join(exports.testDir, '../lib'); -exports.tmpDir = path.join(exports.testDir, 'tmp'); -exports.PORT = +process.env.NODE_COMMON_PORT || 12346; - -if (process.platform === 'win32') { - exports.PIPE = '\\\\.\\pipe\\libuv-test'; -} else { - exports.PIPE = exports.tmpDir + '/test.sock'; -} - -var util = require('util'); -for (var i in util) exports[i] = util[i]; -//for (var i in exports) global[i] = exports[i]; - -function protoCtrChain(o) { - var result = []; - for (; o; o = o.__proto__) { result.push(o.constructor); } - return result.join(); -} - -exports.indirectInstanceOf = function(obj, cls) { - if (obj instanceof cls) { return true; } - var clsChain = protoCtrChain(cls.prototype); - var objChain = protoCtrChain(obj); - return objChain.slice(-clsChain.length) === clsChain; -}; - - -exports.ddCommand = function(filename, kilobytes) { - if (process.platform === 'win32') { - var p = path.resolve(exports.fixturesDir, 'create-file.js'); - return '"' + process.argv[0] + '" "' + p + '" "' + - filename + '" ' + (kilobytes * 1024); - } else { - return 'dd if=/dev/zero of="' + filename + '" bs=1024 count=' + kilobytes; - } -}; - - -exports.spawnCat = function(options) { - var spawn = require('child_process').spawn; - - if (process.platform === 'win32') { - return spawn('more', [], options); - } else { - return spawn('cat', [], options); - } -}; - - -exports.spawnPwd = function(options) { - var spawn = require('child_process').spawn; - - if (process.platform === 'win32') { - return spawn('cmd.exe', ['/c', 'cd'], options); - } else { - return spawn('pwd', [], options); - } -}; - - -// Turn this off if the test should not check for global leaks. -exports.globalCheck = true; - -process.on('exit', function() { - if (!exports.globalCheck) return; - var knownGlobals = [setTimeout, - setInterval, - typeof setImmediate == 'undefined' ? null : setImmediate, - clearTimeout, - clearInterval, - typeof clearImmediate == 'undefined' ? null : clearImmediate, - console, - Buffer, - process, - global].filter(Boolean); - - if (global.gc) { - knownGlobals.push(gc); - } - - if (global.DTRACE_HTTP_SERVER_RESPONSE) { - knownGlobals.push(DTRACE_HTTP_SERVER_RESPONSE); - knownGlobals.push(DTRACE_HTTP_SERVER_REQUEST); - knownGlobals.push(DTRACE_HTTP_CLIENT_RESPONSE); - knownGlobals.push(DTRACE_HTTP_CLIENT_REQUEST); - knownGlobals.push(DTRACE_NET_STREAM_END); - knownGlobals.push(DTRACE_NET_SERVER_CONNECTION); - knownGlobals.push(DTRACE_NET_SOCKET_READ); - knownGlobals.push(DTRACE_NET_SOCKET_WRITE); - } - if (global.COUNTER_NET_SERVER_CONNECTION) { - knownGlobals.push(COUNTER_NET_SERVER_CONNECTION); - knownGlobals.push(COUNTER_NET_SERVER_CONNECTION_CLOSE); - knownGlobals.push(COUNTER_HTTP_SERVER_REQUEST); - knownGlobals.push(COUNTER_HTTP_SERVER_RESPONSE); - knownGlobals.push(COUNTER_HTTP_CLIENT_REQUEST); - knownGlobals.push(COUNTER_HTTP_CLIENT_RESPONSE); - } - - if (global.ArrayBuffer) { - knownGlobals.push(ArrayBuffer); - knownGlobals.push(Int8Array); - knownGlobals.push(Uint8Array); - knownGlobals.push(Uint8ClampedArray); - knownGlobals.push(Int16Array); - knownGlobals.push(Uint16Array); - knownGlobals.push(Int32Array); - knownGlobals.push(Uint32Array); - knownGlobals.push(Float32Array); - knownGlobals.push(Float64Array); - knownGlobals.push(DataView); - } - - for (var x in global) { - var found = false; - - for (var y in knownGlobals) { - if (global[x] === knownGlobals[y]) { - found = true; - break; - } - } - - if (!found) { - console.error('Unknown global: %s', x); - assert.ok(false, 'Unknown global found'); - } - } -}); - - -var mustCallChecks = []; - - -function runCallChecks(exitCode) { - if (exitCode !== 0) return; - - var failed = mustCallChecks.filter(function(context) { - return context.actual !== context.expected; - }); - - failed.forEach(function(context) { - console.log('Mismatched %s function calls. Expected %d, actual %d.', - context.name, - context.expected, - context.actual); - console.log(context.stack.split('\n').slice(2).join('\n')); - }); - - if (failed.length) process.exit(1); -} - - -exports.mustCall = function(fn, expected) { - if (typeof expected !== 'number') expected = 1; - - var context = { - expected: expected, - actual: 0, - stack: (new Error).stack, - name: fn.name || '<anonymous>' - }; - - // add the exit listener only once to avoid listener leak warnings - if (mustCallChecks.length === 0) process.on('exit', runCallChecks); - - mustCallChecks.push(context); - - return function() { - context.actual++; - return fn.apply(this, arguments); - }; -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js deleted file mode 100644 index 869a4116..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js +++ /dev/null @@ -1,75 +0,0 @@ -// 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. - -// verify that the string decoder works getting 1 byte at a time, -// the whole buffer at once, and that both match the .toString(enc) -// result of the entire buffer. - -var assert = require('assert'); -var SD = require('../../').StringDecoder; -var encodings = ['base64', 'hex', 'utf8', 'utf16le', 'ucs2']; - -var bufs = [ '☃💩', 'asdf' ].map(function(b) { - return new Buffer(b); -}); - -// also test just arbitrary bytes from 0-15. -for (var i = 1; i <= 16; i++) { - var bytes = new Array(i).join('.').split('.').map(function(_, j) { - return j + 0x78; - }); - bufs.push(new Buffer(bytes)); -} - -encodings.forEach(testEncoding); - -console.log('ok'); - -function testEncoding(encoding) { - bufs.forEach(function(buf) { - testBuf(encoding, buf); - }); -} - -function testBuf(encoding, buf) { - console.error('# %s', encoding, buf); - - // write one byte at a time. - var s = new SD(encoding); - var res1 = ''; - for (var i = 0; i < buf.length; i++) { - res1 += s.write(buf.slice(i, i + 1)); - } - res1 += s.end(); - - // write the whole buffer at once. - var res2 = ''; - var s = new SD(encoding); - res2 += s.write(buf); - res2 += s.end(); - - // .toString() on the buffer - var res3 = buf.toString(encoding); - - console.log('expect=%j', res3); - assert.equal(res1, res3, 'one byte at a time should match toString'); - assert.equal(res2, res3, 'all bytes at once should match toString'); -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js deleted file mode 100644 index 7f69f7ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js +++ /dev/null @@ -1,163 +0,0 @@ -// 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 common = require('../common'); -var assert = require('assert'); -var StringDecoder = require('../../').StringDecoder; -var decoder = new StringDecoder('utf8'); - - - -var buffer = new Buffer('$'); -assert.deepEqual('$', decoder.write(buffer)); - -buffer = new Buffer('¢'); -assert.deepEqual('', decoder.write(buffer.slice(0, 1))); -assert.deepEqual('¢', decoder.write(buffer.slice(1, 2))); - -buffer = new Buffer('€'); -assert.deepEqual('', decoder.write(buffer.slice(0, 1))); -assert.deepEqual('', decoder.write(buffer.slice(1, 2))); -assert.deepEqual('€', decoder.write(buffer.slice(2, 3))); - -buffer = new Buffer([0xF0, 0xA4, 0xAD, 0xA2]); -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); -s += decoder.write(buffer.slice(2, 3)); -s += decoder.write(buffer.slice(3, 4)); -assert.ok(s.length > 0); - -// CESU-8 -buffer = new Buffer('EDA0BDEDB18D', 'hex'); // THUMBS UP SIGN (in CESU-8) -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); -s += decoder.write(buffer.slice(2, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 4)); -s += decoder.write(buffer.slice(4, 5)); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 2)); -s += decoder.write(buffer.slice(2, 4)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(4, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 4)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(4, 5)); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 5)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 6)); -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - - -// UCS-2 -decoder = new StringDecoder('ucs2'); -buffer = new Buffer('ab', 'ucs2'); -assert.equal(decoder.write(buffer), 'ab'); // 2 complete chars -buffer = new Buffer('abc', 'ucs2'); -assert.equal(decoder.write(buffer.slice(0, 3)), 'a'); // 'a' and first of 'b' -assert.equal(decoder.write(buffer.slice(3, 6)), 'bc'); // second of 'b' and 'c' - - -// UTF-16LE -buffer = new Buffer('3DD84DDC', 'hex'); // THUMBS UP SIGN (in CESU-8) -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(2, 3)); -s += decoder.write(buffer.slice(3, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 2)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(2, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 4)); -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - - -// A mixed ascii and non-ascii string -// Test stolen from deps/v8/test/cctest/test-strings.cc -// U+02E4 -> CB A4 -// U+0064 -> 64 -// U+12E4 -> E1 8B A4 -// U+0030 -> 30 -// U+3045 -> E3 81 85 -var expected = '\u02e4\u0064\u12e4\u0030\u3045'; -var buffer = new Buffer([0xCB, 0xA4, 0x64, 0xE1, 0x8B, 0xA4, - 0x30, 0xE3, 0x81, 0x85]); -var charLengths = [0, 0, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5]; - -// Split the buffer into 3 segments -// |----|------|-------| -// 0 i j buffer.length -// Scan through every possible 3 segment combination -// and make sure that the string is always parsed. -common.print('scanning '); -for (var j = 2; j < buffer.length; j++) { - for (var i = 1; i < j; i++) { - var decoder = new StringDecoder('utf8'); - - var sum = decoder.write(buffer.slice(0, i)); - - // just check that we've received the right amount - // after the first write - assert.equal(charLengths[i], sum.length); - - sum += decoder.write(buffer.slice(i, j)); - sum += decoder.write(buffer.slice(j, buffer.length)); - assert.equal(expected, sum); - common.print('.'); - } -} -console.log(' crayon!'); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/package.json deleted file mode 100644 index c9e268d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "readable-stream", - "version": "1.0.25", - "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\nA new class of streams for Node.js\n\nThis module provides the new Stream base classes introduced in Node\nv0.10, for use in Node v0.8. You can use it to have programs that\nhave to work with node v0.8, while being forward-compatible for v0.10\nand beyond. When you drop support for v0.8, you can remove this\nmodule, and only use the native streams.\n\nThis is almost exactly the same codebase as appears in Node v0.10.\nHowever:\n\n1. The exported object is actually the Readable class. Decorating the\n native `stream` module would be global pollution.\n2. In v0.10, you can safely use `base64` as an argument to\n `setEncoding` in Readable streams. However, in v0.8, the\n StringDecoder class has no `end()` method, which is problematic for\n Base64. So, don't use that, because it'll break and be weird.\n\nOther than that, the API is the same as `require('stream')` in v0.10,\nso the API docs are reproduced below.\n\n----------\n\n Stability: 2 - Unstable\n\nA stream is an abstract interface implemented by various objects in\nNode. For example a request to an HTTP server is a stream, as is\nstdout. Streams are readable, writable, or both. All streams are\ninstances of [EventEmitter][]\n\nYou can load the Stream base classes by doing `require('stream')`.\nThere are base classes provided for Readable streams, Writable\nstreams, Duplex streams, and Transform streams.\n\n## Compatibility\n\nIn earlier versions of Node, the Readable stream interface was\nsimpler, but also less powerful and less useful.\n\n* Rather than waiting for you to call the `read()` method, `'data'`\n events would start emitting immediately. If you needed to do some\n I/O to decide how to handle data, then you had to store the chunks\n in some kind of buffer so that they would not be lost.\n* The `pause()` method was advisory, rather than guaranteed. This\n meant that you still had to be prepared to receive `'data'` events\n even when the stream was in a paused state.\n\nIn Node v0.10, the Readable class described below was added. For\nbackwards compatibility with older Node programs, Readable streams\nswitch into \"old mode\" when a `'data'` event handler is added, or when\nthe `pause()` or `resume()` methods are called. The effect is that,\neven if you are not using the new `read()` method and `'readable'`\nevent, you no longer have to worry about losing `'data'` chunks.\n\nMost programs will continue to function normally. However, this\nintroduces an edge case in the following conditions:\n\n* No `'data'` event handler is added.\n* The `pause()` and `resume()` methods are never called.\n\nFor example, consider the following code:\n\n```javascript\n// WARNING! BROKEN!\nnet.createServer(function(socket) {\n\n // we add an 'end' method, but never consume the data\n socket.on('end', function() {\n // It will never get here.\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n}).listen(1337);\n```\n\nIn versions of node prior to v0.10, the incoming message data would be\nsimply discarded. However, in Node v0.10 and beyond, the socket will\nremain paused forever.\n\nThe workaround in this situation is to call the `resume()` method to\ntrigger \"old mode\" behavior:\n\n```javascript\n// Workaround\nnet.createServer(function(socket) {\n\n socket.on('end', function() {\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n // start the flow of data, discarding it.\n socket.resume();\n\n}).listen(1337);\n```\n\nIn addition to new Readable streams switching into old-mode, pre-v0.10\nstyle streams can be wrapped in a Readable class using the `wrap()`\nmethod.\n\n## Class: stream.Readable\n\n<!--type=class-->\n\nA `Readable Stream` has the following methods, members, and events.\n\nNote that `stream.Readable` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nmethod. (See below.)\n\n### new stream.Readable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} The maximum number of bytes to store in\n the internal buffer before ceasing to read from the underlying\n resource. Default=16kb\n * `encoding` {String} If specified, then buffers will be decoded to\n strings using the specified encoding. Default=null\n * `objectMode` {Boolean} Whether this stream should behave\n as a stream of objects. Meaning that stream.read(n) returns\n a single value instead of a Buffer of size n\n\nIn classes that extend the Readable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### readable.\\_read(size)\n\n* `size` {Number} Number of bytes to read asynchronously\n\nNote: **This function should NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Readable\nclass methods only.\n\nAll Readable stream implementations must provide a `_read` method\nto fetch data from the underlying resource.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\nWhen data is available, put it into the read queue by calling\n`readable.push(chunk)`. If `push` returns false, then you should stop\nreading. When `_read` is called again, you should start pushing more\ndata.\n\nThe `size` argument is advisory. Implementations where a \"read\" is a\nsingle call that returns data can use this to know how much data to\nfetch. Implementations where that is not relevant, such as TCP or\nTLS, may ignore this argument, and simply provide data whenever it\nbecomes available. There is no need, for example to \"wait\" until\n`size` bytes are available before calling `stream.push(chunk)`.\n\n### readable.push(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to push into the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nNote: **This function should be called by Readable implementors, NOT\nby consumers of Readable subclasses.** The `_read()` function will not\nbe called again until at least one `push(chunk)` call is made. If no\ndata is available, then you MAY call `push('')` (an empty string) to\nallow a future `_read` call, without adding any data to the queue.\n\nThe `Readable` class works by putting data into a read queue to be\npulled out later by calling the `read()` method when the `'readable'`\nevent fires.\n\nThe `push()` method will explicitly insert some data into the read\nqueue. If it is called with `null` then it will signal the end of the\ndata.\n\nIn some cases, you may be wrapping a lower-level source which has some\nsort of pause/resume mechanism, and a data callback. In those cases,\nyou could wrap the low-level source object by doing something like\nthis:\n\n```javascript\n// source is an object with readStop() and readStart() methods,\n// and an `ondata` member that gets called when it has data, and\n// an `onend` member that gets called when the data is over.\n\nvar stream = new Readable();\n\nsource.ondata = function(chunk) {\n // if push() returns false, then we need to stop reading from source\n if (!stream.push(chunk))\n source.readStop();\n};\n\nsource.onend = function() {\n stream.push(null);\n};\n\n// _read will be called when the stream wants to pull more data in\n// the advisory size argument is ignored in this case.\nstream._read = function(n) {\n source.readStart();\n};\n```\n\n### readable.unshift(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nThis is the corollary of `readable.push(chunk)`. Rather than putting\nthe data at the *end* of the read queue, it puts it at the *front* of\nthe read queue.\n\nThis is useful in certain use-cases where a stream is being consumed\nby a parser, which needs to \"un-consume\" some data that it has\noptimistically pulled out of the source.\n\n```javascript\n// A parser for a simple data protocol.\n// The \"header\" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// Note: This can be done more simply as a Transform stream. See below.\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Readable.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\nvar parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n### readable.wrap(stream)\n\n* `stream` {Stream} An \"old style\" readable stream\n\nIf you are using an older Node library that emits `'data'` events and\nhas a `pause()` method that is advisory only, then you can use the\n`wrap()` method to create a Readable stream that uses the old stream\nas its data source.\n\nFor example:\n\n```javascript\nvar OldReader = require('./old-api-module.js').OldReader;\nvar oreader = new OldReader;\nvar Readable = require('stream').Readable;\nvar myReader = new Readable().wrap(oreader);\n\nmyReader.on('readable', function() {\n myReader.read(); // etc.\n});\n```\n\n### Event: 'readable'\n\nWhen there is data ready to be consumed, this event will fire.\n\nWhen this event emits, call the `read()` method to consume the data.\n\n### Event: 'end'\n\nEmitted when the stream has received an EOF (FIN in TCP terminology).\nIndicates that no more `'data'` events will happen. If the stream is\nalso writable, it may be possible to continue writing.\n\n### Event: 'data'\n\nThe `'data'` event emits either a `Buffer` (by default) or a string if\n`setEncoding()` was used.\n\nNote that adding a `'data'` event listener will switch the Readable\nstream into \"old mode\", where data is emitted as soon as it is\navailable, rather than waiting for you to call `read()` to consume it.\n\n### Event: 'error'\n\nEmitted if there was an error receiving data.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### readable.setEncoding(encoding)\n\nMakes the `'data'` event emit a string instead of a `Buffer`. `encoding`\ncan be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`.\n\nThe encoding can also be set by specifying an `encoding` field to the\nconstructor.\n\n### readable.read([size])\n\n* `size` {Number | null} Optional number of bytes to read.\n* Return: {Buffer | String | null}\n\nNote: **This function SHOULD be called by Readable stream users.**\n\nCall this method to consume data once the `'readable'` event is\nemitted.\n\nThe `size` argument will set a minimum number of bytes that you are\ninterested in. If not set, then the entire content of the internal\nbuffer is returned.\n\nIf there is no data to consume, or if there are fewer bytes in the\ninternal buffer than the `size` argument, then `null` is returned, and\na future `'readable'` event will be emitted when more is available.\n\nCalling `stream.read(0)` will always return `null`, and will trigger a\nrefresh of the internal buffer, but otherwise be a no-op.\n\n### readable.pipe(destination, [options])\n\n* `destination` {Writable Stream}\n* `options` {Object} Optional\n * `end` {Boolean} Default=true\n\nConnects this readable stream to `destination` WriteStream. Incoming\ndata on this stream gets written to `destination`. Properly manages\nback-pressure so that a slow destination will not be overwhelmed by a\nfast readable stream.\n\nThis function returns the `destination` stream.\n\nFor example, emulating the Unix `cat` command:\n\n process.stdin.pipe(process.stdout);\n\nBy default `end()` is called on the destination when the source stream\nemits `end`, so that `destination` is no longer writable. Pass `{ end:\nfalse }` as `options` to keep the destination stream open.\n\nThis keeps `writer` open so that \"Goodbye\" can be written at the\nend.\n\n reader.pipe(writer, { end: false });\n reader.on(\"end\", function() {\n writer.end(\"Goodbye\\n\");\n });\n\nNote that `process.stderr` and `process.stdout` are never closed until\nthe process exits, regardless of the specified options.\n\n### readable.unpipe([destination])\n\n* `destination` {Writable Stream} Optional\n\nUndo a previously established `pipe()`. If no destination is\nprovided, then all previously established pipes are removed.\n\n### readable.pause()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nCeases the flow of data. No `'data'` events are emitted while the\nstream is in a paused state.\n\n### readable.resume()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nResumes the incoming `'data'` events after a `pause()`.\n\n\n## Class: stream.Writable\n\n<!--type=class-->\n\nA `Writable` Stream has the following methods, members, and events.\n\nNote that `stream.Writable` is an abstract class designed to be\nextended with an underlying implementation of the\n`_write(chunk, encoding, cb)` method. (See below.)\n\n### new stream.Writable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} Buffer level when `write()` starts\n returning false. Default=16kb\n * `decodeStrings` {Boolean} Whether or not to decode strings into\n Buffers before passing them to `_write()`. Default=true\n\nIn classes that extend the Writable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### writable.\\_write(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be written. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. Ignore chunk is a buffer. Note that chunk will\n **always** be a buffer unless the `decodeStrings` option is\n explicitly set to `false`.\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nAll Writable stream implementations must provide a `_write` method to\nsend data to the underlying resource.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Writable\nclass methods only.\n\nCall the callback using the standard `callback(error)` pattern to\nsignal that the write completed successfully or with an error.\n\nIf the `decodeStrings` flag is set in the constructor options, then\n`chunk` may be a string rather than a Buffer, and `encoding` will\nindicate the sort of string that it is. This is to support\nimplementations that have an optimized handling for certain string\ndata encodings. If you do not explicitly set the `decodeStrings`\noption to `false`, then you can safely ignore the `encoding` argument,\nand assume that `chunk` will always be a Buffer.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n\n### writable.write(chunk, [encoding], [callback])\n\n* `chunk` {Buffer | String} Data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when this chunk is\n successfully written.\n* Returns {Boolean}\n\nWrites `chunk` to the stream. Returns `true` if the data has been\nflushed to the underlying resource. Returns `false` to indicate that\nthe buffer is full, and the data will be sent out in the future. The\n`'drain'` event will indicate when the buffer is empty again.\n\nThe specifics of when `write()` will return false, is determined by\nthe `highWaterMark` option provided to the constructor.\n\n### writable.end([chunk], [encoding], [callback])\n\n* `chunk` {Buffer | String} Optional final data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when the final chunk is\n successfully written.\n\nCall this method to signal the end of the data being written to the\nstream.\n\n### Event: 'drain'\n\nEmitted when the stream's write queue empties and it's safe to write\nwithout buffering again. Listen for it when `stream.write()` returns\n`false`.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### Event: 'finish'\n\nWhen `end()` is called and there are no more chunks to write, this\nevent is emitted.\n\n### Event: 'pipe'\n\n* `source` {Readable Stream}\n\nEmitted when the stream is passed to a readable stream's pipe method.\n\n### Event 'unpipe'\n\n* `source` {Readable Stream}\n\nEmitted when a previously established `pipe()` is removed using the\nsource Readable stream's `unpipe()` method.\n\n## Class: stream.Duplex\n\n<!--type=class-->\n\nA \"duplex\" stream is one that is both Readable and Writable, such as a\nTCP socket connection.\n\nNote that `stream.Duplex` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nand `_write(chunk, encoding, callback)` methods as you would with a Readable or\nWritable stream class.\n\nSince JavaScript doesn't have multiple prototypal inheritance, this\nclass prototypally inherits from Readable, and then parasitically from\nWritable. It is thus up to the user to implement both the lowlevel\n`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method\non extension duplex classes.\n\n### new stream.Duplex(options)\n\n* `options` {Object} Passed to both Writable and Readable\n constructors. Also has the following fields:\n * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then\n the stream will automatically end the readable side when the\n writable side ends and vice versa.\n\nIn classes that extend the Duplex class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n## Class: stream.Transform\n\nA \"transform\" stream is a duplex stream where the output is causally\nconnected in some way to the input, such as a zlib stream or a crypto\nstream.\n\nThere is no requirement that the output be the same size as the input,\nthe same number of chunks, or arrive at the same time. For example, a\nHash stream will only ever have a single chunk of output which is\nprovided when the input is ended. A zlib stream will either produce\nmuch smaller or much larger than its input.\n\nRather than implement the `_read()` and `_write()` methods, Transform\nclasses must implement the `_transform()` method, and may optionally\nalso implement the `_flush()` method. (See below.)\n\n### new stream.Transform([options])\n\n* `options` {Object} Passed to both Writable and Readable\n constructors.\n\nIn classes that extend the Transform class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### transform.\\_transform(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be transformed. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. (Ignore if `decodeStrings` chunk is a buffer.)\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Transform\nclass methods only.\n\nAll Transform stream implementations must provide a `_transform`\nmethod to accept input and produce output.\n\n`_transform` should do whatever has to be done in this specific\nTransform class, to handle the bytes being written, and pass them off\nto the readable portion of the interface. Do asynchronous I/O,\nprocess things, and so on.\n\nCall `transform.push(outputChunk)` 0 or more times to generate output\nfrom this input chunk, depending on how much data you want to output\nas a result of this chunk.\n\nCall the callback function only when the current chunk is completely\nconsumed. Note that there may or may not be output as a result of any\nparticular input chunk.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### transform.\\_flush(callback)\n\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done flushing any remaining data.\n\nNote: **This function MUST NOT be called directly.** It MAY be implemented\nby child classes, and if so, will be called by the internal Transform\nclass methods only.\n\nIn some cases, your transform operation may need to emit a bit more\ndata at the end of the stream. For example, a `Zlib` compression\nstream will store up some internal state so that it can optimally\ncompress the output. At the end, however, it needs to do the best it\ncan with what is left, so that the data will be complete.\n\nIn those cases, you can implement a `_flush` method, which will be\ncalled at the very end, after all the written data is consumed, but\nbefore emitting `end` to signal the end of the readable side. Just\nlike with `_transform`, call `transform.push(chunk)` zero or more\ntimes, as appropriate, and call `callback` when the flush operation is\ncomplete.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### Example: `SimpleProtocol` parser\n\nThe example above of a simple protocol parser can be implemented much\nmore simply by using the higher level `Transform` stream class.\n\nIn this example, rather than providing the input as an argument, it\nwould be piped into the parser, which is a more idiomatic Node stream\napproach.\n\n```javascript\nfunction SimpleProtocol(options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Transform.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Transform.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._transform = function(chunk, encoding, done) {\n if (!this._inBody) {\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n\n // now, because we got some extra data, emit this first.\n this.push(b);\n }\n } else {\n // from there on, just provide the data to our consumer as-is.\n this.push(b);\n }\n done();\n};\n\nvar parser = new SimpleProtocol();\nsource.pipe(parser)\n\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n\n## Class: stream.PassThrough\n\nThis is a trivial implementation of a `Transform` stream that simply\npasses the input bytes across to the output. Its purpose is mainly\nfor examples and testing, but there are occasionally use cases where\nit can come in handy.\n\n\n[EventEmitter]: events.html#events_class_events_eventemitter\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.25", - "dist": { - "shasum": "3d234b55fd2a25db8327618f088e50a32044df50" - }, - "_from": "readable-stream@~1.0.17", - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.25.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/passthrough.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/passthrough.js deleted file mode 100644 index 27e8d8a5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/readable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/readable.js deleted file mode 100644 index 4d1ddfc7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,6 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/transform.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/transform.js deleted file mode 100644 index 5d482f07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/writable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/writable.js deleted file mode 100644 index e1e9efdf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/readable-stream/writable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/LICENCE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/LICENCE deleted file mode 100644 index a23e08a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/README.md deleted file mode 100644 index 389adae3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/has-keys.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/has-keys.js deleted file mode 100644 index 62391e78..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/has-keys.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = hasKeys - -function hasKeys(source) { - return source !== null && - (typeof source === "object" || - typeof source === "function") -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/index.js deleted file mode 100644 index 20937d19..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/index.js +++ /dev/null @@ -1,25 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/mutable.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/mutable.js deleted file mode 100644 index 17454ae4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/mutable.js +++ /dev/null @@ -1,25 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml deleted file mode 100644 index 60d00ce1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.8" - - "0.6" diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md deleted file mode 100644 index ab32d0ad..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md +++ /dev/null @@ -1,39 +0,0 @@ -#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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js deleted file mode 100644 index db32d458..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js +++ /dev/null @@ -1,40 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js deleted file mode 100644 index f5b24b6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js +++ /dev/null @@ -1,2 +0,0 @@ -module.exports = Object.keys || require('./shim'); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js deleted file mode 100644 index 74a09897..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js +++ /dev/null @@ -1,16 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json deleted file mode 100644 index 9dfda8dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "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", - "dist": { - "shasum": "28a6aae7428dd2c3a92f3d95f21335dd204e0336" - }, - "_from": "object-keys@~0.4.0", - "_resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js deleted file mode 100644 index b88421be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js +++ /dev/null @@ -1,62 +0,0 @@ -(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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js deleted file mode 100644 index f29f065a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js +++ /dev/null @@ -1,156 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js deleted file mode 100644 index 8b77b1fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js +++ /dev/null @@ -1,6 +0,0 @@ - -require('./foreach'); -require('./isArguments'); - -require('./shim'); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js deleted file mode 100644 index 62a07c2d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js +++ /dev/null @@ -1,10 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js deleted file mode 100644 index 9d932712..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js +++ /dev/null @@ -1,134 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/package.json deleted file mode 100644 index a761197d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "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", - "dist": { - "shasum": "5e8f75d1b0d9ca976fee0f1aa88f80c7619210d5" - }, - "_from": "xtend@~2.1.1", - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/test.js deleted file mode 100644 index 3369d796..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/node_modules/xtend/test.js +++ /dev/null @@ -1,63 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/package.json deleted file mode 100644 index 9612fee2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "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", - "dist": { - "shasum": "48772c8b50c4955c25e7cdbe69f4220f4138178b" - }, - "_from": "through2@~0.4.0", - "_resolved": "https://registry.npmjs.org/through2/-/through2-0.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/basic-test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/basic-test.js deleted file mode 100644 index 9d137c7f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/basic-test.js +++ /dev/null @@ -1,334 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/bench.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/bench.js deleted file mode 100644 index cc10868b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/bench.js +++ /dev/null @@ -1,42 +0,0 @@ -/* -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/sauce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/sauce.js deleted file mode 100644 index a6d28625..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/sauce.js +++ /dev/null @@ -1,38 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/test.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/test.js deleted file mode 100644 index aa9b4877..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/test/test.js +++ /dev/null @@ -1,9 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/through2.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/through2.js deleted file mode 100644 index c1104848..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/node_modules/through2/through2.js +++ /dev/null @@ -1,78 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/package.json deleted file mode 100644 index d289871c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/download/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "download", - "version": "0.1.10", - "description": "Download and extract files effortlessly", - "keywords": [ - "url", - "http", - "download", - "extract" - ], - "homepage": "https://github.com/kevva/download", - "bugs": { - "url": "https://github.com/kevva/download/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/kevva/download.git" - }, - "scripts": { - "test": "mocha --reporter list" - }, - "main": "download.js", - "files": [ - "download.js" - ], - "dependencies": { - "decompress": "~0.1.5", - "each-async": "~0.1.1", - "mkdirp": "~0.3.5", - "request": "~2.31.0", - "through2": "~0.4.0" - }, - "devDependencies": { - "mocha": "~1.17.0", - "nock": "~0.27.1", - "rimraf": "~2.2.5" - }, - "engines": { - "node": ">=0.10.0" - }, - "readme": "# download [![Build Status](https://secure.travis-ci.org/kevva/download.png?branch=master)](http://travis-ci.org/kevva/download)\n\nDownload and extract files effortlessly in Node.js.\n\n## Getting started\n\nInstall with [npm](https://npmjs.org/package/download): `npm install download`\n\n## Examples\n\nIf you're fetching an archive you can set `extract: true` in options and\nit'll extract it for you.\n\n```js\nvar download = require('download');\n\n// download and extract `foo.tar.gz` into `bar/`\ndownload('foo.tar.gz', 'bar', { extract: true });\n\n// download and save `foo.exe` into `bar/foo.exe` with mode `0755`\ndownload('foo.exe', 'bar', { mode: '0755' });\n\n// download and save `foo.zip` into `bar/foobar.zip`\ndownload({ url: 'foo.zip', name: 'foobar.zip' }, 'bar');\n\n// download and save an array of files in `bar/`\nvar files = ['foo.jpg', 'bar.jpg', 'cat.jpg'];\ndownload(files, 'bar');\n\n// download, save and rename an array of files in `bar/`\nvar files = [{\n url: 'foo.jpg',\n name: 'foobar.jpg'\n}, {\n url: 'cat.jpg',\n name: 'dog.jpg'\n}];\ndownload(files, 'bar');\n```\n\n## API\n\n### download(url, dest, opts)\n\nDownload a file or an array of files to a given destination. Returns an EventEmitter \nthat emits the following possible events:\n\n* `response` — Relayed when the underlying `http.ClientRequest` emits the same \nevent. Listeners called with a `http.IncomingMessage` instance.\n* `data` — Relayed when the underlying `http.IncomingMessage` emits the same \nevent. Listeners called with a `Buffer` instance.\n* `error` — Relayed when the underlying `http.ClientRequest` emits the same event \nor when the response status code is not in the 200s. Listeners called with an \n`Error` instance (in the first case) or the response status code.\n* `close` — Relayed when the underlying `stream.Duplex` emits the same event.\n\n## Options\n\nYou can define options accepted by the [request](https://github.com/mikeal/request/) module besides from the options below.\n\n### extract\n\nType: `Boolean` \nDefault: `false`\n\nIf set to `true`, try extracting the file using [decompress](https://github.com/kevva/decompress/).\n\n### mode\n\nType: `String` \nDefault: `undefined`\n\nSet mode on the downloaded files.\n\n### strip\n\nType: `Number` \nDefault: `0`\n\nEquivalent to `--strip-components` for tar.\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com)\n", - "readmeFilename": "README.md", - "_id": "download@0.1.10", - "dist": { - "shasum": "dc5d3ab4a7fc78e374e2de0381273b7b999bc29d" - }, - "_from": "download@~0.1.2", - "_resolved": "https://registry.npmjs.org/download/-/download-0.1.10.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/.npmignore deleted file mode 100644 index 2ccbe465..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules/ diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/.travis.yml deleted file mode 100644 index c1ffcb31..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.8 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/History.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/History.md deleted file mode 100644 index d1fa5334..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/History.md +++ /dev/null @@ -1,20 +0,0 @@ - -0.0.2 / 2013-05-29 -================== - - * Updated github url - * Fix bug calling isbin with list of paths - * Add tests for sync version - * Added travis CI passing image to readme - * Added node engines and keywords - * Added travis CI config - * Added basic readme - * Added basic test suite and Makefile - * Add async version - * Some refactorings using 'some' function - * Fixed issue with wrong paths if called multiple times - -0.0.1 / 2012-12-06 -================== - - * Initial release diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/Makefile deleted file mode 100644 index 1a2444a1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -REPORTER ?= dot - -test: - @NODE_ENV=test ./node_modules/mocha/bin/mocha -R $(REPORTER) - -.PHONY: test diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/README.md deleted file mode 100644 index 5224d614..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/README.md +++ /dev/null @@ -1,59 +0,0 @@ -[![Build Status](https://secure.travis-ci.org/mbehrendt/isbin.png?branch=master)](https://travis-ci.org/mbehrendt/isbin) - -# Isbin - -Tiny little helper library to determine if a certain binary is available within $PATH or any additional folder. - -# Installation - -```bash -$ npm install isbin -``` - -# Usage - -```js -var isbin = require('isbin'); - -// Test against $PATH -isbin('mysql', function(exists) { - console.log(exists); // ==> Boolean -}); - -// With additional path to test -isbin('mysql', '/usr/local/bin', function(exists) { - console.log(exists); // ==> Boolean -}); - -// Or multiple ones -isbin('mysql', ['/usr/local/bin', '/home/me/bins'], function(exists) { - console.log(exists); // ==> Boolean -}); -``` - -There are also synchronous versions available - -```js -var exists = isbin('mysql'); -var exists = isbin('mysql', '/usr/local/bin'); -var exists = isbin('mysql', ['/usr/local/bin', '/home/me/bins']); -``` - -# Running the tests - -```bash -$ npm install -$ make test -``` - -# License - -(The MIT License) - -Copyright (c) 2012 Mario Behrendt info@mario-behrendt.de, Stephan Hoyer <ste.hoyer@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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/index.js deleted file mode 100644 index bb0a047c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/lib/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/lib/index.js deleted file mode 100644 index 1b8a5cac..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/lib/index.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Require dependencies - */ - -var fs = require('fs') - , async = require('async'); - -/** - * Check if given binary exists - * - * @param {String} bin Binary to test - * @param {String|Array} additional Additional paths to check - * @param {Function(result)} isbinChecked Callback when check is done async, optional - * @return {Boolean} True if binary was found - */ - -function isbin(bin, additional, isbinChecked) { - // isbin(bin, cb) - if (!isbinChecked) isbinChecked = additional; - - // Read $PATH to get set up bin folders - var paths = process.env.PATH.split(':') || []; - - // isbin(bin, 'path', cb) - if ('string' === typeof additional) { - paths.push(additional); - } - - // isbin(bin, ['path1', 'path2'], cb) - if ('object' === typeof additional && additional.length !== null) { - paths.concat(additional); - } - - // async check - if ('function' === typeof isbinChecked) { - return async.some(paths, function(path, pathChecked) { - fs.exists(path + '/' + bin, pathChecked); - }, isbinChecked); - } - - // sync check - return paths.reverse().some(function(path) { - return fs.existsSync(path + '/' + bin); - }); -}; - -/** - * Expose module - */ - -module.exports = isbin; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.gitmodules b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.gitmodules deleted file mode 100644 index a9aae984..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.gitmodules +++ /dev/null @@ -1,9 +0,0 @@ -[submodule "deps/nodeunit"] - path = deps/nodeunit - url = git://github.com/caolan/nodeunit.git -[submodule "deps/UglifyJS"] - path = deps/UglifyJS - url = https://github.com/mishoo/UglifyJS.git -[submodule "deps/nodelint"] - path = deps/nodelint - url = https://github.com/tav/nodelint.git diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.npmignore deleted file mode 100644 index 9bdfc97c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -deps -dist -test -nodelint.cfg \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/LICENSE deleted file mode 100644 index b7f9d500..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010 Caolan McMahon - -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/Makefile deleted file mode 100644 index bad647c6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -PACKAGE = asyncjs -NODEJS = $(if $(shell test -f /usr/bin/nodejs && echo "true"),nodejs,node) -CWD := $(shell pwd) -NODEUNIT = $(CWD)/node_modules/nodeunit/bin/nodeunit -UGLIFY = $(CWD)/node_modules/uglify-js/bin/uglifyjs -NODELINT = $(CWD)/node_modules/nodelint/nodelint - -BUILDDIR = dist - -all: clean test build - -build: $(wildcard lib/*.js) - mkdir -p $(BUILDDIR) - $(UGLIFY) lib/async.js > $(BUILDDIR)/async.min.js - -test: - $(NODEUNIT) test - -clean: - rm -rf $(BUILDDIR) - -lint: - $(NODELINT) --config nodelint.cfg lib/async.js - -.PHONY: test build all diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/README.md deleted file mode 100644 index 1bbbc477..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/README.md +++ /dev/null @@ -1,1021 +0,0 @@ -# Async.js - -Async is a utility module which provides straight-forward, powerful functions -for working with asynchronous JavaScript. Although originally designed for -use with [node.js](http://nodejs.org), it can also be used directly in the -browser. - -Async provides around 20 functions that include the usual 'functional' -suspects (map, reduce, filter, forEach…) as well as some common patterns -for asynchronous control flow (parallel, series, waterfall…). All these -functions assume you follow the node.js convention of providing a single -callback as the last argument of your async function. - - -## Quick Examples - - async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file - }); - - async.filter(['file1','file2','file3'], path.exists, function(results){ - // results now equals an array of the existing files - }); - - async.parallel([ - function(){ ... }, - function(){ ... } - ], callback); - - async.series([ - function(){ ... }, - function(){ ... } - ]); - -There are many more functions available so take a look at the docs below for a -full list. This module aims to be comprehensive, so if you feel anything is -missing please create a GitHub issue for it. - - -## Download - -Releases are available for download from -[GitHub](http://github.com/caolan/async/downloads). -Alternatively, you can install using Node Package Manager (npm): - - npm install async - - -__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 17.5kb Uncompressed - -__Production:__ [async.min.js](https://github.com/caolan/async/raw/master/dist/async.min.js) - 1.7kb Packed and Gzipped - - -## In the Browser - -So far its been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage: - - <script type="text/javascript" src="async.js"></script> - <script type="text/javascript"> - - async.map(data, asyncProcess, function(err, results){ - alert(results); - }); - - </script> - - -## Documentation - -### Collections - -* [forEach](#forEach) -* [map](#map) -* [filter](#filter) -* [reject](#reject) -* [reduce](#reduce) -* [detect](#detect) -* [sortBy](#sortBy) -* [some](#some) -* [every](#every) -* [concat](#concat) - -### Control Flow - -* [series](#series) -* [parallel](#parallel) -* [whilst](#whilst) -* [until](#until) -* [waterfall](#waterfall) -* [queue](#queue) -* [auto](#auto) -* [iterator](#iterator) -* [apply](#apply) -* [nextTick](#nextTick) - -### Utils - -* [memoize](#memoize) -* [unmemoize](#unmemoize) -* [log](#log) -* [dir](#dir) -* [noConflict](#noConflict) - - -## Collections - -<a name="forEach" /> -### forEach(arr, iterator, callback) - -Applies an iterator function to each item in an array, in parallel. -The iterator is called with an item from the list and a callback for when it -has finished. If the iterator passes an error to this callback, the main -callback for the forEach function is immediately called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - - // assuming openFiles is an array of file names and saveFile is a function - // to save the modified contents of that file: - - async.forEach(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error - }); - ---------------------------------------- - -<a name="forEachSeries" /> -### forEachSeries(arr, iterator, callback) - -The same as forEach only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. This means the iterator functions will complete in order. - - ---------------------------------------- - -<a name="forEachLimit" /> -### forEachLimit(arr, limit, iterator, callback) - -The same as forEach only the iterator is applied to batches of items in the -array, in series. The next batch of iterators is only called once the current -one has completed processing. - -__Arguments__ - -* arr - An array to iterate over. -* limit - How many items should be in each batch. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - - // Assume documents is an array of JSON objects and requestApi is a - // function that interacts with a rate-limited REST api. - - async.forEachLimit(documents, 20, requestApi, function(err){ - // if any of the saves produced an error, err would equal that error - }); ---------------------------------------- - -<a name="map" /> -### map(arr, iterator, callback) - -Produces a new array of values by mapping each value in the given array through -the iterator function. The iterator is called with an item from the array and a -callback for when it has finished processing. The callback takes 2 arguments, -an error and the transformed item from the array. If the iterator passes an -error to this callback, the main callback for the map function is immediately -called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order, however -the results array will be in the same order as the original array. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed - with an error (which can be null) and a transformed item. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array of the - transformed items from the original array. - -__Example__ - - async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file - }); - ---------------------------------------- - -<a name="mapSeries" /> -### mapSeries(arr, iterator, callback) - -The same as map only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - - ---------------------------------------- - -<a name="filter" /> -### filter(arr, iterator, callback) - -__Alias:__ select - -Returns a new array of all the values which pass an async truth test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like path.exists. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(results) - A callback which is called after all the iterator - functions have finished. - -__Example__ - - async.filter(['file1','file2','file3'], path.exists, function(results){ - // results now equals an array of the existing files - }); - ---------------------------------------- - -<a name="filterSeries" /> -### filterSeries(arr, iterator, callback) - -__alias:__ selectSeries - -The same as filter only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - ---------------------------------------- - -<a name="reject" /> -### reject(arr, iterator, callback) - -The opposite of filter. Removes values that pass an async truth test. - ---------------------------------------- - -<a name="rejectSeries" /> -### rejectSeries(arr, iterator, callback) - -The same as filter, only the iterator is applied to each item in the array -in series. - - ---------------------------------------- - -<a name="reduce" /> -### reduce(arr, memo, iterator, callback) - -__aliases:__ inject, foldl - -Reduces a list of values into a single value using an async iterator to return -each successive step. Memo is the initial state of the reduction. This -function only operates in series. For performance reasons, it may make sense to -split a call to this function into a parallel map, then use the normal -Array.prototype.reduce on the results. This function is for situations where -each step in the reduction needs to be async, if you can get the data before -reducing it then its probably a good idea to do so. - -__Arguments__ - -* arr - An array to iterate over. -* memo - The initial state of the reduction. -* iterator(memo, item, callback) - A function applied to each item in the - array to produce the next step in the reduction. The iterator is passed a - callback which accepts an optional error as its first argument, and the state - of the reduction as the second. If an error is passed to the callback, the - reduction is stopped and the main callback is immediately called with the - error. -* callback(err, result) - A callback which is called after all the iterator - functions have finished. Result is the reduced value. - -__Example__ - - async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); - }, function(err, result){ - // result is now equal to the last value of memo, which is 6 - }); - ---------------------------------------- - -<a name="reduceRight" /> -### reduceRight(arr, memo, iterator, callback) - -__Alias:__ foldr - -Same as reduce, only operates on the items in the array in reverse order. - - ---------------------------------------- - -<a name="detect" /> -### detect(arr, iterator, callback) - -Returns the first value in a list that passes an async truth test. The -iterator is applied in parallel, meaning the first iterator to return true will -fire the detect callback with that result. That means the result might not be -the first item in the original array (in terms of order) that passes the test. - -If order within the original array is important then look at detectSeries. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value undefined if none passed. - -__Example__ - - async.detect(['file1','file2','file3'], path.exists, function(result){ - // result now equals the first file in the list that exists - }); - ---------------------------------------- - -<a name="detectSeries" /> -### detectSeries(arr, iterator, callback) - -The same as detect, only the iterator is applied to each item in the array -in series. This means the result is always the first in the original array (in -terms of array order) that passes the truth test. - - ---------------------------------------- - -<a name="sortBy" /> -### sortBy(arr, iterator, callback) - -Sorts a list by the results of running each value through an async iterator. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed - with an error (which can be null) and a value to use as the sort criteria. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is the items from - the original array sorted by the values returned by the iterator calls. - -__Example__ - - async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); - }, function(err, results){ - // results is now the original array of files sorted by - // modified date - }); - - ---------------------------------------- - -<a name="some" /> -### some(arr, iterator, callback) - -__Alias:__ any - -Returns true if at least one element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like path.exists. Once any iterator -call returns true, the main callback is immediately called. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - either true or false depending on the values of the async tests. - -__Example__ - - async.some(['file1','file2','file3'], path.exists, function(result){ - // if result is true then at least one of the files exists - }); - ---------------------------------------- - -<a name="every" /> -### every(arr, iterator, callback) - -__Alias:__ all - -Returns true if every element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like path.exists. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed. -* callback(result) - A callback which is called after all the iterator - functions have finished. Result will be either true or false depending on - the values of the async tests. - -__Example__ - - async.every(['file1','file2','file3'], path.exists, function(result){ - // if result is true then every file exists - }); - ---------------------------------------- - -<a name="concat" /> -### concat(arr, iterator, callback) - -Applies an iterator to each item in a list, concatenating the results. Returns the -concatenated list. The iterators are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of the arguments passed to the iterator function. - -__Arguments__ - -* arr - An array to iterate over -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback which must be called once it has completed - with an error (which can be null) and an array of results. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array containing - the concatenated results of the iterator function. - -__Example__ - - async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories - }); - ---------------------------------------- - -<a name="concatSeries" /> -### concatSeries(arr, iterator, callback) - -Same as async.concat, but executes in series instead of parallel. - - -## Control Flow - -<a name="series" /> -### series(tasks, [callback]) - -Run an array of functions in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run and the callback for the series is -immediately called with the value of the error. Once the tasks have completed, -the results are passed to the final callback as an array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.series. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback it must call on completion. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets an array of all the arguments passed to - the callbacks used in the array. - -__Example__ - - async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - }, - ], - // optional callback - function(err, results){ - // results is now equal to ['one', 'two'] - }); - - - // an example using an object instead of an array - async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - }, - }, - function(err, results) { - // results is now equal to: {one: 1, two: 2} - }); - - ---------------------------------------- - -<a name="parallel" /> -### parallel(tasks, [callback]) - -Run an array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main callback is immediately called with the value of the error. -Once the tasks have completed, the results are passed to the final callback as an -array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.parallel. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed a - callback it must call on completion. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets an array of all the arguments passed to - the callbacks used in the array. - -__Example__ - - async.parallel([ - function(callback){ - setTimeout(function(){ - callback(null, 'one'); - }, 200); - }, - function(callback){ - setTimeout(function(){ - callback(null, 'two'); - }, 100); - }, - ], - // optional callback - function(err, results){ - // the results array will equal ['one','two'] even though - // the second function had a shorter timeout. - }); - - - // an example using an object instead of an array - async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - }, - }, - function(err, results) { - // results is now equals to: {one: 1, two: 2} - }); - - ---------------------------------------- - -<a name="whilst" /> -### whilst(test, fn, callback) - -Repeatedly call fn, while test returns true. Calls the callback when stopped, -or an error occurs. - -__Arguments__ - -* test() - synchronous truth test to perform before each execution of fn. -* fn(callback) - A function to call each time the test passes. The function is - passed a callback which must be called once it has completed with an optional - error as the first argument. -* callback(err) - A callback which is called after the test fails and repeated - execution of fn has stopped. - -__Example__ - - var count = 0; - - async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } - ); - - ---------------------------------------- - -<a name="until" /> -### until(test, fn, callback) - -Repeatedly call fn, until test returns true. Calls the callback when stopped, -or an error occurs. - -The inverse of async.whilst. - - ---------------------------------------- - -<a name="waterfall" /> -### waterfall(tasks, [callback]) - -Runs an array of functions in series, each passing their results to the next in -the array. However, if any of the functions pass an error to the callback, the -next function is not executed and the main callback is immediately called with -the error. - -__Arguments__ - -* tasks - An array of functions to run, each function is passed a callback it - must call on completion. -* callback(err, [results]) - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - - async.waterfall([ - function(callback){ - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback){ - callback(null, 'three'); - }, - function(arg1, callback){ - // arg1 now equals 'three' - callback(null, 'done'); - } - ], function (err, result) { - // result now equals 'done' - }); - - ---------------------------------------- - -<a name="queue" /> -### queue(worker, concurrency) - -Creates a queue object with the specified concurrency. Tasks added to the -queue will be processed in parallel (up to the concurrency limit). If all -workers are in progress, the task is queued until one is available. Once -a worker has completed a task, the task's callback is called. - -__Arguments__ - -* worker(task, callback) - An asynchronous function for processing a queued - task. -* concurrency - An integer for determining how many worker functions should be - run in parallel. - -__Queue objects__ - -The queue object returned by this function has the following properties and -methods: - -* length() - a function returning the number of items waiting to be processed. -* concurrency - an integer for determining how many worker functions should be - run in parallel. This property can be changed after a queue is created to - alter the concurrency on-the-fly. -* push(task, [callback]) - add a new task to the queue, the callback is called - once the worker has finished processing the task. - instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list. -* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued -* empty - a callback that is called when the last item from the queue is given to a worker -* drain - a callback that is called when the last item from the queue has returned from the worker - -__Example__ - - // create a queue object with concurrency 2 - - var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); - }, 2); - - - // assign a callback - q.drain = function() { - console.log('all items have been processed'); - } - - // add some items to the queue - - q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); - }); - q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); - }); - - // add some items to the queue (batch-wise) - - q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing bar'); - }); - - ---------------------------------------- - -<a name="auto" /> -### auto(tasks, [callback]) - -Determines the best order for running functions based on their requirements. -Each function can optionally depend on other functions being completed first, -and each function is run as soon as its requirements are satisfied. If any of -the functions pass an error to their callback, that function will not complete -(so any other functions depending on it will not run) and the main callback -will be called immediately with the error. Functions also receive an object -containing the results of functions which have completed so far. - -__Arguments__ - -* tasks - An object literal containing named functions or an array of - requirements, with the function itself the last item in the array. The key - used for each function or array is used when specifying requirements. The - syntax is easier to understand by looking at the example. -* callback(err, results) - An optional callback which is called when all the - tasks have been completed. The callback will receive an error as an argument - if any tasks pass an error to their callback. If all tasks complete - successfully, it will receive an object containing their results. - -__Example__ - - async.auto({ - get_data: function(callback){ - // async code to get some data - }, - make_folder: function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - }, - write_file: ['get_data', 'make_folder', function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, filename); - }], - email_link: ['write_file', function(callback, results){ - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - }] - }); - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - - async.parallel([ - function(callback){ - // async code to get some data - }, - function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - } - ], - function(results){ - async.series([ - function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - }, - email_link: function(callback){ - // once the file is written let's email a link to it... - } - ]); - }); - -For a complicated series of async tasks using the auto function makes adding -new tasks much easier and makes the code more readable. - - ---------------------------------------- - -<a name="iterator" /> -### iterator(tasks) - -Creates an iterator function which calls the next function in the array, -returning a continuation to call the next one after that. Its also possible to -'peek' the next iterator by doing iterator.next(). - -This function is used internally by the async module but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* tasks - An array of functions to run, each function is passed a callback it - must call on completion. - -__Example__ - - var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } - ]); - - node> var iterator2 = iterator(); - 'one' - node> var iterator3 = iterator2(); - 'two' - node> iterator3(); - 'three' - node> var nextfn = iterator2.next(); - node> nextfn(); - 'three' - - ---------------------------------------- - -<a name="apply" /> -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied, a useful -shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - - // using apply - - async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), - ]); - - - // the same process without using apply - - async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - }, - ]); - -It's possible to pass any number of additional arguments when calling the -continuation: - - node> var fn = async.apply(sys.puts, 'one'); - node> fn('two', 'three'); - one - two - three - ---------------------------------------- - -<a name="nextTick" /> -### nextTick(callback) - -Calls the callback on a later loop around the event loop. In node.js this just -calls process.nextTick, in the browser it falls back to setTimeout(callback, 0), -which means other higher priority events may precede the execution of the callback. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* callback - The function to call on a later loop around the event loop. - -__Example__ - - var call_order = []; - async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two] - }); - call_order.push('one') - - -## Utils - -<a name="memoize" /> -### memoize(fn, [hasher]) - -Caches the results of an async function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -__Arguments__ - -* fn - the function you to proxy and cache results from. -* hasher - an optional function for generating a custom hash for storing - results, it has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - - var slow_fn = function (name, callback) { - // do something - callback(null, result); - }; - var fn = async.memoize(slow_fn); - - // fn can now be used as if it were slow_fn - fn('some name', function () { - // callback - }); - -<a name="unmemoize" /> -### unmemoize(fn) - -Undoes a memoized function, reverting it to the original, unmemoized -form. Comes handy in tests. - -__Arguments__ - -* fn - the memoized function - -<a name="log" /> -### log(function, arguments) - -Logs the result of an async function to the console. Only works in node.js or -in browsers that support console.log and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.log is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - - var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); - }; - - node> async.log(hello, 'world'); - 'hello world' - - ---------------------------------------- - -<a name="dir" /> -### dir(function, arguments) - -Logs the result of an async function to the console using console.dir to -display the properties of the resulting object. Only works in node.js or -in browsers that support console.dir and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.dir is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - - var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); - }; - - node> async.dir(hello, 'world'); - {hello: 'world'} - - ---------------------------------------- - -<a name="noConflict" /> -### noConflict() - -Changes the value of async back to its original value, returning a reference to the -async object. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/index.js deleted file mode 100644 index 8e238453..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// This file is just added for convenience so this repository can be -// directly checked out into a project's deps folder -module.exports = require('./lib/async'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/lib/async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/lib/async.js deleted file mode 100644 index 7cc4f5ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/lib/async.js +++ /dev/null @@ -1,692 +0,0 @@ -/*global setTimeout: false, console: false */ -(function () { - - var async = {}; - - // global on the server, window in the browser - var root = this, - previous_async = root.async; - - if (typeof module !== 'undefined' && module.exports) { - module.exports = async; - } - else { - root.async = async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - //// cross-browser compatiblity functions //// - - var _forEach = function (arr, iterator) { - if (arr.forEach) { - return arr.forEach(iterator); - } - for (var i = 0; i < arr.length; i += 1) { - iterator(arr[i], i, arr); - } - }; - - var _map = function (arr, iterator) { - if (arr.map) { - return arr.map(iterator); - } - var results = []; - _forEach(arr, function (x, i, a) { - results.push(iterator(x, i, a)); - }); - return results; - }; - - var _reduce = function (arr, iterator, memo) { - if (arr.reduce) { - return arr.reduce(iterator, memo); - } - _forEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - }; - - var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - if (typeof process === 'undefined' || !(process.nextTick)) { - async.nextTick = function (fn) { - setTimeout(fn, 0); - }; - } - else { - async.nextTick = process.nextTick; - } - - async.forEach = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - _forEach(arr, function (x) { - iterator(x, function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed === arr.length) { - callback(null); - } - } - }); - }); - }; - - async.forEachSeries = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - var iterate = function () { - iterator(arr[completed], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed === arr.length) { - callback(null); - } - else { - iterate(); - } - } - }); - }; - iterate(); - }; - - async.forEachLimit = function (arr, limit, iterator, callback) { - callback = callback || function () {}; - if (!arr.length || limit <= 0) { - return callback(); - } - var completed = 0; - var started = 0; - var running = 0; - - (function replenish () { - if (completed === arr.length) { - return callback(); - } - - while (running < limit && started < arr.length) { - started += 1; - running += 1; - iterator(arr[started - 1], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - running -= 1; - if (completed === arr.length) { - callback(); - } - else { - replenish(); - } - } - }); - } - })(); - }; - - - var doParallel = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.forEach].concat(args)); - }; - }; - var doSeries = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.forEachSeries].concat(args)); - }; - }; - - - var _asyncMap = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (err, v) { - results[x.index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - }; - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.reduce = function (arr, memo, iterator, callback) { - async.forEachSeries(arr, function (x, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - // inject alias - async.inject = async.reduce; - // foldl alias - async.foldl = async.reduce; - - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, function (x) { - return x; - }).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - // foldr alias - async.foldr = async.reduceRight; - - var _filter = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.filter = doParallel(_filter); - async.filterSeries = doSeries(_filter); - // select alias - async.select = async.filter; - async.selectSeries = async.filterSeries; - - var _reject = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (!v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.reject = doParallel(_reject); - async.rejectSeries = doSeries(_reject); - - var _detect = function (eachfn, arr, iterator, main_callback) { - eachfn(arr, function (x, callback) { - iterator(x, function (result) { - if (result) { - main_callback(x); - main_callback = function () {}; - } - else { - callback(); - } - }); - }, function (err) { - main_callback(); - }); - }; - async.detect = doParallel(_detect); - async.detectSeries = doSeries(_detect); - - async.some = function (arr, iterator, main_callback) { - async.forEach(arr, function (x, callback) { - iterator(x, function (v) { - if (v) { - main_callback(true); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(false); - }); - }; - // any alias - async.any = async.some; - - async.every = function (arr, iterator, main_callback) { - async.forEach(arr, function (x, callback) { - iterator(x, function (v) { - if (!v) { - main_callback(false); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(true); - }); - }; - // all alias - async.all = async.every; - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - var fn = function (left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }; - callback(null, _map(results.sort(fn), function (x) { - return x.value; - })); - } - }); - }; - - async.auto = function (tasks, callback) { - callback = callback || function () {}; - var keys = _keys(tasks); - if (!keys.length) { - return callback(null); - } - - var results = {}; - - var listeners = []; - var addListener = function (fn) { - listeners.unshift(fn); - }; - var removeListener = function (fn) { - for (var i = 0; i < listeners.length; i += 1) { - if (listeners[i] === fn) { - listeners.splice(i, 1); - return; - } - } - }; - var taskComplete = function () { - _forEach(listeners.slice(0), function (fn) { - fn(); - }); - }; - - addListener(function () { - if (_keys(results).length === keys.length) { - callback(null, results); - callback = function () {}; - } - }); - - _forEach(keys, function (k) { - var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k]; - var taskCallback = function (err) { - if (err) { - callback(err); - // stop subsequent errors hitting callback multiple times - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - taskComplete(); - } - }; - var requires = task.slice(0, Math.abs(task.length - 1)) || []; - var ready = function () { - return _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - }; - if (ready()) { - task[task.length - 1](taskCallback, results); - } - else { - var listener = function () { - if (ready()) { - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - }; - addListener(listener); - } - }); - }; - - async.waterfall = function (tasks, callback) { - callback = callback || function () {}; - if (!tasks.length) { - return callback(); - } - var wrapIterator = function (iterator) { - return function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - async.nextTick(function () { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(async.iterator(tasks))(); - }; - - async.parallel = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.map(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - async.forEach(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.series = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.mapSeries(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - async.forEachSeries(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.iterator = function (tasks) { - var makeCallback = function (index) { - var fn = function () { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - }; - return makeCallback(0); - }; - - async.apply = function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return fn.apply( - null, args.concat(Array.prototype.slice.call(arguments)) - ); - }; - }; - - var _concat = function (eachfn, arr, fn, callback) { - var r = []; - eachfn(arr, function (x, cb) { - fn(x, function (err, y) { - r = r.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, r); - }); - }; - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - if (test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.whilst(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.until = function (test, iterator, callback) { - if (!test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.until(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.queue = function (worker, concurrency) { - var workers = 0; - var q = { - tasks: [], - concurrency: concurrency, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _forEach(data, function(task) { - q.tasks.push({ - data: task, - callback: typeof callback === 'function' ? callback : null - }); - if (q.saturated && q.tasks.length == concurrency) { - q.saturated(); - } - async.nextTick(q.process); - }); - }, - process: function () { - if (workers < q.concurrency && q.tasks.length) { - var task = q.tasks.shift(); - if(q.empty && q.tasks.length == 0) q.empty(); - workers += 1; - worker(task.data, function () { - workers -= 1; - if (task.callback) { - task.callback.apply(task, arguments); - } - if(q.drain && q.tasks.length + workers == 0) q.drain(); - q.process(); - }); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - } - }; - return q; - }; - - var _console_fn = function (name) { - return function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - fn.apply(null, args.concat([function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (typeof console !== 'undefined') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _forEach(args, function (x) { - console[name](x); - }); - } - } - }])); - }; - }; - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - hasher = hasher || function (x) { - return x; - }; - var memoized = function () { - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - var key = hasher.apply(null, args); - if (key in memo) { - callback.apply(null, memo[key]); - } - else if (key in queues) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([function () { - memo[key] = arguments; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, arguments); - } - }])); - } - }; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - -}()); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/package.json deleted file mode 100644 index 31e18559..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/node_modules/async/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "async", - "description": "Higher-order functions and common patterns for asynchronous code", - "main": "./index", - "author": { - "name": "Caolan McMahon" - }, - "version": "0.1.22", - "repository": { - "type": "git", - "url": "http://github.com/caolan/async.git" - }, - "bugs": { - "url": "http://github.com/caolan/async/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/caolan/async/raw/master/LICENSE" - } - ], - "devDependencies": { - "nodeunit": ">0.0.0", - "uglify-js": "1.2.x", - "nodelint": ">0.0.0" - }, - "readme": "# Async.js\n\nAsync is a utility module which provides straight-forward, powerful functions\nfor working with asynchronous JavaScript. Although originally designed for\nuse with [node.js](http://nodejs.org), it can also be used directly in the\nbrowser.\n\nAsync provides around 20 functions that include the usual 'functional'\nsuspects (map, reduce, filter, forEach…) as well as some common patterns\nfor asynchronous control flow (parallel, series, waterfall…). All these\nfunctions assume you follow the node.js convention of providing a single\ncallback as the last argument of your async function.\n\n\n## Quick Examples\n\n async.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n });\n\n async.filter(['file1','file2','file3'], path.exists, function(results){\n // results now equals an array of the existing files\n });\n\n async.parallel([\n function(){ ... },\n function(){ ... }\n ], callback);\n\n async.series([\n function(){ ... },\n function(){ ... }\n ]);\n\nThere are many more functions available so take a look at the docs below for a\nfull list. This module aims to be comprehensive, so if you feel anything is\nmissing please create a GitHub issue for it.\n\n\n## Download\n\nReleases are available for download from\n[GitHub](http://github.com/caolan/async/downloads).\nAlternatively, you can install using Node Package Manager (npm):\n\n npm install async\n\n\n__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 17.5kb Uncompressed\n\n__Production:__ [async.min.js](https://github.com/caolan/async/raw/master/dist/async.min.js) - 1.7kb Packed and Gzipped\n\n\n## In the Browser\n\nSo far its been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage:\n\n <script type=\"text/javascript\" src=\"async.js\"></script>\n <script type=\"text/javascript\">\n\n async.map(data, asyncProcess, function(err, results){\n alert(results);\n });\n\n </script>\n\n\n## Documentation\n\n### Collections\n\n* [forEach](#forEach)\n* [map](#map)\n* [filter](#filter)\n* [reject](#reject)\n* [reduce](#reduce)\n* [detect](#detect)\n* [sortBy](#sortBy)\n* [some](#some)\n* [every](#every)\n* [concat](#concat)\n\n### Control Flow\n\n* [series](#series)\n* [parallel](#parallel)\n* [whilst](#whilst)\n* [until](#until)\n* [waterfall](#waterfall)\n* [queue](#queue)\n* [auto](#auto)\n* [iterator](#iterator)\n* [apply](#apply)\n* [nextTick](#nextTick)\n\n### Utils\n\n* [memoize](#memoize)\n* [unmemoize](#unmemoize)\n* [log](#log)\n* [dir](#dir)\n* [noConflict](#noConflict)\n\n\n## Collections\n\n<a name=\"forEach\" />\n### forEach(arr, iterator, callback)\n\nApplies an iterator function to each item in an array, in parallel.\nThe iterator is called with an item from the list and a callback for when it\nhas finished. If the iterator passes an error to this callback, the main\ncallback for the forEach function is immediately called with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n // assuming openFiles is an array of file names and saveFile is a function\n // to save the modified contents of that file:\n\n async.forEach(openFiles, saveFile, function(err){\n // if any of the saves produced an error, err would equal that error\n });\n\n---------------------------------------\n\n<a name=\"forEachSeries\" />\n### forEachSeries(arr, iterator, callback)\n\nThe same as forEach only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. This means the iterator functions will complete in order.\n\n\n---------------------------------------\n\n<a name=\"forEachLimit\" />\n### forEachLimit(arr, limit, iterator, callback)\n\nThe same as forEach only the iterator is applied to batches of items in the\narray, in series. The next batch of iterators is only called once the current\none has completed processing.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - How many items should be in each batch.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n // Assume documents is an array of JSON objects and requestApi is a\n // function that interacts with a rate-limited REST api.\n\n async.forEachLimit(documents, 20, requestApi, function(err){\n // if any of the saves produced an error, err would equal that error\n });\n---------------------------------------\n\n<a name=\"map\" />\n### map(arr, iterator, callback)\n\nProduces a new array of values by mapping each value in the given array through\nthe iterator function. The iterator is called with an item from the array and a\ncallback for when it has finished processing. The callback takes 2 arguments, \nan error and the transformed item from the array. If the iterator passes an\nerror to this callback, the main callback for the map function is immediately\ncalled with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order, however\nthe results array will be in the same order as the original array.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed\n with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n async.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n });\n\n---------------------------------------\n\n<a name=\"mapSeries\" />\n### mapSeries(arr, iterator, callback)\n\nThe same as map only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n---------------------------------------\n\n<a name=\"filter\" />\n### filter(arr, iterator, callback)\n\n__Alias:__ select\n\nReturns a new array of all the values which pass an async truth test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists. This operation is\nperformed in parallel, but the results array will be in the same order as the\noriginal.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(results) - A callback which is called after all the iterator\n functions have finished.\n\n__Example__\n\n async.filter(['file1','file2','file3'], path.exists, function(results){\n // results now equals an array of the existing files\n });\n\n---------------------------------------\n\n<a name=\"filterSeries\" />\n### filterSeries(arr, iterator, callback)\n\n__alias:__ selectSeries\n\nThe same as filter only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n---------------------------------------\n\n<a name=\"reject\" />\n### reject(arr, iterator, callback)\n\nThe opposite of filter. Removes values that pass an async truth test.\n\n---------------------------------------\n\n<a name=\"rejectSeries\" />\n### rejectSeries(arr, iterator, callback)\n\nThe same as filter, only the iterator is applied to each item in the array\nin series.\n\n\n---------------------------------------\n\n<a name=\"reduce\" />\n### reduce(arr, memo, iterator, callback)\n\n__aliases:__ inject, foldl\n\nReduces a list of values into a single value using an async iterator to return\neach successive step. Memo is the initial state of the reduction. This\nfunction only operates in series. For performance reasons, it may make sense to\nsplit a call to this function into a parallel map, then use the normal\nArray.prototype.reduce on the results. This function is for situations where\neach step in the reduction needs to be async, if you can get the data before\nreducing it then its probably a good idea to do so.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* memo - The initial state of the reduction.\n* iterator(memo, item, callback) - A function applied to each item in the\n array to produce the next step in the reduction. The iterator is passed a\n callback which accepts an optional error as its first argument, and the state\n of the reduction as the second. If an error is passed to the callback, the\n reduction is stopped and the main callback is immediately called with the\n error.\n* callback(err, result) - A callback which is called after all the iterator\n functions have finished. Result is the reduced value.\n\n__Example__\n\n async.reduce([1,2,3], 0, function(memo, item, callback){\n // pointless async:\n process.nextTick(function(){\n callback(null, memo + item)\n });\n }, function(err, result){\n // result is now equal to the last value of memo, which is 6\n });\n\n---------------------------------------\n\n<a name=\"reduceRight\" />\n### reduceRight(arr, memo, iterator, callback)\n\n__Alias:__ foldr\n\nSame as reduce, only operates on the items in the array in reverse order.\n\n\n---------------------------------------\n\n<a name=\"detect\" />\n### detect(arr, iterator, callback)\n\nReturns the first value in a list that passes an async truth test. The\niterator is applied in parallel, meaning the first iterator to return true will\nfire the detect callback with that result. That means the result might not be\nthe first item in the original array (in terms of order) that passes the test.\n\nIf order within the original array is important then look at detectSeries.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n the first item in the array that passes the truth test (iterator) or the\n value undefined if none passed.\n\n__Example__\n\n async.detect(['file1','file2','file3'], path.exists, function(result){\n // result now equals the first file in the list that exists\n });\n\n---------------------------------------\n\n<a name=\"detectSeries\" />\n### detectSeries(arr, iterator, callback)\n\nThe same as detect, only the iterator is applied to each item in the array\nin series. This means the result is always the first in the original array (in\nterms of array order) that passes the truth test.\n\n\n---------------------------------------\n\n<a name=\"sortBy\" />\n### sortBy(arr, iterator, callback)\n\nSorts a list by the results of running each value through an async iterator.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed\n with an error (which can be null) and a value to use as the sort criteria.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is the items from\n the original array sorted by the values returned by the iterator calls.\n\n__Example__\n\n async.sortBy(['file1','file2','file3'], function(file, callback){\n fs.stat(file, function(err, stats){\n callback(err, stats.mtime);\n });\n }, function(err, results){\n // results is now the original array of files sorted by\n // modified date\n });\n\n\n---------------------------------------\n\n<a name=\"some\" />\n### some(arr, iterator, callback)\n\n__Alias:__ any\n\nReturns true if at least one element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists. Once any iterator\ncall returns true, the main callback is immediately called.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n either true or false depending on the values of the async tests.\n\n__Example__\n\n async.some(['file1','file2','file3'], path.exists, function(result){\n // if result is true then at least one of the files exists\n });\n\n---------------------------------------\n\n<a name=\"every\" />\n### every(arr, iterator, callback)\n\n__Alias:__ all\n\nReturns true if every element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed.\n* callback(result) - A callback which is called after all the iterator\n functions have finished. Result will be either true or false depending on\n the values of the async tests.\n\n__Example__\n\n async.every(['file1','file2','file3'], path.exists, function(result){\n // if result is true then every file exists\n });\n\n---------------------------------------\n\n<a name=\"concat\" />\n### concat(arr, iterator, callback)\n\nApplies an iterator to each item in a list, concatenating the results. Returns the\nconcatenated list. The iterators are called in parallel, and the results are\nconcatenated as they return. There is no guarantee that the results array will\nbe returned in the original order of the arguments passed to the iterator function.\n\n__Arguments__\n\n* arr - An array to iterate over\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback which must be called once it has completed\n with an error (which can be null) and an array of results.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array containing\n the concatenated results of the iterator function.\n\n__Example__\n\n async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){\n // files is now a list of filenames that exist in the 3 directories\n });\n\n---------------------------------------\n\n<a name=\"concatSeries\" />\n### concatSeries(arr, iterator, callback)\n\nSame as async.concat, but executes in series instead of parallel.\n\n\n## Control Flow\n\n<a name=\"series\" />\n### series(tasks, [callback])\n\nRun an array of functions in series, each one running once the previous\nfunction has completed. If any functions in the series pass an error to its\ncallback, no more functions are run and the callback for the series is\nimmediately called with the value of the error. Once the tasks have completed,\nthe results are passed to the final callback as an array.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.series.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed\n a callback it must call on completion.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets an array of all the arguments passed to\n the callbacks used in the array.\n\n__Example__\n\n async.series([\n function(callback){\n // do some stuff ...\n callback(null, 'one');\n },\n function(callback){\n // do some more stuff ...\n callback(null, 'two');\n },\n ],\n // optional callback\n function(err, results){\n // results is now equal to ['one', 'two']\n });\n\n\n // an example using an object instead of an array\n async.series({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n },\n },\n function(err, results) {\n // results is now equal to: {one: 1, two: 2}\n });\n\n\n---------------------------------------\n\n<a name=\"parallel\" />\n### parallel(tasks, [callback])\n\nRun an array of functions in parallel, without waiting until the previous\nfunction has completed. If any of the functions pass an error to its\ncallback, the main callback is immediately called with the value of the error.\nOnce the tasks have completed, the results are passed to the final callback as an\narray.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.parallel.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed a\n callback it must call on completion.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets an array of all the arguments passed to\n the callbacks used in the array.\n\n__Example__\n\n async.parallel([\n function(callback){\n setTimeout(function(){\n callback(null, 'one');\n }, 200);\n },\n function(callback){\n setTimeout(function(){\n callback(null, 'two');\n }, 100);\n },\n ],\n // optional callback\n function(err, results){\n // the results array will equal ['one','two'] even though\n // the second function had a shorter timeout.\n });\n\n\n // an example using an object instead of an array\n async.parallel({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n },\n },\n function(err, results) {\n // results is now equals to: {one: 1, two: 2}\n });\n\n\n---------------------------------------\n\n<a name=\"whilst\" />\n### whilst(test, fn, callback)\n\nRepeatedly call fn, while test returns true. Calls the callback when stopped,\nor an error occurs.\n\n__Arguments__\n\n* test() - synchronous truth test to perform before each execution of fn.\n* fn(callback) - A function to call each time the test passes. The function is\n passed a callback which must be called once it has completed with an optional\n error as the first argument.\n* callback(err) - A callback which is called after the test fails and repeated\n execution of fn has stopped.\n\n__Example__\n\n var count = 0;\n\n async.whilst(\n function () { return count < 5; },\n function (callback) {\n count++;\n setTimeout(callback, 1000);\n },\n function (err) {\n // 5 seconds have passed\n }\n );\n\n\n---------------------------------------\n\n<a name=\"until\" />\n### until(test, fn, callback)\n\nRepeatedly call fn, until test returns true. Calls the callback when stopped,\nor an error occurs.\n\nThe inverse of async.whilst.\n\n\n---------------------------------------\n\n<a name=\"waterfall\" />\n### waterfall(tasks, [callback])\n\nRuns an array of functions in series, each passing their results to the next in\nthe array. However, if any of the functions pass an error to the callback, the\nnext function is not executed and the main callback is immediately called with\nthe error.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a callback it\n must call on completion.\n* callback(err, [results]) - An optional callback to run once all the functions\n have completed. This will be passed the results of the last task's callback.\n\n\n\n__Example__\n\n async.waterfall([\n function(callback){\n callback(null, 'one', 'two');\n },\n function(arg1, arg2, callback){\n callback(null, 'three');\n },\n function(arg1, callback){\n // arg1 now equals 'three'\n callback(null, 'done');\n }\n ], function (err, result) {\n // result now equals 'done' \n });\n\n\n---------------------------------------\n\n<a name=\"queue\" />\n### queue(worker, concurrency)\n\nCreates a queue object with the specified concurrency. Tasks added to the\nqueue will be processed in parallel (up to the concurrency limit). If all\nworkers are in progress, the task is queued until one is available. Once\na worker has completed a task, the task's callback is called.\n\n__Arguments__\n\n* worker(task, callback) - An asynchronous function for processing a queued\n task.\n* concurrency - An integer for determining how many worker functions should be\n run in parallel.\n\n__Queue objects__\n\nThe queue object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* concurrency - an integer for determining how many worker functions should be\n run in parallel. This property can be changed after a queue is created to\n alter the concurrency on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n // create a queue object with concurrency 2\n\n var q = async.queue(function (task, callback) {\n console.log('hello ' + task.name);\n callback();\n }, 2);\n\n\n // assign a callback\n q.drain = function() {\n console.log('all items have been processed');\n }\n\n // add some items to the queue\n\n q.push({name: 'foo'}, function (err) {\n console.log('finished processing foo');\n });\n q.push({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n });\n\n // add some items to the queue (batch-wise)\n\n q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) {\n console.log('finished processing bar');\n });\n\n\n---------------------------------------\n\n<a name=\"auto\" />\n### auto(tasks, [callback])\n\nDetermines the best order for running functions based on their requirements.\nEach function can optionally depend on other functions being completed first,\nand each function is run as soon as its requirements are satisfied. If any of\nthe functions pass an error to their callback, that function will not complete\n(so any other functions depending on it will not run) and the main callback\nwill be called immediately with the error. Functions also receive an object\ncontaining the results of functions which have completed so far.\n\n__Arguments__\n\n* tasks - An object literal containing named functions or an array of\n requirements, with the function itself the last item in the array. The key\n used for each function or array is used when specifying requirements. The\n syntax is easier to understand by looking at the example.\n* callback(err, results) - An optional callback which is called when all the\n tasks have been completed. The callback will receive an error as an argument\n if any tasks pass an error to their callback. If all tasks complete\n successfully, it will receive an object containing their results.\n\n__Example__\n\n async.auto({\n get_data: function(callback){\n // async code to get some data\n },\n make_folder: function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n },\n write_file: ['get_data', 'make_folder', function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n callback(null, filename);\n }],\n email_link: ['write_file', function(callback, results){\n // once the file is written let's email a link to it...\n // results.write_file contains the filename returned by write_file.\n }]\n });\n\nThis is a fairly trivial example, but to do this using the basic parallel and\nseries functions would look like this:\n\n async.parallel([\n function(callback){\n // async code to get some data\n },\n function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n }\n ],\n function(results){\n async.series([\n function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n },\n email_link: function(callback){\n // once the file is written let's email a link to it...\n }\n ]);\n });\n\nFor a complicated series of async tasks using the auto function makes adding\nnew tasks much easier and makes the code more readable.\n\n\n---------------------------------------\n\n<a name=\"iterator\" />\n### iterator(tasks)\n\nCreates an iterator function which calls the next function in the array,\nreturning a continuation to call the next one after that. Its also possible to\n'peek' the next iterator by doing iterator.next().\n\nThis function is used internally by the async module but can be useful when\nyou want to manually control the flow of functions in series.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a callback it\n must call on completion.\n\n__Example__\n\n var iterator = async.iterator([\n function(){ sys.p('one'); },\n function(){ sys.p('two'); },\n function(){ sys.p('three'); }\n ]);\n\n node> var iterator2 = iterator();\n 'one'\n node> var iterator3 = iterator2();\n 'two'\n node> iterator3();\n 'three'\n node> var nextfn = iterator2.next();\n node> nextfn();\n 'three'\n\n\n---------------------------------------\n\n<a name=\"apply\" />\n### apply(function, arguments..)\n\nCreates a continuation function with some arguments already applied, a useful\nshorthand when combined with other control flow functions. Any arguments\npassed to the returned function are added to the arguments originally passed\nto apply.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to automatically apply when the\n continuation is called.\n\n__Example__\n\n // using apply\n\n async.parallel([\n async.apply(fs.writeFile, 'testfile1', 'test1'),\n async.apply(fs.writeFile, 'testfile2', 'test2'),\n ]);\n\n\n // the same process without using apply\n\n async.parallel([\n function(callback){\n fs.writeFile('testfile1', 'test1', callback);\n },\n function(callback){\n fs.writeFile('testfile2', 'test2', callback);\n },\n ]);\n\nIt's possible to pass any number of additional arguments when calling the\ncontinuation:\n\n node> var fn = async.apply(sys.puts, 'one');\n node> fn('two', 'three');\n one\n two\n three\n\n---------------------------------------\n\n<a name=\"nextTick\" />\n### nextTick(callback)\n\nCalls the callback on a later loop around the event loop. In node.js this just\ncalls process.nextTick, in the browser it falls back to setTimeout(callback, 0),\nwhich means other higher priority events may precede the execution of the callback.\n\nThis is used internally for browser-compatibility purposes.\n\n__Arguments__\n\n* callback - The function to call on a later loop around the event loop.\n\n__Example__\n\n var call_order = [];\n async.nextTick(function(){\n call_order.push('two');\n // call_order now equals ['one','two]\n });\n call_order.push('one')\n\n\n## Utils\n\n<a name=\"memoize\" />\n### memoize(fn, [hasher])\n\nCaches the results of an async function. When creating a hash to store function\nresults against, the callback is omitted from the hash and an optional hash\nfunction can be used.\n\n__Arguments__\n\n* fn - the function you to proxy and cache results from.\n* hasher - an optional function for generating a custom hash for storing\n results, it has all the arguments applied to it apart from the callback, and\n must be synchronous.\n\n__Example__\n\n var slow_fn = function (name, callback) {\n // do something\n callback(null, result);\n };\n var fn = async.memoize(slow_fn);\n\n // fn can now be used as if it were slow_fn\n fn('some name', function () {\n // callback\n });\n\n<a name=\"unmemoize\" />\n### unmemoize(fn)\n\nUndoes a memoized function, reverting it to the original, unmemoized\nform. Comes handy in tests.\n\n__Arguments__\n\n* fn - the memoized function\n\n<a name=\"log\" />\n### log(function, arguments)\n\nLogs the result of an async function to the console. Only works in node.js or\nin browsers that support console.log and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.log is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n var hello = function(name, callback){\n setTimeout(function(){\n callback(null, 'hello ' + name);\n }, 1000);\n };\n\n node> async.log(hello, 'world');\n 'hello world'\n\n\n---------------------------------------\n\n<a name=\"dir\" />\n### dir(function, arguments)\n\nLogs the result of an async function to the console using console.dir to\ndisplay the properties of the resulting object. Only works in node.js or\nin browsers that support console.dir and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.dir is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n var hello = function(name, callback){\n setTimeout(function(){\n callback(null, {hello: name});\n }, 1000);\n };\n\n node> async.dir(hello, 'world');\n {hello: 'world'}\n\n\n---------------------------------------\n\n<a name=\"noConflict\" />\n### noConflict()\n\nChanges the value of async back to its original value, returning a reference to the\nasync object.\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/caolan/async", - "_id": "async@0.1.22", - "dist": { - "shasum": "3b270eedc0419d6f92a664444ce98e0f59a8fef7" - }, - "_from": "async@0.1.22", - "_resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/package.json deleted file mode 100644 index 1d8c8459..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "isbin", - "version": "0.0.2", - "description": "Checks for available binaries on unix machines", - "main": "index.js", - "engines": { - "node": ">= 0.8.0" - }, - "keywords": [ - "fs", - "bin", - "binary", - "exists", - "check", - "path" - ], - "scripts": { - "test": "make test" - }, - "repository": { - "type": "git", - "url": "git://github.com/behrendtio/isbin.git" - }, - "author": "", - "license": "MIT", - "dependencies": { - "async": "0.1.22" - }, - "devDependencies": { - "mocha": "1.7.3", - "should": "1.2.1" - }, - "readme": "[![Build Status](https://secure.travis-ci.org/mbehrendt/isbin.png?branch=master)](https://travis-ci.org/mbehrendt/isbin)\n\n# Isbin\n\nTiny little helper library to determine if a certain binary is available within $PATH or any additional folder.\n\n# Installation\n\n```bash\n$ npm install isbin\n```\n\n# Usage\n\n```js\nvar isbin = require('isbin');\n\n// Test against $PATH\nisbin('mysql', function(exists) {\n console.log(exists); // ==> Boolean\n});\n\n// With additional path to test\nisbin('mysql', '/usr/local/bin', function(exists) {\n console.log(exists); // ==> Boolean\n});\n\n// Or multiple ones\nisbin('mysql', ['/usr/local/bin', '/home/me/bins'], function(exists) {\n console.log(exists); // ==> Boolean\n});\n```\n\nThere are also synchronous versions available\n\n```js\nvar exists = isbin('mysql');\nvar exists = isbin('mysql', '/usr/local/bin');\nvar exists = isbin('mysql', ['/usr/local/bin', '/home/me/bins']);\n```\n\n# Running the tests\n\n```bash\n$ npm install\n$ make test\n```\n\n# License\n\n(The MIT License)\n\nCopyright (c) 2012 Mario Behrendt info@mario-behrendt.de, Stephan Hoyer <ste.hoyer@gmail.com>\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/behrendtio/isbin/issues" - }, - "homepage": "https://github.com/behrendtio/isbin", - "_id": "isbin@0.0.2", - "dist": { - "shasum": "2a35fb234ad5ee30f78da61b57e8f42ac43ec5a4" - }, - "_from": "isbin@0.0.2", - "_resolved": "https://registry.npmjs.org/isbin/-/isbin-0.0.2.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/test/isbin.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/test/isbin.js deleted file mode 100644 index 068a38a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/test/isbin.js +++ /dev/null @@ -1,39 +0,0 @@ -var isbin = require('../'); - -describe('isbin', function() { - it('accepts binary, additional path and callback', function(done) { - isbin('ls', '/etc', function(exists) { - exists.should.be.a('boolean'); - done(); - }) - }); - - it('accepts array of paths', function(done) { - isbin('ls', ['/etc', '/home'], function(exists) { - exists.should.be.a('boolean'); - done(); - }); - }); - - it('accepts just binary and callback', function(done) { - isbin('ls', function(exists) { - exists.should.be.a('boolean'); - done(); - }); - }); - - it('accepts binary, additional path and callback', function() { - var exists = isbin('ls', '/etc'); - exists.should.be.a('boolean'); - }); - - it('accepts array of paths', function() { - var exists = isbin('ls', ['/etc', '/home']); - exists.should.be.a('boolean'); - }); - - it('accepts just binary', function() { - var exists = isbin('ls'); - exists.should.be.a('boolean'); - }); -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/test/mocha.opts b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/test/mocha.opts deleted file mode 100644 index e5eb9f87..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/isbin/test/mocha.opts +++ /dev/null @@ -1,4 +0,0 @@ ---require should ---bail ---ui bdd ---slow 100 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.editorconfig b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.editorconfig deleted file mode 100644 index e036e247..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -; EditorConfig is awesome: http://EditorConfig.org - -; top-most EditorConfig file -root = true - -; base rules -[*] -end_of_line = lf -insert_final_newline = false -indent_style = space -indent_size = 4 -charset = utf-8 -trim_trailing_whitespace = true - -; The default indent on package.json is 2 spaces, better to keep it so we can -; use `npm install --save` and other features that rewrites the package.json -; file automatically -[package.json] -indent_style = space -indent_size = 2 diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.jshintrc b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.jshintrc deleted file mode 100644 index bbdb29cf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.jshintrc +++ /dev/null @@ -1,69 +0,0 @@ -{ - // Settings - "passfail" : false, // Stop on first error. - "maxerr" : 50, // Maximum error before stopping. - - - // Predefined globals whom JSHint will ignore. - "browser" : true, // Standard browser globals e.g. `window`, `document`. - "couch" : false, - "dojo" : false, - "jquery" : true, - "mootools" : false, - "node" : false, - "prototypejs" : false, - "rhino" : false, - "wsh" : false, - - // Custom globals. - "predef" : [ - "define", - "require" - ], - - - // Development. - "debug" : false, // Allow debugger statements e.g. browser breakpoints. - "devel" : false, // Allow developments statements e.g. `console.log();`. - - - // EcmaScript 5. - "es5" : false, // Allow EcmaScript 5 syntax. - "globalstrict" : false, // Allow global "use strict" (also enables 'strict'). - "strict" : false, // Require `use strict` pragma in every file. - - - // The Good Parts. - "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons). - "bitwise" : false, // Prohibit bitwise operators (&, |, ^, etc.). - "boss" : true, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. - "curly" : false, // Require {} for every new block or scope. - "eqeqeq" : true, // Require triple equals i.e. `===`. - "eqnull" : true, // Tolerate use of `== null`. - "evil" : false, // Tolerate use of `eval`. - "expr" : false, // Tolerate `ExpressionStatement` as Programs. - "forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`. - "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` - "latedef" : false, // Prohibit variable use before definition. - "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. - "loopfunc" : false, // Allow functions to be defined within loops. - "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. - "regexdash" : true, // Tolerate unescaped last dash i.e. `[-...]`. - "regexp" : false, // Prohibit `.` and `[^...]` in regular expressions. - "scripturl" : false, // Tolerate script-targeted URLs. - "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. - "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. - "undef" : false, // Require all non-global variables be declared before they are used. - - - // Personal styling prefrences. - "newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`. - "noempty" : true, // Prohipit use of empty blocks. - "nomen" : false, // Prohibit use of initial or trailing underbars in names. - "nonew" : true, // Prohibit use of constructors for side-effects. - "onevar" : false, // Allow only one `var` statement per function. - "plusplus" : false, // Prohibit use of `++` & `--`. - "sub" : false, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. - "trailing" : true, // Prohibit trailing whitespaces. - "white" : false // Check against strict whitespace and indentation rules. -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.npmignore deleted file mode 100644 index 1341acd9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.npmignore +++ /dev/null @@ -1,30 +0,0 @@ -# dumb files -# ========== - -.tmp* -.project -.settings/ -.livereload -.DS_Store? -ehthumbs.db -Icon? -Thumbs.db - - -# stuff not needed by node -# ======================== - -node_modules/ -tests/ -_build/ -doc_html/ -coverage/ - -# we keep the doc/ folder in case npm decides to display it in the future -# also good in case user is using an old version or working offline - -# we also keep the src/ folder in case the user still needs the AMD modules -# after build (see issue #102) - -bower.json -build.js diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.travis.yml b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.travis.yml deleted file mode 100644 index 36de1532..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ - language: node_js - node_js: - - "0.8" - script: "npm test --coverage" - notifications: - irc: - channels: - - "irc.freenode.org#moutjs" - on_success: always - on_failure: always - use_notice: true - skip_join: true - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/CHANGELOG.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/CHANGELOG.md deleted file mode 100644 index 0f5eac12..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/CHANGELOG.md +++ /dev/null @@ -1,93 +0,0 @@ -mout changelog -============== - -v0.6.0 (2013/05/22) -------------------- - - - add optional delimeter to `string/unCamelCase` - - allow custom char on `number/pad` - - allow underscore characters in `string/removeNonWord` - - accept `level` on `array/flatten` instead of a flag - - convert underscores to camelCase in `string/camelCase` - - remove `create()` from number/currencyFormat - - add `date/dayOfTheYear` - - add `date/diff` - - add `date/isSame` - - add `date/startOf` - - add `date/strftime` - - add `date/timezoneAbbr` - - add `date/timezoneOffset` - - add `date/totalDaysInYear` - - add `date/weekOfTheYear` - - add `function/timeout` - - add `object/bindAll` - - add `object/functions` - - add `time/convert` - - -v0.5.0 (2013/04/04) -------------------- - - - add `array/collect` - - add `callback` parameter to `object/equals` and `object/deepEquals` to allow - custom compare operations. - - normalize behavior in `array/*` methods to treat `null` values as empty - arrays when reading from array - - add `date/parseIso` - - add `date/isLeapYear` - - add `date/totalDaysInMonth` - - add `object/deepMatches` - - change `function/makeIterator_` to use `deepMatches` (affects nearly all - iteration methods) - - add `thisObj` parameter to `array/min` and `array/max` - - -v0.4.0 (2013/02/26) -------------------- - - - add `object/equals` - - add `object/deepEquals` - - add `object/matches`. - - add `lang/is` and `lang/isnt`. - - add `lang/isInteger`. - - add `array/findIndex`. - - add shorthand syntax to `array/*`, `object/*` and `collection/*` methods. - - improve `number/sign` behavior when value is NaN or +0 or -0. - - improve `lang/isNaN` to actually check if value *is not a number* without - coercing value; so `[]`, `""`, `null` and `"12"` are considered NaN (#39). - - improve `string/contains` to match ES6 behavior (add fromIndex argument). - - -v0.3.0 (2013/02/01) -------------------- - - - add `lang/clone`. - - add `lang/toString`. - - add `string/replace`. - - add `string/WHITE_SPACES` - - rename `function/curry` to `function/partial`. - - allow custom chars in `string/trim`, `ltrim`, and `rtrim`. - - convert values to strings in the `string/*` functions. - - -v0.2.0 (2013/01/13) -------------------- - - - fix bug in `math/ceil` for negative radixes. - - change `object/deepFillIn` and `object/deepMixIn` to recurse only if both - existing and new values are plain objects. Will not recurse into arrays - or objects not created by the Object constructor. - - add `lang/isPlainObject` to check if a file is a valid object and is created - by the Object constructor - - change `lang/clone` behavior when dealing with custom types (avoid cloning - it by default) and add second argument to allow custom behavior if needed. - - rename `lang/clone` to `lang/deepClone`. - - add VERSION property to index.js - - simplify `math/floor`, `math/round`, `math/ceil` and `math/countSteps`. - - -v0.1.0 (2013/01/09) -------------------- - -- Rename project from "amd-utils" to "mout" - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/CONTRIBUTING.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/CONTRIBUTING.md deleted file mode 100644 index 65d9add1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/CONTRIBUTING.md +++ /dev/null @@ -1,61 +0,0 @@ -# Contributing - -Fork the repo at https://github.com/mout/mout - - > "Write clearly, don't be too clever" - The Elements of Programming Style - -Avoid unnamed functions and follow the other modules structure. By only using named functions it will be easier to extract the code from the AMD module if needed and it will also give better error messages, JavaScript minifiers like [Google Closure Compiler](http://code.google.com/closure/compiler/) and [UglifyJS](https://github.com/mishoo/UglifyJS) will make sure code is as small/optimized as possible. - - > "Make it clear before you make it faster." - The Elements of Programming Style - -Be sure to always create tests for each proposed module. Features will only be merged if they contain proper tests and documentation. - - > "Good code is its own best documentation." - Steve McConnell - -We should do a code review before merging to make sure names makes sense and implementation is as good as possible. - -Try to split your pull requests into logical groups, the smaller the easier to be reviewed/merged. - - - -## Tests & Code Coverage ## - -Tests can be found inside the `tests` folder, to execute them in the browser open the `tests/runner.html`. The same tests also work on node.js by running `npm test`. - -We should have tests for all methods and ensure we have a high code coverage through our continuous integration server ([travis](https://travis-ci.org/mout/mout)). When you ask for a pull request Travis will automatically run the tests on node.js and check the code coverage as well. - -We run `node build pkg` automatically before any `npm test`, so specs and packages should always be in sync. (will avoid human mistakes) - -To check code coverage run `npm test --coverage`, it will generate the reports inside the `coverage` folder and also log the results. Please note that node.js doesn't execute all code branches since we have some conditionals that are only met on old JavaScript engines (eg. IE 7-8), so we will never have 100% code coverage (but should be close to it). - - - -## Build Script ## - -The [build script](https://github.com/mout/mout/wiki/Build-Script) can be extremely helpful and can avoid human mistakes, use it. - - - -## Admins / Pull Requests ## - -Even if you are an admin (have commit rights) please do pull requests when adding new features or changing current behavior, that way we can review the work and discuss. Feel free to push changes that doesn't affect behavior without asking for a pull request (readme, changelog, build script, typos, refactoring, ...). - - - -## Large changes ## - -If you are proposing some major change, please create an issue to discuss it first. (maybe it's outside the scope of the project) - - - -## Questions / IRC / Wiki / Issue Tracker ## - -When in doubt ask someone on IRC to help you ([#moutjs on irc.freenode.net](http://webchat.freenode.net/?channels=moutjs)) or create a [new issue](http://github.com/mout/mout/issues). - -The [project wiki](https://github.com/mout/mout/wiki) can also be a good resource of information. - - ---- - -Check the [contributors list at github](https://github.com/mout/mout/contributors). - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/LICENSE.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/LICENSE.md deleted file mode 100644 index e9ccc2be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -# The MIT License (MIT) -## Copyright (c) 2012, 2013 moutjs team and contributors (http://moutjs.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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/README.md deleted file mode 100644 index 872943bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/README.md +++ /dev/null @@ -1,63 +0,0 @@ -![mout](http://moutjs.com/logo.png "Modular JavaScript Utilties") - -http://moutjs.com/ - -[![Build Status](https://travis-ci.org/mout/mout.png?branch=master)](https://travis-ci.org/mout/mout) - -All code is library agnostic and consist mostly of helper methods that aren't -directly related with the DOM, the purpose of this library isn't to replace -Dojo, jQuery, YUI, Mootools, etc, but to provide modular solutions for common -problems that aren't solved by most of them. Consider it as a crossbrowser -JavaScript standard library. - - - -## Main goals ## - - - increase code reuse; - - be clear (code should be clean/readable); - - be easy to debug; - - be easy to maintain; - - follow best practices; - - follow standards when possible; - - **don't convert JavaScript into another language!** - - be compatible with other frameworks; - - be modular; - - have unit tests for all modules; - - work on multiple environments (IE7+, modern browsers, node.js); - - - -## What shouldn't be here ## - - - UI components; - - CSS selector engine; - - Event system - pub/sub; - - Template engine; - - Anything that isn't generic enough to be on a standard library; - - Anything that could be a separate library and/or isn't a modular utility... - - - -## API Documentation ## - -Online documentation can be found at http://moutjs.com/ or inside the -`doc` folder. - - - -## FAQ / Wiki / IRC ## - -For more info about project structure, design decisions, tips, how to -contribute, build system, etc, please check the [project -wiki](https://github.com/mout/mout/wiki). - -We also have an IRC channel [#moutjs on -irc.freenode.net](http://webchat.freenode.net/?channels=moutjs) - - - -## License ## - -Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php). - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array.js deleted file mode 100644 index 89d388ba..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array.js +++ /dev/null @@ -1,46 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'append' : require('./array/append'), - 'collect' : require('./array/collect'), - 'combine' : require('./array/combine'), - 'compact' : require('./array/compact'), - 'contains' : require('./array/contains'), - 'difference' : require('./array/difference'), - 'every' : require('./array/every'), - 'filter' : require('./array/filter'), - 'find' : require('./array/find'), - 'findIndex' : require('./array/findIndex'), - 'flatten' : require('./array/flatten'), - 'forEach' : require('./array/forEach'), - 'indexOf' : require('./array/indexOf'), - 'insert' : require('./array/insert'), - 'intersection' : require('./array/intersection'), - 'invoke' : require('./array/invoke'), - 'join' : require('./array/join'), - 'lastIndexOf' : require('./array/lastIndexOf'), - 'map' : require('./array/map'), - 'max' : require('./array/max'), - 'min' : require('./array/min'), - 'pick' : require('./array/pick'), - 'pluck' : require('./array/pluck'), - 'range' : require('./array/range'), - 'reduce' : require('./array/reduce'), - 'reduceRight' : require('./array/reduceRight'), - 'reject' : require('./array/reject'), - 'remove' : require('./array/remove'), - 'removeAll' : require('./array/removeAll'), - 'shuffle' : require('./array/shuffle'), - 'some' : require('./array/some'), - 'sort' : require('./array/sort'), - 'split' : require('./array/split'), - 'toLookup' : require('./array/toLookup'), - 'union' : require('./array/union'), - 'unique' : require('./array/unique'), - 'xor' : require('./array/xor'), - 'zip' : require('./array/zip') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/append.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/append.js deleted file mode 100644 index bf74037e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/append.js +++ /dev/null @@ -1,21 +0,0 @@ - - - /** - * Appends an array to the end of another. - * The first array will be modified. - */ - function append(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var pad = arr1.length, - i = -1, - len = arr2.length; - while (++i < len) { - arr1[pad + i] = arr2[i]; - } - return arr1; - } - module.exports = append; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/collect.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/collect.js deleted file mode 100644 index 58637493..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/collect.js +++ /dev/null @@ -1,27 +0,0 @@ -var append = require('./append'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Maps the items in the array and concatenates the result arrays. - */ - function collect(arr, callback, thisObj){ - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - var value = callback(arr[i], i, arr); - if (value != null) { - append(results, value); - } - } - - return results; - } - - module.exports = collect; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/combine.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/combine.js deleted file mode 100644 index d66e6212..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/combine.js +++ /dev/null @@ -1,22 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Combines an array with all the items of another. - * Does not allow duplicates and is case and type sensitive. - */ - function combine(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var i = -1, len = arr2.length; - while (++i < len) { - if (indexOf(arr1, arr2[i]) === -1) { - arr1.push(arr2[i]); - } - } - - return arr1; - } - module.exports = combine; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/compact.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/compact.js deleted file mode 100644 index 74c176ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/compact.js +++ /dev/null @@ -1,13 +0,0 @@ -var filter = require('./filter'); - - /** - * Remove all null/undefined items from array. - */ - function compact(arr) { - return filter(arr, function(val){ - return (val != null); - }); - } - - module.exports = compact; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/contains.js deleted file mode 100644 index 92bb6ad9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/contains.js +++ /dev/null @@ -1,10 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * If array contains values. - */ - function contains(arr, val) { - return indexOf(arr, val) !== -1; - } - module.exports = contains; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/difference.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/difference.js deleted file mode 100644 index d0570510..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/difference.js +++ /dev/null @@ -1,22 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var some = require('./some'); -var contains = require('./contains'); - - - /** - * Return a new Array with elements that aren't present in the other Arrays. - */ - function difference(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return !some(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - module.exports = difference; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/every.js deleted file mode 100644 index ac598832..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/every.js +++ /dev/null @@ -1,27 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array every - */ - function every(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (!callback(arr[i], i, arr) ) { - result = false; - break; - } - } - - return result; - } - - module.exports = every; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/filter.js deleted file mode 100644 index ebeb58dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/filter.js +++ /dev/null @@ -1,27 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Array filter - */ - function filter(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - module.exports = filter; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/find.js deleted file mode 100644 index b4a73131..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/find.js +++ /dev/null @@ -1,13 +0,0 @@ -var findIndex = require('./findIndex'); - - /** - * Returns first item that matches criteria - */ - function find(arr, iterator, thisObj){ - var idx = findIndex(arr, iterator, thisObj); - return idx >= 0? arr[idx] : void(0); - } - - module.exports = find; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/findIndex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/findIndex.js deleted file mode 100644 index 53f22a5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/findIndex.js +++ /dev/null @@ -1,23 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Returns the index of the first item that matches criteria - */ - function findIndex(arr, iterator, thisObj){ - iterator = makeIterator(iterator, thisObj); - if (arr == null) { - return -1; - } - - var i = -1, len = arr.length; - while (++i < len) { - if (iterator(arr[i], i, arr)) { - return i; - } - } - - return -1; - } - - module.exports = findIndex; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/flatten.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/flatten.js deleted file mode 100644 index aa9757ab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/flatten.js +++ /dev/null @@ -1,43 +0,0 @@ -var isArray = require('../lang/isArray'); -var append = require('./append'); - - /* - * Helper function to flatten to a destination array. - * Used to remove the need to create intermediate arrays while flattening. - */ - function flattenTo(arr, result, level) { - if (arr == null) { - return result; - } else if (level === 0) { - append(result, arr); - return result; - } - - var value, - i = -1, - len = arr.length; - while (++i < len) { - value = arr[i]; - if (isArray(value)) { - flattenTo(value, result, level - 1); - } else { - result.push(value); - } - } - return result; - } - - /** - * Recursively flattens an array. - * A new array containing all the elements is returned. - * If `shallow` is true, it will only flatten one level. - */ - function flatten(arr, level) { - level = level == null? -1 : level; - return flattenTo(arr, [], level); - } - - module.exports = flatten; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/forEach.js deleted file mode 100644 index 268e506f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/forEach.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Array forEach - */ - function forEach(arr, callback, thisObj) { - if (arr == null) { - return; - } - var i = -1, - len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback.call(thisObj, arr[i], i, arr) === false ) { - break; - } - } - } - - module.exports = forEach; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/indexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/indexOf.js deleted file mode 100644 index 6a9ac832..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/indexOf.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Array.indexOf - */ - function indexOf(arr, item, fromIndex) { - fromIndex = fromIndex || 0; - if (arr == null) { - return -1; - } - - var len = arr.length, - i = fromIndex < 0 ? len + fromIndex : fromIndex; - while (i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[i] === item) { - return i; - } - - i++; - } - - return -1; - } - - module.exports = indexOf; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/insert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/insert.js deleted file mode 100644 index f1f95b75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/insert.js +++ /dev/null @@ -1,15 +0,0 @@ -var difference = require('./difference'); -var toArray = require('../lang/toArray'); - - /** - * Insert item into array if not already present. - */ - function insert(arr, rest_items) { - var diff = difference(toArray(arguments).slice(1), arr); - if (diff.length) { - Array.prototype.push.apply(arr, diff); - } - return arr.length; - } - module.exports = insert; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/intersection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/intersection.js deleted file mode 100644 index e6170062..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/intersection.js +++ /dev/null @@ -1,23 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var every = require('./every'); -var contains = require('./contains'); - - - /** - * Return a new Array with elements common to all Arrays. - * - based on underscore.js implementation - */ - function intersection(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return every(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - module.exports = intersection; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/invoke.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/invoke.js deleted file mode 100644 index c01aab1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/invoke.js +++ /dev/null @@ -1,23 +0,0 @@ -var forEach = require('./forEach'); - - /** - * Call `methodName` on each item of the array passing custom arguments if - * needed. - */ - function invoke(arr, methodName, var_args){ - if (arr == null) { - return arr; - } - - var args = Array.prototype.slice.call(arguments, 2); - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - value[methodName].apply(value, args); - } - - return arr; - } - - module.exports = invoke; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/join.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/join.js deleted file mode 100644 index 71d8bd20..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/join.js +++ /dev/null @@ -1,17 +0,0 @@ -var filter = require('./filter'); - - function isValidString(val) { - return (val != null && val !== ''); - } - - /** - * Joins strings with the specified separator inserted between each value. - * Null values and empty strings will be excluded. - */ - function join(items, separator) { - separator = separator || ''; - return filter(items, isValidString).join(separator); - } - - module.exports = join; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/lastIndexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/lastIndexOf.js deleted file mode 100644 index ee44a25b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/lastIndexOf.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Array lastIndexOf - */ - function lastIndexOf(arr, item, fromIndex) { - if (arr == null) { - return -1; - } - - var len = arr.length; - fromIndex = (fromIndex == null || fromIndex >= len)? len - 1 : fromIndex; - fromIndex = (fromIndex < 0)? len + fromIndex : fromIndex; - - while (fromIndex >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[fromIndex] === item) { - return fromIndex; - } - fromIndex--; - } - - return -1; - } - - module.exports = lastIndexOf; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/map.js deleted file mode 100644 index 54064f6b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/map.js +++ /dev/null @@ -1,23 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Array map - */ - function map(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null){ - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - results[i] = callback(arr[i], i, arr); - } - - return results; - } - - module.exports = map; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/max.js deleted file mode 100644 index 183b10ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/max.js +++ /dev/null @@ -1,35 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Return maximum value inside array - */ - function max(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return Infinity; - } else if (arr.length && !iterator) { - return Math.max.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = -Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp > compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - module.exports = max; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/min.js deleted file mode 100644 index dd00b6cf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/min.js +++ /dev/null @@ -1,35 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Return minimum value inside array - */ - function min(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return -Infinity; - } else if (arr.length && !iterator) { - return Math.min.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp < compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - module.exports = min; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/pick.js deleted file mode 100644 index 6a54846c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/pick.js +++ /dev/null @@ -1,14 +0,0 @@ -var randInt = require('../random/randInt'); - - /** - * Remove a random item from the Array and return it - */ - function pick(arr){ - if (arr == null || !arr.length) return; - var idx = randInt(0, arr.length - 1); - return arr.splice(idx, 1)[0]; - } - - module.exports = pick; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/pluck.js deleted file mode 100644 index fef4043b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -var map = require('./map'); - - /** - * Extract a list of property values. - */ - function pluck(arr, propName){ - return map(arr, propName); - } - - module.exports = pluck; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/range.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/range.js deleted file mode 100644 index 31d3c770..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/range.js +++ /dev/null @@ -1,27 +0,0 @@ -var countSteps = require('../math/countSteps'); - - /** - * Returns an Array of numbers inside range. - */ - function range(start, stop, step) { - if (stop == null) { - stop = start; - start = 0; - } - step = step || 1; - - var result = [], - nSteps = countSteps(stop - start, step), - i = start; - - while (i <= stop) { - result.push(i); - i += step; - } - - return result; - } - - module.exports = range; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/reduce.js deleted file mode 100644 index 1a350c6e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/reduce.js +++ /dev/null @@ -1,33 +0,0 @@ -var forEach = require('./forEach'); - - /** - * Array reduce - */ - function reduce(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2, - result = initVal; - - if (arr == null || !arr.length) { - if (!hasInit) { - throw new Error('reduce of empty array with no initial value'); - } else { - return initVal; - } - } - - var i = -1, len = arr.length; - while (++i < len) { - if (!hasInit) { - result = arr[i]; - hasInit = true; - } else { - result = fn(result, arr[i], i, arr); - } - } - - return result; - } - - module.exports = reduce; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/reduceRight.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/reduceRight.js deleted file mode 100644 index e36fd4aa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/reduceRight.js +++ /dev/null @@ -1,34 +0,0 @@ - - - /** - * Array reduceRight - */ - function reduceRight(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2; - - if (arr == null || !arr.length) { - if (hasInit) { - return initVal; - } else { - throw new Error('reduce of empty array with no initial value'); - } - } - - var i = arr.length, result = initVal, value; - while (--i >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - value = arr[i]; - if (!hasInit) { - result = value; - hasInit = true; - } else { - result = fn(result, value, i, arr); - } - } - return result; - } - - module.exports = reduceRight; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/reject.js deleted file mode 100644 index 685f2918..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/reject.js +++ /dev/null @@ -1,26 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Array reject - */ - function reject(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (!callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - module.exports = reject; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/remove.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/remove.js deleted file mode 100644 index aa6517db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/remove.js +++ /dev/null @@ -1,13 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Remove a single item from the array. - * (it won't remove duplicates, just a single item) - */ - function remove(arr, item){ - var idx = indexOf(arr, item); - if (idx !== -1) arr.splice(idx, 1); - } - - module.exports = remove; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/removeAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/removeAll.js deleted file mode 100644 index d5f7f3b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/removeAll.js +++ /dev/null @@ -1,15 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Remove all instances of an item from array. - */ - function removeAll(arr, item){ - var idx = indexOf(arr, item); - while (idx !== -1) { - arr.splice(idx, 1); - idx = indexOf(arr, item, idx); - } - } - - module.exports = removeAll; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/shuffle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/shuffle.js deleted file mode 100644 index 97805ec8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/shuffle.js +++ /dev/null @@ -1,29 +0,0 @@ -var randInt = require('../random/randInt'); -var forEach = require('./forEach'); - - /** - * Shuffle array items. - */ - function shuffle(arr) { - var results = [], - rnd; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - if (!i) { - results[0] = arr[0]; - } else { - rnd = randInt(0, i); - results[i] = results[rnd]; - results[rnd] = arr[i]; - } - } - - return results; - } - - module.exports = shuffle; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/some.js deleted file mode 100644 index 8d17772b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/some.js +++ /dev/null @@ -1,27 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array some - */ - function some(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback(arr[i], i, arr) ) { - result = true; - break; - } - } - - return result; - } - - module.exports = some; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/sort.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/sort.js deleted file mode 100644 index 7807339b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/sort.js +++ /dev/null @@ -1,55 +0,0 @@ - - - /** - * Merge sort (http://en.wikipedia.org/wiki/Merge_sort) - */ - function mergeSort(arr, compareFn) { - if (arr == null) { - return []; - } else if (arr.length < 2) { - return arr; - } - - if (compareFn == null) { - compareFn = defaultCompare; - } - - var mid, left, right; - - mid = ~~(arr.length / 2); - left = mergeSort( arr.slice(0, mid), compareFn ); - right = mergeSort( arr.slice(mid, arr.length), compareFn ); - - return merge(left, right, compareFn); - } - - function defaultCompare(a, b) { - return a < b ? -1 : (a > b? 1 : 0); - } - - function merge(left, right, compareFn) { - var result = []; - - while (left.length && right.length) { - if (compareFn(left[0], right[0]) <= 0) { - // if 0 it should preserve same order (stable) - result.push(left.shift()); - } else { - result.push(right.shift()); - } - } - - if (left.length) { - result.push.apply(result, left); - } - - if (right.length) { - result.push.apply(result, right); - } - - return result; - } - - module.exports = mergeSort; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/split.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/split.js deleted file mode 100644 index 4f3ba50c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/split.js +++ /dev/null @@ -1,35 +0,0 @@ - - - /** - * Split array into a fixed number of segments. - */ - function split(array, segments) { - segments = segments || 2; - var results = []; - if (array == null) { - return results; - } - - var minLength = Math.floor(array.length / segments), - remainder = array.length % segments, - i = 0, - len = array.length, - segmentIndex = 0, - segmentLength; - - while (i < len) { - segmentLength = minLength; - if (segmentIndex < remainder) { - segmentLength++; - } - - results.push(array.slice(i, i + segmentLength)); - - segmentIndex++; - i += segmentLength; - } - - return results; - } - module.exports = split; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/toLookup.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/toLookup.js deleted file mode 100644 index ce4c55dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/toLookup.js +++ /dev/null @@ -1,28 +0,0 @@ -var isFunction = require('../lang/isFunction'); - - /** - * Creates an object that holds a lookup for the objects in the array. - */ - function toLookup(arr, key) { - var result = {}; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length, value; - if (isFunction(key)) { - while (++i < len) { - value = arr[i]; - result[key(value)] = value; - } - } else { - while (++i < len) { - value = arr[i]; - result[value[key]] = value; - } - } - - return result; - } - module.exports = toLookup; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/union.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/union.js deleted file mode 100644 index f1334a91..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/union.js +++ /dev/null @@ -1,19 +0,0 @@ -var unique = require('./unique'); -var append = require('./append'); - - /** - * Concat multiple arrays and remove duplicates - */ - function union(arrs) { - var results = []; - var i = -1, len = arguments.length; - while (++i < len) { - append(results, arguments[i]); - } - - return unique(results); - } - - module.exports = union; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/unique.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/unique.js deleted file mode 100644 index 0192b2df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/unique.js +++ /dev/null @@ -1,17 +0,0 @@ -var indexOf = require('./indexOf'); -var filter = require('./filter'); - - /** - * @return {array} Array of unique items - */ - function unique(arr){ - return filter(arr, isUnique); - } - - function isUnique(item, i, arr){ - return indexOf(arr, item, i+1) === -1; - } - - module.exports = unique; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/xor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/xor.js deleted file mode 100644 index c125a996..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/xor.js +++ /dev/null @@ -1,26 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var contains = require('./contains'); - - - /** - * Exclusive OR. Returns items that are present in a single array. - * - like ptyhon's `symmetric_difference` - */ - function xor(arr1, arr2) { - arr1 = unique(arr1); - arr2 = unique(arr2); - - var a1 = filter(arr1, function(item){ - return !contains(arr2, item); - }), - a2 = filter(arr2, function(item){ - return !contains(arr1, item); - }); - - return a1.concat(a2); - } - - module.exports = xor; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/zip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/zip.js deleted file mode 100644 index 931eb818..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/array/zip.js +++ /dev/null @@ -1,29 +0,0 @@ -var max = require('./max'); -var pluck = require('./pluck'); -var map = require('./map'); - - function getLength(arr) { - return arr == null ? 0 : arr.length; - } - - /** - * Merges together the values of each of the arrays with the values at the - * corresponding position. - */ - function zip(arr){ - var len = arr ? max(map(arguments, getLength)) : 0, - results = [], - i = -1, - item; - while (++i < len) { - results.push(map(arguments, function(item) { - return item == null ? undefined : item[i]; - })); - } - - return results; - } - - module.exports = zip; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection.js deleted file mode 100644 index d5cf6cad..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection.js +++ /dev/null @@ -1,22 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'contains' : require('./collection/contains'), - 'every' : require('./collection/every'), - 'filter' : require('./collection/filter'), - 'find' : require('./collection/find'), - 'forEach' : require('./collection/forEach'), - 'make_' : require('./collection/make_'), - 'map' : require('./collection/map'), - 'max' : require('./collection/max'), - 'min' : require('./collection/min'), - 'pluck' : require('./collection/pluck'), - 'reduce' : require('./collection/reduce'), - 'reject' : require('./collection/reject'), - 'size' : require('./collection/size'), - 'some' : require('./collection/some') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/contains.js deleted file mode 100644 index a73f994b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/contains.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrContains = require('../array/contains'); -var objContains = require('../object/contains'); - - /** - */ - module.exports = make(arrContains, objContains); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/every.js deleted file mode 100644 index 300e03c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/every.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrEvery = require('../array/every'); -var objEvery = require('../object/every'); - - /** - */ - module.exports = make(arrEvery, objEvery); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/filter.js deleted file mode 100644 index 38757005..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/filter.js +++ /dev/null @@ -1,23 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * filter collection values, returns array. - */ - function filter(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - var results = []; - if (!list) { - return results; - } - forEach(list, function(value, index, list) { - if (iterator(value, index, list)) { - results[results.length] = value; - } - }); - return results; - } - - module.exports = filter; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/find.js deleted file mode 100644 index 14317e64..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/find.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrFind = require('../array/find'); -var objFind = require('../object/find'); - - /** - * Find value that returns true on iterator check. - */ - module.exports = make(arrFind, objFind); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/forEach.js deleted file mode 100644 index 6e28dcb1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/forEach.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrForEach = require('../array/forEach'); -var objForEach = require('../object/forOwn'); - - /** - */ - module.exports = make(arrForEach, objForEach); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/make_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/make_.js deleted file mode 100644 index 029d27bf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/make_.js +++ /dev/null @@ -1,19 +0,0 @@ - - - /** - * internal method used to create other collection modules. - */ - function makeCollectionMethod(arrMethod, objMethod, defaultReturn) { - return function(){ - var args = Array.prototype.slice.call(arguments); - if (args[0] == null) { - return defaultReturn; - } - // array-like is treated as array - return (typeof args[0].length === 'number')? arrMethod.apply(null, args) : objMethod.apply(null, args); - }; - } - - module.exports = makeCollectionMethod; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/map.js deleted file mode 100644 index fc157f53..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/map.js +++ /dev/null @@ -1,23 +0,0 @@ -var isObject = require('../lang/isObject'); -var values = require('../object/values'); -var arrMap = require('../array/map'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Map collection values, returns Array. - */ - function map(list, callback, thisObj) { - callback = makeIterator(callback, thisObj); - // list.length to check array-like object, if not array-like - // we simply map all the object values - if( isObject(list) && list.length == null ){ - list = values(list); - } - return arrMap(list, function (val, key, list) { - return callback(val, key, list); - }); - } - - module.exports = map; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/max.js deleted file mode 100644 index a8490e7e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/max.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrMax = require('../array/max'); -var objMax = require('../object/max'); - - /** - * Get maximum value inside collection - */ - module.exports = make(arrMax, objMax); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/min.js deleted file mode 100644 index 51d9f148..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/min.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrMin = require('../array/min'); -var objMin = require('../object/min'); - - /** - * Get minimum value inside collection. - */ - module.exports = make(arrMin, objMin); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/pluck.js deleted file mode 100644 index 9b283776..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/pluck.js +++ /dev/null @@ -1,14 +0,0 @@ -var map = require('./map'); - - /** - * Extract a list of property values. - */ - function pluck(list, key) { - return map(list, function(value) { - return value[key]; - }); - } - - module.exports = pluck; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/reduce.js deleted file mode 100644 index 4c075735..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/reduce.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrReduce = require('../array/reduce'); -var objReduce = require('../object/reduce'); - - /** - */ - module.exports = make(arrReduce, objReduce); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/reject.js deleted file mode 100644 index 2a92e3b3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/reject.js +++ /dev/null @@ -1,16 +0,0 @@ -var filter = require('./filter'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Inverse or collection/filter - */ - function reject(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - return filter(list, function(value, index, list) { - return !iterator(value, index, list); - }, thisObj); - } - - module.exports = reject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/size.js deleted file mode 100644 index 244e33e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/size.js +++ /dev/null @@ -1,19 +0,0 @@ -var isArray = require('../lang/isArray'); -var objSize = require('../object/size'); - - /** - * Get collection size - */ - function size(list) { - if (!list) { - return 0; - } - if (isArray(list)) { - return list.length; - } - return objSize(list); - } - - module.exports = size; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/some.js deleted file mode 100644 index 48fd252e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/collection/some.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrSome = require('../array/some'); -var objSome = require('../object/some'); - - /** - */ - module.exports = make(arrSome, objSome); - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date.js deleted file mode 100644 index 1cde1a95..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date.js +++ /dev/null @@ -1,21 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'dayOfTheYear' : require('./date/dayOfTheYear'), - 'diff' : require('./date/diff'), - 'i18n_' : require('./date/i18n_'), - 'isLeapYear' : require('./date/isLeapYear'), - 'isSame' : require('./date/isSame'), - 'parseIso' : require('./date/parseIso'), - 'startOf' : require('./date/startOf'), - 'strftime' : require('./date/strftime'), - 'timezoneAbbr' : require('./date/timezoneAbbr'), - 'timezoneOffset' : require('./date/timezoneOffset'), - 'totalDaysInMonth' : require('./date/totalDaysInMonth'), - 'totalDaysInYear' : require('./date/totalDaysInYear'), - 'weekOfTheYear' : require('./date/weekOfTheYear') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/dayOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/dayOfTheYear.js deleted file mode 100644 index 85905c5a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/dayOfTheYear.js +++ /dev/null @@ -1,13 +0,0 @@ -var isDate = require('../lang/isDate'); - - /** - * return the day of the year (1..366) - */ - function dayOfTheYear(date){ - return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - - Date.UTC(date.getFullYear(), 0, 1)) / 86400000 + 1; - } - - module.exports = dayOfTheYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/diff.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/diff.js deleted file mode 100644 index 1131cdcb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/diff.js +++ /dev/null @@ -1,130 +0,0 @@ -var totalDaysInMonth = require('./totalDaysInMonth'); -var totalDaysInYear = require('./totalDaysInYear'); -var convert = require('../time/convert'); - - /** - * calculate the difference between dates (range) - */ - function diff(start, end, unitName){ - // sort the dates to make it easier to process (specially year/month) - if (start > end) { - var swap = start; - start = end; - end = swap; - } - - var output; - - if (unitName === 'month') { - output = getMonthsDiff(start, end); - } else if (unitName === 'year'){ - output = getYearsDiff(start, end); - } else if (unitName != null) { - if (unitName === 'day') { - // ignore timezone difference because of daylight savings time - start = toUtc(start); - end = toUtc(end); - } - output = convert(end - start, 'ms', unitName); - } else { - output = end - start; - } - - return output; - } - - - function toUtc(d){ - // we ignore timezone differences on purpose because of daylight - // savings time, otherwise it would return fractional days/weeks even - // if a full day elapsed. eg: - // Wed Feb 12 2014 00:00:00 GMT-0200 (BRST) - // Sun Feb 16 2014 00:00:00 GMT-0300 (BRT) - // diff should be 4 days and not 4.041666666666667 - return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), - d.getHours(), d.getMinutes(), d.getSeconds(), - d.getMilliseconds()); - } - - - function getMonthsDiff(start, end){ - return getElapsedMonths(start, end) + - getElapsedYears(start, end) * 12 + - getFractionalMonth(start, end); - } - - - function getYearsDiff(start, end){ - var elapsedYears = getElapsedYears(start, end); - return elapsedYears + getFractionalYear(start, end, elapsedYears); - } - - - function getElapsedMonths(start, end){ - var monthDiff = end.getMonth() - start.getMonth(); - if (monthDiff < 0) { - monthDiff += 12; - } - // less than a full month - if (start.getDate() > end.getDate()) { - monthDiff -= 1; - } - return monthDiff; - } - - - function getElapsedYears(start, end){ - var yearDiff = end.getFullYear() - start.getFullYear(); - // less than a full year - if (start.getMonth() > end.getMonth()) { - yearDiff -= 1; - } - return yearDiff; - } - - - function getFractionalMonth(start, end){ - var fractionalDiff = 0; - var startDay = start.getDate(); - var endDay = end.getDate(); - - if (startDay !== endDay) { - var startTotalDays = totalDaysInMonth(start); - var endTotalDays = totalDaysInMonth(end); - var totalDays; - var daysElapsed; - - if (startDay > endDay) { - // eg: Jan 29 - Feb 27 (29 days elapsed but not a full month) - var baseDay = startTotalDays - startDay; - daysElapsed = endDay + baseDay; - // total days should be relative to 1st day of next month if - // startDay > endTotalDays - totalDays = (startDay > endTotalDays)? - endTotalDays + baseDay + 1 : startDay + baseDay; - } else { - // fractional is only based on endMonth eg: Jan 12 - Feb 18 - // (6 fractional days, 28 days until next full month) - daysElapsed = endDay - startDay; - totalDays = endTotalDays; - } - - fractionalDiff = daysElapsed / totalDays; - } - - return fractionalDiff; - } - - - function getFractionalYear(start, end, elapsedYears){ - var base = elapsedYears? - new Date(end.getFullYear(), start.getMonth(), start.getDate()) : - start; - var elapsedDays = diff(base, end, 'day'); - return elapsedDays / totalDaysInYear(end); - } - - - module.exports = diff; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/en-US.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/en-US.js deleted file mode 100644 index f9526ce4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/en-US.js +++ /dev/null @@ -1,61 +0,0 @@ - - // en-US (English, United States) - module.exports = { - "am" : "AM", - "pm" : "PM", - - "x": "%m/%d/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %I:%M:%S %p %Z", - - "months" : [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - - "months_abbr" : [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - - "days" : [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - - "days_abbr" : [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ] - }; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/pt-BR.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/pt-BR.js deleted file mode 100644 index 71ebadb5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n/pt-BR.js +++ /dev/null @@ -1,61 +0,0 @@ - - // pt-BR (Brazillian Portuguese) - module.exports = { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Janeiro", - "Fevereiro", - "Março", - "Abril", - "Maio", - "Junho", - "Julho", - "Agosto", - "Setembro", - "Outubro", - "Novembro", - "Dezembro" - ], - - "months_abbr" : [ - "Jan", - "Fev", - "Mar", - "Abr", - "Mai", - "Jun", - "Jul", - "Ago", - "Set", - "Out", - "Nov", - "Dez" - ], - - "days" : [ - "Domingo", - "Segunda", - "Terça", - "Quarta", - "Quinta", - "Sexta", - "Sábado" - ], - - "days_abbr" : [ - "Dom", - "Seg", - "Ter", - "Qua", - "Qui", - "Sex", - "Sáb" - ] - }; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n_.js deleted file mode 100644 index 723fc103..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/i18n_.js +++ /dev/null @@ -1,14 +0,0 @@ -var mixIn = require('../object/mixIn'); -var enUS = require('./i18n/en-US'); - - // we also use mixIn to make sure we don't affect the original locale - var activeLocale = mixIn({}, enUS, { - // we expose a "set" method to allow overriding the global locale - set : function(localeData){ - mixIn(activeLocale, localeData); - } - }); - - module.exports = activeLocale; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/isLeapYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/isLeapYear.js deleted file mode 100644 index 4212870b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/isLeapYear.js +++ /dev/null @@ -1,15 +0,0 @@ -var isDate = require('../lang/isDate'); - - /** - * checks if it's a leap year - */ - function isLeapYear(fullYear){ - if (isDate(fullYear)) { - fullYear = fullYear.getFullYear(); - } - return fullYear % 400 === 0 || (fullYear % 100 !== 0 && fullYear % 4 === 0); - } - - module.exports = isLeapYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/isSame.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/isSame.js deleted file mode 100644 index 4097d29b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/isSame.js +++ /dev/null @@ -1,16 +0,0 @@ -var startOf = require('./startOf'); - - /** - * Check if date is "same" with optional period - */ - function isSame(date1, date2, period){ - if (period) { - date1 = startOf(date1, period); - date2 = startOf(date2, period); - } - return Number(date1) === Number(date2); - } - - module.exports = isSame; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/parseIso.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/parseIso.js deleted file mode 100644 index 8ea2b171..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/parseIso.js +++ /dev/null @@ -1,146 +0,0 @@ -var some = require('../array/some'); - - var datePatterns = [ - /^([0-9]{4})$/, // YYYY - /^([0-9]{4})-([0-9]{2})$/, // YYYY-MM (YYYYMM not allowed) - /^([0-9]{4})-?([0-9]{2})-?([0-9]{2})$/ // YYYY-MM-DD or YYYYMMDD - ]; - var ORD_DATE = /^([0-9]{4})-?([0-9]{3})$/; // YYYY-DDD - - var timePatterns = [ - /^([0-9]{2}(?:\.[0-9]*)?)$/, // HH.hh - /^([0-9]{2}):?([0-9]{2}(?:\.[0-9]*)?)$/, // HH:MM.mm - /^([0-9]{2}):?([0-9]{2}):?([0-9]{2}(\.[0-9]*)?)$/ // HH:MM:SS.ss - ]; - - var DATE_TIME = /^(.+)T(.+)$/; - var TIME_ZONE = /^(.+)([+\-])([0-9]{2}):?([0-9]{2})$/; - - function matchAll(str, patterns) { - var match; - var found = some(patterns, function(pattern) { - return !!(match = pattern.exec(str)); - }); - - return found ? match : null; - } - - function getDate(year, month, day) { - var date = new Date(Date.UTC(year, month, day)); - - // Explicitly set year to avoid Date.UTC making dates < 100 relative to - // 1900 - date.setUTCFullYear(year); - - var valid = - date.getUTCFullYear() === year && - date.getUTCMonth() === month && - date.getUTCDate() === day; - return valid ? +date : NaN; - } - - function parseOrdinalDate(str) { - var match = ORD_DATE.exec(str); - if (match ) { - var year = +match[1], - day = +match[2], - date = new Date(Date.UTC(year, 0, day)); - - if (date.getUTCFullYear() === year) { - return +date; - } - } - - return NaN; - } - - function parseDate(str) { - var match, year, month, day; - - var match = matchAll(str, datePatterns); - if (match === null) { - // Ordinal dates are verified differently. - return parseOrdinalDate(str); - } - - year = (match[1] === void 0) ? 0 : +match[1]; - month = (match[2] === void 0) ? 0 : +match[2] - 1; - day = (match[3] === void 0) ? 1 : +match[3]; - - return getDate(year, month, day); - } - - function getTime(hr, min, sec) { - var valid = - (hr < 24 && hr >= 0 && - min < 60 && min >= 0 && - sec < 60 && min >= 0) || - (hr === 24 && min === 0 && sec === 0); - if (!valid) { - return NaN; - } - - return ((hr * 60 + min) * 60 + sec) * 1000; - } - - function parseOffset(str) { - var match; - if (str.charAt(str.length - 1) === 'Z') { - str = str.substring(0, str.length - 1); - } else if ((match = TIME_ZONE.exec(str))) { - var match = TIME_ZONE.exec(str); - if (match) { - var hours = +match[3], - minutes = (match[4] === void 0) ? 0 : +match[4], - offset = getTime(hours, minutes, 0); - - if (match[2] === '-') { - offset *= -1; - } - - return { offset: offset, time: match[1] }; - } - } - - // No time zone specified, assume UTC - return { offset: 0, time: str }; - } - - function parseTime(str) { - var match; - var offset = parseOffset(str); - - str = offset.time; - offset = offset.offset; - if (isNaN(offset)) { - return NaN; - } - - match = matchAll(str, timePatterns); - if (match === null) { - return NaN; - } - - var hours = (match[1] === void 0) ? 0 : +match[1], - minutes = (match[2] === void 0) ? 0 : +match[2], - seconds = (match[3] === void 0) ? 0 : +match[3]; - - return getTime(hours, minutes, seconds) - offset; - } - - /** - * Parse an ISO8601 formatted date string, and return a Date object. - */ - function parseISO8601(str){ - var match = DATE_TIME.exec(str); - if (!match) { - // No time specified - return parseDate(str); - } - - return parseDate(match[1]) + parseTime(match[2]); - } - - module.exports = parseISO8601; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/startOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/startOf.js deleted file mode 100644 index 072bc0ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/startOf.js +++ /dev/null @@ -1,54 +0,0 @@ -var clone = require('../lang/clone'); - - /** - * get a new Date object representing start of period - */ - function startOf(date, period){ - date = clone(date); - - // intentionally removed "break" from switch since start of - // month/year/etc should also reset the following periods - switch (period) { - case 'year': - date.setMonth(0); - /* falls through */ - case 'month': - date.setDate(1); - /* falls through */ - case 'week': - case 'day': - date.setHours(0); - /* falls through */ - case 'hour': - date.setMinutes(0); - /* falls through */ - case 'minute': - date.setSeconds(0); - /* falls through */ - case 'second': - date.setMilliseconds(0); - break; - default: - throw new Error('"'+ period +'" is not a valid period'); - } - - // week is the only case that should reset the weekDay and maybe even - // overflow to previous month - if (period === 'week') { - var weekDay = date.getDay(); - var baseDate = date.getDate(); - if (weekDay) { - if (weekDay >= baseDate) { - //start of the week is on previous month - date.setDate(0); - } - date.setDate(date.getDate() - date.getDay()); - } - } - - return date; - } - - module.exports = startOf; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/strftime.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/strftime.js deleted file mode 100644 index f033d10f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/strftime.js +++ /dev/null @@ -1,118 +0,0 @@ -var pad = require('../number/pad'); -var i18n = require('./i18n_'); -var dayOfTheYear = require('./dayOfTheYear'); -var timezoneOffset = require('./timezoneOffset'); -var timezoneAbbr = require('./timezoneAbbr'); -var weekOfTheYear = require('./weekOfTheYear'); - - var _combinations = { - 'D': '%m/%d/%y', - 'F': '%Y-%m-%d', - 'r': '%I:%M:%S %p', - 'R': '%H:%M', - 'T': '%H:%M:%S', - 'x': 'locale', - 'X': 'locale', - 'c': 'locale' - }; - - - /** - * format date based on strftime format - */ - function strftime(date, format, localeData){ - localeData = localeData || i18n; - var reToken = /%([a-z%])/gi; - - function makeIterator(fn) { - return function(match, token){ - return fn(date, token, localeData); - }; - } - - return format - .replace(reToken, makeIterator(expandCombinations)) - .replace(reToken, makeIterator(convertToken)); - } - - - function expandCombinations(date, token, l10n){ - if (token in _combinations) { - var expanded = _combinations[token]; - return expanded === 'locale'? l10n[token] : expanded; - } else { - return '%'+ token; - } - } - - - function convertToken(date, token, l10n){ - switch (token){ - case 'a': - return l10n.days_abbr[date.getDay()]; - case 'A': - return l10n.days[date.getDay()]; - case 'h': - case 'b': - return l10n.months_abbr[date.getMonth()]; - case 'B': - return l10n.months[date.getMonth()]; - case 'C': - return pad(Math.floor(date.getFullYear() / 100), 2); - case 'd': - return pad(date.getDate(), 2); - case 'e': - return pad(date.getDate(), 2, ' '); - case 'H': - return pad(date.getHours(), 2); - case 'I': - return pad(date.getHours() % 12, 2); - case 'j': - return pad(dayOfTheYear(date), 3); - case 'L': - return pad(date.getMilliseconds(), 3); - case 'm': - return pad(date.getMonth() + 1, 2); - case 'M': - return pad(date.getMinutes(), 2); - case 'n': - return '\n'; - case 'p': - return date.getHours() >= 12? l10n.pm : l10n.am; - case 'P': - return convertToken(date, 'p', l10n).toLowerCase(); - case 's': - return date.getTime() / 1000; - case 'S': - return pad(date.getSeconds(), 2); - case 't': - return '\t'; - case 'u': - var day = date.getDay(); - return day === 0? 7 : day; - case 'U': - return pad(weekOfTheYear(date), 2); - case 'w': - return date.getDay(); - case 'W': - return pad(weekOfTheYear(date, 1), 2); - case 'y': - return pad(date.getFullYear() % 100, 2); - case 'Y': - return pad(date.getFullYear(), 4); - case 'z': - return timezoneOffset(date); - case 'Z': - return timezoneAbbr(date); - case '%': - return '%'; - default: - // keep unrecognized tokens - return '%'+ token; - } - } - - - module.exports = strftime; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneAbbr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneAbbr.js deleted file mode 100644 index b1006875..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneAbbr.js +++ /dev/null @@ -1,17 +0,0 @@ -var timezoneOffset = require('./timezoneOffset'); - - /** - * Abbreviated time zone name or similar information. - */ - function timezoneAbbr(date){ - // Date.toString gives different results depending on the - // browser/system so we fallback to timezone offset - // chrome: 'Mon Apr 08 2013 09:02:04 GMT-0300 (BRT)' - // IE: 'Mon Apr 8 09:02:04 UTC-0300 2013' - var tz = /\(([A-Z]{3,4})\)/.exec(date.toString()); - return tz? tz[1] : timezoneOffset(date); - } - - module.exports = timezoneAbbr; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneOffset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneOffset.js deleted file mode 100644 index 9492dceb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/timezoneOffset.js +++ /dev/null @@ -1,16 +0,0 @@ -var pad = require('../number/pad'); - - /** - * time zone as hour and minute offset from UTC (e.g. +0900) - */ - function timezoneOffset(date){ - var offset = date.getTimezoneOffset(); - var abs = Math.abs(offset); - var h = pad(Math.floor(abs / 60), 2); - var m = pad(abs % 60, 2); - return (offset > 0? '-' : '+') + h + m; - } - - module.exports = timezoneOffset; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInMonth.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInMonth.js deleted file mode 100644 index 8aafeb84..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInMonth.js +++ /dev/null @@ -1,25 +0,0 @@ -var isDate = require('../lang/isDate'); -var isLeapYear = require('./isLeapYear'); - - var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - - /** - * returns the total amount of days in the month (considering leap years) - */ - function totalDaysInMonth(fullYear, monthIndex){ - if (isDate(fullYear)) { - var date = fullYear; - year = date.getFullYear(); - monthIndex = date.getMonth(); - } - - if (monthIndex === 1 && isLeapYear(fullYear)) { - return 29; - } else { - return DAYS_IN_MONTH[monthIndex]; - } - } - - module.exports = totalDaysInMonth; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInYear.js deleted file mode 100644 index b4b7e9b7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/totalDaysInYear.js +++ /dev/null @@ -1,13 +0,0 @@ -var isLeapYear = require('./isLeapYear'); - - /** - * return the amount of days in the year following the gregorian calendar - * and leap years - */ - function totalDaysInYear(fullYear){ - return isLeapYear(fullYear)? 366 : 365; - } - - module.exports = totalDaysInYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/weekOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/weekOfTheYear.js deleted file mode 100644 index dd51b7f1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/date/weekOfTheYear.js +++ /dev/null @@ -1,16 +0,0 @@ -var dayOfTheYear = require('./dayOfTheYear'); - - /** - * Return the week of the year based on given firstDayOfWeek - */ - function weekOfTheYear(date, firstDayOfWeek){ - firstDayOfWeek = firstDayOfWeek == null? 0 : firstDayOfWeek; - var doy = dayOfTheYear(date); - var dow = (7 + date.getDay() - firstDayOfWeek) % 7; - var relativeWeekDay = 6 - firstDayOfWeek - dow; - return Math.floor((doy + relativeWeekDay) / 7); - } - - module.exports = weekOfTheYear; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/array.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/array.md deleted file mode 100644 index 1f390fbc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/array.md +++ /dev/null @@ -1,773 +0,0 @@ -# array # - -Array utilities. - - - - -## append(arr1, arr2):Array - -Appends an array to the end of the other. -The first array will be modified and will contain the appended items. - -See: [`union()`](#union), [`combine()`](#combine) - -```js -var foo = ['a', 'b'], - bar = ['b', 'd']; - -append(foo, bar); // ['a', 'b', 'b', 'd'] -``` - - - -## collect(arr, callback, [thisObj]):Array - -Maps the items in `arr` and concatenates the resulting arrays. - -See: [`map()`](#map) - -```js -collect([1, 2, 3], function(val) { - return [val, val % 2]; -}); // [1, 1, 2, 0, 3, 1]; - -collect(['a', 'bb', ''], function(val) { - return val.split(''); -}); // ['a', 'b', 'b'] -``` - -It also supports a shorthand syntax: - -```js -var items = [{ a: [1] }, { b: 'foo' }, { a: [2, 3] }]; -collect(items, 'a'); // [1, 2, 3]; -``` - - - -## combine(arr1, arr2):Array - -Combines an array with all the items of another. -The first array will be modified and will contain the combined items. -Does not allow duplicates and is case and type sensitive. - -See: [`union()`](#union), [`append()`](#append) - -```js -var foo = ['a', 'b'], - bar = ['b', 'd']; - -combine(foo, bar); // ['a', 'b', 'd'] -``` - - - -## compact(arr):Array - -Returns a new Array without any `null` or `undefined` values. Note that it will -keep empty strings and other falsy values (simillar to Ruby Array#compact). - -```js -var arr = [0, 1, null, false, '', 'foo', undefined, 'bar']; -compact(arr); // [0, 1, false, '', 'foo', 'bar']; -``` - - - -## contains(arr, value):Boolean - -Checks if Array contains value. Alias to `indexOf(arr, val) !== -1`. - -```js -var arr = [1, 2, 3]; -contains(arr, 2); // true -contains(arr, 'foo'); // false -``` - - - -## difference(...arrs):Array - -Return a new Array with elements that aren't present in the other Arrays -besides the first one. - -Works like [Python set#difference](http://docs.python.org/library/stdtypes.html#set.difference). - -It will remove duplicates. - -See: [`xor()`](#xor), [`intersection()`](#intersection) - -```js -var a = ['a', 'b', 1]; -var b = ['c', 1]; -difference(a, b); // ['a', 'b'] -``` - - - -## every(arr, callback, [thisObj]):Array - -Crossbrowser `Array.every()`. - -Tests whether all elements in the array pass the test implemented by the provided function. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = [1, 'foo', 'bar']; -every(items, isString); // false -every(items, isFunction); // false -every(items, function(val, key, arr){ - return val != null; -}); // true -``` - -more info at [MDN Array#every](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every) - -It also supports a shorthand syntax: - -```js -var items = [{id:1, active:true}, {id:3, active:true}, {id:8, active:true}]; -// all items with `id === 8` -every(items, {id:8}); // false -// `active` is truthy on all items -every(items, 'active'); // true -``` - - - -## filter(arr, callback, [thisObj]):Array - -Crossbrowser `Array.filter()`. - -Creates a new array with all elements that pass the callback test. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var nums = [1, 2, 3, 4, 5, 6]; -var oddNumbers = filter(nums, function(val, key, arr){ - return (val % 2) !== 0; -}); -// > [1, 3, 5] -``` - -more info at [MDN Array#filter](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter) - -Filter also supports shorthand notation: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true}, - {name:'jane', surname:'doe', beard:false} -]; -// filter item that matches all properties/values pairs -filter(arr, {name:'john', beard:false}); -// > [{name:'john', surnname:'connor', beard:false}] -// items where 'beard' is a truthy value -filter(arr, 'beard'); -// > [{name:'john', surnname:'doe', beard:true}] -``` - -See [`reject()`](#reject) - - - -## find(arr, callback, [thisObj]):void - -Loops through all the items in the Array and returns the first one that passes -a truth test (callback). - -```js -var arr = [123, {a:'b'}, 'foo', 'bar']; -find(arr, isString); // "foo" -find(arr, isNumber); // 123 -find(arr, isObject); // {a:'b'} -``` - -Find also supports shorthand notation: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true} -]; -// first item that matches all properties/values pairs -find(arr, {name:'john'}); // {name:'john', surnname:'connor', beard:false} -// first item where 'beard' is a truthy value -find(arr, 'beard'); // {name:'john', surnname:'doe', beard:true} -``` - -See: [findIndex()](#findIndex) - - - -## findIndex(arr, iterator, [thisObj]):Number - -Loops through the items in the Array and returns the index of the first one -that passes a truth test (callback). - -Returns `-1` if no item was found that passes the truth test. - -```js -var arr = [1, { a: 1 }, 'foo', 'bar']; -findIndex(arr, isString); // 2 -findIndex(arr, isNumber); // 0 -findIndex(arr, isObject); // 1 -findIndex(arr, isRegExp); // -1 -``` - -`findIndex` also supports shorthand notation: - -```js -var pets = [ - { pet: 'dog', name: 'Sam' }, - { pet: 'dog', name: 'Maggie' } -]; - -findIndex(pets, { pet: 'dog' }); // 0 -findIndex(pets, { name: 'Maggie' }); // 1 -``` - -See: [find()](#find) - - - -## flatten(arr, [level]):Array - -Recursively flattens an array. A new array containing all the elements is -returned. If `level` is specified, it will only flatten up to that level. - -### Example - -```js -flatten([1, [2], [3, [4, 5]]]); -// > [1, 2, 3, 4, 5] -flatten([1, [2], [3, [4, 5]]], 1); -// > [1, 2, 3, [4, 5]] -``` - - - -## forEach(arr, callback, [thisObj]):void - -Crossbrowser `Array.forEach()`. - -It allows exiting the iteration early by returning `false` on the callback. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = ['foo', 'bar', 'lorem', 'ipsum']; -forEach(items, function(val, key, arr){ - console.log(key +' : '+ val); - if (val === 'lorem') { - // stop iteration (break) - return false; - } -}); -``` - -more info at [MDN Array#forEach](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach) - - - -## indexOf(arr, item, [fromIndex]):Number - -Crossbrowser `Array.indexOf()`. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#indexOf](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf) - - - - -## insert(arr, ...items):Number - -Push items into array only if they aren't contained by it. Returns the new -`length` of the array. - -See: [`remove()`](#remove), [`removeAll()`](#removeAll), -[`contains()`](#contains) - -```js -var arr = ['a', 'b']; -insert(arr, 'a'); // 2 : ['a', 'b'] -insert(arr, 'c'); // 3 : ['a', 'b', 'c'] -insert(arr, 1, 2, 'b'); // 5 : ['a', 'b', 'c', 1, 2] -``` - - - -## intersection(...arrs):Array - -Return a new Array with elements common to all Arrays. - -Similar to Python set#intersection and underscore.js intersection. - -It will remove duplicates. - -See: [`difference()`](#difference), [`xor()`](#xor) - -```js -var a = ['a', 'b', 1], - b = ['c', 1], - c = [1, 2, 3]; -intersection(a, b, c); // [1] -``` - - - -## invoke(arr, methodName[, ...args]):Array - -Call `methodName` on each item of the array passing custom arguments if needed. - -```js -invoke([[3,2,1], [9,5,2]], 'sort'); // [[1,2,3], [2,5,9]] -``` - - - -## join(arr, [separator]):String - -Joins the strings in `arr`, inserting `separator` between each value. - -This ignores null values and empty strings that are in the array. `separator` -defaults to an empty string. This will convert all non-string objects in the -array to a string. - -### Example - -```js -join(['a', 'b', 'c']); // 'abc' -join(['foo', 'bar'], ', '); // 'foo, bar' -join([null, 'foo', '', 'bar', undefined], ':'); // 'foo:bar' -``` - - - -## lastIndexOf(arr, item, [fromIndex]):Number - -Crossbrowser `Array.lastIndexOf()`. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#lastIndexOf](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf) - - - -## map(arr, callback, [thisObj]]):Array - -Crossbrowser `Array.map()`. - -Creates a new array with the results of calling a provided function on every -element in this array. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -See: [`collect()`](#collect) - -```js -var nums = [1,2,3,4]; -var double = map(nums, function(val, key, arr){ - return val * 2; -}); -// > [2, 4, 6, 8] -``` - -more info at [MDN Array#map](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map) - -It also supports a shorthand notation which can be used to achieve same result -as [`array/pluck`](#pluck): - -```js -var src = ['lorem', 'ipsum', 'foo', 'amet']; -// grab the "length" property of all items -var lengths = map(src, 'length'); // [5, 5, 3, 4] -``` - - - -## max(arr, [iterator], [thisObj]):* - -Returns maximum value inside array or use a custom iterator to define how items -should be compared. - -See: [`min()`](#min) - -```js -max([10, 2, 7]); // 10 -max(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'lorem' -``` - -It also supports a shorthand notation: - -```js -max(['foo', 'lorem', 'amet'], 'length'); // "lorem" -``` - - - -## min(arr, [iterator], [thisObj]):* - -Returns minimum value inside array or use a custom iterator to define how items -should be compared. - -See: [`max()`](#max) - -```js -min([10, 2, 7]); // 2 -min(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'foo' -``` - -It also supports a shorthand notation: - -```js -min(['foo', 'lorem', 'amet'], 'length'); // "foo" -``` - - - -## pick(arr):* - -Gets a random item and remove it from the array. - -### Example: - - var arr = [1, 2, 3, 4, 5, 6]; - var item_1 = pick(arr); // 4 - var item_2 = pick(arr); // 1 - console.log(arr); // [2, 3, 5, 6] - - - -## pluck(arr, propName):Array - -Extract a list of property values. - -See: [`function/prop()`](function.html#prop) - -```js -var users = [{name : 'John', age: 21}, {name: 'Jane', age : 27}]; -var names = pluck(users, 'name'); // ["John", "Jane"] -var ages = pluck(users, 'age'); // [21, 27] -``` - - - -## range([start], stop[, step]):Array - -Creates a new Array with all the values inside the range. Works similarly to -Python#range or PHP#range. - -### Arguments - - 1. `[start]` (Number) : Range start. Default is `0`. - 2. `stop` (Number) : Range limit. - 3. `[step]` (Number) : Step size. Default is `1`. - -### Example - -```js -range(5); // [0, 1, 2, 3, 4, 5] -range(0, 5); // [0, 1, 2, 3, 4, 5] -range(0, 5, 2); // [0, 2, 4] -range(20, 40, 5); // [20, 25, 30, 35, 40] -``` - - - -## reduce(arr, fn):* - -Crossbrowser `Array.reduce()`. - -Apply a function against an accumulator and each value of the array (from -left-to-right) as to reduce it to a single value. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#reduce](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce) - - - -## reduceRight(arr, fn):* - -Crossbrowser `Array.reduceRight()`. - -Apply a function simultaneously against two values of the array (from -right-to-left) as to reduce it to a single value. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#reduceRight](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduceRight) - - - -## reject(arr, fn, thisObj):Array - -Creates a new array with all the elements that do **not** pass the truth test. -Opposite of [`filter()`](#filter). - -See [`filter()`](#filter) - -### Example - -```js -var numbers = [1, 2, 3, 4, 5, 6]; -reject(numbers, function(x) { return (x % 2) !== 0; }); // [2, 4, 6] -``` - -It also supports a shorthand syntax: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true}, - {name:'jane', surname:'doe', beard:false} -]; -// reject items that matches all properties/values pairs -reject(arr, {name:'john'}); -// > [{name:'jane', surnname:'doe', beard:false}] -// reject items where 'beard' is a truthy value -filter(arr, 'beard'); -// > [{name:'john', surnname:'connor', beard:false}, -// {name:'jane', surname:'doe', beard:false}] -``` - - - -## remove(arr, item):void - -Remove a single item from the array. - -IMPORTANT: it won't remove duplicates, just a single item. - -### Example - -```js -var foo = [1, 2, 3, 4]; -remove(foo, 2); -console.log(foo); // [1, 3, 4] -``` - - - -## removeAll(arr, item):void - -Remove all instances of an item from the array. - -### Example - -```js -var foo = [1, 2, 3, 4, 2, 2]; -removeAll(foo, 2); -console.log(foo); // [1, 3, 4]; -``` - - - -## shuffle(arr):Array - -Returns a new Array with items randomly sorted (shuffled). Similar to Ruby Array#shuffle. - -### Example - -```js -var arr = ['a', 'b', 'c', 'd', 'e']; -shuffle(arr); // ['b', 'd', 'e', 'c', 'a'] -``` - - - -## some(arr, callback, [thisObj]):Array - -Crossbrowser `Array.some()`. - -Tests whether some element in the array passes the test implemented by the provided function. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = [1, 'foo', 'bar']; -some(items, isString); // true -some(items, isFunction); // false -``` - -more info at [MDN Array#some](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some) - -It also supports a shorthand syntax: - -```js -var items = [{id:1, active:true}, {id:3, active:false}, {id:8, active:false}]; -// at least one item with `id === 8` -some(items, {id:8}); // true -// `active` is truthy on at least one item -some(items, 'active'); // true -``` - -see also: [`object/matches`](object.html#matches) - - - -## sort(arr, [compareFn]):Array - -Returns a sorted Array using the [Merge Sort](http://en.wikipedia.org/wiki/Merge_sort) algorithm (stable sort). - -The `Array.prototype.sort` browser implementations differ since the sorting algorithm isn't described in the ES spec - [in V8 it isn't stable](http://code.google.com/p/v8/issues/detail?id=90) and [on Firefox it is stable](https://bugzilla.mozilla.org/show_bug.cgi?id=224128) - so this function doesn't use the browser native implementation and is recommended in cases where a stable sort is required (items should preserve same order if already sorted). - -**Important:** It does logical comparisson by default (greater/less than) and -not a string comparisson like the native `Array#sort`. - -### compareFn - -If `compareFn` is supplied elements are sorted based on the value returned by -the `compareFn`. - - - If `compareFn(a, b)` is less than `0`, sort `a` to a lower index than `b`. - - If `compareFn(a, b)` returns `0`, leave `a` and `b` unchanged with respect - to each other, but sorted with respect to all different elements. - - If `compareFn(a, b)` is greater than `0`, sort `b` to a lower index than - `a`. - -### Example - -```js -sort([187, 23, 47, 987, 12, 59, 0]); // [0, 12, 23, 47, 59, 187, 987] -sort(['a', 'z', 'c', 'beta', 'b']); // ['a', 'b', 'beta', 'c', 'z'] - -// ['sit', 'amet', 'lorem', 'ipsum'] -sort(['lorem', 'ipsum', 'sit', 'amet'], function(a, b){ - // sort by length, items with same length - // will keep the relative order (stable) - return a.length - b.length; -}); - -// [4, 3, 2, 1] -sort([2, 3, 1, 4], function(a, b){ - // reverse sort - return b - a; -}); -``` - - - -## split(arr, [segments]):Array - -Splits an array into a fixed number of segments. - -The number of segments is specified by `segments` and defaults to 2. If the -array cannot be evenly split, the first segments will contain the extra items. -If `arr` is empty, an empty array is returned. If `arr.length` is less than -`segments`, then the resulting array will have `arr.length` number of -single-element arrays. - -### Example -```js -split([1, 2, 3, 4, 5], 3) // [ [1, 2], [3, 4], [5] ] -split([1, 2, 3, 4, 5]) // [ [1, 2, 3], [4, 5] ] -split([]) // [] -split([1, 2], 3) // [ [1], [2] ] -``` - - - -## toLookup(arr, key):Object - -Create an object that indexes the items in the array by a key. If `key` is a function, the key for each value in the resulting object will be the result of calling the function with the value as an argument. Otherwise `key` specifies the property on each value to use as the key. - -### Example - -```js -var foo = [{ name: 'a', thing: 1 }, { name: 'b', thing: 2 }]; -// { a: { name: 'a', thing: 1 }, b: { name: 'b', thing: 2 } } -toLookup(foo, 'name'); -// same as above -toLookup(foo, function (value) { return value.name; }); -``` - - - -## union(...arrs):Array - -Concat multiple arrays removing duplicates. - -```js -var a = ['a', 'b'], - b = ['c', 'a'], - c = [1, 'b', 2, 3, 'a']; - -//note that unique remove from begin to end -union(a, b, c); // ['c', 1, 'b', 2, 3, 'a'] -``` - - - -## unique(arr):Array - -Return a new Array of unique items. - -### Example - -```js -var foo = [1, 2, 3, 4, 2, 2, 3, 4]; -var bar = unique(foo); -console.log(foo); // [1, 2, 3, 4]; -``` - - - -## xor(arr1, arr2):Array - -Exclusive OR. Returns items that are present in a single array. - -Works like [Python set#symmetric_difference](http://docs.python.org/library/stdtypes.html#set.symmetric_difference) renamed for brevity. - -It will remove duplicates. - -See: [`difference()`](#difference), [`intersection()`](#intersection) - -```js -var a = ['a', 'b', 1]; -var b = ['c', 1]; -xor(a, b); // ['a', 'b', 'c'] -``` - - - -## zip(...arrs):Array - -Groups the elements of each array at their corresponding indexes. - -Useful for separate data sources that are coordinated through matching array -indexes. For a matrix of nested arrays, `zip.apply(...)` can transpose the -matrix in a similar fashion. - -```js -// [['moe', 30, true], ['larry', 40, false], ['curly', 50, false]] -zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]); -``` - - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/collection.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/collection.md deleted file mode 100644 index 2ffcab10..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/collection.md +++ /dev/null @@ -1,233 +0,0 @@ -# collection # - -Methods for dealing with collections (Array or Objects). - - - -## contains(list, value):Boolean - -Checks if collection contains value. - -```js -contains({a: 1, b: 2, c: 'bar'}, 2); // true -contains([1, 2, 3], 'foo'); // false -``` - -See: [array/contains](array.html#contains), [object/contains](object.html#contains) - - - -## every(list, callback, [thisObj]):Boolean - -Tests whether all values in the collection pass the test implemented by the -provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -every(obj, isNumber); // false -``` - -See: [array/every](array.html#every), [object/every](object.html#every) - - - -## filter(list, callback, [thisObj]):Array - -Filter collection properties. - -See: [array/filter](array.html#filter), [object/filter](object.html#filter) - - - -## find(list, callback, [thisObj]):* - -Loops through all the values in the collection and returns the first one that -passes a truth test (callback). - -**Important:** loop order over objects properties isn't guaranteed to be the -same on all environments. - -```js -find({a: 'foo', b: 12}, isString); // 'foo' -find(['foo', 12], isNumber); // 12 -``` - -See: [array/find](array.html#find), [object/find](object.html#find) - - - -## forEach(list, callback, [thisObj]) - -Loop through all values of the collection. - -See: [array/forEach](array.html#forEach), [object/forOwn](object.html#forOwn) - - - -## map(list, callback, [thisObj]):Array - -Returns a new collection where the properties values are the result of calling -the callback for each property in the original collection. - -See: [array/map](array.html#map), [object/map](object.html#map) - - - -## max(list, [iterator]):* - -Returns maximum value inside collection or use a custom iterator to define how -items should be compared. - -See: [`min()`](#min), [array/max](array.html#max), [object/max](object.html#max) - -```js -max({a: 100, b: 2, c: 1, d: 3, e: 200}); // 200 -max(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'lorem' -``` - - - -## min(list, [iterator]):* - -Returns minimum value inside collection or use a custom iterator to define how -items should be compared. - -See: [`max()`](#max), [array/min](array.html#min), [object/min](object.html#min) - -```js -min([10, 2, 7]); // 2 -min({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'foo' -``` - - - -## pluck(list, propName):Array - -Extract a list of property values. - -```js -var users = [ - { - name : 'John', - age : 21 - }, - { - name : 'Jane', - age : 27 - } -]; - -pluck(users, 'name'); // ["John", "Jane"] -pluck(users, 'age'); // [21, 27] - -users = { - first: { - name : 'John', - age : 21 - }, - second: { - name : 'Mary', - age : 25 - } -}; - -pluck(users, 'name'); // ['John', 'Mary'] -``` - -See: [array/pluck](array.html#pluck), [object/pluck](object.html#pluck) - - - -## reduce(list, callback, initial, [thisObj]):* - -Apply a function against an accumulator and each value in the collection as to -reduce it to a single value. - -```js -var obj = {a: 1, b: 2, c: 3, d: 4}; - -function sum(prev, cur, key, list) { - return prev + cur; -} - -reduce(obj, sum); // 10 -``` - -See: [array/reduce](array.html#reduce), [object/reduce](object.html#reduce) - - - -## reject(list, fn, [thisObj]):Array - -Creates a new array with all the elements that do **not** pass the truth test. -Opposite of [`filter()`](#filter). - -### Example - -```js -var numbers = [1, 2, 3, 4, 5]; -reject(numbers, function(x) { return (x % 2) !== 0; }); // [2, 4] - -var obj = {a: 1, b: 2, c: 3, d: 4, e: 5}; -reject(obj, function(x) { return (x % 2) !== 0; }); // [2, 4] -``` - -See: [array/reject](array.html#reject), [object/reject](object.html#reject) - - - -## size(list):Number - -Returns the number of values in the collection. - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -size(obj); // 3 -size([1,2,3]); // 3 -size(null); // 0 -``` - -See: [object/size](object.html#size) - - - -## some(list, callback, [thisObj]):Boolean - -Tests whether any values in the collection pass the test implemented by the -provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -some(obj, isNumber); // true -some(obj, isString); // true -some([1, 2, 3], isNumber) // true -some([1, 2, 3], isString) // false -``` - -See: [array/some](array.html#some), [object/some](object.html#some) - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/date.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/date.md deleted file mode 100644 index b3f7f40e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/date.md +++ /dev/null @@ -1,295 +0,0 @@ -# date # - -Date utilities. - - -## dayOfTheYear(date):Number - -How many days elapsed since begining of the year (following gregorian -calendar). - -```js -// Jan 1st -dayOfTheYear(new Date(2013, 0, 1)); // 1 -// Dec 31th -dayOfTheYear(new Date(2013, 11, 31)); // 364 -``` - - - -## diff(date1, date2, [unitName]):Number - -Calculate the difference between dates (range). - -The returned value is always positive. The default `unitName` is `"ms"`. - -Available units: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`, -`millisecond`. - -See: [`time/convert()`](time.html#convert) - -```js -var d1 = new Date(2012, 4, 5); -var d2 = new Date(2013, 4, 8); -diff(d1, d2); // 31795200000 -diff(d1, d2, 'hour'); // 8832 -diff(d1, d2, 'week'); // 52.57142857142857 -diff(d1, d2, 'month'); // 12.096774193548388 -diff(d1, d2, 'year'); // 1.0082191780821919 -``` - - - -## isLeapYear(fullYear|date):Boolean - -Checks if it's a [leap year](http://en.wikipedia.org/wiki/Leap_year) according -to the Gregorian calendar. - -see: [`totalDaysInMonth()`](#totalDaysInMonth) - -```js -isLeapYear(2012); // true -isLeapYear(2013); // false -isLeapYear(new Date(2012, 2, 28)); // true -``` - - -## isSame(date1, date2[, period]):Boolean - -Check if both dates are the "same". - -You can pass an optional *period* used to set the comparisson precision. - -Available periods: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`. - -```js -var date1 = new Date(2013, 1, 3); -var date2 = new Date(2013, 2, 9); -isSame(date1, date2); // false -isSame(date1, date2, 'day'); // false -isSame(date1, date2, 'month'); // false -isSame(date1, date2, 'year'); // true -``` - - - -## parseIso(str):Number - -Parses an [ISO8601](http://en.wikipedia.org/wiki/Iso8601) date and returns the -number of milliseconds since January 1, 1970, 00:00:00 UTC, or `NaN` if it is -not a valid ISO8601 date. - -This parses *all* ISO8601 dates, including dates without times, [ordinal -dates](https://en.wikipedia.org/wiki/ISO_8601#Ordinal_dates), and the compact -representation (omitting delimeters). The only exception is [ISO week -dates](https://en.wikipedia.org/wiki/ISO_week_date), which are not parsed. - -If no time zone offset is specified, it assumes UTC time. - -```js -// Jan 01, 1970 00:00 GMT -parseIso('1970-01-01T00:00:00') // 0 -parseIso('1970-001') // 0 -parseIso('1970-01-01') // 0 -parseIso('19700101T000000.00') // 0 -parseIso('1970-01-01T02:00+02:00') // 0 - -// Jan 02, 2000 20:10 GMT+04:00 -parseIso('2000-01-02T20:10+04:00') // 946829400000 -``` - - - -## startOf(date, period):Date - -Get a new Date at the start of the period. - -Available periods: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`. - -```js -// Apr 05 2013 11:27:43 -var date = new Date(2013, 3, 5, 11, 27, 43, 123); -startOf(date, 'year'); // Jan 01 2013 00:00:00 -startOf(date, 'month'); // Apr 01 2013 00:00:00 -startOf(date, 'day'); // Apr 05 2013 00:00:00 -startOf(date, 'hour'); // Apr 05 2013 11:00:00 -``` - - - -## strftime(date, format, [l10n]):String - -Format date based on strftime format. - -Replaced tokens: - -<dl> -<dt>%a</dt><dd> locale's abbreviated weekday name.</dd> -<dt>%A</dt><dd> locale's full weekday name.</dd> -<dt>%b</dt><dd> locale's abbreviated month name.</dd> -<dt>%B</dt><dd> locale's full month name.</dd> -<dt>%c</dt><dd> locale's appropriate date and time representation.</dd> -<dt>%C</dt><dd> century number (the year divided by 100 and truncated -to an integer) as a decimal number [00..99].</dd> -<dt>%d</dt><dd> day of the month as a decimal number [01..31].</dd> -<dt>%D</dt><dd>same as %m/%d/%y.</dd> -<dt>%e</dt><dd> day of the month as a decimal number [1..31]; -a single digit is preceded by a space.</dd> -<dt>%F</dt><dd>The ISO 8601 date format (%Y-%m-%d)</dd> -<dt>%h</dt><dd>same as %b.</dd> -<dt>%H</dt><dd> hour (24-hour clock) as a decimal number [00..23].</dd> -<dt>%I</dt><dd> hour (12-hour clock) as a decimal number [01..12].</dd> -<dt>%j</dt><dd> day of the year as a decimal number [001..366].</dd> -<dt>%L</dt><dd> zero-padded milliseconds [000..999]</dd> -<dt>%m</dt><dd> month as a decimal number [01..12].</dd> -<dt>%M</dt><dd> minute as a decimal number [00..59].</dd> -<dt>%n</dt><dd> newline character.</dd> -<dt>%p</dt><dd> locale's equivalent of either "am" or "pm"</dd> -<dt>%P</dt><dd> locale's equivalent of either "AM" or "PM"</dd> -<dt>%r</dt><dd> time in a.m. and -p.m. notation; in the POSIX locale this is equivalent to %I:%M:%S %p.</dd> -<dt>%R</dt><dd> time in 24 hour notation (%H:%M).</dd> -<dt>%s</dt><dd> seconds since Epoch (1970-01-01 00:00:00 UTC)</dd> -<dt>%S</dt><dd> second as a decimal number [00..60].</dd> -<dt>%t</dt><dd> tab character.</dd> -<dt>%T</dt><dd> time (%H:%M:%S).</dd> -<dt>%u</dt><dd> weekday as a decimal number [1..7], with 1 representing -Monday.</dd> -<dt>%U</dt><dd> week number of the year (Sunday as the first day of -the week) as a decimal number [00..53].</dd> -<del><dt>%V</dt><dd> week number of the year (Monday as the first day of the -week) as a decimal number [01..53]. If the week containing 1 January has -four or more days in the new year, then it is considered week 1. Otherwise, -it is the last week of the previous year, and the next week is week 1.</dd></del> -<dt>%w</dt><dd> weekday as a decimal number [0..6], with 0 representing -Sunday.</dd> -<dt>%W</dt><dd> week number of the year (Monday as the first day of -the week) as a decimal number [00..53]. All days in a new year preceding -the first Monday are considered to be in week 0.</dd> -<dt>%x</dt><dd> locale's appropriate date representation.</dd> -<dt>%X</dt><dd> locale's appropriate time representation.</dd> -<dt>%y</dt><dd> year without century as a decimal number [00..99].</dd> -<dt>%Y</dt><dd> year with century as a decimal number.</dd> -<dt>%Z</dt><dd> timezone name or abbreviation, or by no bytes -if no timezone information exists.</dd> -<dt>%%</dt><dd>is replaced by %.</dd> -</dl> - -```js -var date = new Date(2013, 3, 8, 9, 2, 4); -strftime(date, '%Y-%m-%d'); // "2013-04-08" -strftime(date, '%R'); // "09:02" -strftime(date, '%Y-%m-%dT%H:%M:%S%z'); // "2013-04-08T09:02:04+0000" -``` - -You can also set a custom locale: - -```js -var ptBr = require('mout/date/i18n/pt-BR'); -strftime(date, '%a, %d %b', ptBr); // 'Seg, 08 Abr' -strftime(date, '%A, %d %B', ptBr); // 'Segunda, 08 Abril' -``` - -To set it globally: - -```js -require('mout/date/i18n_').set( customLocaleData ); -``` - -See [date/i18n](https://github.com/mout/mout/tree/master/src/date/i18n) -for localization examples. - - - -## timezoneAbbr(date):String - -Return timezone abbreviation or similar data. - -The result will vary based on the OS/browser since some environments doesn't -provide enough info about the current locale. - -```js -// IE 7-8 -timezoneAbbr(new Date()); // "-0500" -// Chrome, FF, V8 -timezoneAbbr(new Date()); // "EST" -``` - - - -## timezoneOffset(date):String - -Return time zone as hour and minute offset from UTC (e.g. +0900). - -It's important to note that JavaScript Date object will use the system locale -info to determinate the [timezone -offset](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset) -and that daylight saving time affects the result. - -```js -// if system locale is EST -timezoneOffset(new Date()); // -0500 -``` - - - -## totalDaysInMonth(fullYear, monthIndex):Number - -Returns the amount of days in the month taking into consideration leap years -(following Gregorian calendar). - -see: [`isLeapYear()`](#isLeapYear) - -```js -totalDaysInMonth(2008, 1); // 29 (leap year) -totalDaysInMonth(2009, 1); // 28 - -// you can also pass a Date object as single argument -totalDaysInMonth( new Date(2013, 0, 1) ); // 31 -``` - - -## totalDaysInYear(fullYear):Number - -Returns the amount of days in the year taking into consideration leap years -(following Gregorian calendar). - -see: [`isLeapYear()`](#isLeapYear), [`totalDaysInMonth()`](#totalDaysInMonth) - -```js -totalDaysInYear(2008); // 366 (leap year) -totalDaysInYear(2009); // 365 - -// you can also pass a Date object as single argument -totalDaysInYear( new Date(2013, 0, 1) ); // 365 -``` - - - -## weekOfTheYear(date, [firstDayOfWeek]):Number - -Returns how many weeks elapsed since start of the year (`0..53`). - -`firstDayOfWeek` can be `0` (Sunday) or `1` (Monday). By default weeks start at -Sunday. - -It will return `0` if `date` is before the first `firstDayOfWeek` of the year. - -```js -// Tue Jan 01 2013 -weekOfTheYear( new Date(2013,0,1) ); // 0 -// Wed Jan 09 2013 -weekOfTheYear( new Date(2013,0,9) ); // 1 -// Sun Jan 01 2012 -weekOfTheYear( new Date(2012,0,1) ); // 1 -// Mon Jan 09 2012 -weekOfTheYear( new Date(2012,0,9) ); // 2 -``` - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/function.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/function.md deleted file mode 100644 index 2695a025..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/function.md +++ /dev/null @@ -1,174 +0,0 @@ -# function # - -Function*(al)* utilities. - - - -## bind(fn, context, [...args]):Function - -Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - -### Arguments - - 1. `fn` (Function) : Target Function - 2. `context` (Object) : Execution context (object used as `this`) - 3. `[...args]` (*) : Arguments (0...n arguments) - -See: [`partial()`](#partial), [object/bindAll](./object.html#bindAll) - - - -## compose(...fn):Function - -Returns the composition of a list of functions, where each function consumes -the return value of the function that follows. In math terms, composing the -functions `f()`, `g()`, and `h()` produces `f(g(h()))`. - -```js -function add2(x) { return x + 2 } -function multi2(x) { return x * 2 } -map([1, 2, 3], compose(add2, multi2)); // [4, 6, 8] - -//same as -map([1, 2, 3], function(x){ - return add2( multi2(x) ); -}); -``` - - - -## debounce(fn, delay[, isAsap]):Function - -Creates a function that will delay the execution of `fn` until after `delay` -milliseconds have elapsed since the last time it was invoked. - -Subsequent calls to the debounced function will return the result of the last -`fn` call. - -```js -// sometimes less is more -var lazyRedraw = debounce(redraw, 300); -foo.on.resize.add(lazyRedraw); -``` - -In this visualization, `|` is a debounced-function call and `X` is the actual -callback execution: - - Default - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X - - Debounced with `isAsap == true`: - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X - -See: [`throttle()`](#throttle) - - -## func(name):Function - -Returns a function that calls a method with given `name` on supplied object. -Useful for iteration methods like `array/map` and `array/forEach`. - -See: [`prop()`](#prop) - -```js -// will call the method `getName()` for each `user` -var names = map(users, func('getName')); -``` - - - -## partial(fn, [...args]):Function - -Return a partially applied function supplying default arguments. - -This method is similar to [`bind`](#bind), except it does not alter the this -binding. - -### Arguments - - 1. `fn` (Function) : Target Function - 3. `[...args]` (*) : Arguments (0...n arguments) - -See: [`bind()`](#bind) - -```js -function add(a, b){ return a + b } -var add10 = partial(add, 10); -console.log( add10(2) ); // 12 -``` - - - -## prop(name):Function - -Returns a function that gets a property with given `name` from supplied object. -Useful for using in conjunction with `array/map` and/or for creating getters. - -See: [`array/pluck()`](array.html#pluck) - -```js -var users = [{name:"John", age:21}, {name:"Jane", age:25}]; -// ["John", "Jane"] -var names = map(users, prop('name')); -``` - - - -## series(...fn):Function - -Returns a function that will execute all the supplied functions in order and -passing the same parameters to all of them. Useful for combining multiple -`array/forEach` into a single one and/or for debugging. - - -```js -// call `console.log()` and `doStuff()` for each item item in the array -forEach(arr, series(console.log, doStuff)); -``` - - - -## throttle(fn, interval):Function - -Creates a function that, when executed, will only call the `fn` function at -most once per every `interval` milliseconds. - -If the throttled function is invoked more than once during the wait timeout, -`fn` will also be called on the trailing edge of the timeout. - -Subsequent calls to the throttled function will return the result of the last -`fn` call. - -```js -// sometimes less is more -var lazyRedraw = throttle(redraw, 300); -foo.on.resize.add(lazyRedraw); -``` - -In this visualization, `|` is a throttled-function call and `X` is the actual -`fn` execution: - - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X X X X X X X X X X X - -See: [`debounce()`](#debounce) - - -## timeout(fn, millis, context, [...args]):Number - -Functions as a wrapper for `setTimeout`. Calls a the function `fn` after a given delay `millis` in milliseconds. -The function is called within the specified context. The return value can be used to clear the timeout using `clearTimeout`. - -```js -var id = timeout(doStuff, 300, this); - -clearTimeout(id); -``` - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/lang.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/lang.md deleted file mode 100644 index 56d7879b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/lang.md +++ /dev/null @@ -1,385 +0,0 @@ -# lang # - -Language Utilities. Easier inheritance, scope handling, type checks. - - - -## clone(val):* - -Clone native types like Object, Array, RegExp, Date and primitives. - -This method will not clone values that are referenced within `val`. It will -only copy the value reference to the new value. If the value is not a plain -object but is an object, it will return the value unchanged. - -### Example - -```js -var a = { foo: 'bar' }; -var b = clone(a); -console.log(a === b); // false -console.log(a.foo === b.foo); // true - -var c = [1, 2, 3]; -var d = clone(b); -console.log(c === d); // false -console.log(c); // [1, 2, 3] -``` - -See: [`deepClone()`](#deepClone) - - - -## createObject(parent, [props]):Object - -Create Object using prototypal inheritance and setting custom properties. - -Mix between [Douglas Crockford Prototypal Inheritance](http://javascript.crockford.com/prototypal.html) and the EcmaScript 5 `Object.create()` method. - -### Arguments - - 1. `parent` (Object) : Parent Object - 2. `[props]` (Object) : Object properties - -### Example - -```js -var base = { - trace : function(){ - console.log(this.name); - } -}; - -var myObj = createObject(base, { - name : 'Lorem Ipsum' -}); - -myObject.trace(); // "Lorem Ipsum" -``` - - - -## ctorApply(constructor, args):Object - -Do `Function.prototype.apply()` on a constructor while maintaining prototype -chain. - -```js -function Person(name, surname) { - this.name = name; - this.surname = surname; -} - -Person.prototype.walk = function(){ - console.log(this.name +' is walking'); -}; - -var args = ['John', 'Doe']; - -// "similar" effect as calling `new Person("John", "Doe")` -var john = ctorApply(Person, args); -john.walk(); // "John is walking" -``` - - - -## deepClone(val, [instanceClone]):* - -Deep clone native types like Object, Array, RegExp, Date and primitives. - -The `instanceClone` function will be invoked to clone objects that are not -"plain" objects (as defined by [`isPlainObject`](#isPlainObject)) if it is -provided. If `instanceClone` is not specified, it will not attempt to clone -non-plain objects, and will copy the object reference. - -### Example - -```js -var a = {foo:'bar', obj: {a:1, b:2}}; -var b = deepClone(a); // {foo:'bar', obj: {a:1, b:2}} -console.log( a === b ); // false -console.log( a.obj === b.obj ); // false - -var c = [1, 2, [3, 4]]; -var d = deepClone(c); // [1, 2, [3, 4]] -var e = c.concat(); // [1, 2, [3, 4]] - -console.log( c[2] === d[2] ); // false -// concat doesn't do a deep clone, arrays are passed by reference -console.log( e[2] === d[2] ); // true - -function Custom() { } -function cloneCustom(x) { return new Custom(); } -var f = { test: new Custom() }; -var g = deepClone(f, cloneCustom); -g.test === f.test // false, since new Custom instance will be created -``` - -See: [`clone()`](#clone) - - - -## defaults(val, ...defaults):void - -Return first value that isn't `null` or `undefined`. - - function doSomethingAwesome(foo, bar) { - // default arguments - foo = defaults(foo, 'lorem'); - bar = defaults(bar, 123); - // ... - } - - - -## inheritPrototype(child, parent):void - -Inherit prototype from another Object. - -```js -function Foo(name){ - this.name = name; -} -Foo.prototype = { - getName : function(){ - return this.name; - } -}; - -function Bar(name){ - this.name = name; -} -//should be called before calling constructor -inheritPrototype(Bar, Foo); - -var myObj = new Bar('lorem ipsum'); -myObj.getName(); // "lorem ipsum" -``` - - -## is(x, y):Boolean - -Check if both values are identical/egal. - -```js -// wtfjs -NaN === NaN; // false --0 === +0; // true - -is(NaN, NaN); // true -is(-0, +0); // false -is('a', 'b'); // false -``` - -See: [`isnt()`](#isnt) - - - -## isnt(x, y):Boolean - -Check if both values are not identical/egal. - -```js -// wtfjs -NaN === NaN; // false --0 === +0; // true - -isnt(NaN, NaN); // false -isnt(-0, +0); // true -isnt('a', 'b'); // true -``` - -See: [`is()`](#is) - - - - -## isArguments(val):Boolean - -If value is an "Arguments" object. - - - -## isArray(val):Boolean - -If value is an Array. Uses native ES5 `Array.isArray()` if available. - - - -## isBoolean(val):Boolean - -If value is a Boolean. - - - -## isDate(val):Boolean - -If value is a Date. - - - -## isEmpty(val):Boolean - -Checks if Array/Object/String is empty. - - -```js -isEmpty(''); // true -isEmpty('bar'); // false -isEmpty([]); // true -isEmpty([1, 2]); // false -isEmpty({}); // true -isEmpty({a:1, b:2}); // false -``` - - -## isFinite(val):Boolean - -Checks if value is Finite. - -Note: This is not the same as native `isFinite`, which will return `true` for -booleans and empty strings. See http://es5.github.com/#x15.1.2.5. - - - -## isFunction(val):Boolean - -If value is a Function. - - - -## isKind(val, kind):Boolean - -If value is of "kind". (used internally by some of the *isSomething* checks). - -Favor the other methods since strings are commonly mistyped and also because -some "kinds" can only be accurately checked by using other methods (e.g. -`Arguments`), some of the other checks are also faster. - -```js -isKind([1,2], 'Array'); // true -isKind(3, 'Array'); // false -isKind(3, 'Number'); // true -``` - -See: [`kindOf()`](#kindOf) - - - -## isInteger(val):Boolean - -Check if value is an integer. - -```js -isInteger(123); // true -isInteger(123.45); // false -isInteger({}); // false -isInteger('foo'); // false -isInteger('123'); // false -``` - - - -## isNaN(val):Boolean - -Check if value is `NaN`. - -Note: This is not the same as native `isNaN`, which will return `true` for -`undefined` and other values. See [ES5 isNaN](http://es5.github.com/#x15.1.2.4) - - - -## isNull(val):Boolean - -If value is `null`. - - - -## isNumber(val):Boolean - -If value is a Number. - - - -## isObject(val):Boolean - -If value is an Object. - - - -## isPlainObject(val):Boolean - -If the value is an Object created by the Object constructor. - - - -## isRegExp(val):Boolean - -If value is a RegExp. - - - -## isString(val):Boolean - -If value is a String. - - - -## isUndefined(val):Boolean - -If value is `undefined`. - - - -## kindOf(val):String - -Gets kind of value (e.g. "String", "Number", "RegExp", "Null", "Date"). -Used internally by `isKind()` and most of the other *isSomething* checks. - -```js -kindOf([1,2]); // "Array" -kindOf('foo'); // "String" -kindOf(3); // "Number" -``` - -See: [`isKind()`](#isKind) - - -## toArray(val):Array - -Convert array-like object into Array or wrap value into Array. - -```js -toArray({ - "0" : "foo", - "1" : "bar", - "length" : 2 -}); // ["foo", "bar"] - -function foo(){ - return toArray(arguments); -} -foo("lorem", 123); // ["lorem", 123] - -toArray("lorem ipsum"); // ["lorem ipsum"] -toArray(window); // [window] -toArray({foo:"bar", lorem:123}); // [{foo:"bar", lorem:123}] -``` - -See: object/values() - - - -## toString(val):String - -Convert any value to its string representation. - -Will return an empty string for `undefined` or `null`, otherwise will convert -the value to its string representation. - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/math.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/math.md deleted file mode 100644 index f45be3ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/math.md +++ /dev/null @@ -1,298 +0,0 @@ -# math # - -Math utilities. - - -## ceil(val[, step]):Number - -Round value up to full steps. Similar to `Math.ceil()` but can round value -to an arbitrary *radix*. - - ceil(7.2); // 8 - ceil(7.8); // 8 - ceil(7, 5); // 10 - ceil(11, 5); // 15 - ceil(15, 5); // 15 - -### Common use cases - -Round values by increments of 5/10/1000/etc. - -See: [`round()`](#round), [`floor()`](#floor), [`countSteps()`](#countSteps) - - - -## clamp(val, min, max):Number - -Clamps value inside range. - -`clamp()` is extremely useful in cases where you need to limit a value inside -a certain range. So instead of doing a complex `if/else` to filter/process the -value you can restrict it to always be inside the desired range: - - clamp(-5, 0, 10); // 0 - clamp(7, 1, 10); // 7 - clamp(8, 1, 10); // 8 - clamp(10, 1, 10); // 10 - clamp(11, 1, 10); // 10 - -If the value is smaller than `min` it returns the `min`, if `val` is higher -than `max` it returns `max`. - -### Common use cases - -Any situation where you need to limit a number inside a range like: slider -position, image galleries <small>(so user can't skip to an image that doesn't -exist)</small>, drag and drop, scroll boundaries, etc. - -See: [`loop()`](#loop) - - - - -## countSteps(val, step[, overflow]):Number - -Count number of full steps. - -### Arguments: - - 1. `val` (Number) : Value. - 2. `step` (Number) : Step size. - 3. `[overflow]` (Number) : Maximum number of steps, nSteps will loop if -`>=` than overflow. - - -Count steps is very useful for cases where you need to know how many "full -steps" the number *completed*. Think of it as a division that only returns -integers and ignore remainders. - - countSteps(3, 5); // 0 - countSteps(6, 5); // 1 - countSteps(12, 5); // 2 - countSteps(18, 5); // 3 - countSteps(21, 5); // 4 - -You can also set an `overflow` which will reset the *counter* before reaching -this number. - - countSteps(3, 5, 3); // 0 - countSteps(6, 5, 3); // 1 - countSteps(12, 5, 3); // 2 - countSteps(18, 5, 3); // 0 - countSteps(21, 5, 3); // 1 - -### Common use cases - -#### How many items fit inside an area: - - var containerWidth = 100; - var itemWidth = 8; - var howManyFit = countSteps(containerWidth, itemWidth); // 12 - -#### Split value into different scales or convert value from one scale to another - -From [mout/time/parseMs](time.html#parseMs): - - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - // {days:27, hours:4, minutes:26, seconds:5, milliseconds:454} - parseMs(2348765454); - - - -## floor(val[, step]):Number - -Round value down to full steps. Similar to `Math.floor()` but can round value -to an arbitrary *radix*. (formerly `snap`) - - floor(7.2); // 7 - floor(7.8); // 7 - floor(7, 5); // 5 - floor(11, 5); // 10 - floor(15, 5); // 15 - -### Common use cases - -Round values by increments of 5/10/1000/etc. - -See: [`round()`](#round), [`ceil()`](#ceil), [`countSteps()`](#countSteps) - - - -## inRange(val, min, max[, threshold]):Boolean - -Checks if value is inside the range. - - inRange(-6, 1, 10); // false - inRange( 5, 1, 10); // true - inRange(12, 1, 10); // false - -The threshold can be useful when you want granular control of what should match -and/or the precision could change at runtime or by some configuration option, -avoids the clutter of adding/subtracting the `threshold` from `mix` and `max`. - - inRange(12, 1, 10, 2); // true - inRange(13, 1, 10, 2); // false - -### Common use cases - -Anything that needs to check if value is inside a range, be it collision -detection, limiting interaction by mouse position, ignoring parts of the logic -that shouldn't happen if value isn't valid, simplify `if/else` conditions, -making code more readable, etc... - - - - -## isNear(val, target, threshold):Boolean - -Check if value is close to target. - -Similar to `inRange()` but used to check if value is close to a certain value -or match the desired value. Basically to simplify `if/else` conditions and to -make code clearer. - - isNear( 10.2, 10, 0.5); // true - isNear( 10.5, 10, 0.5); // true - isNear(10.51, 10, 0.5); // false - -### Common use cases - -Games where a certain action should happen if an *actor* is close to a target, -gravity fields, any numeric check that has some tolerance. - - - - -## lerp(ratio, start, end):Number - -Linear interpolation. - - lerp(0.5, 0, 10); // 5 - lerp(0.75, 0, 10); // 7.5 - -### Common use cases - -Linear interpolation is commonly used to create animations of elements moving -from one point to another, where you simply update the current ratio (which in -this case represents time) and get back the position of the element at that -"frame". - -The core idea of `lerp` is that you are using a number that goes from `0` to -`1` to specify a ratio inside that scale. This concept can be applied to -convert numbers from different scales easily. - -See: [`map()`](#map), [`norm()`](#norm) - - - - -## loop(val, min, max):Number - -Loops value inside range. Will return `min` if `val > max` and `max` if `val -< min`, otherwise it returns `val`. - - loop(-1, 0, 10); // 10 - loop( 1, 0, 10); // 1 - loop( 5, 0, 10); // 5 - loop( 9, 0, 10); // 9 - loop(10, 0, 10); // 10 - loop(11, 0, 10); // 0 - -Similar to [`clamp()`](#clamp) but *loops* the value inside the range when an -overflow occurs. - -### Common use cases - -Image galleries, infinite scroll, any kind of logic that requires that the -first item should be displayed after the last one or the last one should be -displayed after first if going on the opposite direction. - -See: [`clamp()`](#clamp) - - - - -## map(val, min1, max1, min2, max2):Number - -Maps a number from one scale to another. - - map(3, 0, 4, -1, 1) // 0.5 - map(3, 0, 10, 0, 100) // 30 - -### Common use cases - -Very useful to convert values from/to multiple scales. - -Let's suppose we have a slider that needs to go from `2000` to `5000` and that slider -has `300px` of width, here is how we would translate the knob position into the -current value: - - var knobX = 123; - var sliderWid = 300; - var minVal = 2000; - var maxVal = 5000; - - var curVal = map(knobX, 0, sliderWid, minVal, maxVal); // 3230 - -See: [`lerp()`](#lerp), [`norm()`](#norm) - - - - -## norm(val, min, max):Number - -Gets normalized ratio of value inside range. - - norm(50, 0, 100); // 0.5 - norm(75, 0, 100); // 0.75 - -### Common use cases - -Convert values between scales, used by [`map()`](#map) internally. Direct -opposite of [`lerp()`](#lerp). - -See: [`lerp()`](#lerp), [`map()`](#map) - - - -## round(val[, step]):Number - -Round value to full steps. Similar to `Math.round()` but allow setting an -arbitrary *radix*. - - // default - round(0.22); // 0 - round(0.49); // 0 - round(0.51); // 1 - - // custom radix - round(0.22, 0.5); // 0 - round(0.49, 0.5); // 0.5 - round(0.51, 0.5); // 0.5 - round(0.74, 0.5); // 0.5 - round(0.75, 0.5); // 1 - round(1.24, 0.5); // 1 - round(1.25, 0.5); // 1.5 - round(1.74, 0.5); // 1.5 - -### Common use cases - -Round values by increments of 0.5/5/10/1000/etc. - -See: [`floor()`](#floor), [`ceil()`](#ceil), [`countSteps()`](#countSteps) - - - -------------------------------------------------------------------------------- - -For more usage more info check the specs and source code. - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/number.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/number.md deleted file mode 100644 index 8d93865b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/number.md +++ /dev/null @@ -1,225 +0,0 @@ -# number # - -Number utilities. - - -## abbreviate(val[, nDecimalDigits, dictionary]):String - -Abbreviate number to thousands (K), millions (M) or billions (B). - -The default value for `nDecimalDigits` is `1`. - -### Example - - abbreviate(123456); // "123.5K" - abbreviate(12345678); // "12.3M" - abbreviate(1234567890); // "1.2B" - -You can set the amount of decimal digits (default is `1`): - - abbreviate(543); // "0.5K" - abbreviate(543, 1); // "0.5K" - abbreviate(543, 2); // "0.54K" - abbreviate(543, 3); // "0.543K" - -You can customize the abbreviation by passing a custom "dictionary": - - var _ptbrDict = { - thousands : ' mil', - millions : ' Mi', - billions : ' Bi' - }; - function customAbbr(val) { - return abbreviate(val, 1, _ptbrDict); - } - - customAbbr(123456); // "123.5 mil" - customAbbr(12345678); // "12.3 Mi" - customAbbr(1234567890); // "1.2 Bi" - - - -## currencyFormat(val[, nDecimalDigits, decimalSeparator, thousandsSeparator]):String - -Format a number as currency. - -### Example: - - currencyFormat(1000); // "1,000.00" - currencyFormat(1000, 1); // "1,000.0" - currencyFormat(1000, 2, ',', '.'); // "1.000,00" - - - -## enforcePrecision(val, nDecimalDigits):Number - -Enforce a specific amount of decimal digits and also fix floating point -rounding issues. - -### Example: - -```js -enforcePrecision(0.615, 2); // 0.62 -enforcePrecision(0.625, 2); // 0.63 -//floating point rounding "error" (rounds to odd number) -+(0.615).toFixed(2); // 0.61 -+(0.625).toFixed(2); // 0.63 -``` - - - -## MAX_INT:Number - -Maximum 32-bit signed integer value. `Math.pow(2, 31) - 1` - -### Example: - -```js -console.log( MAX_INT ); // 2147483647 -``` - - -## MAX_UINT:Number - -Maximum 32-bit unsigned integer value. `Math.pow(2, 32) - 1` - -### Example: - -```js -console.log( MAX_UINT ); // 4294967295 -``` - - -## MIN_INT:Number - -Minimum 32-bit signed integer value. `Math.pow(2, 31) * -1`. - -### Example: - -```js -console.log( MIN_INT ); // -2147483648 -``` - - -## pad(n, minLength[, char]):String - -Add padding zeros if `n.length` < `minLength`. - -### Example: - -```js -pad(1, 5); // "00001" -pad(12, 5); // "00012" -pad(123, 5); // "00123" -pad(1234, 5); // "01234" -pad(12345, 5); // "12345" -pad(123456, 5); // "123456" - -// you can also specify the "char" used for padding -pad(12, 5, '_'); // "___12" -``` - -see: [string/lpad](./string.html#lpad) - - - -## rol(val, shift):Number - -Bitwise circular shift left. - -More info at [Wikipedia#Circular_shift](http://en.wikipedia.org/wiki/Circular_shift) - - - -## ror(val, shift):Number - -Bitwise circular shift right. - -More info at [Wikipedia#Circular_shift](http://en.wikipedia.org/wiki/Circular_shift) - - - -## sign(val):Number - -Returns `-1` if value is negative, `0` if the value is `0` and `1` if value is positive. Useful for -multiplications. - -```js -sign(-123); // -1 -sign(123); // 1 -sign(0); // 0 -``` - - - -## toInt(val):Number - -"Convert" value into an 32-bit integer. Works like `Math.floor` if `val > 0` and -`Math.ceil` if `val < 0`. - -**IMPORTANT:** val will wrap at [number/MIN_INT](#MIN_INT) and -[number/MAX_INT](#MAX_INT). - -Created because most people don't know bitwise operations and also because this -feature is commonly needed. - -[Perf tests](http://jsperf.com/vs-vs-parseint-bitwise-operators/7) - -### Example: - -```js -toInt(1.25); // 1 -toInt(0.75); // 0 -toInt(-0.55); // 0 -toInt(-5.0001) // -5 -``` - - - -## toUInt(val):Number - -"Convert" value into an 32-bit unsigned integer. - -Works like AS3#uint(). - -**IMPORTANT:** val will wrap at 2^32. - -### Example: - -```js -toUInt(1.25); // 1 -toUInt(0.75); // 0 -toUInt(-0.55); // 0 -toUInt(-5.0001); // 4294967291 -toUInt(Math.pow(2,32) - 0.5); // 4294967295 -toUInt(Math.pow(2,32) + 0.5); // 0 -``` - - -## toUInt31(val):Number - -"Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - -Useful since all bitwise operators besides `>>>` treat numbers as signed -integers. - -**IMPORTANT:** val will wrap at 2^31 and negative numbers will be treated as -`zero`. - -### Example: - -```js -toUInt31(1.25); // 1 -toUInt31(0.75); // 0 -toUInt31(-0.55); // 0 -toUInt31(-5.0001); // 0 -toUInt31(Math.pow(2,31) - 0.5); // 21474836470 -toUInt31(Math.pow(2,31) + 0.5); // 0 -``` - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/object.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/object.md deleted file mode 100644 index b4d5e483..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/object.md +++ /dev/null @@ -1,780 +0,0 @@ -# object # - -Object utilities. - - - -## bindAll(obj, [...methodNames]):void - -Bind methods of the target object to always execute on its own context -(ovewritting the original function). - -See: [function/bind](./function.html#bind) - -```js -var view = { - name: 'Lorem Ipsum', - logNameOnClick: function() { - console.log(this.name); - } -}; - -// binds all methods by default -bindAll(view); -jQuery('#docs').on('click', view.logNameOnClick); -``` - -You can also specify the list of methods that you want to bind (in case you -just want to bind a few of them). - -```js -// only the listed methods will be bound to `obj` context -bindAll(obj, 'logNameOnClick', 'doAwesomeStuffOnDrag'); -``` - - - -## contains(obj, value):Boolean - -Similar to [Array/contains](array.html#contains). Checks if Object contains -value. - -```js -var obj = { - a: 1, - b: 2, - c: 'bar' -}; -contains(obj, 2); // true -contains(obj, 'foo'); // false -``` - - - -## deepEquals(a, b, [callback]):Boolean - -Recursively tests whether two objects contain the same keys and equal values. - -`callback` specifies the equality comparison function used to compare -non-object values. It defaults to using the strict equals (`===`) operator. - -If the values are both an object, it will recurse into the objects, checking if -their keys/values are equal. It will only check the keys and values contained -by the objects; it will not check the objects' prototypes. If the either of -the values are not objects, they will be checked using the `callback` function. - -Example: - -```js -deepEquals({ a: 1 }, { a: 1 }); // true -deepEquals({ value: { a: 1 } }, { value: { a: 1 } }); // true -deepEquals({ value: { a: 1 } }, { value: { a: 2 } }); // false -deepEquals({ value: { a: 1 } }, { value: { a: 1, b: 2 } }); // false -deepEquals({}, null); // false -deepEquals(null, null); // true -deepEquals( - { a: { b: 1 } }, - { a: { b: '1' } }, - function(a, b) { return a == b; }); // true -``` - -See: [`equals()`](#equals) - - - -## deepFillIn(target, ...objects):Object - -Fill missing properties recursively. - -It's different from `deepMixIn` since it won't override any existing property. -It's also different from `merge` since it won't clone child objects during the -process. - -It returns the target object and mutates it in place. - -See: [`fillIn()`](#fillIn), [`deepMixIn()`](#deepMixIn), [`merge()`](#merge) - -```js -var base = { - foo : { - bar : 123 - }, - lorem : 'ipsum' -}; -var options = deepFillIn({foo : { baz : 45 }, lorem : 'amet'}, base); -// > {foo: {bar:123, baz : 45}, lorem : 'amet'} -``` - - - -## deepMatches(target, pattern):Boolean - -Recursively checks if object contains all properties/value pairs. When both -the target and pattern values are arrays, it checks that the target value -contain matches for all the items in the pattern array (independent of order). - -```js -var john = { - name: 'John', - age: 22, - pets: [ - { type: 'cat', name: 'Grumpy Cat' }, - { type: 'dog', name: 'Hawk' } - ] -}; - -deepMatches(john, { name: 'John' }); // true -deepMatches(john, { age: 21 }); // false -deepMatches(john, { pets: [ { type: 'cat' } ] }); // true -deepMatches(john, { pets: [ { name: 'Hawk' } ] }); // true -deepMatches(john, { pets: [ { name: 'Hairball' } ] }); // false -``` - -See [`matches()`](#matches) - - - -## deepMixIn(target, ...objects):Object - -Mixes objects into the target object, recursively mixing existing child objects -as well. - -It will only recursively mix objects if both (existing and new) values are -plain objects. - -Returns the target object. Like [`merge()`](#merge), but mutates the target -object, and does not clone child objects. - -```js -var target = { - foo: { - name: "foo", - id: 1 - } -}; - -deepMixIn(target, { foo: { id: 2 } }); -console.log(target); // { foo: { name: "foo", id: 2 } } -``` - -See: [`mixIn()`](#mixIn), [`merge()`](#merge), [`deepFillIn()`](#deepFillIn) - - - -## equals(a, b, [callback]):Boolean - -Tests whether two objects contain the same keys and values. - -`callback` specifies the equality comparison function used to compare the -values. It defaults to using the strict equals (`===`) operator. - -It will only check the keys and values contained by the objects; it will not -check the objects' prototypes. If either of the values are not objects, they -will be compared using the `callback` function. - -```js -equals({}, {}); // true -equals({ a: 1 }, { a: 1 }); // true -equals({ a: 1 }, { a: 2 }); // false -equals({ a: 1, b: 2 }, { a: 1 }); // false -equals({ a: 1 }, { a: 1, b: 2 }); // false -equals(null, null); // true -equals(null, {}); // false -equals({ a: 1 }, { a: '1' }, function(a, b) { return a == b; }); // true -``` - - - -## every(obj, callback, [thisObj]):Boolean - -Similar to [Array/every](array.html#every). Tests whether all properties in the -object pass the test implemented by the provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -every(obj, isNumber); // false -``` - - - -## fillIn(obj, ...default):Object - -Fill in missing properties in object with values from the *defaults* objects. - - var base = { - foo : 'bar', - num : 123 - }; - - fillIn({foo:'ipsum'}, base); // {foo:'ipsum', num:123} - -PS: it allows merging multiple objects at once, the first ones will take -precedence. - -See: [`mixIn()`](#mixIn), [`merge()`](#merge), [`deepFillIn()`](#deepFillIn) - - - -## filter(obj, callback, [thisObj]) - -Returns a new object containing all properties where `callback` returns true, -similar to Array/filter. It does not use properties from the object's -prototype. - -Callback receives the same arguments as `forOwn()`. - -See: [`forOwn()`](#forOwn), [`forIn()`](#forIn), [`pick()`](#pick) - -```js -var obj = { - foo: 'value', - bar: 'bar value' -}; - -// returns { bar: 'bar value' } -filter(obj, function(v) { return value.length > 5; }); - -// returns { foo: 'value' } -filter(obj, function(v, k) { return k === 'foo'; }); -``` - - - -## find(obj, callback, [thisObj]) - -Loops through all the properties in the Object and returns the first one that -passes a truth test (callback), similar to [Array/find](array.html#find). -Unlike Array/find, order of iteration is not guaranteed. - -```js -var obj = { - a: 'foo', - b: 12 -}; - -find(obj, isString); // 'foo' -find(obj, isNumber); // 12 -``` - - - -## forIn(obj, callback[, thisObj]) - -Iterate over all properties of an Object, similar to -[Array/forEach](array.html#forEach). - -It [avoids don't enum bug on IE](https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug). -It **will** iterate over inherited (enumerable) properties from the prototype. - -It allows exiting the iteration early by returning `false` on the callback. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys), [`values()`](#values) - -### Callback arguments - -Callback will receive the following arguments: - - 1. Property Value (*) - 2. Key name (String) - 3. Target object (Object) - -### Example - -```js -function Foo(){ - this.foo = 1; - this.bar = 2; -} - -Foo.prototype.lorem = 4; - -var obj = new Foo(); - -var result = 0; -var keys = []; - -forIn(obj, function(val, key, o){ - result += val; - keys.push(key); -}); - -console.log(result); // 7 -console.log(keys); // ['foo', 'bar', 'lorem'] -``` - - - -## forOwn(obj, callback[, thisObj]) - -Iterate over all own properties from an Object, similar to -[Array/forEach](array.html#forEach). - -It [avoids don't enum bug on IE](https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug). -Notice that it **won't** iterate over properties from the prototype. - -It allows exiting the iteration early by returning `false` on the callback. - -See: [`forIn()`](#forIn), [`keys()`](#keys), [`values()`](#values) - -### Callback arguments - -Callback will receive the following arguments: - - 1. Property Value (*) - 2. Key name (String) - 3. Target object (Object) - -### Example - -```js -function Foo(){ - this.foo = 1; - this.bar = 2; -} - -// will be ignored -Foo.prototype.lorem = 4; - -var obj = new Foo(); - -var result = 0; -var keys = []; - -forOwn(obj, function(val, key, o){ - result += val; - keys.push(key); -}); - -console.log(result); // 3 -console.log(keys); // ['foo', 'bar'] -``` - - - -## functions(obj):Array - -Returns a sorted list of all enumerable properties that have function values -(including inherited properties). - -```js -var obj = { - foo : function(){}, - bar : 'baz' -}; -functions(obj); // ['foo'] -``` - - - -## get(obj, propName):* - -Returns nested property value. Will return `undefined` if property doesn't -exist. - -See: [`set()`](#set), [`namespace()`](#namespace), [`has()`](#has) - -```js -var lorem = { - ipsum : { - dolor : { - sit : 'amet' - } - } - }; - -get(lorem, 'ipsum.dolor.sit'); // "amet" -get(lorem, 'foo.bar'); // undefined -``` - - - -## has(obj, propName):Boolean - -Checks if object contains a child property. Useful for cases where you need to -check if an object contain a *nested* property. It will get properties -inherited by the prototype. - -see: [`hasOwn()`](#hasOwn), [`get()`](#get) - -```js -var a = { - b : { - c : 123 - } - }; - -has(a, 'b.c'); // true -has(a, 'foo.c'); // false -``` - -### Common use case - -```js -if( has(a, 'foo.c') ){ // false - // ... -} - -if( a.foo.c ){ // ReferenceError: `foo` is not defined - // ... -} -``` - - - -## hasOwn(obj, propName):Boolean - -Safer `Object.hasOwnProperty`. Returns a boolean indicating whether the object -has the specified property. - -see: [`has()`](#has) - -```js -var obj = { - foo: 1, - hasOwnProperty : 'bar' -}; - -obj.hasOwnProperty('foo'); // ERROR! hasOwnProperty is not a function - -hasOwn(obj, 'foo'); // true -hasOwn(obj, 'hasOwnProperty'); // true -hasOwn(obj, 'toString'); // false -``` - - - -## keys(obj):Array - -Returns an array of all own enumerable properties found upon a given object. -It will use the native `Object.keys` if present. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`values()`](#values) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -keys(obj); // ['foo', 'bar', 'lorem'] -``` - - - -## map(obj, callback, [thisObj]):Object - -Returns a new object where the property values are the result of calling the -callback for each property in the original object, similar to Array/map. - -The callback function receives the same arguments as in `forOwn()`. - -See: [`forOwn()`](#forOwn) - -```js -var obj = { foo: 1, bar: 2 }, - data = { foo: 0, bar: 1 }; - -map(obj, function(v) { return v + 1; }); // { foo: 2, bar: 3 } -map(obj, function(v, k) { return k; }); // { foo: "foo", bar: "bar" } -map(obj, function(v, k) { return this[k]; }, data); // { foo: 0, bar: 1 } -``` - - - -## matches(obj, props):Boolean - -Checks if object contains all properties/values pairs. Useful for validation -and filtering. - -```js -var john = {age:25, hair:'long', beard:true}; -var mark = {age:27, hair:'short', beard:false}; -var hippie = {hair:'long', beard:true}; -matches(john, hippie); // true -matches(mark, hippie); // false -``` - -See [`deepMatches()`](#deepMatches) - - - -## merge(...objects):Object - -Deep merges objects. Note that objects and properties will be cloned during the -process to avoid undesired side effects. It return a new object and won't -affect source objects. - -```js -var obj1 = {a: {b: 1, c: 1, d: {e: 1, f: 1}}}; -var obj2 = {a: {b: 2, d : {f : 'yeah'} }}; - -merge(obj1, obj2); // {a: {b : 2, c : 1, d : {e : 1, f : 'yeah'}}} -``` - -See: [`deepMixIn()`](#deppMixIn), [`deepFillIn()`](#deepFillIn) - - - -## max(obj[, iterator]):* - -Returns maximum value inside object or use a custom iterator to define how -items should be compared. Similar to [Array/max](array.html#max). - -See: [`min()`](#min) - -```js -max({a: 100, b: 2, c: 1, d: 3, e: 200}); // 200 -max({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'lorem' -``` - - - -## min(obj[, iterator]):* - -Returns minimum value inside object or use a custom iterator to define how -items should be compared. Similar to [Array/min](array.html#min). - -See: [`max()`](#max) - -```js -min({a: 100, b: 2, c: 1, d: 3, e: 200}); // 1 -min({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'foo' -``` - - - -## mixIn(target, ...objects):Object - -Combine properties from all the objects into first one. - -This method affects target object in place, if you want to create a new Object -pass an empty object as first parameter. - -### Arguments - - 1. `target` (Object) : Target Object. - 2. `...objects` (...Object) : Objects to be combined (0...n objects). - -### Example - -```js -var a = {foo: "bar"}; -var b = {lorem: 123}; - -mixIn({}, a, b); // {foo: "bar", lorem: 123} -console.log(a); // {foo: "bar"} - -mixIn(a, b); // {foo: "bar", lorem: 123} -console.log(a); // {foo: "bar", lorem: 123} -``` - -See: [`fillIn()`](#fillIn), [`merge()`](#merge) - - - - -## namespace(obj, propName):Object - -Creates an empty object inside namespace if not existent. Will return created -object or existing object. - -See: [`get()`](#get), [`set()`](#set) - -```js -var obj = {}; -namespace(obj, 'foo.bar'); // {} -console.log(obj); // {foo:{bar:{}}} -``` - - - -## pick(obj, ...keys):Object - -Return a copy of the object that contains only the whitelisted keys. - -See: [`filter()`](#filter) - -```js -var user = { - firstName : 'John', - lastName : 'Doe', - dob : '1985/07/23', - gender : 'male' -}; - -// can pass an array of keys as second argument -var keys = ['firstName', 'dob'] -pick(user, keys); // {firstName:"John", dob: "1985/07/23"} - -// or multiple arguments -pick(user, 'firstName', 'lastName'); // {firstName:"John", lastName: "Doe"} -``` - - - -## pluck(obj, propName):Object - -Extract an object containing property values with keys as they appear in the -passed object. - -```js -var users = { - first: { - name : 'John', - age : 21 - }, - second: { - name : 'Mary', - age : 25 - } -}; - -pluck(users, 'name'); // {first: 'John', second: 'Mary'} ); -pluck(users, 'age'); // {first: 21, second: 25} ); -``` - - - -## reduce(obj, callback, initial, [thisObj]):* - -Similar to [Array/reduce](array.html#reduce). - -Apply a function against an accumulator and each property of the object (order -is undefined) as to reduce it to a single value. - -```js -var obj = {a: 1, b: 2, c: 3, d: 4}; - -function sum(prev, cur, key, list) { - compare1.push(prev); - return prev + cur; -} - -reduce(obj, sum); // 10 -``` - - - -## reject(obj, callback, thisObj):Object - -Returns a new object containing all properties where `callback` returns true, -similar to [Array/reject](array.html#reject). It does not use properties from -the object's prototype. Opposite of [`filter()`](#filter). - -See [`filter()`](#filter) - -### Example - -```js -var obj = {a: 1, b: 2, c: 3, d: 4, e: 5}; -reject(obj, function(x) { return (x % 2) !== 0; }); // {b: 2, d: 4} -``` - - - -## values(obj):Array - -Returns an array of all own enumerable properties values found upon a given object. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -values(obj); // [1, 2, 3] -``` - - - -## set(obj, propName, value) - -Sets a nested property value. - -See: [`get()`](#get), [`namespace()`](#namespace) - -```js -var obj = {}; -set(obj, 'foo.bar', 123); -console.log(obj.foo.bar); // 123 -console.log(obj); // {foo:{bar:123}} -``` - - - -## size(obj):Number - -Returns the count of own enumerable properties found upon a given object. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -size(obj); // 3 -``` - - - -## some(obj, callback, [thisObj]):Boolean - -Similar to [Array/some](array.html#some). Tests whether any properties in the -object pass the test implemented by the provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -some(obj, isNumber); // true -``` - - - -## unset(obj, propName):Boolean - -Delete object property if existent and returns a boolean indicating succes. It -will also return `true` if property doesn't exist. - -Some properties can't be deleted, to understand why [check this -article](http://perfectionkills.com/understanding-delete/). - -See: [`set()`](#set) - -```js -var lorem = { - ipsum : { - dolor : { - sit : 'amet' - } - } - }; - -unset(lorem, 'ipsum.dolor.sit'); // true -console.log(lorem.ipsum.dolor); // {} -unset(lorem, 'foo.bar'); // true -``` diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/queryString.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/queryString.md deleted file mode 100644 index 1be3c102..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/queryString.md +++ /dev/null @@ -1,115 +0,0 @@ -# queryString # - -Utilities for query string manipulation. - - - -## contains(url, paramName):Boolen - -Checks if query string contains parameter. - -### Arguments: - - 1. `url` (String) : URL or query string. - 2. `paramName` (String) : Parameter name. - -### Example: - -```js -var url = 'example.com/?lorem=ipsum'; -contains(url, 'lorem'); // true -contains(url, 'foo'); //false -``` - - - -## decode(queryStr[, shouldTypecast]):Object - -Parses query string and creates an object of keys => vals. - -Will typecast value with [`string/typecast`](string.html#typecast) by default -and decode string parameters using `decodeURIComponent()`. - -```js -var query = '?foo=bar&lorem=123'; -decode(query); // {foo: "bar", lorem: 123} -decode(query, false); // {foo: "bar", lorem: "123"} -``` - - -## encode(obj):String - -Encode object into a query string. - -Will encode parameters with `encodeURIComponent()`. - -```js -encode({foo: "bar", lorem: 123}); // "?foo=bar&lorem=123" -``` - - -## getParam(url, param[, shouldTypecast]):* - -Get query parameter value. - -Will typecast value with [`string/typecast`](string.html#typecast) by default. - -See: [`setParam()`](#setParam) - -### Arguments: - - 1. `url` (String) : Url. - 2. `param` (String) : Parameter name. - 3. `[shouldTypecast]` (Boolean) : If it should typecast value. - -### Example: - -```js -var url = 'example.com/?foo=bar&lorem=123&ipsum=false'; -getParam(url, 'dolor'); // "amet" -getParam(url, 'lorem'); // 123 -getParam(url, 'lorem', false); // "123" -``` - - -## parse(url[, shouldTypecast]):Object - -Parses URL, extracts query string and decodes it. - -It will typecast all properties of the query object unless second argument is -`false`. - -Alias to: `decode(getQuery(url))`. - -```js -var url = 'example.com/?lorem=ipsum&a=123'; -parse(url); // {lorem: "ipsum", a: 123} -parse(url, false); // {lorem: "ipsum", a: "123"} -``` - - -## getQuery(url):String - -Gets full query as string with all special chars decoded. - -```js -getQuery('example.com/?lorem=ipsum'); // "?lorem=ipsum" -``` - - -## setParam(url, paramName, value):String - -Add new query string parameter to URL or update existing value. - -See: [`getParam()`](#getParam) - -```js -setParam('?foo=bar&lorem=0', 'lorem', 'ipsum'); // '?foo=bar&lorem=ipsum' -setParam('?lorem=1', 'foo', 123); // '?lorem=1&foo=123' -``` - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/random.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/random.md deleted file mode 100644 index b058b4e0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/random.md +++ /dev/null @@ -1,218 +0,0 @@ -# random # - -Pseudo-random generators. - -mout uses `Math.random` by default on all the pseudo-random generators, if -you need a seeded random or a better algorithm see the [`random()`](#random) -documentation for instructions. - - - -## choice(...items):* - -Returns a random element from the supplied arguments or from an array if single -argument is an array. - -### Example: - -```js -choice(1, 2, 3, 4, 5); // 3 - -var arr = ['lorem', 'ipsum', 'dolor']; -choice(arr); // 'dolor' -``` - - - -## guid():String - -Generates a pseudo-random [Globally Unique Identifier](http://en.wikipedia.org/wiki/Globally_unique_identifier) (v4). - -Since the total number of GUIDs is 2<sup>122</sup> the chance of generating the -same value twice is negligible. - -**Important:** this method uses `Math.random` by default so the UUID isn't -*safe* (sequence of outputs can be predicted in some cases), check the -[`random()`](#random) documentation for more info on how to replace the default -PRNG if you need extra safety or need *seeded* results. - -See: [`randHex()`](#randHex), [`random()`](#random) - -### Example: - -```js -guid(); // 830e9f50-ac7f-4369-a14f-ed0e62b2fa0b -guid(); // 5de3d09b-e79c-4727-932b-48c49228d508 -``` - - - -## rand([min], [max]):Number - -Gets a random number inside range or snap to min/max values. - -### Arguments: - - 1. `[min]` (Number) : Minimum value. Defaults to `number/MIN_INT`. - 2. `[max]` (Number) : Maximum value. Defaults to `number/MAX_INT`. - - -### Example: - -```js -rand(); // 448740433.55274725 -rand(); // -31797596.097682 -rand(0, 10); // 7.369723 -rand(0, 10); // 5.987042 -``` - -See: [`random()`](#random) - - - -## randBit():Number - -Returns a random "bit" (0 or 1). Useful for addition/subtraction. - -It's slightly faster than `choice(0, 1)` since implementation is simpler (not -that it will make a huge difference in most cases). - -See: [`choice()`](#choice) - -### Example: - -```js -randBit(); // 1 -randBit(); // 0 - -//same effect as -choice(0, 1); -``` - - - -## randHex([size]):String - -Returns a random hexadecimal string. - -The default `size` is `6`. - -### Example: - -```js -randHex(); // "dd8575" -randHex(); // "e6baeb" -randHex(2); // "a2" -randHex(30); // "effd7e2ad9a4a3067e30525fab983a" -``` - - - -## randInt([min], [max]):Number - -Gets a random integer inside range or snap to min/max values. - -### Arguments: - - 1. `[min]` (Number) : Minimum value. Defaults to `number/MIN_INT`. - 2. `[max]` (Number) : Maximum value. Defaults to `number/MAX_INT`. - - -### Example: - -```js -randInt(); // 448740433 -randInt(); // -31797596 -randInt(0, 10); // 7 -randInt(0, 10); // 5 -``` - - - -## randSign():Number - -Returns a random "sign" (-1 or 1). Useful for multiplications. - -It's slightly faster than `choice(-1, 1)` since implementation is simpler (not -that it will make a huge difference in most cases). - -See: [`choice()`](#choice) - -### Example: - -```js -randSign(); // -1 -randSign(); // 1 - -//same effect as -choice(-1, 1); -``` - - - -## random():Number - -Returns a random number between `0` and `1`. Same as `Math.random()`. - -```js -random(); // 0.35435103671625257 -random(); // 0.8768321881070733 -``` - -**Important:** No methods inside mout should call `Math.random()` -directly, they all use `random/random` as a proxy, that way we can -inject/replace the pseudo-random number generator if needed (ie. in case we -need a seeded random or a better algorithm than the native one). - -### Replacing the PRNG - -In some cases we might need better/different algorithms than the one provided -by `Math.random` (ie. safer, seeded). - -Because of licensing issues, file size limitations and different needs we -decided to **not** implement a custom PRNG and instead provide a easy way to -override the default behavior. - [issue #99](https://github.com/millermedeiros/amd-utils/issues/99) - -If you are using mout with a loader that supports the [AMD map -config](https://github.com/amdjs/amdjs-api/wiki/Common-Config), such as -[RequireJS](http://requirejs.org/), you can use it to replace the PRNG -(recommended approach): - -```js -requirejs.config({ - map : { - // all modules will load "my_custom_prng" instead of - // "mout/random/random" - '*' : { - 'mout/random/random' : 'my_custom_prng' - } - } -}); -``` - -You also have the option to override `random.get` in case you are using -mout on node.js or with a loader which doesn't support the map config: - -```js -// replace the PRNG -var n = 0; -random.get = function(){ - return ++n % 2? 0 : 1; // not so random :P -}; -random(); // 0 -random(); // 1 -random(); // 0 -random(); // 1 -``` - -See this [detailed explanation about PRNG in -JavaScript](http://baagoe.org/en/w/index.php/Better_random_numbers_for_javascript) -to understand the issues with the native `Math.random` and also for a list of -algorithms that could be used instead. - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/string.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/string.md deleted file mode 100644 index 2b282315..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/string.md +++ /dev/null @@ -1,594 +0,0 @@ -# string # - -String utilities. - - -## camelCase(str):String - -Convert string to "camelCase" text. - -See: [`pascalCase()`](#pascalCase), [`unCamelCase()`](#unCamelCase) - -### Example - -```js -camelCase('lorem-ipsum-dolor'); // "loremIpsumDolor" -camelCase('lorem ipsum dolor'); // "loremIpsumDolor" -``` - - - -## contains(str, substring, [fromIndex]):Boolean - -Checks if string contains the given substring. - -See: [`startsWith()`](#startsWith), [`endsWith()`](#endsWith) - -### Example - -```js -contains('lorem', 'or'); // true -contains('lorem', 'bar'); // false -``` - - - -## crop(str, maxChars, [append]):String - -Truncate string at full words. Alias to `truncate(str, maxChars, append, true);`. - -See: [`truncate()`](#truncate) - -### Example - -```js -crop('lorem ipsum dolor', 10); // "lorem..." -crop('lorem ipsum dolor', 10, '+'); // "lorem+" -``` - - - -## endsWith(str, suffix):Boolean - -Checks if string ends with specified suffix. - -See: [`startsWith()`](#startsWith), [`contains()`](#contains) - -### Example - -```js -endsWith('lorem ipsum', 'lorem'); // false -endsWith('lorem ipsum', 'ipsum'); // true -``` - - - -## escapeHtml(str):String - -Escapes HTML special chars (`>`, `<`, `&`, `"`, `'`). - -See: [`unescapeHtml()`](#unescapeHtml) - -### Example - -```js -escapeHtml('lorem & "ipsum"'); // "lorem &amp; &quot;ipsum&quot;" -``` - - - -## escapeRegExp(str):String - -Escape special chars to be used as literals in RegExp constructors. - -### Example - -```js -str = escapeRegExp('[lorem.ipsum]'); // "\\[lorem\\.ipsum\\]" -reg = new RegExp(str); // /\[lorem\.ipsum\]/ -``` - - - -## escapeUnicode(str[, shouldEscapePrintable]):String - -Unicode escape chars. - -It will only escape non-printable ASCII chars unless `shouldEscapePrintable` is -set to `true`. - -See: [`unescapeUnicode()`](#unescapeUnicode) - -```js -escapeUnicode('føo bår'); -// > "f\u00f8o b\u00e5r" -escapeUnicode('føo bår', true); -// > "\u0066\u00f8\u006f\u0020\u0062\u00e5\u0072" -``` - - - -## hyphenate(str):String - -Replaces spaces with hyphens, split camelCase text, remove non-word chars, -remove accents and convert to lower case. - -See: [`slugify()`](#slugify), [`underscore()`](#underscore), -[`unhyphenate`](#unhyphenate) - -```js -hyphenate(' %# lorem ipsum ? $ dolor'); // "lorem-ipsum-dolor" -hyphenate('spéçïãl çhârs'); // "special-chars" -hyphenate('loremIpsum'); // "lorem-ipsum" -``` - - - -## interpolate(str, replacements[, syntax]):String - -String interpolation. Format/replace tokens with object properties. - -```js -var tmpl = 'Hello {{name}}!'; -interpolate(tmpl, {name: 'World'}); // "Hello World!" -interpolate(tmpl, {name: 'Lorem Ipsum'}); // "Hello Lorem Ipsum!" -``` - -It uses a mustache-like syntax by default but you can set your own format if -needed. You can also use Arrays for the replacements (since Arrays are -objects as well): - -```js -// matches everything inside "${}" -var syntax = /\$\{([^}]+)\}/g; -var tmpl = "Hello ${0}!"; -interpolate(tmpl, ['Foo Bar'], syntax); // "Hello Foo Bar!" -``` - - - -## lowerCase(str):String - -"Safer" `String.toLowerCase()`. (Used internally) - -### Example - -```js -(null).toLowerCase(); // Error! -(undefined).toLowerCase(); // Error! -lowerCase(null); // "" -lowerCase(undefined); // "" -``` - - - -## lpad(str, minLength[, char]):String - -Pad string from left with `char` if its' length is smaller than `minLen`. - -See: [`rpad()`](#rpad) - -### Example - -```js -lpad('a', 5); // " a" -lpad('a', 5, '-'); // "----a" -lpad('abc', 3, '-'); // "abc" -lpad('abc', 4, '-'); // "-abc" -``` - - - -## ltrim(str, [chars]):String - -Remove chars or white-spaces from beginning of string. - -`chars` is an array of chars to remove from the beginning of the string. If -`chars` is not specified, Unicode whitespace chars will be used instead. - -See: [`rtrim()`](#rtrim), [`trim()`](#trim) - -### Example - -```js -ltrim(' lorem ipsum '); // "lorem ipsum " -ltrim('--lorem ipsum--', ['-']); // "lorem ipsum--" -``` - - - -## makePath(...args):String - -Group arguments as path segments, if any of the args is `null` or `undefined` -it will be ignored from resulting path. It will also remove duplicate "/". - -See: [`array/join()`](array.html#join) - -### Example - -```js -makePath('lorem', 'ipsum', null, 'dolor'); // "lorem/ipsum/dolor" -makePath('foo///bar/'); // "foo/bar/" -``` - - - -## normalizeLineBreaks(str, [lineBreak]):String - -Normalize line breaks to a single format. Defaults to Unix `\n`. - -It handles DOS (`\r\n`), Mac (`\r`) and Unix (`\n`) formats. - -### Example - -```js -// "foo\nbar\nlorem\nipsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum'); - -// "foo\rbar\rlorem\ripsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum', '\r'); - -// "foo bar lorem ipsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum', ' '); -``` - - - -## pascalCase(str):String - -Convert string to "PascalCase" text. - -See: [`camelCase()`](#camelCase) - -### Example - -```js -pascalCase('lorem-ipsum-dolor'); // "LoremIpsumDolor" -pascalCase('lorem ipsum dolor'); // "LoremIpsumDolor" -``` - - - -## properCase(str):String - -UPPERCASE first char of each word, lowercase other chars. - -### Example - -```js -properCase('loRem iPSum'); // "Lorem Ipsum" -``` - - - -## removeNonASCII(str):String - -Remove [non-printable ASCII -chars](http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters). - -### Example - -```js -removeNonASCII('äÄçÇéÉêlorem-ipsumöÖÐþúÚ'); // "lorem-ipsum" -``` - - - -## removeNonWord(str):String - -Remove non-word chars. - -### Example - -```js -var str = 'lorem ~!@#$%^&*()_+`-={}[]|\\:";\'/?><., ipsum'; -removeNonWord(str); // "lorem - ipsum" -``` - - - -## repeat(str, n):String - -Repeat string n-times. - -### Example - -```js -repeat('a', 3); // "aaa" -repeat('bc', 2); // "bcbc" -repeat('a', 0); // "" -``` - - - -## replace(str, search, replacements):String - -Replace string(s) with the replacement(s) in the source. - -`search` and `replacements` can be an array, or a single item. For every item -in `search`, it will call `str.replace` with the search item and the matching -replacement in `replacements`. If `replacements` only contains one replacement, -it will be used for all the searches, otherwise it will use the replacement at -the same index as the search. - -### Example - -```js -replace('foo bar', 'foo', 'test'); // "test bar" -replace('test 1 2', ['1', '2'], 'n'); // "test n n" -replace('test 1 2', ['1', '2'], ['one', 'two']); // "test one two" -replace('123abc', [/\d/g, /[a-z]/g], ['0', '.']); // "000..." -``` - - - -## replaceAccents(str):String - -Replaces all accented chars with regular ones. - -**Important:** Only covers **Basic Latin** and **Latin-1** unicode chars. - -### Example - -```js -replaceAccents('spéçïãl çhârs'); // "special chars" -``` - - - -## rpad(str, minLength[, char]):String - -Pad string from right with `char` if its' length is smaller than `minLen`. - -See: [`lpad()`](#lpad) - -### Example - -```js -rpad('a', 5); // "a " -rpad('a', 5, '-'); // "a----" -rpad('abc', 3, '-'); // "abc" -rpad('abc', 4, '-'); // "abc-" -``` - - - -## rtrim(str, [chars]):String - -Remove chars or white-spaces from end of string. - -`chars` is an array of chars to remove from the end of the string. If -`chars` is not specified, Unicode whitespace chars will be used instead. - -See: [`trim()`](#trim), [`ltrim()`](#ltrim) - -### Example - -```js -rtrim(' lorem ipsum '); // " lorem ipsum" -rtrim('--lorem ipsum--', ['-']); // "--lorem ipsum" -``` - - - -## sentenceCase(str):String - -UPPERCASE first char of each sentence and lowercase other chars. - -### Example - -```js -var str = 'Lorem IpSum DoLOr. maeCeNnas Ullamcor.'; -sentenceCase(str); // "Lorem ipsum dolor. Maecennas ullamcor." -``` - - - -## stripHtmlTags(str):String - -Remove HTML/XML tags from string. - -### Example - -```js -var str = '<p><em>lorem</em> <strong>ipsum</strong></p>'; -stripHtmlTags(str); // "lorem ipsum" -``` - - - -## startsWith(str, prefix):Boolean - -Checks if string starts with specified prefix. - -See: [`endsWith()`](#endsWith), [`contains()`](#contains) - -### Example - -```js -startsWith('lorem ipsum', 'lorem'); // true -startsWith('lorem ipsum', 'ipsum'); // false -``` - - - -## slugify(str[, delimeter]):String - -Convert to lower case, remove accents, remove non-word chars and replace spaces -with the delimeter. The default delimeter is a hyphen. - -Note that this does not split camelCase text. - -See: [`hyphenate()`](#hyphenate) and [`underscore()`](#underscore) - -### Example - -```js -var str = 'loremIpsum dolor spéçïãl chârs'; -slugify(str); // "loremipsum-dolor-special-chars" -slugify(str, '_'); // "loremipsum_dolor_special_chars" -``` - - - -## trim(str, [chars]):String - -Remove chars or white-spaces from beginning and end of string. - -`chars` is an array of chars to remove from the beginning and end of the -string. If `chars` is not specified, Unicode whitespace chars will be used -instead. - -See: [`rtrim()`](#rtrim), [`ltrim()`](#ltrim) - -### Example - -```js -trim(' lorem ipsum '); // "lorem ipsum" -trim('-+-lorem ipsum-+-', ['-', '+']); // "lorem ipsum" -``` - - - -## truncate(str, maxChars, [append], [onlyFullWords]):String - -Limit number of chars. Returned string `length` will be `<= maxChars`. - -See: [`crop()`](#crop) - -### Arguments - - 1. `str` (String) : String - 2. `maxChars` (Number) : Maximum number of characters including `append.length`. - 3. `[append]` (String) : Value that should be added to the end of string. - Defaults to "...". - 4. `[onlyFullWords]` (Boolean) : If it shouldn't break words. Default is - `false`. (favor [`crop()`](#crop) since code will be clearer). - -### Example - -```js -truncate('lorem ipsum dolor', 11); // "lorem ip..." -truncate('lorem ipsum dolor', 11, '+'); // "lorem ipsu+" -truncate('lorem ipsum dolor', 11, null, true); // "lorem..." -``` - - - -## typecast(str):* - -Parses string and convert it into a native value. - -### Example - -```js -typecast('lorem ipsum'); // "lorem ipsum" -typecast('123'); // 123 -typecast('123.45'); // 123.45 -typecast('false'); // false -typecast('true'); // true -typecast('null'); // null -typecast('undefined'); // undefined -``` - - - -## unCamelCase(str, [delimiter]):String - -Add the delimiter between camelCase text and convert first char of each word to -lower case. - -The delimiter defaults to a space character. - -See: [`camelCase()`][#camelCase] - -### Example - -```js -unCamelCase('loremIpsumDolor'); // "lorem ipsum dolor" -unCamelCase('loremIpsumDolor', '-'); // "lorem-ipsum-color" -``` - - -## underscore(str):String - -Replaces spaces with underscores, split camelCase text, remove non-word chars, -remove accents and convert to lower case. - -See: [`slugify()`](#slugify), [`hyphenate()`](#hyphenate) - -```js -underscore(' %# lorem ipsum ? $ dolor'); // "lorem_ipsum_dolor" -underscore('spéçïãl çhârs'); // "special_chars" -underscore('loremIpsum'); // "lorem_ipsum" -``` - - - -## unescapeHtml(str):String - -Unescapes HTML special chars (`>`, `<`, `&`, `"`, `'`). - -See: [`escapeHtml()`](#escapeHtml) - -### Example - -```js -unescapeHtml('lorem &amp; &quot;ipsum&quot;'); // 'lorem & "ipsum"' -``` - - - -## unescapeUnicode(str):String - -Unescapes unicode char sequences. - -See: [`escapeUnicode()`](#escapeUnicode) - -```js -unescapeUnicode('\\u0066\\u00f8\\u006f\\u0020\\u0062\\u00e5\\u0072'); -// > 'føo bår' -``` - - - -## unhyphenate(str):String - -Replaces hyphens with spaces. (only hyphens between word chars) - -See : [`hyphenate()`](#hyphenate) - -### Example - -```js -unhyphenate('lorem-ipsum-dolor'); // "lorem ipsum dolor" -``` - - -## upperCase(str):String - -"Safer" `String.toUpperCase()`. (Used internally) - -### Example - -```js -(null).toUpperCase(); // Error! -(undefined).toUpperCase(); // Error! -upperCase(null); // "" -upperCase(undefined); // "" -``` - - - -## WHITE_SPACES:Array - -Constant array of all [Unicode white-space -characters](http://en.wikipedia.org/wiki/Whitespace_character). - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/time.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/time.md deleted file mode 100644 index 628c2a9b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/doc/time.md +++ /dev/null @@ -1,64 +0,0 @@ -# time # - -Utilities for time manipulation. - - -## convert(value, sourceUnit, [destinationUnit]):Number - -Converts time between units. - -Available units: `millisecond`, `second`, `minute`, `hour`, `day`, `week`. -Abbreviations: `ms`, `s`, `m`, `h`, `d`, `w`. - -We do **not** support year and month as a time unit since their values are not -fixed. - -The default `destinationUnit` is `ms`. - -```js -convert(1, 'minute'); // 60000 -convert(2.5, 's', 'ms'); // 2500 -convert(2, 'm', 's'); // 120 -convert(500, 'ms', 's'); // 0.5 -``` - - - -## now():Number - -Returns the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC. -Uses `Date.now()` if available. - -### Example - -```js -now(); // 1335449614650 -``` - - - -## parseMs(ms):Object - -Parse timestamp (milliseconds) into an object `{milliseconds:number, -seconds:number, minutes:number, hours:number, days:number}`. - -### Example - -```js -// {days:27, hours:4, minutes:26, seconds:5, milliseconds:454} -parseMs(2348765454); -``` - - - -## toTimeString(ms):String - -Convert timestamp (milliseconds) into a time string in the format "[H:]MM:SS". - -### Example - -```js -toTimeString(12513); // "00:12" -toTimeString(951233); // "15:51" -toTimeString(8765235); // "2:26:05" -``` diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function.js deleted file mode 100644 index 43a16ef4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function.js +++ /dev/null @@ -1,18 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'bind' : require('./function/bind'), - 'compose' : require('./function/compose'), - 'debounce' : require('./function/debounce'), - 'func' : require('./function/func'), - 'makeIterator_' : require('./function/makeIterator_'), - 'partial' : require('./function/partial'), - 'prop' : require('./function/prop'), - 'series' : require('./function/series'), - 'throttle' : require('./function/throttle'), - 'timeout' : require('./function/timeout') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/bind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/bind.js deleted file mode 100644 index 71bc1257..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/bind.js +++ /dev/null @@ -1,23 +0,0 @@ - - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - * @param {Function} fn Function. - * @param {object} context Execution context. - * @param {rest} args Arguments (0...n arguments). - * @return {Function} Wrapped Function. - */ - function bind(fn, context, args){ - var argsArr = slice(arguments, 2); //curried args - return function(){ - return fn.apply(context, argsArr.concat(slice(arguments))); - }; - } - - module.exports = bind; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/compose.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/compose.js deleted file mode 100644 index 8cd5c5f3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/compose.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Returns a function that composes multiple functions, passing results to - * each other. - */ - function compose() { - var fns = arguments; - return function(arg){ - // only cares about the first argument since the chain can only - // deal with a single return value anyway. It should start from - // the last fn. - var n = fns.length; - while (n--) { - arg = fns[n].call(this, arg); - } - return arg; - }; - } - - module.exports = compose; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/debounce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/debounce.js deleted file mode 100644 index a0ed07f5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/debounce.js +++ /dev/null @@ -1,29 +0,0 @@ - - - /** - * Debounce callback execution - */ - function debounce(fn, threshold, isAsap){ - var timeout, result; - function debounced(){ - var args = arguments, context = this; - function delayed(){ - if (! isAsap) { - result = fn.apply(context, args); - } - timeout = null; - } - if (timeout) { - clearTimeout(timeout); - } else if (isAsap) { - result = fn.apply(context, args); - } - timeout = setTimeout(delayed, threshold); - return result; - } - return debounced; - } - - module.exports = debounce; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/func.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/func.js deleted file mode 100644 index b81bf0a8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/func.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Returns a function that call a method on the passed object - */ - function func(name){ - return function(obj){ - return obj[name](); - }; - } - - module.exports = func; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/makeIterator_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/makeIterator_.js deleted file mode 100644 index 767610a5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/makeIterator_.js +++ /dev/null @@ -1,34 +0,0 @@ -var prop = require('./prop'); -var deepMatches = require('../object/deepMatches'); - - /** - * Converts argument into a valid iterator. - * Used internally on most array/object/collection methods that receives a - * callback/iterator providing a shortcut syntax. - */ - function makeIterator(src, thisObj){ - switch(typeof src) { - case 'object': - // typeof null == "object" - return (src != null)? function(val, key, target){ - return deepMatches(val, src); - } : src; - case 'string': - case 'number': - return prop(src); - case 'function': - if (typeof thisObj === 'undefined') { - return src; - } else { - return function(val, i, arr){ - return src.call(thisObj, val, i, arr); - }; - } - default: - return src; - } - } - - module.exports = makeIterator; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/partial.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/partial.js deleted file mode 100644 index d63ff1be..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/partial.js +++ /dev/null @@ -1,19 +0,0 @@ - - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Creates a partially applied function. - */ - function partial(fn, var_args){ - var argsArr = slice(arguments, 1); //curried args - return function(){ - return fn.apply(this, argsArr.concat(slice(arguments))); - }; - } - - module.exports = partial; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/prop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/prop.js deleted file mode 100644 index 734acb7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/prop.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Returns a function that gets a property of the passed object - */ - function prop(name){ - return function(obj){ - return obj[name]; - }; - } - - module.exports = prop; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/series.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/series.js deleted file mode 100644 index 25159c2c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/series.js +++ /dev/null @@ -1,22 +0,0 @@ - - - /** - * Returns a function that will execute a list of functions in sequence - * passing the same arguments to each one. (useful for batch processing - * items during a forEach loop) - */ - function series(){ - var fns = arguments; - return function(){ - var i = 0, - n = fns.length; - while (i < n) { - fns[i].apply(this, arguments); - i += 1; - } - }; - } - - module.exports = series; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/throttle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/throttle.js deleted file mode 100644 index 619dc540..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/throttle.js +++ /dev/null @@ -1,32 +0,0 @@ -var now = require('../time/now'); - - /** - */ - function throttle(fn, delay){ - var context, timeout, result, args, - cur, diff, prev = 0; - function delayed(){ - prev = now(); - timeout = null; - result = fn.apply(context, args); - } - function throttled(){ - context = this; - args = arguments; - cur = now(); - diff = delay - (cur - prev); - if (diff <= 0) { - clearTimeout(timeout); - prev = cur; - result = fn.apply(context, args); - } else if (! timeout) { - timeout = setTimeout(delayed, diff); - } - return result; - } - return throttled; - } - - module.exports = throttle; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/timeout.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/timeout.js deleted file mode 100644 index e0d21a66..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/function/timeout.js +++ /dev/null @@ -1,21 +0,0 @@ - - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Delays the call of a function within a given context. - */ - function timeout(fn, millis, context){ - - var args = slice(arguments, 3); - - return setTimeout(function() { - fn.apply(context, args); - }, millis); - } - - module.exports = timeout; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/index.js deleted file mode 100644 index 32a1c639..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/index.js +++ /dev/null @@ -1,24 +0,0 @@ -/**@license - * mout v0.6.0 | http://moutjs.com | MIT license - */ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'VERSION' : '0.6.0', - 'array' : require('./array'), - 'collection' : require('./collection'), - 'date' : require('./date'), - 'function' : require('./function'), - 'lang' : require('./lang'), - 'math' : require('./math'), - 'number' : require('./number'), - 'object' : require('./object'), - 'queryString' : require('./queryString'), - 'random' : require('./random'), - 'string' : require('./string'), - 'time' : require('./time') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang.js deleted file mode 100644 index b9816218..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang.js +++ /dev/null @@ -1,36 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'clone' : require('./lang/clone'), - 'createObject' : require('./lang/createObject'), - 'ctorApply' : require('./lang/ctorApply'), - 'deepClone' : require('./lang/deepClone'), - 'defaults' : require('./lang/defaults'), - 'inheritPrototype' : require('./lang/inheritPrototype'), - 'is' : require('./lang/is'), - 'isArguments' : require('./lang/isArguments'), - 'isArray' : require('./lang/isArray'), - 'isBoolean' : require('./lang/isBoolean'), - 'isDate' : require('./lang/isDate'), - 'isEmpty' : require('./lang/isEmpty'), - 'isFinite' : require('./lang/isFinite'), - 'isFunction' : require('./lang/isFunction'), - 'isInteger' : require('./lang/isInteger'), - 'isKind' : require('./lang/isKind'), - 'isNaN' : require('./lang/isNaN'), - 'isNull' : require('./lang/isNull'), - 'isNumber' : require('./lang/isNumber'), - 'isObject' : require('./lang/isObject'), - 'isPlainObject' : require('./lang/isPlainObject'), - 'isRegExp' : require('./lang/isRegExp'), - 'isString' : require('./lang/isString'), - 'isUndefined' : require('./lang/isUndefined'), - 'isnt' : require('./lang/isnt'), - 'kindOf' : require('./lang/kindOf'), - 'toArray' : require('./lang/toArray'), - 'toString' : require('./lang/toString') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/clone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/clone.js deleted file mode 100644 index 33c4e949..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/clone.js +++ /dev/null @@ -1,49 +0,0 @@ -var kindOf = require('./kindOf'); -var isPlainObject = require('./isPlainObject'); -var mixIn = require('../object/mixIn'); - - /** - * Clone native types. - */ - function clone(val){ - switch (kindOf(val)) { - case 'Object': - return cloneObject(val); - case 'Array': - return cloneArray(val); - case 'RegExp': - return cloneRegExp(val); - case 'Date': - return cloneDate(val); - default: - return val; - } - } - - function cloneObject(source) { - if (isPlainObject(source)) { - return mixIn({}, source); - } else { - return source; - } - } - - function cloneRegExp(r) { - var flags = ''; - flags += r.multiline ? 'm' : ''; - flags += r.global ? 'g' : ''; - flags += r.ignorecase ? 'i' : ''; - return new RegExp(r.source, flags); - } - - function cloneDate(date) { - return new Date(+date); - } - - function cloneArray(arr) { - return arr.slice(); - } - - module.exports = clone; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/createObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/createObject.js deleted file mode 100644 index bbc14c1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/createObject.js +++ /dev/null @@ -1,18 +0,0 @@ -var mixIn = require('../object/mixIn'); - - /** - * Create Object using prototypal inheritance and setting custom properties. - * - Mix between Douglas Crockford Prototypal Inheritance <http://javascript.crockford.com/prototypal.html> and the EcmaScript 5 `Object.create()` method. - * @param {object} parent Parent Object. - * @param {object} [props] Object properties. - * @return {object} Created object. - */ - function createObject(parent, props){ - function F(){} - F.prototype = parent; - return mixIn(new F(), props); - - } - module.exports = createObject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/ctorApply.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/ctorApply.js deleted file mode 100644 index d68dc506..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/ctorApply.js +++ /dev/null @@ -1,17 +0,0 @@ - - - function F(){} - - /** - * Do fn.apply on a constructor. - */ - function ctorApply(ctor, args) { - F.prototype = ctor.prototype; - var instance = new F(); - ctor.apply(instance, args); - return instance; - } - - module.exports = ctorApply; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/deepClone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/deepClone.js deleted file mode 100644 index 25fd95f1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/deepClone.js +++ /dev/null @@ -1,48 +0,0 @@ -var clone = require('./clone'); -var forOwn = require('../object/forOwn'); -var kindOf = require('./kindOf'); -var isPlainObject = require('./isPlainObject'); - - /** - * Recursively clone native types. - */ - function deepClone(val, instanceClone) { - switch ( kindOf(val) ) { - case 'Object': - return cloneObject(val, instanceClone); - case 'Array': - return cloneArray(val, instanceClone); - default: - return clone(val); - } - } - - function cloneObject(source, instanceClone) { - if (isPlainObject(source)) { - var out = {}; - forOwn(source, function(val, key) { - this[key] = deepClone(val, instanceClone); - }, out); - return out; - } else if (instanceClone) { - return instanceClone(source); - } else { - return source; - } - } - - function cloneArray(arr, instanceClone) { - var out = [], - i = -1, - n = arr.length, - val; - while (++i < n) { - out[i] = deepClone(arr[i], instanceClone); - } - return out; - } - - module.exports = deepClone; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/defaults.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/defaults.js deleted file mode 100644 index 1111b2ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/defaults.js +++ /dev/null @@ -1,17 +0,0 @@ -var toArray = require('./toArray'); -var find = require('../array/find'); - - /** - * Return first non void argument - */ - function defaults(var_args){ - return find(toArray(arguments), nonVoid); - } - - function nonVoid(val){ - return val != null; - } - - module.exports = defaults; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/inheritPrototype.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/inheritPrototype.js deleted file mode 100644 index cd8a379e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/inheritPrototype.js +++ /dev/null @@ -1,16 +0,0 @@ -var createObject = require('./createObject'); - - /** - * Inherit prototype from another Object. - * - inspired by Nicholas Zackas <http://nczonline.net> Solution - * @param {object} child Child object - * @param {object} parent Parent Object - */ - function inheritPrototype(child, parent){ - var p = createObject(parent.prototype); - p.constructor = child; - child.prototype = p; - } - - module.exports = inheritPrototype; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/is.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/is.js deleted file mode 100644 index 4a835739..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/is.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Check if both arguments are egal. - */ - function is(x, y){ - // implementation borrowed from harmony:egal spec - if (x === y) { - // 0 === -0, but they are not identical - return x !== 0 || 1 / x === 1 / y; - } - - // NaN !== NaN, but they are identical. - // NaNs are the only non-reflexive value, i.e., if x !== x, - // then x is a NaN. - // isNaN is broken: it converts its argument to number, so - // isNaN("foo") => true - return x !== x && y !== y; - } - - module.exports = is; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArguments.js deleted file mode 100644 index f7b08ba4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArguments.js +++ /dev/null @@ -1,15 +0,0 @@ -var isKind = require('./isKind'); - - /** - */ - var isArgs = isKind(arguments, 'Arguments')? - function(val){ - return isKind(val, 'Arguments'); - } : - function(val){ - // Arguments is an Object on IE7 - return !!(val && Object.prototype.hasOwnProperty.call(val, 'callee')); - }; - - module.exports = isArgs; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArray.js deleted file mode 100644 index 262ee400..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isArray.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - var isArray = Array.isArray || function (val) { - return isKind(val, 'Array'); - }; - module.exports = isArray; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isBoolean.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isBoolean.js deleted file mode 100644 index 86557cb9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isBoolean.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isBoolean(val) { - return isKind(val, 'Boolean'); - } - module.exports = isBoolean; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isDate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isDate.js deleted file mode 100644 index 4a5130f2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isDate.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isDate(val) { - return isKind(val, 'Date'); - } - module.exports = isDate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isEmpty.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isEmpty.js deleted file mode 100644 index 0e9f77da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isEmpty.js +++ /dev/null @@ -1,24 +0,0 @@ -var forOwn = require('../object/forOwn'); -var isArray = require('./isArray'); - - function isEmpty(val){ - if (val == null) { - // typeof null == 'object' so we check it first - return false; - } else if ( typeof val === 'string' || isArray(val) ) { - return !val.length; - } else if ( typeof val === 'object' || typeof val === 'function' ) { - var result = true; - forOwn(val, function(){ - result = false; - return false; // break loop - }); - return result; - } else { - return false; - } - } - - module.exports = isEmpty; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFinite.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFinite.js deleted file mode 100644 index 6d4006f9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFinite.js +++ /dev/null @@ -1,21 +0,0 @@ -var isNumber = require('./isNumber'); - - var global = this; - - /** - * Check if value is finite - */ - function isFinite(val){ - var is = false; - if (typeof val === 'string' && val !== '') { - is = global.isFinite( parseFloat(val) ); - } else if (isNumber(val)){ - // need to use isNumber because of Number constructor - is = global.isFinite( val ); - } - return is; - } - - module.exports = isFinite; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFunction.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFunction.js deleted file mode 100644 index 216879f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isFunction.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isFunction(val) { - return isKind(val, 'Function'); - } - module.exports = isFunction; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isInteger.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isInteger.js deleted file mode 100644 index 29f95d96..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -var isNumber = require('./isNumber'); - - /** - * Check if value is an integer - */ - function isInteger(val){ - return isNumber(val) && (val % 1 === 0); - } - - module.exports = isInteger; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isKind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isKind.js deleted file mode 100644 index 02301e04..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isKind.js +++ /dev/null @@ -1,9 +0,0 @@ -var kindOf = require('./kindOf'); - /** - * Check if value is from a specific "kind". - */ - function isKind(val, kind){ - return kindOf(val) === kind; - } - module.exports = isKind; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNaN.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNaN.js deleted file mode 100644 index f6efeb1f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNaN.js +++ /dev/null @@ -1,15 +0,0 @@ -var isNumber = require('./isNumber'); - - /** - * Check if value is NaN for realz - */ - function isNaN(val){ - // based on the fact that NaN !== NaN - // need to check if it's a number to avoid conflicts with host objects - // also need to coerce ToNumber to avoid edge case `new Number(NaN)` - return !isNumber(val) || val != +val; - } - - module.exports = isNaN; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNull.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNull.js deleted file mode 100644 index 6252f9ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNull.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - */ - function isNull(val){ - return val === null; - } - module.exports = isNull; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNumber.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNumber.js deleted file mode 100644 index 126c1cce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isNumber.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isNumber(val) { - return isKind(val, 'Number'); - } - module.exports = isNumber; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isObject.js deleted file mode 100644 index 7350c891..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isObject.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isObject(val) { - return isKind(val, 'Object'); - } - module.exports = isObject; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isPlainObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isPlainObject.js deleted file mode 100644 index 0d2d7b65..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isPlainObject.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Checks if the value is created by the `Object` constructor. - */ - function isPlainObject(value) { - return (!!value - && typeof value === 'object' - && value.constructor === Object); - } - - module.exports = isPlainObject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isRegExp.js deleted file mode 100644 index fc5459a9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isRegExp.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isRegExp(val) { - return isKind(val, 'RegExp'); - } - module.exports = isRegExp; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isString.js deleted file mode 100644 index f8906584..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isString.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isString(val) { - return isKind(val, 'String'); - } - module.exports = isString; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isUndefined.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isUndefined.js deleted file mode 100644 index fb2261df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isUndefined.js +++ /dev/null @@ -1,10 +0,0 @@ - - var UNDEF; - - /** - */ - function isUndef(val){ - return val === UNDEF; - } - module.exports = isUndef; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isnt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isnt.js deleted file mode 100644 index 9dad58ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/isnt.js +++ /dev/null @@ -1,12 +0,0 @@ -var is = require('./is'); - - /** - * Check if both values are not identical/egal - */ - function isnt(x, y){ - return !is(x, y); - } - - module.exports = isnt; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/kindOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/kindOf.js deleted file mode 100644 index 663464d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/kindOf.js +++ /dev/null @@ -1,20 +0,0 @@ - - - var _rKind = /^\[object (.*)\]$/, - _toString = Object.prototype.toString, - UNDEF; - - /** - * Gets the "kind" of value. (e.g. "String", "Number", etc) - */ - function kindOf(val) { - if (val === null) { - return 'Null'; - } else if (val === UNDEF) { - return 'Undefined'; - } else { - return _rKind.exec( _toString.call(val) )[1]; - } - } - module.exports = kindOf; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/toArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/toArray.js deleted file mode 100644 index e39b8734..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/toArray.js +++ /dev/null @@ -1,31 +0,0 @@ -var kindOf = require('./kindOf'); - - var _win = this; - - /** - * Convert array-like object into array - */ - function toArray(val){ - var ret = [], - kind = kindOf(val), - n; - - if (val != null) { - if ( val.length == null || kind === 'String' || kind === 'Function' || kind === 'RegExp' || val === _win ) { - //string, regexp, function have .length but user probably just want - //to wrap value into an array.. - ret[ret.length] = val; - } else { - //window returns true on isObject in IE7 and may have length - //property. `typeof NodeList` returns `function` on Safari so - //we can't use it (#58) - n = val.length; - while (n--) { - ret[n] = val[n]; - } - } - } - return ret; - } - module.exports = toArray; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/toString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/toString.js deleted file mode 100644 index ae5c2b0f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/lang/toString.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * Typecast a value to a String, using an empty string value for null or - * undefined. - */ - function toString(val){ - return val == null ? '' : val.toString(); - } - - module.exports = toString; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math.js deleted file mode 100644 index c6ee889b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math.js +++ /dev/null @@ -1,19 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'ceil' : require('./math/ceil'), - 'clamp' : require('./math/clamp'), - 'countSteps' : require('./math/countSteps'), - 'floor' : require('./math/floor'), - 'inRange' : require('./math/inRange'), - 'isNear' : require('./math/isNear'), - 'lerp' : require('./math/lerp'), - 'loop' : require('./math/loop'), - 'map' : require('./math/map'), - 'norm' : require('./math/norm'), - 'round' : require('./math/round') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/ceil.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/ceil.js deleted file mode 100644 index a279e158..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/ceil.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Round value up with a custom radix. - */ - function ceil(val, step){ - step = Math.abs(step || 1); - return Math.ceil(val / step) * step; - } - - module.exports = ceil; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/clamp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/clamp.js deleted file mode 100644 index e929a9a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/clamp.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Clamps value inside range. - */ - function clamp(val, min, max){ - return val < min? min : (val > max? max : val); - } - module.exports = clamp; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/countSteps.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/countSteps.js deleted file mode 100644 index 60ac90c3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/countSteps.js +++ /dev/null @@ -1,16 +0,0 @@ - - /** - * Count number of full steps. - */ - function countSteps(val, step, overflow){ - val = Math.floor(val / step); - - if (overflow) { - return val % overflow; - } - - return val; - } - - module.exports = countSteps; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/floor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/floor.js deleted file mode 100644 index 9de50531..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/floor.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Floor value to full steps. - */ - function floor(val, step){ - step = Math.abs(step || 1); - return Math.floor(val / step) * step; - } - module.exports = floor; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/inRange.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/inRange.js deleted file mode 100644 index 763218f8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/inRange.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Checks if value is inside the range. - */ - function inRange(val, min, max, threshold){ - threshold = threshold || 0; - return (val + threshold >= min && val - threshold <= max); - } - - module.exports = inRange; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/isNear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/isNear.js deleted file mode 100644 index 45486b6d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/isNear.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Check if value is close to target. - */ - function isNear(val, target, threshold){ - return (Math.abs(val - target) <= threshold); - } - module.exports = isNear; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/lerp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/lerp.js deleted file mode 100644 index 111e2717..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/lerp.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Linear interpolation. - * IMPORTANT:will return `Infinity` if numbers overflow Number.MAX_VALUE - */ - function lerp(ratio, start, end){ - return start + (end - start) * ratio; - } - - module.exports = lerp; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/loop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/loop.js deleted file mode 100644 index 35207c1a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/loop.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Loops value inside range. - */ - function loop(val, min, max){ - return val < min? max : (val > max? min : val); - } - - module.exports = loop; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/map.js deleted file mode 100644 index 96c4b787..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/map.js +++ /dev/null @@ -1,11 +0,0 @@ -var lerp = require('./lerp'); -var norm = require('./norm'); - /** - * Maps a number from one scale to another. - * @example map(3, 0, 4, -1, 1) -> 0.5 - */ - function map(val, min1, max1, min2, max2){ - return lerp( norm(val, min1, max1), min2, max2 ); - } - module.exports = map; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/norm.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/norm.js deleted file mode 100644 index 54caf78a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/norm.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Gets normalized ratio of value inside range. - */ - function norm(val, min, max){ - return (val - min) / (max - min); - } - module.exports = norm; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/round.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/round.js deleted file mode 100644 index d108e6cd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/math/round.js +++ /dev/null @@ -1,12 +0,0 @@ - - /** - * Round number to a specific radix - */ - function round(value, radix){ - radix = radix || 1; // default round 1 - return Math.round(value / radix) * radix; - } - - module.exports = round; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number.js deleted file mode 100644 index 0b6186cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number.js +++ /dev/null @@ -1,21 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'MAX_INT' : require('./number/MAX_INT'), - 'MAX_UINT' : require('./number/MAX_UINT'), - 'MIN_INT' : require('./number/MIN_INT'), - 'abbreviate' : require('./number/abbreviate'), - 'currencyFormat' : require('./number/currencyFormat'), - 'enforcePrecision' : require('./number/enforcePrecision'), - 'pad' : require('./number/pad'), - 'rol' : require('./number/rol'), - 'ror' : require('./number/ror'), - 'sign' : require('./number/sign'), - 'toInt' : require('./number/toInt'), - 'toUInt' : require('./number/toUInt'), - 'toUInt31' : require('./number/toUInt31') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_INT.js deleted file mode 100644 index 1d6f0e48..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit signed integer value. (2^31 - 1) - */ - - module.exports = 2147483647; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_UINT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_UINT.js deleted file mode 100644 index 700da0f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/MAX_UINT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit unsigned integet value (2^32 - 1) - */ - - module.exports = 4294967295; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/MIN_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/MIN_INT.js deleted file mode 100644 index b34ab2ce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/MIN_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Minimum 32-bit signed integer value (-2^31). - */ - - module.exports = -2147483648; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/abbreviate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/abbreviate.js deleted file mode 100644 index dd6716b9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/abbreviate.js +++ /dev/null @@ -1,35 +0,0 @@ -var enforcePrecision = require('./enforcePrecision'); - - var _defaultDict = { - thousand : 'K', - million : 'M', - billion : 'B' - }; - - /** - * Abbreviate number if bigger than 1000. (eg: 2.5K, 17.5M, 3.4B, ...) - */ - function abbreviateNumber(val, nDecimals, dict){ - nDecimals = nDecimals != null? nDecimals : 1; - dict = dict || _defaultDict; - val = enforcePrecision(val, nDecimals); - - var str, mod; - - if (val < 1000000) { - mod = enforcePrecision(val / 1000, nDecimals); - // might overflow to next scale during rounding - str = mod < 1000? mod + dict.thousand : 1 + dict.million; - } else if (val < 1000000000) { - mod = enforcePrecision(val / 1000000, nDecimals); - str = mod < 1000? mod + dict.million : 1 + dict.billion; - } else { - str = enforcePrecision(val / 1000000000, nDecimals) + dict.billion; - } - - return str; - } - - module.exports = abbreviateNumber; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/currencyFormat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/currencyFormat.js deleted file mode 100644 index 1cf02497..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/currencyFormat.js +++ /dev/null @@ -1,26 +0,0 @@ - - - /** - * Converts number into currency format - */ - function currencyFormat(val, nDecimalDigits, decimalSeparator, thousandsSeparator) { - nDecimalDigits = nDecimalDigits == null? 2 : nDecimalDigits; - decimalSeparator = decimalSeparator == null? '.' : decimalSeparator; - thousandsSeparator = thousandsSeparator == null? ',' : thousandsSeparator; - - //can't use enforce precision since it returns a number and we are - //doing a RegExp over the string - var fixed = val.toFixed(nDecimalDigits), - //separate begin [$1], middle [$2] and decimal digits [$4] - parts = new RegExp('^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{'+ nDecimalDigits +'}))?$').exec( fixed ); - - if(parts){ //val >= 1000 || val <= -1000 - return parts[1] + parts[2].replace(/\d{3}/g, thousandsSeparator + '$&') + (parts[4] ? decimalSeparator + parts[4] : ''); - }else{ - return fixed.replace('.', decimalSeparator); - } - } - - module.exports = currencyFormat; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/enforcePrecision.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/enforcePrecision.js deleted file mode 100644 index f73a92d7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/enforcePrecision.js +++ /dev/null @@ -1,13 +0,0 @@ - - /** - * Enforce a specific amount of decimal digits and also fix floating - * point rounding issues. - * @example `enforcePrecision(0.615, 2) -> 0.62`, `(0.615).toFixed(2) -> - * 0.61` - */ - function enforcePrecision(val, nDecimalDigits){ - var pow = Math.pow(10, nDecimalDigits); - return +(Math.round(val * pow) / pow).toFixed(nDecimalDigits); - } - module.exports = enforcePrecision; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/pad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/pad.js deleted file mode 100644 index da752706..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/pad.js +++ /dev/null @@ -1,12 +0,0 @@ -var lpad = require('../string/lpad'); - - /** - * Add padding zeros if n.length < minLength. - */ - function pad(n, minLength, char){ - return lpad(''+ n, minLength, char || '0'); - } - - module.exports = pad; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/rol.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/rol.js deleted file mode 100644 index ecd58da4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/rol.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Bitwise circular shift left - * http://en.wikipedia.org/wiki/Circular_shift - */ - function rol(val, shift){ - return (val << shift) | (val >> (32 - shift)); - } - module.exports = rol; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/ror.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/ror.js deleted file mode 100644 index 2eda81da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/ror.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Bitwise circular shift right - * http://en.wikipedia.org/wiki/Circular_shift - */ - function ror(val, shift){ - return (val >> shift) | (val << (32 - shift)); - } - module.exports = ror; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/sign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/sign.js deleted file mode 100644 index b854a4ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/sign.js +++ /dev/null @@ -1,15 +0,0 @@ - - - /** - * Get sign of the value. - */ - function sign(val) { - var num = Number(val); - if (num === 0) return num; // +0 and +0 === 0 - if (isNaN(num)) return num; // NaN - return num < 0? -1 : 1; - } - - module.exports = sign; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/toInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/toInt.js deleted file mode 100644 index bcefae0e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/toInt.js +++ /dev/null @@ -1,15 +0,0 @@ - - - /** - * "Convert" value into an 32-bit integer. - * Works like `Math.floor` if val > 0 and `Math.ceil` if val < 0. - * IMPORTANT: val will wrap at 2^31 and -2^31. - * Perf tests: http://jsperf.com/vs-vs-parseint-bitwise-operators/7 - */ - function toInt(val){ - return ~~val; - } - - module.exports = toInt; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt.js deleted file mode 100644 index 5290b627..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * "Convert" value into a 32-bit unsigned integer. - * IMPORTANT: Value will wrap at 2^32. - */ - function toUInt(val){ - return val >>> 0; - } - - module.exports = toUInt; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt31.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt31.js deleted file mode 100644 index fcc5a97c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/number/toUInt31.js +++ /dev/null @@ -1,13 +0,0 @@ -var MAX_INT = require('./MAX_INT'); - - /** - * "Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - * IMPORTANT: value wil wrap at 2^31, if negative will return 0. - */ - function toUInt31(val){ - return (val <= 0)? 0 : (val > MAX_INT? ~~(val % (MAX_INT + 1)) : ~~val); - } - - module.exports = toUInt31; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object.js deleted file mode 100644 index 76c06424..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object.js +++ /dev/null @@ -1,42 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'bindAll' : require('./object/bindAll'), - 'contains' : require('./object/contains'), - 'deepEquals' : require('./object/deepEquals'), - 'deepFillIn' : require('./object/deepFillIn'), - 'deepMatches' : require('./object/deepMatches'), - 'deepMixIn' : require('./object/deepMixIn'), - 'equals' : require('./object/equals'), - 'every' : require('./object/every'), - 'fillIn' : require('./object/fillIn'), - 'filter' : require('./object/filter'), - 'find' : require('./object/find'), - 'forIn' : require('./object/forIn'), - 'forOwn' : require('./object/forOwn'), - 'functions' : require('./object/functions'), - 'get' : require('./object/get'), - 'has' : require('./object/has'), - 'hasOwn' : require('./object/hasOwn'), - 'keys' : require('./object/keys'), - 'map' : require('./object/map'), - 'matches' : require('./object/matches'), - 'max' : require('./object/max'), - 'merge' : require('./object/merge'), - 'min' : require('./object/min'), - 'mixIn' : require('./object/mixIn'), - 'namespace' : require('./object/namespace'), - 'pick' : require('./object/pick'), - 'pluck' : require('./object/pluck'), - 'reduce' : require('./object/reduce'), - 'reject' : require('./object/reject'), - 'set' : require('./object/set'), - 'size' : require('./object/size'), - 'some' : require('./object/some'), - 'unset' : require('./object/unset'), - 'values' : require('./object/values') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/bindAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/bindAll.js deleted file mode 100644 index b2f27d08..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/bindAll.js +++ /dev/null @@ -1,18 +0,0 @@ -var functions = require('./functions'); -var bind = require('../function/bind'); -var forEach = require('../array/forEach'); - - /** - * Binds methods of the object to be run in it's own context. - */ - function bindAll(obj, rest_methodNames){ - var keys = arguments.length > 1? - Array.prototype.slice.call(arguments, 1) : functions(obj); - forEach(keys, function(key){ - obj[key] = bind(obj[key], obj); - }); - } - - module.exports = bindAll; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/contains.js deleted file mode 100644 index 8076e2c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/contains.js +++ /dev/null @@ -1,13 +0,0 @@ -var some = require('./some'); - - /** - * Check if object contains value - */ - function contains(obj, needle) { - return some(obj, function(val) { - return (val === needle); - }); - } - module.exports = contains; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepEquals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepEquals.js deleted file mode 100644 index fcde9449..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepEquals.js +++ /dev/null @@ -1,27 +0,0 @@ -var isObject = require('../lang/isObject'); -var equals = require('./equals'); - - function defaultCompare(a, b) { - return a === b; - } - - /** - * Recursively checks for same properties and values. - */ - function deepEquals(a, b, callback){ - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - function compare(a, b){ - return deepEquals(a, b, callback); - } - - return equals(a, b, compare); - } - - module.exports = deepEquals; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepFillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepFillIn.js deleted file mode 100644 index d27db44d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepFillIn.js +++ /dev/null @@ -1,32 +0,0 @@ -var forOwn = require('./forOwn'); -var isPlainObject = require('../lang/isPlainObject'); - - /** - * Deeply copy missing properties in the target from the defaults. - */ - function deepFillIn(target, defaults){ - var i = 0, - n = arguments.length, - obj; - - while(++i < n) { - obj = arguments[i]; - if (obj) { - forOwn(obj, function(newValue, key) { - var curValue = target[key]; - if (curValue == null) { - target[key] = newValue; - } else if (isPlainObject(curValue) - && isPlainObject(newValue)) { - deepFillIn(curValue, newValue); - } - }); - } - } - - return target; - } - - module.exports = deepFillIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMatches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMatches.js deleted file mode 100644 index 3366c52d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMatches.js +++ /dev/null @@ -1,55 +0,0 @@ -var forOwn = require('./forOwn'); -var isArray = require('../lang/isArray'); - - function containsMatch(array, pattern) { - var i = -1, length = array.length; - while (++i < length) { - if (deepMatches(array[i], pattern)) { - return true; - } - } - - return false; - } - - function matchArray(target, pattern) { - var i = -1, patternLength = pattern.length; - while (++i < patternLength) { - if (!containsMatch(target, pattern[i])) { - return false; - } - } - - return true; - } - - function matchObject(target, pattern) { - var result = true; - forOwn(pattern, function(val, key) { - if (!deepMatches(target[key], val)) { - // Return false to break out of forOwn early - return (result = false); - } - }); - - return result; - } - - /** - * Recursively check if the objects match. - */ - function deepMatches(target, pattern){ - if (target && typeof target === 'object') { - if (isArray(target) && isArray(pattern)) { - return matchArray(target, pattern); - } else { - return matchObject(target, pattern); - } - } else { - return target === pattern; - } - } - - module.exports = deepMatches; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMixIn.js deleted file mode 100644 index a97e98d0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/deepMixIn.js +++ /dev/null @@ -1,34 +0,0 @@ -var forOwn = require('./forOwn'); -var isPlainObject = require('../lang/isPlainObject'); - - /** - * Mixes objects into the target object, recursively mixing existing child - * objects. - */ - function deepMixIn(target, objects) { - var i = 0, - n = arguments.length, - obj; - - while(++i < n){ - obj = arguments[i]; - if (obj) { - forOwn(obj, copyProp, target); - } - } - - return target; - } - - function copyProp(val, key) { - var existing = this[key]; - if (isPlainObject(val) && isPlainObject(existing)) { - deepMixIn(existing, val); - } else { - this[key] = val; - } - } - - module.exports = deepMixIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/equals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/equals.js deleted file mode 100644 index f50cbe4e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/equals.js +++ /dev/null @@ -1,36 +0,0 @@ -var hasOwn = require('./hasOwn'); -var every = require('./every'); -var isObject = require('../lang/isObject'); - - function defaultCompare(a, b) { - return a === b; - } - - // Makes a function to compare the object values from the specified compare - // operation callback. - function makeCompare(callback) { - return function(value, key) { - return hasOwn(this, key) && callback(value, this[key]); - }; - } - - function checkProperties(value, key) { - return hasOwn(this, key); - } - - /** - * Checks if two objects have the same keys and values. - */ - function equals(a, b, callback) { - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - return (every(a, makeCompare(callback), b) && - every(b, checkProperties, a)); - } - - module.exports = equals; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/every.js deleted file mode 100644 index 01106e5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/every.js +++ /dev/null @@ -1,23 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object every - */ - function every(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - forOwn(obj, function(val, key) { - // we consider any falsy values as "false" on purpose so shorthand - // syntax can be used to check property existence - if (!callback(val, key, obj)) { - result = false; - return false; // break - } - }); - return result; - } - - module.exports = every; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/fillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/fillIn.js deleted file mode 100644 index 80dcdf07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/fillIn.js +++ /dev/null @@ -1,20 +0,0 @@ -var forEach = require('../array/forEach'); -var forOwn = require('./forOwn'); - - /** - * Copy missing properties in the obj from the defaults. - */ - function fillIn(obj, var_defaults){ - forEach(Array.prototype.slice.call(arguments, 1), function(base){ - forOwn(base, function(val, key){ - if (obj[key] == null) { - obj[key] = val; - } - }); - }); - return obj; - } - - module.exports = fillIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/filter.js deleted file mode 100644 index 3a83a92f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/filter.js +++ /dev/null @@ -1,20 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Creates a new object with all the properties where the callback returns - * true. - */ - function filterValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - output[key] = value; - } - }); - - return output; - } - module.exports = filterValues; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/find.js deleted file mode 100644 index d39c0706..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/find.js +++ /dev/null @@ -1,21 +0,0 @@ -var some = require('./some'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Returns first item that matches criteria - */ - function find(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result; - some(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - result = value; - return true; //break - } - }); - return result; - } - - module.exports = find; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/forIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/forIn.js deleted file mode 100644 index 367f08ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/forIn.js +++ /dev/null @@ -1,62 +0,0 @@ - - - var _hasDontEnumBug, - _dontEnums; - - function checkDontEnum(){ - _dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - - _hasDontEnumBug = true; - - for (var key in {'toString': null}) { - _hasDontEnumBug = false; - } - } - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forIn(obj, fn, thisObj){ - var key, i = 0; - // no need to check if argument is a real object that way we can use - // it for arrays, functions, date, etc. - - //post-pone check till needed - if (_hasDontEnumBug == null) checkDontEnum(); - - for (key in obj) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - - if (_hasDontEnumBug) { - while (key = _dontEnums[i++]) { - // since we aren't using hasOwn check we need to make sure the - // property was overwritten - if (obj[key] !== Object.prototype[key]) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - } - } - } - - function exec(fn, obj, key, thisObj){ - return fn.call(thisObj, obj[key], key, obj); - } - - module.exports = forIn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/forOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/forOwn.js deleted file mode 100644 index 5f2dfbfc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/forOwn.js +++ /dev/null @@ -1,19 +0,0 @@ -var hasOwn = require('./hasOwn'); -var forIn = require('./forIn'); - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forOwn(obj, fn, thisObj){ - forIn(obj, function(val, key){ - if (hasOwn(obj, key)) { - return fn.call(thisObj, obj[key], key, obj); - } - }); - } - - module.exports = forOwn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/functions.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/functions.js deleted file mode 100644 index f5717979..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/functions.js +++ /dev/null @@ -1,18 +0,0 @@ -var forIn = require('./forIn'); - - /** - * return a list of all enumerable properties that have function values - */ - function functions(obj){ - var keys = []; - forIn(obj, function(val, key){ - if (typeof val === 'function'){ - keys.push(key); - } - }); - return keys.sort(); - } - - module.exports = functions; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/get.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/get.js deleted file mode 100644 index 6673561e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/get.js +++ /dev/null @@ -1,20 +0,0 @@ - - - /** - * get "nested" object property - */ - function get(obj, prop){ - var parts = prop.split('.'), - last = parts.pop(); - - while (prop = parts.shift()) { - obj = obj[prop]; - if (typeof obj !== 'object') return; - } - - return obj[last]; - } - - module.exports = get; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/has.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/has.js deleted file mode 100644 index ca9f2289..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/has.js +++ /dev/null @@ -1,15 +0,0 @@ -var get = require('./get'); - - var UNDEF; - - /** - * Check if object has nested property. - */ - function has(obj, prop){ - return get(obj, prop) !== UNDEF; - } - - module.exports = has; - - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/hasOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/hasOwn.js deleted file mode 100644 index 7e3c82ae..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/hasOwn.js +++ /dev/null @@ -1,12 +0,0 @@ - - - /** - * Safer Object.hasOwnProperty - */ - function hasOwn(obj, prop){ - return Object.prototype.hasOwnProperty.call(obj, prop); - } - - module.exports = hasOwn; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/keys.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/keys.js deleted file mode 100644 index dd2f4f55..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/keys.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object keys - */ - var keys = Object.keys || function (obj) { - var keys = []; - forOwn(obj, function(val, key){ - keys.push(key); - }); - return keys; - }; - - module.exports = keys; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/map.js deleted file mode 100644 index dd449a78..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/map.js +++ /dev/null @@ -1,18 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Creates a new object where all the values are the result of calling - * `callback`. - */ - function mapValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(val, key, obj) { - output[key] = callback(val, key, obj); - }); - - return output; - } - module.exports = mapValues; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/matches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/matches.js deleted file mode 100644 index 6074faa2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/matches.js +++ /dev/null @@ -1,20 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * checks if a object contains all given properties/values - */ - function matches(target, props){ - // can't use "object/every" because of circular dependency - var result = true; - forOwn(props, function(val, key){ - if (target[key] !== val) { - // break loop at first difference - return (result = false); - } - }); - return result; - } - - module.exports = matches; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/max.js deleted file mode 100644 index 3e8e92c7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/max.js +++ /dev/null @@ -1,12 +0,0 @@ -var arrMax = require('../array/max'); -var values = require('./values'); - - /** - * Returns maximum value inside object. - */ - function max(obj, compareFn) { - return arrMax(values(obj), compareFn); - } - - module.exports = max; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/merge.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/merge.js deleted file mode 100644 index 6961f608..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/merge.js +++ /dev/null @@ -1,40 +0,0 @@ -var hasOwn = require('./hasOwn'); -var deepClone = require('../lang/deepClone'); -var isObject = require('../lang/isObject'); - - /** - * Deep merge objects. - */ - function merge() { - var i = 1, - key, val, obj, target; - - // make sure we don't modify source element and it's properties - // objects are passed by reference - target = deepClone( arguments[0] ); - - while (obj = arguments[i++]) { - for (key in obj) { - if ( ! hasOwn(obj, key) ) { - continue; - } - - val = obj[key]; - - if ( isObject(val) && isObject(target[key]) ){ - // inception, deep merge objects - target[key] = merge(target[key], val); - } else { - // make sure arrays, regexp, date, objects are cloned - target[key] = deepClone(val); - } - - } - } - - return target; - } - - module.exports = merge; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/min.js deleted file mode 100644 index e1e66976..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/min.js +++ /dev/null @@ -1,12 +0,0 @@ -var arrMin = require('../array/min'); -var values = require('./values'); - - /** - * Returns minimum value inside object. - */ - function min(obj, iterator) { - return arrMin(values(obj), iterator); - } - - module.exports = min; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/mixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/mixIn.js deleted file mode 100644 index 55ec8fd5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/mixIn.js +++ /dev/null @@ -1,28 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Combine properties from all the objects into first one. - * - This method affects target object in place, if you want to create a new Object pass an empty object as first param. - * @param {object} target Target Object - * @param {...object} objects Objects to be combined (0...n objects). - * @return {object} Target Object. - */ - function mixIn(target, objects){ - var i = 0, - n = arguments.length, - obj; - while(++i < n){ - obj = arguments[i]; - if (obj != null) { - forOwn(obj, copyProp, target); - } - } - return target; - } - - function copyProp(val, key){ - this[key] = val; - } - - module.exports = mixIn; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/namespace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/namespace.js deleted file mode 100644 index c6e79f63..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/namespace.js +++ /dev/null @@ -1,19 +0,0 @@ -var forEach = require('../array/forEach'); - - /** - * Create nested object if non-existent - */ - function namespace(obj, path){ - if (!path) return obj; - forEach(path.split('.'), function(key){ - if (!obj[key]) { - obj[key] = {}; - } - obj = obj[key]; - }); - return obj; - } - - module.exports = namespace; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/pick.js deleted file mode 100644 index 74e56f98..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/pick.js +++ /dev/null @@ -1,18 +0,0 @@ - - - /** - * Return a copy of the object, filtered to only have values for the whitelisted keys. - */ - function pick(obj, var_keys){ - var keys = typeof arguments[1] !== 'string'? arguments[1] : Array.prototype.slice.call(arguments, 1), - out = {}, - i = 0, key; - while (key = keys[i++]) { - out[key] = obj[key]; - } - return out; - } - - module.exports = pick; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/pluck.js deleted file mode 100644 index e844df47..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/pluck.js +++ /dev/null @@ -1,13 +0,0 @@ -var map = require('./map'); -var prop = require('../function/prop'); - - /** - * Extract a list of property values. - */ - function pluck(obj, propName){ - return map(obj, prop(propName)); - } - - module.exports = pluck; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/reduce.js deleted file mode 100644 index 6f19a3a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/reduce.js +++ /dev/null @@ -1,29 +0,0 @@ -var forOwn = require('./forOwn'); -var size = require('./size'); - - /** - * Object reduce - */ - function reduce(obj, callback, memo, thisObj) { - var initial = arguments.length > 2; - - if (!size(obj) && !initial) { - throw new Error('reduce of empty object with no initial value'); - } - - forOwn(obj, function(value, key, list) { - if (!initial) { - memo = value; - initial = true; - } - else { - memo = callback.call(thisObj, memo, value, key, list); - } - }); - - return memo; - } - - module.exports = reduce; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/reject.js deleted file mode 100644 index 74643795..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/reject.js +++ /dev/null @@ -1,16 +0,0 @@ -var filter = require('./filter'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object reject - */ - function reject(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - return filter(obj, function(value, index, obj) { - return !callback(value, index, obj); - }, thisObj); - } - - module.exports = reject; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/set.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/set.js deleted file mode 100644 index 9b3cdc48..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/set.js +++ /dev/null @@ -1,17 +0,0 @@ -var namespace = require('./namespace'); - - /** - * set "nested" object property - */ - function set(obj, prop, val){ - var parts = (/^(.+)\.(.+)$/).exec(prop); - if (parts){ - namespace(obj, parts[1])[parts[2]] = val; - } else { - obj[prop] = val; - } - } - - module.exports = set; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/size.js deleted file mode 100644 index 97885953..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/size.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object size - */ - function size(obj) { - var count = 0; - forOwn(obj, function(){ - count++; - }); - return count; - } - - module.exports = size; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/some.js deleted file mode 100644 index 384c6f3c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/some.js +++ /dev/null @@ -1,21 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object some - */ - function some(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - forOwn(obj, function(val, key) { - if (callback(val, key, obj)) { - result = true; - return false; // break - } - }); - return result; - } - - module.exports = some; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/unset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/unset.js deleted file mode 100644 index 343bca0a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/unset.js +++ /dev/null @@ -1,23 +0,0 @@ -var has = require('./has'); - - /** - * Unset object property. - */ - function unset(obj, prop){ - if (has(obj, prop)) { - var parts = prop.split('.'), - last = parts.pop(); - while (prop = parts.shift()) { - obj = obj[prop]; - } - return (delete obj[last]); - - } else { - // if property doesn't exist treat as deleted - return true; - } - } - - module.exports = unset; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/values.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/values.js deleted file mode 100644 index 265a6938..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/object/values.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object values - */ - function values(obj) { - var vals = []; - forOwn(obj, function(val, key){ - vals.push(val); - }); - return vals; - } - - module.exports = values; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/package.json deleted file mode 100644 index 76eadf21..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/package.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "name": "mout", - "description": "Modular Utilities", - "version": "0.6.0", - "homepage": "http://moutjs.com/", - "contributors": [ - { - "name": "Adam Nowotny" - }, - { - "name": "André Cruz", - "email": "amdfcruz@gmail.com" - }, - { - "name": "Conrad Zimmerman", - "url": "http://www.conradz.com" - }, - { - "name": "Friedemann Altrock", - "email": "frodenius@gmail.com" - }, - { - "name": "Jarrod Overson", - "url": "http://jarrodoverson.com" - }, - { - "name": "Miller Medeiros", - "email": "contact@millermedeiros.com", - "url": "http://blog.millermedeiros.com" - }, - { - "name": "Zach Shipley" - } - ], - "keywords": [ - "utilities", - "functional", - "amd-utils", - "stdlib" - ], - "repository": { - "type": "git", - "url": "git://github.com/mout/mout.git" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://www.opensource.org/licenses/mit-license.php" - } - ], - "bugs": { - "url": "https://github.com/mout/mout/issues/" - }, - "main": "./index.js", - "scripts": { - "prepublish": "node build cjs .", - "pretest": "node build pkg", - "test": "node node_modules/istanbul/lib/cli test tests/runner.js --hook-run-in-context" - }, - "directories": { - "doc": "./doc" - }, - "devDependencies": { - "istanbul": "~0.1.27", - "jasmine-node": "~1.2.2", - "requirejs": "2.x", - "nodefy": "*", - "mdoc": "~0.3.2", - "handlebars": "~1.0.6", - "commander": "~1.0.5", - "rocambole": "~0.2.3" - }, - "testling": { - "preprocess": "node build testling", - "browsers": { - "ie": [ - 7, - 8, - 9, - 10 - ], - "firefox": [ - 17, - "nightly" - ], - "chrome": [ - 23, - "canary" - ], - "opera": [ - 12, - "next" - ], - "safari": [ - 5.1, - 6 - ], - "iphone": [ - 6 - ], - "ipad": [ - 6 - ] - }, - "scripts": [ - "tests/lib/jasmine/jasmine.js", - "tests/lib/jasmine/jasmine.async.js", - "tests/lib/jasmine/jasmine-tap.js", - "tests/lib/requirejs/require.js", - "tests/testling/src.js", - "tests/testling/specs.js", - "tests/runner.js" - ] - }, - "readme": "![mout](http://moutjs.com/logo.png \"Modular JavaScript Utilties\")\n\nhttp://moutjs.com/\n\n[![Build Status](https://travis-ci.org/mout/mout.png?branch=master)](https://travis-ci.org/mout/mout)\n\nAll code is library agnostic and consist mostly of helper methods that aren't\ndirectly related with the DOM, the purpose of this library isn't to replace\nDojo, jQuery, YUI, Mootools, etc, but to provide modular solutions for common\nproblems that aren't solved by most of them. Consider it as a crossbrowser\nJavaScript standard library.\n\n\n\n## Main goals ##\n\n - increase code reuse;\n - be clear (code should be clean/readable);\n - be easy to debug;\n - be easy to maintain;\n - follow best practices;\n - follow standards when possible;\n - **don't convert JavaScript into another language!**\n - be compatible with other frameworks;\n - be modular;\n - have unit tests for all modules;\n - work on multiple environments (IE7+, modern browsers, node.js);\n\n\n\n## What shouldn't be here ##\n\n - UI components;\n - CSS selector engine;\n - Event system - pub/sub;\n - Template engine;\n - Anything that isn't generic enough to be on a standard library;\n - Anything that could be a separate library and/or isn't a modular utility...\n\n\n\n## API Documentation ##\n\nOnline documentation can be found at http://moutjs.com/ or inside the\n`doc` folder.\n\n\n\n## FAQ / Wiki / IRC ##\n\nFor more info about project structure, design decisions, tips, how to\ncontribute, build system, etc, please check the [project\nwiki](https://github.com/mout/mout/wiki).\n\nWe also have an IRC channel [#moutjs on\nirc.freenode.net](http://webchat.freenode.net/?channels=moutjs)\n\n\n\n## License ##\n\nReleased under the [MIT License](http://www.opensource.org/licenses/mit-license.php).\n\n", - "readmeFilename": "README.md", - "_id": "mout@0.6.0", - "dist": { - "shasum": "d2f7a6e5a796040bf7b6259a41b46705f49d271d" - }, - "_from": "mout@~0.6.0", - "_resolved": "https://registry.npmjs.org/mout/-/mout-0.6.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString.js deleted file mode 100644 index 22685a7f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString.js +++ /dev/null @@ -1,15 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'contains' : require('./queryString/contains'), - 'decode' : require('./queryString/decode'), - 'encode' : require('./queryString/encode'), - 'getParam' : require('./queryString/getParam'), - 'getQuery' : require('./queryString/getQuery'), - 'parse' : require('./queryString/parse'), - 'setParam' : require('./queryString/setParam') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/contains.js deleted file mode 100644 index da678cf4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/contains.js +++ /dev/null @@ -1,12 +0,0 @@ -var getQuery = require('./getQuery'); - - /** - * Checks if query string contains parameter. - */ - function contains(url, paramName) { - var regex = new RegExp('(\\?|&)'+ paramName +'=', 'g'); //matches `?param=` or `¶m=` - return regex.test(getQuery(url)); - } - - module.exports = contains; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/decode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/decode.js deleted file mode 100644 index 7e689990..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/decode.js +++ /dev/null @@ -1,21 +0,0 @@ -var typecast = require('../string/typecast'); -var isString = require('../lang/isString'); - - /** - * Decode query string into an object of keys => vals. - */ - function decode(queryStr, shouldTypecast) { - var queryArr = (queryStr || '').replace('?', '').split('&'), - n = queryArr.length, - obj = {}, - item, val; - while (n--) { - item = queryArr[n].split('='); - val = shouldTypecast === false? item[1] : typecast(item[1]); - obj[item[0]] = isString(val)? decodeURIComponent(val) : val; - } - return obj; - } - - module.exports = decode; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/encode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/encode.js deleted file mode 100644 index 6d2b12f8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/encode.js +++ /dev/null @@ -1,15 +0,0 @@ -var forOwn = require('../object/forOwn'); - - /** - * Encode object into a query string. - */ - function encode(obj){ - var query = []; - forOwn(obj, function(val, key){ - query.push( key +'='+ encodeURIComponent(val) ); - }); - return (query.length)? '?'+ query.join('&') : ''; - } - - module.exports = encode; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getParam.js deleted file mode 100644 index f149c3ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getParam.js +++ /dev/null @@ -1,15 +0,0 @@ -var typecast = require('../string/typecast'); -var getQuery = require('./getQuery'); - - /** - * Get query parameter value. - */ - function getParam(url, param, shouldTypecast){ - var regexp = new RegExp('(\\?|&)'+ param + '=([^&]*)'), //matches `?param=value` or `¶m=value`, value = $2 - result = regexp.exec( getQuery(url) ), - val = (result && result[2])? result[2] : null; - return shouldTypecast === false? val : typecast(val); - } - - module.exports = getParam; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getQuery.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getQuery.js deleted file mode 100644 index 5194af2d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/getQuery.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * Gets full query as string with all special chars decoded. - */ - function getQuery(url) { - url = url.replace(/#.*/, ''); //removes hash (to avoid getting hash query) - var queryString = /\?[a-zA-Z0-9\=\&\%\$\-\_\.\+\!\*\'\(\)\,]+/.exec(url); //valid chars according to: http://www.ietf.org/rfc/rfc1738.txt - return (queryString)? decodeURIComponent(queryString[0]) : ''; - } - - module.exports = getQuery; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/parse.js deleted file mode 100644 index 532906c0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/parse.js +++ /dev/null @@ -1,13 +0,0 @@ -var decode = require('./decode'); -var getQuery = require('./getQuery'); - - /** - * Get query string, parses and decodes it. - */ - function parse(url, shouldTypecast) { - return decode(getQuery(url), shouldTypecast); - } - - module.exports = parse; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/setParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/setParam.js deleted file mode 100644 index 052a9ba6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/queryString/setParam.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Set query string parameter value - */ - function setParam(url, paramName, value){ - url = url || ''; - - var re = new RegExp('(\\?|&)'+ paramName +'=[^&]*' ); - var param = paramName +'='+ encodeURIComponent( value ); - - if ( re.test(url) ) { - return url.replace(re, '$1'+ param); - } else { - if (url.indexOf('?') === -1) { - url += '?'; - } - if (url.indexOf('=') !== -1) { - url += '&'; - } - return url + param; - } - - } - - module.exports = setParam; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random.js deleted file mode 100644 index d9267f01..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random.js +++ /dev/null @@ -1,16 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'choice' : require('./random/choice'), - 'guid' : require('./random/guid'), - 'rand' : require('./random/rand'), - 'randBit' : require('./random/randBit'), - 'randHex' : require('./random/randHex'), - 'randInt' : require('./random/randInt'), - 'randSign' : require('./random/randSign'), - 'random' : require('./random/random') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/choice.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/choice.js deleted file mode 100644 index 51aa82a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/choice.js +++ /dev/null @@ -1,15 +0,0 @@ -var randInt = require('./randInt'); -var isArray = require('../lang/isArray'); - - /** - * Returns a random element from the supplied arguments - * or from the array (if single argument is an array). - */ - function choice(items) { - var target = (arguments.length === 1 && isArray(items))? items : arguments; - return target[ randInt(0, target.length - 1) ]; - } - - module.exports = choice; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/guid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/guid.js deleted file mode 100644 index 41f6eddc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/guid.js +++ /dev/null @@ -1,24 +0,0 @@ -var randHex = require('./randHex'); -var choice = require('./choice'); - - /** - * Returns pseudo-random guid (UUID v4) - * IMPORTANT: it's not totally "safe" since randHex/choice uses Math.random - * by default and sequences can be predicted in some cases. See the - * "random/random" documentation for more info about it and how to replace - * the default PRNG. - */ - function guid() { - return ( - randHex(8)+'-'+ - randHex(4)+'-'+ - // v4 UUID always contain "4" at this position to specify it was - // randomly generated - '4' + randHex(3) +'-'+ - // v4 UUID always contain chars [a,b,8,9] at this position - choice(8, 9, 'a', 'b') + randHex(3)+'-'+ - randHex(12) - ); - } - module.exports = guid; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/rand.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/rand.js deleted file mode 100644 index 782dec88..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/rand.js +++ /dev/null @@ -1,15 +0,0 @@ -var random = require('./random'); -var MIN_INT = require('../number/MIN_INT'); -var MAX_INT = require('../number/MAX_INT'); - - /** - * Returns random number inside range - */ - function rand(min, max){ - min = min == null? MIN_INT : min; - max = max == null? MAX_INT : max; - return min + (max - min) * random(); - } - - module.exports = rand; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randBit.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randBit.js deleted file mode 100644 index bd20b4a0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randBit.js +++ /dev/null @@ -1,11 +0,0 @@ -var random = require('./random'); - - /** - * Returns random bit (0 or 1) - */ - function randomBit() { - return random() > 0.5? 1 : 0; - } - - module.exports = randomBit; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randHex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randHex.js deleted file mode 100644 index d8d711c3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randHex.js +++ /dev/null @@ -1,19 +0,0 @@ -var choice = require('./choice'); - - var _chars = '0123456789abcdef'.split(''); - - /** - * Returns a random hexadecimal string - */ - function randHex(size){ - size = size && size > 0? size : 6; - var str = ''; - while (size--) { - str += choice(_chars); - } - return str; - } - - module.exports = randHex; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randInt.js deleted file mode 100644 index e237d964..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randInt.js +++ /dev/null @@ -1,18 +0,0 @@ -var MIN_INT = require('../number/MIN_INT'); -var MAX_INT = require('../number/MAX_INT'); -var rand = require('./rand'); - - /** - * Gets random integer inside range or snap to min/max values. - */ - function randInt(min, max){ - min = min == null? MIN_INT : ~~min; - max = max == null? MAX_INT : ~~max; - // can't be max + 0.5 otherwise it will round up if `rand` - // returns `max` causing it to overflow range. - // -0.5 and + 0.49 are required to avoid bias caused by rounding - return Math.round( rand(min - 0.5, max + 0.499999999999) ); - } - - module.exports = randInt; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randSign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randSign.js deleted file mode 100644 index 5a9fed76..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/randSign.js +++ /dev/null @@ -1,11 +0,0 @@ -var random = require('./random'); - - /** - * Returns random sign (-1 or 1) - */ - function randomSign() { - return random() > 0.5? 1 : -1; - } - - module.exports = randomSign; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/random.js deleted file mode 100644 index 670a3cc4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/random/random.js +++ /dev/null @@ -1,18 +0,0 @@ - - - /** - * Just a wrapper to Math.random. No methods inside mout/random should call - * Math.random() directly so we can inject the pseudo-random number - * generator if needed (ie. in case we need a seeded random or a better - * algorithm than the native one) - */ - function random(){ - return random.get(); - } - - // we expose the method so it can be swapped if needed - random.get = Math.random; - - module.exports = random; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array.js deleted file mode 100644 index 7bcc961b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array.js +++ /dev/null @@ -1,46 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'append' : require('./array/append'), - 'collect' : require('./array/collect'), - 'combine' : require('./array/combine'), - 'compact' : require('./array/compact'), - 'contains' : require('./array/contains'), - 'difference' : require('./array/difference'), - 'every' : require('./array/every'), - 'filter' : require('./array/filter'), - 'find' : require('./array/find'), - 'findIndex' : require('./array/findIndex'), - 'flatten' : require('./array/flatten'), - 'forEach' : require('./array/forEach'), - 'indexOf' : require('./array/indexOf'), - 'insert' : require('./array/insert'), - 'intersection' : require('./array/intersection'), - 'invoke' : require('./array/invoke'), - 'join' : require('./array/join'), - 'lastIndexOf' : require('./array/lastIndexOf'), - 'map' : require('./array/map'), - 'max' : require('./array/max'), - 'min' : require('./array/min'), - 'pick' : require('./array/pick'), - 'pluck' : require('./array/pluck'), - 'range' : require('./array/range'), - 'reduce' : require('./array/reduce'), - 'reduceRight' : require('./array/reduceRight'), - 'reject' : require('./array/reject'), - 'remove' : require('./array/remove'), - 'removeAll' : require('./array/removeAll'), - 'shuffle' : require('./array/shuffle'), - 'some' : require('./array/some'), - 'sort' : require('./array/sort'), - 'split' : require('./array/split'), - 'toLookup' : require('./array/toLookup'), - 'union' : require('./array/union'), - 'unique' : require('./array/unique'), - 'xor' : require('./array/xor'), - 'zip' : require('./array/zip') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/append.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/append.js deleted file mode 100644 index 549d8754..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/append.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function () { - - /** - * Appends an array to the end of another. - * The first array will be modified. - */ - function append(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var pad = arr1.length, - i = -1, - len = arr2.length; - while (++i < len) { - arr1[pad + i] = arr2[i]; - } - return arr1; - } - return append; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/collect.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/collect.js deleted file mode 100644 index 8f60cda2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/collect.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['./append', '../function/makeIterator_'], function (append, makeIterator) { - - /** - * Maps the items in the array and concatenates the result arrays. - */ - function collect(arr, callback, thisObj){ - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - var value = callback(arr[i], i, arr); - if (value != null) { - append(results, value); - } - } - - return results; - } - - return collect; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/combine.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/combine.js deleted file mode 100644 index 22efb860..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/combine.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./indexOf'], function (indexOf) { - - /** - * Combines an array with all the items of another. - * Does not allow duplicates and is case and type sensitive. - */ - function combine(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var i = -1, len = arr2.length; - while (++i < len) { - if (indexOf(arr1, arr2[i]) === -1) { - arr1.push(arr2[i]); - } - } - - return arr1; - } - return combine; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/compact.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/compact.js deleted file mode 100644 index 02a81098..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/compact.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./filter'], function (filter) { - - /** - * Remove all null/undefined items from array. - */ - function compact(arr) { - return filter(arr, function(val){ - return (val != null); - }); - } - - return compact; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/contains.js deleted file mode 100644 index fca4f7cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/contains.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['./indexOf'], function (indexOf) { - - /** - * If array contains values. - */ - function contains(arr, val) { - return indexOf(arr, val) !== -1; - } - return contains; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/difference.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/difference.js deleted file mode 100644 index 819bda3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/difference.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./unique', './filter', './some', './contains'], function (unique, filter, some, contains) { - - - /** - * Return a new Array with elements that aren't present in the other Arrays. - */ - function difference(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return !some(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - return difference; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/every.js deleted file mode 100644 index 78ba46d3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/every.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array every - */ - function every(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (!callback(arr[i], i, arr) ) { - result = false; - break; - } - } - - return result; - } - - return every; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/filter.js deleted file mode 100644 index 52cf685a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/filter.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * Array filter - */ - function filter(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - return filter; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/find.js deleted file mode 100644 index 3957dcd5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/find.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./findIndex'], function (findIndex) { - - /** - * Returns first item that matches criteria - */ - function find(arr, iterator, thisObj){ - var idx = findIndex(arr, iterator, thisObj); - return idx >= 0? arr[idx] : void(0); - } - - return find; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/findIndex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/findIndex.js deleted file mode 100644 index 59dfeeb9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/findIndex.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Returns the index of the first item that matches criteria - */ - function findIndex(arr, iterator, thisObj){ - iterator = makeIterator(iterator, thisObj); - if (arr == null) { - return -1; - } - - var i = -1, len = arr.length; - while (++i < len) { - if (iterator(arr[i], i, arr)) { - return i; - } - } - - return -1; - } - - return findIndex; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/flatten.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/flatten.js deleted file mode 100644 index 42e87f43..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/flatten.js +++ /dev/null @@ -1,42 +0,0 @@ -define(['../lang/isArray', './append'], function (isArray, append) { - - /* - * Helper function to flatten to a destination array. - * Used to remove the need to create intermediate arrays while flattening. - */ - function flattenTo(arr, result, level) { - if (arr == null) { - return result; - } else if (level === 0) { - append(result, arr); - return result; - } - - var value, - i = -1, - len = arr.length; - while (++i < len) { - value = arr[i]; - if (isArray(value)) { - flattenTo(value, result, level - 1); - } else { - result.push(value); - } - } - return result; - } - - /** - * Recursively flattens an array. - * A new array containing all the elements is returned. - * If `shallow` is true, it will only flatten one level. - */ - function flatten(arr, level) { - level = level == null? -1 : level; - return flattenTo(arr, [], level); - } - - return flatten; - -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/forEach.js deleted file mode 100644 index 0e045868..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/forEach.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Array forEach - */ - function forEach(arr, callback, thisObj) { - if (arr == null) { - return; - } - var i = -1, - len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback.call(thisObj, arr[i], i, arr) === false ) { - break; - } - } - } - - return forEach; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/indexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/indexOf.js deleted file mode 100644 index 0e75f99b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/indexOf.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Array.indexOf - */ - function indexOf(arr, item, fromIndex) { - fromIndex = fromIndex || 0; - if (arr == null) { - return -1; - } - - var len = arr.length, - i = fromIndex < 0 ? len + fromIndex : fromIndex; - while (i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[i] === item) { - return i; - } - - i++; - } - - return -1; - } - - return indexOf; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/insert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/insert.js deleted file mode 100644 index d8d831f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/insert.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./difference', '../lang/toArray'], function (difference, toArray) { - - /** - * Insert item into array if not already present. - */ - function insert(arr, rest_items) { - var diff = difference(toArray(arguments).slice(1), arr); - if (diff.length) { - Array.prototype.push.apply(arr, diff); - } - return arr.length; - } - return insert; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/intersection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/intersection.js deleted file mode 100644 index 64e6ee97..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/intersection.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./unique', './filter', './every', './contains'], function (unique, filter, every, contains) { - - - /** - * Return a new Array with elements common to all Arrays. - * - based on underscore.js implementation - */ - function intersection(arr) { - var arrs = Array.prototype.slice.call(arguments, 1), - result = filter(unique(arr), function(needle){ - return every(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - return intersection; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/invoke.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/invoke.js deleted file mode 100644 index a2e78b39..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/invoke.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./forEach'], function (forEach) { - - /** - * Call `methodName` on each item of the array passing custom arguments if - * needed. - */ - function invoke(arr, methodName, var_args){ - if (arr == null) { - return arr; - } - - var args = Array.prototype.slice.call(arguments, 2); - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - value[methodName].apply(value, args); - } - - return arr; - } - - return invoke; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/join.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/join.js deleted file mode 100644 index 2c618d29..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/join.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./filter'], function(filter) { - - function isValidString(val) { - return (val != null && val !== ''); - } - - /** - * Joins strings with the specified separator inserted between each value. - * Null values and empty strings will be excluded. - */ - function join(items, separator) { - separator = separator || ''; - return filter(items, isValidString).join(separator); - } - - return join; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/lastIndexOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/lastIndexOf.js deleted file mode 100644 index 931235f4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/lastIndexOf.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Array lastIndexOf - */ - function lastIndexOf(arr, item, fromIndex) { - if (arr == null) { - return -1; - } - - var len = arr.length; - fromIndex = (fromIndex == null || fromIndex >= len)? len - 1 : fromIndex; - fromIndex = (fromIndex < 0)? len + fromIndex : fromIndex; - - while (fromIndex >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[fromIndex] === item) { - return fromIndex; - } - fromIndex--; - } - - return -1; - } - - return lastIndexOf; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/map.js deleted file mode 100644 index 1580b481..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/map.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * Array map - */ - function map(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null){ - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - results[i] = callback(arr[i], i, arr); - } - - return results; - } - - return map; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/max.js deleted file mode 100644 index a7326c89..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/max.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * Return maximum value inside array - */ - function max(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return Infinity; - } else if (arr.length && !iterator) { - return Math.max.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = -Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp > compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - return max; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/min.js deleted file mode 100644 index 41644480..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/min.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * Return minimum value inside array - */ - function min(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return -Infinity; - } else if (arr.length && !iterator) { - return Math.min.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp < compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - return min; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pick.js deleted file mode 100644 index 97d7f595..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pick.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../random/randInt'], function (randInt) { - - /** - * Remove a random item from the Array and return it - */ - function pick(arr){ - if (arr == null || !arr.length) return; - var idx = randInt(0, arr.length - 1); - return arr.splice(idx, 1)[0]; - } - - return pick; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pluck.js deleted file mode 100644 index c908856e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./map'], function (map) { - - /** - * Extract a list of property values. - */ - function pluck(arr, propName){ - return map(arr, propName); - } - - return pluck; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/range.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/range.js deleted file mode 100644 index 148ebf96..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/range.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../math/countSteps'], function (countSteps) { - - /** - * Returns an Array of numbers inside range. - */ - function range(start, stop, step) { - if (stop == null) { - stop = start; - start = 0; - } - step = step || 1; - - var result = [], - nSteps = countSteps(stop - start, step), - i = start; - - while (i <= stop) { - result.push(i); - i += step; - } - - return result; - } - - return range; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduce.js deleted file mode 100644 index 88aacfd5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduce.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['./forEach'], function (forEach) { - - /** - * Array reduce - */ - function reduce(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2, - result = initVal; - - if (arr == null || !arr.length) { - if (!hasInit) { - throw new Error('reduce of empty array with no initial value'); - } else { - return initVal; - } - } - - var i = -1, len = arr.length; - while (++i < len) { - if (!hasInit) { - result = arr[i]; - hasInit = true; - } else { - result = fn(result, arr[i], i, arr); - } - } - - return result; - } - - return reduce; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduceRight.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduceRight.js deleted file mode 100644 index ddae0e7f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reduceRight.js +++ /dev/null @@ -1,34 +0,0 @@ -define(function () { - - /** - * Array reduceRight - */ - function reduceRight(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2; - - if (arr == null || !arr.length) { - if (hasInit) { - return initVal; - } else { - throw new Error('reduce of empty array with no initial value'); - } - } - - var i = arr.length, result = initVal, value; - while (--i >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - value = arr[i]; - if (!hasInit) { - result = value; - hasInit = true; - } else { - result = fn(result, value, i, arr); - } - } - return result; - } - - return reduceRight; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reject.js deleted file mode 100644 index db105dde..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/reject.js +++ /dev/null @@ -1,25 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function(forEach, makeIterator) { - - /** - * Array reject - */ - function reject(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (!callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - return reject; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/remove.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/remove.js deleted file mode 100644 index dec9134d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/remove.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./indexOf'], function(indexOf){ - - /** - * Remove a single item from the array. - * (it won't remove duplicates, just a single item) - */ - function remove(arr, item){ - var idx = indexOf(arr, item); - if (idx !== -1) arr.splice(idx, 1); - } - - return remove; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/removeAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/removeAll.js deleted file mode 100644 index e81022b8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/removeAll.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./indexOf'], function(indexOf){ - - /** - * Remove all instances of an item from array. - */ - function removeAll(arr, item){ - var idx = indexOf(arr, item); - while (idx !== -1) { - arr.splice(idx, 1); - idx = indexOf(arr, item, idx); - } - } - - return removeAll; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/shuffle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/shuffle.js deleted file mode 100644 index f5a60972..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/shuffle.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['../random/randInt', './forEach'], function (randInt, forEach) { - - /** - * Shuffle array items. - */ - function shuffle(arr) { - var results = [], - rnd; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - if (!i) { - results[0] = arr[0]; - } else { - rnd = randInt(0, i); - results[i] = results[rnd]; - results[rnd] = arr[i]; - } - } - - return results; - } - - return shuffle; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/some.js deleted file mode 100644 index e46a9781..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/some.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array some - */ - function some(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback(arr[i], i, arr) ) { - result = true; - break; - } - } - - return result; - } - - return some; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/sort.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/sort.js deleted file mode 100644 index 4c194042..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/sort.js +++ /dev/null @@ -1,55 +0,0 @@ -define(function () { - - /** - * Merge sort (http://en.wikipedia.org/wiki/Merge_sort) - */ - function mergeSort(arr, compareFn) { - if (arr == null) { - return []; - } else if (arr.length < 2) { - return arr; - } - - if (compareFn == null) { - compareFn = defaultCompare; - } - - var mid, left, right; - - mid = ~~(arr.length / 2); - left = mergeSort( arr.slice(0, mid), compareFn ); - right = mergeSort( arr.slice(mid, arr.length), compareFn ); - - return merge(left, right, compareFn); - } - - function defaultCompare(a, b) { - return a < b ? -1 : (a > b? 1 : 0); - } - - function merge(left, right, compareFn) { - var result = []; - - while (left.length && right.length) { - if (compareFn(left[0], right[0]) <= 0) { - // if 0 it should preserve same order (stable) - result.push(left.shift()); - } else { - result.push(right.shift()); - } - } - - if (left.length) { - result.push.apply(result, left); - } - - if (right.length) { - result.push.apply(result, right); - } - - return result; - } - - return mergeSort; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/split.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/split.js deleted file mode 100644 index a17275eb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/split.js +++ /dev/null @@ -1,35 +0,0 @@ -define(function() { - - /** - * Split array into a fixed number of segments. - */ - function split(array, segments) { - segments = segments || 2; - var results = []; - if (array == null) { - return results; - } - - var minLength = Math.floor(array.length / segments), - remainder = array.length % segments, - i = 0, - len = array.length, - segmentIndex = 0, - segmentLength; - - while (i < len) { - segmentLength = minLength; - if (segmentIndex < remainder) { - segmentLength++; - } - - results.push(array.slice(i, i + segmentLength)); - - segmentIndex++; - i += segmentLength; - } - - return results; - } - return split; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/toLookup.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/toLookup.js deleted file mode 100644 index aac8fd1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/toLookup.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['../lang/isFunction'], function (isFunction) { - - /** - * Creates an object that holds a lookup for the objects in the array. - */ - function toLookup(arr, key) { - var result = {}; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length, value; - if (isFunction(key)) { - while (++i < len) { - value = arr[i]; - result[key(value)] = value; - } - } else { - while (++i < len) { - value = arr[i]; - result[value[key]] = value; - } - } - - return result; - } - return toLookup; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/union.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/union.js deleted file mode 100644 index 5f9922e5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/union.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./unique', './append'], function (unique, append) { - - /** - * Concat multiple arrays and remove duplicates - */ - function union(arrs) { - var results = []; - var i = -1, len = arguments.length; - while (++i < len) { - append(results, arguments[i]); - } - - return unique(results); - } - - return union; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/unique.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/unique.js deleted file mode 100644 index c4bd23b4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/unique.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./indexOf', './filter'], function(indexOf, filter){ - - /** - * @return {array} Array of unique items - */ - function unique(arr){ - return filter(arr, isUnique); - } - - function isUnique(item, i, arr){ - return indexOf(arr, item, i+1) === -1; - } - - return unique; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/xor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/xor.js deleted file mode 100644 index 7df89d9c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/xor.js +++ /dev/null @@ -1,24 +0,0 @@ -define(['./unique', './filter', './contains'], function (unique, filter, contains) { - - - /** - * Exclusive OR. Returns items that are present in a single array. - * - like ptyhon's `symmetric_difference` - */ - function xor(arr1, arr2) { - arr1 = unique(arr1); - arr2 = unique(arr2); - - var a1 = filter(arr1, function(item){ - return !contains(arr2, item); - }), - a2 = filter(arr2, function(item){ - return !contains(arr1, item); - }); - - return a1.concat(a2); - } - - return xor; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/zip.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/zip.js deleted file mode 100644 index 374cd282..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/array/zip.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['./max', './pluck', './map'], function (max, pluck, map) { - - function getLength(arr) { - return arr == null ? 0 : arr.length; - } - - /** - * Merges together the values of each of the arrays with the values at the - * corresponding position. - */ - function zip(arr){ - var len = arr ? max(map(arguments, getLength)) : 0, - results = [], - i = -1, - item; - while (++i < len) { - results.push(map(arguments, function(item) { - return item == null ? undefined : item[i]; - })); - } - - return results; - } - - return zip; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection.js deleted file mode 100644 index 386e6da9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection.js +++ /dev/null @@ -1,22 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'contains' : require('./collection/contains'), - 'every' : require('./collection/every'), - 'filter' : require('./collection/filter'), - 'find' : require('./collection/find'), - 'forEach' : require('./collection/forEach'), - 'make_' : require('./collection/make_'), - 'map' : require('./collection/map'), - 'max' : require('./collection/max'), - 'min' : require('./collection/min'), - 'pluck' : require('./collection/pluck'), - 'reduce' : require('./collection/reduce'), - 'reject' : require('./collection/reject'), - 'size' : require('./collection/size'), - 'some' : require('./collection/some') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/contains.js deleted file mode 100644 index 192167e8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/contains.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/contains', '../object/contains'], function (make, arrContains, objContains) { - - /** - */ - return make(arrContains, objContains); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/every.js deleted file mode 100644 index 6317f503..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/every.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/every', '../object/every'], function (make, arrEvery, objEvery) { - - /** - */ - return make(arrEvery, objEvery); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/filter.js deleted file mode 100644 index 4e7fadc8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/filter.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * filter collection values, returns array. - */ - function filter(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - var results = []; - if (!list) { - return results; - } - forEach(list, function(value, index, list) { - if (iterator(value, index, list)) { - results[results.length] = value; - } - }); - return results; - } - - return filter; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/find.js deleted file mode 100644 index 681f9414..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/find.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/find', '../object/find'], function(make, arrFind, objFind) { - - /** - * Find value that returns true on iterator check. - */ - return make(arrFind, objFind); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/forEach.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/forEach.js deleted file mode 100644 index 3b39d3ed..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/forEach.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/forEach', '../object/forOwn'], function (make, arrForEach, objForEach) { - - /** - */ - return make(arrForEach, objForEach); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/make_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/make_.js deleted file mode 100644 index 312e0564..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/make_.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function(){ - - /** - * internal method used to create other collection modules. - */ - function makeCollectionMethod(arrMethod, objMethod, defaultReturn) { - return function(){ - var args = Array.prototype.slice.call(arguments); - if (args[0] == null) { - return defaultReturn; - } - // array-like is treated as array - return (typeof args[0].length === 'number')? arrMethod.apply(null, args) : objMethod.apply(null, args); - }; - } - - return makeCollectionMethod; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/map.js deleted file mode 100644 index 96e24987..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/map.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../lang/isObject', '../object/values', '../array/map', '../function/makeIterator_'], function (isObject, values, arrMap, makeIterator) { - - /** - * Map collection values, returns Array. - */ - function map(list, callback, thisObj) { - callback = makeIterator(callback, thisObj); - // list.length to check array-like object, if not array-like - // we simply map all the object values - if( isObject(list) && list.length == null ){ - list = values(list); - } - return arrMap(list, function (val, key, list) { - return callback(val, key, list); - }); - } - - return map; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/max.js deleted file mode 100644 index de9a6da5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/max.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/max', '../object/max'], function (make, arrMax, objMax) { - - /** - * Get maximum value inside collection - */ - return make(arrMax, objMax); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/min.js deleted file mode 100644 index f0c239a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/min.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/min', '../object/min'], function (make, arrMin, objMin) { - - /** - * Get minimum value inside collection. - */ - return make(arrMin, objMin); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/pluck.js deleted file mode 100644 index ef784a7a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/pluck.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./map'], function (map) { - - /** - * Extract a list of property values. - */ - function pluck(list, key) { - return map(list, function(value) { - return value[key]; - }); - } - - return pluck; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reduce.js deleted file mode 100644 index bd05d43d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reduce.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/reduce', '../object/reduce'], function (make, arrReduce, objReduce) { - - /** - */ - return make(arrReduce, objReduce); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reject.js deleted file mode 100644 index 581adfdc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/reject.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./filter', '../function/makeIterator_'], function (filter, makeIterator) { - - /** - * Inverse or collection/filter - */ - function reject(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - return filter(list, function(value, index, list) { - return !iterator(value, index, list); - }, thisObj); - } - - return reject; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/size.js deleted file mode 100644 index 4e5ab419..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/size.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/isArray', '../object/size'], function (isArray, objSize) { - - /** - * Get collection size - */ - function size(list) { - if (!list) { - return 0; - } - if (isArray(list)) { - return list.length; - } - return objSize(list); - } - - return size; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/some.js deleted file mode 100644 index c0aebee2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/collection/some.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/some', '../object/some'], function (make, arrSome, objSome) { - - /** - */ - return make(arrSome, objSome); - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date.js deleted file mode 100644 index 4d449150..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'dayOfTheYear' : require('./date/dayOfTheYear'), - 'diff' : require('./date/diff'), - 'i18n_' : require('./date/i18n_'), - 'isLeapYear' : require('./date/isLeapYear'), - 'isSame' : require('./date/isSame'), - 'parseIso' : require('./date/parseIso'), - 'startOf' : require('./date/startOf'), - 'strftime' : require('./date/strftime'), - 'timezoneAbbr' : require('./date/timezoneAbbr'), - 'timezoneOffset' : require('./date/timezoneOffset'), - 'totalDaysInMonth' : require('./date/totalDaysInMonth'), - 'totalDaysInYear' : require('./date/totalDaysInYear'), - 'weekOfTheYear' : require('./date/weekOfTheYear') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/dayOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/dayOfTheYear.js deleted file mode 100644 index dc77ae1b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/dayOfTheYear.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/isDate'], function (isDate) { - - /** - * return the day of the year (1..366) - */ - function dayOfTheYear(date){ - return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - - Date.UTC(date.getFullYear(), 0, 1)) / 86400000 + 1; - } - - return dayOfTheYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/diff.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/diff.js deleted file mode 100644 index 667165fe..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/diff.js +++ /dev/null @@ -1,128 +0,0 @@ -define(['./totalDaysInMonth', './totalDaysInYear', '../time/convert'], function(totalDaysInMonth, totalDaysInYear, convert){ - - /** - * calculate the difference between dates (range) - */ - function diff(start, end, unitName){ - // sort the dates to make it easier to process (specially year/month) - if (start > end) { - var swap = start; - start = end; - end = swap; - } - - var output; - - if (unitName === 'month') { - output = getMonthsDiff(start, end); - } else if (unitName === 'year'){ - output = getYearsDiff(start, end); - } else if (unitName != null) { - if (unitName === 'day') { - // ignore timezone difference because of daylight savings time - start = toUtc(start); - end = toUtc(end); - } - output = convert(end - start, 'ms', unitName); - } else { - output = end - start; - } - - return output; - } - - - function toUtc(d){ - // we ignore timezone differences on purpose because of daylight - // savings time, otherwise it would return fractional days/weeks even - // if a full day elapsed. eg: - // Wed Feb 12 2014 00:00:00 GMT-0200 (BRST) - // Sun Feb 16 2014 00:00:00 GMT-0300 (BRT) - // diff should be 4 days and not 4.041666666666667 - return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), - d.getHours(), d.getMinutes(), d.getSeconds(), - d.getMilliseconds()); - } - - - function getMonthsDiff(start, end){ - return getElapsedMonths(start, end) + - getElapsedYears(start, end) * 12 + - getFractionalMonth(start, end); - } - - - function getYearsDiff(start, end){ - var elapsedYears = getElapsedYears(start, end); - return elapsedYears + getFractionalYear(start, end, elapsedYears); - } - - - function getElapsedMonths(start, end){ - var monthDiff = end.getMonth() - start.getMonth(); - if (monthDiff < 0) { - monthDiff += 12; - } - // less than a full month - if (start.getDate() > end.getDate()) { - monthDiff -= 1; - } - return monthDiff; - } - - - function getElapsedYears(start, end){ - var yearDiff = end.getFullYear() - start.getFullYear(); - // less than a full year - if (start.getMonth() > end.getMonth()) { - yearDiff -= 1; - } - return yearDiff; - } - - - function getFractionalMonth(start, end){ - var fractionalDiff = 0; - var startDay = start.getDate(); - var endDay = end.getDate(); - - if (startDay !== endDay) { - var startTotalDays = totalDaysInMonth(start); - var endTotalDays = totalDaysInMonth(end); - var totalDays; - var daysElapsed; - - if (startDay > endDay) { - // eg: Jan 29 - Feb 27 (29 days elapsed but not a full month) - var baseDay = startTotalDays - startDay; - daysElapsed = endDay + baseDay; - // total days should be relative to 1st day of next month if - // startDay > endTotalDays - totalDays = (startDay > endTotalDays)? - endTotalDays + baseDay + 1 : startDay + baseDay; - } else { - // fractional is only based on endMonth eg: Jan 12 - Feb 18 - // (6 fractional days, 28 days until next full month) - daysElapsed = endDay - startDay; - totalDays = endTotalDays; - } - - fractionalDiff = daysElapsed / totalDays; - } - - return fractionalDiff; - } - - - function getFractionalYear(start, end, elapsedYears){ - var base = elapsedYears? - new Date(end.getFullYear(), start.getMonth(), start.getDate()) : - start; - var elapsedDays = diff(base, end, 'day'); - return elapsedDays / totalDaysInYear(end); - } - - - return diff; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/en-US.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/en-US.js deleted file mode 100644 index 5e640c22..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/en-US.js +++ /dev/null @@ -1,61 +0,0 @@ -define(function(){ - // en-US (English, United States) - return { - "am" : "AM", - "pm" : "PM", - - "x": "%m/%d/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %I:%M:%S %p %Z", - - "months" : [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - - "months_abbr" : [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - - "days" : [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - - "days_abbr" : [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ] - }; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/pt-BR.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/pt-BR.js deleted file mode 100644 index 47256dd2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n/pt-BR.js +++ /dev/null @@ -1,61 +0,0 @@ -define(function(){ - // pt-BR (Brazillian Portuguese) - return { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Janeiro", - "Fevereiro", - "Março", - "Abril", - "Maio", - "Junho", - "Julho", - "Agosto", - "Setembro", - "Outubro", - "Novembro", - "Dezembro" - ], - - "months_abbr" : [ - "Jan", - "Fev", - "Mar", - "Abr", - "Mai", - "Jun", - "Jul", - "Ago", - "Set", - "Out", - "Nov", - "Dez" - ], - - "days" : [ - "Domingo", - "Segunda", - "Terça", - "Quarta", - "Quinta", - "Sexta", - "Sábado" - ], - - "days_abbr" : [ - "Dom", - "Seg", - "Ter", - "Qua", - "Qui", - "Sex", - "Sáb" - ] - }; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n_.js deleted file mode 100644 index c04ce885..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/i18n_.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../object/mixIn', './i18n/en-US'], function(mixIn, enUS){ - - // we also use mixIn to make sure we don't affect the original locale - var activeLocale = mixIn({}, enUS, { - // we expose a "set" method to allow overriding the global locale - set : function(localeData){ - mixIn(activeLocale, localeData); - } - }); - - return activeLocale; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isLeapYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isLeapYear.js deleted file mode 100644 index e400b43d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isLeapYear.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../lang/isDate'], function (isDate) { - - /** - * checks if it's a leap year - */ - function isLeapYear(fullYear){ - if (isDate(fullYear)) { - fullYear = fullYear.getFullYear(); - } - return fullYear % 400 === 0 || (fullYear % 100 !== 0 && fullYear % 4 === 0); - } - - return isLeapYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isSame.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isSame.js deleted file mode 100644 index f30531fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/isSame.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./startOf'], function (startOf) { - - /** - * Check if date is "same" with optional period - */ - function isSame(date1, date2, period){ - if (period) { - date1 = startOf(date1, period); - date2 = startOf(date2, period); - } - return Number(date1) === Number(date2); - } - - return isSame; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/parseIso.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/parseIso.js deleted file mode 100644 index 9a2aacb0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/parseIso.js +++ /dev/null @@ -1,146 +0,0 @@ -define(['../array/some'], function (some) { - - var datePatterns = [ - /^([0-9]{4})$/, // YYYY - /^([0-9]{4})-([0-9]{2})$/, // YYYY-MM (YYYYMM not allowed) - /^([0-9]{4})-?([0-9]{2})-?([0-9]{2})$/ // YYYY-MM-DD or YYYYMMDD - ]; - var ORD_DATE = /^([0-9]{4})-?([0-9]{3})$/; // YYYY-DDD - - var timePatterns = [ - /^([0-9]{2}(?:\.[0-9]*)?)$/, // HH.hh - /^([0-9]{2}):?([0-9]{2}(?:\.[0-9]*)?)$/, // HH:MM.mm - /^([0-9]{2}):?([0-9]{2}):?([0-9]{2}(\.[0-9]*)?)$/ // HH:MM:SS.ss - ]; - - var DATE_TIME = /^(.+)T(.+)$/; - var TIME_ZONE = /^(.+)([+\-])([0-9]{2}):?([0-9]{2})$/; - - function matchAll(str, patterns) { - var match; - var found = some(patterns, function(pattern) { - return !!(match = pattern.exec(str)); - }); - - return found ? match : null; - } - - function getDate(year, month, day) { - var date = new Date(Date.UTC(year, month, day)); - - // Explicitly set year to avoid Date.UTC making dates < 100 relative to - // 1900 - date.setUTCFullYear(year); - - var valid = - date.getUTCFullYear() === year && - date.getUTCMonth() === month && - date.getUTCDate() === day; - return valid ? +date : NaN; - } - - function parseOrdinalDate(str) { - var match = ORD_DATE.exec(str); - if (match ) { - var year = +match[1], - day = +match[2], - date = new Date(Date.UTC(year, 0, day)); - - if (date.getUTCFullYear() === year) { - return +date; - } - } - - return NaN; - } - - function parseDate(str) { - var match, year, month, day; - - var match = matchAll(str, datePatterns); - if (match === null) { - // Ordinal dates are verified differently. - return parseOrdinalDate(str); - } - - year = (match[1] === void 0) ? 0 : +match[1]; - month = (match[2] === void 0) ? 0 : +match[2] - 1; - day = (match[3] === void 0) ? 1 : +match[3]; - - return getDate(year, month, day); - } - - function getTime(hr, min, sec) { - var valid = - (hr < 24 && hr >= 0 && - min < 60 && min >= 0 && - sec < 60 && min >= 0) || - (hr === 24 && min === 0 && sec === 0); - if (!valid) { - return NaN; - } - - return ((hr * 60 + min) * 60 + sec) * 1000; - } - - function parseOffset(str) { - var match; - if (str.charAt(str.length - 1) === 'Z') { - str = str.substring(0, str.length - 1); - } else if ((match = TIME_ZONE.exec(str))) { - var match = TIME_ZONE.exec(str); - if (match) { - var hours = +match[3], - minutes = (match[4] === void 0) ? 0 : +match[4], - offset = getTime(hours, minutes, 0); - - if (match[2] === '-') { - offset *= -1; - } - - return { offset: offset, time: match[1] }; - } - } - - // No time zone specified, assume UTC - return { offset: 0, time: str }; - } - - function parseTime(str) { - var match; - var offset = parseOffset(str); - - str = offset.time; - offset = offset.offset; - if (isNaN(offset)) { - return NaN; - } - - match = matchAll(str, timePatterns); - if (match === null) { - return NaN; - } - - var hours = (match[1] === void 0) ? 0 : +match[1], - minutes = (match[2] === void 0) ? 0 : +match[2], - seconds = (match[3] === void 0) ? 0 : +match[3]; - - return getTime(hours, minutes, seconds) - offset; - } - - /** - * Parse an ISO8601 formatted date string, and return a Date object. - */ - function parseISO8601(str){ - var match = DATE_TIME.exec(str); - if (!match) { - // No time specified - return parseDate(str); - } - - return parseDate(match[1]) + parseTime(match[2]); - } - - return parseISO8601; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/startOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/startOf.js deleted file mode 100644 index 747f114d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/startOf.js +++ /dev/null @@ -1,54 +0,0 @@ -define(['../lang/clone'], function (clone) { - - /** - * get a new Date object representing start of period - */ - function startOf(date, period){ - date = clone(date); - - // intentionally removed "break" from switch since start of - // month/year/etc should also reset the following periods - switch (period) { - case 'year': - date.setMonth(0); - /* falls through */ - case 'month': - date.setDate(1); - /* falls through */ - case 'week': - case 'day': - date.setHours(0); - /* falls through */ - case 'hour': - date.setMinutes(0); - /* falls through */ - case 'minute': - date.setSeconds(0); - /* falls through */ - case 'second': - date.setMilliseconds(0); - break; - default: - throw new Error('"'+ period +'" is not a valid period'); - } - - // week is the only case that should reset the weekDay and maybe even - // overflow to previous month - if (period === 'week') { - var weekDay = date.getDay(); - var baseDate = date.getDate(); - if (weekDay) { - if (weekDay >= baseDate) { - //start of the week is on previous month - date.setDate(0); - } - date.setDate(date.getDate() - date.getDay()); - } - } - - return date; - } - - return startOf; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/strftime.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/strftime.js deleted file mode 100644 index dd782505..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/strftime.js +++ /dev/null @@ -1,113 +0,0 @@ -define(['../number/pad', './i18n_', './dayOfTheYear', './timezoneOffset', './timezoneAbbr', './weekOfTheYear'], function (pad, i18n, dayOfTheYear, timezoneOffset, timezoneAbbr, weekOfTheYear) { - - var _combinations = { - 'D': '%m/%d/%y', - 'F': '%Y-%m-%d', - 'r': '%I:%M:%S %p', - 'R': '%H:%M', - 'T': '%H:%M:%S', - 'x': 'locale', - 'X': 'locale', - 'c': 'locale' - }; - - - /** - * format date based on strftime format - */ - function strftime(date, format, localeData){ - localeData = localeData || i18n; - var reToken = /%([a-z%])/gi; - - function makeIterator(fn) { - return function(match, token){ - return fn(date, token, localeData); - }; - } - - return format - .replace(reToken, makeIterator(expandCombinations)) - .replace(reToken, makeIterator(convertToken)); - } - - - function expandCombinations(date, token, l10n){ - if (token in _combinations) { - var expanded = _combinations[token]; - return expanded === 'locale'? l10n[token] : expanded; - } else { - return '%'+ token; - } - } - - - function convertToken(date, token, l10n){ - switch (token){ - case 'a': - return l10n.days_abbr[date.getDay()]; - case 'A': - return l10n.days[date.getDay()]; - case 'h': - case 'b': - return l10n.months_abbr[date.getMonth()]; - case 'B': - return l10n.months[date.getMonth()]; - case 'C': - return pad(Math.floor(date.getFullYear() / 100), 2); - case 'd': - return pad(date.getDate(), 2); - case 'e': - return pad(date.getDate(), 2, ' '); - case 'H': - return pad(date.getHours(), 2); - case 'I': - return pad(date.getHours() % 12, 2); - case 'j': - return pad(dayOfTheYear(date), 3); - case 'L': - return pad(date.getMilliseconds(), 3); - case 'm': - return pad(date.getMonth() + 1, 2); - case 'M': - return pad(date.getMinutes(), 2); - case 'n': - return '\n'; - case 'p': - return date.getHours() >= 12? l10n.pm : l10n.am; - case 'P': - return convertToken(date, 'p', l10n).toLowerCase(); - case 's': - return date.getTime() / 1000; - case 'S': - return pad(date.getSeconds(), 2); - case 't': - return '\t'; - case 'u': - var day = date.getDay(); - return day === 0? 7 : day; - case 'U': - return pad(weekOfTheYear(date), 2); - case 'w': - return date.getDay(); - case 'W': - return pad(weekOfTheYear(date, 1), 2); - case 'y': - return pad(date.getFullYear() % 100, 2); - case 'Y': - return pad(date.getFullYear(), 4); - case 'z': - return timezoneOffset(date); - case 'Z': - return timezoneAbbr(date); - case '%': - return '%'; - default: - // keep unrecognized tokens - return '%'+ token; - } - } - - - return strftime; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneAbbr.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneAbbr.js deleted file mode 100644 index 225a6856..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneAbbr.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./timezoneOffset'], function(timezoneOffset) { - - /** - * Abbreviated time zone name or similar information. - */ - function timezoneAbbr(date){ - // Date.toString gives different results depending on the - // browser/system so we fallback to timezone offset - // chrome: 'Mon Apr 08 2013 09:02:04 GMT-0300 (BRT)' - // IE: 'Mon Apr 8 09:02:04 UTC-0300 2013' - var tz = /\(([A-Z]{3,4})\)/.exec(date.toString()); - return tz? tz[1] : timezoneOffset(date); - } - - return timezoneAbbr; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneOffset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneOffset.js deleted file mode 100644 index ca06705d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/timezoneOffset.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../number/pad'], function (pad) { - - /** - * time zone as hour and minute offset from UTC (e.g. +0900) - */ - function timezoneOffset(date){ - var offset = date.getTimezoneOffset(); - var abs = Math.abs(offset); - var h = pad(Math.floor(abs / 60), 2); - var m = pad(abs % 60, 2); - return (offset > 0? '-' : '+') + h + m; - } - - return timezoneOffset; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInMonth.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInMonth.js deleted file mode 100644 index 98f7e9d1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInMonth.js +++ /dev/null @@ -1,24 +0,0 @@ -define(['../lang/isDate', './isLeapYear'], function (isDate, isLeapYear) { - - var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - - /** - * returns the total amount of days in the month (considering leap years) - */ - function totalDaysInMonth(fullYear, monthIndex){ - if (isDate(fullYear)) { - var date = fullYear; - year = date.getFullYear(); - monthIndex = date.getMonth(); - } - - if (monthIndex === 1 && isLeapYear(fullYear)) { - return 29; - } else { - return DAYS_IN_MONTH[monthIndex]; - } - } - - return totalDaysInMonth; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInYear.js deleted file mode 100644 index e9036b42..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/totalDaysInYear.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./isLeapYear'], function (isLeapYear) { - - /** - * return the amount of days in the year following the gregorian calendar - * and leap years - */ - function totalDaysInYear(fullYear){ - return isLeapYear(fullYear)? 366 : 365; - } - - return totalDaysInYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/weekOfTheYear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/weekOfTheYear.js deleted file mode 100644 index 8dabc458..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/date/weekOfTheYear.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./dayOfTheYear'], function (dayOfTheYear) { - - /** - * Return the week of the year based on given firstDayOfWeek - */ - function weekOfTheYear(date, firstDayOfWeek){ - firstDayOfWeek = firstDayOfWeek == null? 0 : firstDayOfWeek; - var doy = dayOfTheYear(date); - var dow = (7 + date.getDay() - firstDayOfWeek) % 7; - var relativeWeekDay = 6 - firstDayOfWeek - dow; - return Math.floor((doy + relativeWeekDay) / 7); - } - - return weekOfTheYear; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function.js deleted file mode 100644 index 23f4fd74..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'bind' : require('./function/bind'), - 'compose' : require('./function/compose'), - 'debounce' : require('./function/debounce'), - 'func' : require('./function/func'), - 'makeIterator_' : require('./function/makeIterator_'), - 'partial' : require('./function/partial'), - 'prop' : require('./function/prop'), - 'series' : require('./function/series'), - 'throttle' : require('./function/throttle'), - 'timeout' : require('./function/timeout') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/bind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/bind.js deleted file mode 100644 index 09e5e20a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/bind.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function(){ - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - * @param {Function} fn Function. - * @param {object} context Execution context. - * @param {rest} args Arguments (0...n arguments). - * @return {Function} Wrapped Function. - */ - function bind(fn, context, args){ - var argsArr = slice(arguments, 2); //curried args - return function(){ - return fn.apply(context, argsArr.concat(slice(arguments))); - }; - } - - return bind; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/compose.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/compose.js deleted file mode 100644 index d8b228fa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/compose.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Returns a function that composes multiple functions, passing results to - * each other. - */ - function compose() { - var fns = arguments; - return function(arg){ - // only cares about the first argument since the chain can only - // deal with a single return value anyway. It should start from - // the last fn. - var n = fns.length; - while (n--) { - arg = fns[n].call(this, arg); - } - return arg; - }; - } - - return compose; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/debounce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/debounce.js deleted file mode 100644 index 21644ecc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/debounce.js +++ /dev/null @@ -1,29 +0,0 @@ -define(function () { - - /** - * Debounce callback execution - */ - function debounce(fn, threshold, isAsap){ - var timeout, result; - function debounced(){ - var args = arguments, context = this; - function delayed(){ - if (! isAsap) { - result = fn.apply(context, args); - } - timeout = null; - } - if (timeout) { - clearTimeout(timeout); - } else if (isAsap) { - result = fn.apply(context, args); - } - timeout = setTimeout(delayed, threshold); - return result; - } - return debounced; - } - - return debounce; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/func.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/func.js deleted file mode 100644 index b920e00e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/func.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Returns a function that call a method on the passed object - */ - function func(name){ - return function(obj){ - return obj[name](); - }; - } - - return func; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/makeIterator_.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/makeIterator_.js deleted file mode 100644 index deb6e137..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/makeIterator_.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['./prop', '../object/deepMatches'], function(prop, deepMatches) { - - /** - * Converts argument into a valid iterator. - * Used internally on most array/object/collection methods that receives a - * callback/iterator providing a shortcut syntax. - */ - function makeIterator(src, thisObj){ - switch(typeof src) { - case 'object': - // typeof null == "object" - return (src != null)? function(val, key, target){ - return deepMatches(val, src); - } : src; - case 'string': - case 'number': - return prop(src); - case 'function': - if (typeof thisObj === 'undefined') { - return src; - } else { - return function(val, i, arr){ - return src.call(thisObj, val, i, arr); - }; - } - default: - return src; - } - } - - return makeIterator; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/partial.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/partial.js deleted file mode 100644 index ad730746..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/partial.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function () { - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Creates a partially applied function. - */ - function partial(fn, var_args){ - var argsArr = slice(arguments, 1); //curried args - return function(){ - return fn.apply(this, argsArr.concat(slice(arguments))); - }; - } - - return partial; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/prop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/prop.js deleted file mode 100644 index c9df78ca..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/prop.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Returns a function that gets a property of the passed object - */ - function prop(name){ - return function(obj){ - return obj[name]; - }; - } - - return prop; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/series.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/series.js deleted file mode 100644 index c8856a27..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/series.js +++ /dev/null @@ -1,22 +0,0 @@ -define(function () { - - /** - * Returns a function that will execute a list of functions in sequence - * passing the same arguments to each one. (useful for batch processing - * items during a forEach loop) - */ - function series(){ - var fns = arguments; - return function(){ - var i = 0, - n = fns.length; - while (i < n) { - fns[i].apply(this, arguments); - i += 1; - } - }; - } - - return series; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/throttle.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/throttle.js deleted file mode 100644 index 8ce3929a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/throttle.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../time/now'], function (now) { - - /** - */ - function throttle(fn, delay){ - var context, timeout, result, args, - cur, diff, prev = 0; - function delayed(){ - prev = now(); - timeout = null; - result = fn.apply(context, args); - } - function throttled(){ - context = this; - args = arguments; - cur = now(); - diff = delay - (cur - prev); - if (diff <= 0) { - clearTimeout(timeout); - prev = cur; - result = fn.apply(context, args); - } else if (! timeout) { - timeout = setTimeout(delayed, diff); - } - return result; - } - return throttled; - } - - return throttle; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/timeout.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/timeout.js deleted file mode 100644 index 15388bdd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/function/timeout.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function () { - - function slice(arr, offset){ - return Array.prototype.slice.call(arr, offset || 0); - } - - /** - * Delays the call of a function within a given context. - */ - function timeout(fn, millis, context){ - - var args = slice(arguments, 3); - - return setTimeout(function() { - fn.apply(context, args); - }, millis); - } - - return timeout; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/index.js deleted file mode 100644 index 744bb119..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/index.js +++ /dev/null @@ -1,24 +0,0 @@ -/**@license - * mout v0.6.0 | http://moutjs.com | MIT license - */ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'VERSION' : '0.6.0', - 'array' : require('./array'), - 'collection' : require('./collection'), - 'date' : require('./date'), - 'function' : require('./function'), - 'lang' : require('./lang'), - 'math' : require('./math'), - 'number' : require('./number'), - 'object' : require('./object'), - 'queryString' : require('./queryString'), - 'random' : require('./random'), - 'string' : require('./string'), - 'time' : require('./time') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang.js deleted file mode 100644 index de16b597..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang.js +++ /dev/null @@ -1,36 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'clone' : require('./lang/clone'), - 'createObject' : require('./lang/createObject'), - 'ctorApply' : require('./lang/ctorApply'), - 'deepClone' : require('./lang/deepClone'), - 'defaults' : require('./lang/defaults'), - 'inheritPrototype' : require('./lang/inheritPrototype'), - 'is' : require('./lang/is'), - 'isArguments' : require('./lang/isArguments'), - 'isArray' : require('./lang/isArray'), - 'isBoolean' : require('./lang/isBoolean'), - 'isDate' : require('./lang/isDate'), - 'isEmpty' : require('./lang/isEmpty'), - 'isFinite' : require('./lang/isFinite'), - 'isFunction' : require('./lang/isFunction'), - 'isInteger' : require('./lang/isInteger'), - 'isKind' : require('./lang/isKind'), - 'isNaN' : require('./lang/isNaN'), - 'isNull' : require('./lang/isNull'), - 'isNumber' : require('./lang/isNumber'), - 'isObject' : require('./lang/isObject'), - 'isPlainObject' : require('./lang/isPlainObject'), - 'isRegExp' : require('./lang/isRegExp'), - 'isString' : require('./lang/isString'), - 'isUndefined' : require('./lang/isUndefined'), - 'isnt' : require('./lang/isnt'), - 'kindOf' : require('./lang/kindOf'), - 'toArray' : require('./lang/toArray'), - 'toString' : require('./lang/toString') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/clone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/clone.js deleted file mode 100644 index 468489a1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/clone.js +++ /dev/null @@ -1,47 +0,0 @@ -define(['./kindOf', './isPlainObject', '../object/mixIn'], function (kindOf, isPlainObject, mixIn) { - - /** - * Clone native types. - */ - function clone(val){ - switch (kindOf(val)) { - case 'Object': - return cloneObject(val); - case 'Array': - return cloneArray(val); - case 'RegExp': - return cloneRegExp(val); - case 'Date': - return cloneDate(val); - default: - return val; - } - } - - function cloneObject(source) { - if (isPlainObject(source)) { - return mixIn({}, source); - } else { - return source; - } - } - - function cloneRegExp(r) { - var flags = ''; - flags += r.multiline ? 'm' : ''; - flags += r.global ? 'g' : ''; - flags += r.ignorecase ? 'i' : ''; - return new RegExp(r.source, flags); - } - - function cloneDate(date) { - return new Date(+date); - } - - function cloneArray(arr) { - return arr.slice(); - } - - return clone; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/createObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/createObject.js deleted file mode 100644 index f7661500..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/createObject.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../object/mixIn'], function(mixIn){ - - /** - * Create Object using prototypal inheritance and setting custom properties. - * - Mix between Douglas Crockford Prototypal Inheritance <http://javascript.crockford.com/prototypal.html> and the EcmaScript 5 `Object.create()` method. - * @param {object} parent Parent Object. - * @param {object} [props] Object properties. - * @return {object} Created object. - */ - function createObject(parent, props){ - function F(){} - F.prototype = parent; - return mixIn(new F(), props); - - } - return createObject; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/ctorApply.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/ctorApply.js deleted file mode 100644 index a9ac1c54..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/ctorApply.js +++ /dev/null @@ -1,17 +0,0 @@ -define(function () { - - function F(){} - - /** - * Do fn.apply on a constructor. - */ - function ctorApply(ctor, args) { - F.prototype = ctor.prototype; - var instance = new F(); - ctor.apply(instance, args); - return instance; - } - - return ctorApply; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/deepClone.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/deepClone.js deleted file mode 100644 index d45c10aa..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/deepClone.js +++ /dev/null @@ -1,45 +0,0 @@ -define(['./clone', '../object/forOwn', './kindOf', './isPlainObject'], function (clone, forOwn, kindOf, isPlainObject) { - - /** - * Recursively clone native types. - */ - function deepClone(val, instanceClone) { - switch ( kindOf(val) ) { - case 'Object': - return cloneObject(val, instanceClone); - case 'Array': - return cloneArray(val, instanceClone); - default: - return clone(val); - } - } - - function cloneObject(source, instanceClone) { - if (isPlainObject(source)) { - var out = {}; - forOwn(source, function(val, key) { - this[key] = deepClone(val, instanceClone); - }, out); - return out; - } else if (instanceClone) { - return instanceClone(source); - } else { - return source; - } - } - - function cloneArray(arr, instanceClone) { - var out = [], - i = -1, - n = arr.length, - val; - while (++i < n) { - out[i] = deepClone(arr[i], instanceClone); - } - return out; - } - - return deepClone; - -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/defaults.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/defaults.js deleted file mode 100644 index 5156b1bb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/defaults.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./toArray', '../array/find'], function (toArray, find) { - - /** - * Return first non void argument - */ - function defaults(var_args){ - return find(toArray(arguments), nonVoid); - } - - function nonVoid(val){ - return val != null; - } - - return defaults; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/inheritPrototype.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/inheritPrototype.js deleted file mode 100644 index c1fda3a7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/inheritPrototype.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./createObject'], function(createObject){ - - /** - * Inherit prototype from another Object. - * - inspired by Nicholas Zackas <http://nczonline.net> Solution - * @param {object} child Child object - * @param {object} parent Parent Object - */ - function inheritPrototype(child, parent){ - var p = createObject(parent.prototype); - p.constructor = child; - child.prototype = p; - } - - return inheritPrototype; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/is.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/is.js deleted file mode 100644 index 261a2077..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/is.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Check if both arguments are egal. - */ - function is(x, y){ - // implementation borrowed from harmony:egal spec - if (x === y) { - // 0 === -0, but they are not identical - return x !== 0 || 1 / x === 1 / y; - } - - // NaN !== NaN, but they are identical. - // NaNs are the only non-reflexive value, i.e., if x !== x, - // then x is a NaN. - // isNaN is broken: it converts its argument to number, so - // isNaN("foo") => true - return x !== x && y !== y; - } - - return is; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArguments.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArguments.js deleted file mode 100644 index f889ee8e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArguments.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./isKind'], function (isKind) { - - /** - */ - var isArgs = isKind(arguments, 'Arguments')? - function(val){ - return isKind(val, 'Arguments'); - } : - function(val){ - // Arguments is an Object on IE7 - return !!(val && Object.prototype.hasOwnProperty.call(val, 'callee')); - }; - - return isArgs; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArray.js deleted file mode 100644 index 886e2aa5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isArray.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - var isArray = Array.isArray || function (val) { - return isKind(val, 'Array'); - }; - return isArray; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isBoolean.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isBoolean.js deleted file mode 100644 index 1ca27a69..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isBoolean.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isBoolean(val) { - return isKind(val, 'Boolean'); - } - return isBoolean; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isDate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isDate.js deleted file mode 100644 index 2708d676..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isDate.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isDate(val) { - return isKind(val, 'Date'); - } - return isDate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isEmpty.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isEmpty.js deleted file mode 100644 index 4cc3d2db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isEmpty.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../object/forOwn', './isArray'], function (forOwn, isArray) { - - function isEmpty(val){ - if (val == null) { - // typeof null == 'object' so we check it first - return false; - } else if ( typeof val === 'string' || isArray(val) ) { - return !val.length; - } else if ( typeof val === 'object' || typeof val === 'function' ) { - var result = true; - forOwn(val, function(){ - result = false; - return false; // break loop - }); - return result; - } else { - return false; - } - } - - return isEmpty; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFinite.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFinite.js deleted file mode 100644 index 5a982f4b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFinite.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - var global = this; - - /** - * Check if value is finite - */ - function isFinite(val){ - var is = false; - if (typeof val === 'string' && val !== '') { - is = global.isFinite( parseFloat(val) ); - } else if (isNumber(val)){ - // need to use isNumber because of Number constructor - is = global.isFinite( val ); - } - return is; - } - - return isFinite; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFunction.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFunction.js deleted file mode 100644 index ff5df7f0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isFunction.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isFunction(val) { - return isKind(val, 'Function'); - } - return isFunction; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isInteger.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isInteger.js deleted file mode 100644 index 1931f516..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - /** - * Check if value is an integer - */ - function isInteger(val){ - return isNumber(val) && (val % 1 === 0); - } - - return isInteger; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isKind.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isKind.js deleted file mode 100644 index 6937a12f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isKind.js +++ /dev/null @@ -1,9 +0,0 @@ -define(['./kindOf'], function (kindOf) { - /** - * Check if value is from a specific "kind". - */ - function isKind(val, kind){ - return kindOf(val) === kind; - } - return isKind; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNaN.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNaN.js deleted file mode 100644 index 9467a3c8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNaN.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - /** - * Check if value is NaN for realz - */ - function isNaN(val){ - // based on the fact that NaN !== NaN - // need to check if it's a number to avoid conflicts with host objects - // also need to coerce ToNumber to avoid edge case `new Number(NaN)` - return !isNumber(val) || val != +val; - } - - return isNaN; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNull.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNull.js deleted file mode 100644 index 506e05ea..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNull.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function () { - /** - */ - function isNull(val){ - return val === null; - } - return isNull; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNumber.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNumber.js deleted file mode 100644 index 9a832c5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isNumber.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isNumber(val) { - return isKind(val, 'Number'); - } - return isNumber; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isObject.js deleted file mode 100644 index 0befb063..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isObject.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isObject(val) { - return isKind(val, 'Object'); - } - return isObject; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isPlainObject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isPlainObject.js deleted file mode 100644 index 6c5854fd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isPlainObject.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Checks if the value is created by the `Object` constructor. - */ - function isPlainObject(value) { - return (!!value - && typeof value === 'object' - && value.constructor === Object); - } - - return isPlainObject; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isRegExp.js deleted file mode 100644 index d78a03da..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isRegExp.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isRegExp(val) { - return isKind(val, 'RegExp'); - } - return isRegExp; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isString.js deleted file mode 100644 index 8a42fe01..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isString.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isString(val) { - return isKind(val, 'String'); - } - return isString; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isUndefined.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isUndefined.js deleted file mode 100644 index c57b28eb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isUndefined.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function () { - var UNDEF; - - /** - */ - function isUndef(val){ - return val === UNDEF; - } - return isUndef; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isnt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isnt.js deleted file mode 100644 index d4336222..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/isnt.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./is'], function (is) { - - /** - * Check if both values are not identical/egal - */ - function isnt(x, y){ - return !is(x, y); - } - - return isnt; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/kindOf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/kindOf.js deleted file mode 100644 index 97d21d15..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/kindOf.js +++ /dev/null @@ -1,20 +0,0 @@ -define(function () { - - var _rKind = /^\[object (.*)\]$/, - _toString = Object.prototype.toString, - UNDEF; - - /** - * Gets the "kind" of value. (e.g. "String", "Number", etc) - */ - function kindOf(val) { - if (val === null) { - return 'Null'; - } else if (val === UNDEF) { - return 'Undefined'; - } else { - return _rKind.exec( _toString.call(val) )[1]; - } - } - return kindOf; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toArray.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toArray.js deleted file mode 100644 index 552916f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toArray.js +++ /dev/null @@ -1,31 +0,0 @@ -define(['./kindOf'], function (kindOf) { - - var _win = this; - - /** - * Convert array-like object into array - */ - function toArray(val){ - var ret = [], - kind = kindOf(val), - n; - - if (val != null) { - if ( val.length == null || kind === 'String' || kind === 'Function' || kind === 'RegExp' || val === _win ) { - //string, regexp, function have .length but user probably just want - //to wrap value into an array.. - ret[ret.length] = val; - } else { - //window returns true on isObject in IE7 and may have length - //property. `typeof NodeList` returns `function` on Safari so - //we can't use it (#58) - n = val.length; - while (n--) { - ret[n] = val[n]; - } - } - } - return ret; - } - return toArray; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toString.js deleted file mode 100644 index c28b89af..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/lang/toString.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * Typecast a value to a String, using an empty string value for null or - * undefined. - */ - function toString(val){ - return val == null ? '' : val.toString(); - } - - return toString; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math.js deleted file mode 100644 index e2ba8705..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'ceil' : require('./math/ceil'), - 'clamp' : require('./math/clamp'), - 'countSteps' : require('./math/countSteps'), - 'floor' : require('./math/floor'), - 'inRange' : require('./math/inRange'), - 'isNear' : require('./math/isNear'), - 'lerp' : require('./math/lerp'), - 'loop' : require('./math/loop'), - 'map' : require('./math/map'), - 'norm' : require('./math/norm'), - 'round' : require('./math/round') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/ceil.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/ceil.js deleted file mode 100644 index d73b0581..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/ceil.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Round value up with a custom radix. - */ - function ceil(val, step){ - step = Math.abs(step || 1); - return Math.ceil(val / step) * step; - } - - return ceil; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/clamp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/clamp.js deleted file mode 100644 index fb5a1484..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/clamp.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Clamps value inside range. - */ - function clamp(val, min, max){ - return val < min? min : (val > max? max : val); - } - return clamp; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/countSteps.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/countSteps.js deleted file mode 100644 index 0ecb32f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/countSteps.js +++ /dev/null @@ -1,16 +0,0 @@ -define(function(){ - /** - * Count number of full steps. - */ - function countSteps(val, step, overflow){ - val = Math.floor(val / step); - - if (overflow) { - return val % overflow; - } - - return val; - } - - return countSteps; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/floor.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/floor.js deleted file mode 100644 index 8a4456b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/floor.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Floor value to full steps. - */ - function floor(val, step){ - step = Math.abs(step || 1); - return Math.floor(val / step) * step; - } - return floor; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/inRange.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/inRange.js deleted file mode 100644 index 0c890536..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/inRange.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Checks if value is inside the range. - */ - function inRange(val, min, max, threshold){ - threshold = threshold || 0; - return (val + threshold >= min && val - threshold <= max); - } - - return inRange; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/isNear.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/isNear.js deleted file mode 100644 index b308a0b0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/isNear.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Check if value is close to target. - */ - function isNear(val, target, threshold){ - return (Math.abs(val - target) <= threshold); - } - return isNear; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/lerp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/lerp.js deleted file mode 100644 index 26b99d04..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/lerp.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Linear interpolation. - * IMPORTANT:will return `Infinity` if numbers overflow Number.MAX_VALUE - */ - function lerp(ratio, start, end){ - return start + (end - start) * ratio; - } - - return lerp; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/loop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/loop.js deleted file mode 100644 index c735ecf6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/loop.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Loops value inside range. - */ - function loop(val, min, max){ - return val < min? max : (val > max? min : val); - } - - return loop; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/map.js deleted file mode 100644 index bf7dc5d5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/map.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['./lerp', './norm'], function(lerp, norm){ - /** - * Maps a number from one scale to another. - * @example map(3, 0, 4, -1, 1) -> 0.5 - */ - function map(val, min1, max1, min2, max2){ - return lerp( norm(val, min1, max1), min2, max2 ); - } - return map; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/norm.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/norm.js deleted file mode 100644 index fccae20e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/norm.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Gets normalized ratio of value inside range. - */ - function norm(val, min, max){ - return (val - min) / (max - min); - } - return norm; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/round.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/round.js deleted file mode 100644 index b43e4ac2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/math/round.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - /** - * Round number to a specific radix - */ - function round(value, radix){ - radix = radix || 1; // default round 1 - return Math.round(value / radix) * radix; - } - - return round; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number.js deleted file mode 100644 index cb52fc75..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'MAX_INT' : require('./number/MAX_INT'), - 'MAX_UINT' : require('./number/MAX_UINT'), - 'MIN_INT' : require('./number/MIN_INT'), - 'abbreviate' : require('./number/abbreviate'), - 'currencyFormat' : require('./number/currencyFormat'), - 'enforcePrecision' : require('./number/enforcePrecision'), - 'pad' : require('./number/pad'), - 'rol' : require('./number/rol'), - 'ror' : require('./number/ror'), - 'sign' : require('./number/sign'), - 'toInt' : require('./number/toInt'), - 'toUInt' : require('./number/toUInt'), - 'toUInt31' : require('./number/toUInt31') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_INT.js deleted file mode 100644 index 23a6e1a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit signed integer value. (2^31 - 1) - */ -define(function(){ - return 2147483647; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_UINT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_UINT.js deleted file mode 100644 index a035096c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MAX_UINT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit unsigned integet value (2^32 - 1) - */ -define(function(){ - return 4294967295; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MIN_INT.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MIN_INT.js deleted file mode 100644 index 9b3e9781..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/MIN_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Minimum 32-bit signed integer value (-2^31). - */ -define(function(){ - return -2147483648; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/abbreviate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/abbreviate.js deleted file mode 100644 index 7e7405ad..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/abbreviate.js +++ /dev/null @@ -1,35 +0,0 @@ -define(['./enforcePrecision'], function (enforcePrecision) { - - var _defaultDict = { - thousand : 'K', - million : 'M', - billion : 'B' - }; - - /** - * Abbreviate number if bigger than 1000. (eg: 2.5K, 17.5M, 3.4B, ...) - */ - function abbreviateNumber(val, nDecimals, dict){ - nDecimals = nDecimals != null? nDecimals : 1; - dict = dict || _defaultDict; - val = enforcePrecision(val, nDecimals); - - var str, mod; - - if (val < 1000000) { - mod = enforcePrecision(val / 1000, nDecimals); - // might overflow to next scale during rounding - str = mod < 1000? mod + dict.thousand : 1 + dict.million; - } else if (val < 1000000000) { - mod = enforcePrecision(val / 1000000, nDecimals); - str = mod < 1000? mod + dict.million : 1 + dict.billion; - } else { - str = enforcePrecision(val / 1000000000, nDecimals) + dict.billion; - } - - return str; - } - - return abbreviateNumber; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/currencyFormat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/currencyFormat.js deleted file mode 100644 index dcde8fc7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/currencyFormat.js +++ /dev/null @@ -1,26 +0,0 @@ -define(function () { - - /** - * Converts number into currency format - */ - function currencyFormat(val, nDecimalDigits, decimalSeparator, thousandsSeparator) { - nDecimalDigits = nDecimalDigits == null? 2 : nDecimalDigits; - decimalSeparator = decimalSeparator == null? '.' : decimalSeparator; - thousandsSeparator = thousandsSeparator == null? ',' : thousandsSeparator; - - //can't use enforce precision since it returns a number and we are - //doing a RegExp over the string - var fixed = val.toFixed(nDecimalDigits), - //separate begin [$1], middle [$2] and decimal digits [$4] - parts = new RegExp('^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{'+ nDecimalDigits +'}))?$').exec( fixed ); - - if(parts){ //val >= 1000 || val <= -1000 - return parts[1] + parts[2].replace(/\d{3}/g, thousandsSeparator + '$&') + (parts[4] ? decimalSeparator + parts[4] : ''); - }else{ - return fixed.replace('.', decimalSeparator); - } - } - - return currencyFormat; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/enforcePrecision.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/enforcePrecision.js deleted file mode 100644 index 84554d0e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/enforcePrecision.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function(){ - /** - * Enforce a specific amount of decimal digits and also fix floating - * point rounding issues. - * @example `enforcePrecision(0.615, 2) -> 0.62`, `(0.615).toFixed(2) -> - * 0.61` - */ - function enforcePrecision(val, nDecimalDigits){ - var pow = Math.pow(10, nDecimalDigits); - return +(Math.round(val * pow) / pow).toFixed(nDecimalDigits); - } - return enforcePrecision; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/pad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/pad.js deleted file mode 100644 index 3b2c062a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/pad.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../string/lpad'], function(lpad){ - - /** - * Add padding zeros if n.length < minLength. - */ - function pad(n, minLength, char){ - return lpad(''+ n, minLength, char || '0'); - } - - return pad; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/rol.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/rol.js deleted file mode 100644 index a148f444..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/rol.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Bitwise circular shift left - * http://en.wikipedia.org/wiki/Circular_shift - */ - function rol(val, shift){ - return (val << shift) | (val >> (32 - shift)); - } - return rol; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/ror.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/ror.js deleted file mode 100644 index b5c66f92..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/ror.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Bitwise circular shift right - * http://en.wikipedia.org/wiki/Circular_shift - */ - function ror(val, shift){ - return (val >> shift) | (val << (32 - shift)); - } - return ror; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/sign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/sign.js deleted file mode 100644 index dfc131d5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/sign.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function () { - - /** - * Get sign of the value. - */ - function sign(val) { - var num = Number(val); - if (num === 0) return num; // +0 and +0 === 0 - if (isNaN(num)) return num; // NaN - return num < 0? -1 : 1; - } - - return sign; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toInt.js deleted file mode 100644 index 1e9b4c0b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toInt.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function(){ - - /** - * "Convert" value into an 32-bit integer. - * Works like `Math.floor` if val > 0 and `Math.ceil` if val < 0. - * IMPORTANT: val will wrap at 2^31 and -2^31. - * Perf tests: http://jsperf.com/vs-vs-parseint-bitwise-operators/7 - */ - function toInt(val){ - return ~~val; - } - - return toInt; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt.js deleted file mode 100644 index d5b25b2c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * "Convert" value into a 32-bit unsigned integer. - * IMPORTANT: Value will wrap at 2^32. - */ - function toUInt(val){ - return val >>> 0; - } - - return toUInt; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt31.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt31.js deleted file mode 100644 index 9785a054..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/number/toUInt31.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./MAX_INT'], function(MAX_INT){ - - /** - * "Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - * IMPORTANT: value wil wrap at 2^31, if negative will return 0. - */ - function toUInt31(val){ - return (val <= 0)? 0 : (val > MAX_INT? ~~(val % (MAX_INT + 1)) : ~~val); - } - - return toUInt31; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object.js deleted file mode 100644 index 343e7826..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object.js +++ /dev/null @@ -1,42 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'bindAll' : require('./object/bindAll'), - 'contains' : require('./object/contains'), - 'deepEquals' : require('./object/deepEquals'), - 'deepFillIn' : require('./object/deepFillIn'), - 'deepMatches' : require('./object/deepMatches'), - 'deepMixIn' : require('./object/deepMixIn'), - 'equals' : require('./object/equals'), - 'every' : require('./object/every'), - 'fillIn' : require('./object/fillIn'), - 'filter' : require('./object/filter'), - 'find' : require('./object/find'), - 'forIn' : require('./object/forIn'), - 'forOwn' : require('./object/forOwn'), - 'functions' : require('./object/functions'), - 'get' : require('./object/get'), - 'has' : require('./object/has'), - 'hasOwn' : require('./object/hasOwn'), - 'keys' : require('./object/keys'), - 'map' : require('./object/map'), - 'matches' : require('./object/matches'), - 'max' : require('./object/max'), - 'merge' : require('./object/merge'), - 'min' : require('./object/min'), - 'mixIn' : require('./object/mixIn'), - 'namespace' : require('./object/namespace'), - 'pick' : require('./object/pick'), - 'pluck' : require('./object/pluck'), - 'reduce' : require('./object/reduce'), - 'reject' : require('./object/reject'), - 'set' : require('./object/set'), - 'size' : require('./object/size'), - 'some' : require('./object/some'), - 'unset' : require('./object/unset'), - 'values' : require('./object/values') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/bindAll.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/bindAll.js deleted file mode 100644 index b131ed15..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/bindAll.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./functions', '../function/bind', '../array/forEach'], function (functions, bind, forEach) { - - /** - * Binds methods of the object to be run in it's own context. - */ - function bindAll(obj, rest_methodNames){ - var keys = arguments.length > 1? - Array.prototype.slice.call(arguments, 1) : functions(obj); - forEach(keys, function(key){ - obj[key] = bind(obj[key], obj); - }); - } - - return bindAll; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/contains.js deleted file mode 100644 index 297e8986..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/contains.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./some'], function (some) { - - /** - * Check if object contains value - */ - function contains(obj, needle) { - return some(obj, function(val) { - return (val === needle); - }); - } - return contains; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepEquals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepEquals.js deleted file mode 100644 index 8b7d5d15..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepEquals.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['../lang/isObject', './equals'], function (isObject, equals) { - - function defaultCompare(a, b) { - return a === b; - } - - /** - * Recursively checks for same properties and values. - */ - function deepEquals(a, b, callback){ - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - function compare(a, b){ - return deepEquals(a, b, callback); - } - - return equals(a, b, compare); - } - - return deepEquals; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepFillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepFillIn.js deleted file mode 100644 index 84ba154a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepFillIn.js +++ /dev/null @@ -1,31 +0,0 @@ -define(['./forOwn', '../lang/isPlainObject'], function (forOwn, isPlainObject) { - - /** - * Deeply copy missing properties in the target from the defaults. - */ - function deepFillIn(target, defaults){ - var i = 0, - n = arguments.length, - obj; - - while(++i < n) { - obj = arguments[i]; - if (obj) { - forOwn(obj, function(newValue, key) { - var curValue = target[key]; - if (curValue == null) { - target[key] = newValue; - } else if (isPlainObject(curValue) - && isPlainObject(newValue)) { - deepFillIn(curValue, newValue); - } - }); - } - } - - return target; - } - - return deepFillIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMatches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMatches.js deleted file mode 100644 index 2eae6297..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMatches.js +++ /dev/null @@ -1,54 +0,0 @@ -define(['./forOwn', '../lang/isArray'], function(forOwn, isArray) { - - function containsMatch(array, pattern) { - var i = -1, length = array.length; - while (++i < length) { - if (deepMatches(array[i], pattern)) { - return true; - } - } - - return false; - } - - function matchArray(target, pattern) { - var i = -1, patternLength = pattern.length; - while (++i < patternLength) { - if (!containsMatch(target, pattern[i])) { - return false; - } - } - - return true; - } - - function matchObject(target, pattern) { - var result = true; - forOwn(pattern, function(val, key) { - if (!deepMatches(target[key], val)) { - // Return false to break out of forOwn early - return (result = false); - } - }); - - return result; - } - - /** - * Recursively check if the objects match. - */ - function deepMatches(target, pattern){ - if (target && typeof target === 'object') { - if (isArray(target) && isArray(pattern)) { - return matchArray(target, pattern); - } else { - return matchObject(target, pattern); - } - } else { - return target === pattern; - } - } - - return deepMatches; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMixIn.js deleted file mode 100644 index 1b4178ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/deepMixIn.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['./forOwn', '../lang/isPlainObject'], function (forOwn, isPlainObject) { - - /** - * Mixes objects into the target object, recursively mixing existing child - * objects. - */ - function deepMixIn(target, objects) { - var i = 0, - n = arguments.length, - obj; - - while(++i < n){ - obj = arguments[i]; - if (obj) { - forOwn(obj, copyProp, target); - } - } - - return target; - } - - function copyProp(val, key) { - var existing = this[key]; - if (isPlainObject(val) && isPlainObject(existing)) { - deepMixIn(existing, val); - } else { - this[key] = val; - } - } - - return deepMixIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/equals.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/equals.js deleted file mode 100644 index 596cb952..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/equals.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['./hasOwn', './every', '../lang/isObject'], function(hasOwn, every, isObject) { - - function defaultCompare(a, b) { - return a === b; - } - - // Makes a function to compare the object values from the specified compare - // operation callback. - function makeCompare(callback) { - return function(value, key) { - return hasOwn(this, key) && callback(value, this[key]); - }; - } - - function checkProperties(value, key) { - return hasOwn(this, key); - } - - /** - * Checks if two objects have the same keys and values. - */ - function equals(a, b, callback) { - callback = callback || defaultCompare; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - return (every(a, makeCompare(callback), b) && - every(b, checkProperties, a)); - } - - return equals; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/every.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/every.js deleted file mode 100644 index 52983a5e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/every.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Object every - */ - function every(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - forOwn(obj, function(val, key) { - // we consider any falsy values as "false" on purpose so shorthand - // syntax can be used to check property existence - if (!callback(val, key, obj)) { - result = false; - return false; // break - } - }); - return result; - } - - return every; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/fillIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/fillIn.js deleted file mode 100644 index 0845d3c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/fillIn.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['../array/forEach', './forOwn'], function (forEach, forOwn) { - - /** - * Copy missing properties in the obj from the defaults. - */ - function fillIn(obj, var_defaults){ - forEach(Array.prototype.slice.call(arguments, 1), function(base){ - forOwn(base, function(val, key){ - if (obj[key] == null) { - obj[key] = val; - } - }); - }); - return obj; - } - - return fillIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/filter.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/filter.js deleted file mode 100644 index f213b915..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/filter.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Creates a new object with all the properties where the callback returns - * true. - */ - function filterValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - output[key] = value; - } - }); - - return output; - } - return filterValues; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/find.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/find.js deleted file mode 100644 index 47e6b09d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/find.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./some', '../function/makeIterator_'], function(some, makeIterator) { - - /** - * Returns first item that matches criteria - */ - function find(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result; - some(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - result = value; - return true; //break - } - }); - return result; - } - - return find; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forIn.js deleted file mode 100644 index 2058e9cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forIn.js +++ /dev/null @@ -1,62 +0,0 @@ -define(function () { - - var _hasDontEnumBug, - _dontEnums; - - function checkDontEnum(){ - _dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - - _hasDontEnumBug = true; - - for (var key in {'toString': null}) { - _hasDontEnumBug = false; - } - } - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forIn(obj, fn, thisObj){ - var key, i = 0; - // no need to check if argument is a real object that way we can use - // it for arrays, functions, date, etc. - - //post-pone check till needed - if (_hasDontEnumBug == null) checkDontEnum(); - - for (key in obj) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - - if (_hasDontEnumBug) { - while (key = _dontEnums[i++]) { - // since we aren't using hasOwn check we need to make sure the - // property was overwritten - if (obj[key] !== Object.prototype[key]) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - } - } - } - - function exec(fn, obj, key, thisObj){ - return fn.call(thisObj, obj[key], key, obj); - } - - return forIn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forOwn.js deleted file mode 100644 index b40cbaf1..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/forOwn.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./hasOwn', './forIn'], function (hasOwn, forIn) { - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forOwn(obj, fn, thisObj){ - forIn(obj, function(val, key){ - if (hasOwn(obj, key)) { - return fn.call(thisObj, obj[key], key, obj); - } - }); - } - - return forOwn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/functions.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/functions.js deleted file mode 100644 index 60fee3dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/functions.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./forIn'], function (forIn) { - - /** - * return a list of all enumerable properties that have function values - */ - function functions(obj){ - var keys = []; - forIn(obj, function(val, key){ - if (typeof val === 'function'){ - keys.push(key); - } - }); - return keys.sort(); - } - - return functions; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/get.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/get.js deleted file mode 100644 index ca80b059..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/get.js +++ /dev/null @@ -1,20 +0,0 @@ -define(function () { - - /** - * get "nested" object property - */ - function get(obj, prop){ - var parts = prop.split('.'), - last = parts.pop(); - - while (prop = parts.shift()) { - obj = obj[prop]; - if (typeof obj !== 'object') return; - } - - return obj[last]; - } - - return get; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/has.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/has.js deleted file mode 100644 index cc29817f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/has.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./get'], function (get) { - - var UNDEF; - - /** - * Check if object has nested property. - */ - function has(obj, prop){ - return get(obj, prop) !== UNDEF; - } - - return has; - -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/hasOwn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/hasOwn.js deleted file mode 100644 index 5c53bcf2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/hasOwn.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - - /** - * Safer Object.hasOwnProperty - */ - function hasOwn(obj, prop){ - return Object.prototype.hasOwnProperty.call(obj, prop); - } - - return hasOwn; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/keys.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/keys.js deleted file mode 100644 index ed7c4f91..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/keys.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object keys - */ - var keys = Object.keys || function (obj) { - var keys = []; - forOwn(obj, function(val, key){ - keys.push(key); - }); - return keys; - }; - - return keys; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/map.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/map.js deleted file mode 100644 index 2958f6b0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/map.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Creates a new object where all the values are the result of calling - * `callback`. - */ - function mapValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(val, key, obj) { - output[key] = callback(val, key, obj); - }); - - return output; - } - return mapValues; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/matches.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/matches.js deleted file mode 100644 index 73ff427c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/matches.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * checks if a object contains all given properties/values - */ - function matches(target, props){ - // can't use "object/every" because of circular dependency - var result = true; - forOwn(props, function(val, key){ - if (target[key] !== val) { - // break loop at first difference - return (result = false); - } - }); - return result; - } - - return matches; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/max.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/max.js deleted file mode 100644 index ef311dcb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/max.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../array/max', './values'], function(arrMax, values) { - - /** - * Returns maximum value inside object. - */ - function max(obj, compareFn) { - return arrMax(values(obj), compareFn); - } - - return max; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/merge.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/merge.js deleted file mode 100644 index d7cfedec..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/merge.js +++ /dev/null @@ -1,38 +0,0 @@ -define(['./hasOwn', '../lang/deepClone', '../lang/isObject'], function (hasOwn, deepClone, isObject) { - - /** - * Deep merge objects. - */ - function merge() { - var i = 1, - key, val, obj, target; - - // make sure we don't modify source element and it's properties - // objects are passed by reference - target = deepClone( arguments[0] ); - - while (obj = arguments[i++]) { - for (key in obj) { - if ( ! hasOwn(obj, key) ) { - continue; - } - - val = obj[key]; - - if ( isObject(val) && isObject(target[key]) ){ - // inception, deep merge objects - target[key] = merge(target[key], val); - } else { - // make sure arrays, regexp, date, objects are cloned - target[key] = deepClone(val); - } - - } - } - - return target; - } - - return merge; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/min.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/min.js deleted file mode 100644 index 9fb4c1a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/min.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../array/min', './values'], function(arrMin, values) { - - /** - * Returns minimum value inside object. - */ - function min(obj, iterator) { - return arrMin(values(obj), iterator); - } - - return min; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/mixIn.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/mixIn.js deleted file mode 100644 index 6210b7e7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/mixIn.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['./forOwn'], function(forOwn){ - - /** - * Combine properties from all the objects into first one. - * - This method affects target object in place, if you want to create a new Object pass an empty object as first param. - * @param {object} target Target Object - * @param {...object} objects Objects to be combined (0...n objects). - * @return {object} Target Object. - */ - function mixIn(target, objects){ - var i = 0, - n = arguments.length, - obj; - while(++i < n){ - obj = arguments[i]; - if (obj != null) { - forOwn(obj, copyProp, target); - } - } - return target; - } - - function copyProp(val, key){ - this[key] = val; - } - - return mixIn; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/namespace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/namespace.js deleted file mode 100644 index 7ed65db8..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/namespace.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['../array/forEach'], function (forEach) { - - /** - * Create nested object if non-existent - */ - function namespace(obj, path){ - if (!path) return obj; - forEach(path.split('.'), function(key){ - if (!obj[key]) { - obj[key] = {}; - } - obj = obj[key]; - }); - return obj; - } - - return namespace; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pick.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pick.js deleted file mode 100644 index 76e22bfc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pick.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function(){ - - /** - * Return a copy of the object, filtered to only have values for the whitelisted keys. - */ - function pick(obj, var_keys){ - var keys = typeof arguments[1] !== 'string'? arguments[1] : Array.prototype.slice.call(arguments, 1), - out = {}, - i = 0, key; - while (key = keys[i++]) { - out[key] = obj[key]; - } - return out; - } - - return pick; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pluck.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pluck.js deleted file mode 100644 index d47744bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./map', '../function/prop'], function (map, prop) { - - /** - * Extract a list of property values. - */ - function pluck(obj, propName){ - return map(obj, prop(propName)); - } - - return pluck; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reduce.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reduce.js deleted file mode 100644 index d3a57788..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reduce.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['./forOwn', './size'], function(forOwn, size) { - - /** - * Object reduce - */ - function reduce(obj, callback, memo, thisObj) { - var initial = arguments.length > 2; - - if (!size(obj) && !initial) { - throw new Error('reduce of empty object with no initial value'); - } - - forOwn(obj, function(value, key, list) { - if (!initial) { - memo = value; - initial = true; - } - else { - memo = callback.call(thisObj, memo, value, key, list); - } - }); - - return memo; - } - - return reduce; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reject.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reject.js deleted file mode 100644 index 84296428..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/reject.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./filter', '../function/makeIterator_'], function (filter, makeIterator) { - - /** - * Object reject - */ - function reject(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - return filter(obj, function(value, index, obj) { - return !callback(value, index, obj); - }, thisObj); - } - - return reject; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/set.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/set.js deleted file mode 100644 index b8fa25a3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/set.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./namespace'], function (namespace) { - - /** - * set "nested" object property - */ - function set(obj, prop, val){ - var parts = (/^(.+)\.(.+)$/).exec(prop); - if (parts){ - namespace(obj, parts[1])[parts[2]] = val; - } else { - obj[prop] = val; - } - } - - return set; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/size.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/size.js deleted file mode 100644 index c6e377cf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/size.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object size - */ - function size(obj) { - var count = 0; - forOwn(obj, function(){ - count++; - }); - return count; - } - - return size; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/some.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/some.js deleted file mode 100644 index 1bd6fdae..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/some.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Object some - */ - function some(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - forOwn(obj, function(val, key) { - if (callback(val, key, obj)) { - result = true; - return false; // break - } - }); - return result; - } - - return some; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/unset.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/unset.js deleted file mode 100644 index 787fc19a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/unset.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./has'], function (has) { - - /** - * Unset object property. - */ - function unset(obj, prop){ - if (has(obj, prop)) { - var parts = prop.split('.'), - last = parts.pop(); - while (prop = parts.shift()) { - obj = obj[prop]; - } - return (delete obj[last]); - - } else { - // if property doesn't exist treat as deleted - return true; - } - } - - return unset; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/values.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/values.js deleted file mode 100644 index b311fd09..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/object/values.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object values - */ - function values(obj) { - var vals = []; - forOwn(obj, function(val, key){ - vals.push(val); - }); - return vals; - } - - return values; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString.js deleted file mode 100644 index 44346127..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'contains' : require('./queryString/contains'), - 'decode' : require('./queryString/decode'), - 'encode' : require('./queryString/encode'), - 'getParam' : require('./queryString/getParam'), - 'getQuery' : require('./queryString/getQuery'), - 'parse' : require('./queryString/parse'), - 'setParam' : require('./queryString/setParam') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/contains.js deleted file mode 100644 index a6d11cce..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/contains.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./getQuery'], function (getQuery) { - - /** - * Checks if query string contains parameter. - */ - function contains(url, paramName) { - var regex = new RegExp('(\\?|&)'+ paramName +'=', 'g'); //matches `?param=` or `¶m=` - return regex.test(getQuery(url)); - } - - return contains; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/decode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/decode.js deleted file mode 100644 index 02bc1609..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/decode.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../string/typecast', '../lang/isString'], function (typecast, isString) { - - /** - * Decode query string into an object of keys => vals. - */ - function decode(queryStr, shouldTypecast) { - var queryArr = (queryStr || '').replace('?', '').split('&'), - n = queryArr.length, - obj = {}, - item, val; - while (n--) { - item = queryArr[n].split('='); - val = shouldTypecast === false? item[1] : typecast(item[1]); - obj[item[0]] = isString(val)? decodeURIComponent(val) : val; - } - return obj; - } - - return decode; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/encode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/encode.js deleted file mode 100644 index bd72a5b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/encode.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../object/forOwn'], function (forOwn) { - - /** - * Encode object into a query string. - */ - function encode(obj){ - var query = []; - forOwn(obj, function(val, key){ - query.push( key +'='+ encodeURIComponent(val) ); - }); - return (query.length)? '?'+ query.join('&') : ''; - } - - return encode; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getParam.js deleted file mode 100644 index d9813724..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getParam.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../string/typecast', './getQuery'], function (typecast, getQuery) { - - /** - * Get query parameter value. - */ - function getParam(url, param, shouldTypecast){ - var regexp = new RegExp('(\\?|&)'+ param + '=([^&]*)'), //matches `?param=value` or `¶m=value`, value = $2 - result = regexp.exec( getQuery(url) ), - val = (result && result[2])? result[2] : null; - return shouldTypecast === false? val : typecast(val); - } - - return getParam; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getQuery.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getQuery.js deleted file mode 100644 index aa3d99f3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/getQuery.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * Gets full query as string with all special chars decoded. - */ - function getQuery(url) { - url = url.replace(/#.*/, ''); //removes hash (to avoid getting hash query) - var queryString = /\?[a-zA-Z0-9\=\&\%\$\-\_\.\+\!\*\'\(\)\,]+/.exec(url); //valid chars according to: http://www.ietf.org/rfc/rfc1738.txt - return (queryString)? decodeURIComponent(queryString[0]) : ''; - } - - return getQuery; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/parse.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/parse.js deleted file mode 100644 index ac153e3f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/parse.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./decode', './getQuery'], function (decode, getQuery) { - - /** - * Get query string, parses and decodes it. - */ - function parse(url, shouldTypecast) { - return decode(getQuery(url), shouldTypecast); - } - - return parse; -}); - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/setParam.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/setParam.js deleted file mode 100644 index 97081aa7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/queryString/setParam.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Set query string parameter value - */ - function setParam(url, paramName, value){ - url = url || ''; - - var re = new RegExp('(\\?|&)'+ paramName +'=[^&]*' ); - var param = paramName +'='+ encodeURIComponent( value ); - - if ( re.test(url) ) { - return url.replace(re, '$1'+ param); - } else { - if (url.indexOf('?') === -1) { - url += '?'; - } - if (url.indexOf('=') !== -1) { - url += '&'; - } - return url + param; - } - - } - - return setParam; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random.js deleted file mode 100644 index b2641ee3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random.js +++ /dev/null @@ -1,16 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'choice' : require('./random/choice'), - 'guid' : require('./random/guid'), - 'rand' : require('./random/rand'), - 'randBit' : require('./random/randBit'), - 'randHex' : require('./random/randHex'), - 'randInt' : require('./random/randInt'), - 'randSign' : require('./random/randSign'), - 'random' : require('./random/random') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/choice.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/choice.js deleted file mode 100644 index 0d0c38df..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/choice.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./randInt', '../lang/isArray'], function (randInt, isArray) { - - /** - * Returns a random element from the supplied arguments - * or from the array (if single argument is an array). - */ - function choice(items) { - var target = (arguments.length === 1 && isArray(items))? items : arguments; - return target[ randInt(0, target.length - 1) ]; - } - - return choice; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/guid.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/guid.js deleted file mode 100644 index 82f3a2db..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/guid.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./randHex', './choice'], function (randHex, choice) { - - /** - * Returns pseudo-random guid (UUID v4) - * IMPORTANT: it's not totally "safe" since randHex/choice uses Math.random - * by default and sequences can be predicted in some cases. See the - * "random/random" documentation for more info about it and how to replace - * the default PRNG. - */ - function guid() { - return ( - randHex(8)+'-'+ - randHex(4)+'-'+ - // v4 UUID always contain "4" at this position to specify it was - // randomly generated - '4' + randHex(3) +'-'+ - // v4 UUID always contain chars [a,b,8,9] at this position - choice(8, 9, 'a', 'b') + randHex(3)+'-'+ - randHex(12) - ); - } - return guid; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/rand.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/rand.js deleted file mode 100644 index b8c231dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/rand.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./random', '../number/MIN_INT', '../number/MAX_INT'], function(random, MIN_INT, MAX_INT){ - - /** - * Returns random number inside range - */ - function rand(min, max){ - min = min == null? MIN_INT : min; - max = max == null? MAX_INT : max; - return min + (max - min) * random(); - } - - return rand; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randBit.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randBit.js deleted file mode 100644 index b3422d2d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randBit.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['./random'], function (random) { - - /** - * Returns random bit (0 or 1) - */ - function randomBit() { - return random() > 0.5? 1 : 0; - } - - return randomBit; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randHex.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randHex.js deleted file mode 100644 index 6e9bf1c5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randHex.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./choice'], function (choice) { - - var _chars = '0123456789abcdef'.split(''); - - /** - * Returns a random hexadecimal string - */ - function randHex(size){ - size = size && size > 0? size : 6; - var str = ''; - while (size--) { - str += choice(_chars); - } - return str; - } - - return randHex; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randInt.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randInt.js deleted file mode 100644 index 1750e9de..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randInt.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../number/MIN_INT', '../number/MAX_INT', './rand'], function(MIN_INT, MAX_INT, rand){ - - /** - * Gets random integer inside range or snap to min/max values. - */ - function randInt(min, max){ - min = min == null? MIN_INT : ~~min; - max = max == null? MAX_INT : ~~max; - // can't be max + 0.5 otherwise it will round up if `rand` - // returns `max` causing it to overflow range. - // -0.5 and + 0.49 are required to avoid bias caused by rounding - return Math.round( rand(min - 0.5, max + 0.499999999999) ); - } - - return randInt; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randSign.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randSign.js deleted file mode 100644 index 4141cdf6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/randSign.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['./random'], function (random) { - - /** - * Returns random sign (-1 or 1) - */ - function randomSign() { - return random() > 0.5? 1 : -1; - } - - return randomSign; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/random.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/random.js deleted file mode 100644 index 4270822e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/random/random.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function () { - - /** - * Just a wrapper to Math.random. No methods inside mout/random should call - * Math.random() directly so we can inject the pseudo-random number - * generator if needed (ie. in case we need a seeded random or a better - * algorithm than the native one) - */ - function random(){ - return random.get(); - } - - // we expose the method so it can be swapped if needed - random.get = Math.random; - - return random; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string.js deleted file mode 100644 index 3f5fd804..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string.js +++ /dev/null @@ -1,45 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'WHITE_SPACES' : require('./string/WHITE_SPACES'), - 'camelCase' : require('./string/camelCase'), - 'contains' : require('./string/contains'), - 'crop' : require('./string/crop'), - 'endsWith' : require('./string/endsWith'), - 'escapeHtml' : require('./string/escapeHtml'), - 'escapeRegExp' : require('./string/escapeRegExp'), - 'escapeUnicode' : require('./string/escapeUnicode'), - 'hyphenate' : require('./string/hyphenate'), - 'interpolate' : require('./string/interpolate'), - 'lowerCase' : require('./string/lowerCase'), - 'lpad' : require('./string/lpad'), - 'ltrim' : require('./string/ltrim'), - 'makePath' : require('./string/makePath'), - 'normalizeLineBreaks' : require('./string/normalizeLineBreaks'), - 'pascalCase' : require('./string/pascalCase'), - 'properCase' : require('./string/properCase'), - 'removeNonASCII' : require('./string/removeNonASCII'), - 'removeNonWord' : require('./string/removeNonWord'), - 'repeat' : require('./string/repeat'), - 'replace' : require('./string/replace'), - 'replaceAccents' : require('./string/replaceAccents'), - 'rpad' : require('./string/rpad'), - 'rtrim' : require('./string/rtrim'), - 'sentenceCase' : require('./string/sentenceCase'), - 'slugify' : require('./string/slugify'), - 'startsWith' : require('./string/startsWith'), - 'stripHtmlTags' : require('./string/stripHtmlTags'), - 'trim' : require('./string/trim'), - 'truncate' : require('./string/truncate'), - 'typecast' : require('./string/typecast'), - 'unCamelCase' : require('./string/unCamelCase'), - 'underscore' : require('./string/underscore'), - 'unescapeHtml' : require('./string/unescapeHtml'), - 'unescapeUnicode' : require('./string/unescapeUnicode'), - 'unhyphenate' : require('./string/unhyphenate'), - 'upperCase' : require('./string/upperCase') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/WHITE_SPACES.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/WHITE_SPACES.js deleted file mode 100644 index e830d86d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/WHITE_SPACES.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function() { - /** - * Contains all Unicode white-spaces. Taken from - * http://en.wikipedia.org/wiki/Whitespace_character. - */ - return [ - ' ', '\n', '\r', '\t', '\f', '\v', '\u00A0', '\u1680', '\u180E', - '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', - '\u2007', '\u2008', '\u2009', '\u200A', '\u2028', '\u2029', '\u202F', - '\u205F', '\u3000' - ]; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/camelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/camelCase.js deleted file mode 100644 index 02e6c04d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/camelCase.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString', './replaceAccents', './removeNonWord', './upperCase', './lowerCase'], function(toString, replaceAccents, removeNonWord, upperCase, lowerCase){ - /** - * Convert string to camelCase text. - */ - function camelCase(str){ - str = toString(str); - str = replaceAccents(str); - str = removeNonWord(str) - .replace(/[\-_]/g, ' ') //convert all hyphens and underscores to spaces - .replace(/\s[a-z]/g, upperCase) //convert first char of each word to UPPERCASE - .replace(/\s+/g, '') //remove spaces - .replace(/^[A-Z]/g, lowerCase); //convert first char to lowercase - return str; - } - return camelCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/contains.js deleted file mode 100644 index 825b5a5f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/contains.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Searches for a given substring - */ - function contains(str, substring, fromIndex){ - str = toString(str); - substring = toString(substring); - return str.indexOf(substring, fromIndex) !== -1; - } - - return contains; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/crop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/crop.js deleted file mode 100644 index 3c073f05..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/crop.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './truncate'], function (toString, truncate) { - /** - * Truncate string at full words. - */ - function crop(str, maxChars, append) { - str = toString(str); - return truncate(str, maxChars, append, true); - } - - return crop; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/endsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/endsWith.js deleted file mode 100644 index 31a73f20..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/endsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function(toString) { - /** - * Checks if string ends with specified suffix. - */ - function endsWith(str, suffix) { - str = toString(str); - suffix = toString(suffix); - - return str.indexOf(suffix, str.length - suffix.length) !== -1; - } - - return endsWith; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeHtml.js deleted file mode 100644 index de34b61b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Escapes a string for insertion into HTML. - */ - function escapeHtml(str){ - str = toString(str) - .replace(/&/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/'/g, ''') - .replace(/"/g, '"'); - return str; - } - - return escapeHtml; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeRegExp.js deleted file mode 100644 index 32facac0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeRegExp.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../lang/toString'], function(toString) { - - var ESCAPE_CHARS = /[\\.+*?\^$\[\](){}\/'#]/g; - - /** - * Escape RegExp string chars. - */ - function escapeRegExp(str) { - str = toString(str); - return str.replace(ESCAPE_CHARS,'\\$&'); - } - - return escapeRegExp; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeUnicode.js deleted file mode 100644 index bd5e8c4c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/escapeUnicode.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Escape string into unicode sequences - */ - function escapeUnicode(str, shouldEscapePrintable){ - str = toString(str); - return str.replace(/[\s\S]/g, function(ch){ - // skip printable ASCII chars if we should not escape them - if (!shouldEscapePrintable && (/[\x20-\x7E]/).test(ch)) { - return ch; - } - // we use "000" and slice(-4) for brevity, need to pad zeros, - // unicode escape always have 4 chars after "\u" - return '\\u'+ ('000'+ ch.charCodeAt(0).toString(16)).slice(-4); - }); - } - - return escapeUnicode; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/hyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/hyphenate.js deleted file mode 100644 index 679c405c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/hyphenate.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toString', './slugify', './unCamelCase'], function(toString, slugify, unCamelCase){ - /** - * Replaces spaces with hyphens, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function hyphenate(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "-"); - } - - return hyphenate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/interpolate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/interpolate.js deleted file mode 100644 index ecb8ba80..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/interpolate.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function(toString) { - - var stache = /\{\{(\w+)\}\}/g; //mustache-like - - /** - * String interpolation - */ - function interpolate(template, replacements, syntax){ - template = toString(template); - var replaceFn = function(match, prop){ - return (prop in replacements)? toString(replacements[prop]) : ''; - }; - return template.replace(syntax || stache, replaceFn); - } - - return interpolate; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lowerCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lowerCase.js deleted file mode 100644 index b045d69c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lowerCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * "Safer" String.toLowerCase() - */ - function lowerCase(str){ - str = toString(str); - return str.toLowerCase(); - } - - return lowerCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lpad.js deleted file mode 100644 index ea4f5fbf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/lpad.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString', './repeat'], function(toString, repeat) { - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function lpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - - return ((str.length < minLen) - ? repeat(ch, minLen - str.length) + str : str); - } - - return lpad; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/ltrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/ltrim.js deleted file mode 100644 index 477df953..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/ltrim.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES'], function(toString, WHITE_SPACES){ - /** - * Remove chars from beginning of string. - */ - function ltrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var start = 0, - len = str.length, - charLen = chars.length, - found = true, - i, c; - - while (found && start < len) { - found = false; - i = -1; - c = str.charAt(start); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - start++; - break; - } - } - } - - return (start >= len) ? '' : str.substr(start, len); - } - - return ltrim; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/makePath.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/makePath.js deleted file mode 100644 index 7aa7baba..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/makePath.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../array/join'], function(join){ - - /** - * Group arguments as path segments, if any of the args is `null` or an - * empty string it will be ignored from resulting path. - */ - function makePath(var_args){ - var result = join(Array.prototype.slice.call(arguments), '/'); - return result.replace(/\/{2,}/g, '/'); - } - - return makePath; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/normalizeLineBreaks.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/normalizeLineBreaks.js deleted file mode 100644 index 44e4194f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/normalizeLineBreaks.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function (toString) { - - /** - * Convert line-breaks from DOS/MAC to a single standard (UNIX by default) - */ - function normalizeLineBreaks(str, lineEnd) { - str = toString(str); - lineEnd = lineEnd || '\n'; - - return str - .replace(/\r\n/g, lineEnd) // DOS - .replace(/\r/g, lineEnd) // Mac - .replace(/\n/g, lineEnd); // Unix - } - - return normalizeLineBreaks; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/pascalCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/pascalCase.js deleted file mode 100644 index ead9ead4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/pascalCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './camelCase', './upperCase'], function(toString, camelCase, upperCase){ - /** - * camelCase + UPPERCASE first char - */ - function pascalCase(str){ - str = toString(str); - return camelCase(str).replace(/^[a-z]/, upperCase); - } - - return pascalCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/properCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/properCase.js deleted file mode 100644 index 2987b507..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/properCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './lowerCase', './upperCase'], function(toString, lowerCase, upperCase){ - /** - * UPPERCASE first char of each word. - */ - function properCase(str){ - str = toString(str); - return lowerCase(str).replace(/^\w|\s\w/g, upperCase); - } - - return properCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonASCII.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonASCII.js deleted file mode 100644 index 4905869d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonASCII.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove non-printable ASCII chars - */ - function removeNonASCII(str){ - str = toString(str); - - // Matches non-printable ASCII chars - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters - return str.replace(/[^\x20-\x7E]/g, ''); - } - - return removeNonASCII; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonWord.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonWord.js deleted file mode 100644 index 2b1a2040..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/removeNonWord.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove non-word chars. - */ - function removeNonWord(str){ - str = toString(str); - return str.replace(/[^0-9a-zA-Z\xC0-\xFF \-_]/g, ''); - } - - return removeNonWord; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/repeat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/repeat.js deleted file mode 100644 index 02f5659f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/repeat.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function(toString){ - - /** - * Repeat string n times - */ - function repeat(str, n){ - str = toString(str); - return (new Array(n + 1)).join(str); - } - - return repeat; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replace.js deleted file mode 100644 index 8b762fdc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replace.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../lang/toString', '../lang/toArray'], function (toString, toArray) { - - /** - * Replace string(s) with the replacement(s) in the source. - */ - function replace(str, search, replacements) { - str = toString(str); - search = toArray(search); - replacements = toArray(replacements); - - var searchLength = search.length, - replacementsLength = replacements.length; - - if (replacementsLength !== 1 && searchLength !== replacementsLength) { - throw new Error('Unequal number of searches and replacements'); - } - - var i = -1; - while (++i < searchLength) { - // Use the first replacement for all searches if only one - // replacement is provided - str = str.replace( - search[i], - replacements[(replacementsLength === 1) ? 0 : i]); - } - - return str; - } - - return replace; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replaceAccents.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replaceAccents.js deleted file mode 100644 index 3a63f55a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/replaceAccents.js +++ /dev/null @@ -1,36 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Replaces all accented chars with regular ones - */ - function replaceAccents(str){ - str = toString(str); - - // verifies if the String has accents and replace them - if (str.search(/[\xC0-\xFF]/g) > -1) { - str = str - .replace(/[\xC0-\xC5]/g, "A") - .replace(/[\xC6]/g, "AE") - .replace(/[\xC7]/g, "C") - .replace(/[\xC8-\xCB]/g, "E") - .replace(/[\xCC-\xCF]/g, "I") - .replace(/[\xD0]/g, "D") - .replace(/[\xD1]/g, "N") - .replace(/[\xD2-\xD6\xD8]/g, "O") - .replace(/[\xD9-\xDC]/g, "U") - .replace(/[\xDD]/g, "Y") - .replace(/[\xDE]/g, "P") - .replace(/[\xE0-\xE5]/g, "a") - .replace(/[\xE6]/g, "ae") - .replace(/[\xE7]/g, "c") - .replace(/[\xE8-\xEB]/g, "e") - .replace(/[\xEC-\xEF]/g, "i") - .replace(/[\xF1]/g, "n") - .replace(/[\xF2-\xF6\xF8]/g, "o") - .replace(/[\xF9-\xFC]/g, "u") - .replace(/[\xFE]/g, "p") - .replace(/[\xFD\xFF]/g, "y"); - } - return str; - } - return replaceAccents; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rpad.js deleted file mode 100644 index 2efd9c88..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rpad.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString', './repeat'], function (toString, repeat) { - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function rpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - return (str.length < minLen)? str + repeat(ch, minLen - str.length) : str; - } - - return rpad; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rtrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rtrim.js deleted file mode 100644 index a4cc282d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/rtrim.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES'], function(toString, WHITE_SPACES){ - /** - * Remove chars from end of string. - */ - function rtrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var end = str.length - 1, - charLen = chars.length, - found = true, - i, c; - - while (found && end >= 0) { - found = false; - i = -1; - c = str.charAt(end); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - end--; - break; - } - } - } - - return (end >= 0) ? str.substring(0, end + 1) : ''; - } - - return rtrim; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/sentenceCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/sentenceCase.js deleted file mode 100644 index cfe45af5..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/sentenceCase.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString', './lowerCase', './upperCase'], function(toString, lowerCase, upperCase){ - /** - * UPPERCASE first char of each sentence and lowercase other chars. - */ - function sentenceCase(str){ - str = toString(str); - - // Replace first char of each sentence (new line or after '.\s+') to - // UPPERCASE - return lowerCase(str).replace(/(^\w)|\.\s+(\w)/gm, upperCase); - } - return sentenceCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/slugify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/slugify.js deleted file mode 100644 index c6d68c7e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/slugify.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['../lang/toString', './replaceAccents', './removeNonWord', './trim'], function(toString, replaceAccents, removeNonWord, trim){ - /** - * Convert to lower case, remove accents, remove non-word chars and - * replace spaces with the specified delimeter. - * Does not split camelCase text. - */ - function slugify(str, delimeter){ - str = toString(str); - - if (delimeter == null) { - delimeter = "-"; - } - str = replaceAccents(str); - str = removeNonWord(str); - str = trim(str) //should come after removeNonWord - .replace(/ +/g, delimeter) //replace spaces with delimeter - .toLowerCase(); - return str; - } - return slugify; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/startsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/startsWith.js deleted file mode 100644 index 88ae5453..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/startsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function (toString) { - /** - * Checks if string starts with specified prefix. - */ - function startsWith(str, prefix) { - str = toString(str); - prefix = toString(prefix); - - return str.indexOf(prefix) === 0; - } - - return startsWith; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/stripHtmlTags.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/stripHtmlTags.js deleted file mode 100644 index e8da956d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/stripHtmlTags.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove HTML tags from string. - */ - function stripHtmlTags(str){ - str = toString(str); - - return str.replace(/<[^>]*>/g, ''); - } - return stripHtmlTags; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/trim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/trim.js deleted file mode 100644 index 55526041..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/trim.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES', './ltrim', './rtrim'], function(toString, WHITE_SPACES, ltrim, rtrim){ - /** - * Remove white-spaces from beginning and end of string. - */ - function trim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - return ltrim(rtrim(str, chars), chars); - } - - return trim; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/truncate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/truncate.js deleted file mode 100644 index 34000d9f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/truncate.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../lang/toString', './trim'], function(toString, trim){ - /** - * Limit number of chars. - */ - function truncate(str, maxChars, append, onlyFullWords){ - str = toString(str); - append = append || '...'; - maxChars = onlyFullWords? maxChars + 1 : maxChars; - - str = trim(str); - if(str.length <= maxChars){ - return str; - } - str = str.substr(0, maxChars - append.length); - //crop at last space or remove trailing whitespace - str = onlyFullWords? str.substr(0, str.lastIndexOf(' ')) : trim(str); - return str + append; - } - return truncate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/typecast.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/typecast.js deleted file mode 100644 index a7c83153..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/typecast.js +++ /dev/null @@ -1,29 +0,0 @@ -define(function () { - - var UNDEF; - - /** - * Parses string and convert it into a native value. - */ - function typecast(val) { - var r; - if ( val === null || val === 'null' ) { - r = null; - } else if ( val === 'true' ) { - r = true; - } else if ( val === 'false' ) { - r = false; - } else if ( val === UNDEF || val === 'undefined' ) { - r = UNDEF; - } else if ( val === '' || isNaN(val) ) { - //isNaN('') returns false - r = val; - } else { - //parseFloat(null || '') returns NaN - r = parseFloat(val); - } - return r; - } - - return typecast; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unCamelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unCamelCase.js deleted file mode 100644 index eeef39b6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unCamelCase.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../lang/toString'], function(toString){ - - var CAMEL_CASE_BORDER = /([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g; - - /** - * Add space between camelCase text. - */ - function unCamelCase(str, delimiter){ - if (delimiter == null) { - delimiter = ' '; - } - - function join(str, c1, c2) { - return c1 + delimiter + c2; - } - - str = toString(str); - str = str.replace(CAMEL_CASE_BORDER, join); - str = str.toLowerCase(); //add space between camelCase text - return str; - } - return unCamelCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/underscore.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/underscore.js deleted file mode 100644 index 75dd4649..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/underscore.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './slugify', './unCamelCase'], function(toString, slugify, unCamelCase){ - /** - * Replaces spaces with underscores, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function underscore(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "_"); - } - return underscore; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeHtml.js deleted file mode 100644 index 173c69c2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function (toString) { - - /** - * Unescapes HTML special chars - */ - function unescapeHtml(str){ - str = toString(str) - .replace(/&/g , '&') - .replace(/</g , '<') - .replace(/>/g , '>') - .replace(/'/g , "'") - .replace(/"/g, '"'); - return str; - } - - return unescapeHtml; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeUnicode.js deleted file mode 100644 index d4a7ba1d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unescapeUnicode.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Unescape unicode char sequences - */ - function unescapeUnicode(str){ - str = toString(str); - return str.replace(/\\u[0-9a-f]{4}/g, function(ch){ - var code = parseInt(ch.slice(2), 16); - return String.fromCharCode(code); - }); - } - - return unescapeUnicode; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unhyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unhyphenate.js deleted file mode 100644 index 6ac2fa4c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/unhyphenate.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Replaces hyphens with spaces. (only hyphens between word chars) - */ - function unhyphenate(str){ - str = toString(str); - return str.replace(/(\w)(-)(\w)/g, '$1 $3'); - } - return unhyphenate; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/upperCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/upperCase.js deleted file mode 100644 index 8b2073e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/string/upperCase.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * "Safer" String.toUpperCase() - */ - function upperCase(str){ - str = toString(str); - return str.toUpperCase(); - } - return upperCase; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time.js deleted file mode 100644 index 67c90685..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'convert' : require('./time/convert'), - 'now' : require('./time/now'), - 'parseMs' : require('./time/parseMs'), - 'toTimeString' : require('./time/toTimeString') -}; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/convert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/convert.js deleted file mode 100644 index 2de0cf2e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/convert.js +++ /dev/null @@ -1,41 +0,0 @@ -define(function () { - - /** - * convert time into another unit - */ - function convert(val, sourceUnitName, destinationUnitName){ - destinationUnitName = destinationUnitName || 'ms'; - return (val * getUnit(sourceUnitName)) / getUnit(destinationUnitName); - } - - - //TODO: maybe extract to a separate module - function getUnit(unitName){ - switch(unitName){ - case 'ms': - case 'millisecond': - return 1; - case 's': - case 'second': - return 1000; - case 'm': - case 'minute': - return 60000; - case 'h': - case 'hour': - return 3600000; - case 'd': - case 'day': - return 86400000; - case 'w': - case 'week': - return 604800000; - default: - throw new Error('"'+ unitName + '" is not a valid unit'); - } - } - - - return convert; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/now.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/now.js deleted file mode 100644 index a3a38bcb..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/now.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - - /** - * Get current time in miliseconds - */ - var now = (typeof Date.now === 'function')? Date.now : function(){ - return +(new Date()); - }; - - return now; - -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/parseMs.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/parseMs.js deleted file mode 100644 index 964929ae..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/parseMs.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['../math/countSteps'], function(countSteps){ - - /** - * Parse timestamp into an object. - */ - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - return parseMs; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/toTimeString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/toTimeString.js deleted file mode 100644 index edf18218..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/src/time/toTimeString.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../math/countSteps', '../number/pad'], function(countSteps, pad){ - - var HOUR = 3600000, - MINUTE = 60000, - SECOND = 1000; - - /** - * Format timestamp into a time string. - */ - function toTimeString(ms){ - var h = ms < HOUR ? 0 : countSteps(ms, HOUR), - m = ms < MINUTE ? 0 : countSteps(ms, MINUTE, 60), - s = ms < SECOND ? 0 : countSteps(ms, SECOND, 60), - str = ''; - - str += h? h + ':' : ''; - str += pad(m, 2) + ':'; - str += pad(s, 2); - - return str; - } - return toTimeString; -}); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string.js deleted file mode 100644 index 7f0ca3bd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string.js +++ /dev/null @@ -1,45 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'WHITE_SPACES' : require('./string/WHITE_SPACES'), - 'camelCase' : require('./string/camelCase'), - 'contains' : require('./string/contains'), - 'crop' : require('./string/crop'), - 'endsWith' : require('./string/endsWith'), - 'escapeHtml' : require('./string/escapeHtml'), - 'escapeRegExp' : require('./string/escapeRegExp'), - 'escapeUnicode' : require('./string/escapeUnicode'), - 'hyphenate' : require('./string/hyphenate'), - 'interpolate' : require('./string/interpolate'), - 'lowerCase' : require('./string/lowerCase'), - 'lpad' : require('./string/lpad'), - 'ltrim' : require('./string/ltrim'), - 'makePath' : require('./string/makePath'), - 'normalizeLineBreaks' : require('./string/normalizeLineBreaks'), - 'pascalCase' : require('./string/pascalCase'), - 'properCase' : require('./string/properCase'), - 'removeNonASCII' : require('./string/removeNonASCII'), - 'removeNonWord' : require('./string/removeNonWord'), - 'repeat' : require('./string/repeat'), - 'replace' : require('./string/replace'), - 'replaceAccents' : require('./string/replaceAccents'), - 'rpad' : require('./string/rpad'), - 'rtrim' : require('./string/rtrim'), - 'sentenceCase' : require('./string/sentenceCase'), - 'slugify' : require('./string/slugify'), - 'startsWith' : require('./string/startsWith'), - 'stripHtmlTags' : require('./string/stripHtmlTags'), - 'trim' : require('./string/trim'), - 'truncate' : require('./string/truncate'), - 'typecast' : require('./string/typecast'), - 'unCamelCase' : require('./string/unCamelCase'), - 'underscore' : require('./string/underscore'), - 'unescapeHtml' : require('./string/unescapeHtml'), - 'unescapeUnicode' : require('./string/unescapeUnicode'), - 'unhyphenate' : require('./string/unhyphenate'), - 'upperCase' : require('./string/upperCase') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/WHITE_SPACES.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/WHITE_SPACES.js deleted file mode 100644 index 03e01254..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/WHITE_SPACES.js +++ /dev/null @@ -1,12 +0,0 @@ - - /** - * Contains all Unicode white-spaces. Taken from - * http://en.wikipedia.org/wiki/Whitespace_character. - */ - module.exports = [ - ' ', '\n', '\r', '\t', '\f', '\v', '\u00A0', '\u1680', '\u180E', - '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', - '\u2007', '\u2008', '\u2009', '\u200A', '\u2028', '\u2029', '\u202F', - '\u205F', '\u3000' - ]; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/camelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/camelCase.js deleted file mode 100644 index aadb69a2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/camelCase.js +++ /dev/null @@ -1,20 +0,0 @@ -var toString = require('../lang/toString'); -var replaceAccents = require('./replaceAccents'); -var removeNonWord = require('./removeNonWord'); -var upperCase = require('./upperCase'); -var lowerCase = require('./lowerCase'); - /** - * Convert string to camelCase text. - */ - function camelCase(str){ - str = toString(str); - str = replaceAccents(str); - str = removeNonWord(str) - .replace(/[\-_]/g, ' ') //convert all hyphens and underscores to spaces - .replace(/\s[a-z]/g, upperCase) //convert first char of each word to UPPERCASE - .replace(/\s+/g, '') //remove spaces - .replace(/^[A-Z]/g, lowerCase); //convert first char to lowercase - return str; - } - module.exports = camelCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/contains.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/contains.js deleted file mode 100644 index cb22cae4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/contains.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Searches for a given substring - */ - function contains(str, substring, fromIndex){ - str = toString(str); - substring = toString(substring); - return str.indexOf(substring, fromIndex) !== -1; - } - - module.exports = contains; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/crop.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/crop.js deleted file mode 100644 index 53b93b49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/crop.js +++ /dev/null @@ -1,12 +0,0 @@ -var toString = require('../lang/toString'); -var truncate = require('./truncate'); - /** - * Truncate string at full words. - */ - function crop(str, maxChars, append) { - str = toString(str); - return truncate(str, maxChars, append, true); - } - - module.exports = crop; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/endsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/endsWith.js deleted file mode 100644 index d504e9dd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/endsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Checks if string ends with specified suffix. - */ - function endsWith(str, suffix) { - str = toString(str); - suffix = toString(suffix); - - return str.indexOf(suffix, str.length - suffix.length) !== -1; - } - - module.exports = endsWith; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeHtml.js deleted file mode 100644 index e67c4b21..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Escapes a string for insertion into HTML. - */ - function escapeHtml(str){ - str = toString(str) - .replace(/&/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/'/g, ''') - .replace(/"/g, '"'); - return str; - } - - module.exports = escapeHtml; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeRegExp.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeRegExp.js deleted file mode 100644 index 70cb84ff..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeRegExp.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); - - var ESCAPE_CHARS = /[\\.+*?\^$\[\](){}\/'#]/g; - - /** - * Escape RegExp string chars. - */ - function escapeRegExp(str) { - str = toString(str); - return str.replace(ESCAPE_CHARS,'\\$&'); - } - - module.exports = escapeRegExp; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeUnicode.js deleted file mode 100644 index ec649adf..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/escapeUnicode.js +++ /dev/null @@ -1,21 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Escape string into unicode sequences - */ - function escapeUnicode(str, shouldEscapePrintable){ - str = toString(str); - return str.replace(/[\s\S]/g, function(ch){ - // skip printable ASCII chars if we should not escape them - if (!shouldEscapePrintable && (/[\x20-\x7E]/).test(ch)) { - return ch; - } - // we use "000" and slice(-4) for brevity, need to pad zeros, - // unicode escape always have 4 chars after "\u" - return '\\u'+ ('000'+ ch.charCodeAt(0).toString(16)).slice(-4); - }); - } - - module.exports = escapeUnicode; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/hyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/hyphenate.js deleted file mode 100644 index 95e32436..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/hyphenate.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); -var slugify = require('./slugify'); -var unCamelCase = require('./unCamelCase'); - /** - * Replaces spaces with hyphens, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function hyphenate(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "-"); - } - - module.exports = hyphenate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/interpolate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/interpolate.js deleted file mode 100644 index ac88fac2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/interpolate.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - var stache = /\{\{(\w+)\}\}/g; //mustache-like - - /** - * String interpolation - */ - function interpolate(template, replacements, syntax){ - template = toString(template); - var replaceFn = function(match, prop){ - return (prop in replacements)? toString(replacements[prop]) : ''; - }; - return template.replace(syntax || stache, replaceFn); - } - - module.exports = interpolate; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/lowerCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/lowerCase.js deleted file mode 100644 index 30bb7ad9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/lowerCase.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * "Safer" String.toLowerCase() - */ - function lowerCase(str){ - str = toString(str); - return str.toLowerCase(); - } - - module.exports = lowerCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/lpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/lpad.js deleted file mode 100644 index 694d711e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/lpad.js +++ /dev/null @@ -1,17 +0,0 @@ -var toString = require('../lang/toString'); -var repeat = require('./repeat'); - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function lpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - - return ((str.length < minLen) - ? repeat(ch, minLen - str.length) + str : str); - } - - module.exports = lpad; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/ltrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/ltrim.js deleted file mode 100644 index 23d7b33f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/ltrim.js +++ /dev/null @@ -1,34 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); - /** - * Remove chars from beginning of string. - */ - function ltrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var start = 0, - len = str.length, - charLen = chars.length, - found = true, - i, c; - - while (found && start < len) { - found = false; - i = -1; - c = str.charAt(start); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - start++; - break; - } - } - } - - return (start >= len) ? '' : str.substr(start, len); - } - - module.exports = ltrim; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/makePath.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/makePath.js deleted file mode 100644 index 69aef310..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/makePath.js +++ /dev/null @@ -1,13 +0,0 @@ -var join = require('../array/join'); - - /** - * Group arguments as path segments, if any of the args is `null` or an - * empty string it will be ignored from resulting path. - */ - function makePath(var_args){ - var result = join(Array.prototype.slice.call(arguments), '/'); - return result.replace(/\/{2,}/g, '/'); - } - - module.exports = makePath; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/normalizeLineBreaks.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/normalizeLineBreaks.js deleted file mode 100644 index 8a8dccfd..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/normalizeLineBreaks.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Convert line-breaks from DOS/MAC to a single standard (UNIX by default) - */ - function normalizeLineBreaks(str, lineEnd) { - str = toString(str); - lineEnd = lineEnd || '\n'; - - return str - .replace(/\r\n/g, lineEnd) // DOS - .replace(/\r/g, lineEnd) // Mac - .replace(/\n/g, lineEnd); // Unix - } - - module.exports = normalizeLineBreaks; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/pascalCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/pascalCase.js deleted file mode 100644 index fd190353..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/pascalCase.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var camelCase = require('./camelCase'); -var upperCase = require('./upperCase'); - /** - * camelCase + UPPERCASE first char - */ - function pascalCase(str){ - str = toString(str); - return camelCase(str).replace(/^[a-z]/, upperCase); - } - - module.exports = pascalCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/properCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/properCase.js deleted file mode 100644 index 61636be4..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/properCase.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var lowerCase = require('./lowerCase'); -var upperCase = require('./upperCase'); - /** - * UPPERCASE first char of each word. - */ - function properCase(str){ - str = toString(str); - return lowerCase(str).replace(/^\w|\s\w/g, upperCase); - } - - module.exports = properCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonASCII.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonASCII.js deleted file mode 100644 index fb463816..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonASCII.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove non-printable ASCII chars - */ - function removeNonASCII(str){ - str = toString(str); - - // Matches non-printable ASCII chars - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters - return str.replace(/[^\x20-\x7E]/g, ''); - } - - module.exports = removeNonASCII; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonWord.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonWord.js deleted file mode 100644 index bdd153b9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/removeNonWord.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove non-word chars. - */ - function removeNonWord(str){ - str = toString(str); - return str.replace(/[^0-9a-zA-Z\xC0-\xFF \-_]/g, ''); - } - - module.exports = removeNonWord; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/repeat.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/repeat.js deleted file mode 100644 index 0f9b4754..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/repeat.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Repeat string n times - */ - function repeat(str, n){ - str = toString(str); - return (new Array(n + 1)).join(str); - } - - module.exports = repeat; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/replace.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/replace.js deleted file mode 100644 index 14433fc7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/replace.js +++ /dev/null @@ -1,33 +0,0 @@ -var toString = require('../lang/toString'); -var toArray = require('../lang/toArray'); - - /** - * Replace string(s) with the replacement(s) in the source. - */ - function replace(str, search, replacements) { - str = toString(str); - search = toArray(search); - replacements = toArray(replacements); - - var searchLength = search.length, - replacementsLength = replacements.length; - - if (replacementsLength !== 1 && searchLength !== replacementsLength) { - throw new Error('Unequal number of searches and replacements'); - } - - var i = -1; - while (++i < searchLength) { - // Use the first replacement for all searches if only one - // replacement is provided - str = str.replace( - search[i], - replacements[(replacementsLength === 1) ? 0 : i]); - } - - return str; - } - - module.exports = replace; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/replaceAccents.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/replaceAccents.js deleted file mode 100644 index bb221265..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/replaceAccents.js +++ /dev/null @@ -1,36 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Replaces all accented chars with regular ones - */ - function replaceAccents(str){ - str = toString(str); - - // verifies if the String has accents and replace them - if (str.search(/[\xC0-\xFF]/g) > -1) { - str = str - .replace(/[\xC0-\xC5]/g, "A") - .replace(/[\xC6]/g, "AE") - .replace(/[\xC7]/g, "C") - .replace(/[\xC8-\xCB]/g, "E") - .replace(/[\xCC-\xCF]/g, "I") - .replace(/[\xD0]/g, "D") - .replace(/[\xD1]/g, "N") - .replace(/[\xD2-\xD6\xD8]/g, "O") - .replace(/[\xD9-\xDC]/g, "U") - .replace(/[\xDD]/g, "Y") - .replace(/[\xDE]/g, "P") - .replace(/[\xE0-\xE5]/g, "a") - .replace(/[\xE6]/g, "ae") - .replace(/[\xE7]/g, "c") - .replace(/[\xE8-\xEB]/g, "e") - .replace(/[\xEC-\xEF]/g, "i") - .replace(/[\xF1]/g, "n") - .replace(/[\xF2-\xF6\xF8]/g, "o") - .replace(/[\xF9-\xFC]/g, "u") - .replace(/[\xFE]/g, "p") - .replace(/[\xFD\xFF]/g, "y"); - } - return str; - } - module.exports = replaceAccents; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/rpad.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/rpad.js deleted file mode 100644 index 99f6378d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/rpad.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var repeat = require('./repeat'); - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function rpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - return (str.length < minLen)? str + repeat(ch, minLen - str.length) : str; - } - - module.exports = rpad; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/rtrim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/rtrim.js deleted file mode 100644 index 66ba80e9..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/rtrim.js +++ /dev/null @@ -1,33 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); - /** - * Remove chars from end of string. - */ - function rtrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var end = str.length - 1, - charLen = chars.length, - found = true, - i, c; - - while (found && end >= 0) { - found = false; - i = -1; - c = str.charAt(end); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - end--; - break; - } - } - } - - return (end >= 0) ? str.substring(0, end + 1) : ''; - } - - module.exports = rtrim; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/sentenceCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/sentenceCase.js deleted file mode 100644 index 354104c6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/sentenceCase.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var lowerCase = require('./lowerCase'); -var upperCase = require('./upperCase'); - /** - * UPPERCASE first char of each sentence and lowercase other chars. - */ - function sentenceCase(str){ - str = toString(str); - - // Replace first char of each sentence (new line or after '.\s+') to - // UPPERCASE - return lowerCase(str).replace(/(^\w)|\.\s+(\w)/gm, upperCase); - } - module.exports = sentenceCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/slugify.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/slugify.js deleted file mode 100644 index 142f0d9b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/slugify.js +++ /dev/null @@ -1,24 +0,0 @@ -var toString = require('../lang/toString'); -var replaceAccents = require('./replaceAccents'); -var removeNonWord = require('./removeNonWord'); -var trim = require('./trim'); - /** - * Convert to lower case, remove accents, remove non-word chars and - * replace spaces with the specified delimeter. - * Does not split camelCase text. - */ - function slugify(str, delimeter){ - str = toString(str); - - if (delimeter == null) { - delimeter = "-"; - } - str = replaceAccents(str); - str = removeNonWord(str); - str = trim(str) //should come after removeNonWord - .replace(/ +/g, delimeter) //replace spaces with delimeter - .toLowerCase(); - return str; - } - module.exports = slugify; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/startsWith.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/startsWith.js deleted file mode 100644 index bce2bd20..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/startsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Checks if string starts with specified prefix. - */ - function startsWith(str, prefix) { - str = toString(str); - prefix = toString(prefix); - - return str.indexOf(prefix) === 0; - } - - module.exports = startsWith; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/stripHtmlTags.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/stripHtmlTags.js deleted file mode 100644 index 01d17b0e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/stripHtmlTags.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove HTML tags from string. - */ - function stripHtmlTags(str){ - str = toString(str); - - return str.replace(/<[^>]*>/g, ''); - } - module.exports = stripHtmlTags; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/trim.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/trim.js deleted file mode 100644 index 9652b0c7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/trim.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); -var ltrim = require('./ltrim'); -var rtrim = require('./rtrim'); - /** - * Remove white-spaces from beginning and end of string. - */ - function trim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - return ltrim(rtrim(str, chars), chars); - } - - module.exports = trim; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/truncate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/truncate.js deleted file mode 100644 index a98d6c7d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/truncate.js +++ /dev/null @@ -1,21 +0,0 @@ -var toString = require('../lang/toString'); -var trim = require('./trim'); - /** - * Limit number of chars. - */ - function truncate(str, maxChars, append, onlyFullWords){ - str = toString(str); - append = append || '...'; - maxChars = onlyFullWords? maxChars + 1 : maxChars; - - str = trim(str); - if(str.length <= maxChars){ - return str; - } - str = str.substr(0, maxChars - append.length); - //crop at last space or remove trailing whitespace - str = onlyFullWords? str.substr(0, str.lastIndexOf(' ')) : trim(str); - return str + append; - } - module.exports = truncate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/typecast.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/typecast.js deleted file mode 100644 index c1386a49..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/typecast.js +++ /dev/null @@ -1,29 +0,0 @@ - - - var UNDEF; - - /** - * Parses string and convert it into a native value. - */ - function typecast(val) { - var r; - if ( val === null || val === 'null' ) { - r = null; - } else if ( val === 'true' ) { - r = true; - } else if ( val === 'false' ) { - r = false; - } else if ( val === UNDEF || val === 'undefined' ) { - r = UNDEF; - } else if ( val === '' || isNaN(val) ) { - //isNaN('') returns false - r = val; - } else { - //parseFloat(null || '') returns NaN - r = parseFloat(val); - } - return r; - } - - module.exports = typecast; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unCamelCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unCamelCase.js deleted file mode 100644 index 4968f378..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unCamelCase.js +++ /dev/null @@ -1,23 +0,0 @@ -var toString = require('../lang/toString'); - - var CAMEL_CASE_BORDER = /([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g; - - /** - * Add space between camelCase text. - */ - function unCamelCase(str, delimiter){ - if (delimiter == null) { - delimiter = ' '; - } - - function join(str, c1, c2) { - return c1 + delimiter + c2; - } - - str = toString(str); - str = str.replace(CAMEL_CASE_BORDER, join); - str = str.toLowerCase(); //add space between camelCase text - return str; - } - module.exports = unCamelCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/underscore.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/underscore.js deleted file mode 100644 index ebd6e2b7..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/underscore.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var slugify = require('./slugify'); -var unCamelCase = require('./unCamelCase'); - /** - * Replaces spaces with underscores, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function underscore(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "_"); - } - module.exports = underscore; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeHtml.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeHtml.js deleted file mode 100644 index 52cf3f45..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Unescapes HTML special chars - */ - function unescapeHtml(str){ - str = toString(str) - .replace(/&/g , '&') - .replace(/</g , '<') - .replace(/>/g , '>') - .replace(/'/g , "'") - .replace(/"/g, '"'); - return str; - } - - module.exports = unescapeHtml; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeUnicode.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeUnicode.js deleted file mode 100644 index 0b7fb73b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unescapeUnicode.js +++ /dev/null @@ -1,16 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Unescape unicode char sequences - */ - function unescapeUnicode(str){ - str = toString(str); - return str.replace(/\\u[0-9a-f]{4}/g, function(ch){ - var code = parseInt(ch.slice(2), 16); - return String.fromCharCode(code); - }); - } - - module.exports = unescapeUnicode; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unhyphenate.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unhyphenate.js deleted file mode 100644 index 311dfa17..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/unhyphenate.js +++ /dev/null @@ -1,10 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Replaces hyphens with spaces. (only hyphens between word chars) - */ - function unhyphenate(str){ - str = toString(str); - return str.replace(/(\w)(-)(\w)/g, '$1 $3'); - } - module.exports = unhyphenate; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/upperCase.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/upperCase.js deleted file mode 100644 index 6c92552c..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/string/upperCase.js +++ /dev/null @@ -1,10 +0,0 @@ -var toString = require('../lang/toString'); - /** - * "Safer" String.toUpperCase() - */ - function upperCase(str){ - str = toString(str); - return str.toUpperCase(); - } - module.exports = upperCase; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time.js deleted file mode 100644 index 9f533296..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time.js +++ /dev/null @@ -1,12 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'convert' : require('./time/convert'), - 'now' : require('./time/now'), - 'parseMs' : require('./time/parseMs'), - 'toTimeString' : require('./time/toTimeString') -}; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/convert.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/convert.js deleted file mode 100644 index 852a0f03..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/convert.js +++ /dev/null @@ -1,41 +0,0 @@ - - - /** - * convert time into another unit - */ - function convert(val, sourceUnitName, destinationUnitName){ - destinationUnitName = destinationUnitName || 'ms'; - return (val * getUnit(sourceUnitName)) / getUnit(destinationUnitName); - } - - - //TODO: maybe extract to a separate module - function getUnit(unitName){ - switch(unitName){ - case 'ms': - case 'millisecond': - return 1; - case 's': - case 'second': - return 1000; - case 'm': - case 'minute': - return 60000; - case 'h': - case 'hour': - return 3600000; - case 'd': - case 'day': - return 86400000; - case 'w': - case 'week': - return 604800000; - default: - throw new Error('"'+ unitName + '" is not a valid unit'); - } - } - - - module.exports = convert; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/now.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/now.js deleted file mode 100644 index effcfbe3..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/now.js +++ /dev/null @@ -1,12 +0,0 @@ - - - /** - * Get current time in miliseconds - */ - var now = (typeof Date.now === 'function')? Date.now : function(){ - return +(new Date()); - }; - - module.exports = now; - - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/parseMs.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/parseMs.js deleted file mode 100644 index 6d997976..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/parseMs.js +++ /dev/null @@ -1,17 +0,0 @@ -var countSteps = require('../math/countSteps'); - - /** - * Parse timestamp into an object. - */ - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - module.exports = parseMs; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/toTimeString.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/toTimeString.js deleted file mode 100644 index 101d69fc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/mout/time/toTimeString.js +++ /dev/null @@ -1,24 +0,0 @@ -var countSteps = require('../math/countSteps'); -var pad = require('../number/pad'); - - var HOUR = 3600000, - MINUTE = 60000, - SECOND = 1000; - - /** - * Format timestamp into a time string. - */ - function toTimeString(ms){ - var h = ms < HOUR ? 0 : countSteps(ms, HOUR), - m = ms < MINUTE ? 0 : countSteps(ms, MINUTE, 60), - s = ms < SECOND ? 0 : countSteps(ms, SECOND, 60), - str = ''; - - str += h? h + ':' : ''; - str += pad(m, 2) + ':'; - str += pad(s, 2); - - return str; - } - module.exports = toTimeString; - diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/.npmignore b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/History.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/History.md deleted file mode 100644 index 88119480..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/History.md +++ /dev/null @@ -1,42 +0,0 @@ - -1.0.0 / 2013-06-18 -================== - - * remove .version - * >=. Closes #19 - * Merge pull request #15 from davglass/readline-osx - * On OSX revert back to terminal hack to avoid a readline bug - -0.1.0 / 2012-09-19 -================== - - * Fixed logic bug that caused bar to jump one extra space at the end [davglass] - * Working with readline impl, even on Windows [davglass] - * Using readline instead of the \r hack [davglass] - -0.0.5 / 2012-08-07 -================== - - * add ability to tick by zero chunks - tick(0) - * fix ETA. Closes #4 [lwille] - -0.0.4 / 2011-11-14 -================== - - * Allow more recent versions of node - -0.0.3 / 2011-04-20 -================== - - * Changed; erase the line when complete - -0.0.2 / 2011-04-20 -================== - - * Added custom tokens support - * Fixed; clear line before writing - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/Makefile b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/Makefile deleted file mode 100644 index 36a3ed7d..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/Makefile +++ /dev/null @@ -1,5 +0,0 @@ - -test: - @echo "populate me" - -.PHONY: test \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/Readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/Readme.md deleted file mode 100644 index 4e08a49b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/Readme.md +++ /dev/null @@ -1,117 +0,0 @@ -# node-progress - - Flexible ascii progress bar - -## Installation - - npm install progress - -## Usage - - First we create a `ProgressBar`, giving it a format string - as well as the `total`, telling the progress bar when it will - be considered complete. After that all we need to do is `tick()` appropriately. - -```javascript -var ProgressBar = require('progress'); - -var bar = new ProgressBar(':bar', { total: 10 }); -var timer = setInterval(function(){ - bar.tick(); - if (bar.complete) { - console.log('\ncomplete\n'); - clearInterval(timer); - } -}, 100); -``` - -## Options: - - - `total` total number of ticks to complete - - `width` the displayed width of the progress bar defaulting to total - - `stream` the output stream defaulting to stdout - - `complete` completion character defaulting to "=" - - `incomplete` incomplete character defaulting to "-" - - `clear` option to clear the bar on completion defaulting to false - - `callback` optional function to call when the progress bar completes - -## Tokens: - - - `:bar` the progress bar itself - - `:current` current tick number - - `:total` total ticks - - `:elapsed` time elapsed in seconds - - `:percent` completion percentage - - `:eta` estimated completion time in seconds - -## Examples - -### Download - - In our download example each tick has a variable influence, so we pass the chunk length which adjusts the progress bar appropriately relative to the total length. - -```javascript -var ProgressBar = require('../') - , https = require('https'); - -var req = https.request({ - host: 'download.github.com' - , port: 443 - , path: '/visionmedia-node-jscoverage-0d4608a.zip' -}); - -req.on('response', function(res){ - var len = parseInt(res.headers['content-length'], 10); - - console.log(); - var bar = new ProgressBar(' downloading [:bar] :percent :etas', { - complete: '=' - , incomplete: ' ' - , width: 20 - , total: len - }); - - res.on('data', function(chunk){ - bar.tick(chunk.length); - }); - - res.on('end', function(){ - console.log('\n'); - }); -}); - -req.end(); -``` - - The code above will generate a progress bar that looks like this: - -``` -downloading [===== ] 29% 3.7s -``` - -You can see more examples in the `examples` folder. - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk `<tj@vision-media.ca>` - -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/index.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/index.js deleted file mode 100644 index 4449dd30..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/node-progress'); diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/lib/node-progress.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/lib/node-progress.js deleted file mode 100644 index ca0ce4f0..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/lib/node-progress.js +++ /dev/null @@ -1,183 +0,0 @@ -/*! - * node-progress - * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca> - * MIT Licensed - */ - -/** - * Expose `ProgressBar`. - */ - -exports = module.exports = ProgressBar; - -/** - * Initialize a `ProgressBar` with the given - * `fmt` string and `options` or `total`. - * - * Options: - * - * - `total` total number of ticks to complete - * - `width` the displayed width of the progress bar defaulting to total - * - `stream` the output stream defaulting to stdout - * - `complete` completion character defaulting to "=" - * - `incomplete` incomplete character defaulting to "-" - * - `callback` optional function to call when the progress bar completes - * - * Tokens: - * - * - `:bar` the progress bar itself - * - `:current` current tick number - * - `:total` total ticks - * - `:elapsed` time elapsed in seconds - * - `:percent` completion percentage - * - `:eta` eta in seconds - * - * @param {String} fmt - * @param {Object|Number} options or total - * @api public - */ - -function ProgressBar(fmt, options) { - this.rl = require('readline').createInterface({ - input: process.stdin, - output: options.stream || process.stdout - }); - this.rl.setPrompt('', 0); - this.rl.clearLine = function() { - this.write(null, {ctrl: true, name: 'u'}); - }; - - if (typeof(options) == 'number') { - var total = options; - options = {}; - options.total = total; - } else { - options = options || {}; - if ('string' != typeof fmt) throw new Error('format required'); - if ('number' != typeof options.total) throw new Error('total required'); - } - - this.fmt = fmt; - this.curr = 0; - this.total = options.total; - this.width = options.width || this.total; - this.clear = options.clear - this.chars = { - complete: options.complete || '=' - , incomplete: options.incomplete || '-' - }; - this.callback = options.callback || function () {}; -} - -/** - * "tick" the progress bar with optional `len` and - * optional `tokens`. - * - * @param {Number|Object} len or tokens - * @param {Object} tokens - * @api public - */ - -ProgressBar.prototype.tick = function(len, tokens){ - if (len !== 0) - len = len || 1; - - // swap tokens - if ('object' == typeof len) tokens = len, len = 1; - - // start time for eta - if (0 == this.curr) this.start = new Date; - - this.curr += len - this.render(tokens); - - // progress complete - if (this.curr >= this.total) { - this.complete = true; - this.terminate(); - this.callback(this); - return; - } -}; - -/** - * Method to render the progress bar with optional `tokens` to - * place in the progress bar's `fmt` field. - * - * @param {Object} tokens - * @api public - */ - -ProgressBar.prototype.render = function(tokens){ - if(!process.stdout.isTTY) { - return; - } - - var ratio = this.curr / this.total; - ratio = Math.min(Math.max(ratio, 0), 1); - - var percent = ratio * 100 - , complete = Math.round(this.width * ratio) - , incomplete - , elapsed = new Date - this.start - , eta = (percent == 100) ? 0 : elapsed * (this.total / this.curr - 1); - - complete = Array(complete).join(this.chars.complete); - incomplete = Array(this.width - complete.length).join(this.chars.incomplete); - - var str = this.fmt - .replace(':bar', complete + incomplete) - .replace(':current', this.curr) - .replace(':total', this.total) - .replace(':elapsed', isNaN(elapsed) ? "0.0" : (elapsed / 1000).toFixed(1)) - .replace(':eta', (isNaN(eta) || !isFinite(eta)) ? "0.0" : (eta / 1000).toFixed(1)) - .replace(':percent', percent.toFixed(0) + '%'); - - if (tokens) { - for (var key in tokens) { - str = str.replace(':' + key, tokens[key]); - } - } - - this.rl.clearLine(); - this.rl.write(str); -}; - -/** - * "update" the progress bar to represent an exact percentage. - * The ratio (between 0 and 1) specified will be multiplied by `total` and - * floored, representing the closest available "tick." For example, if a - * progress bar has a length of 3 and `update(0.5)` is called, the progress - * will be set to 1. - * - * A ratio of 0.5 will attempt to set the progress to halfway. - * - * @param {Number} ratio The ratio (between 0 and 1 inclusive) to set the - * overall completion to. - * @api public - */ - -ProgressBar.prototype.update = function(ratio, tokens) { - var goal = Math.floor(ratio * this.total); - var delta = goal - this.curr; - - this.tick(delta, tokens); -}; - -/** - * Terminates a progress bar. - * - * @api public - */ - -ProgressBar.prototype.terminate = function() { - this.rl.resume(); - - if (this.clear) { - this.rl.clearLine(); - this.rl.close(); - } else { - this.rl.close(); - console.log(); - } -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/package.json deleted file mode 100644 index c4744b51..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/progress/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "progress", - "version": "1.1.3", - "description": "Flexible ascii progress bar", - "keywords": [ - "cli", - "progress" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "dependencies": {}, - "main": "index", - "engines": { - "node": ">=0.4.0" - }, - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/node-progress" - }, - "readme": "# node-progress\n\n Flexible ascii progress bar\n\n## Installation\n\n npm install progress\n\n## Usage\n\n First we create a `ProgressBar`, giving it a format string\n as well as the `total`, telling the progress bar when it will\n be considered complete. After that all we need to do is `tick()` appropriately.\n\n```javascript\nvar ProgressBar = require('progress');\n\nvar bar = new ProgressBar(':bar', { total: 10 });\nvar timer = setInterval(function(){\n bar.tick();\n if (bar.complete) {\n console.log('\\ncomplete\\n');\n clearInterval(timer);\n }\n}, 100);\n```\n\n## Options:\n\n - `total` total number of ticks to complete\n - `width` the displayed width of the progress bar defaulting to total\n - `stream` the output stream defaulting to stdout\n - `complete` completion character defaulting to \"=\"\n - `incomplete` incomplete character defaulting to \"-\"\n - `clear` option to clear the bar on completion defaulting to false\n - `callback` optional function to call when the progress bar completes\n\n## Tokens:\n\n - `:bar` the progress bar itself\n - `:current` current tick number\n - `:total` total ticks\n - `:elapsed` time elapsed in seconds\n - `:percent` completion percentage\n - `:eta` estimated completion time in seconds\n\n## Examples\n\n### Download\n\n In our download example each tick has a variable influence, so we pass the chunk length which adjusts the progress bar appropriately relative to the total length.\n\n```javascript\nvar ProgressBar = require('../')\n , https = require('https');\n\nvar req = https.request({\n host: 'download.github.com'\n , port: 443\n , path: '/visionmedia-node-jscoverage-0d4608a.zip'\n});\n\nreq.on('response', function(res){\n var len = parseInt(res.headers['content-length'], 10);\n\n console.log();\n var bar = new ProgressBar(' downloading [:bar] :percent :etas', {\n complete: '='\n , incomplete: ' '\n , width: 20\n , total: len\n });\n\n res.on('data', function(chunk){\n bar.tick(chunk.length);\n });\n\n res.on('end', function(){\n console.log('\\n');\n });\n});\n\nreq.end();\n```\n\n The code above will generate a progress bar that looks like this:\n\n```\ndownloading [===== ] 29% 3.7s\n```\n\nYou can see more examples in the `examples` folder.\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk `<tj@vision-media.ca>`\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/node-progress/issues" - }, - "homepage": "https://github.com/visionmedia/node-progress", - "_id": "progress@1.1.3", - "dist": { - "shasum": "42f89c5fc3b6f0408a0bdd68993b174f96aababf" - }, - "_from": "progress@~1.1.0", - "_resolved": "https://registry.npmjs.org/progress/-/progress-1.1.3.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/AUTHORS b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/AUTHORS deleted file mode 100644 index 247b7543..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/AUTHORS +++ /dev/null @@ -1,6 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/LICENSE deleted file mode 100644 index 05a40109..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/README.md deleted file mode 100644 index cd123b65..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/README.md +++ /dev/null @@ -1,30 +0,0 @@ -`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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/bin.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/bin.js deleted file mode 100755 index 29bfa8a6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/bin.js +++ /dev/null @@ -1,33 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/package.json deleted file mode 100644 index 211cc9dc..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "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", - "dist": { - "shasum": "7ada6a6d39b2301af3c8fe7b936c2e46e7c4463d" - }, - "_from": "rimraf@~2.2.6", - "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/rimraf.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/rimraf.js deleted file mode 100644 index ce62051f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/rimraf.js +++ /dev/null @@ -1,178 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/run.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/run.sh deleted file mode 100644 index 598f0163..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/setup.sh b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/setup.sh deleted file mode 100644 index 2602e631..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/setup.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-async.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-async.js deleted file mode 100644 index 9c2e0b7b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-async.js +++ /dev/null @@ -1,5 +0,0 @@ -var rimraf = require("../rimraf") - , path = require("path") -rimraf(path.join(__dirname, "target"), function (er) { - if (er) throw er -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-sync.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-sync.js deleted file mode 100644 index eb71f104..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/rimraf/test/test-sync.js +++ /dev/null @@ -1,3 +0,0 @@ -var rimraf = require("../rimraf") - , path = require("path") -rimraf.sync(path.join(__dirname, "target")) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/LICENSE b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/LICENSE deleted file mode 100644 index 05a40109..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/README.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/README.md deleted file mode 100644 index ff1eb531..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The "which" util from npm's guts. - -Finds the first instance of a specified executable in the PATH -environment variable. Does not cache the results, so `hash -r` is not -needed when the PATH changes. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/bin/which b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/bin/which deleted file mode 100755 index 8432ce2f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/bin/which +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env node -var which = require("../") -if (process.argv.length < 3) { - console.error("Usage: which <thing>") - process.exit(1) -} - -which(process.argv[2], function (er, thing) { - if (er) { - console.error(er.message) - process.exit(er.errno || 127) - } - console.log(thing) -}) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/package.json deleted file mode 100644 index f1938b07..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "which", - "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.", - "version": "1.0.5", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-which.git" - }, - "main": "which.js", - "bin": { - "which": "./bin/which" - }, - "engines": { - "node": "*" - }, - "dependencies": {}, - "devDependencies": {}, - "readme": "The \"which\" util from npm's guts.\n\nFinds the first instance of a specified executable in the PATH\nenvironment variable. Does not cache the results, so `hash -r` is not\nneeded when the PATH changes.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-which/issues" - }, - "homepage": "https://github.com/isaacs/node-which", - "_id": "which@1.0.5", - "dist": { - "shasum": "195619a6ad7e8fefd0aa76445a6d4c8d370a322c" - }, - "_from": "which@~1.0.5", - "_resolved": "https://registry.npmjs.org/which/-/which-1.0.5.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/which.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/which.js deleted file mode 100644 index db7e8f74..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/node_modules/which/which.js +++ /dev/null @@ -1,104 +0,0 @@ -module.exports = which -which.sync = whichSync - -var path = require("path") - , fs - , COLON = process.platform === "win32" ? ";" : ":" - , isExe - -try { - fs = require("graceful-fs") -} catch (ex) { - fs = require("fs") -} - -if (process.platform == "win32") { - // On windows, there is no good way to check that a file is executable - isExe = function isExe () { return true } -} else { - isExe = function isExe (mod, uid, gid) { - //console.error(mod, uid, gid); - //console.error("isExe?", (mod & 0111).toString(8)) - var ret = (mod & 0001) - || (mod & 0010) && process.getgid && gid === process.getgid() - || (mod & 0100) && process.getuid && uid === process.getuid() - //console.error("isExe?", ret) - return ret - } -} - - - -function which (cmd, cb) { - if (isAbsolute(cmd)) return cb(null, cmd) - var pathEnv = (process.env.PATH || "").split(COLON) - , pathExt = [""] - if (process.platform === "win32") { - pathEnv.push(process.cwd()) - pathExt = (process.env.PATHEXT || ".EXE").split(COLON) - if (cmd.indexOf(".") !== -1) pathExt.unshift("") - } - //console.error("pathEnv", pathEnv) - ;(function F (i, l) { - if (i === l) return cb(new Error("not found: "+cmd)) - var p = path.resolve(pathEnv[i], cmd) - ;(function E (ii, ll) { - if (ii === ll) return F(i + 1, l) - var ext = pathExt[ii] - //console.error(p + ext) - fs.stat(p + ext, function (er, stat) { - if (!er && - stat && - stat.isFile() && - isExe(stat.mode, stat.uid, stat.gid)) { - //console.error("yes, exe!", p + ext) - return cb(null, p + ext) - } - return E(ii + 1, ll) - }) - })(0, pathExt.length) - })(0, pathEnv.length) -} - -function whichSync (cmd) { - if (isAbsolute(cmd)) return cmd - var pathEnv = (process.env.PATH || "").split(COLON) - , pathExt = [""] - if (process.platform === "win32") { - pathEnv.push(process.cwd()) - pathExt = (process.env.PATHEXT || ".EXE").split(COLON) - if (cmd.indexOf(".") !== -1) pathExt.unshift("") - } - for (var i = 0, l = pathEnv.length; i < l; i ++) { - var p = path.join(pathEnv[i], cmd) - for (var j = 0, ll = pathExt.length; j < ll; j ++) { - var cur = p + pathExt[j] - var stat - try { stat = fs.statSync(cur) } catch (ex) {} - if (stat && - stat.isFile() && - isExe(stat.mode, stat.uid, stat.gid)) return cur - } - } - throw new Error("not found: "+cmd) -} - -var isAbsolute = process.platform === "win32" ? absWin : absUnix - -function absWin (p) { - if (absUnix(p)) return true - // pull off the device/UNC bit from a windows path. - // from node's lib/path.js - var splitDeviceRe = - /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?/ - , result = splitDeviceRe.exec(p) - , device = result[1] || '' - , isUnc = device && device.charAt(1) !== ':' - , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute - - return isAbsolute -} - -function absUnix (p) { - return p.charAt(0) === "/" || p === "" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/package.json deleted file mode 100644 index 66d4488e..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/bin-wrapper/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "bin-wrapper", - "version": "0.1.9", - "description": "Binary wrapper for Node.js that makes your programs seamlessly available as local dependencies", - "keywords": [ - "bin", - "build", - "make", - "wrapper" - ], - "homepage": "https://github.com/kevva/bin-wrapper", - "bugs": { - "url": "https://github.com/kevva/bin-wrapper/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/kevva/bin-wrapper.git" - }, - "scripts": { - "test": "mocha --reporter list --timeout 0" - }, - "main": "bin-wrapper.js", - "files": [ - "bin-wrapper.js" - ], - "dependencies": { - "download": "~0.1.2", - "isbin": "0.0.2", - "mout": "~0.6.0", - "progress": "~1.1.0", - "rimraf": "~2.2.6", - "which": "~1.0.5" - }, - "devDependencies": { - "mocha": "~1.12.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "readme": "# bin-wrapper [![Build Status](https://secure.travis-ci.org/kevva/bin-wrapper.png?branch=master)](http://travis-ci.org/kevva/bin-wrapper)\n\nBinary wrapper for Node.js that makes your programs seamlessly available as local dependencies\n\n## Getting started\n\nInstall with [npm](https://npmjs.org/package/bin-wrapper): `npm install bin-wrapper`\n\n## Examples\n\nAll `platform` and `arch` specific options takes precedence over the base \noptions. See [test.js](test.js) for a full fleshed example.\n\n```js\nvar Bin = require('bin-wrapper');\n\nvar opts = {\n name: 'Gifsicle',\n bin: 'gifsicle',\n path: 'vendor',\n url: 'http://url/to/gifsicle',\n src: 'http://www.lcdf.org/gifsicle/gifsicle-1.71.tar.gz',\n buildScript: './configure --bindir=\"vendor\" && make install',\n platform: {\n win32: {\n bin: 'gifsicle.exe',\n url: [\n 'http://url/to/gifsicle.exe'\n 'http://url/to/gifsicle.dll'\n ]\n }\n }\n}\nvar bin = new Bin(opts);\n\nbin.check('--version', function (works) {\n if (!works) {\n console.log('Pre-build test failed, compiling from source');\n return bin.build();\n }\n\n console.log('Binary passed the test');\n});\n```\n\nGet the path to your binary with `bin.path`.\n\n```js\nconsole.log(bin.path);\n// => path/to/vendor/gifsicle\n```\n\n## API\n\n### .check(cmd, cb)\n\nCheck if a binary is present and working. If it isn't, download and test it by \nrunning the binary with `cmd` and see if it exits correctly.\n\n### .build(cb)\n\nDownload the source archive defined in the `src` property and build it using the \nbuild script defined in the `buildScript` property.\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com)\n", - "readmeFilename": "README.md", - "_id": "bin-wrapper@0.1.9", - "dist": { - "shasum": "237ee496fb6049caedaba51ad9e62fc199a86060" - }, - "_from": "bin-wrapper@~0.1.3", - "_resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-0.1.9.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/chalk.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/chalk.js deleted file mode 100644 index 17c6dbab..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/chalk.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; -var ansi = require('ansi-styles'); -var defineProps = Object.defineProperties; - -ansi.grey = ansi.gray; - -var styles = (function () { - var ret = {}; - - Object.keys(ansi).forEach(function (key) { - ret[key] = { - get: function () { - this._styles.push(key); - return this; - } - }; - }); - - return ret; -})(); - -var chalk = module.exports = defineProps({}, init()); - -function init() { - var ret = {}; - - Object.keys(styles).forEach(function (name) { - ret[name] = { - get: function () { - var obj = defineProps(function self(str) { - if (!chalk.enabled) { - return str; - } - - return self._styles.reduce(function (str, name) { - var code = ansi[name]; - return code[0] + (str || '') + code[1]; - }, str); - }, styles); - - obj._styles = []; - - return obj[name]; - } - } - }); - - return ret; -} - -chalk.styles = ansi; - -chalk.stripColor = function (str) { - return str.replace(/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]/g, ''); -}; - -chalk.supportsColor = require('has-color'); - -// detect mode if not set manually -if (chalk.enabled === undefined) { - chalk.enabled = chalk.supportsColor; -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js deleted file mode 100644 index 56a5d19b..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; -module.exports = { - reset: ['\x1b[0m', '\x1b[0m'], - - bold: ['\x1b[1m', '\x1b[22m'], - italic: ['\x1b[3m', '\x1b[23m'], - underline: ['\x1b[4m', '\x1b[24m'], - inverse: ['\x1b[7m', '\x1b[27m'], - strikethrough: ['\x1b[9m', '\x1b[29m'], - - black: ['\x1b[30m', '\x1b[39m'], - red: ['\x1b[31m', '\x1b[39m'], - green: ['\x1b[32m', '\x1b[39m'], - yellow: ['\x1b[33m', '\x1b[39m'], - blue: ['\x1b[34m', '\x1b[39m'], - magenta: ['\x1b[35m', '\x1b[39m'], - cyan: ['\x1b[36m', '\x1b[39m'], - white: ['\x1b[37m', '\x1b[39m'], - gray: ['\x1B[90m', '\x1b[39m'], - - bgBlack: ['\x1b[40m', '\x1b[49m'], - bgRed: ['\x1b[41m', '\x1b[49m'], - bgGreen: ['\x1b[42m', '\x1b[49m'], - bgYellow: ['\x1b[43m', '\x1b[49m'], - bgBlue: ['\x1b[44m', '\x1b[49m'], - bgMagenta: ['\x1b[45m', '\x1b[49m'], - bgCyan: ['\x1b[46m', '\x1b[49m'], - bgWhite: ['\x1b[47m', '\x1b[49m'] -}; diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/ansi-styles/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/ansi-styles/package.json deleted file mode 100644 index 8acdb5e6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "ansi-styles", - "version": "0.2.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 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[0] + 'Hello world!' + ansi.green[1]);\n```\n\n## API\n\nEach style is an array of a start and end escape code.\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 License • © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "_id": "ansi-styles@0.2.0", - "dist": { - "shasum": "359ab4b15dcd64ba6d74734b72c36360a9af2c19" - }, - "_from": "ansi-styles@~0.2.0", - "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-0.2.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/ansi-styles/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/ansi-styles/readme.md deleted file mode 100644 index 646837c6..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,65 +0,0 @@ -# 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 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[0] + 'Hello world!' + ansi.green[1]); -``` - -## API - -Each style is an array of a start and end escape code. - - -## 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 License • © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/has-color/has-color.js b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/has-color/has-color.js deleted file mode 100644 index 27316b1f..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/has-color/has-color.js +++ /dev/null @@ -1,24 +0,0 @@ -'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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/has-color/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/has-color/package.json deleted file mode 100644 index d60b2d0a..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/has-color/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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", - "dist": { - "shasum": "d1dadeea5b9e8b446bf08603532333710c95a290" - }, - "_from": "has-color@~0.1.0", - "_resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.4.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/has-color/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/has-color/readme.md deleted file mode 100644 index 0918c851..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/node_modules/has-color/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# 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-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/package.json deleted file mode 100644 index 46a63f05..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "chalk", - "version": "0.2.1", - "description": "Terminal string styling done right", - "keywords": [ - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "ansi", - "styles", - "tty", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "homepage": "https://github.com/sindresorhus/chalk", - "bugs": { - "url": "https://github.com/sindresorhus/chalk/issues" - }, - "license": "MIT", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "files": [ - "chalk.js" - ], - "main": "chalk", - "repository": { - "type": "git", - "url": "git://github.com/sindresorhus/chalk.git" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "has-color": "~0.1.0", - "ansi-styles": "~0.2.0" - }, - "devDependencies": { - "mocha": "~1.12.0" - }, - "engines": { - "node": ">=0.8.0" - }, - "readme": "# chalk [![Build Status](https://secure.travis-ci.org/sindresorhus/chalk.png?branch=master)](http://travis-ci.org/sindresorhus/chalk)\n\n> Terminal string styling done right.\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. 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\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 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\nchalk.red('Hello' + chalk.underline.bgBlue('world') + '!');\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)\n\nChain [styles](#styles) and call the last one as a method with a string argument.\n\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\n```js\nvar chalk = require('chalk');\n\nconsole.log(chalk.styles.red);\n//=> ['\\x1b[31m', '\\x1b[39m']\n\nconsole.log(chalk.styles.red[0] + 'Hello' + chalk.styles.red[1]);\n// first item is the style escape code and second is the reset escape code\n```\n\n### chalk.stripColor(string)\n\nStrip color from a string.\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 License • © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "_id": "chalk@0.2.1", - "dist": { - "shasum": "7613e1575145b21386483f7f485aa5ffa8cbd10c" - }, - "_from": "chalk@~0.2.0", - "_resolved": "https://registry.npmjs.org/chalk/-/chalk-0.2.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/readme.md deleted file mode 100644 index d369d2ef..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/node_modules/chalk/readme.md +++ /dev/null @@ -1,130 +0,0 @@ -# chalk [![Build Status](https://secure.travis-ci.org/sindresorhus/chalk.png?branch=master)](http://travis-ci.org/sindresorhus/chalk) - -> Terminal string styling done right. - -[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. 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 - - -## 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 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 -chalk.red('Hello' + chalk.underline.bgBlue('world') + '!'); -``` - -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) - -Chain [styles](#styles) and call the last one as a method with a string argument. - - -### 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). - -```js -var chalk = require('chalk'); - -console.log(chalk.styles.red); -//=> ['\x1b[31m', '\x1b[39m'] - -console.log(chalk.styles.red[0] + 'Hello' + chalk.styles.red[1]); -// first item is the style escape code and second is the reset escape code -``` - -### chalk.stripColor(string) - -Strip color from a string. - - -## 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 License • © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/package.json b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/package.json deleted file mode 100644 index f830eef2..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "name": "optipng-bin", - "version": "0.3.1", - "description": "OptiPNG wrapper that makes it seamlessly available as a local dependency on OS X, Linux, FreeBSD and Windows", - "keywords": [ - "png", - "compress", - "minify", - "optimize", - "img", - "image" - ], - "homepage": "https://github.com/yeoman/node-optipng-bin", - "bugs": { - "url": "https://github.com/yeoman/node-optipng-bin/issues" - }, - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "maintainers": [ - { - "name": "Duncan Wong" - }, - { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - } - ], - "main": "lib/optipng", - "bin": { - "optipng": "bin/optipng.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/yeoman/node-optipng-bin.git" - }, - "scripts": { - "test": "mocha", - "postinstall": "node lib/check.js" - }, - "engines": { - "node": ">=0.8.0" - }, - "licenses": [ - { - "type": "BSD" - } - ], - "dependencies": { - "bin-wrapper": "~0.1.3", - "chalk": "~0.2.0" - }, - "devDependencies": { - "mocha": "~1.13.0" - }, - "files": [ - "bin", - "lib" - ], - "readme": "# node-optipng-bin [![Build Status](https://secure.travis-ci.org/yeoman/node-optipng-bin.png?branch=master)](http://travis-ci.org/yeoman/node-optipng-bin)\n\n[OptiPNG](http://optipng.sourceforge.net) 0.7.4 Node.js wrapper that makes it seamlessly available as a local dependency on OS X, Linux, FreeBSD, Solaris and Windows.\n\n> OptiPNG is a PNG optimizer that recompresses image files to a smaller size, without losing any information.\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/optipng-bin): `npm install --save optipng-bin`\n\n\n## Example usage\n\n```js\nvar execFile = require('child_process').execFile;\nvar optipngPath = require('optipng-bin').path;\n\nexecFile(optipngPath, ['-v'], function(err, stdout, stderr) {\n console.log('OptiPNG version:', stdout.match(/\\d\\.\\d\\.\\d/)[0]);\n});\n```\n\nCan also be run directly from `./node_modules/.bin/optipng`.\n\n\n## License\n\nEverything excluding the binaries licensed under the [BSD license](http://opensource.org/licenses/bsd-license.php) and copyright Google.\n\nOptiPNG licensed under the [zlib license](http://optipng.sourceforge.net/license.txt) and copyright Cosmin Truta and the Contributing Authors.\n", - "readmeFilename": "readme.md", - "_id": "optipng-bin@0.3.1", - "dist": { - "shasum": "d3eee5ee9dfcc8d7ae2086fd8f9dcec084c6e79b" - }, - "_from": "optipng-bin@~0.3.0", - "_resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-0.3.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/readme.md b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/readme.md deleted file mode 100644 index db453221..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/readme.md +++ /dev/null @@ -1,30 +0,0 @@ -# node-optipng-bin [![Build Status](https://secure.travis-ci.org/yeoman/node-optipng-bin.png?branch=master)](http://travis-ci.org/yeoman/node-optipng-bin) - -[OptiPNG](http://optipng.sourceforge.net) 0.7.4 Node.js wrapper that makes it seamlessly available as a local dependency on OS X, Linux, FreeBSD, Solaris and Windows. - -> OptiPNG is a PNG optimizer that recompresses image files to a smaller size, without losing any information. - -## Install - -Install with [npm](https://npmjs.org/package/optipng-bin): `npm install --save optipng-bin` - - -## Example usage - -```js -var execFile = require('child_process').execFile; -var optipngPath = require('optipng-bin').path; - -execFile(optipngPath, ['-v'], function(err, stdout, stderr) { - console.log('OptiPNG version:', stdout.match(/\d\.\d\.\d/)[0]); -}); -``` - -Can also be run directly from `./node_modules/.bin/optipng`. - - -## License - -Everything excluding the binaries licensed under the [BSD license](http://opensource.org/licenses/bsd-license.php) and copyright Google. - -OptiPNG licensed under the [zlib license](http://optipng.sourceforge.net/license.txt) and copyright Cosmin Truta and the Contributing Authors. diff --git a/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/vendor/optipng b/node_modules/gulp-imagemin/node_modules/image-min/node_modules/optipng-bin/vendor/optipng deleted file mode 100755 index 069639b60036058be5e42e672e73bd52fa84c5fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171784 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 Y>w8o21^l5Y=L=IspK~kuG@UX37YHHr=Kufz diff --git a/node_modules/gulp-imagemin/node_modules/image-min/package.json b/node_modules/gulp-imagemin/node_modules/image-min/package.json deleted file mode 100644 index 30188290..00000000 --- a/node_modules/gulp-imagemin/node_modules/image-min/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "image-min", - "version": "0.1.3", - "description": "Minify GIF, JPEG and PNG images", - "keywords": [ - "compress", - "image", - "img", - "jpeg", - "jpg", - "minify", - "png" - ], - "homepage": "https://github.com/kevva/image-min", - "bugs": { - "url": "https://github.com/kevva/image-min/issues" - }, - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "http://kevinmartensson.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/kevva/image-min.git" - }, - "scripts": { - "test": "mocha --reporter list" - }, - "main": "imagemin.js", - "files": [ - "imagemin.js" - ], - "dependencies": { - "cache-file": "~0.1.1", - "filesize": "~2.0.0", - "mkdirp": "~0.3.5", - "mout": "~0.7.1", - "gifsicle": "~0.1.0", - "jpegtran-bin": "~0.2.0", - "optipng-bin": "~0.3.0" - }, - "devDependencies": { - "each-async": "~0.1.1", - "mocha": "~1.12.0", - "rimraf": "~2.2.6" - }, - "optionalDependencies": { - "gifsicle": "~0.1.0", - "jpegtran-bin": "~0.2.0", - "optipng-bin": "~0.3.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "readme": "# image-min [![Build Status](https://secure.travis-ci.org/kevva/image-min.png?branch=master)](http://travis-ci.org/kevva/image-min)\n\nMinify GIF, JPEG and PNG images seamlessly with Node.js.\n\n## Getting started\n\nInstall with [npm](https://npmjs.org/package/image-min): `npm install image-min`\n\n## Examples\n\n`data` returns information about how much optimization was done.\n\n```js\nvar imagemin = require('image-min');\n\nimagemin(img.gif, img-minified.gif, function (err, data) {\n console.log('Saved ' + data.diffSize);\n});\n\nimagemin(img.jpg, img-minified.jpg, { progressive: true }, function (err, data) {\n console.log('Saved ' + data.diffSize);\n});\n\nimagemin(img.png, img-minified.png, { optimizationLevel: 4 }, function (err, data) {\n console.log('Saved ' + data.diffSize);\n});\n```\n\n## API\n\n### imagemin(src, dest, opts, cb)\n\nOptimize a `GIF`, `JPEG`, or `PNG` image by providing a `src` and `dest`. Use the\noptions below (optionally) to configure how your images are optimized.\n\n## Options\n\n### cache\n\nType: `Boolean` \nDefault: `false`\n\nWhether to cache optimized images.\n\n### interlaced (GIF only)\n\nType: `Boolean` \nDefault: `false`\n\nInterlace gif for progressive rendering.\n\n### optimizationLevel (PNG only)\n\nType: `Number` \nDefault: `2`\n\nSelect a optimization level between 0 and 7.\n\n### progressive (JPEG only)\n\nType: `Boolean` \nDefault: `false`\n\nLossless conversion to progressive.\n\n## Used by\n\n* [gulp-imagemin](https://github.com/sindresorhus/gulp-imagemin)\n* [grunt-contrib-imagemin](https://github.com/gruntjs/grunt-contrib-imagemin)\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License) (c) [Kevin Mårtensson](http://kevinmartensson.com)\n", - "readmeFilename": "README.md", - "_id": "image-min@0.1.3", - "dist": { - "shasum": "78f02abbbb4a945f53b4f08ab2ec8107f2aaddb8" - }, - "_from": "image-min@~0.1.0", - "_resolved": "https://registry.npmjs.org/image-min/-/image-min-0.1.3.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/map-stream/.npmignore b/node_modules/gulp-imagemin/node_modules/map-stream/.npmignore deleted file mode 100644 index 13abef4f..00000000 --- a/node_modules/gulp-imagemin/node_modules/map-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/gulp-imagemin/node_modules/map-stream/.travis.yml b/node_modules/gulp-imagemin/node_modules/map-stream/.travis.yml deleted file mode 100644 index 895dbd36..00000000 --- a/node_modules/gulp-imagemin/node_modules/map-stream/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/gulp-imagemin/node_modules/map-stream/LICENCE b/node_modules/gulp-imagemin/node_modules/map-stream/LICENCE deleted file mode 100644 index 171dd970..00000000 --- a/node_modules/gulp-imagemin/node_modules/map-stream/LICENCE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011 Dominic Tarr - -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-imagemin/node_modules/map-stream/examples/pretty.js b/node_modules/gulp-imagemin/node_modules/map-stream/examples/pretty.js deleted file mode 100644 index ab073987..00000000 --- a/node_modules/gulp-imagemin/node_modules/map-stream/examples/pretty.js +++ /dev/null @@ -1,26 +0,0 @@ - -var inspect = require('util').inspect - -if(!module.parent) { - var map = require('..') //load map-stream - var es = require('event-stream') //load event-stream - es.pipe( //pipe joins streams together - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - map(function (data, callback) { //turn this async function into a stream - var j - try { - j = JSON.parse(data) //try to parse input into json - } catch (err) { - return callback(null, data) //if it fails just pass it anyway - } - callback(null, inspect(j)) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) - } - -// run this -// -// curl -sS registry.npmjs.org/event-stream | node pretty.js -// diff --git a/node_modules/gulp-imagemin/node_modules/map-stream/index.js b/node_modules/gulp-imagemin/node_modules/map-stream/index.js deleted file mode 100644 index 09ae829d..00000000 --- a/node_modules/gulp-imagemin/node_modules/map-stream/index.js +++ /dev/null @@ -1,145 +0,0 @@ -//filter will reemit the data if cb(err,pass) pass is truthy - -// reduce is more tricky -// maybe we want to group the reductions or emit progress updates occasionally -// the most basic reduce just emits one 'data' event after it has recieved 'end' - - -var Stream = require('stream').Stream - - -//create an event stream and apply function to each .write -//emitting each response as data -//unless it's an empty callback - -module.exports = function (mapper, opts) { - - var stream = new Stream() - , self = this - , inputs = 0 - , outputs = 0 - , ended = false - , paused = false - , destroyed = false - , lastWritten = 0 - , inNext = false - - this.opts = opts || {}; - var errorEventName = this.opts.failures ? 'failure' : 'error'; - - // Items that are not ready to be written yet (because they would come out of - // order) get stuck in a queue for later. - var writeQueue = {} - - stream.writable = true - stream.readable = true - - function queueData (data, number) { - var nextToWrite = lastWritten + 1 - - if (number === nextToWrite) { - // If it's next, and its not undefined write it - if (data !== undefined) { - stream.emit.apply(stream, ['data', data]) - } - lastWritten ++ - nextToWrite ++ - } else { - // Otherwise queue it for later. - writeQueue[number] = data - } - - // If the next value is in the queue, write it - if (writeQueue.hasOwnProperty(nextToWrite)) { - var dataToWrite = writeQueue[nextToWrite] - delete writeQueue[nextToWrite] - return queueData(dataToWrite, nextToWrite) - } - - outputs ++ - if(inputs === outputs) { - if(paused) paused = false, stream.emit('drain') //written all the incoming events - if(ended) end() - } - } - - function next (err, data, number) { - if(destroyed) return - inNext = true - - if (!err || self.opts.failures) { - queueData(data, number) - } - - if (err) { - stream.emit.apply(stream, [ errorEventName, err ]); - } - - inNext = false; - } - - // Wrap the mapper function by calling its callback with the order number of - // the item in the stream. - function wrappedMapper (input, number, callback) { - return mapper.call(null, input, function(err, data){ - callback(err, data, number) - }) - } - - stream.write = function (data) { - if(ended) throw new Error('map stream is not writable') - inNext = false - inputs ++ - - try { - //catch sync errors and handle them like async errors - var written = wrappedMapper(data, inputs, next) - paused = (written === false) - return !paused - } catch (err) { - //if the callback has been called syncronously, and the error - //has occured in an listener, throw it again. - if(inNext) - throw err - next(err) - return !paused - } - } - - function end (data) { - //if end was called with args, write it, - ended = true //write will emit 'end' if ended is true - stream.writable = false - if(data !== undefined) { - return queueData(data, inputs) - } else if (inputs == outputs) { //wait for processing - stream.readable = false, stream.emit('end'), stream.destroy() - } - } - - stream.end = function (data) { - if(ended) return - end() - } - - stream.destroy = function () { - ended = destroyed = true - stream.writable = stream.readable = paused = false - process.nextTick(function () { - stream.emit('close') - }) - } - stream.pause = function () { - paused = true - } - - stream.resume = function () { - paused = false - } - - return stream -} - - - - diff --git a/node_modules/gulp-imagemin/node_modules/map-stream/package.json b/node_modules/gulp-imagemin/node_modules/map-stream/package.json deleted file mode 100644 index 567053c6..00000000 --- a/node_modules/gulp-imagemin/node_modules/map-stream/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "map-stream", - "version": "0.1.0", - "description": "construct pipes of streams of events", - "homepage": "http://github.com/dominictarr/map-stream", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/map-stream.git" - }, - "dependencies": {}, - "devDependencies": { - "asynct": "*", - "it-is": "1", - "ubelt": "~2.9", - "stream-spec": "~0.2", - "event-stream": "~2.1", - "from": "0.0.2" - }, - "scripts": { - "test": "asynct test/" - }, - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "http://dominictarr.com" - }, - "readme": "# MapStream\n\nRefactored out of [event-stream](https://github.com/dominictarr/event-stream)\n\n##map (asyncFunction[, options])\n\nCreate a through stream from an asyncronous function. \n\n``` js\nvar map = require('map-stream')\n\nmap(function (data, callback) {\n //transform data\n // ...\n callback(null, data)\n})\n\n```\n\nEach map MUST call the callback. It may callback with data, with an error or with no arguments, \n\n * `callback()` drop this data. \n this makes the map work like `filter`, \n note:`callback(null,null)` is not the same, and will emit `null`\n\n * `callback(null, newData)` turn data into newData\n \n * `callback(error)` emit an error for this item.\n\n>Note: if a callback is not called, `map` will think that it is still being processed, \n>every call must be answered or the stream will not know when to end. \n>\n>Also, if the callback is called more than once, every call but the first will be ignored.\n\n##Options \n\n * `failures` - `boolean` continue mapping even if error occured. On error `map-stream` will emit `failure` event. (default: `false`)\n", - "readmeFilename": "readme.markdown", - "bugs": { - "url": "https://github.com/dominictarr/map-stream/issues" - }, - "_id": "map-stream@0.1.0", - "dist": { - "shasum": "ecb1e26682b21961c0e6d024df0da7b6c331d921" - }, - "_from": "map-stream@~0.1.0", - "_resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/map-stream/readme.markdown b/node_modules/gulp-imagemin/node_modules/map-stream/readme.markdown deleted file mode 100644 index 18971588..00000000 --- a/node_modules/gulp-imagemin/node_modules/map-stream/readme.markdown +++ /dev/null @@ -1,37 +0,0 @@ -# MapStream - -Refactored out of [event-stream](https://github.com/dominictarr/event-stream) - -##map (asyncFunction[, options]) - -Create a through stream from an asyncronous function. - -``` js -var map = require('map-stream') - -map(function (data, callback) { - //transform data - // ... - callback(null, data) -}) - -``` - -Each map MUST call the callback. It may callback with data, with an error or with no arguments, - - * `callback()` drop this data. - this makes the map work like `filter`, - note:`callback(null,null)` is not the same, and will emit `null` - - * `callback(null, newData)` turn data into newData - - * `callback(error)` emit an error for this item. - ->Note: if a callback is not called, `map` will think that it is still being processed, ->every call must be answered or the stream will not know when to end. -> ->Also, if the callback is called more than once, every call but the first will be ignored. - -##Options - - * `failures` - `boolean` continue mapping even if error occured. On error `map-stream` will emit `failure` event. (default: `false`) diff --git a/node_modules/gulp-imagemin/node_modules/map-stream/test/simple-map.asynct.js b/node_modules/gulp-imagemin/node_modules/map-stream/test/simple-map.asynct.js deleted file mode 100644 index 2b9a2922..00000000 --- a/node_modules/gulp-imagemin/node_modules/map-stream/test/simple-map.asynct.js +++ /dev/null @@ -1,318 +0,0 @@ -'use strict'; - -var map = require('../') - , it = require('it-is') - , u = require('ubelt') - , spec = require('stream-spec') - , from = require('from') - , Stream = require('stream') - , es = require('event-stream') - -//REFACTOR THIS TEST TO USE es.readArray and es.writeArray - -function writeArray(array, stream) { - - array.forEach( function (j) { - stream.write(j) - }) - stream.end() - -} - -function readStream(stream, done) { - - var array = [] - stream.on('data', function (data) { - array.push(data) - }) - stream.on('error', done) - stream.on('end', function (data) { - done(null, array) - }) - -} - -//call sink on each write, -//and complete when finished. - -function pauseStream (prob, delay) { - var pauseIf = ( - 'number' == typeof prob - ? function () { - return Math.random() < prob - } - : 'function' == typeof prob - ? prob - : 0.1 - ) - var delayer = ( - !delay - ? process.nextTick - : 'number' == typeof delay - ? function (next) { setTimeout(next, delay) } - : delay - ) - - return es.through(function (data) { - if(!this.paused && pauseIf()) { - console.log('PAUSE STREAM PAUSING') - this.pause() - var self = this - delayer(function () { - console.log('PAUSE STREAM RESUMING') - self.resume() - }) - } - console.log("emit ('data', " + data + ')') - this.emit('data', data) - }) -} - -exports ['simple map applied to a stream'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - - var doubler = map(function (data, cb) { - cb(null, data * 2) - }) - - spec(doubler).through().validateOnExit() - - //a map is only a middle man, so it is both readable and writable - - it(doubler).has({ - readable: true, - writable: true, - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 2 - })) -// process.nextTick(x.validate) - test.done() - }) - - writeArray(input, doubler) - -} - -exports ['stream comes back in the correct order'] = function (test) { - var input = [3, 2, 1] - - var delayer = map(function(data, cb){ - setTimeout(function () { - cb(null, data) - }, 100 * data) - }) - - readStream(delayer, function (err, output) { - it(output).deepEqual(input) - test.done() - }) - - writeArray(input, delayer) -} - -exports ['continues on error event with failures `true`'] = function (test) { - var input = [1, 2, 3] - - var delayer = map(function(data, cb){ - cb(new Error('Something gone wrong'), data) - }, { failures: true }) - - readStream(delayer, function (err, output) { - it(output).deepEqual(input) - test.done() - }) - - writeArray(input, delayer) -} - -exports['pipe two maps together'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - function dd (data, cb) { - cb(null, data * 2) - } - var doubler1 = map(dd), doubler2 = map(dd) - - doubler1.pipe(doubler2) - - spec(doubler1).through().validateOnExit() - spec(doubler2).through().validateOnExit() - - readStream(doubler2, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 4 - })) - test.done() - }) - - writeArray(input, doubler1) - -} - -//next: -// -// test pause, resume and drian. -// - -// then make a pipe joiner: -// -// plumber (evStr1, evStr2, evStr3, evStr4, evStr5) -// -// will return a single stream that write goes to the first - -exports ['map will not call end until the callback'] = function (test) { - - var ticker = map(function (data, cb) { - process.nextTick(function () { - cb(null, data * 2) - }) - }) - - spec(ticker).through().validateOnExit() - - ticker.write('x') - ticker.end() - - ticker.on('end', function () { - test.done() - }) -} - -exports ['emit failures with opts.failures === `ture`'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - map(function () { - throw err - }, { failures: true }) - - mapper.on('failure', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['emit error thrown'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - map(function () { - throw err - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['emit error calledback'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - map(function (data, callback) { - callback(err) - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['do not emit drain if not paused'] = function (test) { - - var maps = map(function (data, callback) { - u.delay(callback)(null, 1) - return true - }) - - spec(maps).through().pausable().validateOnExit() - - maps.on('drain', function () { - it(false).ok('should not emit drain unless the stream is paused') - }) - - it(maps.write('hello')).equal(true) - it(maps.write('hello')).equal(true) - it(maps.write('hello')).equal(true) - setTimeout(function () {maps.end()},10) - maps.on('end', test.done) -} - -exports ['emits drain if paused, when all '] = function (test) { - var active = 0 - var drained = false - var maps = map(function (data, callback) { - active ++ - u.delay(function () { - active -- - callback(null, 1) - })() - console.log('WRITE', false) - return false - }) - - spec(maps).through().validateOnExit() - - maps.on('drain', function () { - drained = true - it(active).equal(0, 'should emit drain when all maps are done') - }) - - it(maps.write('hello')).equal(false) - it(maps.write('hello')).equal(false) - it(maps.write('hello')).equal(false) - - process.nextTick(function () {maps.end()},10) - - maps.on('end', function () { - console.log('end') - it(drained).ok('shoud have emitted drain before end') - test.done() - }) - -} - -exports ['map applied to a stream with filtering'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - - var doubler = map(function (data, callback) { - if (data % 2) - callback(null, data * 2) - else - callback() - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.filter(function (j) { - return j % 2 - }).map(function (j) { - return j * 2 - })) - test.done() - }) - - spec(doubler).through().validateOnExit() - - writeArray(input, doubler) - -} - - diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/index.js b/node_modules/gulp-imagemin/node_modules/temp-write/index.js deleted file mode 100644 index ad4625c7..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/index.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; -var path = require('path'); -var tmpdir = require('os').tmpdir(); -var fs = require('graceful-fs'); -var uuid = require('uuid'); - -function tempfile(filename) { - return path.join(tmpdir, uuid.v4(), (filename || '')); -} - -module.exports = function (str, filename, cb) { - if (typeof filename === 'function') { - cb = filename; - filename = null; - } - - - var filepath = tempfile(filename); - - fs.mkdir(path.dirname(filepath), function (err) { - if (err && err.code !== 'EEXIST') { - return cb(err); - } - - fs.writeFile(filepath, str, function (err) { - cb(err, filepath); - }); - }); -}; - -module.exports.sync = function (str, filename) { - var filepath = tempfile(filename); - - try { - fs.mkdirSync(path.dirname(filepath)); - } catch (err) { - if (err.code !== 'EEXIST') { - throw err; - } - } - - fs.writeFileSync(filepath, str); - return filepath; -}; diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/.npmignore b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/.npmignore deleted file mode 100644 index 9303c347..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/.travis.yml b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/.travis.yml deleted file mode 100644 index 84fd7ca2..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.9 diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/LICENSE b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/examples/pow.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e6924212..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/index.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/index.js deleted file mode 100644 index fda6de8a..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/index.js +++ /dev/null @@ -1,82 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/package.json b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/package.json deleted file mode 100644 index 221a22e3..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "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.5" -} diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/readme.markdown b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/readme.markdown deleted file mode 100644 index 83b0216a..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/readme.markdown +++ /dev/null @@ -1,63 +0,0 @@ -# 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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/chmod.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 520dcb8e..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,38 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/clobber.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 0eb70998..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/mkdirp.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index b07cd70c..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/perm.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/perm.js deleted file mode 100644 index 23a7abbd..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/perm_sync.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index f685f609..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,39 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/race.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/race.js deleted file mode 100644 index 96a04476..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,41 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/rel.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 79858243..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/return.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/return.js deleted file mode 100644 index bce68e56..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/return.js +++ /dev/null @@ -1,25 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/return_sync.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/return_sync.js deleted file mode 100644 index 7c222d35..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/return_sync.js +++ /dev/null @@ -1,24 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/root.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/root.js deleted file mode 100644 index 97ad7a2f..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/root.js +++ /dev/null @@ -1,18 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/sync.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/sync.js deleted file mode 100644 index 7530cada..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,32 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/umask.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 64ccafe2..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/mkdirp/test/umask_sync.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index 35bd5cbb..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,32 +0,0 @@ -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-imagemin/node_modules/temp-write/node_modules/uuid/.npmignore b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/.npmignore deleted file mode 100644 index fd4f2b06..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.DS_Store diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/.travis.yml b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/.travis.yml deleted file mode 100644 index b6d42c3e..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.9 diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/LICENSE.md b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/LICENSE.md deleted file mode 100644 index f039427f..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/LICENSE.md +++ /dev/null @@ -1,2 +0,0 @@ -Copyright (c) 2010-2012 Robert Kieffer -MIT License - http://opensource.org/licenses/mit-license.php diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/README.md b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/README.md deleted file mode 100644 index d2adba18..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/README.md +++ /dev/null @@ -1,204 +0,0 @@ -# uuid [![Build Status](https://secure.travis-ci.org/shtylman/node-uuid.png?branch=master)](http://travis-ci.org/shtylman/node-uuid) # - -[![browser support](http://ci.testling.com/shtylman/node-uuid.png)](http://ci.testling.com/shtylman/node-uuid) - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Generate RFC4122 version 1 or version 4 UUIDs -* Runs in node.js and all browsers. -* Cryptographically strong random # generation on supporting platforms -* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! ) -* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html) - -## Getting Started - -Install it in your browser: - -```html -<script src="uuid.js"></script> -``` - -Or in node.js: - -``` -npm install uuid -``` - -```javascript -var uuid = require('uuid'); - -// Generate a v1 (time-based) id -uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - -// Generate a v4 (random) id -uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' -``` - -## API - -### uuid.v1([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Notes: - -1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v1({ - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -var arr = new Array(32); // -> [] -uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] - -// Optionally use uuid.unparse() to get stringify the ids -uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' -uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' -``` - -### uuid.v4([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v4({ - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" -``` - -Example: Generate two IDs in a single buffer - -```javascript -var buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); -``` - -### uuid.parse(id[, buffer[, offset]]) -### uuid.unparse(buffer[, offset]) - -Parse and unparse UUIDs - - * `id` - (String) UUID(-like) string - * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used - * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 - -Example parsing and unparsing a UUID string - -```javascript -var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10> -var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' -``` - -### uuid.noConflict() - -(Browsers only) Set `uuid` property back to it's previous value. - -Returns the uuid object. - -Example: - -```javascript -var myUuid = uuid.noConflict(); -myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' -``` - -## Deprecated APIs - -Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. - -### uuid([format [, buffer [, offset]]]) - -uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). - -### uuid.BufferClass - -The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API. - -## Testing - -In node.js - -``` -> cd test -> node test.js -``` - -In Browser - -``` -open test/test.html -``` - -### Benchmarking - -Requires node.js - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -For a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark) - -For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - -## Release notes - -### 1.4.0 - -* Improved module context detection -* Removed public RNG functions - -### 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - -### 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/README.md b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/README.md deleted file mode 100644 index aaeb2ea0..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# node-uuid Benchmarks - -### Results - -To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark - -### Run them yourself - -node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. - -To prepare and run the benchmark issue; - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -You'll see an output like this one: - -``` -# v4 -nodeuuid.v4(): 854700 uuids/second -nodeuuid.v4('binary'): 788643 uuids/second -nodeuuid.v4('binary', buffer): 1336898 uuids/second -uuid(): 479386 uuids/second -uuid('binary'): 582072 uuids/second -uuidjs.create(4): 312304 uuids/second - -# v1 -nodeuuid.v1(): 938086 uuids/second -nodeuuid.v1('binary'): 683060 uuids/second -nodeuuid.v1('binary', buffer): 1644736 uuids/second -uuidjs.create(1): 190621 uuids/second -``` - -* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. -* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. - -If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: - -``` -for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; -``` - -If you're interested in how performance varies between different node versions, you can issue the above command multiple times. - -You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: - -``` -(cd benchmark/ && ./bench.sh) -``` - -This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/bench.gnu b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/bench.gnu deleted file mode 100644 index a342fbbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/bench.gnu +++ /dev/null @@ -1,174 +0,0 @@ -#!/opt/local/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.4 patchlevel 3 -# last modified March 2011 -# System: Darwin 10.8.0 -# -# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 -# Thomas Williams, Colin Kelley and many others -# -# gnuplot home: http://www.gnuplot.info -# faq, bugs, etc: type "help seeking-assistance" -# immediate help: type "help" -# plot window: hit 'h' -set terminal postscript eps noenhanced defaultplex \ - leveldefault color colortext \ - solid linewidth 1.2 butt noclip \ - palfuncparam 2000,0.003 \ - "Helvetica" 14 -set output 'bench.eps' -unset clip points -set clip one -unset clip two -set bar 1.000000 front -set border 31 front linetype -1 linewidth 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 -set style circle radius graph 0.02, first 0, 0 -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 -set key maxcolumns 2 maxrows 0 -unset label -unset arrow -set style increment default -unset style line -set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 -unset style arrow -set style histogram clustered gap 2 title offset character 0, 0, 0 -unset logscale -set offsets graph 0.05, 0.15, 0, 0 -set pointsize 1.5 -set pointintervalbox 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -unset hidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data points -set style function lines -set xzeroaxis linetype -2 linewidth 1.000 -set yzeroaxis linetype -2 linewidth 1.000 -set zzeroaxis linetype -2 linewidth 1.000 -set x2zeroaxis linetype -2 linewidth 1.000 -set y2zeroaxis linetype -2 linewidth 1.000 -set ticslevel 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set xtics norangelimit -set xtics () -set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set ytics autofreq norangelimit -set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 -set ztics autofreq norangelimit -set nox2tics -set noy2tics -set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set cbtics autofreq norangelimit -set title "" -set title offset character 0, 0, 0 font "" norotate -set timestamp bottom -set timestamp "" -set timestamp offset character 0, 0, 0 font "" norotate -set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale rfixmin -set autoscale rfixmax -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set autoscale tfixmin -set autoscale tfixmax -set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale ufixmin -set autoscale ufixmax -set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale vfixmin -set autoscale vfixmax -set xlabel "" -set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set x2label "" -set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate -set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) -set autoscale xfixmin -set autoscale xfixmax -set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) -set autoscale x2fixmin -set autoscale x2fixmax -set ylabel "" -set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set y2label "" -set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) -set autoscale yfixmin -set autoscale yfixmax -set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) -set autoscale y2fixmin -set autoscale y2fixmax -set zlabel "" -set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale zfixmin -set autoscale zfixmax -set cblabel "" -set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale cbfixmin -set autoscale cbfixmax -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set pm3d explicit at s -set pm3d scansautomatic -set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault -set loadpath -set fontpath -set fit noerrorvariables -GNUTERM = "aqua" -plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 -# EOF diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/bench.sh b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/bench.sh deleted file mode 100755 index d870a0cb..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/bench.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# for a given node version run: -# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; - -PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte') -FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es) -INDICES=(2 3 2 3 2 2 2 2 2) -VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) -TMPJOIN="tmp_join" -OUTPUT="bench_results.txt" - -for I in ${!FILES[*]}; do - F=${FILES[$I]} - P=${PATTERNS[$I]} - INDEX=${INDICES[$I]} - echo "version $F" > $F - for V in $VERSIONS; do - (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F - done - if [ $I == 0 ]; then - cat $F > $TMPJOIN - else - join $TMPJOIN $F > $OUTPUT - cp $OUTPUT $TMPJOIN - fi - rm $F -done - -rm $TMPJOIN - -gnuplot bench.gnu -convert -density 200 -resize 800x560 -flatten bench.eps bench.png -rm bench.eps diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/benchmark-native.c b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/benchmark-native.c deleted file mode 100644 index dbfc75f6..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include <stdio.h> -#include <unistd.h> -#include <sys/time.h> -#include <uuid/uuid.h> - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/benchmark.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/benchmark.js deleted file mode 100644 index 40e6efbe..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/benchmark/benchmark.js +++ /dev/null @@ -1,84 +0,0 @@ -try { - var nodeuuid = require('../uuid'); -} catch (e) { - console.error('node-uuid require failed - skipping tests'); -} - -try { - var uuid = require('uuid'); -} catch (e) { - console.error('uuid require failed - skipping tests'); -} - -try { - var uuidjs = require('uuid-js'); -} catch (e) { - console.error('uuid-js require failed - skipping tests'); -} - -var N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -console.log('# v4'); - -// node-uuid - string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); - rate('nodeuuid.v4() - using node.js crypto RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG}); - rate('nodeuuid.v4() - using Math.random() RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); - rate('nodeuuid.v4(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); - rate('nodeuuid.v4(\'binary\', buffer)', t); -} - -// libuuid - string form -if (uuid) { - for (var i = 0, t = Date.now(); i < N; i++) uuid(); - rate('uuid()', t); - - for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); - rate('uuid(\'binary\')', t); -} - -// uuid-js - string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); - rate('uuidjs.create(4)', t); -} - -// 140byte.es -for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)}); -rate('140byte.es_v4', t); - -console.log(''); -console.log('# v1'); - -// node-uuid - v1 string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); - rate('nodeuuid.v1()', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); - rate('nodeuuid.v1(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); - rate('nodeuuid.v1(\'binary\', buffer)', t); -} - -// uuid-js - v1 string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); - rate('uuidjs.create(1)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/misc/compare.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/misc/compare.js deleted file mode 100644 index 3de34151..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/misc/compare.js +++ /dev/null @@ -1,62 +0,0 @@ -var assert = require('assert'), - nodeuuid = require('../'), - uuidjs = require('uuid-js'), - util = require('util'), - exec = require('child_process').exec, - os = require('os'); - -// On Mac Os X / macports there's only the ossp-uuid package that provides uuid -// On Linux there's uuid-runtime which provides uuidgen -var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t'; - -function compare(ids) { - console.log(ids); - for (var i = 0; i < ids.length; i++) { - var id = ids[i].split('-'); - id = [id[2], id[1], id[0]].join(''); - ids[i] = id; - } - var sorted = ([].concat(ids)).sort(); - - if (sorted.toString() !== ids.toString()) { - console.log('Warning: sorted !== ids'); - } else { - console.log('everything in order!'); - } -} - -// Test time order of v1 uuids -var ids = []; -while (ids.length < 10e3) ids.push(nodeuuid.v1()); - -var max = 10; -console.log('node-uuid:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(nodeuuid.v1()); -compare(ids); - -console.log(''); -console.log('uuidjs:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString()); -compare(ids); - -console.log(''); -console.log('libuuid:'); -ids = []; -var count = 0; -var last = function() { - compare(ids); -} -var cb = function(err, stdout, stderr) { - ids.push(stdout.substring(0, stdout.length-1)); - count++; - if (count < max) { - return next(); - } - last(); -}; -var next = function() { - exec(uuidCmd, cb); -}; -next(); diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/misc/perf.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/misc/perf.js deleted file mode 100644 index bdc9eb46..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/misc/perf.js +++ /dev/null @@ -1,102 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -var log = console.log; - -var generators = { - v1: uuid.v1, - v4: uuid.v4 -}; - -var UUID_FORMAT = { - v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i, - v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i -}; - -var N = 1e4; - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second'); -} - -for (var version in generators) { - var counts = {}, max = 0; - var generator = generators[version]; - var format = UUID_FORMAT[version]; - - log('\nSanity check ' + N + ' ' + version + ' uuids'); - for (var i = 0, ok = 0; i < N; i++) { - id = generator(); - if (!format.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - assert(fail, id + ' is not a valid id'); - } - - // Count digits for our randomness check - if (version == 'v4') { - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } - } - } - - // Check randomness for v4 UUIDs - if (version == 'v4') { - // Limit that we get worried about randomness. (Purely empirical choice, this!) - var limit = 2*100*Math.sqrt(1/N); - - log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)'); - - for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)'); - } - } -} - -// Perf tests -for (var version in generators) { - log('\nPerformance testing ' + version + ' UUIDs'); - var generator = generators[version]; - var buf = new uuid.BufferClass(16); - - for (var i = 0, t = Date.now(); i < N; i++) generator(); - rate('uuid.' + version + '()', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary'); - rate('uuid.' + version + '(\'binary\')', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf); - rate('uuid.' + version + '(\'binary\', buffer)', t); -} diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/package.json b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/package.json deleted file mode 100644 index 36eb7f97..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "uuid", - "version": "1.4.1", - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com" - }, - "contributors": [ - { - "name": "Christoph Tavan", - "email": "dev@tavan.de" - } - ], - "main": "./uuid.js", - "devDependencies": { - "mocha": "1.8.0" - }, - "scripts": { - "test": "mocha test/test.js" - }, - "browser": { - "./rng.js": "./rng-browser.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/shtylman/node-uuid.git" - }, - "testling": { - "browsers": [ - "ie6..latest", - "firefox/3.6..latest", - "chrome/22..latest", - "safari/5.1..latest" - ], - "harness": "mocha-tdd", - "files": "test/*.js" - }, - "readme": "# uuid [![Build Status](https://secure.travis-ci.org/shtylman/node-uuid.png?branch=master)](http://travis-ci.org/shtylman/node-uuid) #\n\n[![browser support](http://ci.testling.com/shtylman/node-uuid.png)](http://ci.testling.com/shtylman/node-uuid)\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src=\"uuid.js\"></script>\n```\n\nOr in node.js:\n\n```\nnpm install uuid\n```\n\n```javascript\nvar uuid = require('uuid');\n\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/shtylman/node-uuid/issues" - }, - "homepage": "https://github.com/shtylman/node-uuid", - "_id": "uuid@1.4.1", - "dist": { - "shasum": "4e6bbab179cc65c2f120508576c631bd7751af7c" - }, - "_from": "uuid@~1.4.1", - "_resolved": "https://registry.npmjs.org/uuid/-/uuid-1.4.1.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/rng-browser.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/rng-browser.js deleted file mode 100644 index 57b58d4b..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/rng-browser.js +++ /dev/null @@ -1,31 +0,0 @@ - -var rng; - -if (global.crypto && crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // Moderately fast, high quality - var _rnds8 = new Uint8Array(16); - rng = function whatwgRNG() { - crypto.getRandomValues(_rnds8); - return _rnds8; - }; -} - -if (!rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - rng = function() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return _rnds; - }; -} - -module.exports = rng; - diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/rng.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/rng.js deleted file mode 100644 index 3977f798..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/rng.js +++ /dev/null @@ -1,4 +0,0 @@ -var rb = require('crypto').randomBytes; -module.exports = function() { - return rb(16); -}; diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/test/mocha.opts b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/test/mocha.opts deleted file mode 100644 index e2bfcc5a..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/test/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---ui qunit diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/test/test.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/test/test.js deleted file mode 100644 index 4c9872ff..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/test/test.js +++ /dev/null @@ -1,105 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -// Verify ordering of v1 ids created with explicit times -var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 - -function compare(name, ids) { - test(name, function() { - // avoid .map for older browsers - for (var i=0 ; i<ids.length ; ++i) { - ids[i] = ids[i].split('-').reverse().join('-'); - } - ids = ids.sort(); - var sorted = ([].concat(ids)).sort(); - - assert(sorted.toString() == ids.toString(), name + ' have expected order'); - }); -} - -// Verify ordering of v1 ids created using default behavior -compare('uuids with current time', [ - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1() -]); - -// Verify ordering of v1 ids created with explicit times -compare('uuids with time option', [ - uuid.v1({msecs: TIME - 10*3600*1000}), - uuid.v1({msecs: TIME - 1}), - uuid.v1({msecs: TIME}), - uuid.v1({msecs: TIME + 1}), - uuid.v1({msecs: TIME + 28*24*3600*1000}) -]); - -test('msec', function() { - assert( - uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}), - 'IDs created at same msec are different' - ); -}); - -test('exception thrown when > 10k ids created in 1ms', function() { - // Verify throw if too many ids created - var thrown = false; - try { - uuid.v1({msecs: TIME, nsecs: 10000}); - } catch (e) { - thrown = true; - } - assert(thrown, 'Exception thrown when > 10K ids created in 1 ms'); -}); - -test('clock regression by msec', function() { - // Verify clock regression bumps clockseq - var uidt = uuid.v1({msecs: TIME}); - var uidtb = uuid.v1({msecs: TIME - 1}); - assert( - parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq' - ); -}); - -test('clock regression by nsec', function() { - // Verify clock regression bumps clockseq - var uidtn = uuid.v1({msecs: TIME, nsecs: 10}); - var uidtnb = uuid.v1({msecs: TIME, nsecs: 9}); - assert( - parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq' - ); -}); - -test('explicit options product expected id', function() { - // Verify explicit options produce expected id - var id = uuid.v1({ - msecs: 1321651533573, - nsecs: 5432, - clockseq: 0x385c, - node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ] - }); - assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); -}); - -test('ids spanning 1ms boundary are 100ns apart', function() { - // Verify adjacent ids across a msec boundary are 1 time unit apart - var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); - var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - - var before = u0.split('-')[0], after = u1.split('-')[0]; - var dt = parseInt(after, 16) - parseInt(before, 16); - assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); -}); - -test('parse/unparse', function() { - var id = '00112233445566778899aabbccddeeff'; - assert(uuid.unparse(uuid.parse(id.substr(0,10))) == - '00112233-4400-0000-0000-000000000000', 'Short parse'); - assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) == - '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse'); -}); - diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/uuid.js b/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/uuid.js deleted file mode 100644 index d0062fb4..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/node_modules/uuid/uuid.js +++ /dev/null @@ -1,187 +0,0 @@ -// uuid.js -// -// Copyright (c) 2010-2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -// Unique ID creation requires a high quality random # generator. We feature -// detect to determine the best RNG source, normalizing to a function that -// returns 128-bits of randomness, since that's what's usually required -var _rng = require('./rng'); - -// Buffer class to use -var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array; - -// Maps for number <-> hex string conversion -var _byteToHex = []; -var _hexToByte = {}; -for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; -} - -// **`parse()` - Parse a UUID into it's component bytes** -function parse(s, buf, offset) { - var i = (buf && offset) || 0, ii = 0; - - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) { - if (ii < 16) { // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); - - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; - } - - return buf; -} - -// **`unparse()` - Convert UUID byte array (ala parse()) into a string** -function unparse(buf, offset) { - var i = offset || 0, bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]]; -} - -// **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html - -// random #'s we need to init node and clockseq -var _seedBytes = _rng(); - -// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) -var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] -]; - -// Per 4.2.2, randomize (14 bit) clockseq -var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; - -// Previous uuid creation time -var _lastMSecs = 0, _lastNSecs = 0; - -// See https://github.com/broofa/node-uuid for API details -function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - - var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; - } - - return buf ? buf : unparse(b); -} - -// **`v4()` - Generate random UUID** - -// See https://github.com/broofa/node-uuid for API details -function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options == 'binary' ? new BufferClass(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || _rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || unparse(rnds); -} - -// Export public API -var uuid = v4; -uuid.v1 = v1; -uuid.v4 = v4; -uuid.parse = parse; -uuid.unparse = unparse; -uuid.BufferClass = BufferClass; - -module.exports = uuid; diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/package.json b/node_modules/gulp-imagemin/node_modules/temp-write/package.json deleted file mode 100644 index 1b6a6a28..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "temp-write", - "version": "0.2.0", - "description": "Write String/Buffer to a random temp file", - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/sindresorhus/temp-write" - }, - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "files": [ - "index.js" - ], - "keywords": [ - "tmp", - "temp", - "temporary", - "tempfile", - "file", - "filename", - "path", - "random", - "rand", - "write", - "fs", - "string", - "buffer" - ], - "dependencies": { - "graceful-fs": "~2.0.0", - "uuid": "~1.4.1", - "mkdirp": "~0.3.5" - }, - "devDependencies": { - "mocha": "*" - }, - "readme": "# temp-write [![Build Status](https://travis-ci.org/sindresorhus/temp-write.png?branch=master)](http://travis-ci.org/sindresorhus/temp-write)\n\n> Write String/Buffer to a random temp file\n\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/temp-write)\n\n```\nnpm install --save temp-write\n```\n\n\n## Example\n\n```js\nvar fs = require('fs');\nvar tempWrite = require('temp-write');\n\nvar filepath = tempWrite.sync('unicorn');\n//=> /var/folders/_1/tk89k8215ts0rg0kmb096nj80000gn/T/4049f192-43e7-43b2-98d9-094e6760861b\n\nfs.readFileSync(filepath, 'utf8');\n//=> unicorn\n```\n\n\n## API\n\n### tempWrite(input, [filename], callback)\n\n#### input\n\n*Required* \nType: `String`|`Buffer`\n\n#### filename\n\nType: `String` \nExample: `'img.png'`\n\nOptionally supply a custom filename.\n\n#### callback(err, filepath)\n\n*Required* \nType: `Function`\n\n### tempWrite.sync(input)\n\nType: `String`|`Buffer` \nReturns: the filepath\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/sindresorhus/temp-write/issues" - }, - "homepage": "https://github.com/sindresorhus/temp-write", - "_id": "temp-write@0.2.0", - "dist": { - "shasum": "c7b7030ea691424fa8a6504c939e92a1861bd93d" - }, - "_from": "temp-write@~0.2.0", - "_resolved": "https://registry.npmjs.org/temp-write/-/temp-write-0.2.0.tgz" -} diff --git a/node_modules/gulp-imagemin/node_modules/temp-write/readme.md b/node_modules/gulp-imagemin/node_modules/temp-write/readme.md deleted file mode 100644 index 373ce111..00000000 --- a/node_modules/gulp-imagemin/node_modules/temp-write/readme.md +++ /dev/null @@ -1,58 +0,0 @@ -# temp-write [![Build Status](https://travis-ci.org/sindresorhus/temp-write.png?branch=master)](http://travis-ci.org/sindresorhus/temp-write) - -> Write String/Buffer to a random temp file - - -## Install - -Install with [npm](https://npmjs.org/package/temp-write) - -``` -npm install --save temp-write -``` - - -## Example - -```js -var fs = require('fs'); -var tempWrite = require('temp-write'); - -var filepath = tempWrite.sync('unicorn'); -//=> /var/folders/_1/tk89k8215ts0rg0kmb096nj80000gn/T/4049f192-43e7-43b2-98d9-094e6760861b - -fs.readFileSync(filepath, 'utf8'); -//=> unicorn -``` - - -## API - -### tempWrite(input, [filename], callback) - -#### input - -*Required* -Type: `String`|`Buffer` - -#### filename - -Type: `String` -Example: `'img.png'` - -Optionally supply a custom filename. - -#### callback(err, filepath) - -*Required* -Type: `Function` - -### tempWrite.sync(input) - -Type: `String`|`Buffer` -Returns: the filepath - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-imagemin/package.json b/node_modules/gulp-imagemin/package.json deleted file mode 100644 index d0f06487..00000000 --- a/node_modules/gulp-imagemin/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "gulp-imagemin", - "version": "0.1.5", - "description": "Minify PNG, JPEG and GIF images", - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/sindresorhus/gulp-imagemin" - }, - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "files": [ - "index.js" - ], - "keywords": [ - "gulpplugin", - "image-min", - "image", - "img", - "picture", - "photo", - "minify", - "minifier", - "compress", - "png", - "jpg", - "jpeg", - "gif" - ], - "dependencies": { - "gulp-util": "~2.2.0", - "image-min": "~0.1.0", - "graceful-fs": "~2.0.0", - "filesize": "~2.0.0", - "temp-write": "~0.2.0", - "map-stream": "~0.1.0" - }, - "devDependencies": { - "mocha": "*" - }, - "readme": "# [gulp](https://github.com/wearefractal/gulp)-imagemin [![Build Status](https://secure.travis-ci.org/sindresorhus/gulp-imagemin.png?branch=master)](http://travis-ci.org/sindresorhus/gulp-imagemin)\n\n> Minify PNG, JPEG and GIF images with [image-min](https://github.com/kevva/image-min)\n\n*Issues with the output should be reported on the image-min [issue tracker](https://github.com/kevva/image-min/issues).*\n\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/gulp-imagemin)\n\n```\nnpm install --save-dev gulp-imagemin\n```\n\n\n## Example\n\n```js\nvar gulp = require('gulp');\nvar imagemin = require('gulp-imagemin');\n\ngulp.task('default', function () {\n\tgulp.src('src/image.png')\n\t\t.pipe(imagemin())\n\t\t.pipe(gulp.dest('dist'));\n});\n```\n\n\n## API\n\n### imagemin(options)\n\nSee the image-min [options](https://github.com/kevva/image-min#options).\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/sindresorhus/gulp-imagemin/issues" - }, - "homepage": "https://github.com/sindresorhus/gulp-imagemin", - "_id": "gulp-imagemin@0.1.5", - "_from": "gulp-imagemin@" -} diff --git a/node_modules/gulp-imagemin/readme.md b/node_modules/gulp-imagemin/readme.md deleted file mode 100644 index dfa18b07..00000000 --- a/node_modules/gulp-imagemin/readme.md +++ /dev/null @@ -1,40 +0,0 @@ -# [gulp](https://github.com/wearefractal/gulp)-imagemin [![Build Status](https://secure.travis-ci.org/sindresorhus/gulp-imagemin.png?branch=master)](http://travis-ci.org/sindresorhus/gulp-imagemin) - -> Minify PNG, JPEG and GIF images with [image-min](https://github.com/kevva/image-min) - -*Issues with the output should be reported on the image-min [issue tracker](https://github.com/kevva/image-min/issues).* - - -## Install - -Install with [npm](https://npmjs.org/package/gulp-imagemin) - -``` -npm install --save-dev gulp-imagemin -``` - - -## Example - -```js -var gulp = require('gulp'); -var imagemin = require('gulp-imagemin'); - -gulp.task('default', function () { - gulp.src('src/image.png') - .pipe(imagemin()) - .pipe(gulp.dest('dist')); -}); -``` - - -## API - -### imagemin(options) - -See the image-min [options](https://github.com/kevva/image-min#options). - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-minify-css/.npmignore b/node_modules/gulp-minify-css/.npmignore deleted file mode 100644 index b5ef13a3..00000000 --- a/node_modules/gulp-minify-css/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.DS_Store -*.log -node_modules -build -*.node -components \ No newline at end of file diff --git a/node_modules/gulp-minify-css/.travis.yml b/node_modules/gulp-minify-css/.travis.yml deleted file mode 100644 index 18ae2d89..00000000 --- a/node_modules/gulp-minify-css/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" diff --git a/node_modules/gulp-minify-css/LICENSE b/node_modules/gulp-minify-css/LICENSE deleted file mode 100755 index 55eb4777..00000000 --- a/node_modules/gulp-minify-css/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2013 Jonathan Pollack <jonathaenpollack@gmail.com>, Cloudlabs Inc. - -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-minify-css/README.md b/node_modules/gulp-minify-css/README.md deleted file mode 100644 index 95ff084a..00000000 --- a/node_modules/gulp-minify-css/README.md +++ /dev/null @@ -1,68 +0,0 @@ -[![Build Status](https://travis-ci.org/jonathanepollack/gulp-minify-css.png?branch=master)](https://travis-ci.org/jonathanepollack/gulp-minify-css) -## Information - -<table> -<tr> -<td>Package</td><td>gulp-minify-css</td> -</tr> -<tr> -<td>Description</td> -<td>Minify css with <a href="https://github.com/GoalSmashers/clean-css">clean-css.</a></td> -</tr> -<tr> -<td>Node Version</td> -<td>>= 0.10</td> -</tr> -</table> - -## Installion - -``` -npm install --save-dev gulp-minify-css -``` - -## Usage - -```js -var minifyCSS = require('gulp-minify-css'); - -gulp.task('minify-css', function() { - - gulp.src('./static/css/*.css') - .pipe(minifyCSS(opts)) - .pipe(gulp.dest('./dist/')) -}); -``` -### Options -* `keepSpecialComments` - `*` for keeping all (default), `1` for keeping first one, `0` for removing all -* `keepBreaks` - whether to keep line breaks (default is false) -* `removeEmpty` - whether to remove empty elements (default is false) -* `debug` - turns on debug mode measuring time spent on cleaning up - (run `npm run bench` to see example) -* `root` - path with which to resolve absolute `@import` rules -* `relativeTo` - path with which to resolve relative `@import` rules - -## LICENSE - -(MIT License) - -Copyright (c) 2013 Jonathan Pollack (<jonathanepollack@gmail.com>), Cloublabs Inc. - -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-minify-css/index.js b/node_modules/gulp-minify-css/index.js deleted file mode 100644 index 2616ea1c..00000000 --- a/node_modules/gulp-minify-css/index.js +++ /dev/null @@ -1,52 +0,0 @@ -var es = require('event-stream'), - CleanCSS = require('clean-css'), - clone = require('clone'), - BufferStreams = require('bufferstreams'), - gutil = require('gulp-util'); - -// File level transform function -function minifyCSSTransform(opt) { - - // Return a callback function handling the buffered content - return function(err, buf, cb) { - - // Handle any error - if(err) cb(gutil.PluginError('minify-css', err)); - - // Use the buffered content - buf = Buffer(new CleanCSS(opt).minify(String(buf))); - - // Bring it back to streams - cb(null, buf); - }; -} - -// Plugin function -function minifyCSSGulp(opt){ - if (!opt) opt = {}; - - function modifyContents(file, cb){ - if(file.isNull()) return cb(null, file); - - if(file.isStream()) { - - file.contents = file.contents.pipe(new BufferStreams(minifyCSSTransform(opt))); - - return cb(null, file); - } - - var newFile = clone(file); - - var newContents = new CleanCSS(opt).minify(String(newFile.contents)); - newFile.contents = new Buffer(newContents); - cb(null, newFile); - } - - return es.map(modifyContents); -} - -// Export the file level transform function for other plugins usage -minifyCSSGulp.fileTransform = minifyCSSTransform; - -// Export the plugin main function -module.exports = minifyCSSGulp; diff --git a/node_modules/gulp-minify-css/node_modules/.bin/cleancss b/node_modules/gulp-minify-css/node_modules/.bin/cleancss deleted file mode 120000 index 2a3439eb..00000000 --- a/node_modules/gulp-minify-css/node_modules/.bin/cleancss +++ /dev/null @@ -1 +0,0 @@ -../clean-css/bin/cleancss \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/bufferstreams/.npmignore b/node_modules/gulp-minify-css/node_modules/bufferstreams/.npmignore deleted file mode 100755 index 31f2e87a..00000000 --- a/node_modules/gulp-minify-css/node_modules/bufferstreams/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -*~ -*.swp -node_modules/ -.git -tests/results diff --git a/node_modules/gulp-minify-css/node_modules/bufferstreams/.travis.yml b/node_modules/gulp-minify-css/node_modules/bufferstreams/.travis.yml deleted file mode 100755 index b2178387..00000000 --- a/node_modules/gulp-minify-css/node_modules/bufferstreams/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: node_js -node_js: - - 0.10 - -before_script: - - npm install --dev - -script: - - npm test diff --git a/node_modules/gulp-minify-css/node_modules/bufferstreams/LICENCE b/node_modules/gulp-minify-css/node_modules/bufferstreams/LICENCE deleted file mode 100755 index 454ab9d0..00000000 --- a/node_modules/gulp-minify-css/node_modules/bufferstreams/LICENCE +++ /dev/null @@ -1,21 +0,0 @@ -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-minify-css/node_modules/bufferstreams/README.md b/node_modules/gulp-minify-css/node_modules/bufferstreams/README.md deleted file mode 100755 index 85fc9bd1..00000000 --- a/node_modules/gulp-minify-css/node_modules/bufferstreams/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# 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-minify-css/node_modules/bufferstreams/package.json b/node_modules/gulp-minify-css/node_modules/bufferstreams/package.json deleted file mode 100755 index fd607d19..00000000 --- a/node_modules/gulp-minify-css/node_modules/bufferstreams/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-minify-css/node_modules/bufferstreams/src/index.js b/node_modules/gulp-minify-css/node_modules/bufferstreams/src/index.js deleted file mode 100644 index a19a0f96..00000000 --- a/node_modules/gulp-minify-css/node_modules/bufferstreams/src/index.js +++ /dev/null @@ -1,45 +0,0 @@ -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-minify-css/node_modules/bufferstreams/tests/index.mocha.js b/node_modules/gulp-minify-css/node_modules/bufferstreams/tests/index.mocha.js deleted file mode 100755 index 7b0ccc32..00000000 --- a/node_modules/gulp-minify-css/node_modules/bufferstreams/tests/index.mocha.js +++ /dev/null @@ -1,111 +0,0 @@ -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-minify-css/node_modules/clean-css/History.md b/node_modules/gulp-minify-css/node_modules/clean-css/History.md deleted file mode 100644 index 6d649bc5..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/History.md +++ /dev/null @@ -1,379 +0,0 @@ -[2.0.8 / 2014-02-07](https://github.com/GoalSmashers/clean-css/compare/v2.0.7...v2.0.8) -================== - -* Fixed issue [#232](https://github.com/GoalSmashers/clean-css/issues/232) - edge case in non-adjacent selectors merging. - -[2.0.7 / 2014-01-16](https://github.com/GoalSmashers/clean-css/compare/v2.0.6...v2.0.7) -================== - -* Fixed issue [#208](https://github.com/GoalSmashers/clean-css/issues/208) - don't swallow @page and @viewport. - -[2.0.6 / 2014-01-04](https://github.com/GoalSmashers/clean-css/compare/v2.0.5...v2.0.6) -================== - -* Fixed issue [#198](https://github.com/GoalSmashers/clean-css/issues/198) - process comments and `@import`s correctly. -* Fixed issue [#205](https://github.com/GoalSmashers/clean-css/issues/205) - freeze on broken @import declaration. - -[2.0.5 / 2014-01-03](https://github.com/GoalSmashers/clean-css/compare/v2.0.4...v2.0.5) -================== - -* Fixed issue [#199](https://github.com/GoalSmashers/clean-css/issues/199) - keep line breaks with no advanced optimizations. -* Fixed issue [#203](https://github.com/GoalSmashers/clean-css/issues/203) - Buffer as a first argument to minify method. - -[2.0.4 / 2013-12-19](https://github.com/GoalSmashers/clean-css/compare/v2.0.3...v2.0.4) -================== - -* Fixed issue [#193](https://github.com/GoalSmashers/clean-css/issues/193) - HSL color space normalization. - -[2.0.3 / 2013-12-18](https://github.com/GoalSmashers/clean-css/compare/v2.0.2...v2.0.3) -================== - -* Fixed issue [#191](https://github.com/GoalSmashers/clean-css/issues/191) - leading numbers in font/animation names. -* Fixed issue [#192](https://github.com/GoalSmashers/clean-css/issues/192) - many `@import`s inside a comment. - -[2.0.2 / 2013-11-18](https://github.com/GoalSmashers/clean-css/compare/v2.0.1...v2.0.2) -================== - -* Fixed issue [#177](https://github.com/GoalSmashers/clean-css/issues/177) - process broken content correctly. - -[2.0.1 / 2013-11-14](https://github.com/GoalSmashers/clean-css/compare/v2.0.0...v2.0.1) -================== - -* Fixed issue [#176](https://github.com/GoalSmashers/clean-css/issues/176) - hangs on `undefined` keyword. - -[2.0.0 / 2013-11-04](https://github.com/GoalSmashers/clean-css/compare/v1.1.7...v2.0.0) -================== - -* Adds simplified and more advanced text escaping / restoring via `EscapeStore` class. -* Adds simplified and much faster empty elements removal. -* Adds missing `@import` processing to our benchmark (run via `npm run bench`). -* Adds CSS tokenizer which will make it possible to optimize content by reordering and/or merging selectors. -* Adds basic optimizer removing duplicate selectors from a list. -* Adds merging duplicate properties within a single selector's body. -* Adds merging adjacent selectors within a scope (single and multiple ones). -* Changes behavior of `--keep-line-breaks`/`keepBreaks` option to keep breaks after trailing braces only. -* Makes all multiple selectors ordered alphabetically (aids merging). -* Adds property overriding so more coarse properties override more granular ones. -* Adds reducing non-adjacent selectors. -* Adds `--skip-advanced`/`noAdvanced` switch to disable advanced optimizations. -* Adds reducing non-adjacent selectors when overridden by more complex selectors. -* Fixed issue [#138](https://github.com/GoalSmashers/clean-css/issues/138) - makes CleanCSS interface OO. -* Fixed issue [#139](https://github.com/GoalSmashers/clean-css/issues/138) - consistent error & warning handling. -* Fixed issue [#145](https://github.com/GoalSmashers/clean-css/issues/145) - debug mode in library too. -* Fixed issue [#157](https://github.com/GoalSmashers/clean-css/issues/157) - gets rid of `removeEmpty` option. -* Fixed issue [#159](https://github.com/GoalSmashers/clean-css/issues/159) - escaped quotes inside content. -* Fixed issue [#162](https://github.com/GoalSmashers/clean-css/issues/162) - strip quotes from Base64 encoded URLs. -* Fixed issue [#166](https://github.com/GoalSmashers/clean-css/issues/166) - `debug` formatting in CLI -* Fixed issue [#167](https://github.com/GoalSmashers/clean-css/issues/167) - `background:transparent` minification. - -[1.1.7 / 2013-10-28](https://github.com/GoalSmashers/clean-css/compare/v1.1.6...v1.1.7) -================== - -* Fixed issue [#156](https://github.com/GoalSmashers/clean-css/issues/156) - `@import`s inside comments. - -[1.1.6 / 2013-10-26](https://github.com/GoalSmashers/clean-css/compare/v1.1.5...v1.1.6) -================== - -* Fixed issue [#155](https://github.com/GoalSmashers/clean-css/issues/155) - broken irregular CSS content. - -[1.1.5 / 2013-10-24](https://github.com/GoalSmashers/clean-css/compare/v1.1.4...v1.1.5) -================== - -* Fixed issue [#153](https://github.com/GoalSmashers/clean-css/issues/153) - keepSpecialComments 0/1 as a string. - -[1.1.4 / 2013-10-23](https://github.com/GoalSmashers/clean-css/compare/v1.1.3...v1.1.4) -================== - -* Fixed issue [#152](https://github.com/GoalSmashers/clean-css/issues/152) - adds an option to disable rebasing. - -[1.1.3 / 2013-10-04](https://github.com/GoalSmashers/clean-css/compare/v1.1.2...v1.1.3) -================== - -* Fixed issue [#150](https://github.com/GoalSmashers/clean-css/issues/150) - minifying `background:none`. - -[1.1.2 / 2013-09-29](https://github.com/GoalSmashers/clean-css/compare/v1.1.1...v1.1.2) -================== - -* Fixed issue [#149](https://github.com/GoalSmashers/clean-css/issues/149) - shorthand font property. - -[1.1.1 / 2013-09-07](https://github.com/GoalSmashers/clean-css/compare/v1.1.0...v1.1.1) -================== - -* Fixed issue [#144](https://github.com/GoalSmashers/clean-css/issues/144) - skip URLs rebasing by default. - -[1.1.0 / 2013-09-06](https://github.com/GoalSmashers/clean-css/compare/v1.0.12...v1.1.0) -================== - -* Renamed lib's `debug` option to `benchmark` when doing per-minification benchmarking. -* Added simplified comments processing & imports. -* Fixed issue [#43](https://github.com/GoalSmashers/clean-css/issues/43) - `--debug` switch for minification stats. -* Fixed issue [#65](https://github.com/GoalSmashers/clean-css/issues/65) - full color name / hex shortening. -* Fixed issue [#84](https://github.com/GoalSmashers/clean-css/issues/84) - support for `@import` with media queries. -* Fixed issue [#124](https://github.com/GoalSmashers/clean-css/issues/124) - raise error on broken imports. -* Fixed issue [#126](https://github.com/GoalSmashers/clean-css/issues/126) - proper CSS expressions handling. -* Fixed issue [#129](https://github.com/GoalSmashers/clean-css/issues/129) - rebasing imported URLs. -* Fixed issue [#130](https://github.com/GoalSmashers/clean-css/issues/130) - better code modularity. -* Fixed issue [#135](https://github.com/GoalSmashers/clean-css/issues/135) - require node.js 0.8+. - -[1.0.12 / 2013-07-19](https://github.com/GoalSmashers/clean-css/compare/v1.0.11...v1.0.12) -=================== - -* Fixed issue [#121](https://github.com/GoalSmashers/clean-css/issues/121) - ability to skip `@import` processing. - -[1.0.11 / 2013-07-08](https://github.com/GoalSmashers/clean-css/compare/v1.0.10...v1.0.11) -=================== - -* Fixed issue [#117](https://github.com/GoalSmashers/clean-css/issues/117) - line break escaping in comments. - -[1.0.10 / 2013-06-13](https://github.com/GoalSmashers/clean-css/compare/v1.0.9...v1.0.10) -=================== - -* Fixed issue [#114](https://github.com/GoalSmashers/clean-css/issues/114) - comments in imported stylesheets. - -[1.0.9 / 2013-06-11](https://github.com/GoalSmashers/clean-css/compare/v1.0.8...v1.0.9) -================== - -* Fixed issue [#113](https://github.com/GoalSmashers/clean-css/issues/113) - `@import` in comments. - -[1.0.8 / 2013-06-10](https://github.com/GoalSmashers/clean-css/compare/v1.0.7...v1.0.8) -================== - -* Fixed issue [#112](https://github.com/GoalSmashers/clean-css/issues/112) - reducing `box-shadow` zeros. - -[1.0.7 / 2013-06-05](https://github.com/GoalSmashers/clean-css/compare/v1.0.6...v1.0.7) -================== - -* Support for `@import` URLs starting with `//`. - By [@petetak](https://github.com/petetak). - -[1.0.6 / 2013-06-04](https://github.com/GoalSmashers/clean-css/compare/v1.0.5...v1.0.6) -================== - -* Fixed issue [#110](https://github.com/GoalSmashers/clean-css/issues/110) - data URIs in URLs. - -[1.0.5 / 2013-05-26](https://github.com/GoalSmashers/clean-css/compare/v1.0.4...v1.0.5) -================== - -* Fixed issue [#107](https://github.com/GoalSmashers/clean-css/issues/107) - data URIs in imported stylesheets. - -1.0.4 / 2013-05-23 -================== - -* Rewrite relative URLs in imported stylesheets. - By [@bluej100](https://github.com/bluej100). - -1.0.3 / 2013-05-20 -================== - -* Support alternative `@import` syntax with file name not wrapped inside `url()` statement. - By [@bluej100](https://github.com/bluej100). - -1.0.2 / 2013-04-29 -================== - -* Fixed issue [#97](https://github.com/GoalSmashers/clean-css/issues/97) - `--remove-empty` & FontAwesome. - -1.0.1 / 2013-04-08 -================== - -* Do not pick up `bench` and `test` while building `npm` package. - By [@sindresorhus](https://https://github.com/sindresorhus). - -1.0.0 / 2013-03-30 -================== - -* Fixed issue [#2](https://github.com/GoalSmashers/clean-css/issues/2) - resolving `@import` rules. -* Fixed issue [#44](https://github.com/GoalSmashers/clean-css/issues/44) - examples in `--help`. -* Fixed issue [#46](https://github.com/GoalSmashers/clean-css/issues/46) - preserving special characters in URLs and attributes. -* Fixed issue [#80](https://github.com/GoalSmashers/clean-css/issues/80) - quotation in multi line strings. -* Fixed issue [#83](https://github.com/GoalSmashers/clean-css/issues/83) - HSL to hex color conversions. -* Fixed issue [#86](https://github.com/GoalSmashers/clean-css/issues/86) - broken `@charset` replacing. -* Fixed issue [#88](https://github.com/GoalSmashers/clean-css/issues/88) - removes space in `! important`. -* Fixed issue [#92](https://github.com/GoalSmashers/clean-css/issues/92) - uppercase hex to short versions. - -0.10.2 / 2013-03-19 -=================== - -* Fixed issue [#79](https://github.com/GoalSmashers/clean-css/issues/79) - node.js 0.10.x compatibility. - -0.10.1 / 2013-02-14 -=================== - -* Fixed issue [#66](https://github.com/GoalSmashers/clean-css/issues/66) - line breaks without extra spaces should - be handled correctly. - -0.10.0 / 2013-02-09 -=================== - -* Switched from [optimist](https://github.com/substack/node-optimist) to - [commander](https://github.com/visionmedia/commander.js) for CLI processing. -* Changed long options from `--removeempty` to `--remove-empty` and from `--keeplinebreaks` to `--keep-line-breaks`. -* Fixed performance issue with replacing multiple `@charset` declarations and issue - with line break after `@charset` when using `keepLineBreaks` option. By [@rrjaime](https://github.com/rrjamie). -* Removed Makefile in favor to `npm run` commands (e.g. `make check` -> `npm run check`). -* Fixed issue [#47](https://github.com/GoalSmashers/clean-css/issues/47) - commandline issues on Windows. -* Fixed issue [#49](https://github.com/GoalSmashers/clean-css/issues/49) - remove empty selectors from media query. -* Fixed issue [#52](https://github.com/GoalSmashers/clean-css/issues/52) - strip fraction zeros if not needed. -* Fixed issue [#58](https://github.com/GoalSmashers/clean-css/issues/58) - remove colon where possible. -* Fixed issue [#59](https://github.com/GoalSmashers/clean-css/issues/59) - content property handling. - -0.9.1 / 2012-12-19 -================== - -* Fixed issue [#37](https://github.com/GoalSmashers/clean-css/issues/37) - converting - `white` and other colors in class names (reported by [@malgorithms](https://github.com/malgorithms)). - -0.9.0 / 2012-12-15 -================== - -* Added stripping quotation from font names (if possible). -* Added stripping quotation from `@keyframes` declaration, `animation` and - `animation-name` property. -* Added stripping quotations from attributes' value (e.g. `[data-target='x']`). -* Added better hex->name and name->hex color shortening. -* Added `font: normal` and `font: bold` shortening the same way as `font-weight` is. -* Refactored shorthand selectors and added `border-radius`, `border-style` - and `border-color` shortening. -* Added `margin`, `padding` and `border-width` shortening. -* Added removing line break after commas. -* Fixed removing whitespace inside media query definition. -* Added removing line breaks after a comma, so all declarations are one-liners now. -* Speed optimizations (~10% despite many new features). -* Added [JSHint](https://github.com/jshint/jshint/) validation rules via `make check`. - -0.8.3 / 2012-11-29 -================== - -* Fixed HSL/HSLA colors processing. - -0.8.2 / 2012-10-31 -================== - -* Fixed shortening hex colors and their relation to hashes in URLs. -* Cleanup by [@XhmikosR](https://github.com/XhmikosR). - -0.8.1 / 2012-10-28 -================== - -* Added better zeros processing for `rect(...)` syntax (clip property). - -0.8.0 / 2012-10-21 -================== - -* Added removing URLs quotation if possible. -* Rewrote breaks processing. -* Added `keepBreaks`/`-b` option to keep line breaks in the minimized file. -* Reformatted [lib/clean.js](/lib/clean.js) so it's easier to follow the rules. -* Minimized test data is now minimized with line breaks so it's easier to - compare the changes line by line. - -0.7.0 / 2012-10-14 -================== - -* Added stripping special comments to CLI (`--s0` and `--s1` options). -* Added stripping special comments to programmatic interface - (`keepSpecialComments` option). - -0.6.0 / 2012-08-05 -================== - -* Full Windows support with tests (./test.bat). - -0.5.0 / 2012-08-02 -================== - -* Made path to vows local. -* Explicit node.js 0.6 requirement. - -0.4.2 / 2012-06-28 -================== - -* Updated binary `-v` option (version). -* Updated binary to output help when no options given (but not in piped mode). -* Added binary tests. - -0.4.1 / 2012-06-10 -================== - -* Fixed stateless mode where calling `CleanCSS#process` directly was giving - errors (reported by [@facelessuser](https://github.com/facelessuser)). - -0.4.0 / 2012-06-04 -================== - -* Speed improvements up to 4x thanks to the rewrite of comments and CSS' content - processing. -* Stripping empty CSS tags is now optional (see [bin/cleancss](/bin/cleancss) for details). -* Improved debugging mode (see [test/bench.js](/test/bench.js)) -* Added `make bench` for a one-pass benchmark. - -0.3.3 / 2012-05-27 -================== - -* Fixed tests, [package.json](/package.json) for development, and regex - for removing empty declarations (thanks to [@vvo](https://github.com/vvo)). - -0.3.2 / 2012-01-17 -================== - -* Fixed output method under node.js 0.6 which incorrectly tried to close - `process.stdout`. - -0.3.1 / 2011-12-16 -================== - -* Fixed cleaning up `0 0 0 0` expressions. - -0.3.0 / 2011-11-29 -================== - -* Clean-css requires node.js 0.4.0+ to run. -* Removed node.js's 0.2.x 'sys' package dependency - (thanks to [@jmalonzo](https://github.com/jmalonzo) for a patch). - -0.2.6 / 2011-11-27 -================== - -* Fixed expanding `+` signs in `calc()` when mixed up with adjacent `+` selector. - -0.2.5 / 2011-11-27 -================== - -* Fixed issue with cleaning up spaces inside `calc`/`-moz-calc` declarations - (thanks to [@cvan](https://github.com/cvan) for reporting it). -* Fixed converting `#f00` to `red` in borders and gradients. - -0.2.4 / 2011-05-25 -================== - -* Fixed problem with expanding `none` to `0` in partial/full background - declarations. -* Fixed including clean-css library from binary (global to local). - -0.2.3 / 2011-04-18 -================== - -* Fixed problem with optimizing IE filters. - -0.2.2 / 2011-04-17 -================== - -* Fixed problem with space before color in `border` property. - -0.2.1 / 2011-03-19 -================== - -* Added stripping space before `!important` keyword. -* Updated repository location and author information in [package.json](/package.json). - -0.2.0 / 2011-03-02 -================== - -* Added options parsing via optimist. -* Changed code inclusion (thus the version bump). - -0.1.0 / 2011-02-27 -================== - -* First version of clean-css library. -* Implemented all basic CSS transformations. diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/LICENSE b/node_modules/gulp-minify-css/node_modules/clean-css/LICENSE deleted file mode 100644 index 1509aa3d..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2011-2013 GoalSmashers.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-minify-css/node_modules/clean-css/README.md b/node_modules/gulp-minify-css/node_modules/clean-css/README.md deleted file mode 100644 index 8b28e5c3..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/README.md +++ /dev/null @@ -1,187 +0,0 @@ -[![NPM version](https://badge.fury.io/js/clean-css.png)](https://badge.fury.io/js/clean-css) -[![Build Status](https://secure.travis-ci.org/GoalSmashers/clean-css.png)](https://travis-ci.org/GoalSmashers/clean-css) -[![Dependency Status](https://david-dm.org/GoalSmashers/clean-css.png)](https://david-dm.org/GoalSmashers/clean-css) -[![devDependency Status](https://david-dm.org/GoalSmashers/clean-css/dev-status.png)](https://david-dm.org/GoalSmashers/clean-css#info=devDependencies) - -## What is clean-css? - -Clean-css is a fast and efficient [node.js](http://nodejs.org/) library for minifying CSS files. - -According to [tests](https://github.com/GoalSmashers/css-minification-benchmark) it is one of the best available. - - -## Usage - -### What are the requirements? - -``` -node.js 0.8.0+ (tested on CentOS, Ubuntu, OS X 10.6+, and Windows 7+) -``` - -### How to install clean-css? - -``` -npm install clean-css -``` - -### How to upgrade clean-css from 1.x to 2.x? - -#### Command-line interface (CLI) - -``` -npm update clean-css -``` - -or point `package.json` to version 2.x. That's it! - -#### Node.js module - -Update `clean-css` as for CLI above. -Then change your JavaScript code from: - -```js -var minimized = CleanCSS.process(source, options); -``` - -into - -```js -var minimized = new CleanCSS(options).minify(source); -``` - -And you are done. - -### How to use clean-css CLI? - -Clean-css accepts the following command line arguments (please make sure -you use `<source-file>` as the very last argument to avoid potential issues): - -``` -cleancss [options] <source-file> - --h, --help Output usage information --v, --version Output the version number --b, --keep-line-breaks Keep line breaks ---s0 Remove all special comments, i.e. /*! comment */ ---s1 Remove all special comments but the first one --r, --root [root-path] A root path to which resolve absolute @import rules - and rebase relative URLs --o, --output [output-file] Use [output-file] as output instead of STDOUT --s, --skip-import Disable @import processing ---skip-rebase Disable URLs rebasing ---skip-advanced Disable advanced optimizations - selector & property merging, - reduction, etc. ---selectors-merge-mode [ie8|*] Use `ie8` for compatibility mode, `*` for merge all (default) --d, --debug Shows debug information (minification time & compression efficiency) -``` - -#### Examples: - -To minify a **public.css** file into **public-min.css** do: - -``` -cleancss -o public-min.css public.css -``` - -To minify the same **public.css** into the standard output skip the `-o` parameter: - -``` -cleancss public.css -``` - -More likely you would like to concatenate a couple of files. -If you are on a Unix-like system: - -```bash -cat one.css two.css three.css | cleancss -o merged-and-minified.css -``` - -On Windows: - -```bat -type one.css two.css three.css | cleancss -o merged-and-minified.css -``` - -Or even gzip the result at once: - -```bash -cat one.css two.css three.css | cleancss | gzip -9 -c > merged-minified-and-gzipped.css.gz -``` - -### How to use clean-css programmatically? - -```js -var CleanCSS = require('clean-css'); -var source = 'a{font-weight:bold;}'; -var minimized = new CleanCSS().minify(source); -``` - -CleanCSS constructor accepts a hash as a parameter, i.e., -`new CleanCSS(options).minify(source)` with the following options available: - -* `keepSpecialComments` - `*` for keeping all (default), `1` for keeping first one only, `0` for removing all -* `keepBreaks` - whether to keep line breaks (default is false) -* `benchmark` - turns on benchmarking mode measuring time spent on cleaning up - (run `npm run bench` to see example) -* `root` - path to resolve absolute `@import` rules and rebase relative URLs -* `relativeTo` - path with which to resolve relative `@import` rules and URLs -* `processImport` - whether to process `@import` rules -* `noRebase` - whether to skip URLs rebasing -* `noAdvanced` - set to true to disable advanced optimizations - selector & property merging, reduction, etc. -* `selectorsMergeMode` - `ie8` for IE8 compatibility mode, `*` for merging all (default) -* `debug` - set to true to get minification statistics under `stats` property (see `test/custom-test.js` for examples) - -### What are the clean-css' dev commands? - -First clone the source, then run: - -* `npm run bench` for clean-css benchmarks (see [test/bench.js](https://github.com/GoalSmashers/clean-css/blob/master/test/bench.js) for details) -* `npm run check` to check JS sources with [JSHint](https://github.com/jshint/jshint/) -* `npm test` for the test suite - -## Tips & Tricks - -### How to preserve a comment block? - -Use the `/*!` notation instead of the standard one `/*`: - -```css -/*! - Important comments included in minified output. -*/ -``` - -### How to rebase relative image URLs - -Clean-css will handle it automatically for you (since version 1.1) in the following cases: - -* When using the CLI: - 1. Use an output path via `-o`/`--output` to rebase URLs as relative to the output file. - 2. Use a root path via `-r`/`--root` to rebase URLs as absolute from the given root path. - 3. If you specify both then `-r`/`--root` takes precendence. -* When using clean-css as a library: - 1. Use a combination of `relativeTo` and `target` options for relative rebase (same as 1 in CLI). - 2. Use a combination of `relativeTo` and `root` options for absolute rebase (same as 2 in CLI). - 3. `root` takes precendence over `target` as in CLI. - -## Acknowledgments - -* Vincent Voyer ([@vvo](https://github.com/vvo)) for a patch with better - empty element regex and for inspiring us to do many performance improvements - in 0.4 release. -* Isaac ([@facelessuser](https://github.com/facelessuser)) for pointing out - a flaw in clean-css' stateless mode. -* Jan Michael Alonzo ([@jmalonzo](https://github.com/jmalonzo)) for a patch - removing node.js' old `sys` package. -* [@XhmikosR](https://github.com/XhmikosR) for suggesting new features - (option to remove special comments and strip out URLs quotation) and - pointing out numerous improvements (JSHint, media queries). -* Anthony Barre ([@abarre](https://github.com/abarre)) for improvements to - `@import` processing, namely introducing the `--skip-import` / - `processImport` options. -* Simon Altschuler ([@altschuler](https://github.com/altschuler)) for fixing - `@import` processing inside comments. - -## License - -Clean-css is released under the [MIT License](https://github.com/GoalSmashers/clean-css/blob/master/LICENSE). diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/bin/cleancss b/node_modules/gulp-minify-css/node_modules/clean-css/bin/cleancss deleted file mode 100755 index e73ebd56..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/bin/cleancss +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env node - -var util = require('util'); -var fs = require('fs'); -var path = require('path'); -var CleanCSS = require('../index'); - -var commands = require('commander'); - -var packageConfig = fs.readFileSync(path.join(path.dirname(fs.realpathSync(process.argv[1])), '../package.json')); -var buildVersion = JSON.parse(packageConfig).version; - -var isWindows = process.platform == 'win32'; - -// Specify commander options to parse command line params correctly -commands - .version(buildVersion, '-v, --version') - .usage('[options] <source-file>') - .option('-b, --keep-line-breaks', 'Keep line breaks') - .option('--s0', 'Remove all special comments, i.e. /*! comment */') - .option('--s1', 'Remove all special comments but the first one') - .option('-r, --root [root-path]', 'Set a root path to which resolve absolute @import rules') - .option('-o, --output [output-file]', 'Use [output-file] as output instead of STDOUT') - .option('-s, --skip-import', 'Disable @import processing') - .option('--skip-rebase', 'Disable URLs rebasing') - .option('--skip-advanced', 'Disable advanced optimizations - selector & property merging, reduction, etc.') - .option('--selectors-merge-mode [ie8|*]', 'Use `ie8` for compatibility mode, `*` for merge all (default).') - .option('-d, --debug', 'Shows debug information (minification time & compression efficiency)'); - -commands.on('--help', function() { - util.puts(' Examples:\n'); - util.puts(' %> cleancss one.css'); - util.puts(' %> cleancss -o one-min.css one.css'); - if (isWindows) { - util.puts(' %> type one.css two.css three.css | cleancss -o merged-and-minified.css'); - } else { - util.puts(' %> cat one.css two.css three.css | cleancss -o merged-and-minified.css'); - util.puts(' %> cat one.css two.css three.css | cleancss | gzip -9 -c > merged-minified-and-gzipped.css.gz'); - } - util.puts(''); - process.exit(); -}); - -commands.parse(process.argv); - -var options = { - source: null, - target: null -}; -var cleanOptions = {}; -var fromStdin = !process.env['__DIRECT__'] && !process.stdin.isTTY; - -// If no sensible data passed in just print help and exit -if (!fromStdin && commands.args.length == 0) { - commands.outputHelp(); - return 0; -} - -// Now coerce commands into CleanCSS configuration... -if (commands.output) - cleanOptions.target = options.target = commands.output; -if (commands.keepLineBreaks) - cleanOptions.keepBreaks = true; -if (commands.s1) - cleanOptions.keepSpecialComments = 1; -if (commands.s0) - cleanOptions.keepSpecialComments = 0; -if (commands.root) - cleanOptions.root = commands.root; -if (commands.skipImport) - cleanOptions.processImport = false; -if (commands.skipRebase) - cleanOptions.noRebase = true; -if (commands.skipAdvanced) - cleanOptions.noAdvanced = true; -if (commands.selectorsMergeMode) - cleanOptions.selectorsMergeMode = commands.selectorsMergeMode; -if (commands.debug) - cleanOptions.debug = true; -if (commands.args.length > 0) { - var source = commands.args[0]; - options.source = source; - cleanOptions.relativeTo = path.dirname(path.resolve(source)); -} - -// ... and do the magic! -if (options.source) { - fs.readFile(options.source, 'utf8', function(error, data) { - if (error) - throw error; - output(minify(data)); - }); -} else { - var stdin = process.openStdin(); - stdin.setEncoding('utf-8'); - var data = ''; - stdin.on('data', function(chunk) { - data += chunk; - }); - stdin.on('end', function() { - output(minify(data)); - }); -} - -function minify(data) { - var minifier = new CleanCSS(cleanOptions); - var minified = minifier.minify(data); - - if (cleanOptions.debug) { - console.error('Original: %d bytes', minifier.stats.originalSize); - console.error('Minified: %d bytes', minifier.stats.minifiedSize); - console.error('Efficiency: %d%', ~~(minifier.stats.efficiency * 10000) / 100.0); - console.error('Time spent: %dms', minifier.stats.timeSpent); - } - - outputFeedback(minifier.errors, true); - outputFeedback(minifier.warnings); - - if (minifier.errors.length > 0) - process.exit(1); - - return minified; -} - -function output(minified) { - if (options.target) - fs.writeFileSync(options.target, minified, 'utf8'); - else - process.stdout.write(minified); -}; - -function outputFeedback(messages, isError) { - var prefix = isError ? '\x1B[31mERROR\x1B[39m:' : 'WARNING:'; - - messages.forEach(function(message) { - console.error('%s %s', prefix, message); - }); -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/index.js b/node_modules/gulp-minify-css/node_modules/clean-css/index.js deleted file mode 100644 index d7b05030..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/clean'); diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/clean.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/clean.js deleted file mode 100644 index 3d999301..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/clean.js +++ /dev/null @@ -1,329 +0,0 @@ -/** - * Clean-css - https://github.com/GoalSmashers/clean-css - * Released under the terms of MIT license - * - * Copyright (C) 2011-2013 GoalSmashers.com - */ - -var ColorShortener = require('./colors/shortener'); -var ColorHSLToHex = require('./colors/hsl-to-hex'); -var ColorRGBToHex = require('./colors/rgb-to-hex'); -var ColorLongToShortHex = require('./colors/long-to-short-hex'); - -var ShorthandNotations = require('./properties/shorthand-notations'); -var ImportInliner = require('./imports/inliner'); -var UrlRebase = require('./images/url-rebase'); -var EmptyRemoval = require('./selectors/empty-removal'); - -var CommentsProcessor = require('./text/comments'); -var ExpressionsProcessor = require('./text/expressions'); -var FreeTextProcessor = require('./text/free'); -var UrlsProcessor = require('./text/urls'); - -var SelectorsOptimizer = require('./selectors/optimizer'); - -module.exports = function(options) { - var lineBreak = process.platform == 'win32' ? '\r\n' : '\n'; - var stats = {}; - var context = { - errors: [], - warnings: [] - }; - - options = options || {}; - options.keepBreaks = options.keepBreaks || false; - - //active by default - if (options.processImport === undefined) - options.processImport = true; - - var minify = function(data) { - if (Buffer.isBuffer(data)) - data = data.toString(); - - var startedAt; - if (options.debug) { - startedAt = process.hrtime(); - stats.originalSize = data.length; - } - - var replace = function() { - if (typeof arguments[0] == 'function') - arguments[0](); - else - data = data.replace.apply(data, arguments); - }; - - // replace function - if (options.benchmark) { - var originalReplace = replace; - replace = function(pattern, replacement) { - var name = typeof pattern == 'function' ? - /function (\w+)\(/.exec(pattern.toString())[1] : - pattern; - - var start = process.hrtime(); - originalReplace(pattern, replacement); - - var itTook = process.hrtime(start); - console.log('%d ms: ' + name, 1000 * itTook[0] + itTook[1] / 1000000.0); - }; - } - - var commentsProcessor = new CommentsProcessor( - 'keepSpecialComments' in options ? options.keepSpecialComments : '*', - options.keepBreaks, - lineBreak - ); - var expressionsProcessor = new ExpressionsProcessor(); - var freeTextProcessor = new FreeTextProcessor(); - var urlsProcessor = new UrlsProcessor(); - var importInliner = new ImportInliner(context); - - if (options.processImport) { - // inline all imports - replace(function inlineImports() { - data = importInliner.process(data, { - root: options.root || process.cwd(), - relativeTo: options.relativeTo - }); - }); - } - - replace(function escapeComments() { - data = commentsProcessor.escape(data); - }); - - // replace all escaped line breaks - replace(/\\(\r\n|\n)/mg, ''); - - // strip parentheses in urls if possible (no spaces inside) - replace(/url\((['"])([^\)]+)['"]\)/g, function(match, quote, url) { - var unsafeDataURI = url.indexOf('data:') === 0 && url.match(/data:\w+\/[^;]+;base64,/) === null; - if (url.match(/[ \t]/g) !== null || unsafeDataURI) - return 'url(' + quote + url + quote + ')'; - else - return 'url(' + url + ')'; - }); - - // strip parentheses in animation & font names - replace(/(animation|animation\-name|font|font\-family):([^;}]+)/g, function(match, propertyName, def) { - return propertyName + ':' + def.replace(/['"]([a-zA-Z][a-zA-Z\d\-_]+)['"]/g, '$1'); - }); - - // strip parentheses in @keyframes - replace(/@(\-moz\-|\-o\-|\-webkit\-)?keyframes ([^{]+)/g, function(match, prefix, name) { - prefix = prefix || ''; - return '@' + prefix + 'keyframes ' + (name.indexOf(' ') > -1 ? name : name.replace(/['"]/g, '')); - }); - - // IE shorter filters, but only if single (IE 7 issue) - replace(/progid:DXImageTransform\.Microsoft\.(Alpha|Chroma)(\([^\)]+\))([;}'"])/g, function(match, filter, args, suffix) { - return filter.toLowerCase() + args + suffix; - }); - - replace(function escapeExpressions() { - data = expressionsProcessor.escape(data); - }); - - // strip parentheses in attribute values - replace(/\[([^\]]+)\]/g, function(match, content) { - var eqIndex = content.indexOf('='); - var singleQuoteIndex = content.indexOf('\''); - var doubleQuoteIndex = content.indexOf('"'); - if (eqIndex < 0 && singleQuoteIndex < 0 && doubleQuoteIndex < 0) - return match; - if (singleQuoteIndex === 0 || doubleQuoteIndex === 0) - return match; - - var key = content.substring(0, eqIndex); - var value = content.substring(eqIndex + 1, content.length); - - if (/^['"](?:[a-zA-Z][a-zA-Z\d\-_]+)['"]$/.test(value)) - return '[' + key + '=' + value.substring(1, value.length - 1) + ']'; - else - return match; - }); - - replace(function escapeFreeText() { - data = freeTextProcessor.escape(data); - }); - - replace(function escapeUrls() { - data = urlsProcessor.escape(data); - }); - - // line breaks - replace(/[\r]?\n/g, ' '); - - // multiple whitespace - replace(/[\t ]+/g, ' '); - - // multiple semicolons (with optional whitespace) - replace(/;[ ]?;+/g, ';'); - - // multiple line breaks to one - replace(/ (?:\r\n|\n)/g, lineBreak); - replace(/(?:\r\n|\n)+/g, lineBreak); - - // remove spaces around selectors - replace(/ ([+~>]) /g, '$1'); - - // remove extra spaces inside content - replace(/([!\(\{\}:;=,\n]) /g, '$1'); - replace(/ ([!\)\{\};=,\n])/g, '$1'); - replace(/(?:\r\n|\n)\}/g, '}'); - replace(/([\{;,])(?:\r\n|\n)/g, '$1'); - replace(/ :([^\{\};]+)([;}])/g, ':$1$2'); - - // restore spaces inside IE filters (IE 7 issue) - replace(/progid:[^(]+\(([^\)]+)/g, function(match) { - return match.replace(/,/g, ', '); - }); - - // trailing semicolons - replace(/;\}/g, '}'); - - replace(function hsl2Hex() { - data = new ColorHSLToHex(data).process(); - }); - - replace(function rgb2Hex() { - data = new ColorRGBToHex(data).process(); - }); - - replace(function longToShortHex() { - data = new ColorLongToShortHex(data).process(); - }); - - replace(function shortenColors() { - data = new ColorShortener(data).process(); - }); - - // replace font weight with numerical value - replace(/(font\-weight|font):(normal|bold)([ ;\}!])(\w*)/g, function(match, property, weight, suffix, next) { - if (suffix == ' ' && next.length > 0 && !/[.\d]/.test(next)) - return match; - - if (weight == 'normal') - return property + ':400' + suffix + next; - else if (weight == 'bold') - return property + ':700' + suffix + next; - else - return match; - }); - - // zero + unit to zero - replace(/(\s|:|,)0(?:px|em|ex|cm|mm|in|pt|pc|%)/g, '$1' + '0'); - replace(/rect\(0(?:px|em|ex|cm|mm|in|pt|pc|%)/g, 'rect(0'); - - // fraction zeros removal - replace(/\.([1-9]*)0+(\D)/g, function(match, nonZeroPart, suffix) { - return (nonZeroPart ? '.' : '') + nonZeroPart + suffix; - }); - - // restore 0% in hsl/hsla - replace(/(hsl|hsla)\(([^\)]+)\)/g, function(match, colorFunction, colorDef) { - var tokens = colorDef.split(','); - if (tokens[1] == '0') - tokens[1] = '0%'; - if (tokens[2] == '0') - tokens[2] = '0%'; - return colorFunction + '(' + tokens.join(',') + ')'; - }); - - // none to 0 - replace(/(border|border-top|border-right|border-bottom|border-left|outline):none/g, '$1:0'); - - // background:none to background:0 0 - replace(/background:(?:none|transparent)([;}])/g, 'background:0 0$1'); - - // multiple zeros into one - replace(/box-shadow:0 0 0 0([^\.])/g, 'box-shadow:0 0$1'); - replace(/:0 0 0 0([^\.])/g, ':0$1'); - replace(/([: ,=\-])0\.(\d)/g, '$1.$2'); - - replace(function shorthandNotations() { - data = new ShorthandNotations(data).process(); - }); - - // restore rect(...) zeros syntax for 4 zeros - replace(/rect\(\s?0(\s|,)0[ ,]0[ ,]0\s?\)/g, 'rect(0$10$10$10)'); - - // remove universal selector when not needed (*#id, *.class etc) - replace(/\*([\.#:\[])/g, '$1'); - - // Restore spaces inside calc back - replace(/calc\([^\}]+\}/g, function(match) { - return match.replace(/\+/g, ' + '); - }); - - if (options.noAdvanced) { - if (options.keepBreaks) - replace(/\}/g, '}' + lineBreak); - } else { - replace(function optimizeSelectors() { - data = new SelectorsOptimizer(data, context, { - keepBreaks: options.keepBreaks, - lineBreak: lineBreak, - selectorsMergeMode: options.selectorsMergeMode - }).process(); - }); - } - - replace(function restoreUrls() { - data = urlsProcessor.restore(data); - }); - replace(function rebaseUrls() { - data = options.noRebase ? data : new UrlRebase(options, context).process(data); - }); - replace(function restoreFreeText() { - data = freeTextProcessor.restore(data); - }); - replace(function restoreComments() { - data = commentsProcessor.restore(data); - }); - replace(function restoreExpressions() { - data = expressionsProcessor.restore(data); - }); - - // move first charset to the beginning - replace(function moveCharset() { - // get first charset in stylesheet - var match = data.match(/@charset [^;]+;/); - var firstCharset = match ? match[0] : null; - if (!firstCharset) - return; - - // reattach first charset and remove all subsequent - data = firstCharset + - (options.keepBreaks ? lineBreak : '') + - data.replace(new RegExp('@charset [^;]+;(' + lineBreak + ')?', 'g'), '').trim(); - }); - - replace(function removeEmptySelectors() { - data = new EmptyRemoval(data).process(); - }); - - // trim spaces at beginning and end - data = data.trim(); - - if (options.debug) { - var elapsed = process.hrtime(startedAt); - stats.timeSpent = ~~(elapsed[0] * 1e3 + elapsed[1] / 1e6); - stats.efficiency = 1 - data.length / stats.originalSize; - stats.minifiedSize = data.length; - } - - return data; - }; - - return { - errors: context.errors, - lineBreak: lineBreak, - options: options, - minify: minify, - stats: stats, - warnings: context.warnings - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/hsl-to-hex.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/hsl-to-hex.js deleted file mode 100644 index 6bb50312..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/hsl-to-hex.js +++ /dev/null @@ -1,64 +0,0 @@ -module.exports = function HSLToHex(data) { - // HSL to RGB converter. Both methods adapted from: - // http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript - var hslToRgb = function(h, s, l) { - var r, g, b; - - // normalize hue orientation b/w 0 and 360 degrees - h = h % 360; - if (h < 0) - h += 360; - h = ~~h / 360; - - if (s < 0) - s = 0; - else if (s > 100) - s = 100; - s = ~~s / 100; - - if (l < 0) - l = 0; - else if (l > 100) - l = 100; - l = ~~l / 100; - - if (s === 0) { - r = g = b = l; // achromatic - } else { - var q = l < 0.5 ? - l * (1 + s) : - l + s - l * s; - var p = 2 * l - q; - r = hueToRgb(p, q, h + 1/3); - g = hueToRgb(p, q, h); - b = hueToRgb(p, q, h - 1/3); - } - - return [~~(r * 255), ~~(g * 255), ~~(b * 255)]; - }; - - var hueToRgb = function(p, q, t) { - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1/6) return p + (q - p) * 6 * t; - if (t < 1/2) return q; - if (t < 2/3) return p + (q - p) * (2/3 - t) * 6; - return p; - }; - - return { - process: function() { - return data.replace(/hsl\((-?\d+),(-?\d+)%?,(-?\d+)%?\)/g, function(match, hue, saturation, lightness) { - var asRgb = hslToRgb(hue, saturation, lightness); - var redAsHex = asRgb[0].toString(16); - var greenAsHex = asRgb[1].toString(16); - var blueAsHex = asRgb[2].toString(16); - - return '#' + - ((redAsHex.length == 1 ? '0' : '') + redAsHex) + - ((greenAsHex.length == 1 ? '0' : '') + greenAsHex) + - ((blueAsHex.length == 1 ? '0' : '') + blueAsHex); - }); - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/long-to-short-hex.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/long-to-short-hex.js deleted file mode 100644 index 87fa31b2..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/long-to-short-hex.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = function LongToShortHex(data) { - return { - process: function() { - return data.replace(/([,: \(])#([0-9a-f]{6})/gi, function(match, prefix, color) { - if (color[0] == color[1] && color[2] == color[3] && color[4] == color[5]) - return prefix + '#' + color[0] + color[2] + color[4]; - else - return prefix + '#' + color; - }); - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/rgb-to-hex.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/rgb-to-hex.js deleted file mode 100644 index d235289b..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/rgb-to-hex.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = function RGBToHex(data) { - return { - process: function() { - return data.replace(/rgb\((\d+),(\d+),(\d+)\)/g, function(match, red, green, blue) { - var redAsHex = parseInt(red, 10).toString(16); - var greenAsHex = parseInt(green, 10).toString(16); - var blueAsHex = parseInt(blue, 10).toString(16); - - return '#' + - ((redAsHex.length == 1 ? '0' : '') + redAsHex) + - ((greenAsHex.length == 1 ? '0' : '') + greenAsHex) + - ((blueAsHex.length == 1 ? '0' : '') + blueAsHex); - }); - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/shortener.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/shortener.js deleted file mode 100644 index 7476f09b..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/colors/shortener.js +++ /dev/null @@ -1,174 +0,0 @@ -module.exports = function Shortener(data) { - var COLORS = { - aliceblue: '#f0f8ff', - antiquewhite: '#faebd7', - aqua: '#0ff', - aquamarine: '#7fffd4', - azure: '#f0ffff', - beige: '#f5f5dc', - bisque: '#ffe4c4', - black: '#000', - blanchedalmond: '#ffebcd', - blue: '#00f', - blueviolet: '#8a2be2', - brown: '#a52a2a', - burlywood: '#deb887', - cadetblue: '#5f9ea0', - chartreuse: '#7fff00', - chocolate: '#d2691e', - coral: '#ff7f50', - cornflowerblue: '#6495ed', - cornsilk: '#fff8dc', - crimson: '#dc143c', - cyan: '#0ff', - darkblue: '#00008b', - darkcyan: '#008b8b', - darkgoldenrod: '#b8860b', - darkgray: '#a9a9a9', - darkgreen: '#006400', - darkkhaki: '#bdb76b', - darkmagenta: '#8b008b', - darkolivegreen: '#556b2f', - darkorange: '#ff8c00', - darkorchid: '#9932cc', - darkred: '#8b0000', - darksalmon: '#e9967a', - darkseagreen: '#8fbc8f', - darkslateblue: '#483d8b', - darkslategray: '#2f4f4f', - darkturquoise: '#00ced1', - darkviolet: '#9400d3', - deeppink: '#ff1493', - deepskyblue: '#00bfff', - dimgray: '#696969', - dodgerblue: '#1e90ff', - firebrick: '#b22222', - floralwhite: '#fffaf0', - forestgreen: '#228b22', - fuchsia: '#f0f', - gainsboro: '#dcdcdc', - ghostwhite: '#f8f8ff', - gold: '#ffd700', - goldenrod: '#daa520', - gray: '#808080', - green: '#008000', - greenyellow: '#adff2f', - honeydew: '#f0fff0', - hotpink: '#ff69b4', - indianred: '#cd5c5c', - indigo: '#4b0082', - ivory: '#fffff0', - khaki: '#f0e68c', - lavender: '#e6e6fa', - lavenderblush: '#fff0f5', - lawngreen: '#7cfc00', - lemonchiffon: '#fffacd', - lightblue: '#add8e6', - lightcoral: '#f08080', - lightcyan: '#e0ffff', - lightgoldenrodyellow: '#fafad2', - lightgray: '#d3d3d3', - lightgreen: '#90ee90', - lightpink: '#ffb6c1', - lightsalmon: '#ffa07a', - lightseagreen: '#20b2aa', - lightskyblue: '#87cefa', - lightslategray: '#778899', - lightsteelblue: '#b0c4de', - lightyellow: '#ffffe0', - lime: '#0f0', - limegreen: '#32cd32', - linen: '#faf0e6', - magenta: '#ff00ff', - maroon: '#800000', - mediumaquamarine: '#66cdaa', - mediumblue: '#0000cd', - mediumorchid: '#ba55d3', - mediumpurple: '#9370db', - mediumseagreen: '#3cb371', - mediumslateblue: '#7b68ee', - mediumspringgreen: '#00fa9a', - mediumturquoise: '#48d1cc', - mediumvioletred: '#c71585', - midnightblue: '#191970', - mintcream: '#f5fffa', - mistyrose: '#ffe4e1', - moccasin: '#ffe4b5', - navajowhite: '#ffdead', - navy: '#000080', - oldlace: '#fdf5e6', - olive: '#808000', - olivedrab: '#6b8e23', - orange: '#ffa500', - orangered: '#ff4500', - orchid: '#da70d6', - palegoldenrod: '#eee8aa', - palegreen: '#98fb98', - paleturquoise: '#afeeee', - palevioletred: '#db7093', - papayawhip: '#ffefd5', - peachpuff: '#ffdab9', - peru: '#cd853f', - pink: '#ffc0cb', - plum: '#dda0dd', - powderblue: '#b0e0e6', - purple: '#800080', - red: '#f00', - rosybrown: '#bc8f8f', - royalblue: '#4169e1', - saddlebrown: '#8b4513', - salmon: '#fa8072', - sandybrown: '#f4a460', - seagreen: '#2e8b57', - seashell: '#fff5ee', - sienna: '#a0522d', - silver: '#c0c0c0', - skyblue: '#87ceeb', - slateblue: '#6a5acd', - slategray: '#708090', - snow: '#fffafa', - springgreen: '#00ff7f', - steelblue: '#4682b4', - tan: '#d2b48c', - teal: '#008080', - thistle: '#d8bfd8', - tomato: '#ff6347', - turquoise: '#40e0d0', - violet: '#ee82ee', - wheat: '#f5deb3', - white: '#fff', - whitesmoke: '#f5f5f5', - yellow: '#ff0', - yellowgreen: '#9acd32' - }; - - var toHex = {}; - var toName = {}; - - for (var name in COLORS) { - var color = COLORS[name]; - if (name.length < color.length) - toName[color] = name; - else - toHex[name] = color; - } - - return { - toHex: toHex, - toName: toName, - - // replace color name with hex values if shorter (or the other way around) - process: function() { - [toHex, toName].forEach(function(conversion) { - var pattern = '(' + Object.keys(conversion).join('|') + ')'; - var colorSwitcher = function(match, prefix, colorValue, suffix) { - return prefix + conversion[colorValue.toLowerCase()] + suffix; - }; - data = data.replace(new RegExp('([ :,\\(])' + pattern + '([;\\}!\\) ])', 'ig'), colorSwitcher); - data = data.replace(new RegExp('(,)' + pattern + '(,)', 'ig'), colorSwitcher); - }); - - return data; - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/images/url-rebase.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/images/url-rebase.js deleted file mode 100644 index 5b249544..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/images/url-rebase.js +++ /dev/null @@ -1,34 +0,0 @@ -var path = require('path'); - -var UrlRewriter = require('./url-rewriter'); - -module.exports = function UrlRebase(options, context) { - var process = function(data) { - var rebaseOpts = { - absolute: !!options.root, - relative: !options.root && !!options.target, - fromBase: options.relativeTo - }; - - if (!rebaseOpts.absolute && !rebaseOpts.relative) - return data; - - if (rebaseOpts.absolute && !!options.target) - context.warnings.push('Both \'root\' and output file given so rebasing URLs as absolute paths'); - - if (rebaseOpts.absolute) - rebaseOpts.toBase = path.resolve(options.root); - - if (rebaseOpts.relative) - rebaseOpts.toBase = path.resolve(path.dirname(options.target)); - - if (!rebaseOpts.fromBase || !rebaseOpts.toBase) - return data; - - return UrlRewriter.process(data, rebaseOpts); - }; - - return { - process: process - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/images/url-rewriter.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/images/url-rewriter.js deleted file mode 100644 index b41056fd..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/images/url-rewriter.js +++ /dev/null @@ -1,53 +0,0 @@ -var path = require('path'); - -module.exports = { - process: function(data, options) { - var tempData = []; - var nextStart = 0; - var nextEnd = 0; - var cursor = 0; - - for (; nextEnd < data.length; ) { - nextStart = data.indexOf('url(', nextEnd); - if (nextStart == -1) - break; - - nextEnd = data.indexOf(')', nextStart + 4); - if (nextEnd == -1) - break; - - tempData.push(data.substring(cursor, nextStart)); - var url = data.substring(nextStart + 4, nextEnd).replace(/['"]/g, ''); - tempData.push('url(' + this._rebased(url, options) + ')'); - cursor = nextEnd + 1; - } - - return tempData.length > 0 ? - tempData.join('') + data.substring(cursor, data.length) : - data; - }, - - _rebased: function(url, options) { - var specialUrl = url[0] == '/' || - url.substring(url.length - 4) == '.css' || - url.indexOf('data:') === 0 || - /^https?:\/\//.exec(url) !== null || - /__\w+__/.exec(url) !== null; - var rebased; - - if (specialUrl) - return url; - - if (options.absolute) { - rebased = path - .resolve(path.join(options.fromBase, url)) - .replace(options.toBase, ''); - } else { - rebased = path.relative(options.toBase, path.join(options.fromBase, url)); - } - - return process.platform == 'win32' ? - rebased.replace(/\\/g, '/') : - rebased; - } -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/imports/inliner.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/imports/inliner.js deleted file mode 100644 index 9180e3c7..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/imports/inliner.js +++ /dev/null @@ -1,152 +0,0 @@ -var fs = require('fs'); -var path = require('path'); - -var UrlRewriter = require('../images/url-rewriter'); - -module.exports = function Inliner(context) { - var process = function(data, options) { - var tempData = []; - var nextStart = 0; - var nextEnd = 0; - var cursor = 0; - var isComment = commentScanner(data); - - options.relativeTo = options.relativeTo || options.root; - options._baseRelativeTo = options._baseRelativeTo || options.relativeTo; - options.visited = options.visited || []; - - for (; nextEnd < data.length; ) { - nextStart = data.indexOf('@import', cursor); - if (nextStart == -1) - break; - - if (isComment(nextStart)) { - cursor = nextStart + 1; - continue; - } - - nextEnd = data.indexOf(';', nextStart); - if (nextEnd == -1) { - tempData.push(''); - cursor = data.length; - break; - } - - tempData.push(data.substring(cursor, nextStart)); - tempData.push(inlinedFile(data, nextStart, nextEnd, options)); - cursor = nextEnd + 1; - } - - return tempData.length > 0 ? - tempData.join('') + data.substring(cursor, data.length) : - data; - }; - - var commentScanner = function(data) { - var commentRegex = /(\/\*(?!\*\/)[\s\S]*?\*\/)/; - var lastStartIndex = 0; - var lastEndIndex = 0; - var noComments = false; - - // test whether an index is located within a comment - var scanner = function(idx) { - var comment; - var localStartIndex = 0; - var localEndIndex = 0; - var globalStartIndex = 0; - var globalEndIndex = 0; - - // return if we know there are no more comments - if (noComments) - return false; - - // idx can be still within last matched comment (many @import statements inside one comment) - if (idx > lastStartIndex && idx < lastEndIndex) - return true; - - comment = data.match(commentRegex); - - if (!comment) { - noComments = true; - return false; - } - - // get the indexes relative to the current data chunk - lastStartIndex = localStartIndex = comment.index; - localEndIndex = localStartIndex + comment[0].length; - - // calculate the indexes relative to the full original data - globalEndIndex = localEndIndex + lastEndIndex; - globalStartIndex = globalEndIndex - comment[0].length; - - // chop off data up to and including current comment block - data = data.substring(localEndIndex); - lastEndIndex = globalEndIndex; - - // re-run scan if comment ended before the idx - if (globalEndIndex < idx) - return scanner(idx); - - return globalEndIndex > idx && idx > globalStartIndex; - }; - - return scanner; - }; - - var inlinedFile = function(data, nextStart, nextEnd, options) { - var strippedImport = data - .substring(data.indexOf(' ', nextStart) + 1, nextEnd) - .replace(/^url\(/, '') - .replace(/['"]/g, ''); - - var separatorIndex = strippedImport.indexOf(' '); - var importedFile = strippedImport - .substring(0, separatorIndex > 0 ? separatorIndex : strippedImport.length) - .replace(')', ''); - var mediaQuery = strippedImport - .substring(importedFile.length + 1) - .trim(); - - if (/^(http|https):\/\//.test(importedFile) || /^\/\//.test(importedFile)) - return '@import url(' + importedFile + ')' + (mediaQuery.length > 0 ? ' ' + mediaQuery : '') + ';'; - - var relativeTo = importedFile[0] == '/' ? - options.root : - options.relativeTo; - - var fullPath = path.resolve(path.join(relativeTo, importedFile)); - - if (!fs.existsSync(fullPath) || !fs.statSync(fullPath).isFile()) { - context.errors.push('Broken @import declaration of "' + importedFile + '"'); - return ''; - } - - if (options.visited.indexOf(fullPath) != -1) - return ''; - - options.visited.push(fullPath); - - var importedData = fs.readFileSync(fullPath, 'utf8'); - var importRelativeTo = path.dirname(fullPath); - importedData = UrlRewriter.process(importedData, { - relative: true, - fromBase: importRelativeTo, - toBase: options._baseRelativeTo - }); - - var inlinedData = process(importedData, { - root: options.root, - relativeTo: importRelativeTo, - _baseRelativeTo: options.baseRelativeTo, - visited: options.visited - }); - return mediaQuery.length > 0 ? - '@media ' + mediaQuery + '{' + inlinedData + '}' : - inlinedData; - }; - - return { - // Inlines all imports taking care of repetitions, unknown files, and circular dependencies - process: process - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/properties/optimizer.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/properties/optimizer.js deleted file mode 100644 index 6106f379..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/properties/optimizer.js +++ /dev/null @@ -1,228 +0,0 @@ -module.exports = function Optimizer() { - var overridable = { - 'animation-delay': ['animation'], - 'animation-direction': ['animation'], - 'animation-duration': ['animation'], - 'animation-fill-mode': ['animation'], - 'animation-iteration-count': ['animation'], - 'animation-name': ['animation'], - 'animation-play-state': ['animation'], - 'animation-timing-function': ['animation'], - '-moz-animation-delay': ['-moz-animation'], - '-moz-animation-direction': ['-moz-animation'], - '-moz-animation-duration': ['-moz-animation'], - '-moz-animation-fill-mode': ['-moz-animation'], - '-moz-animation-iteration-count': ['-moz-animation'], - '-moz-animation-name': ['-moz-animation'], - '-moz-animation-play-state': ['-moz-animation'], - '-moz-animation-timing-function': ['-moz-animation'], - '-o-animation-delay': ['-o-animation'], - '-o-animation-direction': ['-o-animation'], - '-o-animation-duration': ['-o-animation'], - '-o-animation-fill-mode': ['-o-animation'], - '-o-animation-iteration-count': ['-o-animation'], - '-o-animation-name': ['-o-animation'], - '-o-animation-play-state': ['-o-animation'], - '-o-animation-timing-function': ['-o-animation'], - '-webkit-animation-delay': ['-webkit-animation'], - '-webkit-animation-direction': ['-webkit-animation'], - '-webkit-animation-duration': ['-webkit-animation'], - '-webkit-animation-fill-mode': ['-webkit-animation'], - '-webkit-animation-iteration-count': ['-webkit-animation'], - '-webkit-animation-name': ['-webkit-animation'], - '-webkit-animation-play-state': ['-webkit-animation'], - '-webkit-animation-timing-function': ['-webkit-animation'], - 'background-attachment': ['background'], - 'background-clip': ['background'], - 'background-color': ['background'], - 'background-image': ['background'], - 'background-origin': ['background'], - 'background-position': ['background'], - 'background-repeat': ['background'], - 'background-size': ['background'], - 'border-color': ['border'], - 'border-style': ['border'], - 'border-width': ['border'], - 'border-bottom': ['border'], - 'border-bottom-color': ['border-bottom', 'border-color', 'border'], - 'border-bottom-style': ['border-bottom', 'border-style', 'border'], - 'border-bottom-width': ['border-bottom', 'border-width', 'border'], - 'border-left': ['border'], - 'border-left-color': ['border-left', 'border-color', 'border'], - 'border-left-style': ['border-left', 'border-style', 'border'], - 'border-left-width': ['border-left', 'border-width', 'border'], - 'border-right': ['border'], - 'border-right-color': ['border-right', 'border-color', 'border'], - 'border-right-style': ['border-right', 'border-style', 'border'], - 'border-right-width': ['border-right', 'border-width', 'border'], - 'border-top': ['border'], - 'border-top-color': ['border-top', 'border-color', 'border'], - 'border-top-style': ['border-top', 'border-style', 'border'], - 'border-top-width': ['border-top', 'border-width', 'border'], - 'font-family': ['font'], - 'font-size': ['font'], - 'font-style': ['font'], - 'font-variant': ['font'], - 'font-weight': ['font'], - 'list-style-image': ['list'], - 'list-style-position': ['list'], - 'list-style-type': ['list'], - 'margin-bottom': ['margin'], - 'margin-left': ['margin'], - 'margin-right': ['margin'], - 'margin-top': ['margin'], - 'outline-color': ['outline'], - 'outline-style': ['outline'], - 'outline-width': ['outline'], - 'padding-bottom': ['padding'], - 'padding-left': ['padding'], - 'padding-right': ['padding'], - 'padding-top': ['padding'], - 'transition-delay': ['transition'], - 'transition-duration': ['transition'], - 'transition-property': ['transition'], - 'transition-timing-function': ['transition'], - '-moz-transition-delay': ['-moz-transition'], - '-moz-transition-duration': ['-moz-transition'], - '-moz-transition-property': ['-moz-transition'], - '-moz-transition-timing-function': ['-moz-transition'], - '-o-transition-delay': ['-o-transition'], - '-o-transition-duration': ['-o-transition'], - '-o-transition-property': ['-o-transition'], - '-o-transition-timing-function': ['-o-transition'], - '-webkit-transition-delay': ['-webkit-transition'], - '-webkit-transition-duration': ['-webkit-transition'], - '-webkit-transition-property': ['-webkit-transition'], - '-webkit-transition-timing-function': ['-webkit-transition'] - }; - - var overrides = {}; - for (var granular in overridable) { - for (var i = 0; i < overridable[granular].length; i++) { - var coarse = overridable[granular][i]; - var list = overrides[coarse]; - - if (list) - list.push(granular); - else - overrides[coarse] = [granular]; - } - } - - var tokenize = function(body) { - var tokens = body.split(';'); - var keyValues = []; - - for (var i = 0, l = tokens.length; i < l; i++) { - var token = tokens[i]; - if (token === '') - continue; - - var firstColon = token.indexOf(':'); - keyValues.push([ - token.substring(0, firstColon), - token.substring(firstColon + 1), - token.indexOf('!important') > -1 - ]); - } - - return keyValues; - }; - - var optimize = function(tokens, allowAdjacent) { - var merged = []; - var properties = []; - var lastProperty = null; - var rescanTrigger = {}; - - var removeOverridenBy = function(property, isImportant) { - var overrided = overrides[property]; - for (var i = 0, l = overrided.length; i < l; i++) { - for (var j = 0; j < properties.length; j++) { - if (properties[j] != overrided[i] || (merged[j][2] && !isImportant)) - continue; - - merged.splice(j, 1); - properties.splice(j, 1); - j -= 1; - } - } - }; - - var mergeablePosition = function(position) { - if (allowAdjacent === false || allowAdjacent === true) - return allowAdjacent; - - return allowAdjacent.indexOf(position) > -1; - }; - - tokensLoop: - for (var i = 0, l = tokens.length; i < l; i++) { - var token = tokens[i]; - var property = token[0]; - var isImportant = token[2]; - var _property = (property == '-ms-filter' || property == 'filter') ? - (lastProperty == 'background' || lastProperty == 'background-image' ? lastProperty : property) : - property; - var toOverridePosition = 0; - - // comment is necessary - we assume that if two properties are one after another - // then it is intentional way of redefining property which may not be widely supported - // e.g. a{display:inline-block;display:-moz-inline-box} - // however if `mergeablePosition` yields true then the rule does not apply - // (e.g merging two adjacent selectors: `a{display:block}a{display:block}`) - if (_property != lastProperty || mergeablePosition(i)) { - while (true) { - toOverridePosition = properties.indexOf(_property, toOverridePosition); - if (toOverridePosition == -1) - break; - - if (merged[toOverridePosition][2] && !isImportant) - continue tokensLoop; - - merged.splice(toOverridePosition, 1); - properties.splice(toOverridePosition, 1); - } - } - - merged.push(token); - properties.push(_property); - - // certain properties (see values of `overridable`) should trigger removal of - // more granular properties (see keys of `overridable`) - if (rescanTrigger[_property]) - removeOverridenBy(_property, isImportant); - - // add rescan triggers - if certain property appears later in the list a rescan needs - // to be triggered, e.g 'border-top' triggers a rescan after 'border-top-width' and - // 'border-top-color' as they can be removed - for (var j = 0, list = overridable[_property] || [], m = list.length; j < m; j++) - rescanTrigger[list[j]] = true; - - lastProperty = _property; - } - - return merged; - }; - - var rebuild = function(tokens) { - var flat = []; - - for (var i = 0, l = tokens.length; i < l; i++) { - flat.push(tokens[i][0] + ':' + tokens[i][1]); - } - - return flat.join(';'); - }; - - return { - process: function(body, allowAdjacent) { - var tokens = tokenize(body); - if (tokens.length < 2) - return body; - - var optimized = optimize(tokens, allowAdjacent); - return rebuild(optimized); - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/properties/shorthand-notations.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/properties/shorthand-notations.js deleted file mode 100644 index f29b2d36..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/properties/shorthand-notations.js +++ /dev/null @@ -1,50 +0,0 @@ -module.exports = function ShorthandNotations(data) { - // shorthand notations - var shorthandRegex = function(repeats, hasSuffix) { - var pattern = '(padding|margin|border\\-width|border\\-color|border\\-style|border\\-radius):'; - for (var i = 0; i < repeats; i++) - pattern += '([\\d\\w\\.%#\\(\\),]+)' + (i < repeats - 1 ? ' ' : ''); - return new RegExp(pattern + (hasSuffix ? '([;}])' : ''), 'g'); - }; - - var from4Values = function() { - return data.replace(shorthandRegex(4), function(match, property, size1, size2, size3, size4) { - if (size1 === size2 && size1 === size3 && size1 === size4) - return property + ':' + size1; - else if (size1 === size3 && size2 === size4) - return property + ':' + size1 + ' ' + size2; - else if (size2 === size4) - return property + ':' + size1 + ' ' + size2 + ' ' + size3; - else - return match; - }); - }; - - var from3Values = function() { - return data.replace(shorthandRegex(3, true), function(match, property, size1, size2, size3, suffix) { - if (size1 === size2 && size1 === size3) - return property + ':' + size1 + suffix; - else if (size1 === size3) - return property + ':' + size1 + ' ' + size2 + suffix; - else - return match; - }); - }; - - var from2Values = function() { - return data.replace(shorthandRegex(2, true), function(match, property, size1, size2, suffix) { - if (size1 === size2) - return property + ':' + size1 + suffix; - else - return match; - }); - }; - - return { - process: function() { - data = from4Values(); - data = from3Values(); - return from2Values(); - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/selectors/empty-removal.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/selectors/empty-removal.js deleted file mode 100644 index ee193c16..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/selectors/empty-removal.js +++ /dev/null @@ -1,30 +0,0 @@ -module.exports = function EmptyRemoval(data) { - var stripEmpty = function(cssData) { - var tempData = []; - var nextEmpty = 0; - var cursor = 0; - - for (; nextEmpty < cssData.length; ) { - nextEmpty = cssData.indexOf('{}', cursor); - if (nextEmpty == -1) - break; - - var startsAt = nextEmpty - 1; - while (cssData[startsAt] && cssData[startsAt] != '}' && cssData[startsAt] != '{') - startsAt--; - - tempData.push(cssData.substring(cursor, startsAt + 1)); - cursor = nextEmpty + 2; - } - - return tempData.length > 0 ? - stripEmpty(tempData.join('') + cssData.substring(cursor, cssData.length)) : - cssData; - }; - - return { - process: function() { - return stripEmpty(data); - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/selectors/optimizer.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/selectors/optimizer.js deleted file mode 100644 index 7dbfc578..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/selectors/optimizer.js +++ /dev/null @@ -1,221 +0,0 @@ -var Tokenizer = require('./tokenizer'); -var PropertyOptimizer = require('../properties/optimizer'); - -module.exports = function Optimizer(data, context, options) { - var specialSelectors = { - '*': /\-(moz|ms|o|webkit)\-/, - 'ie8': /(\-moz\-|\-ms\-|\-o\-|\-webkit\-|:not|:target|:visited|:empty|:first\-of|:last|:nth|:only|:root)/ - }; - - var propertyOptimizer = new PropertyOptimizer(); - - var cleanUpSelector = function(selectors) { - var plain = []; - selectors = selectors.split(','); - - for (var i = 0, l = selectors.length; i < l; i++) { - var sel = selectors[i]; - - if (plain.indexOf(sel) == -1) - plain.push(sel); - } - - return plain.sort().join(','); - }; - - var isSpecial = function(selector) { - return specialSelectors[options.selectorsMergeMode || '*'].test(selector); - }; - - var removeDuplicates = function(tokens) { - var matched = {}; - var forRemoval = []; - - for (var i = 0, l = tokens.length; i < l; i++) { - if (typeof(tokens[i]) == 'string' || tokens[i].block) - continue; - - var selector = tokens[i].selector; - var body = tokens[i].body; - var id = body + '@' + selector; - var alreadyMatched = matched[id]; - - if (alreadyMatched) { - forRemoval.push(alreadyMatched[alreadyMatched.length - 1]); - alreadyMatched.push(i); - } else { - matched[id] = [i]; - } - } - - forRemoval = forRemoval.sort(function(a, b) { return a > b ? 1 : -1; }); - for (var j = 0, n = forRemoval.length; j < n; j++) { - tokens.splice(forRemoval[j] - j, 1); - } - }; - - var mergeAdjacent = function(tokens) { - var forRemoval = []; - var lastToken = { selector: null, body: null }; - - for (var i = 0, l = tokens.length; i < l; i++) { - var token = tokens[i]; - - if (typeof(token) == 'string' || token.block) - continue; - - if (token.selector == lastToken.selector) { - var joinAt = [lastToken.body.split(';').length]; - lastToken.body = propertyOptimizer.process(lastToken.body + ';' + token.body, joinAt); - forRemoval.push(i); - } else if (token.body == lastToken.body && !isSpecial(token.selector) && !isSpecial(lastToken.selector)) { - lastToken.selector = cleanUpSelector(lastToken.selector + ',' + token.selector); - forRemoval.push(i); - } else { - lastToken = token; - } - } - - for (var j = 0, m = forRemoval.length; j < m; j++) { - tokens.splice(forRemoval[j] - j, 1); - } - }; - - var reduceNonAdjacent = function(tokens) { - var matched = {}; - var matchedMoreThanOnce = []; - var partiallyReduced = []; - var token, selector, selectors; - var removeEmpty = function(value) { - return value.length > 0 ? value : ''; - }; - - for (var i = 0, l = tokens.length; i < l; i++) { - token = tokens[i]; - selector = token.selector; - - if (typeof(token) == 'string' || token.block) - continue; - - selectors = selector.split(','); - if (selectors.length > 1) - selectors.push(selector); - - for (var j = 0, m = selectors.length; j < m; j++) { - var sel = selectors[j]; - var alreadyMatched = matched[sel]; - if (alreadyMatched) { - if (alreadyMatched.length == 1) - matchedMoreThanOnce.push(sel); - alreadyMatched.push(i); - } else { - matched[sel] = [i]; - } - } - } - - matchedMoreThanOnce.forEach(function(selector) { - var matchPositions = matched[selector]; - var bodies = []; - var joinsAt = []; - for (var j = 0, m = matchPositions.length; j < m; j++) { - var body = tokens[matchPositions[j]].body; - bodies.push(body); - joinsAt.push((joinsAt[j - 1] || 0) + body.split(';').length); - } - - var optimizedBody = propertyOptimizer.process(bodies.join(';'), joinsAt); - var optimizedTokens = optimizedBody.split(';'); - - var k = optimizedTokens.length - 1; - var currentMatch = matchPositions.length - 1; - - while (currentMatch >= 0) { - if (bodies[currentMatch].indexOf(optimizedTokens[k]) > -1 && k > -1) { - k -= 1; - continue; - } - - var tokenIndex = matchPositions[currentMatch]; - var token = tokens[tokenIndex]; - var reducedBody = optimizedTokens - .splice(k + 1) - .filter(removeEmpty) - .join(';'); - - if (token.selector == selector) { - token.body = reducedBody; - } else { - token._partials = token._partials || []; - token._partials.push(reducedBody); - - if (partiallyReduced.indexOf(tokenIndex) == -1) - partiallyReduced.push(tokenIndex); - } - - currentMatch -= 1; - } - }); - - // process those tokens which were partially reduced - // i.e. at least one of token's selectors saw reduction - // if all selectors were reduced to same value we can override it - for (i = 0, l = partiallyReduced.length; i < l; i++) { - token = tokens[partiallyReduced[i]]; - selectors = token.selector.split(','); - - if (token._partials.length == selectors.length && token.body != token._partials[0]) { - var newBody = token._partials[0]; - for (var k = 1, n = token._partials.length; k < n; k++) { - if (token._partials[k] != newBody) - break; - } - - if (k == n) - token.body = newBody; - } - - delete token._partials; - } - }; - - var optimize = function(tokens) { - tokens = (Array.isArray(tokens) ? tokens : [tokens]); - for (var i = 0, l = tokens.length; i < l; i++) { - var token = tokens[i]; - - if (token.selector) { - token.selector = cleanUpSelector(token.selector); - token.body = propertyOptimizer.process(token.body, false); - } else if (token.block) { - optimize(token.body); - } - } - - removeDuplicates(tokens); - mergeAdjacent(tokens); - reduceNonAdjacent(tokens); - }; - - var rebuild = function(tokens) { - return (Array.isArray(tokens) ? tokens : [tokens]) - .map(function(token) { - if (typeof token == 'string') - return token; - - if (token.block) - return token.block + '{' + rebuild(token.body) + '}'; - else - return token.selector + '{' + token.body + '}'; - }) - .join(options.keepBreaks ? options.lineBreak : ''); - }; - - return { - process: function() { - var tokenized = new Tokenizer(data, context).process(); - optimize(tokenized); - return rebuild(tokenized); - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/selectors/tokenizer.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/selectors/tokenizer.js deleted file mode 100644 index e826efb0..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/selectors/tokenizer.js +++ /dev/null @@ -1,129 +0,0 @@ -module.exports = function Tokenizer(data, minifyContext) { - var flatBlock = /^@(font\-face|page|\-ms\-viewport|\-o\-viewport|viewport)/; - - var whatsNext = function(context) { - var cursor = context.cursor; - var mode = context.mode; - var closest; - - if (mode == 'body') { - closest = data.indexOf('}', cursor); - return closest > -1 ? - [closest, 'bodyEnd'] : - null; - } - - var nextSpecial = data.indexOf('@', cursor); - var nextEscape = mode == 'top' ? data.indexOf('__ESCAPED_COMMENT_CLEAN_CSS', cursor) : -1; - var nextBodyStart = data.indexOf('{', cursor); - var nextBodyEnd = data.indexOf('}', cursor); - - closest = nextSpecial; - if (closest == -1 || (nextEscape > -1 && nextEscape < closest)) - closest = nextEscape; - if (closest == -1 || (nextBodyStart > -1 && nextBodyStart < closest)) - closest = nextBodyStart; - if (closest == -1 || (nextBodyEnd > -1 && nextBodyEnd < closest)) - closest = nextBodyEnd; - - if (closest == -1) - return; - if (nextEscape === closest) - return [closest, 'escape']; - if (nextBodyStart === closest) - return [closest, 'bodyStart']; - if (nextBodyEnd === closest) - return [closest, 'bodyEnd']; - if (nextSpecial === closest) - return [closest, 'special']; - }; - - var tokenize = function(context) { - var tokenized = []; - - context = context || { cursor: 0, mode: 'top' }; - - while (true) { - var next = whatsNext(context); - if (!next) { - var whatsLeft = data.substring(context.cursor); - if (whatsLeft.length > 0) { - tokenized.push(whatsLeft); - context.cursor += whatsLeft.length; - } - break; - } - - var nextSpecial = next[0]; - var what = next[1]; - var nextEnd; - var oldMode; - - if (what == 'special') { - var fragment = data.substring(nextSpecial, context.cursor + '@font-face'.length + 1); - var isSingle = fragment.indexOf('@import') === 0 || fragment.indexOf('@charset') === 0; - if (isSingle) { - nextEnd = data.indexOf(';', nextSpecial + 1); - tokenized.push(data.substring(context.cursor, nextEnd + 1)); - - context.cursor = nextEnd + 1; - } else { - nextEnd = data.indexOf('{', nextSpecial + 1); - var block = data.substring(context.cursor, nextEnd).trim(); - - var isFlat = flatBlock.test(block); - oldMode = context.mode; - context.cursor = nextEnd + 1; - context.mode = isFlat ? 'body' : 'block'; - var specialBody = tokenize(context); - context.mode = oldMode; - - tokenized.push({ block: block, body: specialBody }); - } - } else if (what == 'escape') { - nextEnd = data.indexOf('__', nextSpecial + 1); - var escaped = data.substring(context.cursor, nextEnd + 2); - tokenized.push(escaped); - - context.cursor = nextEnd + 2; - } else if (what == 'bodyStart') { - var selector = data.substring(context.cursor, nextSpecial).trim(); - - oldMode = context.mode; - context.cursor = nextSpecial + 1; - context.mode = 'body'; - var body = tokenize(context); - context.mode = oldMode; - - tokenized.push({ selector: selector, body: body }); - } else if (what == 'bodyEnd') { - // extra closing brace at the top level can be safely ignored - if (context.mode == 'top') { - var at = context.cursor; - var warning = data[context.cursor] == '}' ? - 'Unexpected \'}\' in \'' + data.substring(at - 20, at + 20) + '\'. Ignoring.' : - 'Unexpected content: \'' + data.substring(at, nextSpecial + 1) + '\'. Ignoring.'; - - minifyContext.warnings.push(warning); - context.cursor = nextSpecial + 1; - continue; - } - - if (context.mode != 'block') - tokenized = data.substring(context.cursor, nextSpecial); - - context.cursor = nextSpecial + 1; - - break; - } - } - - return tokenized; - }; - - return { - process: function() { - return tokenize(); - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/comments.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/comments.js deleted file mode 100644 index 5667e7ec..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/comments.js +++ /dev/null @@ -1,59 +0,0 @@ -var EscapeStore = require('./escape-store'); - -module.exports = function Comments(keepSpecialComments, keepBreaks, lineBreak) { - var comments = new EscapeStore('COMMENT'); - - return { - // Strip special comments (/*! ... */) by replacing them by a special marker - // for further restoring. Plain comments are removed. It's done by scanning data using - // String#indexOf scanning instead of regexps to speed up the process. - escape: function(data) { - var tempData = []; - var nextStart = 0; - var nextEnd = 0; - var cursor = 0; - - for (; nextEnd < data.length; ) { - nextStart = data.indexOf('/*', nextEnd); - nextEnd = data.indexOf('*/', nextStart + 2); - if (nextStart == -1 || nextEnd == -1) - break; - - tempData.push(data.substring(cursor, nextStart)); - if (data[nextStart + 2] == '!') { - // in case of special comments, replace them with a placeholder - var comment = data.substring(nextStart, nextEnd + 2); - var placeholder = comments.store(comment); - tempData.push(placeholder); - } - cursor = nextEnd + 2; - } - - return tempData.length > 0 ? - tempData.join('') + data.substring(cursor, data.length) : - data; - }, - - restore: function(data) { - var restored = 0; - var breakSuffix = keepBreaks ? lineBreak : ''; - - return data.replace(new RegExp(comments.placeholderPattern + '(' + lineBreak + '| )?', 'g'), function(match, placeholder) { - restored++; - - switch (keepSpecialComments) { - case '*': - return comments.restore(placeholder) + breakSuffix; - case 1: - case '1': - return restored == 1 ? - comments.restore(placeholder) + breakSuffix : - ''; - case 0: - case '0': - return ''; - } - }); - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/escape-store.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/escape-store.js deleted file mode 100644 index 8c2f07f9..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/escape-store.js +++ /dev/null @@ -1,32 +0,0 @@ -module.exports = function EscapeStore(placeholderRoot) { - placeholderRoot = 'ESCAPED_' + placeholderRoot + '_CLEAN_CSS'; - - var placeholderToData = {}; - var dataToPlaceholder = {}; - var count = 0; - var nextPlaceholder = function() { - return '__' + placeholderRoot + (count++) + '__'; - }; - var pattern = '(__' + placeholderRoot + '\\d{1,}__)'; - - return { - placeholderPattern: pattern, - - placeholderRegExp: new RegExp(pattern, 'g'), - - store: function(data) { - var placeholder = dataToPlaceholder[data]; - if (!placeholder) { - placeholder = nextPlaceholder(); - placeholderToData[placeholder] = data; - dataToPlaceholder[data] = placeholder; - } - - return placeholder; - }, - - restore: function(placeholder) { - return placeholderToData[placeholder]; - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/expressions.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/expressions.js deleted file mode 100644 index 2ca193bc..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/expressions.js +++ /dev/null @@ -1,69 +0,0 @@ -var EscapeStore = require('./escape-store'); - -module.exports = function Expressions() { - var expressions = new EscapeStore('EXPRESSION'); - - var findEnd = function(data, start) { - var end = start + 'expression'.length; - var level = 0; - var quoted = false; - - while(true) { - var next = data[end++]; - - if (quoted) { - quoted = next != '\'' && next != '"'; - } else { - quoted = next == '\'' || next == '"'; - - if (next == '(') - level++; - if (next == ')') - level--; - if (next == '}' && level == 1) { - end--; - level--; - } - } - - if (level === 0 || !next) - break; - } - - return end; - }; - - return { - // Escapes expressions by replacing them by a special - // marker for further restoring. It's done via string scanning - // instead of regexps to speed up the process. - escape: function(data) { - var nextStart = 0; - var nextEnd = 0; - var cursor = 0; - var tempData = []; - - for (; nextEnd < data.length; ) { - nextStart = data.indexOf('expression(', nextEnd); - if (nextStart == -1) - break; - - nextEnd = findEnd(data, nextStart); - - var expression = data.substring(nextStart, nextEnd); - var placeholder = expressions.store(expression); - tempData.push(data.substring(cursor, nextStart)); - tempData.push(placeholder); - cursor = nextEnd; - } - - return tempData.length > 0 ? - tempData.join('') + data.substring(cursor, data.length) : - data; - }, - - restore: function(data) { - return data.replace(expressions.placeholderRegExp, expressions.restore); - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/free.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/free.js deleted file mode 100644 index 7ffee633..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/free.js +++ /dev/null @@ -1,76 +0,0 @@ -var EscapeStore = require('./escape-store'); - -module.exports = function Free() { - var texts = new EscapeStore('FREE_TEXT'); - - var findNonEscapedEnd = function(data, matched, start) { - var end = start; - while (true) { - end = data.indexOf(matched, end); - - if (end > -1 && data[end - 1] == '\\') { - end += 1; - continue; - } else { - break; - } - } - - return end; - }; - - return { - // Strip content tags by replacing them by the a special - // marker for further restoring. It's done via string scanning - // instead of regexps to speed up the process. - escape: function(data) { - var tempData = []; - var nextStart = 0; - var nextEnd = 0; - var cursor = 0; - var matchedParenthesis = null; - var singleParenthesis = '\''; - var doubleParenthesis = '"'; - var dataLength = data.length; - - for (; nextEnd < data.length; ) { - var nextStartSingle = data.indexOf(singleParenthesis, nextEnd + 1); - var nextStartDouble = data.indexOf(doubleParenthesis, nextEnd + 1); - - if (nextStartSingle == -1) - nextStartSingle = dataLength; - if (nextStartDouble == -1) - nextStartDouble = dataLength; - - if (nextStartSingle < nextStartDouble) { - nextStart = nextStartSingle; - matchedParenthesis = singleParenthesis; - } else { - nextStart = nextStartDouble; - matchedParenthesis = doubleParenthesis; - } - - if (nextStart == -1) - break; - - nextEnd = findNonEscapedEnd(data, matchedParenthesis, nextStart + 1); - if (nextEnd == -1) - break; - - var text = data.substring(nextStart, nextEnd + 1); - var placeholder = texts.store(text); - tempData.push(data.substring(cursor, nextStart)); - tempData.push(placeholder); - cursor = nextEnd + 1; - } - - return tempData.length > 0 ? - tempData.join('') + data.substring(cursor, data.length) : - data; - }, - - restore: function(data) { - return data.replace(texts.placeholderRegExp, texts.restore); - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/urls.js b/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/urls.js deleted file mode 100644 index 007e41d2..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/lib/text/urls.js +++ /dev/null @@ -1,39 +0,0 @@ -var EscapeStore = require('./escape-store'); - -module.exports = function Urls() { - var urls = new EscapeStore('URL'); - - return { - // Strip urls by replacing them by a special - // marker for further restoring. It's done via string scanning - // instead of regexps to speed up the process. - escape: function(data) { - var nextStart = 0; - var nextEnd = 0; - var cursor = 0; - var tempData = []; - - for (; nextEnd < data.length; ) { - nextStart = data.indexOf('url(', nextEnd); - if (nextStart == -1) - break; - - nextEnd = data.indexOf(')', nextStart); - - var url = data.substring(nextStart, nextEnd + 1); - var placeholder = urls.store(url); - tempData.push(data.substring(cursor, nextStart)); - tempData.push(placeholder); - cursor = nextEnd + 1; - } - - return tempData.length > 0 ? - tempData.join('') + data.substring(cursor, data.length) : - data; - }, - - restore: function(data) { - return data.replace(urls.placeholderRegExp, urls.restore); - } - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/History.md b/node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/History.md deleted file mode 100644 index 2e665828..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/History.md +++ /dev/null @@ -1,179 +0,0 @@ - -2.0.0 / 2013-07-18 -================== - - * remove input methods (.prompt, .confirm, etc) - -1.3.2 / 2013-07-18 -================== - - * add support for sub-commands to co-exist with the original command - -1.3.1 / 2013-07-18 -================== - - * add quick .runningCommand hack so you can opt-out of other logic when running a sub command - -1.3.0 / 2013-07-09 -================== - - * add EACCES error handling - * fix sub-command --help - -1.2.0 / 2013-06-13 -================== - - * allow "-" hyphen as an option argument - * support for RegExp coercion - -1.1.1 / 2012-11-20 -================== - - * add more sub-command padding - * fix .usage() when args are present. Closes #106 - -1.1.0 / 2012-11-16 -================== - - * add git-style executable subcommand support. Closes #94 - -1.0.5 / 2012-10-09 -================== - - * fix `--name` clobbering. Closes #92 - * fix examples/help. Closes #89 - -1.0.4 / 2012-09-03 -================== - - * add `outputHelp()` method. - -1.0.3 / 2012-08-30 -================== - - * remove invalid .version() defaulting - -1.0.2 / 2012-08-24 -================== - - * add `--foo=bar` support [arv] - * fix password on node 0.8.8. Make backward compatible with 0.6 [focusaurus] - -1.0.1 / 2012-08-03 -================== - - * fix issue #56 - * fix tty.setRawMode(mode) was moved to tty.ReadStream#setRawMode() (i.e. process.stdin.setRawMode()) - -1.0.0 / 2012-07-05 -================== - - * add support for optional option descriptions - * add defaulting of `.version()` to package.json's version - -0.6.1 / 2012-06-01 -================== - - * Added: append (yes or no) on confirmation - * Added: allow node.js v0.7.x - -0.6.0 / 2012-04-10 -================== - - * Added `.prompt(obj, callback)` support. Closes #49 - * Added default support to .choose(). Closes #41 - * Fixed the choice example - -0.5.1 / 2011-12-20 -================== - - * Fixed `password()` for recent nodes. Closes #36 - -0.5.0 / 2011-12-04 -================== - - * Added sub-command option support [itay] - -0.4.3 / 2011-12-04 -================== - - * Fixed custom help ordering. Closes #32 - -0.4.2 / 2011-11-24 -================== - - * Added travis support - * Fixed: line-buffered input automatically trimmed. Closes #31 - -0.4.1 / 2011-11-18 -================== - - * Removed listening for "close" on --help - -0.4.0 / 2011-11-15 -================== - - * Added support for `--`. Closes #24 - -0.3.3 / 2011-11-14 -================== - - * Fixed: wait for close event when writing help info [Jerry Hamlet] - -0.3.2 / 2011-11-01 -================== - - * Fixed long flag definitions with values [felixge] - -0.3.1 / 2011-10-31 -================== - - * Changed `--version` short flag to `-V` from `-v` - * Changed `.version()` so it's configurable [felixge] - -0.3.0 / 2011-10-31 -================== - - * Added support for long flags only. Closes #18 - -0.2.1 / 2011-10-24 -================== - - * "node": ">= 0.4.x < 0.7.0". Closes #20 - -0.2.0 / 2011-09-26 -================== - - * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs] - -0.1.0 / 2011-08-24 -================== - - * Added support for custom `--help` output - -0.0.5 / 2011-08-18 -================== - - * Changed: when the user enters nothing prompt for password again - * Fixed issue with passwords beginning with numbers [NuckChorris] - -0.0.4 / 2011-08-15 -================== - - * Fixed `Commander#args` - -0.0.3 / 2011-08-15 -================== - - * Added default option value support - -0.0.2 / 2011-08-15 -================== - - * Added mask support to `Command#password(str[, mask], fn)` - * Added `Command#password(str, fn)` - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/Readme.md b/node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/Readme.md deleted file mode 100644 index d1644012..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/Readme.md +++ /dev/null @@ -1,195 +0,0 @@ -# Commander.js - - The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander). - - [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js) - -## Installation - - $ npm install commander - -## Option parsing - - Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('commander'); - -program - .version('0.0.1') - .option('-p, --peppers', 'Add peppers') - .option('-P, --pineapple', 'Add pineapple') - .option('-b, --bbq', 'Add bbq sauce') - .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') - .parse(process.argv); - -console.log('you ordered a pizza with:'); -if (program.peppers) console.log(' - peppers'); -if (program.pineapple) console.log(' - pineapple'); -if (program.bbq) console.log(' - bbq'); -console.log(' - %s cheese', program.cheese); -``` - - Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. - -## Automated --help - - The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free: - -``` - $ ./examples/pizza --help - - Usage: pizza [options] - - Options: - - -V, --version output the version number - -p, --peppers Add peppers - -P, --pineapple Add pineapple - -b, --bbq Add bbq sauce - -c, --cheese <type> Add the specified type of cheese [marble] - -h, --help output usage information - -``` - -## Coercion - -```js -function range(val) { - return val.split('..').map(Number); -} - -function list(val) { - return val.split(','); -} - -program - .version('0.0.1') - .usage('[options] <file ...>') - .option('-i, --integer <n>', 'An integer argument', parseInt) - .option('-f, --float <n>', 'A float argument', parseFloat) - .option('-r, --range <a>..<b>', 'A range', range) - .option('-l, --list <items>', 'A list', list) - .option('-o, --optional [value]', 'An optional value') - .parse(process.argv); - -console.log(' int: %j', program.integer); -console.log(' float: %j', program.float); -console.log(' optional: %j', program.optional); -program.range = program.range || []; -console.log(' range: %j..%j', program.range[0], program.range[1]); -console.log(' list: %j', program.list); -console.log(' args: %j', program.args); -``` - -## Custom help - - You can display arbitrary `-h, --help` information - by listening for "--help". Commander will automatically - exit once you are done so that the remainder of your program - does not execute causing undesired behaviours, for example - in the following executable "stuff" will not output when - `--help` is used. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('../'); - -function list(val) { - return val.split(',').map(Number); -} - -program - .version('0.0.1') - .option('-f, --foo', 'enable some foo') - .option('-b, --bar', 'enable some bar') - .option('-B, --baz', 'enable some baz'); - -// must be before .parse() since -// node's emit() is immediate - -program.on('--help', function(){ - console.log(' Examples:'); - console.log(''); - console.log(' $ custom-help --help'); - console.log(' $ custom-help -h'); - console.log(''); -}); - -program.parse(process.argv); - -console.log('stuff'); -``` - -yielding the following help output: - -``` - -Usage: custom-help [options] - -Options: - - -h, --help output usage information - -V, --version output the version number - -f, --foo enable some foo - -b, --bar enable some bar - -B, --baz enable some baz - -Examples: - - $ custom-help --help - $ custom-help -h - -``` - -## .outputHelp() - - Output help information without exiting. - -## .help() - - Output help information and exit immediately. - -## Links - - - [API documentation](http://visionmedia.github.com/commander.js/) - - [ascii tables](https://github.com/LearnBoost/cli-table) - - [progress bars](https://github.com/visionmedia/node-progress) - - [more progress bars](https://github.com/substack/node-multimeter) - - [examples](https://github.com/visionmedia/commander.js/tree/master/examples) - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> - -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-minify-css/node_modules/clean-css/node_modules/commander/index.js b/node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/index.js deleted file mode 100644 index d5778a75..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/index.js +++ /dev/null @@ -1,847 +0,0 @@ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter; -var spawn = require('child_process').spawn; -var fs = require('fs'); -var exists = fs.existsSync; -var path = require('path'); -var dirname = path.dirname; -var basename = path.basename; - -/** - * Expose the root command. - */ - -exports = module.exports = new Command; - -/** - * Expose `Command`. - */ - -exports.Command = Command; - -/** - * Expose `Option`. - */ - -exports.Option = Option; - -/** - * Initialize a new `Option` with the given `flags` and `description`. - * - * @param {String} flags - * @param {String} description - * @api public - */ - -function Option(flags, description) { - this.flags = flags; - this.required = ~flags.indexOf('<'); - this.optional = ~flags.indexOf('['); - this.bool = !~flags.indexOf('-no-'); - flags = flags.split(/[ ,|]+/); - if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift(); - this.long = flags.shift(); - this.description = description || ''; -} - -/** - * Return option name. - * - * @return {String} - * @api private - */ - -Option.prototype.name = function(){ - return this.long - .replace('--', '') - .replace('no-', ''); -}; - -/** - * Check if `arg` matches the short or long flag. - * - * @param {String} arg - * @return {Boolean} - * @api private - */ - -Option.prototype.is = function(arg){ - return arg == this.short - || arg == this.long; -}; - -/** - * Initialize a new `Command`. - * - * @param {String} name - * @api public - */ - -function Command(name) { - this.commands = []; - this.options = []; - this._execs = []; - this._args = []; - this._name = name; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Command.prototype.__proto__ = EventEmitter.prototype; - -/** - * Add command `name`. - * - * The `.action()` callback is invoked when the - * command `name` is specified via __ARGV__, - * and the remaining arguments are applied to the - * function for access. - * - * When the `name` is "*" an un-matched command - * will be passed as the first arg, followed by - * the rest of __ARGV__ remaining. - * - * Examples: - * - * program - * .version('0.0.1') - * .option('-C, --chdir <path>', 'change the working directory') - * .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf') - * .option('-T, --no-tests', 'ignore test hook') - * - * program - * .command('setup') - * .description('run remote setup commands') - * .action(function(){ - * console.log('setup'); - * }); - * - * program - * .command('exec <cmd>') - * .description('run the given remote command') - * .action(function(cmd){ - * console.log('exec "%s"', cmd); - * }); - * - * program - * .command('*') - * .description('deploy the given env') - * .action(function(env){ - * console.log('deploying "%s"', env); - * }); - * - * program.parse(process.argv); - * - * @param {String} name - * @param {String} [desc] - * @return {Command} the new command - * @api public - */ - -Command.prototype.command = function(name, desc){ - var args = name.split(/ +/); - var cmd = new Command(args.shift()); - if (desc) cmd.description(desc); - if (desc) this.executables = true; - if (desc) this._execs[cmd._name] = true; - this.commands.push(cmd); - cmd.parseExpectedArgs(args); - cmd.parent = this; - if (desc) return this; - return cmd; -}; - -/** - * Add an implicit `help [cmd]` subcommand - * which invokes `--help` for the given command. - * - * @api private - */ - -Command.prototype.addImplicitHelpCommand = function() { - this.command('help [cmd]', 'display help for [cmd]'); -}; - -/** - * Parse expected `args`. - * - * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. - * - * @param {Array} args - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parseExpectedArgs = function(args){ - if (!args.length) return; - var self = this; - args.forEach(function(arg){ - switch (arg[0]) { - case '<': - self._args.push({ required: true, name: arg.slice(1, -1) }); - break; - case '[': - self._args.push({ required: false, name: arg.slice(1, -1) }); - break; - } - }); - return this; -}; - -/** - * Register callback `fn` for the command. - * - * Examples: - * - * program - * .command('help') - * .description('display verbose help') - * .action(function(){ - * // output help here - * }); - * - * @param {Function} fn - * @return {Command} for chaining - * @api public - */ - -Command.prototype.action = function(fn){ - var self = this; - this.parent.on(this._name, function(args, unknown){ - // Parse any so-far unknown options - unknown = unknown || []; - var parsed = self.parseOptions(unknown); - - // Output help if necessary - outputHelpIfNecessary(self, parsed.unknown); - - // If there are still any unknown options, then we simply - // die, unless someone asked for help, in which case we give it - // to them, and then we die. - if (parsed.unknown.length > 0) { - self.unknownOption(parsed.unknown[0]); - } - - // Leftover arguments need to be pushed back. Fixes issue #56 - if (parsed.args.length) args = parsed.args.concat(args); - - self._args.forEach(function(arg, i){ - if (arg.required && null == args[i]) { - self.missingArgument(arg.name); - } - }); - - // Always append ourselves to the end of the arguments, - // to make sure we match the number of arguments the user - // expects - if (self._args.length) { - args[self._args.length] = self; - } else { - args.push(self); - } - - fn.apply(this, args); - }); - return this; -}; - -/** - * Define option with `flags`, `description` and optional - * coercion `fn`. - * - * The `flags` string should contain both the short and long flags, - * separated by comma, a pipe or space. The following are all valid - * all will output this way when `--help` is used. - * - * "-p, --pepper" - * "-p|--pepper" - * "-p --pepper" - * - * Examples: - * - * // simple boolean defaulting to false - * program.option('-p, --pepper', 'add pepper'); - * - * --pepper - * program.pepper - * // => Boolean - * - * // simple boolean defaulting to false - * program.option('-C, --no-cheese', 'remove cheese'); - * - * program.cheese - * // => true - * - * --no-cheese - * program.cheese - * // => true - * - * // required argument - * program.option('-C, --chdir <path>', 'change the working directory'); - * - * --chdir /tmp - * program.chdir - * // => "/tmp" - * - * // optional argument - * program.option('-c, --cheese [type]', 'add cheese [marble]'); - * - * @param {String} flags - * @param {String} description - * @param {Function|Mixed} fn or default - * @param {Mixed} defaultValue - * @return {Command} for chaining - * @api public - */ - -Command.prototype.option = function(flags, description, fn, defaultValue){ - var self = this - , option = new Option(flags, description) - , oname = option.name() - , name = camelcase(oname); - - // default as 3rd arg - if ('function' != typeof fn) defaultValue = fn, fn = null; - - // preassign default value only for --no-*, [optional], or <required> - if (false == option.bool || option.optional || option.required) { - // when --no-* we make sure default is true - if (false == option.bool) defaultValue = true; - // preassign only if we have a default - if (undefined !== defaultValue) self[name] = defaultValue; - } - - // register the option - this.options.push(option); - - // when it's passed assign the value - // and conditionally invoke the callback - this.on(oname, function(val){ - // coercion - if (null != val && fn) val = fn(val); - - // unassigned or bool - if ('boolean' == typeof self[name] || 'undefined' == typeof self[name]) { - // if no value, bool true, and we have a default, then use it! - if (null == val) { - self[name] = option.bool - ? defaultValue || true - : false; - } else { - self[name] = val; - } - } else if (null !== val) { - // reassign - self[name] = val; - } - }); - - return this; -}; - -/** - * Parse `argv`, settings options and invoking commands when defined. - * - * @param {Array} argv - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parse = function(argv){ - // implicit help - if (this.executables) this.addImplicitHelpCommand(); - - // store raw args - this.rawArgs = argv; - - // guess name - this._name = this._name || basename(argv[1]); - - // process argv - var parsed = this.parseOptions(this.normalize(argv.slice(2))); - var args = this.args = parsed.args; - - var result = this.parseArgs(this.args, parsed.unknown); - - // executable sub-commands - var name = result.args[0]; - if (this._execs[name]) return this.executeSubCommand(argv, args, parsed.unknown); - - return result; -}; - -/** - * Execute a sub-command executable. - * - * @param {Array} argv - * @param {Array} args - * @param {Array} unknown - * @api private - */ - -Command.prototype.executeSubCommand = function(argv, args, unknown) { - args = args.concat(unknown); - - if (!args.length) this.help(); - if ('help' == args[0] && 1 == args.length) this.help(); - - // <cmd> --help - if ('help' == args[0]) { - args[0] = args[1]; - args[1] = '--help'; - } - - // executable - var dir = dirname(argv[1]); - var bin = basename(argv[1]) + '-' + args[0]; - - // check for ./<bin> first - var local = path.join(dir, bin); - - // run it - args = args.slice(1); - var proc = spawn(local, args, { stdio: 'inherit', customFds: [0, 1, 2] }); - proc.on('error', function(err){ - if (err.code == "ENOENT") { - console.error('\n %s(1) does not exist, try --help\n', bin); - } else if (err.code == "EACCES") { - console.error('\n %s(1) not executable. try chmod or run with root\n', bin); - } - }); - - this.runningCommand = proc; -}; - -/** - * Normalize `args`, splitting joined short flags. For example - * the arg "-abc" is equivalent to "-a -b -c". - * This also normalizes equal sign and splits "--abc=def" into "--abc def". - * - * @param {Array} args - * @return {Array} - * @api private - */ - -Command.prototype.normalize = function(args){ - var ret = [] - , arg - , index; - - for (var i = 0, len = args.length; i < len; ++i) { - arg = args[i]; - if (arg.length > 1 && '-' == arg[0] && '-' != arg[1]) { - arg.slice(1).split('').forEach(function(c){ - ret.push('-' + c); - }); - } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) { - ret.push(arg.slice(0, index), arg.slice(index + 1)); - } else { - ret.push(arg); - } - } - - return ret; -}; - -/** - * Parse command `args`. - * - * When listener(s) are available those - * callbacks are invoked, otherwise the "*" - * event is emitted and those actions are invoked. - * - * @param {Array} args - * @return {Command} for chaining - * @api private - */ - -Command.prototype.parseArgs = function(args, unknown){ - var cmds = this.commands - , len = cmds.length - , name; - - if (args.length) { - name = args[0]; - if (this.listeners(name).length) { - this.emit(args.shift(), args, unknown); - } else { - this.emit('*', args); - } - } else { - outputHelpIfNecessary(this, unknown); - - // If there were no args and we have unknown options, - // then they are extraneous and we need to error. - if (unknown.length > 0) { - this.unknownOption(unknown[0]); - } - } - - return this; -}; - -/** - * Return an option matching `arg` if any. - * - * @param {String} arg - * @return {Option} - * @api private - */ - -Command.prototype.optionFor = function(arg){ - for (var i = 0, len = this.options.length; i < len; ++i) { - if (this.options[i].is(arg)) { - return this.options[i]; - } - } -}; - -/** - * Parse options from `argv` returning `argv` - * void of these options. - * - * @param {Array} argv - * @return {Array} - * @api public - */ - -Command.prototype.parseOptions = function(argv){ - var args = [] - , len = argv.length - , literal - , option - , arg; - - var unknownOptions = []; - - // parse options - for (var i = 0; i < len; ++i) { - arg = argv[i]; - - // literal args after -- - if ('--' == arg) { - literal = true; - continue; - } - - if (literal) { - args.push(arg); - continue; - } - - // find matching Option - option = this.optionFor(arg); - - // option is defined - if (option) { - // requires arg - if (option.required) { - arg = argv[++i]; - if (null == arg) return this.optionMissingArgument(option); - if ('-' == arg[0] && '-' != arg) return this.optionMissingArgument(option, arg); - this.emit(option.name(), arg); - // optional arg - } else if (option.optional) { - arg = argv[i+1]; - if (null == arg || ('-' == arg[0] && '-' != arg)) { - arg = null; - } else { - ++i; - } - this.emit(option.name(), arg); - // bool - } else { - this.emit(option.name()); - } - continue; - } - - // looks like an option - if (arg.length > 1 && '-' == arg[0]) { - unknownOptions.push(arg); - - // If the next argument looks like it might be - // an argument for this option, we pass it on. - // If it isn't, then it'll simply be ignored - if (argv[i+1] && '-' != argv[i+1][0]) { - unknownOptions.push(argv[++i]); - } - continue; - } - - // arg - args.push(arg); - } - - return { args: args, unknown: unknownOptions }; -}; - -/** - * Argument `name` is missing. - * - * @param {String} name - * @api private - */ - -Command.prototype.missingArgument = function(name){ - console.error(); - console.error(" error: missing required argument `%s'", name); - console.error(); - process.exit(1); -}; - -/** - * `Option` is missing an argument, but received `flag` or nothing. - * - * @param {String} option - * @param {String} flag - * @api private - */ - -Command.prototype.optionMissingArgument = function(option, flag){ - console.error(); - if (flag) { - console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag); - } else { - console.error(" error: option `%s' argument missing", option.flags); - } - console.error(); - process.exit(1); -}; - -/** - * Unknown option `flag`. - * - * @param {String} flag - * @api private - */ - -Command.prototype.unknownOption = function(flag){ - console.error(); - console.error(" error: unknown option `%s'", flag); - console.error(); - process.exit(1); -}; - - -/** - * Set the program version to `str`. - * - * This method auto-registers the "-V, --version" flag - * which will print the version number when passed. - * - * @param {String} str - * @param {String} flags - * @return {Command} for chaining - * @api public - */ - -Command.prototype.version = function(str, flags){ - if (0 == arguments.length) return this._version; - this._version = str; - flags = flags || '-V, --version'; - this.option(flags, 'output the version number'); - this.on('version', function(){ - console.log(str); - process.exit(0); - }); - return this; -}; - -/** - * Set the description `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.description = function(str){ - if (0 == arguments.length) return this._description; - this._description = str; - return this; -}; - -/** - * Set / get the command usage `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.usage = function(str){ - var args = this._args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }); - - var usage = '[options' - + (this.commands.length ? '] [command' : '') - + ']' - + (this._args.length ? ' ' + args : ''); - - if (0 == arguments.length) return this._usage || usage; - this._usage = str; - - return this; -}; - -/** - * Return the largest option length. - * - * @return {Number} - * @api private - */ - -Command.prototype.largestOptionLength = function(){ - return this.options.reduce(function(max, option){ - return Math.max(max, option.flags.length); - }, 0); -}; - -/** - * Return help for options. - * - * @return {String} - * @api private - */ - -Command.prototype.optionHelp = function(){ - var width = this.largestOptionLength(); - - // Prepend the help information - return [pad('-h, --help', width) + ' ' + 'output usage information'] - .concat(this.options.map(function(option){ - return pad(option.flags, width) - + ' ' + option.description; - })) - .join('\n'); -}; - -/** - * Return command help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.commandHelp = function(){ - if (!this.commands.length) return ''; - return [ - '' - , ' Commands:' - , '' - , this.commands.map(function(cmd){ - var args = cmd._args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }).join(' '); - - return pad(cmd._name - + (cmd.options.length - ? ' [options]' - : '') + ' ' + args, 22) - + (cmd.description() - ? ' ' + cmd.description() - : ''); - }).join('\n').replace(/^/gm, ' ') - , '' - ].join('\n'); -}; - -/** - * Return program help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.helpInformation = function(){ - return [ - '' - , ' Usage: ' + this._name + ' ' + this.usage() - , '' + this.commandHelp() - , ' Options:' - , '' - , '' + this.optionHelp().replace(/^/gm, ' ') - , '' - , '' - ].join('\n'); -}; - -/** - * Output help information for this command - * - * @api public - */ - -Command.prototype.outputHelp = function(){ - process.stdout.write(this.helpInformation()); - this.emit('--help'); -}; - -/** - * Output help information and exit. - * - * @api public - */ - -Command.prototype.help = function(){ - this.outputHelp(); - process.exit(); -}; - -/** - * Camel-case the given `flag` - * - * @param {String} flag - * @return {String} - * @api private - */ - -function camelcase(flag) { - return flag.split('-').reduce(function(str, word){ - return str + word[0].toUpperCase() + word.slice(1); - }); -} - -/** - * Pad `str` to `width`. - * - * @param {String} str - * @param {Number} width - * @return {String} - * @api private - */ - -function pad(str, width) { - var len = Math.max(0, width - str.length); - return str + Array(len + 1).join(' '); -} - -/** - * Output help information if necessary - * - * @param {Command} command to output help for - * @param {Array} array of options to search for -h or --help - * @api private - */ - -function outputHelpIfNecessary(cmd, options) { - options = options || []; - for (var i = 0; i < options.length; i++) { - if (options[i] == '--help' || options[i] == '-h') { - cmd.outputHelp(); - process.exit(0); - } - } -} diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/package.json b/node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/package.json deleted file mode 100644 index 0fe5fa89..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/node_modules/commander/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "commander", - "version": "2.0.0", - "description": "the complete solution for node.js command-line programs", - "keywords": [ - "command", - "option", - "parser", - "prompt", - "stdin" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "repository": { - "type": "git", - "url": "https://github.com/visionmedia/commander.js.git" - }, - "devDependencies": { - "should": ">= 0.0.1" - }, - "scripts": { - "test": "make test" - }, - "main": "index", - "engines": { - "node": ">= 0.6.x" - }, - "readme": "# Commander.js\n\n The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander).\n\n [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js)\n\n## Installation\n\n $ npm install commander\n\n## Option parsing\n\n Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('commander');\n\nprogram\n .version('0.0.1')\n .option('-p, --peppers', 'Add peppers')\n .option('-P, --pineapple', 'Add pineapple')\n .option('-b, --bbq', 'Add bbq sauce')\n .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')\n .parse(process.argv);\n\nconsole.log('you ordered a pizza with:');\nif (program.peppers) console.log(' - peppers');\nif (program.pineapple) console.log(' - pineapple');\nif (program.bbq) console.log(' - bbq');\nconsole.log(' - %s cheese', program.cheese);\n```\n\n Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as \"--template-engine\" are camel-cased, becoming `program.templateEngine` etc.\n\n## Automated --help\n\n The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:\n\n``` \n $ ./examples/pizza --help\n\n Usage: pizza [options]\n\n Options:\n\n -V, --version output the version number\n -p, --peppers Add peppers\n -P, --pineapple Add pineapple\n -b, --bbq Add bbq sauce\n -c, --cheese <type> Add the specified type of cheese [marble]\n -h, --help output usage information\n\n```\n\n## Coercion\n\n```js\nfunction range(val) {\n return val.split('..').map(Number);\n}\n\nfunction list(val) {\n return val.split(',');\n}\n\nprogram\n .version('0.0.1')\n .usage('[options] <file ...>')\n .option('-i, --integer <n>', 'An integer argument', parseInt)\n .option('-f, --float <n>', 'A float argument', parseFloat)\n .option('-r, --range <a>..<b>', 'A range', range)\n .option('-l, --list <items>', 'A list', list)\n .option('-o, --optional [value]', 'An optional value')\n .parse(process.argv);\n\nconsole.log(' int: %j', program.integer);\nconsole.log(' float: %j', program.float);\nconsole.log(' optional: %j', program.optional);\nprogram.range = program.range || [];\nconsole.log(' range: %j..%j', program.range[0], program.range[1]);\nconsole.log(' list: %j', program.list);\nconsole.log(' args: %j', program.args);\n```\n\n## Custom help\n\n You can display arbitrary `-h, --help` information\n by listening for \"--help\". Commander will automatically\n exit once you are done so that the remainder of your program\n does not execute causing undesired behaviours, for example\n in the following executable \"stuff\" will not output when\n `--help` is used.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('../');\n\nfunction list(val) {\n return val.split(',').map(Number);\n}\n\nprogram\n .version('0.0.1')\n .option('-f, --foo', 'enable some foo')\n .option('-b, --bar', 'enable some bar')\n .option('-B, --baz', 'enable some baz');\n\n// must be before .parse() since\n// node's emit() is immediate\n\nprogram.on('--help', function(){\n console.log(' Examples:');\n console.log('');\n console.log(' $ custom-help --help');\n console.log(' $ custom-help -h');\n console.log('');\n});\n\nprogram.parse(process.argv);\n\nconsole.log('stuff');\n```\n\nyielding the following help output:\n\n```\n\nUsage: custom-help [options]\n\nOptions:\n\n -h, --help output usage information\n -V, --version output the version number\n -f, --foo enable some foo\n -b, --bar enable some bar\n -B, --baz enable some baz\n\nExamples:\n\n $ custom-help --help\n $ custom-help -h\n\n```\n\n## .outputHelp()\n\n Output help information without exiting.\n\n## .help()\n\n Output help information and exit immediately.\n\n## Links\n\n - [API documentation](http://visionmedia.github.com/commander.js/)\n - [ascii tables](https://github.com/LearnBoost/cli-table)\n - [progress bars](https://github.com/visionmedia/node-progress)\n - [more progress bars](https://github.com/substack/node-multimeter)\n - [examples](https://github.com/visionmedia/commander.js/tree/master/examples)\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/commander.js/issues" - }, - "homepage": "https://github.com/visionmedia/commander.js", - "_id": "commander@2.0.0", - "_from": "commander@2.0.x" -} diff --git a/node_modules/gulp-minify-css/node_modules/clean-css/package.json b/node_modules/gulp-minify-css/node_modules/clean-css/package.json deleted file mode 100644 index 82a0cd91..00000000 --- a/node_modules/gulp-minify-css/node_modules/clean-css/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "clean-css", - "version": "2.0.8", - "author": { - "name": "Jakub Pawlowicz", - "email": "jakub@goalsmashers.com", - "url": "http://twitter.com/GoalSmashers" - }, - "description": "A well-tested CSS minifier", - "license": "MIT", - "keywords": [ - "css", - "minifier" - ], - "homepage": "https://github.com/GoalSmashers/clean-css", - "repository": { - "type": "git", - "url": "https://github.com/GoalSmashers/clean-css.git" - }, - "bugs": { - "url": "https://github.com/GoalSmashers/clean-css/issues" - }, - "bin": { - "cleancss": "./bin/cleancss" - }, - "main": "index.js", - "files": [ - "bin", - "lib", - "History.md", - "index.js", - "LICENSE" - ], - "scripts": { - "bench": "node ./test/bench.js", - "check": "jshint .", - "prepublish": "jshint .", - "test": "vows" - }, - "dependencies": { - "commander": "2.0.x" - }, - "devDependencies": { - "jshint": "2.3.x", - "vows": "0.7.x" - }, - "jshintConfig": { - "browser": false, - "camelcase": true, - "curly": false, - "eqeqeq": false, - "eqnull": true, - "immed": true, - "latedef": true, - "multistr": true, - "noarg": true, - "node": true, - "plusplus": false, - "quotmark": "single", - "strict": false, - "trailing": true, - "undef": true, - "unused": true - }, - "engines": { - "node": ">=0.8.0" - }, - "readme": "[![NPM version](https://badge.fury.io/js/clean-css.png)](https://badge.fury.io/js/clean-css)\n[![Build Status](https://secure.travis-ci.org/GoalSmashers/clean-css.png)](https://travis-ci.org/GoalSmashers/clean-css)\n[![Dependency Status](https://david-dm.org/GoalSmashers/clean-css.png)](https://david-dm.org/GoalSmashers/clean-css)\n[![devDependency Status](https://david-dm.org/GoalSmashers/clean-css/dev-status.png)](https://david-dm.org/GoalSmashers/clean-css#info=devDependencies)\n\n## What is clean-css?\n\nClean-css is a fast and efficient [node.js](http://nodejs.org/) library for minifying CSS files.\n\nAccording to [tests](https://github.com/GoalSmashers/css-minification-benchmark) it is one of the best available.\n\n\n## Usage\n\n### What are the requirements?\n\n```\nnode.js 0.8.0+ (tested on CentOS, Ubuntu, OS X 10.6+, and Windows 7+)\n```\n\n### How to install clean-css?\n\n```\nnpm install clean-css\n```\n\n### How to upgrade clean-css from 1.x to 2.x?\n\n#### Command-line interface (CLI)\n\n```\nnpm update clean-css\n```\n\nor point `package.json` to version 2.x. That's it!\n\n#### Node.js module\n\nUpdate `clean-css` as for CLI above.\nThen change your JavaScript code from:\n\n```js\nvar minimized = CleanCSS.process(source, options);\n```\n\ninto\n\n```js\nvar minimized = new CleanCSS(options).minify(source);\n```\n\nAnd you are done.\n\n### How to use clean-css CLI?\n\nClean-css accepts the following command line arguments (please make sure\nyou use `<source-file>` as the very last argument to avoid potential issues):\n\n```\ncleancss [options] <source-file>\n\n-h, --help Output usage information\n-v, --version Output the version number\n-b, --keep-line-breaks Keep line breaks\n--s0 Remove all special comments, i.e. /*! comment */\n--s1 Remove all special comments but the first one\n-r, --root [root-path] A root path to which resolve absolute @import rules\n and rebase relative URLs\n-o, --output [output-file] Use [output-file] as output instead of STDOUT\n-s, --skip-import Disable @import processing\n--skip-rebase Disable URLs rebasing\n--skip-advanced Disable advanced optimizations - selector & property merging,\n reduction, etc.\n--selectors-merge-mode [ie8|*] Use `ie8` for compatibility mode, `*` for merge all (default)\n-d, --debug Shows debug information (minification time & compression efficiency)\n```\n\n#### Examples:\n\nTo minify a **public.css** file into **public-min.css** do:\n\n```\ncleancss -o public-min.css public.css\n```\n\nTo minify the same **public.css** into the standard output skip the `-o` parameter:\n\n```\ncleancss public.css\n```\n\nMore likely you would like to concatenate a couple of files.\nIf you are on a Unix-like system:\n\n```bash\ncat one.css two.css three.css | cleancss -o merged-and-minified.css\n```\n\nOn Windows:\n\n```bat\ntype one.css two.css three.css | cleancss -o merged-and-minified.css\n```\n\nOr even gzip the result at once:\n\n```bash\ncat one.css two.css three.css | cleancss | gzip -9 -c > merged-minified-and-gzipped.css.gz\n```\n\n### How to use clean-css programmatically?\n\n```js\nvar CleanCSS = require('clean-css');\nvar source = 'a{font-weight:bold;}';\nvar minimized = new CleanCSS().minify(source);\n```\n\nCleanCSS constructor accepts a hash as a parameter, i.e.,\n`new CleanCSS(options).minify(source)` with the following options available:\n\n* `keepSpecialComments` - `*` for keeping all (default), `1` for keeping first one only, `0` for removing all\n* `keepBreaks` - whether to keep line breaks (default is false)\n* `benchmark` - turns on benchmarking mode measuring time spent on cleaning up\n (run `npm run bench` to see example)\n* `root` - path to resolve absolute `@import` rules and rebase relative URLs\n* `relativeTo` - path with which to resolve relative `@import` rules and URLs\n* `processImport` - whether to process `@import` rules\n* `noRebase` - whether to skip URLs rebasing\n* `noAdvanced` - set to true to disable advanced optimizations - selector & property merging, reduction, etc.\n* `selectorsMergeMode` - `ie8` for IE8 compatibility mode, `*` for merging all (default)\n* `debug` - set to true to get minification statistics under `stats` property (see `test/custom-test.js` for examples)\n\n### What are the clean-css' dev commands?\n\nFirst clone the source, then run:\n\n* `npm run bench` for clean-css benchmarks (see [test/bench.js](https://github.com/GoalSmashers/clean-css/blob/master/test/bench.js) for details)\n* `npm run check` to check JS sources with [JSHint](https://github.com/jshint/jshint/)\n* `npm test` for the test suite\n\n## Tips & Tricks\n\n### How to preserve a comment block?\n\nUse the `/*!` notation instead of the standard one `/*`:\n\n```css\n/*!\n Important comments included in minified output.\n*/\n```\n\n### How to rebase relative image URLs\n\nClean-css will handle it automatically for you (since version 1.1) in the following cases:\n\n* When using the CLI:\n 1. Use an output path via `-o`/`--output` to rebase URLs as relative to the output file.\n 2. Use a root path via `-r`/`--root` to rebase URLs as absolute from the given root path.\n 3. If you specify both then `-r`/`--root` takes precendence.\n* When using clean-css as a library:\n 1. Use a combination of `relativeTo` and `target` options for relative rebase (same as 1 in CLI).\n 2. Use a combination of `relativeTo` and `root` options for absolute rebase (same as 2 in CLI).\n 3. `root` takes precendence over `target` as in CLI.\n\n## Acknowledgments\n\n* Vincent Voyer ([@vvo](https://github.com/vvo)) for a patch with better\n empty element regex and for inspiring us to do many performance improvements\n in 0.4 release.\n* Isaac ([@facelessuser](https://github.com/facelessuser)) for pointing out\n a flaw in clean-css' stateless mode.\n* Jan Michael Alonzo ([@jmalonzo](https://github.com/jmalonzo)) for a patch\n removing node.js' old `sys` package.\n* [@XhmikosR](https://github.com/XhmikosR) for suggesting new features\n (option to remove special comments and strip out URLs quotation) and\n pointing out numerous improvements (JSHint, media queries).\n* Anthony Barre ([@abarre](https://github.com/abarre)) for improvements to\n `@import` processing, namely introducing the `--skip-import` /\n `processImport` options.\n* Simon Altschuler ([@altschuler](https://github.com/altschuler)) for fixing\n `@import` processing inside comments.\n\n## License\n\nClean-css is released under the [MIT License](https://github.com/GoalSmashers/clean-css/blob/master/LICENSE).\n", - "readmeFilename": "README.md", - "_id": "clean-css@2.0.8", - "_from": "clean-css@~2.0.7" -} diff --git a/node_modules/gulp-minify-css/node_modules/clone/.npmignore b/node_modules/gulp-minify-css/node_modules/clone/.npmignore deleted file mode 100644 index c2658d7d..00000000 --- a/node_modules/gulp-minify-css/node_modules/clone/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/node_modules/gulp-minify-css/node_modules/clone/.travis.yml b/node_modules/gulp-minify-css/node_modules/clone/.travis.yml deleted file mode 100644 index 58f23716..00000000 --- a/node_modules/gulp-minify-css/node_modules/clone/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.10 diff --git a/node_modules/gulp-minify-css/node_modules/clone/LICENSE b/node_modules/gulp-minify-css/node_modules/clone/LICENSE deleted file mode 100644 index f6514e9a..00000000 --- a/node_modules/gulp-minify-css/node_modules/clone/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright © 2011-2013 Paul Vorbach <paul@vorb.de> - -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, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/gulp-minify-css/node_modules/clone/README.md b/node_modules/gulp-minify-css/node_modules/clone/README.md deleted file mode 100644 index 6fe17b0b..00000000 --- a/node_modules/gulp-minify-css/node_modules/clone/README.md +++ /dev/null @@ -1,124 +0,0 @@ -# clone - -[![build status](https://secure.travis-ci.org/pvorb/node-clone.png)](http://travis-ci.org/pvorb/node-clone) - -offers foolproof _deep cloning_ of variables in JavaScript. - - -## Installation - - npm install clone - -or - - ender build clone - - -## Example - -~~~ javascript -var clone = require('clone'); - -var a, b; - -a = { foo: { bar: 'baz' } }; // inital value of a - -b = clone(a); // clone a -> b -a.foo.bar = 'foo'; // change a - -console.log(a); // show a -console.log(b); // show b -~~~ - -This will print: - -~~~ javascript -{ foo: { bar: 'foo' } } -{ foo: { bar: 'baz' } } -~~~ - -**clone** masters cloning simple objects (even with custom prototype), arrays, -Date objects, and RegExp objects. Everything is cloned recursively, so that you -can clone dates in arrays in objects, for example. - - -## API - -`clone(val, circular)` - - * `val` -- the value that you want to clone, any type allowed - * `circular` -- boolean - - Call `clone` with `circular` set to `false` if you are certain that `obj` - contains no circular references. This will give better performance if needed. - There is no error if `undefined` or `null` is passed as `obj`. - -`clone.clonePrototype(obj)` - - * `obj` -- the object that you want to clone - -Does a prototype clone as -[described by Oran Looney](http://oranlooney.com/functional-javascript/). - - -## Circular References - -~~~ javascript -var a, b; - -a = { hello: 'world' }; - -a.myself = a; -b = clone(a); - -console.log(b); -~~~ - -This will print: - -~~~ javascript -{ hello: "world", myself: [Circular] } -~~~ - -So, `b.myself` points to `b`, not `a`. Neat! - - -## Test - - npm test - - -## Caveat - -Some special objects like a socket or `process.stdout`/`stderr` are known to not -be cloneable. If you find other objects that cannot be cloned, please [open an -issue](https://github.com/pvorb/node-clone/issues/new). - - -## Bugs and Issues - -If you encounter any bugs or issues, feel free to -[open an issue at github](https://github.com/pvorb/node-clone/issues) or send me -an email to <paul@vorb.de>. I also always like to hear from you, if you’re using -my code. - -## License - -Copyright © 2011-2013 Paul Vorbach - -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, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/gulp-minify-css/node_modules/clone/clone.js b/node_modules/gulp-minify-css/node_modules/clone/clone.js deleted file mode 100644 index 814056e4..00000000 --- a/node_modules/gulp-minify-css/node_modules/clone/clone.js +++ /dev/null @@ -1,159 +0,0 @@ -"use strict"; - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - -var util = { - isArray: function (ar) { - return Array.isArray(ar) || (typeof ar === 'object' && objectToString(ar) === '[object Array]'); - }, - isDate: function (d) { - return typeof d === 'object' && objectToString(d) === '[object Date]'; - }, - isRegExp: function (re) { - return typeof re === 'object' && objectToString(re) === '[object RegExp]'; - }, - getRegExpFlags: function (re) { - var flags = ''; - re.global && (flags += 'g'); - re.ignoreCase && (flags += 'i'); - re.multiline && (flags += 'm'); - return flags; - } -}; - -if (typeof module === 'object') - module.exports = clone; - -/** - * Clones (copies) an Object using deep copying. - * - * This function supports circular references by default, but if you are certain - * there are no circular references in your object, you can save some CPU time - * by calling clone(obj, false). - * - * Caution: if `circular` is false and `parent` contains circular references, - * your program may enter an infinite loop and crash. - * - * @param `parent` - the object to be cloned - * @param `circular` - set to true if the object to be cloned may contain - * circular references. (optional - true by default) -*/ -function clone(parent, circular) { - if (typeof circular == 'undefined') - circular = true; - - var useBuffer = typeof Buffer != 'undefined'; - - var circularParent = {}; - var circularResolved = {}; - var circularReplace = []; - - function _clone(parent, context, child, cIndex) { - var i; // Use local context within this function - // Deep clone all properties of parent into child - if (typeof parent == 'object') { - if (parent == null) - return parent; - // Check for circular references - for(i in circularParent) - if (circularParent[i] === parent) { - // We found a circular reference - circularReplace.push({'resolveTo': i, 'child': child, 'i': cIndex}); - return null; //Just return null for now... - // we will resolve circular references later - } - - // Add to list of all parent objects - circularParent[context] = parent; - // Now continue cloning... - if (util.isArray(parent)) { - child = []; - for(i in parent) - child[i] = _clone(parent[i], context + '[' + i + ']', child, i); - } - else if (util.isDate(parent)) - child = new Date(parent.getTime()); - else if (util.isRegExp(parent)) { - child = new RegExp(parent.source, util.getRegExpFlags(parent)); - if (parent.lastIndex) child.lastIndex = parent.lastIndex; - } else if (useBuffer && Buffer.isBuffer(parent)) - { - child = new Buffer(parent.length); - parent.copy(child); - } - else { - child = {}; - - // Also copy prototype over to new cloned object - child.__proto__ = parent.__proto__; - for(i in parent) - child[i] = _clone(parent[i], context + '[' + i + ']', child, i); - } - - // Add to list of all cloned objects - circularResolved[context] = child; - } - else - child = parent; //Just a simple shallow copy will do - return child; - } - - var i; - if (circular) { - var cloned = _clone(parent, '*'); - - // Now this object has been cloned. Let's check to see if there are any - // circular references for it - for(i in circularReplace) { - var c = circularReplace[i]; - if (c && c.child && c.i in c.child) { - c.child[c.i] = circularResolved[c.resolveTo]; - } - } - return cloned; - } else { - // Deep clone all properties of parent into child - var child; - if (typeof parent == 'object') { - if (parent == null) - return parent; - if (parent.constructor.name === 'Array') { - child = []; - for(i in parent) - child[i] = clone(parent[i], circular); - } - else if (util.isDate(parent)) - child = new Date(parent.getTime() ); - else if (util.isRegExp(parent)) { - child = new RegExp(parent.source, util.getRegExpFlags(parent)); - if (parent.lastIndex) child.lastIndex = parent.lastIndex; - } else { - child = {}; - child.__proto__ = parent.__proto__; - for(i in parent) - child[i] = clone(parent[i], circular); - } - } - else - child = parent; // Just a simple shallow clone will do - return child; - } -} - -/** - * Simple flat clone using prototype, accepts only objects, usefull for property - * override on FLAT configuration object (no nested props). - * - * USE WITH CAUTION! This may not behave as you wish if you do not know how this - * works. - */ -clone.clonePrototype = function(parent) { - if (parent === null) - return null; - - var c = function () {}; - c.prototype = parent; - return new c(); -}; diff --git a/node_modules/gulp-minify-css/node_modules/clone/package.json b/node_modules/gulp-minify-css/node_modules/clone/package.json deleted file mode 100644 index c30ff568..00000000 --- a/node_modules/gulp-minify-css/node_modules/clone/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "clone", - "description": "deep cloning of objects and arrays", - "tags": [ - "clone", - "object", - "array", - "function", - "date" - ], - "version": "0.1.11", - "repository": { - "type": "git", - "url": "git://github.com/pvorb/node-clone.git" - }, - "bugs": { - "url": "https://github.com/pvorb/node-clone/issues" - }, - "main": "clone.js", - "author": { - "name": "Paul Vorbach", - "email": "paul@vorb.de", - "url": "http://vorb.de" - }, - "contributors": [ - { - "name": "Blake Miner", - "email": "miner.blake@gmail.com", - "url": "http://www.blakeminer.com/" - }, - { - "name": "Tian You", - "email": "axqd001@gmail.com", - "url": "http://blog.axqd.net/" - }, - { - "name": "George Stagas", - "email": "gstagas@gmail.com", - "url": "http://stagas.com/" - }, - { - "name": "Tobiasz Cudnik", - "email": "tobiasz.cudnik@gmail.com", - "url": "https://github.com/TobiaszCudnik" - }, - { - "name": "Pavel Lang", - "email": "langpavel@phpskelet.org", - "url": "https://github.com/langpavel" - }, - { - "name": "Dan MacTough", - "url": "http://yabfog.com/" - }, - { - "name": "w1nk", - "url": "https://github.com/w1nk" - }, - { - "name": "Hugh Kennedy", - "url": "http://twitter.com/hughskennedy" - }, - { - "name": "Dustin Diaz", - "url": "http://dustindiaz.com" - }, - { - "name": "Ilya Shaisultanov", - "url": "https://github.com/diversario" - } - ], - "engines": { - "node": "*" - }, - "dependencies": {}, - "devDependencies": { - "underscore": "*", - "nodeunit": "*" - }, - "optionalDependencies": {}, - "scripts": { - "test": "nodeunit test.js" - }, - "readme": "# clone\n\n[![build status](https://secure.travis-ci.org/pvorb/node-clone.png)](http://travis-ci.org/pvorb/node-clone)\n\noffers foolproof _deep cloning_ of variables in JavaScript.\n\n\n## Installation\n\n npm install clone\n\nor\n\n ender build clone\n\n\n## Example\n\n~~~ javascript\nvar clone = require('clone');\n\nvar a, b;\n\na = { foo: { bar: 'baz' } }; // inital value of a\n\nb = clone(a); // clone a -> b\na.foo.bar = 'foo'; // change a\n\nconsole.log(a); // show a\nconsole.log(b); // show b\n~~~\n\nThis will print:\n\n~~~ javascript\n{ foo: { bar: 'foo' } }\n{ foo: { bar: 'baz' } }\n~~~\n\n**clone** masters cloning simple objects (even with custom prototype), arrays,\nDate objects, and RegExp objects. Everything is cloned recursively, so that you\ncan clone dates in arrays in objects, for example.\n\n\n## API\n\n`clone(val, circular)`\n\n * `val` -- the value that you want to clone, any type allowed\n * `circular` -- boolean\n\n Call `clone` with `circular` set to `false` if you are certain that `obj`\n contains no circular references. This will give better performance if needed.\n There is no error if `undefined` or `null` is passed as `obj`.\n\n`clone.clonePrototype(obj)`\n\n * `obj` -- the object that you want to clone\n\nDoes a prototype clone as\n[described by Oran Looney](http://oranlooney.com/functional-javascript/).\n\n\n## Circular References\n\n~~~ javascript\nvar a, b;\n\na = { hello: 'world' };\n\na.myself = a;\nb = clone(a);\n\nconsole.log(b);\n~~~\n\nThis will print:\n\n~~~ javascript\n{ hello: \"world\", myself: [Circular] }\n~~~\n\nSo, `b.myself` points to `b`, not `a`. Neat!\n\n\n## Test\n\n npm test\n\n\n## Caveat\n\nSome special objects like a socket or `process.stdout`/`stderr` are known to not\nbe cloneable. If you find other objects that cannot be cloned, please [open an\nissue](https://github.com/pvorb/node-clone/issues/new).\n\n\n## Bugs and Issues\n\nIf you encounter any bugs or issues, feel free to\n[open an issue at github](https://github.com/pvorb/node-clone/issues) or send me\nan email to <paul@vorb.de>. I also always like to hear from you, if you’re using\nmy code.\n\n## License\n\nCopyright © 2011-2013 Paul Vorbach\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the “Software”), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/pvorb/node-clone", - "_id": "clone@0.1.11", - "_from": "clone@~0.1.11" -} diff --git a/node_modules/gulp-minify-css/node_modules/clone/test.js b/node_modules/gulp-minify-css/node_modules/clone/test.js deleted file mode 100644 index 09804f82..00000000 --- a/node_modules/gulp-minify-css/node_modules/clone/test.js +++ /dev/null @@ -1,217 +0,0 @@ -if(module.parent === null) { - console.log('Run this test file with nodeunit:'); - console.log('$ nodeunit test.js'); -} - - -var clone = require('./'); -var util = require('util'); -var _ = require('underscore'); - - - -exports["clone string"] = function(test) { - test.expect(2); // how many tests? - - var a = "foo"; - test.strictEqual(clone(a), a); - a = ""; - test.strictEqual(clone(a), a); - - test.done(); -}; - - - -exports["clone number"] = function(test) { - test.expect(5); // how many tests? - - var a = 0; - test.strictEqual(clone(a), a); - a = 1; - test.strictEqual(clone(a), a); - a = -1000; - test.strictEqual(clone(a), a); - a = 3.1415927; - test.strictEqual(clone(a), a); - a = -3.1415927; - test.strictEqual(clone(a), a); - - test.done(); -}; - - - -exports["clone date"] = function(test) { - test.expect(3); // how many tests? - - var a = new Date; - var c = clone(a); - test.ok(a instanceof Date); - test.ok(c instanceof Date); - test.equal(c.getTime(), a.getTime()); - - test.done(); -}; - - - -exports["clone object"] = function(test) { - test.expect(2); // how many tests? - - var a = { foo: { bar: "baz" } }; - var b = clone(a); - - test.ok(_(a).isEqual(b), "underscore equal"); - test.deepEqual(b, a); - - test.done(); -}; - - - -exports["clone array"] = function(test) { - test.expect(2); // how many tests? - - var a = [ - { foo: "bar" }, - "baz" - ]; - var b = clone(a); - - test.ok(_(a).isEqual(b), "underscore equal"); - test.deepEqual(b, a); - - test.done(); -}; - -exports["clone buffer"] = function(test) { - test.expect(1); - - var a = new Buffer("this is a test buffer"); - var b = clone(a); - - // no underscore equal since it has no concept of Buffers - test.deepEqual(b, a); - test.done(); -}; - - - -exports["clone regexp"] = function(test) { - test.expect(5); - - var a = /abc123/gi; - var b = clone(a); - - test.deepEqual(b, a); - - var c = /a/g; - test.ok(c.lastIndex === 0); - - c.exec('123a456a'); - test.ok(c.lastIndex === 4); - - var d = clone(c); - test.ok(d.global); - test.ok(d.lastIndex === 4); - - test.done(); -}; - - -exports["clone object containing array"] = function(test) { - test.expect(2); // how many tests? - - var a = { - arr1: [ { a: '1234', b: '2345' } ], - arr2: [ { c: '345', d: '456' } ] - }; - var b = clone(a); - - test.ok(_(a).isEqual(b), "underscore equal"); - test.deepEqual(b, a); - - test.done(); -}; - - - -exports["clone object with circular reference"] = function(test) { - test.expect(8); // how many tests? - - var _ = test.ok; - var c = [1, "foo", {'hello': 'bar'}, function() {}, false, [2]]; - var b = [c, 2, 3, 4]; - var a = {'b': b, 'c': c}; - a.loop = a; - a.loop2 = a; - c.loop = c; - c.aloop = a; - var aCopy = clone(a); - _(a != aCopy); - _(a.c != aCopy.c); - _(aCopy.c == aCopy.b[0]); - _(aCopy.c.loop.loop.aloop == aCopy); - _(aCopy.c[0] == a.c[0]); - - //console.log(util.inspect(aCopy, true, null) ); - //console.log("------------------------------------------------------------"); - //console.log(util.inspect(a, true, null) ); - _(eq(a, aCopy)); - aCopy.c[0] = 2; - _(!eq(a, aCopy)); - aCopy.c = "2"; - _(!eq(a, aCopy)); - //console.log("------------------------------------------------------------"); - //console.log(util.inspect(aCopy, true, null) ); - - function eq(x, y) { - return util.inspect(x, true, null) === util.inspect(y, true, null); - } - - test.done(); -}; - - - -exports['clonePrototype'] = function(test) { - test.expect(3); // how many tests? - - var a = { - a: "aaa", - x: 123, - y: 45.65 - }; - var b = clone.clonePrototype(a); - - test.strictEqual(b.a, a.a); - test.strictEqual(b.x, a.x); - test.strictEqual(b.y, a.y); - - test.done(); -} - -exports['cloneWithinNewVMContext'] = function(test) { - test.expect(3); - var vm = require('vm'); - var ctx = vm.createContext({ clone: clone }); - var script = "clone( {array: [1, 2, 3], date: new Date(), regex: /^foo$/ig} );"; - var results = vm.runInContext(script, ctx); - test.ok(results.array instanceof Array); - test.ok(results.date instanceof Date); - test.ok(results.regex instanceof RegExp); - test.done(); -} - -exports['cloneObjectWithNoConstructor'] = function(test) { - test.expect(3); - var n = null; - var a = { foo: 'bar' }; - a.__proto__ = n; - test.ok(typeof a === 'object'); - test.ok(typeof a !== null); - var b = clone(a); - test.ok(a.foo, b.foo); - test.done(); -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/.npmignore b/node_modules/gulp-minify-css/node_modules/event-stream/.npmignore deleted file mode 100644 index 13abef4f..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/.travis.yml b/node_modules/gulp-minify-css/node_modules/event-stream/.travis.yml deleted file mode 100644 index 895dbd36..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/LICENCE b/node_modules/gulp-minify-css/node_modules/event-stream/LICENCE deleted file mode 100644 index 171dd970..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/LICENCE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011 Dominic Tarr - -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-minify-css/node_modules/event-stream/examples/pretty.js b/node_modules/gulp-minify-css/node_modules/event-stream/examples/pretty.js deleted file mode 100644 index af043401..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/examples/pretty.js +++ /dev/null @@ -1,25 +0,0 @@ - -var inspect = require('util').inspect - -if(!module.parent) { - var es = require('..') //load event-stream - es.pipe( //pipe joins streams together - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - var j - try { - j = JSON.parse(data) //try to parse input into json - } catch (err) { - return callback(null, data) //if it fails just pass it anyway - } - callback(null, inspect(j)) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) - } - -// run this -// -// curl -sS registry.npmjs.org/event-stream | node pretty.js -// diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/index.js deleted file mode 100644 index a7c05bbb..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/index.js +++ /dev/null @@ -1,302 +0,0 @@ -//filter will reemit the data if cb(err,pass) pass is truthy - -// reduce is more tricky -// maybe we want to group the reductions or emit progress updates occasionally -// the most basic reduce just emits one 'data' event after it has recieved 'end' - -var Stream = require('stream').Stream - , es = exports - , through = require('through') - , from = require('from') - , duplex = require('duplexer') - , map = require('map-stream') - , pause = require('pause-stream') - , split = require('split') - , pipeline = require('stream-combiner') - -es.Stream = Stream //re-export Stream from core -es.through = through -es.from = from -es.duplex = duplex -es.map = map -es.pause = pause -es.split = split -es.pipeline = es.connect = es.pipe = pipeline -// merge / concat -// -// combine multiple streams into a single stream. -// will emit end only once - -es.concat = //actually this should be called concat -es.merge = function (/*streams...*/) { - var toMerge = [].slice.call(arguments) - var stream = new Stream() - var endCount = 0 - stream.writable = stream.readable = true - - toMerge.forEach(function (e) { - e.pipe(stream, {end: false}) - var ended = false - e.on('end', function () { - if(ended) return - ended = true - endCount ++ - if(endCount == toMerge.length) - stream.emit('end') - }) - }) - stream.write = function (data) { - this.emit('data', data) - } - stream.destroy = function () { - merge.forEach(function (e) { - if(e.destroy) e.destroy() - }) - } - return stream -} - - -// writable stream, collects all events into an array -// and calls back when 'end' occurs -// mainly I'm using this to test the other functions - -es.writeArray = function (done) { - if ('function' !== typeof done) - throw new Error('function writeArray (done): done must be function') - - var a = new Stream () - , array = [], isDone = false - a.write = function (l) { - array.push(l) - } - a.end = function () { - isDone = true - done(null, array) - } - a.writable = true - a.readable = false - a.destroy = function () { - a.writable = a.readable = false - if(isDone) return - done(new Error('destroyed before end'), array) - } - return a -} - -//return a Stream that reads the properties of an object -//respecting pause() and resume() - -es.readArray = function (array) { - var stream = new Stream() - , i = 0 - , paused = false - , ended = false - - stream.readable = true - stream.writable = false - - if(!Array.isArray(array)) - throw new Error('event-stream.read expects an array') - - stream.resume = function () { - if(ended) return - paused = false - var l = array.length - while(i < l && !paused && !ended) { - stream.emit('data', array[i++]) - } - if(i == l && !ended) - ended = true, stream.readable = false, stream.emit('end') - } - process.nextTick(stream.resume) - stream.pause = function () { - paused = true - } - stream.destroy = function () { - ended = true - stream.emit('close') - } - return stream -} - -// -// readable (asyncFunction) -// return a stream that calls an async function while the stream is not paused. -// -// the function must take: (count, callback) {... -// - -es.readable = -function (func, continueOnError) { - var stream = new Stream() - , i = 0 - , paused = false - , ended = false - , reading = false - - stream.readable = true - stream.writable = false - - if('function' !== typeof func) - throw new Error('event-stream.readable expects async function') - - stream.on('end', function () { ended = true }) - - function get (err, data) { - - if(err) { - stream.emit('error', err) - if(!continueOnError) stream.emit('end') - } else if (arguments.length > 1) - stream.emit('data', data) - - process.nextTick(function () { - if(ended || paused || reading) return - try { - reading = true - func.call(stream, i++, function () { - reading = false - get.apply(null, arguments) - }) - } catch (err) { - stream.emit('error', err) - } - }) - } - stream.resume = function () { - paused = false - get() - } - process.nextTick(get) - stream.pause = function () { - paused = true - } - stream.destroy = function () { - stream.emit('end') - stream.emit('close') - ended = true - } - return stream -} - - -// -// map sync -// - -es.mapSync = function (sync) { - return es.through(function write(data) { - var mappedData = sync(data) - if (typeof mappedData !== 'undefined') - this.emit('data', mappedData) - }) -} - -// -// log just print out what is coming through the stream, for debugging -// - -es.log = function (name) { - return es.through(function (data) { - var args = [].slice.call(arguments) - if(name) console.error(name, data) - else console.error(data) - this.emit('data', data) - }) -} - - -// -// child -- pipe through a child process -// - -es.child = function (child) { - - return es.duplex(child.stdin, child.stdout) - -} - -// -// parse -// -// must be used after es.split() to ensure that each chunk represents a line -// source.pipe(es.split()).pipe(es.parse()) - -es.parse = function () { - return es.through(function (data) { - var obj - try { - if(data) //ignore empty lines - obj = JSON.parse(data.toString()) - } catch (err) { - return console.error(err, 'attemping to parse:', data) - } - //ignore lines that where only whitespace. - if(obj !== undefined) - this.emit('data', obj) - }) -} -// -// stringify -// - -es.stringify = function () { - var Buffer = require('buffer').Buffer - return es.mapSync(function (e){ - return JSON.stringify(Buffer.isBuffer(e) ? e.toString() : e) + '\n' - }) -} - -// -// replace a string within a stream. -// -// warn: just concatenates the string and then does str.split().join(). -// probably not optimal. -// for smallish responses, who cares? -// I need this for shadow-npm so it's only relatively small json files. - -es.replace = function (from, to) { - return es.pipeline(es.split(from), es.join(to)) -} - -// -// join chunks with a joiner. just like Array#join -// also accepts a callback that is passed the chunks appended together -// this is still supported for legacy reasons. -// - -es.join = function (str) { - - //legacy api - if('function' === typeof str) - return es.wait(str) - - var first = true - return es.through(function (data) { - if(!first) - this.emit('data', str) - first = false - this.emit('data', data) - return true - }) -} - - -// -// wait. callback when 'end' is emitted, with all chunks appended as string. -// - -es.wait = function (callback) { - var body = '' - return es.through(function (data) { body += data }, - function () { - this.emit('data', body) - this.emit('end') - if(callback) callback(null, body) - }) -} - -es.pipeable = function () { - throw new Error('[EVENT-STREAM] es.pipeable is deprecated') -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/.npmignore b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/.npmignore deleted file mode 100644 index 062c11e8..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -*.err \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/.travis.yml b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/.travis.yml deleted file mode 100644 index ed05f88d..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" - - "0.8" - - "0.6" diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/LICENCE b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/LICENCE deleted file mode 100644 index a23e08a8..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -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-minify-css/node_modules/event-stream/node_modules/duplexer/README.md b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/README.md deleted file mode 100644 index 61ff71aa..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# duplexer - -[![build status][1]][2] [![dependency status][3]][4] - -[![browser support][5]][6] - -Creates a duplex stream - -Taken from [event-stream][7] - -## duplex (writeStream, readStream) - -Takes a writable stream and a readable stream and makes them appear as a readable writable stream. - -It is assumed that the two streams are connected to each other in some way. - -## Example - -```js -var grep = cp.exec('grep Stream') - -duplex(grep.stdin, grep.stdout) -``` - -## Installation - -`npm install duplexer` - -## Tests - -`npm test` - -## Contributors - - - Dominictarr - - Raynos - - samccone - -## MIT Licenced - - [1]: https://secure.travis-ci.org/Raynos/duplexer.png - [2]: https://travis-ci.org/Raynos/duplexer - [3]: https://david-dm.org/Raynos/duplexer.png - [4]: https://david-dm.org/Raynos/duplexer - [5]: https://ci.testling.com/Raynos/duplexer.png - [6]: https://ci.testling.com/Raynos/duplexer - [7]: https://github.com/dominictarr/event-stream#duplex-writestream-readstream diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/index.js deleted file mode 100644 index a188a210..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/index.js +++ /dev/null @@ -1,87 +0,0 @@ -var Stream = require("stream") -var writeMethods = ["write", "end", "destroy"] -var readMethods = ["resume", "pause"] -var readEvents = ["data", "close"] -var slice = Array.prototype.slice - -module.exports = duplex - -function forEach (arr, fn) { - if (arr.forEach) { - return arr.forEach(fn) - } - - for (var i = 0; i < arr.length; i++) { - fn(arr[i], i) - } -} - -function duplex(writer, reader) { - var stream = new Stream() - var ended = false - - forEach(writeMethods, proxyWriter) - - forEach(readMethods, proxyReader) - - forEach(readEvents, proxyStream) - - reader.on("end", handleEnd) - - writer.on("drain", function() { - stream.emit("drain") - }) - - writer.on("error", reemit) - reader.on("error", reemit) - - stream.writable = writer.writable - stream.readable = reader.readable - - return stream - - function proxyWriter(methodName) { - stream[methodName] = method - - function method() { - return writer[methodName].apply(writer, arguments) - } - } - - function proxyReader(methodName) { - stream[methodName] = method - - function method() { - stream.emit(methodName) - var func = reader[methodName] - if (func) { - return func.apply(reader, arguments) - } - reader.emit(methodName) - } - } - - function proxyStream(methodName) { - reader.on(methodName, reemit) - - function reemit() { - var args = slice.call(arguments) - args.unshift(methodName) - stream.emit.apply(stream, args) - } - } - - function handleEnd() { - if (ended) { - return - } - ended = true - var args = slice.call(arguments) - args.unshift("end") - stream.emit.apply(stream, args) - } - - function reemit(err) { - stream.emit("error", err) - } -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/package.json b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/package.json deleted file mode 100644 index 86ab2145..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "duplexer", - "version": "0.1.1", - "description": "Creates a duplex stream", - "keywords": [], - "author": { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - "repository": { - "type": "git", - "url": "git://github.com/Raynos/duplexer.git" - }, - "main": "index", - "homepage": "https://github.com/Raynos/duplexer", - "contributors": [ - { - "name": "Jake Verbaten" - } - ], - "bugs": { - "url": "https://github.com/Raynos/duplexer/issues", - "email": "raynos2@gmail.com" - }, - "devDependencies": { - "tape": "0.3.3", - "through": "~0.1.4" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/Raynos/duplexer/raw/master/LICENSE" - } - ], - "scripts": { - "test": "node test" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "ie/8..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" - ] - }, - "readme": "# duplexer\n\n[![build status][1]][2] [![dependency status][3]][4]\n\n[![browser support][5]][6]\n\nCreates a duplex stream\n\nTaken from [event-stream][7]\n\n## duplex (writeStream, readStream)\n\nTakes a writable stream and a readable stream and makes them appear as a readable writable stream.\n\nIt is assumed that the two streams are connected to each other in some way.\n\n## Example\n\n```js\nvar grep = cp.exec('grep Stream')\n\nduplex(grep.stdin, grep.stdout)\n```\n\n## Installation\n\n`npm install duplexer`\n\n## Tests\n\n`npm test`\n\n## Contributors\n\n - Dominictarr\n - Raynos\n - samccone\n\n## MIT Licenced\n\n [1]: https://secure.travis-ci.org/Raynos/duplexer.png\n [2]: https://travis-ci.org/Raynos/duplexer\n [3]: https://david-dm.org/Raynos/duplexer.png\n [4]: https://david-dm.org/Raynos/duplexer\n [5]: https://ci.testling.com/Raynos/duplexer.png\n [6]: https://ci.testling.com/Raynos/duplexer\n [7]: https://github.com/dominictarr/event-stream#duplex-writestream-readstream\n", - "readmeFilename": "README.md", - "_id": "duplexer@0.1.1", - "_from": "duplexer@~0.1.1" -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/test/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/test/index.js deleted file mode 100644 index 4988e0d9..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/duplexer/test/index.js +++ /dev/null @@ -1,31 +0,0 @@ -var through = require("through") -var test = require("tape") - -var duplex = require("../index") - -var readable = through() -var writable = through(write) -var written = 0 -var data = 0 - -var stream = duplex(writable, readable) - -function write() { - written++ -} - -stream.on("data", ondata) - -function ondata() { - data++ -} - -test("emit and write", function(t) { - t.plan(2) - - stream.write() - readable.emit("data") - - t.equal(written, 1, "should have written once") - t.equal(data, 1, "should have recived once") -}) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/.npmignore b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/LICENSE.APACHE2 b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/LICENSE.APACHE2 deleted file mode 100644 index 6366c047..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/LICENSE.APACHE2 +++ /dev/null @@ -1,15 +0,0 @@ -Apache License, Version 2.0 - -Copyright (c) 2011 Dominic Tarr - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/LICENSE.MIT b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/LICENSE.MIT deleted file mode 100644 index 6eafbd73..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/LICENSE.MIT +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2011 Dominic Tarr - -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-minify-css/node_modules/event-stream/node_modules/from/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/index.js deleted file mode 100644 index bba40da8..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/index.js +++ /dev/null @@ -1,68 +0,0 @@ - -'use strict'; - -var Stream = require('stream') - -// from -// -// a stream that reads from an source. -// source may be an array, or a function. -// from handles pause behaviour for you. - -module.exports = -function from (source) { - if(Array.isArray(source)) { - source = source.slice() - return from (function (i) { - if(source.length) - this.emit('data', source.shift()) - else - this.emit('end') - return true - }) - } - var s = new Stream(), i = 0 - s.ended = false - s.started = false - s.readable = true - s.writable = false - s.paused = false - s.ended = false - s.pause = function () { - s.started = true - s.paused = true - } - function next () { - s.started = true - if(s.ended) return - while(!s.ended && !s.paused && source.call(s, i++, function () { - if(!s.ended && !s.paused) - next() - })) - ; - } - s.resume = function () { - s.started = true - s.paused = false - next() - } - s.on('end', function () { - s.ended = true - s.readable = false - process.nextTick(s.destroy) - }) - s.destroy = function () { - s.ended = true - s.emit('close') - } - /* - by default, the stream will start emitting at nextTick - if you want, you can pause it, after pipeing. - you can also resume before next tick, and that will also - work. - */ - process.nextTick(function () { - if(!s.started) s.resume() - }) - return s -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/package.json b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/package.json deleted file mode 100644 index 225113d8..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "from", - "version": "0.1.3", - "description": "Easy way to make a Readable Stream", - "main": "index.js", - "scripts": { - "test": "asynct test/*.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/from.git" - }, - "keywords": [ - "stream", - "streams", - "readable", - "easy" - ], - "devDependencies": { - "asynct": "1", - "stream-spec": "0", - "assertions": "~2.3.0" - }, - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "dominictarr.com" - }, - "license": "MIT", - "readme": "# from\n\nAn easy way to create a `readable Stream`.\n\n## from(function getChunk(count, next))\n\nfrom takes a `getChunk` function and returns a stream. \n\n`getChunk` is called again and again, after each time the user calls `next()`, \nuntil the user emits `'end'`\n\nif `pause()` is called, the `getChunk` won't be called again untill `resume()` is called.\n\n\n```js\nvar from = require('from')\n\nvar stream = \n from(function getChunk(count, next) {\n //do some sort of data\n this.emit('data', whatever)\n \n if(itsOver)\n this.emit('end')\n\n //ready to handle the next chunk\n next()\n //or, if it's sync:\n return true \n })\n```\n\n## from(array)\n\nfrom also takes an `Array` whose elements it emits one after another.\n\n## License\nMIT / Apache2\n", - "readmeFilename": "readme.markdown", - "bugs": { - "url": "https://github.com/dominictarr/from/issues" - }, - "homepage": "https://github.com/dominictarr/from", - "_id": "from@0.1.3", - "_from": "from@~0" -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/readme.markdown b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/readme.markdown deleted file mode 100644 index a619163c..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/readme.markdown +++ /dev/null @@ -1,38 +0,0 @@ -# from - -An easy way to create a `readable Stream`. - -## from(function getChunk(count, next)) - -from takes a `getChunk` function and returns a stream. - -`getChunk` is called again and again, after each time the user calls `next()`, -until the user emits `'end'` - -if `pause()` is called, the `getChunk` won't be called again untill `resume()` is called. - - -```js -var from = require('from') - -var stream = - from(function getChunk(count, next) { - //do some sort of data - this.emit('data', whatever) - - if(itsOver) - this.emit('end') - - //ready to handle the next chunk - next() - //or, if it's sync: - return true - }) -``` - -## from(array) - -from also takes an `Array` whose elements it emits one after another. - -## License -MIT / Apache2 diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/test/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/test/index.js deleted file mode 100644 index fafea576..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/from/test/index.js +++ /dev/null @@ -1,141 +0,0 @@ -var from = require('..') -var spec = require('stream-spec') -var a = require('assertions') - -function read(stream, callback) { - var actual = [] - stream.on('data', function (data) { - actual.push(data) - }) - stream.once('end', function () { - callback(null, actual) - }) - stream.once('error', function (err) { - callback(err) - }) -} - -function pause(stream) { - stream.on('data', function () { - if(Math.random() > 0.1) return - stream.pause() - process.nextTick(function () { - stream.resume() - }) - }) -} - -exports['inc'] = function (test) { - - var fs = from(function (i) { - this.emit('data', i) - if(i >= 99) - return this.emit('end') - return true - }) - - spec(fs).readable().validateOnExit() - - read(fs, function (err, arr) { - test.equal(arr.length, 100) - test.done() - }) -} - -exports['simple'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = from(expected.slice()) - - spec(t) - .readable() - .pausable({strict: true}) - .validateOnExit() - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected) - test.done() - }) - -} - -exports['simple pausable'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = from(expected.slice()) - - spec(t) - .readable() - .pausable({strict: true}) - .validateOnExit() - - pause(t) - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected) - test.done() - }) - -} - -exports['simple (not strictly pausable) setTimeout'] = function (test) { - - var l = 10 - , expected = [] - while(l--) expected.push(l * Math.random()) - - - var _expected = expected.slice() - var t = from(function (i, n) { - var self = this - setTimeout(function () { - if(_expected.length) - self.emit('data', _expected.shift()) - else - self.emit('end') - n() - }, 3) - }) - - /* - using from in this way will not be strictly pausable. - it could be extended to buffer outputs, but I think a better - way would be to use a PauseStream that implements strict pause. - */ - - spec(t) - .readable() - .pausable({strict: false }) - .validateOnExit() - - //pause(t) - var paused = false - var i = setInterval(function () { - if(!paused) t.pause() - else t.resume() - paused = !paused - }, 2) - - t.on('end', function () { - clearInterval(i) - }) - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected) - test.done() - }) - -} - - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/.npmignore b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/.npmignore deleted file mode 100644 index 13abef4f..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/.travis.yml b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/.travis.yml deleted file mode 100644 index 895dbd36..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/LICENCE b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/LICENCE deleted file mode 100644 index 171dd970..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/LICENCE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011 Dominic Tarr - -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-minify-css/node_modules/event-stream/node_modules/map-stream/examples/pretty.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/examples/pretty.js deleted file mode 100644 index ab073987..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/examples/pretty.js +++ /dev/null @@ -1,26 +0,0 @@ - -var inspect = require('util').inspect - -if(!module.parent) { - var map = require('..') //load map-stream - var es = require('event-stream') //load event-stream - es.pipe( //pipe joins streams together - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - map(function (data, callback) { //turn this async function into a stream - var j - try { - j = JSON.parse(data) //try to parse input into json - } catch (err) { - return callback(null, data) //if it fails just pass it anyway - } - callback(null, inspect(j)) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) - } - -// run this -// -// curl -sS registry.npmjs.org/event-stream | node pretty.js -// diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/index.js deleted file mode 100644 index 09ae829d..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/index.js +++ /dev/null @@ -1,145 +0,0 @@ -//filter will reemit the data if cb(err,pass) pass is truthy - -// reduce is more tricky -// maybe we want to group the reductions or emit progress updates occasionally -// the most basic reduce just emits one 'data' event after it has recieved 'end' - - -var Stream = require('stream').Stream - - -//create an event stream and apply function to each .write -//emitting each response as data -//unless it's an empty callback - -module.exports = function (mapper, opts) { - - var stream = new Stream() - , self = this - , inputs = 0 - , outputs = 0 - , ended = false - , paused = false - , destroyed = false - , lastWritten = 0 - , inNext = false - - this.opts = opts || {}; - var errorEventName = this.opts.failures ? 'failure' : 'error'; - - // Items that are not ready to be written yet (because they would come out of - // order) get stuck in a queue for later. - var writeQueue = {} - - stream.writable = true - stream.readable = true - - function queueData (data, number) { - var nextToWrite = lastWritten + 1 - - if (number === nextToWrite) { - // If it's next, and its not undefined write it - if (data !== undefined) { - stream.emit.apply(stream, ['data', data]) - } - lastWritten ++ - nextToWrite ++ - } else { - // Otherwise queue it for later. - writeQueue[number] = data - } - - // If the next value is in the queue, write it - if (writeQueue.hasOwnProperty(nextToWrite)) { - var dataToWrite = writeQueue[nextToWrite] - delete writeQueue[nextToWrite] - return queueData(dataToWrite, nextToWrite) - } - - outputs ++ - if(inputs === outputs) { - if(paused) paused = false, stream.emit('drain') //written all the incoming events - if(ended) end() - } - } - - function next (err, data, number) { - if(destroyed) return - inNext = true - - if (!err || self.opts.failures) { - queueData(data, number) - } - - if (err) { - stream.emit.apply(stream, [ errorEventName, err ]); - } - - inNext = false; - } - - // Wrap the mapper function by calling its callback with the order number of - // the item in the stream. - function wrappedMapper (input, number, callback) { - return mapper.call(null, input, function(err, data){ - callback(err, data, number) - }) - } - - stream.write = function (data) { - if(ended) throw new Error('map stream is not writable') - inNext = false - inputs ++ - - try { - //catch sync errors and handle them like async errors - var written = wrappedMapper(data, inputs, next) - paused = (written === false) - return !paused - } catch (err) { - //if the callback has been called syncronously, and the error - //has occured in an listener, throw it again. - if(inNext) - throw err - next(err) - return !paused - } - } - - function end (data) { - //if end was called with args, write it, - ended = true //write will emit 'end' if ended is true - stream.writable = false - if(data !== undefined) { - return queueData(data, inputs) - } else if (inputs == outputs) { //wait for processing - stream.readable = false, stream.emit('end'), stream.destroy() - } - } - - stream.end = function (data) { - if(ended) return - end() - } - - stream.destroy = function () { - ended = destroyed = true - stream.writable = stream.readable = paused = false - process.nextTick(function () { - stream.emit('close') - }) - } - stream.pause = function () { - paused = true - } - - stream.resume = function () { - paused = false - } - - return stream -} - - - - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/package.json b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/package.json deleted file mode 100644 index e9c4ee04..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "map-stream", - "version": "0.1.0", - "description": "construct pipes of streams of events", - "homepage": "http://github.com/dominictarr/map-stream", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/map-stream.git" - }, - "dependencies": {}, - "devDependencies": { - "asynct": "*", - "it-is": "1", - "ubelt": "~2.9", - "stream-spec": "~0.2", - "event-stream": "~2.1", - "from": "0.0.2" - }, - "scripts": { - "test": "asynct test/" - }, - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "http://dominictarr.com" - }, - "readme": "# MapStream\n\nRefactored out of [event-stream](https://github.com/dominictarr/event-stream)\n\n##map (asyncFunction[, options])\n\nCreate a through stream from an asyncronous function. \n\n``` js\nvar map = require('map-stream')\n\nmap(function (data, callback) {\n //transform data\n // ...\n callback(null, data)\n})\n\n```\n\nEach map MUST call the callback. It may callback with data, with an error or with no arguments, \n\n * `callback()` drop this data. \n this makes the map work like `filter`, \n note:`callback(null,null)` is not the same, and will emit `null`\n\n * `callback(null, newData)` turn data into newData\n \n * `callback(error)` emit an error for this item.\n\n>Note: if a callback is not called, `map` will think that it is still being processed, \n>every call must be answered or the stream will not know when to end. \n>\n>Also, if the callback is called more than once, every call but the first will be ignored.\n\n##Options \n\n * `failures` - `boolean` continue mapping even if error occured. On error `map-stream` will emit `failure` event. (default: `false`)\n", - "readmeFilename": "readme.markdown", - "bugs": { - "url": "https://github.com/dominictarr/map-stream/issues" - }, - "_id": "map-stream@0.1.0", - "_from": "map-stream@~0.1.0" -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/readme.markdown b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/readme.markdown deleted file mode 100644 index 18971588..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/readme.markdown +++ /dev/null @@ -1,37 +0,0 @@ -# MapStream - -Refactored out of [event-stream](https://github.com/dominictarr/event-stream) - -##map (asyncFunction[, options]) - -Create a through stream from an asyncronous function. - -``` js -var map = require('map-stream') - -map(function (data, callback) { - //transform data - // ... - callback(null, data) -}) - -``` - -Each map MUST call the callback. It may callback with data, with an error or with no arguments, - - * `callback()` drop this data. - this makes the map work like `filter`, - note:`callback(null,null)` is not the same, and will emit `null` - - * `callback(null, newData)` turn data into newData - - * `callback(error)` emit an error for this item. - ->Note: if a callback is not called, `map` will think that it is still being processed, ->every call must be answered or the stream will not know when to end. -> ->Also, if the callback is called more than once, every call but the first will be ignored. - -##Options - - * `failures` - `boolean` continue mapping even if error occured. On error `map-stream` will emit `failure` event. (default: `false`) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/test/simple-map.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/test/simple-map.asynct.js deleted file mode 100644 index 2b9a2922..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/map-stream/test/simple-map.asynct.js +++ /dev/null @@ -1,318 +0,0 @@ -'use strict'; - -var map = require('../') - , it = require('it-is') - , u = require('ubelt') - , spec = require('stream-spec') - , from = require('from') - , Stream = require('stream') - , es = require('event-stream') - -//REFACTOR THIS TEST TO USE es.readArray and es.writeArray - -function writeArray(array, stream) { - - array.forEach( function (j) { - stream.write(j) - }) - stream.end() - -} - -function readStream(stream, done) { - - var array = [] - stream.on('data', function (data) { - array.push(data) - }) - stream.on('error', done) - stream.on('end', function (data) { - done(null, array) - }) - -} - -//call sink on each write, -//and complete when finished. - -function pauseStream (prob, delay) { - var pauseIf = ( - 'number' == typeof prob - ? function () { - return Math.random() < prob - } - : 'function' == typeof prob - ? prob - : 0.1 - ) - var delayer = ( - !delay - ? process.nextTick - : 'number' == typeof delay - ? function (next) { setTimeout(next, delay) } - : delay - ) - - return es.through(function (data) { - if(!this.paused && pauseIf()) { - console.log('PAUSE STREAM PAUSING') - this.pause() - var self = this - delayer(function () { - console.log('PAUSE STREAM RESUMING') - self.resume() - }) - } - console.log("emit ('data', " + data + ')') - this.emit('data', data) - }) -} - -exports ['simple map applied to a stream'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - - var doubler = map(function (data, cb) { - cb(null, data * 2) - }) - - spec(doubler).through().validateOnExit() - - //a map is only a middle man, so it is both readable and writable - - it(doubler).has({ - readable: true, - writable: true, - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 2 - })) -// process.nextTick(x.validate) - test.done() - }) - - writeArray(input, doubler) - -} - -exports ['stream comes back in the correct order'] = function (test) { - var input = [3, 2, 1] - - var delayer = map(function(data, cb){ - setTimeout(function () { - cb(null, data) - }, 100 * data) - }) - - readStream(delayer, function (err, output) { - it(output).deepEqual(input) - test.done() - }) - - writeArray(input, delayer) -} - -exports ['continues on error event with failures `true`'] = function (test) { - var input = [1, 2, 3] - - var delayer = map(function(data, cb){ - cb(new Error('Something gone wrong'), data) - }, { failures: true }) - - readStream(delayer, function (err, output) { - it(output).deepEqual(input) - test.done() - }) - - writeArray(input, delayer) -} - -exports['pipe two maps together'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - function dd (data, cb) { - cb(null, data * 2) - } - var doubler1 = map(dd), doubler2 = map(dd) - - doubler1.pipe(doubler2) - - spec(doubler1).through().validateOnExit() - spec(doubler2).through().validateOnExit() - - readStream(doubler2, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 4 - })) - test.done() - }) - - writeArray(input, doubler1) - -} - -//next: -// -// test pause, resume and drian. -// - -// then make a pipe joiner: -// -// plumber (evStr1, evStr2, evStr3, evStr4, evStr5) -// -// will return a single stream that write goes to the first - -exports ['map will not call end until the callback'] = function (test) { - - var ticker = map(function (data, cb) { - process.nextTick(function () { - cb(null, data * 2) - }) - }) - - spec(ticker).through().validateOnExit() - - ticker.write('x') - ticker.end() - - ticker.on('end', function () { - test.done() - }) -} - -exports ['emit failures with opts.failures === `ture`'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - map(function () { - throw err - }, { failures: true }) - - mapper.on('failure', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['emit error thrown'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - map(function () { - throw err - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['emit error calledback'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - map(function (data, callback) { - callback(err) - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['do not emit drain if not paused'] = function (test) { - - var maps = map(function (data, callback) { - u.delay(callback)(null, 1) - return true - }) - - spec(maps).through().pausable().validateOnExit() - - maps.on('drain', function () { - it(false).ok('should not emit drain unless the stream is paused') - }) - - it(maps.write('hello')).equal(true) - it(maps.write('hello')).equal(true) - it(maps.write('hello')).equal(true) - setTimeout(function () {maps.end()},10) - maps.on('end', test.done) -} - -exports ['emits drain if paused, when all '] = function (test) { - var active = 0 - var drained = false - var maps = map(function (data, callback) { - active ++ - u.delay(function () { - active -- - callback(null, 1) - })() - console.log('WRITE', false) - return false - }) - - spec(maps).through().validateOnExit() - - maps.on('drain', function () { - drained = true - it(active).equal(0, 'should emit drain when all maps are done') - }) - - it(maps.write('hello')).equal(false) - it(maps.write('hello')).equal(false) - it(maps.write('hello')).equal(false) - - process.nextTick(function () {maps.end()},10) - - maps.on('end', function () { - console.log('end') - it(drained).ok('shoud have emitted drain before end') - test.done() - }) - -} - -exports ['map applied to a stream with filtering'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - - var doubler = map(function (data, callback) { - if (data % 2) - callback(null, data * 2) - else - callback() - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.filter(function (j) { - return j % 2 - }).map(function (j) { - return j * 2 - })) - test.done() - }) - - spec(doubler).through().validateOnExit() - - writeArray(input, doubler) - -} - - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/.npmignore b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/.npmignore deleted file mode 100644 index 13abef4f..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/LICENSE b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/LICENSE deleted file mode 100644 index 6a477d4c..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/LICENSE +++ /dev/null @@ -1,231 +0,0 @@ -Dual Licensed MIT and Apache 2 - -The MIT License - -Copyright (c) 2013 Dominic Tarr - -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. - - - ----------------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2013 Dominic Tarr - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/index.js deleted file mode 100644 index 0e0bf96b..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/index.js +++ /dev/null @@ -1,3 +0,0 @@ -//through@2 handles this by default! -module.exports = require('through') - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/package.json b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/package.json deleted file mode 100644 index 12224533..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "pause-stream", - "version": "0.0.11", - "description": "a ThroughStream that strictly buffers all readable events when paused.", - "main": "index.js", - "directories": { - "test": "test" - }, - "devDependencies": { - "stream-tester": "0.0.2", - "stream-spec": "~0.2.0" - }, - "scripts": { - "test": "node test/index.js && node test/pause-end.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/pause-stream.git" - }, - "keywords": [ - "stream", - "pipe", - "pause", - "drain", - "buffer" - ], - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "dominictarr.com" - }, - "license": [ - "MIT", - "Apache2" - ], - "dependencies": { - "through": "~2.3" - }, - "readme": "# PauseStream\n\nThis is a `Stream` that will strictly buffer when paused.\nConnect it to anything you need buffered.\n\n``` js\n var ps = require('pause-stream')();\n\n badlyBehavedStream.pipe(ps.pause())\n\n aLittleLater(function (err, data) {\n ps.pipe(createAnotherStream(data))\n ps.resume()\n })\n```\n\n`PauseStream` will buffer whenever paused.\nit will buffer when yau have called `pause` manually.\nbut also when it's downstream `dest.write()===false`.\nit will attempt to drain the buffer when you call resume\nor the downstream emits `'drain'`\n\n`PauseStream` is tested using [stream-spec](https://github.com/dominictarr/stream-spec)\nand [stream-tester](https://github.com/dominictarr/stream-tester)\n\nThis is now the default case of \n[through](https://github.com/dominictarr/through)\n\nhttps://github.com/dominictarr/pause-stream/commit/4a6fe3dc2c11091b1efbfde912e0473719ed9cc0\n", - "readmeFilename": "readme.markdown", - "bugs": { - "url": "https://github.com/dominictarr/pause-stream/issues" - }, - "homepage": "https://github.com/dominictarr/pause-stream", - "_id": "pause-stream@0.0.11", - "_from": "pause-stream@0.0.11" -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/readme.markdown b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/readme.markdown deleted file mode 100644 index 23669391..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/readme.markdown +++ /dev/null @@ -1,29 +0,0 @@ -# PauseStream - -This is a `Stream` that will strictly buffer when paused. -Connect it to anything you need buffered. - -``` js - var ps = require('pause-stream')(); - - badlyBehavedStream.pipe(ps.pause()) - - aLittleLater(function (err, data) { - ps.pipe(createAnotherStream(data)) - ps.resume() - }) -``` - -`PauseStream` will buffer whenever paused. -it will buffer when yau have called `pause` manually. -but also when it's downstream `dest.write()===false`. -it will attempt to drain the buffer when you call resume -or the downstream emits `'drain'` - -`PauseStream` is tested using [stream-spec](https://github.com/dominictarr/stream-spec) -and [stream-tester](https://github.com/dominictarr/stream-tester) - -This is now the default case of -[through](https://github.com/dominictarr/through) - -https://github.com/dominictarr/pause-stream/commit/4a6fe3dc2c11091b1efbfde912e0473719ed9cc0 diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/test/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/test/index.js deleted file mode 100644 index db8778da..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/test/index.js +++ /dev/null @@ -1,17 +0,0 @@ -var spec = require('stream-spec') -var tester = require('stream-tester') -var ps = require('..')() - -spec(ps) - .through({strict: false}) - .validateOnExit() - -var master = tester.createConsistent - -tester.createRandomStream(1000) //1k random numbers - .pipe(master = tester.createConsistentStream()) - .pipe(tester.createUnpauseStream()) - .pipe(ps) - .pipe(tester.createPauseStream()) - .pipe(master.createSlave()) - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/test/pause-end.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/test/pause-end.js deleted file mode 100644 index a6c27ef1..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/pause-stream/test/pause-end.js +++ /dev/null @@ -1,33 +0,0 @@ - -var pause = require('..') -var assert = require('assert') - -var ps = pause() -var read = [], ended = false - -ps.on('data', function (i) { - read.push(i) -}) - -ps.on('end', function () { - ended = true -}) - -assert.deepEqual(read, []) - -ps.write(0) -ps.write(1) -ps.write(2) - -assert.deepEqual(read, [0, 1, 2]) - -ps.pause() - -assert.deepEqual(read, [0, 1, 2]) - -ps.end() -assert.equal(ended, false) -ps.resume() -assert.equal(ended, true) - - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/.npmignore b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/.npmignore deleted file mode 100644 index 13abef4f..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/.travis.yml b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/.travis.yml deleted file mode 100644 index dad2273c..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.8 - - "0.10" diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/LICENCE b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/LICENCE deleted file mode 100644 index 171dd970..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/LICENCE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011 Dominic Tarr - -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-minify-css/node_modules/event-stream/node_modules/split/examples/pretty.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/examples/pretty.js deleted file mode 100644 index 2e891316..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/examples/pretty.js +++ /dev/null @@ -1,26 +0,0 @@ - -var inspect = require('util').inspect -var es = require('event-stream') //load event-stream -var split = require('../') - -if(!module.parent) { - es.pipe( //pipe joins streams together - process.openStdin(), //open stdin - split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - var j - try { - j = JSON.parse(data) //try to parse input into json - } catch (err) { - return callback(null, data) //if it fails just pass it anyway - } - callback(null, inspect(j)) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) - } - -// run this -// -// curl -sS registry.npmjs.org/event-stream | node pretty.js -// diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/index.js deleted file mode 100644 index ca57e0f7..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/index.js +++ /dev/null @@ -1,59 +0,0 @@ -//filter will reemit the data if cb(err,pass) pass is truthy - -// reduce is more tricky -// maybe we want to group the reductions or emit progress updates occasionally -// the most basic reduce just emits one 'data' event after it has recieved 'end' - - -var through = require('through') -var Decoder = require('string_decoder').StringDecoder - -module.exports = split - -//TODO pass in a function to map across the lines. - -function split (matcher, mapper) { - var decoder = new Decoder() - var soFar = '' - if('function' === typeof matcher) - mapper = matcher, matcher = null - if (!matcher) - matcher = /\r?\n/ - - function emit(stream, piece) { - if(mapper) { - try { - piece = mapper(piece) - } - catch (err) { - return stream.emit('error', err) - } - if('undefined' !== typeof piece) - stream.queue(piece) - } - else - stream.queue(piece) - } - - function next (stream, buffer) { - var pieces = (soFar + buffer).split(matcher) - soFar = pieces.pop() - - for (var i = 0; i < pieces.length; i++) { - var piece = pieces[i] - emit(stream, piece) - } - } - - return through(function (b) { - next(this, decoder.write(b)) - }, - function () { - if(decoder.end) - next(this, decoder.end()) - if(soFar != null) - emit(this, soFar) - this.queue(null) - }) -} - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/package.json b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/package.json deleted file mode 100644 index b95a7d9b..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "split", - "version": "0.2.10", - "description": "split a Text Stream into a Line Stream", - "homepage": "http://github.com/dominictarr/split", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/split.git" - }, - "dependencies": { - "through": "2" - }, - "devDependencies": { - "asynct": "*", - "it-is": "1", - "ubelt": "~2.9", - "stream-spec": "~0.2", - "event-stream": "~3.0.2" - }, - "scripts": { - "test": "asynct test/" - }, - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "http://bit.ly/dominictarr" - }, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "# Split (matcher)\n\n[![build status](https://secure.travis-ci.org/dominictarr/split.png)](http://travis-ci.org/dominictarr/split)\n\nBreak up a stream and reassemble it so that each line is a chunk. matcher may be a `String`, or a `RegExp` \n\nExample, read every line in a file ...\n\n``` js\n fs.createReadStream(file)\n .pipe(split())\n .on('data', function (line) {\n //each chunk now is a seperate line!\n })\n\n```\n\n`split` takes the same arguments as `string.split` except it defaults to '/\\r?\\n/' instead of ',', and the optional `limit` paremeter is ignored.\n[String#split](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split)\n\n# NDJ - Newline Delimited Json\n\n`split` accepts a function which transforms each line.\n\n``` js\nfs.createReadStream(file)\n .pipe(split(JSON.parse))\n .on('data', function (obj) {\n //each chunk now is a a js object\n })\n .on('error', function (err) {\n //syntax errors will land here\n //note, this ends the stream.\n })\n```\n\n# License\n\nMIT\n", - "readmeFilename": "readme.markdown", - "bugs": { - "url": "https://github.com/dominictarr/split/issues" - }, - "_id": "split@0.2.10", - "_from": "split@0.2" -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/readme.markdown b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/readme.markdown deleted file mode 100644 index 55b8ba86..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/readme.markdown +++ /dev/null @@ -1,39 +0,0 @@ -# Split (matcher) - -[![build status](https://secure.travis-ci.org/dominictarr/split.png)](http://travis-ci.org/dominictarr/split) - -Break up a stream and reassemble it so that each line is a chunk. matcher may be a `String`, or a `RegExp` - -Example, read every line in a file ... - -``` js - fs.createReadStream(file) - .pipe(split()) - .on('data', function (line) { - //each chunk now is a seperate line! - }) - -``` - -`split` takes the same arguments as `string.split` except it defaults to '/\r?\n/' instead of ',', and the optional `limit` paremeter is ignored. -[String#split](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split) - -# NDJ - Newline Delimited Json - -`split` accepts a function which transforms each line. - -``` js -fs.createReadStream(file) - .pipe(split(JSON.parse)) - .on('data', function (obj) { - //each chunk now is a a js object - }) - .on('error', function (err) { - //syntax errors will land here - //note, this ends the stream. - }) -``` - -# License - -MIT diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/test/partitioned_unicode.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/test/partitioned_unicode.js deleted file mode 100644 index aff3d5da..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/test/partitioned_unicode.js +++ /dev/null @@ -1,34 +0,0 @@ -var it = require('it-is').style('colour') - , split = require('..') - -exports ['split data with partitioned unicode character'] = function (test) { - var s = split(/,/g) - , caughtError = false - , rows = [] - - s.on('error', function (err) { - caughtError = true - }) - - s.on('data', function (row) { rows.push(row) }) - - var x = 'テスト試験今日とても,よい天気で' - unicodeData = new Buffer(x); - - // partition of 日 - piece1 = unicodeData.slice(0, 20); - piece2 = unicodeData.slice(20, unicodeData.length); - - s.write(piece1); - s.write(piece2); - - s.end() - - it(caughtError).equal(false) - - it(rows).deepEqual(['テスト試験今日とても', 'よい天気で']); - - it(rows).deepEqual(x.split(',')) - - test.done() -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/test/split.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/test/split.asynct.js deleted file mode 100644 index fb15b288..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/test/split.asynct.js +++ /dev/null @@ -1,85 +0,0 @@ -var es = require('event-stream') - , it = require('it-is').style('colour') - , d = require('ubelt') - , split = require('..') - , join = require('path').join - , fs = require('fs') - , Stream = require('stream').Stream - , spec = require('stream-spec') - -exports ['split() works like String#split'] = function (test) { - var readme = join(__filename) - , expected = fs.readFileSync(readme, 'utf-8').split('\n') - , cs = split() - , actual = [] - , ended = false - , x = spec(cs).through() - - var a = new Stream () - - a.write = function (l) { - actual.push(l.trim()) - } - a.end = function () { - - ended = true - expected.forEach(function (v,k) { - //String.split will append an empty string '' - //if the string ends in a split pattern. - //es.split doesn't which was breaking this test. - //clearly, appending the empty string is correct. - //tests are passing though. which is the current job. - if(v) - it(actual[k]).like(v) - }) - //give the stream time to close - process.nextTick(function () { - test.done() - x.validate() - }) - } - a.writable = true - - fs.createReadStream(readme, {flags: 'r'}).pipe(cs) - cs.pipe(a) - -} - -exports ['split() takes mapper function'] = function (test) { - var readme = join(__filename) - , expected = fs.readFileSync(readme, 'utf-8').split('\n') - , cs = split(function (line) { return line.toUpperCase() }) - , actual = [] - , ended = false - , x = spec(cs).through() - - var a = new Stream () - - a.write = function (l) { - actual.push(l.trim()) - } - a.end = function () { - - ended = true - expected.forEach(function (v,k) { - //String.split will append an empty string '' - //if the string ends in a split pattern. - //es.split doesn't which was breaking this test. - //clearly, appending the empty string is correct. - //tests are passing though. which is the current job. - if(v) - it(actual[k]).equal(v.trim().toUpperCase()) - }) - //give the stream time to close - process.nextTick(function () { - test.done() - x.validate() - }) - } - a.writable = true - - fs.createReadStream(readme, {flags: 'r'}).pipe(cs) - cs.pipe(a) - -} - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/test/try_catch.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/test/try_catch.asynct.js deleted file mode 100644 index 39e49f73..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/split/test/try_catch.asynct.js +++ /dev/null @@ -1,51 +0,0 @@ -var it = require('it-is').style('colour') - , split = require('..') - -exports ['emit mapper exceptions as error events'] = function (test) { - var s = split(JSON.parse) - , caughtError = false - , rows = [] - - s.on('error', function (err) { - caughtError = true - }) - - s.on('data', function (row) { rows.push(row) }) - - s.write('{"a":1}\n{"') - it(caughtError).equal(false) - it(rows).deepEqual([ { a: 1 } ]) - - s.write('b":2}\n{"c":}\n') - it(caughtError).equal(true) - it(rows).deepEqual([ { a: 1 }, { b: 2 } ]) - - s.end() - test.done() -} - -exports ['mapper error events on trailing chunks'] = function (test) { - var s = split(JSON.parse) - , caughtError = false - , rows = [] - - s.on('error', function (err) { - caughtError = true - }) - - s.on('data', function (row) { rows.push(row) }) - - s.write('{"a":1}\n{"') - it(caughtError).equal(false) - it(rows).deepEqual([ { a: 1 } ]) - - s.write('b":2}\n{"c":}') - it(caughtError).equal(false) - it(rows).deepEqual([ { a: 1 }, { b: 2 } ]) - - s.end() - it(caughtError).equal(true) - it(rows).deepEqual([ { a: 1 }, { b: 2 } ]) - - test.done() -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/.npmignore b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/.npmignore deleted file mode 100644 index 13abef4f..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/.travis.yml b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/.travis.yml deleted file mode 100644 index 895dbd36..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/LICENSE b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/LICENSE deleted file mode 100644 index 6d03581f..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 'Dominic Tarr' - -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-minify-css/node_modules/event-stream/node_modules/stream-combiner/README.md b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/README.md deleted file mode 100644 index 565e0e26..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# stream-combiner - -<img src=https://secure.travis-ci.org/dominictarr/stream-combiner.png?branch=master> - -## Combine (stream1,...,streamN) - -Turn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream -and reads from the last stream. - -Listening for 'error' will recieve errors from all streams inside the pipe. - -``` js - var Combine = require('stream-combiner') - var es = require('event-stream') - - Combine( //connect streams together with `pipe` - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - callback(null - , inspect(JSON.parse(data))) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) -``` - -## License - -MIT diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/index.js deleted file mode 100644 index 99cf5b61..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/index.js +++ /dev/null @@ -1,39 +0,0 @@ -var duplexer = require('duplexer') - -module.exports = function () { - - var streams = [].slice.call(arguments) - , first = streams[0] - , last = streams[streams.length - 1] - , thepipe = duplexer(first, last) - - if(streams.length == 1) - return streams[0] - else if (!streams.length) - throw new Error('connect called with empty args') - - //pipe all the streams together - - function recurse (streams) { - if(streams.length < 2) - return - streams[0].pipe(streams[1]) - recurse(streams.slice(1)) - } - - recurse(streams) - - function onerror () { - var args = [].slice.call(arguments) - args.unshift('error') - thepipe.emit.apply(thepipe, args) - } - - //es.duplex already reemits the error from the first and last stream. - //add a listener for the inner streams in the pipeline. - for(var i = 1; i < streams.length - 1; i ++) - streams[i].on('error', onerror) - - return thepipe -} - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/package.json b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/package.json deleted file mode 100644 index d0e2977a..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "stream-combiner", - "version": "0.0.4", - "homepage": "https://github.com/dominictarr/stream-combiner", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/stream-combiner.git" - }, - "dependencies": { - "duplexer": "~0.1.1" - }, - "devDependencies": { - "tape": "~2.3.0", - "event-stream": "~3.0.7" - }, - "scripts": { - "test": "set -e; for t in test/*.js; do node $t; done" - }, - "author": { - "name": "'Dominic Tarr'", - "email": "dominic.tarr@gmail.com", - "url": "http://dominictarr.com" - }, - "license": "MIT", - "readme": "# stream-combiner\n\n<img src=https://secure.travis-ci.org/dominictarr/stream-combiner.png?branch=master>\n\n## Combine (stream1,...,streamN)\n\nTurn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream\nand reads from the last stream. \n\nListening for 'error' will recieve errors from all streams inside the pipe.\n\n``` js\n var Combine = require('stream-combiner')\n var es = require('event-stream')\n\n Combine( //connect streams together with `pipe`\n process.openStdin(), //open stdin\n es.split(), //split stream to break on newlines\n es.map(function (data, callback) {//turn this async function into a stream\n callback(null\n , inspect(JSON.parse(data))) //render it nicely\n }),\n process.stdout // pipe it to stdout !\n )\n```\n\n## License\n\nMIT\n", - "readmeFilename": "README.md", - "description": "<img src=https://secure.travis-ci.org/dominictarr/stream-combiner.png?branch=master>", - "bugs": { - "url": "https://github.com/dominictarr/stream-combiner/issues" - }, - "_id": "stream-combiner@0.0.4", - "_from": "stream-combiner@~0.0.4" -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/test/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/test/index.js deleted file mode 100644 index d17ddada..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/stream-combiner/test/index.js +++ /dev/null @@ -1,52 +0,0 @@ -var es = require('event-stream') -var combine = require('..') -var test = require('tape') - -test('do not duplicate errors', function (test) { - - var errors = 0; - var pipe = combine( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }) - ) - - pipe.on('error', function(err) { - errors++ - test.ok(errors, 'expected error count') - process.nextTick(function () { - return test.end(); - }) - }) - - return pipe.write('meh'); -}) - -test('3 pipe do not duplicate errors', function (test) { - - var errors = 0; - var pipe = combine( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }), - es.through() - ) - - pipe.on('error', function(err) { - errors++ - test.ok(errors, 'expected error count') - process.nextTick(function () { - return test.end(); - }) - }) - - return pipe.write('meh'); - -}) - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/.travis.yml b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/.travis.yml deleted file mode 100644 index c693a939..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - "0.10" diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/LICENSE.APACHE2 b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/LICENSE.APACHE2 deleted file mode 100644 index 6366c047..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/LICENSE.APACHE2 +++ /dev/null @@ -1,15 +0,0 @@ -Apache License, Version 2.0 - -Copyright (c) 2011 Dominic Tarr - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/LICENSE.MIT b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/LICENSE.MIT deleted file mode 100644 index 6eafbd73..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/LICENSE.MIT +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2011 Dominic Tarr - -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-minify-css/node_modules/event-stream/node_modules/through/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/index.js deleted file mode 100644 index 7b935bf9..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/index.js +++ /dev/null @@ -1,108 +0,0 @@ -var Stream = require('stream') - -// through -// -// a stream that does nothing but re-emit the input. -// useful for aggregating a series of changing but not ending streams into one stream) - -exports = module.exports = through -through.through = through - -//create a readable writable stream. - -function through (write, end, opts) { - write = write || function (data) { this.queue(data) } - end = end || function () { this.queue(null) } - - var ended = false, destroyed = false, buffer = [], _ended = false - var stream = new Stream() - stream.readable = stream.writable = true - stream.paused = false - -// stream.autoPause = !(opts && opts.autoPause === false) - stream.autoDestroy = !(opts && opts.autoDestroy === false) - - stream.write = function (data) { - write.call(this, data) - return !stream.paused - } - - function drain() { - while(buffer.length && !stream.paused) { - var data = buffer.shift() - if(null === data) - return stream.emit('end') - else - stream.emit('data', data) - } - } - - stream.queue = stream.push = function (data) { -// console.error(ended) - if(_ended) return stream - if(data == null) _ended = true - buffer.push(data) - drain() - return stream - } - - //this will be registered as the first 'end' listener - //must call destroy next tick, to make sure we're after any - //stream piped from here. - //this is only a problem if end is not emitted synchronously. - //a nicer way to do this is to make sure this is the last listener for 'end' - - stream.on('end', function () { - stream.readable = false - if(!stream.writable && stream.autoDestroy) - process.nextTick(function () { - stream.destroy() - }) - }) - - function _end () { - stream.writable = false - end.call(stream) - if(!stream.readable && stream.autoDestroy) - stream.destroy() - } - - stream.end = function (data) { - if(ended) return - ended = true - if(arguments.length) stream.write(data) - _end() // will emit or queue - return stream - } - - stream.destroy = function () { - if(destroyed) return - destroyed = true - ended = true - buffer.length = 0 - stream.writable = stream.readable = false - stream.emit('close') - return stream - } - - stream.pause = function () { - if(stream.paused) return - stream.paused = true - return stream - } - - stream.resume = function () { - if(stream.paused) { - stream.paused = false - stream.emit('resume') - } - drain() - //may have become paused again, - //as drain emits 'data'. - if(!stream.paused) - stream.emit('drain') - return stream - } - return stream -} - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/package.json b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/package.json deleted file mode 100644 index 52155427..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "through", - "version": "2.3.4", - "description": "simplified stream contsruction", - "main": "index.js", - "scripts": { - "test": "set -e; for t in test/*.js; do node $t; done" - }, - "devDependencies": { - "stream-spec": "~0.3.5", - "tape": "~0.2.2" - }, - "keywords": [ - "stream", - "streams", - "user-streams", - "pipe" - ], - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "dominictarr.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/dominictarr/through.git" - }, - "homepage": "http://github.com/dominictarr/through", - "testling": { - "browsers": [ - "ie/8..latest", - "ff/15..latest", - "chrome/20..latest", - "safari/5.1..latest" - ], - "files": "test/*.js" - }, - "readme": "#through\n\n[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through)\n\nEasy way to create a `Stream` that is both `readable` and `writable`. \n\n* Pass in optional `write` and `end` methods.\n* `through` takes care of pause/resume logic if you use `this.queue(data)` instead of `this.emit('data', data)`.\n* Use `this.pause()` and `this.resume()` to manage flow.\n* Check `this.paused` to see current flow state. (`write` always returns `!this.paused`).\n\nThis function is the basis for most of the synchronous streams in \n[event-stream](http://github.com/dominictarr/event-stream).\n\n``` js\nvar through = require('through')\n\nthrough(function write(data) {\n this.queue(data) //data *must* not be null\n },\n function end () { //optional\n this.queue(null)\n })\n```\n\nOr, can also be used _without_ buffering on pause, use `this.emit('data', data)`,\nand this.emit('end')\n\n``` js\nvar through = require('through')\n\nthrough(function write(data) {\n this.emit('data', data)\n //this.pause() \n },\n function end () { //optional\n this.emit('end')\n })\n```\n\n## Extended Options\n\nYou will probably not need these 99% of the time.\n\n### autoDestroy=false\n\nBy default, `through` emits close when the writable\nand readable side of the stream has ended.\nIf that is not desired, set `autoDestroy=false`.\n\n``` js\nvar through = require('through')\n\n//like this\nvar ts = through(write, end, {autoDestroy: false})\n//or like this\nvar ts = through(write, end)\nts.autoDestroy = false\n```\n\n## License\n\nMIT / Apache2\n", - "readmeFilename": "readme.markdown", - "bugs": { - "url": "https://github.com/dominictarr/through/issues" - }, - "_id": "through@2.3.4", - "_from": "through@~2.3.1" -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/readme.markdown b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/readme.markdown deleted file mode 100644 index b20bc9a8..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/readme.markdown +++ /dev/null @@ -1,63 +0,0 @@ -#through - -[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through) - -Easy way to create a `Stream` that is both `readable` and `writable`. - -* Pass in optional `write` and `end` methods. -* `through` takes care of pause/resume logic if you use `this.queue(data)` instead of `this.emit('data', data)`. -* Use `this.pause()` and `this.resume()` to manage flow. -* Check `this.paused` to see current flow state. (`write` always returns `!this.paused`). - -This function is the basis for most of the synchronous streams in -[event-stream](http://github.com/dominictarr/event-stream). - -``` js -var through = require('through') - -through(function write(data) { - this.queue(data) //data *must* not be null - }, - function end () { //optional - this.queue(null) - }) -``` - -Or, can also be used _without_ buffering on pause, use `this.emit('data', data)`, -and this.emit('end') - -``` js -var through = require('through') - -through(function write(data) { - this.emit('data', data) - //this.pause() - }, - function end () { //optional - this.emit('end') - }) -``` - -## Extended Options - -You will probably not need these 99% of the time. - -### autoDestroy=false - -By default, `through` emits close when the writable -and readable side of the stream has ended. -If that is not desired, set `autoDestroy=false`. - -``` js -var through = require('through') - -//like this -var ts = through(write, end, {autoDestroy: false}) -//or like this -var ts = through(write, end) -ts.autoDestroy = false -``` - -## License - -MIT / Apache2 diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/auto-destroy.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/auto-destroy.js deleted file mode 100644 index 9a8fd000..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/auto-destroy.js +++ /dev/null @@ -1,30 +0,0 @@ -var test = require('tape') -var through = require('../') - -// must emit end before close. - -test('end before close', function (assert) { - var ts = through() - ts.autoDestroy = false - var ended = false, closed = false - - ts.on('end', function () { - assert.ok(!closed) - ended = true - }) - ts.on('close', function () { - assert.ok(ended) - closed = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - assert.ok(ended) - assert.notOk(closed) - ts.destroy() - assert.ok(closed) - assert.end() -}) - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/buffering.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/buffering.js deleted file mode 100644 index b0084bfc..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/buffering.js +++ /dev/null @@ -1,71 +0,0 @@ -var test = require('tape') -var through = require('../') - -// must emit end before close. - -test('buffering', function(assert) { - var ts = through(function (data) { - this.queue(data) - }, function () { - this.queue(null) - }) - - var ended = false, actual = [] - - ts.on('data', actual.push.bind(actual)) - ts.on('end', function () { - ended = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - assert.deepEqual(actual, [1, 2, 3]) - ts.pause() - ts.write(4) - ts.write(5) - ts.write(6) - assert.deepEqual(actual, [1, 2, 3]) - ts.resume() - assert.deepEqual(actual, [1, 2, 3, 4, 5, 6]) - ts.pause() - ts.end() - assert.ok(!ended) - ts.resume() - assert.ok(ended) - assert.end() -}) - -test('buffering has data in queue, when ends', function (assert) { - - /* - * If stream ends while paused with data in the queue, - * stream should still emit end after all data is written - * on resume. - */ - - var ts = through(function (data) { - this.queue(data) - }, function () { - this.queue(null) - }) - - var ended = false, actual = [] - - ts.on('data', actual.push.bind(actual)) - ts.on('end', function () { - ended = true - }) - - ts.pause() - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - assert.deepEqual(actual, [], 'no data written yet, still paused') - assert.ok(!ended, 'end not emitted yet, still paused') - ts.resume() - assert.deepEqual(actual, [1, 2, 3], 'resumed, all data should be delivered') - assert.ok(ended, 'end should be emitted once all data was delivered') - assert.end(); -}) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/end.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/end.js deleted file mode 100644 index fa113f58..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/end.js +++ /dev/null @@ -1,45 +0,0 @@ -var test = require('tape') -var through = require('../') - -// must emit end before close. - -test('end before close', function (assert) { - var ts = through() - var ended = false, closed = false - - ts.on('end', function () { - assert.ok(!closed) - ended = true - }) - ts.on('close', function () { - assert.ok(ended) - closed = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - assert.ok(ended) - assert.ok(closed) - assert.end() -}) - -test('end only once', function (t) { - - var ts = through() - var ended = false, closed = false - - ts.on('end', function () { - t.equal(ended, false) - ended = true - }) - - ts.queue(null) - ts.queue(null) - ts.queue(null) - - ts.resume() - - t.end() -}) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/index.js deleted file mode 100644 index 33e33f96..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/node_modules/through/test/index.js +++ /dev/null @@ -1,114 +0,0 @@ - -var test = require('tape') -var spec = require('stream-spec') -var through = require('../') - -/* - I'm using these two functions, and not streams and pipe - so there is less to break. if this test fails it must be - the implementation of _through_ -*/ - -function write(array, stream) { - array = array.slice() - function next() { - while(array.length) - if(stream.write(array.shift()) === false) - return stream.once('drain', next) - - stream.end() - } - - next() -} - -function read(stream, callback) { - var actual = [] - stream.on('data', function (data) { - actual.push(data) - }) - stream.once('end', function () { - callback(null, actual) - }) - stream.once('error', function (err) { - callback(err) - }) -} - -test('simple defaults', function(assert) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through() - spec(t) - .through() - .pausable() - .validateOnExit() - - read(t, function (err, actual) { - assert.ifError(err) - assert.deepEqual(actual, expected) - assert.end() - }) - - write(expected, t) -}); - -test('simple functions', function(assert) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through(function (data) { - this.emit('data', data*2) - }) - spec(t) - .through() - .pausable() - .validateOnExit() - - read(t, function (err, actual) { - assert.ifError(err) - assert.deepEqual(actual, expected.map(function (data) { - return data*2 - })) - assert.end() - }) - - write(expected, t) -}) - -test('pauses', function(assert) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l) //Math.random()) - - var t = through() - spec(t) - .through() - .pausable() - .validateOnExit() - - t.on('data', function () { - if(Math.random() > 0.1) return - t.pause() - process.nextTick(function () { - t.resume() - }) - }) - - read(t, function (err, actual) { - assert.ifError(err) - assert.deepEqual(actual, expected) - assert.end() - }) - - write(expected, t) -}) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/package.json b/node_modules/gulp-minify-css/node_modules/event-stream/package.json deleted file mode 100644 index 735afd1b..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "event-stream", - "version": "3.1.0", - "description": "construct pipes of streams of events", - "homepage": "http://github.com/dominictarr/event-stream", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/event-stream.git" - }, - "dependencies": { - "through": "~2.3.1", - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.2", - "stream-combiner": "~0.0.4" - }, - "devDependencies": { - "asynct": "*", - "it-is": "1", - "ubelt": "~3.2.2", - "stream-spec": "~0.3.5", - "tape": "~2.3.0" - }, - "scripts": { - "test": "asynct test/", - "test_tap": "set -e; for t in test/*.js; do node $t; done" - }, - "testling": { - "files": "test/*.js", - "browsers": { - "ie": [ - 8, - 9 - ], - "firefox": [ - 13 - ], - "chrome": [ - 20 - ], - "safari": [ - 5.1 - ], - "opera": [ - 12 - ] - } - }, - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "http://bit.ly/dominictarr" - }, - "readme": "# EventStream\n\n<img src=https://secure.travis-ci.org/dominictarr/event-stream.png?branch=master>\n\n[![browser status](http://ci.testling.com/dominictarr/event-stream.png)]\n(http://ci.testling.com/dominictarr/event-stream)\n\n[Streams](http://nodejs.org/api/stream.html \"Stream\") are node's best and most misunderstood idea, and \n_<em>EventStream</em>_ is a toolkit to make creating and working with streams <em>easy</em>. \n\nNormally, streams are only used of IO, \nbut in event stream we send all kinds of objects down the pipe. \nIf your application's <em>input</em> and <em>output</em> are streams, \nshouldn't the <em>throughput</em> be a stream too? \n\nThe *EventStream* functions resemble the array functions, \nbecause Streams are like Arrays, but laid out in time, rather than in memory. \n\n<em>All the `event-stream` functions return instances of `Stream`</em>.\n\n`event-stream` creates \n[0.8 streams](https://github.com/joyent/node/blob/v0.8/doc/api/stream.markdown)\n, which are compatible with [0.10 streams](http://nodejs.org/api/stream.html \"Stream\")\n\n>NOTE: I shall use the term <em>\"through stream\"</em> to refer to a stream that is writable <em>and</em> readable. \n\n###[simple example](https://github.com/dominictarr/event-stream/blob/master/examples/pretty.js):\n\n``` js\n\n//pretty.js\n\nif(!module.parent) {\n var es = require('event-stream')\n es.pipeline( //connect streams together with `pipe`\n process.openStdin(), //open stdin\n es.split(), //split stream to break on newlines\n es.map(function (data, callback) {//turn this async function into a stream\n callback(null\n , inspect(JSON.parse(data))) //render it nicely\n }),\n process.stdout // pipe it to stdout !\n )\n }\n```\nrun it ...\n\n``` bash \ncurl -sS registry.npmjs.org/event-stream | node pretty.js\n```\n \n[node Stream documentation](http://nodejs.org/api/stream.html)\n\n## through (write?, end?)\n\nReemits data synchronously. Easy way to create syncronous through streams.\nPass in an optional `write` and `end` methods. They will be called in the \ncontext of the stream. Use `this.pause()` and `this.resume()` to manage flow.\nCheck `this.paused` to see current flow state. (write always returns `!this.paused`)\n\nthis function is the basis for most of the syncronous streams in `event-stream`.\n\n``` js\n\nes.through(function write(data) {\n this.emit('data', data)\n //this.pause() \n },\n function end () { //optional\n this.emit('end')\n })\n\n```\n\n##map (asyncFunction)\n\nCreate a through stream from an asyncronous function. \n\n``` js\nvar es = require('event-stream')\n\nes.map(function (data, callback) {\n //transform data\n // ...\n callback(null, data)\n})\n\n```\n\nEach map MUST call the callback. It may callback with data, with an error or with no arguments, \n\n * `callback()` drop this data. \n this makes the map work like `filter`, \n note:`callback(null,null)` is not the same, and will emit `null`\n\n * `callback(null, newData)` turn data into newData\n \n * `callback(error)` emit an error for this item.\n\n>Note: if a callback is not called, `map` will think that it is still being processed, \n>every call must be answered or the stream will not know when to end. \n>\n>Also, if the callback is called more than once, every call but the first will be ignored.\n\n## mapSync (syncFunction)\n\nSame as `map`, but the callback is called synchronously. Based on `es.through`\n\n## split (matcher)\n\nBreak up a stream and reassemble it so that each line is a chunk. matcher may be a `String`, or a `RegExp` \n\nExample, read every line in a file ...\n\n``` js\n es.pipeline(\n fs.createReadStream(file, {flags: 'r'}),\n es.split(),\n es.map(function (line, cb) {\n //do something with the line \n cb(null, line)\n })\n )\n\n```\n\n`split` takes the same arguments as `string.split` except it defaults to '\\n' instead of ',', and the optional `limit` paremeter is ignored.\n[String#split](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split)\n\n## join (separator)\n\nCreate a through stream that emits `separator` between each chunk, just like Array#join.\n\n(for legacy reasons, if you pass a callback instead of a string, join is a synonym for `es.wait`)\n\n## merge (stream1,...,streamN)\n> concat → merge\n\nMerges streams into one and returns it.\nIncoming data will be emitted as soon it comes into - no ordering will be applied (for example: `data1 data1 data2 data1 data2` - where `data1` and `data2` is data from two streams).\nCounts how many streams was passed to it and emits end only when all streams emitted end.\n\n```js\nes.merge(\n process.stdout,\n process.stderr\n).pipe(fs.createWriteStream('output.log'));\n```\n\n## replace (from, to)\n\nReplace all occurences of `from` with `to`. `from` may be a `String` or a `RegExp`. \nWorks just like `string.split(from).join(to)`, but streaming.\n\n\n## parse\n\nConvienience function for parsing JSON chunks. For newline separated JSON,\nuse with `es.split`\n\n``` js\nfs.createReadStream(filename)\n .pipe(es.split()) //defaults to lines.\n .pipe(es.parse())\n```\n\n## stringify\n\nconvert javascript objects into lines of text. The text will have whitespace escaped and have a `\\n` appended, so it will be compatible with `es.parse`\n\n``` js\nobjectStream\n .pipe(es.stringify())\n .pipe(fs.createWriteStream(filename))\n```\n\n##readable (asyncFunction) \n\ncreate a readable stream (that respects pause) from an async function. \nwhile the stream is not paused, \nthe function will be polled with `(count, callback)`, \nand `this` will be the readable stream.\n\n``` js\n\nes.readable(function (count, callback) {\n if(streamHasEnded)\n return this.emit('end')\n \n //...\n \n this.emit('data', data) //use this way to emit multiple chunks per call.\n \n callback() // you MUST always call the callback eventually.\n // the function will not be called again until you do this.\n})\n```\nyou can also pass the data and the error to the callback. \nyou may only call the callback once. \ncalling the same callback more than once will have no effect. \n\n##readArray (array)\n\nCreate a readable stream from an Array.\n\nJust emit each item as a data event, respecting `pause` and `resume`.\n\n``` js\n var es = require('event-stream')\n , reader = es.readArray([1,2,3])\n\n reader.pipe(...)\n```\n\n## writeArray (callback)\n\ncreate a writeable stream from a callback, \nall `data` events are stored in an array, which is passed to the callback when the stream ends.\n\n``` js\n var es = require('event-stream')\n , reader = es.readArray([1, 2, 3])\n , writer = es.writeArray(function (err, array){\n //array deepEqual [1, 2, 3]\n })\n\n reader.pipe(writer)\n```\n\n## pipeline (stream1,...,streamN)\n\nTurn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream\nand reads from the last stream. \n\nListening for 'error' will recieve errors from all streams inside the pipe.\n\n> `connect` is an alias for `pipeline`.\n\n``` js\n\n es.pipeline( //connect streams together with `pipe`\n process.openStdin(), //open stdin\n es.split(), //split stream to break on newlines\n es.map(function (data, callback) {//turn this async function into a stream\n callback(null\n , inspect(JSON.parse(data))) //render it nicely\n }),\n process.stdout // pipe it to stdout !\n )\n```\n\n## pause () \n\nA stream that buffers all chunks when paused.\n\n\n``` js\n var ps = es.pause()\n ps.pause() //buffer the stream, also do not allow 'end' \n ps.resume() //allow chunks through\n```\n\n## duplex (writeStream, readStream)\n\nTakes a writable stream and a readable stream and makes them appear as a readable writable stream.\n\nIt is assumed that the two streams are connected to each other in some way. \n\n(This is used by `pipeline` and `child`.)\n\n``` js\n var grep = cp.exec('grep Stream')\n\n es.duplex(grep.stdin, grep.stdout)\n```\n\n## child (child_process)\n\nCreate a through stream from a child process ...\n\n``` js\n var cp = require('child_process')\n\n es.child(cp.exec('grep Stream')) // a through stream\n\n```\n\n## wait (callback)\n\nwaits for stream to emit 'end'.\njoins chunks of a stream into a single string. \ntakes an optional callback, which will be passed the \ncomplete string when it receives the 'end' event.\n\nalso, emits a single 'data' event.\n\n``` js\n\nreadStream.pipe(es.wait(function (err, text) {\n // have complete text here.\n}))\n\n```\n\n# Other Stream Modules\n\nThese modules are not included as a part of *EventStream* but may be\nuseful when working with streams.\n\n## [reduce (syncFunction, initial)](https://github.com/parshap/node-stream-reduce)\n\nLike `Array.prototype.reduce` but for streams. Given a sync reduce\nfunction and an initial value it will return a through stream that emits\na single data event with the reduced value once the input stream ends.\n\n``` js\nvar reduce = require(\"stream-reduce\");\nprocess.stdin.pipe(reduce(function(acc, data) {\n return acc + data.length;\n}, 0)).on(\"data\", function(length) {\n console.log(\"stdin size:\", length);\n});\n```\n", - "readmeFilename": "readme.markdown", - "bugs": { - "url": "https://github.com/dominictarr/event-stream/issues" - }, - "_id": "event-stream@3.1.0", - "_from": "event-stream@~3.1.0" -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/readme.markdown b/node_modules/gulp-minify-css/node_modules/event-stream/readme.markdown deleted file mode 100644 index 5fc24497..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/readme.markdown +++ /dev/null @@ -1,323 +0,0 @@ -# EventStream - -<img src=https://secure.travis-ci.org/dominictarr/event-stream.png?branch=master> - -[![browser status](http://ci.testling.com/dominictarr/event-stream.png)] -(http://ci.testling.com/dominictarr/event-stream) - -[Streams](http://nodejs.org/api/stream.html "Stream") are node's best and most misunderstood idea, and -_<em>EventStream</em>_ is a toolkit to make creating and working with streams <em>easy</em>. - -Normally, streams are only used of IO, -but in event stream we send all kinds of objects down the pipe. -If your application's <em>input</em> and <em>output</em> are streams, -shouldn't the <em>throughput</em> be a stream too? - -The *EventStream* functions resemble the array functions, -because Streams are like Arrays, but laid out in time, rather than in memory. - -<em>All the `event-stream` functions return instances of `Stream`</em>. - -`event-stream` creates -[0.8 streams](https://github.com/joyent/node/blob/v0.8/doc/api/stream.markdown) -, which are compatible with [0.10 streams](http://nodejs.org/api/stream.html "Stream") - ->NOTE: I shall use the term <em>"through stream"</em> to refer to a stream that is writable <em>and</em> readable. - -###[simple example](https://github.com/dominictarr/event-stream/blob/master/examples/pretty.js): - -``` js - -//pretty.js - -if(!module.parent) { - var es = require('event-stream') - es.pipeline( //connect streams together with `pipe` - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - callback(null - , inspect(JSON.parse(data))) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) - } -``` -run it ... - -``` bash -curl -sS registry.npmjs.org/event-stream | node pretty.js -``` - -[node Stream documentation](http://nodejs.org/api/stream.html) - -## through (write?, end?) - -Reemits data synchronously. Easy way to create syncronous through streams. -Pass in an optional `write` and `end` methods. They will be called in the -context of the stream. Use `this.pause()` and `this.resume()` to manage flow. -Check `this.paused` to see current flow state. (write always returns `!this.paused`) - -this function is the basis for most of the syncronous streams in `event-stream`. - -``` js - -es.through(function write(data) { - this.emit('data', data) - //this.pause() - }, - function end () { //optional - this.emit('end') - }) - -``` - -##map (asyncFunction) - -Create a through stream from an asyncronous function. - -``` js -var es = require('event-stream') - -es.map(function (data, callback) { - //transform data - // ... - callback(null, data) -}) - -``` - -Each map MUST call the callback. It may callback with data, with an error or with no arguments, - - * `callback()` drop this data. - this makes the map work like `filter`, - note:`callback(null,null)` is not the same, and will emit `null` - - * `callback(null, newData)` turn data into newData - - * `callback(error)` emit an error for this item. - ->Note: if a callback is not called, `map` will think that it is still being processed, ->every call must be answered or the stream will not know when to end. -> ->Also, if the callback is called more than once, every call but the first will be ignored. - -## mapSync (syncFunction) - -Same as `map`, but the callback is called synchronously. Based on `es.through` - -## split (matcher) - -Break up a stream and reassemble it so that each line is a chunk. matcher may be a `String`, or a `RegExp` - -Example, read every line in a file ... - -``` js - es.pipeline( - fs.createReadStream(file, {flags: 'r'}), - es.split(), - es.map(function (line, cb) { - //do something with the line - cb(null, line) - }) - ) - -``` - -`split` takes the same arguments as `string.split` except it defaults to '\n' instead of ',', and the optional `limit` paremeter is ignored. -[String#split](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split) - -## join (separator) - -Create a through stream that emits `separator` between each chunk, just like Array#join. - -(for legacy reasons, if you pass a callback instead of a string, join is a synonym for `es.wait`) - -## merge (stream1,...,streamN) -> concat → merge - -Merges streams into one and returns it. -Incoming data will be emitted as soon it comes into - no ordering will be applied (for example: `data1 data1 data2 data1 data2` - where `data1` and `data2` is data from two streams). -Counts how many streams was passed to it and emits end only when all streams emitted end. - -```js -es.merge( - process.stdout, - process.stderr -).pipe(fs.createWriteStream('output.log')); -``` - -## replace (from, to) - -Replace all occurences of `from` with `to`. `from` may be a `String` or a `RegExp`. -Works just like `string.split(from).join(to)`, but streaming. - - -## parse - -Convienience function for parsing JSON chunks. For newline separated JSON, -use with `es.split` - -``` js -fs.createReadStream(filename) - .pipe(es.split()) //defaults to lines. - .pipe(es.parse()) -``` - -## stringify - -convert javascript objects into lines of text. The text will have whitespace escaped and have a `\n` appended, so it will be compatible with `es.parse` - -``` js -objectStream - .pipe(es.stringify()) - .pipe(fs.createWriteStream(filename)) -``` - -##readable (asyncFunction) - -create a readable stream (that respects pause) from an async function. -while the stream is not paused, -the function will be polled with `(count, callback)`, -and `this` will be the readable stream. - -``` js - -es.readable(function (count, callback) { - if(streamHasEnded) - return this.emit('end') - - //... - - this.emit('data', data) //use this way to emit multiple chunks per call. - - callback() // you MUST always call the callback eventually. - // the function will not be called again until you do this. -}) -``` -you can also pass the data and the error to the callback. -you may only call the callback once. -calling the same callback more than once will have no effect. - -##readArray (array) - -Create a readable stream from an Array. - -Just emit each item as a data event, respecting `pause` and `resume`. - -``` js - var es = require('event-stream') - , reader = es.readArray([1,2,3]) - - reader.pipe(...) -``` - -## writeArray (callback) - -create a writeable stream from a callback, -all `data` events are stored in an array, which is passed to the callback when the stream ends. - -``` js - var es = require('event-stream') - , reader = es.readArray([1, 2, 3]) - , writer = es.writeArray(function (err, array){ - //array deepEqual [1, 2, 3] - }) - - reader.pipe(writer) -``` - -## pipeline (stream1,...,streamN) - -Turn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream -and reads from the last stream. - -Listening for 'error' will recieve errors from all streams inside the pipe. - -> `connect` is an alias for `pipeline`. - -``` js - - es.pipeline( //connect streams together with `pipe` - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - callback(null - , inspect(JSON.parse(data))) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) -``` - -## pause () - -A stream that buffers all chunks when paused. - - -``` js - var ps = es.pause() - ps.pause() //buffer the stream, also do not allow 'end' - ps.resume() //allow chunks through -``` - -## duplex (writeStream, readStream) - -Takes a writable stream and a readable stream and makes them appear as a readable writable stream. - -It is assumed that the two streams are connected to each other in some way. - -(This is used by `pipeline` and `child`.) - -``` js - var grep = cp.exec('grep Stream') - - es.duplex(grep.stdin, grep.stdout) -``` - -## child (child_process) - -Create a through stream from a child process ... - -``` js - var cp = require('child_process') - - es.child(cp.exec('grep Stream')) // a through stream - -``` - -## wait (callback) - -waits for stream to emit 'end'. -joins chunks of a stream into a single string. -takes an optional callback, which will be passed the -complete string when it receives the 'end' event. - -also, emits a single 'data' event. - -``` js - -readStream.pipe(es.wait(function (err, text) { - // have complete text here. -})) - -``` - -# Other Stream Modules - -These modules are not included as a part of *EventStream* but may be -useful when working with streams. - -## [reduce (syncFunction, initial)](https://github.com/parshap/node-stream-reduce) - -Like `Array.prototype.reduce` but for streams. Given a sync reduce -function and an initial value it will return a through stream that emits -a single data event with the reduced value once the input stream ends. - -``` js -var reduce = require("stream-reduce"); -process.stdin.pipe(reduce(function(acc, data) { - return acc + data.length; -}, 0)).on("data", function(length) { - console.log("stdin size:", length); -}); -``` diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/connect.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/connect.asynct.js deleted file mode 100644 index e6a442bb..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/connect.asynct.js +++ /dev/null @@ -1,86 +0,0 @@ -var es = require('../') - , it = require('it-is').style('colour') - , d = require('ubelt') - -function makeExamplePipe() { - - return es.connect( - es.map(function (data, callback) { - callback(null, data * 2) - }), - es.map(function (data, callback) { - d.delay(callback)(null, data) - }), - es.map(function (data, callback) { - callback(null, data + 2) - })) -} - -exports['simple pipe'] = function (test) { - - var pipe = makeExamplePipe() - - pipe.on('data', function (data) { - it(data).equal(18) - test.done() - }) - - pipe.write(8) - -} - -exports['read array then map'] = function (test) { - - var readThis = d.map(3, 6, 100, d.id) //array of multiples of 3 < 100 - , first = es.readArray(readThis) - , read = [] - , pipe = - es.connect( - first, - es.map(function (data, callback) { - callback(null, {data: data}) - }), - es.map(function (data, callback) { - callback(null, {data: data}) - }), - es.writeArray(function (err, array) { - it(array).deepEqual(d.map(readThis, function (data) { - return {data: {data: data}} - })) - test.done() - }) - ) -} - -exports ['connect returns a stream'] = function (test) { - - var rw = - es.connect( - es.map(function (data, callback) { - callback(null, data * 2) - }), - es.map(function (data, callback) { - callback(null, data * 5) - }) - ) - - it(rw).has({readable: true, writable: true}) - - var array = [190, 24, 6, 7, 40, 57, 4, 6] - , _array = [] - , c = - es.connect( - es.readArray(array), - rw, - es.log('after rw:'), - es.writeArray(function (err, _array) { - it(_array).deepEqual(array.map(function (e) { return e * 10 })) - test.done() - }) - ) - -} - - -require('./helper')(module) - diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/helper/index.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/helper/index.js deleted file mode 100644 index 96abaebe..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/helper/index.js +++ /dev/null @@ -1,12 +0,0 @@ -var tape = require('tape') - -module.exports = function (m) { - if(m.parent) return - for(var name in m.exports) { - tape(name, function (t) { - console.log('start', name) - t.done = t.end - m.exports[name](t) - }) - } -} diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/merge.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/merge.asynct.js deleted file mode 100644 index 6ac65f32..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/merge.asynct.js +++ /dev/null @@ -1,21 +0,0 @@ -var es = require('../') - , it = require('it-is').style('colour') - , d = require('ubelt') - -exports.merge = function (t) { - var odd = d.map(1, 3, 100, d.id) //array of multiples of 3 < 100 - var even = d.map(2, 4, 100, d.id) //array of multiples of 3 < 100 - - var r1 = es.readArray(even) - var r2 = es.readArray(odd) - - var writer = es.writeArray(function (err, array){ - if(err) throw err //unpossible - it(array.sort()).deepEqual(even.concat(odd).sort()) - t.done() - }) - - es.merge(r1, r2).pipe(writer) - -} -require('./helper')(module) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/pause.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/pause.asynct.js deleted file mode 100644 index b0736040..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/pause.asynct.js +++ /dev/null @@ -1,39 +0,0 @@ - -var es = require('../') - , it = require('it-is') - , d = require('ubelt') - -exports ['gate buffers when shut'] = function (test) { - - var hundy = d.map(1,100, d.id) - , gate = es.pause() - , ten = 10 - es.connect( - es.readArray(hundy), - es.log('after readArray'), - gate, - //es.log('after gate'), - es.map(function (num, next) { - //stick a map in here to check that gate never emits when open - it(gate.paused).equal(false) - console.log('data', num) - if(!--ten) { - console.log('PAUSE') - gate.pause()//.resume() - d.delay(gate.resume.bind(gate), 10)() - ten = 10 - } - - next(null, num) - }), - es.writeArray(function (err, array) { //just realized that I should remove the error param. errors will be emitted - console.log('eonuhoenuoecbulc') - it(array).deepEqual(hundy) - test.done() - }) - ) - - gate.resume() - -} -require('./helper')(module) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/pipeline.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/pipeline.asynct.js deleted file mode 100644 index f07c6fa5..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/pipeline.asynct.js +++ /dev/null @@ -1,52 +0,0 @@ -var es = require('..') - -exports['do not duplicate errors'] = function (test) { - - var errors = 0; - var pipe = es.pipeline( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }) - ) - - pipe.on('error', function(err) { - errors++ - console.log('error count', errors) - process.nextTick(function () { - return test.done(); - }) - }) - - return pipe.write('meh'); - -} - -exports['3 pipe do not duplicate errors'] = function (test) { - - var errors = 0; - var pipe = es.pipeline( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }), - es.through() - ) - - pipe.on('error', function(err) { - errors++ - console.log('error count', errors) - process.nextTick(function () { - return test.done(); - }) - }) - - return pipe.write('meh'); - -} - -require('./helper')(module) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/readArray.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/readArray.asynct.js deleted file mode 100644 index 3eeb90a3..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/readArray.asynct.js +++ /dev/null @@ -1,89 +0,0 @@ - -var es = require('../') - , it = require('it-is').style('colour') - , d = require('ubelt') - -function readStream(stream, pauseAt, done) { - if(!done) done = pauseAt, pauseAt = -1 - var array = [] - stream.on('data', function (data) { - array.push(data) - if(!--pauseAt ) - stream.pause(), done(null, array) - }) - stream.on('error', done) - stream.on('end', function (data) { - done(null, array) - }) - -} - -exports ['read an array'] = function (test) { - - var readThis = d.map(3, 6, 100, d.id) //array of multiples of 3 < 100 - - var reader = es.readArray(readThis) - - var writer = es.writeArray(function (err, array){ - if(err) throw err //unpossible - it(array).deepEqual(readThis) - test.done() - }) - - reader.pipe(writer) -} - -exports ['read an array and pause it.'] = function (test) { - - var readThis = d.map(3, 6, 100, d.id) //array of multiples of 3 < 100 - - var reader = es.readArray(readThis) - - readStream(reader, 10, function (err, data) { - if(err) throw err - it(data).deepEqual([3, 6, 9, 12, 15, 18, 21, 24, 27, 30]) - readStream(reader, 10, function (err, data) { - it(data).deepEqual([33, 36, 39, 42, 45, 48, 51, 54, 57, 60]) - test.done() - }) - reader.resume() - }) - -} - -exports ['reader is readable, but not writeable'] = function (test) { - var reader = es.readArray([1]) - it(reader).has({ - readable: true, - writable: false - }) - - test.done() -} - - -exports ['read one item per tick'] = function (test) { - var readThis = d.map(3, 6, 100, d.id) //array of multiples of 3 < 100 - var drains = 0 - var reader = es.readArray(readThis) - var tickMapper = es.map(function (data,callback) { - process.nextTick(function () { - callback(null, data) - }) - //since tickMapper is returning false - //pipe should pause the writer until a drain occurs - return false - }) - reader.pipe(tickMapper) - readStream(tickMapper, function (err, array) { - it(array).deepEqual(readThis) - it(array.length).deepEqual(readThis.length) - it(drains).equal(readThis.length) - test.done() - }) - tickMapper.on('drain', function () { - drains ++ - }) - -} -require('./helper')(module) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/readable.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/readable.asynct.js deleted file mode 100644 index a33988cd..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/readable.asynct.js +++ /dev/null @@ -1,175 +0,0 @@ - -var es = require('../') - , it = require('it-is').style('colour') - , u = require('ubelt') - -exports ['read an array'] = function (test) { - - - console.log('readable') - return test.end() - var readThis = u.map(3, 6, 100, u.id) //array of multiples of 3 < 100 - - console.log('readable') - - var reader = - es.readable(function (i, callback) { - if(i >= readThis.length) - return this.emit('end') - console.log('readable') - callback(null, readThis[i]) - }) - - var writer = es.writeArray(function (err, array){ - if(err) throw err - it(array).deepEqual(readThis) - test.done() - }) - - reader.pipe(writer) -} - -exports ['read an array - async'] = function (test) { - - var readThis = u.map(3, 6, 100, u.id) //array of multiples of 3 < 100 - - var reader = - es.readable(function (i, callback) { - if(i >= readThis.length) - return this.emit('end') - u.delay(callback)(null, readThis[i]) - }) - - var writer = es.writeArray(function (err, array){ - if(err) throw err - it(array).deepEqual(readThis) - test.done() - }) - - reader.pipe(writer) -} - - -exports ['emit data then call next() also works'] = function (test) { - - var readThis = u.map(3, 6, 100, u.id) //array of multiples of 3 < 100 - - var reader = - es.readable(function (i, next) { - if(i >= readThis.length) - return this.emit('end') - this.emit('data', readThis[i]) - next() - }) - - var writer = es.writeArray(function (err, array){ - if(err) throw err - it(array).deepEqual(readThis) - test.done() - }) - - reader.pipe(writer) -} - - -exports ['callback emits error, then stops'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , called = 0 - - var reader = - es.readable(function (i, callback) { - if(called++) - return - callback(err) - }) - - reader.on('error', function (_err){ - it(_err).deepEqual(err) - u.delay(function() { - it(called).equal(1) - test.done() - }, 50)() - }) -} - -exports['readable does not call read concurrently'] = function (test) { - - var current = 0 - var source = es.readable(function(count, cb){ - current ++ - if(count > 100) - return this.emit('end') - u.delay(function(){ - current -- - it(current).equal(0) - cb(null, {ok: true, n: count}); - })(); - }); - - var destination = es.map(function(data, cb){ - //console.info(data); - cb(); - }); - - var all = es.connect(source, destination); - - destination.on('end', test.done) -} - - -// -// emitting multiple errors is not supported by stream. -// -// I do not think that this is a good idea, at least, there should be an option to pipe to -// continue on error. it makes alot ef sense, if you are using Stream like I am, to be able to emit multiple errors. -// an error might not necessarily mean the end of the stream. it depends on the error, at least. -// -// I will start a thread on the mailing list. I'd rather that than use a custom `pipe` implementation. -// -// basically, I want to be able use pipe to transform objects, and if one object is invalid, -// the next might still be good, so I should get to choose if it's gonna stop. -// re-enstate this test when this issue progresses. -// -// hmm. I could add this to es.connect by deregistering the error listener, -// but I would rather it be an option in core. - -/* -exports ['emit multiple errors, with 2nd parameter (continueOnError)'] = function (test) { - - var readThis = d.map(1, 100, d.id) - , errors = 0 - var reader = - es.readable(function (i, callback) { - console.log(i, readThis.length) - if(i >= readThis.length) - return this.emit('end') - if(!(readThis[i] % 7)) - return callback(readThis[i]) - callback(null, readThis[i]) - }, true) - - var writer = es.writeArray(function (err, array) { - if(err) throw err - it(array).every(function (u){ - it(u % 7).notEqual(0) - }).property('length', 80) - it(errors).equal(14) - test.done() - }) - - reader.on('error', function (u) { - errors ++ - console.log(u) - if('number' !== typeof u) - throw u - - it(u % 7).equal(0) - - }) - - reader.pipe(writer) -} -*/ - -require('./helper')(module) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/replace.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/replace.asynct.js deleted file mode 100644 index 524a915b..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/replace.asynct.js +++ /dev/null @@ -1,51 +0,0 @@ -var es = require('../') - , it = require('it-is').style('colour') - , d = require('ubelt') - , spec = require('stream-spec') - -var next = process.nextTick - -var fizzbuzz = '12F4BF78FB11F1314FB1617F19BF2223FB26F2829FB3132F34BF3738FB41F4344FB4647F49BF5253FB56F5859FB6162F64BF6768FB71F7374FB7677F79BF8283FB86F8889FB9192F94BF9798FB' - , fizz7buzz = '12F4BFseven8FB11F1314FB161sevenF19BF2223FB26F2829FB3132F34BF3seven38FB41F4344FB464sevenF49BF5253FB56F5859FB6162F64BF6seven68FBseven1Fseven3seven4FBseven6sevensevenFseven9BF8283FB86F8889FB9192F94BF9seven98FB' - -exports ['fizz buzz'] = function (test) { - - var readThis = d.map(1, 100, function (i) { - return ( - ! (i % 3 || i % 5) ? "FB" : - !(i % 3) ? "F" : - !(i % 5) ? "B" : - ''+i - ) - }) //array of multiples of 3 < 100 - - var reader = es.readArray(readThis) - var join = es.wait(function (err, string){ - it(string).equal(fizzbuzz) - test.done() - }) - reader.pipe(join) - -} - - -exports ['fizz buzz replace'] = function (test) { - var split = es.split(/(1)/) - var replace = es.replace('7', 'seven') -// var x = spec(replace).through() - split - .pipe(replace) - .pipe(es.join(function (err, string) { - it(string).equal(fizz7buzz) - })) - - replace.on('close', function () { -// x.validate() - test.done() - }) - - split.write(fizzbuzz) - split.end() - -} -require('./helper')(module) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/simple-map.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/simple-map.asynct.js deleted file mode 100644 index 25121f93..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/simple-map.asynct.js +++ /dev/null @@ -1,343 +0,0 @@ -'use strict'; - -var es = require('../') - , it = require('it-is') - , u = require('ubelt') - , spec = require('stream-spec') - , Stream = require('stream') - , from = require('from') - , through = require('through') - -//REFACTOR THIS TEST TO USE es.readArray and es.writeArray - -function writeArray(array, stream) { - - array.forEach( function (j) { - stream.write(j) - }) - stream.end() - -} - -function readStream(stream, done) { - - var array = [] - stream.on('data', function (data) { - array.push(data) - }) - stream.on('error', done) - stream.on('end', function (data) { - done(null, array) - }) - -} - -//call sink on each write, -//and complete when finished. - -function pauseStream (prob, delay) { - var pauseIf = ( - 'number' == typeof prob - ? function () { - return Math.random() < prob - } - : 'function' == typeof prob - ? prob - : 0.1 - ) - var delayer = ( - !delay - ? process.nextTick - : 'number' == typeof delay - ? function (next) { setTimeout(next, delay) } - : delay - ) - - return es.through(function (data) { - if(!this.paused && pauseIf()) { - console.log('PAUSE STREAM PAUSING') - this.pause() - var self = this - delayer(function () { - console.log('PAUSE STREAM RESUMING') - self.resume() - }) - } - console.log("emit ('data', " + data + ')') - this.emit('data', data) - }) -} - -exports ['simple map'] = function (test) { - - var input = u.map(1, 1000, function () { - return Math.random() - }) - var expected = input.map(function (v) { - return v * 2 - }) - - var pause = pauseStream(0.1) - var fs = from(input) - var ts = es.writeArray(function (err, ar) { - it(ar).deepEqual(expected) - test.done() - }) - var map = es.through(function (data) { - this.emit('data', data * 2) - }) - - spec(map).through().validateOnExit() - spec(pause).through().validateOnExit() - - fs.pipe(map).pipe(pause).pipe(ts) -} - -exports ['simple map applied to a stream'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - - var doubler = es.map(function (data, cb) { - cb(null, data * 2) - }) - - spec(doubler).through().validateOnExit() - - //a map is only a middle man, so it is both readable and writable - - it(doubler).has({ - readable: true, - writable: true, - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 2 - })) -// process.nextTick(x.validate) - test.done() - }) - - writeArray(input, doubler) - -} - -exports['pipe two maps together'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - function dd (data, cb) { - cb(null, data * 2) - } - var doubler1 = es.map(dd), doubler2 = es.map(dd) - - doubler1.pipe(doubler2) - - spec(doubler1).through().validateOnExit() - spec(doubler2).through().validateOnExit() - - readStream(doubler2, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 4 - })) - test.done() - }) - - writeArray(input, doubler1) - -} - -//next: -// -// test pause, resume and drian. -// - -// then make a pipe joiner: -// -// plumber (evStr1, evStr2, evStr3, evStr4, evStr5) -// -// will return a single stream that write goes to the first - -exports ['map will not call end until the callback'] = function (test) { - - var ticker = es.map(function (data, cb) { - process.nextTick(function () { - cb(null, data * 2) - }) - }) - - spec(ticker).through().validateOnExit() - - ticker.write('x') - ticker.end() - - ticker.on('end', function () { - test.done() - }) -} - - -exports ['emit error thrown'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - es.map(function () { - throw err - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - -// onExit(spec(mapper).basic().validate) -//need spec that says stream may error. - - mapper.write('hello') - -} - -exports ['emit error calledback'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - es.map(function (data, callback) { - callback(err) - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['do not emit drain if not paused'] = function (test) { - - var map = es.map(function (data, callback) { - u.delay(callback)(null, 1) - return true - }) - - spec(map).through().pausable().validateOnExit() - - map.on('drain', function () { - it(false).ok('should not emit drain unless the stream is paused') - }) - - it(map.write('hello')).equal(true) - it(map.write('hello')).equal(true) - it(map.write('hello')).equal(true) - setTimeout(function () {map.end()},10) - map.on('end', test.done) -} - -exports ['emits drain if paused, when all '] = function (test) { - var active = 0 - var drained = false - var map = es.map(function (data, callback) { - active ++ - u.delay(function () { - active -- - callback(null, 1) - })() - console.log('WRITE', false) - return false - }) - - spec(map).through().validateOnExit() - - map.on('drain', function () { - drained = true - it(active).equal(0, 'should emit drain when all maps are done') - }) - - it(map.write('hello')).equal(false) - it(map.write('hello')).equal(false) - it(map.write('hello')).equal(false) - - process.nextTick(function () {map.end()},10) - - map.on('end', function () { - console.log('end') - it(drained).ok('shoud have emitted drain before end') - test.done() - }) - -} - -exports ['map applied to a stream with filtering'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - - var doubler = es.map(function (data, callback) { - if (data % 2) - callback(null, data * 2) - else - callback() - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.filter(function (j) { - return j % 2 - }).map(function (j) { - return j * 2 - })) - test.done() - }) - - spec(doubler).through().validateOnExit() - - writeArray(input, doubler) - -} - -exports ['simple mapSync applied to a stream'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - - var doubler = es.mapSync(function (data) { - return data * 2 - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 2 - })) - test.done() - }) - - spec(doubler).through().validateOnExit() - - writeArray(input, doubler) - -} - -exports ['mapSync applied to a stream with filtering'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - - var doubler = es.mapSync(function (data) { - if (data % 2) - return data * 2 - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.filter(function (j) { - return j % 2 - }).map(function (j) { - return j * 2 - })) - test.done() - }) - - spec(doubler).through().validateOnExit() - - writeArray(input, doubler) - -} - -require('./helper')(module) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/spec.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/spec.asynct.js deleted file mode 100644 index 6d5fb6b8..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/spec.asynct.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - assert that data is called many times - assert that end is called eventually - - assert that when stream enters pause state, - on drain is emitted eventually. -*/ - -var es = require('..') -var it = require('it-is').style('colour') -var spec = require('stream-spec') - -exports['simple stream'] = function (test) { - - var stream = es.through() - var x = spec(stream).basic().pausable() - - stream.write(1) - stream.write(1) - stream.pause() - stream.write(1) - stream.resume() - stream.write(1) - stream.end(2) //this will call write() - - process.nextTick(function (){ - x.validate() - test.done() - }) -} - -exports['throw on write when !writable'] = function (test) { - - var stream = es.through() - var x = spec(stream).basic().pausable() - - stream.write(1) - stream.write(1) - stream.end(2) //this will call write() - stream.write(1) //this will be throwing..., but the spec will catch it. - - process.nextTick(function () { - x.validate() - test.done() - }) - -} - -exports['end fast'] = function (test) { - - var stream = es.through() - var x = spec(stream).basic().pausable() - - stream.end() //this will call write() - - process.nextTick(function () { - x.validate() - test.done() - }) - -} - - -/* - okay, that was easy enough, whats next? - - say, after you call paused(), write should return false - until resume is called. - - simple way to implement this: - write must return !paused - after pause() paused = true - after resume() paused = false - - on resume, if !paused drain is emitted again. - after drain, !paused - - there are lots of subtle ordering bugs in streams. - - example, set !paused before emitting drain. - - the stream api is stateful. -*/ - - -require('./helper')(module) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/split.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/split.asynct.js deleted file mode 100644 index 7d44bac0..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/split.asynct.js +++ /dev/null @@ -1,47 +0,0 @@ -var es = require('../') - , it = require('it-is').style('colour') - , d = require('ubelt') - , join = require('path').join - , fs = require('fs') - , Stream = require('stream').Stream - , spec = require('stream-spec') - -exports ['es.split() works like String#split'] = function (test) { - var readme = join(__filename) - , expected = fs.readFileSync(readme, 'utf-8').split('\n') - , cs = es.split() - , actual = [] - , ended = false - , x = spec(cs).through() - - var a = new Stream () - - a.write = function (l) { - actual.push(l.trim()) - } - a.end = function () { - - ended = true - expected.forEach(function (v,k) { - //String.split will append an empty string '' - //if the string ends in a split pattern. - //es.split doesn't which was breaking this test. - //clearly, appending the empty string is correct. - //tests are passing though. which is the current job. - if(v) - it(actual[k]).like(v) - }) - //give the stream time to close - process.nextTick(function () { - test.done() - x.validate() - }) - } - a.writable = true - - fs.createReadStream(readme, {flags: 'r'}).pipe(cs) - cs.pipe(a) - -} - -require('./helper')(module) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/stringify.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/stringify.js deleted file mode 100644 index d158185a..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/stringify.js +++ /dev/null @@ -1,15 +0,0 @@ - - - -var es = require('../') - -exports['handle buffer'] = function (t) { - - - es.stringify().on('data', function (d) { - t.equal(d.trim(), JSON.stringify('HELLO')) - t.end() - }).write(new Buffer('HELLO')) - -} -require('./helper')(module) diff --git a/node_modules/gulp-minify-css/node_modules/event-stream/test/writeArray.asynct.js b/node_modules/gulp-minify-css/node_modules/event-stream/test/writeArray.asynct.js deleted file mode 100644 index 5d705de8..00000000 --- a/node_modules/gulp-minify-css/node_modules/event-stream/test/writeArray.asynct.js +++ /dev/null @@ -1,31 +0,0 @@ - -var es = require('../') - , it = require('it-is').style('colour') - , d = require('ubelt') - -exports ['write an array'] = function (test) { - - var readThis = d.map(3, 6, 100, d.id) //array of multiples of 3 < 100 - - var writer = es.writeArray(function (err, array){ - if(err) throw err //unpossible - it(array).deepEqual(readThis) - test.done() - }) - - d.each(readThis, writer.write.bind(writer)) - writer.end() - -} - - -exports ['writer is writable, but not readable'] = function (test) { - var reader = es.writeArray(function () {}) - it(reader).has({ - readable: false, - writable: true - }) - - test.done() -} -require('./helper')(module) diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/.npmignore b/node_modules/gulp-minify-css/node_modules/gulp-util/.npmignore deleted file mode 100644 index b5ef13a3..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.DS_Store -*.log -node_modules -build -*.node -components \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/.travis.yml b/node_modules/gulp-minify-css/node_modules/gulp-util/.travis.yml deleted file mode 100644 index 33ad9f8c..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -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-minify-css/node_modules/gulp-util/LICENSE b/node_modules/gulp-minify-css/node_modules/gulp-util/LICENSE deleted file mode 100755 index 7cbe012c..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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-minify-css/node_modules/gulp-util/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/README.md deleted file mode 100644 index fd0e506e..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/README.md +++ /dev/null @@ -1,166 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/index.js deleted file mode 100644 index 6746ee4b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/index.js +++ /dev/null @@ -1,18 +0,0 @@ -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-minify-css/node_modules/gulp-util/lib/File.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/File.js deleted file mode 100644 index 690a508a..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/File.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('vinyl'); \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/PluginError.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/PluginError.js deleted file mode 100644 index 96555672..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/PluginError.js +++ /dev/null @@ -1,65 +0,0 @@ -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-minify-css/node_modules/gulp-util/lib/beep.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/beep.js deleted file mode 100644 index 5473d754..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/beep.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function() { - process.stdout.write('\x07'); -}; diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/buffer.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/buffer.js deleted file mode 100644 index 4cb064ac..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/buffer.js +++ /dev/null @@ -1,15 +0,0 @@ -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-minify-css/node_modules/gulp-util/lib/colors.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/colors.js deleted file mode 100644 index bc804940..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/colors.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('chalk'); \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/combine.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/combine.js deleted file mode 100644 index f20712d2..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/combine.js +++ /dev/null @@ -1,11 +0,0 @@ -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-minify-css/node_modules/gulp-util/lib/date.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/date.js deleted file mode 100644 index 935793cc..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/date.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('dateformat'); \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/env.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/env.js deleted file mode 100644 index ea1e03e4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/env.js +++ /dev/null @@ -1,4 +0,0 @@ -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-minify-css/node_modules/gulp-util/lib/isBuffer.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/isBuffer.js deleted file mode 100644 index 0e23782c..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/isBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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-minify-css/node_modules/gulp-util/lib/isNull.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/isNull.js deleted file mode 100644 index 403bb30e..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/isNull.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(v) { - return v === null; -}; \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/isStream.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/isStream.js deleted file mode 100644 index 9ce0929b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/isStream.js +++ /dev/null @@ -1,5 +0,0 @@ -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-minify-css/node_modules/gulp-util/lib/linefeed.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/linefeed.js deleted file mode 100644 index 5b0dfa4b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/linefeed.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = '\n'; \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/log.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/log.js deleted file mode 100644 index cdbb22fc..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/log.js +++ /dev/null @@ -1,9 +0,0 @@ -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-minify-css/node_modules/gulp-util/lib/noop.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/noop.js deleted file mode 100644 index 7862cb16..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/noop.js +++ /dev/null @@ -1,5 +0,0 @@ -var through = require('through2'); - -module.exports = function () { - return through.obj(); -}; diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/replaceExtension.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/replaceExtension.js deleted file mode 100644 index 3f76938e..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/replaceExtension.js +++ /dev/null @@ -1,9 +0,0 @@ -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-minify-css/node_modules/gulp-util/lib/template.js b/node_modules/gulp-minify-css/node_modules/gulp-util/lib/template.js deleted file mode 100644 index c467820f..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/lib/template.js +++ /dev/null @@ -1,19 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/chalk/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/index.js deleted file mode 100644 index a21f7022..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/index.js +++ /dev/null @@ -1,63 +0,0 @@ -'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-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi deleted file mode 120000 index b65c9f81..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi +++ /dev/null @@ -1 +0,0 @@ -../strip-ansi/cli.js \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js deleted file mode 100644 index 3da548c4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js +++ /dev/null @@ -1,38 +0,0 @@ -'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-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json deleted file mode 100644 index 2d61dabe..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md deleted file mode 100644 index 4ac8cbd0..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,65 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js deleted file mode 100644 index 27316b1f..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js +++ /dev/null @@ -1,24 +0,0 @@ -'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-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json deleted file mode 100644 index e55a6244..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md deleted file mode 100644 index 0918c851..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js deleted file mode 100755 index f8019cda..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js +++ /dev/null @@ -1,27 +0,0 @@ -#!/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-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js deleted file mode 100644 index 62320c59..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'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-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json deleted file mode 100644 index 7ca2b5d1..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md deleted file mode 100644 index eb661b3d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/chalk/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/package.json deleted file mode 100644 index 853b0144..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/chalk/readme.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/readme.md deleted file mode 100644 index 46813acf..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/chalk/readme.md +++ /dev/null @@ -1,158 +0,0 @@ -# <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-minify-css/node_modules/gulp-util/node_modules/dateformat/LICENSE b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/LICENSE deleted file mode 100644 index 57d44e2a..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -(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-minify-css/node_modules/gulp-util/node_modules/dateformat/Readme.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/Readme.md deleted file mode 100644 index 12f9872d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/Readme.md +++ /dev/null @@ -1,79 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js deleted file mode 100644 index e1c38245..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js +++ /dev/null @@ -1,183 +0,0 @@ -/* - * 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-minify-css/node_modules/gulp-util/node_modules/dateformat/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/package.json deleted file mode 100644 index deee5fee..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/dateformat/test/basic.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/basic.js deleted file mode 100644 index 9602a72a..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/basic.js +++ /dev/null @@ -1,45 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js deleted file mode 100644 index 07780fa8..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js +++ /dev/null @@ -1,10 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js deleted file mode 100644 index d1ddbe81..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js +++ /dev/null @@ -1,4 +0,0 @@ -var dateFormat = require('../lib/dateformat.js'); - -var val = process.argv[2] || new Date(); -console.log(dateFormat(val, 'W')); diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh deleted file mode 100644 index 3c3e69b3..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/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-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md deleted file mode 100644 index d362e36d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js deleted file mode 100644 index 0bf92a5c..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * 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-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json deleted file mode 100644 index 85f64e7b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/README.md deleted file mode 100644 index e89bd0db..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/index.js deleted file mode 100644 index 230f8ee8..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/index.js +++ /dev/null @@ -1,216 +0,0 @@ -/** - * 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md deleted file mode 100644 index 6191a196..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js deleted file mode 100644 index f3b8c438..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json deleted file mode 100644 index 600f622a..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md deleted file mode 100644 index da283fc4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js deleted file mode 100644 index 52eec906..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md deleted file mode 100644 index 16de7300..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js deleted file mode 100644 index da17c6cd..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json deleted file mode 100644 index ab0f1e6d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json deleted file mode 100644 index 53559bd9..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md deleted file mode 100644 index 7cbc6538..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js deleted file mode 100644 index 343a4156..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md deleted file mode 100644 index eef7f9c6..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js deleted file mode 100644 index ce4e6d8e..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * 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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md deleted file mode 100644 index 9957cefa..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js deleted file mode 100644 index f69503d4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * 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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json deleted file mode 100644 index 29c83d94..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json deleted file mode 100644 index 00c07f7b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md deleted file mode 100644 index c6ca90c4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js deleted file mode 100644 index fa870474..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * 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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md deleted file mode 100644 index 9957cefa..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js deleted file mode 100644 index f69503d4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * 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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json deleted file mode 100644 index 29c83d94..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json deleted file mode 100644 index 74a4f272..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json deleted file mode 100644 index 254ecb1e..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md deleted file mode 100644 index bee29a8d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js deleted file mode 100644 index 139568a2..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md deleted file mode 100644 index fbcaad2f..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js deleted file mode 100644 index b34a3500..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json deleted file mode 100644 index 5e652af4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md deleted file mode 100644 index 23f3000b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js deleted file mode 100644 index 12be0bf1..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * 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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md deleted file mode 100644 index 16de7300..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js deleted file mode 100644 index da17c6cd..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json deleted file mode 100644 index 21b0fd84..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json deleted file mode 100644 index a51388c1..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md deleted file mode 100644 index eeb0a78b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js deleted file mode 100644 index 3596ac34..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * 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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md deleted file mode 100644 index 16de7300..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js deleted file mode 100644 index da17c6cd..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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-minify-css/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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json deleted file mode 100644 index 21b0fd84..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json deleted file mode 100644 index 698a9eaf..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json deleted file mode 100644 index cd3c29bd..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md deleted file mode 100644 index d9ce72bc..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js deleted file mode 100644 index bba7e231..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json deleted file mode 100644 index f08cd47d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md deleted file mode 100644 index 33f028da..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js deleted file mode 100644 index ccf622fa..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * 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-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json deleted file mode 100644 index 8e864ab7..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/lodash.template/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/package.json deleted file mode 100644 index a42d1163..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/lodash.template/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/minimist/.travis.yml b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/.travis.yml deleted file mode 100644 index cc4dba29..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/LICENSE b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/LICENSE deleted file mode 100644 index ee27ba4b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/minimist/example/parse.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/example/parse.js deleted file mode 100644 index abff3e8e..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/example/parse.js +++ /dev/null @@ -1,2 +0,0 @@ -var argv = require('../')(process.argv.slice(2)); -console.dir(argv); diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/index.js deleted file mode 100644 index 2aa95140..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/index.js +++ /dev/null @@ -1,187 +0,0 @@ -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, 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], 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, 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-minify-css/node_modules/gulp-util/node_modules/minimist/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/package.json deleted file mode 100644 index 3f97f9c3..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "minimist", - "version": "0.0.7", - "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.7", - "_from": "minimist@~0.0.5" -} diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/readme.markdown b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/readme.markdown deleted file mode 100644 index c2563532..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/readme.markdown +++ /dev/null @@ -1,73 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/minimist/test/dash.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/dash.js deleted file mode 100644 index 8b034b99..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/dash.js +++ /dev/null @@ -1,24 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/minimist/test/default_bool.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/default_bool.js deleted file mode 100644 index f0041ee4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/default_bool.js +++ /dev/null @@ -1,20 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/minimist/test/dotted.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/dotted.js deleted file mode 100644 index ef0ae349..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/dotted.js +++ /dev/null @@ -1,16 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/minimist/test/long.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/long.js deleted file mode 100644 index 5d3a1e09..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/long.js +++ /dev/null @@ -1,31 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/minimist/test/parse.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/parse.js deleted file mode 100644 index 7c4348a4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/parse.js +++ /dev/null @@ -1,297 +0,0 @@ -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('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-minify-css/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js deleted file mode 100644 index 21851b03..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js +++ /dev/null @@ -1,9 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/minimist/test/short.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/short.js deleted file mode 100644 index d513a1c2..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/short.js +++ /dev/null @@ -1,67 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/minimist/test/whitespace.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/whitespace.js deleted file mode 100644 index 8a52a58c..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/minimist/test/whitespace.js +++ /dev/null @@ -1,8 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/multipipe/.npmignore b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/.travis.yml b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/.travis.yml deleted file mode 100644 index 6e5919de..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/History.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/History.md deleted file mode 100644 index 4174056f..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/History.md +++ /dev/null @@ -1,10 +0,0 @@ - -0.0.1 / 2013-01-15 -================== - -* fix error bubbling - -0.0.0 / 2013-01-13 -================== - -* initial release diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/Makefile b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/Makefile deleted file mode 100644 index d1df0ab3..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/Makefile +++ /dev/null @@ -1,10 +0,0 @@ - -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-minify-css/node_modules/gulp-util/node_modules/multipipe/Readme.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/Readme.md deleted file mode 100644 index e8f432ec..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/Readme.md +++ /dev/null @@ -1,74 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/multipipe/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/index.js deleted file mode 100644 index 5292417c..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/index.js +++ /dev/null @@ -1,57 +0,0 @@ - -/** - * 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); - stream.on('error', ret.emit.bind(ret, 'error')); - }); - - return ret; -} - diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore deleted file mode 100644 index 07e6e472..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml deleted file mode 100644 index 6e5919de..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md deleted file mode 100644 index 547189a6..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md +++ /dev/null @@ -1,26 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md deleted file mode 100644 index e39e1e9e..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md +++ /dev/null @@ -1,129 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js deleted file mode 100755 index ad537a04..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js +++ /dev/null @@ -1,49 +0,0 @@ -#!/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-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js deleted file mode 100644 index 90b261b4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js +++ /dev/null @@ -1,62 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json deleted file mode 100644 index 1949be68..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js deleted file mode 100644 index fe3b2560..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js +++ /dev/null @@ -1,161 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/multipipe/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/package.json deleted file mode 100644 index 264ee69f..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "multipipe", - "version": "0.0.1", - "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.1", - "_from": "multipipe@~0.0.1" -} diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js deleted file mode 100644 index 57fd1886..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js +++ /dev/null @@ -1,85 +0,0 @@ -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)); - }); - - it('should aggregate errors', 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); - }); -}); - -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-minify-css/node_modules/gulp-util/node_modules/through2/.jshintrc b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/.jshintrc deleted file mode 100644 index c8ef3ca4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/through2/.npmignore b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/.travis.yml b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/.travis.yml deleted file mode 100644 index 12b1a310..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/LICENSE b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/LICENSE deleted file mode 100644 index f6a0029d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/README.md deleted file mode 100644 index c9388b38..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/README.md +++ /dev/null @@ -1,131 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore deleted file mode 100644 index 38344f87..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -build/ -test/ -examples/ -fs.js -zlib.js \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md deleted file mode 100644 index be976683..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md +++ /dev/null @@ -1,768 +0,0 @@ -# readable-stream - -A new class of streams for Node.js - -This module provides the new Stream base classes introduced in Node -v0.10, for use in Node v0.8. You can use it to have programs that -have to work with node v0.8, while being forward-compatible for v0.10 -and beyond. When you drop support for v0.8, you can remove this -module, and only use the native streams. - -This is almost exactly the same codebase as appears in Node v0.10. -However: - -1. The exported object is actually the Readable class. Decorating the - native `stream` module would be global pollution. -2. In v0.10, you can safely use `base64` as an argument to - `setEncoding` in Readable streams. However, in v0.8, the - StringDecoder class has no `end()` method, which is problematic for - Base64. So, don't use that, because it'll break and be weird. - -Other than that, the API is the same as `require('stream')` in v0.10, -so the API docs are reproduced below. - ----------- - - Stability: 2 - Unstable - -A stream is an abstract interface implemented by various objects in -Node. For example a request to an HTTP server is a stream, as is -stdout. Streams are readable, writable, or both. All streams are -instances of [EventEmitter][] - -You can load the Stream base classes by doing `require('stream')`. -There are base classes provided for Readable streams, Writable -streams, Duplex streams, and Transform streams. - -## Compatibility - -In earlier versions of Node, the Readable stream interface was -simpler, but also less powerful and less useful. - -* Rather than waiting for you to call the `read()` method, `'data'` - events would start emitting immediately. If you needed to do some - I/O to decide how to handle data, then you had to store the chunks - in some kind of buffer so that they would not be lost. -* The `pause()` method was advisory, rather than guaranteed. This - meant that you still had to be prepared to receive `'data'` events - even when the stream was in a paused state. - -In Node v0.10, the Readable class described below was added. For -backwards compatibility with older Node programs, Readable streams -switch into "old mode" when a `'data'` event handler is added, or when -the `pause()` or `resume()` methods are called. The effect is that, -even if you are not using the new `read()` method and `'readable'` -event, you no longer have to worry about losing `'data'` chunks. - -Most programs will continue to function normally. However, this -introduces an edge case in the following conditions: - -* No `'data'` event handler is added. -* The `pause()` and `resume()` methods are never called. - -For example, consider the following code: - -```javascript -// WARNING! BROKEN! -net.createServer(function(socket) { - - // we add an 'end' method, but never consume the data - socket.on('end', function() { - // It will never get here. - socket.end('I got your message (but didnt read it)\n'); - }); - -}).listen(1337); -``` - -In versions of node prior to v0.10, the incoming message data would be -simply discarded. However, in Node v0.10 and beyond, the socket will -remain paused forever. - -The workaround in this situation is to call the `resume()` method to -trigger "old mode" behavior: - -```javascript -// Workaround -net.createServer(function(socket) { - - socket.on('end', function() { - socket.end('I got your message (but didnt read it)\n'); - }); - - // start the flow of data, discarding it. - socket.resume(); - -}).listen(1337); -``` - -In addition to new Readable streams switching into old-mode, pre-v0.10 -style streams can be wrapped in a Readable class using the `wrap()` -method. - -## Class: stream.Readable - -<!--type=class--> - -A `Readable Stream` has the following methods, members, and events. - -Note that `stream.Readable` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -method. (See below.) - -### new stream.Readable([options]) - -* `options` {Object} - * `highWaterMark` {Number} The maximum number of bytes to store in - the internal buffer before ceasing to read from the underlying - resource. Default=16kb - * `encoding` {String} If specified, then buffers will be decoded to - strings using the specified encoding. Default=null - * `objectMode` {Boolean} Whether this stream should behave - as a stream of objects. Meaning that stream.read(n) returns - a single value instead of a Buffer of size n - -In classes that extend the Readable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### readable.\_read(size) - -* `size` {Number} Number of bytes to read asynchronously - -Note: **This function should NOT be called directly.** It should be -implemented by child classes, and called by the internal Readable -class methods only. - -All Readable stream implementations must provide a `_read` method -to fetch data from the underlying resource. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -When data is available, put it into the read queue by calling -`readable.push(chunk)`. If `push` returns false, then you should stop -reading. When `_read` is called again, you should start pushing more -data. - -The `size` argument is advisory. Implementations where a "read" is a -single call that returns data can use this to know how much data to -fetch. Implementations where that is not relevant, such as TCP or -TLS, may ignore this argument, and simply provide data whenever it -becomes available. There is no need, for example to "wait" until -`size` bytes are available before calling `stream.push(chunk)`. - -### readable.push(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to push into the read queue -* return {Boolean} Whether or not more pushes should be performed - -Note: **This function should be called by Readable implementors, NOT -by consumers of Readable subclasses.** The `_read()` function will not -be called again until at least one `push(chunk)` call is made. If no -data is available, then you MAY call `push('')` (an empty string) to -allow a future `_read` call, without adding any data to the queue. - -The `Readable` class works by putting data into a read queue to be -pulled out later by calling the `read()` method when the `'readable'` -event fires. - -The `push()` method will explicitly insert some data into the read -queue. If it is called with `null` then it will signal the end of the -data. - -In some cases, you may be wrapping a lower-level source which has some -sort of pause/resume mechanism, and a data callback. In those cases, -you could wrap the low-level source object by doing something like -this: - -```javascript -// source is an object with readStop() and readStart() methods, -// and an `ondata` member that gets called when it has data, and -// an `onend` member that gets called when the data is over. - -var stream = new Readable(); - -source.ondata = function(chunk) { - // if push() returns false, then we need to stop reading from source - if (!stream.push(chunk)) - source.readStop(); -}; - -source.onend = function() { - stream.push(null); -}; - -// _read will be called when the stream wants to pull more data in -// the advisory size argument is ignored in this case. -stream._read = function(n) { - source.readStart(); -}; -``` - -### readable.unshift(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue -* return {Boolean} Whether or not more pushes should be performed - -This is the corollary of `readable.push(chunk)`. Rather than putting -the data at the *end* of the read queue, it puts it at the *front* of -the read queue. - -This is useful in certain use-cases where a stream is being consumed -by a parser, which needs to "un-consume" some data that it has -optimistically pulled out of the source. - -```javascript -// A parser for a simple data protocol. -// The "header" is a JSON object, followed by 2 \n characters, and -// then a message body. -// -// Note: This can be done more simply as a Transform stream. See below. - -function SimpleProtocol(source, options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Readable.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - - // source is a readable stream, such as a socket or file - this._source = source; - - var self = this; - source.on('end', function() { - self.push(null); - }); - - // give it a kick whenever the source is readable - // read(0) will not consume any bytes - source.on('readable', function() { - self.read(0); - }); - - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Readable.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._read = function(n) { - if (!this._inBody) { - var chunk = this._source.read(); - - // if the source doesn't have data, we don't have data yet. - if (chunk === null) - return this.push(''); - - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - this.push(''); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // now, because we got some extra data, unshift the rest - // back into the read queue so that our consumer will see it. - var b = chunk.slice(split); - this.unshift(b); - - // and let them know that we are done parsing the header. - this.emit('header', this.header); - } - } else { - // from there on, just provide the data to our consumer. - // careful not to push(null), since that would indicate EOF. - var chunk = this._source.read(); - if (chunk) this.push(chunk); - } -}; - -// Usage: -var parser = new SimpleProtocol(source); -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - -### readable.wrap(stream) - -* `stream` {Stream} An "old style" readable stream - -If you are using an older Node library that emits `'data'` events and -has a `pause()` method that is advisory only, then you can use the -`wrap()` method to create a Readable stream that uses the old stream -as its data source. - -For example: - -```javascript -var OldReader = require('./old-api-module.js').OldReader; -var oreader = new OldReader; -var Readable = require('stream').Readable; -var myReader = new Readable().wrap(oreader); - -myReader.on('readable', function() { - myReader.read(); // etc. -}); -``` - -### Event: 'readable' - -When there is data ready to be consumed, this event will fire. - -When this event emits, call the `read()` method to consume the data. - -### Event: 'end' - -Emitted when the stream has received an EOF (FIN in TCP terminology). -Indicates that no more `'data'` events will happen. If the stream is -also writable, it may be possible to continue writing. - -### Event: 'data' - -The `'data'` event emits either a `Buffer` (by default) or a string if -`setEncoding()` was used. - -Note that adding a `'data'` event listener will switch the Readable -stream into "old mode", where data is emitted as soon as it is -available, rather than waiting for you to call `read()` to consume it. - -### Event: 'error' - -Emitted if there was an error receiving data. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### readable.setEncoding(encoding) - -Makes the `'data'` event emit a string instead of a `Buffer`. `encoding` -can be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`. - -The encoding can also be set by specifying an `encoding` field to the -constructor. - -### readable.read([size]) - -* `size` {Number | null} Optional number of bytes to read. -* Return: {Buffer | String | null} - -Note: **This function SHOULD be called by Readable stream users.** - -Call this method to consume data once the `'readable'` event is -emitted. - -The `size` argument will set a minimum number of bytes that you are -interested in. If not set, then the entire content of the internal -buffer is returned. - -If there is no data to consume, or if there are fewer bytes in the -internal buffer than the `size` argument, then `null` is returned, and -a future `'readable'` event will be emitted when more is available. - -Calling `stream.read(0)` will always return `null`, and will trigger a -refresh of the internal buffer, but otherwise be a no-op. - -### readable.pipe(destination, [options]) - -* `destination` {Writable Stream} -* `options` {Object} Optional - * `end` {Boolean} Default=true - -Connects this readable stream to `destination` WriteStream. Incoming -data on this stream gets written to `destination`. Properly manages -back-pressure so that a slow destination will not be overwhelmed by a -fast readable stream. - -This function returns the `destination` stream. - -For example, emulating the Unix `cat` command: - - process.stdin.pipe(process.stdout); - -By default `end()` is called on the destination when the source stream -emits `end`, so that `destination` is no longer writable. Pass `{ end: -false }` as `options` to keep the destination stream open. - -This keeps `writer` open so that "Goodbye" can be written at the -end. - - reader.pipe(writer, { end: false }); - reader.on("end", function() { - writer.end("Goodbye\n"); - }); - -Note that `process.stderr` and `process.stdout` are never closed until -the process exits, regardless of the specified options. - -### readable.unpipe([destination]) - -* `destination` {Writable Stream} Optional - -Undo a previously established `pipe()`. If no destination is -provided, then all previously established pipes are removed. - -### readable.pause() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Ceases the flow of data. No `'data'` events are emitted while the -stream is in a paused state. - -### readable.resume() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Resumes the incoming `'data'` events after a `pause()`. - - -## Class: stream.Writable - -<!--type=class--> - -A `Writable` Stream has the following methods, members, and events. - -Note that `stream.Writable` is an abstract class designed to be -extended with an underlying implementation of the -`_write(chunk, encoding, cb)` method. (See below.) - -### new stream.Writable([options]) - -* `options` {Object} - * `highWaterMark` {Number} Buffer level when `write()` starts - returning false. Default=16kb - * `decodeStrings` {Boolean} Whether or not to decode strings into - Buffers before passing them to `_write()`. Default=true - -In classes that extend the Writable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### writable.\_write(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be written. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. Ignore chunk is a buffer. Note that chunk will - **always** be a buffer unless the `decodeStrings` option is - explicitly set to `false`. -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -All Writable stream implementations must provide a `_write` method to -send data to the underlying resource. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Writable -class methods only. - -Call the callback using the standard `callback(error)` pattern to -signal that the write completed successfully or with an error. - -If the `decodeStrings` flag is set in the constructor options, then -`chunk` may be a string rather than a Buffer, and `encoding` will -indicate the sort of string that it is. This is to support -implementations that have an optimized handling for certain string -data encodings. If you do not explicitly set the `decodeStrings` -option to `false`, then you can safely ignore the `encoding` argument, -and assume that `chunk` will always be a Buffer. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - - -### writable.write(chunk, [encoding], [callback]) - -* `chunk` {Buffer | String} Data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when this chunk is - successfully written. -* Returns {Boolean} - -Writes `chunk` to the stream. Returns `true` if the data has been -flushed to the underlying resource. Returns `false` to indicate that -the buffer is full, and the data will be sent out in the future. The -`'drain'` event will indicate when the buffer is empty again. - -The specifics of when `write()` will return false, is determined by -the `highWaterMark` option provided to the constructor. - -### writable.end([chunk], [encoding], [callback]) - -* `chunk` {Buffer | String} Optional final data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when the final chunk is - successfully written. - -Call this method to signal the end of the data being written to the -stream. - -### Event: 'drain' - -Emitted when the stream's write queue empties and it's safe to write -without buffering again. Listen for it when `stream.write()` returns -`false`. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### Event: 'finish' - -When `end()` is called and there are no more chunks to write, this -event is emitted. - -### Event: 'pipe' - -* `source` {Readable Stream} - -Emitted when the stream is passed to a readable stream's pipe method. - -### Event 'unpipe' - -* `source` {Readable Stream} - -Emitted when a previously established `pipe()` is removed using the -source Readable stream's `unpipe()` method. - -## Class: stream.Duplex - -<!--type=class--> - -A "duplex" stream is one that is both Readable and Writable, such as a -TCP socket connection. - -Note that `stream.Duplex` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -and `_write(chunk, encoding, callback)` methods as you would with a Readable or -Writable stream class. - -Since JavaScript doesn't have multiple prototypal inheritance, this -class prototypally inherits from Readable, and then parasitically from -Writable. It is thus up to the user to implement both the lowlevel -`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method -on extension duplex classes. - -### new stream.Duplex(options) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then - the stream will automatically end the readable side when the - writable side ends and vice versa. - -In classes that extend the Duplex class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -## Class: stream.Transform - -A "transform" stream is a duplex stream where the output is causally -connected in some way to the input, such as a zlib stream or a crypto -stream. - -There is no requirement that the output be the same size as the input, -the same number of chunks, or arrive at the same time. For example, a -Hash stream will only ever have a single chunk of output which is -provided when the input is ended. A zlib stream will either produce -much smaller or much larger than its input. - -Rather than implement the `_read()` and `_write()` methods, Transform -classes must implement the `_transform()` method, and may optionally -also implement the `_flush()` method. (See below.) - -### new stream.Transform([options]) - -* `options` {Object} Passed to both Writable and Readable - constructors. - -In classes that extend the Transform class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### transform.\_transform(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be transformed. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. (Ignore if `decodeStrings` chunk is a buffer.) -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Transform -class methods only. - -All Transform stream implementations must provide a `_transform` -method to accept input and produce output. - -`_transform` should do whatever has to be done in this specific -Transform class, to handle the bytes being written, and pass them off -to the readable portion of the interface. Do asynchronous I/O, -process things, and so on. - -Call `transform.push(outputChunk)` 0 or more times to generate output -from this input chunk, depending on how much data you want to output -as a result of this chunk. - -Call the callback function only when the current chunk is completely -consumed. Note that there may or may not be output as a result of any -particular input chunk. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### transform.\_flush(callback) - -* `callback` {Function} Call this function (optionally with an error - argument) when you are done flushing any remaining data. - -Note: **This function MUST NOT be called directly.** It MAY be implemented -by child classes, and if so, will be called by the internal Transform -class methods only. - -In some cases, your transform operation may need to emit a bit more -data at the end of the stream. For example, a `Zlib` compression -stream will store up some internal state so that it can optimally -compress the output. At the end, however, it needs to do the best it -can with what is left, so that the data will be complete. - -In those cases, you can implement a `_flush` method, which will be -called at the very end, after all the written data is consumed, but -before emitting `end` to signal the end of the readable side. Just -like with `_transform`, call `transform.push(chunk)` zero or more -times, as appropriate, and call `callback` when the flush operation is -complete. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### Example: `SimpleProtocol` parser - -The example above of a simple protocol parser can be implemented much -more simply by using the higher level `Transform` stream class. - -In this example, rather than providing the input as an argument, it -would be piped into the parser, which is a more idiomatic Node stream -approach. - -```javascript -function SimpleProtocol(options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Transform.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Transform.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._transform = function(chunk, encoding, done) { - if (!this._inBody) { - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // and let them know that we are done parsing the header. - this.emit('header', this.header); - - // now, because we got some extra data, emit this first. - this.push(b); - } - } else { - // from there on, just provide the data to our consumer as-is. - this.push(b); - } - done(); -}; - -var parser = new SimpleProtocol(); -source.pipe(parser) - -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - - -## Class: stream.PassThrough - -This is a trivial implementation of a `Transform` stream that simply -passes the input bytes across to the output. Its purpose is mainly -for examples and testing, but there are occasionally use cases where -it can come in handy. - - -[EventEmitter]: events.html#events_class_events_eventemitter diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js deleted file mode 100644 index ca807af8..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch deleted file mode 100644 index 0ad71a1f..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch +++ /dev/null @@ -1,68 +0,0 @@ -diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js -index c5a741c..a2e0d8e 100644 ---- a/lib/_stream_duplex.js -+++ b/lib/_stream_duplex.js -@@ -26,8 +26,8 @@ - - module.exports = Duplex; - var util = require('util'); --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('./_stream_readable'); -+var Writable = require('./_stream_writable'); - - util.inherits(Duplex, Readable); - -diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js -index a5e9864..330c247 100644 ---- a/lib/_stream_passthrough.js -+++ b/lib/_stream_passthrough.js -@@ -25,7 +25,7 @@ - - module.exports = PassThrough; - --var Transform = require('_stream_transform'); -+var Transform = require('./_stream_transform'); - var util = require('util'); - util.inherits(PassThrough, Transform); - -diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js -index 2259d2e..e6681ee 100644 ---- a/lib/_stream_readable.js -+++ b/lib/_stream_readable.js -@@ -23,6 +23,9 @@ 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 StringDecoder; -diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js -index e925b4b..f08b05e 100644 ---- a/lib/_stream_transform.js -+++ b/lib/_stream_transform.js -@@ -64,7 +64,7 @@ - - module.exports = Transform; - --var Duplex = require('_stream_duplex'); -+var Duplex = require('./_stream_duplex'); - var util = require('util'); - util.inherits(Transform, Duplex); - -diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js -index a26f711..56ca47d 100644 ---- a/lib/_stream_writable.js -+++ b/lib/_stream_writable.js -@@ -109,7 +109,7 @@ function WritableState(options, stream) { - function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. -- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex)) -+ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex'))) - return new Writable(options); - - this._writableState = new WritableState(options, this); diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index a2e0d8e0..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,69 +0,0 @@ -// 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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 330c247d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,41 +0,0 @@ -// 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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 323f3305..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,927 +0,0 @@ -// 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 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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index 707e4b3b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,205 +0,0 @@ -// 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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index 9eaf4ec2..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,371 +0,0 @@ -// 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 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 = []; -} - -function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof require('./_stream_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.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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE deleted file mode 100644 index 6de584a4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md deleted file mode 100644 index 4d2aa001..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md +++ /dev/null @@ -1,7 +0,0 @@ -**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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js deleted file mode 100755 index 46470cfd..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env node - -const hyperquest = require('hyperzip')(require('hyperdirect')) - , bl = require('bl') - , fs = require('fs') - , path = require('path') - , cheerio = require('cheerio') - - , files = require('./files') - , testReplace = require('./test-replacements') - - , srcurlpfx = 'https://raw.github.com/joyent/node/v' + process.argv[2] + '-release/' - , libsrcurl = srcurlpfx + 'lib/' - , testsrcurl = srcurlpfx + 'test/simple/' - , testlisturl = 'https://github.com/joyent/node/tree/v' + process.argv[2] + '-release/test/simple' - , libourroot = path.join(__dirname, '../') - , testourroot = path.join(__dirname, '../test/simple/') - - -function processFile (url, out, replacements) { - hyperquest(url).pipe(bl(function (err, data) { - if (err) - throw err - - data = data.toString() - replacements.forEach(function (replacement) { - data = data.replace.apply(data, replacement) - }) - - fs.writeFile(out, data, 'utf8', function (err) { - if (err) - throw err - - console.log('Wrote', out) - }) - })) -} - -function processLibFile (file) { - var replacements = files[file] - , url = libsrcurl + file - , out = path.join(libourroot, replacements.out || file) - - processFile(url, out, replacements) -} - - -function processTestFile (file) { - var replacements = testReplace.all - , url = testsrcurl + file - , out = path.join(testourroot, file) - - if (testReplace[file]) - replacements = replacements.concat(testReplace[file]) - - processFile(url, out, replacements) -} - - -if (!/0\.1\d\.\d+/.test(process.argv[2])) { - console.log('Usage: build.js <node version>') - return process.exit(-1) -} - - -//-------------------------------------------------------------------- -// Grab & process files in ../lib/ - -Object.keys(files).forEach(processLibFile) - -//-------------------------------------------------------------------- -// Discover, grab and process all test-string-decoder* files on joyent/node - -hyperquest(testlisturl).pipe(bl(function (err, data) { - if (err) - throw err - - var $ = cheerio.load(data.toString()) - - $('table.files .js-directory-link').each(function () { - var file = $(this).text() - if (/^test-string-decoder/.test(file) || file == 'common.js') - processTestFile(file) - }) -})) - -//-------------------------------------------------------------------- -// Grab the joyent/node test/common.js - -processFile( - testsrcurl + '../common.js' - , path.join(testourroot, '../common.js') - , testReplace['common.js'] -) \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js deleted file mode 100644 index 7396a4f4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js +++ /dev/null @@ -1,36 +0,0 @@ -/* This file lists the files to be fetched from the node repo - * in the /lib/ directory which will be placed in the ../lib/ - * directory after having each of the "replacements" in the - * array for that file applied to it. The replacements are - * simply the arguments to String#replace, so they can be - * strings, regexes, functions. - */ - -module.exports['string_decoder.js'] = [ - - // pull in Bufer as a require - // add Buffer.isEncoding where missing - [ - /^(\/\/ USE OR OTHER DEALINGS IN THE SOFTWARE\.)/m - , '$1\n\nvar Buffer = require(\'buffer\').Buffer;' - + '\n' - + '\nvar isBufferEncoding = Buffer.isEncoding' - + '\n || function(encoding) {' - + '\n switch (encoding && encoding.toLowerCase()) {' - + '\n 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;' - + '\n default: return false;' - + '\n }' - + '\n }' - + '\n' - - ] - - // use custom Buffer.isEncoding reference - , [ - /Buffer\.isEncoding\(/g - , 'isBufferEncoding\(' - ] - -] - -module.exports['string_decoder.js'].out = 'index.js' \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json deleted file mode 100644 index f7ee6a46..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "string_decoder-build", - "version": "0.0.0", - "description": "", - "main": "build.js", - "dependencies": { - "bl": "~0.6.0", - "hyperzip": "0.0.0", - "hyperdirect": "0.0.0", - "cheerio": "~0.13.1" - } -} diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js deleted file mode 100644 index 5bbf6028..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports.all = [ - [ - /require\(['"]string_decoder['"]\)/g - , 'require(\'../../\')' - ] - -] - -module.exports['common.js'] = [ - [ - /^ setImmediate,$/m - , ' typeof setImmediate == \'undefined\' ? null : setImmediate,' - ] - - , [ - /^ clearImmediate,$/m - , ' typeof clearImmediate == \'undefined\' ? null : clearImmediate,' - ] - - , [ - /^ global];$/m - , ' global].filter(Boolean);' - ] -] diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js deleted file mode 100644 index 2e44a03e..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json deleted file mode 100644 index 73785c10..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "string_decoder", - "version": "0.10.25", - "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", - "_from": "string_decoder@~0.10.x" -} diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js deleted file mode 100644 index ed5ff08d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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 path = require('path'); -var assert = require('assert'); - -exports.testDir = path.dirname(__filename); -exports.fixturesDir = path.join(exports.testDir, 'fixtures'); -exports.libDir = path.join(exports.testDir, '../lib'); -exports.tmpDir = path.join(exports.testDir, 'tmp'); -exports.PORT = +process.env.NODE_COMMON_PORT || 12346; - -if (process.platform === 'win32') { - exports.PIPE = '\\\\.\\pipe\\libuv-test'; -} else { - exports.PIPE = exports.tmpDir + '/test.sock'; -} - -var util = require('util'); -for (var i in util) exports[i] = util[i]; -//for (var i in exports) global[i] = exports[i]; - -function protoCtrChain(o) { - var result = []; - for (; o; o = o.__proto__) { result.push(o.constructor); } - return result.join(); -} - -exports.indirectInstanceOf = function(obj, cls) { - if (obj instanceof cls) { return true; } - var clsChain = protoCtrChain(cls.prototype); - var objChain = protoCtrChain(obj); - return objChain.slice(-clsChain.length) === clsChain; -}; - - -exports.ddCommand = function(filename, kilobytes) { - if (process.platform === 'win32') { - var p = path.resolve(exports.fixturesDir, 'create-file.js'); - return '"' + process.argv[0] + '" "' + p + '" "' + - filename + '" ' + (kilobytes * 1024); - } else { - return 'dd if=/dev/zero of="' + filename + '" bs=1024 count=' + kilobytes; - } -}; - - -exports.spawnCat = function(options) { - var spawn = require('child_process').spawn; - - if (process.platform === 'win32') { - return spawn('more', [], options); - } else { - return spawn('cat', [], options); - } -}; - - -exports.spawnPwd = function(options) { - var spawn = require('child_process').spawn; - - if (process.platform === 'win32') { - return spawn('cmd.exe', ['/c', 'cd'], options); - } else { - return spawn('pwd', [], options); - } -}; - - -// Turn this off if the test should not check for global leaks. -exports.globalCheck = true; - -process.on('exit', function() { - if (!exports.globalCheck) return; - var knownGlobals = [setTimeout, - setInterval, - typeof setImmediate == 'undefined' ? null : setImmediate, - clearTimeout, - clearInterval, - typeof clearImmediate == 'undefined' ? null : clearImmediate, - console, - Buffer, - process, - global].filter(Boolean); - - if (global.gc) { - knownGlobals.push(gc); - } - - if (global.DTRACE_HTTP_SERVER_RESPONSE) { - knownGlobals.push(DTRACE_HTTP_SERVER_RESPONSE); - knownGlobals.push(DTRACE_HTTP_SERVER_REQUEST); - knownGlobals.push(DTRACE_HTTP_CLIENT_RESPONSE); - knownGlobals.push(DTRACE_HTTP_CLIENT_REQUEST); - knownGlobals.push(DTRACE_NET_STREAM_END); - knownGlobals.push(DTRACE_NET_SERVER_CONNECTION); - knownGlobals.push(DTRACE_NET_SOCKET_READ); - knownGlobals.push(DTRACE_NET_SOCKET_WRITE); - } - if (global.COUNTER_NET_SERVER_CONNECTION) { - knownGlobals.push(COUNTER_NET_SERVER_CONNECTION); - knownGlobals.push(COUNTER_NET_SERVER_CONNECTION_CLOSE); - knownGlobals.push(COUNTER_HTTP_SERVER_REQUEST); - knownGlobals.push(COUNTER_HTTP_SERVER_RESPONSE); - knownGlobals.push(COUNTER_HTTP_CLIENT_REQUEST); - knownGlobals.push(COUNTER_HTTP_CLIENT_RESPONSE); - } - - if (global.ArrayBuffer) { - knownGlobals.push(ArrayBuffer); - knownGlobals.push(Int8Array); - knownGlobals.push(Uint8Array); - knownGlobals.push(Uint8ClampedArray); - knownGlobals.push(Int16Array); - knownGlobals.push(Uint16Array); - knownGlobals.push(Int32Array); - knownGlobals.push(Uint32Array); - knownGlobals.push(Float32Array); - knownGlobals.push(Float64Array); - knownGlobals.push(DataView); - } - - for (var x in global) { - var found = false; - - for (var y in knownGlobals) { - if (global[x] === knownGlobals[y]) { - found = true; - break; - } - } - - if (!found) { - console.error('Unknown global: %s', x); - assert.ok(false, 'Unknown global found'); - } - } -}); - - -var mustCallChecks = []; - - -function runCallChecks(exitCode) { - if (exitCode !== 0) return; - - var failed = mustCallChecks.filter(function(context) { - return context.actual !== context.expected; - }); - - failed.forEach(function(context) { - console.log('Mismatched %s function calls. Expected %d, actual %d.', - context.name, - context.expected, - context.actual); - console.log(context.stack.split('\n').slice(2).join('\n')); - }); - - if (failed.length) process.exit(1); -} - - -exports.mustCall = function(fn, expected) { - if (typeof expected !== 'number') expected = 1; - - var context = { - expected: expected, - actual: 0, - stack: (new Error).stack, - name: fn.name || '<anonymous>' - }; - - // add the exit listener only once to avoid listener leak warnings - if (mustCallChecks.length === 0) process.on('exit', runCallChecks); - - mustCallChecks.push(context); - - return function() { - context.actual++; - return fn.apply(this, arguments); - }; -}; diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js deleted file mode 100644 index 869a4116..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js +++ /dev/null @@ -1,75 +0,0 @@ -// 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. - -// verify that the string decoder works getting 1 byte at a time, -// the whole buffer at once, and that both match the .toString(enc) -// result of the entire buffer. - -var assert = require('assert'); -var SD = require('../../').StringDecoder; -var encodings = ['base64', 'hex', 'utf8', 'utf16le', 'ucs2']; - -var bufs = [ '☃💩', 'asdf' ].map(function(b) { - return new Buffer(b); -}); - -// also test just arbitrary bytes from 0-15. -for (var i = 1; i <= 16; i++) { - var bytes = new Array(i).join('.').split('.').map(function(_, j) { - return j + 0x78; - }); - bufs.push(new Buffer(bytes)); -} - -encodings.forEach(testEncoding); - -console.log('ok'); - -function testEncoding(encoding) { - bufs.forEach(function(buf) { - testBuf(encoding, buf); - }); -} - -function testBuf(encoding, buf) { - console.error('# %s', encoding, buf); - - // write one byte at a time. - var s = new SD(encoding); - var res1 = ''; - for (var i = 0; i < buf.length; i++) { - res1 += s.write(buf.slice(i, i + 1)); - } - res1 += s.end(); - - // write the whole buffer at once. - var res2 = ''; - var s = new SD(encoding); - res2 += s.write(buf); - res2 += s.end(); - - // .toString() on the buffer - var res3 = buf.toString(encoding); - - console.log('expect=%j', res3); - assert.equal(res1, res3, 'one byte at a time should match toString'); - assert.equal(res2, res3, 'all bytes at once should match toString'); -} diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js deleted file mode 100644 index 7f69f7ea..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js +++ /dev/null @@ -1,163 +0,0 @@ -// 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 common = require('../common'); -var assert = require('assert'); -var StringDecoder = require('../../').StringDecoder; -var decoder = new StringDecoder('utf8'); - - - -var buffer = new Buffer('$'); -assert.deepEqual('$', decoder.write(buffer)); - -buffer = new Buffer('¢'); -assert.deepEqual('', decoder.write(buffer.slice(0, 1))); -assert.deepEqual('¢', decoder.write(buffer.slice(1, 2))); - -buffer = new Buffer('€'); -assert.deepEqual('', decoder.write(buffer.slice(0, 1))); -assert.deepEqual('', decoder.write(buffer.slice(1, 2))); -assert.deepEqual('€', decoder.write(buffer.slice(2, 3))); - -buffer = new Buffer([0xF0, 0xA4, 0xAD, 0xA2]); -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); -s += decoder.write(buffer.slice(2, 3)); -s += decoder.write(buffer.slice(3, 4)); -assert.ok(s.length > 0); - -// CESU-8 -buffer = new Buffer('EDA0BDEDB18D', 'hex'); // THUMBS UP SIGN (in CESU-8) -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); -s += decoder.write(buffer.slice(2, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 4)); -s += decoder.write(buffer.slice(4, 5)); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 2)); -s += decoder.write(buffer.slice(2, 4)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(4, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 4)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(4, 5)); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 5)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 6)); -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - - -// UCS-2 -decoder = new StringDecoder('ucs2'); -buffer = new Buffer('ab', 'ucs2'); -assert.equal(decoder.write(buffer), 'ab'); // 2 complete chars -buffer = new Buffer('abc', 'ucs2'); -assert.equal(decoder.write(buffer.slice(0, 3)), 'a'); // 'a' and first of 'b' -assert.equal(decoder.write(buffer.slice(3, 6)), 'bc'); // second of 'b' and 'c' - - -// UTF-16LE -buffer = new Buffer('3DD84DDC', 'hex'); // THUMBS UP SIGN (in CESU-8) -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(2, 3)); -s += decoder.write(buffer.slice(3, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 2)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(2, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 4)); -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - - -// A mixed ascii and non-ascii string -// Test stolen from deps/v8/test/cctest/test-strings.cc -// U+02E4 -> CB A4 -// U+0064 -> 64 -// U+12E4 -> E1 8B A4 -// U+0030 -> 30 -// U+3045 -> E3 81 85 -var expected = '\u02e4\u0064\u12e4\u0030\u3045'; -var buffer = new Buffer([0xCB, 0xA4, 0x64, 0xE1, 0x8B, 0xA4, - 0x30, 0xE3, 0x81, 0x85]); -var charLengths = [0, 0, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5]; - -// Split the buffer into 3 segments -// |----|------|-------| -// 0 i j buffer.length -// Scan through every possible 3 segment combination -// and make sure that the string is always parsed. -common.print('scanning '); -for (var j = 2; j < buffer.length; j++) { - for (var i = 1; i < j; i++) { - var decoder = new StringDecoder('utf8'); - - var sum = decoder.write(buffer.slice(0, i)); - - // just check that we've received the right amount - // after the first write - assert.equal(charLengths[i], sum.length); - - sum += decoder.write(buffer.slice(i, j)); - sum += decoder.write(buffer.slice(j, buffer.length)); - assert.equal(expected, sum); - common.print('.'); - } -} -console.log(' crayon!'); - diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json deleted file mode 100644 index ae2e5983..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "readable-stream", - "version": "1.0.25", - "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\nA new class of streams for Node.js\n\nThis module provides the new Stream base classes introduced in Node\nv0.10, for use in Node v0.8. You can use it to have programs that\nhave to work with node v0.8, while being forward-compatible for v0.10\nand beyond. When you drop support for v0.8, you can remove this\nmodule, and only use the native streams.\n\nThis is almost exactly the same codebase as appears in Node v0.10.\nHowever:\n\n1. The exported object is actually the Readable class. Decorating the\n native `stream` module would be global pollution.\n2. In v0.10, you can safely use `base64` as an argument to\n `setEncoding` in Readable streams. However, in v0.8, the\n StringDecoder class has no `end()` method, which is problematic for\n Base64. So, don't use that, because it'll break and be weird.\n\nOther than that, the API is the same as `require('stream')` in v0.10,\nso the API docs are reproduced below.\n\n----------\n\n Stability: 2 - Unstable\n\nA stream is an abstract interface implemented by various objects in\nNode. For example a request to an HTTP server is a stream, as is\nstdout. Streams are readable, writable, or both. All streams are\ninstances of [EventEmitter][]\n\nYou can load the Stream base classes by doing `require('stream')`.\nThere are base classes provided for Readable streams, Writable\nstreams, Duplex streams, and Transform streams.\n\n## Compatibility\n\nIn earlier versions of Node, the Readable stream interface was\nsimpler, but also less powerful and less useful.\n\n* Rather than waiting for you to call the `read()` method, `'data'`\n events would start emitting immediately. If you needed to do some\n I/O to decide how to handle data, then you had to store the chunks\n in some kind of buffer so that they would not be lost.\n* The `pause()` method was advisory, rather than guaranteed. This\n meant that you still had to be prepared to receive `'data'` events\n even when the stream was in a paused state.\n\nIn Node v0.10, the Readable class described below was added. For\nbackwards compatibility with older Node programs, Readable streams\nswitch into \"old mode\" when a `'data'` event handler is added, or when\nthe `pause()` or `resume()` methods are called. The effect is that,\neven if you are not using the new `read()` method and `'readable'`\nevent, you no longer have to worry about losing `'data'` chunks.\n\nMost programs will continue to function normally. However, this\nintroduces an edge case in the following conditions:\n\n* No `'data'` event handler is added.\n* The `pause()` and `resume()` methods are never called.\n\nFor example, consider the following code:\n\n```javascript\n// WARNING! BROKEN!\nnet.createServer(function(socket) {\n\n // we add an 'end' method, but never consume the data\n socket.on('end', function() {\n // It will never get here.\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n}).listen(1337);\n```\n\nIn versions of node prior to v0.10, the incoming message data would be\nsimply discarded. However, in Node v0.10 and beyond, the socket will\nremain paused forever.\n\nThe workaround in this situation is to call the `resume()` method to\ntrigger \"old mode\" behavior:\n\n```javascript\n// Workaround\nnet.createServer(function(socket) {\n\n socket.on('end', function() {\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n // start the flow of data, discarding it.\n socket.resume();\n\n}).listen(1337);\n```\n\nIn addition to new Readable streams switching into old-mode, pre-v0.10\nstyle streams can be wrapped in a Readable class using the `wrap()`\nmethod.\n\n## Class: stream.Readable\n\n<!--type=class-->\n\nA `Readable Stream` has the following methods, members, and events.\n\nNote that `stream.Readable` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nmethod. (See below.)\n\n### new stream.Readable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} The maximum number of bytes to store in\n the internal buffer before ceasing to read from the underlying\n resource. Default=16kb\n * `encoding` {String} If specified, then buffers will be decoded to\n strings using the specified encoding. Default=null\n * `objectMode` {Boolean} Whether this stream should behave\n as a stream of objects. Meaning that stream.read(n) returns\n a single value instead of a Buffer of size n\n\nIn classes that extend the Readable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### readable.\\_read(size)\n\n* `size` {Number} Number of bytes to read asynchronously\n\nNote: **This function should NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Readable\nclass methods only.\n\nAll Readable stream implementations must provide a `_read` method\nto fetch data from the underlying resource.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\nWhen data is available, put it into the read queue by calling\n`readable.push(chunk)`. If `push` returns false, then you should stop\nreading. When `_read` is called again, you should start pushing more\ndata.\n\nThe `size` argument is advisory. Implementations where a \"read\" is a\nsingle call that returns data can use this to know how much data to\nfetch. Implementations where that is not relevant, such as TCP or\nTLS, may ignore this argument, and simply provide data whenever it\nbecomes available. There is no need, for example to \"wait\" until\n`size` bytes are available before calling `stream.push(chunk)`.\n\n### readable.push(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to push into the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nNote: **This function should be called by Readable implementors, NOT\nby consumers of Readable subclasses.** The `_read()` function will not\nbe called again until at least one `push(chunk)` call is made. If no\ndata is available, then you MAY call `push('')` (an empty string) to\nallow a future `_read` call, without adding any data to the queue.\n\nThe `Readable` class works by putting data into a read queue to be\npulled out later by calling the `read()` method when the `'readable'`\nevent fires.\n\nThe `push()` method will explicitly insert some data into the read\nqueue. If it is called with `null` then it will signal the end of the\ndata.\n\nIn some cases, you may be wrapping a lower-level source which has some\nsort of pause/resume mechanism, and a data callback. In those cases,\nyou could wrap the low-level source object by doing something like\nthis:\n\n```javascript\n// source is an object with readStop() and readStart() methods,\n// and an `ondata` member that gets called when it has data, and\n// an `onend` member that gets called when the data is over.\n\nvar stream = new Readable();\n\nsource.ondata = function(chunk) {\n // if push() returns false, then we need to stop reading from source\n if (!stream.push(chunk))\n source.readStop();\n};\n\nsource.onend = function() {\n stream.push(null);\n};\n\n// _read will be called when the stream wants to pull more data in\n// the advisory size argument is ignored in this case.\nstream._read = function(n) {\n source.readStart();\n};\n```\n\n### readable.unshift(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nThis is the corollary of `readable.push(chunk)`. Rather than putting\nthe data at the *end* of the read queue, it puts it at the *front* of\nthe read queue.\n\nThis is useful in certain use-cases where a stream is being consumed\nby a parser, which needs to \"un-consume\" some data that it has\noptimistically pulled out of the source.\n\n```javascript\n// A parser for a simple data protocol.\n// The \"header\" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// Note: This can be done more simply as a Transform stream. See below.\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Readable.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\nvar parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n### readable.wrap(stream)\n\n* `stream` {Stream} An \"old style\" readable stream\n\nIf you are using an older Node library that emits `'data'` events and\nhas a `pause()` method that is advisory only, then you can use the\n`wrap()` method to create a Readable stream that uses the old stream\nas its data source.\n\nFor example:\n\n```javascript\nvar OldReader = require('./old-api-module.js').OldReader;\nvar oreader = new OldReader;\nvar Readable = require('stream').Readable;\nvar myReader = new Readable().wrap(oreader);\n\nmyReader.on('readable', function() {\n myReader.read(); // etc.\n});\n```\n\n### Event: 'readable'\n\nWhen there is data ready to be consumed, this event will fire.\n\nWhen this event emits, call the `read()` method to consume the data.\n\n### Event: 'end'\n\nEmitted when the stream has received an EOF (FIN in TCP terminology).\nIndicates that no more `'data'` events will happen. If the stream is\nalso writable, it may be possible to continue writing.\n\n### Event: 'data'\n\nThe `'data'` event emits either a `Buffer` (by default) or a string if\n`setEncoding()` was used.\n\nNote that adding a `'data'` event listener will switch the Readable\nstream into \"old mode\", where data is emitted as soon as it is\navailable, rather than waiting for you to call `read()` to consume it.\n\n### Event: 'error'\n\nEmitted if there was an error receiving data.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### readable.setEncoding(encoding)\n\nMakes the `'data'` event emit a string instead of a `Buffer`. `encoding`\ncan be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`.\n\nThe encoding can also be set by specifying an `encoding` field to the\nconstructor.\n\n### readable.read([size])\n\n* `size` {Number | null} Optional number of bytes to read.\n* Return: {Buffer | String | null}\n\nNote: **This function SHOULD be called by Readable stream users.**\n\nCall this method to consume data once the `'readable'` event is\nemitted.\n\nThe `size` argument will set a minimum number of bytes that you are\ninterested in. If not set, then the entire content of the internal\nbuffer is returned.\n\nIf there is no data to consume, or if there are fewer bytes in the\ninternal buffer than the `size` argument, then `null` is returned, and\na future `'readable'` event will be emitted when more is available.\n\nCalling `stream.read(0)` will always return `null`, and will trigger a\nrefresh of the internal buffer, but otherwise be a no-op.\n\n### readable.pipe(destination, [options])\n\n* `destination` {Writable Stream}\n* `options` {Object} Optional\n * `end` {Boolean} Default=true\n\nConnects this readable stream to `destination` WriteStream. Incoming\ndata on this stream gets written to `destination`. Properly manages\nback-pressure so that a slow destination will not be overwhelmed by a\nfast readable stream.\n\nThis function returns the `destination` stream.\n\nFor example, emulating the Unix `cat` command:\n\n process.stdin.pipe(process.stdout);\n\nBy default `end()` is called on the destination when the source stream\nemits `end`, so that `destination` is no longer writable. Pass `{ end:\nfalse }` as `options` to keep the destination stream open.\n\nThis keeps `writer` open so that \"Goodbye\" can be written at the\nend.\n\n reader.pipe(writer, { end: false });\n reader.on(\"end\", function() {\n writer.end(\"Goodbye\\n\");\n });\n\nNote that `process.stderr` and `process.stdout` are never closed until\nthe process exits, regardless of the specified options.\n\n### readable.unpipe([destination])\n\n* `destination` {Writable Stream} Optional\n\nUndo a previously established `pipe()`. If no destination is\nprovided, then all previously established pipes are removed.\n\n### readable.pause()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nCeases the flow of data. No `'data'` events are emitted while the\nstream is in a paused state.\n\n### readable.resume()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nResumes the incoming `'data'` events after a `pause()`.\n\n\n## Class: stream.Writable\n\n<!--type=class-->\n\nA `Writable` Stream has the following methods, members, and events.\n\nNote that `stream.Writable` is an abstract class designed to be\nextended with an underlying implementation of the\n`_write(chunk, encoding, cb)` method. (See below.)\n\n### new stream.Writable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} Buffer level when `write()` starts\n returning false. Default=16kb\n * `decodeStrings` {Boolean} Whether or not to decode strings into\n Buffers before passing them to `_write()`. Default=true\n\nIn classes that extend the Writable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### writable.\\_write(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be written. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. Ignore chunk is a buffer. Note that chunk will\n **always** be a buffer unless the `decodeStrings` option is\n explicitly set to `false`.\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nAll Writable stream implementations must provide a `_write` method to\nsend data to the underlying resource.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Writable\nclass methods only.\n\nCall the callback using the standard `callback(error)` pattern to\nsignal that the write completed successfully or with an error.\n\nIf the `decodeStrings` flag is set in the constructor options, then\n`chunk` may be a string rather than a Buffer, and `encoding` will\nindicate the sort of string that it is. This is to support\nimplementations that have an optimized handling for certain string\ndata encodings. If you do not explicitly set the `decodeStrings`\noption to `false`, then you can safely ignore the `encoding` argument,\nand assume that `chunk` will always be a Buffer.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n\n### writable.write(chunk, [encoding], [callback])\n\n* `chunk` {Buffer | String} Data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when this chunk is\n successfully written.\n* Returns {Boolean}\n\nWrites `chunk` to the stream. Returns `true` if the data has been\nflushed to the underlying resource. Returns `false` to indicate that\nthe buffer is full, and the data will be sent out in the future. The\n`'drain'` event will indicate when the buffer is empty again.\n\nThe specifics of when `write()` will return false, is determined by\nthe `highWaterMark` option provided to the constructor.\n\n### writable.end([chunk], [encoding], [callback])\n\n* `chunk` {Buffer | String} Optional final data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when the final chunk is\n successfully written.\n\nCall this method to signal the end of the data being written to the\nstream.\n\n### Event: 'drain'\n\nEmitted when the stream's write queue empties and it's safe to write\nwithout buffering again. Listen for it when `stream.write()` returns\n`false`.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### Event: 'finish'\n\nWhen `end()` is called and there are no more chunks to write, this\nevent is emitted.\n\n### Event: 'pipe'\n\n* `source` {Readable Stream}\n\nEmitted when the stream is passed to a readable stream's pipe method.\n\n### Event 'unpipe'\n\n* `source` {Readable Stream}\n\nEmitted when a previously established `pipe()` is removed using the\nsource Readable stream's `unpipe()` method.\n\n## Class: stream.Duplex\n\n<!--type=class-->\n\nA \"duplex\" stream is one that is both Readable and Writable, such as a\nTCP socket connection.\n\nNote that `stream.Duplex` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nand `_write(chunk, encoding, callback)` methods as you would with a Readable or\nWritable stream class.\n\nSince JavaScript doesn't have multiple prototypal inheritance, this\nclass prototypally inherits from Readable, and then parasitically from\nWritable. It is thus up to the user to implement both the lowlevel\n`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method\non extension duplex classes.\n\n### new stream.Duplex(options)\n\n* `options` {Object} Passed to both Writable and Readable\n constructors. Also has the following fields:\n * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then\n the stream will automatically end the readable side when the\n writable side ends and vice versa.\n\nIn classes that extend the Duplex class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n## Class: stream.Transform\n\nA \"transform\" stream is a duplex stream where the output is causally\nconnected in some way to the input, such as a zlib stream or a crypto\nstream.\n\nThere is no requirement that the output be the same size as the input,\nthe same number of chunks, or arrive at the same time. For example, a\nHash stream will only ever have a single chunk of output which is\nprovided when the input is ended. A zlib stream will either produce\nmuch smaller or much larger than its input.\n\nRather than implement the `_read()` and `_write()` methods, Transform\nclasses must implement the `_transform()` method, and may optionally\nalso implement the `_flush()` method. (See below.)\n\n### new stream.Transform([options])\n\n* `options` {Object} Passed to both Writable and Readable\n constructors.\n\nIn classes that extend the Transform class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### transform.\\_transform(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be transformed. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. (Ignore if `decodeStrings` chunk is a buffer.)\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Transform\nclass methods only.\n\nAll Transform stream implementations must provide a `_transform`\nmethod to accept input and produce output.\n\n`_transform` should do whatever has to be done in this specific\nTransform class, to handle the bytes being written, and pass them off\nto the readable portion of the interface. Do asynchronous I/O,\nprocess things, and so on.\n\nCall `transform.push(outputChunk)` 0 or more times to generate output\nfrom this input chunk, depending on how much data you want to output\nas a result of this chunk.\n\nCall the callback function only when the current chunk is completely\nconsumed. Note that there may or may not be output as a result of any\nparticular input chunk.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### transform.\\_flush(callback)\n\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done flushing any remaining data.\n\nNote: **This function MUST NOT be called directly.** It MAY be implemented\nby child classes, and if so, will be called by the internal Transform\nclass methods only.\n\nIn some cases, your transform operation may need to emit a bit more\ndata at the end of the stream. For example, a `Zlib` compression\nstream will store up some internal state so that it can optimally\ncompress the output. At the end, however, it needs to do the best it\ncan with what is left, so that the data will be complete.\n\nIn those cases, you can implement a `_flush` method, which will be\ncalled at the very end, after all the written data is consumed, but\nbefore emitting `end` to signal the end of the readable side. Just\nlike with `_transform`, call `transform.push(chunk)` zero or more\ntimes, as appropriate, and call `callback` when the flush operation is\ncomplete.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### Example: `SimpleProtocol` parser\n\nThe example above of a simple protocol parser can be implemented much\nmore simply by using the higher level `Transform` stream class.\n\nIn this example, rather than providing the input as an argument, it\nwould be piped into the parser, which is a more idiomatic Node stream\napproach.\n\n```javascript\nfunction SimpleProtocol(options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Transform.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Transform.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._transform = function(chunk, encoding, done) {\n if (!this._inBody) {\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n\n // now, because we got some extra data, emit this first.\n this.push(b);\n }\n } else {\n // from there on, just provide the data to our consumer as-is.\n this.push(b);\n }\n done();\n};\n\nvar parser = new SimpleProtocol();\nsource.pipe(parser)\n\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n\n## Class: stream.PassThrough\n\nThis is a trivial implementation of a `Transform` stream that simply\npasses the input bytes across to the output. Its purpose is mainly\nfor examples and testing, but there are occasionally use cases where\nit can come in handy.\n\n\n[EventEmitter]: events.html#events_class_events_eventemitter\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.25", - "_from": "readable-stream@~1.0.17" -} diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js deleted file mode 100644 index 27e8d8a5..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js deleted file mode 100644 index 4d1ddfc7..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,6 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js deleted file mode 100644 index 5d482f07..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js deleted file mode 100644 index e1e9efdf..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE deleted file mode 100644 index a23e08a8..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md deleted file mode 100644 index 389adae3..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js deleted file mode 100644 index 62391e78..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = hasKeys - -function hasKeys(source) { - return source !== null && - (typeof source === "object" || - typeof source === "function") -} diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js deleted file mode 100644 index 20937d19..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js +++ /dev/null @@ -1,25 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js deleted file mode 100644 index 17454ae4..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js +++ /dev/null @@ -1,25 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml deleted file mode 100644 index 60d00ce1..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.8" - - "0.6" diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md deleted file mode 100644 index ab32d0ad..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md +++ /dev/null @@ -1,39 +0,0 @@ -#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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js deleted file mode 100644 index db32d458..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js +++ /dev/null @@ -1,40 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js deleted file mode 100644 index f5b24b6d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js +++ /dev/null @@ -1,2 +0,0 @@ -module.exports = Object.keys || require('./shim'); - diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js deleted file mode 100644 index 74a09897..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js +++ /dev/null @@ -1,16 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json deleted file mode 100644 index 1de9cbb3..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js deleted file mode 100644 index b88421be..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js +++ /dev/null @@ -1,62 +0,0 @@ -(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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js deleted file mode 100644 index f29f065a..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js +++ /dev/null @@ -1,156 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js deleted file mode 100644 index 8b77b1fc..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js +++ /dev/null @@ -1,6 +0,0 @@ - -require('./foreach'); -require('./isArguments'); - -require('./shim'); - diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js deleted file mode 100644 index 62a07c2d..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js +++ /dev/null @@ -1,10 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js deleted file mode 100644 index 9d932712..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js +++ /dev/null @@ -1,134 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json deleted file mode 100644 index c52e4efc..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js deleted file mode 100644 index 3369d796..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js +++ /dev/null @@ -1,63 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/package.json deleted file mode 100644 index 3d0e0c8b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/through2/test/basic-test.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/test/basic-test.js deleted file mode 100644 index 9d137c7f..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/test/basic-test.js +++ /dev/null @@ -1,334 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/test/bench.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/test/bench.js deleted file mode 100644 index cc10868b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/test/bench.js +++ /dev/null @@ -1,42 +0,0 @@ -/* -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-minify-css/node_modules/gulp-util/node_modules/through2/test/sauce.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/test/sauce.js deleted file mode 100644 index a6d28625..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/test/sauce.js +++ /dev/null @@ -1,38 +0,0 @@ -#!/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-minify-css/node_modules/gulp-util/node_modules/through2/test/test.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/test/test.js deleted file mode 100644 index aa9b4877..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/test/test.js +++ /dev/null @@ -1,9 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/through2/through2.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/through2.js deleted file mode 100644 index c1104848..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/through2/through2.js +++ /dev/null @@ -1,78 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/.npmignore b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/.npmignore deleted file mode 100644 index b5ef13a3..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.DS_Store -*.log -node_modules -build -*.node -components \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/.travis.yml b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/.travis.yml deleted file mode 100644 index 33ad9f8c..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/LICENSE b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/LICENSE deleted file mode 100755 index 4f482f9b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/README.md deleted file mode 100644 index 3f97efc5..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/README.md +++ /dev/null @@ -1,123 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/vinyl/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/index.js deleted file mode 100644 index 97f5c752..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/index.js +++ /dev/null @@ -1,128 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js deleted file mode 100644 index 3a861f22..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js deleted file mode 100644 index 2c906789..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js +++ /dev/null @@ -1,12 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js deleted file mode 100644 index 0e23782c..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js deleted file mode 100644 index 403bb30e..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(v) { - return v === null; -}; \ No newline at end of file diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js deleted file mode 100644 index 9ce0929b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js +++ /dev/null @@ -1,5 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md deleted file mode 100644 index 146cb32a..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -## 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-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md deleted file mode 100644 index 8b12b6fa..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# 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-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js deleted file mode 100644 index e797cfe6..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js +++ /dev/null @@ -1,13 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json deleted file mode 100644 index f7dc15d9..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js deleted file mode 100644 index e4bb2814..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js +++ /dev/null @@ -1,36 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/package.json deleted file mode 100644 index 4ef0f631..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "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-minify-css/node_modules/gulp-util/node_modules/vinyl/test/File.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/File.js deleted file mode 100644 index 1f2a83a0..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/File.js +++ /dev/null @@ -1,540 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js deleted file mode 100644 index 7d286814..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js +++ /dev/null @@ -1,28 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js deleted file mode 100644 index fe1802c5..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js +++ /dev/null @@ -1,53 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js deleted file mode 100644 index 5bb1cb91..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js +++ /dev/null @@ -1,29 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/test/isNull.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/isNull.js deleted file mode 100644 index db70c013..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/isNull.js +++ /dev/null @@ -1,23 +0,0 @@ -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-minify-css/node_modules/gulp-util/node_modules/vinyl/test/isStream.js b/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/isStream.js deleted file mode 100644 index f22584c5..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/node_modules/vinyl/test/isStream.js +++ /dev/null @@ -1,29 +0,0 @@ -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-minify-css/node_modules/gulp-util/package.json b/node_modules/gulp-minify-css/node_modules/gulp-util/package.json deleted file mode 100644 index a6b6b67e..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "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.13" -} diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/test/File.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/File.js deleted file mode 100644 index 53544075..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/File.js +++ /dev/null @@ -1,46 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/PluginError.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/PluginError.js deleted file mode 100644 index 6dc23c0c..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/PluginError.js +++ /dev/null @@ -1,70 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/beep.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/beep.js deleted file mode 100644 index e3e71073..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/beep.js +++ /dev/null @@ -1,23 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/buffer.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/buffer.js deleted file mode 100644 index 6b4de67f..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/buffer.js +++ /dev/null @@ -1,36 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/colors.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/colors.js deleted file mode 100644 index 970367e2..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/colors.js +++ /dev/null @@ -1,11 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/combine.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/combine.js deleted file mode 100644 index a54f0012..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/combine.js +++ /dev/null @@ -1,38 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/date.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/date.js deleted file mode 100644 index 21f52ee9..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/date.js +++ /dev/null @@ -1,17 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/env.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/env.js deleted file mode 100644 index d3942940..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/env.js +++ /dev/null @@ -1,12 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/isBuffer.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/isBuffer.js deleted file mode 100644 index ad09bbf5..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/isBuffer.js +++ /dev/null @@ -1,16 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/isNull.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/isNull.js deleted file mode 100644 index 841fc46b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/isNull.js +++ /dev/null @@ -1,20 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/isStream.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/isStream.js deleted file mode 100644 index 3935324b..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/isStream.js +++ /dev/null @@ -1,16 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/linefeed.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/linefeed.js deleted file mode 100644 index 72f61ca0..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/linefeed.js +++ /dev/null @@ -1,5 +0,0 @@ -var util = require('../'); -var should = require('should'); -var path = require('path'); -require('mocha'); - diff --git a/node_modules/gulp-minify-css/node_modules/gulp-util/test/log.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/log.js deleted file mode 100644 index 71c6417a..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/log.js +++ /dev/null @@ -1,23 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/noop.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/noop.js deleted file mode 100644 index 0d75b35c..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/noop.js +++ /dev/null @@ -1,24 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/replaceExtension.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/replaceExtension.js deleted file mode 100644 index b9c65662..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/replaceExtension.js +++ /dev/null @@ -1,34 +0,0 @@ -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-minify-css/node_modules/gulp-util/test/template.js b/node_modules/gulp-minify-css/node_modules/gulp-util/test/template.js deleted file mode 100644 index 7664620a..00000000 --- a/node_modules/gulp-minify-css/node_modules/gulp-util/test/template.js +++ /dev/null @@ -1,99 +0,0 @@ -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-minify-css/package.json b/node_modules/gulp-minify-css/package.json deleted file mode 100644 index d580b3db..00000000 --- a/node_modules/gulp-minify-css/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "gulp-minify-css", - "description": "Minify css with clean-css.", - "version": "0.3.0", - "repository": { - "type": "git", - "url": "https://github.com/jonathanepollack/gulp-minify-css.git" - }, - "homepage": "https://github.com/jonathanepollack/gulp-minify-css", - "keywords": [ - "gulpplugin", - "minify", - "css" - ], - "main": "./index.js", - "dependencies": { - "event-stream": "~3.1.0", - "clean-css": "~2.0.7", - "clone": "~0.1.11", - "bufferstreams": "0.0.1", - "gulp-util": "~2.2.13" - }, - "engines": { - "node": ">= 0.10" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "mocha": "~1.17.1", - "chai": "~1.9.0", - "gulp": "~3.5.0" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "readme": "[![Build Status](https://travis-ci.org/jonathanepollack/gulp-minify-css.png?branch=master)](https://travis-ci.org/jonathanepollack/gulp-minify-css)\n## Information\n\n<table>\n<tr> \n<td>Package</td><td>gulp-minify-css</td>\n</tr>\n<tr>\n<td>Description</td>\n<td>Minify css with <a href=\"https://github.com/GoalSmashers/clean-css\">clean-css.</a></td>\n</tr>\n<tr>\n<td>Node Version</td>\n<td>>= 0.10</td>\n</tr>\n</table>\n\n## Installion\n\n```\nnpm install --save-dev gulp-minify-css\n```\n\n## Usage\n\n```js\nvar minifyCSS = require('gulp-minify-css');\n\ngulp.task('minify-css', function() {\n\n gulp.src('./static/css/*.css')\n .pipe(minifyCSS(opts))\n .pipe(gulp.dest('./dist/'))\n});\n```\n### Options\n* `keepSpecialComments` - `*` for keeping all (default), `1` for keeping first one, `0` for removing all\n* `keepBreaks` - whether to keep line breaks (default is false)\n* `removeEmpty` - whether to remove empty elements (default is false)\n* `debug` - turns on debug mode measuring time spent on cleaning up\n (run `npm run bench` to see example)\n* `root` - path with which to resolve absolute `@import` rules\n* `relativeTo` - path with which to resolve relative `@import` rules\n\n## LICENSE\n\n(MIT License)\n\nCopyright (c) 2013 Jonathan Pollack (<jonathanepollack@gmail.com>), Cloublabs Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/jonathanepollack/gulp-minify-css/issues" - }, - "_id": "gulp-minify-css@0.3.0", - "_from": "gulp-minify-css@" -} diff --git a/node_modules/gulp-minify-css/test/fixture/index.css b/node_modules/gulp-minify-css/test/fixture/index.css deleted file mode 100644 index 7727cd22..00000000 --- a/node_modules/gulp-minify-css/test/fixture/index.css +++ /dev/null @@ -1,81 +0,0 @@ -/*! Special Comment */ - -/* Large Desktops */ -@media (min-width: 980px) { - body { - padding-top: 60px; - } - .linediv-l { - border-right: 1px white solid; - } - .linediv-r{ - border-left: 1px white solid; - } -} -/* Landscape phones and smaller */ -@media (max-width: 770px) { - .copy { - padding: 2.5% 10%; - } - .linediv-l { - border-bottom: 1px white solid; - } - .linediv-r{ - border-top: 1px white solid; - } -} -/* All form-factors */ -body { - font-family: 'Open Sans', Helvetica, Arial, sans-serif; -} -.heading, .subheading { - font-family: 'Ubuntu', Helvetica, Arial, sans-serif; - text-align: center; -} -p.lead { - padding-top: 1.5% - font-size: 24px; - line-height: 30px; -} -p { - font-size: 18px; - line-height: 24px; -} -/* Video pitch and Action */ -.pitch { - padding: 2.5% 0%; -} -.order { - padding: 2% 0%; -} -.actions { - background-color: #343434; - padding: 3% 0%; -} -.video, .thermometer, .order, .social, .statistics { - text-align: center; -} -.statistics h3, .statistics p{ - color: white; -} -/* Marketing Copy and Footer */ -.copy { - padding-top: 2.5%; - padding-bottom: 2.5%; - text-align: justify; -} -.asset { - padding: 2.5% 0%; -} -.footer { - color: #cccccc; - text-align: center; -} -.footer p{ - font-size: 11px; -} -.footer a{ - color: #ccccff; -} - -/*! Special Comment */ \ No newline at end of file diff --git a/node_modules/gulp-minify-css/test/minify.js b/node_modules/gulp-minify-css/test/minify.js deleted file mode 100644 index 944ddda5..00000000 --- a/node_modules/gulp-minify-css/test/minify.js +++ /dev/null @@ -1,64 +0,0 @@ -var gulp = require('gulp'), - expect = require('chai').expect, - minifyCSS = require('../'), - CleanCSS = require('clean-css'), - es = require('event-stream'), - Stream = require('stream'), - path = require('path'), - fs = require('fs'); - -require('mocha'); - -describe('gulp-minify-css minification', function() { - var opts = { - keepSpecialComments: 1, - keepBreaks: true - }; - - describe('with buffers', function() { - var filename = path.join(__dirname, './fixture/index.css'); - it('should minify my files', function(done) { - gulp.src(filename) - .pipe(minifyCSS(opts)) - .pipe(es.map(function(file){ - var source = fs.readFileSync(filename), - expected = new CleanCSS(opts).minify(source.toString()); - expect(expected).to.be.equal(file.contents.toString()); - done(); - })); - }); - - it('should return file.contents as a buffer', function(done) { - gulp.src(filename) - .pipe(minifyCSS()) - .pipe(es.map(function(file) { - expect(file.contents).to.be.an.instanceof(Buffer); - done(); - })); - }); - }); - describe('with streams', function() { - var filename = path.join(__dirname, './fixture/index.css'); - it('should minify my files', function(done) { - gulp.src(filename, {buffer: false}) - .pipe(minifyCSS(opts)) - .pipe(es.map(function(file){ - var source = fs.readFileSync(filename), - expected = new CleanCSS(opts).minify(source.toString()); - file.contents.pipe(es.wait(function(err, data) { - expect(expected).to.be.equal(data); - done(); - })); - })); - }); - - it('should return file.contents as a buffer', function(done) { - gulp.src(filename, {buffer: false}) - .pipe(minifyCSS(opts)) - .pipe(es.map(function(file) { - expect(file.contents).to.be.an.instanceof(Stream); - done(); - })); - }); - }); -}); diff --git a/node_modules/gulp-sass/.npmignore b/node_modules/gulp-sass/.npmignore deleted file mode 100644 index a72b52eb..00000000 --- a/node_modules/gulp-sass/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -lib-cov -*.seed -*.log -*.csv -*.dat -*.out -*.pid -*.gz - -pids -logs -results - -npm-debug.log -node_modules diff --git a/node_modules/gulp-sass/.travis.yml b/node_modules/gulp-sass/.travis.yml deleted file mode 100644 index 87f8cd91..00000000 --- a/node_modules/gulp-sass/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" \ No newline at end of file diff --git a/node_modules/gulp-sass/LICENSE b/node_modules/gulp-sass/LICENSE deleted file mode 100644 index 33ef8c12..00000000 --- a/node_modules/gulp-sass/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 David Manning - -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-sass/README.md b/node_modules/gulp-sass/README.md deleted file mode 100644 index 3f13d262..00000000 --- a/node_modules/gulp-sass/README.md +++ /dev/null @@ -1,73 +0,0 @@ -[![Build Status](https://travis-ci.org/dlmanning/gulp-sass.png?branch=master)](https://travis-ci.org/dlmanning/gulp-sass) - -gulp-sass -========= - -SASS plugin for [gulp](https://github.com/wearefractal/gulp). - -#Install - -``` -npm install gulp-sass -``` - -#Basic Usage - -Something like this: - -```javascript -var gulp = require('gulp'); -var sass = require('gulp-sass') - -gulp.task('sass', function () { - gulp.src('./scss/*.scss') - .pipe(sass()) - .pipe(gulp.dest('./css')); -}); -``` - -Options passed as a hash into `sass()` will be passed along to [`node-sass`](https://github.com/andrew/node-sass) - -## gulp-sass specific options - -#### `errLogToConsole: true` - -If you pass `errLogToConsole: true` into the options hash, sass errors will be logged to the console instead of generating a `gutil.PluginError` object. Use this option with `gulp.watch` to keep gulp from stopping every time you mess up your sass. - -#### `onSuccess: callback` - -Pass in your own callback to be called upon successful compilaton by node-sass. The callback has the form `callback(css)`, and is passed the compiled css as a string. Note: This *does not* prevent gulp-sass's default behavior of writing the output css file. - -#### `onError: callback` - -Pass in your own callback to be called upon a sass error from node-sass. The callback has the form `callback(err)`, where err is the error string generated by libsass. Note: this *does* prevent an actual `gulpPluginError` object from being created. - -#Imports and Partials - -gulp-sass now automatically passes along the directory of every scss file it parses as an include path for node-sass. This means that as long as you specify your includes relative to path of your scss file, everything will just work. - -scss/includes/_settings.scss: - -```scss -$blue: #3bbfce; -$margin: 16px; -``` - -scss/style.scss: - -```scss -@import "includes/settings"; - -.content-navigation { - border-color: $blue; - color: - darken($blue, 9%); -} - -.border { - padding: $margin / 2; - margin: $margin / 2; - border-color: $blue; -} -``` - diff --git a/node_modules/gulp-sass/index.js b/node_modules/gulp-sass/index.js deleted file mode 100644 index 4704fbd4..00000000 --- a/node_modules/gulp-sass/index.js +++ /dev/null @@ -1,62 +0,0 @@ -var map = require('map-stream') - , sass = require('node-sass') - , path = require('path') - , gutil = require('gulp-util') - , ext = gutil.replaceExtension - ; - -module.exports = function (options) { - var opts = options ? options : {}; - - function nodeSass (file, cb) { - var fileDir = path.dirname(file.path); - var addedLocalDirPath = false; - - if (file.isNull()) { - return cb(null, file); - } - if (path.basename(file.path).indexOf('_') === 0) { - return cb(); - } - - opts.data = file.contents.toString(); - - if (opts.includePaths && Array.isArray(opts.includePaths)) { - if (opts.includePaths.indexOf(fileDir) === -1) { - opts.includePaths.push(fileDir); - addedLocalDirPath = true; - } - } else { - opts.includePaths = [fileDir]; - } - - opts.success = function (css) { - if (typeof opts.onSuccess === 'function') opts.onSuccess(css); - - file.path = ext(file.path, '.css'); - file.contents = new Buffer(css); - cb(null, file); - }; - - opts.error = function (err) { - if (opts.errLogToConsole) { - gutil.log('[gulp-sass] ' + err); - return cb(); - } - - if (typeof opts.onError === 'function') { - opts.onError(err); - return cb(); - } - - return cb(new gutil.PluginError('gulp-sass', err)); - }; - - sass.render(opts); - - if (addedLocalDirPath) opts.includePaths.pop(); - - } - - return map(nodeSass); -}; diff --git a/node_modules/gulp-sass/node_modules/.bin/node-sass b/node_modules/gulp-sass/node_modules/.bin/node-sass deleted file mode 120000 index a4b01345..00000000 --- a/node_modules/gulp-sass/node_modules/.bin/node-sass +++ /dev/null @@ -1 +0,0 @@ -../node-sass/bin/node-sass \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/.npmignore b/node_modules/gulp-sass/node_modules/gulp-util/.npmignore deleted file mode 100644 index b5ef13a3..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.DS_Store -*.log -node_modules -build -*.node -components \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/.travis.yml b/node_modules/gulp-sass/node_modules/gulp-util/.travis.yml deleted file mode 100644 index 33ad9f8c..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -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-sass/node_modules/gulp-util/LICENSE b/node_modules/gulp-sass/node_modules/gulp-util/LICENSE deleted file mode 100755 index 7cbe012c..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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-sass/node_modules/gulp-util/README.md b/node_modules/gulp-sass/node_modules/gulp-util/README.md deleted file mode 100644 index fd0e506e..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/README.md +++ /dev/null @@ -1,166 +0,0 @@ -# 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-sass/node_modules/gulp-util/index.js b/node_modules/gulp-sass/node_modules/gulp-util/index.js deleted file mode 100644 index 6746ee4b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/index.js +++ /dev/null @@ -1,18 +0,0 @@ -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-sass/node_modules/gulp-util/lib/File.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/File.js deleted file mode 100644 index 690a508a..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/File.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('vinyl'); \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/lib/PluginError.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/PluginError.js deleted file mode 100644 index 96555672..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/PluginError.js +++ /dev/null @@ -1,65 +0,0 @@ -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-sass/node_modules/gulp-util/lib/beep.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/beep.js deleted file mode 100644 index 5473d754..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/beep.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function() { - process.stdout.write('\x07'); -}; diff --git a/node_modules/gulp-sass/node_modules/gulp-util/lib/buffer.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/buffer.js deleted file mode 100644 index 4cb064ac..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/buffer.js +++ /dev/null @@ -1,15 +0,0 @@ -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-sass/node_modules/gulp-util/lib/colors.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/colors.js deleted file mode 100644 index bc804940..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/colors.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('chalk'); \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/lib/combine.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/combine.js deleted file mode 100644 index f20712d2..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/combine.js +++ /dev/null @@ -1,11 +0,0 @@ -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-sass/node_modules/gulp-util/lib/date.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/date.js deleted file mode 100644 index 935793cc..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/date.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('dateformat'); \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/lib/env.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/env.js deleted file mode 100644 index ea1e03e4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/env.js +++ /dev/null @@ -1,4 +0,0 @@ -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-sass/node_modules/gulp-util/lib/isBuffer.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/isBuffer.js deleted file mode 100644 index 0e23782c..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/isBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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-sass/node_modules/gulp-util/lib/isNull.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/isNull.js deleted file mode 100644 index 403bb30e..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/isNull.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(v) { - return v === null; -}; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/lib/isStream.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/isStream.js deleted file mode 100644 index 9ce0929b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/isStream.js +++ /dev/null @@ -1,5 +0,0 @@ -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-sass/node_modules/gulp-util/lib/linefeed.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/linefeed.js deleted file mode 100644 index 5b0dfa4b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/linefeed.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = '\n'; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/lib/log.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/log.js deleted file mode 100644 index cdbb22fc..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/log.js +++ /dev/null @@ -1,9 +0,0 @@ -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-sass/node_modules/gulp-util/lib/noop.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/noop.js deleted file mode 100644 index 7862cb16..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/noop.js +++ /dev/null @@ -1,5 +0,0 @@ -var through = require('through2'); - -module.exports = function () { - return through.obj(); -}; diff --git a/node_modules/gulp-sass/node_modules/gulp-util/lib/replaceExtension.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/replaceExtension.js deleted file mode 100644 index 3f76938e..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/replaceExtension.js +++ /dev/null @@ -1,9 +0,0 @@ -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-sass/node_modules/gulp-util/lib/template.js b/node_modules/gulp-sass/node_modules/gulp-util/lib/template.js deleted file mode 100644 index c467820f..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/lib/template.js +++ /dev/null @@ -1,19 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/chalk/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/index.js deleted file mode 100644 index a21f7022..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/index.js +++ /dev/null @@ -1,63 +0,0 @@ -'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-sass/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi deleted file mode 120000 index b65c9f81..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi +++ /dev/null @@ -1 +0,0 @@ -../strip-ansi/cli.js \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js deleted file mode 100644 index 3da548c4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js +++ /dev/null @@ -1,38 +0,0 @@ -'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-sass/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json deleted file mode 100644 index 2d61dabe..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md deleted file mode 100644 index 4ac8cbd0..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,65 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js deleted file mode 100644 index 27316b1f..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js +++ /dev/null @@ -1,24 +0,0 @@ -'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-sass/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json deleted file mode 100644 index e55a6244..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md deleted file mode 100644 index 0918c851..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js deleted file mode 100755 index f8019cda..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js +++ /dev/null @@ -1,27 +0,0 @@ -#!/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-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js deleted file mode 100644 index 62320c59..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'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-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json deleted file mode 100644 index 7ca2b5d1..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md deleted file mode 100644 index eb661b3d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/chalk/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/package.json deleted file mode 100644 index 853b0144..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/chalk/readme.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/readme.md deleted file mode 100644 index 46813acf..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/chalk/readme.md +++ /dev/null @@ -1,158 +0,0 @@ -# <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-sass/node_modules/gulp-util/node_modules/dateformat/LICENSE b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/LICENSE deleted file mode 100644 index 57d44e2a..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -(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-sass/node_modules/gulp-util/node_modules/dateformat/Readme.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/Readme.md deleted file mode 100644 index 12f9872d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/Readme.md +++ /dev/null @@ -1,79 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js deleted file mode 100644 index e1c38245..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js +++ /dev/null @@ -1,183 +0,0 @@ -/* - * 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-sass/node_modules/gulp-util/node_modules/dateformat/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/package.json deleted file mode 100644 index deee5fee..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/dateformat/test/basic.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/basic.js deleted file mode 100644 index 9602a72a..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/basic.js +++ /dev/null @@ -1,45 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js deleted file mode 100644 index 07780fa8..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js +++ /dev/null @@ -1,10 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js deleted file mode 100644 index d1ddbe81..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js +++ /dev/null @@ -1,4 +0,0 @@ -var dateFormat = require('../lib/dateformat.js'); - -var val = process.argv[2] || new Date(); -console.log(dateFormat(val, 'W')); diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh deleted file mode 100644 index 3c3e69b3..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/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-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md deleted file mode 100644 index d362e36d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js deleted file mode 100644 index 0bf92a5c..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * 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-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json deleted file mode 100644 index 85f64e7b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/README.md deleted file mode 100644 index e89bd0db..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/index.js deleted file mode 100644 index 230f8ee8..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/index.js +++ /dev/null @@ -1,216 +0,0 @@ -/** - * 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md deleted file mode 100644 index 6191a196..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js deleted file mode 100644 index f3b8c438..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json deleted file mode 100644 index 600f622a..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md deleted file mode 100644 index da283fc4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js deleted file mode 100644 index 52eec906..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md deleted file mode 100644 index 16de7300..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js deleted file mode 100644 index da17c6cd..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json deleted file mode 100644 index ab0f1e6d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json deleted file mode 100644 index 53559bd9..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md deleted file mode 100644 index 7cbc6538..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js deleted file mode 100644 index 343a4156..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md deleted file mode 100644 index eef7f9c6..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js deleted file mode 100644 index ce4e6d8e..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * 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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md deleted file mode 100644 index 9957cefa..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js deleted file mode 100644 index f69503d4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * 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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json deleted file mode 100644 index 29c83d94..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json deleted file mode 100644 index 00c07f7b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md deleted file mode 100644 index c6ca90c4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js deleted file mode 100644 index fa870474..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * 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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md deleted file mode 100644 index 9957cefa..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js deleted file mode 100644 index f69503d4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * 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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json deleted file mode 100644 index 29c83d94..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json deleted file mode 100644 index 74a4f272..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json deleted file mode 100644 index 254ecb1e..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md deleted file mode 100644 index bee29a8d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js deleted file mode 100644 index 139568a2..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md deleted file mode 100644 index fbcaad2f..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js deleted file mode 100644 index b34a3500..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json deleted file mode 100644 index 5e652af4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md deleted file mode 100644 index 23f3000b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js deleted file mode 100644 index 12be0bf1..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * 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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md deleted file mode 100644 index 16de7300..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js deleted file mode 100644 index da17c6cd..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json deleted file mode 100644 index 21b0fd84..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json deleted file mode 100644 index a51388c1..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md deleted file mode 100644 index eeb0a78b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js deleted file mode 100644 index 3596ac34..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * 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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md deleted file mode 100644 index 16de7300..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js deleted file mode 100644 index da17c6cd..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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-sass/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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json deleted file mode 100644 index 21b0fd84..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json deleted file mode 100644 index 698a9eaf..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json deleted file mode 100644 index cd3c29bd..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md deleted file mode 100644 index d9ce72bc..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js deleted file mode 100644 index bba7e231..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json deleted file mode 100644 index f08cd47d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md deleted file mode 100644 index 33f028da..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js deleted file mode 100644 index ccf622fa..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * 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-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json deleted file mode 100644 index 8e864ab7..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/lodash.template/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/package.json deleted file mode 100644 index a42d1163..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/lodash.template/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/minimist/.travis.yml b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/.travis.yml deleted file mode 100644 index cc4dba29..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/LICENSE b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/LICENSE deleted file mode 100644 index ee27ba4b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/minimist/example/parse.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/example/parse.js deleted file mode 100644 index abff3e8e..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/example/parse.js +++ /dev/null @@ -1,2 +0,0 @@ -var argv = require('../')(process.argv.slice(2)); -console.dir(argv); diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/index.js deleted file mode 100644 index 2aa95140..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/index.js +++ /dev/null @@ -1,187 +0,0 @@ -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, 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], 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, 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-sass/node_modules/gulp-util/node_modules/minimist/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/package.json deleted file mode 100644 index 3f97f9c3..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "minimist", - "version": "0.0.7", - "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.7", - "_from": "minimist@~0.0.5" -} diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/readme.markdown b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/readme.markdown deleted file mode 100644 index c2563532..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/readme.markdown +++ /dev/null @@ -1,73 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/minimist/test/dash.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/dash.js deleted file mode 100644 index 8b034b99..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/dash.js +++ /dev/null @@ -1,24 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/minimist/test/default_bool.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/default_bool.js deleted file mode 100644 index f0041ee4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/default_bool.js +++ /dev/null @@ -1,20 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/minimist/test/dotted.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/dotted.js deleted file mode 100644 index ef0ae349..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/dotted.js +++ /dev/null @@ -1,16 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/minimist/test/long.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/long.js deleted file mode 100644 index 5d3a1e09..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/long.js +++ /dev/null @@ -1,31 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/minimist/test/parse.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/parse.js deleted file mode 100644 index 7c4348a4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/parse.js +++ /dev/null @@ -1,297 +0,0 @@ -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('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-sass/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js deleted file mode 100644 index 21851b03..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js +++ /dev/null @@ -1,9 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/minimist/test/short.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/short.js deleted file mode 100644 index d513a1c2..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/short.js +++ /dev/null @@ -1,67 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/minimist/test/whitespace.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/whitespace.js deleted file mode 100644 index 8a52a58c..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/minimist/test/whitespace.js +++ /dev/null @@ -1,8 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/multipipe/.npmignore b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/.travis.yml b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/.travis.yml deleted file mode 100644 index 6e5919de..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/History.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/History.md deleted file mode 100644 index 4174056f..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/History.md +++ /dev/null @@ -1,10 +0,0 @@ - -0.0.1 / 2013-01-15 -================== - -* fix error bubbling - -0.0.0 / 2013-01-13 -================== - -* initial release diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/Makefile b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/Makefile deleted file mode 100644 index d1df0ab3..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/Makefile +++ /dev/null @@ -1,10 +0,0 @@ - -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-sass/node_modules/gulp-util/node_modules/multipipe/Readme.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/Readme.md deleted file mode 100644 index e8f432ec..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/Readme.md +++ /dev/null @@ -1,74 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/multipipe/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/index.js deleted file mode 100644 index 5292417c..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/index.js +++ /dev/null @@ -1,57 +0,0 @@ - -/** - * 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); - stream.on('error', ret.emit.bind(ret, 'error')); - }); - - return ret; -} - diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore deleted file mode 100644 index 07e6e472..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml deleted file mode 100644 index 6e5919de..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md deleted file mode 100644 index 547189a6..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md +++ /dev/null @@ -1,26 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md deleted file mode 100644 index e39e1e9e..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md +++ /dev/null @@ -1,129 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js deleted file mode 100755 index ad537a04..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js +++ /dev/null @@ -1,49 +0,0 @@ -#!/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-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js deleted file mode 100644 index 90b261b4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js +++ /dev/null @@ -1,62 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json deleted file mode 100644 index 1949be68..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js deleted file mode 100644 index fe3b2560..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js +++ /dev/null @@ -1,161 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/multipipe/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/package.json deleted file mode 100644 index 264ee69f..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "multipipe", - "version": "0.0.1", - "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.1", - "_from": "multipipe@~0.0.1" -} diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js deleted file mode 100644 index 57fd1886..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js +++ /dev/null @@ -1,85 +0,0 @@ -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)); - }); - - it('should aggregate errors', 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); - }); -}); - -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-sass/node_modules/gulp-util/node_modules/through2/.jshintrc b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/.jshintrc deleted file mode 100644 index c8ef3ca4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/through2/.npmignore b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/.travis.yml b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/.travis.yml deleted file mode 100644 index 12b1a310..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/LICENSE b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/LICENSE deleted file mode 100644 index f6a0029d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/README.md deleted file mode 100644 index c9388b38..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/README.md +++ /dev/null @@ -1,131 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore deleted file mode 100644 index 38344f87..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -build/ -test/ -examples/ -fs.js -zlib.js \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md deleted file mode 100644 index be976683..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md +++ /dev/null @@ -1,768 +0,0 @@ -# readable-stream - -A new class of streams for Node.js - -This module provides the new Stream base classes introduced in Node -v0.10, for use in Node v0.8. You can use it to have programs that -have to work with node v0.8, while being forward-compatible for v0.10 -and beyond. When you drop support for v0.8, you can remove this -module, and only use the native streams. - -This is almost exactly the same codebase as appears in Node v0.10. -However: - -1. The exported object is actually the Readable class. Decorating the - native `stream` module would be global pollution. -2. In v0.10, you can safely use `base64` as an argument to - `setEncoding` in Readable streams. However, in v0.8, the - StringDecoder class has no `end()` method, which is problematic for - Base64. So, don't use that, because it'll break and be weird. - -Other than that, the API is the same as `require('stream')` in v0.10, -so the API docs are reproduced below. - ----------- - - Stability: 2 - Unstable - -A stream is an abstract interface implemented by various objects in -Node. For example a request to an HTTP server is a stream, as is -stdout. Streams are readable, writable, or both. All streams are -instances of [EventEmitter][] - -You can load the Stream base classes by doing `require('stream')`. -There are base classes provided for Readable streams, Writable -streams, Duplex streams, and Transform streams. - -## Compatibility - -In earlier versions of Node, the Readable stream interface was -simpler, but also less powerful and less useful. - -* Rather than waiting for you to call the `read()` method, `'data'` - events would start emitting immediately. If you needed to do some - I/O to decide how to handle data, then you had to store the chunks - in some kind of buffer so that they would not be lost. -* The `pause()` method was advisory, rather than guaranteed. This - meant that you still had to be prepared to receive `'data'` events - even when the stream was in a paused state. - -In Node v0.10, the Readable class described below was added. For -backwards compatibility with older Node programs, Readable streams -switch into "old mode" when a `'data'` event handler is added, or when -the `pause()` or `resume()` methods are called. The effect is that, -even if you are not using the new `read()` method and `'readable'` -event, you no longer have to worry about losing `'data'` chunks. - -Most programs will continue to function normally. However, this -introduces an edge case in the following conditions: - -* No `'data'` event handler is added. -* The `pause()` and `resume()` methods are never called. - -For example, consider the following code: - -```javascript -// WARNING! BROKEN! -net.createServer(function(socket) { - - // we add an 'end' method, but never consume the data - socket.on('end', function() { - // It will never get here. - socket.end('I got your message (but didnt read it)\n'); - }); - -}).listen(1337); -``` - -In versions of node prior to v0.10, the incoming message data would be -simply discarded. However, in Node v0.10 and beyond, the socket will -remain paused forever. - -The workaround in this situation is to call the `resume()` method to -trigger "old mode" behavior: - -```javascript -// Workaround -net.createServer(function(socket) { - - socket.on('end', function() { - socket.end('I got your message (but didnt read it)\n'); - }); - - // start the flow of data, discarding it. - socket.resume(); - -}).listen(1337); -``` - -In addition to new Readable streams switching into old-mode, pre-v0.10 -style streams can be wrapped in a Readable class using the `wrap()` -method. - -## Class: stream.Readable - -<!--type=class--> - -A `Readable Stream` has the following methods, members, and events. - -Note that `stream.Readable` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -method. (See below.) - -### new stream.Readable([options]) - -* `options` {Object} - * `highWaterMark` {Number} The maximum number of bytes to store in - the internal buffer before ceasing to read from the underlying - resource. Default=16kb - * `encoding` {String} If specified, then buffers will be decoded to - strings using the specified encoding. Default=null - * `objectMode` {Boolean} Whether this stream should behave - as a stream of objects. Meaning that stream.read(n) returns - a single value instead of a Buffer of size n - -In classes that extend the Readable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### readable.\_read(size) - -* `size` {Number} Number of bytes to read asynchronously - -Note: **This function should NOT be called directly.** It should be -implemented by child classes, and called by the internal Readable -class methods only. - -All Readable stream implementations must provide a `_read` method -to fetch data from the underlying resource. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -When data is available, put it into the read queue by calling -`readable.push(chunk)`. If `push` returns false, then you should stop -reading. When `_read` is called again, you should start pushing more -data. - -The `size` argument is advisory. Implementations where a "read" is a -single call that returns data can use this to know how much data to -fetch. Implementations where that is not relevant, such as TCP or -TLS, may ignore this argument, and simply provide data whenever it -becomes available. There is no need, for example to "wait" until -`size` bytes are available before calling `stream.push(chunk)`. - -### readable.push(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to push into the read queue -* return {Boolean} Whether or not more pushes should be performed - -Note: **This function should be called by Readable implementors, NOT -by consumers of Readable subclasses.** The `_read()` function will not -be called again until at least one `push(chunk)` call is made. If no -data is available, then you MAY call `push('')` (an empty string) to -allow a future `_read` call, without adding any data to the queue. - -The `Readable` class works by putting data into a read queue to be -pulled out later by calling the `read()` method when the `'readable'` -event fires. - -The `push()` method will explicitly insert some data into the read -queue. If it is called with `null` then it will signal the end of the -data. - -In some cases, you may be wrapping a lower-level source which has some -sort of pause/resume mechanism, and a data callback. In those cases, -you could wrap the low-level source object by doing something like -this: - -```javascript -// source is an object with readStop() and readStart() methods, -// and an `ondata` member that gets called when it has data, and -// an `onend` member that gets called when the data is over. - -var stream = new Readable(); - -source.ondata = function(chunk) { - // if push() returns false, then we need to stop reading from source - if (!stream.push(chunk)) - source.readStop(); -}; - -source.onend = function() { - stream.push(null); -}; - -// _read will be called when the stream wants to pull more data in -// the advisory size argument is ignored in this case. -stream._read = function(n) { - source.readStart(); -}; -``` - -### readable.unshift(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue -* return {Boolean} Whether or not more pushes should be performed - -This is the corollary of `readable.push(chunk)`. Rather than putting -the data at the *end* of the read queue, it puts it at the *front* of -the read queue. - -This is useful in certain use-cases where a stream is being consumed -by a parser, which needs to "un-consume" some data that it has -optimistically pulled out of the source. - -```javascript -// A parser for a simple data protocol. -// The "header" is a JSON object, followed by 2 \n characters, and -// then a message body. -// -// Note: This can be done more simply as a Transform stream. See below. - -function SimpleProtocol(source, options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Readable.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - - // source is a readable stream, such as a socket or file - this._source = source; - - var self = this; - source.on('end', function() { - self.push(null); - }); - - // give it a kick whenever the source is readable - // read(0) will not consume any bytes - source.on('readable', function() { - self.read(0); - }); - - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Readable.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._read = function(n) { - if (!this._inBody) { - var chunk = this._source.read(); - - // if the source doesn't have data, we don't have data yet. - if (chunk === null) - return this.push(''); - - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - this.push(''); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // now, because we got some extra data, unshift the rest - // back into the read queue so that our consumer will see it. - var b = chunk.slice(split); - this.unshift(b); - - // and let them know that we are done parsing the header. - this.emit('header', this.header); - } - } else { - // from there on, just provide the data to our consumer. - // careful not to push(null), since that would indicate EOF. - var chunk = this._source.read(); - if (chunk) this.push(chunk); - } -}; - -// Usage: -var parser = new SimpleProtocol(source); -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - -### readable.wrap(stream) - -* `stream` {Stream} An "old style" readable stream - -If you are using an older Node library that emits `'data'` events and -has a `pause()` method that is advisory only, then you can use the -`wrap()` method to create a Readable stream that uses the old stream -as its data source. - -For example: - -```javascript -var OldReader = require('./old-api-module.js').OldReader; -var oreader = new OldReader; -var Readable = require('stream').Readable; -var myReader = new Readable().wrap(oreader); - -myReader.on('readable', function() { - myReader.read(); // etc. -}); -``` - -### Event: 'readable' - -When there is data ready to be consumed, this event will fire. - -When this event emits, call the `read()` method to consume the data. - -### Event: 'end' - -Emitted when the stream has received an EOF (FIN in TCP terminology). -Indicates that no more `'data'` events will happen. If the stream is -also writable, it may be possible to continue writing. - -### Event: 'data' - -The `'data'` event emits either a `Buffer` (by default) or a string if -`setEncoding()` was used. - -Note that adding a `'data'` event listener will switch the Readable -stream into "old mode", where data is emitted as soon as it is -available, rather than waiting for you to call `read()` to consume it. - -### Event: 'error' - -Emitted if there was an error receiving data. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### readable.setEncoding(encoding) - -Makes the `'data'` event emit a string instead of a `Buffer`. `encoding` -can be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`. - -The encoding can also be set by specifying an `encoding` field to the -constructor. - -### readable.read([size]) - -* `size` {Number | null} Optional number of bytes to read. -* Return: {Buffer | String | null} - -Note: **This function SHOULD be called by Readable stream users.** - -Call this method to consume data once the `'readable'` event is -emitted. - -The `size` argument will set a minimum number of bytes that you are -interested in. If not set, then the entire content of the internal -buffer is returned. - -If there is no data to consume, or if there are fewer bytes in the -internal buffer than the `size` argument, then `null` is returned, and -a future `'readable'` event will be emitted when more is available. - -Calling `stream.read(0)` will always return `null`, and will trigger a -refresh of the internal buffer, but otherwise be a no-op. - -### readable.pipe(destination, [options]) - -* `destination` {Writable Stream} -* `options` {Object} Optional - * `end` {Boolean} Default=true - -Connects this readable stream to `destination` WriteStream. Incoming -data on this stream gets written to `destination`. Properly manages -back-pressure so that a slow destination will not be overwhelmed by a -fast readable stream. - -This function returns the `destination` stream. - -For example, emulating the Unix `cat` command: - - process.stdin.pipe(process.stdout); - -By default `end()` is called on the destination when the source stream -emits `end`, so that `destination` is no longer writable. Pass `{ end: -false }` as `options` to keep the destination stream open. - -This keeps `writer` open so that "Goodbye" can be written at the -end. - - reader.pipe(writer, { end: false }); - reader.on("end", function() { - writer.end("Goodbye\n"); - }); - -Note that `process.stderr` and `process.stdout` are never closed until -the process exits, regardless of the specified options. - -### readable.unpipe([destination]) - -* `destination` {Writable Stream} Optional - -Undo a previously established `pipe()`. If no destination is -provided, then all previously established pipes are removed. - -### readable.pause() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Ceases the flow of data. No `'data'` events are emitted while the -stream is in a paused state. - -### readable.resume() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Resumes the incoming `'data'` events after a `pause()`. - - -## Class: stream.Writable - -<!--type=class--> - -A `Writable` Stream has the following methods, members, and events. - -Note that `stream.Writable` is an abstract class designed to be -extended with an underlying implementation of the -`_write(chunk, encoding, cb)` method. (See below.) - -### new stream.Writable([options]) - -* `options` {Object} - * `highWaterMark` {Number} Buffer level when `write()` starts - returning false. Default=16kb - * `decodeStrings` {Boolean} Whether or not to decode strings into - Buffers before passing them to `_write()`. Default=true - -In classes that extend the Writable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### writable.\_write(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be written. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. Ignore chunk is a buffer. Note that chunk will - **always** be a buffer unless the `decodeStrings` option is - explicitly set to `false`. -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -All Writable stream implementations must provide a `_write` method to -send data to the underlying resource. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Writable -class methods only. - -Call the callback using the standard `callback(error)` pattern to -signal that the write completed successfully or with an error. - -If the `decodeStrings` flag is set in the constructor options, then -`chunk` may be a string rather than a Buffer, and `encoding` will -indicate the sort of string that it is. This is to support -implementations that have an optimized handling for certain string -data encodings. If you do not explicitly set the `decodeStrings` -option to `false`, then you can safely ignore the `encoding` argument, -and assume that `chunk` will always be a Buffer. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - - -### writable.write(chunk, [encoding], [callback]) - -* `chunk` {Buffer | String} Data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when this chunk is - successfully written. -* Returns {Boolean} - -Writes `chunk` to the stream. Returns `true` if the data has been -flushed to the underlying resource. Returns `false` to indicate that -the buffer is full, and the data will be sent out in the future. The -`'drain'` event will indicate when the buffer is empty again. - -The specifics of when `write()` will return false, is determined by -the `highWaterMark` option provided to the constructor. - -### writable.end([chunk], [encoding], [callback]) - -* `chunk` {Buffer | String} Optional final data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when the final chunk is - successfully written. - -Call this method to signal the end of the data being written to the -stream. - -### Event: 'drain' - -Emitted when the stream's write queue empties and it's safe to write -without buffering again. Listen for it when `stream.write()` returns -`false`. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### Event: 'finish' - -When `end()` is called and there are no more chunks to write, this -event is emitted. - -### Event: 'pipe' - -* `source` {Readable Stream} - -Emitted when the stream is passed to a readable stream's pipe method. - -### Event 'unpipe' - -* `source` {Readable Stream} - -Emitted when a previously established `pipe()` is removed using the -source Readable stream's `unpipe()` method. - -## Class: stream.Duplex - -<!--type=class--> - -A "duplex" stream is one that is both Readable and Writable, such as a -TCP socket connection. - -Note that `stream.Duplex` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -and `_write(chunk, encoding, callback)` methods as you would with a Readable or -Writable stream class. - -Since JavaScript doesn't have multiple prototypal inheritance, this -class prototypally inherits from Readable, and then parasitically from -Writable. It is thus up to the user to implement both the lowlevel -`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method -on extension duplex classes. - -### new stream.Duplex(options) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then - the stream will automatically end the readable side when the - writable side ends and vice versa. - -In classes that extend the Duplex class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -## Class: stream.Transform - -A "transform" stream is a duplex stream where the output is causally -connected in some way to the input, such as a zlib stream or a crypto -stream. - -There is no requirement that the output be the same size as the input, -the same number of chunks, or arrive at the same time. For example, a -Hash stream will only ever have a single chunk of output which is -provided when the input is ended. A zlib stream will either produce -much smaller or much larger than its input. - -Rather than implement the `_read()` and `_write()` methods, Transform -classes must implement the `_transform()` method, and may optionally -also implement the `_flush()` method. (See below.) - -### new stream.Transform([options]) - -* `options` {Object} Passed to both Writable and Readable - constructors. - -In classes that extend the Transform class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### transform.\_transform(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be transformed. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. (Ignore if `decodeStrings` chunk is a buffer.) -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Transform -class methods only. - -All Transform stream implementations must provide a `_transform` -method to accept input and produce output. - -`_transform` should do whatever has to be done in this specific -Transform class, to handle the bytes being written, and pass them off -to the readable portion of the interface. Do asynchronous I/O, -process things, and so on. - -Call `transform.push(outputChunk)` 0 or more times to generate output -from this input chunk, depending on how much data you want to output -as a result of this chunk. - -Call the callback function only when the current chunk is completely -consumed. Note that there may or may not be output as a result of any -particular input chunk. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### transform.\_flush(callback) - -* `callback` {Function} Call this function (optionally with an error - argument) when you are done flushing any remaining data. - -Note: **This function MUST NOT be called directly.** It MAY be implemented -by child classes, and if so, will be called by the internal Transform -class methods only. - -In some cases, your transform operation may need to emit a bit more -data at the end of the stream. For example, a `Zlib` compression -stream will store up some internal state so that it can optimally -compress the output. At the end, however, it needs to do the best it -can with what is left, so that the data will be complete. - -In those cases, you can implement a `_flush` method, which will be -called at the very end, after all the written data is consumed, but -before emitting `end` to signal the end of the readable side. Just -like with `_transform`, call `transform.push(chunk)` zero or more -times, as appropriate, and call `callback` when the flush operation is -complete. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### Example: `SimpleProtocol` parser - -The example above of a simple protocol parser can be implemented much -more simply by using the higher level `Transform` stream class. - -In this example, rather than providing the input as an argument, it -would be piped into the parser, which is a more idiomatic Node stream -approach. - -```javascript -function SimpleProtocol(options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Transform.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Transform.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._transform = function(chunk, encoding, done) { - if (!this._inBody) { - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // and let them know that we are done parsing the header. - this.emit('header', this.header); - - // now, because we got some extra data, emit this first. - this.push(b); - } - } else { - // from there on, just provide the data to our consumer as-is. - this.push(b); - } - done(); -}; - -var parser = new SimpleProtocol(); -source.pipe(parser) - -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - - -## Class: stream.PassThrough - -This is a trivial implementation of a `Transform` stream that simply -passes the input bytes across to the output. Its purpose is mainly -for examples and testing, but there are occasionally use cases where -it can come in handy. - - -[EventEmitter]: events.html#events_class_events_eventemitter diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js deleted file mode 100644 index ca807af8..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch deleted file mode 100644 index 0ad71a1f..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/float.patch +++ /dev/null @@ -1,68 +0,0 @@ -diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js -index c5a741c..a2e0d8e 100644 ---- a/lib/_stream_duplex.js -+++ b/lib/_stream_duplex.js -@@ -26,8 +26,8 @@ - - module.exports = Duplex; - var util = require('util'); --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('./_stream_readable'); -+var Writable = require('./_stream_writable'); - - util.inherits(Duplex, Readable); - -diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js -index a5e9864..330c247 100644 ---- a/lib/_stream_passthrough.js -+++ b/lib/_stream_passthrough.js -@@ -25,7 +25,7 @@ - - module.exports = PassThrough; - --var Transform = require('_stream_transform'); -+var Transform = require('./_stream_transform'); - var util = require('util'); - util.inherits(PassThrough, Transform); - -diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js -index 2259d2e..e6681ee 100644 ---- a/lib/_stream_readable.js -+++ b/lib/_stream_readable.js -@@ -23,6 +23,9 @@ 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 StringDecoder; -diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js -index e925b4b..f08b05e 100644 ---- a/lib/_stream_transform.js -+++ b/lib/_stream_transform.js -@@ -64,7 +64,7 @@ - - module.exports = Transform; - --var Duplex = require('_stream_duplex'); -+var Duplex = require('./_stream_duplex'); - var util = require('util'); - util.inherits(Transform, Duplex); - -diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js -index a26f711..56ca47d 100644 ---- a/lib/_stream_writable.js -+++ b/lib/_stream_writable.js -@@ -109,7 +109,7 @@ function WritableState(options, stream) { - function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. -- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex)) -+ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex'))) - return new Writable(options); - - this._writableState = new WritableState(options, this); diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index a2e0d8e0..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,69 +0,0 @@ -// 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-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 330c247d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,41 +0,0 @@ -// 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-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 323f3305..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,927 +0,0 @@ -// 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 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-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index 707e4b3b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,205 +0,0 @@ -// 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-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index 9eaf4ec2..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,371 +0,0 @@ -// 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 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 = []; -} - -function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof require('./_stream_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.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-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore deleted file mode 100644 index b512c09d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE deleted file mode 100644 index 6de584a4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md deleted file mode 100644 index 4d2aa001..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md +++ /dev/null @@ -1,7 +0,0 @@ -**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-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js deleted file mode 100755 index 46470cfd..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/build.js +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env node - -const hyperquest = require('hyperzip')(require('hyperdirect')) - , bl = require('bl') - , fs = require('fs') - , path = require('path') - , cheerio = require('cheerio') - - , files = require('./files') - , testReplace = require('./test-replacements') - - , srcurlpfx = 'https://raw.github.com/joyent/node/v' + process.argv[2] + '-release/' - , libsrcurl = srcurlpfx + 'lib/' - , testsrcurl = srcurlpfx + 'test/simple/' - , testlisturl = 'https://github.com/joyent/node/tree/v' + process.argv[2] + '-release/test/simple' - , libourroot = path.join(__dirname, '../') - , testourroot = path.join(__dirname, '../test/simple/') - - -function processFile (url, out, replacements) { - hyperquest(url).pipe(bl(function (err, data) { - if (err) - throw err - - data = data.toString() - replacements.forEach(function (replacement) { - data = data.replace.apply(data, replacement) - }) - - fs.writeFile(out, data, 'utf8', function (err) { - if (err) - throw err - - console.log('Wrote', out) - }) - })) -} - -function processLibFile (file) { - var replacements = files[file] - , url = libsrcurl + file - , out = path.join(libourroot, replacements.out || file) - - processFile(url, out, replacements) -} - - -function processTestFile (file) { - var replacements = testReplace.all - , url = testsrcurl + file - , out = path.join(testourroot, file) - - if (testReplace[file]) - replacements = replacements.concat(testReplace[file]) - - processFile(url, out, replacements) -} - - -if (!/0\.1\d\.\d+/.test(process.argv[2])) { - console.log('Usage: build.js <node version>') - return process.exit(-1) -} - - -//-------------------------------------------------------------------- -// Grab & process files in ../lib/ - -Object.keys(files).forEach(processLibFile) - -//-------------------------------------------------------------------- -// Discover, grab and process all test-string-decoder* files on joyent/node - -hyperquest(testlisturl).pipe(bl(function (err, data) { - if (err) - throw err - - var $ = cheerio.load(data.toString()) - - $('table.files .js-directory-link').each(function () { - var file = $(this).text() - if (/^test-string-decoder/.test(file) || file == 'common.js') - processTestFile(file) - }) -})) - -//-------------------------------------------------------------------- -// Grab the joyent/node test/common.js - -processFile( - testsrcurl + '../common.js' - , path.join(testourroot, '../common.js') - , testReplace['common.js'] -) \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js deleted file mode 100644 index 7396a4f4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/files.js +++ /dev/null @@ -1,36 +0,0 @@ -/* This file lists the files to be fetched from the node repo - * in the /lib/ directory which will be placed in the ../lib/ - * directory after having each of the "replacements" in the - * array for that file applied to it. The replacements are - * simply the arguments to String#replace, so they can be - * strings, regexes, functions. - */ - -module.exports['string_decoder.js'] = [ - - // pull in Bufer as a require - // add Buffer.isEncoding where missing - [ - /^(\/\/ USE OR OTHER DEALINGS IN THE SOFTWARE\.)/m - , '$1\n\nvar Buffer = require(\'buffer\').Buffer;' - + '\n' - + '\nvar isBufferEncoding = Buffer.isEncoding' - + '\n || function(encoding) {' - + '\n switch (encoding && encoding.toLowerCase()) {' - + '\n 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;' - + '\n default: return false;' - + '\n }' - + '\n }' - + '\n' - - ] - - // use custom Buffer.isEncoding reference - , [ - /Buffer\.isEncoding\(/g - , 'isBufferEncoding\(' - ] - -] - -module.exports['string_decoder.js'].out = 'index.js' \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json deleted file mode 100644 index f7ee6a46..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "string_decoder-build", - "version": "0.0.0", - "description": "", - "main": "build.js", - "dependencies": { - "bl": "~0.6.0", - "hyperzip": "0.0.0", - "hyperdirect": "0.0.0", - "cheerio": "~0.13.1" - } -} diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js deleted file mode 100644 index 5bbf6028..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/build/test-replacements.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports.all = [ - [ - /require\(['"]string_decoder['"]\)/g - , 'require(\'../../\')' - ] - -] - -module.exports['common.js'] = [ - [ - /^ setImmediate,$/m - , ' typeof setImmediate == \'undefined\' ? null : setImmediate,' - ] - - , [ - /^ clearImmediate,$/m - , ' typeof clearImmediate == \'undefined\' ? null : clearImmediate,' - ] - - , [ - /^ global];$/m - , ' global].filter(Boolean);' - ] -] diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js deleted file mode 100644 index 2e44a03e..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json deleted file mode 100644 index 73785c10..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "string_decoder", - "version": "0.10.25", - "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", - "_from": "string_decoder@~0.10.x" -} diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js deleted file mode 100644 index ed5ff08d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/common.js +++ /dev/null @@ -1,200 +0,0 @@ -// 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 path = require('path'); -var assert = require('assert'); - -exports.testDir = path.dirname(__filename); -exports.fixturesDir = path.join(exports.testDir, 'fixtures'); -exports.libDir = path.join(exports.testDir, '../lib'); -exports.tmpDir = path.join(exports.testDir, 'tmp'); -exports.PORT = +process.env.NODE_COMMON_PORT || 12346; - -if (process.platform === 'win32') { - exports.PIPE = '\\\\.\\pipe\\libuv-test'; -} else { - exports.PIPE = exports.tmpDir + '/test.sock'; -} - -var util = require('util'); -for (var i in util) exports[i] = util[i]; -//for (var i in exports) global[i] = exports[i]; - -function protoCtrChain(o) { - var result = []; - for (; o; o = o.__proto__) { result.push(o.constructor); } - return result.join(); -} - -exports.indirectInstanceOf = function(obj, cls) { - if (obj instanceof cls) { return true; } - var clsChain = protoCtrChain(cls.prototype); - var objChain = protoCtrChain(obj); - return objChain.slice(-clsChain.length) === clsChain; -}; - - -exports.ddCommand = function(filename, kilobytes) { - if (process.platform === 'win32') { - var p = path.resolve(exports.fixturesDir, 'create-file.js'); - return '"' + process.argv[0] + '" "' + p + '" "' + - filename + '" ' + (kilobytes * 1024); - } else { - return 'dd if=/dev/zero of="' + filename + '" bs=1024 count=' + kilobytes; - } -}; - - -exports.spawnCat = function(options) { - var spawn = require('child_process').spawn; - - if (process.platform === 'win32') { - return spawn('more', [], options); - } else { - return spawn('cat', [], options); - } -}; - - -exports.spawnPwd = function(options) { - var spawn = require('child_process').spawn; - - if (process.platform === 'win32') { - return spawn('cmd.exe', ['/c', 'cd'], options); - } else { - return spawn('pwd', [], options); - } -}; - - -// Turn this off if the test should not check for global leaks. -exports.globalCheck = true; - -process.on('exit', function() { - if (!exports.globalCheck) return; - var knownGlobals = [setTimeout, - setInterval, - typeof setImmediate == 'undefined' ? null : setImmediate, - clearTimeout, - clearInterval, - typeof clearImmediate == 'undefined' ? null : clearImmediate, - console, - Buffer, - process, - global].filter(Boolean); - - if (global.gc) { - knownGlobals.push(gc); - } - - if (global.DTRACE_HTTP_SERVER_RESPONSE) { - knownGlobals.push(DTRACE_HTTP_SERVER_RESPONSE); - knownGlobals.push(DTRACE_HTTP_SERVER_REQUEST); - knownGlobals.push(DTRACE_HTTP_CLIENT_RESPONSE); - knownGlobals.push(DTRACE_HTTP_CLIENT_REQUEST); - knownGlobals.push(DTRACE_NET_STREAM_END); - knownGlobals.push(DTRACE_NET_SERVER_CONNECTION); - knownGlobals.push(DTRACE_NET_SOCKET_READ); - knownGlobals.push(DTRACE_NET_SOCKET_WRITE); - } - if (global.COUNTER_NET_SERVER_CONNECTION) { - knownGlobals.push(COUNTER_NET_SERVER_CONNECTION); - knownGlobals.push(COUNTER_NET_SERVER_CONNECTION_CLOSE); - knownGlobals.push(COUNTER_HTTP_SERVER_REQUEST); - knownGlobals.push(COUNTER_HTTP_SERVER_RESPONSE); - knownGlobals.push(COUNTER_HTTP_CLIENT_REQUEST); - knownGlobals.push(COUNTER_HTTP_CLIENT_RESPONSE); - } - - if (global.ArrayBuffer) { - knownGlobals.push(ArrayBuffer); - knownGlobals.push(Int8Array); - knownGlobals.push(Uint8Array); - knownGlobals.push(Uint8ClampedArray); - knownGlobals.push(Int16Array); - knownGlobals.push(Uint16Array); - knownGlobals.push(Int32Array); - knownGlobals.push(Uint32Array); - knownGlobals.push(Float32Array); - knownGlobals.push(Float64Array); - knownGlobals.push(DataView); - } - - for (var x in global) { - var found = false; - - for (var y in knownGlobals) { - if (global[x] === knownGlobals[y]) { - found = true; - break; - } - } - - if (!found) { - console.error('Unknown global: %s', x); - assert.ok(false, 'Unknown global found'); - } - } -}); - - -var mustCallChecks = []; - - -function runCallChecks(exitCode) { - if (exitCode !== 0) return; - - var failed = mustCallChecks.filter(function(context) { - return context.actual !== context.expected; - }); - - failed.forEach(function(context) { - console.log('Mismatched %s function calls. Expected %d, actual %d.', - context.name, - context.expected, - context.actual); - console.log(context.stack.split('\n').slice(2).join('\n')); - }); - - if (failed.length) process.exit(1); -} - - -exports.mustCall = function(fn, expected) { - if (typeof expected !== 'number') expected = 1; - - var context = { - expected: expected, - actual: 0, - stack: (new Error).stack, - name: fn.name || '<anonymous>' - }; - - // add the exit listener only once to avoid listener leak warnings - if (mustCallChecks.length === 0) process.on('exit', runCallChecks); - - mustCallChecks.push(context); - - return function() { - context.actual++; - return fn.apply(this, arguments); - }; -}; diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js deleted file mode 100644 index 869a4116..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder-end.js +++ /dev/null @@ -1,75 +0,0 @@ -// 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. - -// verify that the string decoder works getting 1 byte at a time, -// the whole buffer at once, and that both match the .toString(enc) -// result of the entire buffer. - -var assert = require('assert'); -var SD = require('../../').StringDecoder; -var encodings = ['base64', 'hex', 'utf8', 'utf16le', 'ucs2']; - -var bufs = [ '☃💩', 'asdf' ].map(function(b) { - return new Buffer(b); -}); - -// also test just arbitrary bytes from 0-15. -for (var i = 1; i <= 16; i++) { - var bytes = new Array(i).join('.').split('.').map(function(_, j) { - return j + 0x78; - }); - bufs.push(new Buffer(bytes)); -} - -encodings.forEach(testEncoding); - -console.log('ok'); - -function testEncoding(encoding) { - bufs.forEach(function(buf) { - testBuf(encoding, buf); - }); -} - -function testBuf(encoding, buf) { - console.error('# %s', encoding, buf); - - // write one byte at a time. - var s = new SD(encoding); - var res1 = ''; - for (var i = 0; i < buf.length; i++) { - res1 += s.write(buf.slice(i, i + 1)); - } - res1 += s.end(); - - // write the whole buffer at once. - var res2 = ''; - var s = new SD(encoding); - res2 += s.write(buf); - res2 += s.end(); - - // .toString() on the buffer - var res3 = buf.toString(encoding); - - console.log('expect=%j', res3); - assert.equal(res1, res3, 'one byte at a time should match toString'); - assert.equal(res2, res3, 'all bytes at once should match toString'); -} diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js deleted file mode 100644 index 7f69f7ea..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/test/simple/test-string-decoder.js +++ /dev/null @@ -1,163 +0,0 @@ -// 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 common = require('../common'); -var assert = require('assert'); -var StringDecoder = require('../../').StringDecoder; -var decoder = new StringDecoder('utf8'); - - - -var buffer = new Buffer('$'); -assert.deepEqual('$', decoder.write(buffer)); - -buffer = new Buffer('¢'); -assert.deepEqual('', decoder.write(buffer.slice(0, 1))); -assert.deepEqual('¢', decoder.write(buffer.slice(1, 2))); - -buffer = new Buffer('€'); -assert.deepEqual('', decoder.write(buffer.slice(0, 1))); -assert.deepEqual('', decoder.write(buffer.slice(1, 2))); -assert.deepEqual('€', decoder.write(buffer.slice(2, 3))); - -buffer = new Buffer([0xF0, 0xA4, 0xAD, 0xA2]); -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); -s += decoder.write(buffer.slice(2, 3)); -s += decoder.write(buffer.slice(3, 4)); -assert.ok(s.length > 0); - -// CESU-8 -buffer = new Buffer('EDA0BDEDB18D', 'hex'); // THUMBS UP SIGN (in CESU-8) -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); -s += decoder.write(buffer.slice(2, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 4)); -s += decoder.write(buffer.slice(4, 5)); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 2)); -s += decoder.write(buffer.slice(2, 4)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(4, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 4)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(4, 5)); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 5)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(5, 6)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 6)); -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - - -// UCS-2 -decoder = new StringDecoder('ucs2'); -buffer = new Buffer('ab', 'ucs2'); -assert.equal(decoder.write(buffer), 'ab'); // 2 complete chars -buffer = new Buffer('abc', 'ucs2'); -assert.equal(decoder.write(buffer.slice(0, 3)), 'a'); // 'a' and first of 'b' -assert.equal(decoder.write(buffer.slice(3, 6)), 'bc'); // second of 'b' and 'c' - - -// UTF-16LE -buffer = new Buffer('3DD84DDC', 'hex'); // THUMBS UP SIGN (in CESU-8) -var s = ''; -s += decoder.write(buffer.slice(0, 1)); -s += decoder.write(buffer.slice(1, 2)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(2, 3)); -s += decoder.write(buffer.slice(3, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 2)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(2, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 3)); // complete lead surrogate -assert.equal(s, ''); -s += decoder.write(buffer.slice(3, 4)); // complete trail surrogate -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - -var s = ''; -s += decoder.write(buffer.slice(0, 4)); -assert.equal(s, '\uD83D\uDC4D'); // THUMBS UP SIGN (in UTF-16) - - -// A mixed ascii and non-ascii string -// Test stolen from deps/v8/test/cctest/test-strings.cc -// U+02E4 -> CB A4 -// U+0064 -> 64 -// U+12E4 -> E1 8B A4 -// U+0030 -> 30 -// U+3045 -> E3 81 85 -var expected = '\u02e4\u0064\u12e4\u0030\u3045'; -var buffer = new Buffer([0xCB, 0xA4, 0x64, 0xE1, 0x8B, 0xA4, - 0x30, 0xE3, 0x81, 0x85]); -var charLengths = [0, 0, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5]; - -// Split the buffer into 3 segments -// |----|------|-------| -// 0 i j buffer.length -// Scan through every possible 3 segment combination -// and make sure that the string is always parsed. -common.print('scanning '); -for (var j = 2; j < buffer.length; j++) { - for (var i = 1; i < j; i++) { - var decoder = new StringDecoder('utf8'); - - var sum = decoder.write(buffer.slice(0, i)); - - // just check that we've received the right amount - // after the first write - assert.equal(charLengths[i], sum.length); - - sum += decoder.write(buffer.slice(i, j)); - sum += decoder.write(buffer.slice(j, buffer.length)); - assert.equal(expected, sum); - common.print('.'); - } -} -console.log(' crayon!'); - diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json deleted file mode 100644 index ae2e5983..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "readable-stream", - "version": "1.0.25", - "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\nA new class of streams for Node.js\n\nThis module provides the new Stream base classes introduced in Node\nv0.10, for use in Node v0.8. You can use it to have programs that\nhave to work with node v0.8, while being forward-compatible for v0.10\nand beyond. When you drop support for v0.8, you can remove this\nmodule, and only use the native streams.\n\nThis is almost exactly the same codebase as appears in Node v0.10.\nHowever:\n\n1. The exported object is actually the Readable class. Decorating the\n native `stream` module would be global pollution.\n2. In v0.10, you can safely use `base64` as an argument to\n `setEncoding` in Readable streams. However, in v0.8, the\n StringDecoder class has no `end()` method, which is problematic for\n Base64. So, don't use that, because it'll break and be weird.\n\nOther than that, the API is the same as `require('stream')` in v0.10,\nso the API docs are reproduced below.\n\n----------\n\n Stability: 2 - Unstable\n\nA stream is an abstract interface implemented by various objects in\nNode. For example a request to an HTTP server is a stream, as is\nstdout. Streams are readable, writable, or both. All streams are\ninstances of [EventEmitter][]\n\nYou can load the Stream base classes by doing `require('stream')`.\nThere are base classes provided for Readable streams, Writable\nstreams, Duplex streams, and Transform streams.\n\n## Compatibility\n\nIn earlier versions of Node, the Readable stream interface was\nsimpler, but also less powerful and less useful.\n\n* Rather than waiting for you to call the `read()` method, `'data'`\n events would start emitting immediately. If you needed to do some\n I/O to decide how to handle data, then you had to store the chunks\n in some kind of buffer so that they would not be lost.\n* The `pause()` method was advisory, rather than guaranteed. This\n meant that you still had to be prepared to receive `'data'` events\n even when the stream was in a paused state.\n\nIn Node v0.10, the Readable class described below was added. For\nbackwards compatibility with older Node programs, Readable streams\nswitch into \"old mode\" when a `'data'` event handler is added, or when\nthe `pause()` or `resume()` methods are called. The effect is that,\neven if you are not using the new `read()` method and `'readable'`\nevent, you no longer have to worry about losing `'data'` chunks.\n\nMost programs will continue to function normally. However, this\nintroduces an edge case in the following conditions:\n\n* No `'data'` event handler is added.\n* The `pause()` and `resume()` methods are never called.\n\nFor example, consider the following code:\n\n```javascript\n// WARNING! BROKEN!\nnet.createServer(function(socket) {\n\n // we add an 'end' method, but never consume the data\n socket.on('end', function() {\n // It will never get here.\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n}).listen(1337);\n```\n\nIn versions of node prior to v0.10, the incoming message data would be\nsimply discarded. However, in Node v0.10 and beyond, the socket will\nremain paused forever.\n\nThe workaround in this situation is to call the `resume()` method to\ntrigger \"old mode\" behavior:\n\n```javascript\n// Workaround\nnet.createServer(function(socket) {\n\n socket.on('end', function() {\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n // start the flow of data, discarding it.\n socket.resume();\n\n}).listen(1337);\n```\n\nIn addition to new Readable streams switching into old-mode, pre-v0.10\nstyle streams can be wrapped in a Readable class using the `wrap()`\nmethod.\n\n## Class: stream.Readable\n\n<!--type=class-->\n\nA `Readable Stream` has the following methods, members, and events.\n\nNote that `stream.Readable` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nmethod. (See below.)\n\n### new stream.Readable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} The maximum number of bytes to store in\n the internal buffer before ceasing to read from the underlying\n resource. Default=16kb\n * `encoding` {String} If specified, then buffers will be decoded to\n strings using the specified encoding. Default=null\n * `objectMode` {Boolean} Whether this stream should behave\n as a stream of objects. Meaning that stream.read(n) returns\n a single value instead of a Buffer of size n\n\nIn classes that extend the Readable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### readable.\\_read(size)\n\n* `size` {Number} Number of bytes to read asynchronously\n\nNote: **This function should NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Readable\nclass methods only.\n\nAll Readable stream implementations must provide a `_read` method\nto fetch data from the underlying resource.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\nWhen data is available, put it into the read queue by calling\n`readable.push(chunk)`. If `push` returns false, then you should stop\nreading. When `_read` is called again, you should start pushing more\ndata.\n\nThe `size` argument is advisory. Implementations where a \"read\" is a\nsingle call that returns data can use this to know how much data to\nfetch. Implementations where that is not relevant, such as TCP or\nTLS, may ignore this argument, and simply provide data whenever it\nbecomes available. There is no need, for example to \"wait\" until\n`size` bytes are available before calling `stream.push(chunk)`.\n\n### readable.push(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to push into the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nNote: **This function should be called by Readable implementors, NOT\nby consumers of Readable subclasses.** The `_read()` function will not\nbe called again until at least one `push(chunk)` call is made. If no\ndata is available, then you MAY call `push('')` (an empty string) to\nallow a future `_read` call, without adding any data to the queue.\n\nThe `Readable` class works by putting data into a read queue to be\npulled out later by calling the `read()` method when the `'readable'`\nevent fires.\n\nThe `push()` method will explicitly insert some data into the read\nqueue. If it is called with `null` then it will signal the end of the\ndata.\n\nIn some cases, you may be wrapping a lower-level source which has some\nsort of pause/resume mechanism, and a data callback. In those cases,\nyou could wrap the low-level source object by doing something like\nthis:\n\n```javascript\n// source is an object with readStop() and readStart() methods,\n// and an `ondata` member that gets called when it has data, and\n// an `onend` member that gets called when the data is over.\n\nvar stream = new Readable();\n\nsource.ondata = function(chunk) {\n // if push() returns false, then we need to stop reading from source\n if (!stream.push(chunk))\n source.readStop();\n};\n\nsource.onend = function() {\n stream.push(null);\n};\n\n// _read will be called when the stream wants to pull more data in\n// the advisory size argument is ignored in this case.\nstream._read = function(n) {\n source.readStart();\n};\n```\n\n### readable.unshift(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nThis is the corollary of `readable.push(chunk)`. Rather than putting\nthe data at the *end* of the read queue, it puts it at the *front* of\nthe read queue.\n\nThis is useful in certain use-cases where a stream is being consumed\nby a parser, which needs to \"un-consume\" some data that it has\noptimistically pulled out of the source.\n\n```javascript\n// A parser for a simple data protocol.\n// The \"header\" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// Note: This can be done more simply as a Transform stream. See below.\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Readable.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\nvar parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n### readable.wrap(stream)\n\n* `stream` {Stream} An \"old style\" readable stream\n\nIf you are using an older Node library that emits `'data'` events and\nhas a `pause()` method that is advisory only, then you can use the\n`wrap()` method to create a Readable stream that uses the old stream\nas its data source.\n\nFor example:\n\n```javascript\nvar OldReader = require('./old-api-module.js').OldReader;\nvar oreader = new OldReader;\nvar Readable = require('stream').Readable;\nvar myReader = new Readable().wrap(oreader);\n\nmyReader.on('readable', function() {\n myReader.read(); // etc.\n});\n```\n\n### Event: 'readable'\n\nWhen there is data ready to be consumed, this event will fire.\n\nWhen this event emits, call the `read()` method to consume the data.\n\n### Event: 'end'\n\nEmitted when the stream has received an EOF (FIN in TCP terminology).\nIndicates that no more `'data'` events will happen. If the stream is\nalso writable, it may be possible to continue writing.\n\n### Event: 'data'\n\nThe `'data'` event emits either a `Buffer` (by default) or a string if\n`setEncoding()` was used.\n\nNote that adding a `'data'` event listener will switch the Readable\nstream into \"old mode\", where data is emitted as soon as it is\navailable, rather than waiting for you to call `read()` to consume it.\n\n### Event: 'error'\n\nEmitted if there was an error receiving data.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### readable.setEncoding(encoding)\n\nMakes the `'data'` event emit a string instead of a `Buffer`. `encoding`\ncan be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`.\n\nThe encoding can also be set by specifying an `encoding` field to the\nconstructor.\n\n### readable.read([size])\n\n* `size` {Number | null} Optional number of bytes to read.\n* Return: {Buffer | String | null}\n\nNote: **This function SHOULD be called by Readable stream users.**\n\nCall this method to consume data once the `'readable'` event is\nemitted.\n\nThe `size` argument will set a minimum number of bytes that you are\ninterested in. If not set, then the entire content of the internal\nbuffer is returned.\n\nIf there is no data to consume, or if there are fewer bytes in the\ninternal buffer than the `size` argument, then `null` is returned, and\na future `'readable'` event will be emitted when more is available.\n\nCalling `stream.read(0)` will always return `null`, and will trigger a\nrefresh of the internal buffer, but otherwise be a no-op.\n\n### readable.pipe(destination, [options])\n\n* `destination` {Writable Stream}\n* `options` {Object} Optional\n * `end` {Boolean} Default=true\n\nConnects this readable stream to `destination` WriteStream. Incoming\ndata on this stream gets written to `destination`. Properly manages\nback-pressure so that a slow destination will not be overwhelmed by a\nfast readable stream.\n\nThis function returns the `destination` stream.\n\nFor example, emulating the Unix `cat` command:\n\n process.stdin.pipe(process.stdout);\n\nBy default `end()` is called on the destination when the source stream\nemits `end`, so that `destination` is no longer writable. Pass `{ end:\nfalse }` as `options` to keep the destination stream open.\n\nThis keeps `writer` open so that \"Goodbye\" can be written at the\nend.\n\n reader.pipe(writer, { end: false });\n reader.on(\"end\", function() {\n writer.end(\"Goodbye\\n\");\n });\n\nNote that `process.stderr` and `process.stdout` are never closed until\nthe process exits, regardless of the specified options.\n\n### readable.unpipe([destination])\n\n* `destination` {Writable Stream} Optional\n\nUndo a previously established `pipe()`. If no destination is\nprovided, then all previously established pipes are removed.\n\n### readable.pause()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nCeases the flow of data. No `'data'` events are emitted while the\nstream is in a paused state.\n\n### readable.resume()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nResumes the incoming `'data'` events after a `pause()`.\n\n\n## Class: stream.Writable\n\n<!--type=class-->\n\nA `Writable` Stream has the following methods, members, and events.\n\nNote that `stream.Writable` is an abstract class designed to be\nextended with an underlying implementation of the\n`_write(chunk, encoding, cb)` method. (See below.)\n\n### new stream.Writable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} Buffer level when `write()` starts\n returning false. Default=16kb\n * `decodeStrings` {Boolean} Whether or not to decode strings into\n Buffers before passing them to `_write()`. Default=true\n\nIn classes that extend the Writable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### writable.\\_write(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be written. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. Ignore chunk is a buffer. Note that chunk will\n **always** be a buffer unless the `decodeStrings` option is\n explicitly set to `false`.\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nAll Writable stream implementations must provide a `_write` method to\nsend data to the underlying resource.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Writable\nclass methods only.\n\nCall the callback using the standard `callback(error)` pattern to\nsignal that the write completed successfully or with an error.\n\nIf the `decodeStrings` flag is set in the constructor options, then\n`chunk` may be a string rather than a Buffer, and `encoding` will\nindicate the sort of string that it is. This is to support\nimplementations that have an optimized handling for certain string\ndata encodings. If you do not explicitly set the `decodeStrings`\noption to `false`, then you can safely ignore the `encoding` argument,\nand assume that `chunk` will always be a Buffer.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n\n### writable.write(chunk, [encoding], [callback])\n\n* `chunk` {Buffer | String} Data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when this chunk is\n successfully written.\n* Returns {Boolean}\n\nWrites `chunk` to the stream. Returns `true` if the data has been\nflushed to the underlying resource. Returns `false` to indicate that\nthe buffer is full, and the data will be sent out in the future. The\n`'drain'` event will indicate when the buffer is empty again.\n\nThe specifics of when `write()` will return false, is determined by\nthe `highWaterMark` option provided to the constructor.\n\n### writable.end([chunk], [encoding], [callback])\n\n* `chunk` {Buffer | String} Optional final data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when the final chunk is\n successfully written.\n\nCall this method to signal the end of the data being written to the\nstream.\n\n### Event: 'drain'\n\nEmitted when the stream's write queue empties and it's safe to write\nwithout buffering again. Listen for it when `stream.write()` returns\n`false`.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### Event: 'finish'\n\nWhen `end()` is called and there are no more chunks to write, this\nevent is emitted.\n\n### Event: 'pipe'\n\n* `source` {Readable Stream}\n\nEmitted when the stream is passed to a readable stream's pipe method.\n\n### Event 'unpipe'\n\n* `source` {Readable Stream}\n\nEmitted when a previously established `pipe()` is removed using the\nsource Readable stream's `unpipe()` method.\n\n## Class: stream.Duplex\n\n<!--type=class-->\n\nA \"duplex\" stream is one that is both Readable and Writable, such as a\nTCP socket connection.\n\nNote that `stream.Duplex` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nand `_write(chunk, encoding, callback)` methods as you would with a Readable or\nWritable stream class.\n\nSince JavaScript doesn't have multiple prototypal inheritance, this\nclass prototypally inherits from Readable, and then parasitically from\nWritable. It is thus up to the user to implement both the lowlevel\n`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method\non extension duplex classes.\n\n### new stream.Duplex(options)\n\n* `options` {Object} Passed to both Writable and Readable\n constructors. Also has the following fields:\n * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then\n the stream will automatically end the readable side when the\n writable side ends and vice versa.\n\nIn classes that extend the Duplex class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n## Class: stream.Transform\n\nA \"transform\" stream is a duplex stream where the output is causally\nconnected in some way to the input, such as a zlib stream or a crypto\nstream.\n\nThere is no requirement that the output be the same size as the input,\nthe same number of chunks, or arrive at the same time. For example, a\nHash stream will only ever have a single chunk of output which is\nprovided when the input is ended. A zlib stream will either produce\nmuch smaller or much larger than its input.\n\nRather than implement the `_read()` and `_write()` methods, Transform\nclasses must implement the `_transform()` method, and may optionally\nalso implement the `_flush()` method. (See below.)\n\n### new stream.Transform([options])\n\n* `options` {Object} Passed to both Writable and Readable\n constructors.\n\nIn classes that extend the Transform class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### transform.\\_transform(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be transformed. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. (Ignore if `decodeStrings` chunk is a buffer.)\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Transform\nclass methods only.\n\nAll Transform stream implementations must provide a `_transform`\nmethod to accept input and produce output.\n\n`_transform` should do whatever has to be done in this specific\nTransform class, to handle the bytes being written, and pass them off\nto the readable portion of the interface. Do asynchronous I/O,\nprocess things, and so on.\n\nCall `transform.push(outputChunk)` 0 or more times to generate output\nfrom this input chunk, depending on how much data you want to output\nas a result of this chunk.\n\nCall the callback function only when the current chunk is completely\nconsumed. Note that there may or may not be output as a result of any\nparticular input chunk.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### transform.\\_flush(callback)\n\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done flushing any remaining data.\n\nNote: **This function MUST NOT be called directly.** It MAY be implemented\nby child classes, and if so, will be called by the internal Transform\nclass methods only.\n\nIn some cases, your transform operation may need to emit a bit more\ndata at the end of the stream. For example, a `Zlib` compression\nstream will store up some internal state so that it can optimally\ncompress the output. At the end, however, it needs to do the best it\ncan with what is left, so that the data will be complete.\n\nIn those cases, you can implement a `_flush` method, which will be\ncalled at the very end, after all the written data is consumed, but\nbefore emitting `end` to signal the end of the readable side. Just\nlike with `_transform`, call `transform.push(chunk)` zero or more\ntimes, as appropriate, and call `callback` when the flush operation is\ncomplete.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### Example: `SimpleProtocol` parser\n\nThe example above of a simple protocol parser can be implemented much\nmore simply by using the higher level `Transform` stream class.\n\nIn this example, rather than providing the input as an argument, it\nwould be piped into the parser, which is a more idiomatic Node stream\napproach.\n\n```javascript\nfunction SimpleProtocol(options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Transform.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Transform.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._transform = function(chunk, encoding, done) {\n if (!this._inBody) {\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n\n // now, because we got some extra data, emit this first.\n this.push(b);\n }\n } else {\n // from there on, just provide the data to our consumer as-is.\n this.push(b);\n }\n done();\n};\n\nvar parser = new SimpleProtocol();\nsource.pipe(parser)\n\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n\n## Class: stream.PassThrough\n\nThis is a trivial implementation of a `Transform` stream that simply\npasses the input bytes across to the output. Its purpose is mainly\nfor examples and testing, but there are occasionally use cases where\nit can come in handy.\n\n\n[EventEmitter]: events.html#events_class_events_eventemitter\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.25", - "_from": "readable-stream@~1.0.17" -} diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js deleted file mode 100644 index 27e8d8a5..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js deleted file mode 100644 index 4d1ddfc7..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,6 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js deleted file mode 100644 index 5d482f07..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js deleted file mode 100644 index e1e9efdf..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE deleted file mode 100644 index a23e08a8..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md deleted file mode 100644 index 389adae3..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js deleted file mode 100644 index 62391e78..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = hasKeys - -function hasKeys(source) { - return source !== null && - (typeof source === "object" || - typeof source === "function") -} diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js deleted file mode 100644 index 20937d19..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js +++ /dev/null @@ -1,25 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js deleted file mode 100644 index 17454ae4..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js +++ /dev/null @@ -1,25 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml deleted file mode 100644 index 60d00ce1..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.8" - - "0.6" diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md deleted file mode 100644 index ab32d0ad..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md +++ /dev/null @@ -1,39 +0,0 @@ -#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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js deleted file mode 100644 index db32d458..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js +++ /dev/null @@ -1,40 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js deleted file mode 100644 index f5b24b6d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js +++ /dev/null @@ -1,2 +0,0 @@ -module.exports = Object.keys || require('./shim'); - diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js deleted file mode 100644 index 74a09897..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js +++ /dev/null @@ -1,16 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json deleted file mode 100644 index 1de9cbb3..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js deleted file mode 100644 index b88421be..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js +++ /dev/null @@ -1,62 +0,0 @@ -(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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js deleted file mode 100644 index f29f065a..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js +++ /dev/null @@ -1,156 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js deleted file mode 100644 index 8b77b1fc..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js +++ /dev/null @@ -1,6 +0,0 @@ - -require('./foreach'); -require('./isArguments'); - -require('./shim'); - diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js deleted file mode 100644 index 62a07c2d..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js +++ /dev/null @@ -1,10 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js deleted file mode 100644 index 9d932712..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js +++ /dev/null @@ -1,134 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json deleted file mode 100644 index c52e4efc..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js deleted file mode 100644 index 3369d796..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js +++ /dev/null @@ -1,63 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/package.json deleted file mode 100644 index 3d0e0c8b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/through2/test/basic-test.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/test/basic-test.js deleted file mode 100644 index 9d137c7f..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/test/basic-test.js +++ /dev/null @@ -1,334 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/test/bench.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/test/bench.js deleted file mode 100644 index cc10868b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/test/bench.js +++ /dev/null @@ -1,42 +0,0 @@ -/* -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-sass/node_modules/gulp-util/node_modules/through2/test/sauce.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/test/sauce.js deleted file mode 100644 index a6d28625..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/test/sauce.js +++ /dev/null @@ -1,38 +0,0 @@ -#!/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-sass/node_modules/gulp-util/node_modules/through2/test/test.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/test/test.js deleted file mode 100644 index aa9b4877..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/test/test.js +++ /dev/null @@ -1,9 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/through2/through2.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/through2.js deleted file mode 100644 index c1104848..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/through2/through2.js +++ /dev/null @@ -1,78 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/.npmignore b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/.npmignore deleted file mode 100644 index b5ef13a3..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.DS_Store -*.log -node_modules -build -*.node -components \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/.travis.yml b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/.travis.yml deleted file mode 100644 index 33ad9f8c..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/LICENSE b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/LICENSE deleted file mode 100755 index 4f482f9b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/README.md deleted file mode 100644 index 3f97efc5..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/README.md +++ /dev/null @@ -1,123 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/vinyl/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/index.js deleted file mode 100644 index 97f5c752..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/index.js +++ /dev/null @@ -1,128 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js deleted file mode 100644 index 3a861f22..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js deleted file mode 100644 index 2c906789..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js +++ /dev/null @@ -1,12 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js deleted file mode 100644 index 0e23782c..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js deleted file mode 100644 index 403bb30e..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(v) { - return v === null; -}; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js deleted file mode 100644 index 9ce0929b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js +++ /dev/null @@ -1,5 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md deleted file mode 100644 index 146cb32a..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -## 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-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md deleted file mode 100644 index 8b12b6fa..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# 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-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js deleted file mode 100644 index e797cfe6..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js +++ /dev/null @@ -1,13 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json deleted file mode 100644 index f7dc15d9..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js deleted file mode 100644 index e4bb2814..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js +++ /dev/null @@ -1,36 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/package.json b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/package.json deleted file mode 100644 index 4ef0f631..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "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-sass/node_modules/gulp-util/node_modules/vinyl/test/File.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/File.js deleted file mode 100644 index 1f2a83a0..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/File.js +++ /dev/null @@ -1,540 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js deleted file mode 100644 index 7d286814..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js +++ /dev/null @@ -1,28 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js deleted file mode 100644 index fe1802c5..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js +++ /dev/null @@ -1,53 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js deleted file mode 100644 index 5bb1cb91..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js +++ /dev/null @@ -1,29 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/test/isNull.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/isNull.js deleted file mode 100644 index db70c013..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/isNull.js +++ /dev/null @@ -1,23 +0,0 @@ -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-sass/node_modules/gulp-util/node_modules/vinyl/test/isStream.js b/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/isStream.js deleted file mode 100644 index f22584c5..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/node_modules/vinyl/test/isStream.js +++ /dev/null @@ -1,29 +0,0 @@ -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-sass/node_modules/gulp-util/package.json b/node_modules/gulp-sass/node_modules/gulp-util/package.json deleted file mode 100644 index 9003873b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "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.5" -} diff --git a/node_modules/gulp-sass/node_modules/gulp-util/test/File.js b/node_modules/gulp-sass/node_modules/gulp-util/test/File.js deleted file mode 100644 index 53544075..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/File.js +++ /dev/null @@ -1,46 +0,0 @@ -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-sass/node_modules/gulp-util/test/PluginError.js b/node_modules/gulp-sass/node_modules/gulp-util/test/PluginError.js deleted file mode 100644 index 6dc23c0c..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/PluginError.js +++ /dev/null @@ -1,70 +0,0 @@ -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-sass/node_modules/gulp-util/test/beep.js b/node_modules/gulp-sass/node_modules/gulp-util/test/beep.js deleted file mode 100644 index e3e71073..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/beep.js +++ /dev/null @@ -1,23 +0,0 @@ -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-sass/node_modules/gulp-util/test/buffer.js b/node_modules/gulp-sass/node_modules/gulp-util/test/buffer.js deleted file mode 100644 index 6b4de67f..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/buffer.js +++ /dev/null @@ -1,36 +0,0 @@ -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-sass/node_modules/gulp-util/test/colors.js b/node_modules/gulp-sass/node_modules/gulp-util/test/colors.js deleted file mode 100644 index 970367e2..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/colors.js +++ /dev/null @@ -1,11 +0,0 @@ -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-sass/node_modules/gulp-util/test/combine.js b/node_modules/gulp-sass/node_modules/gulp-util/test/combine.js deleted file mode 100644 index a54f0012..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/combine.js +++ /dev/null @@ -1,38 +0,0 @@ -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-sass/node_modules/gulp-util/test/date.js b/node_modules/gulp-sass/node_modules/gulp-util/test/date.js deleted file mode 100644 index 21f52ee9..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/date.js +++ /dev/null @@ -1,17 +0,0 @@ -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-sass/node_modules/gulp-util/test/env.js b/node_modules/gulp-sass/node_modules/gulp-util/test/env.js deleted file mode 100644 index d3942940..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/env.js +++ /dev/null @@ -1,12 +0,0 @@ -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-sass/node_modules/gulp-util/test/isBuffer.js b/node_modules/gulp-sass/node_modules/gulp-util/test/isBuffer.js deleted file mode 100644 index ad09bbf5..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/isBuffer.js +++ /dev/null @@ -1,16 +0,0 @@ -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-sass/node_modules/gulp-util/test/isNull.js b/node_modules/gulp-sass/node_modules/gulp-util/test/isNull.js deleted file mode 100644 index 841fc46b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/isNull.js +++ /dev/null @@ -1,20 +0,0 @@ -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-sass/node_modules/gulp-util/test/isStream.js b/node_modules/gulp-sass/node_modules/gulp-util/test/isStream.js deleted file mode 100644 index 3935324b..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/isStream.js +++ /dev/null @@ -1,16 +0,0 @@ -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-sass/node_modules/gulp-util/test/linefeed.js b/node_modules/gulp-sass/node_modules/gulp-util/test/linefeed.js deleted file mode 100644 index 72f61ca0..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/linefeed.js +++ /dev/null @@ -1,5 +0,0 @@ -var util = require('../'); -var should = require('should'); -var path = require('path'); -require('mocha'); - diff --git a/node_modules/gulp-sass/node_modules/gulp-util/test/log.js b/node_modules/gulp-sass/node_modules/gulp-util/test/log.js deleted file mode 100644 index 71c6417a..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/log.js +++ /dev/null @@ -1,23 +0,0 @@ -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-sass/node_modules/gulp-util/test/noop.js b/node_modules/gulp-sass/node_modules/gulp-util/test/noop.js deleted file mode 100644 index 0d75b35c..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/noop.js +++ /dev/null @@ -1,24 +0,0 @@ -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-sass/node_modules/gulp-util/test/replaceExtension.js b/node_modules/gulp-sass/node_modules/gulp-util/test/replaceExtension.js deleted file mode 100644 index b9c65662..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/replaceExtension.js +++ /dev/null @@ -1,34 +0,0 @@ -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-sass/node_modules/gulp-util/test/template.js b/node_modules/gulp-sass/node_modules/gulp-util/test/template.js deleted file mode 100644 index 7664620a..00000000 --- a/node_modules/gulp-sass/node_modules/gulp-util/test/template.js +++ /dev/null @@ -1,99 +0,0 @@ -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-sass/node_modules/map-stream/.npmignore b/node_modules/gulp-sass/node_modules/map-stream/.npmignore deleted file mode 100644 index 13abef4f..00000000 --- a/node_modules/gulp-sass/node_modules/map-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/gulp-sass/node_modules/map-stream/.travis.yml b/node_modules/gulp-sass/node_modules/map-stream/.travis.yml deleted file mode 100644 index 895dbd36..00000000 --- a/node_modules/gulp-sass/node_modules/map-stream/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/gulp-sass/node_modules/map-stream/LICENCE b/node_modules/gulp-sass/node_modules/map-stream/LICENCE deleted file mode 100644 index 171dd970..00000000 --- a/node_modules/gulp-sass/node_modules/map-stream/LICENCE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011 Dominic Tarr - -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-sass/node_modules/map-stream/examples/pretty.js b/node_modules/gulp-sass/node_modules/map-stream/examples/pretty.js deleted file mode 100644 index ab073987..00000000 --- a/node_modules/gulp-sass/node_modules/map-stream/examples/pretty.js +++ /dev/null @@ -1,26 +0,0 @@ - -var inspect = require('util').inspect - -if(!module.parent) { - var map = require('..') //load map-stream - var es = require('event-stream') //load event-stream - es.pipe( //pipe joins streams together - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - map(function (data, callback) { //turn this async function into a stream - var j - try { - j = JSON.parse(data) //try to parse input into json - } catch (err) { - return callback(null, data) //if it fails just pass it anyway - } - callback(null, inspect(j)) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) - } - -// run this -// -// curl -sS registry.npmjs.org/event-stream | node pretty.js -// diff --git a/node_modules/gulp-sass/node_modules/map-stream/index.js b/node_modules/gulp-sass/node_modules/map-stream/index.js deleted file mode 100644 index 09ae829d..00000000 --- a/node_modules/gulp-sass/node_modules/map-stream/index.js +++ /dev/null @@ -1,145 +0,0 @@ -//filter will reemit the data if cb(err,pass) pass is truthy - -// reduce is more tricky -// maybe we want to group the reductions or emit progress updates occasionally -// the most basic reduce just emits one 'data' event after it has recieved 'end' - - -var Stream = require('stream').Stream - - -//create an event stream and apply function to each .write -//emitting each response as data -//unless it's an empty callback - -module.exports = function (mapper, opts) { - - var stream = new Stream() - , self = this - , inputs = 0 - , outputs = 0 - , ended = false - , paused = false - , destroyed = false - , lastWritten = 0 - , inNext = false - - this.opts = opts || {}; - var errorEventName = this.opts.failures ? 'failure' : 'error'; - - // Items that are not ready to be written yet (because they would come out of - // order) get stuck in a queue for later. - var writeQueue = {} - - stream.writable = true - stream.readable = true - - function queueData (data, number) { - var nextToWrite = lastWritten + 1 - - if (number === nextToWrite) { - // If it's next, and its not undefined write it - if (data !== undefined) { - stream.emit.apply(stream, ['data', data]) - } - lastWritten ++ - nextToWrite ++ - } else { - // Otherwise queue it for later. - writeQueue[number] = data - } - - // If the next value is in the queue, write it - if (writeQueue.hasOwnProperty(nextToWrite)) { - var dataToWrite = writeQueue[nextToWrite] - delete writeQueue[nextToWrite] - return queueData(dataToWrite, nextToWrite) - } - - outputs ++ - if(inputs === outputs) { - if(paused) paused = false, stream.emit('drain') //written all the incoming events - if(ended) end() - } - } - - function next (err, data, number) { - if(destroyed) return - inNext = true - - if (!err || self.opts.failures) { - queueData(data, number) - } - - if (err) { - stream.emit.apply(stream, [ errorEventName, err ]); - } - - inNext = false; - } - - // Wrap the mapper function by calling its callback with the order number of - // the item in the stream. - function wrappedMapper (input, number, callback) { - return mapper.call(null, input, function(err, data){ - callback(err, data, number) - }) - } - - stream.write = function (data) { - if(ended) throw new Error('map stream is not writable') - inNext = false - inputs ++ - - try { - //catch sync errors and handle them like async errors - var written = wrappedMapper(data, inputs, next) - paused = (written === false) - return !paused - } catch (err) { - //if the callback has been called syncronously, and the error - //has occured in an listener, throw it again. - if(inNext) - throw err - next(err) - return !paused - } - } - - function end (data) { - //if end was called with args, write it, - ended = true //write will emit 'end' if ended is true - stream.writable = false - if(data !== undefined) { - return queueData(data, inputs) - } else if (inputs == outputs) { //wait for processing - stream.readable = false, stream.emit('end'), stream.destroy() - } - } - - stream.end = function (data) { - if(ended) return - end() - } - - stream.destroy = function () { - ended = destroyed = true - stream.writable = stream.readable = paused = false - process.nextTick(function () { - stream.emit('close') - }) - } - stream.pause = function () { - paused = true - } - - stream.resume = function () { - paused = false - } - - return stream -} - - - - diff --git a/node_modules/gulp-sass/node_modules/map-stream/package.json b/node_modules/gulp-sass/node_modules/map-stream/package.json deleted file mode 100644 index e9c4ee04..00000000 --- a/node_modules/gulp-sass/node_modules/map-stream/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "map-stream", - "version": "0.1.0", - "description": "construct pipes of streams of events", - "homepage": "http://github.com/dominictarr/map-stream", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/map-stream.git" - }, - "dependencies": {}, - "devDependencies": { - "asynct": "*", - "it-is": "1", - "ubelt": "~2.9", - "stream-spec": "~0.2", - "event-stream": "~2.1", - "from": "0.0.2" - }, - "scripts": { - "test": "asynct test/" - }, - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "http://dominictarr.com" - }, - "readme": "# MapStream\n\nRefactored out of [event-stream](https://github.com/dominictarr/event-stream)\n\n##map (asyncFunction[, options])\n\nCreate a through stream from an asyncronous function. \n\n``` js\nvar map = require('map-stream')\n\nmap(function (data, callback) {\n //transform data\n // ...\n callback(null, data)\n})\n\n```\n\nEach map MUST call the callback. It may callback with data, with an error or with no arguments, \n\n * `callback()` drop this data. \n this makes the map work like `filter`, \n note:`callback(null,null)` is not the same, and will emit `null`\n\n * `callback(null, newData)` turn data into newData\n \n * `callback(error)` emit an error for this item.\n\n>Note: if a callback is not called, `map` will think that it is still being processed, \n>every call must be answered or the stream will not know when to end. \n>\n>Also, if the callback is called more than once, every call but the first will be ignored.\n\n##Options \n\n * `failures` - `boolean` continue mapping even if error occured. On error `map-stream` will emit `failure` event. (default: `false`)\n", - "readmeFilename": "readme.markdown", - "bugs": { - "url": "https://github.com/dominictarr/map-stream/issues" - }, - "_id": "map-stream@0.1.0", - "_from": "map-stream@~0.1.0" -} diff --git a/node_modules/gulp-sass/node_modules/map-stream/readme.markdown b/node_modules/gulp-sass/node_modules/map-stream/readme.markdown deleted file mode 100644 index 18971588..00000000 --- a/node_modules/gulp-sass/node_modules/map-stream/readme.markdown +++ /dev/null @@ -1,37 +0,0 @@ -# MapStream - -Refactored out of [event-stream](https://github.com/dominictarr/event-stream) - -##map (asyncFunction[, options]) - -Create a through stream from an asyncronous function. - -``` js -var map = require('map-stream') - -map(function (data, callback) { - //transform data - // ... - callback(null, data) -}) - -``` - -Each map MUST call the callback. It may callback with data, with an error or with no arguments, - - * `callback()` drop this data. - this makes the map work like `filter`, - note:`callback(null,null)` is not the same, and will emit `null` - - * `callback(null, newData)` turn data into newData - - * `callback(error)` emit an error for this item. - ->Note: if a callback is not called, `map` will think that it is still being processed, ->every call must be answered or the stream will not know when to end. -> ->Also, if the callback is called more than once, every call but the first will be ignored. - -##Options - - * `failures` - `boolean` continue mapping even if error occured. On error `map-stream` will emit `failure` event. (default: `false`) diff --git a/node_modules/gulp-sass/node_modules/map-stream/test/simple-map.asynct.js b/node_modules/gulp-sass/node_modules/map-stream/test/simple-map.asynct.js deleted file mode 100644 index 2b9a2922..00000000 --- a/node_modules/gulp-sass/node_modules/map-stream/test/simple-map.asynct.js +++ /dev/null @@ -1,318 +0,0 @@ -'use strict'; - -var map = require('../') - , it = require('it-is') - , u = require('ubelt') - , spec = require('stream-spec') - , from = require('from') - , Stream = require('stream') - , es = require('event-stream') - -//REFACTOR THIS TEST TO USE es.readArray and es.writeArray - -function writeArray(array, stream) { - - array.forEach( function (j) { - stream.write(j) - }) - stream.end() - -} - -function readStream(stream, done) { - - var array = [] - stream.on('data', function (data) { - array.push(data) - }) - stream.on('error', done) - stream.on('end', function (data) { - done(null, array) - }) - -} - -//call sink on each write, -//and complete when finished. - -function pauseStream (prob, delay) { - var pauseIf = ( - 'number' == typeof prob - ? function () { - return Math.random() < prob - } - : 'function' == typeof prob - ? prob - : 0.1 - ) - var delayer = ( - !delay - ? process.nextTick - : 'number' == typeof delay - ? function (next) { setTimeout(next, delay) } - : delay - ) - - return es.through(function (data) { - if(!this.paused && pauseIf()) { - console.log('PAUSE STREAM PAUSING') - this.pause() - var self = this - delayer(function () { - console.log('PAUSE STREAM RESUMING') - self.resume() - }) - } - console.log("emit ('data', " + data + ')') - this.emit('data', data) - }) -} - -exports ['simple map applied to a stream'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - - var doubler = map(function (data, cb) { - cb(null, data * 2) - }) - - spec(doubler).through().validateOnExit() - - //a map is only a middle man, so it is both readable and writable - - it(doubler).has({ - readable: true, - writable: true, - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 2 - })) -// process.nextTick(x.validate) - test.done() - }) - - writeArray(input, doubler) - -} - -exports ['stream comes back in the correct order'] = function (test) { - var input = [3, 2, 1] - - var delayer = map(function(data, cb){ - setTimeout(function () { - cb(null, data) - }, 100 * data) - }) - - readStream(delayer, function (err, output) { - it(output).deepEqual(input) - test.done() - }) - - writeArray(input, delayer) -} - -exports ['continues on error event with failures `true`'] = function (test) { - var input = [1, 2, 3] - - var delayer = map(function(data, cb){ - cb(new Error('Something gone wrong'), data) - }, { failures: true }) - - readStream(delayer, function (err, output) { - it(output).deepEqual(input) - test.done() - }) - - writeArray(input, delayer) -} - -exports['pipe two maps together'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - function dd (data, cb) { - cb(null, data * 2) - } - var doubler1 = map(dd), doubler2 = map(dd) - - doubler1.pipe(doubler2) - - spec(doubler1).through().validateOnExit() - spec(doubler2).through().validateOnExit() - - readStream(doubler2, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 4 - })) - test.done() - }) - - writeArray(input, doubler1) - -} - -//next: -// -// test pause, resume and drian. -// - -// then make a pipe joiner: -// -// plumber (evStr1, evStr2, evStr3, evStr4, evStr5) -// -// will return a single stream that write goes to the first - -exports ['map will not call end until the callback'] = function (test) { - - var ticker = map(function (data, cb) { - process.nextTick(function () { - cb(null, data * 2) - }) - }) - - spec(ticker).through().validateOnExit() - - ticker.write('x') - ticker.end() - - ticker.on('end', function () { - test.done() - }) -} - -exports ['emit failures with opts.failures === `ture`'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - map(function () { - throw err - }, { failures: true }) - - mapper.on('failure', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['emit error thrown'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - map(function () { - throw err - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['emit error calledback'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - map(function (data, callback) { - callback(err) - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['do not emit drain if not paused'] = function (test) { - - var maps = map(function (data, callback) { - u.delay(callback)(null, 1) - return true - }) - - spec(maps).through().pausable().validateOnExit() - - maps.on('drain', function () { - it(false).ok('should not emit drain unless the stream is paused') - }) - - it(maps.write('hello')).equal(true) - it(maps.write('hello')).equal(true) - it(maps.write('hello')).equal(true) - setTimeout(function () {maps.end()},10) - maps.on('end', test.done) -} - -exports ['emits drain if paused, when all '] = function (test) { - var active = 0 - var drained = false - var maps = map(function (data, callback) { - active ++ - u.delay(function () { - active -- - callback(null, 1) - })() - console.log('WRITE', false) - return false - }) - - spec(maps).through().validateOnExit() - - maps.on('drain', function () { - drained = true - it(active).equal(0, 'should emit drain when all maps are done') - }) - - it(maps.write('hello')).equal(false) - it(maps.write('hello')).equal(false) - it(maps.write('hello')).equal(false) - - process.nextTick(function () {maps.end()},10) - - maps.on('end', function () { - console.log('end') - it(drained).ok('shoud have emitted drain before end') - test.done() - }) - -} - -exports ['map applied to a stream with filtering'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - - var doubler = map(function (data, callback) { - if (data % 2) - callback(null, data * 2) - else - callback() - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.filter(function (j) { - return j % 2 - }).map(function (j) { - return j * 2 - })) - test.done() - }) - - spec(doubler).through().validateOnExit() - - writeArray(input, doubler) - -} - - diff --git a/node_modules/gulp-sass/node_modules/node-sass/.editorconfig b/node_modules/gulp-sass/node_modules/node-sass/.editorconfig deleted file mode 100644 index 833f2619..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/.editorconfig +++ /dev/null @@ -1,11 +0,0 @@ -# This file is for unifying the coding style for different editors and IDEs -# editorconfig.org - -root = true - -[*] -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -indent_style = spaces -indent_size = 2 diff --git a/node_modules/gulp-sass/node_modules/node-sass/.gitmodules b/node_modules/gulp-sass/node_modules/node-sass/.gitmodules deleted file mode 100644 index 220dfd9a..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "libsass"] - path = libsass - url = git://github.com/hcatlin/libsass.git diff --git a/node_modules/gulp-sass/node_modules/node-sass/.jshintignore b/node_modules/gulp-sass/node_modules/node-sass/.jshintignore deleted file mode 100644 index 40b878db..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/.jshintignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/.jshintrc b/node_modules/gulp-sass/node_modules/node-sass/.jshintrc deleted file mode 100644 index 86a65de0..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/.jshintrc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "node": true, - "laxbreak": true, - "indent": 2, - "curly": true, - "trailing": true, - "undef": true, - "unused": true, - "expr":true, - "multistr": true, - "globals": { - "it": true, - "describe": true - } -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/.npmignore b/node_modules/gulp-sass/node_modules/node-sass/.npmignore deleted file mode 100644 index 378eac25..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/.npmignore +++ /dev/null @@ -1 +0,0 @@ -build diff --git a/node_modules/gulp-sass/node_modules/node-sass/.travis.yml b/node_modules/gulp-sass/node_modules/node-sass/.travis.yml deleted file mode 100644 index 4cee5402..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.10 \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/CONTRIBUTING.md b/node_modules/gulp-sass/node_modules/node-sass/CONTRIBUTING.md deleted file mode 100644 index fbaac347..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/CONTRIBUTING.md +++ /dev/null @@ -1,6 +0,0 @@ -## Contributing - * Fork the project. - * Make your feature addition or bug fix. - * Add documentation if necessary. - * Add tests for it. This is important so I don't break it in a future version unintentionally. - * Send a pull request. Bonus points for topic branches. \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/LICENSE deleted file mode 100644 index 7fd5270c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2013 Andrew Nesbitt - -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-sass/node_modules/node-sass/README.md b/node_modules/gulp-sass/node_modules/node-sass/README.md deleted file mode 100644 index ef40919e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/README.md +++ /dev/null @@ -1,189 +0,0 @@ -##node-sass - -[![Build Status](https://secure.travis-ci.org/andrew/node-sass.png?branch=master)](https://travis-ci.org/andrew/node-sass) - -Node-sass is a library that provides binding for Node.js to [libsass](https://github.com/hcatlin/libsass), the C version of the popular stylesheet preprocessor, Sass. - -It allows you to natively compile .scss files to css at incredible speed and automatically via a connect middleware. - -Find it on npm: <https://npmjs.org/package/node-sass> - -## Install - - npm install node-sass - -## Usage - -```javascript -var sass = require('node-sass'); -sass.render({ - file: scss_filename, - success: callback - [, options..] - }); -// OR -var css = sass.renderSync({ - data: scss_content - [, options..] -}); -``` - -### Options - -The API for using node-sass has changed, so that now there is only one variable - an options hash. Some of these options are optional, and in some circumstances some are mandatory. - -#### file -`file` is a `String` of the path to an `scss` file for libsass to render. One of this or `data` options are required, for both render and renderSync. - -#### data -`data` is a `String` containing the scss to be rendered by libsass. One of this or `file` options are required, for both render and renderSync. It is recommended that you use the `includePaths` option in conjunction with this, as otherwise libsass may have trouble finding files imported via the `@import` directive. - -#### success -`success` is a `Function` to be called upon successful rendering of the scss to css. This option is required but only for the render function. If provided to renderSync it will be ignored. - -#### error -`error` is a `Function` to be called upon occurance of an error when rendering the scss to css. This option is optional, and only applies to the render function. If provided to renderSync it will be ignored. - -#### includePaths -`includePaths` is an `Array` of path `String`s to look for any `@import`ed files. It is recommended that you use this option if you are using the `data` option and have **any** `@import` directives, as otherwise libsass may not find your depended-on files. - -#### outputStyle -`outputStyle` is a `String` to determine how the final CSS should be rendered. Its value should be one of `'nested', 'expanded', 'compact', 'compressed'`. -[Important: currently the argument `outputStyle` has some problem which may cause the output css becomes nothing because of the libsass, so you should not use it now!] - -#### sourceComments -`sourceComments` is a `String` to determine what debug information is included in the output file. Its value should be one of `'none', 'normal', 'map'`. The default is `'none'`. -The `map` option will create the source map file in your CSS destination. -[Important: `souceComments` is only supported when using the `file` option, and does nothing when using `data` flag.] - -#### sourceMap -If your `sourceComments` option is set to `map`, `sourceMap` allows setting a new path context for the referenced Sass files. -The source map describes a path from your CSS file location, into the the folder where the Sass files are located. In most occasions this will work out-of-the-box but, in some cases, you may need to set a different output. - -### Examples - -```javascript -var sass = require('node-sass'); -sass.render({ - data: 'body{background:blue; a{color:black;}}', - success: function(css){ - console.log(css) - }, - error: function(error) { - console.log(error); - }, - includePaths: [ 'lib/', 'mod/' ], - outputStyle: 'compressed' -}); -// OR -console.log(sass.renderSync({ - data: 'body{background:blue; a{color:black;}}'), - outputStyle: 'compressed' -}); -``` - -### Edge-case behaviours - -* In the case that both `file` and `data` options are set, node-sass will only attempt to honour the `file` directive. - -## Connect/Express middleware - -Recompile `.scss` files automatically for connect and express based http servers - -```javascript -var server = connect.createServer( - sass.middleware({ - src: __dirname - , dest: __dirname + '/public' - , debug: true - , outputStyle: 'compressed' - , prefix: '/prefix' - }), - connect.static('/prefix', __dirname + '/public') -); -``` - -Heavily inspired by <https://github.com/LearnBoost/stylus> - -## DocPad Plugin - -[@jking90](https://github.com/jking90) wrote a [DocPad](http://docpad.org/) plugin that compiles `.scss` files using node-sass: <https://github.com/jking90/docpad-plugin-nodesass> - -## Grunt extension - -[@sindresorhus](https://github.com/sindresorhus/) has created a set of grunt tasks based on node-sass: <https://github.com/sindresorhus/grunt-sass> - -## Gulp extension - -[@dlmanning](https://github.com/dlmanning/) has created a gulp sass plugin based on node-sass: <https://github.com/dlmanning/gulp-sass> - -## Harp - -[@sintaxi](https://github.com/sintaxi)’s Harp web server implicitly compiles `.scss` files using node-sass: <https://github.com/sintaxi/harp> - -## Example App - -There is also an example connect app here: <https://github.com/andrew/node-sass-example> - -## Rebuilding binaries - -Node-sass includes pre-compiled binaries for popular platforms, to add a binary for your platform follow these steps: - -Check out the project: - - git clone https://github.com/andrew/node-sass.git - cd node-sass - git submodule init - git submodule update - npm install - npm install -g node-gyp - node-gyp rebuild - -Replace the prebuild binary with your newly generated one - - cp build/Release/binding.node precompiled/*your-platform*/binding.node - -## Command Line Interface - -The interface for command-line usage is fairly simplistic at this stage, as seen in the following usage section. - -Output will be saved with the same name as input SASS file into the current working directory if it's omitted. - -### Usage - `node-sass [options] <input.scss> [<output.css>]` - - **Options:** - - --output-style CSS output style (nested|expanded|compact|compressed) [default: "nested"] - --source-comments Include debug info in output (none|normal|map) [default: "none"] - --include-path Path to look for @import-ed files [default: cwd] - --help, -h Print usage info - -## Post-install Build - -Install runs a series of Mocha tests to see if your machine can use the pre-built `libsass` which will save some time during install. If any tests fail it will build from source. - -If you know the pre-built version will work and do not want to wait for the tests to run you can skip the tests by setting the environment variable `SKIP_NODE_SASS_TESTS` to true. - - SKIP_NODE_SASS_TESTS=true npm install - -## Contributors -Special thanks to the following people for submitting patches: - -Dean Mao -Brett Wilkins -litek -gonghao -Dylan Greene - -### Note on Patches/Pull Requests - - * Fork the project. - * Make your feature addition or bug fix. - * Add documentation if necessary. - * Add tests for it. This is important so I don't break it in a future version unintentionally. - * Send a pull request. Bonus points for topic branches. - -## Copyright - -Copyright (c) 2013 Andrew Nesbitt. See [LICENSE](https://github.com/andrew/node-sass/blob/master/LICENSE) for details. diff --git a/node_modules/gulp-sass/node_modules/node-sass/bin/darwin-x64-v8-3.14/binding.node b/node_modules/gulp-sass/node_modules/node-sass/bin/darwin-x64-v8-3.14/binding.node deleted file mode 100755 index 45ebd5ecb24aef8dedd55202bfff13af89e3b6b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1304540 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 <eM3cX_0#an+dnp<YXC818fzL2qb_ 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/bin/darwin-x64-v8-3.22/binding.node b/node_modules/gulp-sass/node_modules/node-sass/bin/darwin-x64-v8-3.22/binding.node deleted file mode 100755 index 719684a89cfc51fdbd4377a5cfba1c5dccc1a967..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1309548 zcmeFad3Y36)<5160>Q1LBN`PYDx*PAgBnc)BoPAD+EHB4xFEQoID;CYqd^3MNo$I- z1a+9<bsN-Cah>QGjc6p1C2__j?io=MN0i$(DsB)($?x+yx2n4;-8k=j-+7+jKk_`J ztL{1XoO91T_uO;WdgI40w)YPNGWrApfh_#r75_W>1p?9P3_Jw_`{IAwPJzIbDQA_I zpCw7X{tQU_4w`{X{3lKRn=&Obttz6Q^}C;5{$3jP;F(~Ke|+z&ll0%dfokvTlqs_! zl^4%SB=wf>y~{P7+}$(^-*t)fdzM2_V^KcRn=*acjEZS9fzq2^cSK{(bcEtN)RO#{ zBH!hgTry=^)g{v^B2yw4UEG`AjM<vr)Qy@1-+lCwl;vs4luKqsW?pgC<xYBUdaq8U z#sh(_Lo|Z>uHOPFv_bFct7auDq&L0#T21f0L7D>Jef8lIc7CT!sl4jCE3Ue9$`w~# zb~Vy^)4S<DO)rqEGbG-f{JnpsOqn))%4IVzx^kL^^rlzWqUlwgsB4w)wBa57qa9a? z9gizHtHg`t*l&fK=6@#_(siUqxh}stsWp}}J-wxg${gU6i?yDgfHD77Gp5X%edWbh z&zMpXnVCXw=}uanY)3r4d&^0BH9mSXF8U>U%N=^vduW1u_tIlIqdt09Ud>9qA~NN& z%BwC(kuPsAEnmGOAK$(79Bn#KmbbUv`SsW3&|7}6&cgR!w!2F&id>W+pCaGl<Fy1` zhie?Z|1!OcXC=K#YW-GRtmzF)vh<Z#TVoPPyEE{A%9L>E)Kf~wh0bzd6^>>W@2nG? z_ZgOcXFYgnK^@ik!~|X=0FBoS2rLGYF?&E@c~eGU^KrWba)R);<97*^kIj(wo&)sd zx9=MGXm}tHo)rw_*7XhSg0zXGgMYUjqW`aelRgDFx9jAzf2*bj0}W{uw?DASCv(ZM zeaAJPaPq>_|DJj6z@_I6L7LcXf0Spy&eE?GI=I@rM&Yf0;Hb)3Gmn~a#l`$TD{|>2 z!-gGs+>w{g#v8!+$NtEhFC*g#NRi>ocjoL_k!e>Rd6GBZp~y%6Q_Woi22?%Nd8a;p z{r9T|e$~LQ8u(QMziQxD4g9KsUp4Tn27cARuNwGO1OHwFlMM4y!|HEXg+{a|(r<EX zW3XSqu&T10*O~kE3rt=`tdes|&Mui$a@Ltf&8F$5eM3)APsn^HWNrzWKbO?Z%?`}# z7qTj|;=6{dQc$SKGHTWq8}{5bbra?QORUoDvgn3Lu%<g>UT(-L1GuF-esE3qPQhD` z!2md9%|%k{=Gf8lQU($s;uITZSu?Qa?F_m|Xx{8{DCQf$rHxjU($qFb`j?rJAzAUh zW#+L%%FIiLWUu6Wr8;B^%4DuG?8;`t>{J&+o{)LLkO~dWOh6k69p^x+Sg5{aD}r^o zY@wQ()?)R;8T|rgX)Td56G$DsklqobY9jR^QYG@PRW4FOMa$JCKs2n$%PD|JYgc8c z%PypxtzomrFxRU9#kA)xSEGR&vrsOrXh)talJW>E5jw%jK^m8oCnF(GcZxhq)!V0w zJWDCh9T3ByJnv2R%2Of9bC;?ofE%`^wS~=%>T)KUtwv94qE5=xy~s!Po1J0vGgT<1 zI&egfx=HAb&$pmPb9}B<T8$sn+q^tlMYIk@q~`j~8{=rMJzk<t_YsQ=2@)&P#6X3_ zvNf^2KrAPIQZI|FQ{PRL;?=Qu&yXOCxAg)RZ+s5rhrSm}`rJD88j)$otNBo~diwb# z7nDpcxv*r)<W+IxSSwVJIer9RSVeaNGd@_qEmgPhZ4docr{?jkkA7=Y6?hAqTh)um z55_8txs60?Lt9(0sTyi9%xz)oxAmWAq0ajbfys9mR>6Xk2T-m?wc#`ouv(Rom^Ctl z_8e`F^fPQDFP;^$PJ`986pph-lt#BiLI4G8SCObyp09RC7G2;GZ#|Dj)T61HEhCzZ z=qth6xFC)&tkHXdoti~fW=rfPB!{dC@Dk0DLu;yr>{OWxa@lI7z^Ol%+!Caqu<<N) zxqi~p1#3UhB4jBmCC^2Y;)<{n9D-p{ghe5Uu=!Li!n>{rR(Y|SkV4}C4~<Bk&VL&7 z*X#UJzDQ65jw9et0*Fq962_rMzD$F+JMpg8c+-IwvgTJA_7Y}!iL+oT16*SZlaghr zCj{H8ks2>yN3sUYX{o)v07tUB3HZ5;MUGa0&4}hQRAMk>9S42PC$LKctF$;35QlhL zoSCF(&#hLc;{pD0fV>pqMb|=QU#Udx{4>>8=h7H^R3p5mVD6;zH>#V#L`-jFX-DPJ z#)8$=C?nf}v;y(1;PN)G;(hd6qdHRr>r@|us`?IpXx}q1!R^{Ndy>46xgECLFhOj& zP30hys_IXhX;p(Lhq)?jjzkj)1JV3o#4GCRA7G`oka*3iY{MQ{gm=T<ZS7C^(M`7! zz-V*jUMNGGdNoYU)p_STvf88nQraKIE6_i?J&v~(Q4~j=C^Dj(K(0SB7res|NA72^ z_~n(`&~pDgUgTb`rUG9z_hTl=yHy$hWL?!wp*q!VS%6q0*{No#x^ld<%B;F!&B@V; zvm|jW=UxLfbMgX_P}rK4udWg~&<AXB8`L<Y(0hRDU&+rZsM12TsdcAlXVQsZDMdRT z;^DA0Crka-CA8fov<<-05j||edm2_g?CB^FQj3uc<&*wtpdYgOl|kzLLsrl*jU13& zu4a>d&1%C{sbyrx|D~(FO<h2qyRfdSF|(^vm#gv20+R2X!{1hQDPUfGI(G0xsbdG( zz*oDIKalr=(THB>WF-vYd3c3@x@0SCp<2WdTQ~ymu!R*rCT!sf028**e6k4cv4s_5 z#TJ&z&u+``v*IxlK3e3|wy==7AbXA@`*KvBS9Zr1z8>e;!dbvqXJj%{!WOi+&ur1= zFlY||U2~XyHeM3ukf+VzQb`<}r_G^In?tdhBBFTBp#Uk4IegofR12=qa=`LK+8o;P zE9TIG2ge-tb_pfSVH1FUbI1iDwE)SEIotvI>CEAGq`xC`C?iiXhil*=U2`~|S)kH2 zlla@JCIRNElp&_>_Rz-El@5QqiCz{?Kz(npIHRB425*Q~fmXJSDWLKNenaMJwCyiT z`qPuSrk*YAP#GK9v*+SXx6!cqFJ$i$f<j;2i)ZzN&}oIvs>!fc;G=&|GF-?MFuXw! z$*|VX@XvzaGW;vvybP}<lx{g656Z$HYS^B;jNJAX;OI`cGpBfim;!FQ3nIB4<mWa* z5L|90c=K}0AQZ&a%M-xu03kwd&E&QmX;9`7KPR|7$rNx~hF`7Bmx_JLTqOuDx3}@; z<#q?5Ag<2hL%NPaE4l#Scrh8B3meyVQLP3u^>C(+O{6YU1DLuOQ;$fbHmh&PQ_xPe z00BE;TmhvGp*T0~Js>bSb}_OsK@|W)^}`?6#GIbzy%KurZD=zEC63=&N}^Vu5$os{ z4_;{OQvGqT`iGs+mxzbl4S4D*VZ2IuI`tY~?1HDpz>k=%E9jMU9Cf!A&oI}jSvrGS zB)_f7*1xdDapsR<^J}$?3G8+T^TE?uanOR~EXmNR{>Whhih3xTLa(xHMPmuIa`~7( zU|O+Lp0-ljGyXus>L6iLkeMRuW*~&DeV|Q<ix%;^yq_4hMh_w(`2Sti-Ar>BMAt=j zcZMYvlTE~$5c48Dr;+|-Bx@IN)pq(njs(;{Flt!5cri<H=0tTfbDEh?j-l8G{FOhz z*+)hpqbGiph17uueZ<V`!657W$+15H#>^|J@t3OcXL9U5C#~e{GpP;hM5n*)$wcYq z$&fZvy(VuLRv0M6z=RWiX&eRURGSbFhpY>${Lp0%^mQGrqu-kx8xLlQ@V`L=)c5#B zsgnOFqIyKKXLg+kt4xfgX@i9rJ~Ot5^60I$sNisjVf8Vr;zBke6gO=C*wYTL>m)TA z_9WnL>1h|ZUD>DxBj$uotx~|MlreI2_J>)4%EOV+>?HK8L&DKgMP0-C1zO^R>pGyu zLZ|;0d)*vtF}kC#%x}XexkK#>n(-zd0K@<Y5YT`+j1OZ)CVAWi9+7=~IS_4DcB$8O z4B4ipfi+e9CP>hTFM@}Y`ZvsO%s6lYqVhWwGe4;#cfO%q>j}|Pp>$C_!P>Pn^qM*O zfnaSt9#<CQk2*m}m$D2{(pFVS#oM#8!q!}*VW_l-!dPQ-F@&neZ?<8bg7ID%#@(gM z!qz4E<E-BgCl_c~U57?ySY^u$YtnMVs;oCKw~%d^XAQ|R%w30oMI-8LocVd!{5WJb zt3Ah(bfOZh51@}BK7H(sJk9DQ1gG&`$Y5_Ufa4FN_%*A`J)=sGdfhr5MRKX?ZC6)= z9EvKw{3Jg1s5}-Dik^;N+MidyTDK#b^>6k3p@9f2WkR80omOlNZ82JY=riIiqv-Fm z;P6JZ8$B-z%9ofTn%pzh@Z~!S`SR%|v#YB>W@p2KVp=EnTx1y5e3?$#O)_J0DUn&~ z`~Q_I$}xFWvT4avqI|m>)&PU<eC_0(kCRA*pE;3E-p-u(CH#ol$FS$*tJ@h4TbY@# zTFfG$TKix$0r@)}_c9Z3Z{EE;dC%5)UqO|)d2K}4W0;&E@BrSDVkGSxa+*^)qD?QW z)YZSiVR<%7zqPYrzGs*(_uQr_vQfh~x;jeAZ)HBy;R-tzk^UU1o=ml!k+YTA^G_Gp zOA9jq_Y?w;F3n#27fXqH@n=pKADwJwenJK~xH*`VSk<l_^mST{svU{(DS}nM7+RlJ zW@#czf6U5dO^&Sqs+Z@G1On?lOWi4PuUpI8QwTF}q7Ig(){~d^^!Hu0d3E|IIaryG zc?#>ZtejpF9-NlSrJBk#4;6~PPRGrTk&a0b-*0Ej(#u~x55vp8YbWGoRL?`h#naG? zgwgb>v)cFEGWM#oRg}caT%C}<m+6cE+*kW2?1<8AP3d|MB^GtF1hsBWo#m1<%&(21 zKfq6AVt#7gv4%Y%J8bO~E-Ky}nTfyMk;-sUAaX4pvm)1`dFH|{a*du>fIa`8c;C#h zty`#ww=-&f$cXHPzkMoyV^}*IMOl#}ftD3VBiuQ@Cjb)s31A=r@Nq^_FmfOoaC~19 zL_$29))(Iyf3xF#@fV$n_EoeOSGRoj&Y~BVnQKGl8ztsDXv|^zN(AIzsV@+;q8rII z%yH;#Fl&x32-L#tbvX5hIn*y@(6fA$Ai910{_miVpA0Xz0<(m0XXDIEhKJ2L`C)Tb zAqVjNORDGR1uA#t^wBOQjtPv-%Wz>sJuoqfu|qRpW{43IlbycKYzg~V^)({O_(Fdq zaNFBE=&DvbQEa;tmy0fBJt4oue7(ecU(_%S-Reg58F57orR~AI((K?+L^D?Aq<53% z2qWQq@{1a?-7wLuGaj+Z+6<H3I=lBof4uE2=w~qW^Y@KfKXr5R#?{RliZbRWCbE1b zd>bX~P(hXu1ib;)UqLHPXWXIwC1Gr*`VyJ6!*cwEeL(zJ9n+2#aYx?(5{PNb-txw@ ztC&r!<ZMQV+2-4vWwHxq9m7eANlL8-{ph-?z8UM{{kE>NFW5iB?5OD)Y#X^P+cKl; zf~U5bZHBem8#@mO1YbHfgCP*(^XR(y?}yQ4)U3{C=!*Dz72|OX;kGK%5qYG`JGuq* zw}Ae7J91oxx!H{vqFaKYwZ<iFjbjjL)%-BV2%g#kUY7{3zHlIZ^Ioti3p?||rk(R0 zhwafS{1~QPC_hW`<)@)oewr%y(;BVA=m4}a84|5dK2{|kE0T}X-A6mhN6d~A4?oOl zSmV*jor>uCwb0Ntp_ZTfltsS?)-C|;5$nQsLpgB5_Ox~=!HS9uh&sd8sE&|*T^^M( zUE;>3sl-E|c7729E5t}q<}`Ga{b)N3YG<QoRk$cVYrlAd&vq0o^BqKl@%4sfYZfJt zDOBhLSx`keOKn9(71qRJW7xz(qvc0<rzM8g$5i}?KB8|0YX@O7C?YevgoVuZWVI`@ z4YMJSDK?hG%xJC#io$iuM5Ki6C+cN}^nIw;r5t+=1IAEIYhG=0*nTh@6CA;)#c3M5 zX(^ByR8E$#wn<ZKV5+)tB-$n$M3k?NI_`QSD-ev{iD^<}<UM2<tj%HfV>ji2>`R>2 zR0X7EHx(iQRvj3D$u{neRU>tJF4D>JbHuTR)xcN7I$Jq8)Ief^EkZ22;PrfD=B8A& zU9h7SQfjCe84&v_ohmeRef{`41uUX~c2kas&`^vY6)(Y%&%PGUWTUzo*+SNM?S1i( z9kNdKcwe27b=!U$=vYyz%u&FdLjMQOd0J6TUq)j$N_vLoOI@gA!KBQ(7P9J!ERy;N zM&p=Qglt*Bp&CAcT!!Upo~i2O<7tS@$k!P53G2xQXYdwWv@2&y?aFplj?A&`VCpr? z;G(`RypZrMDe#M3cn;xb;mx0a=q?WZ?qb0A$D1EM-Ob-Y_<1S$|I97Ul&_KS+wkVk zzg1Qq0AEUYOx~K>9aDS@X-S1JRc$TQHep5i>eNK`Ypm&`s7=QdqX)yNF|5yrdYc_; zwLWT0Rq+B+%Yl0N>QH<6RZy!f0s+6Mhe<nWXop9LT>xGr&!z+xn=$>&8a&9yf~l%5 z!Gf<2iz&k5y_DKqEe)u$J@!)y_ao78M3GmIfueHp=9lhXfj0yhFT*eNK6m?U&P zobVG;Y+;cL-<9wMDe#+J_@)y9pPd4~#I=Q23CBclFA*Pg;g1u3cMAM|7k&%je@KB> zxVAKd@QYJy={Xl3Cj5~U_+MT4aKi7Cx2877Ixa(6($<)&UOR?Kg^2F*;TiHrY~k1! z!;a>B&hh<LpiyEvwQByIW|+r1w3?>VJ@sH=T-ti<1T6D{2)dLU*h|1^@n4VjGG(eN zCs{E`zB-hT63So0`(awEFl3!wY}nUj8Ab0!b~T26qgF%qkacab%eH21cgVc9IDVtw zM9vZeWc`C}Y&_ol@Rd>&z;`A5DZKgN4Q~ETh(u!#r{w?Mg}+Mp#uWG$F8p!AJ5%6m zrLS#h#*Z?I(tszw2tNx7M7)CVulQzaRTtUp<AOI1mL}AsAieH`o&qKsxVO8oo4Ns3 z4TQM;%Snf$f8o&rb+06MqC;Ybt-f_SKk0>rCa|g;EW6-fromVP>e56`cIfJP=Cqr- zM6C@0%($xxNxG+lNg#+mkBFZ$)v~2aw@T2v%Sa$YHpC<b0uCW8XOvpBu&5BxU0tw^ zmiMn8K-G$Be$o|fZDsoBOt(cP>Jed;h=IVBYC|a0R<e+jLUul0C2X;l(1gR*v2SAV zPz*9_u+&!D9E`q;9<R*4tPmu-QHSgthia;P#jXH!;KF^jaKDAz5vta{D%IbloIKy3 zAlhNbW!Mc&RqKz^6=FsC>QFgGsN5uF(4k+^s$jIguI4Hv>uUZx$@Q-0I)K&dgt*oG zcpfTCVw2}I{|cb62$xCz2EMu>#S(`klXQt5UQ2yGqzf`#(i;}zM=eFb$dJOY@0rSE z1SA8I`xhe%$&c#1)|Bd$e40(Mu$e+OR#dYQh2}~6<(fT<u08-?)I&L*S%~}etD{q< zs>MfAFM);S63tRJ&Evy0EXrwEuC7Jha6=YN1XZlnIY(3KmgUugMTbFa@L*US)ahMF zC&PTcS`B=4A~)uc_&K5S3z!);6Hwy>+t(DKs3V!m<*<U|iJ42x{WPY~)$$G(c`YeG zQ-_Gv5P<aR07L|i>f4zNigz;Umx4OU57lqGSyV6iG@CW6sg`kMgBB)iMD<TddRVik zn$#3VB6d?7o~emL`I-pcn5s_6XTcaY^VQM&r9x;c*M;4%`4FxAa-?bHZ%5Pz($k4# z7rgRYXa${lK=oz0bi^?cFh(4IC92iHSEmA)OMSp(*XA=01%X3IV3lC^u7D?Ws?g9{ zSh<Q?n8&>gc9S7uG*pmo{c#Cp7c&{kJ_5OaQQ49o%D(j`QMTmMY|4er@nmB~H5*ZO zv80dD?5P&@4f*PDt`P53cmtA>3TLVsG@PYoILB8<;orWDveec?$Il}+>PbY-_lnjl zm#YIoD8~8BGW&7{bB%D$WN?;`0aMj%HYTZ2zB&wUCxhr3`b{_bd<V*2Sx$}r4~dx3 zE_ykusgOu^1K*U*)e-9+K4TP$!N^zYUx*d4KPOi@06btYa++r_;!Fj}&Vmx2Aq=R` zSYj(G13j(Nz9LQY_hi(x+$oC5AT(i|OjVl?N0R7@uTD`~TQJXYj#p3fLv+rNG4_xq zxy&JXoR1_^)jcGM_{NIz)gc)H$zXIMGQ&s^I7PEj37DBh_tC&dbuNogvkGGzOgJLH zq{6VU;FXM`MmDiWMfb!mIe24#nugQk*OciIm~>pWf!@=eNL-n@a|YXbGD44yg^+zu z9xNob3Oe+bHn?aXZ58b*>sVOD0KEC(JS%E&Jfje&#lA@i)Bot^ZzH@eCI4qGd^zDA zDe(0!ypHhp6nMVyZz!hbrV(W@6U<I5C9V!q{i$91khYK=8Iot14eZci6}fCH*CKP$ zBqZrBTBKMvU!D4U276|M(f4V;Bk!T^g3-rO>XPakh7<xY1`?K8Hw?+gv|=ziP=-iN zOM#|6*|FpTI~2wRcOL{t^c&jk2|9f-(=CxpeR?znYS2kC3BX(`o0zUAyP5>{A%PzR zySFF%M5hW3-5kDuiQ?;7oTfSvqoJO3KN~^G?x|*yL}K|&ohk&h0sTTGCWPS9URWS5 zO^9fIQQ?<Gby-o(Ph8rSlAg_UOtp~JV6ci^1odf0Q9;foRx({Lfyvh29fr|ARx(+C z3@vh4EpWLjAbUweM#vgBB-im3h!{gwcu3M)=+%1chXIFx<1HHVq|DhMQ=0#UF7|ZF zas`#)_y-j0okQK}FQPhz@K_Ty`6XL6raO}9cQCznX-Z3iw`WUfj-7?T7rPI`Rz)6o z<bYq;x;)#krsQBFIcmHLDcI<zHXw&cy|$$1JuH)!nbWdE=46hSvdGS{lP316313Et z8j_G#5Oqy#dy(?KB%VlGJ2m$f=1ZKI*XU`1t6=nt@|5$Zs3mwKM?K)giAV5dAf;yf z7I_w|=Io|tZaj8A#*f^G<(nhCiA-y;sjQdVz|0qv(Xg2Go<x)z%T46YO%C%6$z9z` zmGfsJXAT;C{8I4Ke@1A|p4q5fkvFoR*ICWq75Q@MC`K`^_RUePe<3Y)9<g^Pww}dP z*HhLA1~-}?C!rj3xEmCLwdVrl<r!RrseYC;pOjXkyNsa&baFQ*dxZ-n_x>rl2k6`# z)YDDO-HllW&D%45k}J7CN|}K8hfGj3OeAlExmP4|w<UT1YXv3$b4qSo=WZkKotgUv zB*Y>K5}xt+pM}H)DI`wTBn%4BdIU&t_OW-RdB$z$fKHl9TTT&fMt)RUS5oky>9OmH zeJ-(`G2R+-UWr~&D^7+qx=n0+o<&b<VC9fG)xbQ1lE;uYjjY_Hr`G8(#4}Wxn;x5c zsMQn1wwq)CvoB@+O+r=<SsVi!DYAB>d-EIEXSxThAf-z{DfTWBbV)tKg`XQC?e*TA z^Jl;;t60hlStIi2NS)6c|1)3ewu@@jE#aDXNN{I*RGc3msvb<KB1(8nLPAfBeLk~a z=acXX_{+tq;&~$GL(}tIs?OEo8A-pq?YXoiS*DKE;+4~L-ihbfAJA)SMR>yI7m+<! zJ3A%7xm>#V%6hdC(O&Faoi*<GBTpQ91KFqgqs=td$0bnI(J;E3j|W3vaLyM|nEnZ2 zJaOq!BFrXqWnO&+7kz*f)M_`0o<n(FL4q!dCj|ZaSr+BVl-zgg+*!1weVN-rLaZi1 z!V^Y3DJ0T1oJKHDZ8)BgU?%dW(Zn(eeg9At-4`f~OOL&j*b!no;X@amV=d?^q`0EX z_?38etHSNM+0l<2{bfU1V`x+dX#qU_`Kt7&?P?36htk?FoB$<aaQJ!Xfs7P-)I%T> zKhDG6(-F@k!Bk5qq}uP7h@>fxws>47XvoIl!uPmO3SFzOAKq{Pd2LlUf>&~Lh<_1M z&KG=-MN~{sWrgfhv&+nl@&1N=3L=S4!`hd-{IDx)PA(SJ)%ysq0LqCrS8a%|D=XR< z$;L<wps&=607aW;7h%zmtJB0TrKqi?%}_bTK<TlWScM=I_wpv!ook-KGU47Frt5uP z*n6ISLH$Ft_I9-loZ@dv*qvCqE(VD-PN+@IqQqz^^C3%ca5Y77HR034M7@0uBd)A6 z>#FSJnrNgj)bm;x3+bgJHpKgfdR7zVWUFr%LeF*vUlgeol`5mL%62g8$u2AUv=TcO z^k$!AVG<nA!sg5G!km!CZiq7Ml7PbJXoU~<C>(Qah|>T{D12*VPp$Bc>J)&Y&1Jz5 z6uUXGJn!sH!S+tBj&p6?tW?<MiKzg@!;`S^w_g1TQG{XRXkF2I9BUZ*EvJ$YP1ZwI zf>yH%li@&j*TNlzC8T#wI3gHDX)D`9=1+{PvqB>gQb)$=;}W|XmeFmPI9hcB1Mvx2 zAxzQY;hb)q;cGXBeqbPTO;@)uw6zS|h9T7mun(KZ#2Up~R)vQ3#a0g4e<C}Eu{k9e zeGD+;B{T#68;m`8MsVymkfDtWlZ7Z&$XpY$jzz}G=CB3PhHimvhRtu(+t3yi9ct<6 z6RP>FyDZ~N9R9L!#;o5d_6<Kn%nKkLa)>%UQ1?>rE%81l+v7%NgzO8}pn9>_RL-Vs zLUdbZ4j;nvk;qeu!N#~X;LIuLn$<ZT<26=jNh#`^Sa@jZ-U(aLVkaOKJFp+!vwuL{ z3}U_YOY6X%wQoZv<~eYHtf(V$Uf8|_%?wrjnL1+#E57OqX=Pi~Sa}VaH$gX{qA9sJ zz6N_g1az@Ao#P<pQwIpv?6a{SG$#-_6ov~@v0CP-!KRnU=#VufS2y!5YV#q|mWKjs z#FqHUpqdjokyKkiMX26Ds#{d6AXe=s<hH2k`$B6Rd3Gf1F;sKI5HQ@AEd?8s%@44b z+Xco>2EOosUx<I^voEyAS3~Bz;+N)S{Vl_YZmHb6tmv!A9wECDykY;~ZLY#bT}LgS z=7?;;XSbnbVeUEoK^;YTd&a}BbfIdpJXNFjknp@NwJkftty8mMWZ2qd{sS9g!J|iQ zJeV!z6da*C6HU+v8gFv{Q}mU}b<yUK`Qhw+;(bH*g|Pe!bGX~7Q!Rr~Nd;|J4}n1b zTkwkmAtjc>SpFZ>8Cuk*vHPUURmLiJR|_1`%6!y|S`1p$rug11YAZ<5_h8cwW+tFv z*`?B|<_KD+nuK3<lg^`NI*E1i+p2Qfle^)0ctjglQD-ENo13PEhi-%Pm=QUdOw83~ zFq<5sW?M$(z><aiOX~W?_YYeI>z>5n%9^z~aTo@@Ih{r&7?iZa^dT{F4jO_TNRI(; zVW6aL+@Kt<Yl6xDkPVZ+6+E=byEV?;ny~imbbUh&YZkI?Rh?)hIF<$7&&gH&kcaxM zz%L{Yo7*bi*EK4q>wLTDHh?|mva+ElOp&?!IFBO*EA#kz7uahv-d_&#N@Z}rHTRg( z8>QKYO8F^$nti4^hi9KB@mzYpu>aORU{lc9{{&HR)a-^Q^!}$O;4Kn+`d3j*Qk)#4 z#$65SUEm8gEtgv0hIylPtkem9u|)ud(8s4x$HjZokorMAIRMhs0My5*@S7{|Hurza zIZvp+5G#fp>|o6xPwj`?K$|LPtz*lb---ISW-)*9&uFcw(@%V?PCSmS;v)!D$ge%N z!Y~DlA7(J@u`q@x2c%{8Rp>D0)-ja$kpZtgcQJa~I(5T_47|Lsl;~y?hmJ^Itj<=M zP+KW*Wd7)g#}UIu4`=XgmDV|lIg(hwMEix!ngC}8QM7Ee1WZa6jxVmO=>`N(C3Q7F z@W~oK&aC+fPhtCo0E1ooT7&N4QcBfYlaD0+!y}inoyXkdBX{{YsoCzMUBgF|nt1q; zMex>|sV=;=rabvLG5KgDAB){byM~V-LOlF1XV`wAns0W^bV-addPD=*`!Q(%m?N57 z4S}lwbVRF2J~E4>qHgf0_UDALU0E%DS7M#gYDc4MAElc601NBsm`uY793ta)F=r<5 zJ5gqGnmCYTRURezqkJ`Ls#G9yDFSqka-G4Z+MNh?6NjrfsVfkK2Pbg12G;f@RVp|v zoYz23qzg951#7dUb_HdqpuDV6grl~NJ&;~G6H`=dFP>h(KUP|eX*iU+ULA>$HTEpt z{P5>p`0j*1mI9As1S0vr90d4Bc=P6;4-JC$TZGL-sl2e@qM=ewz@H|3{}lLe4PUNq zC;ULXN%+s>v%%W)p#fD&p-#sW0I?&SUtW^PF~=~$PPCPbN79DR&FWZC_cWh>F6X%L z1yr_Q+DDLr(zL0*l;$oP1DO8K`8`|zf{tr6w+S7#C_kOgSyKq8V;|yyB>w6AKBRyB z25^c{!P35u%KW*Y(5S9QG#H<Wsd%U&45<(qItIqk%A*W{aSjv|3~S)d_+jd)qDw7p zd>8O%;t`?(ZD87Z-hMc(ww9@WLRFi#MqQpBb*WmnA48vw>Iliw#Kx(<-h)E@jV&DB zsSrOZpp$ZRQWlfm&6c1^eG3X0S<1S`Mn2mwbg{6cY*;VU<5|b6qcjWpNp-8xn^gs` zK3&ZQB~YNRRg?5{IiIf(B<=m(bMIS86^;3kAh~Z<N0BH_D6MRDPAGAwG7qKZNbAR4 z3<X1ARMO9scA+_UVIuS;-b1R6V^(`f2WLhx#5C8cY!SIn*s4-BRo#Iq3~4*n-xy3< zeNL*rp|Izu$Zkk_=_r=(Bczk;$kMLLp&Vl^SWTYJK`m68)Ep_iDdFW-RRi+skND&7 zEo(O6RPxraeH|9oo}-&%xe8D|F3i-9m4t2B3g5G8VIN!!(09}cmEU3zSlb*5j{8vd zXFLyiuqnMhp6fSb>6zFZzDJ-ZcO5YB8;Wy`7>i)Ha@lfqh?K6h9>XNXsIx!{o=t;W zflO#C0;;|tgM~-3E_@eY5R-n?+MPz-8S265sNP~aGLne4!`uhyrO!s~Qt;@Ne872E zj0l%PBDF}fT;@tMN~GC?C~BAorp4Kv=~|wN1lpC$sJb6_6S+ZDeD4!~fsYL$NW&TU z^uzg2q@ljK4;pGm{0KducLly0xg#O3TIY|XXHfSOJs-&K={lF+Xy!<rhiq0A$U$?s z0kVn($k;fS@uoewgOE{h-64A(;+*yBSY3(^rxY6>Kq<yySX^vaW4lEyDATHLX4`{= zxdv;fh2t`MMjeI0xizmCWBP8boui3RvpQE|bzfPYL|MAjdx)jt59ors46g;lG{sQr z5e8o1+5n<@tdO{EXu+m7wsx!FDINpGF7(>*@bid`=vEB-X1WptRr&gjUIcG>cnjMF z_YT9!W&5}D<pAkD>|Vpx5ntb*6^KvuN*r8N%4{_1TnG|79&dj5aV|VScwP$J**(y% zx&{KiSg^GPs%+%YYkGG}A!+-L?C1gixC?CFnhVQd{8#Y!&a%_LPJIA6!E>5}L$z;i zEv<$U0^gJbv-^D$+(SZ0zKq|@H+nyL>*gDsCUgmEBm0n=Tu-7*5OhNc%a(A#npDl> zj2KHer%O1FMX>ozFk6!hX4@o&_a*eB_&s1R>~7=G=uyb+>9E2@Uj?I&FeGqdR7v1m zC<@EU0NrKkF&5S=q^PHEb_G5+vu$Yqz&F8jchkSaTY~4j@=fsYwr_&v_|Mm7yfy>B z9AzKgY(_62L90nuc>~|nfwXMy8UmY}_M&X1(so3SiI9V1JI<bjFjS@$MbD>j3s%#( zJZ%{E8v6^9*apw%AB>o}Wrw!ow3?@ur8VMawc$6y7xgGU!c33Xs9qF2u>tz0ud}F? z9(4`G=HVo;)3RftwlqDB<*JG_&|qqj$?y3WY|<@aNq{1oG8>N8!b-q-?(hDLe#@SK zST-uPV`B7RjmP1G@#rXS)uRrZ8$9qPA+~9AOUj5>Fuw!YqMWcd?3)6#a5LH=Z{s<r zY1farc;u3qVUMrCW3zsoj>lZl;7!wY&K!!P7ho`{T0NpUb}3dxfR;rxE85MBRz;za z@j8}evxyBa+`cDDZQoNt99X!e_cyOVs-7>RWq$cS22f7SjEV>sVI#t>^cYqmc0pR$ z{KVOxfHi0#w_fdyihx;(pm3JY_s8o<DMBz>B~4m~^5%L>kEn4Xixb>q;PxQ)YA_B< z+KRCL0vSt3Y>@*fr{FnkJ~35_*re6ez&BMxUXCOj1zLQ^NeRF>E7rlF#lELl1noqq zM}T@6sUT+%$(ChK=!kCq5gp?Y0F9RO$7*5)aa!vnVI>}fhAKizrC_fJG2OHXON^~k z-ZZfY+i7@}u$(1g0hZW^`YqO9z(`w<Uh-YlkL7Zlv%~CsAuMWU*)FEmTj|{bB`*O) z5@M`?bs=zz=lGIQK5BohgmgOQMiDBn#4<ju1UFq_+EQClPctsOg4(K(9x~SlYcoJT zwjciZo%_G^P^VoT0-~{ZQieMJbm4sn|3@$Q{3x7GyW+ihvFpIePdh^z0B6w&|F&1& z;G&yc_``%(;mx1_dKZ2(;WJX;a-#zIUrsnTDERZ=;pU$}c$9A=r4a{jT*RehOS(!Z zuaO{=Q@-wW!Yg+nI@s66Sg@LI#p5Zxd~mXoGJJxlEsplODs~%iJ>F9qtoDktKs8MW zuv9&S%wWdKavZ1uRP^>K^>r+X)6vgDme`@16|zoGX5CG)egbRqiWyw=Chg0{F26!% zUBx%}_zOLvPD~PMyECn*^=g}hQHkaPKYdSn)JD~=QQcMq)R{yLd&Qc6B1CFd4+1rQ z3`9Xu@{>}WMEpTMe8i{-RVs<^^cU5R$_A#FW3e(sjzryl@jq#c)~<4ihkj)^^uvC| zKNEK*X0EY$XF@J^BIaR(OyqD}l!9|}9E<Iy9!1^+(EPhG^kq5E*0ahedV40$)~%%b zP&vf1SJLIE5Bo63a|WJ~L<3Xtog^toCuK3InMw9a_BrZ<UFDgxTk3WF+{NdY`E0FB z4h#>`Y}lizN?~(dRmh${T}>5g^Czk?`k_#rE#UdNdPMm-C@~O{DRoZ3#%|95Z5-A0 z3wlzjp!;|P9pMr5w;n<F?Jel_8YqIk3IcLBV90W$eVV*&NP8O|G{~M`s2)fnx^f>4 zIt(K=1o*pE{SNOO#QxamnH`taEkxARuK7mTY^soEk5#g!#eA|d-~JOPW{Vjh<Oxhd zL8mXmbptBQ$WQkHj9y0TSKW0;zl4aB=BuW)OGoT6<?BE@7#+{4vt-ADCNV|QPh~oW z?vSO9oNc|W@o1C>!c3Q>Q!0$2wn&ZxLr+1e)$==}F+VArZJc0JXT1;U5S6_Na<Ds8 zJve2BH30C}sS>Gm{*iKF$seQR4Z&JY>4eP(b0yoHTx8`V=Ik*AYrjClb*XKTq$UYg z9C44(JOi31A!<J)fnJs*HDzlE5mZ2s=S+k+0yU#K8cHO!l+<xXP?AK@<3!N=SW+vh zSxEYUlKzNJ*V0IOKS_T|G;@c<Y_{d};hVLJMJY4hLQNr_TF|No_YDN9{+hi;6mrik zp`LCOa-v~W0IN#f%R171c(1BCZ~&@?8+u}2uzJmVs>s(Gi->b9j=M@s$zBUnxjOiC zHfPGzEUJB?hKcNE)Q~rsL@(9=sSPt)r~$dik&nj_ui&_A7akB7Dg0n&BUZuq68#G? z6M<zlaWE}$9fJ`2o(=-JuX?+hCQ&&jBN$Zv&ue1K0@wZ6V}GD72J66*tQ-$~hosBl zK&>3cTvz>!nj9%M9E>g%14_hWKj~1fT}WsnJ?|YFDRvP!QMD-l1R=aL7?zIsLS}I; z6+6{&Bt}D;KpTG4vE+wQriW$`lkBEtNTNhH3D<j;69YAGHxQsIkP4?zPbBPo7hJ&C zt8;YFNB~sa%pc6o34FWS{FB%z(H$k+dIyy=j|H`&!b2<VT1mf2r<0?Df1#w`sui<T z(nS*pFb%$0_C)-s)o-vCn#wf-@zlkdx6UJa+7q<G=C{G<6k(%%34_M<YAbc%gql1% zOJa*bg$k)eq#7Ss(mVM=9l$DKDfFMd9bwV$AW}8c5N=}IL}~PkuqD3KvAZ3{ns2zV z<a5~G5^G6`2U}hEp9tq9yszg+Y=$^%4q?~BEqGzUMH}3_=M(;3ue`xU6;cS~A4&Md zc=P9<?!xyc{Ja$SR2ROjFW_gSz!$mjb%Za#TX^Jy%oMz_M#q{|HZ+&VAI6&A5bC_! zpjU+PPJbi19?!H&q)A2$)=_CY2tk93mj3{%RL=!ue<$Aj#argWM-hH|FSrxN=Mt70 z#?KZX4B7$0f1jfI)h_KW#1gS*d(jRqDw9K6$lpx(7`#0X8p+cqr7nCK;m4=IN4xN9 z!jDRU&v4;W3BQnUh{8w7ka|^oL`qQk#UjLishhASLMC+pNI>PDkaZ=ngSB76_4uX! zklqj1DIizuAAFYB)zh)wBpDZ`WaO9IkZ~$A$__#V;g=$}E2*c;8=GFz>6CO9q991> z=?Dj=$F3lDsmAW6@o9Io@m7{A4x{py>!0)-dU7I0lhfteoXq&7WPCa$<1)!uS&fiU za>W+uUw0O%BT3@-AdzMqv{>DXKo5oLN}?7Ew{a=lcvCtIeraro=7L=9$y_^2t{o16 zmZ<_TN;?E<OcGgRr<HQK>SmAc^X+%0N3B<{Y1Cy&s#g;=bqLg`?gy$n1oF7_F~m<D z0yV3d#MeWhsK-SI(~HukPST<j!yFtF*l<hQ0@kU0G%DjG2le^%sO@SK10{@^sFU7v zal9)Qd&m&}8E}CiD>7sv_mh?L5)LGw4+<DXn}fCN6GQg6A)G0j2mr3RbGi}_W|_G? zUhFs3W)k3N@Nx(ddm3+k_%|+m0^u9*cB*yhiCN(ctPi;1j+zZv$R3{o-sN=EP7mKI zGkFjUou*ipJUT|E4<$RHfZfK*O->_YCFrxTB}K;WC&T=ws#?;A_Tp&(zq1%490~o( z%28bX@W(z-)f!w-1VkzaOHpeei#$?s6dEgffT$yIbw$|B1ELO?rMJitia${lXBH}o zd7qCWnYd{W1;lPdkN$^lM)cViospEds3l~+9=uT+U2C)+Bv5J=dwKGa2JEELHl0WI zO!8>!PRfjmp_@AFX_Z-44R4wVRLsgh7)R5wC9qN7A|lb#{P_g7MvD{VnxvPs3$E4Z zxd5ouK*!7_icLJ|hK?<mCowOU3g}NkqdZAtD$y`E$jo;z`f(;ko$GR-XJ)Z%x>L-v zR%oizC0A3m&P+Mf**de9Nwoc_$@)80N7cG$l773SpUrf;p-u>Ps?+s0iGWaCBB{1b zIT>6⪚+DcZj2=W(i}KXk44PVOx(1%=M+XoHTwcNjK&A(3lBm8aqKbe<T7%+{Xcv z;a$3F@f?~MuH<Q=QOS2NigO_*Y4Ly|LXr?Bvs-&)2X0MMBhmwre2{1-zP)6zFcta? z8aMxy0cjsxTA2+hf@9*OBKBm~tl$QKKEdb;{2;#^5H)d*={<GjR5k@SlLqj3quo?5 zOd6W;qdwins{W>W1vlvgutRad%X$DOr#RI-96w6t;NEyugB++|&p!G7b*v(}ci9r+ z>cEqcO?qj~OKPm^W}<Oq;RvecLBv=be1p$E-K`5y4HlHX?0T>COoi(c>8tpRDyJ-m z`K7N&N<W?8=3RtWh2$t$^OZCRfjsjK3W38Qnidh%V?S!Ul_U}PC=r-P*-&0)b3F7u zlHMZeLP8xGa?7hJO7_h+vAib`&2C}|RG5X*cA|>)GfhI>`;|yT<5Hg;E%-D`HEN=; z)(u2x-Yqn%sVg)pF>^_;m2__7Fsuf;4X~k+s;@~}7Wmmk>@cWZCZ&UazxfCF@7wX_ z_wP$x_~nEzOo3m;hHW=U3C0m+G7|hGF7cooM3gg9P@IuPo5~<Ob!7336bw>+j00M+ zhw$cSF;|)mrd?YIzZ!3Tc!8V$KEe-6$$x}~x2pw&59XT~afhUfqW6!YQfog>2{qr) zp(bNgHI}*gWdxnu({+4Qn>Gw+Q`yLp>`j8T)yS<{N#|NkC&v9qpy!)J_834-ddk)6 z*{x#MdC4M_r$@zVkVf@5*&~1&tnGpc`xW`R7&St|W<10=iRy~x_Y7auq>ZTRRW4Y$ z5tYY9G!Z}D{)5fvh+)!=Fg#^k0I%^dO&w#8TlKFS`Rb-FHFZsTT8-*2q~&YS<I{_| zOw9(WE2gJq@136XVinS2N@JgLZ67DE)8bF{BuKM=IPOx%bx~~lpC1`WWDy52GK>T{ zoO0I#t}%MN!L2u@Racv8`Cf|Xv5!lLx`UC}9fIw18!I3hW6fJoAUD=@ZZnsSv3BN< zZ*$uh`mBMoG1tl4#lIVXDzWFHhbg%GbGq6|ZR&cG#$Xw=c!HpX-HBBS6se-u7tlk# zEE9d1PbCOebAiw7d>+$zI3%!Hea>x*cIMIq!Xup;0Zl>>UJ-<WyM2OWJG08cBg?PV zg(B6!^F9^Wr9Rk68usu;flc(m4%M*lVgeiGgW)bhFdEqPoxt*ZurIM&4zP2#3T!VQ z43{wy_P~z<3;1BqYS_L%3v3hbZRD8_DFaqpm~T;!z&d=ec^a0v(@sFiT<wEhtYQD` zBd~fOY`liOkSVaceXzqd?Ed}&tMkEj*Ra|F0*m-y-$?j1@b|k2Y^o3To`%iF8ad<) z`(P_H><_yMtk4I$7qGBB`jBja4e`LR73^y@U$SQI)jR!ioo(dalI`a=lj@XghR*gy z?{r-EM{ZB=E7{)b4c<d%TiZMR2U$}XIOG7y_E!)1YxR+aH4YQlT|QWghMit2u$z6b z2Q}>PaQsl%EFa9&u;VWl*c2b^N)1~yO<<?^V5e)?rs)DZ-Uq|Y8Z@#WuN2rJJ{UII z5%ye#z=A#)B6h+qoh7hsxUMp3xF2iS9_YkShK)Yh8V!2|lQe+6?Ssh@gFWz}xdL11 zgXsg)18Z&+*keA}HJau}wF3K-4>n1|j=WW1H9lC8hM72%3R$l9!4A-{TbBv!d>>3- zw>a>ldV!thgMAA31-%qKDzITb*ee=#{4)X@?1Md_VMjbKuw8tx+cfO07X-HT4X>^% zHSG2#fqmkGovUGU*9hzlA8fRS9o;Ih7ksdTH0;Dz1op5GmPuIh8xsBiVYr?s>{7=g z{)`={Ckox&hOYa6V@}%ct3&N1L2IYleY4a1$Zo@Yz1y%EPLT_Q!z5_Nh5H!VJ^43! zM(KJ!{>15e-uz5=JzS*h`I65C>j1;+3Pi#I)xfl5Uvv_LsXP)1ZBFMjf(iKiRcW)6 zkjsP<^#!-M%NIw7yk(w`52jQqH33xP&-(x`3gAcrp7H^n5x_tK9%1}6jeoF#GI?w6 znSL4Xy?zG@d-Dq^i!1uI>G8VMBO1>w(W&Y2lv+SMbpJN^>oYny35m7Z?h)&%8}&#L zJ%7Dk#+%!P19|GnXDPzmE_LuI*agGp(k@4F8)rjtxI>=jd2(=XyiW-VO4zKj!7%=j zKU+Prr3nU=`ec)q?ki+U?&8FWteQ=^vT<Na4nMoLE;6Icx_n}pbzON`(Pt4Hi28(O z>S1nt(koQ7zVa)a*vl!iubWtAUS5t3Vo+egijT#BI=Hj^1>rOqBW*b~c-6mH#)O3g zSuPw(>rq#3LUbmZRGm+i`HJ`virAr!0Im32x`=K?y;haBh#e~66meG+(T%@6r|kaB z^~f^oVIDUL7kv^b;o-cY9bD)f@fHrk*1Wuv@n*Myk6>0}%^fksXR04%*N;Er5t|rD zBV_%VG#KNeQLR^-;ITv2pO_Z1g^K{zs`CMW7Kn3!JSLCJy7D>kAvWf8%V{qhzkFGJ zhhZ|xjO)RRaUd`spCD<b!meU`Y4dX=+ttO+Gjt#B>KD+hb0106pVyexMbUA?Q$q7g zu7l<WdD><z6Nc=-9nF6a70|98{~Q(Y4`0o^E`U1-SOqELIMheOb*tw{P>qc7<rsk+ zUGYQxc>Rc%I&A4sMWF1Fa{aYw@!HiM#Di@ffKt2a)ZeG#RKLEz-KW-jF!1930$jp} zft|kf=tL0VSyi-5nFCY<guBejxwo_dSsg3Pa3-?gqxCR#vr}vQ04)P+<k}d;b{54Y zQXc}zE6?L+Pf?9ch72a<n7rDHxY+f8BzoG`^|X^*<km=%`?E^qE^vfZcQeO=)hrq3 zBjoU*PsdB4<2Lm(j-thFAD~G98whw>YQQVv0x*e8@ZlG+dSz(njt@OTolg98l~&6$ za9XiyGoMj0wUimVT=x27?_Dl6o2umdv^@U5vVtAUAi?FadVacPtJ;q$vF75P`>zXT zARxrpXt}x&v}IBjM~GTWmmw?C^-;ak$d+52t+J(tHEEfD|1^$@a>xyAd@aT<!{I)B zfvj{yGiNPJK9Zbuj_aKff#xp(DIiK!oX>>cW7B>$ip3)k8#W??UGUb29#gne()3Za zEg!N%3qhjVA(2B8<IvWsb}*eZe-VqWMuAGa)>k1n3*Zm{VzYbA{><lg{zlcGnI2$U zEa#tLx}mwnxo1||I%`wy?Cg`JtW1yBu9gE&ocVV3@j5>CsEf$aY4~mt3z$E(;WxSs z-^JT4J)dS(OnG28VGws4G|#!djg!gfq73UdM)a)+92Pz&Xr0o{(<}Qx7*6)`qA|h= zioR9Z1x4e~wX~81CG>Rok|9Ro@U-}x0bK6OY8qSuwAI_w_LVS5d)n?#S=anVQNh1H za6Ro4lBhlH0O-W;X@|{3WqUpCeoXi`p7tb=OzUZf5|GZ*uD&L%!c#o$-NZ}RXy4c% z2GH!-Xe2#eyLy;-sF=S&66ekU_lMd|o<%+-%NTh|cI3CX3?G$)k5azDQ&!Ikn=^5* z!^>HQ$zS;r4k+qc(C@Lg(P$(x;TLo)Tv0Ldy6njQ*xin=V&DTtkN_7a$oFzV<+Ln* zD&ghHvCe;b;u-FNq^Tf6!P)pJ*^v=CrrAf@?G`m0k~l}%aq|LhIKXM`kjdYKxxk>% zUt``SnHGD{<uN&yhey|<<m_|OKCv&5H(Ou_G)oRY@r@b<Y=l!;W#*@$p&x~6KE?eH z-<K6_itH6O<J9QGpFp$t1Wl;u!^*G9%&W6>r0l&gz~$zat*mHk<RC1VWtA0ej~o)R z=XbOBd6wY`67f0BjriS6tbQSTN>)6F*L)NZ21dYT@l+238{xY?!eESPvz#>CoUP(- zFoV7o#cfE5sF5)X?%?2@mfDlXZ=>Fe+A1gF)I2X2j7)&5)U#Jx)bpU~FnE!Z*%B+X zI~KRo)v(ONeBN$fc(e{xfL!>>3$=)qocF;4`J7l-H)}tk=dVg@;$0G(QPJHX=xWma zav8kA|Mvcwa}d7m;QpCW0QI_mW(~1Z?w{#_G5GJF=>w_%gZpQ4LALk(GtF0~EqI&y zR^mTI?#LvK)mM776RdZAho(|C^e1eroL3xb`Kb>B;;kJ<YYQq0p?UXqBY0X{nLT4y z+!vuk;_Ye;>C$pwAEBOCk$3*5r`gATnQFKRdyyC%f$fg&75TA~8cf_P5|`KB_lo=j zd=b1Q?iE=hSpUm=MV4yh)O$s)aH-xfB$uXkwH9SRSS(*(Ojuqb==#NbMIL%rjC}+y zfBDbv75Nq+kM~}Y2_S|N`|cHaAM)+sUJ-pSgnVAnxyPdo$ZRIgJsw9fZ<>2N{w8P` zx8hg5r1Pjpoy2DOZB-L*NsZwUY)o1v4j1?E;7Xd%$P0#K<GMcd#oFznEzjD_*7ppG z#$$|zITn6*9B!`>$IAzN`OmN>FQWsxRb#=smo|qie#_6EiJtuB%?t=XeH$d4;IKpx zfn?%VlH_$x&-{)HFI@BSdX(Uz5Lba19d{zmi;cuvXc+Dbfjhx21G#h)UkeCEFD2Sb zG=2OFVh26$`1u+a`Yh(4b}HDT@rKQ5%gd}GL*UTMhJKH&At-CutgL?l6TBEl^c{>= zlNH$~WZy8j8>Tv_TRjh+A*=78klA-IHjx~Ft9lTl0IRYcEo*Rh*qXMS3W%S@Q28*H ztY%wQ1YfUO)r~zREc%TkQL~mgH&=eC_6JTJ-PT%_iKjC2XSrL9Qt$)hJxFkAM)t<` z4QlpSP=Nk%7g8ylx(eIVv&*n+BP%?zvOY2{Y+kuEY~l;Ic2zcXUxyvJ3=2=Shv%MR z4?0Y|@Rw>cy62EpirN94n$_8%nl-p?>if!fVvDE*e1tJ}Hy&7ui@*+!A#7c_l)a1e zbWO<4q9ZE`fzW=LIs<6&Ni4`HJh7yC%!s>o&^_{A7**$HD*6cBBYGA{k6rXgRRe)4 zduCwa>L;WmxIbvZdEuzcsrHOqe1D7;#-f5_$Qm>xT=XqIEehJh6SOg<QHIlp{Q4H? zZ&kH`l$oPY$unSs98t7%^$lm>ZmMx|(^9!7gxB2=hAA>oIC^?oZ``h?NsQR3t|3#g zPHkgt2xnWi^}#Nj*aEJ@LV2InaWQ{wY!k<ecz+M?hCTZGHk>7Y3uNfW86mZ(Q83%e z-Hevc`eN!}a_pY~s@olm#J9|}r{7wJyRx*WKOLUFulDqz)-|+sdirqiG*y=IX=v-a zj2>{e5Zf&Si+4X@wIf85YH!_4BXs=!N1>Ka`{F{YRM+q8Yjm`Lc;LTwW7m8X^8a*W zSM?hx)Q)cKItbMNgB!axK|wpZvFilD{u?)Tb+1L`zw1V!y7ouAwGZn-?XLq={Q-Xx zy8mC_^>%#+N|64pw<!Rnx$Dj4!I-pH$9|MGHn+suy{KjG7`eWSp|{!za#==h$;jR3 zo`Jhpa4*+2Iwr(zjB*RusE~C|u5}VH`pwM;2)BQoQ`9#17`az$BuV@Ol7Q|=BX=&& z!SgP$AwmLIir|->b;;`}h8rfjL95WhDS<dW2k*gp84F;Z(Eir;%#=H!+%d#yaxGV0 z39l@|&0M^VYgUeRW^Pft5e$FLYnpH&*9N?q9dq~Mg<LY|$idZikT(c<QRMu$Sm-@n zF}V7+KUhA^@AtVfGCXrN>Y1-RHRV>YH{WAL{Rg*#EkyhxLDLNkZ?>z&Adq@1*v?QK zuzKAJre*q%#$xaO!&PP?;!JC+M?oy5Ad6dS+7Z49eP9{B1RXBghHpMXgBDB69;2wU z5_8T6a&nrgO=>RofuJN6>7|E3;22C}XN87t54CK^SLU`v4(5rtzMW_|7@^6AGPpHt zC<CT^EACr_8|Y+scZ5?nu_`|YIA$UPDN{`bh~33K_)XRyPjR6%9EH*^wkT<*SCm;t z!HZ^xhbqoDhl@7Pn!rJ-W4c@ZE;SGy8ke)ua;)VK<cz){!S4&igJtGnh%!FpnDrF9 zFXHzJhzcld;-U+56=PS!TRaSGR~?=K&-)VfBdqv1JoIa0!4C`2We0EB3o~P(o;PAK z>A>3{^%#C_*vM!x8qp2$-x%YdmNI+Dttc^P#>c+{iS5bV82RKuW(FC@ASv1mVAUuf zG36jh2?ayAe{X#pcmGN1E)L$7Ds=Ob^9KZ1$Qd*~L2is4n_2zUKoe%7jVhQHY!tn5 zv(wkEor=NJ!CGJV5Vs0KNL?(H1SP9RS?2E_ALWe&=VRcBN$vN+FTRF@@)}-}zq91z zaUyj9*l4CI2anKgo>#Z<E=d7OAwZgGl{QtyP!%PpMG2%Kc$&9!g=L|(5RB4;wf}&i z^c{#yg0(N<1#2qxxZP!WyvQqiaMAw&2Kk%SK41{zzBMm={&XqZwzp8W$&O-20Z}xx zT`fU6Dr*pK6r|O$dZxk=i2;75zGAM!WV0_;J+%DP$1bm+C|2omN9SiufzB5q!JQc` zK|(M(2?|6@#Vp49$|!VJ=+~J$A?Z@t6`9g1ZVaUG5Z`cNTD(TJ5AmSjLm;SY<I?Cb zBLN?cNsg`R!8cjns?3nt8UHP=QN`Fp;+ah5ty#q}1$8h_&=77`t<!DM)Am0A%&EVG zKhyV{=E`7pJLq&{0D}%-y?PVK!eWcMpO5z34yljl@e&^TtwectSqIq4ZH($?tyv&R z<k&qKn%xhDcc(@+GT~rIlbgC~O3F&@0m|{$d?rBi?oi#R*En`(CuV|OCU<~l8pU_1 zwaDS&{rmKIO5IC5DE?8f)<(^_KYl-Y8S0dSI>YRPP{L5J3&qR@p5&TUg~%)Vog8}$ za8{k0f2s$O`PnanEbS{vwou)r1#pP0!&{<e()KiKfT8B$k837+&Q4#vDKm4!4hyx8 z&qiAc;FqH~{9@w<elQ_|K};l9{K03cd<{JiyvC7b=2h^%<37df`0RKe9{IBlV~mU& zj6*|PBL+TXig8y)XJkOgK6a3L7SSe~2dC3AIx0VjW9-?gMzJXD(txY}%z(6JjZD#D zh*t<$DB~kC()O5i@2J&*9P$hxiglvyiryjz)XScv3EKDHkUCl~EHmFI!vu=?8iwtS zsI@R$30ulO%>2t=HRk^8V^<5B>wYJk5BoeDRrER@l2wG@?Mt-=0mZ^n^b401;=;vZ zYO{5$!POUh^>`wZ%9&I*b}HCHlCjfKNUzWE+4SA8={7Y4B;&WC`$ZO4gw^N4oR9M% z=SiE}`WlcAzz1+&zJRi|WHX<+3+sSdIvTWC@D2EN?SgZfaLNc~p_jSs@CB*|RQ`=# zwyPnl1j%i+BOp>GIA>M}XK4>uT*%V}OkK5mR~qaD%KLXclyoU=Ja-3ebw7%QQXC5D zz23=<*Shunq06D+UiXK(?QOF(S?n!9Y4Lq}joItoQ0?dPwVAY0Tbo~X)lu5zeDxW- z@-wISsvkDKMXlACU8vbyC=gg>9iFc~w>d5^6D6$N2PDq&kdQAv_ueJ44q8&`Adro> zYc07nTFTRENvZGHdqYbBXe&|26CJm`!`ohSC^>T7h+j-Mpj$}2?UkBgH<S4Ub}|@_ z%d`GgM}6CKs?@?3>S<27ZkdIoXw50sZ-?u*JiZN}UyqTaICwE_H`h+STv8Tmj^xTz zpXm@q9SR(`{#nAwv4t-uQ?xZqj$Mm14V{sAx;PEqsR`(~#M23B@D5Et2PK~NOoO)_ zTF`vIOFVs!Cs$%uzV{N)R})V!r@?zN0sTwj>CQBGHzlAqB%Wrb;K`kVzibV&a@DCT zwKYT#ou{z|I@<dHlGva9*tf7{b+&61-aCMg1{#3Jz*-H*Vze)EI<jR529lcL6Ln{x zzmU6t<(LQKm9>+5K2GBOH*iQJxqg@M37TWVClKp@p)=f<{9c>ZSuskKMrVm}lIV+j z({|VvZ*eGX!SDZtQl2`=q4f9;D7hMSbYUOx5%v|+4IIOa*60~$;nf~E`YcY!t#_*I zZ-D7qvNL~!Wh}$&Z<tsBG|$P#>Le~Wo{$TVfPQ8|9(-VS*gP%YFeeo1PqD*$bYku2 zKgu&XwyD)=Q}Q`?hY~J)ah}ZUa=|?Z+|lz+Ku3I9AuMRJbH8`5JNxv~7oya9T+CeX z0Aq>C`G&=-F!S)yTKu1f6M5I>s2>KgAL)ecmGr!?2hD}ZhFE@5JrZ#m3okFtK~dF< zYf)1i!DG%9m!)T6KS(}C2I^U)W9AsrjpL`UO7Xu8VmcSw0jrSX2iqnx27nyQeTw4> z4nU3FwJ#*V$jf^bYTFs;JT5czHKf|Pz6LfxA{D2Hd4Ndgp;R~o2JIvM-_p~rI}pe( zad$OQCQ=XTqWfvOyw<Y~rSS}5d=bVi5@9SsFc@Fp11uH54Fvc%;M^~OO9=QAm^<^- ztKwr)3ia*jX?wGFbtp3X%KEV+c+2`6^QNA|ZBw5kZgY-fB*t+I(=%#TO$_p=jI-{e zGCEZ=8Nty_#7)7j7tqrQ3pPoY2d`&h{|y$o!`5}VD{=TLpiYxa+!3ZfkWjXQRA+H6 zz0J@EBQYHltUUrDA-FA5e;`|P@?xw}<QgVoLThX`ws^ou%3x%r%du=#9O5;2yp+T` z6Bm@6iRT~t7{R}C$g>QD8^yZtfYlUca;*zjKhOrxq6k*$GN;<ji5$1`QVXn`RQt%| z_$4g}D?+ssD4#aFuss!KU!IS%zaX<1Uq~ws534A2W|m5tQ0zeDG=QpMYlZks2V6HU zVKc|)5?!Z_QaIJvGclj@PlHe_gjE}<BK7X`6b>b;gnIB5k5JE=vZ605pW+p(Bjx_; z%7rm~SaI%Bb-9F`juJ#+XjVy$xdo?sZ~z@<BMLZEc$C6Q#qR4)qXM3Q)W}(gh5KTh z#>L=;->HDNWl?PA3)|PA+~=a)8!*FZm7-{)y5w+XWu3n$Tcs#Frxay1zSdHStM`_W zoMD|@jJ3g$Cl?yQ(wEWHXhS<_YQaVNC=L|Fs3Xm#7A2%e1@<HS7`!2hikItAf?L)1 zo{EMs&ev3rL#B4QirT%8+EvRnL{8l*)2tYEu(~Ygg2VOdy=Q5&o$74xW_<id{3cq6 zyRVktcYuYr!O6DYL+^N5*2-cOSq%p^OrQgjU`}A8I{Z1B0B(h~GIxV*x={i?{}RI2 zTGTAC#|RURV{9(x5%t$b*+9@x?93Z+XvN8LS&20v?=pU>!Ok3cX(Ac*2f!$EEN0p# z3`h235s~Bn*x{H=&kr<0ra)w`kTpMFpS(r)A-)n(OwF9aKxBV_3cVmq#>x230tS|$ z1{n6(;Wa?Smrd}soVjgkPn4I-Of{UraCR)BW~f9=mn?12+RH(~<mxQRv;J<a%af5x zuk!)!3r^_NnL4YIARhHTcNw&LJ#t_PAwLkAg&**rAq}Y*Mmrak%3Xl#d)l!z2j#-{ zAxU4%baVuQf&2TfN1Rt8BTGP}b^I>O*1>DU(Ry9mm?VjnNW|5J!CKyJ#~B3e@-AqW z`fNmfHnKj?L;0{Kig&m@dv2Y23QVxbTAgrT|E}fM!Kkndr5>WDk~jaoaSBEIE2>L3 z+*!Keu65_QFT@=|bYS>GZXsqB>97(F7e1-KbcI%BHOdb+G}!Bgx@pmLL-?ybQ9C>k z<|t>bgf}43_%8U0NZ7upkS>8PXT-YDNPI3QSc*#q;l~fWi&|jV=-uXsiSEL9r?&+L z7mWcm=&D(r@)DZv2)y~>wOsuqd>G-^;>{1A?ZS5<{P%d%t=_Gy<tL*dU*XL&|9sG^ zSL>Q!a1-OFaD^{<AAOxu@z*e0YWr_je?d0XtE@|}S06mha(1foz}&UoWh(bhZN0Z3 zmDW25chU5=UPG++r!s5CklYaVq~@~W$pZDtLOiLxm=`Wh*UMJ5=im4)Hq?wI>^5}; z1cByrfzZer@OG0JXeOKQXQ*MT4BcXwy+awgMFwo#RblQrgsPQU;Fnb~IV2}lt`2cj z&ZX~Mz5UDBfqS0MQF)uPUW5u5RJpUf&5kM$1);R6JQq1&+gy*j{V6{7s6AOI=<^Kx zQe&9QbK=%te$scp%ghay_An?HPkY%?P@`9i{9Ze+OL=X(Zu^jK68c^GHft7?<))*d zPHGdM01RxYz3c`01n<Yf&NiT!5gtvIGNGt6+Edv#Y|TQGK<yj=)_OS{^I56WJuRT! zp~^u!{;bb7pBKOw0-j8x%MT``)n%934LOAIU;d;um<{F9_Lfce*q-!8m;{rr4b{xc z#V(m!#O%-;iPhapGM?V(?s~jinKh_Fc0ba!uyc~h-7NJff~jBVjlN6H=OlY0D|0UN z<#bZWoR7XIAAuJPd2D`sC#=kg-^fnWSIqdUF54!sWluXC(mEsL<ml(ur%#RlUv;2I z(Y^g$&VTn?ZBc}m|EHZFS+MLK?)*3m)c=E>AKx^>E_d*)wqn5k8#_O?{{?Hg>ku3! z=7cu?@ApO@frjHwZg}!LYtq~~r1y^e8T3`TW|D%Bpn>0`DrYd{&OvD({ojHlS(0v= z*(l9BF&pLLySA2Q?tZL<GR~9(d^USP1k3K&NG}C`@Fcw)=BIVgS9ucrIp^*lADeJg zn7c;+%*BaRXRhb&Ere&i=kAArQkt%>OI_$hy}yHaz2^ApcBtR~GsM-G=9osmnnQ|y zneP{L-1&^C4-R}BBaE~<9`P2A*WCGtPtUuRK+oqu&oAOZcL*3mV1bCCkh@-lU-nE` z3!hV{7iQI&kAsYz`A5#M+D5i4=rm(Az#&Td8oEn*)ffVt_+lL%x^-<9qlU)%x?mi& z!j~~#B=X@vPHellR*IQ<9qQESz1(%A&w<PS=x$*6TEt>+UHY|exO2Myk2pJMA(~p6 z8YF)8yu3i9@7f978P)TK%F_=S2(RQH;qJ35DbqZWm3K`n&cN55%KN1{f9PRfo$ouw zsq=O`{0DXZF}r>{^P5TkVV!@Ez_NFpFFA1sb>2o~U!C75#muaMmGr9fEfTSARm*`v zJtgXsC-V~i(bZ(HHr@+|`OzBf1Fl*IJ_vtTfjH)ye;Uow4t#AihCqq==CKY#+2Flh z-AM`Ustk2GAGqs{vzzKVdFzlBrDWTkhzryZ9-GIYHDyWI|DHNXc+o@3BAw$Pof(Ci zRe27<9~lWIwnKpp&Pw&D%}j;B_k&2nTGDZOK?2Et%jFMgxh!<JjPh{d0neIE6J->& zU4O1}BhYxR0@Ie9SumK(rZ=LG;J7CXu|GyVrOWV&@!{OX)YL&l<7^@3;qbc@9R%Uc zcyBCe#U&nkQ%=b<8So1r+^N2zEn)@}o33*4i_uqEa|l!Y+=PW=IGAw3T*BXhRGN?d z(*>7}LM>VYgZQD!elJpD8M;$F4II#wJ>2oB@HKqt^<gwMGHn;quJ+eb)H|J4b9%fE z^({KL(%KDr$MnCDiJs~k{JQl;O)l7!4YQS_m@+oN*0!4Y3SY)k*XN_Km>@VW#3=)O zDyrudTuLZ6(n;sJ0{H^!STGTLTCbjv&eZvGqfDawmZGKJo+Go7lZb6k&c+;n9>)H% zH&F;+K<j*tgcA`sS7h2boGLJ#tG1i6Wa6OUr@MF{RKBC4PS&h*1&@=h8rO1imerw7 zt8vR?zGQV)8yd)0?Jrr8M}PSd)mn{eMF!gtYR)CN@)b%P*d=qd@d?_2z7$+X4kJ%U zTUkrhRT`D7ochY%5$af?+U|Ab6cu|ewqs!iY`ZbN!Ri~W$??@8*HW|t&flT4)Xk#} znYeQf7b*!Ed<k60h^7@uB{bc|H}}giiA%7zf)vUts3vxPIX6Y>4~s|(L(?k39f7*d z;2=oJb7(YjQ8~^1ImusI&+YTM(C{*7czFo17+MY@2b`4{g0|Dp4(7@NZfQP5DmV-! zL-T1bWb@gmhD#~d#{R^1iFupLr9bzY+q1w7*7A}qZ?_&?^dcRzb7AbwIyZ_?n5>ey z$e1Qt>rnNNNx@m^j=IlCkJ_lB8r4(Lhlx02QpC|~9+=oV16g8&0Y^z<-1etS<f+^Z z$FoEa0OT*xZAgK$X;VRxsL@&D*CIa@A3qVl@!d%bx}N|H)`su)*;_z2O@Z6h%15QZ zv=gVm7o|sCs{R1f(pou?u~F6N(w8R{HFQV$F3>DI>fe4Gq)BxX(?KluJ|v;xp8y6< zZ^>DnIeF?T(($dKld{v_+L>>1$=1Ijn^<{m*bxjnC_saJG;U&D6+VgUs=l>U_v_7= z0xm2Yc6mOxi(%ha(I>MoRgT#WetE;{&zYu)dDvV`U-~ahb2KOBH@tqhW>c~5(J<AQ zhwYy-g*+c&GnP}~Bj?t0%k9++qtO?!H;Mll^;*a2DYqkduE3oaX0=>ijY<1pw3?QZ zm=w&Dc`tO8_^KSKE(f(nm7~d`BkWWs-b;U82(o~Q6Q2sQ5&s_ABgOXaSdO6Sklw@* zA8_SZ2p55vJ{OJ2H6ivJ5UV^2>pwNCixYbA+x8f-AvBL;KtE+(cs>rZ0k#i$H!|w+ zl>b-=n(n)OpCb~D=WArQR11lmx>(wwnuv@+F)6!JPbPBeoN%*R%orD1yBp$2ZE|Oj zd`_C1brO}2_ye2FPdD%>N6a?P$&U}f-$JfgBSztTJnMxKTTd6w1Dl@`k(;~H+9+-U z8$h;UIxZisoE@>c5d4$NGI<DoaDOTmJIvK3`1twoor1O8BMfZaFbihfEq&%h=G~il zaqmSIzy=fc5MuPudX=7@*@BNw4w_v$`a1}}-@=~5dm((mF|@#Ic=MB`KWwFI{Qyay zjdTcGoGdbCTg_E9b0{bMG6X4>$}jj%_wDo%>Z*rm^ql|JdkKEW_Z=^txHR+^u3Enr z8Fjxe7I@pylrdY&sM$&SY)Q{SIzFT~HlN?W3lGW17yIN(0wvY+jX)#|AHB=0U(pXJ zd+1M|w91FmAUkg(&VjhjV|Mb9orjYea35`bE4mZXINud%m5-hf6|FOC<#ar#{wyr# z`O!{kXqk7Rd0JOC>WVWP%EeJjzphSykhu3$Ac-d|QH|1L^VzLP`4X7Ff5)W;Pv0(9 z(T0pF03!J0z1!I%E1o;Z#qI6g85E~`x0kTn#tv3~mynk%s$(EyK9&ZWnwd@CBd?zM z3;l|GZvauG?&2B*0i}B7e+Wc_alS|=6{7N4QTOpkrmyd6m-I(;x~HRRl=P>N9yS}Q zz#3D_aNDBPka=M?<(rP=%YsLWoWYyEN1HNg<UUv^2)lIjCrt2Fl1AX+g72mB^I#o* zVt*mB`+<^jr+TKNRH&YMR1IpVUR{QQpb91;1D0~(r?(oG)RB6IahzpO6-Wu?s+UKo zIt1@vFXx-Sotis`?ScbtlS)~PboF~=cGXK0JfcyXAk`f<KQC!ug$X@95u-1;wj82v zg>egySO=U<$b4T}6jqlAn;Ei8^S|KAtW#fo!4l%L*BQ1{M6VDDF_MyNoW-A82aG)m zy(~`WoQPy<OOlH^aRL=roml!KhV%hNosL#3$M>#>>&oI+dwYQSyx*%?72FR${D=?0 zt4^BLAOarn0UifnvFby>eTJp)+0lL#>Zd7)qrpbA%KouJyz&r``(-tP4HGqDNo)_Z z?M8~)%+(a<0&eZZ%8x|XRjIcJ(HrkzQ4C*`;4w~0I`cksU}Ny+6&7DJb>U|aetZgi zv<p9)@S{@Tvr!&YlZY843IioSi@Ew9xn}j%GQh9Kn;%{&@CIg7uM*|b6qNNYiN^_V zPl3Ou;Y-ymgty@h0cXrY^JDZmg3+h1Z`k(;^r5LiUIj%6fdsI1Cnb$PJ{*m|b~LE@ z1s}#{uS0qD8#3NcGmP!&{PLb`3UH(rz~lIrf@GRbe3|+OA}Mh9^aWQ6_m!w*Kldl- z18iKBycAhtf5uy^7JtAhb|2lgx%O`vGMta+Yxdd$Rw=l{k)!uXFF>0*SqsokOVqZu zX;@lW+tpx=x;cs3k{-2LeTU$y7KScOK3KaR0>VvkbN+#UVB7vm4vkaxhXtfN4vZig zGU68@*{wr*KZ*tafI^&+o?V@aGS>4rfsvyROOINu&eN!k$wK^ut5Y3G(^OHj%0rIQ z+ApwY3SSstHq7#r-vNf`JURf=EAajnd?ZQ<fu>4p5u^GexTGcj%01%j)Vm;+8hMF! zu*dBlh9k0@2P*>H>(GU4638WDIEG$pN^0f~&#c5OTRg_|TC(G(91rRQmK%H7XhIy( z7P17^WM`)&_H``+L3ej#$eNVvzrPCEmZHEi?;>{=;O;7QyOc7qL*;Kn*=cTpQQ}B{ zJ;q6e$W^cICzj2v0hlV6%^me{iLIsFd&PT7s{cRo-aNdj>WUi<LnI3J#yL(kDryka zpr!^9OeBGOC6N?Rv5Ml1RTL%BScC+VU@o`UL@PB8XxgexwXJc8#vvGFii#So+9(J( z6!tX;R1u;K`F_8(&bjBD+!O5keb4j$^YJ|7+_To&Yp=cb+H0>p9(~HbH|r-GruCC< zLViZ|BaYVoI83P^X{}<c2os-ud>i|53N$`NOJ$qpaAm`NkYFWgSt+iT-bW-(VKb8c zI={9sJU10<a8P&<i6L^1>uY4vN_Fs#PAh|((&mDpQs!h|5E-@}n@uqMkZ;SQ@bzW{ z1d<L~KEi4)gCrVk6p_6)xY-$S?nmh+0R-dRnjm$FuSenAu*FAq4sm+|xf!p`+>bz~ z^BsIei9!YLF2P@%1j4wXR!(I`ny5oaLK8HPQvuHQ!~K|H7H(p|4!CA0rPtnMgR~M1 z^#>!jSO?xblHhJP{YEV#!_H^jxIj&p_9Sh_U|&k?8@#byTl0){R?*8(@@*B(<^|cz zB73zq)rbnsP0XZ}OlEaniifu<e??AySIG@gQkT95k~DGn)oMl~Q@b_0)i<ryqrP`e z^cA|z?2%A%huII3+T&|ETU-#CivaU-m_G)0aDy@`w+Cj`ONO^rzEykxraED)782w2 z4_y=A<QC-G4f){ka0u}tcjL!%!CYz@%~&^CL@*s39{^%B8I?_#*su0>2}%;RzD%5T zc8!F2Vj`6c$m}sz*2#*Y(#&rqRKs*AcduE4B;8FJ#&8cHv486uhdbByWgC;0qSn3W z1bT(>>^mdU>C3%_kx_)3%Y?V}LAQ$xw~mAW!Wbk?c78-<!qt3_C{TBN$k+ux5i?_# zdpOEK1fi?;N!Is;vo4=6<ysG%`MU&=){qD8FQT*&D`jCloFY8iqEu}zY4XsS);W@t zbM(5?IX+Dv%^;Qi-D-PA*D$+~X2;)_i7y(=^52NcLEb6CUOI#-fzKj5+QO!V#zY}> zYP;fInp~5>BT!7_=oz4g@t7f+gQgHpBZX5)a_ATAHw9{3w;0!}Cz-PlNCp;f#iGt> zpfNd&E1}}i^28(qDis|1Sk(Jk)X3yei}GMTJ=2x%9na$M3nqZ8wnT`R1m0hZsTLvd z#{@n|;V#!ZU*Lx+e7d8Sn+1Lx;cB%eI4hYK`pjEK1NT`857hicT}`8z^GCRvg$Y4x zg=iOD(Ny9~@aA<@vu*q+;%6k_pS1Bu6aQcW{yQ7Ldm->&C*Z%a@t+gFCISDY;HCD> zt0eg#frL|$mVuZDNwOk=WR;7gm?W<efF1u`R3@Iwt*7+`GSr`|nQlK8^;&rcNW8ka zmWen~cPv?6Y_YIDE9UvKh07TJ24+6N&U&*(<04n{nCnm4YMxV4SBse>BK{4g=M|BY z@({7j%tew|m~WgxbAM4PjkzSc{B|=QNvs(+_oTc@_bou9IZ~x^m9@p6w8Lzb2+KW1 zb-zDpty!+5uI6#QKWVjjSV>(i<{W?0a&rqwtwz*uCY$~`a|`8%3+P7G_lPztHU)7k z2gfOzd7R=6i5mM0IrpfPv@>e#8|J(n&(_RoMfBKiE<qlM7I8e{!tDIOOZk&?BZWmh zPTQ2gQFE#<jIFwQETEO5OkO}yrZyrlX|;Uit;ZlRxt06;3nO!KT;~DK=cNibSYdDe z&BqNb147-{CLu=x;NdWnS<=kO?r=UOrNAbGInc?;$1J*WU(}A0w~<{Vde&a|mClo- zXWS1{ngzGy3R-L_-}$AlaiIT~=uU!`v+hxSzYIQHLfC<44}H(u6qMG)d+G8bH)iHm z>>gOMZ~5#D^x|tuLRN6kV6Z4dCRKO$DM7c_9~aMT>@MPb?jfDW<MW~=XLx|ANSGtN zzm<@?;O8x4UamN=2hob$X#SpxuH@TK%Z-d3mW!F!VHH324O9(4s){cB*n?Ju`BPLP zE~osG_sHCP2=1V+4@UPta{wCL)&1uM`?PhhFO2XK$$vD!_2}NtHyL{3Mm1=)l}F86 z=i^;xRB6MQPi!>@OL)pn#nwm1usA5kZ=%v7ba50{^nf$AKyNp=2Nm@iW!z%zFOD)& z2}Twwy|v3Y@Dl7+LJns9)$eHx?k~ajJ30lM<TeE=KkMO339MPJ?sO&?$KJ%f`Ortn zQ59YNN)DqQ^1`@xO7t)_9V79DAg=ha9|`*QBuE_sf?^Ob9f{J&<sgT{HN!wK2?P#k z(r|!s07}s3ZHz@-`kYx6*Jsey=Q2jjGE1!<KE6*onk_1maK@!iG!yDGQ*|gb5&eiW z+AXFFEq$KZM>Q(>K%@6XM5BDQ+V68mS{kkH(Fco0XK6QG9-D>B{1XcHkc9b;p*&a_ zFIa|Muuh4J#8A>j*tnsj@l~g^Eh8xzh%^36G7(yrAheF#&SR*`Gcjcu6$ZLHJ<7NX z)}u^3)+1S?tWSz7aeo<n`4LuGAMNpFEh+0g0K(*JWA`BNWm&Z~yvPE$YVY}qcp+1y zkaJqiK29N%yoGcHyH+7<`4yc=RKnlLLcvFxB$aQ?Ngfyw{~K-`ZGo>=&FwgxrP+lQ z?491|h`^dx07Pl(V;n>~rP&bmmgeib<E3E_j{^g(CYv;Bi;Tzd({9@m!G`7QkydHm z+*e8?bXLu@OPYmB>!}&Z0c9DeWpRZRL+!Hk^()J_I(OKJJ0-bCc2{f-014JOut(AM zb&A#|MT6U#Djr3wvDI6&X1?kyyH&J}DYVAMKCs4s%Np^89M+#Cw@TcoB~})m5=+Lg z#lx$m_V{Ym-iS2I7E@6ccW@-OxbsJ;y*6_>8Z02OZwNp@c&SEnUa$D=VGIOwfO0bm z)SOCUYa_$anlN@moI%hrrN0XUPTF`Gd<zJSs5-WeKal+zeIok|C-u#edPzcRIda4= z+WtvXN$Bad;WLobX9}RfbDO-&PWq8Pab>mH{0fa7T?V%W-BQM%-JSUm*uIe7rTErE zeOa`d@5L%x8c;`^^~?}9TTBDp2x1?D=f_>$-6x>F_Tc|FuvC61?e}nz_L$yYeKjbs zeb3$Q+(`bg%nwJ785XFz4_>sp4V`x2p85DGyI%Ico?WBe8JFV_N?>7YZuy+dq};&5 zmARQKbIW)1iTwuT1(6euht=>ZO)QOR1vu-RcZ>L9+ETMltIc6mg(X%lh-6hmg=o?l z=+U#~j!<jvO}lKYg^@89U9hH!Rm&-OL9k=qn=4C74iHglshGg5BJ-RNlD?X1{I;A9 zM)qvM6bUu!35v){sMQ#T9l{Z6En5~o1!|?-&3G)@B91<)o3Fl65GlZn7_$YS%+)wg zcqo@(^C9$`B6QMqfw@a7zT!%ka*(0z(u0}NU!@7Vhr-VY{8_*)1z5#1DQZk63C~>4 z1F7CUhsJMa;!3XZcw5g?Y-${bJp>tJb$C+|v7$I8Gxuc(!qtGlg1I&(o0x3D@FZbi z!8JA}hnO6}6ba^h8xur<#{`qE%MHw3nOm{3Pb?D{Tnv<r1vK_5GC8@~T%(#x5y*Bk z;N8C548z$W>4-2tex6cviHnl0SmujWpwjsqsGAs5j##j&H8=18c9K*nttj@l2T`$` z+0d=&8l6g-DDdqHXYN*wpDl2PsGz5u7W_ECi)Xs^Saub3*k&$7#+?@zMy|~%9C|HI zQSZVS!I|j|jaXK478+X7$T3AFr{V-7ju6knBI6jGK0dR{8gg{;g7sgc$>NM+WoyZr z%vNlO>Fk$V{qMZ$F2vhxwXS%ZTcb9(B?;7AuHjItS&0xXR@5V63e;#pu$1>#;yK6Q zO|J?A{vP5v$Kb_FU2rMzdg3|9;Kh%#^B+h2h=lyPcnEE^nv;kh&Nn#iuc&3+hCAXe z!2c!hE6qPo7d$F}&C;rXKONxfk?TDkSsS2K{H>%<^vDh72?T>Z8q;gD#WR~1<muCr z27_6kawp{TmODm?u`m%^?G)u^Fwu`TZopwsDW4C=4^zqUZwVZ&35ZsE?!hxHqSYY9 zyC3O&iq~$IGYs^^W7qqW)|rQu)Me%8_><O}TS$t|W;P>ft+M&Qv&*?Bv-fg-6Y!O@ z)f{bcT!O^4fBq3)vBCdx^j!x3m!L858<{=(ulOi;m+lKH*-v-fSi6H}in(N6ai`4L zPRE<+La=4;4w^>5_XOy+5^M@_Zz{3(7w9wx9E;Eweu%<(mfsFTk#M9M9UtJDrBq4x zF9^R)I>b{BgvIb)X$)YsaY=_rRhwHG|7jR2_Ud$qsgyq~u{1iwJ5U+!4iSq{&=m>N z@qh`FalAuh@5lwJmOES>B7ty}L3yA<toK3EsJK01&7BY{zHOIK^FBcyw|S(LaWh;w zNE!by<tFV)CDyjw@u%9AN`zEVYGCTtw5<>+<R@u7GG9$DPbrsnFtwffA3UHAic|-X z%*ZL7D1QF_R6M@fNMT83xs00yek|ZstK&P!G~&vde23Twqh<3Ec-l77Ou+jD{EUq# zAK77JhO{G3*DjHfqrM+RkycPo5&6EoCDLkvb89cV+&tNsB|BcYn}oH+*rtI+h*YUQ zrG!sNGVu-8jwbEJelPIHp-9UdtjadA+ts6eAx||yPk%O1QdS`)b7qd*Pt=HK;6YB1 z_n71Hy1gU{$XT%|h(2Q9CAj;G#omC=CO(8WZ~6%~K8<+Zec{F5VB@<Gz{M_2z*p*s zxZQLRe>>j1>F-i}xoIZ;<^=r5+8wo<I^tI*$p5a5FD3qs1bjxk{KOxDH*fywimx-- z#2?5vbaxlfK%LN^-o>(t<@@<M$!gOzM;f5Z$vh0wKqbED+M_4>uQW+a65u1a%q8|u zebObYDTWk}$@@z4>!BhI?2Ap@5+F~w9tsj~L1YbvgLMg%!1a5!Sv*_uw6>zUTimXF zQINabJj!l{p){D&P>{~6S^CReDqv%?BzTi46T9n1^8+FSZyS2hpS0P$t)#AYbCW-5 zn|WMGjUzy=KWVEe25FDh6`7^2t3sYWt!rBfN^_-050l{3N>Sx9{9~<*MPiK;77vjs zvAYUSJAIm*67|w<K1Z0r9y!L6Xpg+@Hk;#3d*L{xH;xgD<7r6Tv*T@mX@tV7<O^2V z(a<s-ii>wWMR>`N+>#l>tTV=lt}UlifVmDIIfHL$E7|9F{V~yeCT{fz0*oo@K_zKK zf=^TlNfd~18$ltCQlu7gS8wbbWUV*NyeR@&n=W)mM&wCKf{79H0#_wu8~xe>>{XP; zC3`1KA0*QiU+M7e_1<`QFWV__N^Rz?@_A4k^E~!evAH6rg&seE&F*7NZn`TqP_vZN zof;{`ZsvH|?rgJ$f*X$Y<ba2ng-}Tf19Ub3oOr$wu%GK=wBK%G60`g*7>Q^3v}Pan zF@2G%XbVWCmmcFbL8i#;c5)S}JSeyI$&OJ(5ZZfMeeZU&79BnI3}7J~A2s2%Zwtja zgrm|x!qOG7hs+L!o2EhG!N~rfLL<D86bt92gy?XLCBnLij=;iEX5;GUB>Xw*76d3x z=SLV>7lHLmWt7hH{%~^w8S-cY1-6D$fx}Qqh1_B)$9qr-#F?YC>iFC8EYp*zrqkq8 zwz8F%iAR*8hVempA=3jpCwf4wWHuBa-kwE^gn9|Xo&N@w@RUL%y+R%UBsV&)3m@GK z+;b1n(UwMGpEdjzF@*-QoDP<u=<VDEUeEVy_%3%xh;fcZM0x?%xZ=iX@n{m_B`c|V z-4&|=K%_qlm&d|cJ7*O>OW+d#*ZtS`uyEYqi@^%^o=s=g^JdV>xoBot1@Ak?B~7=d zgu=VbI|vo6OD)p5qe<nmPE|&dpGF31Qn=QAEUFw6H`cCVxmp93(o&6Fz%HA$J(jaJ zV=~Pzk*VvwAbMjFNQ$_s(vR{)$E3Q@!H9fWG8nl4Grbq31tYho2g5UAb46G^N<oJ4 zDk&LiDgTb+P(J32w9{D3ufZ1V@k;YDA4@LDza5*B#JkNH{S*OiJE87&krTT(sH5D9 z?)?H)ykP`+ksH5l9hm|Jtq2a$o3L@~<B1s8a|71^`I1!RR|S3cSTdL)H$jWt%kWXO z+r9(~G4Mzxc6@=wve1z2)?G(|$`_Ca*bHCYso$f*S6sk`YT0lj)Y83_cdA!JLDjhq zQVk4L&GSfw+YTvJXvhxx-m_yN64*hgWoXn83fB>CF?BY#owsdp3&hmRU8zwfrsnr? zkh&xZ$?Y;-=&<+#W?V<LM6<H479+34o2e*aO*RQ8B8p^BrS|4*uO2z--9EJ5m$e|; z7R7lr3H(ikOBJhCFB15>3NK~8aZe^b<9kR3?*O4v=t91xptf<V%kzv6E)aHq0y|!G zGjAC?IoCXk*VDg&VJXVQj>TNbfa;$BcuCFz&L$a6k`n>&k_>Z^97&QR6G)DAk#r$O zh@~cw6bcEZQ#y!0HvzxtM@Nt*lB@>6E64^VDMeayKS@4LAbHwV;#)}aP(q0x7ZU7Q zpFsS5c*B`2Zn)(voU8l%x_f}%rs?U-{a_@uRyGQ!^XCrpF1f8oj0;Aw4t;iFCp5XT zGqgPWz2ur08<m?S2!ufD>JG04X`nKi5H`;S1U|9a+>0c!8CI4<^l97Cqc;F|2r04K z;Q&~gO425VF9zFR*xv^G@oIS*AYfk?n}{DQ%mnLs6rQnHV0i%AC98M%y|~A>Wc6mF zc5jUiX&9t|%0GdXH|rX<5{BL{B1vqXmDP#NFCg-ZlQgYRdAyC_vw0iMTFFAX2yRb) z<vI|c^^Rb0IjS?IbDz%soqapqf~yA*MeN+|D|ov(RRwo7@^*jHHq%c@UG4r!f6`{t z!JyCXcI===T!FbB7|Rc=;qSfpfw5#?>{egdb!f*Nb(!0d1MgwPp?q~JHDIP;`+#5C zmQc>>uw0SH!))3G&WVQw#EBdQ&Kw71u(&X+=A+4k8!W|nofOaKaSO4R5>)ObpBE8t zu>z-nP0z5tRLqfKeXe{!5}9kG$+~W;6TXrI&o&o9DMXtHSz0@j!z)ZZUp?)8+fEo| z)npAzT+MKez^?!tn?w*Q^$*;07>T0$ABRQF_+nFhWWnA<cMq+QQdrY%QZ;lGi?5*| zvv6Un>`H}9bPpyV0?Cq7Cf$WI!<NBUoj}VAcNRoXxe8ZlAZYzuf)Y6>ms-VKB@U1i zLN07JqXh@cYIk9Cyjap{oQtK91FEFE(nTcnmIE#m_0qMQ3lZr;eKcFF--?8hg(5e0 zOCZ*X$AU5tz?dQpl&~CT$3O>9IopTlLdi6cx`?@%o2VVn&dSSvV!ia$sY{n9%_F?B z1}@Is3Ia8A==8YtU=0i<7)^fc8j79u5FQx6?Hdf_ZME#xzQLec!Yf(4!5-nKLO8ph z1K(rzVIi#mlr`7?YFK{+_gv`y9YcAiFzwH+@5?4E**>hk#2TsS_F?rIGARdvQmEY@ zp#*Mfvi2M|A|s%-;(<v=*>kLZTo3U@7m~m%Q_Za>v2_%!oxdZ|4gon;Lczh0JWwSV zJ9b_rN>`@h6E}8I>5bH&Cq{o?;IAoMB^Uaa1#Zn9Y9R&wxWGS9dd*kh_Xu2TNKa5+ z859{<eygjznlzRFL``@r_)$Q#|3j=4yI0<1r5Ux{bd}g>J&I<YV`RnQII6pjfWH&) zGgG7uq8kYV%|5SDeeU3|eFxPdGx`yo^3))&S>TgUOnmT$7dOsZMmN=KVD_-YAnL8# zev49s0q~Zx#zpcZN#-VyY?3KM<#IPkRwv9Fj@IHxw{QhXP65E1(HSn1b4YSr0!fC8 z<ZzN4mOyf}i)1@vk3k6}GN)*DQU4-Ip9GSpTwEGS!i{BKaUW5VQnr&QNfrPQ<Lwvh zh&%z*aocG?w<UOpY2qPtspNdJn4qb3vhNJ=v9~(VYgyL#@ejUHLY+wg2juJWOi%lh z)|<~YR^-NtLoe5!^pDK{eb`FuN;VQqQwFT(HX1hGmsn3R^d6Iut`?i+pJ}U^uF;Y@ z5ovt;`IEMpQA+A+*Xy?Vmb%>>sHCo@{-Qr=v)QPjjH~sB{Ye|l>mY@vrGkFAOchkZ zjC5t)jLNg)m~#(7#Yla-9LDKj8>qY+`f{60SuvbNxw(?D$qlUAYxrllrlw!8DtO!X zzH!fV8ronjf;tD$;R=81DWu+Rg`a&P`gOG%cXW5p`LVm(eqN1s+%u+;$(ryxq43AK z{4Deybc@dJklc!07&^~KvEnn2$VH|ni+^`p5U1hb_-0D%b77r%jhRaaHK*3R$`|RK zFjM1%6!ETrNih;S`XxF#+{2^Z?3?fC<^DoDjO2qt3jDDEIYY0(O-u@z-wp=YaJ<88 zyp-M+NADu|B3BewE{_I*?u5=S#}kt=yaP}!GDb8*kCYewsvvs81Gts~o!uJ79o%w) ziB;e<mMOxIIF6Bw3m0_b7{|D9<RJVcjLE?pOo%lJP326IE@B$q%)Qr2+odq*CrjmV zVR^#QziRZBOl<`)l#2OL0z75cEuM>*k9h`qfIHC4M01b)cR*6fiBKij2w(vLr)oFB zn(w8XC|gC{ng;aiol86xjq8Mfs3GDNHzH6oUhEmj+klLX!kZVLqxeQMk@(a31{d?0 zx)}QoVcQPA-0Iu-Tg@Rz>@tm4K^Lf8*rVMAYAVQ<`%V6Xz^Sv8&2Ae1xIL^(PqX~9 zYc@|Ixl4WH{plLaT*hbWJzk!o-s3Dvih;x(c=l{`y0Pp%9LGna!_;2}s}n{zE{F|4 zr;ZJl^qoDMmJFLI{|#;C!g4beSy)q{v=(y--}f>V%G9!iVqSTkHl|-UP&265!e%y) zeUD=sHw*Ch0Om&X2LB*4vrC~z3U)zed|jgd?2|hc#(hq05cLRBjK$uji{AodNuY}J zZh-~XtgcviH0%6J#P+Flb3cMUt0>wQ_`a8-Sfdr~Hank_(lDWA)J>aNn(xJFxOW&V z68O%z-*}F(rnLnavvX9sdFEn@atD0Jj8-&MwqDbHCB+$+4qu^Oz+MA!-wmc7Wa4ng zgIplDhm6Zq|B(((w*R<5=5)tpD<;j2$&qT$QA{c@Y6ctvrQi)BWy>S0{{+!rCf>|M z2#5-0qlfPZ%3~o#?dd+Og`I`uf$2<m3K=)yDOaT7xlr<i2VrjJ257?@P+amY9L5m9 zs2NM&`GmoV@DOW{%~tLvUxth0FzI&nG_=6Q9t538t2v*D9!_Ki7LNsa3XriY@a9e! zsJTk<^=5zKCnw-{+UdW&0{Cwe@ZT%G*}O~qfA|I`WSy<DL$6Y&sK43d>xUXl6zN@U z=XB5oDj7d{<=w4*2<P9J-xj_hzm58|^K+T<H=Vxu;eK(+&u!grfHY9a5s5d;1)62M z`37-bXBoYotR%Z#pW2l42&Mix)|qFJ+*|L3{-m|0Tu7}8{WhDXN%VkQOcrH^2Q0y} zrw8OVOMH<KHxTCX%(ouz*YQ3E!i&zvHqFRX9EZspJS<#w4mt~--1se;gSLvSAI3{_ zNTSt_LH729i<t2dl*ig~iV2s~v?R22%YrMup~t|z04$+$6lL5fa9jzLRI#&P$qnGa zkuSXPe9ex5r1@wnvzt={_e!k!JKjOrMM~thgs+}Wm4^sd%y|;73?;YSF-n1jK?WiA zh<m+cXiZvR#Etj`$z%lI;YMxlZeLL~0g$AM7V4)zCXk?0TvtFU-40Vx+Lcs#5M(1$ z^AW;Y3$Y+2b9MQT#}ywd6o=Rp&$}tge>^F$aB1}-=8;>DtNI`-2MX9b%dR{>ybD)1 z6yaAv^o10_p$=xlfNbkz7(nzjUNKoPqAMaI6;G?!*}vpc?1;`tDwzyomWISjNj##f zILF1{Fjx>BY$V-9*cU*#(^HH^PD7c$bjhS*tdA}%+XCET@f=yPvu{35E=5G-5`6w8 zF5`<6$qkXIaLWs0@hE22ZBus7W0uWHrwZ;{ave)>rIr96m+Db?yFA}h%xHv#4~}Rn z9_}hZj^v4jI493<%!8ep=V;^^y9-8w^{PREDp@kMmt3<xm?-An2%VY967K5c0*3`= z0s%iWxzG$kNFwxqds-~SHKdrek(O9bC3^N{T}pUmV}g%)OnppaY$=lHs-Lx|uwC-W z+Wl*hw~gXG@f)@mmA93E#|iiud6kdMGMOL$Ch{_^)qa<5puDLnuaZiOdPd-B0#AMn zFIaO$<S$FWTn5C4c6A{cO}ZaM)Dz$Txde{#m%#6f^OAA=7ezLHIq<$M>TU<IASJiy zI5w%{y-n&0FUd)0RVBxeBv8%KqTTYc9kR~fA}<<Ky!G<M9I6!jy&&az$?Al7Rzk52 zfv1&pK?<&IdEUt^xBBDKLy?!zt#at{7GwZgEsB+vVVWM3z2dbBQq0173b3w-cHL60 z7~xc{#B~bNGz&>!o(FM3_$!E`^in(f|A)0^&B!UWz<>C9KvLd<COVox)rV|15$Ce0 zk)u8VI#Bf);5s+@4dusKQ^X1FR#P%x7a~6y{>jGCQp%7m<&<gdnUv6()}GE+oOr|| zzjAvq{ofRVbPd*YBMRy~EH|(i7rlEB*Ed5s*0QuU&q*GL!IWcsa4WY@VdO@xI?vhf z0;wF$MoQiN6^nJe7MB8Bw!Kl{Lls`<z~2}6849m=;4ce&q{2HK_~U?=WI^2Z4lF|0 z*(g;S`^_89U?p+JkiBtlLqS|Mf^pQMi=dO|-H}FFvmh#o_=g)2sL>fYq`Dr+SOEEZ z@kfb7z>g#T7YX=-ZTv~Z?~{Ok$HosJz9j*_)W&bT5csA9yd2MGsa6vIj|BV+l3wr0 zdV(Z>P9Rx^sTD0h@h{=cTg2A|uX~ZMB*`-gBwK72xx{~wfak0YOftx-`Xxy|Ng%lZ z2be^PJ?QXaIX#Y`1!}C@yxPoK;(NW#tK2Lmp0{~1JPmTeqvs4)(HAh+%2R;y7W7CG z>lGxi{WM{0K%Bu=(WKaWKp1So@Y2iRGmb)|va2li7Joy671onSi8^m&2z#mu)Zp-Y zW4&*v+-$y+IKjDuZse#3KpLpzlC(E#?hA$bTFo0s5|euYk@>f5N=}xoPL>7!S=O2| z&9dDgJyx>(Ggx`EtR-_Sahn2WdADX2E3mS3@AfQrn0>U)x2O$ffadG+rGN7$tv72V z_Hg^vxgZTxevr_)zoDIbb?iC*fI`ak>6yKBIkI0d%fwY%j-t$UnybsbrTA0NBz3k> zOK`+_*cs#KpSsPr%EaXhm#+2Ak^?F8{jbH-x;*4Uf9ffuUar(Gzj?hsbtb7FRBD$; z9pO)%LFyYwZTZ^Wr?AsnXKr9wuzdaFo;^Kpfta_c0g4Xsmd0JUOBa{%;#Q&!a<PKm zmMZ763L|$7#%X++snE@8pD~+oem%^pp6cot%f9fGH=t-9sn7-AYwP8sG+36#RxsV@ znI?t7X9dxfrQ5xub3J!3lDzG6iJ($LVGd8mWRMd3){+N-HFvWS&droKe>RI#q;h}i z0obNbF|LLfZkRPf!?B7`4@_>w+{`{DDVRS>e!du2T;>MIBX*ZGl{vK-4@QS2C*kPI zK7lG;t%j*0+@jkWsO-!3%X`goa6eN{N^oTI$&k3DRCJ`lLJOmo_~mQe=Cyph%jIj_ zREW9a13|F2xu+6LqaAY3D1@`&by%;=g6z0f6qOU7Q~lK%cI1aZT35dLnr|!J3$-x@ z`Qr1qtvc;Br`$X|!OmAE<{*N#XHdSriRffHOep^OGPz6)(}1<ujfquQYckJ@K}d-h zgiXk`{9RIx0E8_9yHp_f-BNJ(y?Aq1LszGvARrVEJ%fO=pp{y4!B93m-d;hQ>@76l zrOfr_ZiF_S&2BeW_L?AWAfnNY2-JKkUJVxl6#yAyN6u?LV1p|<2jUM^br~e3u`;%U z_~tGNoy6dI@a5t$6m6sVHyOMK>CAulYa8Zrz#zt*f#hagcZS-NvfcNYuM2H9%NRL^ zp}4hX_j$CHb)7deJ?}Z=RwG_^=9-`h`SWQrcY%*fm&f|kwVTPBA4?KNek{rUEFiVs zF@%5}CXWC(iI0BT1Ho3BRe1KCKuN=ieeo5$3!~R%2BV9%a!Hm;z#GhH$`Z|rohMdn zq6O9=AR$qG%=?r^d+<O#?6U)x8N^-AW^p-H84`XhTJNyk2tM#<Mj&fVhwC+(^+qm+ zOX&BL%mTs@c9KjpJ6JM%EtQ$bryn{5*F;X{K4H@&AUMeVP`%Y$O;sAHypK94>?25D ziIYhw7~WZYX1e%<l#hVG=cZih^2tn;0>=@uS(pfR#8zn%VLM0I-UGI9Zd1_Y(u4|I zb8)Cle`1^UqE!CGCK!Q4MJ<tBd^z{l9BlCq4T*n%a|kwoCUaa1+&LY%awJpk#^EjB zn5@CwfSI~4^)}qj86{J&$j1HA(@+TLjaNxeaefv#KZDNC9Q$Xqia#M1>F{7mFqm%R zBe^-jiWZgvmL%Xn<!c-l;|w=RBTdwdIe0v@6loFl;Jh3$(X5wpWbjTp^9pPf%V+SF z7IslK!0<x2gC!L1D8!`6L&@Y<rHMtcga6I?YC4pPt&;524h9Ll1#qs)K`tsY6rP$| z7%9<P=fX{*X3V=`snXnjK0N_C!@R-ipyp9W{)VH({p1{8hNJ5N1FC}$Ts_T)RkRUE z3{ab3vNoM7Wg>z34@?7?cEL1}zzkAi1!cVtVx1aT91>e*&d8;d^Tn`CzTsYM0Y+!a zBy!bsJb3Pfz-UX7XtGI4(Fh(mV?li*vG9PYkpOFT!qMUpO(hVvCy86ql?P=qH>n&d zpXj*tW9s-mTm=L+T1bI62>c<1i#}BMwF3W>!YP;4HcJKmH^QS;ls**BM>`SI@!Ib) zoEJ$gtok}ob%ONFEe*mY>z>h~+Iq^_92C{o;Wy6>H0f)j5H>0OLL$w5IYQX17!sIj zC00;YA-KMJ82!oF3a=$;MC`*%C5YpB?E!IyoF9yd55HS1woGDPdr&kj$yF6qA5nF~ zR251ps+%G3GZjveEEQcS@N*Pi=fFn^{A-14;e^i#0^g+YF3_t=Eo<ioimJ43g?h)o zC{6HSsYtaOfv+RH@({FHZx7l}T5(BptiQCQsn&O;KSHn!+exB9;mQCp%5`SdIfO1^ z`$jV-G!(s@jk#S+ZLK*7$u#__Y6Hj>hO`PrRkK)OOCuiaTE0U3LxU5ftn4cVZc-6Y zybhWq2W$|NglsQt>}CrE!oDsNYi;cKkmWxXJrUrVNXswqA%tU24)llvtB!+1h|I8x z`~_t}bI~I6!BvM(N3yv+snC`>k!r0O%DAm!1zd;R4qpo}f-9WTfZar^g{Z1rfVj>~ zX4^{%j4ou(7>r2J#Z>kNHxi>zn$#(^<QHAY#2R<)rv+ASQm}obU^C_Zpem&o_~s9& zh*H9}z^3h31U5P7RAaMgOcgD3jxdTj9A9H94yJ`#rDNf6DaZ&9vw32mS^qs-S|w@B zHppN(am7|;i+mVqAmaM6Fuaw1{DW>p8<=^M^diw^BGFd|AU90pIq*EdG5<}g!fBcV zJ?^|PTq5pVHiCqk(m(^Df)wMgd8~Vxkjo)6XF@KUuej?|vS>-eg9W;S^wE}dfo7eo z1tQWMPo<(K6HF5c%=t>Jpsf8ttR8$9;t5DE8KQYG{6t^HgpsIb8|{+DQnghKsHsSp zwoFmpBKT(IA&IenL=p=*cxdA2bOJG@sEJE8F@-VDX<`*j)SBGRiXNtF)zS(4+xH1S zQ{gP9)j~cN_&ExvKo-13;CX~ct0=bRXEe5$HXXfc3U2em2(TrUsUlJvCY=Jom8%1- zN)eRhLZeB1!+|tR1r<in5k#Y!RLQIX2eG)cOKB%_M9Hi1P-lz^x);()`Qa&C*+OpG z%u_|!pCs6F3#%c3I7QW(sN&1_sESQWtyLlLw*|gU;3{%t5{99Z2V(?*n1BORl&dMo z#)+kKJj~JAVgN=!!lX)=+=Rn^g<+iX;aL_&)4hyx0yUpuRVc`9FLekUVypO8(L%#! z=)~3+sQePlkfDKMXt^yKVQi(IqFL9SB~6h?bHj*uQzRDc4j-JbTB9^YQy6~FjNK(o zQPYdeAG}M29H|N+Crhob03L6OM*(d)INCsA_-5Rw{R4w5t2J7|RU;)i95O;yt3fu9 zrPCnm`5LaOlZ;x*NgvZ5yIMe5kN!&C3o#3+;b=>(V46r^URPoTWtD+gTjR}yWB)2i zbpjr5l1n72dCJ*V;EK>v5l=M>)0S4{ErL%|9@E&A5&02=-SpD1t;ErG<=>`>*K1-5 zV~*FvDwt^Yj#bp`{4{ZLS~`JWA@F+@P7PQZA1ClX0*(#0$eA)(s9}P7gh`@Rlw2BQ zH2JbUI$r{DO94ecs^1^afz~o4`9i{_kICUXHg)g;lSbT|hi~y<lcxZ*$CWg=HPE7w z_6Jr)c<)|F!^FwD)CzgWl*zv|T1z3d6&oLYuGCm6LD8(A&Xl?&fqCm!f=Lrh6A8@L z(JoNdmmq!>^Dar|&xA)7O%c+TbWOp8W-&1sgKgGq1ch^E;Wy3A$}5S)RxEcPK)hBO z%IW$MqU*U@^vYZD2A~n(g)m_|4^1u9c5h4~Xibw?y|EcsLtvGVs}qX6?K=z5ZWfPX zS*k=*C7sqA=^vC-H6)gj)f?$_B~>*G>3+SDj#5&oBo$!YTfTFgGhyf^pw!bvjnSEW zU?`;e>JU{_O%q^MyS^1ErPNh8+NPAPcxWGSEw$S$q#9uFl86B(oG-?4#xl6ns4{9& z?u#@p&iujmX0jGCg5k>s!&-~=%TWw+$sZ{-w|I!Okom}7xeaFLk!(fmDI{|(_=dJ# zD(P?yrJ7L|S5JqZ%xpbNs0^M2gM#o*pR;c5=3_*M6wRT&1Jr@ae?X{L(0sbL29^Z7 zs@@9JJVNPpn?md%1Z7_A8C!@&pHK;gu@ms-#ZR*F*ASndfWKS0^X@5=OOjgw@Upnx zW^pX>mn5)w*Y1}35dQ|=yy=(Q_%E=VCiZdyel9<f#Ud;rekR_$>2J63e<FT5-pcQs z2356Sk3uMN+2EYe(92)|2=1^6V=<gwl8J#5?OOU;-kpx+Q{c>2f|u;X4g4!P&z8?u z+-DCI6g-U-yQEu`xuI+Y6KhI9iJ>zCO;8F3Ze?SpHASSP(y*Re(TmZ14bGS~s^YbZ z$TS^n*+U<xGGs_*S*e-g0f{s#hl_NXf@vaw*$f^?tDvkOPlE?Mmc^~7)OtESjdUxd z6l29_%SfZ=>2!;!5FZ~#p>W(t@{uxpyS$e&q%(g+tq$p%y^;Q)(T<i&xIWk$>Dx-m zLR$^zCXycEwt})j(0dnM&ZD5VX5CUHMU&LfzohSP5)i6p`ze%^{go1l1c&q{L6C{V zpTc)ZU=q26(_u;A4&`z>tPAyS{oLyOG|tcU_RnY)f1<Y_9eWZ!R#v6hyf6<$2xrAG zU<8ylaG1#6(oRe?tMwGI0n(YJr*Yyb7UD;`FjfW#QCbJ-WZO|;*c61{G4;3^4kgv} zQqrNzda1$7&ypGxA=F7F^+tLINy8ob6=NAR7lfz7!%abSyG*PtKB}svtiJ|5N@ES; zs{wKi;>$(ms!~31K_uyqC4X#57f{wm!=%)LdG}Po%oI!$3CuPP2Naa`GKe*fdx~(3 z6-kQEr@?RHO>&7uHP2`cfqGpfW+3W>X-mEG7QySlqYxk0unx|ItD1?lj<ZCp^wCDm zqCwNQYI@3Jrl<@mo2dWqZ_@F1`a1qKSt79(Td3!P+L!b>C8bWRhB2u(()mit@>rx9 zy^&r@(rA?^B0PpoB%P@u!6MjyCVmz~rcE!1@O0*E4%wy%R)=geB%5e9L3)XZ{EWyK z<%)z5H)MuzDZ%Gp79=2Cm4k;hhErZuLTQcRh{YIAX%okA6i9n!Nvk$nu%s7_m7OWd zt&>C;HDcCRe@Ym@oRq;pFtA1|zM4Nv`P4fpK5gwK%RxfgWQ4S(0}pe?$sz^)l9k^h zy`_Hd3|5BpT;^<Wiv8oi)Y;Nl+Ce>g`Vld*LpS*_(!_@1&FvrqHN$QE?}$G>0YCK{ zEB$YXpMW=S`U`FR*~E`az!%#1BZxmY0iSQ<e>xrbvl8%6VSk~>{~7Uhe8bF#s4W*m zXPjnU8hdtYPpJlOwo*O8RJ*_JiGS11wUYQ36LNjk#$QAH-xKi9+xR@<pGd$zjT}Yl z!NfnBn7=Jwf5{(jUah`r<G)6C9{YO&{&^d}jQA%K@K4+LCy0ME0l%Lue<ks|5^BA# z;G3!$-(5+P|0a-Zv$M!0enUbQedF;T@uc<^@h45+X8I7nDFOd4JN*}kmtxBk;>Qnd z{1W1q@l7`UY;|TzE=8;tsLaQ-f;a0kI1hoq0F<%g_#4}0tYdAid6uJ*+9#aIp-u{s zC)~t(C$BB9Gp|nrJ@Z-#2=Yors@O~XEkbrU315<gw<RQ;rU}!Ku=7k!HPcB|E~(B* zNOiKNnnEEP5C+5!Cjf2a0Dao!%yd{~ft61=YsunTu%J71s0T>Kjlbww&c^^jIqR6} zG-ezn02y~N7{c>S>nZo^h!WbJ>9yxxgA66^S}MC9?WdvhG9<NkPbE20%p-l`Wgv~_ zMFs%~Y8=)Vku)(Xtf!#!mAcKL&hV#hAoUcbZgr@CdexVABdJeT>a7m-Do_V1OZM-n zx~l<!>YABq8zRuyL;yNPX=gI*hw|i#Vm#X{CEl-3l(gC5e-ovd?NQ<k@GS@5&MT-# z%f@S+BqRI_&`MEmkYL!I!9aiNHd2pN>PCn6=dbuGr=8UMD|MYi{j5KA2dUQ$lS*xH zsOR}puP60$N}cXl%Op}KT1&f`ucR)+$^a>Lm0{V&t;ayk8?unoWSBt_QpNsB0Ceg; z6Wi!yxxU%A@aasSs=2m1)X)1<XOQ|!>}A1%Cc8X|`mw0OZ6*&=h;u9<?&>K?sl)ps zf8LqoJzsdcS8+1@sk2EvMRwKTcKZ$HzH~~l(Hy{{Sj#=14uC{YbN$CLwQ8rz-h0_s zBdHvn?a|Pu+@Y=qb)YhoFmZ8~tS>dCF;yE<#ZJ@=W4x{z8ON4e&zg7($#A%yPZ>(x zHCu*5IVG*0=HZ&JKf+(;6y|=u%IxC4=_TJ1rjz<8rA~KbS?o`pLF&!eNrSeX=1|xA zQ)iO8RjGpx^;Mt_R1U<dfV-@Lnjdjk2Oc4tsTLqr%n;yISE|F}82=1&m~?_>Sn5#! zw+Th}Yhi<x)TPrEAPrRBf{eYgO;y=~QvM9cR^XLwt25_S!Q2vEdMT5>fTU2Jai}kp z3^9k@Bg0KR(FFI%RCAc&Y6AA^Y-=5^-7i9hL}$x=mL6+zP1UVpl0>m(v*oUnL~K_E zkNHzqQ{4BIy4n$ErayHpsq2-x+@U_tpSq6Jw<&d_Lwzu)F>i)7B5#d7BdbPwS>ZWI z6?-^=Wco%c4nB(b-{8&5Vw#QLbt3Q+6Yx`P{2JoVPry&I@vjq~&o@-ySyr#vN1tp- zPHD!zz|w4hd+>_#5gkUf$v_9OrIr(My4iGxK{6Ql)ckZL^wfNkljOtaeQUmf`tA$K zA)zaSC;X`!N&V3Y>KPo~xBF8!llm#8PIah*{?x6cE>&vRB>oYkE_Cau>|E%m4b&1$ z*bznZkE~{yme}~5Z&BNs!C{)gdPkgBNbTo0HVu|?wmPKuf;3Qh7LJ*@<q6cBAXiH1 z@t>EFDt0gdu!1CgLbtAo)}U~C89NZXT%MFY3G%H9Gm~5%AOKw25=_B0kNHz0#7}er zTd5y+#O0bLUCAVgP9Oz-!|XU-3hm0^A%E&rQop6tuDQ}1{i)MP{fJV#rb|bGI#Bs{ zEQWbi@i4a~TOUce7O7%k0-y>xa4(U&Yj$+Uv*dDJ0+-3kMfS8GLoQ>Ki)}LPGK3eC zc@ZppRKk71=4))3K@GM!)bl07FVVEUVz;xg>m@lcegvHozivJ4F^C-;IPH3-!}t`6 zkyx2iAcm(hUDG>1{nJ-++4p<0O76;Fl|OYU%ef0-9m+Y~5$7>dCpL|8^MR61b4X|T zlUAFjl(g0%4T3aK`9y;E6OHihuS&Idd(1V(NxHv(E_EhHb7^%*zx;=<?Cs_dC3UIr zWq;Co^9@4GAQoeUtIm)eaF{5`HA8kMQzy2jX$)8YMh4a-nda-+Sh4I-Vdfg}5A$ah zB(uxN3@ZfFSpe*5?s_+IPqPtglT&lSa8nVS0M05*!vj0#Q}e>>@$Jcqu6+Xc4B-mY zl1=I1)`I99tU&F52V+?K+e`Yrw`G!Fem$bodPM)^Viq65<s`gYpN7E2*8~SZ>bcI@ zeUDr|HasqD)z9xSHsSv41CNrD^VM?Nr~jQ+abH6BU8X&JHYj75uC}fh&hU}#I7c?d zGpIO`ZPqdI)$w$Ioz-#rBuw(skp-jqsW@qolfqjgm?{{-rN8!3`GrX!F~@)png@B< zYvz(PA{Rlp_D;$dny~MU{uE^eUtwt`Lq0Gd*edhrXHe#<=eZpb6C4iwM8Yep0QdTr zS)|nSY_XHkwdiF&M^Uh_x1J6?I9^X(QXJLA^}mekf*pjT3x*uf#d<z0U8LK(pkmVa zLUW31DQLYwZwFN6NIL6F&{>ZRlogS708Q*@DYP(-=<VJS>jpiyji6K_XH>qHXKBsK zB1-PaccGR4BB|CSln`3$ketPbZ~Ys!S;;Qfb9q1q;l20T>>grk&@<?9m-i@e4{f#` z7}qA_4%@O0Cn>ZQj1*ywpZhOlXSLjF?zRV}L6LBTWW+%tv@p?FWuyrAa6&Lpt-$~t zbL?CSHw8}74EGUks3TmfOSrq(!s5bNH?7~1idB8?Fo3Mqb^^A}2hcj(Pz6j6LGy>V znpu#PyZ(iv-g>P9FKD2aM~iqYIt~qmwf=dY=xz3}h<2DP8pPg)C@ZlbIx`d3J7Wc~ z7H_z9I`&8SsW&oNq{}I14}DKLAg=Ff5kRf?Z%5kJ>#t|hLVQ!DrXfjH=#T$O6F3vX zc^lMm6c=-R`Z+(*)=aKfmNM7q!kKuOlaMPw<pRoj>Oiq=5}0++JTTLVv7F65dl%6@ z`>jdDpv_-zq)N6!YXVh)2UFmxE_!p%0q{WrPf{(blw$kao?-!choQHCx#YkvuN`v) z;vXJ;_Tu+Ze7)&D9C(RQL<>2o=SK?C(@}rTC>?*}5`bu<^&8d`ZIIuC($A0NrPBoJ zsfBQ~4iD@hw)L?cY~=z?>@JVYg1IatKUyGc1Gk@A`(7pwPDeS(o&c_Xk-hC^$rCFs znuEOyMmr?rQv_^5_#5-zE~dblvWR@{0i~`sU!~Gw_K_2ACDpJE-Goejs^{0Aq@E1` zxOY4QpF=Ac*^+~|z}?%(78@t{kPVLPT6^8#c#aGbaFpxiH0beEym|HfTbZW-{z2j| z!<!ec({{k$LHwUFb>_uyM*x5l)tifn=M<n9zuCs0MLg#q8GF9W+LdV8)zQB71Wo19 z1XEZbrXZirjoqmUW4G(m4wzkCR|UBEL_J0DSLOwckz5_xg_37RLZ18p4E)X%dbwmP z&%WL~J5T{uWd;26oX$MY)jYc#>M#Dna=w@lX8xJcr4^*#$KO!Yz50aRwK)vx!JzmK zx1P&zpG`@*eo=-8jX~e)(9b0OI1l{@(AP>FYX`H{4t);k6Qk=!GfTok4cl-8q+uXk z@eY%LBF0u&5---L=j%4p9o}F6*_U^#IZQ*&a)<O4f6_LyN#m7LhxA^OCYBKUpFnDt zu-2i!+@E!wxsR+7$}WO5wfAFR)T!IMyU#|LU5!S3!jIkEUHH$bCGVNNicQ&}@D5zD zXdMmXQBHm}eJS3v<*={5=QkHdu1k4i8gyj#Fe}_t0N2pQ>Ed1c!6o3jvLL<!k1NaC z%p?%(?Q1Ra>2KMuIs7g5j4Su2OXIhm#q<8|PdM^<6}|=ERv4X=!<;xZ{@X!hnh&8$ z+CtH(aCYmu5l}*mNPe@5(rxlxL_)xuir_r0VpS~5?#17f)smGNkAAMRil;2Cqnfr% z8|r;)zug?pu#n#&-)tuC%b#1!hXO)G4mEhSJ#SMr6d2+?-Q9)JlFWkWwKzO0A2B}$ zi9(SpP@*~TsvArI?+~e)bsB+!bE~l<F@C)FVu%x{;(Z+Xm0uSZSqaOLpw@iMhzN~} zDR-t&v+(}$^R!1ZW#u~%!`-a#O=m!msxEe|I1strj;E#W5pLG^ShHT-SNiIi^bcpC z5%Gpg_Sbx$3QDLu-HO@l8!qkM#r~$N-eB?SRq#RRpOMh2^~%RtByk^}YXNT(IFDF^ zo*9#V`0C)uQ4<C8xM1R!b&diMH;iDf(!6C<b}#jf&;CfG!WN2)5pyKm$5F-`M%v9t z;Ji1C1Zt*=3_$*p2`AvqtH}#({2s(yv2h7_rU3IsvzB;%IZgatyl!Vd#v0lT*}Z(_ z`^fCDo?^Q9SZw;sc+HNHbT1{O<Fo+sYcMx6-5)ib?Vr8gP9&2yxP6hYy*Ha7V1kNZ z6m3=9JN~4tW)DIISDm58>itRE%)f**UWujtbnWID(!s7@h7`3u+g2%KxbXLATahsc zj<*MKJzL<O`?=r{-G6`X2(U-vg^{upy{F)G7RTBwro%w`nv?edG%C0Dw8Kmgv;<LJ zGh3vTvqI9TIY$$u&%$Og+LV6!RwJ*qW}KvvPXL({kQv8z<q}%hcXYq8o0;i-M*9o3 zcA3_mDB<aR6C8md?mdXg_l}UNf#T_im|V?yl-!E-)SC`_l<f*Gm2i<t;Rg#GQv`&w zlvZ`_dW7b88Q@;?JD-%+OnN1B>gaHDz)y!8`p0!x=hER>B-Zm*wanDfq4eWny_-pO zDE%b%=Jt~`GK4T+;I~VMGez*MQ<KFnvAZ^J{X$eA+$|kS-;8r{B(_IsC=2DX#w2bX z?xEz?jY_I3^DuSz7tWi&^d*(Fl6HarQ{l=@;LU_rrUCBN;Xb6)N!VBp^y%pEX$qZS zhkxz|sM_H)<Z9dD_tIaA9ZsPzjt-0X3O0PG4s!&u*1REUBoa4^keN$|nHI^TO2Svu zZ()DPvy^SEg`(ly5~-q52A0@x%5xLf3B6A4Sc;a6BT*G2?)mk5W6_0V;a2oQ7SA5q zisH&1qN2-n`bOl^3b<b25rs>U6h1-VuPB@<vW)mF!Yd!d#D%v4syLNlee3NFnfjT9 zKteWC;G5RzDxdiSq6m~YLteMb=F;HGB`A2eX-B6Akx6M~wW^LHqwgb}N%(m&oN!sE z{b-s{HW4xW!&l&;lFaYP1IOPSjKo5UyhV{IE+k}5QshJ+#b#vc;&zJ3;TggNdadF< zh(98{8$>);5?GivkylKmi(bbum92cmNfv>&P|V@mUxkxQG9NOC3NOc~k0RR8*CjV} zI4zXThCU^<xI48)Mo1A+rJ<bAhVqU|PLYL@zvpup--QAvFaItWIQbp^`Un+6nK3VQ z^uLdh_Dr6P)2~Cxz)!N!iofVVYJDG8XG9NBDtxrS4^X%&Q4H%ufgh!C)x5xeA@GwF zu5~5w?SG^JjYfTW4QLqq7=}r&AW325`V^f->O_Qws%QtQogs0oyFaS}?@|@A-(?hO z)bnw-jH@czv?^K!DmE0qW{-Abo<(438CPI2BE*(vQbwbVcq|r^+9(tPw`*n)>OgAI zhvDUJhDCkAu|YZ3$2l%kj)dDBUzI{~h(@WrA`bF!><f-{%CR=iag1^#+~znP9QC_A z)ugtp=U@;zrh)8KF;P)dWT7Z8!H)h7>!F%yJr5l%)<d4Oo(xn5xJVXiC20$3J+hdE zlYY!v;Yk9&f_02O)Pb7^NdH@fH#_ilftM(pxm$di1zxUjD$9b`3;Yy#2Au$5#L{bk zT8M!g3MG-p3j+|kodbZ^8qaf))RJU)0?GIv9WFCSay9^7E;%le^GR}A0?ExX8KbhC zM3Siq^D$SuNcxjxVgku(7s(e0RAO%@kYu??7L#Of0?885r!EaYLXt)Ryd^R+H>Bd0 zlH}hB(?g%TNG>GFssxe`T_mTIWJv<aN*76hBrhe9JS=9RvTRBQNf-dHxHT@4w@5NK zfuzz!@)SvCC6L_dBB>zB^aPTdg#=^7tBIe+H%!%}(N248dTVfuw(~v=1rk@|wt~VO z2|j2ltO3i!Tl}eIz2{pEtlAyw8c?I3MuYHbq)Ix^rWAC!v10y)n78WFvo~+1!z#}| z;|%uN#hP)cLw%?}bvCKTDs`PhZE7jzR`$anaE{}x1q4kr2e8<?{0%YRwx05(?;cvs zc33V1OCPOHrvS?}F3NPMulJ{xarlEuo#RlC@TV>%?;DhQnnOL1)QOX3<z_TU5m#^) z;EpczXK<xE0E*$lQI-_-p6+m2UPBcv0?MnR2#GOjjmdYYpr21I{XC`5&f95v?mGt8 zi;+q%JQGZPL~AgA=__`}aKW;>e1FnLQwmb66wmF@QVdreq&TSu_@{0*XKO~O4(XbE zePwDj0VQ<>5zm1%P<d&Bb%(^dG2OHVaZOBaNrhtM7F9gcEPMabQk3;Iir5p@yL|5n zI!pL?i>re>i$W&0S(!_|UV|xDx3{l9btdg)gi^aY!_`q=-f5&BsMM}5@*n=xsigiq zNovv6ahCa0cR~H;Sx{S(W#$L1$myD$tA`!!&!B@0Zf15E(EJXmuB+XJvjsUgU{m>B zcXu+*p>j4M7~VQ{smv?LFMEPvQc)0Ve35?mKm+#agv?t9y968{V&zf>tkzw+$k zN)C6RKS|Wl@4WK6vb&EfKFvXVp@{PAlS)o;pzpZIPbxXsK|HUByak!K{C7nV-*UY) z_ww8;EID&8&b=u2!raM|g7Y@D!9Z~P8n!3UjRhmg!+(#HP0^e*M5eWvS1iY6H65$_ zW0G!c4i13^gF}`Cm;8tWuu;}@5a)|4`T5J-7W_fFMf4Y(p~UxRyO%T3`H{O!mv#RV zf;HyC)gP=wg*Y9Hi{^0~V0rfkx#e@GB$XVZN%BlrdFc?egGO-0t^ZN|a0Z6;!&owX zHTR){<Xd51RkoJwm!J8y@;Jc5BR8;+$FgTqS`FAHM9{*j*dj0w8VaxB3G4CTNjJ(< zy|eTB(q`bJ#j!5fBaxtBmBBB-pm?y`WtHJhYD|{pg0yoW(}K-JO-F@T8Go_>(~Q3; z82JyXZr147XOQ2+<!f+hH#>KO%cpKcpk|_Q0dg&nu{^%%`9hqvvn~;Ol=)$H9Xw=) z{o(I9oS1`oZ~5vp*VoNvq=t6VF@~Fhcl^ZZUVe8vT11xiTtW*wC-A8?El7ZzNNg_y z2KgJqbpg4C>ykvidk)WuMfT5-Kawgd@ywruQT{Q2Q5H)lZxR-yp_#vY$^`NGyar;% z>9x+Z(q3ZTvS&qUD|SI?Pq>v<_Ou}WLB!)8#500;fQb579qm>+CYOl}L*B&&o<yUO zsL@=(MEn2+O5w7IUDcpJ%0vGP&^MdYNRQS+dY2`v0)3#8S-aB&YUWcI-s8JtC(_Mk zFPG5OxfEK(Y!iFodee;LUOoTDpR~?IK`I_{k6E#mKM~77XsM9{Iv@qy)k<^F-*|x| zN)fM~ef=4>n{${qJX{c5Y-gz6reaeNt_GLFqMh<13=QxZJb#~37`-_g8=#t{%iU~( z<Pd!=1!$ggxDkdVU#`WHjW)pOJ#4|Vfe+4G%I_0|Myv}|UShMuDo~vcv8zQEZ4;Df zK1zs^HA=f+&Rl}|^d|u4EoFABW719gFF=trTt0gqEP<EL7KTqNj9#C@u{pG5o@5$~ z%R}LD>Gq&J6rO;S&DehuNv?!|LAh5JmvHgA*>M?w&WFkzXfPBlD*`46iX1$1@XW;h zZ`cMl3-Ae8V;h%g&XJ7x0e5Laf0)mb{|RQI&3bA*#XSr}me(;qN(meI0goh2+hC== zSkhL}#GFr(ohQIrVaTroU4Z`=rG>m7TrcEDCAOj)3HH(m12wbY%b-1c{|*AguI=I3 z0yWmBtMUC8;?IQx@LK*2;u4U4H=@Sar3v`UZT#oN)A?}0Z6yEv0)J3Ftd=8K`bb<` z*H-zq58QtQCc(&@I+|Dew`%o8NNca))mthX?9ZUpTnq+`ZLdb69%~9><@grX&JZp* zF3KPNZLq4lco2KQ@LDXBVtNJVqA?>swOLn2zosnlX&{{Pfjrh%Cg!x_hTnFR4GP{A znG+gXFgQCu@KV9xOYk>u@D%GpN!f=Ze<t(N66+AO^wV%Aun=y{$llC+rZz%9tyb~! zE8${`<)%;G_?r_NveN#F{P<A!`@u+IV?p!=7~~~f8o@{5yH^PD`H^$BN|#>JEDOK+ zn7`VB+HW`KGLuNZAg8gySZggDv7_WIsgb=I&+oKy+f5RJ?buCL<@Q)jt*h{@%r^7R zcBw%2x&1e>jO$FL6|^tIv!@S2)Pdz5To*N)o1suSxh=5%B&i}@@|78|*|?cm>&*r( zD~#Np@<tG}CKG&}zIKN>mHEoF9appGw3#Z%loxnuOb!}#y47>ymdD6=R8PFmlna$n zH3i`>%=6^n)XXz?qh=0d=eL*T=k?OyRw1tK{Fq(EQ1#Gu?OqQaKD`6Ze`_R6<Nwz; zYW$NRFBSI(Je^oJ!Lp}2>;5aoWk6tD>}{?6uNae&lv`ewlT^G9F1SuENx>0*SvZtE z05bRd6Y_N|eWU3@=9bprk!Q4<2_)E?!Wv;`m=TAkPRiw{9+J#N)tl`fXU(I397tCl zp4yI&8^L&CmREra%gk`EB?M-|Fu5~9>hhW%Qe6e9tepuBoQ^fGY-3{hd2Em4{=!gX z0&20a4)3)fL=L!p`vDN4P11|!*IN~izA{2Gr^4Zi3o-4Ek8^%wI#_yVb^eud)cElL z*zUT4fT8Mlr}yG_%ifpby@ejKbD7(rmf^eQ5WSIz*WHLf%~$HF+sz+<jD3tZbgp!K zE0MXa$DzpF$9CGx<wzvq!e;ZJ;m<9dH!}Sc7n5qsy=*A+WzuR62NPFG7yHvSoBw`i zWwza%ESc>vPfPyY<{LbFw(KA_Nd&_PBjQu+)y&8h6VC@1-F_ghwat8v9QL;VK)k0p zBStnJ*SQ~LF1Zy+vvDz@+i{*Bcbr$o9Vf;@aGd$s34W7-x-{a0n1lGuwz%JXTk4~C zzgad<lCDCm5}W1kGq0KJTLbOpK_s#whV~6C+&WVv%HCmW@vOD}QN!N_rYxDdRDWF- z|8+_H*X7nPjw&YwD>fkp!gtVinpat*==hY}m-^uIQTSL(<kCzGgo9P9i%%_paY{4T zV=iT=#U5(A!537!bE|PrIoCua+<9USwET;_YQ`RE))3Zh&1D=htv7EWtn0+>JB&~5 zq&Fa`j|F#_M;Qa6ybZ|MT~7C?xD*Z~{4WhwIWj~e(R-mjK;p{PC1V-R16W|~QN<X) zpilQ=Y~IHg&p{Gcyp@6UL6X%<a{!;wtVRFfT*As%h3rYdaIH7z)It@bF&bEb#KCBC z6^II=qt<@T+nx#n`CSFkCz+L%V^Ff%s98O-#mZ`<X~0hg>QCXx5QF`3)>+`C*W8>X zxpkWpq~5W$X%81;j|CK=9>(Gq8Kh7-p+yYKqgi{twiEwEo{`((^wyb)^7|LT$gPNI zaWNLMTn$iR<X2LPD&5E;M=5bXip&@y)dq$Isz>tx$aSj?wd`_ia?ahRx>=~!nZ8sV zGP(azJ!PSm=+srkCPY-&8np+P$ESp%7a&mI*f{`phZ{lG1tW*k+%Pzwoz6&ql87-r zt*W*3>(14MBQ_SN!hr*|MWUms);mXF?gGOQ*_yS4)GPB_Q7@<|eoz_rTAGLcLj}`U zHd{v8{W}=xp}46qL;LFtSD8G<x<-8RQDEEoff}pL;&rg_G1fM-1;HTIz7vUTV|BGn zwzx26nUcrcr9+EgxE~5zWWM+s>7ui<O$UEOl4rZ{6-yC)u0v~@8vBN^CTCzk`A<;l zVDChHADqxga$Z6*^Rk4?JIoD~$m4-AXu)@vy9-C`3RGTzs^zx;8MY!4csDd;d1%S* zexb-=p~xMn!6Banm+a{m8u7#J6Lri-Ydi!3@MfsUF@+I)$8^N^#Rs$KW2pkj92&8< zWDAh2Q5L{F4n$%2r18=In+n1++A&;8jjcpoA%_$zhk_BCXI)EVFnZ=zn$e6eX{)!S z;G3VJp@_&aH@2ZG6ggN04fgpYIO4rP<vef+F6ru55FPv`ZdMHqd2je?wx~YqiuVmg z&pgUJ#i#=^v3Ks%QSwzMih)dE7P#|t$X7sym)eCmi?YtM5=bFB2UC<i1feX5^0t^O z8K6`wPXW`elFjBP;^@nktnU}<HvmOLR*VHPk9S$_RGrI19%eZS!GE<pSDG6ivcAUB zV^*?9O!xmoY>-wl@{ZKvBZt2gtlD0@A9tgNu_t{3l)eN8H6djxJl~sBWAnb~Y1!JV zp?(oP>Mi~$p^+GG73U4d6lg1l4#BQq7^hG8RhsBHSbQFTT#Sj&sqMibp9RD1!HV@= z!67RPBbgkily%bkpAl;o-?B6`v_EV@W>$6Q2<BC*o}m>kMxV%k#{@^b9Sn^54l=aC zKbhwBY%G{zJrfBrkYHdt1h*E$wSQ-h1@}Vi&|T8qF9iE8?6bKT1??9K?=wDn*KUZ3 znGYGF4f#G8{>*G*B)X)t-}%wJk$pnZ%a+6T5FcUqlWfigPCmGUOEHlqAJd6>%aJom zuYIy(j<2eu6!inBWJy<Fs55pppuy;<u1}Ja%*O}`Y)cF-F{7ZnlKq2AHeiBm$JE$r zV9f*gL$3l0{oiY>0wIjcJKE_Ja=4Q@oNnbHeaPfVq3|a%AjEz0<5GenI*NZ&5WN~* z0{s03a~$GDbQU*AkFebwB(H%mr|Ci?u1GHqvF&}&pprM*6%S@Q^X*0^y7Qu7#q6}C z;uFQeZHQGeO+{HoQt>G4yiJG81@U&%s>DM;g%S4o;F?xEnq2R*x!y&t+s%VQSbBu8 z+iv==Wy6QTcF-fp+<vIyuEEIga8SU+P_YH!|July0lnmbKCE*?Prtn?6#iKH(77ou z^g-(=Ika%Zmf`~tDkJZW=1AlnUb>|77)vcRV1^P0UfKyI$pH38(+!$X_t*@6Y{%=T zP&1O>MbPzjJ#DlV#FXAr!o^G*8H+~9PnMuWm$NA%vJkR$rU_58LDQHIEufL-N>lm( zT%Nm6<mv|NRd=Xgkcvf$VtjS&9Sk*58r;~#fENKmFggj5Krj&eAQ;&XL?x@MTCp5( z=V6`w`E7yF$jj4;f61!Y2RTUvOI7SKgTNs3Lsao0&<D1RQqw;gY8X_{_kjj%wJ#O9 zdTRT9d@R_!vzp|XxcX1wkln>Wb}&1f4kn*6N(W=KgE@)%c!yAQ8Hb>8vm`_Dj=00_ zHJ0I3$BR9?iN}}_C0T%HA)Ft2lO5&?yqH?StTd<pK_+-jv5S&f9s#&jfA*>o`uR_+ zu71cad`4q#PH4%leysN$9oCjN?4sQh3{1dY{F??rAMi2=@b{SUh@GS>hs>ewRY+U* zp9#@3Hzx`m*BgS6H)h$f&43^hPK})jHq@!L#FqS6oPfbkiaD6sAo`;jPK}jX)IoHh z5d^Mbo_~SELFYfU`wQE0w2c2>X>6$wYalAyFG%0=X7_!XV}}Z)Hlg|Y(;vX_ScG@e zG6m@~Td|C1{o{K)20ZsRTTdDTe*PKMz{u_+{)i;s;lZbvZzWFAKyZ@8UK$8K333et zkH!j{27)7dq<v1)nj?{pwsa|;wosOwab0o?gpa;S?qB}<G=+~2q`Vww!Ul2r<d=n! zxd;?@YM^*DWs*Q~T?qokUrKOg+kv>q*iAyx+iEDruB<ooJlb;vsuoc6$U&HsLd=S2 ztgBye#MW83+>#Tx>lhCN!xy4I{?T0iDVsB<cF!n?T%A%lVngx4)JqugCcf4Iz_yYt zL=MG*9J=LrBm4{m1>vFNqj|fbq%rJbF++te7B2}sY;@GgAD|n(7ip}Thes7tn}xB@ zTy$SMiU%<OnE!9qIE1WNiMRw!qK{;=RXnSuclQ_yV|K(2TZ2Qof}<Gx-i1$9?hICR zmNQmq0W(J9S73<-fyOC;n{hd5^xF2$G|%Yf6n2>BB6jLLUV9)@ju)%tSBXG6@mw%s zOUZJrsI?^@b;1{IH<u7EV|*u`kl}o*HOP8+MlU0zcM%976Z0vfHv6A#C(;jC{d;_2 z_OD0*37PGAjH2LE(8qs^<sC%WOS|ZYQR<U`A~-Z+&21~(F5S|+1PvHPcN7f4>_peT zcO7XZeCiVxWhwM-p;F5JW9wbzi%Z8f_##XtBC7niPBs*d*faO+P;_iJOz>QI&waW> zAM73<J!%upjgyhJ>-r~+kDjv)z0ctkvkUKqBX$>tH<z___QOXKfZQapou?CywS&%+ zuQgM{UVq3A>`q9%>sE;uqvQ54Z-jvZ_5?rJSr{F>wjesAwexUKWn*d!!u%RcJ5lcl zIyad6@uDgy2>--ykbmx~bDZPoxDmtTS8=|xE7<)`uwrL-2{$HSR;QO5ZvegTn0U2> zKDa#_8TPbg_yy@*XMDuw*jw+qksK0w*BRjF?p@zyhYsUlWnxTros<uCoiGT?VM3VT zFg)W8yANK>>4L%c?;_f}9_pfG@A^96cCB#kEE~<vnj16cQOHPsx;>eU)q_I#Cwnqk zrp$(asE6SiXmifo*Nopn)tAHNp9vju#SzXVGq`dL=esebF($`)X7gEqE&|N~`#jD= zNP<My--JZbAQBA>CUa$wsjpi(rU<`eHA13Ik2yR5bLcSVeGYR7ONSAkhWqjc)Z!Qq zahA;49YW%hK^%<3!?V0YUcdahdzEj;Po%z|foifM>kV;IzkN6f|DGh%VVAoB7J< zo&-ixcT;2A*0@}SWkK=YD(H?5SU3Nt7~2Q+h$s^HvgL0T=N*p|lqTNqG54RR>XBc? z%J!+T;J@4@wE0kD$Duw{V_2kP2eGtWwf}1<1^9_^jcP2_Mw^JoQo}$*ZgvF1-|l{7 zdVY8%za_}H2ZlVOfpZ&oidp6F&5$?ShP)1f!;tMYkSDI^a?Z1~LBxTM=mp_fI0rck zb}PfQ!;nK>_3Rw<)7d;pkyJc0w|qyR65QxFryf(8U;GObuh9$Z%$E`paeF;JQu&31 zMZGW2F)6md<ekjP*Z97N10Yffa>@r*=BSeh2*R{_TciopoGW8sYzIk4ma*Y@^E8O( zkx#Sf&#>#S9t3x=w3<$Y7M+jloTIIn$aPRmC3p9^69j6k%X`|*OGu<+PAtw`%f*=~ z{9`Ti)LOFVfsL<^y#vWzWjxBCuF*^Y9b4v~gg*J;>5g?-ZTB9bz@9)9&(n6dLT|Pu zGD>9xg<Af=1y&YTs~ruz+mahygiQZSO@E&UoMHwL95>(_@g`ElTeW;n!5$5e|NkwF zPs>(Wey;udP`TS+c0PQn^n%(3TiFJG(7yP8YJ-=yOWn6xHj;h~?0X1mrsmpsg%yOa z&MXMe&d#fzm7{$^yc2iZW7%6U;5KtIGVff>@xHUb{r1(qme+1}vnzwo-?ziAsYr55 zJZEbJcse+`ZQ;>4fqJb2S=@M~-)>RIYc}2O<9ql|dz9#*@z}-xh*7?_ls!DX^6=EO zrw;SNg|Fv@^P4$!9{xz90#xJ<GfaE>y;bCP+nL_~o~I%&z6upN0~L8FbRX|E_Z}5+ z)#Tb$WRsl6RCZWUZG{Cegd(hjRF9bw$$!0i%q4p>hAJ_Jqd$gYx&tmy;{@BvUcJ&c zPG~pZB9imQ34a9#$kPxnMLbS85*RA!T|7O$W-y8#FL69hxLg@sk-*6EIIEDgU4QI5 z*FwfbE@{f;a2FR&LewC!V}jq~%`r5u2hzRUd!LWk3yqH-QR=vLIhN?@x9zo~0r6sC z!DCjtgatD9JDNp^B%kXjuO0D12V3WJ=%=A+SwuRFWuu<r7K|ty+x#%XvPaS-Hxx!r z<KBsaAx0KfFp3_BX;6&)WE}SOTMXBi6%6UrwKvX6U&P$;t(|y$_$>0odQT|Ye+?Hz zu<nE9CTzFs5s*hmCBKP5@(m1u+_jhD6f?*rvdte#>8^BvJ^jslz`N78O|xrXr&s=| z>5p}#XT3j2aNPCm#9MFm-X(2l@AbYH8lQSsYM**1?M?(jNh>7~+G;-ifKtXO?b_oQ z1aZPAIOsdI4Sz0d#h=1v{K3u;Ms#zqY>)3>GWFhvCVOlrwEx>eYcI=xI2BH4GOX&( zE8^<J@w@y+<S{0bznI&YZ2n^AV{-V5vWy9`+Bj;@K=v!g48z@5XpYOKzzDgu-P7?r z24B-*o<mR8`3LWS<kt|O_*Wj{3=pq3l_Wko7}<Y<NVX)E=`aMc;+Qvprf<0wnLE~w zJ@gfuGIPW4=UO4}wQZa*pRZl04%s3X!dts<S<4N)^lz952F*Hp`=(7))Mj<K&*B_? z$%#<W+{@!CLPwj4BIEohi<}vsU-pz^70S_WUVk6uSfahH&GIs^^ojF2Obv+Ho*#k0 zmYuq7{v)KbJYF{ZLXHj<PL$FmpX7*#nn^K>l$Yf^`;a4f#e3Zpcdy$!#%V6S)9fAN z(=s$~kG=ozRBSmP*e&OAcB)RxaeS+`u}E_LrMAxO5muY3ZHsir$y?((wfikgV^e{5 z3NOD{&j0sbHMl&{t0u9M++Ot(<oZ8()n{LaS3Ss)(On1oy5@HYPt>h<PTQv0Y5x9% zTb+bYjjeds<$2A51Pal#xvdxYZ+d~B*9-jQUf>7z0{`hRJtbCozU&45b}#Vfdx1aP z3;gb0;J@t!KCu`0*}cGz>jl1FFYxdF?5~H<dV#;$3;gL`;P>|e|6MQet9pT--wXWo zUf@Uc0`J=k{F^`d>*2#*;IH-q|8p<!1--y;>jnOsUf}2T0zbJI_<_B^f2#K{@0Y#6 z-|hwed;(lNo%X1q@OzjOmykny)H4ww{!GZR!45edULv%1=Xb@0=ub~ae|q^vj%SX} z#sGGY`5av@CX=#%wr|Ba1%2x@kasp|Kw+~_0(+l;qQjg)Vg?j@B;TF^#m$oS4wH_O z#r+|qYz9B=a~Wr5nz5h*_!XD%o;dYH;N9s<d!*k-)8FYz&)#~=N>-!2NID5buD*x- z;{A5}{}89{g(k5txKF9$y|L4Wx-0-Ol|7B97H~QRj_|HiOoQ(wrjp&^rntpp1D8&M z4V(luE|~1rE+!DSn@?AOwAY{t+Xhha*Mp|B)m!lcz|*(l&n7V|K3S@wXT_HQ%}DYj z6v#6|*$jqG&1ahe3Wj-4m&l%)9|pX;=Kt9v{UA+W=1R|+{{dlvQ}dUA$Q!5eK$WXM zcbUb{(%I7VnC(!Gp86)GQ`<QSwVg*H|L5AC|C&(SO>)MsQQJeIx<@B^G>SRkR@V6H zWgxFumg65r>(==a&~(1;t?@&^*SE%lBxa2tBvsI}#w&nkjc1`yadmpySdv@k|2Hu{ zty5)**H$le>O-|)T&8uxSRx`s&3{JB2&Hc|H!P*i#d%T*Heb%H+*IV$lV?@pHKvOs zzYfLQEyL3Uh5+x;sLQ5w9E&w)8MtCxhV!p)ik+nIWlb$UaGmV6slzA0rtX9+9geK= zK`Iy5rol~eaczqA#B!Ou`!2fiHe6Y#I0(DVimW9#n&#G*Wo(NJ5PG-JKuw7*D72gR z(bdJSkI$yr4dA8=V5nm~gF~*^c9_RO-+2nGnxoX$n`xHa=0!YFu#267*@ND<K~BTH zi+aO)<)B-fy;iO|j2?YUBPs~v$feTtj@ng-*XSYd7IN8htu?+G113`IQ)5&O>))xZ zRMZl7zYo2Ie6Sx7Yc%0W0FF;92xEz6<(TPA^M9&l&}UldGWdkDGob7#Vv44mDk%t$ zpBY?PQBO4f;b)!x;?G*=CucnQ572V?fuCU^z=KJ!RlI`;YV;^-v|?Fm+`)(+d4W98 zr<a<HmoPH3*FFE;O7+`=>$mV0ikvf8$BeJxjTNwyG^l{c3~PU{XwEvrPqx-Zkd^rj zlmW8TTTdws-lZsbN;!g2+yEBNufzX(ESja`*$7xUR(jL9f8`AtuQ^{b<v#b4X4*@z z3Bp9?G>7y=InPU*N8g~h7iEWrUWB^_Ub-Nt$IIm~A`h4I)Ic$Ij`9M+B|jmeX<{<! z=q9l`_rd&^#&fmrV`N<rwk{8yoq-fQIBlMT%5Z)z6Z|uAcq=<JWEr=eVGmg`wr9#w zeSS1HatRJh%+7=XXYk14KpdNpbJ~%d%=qb>oODcU;}Qbw+&u;*r)NMB+sx$GnFU7e z_*>EjbM9`(!5wbhc?BQiW#-r^+y$G=6rF)3^@U>&da`>?Ig-_y+h1f={p?kuhoex) zwbcw-j3zvgZ#cq-eTrBmaVzCd=c6enp7CxsA0fh#+0s2`{}=eP+eE>tGg;43KoqQU zmYa>h>29tGH|iN~G}FI>Fy8*eiYhiumva=mkf;%R0lt2S^*R+L#SIoSq4k2nGr7GP zM}sF1PUk7mY4|up7jELs$65c;+sS$zw$$Zze-et`H5e_7i@3NG;Q$y750|Fs*DSU( zE(>!bkeq%r+n%RQm9$!?vg*xv5a@}l{5m{gLfrLGSc^o}p~xJZI>C|Z9B6%N118Yy zt0aohIJ&WqQ;*v*Myy7Rh(vN0b`UPVEU8C3!n`uJS(`InVMW9Abp>~H2(JCuPzB1= z#p0X8QFz^x*xQ<J*$3d*W{O}jotPzD+Bt@QtOJ-f-wnZDs_t+kLw(WTPkfF)cbE@p zd(3-L9TkN2FHzJ=^Uw`GEuItnQeEI7mo-3BFvfhGM=Z<1T^?y_T(#yN)V`%P40pPV zpf|L|mEFIF!t|3Hks{P_PPV<h4IdR}T7E=eJ0@6h))DAjs3i#gQQoP7emDb(lR$<o z(?R@9m!F8t^&{Cl$50UdhXL*Ix44@{T45^LBC~?X;J49e1C=lE+XZ@!2v3SY2<*?? z|2XI@I3k!5s9Gg{;K?A;$(?!A=#pM$r;NkWV)!^Q)=2A_gURKo)leE&s|HH99nF^P zav>9Usz>Cb((%nRZ1CZ=_Hc0ybOdXtwyYs@9KF!}=z*~#46~m4sS)}F{lZ9O-{6QP zfhxHt-TLBpBnKMdzP+*>*6B9XDHc1BRxbAIPK|A6cxPW`oORy|jEWYD|15eHwAeYG zg1b}1QK9OCgrS9{L!rDXgTK)Z3V62Lx=XXFNZ=RGgnT5iiYZ_SIz>SCRv{~6>=t`- zKURYK=8E&ivb0MnpXY{(lL@b!1-Ltk2-I9DB|*Es5N#+nNz$R>q)M=La#03yh69Ek z#JppuAla2+s{*;?P`Lkxyf=@JvPk~Ng9=0eCwSrt8WkmY1~nQ*G#t^1CJG`F6c9xb z*9$Qb6d}<hYld+ox}sTE*m%bSjYl*d!Ei_->k;oL3PBKh90UY8Jo&!gRnIf?JTp&% z>}U7)&(GIOCQny&RdscBcXjm@%ufdPM%akH_pzK!5>%uXx0-LBXT@TBWoS&XRk0@m zV_+>Ra%XjmR=yn0$M-LEOoIIdHk)%_Anh?V+37#9=6R3DFvz7=2k{DPU{3NR0gVlY z$lAn+N7OoVlna#uAyF|_YUj}*8@nNcV(k#NIVZ3@H&{<C_{!vcTQ!l~z*I32f3Tiy zh*q)&9V0%IgeCg4!sZ<*$g0}W+jVv<@b?cTlh&PY;4Om4Sa)5F#-&%Jv=lyL_yT;m z!N*vPo+bDYe7M25Oj`$_AmJC`3*1xjgYEAnjsBdH&fEJn;6iNnHI7YsCJW<sE^ar# zZj$5m*U@-35BBWxn#@sP0@a0|LMukrF!%Hb3H;->$Qo}FRc4iV0M2Vv%7{AAS*)T< zP-m5<4ycg}KpNE_Nf#E;3LEN8zuA-^Q+DYO1qY&5Xqeny`SP<gofYOJ5r2od8NcGg z#{4hb_aJ*gf5(&e7$-a7!l$&H;0TPC)6r-PQ_ZbiSxvA?43605iE9L=TUYjkSt5)h zFgKZ=tR=UQY)@){^*5O_rO4u+)u9=oBjW`Ec{RvT4VTd#4Aq^HJC%mo17RI|J7mZM z;s|7j4TKF42B$zc5Z;bvhT3beY&l~P2Es!ymW*R>oD(=ZQ%6C+qyAmm#`UX^@?2PQ z<Xy)AXw&;{pr<u7n;!HewTBq?4FB9_K4No#rn{ra2^yX#8vYF$PJ;_u2irlXNiTy9 z^o8d@A$V=3?cC;-{V?!tq7<MyvH_ZkUzhvRZ>#0E{OyN7P&FIus%hlz&4XBnvaifN zTxOT&1+Rk}lLgA=1d-NuV>X!MPztN&aFqePx>9<9>RF=#qBU2AnyZ9!nvSu)f(ABP z@Q@bFt3pLpyH^TPz8cJ*D@2~3b1_JnQPQJEx1-&eg(}1Doao8@o0!l~otd5ZFx;Kf zVD6@aINw#R3j}a80k5)J^Br|tVcE)_;N#(!HkmVYIECD@J#OV$o_Nh>Kj6vM;jJdG zT5aHcW`zxOgHjS~0PE6QFiFe{7NU7cEAt13WBi*2BfmM-?7OF<l~Kzu7PujWRa#*) zNIKfoFrx)a%jZN>n~vM$;fTUqQjxU|zi7JRcS=*s3tj~i+M_o-VKg}h)4AxJ(W|N7 zi|Zfw(nManEf2%Xh)OoSzdua_i8j4A&P26Y7k*$x+j~1zD@$OO!M*Uj@Z%QH@Tihz z^E7hcNM98r-YcJ^u6LNrQC{l$5&Xt<Ez$QZolIhyhsm-Whc>lzQ-jk|VYV17*O(_r z5ynYMhe4GC%h8KRZSaQybSiiUVRq?`g6X*KDHGq%;2T${K$D5JH=?tn_GGerDS2@U zQD-uh8QR7QGgib;2Q$FLz>2}FV3^B(2P0d9c^NGwg6kQ)Ij-sy&yl4Aw;@punD`2Z zL%^Z%1Pq34g$#YO_S3<%#heMIVUTtWwnd9Txy2k#fnXin2WK~rg=awe9GCR{f!t)a zz-fu3E3#eG*+fpfW~|vX5gAbvQnsa@NaVzcV~hExxI-(<QxHdLK6V<|IjW`cDh)sO z==e*Pzz%Tq19d%*c}o_dKVCs&+T$sj1=?da=Hyp7=j4}2LkQ-erra~~J&5d>io@}# zgF_WR7jHtR?mZWO8)a;;YNoV5YNor?Oj=uwW+l|wY@WnO7x~<p8b|XFL4FS%HJd3M z7-4QDD6h5-?v~oDvtjfBbi8@f*A(;@jpo5U=q;?!ZlGU-p7!AU+FP?d<c5r&F_1T5 z4-}|zijALPAbKl^-jr&xofPdko4>T7U@}gxqXot5+qym?nAe1R71P_-d0`U=HYmI& z`nqP+swikAeGj>Tq!~rok)n~0g2@paWWO;JV`{<GiEImoqnd?fZt$k<d7&BUIP8?x zZy8)jPDq1iwCFWao*ci!n2EkXXGz=eF3*ldIBZk+j#Q`fT!=eTamTtAc%<l}5cTnk zoAxVus&q`RIO{Q8<}uzdBQpng6UBAcINWL0?Z#%0+LA~`;GKab(~sTFSIQSqK!LL= zgsnS1Dibt6>CwB;fkIq!^DMt*oG9ZQ6MtGmg}Uqkc|ejul1Wi|a@Q}MT$z*Vd{m#A z3|e`tiJCd$cZ5-_36gd_k7cqa-LI2O&r~|;l7f=nQ`1EY!Tc=Ckc2s7H4qF(l5ru1 z+1kNjpm0G4;;1l-tq=H!*N<YK`G^#|2a8<?bFk*6^(joCCu~njIVEvTN@WrgDC5*7 zhixNdk*sA_l!zJZDXPQ}f+5Xfm%Q(9QgT7pl0SVaOFl-QNZ_=@YV!9=`c+8ZG|-na zq<1=h^00HPyF5?{W>iP<RDV(dj^{>jdrimrc(nm=c@8ns#r}&Sy+(O+4t0-+sl2*r z{n-K%)}PI>Kb!17L)K#}`s}6kUT0$&Ck@QSn;-P0m}E98I234Mm^f}TovPShUXO3a zx8;Ec=&BC+%y4>;;xOvX*ioNRp7=u~pbA((u9TmQ`4386RWNH;WF7blX2#K{`_PFf ze$dKo>DeEuB{KvcNCw^)Rxsq%NOLA6!wsrnP%a4a7@V08Ck6M<G-whb@OI2sbCDWA zhgGJyVv#>*u)fyv=4M=vFBv3#rKE4rbY(8-?@IbMr0d;UqP@Jp)u|LI6Zt3jju+8< ze;dxsC5uuJFi0n1tzw<0OKrzbjK4t#!HMyU@Jzyd4ca-r`euD>f$t;uodj?rQcz(v zW-{SiPDaeZFN_Bwe02?mIl0V)ed1^hka36`?+Q9Aeq7M`57$7aH$Sa-!s>Uy#Tj(o zQusPI$f_MRKoWM=9Ar3}&7Z^XIjIne7pI}tibX!LD3c8A+>kyyj4nnchxYUp8aoyi znnXardhXJ`st4V`_}OAw`2d?2F~Hk4!lraH7WCMFvH(<*n<`W!$fl%%7GcZeIK2w# zeL#V)%oh-x*B`*t&>jGgK6@m%plGbJ84ugGHI#(e7X*9FIf+5R6^JD^_{zF79Z@eE zjH^G(dTN>|fmxW=2WbhmbXPyc+=w4+9!~WKtw)jS8<1k&0C&))P*!(yI9L}JNFap6 zP8&{!Z&qiyfE-@u0Jx9gpA%k=+<_ESU4!XG_>T$jZ8rRO*h4s+0M{!L<!M;+6;XI$ zrrWH)`q^Uf2I24F%MJfn;I-qB(L6|$1qmqk{$i1sLU;+j+#~`DFE=9zpT;j-K3>B1 ziD_a#aX_6n{;uu^|0?lH@re{+KahZ~9fR7d!1k49fSQ}@5u~pRM`rosV7!kq4DV(A z?xw%?>WO0%8BYNco!|=d0O)|bV_?Y??tH7$&HV}O4l2!fvgWe`61-x;=b*F4FB(GR za)$!!UXlH2{{gM(o+4D6eN}`?TBMG7wce;z#&8c_P@f7@)S2F>4W=HbxYycO%C`m3 z#=^Du6~8z9rivT3E`z7oS31PD8=Q*W*PB7H8LhHJ+h6|yf1Kc1%Trm)$18TUW%eJ? zOzgxeX)wF1<Pv{Ng;E&JKMAWL=t0cOLdMlr_r@ZPE^OTb$x#k>!@Z_0HV?}_KHUEX zlJTBp6EvirWfp`-v_U<~>6PXc<Z8pM#BH*SA_3juQ{n<loXHOJ2|`&=&Bq_+XJMUP zg^r+#1L?L0Q93;1ZUrJL%=tjDJxat7Qxl>=j0DLIL9)w<?_dst8ZaZOuuN$3@f?O< zK!d=IRMof?AQQ~0&E>$t2WAdu!!1XK!fK2~joHNzi@p!*%KCFs>`%5+E0w*5{28*= z8+45lV+sIv<PGDHHfMxjOCI4M^n`Y$wM=G-|MdXmz#ztZy1>}g{9ikcqSv8;VNgZU z^UCQCKw|jv7ianVE|dl2!0a?~Ec@73It-|o1f=sj7?K(b=3v??e{$(*o*$q{GM0~0 z;VonWk}0@7F=dfC7alBylRR<~LmD5u)-ZVw*=4CRc%d+_!aI@yYQ6bpHZ2nL%1GSO z`ftZlbm<OkLFg*n1Xp264sJSQT+zc-_(4|2RB&+>FxbiJCfDksbK(X@m^gI2!cpH| zpKjnR4eQhI<ej#@@O67tL{<z$LBTTW#nQpeM~1hdMY%h+VIn^w9y9-ij%~1LCa)Yf zPor?Mo{s8d^_j;}WSCf`RahSiTX?bziEJ-z4vD8o#|HXGlYUwp|DyT!=-&n4NR3;z zvvfGEGwb1NhWqg=w!UiH`rnT6>`7|O>*Ao|62Glx)8AQL+stIjAlG@I-@X%KN5*KE zp$021=_#b=5sQf&V+CTIRlX;Yy<#zEfVmZmacObv{dRw~<UFgtimLRjqdiMfXEunV zhx`9PG!~_^R_qZ+_{|?Y8y1fn&e^cBt{%CL6En2&{Ovk5rybr3JB;1zoEy3}>Z&HA zUXeHIr*cW%6&%oOolpO#WqG{t#10N@D_n?G_=adx!jv~Q>og^sS;!UIDLNt;zA|3! z?LEhr`$NY`tp5*0|KQhVJpTZl(Gg9i4>iGQ6CzROC}|1a>mukZCTV6|-pX*8&bYZ? z!i5ui#`zjT{{S~wMtyo;7<Er1fT<WmUncYxImbyr$7!HNpQAyxnqhDkBmZ^*J`g}A z0l31-9XhvpeURo^+s1Sd_cJQOliqkO=1W!wqEp`iKh7%dST~W*Q1F~_SoheTSGL1f zS}Swtv1wXSu#)ZY`t>zA|0LWe+5^k-snI2on?H5d8%Nc_S^i^qu6}#6uk<bU+SY3v zp^P(hrZAD6#9fq0>ZhJ#g((q}VHK%69h=Wei?g1Zz$>C`+rgozGJWGiA6m4>aw}Tm z2Ss#on$xbqEfLnB^D&9SKJ13^);$#9+(R=)(hrk#lmu@ZmrP4fD!|#UX$VZ)g_3?a zlo7mNrav4h%u5eN3&q~lJkM{Pq-!TT7&C1y$%RrWVW6ys2<j}9Qndyt4f|MyQd}#i zU8qzo6uDW3SalQ&wFi!Vp-@Uq476O*yCNNXK$@UM%%ih%j={DAUQ-m%2k^L$qm~;j z__hGvngv=m?kp@338!LL2M5I(R)L)C4e66TSqM&)@mW6%AL5AxGfsysBDR-;@phx2 zcWgc#ld@p9*C7VBMWujF5<7gkZKP~Fa3bTJEyFkKK^i7Q+kb&G5)R<Y4S&Xl{{p8k z{BQz%u?_!<@K^B#VS0ckN9kZK<u%>J8=5V}2=3+&o{J9d!W4`&9De+Piy`LuC|oDp zUj}VbN>&<S@UHPS0gL|=0y4ctiWJCt85ORLpw&`a=D-RLD?j=}9p9xILPJ4#wmd== zm@OiOCQY^DlX%UZeBgkb8{C6!uLYl|GsDzCXd=nN`0+!J_dFC%VrvM}OeH8V2ri0s zld3;}0tIld;wLfbnSTN-gFk_?3TBB)UdgXeeU<!3K){Td1<8Z*@+M?p=Dfg9xQJL# zgCZM5tWz>l)i5O`)1+i5sd*f(D~t-No!!i2NGYz#d5}+KjH;KpAs{7#fQHz?IZ2X9 zHh@6D?feSWQcm;MJyfmC$0626L05U~9ZU7i)Lcj>!yghoc;szIpc-^TiC_0vU;|}t zP>dDVSl&!eJ0Llr9W4m%Y(8zRuWY1L!yGNYs!C2jXK5B{2w7NYHb}`bM6>t>q;^4O zQlntjNptqloT<*7M~mchl9?7*fqizjPlg`Rl|PB!oE?q1{p%Zm;=A)O{3|XNyYn_( ztncM1K{TmGxM<<86W$U0R^ip=DZ)QZfPbd*`6hE0;f)FN{rBzp{?&xPjW6EzzBqC` z{((})#d@h<4)Yw-D$H@nN&Ur8KLo0;ln-FK+y8iN-<9SUcuL_B_yU)3p8nb_9UbFc z-Yjd(8^{lqj=plVuw<CP&2l4V5a^QX%w1&pEvFthg|58{DA-kpS^QswLIW_|6rNWK zO(vTZs+59d->?Wapzr{Tu6|mrjyka{1LWUKWhcK?=0wsq!aT7mT9!|nR0tRpF-odI zjm)-akeUQi9-CqsxF2S*M-velVYNe10IS_WHV45&NicE3US%$XZw-P8EvJ)Gny8{V zO8MELpmd^BfkoVzS?s=C%+g-bo&e$ghx>$yUx?Xl4dOl`j=j7=?5?RvWRe(jnhFCn zRUpP`=yS;Ip8M-A9xQoQ<?{0BKw;(Elb~yJwv;gz!5>mC-OVvD2V7-_?hl&`uq7HN zX!An6R(gY(NrB-bXn0W_1jo}r2O%d1$(#UYdeNtW&V$faD(+xN$4<g@&R)(`T0`Mv z<YVK(IP7%5Hr*-sf8;pO#FmJ202}PbuOGi~ZO+R=I{xSG!)%mgT&i^q6UlA3caNmt zrG9wFH5_VM@re=a?I0bVjK;rpOe$OE_YK)d_!~T3Z^{Kj_Q#oH@1pKVw#M>IIvoNR z`FJGQ>(g6$A>kA<#%M<cWQqUW=Juh*()PN5N#u2xRlFsDO&DY&FJd=<^~6sfs`pfi zWIf%p|KBLm4l^5R;bLhTOCq@Wb%{gB%OO+2SuX1RXjqY>+<2!EFVV^y%yp2$QO54x zcui)AxCGnGPzs1e;no4MyWQ;9_R6I*!^O0}<KB5VWVIDK9<<WBF$$bdUZHv;pUcfz zj?YlWfirO-zf{YQ7{g)ol1pbR(|WT1K<o#;!<bZ%Xd#JEEh(ApM8`|V7L%KxwQ@$w z6i1xN{*r%h<S$+3D{F-+L8FNof+C}NMQGGF3)zf{fcVHnFymksC=DiN8bhB6OlwJ} z4siSl|K$Su$TiFyD65v#5tEQX$=Sm)(d|`2BEjR=EVgsJJ4y_>rO(rHmmJJ;4@!o- zm`X5@re7=R=W4o?L(_*#`h`fh^i(BzR8P%tB`hz5m9e>mO+6ii6-gAej}YjHg;xZo z(oh<@os3c8&tm!WGBgncm&T=G4|JuZIQ9ZwzdAO%!nHnSQ(6DkbJD^5NtPZbLMV8s z<}3(gsd5~XVyeui*nzU4B7J=(f2@k?B88~W5=h3jyL2*xFY{WN7?)olwL~z>Lyn}3 zM@sA$A1at`t+D8)ZhQ$d>@8+~>-ookHKCa^Nr=`@Roax_+^IA;kAkEXgaqBo-l1|P zLT{4GTG^B}eUq)3RaQ~_KMrC|WAUAWY3U^W4oQDS(?t<l)7MD)TbfRREXx=s>5G{j z(h)cqVm0{#191*WUMYw5GbWmfOxB-0Vt=N@{!F(243+Uul!SQrVNMW8x8N|3ETr;N zZUFa{uBO)zt@dOcYL?y2n;6yrQ>MEidH$J(*n9^KQFg+k&1{FT?92}bI!51enpo&E zc;6Um0%hW{Ge$^9Jfu^MGMSj5Phc@a85_&QCg?<)kAhOsR6uTUqIK@)LZNJ}g2@UU zJKl3CMPS|}L7kT`{+!G^Da>rp;X^MXge(SHB3Mlq&5DyC(8&#~GWXueVEQ>}d=3WP z7yxMMB5QEA6u@;|3i7hdm}y7>xK0@6p_6%NpU6(SR^1jJNE>-k=DRwRQCk=z>91?L z(h}Rrmh=UhP91RA@&^#`Kwl<gGu|r|W!2%!JU$Z)L-k3lUCch1bYL+np$EiJd?CC3 z0E#h_WJC4ULRLG`8<jwflAf-liC_+fMxqAchfCo{Wn$M@J#n#?D?Ih7dw+2DR3zpF zHX1WT`a`8BtZx?9oiNORny^+4Tq@~%OS;5lDo8hQGY07u(0vuYaLl8f)$N<Dkl|_x zSu4Io4O`m?Sz~b*A?pqp9AsXIf8{MDhO8Ioo%S6=)@2j|UP3DVoW#ZvIA;>NF}5&E z&8BaW>P3>Ig!k@G<zA@`Nc$T}zg5z2)N~WWzg*I9L%K|-I0Cmhood)l&X^8Ng_jq8 z313dX!8fbbhUXLhaRNO2vz0%S@MZXN=O3igu{zU(@RJj!W2f8j?ND3z*aY~AHoS%K z-U;xdZFn8wJrm%D)y(o$68;sw-14>B@Tr7<oB*FGY87KNBZzV<65J$;94IFe<%R^5 z0tbqZDB}}Q2Iy)y;@|L9!Y3rGhG*FD4+-y+06)%#zd-n*3GgcgE=Li~-9#Clfb!fn zOIOzsJ{Mo^f<A7;a|wSS0sgSSYd4~7rY})~NZ^TwetP1;VWRW*@tm=wa>lZrgSN}n zs{ppI6d{JVnJ5s^-_&jg!*BuqRyHl7Y-u4QC1ZL*#zQn?64-^iX~xKv4oMqgB=+-` zG?|hPQAwL)*lW6bmMewW2Pk$^47(24zS4WqYq}L(B>iY@4~lmK{?>9;#WEI2#{7hg zXKTi(%$T7W!zWt5TQIPLP<WyBJ4=6|X@89HQIvnGQ<|c`Lc>ErFf!VqAV)8>ImNTc z3`LkDN~J0t4BjDj;+&({Y}cVJD<;cB-l*l~eMQZTq2B0?T45el)QK_FAwcz&_ClZN zETwN&7Y-CSNE7}Y{U-G^)%v|t^%S{~#XkibD)9@YHA%-IR`#RMvrKiSH@Ih)Zk6Tz zNx<g}^rETsDK?l-RkD^CnP<GoRGDvdq}(1uEdnamjUgE#2jxf)FU8-oIYXs$49&xd zTiO7)yTH#gH}`za0Qqngz9QpTL<G86KF0{#-CHos|5Px?pt}b1se+MCMnySb(rgX_ zYUE7PKaKyK<3zE_AkmL%vjI*QTtGNYJS=kL6!|hw2rJh>nFLKj(8^fdP9*n4<Ek_N zBu#z4&hncE5H&GmGLcq$y<(dfVV^hlIAWhAPT~%89wo#ic-iqDr&oC-9n%}kf^nE5 z710L74>HD2qoXyV%A84t*t5V@+a)Nlz6fZC81C!F$}W=O9M<G3y@Hk*90PB6PCg{i z(;gM1VePx52Yt^ia5!;b2$R(5m6*)e!BeKZ+{6AATsUiEE6&e4j#}afae$}BtfS}| zb+?Ht$VjI72QuLeG5XB#)AX_FgOzC$gm0oz9|We@-GOg;TAsXaATNZC2ENuoWBgnS zazyuI-ZFJh4b*{1b~>ChNa8ru4DT?CTZo1E+3e-~L0Njkx&$|dq|#V|&a<8ucSU&S zYF0gw)iE5zwCh0LUfu7<geev&`gQ@lTAYe=fULDPJty1?p`OK=aM;3^<I8E&MM3DK z&KwR{q}T=cn*jD?CJN<*`DRTKF_AGm18{D5Lj*J2NxCA0pQB-?8C}?@*F!#c{;!b& z`ZeZh=KnyfZgIF;e<RaCEOH+IIf;Q$m!^&dMbEZ#87T2g%f2#`*=qiNGwooT*;oBk zhhoEfd6H;0Jwd{u?*-m?4d$om#FHHu=o4tI>;eu4Lt6Bspu$MzxA=`-fMTEK`13Dk zU0=9I(u4`e`wlIIR+1c)?AtwfNBy6EIju9O?Ya!#z*_;k_;_p@&U^87iqOvAb)0rP zloIlM*Kr&`aql{YiJkDS<0F&NG}+lR)+-}fpFPnM{`|X+LqInEUB}hQo<`7Q4x|jI z#v@S4R`o^8FK?2`5fMDEwZlvXiWq3e2S5!$VuaFgDK5@UOv0n12p6m{JEjRW^e}v( z@)P@OtNB3wY+<w2C&GB8DI!})rqw<nQZ$;3zE&?iCY%iWa@&)>FJyk4Bs}EC-y@Na z(NmE63;rajOYrN?HzxcRR2oa;Uo7L8@Z)Wy-`z%fK^y6#+ejbMM*6XBr0<7xhxYw< ztlNmTAlp!Q9R`MgjFtlF``NzDoZFxY#Qo8)>sY{V-4wuHTVf!(DL@;o1X8RMAtWZ# z4!ggx_5$Qf#*k*PdUmtlzh!z)CYDLw--)B2K@SK!1u3!9B1zngM7?Jt3&NXwC=}0{ z!i%F7-F+j4why=zUoFM)gEB^_O0)D<JS01^!Pi$djUjZE1qjG6ORBKX*k3i!17GH! zK*vidzS6n$6B%vd-3>U=ACi;rC?YeNVxqxDYD8fQ;=^<cO*$b#U7@oykWMz%+5Xtr zCeAj7w=_UuW{CQfupm|-(JFsODrH|$igQEn)slX&rVk}~#lJw(kBI6ko%$Lpvc~i^ z`UbEG$<Y^7|Ii7duVj&NOr?1U-j?Vqy9zx?jcAJNB3c$C^4PVb6e-L|H*S+zgx(JF zONz?#_8ye~WolcljiK>HTdaFT>!ibMrTGGbdze138~&?!#i-EN2>&4gzRb@5AmQ)F z4b#3^pV;szgujyjhe2|fuQVeGuTOyY7cB#RD&fcB3q4o(Zm62$thH)9Nsz>J7w_)b zKh~LTaC;mk{xI--r9(i+UEUK}xr{S40zcea`Gl81f#myl{F-|yNj@||2}a=`xA6?3 z1cRJZi%tf`ib&rC)C0YRZ8qnMuujukx0`3VTFjw}>afNI-l$FHCk&=&xs0wJcdc}? zk%26OrA3DU&G05sZeCOp^c%kaD-?>h_*V!(zu_7DCicz#V8>ywM%~0?y|u6eM5K4L z?~6Ynih=8#aG&54KmchO8M=V1H8La#r)?$+zs&EqURKB%7rR{W|BH0qMYj=Kxnu9~ z4TA)+tLP{L-_+x8KkL_))p@V6J$~&fjC2!aaNma<Pdm`Y9gI$WwTF|)?_Q5P7<D|Z z>7Zq29^Q1l_B!@;BQ}~^aW!L#vc~VW%5Rs!rqlCsi_Z0KIxGXv8S@Q4eWLU16rM)K z3zrCZ>l2-)9D$L~dZM!wPjqJEYNy?RRLGO1c$<?$0Uo~NyPI;koWAb26gF;Cmlao( z=-=|Rns|}CJO)pj?uQ4e3w&5<OJ#d_@9;nH<~-g@=dCg3c4;MxaFN;X_>_0dR+=Lr zKVLSrjV5+DKjyR2XWRPrRCYM~NpTlpPg182x=8?!WMCD3S{e=$K=K`CBK!@k34#CM zEc{{ucs_i(^RR@7O?sh@Q}(r6;Na8=1F_0DAut%L`yDUX(aCC=gNLHw<%3+Nx#t=* zzEH=(`yr2P;X5xCt#>L&4Fzc^VDKc!9UV^4HX}a#BO*bR@J;Hz-2{=Sj`Q$q?MZ4h zhaAeq%0*_J1-wOm8%-yqv$kXZMYZ1EyQ`nkgWQ#OSMPyv=<#^dM=EE}_k%#<yQ@D< z5G;>(S5>~KY_VO_&Hu%hoNGmc|A&{HXI@YF+jz-&B&hGgOU{P_y{(s=CqaAvjhCE{ z$C+Hy1;n6U>UNiAi0@zL8g}gb2`@E&2rti+<DdU=?QH{#-2clv+#9cIr}q8<>bp>T zR|37Q+ItE9=zpX3CS8i!%LB1!-6iOLIH0C0{`nv4ei~T(pLBo2mF?)h7pU)o?hRUD zTe?35u>Xece;Nhdf5aBhrrm!5sHw0T$^TgYzk<#GN&mlG(T@J-fch@ze<IM^(*LV) zfBzf$FUW`fhk;nz`X33XNg+z~KdA-V_g%FuItF87kp1A~{>Xp<`hcHppgP8PtIsWt z@h1FjImT=8CqpKETx^7&+6Cs)e5cya$&K6_7JaAMwus?~QS=b-W`xM#HDzM1%HV<N zN}jqi7Y9I$U#FO(w|2r5vl|w_<U|M$fZ|e~VVG0hg+Gy3;t!#Wo5W|E&FP7GRXhs` zb1+U|UgEceIb?r_ZftZ+axEINYsL6pm(T?>S|WV8g(Aovf7b!)1(N;}0to|`oISKd z_!9m#^Xy^8)3PAmF(_ndLsU$LCE%hashF7*%NG+fo!?z{CZ^Jm0~uyworuYdmY64s zIA=>-!?}a_FOq&fg)5#hG^RKPCLmGWI0+C)*kk%cC`#i)5-quv-|Z<*X~+tv`TRAJ zh#4)3s(zy4eqwFA!XD+4{u|PvxM3Z_hq+ay^TUi8Dp)dAv-;|&U`hOL<#&66DUDh| z9-xBpZ%eSwBEUaYFh!L~{f5mH_%RCRQq^_|9%LM;63N2&g)xb^z+}$fnM6uMx9dIo zs;J7bGF2#?b5tTl6^X`3I**G+?=wtzGRik=rEVH%Hn+i}41bcaBS3cjbNTKP!cR#E zuACvk7rm|cRH7V{fTD|oAaNk!4<*25Urh+-b+^H-2;Y|g|3z3J{}+U>OMq`uc#C<B z@YM<M;TpebHV+b>oe;k{PvJFY3gOtm8W&%B!p=XE@COs%a}-`|P9=O6zQQk3>o^E! z-E8dW5gLE&<h96BZhpbI4qMkgNh<JRp!!Nb1Sw~v#y6{;#Q8{TBeH~Fz*l&no1dd; zkM!n;^RLP;D`wiq3ct$|_~j|T1~ZcU&LY2$*n!5%=V-WVH+q(@)%->IX|tE|y#-WX z=?0K;m+u?topHWn?RfC}5MO#?-%_TdG2Z6Qtjf$oPAJpSJ}(evcg8U*Dv-e544_A@ zVS$`i1321PcQQ&`E1tv-WuWqMw7gXtJh3MddtYK>&Uq-*VU4!-_@?`%@g8;_rhl=g zV6JcAx@uqHlAUTtTe0;q{$cF(TnEX{XUU@{Jo6z+;c*zIH{cJAaB-N%KKnn+=kR3s z3=Dz^nQg3b7QF-gG?}r$jJ&~-JVyDC^(bWGlXA_bACdVi#BWd<56OuK5PeeaI^nv_ z93qNnG|&4y=he3FajIKxa~!gxI8{QsA;llC-xCvu!za*gcY1Q(bh)}9j}r;Y^e2O} z%g^~YisaCdS%3`Sb+UsOLx0aO*$VxoC_~zZqo~9x1(x2_@ZR2kAPy@FM=LE64nsD} zAG7=(hSTHx9-4>CH~J58NW&vGrqrU5t^_MYU@SK@9Xk?snCHe(5!o=l>;_+2c8afW zc1>>ZxPwtQxc3^zBagxP4aTQvRz-^3fGA8VGS$FP>-eMrzG1Y{_3QcTV435f-p~)W z)(7LB)4^F#1Xd~sXIj7M{N+VM2;k!ASp7(;lQd?s-eoOmK(uFY8Xjx+BWF9te4iNe zy_cb4?$TAyYHL*Q2Vn{_oZV1SA0RiID~a3_$g$T6dZBzQF`U^dK&hV#S!7t$w_Vku zG#VJ}_!7vfL7`|tT+lCP?7l`Wl>3`#xos1csNR_Hxq!Ru@>)+avz5#P4l=a6u1vP9 zb29$6EbnUkNs*tzuiL6J*}dByx69uC#}E&jRE{p2{Bu}buf1cPhI?gpz_ZT2Qp@Mh ziMg)qgyFi5z^n)>Y~$D^FB}7nsq4zo*Uaa4dmf_F&|91io+tj8W7z&KOiz$oZZQHW zstkAUOL_&J=_P0TqdtF5u^h*a^ZAFWm|I7Rn0|_Na7;`N+UCHWiK#T?9zIj>oQUZd z?avf(4pT7|Rm40>()&`(;u-#!;xbjDo+?o~B?yd;DlU!RW&CbWaZ00BkiUIaB;wyz zBYe(KarAefI7JnS?w9m0kPgM=B>4QPD%gH1SPu%a@zSVZDg0i?@Ad>!8gg-;$x*?W z(GqN55#SaTOi@L!U)NIL85GQ=s$`XD{>4&xNt9r0Od>i8=8~OBq%>q>t9k7iQI*5P zxI;K|=?|(>RFUW!Nk5k9cPwUW;Hc<&B-S@;g6%GsUjp}vi-gX8&o^tV!i&vB!iOfn z-?#Jo34c2Q{*J<HOd8>@CBP9!hhlLvY%<}z*v!rUK!vv&GYarM6W~+r{7r=aH32?J z;dQ2(@GBDFOYQvSguj&lU#ReMGm-FD@D=aQ=f_NA`*#>P689Tcm}8JRuKfeG9e2Lc zY=`US>CR`x_?3I}YcOw$-{-toY>e=0)17ZJ<>cq(&O6#<4{v_PoTvO8&Gd)WEMJ@M zJnlayzXW&Q(axR)1rKFbo8>a-JJ*_vh1s2O4V=a!?tGPb0qBYDyrcOHBBMliekxn) zWaZ^(RQq{jPa^gZV#A#uin7VrS<=`tCR}yCe%XG&GoWBQmVD_;+<?!7QOD1rVarFr zxVNYk)GR+>5D;8`z<4h*_b8cJ4l;1YY*Oa;i)Gvw?|8fjyNGT;zWlkuR9ZZAH8gq? zGFB;f?Je`~^XO@~-!h*`9?n;HS3wq>8Q%F@=BH&NW;qAgZO1Gh1JsNrirbsvM#rc( zV@<H){pfaZJiHCXj`}1@(^W6eejBYqM|^b42=)LSx302*8Xvum$(DciG5)svvqt>M zis>vxiU}Ssdj<P;+gpptQamFqsbG&K=cIKgp3ztS>WdZb7#Wwmzpjjl<a&5+kcvDw zPUP1wiivz^OyvD6kuSop(8v1rKv@&U6-_z8vB^2d9Fo(BxG6n&{*kPI?9rRQv<z&g zDmV&$Jy)TR%B3zE^8#n|&I@4EGOT1pj_ef1Q}>b1*g%|&OI&h-r;xJ0?`HVjSPM7D zP~?(T+jBeMagLt7qieo&$KQn9mj0rajhD+avvFq~AKJuOR7`Pne*Nxn)>d|Ed-H4i z?VJ-JDsUSt_u!`$n8{!_amRnQ+Iq#3w#-IQ%(xj1?xD(*ZM195Z#g8>F^{!jO=UWk zQ!`i*9}<{06wjYugeO{Yfe%X9_7t7FiJQ!u7ou}z2S$5}$(9e<3Wm7)$Wvru69j(b z7$D=t4s2`Nfy)JkhzdGpJFLTc2EGo+G|s;g1B(4+$M4o!xXZ5o31(JT=4b~$ATx@& zKB^pT2UjxLY6na4x77~bwpi`JuVudE(WWi;iSopTJanxki*SV;OLGh92RlxQWBbFf z7~A17wtkCkIey8{Z|&O&Y?KP&J0`C62<_QJ8OP_)#~ZQHOc%Owy+o{i#@k;`y#3`c z|4!`B+;Fxa*@idm8yFs*!RUC&a$E7cV~;~xZeUtEj3=`_tKl;kO{Q!ptYAI@Uk;Nw z5>!1#;bxN$WR7)LLR8UFu;W2d?OXe%?g5U=Cbq>yL)<CZT(3lAJo*HGTh-o#KWSmf zHf?*~R939BbJk1F|0q4N{~rcU?rNnR9(dTv@~809z3_CuF{-i=+P7T=>TAFSF?)Rs ze_Q&h#Glkx3w~XCNo_-4|D$vdJ%E#~hc+}7hY>A%aG70pXSie@oGB>g`LAuD_8+~O zZ1o>A@wcUzBK%3kyp7-3@FzZkhpY%n*|NrvZK<(&t`oGmV<?{>=(J>TPKU@IO9r3Y zLEW=OQJV31hY8-{UU(g=zlxP2>IwcE&J#-bUaa^KYEdgnXL*8|Kyb?!?N4^uQ%gCQ zx^jDJtrWoNshx&|Kjo>->JLwCGseT1c(z_by@vM3{w#DDkI8sB;OiEYJ+%M4mfv}( z!z$VlESgwwsN?Rx0RcC}1aPlLU?gI@7xYlS6nnka{@MmiG!ff@bq?O-xEeP<M&HRy z&DrrD-e%~`hZch8U|f>t8L+{0$IukMys$RvGEj=BUJ*^=WkmjfOu_xZvFSr*-rP4g zSd@$tT>4UIDvQPY$q^`I6!4INIJZ^&2aZ2o)$A)Bi`<NgVlRCSx3f+>kCn`0=-w;I za^H;Ha%-*yA#}(!mVa^o7YsAtr~wjj$K47X`eG0Qc1iBsD29b_#40xqLe1hUou{l& zP<dM|FfW}>0iNaJb+2y%1v?6TrF#gqIfUUADeDS^3n*f=KpRY67QPVzhAhoEJI0wB zOEMQ0gsH6tLb6i)a%`UuIVEFDJZcX6$@z38-YCL3dveVtS3dQG&EY^NjL!kZ9_IoF z-E@v!@>h^)EKL01=Pdlcc!D)}K}v4uCJgZlQo@W+Sus05#4>w{Ov7<$<M7OOw5*S@ zG6%N<Z#zp0!cR-peTCaFa03w#Ixovow!iNJ|AL>P{g6xy%kadWDArf{1|-P|<)RL7 z7a%C*;ax+-swK!}UFFvAUED4$R|tsC^itj)<Ql}Kyn#7XES~CXh89RcD)Uyz=6WXt z?dS-sgtD6p)pOd7VED;LqM72B-5#h8RweGWL^W?UpHhd|INB9=!KEQRTu(2?#_>aq z*N7U?DzG(CUXVSAzW4zcqEkuWS?sb0s7Gl-;p)gTSI%2qIam0Dc1~_$-DYlz<}5%? zi$9KXv5a}A{ayg~9hcw)>qT6+{hg`n&?JP$vEy~fMv~YI(&L(Lu6l+1?5y62U>Qov zYzlg_%JfZ2$3uaSFlG~!*Ay&64e!O)E2Uc=laZxcW8UB9ES=g_n+jpE)|!W+S)^Ej zRj5(iK@2NkJ^D)Jl3jbjF$+VyT>65WB!>c=gR^9~`J)H+rcUCUz$h7~5;=h{&1761 z0BxvUbVmDu>EM;#yudna^~L^RxK$0H2A5t=l9=^pa(KgCUdTsXU3U%@v?LEb7c|yi zwo??&!i{EX4$@|qWc5uNxOH)df_<POiGl<}tPXzw&zssQc&QP`9)q$&1U)0dhwT2^ zSQhlnnyi;DG@HS2NyAqrT)J?9y{+H~!Ura7E0|-$cPD%nzEBG5eMHV*?7pw^V+NHT zg!ww>Fuqx3G-w>JjNFENGLLce8RL=3!-H)w4`fq&xHr>ka?4HA>98j>EkDGF+(245 zX#fG7mmcruO|HqDBjivIYfLfduwIf#=cvdYk=-KVkyvJ1e;AUv1sQfsi!ke^YyI^A zK4(<b*u)S&{?wt2c+MRs0x?hZ<46`-{2&m*lVnzhJr@F?zpa2KDmVf?Oeum_Raj5= za5`u<4q-=<ohsvwea*UK2a{~wfav``HfyO2*Fo8XK4S0t2b+>SEQgD1<a%-Q{1$da zI5;TFe&%2Jgw3;P+-r4zgTF+|iAV%|r^}I6a54p4u=RJSYZ7L_(;Wj>2z+JW5)%X~ zj9ks(zj6Q#6xP@ST#dOZ0j~ylgNVm5EDQQFK@?YpAUOiI!30iY#mvisWVylXEA7{P zCQ&t?4W?@J$=QiWkkiTble6QHfFk8HBO2OMKcR%y8?!-KH$r1!CcgBY;uy@Vr@qm` z@!%bgB<E#{R>{#CWfpx%tu{ei>SP{tXX&Jx$F(__%c|=w5M4$S83(8qByYnN=}<cQ z13w6wqbL@pZ!qDjgw8~aT54h=q)zhjtx@6Vi#&L#9h9R)>y#*;%|75zDytQZpSIU# z<KL(e{wi}e2KMl`2@(FIq^N~e<|xA1K|1z|&?qfEy!k;J?Q}gHAgG27tIw(YbFFy_ zq#_qM=s5Iwvp1b4^Q1UZ@`M#HURZVtX>Bl<k`~7DMQl{&utR7uD@+KfY>K@$Ah;nO zDd(Uw&@cM%ycnvO5ddd8jJlf(C_xHWE2ejj#*2<01HcU_jyH5Nb9TIs;}M8ytwwNb z2QJ<}I~h0Sw$lGX(P0D4rVwSP%ZK&=0e7VE1|h_(bjA`pkU@^>CtLr9Z$r5gQsu0V z3-AATDLP4U)ez!=xKSSZEo{zV)Dlt3oc{383x?pvXbiwz;offd2a<WoJAC<b;Qj-} z9~ueUfXCJsPpdckOIo-4`!?p`+B|qP|A71Qf7)R@IRmY;t+NsRL46l?7<Zy4xFE9o zxuGHbJLH5$zXOAs-k=e(i{N7ZH+C5BgAk?J0LKLC72RGu+~lIEVeG=hs|(xI+kj#M zmV4U9!i_LsS(Q{=#*BGJ1uaGH#t0QA>z0x*N@@G2wwKvU{nIt3%X+5=hnOmy*yXqo z175FqvFfyahqIu7!HX?e6~VEo?Kp}m(@uBW*`>1_%T7v|>oR}Bd4k<hV)NDjCo*;8 zx8sVH98=wKd|Ky!1BWycV;%P@$HZ`ln<p>xjgzYldWzWwJ$pT3dvrbG=jeKbtBfA& z8QMxMTXNXPuB}LYj*5zpb8J6@t>IT(Byg5CfniAaQ*n-`j)skQ0k%~~&~K>MO?be9 zBgdlt?579()+q6f_ZvAR+wqOT$io67$faWeM%(!(V0862F2qQ<!#ql-t7Q9*!fqhN zxz|~s7U|*N(V*WrIqq*<AgI%cYPBAVCb}<}KF64Ny64(-_s4dZvNQ=(8%p~L0Fiy8 z^u<pxhbw8cjudH}Lf+Orm`p?mS%D4`Au&8KX*lUT9A`^$&d^_St4S(2viP(U3j1N8 z<_<8*DNo4Z+aLJcT+i>P#hqJ=!K}iJW&-W8Wa{>$sTf|zR8X=X;g(>$%MDyrKB)Ni z^c^P@;6%Xm3Q?Ci0C{-w5ihxwOf`G>?#!m8hQ?H51*bX8Fg;#MtAZB%fe+-u*qp$7 zw&I3}6DUuk)C-U7D$51QT!Ik#j6B@X7`(m$-ZA(OHU5%?xKm<-^4*OYLjDe*UJ2^( zBj71-hEE3!R@Ze(5O)s94ve+$bb>|wUYL^`SZT?+`;-ykO33G&!4%D)L(&O(BL&WM z-z@qygnbVd;qmxzf{UJpW6)$i04y>WDnnUO%zhv9md7MBhMp!8Lm5*~hPhsZ&w-rG zMEBgC3*mfa1t6MThL=QF`bwKHamI|HoHd1-@duWg+H{t!6{axJ;Q`WH;uXhQ$_^k@ zaJ5UaQIM=Ia=zl(+W2xY@Xm7K@gCxu$We-C@4tJIc!}F68q8|CKroGsD2wzP!Oq2* zCt!l1jtoP`CF?Nk%AT*_?tm3`6B}4=wjpceT)246w81b5g{C9ivfO+lf5WN56DvSA zKKiqK5=INx8^RP~11lqYQm6Ye;YfW~JYAZHt3;onL@nlYvRmo`ybnODIgEgXC~xE# zEws(&two-NHf93`PY3(^z42O1Bk|ax!NH@!TBm?f>Kd+;z9;)yxS{h8e)1jzfKa0u zSNE3Qq0-cmAm3;YWenG}a`QOS5Y7^}9rJQr{$vostA<OAX92>wzCq!B%lIhdm3TF~ zCcEEOY0_QkvLCL+s2MWzj2_HVaw{5pH_)#(odrZH*)>B>KjWanzOif(xIavv*%h7O zqT-)V$n_1`oO@bi@)MEWG0Nxm#|<#Sd6ehoQ?Nm`ihOeen_~o?u?YC)pWK5JtgrdK zgXUY~@1Jibe}=!RN#^F0k-q}@t7Dn3*UZ&}kUO2Z=OO{m0^4~ef7%c6Fig482_+Tu zL$6SQWobMAHglZjuP8pF2h4PV@6~s6I($g(<lGY3oez<OGPWEp8ZYK-WH54Yf_zxN zWx1h@`RN_4o<(oH{`F)LKKHa=CmWbk6?6Q+wAkxs1q)!F*+{Tk=XfUMQDV!0FJ!_9 zB-B_51DP-ecX`FNa+mqe1HWc-1(-!1bpf6bKn?*9xd3wnkWRpTF2HO797w=SGy?lE zzQ~Pi7K0+4G+@GyZV{L?wx~caz;=}Ko(9j>(qtB3pm!90f;V1+`G?}!IyuuDug=`0 zc($qz@WyL4ImAQj8v!|^t?wdx8>(!e`Ar6lHO5cW(40)zEOKzvxWvlLJrNQ|ac+2g z>}___>k(LHFs1BciFMCOvvaR8J%wI0hPsirZU*(5Y3;Et7Ygr5#`+$}$f@+26DfuL zNHJ5*6`GTOTb9vBa`I#vP*Ws5<M`ugt+N@VG*=%jM3M!f5B!8?6VFT+NG&1kR4*bo z*XG3c=CfE+lys7yZ8gJGD1I7TOl&EGpO!!mNUqC~OO!EPMt%G36k)u#lF<EK870Tz zK5y=sFb(}gRGzu=hip-aWj^jph+I=jQJ*HF6+Kq{9VSe#Q&D*igmw0$(&MMOj(4Fm z{-sa5Xs$>-3wW_D>KhOON^DjBqP_7-LX$FDFmX~*_t*3mMNOB|&nA}XqoNW*QUAc; z45o@GgVQa-RQB=e)$$beSEA{sSpa3IsE%7ovm}??c<H)lHBHj@Wx=h;uof*v(i4xp zZGVeJUd58yD?%bwtE5LXUCSfsO_IJD>6ng1_o!MIbve5X->f8!GF6+_6W|GLN(dnz zZo?Z0-!CBwr6<#HtgMRg;}hUh?EJ-qUy}e2+3<0M7bU>ENG*YW7U936g52`&Zo^Xv z-;x0T6)ETzYfKX1c$h6N|D87f*5d&$NZ?;-!y5>nnE<zry;Yhj!V{0ZS^IdaO)=q# z`*>H`^v4nYSpxlK0@v;31BkMe33L;kec2apz(7iQ6Rlf2N65O5oSO~r!@nh?^l@r& zb0y<%utayp@1;@76<Ogg`8S4>XZ07H9X;6?A;A6iZUQruKt8G`e7!~BtSABP*u++Q z3W1-|;kXH`l`cr06b^sRzeRLMm$mA3mbtBGb0lgUo}(GV4@C*EXR`XdM}<HUKyJ?0 z6B&bYn7ewFt@dsr?{$*vkc3=aC6~md!@sgcioA}~Z6`^_?*MYM`-I3LasA}ZV5<7< zC;{!ng!8647WnZ50{01l!j^DpG?%02dJDM<T-U%BorcmC%c)8G=%l01x|{fklZ0~f z_A$~aIt04h8@0mRuc!`PpW=;LWv)?F4l!1>bn!;5GiNF)yLbz=^)*jf8_d3n>gW<{ zy-}Nt;eZMU<0oXX9Sph`)m*#Bgg-c76DlqT%XWe6R)4TRs%j`CFujk(b)9g;w_{!M zQ7GQ`TG>TNKQalE<Ou_kvV5g?vpRw&VT5SH%H11#<I}Y2z@CqO)*OYuK>=|y%<Ag1 zWUa53s3x6Q!8w{Vt%ErLvgxuG!Tq*kZroW3@f$-Cry3hDh7DY@#~~b&gvt#u6vMw+ zhW^>Dg>bkxVo+cKG0hry*%&NrG@52&!)C3_1LSjs`3ApcqkJ@)iC@I+NJQ`vIx?F$ ze5%X!n*6D;M~V#1wjzn6>V2SMN1Zh8B=Md5dT4xS6>|m$^n6v~J3rJq<2&P#)vg>p zz<I|yo??=PJ4Q4iw)ScnmmLywqs|9Oy?apljYe6hMKyqro?6viB4q*%>ZXI()q3jr zg+e5ZSOIU?yY}r4%<Jet$JBCYo*<21GMLS&EC*)!+<wt_6C~4ikXL0ErvVgFw5C&c zqrUZhj{c%G&Ls45;?uBNg14XWU9VkFMtLtOmbgVzKt_ut?Y2=~>ycui@}z&$6D^mL zo%ME2FeH6KQ2ZVD+t1iD+(UDVujUVhNJLhKzRwA?<ONom0lkEh5|_^Cs#jR<dsLT> z?lDi&AJBA12aqA@b2WWptO@s$^d}`<HXmrn@DPZuz6-0_5g~E+o#j$m-v8SNL*s4u za>K_7Bfxhf{6c)W;T)cz^E&hGQGlPD0B1`V_(H-5CBXeQ{87SB=NEeKBWVrsBkjpA zv-jqH3AYH_S#;hrco|82&o7V=g<zs~3qB%a`Hyuj+ffDIzU0~aHJSZE3H9!%mDjvc zo6Yyw+k&>qc;XQU^UodTG0p9$yIZ|;*O=#!8;l&)dA>Jlow-9$9W{Ig*`Rm09lw9F zY43MftZCm2djHj?UGZjo)4uaXn)nTlrrkrDfoIbWbIXj?w0}6s(X_|0;DK1v9{ZR0 zrad4v*0di6nLpFCi^=X!HSJVbRMMYl;z#!siVpj_v&OrL|5efxoA`y2p4h}sm-K`t z-XBHy6HUC>ZsKPhf%Y-E?IwOG;q5f>9ft$nP7_~2csot}ZNl4a;=^9pNfW=FBzC2V z?|8nACVnC)xtsW>-l)x{Gf=H2o^_x$@dnN9XyOle=dLmD9wv+&P5fGK)H*X)P#sNt z6xpDO{{z4AO}quoDmNg{S#9!l4`rfW@v9G6VM!tI2`?WCW~U&eiLmB~RQHete+Pke z^W;H$ByIAgNN#Qh6Cx>D=@Wd%3#G|>;jboNi8%85%I<s)b>=FFifv=##I`ct?J3c~ zH})cEB0xC*;tyVI7#|zOPxvu-E?ls-VY&h=*&!5~j@u=dVP7E1*hjU@B`IvLJOa5Q z*ooE&d(BKv=!{MSg9V*ZOFrmeb_WE+CR)VyA+as+7{Ci95vk2!dJuHQGA;rdsB8G* z14&*%G^)$=<aemvFNLU`$fPf^wFF67_?xk)OMt<b-K<?nov{fo*|90f&PsHDaCRyw z{5naGFf&P~h|``!6!SC~n=+Eo|7xb42~I<qrxyi*SHwJbEN0ENF<=+HE+btbq>Mc8 z90rSC5x{5yo{k^#L_C#c!?SI)hr?NLmxznKQJc*+_*S;$<CzV$w@rQ<&0X&$ZV+oh z6~R(Dm%u7ePT(`FgJ3&prhNaQ?=wu3{MyNr-mUvl9DL)wXK@h_Ku3KnrCSH9(K^Yl zgh#Gbg3Y>t>~aL{i&5z_{vzYSRAe-FBZq~R6Xa&?i?|Ic`aZ+-Vpv1Bm1om_vDEZE zSDQvQVCtaKwwN+ZG=P$o&c>A{qF8UCXY^DyY}w|>_Sr}la+(sy3GSge+{q$US*YKY z(SY~T5z?fWWfo%WY^Nl0#TZ%a=fUD_%yOcoV9{8A@{`fMi?HyM#bq))LywNl&rWR> zR)I*bE+<M3$sd$mOGp*n;8&hZ$M0-%F*EiRt5Q~C_%}Qa!@m}mrX`fLOPF>u(k6*W zl6E%JieLh$P)W!@0v>LIEjgm-sggKb64g-9eDKv)^SKMHq}rT<kve=UcsW~;Z`L&7 z4)_6tU!MTK(S~n@qZhtB0e+<o|D5oP6X2t4_^X7UhcEPt;Uu(n{x(Bw{#IGPmHHc* zh{VWv{&N!lvG#pBG}^P;vq?9b3&6&$=pUc*L~Sy?71g2tCElnF=4ZHHj%u0fjaO$r zQoJgw`fl;Y!}}kCr-L45?9>s~KELpR3;KbP5R6mb2k{#}0&a(f(696mMaKFSwjhjs z+ON<jN6!E$3ad!(uoRIVe_M@tI#$cqn91}hWBm%2*zJC$9JyhF_B%6293Zw&MVWrc z)Lw&R|AUs$tz=L_@1iodm_FMb?J@=U;G~{H#{B(-6Pt-?#4z0+CuSk1gW@=`cUg?J z6Tq|sOI8;7@{@6evY;)QD|f<zS;*qmf$qYP#pO;GNy>u#3A*Aw%7WEuI_!i6vyjEJ zSQ>Hm#$@rwR!1qQJt!(uSq$wYib^Moxjii7Z0|W9$)_9D!A{~B_?6%VerK})_?<&8 zrhab{bViEjJ??PowUp97&6ae_sm~YDBz?N1Cpz_4NxC}q&PRXpB>j2VHd>jzK_OET zUzbER+&dQ2{M+c~e6wgaw0UzbJl3|I`YLlY;cYtgRc0^3+jQ!y%=ZTXPN&}8m$Jfz z|5CzFOn_(D@Mj3`gD>`dXIg#X-q!Cj6p`tS@bb6H`fa~&RJ#!6Cq3rb;We9+z!vrD zsK3u1^+atl$%^Wz(r3I;8_YNR3)P8II1!-88@0~7q^MJ4s26#o)|k5lHEIjTdgE1_ z%LLClq+zYYE;pgQAQO7NZYTzO(mede_oUQkUSNrw_Jwz*yC`HcKbDs>in_Cbjlc>L z8H7e)O0k<icy6*kcwwSHRU;0(JohE;)X#hi^|Ws2zi^l@FpqYLV;|HIc5AR3g_YZD z*cU#+ru7e0zINUd$S=SRFNID1pmf1z9Ey`0%s2-Xn^Up`qKs*h&GOjFianIcoN+t> z-_hDHkC)!DRTl1IZf{I7?9076-T_9|=~cqhaFjjGAMAK1G;1Ye&+|}%`~dm+M;89b z;veZGmPwvN?R()F^hu|~s{2$<N)dfkniO$jLt+j=xrZsLz1y7H<CfjP9=(|z9Z$Ds zxeHD=@52|(Rkz6e_G7FE<dyRr)5OGjR#9sus6r5c3!HIQ2jO3AD(HQM3d<?qb@Dg% z%mkL0Qt`@o9zzH$`xjiT3809~lCYEsH*g2{PF@xpA(I^J^jf_STJbsfa`yt)igg3N znD8<9a>9%5X2qInz#@0J0Hp$$#Z0##6PAU;Z%Na~N_Ny*dPB-~R&$zVH3wPwKz$?4 z1E%o+NLrReFXN`pG%)PwqX=V&n~#4Sx^0+?P9gDLf(9PtX_S8)YWq8p6BmB!%#!YG zdRWf~8?UAZCx-39IXR-u(21FdVw<s)+VNuEXo{^5<w*;Yqnm5YJhF*7G1W0ArV6<+ zl*o>$7rTjdl$*&wZ^x;?jw5?U1QVouX7ZjAEl^j2DIi%4gZtnQ$fM8PnVz5u*{bae zDk?FT0Q=~Ks}PNSL^0}slEd1SvQ;7w69ded0|V?2GPa3kGGQ<h?5?5@6V9`z4DFg} z(QB}#Ix`TSU*tKLnY|!@Gy)!X0iF_okAR0c?r_$DUz*60NIL)Fl@t)i7P#_Z&#G@W z|E3=sE5{^nye9LQ;@QRXd*d~jX@aLdVsMVsKJ57EJ-`Ka+!qqFkG}@L|B0b(5wDw% ztQFRg-e%HGG_)Z=+qt3nWnwv^-0TVTT{E;jVc@WhtV~Y29fo$*Z;;0_w3o#*+f_re zN@Ukt>qBvd_8}9ThBluGyJToB80<U^?QH_Q4DCq*{+ywm0C7C}80>!o4Tqt1_Qq>6 zrz@UqXe<8VNw2}|BY5$KmbIH2S_7aov?Nr*e`08Nle(ivn@PHfhPJHhpE0x*$ySe6 z1@v7rv?>@l4J|9q(0=<F@>qs;E~rAbUF^}U64{0}r83UYCNRNiXd{@gONMr1mo^OT zVgkGjZ2$p(&d`=T=xG?u=4bkou^w%%H(rzZNbzh#yTu!?!8|Q^@rL%rj@_k48wrVJ z{*T{yL*vQcJY0Ed#T0AB?-#GN3WHLw&SDjnW+pwxP$8VaPI$}*C!{V;^ja}OA?z$Z zvv{p~5HqkcFR<O*4%@^zCzKgvWq5k#0eW0_$<`nlQ{Rv&D7v~sz^gqzSkso1?r`t2 zF#aLhh_m<U_zR43u@4|cc+mr?uy~y*y!tCISX0JGo$hktU|zt0+#b7Px|3ZQu5+=) z0a5aVbIGaoV{0*xbFno#nk}8p@~y>YBji61k<YQ+8vAv`NB2+~@@*REOUd@*-_hsz zfw2F}fcetC+~mt&hX23vrTu%8Z&VW&4we?~HZ287E%?9NXIOs+C7^YeD37}MB`5(p zf@X|3&2S1>g=YF6yTir53TYZ?)zjYQgJc#K?@<M0z0@i<t}~DULXW^wGz!&SqC%FS z_)4|JJ|~MX14mV0@|9%6B*dF+f63Ux1s=f^Sc(P97MQLM+hNqDTcpSE1I6@!q)<%9 zZ?X7*-w>-BDrkaQy4{0~(^RCUjb1=`SQ)^ZEpqurHREsDQ2~6w^B0;Ag<y9pF(o8o z`9?`C5}Bd^St6jwu)xf<GALq-g*eKNaaf3>tk?%KT#pR!rt%>PtYe(~%%&6S4w$nv zVgishRiqyE5z=~XKbWN&jmjM*aT5sf754c|B7u-RS%IDQ%xnoHK^8OacQkVA*sr#% zp?|04g*caSMT0XXopD}0_uKBF|Em#Cr#+eTJ7EGb3SUm=&Nu628-6_DPb9!Q%Z@?h z-<$BC6X1;e3jOsR0UwSpH~mpI`~$)n=SA}hpMc&<o0;8>jK7Z)m;;gS&fk%koEhE2 z{M)Du<mZi*n&0jkj*$FcAl;q+9b$4r#QDtsnw9^BXnyn}(v7XUm;Bqlw7~3*{E^$h z)U|<Ps1#2qJOT<H-bju4R2)ZVJpUGN)N1uzwdFGsyZmP~ew@k}3*K}==i-+gKdtO^ z1P0NCEW-cjV#a<lA=@|d;|adBO`CjUe#HM9@%Oize3z}n|E>6Y9n5h3rXgsFJ(zQd zZ`3>JmDUt?y=^aKO<Nk?0-a14;!9f%*yuH6u>pIXCk*r*-!cUqSITh)pRj8X8oeF_ zf5PvNB-rZ<0tWiVZbs^FNd1K$zk=v{0FQm2c^_AlQR~2SF(mn&D8S9%!asg0OunrX zGX4?qgT&YPtA)wzK_mQwx!x<>@3wuAaNMmb#s*;i9_azdr-cJ<>kmlANQG<x<c|sH z&;e__WiLPmT-BpvQe+=|54aS6-IC0-J%P>genDOAe~b!v>_Y$e2LClpuZ`>Ss((Q^ z6|#41IY#x>K*XlN!VXIVA1w$Uy5N`O4ok0DIuQoiw+Y-f`Hsf_-8%!T`vuATmrJGF z_0SW<SqAoB3G4koKM<^a$M63Eel_KG^6;e`dAIzILdB)@s!^=3S%lH-FPBEnK+yop zUya;fPdSTNw`q>AnEPz}4alln4kyGfkkNohZVp7<j+M0hrpWHTv?gEL0_#YY-U5kz ziWM*deeDoMnZt2)lkeCDe}YaH<7_3Y4pNP6rbck6k2ccrEu<%ECsa-?`NzNOzvd&= z?Dwgm(%qOCSh(Q(Ll<mM?$CTqgQ#)=3a}8mME5zi*KClxxjW>9>`2UC%Cbbd;;(M^ zVex@Fft-2eNcb2abidt4RQS?>nzH{e5i$Q0q>U*yQ)E==F0ByI><awDd?_P}&7~HM zUA&}#-2O*Pb{o;0syNvdI#joG;0T9E93pab$v)qT-a9lM0jjI;{f9Z8@Zew=049*U z4&XdQweo84Sq-!*xGqnwCxsD}W?PaBkiD+yD<)t`I0_9rMWSUWB&sfD1SB5y2^^DZ z1QBZd!4a60x|eSY8$hp0#}=tN({&rilx(n*9%{$k@Tz+w0f>^Yo(ae5D8ia&1U=!s znW7J*|J@s6MqJlY7hxX*I_53#P9tx!W6bA2)`2;jXAmqrdc|flpH6K|l=0qpE#?8> zLBs40Km19%!wVn^yTe)djrW6j87KT;Ki|{Dy$glKvYivB>2QC%Oqdb6EhEXDIKeoc z#<w~AfiLOy2BApQfd+fnDy&NEtRySVi6GgY^I3)5-DdUST8>2)Jq9VC_>I_{QdSp1 zyy(||74s-JEpPzaqfA5Ymf=CU<!hll6fxR1e0}8Xb>6;eb=uTZLLx#Ckt{?~R$`&t zJ<8V4gu$HZFsbL5a267vU@@tGGT|Hzm$EL}Sd=Mx6SmWAUWd~Ysd0|jMK24Wihybt z;8_9OML-p#3eN&{8r&89XAJ*I=RcPH*?vJ6$m3yuP3BDTx1w!hRlpOk!5pA?cKP1) z#;Y^ye}g^4D1QNdyir!WjZ#h%s9mBr$f%e3^@u9-14!)5E~}#kMC;j%77?{eaa2Ro z5!=kTQAt*qhd{E;`iBu$(t5Vx+-Q`nWtR_q<*-Zfgf*Uim{Kk_Sv#T3zO~yN56W3i z%IZJa3(B3g)97c@22Ja)?Mg0L$YLfI7~+Nh=1UPizg^RpSQ;pVSUUWQXYLQ`<Qvw% zYP)6q&IQT0?t*!9!NFc0c$Nu6kzlV*KE#B4B%o@gMFf~IPFn;Gp{*A2jM(>6zreo# z<ud$71#k}m54r#k380XGSuOw{O=&ix3AhVwBD_?aO86n`SI&5#tz5+h1JM>mPU1h- zreJmjmhA8U&9hZBnIzD5XyFNOyav+(57wca>E3vCrbh8>osICut1;!oLo2%<{M%?{ z(GZAOt%N|>`!A6>DSH3A=v42l_eb}q8=%<A?)s5T85FR4f!Z=o&2~VYFr498_-AlB z{=v)0SXVHke%i4^7b{+*xSY*%Rv(my2hFqVnKr!~JMx=3s_hOOoyunyTTK=7c&UVd z(_QIqJrtk@8p`-eC)sTE=H>06$(V(81VMXoi%4v_0Y)qHSggN5TA^pwQykZ>>y}a& z?AeamZDhjvy1TX=3--<004GUIZzaad@Jf8S%<?&by#rX}5f|Wb0X#>*KcMLFb84p! zg%5!UzS8@V?#$?$btf_Dh1|%@Q)tDPI!sw6?b-}?0|k$PpuuDyr=zf6m3ZRSnQnq7 zbx03y&^kIJ*onquSmbV~f?c!7lQ+u{Uv0L)dE7ON+`>w8S>zEAyKReX#CoY(<e?Nd z&LR&&QJfZe6Xe;cMPlTLx5&S(lkQtA@-RBY|CvROrZ_H(Jp0Z#i_BocE?MLSTiUkB zlK}Iy$iEQKhDE+~$4)Hr8;s5ETI3{9@U+Oskket2es8=wGfnWK7FiQki%f^qw8%;L z-8GARbfaaF<3V}XEOI<6&1I4I7Pn`S85?Yi46zh(7I_zn;<U&WoBxDG!pDxc$e+S7 zi<|`-|Di=Lr8q8&e5EMPA|GSIE?H##rnW8e5x_hxvYdc6EHV`$wA)9X$IR{Zk;`Ya zVUgXD(_xXXdgIlZFh@!q=h#OcvQ{l}F0;cTm*dxMktOS<;^jn{t$pU#y*Bbr@N_J@ zX6&m|WJJ(FR@Yc%C!*)x<vLxV$Ak^n@)qX>T1_)+O-vHR#1;EvI!#hTf;<kF@wIZO zGLylfz11?f-P{q4ske}x2GY9dZF?+_32Cm4Cwc_s=A3onVrJ7R&Z|I3EB|cz3zz!w z&j@VXZfjG$?(@O<zhZOIdW@|li>J2XKKf?$6}Jt3-<2C-SO??FJycpda+}Q%!nq@t z110C|s99S>U*8T3NZjMmB-1K;Ze^GG1tKTz@n|sLZqWK(4^F#K-$%&!F`~w-M*dx| z?^alwyEJ=4Kwp_2iI)1_`v>XZs?43>&~AOBV!EwB04`SVGBIj3cf2p#^Pn?Z4b{`g zg>iahigO0bP44$xTtal}vJsW6_=}?zZ&|~is{M;$K<(B(>s!3232+U<-4bd)8mB*- zaK`C9YJd4{yHNWt64|TvSO1{3zY&~vq4tmbUh1aCtU>-=ul;Yoi?96@2<R(o5f4#n zKP6(-eknNYwDwnGw{Al1m;5`v_Mf?xTsWihs{QkgH2nSV2QdWY#RNwGXC^QlhSaVJ z9AKLO$Kr5uf(eYa;e!c3-`fP1P2B|(c%H~!Ca^N1Ch!9|?Scs$ZY&d6h5Wm20xMR< zn?N@R=;{Evi9>)`%N^jbQxjN@;8=nQ6u%p90#8k8uLC%54Lg8$(E(`Bf4;i|_><lL z2pCekwIA&OuKK?H4j`NGHadWBZrO#}uOYHm?XQx7cZJyiPP<V1z1LW^{~hx0dhM@V z8DIN82<Yknd~2-^poHVM9&7M)CaT%}w_>YrLhaw#7+?EO7q-^{<gJztpxfU;3>|=& z!07+X1TKUjwQB;=4&VyYeg`m!@HRStuL^d-1m+Rh%LH^RUSZaOQ@jb}%Ujua%j+}5 z=PPmJ13di(IAgt6OYPK|@8~w}Btp|*M`*C8y48HQ!mfJ|5?60uNLDyDu}iKpZ+<H^ zBEDC46);BB=ww&+MoXwXx<wQ1)*s}lm_N*?s7Po(zYYJZ=zbY}%^JAa0S>KJ9NLzr z<YrGzHJMkDgTC=X6#CC<>X&aVO}&ZCyQZl(m&a==JQ<pr=%uN9SH?6oq6QeEt~@l3 z{EqwjI-&(}1B!>*Y@JoDYF}qFMQ5*I<PP6%4M%Zm%Y|?r2G(SXWVl~pg3y3lZMbX& zgRyfjltjbC%oqr)Un$C~HZwqCXUfBhog)x9;~QIfb|CP%o7ngd#X_d83pR*Y)}~S2 z*K6MR3b}acVQ@MoDQnC=z_G$BaQ!WV(=(gU@nFmey33{>eq`~30Tq5=;Lr&!KV;jD zggABI@x>prShE>7G>@;AWr6(<;Pz(5sy&Y|$~x(2i2`E%AIqm!Bz&}9mCr+B*qyAg z!a0njnYUPy*w&~QCRvkUAWEZ~%Y;8O3I0$6g>|M5Lw0z9SD>)YJPeq}B)HC$5FnG_ zC+OU{q7DZ`1Yaqgap&x(s7NgBTxKk=9bdbN7F*J{-q?n%?Tc(Ewq43PZ@dN*`IdOH zPm4W9Y76WO5yC2FM+<MoZ@j7YfaPGvdn@%3__seWyG8!0<?bh$2<xt|P)6q!QoT|Q z?~spfDB{}lPhXI2CT^wYZ6~+{HRA?I=nw9HDu1kdh{u3APMx@S60N^M21x8}!-c#l zd1b48rQ>MISx}$ZLM{P@ys=F^SWk(}2C#w|BTY`&a*=Qd(D+0JcB0W5c^_|1Fb}KU zAz9lA$gv{41c}hNTvfvskRk=J&#WERDn&~d3;U8qlXJ8vVJ4GSaa^~PGJb^~^u?vw zOt*GvSz&KK@Ude{8Arq3a_bkGMi!u`kACkOBO0>~Q;X%UzMh&`kHUi_*;+R7o}_Qp zbV_KYzar`S$cD8kTj)H@^wOJv?=(N(EWI<JusA#r%GOA%$RDTQS)WJsn?`2P@9Ng5 zep8X;&~FdH(5r_+^~oY!#)_{+nMwFEb2O{e2cGaj6}dMINFI1N*np{K_azQD&=k#V zm@Yb*Ea{8HIPH6fGS<H@47khAoB;;V7v-{79#Z(X_1I7Bpo8x749(__H|<cA&rK*V z2r$`F?4{SSA|yl;biR^3Skm8Tdw1QKbd02bhICz@V1sI7i1y7oKsU41n1S#Y!pZn@ z*HV(mf$RMaBOK4W#KG}S666HD1L5B%z^z9%YRpQEvL26YSRtAkvw-l#5Y1syhoJum z;rrstE#E;3$Ne{ici|T|!_hj~2|Bl!?RzZ^@zVrDTu5ZSAI|hAl@~R4_&)2GXNyQR zpudq(N}7$ws-n8TqMsb(l&t7vXr(;THvu(7)I|TV!ZdIsb+xoByiqI7Y(;f6zEizX ztIS^&bzDr=u0ZvbzKXIq<@L?ty?2ngIxJ^YQQW^<#T}0_xK=|Qw)yroo~3Cpo4%IP zXcLrv;C^q^X49ys(z<ofyv7@~$viBm((!UQ`RF4ZPKJpSvclYp-}vFA38iqxQ>917 z)h8i|e=KTY)5YYs6qI*1!LlQsjHk|Fk4is#`ll$UjJJ01>)DBHuQVb$CDLE`Mg6i5 zVeXg0vBK;Fj_pmjWFNxYSbnf4T+)eKA-BEX5dTN_$cQ1vmfMdJ{=>ju9k8>gwAdbM zD!`lu%|QiNam7CBpkBBaT1J5wcjc<9b-+Dt)m6POmObiyacGEoUuu%}dhBOS(lOHb z%n_gtG#UHgE$c{Qwa=h(3F6?Ft3L*Qulfz#3pS>O%_+K8%e}%fCgIoK<t&>O%&{z( zYh9w})$qWa#}~UW;RfB}MeAs@Zyca~U$Z$9PG0x~e7Rf992?$|@L6$iIlkCz!Wh0i zjxRQwW&q^)BCIF8PTQIzgnHEk>8+6NX1b7=T;8o<{#P`gV|lpJ>XMF>{B14|H<+Om zti7d=Rabeo?K*P+a*7YFt@TZByc)9}LnhoL8XR4mBR*hjU27g=b~t~l@VjfRb^p(- z*7`a9NIA;b_UeacYyGg9ycyoNTkG#vvb8?fMr+-u94pL~;JDM)+8wcUuhu&5)wWyf zbm5;HZLRlGX>qMJ_&(C&TI&ipZ2#TX+UK2EYb^xzSZf_Etrh!q?E$sz27B3`ZKx$I zldGZLJU*_WUcrPv(@+Q54e@q3PvMi}8lrF3qc(gr;rGYEt%jNfm}f)n!%Vlph`k%? zTUYF)p|1U`-G+L*<Zq{;K85`4Hq_HW!NaAfGuI=hqoMBOjaOr`1uxoAZ(FJj^%o|i zp`H!}#5dG5IPDrxz*S=YKy5OVs<Sg40y3`oNUVvYy6Hng?OzOFO@w&SDo#Cdi&1YF zh@7j^H$k<px!`iP)=)Bi+b7gFwQhpXsBRX9J;?A?4$7h0ROxxPneX1E9y0sMi&1~U zY;YXNU^bY;A8R&vffTk({8`I?SC(IoBg@ml5>u`enn5UIpz@-3W6o7xgmCJ4Ydo)? zkRQCh;g7{@mG}&0;v3tqZHkXHNqDWt1@hpPq`bcVP|8K8%Pjvy%0&oyb&Ka!uDot? z@S38$4E^+=Uc{>9+Cz9fs=V~DQbx9xOD49Hl@}r8^+;2k4tpxEjt*X3lvk_rQkqh( z%FC$3i<Os7o-&qexmsARPRffA^2&(kRfGJ{;Xn9e>F{675-4j?UP@DV9V@){QeMrV zi29nLyqd`Cp^rs}gpk*}jZ!W?Xkmp41}ihtv6-C+W^(esObH63MPpg01-PybmDQk( zMt&fbRYykslo26hG|pxejY)h30w@*f*o@vq9*s#TL1A=>Fv7YGu**cbU8LN(dv5p5 z<|Idqwu{<RmoirMK;P^ozEU2DDqW_rAIMmvGQO#mTum86;s@4O5fZFTV$$CvDKEtz z90*qsp-jI26U;&QA{suhDAh8XX-$<2?SzC{)-z+Mm}He#nMyhClk^m%XP0jEm3|c+ z^X8DHecU%#&%VSwxCEV05a-N8^_33k3<vO#EnQiKfGqh!<@^ei72^l%$|>0r9ZbTP z1g%v~cs6=uLqSIjZt6VKfCO2hhgS2KmWgNch~_7i5Y;YdS&TRm4l+=^v@6nl*MZz* zA?MNg4>jWpfuw@Y%#RB~NI<gT)+h=b%9vL#Rx=4-=GPB(<fYj3lSMwBj3Z57z6ye^ zxfB84v&jo`u*?WDhz5eQMJ@5J^c)I;EOV53t*8~@QRJk3ZhD6ep-e@R`ug@#)?+H~ z=?<1Dwxlm*dg*420B+ZGB~sv;R)^2TAGEu7VSg<2h%8ZEI{(efM2+UNq}fZUM4V_! zDdRVIh;37uKZr6XLRBfDaSEdz{8p9Zr~5{(25k03!1$iV$gKsPNPG%%<iCUeaXcjd zbEb^(M^%3%UK4L`5JHx(;jYs9?6$B;*S5o*IodH6$jfSVRuzUf8*j6#7Da7#sDsMM zM2*?3UqH6aX7MW^7fw=M%RZv!Ceuf;1pu?f_{0+UC6*+1z%Q|1%dXN%6vsQ>6uU~p zmw8P6txRDa60X77B1(dt2s_w`R0nQj7h<zX6L!MtQrk-jksGUl5}B7!c+{b?7CU)# z6zwOAR)JHTLPgSNGQIR=7>C<_9^qt0gSh6U_uw?~01m7rRkCIbcuz{x17GGdfB{J% z#Ok*`kR-cj@b0&iQZ2KYw4Ty$2?_1DHsw>^8dNdlRaBApD@m_IdLECe@NRdyKW)w% zdEXh@L7n;G-zdaze7Vc{iVc6C@Fx@CN!zXb^9bLR0ME7IA;QnZmz#d24Zoi7nF;XK zHaw5;&lBLs{cQ0+j_^bA<)(j&4ev(y#02;UzuM)8BN=YMmplI&JOBHHw<P3WuJ8sk zkMQOM`19-vsNWFbRrq=x4$+Q{z6Jj6W$*fCohkML`1ORR<I4>{#fIk*&ejng9euk) z-B+piZ!e~uJ_C?Df2EwZmq$O$UL<iB62b>XNzm=IX5s%55?3dX7@;JF0@F0Yiwh4S ziO<<oBy6dErbsbbNc2u1v5%4%M-rtZ(SaoX9wnjfqmVdANU(c$7vw`CTanL!BrzWe z;h|9y8%0q<;`0&I#oPoEcMAz@#_PcRe3T@d63yQl%m0AnADfUrSM!&f1@QS~;0QOf z0g4uyWBD(Z{D&mu@2dH+dxiPA`ViK)IO!KP#PS~?`IiIkR>6B@#`yI>=AX~}Lz#q- zr*-zDDn{g^i##V<&1MgASj%c+s80e_hYL5q(aI0^U%(v<pRcUKi`mh|SWb=68SBlm z(%dWVq;pt4iKx?^?22wg(JCTWlC=EOPxZ<sVHxNj!;$GPu1sBF5))}v$197WG3;h< z?0jM;3APNMh=G`lw>XL1W@?cfxh7tMlo-w1y=i8V=5ufY-F@---q@MMo<VHPS7(A{ z{CssH8b=;pBMy8ZS6^@ABcP%BY7rx&exZyktZ6fiMA~x`tZayAVXlfma1|~9$PN6M z7cjWLZX-U-U+3F1SEVlvX!eC1T-N(&ZtBtE{k#Rjw}O0kr@tGhZ3O}7zY<BgfmJL` z+M5K-YZf;3ErfGrbE`dFxgUfvi<r(IYi?8mTCx|{X&(ED03j8iTnm1y3Q$Y|?xg=0 zsuc*>zW4@JpXqNbs{>2eCmton>wcI#AE6ApIvDOFniot|mlBs!|7#daovBRKtTVbO z(@A97O_>S=OwWiiZHQy~JP4tb5Aw$<<s9Y>lo1n59c|`lVY&+M!9dj$wWQZ7({W^4 zxmZdn5HM|g-7aZ$9MjX3>ERBhY08wCV5-EWq_sm?(tDI?zB2u_LF$(c$Q+?e1p=lQ zMw!;cF<lHoDCs=@SS5X#c>`s{1XCq0OtXaPY0A{EOz%^sS!DV=eX>xkK*02yIw`4R zS$w22BOROB*<hwqP$ejgzPNy;+t^K1nyHMgeOpSGPDa_vNFZQTKt_Q%Mg(@mT@1*e zY#;H*D%%WOPgvMFg{d8M$NLzclZ(RUZoK<=KcnBBfZKdg&dTo<tcBsTKQy|0uz zPqRyZ@RiDf9UiVxd7so)o=SOVFQj7Xdk_+oMrZC}lAKQ$-*I<6pdOp^DwSGhG3&aE z?<m>TcYO7HD(EGZR#BxCb0z%^q-U4nA)}u#nc_VRoCC5t@dB~^$s*<krGe)LpOEGr zoX74UH&|PRA782E4yR~w>U7eWOnH_ppzJDgaCqXXHnYG{?>H43it*d62R9Z6Ygs>d zbtg9v#wzzle3)1NC5W6FkL|b#J3}d`C?9bu;VY$T%42B<c17Kk)Jy*ml`cu8J5;5U znL*l4q+=FJ_m%KV>2@1;q<Tr$!ztZGmULFDP`)DF(IVZFE-_V8L`W)~imh*cM5X48 z1{0=9Z;45BUSlRVw69ZZ64bG`CG}$N)ct?Fy$5(yRr5a{nnn;es3^WRRMY^Lz)LWQ zB}m)VL}Nj*fY`zIA|x86B#=b2u4`h6#)3v)OYE_Lv7kW^0=C$rw1^64T@Y*#70K`O znYnlO-rP-q_xpeTK96kfnK^Uj%$b=przhh2(nlOJeFRvPDNBc5Yq`R8ZWd*l2Cl(r zJ-~<`tQOaSSo&W&oa0E?eDQAk+{pkEGQCyGOX+?@Tih+0<KQmI;!fmcjmK5LzdB9y zyQ@9?{fXsU%M{$vV_uV?Zv%{~0sP_ku{lv#<b@9<^+>YyGZ?PpSFofOKOFL&(+BTK z&?HjA)HGanfonLH-H0nKQo3J-?Wx#?#VakslnH(-sHmC`L*A4y+n;%G56F9xsmnmk zgexz4l+bdR$;2{c+J&(RT!sCG-L`gNl~%r{SU!xzQ^FLCyRZX4mrPPvxs|B_zYs(X z>lse}<T+8QYJ8ak5gOPP#pM-Nol@qo68M&20`Mov8@``ZHZbCr@3FY_1EX&Jn>S!o z2z$P<Uoa1OV;*t=)uMPYBP7BO=`@jNq)$d=+9N!dt%mhg^31U9hgYdzC0Yg1&o2Vh zfTKANj(2ecThiZVdT|owTb)s)uk2@;7|pAX?1ewFgX`dtW1bAIHs%IdRcJh$K9<I+ zxSe3k7OJG=^oQOMp;qF{)FafiwJVYLV-^Ug%Pl{$sZzTC3%?01we~?lRPXmY_TEy1 z$O~$$<w}j0`6-FrD2bx^Y`M6lmMeE1mAg`M*Ka%AF$=j{A?2lXpUyqMiTudFoZOvj zaVOFXm1w!b-BH5booEl+(~(8YlG&e>bWEIu%J8^a5obObz8L{$d*WmkGTh%{_=E4; zV0h944skvSEQ*t*L!4T!Fg$HE#YqM7IKIisU5D3&yNTp(xrB&qcXiA{?!r=DO82AN z;_ib=2Y0(#+)-5EPRkYUR*oWfINUBXndkJ8sZ7q&!E@oFXP9{o*~*_Q)JpgPLE~^! z%vmhMy+Z2EzQHDCIGB0>=UCRtYw>We4K}eV-{G<PJBJMmPlN07KE<SDBff-2&v8nF z*QyB)EFRYxal*5Qows6wGQla*Ig~f(tnj6ND+CTaKnd`6q!$PTfhY)k2?COl6}zYp zz1<6x2J)`=-FiNT*+@D3SgdcL2H!`{;JDlBr&?R8_294{T)_Q}m@AE!i7#`IM7?b{ z9<!jBE)CzYn3V35@te>V_P9URc$kd`n`ksGPZ}+CBpVHf$*sxS6Iia@TUjv{I<0@d zh-5qzfKsv4fU5_7Hl>JMQF53x5d(Gq89Om4S}j95vozMrzQ8D)%CBHaZ*nf38E-zs zG;SsvRot_D%3N(diOQ!;);5TE<x(z3@AV<3IU!={P^biK7lU6g+KXjjHS0-{XbQf} zhp+2$f%1F49aoSYIDcU-R3RLDoIi=8;jv&pmlA;UCw*&*S6GD{$Rp$-9gX?q1$u@O zWkUr0?r;j4Q)Eb2Dw6&*(~J3Vvb$6GhT}+mvf6wy4>KV3NT5hKIp0<Qi}FPkp{cyG zZ6(`j>}y<aUK}YEg7cH50_j`liDZ)SWnKY!$gCL^V1}3Y*-m(`6y_4$bl*k7d;V=r zlYD&&>$!$Xk3E=DnATs?`Iv8ZaIH=abEcuqso|teB#9HLpUp+(f5nM!w|p+K;ja*W zHon~Oc{coR!mB;-Zn)Jz=uaX19}j$j4L^(Uv+(7nKi7s2B>ZU)e47p5lkiO*_?f?2 z<^PI!FftrpZu$#!>KpYZ{8i7?_6xr;zdSHtULwlFNN|%##Z@AxVxcJ`{9pKT!{1SO zmH7|hH6Hj0e@Om1a|YqZ;LDx=1iK2y3fxnLK?2v=-`$CFm<Q!Ysij<RX(9-uB42na zIsvopsHn`dEhfqtNN_Xqv!dj1YU{s5S?NKU^rujfxw1l{j75T*%HMxUbsNkC!Z+Z{ z4Id#&4vowtd@#P;@ZCk(0q;%tHV?eB4NoF`GvJX$U0^0Mfm<CPGFF^SkFY2DQ8)c0 z2@~hm0n^NX1tc~icVt$KL}i@BSwi9yfZQbJ6FEG$o+NG|iRVe;q!@|PI0>JSxWhx@ z7A4V0633CmB$B{|V^&4-<0L*ji4_TWNF1jmnn~jKmqFqPl0aN#k(d}K5fl=*sJB%` zI6HufaOU2;OcIDnk|KFA5@X{eMhS_90J&xHvXYRUDc6%k6-f+?k?_Y!bP^JU9un6p ziBxjYpCrbS#76pfY1E83iMkUhixWL0`YVYHk}x$Ofv1qrEJ`A3%|iEz)5!;&1hdd% znZFwO;dE2u*r!UVnB;9$ceo^qZvt~oVX03bAu?D?1qsIl#;!u5*h6B9kigQ>K<2-k z`8U()OT`^i3`<U6#YcGZ57hiM=GT{yzYp`zi{;-G?>BCf{GC1de<d=O(9J8%{{y}v zH^%Ze#q*Dr{EGl`H~%Y|ztT)${wFkRgv%zJfwxvPYT|TSh9+FmC^rL<A0lgrqkaKY zU-9Qyv2Yi;Kvy(MBd_9*NWHFTAZt}T>jRQ?9}l;kh1<DlY_J80#Uj6vL`jT9d7Q+# z?UpV(z06FK;PP$clo*M^IElT41XqXL6_`on@Z4VHVkk-QefkKeytUaU$4N9CPZ?x; zNDNgHDJ0R1ASu$1B&>4-kcB@^A}l1@dZt)TIhna6u}&FqE!;RFuaTgWz+{?WCMHkg zG)FwPZ({5QVvhzkrf|4uQ}{Ul#J&9xgLl!!5f3dHlCbnz(%S+%N1Yu}(gTUHYlyv+ z*qAc@5?r)iv`K}1=%S6>Tsc>&AH?C<`HjemNVxMe67NYh-Xo#yEZj&o9$#FeD>mlc zCpg)S3)M@Mq6Bq6WuTQyCScAM3o<Fvbk?)q>BFm~K<TZ{M1k0ar~#%f%xEXX>P&fz zz!yXavWn6hbkL%)Rg{$|1XJOQ`D0Cme<-4mp#&JJmnsTF=L<s{Io%qbPZ^`??>sG> zhzyrJ$Ewd22+H1E#RlNg4MzpeLMLjWXF3W!PYWd`3RU7#=nuzH3J+?b)mmtd7FvZb zbCwn=5EMEqRw&06&O(0!A=GpQf2^9WVcuYg3~MmCAFt_uq|lLCXr&ffqlK2U(3Kc! zpr!&rp}V6{p3{>RvDm)4*;?Q=jskB$fx4)nM5TrurLbnsxQ6GKYGHmYtdNCG*1`mW z!XACp7Hev&w(Ow={xvvW!z8UCF(FnZE`^4H<SY5F7Mibxu6|0|axx43`x&XBKu~DE zSfNR+3VoQRg?g4a3JsCrU<ol%s1lb#dr6_EYoQah(C2j&Ie~@Vs)Y&!h0c9MY8u}! zo2F&$=P2u7EsG;utn{R5kxE*Md@`N&{2LR-JZaIbL?qEoc+*XbGzg@N;$hPw=x_x` zS8up^j28!?UB)W6AE>40klV&;ibx;V4T*u8Pm!cYF6HdCec&>_dZT1yCCnVt{14^h z7s|qH^B^*NCzwULqDp#`q~C{hS-n{cmUQ=5lq|@jNjR<_l7YGTaSo-1TQ7rJS?if# z<&fU>C}s-HX+%}A&_lmrof6FeCyrB$X=DsU_)|1r9EY#?0|}|@y-;ucS2U&<P|VV& zrS7PIHeRntaHg?0usECYFK+zAYY7m1R`4%)K+L*h;fFrT%r9YKb!jhmh+Kt|ikHWh zqUI9rE4~_iH3#bF$pqMFng2S2(_eMWe)HqH$MIUA9EI62xgNX0zSugrpu?xZWxUn; z&*ToDPFgCrTG#K?71+4`8k67SyWEGJyqsBKsSpme3fn}V6fYf`Lz()D3srM!i4sn~ zQAJflHXnIvJECG9ifRk@@v5kFM><5sm+I~-7PxL5t!Dw&M7yq%)C{B^?Y0~AsAzr? zz=#$sZmNkKPXGOJX}BtUnUw8u!#w0>QXAYPJGp6K0dS^Lj%e?p!p%cEPfbGwH=K+| zqg4u4di7(%O*y{I>?gM)8|EQ5{ohP1n_G$;vPokB*flEU2sif*fNY8%^9*{*bll`; z?DRIe<H$@V6wS97Mth5U7DDM;Fr2|eRUy92r$B}|rQmPdcoM3ADG<o_R8GoUZ5pbe zs^Dfct6krj?d6^Mtm&V|G`4Flrl{5Y*R$wW=D+p<q+v@hb2+>K&MOaMkfG<nCp(zM zdGLuu4wg*74{d9-Od9sKzhusk)f1RZ874CWoTB`s=iMdJ$ibIc_+LsxNMYhn2!|?I zocl-}I#1yck46)QXHM}0>6A!0nDAo>_^uExFn^qeZ}S!F2G7VWs_Bc5r9@^^o6yt5 z(_dtIaW^!YJIMZ121XL6M|6-gJS}Z$X*fxX6PxB-BN|?UmRxLI((Rq$^v@rWY9`a! ztw4m@ZfmDl&hBV9%(k3eLm|8sHUPojEtYVrLv#;*hlgkAH`qxLmPAX6=1WMEI}t1; zfjrE3w6fGp;RL{vRZ_d0F)Q`(o@G2G#t78me@_HU<Y(CH9iqE}k<5{4L>4Bbi?j?v znAjxpPXB3+$i<L}MTj@sEuDE-dQX%dlS?ZmY6~nT=5>g6<@L-(b^eiQn{7U*3J^h) zmfn1)l-|hFN1=4+f%I5-Jcu$1Rj^m{C|{<?uR>_Vm5(itQo<BBeszi0R=)G^7vfs1 zxRSupRK9o7BjF&y?Q^I@xxG-n%0*C)5R?`{QJ}V*0Cy8$N2p|>cCV6~nqz6VIf?~z z07CI{f%T5VJ``9N>T{?>t0P2TV|sB9&)84~lH6gq8lha|7wwz;D#K&d|7KE#9VLLa z#~T?;`WrdaakLTDC>fc)H)A(SRKtu`Ee;h<w{ei|8iIC}^j%N`Jhhq%{OEY`FtXR2 zjm#!!&|m3j*);X|ZkrciSTUf)LOkv{?_oB-hC)ycWaqwV6x!zG_?<fQS}E~oq|h_1 z+G4{i5T8bV@xafK$>Y3AlSlX{&&=^NHhc`>4|(95ZFoB2#sfc1XO=5XPr^_1%q&;g z@IMd<M(*~&f3x9V68@tHek^4a2LE#jKLlTHA38y2u5tdK@UuKK*JA~)ljl>2GTMW( z5e9}L8q8UQe}^x35$hFRZw3;+$^+k^aJ>IV_-YS4qVQVt>%)LA_rQPLEaexP&j|k- zU+(g`Ssq=KOyRvmlv6x2=eJ-MT%=S+__g?QleqRz3;rL%$K%Tl7jH@_pF#K<4~sG= zCHz>zzXd!}iiku<kBxCZuqc)G{*@=5k=bu+iEI5sAn__tA|qoY>f<D435k0=BxLqG zJhvH`<{6ThOcEVqBx>U%P7)G19uhM99iA)mz*mw4UN}mMV8@<Sk?J^!zmH@^a4%A; zE?Z{5!*WlFIgBK*X$-eg#Yj}fNz@7n^enAN$n1AmC-|Bk1PP3;lOjW6Bue8X@`S`~ z9uhM9ZQXk_ha@g1iOujM+9LUJ5(9<A2oDLF{l+;KMwl0n#33Ys<qC_$#5jqKM^F|W zJR~*(8G1R9B=#kVRY-_TRua);Jo_b|2Au>)a!bv(RwNZKa=H|GCrG*Vbh;FoS8kq0 zmdN#5RAeQ*IZBH>YyIAY--yu<c==j!A<`f95xSiHcGK-6bainmi=_8LLgdL9iRw6s z?+&Ll+B)bZFIJn~NTPvUTpA-$87J|Gkf;I3&BY@~fj~1U(8V}V5ebvT!7&o0aS|5_ ziR(NhE>sdSZ(BqXr)uuV8|Z@}qv!x_ma%bCDIk?#(p2VcGeH6p%#UNQ>BH(@<LS}Q zM+$gP0`C#OmKEXD0NaJ9n)v&;{zj*ek%{~#ga25X;)rEtppXQbQfX=s_8`2;?GL6L zflYQ>_=SSsBKVG2=fJk`bAWG$KP<x${zMLIgQo)|596&QDaR2O%}t!A+L-%9u8v6Q z_Qa@FX1<{6Hiyt02^lbaiiSV{vr^Zf@aQB;@pArSwQfedy#|u5_bh{ft(i-e3x6ED zb7Jf!Vh;i~ud2vIk)BCuXj$w+8GRVcukTmgcsC>BF_q>x7RFm*<b+&oQhG|VKXjJ8 zIX5@{sJmVn!OLXQ;09#TVPusR!;L=_I#@CT4hbQayr|Lht#>+OYu7PdPLto%WjCc@ z!x1l2#lE7k-LsL(4J(Y_5Z+O9m@|Vp_Dh&!e=A3$g_=p!pXalX*2Fg<mBgvPq>8uc zj_I=hvz?P}I*6N|@YQe=_HCZu<t5GD0FHXTrI~aKqVC3irx(n_WL9)aT0C;eVOilP zGsGX};T`sMdX?EJfQclqSt!%^myGDeV?{8~PFbORb87g6q2}y+J0%TUTzqg7(lJy{ zkzJ-{Au{5l=N#n#GQsXqzwf98{<na~{|fyB8ZktcB0~Way0?1{N-tV7w`f^1G4V{` zG4J_(!#4#L0^3kr@=@Hy4`i}J{YU}}ESbVK0hA1pp~RG)-2Tjx9eG1{bdhqtn_ILr zIjA4X*nmb?v5q{g%PYS}%VSfSZ&0{h-b>iHyu;-=1+k+g?_-tBmNyqWN>1OIl6SnO zPu-37w~v0#rSmZ3n4||YvqBS1cFBg^ONPA*|BEGnC+UfzT>~v#%HiKd`OQiBKDN=N z@ocB~-kF}!VoFgLS<rPO4sjrsUX;<2J!IpQ7xm)5tpH&{RNOG0w?p_@&rQ$2-NxiA z@NJ(YFci-S5{jSq6~}6yp${j6ISh-E_=DX^z(-d?Mof1tU(l`F`vfaw<%vyZ%NYdB zf-y5{h}--6m5OMTnvQ=D!rdv8AdFs8kfiO&v>Pk|S^j0)fk?X<oTQS4*Y2X<Yuerc z*BkVJXPwy{_>s$69q=p&LOyk7Q#oMM&__Bu{(@No`+~5ktzf>gJfsNxHNvmr7w$&- z9WCs3iUBa~D_((gCv9KZGGcOclgs?}wQbc%jgmt2M*cIN|5z*G4uSn~K*Bz+)}(@# zTaL>Tqt=*z$|ydx$yzhGgnzCx^E5Xb*pm1iiE~$*cahs}i2lrmKJQ)mU1H8S@t>Ah zM|95Fc$TsTwUT$8aAgXw3$7fn*+j1)1$iv*5Sbdplhe-$)x2_2TUpGiV5TJYe00nH z>|Ta3pyBSjOit+MODl}QI>xFN?B~bBch-iigK(!HB%yH8s5;4hD6*@ae8IwkdO;@F zkv~I$*5#O!L6w3zQux8;m?1y9LV3>7A412Ni3=w5+Q^_>x(Y@Zu%kH(&2Q`$t-FFO z%NR?T^%8OXVhZ<*!o1fq1?_;WN=kU%U3k8es^YpH@b`aF6ukUy*y7QtIG!JS@A_MT zJj@)Bvw8h$Hf=MEgl)jt49^3RzOomj!LgAf5{4>1iZ8dSerUs&68??{&Ji%`UTdBq z{49LA^Gp2+4-$T=2hJRle-hy%_ytqin+;9Z7gK<3`_YuPq9ShkKS^!#>LRo<W|f_r z;x(P^FS+0G<bGar*GC@F++NFbG{`g%Ne}@ym>2Jmwxi})wv&?>wb2v-6$-~o0pFg* zKXDT$D(+~+o{6(o8$U~7yRM#yKVT)NF=KFvSw3V(Z0;uJQk#1rEb(8dIZjBb%}oM3 zZkr4BqN0u3A)9;iPzccEt`}u>2!6ECh#TI8EYV?j=TiuJD=o!G!+Vioba>|s?-u6y z-wf}5skhVc?%9|1_8Q(aNl#>Wmk1<gcqd)81BO>^8`k98q4*Da3@c`MIfS=kcxi;U zV|Xcqw_|vlf`GSecqRM%Ukq=w<o-VzUPll~Xn5&h-R&H|?wJs^(R2l>Wq8A9s^Kk^ z+%fO@aN?}h<`V`jG`uUXz#lNY&zKR0cj;h<;f)z4-JO9Q$W|a+l8;AhWw(}ge1%w! z8F#y^MbJRZn;^TrJIo8^4s)!2;HrFM>IyN<9(>>7EX>|i)$R!MG3A{R7&<aDZx8&H zgTKc5iZ_dQ)9aqGj%L}{DN-H#>dVi9!jVj5{#C$=TGv+V9MU0*tgbEnO(4IyCoTPR zM3h#~M_=|AKHI)hK1Pzx)QtUF=KuM(<t-1DT09_*#(5ELS4n?N(>bMO;s1)oVPDBJ znywv?^qAjDIxjTUYnp#1lkqDGd$Dwb=_<KQ6#FvpP3BLGF)!B##_n|wXRyeiT<gYl z2ffE8MfjMXDnIF`&k*tT#+QlQisEpw3?Ue{$&cJz?Ot5sIE+L%{LFZX*=3J5;$+ff zEVj=KA*4k}&5}^Fya0%kXG;p}u}7IVwlfN**0s4@@twr(h&FctgOShi<?KQWo{>oO zC&VAoM_d4X+VN8Y9&iGDWn<KLHJH}`jEwg9u525AFX1P9;3I8#F5!Hi+fCoP(6rK= zLpU!qWzWuin;I0rlte6%9`sEQA>ExnNKEcd-JAKRX}-u*>-TM%1?XAVB)c8ReIS`T z#YwK<a*(Q$%arYK+@ZTy65o4Ga*cUFVpyj-4^50(Ypz$+iSf2gNsL-&hAXN=>3>Y2 z4DLsroJ{-5N?1$YznX$9(OXbq*NDQQT>k}y1XU<EUloZSI&>~SF)E^WL7h(%V;|m> zPZzt+Odz}Pm{s_V4GY9m7OkI{9b6m;(oF_}f2fPBg^N7CgeEbj#ym)p?eCMsQ*+iP zN%+T2rfM4fBQDC1y@^)uqo?3JsCtAIq!}9+Z_El_hgy=?(9!cD@<7r1i1)|U2f~>3 z$_n=Pho>Rhhv)wn@&!U8`t<e(hxg_mDS=Q{pI-jpY4{(9twLQkqa-XtW2n%H@KhwH zBH0J3R&rK&Y6b~s(3kLFp0CI7G!8zl0t3!8l$t}t9FyG&g6^Wq>cmQCvu*gk$!0T_ ze}{2Tba1hmEa|aZW0&j!Covrosj^IF9uj;dw~2Cqagpz-;2MLRP*+U*p}slzKN((% zvv^~>Jc(H|vk&So{K{hcqKR$#nhLe-dh;N{s>p2~%bp@S4z0X}@XPV#)>;`$Q)@3E z{CvQ%>osya*p=O{v4-8)9XflXGj9QQJ>)e+#{n;T0RQQRe<<GLMHex1jCLF^!5#*l zn65qHM(V<9iNmA)mAoyba+3F2b)8v=E|@|4CnSUr;NoLihX8FV_9e3|#a;j!JEz!7 zPzASQZ`_^D$PM1A*qwwQd&Wl<`=2~f>>tqLZ7TLKh7|28_JI&Z0>vH-s@qfSJHbF= z#m;R7aVYjn3_>i$E|7pk75jckk16)g-JsZ$9g4k@3Df-H?JBhyjyms<GCyW3^GApn zBlomY=7QPcUSB3G*Q3asG!pn-gkRC7A|C;^cTkaUV0*$TQIRV^6@Q2#Pn}9#Ty1_s zT5CmK(zOjm{tGb%6?qqm6^eXc{~cE3$^uJ~n;EC<l!xAiD!3K-2r%eW<l|YfRvvl~ zDhLm~KXkrLMa~B=?JM#*C@Fy=Uxx<Ro+7_Lr7cB%t`)?g$ZHX4+KN1ne_I~<V@Z!G z^5MI+QsljvutSPmh&u0_B6mjFZ7H%r@7bOr*Aw2hB9BYnVMVTn&}>Ei5L9hNes(h3 z9(&2bWot#=wrd-TJOBi!$R|>)P~?xW9Jhm^#wXY#0R62o$C8PiQsi`~q+5~4fk9u% zIWdoX18KHW<ZDntDDqio;WicdrCYYA$RU)JK#`w718h%`xBjOsMPAbi;!xxR!I7=V z8*Zkg)FXG1^q3-Fv<vk1CWl8p4GGwKxnrTmmA-SjJdQobJEYH?EfMEB2<$}eXyurF zWjEQ*cW=Tcd7SgLHvD&Vtda3;I_F@Q9oFeDAU|8Dn?cpq>94M%8mu<wf|J%d-H+rG zMH%BHWN9&zC~fHUpNF^B=~?TOp=pSqWA86>2pR}NEHg?GMNhg#R2y#(lT`Q$#H*eA zFlNQhdwEI7{hSaU*a&XpBgw&U7)YNdhG;!~fj7u>v^A|W+w*lyHu&wy_w+7OPQ_#t zZX!2PbK5IMrtDoMeFw2goc4kYNN_-dP2-xo?<~bmK(SaR<^Th)31kF9XJq>OF7Pk- zvlAxgIh^+6M$O_5z#6dBAD%N7DOn-h&%H}hbPv#DJ}w*JVpQN~$kz$=yeaMo+!VI} zXgH#>hCkNHAH&K7m+;cwl0Trr*&L&+_J{1}kT?W1TM$BK>3dpmK@j`GYa#aFx26W$ zV6t=@juo#r5;eF5IA7&s66GL}G<Rxtj<1*<TfRy3MWo6Q!+M|35@_sNYl~oy#d<h| zRYCjk#@8WRhRw%kOICPBy|1K@hG)%*0s&B8i41u|u~)Aojkk~ij}jvxTre)ll}JXV z!B|#Ew!dJc;SW{FOveJeuT)%@?Hh@SY=PPH9W4v|L!~vQ-V(VLW;r4liQRTOnVey| zr4TVd<T89XfsFeJyo|sLS^;UG1dbx`%vM0<8{1Y>3FSN|DwD~dS&L{RZ4OnA(`k`< zvoRML`?i`E@s-_a!#^Rs5MR+eoqn(l;_41Ch+?{Y=Rm|)CZ{^N=25|%g8+{Xm7LBc zsiP(HzMjlokOJRUXT~z~7B&v%DmGfb-nom3tg0I5w>YDoVD6&9HFx0{%|A<gum7nw zD;ZJ7RmVT{#Dc`ARpu2%bxcT{lNhzq+@`3uqJe7P#Hi)wBBH`;PJ|5Ho%!}0-(>8= zLswpCE(D34c6{TxFd1y^_-40s@i@NSr5ts9n-I_Jtm89RZ`bj4lVblj$M?y$E<57* z>VXEw7vYcP_%^aK+jD%|ZfNEBmf<iK9pCGdT06egL>0%ka;ok4Dl~g5$2S+LJK*?w zE%^V(@!4LFi*>f+tKaZ{aD2C+S8dbrT}@zHjxU?QHXYxwg#Is%Z!<dI_8i|=geP)* zH*AGLwCDI9X3jPo-yq4{j^n$SnRm+ZefM{lopO9H6F-sT`vLv7+wt9+7`4j0p{NeW zcVS}GN^_^8IvihGV$^bT8ByW*{sS4r9G@&K@rp&~J_^p2E}bmSuEt!?Z0K>Awdyj~ zA!ERD`{LdGQ5cMT{a<k-?+WtTmw}8-r9T3wuVgC<(Fvtjgb{l}X^W{LRRsQ6ti_h1 zwI*3gv{z}ft73a2c&-#L;+8DWJrdU#W%~OM&+sp3?sTQ!cYWQJzDv7&bRReDUDV}E z`JG-D<y2#r0!)rw>FaAvmrDqnd7<UW?_vne8BE<$fh_@{Y!njPW|UVAhmQajSAeAo z0rRDZAQrg3_h*-+yb&M)M5*k{Ovuu`5tM5idn0~D1Outon~$!AM*e^=XFp%?qQG7T zEc#y;;3)xA67Uc^@5i+B1_QRV)4+gU`|8SwQ9nBVi<xmUGDgSpAM06VJLveMIic=0 znp9+S)bXRlcnu~AcvcKK<P!ebV%}g@sLr4GjcJ{=pg9)tNEY@}1j98HN3enm*MZ>g z`iN47L?7vy*R!oEBz|2Zn|tH|SQKM=pbR<ozQNYV5IBQAUc?`()42r&>l;c+P+F-Q z5PT)v1CQ}Wsur~VIw?q^(3?>ZLR}1P+I(D1vT5Kd>+K<_L?GB`a;YN0k}B2-r+(r= zRK*sS`Z4yJW8<E$<N#D(&r()tY%oz!Wp$J*9F-HmMCb)gmEnm$G?$VxYuUrgGljBT zV7*fq(^^>>&I)dnZKMO1jvP>DeiBjXSVa{zS(w=%JK^m&oxb20BV3UTKFp0$M%&d- z0aC*1kGmAig~z2q1dPjNp~HI7;z8j8o2<}Cx=$&%8vCoT@mdh2X(n%`kTA4F4Rzhw zSF(*-9-hC65)D@v5$s$_-83L50Hj$U=|?I5#51KV%YH#h&yl>O$VpOIdQTv~xfdv# zOEkSn>57Dlk<^Zat%s@RGK*PLD^Y`FSJ^)Q2kY=PhqEE)dsFvHx^;z`@+@_pF6kQ- zUu!ApmrHsx(&@<NaX}cD%Aiba&&^Ep-D=6Do{Wbp>Xd(xOYKCdeS<*KPr63hm3U?{ zv<h-*6v$j6nEMr3lhXSD`OQ9*OF+|WiE3%ywMc4DE*4p4G0R>Txkz@E%e}u-E}Phz zuG>bYOZwlMt~_h~C4CnTTU?icWJx;D8Cvpycz7OtY?o8Zv81#ROd_TG9DKlWH(*!r zr`+Vb%wLNl_#gH^*E0oo4j!`r`<&~kYyME@dW`JomD(KHeI(mHbpykmSHX3^-D>Bj zudKJ6|5B8VR|3W7IbXF+g-^>i9};B)5}fYZSN59&<r$)^@t_z7%B@8C+JmxEP_TXQ zO2YZRy1SGP4qk^7Ws|2mH!4a#dF@S<D?HWNSBA4%<A1II$}XM}uU?_1DBlw0Zx59Y z4l1t`g{Rcq?DA?g^kY@#e!_W5Ez*@nBYW~3?)|7=p=ZTBW9`o0L}c9)Va_25zWxze zLOl`^sc|<H`Gq82@{pJ#B=Snl-ppUdulQctUh(|TAb)~5u-vS;oE_sj-pAPU0{*$t zRFKpNvT{O<6^BP0FRb+Ou(GGJQfY!98R11z5e8Y{C${f5z7Ij2o><i$WX-z|q1rW; zcX+c^n-W%~#`HkBFhB?CR}-Vwnza%(IiK_{O^jM+-cnSD8yp8zU-4m(jk`I;0WgRv zMV3e>m0d*K2xRcSC5tlsb$gtyEIr>zuHb5DRzvh+Hm7wvo5OQ`yAk-_b2Sra6<w8K zb$ue?=M!U(CH4w*kKo1O<z^<v&LQ@Time`AXy+ux&Lnmru@P+D0ghS+Tb!`U3Tg`k zKR~c00uIU%E}7i5HfN=Og42cQO~g6fK!VzNGnlJ7kG$jMjo3Xy{{lA%xS~JD1Fqdr zxU63|H>f-agg|f=HcV*1LBU~^QGJ<|C4%W9W#R6YP)C30ROdONSYRXj&2-F6?s0tp z?rv$uU&es0MtMqEM0Gd{^_A=@@zxK%l06{-jknT7P7Ikbt_ewJZu+5a*u8}`*>ug# z4+RoJkfT#ltPz5;#^*j`Ov#~2ShOSBnm$(Am@Q}x3m)7+R=yOAmEB>e{FPdHX}M%O zGCB<vPw;wyAEXjid?ShqgfHrYaElw7v8e>l-IxKwfCgH!2Unsj60!K{D*RjlezJpG z0-=lgWCr?QgsYqv{M`xfssx6t@)aEkadFNh<J8azo8Yc6QIP}!=HjpZX$iC}F0RXM z)bZRJMilX<3k7M#7)oFqrAfccDb@iJc-W7VS$o;+C*Z{M;tFBmP-ES2`UBab9dw0e z-NiWR6YyQX7`7u=xY?J;xY?IKuA6;17W}SM$AS_0on8kmCL>VnUV^{cbURlXNj^0^ z`6J3kN}(TdJwm^d>2ev9%VA81sOuu%!o9qkfq%@mV6n9vzBnf)hh&sXIrJr3>}U)E zc<<wqa%LHZJm52P?1jQ5Gh0n}2Dr(CbvJHr7P>-v%UUyOJlx}Lp5Anw4G$3hO)Gf8 z98|B=91U3XZfCuHWveu*s5L3fNKfX5?<YMuCaE`#1H79j7zir7(lii04PTLuAV7Vt zXL7uzSNue|KaTcr)93w#XwQ6LnlMQeAi>(nL;aW#Cvm8dxY$F2+gnh-DwECpC*upH zM{zWj`5kt<CX%r4t2RB6&vG4{vpDrE>DA3Ll4F3&i<!A~QYrf59F>EjubB09SBfXn zz)_8P>mrbN!6Lz};ttLn%IZ(dS-qKt{BHd{kf@`b#T5)eQ4LaGyV4E~+h7t_y3q6% z(mMFTHm5OXq9k-TUm}^~amu81w^IqxqT88Fl?hs}lgfLW{@~m~BnE>2z(=HteA2sK zECx^eHk+yVdi0(#(%~%2IrUTpCeicUz#nU<Uq<#?2XeiEV7<hOBWhaCGvniq<xVY! z5SBAPN6OL1r2@efxd&nqZ;+PN#ZlH_C`;Sc(I&60V_EOw8UfTv1)4rW%SvLM4wbUn z@8XzEy=^{artg`eo1+BHu4l7``sNaDEtA?vS9iRWJP{@Ht<SwihNkz)!NWSflFJzu zo`^=!o^LQY2wICpVnI-1wu9-1isKfse4(iW>X5vIW%3cGVj66F-5~p6cQ=?PZRQO6 z?paF#WvhVLg`*qnIZhgbqZ!kIMYVMYI%LW$Z3^cH6lZmXmI<>r)H@G)3oF*lgV=Xa zXC9OZk>Tba$sFD?febh2?lv+sGbeI5B!^{772cl+G7<}K!|4>B$`iK(v0|3+hBD9g zg~u!~Ax8|6A&OWcw6uFVSNJ<uC#^KvOkXWCnH3Eb-XgoxZzG0amNtd=G>Qv^$1{v5 zw8Dr&^V1ntbD&Z33SsIJMrhF@vV}iTWNQ&&;TF)zpr0MOJ~O-j^%>YZo)wyqnbm&+ zhShT?0^%=PoPpKzI{pctaTu8m>z$%-C5z|4W<t)_3MUHbH#B0>_&2>1YHLO#P#dru zPvjP7qH$~*;q>(v0LUorEhHxq-rEKLjPS026Vy>b)#N5zQN<rLAAZbCV1Q_iK++#a zCLj>c45l>f%SUx0Zk!_5DsnlH-#i?J8=t0EGTl;yfs$m0KMA{i>t0j2+SA<el+2z8 z39J3Tr?4NOL|nI&o+Rl{Xu9$(jdO&ga|jE3t*NB%A?a@-eMInY)$D`GT+mvmmrE^d zx3E_hHGBS8bqnQ=3SENuDX?H`r@(@LI%RkGQI)*S(0wkma>YORQ}7$kNRG`$k$AO5 zL??XRxQ6wUQ+Mj_{Nc%I{*pSsZ^WiR_+qH$YO~^0s_Bhsu+V^S1kQb~HcOENLaHJ{ z=x8Cd2o0h0@a%)yoYB#jST&f)MARDj^3T@s%&~HRyrLXPl!H81$lvNf`3o^$B+rAA zE>VwC`I;zwJb_VXk+Pz^MikBhIs0v2Sw9ELT}0Ur32v0f9K2jllyVO*`|C6ooxM4Y zC|y1CK9vrXRHEGGK}psCveYCK{+9<n#!=%R(Q`#ccxrsA1LZxU;J{(4>YVIAd6X#F z7u^bFkf30Fqk!-u_=O38+d0&19S-zpf|3<ujjC1nh0q1YEn|cTRGt|lffxZtAK$Q= z1dj0#I6w*bA<{@Ui$HRWfTOD}69Sy<bvN5`8miv=6j{c<;}a3haU(esxf4u8Ok_*W zLJ(@%Eo0JoqZyX1GlMCV8A>sdr@t_mO>v@ISFuhP0OV%LPh=hbM~>5s_Bj<tzw{1r zC!Ff~MLJyxFF2e&LipKYo&uYZ4RpYe@sIioej4NaTr2!61IW!!Es=3ARpi-NF6mFy zKMs~$_j+>8)?77_T+J03ZvA?9ywt{dFe_0j?<`rpYnII6ook8jUHEM<QSHbbq{E3( zYfYV^*2KBEG%;$msZdmhTR)Dd*Ej`MFb=}1GFJmNdX__-96q-rGkNE=GO11jr3kC} zwwbF&Qk^goCpm15!x3ty)2&^RkP=7d#<1svtNtBXTMrN>qA}zynXvT2!3vRSQ2Gmh z5XbuGlNrQ`$DJizaRv!~BVDoX4+Gs~uqN|Tu@_-ygBy$v&gPFbI=BIaYs9VurK{)& z1YZeW@q%8>C$9`h&z6ExS<qw@w7rEu$rfCNsR&^`Bo*ORHfKZO(W{oSIjzHcs;PG@ zXQ{Y6lBM?6QV-DT(bJf}5KgwY^e9;pmAGyc>xg5V)=Y}j@gONJ6Q#+BfZHRq*Y7LM zqE{8bZ%{4FVI$bz=hc9*6fzc?%VsgT!qI4*2D4am&Vdov9lz#Fn>bhY?)#Rt&d^$` zLrlLkM`WGET6f+~ttCsMT1Qco#;zswgVu^8|1_z>g%$S;FsMOnvLK3lwtYjs>fozY zEPH|vguxI2#9)bK_u&-F6%<ReG^dJX9D*2K4ik486HM3;DJao<AarhKp#Qm;Tl=e% zzvVsnQ>CB|*t*L>+-b<lW=$=^ckANq(P$Gisbo_HI!#y(!zE+0H^b@%DQ`8xd$SbX z7ual+lvU<hY{EolLD0;5Nao4n+wE5bo;d@-@rKhnC1r=NPh)@_ppUed3De67{up3_ zhPXh}2zu25an2CAYFRcOQshra!`UO1D|OfDry&y%h-X$qw8*3Jn?8cGiy~`M`Vb&% zSY3-^fLg6|MKPBnsl5eBi!8I4ArDDNE!kBRof_HnhFrUxS@dhBZ_;$-Sybh7NpIG4 zt)-;Dh4kE`UB35Vs86l=8Nq3E?_o<u^vOXuniSnl{zQJ-VzzI@&(?rdTCU|}Y3EW_ z&kn|A2s@UlJnj@iEmdX;JZkIl*uRCpxf1#E@GhNen~^VLKI*s$fXT>KPmnmlhW91> zEKhj%q7C1T@G1}d5{=4g3<Igi*`BCvrVU?8_+$@!h?pq&dxr4-_;L!^S2oWsKS+4B zr~G3iJe7S0=1QU**lLQ?SB6K<R0N|4=T$iFBDUEq9zi(oK61l1+wffo=gmiqX@1vG z2`c62X)3>jN)>+tkekF3u|t`qu;0mvyc#2*U6Sb7c|xGlL*P~+kXIPV*IbSePrDY$ zy`SW6E5yqyj~uVL?f6cdzZ%J^FQDAs$fnBl@KYnD-(Y+<>O=+zTg+l4N5pm@3$ZPU z6&xP-4p77#D3sGJ3y$2Ok=2nG_(yzQwON`;>TzabX6j5aJ6oHXwdRcz$jmx3gv?x~ z<lJs>S7E~MVPdc{Q6EXgAF<7X@4}|ow(%8J^(?~F+n+;1-dNGSJKEuP?jXKbqLt=d z^xtkzbV*{=Qgg4OI-JvBqIzSwd^(RS72Dyml8Jq=Q~m`#tl@{r0Ja_CHO6KC<!1>C z@Uws}EC8Wc4>UvT5U)}EkxV)Uf*)h)aWXAC_!}P0pdSkaw`#}xfY2CO2NkFzt^0?v z)4dMgGpZ1m-4$S`fx88lqf_5bP&T6qBOpX%EQ!m6L0zTO(;sFrG!>1R6*~M-C_$iT zQA&333WN|da6H+%`)O*jDU{d&hq8ksd&{$lq0@Q=g4y_=dlS1{3~BIC6h6^r!&C9g zW7!kp$!Va7&UtEvnaTn~U5<jx{b4_{WGDH%ltL`Xly>{@bB2|UJSQ|fXIOA#j%-I% z!@J^B_ClW`Fp;fLq3leaG3jd`O<}|0ft!i=0VTYugHtNfZO7Awy$v0Ptgb7M?iy%W zgnKlwnm4_v**=|e7)n5xd=!7IF!@y08U|ak+*k4#GHcUpV+ax)SqBS~u7{fmn}@Jc z<LWSN?holSYc|l@?u~=&<s4I-W6-{+E|x9Dif(Mc!q$J3#}VL>#f7IqfGBH%pbk$% zLYhC6SJ#5Ad8kY9BH%f;f(DAVcF5ZeohOA7?TOiQ{^1`|@AsWjkM#$BWet@{?x}}F zeu8Sd44_ELIvxQ@g!iy%)jQc$r&en9%|98`%qzej_LGL@<ggITVxEqi?ZoYQ*hz|w zA5W$dJtQmaZ?Jth9TqrVWMOZ`y!sP1{boS%8UVS5rmXZ8KaT|Hat0Dme}t8zWCtuN zoF+7_-G=@Q)YZ?Fa3-eBq#MFZHsNt~(caDq`^p}o;xJGdiRdB{=9jJxXx(>ZZ02b8 z;Hm)ZvgJ6|9?}SpD}<dg=sbtPNqdW$=ola&$VwOueyfq~*-#<WXM!*vyDsOtk6HP% znOL$MJ1WtPtg$u0o)!E%_cAz1$rR2(Rn^MF6VgTw*x(NhgNk=HJduUpO&0g`11KNv zCmV;}_LO4R`9r&^E@cOsWiNruyaig`&mLm(=GjGP^+lR!;;+&2&;se$?d(_$&l)Ow zo3LGzx`0<ueY0Ps<FxjF&RRqt*k&Zgz(iE<-AuHCcfXk4(FZell<=PrW^hd~lmG06 zf9Slx6a9ht8W;{2a_C11dzxx9M)1U#*?zaDvmrLh#vxF&?(W56Xv{hrKV+ZH>k^zA zRKP{>n&=J4lNJ0vdOd!T$JXK}kSFg1G&(gtdS+JeH^8F-{RLj3W%<*Ampjl!w-4wx zME7&1S#%0^1E}8IE5WjQBecuXLDbaMCV+Y|2npiX-4Ds_35(=fkT3ngyi%E5n1K;p z`q{&!W2rW?K@+D_;aheIgignK#&a>?ZFQWn25N*!Y`Hh7$xMeS=wV$D5-(Qs0hO1p z_{ru89*oSS&o25iIWIjcl*+BY#c4F`Q2G<Vh5LO0KXjs&2d)PfpoxV%U-7O$R8ySJ z`o?Y?no(+QW{pGR8sLL)RmV2-=}B}xZ8DBWnsCT4IIeuaXECSq1zH`=P-(IL$1<`$ z)@D5$i-?(lzDoiNS~~HtVsSS@T0X%Z`SPsr4RFlo)8eAZuo!!zh+)riII6Z3v{1EQ z`D4{<6BzWD)aC9{n4gxEd$^Sarixn8J)pr&zHo#=PF@4pZArleq`u;Npmfm(RSbC~ z;uOP_f5*g7MKLTxSKFQ#sz6uzpqLas7D0}zvZSzaDU|j`+}{GpO7GKP)(8fAAF{<B z2x4qO3;^ROYUjq1zjbubU<`uM2+sGodK+KaeG*!s*7byQ*ymJtUl|Qrq*6`z)%c=m z)<7C+X12<m2#$Tlm90$ES9U8>kiXVUME>YB+TNv_({Axjtn0s_MdeXH!NV17i{giR z*yXWKrV0+B@kRG>rZKx1Wu0k}ZW?_eEb_PkY^l}ebrepE+=5@XMb28USDN9jo(}^- z7^SuE1(SYqOyl+w#V)Z9NwVlY@Dw40u)WX^y)4Z0JDfH~*TNx?Sw<Z}ycc|-7eyL( zP@PagUkRtVi>4jb868YA;Jy;RP?8mXft?2I61R$0>`NtsTFUL96G=q8Kubd){7y2B z*}52iCQ1r~?@VFRkow#idM9X|@K0BoS58s9lLnE5uEV#rqiwC(3n*<zPP#1M5BJ=5 zEFaF<h+91eQM`69D4u8V5>{pxR7O@nqaATh$92-Ory#s9?8<IGvvD6x=^)S>fHY;b zr?Lvw%Bvx(dnv2<w)%>-W}<{Db0}GB?u&h1eD2FH;<3iQ_N3}NL)n&c51H8?1lkFc zGz;F0Bb|`!*FtmhWJSk;tTT4V1#-X-V*=bu)bc56Ne-+nde#w3jei{5^u`h;T)|u_ z!RBK{f<i`p_wVn+9L9lMn&665o0xVf(lo!MeaN({vVsOvEbZQphBaJTaE)1uupv^} z$^#Ts2y7W((c7ICRRGOErk4pQaREXA)S5~H3Y`F7SzmP~HD(%%+TY_$WO9O3FC_e1 zGKS%79+iQ^^H`s~36FR9ipL?{P5(4e8@vg!Kl5`(3G(Tsrla_mb)B$AWg?}gKq<i} zx5|9O_>ni2{%rO<ntyIIcY~-~StlmWU2PshZnXYnG?6)WZ}9Rm-5jF2V}9H!b&~5f z!IATpV@D(V5)-a7r;xC#?SEL9um<&JUqyAO#2blG8_fE_vC1BPlvegh=7wkd5x=cH zBE2~FOOdke6**3(SaB>$ZS)4oZ%t5x&VN7`Er`g(n*YXGI;{WIv1B>K#CiLXRWS?Y z5jQ#`Yp9!k^YLPvBGCe5YR@+F!3ZXM)Wu?35*anKk71MGmgL}Kb02$f@!xrcdUfj? zxYrcyRkeS}&L5I-4m{fgt&SZ;Ui==6?F<kov^wb1nQ$Ijio959$209BAXQrleVK5% ztx~fVQLb&o-v$2_Ya0&6qm@pjFL+1*{Rk*`0qzq(4+26iz?}kUM!XO$LSGuGMX~(V zvHs%dSoX5G5zHAS&s>mD%WBQb8kpGiJ~uI5oe2t_Qyl#hqt=`8O4626r^I*-X0YJt z{hpyYR)=RU@2iUY1EB02`al3~1uj~j5A9{cIJ9?MAyqd6qA>GFR|fVv#q$~|hDO#Q z4edRnmU^2^>T$iTiR*1O)fi|9U(y#HC&59v`G{R^+voJ;9=n*jk~8ype-@gPk+#%7 zG$%8!8}8xG@elQn_1(JwyugfPcMeJljX{a$=qnYzd7q+fv0WUY_k+@N#Ny`p*zuRw z2U%+^<$In9M<JmU@nL>jYWFed)tL{`r$raKlxVR4UM1iy>Wfop?8q&EA`&>)dNW=6 z$QUb!B*tqn=LjBbHZ)GcwbCQmGFVH6IN7#-{JPtA)_M*N>~}xDLNvxHP1o6hs|SlG zp}v@O7SR69N8-d0v}Xl>mA69Xa7l+Nrvv(-O=TUEPRWw$x$iK(d5C)|G;V?xbkYLF z3oT+qw4DO!N38<m>$D3+t<ecOcMhBREDh^>P%iKNx3f809>V$Kp~G=6F8+c74adE> zS0g<ubm9k)dZ1`Y3a*tg(l1X<2G5)Dr|Bng+wk6S*2%0}h<7~luE%f^KdloQp)N_N zEvFa#q3(x+8UPlh41duA`15e35Z2{mOg{o4MF_|uB96cDj>R5w;?qnxLJq{mQ@~6H zk;7AS%<u%jCeUX0T#!nUT6NIVj#HQva_&of=WR-AIBKpo{ux3>7%F@Wj!%bVwa$Ea zIJ7Es1=4iI(OOnMkf^a~BVD8n*=GXkS;3&SCs5WD$<kojp1nU$--<s>lXP-hH|C{^ zg@$EzJX9f+LUP#AAI!y$do}9a`(Qcq-a6mB288dN=jMXJJK`KlWbIO;!c}jvenpIU zT>I`8OL|Dt9n<75O8PyTF0Ev@oe14@hQLvS-e>^ROu1M};@XlkiA0JYfX{Tg249(8 zubI~nnFRVO?@L)%*|v#2nwGpT>Lc<lL^(NZXiMHNNJri7CPbYmx8I<tfgz&SLPMp| z@Ft~!XAr<Qml)|2+VF6`va@w!tI(`PoEI7CS$})XhA$@k9uNFEjh_q6Q-sfH6+ipR zt`Qr+`NmrbABQiuv@WyZR}#*<h28KAZTKj{dAG0|zMmKgjzJtjcsG36*X=m`(mQXk zscwe;yE9)!AHmZ&5d<`m^ZA8{`%L|HJDX`jVz7q<5B-5erFn`Z_OVEmQ?(GZTRQaG zVSr7Sv?Zo5Uh5;wWuXTMdA6CG!-Yrz`5H5t<hg824te%~zlq{#hgmGCP1pm~n!nV7 z)Es3b@Ni<(I`fI5I*jLr#HjV=2|*Qa!XV+B-ZY$b=6nejOA?sboI~Sgb{GCmXl5Nz zoUeGkM>5ZeWOOHHKa?DKP=#X4JQD<?-8kx~Z4`kgr2fR~5Yc5$nHP+KybI0OFstaP z5VAdNav0cun8~|1SY;j;TZ~EI>w{GS=TR`|xbK(Wm{vS;h|S?X?QqyJabblforQtw zH(zh{+<Dl3i1)eV99f5o){(-e;InmzcQ|miAL8BK-wN@5LI=HbAzmYDuQLS`&`6vj z$VOb3#lu#-P$U-D?cPVczZKWL2X72k?HKFFxvk>5FPN}{aoz9eClkhX%L!;RuDbz6 zBxrr;zx2DYxGs<wufa?gym(w!b0F%3W=Mk!8P`q5uRE?o%<i}^8^>{Ewe|a>MEI5F zIuZ<zgXA#(mH21@S6hFU_nhUj><eL=PT}LI;B}yi5oda(QY|(63Y%?H#5|dU;%=lU z(-a^gE+z09<TTl3T9-oO8X`}N<)Z%K^mHk#LSp`>8Q!*2gF;t%4^U^NJkXKyzIhc* zkEM)}RaQbh6ZX_gtJ@6mo4``NiJ-%ee(B<M9<9SP5bzv*E!S1(4#x4Hv0AiU)$u4P zcZ4hZU}Ue6>s#zQTx>oE5ZUWJYR%=0I^yi_mKd+voIpJ2iys1W>&dM3z0k>E{VaAd zB>lEt*1`ZB65mBEwu0Wwq?6Eg!f|HP*#x;Bve_JQ5CebQv+kU38}|xBj?K~++J|Q! z?<XUTOqTQk&2~E_aZ=J%(mdLQ%q30`4>7EC2@WWuU}9Qr{KLyESdRSL`;%+r_KL8q zXi-cTO4;cr9RPN$g$2_CY1mYdfzG0r6uZ_85;SYCr`*qCKEE1GZf`oZ?|zh^@Sg)% zA1gwan;Uf^WpW8}xF)EE3xfwxG9l-d&;CfqDjTl2Q4ra%>Xaf``f7S=JiWPwbsd28 zk;Pc+;e-WvkReJq{p7wP?F^usW0kuU$tn}(=3GRZK-Q%6>kq|#J!ndjN!D~`LxfGR z*_BDI3ttMP;0$F*%M**cO42ituCrd#m@_!Cj+TQkm%3;2_JdOk%|Kf0P~tK~LyjRu zGb6m%kb)zy*hosxX<6^;-otFx9!qOari`~jVa*di?k&T#aD@($_`X&Rm_Sx0STcV8 zCCXB+TMRj`N4QtgyE9aC9Wb6Q={=FI2UcijZN}7mARaPkFn1#ciTvb=na|Xixxq{! ze7GlO{>+A-Mff5Q{39Daknnds@b_)_o`mC$msT<Jd>j5N`ryb*9(Y9L1pYrGd^x_H zuFY5Woeh75@XtN)Z*2J8gn!_H&$G*)LU^^O{1*kT+XBxZ3WpW+!EaLqC3GGu3M*Rp z-3w^S;>Q4Tb6G}YJ%b#XsTm{FVgwvMq)G_zszo<}(}h4@X@nZC#X79<YRT2lldG5J zYOwD;Nf@N3#o0d;bP{w2<z|fZ(N3SS<@toDm8PGfI(*27iBYRei^O`)JFgxCs;~GG zD73r!XV3^RK@gFL_t5E`uQE^{BBH;NrJUl-Rxk)z3Zs2Js6!Jogxl+sA%|N@5r!Uz zdva3tm6eOb!{W+NWQok?7r2_ie=gxa*7}CS$`?PEP+;}uPjq51aCH<?m4}Gx-I_O% z9`OUg7JtU|>!iIIr{OLS<y?KI5IHw7kqIPnD~X^xx*NI5t^e%a`|KRd(FH;Usb)%5 zN6tnw44jKUah)-i;|sDwqf-N+n{ozx78p`DwO3Yf$?d-4rMbSsKfC62#D;Y|C^}@x zlxXl%e}|6)!JF`a$jp`jIC}S+KfL?FSwj{~!G?^fErmn6=0!_B%S{d}8O?*42-wfd z1V)O#@3(>Ad1JHs{^IZZO(1v%HnH6_ArKsm7okUE)@p%2SdUrK<O}r)L7VAe)*W%y zdI&3NZ{5Hql5Mzt6%isfQ*AciXn@N>VbWd{yz_pNTb`9|2$%84+J-R64l%d{B7*(r z8M^E9!8G?=lnfQslojZ`_LCsE&`e|@Sk+*G8P?y3ceeFHSGNl)YYs#r7qW`j5Q2!? zpx-mQ#Br0@E$&X-U$h6!7c)(tySJ24V>-uhb==uNG}kJ}Il^cIb<=+M3Ud>UN{-4z z1zIYf_VtM}<iUz*W-_O>@z3tqSz}%GB3qXHp$gHUE3cEy@uXsjWo<RZB9`EKCGulQ zmxwjKZ1{#GR)95~7HVg`#aCuM<x*=t*&nv%eaht^VFI@J65(_SZd<i3S+6x^gpc>Y z`S=SwMXmV{;pckb=PSI<oI&_${BjL0);~?BwF;GSm;0ee9@8=VGT%G=LccLjf89;> z3`peO<jh_$2`ts?s-$yi(joC&X7UE_4d&^8i7HGMzC~vPiBYS~bU}?R=N^(6ugaW5 zJa~)=sLIY8-Q}8_Mi=stH>c5cL7CY5v+Ak1(ftm5-6v%mT`8c6jqZ`2meKvjz{)bZ zh1TCNx**_cbkz+1V03$+4i2NcD~=mF$Tqs^l4vh^&fCK>y0RFq8r_Bbb{XC3C&_4Q zqq|JW*+zGceD1W-{W7Vw(cK`Wd5!LTNpEFzBP4NWjqZY8P~LWo?s&r6F}i;d-j31z zwJ+f97~QvodyVd<C$?jBk27DpMmGo~cG~D#{@aGp4McfR1&7gnkr=hw>?)`+qkBFv zUX@vm{WdhZDDYc%(>vbdty3yAzCCs)k51z&McFXE^Z8@-csHRmxAAoYG_mm=vZrNy zH?k1R_(oZO!}xXwT#c_k5@~#QvF`C6Z|^wn9{bzI*V2<Xw(%X@#WKD<W4LO3tBB?@ zzDplZWPEFtoNatx%jZrTU+$HyjqmrzSen=PR!Dj)<69z$J8OI^5#F_DeDeu!$N1(D z-j4CjAiN#p8%Ma;`2MQej`1DNeC-<F>maey#y6Xp67_g<C6sd--+75qtIh3#8Z*9Q z6XR8xONj^LyB<~9`5teI=BCj-kW4jo8r@zf6Gr#Nqj96_h*I1}cORgMjqZ8vjS5W% z7GfFQr+ez(FuMBzSEHMUL>k=zpzbibN8`8;>}wm{?UHC4T~?B1baP_3YIKwM?J~Lz zk0dg>8<d=FbeGEKP8(gzrLB#wKuYr(-Bps_%IMCL#GN&|i9Mja?eutl!rL*rRKnXa zx@5xJF*=h1xYy`P=4{94YM8HGqdNs8cG~E=GgBg?%S3tZ9&gRV2~lzXnV`mu?#;w_ zRb~UDLm1tkz~6bJ`$u!r==yXaZ%(6o1ZBeLuHui?(}hur+vpAfG_lbg*Ujqb?qDI7 z(OqQy4Wm00a5cJNNTks{%{s?>x_)uoJ{ZI4*siA}+D3OlvSoCsF<dpe-}hi`oLjc? zA4+6&TZtEzopBu7ZII8MHoDs{Zf$g3r8KY6{rVueXk~OOC2?ns?ziqx-gb=cbHdv( zx>pHr$LQ`Myd9&PO1RhPQdpVx#&$!QuU(`2=z;&i=qi~hk<oo1A)K?PyDl+mwW$)+ zn9+?)j8|pyi3g)AMpf)ElfQ`!&>xihp16z?+Qna#Z_xe^V?-MW-I&4KyaIjykQ<(O zY^50K1D0dqwh~vsMw9(T3vou~#teT4oQP>LIVhFCqgy&A6*cdYH^{M+`d}qi%evwS zV)l^rQ!}IQy9UMv1LFp>up1V`R^rb}zjexPIZ_-n&IJu$$(h{$Wi1ck9(fnTIbe8f zLWawo4Ch!3KMML}_`Yp%hV9{L<o@k4yr<1@xy^7tW!R?iBxv|b>N-N0VI0&8%F>d` zbtdGxC3dg|8)S9QK9191W~(&X1J^nv`&+n;!_P5)C@rf4mP6N>^<ByGI`jQM!gB60 z`0$6M1<f>618<_9KPnCX_865G2+hpM>cF#^oX<94WQ8<Kt=XMqR&dv>A%9QZKYEv| zIik`WgMc1w0^>PgJO>28cupWReyqRmZ@ea!2Skf`d~n#iob7{ram=)koG-$Gpe5j( znS}GTbe;o+^Npsj#rZ%a+N>==8eelg9b4AM*OU9x$$d^%hgju4*-f}Fw75U@K5`!z zvKrin6L5bc(4$Sh^Xl;M2dB4iPIfYWz$g_vGteJeyI@-<xK^3`x+V$zMrb^qxgVdI zJJNc0jT}&+urkc|hd%EB(c@rXcc=`{w{(G;M}25|sb_Gp=?x-c5+IVtdp@M#kgQmm zo>mFjp_!QwdhP(O^z?1y`y~TDi|*<#datAZ(`J8BbB8?a_g+nB-xUQ|e|A7_<P`a% z(z&>xx-qM7bHdyfdmlm@tUni$kX6&$_;<V8p?zg@bcLzfq#@9alzCQ|cmWr51oyuZ z-Wy+0FbZXj?VNb-UOL%oNZZ*qIPruO<gAM3+c|7oxfwZfZ*gK5Tno&a=;=z?R@*a) zca{rp1n}yjM<|}HAbp9~&xLmY@aoM)yFxR1Xz`Xzrb1M7mtz>$V@uDEuWfB<<tvNU z<9yT~e6TwZ%EJ?Z<8Y?WHiO*Daa$;yVzu~~K+$42#XMLZHp#b`p(u{O1OF0(^_9py zukn5Av+l9{Okl_g=<)&=$8?PK=Gk577(o--m<RW^IRMS&6_po@FRpU9wmjRlEkYg^ z`_`Z8+Ge0}sw~^t!!9y=$nPl9>x=8naZ;o|)Md@x2(F6idSRC^4h?jQo(qn!sgob8 z&Bee1-D->OJmBW0yDD%b&}*Y3@o$x#sh?)DnVE%5_BINC8*82gO(0NX9!CTi{W97y zid6$Dn_ccnEcawrxdV_PrV@5h`w%Zt4;)}<$@T|p&h9d<1LvHLXKAv+H=)a0g1Z8? zz+l7EaEyPoKXfqPBiaX_y&0v}bOx#Lv|c53`9DOLXAjwuyJsML6F}=s1wbWu*)V{E zFPm7?@xv}2x3KN<u)!KD9W8<I=w$zp#@q|C!k2*#GUK*kA(cM~WVs+QR6cz{p7#q3 zxwv<3fVJ5lwL&b+=iZsm^c1X{&-E8g>y?yy1hfOBBJ9!wMFpuzxhDof7x&hBY&ND7 znZ3C$um)_7o(ihHa!(@FH$X+GPAApP=3PO||Cf-%9Uy<xl<=faW2}aOqUn85;C{f6 zGko9TsI?7@OxY@43icCR6J6_yPq1pmQ-KIfvcofzU+v&8*_^iz&V%Om2!!)QqQg;k zaN&aJ!IoI|12ORCoA)<rre}1`k>s~!R4P{`WR>ZnVdG+wm-5a<+ire04RSEOfK2YC zF>(Jp=;N3@7EQRl8Z{a}4mDe1Itkipvl4K#hvqSV;e!H7k?$p@s>ZQ#Zin?}a>q9H zXAD4X=nw1RM}HE+PW0d=`dFT}Up%hmySRG&e}O|9XCofi<PZMs4|Vkip`-7$+@&Qp zihN@lEwVjt*tt5bS+pMUPj<CGIHoo$JZNxMc>3UufgxYdP_LR-gF8S@3!ktxQ1o$! z)53#(Hxtp>melc}xG%6e5FWGw(Dh~+Qn7iDB=!f1{Ye7%B1~Tt1uy6}g$`O8$$9(W zrNKb>gw+<wEhdc2(Os~|2LOaBAddJWui8Aoex1gEH%Q0e%wxpd)(j;MjjXf$+Nv;I zln=GbXv;r+4|mgGI<kO9^-Xr($B{RI<GGFX7Re1}YNKO>8tkX0b~Re((hDdPgD zq0>@wXW;$@9Ifu|58u>m)-rQwIJ{9El`|QGQdDQN`B>7=#`ly>h$xy-EwdG|6}=(< zzFpw4igf{VxC$5XsndD-%H-}I_B?68kE}s>mj%)K`{Sii2|48Cv>$utOOlb-{|*8x z{&%o{2;b8A1?_-_UTv!X(ADM;o*5fgn-z>^^~KE%3>4wTI;_j>dRjR5@FcSz3SrR5 zkfuXZ-kR(VzoW0HjgF?NRRYKxt$RWhNVA#Y3x^#=i<<L(Hg^FWg&$sGrV%mtdxR0j zfTg@#D=1`geG(z_G$pd)9BEeg5-f)fPtF?B>?>XdY}PG1xGm6kaaMQ|xX7*=usjf+ zejtMOK?j>@R)O%@{tk_KYptCDORzZzoWS+>%%&4=G2`)#BOe?TfiqsAXMRIcbPTy$ ziNA=n6u;R+*5>YQRi`h$r8+}a<ZWb^o=i_&f>bjP|3sFHEiW{4_`zfFl*y>)vEvxs zc~<!HUZ@I03ngKJS)u;fL;fN0jph@?G#o_0Vdibj3Jt{peiFxxcp#M({C8IHGUOdu z9SC>EL(e#a;#P0B7O%KHp%yn7pA|Xn52AiiBGrTX+&=yVEgk*AKO-w;cg+%0{@hlq z;4g{%u?@i^YEg)9fB3{lqwt~ALB{1T;QL|No8cAkPH=YLA29;$f*Wj#7WEFae1sbm zW{#1rZ=1=4cJod;4n%mB8rn}{=Ts|Qx<sU>Sm`N}o;!uOy{xpY=r*tqVtn*bG;&to zCPvi^#B&GY-;TNa;onY(=h)2K%qNO`3^mqDdRvqB*QD<)s!wSukbaAH!rd59Z*K== zxo6fr=D+3axZ8g_;kex<=G)s#_xkA`HVZBv9V?ed6&<wgp2Jy2@PEW14KF`;DYXRs zhCehq(?4`{1`g-Mcy;nKjQtAxRB8yuZOMWD2L*7)UJ9y^#6ObtkIsGgYmHVJ@~q>) zZ4(}bf+l7MPw0~!oQ`M9!<|<LxaW@zC|Z_`E8hd5!K92ZA6CQhUkDBAFZ#YYtHa-c z-~oN?5Jn<`{Q(1mtY=|CT2gDinJzrr{yi(0U5kTsf#63_bhvq3I#Nf=@6PZkG_tpS z1d-d-p{DlcL+bWsJPOiplc3q1%!#+5gE|M%`Xc;+J^{*(k?piJ3|!4y7<a(dGyF@2 zXHpnThV#ZVOqdSO;U@~Kh53(NJbVJsrcG?+2Ausu!6WEK>dgTl7`+F(h>+E0;O$%C z9|pUSQ>9DXh~Y;RFDP_>vy_}IfUAbL=|-0aGco;yxh-Y|e%Zb*UE}Dnl|EW}6h3gF z0XY!Z3mN^P6SGi0E=M@<RvyJzC1y4*a*q-f*`Is1zi2%Q$F3z@F43hkcEzcT&{d`n zT!-E?JjR$Ja0|hR7G(ve_5z_43HlPzsKY+8IE|mzS~N~>j|Odk<rl~Enj@G20}1Hf zh2tW(<4dFv?sBmpVP;@S^0-J+Jbkn?-5^vE?i`U;J_;$E>4%PQ&ciz&vYWsBAK|ak zJj&RH!!bw?5i1p-%8GL~7jwGmYp936Wq1nj*TVf$X&CK@Lk#LX3Y{%`C2PJ1id!BX z;%s?e+4F2Ts>&~0&}%({FDJa<0>J9bmw-jjAQvxlek?RP4bKcU@kXZLs+OFTVTA>L zTs;DtKm)zEUYIX6Ymf<980w5><PpD}=y>p+SILkroPLj>S8#iksj+k5wKdIAXw^1Z zYI_QhFe`~W!8lptn|%%bm9k+^EvK>9Fg=*h-ZGVb+E(%+cXyeyNnEeTCZe7Rbx!0y zQACM82?=O@{v&}$XoA5#Wu2y6k`<nsoE@Itr==*rIVryz9Y8I1x#RYlQwmSW=$e-q zPp`7mr}y60HSb8EqBHU@c@ONin1=vFpxBE6;_m)gOSt#S+_w~oZJ$2&mF>%pn9X!5 zvPX8qm$R9CWdV>Dct662;!A=njSQ+RDZV$GAtY~LaA$rLDac%HHXsO$+=Z{`MVix| z@F_*k+-c5S1vn&vF#0Xzh+Y~!TG0!wg3c#;mJ9tPpx2r^i2iRN+dDKl&u3-o!%W^0 ze~md0nb>5Pp=#oFEX$mhY%U<k66T(kFfHR8P%k2doi3!!(Wj)+phHtr{2eyK(weaG zyz$N6sI3W*OgOKJrA(qQLL&i{ty_1_g08}@7o~!bt45r8-DKXx{h?80jJ?lmXB>l! z394gEDRQu&dr_$6t88C~8VS^@(Oy=KU_$h4k=eL@R9u`$VHo@*Cmpa9z-#t)1r}@( zAE|OxT4sust)<B-1rq43C1J9ZIn;U~ibfdX$v=tRHkf|oFPzs%9xr0^ghm1`!kASE zVeEt4QiRw(B-2}Xa>-@|2pIFoZ;;KW4%ygrhJa22*)*AJk%Q&tg9i`Sc0>E(Vlkn` zWL7FLq1mdyBoeVI@DS}LUV*v-RNydI^>?5)pGa*Q5Q#(=C8*6cAeyi?k01wY^DG#W z+Q9Eq4{=4n7PK4Yn$mDq3tjqZvjC{{pNM$m?w9!W1l>X1SHkr?%=}~|VPYpN_n<A+ zj<DL?!cs8hMvwG7<9FVQpzZbPOjLIUb`xjB^n+WA>3VRFf~7HdKvBD$Be#eED^03W ztRlq=lwy@dv49j$L!*yHqjO5k+3dcu^VJPCnE(C)Pr~&)H~a=0UPSn1t>6VuqaO9< zD!`%-L(r&6tyS)>C^x|qkd5YeB42DfAiLs?Gk_j&mR&Fuw3|#fqNh0;(XQB2%;EJu zb><s}Z)l+(kuzp@Me8T1?Lm9Qlf&+&rrO?o^Fp==rlCS{xkJWvu(EG7^r$t9NY)A@ zH}h`fc!0J)Sn-wI&lY!3PqV34lDgC63#UOX*odfo`sIH}BUYQsv;a|y3N65v&YRQG zh*ParAD|g3%|Oi{t$w*?u!R$3hQ4U^2_94Tm7Qm|=}Q~YrtFAZa$kyCHkf+=i@xIo z_{yef#wK$kGhW9pY|zEADae~`4|$2#>4wsCZ*b-<xC}&%K8rq9k?p#zng(R=`MXBf z`8&H_FB93@==J7@pS969fitJ&VjH|=xd@rZ)le^X1&U?4$M7wexb>Y4>b{aUS)cHX zYP8LYAEa%n%o37Ehf4$d^H0eHxK#Ea$;2oGmKt~K2uaY$=^#`ILZRP;P`R0@gb+(@ zF*QmEa3S>NEw<l4rcz|`Yo<aI&`hPwG)*%BE}5#3Nz8j<Lh~M^Emmh1Z9t11(W<Fq zQAnM6g7BfO;9}l&rWCN~!_MZ6`He<%4Kv2~0objY%*wRAMAal$_PDjj7U)MeC)Az> zm-g5~t0J;jd+J@<V+(64k-geeYo1!K+Vcu3V{4Cd!>EKIqcCV5g&Eb&zT*8P*wv8G z*}1*=F4aVa1poa-TD;QSLE6@k;GHd^I#pKVeV@-3Uxgt7ubWlp6YJv3p#h_mNU0gE zM9QhZH!BgqMFSoYBAhg|u3-i(KZX{W*0@4exG~e>o6UQ=ht0=7I2?XOVV3pqtgg~U z$GO{gmKXv2Kq!jFztIhR!v<atV1$SH-SD4m`00eNz!&ER!s%n1C=(qz<N<`*aJ}W* zKSU~pR)s#giBb{o(kiU-TlXN3en%}hoPOdap~zix<}jP$W^?XlQgn_L@`Y$R&B0ze z&&<S_$i$*5&O?OLzt|`QWl8_DpDY%)nJ!9DmYh}WM+!kcDTVtvvxdGvG5cok%>uTw z{+psBg9eiZ`jL*FkwLl*Pa*tBd_}&ZK*hz{s#AR<?Ta@lx<$WQMPF||k0A4>_=@nB z6U}U^%r%nvHBaWpHFKT0kD2eqmps@E4{5i}0OZV_=`6BfGL#$VpOGVag>=+z!MEfg zhj(OAV+JyZb7bKV?lNZb8fvxq$4HZy-5?t6+pP%A@9y1gqhxrt-`g}m>CE@|S&XvQ zY#|-1Gw=Jms9&9>ey5}CylXIrl8QxVbjF<XFrNb--j`F9fBh!tH5U58L>~+Ka9`>7 zZ4ml+L0#!ff3Z|E*zWD;Tx7^Z*NpX8Pe4|18@OsR`yhMdX6TYj(hmykuXT`HnG5iW z0KOyOY5LScwxg>@z8Qt)UhB#<9+?`W7?H5&wrg`H@x1P|!R1cvn)D&Ex0UM6dEkVe z>M~Tr5rJh|qbAF$?Ka|kL*ARxMh%eRRGp5fH)oRyLJ?9b`Bj7txcIzhr$UCK-2(w_ z;k`9?t?8+`>zI4A=C)h-TIN0!Es*I6jtZVbiN@Tw7NV?ji3>#oFoS^iAv60H0h^;< zpqW5$O)kON3`D0S6kMY@2;|9dKQPaJ$j?>BnFvd<5hjqLYmU-C$*2U=_&Vb@qaJcQ z1ylW)XR9;&lL*3c63YHX<OaCNZ3+t3d*@xU!$*8{87P{Gz~v@rbS<bp`K?f`G4KB< zRAubbcau;BT&NxZs(JrmaU%#&Q>fL^X_dJ{GgcG+j%KtK==&Rx@hp_isN3rJiWcQ~ zTE$nEO~1+p*!lx3<K)(sQ6#V?!g#a1tKq5ywg|9jg*{7R%i~fokYJF~WGaXr8>HA3 z{WsCQgOo;dCDGHU7FdjPZl37C99|P?FoTeT63K*g?1+OSO~k91b*B(1{rrd}{n12+ zpXCzM%^O|Pe`GS-l$~q<FE=8{6-gh843_T-D84Q9>jhuW+DW9cpB7SS)_gC8RI!k~ zH4}s<O*}+0z0N|kwcrUkcM<Ng#*oGIAMrDc)1rRg$W7qB9I9Aq%9Ua{DZcl!unmAv zT=yTc&9MV0BKE=9mK5>9sS1m{T>tEGlD@J%RUMklhBat%cEZjk_mv%L!#^UNow6H# zoDF}0@V*}SBpV(k{6c=gt?Gh`bC7!|D^Xm9O1SCE-A-_?4o_^0f8+Jg2=Ca)9o^bu ze~-vsckGUCZHZP8*{f@Hrv5wCwJ%T^r>-%URb8t?3#RJyM6Fp)bm<#gO!p1aXn;$j z4MY)og2&Re8tU*oWUzE?<$A%dvG6+rKkr7%BYdnQ=_+%J7J$yN#XPSWZ0US@9Wq?u z(y`VWk*M4Bm04$2o6PbiwAgr0i|T1$bggd@&da`?Emjalg`3QyfJJAssSDAhYRPuh zj{|2r(u4Yl=WVjYJ?NTi6E<1B=?P9K+Cv~JM-OVv211~XXtCKpig#!*eTi+&pIsQ0 z764pYtPmyquk&Z+t09g=^Jo1Nv)yFIBL~^O8VtqzDZAef&u9SGU+9>+-b^L3)xSUa zlW+~VaJ}praGkJ!AEdc!O}gf;V{un$Zo8@OVD5JN_j#*Ovqb&-90C&c?-`((pji|5 z@7;*(wZukq63CO`Q^9;&@|pj=v?}5sBHQs##3i3+uWm~|duwjQKbl+QGg@=o^0}6| z+m+9KE8CFI3<46#rx$4MuzaGE+K|sdAW!-91M^N#h51){s$oUwU~>IX|0*cblWRm! zxIu%tFv6xkxyXp102f7?#gcUE#3tVYe{;#wg5zl^dJCUUz>QHl)n?5Kp~INp?5%Wc zM>Yg>@~*a=UO8D@0A$PQnRQZTxm9L&;^O@UiE0w}YKi7z3qE3FoBcsI`ku=<l>$&_ zIsy>6#p;UU{>iTC{S#4BZ-n0@5q|41|7s$i>?(wNI_vFizIIhkA)Z%}YfavAZKzpb z%Hf|TTk9Jdz4*S92C6YZVuz=uu_G|0^1<*1>sP1Y1LG>*Z2kCJk)qubEV+tZ4VS(! zJOQ#a=PQyZ56gz|cm!s}cava2)=`S4VVh;ZQjUunEam7f#Zfu7n3J^#TV$6DHR-E$ z4aQoKA)!1@&q5683s(!FQnTn=(GJ8iTg>JkT`j&p2<1(}fMRlj(Dg(%8AI1$AP_mW zRnOxq8)(B1A-s<VuES#F??Cujt>6Vgwww9!8^Aa{Yrmk@IuOmjGGR+Ln&*(yA>kb2 z<-0WFYLw7qihvi7h;0!bLUeCLjQfv??u>|SmD+ekLPqM$p=1PxbquOW+mEmR={#F( z={4{?8-lBW>94Pn#%VN1GBemDf%AWm#sOS(W+n=3Z$0qYMsSLZvDn?tI5IJ(#^fUh z3*vKwwwJQ^VWx@&Y(-%F?MLJ-{UESdG%W{l@rX^}x(;!1ty19q#-Y<P`H;ng*t27} zN3mpSE=G1MN2YDYKAC7|-j950=l~1^JK>%YOrGOe%Hq1bKEpOI?vT5?Osv5>T>d>P zO^lRb^Ev<t6Ki-rqh(3f&>1yT-a-qbWRb`9mqQ-hZ<*TOe#?4u_t%h1qeCt>fulhn zfm3KO6Oe;)xfb#fxnPt!Ykd_a9O1q(g=)D(9q0`UjY`ATuibsOJ=PgE9`3#ib`|+A z>paWfp}wUFI|6!%U8L{*ImK9!f-f_S1%%~(H<mMb4eKm-Fk5xI`!dGkc=WbaJbscC zA$Pq+Cdl9R)oZg?2>B$EU-OlaPiDa&-$TjEr;6_1LLPInt;oYgkgptMjC4@)axof$ zY9-H0&P<V#7YN9|@||$6h|)4&TuScm_K+`B@{>vaarxW2GCKX^<-$F0O)`Cyyj-gW z@@Fe~`Bd)ng#5of<PQ;&c%yQZ(ryGbDDF*4yMeUpzZA&`1hls_3G0d|tnVkZ(LAjr z^S<ov$g7E9z78U?o}o=YSZUXh_O(j8o~45JLrPmdmGAkNP%P6tv?nR;hRB^tyH@$G zml+Fr9oM8NZGnLH$x2%hh3`v*_Q4+7-Icb93{=|HN_(=>t|H&BeIYUt2xx!5T4bV# zLc5F5UI_Jfx>H}-%SfTqj(jD5%&%11`zh^m(jKd{1p?Z)DQ!g*+Rsd&Os?|K9;39Y zBey8+Ql-7%8_|<O(%$;H@GTI~?ys~JQD|oi?QS00f3hzQ<4U!Ily<(-o}{!VlXjKT z76@p6vPxv4h(i09i^=y(pyZax9HA{YCPm(rzvoX>^23)2>k~+Rn35L=$WK=CiYVmo z2Kn4`oTLjz!7%->oai-Bzp+a5%|@Y_Lz){t6LAOxG!IakiYPQs0?oYr;JY|UVNFua zT12nr>Ff)>L1C#V%!~om=m!xj%flmL#=z;MHjJkXaCWqn4E`2Xlh+4LPvjSyiM$je z;c!IH3W;R^IqT{xt5p)ZdhsbpJdK3NwJ{RSQh%w|RYKx64~aY_!SS*wBZ<pNqHm0Z ziIeCfBu4x{*1iNhs$yw7tVRR}7Zf*)iV~D1pwS?p2@sfQqM)L<ps1**7e!121xzp* z%`nbQT%vKo8@-}&k4rQz!C_5sjkv{?xIvGDfT*lW{`al!bLO1P3Hp8C@AF{JbXQeZ zS65e8S8oX<h6)MX<8&tR`w~A&l@UQS$MJuhOhI%`z~3zTg+&D)@qfgx=u<X+V;ui+ z!C#Inw-jE|_|59WCg49#d|v0S%dd;$PZj)<1pJvAzeSZ1e=70&+xXRS{Jw%eCINq_ z#>f3v#P3V|D0N!uUm3^$@gk{z0{&*{00mXbNBkf0EBcg;UmC}MT=178t4;kiev$g{ zL)IU^V*k>G&yFKsCCI$*-icgzGc<S#+x{Nl#;%nG8mRBIIN~56CLR&2%_P#rL^=^= zVT+2?c2XQ~%Z0#8yreIMc*g*b#(yX(d}Vp3ZLO`B;olPcOWEGqIv4+%@$Uqz)|cbo zdal~<Y;AoU|2pCL<azjK`5VRSO|$`XMLdItvvCqg-MNB2eqxQ<^#Qv(E~G|jX<yPj z*^`TjWH8$$jg#n8;_k$-MA+~6M2JMx>zar}*kfM^kw)Wz^aK&vaODbVdn`0?!&S2y z2uiV!tj#diH0Rw5z=@Yvz3Y8|JH2YF*awJ_I8jsTJz%h|%_zw7Rq0vxwq|NKreT?@ ziBsN<05xk|2k1&QnMw@@^@85m!oo^flceRnVgK50C@TC?s&y{;{7_UN+aj{%d`}iz zRDZ)_I#{&llAinIM5gd?z4pm*iN1IxDpSzR8QPJWDA$&9nx%!Th}d=D1CQ8x?t+W5 zy;bFV;2zK6G16;cWq5P1)U^PnfM=mVn|tir)BI#u{M@a<$j|GayZHHb(%<ou?7>ep zusj?5t9La&>wpw*@cHYjVP@cl^U)GNI;F&Y7jjeu^NV}K45<CcA|7dBS}0S!zEk>c zJqPxqa(nkKUe!5>KMsi8V1DmpJcS|z)p!<c4Y9SfG^z)ZuEZ(vD}93m#&^HG27*g3 z!?m;wjGvgRMc%<+2GS0DvGP2~<(3>SeVwmxSiksYy^FV1Z3ZmTi{>7*E6pFiur>cj zl*_>!!ImMban-e&OKNb)bs6ecO`JcCMqf?hBY`G<#o^#nUkywtd8oCoEFWe{RC^9+ zMX$s!m!YVYyi1T5dm5YYW7A~^zq2}9&qafs>q7Da3A;CmG%|+9Ss5Fo(Hx9Mh?dx~ zThwo>B>tqbSvOOU^YBgOk1-90fac6Hha~NZ7@MCm<|b5Zy2h7o`vWx<nt3)TK~yW! zEO>u-VUfv`p#Ta$1q`rp0Ustj8oBXGU+R*Aj(pZr1iQEk_39?skXWnr>RiRnvJ$wK zB55bTc_JF*ShQIwNU;tdHA=n6qAHZSZo<Y2Z?_9p5Z(4WV8rV6xFdyW%C~}Y{-G|x z?+tjRUL<@c!fQ#W-sB40Ju813)QFoLXH3n7smbtG^p-M+Bn8ab-RBcBjBCP~hVJ8U z7}GnM^#}Ddq}54x3WfQN#awmNn1fP_8#@Q_hj%lKOH)1)z`U0LxHcPq)O!u28D>&$ z=xUW4Uc}E>HyqP4$<ix$2v2<-haI(GOn(%@Zu9Plv;v%1TL;G#CtEfECbl$sF?>%! z+|QJ!{u4(o8gbB|0=(^g1F-Rimhc1AmjQuu1i0H_9PW0|N4RF~jg(0_!^e%+TTuX= zL{_m&V#7+QOfr6=GP+I`%v86&Ejc}P4gpjFOUDK0l9YZV0w-@AM9t~PGI=aKT+cU} zRi5Snww1?;LgVo7Oble!`5lWwtpGoLfZWQXA9og)H~(z-TY+ELCb%M93X}AUB>fMa zt~r+UF_Qk5PABiicnpwqxqn<&jr#h-N6fF^1U{wynE9gO`sY@)g1LBsh+RRe<+`(= z@I#TNWg`WC%ry8M^;9AiqzLCPr^dAxsfj?5Ym`D+v09ggzbP3XGNZ<s;VbK)4OxwP z37OH~P>?%+yVMg@?`D21A^%q^e<t&PNXU=s{5o|O^LhU`dRX){*j4_O&@KK3DOB+g z9qsVR1oYIIPId~Xq8`<9d9`)^z|o$M6F$*4M%3raAvsqQ-|P+AsGilJj#fXz8?;Hy z*PsqXIEtX-Tnytx5bodLZPpgUjyC^oyeGqz>KIMhp$d)Opyg_(Y*p48auv~Fuy)Gd z1{J!&d9%hjjJ`FA;N{SP9wW8A?*|MRZa!Jov&U5InSu3Q0%I?xW|q%)-s;W1OPY{S zL7oVi!Q52*upp_UvwC6#SOw5V<}!t#nE>hH15tN2k(uphnSM;ciNoe6MK`D@Me(xn z=n8%Sz<8+%vWZ&Uh};l*i|$2_p2;p9Ld=aPaIvMSKGVP-A@H^GGlWsc43W8-j3jFk z7n4NEmW1gz78=omF+c~GLXkhiFYqm9gVihjyi<~|_!LSvtlg+^dT}G>2Y97IM!g?^ z1%zI+uq_9FMX($mH~TJHy4mj=(CFuO0{&OzAJWK_UqSaBobcYnCQSx9f^aPjB-!u= zY(SDK*Ca*GnpDqTy@mWgB3ZjcNQRvxM;em4VaZ+3UMsM3=O1!;nI?I%ljP4#3$C$* zr84k)Wp+b<$g+V|fyk273M58vL#+VTWekM7*>}DSo%r2jg#Ile+w2>#L{#ipsMsX@ z<Il)u-?8{NDWFwqKqMF#fo4aHMz;1}?GKmnj&y(cHJ--Adnz$pC^ECBKlrgfbbueX zsPBcJy@!oTnY%Hz)<5js{F8={PVxJ4zu@<A*tVY`*tI08GG9l1Lf9V_SE4=0{c^yp z%wBU8uQQ^~g$vfepVie{8=(v^e_%jfT!Ef!LHy3e@wC&zBaTvAF$`v{EIG6V>Fk9v z4xmn5Hee@>x&$R4vDYx{%|TP6-WR<?9a-Xk6Y%^GTGI?4K#GPt5xTd>Y;aNheQohO z$%NblZCXlg3hEr#Lk&xQO1jJdFj?Zn?_sb)4pNXt4*o?BzCjgq$vu0$j0AGvpb@&W zi<I|WZSkt)p#Gs59MbG6-htD$+`gt<-HMaC{Ei(c>Iz4>!~c1?s}j1CEr8u{@YrIs zllIRrSWiR!)%lWCn}%-=>)qc$)8bJW{4^$K(CHYYM*wR)!G9$9{N*&W_K{`hfZ!{; z98n4=N2AIDXmlceIr9r&mAs>oCr=fjtju^>OHcD0V47V6jDxqk3GX!`uBexa3d=*t zGEB@0`P-l-UTa1Tv*HH(gHyCU-dx6LNBZmdQ#3n``?`MBt8NpURh^L2%WXe5QbO4+ zMm#>Su)F29;Xw6VZu>09lXs=|WMSa97x>jPY{zL_zlmdnMrUF%%^zP!E5|yTucR3& zj#V^VNP_zuuBeH1#t~6$`|iB0Xm)=&0LyLZUoVxoPPO{(EfWD*tM=Emsxh@12Ilwx zGLc7Yi$_7)P~-X7(j`KzQr%-w+n`o9h>WTXwU{5&`su~F@*7WzUe$Iwd7mgnPY`JH z0P?%Yh^Vb^A|rwj2KGYP7w%X=B#Y(SQHW;{>2+c|gGd%z=MW=Nd+O93z+eloMs^EO zTd;#{R}tcD{_ss1`G;G351$}7_f}xo&PB(_daXm+S20Yw=GCYL$jeS^#eGBO0NgVx zTU$%M%HIbnWO4r9IEZH`-bu<o(vkWqQ`3=9ZKSw}2_v->5(7~Yk<|MbIor6#^&;C> znDLUUCvpzoq#k01%;BeEGOjOh3a$i)*p_H>cr1$ckW{mp3~Vw!-U0mASWn;<l?Gr( zeLnSut5eB<qb=GWva>=u)_ODUviU=nR<l9Mub}h=2SW+#pA;pGu+{bgdXzEg*s=cN z?HvjREa+LZ<H-CjMLYUo7f?9;E)6Ro(KQ(CqFn(?XPvLm6SiN$zFBYe<CrtILu<eM z!=qpFd&iN!0M8d>y>+C?LP7+exR0P4s)G9nFgL?`c4&q|WDfBLH2;kpOoNlFv8WBW zNt~eii+6UMIf2HJ=Thd?;EIUWmCPUITRbMMb<D7qf}=#5q|^F=#Eh1r!?dc7ASQqd z0Owo0iDOxBrVaZRE8fsA+}=_xmV>3nTkl`lXpp|Hwm(3W;y+kF;j@z%$Tz4K{Loi= zI4>r$F4nVjHHEYi`%IHMThMWf8_Kr(jMZw>#A>zTuCVb*`DYZ(nUs`|nU3sgI%}~p zALo#O+0}IWGMD{$W(*3w&Q*aa0IiF5W6R0D0)|TU-Xk1?&&YZU8MqLjXwLciOj<eG z{g-+vsZ{;^nv{f{Ev@QMT@vzTMw*3^@I;%m>KrJwgC?&i2wj_*d)&1da)T*u9);sI zxhQs!i!lV*FqzCo5wW3=EXp1AGRxJcfUZY6TNIY!F*GU~smPSvFdDtP7KioC#Ra-D z`ij$;ucFsabJ#v-iN3N4dWzemK71A0JQ}~Oecx4v_%$HzvCAc*76K!_%f*tyaDpes z;~Uj=1b3QJi~Bu^k*F4U{|^{cNk1wseOY$$Ptl`T(VWbr{C!<VMfHqXpKTcRmNZzM z8b%`K^vbnML~IdLv+_}FuyWmCY4L%om`6@WiB%4#cX?I_RjW<4La2t;<w#A)QtWX; zs7Mpi+9bQIw3bGt4JTHr=QV{YQfP^|w6qH-w0j2iV%<hc9R~tY?woM8Vc{xN5BDD- zuk9Js>nz00uK<xtRaWC#A_!-BHg1cG03+VGRz)u+cw*x=tGfv9Y}_g%;{n7-Y}`h5 z2{72W*Me{9^Y$Jly<MrVmV2|BO+d3<>FKvcYAuHNhnbMtZmuub`7*d_VSK?HHLwux z1EL34O05D0x%w1^+Lnl%#ZR@TqT`DFj{z1<$^N*n=F3`>Itk?U)zvuFj+M1cqf4(p zWpwFr7GnnW&lXFaED`TK6?K~FIvyL#&<A9>&8`YYVcP3LrczDTWJICLG#TWJF?xk$ z#-ZzbZJ+d&P1Tywq?%uXX0*M!y0A!8>MiEY1f)ydc<QH7RUt1{CG$3WQ7{u_dRU4U zbt8f86Czek_aV5KGL0d)molw6#k1KWYF}Wm+4?{rZAX3XhZQefPLLm4XPV#$qHx>; z+S&E4CYX(4e1R{}opC%gEob=H3|~n|Iyd_^+8bvta2sz%-f`EZ(VXWL|J8BkbUkih zRIX}c)wzkbNnQUUDur8QFuzGZ@io(c4<iu_FbMkLTP}m}`$)839m_X1T^DO?IuuPd zT>kq7Aylf)CLvsa!`cKirE;SQPm|JMtqHaR>}*kASuaZ)-l;*0@6oo!5%fm|o=08` zitjwcZZ+jtl;LquqtSH?*;37e2%Na<KjJ$6WpTfLglCi2sl&kzYkM4OZueB&#D%^( z1uc#>yPWXFSX{wbLv+wn2@Q9cAq69syFu9(Sb}!tt$tH6<v~AU>|gB*U^Enu+YWov z)hZVY&U4fSeO7(lB58nfwfY5V0Gw5CRh>0br75VtAXSPw-I`WhIG}5OmhBzj91zAa z_Uuw9#=mQYT#+i)<Zz0;Rn@*BJRo0s_Lsxap3~8uQ`(tC57ez$r~Z5%t$BEx*7TKS zS@~Zx|M-M_S_8Crqk4<^{x<oA0pvwg74v2hQkH(LwjBxPJWN27ngRH@39v-7H^IG3 zKo-HBCcvuw*C%`GLyhtQgZgj?Bp25QbIY0A1|0K>NV!@aMjT@U&P11R_`Ufk$F>2u zjC*XRrwz!24G@>^AK8FwpNrdop_W%ri9}-q-mMcJEMaaMW^4fVw2o-8O-~yeu;3YE z1I{ENV*}=EN>(p=f|UND4OsasTDBb<@HFz;vjL+}#y_?Jy$JkIZGg(~Z1XyG2-snp z_e0I4&HZu)6s}yGGoZF_!NZ&8ei&^~<$jnJbiD-~QbWD+(0#>uZqgCJkJ-X&mU zcm77`8HlIF!{0c@y9P>~4-D4e3KXifR(#wPy(7Zjp;4s4xFh1pSB0f!!_s>vfu-H< z(Ae@cm};{_<33<{`#%6CKcAvNyBAS<n4WTB#0nc*=aFeHf0_rJ;$_y}7$!A=3|u3Q zYg=oD-zLNFq2w30?s@NsL4*k#ea4XEueD*Z@P0helj9b3pyBwa{{hFxCvw~;&T+Pz z<7-gz-*J5RQ;8f8ZI9zC08AO*fFf-fbL5)8zKDZ_zJ$fZ=Pf}~lym0-QM-WG>Vdyf zT|i<o^WCcMe8puxUQDM6+Yhr@tP7{XYZdPx9SFv2y-34bMq<9ecM|wZIC7S<DZ8)$ zyw%_sIVTC=4)Ds6bDCU`p-0Z<YSZp(RqM;bOp$5#zJk+{#ETm;u?{p_#tw0P9@AJX zZIxg-AESw#z*@+jK>Oyq>z`*|)i>Xr4`jrnx#64hs!~mWKTXL`gFwLy#GNVJc7{w@ zdga`E)srxO?<1(}c96KV3n|yAr<nguLjLboevtWV+vFGCCb-j?$GtIb+UqUcJm!Df z2G>{CMXG`wo&%Y`mC*3P)}u1+p?B%=5LC%0NO#j;N=OXZQQl#pQLGj(6O>02P|7q) zQ*^$KQe>og5l}qVotv#klcia;wH!jw#1-F0S3us;P#p-LI904xCp>{BMu*9S04(pG zHYuZhn>68OYK83Ai_nKU6(o#7y7EO)%!sK_XeiX<4B4-Tf#KwM6hLo=9Pqdd3pMK3 zMWo16<y+NJnnax;;U|f{uxSW>B?ea?2Ueq+0rc1d&Xy^}h7s(<Igc5*xs@B}ES|Ow zfh4@#qGJi{bc-w&RuCgmc1>#A<63r|A%J)cCDY7_JZ_gba5n2Hr%$_S&!SQNK_Zv~ zuo3#zi1;kKoQs0x^eN*f=)rQ(UG5LrjN=z_faf)h9U*q~1()#mCiZSmS7rd&^YrQA z%<wv0`9>N<k?2}@pFRx}I8koRD)L_~xA#ztrE_x6uiTIo8ixmouFA~mzdUEjpLhV{ z$9&ud{oatTuy)$I44Z8*PaM%~s}kPRC|GA(9*Y|7y}np>=a|r~19JI#k#SE(+p^?E z+`JbHJvP0zQUqG6t|V{9(W`u31Zwr@`oXl8SHsL^6}NWEzY_oN=nK?He>P7orw^AX zgtnfC2r03iY@XAEn)5E8f01AbXFN{b^_4xOO+-tSix%84AXX~9yqY{#Ou{eq_G4sI zKRpB58=fPl`s!9~AbNs!{zNC;!f~iqB)Sd6!Fh)QjzUGK`t6!5jf<KlWDAPO?}I|q zj)T5Eh_&Y?ZpaNcA7`USXW{%8H!qIY49>V;804%*_0bGU4v6Jx1~s7gd)I?r!KrM6 z?g*~xQIiTje>oe@qqF<U0@|8atHMWNt!K5d=7le#epTvn<i)C;759~$Cj7xtj3wd- z{E9LH;WpUc4rFWmj&wKj_k@ITQhO4aV?gv_3)$J4j|e^o0yq9+8ox=cssjGK_+>6L zayHkcK=!yMwMN|wq{M4dhY~#TGNWd71;L${895~W*8tD{SgF#0#1<cc3R*qLS|Lc) z)(pXt|M^5M;u)-2`X8`pf;B-s#jjHvkq8#(i5>Zj%Z!Z!*AlF0XQJjlKZqu^;*k+E zf^_w+cB2}m%T(E@e%oqiWbwjoeMc&8iN|wk`A2X)t^0!HqU~I>+TO1KPg_ZV@>I}? zHlba!e2YK#hx0HfZk1IebsTeEW&6XckkzbEk6FjrOHy@aNvb1yVx4Mv1RF7Yi?;>~ zo|WI9;kP`<z|9&n6njdR6$hJMhbJytmt!Bts0Fzxtz$B_7vSlHjf*crS!y8=tsLLt zU-?YH0wm!XpqW^<omUqscvjs^;&@Adip^1Xj^NnQ#?{9{==<_91owLZPR%ZC0dk}I zZ6TWTQ)@ZO8Z++#0T0{Xq?QAmy4HjOU3b09+$>ElHyw+++Ry08ro?uc)9``qGW&45 z44%a}t#{~_l;Nk${U!FJf7r78JwsiGk4~9)UaTWtwF~t)7{!|PzDO{;5w*owiipa? zEHyl_(X?3L9x_3%0NG-VzUz+)AK`ElnwZd^w{PjSw=`HJ_noDMAAz(|zdelluXG89 ziv}&~OJ*!~D5O<Z0Z4nurdd@3!@)wHH=I&Mgo6z4M6IZ}Z7<JvDKn1negdiTah<GM zd0nSx-mrD~dxbh=4Ik4tCCm5l3X#eO>Zf}}Dp|f)|AMoDmwIx8+tmjsix2Bqj|#-s z`K{J7?+rTM*Qpc!mSu&y21lplgl|grhv%fK-bmF+pe54e*6>G6U1sC2dP*az3X}MZ z{B2OfbFecc{vYdyo1DXkJ-z_V4MF_&5Cu1KKq`KQd;QhVc|ZJ(paE2oiRf5Q<DZ4Q zoPcevez`**9H#FZ6c<3L%RvqI!t<?+_V0z?Ho=MeS*gM8*B)*VTUoj+izBIC<T<#8 zf{4z+H+S5lDl>!t?&QQ@@(ir7U|}hyAz7_?uw#;bou~`|QY%1Q>wu`YA*Ndp_B#sn zuk;n=C%}<PgPWDnuA2p)vt2hUKC?D4K<>YwgH=@6A5H>~Z06$rBouWThSZm60PXWS z+>a4X?_VVXt5#bcfEY0QqY+v_cPG9)o_7pAj`xA>!R%l-ggBBuE-g1SpqY#BFmtWr z{cuQnm|qC!(4T<M2p92Fn1U*ld*dTgZl$_ams`bh_toVhUu?mrN2BZC4CZr^@<;zq ziq3DRX!rgYr>XFj9bvg9&s1Wp*bl$l`MgF<OjwBd+@RBTf6Xyq*JDD{q|OJ1YeHjH z@b|u+2B=Q;0|u4wcnHVpF;;KE4dcf!J2a;!qkQ|tuhJG3PPx`~!??XOYW{i&&U4Y= z&$s2X)7-vX;Yr0qhiR${(9ksHXqqn{mZm9HKin@Wfo%ZmltjTD_y2=)U!W1~l|zN% zGJ>8I6@kE~3rRq)=l@63C?bvHDZ==I{+6S}krf)ZW~>a1LpGlHY0aOMRW$Fkr2Gk@ ztD3Im*59H@PXnkLBcx4GWS#nyPHFs#Pff3bfB49MOF0!%PB!}5JoL2&^A>3SAiO0g zS1Mo$>d;NxpBY@E)wjF;p=*X6D0p11;Paw-;Sy^b_H5v(horVL8+h?PN=#-0tnet! zlAbn*N_P}q80bOg055pku>VTyeZhgcD`lfAjX+nTT!j@n<_;mVBYj%{2gh>v`)Llu z-5;zuptng5B0OJU?l;w)s^~~`s<YtTQwQ4JF>#Fc@T=6q3TQjGe7k$YX;%I`=5t%D zGrzD3J*7%rio95bGs6z_)Tl8;WT3~Lf4(MMr}{GgbpC?N)|rMu`~)bd2=etKI7wiD z$c@jPNbIIjxz7%$tC%3DMF#a&LFGj<ZdCJzLZdvNz*6NR7@|677n#8JcmcdAb}>-o ze{JS}gij0*Rl5R2j>$nwil<GeRQrinutpsY!L+ga^VgS3E#W4^Mlm3CMI~E*5Kyos zCp9;8V}|ae>IG~!r3X94boOjL*p{j-bj2{=W*}(+fY4DbS?7Tz%&(;b!MWpcOGdq0 zoA5G}uOyXiV@EB&ctCoCbkP3_Nz*}F)d@n?Da+pvC*fIk&n(EmD`Jj;a704q3}yP+ zL7OnVVD+ODnZa*iM!M+QnICy{tP}WTC+|&RCvVYs7M=V=I(Rhs_nB}it@(a~o=!^- z|L|@{4{uddc=Fga-%mlE@=teaR-x>8imnvRl$m~!CMYxgTZLc&3}ma?SE$)D{ZIR# ztIkD3R2t1)&ICM?v7F7_PT!T;K$H6EF7&-moox8ZPSJg<Ni`xf%3Z?ld`{${0!^x# z`Bx|8bC(42>r^T8xx2!=kwypJQkE3(=qpLQ0{Q`|enEAVn+#$Xn>{*CZCHC4Bv;^M zsqiWk*BHAfHaIrW%qE?4^;#k%2EnRaYwT99FC}nd5G<nJEJusRWjw_j4)@;^4rB6v zQ2BWOlePF6)^f(Iw9wcAc#GRtv8;Go=YlcV=E&$ym3kb=*=awboGLwu?UYrD1K(oG zHXI7h63-(xsw03DBVg8+<sEz_Ja>krDH-)~&~29eSV7L^@LI#;upbq{H4GGHTNbn? zeOf@q@^W<`xyM`IbhDn>D&5=Cs_Rg`FYs&|>h@y=vCBX`<av=j)~nNhu8<OnRBf4* zfYto1Do2-qe5qk~DWO<2pq^R}yt(&^p_qYR>J~w*We&0T5^U%C$h(I?@dsiafcvz} zL#|Fe@s*7dqF7e@<=;@v6Y$HKU$_EQuTdW%FZPBr!&i2#MvSOeh&UO)tleXlc+N!G z9uc7?bsNdq59e5QO(A$<M5s=kO>k#KNDD#)6g${cIjdD4AW`X#g@iZ@(J$dR-!{X9 z5N7``Og?TYrbN@HLa+(<OZ6rl?gJe@I@4FeNEjaG^oM$DTR2H<YH9XsMe|<cRZtGY zx&e1aA>_now2jx4gJ|o_%VDUq7Q=8S#k%B##`NWdRN_5Z7gFUE@9N;ISkf);wd5uF z`@&q~#ae8JM+jixACNJwsnWj=$FH{K(bw8Fvl^WxVif4zgV6r};EJk^cS6R^9Eb;6 zfe?#CDM)zqf4qML9E!LhZ1roIolenFr@z^O8NuaDI{r^8s2=tA^xvg_Staj{lK*xG z=G*gyP_?>F6OwsYM@^{4NMS{95-MUha^1Y3XH-`$5DJxQfTmDIRwBO%D^-R<F(~}~ z4$P-Q=n8a6oL$B2zzid=-5r=Si0HKgb1#(Zv16u1okDU6o94bg5a3=*Lq3A1v3<>6 zN2_8_6C=^OH>z(I=+=z_vyIiBf*Dnt9aMi2+P#BnJSgi|#M|zmY67tFs?Oi+67!*g z^CTNe@1XjwP}-(km9qdb!?>SIBUyH4-2p7<ZXm(PbD@b|4PRz+?wvZTTnH7Zahj0q zo%-rmDc!O_kATo__fE+?j0Q0hM0*|GrlEahoZ^VVtYZGKg#3$ienb^9|BN>IvUjRc zO=X_U8pZjx8ma@B^Uws`e+~G!CRjpQ-K!l<=t6L(CRnwvB1WPn)Txh4wI-|qW?U0I z_fGx%Z_^pSBMu}*`%th+q-=G@43zW#eecv@lxKzHAJ$A%s*5z^49WlMzJ&Xg{n66g zKiN)5UeD*xxLs;fs`k^hDQ9h-)RZi*?HW@0hkK_M+<}(eqiw6}{gc-ruf4rfT~WqA z-aGZhegIDN?Y#F-K1*P)HeYkQZu1z}vfG?%l60Wa_d^%EmL&Dvq3m_VJ3IOAI0@rh z5I1;r8PO3v`SR|i{tio8zoS2gVYd5Rk!q!?XBp;L#)J(nJFq|a@|A2tSx!spEBjU~ z1CD3NQiN`$(mPEnP1p2fBGy6Evs!8SzNA-`K+nEiT$VWWYU0U4PX}QR)+CEK$9Vo1 zVX?@J2seOa{sbp`g`-iMrr34yIbBtVtm(DX4+E^NJ*S%@)SO;?3J4Y)?pRLLX3U<n zB<>yfSZvJ+ARKG-c=GVWeOT#sr|S{5qXhbR7ldMYZkD(zfa&46wWvm5#634l6ju^F z(Q|854-nkxxzTAg@*6^=MAfTSQ-Q>eHUsr~A5oaYFrAu?f3^50F>pIFhgS`CZ14Z$ z+TPk?ux!@$&eo1Wo!U>cL_<=oF9na7T3p+6_lD$e*Y=JD0S_@Ws>xu4Vz?S*#}^Ld zOZ?er=efqSjqaFZeQmP8*4kfR+h42guSWZ8vHkUm{q?l{Rb_wOXMf#kf8Az(&9=X; zv%jX=Ul-V4<L$4p_SXpeYpDH|YJc^yzxKDky4hbz_ScqMEE%k~zrMG>n(eO-?62ka z*Bka%js5k6{q?Z@b+`RhYQ8w1kiAAG#*7CxvBkfR=3-zekI}oLJ}`h71mVelI3I1x zr-jW3S;pV-WrG9uhEnYh=sNWPsI<3r=v$ySt90PTK6ZF^C_<)2O+7p{t3`EUX(T>^ z#GztcZ=<R;sQU(4i&WGwS)b}ML$6PrEgX)#6Ev|tHMxg#ed=T6#m5M&)_s=6Wo0fG z<zpjne0^%>bz-So)UqNJXx=X#Q#z+N)~Zra%Vfmic@3J?%g=VvN_EjX#-cUrAJ9S@ z2|GVwqpe{_oku*gdR32avwHOsKI#8&#$WP*O1vOgdiClEB<t0ykMJe621M8a(OPIh zykJ4NW}RA7<be-g3CAB8FT}I4PrUyMIsF&-CI6P3a2{GFuSO1BUlCylPL6tPgLkX9 zQSmb38)2ugCpP``e35INx)x=lPCS}07nB|Iz-4<urMlsqbl$LyHy+}?$)-?2k($){ zTcJqbpczsf0WybPStf5bNO@YUXF!1J^cuJj$;98PeV$pNIVoJEX!BNWU;?t_O=-K` z_0Em?>oedzNPy_i+~A@*3<Y_iS!s|QSLkNpq7tlZVG<u;s6OqhqS;)ji{Ww+25|T6 zip>l~bNlv2+ClI}FedX(27P5qKDh}m)TjN^uP=f0aMwsOB&KE|3lSphXU3hY^H?9a zXX%eKKmZW%lcdfe2v#ydlHq+03ax|;>ARVDxdo615h~aK<P|eJakldYI7?Co3jIC& zxOXMDL+j#hOdAPobLRFmDY8NNg`o37qmJF^HGd2uD7Podg)fnTKk7FO1NdeVEB-XD zOhH^#Lx>${+>@9%6efb%1i2YusF^55?_9E0q3V-`a(cJhs8RZssRPJMxRyCA;3z_b z0vb>XxJnAx#>NWe_QiVTk{nzl)zcrU(2FReFef`J!{2|Yf5{H45>?coy|5R;R}w+P z3|W;M8hA7);Iwc^ni8RDAne~LARn^A!Ehr{LLHH{jdyZ~dRz_+|1f`Y!3`kTgxuWF zEooVyafl&yDYz1f;oO0T`@b;-^_3Js+SrJPO$1mk>Sp%hWtaY8)`?rkPs%D?nO(9a zzf*SU2Clh&omI59Lsroilz7<u<SuB?Z(^sI0%Pe6RHi`_G9XXhr9@5m0|OH3Ay+GL z&rO!EVkPZy?y!w|ikcg$C%cYCs@#z1HWZTg8x>3<17}<L<Nbk1K{Dlj5+vbT&5{$q z<7Y@i@!ecC9c2TO8>MgkQyPf`P3hPy7t&&EUE&`eu0hU?r$jMPcEu`uWoC+s`9FrZ z#3||<FclHC1bML+Olz-_)@Cd#nY)2<@J@I#?>jSZem@D=oY369()aC~=O4|ZQq{Kz zgXw?ZUT&ycGiyP3s2g)w?N{{LhX$OjaNEJ~kz2Y_qa{k9Ri<b*7P_aEd{w%Tvd!<3 z(~4WoP+zToSy&dl0jK-l|6i{d7D<~WkuVi|{&HF-hm~~B0(@m#D11f<9=sVMRQTo2 zH&KF0bqn){wV4n4$_}ycFJL}~+BW#<R{qJ%$5s)p^g-!pjm+5pNf+4Y#I>`kSbq)b zFb_`=G%<)?t-hX(MmCrF(RQlQEUp@Th`z!#$Nb5Qprv4kEw~WWd?m#Ia@M)9Kt`Aa zq<D?G3Unj_0iG=lMXRQek;GX9;=e?5&LS*j08*^8=U`N>`T&V`_*fJs-VAnxW3cdk z13jC-=1|YotY9d+#Yl1i3TXdOk5aGB0&^{pgB4h_5GQzZwn>!$gPfJ4Q1NtR-;p>d z*r6b~W~6MpL*drb+S{Q}N6RKV6mmir>wO7~Gw6Odzkw^(JRNjC2*C40#3y}_o`n~w zlgLiE0P(POYC5N9IL%?|{_jrgXT91Qp0KqN@#7rnwz3kj=_ZmfD-r9|UkNJ_Swc*q z<K$s4^U6R!l*Ns>`BxRq!JdUnrO%RyGoWj2Mx|-wE1aIM%VV5W73uPrL!_`SPXo?Y znmldAI~`evcVuv)QD}|i@XAAfaA7KmhEB&=b0G$&cl}FtcJc?l@|Do8WDofTkGf6* zgbYg>)Sq@nXhhVq%zlLC&$E8S&2%{okkd@VmjvfeT_ciWXjrW*5Hrp8_*}n*%5sdz z4*|RM(^ljR`v!hmv8xwpKWz-~W8cu;_VkDSxPKHTsi<DWnLoE(Gn@jfL^FJ_pRHE! z7Y5R=)AG$EmxM=qGKcaVs5#YuGV0&Zfr6cYAzZU!2{shg()zz!U7>5$3`0tzZaMR} z-I|`5?^V;ZaZ=L^UDJ|Vq&?DDQ^KRB%wbJO%eqQH14>QrNJ5)%;|F_LyH@`TZI!WN zc_Yl^y9rjiD-;9$tV)$Ie_NY;v+-jZ^4f0vSSV&4h^G^=48NR8;VbK_30JG*n2)PE zW#dOSon8qbTfI5b+8L&KAky9VhY%9ORkVjj(N~{{VV^D15+U3s*c%}MH}*G30d`&V zLw;cIhuJ;?+deIhJw~wG4MlnF9GMiy?h0&=og)#~&Jl-dezptniKAboYv+igfuA6J zVkoLyeQ^U+1E%_?nT{E*H9KiUg^kU{YmvCSj?&`H|5spXGkjA9G>UHF{@9;DTQ?q^ zO~=5}yIdtINFk}0S&kJOT&LD<r)6@+20Md8UtoY(;&?~_&(es+>Lo2`ZE8B>CLv6D zs0%b<+8yflRkCmr;7?<3p81P}f1`O6pDDPoCo@B%;WJ%}O(h%RK9jGcH_93ERc`n> zS_m<W8aUJ1cLo344++RFlgY4x_&r{J+g|Jq+r&H~1AAe>6RIE!n(233AzZUn)Z;UZ zh1{TOWrZfd0u9I8|LmMp&;!nU?y%o(yhRpDoElk(89OGkhl4~6H>g`XQN|Sr`AH<7 zjXX%3!w7{k8!SQE{Ar4~4@LM&3Q=1pWnbBJk#j+1bUQynVO@I~x~m<tcV7uZs+5zw zlJhrm${(ZU<PZl3jM-C#-&FEjalJiYJh4f5O^fsT^G=9^bD7*>F$@^@I60PyJ))Pu z$ACfCH7}gsH`%tFatG8_%TeETotNF*mIYy9K8X^=%N{H-EpvaAjl0wn_buXL;w{{! z_tZ_$n^ht_nt(ZMf)8a)C7=Pt-0a6{6{6tTf-GsRJCMdrJnVVx*kRekQ=?KqzwIWT zrP@H(s7}a?zS713`^t7&`9DlY{x1pn*9#{F<!Tx8FU7B@k9r`Maz>oZNnq1g(l0@K zbT7rDFMA+MPT^?O@p06{1odzB=E*DMatcS|XU6fr+0LT5A;qZ%zOo0Af^N|my%QhS z2BIl(yhXtCSX->ZvLZGR>0%r@cN4)ASDCA0X|i`f%q*JD(VSz5k!WFy)U1DrdO2G8 zAaBqbl}k_<<4F*|J0MOkdUABfR4W3!$^Keve|>F#t+u}!?XSi5*DLnd)Am=D{dJ%H zb*KGxoBcK0{<_ZonreStV1JFbzsA~MBkZrC_E)O?)yMwY-~Q@me<j&pTd<)?OJlwL z^}YSoY=3=Ve=WDa-mt%F?5`*6uZQigyX~)1`|DQwE8qUQ#{QaOf1PW8<=S7P?5_;_ zYmoU$jIXCy@%8u7<=Ts{Uw;i$#Svd0%-`|&`m0-DNOXLC*bOkK?HtY3@%2xyhAHui zug?G#51npN{{@D`*S`jf)YvCjJm$<N9+(hce_|3N(m4M?9Gw3EO~lv#`eP>$ztv&U z=#4<P&VO+2OLoqs<pe+1p=9h?ZG;i^2R~4=gi3ab-0F@BBL<R(P^NXOyX^PGsTg&` z6(WyDGu}P%2jtO@L3sR2W%T<>6q(y$lRr2*%|1Njv3;zNmuNPrm!?5P5it`yu_VU& zEYS3jPO}OCm^Ho&yxOY<)>%D7Y2L&70fN4m596xQ2%Ll5;7aufkwUwz*xKCS&#DqV z0dNt+#QVRaVtsOhb5OB4s2JYO3^wcL_Ppz;@Do}|_5D?-&njIXi_~o(<x!s|RSRI& zX9-wrQy;9B)3FNvl^cAH5lrl$PkMViOt6|HLLi^q_|&S-os6+Jj2K<8R$^ATe4Exe zG&!RF3;NiAJIUPCpY6{H<&BTGX;_{M0t1-Qa_%`~^^jHS<|!0|(`#Dx8~wbJz38_D z2)8oR-vPo^x9rW(z((~oP*6;2&hYFsU-2ja=7h8Th^{m4j?XFhti-25$IKJ53^VTN z4`(t8&!7yRXo=7f#vCP@k3cgCA2NVrB&r&!Cp4$M=SVB*;2)jDf=DaepN%T*Qm`F} z_yW%%E{=F;GiN>$=G=R_xI;}yP`6)+aQS%=U;jW2^BV#Y{DDweGkzN7*SVo^og|qq zfKnJ9EjUu3g}zqT|8C~UnT~SZBj-`VNkNhN09_{9D<OX})*0yFzrgJA_~AxhffN>4 z&g?pY-KaVZ#`u5Z9$Gxhhw$&OdBODvP*UZBljEY=p!&lQLUI!EvP6ZuE>nS{@`67Z zVdFK6YE&~f_ybn4e1Yrs)U;bJG4h;@1TDxN*NPyk0If!XDJ{q%%BUewjz30_{Imoq zxuI~WB)J7S;0O^U3pZWvf?p}f^;k@COX5qUK-<ez0F57gFCm}HFJ=m)E+fcONI-K9 z*`i{{Ltdke@G>*-<3#hL;uQSoZ+^6l#*ahIj}F=R;lmHLb1dub(!WorXKjQ^{j0gy z$ZMdKjVh&g(DIsr3aTDpOUr9K>)Rl=fE#&D5#dPGIUu<qdCA4@ryx%?`SWm*7dwcN z*RfcT@s+#<ZE(x$X{112RcazMAo{S;mJzTM<g_a|jox7r`;S9RE%+xVYeAfZoNnn4 z6)!55z^y+y#q&~u@JC*79rm*N0;d`}FM_yqzd=Yq_w!4g)<6n_b@(b132G1Uqot6- z{06zu+ejfzFtijT7r`J&a%;_&J|YF7ue)F0jg-QxXfL-E9!CnKP@~SoUh3$5_~m<b zH3Yy{j(44oym-T+D$)MN=KOl0sYySH`^`&LNBr0Uzzu2{|I)-@eg%7noIOm=;Gay+ zM^?@+KWLmBE9W&U=VOy|(=P^RKde&ZgbFakY*ZaBE$WFWgcR|(0iR|O;!|sqv%uv1 zY~^%=iIkifCTG-IQ$(wUbFRtRX60<Qaz>b(vFi-ZPgc&677qWi`ps5OvdI|_91511 zjmT6>EE$%F)&5Pm`tp0=LyQ+$bmj`by5c_Qq2NzKn^O{17dXe14P3E>Qxjg;TXceo z)p?qjqn=1m&qGzUV#%UFLm&yMMzQ#5nIp*!g=LA&a&1H<zEukk6~z+zTCv_;PsN&y zqTPyhI#QrmjcN;QWOO813r$AV7IF>h?MxJ_USZdve$j2(qF$bet{1u@0{$~NHe*~0 z$zZKI2;jGQa9TnY94`H#Q9TW}Sh74V86J(p5Uc|fM^cQ_!Ab1Si&!QGFCnYh-k)p- z?%Gae5Vo4gRvOtl%*oa+b*NzrQ5nwAC<w#WHK<u`@HfPAEM{=(=k#PJC%Bv$%&>TM z6Pp{i^T#KJ<+0Ad-{}kV2OGIT)Lf6?G%I&sL}<5JF=G*$I5#BjPIN7LANAmx?reFO zrsrx<6ugW~cp3iuqa3!15+3P6l*gLrm4x!r@VYZ(p9}_RwMx+SlI%O`!_^dFLx5Eg zl?klMdYd1<k`;i9T}L(^Jp>qWgTW%-ky^X!5giP+-P$q+G`Oi^6)a?wn;YHP@<Ilr z@-(xLCtsle{XHHN2rjI`mu|YtXc;Vx`hjx1_-x9NIu>9HBUr+SkJW<JG|2E^gj5z< zQBSEuSdPv?JBE7`HYl+f8XteBTGpTb`*p+&Hs=O6L+)9x070Y5(ua=bfUw55W(Ofz zJQX)Vzr4Bxss;WTCy*03;=h@|nJP!$c4`2ANJI@GNo)=vV_K6>i+09Xv)&hYnq4>) zkoxJY!N`Kk;tM>FteoK2{$gprWVy}1o-GPRqQ>}cdq$8KicsNe?{OXq4@7c<Em)C< z%VSipU^WyaNrXb<^54rkp^sN=1Fo6?-O|RTg`^q+oA5_81#6H@F_MwoP*_Qld(_J8 zEe$L5bp@_d?4>7Q>51y~AjD;R(6<$!)1bQLY&#q~gG#j%vGSE&!@~;joYghZ#^^=( zC3}&+jbS#l5;SBgpiBI79cCekFMs+`XEi`{xt1kjN`XTd(FrIuid1wy(rIR;G@VyK z$5(<Sv^JUy4~J&4RINetM$aYwAvS(>96w+1PfWn?tMMz<e~5no@xMZU(B;pL<DVe- zTM~K_#$uLVtu7%xUv-W?WaB&hh2Phb|5p?6AJ_P}|CRXn5&uFP-!Uw_BKS8Y;7`@~ zO=`{gtiMK$4bl8N>~lWwJ=$SB+u?DbqGzxx#zq3uLU)+fbZ_)YM886#(;T34L>E9w zrTBW<5x?%Fu~|q$x3)+-`rDU3d2%+5q`L`eXBT{y(1~%mh+2b@DZ2#6?wrNuV?Ow; zN<M>TVT~#Uwb+S{3OahmIo@2%CKn|#=xtTyz?b!J$9~>vJck?V(hKPR;s~r~c3ocR zOkDBt>OQ4S{)X&QcG=<`J!YMa{X?>+DJPuM8LPE9!_Q2c)mNSjLeKAl>0)e;tOcF- z@wYBLdCUQ=yaRJbr<;Ds3Gy0+I)F4|`Q?rMKuz@qKheG5+7<6OcGfw?JNEVkrqIy~ z=X6RS-1ILm!X2H2pC)1W6G`fASg9!PkxrVwqZq$uU0A&1IA5T%(7vH_9&Uc%#s9-r zX4NA%DQhwR@4I6d5VGo_dFTiu$Dq8@r98~L$LIz7_s6>MsFTkb-0BN(l)<I4*lRxk zU$O7!@Aw)Rv(B5pql8ofkARA&X!iH4flD;MUx^xE29%`!f(3|fLILx4Y%t`x-iIke zd*q+F)=NMx^0$&aCelgj5t6@4$ZsLpJGgK%e+L&CeSxo8L$ra_>e9kTTP=KOLOI>g z!e|J8a3U5wrHP-zlF}RUf>=5W3V|Tk^@pwW-N8Gs-o|gp_^=-_xiK=%TCo2xe`~|Z z=L~Nx$noQfv{~7)*!-n?LT!t8B>V1=H?YF#SYYF+hWq>-er^5Ep(nmOwt%L^;zH0B z6NX1~_S}eKXI=cJF0xkvi(Dejnzf+&L0G*xIrre!f@D14(P>tfSd4Dlo@<D5oE#NI zNN}v6P^r5Q@wcu#Id^Dl!QTGjT_W1Q5DAQRLZAuEbjcmIB;FJD16pEF=uCx0tV_i7 zJ*GlhOnYMl%iHshygh%y`E))3Cl{S;kfo@Jb!ttn8AEYoxgom>(u1ALt};U>5<_{F zws#3DUc<;%w|xZ4+LS!}J4EEN;rNvTwKS&#&)(X1HuYg94=c9!AVuL1GER;<2bQPV z>4OzMhm0oGpBaz2TI4-&X|+hNtI;CQA^{K`P2cw2!HW+ph(^puqHhoaJ53Fgf7q|S z+qt?uWOei~G+<k^;_CemU2X|;30%AAE8<7+l(!{-lUq1)bp{<L|GqNwQhB4gf_Oio zxZReM!*VbkPEzL+J{RS*h40|BN>9QU(&nx|;SUA8sq@IsV6aM;h-Qho%ssHR;4pM1 z;={P2`m_2QEgV?`SRO(BId%Yw6Ga?zl2})*h=1gCfPw9jC!SaOWc=aH*M8raO;olw z4j{wTXMur-IG7>Y6>t0_*0eJeodbA|H&ej)J(!uk3smdh(Wr;@Jr3VIdhZ@n=C5z0 zt>Rj9eGxF#70}|m&`EDkA}>usJ0R{}xR!tDJvWYnCl{WT;Sbi9l27bYL=MJY0;qj~ zgAJyWMDOu|fb5y$9eQ6Yz+kw`>2w4F@>9EABfq7?csHVPICYM}G%!uXuyB%;GCCD0 zQ}kyhK4;+b<qlXzZox-x=;+pO;4g=t<8&ap2P)-OpgkmLBXv+m!1If4Nr<LoIzV=f z2gqO~xTy?rfP6)elmw7E2S^=3o=gCFRzMK!t7QHo3Hdlu3d^f`Eg;A(3Dr4Hmm+@4 zSp+#afl3O^u%R-TAU-6xtFw;-q&q>95<r?Yuh{>7Ci34&D5cs#ViiGf1x1@uaC3*v z$P)x9O#s>M04XMjN&xu`PJ>mQDFj)81b1~B93UeJ@+uN&W&7qp)fl>Y23n0f2U1nq zM><lo=yMbCxdiI4Wf^WmxCI}2SK6oN$^?m?s!9VnJwb}#CniXAKtYTe%uj2AB)MiM zaXk8hZnH%lu2&bRt(<1$4qK-SbJt-SiifeTi-ypd5W<F~ostteZ<@dVX3XAXj>3?? zOu<x@_B9s|A|qx)@sD|^Yw@;LU&-ep)cPiN&Ty?pUHUpif>$vK6gFAuZ%o8<h;>M! z#R+J5vnTs<aEo1kfe>irh5G5x&+AfbU>gW?Wi4FGFZJSR>CgN|@0=~wtZ(G6kk|>e zjfI9Pq*F@>NUuk5-?|9`nbiorHW6M}Eu>IeVO}@{e-TO5QPdhC?_R|4hw63VwNiNS zOGJ`B)w~Hokv+DXe*j|%asp(feS<Vs(@!C-CcnV|{dQeVeyMjxG0^p#_U7xW9QErB zcsrsLsFWOuDdlkaDO@gm2TJ)zKXNX?g!DNli<-?wx>^P63!Vffq%jZ;6U1}4E7LLM z4%h0kE2Of)FS3V3RCis?A}IpvjG@DRZpKt$*cxA8tgfx#(AqL>qE0J9Q{{%zw8{U5 z90VmqA-$lMlPC2lwyIzwzMe=eoFNRYvD!5SC@}OojE3zxF!%_+*sRKq``M5hDkhjL ze)!1o;LI1mN-l)^Tu&6jo$)v;P|I(%0Psw}_EW5Y0acPEdZO7))v7p1v&&EoV|#cd zo7l$)yYdY!pGJ0#4(4Of(Y(s?gw3s4j?jw}&e;Bc&yv>31PyhZ9<ioK^>??Jfh|h% z#-~5{Wp400bvoEV<^9BC<wJ*^{kdtD-g^JOuxK?)Kaq(XUx6-jm;<>CGH@iM61@)2 z5hG!wW@`1wX(+&cU6eWMI^Qm8w?Kg~VoWqRfpyzxRd(ftP62#xVMtyeRTm10g*}-> z1Eag#)-o0@XM?algJ_YU1iw(_r{IWN{2YzYejc=urm1QJ7pT{1DJ07S9|hRzZk?jZ zouKV2*?kNm`rk*lDeq*Gc~c+n;kRXD1IvVk`YBqD<V5X@2^u&Rt{@!Y{zT1bS{zk^ zZ=-Z_vq?rA4$wHIB3fvC5AAg9W@k}#lycxmG~)y`UNE4@jNP{UrN(B$IiD^{oE{o4 zlBr?(tA0x|<wR--RN)WI6Dz<^YvhsKP`FZ(?9PWmH>gD%7elgCZA;|<!_X?IRN7ZE zIIh-JokR-QMFyXv-I&}(-0zG>=PAsO;SNSmM*_}sG2+sIqFRi&(9frR;u&#CVLz<| zDq<#dDnA;*&oycSsvC`AwBf^Va7=|7Ib!b^KJs8t^Od}dEcdX<^ILuf3A4$~Gd5~d zoRKvj6E!UXwU40cnC>3L?xC?`c$U+yP<5Qn{h;F!++zGnHH;O-YK%i)?G2ql=m!AJ zktMWH+wgDIyTi2<PA4A$v;bLf@=+A0?DM9aNy?{cKC0r-->vrK+E3_xG#^xz)4%|u zweKJ)+SxE*8g)jT+CARX#*^BzY?8o5Zfn(_Crbs@TvB@#cB^f5{Be?*-XtfH<P4C6 zR!xgT@9Pach0vpf0W2tQQFDZWt!gKdqUoA}=s^7!1XJS#mwZI+;6<Ts#Y#d7G<^mM zN5_B)!!M|YJeTNDke+c;H-VIgg3Km~CqM!PTQ(9J?I-k1XQ737p|hYUc0Q;BG&xTA zFoGtYMJiR}L6rdx!dpfSq<?7wd}8>rQl)4v(&D6-dV^M}KeS6>**{RdpP-2ck!sXC z0F50_nGDjb)W!SlW#04~RRxe}7#{^o_WmHA8ON(r+~uT~hVqchFfU#h#Z0+LJx8v> z*uYi1%#U#;nU6*{>!mzwvEnsTT*=FeFhU9hgj#l~n}LG|f-$FVv|=)Kh{*uPSWAC+ zVv|3d2Vir%cbB{W#L^B7b@~q<V!RIZx)XnBtQ3pKnWicDA4pnfo2(#40l+-uj{Bd* z3$pK|&hv(AQAL2`W#q{$?0P9|jVi=nTSC?@`)O3q;7)ZP%qIe7u;bVQ3^RK1NN|W5 zPeo*m@6}EI(2Z04p|kZQ!W?JGt5%ni9RN>9FOd=8Ee<Q;dKxFhfKNV6Mj<f~9SLH# zUFpLhsz0%<r1U-jegiX{B=wa&l+(szz@lYD2KAnw)_^6s<~U5e39S8EY7>>mwYt;i z1A2@yRdlTeca`)GGRQgW*;}d+77KEdxL~6Zm5}v7sEQvtg1AIjd|K`0Qx=o40S!Q< z>>43lYQ4v@4oO8Bb9^O3#1QCEM>u_WPFyx?Gei(ddXt1VR1X#xuGdNF!%l>3fR30q z26?1!(x5uKf_$ovG?8sOhXATk1M8&pkNqGb5u#g=Zswwd##|JCjDY!R2{^)U%ta;1 z)^VAvv8H9(``6@UaIJrj0`3i~55a35C4G^kr|5Lew4{e6JyoZ-uoyi^7f5;<)5CL; zvvIJacSE2K`A9)hEkD&5XlU$!hQM3+LD?XkpK1U#7wla&K@b1MqkI0D8#?ao8I<3t z6iLvW(5U5b!@=sLbl8y4BL0LyfQ6{90VOWRFcOct^khyjP|ehkOz0pN-SA-<Be8jp zdExqU`J-nMevK?SAq^L*5E?<}WDJZ;ap4Lg%XluE!SaIJvV*^>f1e~QXu=}4bKgZA z7ncy5X|AM=V%oV#(@HC8gP3+9(%1tn|A%Q)u(AsejeWlz53TS~3?bDj;}ppFKG)dt zuw)$0jJsSJ_e(}sX58t@xLY!QVRPN#%<z?cCiWfWG$AwEh+ppf53Kwe=0_6pS6cby z%;#v~#$T-SE7c6<(;If@bMh$6jc5Kk{Br02qVsE18uQoi7mW7#5?FOE8?RUedp*jD zTX+KK+Q)(EQW^O_NYKO~wNAZH|J7xdt_P^EWDn@Pld`Yu4>2UTNf=v-pv=pnvZ{-} z662N-jH8eB7b>4a`Q21jNSDExh1d82?4bT@Rd1Upvgpy;M$hUsS*M*Hpl=d1v3lid z107SBQ7HEYEmg}jsG|;7c!L(HN)75T9VY|SSMqp5b$NXqI@)Zsgt`n^(fOvjbJ?U* z`M)9fA6RsBv|kVq^l-#xkjP=WXx(!~OmBNbPb2h3@gw0<u2re9Yv|;vS`%>e*IT^_ zh)?=F$4^&J9#7~*QCF*Cg3>;tfQ0eBQL4RDZGy>jjq1E%J+DdqTgu@$hhxh2AeUDJ z>qps<?hhvbmBG;0MW*$vAV&M&MsY-&h#OspBHucPS1Z*&g;cGi^lt$926lTSsZCgo z)gzJEUTpaUEo88&{Io_Q$;FmWNs5m|YzT7HMW3FPpLzs2ekDhuIqV>=gOZ0xda-nz zHR|#=IYcbaS~;d~s)(%X@pKbc<c5ap=ul4)C0#&1g3_w?9?XHFpw5gEVplOrT!L!A zEi8qQq^p}_RUwKkoFPn_onLzY5%=jHCpbDeq=7;eg6$d{c$2mGU=e7qlozf@1x1-4 zeW$J+!jhd^4u&DDU4VzwoJRj>rkx57(Z-^x`!iu2UvJs{X)jj1NezW-5qr*QKIA2( zCUp=qTrVjV@_p(imBfrHCx)-=MlmSJ`~d@6^a}iP=U=PyE7daQPv)<<v2`@<q~)I0 zsK&BJ4$y%FP3$67YKk6HshdV39Rcbqsf6mexw@Uo$f0l`P-1h)(oOuIT&g}uTMV{` zA@k-k&k`eQ!->*Rx&@^T%Dq7w)iQuW**N|D^EiHPRda=3yZI)1qc*8hmVyp(FW}p* z({XPHJbi5VUdaxM7+oNezqiVnE^bn8`0|X{EVTsslp8u;YyZA1HJDw^`jd;E1CR+g zOo*y-L-UZfR!x<9(OyVA)AEY#K6>^PU{|3!2%_&8L>XjP8CjJrWgq3{KDuWaU{6&E z|5k|`)g!1sN~=VllhU?`)oQ;qxkfrSxC4dl!%D_)&puKLlY@GYPYP_Xc;{EYCf<4e z<tPQ6BmKft#E6xuB9x>plju`Jb`kg^!6M5hNqQ)(t)gAuf^y0~UtfG`b+<)J(A~0_ z@%~s!du*!idTf$*957$mIigk2yq95bqhs;QshNc@Laq^YKk{NvI5T`@-0p|W8g&a1 zwR>t`pJ54qU$ErSHR@D0ki@v`Qn&W!XRF%9LJFw$=5pIg(}M3uJc%@_Bq1UZlwm?- zt9qS8(i}uA;got4!TrZD#*|qDFxwr+9;Z$L=x1sQCa<`deID3LA2q^^Mz4X&|EeJ? zN%k3i8>v;{uivK1^1%U&jhqXL1+j<8upYAlGETXs%;Tjo^Xk+fQ>i~Mlc7hH@W)p= zBrV|HnGtjF)GbPVatt%$!%$F=*m0yQsXH)bLYJs&GYmD0%4?qNkx27mIP)BgWE!L% z(#UCKbT{LX*C>=1RO%KqvwI+_Sq!Bg=^lt4X4)vEX?chpEM?k17>jCA`#SXm3{>oC zr@|N3NJf|$i(DBTi|SN9Gun(r=D~q#bsjS1!2u|y<HbL#z1P=sR9J#;>Llzddx5rq zcRD=EkG~lco&*t(t`<>WiWPDW)N{Q-8`TTqG|HHuj+PFprh#?0Bv0|iZc;a}An4UR zpd|F9W>i7mu~T~=tNT!oqTf33Qmn1&Nc1XPjYn^=5`VE3;|zp6@?hieBr)?}lIpJ< zoeHp9Q`NyQX>&RQy|4(q@T`#%<)DpJgTRFDh|)_M<o*Se%}R(ZHCu!wHx!nh6%Xt1 z9g3~$(Dl?#*kJ9(<h{l2cnoGp%)B9s%*aM;{+tSp#0EfmswL;4$07}5-%Z+1=tniN zilxsB(kDlq><)GeWSkSmlc3>x_8*)}s8YAU_sa>7McBvRlOeyJ{!lXRSwNVOH**EM z_eIwb;NUtrBzO)wDXJ#@PqX{Tn`HNX&5LaLQP+!`lU=2kDtR91ehjj_K_Hb$sebhG z)}GP(Atn*<>##kDCKdEx4U00xhQ#KAP2Hi=yNTJWpqruUVH&l-rBgSEZ)yat9ZkIi zDY>T0#|3VJBU@GV&y=~{V=2<%BR|F#OkZF<s8NRCBT4-zmN+iM?~g)7<e3R^dUHe5 ztLV}kublu)E}%xCiLkP5Vj-y%IFBHG2|JX6A9=wRwGoXBCYWd1egZh)lZFZ|ELFIj zakTIo^wTPJ{XiIj)$UHrcmp!4)mg}lzL5|eI8TqGRca{nbMVWJ-%*&sAiOX0<q>Ka z5$?2vMQ~{8lh`uhE8*43ZhUT?qY+W7(d1EXPo*U>KBYr#t^&S?{ist9(jTLvxK@39 z1V7hl-;@rjqs7o%eM#aHXYqv-P;{d@4<uq^9pySCys^%++$MFTRqh6Lp_IE(eT5`i zm_s0n1PfCMjc1HGf?oCa<0hz_-4B2m%x{h>_G!b!l89peh(7#(RBZD4;X0RMLrj0Y zMy(EVJ<m0IYoTEDo<ZvY)Kgd!!yr`@rtb3$VX!xTsnIrrNz81J_#xVtD%_JP#?(o! z6-cyQNV&Fyr3}&x>H=h}yhs?_iwq+F0z4%PgExbEs<%e0%+&MPd%+(sa^x&s$92}I zTl>Nurb&dKa@9eb^wTukn?OU|3Hz_*+C-8KvI=Y1mJo|!TXI9;W&$}3hEN1sv(^ef zj;PQg?4$Ap@?odPl-6pKw?;kuvRE%O`DUp6>u2=nLG~I+Je<DfB#~-_?EM0RuGtfx zwn4(5hP@i$McXsU4TW`}H7-@52=<zP683ZfBGs<K-b~R_+-NtPe68f1M9z|T=couN zOEa7M#W$+XhtmbqmksHVaiy^EtvXA4Ler$3bu`J00wK!_D;3Z{5&!7p+!#BkWU3eI z_-a686bcJKs6xO)wdI19&uu*C=n)6)(HodjGM=?VKFk5E<_vtnYUUw&{1!SWl!JN3 zaQ3b>ewjuS33O%}{W7iTlD6p;?U!wXfn^VF&%kQGY;TNqo_^UM=*ymd+1Jcy<Co19 zHer(AMrQOn{BqhXU)dF0axhW6hY4~H65Jp^2ndeY%w_(k3Hi5JG2x4t|1bW6)qYGG zzm3)0@G=ee9msMQQ9xj<utu-aSkYlNwxh4s2zH+Y?Cu)7Tz!QxExL<V!8vTmt~k?F z(}l!W0C6+0ibx#RDoFxCEFppZ#J^}ohi)G$B-)K@)ToId(N0{$p)^0d<T(~Z)B$>6 zcIZ-_H)x}Z!6;#1=Td6lLuBMqk85m)*4^TbjTKv(Ty)>pfs!!7WI(2PU{qa$Ua9?6 ziB`s4*06M6Jzt~i^eYylECW78dUpC#$BU`qz^iUUVcOJWGP6OvABdM-X*^SmC6wF{ zZV6;k+|-aFOPT&1(oG~&yMPb9NK5z=EMZRQrYSk0bIp=!1}TIw!t5<V+N$2^6K60@ zGSg4e42qrj4#r$F*przJ;`JH^Q<!2Hl-#x_5%tAcWbnNfVNe$!y?#dx8Jucd>QPUK zO3}X$jh4HA2V>O}SKW@z^!IP{FWH7G9V7XN_*)x?td8x0!$3N>`$sFYFc1xEDp)UG zYo{mThCNwV=ANM<?IiqC``eXiVgLUh9Ug==AVpTDb&XU;7a)}xD3vkJznYLvC0UUd zIz~IJ$D>#{{YC7`49E{Th$ekrk#Sm^!3!PM+u+Bd5oeQc93v%%CZr5QD~V=>RBtQ| z*VhrmtZ`>+<cMHtxKM@AXzTW}IP8xjGL3lf3(l%LA1Y;Qic+NuUNF{M!%Ny&rqOz9 zEt0gMOv9|2)|<U!_tty-k?mOTlbGQ(tM0>$HrD%osRFEb2V{EOeY~eOy`}0q3`$Yn z2j(_w3oO&Tg!w%BPRn=+?WLGCb}M5U&wie!c?`1LB!&_g;q_==jTLvtO#ohm(@U^- zV^=fDK%!lBsMhM|$iQyw>R+%h?buaEbA~|1!?%y9#WYZ^Go@3!K^xUQ0EPb2uD;hx z+tpk>>O1t|NN?;WHIW6uu3ie1Hg>gmy`OITz=O$(ED1&M7ZYIad&sLp->D(yVUMw2 zHDs+Er=8Czu3W*Y3d6`5FiGlNmVn6y;2YUbSAj{h5vLln!bX)Mb<K_#qXnuVQn&3X zW4{<Sc5o|fH*`|Wtq_xzmOTAgs5zdYS2)$=Z%@ZtSi1Tb#)jCZ&?GC0Y0=mNG(6g% zNu5j|j~mf8s2lg^=SKA#l33^C!EzgES#O>0RAYok5g4js3#?iq3_$L<jsn7wVfehN zN}EP2Zu#Os+C{9QwPFC!7G8|ZKMz1-MveQfzC>4vN5A_%L#tlH0SuY`G%<v^p`)}R zJXR`Yt#YkXsi>?8Elxw1gH1$he5-Eeki?T#dThzALNlRGb~DLRpUg)$=LVxn9YApB zEv1h<jmE;1oi=GVp>LV8*QvJ-LwmKEvY#Rr08{S&ATuh%7TWVhF%Q{R(C#D@<2l*A zh7_HXUDnPhQb!^sE)_MYbRe1Db=|(YcWpot<v0ieu~u2Q<4k(X-~#~!)rX96{z)LQ zvkWhZQ1w3m1#1r)#M-QmCV=i+jSf{oS3q;1h$WAp$wGPPI}&h0w+Kx{rt$wlwn+wy zrRoITFPcnsj(-ZG-kYM9ev$aL(T`+FO~UvR`@+#DEd1Z9J;l+Yjsb@BiCyZFeY7~% zaF7D8hodg-_KAzx>7A2mo_)l6a~~Puq_0#v1W*M5R02MggmdrZ$x=r0@>8}f?U0WN z&>G%QGv-1uG`Im2Ku=yOKcrLLv#?D-{oH{@<IT!ehOlgD{8n`$t3oxGsT@{<pzaIc zql%@Gm2h&C2d?5P;ns3C0yvilsCE&!=o`Wr**4=l)`h|q?8(wWzT@D29yA3VM7p=O zX7ipztDS^G0W9Y2UrabvI-O3qkO^j3-(44ald7R^hUISa7Rk$!F@+gk3%BE#fokeb z6}ymMCL-nF^V26hwIiaEWvH;(f6g1OQMJ(3lDC@GK|ZZT4`@_qh17heH)@kwL`6q? zzX*6++xQX+-<X#8##aS+mi&^`SXVHgRr-N+kZ;vtR6xc<=zN>BfmYf_@w7{=wEB43 zS2T#keJY-Ix&>DePkY;fn;%cR#Dbe1PkYmXJ0EGdVi@%)z!Nk$R`$h%9q?pFQO2>j z^{oT;q%M(Su{7fbd&z*My1@2o3l=h9{as+PUC3GJR0DRQ3yf#vUA&DnV3S>7_q7E( zz<?d+0=vE~*v1ERO>cF9$q8^LZ;b{F$4wjpIifAKM-A8j7uXKiVAIt1?Pr>BZ9MHI zD{XZ=t<p+kJl5cju+pAJnoA_dnqrS}6<gdEtdjvd+5yH*c<^t(RrhgBKrC^*`Q1~O zR*-3a|8DZr%<rGg?-cX9(fsaderM|6`3Ec*-}+*Qq8;;mCBMPd9#i^jG{)G7Q@Yn6 zu;ULd84@WPHV3DOmyIdii~*zVJ5knNVHzAbgfzi>sD_ES7om$vyNH$*zKodgM0bZi zPG^*YMT>mP$2t6P<Kr9x7vX>J<M>v)e4Nb3oIcLfe#YV-rJc~R^hRVeH+S-^Q)AFs zJbauA_SS#y<Gh4%!|mg|@hA-RKlX8&VF=pwacCvl^Ks5bF`hoo?WEX_kJE=pUOvtQ zAQ>NL!JgV2ccUO+W>3Rk%g3?wAfqc~`<JTj0T?c??SkRS3l${k6M$kZgXXkatzRaz zTh+%PY_8x`+v#@Ib3Z3`-4Z|@1`cq!&m{3J@sV%~rvRhfW^@yY^QRdp{8eoCrewoH zCX`f70y#|9Ng6Y8i-qxE0p-f6f{?y`FH}or)FbF~coPf`T)2hIg|gsd1h`?;Z{G%0 zE%Q-*WGY-=DGa2qI9S3MJUgZG*m1EbSKv%2n%@XTOH$lX*5?}JmNLkg)0(TvT1ejj zst3Ru{=;e=ifZu&Ghxa;fQ6-svm`qO*|<Wg5!t*y&L6CgusZkL%WmDEPUT-V5Y!Z8 za0@B6>|tugOV9KX)xqRBD3^;uP%Xme8r3hEsSBGx3o&j<4cC`SU9`OD38P*PSrtjH zb#vBiAtWd4A@FJZ6;A)S6-eQVDfp$100DVvO2c3qjo?=ZnKrJIxg;P=GO%&DV3$W# zFC~wdAX75oNidFbeHI-6Y#B#g6pJYlpicS#C{rMAIRmO$5>F%f5ehm9H>QAGDPeR2 zY+8u)lCgWX4KbX66wv1+UiF4xqemfu!hNbcIHI(dTHQf(@jcpz1YKO-)pQ5M|GBSN z>!a!g;NA8E0S@=-aUk?AxCZ;2()SQK=ya*jNy7NS35+Le#>c}6jV|j0Md0;})9%)) za;(*tKQ*fI5j2v08kg!$$qQXE4eiLMmi(s2{HrI6t<W0Kkq5Bx2pKw!doj0u6Hs!) z0b(LPfu_S<tm?`qDP+l0%ik7_gy>V_qAz%uO)`o6hU)p02j8{pqHdBhg_vohTmd`_ zfN_<+h)_ZE@=@(3-RSC^E=;vlT2gWCgrh<a!4Gw-H1BYXcmF2-3d-G$;61`$;q;`x zfP|nOeyKA+K&v$GcLXWH!1aHE=$1>ZlpGF|OkAb^O&(n;y$#&QRhqxlivna+nkkk_ zYnDU<(jTJyE~aq^1$0r8ei+kBZiM-M9ZJx;$+yJ6EwIX0b}3TW{i)K~dqbsp(=JuI zBl{0kdWlx)X}n??qMkxaj$3h)pt>AQF9wpREzai3E_s;0L@UmNng|VS=Ysxaizq;W zRztBD9lknv%_Oq1e-E+_S4bV|doo>gU?xfeAPctaKLJaQOQ_UAx>5`pMn5^ksQb-j zTHT-HFv5y;z*;J6x*0W<Ax!#gZ<c~HJ$n4$AI{!;c4FBJb!vT$w6eB`7qj>LO>f8v zPn-fF3!3!Y7+R7i`!QsYl&<zI53t&I;hK!NMlT?B9I4mb$RCW%w{>Ky(db1wv%cEF z)GFE|myxcLT+2vT@>eiWE``^Z%AfQ>JAf3fD8er_7X-9M3k=Q%6DCw4WZLxfS}8dk zCK+)hcECtOShUZomaK*^gppp<6P1W-G=Hfz%ncchW{RcJnkCWP%PT3Cg>2GLKo=$H zr!&3eQ8c1kqszENZtj)15w2eJR@2VwVRxnBhvK-GG`Pel`%zX2M*8p$wvpb37iKIY zJp%-HYorAj?^$A&lB90Z23pc|8{c<7nZ7xJX<Yt8ra94$9(hpPD)r$LT-upYRZ!n( z4<xv2z1jgXk047DKt6DQTtJX|BtQ<>Zgg?$g3%pHBKh5MU)G5J1)DKbD42sjI$LYT zzYY*rX9hLnGGJ=QeLOR<Zy$e9S+)*8t>q`l#lC$>iu*sL$WE8Hl0psW0%ofrU%|1t z`98LE2<Px~gSDB0xX_P3@y<C1g`=%{>+Zlm?3_2^5Ez^lom!tkL^D(^5#P$;tcY)B zdO@5iK?zr|NSI`dtfz}!26Vb;+cy>D4ey9+&GEB&e<AgtIW=3GVz~Kf7r9x)pO9dh zgPY?4kDAf9a(B*D0kS%03V)%J{DTKc<xl!uTToWGA{oEb8W=3yIRyq=r3e$M5Hf8$ zr!Wu>lZ@RtAuQ>fy&<@~a3MQqD%eHm%n29LgW@kW3c2!v4w_a{ARF<ZG)p3umG@FC zG3`O=q9px!N#BC>oZ#eCHuwUHG!Q{YqRT4#d#c5fr|-SLXjc_}sm`dH)~+IE;^K7t zG1|pXOS>c&7pF^7ydg=Eg>76$fdq5`!q8#D(D&3+yi<UMG1!xK77cu58~9L}>2GQ1 z!_jY$K)NsJO881r(7)p*<VW`N1QYW0pO7D49)Q2&Fd+j0yjv3@z!)Z0s}p6^2}pvr zALrgf`!Nh=!rlG(MjgU?MbV%3Z)-fdOO`ys7Hvq#y-(l9;Aewp!$3v@NO04B*a31R zK|%>2<qp%*im@$Phy)5O4Q5nqF3-Y?z$7^SGEH%Uz@FJ@3rsl#_9q9+-Axb$7{lV{ z=y_;$`KiU#?{12#8!G3nk~mLXD|{9ARJyZ*j;fr%s?0`$8)WjfxO(hEkX$6VK_+aE zgKX#wkW3^{AS3@W^Rl<$-oy>tV<3|#kOz0z0%>swBnE=*3nZs_#S|#7AaI8HGwj(M zmI{B6M6_gj+=YO^!A_<NyIU$h67;d|-y!-DjD{1$S9ZBj(D&>dz<Qm91UJan8bmbe zHz;uQT_o^izqtw`LdR7zQCjZFM1;y%2ULj@uT{Tp;|1#L)D0|f)4sGR4bkiMUyEvG zoa#_-s*R+2neI__ap=x~_LUp~YVK<IkOF~l!9KbRH!VgFh6dx(Zj_A+9$|iCC)vLs zTF0#Nr83W2HM9Kh^}xcpX7mg=)~v}QP{&^oam?hVgNUzW0kYg|%|;5?nnXw8Dvbzs zV%eH4&~VJ9`g=1XEpxsw;+SFWuO*{6l<3y^`QKy#H+{BY;cV@zDAs3Rkcr|<pOH-T z@ZAb25+@!8aS#35M56UH8hZ8;?GJ*eTWpk;P$mt&X76-w3R1f{LcuY2I8n<zDURM< zYWG;rwzVrq3IxpcL3IMiL<^A+<#}ma#5M71tPE2|gV2)hX2K#9smLCe4N0KF06hrc zULal%ikGUlqXD;zw2<OZDf0{UFO3&-35xNMRx+6^19?DK$DxOKLyKfC1vH+)HXQf@ zH-Uxdd|kWfAwEkJ9WLt+ce08}$Z}V41D>}*6=zcuzrlC(9t^IwjAqB#c}xf#hBDj) z_Cg8>^kyaAfv*wOF?-X)<Vc3IhdG?F@j|f<<+&+7!QoxMeWzxVVuj68bfNy#4G=4o zzn)@ucsDBKDfU!yOy3D&clbPScteZWf5y-RvFC=w`^(=CmW>Ml2mTHs7`g5Tv8>`h zJNN?Fc#Xc)s{X6VGp3gl%oY!-rik)&MDV5)CMd6jpw?;VI;3@l&|FAN@+YYQ@j1iw zNo*D48!wX4(%~Biwy}5ELC;P6h3lrI%hb2XpY(3)p=@|g9KX~g5YTR@z=Xnr5vmX} zZQW2QIUE);TKi2f?_RR2CyNNmr-5bRH5kYM=ke(xf2kUQHPc0=Skpz#oj7_YEbweI zX@#kJ7}UH7bl2TLp9pBx50#9LfcvL4JK8(J9CmUzi=BWH-HdDI-FmrAuA!G;v}%D@ z7+ohf(Kkeo>TY#7hpRd>$PSl`EH{-cyaW<nDYfrGQuzr9U@JOR|Apurp5g$Zl7lQa zm6L=@L20zV!9K>ub~sKOO3A}s3E11|>4))7CtZH}Gxy+10&(!3hk=XxGpoU0qCfM_ zueLwaOfSJiJ`bUzEDm0viN1op1`uu}R4@>c)PgBFp^0YGWF0fY;Y@19XK)*-HUg`I z??k{9OQXl92U2J_EXdXzebZLK)&xZ-Hs8^{1|6x((u4$hIiT^f^>1z4yaFkZRCV-h zhA7cWi}hb{>Tttu7wrEc%iT(MAqCh~(PE8-K_ki?XIcwmGxcA3At&fhl9ethObzy~ zLK;=)5;&EBc65Rc-q6xzh5#CdE58p$3~f>*>_p>r!A7?68ucYWR4e{h2ZNrJHEg*r za5}iA75j!|;jU0^JTkh<M6Z#?;}GQNiCzse@zfap0G+Jy)0*f>E*|QTq<Bk`BGs?! zt8D0iE<mb&!tL$1-c$^@Y9dOGUV~G*#Q&KVg~7lN!FybN_aom4^OL<$VKbqt5e1Wl zBy|y}8uhJ4vO|5VL?r{2lIm37a%P0X<Eg#}0v%N#s#R$sKz%iOywXx=I4sCeUv#)6 zHH7^SH&+Nj5y0_*_62Y`JZV5{LIT|d(7qD2sjd2ch7>4ZBzi9<%2eN0{WoUa&lN9l zX$cBUTwAPBf9S5|=q&dG)K~HfNV(PhF{GfhI;%9xt9P{PMJy$8!jegqz7qwhd8k`- zH3<b9)G>>8O8fo@izDsJt^D!!J)Uw%Xy4=T@QrETQfUF*zH>p{v~LlT9ql`tP&gkV zsm}JD#*A>d8E(EhNlSsKR{IhG?W@t_?JI?b!-6dH|8stm=F-%pxy~*2l!A2C+i^uc z8dp;h=u|+%isK-&Tin|>kUhD2D2k&V(!Pfyw1sxI+Sj2_-{0ohzKyDvF3_P(uL0Co z@(D<~3&aV0wr`V^#(uY%wuAky+|@1*kzzu-+!M3gWr|2nx66-EebX+JknCue@gnPh zUs9dzlF5v4xQXrZAKi0^YPAay&@LK1-Y!xo1{;A~^9DSCB=tHK3#%4FP=x*F{PvqB zCXP!$6B6h!pnWAXerek@7b68tQwhruJqRVS>y_xgR;O^N!#M9Ut7%te=`tPaaFCRV z3&q;BPG6*;%qo_-AIswE;Axl{uqSOPFfCPrYRicK5WCp2=qosoOYYX{nT^GrLn2QV zc}k?5+<l={+aZxTfX23JP;=|f?MMN4rR1&v-{fJSr9KB*>La22i&*6Z^*JYMt51eB zuvVW%;J~O)8j>CAlPV1zNRd>h`t)W-INV6}nW8H|R7-t`0QJ%6arKcxas918u2IAA z>IXDO(-K{nU+5_(>C`W77HCaFpw9-hujIs7Tg~Z<6v(NFa$1A7!n;*dY=>!KvSyt$ zIc7gbvIs6qYWmCA#eqY&YSPcvpuA~2;P6fy@<EFH^3$rQ<l>z;0y#DTlNwv+hUbxv z<BmdHc>d3=?bq-_-IFwfW+mWy!23$h!trCbE@bjRvc4Z#-4DFzU?k9LIqx}jNVcDM zxwEN(=jn1ClHESflgk-|?hj})X}gTC144%1Bgs{;qr%U7lbS+O-)aT0DvX7XB5&wP zgsuTJU8%QFTHD<?rEKQlpE;rYzG&)m`fBHRUX`EQYu^T9UT8#LeUveawY4vF!7Z<- z1g}=f!L#*<P|vGW6@cgIb892cn7-JFliL^DD{WQ&f82cucvMB!Hk%qn?6{4%qoO8? z8U!?eU?K#%C4s0Qs337cQ4tXnK@k&8TGO;G(E-IJ8XXth<0uX;jEyV_jzU0DR3P92 zb!`+>WDz9)`<|-X_ug~|o%!bf|M2-d(z&&qI(6!7wVjd}E9xNxAHzW@`^@#cJ1|zk zUx5nO=qkZNqS$$eE)d2&cGY5hOPm2qFFZFdawlH?xI7K74_CA7AZ*P7C;Sbz`B6Ox z^J{Mg7FEmCj-{^B5Q{$MM_=<{2W?5+#`)-wDpd)j{-g6`6$JbKOXS%2;nhu(aFS~z z5<p4e-+Cr=`xB8{wqwX>=+yQf!JRRDxf!^4j^wREUhMCljK3lys^&AJoCj|kMOzt( z_LI0+v(<yBA>`Yl{)LAlxf?bBx-oWU43v$7vCkB@PY$M54FDKdcQ@Uhw7EKU0?UE* z&p;dT6S(%-Fa((dH)1H~WKlsDDe~Xhn*BbIiY7v#Ecp=CcYv~a4TML7xKTp-g)3!E zs154u_B9YGOh*YT+-pTBD^m%^6Kk#``XUD|)%WCE_#D9wSo9A><dqOV%Hz)hSdC0w zRUqgmn1=~YSvXr2%*US@i*W3Lm>~o|?Q<^nYmsd2YV@#0F`^#IMQ*iu1BRl^J<z_X zwe7^5@oa+n6#3Rakboy+1L0%!#es(@2H5^%LtMXKr~ZnkL9ueAo1VituOBZ0qG`1j z0QkHg?jaIaeReHV3fQ}e8T<-KxMI9`0!4D&SnBhLl+srVB56`%x-M!i7*N^a1#GGP zfvUn_V(XIYnTYruo})>l*EiR|z9NYvibvdMLD?%501%?Aw_4&MUFf=L6R9p{!jR)t zUF#VvD-x;d#UNxCP(qGEFTRl^fbTKZjMx|ymz+0EPU=l2=R(PufCaJ!^*ja`zcR+7 zk*+q_Z@)f*FP8WR67VWUniOe8rxaXRU|^nw*6ixfB2OJoo+86Mg)eEon<@Ga{xS!L zkOUxsU%wOtU?Tlrw!*|gHq$M$Vf-|P>aeG;>>@j*9x3eZ4!bN4!0YxFn4INy4i-Lf zk^Yqo(3;R6xrSZ9%hn<>W?aZJxfn0^m<aPU;9w38nvVle3<r+oVnlqw<FIxsc0ydJ z!{KWi?jtSC^6Y_Y$bqjI4y=%o)*LvJ3faSc<&tZ&UkSg=lOEyAK$7)pKIih-yOkWd z+tT<5U<zZZz>`4p(pKn8oK#jlI2`8PN3E9qw<a~%L{m)!SK@UDK{?K^l9NGVy7<-5 zCTq$plGQp8Tu9n}{2V@(H(G@Q&-$irL?Td|h-R$KP<rapS?pwzVOSt2JECEll4r)V zeA5<MPjLYd?_Y$oc9w2y3B|GvDEP|C=yTzGP^4SNW?69Egk-fIgQ{&@9cfo1XE#xj zR9V9mbMsen5u`zqjPd4RV$J5WXGr@XTQR1sO;J)^U!l$xk>8dZ##@;S-cLg_YA3l$ zt0urBpKV)3#xSbMeniyPPJK{ZUPyImrz8h3j9WDXmlL33xTm4tL^V1_HaYH~B)i58 zA5v0uOs(k+m>LSEOCf#7e?ckZ;R?6zHTv2&^$fiPT4f=~9fvv(2b#YbiGje&kL91| z1-IZ33aJ{Yj0y=k4oiQQahQz+H4+S@$DxY(h(>`QGY<UI9tX*7bOe}Ojd2+GHyH<k zuX*{7Tau2$O!XRgC^r-XJ7jOE!4APg9EmqOVZ#M?qgtr(HQ>V2Wi=LaKFTS0H+wA% z%Xud8>JP<7hFx|E0|)P9P~1&aTM*uA87M7IYf;#`Z~2cn$&!UGSv#<zCl7?9cMH|3 zB}jVPEb`s|8a`f@k1gt@6NQclp@H*l+Mq3@5ZGKJaZo?_id+-7r9!fLn`_!he?`S* z&w?8HBj({7F*sbP*3(Mjl$r3)59pWSA0{Yyzq=9tFhlrf1`%-Es7*JMg?JDt3I7!D z>t}4S_TWe`ob@&K@wd#y<4+Tejag8S?&6?JMBX&Rjt*H#Wci7W!b59dQ`M2Eu6Za* z6Z>xk;x@9p-&4XviuE-QWdiTQ0dAa&dqGjje${9UcI*rYn2QO>iN}L%Nti%huwO}D zYJiCA{>(;8zA{)z*b6{<B@J}LgE0Cg=^8SVdz1k|ees1e&^+#_ZN{m>chmhOd%}C( zxTYIdS-9BzY=&^hY8-FM#9#3AURz0oB__D(cJ?^)oc5a_HP|i?J_Z(1W4BrJ;CT*q z;#BQYy#+N}b5)aw4u&B(rkD^@>=NGic0V}IXUU16dXR(eiOT)*O&Y1P5J0<!#5Z+< zG`3nT2kEWr6S8}NEjco8G5a)pa1>6%C}b?s<KS{WeZh;sf7#`j95tvRqzoO9t1v{i z12THGNvt*e`I8<`U+_Iy>VZQr@@n?BM!kQHDS8Lj0_iH`n4H6|H92GLoKsEC$9B%+ zcFut&=g85biv*z%GSxary?h<O?KFa42SnNM=_o2WKS_=;hpiw&9Y7ttJj5+F5us&z z|FJ!i)e0y%EkZ3wP=s2-4>*7W!9Q&^EV&4^BuR1J5)#)`qFC7d?!~V+QuOx$zHpA* z!zN;1qK-qOP>WVfT(o1sXB{y9S_D=h&xn99**f*bXXJmI$z}=$aWUv9phVGujs92~ za2tIVnHs#|NW)WLWAs2kYbDTyJqRwr;O2$aVOC*KM0d0(oZSe^EqU;PGdze^c@doi ztMX^1fe5NHFe2Wc16~42<Mr4WBc(h)lBkCsC0n{Qv~7&ESH?G}%yjE!VO!ymhFUmH z6K*5#Tcm@q$hhxC%T}NdY8J#&v&cAhsYc>185Sv#PU`(a$;E=aBzalnna6}hD04>L zEW3dOKIvyInCd=`2u`r~$@2H?<1b84bjIHojg{a9ay}I9la?EvlwrmQ_9VCaHecEO z5Y<3>O<-;V-slZd!4T)XV8grog$hP~Yy!L8p8lMfENY8K!#*&1gEUu&cIYu`zNvXo z7Od1Cio(jmhnwr2>@+(&FWeEn`LpfG_HvkS9W{)t`T3-uc-gBzA?w>yhS4OSQU9G- zK0KXrgMJG~yN$d&uI3y=7$#$)A6E;HPxH4HFCD7EFB$b}6&OdnOkL6V!1>akd73Rg zqMT6(Dxoh`FS2~-m2D{K@i&>E_NT6LaU(wD@eA=6q-D+23$JTKKaoAgJRCDcY1aMP z&@(I%mTsEtQW?<{9JQA5-eFuU-`!86vh^TF7$b{#l>=YKGv`A&%Fk8fuRQO#9E+nI z9JUIKwRI3ayxEWOqz8=1&CI@E$~LGdc1v+_^T79#G0ov$db?}{5XugWnpHlF<HhOQ z#^op%j6%NS%OP_54a=~Iz7PJ1_4cB&06iiq)c+Q}A#ZlN;lCPYAB7LzelU!o^(r5% zwwYX3L~wXV-MN%HX0y?*K+I;Zk7eloq&}r=fr^ekz2H+)!CYUHwZCt!rMRclC}Y2e z<-;8`<Nv^x9L7f%t-83r$GF)T^+Y*rFW`z4v<?2iM;@lQajt}7-vtcBkqCS)?T@B# zXcoH)?F(-$0DE}#CddEE6|9h;Tp)UaE0*JXvrECKJ^cwjE^s!gFLgTDm&z?Kv~fy= zW9%zCjpi0MlsMcqpUZl#lhWvL0WxCU%pWMY3Dpg<Z(WmgMxFucsde<YLR+nKU|ek| zSq_ve2g<nQP(-g(0ZQ3d-~eA)YXMYmA+Qzz#-kNfIJ7&NfD*T+qv}#I7nSS@2Fl{2 zaMl{AMhBg34wSW{=o8=qKqJn@?ka@8XolJ!&@9ZO?dq}K4xCyC&Le=6WD8rmwFtwQ zQ}!*+5&{fST1k}hJSasSPy+=eu3&kEX%lJzrD}B>;8|bu%Z!&_jFkJD>3+LGr-z_} zC*L)R!s4a)${qkf%wWlP!$0O|u2(DB5HGY?Rghh$-^v-zr>-Xb@K9_cWcv_36D?~I z_})TbFdG7zu%>!?KidJAF95GgFl9qo0gIO4Hmjdg+0Cof4wU@>CCPBe`KlfwhI43~ zEG{ux^F)d1H>5od<NT}Gxrqt5TqC$37~w|P8Ecq>4W4<m&U8K@KQkSiZY8uJHs@@c zA<t3UW9X7Omt%Dv>LlsMFv{F`G!E@RxwfV_<73r2e**!^zY*YHuVi;#K(?2$9%cm? zPXaxfJ-WvYVGg|kE9lS&207N#VFs7QoQ4JpJ78wzhA(H&#}W2iSeHO(6_6V3AXUIR ziDy4Va4Jv%f`d*H2VdEbK!UqT?|n%A+^EhWvR^ouA+B4jyMx&{R5D%v?FzJ#s4QyL zX|#A@?RSKQClGRk0lu^*Jkx>ZQrj;lhgPTRp>`oSj4#(-aNMe9pn+JXn;^zx5W3`( zE-#2(l7XZxUA+h>VI$^pK}{YgRgdEDWIKcm<h64NyWo1^%*5b%RKQ9Ahr}2>fdBJi z)I;!{zpycEA!2OIn<+UNKg8s@xV8ixjAr|$FF>T8_zMzsgdC5$fcQtixN)4F<E3>( z^!npCJ6qvSf+;3~7XGAhc5-}gEr90p#@bOUV31LbtYt>|kOJ%nxdZLAX2QAH{j%fF z{5%o~e>%`kDiBK=XlLs(WF!l;vzi%IG+2yY)l{IJF~A}THzNKOs=M|o`z9|}t0tfv z%q?TXRoC!OyhJWUjCXY3<W=j`Icx$0?nikqN0n~KBs<N$n4Ews3kdOX++f+yD7;j@ z4wkRUg}L&zmwZhs>@8ngFJj5`LLBl%Jxjhi6&`QLdRhsK0!Au2&`v1T35ADZk%@b+ zrSmggjtFCz4TD^(YXn=o%!p8Lv`AN@w<gk7G&hX!Z|}lY)KN-gwr59WGyWH<ML{Py zPS<%6;|t7%b_9i^hGV`Sk#r<*{t0k%Lz8Q<uZ=BqHjY<>Q5UgC(ZwR9UxTZ4>l;#~ zzuPYqI^i`yFeA3W5%ddG_(oC@sO3oEY@{re6ucU^ubuL~q@?@Gwo)as)+>_I$yfHB zr07^#kAEceLqH5y;<<L>yG+EG?v3CrkT)VrHQ841ZPStXI=JQu{GPao4;(B#Q;zQ@ z+jRMGcv8C5so$XyjD|aFfiR(Zi*kt8x8T>yQ95>BlcyNA1D5Pg$xu%cF!m!c4eB<6 z_ncx_g7Sar6vOcgWsvPt48LDS!)u>n_?+q$D`{oUDTW>wXy)Z9hD@Ad$iNWFDTa5& z5XMh2>@RTj8FkkwhDr@lpJKSveAuTL&i|ZC7C6Q5IVzj=3J!ivP6-&CyjWr{W{D<C z^7ITDfBO`&NBk7SDd>{t6vN?6__t0mbb<PB>J-Ca$V+;PVHd<U=_!UsE=|fXv(-o9 zOM)M_sJ-TCh6xgS@>2{KCI?fig47qzp^a0Lm#b4FSPsm19ok4Z#jt_|5A6^!>o<r6 zYt&fSX;cu7xE#Z+UJ(u9HmBwONZt%JKrj$<S^|yZH}8as)iQC!(QYLb6n>w=0jan> z<-=osw5=W%>^O==IGfU-rhgzjUf~K^B(rG>wlIc%F3lJ@n>EaXY3A()^KL7=(buG! zPByQqg{Si{LgV-y;_BhB8{J_sBNBRL9gu-NWunoJ^M_Gz@+kzKh>tHz`Y=h)0d-_9 z{V)^D4nU&Y+3`)?Nuu+(`>mvIXuFFpB-BiZg?SW5NL0v9VB!TmHiIM@KbPNp-**mu ze`tgmYT>_#DThMG#&t#`LwalCozLkYUFp{OZCN!Gm$F!@>H^`26vys^)N;r2@Vw8) zc0nyd)6`P$5-Cg-Btv@t$WX}Nbx6~NB`wIboAt>evYyMpc}esH^*1M*Pl6e(3VeC< zAF}g{nP1*0zc?gyuVUULVC1e_d>8Vfsz38?A+~Tz5*|8pjrg*QlZx?7wHF|Gnc(^4 zMXS}9(12orwy1;O*Ao9%sU2sPF{tV*<DD`$uD+>vX;zu79tMa+JYD2IC3)kuY6NO} zN1<Uz(k|isI|t7j{;Bbdu{N0URNyPxV}$jW0WA`&8m7hIS-d|!p9ZOaK_EP6G-6C~ z0>$|Pez5MRe@yh$Z*sf;;wvr2oW7(dx_+yyC)BHVVdJn?2<20_8t19}r8}_M2-Dl* z{Q{6ejTUsYW3104fd5nhki{HA6pwx(#+<X_tV+EoM!&y((yu=b`VDfQ^OFZ)&_|xE zqC<2HSQ*>L<H%y6N?E9JUWLJydvq{$z$7lmge%#@K=+lt(kylWYDpL~3+oSN5jUt; zdi+@+$1t4<r&3mLv8ZSr2*UZXR7^sp|AJMkYLr2rumb@BV~^Cg;^9@wih!*7zx*jL z3;(Ph1}|y*NddvyIj6~>67k@lwiT6J1T~Q)+YiK(4)VQPRhOcuXNz$)4(k-<AdScv zW%eP{^5Q*SHU3g74+|Jxb{)aqFkZic4zplSJo&}1U`{PvT7>M_lkU33&!XOJRn3e? zb2>K+h}_W&fz|7Mr7h4($+=*Wtyo4-kHKOF8fwTND+fgid*NfTuWTi<^1A=(D_yC3 zFI@|_$MA73uGdvh6FX$Wo7dZzocJCFJN&F>ol22=&^RpX=4u?U!J>I4*%vW7I7Xq> zZ*Z4BpM;SEXi1NFU|&E~C^m3^6hV5Ho{T<ACM1>EC+dzl<l8v~0&E{0yo&|(x;vZG zhGgJ{<hTc<m~fmh$Z9nV_6a66FNl@2e{gDV_%95RH8J5Tqo@_&nE~wH>Rvqx5gP!~ z{b4__R$9w8xeEO?k0#(FFSJQb9WIHgU4Jt#(ho&zT%W!G$|Z62LWX@Av;+EEN1#Dy z1UYbrcvtsO=y4N@=^D!L-9WhyP!NMV9q0Sz$hcuENNQ@{IvFF1ISFF-%eSE~PJ=bf zk8|%z-`&O7C9rt#g{L;N@T>MG7UuO=N4K<j2jC(T0M6Dg!!R&vh*oq>D;1Uk7l>d( zw=7cM0WU|N=xi~H<MKJWZAB4iZGnfL@Z~a&f$pnr!3c<U$qi>{e20^o3HT0v8>t9l z2a4EyZN~j+aW-F>NLqy|OYrl@tPC+BBy@z;;C7=UM^R)#qe{Teh`|B+lKQF|bZW%Q zMJ2+>8i2O{gJ|Xs1!>%}@0;3Mh=qg1)!=CBSHSb;e<L`+p{rp2@`U_b<nTS*g>lRu zC7x!D^*o3u^LFDG3JR?Rh5H(*Cg0TCN&g6LFpkl+V)oT9X<Dk*3`}Y_qv|*9{J6B` z<0$GYD@|zSX5C7yszDX&D%}*wM$xkR+MjNZ^FlV-ggo61AZ0wD%IdzdLr~wM0YIni z5CScPvVwlfZXjh!4{XVVNdBU`<Pyn6dF)a(z<bB$38a8<)oODTU8*q68|t~(JcRm5 zmUt@Ed#Gm=+OM<7()BSvd(cgfor`_?5kwQTxD`;!zLLA<T(Ex$kT^>`75$*od;@+H zW<R5a;9D8u^F**OZ_FVAV48L{eg{A<9iVSmE7+=b0HWNNLrf##iOJ>u@CckHM>&17 zM(=kuj_6rb?(!`@m`$LSRRj=@dw*kdsR2HNp$kNE=sMIQAJG6%k~}5;MF-?U14zw? zcoVY)i!6E*943oV81lOB^p)yqylgAZM26NDr`z433xQ>#P9zYPLHv;sB|y-RyZR`r zCX0V6=E_#D#^e#F-IzR_pO&!SP!K!*L7ErM5PPSwglJBEOB94~R9G9kq8U^WIVDEv zUps(g=!QYThyfw?T@_-*0XB{=AK)3nki2%qIJ`JKifk;N^NgWEJ_=hKD6K)1M)Lv* zqnjo%(5NhOLBoc%Hrh54im}Sy7((q>uR3RG-4Pjql`HpqBOja(Kj>;4VTahIP`D&o z-+b{v-A@`l%5sB^otg|F`neRWX5RzK<1<c(qFUQHnZX`E#5xm1aEn>-{hS3q2!FwQ z!oK(krr*x=Y3}mAsc&<*=!%U%ru7oOAPy{iG!0s)2Inh$!H?lIz&S8`&<?Y-WOoej zlNt?w$G5((fK_dDMl(x3K;v-48Ua2_;YTdWZaD=OWs{&bU035Fw-3pSp~<twqRcj= zQkTE!r4xu&G+Qi+1|UkUOMvHWe(?pDisBiOCf8mw@uAKEc6KKyz&&&)R<LyluHA_+ z?eZTo%q*!!IhkGs0IIDFVo*}G%kqLB1CBi_#@nJ|ahY%L$mmdKco}^jSlikUeuz6? zZq3xH=aJ`KZ}Lq&T3gAen!<`cd_gd*J4A`Ww~4EhV}XgU?CM4=<eQ3RPHp0}p_w1+ zg8DA`Ti-vahOSjdpuMuMd}SR8AUubB!quz()f~31R*J?TcCLVP3(NGTAl7Pc!4aTR zGyy@QOdD-*3F`XFUdKqf$>W>)BvQcG)v63ItOsP+=f}>}ZM!(*@TS_%MLk#wtl*oT z>{63oV^11l*?>aB530C_c5%O?gsD?40m_)J9sog6c}J4gtKab3c<q;j;%XZr1!M4V z=;e%uP#<q-<da|TLk;jNw4r_jb_$USkHR<BdP4fK#K;^vl<IRjd9vJ-e2rh`ll0b> zsl~+0^E6ir^u`xtXb*p+53EgP8u?0}><C2q;(}aA9&hB|II9)pAVJEhF=GYZvG|MT zsM%^8?3(a_H=n$T?#xyzm_HU@-u#Z-8D{=$<|A@B*^B6?8X80FzLnrk9k9KYfXwq= z`reOt7GeA1MZWHWpFfBSg&(@fq6WH=R@idmI7Q$>c6pU#y%CFam03~?GOaH#-9_VU zo-i~At2Drf1|L7d!b9yKZRgjeyg<=9;Mu+;t=2FGi%dPZuMu`Ahija`qC&m$3bEh@ zUS*~i3tG=Vg#}~k0E_K_gz^GKV{xotF<zwf#u)*<Uo%792Ts5THftQ~8z{Y_V@8Xj zgY!a#9W&&GN?cs}PNXVM$4u=&{6M@yIaRs`RVwzf(6I_V$nf@{yY7LTcH!wVUY<BP z`f@<$Wr&o_K)GvQl70v*-H)MtNX-vnqp}y~q+z=E%0xC4o|DQSvy`yEbYGid(=nO% z(NJhsO64%|pl}tZ$XfQ)`Uj;oGBxxy1+z(g{TVbg#;jT$3=hVt<-BoUvLhA_&5I!g zf{)mvznzy<RYcWiV&kwuxlZ}eQwXQ^9yOT*#l=S>l0&Ig6&gzHHdj5@$e)<JUY!~y z^+anw@FH8^8q0Qpa1s6M?4%u-sSdS4{HO*Bh>dD7l47j^$ENB750FRd)$hpQRzl>; z9Sx1V?$QmT?G1<JXW=kI=Pf0fr)IwoQnbh>L4ez)!ojj3G0V=svvGb`$)9fL_imhj zh-hLAQf~N`VY%U}{5W=sCBK{*O#clE;BBZE*?v8NDf5{E<zqHvO&Rjc^r-Kx+ECs! zY41d|hh3^F6vWPMr^0+m^&yq}yywYROZl2qs4@Jd8}lX?o+NqS$yd+9_H1(<Egi+l zg&};hqW#?oxLA@Ky0Kgf;28Qte2NUb$g>{TzkqN3jt`#~tEO}J&o?-@qww;><S1Nl zPF`lh!q*x%7!Lu3^P;Z9cpJk*(6_u9x!6cjBWD7j^W@lybK%gKC&xxNAsxkQL^8I+ zwMzQr*fhXMGU=;RHFU<plcAM=R1KJ@vqQx|o}_snzm2%&t_?FmbTAG#j>KACE`@Ds zG^pV~K38@{CRdOebWp0L5$=j4H<R3Q+6Wc;mhL!|vB+?JZ|WVyX$8PZFp%}?HRw9B zLs>1bz*aoWVLoJD8<<boN_<?_t7YhpKZ34>M+p|EARoGm3J_O(c>hiCL9kgYM5n|D z1B3)MXtKY6co_?j8yS~@@tlG4Cs5rfC^JLN$G8W=d&_d6+)<ZF6zrKGe>{;d8wcL^ zn%c{$vS@1apbjnB!9vF>sKhmHd6644q>l%P+<5!Ai8|EP#~+`QK9<;h?1y~aGg)Ab z_s#trspmwF_%Z%SUX|JlRdrxB(eB3Zj;2br-<`DAthwBzm()NgbqDAG+RT(dzLQCt znQA6Rl4njeab{w8Wy0W6(5-rLaEFo_;T(VyqWy3V*z{aC!HPQr9$xH&iyJ$MEHIGH z2`CVVNK@6SSG*|^M|19>e`gQ|$4|pD-o7B-p+L~#$(ebPBJ81$suo4C5{01kd}RnO z0yJ>M;X_He(^nR<Q)Wv_@4`uv|Dt?#D!fs?9+$85!jbZIzkE$9yg<H6<ZE(aANd+D zUp)&kFR52yb{buP1*aLh1AHocMEtiJ{O`>W{Bd6w1E3$Br{pyu{=TVS+QxAUbg1=F zqsfeKs(C82T7AZR-VUPKF&F-Afg9U1sg{VUr%*|-{ZW1SH~zU%j#LALCCg5{i4dRm zq$P(^tu6zUoU$K$Wp|+`F_@ouv8(V8<B262@UMF$#idRi3Mej?c_(?fYV`vg62=fa z4E_g|1WA3gAdh$vgn^M*h2OY_yU2gn2EPo=4mF#aNKOTz)ZtVl)H=TaZz?|VXGaMP z?-p2t8i5wfrZAZuYwMII^{RMBvM)^i<JzSsYH;qgljhpnmpx@{Jy8JFb=tR-s=M)s z;frYrn@%4F%%oDOA3R&XQ@T^`vPJIn9=;a6@sgg4biFN1N?evL@A#2Ye<dKBAZ=`d z^kQ+FAcKiyqjm5GmHTv@AeltU5TuftTyK<%)8lNEr)h$8;E((4puR^M5lyCsNp=0i zsv(H35Yg4+no1&2Ls_*q1X=P7+chB}MCaU=NrF5g^6vKDuV8xFMo5ZVANi)PqU>Nn zC)VAY{)(jQ;l3H3rNtBP-XgqefvV-|0_IQS7nRPC(@3})^>A1GVneM92@dmtiPyp; zZ<1qW3{Z4KDFoD4NCiOq15in351gAM*j=48*kcS>n7ewl1ly$qdzjt$3Y03zyv!He zKnkG5Rqb_&U+JYoz<Y3ln$$Z!_w1x1TA{{k!>M^uh<pf&f|$_VUW%-uHit2_mWW!P zXMLo9ZH2&LGqz#rSxH-)soLn)$X%xBb0`WelhE2ty0vQS3TXvraVV{n>{K@+hY2u& zkxQRMsy^<Kil%Hv{*>OIX5<tZ2TbMVz1m0%eunf?iieT);z(YJdQj@h#NN0@rnIT+ za4}m17qceCdH{vWa|Pm!ZlF#ROY+}Pnc-%Iz>whxqO`B<-~=ntQd^PP)}<VL2Wjkw zbCuBSgcF0$2{ST>YmK<4zUFnk6CSCucfzC0__yvCgQW!;Sn#>4*?Ld|7lc3U+I08Y z=<aC*Co0Tja5&&^sDML{2>Re<xMPt5hO4tAR4~~3au;vAR;{jLgNetoqv|2*J`XW7 zlNYU3H=w9k%`NJg$NA@0)e*RQnsoJXQ<tPou23iFChZQQcMFmiU8A;9O@o4@Nqp67 zFfCh&i1!Y4Ifh8{D<>f~v*uye!V}T;s!jr|E##khPoXGu{^jtZt1!w3Rm*|F8R}EC zA_pFFN-z)ORue$t?3mWXNDSwdyZz}ZLR)$z2Q>$PWJFt`3s?$3RUWAoi+V8o8R7|8 zo{e3v4g}H6`Ll`OU95OVIk&n}Y#N`dmDvQ)4ikMxSfnt0tDn{71Yr(v>vpH$9hM?Q zLgt&mC1{-<RpM*4^~6EF_$)^2Q!fJz6e)sB8bPL&#V>G?c@fy|+=*x;$!mF-{}ZD7 zwLIc#D6*+@Q{#_Hpa;)X4}VlxO07f^iFy=h5g+Fv*)q~8vShbY9mA2P$tEo?dqO^Z zWe3r&ctdx|wk75O6{;n`nscnO1J1wgcw8oSkHmH+#2i4(i;U@5APV$VkWx;}X5kMN z5cKrPo5-wu(OQTPLFB{oX##-FNkf);K-=UjstjYyGx)a?E(o(T92V9ugg}h+^8!az z%GeTwq2Q|-6#5njrQ#j4A9d)IVQlO(sC;Xc1VAb5n8uE5pkk*HXa&+R;YcLpg}Zjt z)BVZBE@Uo-$jJ=~a?vB~%bd{wsrwR|wM~@goDOW|pENA+yNKKFyTsz6B=}-NK(i~; zOqaeogJN<T0*qoCa1&Y}f@h)U4uUJ$7S4G}rCIzTf}hSH29-Khzfuzx6xH#68n^ZY z$;~<9_R3>yrcy%n!+~;8%oG$~gkwS6=A#P^Zdn?)i5fTl5VuU=2IA?|IjPJvxZR@- z+n=BtYsKkyAaOJI@3ol!?R3(u8<5Hicj~BjlHVZkkle-wFO>*@jq0U`g)8|9gO=h# zW;^xYpBhBgLdPUXr#`%P1$Z5G1)Rp{K*4C9KAy&r1S;jImlqkE1$6i)7hg7kHaO^w zb1wQcw?6j~s+ak*5FamS5lKWTGF9ftP@CeC$Kv3Z8M+*Q2zt7^oaC{bRkyDmxy>XZ z<pAqjt|6REDqzJN8nJ?dH|ZfFDDnH`{wLIOg<1?<V=E3nd<T!>$P!OdLY+0%JiL7h z%`-#YD`qLky0*Y%^6zj&*LJjfzEqKWs~CSUW-EvyNUcGMZF#N}2Y(_RSDYA>@{)c( z)61$5p~kBp?ner`S7oi0;5F;ji8d*+gcJy8C~9pyk<`2VAb(WIiU?fOg@O2K)1?Le zR_{=+{3-TfagbKaS&od7c?wR@{`^#;ou1Md?Zc1)JZe$f>L`AVz9tsw_8uag!CmA9 zJasbA(5DkykP--3fgdPo;>JI1a!W1(R!EXV?lgQ;t`EA5qY;1T14jelhx8K627!UR z1nq?s5OlUxVR&mX$B4Z30vdMg#Bn51$ZYY+)-Hxr9X?G6y23?J-iuY&(T4pgg0gs= zpqs(4sKzv-RPQ;31YH58>P34Y<2Y+q*ZO3;?sqHJCguSTD_l!l@aQ9OL=FBB^O1iQ z%=u}v!X{$=nl@EgEWLYkz~XVtduYs=W-$LKotPh!fcgF!^KEFrIvkjL`!yFS6kqiP zl(Y3lLVjO;Y^y@O&HS_Q<*om=o&N~)UrNY7RXf!c>Ne&djW2KgTlKV}LS4fA(Z-5p z*_8G2L_5+-?{<Q+oKumqdp#(W<)=+qMam8V#6QOqEFP!q8n76uG0jkRd>Sb`AL`kQ z``@XsBl7l;^*$bD($PhqKAN-UbYJidC>e*JFCaD{bNXI3Gl_fP0l}RM6gKW_i2Ebj zYW)eWU~zxs&{iRNod`Ow8X$qcP8TKd_mhc#n*{uSrWVxEn5+gop@q#{>vnJpegPnj z9I5To%>rO#0&C@I)+!)toueySvmnJ9KnDjvh5&dJSzZd3Q`bZ!&~xl|)MCtLw%y*T z`s+z>eG_M|Gf_gFC@!x&TyptTlDFQv7h%?1fKnYmFDD07O+YK@vf-FSZ*T1sr}o(7 zwP&;T6H<Gll`RV>^JAA20dqtl!(pRS2_kXcI8$A&tyI2Kv_<lw)vAj|l>Yvh`-yXd z+JGc0YN-D%23eD^g@gOwPvrPlC5-?5nt$t1(n7#rR<tH)KpcMuotp)~aAbLh?|h^{ zc|_IYFidd{z<Q3s!KGJE7Z67!;IN;@K@o@TGCP@XZPCBL!KL1Q=*Uidg)A=)i!>8+ zMa7zJ0L+R5a7ppY0^rdE0OcA$djgmsf6u9tu6G;pl$c6C$9OUMD>7$=<ji6L^((x? zcv80<6n+PtX`!A+y0)s-ERB~W@PiCWCI7V5yyW5~2}yFSDx08HeGkj~sG(aFIsX2H zqzqJ{jwU8}bb^o|v3i-~J(fPmL#+D;pnrsYKXn8wS5Wr1BXg>xX19B)oDQ!7d!ctT zC1(~3s5ZL8I;q=W6xJPn3))(DxP+zgMk0Pphxw=7VaavkY}zw7!Xr}ux==c-!Apm? zACEB)j)iqa?=+5*zE;w26{`ymJ_~KBpJ*~L7sD_@qwt4*trezzm9snn+}1^hCQ57T z)Y&X=dkp5~Z~ZutJ-3ucz5%j;U5MDx`-B^QgI|Zr<6NDSQejia8BI0^cWaom3Y30Q zV@X&XVUY~!&Ozu-Q7@$F!jiV@IHX~}+T0P4wC|Z_?tybA-^7kj@hmauDZnxIqI>*{ zxi4LzHp0Ngp7mtB1d@#d$<!yzt90l2rk02%LB+R_Y4Oa8H-Dn!%M~4Y?cKT-2`(MH z#_4GqdXPk!XRzsEfDV1eP2mSZS{=WG5hkGFTBWUU0M&N@pd2?I#b={)wXseKMc-u6 zL<7R*8TBokGSJu-9JsCbpfp}uN5gL5zNuZwgyyZIS5eD4K__GajP(H?v~c0+;^4EB z<5_3p=_<N^ay*9-&vP`ME)iILEb-(Hn-|afkODjlSZi<8irq=XZsR{!@E>DfUEDVf zkdn}ct50e^Tq`eMUc=IfMyy0VLNAPwSazvp_sU4B3pLi17~@E!C9hqsE|c2p)wQVN z*>%g5<@g=ypa?OMT{2m$jxSF}==VWNX#lwF^#ddxs!iT=rO%7S$zLB6wMN%lbwxv3 zSJCW2SFOPhXvS{xPg_?>E<)Byk|WLn5v?4HwLa9)4Tx~&9YbAJ1{c7!I1aT@O9+v? z6)H-di>d?f69n=0IXEbO$@WZA+T0A)5ol=JPa!44dZS8?k?14ISm~Uoy*!~sNXMSU zlL({%=4nETNVVW@g1OA85<Fx^sCu$;#H;~ytGQFiQ-K2NP@PjQg}c3?bEp8+jtbN< zp<%)rc6j=1mh+q#1MfwpvYf%iuD}d@<wj&V10I%|2GIr>-GC78kfTYs7%i_S@XJm( z3%=klI$dKg<-e8m9XegNCFvhAz3JB>^Fb7AF1-zm!GpxYFv&zgx7+Us$qhx#;Zkcs zcFiOO%&d_GG{Yq0m|`Ysk_(+LNe+_;M6~kT01ih`Hy}8s3GO+>!r4KgZ6O4%vOcEW zSaq&O&=<UitO-~T0VNybd@0>+f(zp_;uvQzvqqK|4aQl5o-Bxa4V;6qKtwBkjj?V( zFuwIjj>0EGZTA**n#Q<VSu|&;I>ANK4jREDTnOHOk4@4R8o^Zj7zFvJO;X8i6dMyf zB@ofd^XCgmbpwLn@*{}gK|nArOX~!soH`f;EOkN4mr{y~>dc10HkuKLP&aLejR<XG zYGV;nQq;_)Z0Ao{WE=Gn9ugCiG>hY>zSBvyI*9~Q%S3DG`r(K`3s0Ap8Vijeg?9|4 zvb+Zbp&=*=%}5XrxM|4J>-xjl>+ZBc9`jWr>1GRG1C#QvNqRt+*KJAq!;*f1PS;~9 z>BW+MiB8wtDe2cr`V~5zgfNPI5YoAuunAiyRN3ZufZH||uf=$*P&Y&U#XfUq;BJ{- z1X!U4Bh&gdVUb{mUPM@-x-$QVg#2IZ{6m=kT|)l#vPhv%5dQ@GU|o{1PBBaR0{oUT z|9O0QQPf-b$bX&rPbTC)YuA5(`8-nNtzT*9-^~1}3Hj6Q{0o?WZ$f@V^7UJbr?bc% z2}NGeR47pgF#oXxDy-C0j;bH0Ab&BwyeJ;2^Q+Wi=C|V)_V^hb6~AD!ZGwWZLBV0v zwVBBBf;fqV&5FXIx}x>5Xs~(K!}>RNH8;gNYmns*$aVmk#0?Smrxy?c0yCV_^?ylP zTHGF=E?wo6em!~VaWDyLE%lb?Vryyg(&7-kfzrlF-Eb%W+^WWqS`Cy4q0&UB*&YDo zEBh8%UMekPVV?CE1!&fMUDbLo4#K5=w;oCm^c1`xL;@px%+b`&kJonT#<!*RJ_)rM zRfgWO`nDVhtTzKxZ+_>S-~08iXHVLtf`$Wl5>IfAnhKy^t<*Vr(b?*1UDTzh_D)`O zhU%`1x^&l9ha}|zPW@C{ls4nkcd{O*`5J&r$vv7JKo$XfNPCM}nlqYXl9$e4>Bn_x zmqP5FymWh(9?Q}&X14>Q_zo@hXG6ar>JV1X`N(YWt0F|^9NsZ4wlDZ9yL>V3gJF_P zyH$TTs&n$b35wRFZM4&P&EBM)0JA6Mbf9giTWObj(<#@^E{6%dUH2}#+<i{kadtVz z7Bp>4w#!|OG$4&`744<hK_5+N*`o8JlFU>5k*t<}U(Q^?<(!0a<4w6VPq{-9%AIe@ zrF+V4Am4l1J>HbN%u`OJ%v0_+$OZ8m;VFkz+D7n}nR2Ik$`vM*d(o7;(^D=tq1@f3 zTyIagjtS*1HRU>a%I$<u8rl!K%Z#sb(r&QRK6TPAu+ySW+OH+1?#oE?((miNHC;~f zv|E-??j2L^L{~Y!Yb1P@r{Ndno9`O)on^jXGT#~I`ziC?!F(5+?^N@>wOH^i{L7U5 zhSyt`{D$~s-@!ojE&s_{g<n%@l`fU*>$@$xWF2m!Z0lS8bNm!Xd|qk457nMD5ADDu zuPio)n}axE*G|oQhqL*G*73+z=V*|42av?WdB!aKs<JYcw=W(ysJm~&w>|(SD^Iwz zt3IQ+?B)X4MFp^wQaZF1%l6mZ!Qy89N{s9dA9erZXwR$rryvDY#d=Z3V|Tz2rRBp^ zcLgGKbGeCXCV)IWi=jrtoFE@RsLN*fr|oh}E<#60k~1d|h|p49&qYz^cA8#X97)`Q zypTafHUcVEq?@rWT{D~9h+OZ%%%+xp_&=#EB6FxQfodP1nj88}72YnXnUXq-nd&iJ zP$zXe5e47D%WN%F9@2G>Qdzo2c2i7`Ixxk|%OuxaMROhg5qLoN%HGl=4PHoHaR9pm zLr&Ug{3Ly%q+@E%^fbXx`#+M7-3O%OIOS`tTVl(nr>r@oNU3i3MPwja;7dgzfEw*J zG$%E(HE7V@#1w<J<YJm2NzOnBM4<grFF{*3AZUEij%dF@q9gw}I9w8x>IBWC^_2TK zlde~*uwZJYKr7IM+!BU4IUU6ijH82Kfj?k&2IBgQ)4mjzGgG-Ci_v#FO#~p%?aO>1 zQgo<3IYp^zYGrbjcpYOQZLwuurtT?Z!`+7qkSUK$c=N9&QRuRCX8y(a^5ze>^ABYH zz=Zt4I=@2w1cA2tCFFOLiC0mHTFU&B`Q^B&qn(kzX8)v4$3%|vL#S$;jwP@U+)zRa z#$cY@0M`DYh?U+}I|8tLWmlkxw=aWOiT+^@amh9yLNd(rVwY$*F792{7C4>fhEd!V z^{ZnD{ZGf;RrGllO<ca4p}vGS>*f7Bk{7K~uj!&`4pA;ZQLQ1}Ncg78;sv}^bqA_2 zKCO=9g?3y_d<fea>8@CO0kB8>FII9Nh$ADK`DQ)#jgs`EP920wum)U)900eOYUf|X z7xK{-)NEt}N;e>k#qaXGYz(RqGF*7Be65nN$%UQeYl(bKDm+2H=E_%k;h}iY6sN>C zsyC_qc@BU!A}>6-g$@HcQrg8~M4WaY9wUH{e$9DuHI^f0t2d!GcN><X8Z2aoyqW`! z!Wl^{;fv_6-WL*wn_mn<>TgQi)(9ONU|C|ziRj!HWu01jv11qe+sPMP=Rx{Ks`7Z0 z+y*ssd>m=qU<1;G2Bal~23~W;#VvOTIy8tIJvw&j+hAN=9*nA18ugh5^%H=)FSrqz zyas1tl?sJ?C}?7p&c;Ef42)U>JOG@0qUs`r+k)wEM+c=hs$X89kmj%^FK{dadF5nO z5srVFdb4#soatQ#-of)D)`#RF@FDPqXvE1mH3j_C*TaNop)a*^4aU9;V|U<67ETnR zIyHS#TmdW|Ckj9fq*({^-H%^4c;D0p;bu^DBx+ed;mbW2DBXbG?@-T!N(`kzD--yg zx}-*>Q~knIxms)r&cxQ_)S(z|!r?+8Xv5|P>5dm3$&V|M=_1q%7}D66h(R715=AyP zTx6saXNA%h&eBT6j0dGV<gkpm6D4G`3*3wXY~XeLI+BH%jKO{g`~w^NFg#acfAa*5 z{S~{x{^25BMzBv6CnG-0v6}_^Gac;VJoRXd`sZ*ev~V<m`djomfch5v#_2AnWJ@<p z4COuJ4-J_SU_h?(Qv9d3^3UCdJG8jQL>@d=)U&+SNwx2f^v^_Ii9a;C0?rXeU}h|R zVV|^?*0;dQJLWSv61=B;15}2^^AJ27of}Tmkv2~gq<H%a?}DJzsW$=1@Cbab_lIGd zN~vf}Kux(~4-eG7U(Y+EJhqJswBZ&5!)-R<&syVIFx_>hR0e%rc*rxkq3!B-&=W;% z-o9rq3THp|E8Hiubn-K8iw-H7h_}}cz}1DUlG}LG|5)TM%t}MGK3V(?G%U>RSyYaP zu6%cQLSC%31jbnb#+m3+P2hwW9$^DB$6ITU){;un0Pr}e0RN=yMj(ihYJ<*my`?XH z8;_Wuvhq2`MZoLm!;1O<Yy6kMAx$HI9VP*nFm%ESlYrpcI^kWDfV;pt;RBO!sGabn zPVkk{%OTKZAYb+zu&A_ksk9?WaK<F5Ka)O_B<u}IQdcG|ktCcqk)-38be|+)b3l>~ zU{bLp;h2RqrX_SfrXjdIT&;O#JLM^UGQL4=9fNOu<#@JzEPepW?9Rm#`_wn|y}9Q9 zy|5h(mzbJcT5D6Y?T<`Nt(pe46I+h=n__iTvgQt<4d@gAN;=vjsI9`Vim=+#Z{RRv zCrbKNuZG~)(Je+op}lvgbQuB&C6!~RZ8T@67RE=a544<!>jDt3k*@Kj=Tt#!RwIY^ zhYKLHk0W|Av?roHfa;T=yvaK4`0*DE0X_-`04q#eW>2DHf9T)wqgsPdWl`TW+(3_( z)~1AV9_Muk8l#iRC#W2hkz-5=?2K+vr-PScm9YV$yl}G?MIhMas)gt{7$jV#5Y>B_ zrbv`uZPmUcYa3{Sa>lMHoj=SaRazmNYHO%Cc^5)}EaMlDI0)4nON>x3Tb5{ZN`!*n zZy^OwDeNF$E9L8q!h_^%v3#BA3myTQ{~<ApszA&cAnG)>o<?p0G4TXmy*kZ&9LNv* zHQlnQ90#H99VJ5DTk)fw1+mJag@@MUJdU%slzk}0$JIv|k64y2KKuqLeldR3t-AOj zH90fd>f*e({sc=ORFg9e$NC9^gENIAiuTXbmZcnn76s^XH5I&P`KiGgjZlfY9MwIf zE)u6kle(?C7GE+#C4VqNy<OGzQW^XLCgbqic!VbULu3$|q0Pz6&<SLJkL`hHRAk#8 z-beM?o>$ldT9u8E4C_gLxoywu!m*C+d2KXM6WaqL2-~v{@_BT-1C&iI|G+#kw_|%C z8TA^TZ2(&Z8+2ay5SpXi*`O`Cp|$D`5Zz@G_G)Mi6O)ZWh{M?*aA1qJCox5w>3dC4 zO>WQ0FhvL-d9*P_-{>Lv15*^))jGLyih^5=DcXLG9<JL!L7Jks@!Lo@-L+u_#)aYP zI#LnSU-$<|4FKw{Uu0d0e;%OoWWgYfU5#`rn=A_kT*gpS(WFS3-qFXoY@`AT=%lae znFRx`F2wiyoe4W3vX$HMRwHWY21J$5{GG)85cVW{VZXE%*`;@O+N&rFrXe%XvtJfo zjX@5Ejuf@V;BT2JEd3dY@Z8z}1uDYx3HwT3lffccKa}DFwPk<bm&FnCAPWqTmE!NY z*BjE<i2??(K1qu9_$Zy2(bg9{0Dr|E7Wg+C_^)C{BBj=Wf-;RNK$lf}kyh`)t_GEg zp)jHT{NhN@*@hpSl^9I|UJ3=iyP1_dorV!~-OBiv@Vk4HYtl{<>r-|xGTF~g_b02e zANb{4UnVG97FyQV)W*<ocn+aay00FE)c8~KM9?3eMXc4|p$>5wBLjb%&<tGsaY8f5 zijY18kI7~M=3Arv=|2Nj9g5*_1(&MSwE%*tP4=6Jw4^Ua8upO+ayX)aIP4)yPLb&X z0@(E+FNP$<5uTkx2#YK%E^^60l?aXTl!P6$hpBSeL^m%iH3TOye8J6f?#2D^RxhTP z?FT}6)e!77)li9bv@pixG<EYP&0jZdHRHbzTp*IW>>vcod>BhH{P^x#4yi;;6nbZo zH+GIqM(@p63B7AUqulVbZhD`G@_cmOP+X#W1j0j8y_48LWJm#MAoV4j>c=1i;)!IT z_ZeRq3h_f-j*-Q;Lm{RLg;?46PhEZ^h1!Ec>_;!~ndwJ+l+jCdU6b~slkP`U`XOf+ zZN9l3wvOSBkt4{4rgy-f!U3}~@RuLUc*ggKL=H>|gtoX>^aP?@kog5206F}?8q7m@ zKsw7Gnv;n?`3j*q@>X;;NE$DYi2`ZTjERWM`qFJeHr+l4$9a809?505_osLTAv))Y zaF1%C1*RuD;uRRobySxtWdLUbm^r*@cl<6eE7vGdry99XI9RPrF)=5RSS5*WNtq!S zNq8{T3$=9|6IQmDU0DZObfzRZV#3z3l+OC}M-RSEC^ZZn<^Eh`7XL#0h)m?Gi#bw= zWyLDCurOa}qA?I*N!!+%=ebB{U+^2cAD*Dz`yyM1lJLsRS}ikGsw*9oPw+*Oet|Jb z;H2-Vq7pRF*9Ah*3id^xhP4Trf%4!RO;a)IhN2E3q!zq0ypW0dm~H<Py#>=02r0-S z{L3cA0FGTFQZQdgK~RQ0j^64b#gQO|K0HF}>GE#HK;&=G3gSin!T@Ek_ebNgY3ugw zjn{!YA_W+YLxXDX>p`u9kswg^Gf+-}YeXnVNb2U8hJ7845c#tj2oU~>RN72<Sr`_J zdZKZr0H&9|WRAN>QV$gId~vzZSev0wz%$wm$<0E0*$nJDk%Z6}GuhZ|+#Uf7mPl%D z$5i}1j(>+GrZcq@czl0ea~1Gh74(PZs-8k?_hGu4U&%qQqpp{OcwhxuceeT&a%eG3 zxi|j^O*ZOEwS-0XMS{1;S#mr?ckE>rIS~ooBEPwygjmE%fYMgh*)^1FSmd_^D4)q` z9Yj&;$NbuaqdK1m2spAQF@J%v4<TIbwXO#pNzbvAM-E;A)Q`9lGI$@OLgL^p7!e=5 z(IAZNL;MAW&EORv*)@2>NKE~B02|vOuTw@?h)R}&m(RZuP*0Ma!4vTCI>1rDW3HM+ zvBaJqi|M)cKASmyKPAwlUWkwFk27Hgt)=+FPLH)5VuN3RNW;Jx5c6?l(pSdUqr8KI zdw(#zIyT4#7&Pl)B&daehv2M$66>sg0d1Ru(5--$WX@i$UJ#quz@x<rVmIO+XptB$ zy%3u^r~X;V>sP4jP#;A%IYryDXyQR_;mMvTEw5324cbAyWU(3+hpxShBU-Q4vqKA! zM{K%lENUIl)wt@^6zDY&bVg1scOY|;*bb0siz0*!yFthn*Ag`FD1ck{=uh2!hAPr| zGn|IcX2Xd~#WU6QR4*RozyEG<JO`x_u*g^T4O#?Nv3_VN)<ZW};WStKQ`7z226G`K z)KfpX_ss>Dj+e5d4eA-RVU?O5-Jn62JD_hQ=)rE5D((l35{+RkYNHyJ4{~gf3C;qW z3@*0LVC6(I)Tyh06dLE+$m5sr&#mex;6aeX@#~!v-?gDu#-Tx7NPQcQzhOdcZ{!-% z%P%}R0slz<H7Lz^fq0`;UNpg*Kl(+JLHL8*V^Izpzi848neP{X9_k@FKcSowbhm^U zP6MWx8smEojl6ltWFly#)<W?BF|4kLElqsLM7##)A(J7)+1WWIq;sfJs||VM%n0+= zjS%MGAn~p%r8|7c1Sh7+JW?wn51AAY0JimIyd?CvrhXP&H95V^kfCjb!$tS%hfHRp zI65Q`nIPuOG1Qt7d5!{9!JPCqM8#pKjHO@^Js+)N12y7%figs*nki<&A-Rn`sj%tY zYW4jwf@G96w7P4L?#U}A#KfevVcPkOPe9ssUp0QHbsDs|oAZ2AFJM;~I{SE-K&ubF z-1)_L#RN+hdm}IQv?l}0+%SSaV9zyH>3PD0&X_!5@+Gz6ipw#K2~U{3k1Tn@gdUhp ze|f@W7|_@L!SyuB<P{PSIE)^O0S=D>uT<s>m)83c<_g8tTR;MF{WxO)tI~spLX+U! zdN7*^jLyA)hy?M1C)QPDSDr?ZNbY*jwT}N_7%(wU$k;yVM6@D~nBbzvVA>C4F*%>A zX)YYGT0KFtXkIQ^NRw+AE{y(}b8+(aNc`mz>D3yDlKpbYZu<d()N#<c0mbO<Bq3ie zS&laaDU%m{O&eE(R#QkCjjP&_RF9OXBgK-=SwV>MYzZX+ZzL?y7Pgk@8pN|rfmi{Z zV#k6n0pT<)F@(2a2)RV!$1<29s2vU7mdLv+VUfig#Gfj;f-Sq0#>gRnB9D}a;-E{c z-q32SX>B2nb!0kCAZUUC?<0fi4$ih5Hz$0-c8~z>IXOy1RKZ>IsWILDw0WhZ1O$n{ zQt}qiaHIO>V0`QAA;P+bVfR8YFl;$#8LF(n&mVIu9F7@6`{}F(-bEjZDH5Sk<q}FB ztM@`_b@0Ur>{?Xbc>bimr*Cr%$l;c1-_-quMesPu!4O<)7n<_suN53HmcM|htxpp2 zpR`@hPniDzzQB6cQ=pw@LDAZpe?|!k_cYQtzNuKjrAC@*!Czo4T0wHJOWU1-s!6P1 zRE<EZC^}oPl!;=4#g5*d(8_4tO07DDh(h``f^vbx>S=%K<6RoxS%8$J(GsO#dgNsi zN}hfL&)N>fM%>TUxVt28Y*S#K0vL>;kvxdpaNQY~$ek&j;rg?8R3x+}SENS(h7~bw z8@g%M7h?RZl6Ij&oha5*-~Wb1fQZC$h(03Clk}SN1jK8}L6oSk;pVyCBsmOV==D7; zkP*clzs?G;>}(fs@9D`0jdtRVH15L2qh&?$jg7Z1+8kVl`rwK>B-YV&xP)lRK|!7Y z8HLw$=)lS<IfGT%8?{{c$3`yHU_ltt7S5Y#W)^uf{NW+UjL#_;7!;>ne&clFe9EnJ zrs3W7Fr=xup*7esDxeNXjAivTaZ{_oN3qXc8+P^~liL6x3Gb{>FN@ug&6Mv3X^M?v zM}Y9N_>EJH(Z%GBKS=iJg~ZNvhlrald27^6zyke9$Js7AR^uBdP7ECn7U&=}&Sa2| z2j-(yK69aIS*1n`6hI)|xWO!ezw#>Z&HbGcRE(-VECd|e%DbeXrJk-KB3XC{N;*WX z!UkOl{8Cc&QZxmKfFPVSY8|NB1qmo434@u?6A4k1(1!_q^kF!5KG|KE_kqtEH42Vo z>`k{&6#qjqa+&e6C*w8A=)w#fPM8-P$A3Vy_%5rB;Qa5B4qBbsDz+nz_v6XStx!u) z4m9T6AY~x`Y*6Lm@y2_2Me?d^)HF5$0#~7YQ@;Dv-~*TMPM3r}Dt_Rm>mPAoY;XNC z+grcTc<Vi3NfW$vMC3Hyx)K~X>I~MrRjte8_+jf*ACh%@>s?TEx8AxaA;(*Po?K_V zb>~DZZVl&uOCx-VUIb?!rnD$0M;nh`o+Xnff^aJU$o!|CJ0WY&omK^%)1G^|x*8@G z4wdL!@!apfN_*~yK|22no_of@)I##+kzw-7zX6lyAkAgp&Sx4ucaEv{+&d<C?tX2- zAh9s`Ru6o6*qokwxynUeQqR2$GrXQV9d_~Dm(p`T<{}Jfg6IC0?YVyld9>-@$aAlz z143;fo_o1^bpTb&DDX|Cn13W2M`$M)5RMRCc6jdj9F#xrxw96WpxZ^V<b^hut9gL% zs($v-`0VC|HkSwT%~~?sb95Fosf7_%s~=!nY=?bG6An9FZm+|B20HU+9d<GDjUD!m z8??jz^k>E-x}%An4P290kaBgs*s3{e*bBGAehh`%vx2mFO%ota1_;|>hX%JD_HtE= zkuwfE)5oC=+hNz7iOu2X5*+qwVkFi=>y1|ffTA6C>JIwgsujxYR$;Idre`9k;;=uM zEB(>wVlO(PKmS9Aov+xtQEd%W9fuu#)-%k(kcIz-!@ii35E@k>4ts^6w7T+q_RPzx z6^$MCv+L={9s{blrQGGPUkPi_w8LJm&SQR}!#-U*?B(is=HHv(u)Dm+H&+vdKku-+ z9M{`WH3|1d)ys6_Ji2e7v~qhRb>^EIci3-3m8Knbmw2~H-e|cx8xa1$VNVtI6E>T( zDk<*eYLoagw&cNKe@S<Ss=+AtyHM9xwi}22Wx#0cu)A11J9*nPRG}D9aoAtUArCj{ zu<u&g1p1u;!sW1E12A;h*9qhXbrL$$*z+i-$>F;cC+PLOg(wU0seq}eVBPsdg^pxs z)@&hyyjhCV&K2TkYUfn$&-d}`0M5?l7!?ZiuYF282=fM;z{xTAgPDe;r=vf<;C7gQ zyoZOqgtS1<oD5&-5+v|+0Tw`{PUM0te`tC&s+)b?DnTd!++>5&DuDs>ic*F)s1=H~ zUM?+p^NV2n*i*F?CdaxKU*3Gi!j}BcnSV<{KH^$1KdS!0{8W6EWS-#*>ZS0U0)Im^ z5Xu?NjmW&vk9yWK3YZ9iL-pvb059kZ!h}bG=CZCwBO4ZKt5*S5>?ag!s#!PnKD&W2 z!e$C70mGTyUz8D_HVw}qp#Z)_E$0x1<*_h(1J)Q$QN`L*fALF>!9P(4ZvzGza?-5x z;GS@;`Bnhseo^opke3NtF^-b(AgIfPPwj+ZLas_NT;ggyeW@JWp>0&3!G3FZD@x4% ztsvKEg*zGx_7&C<_!{kBzMwR6x5hhgK|OG_>KL?YO~4l(*26&HX^oJ~eRD%GJgkG$ zjjwD2HiU0T-V+rN4yhH^cKr<>Hcj`)tQMNRu^|EuogtJ{>dbF<k>^$QVp@F0Ys+*P zJ%`u^ZxjE+eti*406o)3oE!J%(&19}MwI2dR(vfO3=$vJ3e|vxUH7OKRWzhB-UMv0 z90bt_8K&DrOG~L1|E)s(h>J6Z<2G?H9F98&C3pAC3;8Xy+F`lH<XtRS;e{6myK;3! zBkX{xS+SD#^x&PfqBZ2=S6|uZ34%)r0`tyRm&3kVJSCQ_TZcF5)?rS!l($=>0OsH6 z)>hz;Zt>w7r&}}Bl=HkqXSd`LP<PPvk)P{s1?v!IAg<2t{+b~O!a4};UA%DZUVHR% z@2}c|SE&N{5!QNq$@b$yvkke>t3Eg4<<%sXc&0iYwe@(Z%g!YO)T^%u5R2>3v<t!X zRzLkG0J?O+6UhNqsHO0w%DzH9U)j;9XkJcSXr;!XxI}Xpp!mvoEZf_;Z}iaCsZv0* zmUC!v_#LZi?3PPd+Bb#80D5#`TYexsdyBW_7M_*ML6XVtc8hNUJ5?(m>c*~)?XO!S zFUI~Ne@nn0?ivycVIIw+4-!)1?p%dh0HudlS%3&7tq^NT>(sBkgy5<OtxyTf!f$-N z$G%z1=wxDXduoe2nB55lvqVkEEA3oW$nA|(ZFfggUqs~10G^LQIrR`V?r!eS%98*t z)4Lx9BQz^R&wO0nd*f3~OR+<}5=XewkjulXFu!;?(N`+R81aarAK2wH4}TZnZ@-2j z!1PnTItpAC46zQ~h7da_gOP2Ki*U>MGZ!o7__25g)-x(WEP@YXk7#AALj2{<_Dvm% zgK#J!oxX@gc&5@@q#XAI>>?Q~G64zRA`K}{k#;QdBNDtt*5in#4dr`Ch4mQ{yhV=2 z(P_I#4U6oL1aFZ8r3lp4^UQCJFZxhjvoKn;plu;1O!$t2%Y@%e!fzB$Cai;{Vu=O} zm?R+Fza-S!Fp9B|!V)9wguT#RCZyR3esqorvuqfbqAOqqY+C+wq1fYcjD_k46m!F; zy}k@$IyCA_*Ae?_f+c3?AP4-@-oG5jzj41tl8ldsR^;S<E3Mg>1*ysH4*jqXj-`8P z^Q%x8$27w5M=a7iFFd9rY%)UBBe)kTb5#qApkS795GgJ(;>aq})$^zkC|%ep(C{%( zATKugk~4g$iCXmoGem|)d4kRhZBq}g)RXZ;YiOD&=hZApIS(KG;?mYF{N3w)!Ev%s zrT1m!roc>bpG=&1lx3l@D1=kOw93Mp&;nWpG^bv54n_|T%L}6Wpcmv{+|~<=j2W4* zzQs5N!bhR^l|)gyhyB=^(FQcu8eng%1>sFDts^Q&>kit~3Bd%zCgWxaPP)pr({3pw zzRq+CF+4_}XslPL2*qhMz2LX1?CI?Vx+D>sWgaUy2<h70R7cV+!I|H@&@NwDy9C+V zp(T_SM%@p?YJHD{gr4V0H?$sfdfvCYtLJkH*mJ`a4~mQ7;s(9(YTx<N=Zv7OP^D4$ z^vW!PVH=Tc?C5!blt;hj3w;1`m}JYOMu(UTPtTVmSp;v>krc$iJ|w*Z`E8*th4f-A zp#}QK<BxG(V1gQop>y*BsmKhWq98(%37?j}1ZV!bZ_EqrL|`-F!Jzb(x!pG!p7E8v zmZ1MCwTk3?N@c)5vF<}c0(F0+=aRrz>&|vlH<O(-)a}ahk;?Xx<R)^4q}UJFrtu4r zoAKi%vQRgLIDJbs6#4>tEj$$-s?jtSFy?3kYr~_|usk#-Mm(+6LT%BE%1OM3#!OJZ zWG2#>8A4;}f~N6;kA=p*;KSS5Vo*A)2@KI8>C1SW#H+V@aWJ^>`Uw=Qbq2l?i2Hza zu`%n0&T<nsRXVBl+2>T%k;+Y?AKb)EkwP|cTks1nA)#0j;<jhc?<J(r7m$5TRsmqh z%6cHHhT<VBalu24PeV<CZ#w{xho($WPl7cX^DQ%krh>Vq>CGP*nqIR_Xe#}*X$p0) zD`Ay;105i~1bH{)#=?qDBZA*4-mg}CBU$7|BzVW9#8u=R7P$!t3Bw{*HG$`U?&=;E zB}CH0k_AW@mfD12StBX-u&m%$NCKlK8J08>Zxao?Yghz;8J0Q$rlZ;EZ8ck?5Er?1 zp;DlFF)|r|<rx_!sJ*~fjYozVGBSd^9+}TSG$XSS@yqGevSHWAFf5UmtndyvGBcHe zv{`-el|a+yq-Tv;{fRCvnpQ@IK=rmNu>kBpwNE!uhC;7oqIYil#BcRG2C^|7m?3l! z95fx4EHavPvoE+0Nl`i{3m8J>@A3slLW6@gexe+1F$I4|GVphK_Am?fs1bceyV!04 zgvT0c*iIkVpCTP?Oq;vUbkSzcY-vdITb;NGZuzg4T$|Bm@+&04ojr_3&nO}>Y1F+U z!oS7kUjP_Js}f)l4JGce(R2|BbvZ3-=#_jB%)?_$P)}h%8`G8<LfaVxtZ92ot>Lky zn@PZ+bkE_j;3_6J$YUhV)WXaLe0SIDN+dX6v4$pa9mkO=@BCO-{Y(C(Is|O&DelDk z>PgP577+DLB0CLMI}9IIV63hHt5;$w4Bi0nE&%w-4o}cM`yd4pP^Z?xY+KtY0SF9y zo~~c*ATTL80$D`hC2jFbSXw;DYs8UqJjkBC&XMLHO%T9x5kP$c{Ayyrl`CR^W4l~S z8tq`PePL1(2nOk>%456T2@cmV&~L1FaRu$7GboGo>JtJ#LIbzB76JIMATb;;VLMq) zI}fm(#0hYTnh*X#(E=2;K7)xyO$*AQ5hUCCg692`L#j}>Ye=-l)_n%jX8r5JX_GU0 zzb{CNQ<cilkZ6N=+GW1Qb$V~tY8^0dB?p7Jt>RC_6((>GvuNV^YoYeLC@lw&xq%w% zjppp(vXu}3oWC0Yw*vr&YYOU{;fmc%FxPoex8)AtcFa#ofv7rNqi)L~iq^4c6R5Y) zs23g#p5Tq(uBTBaAZiQJIfdMeU+<1V>4r=M;*+O4h5=pm5Zl869tsWDEv5m2d94Ex zHxO7>eGf;1vhU}e*!)0va7S$ZH;RiAm9>hu!95Zb<%iSBTJa+l2cQSO-~-6i(esAm zRpOG&Nrfj9#qUToARt%GL~>CXJDeGQG>*g!MoC#OFBD@!U3d;-sxW>Eu3-b=_3Bwu zAIOseGo|U)tPGmyx_qG+b=g4%{K#}EDX;w;0r3~@F%xFX8pJQ>3`*4KuB>@UhptxL zBDM}#Y*8<tO8ReAo#=!?T*u(I@i+_%gc|a~C+kHdpA@u*VZCbCiNi1fD>6k@{)oiX zsZ#}LV0SyT@{qFGt;xaU@Kyl9FxV%a?)`wnFq$GB8Hqce4eB4*Um;QV!CZJ)%NRoL z;LRSBwinVa!QH9iH1#spZ+S^}@7Y|3fKrSW9-wX;1CK4#FW-6(1E4+u+aTRnb}zoz zt1PB=2f_|>tygD*Ea(l6KHXS{5vo%6cSAxLqctGKAHE1XByPS6M1~e%G-iUK(U}u5 zuz8`e`RLG0GZJsj#Ykkihp-r-Q?Q$3!Lx{gyYPw%dh6k?#XzAkcOeoG)hfCL?z+as zU5I;(Zm>Q$joeki4iMiscQvRnx~|P#?)U|6)DSUBlrkjhe4uAd<d?%;_8@&7MV}JY z^=x%0-Cn(3GcaAaE7sdp-=@ja$?Mmu<#h3MFAk9U8`b@Ez`&i0@$2QzyEdc<;dV%b zgqLTT@qdfI^)k*?9N(hr$pehpq2qM~1R&*}FIhII{%A;_VzYN0qv|p7Ow49u_@V?| zV$Mh5h}PGg7iG_;N>K|4$Ft@5?)$X=17HBXG!~1AO*3mKveabFm2wq*oXB>!<=L`= z#tmK72B_$zGrC6D(W3u>_ShExw3p5#7pJ%-$=Mzih#=p_AF(dwS%5#9*adfxgpA)Y z=1uCmbV0*UAh>;?(GdGH84jjKqXRQ*BuJk@Bg2J;<c1@hptvu*3PhkWTBD&G5HIVY ze-e$sGLrRb+PfUA8V+~}iXo@-x8(S?{GRuQj3fWdr_O+`ybUYX?KQ5uvV>%*_)<%u zN;R&V$iFpmiQnMb!iB5khGluijjKRJEARavB-0HDuHVlgt_q-X!>4L)+CjA)kN&bz zZ9fU$`lSH6k}ytDx<u!r7_?#sv%T6Mu^R@pcQ-19dFJmogk)gMu3JwQc5?ZnW6(Nd z{4vBgIll=DQOy0`*=h<@WaAirk80trQa2*gx({Do#{5Ox7VK2#G5<S!dGq%cT4Qzf zH0Ez3G$;r2KKw+<6gqwIUQ+!~u6~6Yg3MW8gM_gnRQ9su6x8#Taks|X?mVQRQ!~^o z)RzaYVlX<a>|&%msXQa0@;$n8wVH^^o)~zpkxeDWBi*e^47@tkhn3th@LU7()w@Z% zIa3`V-IRbc{X2>pR5eH<>+S=}QH}W{ZG0GJfA>ujj`9Z=6&{uwie^pex=&V*uC0pp z!=Apsd+qoi8OSL*VqS&oKU)W0ln>J^mhX0i(ZNzPP5Djuv-2W~OmSYge_9|sA;0so zK=<e^?Q=slQ+#EM3VkKp_bY1E@PQvk^t#uKkA;@{TP_ZSCgj75X~65up<n!w{g2J< zK6m`SP>KyD-S;bs1(y}31Zw(Y6^PE!&@7Zl^{0Os2n`*UoBoqO{fj_oP*z@OLO~$Z ze>DD2!>L_=s1{yKiaB~4-=A`@?oAt~v7Y=|GsfB<+){+dKNHZYt*SpTg_AMDQusqg z;^K<}p<RLSooVV+B;`i(TQa0^&s<;5(mc=&!!R%{FWfJ`^On5sOF0aSrW{zd48!mn zhhd?=VQy~sr5J{v0xfIv;Hmhb!7+lNCH}}EJ#)K%$YB`NP|}0Lu!Y0W&kV!BtU#pe ze*X0BfzZHV{`7_Z^j(3_ty%DP3i3i1kH-ILxft9~ErwvkJYhL^PbTA0VCl(&Fk1<^ zBkkPd!BCC**@t<Nc5R_>ryQP@u?1&=+M^r(&<B}E6dmku_+ZN6_$>RXXj3c&iLusM z<*Pd{$|~D}5Y$Wk!DYU(Qt**YmmKov(pwHEVGakV)RG<h6}8SLgU<DXGT-+NVMDkv zX}W?miw$XdgETpsMIGAso1#qsw88%vO%H9dhh|^w@MZyKbcQ$g#h-hKM7{WO9P20X z=N^Lf=9l7F|FyYdP4(MI3VH!;TiQD{M``zR^!+c!sr&{o-$Qs~#S3w)J2zLXwP_X& z3ePM&0fCn$q!u1d3PWFqTZH!ZhX<wjOXs%nhX$pLm<N?O!kP-NpfN|qW;z^|)+{;7 zv32LVa7}NPxO((?#q)7K%6PpwbH793RnIxx(4$#W*uk|kaD_+kDBd0V-|7(z#0sAA z2z+3sJw$)bcqWeZHO*CjCitG;{Egf+u_Yfa@#Spe?#A9DtTWJ+&YTK~9fovg4~FNx zQ?J!lqY6d`Q<#?7CB07x_;Pmf4fG&x)jkYgQ>`Y*AQt{Y;(7A)S-7y{pPU+@;O^%} z`vz+Ib~Il3;EvAh2y4*x^eDF@=0}Ac3j)|RgZoJY_?pbN_@z+xDmQZIfNrf?<V<N5 zz?&G+K=)s6$<3b97Lzti6mv2b<&;JHmVZ#xE;qCyc6|1f+}15IP0U<cl$t$daI2PO z%Zg%wNZ-~iV|(YeT#;SAG!U88GN)`&(cjT?R4IH>&jQej>iU1Z6?oJ3yy)Pk9Zhy> zGuLF-KIPzgXEVq3-6{vy-pw3Wp9|NMnkB9tf1v;odW^OY9KpwU_J|dg7oUh@{Vo*V z9)k7e$~e|1?m1ZZcCh{$`fU%Pb@}6QT7Lmew})W83}GsaG#<F;aL7>()@u*lV|2(h zcoM<Tx^&Oskm^U`SPwm<8PnRcmb?R76|w?53wqo3YMnL6mB=<DF$D#%q>kN!;G%%9 z?_&J;$|~T>c8->GAM1|<__|*$cM<M%ulm>Cf=z{*Df=LV`vK=Ti~dW-ZwS@-TP|$0 z=-&p5{!z2&pP6*gzs-U1MgL9y^c7g>H;ev*;L;Alis~P%`0wZRXcE-t9-@5)V+LWy z;cpM^F<3tVR1Mb89@vZ}!n;bTrpK}7b+0{yL(X)t{@vG{v3BNU#nYU*!)49iAFums zoG+e-5^27C;ZXQ!plt6CjA;H89{XUN!oTmoXYla5IICw<cv7>Zu)_^L7p{|=C9dB2 zFPsZwJ$?Y@%~#$$Sid+mj`fp!4%VCRk7IpwbH>`^yPgZAvEo0o16KSG<Qafvat0tX zwdeq>NlrPC2LP7g008#>KQnv(eQV($n)O=`tY0F=51t33l;{V4ifqG+ujACy9>R;q zI9RuA&RBa!;yRp*ml??!@Oe2Bp4<U;Zceh?)9l=-$#Q*mZm(pyKZQ-Z?<ULr#Lm6W z<a&L^H<4}lW8$9UpYOske1r8CxQ}}XSNk2TXYM&zKZso)L+eZT9IRKC$FWX<V%$SG z<Rk~{ci;gxTdXh2_vp5pa3g>RN^wB*U@=E}u?5R2EBwK)3ftjKU(eJ0kv?2#nJecS zT|1G^noSzO7*6|0G@b^7R~^j)jk9b6Xw7liMzsE)KgaTJOXnO5-kj~=4}HRyj>34* zb7+b@lr?#UKa!_Z-!?b~n~t-klW~bBZw;=WAabTU9jQn{5nMP3w{F=&o&-h-IYoR& z1<pGki>nmKmxLRbaB}b~y!VJP=pY9hJx6vw0U)I+04P@L$@rIKOkhS-4i3j*9tN06 zt}-ZfJ_?f`E(VU`l{nsfcF>u5oYE}4c?Z|&We%=qG;>_}_=P>AJF!{f>X~o!0J=un zm;c_3b)9Q3{@%MC3ioRM6kc&xoWi&5Y|a$+@Wt^C)`#smSdS@*)B4&Sdkn4LDvo2F zhKnA}*5B}W8!dsf%(Gs;Gue#yYor>z@;EF_v+a|29@fdhdL?Ym9)k6)ljF4RvFBhN zy(5nGap=GvLhJn;tkbvdF<1|t6sL9ZmOTdRCvJ~pUG(c7gSEOXj`fSsk$VVVpXp%T zVb8((j)`$v7eaOKA+%mNA&&JHxZisS)~OEG^KRW^u)Y+i8b72Gf7&NdoHdLd&36sM z>zh;*#e1?>bEm)iT>FYb!Mn+G?MI+r&Hr4xcP!fIKJm8l70r4qoHdjSZULDi?e1;! zzxRI2*zs`*X}|zATfOR;N4<TsjLXJW|Jg32moLWvn9+7Un==KxSidzcj`iE%(q=nu zUaVU<Sl_VcV152gaa!L6aoIy?J#B0p>n?i^)~j!fWBob=a}S|)nuGNjdk)s)$HZx! zgAO!bT00i`{ToE{|MYvy|4lbeo&MEdFa4Xl^M7go8m^Q6o$|k{f1X`{qtHd;PdtV{ zo3B)Pu)bz=9P5{$7Md;A9zXE)Yr##7%CiN3B%E9NtDQRr9ZJY8vUAIm<qoxTrzFem zZs+cecvcCJkF;~^lhytG8iVr>$#U!MT(vd{<hge4{A9U*vvUK<AP4Q-za*=BEpi#Z z=yYDd#+ilf=Js_vrrWo#J+$v;YMjuh##f`7s?plizzGOX8!t3jV<~cEe4km9gc@(y zxufw%!YE8f;*?YzO6<I)<hP!P=?PFioJ9;SDr#Ty+hqK`3H|Yhek$4*9sg~TWXeHB zxoNI4K}6pE+*c6T3(!ahHiIK1cvSaDSWM&>b>&%s<IKm&{P3HPBlvNX`Dn+FhxA9` zKIS9|()3?eHF6x-LudtpQTr6i0ZzHYuO=R*IxAq0m)M-()W|_FFC1Mtjtzc)l?PBe z+#BjSHaBuhOKbseLO{8Ah$t1HVU2h9Icdg@KPK%!Tj)1tN;k9*;2u#3@lSaTzi-DB zzUY!#*q0aYqlNqX!~SjlPzo>Tr}!iNQ+Vqge+=E`509wBMIt{cm#*37Pp`=fXD~!w z_BYs@4t23+V~BD?^8%;x$&R`Hx!YU6(~_fxOHaX<_{TpHXpa9K>+k-d-`D47;84pT ztA#75yA}k(T~QIS9T}Q69nW(h4%^S_8;B?ZSO?}dv<{T6+m_ez$3g^VX&ngdJs@(& z??7`nuw%qb98$r_lvh#QKR4F;{7B!PEd!C^3lJm`&m~Kw<(-h6yili(fsoY6sl~PX z1!$RXIh4+C?+VN3e@A0VRF{GzbGNlZ_!p}OQvH!$?<{WFLOl#%Cb|$t<=o-mKM8pN z3EZpKuQ30q8H;eb_Ap-cKa8hqYlNHSbZx8hrJbW?i%_M;W=Rzgtuv2z#l9*$goD5K zN_55C9z)T2F0Q#KUlo$SL+<jg@3wquLixLPTfPnkrSn(h2*?4Vv$8Ngc%mvZ9l_41 zWxnu-R(P>`##^iIia)Le3F!P)$+^%f#e}(oV|9#r2sL4a^AL;YKrT6T19=1;+@o8K zX5*Z1s-NnuKD1HwE!17?P2=iX8BEc57KxN!XOK=J<$&Un@+Qljj2tK4#Sp9vLgnCq z6&|=i$hm$HxPGaHXLMdhg6<pk@1(R{3>iDG4WhuMgpc$`#_yzHv|fpaWI{)EwB|y5 z0;le+#j2GfRus9w`-WG~g;?eK`XCM^qEYTrZ+>N@>VVwtYYRK^HS=^_^os)W_lV|J z*e2XLbf&-bgEkCt6zKj@(f1JRosgTfHpHt<xNQh14QnH)g_h=~uPy9=qC2x8rlBqf zmDvUl;kC)_{&mq0{?fHO{gL4<(T(0()E-z(QA51&%ToqK`p&^n_M?m;tl;qM5&Ajx zxQqesrHB-|6k6v4>vSz*L;nR4>k1$ww;$))<|;srVu0qZgD7qtVf93&+Pumskq+^T z-g&N;)f)fS`an&Tl<}7~?8@~GstL4=2DU<VEd;8!?+hOh^2y(&H9P$cFe}mG4d+J= zxf|LoE|NKPc0D3Ca3oXgGlq>tGLTUInBA54hqlp@ns6!P&W6Ht6}w!E%&`!POf1xA zQ7GndL`3u^H6?n<p}qbeL))PqpnXQWiE{9gG1%%8*clelMs~jhBfE`uh-L-)O9Z>E zRu|S#sC<td)N**Y)-u{C7n=_;$~{I%OGRRo$7{2w#kITsNP=cd<k%75pfP{6b%54r zT{T2aRuDRwMkD9hk-?6nPrapZKRg8CkH-c>pu~7=u!qqnuhipY<$u}ME{9P6k8JIi zON~}YW@{$^`oCdo&qML1Y;DDt{~cR9um+0YQ~<Lh`TgJXV{St$|0CL7Q@0!19w`L* z(|*jlFPf%pSLFRS{Ft8?fVNA>wT_e|QzKdG)lapYpG8+--X;1Y-DoJ842X0erk*!> zP3bC;kAF+5ZdhXQ6C~sH=c-;%D`F2?i#<3M{ZQY2?lRCZWXQ?zRvP=FP4F8$?g~Bc zTZZZ0Bx<?o$ca;i>)_%)|7Vu`T%hnDTk=hx{C~9MHJ|;@EO}%enCyB0Y0{G4j7)Wk ztHgiNl53_h|9a*@h{F6?fREzs45aVO3x0cNzrfs`h}yiyzjZ~RW`Xt`w$XD?c`d&S zY+W8Gt=WdBA>gIpF^pZR-Es^HlHdq!3p9KL2*uwGigf)^zXIWQbmBJQBG`jWG|Trr zah{$r>|<oja83sk3_d5-AI@v<gcsLMrG6-d?Bn%EUxCx~NBhHjb-JoGLY7BU{UP9e zOBz@^6K-+#$Px2AXXuyX4E+k#1uexs)Mw~zNS_q6PIiWVjoO=NVG42(I_bzAZ8T&E zVf**<vlkyUTu|VMl!>%z%L)6M7n&akAxQP-(&HPWd^}`3nE4NS3>to|4qYVWqHvM; zrcWABEjkUIZb0u%r~Q#h861k|01^bq)C7n-m>wc501;}{=_na{2lEPGU_)L!5=1!5 zQ#cKU>r_h?2A$h|Bu&muWxWtQn0c`J_39jHb*uUjzf_BN;@L3|yXkS4`91LN@5NjF zzKs3bYn&@t1Ln-es+Zh$7bb1_17vbeRA^dmgO-K2?Y6!Gv0OA#59qeqxY~+LN>R5n zIaDtVuF(yym74LcveaPY#1P28Mm=8qn>>w)&cBXCqVN-bjZVh;zyba+-&@Bk^$SNd zto?tIo`ffXfvx6~jE9>)b3zNVLrbzlpKAW(TOjHZI7pg5bE3Yqod3hzyTI90y>a8` z7{d^adnh&TLt;kM$fa=^&M?E|5{2ld=|aLpDF!og9H(^Qr>Jz7N-Cr>8rK;_lT>s; zCGBY>sa(_izu#xAz0W>p_A$fzdO!dDIs4h`S<kbcXRT*F>$>;ZyIOP$eB#6xnGY`s zm^6x?>u94mb3NYfF-QTf)YTquA2i?YXvWreM8*t<=eB@|GYDuAJ!ah=+hf+`7CpS< zTb<2ow}>N7!n~qrt!lbUbbF`^VGe(PDKPqgneI6lxwG|q9M@St-WWIOW)%e)h(1)( zo=>V24kjgkoZeKk<kxkUPu~Aio-p}S8bk7D@}jefTrtctJieF_rB<kaU|s>*5vx+V zV{N!$H%zCd2!+FfCLWY0bAW;D#p9B_pPL=|owA43NW`7BBR`05L>OH*ihJejYP?}6 zoTEANkr>D$y0SP=UiSp7?cpyQ<E(d02K7<=XH<bPd<R?u9*9pW;6*~Jt2}eFqigIo z;=n9D7xF6g;fws!Qj7UdUexfyQQ(oXntjRV7Doj7+bAPR36W0YErg|0+-EFCkR8H) zo!+eL<hX#diB9c@7b?D_|K5Nc1e}9;SngI!{Ik_(|LsywF=rW=r9Q{3530{;H=#c9 z*SE+xRIG07QlDY#k$-(FFy?)Rdc+^??e*9mvK*TDZX+Gctj7t+qprsmmO5RJFMubg z9xGZLsvaLzLZlvlMp)P5ZUkA6bxql3zcGv6X!aZSn)F^^O3501Qfag*mANS!mo<wI zH#-@+t<-9l*~!FQ;WOtDvj^+hNp;j&V3?5ENfbnuZFVvj^Ssd6NgO0Q&Q5M8GiN8Q zMWr=l>)FW*AhRCRSRjnu`zMCX5$+lilv880Ofn<)+oEmrk$yt0x?ZTEy4q@82gn3n z6GC;JMj>ogG2BYm1e-2)Ex&Qfr{^PSO5qK`3dyw*Txvd21$wmGHq=?T71yA7hc`2< z-(FyfgGVZjrTMJ`SBT$kPw^(LmLW*ZT=+e#<Hn2m;*&9F>9Y9EbK{d7;WK@A$3XaQ zM|4@KHwM*Giua(A0+F+mVpF`66ZGsRaTY$V75*!CQ$Iv^mTzp%Lmj=%x(Up)M?sIH zCqGMOdh#8Tfl%+-1u}~_lf{E~)yW9)<avXF@@>3=1Sn1&TXAfjoGsL<CnQm*u5_)d zzSgyLLWr&wA-b+rx|Rk-M;S4U)}B05DSRwgAwBujX48|qL67$2!8!~7!!^j0lP6i- z@BfqdlKy)Ga$q{IbDtZ^5#qOabs?rrdbSOp{lh5QB))hypFM0;`$U*bhi%Xw4$BGk zGXt!OPx0PPFGYuY_GKU^)cHnpXf-F)rqsL}97o#%;}mCX7;P({wq)G%MSfx_)}w74 z1d^ui<|1p)S{!P$jb=HuLu4SVEBhV<>Dx<ndTZ7+HcVY#pm>M6hNe>LI)o!=Hf1gP z)$F*un)RNonh)wvOB(mAk=izAvu)B)+bv<z`KTa0h?q5<*S%GFcJE;)R}g~9Rl){T zcTVu+YIi@!>fUW!1ZGzECCIXBXTHd7mTFz!iC_w<?>8+DRo_=ADKfjtMp)PP!w9mz zKi28Z`u1Y;5?b}DOuWpTcU@pg$(nysX*4TeY*03?U=Qf3w|$fclvDHMvwDEs*Nor7 zkLca`agY<V><cHj5>5~gZ_rNA1I-;Pk_3Jc^;O&;4etec;stHNQ?y2nNv3n{Om!TS zb{mmo=9p9fKfztkkiDNokXesMsTX6?^f4jhgjbTu)*SO_M3d1MIo%d*8<YObCAI1u zj=FY%DC3{jRVP$e1DjCldPSr~)(MJ^GUhN^cR@#$!oOfvTj4k+jRHl@u9l6q#-t61 zWELWjg`ly=Yq%)X$!{+(#la($#?t)Ofs4I1*7ULol(Cxy9r!6L<gBatV`hK#@rS}| zzUyRaAGqq}sOviLE$yo4rz+4;(of-|Zb1wAUGUER#xrYScYHpM3qVs;JBV^v02;<! zU}hgR9@%u-<B4^XUSf|Ys9!k?kArO$w`E(Ul=95|AEr5tPmjL0l5d6?bi|01JX$Hp zYp%P^EBg!C6Ym<dC;p9^pT?YJ9{ZnZ{LZVy_~wRox!y2-6Bz$Tn9l4cW{r<S1;8Y% z0LLBj9jJocMs?^d!VM!<fhq94WXCGlZyew#g(^6LL}FK8<ZG5rJxbKqG;3Bc!{Sh* z#7QMYMu`z%)}zEg1nGs(;2PMVqn5Mvu#45Wc{a0IV{C<$Vm7lI+~$GV8pCXrVL#Js zf!S1;9VmS15QFP?n4A@D3?5u3L!N`<?lzWjCI_p1jJ#^A-EXPXRyzP5DXX~ym1=P) zt8Gw1#A+=dNL%f41ZlNfOxflLnjf~0y1*2NcBC{0wTiNFS#8DKc2xI|-csY_*(%*? zE7d=cN;h5m>z=6erl|BYs4ZRT7^^UaK4uK0*f5P{yEK*qAEDaUtI^bym<5RrE4=;2 zhh*kxI$czSj;2RJX3f1ytr$()-4!yL4h_zsu?`84@piUo+i3cVP^;E))HPG<O3=FU zM}_G6qgRkMj6q6Qeo%Cj(S^}^G<{Vmd`(!a!f`aM3yK;|M?#Nw)C@$jxGQlD9!>X$ z_0$VYaqvN<u{2M0;F3Oy&%CKUHm>=sJ1n_e^Bq?M=GlDqu-U&4U(T9NG8bu$dcbG7 z^t(IBs-+&@+u^gE2aZovKI?o3P%ZshL3!xX@3ZcX-Bp26%+Uqi)kUk#n({?{YH8N} zRXa!w>aU)+I8=XCljYT}@({w>4aOiyH&~|ATWf(_7x|s$R2P`y-~~!!X<iV*WsX_W z!<)S@Oc*FtVE$m~^jH1-RZbn+7vPdPX&|2VPWn@35}$CevKFIAO1W0Lz`f|i0F%^* zIlBn%F&|PxU(DHN7sd-qp)xQFc&jVi4*gf;Pw*7oRl?m$x#PZW1zauUj{B{U<S;T~ z{s(5d+G1o+?B<IcWGU00wiP^5GIM0S+Tu{2_NEddBV#lKX-_MUAU&;zDch`*#r8T8 zt^bcGC2Q|Vm6y^y&4H`r?0vo(=+0Kf$Ba*wNEMrN?fmOe#h0LpKST|gqoLz`{X3bj zA9x>?TM#^7&w>nx$~BA+!OY6tfQ+dg-xoR2(xYql5SW5$caX)QYImEGBDEV2NxF8M zA;{Vtg=<h9E(lw@7ntHuyGmnewd=qYX5RC`ds2I6tK$ER-LDIiIX(HMvu?$2qn^s# zicez%3T?#;A<3bl_ZvGnT%n@BMfRjFe34IB%5*)K*EDNYFxui!_58CEBK4dMW?j!+ z5M(`1F=d-=b#B;tzQ7cRdR7`st7iu;hgn1LPVu^TORe$4#t_x0&FR8l9Z}=G(5Sni z!ps`?-;3!2{#tU-7z2?h{@XEg_?3?lji3hq<U~$@2QYk=+Z=D96UaCAErV|?X8i=F zC{v+xLR!!Yznd(S-Y4_5U@pQl!JCUN0^l?L{~(&PqTg{vPDciEYCdT6rEnZKvY97L zk82OZgGOdg5xj4)NQ9KWZ($66h1#s0hOO7>-tSN3z6`zJ!FNjbelsD%p-~vdM_^{7 z*o4ek`Q}q(k#E_w!SF^QIk|<kUj^cfZy4}J_U>fMmOOqXt%H(jeI|Ja;UfGkh*+HQ zqJ{Y)tCmP?WP;4L)Ry*wN!Q;TvI?jklCyqDAZmK5K%CK;0bk_uAjT-88Kd=NZw|s{ z_AW*^kUf`$`69=JNI38|IOTb(R>&38!**SffEk{Ks~SPf)<4O<*AvwLUto$u>sJ~} zYyBZyfw`dc0p{~HA$JhgzeRJO)w2&8H@zxM=C;P)*TSp0YkX0MfcxlY2FF33zF8Dz zdqeFS|BIPm=&tc1$aPrf?lwLrGuOG#i9%~Bs1~P2Wzl)uSi`cw>r#e<c-`#@LHRWH z$TT!E#g={BI`<QyR&DL5i!)d{Oq$lUe{hJd<0ypL(%E80D_#48vJhq5$Y|})Ym~wq zVX+Fwb#5Fe%4a7*kM>zVBAJElxCZ-dW>}xSz!V3cRT@k4*$^&sg%j{ybM=OQ!j#x| zC6}HJOtY-6X9LGDVwrup^ob)Z4mBJ2ibI;NfR1lkvw=7SY22~6nz;#T{j=;g4&>9p z0*W)p0%2xdoz?IfbJn%fF3izwYp46$p%LN_gOSUym1=W1j<UbM;c{*6-ohPjtBFhY z-Nr-UDq2gY3arTLL8?O&+;60inN9GLYpBlhQr!d}1DR&)AXd#YwhYu`sab#CktOYB z)t}kto+l6M$HD$eT3PI$qb9UxxBtKwgY5rDTiBo5d_7^Z5c`j&yt8ieop}xB4B6&; z9uggGUqEKsexaxewf#lVM%zm%(EX(ju+3w{_g}d>D2v7(2t>|PY&p00e?qO=+ELjH zAW~TxiwI@=`-k*@*M{gCt#s`Vibns(XtV!Q3Uh?TDxLIypy>V&dd&V0k<7w&T!Z_+ zv34H|YPA=b;^2KsW03cijVnwaQBRG*XZO+Ni&(MNU6wv^+DC7W4{`wZ5nDJ@J*$u2 z1ddQ2J=rFVkG3K+ee}4fvT9NH4|jpgI+IesZQe`^_0bQJS6eeO+B1K?$R)O%+kEsA zp;n#ksO;3sO4-|Fg0fCf7Bm*nE_Pj8kN~<m*>utS-e<J-(Yi`uy<mmpngcH7qr3W9 zK3b@=&;rSVeKb9+k6vJkgZC+orTJ(GmpLlxvDfUo7ud@c;4%An2kk0_rQPHV=l?IU zj?Ow!{m<ZcZ|(kn75u*;YIbRBtHLokjoaKkHtg8=g^Z2EG1wMig<!vDd8QS7|B|2; zXeBW3H{v)lV=>VQS(IJ}&wpDA^?YO$c!GTJbBjaGN0O8fS%1BSu<q;@BglrcA6L_= zK|R}$l6EKE!QP59$lgj~ki5ku<=OQ*$W<xA$d$E+{8Jy_K}q%&^KV@GKZbXw`r0J> zdR0qlVc^f@5h)#xjPI4~8-f3Tfa{nsY#xoUF{MS3>?0iJTPR{_q;;nwl6}{!e;Z80 zpq%P$p6oCGJwCsS|HPNay8wEX_)EOM^EZC{U9Kazbz!6~oOiO{eW7$u<9!t4o~MJn z?T41|HgtiJ|6Up7ZQ*)Z_5ZQIo`<J}>}Ed=NsgYj8O-#woyelpnlJJ(c%|ygw5R<G z9x0u<n|-Inp*-z7B}6=}D+Fmzy9Pme+JmNSvt_5*JtD|gE-=Nx*OW%f*O;5Kaan%I zyJzzMq|bu?KlhOuI@KQqeS=~=-hp_1i8lprLGhMv(lvS&9<Rh76c3}`|9eX6-P{fP zB^LF5E9!kt3$rS^C*Y4JX)YYNdh|7sSL}-=>V2`_MNH%>rt*8B>mpC&EU@5zP6<6` zjUS@?#`&h(ljwNzjSm;XcV?;?yqTN9$jyWvLA}&9U@kCblle+8C;K`zQLU%DlsU2o z+|3*g^>|ImbcVahfg$vyM~~OEHn*4-Lyby<vic?`DuG9l48*@ILqzD!Hk2i5=<vdk zpofebQFiY#dzwJMWbNj*u@pwgpN(d0z{@3yCqx=kl+LL(og9|`d5$?(f5ICI7VYI} z2(n;vag|oW|E-yOBO(7idYvN9KIF)MRn|WteCGDZSIyuL{IANcK$bb`zy@KqMAUy( z3Nd(v{#V5dSq?qHZetBcI`jnj$fLALU*w~fI^7c-1&`gL<g-5`6t3LM)F>KrmgT6F zd+Xyt<^G|mS?=bhZ}9)KrI!0o+@1(6_mhz2SniErX1NQHM_ul0OPwzFDey?$nmyp{ z7KiEq_b4IK16~h7+Be!ENZ*)X%GNz#a%^DpL3Cc=_>w)^4akAn=`jbTbA<MHC7ux9 z@;|A(vsLn8<M13|GW(X(jZwq#@a%`1ST&5@TRb6t(0B;)`1~+>u7tDoT<fIgIx`=2 zzACuqdLGgp*1rWt0hwj}3$G}-_i&MD#`>2fLSL2IBXn)C4U)|c4%s#KKp;wyBI4A; zq_(xiCqk{-+EE$5BTpYm)5`XD4_RA`2+=iK>DnJ;F|2<XZLWWn!W?0-R!*}11x2ra zp+~!^ACb($c3gwj7RjD4etLo89lQ{lO7T-02m2;_d-5)q(XYflUs-ud=I2Qz(ae(W z3@I<rKBgT)Z{SMeU+TA8k2K8UO9WnjM!X+QBx$k!%ko^fO>L`&vq$nhNM7kwJl>pi zV7%cqMx|S<|G<nisS9j>V4mes|0jJXCc+h+y`E*p|79ClE}9}OO6I^#ASuOrFB;YD z38~q?M`uk3ch}6n-5HPIGl7|Ss-vDf+%azwR2#o>KI+dI%S`!JGB?K062<>bbApkA z8I2EbbxVw5*A7sni4wDtX^h05Pa$Epq*qz2j4Wn!#~27z^16VNS0JK~XBxX<m+hrf z_W4Hi6Rns7f5vj74%8Q34$MxU`mWGUVfs__Y7pTK5LO#MlCTI<f9N%BH4S>Bv#^+U z*%L%R@g%M1&&W02Mxw$Qz>uyeonR;d-joF~_99&iNe&}RzHyIC$E=b@JM$G7-M~lh zct-dw7w}2-8&ib(s}V=Tqch6AKBRxB*wCtIcAZA5h>6UFrOhtN))%!AYSov8YIO~I zl2$`>9XB?T3AzS`>RM<MN?kv~T=2DlLD5mhRz~Z-C{8Ji4_3&&=v8p3zUWXFt1oiv zEOf;+xGl%o=XF6X_ySWLdI6=;>IIma(z#S;5!_c`?a;%Ux+WDbRSf*&O8ralA>4c~ zWwI#$5}cPUe7U+oEx8O0YA`CLO@n{~$i1|KMl*=y6L?rdB*L>@zN9r?{7W#edpfbr z-A8hDF@#}U)8u-VTk8waPV$W`%vFo#1`oVVkO#+scQBbb@HV=fnG5y5r$FXF)PqHb z|Ly7&;_E{p*mP>%3%gY&%8|QlMYZ{QccE5YCDc$|&9tuFWP+~rP+fmq8m#LdnVd$Z z+jP;3_cB`hdJm;ADOe%7R)b6Vx(j;rxLaFiVGyq396?@<8y^r{V(cPg5MO~a-~SCB z%5d;&rP1<!l^^nP9e1LBz-)Yn!;B3DYFX7>*)P^sg{rRfQf{8#T3k@CHJ+xO>psse z^xEj9gZ6n6socKL^DMNLX`knh$=K%^5XhUY6=O9J{8YzgHM@;D%R1+nQ8W!%2|Uqp zqAuDiAANb(W;nC;g{<|_Difqt=5>$L*I2naKL5r?U-172A3Sey$n$T|=`dvB`8P0g zF|+{%5ihe=%hheUvsUK=Sze9<Z(<sOBBa=uZ0+z9O2z-*g&NupUjR|&zm$b`xIZDJ z&Ht~S-J$fpz_%1h&25zCoi--6H@y3g1(5~WGNt}qVX@Scs}U%wRo(-wx>Zg^Bs26W zu0bs=86IvnM|<nKQ1K;O-VMls+3cL#rkz81s%o8VP4b+#H6bnFl%w`+)=VjT;MYwR zCiCgMUUlHGyieKsl0e0vD!9eE$qUxA-UAv0j?jBR|I~IIF7_L-Wae=3m#DJpPES{E z2bnb`rGV?ac1`Fy&4;`O#*0`Zp84}dzG}<4%};9zwdzbqWyi3SMrBLL1Z4?OCjFGT zCvZiGu1!b)T?sZ_^tok>)}C2QDXbl=kX*CCr988sz2%v|=qxlvvS7~~62>zxP`ra@ zLQ^T88Nw09BWFBDtCixBOCAv>(<4{bghz6pd=VT;S2y;FN_pyg+f0}^WS{(ANOI^H z_Zu&OnH}R&WKY_@FLH#XOz#ry0#A@fbhbFuF3|@{h;&NzAV_yO7b8f|>TAmO>Nj+y zhpE*I6z@>0&{RsThH%KJExVtIcwv{>*{FXOFHsX!tQhg;Jf{uuZ(w2U{CtFozRUP+ zvedD;2l_>I)Nvcsu?tnC>liOFPWC+*h5sJp8h3LXz&<y6pG4>PFm1qaSYUjWg<8ie zIrxl<DLVtQ9j2?hjU{Ae|1(~chW0-{gUpJP892IxrftpsNACf9|H2Kb<PQ5L#HM0r z`OcIUr%}TAW5$h0h#5+%e?pVGo*Adz8MV94uGn=}g`!JSeC>a&7J>H_ZmwI@0<y9C z=WVKKFkRO?y#Ab{eKKA&4MThgzS*v>vwB=sS6(nbOuwz!-#KzTrYz4vhj?RPKe}t+ z6@RKm>VT(|#&*!?_)t(qc%U}pPUyb^R#O$xJr)y_L}o2?f`Xe9c!pOV+U+m(8TlSl z>6;TXj7(G+-mf;^v$=aR)*rngFx-~5U#hPT=5|HXgR5^<G^(%U4T{}HA$%g_2F1%r zkG#KP<=woWU{EqEGoKu&%pq~Ae>dl~aVWP{Tp#|?F82!hD|rJ-$kUVBTx7u<hXXT5 z^BJb(x?x)Q1&ViQ;m~BZaBE#*evTk`2G|B>)(tQ4a<=|z`ZXY6oZa~90VHnN&+c*^ z=DIMd^mxssg>ImYFO%RtV;HXVQB$Gmugd0lcX{YMH?Mn)cC)(rDlGzhQN*D-3Y%Sc zP8^$PUmMqQrtQb8I^mt{Q`DYSpCQ(kRd>v%`dI5<u#E(lD=+B)FYvbm%xs@22+JGM z<&B+~NpoOEIf{*+GSM2%H>vlcHkA1>x#k&{v_@|bsB@Ib-{7(PVMFkIiG&_s=PFg% z7;67e1>0oaz1n34AUzEMCsA)d<5vs#Ne%r80*}9!J19a~D|&55xa6c7=&k%!B3!Fo zi7r>;9v^ios=Ss#qa3qUydi!|Ha~Z<&Ew5i`T}3t@YqE377^}%2n3B!nd@*Okh<b~ zZcldZq-bQJGSVOGF|Bj?=x5g9iweOXQ3z(;cagAmaXYb=DBFABUhRquWDG&0+1WBy zLc|ym5fc!Bpz$*&x#7w-yfE%j?Wu*etWY&8bh#Bef|-eUbm0jrw9yJRv-rALakH#Y zmKADdg{JF}6v9{v3>Gf&jR~y0jYI5TOVEZF4%9l8gmg-9elNcIIEKF;Ut`a&x8P0x z{;uxK4s^YB$`gkdzHjAht`$nKLXE7@<yPo3<ck)e_(c8f2l@U+h2e#FfXn>Y3m!b} zKKC5I#(^|{oNJolg&TE_h8G@w*sQHqIt~&yJ#p^2Sa2R`#+*l*Zs(EalJiJ&=<##6 zLGF2^nR~8jh8KR1>4<cX{>Y){ni{p+>O9h%!J|Is^pzOs`RqK>EIyAk<IW>Z*K<uX zys*Y3%j%WSHMLXAzX$ScEq~*jbF}dA!pb^F!wakEkm})%PSpKi(r)#M9=_qeV@r>} zJ3F>@wn2~iY8=udwM1$&U!>zBLGrO1v&VWrgx)lS{*;XlFE}9Ode4pT3su7Rh2pm0 z3qyaD7!QXRKJcK~5hX!@8bAhHao6fNBNhR(_r~Wic4l^f{;n+7db5N6+)DMS4q@Ym zU$gN~amRnxHM2`&aPu1gt6ezow99Q^^RDaB;?Ef;D@M;-KjUQi=y~h1@Y$yxyD>H7 z%uQwpD9m%dbF3t!x%XVt3@^OWDnTDB)XNIFt<awt%2KQ*d=;d`xOE+?TV>vu2i{=A z#RePB*i#w@3bT6lxf@{id88S7u4&-m*LUW;Fi>P<_lk2BgEWV|=U&8|^GGx2Jkkt3 z*EFg_$QbX`AzbOuAt?SNNB${c`D;7!cX8l1ej8_V!%A@64)_|L>7?{y+&vHKZWbbe z*&U&FCeAwd+VPx6n!g`AcRd@=BhAz2k!JLHr0H}XX->~PcN=Uuk2DL;Bh9GuNK^S- z(+n^4jy1=kTXkr5bWw%b=xK}dvbIc!%skm9<4+mQ5DF|%hZi0)*)PGuZ|8*maa-b# zaS51laptK;NO!7vM)_G^6kVCHHKRi2)Z$?oS7e@w%_t9<H8W4O$fya<Xnw+}j;DAB zJ`Pj7Id04B!J>6%#z*{Gj9wYzTT!Qv6c@*TCo6I;tPcUjDyZZaWQ^K>1~FCu>cEJl zDe{c3u1)He;*0EYrktzm?16JTt3v)%9)&!C0yT@@xz<&lZTSQe;63$QCe`%d3t?S- zDYH5?{1aTK@b$|d^~f0{^3Q*j$SztWy6k{R7v8H<7Lh3TzTk2fge~{UV8-8^8PU1K zW|h(5lVmbfgB6oEyJ8l;K-Z~q2EOTNRSK7*#iOlWm)}XWeOdEOP#nG}R(XshaQHe{ z77~~%$VT>ozSZpNtPGF;0XO_gCN!|-=8Q_24;2r?r!6urnq7wu$ZwB+t15$?Z1b=( znwLq28YT+v3zy$Dpy(CK57W=drZ?gFt9Ov3$LtD8@jGWnqd|0!&rOQkl9ZL(W7hhN zDll?U%<PnkXbZUsUt~nj9#{c$OMKVQ-=m_tsDj6RqU)?LlCriWV@8PDfrC##dr1j= zDi2k|_9I_g`t4pRL1<f{2g=v(uEN+PRbA8gK(S&H%Z~v6g8~LdrHSs@72~&by6R(2 zC}IDv(Rwl}b$SHB9UkviV32c)+od&)2ZH2$V3VUilxb_qcPayiW)F<lGhLv~$Ax9Q zESRxsSjJcG36l5>P>0R|GiiMDRkkrkxMAYG^z82Jc3x8nP|)3sYvb`(9iEA*uO7$# z51$rYmr#?R7TqwrI>P$Xq6H9^m75aX<1hOMV$l+hPDRqF#JFRq|GKDYkM~qU<&2u1 z;`OtmfTDLiQWS;AqKL#<JK}Q_vyQ>m>yhE;>_e;rf8>hum#|bxn0&qxGVX)^?&qDF zUuCV#)aUqB)|2T$HTWA)hZ;oF^;f-gN^s5SkG|S#CjPrD?6Rp(oOU#-tJ<9qkG<Lh zk0Nnpt8UgOM6q6TXIDn;NX1B<e5dM!D=6E76RtZXIGf2~vxzRW=iRCdRXzSbZggB& z#9}87rJ|eJ*0y+Zv&7m~^-%|vc+)LyoiOd=&<P(`2^>1%#-Qj<Et>YL7P_eQ4@Ms4 zQ@Qj+<Wzbe)nPn!7qzJ#Smo@#QL1cMe@A{wlLpDF$we~0m@DFfKc@@+Cra>hQH|9P zYK@=jWfR0@A6w#hw$8htUYm_^BWTMp9{*4-m!!R>k}EZss{=GOrKTvf!d9r_go`l9 z6-&?AD45k|*MCv2AiEk9Say7nGMDaCwGdAe&8|-O*~zB8E}@!oAItgRK3~UgQSOtE zO?th6ZLKuw4!9L%YJ2J@bo^Cak5F{!9gf*?C9%*$R6Ur6h-ciAJ7F#i5ipf}+qzva zk9^y@h10jKRaT70!7ty&&i#l(f^1aq1F0U`8{+}$2p=SdbliK|XSkH~2^XdK$Kn&K zZBjx$n63QfI&di~a@)gEnynTVqXa><Fd&UzE^eq-SMmwOjs|7wda3>8!!X`?H){vs zKhTJ((rfR1==_Dl3)7glvUG=Pw7%Nf4w24cLSu~C#{An<cIptxxI-bTan=N8I+Jnu zc13DSzIwV0P5CKl>@Ng9CSTJy6C@)C$xIouFTwa0$(c(1%u{V}olpZ{b{gj_@OsSt zWz~=yzlAf%T=H;V4z|MgWAg&3f7YqLvyy%xN%_o%eX7acFTOalV-vJ_nXXhe?og#r zpPhYH7YR>k@GoO*z$#Su3n=W<#Kj!MG|*z?Q?~u>GT#a-Gh53<TcB5%`-kFkEsf|~ zm3d>>KG4McliiseTcbt($N5oZ<ByR-&-mHC^~O0XwyOdgTtV~Rj%A#)8V!*%+pMXE zF3*wRF^YQPbBii^ym)JHKip_!?eKO`#_z)mUGO3r%!t(GuS?HB83UeyyE>J@WjceH z)|zqdRmFFh(rpCAmbsPT7`e1K@UvRFHJW`9M~R)8C$BPXz|SvdRL(p(0>1Diz7TC2 ze9@5FKZu5OKJ%)K;TZXkW(2olcp(OV%*t$oKW1eo)T~T(;o{dBR~YxRJYG2Y7RjmO z-mU8BZqOwcpG(k)Y+=L9C5Cz97R7;;GTQ4P<vn_k=nj%|HGDEcd09x+s|*xq7eve5 zXMCuUfT>%Dnwks$5K|j#bVejspDJxSS1*C&oU58=%hh!{BR!d`hFW|LdLMSc<;&ab zLGXb#kT+{VV!~5~a+a#37&<E@yMh(BXwR-`&wBZwtRDjAob^Ro;}LVFhNY8qz8QOi zTUT&%Xbz>!wPQVav`i^Q8;yt~T;<>hs_x?VtHO4+TE>W=>S~&Ka+p*XzA9f0U$J** zUdI(1Cu|wqjy%alTgZINwqSf?_*wGXSL?pf(jD9?yO^yK>p^cpMjN)<M}l&9ndC0% zTTBg9E5Qxu?&u$x#S)n^lJ=>xwzKpFm-U>aSv}O+VP`4gy;^0Wr82mPvB5>GM~lMV zYL0o<!hE6BI?TIkgQDl%v&Ws&Jb;@CHzUb~*h~n1q)DC=f(QB=EJ=w#Kex~Li=N`^ z-0HV-e7@yO;Yr)`E#q}l`_%1nxz?ru3@?0C$B7%`>7r^J4kL|8Y#_eLF$%kfm^FA0 z(@ElwVO+vNBU%3$@Ju_jB$6L;#>*RuqX*|kx5%D*rnnfFOm!KnE+cXA<Yh0$g);DD z*xiN5@{C+eO|#QU^k$P4JPS;oJP{@AdD*kfSa0?c1o8F>Jb<*4vH0KI5V_1tlS_l{ zy}7%WO_j;MYq7lvxBkm`4E3Ahe@ArrS26|PF?kbWyZU;?db3|eOxGDxTe+g=Nj4FV zWB4Tzn&XknyhL1}I{^(@{LQ=9Xib;$KQFoWuM|F1j0>?~OhiT|F=?I{goRO7icyhq zxJU{8D;dMbpg!wQ`$+bYcscp}Ije<u*w{YQftX7k<YYOCe!uARx$)&$jFSEWA!g@O zfd8G{A_wpKJZ7}IK}0Q9^dr3Zb56)*<q}+sTSZ)s>pxOfG9$(<*UA436_@<2@a132 z;jfU@;bJsrWtDfykow!<bc>EMtrqE$?jDJ+hjh@&q8mF@ew3kwr>F4LCXX+BNFZ%% ziEp6dnN`e-_(kM865mwvg15pdd1C|gV+Wa6(jhNB5WiRAuR?rM_5tjm`lZZ92Yl|O zsEUa-<f|w1dd0A|y5{w&t7=VgevtyROxwto5cZ#yKZqIeVC<Tk@PEh8fd&5`(xNYN zrhjFoe}weB66yDt^kJlLD?$Ilq<12HLkap8lYSZLpM<CXJH(N`&P@M3=^qgDZoms` z3yWaaA~Z-rJ^)gP#lDH(VFio2DwZNFFUd-G`lO#!mCc>5{-vDLbL08OC}<7#uqd!b zXGK6ku%Z7%&G8Y}!k-xsT}Wti>CX>1>L@VEK?k$dq(rtBg-i1J;LvP6K-RJLEKR)) z*;!mP*vgBoyxqeIez1h#y3VY#j6P)5jqL8esEi7hCR=0M^Rr{Aml#!)CR_Vk=FGa> z`0++5t*uGUaAqwqR)Lkh-R@LLVr!*o;gZZy(rpd5DOjVk=Aa&f?1@{*8M!ul+Jyi0 zlVd3hjAkW-=acp7Ai<adXUsKD4}uLbTcnqoy~F2t%Zh2&t~35E7oA<c914bk;6n)J zW7Pf}{PU@JZCzy6xRP;vpx$?*0Rqw%8||3^u2kDM?ZfeFpM3kvxLmQy4$gy6tXSek zDV9o<#{589tVn~#BF*N*>sHV&y7#TEOty;=9laJ);C;rW!hwAUUi~?E0GmBL-nCY2 zd_NHN;#<k6WZx76_cn~Xbk6vnfn&x*VC?_Uu3YF3tKow3jfg=TQgWm#_Wc;f&TAoG z+rnrG^@T0PP8$l-q$kKTlFRWKUA(<3+tv&^g%fu_#RUy4)xjE_RSr_^RTurl5z6;x zEHFADN#ReTjaqEZ@%8>NnXaU?*gWqoutsMsf|Ot_coKwKRvTXrfEH{Ny5J4&=<K^h z-#+6_N@6YNEI(~}Lj%NNE|ZH0)P4taiD(!fU&=a*5ycUxv*NUBOoz?9cC5iOOv69P zVcoOdI0<FIimp?l>1f7w#2G!oR#*f{G$-Zz5{+bkrwYCmk^6zp*x@!lRB26yh)ITW zmwgz@;Vx{Whd8QZ+4~!>{+uO}(UtkQ81Eno?!qY3T@sjQWL3F~2Ur+)QF6pxhV2Vu z`6rZ08p}A1urYyloqIw?7i~r3ClF*|VcZBR&2yhznFr%!@k#mn*jm&8Ccs_(DHb%Z zB2briVtH&N*!IiwI9|ApMpy5Sxf9+sBy#W)hM?OEc@^PZWa<?K(61W6;JN^41R=sA zz(+YAB?mHtZ&P5GB`*T^x4|?%$~&OEXWhXFkH6C@<1d!mTT(G*7>EzfaRsg9XO+gL zB(Pq1C{e8!Hprx?^S?jHdSUwy_Vq${r03+`zFtVxaq=g!w65Occ)~3e4-8zHlwCZf zR*Ls8j}QC1RE)p(buIop15?Z6vKb_Qk}14GNZ1Zk|Cyn9bLoM*`CNLOksO(S^Y{ap zZ@dR<kwhbl@1n4lAzy(K$lXYkd3fQwIxa-yQYBKaZ5Ao4u2T27!V(ph3CxH0b@?Wz z8MTAdjRGa0PA#4ib)2X(bGcV$I_6Gi8_g0}Ak8?0zI#x<$D5Js@!{Q4Q=>dB_VGEv zb%!H7>wazESy$Y^D34?wZ&E>0_OU5FlkjgO-<<^>-G8G8{ssDzy_-_Kt?+-OtJ%+U z8uA@uvDFH*lh;2K<4K~?b#o6mNya+--3SU(3p`##C*}9>@@-CaZPQbhE|AS>hw_o^ zTo-Y#e)oU2h^rX7hHF2w6Gk?_TFR+4oUt8qmK6VMs`u3^w_lAH5sQ^uHEZQo3;%17 zmD^@nv$3c0$Q)lU+9t*rGmxg_Qf&}ou~g$qbP^MkeW}(k3G$qmY6p!*R2E8<F%3(# zNXbcAmul0xi>SrSoj3c4lqzVcwu-YTwQMn$Y9F);U8)`5gE1@n8gy{<o)JAnrfrb@ z#-bzJt3`=)&Ywzr7mi?h7TH*(Rpu3*g~D?kd4iT|GbFy7ieD0td9TD{q0Vv3_)?Y6 zHWc@<=#ZysUi4fo@%>d^xH2`K9>Kru_KLz>Bo3Vd2b)-4k=H2Ew^G>pjs%;3Vq&s? zum>(6B#aJe|4JWY+`t^@bzcNt#)6w#(>Ah2*cwdmNWa=#?;Prb5osx~F!axy>C4UZ zZ<GFViS#Q>`W(_<FF}9Xq~AyS3nl2Un)DRX=ZB}aa;7gb(^nz=abju-_kXaSE9xr# zVe`4$zi}M+^Nsnvh1KSU31B_1^<44SjyejAw$Q<*Ft9|nJ`0zmI5{+1FOjv(>$&ma z1ixNFu*aEomNA*Ex+OlF7;ZgR$vOEFqm$BPThHzN%F#f}jp~Zk)^0y=W-TxddQ?-6 zLWa;}ZB02dT#^rvB)D}C0&8^EJha~6wlqW9Gu{=Ii6ljnlp_XfsUJ>DY6&fW>_Ty! z7Iuv&J!D~b3_D)I3%ftq`Jn6A3vRWri@|(bE$sR;F0ioUg2))g3~<WdKBcp5VV9&> zWnuSxFOy|3UiAy%A6G(&4d%zbu&bdZg)HpaBeh=GbrV5(Mk25NoVw7D@j%uC5sdOl zl<^S-dwa#fgo;J_)^EOabb|t;GLo`eMZvk`i^4@5kfj?1T4C*wHC*=JoL7dd;U<L> z|5i`t%s%3zf;BqpcjycDgYRg1uHhyjN#S;>h>$g0jc{6$los1q^6O4&!4u0NT5$W3 zT2>o1sD&#xwT6>X2NnMdC9y(t7GPPTD*h(KVJ@SVH0?8Pw5{QWiDHK}TnCtrvt_l0 zYflM*H5`4)sDwCUIzZvqG`TNZ<OkMp`Owcb++Uc7P?Bb_)^L|1Ua#R|IaR?Lt{JcX zoViHJnF7~Ug)*8;l<^{zY0pqB;u$$#gz=0cNb2Ajw2P4fO~xjG!gsCZnh>r=oLa8E z!OXy-IdYZdTJNK3xn`f4rdMR9kY9OG8yeEBZDo?kcla6aA`5u;bls%516&<9!M=Ty za(GDv#O{XJt}EPTI%Vfu!LPR9M`C(_8x?8llBh0moHOJ}|0Qnji_9&s=C}zYdb7z2 z9=ek7<jH2e4zgdBpqfqM4g~x{b+$RNOz58%gNtz-GY)LXi%9=UQaBWCK`dsqG2ZM6 zh+$bct7UK6W7caA;DW-`m5X{yV2((6ZIX&2g<sH`f!Ji<#5gcl6Uw|OT#PJ4W9}o_ z_pcNRtaPI=_liZqJY>!ji?9gFOh-6H%FA|vCgt+4WDKWmjjn?{Z2K^kSMJb2;ap&N z*|O1?%0h_?gmte`L2}|3eb$|dB}&d>3h=+PT;#}|is=a=YOJE?^Wx7b5c)ymlWr_j z&Tfg78$!nFhBEafhrToL?+!HeY&?}9<NX~SM4n_u-8uN)q9e<51L-zOJRZZN3KrXl zRcWgQcoqu}9vxzFSp!<<EQ!ZM#*B{*#E+GD*(ma<1&7MR5Q%?E@_5|HRb^InC5<q_ zqC;LnKwgZ*Kd16YGZ+tcRa0VZ7GozqE5diHqwh{+6{5vLx|C@*E7!kLl3h7SrpRfS zA`gL^2nqgi6(8WowKa333~lVcS}e>LRqE0{x1APlhg`_inN2qA)OnIQwR|rTy~8~v zrluDCNoV?4GyMak-&P|11e1OP>7z=}?=$J~q~B74euqh~PWp`{=)+9<pVx!lH$43d zXZk=h{d=VMERp_WMb9*zBwZ%@YU-UHfhthJCThs#4VJ?&x^;tP6_7$a5pD9RjYn=( zJKbQp`5G|#<d&<h$DP|8yZU@15_tiut#P~o*66GX&=ovN|Lp=NZ?GI>Ky8!zvTdz# zjI)jc<E1XDfo^CYnyrrEl8ix;;A~YR>v(&XrrwF{%q_av%FBX4>-lM`V|fdV+9d>k zNY?s6f^m0Hy@2)C&MdR)A|jD{bIORU*}94hXJreFB}^XFd-Qf@U2Ht6SZy8370#?n zjQ)ysQlPYdZwXV{=3r%)p4?6{V(WI+g-h~xCt*zpNS_bZ=&S{(b-R(GpO~o}BG*`l zBt?_0YOrY;8cxgOCA7qm^%}c|sd#8_rMyRXBozc^@Y1cdYZI8k!^XBg>tMd4HC7w- zAO>^3i0JI&(vtQWe<DUr_9tO7qvm{fGA=OLp9O+(KjKh6%uz<f+a~)%6st`3mv=N- z?n$vt_S-8K>n=`HEh%KO??Gxk*&if=@{9qz;^o1dW%*ZfZ``QED4#?bpHZ+EPa<Gd zCM+_V{Fdif_5z~;l5&7R!2|bq0+W6g-*^B#h4HF0DjX~($}{F-tDQv;>P}{aQ?p9V z9c<mn5U@sP;oZF<-h)@SusfM$%s`UDV%6_Ki_Lo)gwv9ywAg&~=w@p92vY1G6#c{- zl*<<%H=vehfvMYgGo%mOXB?p<ne-nyX*$3ih{NR0C9ACVnb^%j6H+&B?h?g8lm6(e z9@?1_VLndR)r7PYrFf4Q_7W<W6=LJ6h&E;d6uMPra2Lt+#@i`fGLw#(w(`brFfl=9 zCdtIUeLbC-TFAcft;|{UzVUHm8&UDmC~$GL$+|XH2v<bVJ;QG?=4)^JmBT+45WlEt zz(~=vGLtj?C5-arFbYqISl*^s#M>U(6vo@$Mbfi)8;fT|AY+9aq#iaD?&8&#EjAA< zgt%JbLg+V$qh&RNwGgU-c)bw1f|*4*8u04Rfzz_pL~*&b|5_;rqm21bs#}d>k#elq z7^WP*BI#MmL7y=?LZh()pm5JIPN`VcQou$eECeX37jQA73M1e_8;neZI0Kt6S6L=C z{zWa5R<r8Nw>nwxhxIp@-Avu@`BIA1xeD^l_aAMr-|ra!adL;q_FR{G$KpA@4a$>; zCW<WLrK!x0^%f}qWRGzfG9d3ZkXMOK)^}mDm@Sm(+pDC$j5UJe`=19&uKt!#Bwz6M zA9~dxXeC%dP2$RLB_}Wb_8vsB-BkmhF;U_MV2jsWD_#e(F|0LN)%(@`YUMOTICWI} z7;t^eQW)(eUPg6DHCho3dJXyV_2@yeuV;S|G@2}s_+HYFwBOZJW$I#z{7I%WH9Z{$ zL?wH_kIt$HE2Vf>CZG^_JUs=^ugN_6d9G)Z;(sq{`w;@gN21qxPGoPHihmttEHP$s zQt?0#VX_cLlQ1^LeU$Iw^0#jf#l~ou73Sp|?H5ruZld|yr-AY@a_2JoOMY^wpO1|t z3#wj+u9hO(*RhBXl8)VcUR3-_iJyoFyf-f@xp-5uuU3;}pS+NMou|bYo^>Z9k~?gV zo<5psI;_W?VJewWFWFbY;~R^o33jk`=B-C$v9XDB4S)Mjl9Z{$`X8#ew{%=Iv-^s~ z<s>2vKUeV-7*UrVph*2BIN=Z^8V|M-N}5nslEHXhrBzYwCxBU*pr6FAWISuRCsALv zVw0A>HJ2uM7WxsdbV>aC691Blr&e?QBk^xC-rv4r2UR4t2IIihtnDLwJ`8BsMbW!5 zk3vl^0)HW&I<!|d1}KyM2<gw3pbwI~ApJ1XdjShhpK8)Ok$!y%dXh=MjPz@Xc{dc+ zqC4Y7Y&WrE3Tg&#eu}QJn_b7$c5ul2q824sr;xSe=hrfg_u7hiZBw!VV2#e255w6d zM?ZnTOvA7lvkJL}hXU<ch4(46XrNNc7Njer5|wtgOVMefpQxgQEiU|z)g=Y9B`jFW zn%@eNspNabR_Ik%(-<~yS%fqW#wak2VPk!OtR;=H+;}x!jA8S&p3bbRjfWJg&HXMV z>uvVZP8|q)<rXEQd_~E2f-comegSW;(OQYJHS&TS#|$noBEZVVGKfjgc~@lZVI=+E z-jn+4>wE(yzZl1-g2h(&v$}liV)^B4rGu6jZp!fWshiTFPfT<c_UsYeCk>COPD0Hk z#pkB@nx;X2idVWFTv#zF{4Tsq+;JI;h{8-rx0fmUi3O@o3yk5o3s}hAm0<b`lir#1 z*Gtd~OnL*-*O#FGWzx^I0sR+Xsoq~;N--Sn^3w6V+3fAmOvItR*>MVEj=5{di@(Z) zo^?N#Pxd`hsTw-ZO6WW*;jhN{r`0@3gj@MuH6|6~kpU4)mROIVRF;aQF{%E$ic>pm z%xDLLh{NC^XRqqbd^t4bg#I3%SU#^kx;*3-V<0k~>OEA{QFA62f1cVRPqU4{&W&Pg z4>pWSpl1A>;(d+MQ<O|3M%kDL@A@7sj^g_xi#fvd=0oSAEMu{8h6AlHX)zmNN{3&g zv$=bsE#h5|0BzD@J<={<+KU5e7Z~eQ+67kH>r`6WR?^bCl6EfB?&Nwy>78q2tF&{i zw3n;2w7sOI^(8I75A&ZfKah5ok&Lt{UNIZ8KFbnu8htE%)#K|ElhR@f2DkE_kKbCV z4o~#ETRlE8IbNIL>98Y34HMDR53r;5C1sZE@G%7{T#Kp@_m%mOG87(N9*SY<EKBG7 zqREP1j065F!9U?XyNge~McO-FLB%)jiXp%kLB5i&Y+WsHYZYJ?8O&c}S>)I?RpNXC zrZ#RyfL%Zpn%kRaEc#Z>*F42|Bp$nqbTsuem8ZC0Xbk57iFh8dS0W~?eEI~b5R?#K z@9*mwgJ)p&<BB&I_r+Q{bvK`h@yJv3_{*h_H>@Dln|cKChG#}zT@<;%D83Sz!Ru@T z(_q`%Ks^|FeG{WR9Vb@9D<1Io;A0coruY(3scA8IO(}N0`{KMYCdJzmas1RyUufr( zG*KRJPn;J+XB57m5$Eyti{hUe*AFjz3>u{bfx8s=z6kc%lH~!ZWM9vy<c>Y7MQ42o zd&KX=p9Lmh_2n_36uB9D!s8tarO1HSL#6w1g;Gxe=qPd;v_>WSZj8bohvJfv3C^%$ zl6@&nkcbcTB;_-vE&{m>AkRswlYQke6O(TqrY=Xs5|4kJym|hsmaIGcvk=b$C42kD zVo`&FBc&Hly!eoiAKmnU-<P@^bj(mI7S2RHCSO?r-}Wr;`N-z+`Lf)=pX;Kt$AQJO zc91$EJst8r(cO>WAt!VR$Bm)TiRYD)eRWbgoJ#c?6YfpHyDnPbUxK;FQy~OQXzlTh zLp~lxksiYN0K(%?q6d(taVXFO$WvR8VTy-v#!CgvSRa?%;Tt?h70A=^A3f`Si}d)* z_xG&ZU%s!uM{HawtlchPvShCZWln_sU@`>iipdZ_|Eo;~78Ki+>>m=B>gyYo;>}NK zabm)7<~G%LNh&^Un(XTb_Q6Oy5rVMa<eiLjJSuPiGTo<IigzfI)x<+^amh3C;!-=D z%-9q*m%aVNTqCWw***kYrF!wTqg&u~N$5DsC$cChZUa?c4St<qn=*P<2Q0o0fAsU0 zuT=P;>=t*v_7Y6|YeAT_r`0!FHM4pA#dxf+JRU22aCqS*U@!_=C@%RM`JbK^Cs83& zrbz#`+E&}^_(#g)dy?~V(RUVmW}N&lCA#0bWOr`zan$7I0+0XUf)wAyDe%-3-!0Wr zd=H}XZb3z|MfJlu0<CHy-kCiD_8AQOL`$j}c?BHJvU8`d$46hKupak%{8desiNSw( zVp;ICoxi~+d~-kM91+Mm{_oUjrL1SGuC%XbXMkot@rZw~Zu=UUF8RD=^r~@j#;LDL z(C~#3Wcl>b=xW{K@GK|(OXhzR4fAW`_2yKWf$%;MlXe@QGqDdHm0A=nUQy1KQCVq< z#owNTI%NYr)DdF~L=^oXGfgYm-ALxp*&4<o>O)bN#Hw17rwyU`W)DFBM4iEEy%UVF zj-`M@o<`$OVE&Eg1DQAO2+p_hK_K6Co%3DYA>Z#InPa{WG*kILf<&yhkiPLNb`F>h zE=l%fBqm>(k>FYPUqn}5Qre6Y?&x{B(W?p!V;7$yPD)7j4Nvs6*uc-o@Rshap5kpu z@dr}9zZPATT%3nT9%ISX+t==dhhs|Wk`y2M3;(0bJ-$JUi_;QOIk|{Nmp7=Ok9T0R zm_FW=W_9~`do*KD2d>oBjEU;wE#EAq!|9Brh+PuW(#l$b_?<@l|Bte5`9Jz%d?aXG zoX3a%)2uJPAu-StES}TG8(-SnLEsA}<}4nsv_nV!59Xvpq?gGViHq8AysIflsHo&C zhodT0O?6k>8N5H2;=l7NJ}6vkbJABWu{D8}yP997N;;{&BkD=kVxt4&iZ>^B*gI|; zsx~dTW6}`JV<t4*ob)wb@sp!(_<gM;T%;tVrTQ|4B)8a{3_qf#Zt>q?D@E)6hK>W> z-vsIYq6zbyl;-iZ+imL3K^*?wp3>p3aoczsf#vi`agBn;Ao-=t#uTz)_Dk}#jkJrc zTP`Xm_uow3{^UgqJ}B2b<H0XZ7LSU)qKDO<{S6M)Q2p7}BDV8=%cVc-yxiWOeE^!& zmB%0XGycrv@#19x6EO#&ZzAsV(754+t&oIN#iJnGA-_n2-t9|nqT!B3ivQ7kzE*u* zi!&%JwtN#Y<nF`7xEP&!28QV4#vM}jNArz-Ezh9xj-YwO>W8@5k3oRZ9uyX{n5>u# zK2cy>2ZqtuFTBR1jc9Gi{Q*4A8aFUCH2Ss124&Fr1MZZCDPyLo@!qf+Z_pYq)f(UW zy!0~O8(!nZrpA-taW3ONrbZdxBrB}ip$r;NHV<3IMGdu89}BB-wAOg7)|j`W^fEpc zUSmsBW9_gSPct>jxQVPN<DfEVtQ}tC>KI+dSHR<JRj<}KKx_PYd+B9-rCC_3_B1ud zht+tA*7ze?QN{<#pfNtY#$8wFGJXmk=Q6&=)UfLPT4V8NrI+#3reVu?o2fB1tj4Rg z#xrC^8U1C@m>OQ=k;`=%zXOkR8P_p2%IMP?FD-+{@0x@y;}lcl-C;HM(;Dk(jc;x% z-Kuwo*I32WcpN;=W&DAuQN}mO3aegQ293uXhb`lC4YXCW!)m-&YizGIZrWOU8MDJ{ zj5RgZ46E@ZQ=^O<$ci!!D1*kD;We(hOqcN`@HkubF|F|it?|b#rI+!gMq#bm!_?R& ztj5|}<36&YjQ5v8W1H|AcV4Q?m;)Z?GQPspu<B^7@l1Z{Wz1<9wu~c9jeWvujMo}Z zlNDw3l|f^l@EQ--*Ja!T9_KQC%G4;MS8J?S290}S!j|z7Q{!D>HKuBfmuQV|<dtsK zyTWU%Y-;=mJkDkOj;T?`*T@R1wl9Omf365y#s&4XRcD0Nc(>Mgwbr;{bLnNA5nf|6 zQ)Bh88jmwI%D9fKDB}%f&{#dZ#uasS8D9jCvsJUT#(rAkzD=c<@x{x-TD6<0@v5*I zYif-@kQHSdT?UO;h1Xbci7w+O;BhYFOH2)`-m5j9-dK7WKWPxQjJKE?lf!Ckqcxr+ zE6V6CgU00W8V}XcW&8#_&SlJDYLxLYt?`mFX#D1~uw{JM)OcrDjeWGn+FIjlc#c9= zW@lMj-5FkEl&SGA@Hm%o4^yLzuaFg1y}Aq<|GG468Rys5R-G1B<6T-~yw<pGed%SK z7G7f$Q)6^kjsGw;%J?Z+QO15{&=?(F<NLLA8J`D_vsGtkjj3AW59>-V<MZ{yS~bzs zcx70P)wRa&$ci%FYig8TJv=Hf-z|4Wj~Kt!B!~I;@Y1}iV)$Gwr68`O=YhxB4wIQ0 zmQT{T`YN|{JIt#W)(#1##>QbaR?-^3lv3syx0gX<<M0|c*U)8r4?NCg{2x=JjJIly ze|}ne8Q-fLwu}Q!jn{|O*i>u$gRH3Qsb$c3eRz#ORo7+Q4j$(+e!$cy<D*(*)iP+@ zeo5Fejx{w74Xd%M)_9TDxNvRhRvj8%<9~Q)OMJBuJkDkOoT*X9XPG%zwM7{;7S;({ z#yO_OiD5Mk*BYB^jUVQeUdD;xHP$yZMuyc`#MCI`O0uGiNoCL&8D8TOJT@g(eHuK@ zR((io?5;I_xu*0oK3zMkRj)BMHVmt=qSp8YSy9GY%b>Agc#Rt`)@6JbJkDjD$JDUu z2(9stPf9Q2yS2iWvA?OYb6AaywZ`AciZVW0292G=YusN|mvI|-oXhwgQ=^QNwZ@Ce zpmAHxuw@)$YP>0|#_P4lN?PNyAIs);mWv1Xp5=aBReXJe`5HihzRq*-KsBB}9saC+ zfBQ?&bOPS7YQG0>bTfKa;a9Tab8(M3i!u?v5%HAOMo4lC8aI&d0p%S{sjVpGzz+)U z7q*|TDW@-@xYZGgat$a`HRVS|DX%D(fs(E%d5RJV%8Zll8M|@oQ{HFHykaXo881QN z!*cvG>2aeYLinHDjMEh+#LPHRVZx=}J$T3`nGgA(z-vyT-0rR3T->!Qzg})|QVMqC z`O=uA6UGuG9~C`#%c$tq>oUqeT&}3%(de6!P83BV0Umjnv9TJSYA9~{*>mMw#Z7kz zED*R;;4Xn*3*0U6TY=vT+$(Uuz@G#j5O`3aA@DbWhXfuLctqe)fqx4;Ch&y7Qv&}L z_@6-6LguZU!14ks2#gX~Szr}`7YnQ=u!g`|0_zB@E3m%6%LHC7Fh*b_flUN96BsM7 zrNCAKTMLX6*j8XWf!7F35O|%yP6E3KOcdBnU=M*k1$qSb7MLQiufQ~c{RIvbc%#4} z0&f;LOyDg7M+&@6;2i=-2}~DwkHGr`juALk;5dO31U@KmlE8-rJ|b|6z)XSD1!f7H zDR7p+*#hSXd|cpMflmp1M&Nvb3j{tVaFM_l1TGf%vcOjbzAkWyz@-A;7Pw5{a)Iv) zTp@6kz|{gj7Pv;>T7kI&*9+VzaI?UCfm;QBCUA$q0)aaP?h^R5z}*7B75Kfty#n_O z{7K*efd>T|0)G>DNZ?_CM+6=f__x4g0#67$CGcN?{|R(068{%iUSI`*Q35LqtRnDY zfz<@o5LioK9f5TP))#o0z{>^32y7&<iNIz8V+FPp*h*k)fpG%c3T!9v8i5G{uM^lw zU>AXj0=o(9A+V=FkHFpnQv~)Em?p5lz<~m96gWiS%>suByhY$hfwu{~L*OWZ=>qQ& zc%Q&A0>=s*Cvbwm2L(<N_^`l71Wpl{DR8>LEP*ox&Js9V;2eRE3!E$PDS^)joG);J zz~=-m68M6^#R6Xz_^QCy1uhY|RN&hJmkC@h@O^<R1g;XeTHwb5*9crIFjwGufg1&G z7ML$^tH93$?hsfYaHqgs0>2ixTi~|>zZbYy;C_KW2|OV1pg=?5ZvqbqJS^~tz@q~H z7I;kH34x~s{wwf5fv)Gp{{@y8SV3Tvz{&!v2)tNeHGwq*))H7pU|oUr1zslba)B`d z8wqS8u$jPEfh`5L64+W`oWQmM+X=izV1mHw1a=bGMPQ=9ZUTD<>?zPAu(!Yzfqez0 z3G6R$puigi4iR{>z+nP!5jaxdZ36EQI7(o;z<UJVCvc3wu>!{loFMQ)fs+J2EbtM5 zQv_xToGvg+;7ozD1kM&XN8sZE=L&pE;4=c}3tS-ZIf07=z94Y1z?TKSD)4oIO9U<z z__n}h0+$PXU*HOXs|2nV__4q>0@n)66}VpDMuD3J<_p{^@H2rs1QrO~DR7s-uLbTF z_^rV21@0BNU*Jyy4+uOc&=B~Wz(WEL3p^t5sKCDk9us&%;3<Ls3j9x?>jm+Df#n5O z5Evz}vcM_=FBVu$U=4w_1lAE)S73dCmkGRFV2r><0-FeICNNfDOM$HfwiXyCu&uy$ z0<RI6An-bYodk9fm?*HDz#am73iJr<Eigr3Ux8@?`wJW>@J4|{1l}xgn7~^Ejud#C zz&iwv5|}RV9)b4>93yb7z;Oa62z*fBB!LeLd_>?BftdoQ3(OKYQ{XItvjxr(__)Bi z0-qB2jKKK<7YKY#;39!92wW`iWr42>d|luYflCFxEpVB@<pSRqxI*A6fvW|6EO3p$ zwE}Ymt{1pb;AVmO0=EkMOyCZI1p;>p+$Hd9fx88MEAV@Pdj;+n_>;f`0uKr_1pX%Q zkif$Nj|e;}@Na>~1fCFhO5nc&{}bqXQT$(Ed4UxKMhUDeu!_Ko1y&PSLtrg|bp+NG zSYO~}0xuUBBe0RcCIXuYj1|}t(B(?U=_;)6MyM}C)fjr1p$ZH=$I!n3>0dB(lp*Z9 zx(W@3@X;Vw;a-N`V`vvc|1z|dp&F21n9EQPhE_2&lA*U5dYhq_88R4Jz|h55Z5BSx z&|rqRicNonA!aCj5kq4c`iP-X4DDrT7(<s}JzChGp{p74Fw~EsE)2cTP&<YWFob7$ zUFlI+rxwOAbQMF`y?3SeW(aFySNd%XA!j&J{0$zRgKuIEC~i6$*SYDFNIQrHX!=}+ zzGvu7hITTvk)eEs_A|7Wp~@8yTES3nhL$okm7&E9tz>9EL!U7;hoPekO=l>oB0~IY zO8R9CjbW%QLw7JVfT5cin!r#RLr*c(lcA3o>cr4~hT1Z8oS|5TE{;Oza)x3Vs>M(@ zhAJ~Oj3F084>EKN5AdZw&d?!-UT5ehhH@F&&CquY?O^CQLmL^YQVAixmm|FyL(3UT zV2Cf~OCQe=UznGk!_ZR<{msxUhI&*+XbMAF4DszG>CZF7H=m^EFvQ0y)7{v2khhJb z4`wKZag!M8#?W$x5*R9Es5L_kQOAW%80yJTeTMF1s2W477^=V!tH1DH{4Yg?j#?qZ z3hiZR2UF}~=nsarG8Bbfn!;R$8Zoqrp+tt>W@rdQFEf<E&;o{h3_Z@!iwtEkw2GmJ z8QRX!ScZOLXcR-o85+h=W$Y>y_GhRuLmr0OGt`BlZVa_!=mv)H{9$qWEezo<GfK`7 zb{UJ)A7ZEqL$eqv$I$;6I)T^Sq`%J4VTM*Qbbz4^41LScZiWgN`jw&03>{-=4MUOG zODudJA(yLo;b-oM4d^HES2F@044^Eo{%Fvy%{XC3S3M%%;It?QH04rKYCyyQTqVr| zK$s?$6h37-+NAI;0Hj<)N?jmpOv-*Ba5h&DQch?@q`48(5|MIT3FK;oM&atd1pr&W z>X0&^JU?f;B8D<5K@%i^*6;chQeF4rtdGEZM6$IWp*#+x86xGtbL}qNCw1+{)s1(t zxNx&g9j2b-h^~xC($Nwa3}iVY7U5)aIX(bn(Kh0Av%n?t{B<TW-4_&B3;~ZAoRm#T zt~+t!Ubs3Q#RZRXDawloP&T!?mjINIeZ&<Z4JHOeIbr~_aq=}suGerz;ly7XU9NX< zdT<Km9|T(Al%pZYRMQGq_q7`F5aGY2O6Uwzo@7W^OnG<Xw8}FL2+Ok=r|T7*RI~!8 z`)z;{vK`Aa3!KcBYY9%4hZz>5uslLJfq+$>CLmKy8(iJjX#{Vqce%R*l+gL<G*<-Q zNo12iQ8(cHnbEA0<~Zee6|gr>j=rwLIGf;<gN=j~j>fKGKrBk8ro@u6706|h0N@~y zD!BfQtGgJ0*{)2l<ogPV#1OesBb|t}11M1j_-jLOGsSA0(xh(1^<^TD<FqLB2_nmJ zx|acz@cmWvR}SH>YY2ES5Q&pb-8E1n_Y=7ZXA1^+6fX?;My!fLKY;+txRDVZak7uu zLWH&VHUm8V#>sp|(iCS9C{e~hzJ`D-2LsF(`Z||u8qRBRmWKqf!c(})QM|B4gw&vw zQwDhMA)S+%j~U=$@pe<V%f$c-@Gc|Rj-O$Ghww6=Ja1=AADmG*(}}RlWa;H7UO4+P z*mYXPJfLJbQw!j8oanDz<yZ^bka2cy2RK7&hH7S>$B{AwNC#XKiM$D<rb$@?gqfR2 z3SJf@rFw)&L-e2QOhwv2AWU<JlpD+AFOVkX10bZdq|yi&lZd3Lqmgt{)?=2$j0)uo zAn`z6C*|6THcC$*6d;qln}Dzfk>gpE8FwpPU)2X#4P+{=&Do7!i)yE!Rzy;Pw81r= z$lE}E!Bx_{h*?NmAYYR5JrEl4B_jU<p;DnlW9mU<Hz|#Pu$q4$G8qV-k5kg-Yqr$7 zi1{3dmACysX!wsvsR7%j;_4$Z5eP*KWwu7-uO`m}p`Hz7I|k$~TqW1T;q6xf8B!16 zX&|h|tB4!`LTN(b^n%E6QaHn)wA+Z>4ul=3NSh9XY@d;`3&<Fgl8nlMUROn$cMuSo zstS=8f#9bEEJKI_ZX)HVo#KWMlkz`Ot^>l+Qj~gO8d%shoZZ$+AmebYPNaDaRk$iN z>u?|)aQ&77mI0wOp{xVK3a(DJZ-BJHwGNSMz(Yi&-3^3oVkRk>K>FhP6p<Z3kXP6L zh;#)H^+=kBfq>|$!|W^pLN>|hckuK{@Y6w{xCa2lf+C0VNUNP^nDGqI3pO)iCeHB; z@UZu5^dvbLpvAAo>23@VgHw*~fb5k##QJDt2(Iol0QMDfnECh%<Iit=>wpXG#dQ(d zqx7@zeOD7A`*BiHD<X$*!dG1Fi0~~fWa~hL12&OoiSQj1O!E?vQRo(!pYMs>t2>N0 ziOdB;Ul+<IAhabHZZb7uogE@_7?kUA%E2`ptvrk(I{}bwFp>TMmd!Q+S&qm@Q3vh} zfD+{n^yjQjIT%3mbNPtffHMZ?T%4{4a9+y*kK%;|dPbEgH~<68)j||pM!hz;K2M}7 z0CjWVb;SX+#r1O{w*f51RSwG^=)Q6=KpQ?otQpRi7~oO7aCpSfO$e|i9-(1&;>45b zt}{gb#tBz+Wf9?&gBJ1<xd})=Tsa$c@#Vl1ag{V&xwCHNC|>xsJK|0EK_Kkpo?spP zgOdgP9}y05X#K85L^=cMjO!U#-1RUJR$@6KD}b=HLg8G48R<+)1k|A+y1Ef*41}V4 z5g7wSN<svSaFMp12>w+mlU9+&N&H9*Dst#~c^VKJtQ<7CKGet<A_X|<n_eP&H1a<p zKjEB$Q;v~{p%C6ccP|HEy~#mV+C9Hq#HMmx5oCV<VtXM!k<&y*;FS8K*{GCV?+j$s zbs8s2e-|lu_l-<xgmOO+T5K^X%pj51h%5ub@+>97&-FCKRnpL6ly*G}bpw#AOiBaT zgzOolv;snRew4_yKv-wfi988}x!%i;bukc1`<av<fwVU%bx^;gTuwG_x3JC{6Bz)6 z0%D0Q1;V_Ev~56Ggk_|h1d?P@x}X+Yp(V;uyl_!O#M4j)l`2LBIs)OVQDvRL7WX=l zdMG0edzgqvBgcrCE+Y2d0t$7D393MND}?`Hu@Zo^!S#D0cL8C|Y$Ng%5Z1H2Q2YZR z*8_Qzl#@Vc|2Z^hZIpzi7fNd&92B1<<tAO=%|!0g$b2F%0O3_AYk@QeA_Ca0Q9va1 zTmri=*Q1HF1j3S5CBpBNkWz!l<3K1)*p>ld-bC8R8j&Jw)`%2tr$(gMdo>~k`5U5+ zL%{D4?JfeC21E|Gz~Y60{*hLcg8}v|Jz0y1IOzg?i1fqRCQ!F#|JVT0axlRB{z|L` zPKr51gk1+Ie-cT?Ny;%I!*MoIxnbMWbLiG2@nC@VxQEC!IPYSBhsArR!qpm=E#X~8 zjKw*Q0UpH*H(*-amB9o89t<!`c|>~Ptc~+CA~)eA<!>UC{u={4ES*7v2^*ZB<X$)* zVt_~SLUWzjO+^GI`Tbd5YGLV`6IqOtJ|L725TMNmld>M?2ApzaBZfJ97FYL^0Q6}& z$V#2RWul<z3^OxwFaW1;-A<mNI4L2W$Xz(E!#SGBOE@_{kYgtxtLQ6I4&r2*GenN! z<Tp^{_`hyfPLJeZpgPXY#Af0g&j61LJ5Sm(jRxdfkkoX5SD6=Z?pF(ah1B#LjOD?7 z4%&7Eu5R}DsS*vqcZZPTCuOciZi4_fzx_xzy@$wgjWk84=4SWL#vw-^AZW3!8%end zfYQb>%`HHz2Ewk9l=-;2@OYUZui)y&T?v<gNI9Se2l``IME$l1G0ClrV(;6H0Unlr zuT!|o#Q^IejRNQu@8Oig-gnG4BN=Fp^Asb<%7PXXS%dQh26))hHdIk+aN*Ks86y&L zQZL(rOww`~;9=H3#}Kx>d`3>j$s#?D)13*xu~LqA07=<SjH5LXHfZ-(0PL~kVDW<U zWl3OwW!gm!x*^+wn+c}kv|Pcm9lLxv7-)*qM~pqp!wm4ScuVv~&y!5vISlYnbw*kA z2DV>WWk?$*V#%T^IT#?XxDp+uu|xwDFMKpYnph_@hJi*neJsx{IGf=t56^LB;k+8> z)1+{s#V(1j7jsnrV7&@kbs)0!hX_|2B&6m<T-^x(CHg1KX~{T<fCmFiL63Dkg_HSR zLL?XGdYp3b_3>oGHwaXY$i~;Exz>SlD^59Vd$&z=l<bgktW6+O8qTUXV~A|SNz(}B zFaoJK<>&}9)#1g&E_V-r66Nq=J;hAf77T1jls$;q;!s%`r)<Y9Mu1rm%31`-HkfSR z;Jgaw2qFU@uO+T86L}O!tSA8T8e*8ARk*sB0hGv3U>s)=<zRr${wuLbIBBy(L|(^f z^RKTn(dG3ef%Pp11I*+eVtsJ3EPIKt!d5WAqY^U6eDRK>n|qTb@}<Y~fx-^J08`Kk zGWN3#$zl0%nc7dFyg}?OAZiQ6(R=BmGRJrVfoE~bVefm+J*_TJ2U8jYY#0L=;lX)1 z13awql!;fji$*G~YLo0|zG6f&P9onDVOK}wCn7K6WIb&n@-9wJ<b}eRY@BiwFWfv0 zb-Y3RDab)+qdYj2bS$?jZq-@SVLvA2Kb$pjt|!tKB8a#!5Xm~YHm+P~xVV&}C7vb1 zZzo!P8^<_Oc9Fs@M<RQOaMOSY*CVn|z%KtFkyk-sS%kuD{0AX&$hw#z*0mfA&?2%d zZ;t>)b|wFKob_-DWex&lvlffYx=?;Wpb)1VR=r(s#xQU(PBCXH0{5Df;)TzYi+B>b zQ_CrdW(H{0RuutKaMF+;Q~(%-lLh>Q$V8lRICF{ogfj}Kr1={GrfEk37o!+#RGo;h zpJi{+l?ZQyk?jp4+`MPm-X?OJrmP?`1;~xKenMmy5Ds~{M7ScPfVfHkn}E=4>CDDy zAT<71B5lg6Mn9EE77!LLiwKwUR4M`n0BHuQ9K{Qtng)M+Lh3BY|7o2@tl)7t>A623 zOEQpNjq6WDw&7$e5;jh-SpMcr!=9M=YC&X^reqP}JeAq!7PPFQC6h#|LSzo8a@g)w zChI6^T*$ktAv4cjkTz*S<bIs=^>`xFH6q(!tAQ}T6G-7}RGH=x5def~rb!x&%p}76 z*2PseKnx(vFIR=GI>;gw3*`>xml@~L5Y9mhx5w3e6#z{k2h!uPjdwjI0)T;doR5*^ zJ)CoKa^c|W3qbP;<qjatfXKo3gi_B7xVrh)*%EpJ{cSg$#>D`$FRQm92ypCbfy82~ z-*J_rc;PAf0y_beSD+3s@f;LN+G--M&k&ggmV>y;aTlyXw(X>_p;75qM7{(v8do_I zVKA~?M8D>Z-J5W&N#s)?qi~g@De8f2$)xlFLTP=8_<>k#e`&UdNU4VeiMUQ7aubjY zT;<pSgwocK@;5?*aa~7*i)Gc<0x4eTpPmT=WFf<P3^fC6M9)E)OqbaTUnWuw2B2^J zLgWe{^rw%B^tMyD%}2^_r0fL33LMQ0?FB;7(}{3LE*DohUPm4%`cqO?0-=D7M0i(+ z$QB~s0g;_dgk7&eKBc{ntNRL&sb>&M=)MvNDfbW=tC5Fsb@P#${h-J(1Z1+^MmFRI zNAbcH<s#lH*9t+loGmOuPn_%>zaT<W#^L;$$YVH{;FP0{F5I<H;o|*P+U<HGoCUIQ zej;OmuspJ7%ue2-EY*~GWcyK5o+oldQ(h#J1{*MMpA)$U2=lg!$YdbQ+a4nP`U4Fj zKG_)vOZpp1D!ZOU`hm^;1Y*e69PZ&>2!s^&>F(Vc`3YC|et_Pf$k7sHvT+=+?DoTq zO!$(Fq|#9eCwok0rUTgvaB_v$g$Sp%EX89)2J6B;L1YvVmf{&AZ1Nj%mE&fVkJ3(& zGEF1pXy$o9YT!DM$WkD*@a06l0zwN5<$$IPBc(fR!W`T|WH^v&xZX`<G!TwvV~A`8 z!cM;~Cz_{#&|14l83GqzcJ>hA&KoIviL3#_v02h2f`^p)6z~`j=KeAwUui`4H*3Md zWQ!ps76|j!h)6de>>ZmES*F=|qtBJ2kys+!%%gxhxVnGT$o-(WKSDxMCKB1Ck-0=_ z0Eki|mjes~n;Z{o$}Cb)2{?)uzA@bu@j|&6gqgV}&@Q_)jA%jRW}I_y%5e~o=DCZM zMi9Y~<US%(fl$B$M7U$bPVqq^19S!bN`!MT&Ti__U=x5a%^^~r0>aw*n+QIxBh~#c z5f0j9D-YLn6>CZrA~jHTq*N!ut?7=q)*-S_SE}e~jH)ABDwTEy!q(NFNM9iI%fUn< z0BE@CxVobO-UT9uX{+OC4H<n9RSTyNIg#yoPAr}#av#p-I2RCk8fO|#IerGD-Tonk z>zCfRo+2_%+l}RN%>gn1*Ye1{Yab9c6*-C*zKAv8B6mArRKAcL9-K7UD@4pOaS4%= zI9X!3^;Q!?$W{}Dbu|XUc2Ji{8j#_*%JB{m=5aD9zXR!lYbKEn$Qz|)6Jd3-Zf6sD z8wj_I<S1UaV>%4Pn{KLumDrwuOuU4RXe7=UoXd%<#7Rmak<W2nf%8uy&7hsFy(L>m zSB<nKG8xG0IGeGQ?Exs@I#T)pVZC-DG7<>uwJVWdG}{|QiZ$E2M5>_-WLrUG77)%Z z>Z5hI-i9S8nz!3s-2Y~FniFA1OiC*vN$^j0B&&(AQP9r0M4kuI3fE0Uwg91PZY4rD z<^V3o2{;^mt_qyUT^@h}<Umev6fZnD4L1Ejuty~dfB{N~L}6sr3}<y!Ch|K@wy$U+ zr*YnfQ;y**8bWEL(2P*#8bV|ikT$rozm&PH#rBtGTR;jo7nr-}iEz6m0oRv_j0N&C zu5z$VGCP;SobH}Lm{CzmXJqX*A*B`oC#Z5j4UXc4$Gj*jZy%^?;Z^E~^?Ju;09|pW z;*{fYKx%rPl=(O*?`0xeak9eBuq*fhCk0e$0Kjbni_#Pb$C2wv`2+~F`Y4fJC=uCi zuLp1|5Sk>Ll&L`Ir?ZJ10>au8Hm)F;<`^laYyL-su1QJ-y2@=pn9+-gyrn4}i2R|E zE=1T0S-5yAn+t?FxS9xWjWO39iF~9f-HCh&gnIfAIS7P$1`zpAQ>GEAj$+a^XA-Fo z*NnkcOqBwJqQ7FyBO3XZh!032uKS3b20|y3G*w|^M&8^IfU^e*7(rwV5N78NBGZ7d z3EWNO5D?l;1XM#YITVT!n*m`-50R}0kVd%vN#qkCmaPpS{~vqr0UuX&wf&yK7-Kr7 zhc+(YDtFw#M(#Ek+qlpSSR-j9jV;Z{nvomD0%JOa-b67SLI_|85US}lgwQ(<JyZh$ z5(xNv{_E_0W>gI1z4yIIzRUV)oxPv4*6wT9bIyo#4nfQd!-Po!Hkb8~Xbqr?0Ci9g z;2{^1<$&Kfa3x@Ob$=v{opqTnu!r2`fXmcjNyqYblK|-q?xG7X*bsIPz(i#%%G)9b zu0gU)fG{@#E)gJ|+W{*C$lFT5cTVytV2FAqYF`4L7dTw*vt4!J1zciF?W)UM0o3LJ zjuaraMSzQ(WCh@M0hUpB03LUe4*)ThY>?bf0JGJ#iOtff6PP3L5{aIt(DWaxgIff8 z3uL<K@}2-;R(96~A8HGbj1i#TOfp@7T>l<Pje!1wy8#XIk?V&5=Ls;rd<nQlph)iD z0mo~`BaFq?C_vPYlIWDJ!d_C>LtuXa(pe9%PyqYh5U{!IOEnyr+DHc$BiToQFh>I_ z1xV*a0KZT~-p&9#;3O*nZMF&39s+#o!1X-^hA9BHvjQ+pV+V;^y}c?EzGeeG^6RB~ zU#iQ#k{HG8x~B21qc!%uxejQF-EtnH_|^KloFwii?gY3?JX>tEz2ZP^782gmq!48Q z-UJva*A7~46j&f&)Kw`F=1&&20JZQUfa6~#_}2hG2t;A(H9!$&v^r04f&dk;H-LxS zQFc148>-Dmva7&gxrYG`5jbA15j##|y9&wY0^Q_Z2biG&iXzxk<w^na_C1oLoMatU zWpI|j0J-e|j|jXj*XWA%!iO`bAmMulJ2OO7cph77y1L*|a9bPMW6Hh)b{u}LJTHok z)-*0VszHqup2X7>MtCR(`xSfijCJk;m?KvA4JFhfYKI`XRg9X2c}N~gcoC8}#q@&9 z0H2BJ1y=)hQ1k7H2U^qk;!?jes||03PoXKt7>!LfAySEx0C$T?VqX9S!YK9wY^zu= zlxxJ>HAL_cl2-(X;7dSE2@}EJ0ow}@!S{fJ1)>OehlU8wprlNQ6!HSVSO+cx%o6A> z_i6w~YQ*+i04Iaz$u+`UwwLd4Dv{F)a`1$PFx!kVv#vn$vLt{z0N*;b`vKc3FI46u zfHMS0;z_{80#oJw8L&*|5=DKv0AZdboxcbW=2gHq0*nZ61F$M29|1VxLGmTw7$^A- z(C8#q5swK_qiv~`_XNht-2l)_eT{k0Xiek2_WpK}5H-BJieyW^9prAN3bK_m!RU~- zl_n=!0cg%h!oz+5b#D*kiOs@1CkZ9K9?2I1lz0W8vsw^v8(@F{llENzp83)TEj!(m zC%^!?F^(*U3m7RfQFLy8sX<-vP(th_xK=z+oB*)E$7t9a2IB;Fk!v(pU>o^XAfelp ziH)Lj^Llr~PRceHc$gc<inDm2!ag4jQg}#|$6)rTw6EL)0KXCcO>9&cHs^2RA?$nH zI8xk8{1Je#$Kinr-;YR#x3nmd$HI~nSsWn#2ym77P_favx`W!Tl)R$=cFMVXFhBsy z=nE(j7$G()%<Cw3FFH5f6s_^%UBz1hYQ&$2jn*{Y6|@<M4b!R<xYyAE%hTQt>?b!i zLzg~cqcC;<oSa+Vgo4mRAvhO`{ZpP<Uc%uJ5}rE-4G!4L3!EKee?~~D#}^tj>`umy zH5lQ+>Z!h1XI<iAqtUt&w-thX0}c?k{;sNfM%`ZuMtBG@Rva6w3x;7-sVfp%Ja&`= z%K@01)*B%;%0cZK;B^k%E;n|gE-lJdSnvBtA*%N>z*I3ULe0gPl?RHAeBHQbgv>QY zcs3MY0it)5;(?+*6Wzf>pII(8V=Tb~MbGa4ZS`_1ZEmGy*fYXIS9=<CjCcd__kdHy zm*Rn<v8Q{8!?}ilj3+^Zm<qZauw1;Q_!_`1;*G_egar4AyNXu;J`j(`14Z@NB7SS~ znNq<Zj0*c?Z+{aH+4&nc&JmLxI=Pi$g<PY;u$Z|K9>Ts3Vz^mfya8becZAp|%3~LQ z2M-Bf#*Jy>rFfvibegD>&TrAkh&K|y3^+{u(_u;Ka@6OE32Ti;{uYXj)|xJ1uSSKi zbeQJ=M~Mr<y6@Q-&W!MoVa6F-?@+1sfQXO4h~-eZu|0I@feIwQXieh{GPSNR$xCJ0 zn8+ALzw1XB^o9x;`7pe1NB?0O-FY2d8pI^?A{rNoi^Q)1{whXdYNK=q!|6zviv$=e zb_a04LYmCFv3|NlLkf|Q&$pFN8$-w14PEfSJgl)^fc;JZ+%Fz3o&i`RK2vOThVGCK z9U#`I3wbj_m2?W8r^ds3fxX1SVuG^>`woqf;XFV>DmGZjA3P{Pl{|%nXG8QZd$95= zm54B}BAFy`y<DSz2oUuks$#=7T9C=*)!yJVf$x0|3hgB&p%ET5w?^x9F=b{$6g(x4 z%3Sd7;C;GpgomIfq5X!KdN>X6skoo`Yyc0%-jQomn1{5#iHC^LG@~z;%TZ$Rw)l9l zQS0LpedA$tcN0?!)qn<ZC$UK`lLs}9)$NtYoxEf--TAA4QDNS?`<r-()k?5H9*qAz zv5hqa{mIQE%os*^HWxn(I#!&;1G(pEc=zT4;X!*VdJq#OHgI7(U5*k{u~z_Y6Auz! z3mB=)M`7rkgxQe@7COl;fSUve(*tmeOa-;m06Z9=Ud{$^{E6fu01xo@muoM*A1Sc4 zfW7qoh^&t~8P#5we+m$044|W$a0|JU0Hp#u%C$#K7YI;5d&Kmvz=i?|Q(G_0K^JDC zO>`kUJO_&LWT;rcNF@-hX<TuXI`FlI#@a1i@Qe_Dsa)FHksi#spnat=K<<rzRbram z)ac;UDX&i0+n^Nhd%*gtk}h&tp9j4J$Z8J&4<)+GJqWOqbjj*sK)Eh}I=Qi0UFbqa zKHuS7Ok2^LZ8Y9R9&&0^!en{6is?kQ=6Dbf)Z|^DdEvcqT&LdCsy;i{pfI(7N5nLC zJ%GIcYOexHT$$enTquCr2Y_b;&Jr8(Jf2px2kj3E*qDX6#Z@vS_V$0J1Fs^v&w<YY zs~s?N<LklQbi*iG6U}fp?ENy#%~lT=%0o5U>fsuB_7fZZpet(Zy6oxCCURc}aL7Oy zw%5VU0;sV=irp!2t$-1#)a9*9Wk0rO%dZ0mN<tYo!vsf*w-s*%ptn=tQ?P*(#WdjI zNbVFzlBWcy<=-RuKulxY0oYOLQp@)OE)j^ruqYzY8AQFA@;gATrBg0|+Sy1J2oUu} z0A8p-awXsj0Wx|$;1ef#70|;q;3_~@)qQ8VcVcS$3XteS)YwS^MEys=jRJAG&ja3Y zYOerjP0a31!0l>H!W>3ye8)g`8UTUp2w>@KA%NQ5NcI%yBG=9nJ`$i0?MMR-m9-FS zCqSt#fbZqT(z={0V5FK7xi!XMc{_^BxmPKsy=kXdMi(mH$cOnx&0SBgr`zqNTCxe0 zI+z9+DP~V#bb+qKb|R9y#T0>us=;3zI2XW5fCw%GY^8*faxVoe7I;r=6ut*cyQ`Y) z5XM6797-wAAM7mb))=k0jo2O~^^u2Cl&BFc<^i~X^V|(N;hLRzA4S4jI^^|fz*qqq z;w=DOzJuKN0d)eq%k7{RwLaD$*QiLjC$_7Qj1=f4_d38!3W&sFdtHFEjKcDfcZTsI z?sXIwl+S-p(Hj|rhbF#B99yId=5Z^4+NSDX0X(Ej)R4~$SO(+<?>g{>+}MY@L~3EK z!aT7IAWwUVZDJ_M)2f(z5*Q6Fc&NM;6t`APoVNiQ#FUHo7HpG*S|>6?C7{+7z!?#0 zy#T)!K#ilafO!hFa{+&FY8L`nsG_!xx<fEZ0JU`im?g2b2k;^#YE=MU21Km}@Qzcf z18lB#F+-4FcIDRfbTcD7-Ne^`YQ?kx^=hjaz_;QUl}h|Z%B-mAnZ};n>L|uWji%~K z_;PXVU|oJR{1_=%SQ@7aFjEXD5yuYIg$09=Pv4bgl)sOMVeK<+Tq>r6ajt7$abiNn z0x`}@TI7XqDSpg0p4FM*)3F|kgE~*p>SURCDgaDcG|gPVpT(&C8Ss%9HCv^BCl6}2 zO6Rx@wUM+sXEmse18`P@+TMVFI<=bsykCgg%>a(CP-En^Peh4r8(RGur?vy&cBjT0 zh{3x8_C|yJYC~Uc;@p>8W5or1!pmui*7^+cA(A2AM{J{Jv+#^78nbQxV6SLSMG<P< z9(zghDdN+`G^lMjhN&8`C*FLFv34QLM)HgDW%-}x)veLHTXeeM*+qOQHztdZ#RL8H z_(r|_*!cHT_4=jk?L#YAlfj4zIFi;b755Y$3phm_&4}!bu=QJ!%oM<^?*#CKib}JA z<xv4_ryWM|l>kO-^sp?12>3m$ppAwP66M)-Fx-L3fH?wv<xT}$An>tVqhn?Eo#aa( zxklhRMQ=1+cj(4^XCGrl+M*55i@7(Ad$}Ms-C)-lC1EB=7~X2Mcc-X>Re(#yw~I}! zTnTP2(3vpo>qg17-yh<gixa)t5eoQ~fDxZ#VL40X#tze^Mc&+d{m-}n_6Zf{xjE^- zE*|G4os|j_UhN5b3!LO7jPy*p2_#PlJmw|QnG#|nJjAjKh-%v&4^+4p?H}F>7cVr` z@3=8SOaX2NV7n{vK>l4P{JV02@UU*-ML;tcmPGbkV4^&L+mQTP%t(J1pq+A$iQfYl zBe0#^m4IUeu%P<^G(KyN2LVqCkS)IZ4c-wT!%qNK3!Ex8TGM!^-kW3G3UgyOv16*E zJ+@pdX7yu~)s@_jLUMrvhXJk?llW4=b7Cy%E&u}zV9<KHtgnQLz+Rv2<A6yx{zqcp zu%`ux%_K(&Q2Y@@fQ=E`djNJCgvkMT&Id5bUmds}$#yCpv6+O;B(Z&pWQ+i@O<~7$ zr~nak0W5RCBxgA=1IgtA_fRlsP2)@MM86`up;<~ED*NwZTVL7IR{1eA?kCr%jqaev zwAp4;UAA%pJvK)<B>(IMqa>qODRKKgVh_1|(-bThcNPB?@QAp(_;bMD#Dw`8Ku4ht zz5@&rusMca+aNHDyHNA=EQv`Hklw9mEf<rXCE?TK<SR;#XYEmX3~QF&G`Z^oj&GXY z+u9q<((U}WM&}DKM%rVdInt(4>@m?IfdK-$k-~2U-jZu{s_symm&uJ?pi7G}Wm&;9 z??En<?FzAUHh4Cnj`Nb^<e@j-fTU4eE`AHJMojG1Pg!;XOfuNz^?lSh$t15I16XtX zU2N3kTylSR(~f!Q%Iq8MK^~it{(#fP#o}RrH^emRC;%o#!|VkZsrb#70kZ^<*ry#= zILU!X?h)8mE<fTHY^uynB!iIqZ410Da`gt<i^Zhy9^fqTXz{0jcf?4(2K*o<?H>T+ zUE1qucCr&zB%1(!<0SSv=Ys-B>~&7QJ|VUpQR4*<^4kfpP~e$-etnx_k5OYWYz`4y z`z(;BOl<Uuu2k`d#K74T;4{Gf0z|MiS;oqUWP8AiPBI$skpN@I1V9@F<bcnp={ptw zZu@fcXNy+k2+~@SvNA#1Q9JV*R$*WJVs#Gy-Vsv{mM?bLLxmYd=fD58@n2%^AbYE^ zuS95Y_<qdnOfgl&OBnV9XSCdP81vVNsiI*3&gv(~wb_t^Uq&vYZv+^Q7NEvE)tK|) zfa?WrmTScELcM%PA$eY)3&sc)obylf^^OON9gosH0kX&g2>Uq{T5(^%DoNgyYh-QJ zMP78jCMJ4WZ}AU+1!5%FvMrs4%H{0U24E!gMceToDYpZlOac277+TZ#jmGbKUzI1L zKsAyAvu0#%c20AuZjiziNS+gu!nJ@8#7JzuVI4<>-Hc>{z%g=djl!ztf_&PtbD#1H z+$H6H;x_=b;^|_e2Xv+GwjfGYqQt)~fT@>#(~bZJZ4xxHy8Ew={{gklNZ<M=Q7&4a z<()kqI#wQ9;C3Vzh_Ru&0Z)p%<m;hHJgmT?crFI`c<dn$@eCKU<hEC|m?DjwP5b;< zP@kX63*)h%KAxw2JiXQu&woIEw4d#$B2t%MP*f}#JNyPPN4ydbWP1;<%U}}eu1oRI z{UdjwCiZ82*W0)CUF;jfHM&k$?3>>bunCw!Y9N5K(F5e#4yi_91PMWF8lSbZmOk>+ z9j30U3%d~3TYNxd;pWRVdP-N4I0p$O+d|Cm_}F86BCvx?%m&HtkPH@J!n_&41VV;6 z*bYt<xI(T`Z)KFI?d!7r1&GbQE}JJXOyDv`NQM9;R|8lEjFih44#5^0JNFP9H5-#` zb4AUuDBvv5hG}an!1ZG6^;^J);t66S1~~@tK16)90BH{du=Lzt?oa?@=XJVa)GTdA zdmEKV`}ctJ#iacSz^DBcpw+Z(HR#i}jF9#;sar-cgo3m`U)rD^|Ec|=CYiNgof?a> z`0WjJIbGZlX4ShwOk3{?xKBJ<Y=kiqK{=A01W-!>iUcCHTBmk35?U0s-va2Ak=koc z?L#COGHRaz+N$7@+5`a-?LnoN3ZTaS?Fz7hNbMG<HV4U5PAvoAIcl+7qaE9XvHb=K zzwkwDHvssU<1o|F<vyqOA(B@Guw8z@+7`Bb<^Bz@lWewBu2F*kHxJra7fud4$t?w7 zv-F@!z<UCdRazsyC?JeIjJZyLlG?+VhXfJ=_HySUbps@OZlcSX0%T_l;3@&KGZFBD zz$=R0Xieh>ZQH!twzB|14<pD(@hEWvpizwE9>DL#+le0l(5EMhjo68z7Q;RV2~cC} z0eG4*Nv_f9PHhYlj1RSmfIAA+)>|ix?KmWH0n|<gFh)hO9p=;?N5X5wsQn4RA|X;+ z?bJ5jN|FuKOsI7LY$s4G*N7bsMVN{t>(pifjutr1baZL221M;lBz#pzU7QCPB+yIl zMSz!_TKla9z7U{kHv!C7-4nq?06&0_WHO-FdZFY5z&HUUrve^#lE(n=ILT9hB3S@k z+GvS@S~qCV2tH4~9&$Gad?qkc?$&@8+K1^Z0IU`uox=e+^>gxe2jElzB=-V#QI|vV zJz!4(B<nCfKj0+AfY+U5EP%&~gjou>K!7mE1Kt*3V`el^R!OcOMsmLZxqbrhu|SR7 zrvV45+0K+}^sxX@kHH+*+sqjfU@HMyVKQK(K(4(!(3-~kmNjUMyQgheAwr)kaWGaq zP<$c4k8!U67~?oRc@yv_@pQ3KCuheyZZ5cov*S*Hy$kL5T&GrogbfsymjtXVRNKfI z=;cUwT!7j&01hk0$TeEz)ZRnF#sIaC0GA0w=KiTu>)t^UPEAnj4cJB?QY#an4yutH z;nd~<P8L`u*JyKR$2TD9DS)~21xzqPph)f?06bAi$u)XTfJApjH}1^6D}b#J_1y=+ zNBiVpFd!)~Qtlprmz`uW;7cc20;rUQ6XtHfQ38ayAF!=V2#L**Lj_2uErY?4&h`-o z&kE=-7>#6CnFe9@1{4b%B6liaW7iRG19TN2wtE4~o#YX~eF7Zf+MwgR$a6^OB7}Jv zaJlOuZvgHVAf2}X?{5_5pbLGO|9BuAbO&rHK=t+pj1;ifaO9UApK^4A?D&{<ItvlY z5p8uLwcg@ofUNjyu~ACKHc-C1kz6DY&0y?es11`a&{kOhU5+o5oF-7`CF{sMqA(1n zQ5X*AxA(E}zI;CcelgaLb2`d>1mFkFCjq>QL-YL^P$RIr+!p{mlXys(HR6#eRdbZw z*dkr%l18D%n#L>bjP62%yLurWD#*SW872>L*d9134{<D3(QF?LI2v$~7^ARF<DK$g z%6B9ARE*mF08XmN>mz`nO12XoXqHOOm{Tn`R<6sxmRHV|ZQV*<ZHw;nx&%qRm<i@M zz-40cYS~*U4|%oheJKy=TK3u~d*t;=!mx&q^2#X!d7VdIQ?2FIezTSVlYzfd8o?+r zEo%>Pmdk^MUXA2dG1<8R@U)ngwXZ1NmWM%{Uk9;oa>?k2fDM$LUUEMJuyQy-uF<^$ z7#fCP55I`|dVn20%C#r{2dGd5=X&;RDlQ@IK9~Xz5tCmtf|NYd#749(rdEj>n;nv? z26PwD<YTKx+lg#1V8lrZCAk>2IRX^GD5pC_@MpQP!*!vT8-*Hc8k^*;D-rm-+1{(w zys@Q;@^&!5=gpo@u}f-^w^LCgZ{Nx_D%TzIcAwlBCH$|-+ezAM9vzD-|1@fUWk0I8 zVSrXEt`v!HRBK^han{1ER^0i7$>>5|(OY5*bZJpnP0s+AV!3{kxD0Tz*t#X)D)C^k znf~kYTqZVJq84J6!mn@G5B&kw!N6H7Fs*I?ctC)1+gm>`3eew%Bl$#tt~m;@rE>bN z*yum&O!>c|zH}Z)Kcb>-*6AY;Bk&(p$2NE#D%a?IU9k@~(DoRGFm?*Mk?!<IN;5Fd z@)nEHn#SK9tttDub$SY78a!mTDVu?iAMCN0Q;Ovpouw;k=O9@jE*A4MHg-rfMXnLg zZOG&cNcM55+pD5}>Df_hBr~T9xw`^}D|1Ah0Qduw3IJPWMr=M>x1Tv@oSP5e1QyAq zfExrDvF#<&nX+ACE2T!55dd=ld>l)dIspHCjMx?fZgCQOGx-q#VzW1sd9!yhBQo@# zWy7D?`r^YFc0n0!BAO@<4H!;D@{AT6HR_5QFJIb!XX3Q-E5KLcy~IX)s?Dg9z7(40 zT|?#W1~^ZE2$ld=2w;E50eIK+2)Rb52oS;jNd6!|n8yLn3NX{z?<wt~imeqeI$MA+ zyI?gJ39xMJ0eC{-w+d&prtxxpU%R}`03l+vpETM>9!hLKX>_nW417ku#E%m7@5QJ+ z4R}yIT5QzLm8*Sw!CeH#$mJIc0+y+zrlZRf0$BE5NEq~}m??m6u8<c3MhVQ7dj)_K zvsrSD*!d8_>qxc~AcD65yo*VBdTH?<ED=b^9SB$@FiEaaFEtiLn1f`xz*M;(Xz_0E zRT2SPf#4xY0DRdVyeWXq-w0sWkIml>*g#E!#7@$76zD7P0g@X9x&Vm!Ri}17;2#15 z<z5V!rS@TfGPU^v*GX#hpVd#Ex4p?T>-16HsFydftBGRj@_oPo;$pGUdAgz&XJldh zSS;=a*hGzv<WN920eX;)Q{@7C2^jrOfOfVIEjUGD0Jd>zU6}(Bd_)902~^0n|1NNh zz(@h3hXjbAJEr=*z%aSJ0i68NHH@$tim(s~TV#3yKcQj2m`OUnL-L&@fSUpQx;>4~ z?{?Vd2$;hIfMO^46o7H{lKUlKOEv56axH3p%Iqvjjq>js180XfLl34<#-$1mE}*?? zLmS8NH|n+)cv-;cGXV;7FKWzV6w@|my;K4Bn~p9VC7|{tYE%sw`wlQf#k^6j(FX#k zZA<HZBfxSe4(P4CAEa<b?tHtW05hho+3A$5&0j%jj<`W=^r5cQ$EJ$UCOw8B`mqff zPs%m=T$x9$H<Et{(EI}cyaH0G8%F+n@~%Q8ehL~`<!)leL;Iq2tX!i9bfrXpMDn?q zCVd9LBR?cB0(KH0_pbqXL{TT#=sp3mW$&Q!))Wz>Xvqzftx0mzfc*rh(=1?uE*Rp0 za$_@exktcA;YDkIcK#{~i^Zh!Hh}fRNbyI2=fxew<imcPn6Zbq3GFrL-{64?o*PdN z?}P`ulw&qZ^Tbph{m)K_vT_-<Z58y6T%+hWu&8Wuv;`JJ-BQ%80KV5x1*{O$w+{e( zDvr$b5yj2TGr6o1pu05!{F8t$0Bu!^bhFz4yzH}+T$4<5l5dfmAVAaEo0aD|iM?5Q zkH9cVHo|5nt1)SYO&K;0a==C;zN;zIO{2%0WHxF%f5#BY0sO845!@g*_IpJMxJi=O zeGWVh=%5P{M!wiix|}0mbc>VRkA&)_ZC<wZhdt5E&yuAQ(L9(;aJhIh@hrg2;u5jZ z7K#M5laTN+Bx?Kur!^&!81W32Ci*>+nCfIncwfCzfQkNfB)qIn#y6r;c_6ZbT;?}B z@%XiuFcNMV=3bTQ>ZCJuvb`?kz$ny+Y<q8i9}jtE9b^Zu885ltN$g?%HWCw;9sEpk z;6cJ1tV^R0^JBJ6g+#V}AYhreN_;5b6Y)D@Bg^NG^3o4ZMa%$#?VJOkLm+7c94E#o zmIGFaIYF^kV!n|FiR~?z+5#Age!I1+0Db2}YJ9ACpqLef9Z@6U$3X4d`Z00`06r5B z5gT<?lw>7^WOo62i2cwe&y@i7C^R8JZ1yPhFaf40dx?FGll(xZ*iHsO82gTaIRZ8N zj)CJUB<G=aoB*BA!tini{jH76IC#ye@!xpuy(tWh-_5d@)=s8i(Esl59JqJKuMg7- zpP@1^{+%25imUNJP5ax_@MgFK#M;kLX-xSvFZriD)HKs<j84lOXv7{62}}LhC<j(4 zg4iJfbfgaeSTkxjqIQWc11z*I&j>K^y^e%Y5H%iZ#oiT&7AU-)f@DXz_RtK_1GQar zc~ihhK}6xZ@wCAv;?udsY#0@^@ZIGiq!1qL@)<x@Oy<`BmWZ#!14ZvB`hJokN7y_1 zX~1yt#bTpZb;W}0{Zz((mb=%W#?cyw9nS;e0!Us2^c09py-WZbURNWIy)KE>wFjIm z2`~B@+4~cW6<di*xwVU!JXHe7U<waZSbhxJ2oGKANKk(<VV43%h!^643d42}Z)tTY z4`FSPr}%`m;fZ=*CN}c#&;mM#w?Ypk??*{k_!5zgO^3=uL?uXAK9MV<3w1^96eKr_ zQ9A>0mzb5Ikz14D9~RyTJp{Emf3iFTwUyLC@{AN4k$Kd9O<XsKQ9BFpq!`IvfK_57 ztcdLEgZ1%1P4_J=N;@CD(PE;y7O=mVs5l+7i8!j=lXU~Nmys+NqxJ^iJ~0v=DceE_ z$%cTxi0OewO}^1Bb~gh&1m<CzozD=Ml|xV>#(IosJ=C5?a=sWfv)P%79|PXFjV^Nq zXhvJnQaUWo=xV2Cuc6%S)J717>7uXGvbTVVEsbOoB}QyKskY(yG^rXD+E7n-&ptyT zj~s~FR8Agu1ne#DA~wqCN~~j%oFpbp4d4<nVd?<aiN6&aMRRx59NyTUMedFLB>=`w zH!`Bz5r06Ghlz>5E#NruO=2Twqnit$y$1@^J=!Ax)Z-wrk&l$xjv}=Z5b1WIQfMT^ zW{Zeh<RLbO-C(7-10E=Eql{1lxB^jEF#&j?#s=!h77ox2D)3Dt3<-p3hhdy7Cd@{F z^Th0ZjQ*_a#$tQt>J52N8;Tm6priA7(HW)BM(4t8FdDX=jp;~oVzR;XZa>99{0)G! z#5?1GY<%>!d?a^#EiVO7%UHTm_`e#x@}1oC$}0gVN9{aCfb>5QTfZg!PXL(PO?aUH zoj6rz%nhW!9VKPHB>j$nQZbT=fcau1tdD}D#T~^)m+MNS+K}`+dA_sTy5#M{*9B9K z)dekjI)E{GTk$ynhVRj0qf>Mx`HzrXDz=INTrZBg(+dKq{mPpJYC8kI7PHPZDx7yZ zx_edz!q#zvwJKp307i;acpz*0B6-O5DzPnyx$!RGV)0@;(3-~2^xe<Lq@O?i+f#sg zZrfIu1I3$)ZBsy4BomO_E=IBs;CnHWlK?E_k?=;0l?e&I_;0n2<XOP&QbV!{%S~2B zNcdXao_`>*@7{VVcS!7*y;cCpsi>XkBxeGibdsk4?>Wh{fNmOAEuD4(qXaA+z%fo@ zzpikxlT1g#@u8&y;Gqs-P6O<z^(~S|0BqKf@KbofnNIRg0B6cbVr+c)X!%G*V&wKO zm=UdcH#d8UY0Y~9hlr7U445ZI@;TrL@zr=BYiB&2xj=ZZ?OFhxqaF_w=|&wH54r~< z#yl(VK>wPq`@OO9Fsyc=^2Ei~znDO`7TajW3_@jGr<S%~d7+Hg127)yY6V~;U0#!G z^nn1S|EJv8-*jQkXC%L<;5US3+6`Us^b^NXIbBSmtHst6Nyj9tohrEtF$9y&V7akA zy0l2=UOl(Gl^AVphHD;LaWpM^mAIGqIkBzKX~n^6cbnuen7vWkPf;-LPX}<`LIk{J zVE?*<RF4HP*wAB70&w0*bA_=v%ie>i_ZHYoY;?BnP=;&e#xB+6N6PS|3uEg$`a3Tv z+J=W1?gT7Q7MR6M!VkDC)lDN#0;yAz@TOd?6WE)-k%TvY7kf!JMY+8XGg^Rl_=t3- z>GFtI+fMzJ92Cio@l2yd8MN<XNMdX=E2)sDgZM9Eo1`Da1DPG~A`iM5?l5{2dk!!{ zTrg(x|2SD7(>T9U(SwAT4zdHFTHIG`bfK=O*-UeTJgC`BbB8=pSqjc6cGZ0&JmlbA z5Q~QPVpazBTZTx!08AI#LI4oXrCsDB(LJ~|)qyI&tzwF3i;ExRA&~}h-CY+d&?G|z z4i_+T>o6jv7n=4EdB}ljkCBJ@&FEBJQM-XiFB79?D|aSPn!~7_#PoJstg{}aUfw1Q z=OUk)jxPCmmOBhRMtDeMJOPG_NyMsnqCAlrlOJj}z8otLY6}T-hPad1=oVd3yAsKx zV$|$-^f`Ija~CojL4+<nHi(P4Q7X0$ox%eZuEjftxAH@7Ct{?+h=}83d&WmZ`vT^O zyNZn%lTbSn$(3T%mI7`P+oD;n()&h_nd`Ta7wtn)=qX0K0>H6Eh1lpKU9k^4$huJ; zD*sH>Skd(m8)10Fb|;d5h>2|_fOHGm=)(pjZuT`zLL)rHYNNSthieGy+rcWBcIYEE zx=&Zqdl9wg#iaKd;4k9dc%Xl8S#PDR1Ib663ltZV?|EW7uOr{{0mb41n{ek)jL$}R zsHB5ISZ&lo(Y(sYV}u9YBS90zR^NbsP4^P}j*W297=?%Y+dhQOO#b&+N0+H$MnxkQ z2;_kGWP%29)Y#7mAh`_5>*AhbqxIEjNFGPRD8=OV6=19Y<NCJ%j$*B$<yUzaU-9kE z1;Rr#F9ODiqdrCLlJ|8LgDrW;yLH(U<hfaF^uNDX&DU#xpC}&k)}11fYx2el)fVE^ zL<N8@PEE`OJS#?Ghhm?|gTxNSic~`S_e-da5g;~uewGs;Ogl}y)~5-x5#S<8Y*dq9 z^_sWc$awHD6xd?&FnOrv2gTM;&7uMMHW>?q@N6ZX4OlGRQ9Mcs1`mki;$pxD;vK{$ zp_K~ae1X1XElpS>JWNnbF!qZs^bw;8y0#VX1Hv!?hlpb=;x-c-ktX@&H$15P_Tui` zBIcd(K%smS`H*kNE$VgyJkU?ewZBAh7#9c+=^ai6C=<<NqxM1a93VDYp(|>(uzgq_ z)HwUK)78zx+>`#Z_MMgP+xisOJcNA&3!wT5`zOG@;*MgYI$bHuI#>X`05x9N4bB$t zCN_Fp*I$YG-4J`wfz^x!d?{uUGCD+ALai1F>paxz0mlkN^Eu}ps4YkG52tn|V0~rq zS=}&d`YgLiPr>l+r7)w!6qAPv_Cs>y|6~AT-}+)x`?Wlz$g7R^QxatC0l;@+mdc+3 zMk{Fm2j})3Dq+3=9N}{LH^6NIRNBsD`6&Ss?E-j3pr8+Z!#u0o!KGXvJmmLPDcTD# z1brQFpLmqmsEzKRwgJg)BY>J63h|_XT-njjGyzI70=0y|7Gfjce~X0ZBApRn`&c%s zCR=V5%k2SpOH7A0`p;TN{m6Quo~&cRRMlmGW5raJ9l)I-kM(A`wpc;!)LjM@u; zSH=G!>xE_Z{Pt*aW$Sia^N@2Z6XOUuzZRWy#Yp}FxK51ZZNU3tEOavr;|DR44gmI` z*pI#F%qkfB;rX2XsCy>@L*9PyGwd7T`B~$Ceyonxhj_LUpF&J*3>k!JA^WGyX*|%~ zVn*4g#4(1v|If$j{JeLlk~hK=m76Ikn)lfE6!e=fH4cAhRhYGay5QMM%s=6<{Q`6Q zP{6KIBvzBKiJ~RSk(3B9beW_|fHBFaL4eldeK0$gCd>)|262qos7PZG8z$QabBaKQ zKS7Nb7cMm&U3i_I*mhh`7rt2|woU+kCS!?@jUTqdey))lyIhyw3mAnOwx*<=Xx~x< zyNC%<3Fs$I;en!O*8u9p2#?~muOQ7H2)wKEV6W<Rlxsw7lV5w2;T(C$uf08Ur98GU zma9jrVQl9T!FmFyT>{|2#@TX>*i%qR&m&nWKqcAB3r`3fWjeY{Qr{ra^~oS>Fk;&n zP%m(wT%$p*E{7nQDuCK>z-)mnrE1iq{JXiEHqVlJ7xc%9Nw5R?V!=dA+W_c0*oCQG zEDvh?Ah}(P+B85{WuHnv9&msFrL;FW(gLJ&29lcvh~QDc9|efualjPi7L)r5P$@tJ z-vEvfAcB7Yo)IXQYuWMT-?gy(_WA+kFOsTJ;j?>&1S34y&i~`F!R?u%4Kbc>;^ktq zt7Gs$(LShGh{G*8x)*X|hPa?#hwr!|n8pRdLs7?Ls{4xvil+ch60Z~+?X7xc%C&#= z!Xl!#z`3Zgs9SA1x-_~<eg?_I0;s(RV8QXCTq9n+r7b!zrSn@jsBHt_f5lxT*N8?W z(P>Ed?Pk>W2lP;uzgEIV@peHFm+uTDGX*SffTaQ@a*f^=Akk-#{6k=v+!p}@WQ^nG z8u8XPYMXDO3qLzeY+D2F5je^xy5|PrsJ9=IV+14&Qh@UWs^!iDtSc*{yBjqKP@XT4 ztPtoe_Zz?}0XmzJpR*Wpc`*7t?XyyzUFE)`YB1|&syE5sB_5)iMuq<;$Tlh5#X}qi zDQ9NstR`jyP7$B$ZJL!ICAYVGrwEX}>rvyA$?0;9_}$i_^8G-wGTLJD_I5AdX~eyR zuOyik?4x-;Ya;5NDrazy!0vMU0_b#cxfa{r0)+V;l4As@t(yUt3NYK+KVIYzG%jFa ziUo+e582sIpo`prfb#{W$ThXk1c>?wB%RdyM13@1PXX%hIKcG+J>^=Mmjnp29!9dh z8W=DJu)P3@P6G53U^lfdph1Aq=oP>X0{!Lw2Jn>t5tw9sEe_5RFuGWP*h(;k#{{VO zB;Xr?D^y)Z1?Q!4cgw1Q$bZX?nPLiY6QEo?LHq{*;(9#LnnwSAKWJYr5FU#Dw5r-{ zmdx%6__dgEbPV7wF=fgCnET1Og<;o3yV{#h=LrzOOQ<nM5Wy<I0|M00)@l*kGN85- zV6{{04B*us(y>Qe_X{vMS=4bEAYpi^(Ef=fU>gAYwQ+KH0Nje5=IgF-O^Q_*;pryE z+U<aXsP3XeoG2#Cw$r*z9`f=r5}vGL{}#qSu9!gtr%1y3!G1sNA_4MpC=wR4+YlIP zx-TgWZ-y%lnMnA;#vFNiiEZJFp)gn(J*_KhQ;F^+F>N*z&_;;>j2IqRQ=g55qb6dz z0MH<?kJ!kaE8_1S-U&SfEkT<aB4`zWsU)(OCk4ie8S`yLLftI~u$=>32}laibAJP1 z?SExHZTsF*w}T`X2+uZRd*XAtJblDvRN+eT0<qCx#epp~A}JOii^~Dk0+n)&*n(qf zZy;Gm8K4p025{^*Uak?ptw5D-fwe3Z7$nzzVU3SW>;M<Nru}9wZb5iR<OV`75|hYn zfa}Bq#71xEN+LIt?~lZU`2;ndrVz%KDdhqrZ))rXQR_<>c6_MW%4~aOtfN;ODS%oQ zwORqx4g=gFz+hsreI`J&+>WG|Y5{OJU{3+s^?tx<0({nK)Z|^E7DeV|_^8OM0j(C9 z2X0Z3Z8_|V%#$*EFBda2wcA~hQ%K%-MV<%fr#yA@YKOS8@C?n&nzGys;KLZ3DFAd> zJ7Sby?U&yZMS~$8O8piZi^W*d`+%#&$KipZv($Y;93IKhOKh`}m4|>QD8u&l&?LD= zv^33rE0Qn881$V0_NbPs{7v#Uf*TMX^7bHLmbjnzF~G^<rFfwHIpx&wMtD@n5b_WS z-6LjLdK~aq2mS>3hZtjf4#19j1Rf|VZ`9rKP~PKFp(9dWMm&2LJ1XyIx<PsGK=O^4 z^4<$zt|%z)l_xalROt*&aBj2ZJ(PF?`K22(DD49{O&r<ZD*_vd&q2cZA=ZB}pr^nd zaxVvP#5h*&1Il;XHZlc_WP{B$QVtg&%%*^Y1m+9y0~c+c7PvsbXpT&p?AUKwWCZ9~ zRZ_EGz!@&rqGqTd(MySdj~O-<xE8>=C+^kwy=`*9k5#nUO!1O~fq)_baxe<O&NOP< zUDpc}T_%ZrI!V+g0{EGfQF1K@TeJ(KZm0O$>?*LEBpU%13&g$JHBN0GByS0jgHpg6 z0di0as8<6<b+D;gh&uRCl3+^##*;4q{}dpCo~qt9JvRt5+81zwKwJ{b8{dbaJ`c$Q z0z(9r0Jhn%Ky8EoYEL0qB0$vqqC}eu1<2d`fDUT+2?9n337|HMDdPlz{&LFzcM6;< z*NFWCMYt3R`-h%#uLT?}z&6`xsa9O5y@}*_0gUf`z)b>g%QZSnO@P|??Q}U`fJCPN zo)EC{RQ}-jtwP&hCP|wo1t{EUfc3TxbA2A5v%pc3Tn=FBBkB!s+v+mg=dE085hUyF zpvxHo3KnbvxJH11Vhcbw)dp&}2(&8_K+R~h09BPktxi62y$EoHz!JGeowpAoc#q}r zz5+z>DWFn-biM@qMggOAZV;HEn?`LUMsn27y7Utuf)fDa1$LKvD&S}V7E(ryJB49( zjtf2}K$xz8Hw8w>?FHCT0q^!<UeO)WxuTOU>vs&pTnpGqV5r>R0rnSICfDdSr`D;n zU^|JagRX#~0=&QKD0W0FSjYU;Z^bkge$${%0j66S;h{S1Kw!E&vXJn<X(Z&qa6Tfs zOT?<TQ0)nMdW(A!^$%iYCzSM)ZZCoUNDdL`OJGR<d#P<3`$VDTM{r+bQRU(y6alA; zBRk~@88`P(x3NQ#jNGw+PD;jxeEDtrjoK+l25N{ZmU{*uC-9M6quHu#n#F$o<wOBW zV!!^va$^5bNh6;|CDgW%!3W(04wbtD;8=l!<QlCKkOc&#NLa@cTP2`apsg?cSPewP zb`_GOKtk>ffQJQ=a*cXwAVO_ZF8c`(+m?W11b!pesJF%*_0V8HB*O);tR&ztfyr`> z9uwf^WnA7A=qL9&z-AhV>@5TNgS18%Zhp+=d;t>u9Po%hrCg)l8ezEESH0Qxj$`HS z2{=KLC{fNKP@99~69E#<0(ROYJbaZ`4J?4#ElBPX=q-08;6s5ueZ6(p>_?m0Z&n>H zK(V*dKoOiOP$jn`;A??%e3+9vglab+X%wJ#?gYFnK(38;QoO`wJKiDz?6$oIui!v| z-PNu}`8CNTcgH>ioF>3|r9HJ#>fswRf0PGs3zFBxgT;RUY^h7Znk2t|yI(>hJTkzb zoow1(E$S=Ro-lnQ&nzN={=I#;aPLVkG{Q4T+@Xyw*NSPeZ2)v(>SG7Mm*PFe9RdAS zo-5@Vy(mD@??v*x00Yv40JfUr<nrB~{R8S%`Fi;FC=F)c7`{$YBRs@(Db07Im`c1B zuu6QI*r-;aXleV*`C@_o0{lW-@U+0X7N@{-N*yEJOI_K%q%D(sAfQC~DUoZmQedQf z7bA&jtWoa@E(dHR@He?3DP!c#{!tun+>&S~b^l<nKz*pA6Al6OyPyQgqXG%J3>iUp zW$<LI11fyRJR`gnPF@NT{&$oE<tY-stW4N*xKrgCVT`nqeG52DfZ=R&0-hx>)pT@u zM_{zvSxCAnVainkV0hnJQlkkfJ{f)yNx48m?rVUD1SZHe+F02@%^qiLCxFRxrOu}a zbj+9Qy`$8wuUqWhETk@YFbe)Jl5Oya>2<&%;-2ES00R`NLhgGM`62;YuQPzNb!?#< zpsf-kHdE_NSp@6@OdjH*R)X3xfrGu;yH4$5B;N^;{mTI}mGW+0?L>iSt@Brj$>{fT zV{D2y6EL#UsSWev08f>S@X*?S<p%E~Fo1pvxL%jz<r+obYk`XGmh%w!Wol!BxSQAx z4Ql1tPi*wCuBh!m{$CQ$6mw#2zxH{ATq6cJ)cCot=)bDZ2CS9@qp1Y&UTSpqT4<ML z5*p#bAhsu4%<a}LfUCu<ad>k(SS3D7Y?M<Hgy9!S>{&8lP6x2FCd@g2&jlta14f+N z62`t9_UE>1xO1c=gjpAZ<4ogdxkfztBWnAXPUQl0%LS;NBQQ$Q8%6ubz1$7k#Id@t zmaCCxS8)ycXNpIPjh@q$O1uEcYvNwwO91QZvP!Pen#K#3$?kcyS1?Ux1%`>&?V!so z;?2cO|G`6IW|u*LJrvV$xu(Xq3|L(T38$B+EdX!|F+i@V(c>5d>|C5vB-B=*cA@~8 zG_|{(+Sf?fQ=;}AptGt!F4xrd5+JsLj1h+j>>+n3-~oZd<(e9=)Q=G`S}H(s>rlH@ zfCv@<9ur`NeK>%hQ=orY1Sbhl2cIC}e|nLfuK@h#E;@B@%05JZb{qs)E)YfVng9{Z zL-L6L5i9~6q!Bw(J4XPu6-cfYK<y5|Eo#h2ZM6VuUm}TVjb^n2$O@1H%k^&sP+QCZ zaJK-3TLKuU6%x5NwaEh1!2?JV0xVh{1)M5CY+nMl)C#Gm+^|Lk2s4-XrwI_I7O+Hs zFpYqB1>$lo%tl)G5T<<xT_!rP3E*G>T5b!#c>+7C^^DduKDthuht&SzglzZ5=}P8L zQ2p2hMslYEt`-jv8@;0IK=BuJ1D^PjHeb_6=c~^EIA0~UR{%>KcoT5Gz<9au01j0i zy2`cKI0q)t+lZPoGNLxg8i64KeO24RB$WcSZ&ABg05y}`BtUF5SMZ5b8v+<68zeg> zIlx)xVMxw)U@3ru5n?+DaHj*O0iF^d*JlIx0R@{N<=42s%KtyS8Zd-MI`-om_6kiO zfdPubeprEwEC4WOP?9A8rtZDu8gYEbICcjT1{-p9KY)1yt9S(PiU1LO0bqH#pIoC- z0n%w88>b7PwhZuqz!bSgtn#SF-y`{ztFb!()bedoHHyZ|liUq^42#;jsGKG)61NB3 zEnX@%Dpm$j<CN6iGaVpz5MZGsUBpI(b0@WIgr|$xYBeLzHsUM9w*H}S8vVSmjO~}A zPu5xuYf?1u(CI75-3wy6CkOZeXEHa*H7ZP(^F1Rx)aT{gU;#tJUjr!B<rKL_g<<FV zn|Ko9r?~O7nDTB<*!RV=#72c-=lh#@ZWi-=#kT2$Jq$2jmx8eF89qfa!h>zy0Ag=t z6$~g$=Ui?;c&Hnz4kp8H;(4U=Pw|~%qcx2uEN##PXdlJcWM;RS)y(*rajL~;{D6za zUx|&*RD2lC{YaSeFq+2!PY9&s8Zph07hB0@1h$sH?S{IXBv2uDW5DMERE^OUvTDMd zie!aALhhLWp0cpWHmVjt&3@^LcRN@`twxRS>7wdP3ZS+I$@v20U|sI;(onVBjQ~7F zJWsCCtpePf&*dS3a=C{Ay0>$mi^(7SN>-#ef<GfE7GSgW0$_>20jdY17d0HAw#ml2 zd@nFc?iK*v1SlBq3-(txN@|3Mz>Ad&d+VsL+@k^SiX&sKQ)1ic#_dR!3(#tJ1D+B1 zyIiBkT?=$pF@i4z%H;M3?5BDzk!!^B&yn)wknl@I)ZHS$I;!W_<QlypK;Bj(d0T)) zzXCA$*2*<vM59u8SHhmgC*%$RtfLI_(9EdNmZR3gLlW<yvQW&l_7UK>;$?WC{F%Yt z;f?TnZS2_g2G}DNUarcpf5-z!0UE_DF4BOf#RKs`P2N+wEW8(<K9Hddb$hj#_OQk4 zi}IW=HuC%3>rwOj-4y`#yHR^Q>e^#lDveHXkld~SzGy3vYs4pFBjrmW`Pj9G{rn(} z6Sc>)u07sG?IqV99|GtRQG4*qfwV_Ant&yDLT(Y@8-arMD6q%9BsIb#t?);Ln4&2E zz1&$M-qBayh4RqR)~Cp~2~3x3-=A)vQtmHcln~fazI{>S=L34nJrHo8K)GC_T~tc? z)>%l{@LFF6@MPr@)6r!U71_oYiriIzblL&fj8w`sde^D(<RkdOsqGAysdDU~gpCT{ zhavYycqr@;4Cnwc#V-aNFaE(7|5!yrP7X(MyDQf*fcFFva*f6-_v7Td7s)BETn_@y z6S&QEbYZ(rY$LU#3~B|+<c<T-;`8MiO;pCVkndt7rwA}0Tm|4KmgdO)9e`J0PL*qP zwE$s0K=Oq^2f3>O)DB_(4md*KIJrja%2Wu`e^Xti2oPo%fFHE1lsgLWXMxA%8Z~Oz zBg`Ts?+Fm*C_rq3Fr5<sa|Mo(YxJ1_#a@ks15}Fr6(B2co?N31Wy?f8cr#si{fwyh z0PycCl5)oY{v`0ZYSpN4tiiC1@Tj7K;k4oy@c{8CzydMP3XP(5)<}25x+VenX&Gxz zjAB~=Z4-?Nn<@sCJeZDTTY;W(4*-l7C^&C?Hu{#KN<t$%Byk2Ms1Y*`o(s5C%$#lX zhOP{He?+peV(l;YPk=oIc9m=77ykCUxtu_u#?e{uu)yA-l8UUn5!)Cf#R8~J1k?#o zLq`11LbY|U2noLth8jK2J|f_#(I|S~aA$YJJ}=ot;3RGk-C{gY>;Fr)n<UpDt`(~} z?V~rF8UWvlV_)b(Ya4|r|NH;9vs=%N_xZv@j_={dbTKO{qo|I$_&azg_eI>8Bt8ZY z6n=BFt$Y|&5w|*uquO12TxX+8T!-U<embuI3;)-)RT-tnLml4%$cbs3_W?}QfQ@8I zv2}I%PqnS?<QBq1pSlz<S$r%W=%?G**=ZBo>!pxa5PYimI6Tl#$K~v$NnCvt()usM zBGvl5_`j$BG87u&p<Ye}jT0Y+2a5V!)C=*TYqJ0&>rrB(pRU8TwTF!bv`0f2)4$Lj zE%J2%QOpt39*+QCa^PdRv3GR&udsRQ*lcU2Jpa1QH>sDk%}GD?f6!ffHL(-oY7pD{ zm9fR>XSe<TEBSg`yL{VGwHPJtB{%cL8;WUg%PZh>024EI@ipKd;vQm-Phy>08w*=2 zKS>@Vw&z*}<$s|;nVRfpuYJ+zC~hyF4Im`|YaLsNAvKzz>mczN;@FA0w6M>naqlOU zDDHBAkGl>qQcObU01gzh>Z51JPS%CZiIK`Hiq<7v4C;c1Hnu6eN*?O#39)U<0IS8Z z4|Hjf&%1&)1APtbDFw?VgQU?^T?tQ?V+ZT<qv6L$!49%03;D1oOn?$`>`+}=l;x-F z*^S{XZ17w~W{YvM_aK0Q9Pn3h>@T{s$m`nTI#bF~Tq^;878BRI;@IoDw2159U2p$4 zmBsbh7H#}%RlKdqkHiE0&&I6o3TbgokY_RRKtCOqt7C#2;pr)U6LgxGL5gLWjYrrE zJDk{HU0T=+c0NQJ?Zx|ut<Og#j^=E-vJswc;?~y5t<A}6)BTzKt4SFdORgms415&p z1ptdtz<1)<m%6kl<G;I4tPa}PsKY>IglB#6m9)|2Vj9d|GI&UyZNzUOc}={9m?x$7 z!V0zVF<_K-k~_)e^MP22F8^_5b~eiP!3YnwU`^)t5p5{Tmb%b>-Q>pNy8OqLrM0;m zTf9+hYnLnVK;eFxvxKNWF=s{d7E=vnWp<6t(WTY0`tZ}FVCNS^HXl$X2BgKYYF%2) zTmOF;e@{}uo1cmN%<-hjIM!RyTt{3B#Z>D{fWL}qqwmGBuXJhAMy`&V#DzUr@MZGQ zo!esDJRl^lA=q}`)@+-6?<Nfrv6bFfc?!l~#;ysvMU-Y{r^rK;*NW|+pMm5taqJdd zTG+$$_8jYuHn&RHR@{AEx%bPnshIat+cHrQ2fwJ+mdABSMgn+sx0k>;z^|QTU%-6= z<mf;E4{;f$5`a$}_#=RGKB7KQDYxazDl+~6;0h<<ZMe375nyA$adg`abs~q__5$rI z6$=r}(q%)AqXA_A9{8fhSCt#?rC5+WhJ=sVBFT0FQJoAD*j#GU(VZf|0xSF<FuFq+ zlS~%)TEJ+G?1C_Sei|Gsu%+DN0JQ?!$u&AbU=#UFa)}FLd3!=&oR`c~K+>_;ju6<` zLhEv(z}9jt4F45|8g&#qVx1%O=JXM&8ByQg$ATH+HI2S)uhCuFwjXtl70`nGP+!|G zoMZ&x2Pff_vMm<bOE)G1ctS=PYtAbKXj^N}yIpgpP~-6o*?J!EodETipg9M)wtWI{ zoNL=VXj^_?g>j6hIBosU{`V4SpHVDCu)i)FuBU*2*#KVlr<Q)LYS?g^YuksA@IMYB zNe_XjZO04HPMo<1B?7eVd8+$hgzgZ=Bzp-&ZCmWxX^GMa4iKPi(|~G$sBM=C(6%Pw zu%2`*Z;uGjwkA110ZGSVD;J2`mR6^2Eesa2*0!CYHv<=n*EFs;Mti`s*JUk0*XW=s zX*UIrc!mnm?j3n_GuRQyYI*h)^K*yo2B~Fe%>jUkuFZA>lsQQ;;39!uQX324B$_Z& z0lWr*1snk2t#%|O0A7P2^G^Z}7NE8dPz$v?OMuezM7UibOGU!_GVS<3FQo#-<oW{F zyR8TniUqY5s>b%;J8%c!HpN10JE#uZFHkI~#Z`0d$H^B-rU^`t#OMM6TE_nC&CLQ> zz_$t$oUbSeW0ETcA`57gm@pgBRyPY^0pFqfh(Kgq?+9Q4Ci&ilvAk`fdWz08x(N{5 zwnR`Ykdyl^pq(zbCgC+Otj1#F(F+pG!K?B`R`Y>CFG(yN{*`Mpt7&tDI*=%SQ!E%G z9wJ`Tc!SKQ>%O|JVuq&$weqMof(CJnnXbir_NDzU3B@1@d&RLxo}OY}ce7`CNbG&b zx$<l)w)Y*E%7by-r)CZA7gK*0hVcbSCo;)99I6f*pzJj()R=GV2L(}MFtA@enkd&I z=put6OXncr7mUck#ejVU$id|R{xJX%@P1RUQXtB~Mb4nEmm9lMmlow-ag-|S+Sv9A ziL48SI9*xYN-nQr*}I(pzUmCVkc5^p2~RU=seVZK9kxg^OaMs&$(%yTd?&FAzN%2N z!by0y!2TB$jrWB>>_c5z<lC)Bca@S69+IpC4e%bonnu6(*dGYt=^|z~Xz#aDz}*4Q zijfQjtPxY=Ch4F%n4-}L0ZKbfZfq}I)|S7h`{2O>IYF`mA<HNrIy344g7DCUGXW#S zQSUlHfO<)ZV+mbar0dpYzr>}=3484?_4SKQ$P|9*L)IfSR*8NYbAB0Df0;Yz3BSy> zzs!%n%#Z2_zs!#e2f;7%<1hP;U-niuEn0v0pU;oelIikfUC_ICpVCyiJe98OT~=Eg zWOIpJeKtOPc)V{AYK%)&Cxg0BIdrBkN|(7i1wy<ganS{3iR$XoMA_V6ezGi=sT($I z_CB*y>1?ttH#<?UL!ObNMvoagZv2Fad+j}GpUG3E?mKPzjG6oGf53qUB}&W6lNFU! zsX242Ytot8d3D)b{rm+B7cK7Fum6C7yA2vVWN6PmK|GVLUKGzI<|ec8AfBkJtglI? zbJ^YFL1k)wG93?U6LpE2WG-1Jacx~@eyTiK9<RyNCF8lOL|VbilJQhJPDbOojFhSp z*?2k=&xcDZe0e<ZaZ4pr5m(95=}azOnvB<HB_@#Rd9~o@BvzN4SD&g=@O)}PJe7^t zq_SDHMw5({CbFrr+1Xs31ggjBv&%ARq5861eDcgmla%LNe14)jRZdQ;Q`uZ#7hmyp zN!9xNWFU>QWNCH1eCb?jUVU;wRVpViuRdXynuHP%UR+<73`&!!N?lV~=>?_LG^DQS zvZ`cxqPixNE*CUOeR6&(Q=QBOrFEGF>7cZ}u6ogeOr~7bRG!S4Qdw1^E?1XSZ3Sgj znX*iELdlk8>Jrsl(-qa31<ATlQ!tyVo*R_arE0R7bWpY^kq*ieb#qOOC%RLasV+~Z z>y#3=E9(-AoF^H1l401nRf)MN6V@auWg`jmXR2i;m32v{r0k?sV&clwl~t)S@v4Q) z&03*DZ!(b&m8C3E-V8-KamZySS6?@;K9f=%5U;DV@?^5MHkF<m;K|Ni6vmXQ3FE*e zbf&!0)lY>?rnD}l#!#iH{=yclkWFWEVWukT%c`=eL{OPfXDiLrWrE78Og0xPQe{ED z-YgYMA`ENSMagQlM^KeXCl{3`@#HLrj1q}7^?|Q46Qt&6>J|lI-Bu^m;}}o8M+M1N z2`xy6QCBBrGpf~!3N>nVs<JAy4D*GS5PE5D^F_II`3Y~*$j+yV@jkVnc`cvjbIld{ zeS3w-RdNVuJ*$O6=wr_2lF4do5tBw4sYxoi8fQAy>N4rT+m*UdMg`QUk*cquW4S&R z-mthruQRa_)YjM4YLpE@)@Rqj$iN(~WfTZ2HN2BItPqE$MMKr3%F|I**QC<9vbtoV zMz^!MMRgfjVoj#3Ok+zrNGIke=43)6k$+JjLs6ek%2g)`ujO@#(!lkS&>;<1klI9b zGHNo7yh7Hq@Z~cI%4e@OQJYwlP@=U#Z8A|-Ra;+CAzxj6U=3MYU0)N_W){e-tm0fP zk*G4iC>(C;GK&&n8)Xya<<;sO3_`B?vx#)M(~D|Vo@|v&JjkY!>2yL)^?cc_?|b?F zobSu|ew<CKXJiXnAa5c$8E!7A5iM7x>Q!szGBt@@Cde1wb@>HV$wV#)tJ<#Fn#|l} z;H)cj!n&I^ddj3J)8aEmj+!*~5dF7~K0P|evzhw3vgAGqMvcmu(<TiM;ywBV;oW#R zLj<!b4hd$J)~Bj-MVj6!>eFSpR3?2$P*+)+(15FfBWOCKWa~>6G#I5pK3At!AEs06 zxPC{$#^rcvraoQH#8*<Rfu<y0t}#e4&QHc`>a#WtrZw|wPzvg6)q4Me{{ADUO`bS; z{4mX{o>(@N1wPO5pcfNi1WSUFK<Ss;j8}(YrQ->vKFvhQy1Gmq+N1OOfuhc+d8;#; zi^}u&6;C`|BrK@QXtGrSN|ke!(a+)8pgtWIe7<JIL}_(0uIB<ZiACY6qbyUSc{}L> zX8n?&+3om(RIW-{vfH^7k<_PCxoj{oU6GPULwjm|DyzncmoADgPHM1rYYW+OT%}RN z&>%UV&RQcZ(hEE;C{dOtRV}Viia8MvTRl--TP431Kj~z(mKv`4v=T{F$7PpV3uS7w zeq;S%A+j3lZDA45sAbigvT>P!0#@fzwOUOiFs!xcWXkKSGp)6X+9X}C4jAT7Lyv~7 ze7%Rcs+EZ)RSIAEMb*i4rRvf*Ph=t4xN@aM(?ZR5@u+#UG-Fk#c&!CAmHiK5a%;T8 zh)OfcL-P!ifwko`tMO5bYgMn$xvTb{D&S8BY?g~)Z8@+?aYd<3WLdDvA_%R;K2u3h zn#r&ZOXpZU(+3b{Yc&pNaau>i=Tcf?o3&`2p|+=&X$p}!mnX}rwaUf}6jbZ+pxAZG z!nUwwGA*HSiKrI_*<`hC4dRt`nfltW`CLwu3zZvn*&wZjjq>4DTUVM@b4Z|dyIFy2 zo^ap@@00|^u6U7$5TQ{0e6B|Iw92HN0xe|&$?kE@$ce1%NEJg5%vB}hlTxMARfVcj zDT|YJ*`Q?X!dh8?hQ&-Wo9>#^CL*nQNaIc|wW9c<1%8vvhds?(X!F*~hiTo?U0<)# zva89Crlp-nF=@-ze8-^-F$Ap57NelqpAOqfY1v!q`F`(gSvDKYDvR3vkihqaIO8xA ziyS`~l_qlwv?SM*K)+(n>efY5ey?~Jn-t};80a2wGYIbmcFU%>)^rub20n!`*D2Zn zS0D?ANX6Q%i+Q^TmSBWPHUhF8=P&A~I4nR>fB6<@+f<bs7T>M!E=n)F-_Lvc2TmST zWvjb&sj5#ZL{>ZQum=g)LQ^)MRbYvO0%?#J5<Kza;T4xFw4#Z!U7oDe+Q_FD-HuX? z?j*|R$TEuZVHKYOYe`4WoG)B-C(|wzN!DnskfWl_V>_MJ<Sq|BV+A40lWUi;P|s>O z_QASq)T&W8W!oR+ToaZCtO!~qL@1+CP1A0KL#e*HGeLzH6y&Eu3kR*DT!;dJ=H;{o zNgavgQj2|#3gi|rQ}1(9AaQkTwvmrlhBqu;k*LmM6J~jNi0S2#8YK_%t(m_UHD~^o z71TjhTX=wxtxcAtDi&$Mrde&;_)*s5CQP5C*-QzBQ+-KcZc8-E=Hkh8roJ*i6}PHq z%~bSXQpAGH{#Xf{sIiEuO#Zi&urRkjR>Y=ysbo=Aa$%8{2~mfsPwNaLCvy+i4(jP{ z5z*|n77b+_v{XvftVx>TGCdmmL)?7$XMJ3)@lRVk?K+~sWyzEVOc#@mJ~GOZLy6LC z<kudzTbG55$P4@T?%i97F4W+=us_pG{;<$(SMp0Tt?M<MFJ%07;lkx+Hx0R2hBG@( zOXsS>8&XT_X1ZV=GmWNmnP17&)M}j{mAa%$x~ZC$s_N}JhNyF=l6CQLJ+2eUep*_W zCzUnQSE{bWb21c@dz2KHoM)5F*POJ*6ZN@_%e9Jc3Th}X*9MlIy~fTOo%>0(Fn5tw zi(Hmiu##T!5(_Dhb^;}YFA20A)pD&cpRHy{`41MSYD2wj*g)h?`zQ8OWg0B4h)xvx zgWRIpWKpIfYGh2LTbFS6Kr`6hP0P5@aPkt1Q)d>;7on2P)y~^L3R<K(@;4daqJ&aP zQ_H{d6bm^OC{<CULs!OU`E00G9Fam0-8CPYL5g#sBAtkK>r$J@RVgH9ScE@6Hkaw> zBUx0c`8KJx^YNk+<kbTrDOe^Yv_R627atK6bLb<qdl2uKs;SM?=^!E}zfRB-TB--d z;mvqZyda_7van9Dwfjp3?B*3qMO~&wPOeHlPQ$u<Itnl5JVt&k*cGr!XZv#9%3eZS zo$HQULKjCHbVZ*otFG71Em~^tuBCW@tpq$)P|moFfbr}B<LN0b688}A64#rZ9EQ_} zY=5sU|LEz{!-*+ezXevoR$D>m!)#&-tdHv(9$A)tEn}8`>vS0Hsh3HPY<A+I&8%wR zu%MvIdg**6&S{=9p!eQ$nObc+=O?S<z6M*Kd#J%Q;;8T1o~rBaT?<0_6@A=24~Z7I zKNcvey?-sOuxbCbFh57zZ~pUjkzA<Ff*w$4*Wa6Ey{s~*z&d0!&d_MHitxy&PRAV@ z+sf&K+V!`rNVg@?CO)p1FcO<bcqk(4S7IDA=`bRpNUJnLwp7AGeY^}MfzLCWScEz+ zO4?xyc`nVAFR~Miz&A&wRP2l(5$}3fSC^#P6RUIQJ{D8AWbew}njX57$*$eIS}g1d zqfL@*M|&yjQ_b_xvRU&9bsg3<o~U5>x8A1hWvVjGidH*pSr)#$vSre#x7?*KYF&|B z`u%fMJ^qGIJDsdFJC5!bJc?3rqj1qg#wcMUxEB2RZqP(b<CkSB(^?;^MYGBJ@=TGA z3$%e&9XhNd04t)evP4dY5~cMy9j&<r%-`{Oi!x(}QkwDNYQ&amVOxYoWGxylRpJ`4 zRkf;M0_q7;E>)3I_5Vm5O^X=i(B~&iD4j_cxtgfXw;hQT9Fl})r@1mTI))5yy-|l$ zZ{TE+p^qmq%DT?BIMTDxHazh11FnvVSl2|hT98zz$niy8raFIU8^+!&=6rO;1i<>% zetu)wh}xh@B@~A<LnL&^NAA2SLY;z6zW=H2Tp{h8QoTXPQq4}5LR~VZGna5a(A?TX zQ+`>so?_S|RAsp;nN4MbnbRf~K1RiM>(h3AD~nZU)sc>l&E2^qgA?ORxYF=_p-FSw zu~4lZS*lK4J2bZ=B~Z`>S_v?5Y;^dcx!2CA$q6Y(+DsyrjUQ8Bxc#Zbn#5RO-}%8o z1Dz|X4Pe@Na*~@gGuHB;HO1omiXpPocz*QO>6vQ4jsYWEEQp3BM%Vb<q@D}cVa@Sk zhRG<R0!_CH>1v~FF5?3Ic$g-oDSQOcGNEu;6D9ofOOQ%8&A%;=qIe1l@S~aeu~5ov zxRTTJc0E=t@W=C$uJ1L`tktz!SEpK`J%pay`yyGDwH`^U{f1Uqi~7tN<BEm^T>A}* zcPmX*>I8sC!QG>K)v25|ZB1?u=pXO4mfOu^7#zl9*RgsjWa8*x`snF1gHcmP&(zv{ z{HUUSL;4Qr8;*3A8J)G3g)e*9P+3-A$1#k?!K|8JE8t}L?(s!>P!{RM*`TP$u}sm1 zEAZo`f2@$7#2NM&dhKL2!P<dUwCkBOqk)9+)A~$}o@>`F(&A=Vcy26T*unkKVyhz! zc>Jr8c)XJir&v988WtbW%WfbSl17NbM|oM@nx$L8A>mz{?78P~P51y1HHF+D&?DS3 zJuEE?YIMy7wR*osG<hJ$)kCJcbM~=zv)~fS`}g$<v#0XRw~F^F>QD~l{RWTL?u-@P zY_I5Ia`HjQtCI_xi+%V3KG^I@S|SzX!sTz|^ck}!XUdZWk}#7l{@tc)X<40Y5xtMU z?|$|efn~<TsgtMA?$;u~*f44rUkm+~1qcJQRW{;cK6b_p!w-x~;o}<{t%{o#!ONTH zuWvyBmo>$%Pn%}hhS65Phxmno+hu9H<{sqwjhGa|y;ii<@;ft0D&%LAhev~Lz!0q6 ziJnf|HZR=ZVK(9JF5Ddke$!~r=lqd=kgU-FhfT@EoPCu^wKAwn=xq`%HCg?e@Cl29 zx#FTsQBbrXSvohBlcy%Lm}^#-xmCHE>LO)UZv$oZzEH7^H-V;w3f|KSmoj$XA8vN@ zo97_Eu?;tL+Lxt+OnEtPT2<;zog;?_hYt@99UgQU9`qO<=*dB#GOHhJ>o;P!exZGj z;lc3XLC4{RyT)Dgs|S6w=?nA#T|3AlbPQb7Gbpm%qs{|(qV4*9csjtV3GPtKS}WiQ zrfHSyZ4fQdw83zvVeXL{Pugu$qGhqUpWS)y4{O%wE9daqv(Nk?V!g~Zzo)nlxagbm zNv~%svYY&{=DSb39n<gZ0WPs%HJ{IlYKzSYRy#LD`D@zU&xGzO=N3D+q{iK!<Me`% zyq<Sg&USh(T!Ytl@q0b*E_e66+c39T`05ZhRE2J^7V`1=d@fJ5uJ84V6QR6eZ0Hud zbe5O9aPEHK+?6h0L1idkRT8=@_jhiY3+KW&uZO@<v8#{bgPi_|(DnK9;er`XeqiV> zFLkbO2Uov=uV<G(Uw^?s7k;vHgOGeW-gUPlr^MBZzu~cWefd|q@&~&Xn`%7yuem<{ zz?IMA<-UF^!uVFYdWzC_iXIowY^v8VKE%F!4b93E_w6(>)N62d;^TACM^4<;_sUYI ze`x5ga`86!{Q7jJIXzeJK3<=%mD5AHch`15aJ16pFYfH7p)?Hd<t6UEFRyR+l4g3V zd_JAMc>DXgZs6=RaPj)|id{PeBVE3n8_B($x_<8Ue7$(=^?kWK_V(P|4Sc-L_4<+P z#~l}8vFjgE|1Ng<^>+MoU7ta(@9=VG|2}=+u7NAJzuz4D`fqUc7>!$QTnYU6;_S*N zU+mKN@p{+C@7<Mt{7i)9_1L?`&FasGTkhM-jpq%%zFh`<dOp0*x37o5)wfT_#~b*1 z^RCOEkI%b4-pF<B>FxdJy53$_x_<1jPiLj8_qdy1{Qba<;|;FA2gPCid3!JR?d{6p z`>D_G%0oi^z}34Sch+`4aQX1_+)7t}K0n?KTz$D_2%`J`h8x#>djt;qeED|p?b1Aa zgnj$?c%9qe=OZ^R`Fd!k7Wnjw-MHh&>8RaGi^CuXJJ*#r@Z+Ydk76fZ>D$502T^;5 zu>`(+#eRHu{Uz?lO_$$QejTw}nC^04&Y><J-gW8ve&FlHr{i&hYmay{JNEaNyK;Da z->y+VaruuNm!IXXzxniid$s64E})+$S2}xZ7#WtwryGrXPT$`z-Z#{9w*x;;2EN{1 z{YCZd`cc&GuD(nB_~7s=*FStX@A`4U$6rz!rtkB!%EiCjrR(qee8rtTdHeG1*D$4N zJb`QH64&m_y?wcU9bwl#fos1O_3SIgwTsV>zwO=T>ws0R9g3%h`SRm@+@<5^zo`BP zI6YsFF1-fV4h?QRZt&~V148{^eCYc4R=V|&&u3&me*E*}np<BsjC1k$e$mWb<?^x8 z)nkc^r@{5ZhW*0uzCC=qMs`~2;&<g}e&6S_*p=J6fg>;X>*5Ayuf@K8{5awJxx)>v z{(U@Ax-OizL%%MHu*=6vSHCNL|8VW-?IdW{FMNKyok#WV?5@P+%a^CQ>-C$v&GmeF z{5TiY`@~`s{cuC^^sHA3U4Nc1CVHYZwuwS0A37nCojpqDQ*)b2{rSbv>Hfh|b9rH8 zVO+b7=5=we=h7cAnr8$Hb9!r7XD(i-z)n7J3NH)u(0umjX)~tUnN0o=iUXQvG59kO zm;Weuvyfgb%BD*%ihK67WJOX(fn_dJPCjUI_;9Pm0a7U6Z7e791;uD^2{eTAfn#+p zZ{iRS+0Q*0EC>>YaOt&H{(gmLKB|H+(q<(J!w+p*{w5)t25|Z#{ikouGvxBq{Jd+3 z4=}cAbgupK;;5pXCycLu|9yDnVD`QoRL?Fr%JS{suRz`;OKZu`S|e<hJs<yo>GtCC z?CE-Mq9!rc-5wO)Elkj*H(;DQIh#FN=e7k3PQIIqPiAco27Qc!N9oPzWFj4faQgkm z<llOZWK@xpx7PjzoldPkNVTRzs@ChjS^F1+RDFa=4BlVwa_I3<lhmX1`|iW*@XZUG z&tKoE{=>*@(+FJto7>CKNWXc8%`RM)M&@QutFKNL#^~a6_R#8(l&`kIgx0yBFXL`4 z_1Bia{D2nKkgs8H9AoX3mBP&B>!W#l%@13MH_)3FI848wedaf}P(|v;`RF`k^}SY2 z!76ut7Zith+v1r<@9r78&xi7c`A)vRlRqDZZ>U%qhC48HSNrwFs?p(n{ccQ1OT4RJ zVw9|Jvr=;p;{H#`y-f|8Y;Rflwi!H8@4o8Ly;;nzeOjx}C`4h6IsL&?>T|XAx!F8M z;O&xRxr_Hl;_KH+pu(uFgg+L3fJ=0;eP9r_v(s-TvZ($eF224->7}D)LvKERq0(;q z^U{`YuYqIrI+q6n#xdK4YW*ix6ttnc*SE=d*=(2{JR_X>eGCI9>sy|t?KMcx$y&`` z82?b~iyW8xIP`$YUOMo2&@}tBs~~4#@%|5IX9FHparN=JU%MBKNHs;o)FMXYg%l%1 zM2r|QMZ|~^Q>2(;#1tt;L`@MfMT#j#jEESJVv2|nBSuAyKrv#3h!j&rjfk3J#1tt; zL5+%%;`={4=PozH?%jDh&vQ9!_IJ+AocW%6cdpbwYv_gEBN)nv&flM%8+q15`4T2P z{pkIuD`*NsPk+d$`1`?mc;fJA?Wq3QQGIU&I^uo$pEPq$E`B=`>Cd9yvi<Z6qYwFX z&Z7L@*WE@n`9BgEa!KSlKhIldoh3hCb7k=#CwYIQdv^3-jrTbt@1|=m>KvPw(6iL` zdR98!HoRsWJq1ovm53@eE>7Q(`H7zdz~6&EdMu_K$nTGe@5);d%ehCiqV4#o_^!Ma z-x;u!f-4DE4leqfi_5}=V7xuvxxx^JajjupajGz{_}MY`75E!{Ht^ZNX9M5U36xiq znO#IW4)bd}P9BBX^7D|Gc?!<=>xOf{uMb5G(s$#)6x|*Y4JYE*+F2n{h4WYrK<1x} zG~5vqHAqlB<P;nvm{JlFFTut_$Wu<mnaJSwLFWA_B#hI9SOK{bvKewqDo$RW9TJrT z5I<yf8or0z^edcT3VFvsyu}ET-s)90HzbxKqqUHYV{y3PT_G_R2Nt@eA@L(*He|=u zI8qj}As?@HfNZ}8cNPB<65}Qd(FECJ3erC>B<5gcQFeDowEYPuvfdLCQ%mut3dpv< z;7Ccx`SbAhV92C0#4|r6uD%EF0fFq8kMuy!xDO}0-y0J33vr4cKF@goXN}`?K?U+f ze}^1e9ukxOhJ!Hg3yGVT<1^%;M-UHW{iDbyWXWUTA*WU0`voCU@i_bdS-lG1LvDHk zet?|!B+3YKW)1A!5B+D5PsrWRAw7^oUJ#;SA@cho$^~-FIvfZ2KuAnqk9<Prz6`%X z)^5ZA4Ov}}a$1D%HzECyJ0MFTGdCk2kn<Xl?*~Jo+cu;RvVSA;i}x2+y@yju7l%aC z2S~?~kT|{tb?>2&nEQzk<&f3?fn17uZ~*E5Ye;<ZJ<i--782_%L)2A<L^+PK-upMy zgYJeXTpkh@UhnKa5)wW87$P6<-Olc7h*6K?^OZO;byY|l{GB0co(PG_cn{`Y$W4<B zQCtmqt08h%heY~JLnJ?ia=pV4D<Er24ABgE;7^9=SrZZq<`|+3vgcewWFq}LA@?HP zrKPX~uKX{CXu$W~=NZC&I)pMaL;>WG`;cD9g*a0?^O=y?ibF?BAU8f}h-%0Rymqb$ zGH)?XdVUuAOAWCQvf^Pw9Dp2;qkB`<AihTpF&@%=%n%ij6IL6d9x}hi5FL=CpP^G> zLt^<Fqz5wRd3+B!4<`(_LpI_R=_${n+}9amJ7nl(e0~A`-Drp^$f9~fv_bBC)e!w^ zL!x;z@(VcwZ^AnOxg7^W_rv>OC+sjp3uMLnNEeRoZES%bAk#mEJ-l^w2#!u2zX9p` z4*q~%{`ZDR#peT%O^_cRM0y|({?`z-FCo8%DViYLT~myzL;c5r#8V&(x|<^BWz;LY zd~YdaGvrRlJ;$4(=f;pIPBuj$<cgo0q7<?O@2kvzB_xthF+~Yv17sy+>Mu=E2U!o< z44HDODf-o;JRnCwX5q}^DUj)>nW6%+0B6zGLgt^2bV2St!xZh1Q*iKW+p9?DP*ap` z3W<l#Gez>|ka#@P6uFS6Wr2e%9c79P9E|+TC8pR5?$pt+i_aaGnZn)@5+CD4+hWLj z@(}OqsMqx3!>u7PV4^A3K(4yh6kGoh62}!Ho!d}elMx@}CwTqCUdaA8o1*-UkoeE7 zNFU^EoHU!!7!s|wLmzTRi7C4O6ZPayQ%r|k_GeRUhn#;G{Pt!@l>NmN1(5gR<nC(7 zd+ssC0myQ^hj{2)A+fd`euezvK2t1&T)Gh7Lw>dd>DnF=i}B*~?6*T=_;OR!Lw;Ff ziuLb?#A91bQMCj0{$Hjj`XD4;{nQk5J`9PoKQl$zNASl!lpo~I{m4&qNIdtoDN_Fx z60^RA9mtCgqWpG+#EFOCXUOgtg;H8VqKjjRddNG&mgxNn`ql21XxSYS*PUpIrcdGT z(=6fc35n}}Wr@PiLSp}5OQh}%i9erXi4~9!X5#PvLHoME5)F{)7g{1|Ur3yD3BGTG zpYVd&y^!gbSz^=|$j5Ii(Twux`CCh5q8t|ITVmnIA<?zK5_yRC&g(2u@^6eI*IT0C z^N>g@vP2g2yHAJymuN>fTcQeb=`EJn4%u*<CD!amInKmq$Q`o~{{ghu+2BatiN8aN zIr#fmA@L^UD9DPrmRJv2R%(fiuQ9&i_0;u{)8|{F{2TOB<(BAxoP3`p^4sC}`z^5( zvg!fk_gnNE4<f&i-6||`0CM1BOJskC{v2mHFNHjamu4P>9F0@DOTS0GhOCE7s<cEK zWC`9rUGM|i*W;F`hP-7J{0(V7Vd13hkaz$x4RZ05mZ*VjT5XBsL+EdwMLHnsUbMv4 zj*uwCImhjgd)6Ue|HbFO!=I47Ua~|hWctg9=P=Uw3gU&Vg6#Pd`k7ZPQ3g3?vn6bt zGCuJ&3rB2+#nji4AIRjbh~Ef{D#-DW<NkqsK)T!DZ^)tlM0uHEQT!&-5BVeB{^?p_ zk@+st3puz6<qo;#Jxf#~ebe7ZdD~%8z7zg|+zPoKav$VQ$Vnf-Uy!puLVQkGO!(Lm z>7lUra5vHenfGr?6yc=?&+kEekPG*s+}yBOwh!eDxd5*#?%gFUdhSR3kX2tHe#p_^ zpj^6!#XQJD$ZE(^$Ze2Skl(eVzC(^VgmfGe7QH**kEF1uFl=Gt^#^tr$Zqfl-eFn* zxfik=a{V#3SWlmO;qTp%?^A723Ayu3Tg*Hj{z$h)J><Tjwy4EBZd>sVfvjYt{{mYy zLUxR>#i*ad?-$$RAY}bzwrJ~t^j`_PCx*qyJX^Fwjvi-=JRJBx;VN4!gzWn}TeLzB zyv7#Ucq2pITw5IY1-QT1q6kO&@4~U(si%fT`lCn(<lM&)KV<h+wn*<27UNgjq7Jg# z3y`P5-+#A7MQRv*ye;OO9u^zw@ps6|*AQ=Cly9Rg(#{Brd>jg14te}1_}m}$WIyZ= z2#aao+9E$KEV>?q9^_WYgOGE7utmnN!Xo34Ev7@J{?`^YkdqJFVlSjC9FaQ^`8FI; z4w-VCBT~}CV&#dDXN5&mPe+W0+}X<!HIQRZgTx!e8~Q^IMtaY4MA_M4k#xQz8X#9+ z;D}Vblp^aUNZ6}h?uZV2UigS3`kfOND^@t77&7TmN7O>5uXIE^WKoqPdJlzPaH@F@ zWacVI6hZcW!Vya$2Ua^`J!JZmj<C;#Um&v~_pEkADddk&Ibu8H<QhkG9~KtNpGLkQ z7d+#L63F?_I-(MC_8LcQg)D#05qs%-ycIs<Jm^CfLuS_^U66Hn8Al6b)mld+WroF< zkZF(~u7f`y_pW!uOvvWHBj1ptHXvQ+hsC0okS@sib&i-0*=wUC7DBc|)<K%}j%bE_ z2htrL7A>#BFOVBHIU)~o>t>__vZDbUWbJF<E<n53;)p`X#@8KD581F4>B@pX{sDhM zZrz6RgB*v~Rn$Q4!0QYSLN@#p>A4WxoA49lthbO}$SK?5rx7S$$Xv)-?;xF!<KIO( zAzPaeKjfzO5dTGCv3&>930bxi>4V%0SpnJd0n!86@S!8xAnQLuy0Y=P8GeFH{};*+ zvSpVec0%TUg7p3x{)H@uO#0LjjgXnGj_5fO^#yV~<U4zy2f6k$q!%)MFZ_Ek%I`nO z4`k6kq!)50<aWsJZOG3kv~$Qz$UR>;A|G<*en(V8uKx=446@(Xj!3>FEDC#Itb|NU zMc;gBSZo=HG2t?#BNKCKyho)0awg=g5$H2>!(zy#A<^#&lndlm$gDBYhwPq<F$Hoi zWY$=eGh{jB<SQ@-fZPe0dL{aWv9JSK2U!O>@Jfuyd1w!id638FVGM#Sg=~ZT4sz&k zP)@(W*bn(3<aWrMahThU3yY1AQy|l?!W<rQC8W3t{UhF7kpnpoaw+6N$X3XyzePUB zqrO6xK#rM!d_dMiCjT}p23?IgA!HR~4P=jejGd5Wkl7Q^J|GuD7X1!$RLEVB{jNrN zPQ)A)auZ}dWX3h{V?O$I$nlVw1sLlfpMg98+51|onSO_M0$B!WPr{fAIRmoyMAR$D zBFG8XVGRV?2x(sv7Q+j%CWBl9Sqa(a_n5OnRzPMHghgmF=G2fFwXx1$VU=S&PN6T> z_m~<u#aKF_JG4q%VGZpftb4l(hu%~1Ws<Nq94o9j-Guovbl&bJ>;kOcZ#fQs>yB47 zbQea;&xB|>UYJu(z*_GFVXnv8zA0Il-G7e#(4Px)J7jVXVLsghYyK03F|(&|3QiK{ zqLVOWVcmaeFJWvSB8;8qh|uVvqRX10!gbFTp(!{vY07ybwBtO;Okr=$6kR5qFTz#l z3-iGFST7D2X4Y^a3LqCjRt^_NpI-}W8@4nWFBW#iC}A{QDvT7Y?fZ@u)}AYck$a6W z>i!_CVbg_OceCg^;TGX!-YU8@-zuyDe-uvR3}JN46ycG#3#)3DFxzM0%;Y;nc)=Z5 zAKxKDp%M{ZSR$<4KM7;ZY!RxTExOd-DMIOUguQT%FnVC!KeSYYlIP)V7xP4yW%ES1 z?QYR!4%Yp<%S3q4J;JKFM}#h%FN`<t6~^iJ!QOqsUa>%!{qM)#$Nj<>zEBv24+txL z5!S+sggJAOutz;8!iydhc7N;xj9V<M>cztBSd6v*5@F6?BEr)j66VT>@M@H$!dSRW z7|;JrIH5<7|3`)K-AcSU?lECyRSD-5><84Y5~1$Zc-us^Fnd2KtQPDAj9o3v($z@Y zQz)w%VP<1r0DA-0il<SwPYd&B&j>f`8DXu$mGrD|#;p-fw-<$(@gm+R@uKLm>qX(z ztP}2!>x5DKD)R7}2$#Qxy_(mAwfhZWjQuCd{XJm}Z5GCJp9-UFKVIT_5PM69gz+x+ zmi8WN7|F*&4mXUgml(#7OATYu7{h3pXoznn8sSCP7+ByN#-7QBQ98vi*8af|^?xvo ziA9D{e<RkOHyT#;G{YD(9qZ@mhLL}>VYl3D7&EZ0-%xCXl4lrV=?tUG(%X!XJJYbI z&osJ(Zbw|V8=>K|3^8GrVU|H2fXv0(zu*qTJ_y;n1fNTc@QM;6G~rK%yYx?nF>|)j zrD?X|_PEmsEx6M#3g;L`>YoiOZ?0jk!hS%{y9{&MU51zk*#y~gmtkN(z+8eofu468 zX5rn2kyVEMi88~S4{6?GnEmcCjFS0=+4Ek+eXn7bLoU77aQEG7gyxhRW_Ro#jK9w? ztM4<coeK=7_I?8kGeg|6&@i(eFhb4PPiTL@Fw++qV%Q?X?7zft`aNWr>mM>uaSbzV zsp0hbEA;=0JVN$bW;iL>TUh?EVeW%$hn!YvI4yrO%;T41O~2f5#yw&fm5&<6sK*Rr zN3~%LU2PbdHHK0BwBf9L7W*jA8pf72hTDO?hR}0HXyo&Tv7!!T@Tw8&zsax*H$%S> z<@T0ggmxLm^iK?tw%ah$J~f=0Pf>oK!pD%STk-inhS>Ta!*=%>V$MFptb(*ZN4h`9 zJ_h6p$ZE*#kOv@>+l=rnZAPf2&2aX9VRR||693<Ch!F>jP~}&K*!YzZ>iLZ!hJRy( zmbPOLqTR65zr`NUw}zG80ssHkuxoJjJB)pn!-l!`uwfkj$uP5pX|EJmlNzQu-7xKg zVN--$)68*Adkyv`*1BdW2YVCiyO?Hc7t_w|igkTg({Ar-It!06jkYBG?O3d>k2URj z$d+SGvwJtwXzhme{c)z9bsTh$GtKnwrac{d8+*H(X4=n8yW(f2S#Z1=5+|7Epc70n z^#rra`V&lJXfM-f_=PDB|H2GS$6m&YUz(wg-lp5{R5Mg_D%RG0OmhwPF1AAo>|KmH z%?!1iW|}`sHQk0((-?n-DXu@mwEx)8G`<;NI(ZqUHT!I&?QGNh>TJ_!Jl8ayJ>N8b zn`Ii$Wt+yKOH5<NWv21*<)$%eEdG{f8mlLm7~f3i@7I{dm`SEl`+L(EImI+~PBo3G zH=4$Tn-I^<rg8PHu=7XL$iK}r=FK#Xmv1+XDJ7<{Zmwzkex7M`n{OH$mzu_{&zpw( z57T(yEz@z{HJ#ZzOr!cE)A;i)(-{4UX`Ik%8lUYkjh4?%<AVdHbNM%>QP*J_gDuO* zJI*rBImt3!`K4uCahhdZ*UvIi2Uv#qm1Ts_wv3%a@c(lyV`G*TzV$-O*qdz`zaM28 zA6{x1mtSrf+s9f)$5mh^SY4)HZG~E{w(P8Yt4lT3_uYSInVG+{j42Z>qv%>IG-VRj zev>S-1#;ANmRWqAB`U77ob*C`F0_p4zsDN(_m<i4d&|w4Y?(7ATVmB@%h>Y=%j`AP z>RLP1a(mri+1qg~FS4w{X_h^Hx@9f7#WJ#HSk|7~Ec=w(EivSF%XaUutl~deR=+zf zdl#<5bMW0<%i4OEW%rtAb#0hu8O?WFcFsb}p8kMkB`>nv5sNJQ9bDHwXj#8sY}r*y zEMwfmmQ((y)iq<KWvqS7vN9gGjD4$+-zQ;rwbixwDa-2rv}K&~tmO=R&NBMEV2NQb zSY2CRu<YVm%j)~0W$k>?a@@aLR`v$VE_uo7vh5|yN_xdIta{6s^QvXnZNgr~CM%S+ z*|OJcw#?SemYd&T*-IO&V>aMwZm_xxdd)I=yl%N;Ubl??Z&=3aH!bIsx3MSlwq?wH z$Fd8WENAKt%b2*+vi5#x8DC;OUHmW0%H3s|b9Y(cULRZbxR0%4X5w1*v1Kf3vCJ(k zNcU$}*Y%%S?t#xNqwovMIQ%vCBib!%&9_L$x0bX1JIg5h-ZIvQY$NGd+o(R-wzj3% z#)eeesO@JPa|hT)<3QUOIM_B8o@-;gv5g*Cw$W>ZZS}v%HkSU{4u3bwHV%)rjq+*u z`^~oT%zWDr_u0nS`)#A;0oynQ@2Bdw#5S;oHO4${8+og3V}6Zo6g_8K+3Rg5ZG&y> zZnUj8-?zIA`^Ywie_|USerh{QTWx3Tziq?*%r@Hh+QyK5wz2bbq~i<QX#3GNZm}Gv z%66>kkYn^Y&M_)_I7Z$Xj?vuDF=h>Lj0@8pF+1G}?>h@?jzNxFJIE0SAh!>8!rz_k zxGRS^;pCx?7&X*!SDfpF#|?Ab-RC*sF<5)fKHuq*Hymro3&3CKgolj6dTNvtuFY}W zg3Fw6k1>wBX^az|c{#q%b;4hd#roh%C%iQe>%-qT;rib?raQq2H&4Ji;%dkK`fA7h z?srbOW}@Sczs3otPjbYVNr<z^>5_J%6W)Cz>`j9`taBS~a>B)bbll{bPI%7k4knq7 zxv<1>-!H)$ti%cB&343+*^asBPRH#&$1$hPaYD6!cEtb9b<E4|a>SIo9CKhP)_0{& z=#;x1v-EC9?13Cw=7eV7<KRV#PH5(Q$I86dF$?Z>jOpc$-HdDeeOUY4=a^!FV;o$7 zyx;Gbx%Xo|2AR3gagrXun(YC{o&wqOfMeQ=ur^!dI8BfT7CCnMgN}IqLB~A&pks)| zj$MRn?_x(xUE-K)mpI0@ha7vzQpbLNsU!OT73uz~V~kklh>6P_dpTr}haGdm!;Ukk z627T)>;;hB|K^zae{-CP%N=_gu8~;xZ+*lulUE?kSo^0wiZnioH6COMWcj0xHGU=5 zlq(&3<4VU_@R%c3Kjzr`Ah9Q4uCH>en#Ucx=PJjpz@9*lCmeIq6OJ*w+7T0~9eWvM z%9D;c9s2<bA@@Cr`n4Kmvf8n2><P?!$}!)0%CYCwIAUduWABD6eA+SBJndN1us1OO z8Ke_3=UK;G`mAF#u5s+r=N$W#=N)_N^Ntw(f@4;`;5ZevjxAnv>=Nt?9DdO;$74TW z=~~BbffVZ;v+p{`>bc$#bJjcNs`ZXl@pteWz;6J*!7)d_<XA)N9J>lv@0XF5mmTvU zWbcjmZli<#2W9n&V^4=%_=;oJL+*v_S&zC>?^rWlb;P1q9s3=~yiJa|Vv}R+-Rzj@ z*e4j@;MnUM9A^&p3f8>lI5V+VP_f0an;>&uM_qg!ZEY*k^ADs4`vvX)K>gT;{eW%o z!#2n0{ZGd($K_&=VE&tq+5DzsByD%>nYa#Of1vDb)UkJ*(8_n<$9G|;$+72Sf53dt zF~_`zdbz`~t8t~ik3E+69kb<q$6CJA5gT?o_K%Rae1Q7&f#cMD=yVzNk>iv#BM$5j z<o(MrXJUV#>|c)E26^ybj<tQ4gTWc~?PH`3GSuRj<t>ir_K9PT`~-UykT*jP+Jkzq z#}Su&=D7D`kKm$xj`=S30#d(p%o$&zPV7g0#oGVxkjEcz#Igg9xd}4wE62PYdjb0) zAN<;J4}Oh(op#53=vznZ{MIpF{|@Ewz2mwE9W(p`?EUDNul(q^T@Rs-A9BpwAh$r~ zb~xgz4#zzGzmB-<zmEA5<fo7`4m)D`VaGhqz=9L&&m=Js`?dIw5awC<=hu)kA+d}y z&N&A65|0t)T*${E4?%WK66Up7m;NzHgzNGDpYZ<^juqy#V}+Ot`S`ISl+#TZdwL4v zSS)UP_Z8+?$o#&-ZtW|KWocONrsJOCSt690A;jnm;U35k=D4#(*8^t@Gi8YAT0KOB z`V19j!BAn;pDWC-&&4`+n6OsjN<L3m^Kc!+H8oRM&A7&#FRXf8gN9?xh^xm1!Yae{ zBd($>VeP_|d!ev4;mR0+H59I%7YS=Vt`1z&vatrkH5O~v23$i%Vtt3J*Tupr$8{Lj z^ifzx;mW&2SX(X;=03>$(ZYHYSJtJ%dLCD5j<A;CaxW9sEL?54CXNx-c3dMa7gjB< zzPVV_<>JM%R|t3W736jb$x;Yo)>tglx*Oe-!Y&pUA{Bq9Cj-jH9*jH!1xLzoVYlw{ z%!`f<@ke4P7_)M7A{N3AKb>WW?w%buI$~=w+nGj1kKo?04nN#P@a$c7SGYWMpR>Tm zZ43m8zY^Epi86lPw7|O#I>%4;QDa2$ZzR`($u<S|BgOuhyF%qr>+%JMb>Nn;{l<tE z^p08IIbE0B712t=_ic1tCF8-(@JMjah|j0MkHzC9pDSy+aIcKd=YXmBt>h_f6x@g6 z^SD7RdQXu2m7e|0v3c?nZWN1)u9keZ=cn-BJLgyN6O}_M*vo$>^|0Y1gHjIUpCoX{ zvp+X8=H8&#XMd7i+^7`Q%wtnW2G8z@yCU@<QT=?J^*v6lA2I6ZvBQ1!lhRFTxtZ<E z<z%=&DSo`@E_(q|L~I4F?aUv~yhgl>&yNxBGPZMUg7Wk77q6WbTqDZ|8*MUpe&mlC zkd*E*%#HTqdsfM3jCNQ8y@CR1KVE*xFIBikGw0&}k)Wi5xJF$4nHwspquMob?YM?9 zcU1jgJ>saH<!ac=2Iu9Y3+t=pM)rz)_Tu@II6Sx^Msd8Esy(j1#MObzXYRrPt`*!I z=CC;`Lk#~>J1f!PGQiDb?sV0jFMatwdm{t5QgGE8_V7S}Si{^U0rr}}wJ_(k(^%!v z0j`O;fdTeX(LVPw7v#Sja9+GY`7H)_nC)E}5HD_+i}Y({`v{7+0bD-~4mXN%?60&J z<iBJaua;(ROhEeR<?uH$w?^goGu6{Va0i+5#&@+ms2^zt*UVfJ>MRBKvD(h#h|-Uc zUNRO0YbMEj?T%>C_@?Mx+IgI&baf!Ug6pIn%@iZSYZqLPz53&uhn$YLQb*?@UOzvY z?O;<s65NZF_%D|Id@_F@ufLtmc7pncY}hDb?hLl4`ZGqlZ#>7BZt@%X;8HK$tl+MD zp|ihpJI|j;FCW*^JEh-#!2c<@$0_q7rJUmBoBT&n=gyJ#ZXsh7ymA=bIey}Ea4ll~ zI$|k!{KZF?a|yoQ%6xQ!dW4URzht)x*Folf%k?j6SIH0YO}P5amFX5LucU)`?D>d; z%-@L5k>I5xMm{sZ54lU)e?aA9*vF={Sjv0>^X_9Wb}mnzZ%}$@oY~5Jc>?=XR~o?g zFO}&zs{a@%=d;AMfy-eos2{|Gc49hnLH%2%j|&=a3VmEq`zZ%Eh2xFa?&H;0${*F& z39R20|BnQ(9Qh+L6ny>07lUK8zZACf7w#C{%awjZX@691`M9Rem*s$)Zjs;~r<8M! zEDvh0RJOaB$DY3APgeLC^}7LNO}UKcb*U!Ya}+)9*C?KLT-o<YJ{@BX1$VH*EBPV4 zG}M>Og;EbU&m+OTI#`d&p$dBWOQc@Bav*<|gB#9VJ^oL@eM+(KtG^v!$~Q{8mrMLe z|Kgk9(E6p8xwBP{KT|q$z-?mgsQ!xMB|p%-YTQFI-l^D`py1x1q%(&9ilA4vQtB14 zBiuXJc5e5I9{HsTdUZ8YZ?@<6&y;@Lw@#&bRo53J|7XvS-zYrS2g-Lg>cBwGcToAH zfy=0scK=41MsW8lc7H9`ZR981SP?6k-yNaBf3EP#cu)DogLxw7MH$Zu){FM<G5S;6 z#yt0B$xl;xrN5^9W`JMI{5>kq<xJ^F0awWBxZLyORZ9AOe$N5Fm+jWGUH7KgJo%>t z{FQ5Ex*zrItNS9#dYtrXp;xy~>ZPNsDY#E4@hJU7Dws6PziR(3^+rdu@Q>FY`tnWl zv>nVv^Sw^7&-teGWYfHk^BtXMyru9;ddR<Z(3`>a?q)STO1Tl=27W#BI^%c>+Dh3g zGQT?GcoO)n%olKa+`&pdcwDA@XM#V-{5;fI3hp%uujHG`p%!{0H_LSOiD=;;uN?R@ z<+mAJ7ISk|E{1=S!kBL{pJ-l0>Bt0M*N`|Jh2YjQcb%FJr9G0}3h?`we^cds{dXO> zC9lc&XT{;j53S(Zm`gOjqWF`s`H;Is+70UOGr>(^E?zm1y+Ux4m^*5m@wJ;AaPyhF zo%7?Ksr2tYz7Bj7^LU^~2Cp6{<xBOg2K>3N%Y5DC^%wh<aYw0dq}K|)d$&rx37+1k z!FrVM{4PQ~{ST>!A3w?9rO%g-Y;Xsd>*m>iMX~Q2Z)(AB-zM#5sdjzib~CuW%>6om zvoUCOeM8!dSB~U|HrTV7`<m^!S1Rd@;rCS7-^hA>z5Ly#=qY}udYccunnsx}{8%ay z+&dIK-+pK#_)-6qe9%0*9b6W3r?cH?|H1x?^dCNMyBGf%O8mZZ$-!Kvh3#IV+Vz!p z1~~Igna+it-9yTJ*tcI=1%4{?NRkX*J>rj4-x|S<)8N{{4b|XMlJK&34K5p8NP{Z^ zx0n4Bl#dE<+cda3aBDTVR&Yx-xFp;Oo29{JfSatr<%9F;V^Dre!S&a$R|Bqx2G<1c zAh(;Kcssy-sKKRn6Jm=7hr5TOT7xSFH(!IR1UEy2YXCQ1gKGmfECH8>cGLu}FLPIL z`*QDiuJbyB+cUMhY&_LFiusYutNjUaMc|5=3+kULz)jcS>cACgaIN49nTyxoQTmd) zW1MC#UjId02DnlUE+5<~4Xza2cIN)qeTq%2PvcZ1#ONQh@x_}OToE{(c2NPYj_qNp zDMO5S>+sDo4Xzd3Oy+{xE$takVD1+jZM44e=NS7kzv&ZWUnZUH;76B{;J)%q=X$QJ zr^&yxFO$XneIIY$9)32V9{H>P+j88?^X36(DtgL#mf~x~HS!&v2YBhcM$uE|52Q!? zkc~}JZ;%(?x?nx3-?Y!L<vpo~DUS>>%C!PqwFXxQZoUTB3a%&tNBvVX@-l`wlxZZm zCoB2#tuK>cH*1H?PqV~@d$GbRekVWB{hK|k7gQhV{>@emj_%*A*5K&=O}Pd~_iv_Y zaGBt8H8{F|Gf0Cg2bZkD(LTd>Tuwp$YX-MdgR`-I-=M+KK1HPlhX)kJYz?jiT!98x z1#W}}*9b0EgKGyD(%@*HVlTJzAU|h=+or)4fveHrD!?t!;Of9l*Wg;gjn&|2pCUtp z%K+CygTs%f#KCuE{}ANAQg9z?a5doSG`J>k%Qd(TaC0=cRIJk{X>hd9kgdTLgX^oo zRf2OhxCU_hcpMAza~rru4K5jj(=!@eCb)$fTp_qyG`Mnbc?mcgr)ZxdlR2IJv{vv_ z*pET`PDyZ{S0DQDc&5&OQt|f;aAj;SXueJR46`)2QgB5YTn)I18e9{&3Cx|Y=EJuS z(Fng3Fc;kidEtr9^DW;#NE+7n2Q=c(1Gig)D*@M}!O=d&77dQ}DK;?|l<x-kr;)jS z-aO~CRdMs3nuL3|+}{P2cMiCE4Xzkmod#D4u9mrY`JwvQplPqoXAeVy49fg74S#Kg zA6Ia^QU6%+{gaLL{!$)KgZxtju0n&W09VG`|GI9wo%IK*`Q-ht80(n(a8S`v&!u?t zlgVtyJ?HVx^~AUTmIr1D#~bAb$L5pSp86aMtuHEZ)v}%F^MEHRc4Ew{DgN0X$?=xz zMI?CT%k7@*ci>vi^UU>_BT{fx`^x>Tc<H5h$d~IM{2}t#Fq)POUcCH~xNKa@G`J#g zB^q1>xQQBE9k}ujrC%tmkq{$&t@vV&21o1UV&;PKOV6K-V=i8MBfsQ>%h2FT!5z=s z&txuQ-k+)g*YSbO?`V}%?hAST@I7bom*aiyfa(jS@jJHnCTvr1UwEu@J5cH)^&|PX zwmu;1MfADsj}$%M_(IR0<a7PKj3S}nm6PxOUM>DSm$}<9hEZ^zRqV#tUuXl@&?^0c z!)PMGy}zn+J`_F5J3Z$(Zm-lEBh`+i%eP-g&pDPb*Hh*AGx?<$J}hGHe6ASoBT71a z&!5n98d>beRi6JZQ2GNU-BfP0o*(h0O!rNm-c5>LjQtIIu4vYNsn-p2Mhfn&ie8NP z=sArk-%GtGynLOfj2kiZN}+e)zf$jZ%*iA1ov6%1V(8KS$61c7U+-hgl6uvF<w<^N zhu-$?Qg5S|zs*l3)T8GticXSxfAs3ly44Bw3c)^^BK1tHJtOHnlvt1UKW;r$>Lp`L zjObneRKob^IgQ+bQZLPBy}N1>>Lr2A9whaesG=gc=RBQIFB^I-6Q$l}?hxHW%D%Qz ze$=k=P)E8glzQ>{M=Gx>*f02l<feJ`*ixRej8Tti|6|Eisdu$kUSUN~Nf*UO&sl7^ zQR-!451E2{b+8`gClz&f`=6v9cS}e5iHH^1m*#+bUV|$J_aJl2SwGqza=%0A#SiL4 z*V*hJ<e7qdw{qVvMn3U_Fp)J^>irvSBBFPKavw5=Uo%ix`3t08^tqDr66?|a$J$b< zhXV~{d}k)stAbw2JgIk<r>8y_r=*k0qZVzu$K6sdUU`uJZ20*g+sEN~GF|HPfQo(6 zqvtdx-XrZt@84e>oS#Vl54}|O-(4~~oOY+^`Nq2{@H3gmVU#j`>hpcd{qactk?9@x z2j`zSx}U#ZgQNTT%QUz&a3vaC9=M4bTnV@=4Xz4Y9}SM~=i3?_-Ot~{evemw$bTsq zd$wwD+2B@da7EzCHMk0J(=@m`aJd>Bt@{RPa7jt%BQ>}TaNpgRxc=pX+o{2og4>|M z)qtzi;F`eA*5Eq86=-m&7^6pMa5>;oHMnAMAq}n)+}`rUer^D_O@nI#SHoPq{jxOF zdpbdS19Lk2aM|EnIX`_Oy%_%S=J))W+EWp@UChOcpSTKeUj2$^kJ4EO?f~1<c|MWu z=ht)nzLC=vO{db&l6~6$5Zs>>Fz=qYrt`ds`*Y%RaNm3=^A9i|wXdwtXq>5n{pHNp zGw+_D*pHE}TEx?j=T|qY@hCj`lkVqFW8PaAM$^Um#6|AsGdEDR>w8X&?&nWoE@)qf z?&lY3aCASvK!d9RH=eoE1Jc*zvv+C$*8$GU2QL?ns<&Rb=5oCEu|4;5<-Rx91M*`Y z7V+yf@>AmDg7Q-ZuAc2(uI9(LPt^!+FLN7IPMPOWIy=DM!t2lTRNgmF$$_8Bn0uc& zcYu<A#Xk8hA3t7AUnKi4+B1j*uU}Bw1Er@Nd_ME%G9Im`zIIj%ZU%ERRZgk@)XtKS z&yCE#%e?!Lvi?!hPkPzV%jbQldQb0OMNf&3@=fL1%6eyd^SXBxJ>ULFDNgfit&n~i z$?-(<?Q3^6;JPiATu{4f0w*-M4sc&{yg~L-lW{ts2A2b_g}I>mTnuiP23HAg4|C|c zW$@|`f24ZT0B#3!WBBi}{MQDqgE=fcWKis7;IEnRi<gfxy>-Lo$~s%AFO-g)pJTqW zM3zsMw0@*N@s(pSxC6}nI)JML*X^Oi<=p^IXmD-dzUFv?${Qz0idGFS6Wk6Bt`OW- z=7Q=)Ik+teI4YlJlw$*PAF==3<COiA80FIj`%~CYLE~WZiD>uC1&xE5;3jGKy%5|) z4Xzwqt_D{NZiEKc3~m^6@%&EyOoLyBG8aA9;&Wx+EQUWbu^F1TG;zOG2<{f<F6Huy z)jrF?tza&we%6Ak)Zm)IEoClV{;A#CCmpdDuU{Z84cr{IcZHe{-}saVZZ&g@RZbZ% z$Zje4?te|(Z`6S6$6Qdq(F87+xgbAwfXmU~Qek8ib3uO00q5B}P0cs=e>6T;qFg+C z(eZJevM=m=9<7o1Wzs+Iv0Znw!YlVF$gj;vPaEq6)jRuS`2XR={cIXIQ-jL`cbMZ1 z@_z}q0~%ZvxZTVJ`M(idiw4&YZWnX$%8C4!f=<%2cM1DlZMRgO+2B0?>D2dP@Fna= zbUiXC<1ocv39g8_pm}@)xGBt`s&uyJ8+Y5ljb{#9K%F`MNbx4)A=zOX_A<fs*We1l z_0r(V!FAQ(YQg=;<rkFSW^ns7IQtYlr=`KAf!n6R<$>Fv!Igkpt-)1+Tc*J^f}5|w zwS$|b!KM5XzoXIMvcXNz;EKSF*5E3@4b$N2!1dSQTEX?w;F5Zy{%LR-;C|%sAgKQ3 zgWIRUm4f?FgR23zO@nI!w?TvJ0JmC$OGW3iOoPh-H(!G*1~*HCs{}VygKGdcL4#`p zH(G;B#-`ga4K5R0e+{k>TrUl-99&lot`^*nJiiL6f6d_bX>c|M!4EaKG;rHAxIAzh zG`JFQ-aIj0K4^a4h;m!T_73AS1$Y1Q&ijzD=0C7s!2ZmNXyG4kob`>1HU_<!%mvLW z)4;7@E@)np2d+|sD*?BZxp?!MNd8fdp1p55AMOB+{KLN2F9+ryk>A4oUSR&gEo3e* z|C(G0xH7hf|H`10PbB{+$N9|tz?gge-x8NUjOOutA}GCfU;JK1gG&Q9RD;U{=go_P z;w=G}qG7KJTsP+8`3XfW8o?!LaP8o{c~;>4zcY@kA5a7`DCI-(X8X8!^JFT=3M9S< zr*E<$&AA^voUk0LU_ZA~u20UAYDcx>Wd6JQ+##h8(_S%x_2bQZiJ{<oUhFq*nAWT3 zirQ@FTrd6CCr*DQ?DqaxrvL0nEcnOsBY!6Ul;YaO_D7oX3->(5zVf^S<*x%*Hx2u( z;2M_8bUfvy|8m8?vd=;3N&!1`h1A1A*OB1fsp!Q>7o8(jvnz4FOTbNjTyocX=~}1Q zkCCogunSj7J<IdgONsT`pqF1Q^=|Oudn2)4D&ko9q}2Pt(|b$Ni!lyWLT~I-QZHV6 zi<CdO4CYRXXFrA?=y|b{e{s5G@!<CrO1cz1sy7)H>Kn&*RK4`w&!Ka5+7hIn*1@IV z-efL|(;uzpO8k^x`n}w)8kz11+%VmXm2@lhiu7urC)P>5r)~Tn!M(V$b3dZ!QTkHB z&Ui`cHAl4YkJk>B^bt?Lm+Mm}`DlB8NQuXH&J{f`miDsb@n)k)a3526C0&#sI+rJH zi`1iMMJc%FDC3)wKGLJ#%Z=YE^&H&eq~PAE=*5Vy4SG4vQtwWwhBp;H(%FB?{V9qs z6>a~^9a67=$^gOrNtuTz@uh;PgkC<!7q9<~)E{u8nDh3X-IJAc`RXP8-YqwQU5cN6 z@0O*((eK^TH8^_StG5P6zjy1d!O`#Cga${ycRTQr^nW}*Qhw?8ZY>EoD$jP<+r(Tu z>I4P%4W<4l&&!kjBG@l)k?HWp&1gG{SV4V;%mX)vxh($sQS(+`c{YGw$UL_0W$@Z3 zf28=^e0GC4I+tg<hCMo$r$B?Fb9r(#xN>k=%=O`PNB!elchGZunatt8GQ`MlGrmmG z;B53c9Xt;R+E+{icR+*71J|m-m4Itv?o>4&zWi4CxS)A4{eEjZ+Y92_!8I~>dO*A> zXe^$+AU|h=Tf_EF3$Rz@<AVHL0j^rZULCk9<|eA~`krrS1@|FyH>#X+UxnH?{a&so z*P9=ici&hR*w0hD&B60>ds*)RH6CSLAfA5jmiLM54}P0q+^6<i1AfkK$saZE;P{AZ z0=Ja8quLR36n_V}Ma=2MpO%DYr#_YO2ieU7x0X2_yYw7iOKW1g^c>$V=5*{fgLn5N zwoAX4OJeSK>>u~?zjiKfUw@l%EXG^r<F&Ii*hvAG#oPxpRw1}2Dt3Lp>!9ZV546ej zn%+G24TV?cGZarL^tOH>^@<{~AfAsEJx)LIwczb9C4Yy<?~lz>eWG)Da+!~pU*hOo zo*WI1&gB`U!O^)qS<J=jr>MP_f*a1<D9>-#DEU$RM(OQ<-kAN;4<qq861;JQ`(N@` zE4U)&qV?la#lEk8<Y7*^jQJpcm4GYP;HtpQ*5De!P1oSs!A;WOQt<p%9&_>hPkzh> zH#PxBeoO<G%Uqe)9!^`@xt)zZ^8SWO@YUbS@<9>E;FS-5r1%@aEnqIF9O*g08s-XF z-@QYL-&c+)cpj^Tc~0(;br0)PzUX<cjm$0PzendS%J@R*Ee4<Zoy=Ffew4UMaJ`ue zsz(jrQZ%?Wa6OreSDuugCZD}%eZTdg&gJCuQ#PKf8?O<65xCq09L1jpE{C}Se5T-@ z5Ig=z`v+gb{9h%Gb(z8|<1gveL9d1N#(Dk5=Sw>0Q|UJ-eeKY*56be3`sXJ_&*z^) zJQp^U`Jj4~1Fko71ztX0k8igQd@l1r^`jNsDCXkL&&VH*K6_1G{MRe-EB>H*nw^Zb z1=|l=*Q9}KVJ^$FKUlHv^BX<KcYyhz^$I=5=h+S7=sCXa8upTZj^}1IxJ+<sG`K== zE0{Z~z5C|*<(gcr21oUjo&)sajr#l3iq7@h=kFv;%60OS0nW1<<nMfN3pM;x3T}=D zR|9Uk2G<0xK*Qf1;3g#C$d9ey@|cUZ_m>`w>&HAer96RMYBwd|JpY`5&ynDbZ@zj_ zrO7q=xS(;c9o%|O-(of17~@qcZZh`!LH2iNsXV6>O)C=O-ACxf`tkaQNIwD#-4bwA z9!0oJ=Eg)~#Xp|klz!fe&v$>~#dl-epAc+s4tLP*p$9sbud+W!>1fB*&H6EN&cQ8e zIut)<;QMl1J%5sZyw}?YymwJxJmeQT51`1D@f>x(m*XXl&I8D24v%ig;Q56=5=Z9& zY-KLqctl(ixK$cl2e?w^uymFoM!a+%V6uii`rUZ823HKOj|NBg5rhWU0B)Bd{T$?% zHgI(sTr$ddnFf~$Zl(rDzZ)N?!Igu{(BNvp9k0PPgF7G+`^C0#A47wq-=NoMaCzY7 zYjAWQV2TD;1#YAU*9b0EgQLA)ymvd&{)6gEii7zHxBDP28{9?>t_WPE23G-YmIhY` zZoCH93T}u7N9Xe=YjE_t@vjfd{xHZd`S^0X23HF184a!mT)76<1a7JZ*8y&n2A7Kc z_r4k&od;lRaC9EP?*AtCUnRJD4UX<3EZ5-ZK0=8GNB0pXXmE5NVW<X2_Yrz%aC9G` zy(6(-=sv<b8XVn6SfjzweS`%X9NkAKO2E<lg6<>aGN-fOSqk1OmjOHsN9RR6&nLSz z;O4L&OI1#px1{2GIuD?U`Lk7?KNDwT@NZ+TPXI^f0UTg1Xx&QZ0eJR;I64ntuZF!U za4pQ8uBOj7-=^~bbnMZ206O;QJOCYgbRK|bFJ6AB{OCLYkJFjISAzHYr~h^SelGV% zd8*%h>&I+-_j~59Q8~WfA7eg#`qmip@e;N}XCG5=f4aN#JUPZbL<6{;JRW0<QwC)o zO8zUwwWFIHw}&!zlzm@&sReUC+l{_A<B*ab-}4Nu;BVx4)oje2D7fLW!1UAlfSwn6 z!ItT|7JUu{_f|zuxvw1QC!p7yB=u79|A^il_jHbr?=z(0OL~r{C+9z2eTY#`f7%kG zoD8<}k(bZwlz5eOQ?g7Ro)?S#9_!gX4@KrvFESVHzkKK0RN}kBpUM1w>cx9?aJ=N- zCS1q;T<Wd%>eYjZ^^)MPhdEu*bDlOQ*2{+8B`3=G#@jMO?uqj|my6;bN+&(n^@o$C z-e}CZD7d#J)}!aT?&vM`?(qDwKd~OwhxC)B-=q1v=-!0sr1jjq(`0;q@cj8uV!eE@ z>rPknUP-J+eZk%{6ur+9>or2}r2bOx2hX3!l?UdJ+DQ%cK0H(EJr5s6g3_N5*95Nc zEXgfrELv~*GnH!|%H%`lUV#n;cYu-(rG1kgt>>=IkoFgQdgm#6G3rqR^fnHWdXv5S za9v`(4zO+KO1(v1d`~3S%Rn6;nW^Z#l~}I`dMk!2dfzA3qxIa6SyJx+myi3)`#P7a zGER^`=^U`<M@YTHp5B>>_2?Y1nb}e=`rPCNiS=@zchN{CzRMHql|rw}C?&pY66?`= zuIUn~*Wb(EO^NmBxv(vxr5@gG8wu`piS^R3{(0?EsrQsuU#?R0V${z<=nWks^)AQ% zDY$ng)~f`2d7jjJ#;e!AT+q4PW5h@6x!10edQW<K*Cp0V!g^=O)lzQ_--vXdNUWC) zy=VR)^<KnpW+VB#eqq9NmOyX7T~co`_MRhpCoB8SG4fXny|TYby?Z==KD9Vue6*hX z;1Q`u&z45wyIZ+06Qf_EbI^bOnAE%7(>s({FCTj2R!P17sB@9{Zc^^o#mHX;^hP}; z^*-?G*=LGgjP~9Lz5hHd_5R`MU8>yojiE>Dxmjxzy=N2a(K+bHydd>xY>4FV1m$^w z81WTD?}-<s-Vf-bB6>F{dNKS$>$xv_DC770iS=5cm%c%XZ-DZgQ;hiNxv;M`O1&9g z{vJ~FV$>H}&z<?I)VmRJNAmZIq8B5+a_G%HNy(r3ym}112I!@2lkwf=wTI&pKUdrV zy&JYmy;GAooo^)8%fLG8@)RYV=LJ9KOXCr(=Te$we4l!Lxj(U974%;Jx73S1Pw|5C z+;0rOG(+#iHmSGBYq#gE=-f}lsGrI3#m)Pr-tk_$y;ISP5nm4UE^U{3uX^?6m`6Lu z7ekMp3v2pL>NR`g(O^X{Mmp=DH}jy>3#08*a4%ByV#L=Dz3!*T@*Cjg@0yhf)0sxk zQ=KODzW34@R?Z)ek<LQsz5kO;=i8p%nThr2e7EU_jIW>P&kGXkH9@byl6q^==STc< zy`rc1B@GZgFV-(r>Rl(*;@)o~z7_lw<^|^~Iv-Z<&k;}O#tl7P+P_h?uk1$=PtS$T zWWIoT_Yox@zV$mjZ&uBGqV%W2UKRKj=Hu<d5Z4H<S%Yf_w^M^l!KTG_=1%8)Mg7M6 zQ`BEnf@@-KfLCu0DfKi)eQSc=*1pouw%6|W2kS-3A9@x4C-uHo)1{OT`GwAnE9fuz zApa%dd93lw@iga1z2bPt9-SLEN`s?w<AySKs+vyU{vMqh=W#*lqvypkH1a{`#-(d; zbZ%Tf=Hitv<u?`2U!^gJ|H`1OJE<O2;mcI!qR&13r1W!2dn5a$&?{p-G*ua5*thYV z(@f@~`%14U_LX`TDSz0XGC-sJVZVU6v($8GK39;(`q`?!?|rHC-E<AE2wXXH{Z)Iu z`cr}L7BCldKfVs!>;znleYT&!5M!Th4BNTDYqz&5<8F*{$VA^TZlEj&sxOh?l{4pu z+IK0gNz5&ilyIL??DPBLseI}8iH*#k!+f-#^6dxLfoo=NU>uI(x54dZZY^`}RZ9F^ zp2TN>pK_+m*P9-HU3|U}d?;P=ui^g`+?y1h&kZ8`l)uWeB;W4w&nmnxJq=(A21|ap zHy$5Sc;C51WOLftl8>%KuTt7ojBz*(wp)fuy~n+DeXi*F@<ID-<AzCosK*ab`g>nH zDMH<vc%J0r)ob!kE$ohA?j6tW;MjJFZv}rKQ`#-U|0%e4D!eb<^xQ<+1(JWkv;R?i zJ{$a+EXhaf&oRn;z*k<h#vO8@<a>Me)%lu_uL9q9gu)MqZ@&qAkBcP#q-Xzfh4<yx zw(%TTw&ce~{iE={^w2)r^CKm{TDnuX>U%V}y;8d`1fO=X<a>JQ`Ao5|^dD4imC#EX zCH01R^Jq05eqNh+dTt^oSMt&E;+M*MB7FJi0H1Y*<RA0$p}tRt{gjID>A8Yh=7ai^ zJj~rUFn7Oa_n7$UpnbMpV`Vy`d^kQ|3;uTIZLhp6h3ES%k@^q*vOH=30?+?fDm?p< z$}1W9%>Rw#pM#Gmxc4f&(m#-14)k{XR_dMYt#?mU-nXHw%PD>I+{D&9r5=qL6x_!Y zJzu%ig0H$p@=r)yxQ{5jul~{RFH;I6|7Xws!wMgx{-t1zGWlAmH`~)&r|5D0h~yu9 z?Ig*+=<#nUyb=%Tl|pY&q15Z)mFMTddgQk{=yjhg_5S6>ccyZ_oX>Bx&$jV;$$R&0 z-Fp?D{YLgv(B@L7NPewn|89l%=O6s)KS=%?kAGd^W91)ulW&lE$9efbMtN_F^80-9 zTOIU<->AfQk)o%>NA0)?dmKMblX^kpObWPt%smM`3hp(EeV@N_z!%;m?MB=24GQlo z5BmLO1M|;G^TNGe;eGuy?X!)XF6~G8>tgfdA9`+LEA#0X6DS;&{uu2s8T(K5x5{{; z?eUG+@lZX<2H#jL`RF*mU*UcEruXqR{ZaB`BB{bZ-n>v*FOYqDZsKd^M|k;A?fZVm z)&$<ZUE2Si?Yq}K*?AvDsTbt0B&2II>;2KIzt;!rQGH5Hf)7e$eBA9F$q&a*`JjEM zbmk`W-=q0f*0IFXa}(2<|2^~W03|)X`7ZrFaSikT>w2b&^)uD<arsexvvI9Yz{OZs zyu8Y{uAuypts2FS`-D<&eETSQzIac?|0%c+DZKo1<ag|)`2T9QALZ|k&!?cwE1CZd z+liKsQZK2#wBp*t{HI=hxmdBU)HBL+DcEVVWqpaaej)qW;AS%yeZE1pA7dOYfnJ}v z(*B)Zd-+UBR}8&c=uQ2L)GPM-;hU8Dru4&<pFFUu?hda1l%Hg9rOf>faZzyZRqQMN zqI!}8z13yXesr9>U(w_GN%53`A3tC6UGRSju6i!8k`L0Obw&SjsTUo;PE+2C6(fCZ z(A#sL)SKnScfF$L>z`6kCRqz5AMKwuE4&g9`MC~y-5!v7=;CDX`c3{wTr0Q(Y(I!g zvhn<(21oP#S`98A+!7706x>V=t_Iu$4Xz1XrUpmz{Zll!RLqx!21obRci*45Jc_|J zXmE7i$|?=60bH2|*9LB?21oP#91SiL+&~SE?yGm#;L5>$y&$pwXujX1!8L<htHIfr z2QSs&(!kBq;OM-Rd<~B7s}I-Us=)Qu;2Oc18eBWLR_>pI`U9HpZ_(hg!BuN;Md0RZ zaCBe2NQ0yK{um9e6<oRomxTH8@futPxON^Fg8Y{cZifa(&q=S>;Ap<TECEO3V-dI# z=63Kn;6AIoztgvmVIvd$IN$&4Jh2z+=Wu+{c@jS-nTo$>;~JiTi!o1JTp44YID+kX z^HO(!l0Rjh=+%=`J%606@cei3Un#CEwjbq>iOomm3E&4YA059B1@C8(Kk_i=`I_~} zP9%8aH}8kj-;==|W^O$CGz#wfihX7N7MUkO@01GJpGNo5A5!wc>s3lmEBG?zgXW=C z;FdCXE5;NG?hT4vB|VgnX6QBjRi>xh(^KC+t>{s@X#O_jk;LOd6}X-nTqC$2mnXK@ z4z5{)qxsuL4UYDOS7>mw?>$$8s{mK1!O=W%qy|Ux#C{qa%@ez7a5PVB`&(i^(>(D_ z4UXoCYcx2TCoa<9Xr5TC!O=W%oCZhp#Gx7-%@ccRa5PWss7&lXnkVkk;Aoy$uffqg zais=F^TbjOj^>GzH8`3lj?&<0p4eZ5qj_SI21oP6FCR|qXPPH&*WhTL_`C*3^TY}b zj^>FoG&q_kj@RI5o;XZ{qj_SA21oP6!^;x;kLHOj8XV0NH)(J*Pps15Xr4GvgQI!k z6b+8%iK8_*nkS}da5PWsroquX@c@sXLGw<UC%%(_^X7@Q%thykk15ajDf7evPG`J% zVvPCQdy9PYH<|~e;>uw=IQt+H+`E-{mHn7x=G5QmkiBAD+u7b*%(>So_LTh-(yPHW zh3j|vaZ=H}O3_p1Bc#`gt6;UP@9F3}D7ddH&p9gbQJx!cefe%j;O~iuYr|F2l$fJ= zVb}L0hgX5f;LRWTBc-<joV`Y-_u+2x3-?MTy-GeQ9mUYw%IP3qMS^GFH@|KNm$gya zKNbI{;Jy|Ac?0^L&Y)K$zaM=}g#S$8mGn?P==p(tTcqBPn5#te9#ft-Q1mDtnb51@ zd<6Na4qWLrY5$-2f5iS<iS1W{ovLA<=80c7O8b|1=|2=~pYojt*4{4luC+N`7bwpk zDETHm`kl_eCf4)n>AJ*v4bU6^q13wya{&tOt-<RJimwBDGe4Gkzw+uqSXmb+?Sk}Z zo;a;V>P7EgtLrT#f06zRdc$^0z2m(21}pLT`mb#8E$_(o(t>y+L8;HF_+t^cr3u<8 zrMnH>Hje*BufFUL_7mA}gr4}fO!q|iEE2qQ_<mPN^TZ*0CFgqfKTT{u4SEX_q@U73 z&n2WJ=w~ROP2kr4N2X)JX)?L)ONrA_3%wZ$`VUG+Gq@iUq=Pscb-0ZCyP)4=mV&ED zlI47#=Qs7eY)XA1`!xS-W&49=Hjlb*NB(F9x2c=7U*Y|Z=3V8!b`1Ls&|A;;<MpRx zKO24GcV|fZ(dTalDE9+m*iVI?y+i87vrqZV0awOcJU<dw46euf!S*P<G*4Xme@c4a zQtrnn?Vjv6L2nY<Z^7qC@Y;dzK4u5FUOT1zc<H5dlwkfgX@KOS<$jlv4#jVzN9QiA z|CQ7`-<HX6Uk}!!^wa!v<5^NKXg)^s&+ZA*Pxfg3xtzH(Win#cze3FKayi}?p+mua zEI7T?UuHvZ8r%2gd(nNm822+9!7o2o=5IRcE(Q0z;Ce{@r2WJl7f3w^ZJUDoQLtVl z|A?=O(>GbF9hHCLl3;�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%0A6RWbVXSn?2_{n%ojU-ay`m0P+ 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%0A(L~MgUuM7RA8h-C#XshhuNi*t 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 PDtft8=}3;>+5h~1SHfYB diff --git a/node_modules/gulp-sass/node_modules/node-sass/bin/linux-ia32-v8-3.14/binding.node b/node_modules/gulp-sass/node_modules/node-sass/bin/linux-ia32-v8-3.14/binding.node deleted file mode 100644 index e0469e7e3c3d4aa4b667bf83cf364ebae57a9938..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1171214 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≪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≺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�!;M3t9CqOHZ-n)P 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 M2)5(g@?hKlU(Zeb(EtDd diff --git a/node_modules/gulp-sass/node_modules/node-sass/bin/linux-x64-v8-3.14/binding.node b/node_modules/gulp-sass/node_modules/node-sass/bin/linux-x64-v8-3.14/binding.node deleted file mode 100644 index 3512cd6d5c60a57f19dca10546252281803091cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1189254 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�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 IesQE-jF{$bS# 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�(p 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/bin/node-sass b/node_modules/gulp-sass/node_modules/node-sass/bin/node-sass deleted file mode 100755 index a96eb4a6..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/bin/node-sass +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env node - -var cli = require('../lib/cli')(process.argv.slice(2)); - -cli.on('log', function(msg){ - console.log(msg); -}); - -cli.on('error', function(msg){ - console.error(msg); -}); - -cli.on('warn', function(msg){ - console.warn(msg); -}); diff --git a/node_modules/gulp-sass/node_modules/node-sass/bin/win32-ia32-v8-3.14/binding.node b/node_modules/gulp-sass/node_modules/node-sass/bin/win32-ia32-v8-3.14/binding.node deleted file mode 100644 index 51b25e1266e25a8c4d1c06a7bb249f183b6ecd62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556032 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�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 F{sLr!sX71v diff --git a/node_modules/gulp-sass/node_modules/node-sass/bin/win32-x64-v8-3.14/binding.node b/node_modules/gulp-sass/node_modules/node-sass/bin/win32-x64-v8-3.14/binding.node deleted file mode 100644 index 215bb0e9c6d727545e7a744d2f2a4e6e1e487cf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 677888 zcmeFadwf*I`9HoPSqKX5qDEq+vTBsrv=T*2Fj{v>Le9c21Qm%@G>Xu81xZ$JB7qH( z?QxY>Td1{4y%c(tRzHH5Y5<!=q7b!m(W+=|nHa68m5a9Q_x*n6oZYjV1XJ7Jf4{t5 zaQ2*;GxN;zJoDV<nK|L_u5e|$T&^7aOC(&b4Y=~pFaIC@zXK>fYWPz}xgH<*(n%Y# zLNA?kaqYErzS(nTeQ(ZHH~OYub<<6=>U~$w@Xd+b<h%AJU-_hqd^gUzX2uzV2Om*j zH9h*?g_G*O$Qx$=`|z??hRwnK((`u?n<v-Thn2|njbV4=T01i~Y&Nb7qPGvb8P~cm zjve*|u6cPa!>*O<+wy*1-e0WiF1cQK?etpqVUMV)!sWW=_WrK9Q#&rSpY3&>>^rjG zkuKLg16;26`^n?ApSoQxul#Jt;)TCa)L$N@uC9(FG!mt_237S-_NDv1ep0+*plc%D zx#zZluJhPt!x66C?8tkB>%|&Au>MvY;aZpPa;<xOfUCrQ*2A^xkGZbd&gbg}xH?GS zUjELgpE0i<W$)dMF%x8toy_3)^SN9#XUw_gs`{&3uG<J4+H}2(>ndCwe}1sd8M>Nl zbu9{357dmb09VJK-{opPW45j+W5ifpSEIsH-Rk+zm{T`rI*J4*zzuQl8iuRm&(D76 z%(!6|Di)4G0dVCy7uOTJ)f?-0?f?G?3>dM?3v#C#(GPrvxyvvI8p~d&cdK!#pUW^O z<m$T(a<_1vu`E%4q7l8oRqr*-ZHc^whX%NeR^b8Mt7U85c<Jc|wwh7%lJuIFNzHb{ zyu6^;h(7PTvhz=C+^!e-M|iwOtiB+hK-C!LK_eb2C<&T-6L~ccqQ7|F!OC1*LItw} z(Y8b)Zz-Re+YB>5k#`(^H#XM~HB1jckK~MM?m7yCO5~l7g05`C9AL!nDQE(OA#<}~ zwk7iZ^>em~#^n85qz7HYFmn@m)8s*@pg8a(8P71id=cRJ5_vaUWhIHct!xFOnP-@f z7c{V9^!b`AH)A~hiv+iE_rfPwWtS1l+P5hSD4vQD8)yr|zl;^Fzw%f=BQ`$QFgNLk z@_w;lW(Cci<>n?MelfbP$`|5{F>)hEnMaPvjpVM&LPN!uZ9c16U+v~zG)l*#xO_~% zNcOrc6g#?-I!4_6<hWc{^09_DV73|N>*}&qfU&hK-@_5b^H!mvv8>tfRCH8~Y7WK9 zyyZ>V<t6><j}3wnGd;u0U9MoFd2GXZ{alfKhS{!;I*K@R4if!c)xAG-7Kk3miWH+= zqjjwA&}<LI#-fXU==yxT6WEXkIMh>v9c=<o^?xhVp!}qw7buS+l<Dx@<ZR2vM<*KS z86S1&JvH^#Q?K|qG{^zF?k_q2FqD9KfM|d3$8J}wl$egYbJ_>GBH&tg*Oq~ptYzQ~ zFs?msHowRzYi6NtJxba-<A3MG4RYdomhJ8A=lV1`63r6jO`!tcluH5^2QCRrHOvo; zB_EJqqw~G4fai&i!{+Xg`FY6vc(KQbhl>+=$38%|^>*bL=Hy&FT5H7aE1;2J#BME^ zm&hB0^6;|vJdGz{egvYod9y;X8wzIIufKLbU(fH#4VqWv8quy?R_SM#u9wmhmfnWa zkG%fIef0yvXgRklCmcJk;K^L{6pmd};8oGbLFMSyM95Se?F^Z{$FYHU81uMX{{qBk z$*;Uu%P1wn{&KS=k#~i36b5^}pr>#m?~9)ivMI%=vpSLYn%w0EV_~bkf8jw_cEzX< zEf8)fn5SF-A!K57hPjh4Tq7|2kgp01&H5K$_?`U9o8*Mybv`pwFtjG}=E@@*hRJf5 zYs8M!&CSPsSHDqj1cC7e;DM;iu~B!cu1wTT1nN2=kA99vtm7^>ciYvbWK=6m<SnqO zWt#`=S|g>FmyKP5#@^2d02>l{#qzjfgJEtp5*r)N%XLNe<A=H&{0Y?I`Oc8pJX8KW z!y5sj%jJ3Eh;ZDWWyCMc3N#ss#up+Vc0OeRpQQV9_YoDjN#MPSy!Y^kz-K#vUzJe} z0{)LywX78IbEH-ZcycL#uan0B9z25q*zlzd<nAAFAYl%~Fgrwkd7cp1jd(DtX>6jg zIr0zP+&9r&!y*IKE7p1%TQDMN)Rop=nY1@$EwEzu*8@IAy%3BIP(x9-BKAFBAhx(5 z7`w7C7^^IfCi;1nt+%k%-=@wFeoAbm21u600DmZtD>gLTTAT$2yd^90nGv6urJlV< zQwI&^&s>524T~O{9M*U)$J<?#X0FJ5yFtILhX8rrEBsSY5%7Bf|FP)GhcS?C)+X|@ z1TaVk!?Z-jlII&Zs4D|k1TMc~TAD=iPr2xlsYd*Uf{l<wRLs<o@$jBR-kf`7UJXd( zDgH7?8Rl`uvRCTe=7Pem0fsp)*PK_fEa6!u(uj<U!mmXa6!eQ6YnT^$(aJ1sAyni2 zE}$ViE0NbIZ5?NrB`o7B{ZTNt3(^xU#KVj6D)j!Ts5a^i@F>lQ{zh!t_qqm)A@RXa z086amd#L(7Z7xai4y*VzUAzMZPy{bboQGH6?tD<j<w@i{!D4w@@pk7O#EAvO5$Kk5 zoz*qS0%R_p_!D{e;f)>vnSOXcLN*|P)7+8B%aNWroO<*Ci>OE*fbZ{YAanpT6tCE! zZrzti01jY%DJsC0BHnO!hg3gGtSXEE=o+Z*xu2Z2Rc-jperFtO3H6?VZ(uBWo)o?E zipx?oPuX`=AilsQFpvDuH?+ZghWQEP6W)BP3h%|o|6YCgGq>w0Hu5BWBEvkO-oO(P z<2%qbCK~5%tV9(YOu!c0j(0=x!E64VNQC0<-3JKQMKD&OAl_Ixzy+CoJd6qNcc>Z$ zpN>ml!!oq1wmgWD0D`JS-YEp!geEvjKuY9&f)}ZAs|~ZhpvEw7EvOBeEikkEfh(YY zslRCudM$g^9?9#8ymfdpIg(Q}+%#~^4%kK<%Pay2%X!CJ)Y=|ZhB}5hDIWxn4Oi#j zPWS^eYs{5}k$_=N1&iJx_ABTka5*SCSss9*+tlrUL4z8juO{*g7R35@O+y1<vO5YI zFy=&FK<aN(m$EXZDxdNtaNWKi;|;4P!$cF0$O9>R*HM<p`zP-(O_J!^EDtWHl58Qy z<^faM6i(VZ+P?3V{%GK-8o&}C|8w=>PrK0{PXfQsGE67^=jEzX_LBi#!^>cRUwk19 z@U}3s#Q?AWD9HdGs4_4>AufRpzeZQ;h1E$0I9ZP<#Q-1U#a<cUu=K}^$&s9*;ZCPN z;RCrUcU$yF9ninfqCelDe1LWsb7e_4`U_Z2`pW~MfB!eq=+6R+{(cAjrT#Xx>-FyR zM-(8P{_;T6-%$qo^Dd44^58J^4;AEI#JN%^zFl4yNJXwQFsXr@MBWx@|KfrwG@HnK zUheXKbS^0t;v~!`P7--03h;{fahTz7M^BfYZ!N$O^Je@jqt*JfR&Ua+R(5OkoNleY zioggbJzKp1awQGc6VqDF*R5uCYxQlkkq+x3N2^a}w%W!*IC>fbo8&I<=`ooYh;?gq z1gl1$FT674QEGoq+^T@(R_zMK0&uIc=(%P1L~0skfYV{K{MYFGd?0z(9FhC?Io-n6 zG6{6GWV7cqS60t=zBvcpLl)eYjhXV&7o^AY33Wa+@ps{4<Qvh?y>r~CPj`KzQMz|d znLNVXKqGsC*C^e3%b9kiY*yNA6zvVuVSP13kz<7wAbLs&(UqMqU`)a2fkU3<56kGv z@`I(#b-s{Uh9N<Uw5z!YkTGOYZ$uXY+A_mDvMUf?)*N}CPOcF>;GJ{4VP=;%32wyu zN;bb40C4c#p0=~aBSU7ZVQyE;=sB`+Beqb6ry+02DZ!hBG|j7nY#LOO>r&D0TTv11 zyYYWZ-rV2_lK2dBfj0=ZNDvt;J>XgTI)_|zAXK_7=ox#^DBThnIX<2<z!($odX{b> z7KEVSgE_=&OHQt9)GNfq&!A>IX~`SW1Q7NcL0BN)C~d795i$crm<qzv<JfA9=xx9j z8u+%xTLJNQGEJYq8L{~qZ(x`#e^W^pthbFVS+1@k5(qC3GUCUc0pzIb=}h#7nHz|i zdd$5{^t|?Mpy$3A&;wkx@#Ze;=2hN|=Z*XkUp_0o^*Q-0`gxKOFfRD2#iKqnN;lPk zQUR~J5##TwtAO2eDS52!BC2-4a5MOByWtu8i7>-yAv}fE0zN#HH3x6D1VQ7U!=ewu z99o2HNT80@dF}9tzv-JN3Z=X9!0Hk3!L=GeK;QBHCZGk7kckXn$Md6RVcpFbTsFtE zpvgHNJ6;DAV?d>!dzNa(ZZ(QFfwkwJV^MdqcTOJA-;(16lWo)-${7Kc-Pn>d1P}2m z8A<@Z*H4x=Q_~MTWW)!d8#Y}(Xng$GESOwsJ)MLk&Co}-W@Kk`oEABy8GT?pC!B-v zyt~{UPbgMi05V)meuieaWU5$%#YSs+LE#~2bkYy@)?SX({M?9c^N=%dfq?kD>l~0Q zKZu$Ca;LH3*T2$##{NCV%kP8bZ#m9rZIvbn{l*XwlQTYk9^AW0Srw!9(GrHRIhdF` zSdDm?6x$1*KH^qeZpRHHd|hxOE~gN#FQ}mgs3uW;#<G3&!!^GHh+`;#Uga~*1zXim z@3wG5S$U+Ija!I^P;3-tJ_ZVoh$b*;g63N-Iir9c3=gy}4qS01tVwHr3%{DLLqV$A zU$|ZSHfJ%qvrV1Cwkc4OM0>Hb5*0M7C;44WQ9m%mIlW7LX1ZOlIuSc+f-sAf<u{f2 za4DP_D=Wse1Xn+<MpIc8F4awCHJqRjcp@8r3f8k2r5b?x!98*JZKJ4+sG-Ej1P!ay zxJOVCaVm+5=G`|1;VQe(r>1SQpcMIK&BtBpSJL=|Y7)b(ntuR5LGgvv2ybE@@Y!$h z3{MO^DbY{v)lV=fClu-@P5Mb8p5*H%x9BJNcp?UpTV2B^5IwPlz@&}7&P#wA2lDXK z(sw}HCNKrYa{|W`1C^ao%+xzp{kZ!w)&rB;@!h%7VYip|CIY!m2Y7EZkei?f>oPp$ z(2pDF=Qt`zDBL!cmwd1erK9$RDCrNz9xrI-dkFP4uHla{XL^?1k00@gpzD1FZTP7| zKj*k5Ty<^G?EkE|QQ-4|FlXA%%yrRktpXljiR2jZDtHI5@zi>;NZiT_aD!X2TM^1) zd$qur*n7~#rUAPjC^rqT)dZhm`oZ93g^XFjf1yi35d8aEvgk#!;X~q>-B-Y2Y=9bp zysU!_u&^*_{*~U;i!XYfK#Y5`7op4rLL2gn@Uu1*UJsUb)SpJA0MwhkjBgxC{Te1% ziOo%A38VDw$orhL#TM6UE5Jr+s{M&~koJ9S|0GoIYx{Or!X%nM5WEkXFNBIVsax+N z{!(mV^Ba6mRAP<qrqyuFm$-W>mKh)fh0Dx<Z&~wg7<@2aEx*(4>N;}%K)JbX9ebEi zsBXqnFz_ZuaAVp2eXSxz+SQwUo+kQJ?EIpC3WG7fL@;Ir$YYppa|tH$sOJ&$s5Aq| zM&BJ8o9sPhlc&)SPJ*8FEDPZW*=;TAw^j@l25YUjK(85m{k+HVdTYgK6uQcrDn=kW zFk)>^eKpu`@<_U0$D%;}oe_lSq6@r6992AJtT$y3>VAZN_oyy<XS&$^*lG@Eng<0R zAs9Cl*8$q#>3k7Qt?egm50<uNz2N(YZ~HDs+f#dN`yn*j`6K)Xm|r?03G-QpZ+En# z-Gq=J9p*XpUDqP^SZR!UQLQ0&EqR_8pSF3_E2Cae-`WD^MDYkUGA>m7Gn<I#eO5)W zDrosg<t8f~p({PAD|I+4{q+UArN6P4xcmFM(yyJBo@FKZ6Mjp^Gkl}=!F3Qd(i+Im zqT$yX@Nw<ih~4bRzuef($Kq0me~>vhm#Akj!{ZZk)t~P}XE5$zRGj$xEOq`8+{Ok# z{Q9-{#RRn`CUj!AXDNns@V{1wMGwd*e#3}98Z^rwb1ET&pwmRIBNT~2K4KTQYC|g7 zV7K<(U=S<rzTAGHr}m(7#co0?j`uMi@sdCVsjqH|IyCis5tC_}T7$s%^QUMl$H%yr zIUa%(hRwmOISY)$3r6%Mh_IIoPvuKSbOFq37#aO&WI!wq%SF7lbY%U}v;`je1XHGT zXMKf{Xz%JYqKkFi0jvvqXQvVUB2ix$Y#k?FAFf_d4Y83jSa2^vx5H8mwDfnWUw@iN zbU}>pftolJl$EBSB|Yjf_#eb-mC;(MoyXQnX{KcWBsXJVKG-d(;GTt_{3!_O%8K$> z85>54#l1Om4fDEuBhh9=UjXDAF~p5V^xrbVBM9{tj4&%XzRe%&@dd2$>5A#YI~At8 zHNa4OLY5J`$t&>{hKBr2XQ*w!QP(M{N|-=@{st@;yPj0Kjvb}O{2W||^fAX~dHqcz z8O|aTbdO(8#bVkNn5|e$i+)gRnC|LZZIP*9Xo`#bdWHG-kl9%ti!_JET<whngJy@? z4f&)kNnra(Rl%OE)z%OU#qy?89B_@0QcZ?XY%WSibk@Lc4UehuM#iao(%U*n!>XsY zo*`Y|kka(FjzwFrrPTyn;r>(!N4%uYOK<n*y|n9DT0>(UZ7=SjZK`@2XX0{44>}y+ zu?@Gn5+e<mGPHp_jY}w65Z?(FHIrvNx8I9bgYnr|-aZ7s?I&!gbZZ^v`gXdj&w_br ze229+VovbRffJfdCv;z=i%7)8^3oEA^X}_94QdZq?Sdx;=OlNe<-^oD04i@P=pRC4 zy2dlS0kCj3c(XmX^Ec#fTi{8c2eF)HpeGQ0F$=0~H#J=-7TMWS(dJT@?<E={SQv}! z4w;MEg3&|Xzy`j=*Mpw2ZNbvLA<x(rh8LKh07p3Qu0r@k7ycV0TSXsaFb11FC!hbr z6XXN`6IoqwFm#jtv-Sn{J)c#7bRhcPA+|pU>vr2zfA~~bKlL<zED-LK{xH=l;^Q#6 zb~qs|Z;G_3KYRp8;}va2>4ExhI2i3&_&@f1C!;|Vw?W{PH;q=qPa{GW?e@-rsS$2d zchgm37$wfd!1iEN^=qlvFjCDOp@$1Rh2jQcwXb&T{p@7#JJ~zKE;0%H(z{MM5c)~) z?d46Q)Xz_~diN}y3BOJt7=r4Z)wq*5%d0{2C3WsOtcC_d@Y!l~tM4y^XR*(o5cI<Q zO`{xR-hy(2W3}X*ziBixImnYi^H1nWQBAv8EBbsbma(P<F25418t`YQp9b2!K95Q^ zKKK&eyu=&(&$jR2y#_&1C+|0ujI<Ir5H<tE-hOj{31<z@v$^WIhumDZ03#DepyUY+ z3$xCxZ<S1s?(sJNMG(FaM%q<?FlwJ`38O}_(CGP!)`8=!kZe#+PuK2MD;mJ%X?&0z z8(jdHFiSK{x|A>#X_)dfOwdp|n$<85fZae#-w2ZNI7?oA4pSEVRE`;iA9Sp%%bV&8 z40YCr<iAisVY2RPtme0?m9Sc&Iug}F@p8mP;BOY%L21?aIYj%}e7`pN{;SVv<Fm1# z0bSYc%ws#XYV!x|t{mPrmtVH3=}=^_iTl-$j_&!l5q+j$HQw>gfjguZSkx2H=SFLz zJlAbKUa$&v%9|dS6&Nw7fr4iW8stqZ;Q<)6n6E)spcz`k<eRpoc(mmCb-1OQKP?rV zg}=%5PfLNo@ZJT&?d5Bx`{-M2Eixcvz60j~6M9eB+!#bu;5hPsJlv|eUJbx4QWa<) zo<hewyqvgit$0AgedEgVrW=>5CGYd4yjP?OQktX=5UVTQP~b0bLJUfMm(|QE(4iIk zjnWRrW`K6kiB#|z@b!HG^WTtUNLP6+WDW@<a(f|?e;74nUR4-#v4Xbyo*)<p5~h`P zAvWIj(z0*$Jdxuq$r%zk(JJ19;^v0)yd&v>F32(xh+(}lXMK>l9<gT%lwbppEZXmh z-YYlZl{1t5q1^;K*~7N?lzW~yub7re5ljoJkByMLM*LE!k1wD;e!;sj(;o0d?+2%Z z5EBEcz@zFG@}e1DX)JrA{+np>0XDguO)f8QLdYoX3A_&=^qa6b@j{}-D2?p*EUg#y zcQM!$T;K<^J3P_*2(648NU+9!c8L?b^U}aOiFc*1dZMS;(1A(>ZwGnTOg0W6M>9G} zb}mM{_}|}jHWD{(Er2JUdPrLnL?xtzNg7DB3T#WS0lY!;%`l`J;w*(B)F}20_XA$5 zT~K8sGPztMBiV3#kv0`7-8knR@XrrV5*AydS?oEB#nywx)~FK|00npjDf-0oes8^? z)u8(P8yIDx9WmnQqLmm{#rmLm2%*(QD?>$lL#6xYhC4sT_|c4K+0Ep08~LHwjVmpZ z6m~9V39Ec6Q-O#8<jg(tYmAgP6?W#3C<v!EE+r-6!v<(Jc$LkY;pdFfc5s3eh1bYZ z@~i5GF1*4rz{QbFknX|JYoO%F5%>>m9g2t7gvr*3lpPz44}wwMs#Y)N)DJ(WYvT>_ ze{9-%GC0VP9fWujGdc_~y%kO0gsp;}P^<1-yt5uiu0J2$tO=Sgs*9|~5HaU4BOFRx zw+Te7CnDBhj9tG1q-*eGO)!>IV6gz(LNql$h{+0_R*^=eIU=Zv)%M!}t>6}5We5S$ z@5|L=x(X(4hAfftR&}>7#{_Jxc-vxx9bkl3Dc_^&P#!d&51IBf4iBI_+^|UGA?2K< zN|_-5^*MAn)aRWyYh8K-Z<bg$|2`2n_14W^-h9ux`73X}Yu#+;O_(?KpZHt!XMN&y zLBu|p60wiYwnZ$|J;JRY8>KJPyLvgPQreaIcgj{;Q~Q%oY0h}`cq0Q~Ozl@QP>WU6 z2XKzH-|Ja6jKAaImC5(E<Gn|%_dvYJO7$&yZ^}w}x0x>8;p_kVZ>%EqhpKh-T+Bry zo@A2-W_B#R4TfkdT3&CI9<0AWFX9X!7^Mf3M(lb~%sbQ)PF6F#O?Vi*wO$w-?~}JM zpNlcs4}M)H`}%;yCDnJtu$wXzP(nb9idUc0EHf9iJ|$3OFM^Xl<t~7+oO;)X<%#+m zC1gLc6FxCGF5#^k;)JyGR%@0nn};7Z{9Q}AuyMPKQx(d`XTki^9>P53F2Z~qMV(Ji z`v|8d?gZ*7`{flIz)J~We9HQ?hvo8+@56^K(uRx}pwBG?b2>aH$+(4aOAB=P2^_$p zyS#c1`P2_t*-0^SMmmKjyhn<KSE^TX@UlciJj?z-Ne`R}<uK$uMzqxpq<jR@?I7u9 z3ChmyoWYlfvZK?m+W9XLe@K2hfFDU@cVY_%T<a96cUWlqG1<&S*ofi^q~2kXdJjpB z84FSqKj9rV&Q2{rzwx|7CkXj>1U7(lE_DHsW-i+E<)nU!1GGu~5l6_8btAPrwMd<n zLF#wO>i;3BZ#sow!*(Id*kid=9`-=$KhN)-)Mp>h0XRs#hLsOb>Y8^gQtyGyYm<7t zC>v{%l2R6_@3N-H!TLECt?%YrJ<$3Ko7Vf&Xr16=(wc^sbB_Fy9A}2p<_I(vyLQZx zp=mfe=VZ2#chuKNZ{W@%_(Y=4T(sOt@JG?o8VWB?ZJSTu<0viI!>QTd$tew{^DLu% zL=a@unh!X?zavBsueA8|AAcq2Qy#VXbfq=B*N{(FCMS1Nq^d<H5$=l%d=Ap6T6qW| zi3q{JWCAUERJ*Jz)$X~Pj5Mo!EJMhnM1TjaK{I=1Z(zOXqL1`@JJeczzfIq-SF7~> zNUFYVmPl`<;1$(3RL#@n9+r=^%15AlsFd$l)l$y&b4Z<|RFJoJC@XdgAVFi_1{FtB zVJ^P~es=u60&2{lc^NF+I+&4IF+uFjo@G;#bm@H7W|*fm!>l2-IydrZeDGsKp(4L= zoz}6x;LX>qo1gH;Yu((zn{4Z5F>m%=tKXT!n@-;FkNVYzHG|(2NC0Tb2djxp(|z%^ zmTFzLg6wJMkHCM$%F~n@bpw){q6c7_O$OI{)>q7Y(uL8@JZ0mPE<diN8$FGqWj;vG z1YB`6%UGzj;0hkCQoaFP3^T?=_Ies$mTs{Q8RD`SZ>Af_ItdL%MCAqKc$!&>DkRVG zwK4gG5WkG+ft-EiIW_$wXX4(yij0Jf9(Wn$SR-zRVdUdoqN>U;(RQ*;Mv&aUyqzIv z#If<uPrs;`4eFMXeIg2hrKnIgss)*y>jUDf&L^YpUh1$aGjwc?k-aJU&LJZ@&u~Su zqc7x`FUy>0Q`d>?cJ|(FMBiiB)&_82`5=s_8l7P59Fb&8b{h^h)fn0IFG>gRUN*oL z8If$jym(LzFg2(ux}_foC-7{^0W|7u5y?G+0>=X=4b$`8u6|6?;l3u&lJjks8Uc)l z5Kj@hAfDBizUsu%3A@y<#ENov5!-R3=f^5ss^1Nqoynllk@Z9>de(f>HN;W&QJt)Q z+q+mC=}Kl?SQGPW1nS6gCHZE_^JHN=sBOh>u=*k9O>4jlen2{r72eo|oEBC47fP+v znx1WY+VjK8*T`rCZ%Tw;EYE{=V3e_5dH~0&YJkIaS?mNtfDx!9b-8q33AtdcPxLe% zE^C{u$)ySbgY(nQ7m=02(k=Dh(per5JOfq791K09F-8l`c4RH6Gmd80oAt^{l&K?v z4|Ic|-Y#Q$RSrCkBMevltuUHNaGyE>Hd4c_1%<BqF^CIE6*KfTxW$-&wV3gdljSic zXLh?e*&E%0CY(IB5Gp|JyWWi;bVNKApDG+qC@AEC5<RVl7^z7Bq!9Pm{X}^bcW-Ru zyv*u+lQL?PE9DCiA$}{v#Lrk$F+`$dn9M_li7cvP{XSGsI4Z&1WaKabMOjvl$2)q& z<97AQF%l?;kj5xQ)}V?BN07-ti7LO5RhBE!VxzRhQ*n?jb`3;G5~H{r5f$sL>~@%B zLxG4RVUs!WP)B3JJkpp>F+l`skuoHK%yvzYc^EWukagaO5F7s?cAmEWJSt<ymmQBJ z{SsBhBuMU&&Ey%xAkDI>1jdF;3v-AOABzQ*EYA~=0gk*rW=w$-u|LmFO29(Ts1J1> zAJ(%F*7n@V%yu$f@yr!mRVo3dbPmF8V-RgNJfXMgS|5$wCM6+`WvgKxt*)L;XK`GW zk^QNW-E}(RlM_pf=}7MT!pO?%IzDI~hqe+ImH^~>Z&QCpUJ`#Y65C)aEdGh+Py{oO zMg{04Wem{}f{wfb!~9d%-!z8$1pl4s@UN0tz#NK9_$T@Weyl|dR1eM)_^Tc8`&00r z5H|aJp5PDy*uKXx9F;Z#7%MV;zib51J7+eKzxy$zXKXHZ$R+m*a)e0jN~6Eb|J0zT z>UB9Jsk^`Hg{_Aip$|b(gOVohUb%!VFIgu7Co44FkBFRmEb1Y)0KT9O;e?KlSFzAp z|1wN$jJPRRm_L4r*T~+gPK0#iW6lTU-+RzQEC<R}p2UAph3OW%_{@J{pNd!g0fNHc z^gD)BarpuJj8F98wU-G6L{MxT7!9c`@p0g_afm^VE5X&k)sJfxuGP5K;CeZ(wMOi8 zYznC|VwhXFLl^Q3OVfOS5%N-l|6{*fjm}K><lhW*#cscc9mjsxgp1ln@S&ehGORIV zZxs>M&lq#90j;dH;I6kgGlg2hY|uO8HxZA?{GlZrD`n)8jba#4RL0#~k0M6OkJxLN zfxSd!d3-4=mgCt6%1=<tsJy8$*dp~CkJpVQOX8DN?4IL8?7=xVNq=j8N1t4Q#(+_G zl-wd2BUoqQ8bmzWz>+apk*{IG*Ba(Uvq^ok4A=!Pl~onJ67x1ZO@z3ZcGj+Hi5Bb= zT}<xCHq6UvIDOBcbb?Sqq8LQGmn;28g-q8|+I(sYAS#4>E5g@#y{K!EB8C|wWO&iD ztPx28nfnu+<u1g{Gt2$XFpjijy44kS7-wX;WJX0lPecZcYVPEoU0~Xe-BZjj#u{#* zIyBuiK0c@)B0Y7(192k}!w{$X17=Ie>=)!>RqTk0rsB@q_-gbyjYXK0Z2&qlkV})D zmr1Krfyw0!918Z<0+W@%<RoCSAASOpXtlDc=mlJ(i|4r_!wqvK+X{G|-Kq+1b))UA ziPDyUr($2{K(vQM_SnO+te{;j#4=kdJivN|2d>XX2Ey4F4Eg;C1dKqazyrqu5i&x# zHPK|`G6km@w-uw_Lo5-=y5Zpx&ow8_L-I2MmKBK04`I4xiPb8aj!*HRU_ZK;;t6JN zL{#&DHe_|szhZz9Un%aTMExOrA>EtK0EHP`ziS|V=)R_S40Bq7{jhDsJ2xQ%q5fMT z^DYirKM#8#D}_5yzD4bibL|j`KBYT7%iiWV07%R7CHR$Pj6qJ%vPbZf!;tvr*<f}o z82CKV$5<CiRzm!_p4$)NJ{Z3gh-QfYExuH`xh@P_(Sy|z`gyBfgYRkKgpD=sf!?=) z#n>x6+>$qlVg3;^0C|SU?eL~S*`2?m-?Z$F$W|E|Q5l;tTxwuRxpM_d1LnRiU-UqB zWT@xa@P3QZ>N^X>!y$>;Ir|ge&!a9EA3&2UWNNZAM%n<_wG~TlgY!3%&foWI!7VyD zNIQJ-!5<BT3pVp|?T@|7n@f4aKc~GHfF?Z1xMnWrDGU|l$&AUZ`xd50eXi$;K%#V0 z#790&pffOSB6n0X$~+aDw0IMVW(|k)$Iq0KQq9nVJx{c&9f(oWf*|{YtM1|e&_n&u zCJ2RXs@aS2K>1QsN?Vvcjyr+Zwnqr-E(_9pN+Dx9G|J1!<E<OWJ((isXf#2lz?3RZ zRF#+q*!N&qFR-el2bwV1V!S4*e6WO5&!sQ^2l>GSx8EZOObG{d`m68S(&GZi2cpaZ z<C_o+RiWwq#>aEAjMBEcVS%_m!TCK2l^pg_=O>s4PFb-I4O_Be8;i{UNLCnn(nL;B zA;>>k3ZT{A&Zu;<HPN|%KdgK^I=dUtn=KzIkUooKI~{LWG_t&D(QwtDtB;To<>p=( zqK(Jkb?n%6tk*#-ZVeV8^XMQJ%>IR9%qDBW>>c*SAOu%RPU1~GJlvX9V_%_y3y;PW z9Z7v4>%^ENGB<{glLe_oqdA}S6U-+7bRLpGP@ipbbp+BW6h}N6b~8jy34Z7DM=^dt z_DtcMQ-<>iRv$%H$&D|BNjp50jf^1?PcUScHP1VbLg~(*0Uex+XJ9su%<?Sdc3S)# z?G@1jX*XP6#y|#?n_E;hvL-xFL<UF|nV-YeGczcfG-l}*t|f-k<|iqPF<ij;`TjLB zKgmrD$8fRc6N(Iun=3`JMI$LKhL<;$==f|LVs#7>7f~THM*4+(;C6eBr%|tjikj82 z9mKAPPgUOFc7b|e1!P;I>CQ=_`H5T;dVq}=ZOpD1X-wZq>-$?MP14u%Z0JZdB+3V? zZd&&M#ybbF4ZPm<CW1ouyCFmJs<lA*0dI17gFng>m|-^*<XeuDkCP-6|9u0-8!$U1 zH6J48U}#Kn#2Ww)!E1}ohswjU;a0=4L+a<Mhj6wF@``R^W{x}h?<|Dx_3+ARwQpCW zp%h_yO|+gea^Y9o5nso{F`Po7F=ri4&(a)*bU*@uflPOEIn`Dd5ajL`5wnHmJU!ut zf-3Im(Q?Uh5F9R)HQsdp#vVq{^dr@#SX5+~dlEQsjIA}-8k-)GL|xRK5RQQTQsyUt z!G)CN+=`9Cj@RQl-!a%?)d_`x7YYL=3}16wOopH);5?$_*wA&_*iNfY8=LL+qy|_* z!KpK=NzJ5vNLed}7&lHqIg~I1{7B{`^{<Era(MDVv&zvU7-pDvQ;loj+tuj^yAgjP zk^!1rb?eFYZTr*QRgYj#R&-0k@_LRpOp}eNGNJeUfz$~-wxnCM^#kDDqMj2+vYi<m ze5La)@RZ%Lb#>^!_<ThIL5@tyw|tpfvgyl|=PK+RQ7~zL4E%**YFEIbu83Vc@I3>G zoR3`UNaS316=pY8Nm7ZWcPRa(@?{Nkehu2a6Yc74ZLqB2;KMWVe3`AhO_ifB$(9G3 zwySST&rFj|)1m3zYklwNKmL3A3P>o8-$@~*ZeWI7-2K}+Fp7R;#BP_8XEDR=r0}h( zt%l>|AZdZHS6~<?*rf0&%&zW3d&&JMcgss@$Vt`jF}QWST8MYLjwUktf3*mghRa3+ z`?KVexVB&?oMS@zdYMD0iBP%;nIOQ1SPtNHPvcK<7mT0h<<g61`5#z@y+pFj4X&q} z*$%9MZgUX~L7hWc5#WR2#zGhv*vggLH4ep*ce-tJ8^^6x*yi>f5DoQ?M4(vSL*!cL zNcla_zGh^%Axflvu!V|Q;@jQ#1k$2`tnypL7jhtw5g+_%Vt`9sccB*5f9K6K-q?RB ze&k^DkqIV=xCi0-A;O65YsfRc0(r*B=D^m#Hk|_p=yYPO=ZUkBCXwqe85PO%JdqtZ zx4+~lx=(11wq?P=lg#7OTYwy_nhs@V?w@rFkh~WdMQ;OIoD`EZ^MsFJg!#!#S_-A; zMW)p|^GGl)OVy&6(RS=g!!WNzgs!p*gaKtv0QSW21Akg!{9<+TAQm0N=Qtb+QL*k0 zXvpmU2Oq4P0K;+7#fGb?vN|%voT{^gx51xRgSI6S{>BgW{;JVa^d!KP6VxM3&6)-_ zdTsw2VL^ycI_cT%JUb@>lO|Y2u0BfbLIPD%{}OUXHGNPMVr^DjAuZ(Bur-m$OzRVq zG+H8_cmPJRYcnM7s#J&v<rtb(UfsRiuOmK5c?{G3pl4YF(E1b>bAiCN^7z;jRBS3n z4g_AO7y2bfZX0P;qRtf?@X8t?1B`Ex5!p#H6v+`!+wg|sxpA6Oj0ZrNK&$i+6tE)H zT64%DSxM|#{)<DNB>~?R=|3uA?(aHTT`B;H78!*TS`713!&AOr{Q*|eG9FH~za>gz z%+(TI!iy2d6z2A%IMhFOzu}4)5TYG%+5YCo)xbUCNo65i5mOq2Sr03Mmug!a%3Z#G z2=|_4Rro*lG?ke-*nKZzNv3v{aZp-HTeK_@Ab7e}C?0?{81Q-SX~vRF(-Hz{!~*~d zk|!PjQ1CwD0qA&;G#&s@Ab30gpaRul1{4DRkX)+E<&v-OO7x|Q58<R?oCpcVCIiUH z7zCO|mw3i*s@Rkf`+>mhp8S)6a2$g3VoM0O#ZvT-l8Nkhg>Bbpuh?|toyHG={)Q)I zRG!A&xG^01Ju={|=1#8Fje0=`GT@-FH?HHhRCGxGXALah4n#2&q8J^pUN^#J*$oQ{ z;`u%afgqZJj2rj~YUT=h2uu{j-EPD$@M;_U0=_n-1I9esDK8Lrpd;lD1QHke!Fc(J zw)zv;3eu82jh~}~v)<_Z443kz^#q?qArozx(~zbusfrzT=;CzUrx<Op%sWEP(8YO+ z=pP^_xO8XaH{~VLn5Xe4909HWAQUhx`rWBKc0?)KP#TO^=jtfMZ`plmd);`p%@D<B z&+{EL$?!z3nC2C`HBf@1a0fQw#E!-5ixgcdB7lRRw!7)r?9P|15C#09iVlH17TGN| zuw>r(7)l?@;$!h|I@DjF`MFj`!f<)A#`6RmXN`Nf1bgY#9LqY$b%sl`E~~2(if6$= z=$elwXvK3QZ{Fig#-HdPE6NO4c^9{Jn4iP=8}$mTe~%Hn$T>T(A7~!tU9O&^T-uU( zim7n8`8fpf0kAeiOj))3kN0>}Vg)c|`r%2srJw=jmSH2lq=DoZ<Dx?msKv1Zvx709 z1oMv#1tbKjBaciHWz^Kn3dft|t<sJ4#|2}4Y)bYsNP!C$QoX@g)$CAgAnyWZ8>S?S z14S<^*+^E4CHH(f@Dsy0fTDw9o0_i&&5+ly?4m4+SFJgsw;m7m;=vlw@uFYcYQE%m zh+2_C87_oMQzhQXSpItvhyJBeh#pcQ7oZ_aFk&uR$FgL9g03g!D6-d$!bNSNF`<G& zY+1nnfsEA!r++B=+_pEclxcn(G%>%hQ*{?MrF)jXLX;OZi)F^$KVu<N^hOVaC7k9N zwlGjM!aOVPZl0Y&^Q?8FHqWjJ>JtdUeK~<(v}Kw>Q{x1JeaNWCX%ay>g`h?Kjhg?< zZ7~`I+8VbVD@=^wKFkGgP*04DdDCv_n@Zk1%bVmM>F?G4G%Yi6pWo*^f$07&nN#9~ zFv#rlFFNLw$s-s**7+A(ZaLGgq-{#02zbUC8qU9fD-CmqnpZ3s%z!I8FU9=VJ8x3x z{sj<hS;IhgLmIkQvW)A@IP?L&-wrgXrZj7e<5UEi!3Bu@>ysWn!W70#Lu``_%aa}u zXXJqxU05FwJbQ>|Iho@%b=$>#LNlZhhd}6Q^140)8s}DOoPPRG++4>S`IGsSvKL@V z?&WqmAe52J##W9+j(pf6qr&9JSr3Sg<E)1z&&ilPjdw|<L{<cHi=zXLF_Pl0>2!+U zgdWucq!4I=co67{9Zr&FtR4&C1dQrBK{pGc9@zylw!;V5&V1n&&mIOF-5ft4V*jTY z`%U9CBHriCRlITjiN9RT#cdzRjtCDVFqW{Za<EPhIdbm4@+0#5)#Egd&=D9W<czGz zpJEA{Ue@IIY)&LrfE-w2&%ifa%Liw`wL~|uEIBGsy?(XqwUJE6`a#(H833`2m^c`R zz%5Y!|Ea*o3L*tQa1Mdb{~_>sfw<<SivM@Rm&QtRz27=xtaj8Z>b>y*$UOgJ?u;?d zc^y#%GSF;#bV$EO)(Yx0v(A|FUqYS8P}BVgu8HQD`)7P-l@W74&L6C+j)oRQYY*W; z&^(IxnP-&F&#!~X=6NZ@4nU_zF6XBBhWQ1q`eW4TpqWuRFTV~c9{yyFb19R+B5!pS zv)$P|Q6xbQWds=0nI|g6zWyx&%PD?L;zCTgcD1$wjiG+6`o4@xm~$Rzr85JN(>L}L zy8cYfD4fo^dG8#fLHDUvtid>$2fr=)+Kc>JlUrFY*!wG4Fw9&r=L2#Gt_!`v>?#QR zy<~yX&*z?QjG3HYe@b9omRj;u0_Hi~#Gd79GKc0hj^lBh-<EuW_4Ic2Af8Z)VeAsu zvZft`g41WnfR{2&A1dd=Ap{n@4AsRh^)?+Z;edlBUyI;~%=WIq>@S$uIJRWi5t02t z6T{$w!|QVkWeg{C41au5#&Dc?xo}Knr=a$gn}+3=oLG;&dhH2pkZ3sXM4XNZGf{RX zZd1o%f08vGP?D=5ugGC<;ytAXC2JJoWLiPGzKjPpgFT+{L_L&jpd>$%1LqsyAfA?J z4wMYzVV!YUj2KXnF=lFh{izrb0qNXuxG|*z{dEA1Q69}vdU(EX4?{g&2=!$Hv-qs1 z`FJq}gn9l8caXQwxsaD`^Rbw9#+?5M3OOJ1>h*jajH}GYJNTB&$ECWpg?P}n`S_Eu zXu41Hah50w=X`v`B+QQan9s&!K7P(=u9ZdFeEh>d?D@FrO4iMr?A4(A)adW`FdrSE zXniPy<NS}+1PDQg1vvX75<$v?y)dLMp2pspvr_NRJolsHL!5^R;gfOhhfh5RZihtg zs2Sk0&igQ8*^c8p)}p)AaUMQ35;L56sdOZIIL-s<kpD7@+KeTgO!DZw`SnENMeAAT zHMp^VmvGOGuG@JYf+tRqWW|5&Gof3@deIa{_IgV{;BInmQf9QPcOIv}$VkJ35QaAa zGn;-joM5r>;UL@RYr_N&nFxx!97G^Iv3dnuS7-NDyeDY75GaQ)fKxoscVY$Wb?b{S z8YYg)sMd#<2RuA@2?v-P@Gr6F9TC)4|8AW}=-<h4wD{Xxp40v66IAtkKk*FlZ(!hk zC`S^X1h>dtPU($v4l<GlWr@KWJ5vz<_88uf{a>C!<Y#(@R2F{X@xll|o0TQ@mY=^; zMa11J(B{n6N<W5xmc`@&VvbbLvp6Fc5SAQW!v+AWor@Z$^yPS+_^UBAy)yAt1zRJ7 zFcy|Y-f1m^^AtW#oo|AGgHIgRAoiPTz<e5YW%&Tc)l!z53}3gafvlk?8=MA*im>Qm z#AYMbi0ov%X^{mE3MjKGMVWOLWys~A%qmi5Ly9s@q|Bl}kTO`BGUECeO`^NTb2|RB zIT2e%$?j}SNKgzCltX#rIp+!gS{e%)cvWYhIc}@0G2-{gBg$tv4-mAhhNJJ!=@R;D z3i{Paa5M1qck*<ukxsuH6mmMQM$?&eM9O#}Xo>7`ALxkWaf^%@^vmysez1LereDJX zzpFl{C2%0CVL?EC9n5m(>{$5MCqm37>WNVU6YwAiz&)$RS{rjRKbnOKvDyv(rrNcj zKpW6!>{L0w*O)>?49mkr(+}l{$4PkL_Ut8+DuIsEajsgfoUJCSZqRh{Hyq~(&c)K= zb`?VNc;oBu>uD8tx63cQo0<pDP=na>Aa*_WiWhMX2wKI#p3PGrV2@wW2^0LSbDcsv z1E1br@QLyFj89AdTj$C80P0yE0aSAr65V5n2_ni2_XZ+=h{_|FvAQb!tHwX@ko!35 z7A%8C7wWk)Ay<7wHPl+B=T59H-``Z1YcKn>tCvMd^<q0~d6qW6b9)&N<VP>#(em)W zr~jkf=no4ELXz|!srpWTp7<Yk|13%W$Lx0<^sneE{r8amCB4(%*Ngs0k-s~=uSTOi z()(0`l}_)|KIlg8MET+9{SHfe^OZ<%O<!QBU4voR=b5dMH@gv;``6`D0!XS^0RcN( z6r+2}XxKEPcxseiA94fE{UnTqZRGqGqV+e=mqf?{*e2uhk+s4jHw?tkuw|7l5x#cO zffOE!MnA&6D?&(N!sihZ@Wjn2tHtC7zZGqQbA+6g&)Fw3<ks=ZE#$JOC!2`PFl5N% z1vMz~oc>Hf6>F4k^F$xP59<ARcm)GWw}874`CKclW8H6rB&WnHRxpUV0tYBAMBsHT z<gxX{h%H);T$U1#_crR;TM)PB>EUp)LS{R&WZ{38P>^w4#pO+KO4QijP(`B^e(b<= z`mF`CA=x4gMm(~DGR?==tI%HrqqW<pwcDs+8&&GiuQ?0g9TGF({O~$LUwakDAL+oq zot{EHN>8C4HSG2BlJic4FOdBf4TKVyh|_l4yPRGTYZa~Z0Ph@R#sXd!P`*<F$4WiK z>O3#MwL<h8a$61{#|Tkt%A;i{^-OKX!woY%iz}KDQxMmuo!=`F^jQt9P~Vk?;44`~ zGsAucogWCG{Uy(nhj>`L><Z@Qv6~p*Chm1U&1#_v^J#9Cg28XUi+Om-IhcnK%CGPy z$QzMg$#|Q@C#|Cv@aYSDTqa~*>oZJb4w@f7SxcR1zORO1F;xuu4)ud0B%3n4>_bnZ zSNLTw&FMKob5S+c45~feio#&gqAH_k8b~oE7mN@tp(#M4i#uyTD8H@SHYT!-jbCIF z(bbx$*A!HhH(i4ym(zcR(Rm(yTc58$;{sXY-~rVP2^TUCbY+Lle+A8o>ah9GU{OVt zvGG8*5!2QL0P-}R4B+g1F6`E;4w`>42p9VVGmqy78tihkQw2RZ-W;?S$<-J>ZwKv^ zP*6UHHz*jNgvr{W<}l48u^H#-%|QrXcNa{wgm5D7y`7H=x)9oEuD{yGg^b@uh78_; z3>y#j_=$`VKI~!P;M8Ag@s3%5@ni7R@Xc^6?eX_8t}}FgtBj|YG5n5uhx8b>2hB;< zq4?!6)QTom!4AR>y6b`II>Xq%5ngU0?5Ws;&Fb7&#}5_ogcpRwGv%|zE;Ta#&((*M zlI(JIE;&d%u5U@yv`yW`TJWd-E>ha8G-6n4M7|}iz<MRLc3HK!SJ8!4u6is7K$|gG zfUsP?)QK*v*3ZFkspr+u?^Rg4h%Ut5EF4l=hEj3AlW7~hi}*Bqd(YpfY7QFFjj)*l z2gE^1-{@pSH`y*0-HhATP)>6Fw6YM_VqA-HEx{Ec&^=lPI>7TpnZK#hk4r!RYpTT6 zTA1+jxD$SQCV9Z%H_o(Fg*J-m-F^%+2h+#Besr!2pQAAkAsm3d>alXc<vxm=vf!9o zN^n{N5(gm)g>7o$w_#b@8#a;CY&`;fw}B>Fal8r@q6T4&8d**`k7afBJL?TO0H#n5 zfT6u@TiH*a52_|P75!HEn-GH%vk9RPeA>dQTBBB=YU3OASoj%N(zze>=7(;yG>QGD zpaT!o3t_ZIj_y$3AwTNK=ruv}%4(RxaMbYsq>^CKl~utw5BNt=krT%+Ql!c;apqBQ zh!kOXgdo+Z4<6AI$Ipoai6#?g`9Db}#bEP4g63kd$6LXo#Yus1PMSQZ#AE<(rO5zj z7LfrrWurrD{y^|o8%5zNYr0^e{WHVVLzG2w?GI6m?<~cDt&C+%C4B!OwFYI)Cp*5F zir3ZPkY%5i#s_)GAcpFCvI_qpx}|OpB~kbV2#B#!@_Y}78z<<Sh{=3~5ww(WQs^d0 zh#zbUHb7E3w*bQ~_1lMuDd35#9GG<}&IutNV7{cD!5Ir8HE=wX4^ji#`+96m$~d)D zRE^d*c3{DJ#PRCXN&TTEBqWYG!(#aIf_cc-O>+ASXOr7Mp~XP7q<Fo;7;{?*PIGYZ zdi8Ul4ECjh+mA}Z3?yI`$jR*|LNjD=`!_9aud-OUM7;zDhTL8y?1di&Q3d>zXa`$3 zezsM;THTN8;CN(jjVtMbhDW+s2qACKefJnrNuTZt`Zu7J%<XBAr%Bfa4nC@5eehsp zFia+~N~3h$i8F|mOLK+(Dki?Y%%4ND^+IIqaFK{@sz|;c;2!q2wuEJ;PnjW7)tux@ z3c}a~Ff^N$9vt*SUl4vNpm63Q&r|0~TNt<;dw;3i4TL7dstp!GH;>xKOvxOxrOT~; z`X~my3hWp;5f$o=Nl$)~-u#{)wGd6|GFrocfRryaJ6?P-Wd0=>y9{RV_4uOBMP3~l zk%feVK_;>w=8jZ!q?t|14f4|_rCa8X3C8MhQ|C2`J~lQU$~H<X^CQ@0Jt<d_{>Yv6 za&_@YXq;Tk^S#*NLbMcPT`E=cpCA@0pk{MDtcyY;TIogY0fve2{5J08!C68K#{-Sd zHD+1xb*wi5oqnRTiYyGlL-O)CU^&>FTW}mMdB@zZ;dJrW(6dWDj8#%<Psn#Hf+G!8 zjV*G!U<woFp*R;e2&-peJm*iWjk&5u!R=asw91e<H#b!DagYOtUT~{JqtQ}4=Tqn; zFH-k;1%bgXG5|t`j5MfFp1F<uM)?rMWG_|((a|R64AQ)UUr{#=`6fX`M0Erq3=k0i zLm}&+e9qWl(JR=nYi#@+yt2u7S%t7xj{OQpk9q~C6eGK?1DzChzD^r8yTkdYm5)%y z7{V7jVXof$4cmvb{4ab3?uQb`Cfk!|FY5&B!=x2?BIl*stO2m`#iS6|Nj@iUAb$rR z5W5)n;EnO51ym_51DiX_yb-+9uCg#N?EcCnbATf-h!k%a(Xw1rlGIK=`^T&-wO?!_ z_$C(dG_RCcl?A^xZ{U+;M(1z{Pq4ZCKIJ3*TgL-*JTCe{T14pM07qgl1WK*P@wECo zD3uTg+Q~SO!h<$)K#PBaOYOa1>pocD5)<00ZbS6gFz+Z>jViDoroKs`07<3KzKdO9 zz~%*KV&foKrGLYGzbk@0Z1~7g!#oLNjYE32E(xScB&;<q0JoB7tO6?@buZitY6V2~ z(ho+}@ipuKMzoD*q}pM&q`*n~*9!@oESu`@K~|#49)c*OH`v$Kmln|%RAEkGZWS#s z471ZV^oMzdqls~NggI;JbL{F76Ml~+ev(U1mK?O&$NBp_H&6~Tg>eRFo+r^Y1C1f` zYBYFhE>15EU|)B@)lxCnB?b=mLA~v1oC&^Ef0y8Zi0I3305G?qXiNBFsAwdd(8K|U z20<qnI6N6n@1Jk2NRYg68TZ4F+~YaDVkO8NUZe7UhE{M;KT^C_!nXqS?dtbfCcr8E zbce87ms5aKvXIw_QxyPThuREhDQJeFpSLT7E||^eY5WJYWYC<Z4Kn3VLHU0S9%>M4 zdIZrv-UzO)b-c%-)|QI(;6xk5IrpVHyagRvpsp9gp<QM3NV!<W;;tNwZZUv>2t^+2 z!rX?%$Galmu>CQJX_yt;Rr#8J+#Ug5UF_|`|8FCqmNo0&g2#qeiw#5#<kgdn_*A^I zRSnUv<QnFFROS~N7kl+9M(JCgMiLKR(_+wzdwVB9&X7NFo;F&{g`<w2AK@p`p{DGi z!;YPW*oI<C@+5GJyWvDLz#o8<TZYmni6f8?;S8<61ArR}CyBcn7GgY5NM+uJdH98l zk)4L=lHb_>ow}?4XP1vsLrRV@N~^v6LK^D&<x%~IyotLX+JSii_?KNM;;CYBi$CD% z%p;dINYp^M>@x=cv>`ns2+2-M+QDZ<IJ4Mhw)IJprMON=s{QebR^SOtz22o(-%EKS z3<oNrpKa=VE=`#oFehFKB3Y_>)C)*lTpTQdwS?@&<=Pd;aY|&iB~Z4Z_|*p8?WDgA z2OFgHSB1>;+JICbP8|<#lg=n4O{9O&oLkkEtMYz<<t!{yFGDsCV-4hF7&z+dK(I9a z1%S+CqEksv@DD5IJaRbx37N%=I;HrBCt$w(u)Knqoyk8z@=r|AG8YFLSRAo~r>hR4 zMFEM4ujW<J$^u$&J`JXsu)(Ax8=RUVd}K@-K5Xvj3qKH$WebH7fb7IZ!Fg$T2flbB zI;diC!=kxBTzD2V7{cS61mRim9{oYeKrDCPSKuPVOP+7WaFUMw71NAFO$mjv<oAvD zqb@>@_QRyKPL)F|Ku6k@QY#!OeQfaiCA|nyOMr^ll#N55sK+j#yzii3D+EJe+b%H% z%uW=i#^c552jb84AT4J=TF!7t%RMWTjJropdudmVa=05}M?uDpra(w+Rl6VR2OgS& z)I_)md)3RhMR-Mc?#G&}p2q8h`5-ZCfG>5F04Xyritnpw2tAFjql}&_j%cXXv&&mq z0>RBA6T#DA^Ct3iK-yOjSCsj!so7^86*yx@3nriX27reMYV{OSvU<a*`HHs&q~02? zHN}jfEfuhs{`uqNkYS@@ymI!Id&X-6T;;Lp(DR5cU0)T7O|M4$uKu_{!y-}eW&SMu z6pda+jgCV}CAQhBTEE4l-W$J1jQs^)IF#v$d>q>NYcLYZJ501tY<9Jp3jbOoH9Sjw z|3OY&5Ypf)FhJ+CcC5PEp5udpu%lvCxZlxrwz^D8_1$T9KZC@Bmd3k=s1jDuT@jk? zB5ME2jXYpyN(UNd-8fo%5&kJWi(KNHg(3Jcqdp9o?}v&OV3xy1PGpC99H#7vgkgaI z6k-VCgWLLux`EbYm0_N(5Y+H$V;*+p1)w&H_|X>_mS-Aq1f-3kgET&ZrQ_gnKojSx z-w0}O8U&0=@W(hX-k<~UIJ!=7RAPKW+SUeSaWFd03$BFPLzHeSoQ=evf~6mMmd=uy zkKj4|l^R+wKq8M}FVr&`hxEXH#~C6B<X?;s`z-J!qwicT@FVl3t^Ohy=neCsmMW0s z>up$oUr@q`XC5uTN3KZSXn8a_R|=q?#*2PJ)eGej_0twK8ToC{g#G_~iN?1z|8Kxn z77Oh@d>4w5O(SRmfmZ<W_@44R6puLP6#E;2a=$}A#QEWr*Hrlfw*0=#+jXL-@uTtW zN|e2%3Z)DImoGxt>%aq`VHdOzCw{4TM9>_DjLge&8Soj-(vXS%BU(S`Hr~5m3wy)- z0xeKZUgni{-XdB-?HdZP$zXIawitvEBc3R>&ilcT=pA7*-H_zEsCAGM<{q3go)vWR z56PgJ3q*n+YxU1C-RFNj8T+Wgfk$Xmd>4PH2q_vzr($k)z(z-DT7ST%k3kZv@TLzv zvZ}1G@JBJ|&VYpv-vpDYG9t!NI4nUFzcfH5@sqiISU}jWS3^R8*i*(wrC-3cZxzQL z$FjTCrUxLPS3x32jz(FX8;*S!Hpt_*9Lnyw2Seq0${a*s@xHqKbktAv*E4+b!2^tX ztD1`Hl6Q}AAA=_k74mg!l{xynEHOh5S?lMrUI7~iRlY(#iQrG?ll*fV%&XX!=9B!0 zXvFXg@8R-E?k3DQ=S7y^2RK&H7qGxyL3bXx)h&}G^NaMh{|k2D-T@f+u!@gpDLV<m zng@uql$~t-(n{LGkLEC%^2z*yUET8w=uh^NU-0k>>J!8SMUqgXETx4JN7yLtu9Rg~ zrl1}!zW|?C-L5|PM<U^QBI$uH!#eZK*!5RIAEBKDmZq8}K;WXOlrtF~L1bBeBtAC5 zNd!h%0iNb}C!+X#s!liPXoKRL^))+GAP7j$H(1>S?clIp?DgEte4G`m*L|{*-?YD( zjEBYD<C$w><sbNATG1_so*SZmbQ<7}Vg1Bjlg579m&jcRpQQ2+X0cYU`3I9(Dv>`9 zx~KS@GhU$A46JGJmGXD~cqfU<XaU5)Y|Yz<38$j$jj{uYrUq;gNEBE#OwU2`P6M9t z4{~NU<!b<QIuO%%-bwAzezDGNAO=|Ei}MA`i`Y2QetWorHD8sTgwHUDRU=PXL8> zMqTCv>M?~UgZ>SDq(AHRO#lBazQghV5x#TKP&&Tfr3+}|`?v4(itm4%BKUq9a}P0m zaH~^Ly^O;D2H*4gh;P>G8Q++1^1Yl)-ezhP7LjTH%DNolqU1`3g8W>@s7hw0flFcZ z_~r2aH_fkxZ>&`{pmjDfTdhJP>A1dyDZVzY1G|&B?huGlyuI{f!SzSN{lxVwxXDg@ zU&RWxVo0S{HM1QtYAN-c-`L6EZ>9$HMZU3K-|>x|O1skV4Mov6eBb!}{{g-W(TEe@ zTUCE}gh_nA{1)*I<G8V4r{H^BQkEQj67h`y7`{IU9VN_yns%}%zA-B1@T>l&)77RJ z+C&?gX5(rd8mQezs-!fKs2%Qvfu(Y!`mL1ePqG-9G;6UI`fQqI(5tqO^kThU>1CZ? z8J%C_h3>&uhzC*)sXPr=jZBNyvTEQ4S)m4n>rt&lS(+Z&Gh8@N=fQykb!}%3>7Q65 zQw>@6g&nU>voOdu|4F>s-=yhm+ZZ@6Pd)&Chv<5MJ@j>gJ<*^6u}VnYzlrhcE1c%S zi2zftNZJ&$KFZZ&>^XxTOoZyo{9(PG>7n&Q5B8Qli5&Tyhq1TLUY?1Iqxn6(_(UMb zy;x**8Xwzn08@B*-|d>0R|}HHVFRm<@HeHg^*<3k>z%E)OKCT@rU0ThZkt_c`OT}V z`-nf*>luHvuXGeYI=|Y%&wf>*0h06}$jB-H0)F<BpTF~bH+~+fYafQ6KO5E~KRfd| zS6B6MJgnFIc<9sGOO>$NgVm$<*+$}Q0%0ep#_DQeQRDlfCtwFr++Dl5+o%Gp-mA5E zij3$m*{Vr@>A&XBdm1zObIvD8{+wh<WQUwh=g&*<wnM&Nf5PDyF)XED#)#Ie&6v+d zAL++>J<~6pzx{n|kM;V}UP&L@W4*q#SKP<;Sg+^yda<|C_5UY**8fY%6#uzDk!Eid zq7kS5$G6<}l7HxaW176YoznzS&c=e>6iyCb;^^bSSPV?Y-B177*8eHzK3)GWL7Pea zUs;>7Cn{%Cek!!xR5?$7)E$cdDD`+g*;ao*lHW|kClwt&{*R@!8{0M$#2!sK;ouDZ zE$kybS+DQ(v{g~ke(tk9_p^ro0X?hHh?AaM)wdB9NYXP4G3s9Ixv@h@PqF8I{jyEZ zG(DKI=RR5Nq-UDq`{KC6$(uK&v=_pCi9P4*BfVI!XL|i_{mTz;`)c&+=FdNjhMY9p zrk3)fTlO3bznYwb!r+cMcxN7I<|e(m`<FMP@W1gd^ZSTz*6Rh|Y5LyV$M#sSFYUSd z*dFWk++I)e7@@m^Y5rKB<?)-hel>nblgF#jh?5uE)h)~`v3VgNlt!rC_Q%SS{@BuE z$O{rPEW&!b_Q#O)Z6(#(@^}aRv9kzjQXXGF8&Sd9q=^4@1I1|U*G;(in|>`uY3$eZ z31VeV5j}(*W{T)!n#!j~r^^9S0FlLJX>??U=cWye4EcNjRr}&EuwLKk`_<+1zZd)u z=(_=pIO)4p{g|tzHhr&>5P6UO_Jc!6Uy;x49X5S?k<S+r)Fge=<nv{0#`fN<&kLuv zADu6yUrj#m?IXQduV;Ft+k?4%oZqb1OM9{()?tssfyXHwdh6c?nIWk>FC$jlCb?dS z@#_7sYbCT*yFq2oC*>#PLev(or>ISvR$_x$HaI8OYx8V^TI&~O+^3`Cxn;@yu&;VZ zPInDbPOvS`?{B(3fOccompg3tM_I=~D{BsMMmnPN$vI-JU-YtHId96k0eXcJ-;cP3 z{LyW_%;{gJWyk$z>luHZ>)>(y37B>@OD}04X6=3);t3K5A-cmYX<Wx8jpMiLC5;W_ znYeq-E8HE9R4Uxbs>YdHxvFskTLZhV!*fV72L^9Esz(g2Mn#Q5dpqUcN3p(fS615k zhQ?>Z{2RbtucP<-o&?->05P8TBi?!{I>03%oO)W`lwDrZ4_{=&VjWU&a9#n{fAJN| zey+$quIb!{&nTwj9Qn7%Y7bNyzeLC_fm4*6$+)0uhCHN^oTN2>X!yFVudrTvN7h^2 z*H^y5gr}bNcb+pCc(d15^#0CoKTfKp#kD-F)vL$+@gS7;d41)-%*U(&c9U{d^W0YT z1@p7b<bv4q;>;kZg-2_NB!nwt6RVk;nOYGm1=L?Hy)u(tyZcBl*6W#GPJ8vg#E-we z2mHLjWef*?#JFJ4uYWpDMjZK-aFW5lJNt+a);k<Nv^-CfPqtF;WBjkK2V899GJ{sH zmkS=!RBL*O<<mLDo0d2H{737!a_kIoIk@Pvf$4H5J*vG!O1o*<)iQ8~|MUuc2L3uw z+?V;!dcEK;%^q*-V|%REOM4Fe`d`rF;hTG)#|2!5(DZmlR(20VkLhT@f&6*7heQ5% zrSwaY4@_s^zqyb2V!gxR3x<ZzI?y}~Y1og7H<2raRCIkf0W=F4FL@FH)2=hJ2-Npx zJCPUoJ<<fXs(whALrPRtfb$spssE(yMYfl|M1##oG+9nYBaYz9=mA7vM(`zR*&mNm zEg_jOV3{Xa04N5NV}}xU0wD*T9|*)2hqS*8d{U>UmG`30ME7?yR!ARbJiFEr&#qFD z{v1J>>|w^W23;YZT}2z>rr&ncW0ku0VdB}RvIadEXPQ99`b-)zKZc$8A1%;4aFdgc zl1aH$oh$1S?uA%VYT^ch{*W}VcAb*OblcRh4aLJP$)w>MpW!f^B>EEj@wc!a0~<up z!JK*Y2Fk!R6LM5@Nx*QJF&Xq;4Zzd-?}gs1m(j9*Et${dJWItkO|AXTvT*~+()N0F z71yh49P8Dv4Vt;s>{s8qkrGDIvi{TaRN%6&0F?eFy>zYK1u|%T)YxaKSedX3m^caF zPL5NVq7zhL>4PIhVc2^<TeHDkaUA#?cdwF4*rIz_+jt6X<9}}<{O)I;r3XPDo@qX{ zTgcsbKV{Ke%hqk?NagrYO;9c2n}hgerTKI|3^TZCUycy!OZefD-;p1%s}$5~R}Wm* zjUO`TzX~<`LVwolmHxSo^`5x<x)(88%YKDf7p%6Iej@!a=Cq|B_btEdHt#2~R<HK! znJhi5{hEp&tp?0GH^??c{&Rl(88P_3;l~TnR2n}*FEH`%eJi#v{P-tfmHz&wn;`4c z_;ED+An0EDYO}FUCXRBt-oPZnnV(c0d#)vmCzZp$TtsPa%lU6fX*b=gEf$7<iAQ@m zAN~zYJ#6wzO?M^|OL&e4-yucCFIy!fLMJo6r^(K&l`1{sO9^Yw7)C=JQ*Q?-Wls2y zYr7+uiZ_OxX2}VE%?rR?tbYIq4rE~XwL}gMnH3BlwMl9@19iZwzhq<t8Q^br4a6oY zf5|t8TL=8@P~ZL@yGVY$*F;NBT@CHawGxd=D&c9#9nd|>&x2N~Vv=89=lWA$<mZP3 zq-Si}=5k-r`5>C=&ad0lxz^f+@M|7Y5V02JZ<+-LOXJt&hkyfp98YtzR0>J<_i-6W z#XiXTTqN+SPi7E@$t;sfzHdABsVo!CmP~g~W6Pur%aCu>2+1=3=taM=UeEH)_V;?W z4<8r%5aKRqcH)e3o?b<RF5N&(rafS@z=ras*=yCfnHsl}Eoet$-r)j6d;(|q?a&{L zpM+va9lsf$K)M+T^!#kh1_UMeCkI&FNR4AYpB9a|hXIh-^|ehCu!whum25~QGyzRE zO}JTNJSoxe4!(z-=2?egbGfCx1jwNISl%?+wi~fG^~(F9i4J|FHIYVZ2ELp6h;P>G z8Q-)Y)AY%LKVn2Z#Y0X7>>2Tp(;njJ)8Zis91zgEK6!_wht(%G{drzoroaCm=KEA# z(~as|RoDBVddlA~hg-l+sU+T7A}NNHAMDFWi-!~e>NKih@_A7iI|_K5+hMkwX8KPJ zc&RV*gY|l*m&Q*w+%PL$qPe1#Aiwm+U0mt9rZ(`(#@*4=yCDYWqjqvSxIcv`hG-F! zCM|XFw9g#^B0Z;E&t~pgn4Nw)p*{bN-r})0KH{{eue^%1NwcTZ`MqXd&+?>dUdC%l z93#G1<FxN#@7Fr-Q~H&INTxPh=?Fei`}8>N-40Ns#hK}!e&C$S)u-O#0B|1OYA_YF zf{$qft(DrRip|3QO`IB_x86d6=c-3p9j0+fMwUO19<fi2^r_z-0OI45{Ajr454I)J zOOnAf!Jtl5AWJLqQLM72X;Llsw&gUw5D7aJ=Y?!K)5%S$gtMhIWvL*ofJgBqzlBJ( zDhH_W{1m;-EL0#U6EnhzGC_~V8_#B{QIF%RtT=l$LIDCJW_Do1w+SkgB}J9?T%0+v z<ySgb)+ev1;zdr$*pqy$ncWM&AY(j@%~JfL<>9T^kInCJScis07t~-nzFt4PVg5<3 z$i$X_4?CmvUJ8f+2=ImZ5Zlu>H!P@i)qjnZJj?FJI2z{r@QcUNv;<Dd>T1^|=fQnt zN&VBE58$WAJC=(h<4dq>J05O!9QlLI&pS0L7Ik2s-)ip7UgvLG)T|;vM|r%m5-7ax zL836c8<h`OmG`2~ZZ+fzqO4*yHup8Nf^yvoe5LocJH5AL1J2%ds{y(<gi-QBy0>O0 zXadng(~`aI<}lO`7iRXB_uS9ZL6s52774h?9@V92NnnOYwdj|2s~8}5nV;XSQ9O?( z&q#9OAlaZGqa4UUccmD@E)7NZA?&`~?re%4!nOt7hVYl}LpU3!(Pa$b$7snO!c%MQ zR`n1Tu+ijSM*KwbTebF0o?1(DX1Av7?4ACm*<7JhNpD`CSUW>-CaZHl{3(zOot#|s zhAjhGB$@0YsLoWQSzDG{54SpZ&Oad>()X8)gKaRAOCjQCS3Sp`()QA1;T>v9)R>!$ zi}`8P)D>dNQD0)BIFv+&e6Q_gz9L)du=6#U{}^|FAFEil{o;4-mznWtxADxpSL4dD zU*-bV>eU}UiKU0LUo`x^>AT6vjV|Er-(LnQWDYCI50?F#+Ll0yBOeV%_H{s>h!?0s zq&yhcvVhk@LKqu#h;+4Pnc7u2$hAq8qqDTNA$n?WzoSE>K^-E^2X!s=)N_b5@m<=! zI_)CRG;Vfq%uO}WDb4(FL(&;L^f3|GTi|pzN|OmWUm82bkdp^YS%*v6e4L&kNd02z zWvyQ>2B?_pGhjhm`sFNOt#|$MUbPcHTEBGM;+&~H>X({c__d}RVXYZ2{wM8iUk@MB ze&DaU)~TJN!NCaQiHj2+3JI5FoYsnwBrHyZ7=f=*4^`J+3c$xiM(~g$?57^7_frp5 zbNA-B{EhqS&nPdcJ1H`)rOb!u2fq4>t&SVuQP?z~(}Br}fHkAl({Nbj+}ZVC<2zb| z;g`?SVAuoL^^7i|24hM6Z!8Ta$6eb-KzP5!MG(gx3)lhtbT<Q0lM|>i>Xlkmt~S zBu{upV8b~=or;gF>U&Uqhnh51MCVY5(*3Naz7r9FoZj1xRBvgor+TZ@y>;l`_6Ifu zb#H0Fsdp|(_J-3n!uwT6eR^+sZzsXMq6ctO{jEex0yDOyJ^i5FYIp}V*usoPWpn<Q z51|pL0K)#5970J?LpU*W2!k_v%X=m{gfk91gg;M74dKAg(}%F3E;TQb@~Q`a?Vvd5 zJ$NOl<Ah?f+n~`ls7C~FYdfEI(6=f7n}8uU7jfXZ@W|%YzyO|sg^QW7xwSN`<L=?O zgLR9g>!i)v@SzBKd~aP&2hzqXJ_4gP50#MP@NLY=4E<Bx%Y4Qr=DzBme#{Z*$$$Ra z2Lc*~lRPi_?{{+m+0Ol%&#_jo`se2?J)Hi@7*AC%<3XUfm+?6L?^Mu{r-(7y((SnR z*zC0+;3`lw^QiV$E+z+kwWS69Z8U$=;{^@iQnegSrG>`0-}C6zXy0B}m=-4@2iS`V z3%Y=&xO@2uKAmf{RN`EzG-viwR*2PsP128RKMbc>^8bGu@BZyYUmZyq>n~TMsSG4- zRUh8(KvKyaL`Q!cNmJe@k|ddKD{Ll8QIw|aM(5@=HyUqAKZENyzTRt;`#>j4Q@*2h zhC59c?(XR=oR~Qu{k`z7zgPbK-_mC=PC@#rOq@ZVO_O_|PxxmJ`mFkX8h!pxCF%1W ztlJ!xJ~Pm`V+CRXU+tAPmrH5iXp<pNN_wFO<Ch5k;D7+j&ap2&#@oO8`p}}P{~0~b zLQ~!5%O8L0phs>jjUK1&Nz!8?6whJl@!F&`dc6Pl!_nhKDg8?HDDH(G#a~7b>kQ!4 zn2$Q>^-RHDnVa_&9Kbb{{5*uUCW3=edt6vbTPM*gOuHspG@^4^BX8MX>mbhHtw<`U z<GUQI(4+QNGUm*kXey0HI8Rs|f3Jf^*DMDmQi6ZU-?*kE8*&&IVSgy?CeyZa)$U9* zj=Hr%$fUPyNj*sk@kouk7?J9+k}UqcA4W6U{lWK+RN_5AV7Wg*Y}yHM(@xSkdIzPw zJ4c(Pw6}%BN2IhHo9rfZvf*bne#xmZIIbc&|I+e_YYKbe7dq#?&R@M>lE=>+RKw6m z^84e*5F&K#$Oz$lxA#{*Nr2$7?wT_QU%Mw3)jNO9aUsmr8fB3t`O~Dnzv*d~8_}m5 za1kG7LallXwNaOkblrvX{7nmy+q$quS25HIsZv&Bl~<#j**<X*rD=xMOkLAw)yzlD zTqorJpXm3OCRlU9o&l*jVa<g;FSjm5Q)zR7i`j!$I_5%kW175*ybJ7U{eIK0zC>P~ zN;r|tw;QNtHlIV6oWW*#)g@jj?Z%Y7>iG<P;_HPUeTU;mFPF3J^s!<iHe}R?`~aT) z<(b&E`S|U_ze4;gMx+D>ti!?Gl_3UXN}D1IP8-kRXJg)0!?T4z8CPTAup@SZ-v~aH z;RCaXcf@X*7mWR`fmKX=><ig0IJanH-T6373yJXz_?K>)JJNvf;WLVM;()_`!P1HL z(OesM^EG`m*QtEN9JC4tbA8QG<$kF$PEG;t7c1nsT=<-OQhGeJoAXW14Z8`^H63H& zN;i%@s?{fR;ZWVQoHNcx9xaNsGz_V+V70)G1KvA>IPMOqA_%_wcxn%WOEycI+bOlV z3c-WOl4~FMQH<BElb${?$dAlF5Hy%L-u)#tjT!DHJ~JE!{=<+e_=r|4j8mVJV|e>* zj=}oau^lFA9p{yX`=jVjkVA6fj!Z~?-(;#j5p^A+@l_y?VUB@Jk+b~NhX`fB8K7f* zHR7!BQFx$UbNwYAZ&?k-G+{Ol@xt0fxY-_CGNc~q@Ha)8IZ$dMj6?ZkM7U?@R<f72 z@sM|)8oC}s<%b|b=AlsR;eu5HMSCdrn*swrL-@$HU#@>_z%T+Wl{Hyv`Zhw^u8MZ^ zilh3+lofiSZAcvp#ZUdtui?ge<a>UoqTWFjo?tmu+AV!@Hd;|fr-rtC4Y4W%o0K`Q z6{&%()uJu3x}{<TR{Sb_jI|W2U?mAPVII~3d>GjZI!~Xy#S!5w*N_R6l|E^($JPHx zA~P@9qo?r+l(AO}lZWYW9WY+T&#Ek2!S*`F0c>^%E~&!tg6ja&?j*S71(KPFSEM%H zs=yq^IdeGRr^==7#>;?sH>VZ6)op6d<9HAofdzBFe9c784P2q_dJ{mmR-}y`8J(RM z;7m-zJcK3t&a?3opYH~yClb>pK8p)vpAKZJuVbAvWGWmUSYwPas^#k&esa@4AA(jl zEBs+IVg&Jl<i__fqEOLZoOA6C^OVp(<31R#ME1?!!5WV9Moab4jTbQxp*gb+-w3eC zH;;(K(S?{>!ka*hg^*zOpE=WXwkFX4WVuK{uf|8Tg2)tJ?u`QKO4Q+$tODX7`ZcMq zYfdD1FdYu8>!A7cHI59XdN8rovkbNi_(0eeY`JDF6bR5X)MChG+5Pa{z{&VeJ^U^( z2ed8wi|}Z>y6CUggLdmdKVV4Xwtj?ipG53n%@U~mB_d#KmGV!T_$}V(ybi76^y@-( z?%$H{9ijes3W|7;D?S1Ha;o4QRd9T=L7-AiVVlv#eypxtY4v}#-TXv0zkoo``g^kJ zL1=LA?@&;HQgz&(WWf<?%pdT0FdskXeEjbJ;qg9DS=A~>ZSzSyew&YnbUGei^AsMp z@$pls$0O96&nLlFKSvmicz6<T3mzUp^-ezlz2*I6Q%9@QKad;s1JvtW!Y0>$m@NL5 zI(JjDNn&CGTO}qUm$LE8{~vMh0w3qJ{f(!WG^JuvL`zkIkW|o6G)|6oqM3GvjK-k^ ztp-Ios-YP|g;X+{F@_$u7Db$k7DZf}`W2~G(ke+%+PXCy+C74%ZmnDM|9;or&+|+s zX|>+p`~H12GtZv=?7j9{Yp=ET+H0?^8xIsl&ql+@*q6l#l%vYtKoeEDK)II^8G8h) z%PwO+JN#NoAy}$rWh5lD!z5a*X79!RT1i0FPB#n6F8+vRMvmR$!Kso$TwyO_54TW= z7z}I4sEtud>io&Ldt%aZHCy1<@6K2m%?4zg>5#iP5(Wj1j1u^Y1l8boK*9nyoSp6( zup`-7yN9JVCJtnEdDp2TGlT-9QXQ1fDZoaw+*qw1cn={LyVBhrPIt!x>$}w5Q||cg zvUjz+cd>FYqvO{1E_FAmTX##}-Nn&8=yW$?SG#K&9X~q%u6D<DnHk;DyV_kzx9&cD zXBS6zxYHe1D7%ErEu-Q`H=W&e{V!&}#>vjUC<DHOPM9NgU~**D+_cK<+XQRTxd#Uq z!dpDyFAEqfqK=g5d~klmU#dpYg#i5nsrdXO6vNH5D?}YF$D7#gDnZg=+AEd*aI-{F zc;->77lx+IDX6)m5=sFxAZ09-ET)c{29!b2SK^IyXjr$bw(VDQ`KsUoQ;jnV%^<|= zl5}-~K{dLYkWQ_z-&1TTF>s$Or~RSnZv6A&UlINxGwJja{KK-KVxHb$s#N=bAd0sO zc+3s|`}6R%F3nItjpV~`R>c&nRJm6{+j_%imluX_tpsEM+AXO>J;i2>MFlm}+^YCw z5GEXe&)pB}(^GDKEX9u{zN+mhGmb2b<o80R(6S)_-;HKU)W6>+W-Cgp_uBX76UAAD z8~gJmka-w=0B5&<?sd(n-p*CtCg??uc~S|=Z~@r3m24ZyNH=)<tgp;Frfgqn_<#P2 zN_p$b_V;$KZdXzz;weG3CRq5$<H{)9s$Y@RSC41{FzQdwU(y%jLvGXjs<(P!2to*r z{AuZ`9^=EMUGULVAa`yc9rxv>m_r44*XJ73?8{q+WT?xT3^g%7{6_m;kcJmwb*G-< zT`ZCmbuaYV_nQ6jtE58>?1dYZkRe;Qc-%+%KdtChwoiW57u(tTHApJktfs8#i<@Iy z)wjYP@`exAX6BQ!h8LDhhcl8aX%b<VksZN3r$d(NVRdCJYdpepB9=?lC&ZTKV3<yZ zgS%4qWmGA|IL%rX^n-SJ@g1T>(q;cn(8_^6mEwRFoX_9a2^U51TMTHav&txH{Iz<z z)EjQ81Gm)D-~?p;4%Ii$0xUv8S+E5y*HdBWDcY<BHBa$pl`7-#)M^X#UX~Tom|I<d zjb<z>vG7x8w2@8aK7=1_bWWs~LC^4a=u0%SyA=({?3SQync?Yxm!aEn+z~&+!vgq( zbP7|qp5h+BV%<<ExV5LaC#4WF2ear(EN9NZo7xb>CX8OrsBe~`43irFit!K3nz+wh zSc?>Ja?76D>VE*6vZq#o+`7p0=1*7I@5)r~!o|#t{X28t@b-kpc^s<YsB`HO&?so8 ztIm+^4ub;2QK=8i(i*~@Uk`qS4PT%muALD86%C|bs~US!7wXw-h#isd?7wj6vNpv% zh!LS5LBgFl>1s)%&_xE|3y&-DMJ5*$yD&tUvKXnh3(OTRczE-=k<7H6V=`?!m#~bv zpRIJcy@h$U<t~=!mDCINeJz8fYTSJ-QJPFL+hn=`R`3JZvIjh<*)n`k(Hjx&Rr|}z zN)L;}wAi^D3RR)JD$}=CjlPAqNy~**Xlg<_uF6oW4@NM+Nz-y%)!!4K@HkxKH5tER z0S`=^D3}2E0TD-fBNgeygFUbf%@ibvI;z^#=IxWmw6uT0+KU$(S$EYewW{E^gW0F$ zgegQa4h?nze6jz@1vYW#4P>Fib}zJmk*Z$d6ot2=s}QA2QRCtcsZ~*);<{x%`6vu+ za0AMsWH|cBF6SzM>Zi#ROvU;d$>BBOF+nk#vE=6;_;UV=MAzn_m98A2{V#IGOWtYb z=ALo%x*6IZ0l$%zWBov{T_r=R#L*nk9QToW+`toT+r~8}+^1SwVnDTo5D^;tH|q!u z+85Zlb|XRq^US^&anf?gUN<HZZg&k$^Wuviq3hF%M9G)*z(K6aUkfv)N*zdaa830` zfeG#9-J8<QutA8A5~!Z76=te-Ye)T7!I=g>KgLG0<|wRza0_Va4|pZNemKUXLMK>N zV3NB@kt9>8Q!3HeR#UoF`W)oq`9>Woqm%06UYrJ)U0ij*>?&=r!eyXJx4`UD-vYIs zNC1}zHIyZK!oRog!|vuOltNeq8$2!#JOZ%>$eh<iUu3_I;nu=XSO~Q-M}2TS3G82p z0vraI2DLD)gO{JqIH)k}sYOl$u{`ErmUO5i-=?_pFQl!3D^f%7VxSJ}4LmpF5z=&i zMmZo>tx?U0!KX>)@FZAu@Y?~WSoZTPNP+aPz&@I(TAqT=D=Eo!jdIjOoGgE>#UKAX zc>`CTxvFtS3-jdH?XKBS@Q^zjuEiZSAT<?Y_&s$1=T^9)(i?>ChtZZ0eVNs&eoeuZ zW#~g1l8)LxW}V=J_}M9p{)@G{A`Mm>{a}@(18_#%3EmzaVdG7qunmQ+J>#uaeYZLe zZ><JzO5?4~8-_KExj7YIpq#j-3y&@3mvV(|o&<2&Rq(>#oJ3PKrc0PFWO?)63BU|m zsYcZIN@yRAAKwh3pS*X<M&SGQD*ZhZ-;cXfe}@g3e1xup_X0`k06ZZ7{55y?O{mPB z=?ZS(C_5oPKHwJ$lDGMVcQZsTfZLa%JJ=bxut1ir5Sn>LeYhz#k153EUv7OvT5m@# zzVIfS(CXs?h>%mld)2`ie5O<5E~%j<$X^RWIqf5%A?Yo^XjaZhj_Kpt`OaGtW8Ui5 zlpxh1S8?A!vr0dieV&FJ5jwml4Jd=yUiO<e1n~{cUCT-M$cH3}*n<1rO-j<>D!Wk_ zRM@W^61){$UuS9HP{m5nxdC*hb8ikAvsSG;4)1CsFvY2ug^KB@n4;?OdjWMV%)mN` z7|f#yDd@Kl2t=(Z(9xH?DBV*>e*%@Dv?bE29$f_pt19}FacvG0E2TpP@mpcoa3!|0 z;AG~s!`#fFOnn``S1()^H7uL8f-*$kVu7f)o+cxlcg}p2NouAb=H?#G^l&C5rhKJ0 zZ++PqJs00%KY8n2w?0IY#mvW$7A~BRIAH|YiDlK#Vz`xKS%Jrb8aQoIFS=d}-KqKY zdyqJ%%pg`LbVySMt?GB4`j4a@W7YMC8`S}<7^<-G?X4>3or>#bcnibs6bdgNNQjbF zbro>Zo+qMUUxM!pD|!JJN0bH#q=d-`=_Dc|dJ)URnD(?av$->3cmgExq~m!oVZ(P= z$ukGz5||W-p@N!h^*4eV!!H(CuBvA+JOi4mdXZquUq|p-nxMuXl!D}$Q?dN{4w4Jn zMNrn+9c5duvr(2pl)0FrA|7RLma;JQf1J7lSognzN!@SLnbcUqmw*FzMJyAgmb~>c zz;KnoAQ-5#F_3zXG>6wiym))e;Qadi33te|(n14qaFcXW$V(hs)rEF1XR)AJbu@Hy zKgjw1!99eEmMyV#A3{aXz>0cSCHo8itV2e(>UDM30LO%5NIJg@w$yOFO42c;wuDZy zG#jHW2dSb)&KSQ-G#hUx8w3fBJeX-<mEq=&T~DSLyC3!FTU|(pfR-K~+`*nidYpz6 zA|;qU<4bWugr1F^#5!)J{76#s04LB7ASNJWa<y95%GR*Z@^Q1GMGgKEBc&XcnH3(# z+4651RgvUZZUPLJ3dniRsDP%MrBqbFuQ)V9bwCv`Jfy!<1sta9Xce$O9-soIN2mgZ zL7`yMB%;f}A?%-{#m1_eM0_hu*jm(@j|HZ{20kp-7G4=<mJ^V>aRoY~7ha<ah?QX6 zY$?`B;hdv2wD1CJfi}-teA$36{tfuDiPB~(a09uKdPacU?w4Bp!QaVWlhoy927P+> z;el6Uxk~l}X;fj46pJC-tXcxIs!cd3@qooKto5_HO`PKAfW>B4q5{JJ{juzYTkmlm zHLz7Zn%$MX@IxkkK=iUPoZ{GP%W@*58+(DbfJ1OwrWcDd?6~3UTzsACIqoNXeFR@& z1b7yxM`6~nCREhks-TcEWE)};-R-IBZ1~eXu9tpV0vSwJDR6nP<(Z~E9!uV1zoO-i zx!vZ|nZWg2;&}ns4(Ro_SgNbZvx&0>!`Xo0v_Q`pKJDOuHB&$1RBkerUqj_*)LW<n zHP>SJ`5AOvfIUSBXD&r=TE+fhS~_g<+Utf*G<)oYM+Paj0RpT9vak|By!K3q*Tw}w zPN0WzTe`W|3o|)}p1v2m(DN7IhD>@2b_zgD&ZB;G$OGB9s@5X2g>)LP{i(?;%xmIv z%QJ<=Cc>KpDTLQ=uv9e+F=yEBF+|(4KVS&;Dw~g_UPmJ*lH7U&75+9rp2clUYucam zw3+s;I4opYetl8bn)bQIBIL9`O4rfTJ`E3;_T>-@u>1n4oc6L8KY$4P41RN(P8J_s z{SLtuKH3=CF(1XtJMhsau*O=4j}{V7nvWJceAHt22xsmBi&Zu1fREN1K3a^9jk!cV z+W%>Xj|#DzBpJ9pBP4<yL<)+PG)PTuAk+{;n!gskhR0be$X=5EA{5{xz=R707U16_ zB5+uOX_1<FwMd+~`SpjQJ|~O(j`%9iGX~lPfEF!47^#0`+F~5@w?z%a7TFH<*}tEQ zVbWdHXF2GA0%TY9StZBXUEmmf2B!eI+|g(MpkqPPw_lA--#?+xRyv3feYP@ApLst; z&vE)}4fpXP$=_TD7%avvdD1ZU)^aHoeU`0jh(4Qqi!LW)pQ-C;#vY3YF!m$2?o6MF zQSuuzr-N91KM<I-KHH=>6}#%Q{a+<|y6Lm?Ut#f|(Py)+>RF%Nj~q3^_FA94iQDs> zJ(`&P8K%kTD*49O#W2;+D#cb9uIfpc5$YMReT>Z8v1)6~=*nrB89P;N`wJ5OK(&F{ zzz#?R9^w_HqSQ92w>~3CEvn3ukRV=gYBY!(2p*Lno(2&(fuPNhH_=GoT-;<7*N$X} zBXC9@j<>bInd=CgE>l?TD|I}Jjlh{p*JOA#<6&Uf)BXLoRRp1n?&`BtSRxAEfdgTw zh#fe*78b~uYKq;E*6QWY;bwQegp2gj!1SV_sh+jVf9P9mL56r2I1v=F*Pyl)nL1~p z7DM!J#7Q1!jQbvDk8wu`QNu}ATsUh9RX;gQ>t{X2t5%xW2?|wFgGOuyun34z%UzC8 zIn0S~)W@1Hm%+jU17diIi=VRiG855hDhu-;fnnu-y)7okfH%ELfl4bLcQb?CI&q41 zlNxm>aqh=DDgYzAVh{>(yN@xiwp!LZ7y(xFT>z1F#d_ZaCWGb9JBIyf*bBnrAcUZm zP`zuN?ZLSix>-Ce_@sfgR=M@GcLg66uqO>dmrc|KP581F|5~UWHeo%C#UqU){i`se z{Ir#dV6#-_jke-05<k@h%syN)eC;8Cw8^-st|7yPA#muXVudJAnaSF8Z#K_n*hTxN zvMf#GkESSk1RgLd`lQnFmAuymnAI_EDR<YD3+p}e1s@M4+fmx*yY5|~o?K;fT>349 zKvpd?I7&{cwU|^%fO3H~PeOs$(CuPCvH;8`cK24b@ep`&wZ~(&Q}Gd0oQsOHRU>|f z_Fe!+<1C#mTsFnB0<&b7WE-r&v=lNLL8l{wLlLc=q#my)luZ<@LawkslRk}a7o&LA z3bK`?x#5NOe>)e8)KyQ)LK&3eo+hc~8smW_fdyFV<Cn|yY09tP7w@UBu%b7EwC;#i zk6p;J)X8?u!K~RJHT{6TRsFj_gtCl=dyB^-h=z=>&x4`Ma;*JJ(<gW%Qy&H6&%yh+ z!w0UWpVdiNzHybRP4_)j^cMVv<=u5^GZ%K2d9{!DYeW>xuCxh*_%~Y+$Z~S4h3_4n zHT0zu)bWgegI$l4gjiDkh=@LCNtw2!h~uk;yTJ&bRHw%?<9i(G^f+E7X(%ub#}!9{ z9R`u%Gu7HOK@NKxStxRowpzMMyGzEwg)FZ9Y*8B|rUvU*m}<4eP$YH!Yy3$5aXLV; z^#0U;8NJ_GDy5?LN9Y=&_b)TXE%pBSx{lWSr{e*7e*sp-G-!{bL3=dVzYJZrsFY#g zGpsF09IPqQ{b8Js3*kJs9Msks4Y26MEKb3q6EcVsLKc~W@Pt{BdMz9xm>eVX>$A`X z>m?BbX%Nd@P(wM9sVav$Xkq^eb+MXUi_Ms&DV6!-hIcA&fW!>{%sZg>QT3P?7}Xg` z!Z)&TiKJePWiF%^s0)o6Nq*rfpep16kwvjW_5sZnLI?fRAoOX2MEZt5pQe$UiSPSg zufG$ad+ItGp}(V9bbU6Q2;v)FMyk;_EIt9+aL=#=tPR0hi?3WLEySn#S0>9fr%{=Y zcmrK%O}7wxC`Rspy}7zf@h3sIX$>9EZWz@#o7HMOBh}?GXpQBzd^lma2w?XV90HC_ z?iuMIIhK>iTEVVTKe|MdQgBGbL175th3Ewl_aPQh2>=NSX1C}q^d&404e3haq1fus zgf)K)!yivLQ%BPHB2Qvxf?+hZAgDK-So@fz77=MZbFe=&GaWbg;{IN>@da||jTwOV zpbTv(d@tSu5f4*u<o(^2sc<&VvtU1p$K|nK!dvL+b&8Mw1p~KY(l*2fFQgwt;JKG& z#s98Ww_|0608s|EeCry9bBO@eHEgMDefaV^T~)950qh|1I{Z)=NnBI_G={fUj!Gyy zk=Ah}`BjuWcUW#pU~kt;XY}GF>YWYM?*_iDJSoBF@-))$4?aK=bvF9)wqApqm(l7J zv?^mQCGR9TW4&>v#VfAr98~IQun45HL=?OXC3H1R<)&Z}r4?AGl5=zpMUoehbGZpB zQ>a#msu52m1LtxnBj0(hvoqR4*FfHOSJgbc>p&C`FNI+Ls~aqc$}ZdmXgI-l4$b`s zk__?Ci~%$hoQ=K+qJp4-{#MRviFsp)@a;g|jFS*=R5?1K>{vPEyYjgTJnszefdSsm zCZPM8H*qsGKnJeKHDxx}#2~V&vA2!F7|eZh0Jm^)`?F!QS_|<_9utTXsB84pCa4vt z2)3$qozvhtXB8My+~hEQE_L1P>A)X9xM)%v*b>_s0d9Ba7~PW9=oy@#s`-A{5AQ$r zsa?Y=+@N8A(NVeJJ4l&8G5(cs3rcpePlm0h2o#>oi3Ef&$cY4Ro_||lARtg`I0UdX z%F5WFKO)?BUZ@wh?@=XLs_bP|!OuwrA)pp8R4qf?Q$;<ryuU*Xlv>rl4&n@_af=9g zm!ZRU!_Wf#VTGjVqo=v*!)H)ia@H8Gj6vxQCjzLdikuXPL}`4mdXm+{eie@ueGhH~ zzXGj9ogh;)$a{^rU|t=4Ezl-Jp0Qta(r+Y|%|HYB8{{Kru5fk{FzLr+$x`=;r$E?y z0NKpmp@(sX+FDq<s_(}Of511^w2K+wl0jqzBbGo)PRBq@O!qoN_|`^GLxKvUww{*A z;)7W^1i8BqwNrRQ5~%)nua~FCiFOOMH$P2WEtjd{%F=?$m8At2a9B#Saq&~AgCn>Y zO8y1;lkz7bNY}_`p10r)_Ef&D5Y0I<+yk(`t`A(?D64+K%ogC!5xX#x>}WB@Hz91- zo(ly!terS0q4%?hQa1;~#@4BNVt)=$LNE~NZ<5A(E;F;8p@dTb15Nu<!V>b7(7Z2a zS!61F7R_p#z__lm+>LPX2ju}PoA4;H>bQ{0v38Il*SNO9KB{_NmgrdTwW=&(gl)8o zigZM>3CSt7N8qUu**VaY0;Px7!EBX~ou#mO271!f##A8^w!#oiP1EMZ269as)y76b zG8LSn+)kG-2FQEex^y;Hn>;H`j~#Z84UL{U=`cYBbcYZJ6Y5N8*FIC&B|_-@kcJYM zwMHGot-z|8MG1j^g`t^6?G=Qjgs{9IOLZCkFb9_NVutUJVM#e%fswY_u*ew`4!%uA z_mjc50+u-%7CL2&hx>MEe4UuQxJ(f_NZ#||oY1}8nFHw_S`Ly@10F92hd^6QHK8rm zKSFOjlm1{=vLe})A?3DBA^x8jpZ6RL4msblXbvDJUh<VNu?r)q|Cz$|dg7={!1(aL z;vbf!fvvE6+Al^?WM~GgyuwKGL#W`(dsBxHbj*dBc%(0HRari2^hOPA=$D<~&0AfT z<I7vAEy8xR42!S;IWf@MLud{Cd?4K=k4J0hJPS{ix!HleX@2h^!-YKqFu8M;d<7u1 zyR2ZBhq23}*jFa|I@Ip#X5H7iYXsIU(n;!@=&~~RrkG8t^GwTiu`M6QmXFmfM^b;h zNDn5R9l**>%|K)5QIBbm?xz&}ROXI?HUiuOI6ZJzL|}S*208p+Gz<_#1s$*npO{si z>F5_81V5Y%p3SV&!u1Va+oQ>I8Eln=_F*hN_Y<cSjU=@1%hLbC34)~(c;Vh<A^&A& z2-B94e90RDE<o30Irlz{Bo|ojz{r6c#GC<sGoWKQpkXLDlXSHPG!_pa(j!+3b?Whi zM*o3VDszvDCCeTnJcKM~VvoV@a^t-kdAhIq3pMiWzBcL3HS#{h1Ns`F`zq9Z9WH$h zi|xzVyi8v3Y)oG_*nJ&^VHBFaY(mY9?dvMtR}+?bT;DnSlw)|_sYNww4^H5C{W!i& zFdsOazr7A^*oA=H+HmNH(B?3xh&|82C<d9~xsabpT3J(Jsg<UM$z|f55T)=jch|KK zg>g%Ckfgu`q?a<8jyxSr=>~m15+4bTo=lNz)`DZ8-$l_fNZpab);!Y-!v4#k1hM3t zkjX_86bV+U^g<rR9rdp6W;=H>g@isoDC%q#R~qa!?5MM+=s?k{Fy{Y<>rKOcdYm@v zwrdS*W)oaH+{IZ8Sp7}vbC-z0#ei|G(PB3vhyrUpp0We7;GPOxrv7ex=>bOF(Be?T z92g#+Ze!0E4?(=60}v!NdbZM_HxQIK5Qvi_=Vi9G%@;v3Q=Eu<MaGW&%%2GtSlj0Z zYvuH>muyT7cA!9hN2=1;h`HFkUl8|noE|a&SP-eX$>><S!v;AdA1)*hRb)1L1|_KH z_a?fqlN|97WrJwjj9yAN8llCeUTeDxIOC&Q3*mtRR+%U%_s`Cv@~Hh>4<uNN-)SJM z!w7jOvrRq`RmsoD$==H`v`FfO@AK(|2QJ|3Kl=H}EIj$^Nqjo|a6Cbxe2OX(MHXzp zWcIoWR{HWjKuFlee_;Nn`|{o|JJg%Ewk*?!KM>1n@KZaQqx^^W01Z5Z1}N$eg2-&& ztMa7mz&>7_RS+Ra*%n+cViR#{b`So%Ml@3`J^1t9C>v6k*Ho77$DbkoycPH<q<i@M zN>1{d?51yuZ~7*y=}78J9EaV59>byb7+~M8EyHNmmJQKk$kaVlN)My#9!ACYaFEl( zn*ZtEL&F>kOWk^S184@84wfE{vU@lxzK54Z00TXd)OS~O@8N<S_i(Z9Vd>wArD1jt z!{U1=c6!J`tWi9ce!FvrW9X%OI8S<*Y4<QQzK5T{b;3lE)KMRH@8N+R_wdL>!P2%X zIED(lhl=<f?s0mUxS)FvxjXLRWZlDk(nB6ZyJpioC?><E66ONeMYFn4dJ(C<aVjN= zo^?l3fJIXG#Yr$Q{33jiv8&&JI>BL<%Ve#@c^5YG5QZG*C6A{&3E6EEE<PS5*6HUB zCr0kETtegMI=(;)Pgn4Hp<;{ry-jx?ghvlZZ&6>v4^4Q2KM3?KDr^af|C)j;unB;g zs8ojYrr_vkFJbF*vXsjN76qR$b?>kWxYEN;A;b>yk1)E&YT)B!G|+&~)m=L1$5p*n zKuObLweVS6tS-BpNbC@7g-|EPuROjSA}|Sp6zXyyGSBtnip1zlXe9O1QKDNm@w^C( zB&=D=USwnIqNkW~^Ne#eH@4?@xgyu9Z5(<Y@sZWH%k&+y^NF>1rj8gBy$rEFo?=}? z1HZ(`nn{^zS&|J@k|WjAv{auosAf`<`n10Y^-KtL?hGW6jjnh}LrMn{Ee2T%o!|iX zgzy&8Qg$s-5(5@s#!eOhivy_1)1}ue2e57yhJoFq0ZTG~!H58V%O1eG_TEGdLO}iF zxHf+9VG44~DSke@;4z-kuCRqBAy{D2Nc<ZP06m%b<Hw1CI8<VXjK7W~WwGcGT++JP zs!IDYC+%s2FpYvm;(g6j^JnvFc0VxJs@xJgWMQ&JwE~6q!pD4}DFi>vjTwVu^A%&N z^bsxvIzygXG2G~r_AE5ETb<gsgJfv|Q>gw8pbY2mogk4}G;0KaUg|b+D2N#7yi`a@ zQk{w+)pEdfwxhbuVTx^<DLfruq6QAUwFV2t28<U3XaHxlX-BpC1Tl~_-?(fe)+_M| zj05X4)5SMU@QJ=!e5vCAh&nWxf~QF8rQ-!{wfXgFc#+`9@2!>(iZ9i$fr0*&s#l`j zJuuRuX3YgUZToOhMvityx5^|++;@(VJi!Ju4gZIF$4v0x8&c4$>R?|GZ$Z79YgW^@ z8AKl6pRbtnP(FHF^hA91k{BEF`Zx<OQj2!;W#8ArWayPTl(}nO;ZLq%!Ag8!FcCpl z=*4<Gsw*%oL?c3ioRv|m-hw?`7?FxN_f(4t=o;sIB-&3MyoBh6an%%U>c^jK!;YKI zkxEq80AS8ZI2R>j=oNMcAoz1(=tXcL{0Dv5QiR`8L_kn423XmZMp%~QcHqV|P7j&$ zN-|FMJx&>z26$FeLmUd$vL*eNHx!X}A@D*$HVvgpb}q&zmYF!2qBp9is*zFr2&SBA z<NST>e;S;h3crZ9>Rr{R_NCZG3)(o9Y=-c`!Z5Ex(uzv-LC!+s707B>F%PKLnJoJC zC00+z7NWuIgn4LPJ@X)n!`q@iLHJtgG5i(3%R;u=5A@M4?Ju8;GE(rVZfj=+!y89C zaQ>5yJ-zxs_LAL)@gh*92N(wcM)85QCz1!?3Tswdzm5Uni6?ASr8yv+<A8wU_J$vU zr#W$Ws&Uucn1R4}gQ!n>#{qE`&guhGL2Pl$HcDX_%g1Jw_-zaXSq=mbaf?|a;oMjV ztPKsi5R1BkaASs-Fyz`WoZB6ST*A;xV1Q4qFuaKbC<nRKqQ~vgAL8_Ver(^x_UN%Q z5a0Jy_FZiE{Yfv5-!KX0WBwAb202lUxrZ2ld#*5y5yCMKA6=1(Or}fveJnQAE%J2@ zzg~y0w4cZ?3<MzmL}9)ssE0PAHE{Z6HV3sYv<FbaU3)>EtGWcWp-0wP1Br#(hW3#R zLhG=#USh4ECy++d*#u~{WQ*?eNW0JLoIbxUary*TvCnPoxAC>lAr%Sg(e`U@=d~AO zUVBl$mK!ai0LGhHkLx$#Ei%)jpY!HS`^~bO(b?cAc8fYkz}o?N3~@nuTupr0@4mUf zM$l;I-7ywo&_;ca$hqY(A}9H<TsYbdMKyjdzfbUEDA}x5nQntm38^0vQ5C8HQ*aiC zDkx4$i1SMRUbXxHOruhW7pXueiC=!DkVUOX4Qt^oA46tt<47cAW-`8^NJ3_cO~}k> za(XyWDj_qh5FM-Qr_9)!ov;~pWI|?!@kdh>&EbQE-^U)aaWn+HXED(&07c{J-daKh zr~d9t#MbTGp;h!|K&%J>3|efcr%{7jeemXK>_CT6Ug+rPQf&EATUEV6J&+<tJ_(0< z@Lt$xa10NYF*JF@kp>jgdi&%a3}n^{>Tm|cV42|!{~<y4+YN%;%t;{xISb$73G#G8 z3_(~Sny2gcOpt^5qeYOz@jxw{x@9bl8qt#YksJiAS3ySckY)TOxW^z{t7)TiE#_hs z)YCj<tOlc<S%n;i`+$k^U?mY|83@fPa0hH5IHOZfK=9D*vvu$g1fK*CO=a*9GV5Vi zC-ry%&R?8ge*jy1Y7|Ihnu+)=NvSS9nZ>D_JYt@qGW2eOs+7uw8O1biFHYz5GH^gr zasqG0(SAa4=kb7|-%g;o&u(}>Hk{cr6m5SMC@!=s3lzTyYzB%?(z-)&Iiaxri;G98 zg%43gYdG<{ptUqDqIGy?2M}sbEJDe`LV*zg7bR4WwdK?bK?({}LJb8dG1eD^P^(^l zDQ!7dv|--1s?&eL4AL8){ml<B#44}@YhwP|te8LSzThnC!*_8W`<2A}wZcZ~fcLZw zF8TffjR)MO55=joz6St=gsVZyfrUim!~eA9z`o~m@-Z0BRs9}*lbs<j7`E&{+2j#I zS?oPA1XH%Ez@rU-tqvwXwuuJfzL7aUbN;7(cAV73-Vp1`RubygqV60uO{(ZaZSlKp zs8mVqTB>Ff4Mvc3+f}4hQ^I;hYO>Vx;7lPRKd{mO1`6OPmXlnPMGT%}I*qqJ!Lc#m zuD?E5*rB}t;K-Yz=Zi>bR`<YvAY<Pk1-6~MBTD^yn@y=KL#cF(Fr{ZorKlg~#8E26 zPzo*vMrWq0L;oodV5=T8<6h_%0p~xv22QF2j@N+W1~@rAgOj5!i3bNPER5sT;JDRc z+6r)0mkR`jVW!pE4D)%h!!WPKGt7jX9(RNt+BsbF072)0P!iEv2sP;qScfIbbgd51 zBYvOKX09TsBgr=E)bkSKg0L5|1r#}UoQt4o42SS=v9QL+3uP2cn6?4@;nn<+qq6SA zK&vXU7~aqYqY|Q!qWbIK`}6lM3?RRED0K%B1#P6~A0}xL_0`cR=DL?MrK_ibwmPO8 zH?Q&4%|E%AR@N3Q=GD(`&MV}t$ge*N_?EdTRoWP-Vt~Y}oEvCrpnsj({v(Ay5CA<3 z3OB0?SQ|K#(WNi6fmyCQlfLl=@SM8D^j9Qcxur!y)TXvVq-wm1Zz^jy8lAtxM*rEh z(f4NWI;3~*uu*^4MsH%HUH<Ftk6e^dx*a@$7*=8Y_3D7{C^7TIk%bt5oCI~*LnJPI zDXr?`39v@7_bglc6XKIKc6X5kaC1<gjqwnrL};aYP)J06gqK8br|Tq?cgZ>y3kb<- z2*w3NsH2S-5B{(hM0A=vp%SD_uuiD2R{nn&x$zx-2fJ%{ue;NfVyh7>G!ES5sk8D? zn)H)*&$q|aA7e5jnjAMGXajqSn&czYm__KvO@{@Pq8POa=twpEK<;BAN+~B3y6K3S z%2RlleI;C?B1FVaNa=E5s6NYr!BwrL%b1d#r1oU!3`EKtu&N}a^wg?T&^vJ2z$wE- zI&%PC9l(o+AFp_7K@08ou?M4i3-sC%VL@*0dz*d^W?~3FJB$IjbKDRV>$Ko#P@8W9 z9%GV@5;8+WoE8qRRkxkNk*!vr!|b4l4_;4pL%|tF;syr~z%M9hFg2=cL}wd9ef5A% zsLA3@6V{7Qfcgi7lI$QzoHF!#i$tCxn?5UV+W~#1J6(VAH-|pjT-ZJO)Tw`d*PT8& z6pJ`cE~bOwFVd%u^l=jl4t*}d``|3TVnaTP3%*EV%Y+@%XMBk0TkA!1X|7EtX0Akl zs03hrH6CG**9*p3CHw*J;!|r_da;zA36;HCeSbUprLh#1!Z9gf?{A%}kZlY<x^7*! z2l&74S&bulGOdK8(C(16R7h3J-0CK@iamL+_oVS|SM@L8PH%XbHya$aY#Zi=r&fCS zT*_%$%514>0I;4p&ipOG@9MpIHd}aw!^jq{Y6v{EiBzm9V@iO@(@N=!z)Ujy;q6nz zJVaC=#k3nRM@lgspgU5@aXIMzzJuhFe5C0%iFA%0pf0D;lb)bjP=~gd8+2han11P; z@N55WrzG{yq13$fbd0+SvnSo#>92JKPsEy@q6)|poUc|ZZo}&wzz<1mM~f`UFK4E~ zf9KlcErugO%PUv)iEwi|V-<M+Xev+;iz`&Q1b)e!3vq0u)yuQdI!F=SkO)XX`OC3e zgik<Mmag`Ci+vMlll}BbzZpvO1Pn@jOo6N`GbQPy^RPxlm`#GJy377yPxaU&6ra!H zqwbC=9)BT<3t0SqZ1J`!C_b9SuhOkXENK_D$?LoFJ{vVBlffuzrB)W4Q$!9~bQp!6 z5teh*k5m_ix<I80?1T4=;H(8xa4Bg~J>1GE2~j&RSc_un5}SWw80PhF!7yO<5-<Z_ z7lf+$6NxVZ6iHsmP~K3v8_8<wyrKTlDWY&!tEu;(Hn4jbu^pa{hgbxkT4*77&F^e$ zOiESxZ@m$mNk+j7UxnpuSMXq9hz0kXnHo%%0zG}FP$g=*WU0lkvmwq)OiIp8VBo)} zp-eK)-UG&rUW~q!YqM@zG?MALmn%3yT<dvD+!&=g4ZaFv8#I6w9OOTV2_eWgXa)r! z)@%y&8Hl^qkTY3heONFB)g6p?MX-(kbWXDHHqpN7jBgx-^KFgrY+2W7gg1>N!uv;m zB{_hZPL4;A;Ho|nZ|L-~6Wr>9tN8;`^#$K`ReuD&udML0W?7QTZpB<qR4d*m$~41q zcBnJyiP1LEN>Iod_w(p%C*vNF(skUesQ!oJZj%9+ai9COGj6`E$35aa0;tD5nnC&@ ztcm@#-jEmSnpd|YqmE1ER}pH~vNPUam(rLd8XHGlMHsb;0(j47vE8I!!3uqydA+AP z=ORo<CL>c1IkS2nRYX1pn(HBiqlfaXPw%x5UN%f!cm*H2a@{oaqPZ@(<riq2P55Ia z^(|G8Ov4*aQr~%`$Uc(PcLJ@S1obqeQTzUqX8Ao%1I^$=)Y)$m88M?tL_g7c&^Tn$ zu$Qfxt{`2qYMad#fj88z9oDabdWF4GG-}#`4idr4%_cCwb6)M2U9DEuq86pnTVmPd z>9D8c#8)9k^8%*dr`Vupo4f&rre+F2Ibh@QS~nz45%`gUxdfl;>>u!gCCoWH-)F>8 znAwD+BIYbN7-1r(t0zRl_-kpEw<-kYbVeWhS!&nH@#R+4pJjJR8RX0JcxWS_p#Ulv z5gHWtfB^doNh0>Wt9l%Oad`O;6bra2W_~{(rT(N&Va`v>#)(s)cSt2Bf9!UE#kNnb zkUGe-A4!~>3BHDj%jRg0+LxMKodTua*egMu%*wP*^*s~=<t9Cm-MDX<$sQZjs7g!$ zX5mAFw|dc_ZM-H~eM-%AwI6Fn60a_lO1Uo1HK=~EggpolPRApSVQi3?@N~CoyBY6T z)`g=Tx>&^J%x;Kz(t3;Lo8X{rx?uE1DPR~VcrKdqJ&R!n$$mYQ1rlV$?bpLzfjY-3 z8q51K?o(l9i@yUsgtQWi+S|2rsx7~sk%;(RpN{E|QJYQdKu4pejjZQMQLk>KL4%jE zHY0?iuE+XOc{#70o=o%T&h$}Y_c6-p!vZ7))#09t>rR~&*V7v8R!K6voew8sca`OI z)kFJwIGexhI-Kdd)=9D5$w9l&$!&3+?73^5%s7_3><3{^--S*NkL%<=*O`UA#D|kO zUGCe241?TC9A0X<a7WXHTMI*u5un_>ElXBsc&Pz9qLrwu&U#YwV)a$9ne2U&t0Ghv z5*zVf51Env(lQ+4>v9yrzrmT`TlFld*bHyn2FU2yB>!CXAAz4cah};=t_@_aGb$+S z?dVbU?4uflU@u6WuFm65?K~c28h4@bPBrig>OtHd8md@;f6w3_0!5L@1AqL_fa6A* z>cdezjT`}BQgkfmoqU{YdkbB3Gp7MCh%A4a8hIm!?H`1^#9^Kktf2Hx!*>^4%_9-c zaz~C3FD-w`p2T#M$3W&8j>;Ok=cgdhrODF;A5KcJ(=bFkC774vjrf6-R<#r<TB0Kb z0TLxR5!8X{_{Q;o$U5Gcivt6a`mf~#DV6iGeRK_k)JKv>j@IQo-kGiIVA~a;mIvbj z#>{nN7=Xv1I6Gi}f9Vn-yx4WZSG7i-4_;D?@iD8xlrT{uoUne3%?ZUg9W*wJhssXJ zf<QcxX$~)R!N0=`_y1RBCHWxD%DR9<NqSH0YcXTC!Bs6AU;>4IG+l|G<IE}rA$c2u zuuDn;ov>|#H-yxLOxTwC_Ax>rlrWr|>B@$XP&_|tU)nb_#a)x9R%4GC$bXH<e?|xJ z5HdVBtI=g5lq$$kNDu=a6V?(|BDbNVdrU|9^+%ushri-UFZ`x1_{<(UsNJkSo$-eq zv>&ZUl3$;?3myCp&F;)G_&?b}?0=5`k5}fv1~~((`=3?nv%n5an4m{6t^)x}>r7!z zOyNg}Dw3K*VhZ<vz!dh2DZE;l!YxES!?PA;RN|}R`4<yx=nX4%`7=^4Fw`4<!;7c@ z){*N?9d(BrwHaDh%C|qPu{m*kzRih<*XnX^9>=p{4`JOa0WMhB<S&69HJprPL{<WH zHCGi0>hr16n1stkPQ$*y`>JIWi?E)*Qy?rm>{1wPR(>>AX;q6%l^1js=95_-<?`N! z_eclcN8B(OO`KvGVld(%wx>>kbx+E~jFOs(U59d>kQhUubyXxD)MnJl3QdGDI8+Zp z-wtaXb7z2`btk##i?cQ9*Q@P930WaBP|l?(;R?c(0*>^`@rtKq@UGyqF@^8buqVIF zk10%<X9^MHXTKhP$`oD`Q+T#EbX-BEsj)gbWRs~$c^L7+qS3s-BXaP#qh6l+1Q~wJ zs_So~iDYpGj&*EmV>EXm{yc;cjQB>*;1xvtz4iM-e58F$S5b-jQy}~|5Cov=2kHav zteWxvVhvypU;zC!R?gC;ft##?<$4hxm}V99))OT#(JGj=NX8d9%_=DRQWqenv~D!b z*nbENS*<SOkOdy(2akd03Ik8|)xu>KZtSUJg&TUSR+L_VX@g~*33il%SYd$ga!+E_ z*Tu}!k}f7@GsXQI29mv)zqx8fF*AuSC-1~i1#WPzK)fS<8u8HxMEO8@OyNcjY!TMX z;g4DBd_&c02B!O#0%rb~#+({;LVU%gb2;~`%Ds6_uBwM*-15}nnvH1%EFe3lH~U-f zvful7^L`Cn$&IG$Cio0-HgsFB856zP+kN2`lEWIsD01B*p~BgpvbYm9f5ooCYVSKy zZ}u{8-trlJM|=c}yw7^%5~lwl-Rn996ZbuJM;_@;*kOP}FmfnC+<kBhp$PZ=7N&pu z^}7nf>wIaqK^V{@2xWb|q2b=DrvAX2#;e4?at1z!wH$dHmofmKP>pMe+clRHVwh_` zArCH|y*$5%L4mzVH%rWhNilBQk+L?OVQ=h*2!$z^N}NP;Js-~D!;bkyQ#tUzz%NE? z{6FTG6Ud9ZO{@z}`d{Q1Zu{&$2p{G41VRt|Vo6t<U!Xb+vn;r*E3*v2*}mOimU;Vt zKSoZ`%o66qk$jN<<SIjBYW%G88|q^Q)clh*tpk@DYd{?n1t2(*hgffIg8Xg@aASck zc<U=&V}w=kV7o3j)GD~*Yh8ey2a$<TN?7l&D1`}u;E+l_(H40@bPCg#P_C=}zLB@e zl3s-nOlY4(J>Q_c%_zf~D52fQvMW2Rdhik^w4cDT!QWYBNi35bsw=*?%HTpuXovHy zMV0=Tknn0hJo15VLfQx=_+-A6K6ExfM!}{i7m~_SYa$HKEE=7;Rv3B@=g!6V7-Q|! zVC!FvSVv3HG7}0QHcUoEp@^D-U{EGc;ov1}w0v6lS(M>mP1Di(>kSoV^hbu1b10OV zgp&>6HeJ;R<Me?@xNL`VC*-+KwLL622*CW1a@B&PLnN<@B4^eLzM4OoF>Ij1N&;Xs zJ!6V1@hoYXJtMvtfeo^67#drO^Y~CUKNW^9aUrNJ4Jo&A7?;blKoUC+O&X;BQmZ=| z$ZLOo*FCzbmw~MC<s=`5`+txt2^Rh)z_=Dgza9z$8!77Gj9$z93Y*kIEO35Whp?LI zo*|w2RZV*oges<sZh90zvAi%(xn@J*!%nT3?$7?+x2zMn&$kDzp}G~#)LS&uMZWCc zy)SE(*Et#r3dYCltROn-PQc{L{*gu0QQPrjv!$aNp`(7Hj@shQ+X^#aD^wH?J$|6t zrvZd;0GqKDARvZM{Y3L<Ot|2c1n8%mcOQ^_{|q1(bqA!ZPeEuj7S5MJQ}rcX)He{T zuqS}u>BJj!udC{D8;NbM+4Lf7B>n~@_Cdg5U<Qv;WiPkY`^CQOk8LETX<ZH^F4suJ zGCRSa{evKJIc_gR3KfGyTx&QZ5e$Ps);?Pb^S%cbUAT4VdtT`BpAlq#B$*3O8dMm* z#DxgcvZT|(eUUF70n8N`!1DglC$I;y`vA3JM7s~remwxxr!bUf12a@Me<oaK&Xl^y z-H%*MURdW3ep3d+;B9sB-}@%`gJ1CBEp;{?3UP5NGT!Rh#Ctf%D4gz`ZH2G|O5<lD z?i1Jx0{n8Em}I2lD}0z}9_sio-aPz^52x^<%YWVEL!I>Wvzh_H7bhQ5AP*@Hj<w{& zBc{L>7{_!K7;MWH7>YxIz*xu*ATVm>Q%f$&jGrJgMj*4hmT@9DAT}s6To4yVY)qoq zfFv2D&NN*eOvG;7sv#2@a{bTp;Hv(Fy8-YAr*cI;VXerK5Ks3ePG(Wa^BQExV#<)U zYRc%&&T4E4$oVyJev@aqxQb}u{)>>yY=D7#AHjwcDTECxQsh@k5o6yPDFXY}o&epX z$SOjWjeKibiu?*GvLj1Zq=*>0{}J<Wl1LFq6D>s^g%~&`-1pT`QuIEGOPJcb2g+%G z29yJP0%d>n-;_j*MF$X+Na8s|1?!s()|*h|VG$BK0_#m$a({a=u}<8&s-e6Sfb{`H zc3#sAC@jjKj_XeEifvaAG0iagV=?Zk!WLWS&ahr}8!E`ftGkb-<LF`CU4s1}CR!Z9 zIyl56jxdU)Bu9&F?LQdpJ{(!xXtz_g?1aav=A%ON%s<5wyj^v-N87LaXv_LFCCTVw z)yu(XJVw3nBHOAbhyu`BbTk)}j*jl*&-;PuWrZ)h(NQmcs9;M+r%{7oDzSp-=to4o ze90o@FI)B-)XQ61NBi<tP`!LX_41iNZzI)<-*w7HUwDlgdo<MxgiSaA^)k(c8+FV2 zpB66o9anGnqe%BvHTI9r!WQZ7Lv-Mug6M^#x<k~*9~xx?^8+?Vu?5~mzl@#)RK_eK z`yk(ot!#dRjn6|ov=pggYKeEK7|LU+7|LhI!lb?Di0?@9lzvbjeTub~IfoBFoueO4 z<wMjwoXm%h%|i|!TFk>?e0beF?9Yc6&BGpiSjY$bM^8lmnEW|}fez0Xs`x3Vq_0(* zzT((vx2lhWDCb@-Z#b-)S&)dNJ_&S9jw!|s*G0&b6CQ)*GuG708}r=>QEd02oz<#@ z@v)KAU?p~3aKdRlmfO`0xMGpDv1PJnRk?RSpl_qwjh~lCeRxYP`@sfbPgO7!llV9m z|3xc7SM~dxIanc-17!7utlwpMa4tw`X9Gk+r!HPZ|0dgs=;?HEu+Vh~!Q2G@dlQ_{ z{<Z1=Y*QCRPVWOhF{CK$V1OUI02qLghO8*afW!64j9c+8AcwQXoN2z$0pSCj+(q^4 z1XCn<3>0Eq^Q^b&?m(_)V$OQ+xmmVtz-S)$_+><M&n5m_+o!POHw7)m+562k_NwS2 zr_Zw7nEoV7YNpfQ6B38xNBfczwTUaLjacol15E7?V4qG$+)I(#lEp%tcc<pJyvsK_ z9d0?2zsoYLFuuR;2gCz|8a+vjN-)EI{!OmG3<z>me6^YkFbD%&a)3c%;)>K228`aC z^U5x_5#AxoaKX?egvCNQ?S~kE1mQ6VcpUC$gK+5gb?SbJlOaNEgdb51K;W2cQAg3z zu?By$)8P-p><-ILjOi>M+kdqicd%V9=kz-CAU_aX2Q!IF&-CbcNH6w#);9T+xuLcm z2j-^-M!g+dT$hbvo*_~j|Bc#U#sm54_1DP*68Pcapkq<z7xFnCCTmNr47g2`oh$WJ zsm(u!azv7zpbWWZtVt8*eHVsgt&qpDoLT}afJoCmcG63H>^=$A?TA*R*AYL38{6Rn zMt&y%K@f#}#rR1b>-7DY&{%Q+yxnu(XT|mXMZ4}>JN39Qw7P%uOc@7{z_h3e8TtH- zR(@&;%k)4H50TViaN9vCVVx@p!C>(QHgkh&6a5LB3nF9p!zPu;2+9X;Pyr8;o^_zV zg^z0~JJb`68WJrkTGWx}#%?Kj!z<3QFAkpdHJljO^{j;Np%eduWs6gg7J0C1Sm{dF zu=09uIPt+V%${_0MiDEAw|GOh>kD>D5T_*)<sg_e_8#<CSCNFRlv0z0i`K~*qq0l5 z3vB|+k);O!-=0xPG&EIbFky}seoHgv;k&yAOCNl4kJ6Hlk=vz6?b*cfF@hp;kFJEC z5=*Hr^=Ve_iOyle)@j0G2cox+ATcN-T-8sZ&Q4&W=CNR+$ZV_@)rngK0T^}1<;kSi z?NX|ae*;nyBS`@JTW?`*@GUCV_>r(oxk)KF-O~$AEB3JXGZFYOqnJb08Etq517TqN zh7(*_EM*X#K52TNMTvb;ME7y(Kq_-gX>+W2!Ze#GZyxTTfNZEyfYvZ9@ROlTI-b~{ zmr4zvMf}A0_-T!gzhQj2_&@^f2B75D-}?zlSfmbF0hF)_!o(){$tLh=H-YbL0w3`x zVwoBWw93wpH=;YD?<^g=(1my=#AE{5I{>zdF4y9^32P4c&0E!Lhr$g05KcaC_yQce zN=ze~BFR~)Kt|rOz<xyWg8&a4fecK??vKs(z3?RqUwnCQz!Z!eK5;+pVxN3(8b40B z18=q$pxC2}Z$dHbN>}ymfZvC;Vs#b1pyDN{2<w(IZ?!6Bf8llQ1NiXdVe-JQ?j!IO zA}F~s_b-7&roMr$X+nwD<pGO+gdBIMb!v`&0nadNR;w#a1Ny~bd=c3-c{~U;dbb}E z<+czj9!m+Q^<i(R0Jz=;+;TeiS74Wnaw95P98lDS14{6OU&>v>sxwN7X^>FyEqr$H z6Qty)MN0k#Qm(^?9Uv(o2DeL@`rC4_1E|Jcgo@;P)-DY9BNe3&6xHE(_5Sr_(v|9) zbpDQ$aZ582Ablh%^7ahHDo31$p>W2b+=5{ne&CG52Sx`mg)dCXdVtz?E@}gEmLNGR zmY>xb4gA%bAtSCJnni3a1lw3bA_`<$_-Vy=XNI&9&1kX4e9Cbgz{5`q9{vV+ctp+2 zkSV|D8Nwpf*`Q}g4Y0tb=J1nE;L~mb-`NB{;?c@7_3N^j8Nyc048aXg)ft4CxMfYU z#4*@9jUK>4ijYY11!R#(>Y#lvb}P%|Z3ro7&+_HH9RM@=^4?-@$(FKgUtY6LcX%5r zQ<<$)ZRteWN;TN1(%$WZqVG#jD^*{+%<#0UTIbTj{kQzdlFdt}+Gs!a5DV>PH(Myr z0f`)xyGbzMX(~IxXDL5{FMeA1;%~rLF+MP~F6x72YBg}Ka|~2xuyvw`KM+0BVP-iI zPDXSd=s<WU&IntK5i2@7fKdm^1Ow$twhAa)`3WfbX+g=~0A)Qs3}c+OO*00I)W%me zV`K?EmuBSf6HV~bYJ$I^iNW}YA1KSz=dZ;u23w64orIVpXHAYg6^FUB^ueqV<yo~% zMCgq}!7+2C7SnCv`j2~X3<6NR)W3RFS$gHq!vdJS-d=netFu**c%2PYPOQ|v9%897 zH^Im=SMUzP3XLZl(Z&2$0=yMu6u}yRM#p!YgT{9WibOen9ax=FDQ|)71cPMfC&`Xa z3mg2cW`0I7J_;gZkmN4)yFImfW|6x0l^COeC6s+BMQrb$jCwv}uc-l_h2ax**vetp zKZQKt-t4@Cg)PKrr~)h&b2i|+Lv}I*p<5`eEzPLoC!pk~1tot2&F0}Fo@Ojl$AIn> zi-d^tmpzb7{E?6}<K&xd<^a-i{I0IYD&Ii*EvQAcPxGb;ziCLZsbqnPkYK{tAMNoo zg`a?tpB9Y#4KQv4{S0f?{is=!Me4Mrnl%^Vflbu$lf%TP)dYXzF!9lCm?%@@Kn+`~ zvsFiC0ah6>3OV2kEKPdk%P$VZR195^)xIYqB&{n9o7GzZv<4sb&3}^3Fp^r#Uuz`u z@V%y5%*=v_n{4%9f6Z1jPt~aZiD4@-SON1AKZC@=+G>lQF6KwGnxS3PI;oW{{$9D* z7JtVbB*I0EWmh%U0zFf&2LN|wEq^Q!CZ_^wv%BaR%{j0xqYL5Z=VW-ED>?GbOrYMC zauX-!wVaV-8K10;O+4LE37Vqd_Kd-#8=zT-0-_6mgB>^v2u}k(<HRqER3YHO=v~8b zE)>m_fgg7=BHQ-A$24fx0R3cCIBLvEqVfJ7O>wauF2`Dc=uZ*Gg4_kAD3R9j6XgOp zp4<2g!-4}ahJ}Fm_8Fi_%)q)2%XHM5!Uos%WSoRd8}Y^oQA6t_);LL2=d(84Oot}& zmu8h|*2U+LPavcqznFGcTPJ&x^R-!*)8qU$Mwc+C{}ZCSHUHUO(dS?%jp&U2k1XPv z)xLVkP*!C3ajetFV+YuMy!D5DL_d~3u<DMUZW{0RI|c#+^#V5T<p9={*aPs{jk~IG z@UHU@JE+keX#Rz=s(}=Yb_f=m)c|g5>UF$H&U3lb)u)3wj&1yX)E{<ph}8|lo+*d0 zUY~>mCujh%W}S`W+`Xa|rq|T%y4MO0u#^M*ezHBlsdleOn1f|?&pn@xO>I3F)dI$} zf~1CW^Vr_q9|=~)g`u4aHc;Mi96!V~c_q6u9+Jx)NIqq1e;L24I$>8J8QKFRdvt*W z-5N;(^t?J2kX&jYdG<~X$qhD6HekEaaP3(!kX(!1i9f{2-AH#7kCU4}bZ`Q8vk@|q zV92%TK*)huf|KA5X^I^%-rnCq$mZX60gSzR0At&F2MnE1%ZB7BMBPUxK=9~w`Sx}p z62aM1%|dZ>H2$b2a16@=#MD$$`^8B%rjCpOv2a&Fyxc5TV!3C61`+;R8??_6B@ulY zol#K#DHF`e&L`ph-8H47h>V;*_yxMI#}7dW{=a&~=*_Wk9+EL2vW3|<n&21l>9B;H zef3!AQ3L*Jbr@(&R>lGuCaSoi5M*9~ElkPN2*HE!<6PvdaOb<SW^~}s%r=D4>MPar zCr&mg`Z=ElTjwv%l4#1vq720OGNVERHAXmb;V9$sl5?TB@<$zkjTPSagDdftW>f+` z-ZK&6sZgjfT(47z@OOO8#pNwC&dGPZ#Jz;^KA6RSomeIT4nc%&HJIylkbx|cocl>X z+`@C|obLC*6yzRj-@_9^S2*f`<jdDQ?p$_LgOj*0+JQjz`@VXXfSJxjR6i|dd@xZ7 zf{k<GO<ZTG&?Y3mL~GbPSGZ?r9lWS>pnv_f>gDHY!-y{Bfw>9mxE{C!r%Pc-<~NRY z_d<AwBzqG8%B77(VjikaF2OY*Wey+{dIY520i@LcvJ!yQ$E2Fb5lFBO02KA giC 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/binding.cpp b/node_modules/gulp-sass/node_modules/node-sass/binding.cpp deleted file mode 100644 index 20348399..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/binding.cpp +++ /dev/null @@ -1,208 +0,0 @@ -#include <nan.h> -#include <string> -#include <cstring> -#include <iostream> -#include <cstdlib> -#include "sass_context_wrapper.h" - -using namespace v8; -using namespace std; - - -void WorkOnContext(uv_work_t* req) { - sass_context_wrapper* ctx_w = static_cast<sass_context_wrapper*>(req->data); - if (ctx_w->ctx) { - sass_context* ctx = static_cast<sass_context*>(ctx_w->ctx); - sass_compile(ctx); - } else if (ctx_w->fctx) { - sass_file_context* ctx = static_cast<sass_file_context*>(ctx_w->fctx); - sass_compile_file(ctx); - } -} - -void extractOptions(_NAN_METHOD_ARGS, void* cptr, sass_context_wrapper* ctx_w, bool isFile) { - char *source; - char* pathOrData; - int output_style; - int source_comments; - String::AsciiValue astr(args[0]); - - if (ctx_w) { - // async (callback) style - Local<Function> callback = Local<Function>::Cast(args[1]); - Local<Function> errorCallback = Local<Function>::Cast(args[2]); - if (isFile) { - ctx_w->fctx = (sass_file_context*) cptr; - } else { - ctx_w->ctx = (sass_context*) cptr; - } - ctx_w->request.data = ctx_w; - ctx_w->callback = new NanCallback(callback); - ctx_w->errorCallback = new NanCallback(errorCallback); - output_style = args[4]->Int32Value(); - source_comments = args[5]->Int32Value(); - String::AsciiValue bstr(args[3]); - pathOrData = new char[strlen(*bstr)+1]; - strcpy(pathOrData, *bstr); - } else { - // synchronous style - output_style = args[2]->Int32Value(); - source_comments = args[3]->Int32Value(); - String::AsciiValue bstr(args[1]); - pathOrData = new char[strlen(*bstr)+1]; - strcpy(pathOrData, *bstr); - } - - if (isFile) { - sass_file_context *ctx = (sass_file_context*)cptr; - char *filename = new char[strlen(*astr)+1]; - strcpy(filename, *astr); - ctx->input_path = filename; - ctx->options.image_path = new char[0]; - ctx->options.output_style = output_style; - ctx->options.source_comments = source_comments; - ctx->options.include_paths = pathOrData; - if (source_comments == SASS_SOURCE_COMMENTS_MAP) { - String::AsciiValue cstr(args[6]); - ctx->source_map_file = new char[strlen(*cstr)+1]; - strcpy(ctx->source_map_file, *cstr); - } - } else { - sass_context *ctx = (sass_context*)cptr; - source = new char[strlen(*astr)+1]; - strcpy(source, *astr); - ctx->source_string = source; - ctx->options.image_path = new char[0]; - ctx->options.output_style = output_style; - ctx->options.source_comments = source_comments; - ctx->options.include_paths = pathOrData; - } -} - -void MakeCallback(uv_work_t* req) { - NanScope(); - TryCatch try_catch; - sass_context_wrapper* ctx_w = static_cast<sass_context_wrapper*>(req->data); - Handle<Value> val, err; - const unsigned argc = 2; - int error_status = ctx_w->ctx ? ctx_w->ctx->error_status : ctx_w->fctx->error_status; - - if (error_status == 0) { - // if no error, do callback(null, result) - Handle<Value> source_map; - if (ctx_w->fctx && ctx_w->fctx->options.source_comments == SASS_SOURCE_COMMENTS_MAP) { - source_map = String::New(ctx_w->fctx->source_map_string); - } else { - source_map = Null(); - } - - val = ctx_w->ctx ? NanNewLocal(String::New(ctx_w->ctx->output_string)) : NanNewLocal(String::New(ctx_w->fctx->output_string)); - Local<Value> argv[argc] = { - NanNewLocal(val), - NanNewLocal(source_map), - }; - ctx_w->callback->Call(argc, argv); - } else { - // if error, do callback(error) - err = ctx_w->ctx ? NanNewLocal(String::New(ctx_w->ctx->error_message)) : NanNewLocal(String::New(ctx_w->fctx->error_message)); - Local<Value> argv[argc] = { - NanNewLocal(err), - NanNewLocal(Integer::New(error_status)) - }; - ctx_w->errorCallback->Call(argc, argv); - } - if (try_catch.HasCaught()) { - node::FatalException(try_catch); - } - if (ctx_w->ctx) { - delete ctx_w->ctx->source_string; - } else { - delete ctx_w->fctx->input_path; - } - sass_free_context_wrapper(ctx_w); -} - -NAN_METHOD(Render) { - NanScope(); - sass_context* ctx = sass_new_context(); - sass_context_wrapper* ctx_w = sass_new_context_wrapper(); - ctx_w->ctx = ctx; - extractOptions(args, ctx, ctx_w, false); - - int status = uv_queue_work(uv_default_loop(), &ctx_w->request, WorkOnContext, (uv_after_work_cb)MakeCallback); - assert(status == 0); - - NanReturnUndefined(); -} - -NAN_METHOD(RenderSync) { - NanScope(); - sass_context* ctx = sass_new_context(); - extractOptions(args, ctx, NULL, false); - - sass_compile(ctx); - - delete ctx->source_string; - ctx->source_string = NULL; - delete ctx->options.include_paths; - ctx->options.include_paths = NULL; - - if (ctx->error_status == 0) { - Local<Value> output = NanNewLocal(String::New(ctx->output_string)); - sass_free_context(ctx); - NanReturnValue(output); - } - - Local<String> error = String::New(ctx->error_message); - - sass_free_context(ctx); - NanThrowError(error); - NanReturnUndefined(); -} - -NAN_METHOD(RenderFile) { - NanScope(); - sass_file_context* fctx = sass_new_file_context(); - sass_context_wrapper* ctx_w = sass_new_context_wrapper(); - ctx_w->fctx = fctx; - extractOptions(args, fctx, ctx_w, true); - - int status = uv_queue_work(uv_default_loop(), &ctx_w->request, WorkOnContext, (uv_after_work_cb)MakeCallback); - assert(status == 0); - - NanReturnUndefined(); -} - -NAN_METHOD(RenderFileSync) { - NanScope(); - sass_file_context* ctx = sass_new_file_context(); - extractOptions(args, ctx, NULL, true); - - sass_compile_file(ctx); - - delete ctx->input_path; - ctx->input_path = NULL; - delete ctx->options.include_paths; - ctx->options.include_paths = NULL; - - if (ctx->error_status == 0) { - Local<Value> output = NanNewLocal(String::New(ctx->output_string)); - sass_free_file_context(ctx); - - NanReturnValue(output); - } - Local<String> error = String::New(ctx->error_message); - sass_free_file_context(ctx); - - NanThrowError(error); - NanReturnUndefined(); -} - -void RegisterModule(v8::Handle<v8::Object> target) { - NODE_SET_METHOD(target, "render", Render); - NODE_SET_METHOD(target, "renderSync", RenderSync); - NODE_SET_METHOD(target, "renderFile", RenderFile); - NODE_SET_METHOD(target, "renderFileSync", RenderFileSync); -} - -NODE_MODULE(binding, RegisterModule); diff --git a/node_modules/gulp-sass/node_modules/node-sass/binding.gyp b/node_modules/gulp-sass/node_modules/node-sass/binding.gyp deleted file mode 100644 index abb1852d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/binding.gyp +++ /dev/null @@ -1,59 +0,0 @@ -{ - 'targets': [ - { - 'target_name': 'binding', - 'sources': [ - 'binding.cpp', - 'sass_context_wrapper.cpp', - 'libsass/ast.cpp', - 'libsass/base64vlq.cpp', - 'libsass/bind.cpp', - 'libsass/constants.cpp', - 'libsass/context.cpp', - 'libsass/contextualize.cpp', - 'libsass/copy_c_str.cpp', - 'libsass/error_handling.cpp', - 'libsass/eval.cpp', - 'libsass/expand.cpp', - 'libsass/extend.cpp', - 'libsass/file.cpp', - 'libsass/functions.cpp', - 'libsass/inspect.cpp', - 'libsass/output_compressed.cpp', - 'libsass/output_nested.cpp', - 'libsass/parser.cpp', - 'libsass/prelexer.cpp', - 'libsass/sass.cpp', - 'libsass/sass_interface.cpp', - 'libsass/source_map.cpp', - 'libsass/to_c.cpp', - 'libsass/to_string.cpp', - 'libsass/units.cpp' - ], - 'include_dirs': [ - '<!(node -e "require(\'nan\')")' - ], - 'cflags!' : [ '-fno-exceptions' ], - 'cflags_cc!': [ '-fno-exceptions' ], - 'cflags_cc' : [ '-fexceptions', '-frtti' ], - 'conditions': [ - ['OS=="mac"', { - 'xcode_settings': { - 'GCC_ENABLE_CPP_EXCEPTIONS': 'YES', - 'GCC_ENABLE_CPP_RTTI': 'YES', - 'MACOSX_DEPLOYMENT_TARGET': '10.7' - } - }], - ['OS=="win"', { - 'msvs_settings': { - 'VCCLCompilerTool': { - 'AdditionalOptions': [ - '/GR' - ] - } - } - }] - ] - } - ] -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/build.js b/node_modules/gulp-sass/node_modules/node-sass/build.js deleted file mode 100644 index b274c285..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build.js +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env node -var cp = require('child_process'), - fs = require('fs'), - path = require('path'), - Mocha = require('mocha'); - -// Parse args -var force = false, debug = false; - -var arch = process.arch, - platform = process.platform, - v8 = /[0-9]+\.[0-9]+/.exec(process.versions.v8)[0]; - -var args = process.argv.slice(2).filter(function(arg) { - if (arg === '-f') { - force = true; - return false; - } else if (arg.substring(0, 13) === '--target_arch') { - arch = arg.substring(14); - } else if (arg === '--debug') { - debug = true; - } - return true; -}); -if (!{ia32: true, x64: true, arm: true}.hasOwnProperty(arch)) { - console.error('Unsupported (?) architecture: `'+ arch+ '`'); - process.exit(1); -} - -// Test for pre-built library -var modPath = platform + '-' + arch + '-v8-' + v8; -if (!force && !process.env.SKIP_NODE_SASS_TESTS) { - try { - fs.statSync(path.join(__dirname, 'bin', modPath, 'binding.node')); - console.log('`'+ modPath+ '` exists; testing'); - - var mocha = new Mocha({ - reporter: 'dot', - ui: 'bdd', - timeout: 999999 - }); - - mocha.addFile(path.resolve(__dirname, "test", "test.js")); - - mocha.run(function (done) { - if (done !== 0) { - console.log('Problem with the binary; manual build incoming'); - console.log('Please consider contributing the release binary to https://github.com/andrew/node-sass-binaries for npm distribution.'); - build(); - } else { - console.log('Binary is fine; exiting'); - } - }); - } catch (ex) { - // Stat failed - build(); - } -} else { - build(); -} - -// Build it -function build() { - cp.spawn( - process.platform === 'win32' ? 'node-gyp.cmd' : 'node-gyp', - ['rebuild'].concat(args), - {customFds: [0, 1, 2]}) - .on('exit', function(err) { - if (err) { - if (err === 127) { - console.error( - 'node-gyp not found! Please upgrade your install of npm! You need at least 1.1.5 (I think) '+ - 'and preferably 1.1.30.' - ); - } else { - console.error('Build failed'); - } - return process.exit(err); - } - afterBuild(); - }); -} - -// Move it to expected location -function afterBuild() { - var targetPath = path.join(__dirname, 'build', debug ? 'Debug' : 'Release', 'binding.node'); - var installPath = path.join(__dirname, 'bin', modPath, 'binding.node'); - - try { - fs.mkdirSync(path.join(__dirname, 'bin', modPath)); - } catch (ex) {} - - try { - fs.statSync(targetPath); - } catch (ex) { - console.error('Build succeeded but target not found'); - process.exit(1); - } - fs.renameSync(targetPath, installPath); - console.log('Installed in `'+ installPath+ '`'); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Makefile b/node_modules/gulp-sass/node_modules/node-sass/build/Makefile deleted file mode 100644 index f40d60f3..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Makefile +++ /dev/null @@ -1,350 +0,0 @@ -# We borrow heavily from the kernel build setup, though we are simpler since -# we don't have Kconfig tweaking settings on us. - -# The implicit make rules have it looking for RCS files, among other things. -# We instead explicitly write all the rules we care about. -# It's even quicker (saves ~200ms) to pass -r on the command line. -MAKEFLAGS=-r - -# The source directory tree. -srcdir := .. -abs_srcdir := $(abspath $(srcdir)) - -# The name of the builddir. -builddir_name ?= . - -# The V=1 flag on command line makes us verbosely print command lines. -ifdef V - quiet= -else - quiet=quiet_ -endif - -# Specify BUILDTYPE=Release on the command line for a release build. -BUILDTYPE ?= Release - -# Directory all our build output goes into. -# Note that this must be two directories beneath src/ for unit tests to pass, -# as they reach into the src/ directory for data with relative paths. -builddir ?= $(builddir_name)/$(BUILDTYPE) -abs_builddir := $(abspath $(builddir)) -depsdir := $(builddir)/.deps - -# Object output directory. -obj := $(builddir)/obj -abs_obj := $(abspath $(obj)) - -# We build up a list of every single one of the targets so we can slurp in the -# generated dependency rule Makefiles in one pass. -all_deps := - - - -CC.target ?= $(CC) -CFLAGS.target ?= $(CFLAGS) -CXX.target ?= $(CXX) -CXXFLAGS.target ?= $(CXXFLAGS) -LINK.target ?= $(LINK) -LDFLAGS.target ?= $(LDFLAGS) -AR.target ?= $(AR) - -# C++ apps need to be linked with g++. -# -# Note: flock is used to seralize linking. Linking is a memory-intensive -# process so running parallel links can often lead to thrashing. To disable -# the serialization, override LINK via an envrionment variable as follows: -# -# export LINK=g++ -# -# This will allow make to invoke N linker processes as specified in -jN. -LINK ?= ./gyp-mac-tool flock $(builddir)/linker.lock $(CXX.target) - -# TODO(evan): move all cross-compilation logic to gyp-time so we don't need -# to replicate this environment fallback in make as well. -CC.host ?= gcc -CFLAGS.host ?= -CXX.host ?= g++ -CXXFLAGS.host ?= -LINK.host ?= $(CXX.host) -LDFLAGS.host ?= -AR.host ?= ar - -# Define a dir function that can handle spaces. -# http://www.gnu.org/software/make/manual/make.html#Syntax-of-Functions -# "leading spaces cannot appear in the text of the first argument as written. -# These characters can be put into the argument value by variable substitution." -empty := -space := $(empty) $(empty) - -# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces -replace_spaces = $(subst $(space),?,$1) -unreplace_spaces = $(subst ?,$(space),$1) -dirx = $(call unreplace_spaces,$(dir $(call replace_spaces,$1))) - -# Flags to make gcc output dependency info. Note that you need to be -# careful here to use the flags that ccache and distcc can understand. -# We write to a dep file on the side first and then rename at the end -# so we can't end up with a broken dep file. -depfile = $(depsdir)/$(call replace_spaces,$@).d -DEPFLAGS = -MMD -MF $(depfile).raw - -# We have to fixup the deps output in a few ways. -# (1) the file output should mention the proper .o file. -# ccache or distcc lose the path to the target, so we convert a rule of -# the form: -# foobar.o: DEP1 DEP2 -# into -# path/to/foobar.o: DEP1 DEP2 -# (2) we want missing files not to cause us to fail to build. -# We want to rewrite -# foobar.o: DEP1 DEP2 \ -# DEP3 -# to -# DEP1: -# DEP2: -# DEP3: -# so if the files are missing, they're just considered phony rules. -# We have to do some pretty insane escaping to get those backslashes -# and dollar signs past make, the shell, and sed at the same time. -# Doesn't work with spaces, but that's fine: .d files have spaces in -# their names replaced with other characters. -define fixup_dep -# The depfile may not exist if the input file didn't have any #includes. -touch $(depfile).raw -# Fixup path as in (1). -sed -e "s|^$(notdir $@)|$@|" $(depfile).raw >> $(depfile) -# Add extra rules as in (2). -# We remove slashes and replace spaces with new lines; -# remove blank lines; -# delete the first line and append a colon to the remaining lines. -sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\ - grep -v '^$$' |\ - sed -e 1d -e 's|$$|:|' \ - >> $(depfile) -rm $(depfile).raw -endef - -# Command definitions: -# - cmd_foo is the actual command to run; -# - quiet_cmd_foo is the brief-output summary of the command. - -quiet_cmd_cc = CC($(TOOLSET)) $@ -cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $@ $< - -quiet_cmd_cxx = CXX($(TOOLSET)) $@ -cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< - -quiet_cmd_objc = CXX($(TOOLSET)) $@ -cmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< - -quiet_cmd_objcxx = CXX($(TOOLSET)) $@ -cmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# Commands for precompiled header files. -quiet_cmd_pch_c = CXX($(TOOLSET)) $@ -cmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_cc = CXX($(TOOLSET)) $@ -cmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_m = CXX($(TOOLSET)) $@ -cmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< -quiet_cmd_pch_mm = CXX($(TOOLSET)) $@ -cmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# gyp-mac-tool is written next to the root Makefile by gyp. -# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd -# already. -quiet_cmd_mac_tool = MACTOOL $(4) $< -cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@" - -quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@ -cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4) - -quiet_cmd_infoplist = INFOPLIST $@ -cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@" - -quiet_cmd_touch = TOUCH $@ -cmd_touch = touch $@ - -quiet_cmd_copy = COPY $@ -# send stderr to /dev/null to ignore messages when linking directories. -cmd_copy = rm -rf "$@" && cp -af "$<" "$@" - -quiet_cmd_alink = LIBTOOL-STATIC $@ -cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^) - -quiet_cmd_link = LINK($(TOOLSET)) $@ -cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) - -quiet_cmd_solink = SOLINK($(TOOLSET)) $@ -cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) - -quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ -cmd_solink_module = $(LINK.$(TOOLSET)) -bundle $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) - - -# Define an escape_quotes function to escape single quotes. -# This allows us to handle quotes properly as long as we always use -# use single quotes and escape_quotes. -escape_quotes = $(subst ','\'',$(1)) -# This comment is here just to include a ' to unconfuse syntax highlighting. -# Define an escape_vars function to escape '$' variable syntax. -# This allows us to read/write command lines with shell variables (e.g. -# $LD_LIBRARY_PATH), without triggering make substitution. -escape_vars = $(subst $$,$$$$,$(1)) -# Helper that expands to a shell command to echo a string exactly as it is in -# make. This uses printf instead of echo because printf's behaviour with respect -# to escape sequences is more portable than echo's across different shells -# (e.g., dash, bash). -exact_echo = printf '%s\n' '$(call escape_quotes,$(1))' - -# Helper to compare the command we're about to run against the command -# we logged the last time we ran the command. Produces an empty -# string (false) when the commands match. -# Tricky point: Make has no string-equality test function. -# The kernel uses the following, but it seems like it would have false -# positives, where one string reordered its arguments. -# arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \ -# $(filter-out $(cmd_$@), $(cmd_$(1)))) -# We instead substitute each for the empty string into the other, and -# say they're equal if both substitutions produce the empty string. -# .d files contain ? instead of spaces, take that into account. -command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ - $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1)))) - -# Helper that is non-empty when a prerequisite changes. -# Normally make does this implicitly, but we force rules to always run -# so we can check their command lines. -# $? -- new prerequisites -# $| -- order-only dependencies -prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) - -# Helper that executes all postbuilds until one fails. -define do_postbuilds - @E=0;\ - for p in $(POSTBUILDS); do\ - eval $$p;\ - E=$$?;\ - if [ $$E -ne 0 ]; then\ - break;\ - fi;\ - done;\ - if [ $$E -ne 0 ]; then\ - rm -rf "$@";\ - exit $$E;\ - fi -endef - -# do_cmd: run a command via the above cmd_foo names, if necessary. -# Should always run for a given target to handle command-line changes. -# Second argument, if non-zero, makes it do asm/C/C++ dependency munging. -# Third argument, if non-zero, makes it do POSTBUILDS processing. -# Note: We intentionally do NOT call dirx for depfile, since it contains ? for -# spaces already and dirx strips the ? characters. -define do_cmd -$(if $(or $(command_changed),$(prereq_changed)), - @$(call exact_echo, $($(quiet)cmd_$(1))) - @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" - $(if $(findstring flock,$(word 2,$(cmd_$1))), - @$(cmd_$(1)) - @echo " $(quiet_cmd_$(1)): Finished", - @$(cmd_$(1)) - ) - @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile) - @$(if $(2),$(fixup_dep)) - $(if $(and $(3), $(POSTBUILDS)), - $(call do_postbuilds) - ) -) -endef - -# Declare the "all" target first so it is the default, -# even though we don't have the deps yet. -.PHONY: all -all: - -# make looks for ways to re-generate included makefiles, but in our case, we -# don't have a direct way. Explicitly telling make that it has nothing to do -# for them makes it go faster. -%.d: ; - -# Use FORCE_DO_CMD to force a target to run. Should be coupled with -# do_cmd. -.PHONY: FORCE_DO_CMD -FORCE_DO_CMD: - -TOOLSET := target -# Suffix rules, putting all outputs into $(obj). -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# Try building from generated source, too. -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - -$(obj).$(TOOLSET)/%.o: $(obj)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - - -ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ - $(findstring $(join ^,$(prefix)),\ - $(join ^,binding.target.mk)))),) - include binding.target.mk -endif - -quiet_cmd_regen_makefile = ACTION Regenerating $@ -cmd_regen_makefile = cd $(srcdir); /usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py -fmake --ignore-environment "--toplevel-dir=." -I/Users/tmshv/Work/www.hudozka.su/node_modules/gulp-sass/node_modules/node-sass/build/config.gypi -I/usr/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/Users/tmshv/.node-gyp/0.11.11/common.gypi "--depth=." "-Goutput_dir=." "--generator-output=build" "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/Users/tmshv/.node-gyp/0.11.11" "-Dmodule_root_dir=/Users/tmshv/Work/www.hudozka.su/node_modules/gulp-sass/node_modules/node-sass" binding.gyp -Makefile: $(srcdir)/../../../../../../.node-gyp/0.11.11/common.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp $(srcdir)/../../../../../../../../usr/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi - $(call do_cmd,regen_makefile) - -# "all" is a concatenation of the "all" targets from all the included -# sub-makefiles. This is just here to clarify. -all: - -# Add in dependency-tracking rules. $(all_deps) is the list of every single -# target in our tree. Only consider the ones with .d (dependency) info: -d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d)) -ifneq ($(d_files),) - include $(d_files) -endif diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/binding.node.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/binding.node.d deleted file mode 100644 index 6bc3ebf1..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/binding.node.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/binding.node := ./gyp-mac-tool flock ./Release/linker.lock c++ -bundle -Wl,-search_paths_first -mmacosx-version-min=10.7 -arch x86_64 -L./Release -o Release/binding.node Release/obj.target/binding/binding.o Release/obj.target/binding/sass_context_wrapper.o Release/obj.target/binding/libsass/ast.o Release/obj.target/binding/libsass/base64vlq.o Release/obj.target/binding/libsass/bind.o Release/obj.target/binding/libsass/constants.o Release/obj.target/binding/libsass/context.o Release/obj.target/binding/libsass/contextualize.o Release/obj.target/binding/libsass/copy_c_str.o Release/obj.target/binding/libsass/error_handling.o Release/obj.target/binding/libsass/eval.o Release/obj.target/binding/libsass/expand.o Release/obj.target/binding/libsass/extend.o Release/obj.target/binding/libsass/file.o Release/obj.target/binding/libsass/functions.o Release/obj.target/binding/libsass/inspect.o Release/obj.target/binding/libsass/output_compressed.o Release/obj.target/binding/libsass/output_nested.o Release/obj.target/binding/libsass/parser.o Release/obj.target/binding/libsass/prelexer.o Release/obj.target/binding/libsass/sass.o Release/obj.target/binding/libsass/sass_interface.o Release/obj.target/binding/libsass/source_map.o Release/obj.target/binding/libsass/to_c.o Release/obj.target/binding/libsass/to_string.o Release/obj.target/binding/libsass/units.o -undefined dynamic_lookup diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/binding.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/binding.o.d deleted file mode 100644 index da98b91e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/binding.o.d +++ /dev/null @@ -1,34 +0,0 @@ -cmd_Release/obj.target/binding/binding.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/binding.o.d.raw -c -o Release/obj.target/binding/binding.o ../binding.cpp -Release/obj.target/binding/binding.o: ../binding.cpp \ - ../node_modules/nan/nan.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv-errno.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv-unix.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv-darwin.h \ - /Users/tmshv/.node-gyp/0.11.11/src/node.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/v8/include/v8.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/v8/include/v8stdint.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/v8/include/v8config.h \ - /Users/tmshv/.node-gyp/0.11.11/src/node_version.h \ - /Users/tmshv/.node-gyp/0.11.11/src/node_buffer.h \ - /Users/tmshv/.node-gyp/0.11.11/src/smalloc.h \ - /Users/tmshv/.node-gyp/0.11.11/src/node_object_wrap.h \ - ../sass_context_wrapper.h ../libsass/sass_interface.h \ - ../libsass/sass.h -../binding.cpp: -../node_modules/nan/nan.h: -/Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv.h: -/Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv-errno.h: -/Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv-unix.h: -/Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv-darwin.h: -/Users/tmshv/.node-gyp/0.11.11/src/node.h: -/Users/tmshv/.node-gyp/0.11.11/deps/v8/include/v8.h: -/Users/tmshv/.node-gyp/0.11.11/deps/v8/include/v8stdint.h: -/Users/tmshv/.node-gyp/0.11.11/deps/v8/include/v8config.h: -/Users/tmshv/.node-gyp/0.11.11/src/node_version.h: -/Users/tmshv/.node-gyp/0.11.11/src/node_buffer.h: -/Users/tmshv/.node-gyp/0.11.11/src/smalloc.h: -/Users/tmshv/.node-gyp/0.11.11/src/node_object_wrap.h: -../sass_context_wrapper.h: -../libsass/sass_interface.h: -../libsass/sass.h: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/ast.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/ast.o.d deleted file mode 100644 index 329dc265..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/ast.o.d +++ /dev/null @@ -1,28 +0,0 @@ -cmd_Release/obj.target/binding/libsass/ast.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/ast.o.d.raw -c -o Release/obj.target/binding/libsass/ast.o ../libsass/ast.cpp -Release/obj.target/binding/libsass/ast.o: ../libsass/ast.cpp \ - ../libsass/ast.hpp ../libsass/operation.hpp \ - ../libsass/ast_fwd_decl.hpp ../libsass/token.hpp \ - ../libsass/environment.hpp ../libsass/ast_def_macros.hpp \ - ../libsass/sass.h ../libsass/units.hpp ../libsass/error_handling.hpp \ - ../libsass/position.hpp ../libsass/context.hpp \ - ../libsass/kwd_arg_macros.hpp ../libsass/memory_manager.hpp \ - ../libsass/source_map.hpp ../libsass/mapping.hpp \ - ../libsass/base64vlq.hpp ../libsass/to_string.hpp -../libsass/ast.cpp: -../libsass/ast.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/token.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/position.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/base64vlq.hpp: -../libsass/to_string.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/base64vlq.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/base64vlq.o.d deleted file mode 100644 index 55a1d72b..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/base64vlq.o.d +++ /dev/null @@ -1,5 +0,0 @@ -cmd_Release/obj.target/binding/libsass/base64vlq.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/base64vlq.o.d.raw -c -o Release/obj.target/binding/libsass/base64vlq.o ../libsass/base64vlq.cpp -Release/obj.target/binding/libsass/base64vlq.o: ../libsass/base64vlq.cpp \ - ../libsass/base64vlq.hpp -../libsass/base64vlq.cpp: -../libsass/base64vlq.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/bind.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/bind.o.d deleted file mode 100644 index dca32858..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/bind.o.d +++ /dev/null @@ -1,31 +0,0 @@ -cmd_Release/obj.target/binding/libsass/bind.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/bind.o.d.raw -c -o Release/obj.target/binding/libsass/bind.o ../libsass/bind.cpp -Release/obj.target/binding/libsass/bind.o: ../libsass/bind.cpp \ - ../libsass/bind.hpp ../libsass/environment.hpp \ - ../libsass/ast_def_macros.hpp ../libsass/ast.hpp \ - ../libsass/operation.hpp ../libsass/ast_fwd_decl.hpp \ - ../libsass/token.hpp ../libsass/sass.h ../libsass/units.hpp \ - ../libsass/error_handling.hpp ../libsass/position.hpp \ - ../libsass/context.hpp ../libsass/kwd_arg_macros.hpp \ - ../libsass/memory_manager.hpp ../libsass/source_map.hpp \ - ../libsass/mapping.hpp ../libsass/base64vlq.hpp ../libsass/eval.hpp \ - ../libsass/to_string.hpp -../libsass/bind.cpp: -../libsass/bind.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/ast.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/token.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/position.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/base64vlq.hpp: -../libsass/eval.hpp: -../libsass/to_string.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/constants.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/constants.o.d deleted file mode 100644 index 5db7b15d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/constants.o.d +++ /dev/null @@ -1,5 +0,0 @@ -cmd_Release/obj.target/binding/libsass/constants.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/constants.o.d.raw -c -o Release/obj.target/binding/libsass/constants.o ../libsass/constants.cpp -Release/obj.target/binding/libsass/constants.o: ../libsass/constants.cpp \ - ../libsass/constants.hpp -../libsass/constants.cpp: -../libsass/constants.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/context.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/context.o.d deleted file mode 100644 index b988541f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/context.o.d +++ /dev/null @@ -1,48 +0,0 @@ -cmd_Release/obj.target/binding/libsass/context.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/context.o.d.raw -c -o Release/obj.target/binding/libsass/context.o ../libsass/context.cpp -Release/obj.target/binding/libsass/context.o: ../libsass/context.cpp \ - ../libsass/context.hpp ../libsass/kwd_arg_macros.hpp \ - ../libsass/memory_manager.hpp ../libsass/environment.hpp \ - ../libsass/ast_def_macros.hpp ../libsass/source_map.hpp \ - ../libsass/mapping.hpp ../libsass/position.hpp ../libsass/ast.hpp \ - ../libsass/operation.hpp ../libsass/ast_fwd_decl.hpp \ - ../libsass/token.hpp ../libsass/sass.h ../libsass/units.hpp \ - ../libsass/error_handling.hpp ../libsass/base64vlq.hpp \ - ../libsass/constants.hpp ../libsass/parser.hpp ../libsass/prelexer.hpp \ - ../libsass/file.hpp ../libsass/inspect.hpp \ - ../libsass/output_nested.hpp ../libsass/output_compressed.hpp \ - ../libsass/expand.hpp ../libsass/eval.hpp ../libsass/contextualize.hpp \ - ../libsass/extend.hpp ../libsass/copy_c_str.hpp \ - ../libsass/color_names.hpp ../libsass/functions.hpp \ - ../libsass/backtrace.hpp -../libsass/context.cpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/position.hpp: -../libsass/ast.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/token.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/base64vlq.hpp: -../libsass/constants.hpp: -../libsass/parser.hpp: -../libsass/prelexer.hpp: -../libsass/file.hpp: -../libsass/inspect.hpp: -../libsass/output_nested.hpp: -../libsass/output_compressed.hpp: -../libsass/expand.hpp: -../libsass/eval.hpp: -../libsass/contextualize.hpp: -../libsass/extend.hpp: -../libsass/copy_c_str.hpp: -../libsass/color_names.hpp: -../libsass/functions.hpp: -../libsass/backtrace.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/contextualize.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/contextualize.o.d deleted file mode 100644 index 8eb0ddfe..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/contextualize.o.d +++ /dev/null @@ -1,35 +0,0 @@ -cmd_Release/obj.target/binding/libsass/contextualize.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/contextualize.o.d.raw -c -o Release/obj.target/binding/libsass/contextualize.o ../libsass/contextualize.cpp -Release/obj.target/binding/libsass/contextualize.o: \ - ../libsass/contextualize.cpp ../libsass/contextualize.hpp \ - ../libsass/environment.hpp ../libsass/ast_def_macros.hpp \ - ../libsass/operation.hpp ../libsass/ast_fwd_decl.hpp \ - ../libsass/ast.hpp ../libsass/token.hpp ../libsass/sass.h \ - ../libsass/units.hpp ../libsass/error_handling.hpp \ - ../libsass/position.hpp ../libsass/eval.hpp ../libsass/backtrace.hpp \ - ../libsass/to_string.hpp ../libsass/parser.hpp ../libsass/prelexer.hpp \ - ../libsass/context.hpp ../libsass/kwd_arg_macros.hpp \ - ../libsass/memory_manager.hpp ../libsass/source_map.hpp \ - ../libsass/mapping.hpp ../libsass/base64vlq.hpp -../libsass/contextualize.cpp: -../libsass/contextualize.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/ast.hpp: -../libsass/token.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/position.hpp: -../libsass/eval.hpp: -../libsass/backtrace.hpp: -../libsass/to_string.hpp: -../libsass/parser.hpp: -../libsass/prelexer.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/base64vlq.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/copy_c_str.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/copy_c_str.o.d deleted file mode 100644 index 07475139..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/copy_c_str.o.d +++ /dev/null @@ -1,4 +0,0 @@ -cmd_Release/obj.target/binding/libsass/copy_c_str.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/copy_c_str.o.d.raw -c -o Release/obj.target/binding/libsass/copy_c_str.o ../libsass/copy_c_str.cpp -Release/obj.target/binding/libsass/copy_c_str.o: \ - ../libsass/copy_c_str.cpp -../libsass/copy_c_str.cpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/error_handling.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/error_handling.o.d deleted file mode 100644 index 28781cf4..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/error_handling.o.d +++ /dev/null @@ -1,10 +0,0 @@ -cmd_Release/obj.target/binding/libsass/error_handling.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/error_handling.o.d.raw -c -o Release/obj.target/binding/libsass/error_handling.o ../libsass/error_handling.cpp -Release/obj.target/binding/libsass/error_handling.o: \ - ../libsass/error_handling.cpp ../libsass/error_handling.hpp \ - ../libsass/position.hpp ../libsass/backtrace.hpp \ - ../libsass/prelexer.hpp -../libsass/error_handling.cpp: -../libsass/error_handling.hpp: -../libsass/position.hpp: -../libsass/backtrace.hpp: -../libsass/prelexer.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/eval.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/eval.o.d deleted file mode 100644 index 2d1d4749..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/eval.o.d +++ /dev/null @@ -1,36 +0,0 @@ -cmd_Release/obj.target/binding/libsass/eval.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/eval.o.d.raw -c -o Release/obj.target/binding/libsass/eval.o ../libsass/eval.cpp -Release/obj.target/binding/libsass/eval.o: ../libsass/eval.cpp \ - ../libsass/eval.hpp ../libsass/operation.hpp \ - ../libsass/ast_fwd_decl.hpp ../libsass/environment.hpp \ - ../libsass/ast_def_macros.hpp ../libsass/sass.h \ - ../libsass/position.hpp ../libsass/ast.hpp ../libsass/token.hpp \ - ../libsass/units.hpp ../libsass/error_handling.hpp ../libsass/bind.hpp \ - ../libsass/to_string.hpp ../libsass/inspect.hpp ../libsass/to_c.hpp \ - ../libsass/context.hpp ../libsass/kwd_arg_macros.hpp \ - ../libsass/memory_manager.hpp ../libsass/source_map.hpp \ - ../libsass/mapping.hpp ../libsass/base64vlq.hpp \ - ../libsass/backtrace.hpp ../libsass/prelexer.hpp -../libsass/eval.cpp: -../libsass/eval.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/sass.h: -../libsass/position.hpp: -../libsass/ast.hpp: -../libsass/token.hpp: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/bind.hpp: -../libsass/to_string.hpp: -../libsass/inspect.hpp: -../libsass/to_c.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/base64vlq.hpp: -../libsass/backtrace.hpp: -../libsass/prelexer.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/expand.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/expand.o.d deleted file mode 100644 index ac44986f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/expand.o.d +++ /dev/null @@ -1,35 +0,0 @@ -cmd_Release/obj.target/binding/libsass/expand.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/expand.o.d.raw -c -o Release/obj.target/binding/libsass/expand.o ../libsass/expand.cpp -Release/obj.target/binding/libsass/expand.o: ../libsass/expand.cpp \ - ../libsass/expand.hpp ../libsass/ast.hpp ../libsass/operation.hpp \ - ../libsass/ast_fwd_decl.hpp ../libsass/token.hpp \ - ../libsass/environment.hpp ../libsass/ast_def_macros.hpp \ - ../libsass/sass.h ../libsass/units.hpp ../libsass/error_handling.hpp \ - ../libsass/position.hpp ../libsass/bind.hpp ../libsass/eval.hpp \ - ../libsass/contextualize.hpp ../libsass/to_string.hpp \ - ../libsass/backtrace.hpp ../libsass/context.hpp \ - ../libsass/kwd_arg_macros.hpp ../libsass/memory_manager.hpp \ - ../libsass/source_map.hpp ../libsass/mapping.hpp \ - ../libsass/base64vlq.hpp -../libsass/expand.cpp: -../libsass/expand.hpp: -../libsass/ast.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/token.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/position.hpp: -../libsass/bind.hpp: -../libsass/eval.hpp: -../libsass/contextualize.hpp: -../libsass/to_string.hpp: -../libsass/backtrace.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/base64vlq.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/extend.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/extend.o.d deleted file mode 100644 index 6fc743ef..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/extend.o.d +++ /dev/null @@ -1,32 +0,0 @@ -cmd_Release/obj.target/binding/libsass/extend.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/extend.o.d.raw -c -o Release/obj.target/binding/libsass/extend.o ../libsass/extend.cpp -Release/obj.target/binding/libsass/extend.o: ../libsass/extend.cpp \ - ../libsass/extend.hpp ../libsass/ast.hpp ../libsass/operation.hpp \ - ../libsass/ast_fwd_decl.hpp ../libsass/token.hpp \ - ../libsass/environment.hpp ../libsass/ast_def_macros.hpp \ - ../libsass/sass.h ../libsass/units.hpp ../libsass/error_handling.hpp \ - ../libsass/position.hpp ../libsass/context.hpp \ - ../libsass/kwd_arg_macros.hpp ../libsass/memory_manager.hpp \ - ../libsass/source_map.hpp ../libsass/mapping.hpp \ - ../libsass/base64vlq.hpp ../libsass/contextualize.hpp \ - ../libsass/to_string.hpp ../libsass/backtrace.hpp -../libsass/extend.cpp: -../libsass/extend.hpp: -../libsass/ast.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/token.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/position.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/base64vlq.hpp: -../libsass/contextualize.hpp: -../libsass/to_string.hpp: -../libsass/backtrace.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/file.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/file.o.d deleted file mode 100644 index 5a966fa0..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/file.o.d +++ /dev/null @@ -1,28 +0,0 @@ -cmd_Release/obj.target/binding/libsass/file.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/file.o.d.raw -c -o Release/obj.target/binding/libsass/file.o ../libsass/file.cpp -Release/obj.target/binding/libsass/file.o: ../libsass/file.cpp \ - ../libsass/file.hpp ../libsass/context.hpp \ - ../libsass/kwd_arg_macros.hpp ../libsass/memory_manager.hpp \ - ../libsass/environment.hpp ../libsass/ast_def_macros.hpp \ - ../libsass/source_map.hpp ../libsass/mapping.hpp \ - ../libsass/position.hpp ../libsass/ast.hpp ../libsass/operation.hpp \ - ../libsass/ast_fwd_decl.hpp ../libsass/token.hpp ../libsass/sass.h \ - ../libsass/units.hpp ../libsass/error_handling.hpp \ - ../libsass/base64vlq.hpp -../libsass/file.cpp: -../libsass/file.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/position.hpp: -../libsass/ast.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/token.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/base64vlq.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/functions.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/functions.o.d deleted file mode 100644 index 54d3d250..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/functions.o.d +++ /dev/null @@ -1,37 +0,0 @@ -cmd_Release/obj.target/binding/libsass/functions.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/functions.o.d.raw -c -o Release/obj.target/binding/libsass/functions.o ../libsass/functions.cpp -Release/obj.target/binding/libsass/functions.o: ../libsass/functions.cpp \ - ../libsass/functions.hpp ../libsass/environment.hpp \ - ../libsass/ast_def_macros.hpp ../libsass/sass.h \ - ../libsass/position.hpp ../libsass/ast.hpp ../libsass/operation.hpp \ - ../libsass/ast_fwd_decl.hpp ../libsass/token.hpp ../libsass/units.hpp \ - ../libsass/error_handling.hpp ../libsass/context.hpp \ - ../libsass/kwd_arg_macros.hpp ../libsass/memory_manager.hpp \ - ../libsass/source_map.hpp ../libsass/mapping.hpp \ - ../libsass/base64vlq.hpp ../libsass/backtrace.hpp \ - ../libsass/parser.hpp ../libsass/prelexer.hpp ../libsass/constants.hpp \ - ../libsass/to_string.hpp ../libsass/inspect.hpp ../libsass/eval.hpp -../libsass/functions.cpp: -../libsass/functions.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/sass.h: -../libsass/position.hpp: -../libsass/ast.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/token.hpp: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/base64vlq.hpp: -../libsass/backtrace.hpp: -../libsass/parser.hpp: -../libsass/prelexer.hpp: -../libsass/constants.hpp: -../libsass/to_string.hpp: -../libsass/inspect.hpp: -../libsass/eval.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/inspect.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/inspect.o.d deleted file mode 100644 index bbc8530b..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/inspect.o.d +++ /dev/null @@ -1,28 +0,0 @@ -cmd_Release/obj.target/binding/libsass/inspect.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/inspect.o.d.raw -c -o Release/obj.target/binding/libsass/inspect.o ../libsass/inspect.cpp -Release/obj.target/binding/libsass/inspect.o: ../libsass/inspect.cpp \ - ../libsass/inspect.hpp ../libsass/operation.hpp \ - ../libsass/ast_fwd_decl.hpp ../libsass/ast.hpp ../libsass/token.hpp \ - ../libsass/environment.hpp ../libsass/ast_def_macros.hpp \ - ../libsass/sass.h ../libsass/units.hpp ../libsass/error_handling.hpp \ - ../libsass/position.hpp ../libsass/context.hpp \ - ../libsass/kwd_arg_macros.hpp ../libsass/memory_manager.hpp \ - ../libsass/source_map.hpp ../libsass/mapping.hpp \ - ../libsass/base64vlq.hpp -../libsass/inspect.cpp: -../libsass/inspect.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/ast.hpp: -../libsass/token.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/position.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/base64vlq.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/output_compressed.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/output_compressed.o.d deleted file mode 100644 index 9de73d8e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/output_compressed.o.d +++ /dev/null @@ -1,30 +0,0 @@ -cmd_Release/obj.target/binding/libsass/output_compressed.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/output_compressed.o.d.raw -c -o Release/obj.target/binding/libsass/output_compressed.o ../libsass/output_compressed.cpp -Release/obj.target/binding/libsass/output_compressed.o: \ - ../libsass/output_compressed.cpp ../libsass/output_compressed.hpp \ - ../libsass/operation.hpp ../libsass/ast_fwd_decl.hpp \ - ../libsass/inspect.hpp ../libsass/ast.hpp ../libsass/token.hpp \ - ../libsass/environment.hpp ../libsass/ast_def_macros.hpp \ - ../libsass/sass.h ../libsass/units.hpp ../libsass/error_handling.hpp \ - ../libsass/position.hpp ../libsass/context.hpp \ - ../libsass/kwd_arg_macros.hpp ../libsass/memory_manager.hpp \ - ../libsass/source_map.hpp ../libsass/mapping.hpp \ - ../libsass/base64vlq.hpp -../libsass/output_compressed.cpp: -../libsass/output_compressed.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/inspect.hpp: -../libsass/ast.hpp: -../libsass/token.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/position.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/base64vlq.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/output_nested.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/output_nested.o.d deleted file mode 100644 index b4a8f19e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/output_nested.o.d +++ /dev/null @@ -1,30 +0,0 @@ -cmd_Release/obj.target/binding/libsass/output_nested.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/output_nested.o.d.raw -c -o Release/obj.target/binding/libsass/output_nested.o ../libsass/output_nested.cpp -Release/obj.target/binding/libsass/output_nested.o: \ - ../libsass/output_nested.cpp ../libsass/output_nested.hpp \ - ../libsass/operation.hpp ../libsass/ast_fwd_decl.hpp \ - ../libsass/inspect.hpp ../libsass/ast.hpp ../libsass/token.hpp \ - ../libsass/environment.hpp ../libsass/ast_def_macros.hpp \ - ../libsass/sass.h ../libsass/units.hpp ../libsass/error_handling.hpp \ - ../libsass/position.hpp ../libsass/context.hpp \ - ../libsass/kwd_arg_macros.hpp ../libsass/memory_manager.hpp \ - ../libsass/source_map.hpp ../libsass/mapping.hpp \ - ../libsass/base64vlq.hpp -../libsass/output_nested.cpp: -../libsass/output_nested.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/inspect.hpp: -../libsass/ast.hpp: -../libsass/token.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/position.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/base64vlq.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/parser.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/parser.o.d deleted file mode 100644 index 673ace9f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/parser.o.d +++ /dev/null @@ -1,34 +0,0 @@ -cmd_Release/obj.target/binding/libsass/parser.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/parser.o.d.raw -c -o Release/obj.target/binding/libsass/parser.o ../libsass/parser.cpp -Release/obj.target/binding/libsass/parser.o: ../libsass/parser.cpp \ - ../libsass/parser.hpp ../libsass/prelexer.hpp ../libsass/token.hpp \ - ../libsass/context.hpp ../libsass/kwd_arg_macros.hpp \ - ../libsass/memory_manager.hpp ../libsass/environment.hpp \ - ../libsass/ast_def_macros.hpp ../libsass/source_map.hpp \ - ../libsass/mapping.hpp ../libsass/position.hpp ../libsass/ast.hpp \ - ../libsass/operation.hpp ../libsass/ast_fwd_decl.hpp ../libsass/sass.h \ - ../libsass/units.hpp ../libsass/error_handling.hpp \ - ../libsass/base64vlq.hpp ../libsass/file.hpp ../libsass/inspect.hpp \ - ../libsass/to_string.hpp ../libsass/constants.hpp -../libsass/parser.cpp: -../libsass/parser.hpp: -../libsass/prelexer.hpp: -../libsass/token.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/position.hpp: -../libsass/ast.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/base64vlq.hpp: -../libsass/file.hpp: -../libsass/inspect.hpp: -../libsass/to_string.hpp: -../libsass/constants.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/prelexer.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/prelexer.o.d deleted file mode 100644 index 99d08076..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/prelexer.o.d +++ /dev/null @@ -1,6 +0,0 @@ -cmd_Release/obj.target/binding/libsass/prelexer.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/prelexer.o.d.raw -c -o Release/obj.target/binding/libsass/prelexer.o ../libsass/prelexer.cpp -Release/obj.target/binding/libsass/prelexer.o: ../libsass/prelexer.cpp \ - ../libsass/constants.hpp ../libsass/prelexer.hpp -../libsass/prelexer.cpp: -../libsass/constants.hpp: -../libsass/prelexer.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/sass.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/sass.o.d deleted file mode 100644 index 4aad6119..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/sass.o.d +++ /dev/null @@ -1,26 +0,0 @@ -cmd_Release/obj.target/binding/libsass/sass.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/sass.o.d.raw -c -o Release/obj.target/binding/libsass/sass.o ../libsass/sass.cpp -Release/obj.target/binding/libsass/sass.o: ../libsass/sass.cpp \ - ../libsass/sass.h ../libsass/context.hpp ../libsass/kwd_arg_macros.hpp \ - ../libsass/memory_manager.hpp ../libsass/environment.hpp \ - ../libsass/ast_def_macros.hpp ../libsass/source_map.hpp \ - ../libsass/mapping.hpp ../libsass/position.hpp ../libsass/ast.hpp \ - ../libsass/operation.hpp ../libsass/ast_fwd_decl.hpp \ - ../libsass/token.hpp ../libsass/units.hpp \ - ../libsass/error_handling.hpp ../libsass/base64vlq.hpp -../libsass/sass.cpp: -../libsass/sass.h: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/position.hpp: -../libsass/ast.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/token.hpp: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/base64vlq.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/sass_interface.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/sass_interface.o.d deleted file mode 100644 index 9eabda02..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/sass_interface.o.d +++ /dev/null @@ -1,28 +0,0 @@ -cmd_Release/obj.target/binding/libsass/sass_interface.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/sass_interface.o.d.raw -c -o Release/obj.target/binding/libsass/sass_interface.o ../libsass/sass_interface.cpp -Release/obj.target/binding/libsass/sass_interface.o: \ - ../libsass/sass_interface.cpp ../libsass/sass_interface.h \ - ../libsass/sass.h ../libsass/context.hpp ../libsass/kwd_arg_macros.hpp \ - ../libsass/memory_manager.hpp ../libsass/environment.hpp \ - ../libsass/ast_def_macros.hpp ../libsass/source_map.hpp \ - ../libsass/mapping.hpp ../libsass/position.hpp ../libsass/ast.hpp \ - ../libsass/operation.hpp ../libsass/ast_fwd_decl.hpp \ - ../libsass/token.hpp ../libsass/units.hpp \ - ../libsass/error_handling.hpp ../libsass/base64vlq.hpp -../libsass/sass_interface.cpp: -../libsass/sass_interface.h: -../libsass/sass.h: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/position.hpp: -../libsass/ast.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/token.hpp: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/base64vlq.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/source_map.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/source_map.o.d deleted file mode 100644 index bbbbb7ee..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/source_map.o.d +++ /dev/null @@ -1,27 +0,0 @@ -cmd_Release/obj.target/binding/libsass/source_map.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/source_map.o.d.raw -c -o Release/obj.target/binding/libsass/source_map.o ../libsass/source_map.cpp -Release/obj.target/binding/libsass/source_map.o: \ - ../libsass/source_map.cpp ../libsass/source_map.hpp \ - ../libsass/mapping.hpp ../libsass/position.hpp ../libsass/ast.hpp \ - ../libsass/operation.hpp ../libsass/ast_fwd_decl.hpp \ - ../libsass/token.hpp ../libsass/environment.hpp \ - ../libsass/ast_def_macros.hpp ../libsass/sass.h ../libsass/units.hpp \ - ../libsass/error_handling.hpp ../libsass/base64vlq.hpp \ - ../libsass/context.hpp ../libsass/kwd_arg_macros.hpp \ - ../libsass/memory_manager.hpp -../libsass/source_map.cpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/position.hpp: -../libsass/ast.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/token.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/base64vlq.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/to_c.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/to_c.o.d deleted file mode 100644 index e38b4a19..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/to_c.o.d +++ /dev/null @@ -1,19 +0,0 @@ -cmd_Release/obj.target/binding/libsass/to_c.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/to_c.o.d.raw -c -o Release/obj.target/binding/libsass/to_c.o ../libsass/to_c.cpp -Release/obj.target/binding/libsass/to_c.o: ../libsass/to_c.cpp \ - ../libsass/to_c.hpp ../libsass/operation.hpp \ - ../libsass/ast_fwd_decl.hpp ../libsass/sass.h ../libsass/ast.hpp \ - ../libsass/token.hpp ../libsass/environment.hpp \ - ../libsass/ast_def_macros.hpp ../libsass/units.hpp \ - ../libsass/error_handling.hpp ../libsass/position.hpp -../libsass/to_c.cpp: -../libsass/to_c.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/sass.h: -../libsass/ast.hpp: -../libsass/token.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/position.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/to_string.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/to_string.o.d deleted file mode 100644 index 7f8d3fee..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/to_string.o.d +++ /dev/null @@ -1,29 +0,0 @@ -cmd_Release/obj.target/binding/libsass/to_string.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/to_string.o.d.raw -c -o Release/obj.target/binding/libsass/to_string.o ../libsass/to_string.cpp -Release/obj.target/binding/libsass/to_string.o: ../libsass/to_string.cpp \ - ../libsass/to_string.hpp ../libsass/operation.hpp \ - ../libsass/ast_fwd_decl.hpp ../libsass/inspect.hpp ../libsass/ast.hpp \ - ../libsass/token.hpp ../libsass/environment.hpp \ - ../libsass/ast_def_macros.hpp ../libsass/sass.h ../libsass/units.hpp \ - ../libsass/error_handling.hpp ../libsass/position.hpp \ - ../libsass/context.hpp ../libsass/kwd_arg_macros.hpp \ - ../libsass/memory_manager.hpp ../libsass/source_map.hpp \ - ../libsass/mapping.hpp ../libsass/base64vlq.hpp -../libsass/to_string.cpp: -../libsass/to_string.hpp: -../libsass/operation.hpp: -../libsass/ast_fwd_decl.hpp: -../libsass/inspect.hpp: -../libsass/ast.hpp: -../libsass/token.hpp: -../libsass/environment.hpp: -../libsass/ast_def_macros.hpp: -../libsass/sass.h: -../libsass/units.hpp: -../libsass/error_handling.hpp: -../libsass/position.hpp: -../libsass/context.hpp: -../libsass/kwd_arg_macros.hpp: -../libsass/memory_manager.hpp: -../libsass/source_map.hpp: -../libsass/mapping.hpp: -../libsass/base64vlq.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/units.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/units.o.d deleted file mode 100644 index e695b198..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/libsass/units.o.d +++ /dev/null @@ -1,5 +0,0 @@ -cmd_Release/obj.target/binding/libsass/units.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/libsass/units.o.d.raw -c -o Release/obj.target/binding/libsass/units.o ../libsass/units.cpp -Release/obj.target/binding/libsass/units.o: ../libsass/units.cpp \ - ../libsass/units.hpp -../libsass/units.cpp: -../libsass/units.hpp: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/sass_context_wrapper.o.d b/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/sass_context_wrapper.o.d deleted file mode 100644 index c7491df6..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/Release/.deps/Release/obj.target/binding/sass_context_wrapper.o.d +++ /dev/null @@ -1,34 +0,0 @@ -cmd_Release/obj.target/binding/sass_context_wrapper.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/tmshv/.node-gyp/0.11.11/src -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include -I../node_modules/nan -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/sass_context_wrapper.o.d.raw -c -o Release/obj.target/binding/sass_context_wrapper.o ../sass_context_wrapper.cpp -Release/obj.target/binding/sass_context_wrapper.o: \ - ../sass_context_wrapper.cpp ../sass_context_wrapper.h \ - ../libsass/sass_interface.h ../libsass/sass.h \ - ../node_modules/nan/nan.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv-errno.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv-unix.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv-darwin.h \ - /Users/tmshv/.node-gyp/0.11.11/src/node.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/v8/include/v8.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/v8/include/v8stdint.h \ - /Users/tmshv/.node-gyp/0.11.11/deps/v8/include/v8config.h \ - /Users/tmshv/.node-gyp/0.11.11/src/node_version.h \ - /Users/tmshv/.node-gyp/0.11.11/src/node_buffer.h \ - /Users/tmshv/.node-gyp/0.11.11/src/smalloc.h \ - /Users/tmshv/.node-gyp/0.11.11/src/node_object_wrap.h -../sass_context_wrapper.cpp: -../sass_context_wrapper.h: -../libsass/sass_interface.h: -../libsass/sass.h: -../node_modules/nan/nan.h: -/Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv.h: -/Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv-errno.h: -/Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv-unix.h: -/Users/tmshv/.node-gyp/0.11.11/deps/uv/include/uv-darwin.h: -/Users/tmshv/.node-gyp/0.11.11/src/node.h: -/Users/tmshv/.node-gyp/0.11.11/deps/v8/include/v8.h: -/Users/tmshv/.node-gyp/0.11.11/deps/v8/include/v8stdint.h: -/Users/tmshv/.node-gyp/0.11.11/deps/v8/include/v8config.h: -/Users/tmshv/.node-gyp/0.11.11/src/node_version.h: -/Users/tmshv/.node-gyp/0.11.11/src/node_buffer.h: -/Users/tmshv/.node-gyp/0.11.11/src/smalloc.h: -/Users/tmshv/.node-gyp/0.11.11/src/node_object_wrap.h: diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/linker.lock b/node_modules/gulp-sass/node_modules/node-sass/build/Release/linker.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/binding.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/binding.o deleted file mode 100644 index 35cfb5b57a15b663cbbc58700a4e112d650cc8d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144412 zcmdpfcX$=m_V%7RIXNeD0?A1Z0Su5p01-l05(ywkOC%sj5vid{7bPeb1O=2BL9t@T zf?@@+Vnsy+E9$j-?G3SDxr&wVeb=5nXU-7r{oU{Re*b)Vp4qea`>wtA+H2P-XY$JL z-~Js@$_gn2IC$<9MNo(Xe~oeMfWX22e*22Klp4xB_}lBInT1Cqg7}*_v3lB~Y8}_< z5&cJxNTyBfqf8w$`g;FhseckmQ%g0Y!-*45oHAwNv_(^<&99zVJ!$g9iK+UGp2O3$ ze5VFV*?t9qxVCS~Nt5PGoJTW*`U>MZ!*#m4YCar8)ou1!ssQKM0rm~Ao>V<^O2xdH zQtP0;tvOm>PkmC^`C4D$Z<hG&!1_*Ju)vk&Y2w6weMa<20><wdNl4n#Bwe#j68Wbr zs6J)pyc1m{Xy0G1eY0GCFzoaH1${Yj;?zmiladla`)1^7uD2`lF!ZsnjYfTW4*pG? zIQOKf6KBGE6Q?hnH|2o(ZgBNwyBYVn`sPC)ZS(tqA`>T0n=x_vDU;?-(;0&Gec08v z&aGIqiMDSk^wD=QrDo`yCjZoFlNX){3#Xq%1ob_>&v64hk<ocN8of`SH#F1dmC$#y zj;6Q}{u6zZCQm+P+NlTXtJ<kE{gkfHn_kstUs$)kQzp$jaoU0d>>IwzmlM&O-%d>< zRj0nWlcq?OgZ2Ht)i-D6JZX`G>3hVjud#34-(G*I)4n+;O_7QO_0@Yz*RQoZj>mtf z(+@*mBRx3k)Hi?O<m%JsPg@Yw*Yzu%zl%FJF59cqzOYVx7<3{M)Hm&Wopb5)`uxDJ zK217Wr#`oN4`|=dx40wT_1_Us>-3_Ct<L*5`ex2!i%dOG-;+9jQCMd_Vuwy|h}mjn zo%$xtpFd~X#CaHT3&02K8+}&i@9pT!qhHeLq4jNb%fHcg(&Smvz(IZGuju?ObzZgh zEuD6gJO%vcvv2;SDM5X6TzzI(Jm%_~pKB}E<T~|9XF*{>ef@T6d%_L1MVGy;(_5i$ zwT=e#O*v^U?5du)aNcP%=S`hBv9h1esl%aP>P+kONv-={kBd%)wyZ~xO3}vz*WxzK zZN)i%?V+|>j<pu^ni`6Of0***;MCOx#}PRG+rN?JHJ_K)M#^hT%UA5LP9MLU3d(C2 zMSaQf&rqt*@qI@18QEvV@bYEf%&1v)*8ctbD{B5xQS(bh&0l?%EzVYFr&rW2jPA*- zsO=98^P}a<w)ZYywRne&ygs%4vj?yEtU7DiKI`nlirT@TpW3&l#j<^N*6OZsN=5Br zK+o;n-9-|Ep`wB^y~}F`Z-vy^4)g-py4RG@n<>!!AFf?NYnE@Vjts7;ZW-N^Hn`^S zmV;}iw#<H#+Z-{VyyltmRSUP4*L*0+ikfjP=Lgw`{p=!EDvia8VIP@d;hJU7^%f;H z{g+cH><PVHr_fRgg($QTdAEOMggh5*&=%H?-(U<VU$w|`?R>7XW`B9j2U=v+VlBJ7 z7WLAOKF}U1N{sf3N)Zx!EYF^O2iUXL*t7OO+oNSGYp3m~toc&st9h<`|8riO40ge1 zpsTXx3rSVfH0!+IjSc8j3pdsbD6H+j6eqOX*=^V>R;)x7>ACc?k8(Y?Yfqp5qzqc9 zEL$r}Kv|<bM+bW3O0A@J{K`72H=t2D>`(gJ6*m32eA%`cWBZKjGrrG+J`=}3vqx3b zY&Tl=v}eLJ(VhaG(hk}a*D0-TPe`YBh$WRZzq-|WPR`zF!&p1#o276=dCeb{wXG0A zo2Ruzmw&swRz^EYdsydPwRovSDr?IsFrHUztxhjrRo-S#w4(M{^tz`?`_*>tzv7qb z3Q$?gpP|y)(VcW&sc`4lwqOwHRw=J}s`J+J6+5$*?-9Yy<+ZZ$b;Y0B{e+k@5VOSA z>ekB^wX_!&LS6Pj)S<F_qQW7jt;<^et~NpA+UIqfU}HikuRXwoH;f6jqxEP!xQ^;J z2j-XhRc9SQtf+z$`gtv){ZN<O49Hc~E?HE*>T+gzf-|<%arXsD%l=dC{wvGoqnOTH z2cr?QDr&o>Hpz-b+MM|?hjK}C&_#65!2FouC3Gt+Osl9xBkIXNEY@ST(XD8*d0kAp zURnRQ7j`K>XWLTLk>fx{fy}LLDSJXX<#tPVy45OcQu{Yok~S4Je<%C09uFd1;R-`r zWlb4|NF@Yo-tD|oSgmi_Guh><8o&}&zN(&_l0$dJ)`ba}t~FxRwi)Z%x=MO-`6_q( zNWMo_Ah&BHmI;%~H69&HI5RG3cX^848+=C5-d{0+bbigX)l3iNwPjpXwVTVI3yHzC zXEySKedYRl*_mxrbwy?E0&jd)*8Jih9GpFjao$9rtLjZArWSiDD{Ie;x|PFX^0!}6 z|IYh4gmcPkJNf$)oNx43)TR%H)%g{*S>-k5jo=(zS-7;^xU{xBd(S7j*|iaSV#a40 zb+Z_g>+t9QtRI{i^*Vy=mwj&kf7ci8{NLycNpp>357Hglq;!Wi>?F(1EY;n?o9F(& z?hf2y>SYgOOj?-Tan<9TWzl_gPu8QjGe(6s%Jd+usM+R@ZOml;t}YYFmu6+xW3;m7 z6O&!*Pj)CNbMeyu#RA<4Gg-sM>;5-OTNkX`*8k1Yw(4f8YoU;a6nYPK@4D6WG_h2p zZBtQg_?|>6>K0JPlv1wyhQ5^9f6a?l=oz`_+QPBKKSnt1AIB+pI}YB%Y|I32I(W=y zE|X6t2P%f+EO|~wf_d7IS&774!&uk_km*LI5fYCX<|8C{ldB(@eQrXu@m_9Qfb!Q4 ziLQuE$Jv^Iz}zsCyIM-^zvk1WDm0d|rINvo@G}2NXjQXu9D>NbOssIr5oR?KtpUp4 z{YdcA_HCT47ZAuYN=kf%aw<Z7nC#Dhe~cWDV-pkC;&88wmEtWkR&5&&ixob=<~NtZ z=pkTKAp`yu;-E@uQqyqA%E!cF9K1y<%ngW8H%qlPAUHtxUKN@FJXP}w0Eb%$*5ioc zXvW0dILdJd^Djh-amZhD&@84HXRE|blrzyA!2x9+q&^kUu#Wm>;_&Ko4ic=-IvjE@ zkp<n4!@3K>0lMp~&q_$rEVTg#>qCRZDXfn$`w;Q!(-Jg`>4>w{-AxQ)qA!92%6#%1 z6?zbaPXkpA!|^F$Hp!tl<nI=Q$Kd#r%y&3i;*dWM5;8gHPih<z9<$VC+K_o3i6)W( z!52tm;`}qt)_w#u+hMP4fPe|yAyHO4H_?NM!x0=%2lUtGkY<jDambLGg!4^Itj6In z>=R6E!eQNmAkg=Lcz@jUeZ`an{v9B8EN}MVPVbN4{<XX|)cHMbt6E%89$Wfx*3#c> z>_t;|SeWo+rz~pCX0+zHN8kYEzYhDbyk@(Wsd>gdn;DZ=sr_nxudMmORbsZSzRfOg zdKkElsgn0}++FyuSZphvle>?>`lOccZk!LWwW78mwl*-=T~RA)dsXVIM($`bMTse3 z#e3EDeYZ6#YH+P;%&gn`)E%W;75IuRGJL3OVVDh7zN)F5Om$rwYNe6kGHhI<WA);2 z+_ZU9r=6lYbm%x4x9sq6rNfl@^VI@82wJ$HuxHQ0PD)D*m^o*fIz<cX)9};rj6+9# zB%{K(>eQ4;bLLE*GzD{VecJT@@Gs%&vd%b8S&Oo*?952?VssvkIF7A0-(a_dKX1bC zQ$PDWyKg;dU{{7JtTTpIiiXHFX-H-pJ%=MfUFoi#d02}07u~o|D>nKDFN<85zAC&r z?IMw29!}gl{?uY#y^TDT;E(#3<4An3<+wcZFIw<hs{SF%(l7M1>-p(1$errye^GKF z-?4#w70V<Sr?GEvT=;`lD^ml~(b)%=ZvsCie$?_qIUp&2<-z4EA#?aoTAsG?FZ$lW z<<ElrR#$$w(I5Fewcf7%^wV9C`SfQ^_cMMP6p#=2iS5u5vfuxr^SO^va7Qh*AJ9LU zko)luE%yx4{EKc3=y&a*-m@UT()GVwOf!Sgd-O8t2Wi+8Xj7w7!!&girF?%w5V!0` zeev8b?Q_W3Bf@XuWQDIqJ}dl=g#Dq+O0S<r(J7$_BlfhAWrd<wO$4S?_!7+IR`@xF z>3=Y^cZW0HIude4;M0n*owF|tH^a#a&%qpEg_lTp0q&Yx;WVsjR=7Jum3~$(PWJEN zjB1$1>`vHGswoaToW6nOSyuFZDc5NOv_F|xkQoYeHkq9COH%VJ1bPjbMnPsH(C5jN zrD}`401Yt~oeY%o6(nOZNcRp%f0807S(MWOl0zunKOp^`C;gL&sm$?^TtMl;=?|Am zjh)jCG{iu$^6Bu9a}9{wFz4FCgY|hB%)8VwI>>wtv`r?MP3ebJ`8*mcKuXo?hE~56 zbkrV`UVi{0>44c3R@Q0EH7?z<v)K+5jK-)zMVP^!m~L6Ni)7yeq!0VliIlg&93Vd% z@*yoBYrwMOpCD6$-DOUY%2^Fw<<1A0X8##Z6tg!adLmSbV+kfEFjUUzIIYKFKa}3G z%2zuTeiEqVyooS^DbapBeMAZ`72gFWYG0L}L1S6ztk#rWXX@M$gCTkt^Qi`X!JJC= zru42rY&#pH!V-y6EpaB;O_aDLy`PpyOO=SQJo{Gho7SqFZve%z06&?28r4`<?2~B< zZJiBp8zT00uM@Cbw~rla*cUu@LXzzTb}W_t!()AUr-8YZ><1pp?iCY}VHohbjNGpv zlV-n@p4g0tN^C`FCH}#T%J~JS?%9Zbma1b0jY#TnDj>6pa(hzc#8{u)wUBw1a{uz= z#+5)71LeF3CLI&1z29Tm+RDiRIGBVJF++bY2rH)PF`y)0BI1s%*eR0lDwD4ukWbU^ zfc_na-7=L{j)S*8I^eJm^)z;cMz>XZ8MeL0CR-&w8SFOZT@>L+ka;b}F&TRu-A~0o z2iF-hqJ4&smx{!P06vA(nWS_NN$>SIwh#8uNZyf%aBi_rh@caP@@BQbWed||kdB5L zQqVpQIWe1N-a_~6JPHLyDu|CDu3<dqe*{pU1mKYoYV;Uqq#;H{SYhVLqblW8gOP53 ze8f!Inu$oc<E1jX*nH$r@wLbx!+t`LQjJ-DKWv#^$6+0^XS-NZxS0j1@aHhh%5C0= z-SWjqVn45k6KP0ViFyd_L>?&>{^1Zn`Cr4#I9__OKZ}Ih;B4hPla%U9WOpR@Qk*fh zL=s~VQHjYENSs76v6z$!_h|wse6@sc7cf4e5Mh(c@S;l8el0HpBc%u$?I9Mu-gFt; z=Pf#>4NyxprJ(&OfM%D%@C!g|CN?92A`5N@{VenBHC?xh<STp?#9k8rN-8V(1z;W< z=2w<ULQ5Akf@#uXzoimRcM#i9kln#zfyg4Oh%VikW7y8AY!7Hx4W%wUkR{~SCPwAT zX<q2+taNjQv`%50kHtD~zlL1K1<gf|4~g}mnw%$(K+viyg2}K<+%pE6Rr>D;+t{5# z8I<6JocAq|TdI&aCS(^Ch9Z=(yKw4_4x%IU${5LN4!CO)R!%D*RYd!Qn4cp~XJATc zJ^hivz$2ke#ZN>I>6-(Blyf1Kq089=L&Xr~IP6DN@w-7BMxvZ~Vk9-A(kB<Pubg0I zumxD3$T%SOSn<&Sl!(QYGWIwk$$lbK>@w`GT>hlGc<D#ZsmL$wyx3v}2>RMtYd;TQ zD5zbx==~=56>e^Si?;ZJww=JTt*ACPXInI-0SC20@;=y^Y|35mhf2SvC98f|M&50R z(C2o)433is3A<eeR5s(TQO3nYx*|3cp^85Xem`Y8*CjJgWa^{TKj`wVl!@x>97ZaB zxS<aBQ41v3BtsqHqs|cOB13iaQ9EI^ia!AALmYN#l2Y+6fi!Fl^hiJ2638f`-F>Jt z4ahLos7D4DTF+wTTnc78<&Vy|0fn(QN?laLH;MLz7K}h$J^E0!_=Naj)b8S{g^2ng z?MU&i9#$g`<-O5kGm2hoj^Tz1+heIA0)<5%7^n&m*CAE3$3T+^S%iKw&}2dsD{6>U zMs!Ufgq@NqI?O;*38fJ_+(6R^g$eaB&~!rSfbxa|l0GtreZ<b2Y|?X)j@ro;Z64Cu zcHSxA+1&O?NGEJ(1=4caFf7BYL1QMtpUQa{%ojN9<1+g7(Y_bPU9o=v)v^fm@C<kG zMBR+-fQ}<GBBQ30FQalM0lkdO$RKkK(6`Bq$}n@ftL-bGaxHaysu{{@jE*6lW3<;f z+&tsJtYx=3A>$%kfUw0i6ZxK<U<SPxUBPO`=sO+ArHhP&oLk}9oVyStdqVy-5U)mW zurJ9-U)L5{?W-cmtFMkg2H>!-iEzZQ#4S84rxNHksIsq(%)<#xOvaQ`Wr*uMLN=3{ zJqN7pZm*9#p%v=AON3?H>ty|ZMoNg^21K?vHxkuiD*Yp%GJ)>I7BD!0?vR`j%D59K zx2!Uu2o-w+n`@<cJ%I*zDpk%;$S-wUY%v4tCRGqt=hhQwAoo5LubfWp+}u~Vx!nm= z*pvxWo7+NG0C!H+X1+#6|6yWf*?MB_f(6F1H$*Zz!&th+dBIfRj)<wi8DiTc*tQIZ zeWyq4tfJAE8l&&>2<Fg>sq=uzcDKheo6CL%RyxT&kq?lEo#Z>7u^WeF(%Ks%tUVnm z*D?{BY~L%b{ga5sy91Hd-t24b@U`uctI0%gW`jjN2X3(b5+zM3s5e+%%Lo&bmMd5Q zI(35;nM^wiuLhCaU}<FqPXN>#EZ6p^mM-`Zgx+AK5{`nk(r-FgEHJg-IGqjKIhBpW zhSUv~wwcP6^Qp;I>E`nHCjWLyXUe0p;C3q6RnF`Hv+TXT`zu3$NaOt&HZxSAIK`O` zMr!j@cp@%DSR0u}RCsGgB%3S)Z(5}lvK-hdZADR23hGwLg&rA=!o;Xn6<i5AwN(z6 ze1%VdNVbYrR`3Zx-6|}TeN9UjgkY3zl~lrM3Bqj^Qx6%<Qo1wJu$`?GwimRgwu-iy z%9Rtr0w6jo-CS;~2<vYZovAM~`FF#*GQoDDd-VEzB=i^B>qB`CMl!F>><6&h#g$xR zrqQ?T2a%43@*2P$l70y3>`-2Nq*)L9VWb;{B2;AGhHa=7EvLWaLQjT+4zv>nKxz&p zH-%UjrH`XDZl?fUPv+i`+ocWjFwif^Yz{Ji0PWNn%zYu(rEVUTJ{PcMug%EdE|F7J z%NDqdkxj$vSiLN#8<OJK>&^13r`}feF_Un;c9-cDShCi0*}B<Va@Wfo;M{ANTT&Ux z7`sCT)o#e-w?Xdp-r~EFxwUs>#T3DKA%uoe@K#zE)k69f#0h|_N!^xVeCAqk7SMHM zHU^nZKwl^GK#=(asB;*YN4@=utF0N(axz<k%mkokl6ltKT)25w09{Y!`CvKs0)2_h zD?x2<0{xxLs~L~tT9egvwN;|gWEOudqljMeW^uNr{U$sU(w<TAQ-R1V{uWVp%?{t! z1-Y8U(X?j1NI=hl^F?E7S4}CX=Zi`V8<{VJiCx6ktn0dp*0fyx6kH1vQm2z~(v=Ih zf=Es$x~zha0qW_5Cb805x?n#DJ)NWyPE%CIola;Ey&=<y80QQ!Y-cNloz58`<tkd+ zOy$b?+2pEpbGg%ru>R>pXPQlA{^>+lCODnYdwPfP4X&(Z)3lL$(ZE&bd~r{NGVZ3S zeGAv^Ld6{1L{Xa8o2CFyrOJsO?)qi1#SETbG<&RJuW(tnhF?!X-jp4XF7pglF=ex) z&HN9WB3h=a{0#0FSa$vT8T5i|ip~Kd4VPWNn)idyaAI48qIPb5cH<@D3l*MF0)ZxP zfG|CFIhX@`Y>mh_rJ(Myf1&EqV}*(JX^hefegd7^B`=kHg{`{zyQEfDFan_Nk}Q*5 zQcD*s1);lSD&gD(!tIhQ&~v?%?tEp~&Q=P09ki!*No_NgD`yKlAUZ4ETyBF28|-PU zwO+V>K{n}WEGpR3ZjxF@DC71t&s{>r*e*)*x~BzrU7_4kucw)Ylo6=ev4*|E(rk+1 z|NdqLi<9mX{%3b~fSI@*VLHHVF#f;}aF<l6DFt;0c(<wB0fdPiozD)i9CT_2cu?{c z-UlK%CuwB`9|F`JfMv1+Xz79|jM5z-m2f(Pa614C^g4i)?#wc5XDfx>3hk*KK-)~^ z%IQ+(bpV~q^`o%C4!~OL4)8UyNe5u2U<Y_sYVFK1sux=ec{kNeq0FM3dkuSq%lZpW znG&?R|1c%cG-*@0|69Kotm>Yb{}C){%Xr_+@Bo~x{6B!qATlH~yiAZh%uVZwjLr-{ zEl4qtPl!y)%<qZ#cifrH%*-E-cxG?JPsz-mig;Vb&&teSi1<Lp&&$kb-sy~Al$qQ4 zXx?kSA~W$zABEeC7LryX6QP}Gh%l6BMFEw68S?ZXd~;_0eTW~&_}!W5dvUhx>Gd*} z768C}o>_@LBRybdJ=dj9S`T-NG^d`qU-A58<WupsU_L(tIcw{&cL^#FR$|!^EcGoI za8DEKz}Q!~A)_a<cverPe!*d{_hrn6gJVq?bYRe%!Ep?zLd9)_|G;5C?#nZQ{455i zGB}sPY6d#bO8Ds)`sxK=9@zqFJ_~N^fx~_?$*cIWKt3S)X%dY+O|35*)%ps?nFaq{ zNnd_b&)gkyU2_M}cgg(d(?J;(q0{Yu0S;-8DQ7<rar!T=(?fbi$>B1j()*%KEc>UJ zw*<u>haGa4@|PGLpEU^r+VR{hh^JM&2n(?Y?ehtBtpYDwjQB9{Z*#H!-N*B3mMqjd zkTzrMsrUt0d1rHdYLb~OQ^W&}EqOR)O0z5HN~mm);b|Y5X|4>l!IF8X*ENz^BCN69 z5#@w*-IRDDheJ?>zv+wGrd$2!l>PNQr#SZj7cW}%FDeA-uFHDA{xEvIiZGL%E-Uoo z04!)5)gR|3F%V{gej3by6ZCT;-;{!Sg1#JO$O<h?>{BFFL37Zl6ZET+ukaWU$q8C3 zE0_;ZPtYurUe(eCmx9m}bSmLI2x1!w!lM@!$U4fBC8ayN4cj@DeGl4GCunUml`H2) zctCVky1CqWQds|{QD^#ynS%2+ouT(jkCekKJ1aS*IKBG1`g7`;4V^ax#cl4T*c-6p zFC2E`dghMl=O_#FOvV7EPQqaq%3u;S=IK!Jv%%d=zNL?s!RFiz_+3(mn)xj1D%}IL z=|C`TeVOzovlZasq&fvNO#`}~Oo=a(T*t*X1OAv)e;*|`I^sVAZUMj8gOU`UCjhA; zI?RVU^MTw$^!R#awCMWEj1{4K?J>v@a_b?3LLPak@Ze+Mt|l))#Pnruix2F}--}zD zQc(A0&NI@Nh0&8w!B?PD`|@v+uds22zb|WL1p@)<zRWV&m$h`kDIj!TP9>b{K)8LG zZuk1KZiBZC+u2HCLsNr&S=%fZ0M4!OfZLaKF1IfW>+j1tQ<Td57eKl)!QM^xNbk;F zH=GOZ>ygAe$HC&nHwf)S1YjtUPbyJ@Fr27Bn4Xw|Fp@Y8VKi|e!VHxzFD%)SsP|fv z^H4)~md=Qp_I|tyy7j`zM%UB1(-nJ4na=A41tG52JEs~lkK?c#24$$nr))cf_EIoE z+7Bxon=4r=t|JZIG)SW?T%t9`8&f#!mQhaj!Q5j(tsvdH4l9&X1L{H2ZR(^S2ep@U zah>#^phS6xAT6e4W8D$uo$90y1uZ+4E&*EJ2?;D@-mV36BzBathIJ3*3#?(XR5~YO zwX5NZ*FQQc;`5Jk?gYAvOl6Syj40MOdw8nLm6HXuFPSlcvSmhahJsp0x+-e6XSyl% zIQj%5A~Fc{iBa0>wUu)6ftHb(8!Yh{p!3L_63lZBP}%S-jG7IP6sDZ@V4h>1MXB2K z<Q{(;R2-Mk_L))71idorTC@N+iu}3JVsx=o85KVr)ZL_Og4rppoR`6c2ZO&b;3IvH zEdgp6=~Z>o(?P8!y*fbels>f{)Yqgh3eZ}4WQbBDaM+gzYOd+iK|M(N+B)eMK>b4c zhE(NvPwQBvdg8Ee3NY~#fSyI>_M|tIvl_@oqML(l^CZy7P%w|AYSLRq-2i#u2UF(J zI?Wsh>I%}2)uBQ;8$fL({cI|&oE<<vAoD_M_f*bjK*Php?22M3PByuUHvn2r=AC5y zV%{5(%9#P~D)R3JOWOkUD>CmzDerY7<)mY(F5`6le!x5Ni9qiq^SQ4ycB@#d6#~7F z*o^sm4-WgQV3D~a@Jk6C_U_c4tDN~j?<Dhel$w0Tya6<4B$zz`W1L<<$B_9kSk5${ z>&Wa2G>}Z|w9>sPy%9oRQ_%8mO6v(BDU<mpcv&Yy=H|AOJqjAKkS#5v9+pK|>po-S znq^1i?yMf`@s1FcyR*^c-C1Wiz|(Qq8E&y5cS+F>Tn%bFX(xle<pw5c6;{jKF#zq? ztyT(=BVd62CQPtYGv47JQ;00-7mcULHp_#W4Tao`<8b4D8g#A#oqz2#JeWkp-j26` zdGjx7+qS$>#Y)+4+PKOMMT$lv9>L3`R<t?msx;C(iNtP&BD`@6L3wMZjoq4pCWEFU zXHieLWG)q73FJ+pz5M9=Kn9-xv>#EiU$$FPxZc6HgL)O82qAgfwbGZ}*$7m2V#nHM zkI+fXc6z~CH{h@*8^%*EJ}Cni6<KX@{AGA+2K}>2EHMt$Ziw}R*4SNapZJdu>Nf#` zm-;M;4*_x;(QEwZLqHm$1KR6-sM7(+c|>nBwrNY0a~aUD$=nfSegQh53e4RBCO#PG z1~T_0%ZP1-xN;r=oQq3fdy7qgjpVwg1<*xg9<|**?Y4J(1yH#jdm^b$Ij;kiz3L8E zK4dgCLs!~{!tB=!qnnLt^&3h#eE&V!HBFCHO}<61H~Vqvga^FVmm`hYl!AIc&OR?4 zM3~r79Z^UDf3lalA8#W03R{CnUR!Eq1r-4Ge%#btOBc)pq4(pdgi`}Ts@TC|fpDX) zqLl7zF>L2lR>n!n0|{-jIL3L>xUJI7<?hFY_3y`ZCK&|5-FI>V*el~1FTK&E;61@R zF<>!}DdXN0_Pi)mjJqS3*EfX&ysoE>s~7RYV$0o5`MuB!>^(T_C5H8;9xW#B&_?K2 zI|7Ahx9}QT3c12n<9AESQw(kT1DuRfZdvNu{)bzZEL-1({)s&$++r5P!x^T3KO3R_ zWT<G{O!vWQd%jeTa+I?RkeIhCw6inB&=X{TybWf=b~4ago1>sf<UUN5(>sbY!M=*a z{xOveYI(=VrKP2mChM9ms0obigu~8CGnXqb!wfuEJ{;&kGKnB_4A3evjnlXSaaPcI z;?sdnK~3#K)>xx%jV=duKQpyTWAPrXoTq_)Or~9`I=w$o>A!%p?89=MwGHvsG7h^e z*X+k15nJQgXoQY9>^`|v?4mt@R1+PXMD>VwmI2;|2C*mQx;rG@$)02r@Fusu?8|hJ zJ`{(2qLIt&g5>ASI?IEO1%w~JVZU#n_-ROPB2?`wTUsyv6yQCiPD@hC2~Ah3H4giX zT;m_N8YMs@bn3Z2`S=i^MMPKnP-iO8)zng(Yt}QZCG%FGDg<VgVVtJ`$!lzDa(SyO z={e^E3ZDq!wYjEOh#L2jBO6o&=^K(|`!6|80Jn<#ZMk|!;x>t!eIuw(N#7I9PH7bn z%~0xa9QNZrp4Cy#aKI}`J!5KN8v9P5{7JF>yf2gP<HdlFBlV?Qn~=_=&2grKx}Nk` zuC*z24qpV%;dsw^10yzv@4u?>-|Um=*J1xwXn$$vO+n=9DyV3z-vOyc`WB`S(eHqq zXVUrl9gs_qW`*oR{SF8f*}G-EydBx}@}MHO6W)`ARpx_0{z>#_+Z}q&w@7x)1N6Ji zBC-98(UjN?2$a(sjIe)s>^&YEk#d#1HZA3<_~np)hT8BFD>jmTYeYEggCAxI@s}Yj z8@co#<$O&=9I%nV>(^NT<@M_*^Y~uBjvonTB(pS3YE#ZwAQusB?!6eUEn|({*V3hl z<l*6#BLFtJFgLk5I1OS4-mE(dC|+iupxzwZhkUX*5Jpd21vh|B-5i`J`3heGk=z_; zWd*+g)SCmA$swhs3!0-F>CHhZ;S2&HQ&9(t-4$8%RHXavnTGA0%3ciZsW+ar%~Y<O zw&)Y0v(nAwu7bk)HwQY?<;>*2S*I%#+%DV)DSazCZw`Hn?E;MqZWmt1+=lG}W!&uo zGm2k@it%oV%j@kzfY&u|gZxs5#g=<}#pf5TUGD<|xwQwTn%q~ox&0nUS?{&EDO&?= z=08!7|MZHd=aO){xu|t`Ji~Opt%sMe!^tNoxoKEtao7>>9lo0<(oIeepu@@33o>JX zo=heu$SeYSF`0%zW-ZWr$utczj{tq0Oi_?|ALu?ZZGucFjO#uecKaa1FJ|^2(<R9C z2Re~VNsyTd^jtDMf=n$?`Hf_sAhQ|F^UO0K$h-!051Bzh=4YU>bTC7MOb*blWJU&= zzCfpt853kq0eT6Ui9zN@pihyR7G!n-{hrLMAoCZ{ya<?+f=mI>USv)UGL=A2B6C)d zIS1$sWX=sTcL9B#%*r717SKP*tPV2SQQV2eVP6(xjs!ZI%+*0=I?&~0)&-e0KsS-O zHOM>x^nEgS1)1GIGcv$z4l<2^mXdim$P5HJh0GH{W**R$WVVK9U?g)ccE{X$pihu_ zDm*Whc?al^WS$P2d%A9(%P^tb&nfMhAoC2+_sMJvn{BC^=X0R@$vhi&U-C8<WMH0X zfy3S&egPW_pKU#XjwJJ3_|;Tq9?%QPycEoH70`#syb|=mHlQDq*%jv7{l0R(1sX%` z?N`I*m2lVUMnI1s^ICXkRZ5;dK*y7LJ<M0necEOKT}|fAR14gvCzpeIn)F+B(yxHp zNBZqLY5OGn-~)&KPnQlEHy#1>I5HmunF&A_lld^n)B?SW%tt}yF`#dg`8ddY3e=hp z=92)U!aYw0)ucX1b0>oD&mXwi_!1~K8x+)=4ey6k!e~d;wHMK}tceAM$ep?u`9{<h z_6L#Ni|DcnP6Vj;A~cDurKJnb1EKdKsf4p0#5RlwJOp<yLiCy|7cR~}42##}j}nEN z{RP@n_afS6`5}R`6b=%dcs*Wnxht`-{=JCK^aqvs_aeG7!MzB*r}rY8pkMYP)E?Z6 zsOj{2gfi}4#B;k)^1`yq>%B;T*EN62)M2sZUJv>FqP6S2NFcZNz@H}f6>e_72U0d3 z+9n4^r{0s$)%XwhBs`boZa;<3Qj4<^mm*>%ZboP)9z_^ZxvdtE>ynjt32Bx1NF;uv zglf`rAzgWG>k^z7V|!xX1Am4NC2U`h{)0F9>CYHBRWJbXL{c}JOU+)w_NDm+v%oAP zyS^@VHJIDT-d+c*(&ZZz_T;S0jZh_>XGxZOiJG|s(C0Yp6$Xm$MN+Pi*JRPiLy^S0 z4fSw!ELX@^`_VQ)<v#E_KUx7)Zd|NSqH<ZHoY|n3<FN0{DyHIO0T%+@MrM;Q({%dA z`3i8M4eH4(I?KzXUFXaKbs_0zvsU_P<=hVRc``3%tx9D+2PzlvuVfjY>54j8xUBEW zOZ(Td2BcW%j0SoZnRkNBYM`6RydPw?0sWoKXIbXjU&_%#CEgBQWih);qwHj@Uhjv+ z<oKgeczz*T{|NLkJCYqQ$N6f;3j(q#ejng)HK=wz>X7~^YVyfD+3^lIFJ-(-KvqTA zQS2iChul`zNVg;sYs>B!xr+HqlCW}a0wUL~rP&=J;;GOXoGr}2OU@&+b+enF4!;OO zu3fuRoB!JNV=%4Rse2^LiQQ6#I$cE9#P0?72l<{po|Fiwc>Gj6oWo)F^6`?N0sOUm zJ?sp>Bw^!Q5pN@3Zh1J7-jXTXX;4&qjeF0regiZQa}}*KP!^#~LJt`zn@}S{FBvGu zgFZ4)E+OpARM9U6N_bMvwQh+G2xU{M&_H<})YU)@3H71WU;{NG6d^R*K#d8d5n5uP zLkMvU6y0c`d_w7jo-$BVLSpLs25Lq~>UfH=zJO4e8TT5gLPBCh+I4P)ntQq$8K?yz z><?8@djk~_T2831fm(SPM;WL!p%|r3G|-`hvIw1Opf-f0ju#r}FhUrPs%X7|+7c4y zY&B3j4|>}`#e}4ezZ$3mq0Q74zTT~4M?y;pH8xNuLdyuXHc)3m=M(B`pss{OeT9Jz zCqz@@V*stiVRs`WYbAbj58z9JB}vfP2cXLh91{)PS<St1)fZqjiK831ce-3+F~FNh z3}|pe700dR-p9KW;Oiug@l?q|<$M6J;W`jQ0;&!LIFZDN05K2X%_L6nRM80KJPPnf z5)&G{1%QQfY`Ql#{|0m9jbNup4TWK?Tm#ENEg?NCC9{fO2=F-)CnfVyy^6mDRPMAc z^nB(nOF1`zKM{G(Y~U_S+Re@&5NF}A&uKsdjQ?F5mV<eM?D@uf&FIB3g|LzlSL`E* zG`d;DcIkRH<2fkS86vZ^m}^8co`Yg%L1YKTRvlRAZx?xm{s56Kw}{vQ+I(VzAhMWZ zS9y&?apkNr#MK_bY<P#o5Z8FbX;mbg^{%RGJ%Ub9&Ok$4=MjI4stXNqy+?#DW{$TF zaf3%hNvOlvAR~@JOSIj)9af*yfIFGC`xrl0`dz!f8DG|b?^UQ`4wG-oAtBNwBCQT% z-}$bBO1eD{;aSqQI^%4eQKhfAo7*?{p*(9|$3yvvYoH_Lp}Zim1;CZ_{cY}=*v6hp zK}@AS+W$~q>xuW;kn&L8MOOipJ(hmfu2JU$pn+%YGsT*Cr`uDWh`U;r0rfo*chP?W z^*s@Hb@#gCfG6Tww{s<!ui;qV6LFXM4$OcmFv%z4u02QHnes$j%5a~EUjr)eMBG*P zFEH*Car)l#9bV45%e^?$PsFv!k!yh3+i`P0)Qq21k^7^%B;9H611}e8J8Z2l6m?75 z4`v&h3s1~lMqiCcKKZ7Heqv6w9E#0O9-`mjP~matB36^lx3Z(?&*3oBfmf?TrD2*< zP+zTjCJGZf4H{L!cF?Jpqhlmr;kO`?m!n!)K^&b+Uyf?4@o5B+F6aV6Uyh~{&TtS? z(GC_1^rkW?-C1tf&Z(?)<&@{<+GcT&^CCPTIxF2=?!}m}{>xFFX%S3Jxg6D%30{sG zSF85T@5PrUnu*)IueWsAvz-8cuxfQY_c_Mpmyqp8{TIT;{A$pz5q!%^wEgxF7II4! z^KFC&IvVuX%^KyWhd%IRe|2T~CUL8lp6p{<wiZVGfo`JpzV(zw@2(4N%n!ZnaBvJo z;oi4k^hcjMXWY%KZA-_Zf}Jzwp|+}+w;E3CZIu7EL6kS<H&pJA;l-n2$e?o{t#hl! zyvNZAIa-j@Htlt@@#`9|*2BAd$!sTN<Y{|ffxRz7rPkKhwIxJn_szJainc@{`R_$K z^?`_aaMA2OWa6;YD#uxEFp*nrrTxaqQw7y&!G9-T+&qE1)_7*(w&8ZMz43aSUPP6f zAIAbNq0K$4Po|lYdsxzQRA-8tFJ~M>*=FV=3U!*udycB}Z@x@R{)d^0`2mH|anH^d zpu<v!@v9q0X3<7jn-*KLl8HkW%eN2IVf?hlX(A%<6&Amd(C&Oz>8S=1znJl-W&P4> zt`Ie<cm@1@JhBEVb)L10rE9;RC;C+Jo&SaGtB}1Lb<sZRVZ9;hTrblkRs1tVzJ#~5 z$XH#XD$c#XPPhx;kF$+)-V%N4Fy15D(C1*zISR!b#v4IjP^6vT39h5q-hPJ|rx91h zx1r4K$Ql@P=lMJ3dD3T8@eBWj?Dvoz1-+)`(#KVC<^y%YhXMW=RdJ^Z-7VV>1iBap zR*GiTFqUIROQcMBtw(}uf9ZcA9DeUXII9VDo8{{E8&S>yuX)`A6gO90Bk&%eF(WEW zOo}ep2|cOH)x(mn@JA5I<w`3nXoRx$a>X*aoNMVW)|iLPdZihcaLSNFmX;0{3-p#N zDczZ8*v_f!)6kxJ_f*?V-O6c=vP5U4o6B9Ug!M01IuoxVQkE-Snc#9o_i$&RidmNj zV5~bKy(<H~>tdh};jmBCUl{XxogRfJ%6&{#T-g~nEb`E8&v+iPI~wV(`W!OmVU6&X zKi#*^vp)2X<Dy9{{=5G|w!y<nRYpx$?O}c9AIGAuF~1y@hXrER@o<0J-CT8#ldmXf z6OMBii^h$ykURvr^C+je(JpuRktk*~4*Qozx)t+zNx(jB|Jq0o&|eyH;%g_1%kPcy zVTUT7j4aNmq;<Rf)=6s>pZ_04I^6}4_gFY?CwraP_|LcgoM(y3PJ915`NQ~7y$K&H z)is05Gls+X<a~^XxD(T9sJ@wuB<`QQWFas!_^Dfz>W-{|mGeC7JAcblhbq42zmVMu z+1{l|-~QzHtycF5M4tCV#_AIBssBgngqs1bE-}6SEzzfn`MhL8Z-f4-Hyy=2AsYwk zRjQ7uO*~gT|9>obGb9g~M~k^Z{ucXOUBIvVSWDIQvPV$`9Co!k7R{F_b+@S2D}XBQ zg{2e!uvfJ`6$_cYwqaMexvhNUb8SPpd2twDv5aBJTHc$Lx)&_*t>a5AdC&4NzDIc+ zW%Y=^!s6?drWZ*3puOOf$8Z^stls<5rvLus?*;O@X7QE(h3sRHE$Wo)1vVCKZ?~k? zeE^YbJdv@Ml&FgTtQ$V$acnp`8h^hf`cz}SC_TFa?lEB->&^{#+c!&FH0JB#=d{Ni zlq7eo%N6tEzpsRh|5y9`zgqjhxcd_@9=WwYy4gp;rP#qQuM=*}H`|Yf^iks=<@r*# zSU;N+kk->r>uEcgb8tUfUi2;IOVw$pnihXe#C1#Rx2*LB<Q>_C;oo6n8ayA;m$N9{ z`}XP!iN<{Ez8F?)BBcxL<r?1jWf=Y%Hj4b6fXhV;*XT*jeRUug9=Q|p={<Jfk-mL- zPV(isP%a-g<=u)6BDCV?5=i3%N_Uxb7-@V!=^>L&N4ilcZ<|R+kS+}6{R3%scsq)8 zn^4}DCY^zFap;JBNb|0o?chy8d~LT==!i7fB2Wxax<EMw$^;Y^sK`L|0Hq03Y@qsp z@Gf7cP=xieug&3xVVU%rNPi+X`Vi+>AajV`n!{o#yGmr8Q-NMVW>b*43FtO5PXw9Q zfPO>fxg7n3)s*b~3^WdJ+ppx9XE|;;`9S#~!G0sibO*DX%m+EYu<<<G;xoX=FEDod z>JncH^m-ijPf1k&h(CTi;Fn4L9;CFF{stV<UW#3U`m6Xykd}us`-7CTkBS=NQ06sF z_gk)+==kzL#$p@z9?0Ze29?NgID&2iY&<}Tmdu8`k44n(TyhGclNfDgcc)ly1l=5r zVB4}Q5ijKfRr`8Kb!&<3OgOC+6AnHZMPL_zh+VP;@edKT3*`3^-5TKnG-{RbR%vTQ z0rNI)x6z2>`{Z9DF0XAK$?n;GAA%Dz0sTdspEECIP?lZgChga09iQ&m9TAjD{tjf1 zMbPab%=3|GNl(Oga>{R8N-5z=`D+dP1TdvEz@CB_r#G!g$GB#dGO*8~+$ZTMx)!lA zCT+UTzM8=eOv<-?*CAQTSlNBV_`+qk35{SxTFKJ@W+Q4BlsXXz`~&G8@}ght9YoQY z5SBI}^?j0JpN#!1{BH>Dr3DD+dYj)-D3w9X)z0SKl2QhCdu$s^$5BrSVr5L){7t*f zH$O`mlno_z0Rw)5vy?&ER3u9|IJ%92)oIZZ>OLP)G=4tXpp-!wGxdmFgb+%ZLkeGq zn9aO4lcn+r$NPy%OafkMmog}O2}HL)aS@EZ_7>t!F$9~H@;cq#%}f%LfM07Xl`q5D zlM#Cc$+Aqu$|T7z&Dr@#+7jbu+DaMN9VvVQVr55Cm`VH5Two0B!DQ(@`*_A`5G$KR zIVNp>C7_f+*+M4yF&!Q7!#t((L7>&lR)%ERT8i+~5jMXLVIQ3jf`NT6MS37s_9#X8 zH4_nW8(dmdxB4rTY=hiopCjh-Un8pQ?@4thrKWgP7*SY>u(Xm?zEFjNwvzbHDs&mG zymJ!p6?t?L)dh`C0$Tk{06jVF%I{Y6C+n_8Y5D=TeMTxR1^Vc#K->HQuzh)<2|h)v zl!5&s*wTL@R`w=hWlY-bTbO{^N+s{ll)D|tvcC~4V^YSG&7aDYGO!zBcVKTp_bHP= zk~dBRD+|?7!`h6cJ%^b()U+4l{J&?7LIw3d8-q!w3Oexd8LRcbkYb+?RrBM#t^Yuh zYD4F6No~qJq2`?GyF-Jej;c?fwfk=*sMRG34gtX%e4#S)uA9zLaFii>rx5y~RKYB; ztC+37`LUnQR=5`6OC$#I%eVsSpJ)`m2J}ZVBRod+{sTZB>pI^3mlZzSdLII!gybBM zczs-4;~HMr6T~AVPvauN?Nf~VFZp4fVh0RBb}fA^uBX>+)~b|2nf$DSH+=19u*;RP zXTQSO8w~i`U@3#Lx0y}W5Scu9KeY52Oe1AKfGA_qX1^_EP!@(kt_^&TBDMel=6;~1 z{PkN|E5ynevo8Wu%D_I77z6nSF@0`E4pt&<dq!w4UqHd%$W!4Gw)>fggj?C)%>{q^ zX^3|^`Wl?l!rc;2fwB@WBeWB5AWTbqfH0c)9AS3i2ZV)*-w<w9356_6twaV-_z)6L zX^A49qKQsCWhcsbDopg}2|0%Hj4b1E-ee`_;PkvooQ~6SJ8`~{Y3k_H7SWVT65VlD ziT((!#IXqN#0g{)QxPs*3c)X!49`m3hO?Ep2ceyKfLP)&gwe#)2(uGA5f&z1LnxX0 zoX$)SB^u+b5`_q@#Gwf7L<fWv=~Z(gHrm(V^}q0r`WsN!^eWICI3<hW(Ys-1_|Lu% zf#55U;r$pX^l#CFAOyi<9QVQfBL)f+N~6?P1MyeT`sD<^w;>t%ffD`F#5N-pCsfFc zI}MZ|)SJ*t25LlTDWTU5lurnw7as^WP=P=;pf3$nBoGWM`oTc01;W}{^qYYW69`LE zk%Ak=)M9}O0YweeNub_<atzd!&?ef|%s|};9Yd&%fsQ1U22=B+@ceSX;el3BSDXjX z!I%v2#~c?LXb2HhL=|0Xpy7nX!`B#S6d?$y{Law(GvM%atLSE&2T|`#(xUe-1I-~K zdM$JYkvfHt=#3g^At5+O6~zp+h!7m4in0uJCZR$=`O{JQ5WwN{t)d1v4`t~WkOr%Y zMj2=oAu(u-fi5OOgYqT-I*}Q7;J;Pii|R{FdMDEOqIwO|H>05N^GG+c^DaR;G!y9; zkZxk<-C)u$B3)?rdlG3YZ!^LL)cOU`Hg^ASk<Jc(Z{@v*2$lpD{s9C8KSP?^<?xS4 zN3942!#~lw=py8Y)p;)iT0RT#uMp{E=l#qyb^nQUZ#&OEL$5j*F`=TZmYtUc;9?3W zJ5+>f<uwGbY$bqn0J|(Ze(#mI=Z+)%q?9!OB9s(6b~dI&PGc&!U@ZspjaK3}2&qIE zNh=XYXsi5M2)9BsyxEE$j`JkOchj9wt*0yWsQ3cFSCjfCNhxO|kX=MW_QfpJ%fxcs z3z`qW|4Nw*40u;5J~9TR;Z;D3Y&HiSbTu_7rzucj+Ix&PgmTL12YMDW_N<dW$<RaU zpktyUz7{fDsbV~*Ah()Y`*VOlB{kD#FY=l7tzk~~7;P5i@DZA;F@53)FY#!%KCKON zzQ_18_5?kV8Lu|KF?YY_b`rpgN!)6)v6GhGaS{u>0@Oy*_j<Hj;DbP4BlD<D(PSMm z-v|0LnU}m@!u^3{4kq#NKkXZ&1&u$X=Qxc(btL_xeanG#))A!akh|yMf}p*rB3u~4 zVQwf=5J!HYrt5z@6e_12g1mYS*9$F_5<+f+2%UZ%)(<Njw_Bcs$aJhL;l^mRP|KA_ za#I&RgvkiS!VRQ3PlgcQ*0_mCo)5{PdH5@3OP6xYmyTud4g$HvoqalTw2+lPy=%!x zH0welgOxoG!`0@P9l(p)wD3U2%NIi;qVdvNw2<VC9#O)7dUo|0;7Zg$UU`b3r3Ug+ z)Xh|}9ej31|JD!T%=sdtKc|n@k0ZGSYMG2$s^nS3|4CJ6m3)KfzZh*+@++cgXCm6s zZe4@z%#BFftxrNs2f#{62xhkfVavZwy5RzdR4~b)lt~>Mg5<#A2##T$@X;UAQwYvT zf}LssGALUN(3U{3uBfBEhFPv4!OmLBplm&ppOauvc0ZF0%IJwQx~8Nbg6T^!SCkI2 z`7?sFF6ScArb%y{tk@Av=acKlF1!&e9#;u4zyo4i0IQ~FQ;Z9sD^{=yz!ri-`p!o_ z5Kl0FYzR`Sgx+|HZ1<990Pke9N5ShjNuFV+rQ|tR@^r0IxQ_|JvXULhQ=ieE1<i1( zWOS4%N9>Hf1d-S~2vp%n&?_iX<=Gdbu*j%_i$Og`dMfjHma4*M0sf1`tUx{%uL}2r zYD;I$OQlsadbbA{c>Cy+;d};Voe@X}t=GQEd^$ICNd{Ym-LB~f0GU&%rx;@JvH;UP zAl41AYC3^pT>D)yDQPA^uNj@uo^!Itd%n#cr_!shz}%4iTBzhQsG7bM1OK$jNjQDH z3{k!cZs~s$xqpBEHP9G!@VyusF01N=K-gwZL{`}dB^>@*-im&K{8o&lHd5s+1^F>@ z;!Y(phn(w?-pCAj7R4}IME5e2avn0wAs+KDPaVD$1o~}eY-asV*vr`OL!g%P8Ny%5 zx3u_cfh1pY(sGz{9!B_LCxKHd98Q~nP`o|Ro@BU33`M16<@5(KhG<voNmRm98e>ZS zb)AY&0e=o<$|R@MM)OG_XAJ~yp-|tt6j4w)cY}YHGJ`D6rOCpiv&UZr^#y5MP2&1b zoJ>Z_Qt|IVh0X^(zD_y@s*p7Mk(*oWWB<h0T0zYseR`6n8)FPqe379SCuzR>9%G<N zrlRbhAd<Z#ZeywuMdu_X#Z(3=-ptS|lC)Gp>ge<UJq(9aV{yf!rDCKwC_WC%e6p7^ zvu>j#@A}~k2wY5|E0RJg^Ex2+5xvTq4P%i#vX#m85VG9XZYao|L|jOBVlBDZ2hWEJ zrQt0BIBAb7@bp0i{MujkNqLRx7kDEmAd`T$;e8+HwW*u=CDw9JQb0NH0pSww{A4W@ zSD4C5t(>n6{YQY-E%dXY)9uvU(vO_KL1$vIb8>7w3XOA}9H7E9wb^N4ks0{S!SLF_ zX%)=V-Y}hldAftCz~LNeuff)W+Vqeu;ZVE@O!hg>eMabL`$1Po&ow3ILnt2$ZuU~A z3r<Jja0Uf5IsFVXB9PrV4onsEjI-%)UtOjF<r7P1a*$aFhAWG6Vt|RC59Ug0TPXV@ zJ?VMvsN&Zf{@ehMDFf7#%z8mk=?<W8ler<7DgF`Q??~w{GPzUT&p<-hPdIm(ov&%1 z44_}M0Q0DAFY?t^54e&W-~q0`*=INjBl)6T>`EqUqe||8Bv<$B)179JY|GL<u1lxW z-q1hSrN}7-{T^m@ClpHUgt`m&H*{uz)?Ij*p&JBf-G#@3o{Ph29-y`IYD0IbgZ7Pn zXQdH5G9c)UZ{=KVWct)0gD*lFdT4<5^^Qj&^AZkcDmL?GDC?TM1$Z~91%d3kCVLHi zZXLA0CTSPCdM*hF`f8GAWUjA6MmdKX`knyot4RrD=HPH%@YO^Xp`?(rzzBU^mm*!U z^Nfs2OYI(_hcf=!U1Ovh)+Oz$;yp(2u!9LIXRDFvU6+in9<Lg~VQDE7r7XBH-G1R! zn5l6%GY_UrIfodT)9cWK|Da~*RdvvMad*yv%oQwV!@-J)X}?}?1fTe~f_~>dV6wb< z&@4U=KX0UW|66J0d|(7sxQ-SUH~W13gOSb&NK5CEKv%GMwd;wN2Nm>Ld!ms(^5071 z1F=SM$Uy~t*1l_`PdTV`azo`byvQ~Atb<C6$qcY{G}7lERNC_ievM+J*Bn$jxe0XM zg7l9#oDHsY-8(e5Z(A4R?Ry-~T?dsGyXhF^bcEz!O1~9m-MxJw$BEwPIAcK1rpT9J z=JD2Ky-^nbimv#42rZ%D54^wa?jqTXl(QW0rKJ7{cZI(^9oRMk<y%QkSpE;UkGT!Z zlgyKup1;JOr-T<wFM-KE)p;MM?<ka?o@!iI6yqN+KN-O`0YPupf(dI}W!(ZYo-$lr z8JU3r8S$7n!f6GWQXI~RfQ+xKUPfk0K*lRetXIx3BRKzHg36g<WX=i5_>AIDA1=b- ztPaTdjJnRqTo;fD8nwj;-f=KN<^03QJRXqo8TBn>qL;v^7XmUqqZ)u0nRf#+L8Ceu z!7mRcsGMVr%<lmipHY(`b1n`i8cFR_KBF!(G7SSVL8I<Bf~^iFh!0>InQj3YpHX`u zlXWSK>Kl;p8C3{gWQGT1f<_%>1gj1vh^t*Ab8<k&XVmGCxd4Z=H1godz9H%#cx%9~ zr_3eZ{}b0&@-!S9Z9{Jg&~&}lqXnNaf;;}Lpugz%OqO>8S?CYtd}rt%0(7!yEf~7Y zt%BoyIJmBx5qiMN-J-_G(d=PVa1QPVHRF86`$wvTUOFF8qzrG%Aa3&xPAO4)5AMC# z5?gi(V!XFf$|<=ljWH(6>LZYwTUq@oX7N@{)=KX#n0FVd{%Y^OU;R~bd-r-|tB+lg z&HQDec;gDh#v|E=HzMoLx6|JO60LuhoyVW|vfTPh_|;xJl8JQv3*=g7Kg(1N1(7e= zT2X;w8PKF6Eh)K%lFg`~8ImraOWx@PfWPIcf0g|W08aJ8c~<$IaN4;P%=xx+E~NNw zef{g~9N6TODudKhlv-&!_dx0$9QALsN4vVTb<Sso*&se-er=?_)1L+D?l|h-9n9F@ zF!$G)aXx5XtkvI=YJF@n2$eqop*Z?H7>78oqUt}MT80*Nz5ta#)#^Xx6(oLe>1Ln? zk$$$$+@nA(C%v=I+^a!7PWmOAt&((~w8_(8nz56;h=>Yr!L21rm9fK>vHz8kk{(vS zJUkQ^`BwNDhN|ox^yN|pWtSqbB@pays3^M)m}HB;S}_LQ+lqf#ScoCOYoz#I*brL{ ziP%~Ms)X}LUy$+L1%q*#%jnPgzMLf@TCQL|h>J<?tAo501ZS1_pZa!|6}yflNYJke z#W-6a!5ao~Wf7neWR>$S2yPkTX%+!P$Qy&YXy<Q;6kZOIsCAPo!n0p}E705(#WN2o zG7uu-f$UTfniHe*aQy+1H7qD$5uh!1k&yQ?t|#%ea~n=CGkS<cXH!NT>AVXt4c?A7 zb8l<v%vwWcHke|vElf726OzXfYGoiT>rGi`Sw75=ri^rM(sC(AaHNkI)0WR<2J~%( z6TjFLIT3ciP}R4qL1q9U)b~h(@R7Prq>n*(k3Wq_g+XQmi4qxN5Z-yuCUU$%<^m}s zQe_Z63^)o%JwE>#hG#_Ck&#yYb3vz9p%Q#MBX15;e3BL!iyP$8P|MXw^AS>H0y2kM zu1E52CMQX9Ba-}>RD{n5LW3JXXD>c`Vy!|ASww^n`fV#(4^ozXzclN3;%5NPMv3y2 zO4BMn0n9~Yd1Kd(<sg&X){fBxd|?FCi=@x72pAC+{{WzK7Kr6uK9$)FKtF;tMmlo@ zl8XpkXmOE(g7|qz-b0A53522zX{U-m3FK>{m-*0$ROkjlbbXpYS~-71khd@+H(AY@ z9cp}Z4xfYN@R^rNpRt&IW0RFP5E1t1$W!th!h3)j*+%X0p`b<Mb5dA$YK<Mm!Xi`= z*;zOI3Shi(MrnLz2ZGBf{F)ic(SE}C4Lba6tY(q7eC@tR49Z)CmhA-b$T!jt@)|>v z82l~LcxSu~(!zg-G~OBSf;2xK7Wp3O!cfaHq(?K&i7eFe0+akfl50)!M@imll6)B= z)bd`F{8^G)P4Zuod<Dt5)cgyR@lTPI_WO;==pry^KL_=a_ET6{4H{u>Be5hBI~UTr zQ)({L$FYO>xq3d1o=}nQRF{>6l~xi@B2s{g_ko}^XCg>B<3O#To<rRGoW|JrTA(}0 zwDM&-p9b@JvWkBQuF(?kZGt=>&Z>AZxGM7Pf;^w-s`$y^?jqm8$CHZjp|FZS4sI`b z{?h>0DxtJfayW_TZk;z3o#jGgiZnsvt58d8shj58QlXZaCfP!gc}QME={Az|=8zI5 zo3;eY$-#=QgA5)w3b4!rV)BN=p@Oak>dNV-Ut0LuBuZgDgNV~Ke|vxzA<egA>3oRd zmR`^mfHd7U^SXqXrL8C!2zDH^y#EF^0?c+A+Qw1^tFd74Q(loT++|o3Znm4j@>5=s z@9SWlhrzyzBa&me?{?^HnQsI9o<t+dHKt)p7A{Zvj33wzYVfZRYk>E8BE4W#XmAmt zGBNjI(iwo{9J2i^RvVDpr_Keqp2R@PX&*@8IuIY}>4UA0xu361lriWL<Eub1zNMkx zE3(f(w2bdUl#;hEXOeF-locam8I!VN=5!n~{Z#BN=At)MS`)4TdF%rqGeY~^S1wDR zuEP6XbHTg;+&Z3%<1pWshr&qP^7?4U0f-&JpbWvV4!2_8HVLUm5>d$XkoREqzm}p6 z_@*niBJ!qh?%5?B5MO}|x$l%*x<;wL??&{4iX-m959M;dXgvT7_e{B8a+z#B3`ts* z`;}dkX0;xJBsJ#l=9?L<XCTShBll}el~(I&B)da<?jFpPR_m*f?9b#km?*8*hoA%z z{uVEfS*=?kDXPB1`(IY;_DHUUIl154MWvQHu67eX?1&?GEv^@i>WE8jBs$K1o(O-a z)RDb0_bMvv*y=e%ujc=r8_pjU=3c{hS%;6L?6v&S!SMNvUdOlBhtFX2dcOBR{1irS z;0w3#5I+o2%D^58E9@baXgUV=JS0mc$yga#zkiuUe^<v|%#1@X##Kx&)SMA(S4L<? zF7*SvN2w8&2-3D&BPZjWQ#tB%oUXuOWm;MYKmKqd)~Mre*-GY0)SG{!v-DXtaL*_F z<5}=obMM7lfg;e%C0eEk<it1QjU9nT-GZ`yXL$`RQ_f`}EsgS`aHG|bzhRgO?D%?; zWD`MwIzC5|XCwX<lfxv*QQaA~j~UHmlONDS?KR~mjAyDbukvPNJ9okiCL1w%W;*=- zC+$9joosl<c0}_T9Xs@RV<sjPl)yi$$uE~+-kAW3+d?&7ew{lL1x{E5Y&bFe8FBmX zye8Q6kC)%(UI?j)n<2Fkk*d!Jp$ILV6#u=^#P5N>27z&ZAd<!bhQCR@5sW#BR(EBU zLTlD8nN0imXLZ*0aBzwhk0Cq%cDQF)ag%4ojj&s+*oKH$u`MX>TJa?WQmhb<>~f{Q zb<b9pC@wy<1#CI(5eG(!EguKOVM_<dYmc;tl-M#95wT@=P~5d;0R#@T<zKFJ4y%qo ztLtT+Eu^$9R~TE;T`?mLTORRj*<x&Y-`G+=DDK*_{{UN_MJLL4r3;KLhv!|c)Rfmj zS!^ye;#Qb6hEs!8C_nRA(|b$@rkXPqTJ!J{-NMDXg*WIH#-N3~_Al!sUd0k4e>b^j z)MPnI(_W=l#H)>9ig@+<ptxI;G6<x2bt?PRt*-P_?%8S{=wA;61W>vSi*)G|pi@de z$CUnfP~0v3mSE}9zw%j0{9($KKdbEw=++i+$muqH4td2B#Q|~H!VQ47<!fV0J@icR z#Nk14*OpEYNb!W&(%Y3DZ)|Dzvu6uBfoscf<P}?n1;k;?Ay*n(PKA{C<tk|;n! zmdEO}WtuB}uCb+fDRc+N-G|1OQv>3#<yOxY+spy2%p7obP~5ep{D3)teZAI|zR1|p z-d>yR>l@hDmx4N>n!UR_r`Z<BHC&d5BRTtzrIvwc9sUh+&sO(xPYdR3OnT5UW-)af zt%t<QCDYhJvw>SjFM+VGK6JTF(H~K13i-e&;2&JwsQ!A$>uzy9q@*dHLPWa7x2~8c z?pFUZ2&8rk8veU0{kJi^uZ5S8%}`&7>Z{S4T+SGxD?gBHBfdtGu@P^d;joUg%yL%^ z#r!kN>~UOXBN2Gu3VL8Tw+%8!T+8H$KgTh-bjfsX&aC5QduE?-)OI9BbM@+poWo^> z9LW`OI6o0%jpC1YhPS{jLq{i7!OAhMnVxecq(W;xI(zbqH{$XVxHbDk-j1^MFTT_G z8sH51Illfm_yQC#^W@R67_w<4*38Qg=i*@B*<j-Jh~Ex@S$81vAtMhW(tuk*rKX;X z68_*=#$Oi45&o>XRWD-oG%&x`&p#-x`o0bvh0OX5coAk!{7oGTmHduB|9Tmf^Qtx; zmxSB-RK8XRPP^X+J^(6beTB$OMt(-*LMfzbDxxKUGVG~VRirL_yfv`_@QvC&HK`B- zQ+s-<_VnJfhqt5S$FWVs>3iw)DgV~#gWy4N`c|LQFGk!r{Tv90(;s4lPXE^D^vhlA zZ#N#ACQdi-bv_T#=|S8${WV=FX~)fOp6y2EbWv&GM*=E?IPDIPzzenXH5;^%qZ?6; z>Vokxjbmi7WyVG^dJ_N4)^IVmh67?|jGWCe!rh+q`=#vnXMxn)(j^>vH!#_qZePwp z@-&ia)EpFY3k$lyG6kHao#qvE0So%vE2vfv#tlof>I<p5Lnek+AF95V8~DjTp+^oy zqgyx3<^WC`V7b<*Nt*x<A4t(F`Fpvk9C5Z=Vq;VCmH)OQOhsu`9DOFA<L2Xl;YbYP zaP$n{H&D(;{yFZKtWK*^>JFxTU%_|@Y5Yy=I1E23V=b=w>^e-J^0BhL;N~Vkv~<fn z%st!J<;~qU6gR8f^f3m%J`cJ^ZG?}%q@QoLjDPuW5cp>r^k(`w7x(k@q<2e7gWk#p ztpIsKBRJGr&xK?TlhUAfut6_EQjPi%g>=B|X>GDh0kv+oG6ij7L7TmT?oDmb%~bsd zSlyscdky*#UGeMz4cZ%%nQqX>y#|fDCAKjoKmKnUls~<e1~vH_yZKCm2Jt|HjzE5Y zgPz8;uR*Uy8h_HD*)Z4I`oInN_r3D@J@>nFk3&S-wX0inse3l<I^0d4U~t{8J>lw^ zboWlnxcL>`ebBBQhdfV)*UOVXx)^Wmvh3%_Brk=z=A4kcNd5>$9G|>=4rL)ZZYes2 zTv)e8QtMeqJujr_S-Qlhr-B)idgi3+xyaMAi+Wy6(X-C4XLG8aH&XTN^Yq|XV9I*Q zr^jB?+h<OGc8WQ@m`qk{5|a48D2p~h$1dZ$k31jFFTM|ri6gCx#UJMDPvwm%#EX+$ z)`9Yu_iFxe_u~N+4gl<i`kRI+VpwXFUCn@>gDPcU--p?!v=Fhf#}O-Ia(=-U?4xi% z6Z^i^428=_woHNi)`B|usYmd!4jgIyEvqf(K18^jwe!t*%5HxX3g9J9Su@1scf#qv zBUdzSt)0i;U-O5_X;13^xk@7KYTWj;qKzSK#flKBNcy9IZ%o4Y6#<aH`UAa9zM0@< zQ1Px{_-_Ey?oP_fjj>o8>N>@m0)hNC5V#itZZVuaG_Mwrza63-;t<E*@9x<ewHv66 z8DwpRIl?N#P?*6j7yzm`nQ3mQkY;JOA+4v2&HB3&Ys%ZPSEk)BR#$y~Gw#8->KD6b za8;L$P2w{Rex)^clMkQZ;&v!+Zre&Un4328c3PgQnl}c6(<SB@MQg39tLwn+dmBu= z1^7Q<^sG&YD6Dw19z&#v3nl*MzX#V0dkpqprvD|Se9MP7!rJl|@j&H^OE$Obr3~!& zEogTJ#c$&}Z~$B)AKpO|i~rj4?iUi$$_p}{&?3g+kLT!Otx=PqK|9{fxEwuxhA;CY zNLM|9O>sRpPr^Mz`P_Hw!10fL)ugR3Q8&*uUi0vq#A(;cZ{%k-LB@+AlXks5u`A+x zQOeAl5UFC_8st^8JvuQS%TsgD2eHsC_6+xI=W*>@IQdC*7W^yWtuFkRd$vZ+eQ*uF zg%gBf+^K1a`x7T2pGus~+=&$k?Zm|hLy4;prX|)R3@7eIn4WkDVI=V+!f4`Ugc($D zXW|1yRbnqf{K^!eov^o3L4Aa2iN*-Si6VsQiFODhi6aq46MYb7Bq|X)iQ^H*5|a>S zCT1Y4mpB<={lp@KS&1bGvlBH4<B2s0b5zN&^>|Q;XyVa<7}(}#cJ^a;q4Ytw@@8cr z!dNQ?Pgg<0Zi{G18G=qv;VR+iiZM9#ZZNQQd!7L|D3@EmQ6v*gR>-~HJd->|ZtiwR z@@c4RFi7s^9&M79_)wD7x&lcK&<2C$=5D1)4zY_4w^|SPC2`}Sgl0|wmgsN4h^YM* zg5>W6OH{@AAbV%@P5w@>uUN?634RRO3?%tGL4G^<2I^T<lDJK&hZ${FQh?|VMwgUa z0$+X3=;r>`(@>dEcHa9)zX_3q#VOIs<3$%8De0({w|y(VNw(2VXIpt2kUql5H?s2H zMVf9B`9dp?KiXy0CEdx&`x*M5HS(-&ZzSrW^u$*C5kz~$$SV7Jg!!)`XiRQ}W#6-b z<R?Jf=L}y`;wJ<hC{bheFUPqm5ep~lkcrPt`Rl;6zYa|M>%g?X4ov&&z_h;(OqW`D ztx)hj7?P-mbZ;xKI}M@_m@c>SdLu19V0tv_oQAp#r_c+@PU>~lAEctvOJ6|L?WMaA zE%_M1v&h$ASjERU4Q((|dg&K{8;p`Z@ETxtng+*9Fa0Ny((y*q5LGh$c3h!8gMy#4 z4@I;`tP4WdpCyRq_eD@af%C0y<8j7kkwyTjCREUW6;4YNt$iLo6gBdDm}$R<nf7~_ zX}^b=_IsFVzlWJFwN5Kcv<c_cL+Pj90YlmVM4@^9Gzu;Br%`A-q{Z!&Z)B-F8^DLC zjVM4n9f5SYNmp5UBat3!(le~Q#s2hsD{r|!y~t8F-8qm&xWDGLpSY7wJs(E8PQ4J( z{Iv+)L*B#_=*Ecmk8i{42#JA_WKS)}=hILnZ?rM(_aoDOKQit2Bh!Vx(Z;mjk4&Sd zz6vX@g9V8Sq~U?DkQNsmgLFClJSZZ5zMVpY0KzEx*-N{A_R@YoQ{MP_AUq)ohFW>w zL&4KkZhF3z_qRV?jc!S&G=)zRuk>&q9_>W-ic<hJ%IMyDEY7<CWb~jtt*0T$DJi3; z^zqq9#xT8S^rDOK@fb+Tbh(JXTfQhwoqiD{)}>{XCnrojr4KSWk;LOW&Y#&-gd`O; zMZ9DLf*T>1IJe{kMDJ&`S;<sHpJ4Rt5>{+4qg_hQ02+E0(b**{5N*onoRW(X?ZRm1 z5`L+^7o$r`ZbkGMM$b880#1dY#Np9o^LLAi=U>?BI<6FHc;1^_k3<@t{}Q}RG~JO# z^Z#Vzdm!COcZZ&^FVPceH2+`VrMa0#^P4qI_;R!~CTGz{ezcX>66yCjkug03FN+}k zw9$u#Jk_7Bw(`zI+RMMl$~znBwwxGyMngp_@s`o+0638gumivZOi;2MP-25^<;?@I z#Yk)da5ex}C%$|EV6`9E1>jmg@DYI9{lH!T4*}q`D#b1hS^d|d2S$;~`wfiDDXgKw z9I*#L$9r7ST_G!v?_SBIKnvdna5M6r$>BlZBLMdT;G8SKR{)*?z?ndR4QW>1Vdx*O z-$O;~!d6~a0G`qf0Qvwp30*?6Yy$8+fMVqW4+D714{QbS5dhD*I{@qkaIev^GTq7> z&i-W#yEq*KjoY9ZM4z+|#Ufs^AHf++zhjpm+9P%}LS+v`m_G!;a&i}28h59(i6mzu zxQ^r+%f1=$9<j3!D*GHS?n<u$AQBZ%LA*_av8^A%c_q*W<76~HhU8UDj+a5WeJch7 z7qAKJ;jK-NYA}&gOLOXIFcz0vR`h!0v7nn(=>I(Mszkl?<Or&dk56Lm;`ZeKQ1>R_ zQC8Rg_?rYU62t{XTu?*=MV3r90<wi<0ucxy2?)51lbHz_NM_<J2`EJ?sJPT!>xTPQ ztGLzHz16z5TCG*PS(jR?ZPi+}*6rK=KIh(Z?|a{6CWG?)pXWbtbKZOIIp?0cpS!&G z-I=n0{AfWBz%R0d{AfWGoiJy1g&!>_1wn0)xaV&0A6hi>JotObzdQVBQQP3B^zOL_ z{Ix}6DPqJcH2M;FXrwc>==a6v+=Xte;wf}vBlj3j8@*HuM&kBNbYryHE4+J(vjqFV zTX{S}_Y(OqL3u}t&Zwai{-WZyNZwXFwv60o{O=%7aO^AO{S{u??HIYA5b!CySAl%w z{vso3abCnWS{SH{;1$FNP_o9ag7;k_K9Ev1{v>$mP}j&Y)J=>(OYt5gtcc?GNsHeC zdHl$6<8K2LS{&lkV!Y7eK7@*RCI~H_R^CIYILB)p52MT<uXUU#w9q;pF0{}(P9iOA z9VZtb++yfBMVMH{sk>1(&I;qt&DgXNb3(Be&@}UD*f4vSj(-{XLrbT7?=1ADRXtjG z+k2?cdo;XMczc%#y=m4=Q^viA6(8JNG@dq2g?E?YgUJq<h@fKH6se^@#arM#g8s~J zsIzSYarv3Jtc)&Fl(*7NCI!Wvb#ITs(|1w+#l;=?Ln|%Cw6G#pNaV$g;@U>BYC_8* z#k2|{PiN3&YT~{-t7!M4LxztSTrzz3qTPn<H~g)WhaqHFt7!xVrd=&ex~3PE44+YU zL>XpY#a7AinFt?(FO&~2D+6{g?7b<HVDQXgbB0xbtaLEAt3bB%{&=VzO1Pm@iq4oj zTnHN6G(u695hdnnQ!JlA9HJXN!j5M6E{I%;BiXyESQnKo9xCOHhN#_)c$^`-8zCzG zJtkUpU>Y&VNY0*zBA)%Rmb#b0&@{p+4ELOqGL!)_eS0f)r057V95tn=qRf>p%uR&U z`6Hqu#vohv9Sk`nMP}H3Bat5xfvduGCWCM^%P&)^A23yr;#D+T%`!V@#~4_}a*!>f zii>Kjt+qnpb~Kf=Im2e6K=&Vlm2)=|mD!EjAGKw?MwZEZnPA6Bm4ou-P_9s@I)`y) zP*zN|vjPipRXSfVrZE*hU|^(b4n$319weOV#8lghsku!%m}mnIzs&v$vxqqN&@~y9 zO(Tf6%7r0)t94QbmzC{OHjEQoGY*>1E-M4YG+mnT)Q%TbefnMk%%BEVf(CoUZo)rv zFN^}S_9~**Fx#m2V4S0J&{+fL+A5VfL+U8+MBOYa9*X*ho2+&HhP-;McbQ$j4I{uq zEju{EXbO##ma?+h;KCt4(rv*(P<JZ)O_~m#BMFOr@$u*`7HRRwby0nG!Wl!Ofveis zY^ynQm{4;`l{J4vF*>>yJBTXZQtcf~-c}>!bB0k-v=ISyQKUut6!uWaGUdT8i-T?V zqCJY{BC4b8DpL&EE6UIv?t!vcX^SNMD#Ht|qemA7MiAkOvXx~~M0(6%D==bzgd9r` zRl|tqID=>~5#h`1fe{pPycvSC2W3UefbAgcvLPfAi#aR@BBKU1LSi-<3GK8sqxe_b zt%$r`wwEG~YhE<IHC3$6S{8v$h;qN%@PemjG{`uu;7ZsMWipd0i&d8P+8GUrR0<~; z81kpgW+#RX+=?e?=8Kr-4yBZ3C}NQxh&HP_s;Xfsp1wgvVhDo3{t@yKgzH2N#lw10 zLkCl}fWfLg2(f;QWEESd7sEU%`U>L;nPNc06-}99O<k6brP5O~J?XB#sZ$ckXl(N8 z^}SQervw7{KQ$WbO;7Esof=O>y0g*PK;-FE#F{c?Dv1g8B%|5xSbAzAoUo>5(<vom zYUJ?4r&dj=m=c)U5znNZVd?cQgiRb<mvPeSpn<d!iOBXT1xUm0ct<*%PNN>i6VZ5L z^^{0&FJ(zz?UXL$mL*b<>{t_vWJ3L^a4)bWz=jie7=)^oOouwc=@@*-;@)IBv%WW$ zmcH&}B-|YfMY<th;h?HSOOlWxr-l$t$0MP1CPi8Zafw)eDBMl-nPdtmbSb765lZUL z{-|U~XSzf2Of1Fpg22WIMRkk_bi|m6L?{W7u5c=pNrh1$QYKQENyWlFR;kPkV37gY zKERy`PR=Ic>!gP=G89ihfzEJ*vINaa;37#N*U1d*jZspl;#oT*f90>FtZ3-MS({g1 z*i}BLcxcJHlS}`SEg92U^3H}+2Nez8ujI02rw%Gc6a4e!73kEjZ9Q^OamkyLSFGH6 zLCKhBBvr{(%Lx1W<Re#>jJcXQk0{x??8w2^!fW~#tt>gT^wg4-D@rDmLRQJP$tw^8 z)0NyTcwe4;s)4&j;C^G`29GYem9Ws{2gA>YCciu3$kJJNK-@=@Uu8A!5NywzY$e+S z?l}_&QFpSa>xHN{l&EWj_ni}teEHf<cg(uunuSe}|I^9mXA$4CtydE+n+59ElU4p4 zSn?=~x=8ST2vG~~C@FiUbj8QF&!m5)n}-&U8&NuI<(!fcr5}U&m5IgUi!K^8Xz;L- zPnXX`9$O_hZ!DepPU&AyL+GC-7Ef}8{s^IxZ(PyQnvZhg%)?6eurWo0cPjbuMw}-h z6<?b8j2!~npCSoA+L$Rxm!2<U8Cce~jSq_a{^P{+ZBZ1-ofJu5$<WdxpS|$3(mgj7 zAHC<$Pd?eSY1XI3V@GUW`GeBmmu@4(UpGIS{q5%N(q9Z3RB~(4sh>cF7dMtpLHs|M zSZb(8S@71zzX1Qe$)}e5vTf$z>XN$-M|A`KyY06F|J<aHA>)tjoe=T+jioE3{7nl> z%bhWnj^!wy1^Ff!<!3U=O`a&vIGLh+cal5GTSSyM8&UpGL^){0(2~~DBj4Fnde9xE zo9-xGU9x_~L&`HNw+A{;S}|xuN&Cm8r$TjVMpH^}A9`dljRS)Qp)IOy)DkSJ3@u#= zt+t;0amm*4SC{<Ox*a9HOUWxo%|vEwEiSGo`d#tZy-SWmEurT60VQrw$;CyPPm0Hn z0OLI;Q%=2LQH{C#<V?w<6Rs|Kds$}iZY8%&L<odzSvm83RLd#FWr!Y;|7;KL2u>da zZHAWo^gBlm+N0$3lV2@9oCx@b{zUwWEbN0je=2A%M*EQL!$IS6lZ@w}Mw>)Es*{36 z*0JiapgM*K6w_;<1l4On?dov?x=;EQS;xr-`>*1f%cvr2sd_v`qmIGZR`DCl`BG$I zD((C!L9-Z*_afAzI>=aJ^?kk3$%S2AMqqJ7{CrZ@HZY0eR<OuwXC@6)kb*uWDw)?a zlaDScNI@i1$G{INNI@Tx`<V2x+!3iD1&gc}cSI^kK_3#&nQ3pmnN%d@)-v=-v<gzt zr>3hQ1${{7as>L!v{x7RIcXnV6t{vt5vd>reMmfKroFoKvAX(LwU<N%Dd<zBRFHx` zBsXwG>g9|gD^yu5%Va)7pxlM8sMV_+K3S!L6!ggl6{MgK$&0L>eyzis4{r@jqPP|G ziAV)0=tDv;FwjrEr{R<6A)IA-NK}x5K4qeU6!alk%MqQT%SiQ8Qb+u~hJ&`RBfp=y zp3g0~fZ;%m6bkyJKm{r2L!!FwALtQenR<Lpqde*UfP;>}bcKExcOK=(gJAG8N<P?s z|HoV~4aBd=YI}+we`%v^dik^;2ibA8{+Ur<Xf975J;BTM_rkeqY{3O^oyyc_Xs)*7 zITvC&H#~WGHB+mM!zi+WsV~x8o^;*j<=R|0*8^I^)&jV`VrqR*-#ZklgZJuiyw6am z4&Q$}62-kjXN_mHRA<)p5qGb;>I}L*vhKB)Far?3JS57hZP;Csq90R_D>cef-ioVE zleDYHUucwP6i{5VHOW%-XmfdtzN460oeT6a910*&hX&W_xIKBUj^}S4qO(Fh{zRiZ z>fOjeKhq?h+)^aA6i?Rtk-2xn8V3D*5~&XL&(tK#)Z>*Jb=+V0Q5|OYv7+0V<T1_F zrnnBmB8H6KlZf}2`UB17NrXDAuMhuwtw43YzW|bvS{F}ADK+yXQXS1dM@w0z9)GS; zp2EDHgPzkQo_tUwwiHi3yvyACV*yC!rY8mJK>q?wvP?bRrcuXz!jI|%yH8;r&m=Eu zt~SM0&T~EtO;Qj0?|+#3Yt7|JggU6N5B_@#Q=RQEfaDOZizh3Tnt2j=D|3IKrFhhR zl!KntB%UeoA3ah$)2{uoC``ZO82Xs9w9P@k8Jffs(ISr&Pef-i$#YtYCq-L1=vGbQ ziReL(6i-B-Gsz6>;?U10MP(c`Qj>ThI+TNKDV~VbVP|!483T!W+`@|&KGj!o4b>#= z>T#7ud9o(TL2;YJePG!qom0?rNh`JVUhM9IcV05t9mA?SeV8cJgr({wy|DzA<6{<m zAg(c+h-Bi)M0>2Kw>zAPS@c~bK?c$cA!v`jJ+;0*oQZT<^nO5dI8l!!=#Fq?t#$wD zj@9Csv~oP#qH7HngcH&3*v!7#88hnT%I|E8K0nxmRp8aJly%7%Y+l7zC&HO*DrV6k z-fUke6i<fI7Jc=uE)t2Q)9qMDw~!92O{|Dp3lG7y7h)aWqObogqQ!L)g+!`E%(m!= z9OR`bf^LX>Xar<LQt{r*l2m+kJYms+2eB;O8K>oWsi8%uW5Cv*OsxeI9Ud@}(UOYy z#53`}*lg>aB-X*rg?Uam-Sp6c9h7)F6H8>w#7`PSInkU<)F*q_hda7sHd(t^Xg7&x zkC}}#*VvI<hh=mmpe~gPuNQfdo`?O&dX@c+-Qm?~i@px2ic!3uVT(5MrZ5F$K2rSj z%||2gT#IH~^zu`4wx<I{NM95*NR$qCDbS53YIDTO>}wX7EZ<~GSAp3UeFoAH=R-k< zpHVzrqH3Xl=)jIB#AGkk;j~4czY>+VEf!lFji)U7a$Qq8DQY$y60vIx*F#iFSS2l~ zB(@|n>+3S8XB}D8dK9G95YB`x`tqcqmAj(R^^1BxhHC+Rx=m=&*pulLMMOtV?5H`D zEjpKCV`UYeZP9_uP$(Ks^~V#T-b@$vU80=iR45gTSaeFpW?LTa&Z0)rt2~C9j6I|h zo8DZvpTK|}Oh>}KRQn`pTLj4#NByYnh12U35sU6Qv88*<l#Y3ZlD***vN5e)#yU#W zOHoDXycdb1Mr6?;978Q7ZnpULR=3z2v#86Gg-xoalHC@4&``Ekiw^&^#?VJ3M3O{> z=ETwIJVex;O!lHKWKdwbg<AAQS5*%!I(H1hOuQ$S0wtZtGIyjbIvQjssS1MLgEP>o z)aWCp2AV3#Z0kIve_0}qOlgW*^m$WH?X~E&Mad_#oxV%t&d6jU5({O-?JvfzsYNej zdCO$BMb~YHLWyLm2c4YS^AnYD%*07!(wXRt8Rqt$te$AwbQ7aDz@l$j%2XbOO-}0% z=!Tuu-HJ^@;~$_8Q~5;4v5b7u?Ty~EaHqQmO>P|$PG7@Sb)=rhn5IN$(k%A3F>n}i zjShs~6F@nOdW>?WPhg6wV$p#!v&6+FE*d<l3`(lEw>vgw(W2#x$MjLxolK0Wo>D&M zP;A*IR!^=jFURKewCRV9ITSe-i;h9Cpsk!zneIy*M%%~cuCZeW{U|hnsr~)^Q@XOz z<cVv;Q_@-IZushKckg7<%!w8o?*iSCjdw?Br#TeoUM#e#xuUOj8h2`y&9VMqpM}4c zGayhtKbEP_rcxM(Kwx`Zbk#xHss)9BuE46`x;SwYa0N|kh^MjB9YZKTxe3~08EPBB zmOhIg-4swtPzd!zXX{GCG*B#vg?rmzh+s&KN7BKT=C)9v%7vulIZ>9&+gIy~ymDGy zbWJv$sq0B*6PYEQdZ?9K?Xl?MSWhywKG<y)L}zs;6RXEy+uQEC;pxp_8{N_muGCet z));)q2%$o7VMHoauqy$9DiGKAW>v7{HV~Hi?2LMP6U-2?8xJo1Y<0j=bjLzPz}3iR z@!*W!iK$>fI4WvD2tt#_!3L)w2hNX6)XZ4a!R5rcxvJW`Qpx_{x=2je1wquAYSDi- z(Ua&Cg2ABWq_X<ZiOMk_sxL$%lazr#Q+in<8taTFVo}O3+eh)*gf&g+=4^MjAfX3O zXnQJ4?WHMA56)1u=f-fiXiog(46kiU%VA0Ivo-99oha7#bR=c`^3f?HP!7>-?h7%> z<0OMB!rl}l;>j6~h-4Qp2;`%aVtP}W%|$_?CLnHgr4=bi*r0S!kh-c>3L@okMh0~; zv{Y6I67l2=hq}wq0+~QQIw??Y=zL_!(1SBHP_0vAB%9OZm-;{z)dMn+4SEydk`HoO zo(8#z@F5rFY?2!Y7kMR=LFd^Q3#L*@>S7#zCo!_BHMTmqu2+!BM<+!9;zX60m+kBn zJ(k1oB33m?5-*R7p~}HPI2Tg|ng?cmQM(S>UN0$?XRS?YdtIcck|M0WJKW<C?!mek z(fCoRj3~6vMTndsS%Dg-Htcs1Bax6}(%N1ZDa);_aLQ%Bi&)AvX(8926xFV=I~i7? zqR35zOR^%bsj~GD<cx5UqwUgwuFG6`oMhA6lXgd;pN+wUL&acXceJ(bN!@p-M}tX* zd3kgP+MeVN)SfSJ&r>4<Y8J&3t21556Zt?xxYC?S0_Dpxowb_I_PFR!@s=cF^VW0! z!p|<Ez;qhi!tn%XyVu+FK3ErL^-(F<{lS(@JRY~ivz1NIss}99bXPK!v9i!TPy;i> znZ!VapjL6UbZG%fMJ<QcbcC2%kCf>`2qiw)5{b7c9S9)~5mKZWNIB1{gFU^O^~hBL zeZ$DSL$@I&>_NB6&H=%d9(2=cfT&AH;&D--9T=Cmis>+86oD-F)>t~3O+{k!VCj>k zSstnlCL&2X5*j4iEH||k>VvU2E+0XtFVoSDDKkt$TGiT^hc-`;BSR}{a#I=xdci#5 zwqWbRwm`_D)et&AI!jofRQ<&|l(npRVe^usnnS_n`Xvob&GW7Hqn3o`t!xk4n7X$5 zrY76Fq&es!P&w)@4l;-RlY^qn8K&3BoF(WIUP-edC0tYwC%H2Q9|F6$`~sa-v0_@D zn5v>QC+f2ZxRlJxSJSP!B>5mG9J-BC2bGSWNQ(z~BBu!L=2%r9PG`h~icMmR5KbB~ zzie3;iTk26F7$NFL)i!wJlgBz4g?U;m`e7@j>By7V54Ripm=2w(dZwH(+pQ}SZkZb ziiZrh);4kNMDn8wM+SQa$F*s#i*XK#E`_RCyzUO2I(6mMNp+Zx%nc}!?fps7`#XBJ zmW7$TBALmlWetV{oC2rWOpROsX+l;7gKZTdTI55JlU`)AstvL`tEf<ZnJKEn3sU~7 zAeWSi#o@Iv6*iC<lh!4N3f(0pUqcbSzg<}aerjwFe|3F0VQPmq=)$=4t%km4H43UK zZ6XKek!^&G7aj#GE0)Jn@y_)sFPtS|4?X!hchmvL*ffwtQqxeOqBbAHKxLed*O?#F z>$_r+wcc(<Vb!*dtj*ZLHP`jTj*qtDRE?*~FLNvygrT4;3Vu@2bMr8XtLw1~MiU?b zb%yv*_R^A<8UZKg)gVf<MnyU?PwcWEHG36mwcKO)=-{PqT?p<#xxKg3gn=5UifMTk zWQhhV9YOb|l+3}xwuB_D*b<VXM?vbgkQuR2l3KiW8PZ!Zy{TAVC=tWkAZj~LV7h68 zEd+ABFN3wkXvnc(&eG)Sxy-siK*k_&foh&*cS>X$W#htdjyu^Z>aoR=;Vls{9@Z*@ zN1LMPy#t{do^o3z!}f{{l+)5AOLB^}1AK*+HzlzB81BY6C$!YcVF^zK_%TYWu3S|& zN8%Ix!5&?K$0YPJvV$nvjYV98EE?;^;OZAu^`cl9OARz{0`#M(Z4LL=Q{e_%XhhUG zt@BoeGxIc>1EHeS%<oQiglTb0K5#IzRbqwN92X&3FY~okQZorm^X%~jX<eGOGh*0b z3P)+`Wi=qSU?STi9vWmiJ&ZnauR#<>7o{V&XJcfc(Oj&uLe8RSK#;YdwlRr0$2UuX zVs)uR)^0A15avU@#)+#4fXtKdbUvY8YNyD`1>xNM2y;@`$jr|fA(svJpfV!^0g)X8 za2hnuD20Nqd{An*(18GoOKtJFbkxIBu%)q&DxzF@Mt>i~><WmAa+Ou)7MEjbnpoSa zQE#h4O>NVdu_n~ihrXP8B8h~oK&4~nlvK%8)0Mh<v)hc_++b6Lr~#PvDXJW7$#@hy z_u{YyHuIev4Z+5`WsBOax<!jZ^>xjm)?i(O_8isP)Q)kfb;*LJc}?wYp(V?Mt%Rdl zr6WzwLJCYrBn>fa&ZV$M$njFL?FD|j07O<%j-wcz91XFwI1Pd&QOZ%@Oe3@_d&N$c zOO&zllsgt-Mc7R~P-8T&=5SAp#ws_;5G>Z*+%jnWVo85ORVG7>8|%u#3K>%-NedA= zV(E30BDWC%lOjiaJ2{icDWIaZ5wFxXC2*7oTiZ>ftdv#Xh2<{Fc|%~JM(s$bt$Q+E z@(JL`Y8AcDIN+@fRkRqHyVy-5lqhFgYZqbbXGv#gI+kfpW*V_!7*!D~g}wF~S}?bE zMWb30ZD>1NJF-Fb5>;sIaZ?4w?PrJ9sz8S=?6E2hGHnHeNK6Q9W6q!w7I0pQDAk*M z5qUGj*WfiG^>XY`lUHR`VMec__BDI+DlH7(Wtn()8ZW$wuHR_KS}f<C-D%~OX*3gI z&~G2NG{vPV==Q?Bu~51@2|L^OG|)z0tSst^a=*YDfy`;p$xv3=UxLd*^(PXhYCb*K zOl`E*)}>abdF6iXf@F6zmTJO!&^jy?$(3dH8Rv=`Vx8e^cSdXtdqWvRy#YT`TaKYW z6H?hkZG*`xF>#!wj7Kn)2}6+(Z7gSFfO6$d&Tnv9EtAUPK7j}%3DcaKV@0{DA-OsW zduxK*=fEuSb?8ylB=zWHsU!-FOQsSnT|N}fi4FKT4QT`l=c<uq1wQ#uI45n=q7-D7 zlCqHD!W1q{jt`=HD=eSHSsS%!A;xj`6dtEI&0*9>=#N3#K*&lI%5@e_wu?Z(;4p_6 z8W-hS09mAJ$Zf}1Ll%u`{1qT5*g@$+ZOt29Flt4USuDR6L>#9*24iZJU$nBub5c!1 zs`xAhKMkZspaO)nvZs!DnBD=It3WN5qU2%;O3#THPyp>u*fnT?><!RXiP>Yx+G1kN zdSY!fYK8CdI;$Qhp^`o5HnTmkL?$gNgkMi&)D#>ebW>=4Pl)>rpPQ5NhuWGR1;yI6 zG8>URti>wd0JL#hR!}vZ3@d%yN9L-I0^1+xCvp(STd-^(x;-vB%_gcAEOr;CZDvx@ zlP&JilTJWUfGjOv5>c|qtQgMiMQvIW;}I*m4myL^9bRv<7zi&1%^c+UTC!~A8ky9} zjrH(~g#k%bpX|=|B)r@v-osC4gK(xX1LL2%XnyvP1!(<2M$<%xt_+`tw$`9ij~*hC zvoch^0bmMM?*#DnZzzFM3Rx-T#hJBOC@JiJJyO@mbaU<M<AbKMigB1QXw^)?#8C~^ zi+3&p@1~rLh!RBeN9oJ4ur6t)HDSdJuULrq<A(Lgcr}l-jZei940?@lqk;I_p81%C z>FLx8tF*k8$LAD+YxL$GV>qo!uuO*|(_9ojGCkzfy(o#g)WoSxeRLB;P)(Iyom0f# z65)JwDUqX0<OEA}oM!%$Iz}(0BFjIKv#IjT<7}cF(>R;Je->wlduxO5BrYGr4xPhs z1{OAjQ@Ks=vbZ-c@@XvUtZw@e(aGu7ukqNUNaI`#_9!B$ByPM)ir0#C_b`o5F6o-a zjeyZ2V>|S#Sw<akpLjCs2!{<&M>JKwI--ek)e%jQqmJnCLhDE#h8<c*IG)1l2ow9x z@>LP~b&8^nn4<|*F>2B<BaOGr0u^e5od;&qn}elR(b$Vl7^=KTfA)%UMJY#NxoTwy zFwr?gOj9CoFjZ9XdaB`i)XWn~0+9*YR`Pb8%J6ej=IA^*SB*x%i+9G>uZ+`6lBfE! zkQ{ZNL;Wj02NqcCb5ifnDo^VYh1GYlp6S;i=2X-e!JVtD;-rpgXtRi*Dq6KBD^~2) zO1)aFChOU@KWyV!t=Ri61&bY#?OCdK$7<L@sv;^a)gWOj<)?zT*atL^3KQd(%@wrC zBoA*>xeb(cv}IHo5*4e^9VXftrOl*j-eJOSliXp_<tl=ZM!!uZT~^anKI?a}f^t*E zXZOUL9<DC|uN0BnMh24}zFP#I_{{}$PoUpQx=-x+hgn~SJY9}2eU1*um)5^K@+I}w zQeU&JK;9kNRe1`duzt(K<~w2+m>|*C#B#W>%Du9=MjBm#w{H4b1x8i%pDJySf;^O} z{^|eIeNXfWqRo4<CP%wgN~)$@CHLbMTGU4@>e@E~IKzD#q)WyCt<giBuPJ(nbG1Vc zVU9-Vp)0fn7Qnbeo1Zh^3u}8$9{+|{Kst;O&S+Q#Fb>?R3J~II^R6`IsJHG#NZBL< zuIT>%b`~W6u$?0-Drg6RCNWWEhRD{OavpM_vf?H1?L6#anj&qrA#ngkS~D<8Al9C- z2fbl>ZYjd3#Ym=V`L2@ewbTqjm^5mU)}0(&ZepYntB&Rg7)KcL!wgf|LW|0DGm2jE zR?84h$xE{_x>AL2QOU`y=BG|(dBAC)lR3C<gpZ9l^rq8o^5qU4y??!~s74aSex`4s zuh||;la9x6tA{CqBkQm@VXq1qa<FlguNmSkUCH8Kx+I=T*I#oSmBf~<ogh~UyFy)M z><V?3p)1f`My}w(OM$kQsHE!jySqlq<1$c_8C9ZG`ONJ<VU6qhuX4y&YL50Fs9hXR zt*sNUKCAaCu&Uri=HM6ohcqYnOt`H2c%i?s!>%0Ef5^UBv{^1^wS$AuK)Dnm-U^Ym zr~|W}HElH^@)5txo+fkwLF`l__xz%@>gwx*ZEd0XK^#w$k8Sqjg1R<^Z3r$3;+z`O zEDWwhh<!DYXjyHsNEUD5+0B{D+JpCRXMtMkBIuf*#(1n7uesws0%WZhnJa5)n&_p* zp1&{NeWi!LQUy=FnB6lilNQkSoq^ItM>Vt=qX5<6>E@(Ty>DbA3sqEZ=-F1kmO9(G zh03r{jc_E<wOVgSpWiGs>GBw)CRq+s)FkmYLQRSS&CmQSJJj&h*;$y)smXoK&HQ>B zhNgG5K<q23?h>sG{lD_5=H;o%0o4WX$c~p~<&2b$xymC<vLW+vrd-V}P@}fT)uc;w zA@bOzLgkDMgKrn!NphSS7q6C~7ZL$EImNn=JkhCQLBz0UoVeWlbnF5z<)?8=!2o;e znku)jS_oSZk49tmIa4_VxRALeVC`GJ380gJ<alto`Kw!TZA@Rx$?d@8=Eb`#xD`Ma znK_c76SNO87&Q8nh01wzhOKI~3iF*~d#ZZ=?#$bqg26o9njd+N?#++Xznk-;EU>#P zjCF^0d+t&wtoL(s`F4VZrN-zC*{}*smj;%oqUt6DRB|6IS5?I*E*w&a?8IFn=soqR zyJX5mUh51M?OSxX1`8qGY(A!pK58tL6sPAMWauLin*-$%TjMr{f^oxGbTlzHrBhNR zWkX%JxMHCt87I??UQBkxE!7!-$R(CKLMKO4!X;GRq?MP*DHIoFh115%0Ipueo~ong zFzK99D#{UxKCoL@yQnwfs>HmqJk&0U6)e#`D_TQ}5VI@5#a?SFq$WMvr<j||8ABz# zpW#Ww0Ix3?*;xp;GsX%!0qBV_cP9H$yCha4mqd{*N+#E4dqriU8?i*w%^BtrG7W@W z7&*k`3Uvw!Ol!v-j!P28WDK2-2j^m<gN{uY&NG-^K@qx<#f5P(kf|mIdpT)zwsE_J z)FPNYusRvtVi9X0Vo5uL&Lw4<Tof<}a+j}%)F})5-wknGSc(kcCucZ@WxUsjPywA` zfok#oDlR(YgX=_=!Yi;g#>r4AXPD-~Nj#QrPqxI@#ky&0GKlMAylXB_8n;NhUU9<( zIU1N2N&5w==J`@M1&Z5ToV^AFn&PP9I2M1*aHp_JQSWjRvt2Ih;s8`G!DQBZv}jMN zy8y(3oy<`>s2#8`I8ZkLt7*NbFgzlxwF*V|PYB62Y8fB3^9gFBYlCu-`-P!j$wBQ6 z5jRG;s2jv7aTih)oW!YA2p_HcxU<y1o;cV<mgcHa9!ggPbZ*yEW*#Q)n%vdFL+2D; zMdw@x7A}^%{Og-10&f;oRTdOU-fHcM#xWsPCL(TVqJfoeT@gK#@;DP6z_}oELDSU> z>OR>%gl#W=x+G1Lk_?kFnEL>@ht?@fOe0*TruPJsoPl$Kb01rx<DJr4ttfBnPWFou zFqZkK9s8hN8r3q5)8_NDHwz;)XNXcezj+}mo_{i^iSo<<HBF9bpAPq*>*?SECwO`2 zchszo%g1pK2iX`hGpQmMavz6$->nK4WZ2hv>=?;de@Nq16meiszvurgwUsjY^&!W( zYLTmI)mFSsB%&9`Dvaty=OWFEOSV75oR^u2gO=Y?pnY}BTA_1O0<VONH}Wu%&2yuQ zBW;T-sML0VI<XTdd$Ey$Eep!j@=#NIsGTl%(l74Knq@>?*g66i0iE{~x6?_#xZ67w z>%<F*UGgG*p8Jb{jRq0YRz+7)2g+?^jpRWMlMj>uIf+{6G^l>l!Iv~pj@cxCF9AYr zk1ur<=@=9*LdXSF>=4-ZvLLra8vInk{?*#pQL*q^M4}#jqo{0+b&B@W=^I?VEP=cO zfq=dwxLOhM&|pIw!MLi$%mlQbfb$w3GX?ZKKnFr+^{~y2Dq@+@h;LNm>orLGw{LDb zvzokRi^%(0+QrR7BAv*t7%mx)#8iUQqAJ&l+C05A))(&+=77%inN+1_%&@D}Y%H)c zm9<zT$}7`R_uT@vyEW{HJen@<k>VPqpLb0D2dZgfmCQnXs)eS%qS87rJ0_wE+^UvZ z+Y(OEy+YmV8(i^u11Q=Z(BIKL!p`J5{5vWZT;AJ^OTQX0x22^6!?%NCz}3-Q1LVVw zDU|@dV@N$2dPA}6fmh%%G{1J@c2F7uqEj`Z>Jz=Fjo3knst}E&E)m7uP}B>X-W?N# z+Y<ejMu%aPeoIMS`&F#Vx9E}2(Y+P&p&;3N`fdy;Th!-WKHpPtVg`UQ!#<UlM*^8{ zJn~|w!hkEsn;g8fe?P!*Chw=ip&+ke>Bw}%CJaoxJSZ}&Kod>B>ySf3=S6D9Zi%{g zEKt!9%Y-9c`uZ``%c<A2Ran5y7}Q2?88$C+%}M7H<5OEGAH~(3Shf+%cAfFnS=`VI zk8ASmKAni+x)~>9s3i2fT3iw9mE=-G+-ktzSwM5e1eQI1boQ4<WQEXKB0fWcv4yTs z7DC8OfX6L__Gi?AnfBz`m^)pz@@_(xq>9RA=@`EX?-U4|%|FB?L2NI%S&@7P%EhBU zqvA|{6@Ng*iLIcU#+GF9)e-*4i2hK8SfcU^aYg6&fQM7K>oN*gptxii-zJFSP86{y zCN|E32F4XrfKCCL;d%GXOhT8SN?L^Su49-Sxwg$r8n;whns!QUN|^Lm4ic9!<fC!R zEU&{yVEXG}rp}Kg=&U4~8Lhd<ldWkSDacRYmWR9Za|#oZ_`4zl5xL}6iQBH|vkr^# zsl4#&7;d)9DZ<rF*gGL)SBP&z6d=T<0NzQEOIXefR|{Jv*2P&lE$4cb$z?B+Ig5`9 z!=$4dq0Kk{F`Cs#zvxR{-LO8OOhb<Ig-tOW1j;3^XdiS9gmG$2yxfT+V*(NZC#;a@ zXmaQ5hh^hrUUZo~z4#7L&XOurU6$k2Y(VKA?I`6A1uI*#bZG<rI`I|ah6a51%t0-; z?qr|u4kP<k<ZiB#af%91*CDgqK1E>reTeDZS$R`}>{Dz%7oGkpUK6friqWMfqLtIV zUARg$mNv`WzKGaqC8>Jk9j}dK<*<@+^C}yJW?6F33skiy$?AxAGZ*$v9SF(*n;c)q zkk%pcUOhS~@YxO848|1^f`p%)G?20^&Y#Uuk4C1*Fuiyz6`dyJiZAW(lfi*lDl1$J zfr|E|*wzs{AVL}2>(nPu!N<VmzHXm-cV2j1qybs<iqi182rD@0iqiDDNCPs(iqi18 z2ysg<5~}EIkCUt>ctRH6dotU)Ja8xRPGa;?sDqJAE*>+~$vM3Z2W+G+W}OrZi#o{3 z5~x|4jpO|V`zu!{7dOhq65w#Ya>?+y2rD^AS7e9ZMO@v8k7zmdaA8~wxIB#*SPR?Z zBCC)gS_ji>Zjgw4(=}F2dytRH7R~n(x}tH<NqxlR*c?$3jA^J3v$yl{eb-Y7^OEnV zoe?oB6IoW+a-7UvJwGcbX|DOJT|kbGId@vkHsCvZ&CRO1WyGWwv?~I2(dhho98Ty? zuFmT9PkOP1mS-ul`SoJw7LT}p$obh``P~Lz3D#Q4*A~Hzf{E2J<)^i}w*FYGmqz$- zB%|=KA@NaQvF{5*$Q2I}sij%^UNG~<qTT?$KM%Ks;cnJgRE{F_E=k(+&0%k{sgaqP zgSjxBd-W0)oIjW)`%7>~CCecQ<LTR#gIfYp?Lp;ArJHd3Q|XpqZ8UBXG;-E;S*EIu z#`TyA#TQ~aRSwWhTNds7R1(L+qB(A2N2RS*pR^TkR5_T$2W&$2H*eVl(HyZ8=u<-2 zq)-=6&YGpVVNH{Wxo8gZ(sXBBG&4P=kM!sb1DY9#WYNf~Bg&CNn)-M-UGl}nfSM|Y zB)n|o5C$2G0s+ToTk&c0IIiipLT&hnb7zF!^07j7xOFccp-&~ldTtBR2bgiAP=7qr z6~fnh<4K&q2g^qBSMK5I&uMqyW1Zpd-Y(2Q+CmOb6yJyjt`kS8gw!tFd<uV@-!h`- z?pUYLB#BN0Uff;OB_8nMESSRa&bW|(4~X^CM{kLQo_p!ItL?$fp1`k-_x6jYEL82t zV%MxKl%<vH2y=$TcUC*;-6jenf!fnaU!c=IN?Rv?GCPEg57$Sukt3E0wkVM@g_Jyz z9!iW%iIEJQ20H=rDQ&UpN^e_fQ)63QL)VUQv_lr<>SR(q+Q?Y4lY={9wDTh+4i58- zn4PvJiJ*_9Q-H;sicLw!P5@<{0`%<#WF)>~4<P?0v!Y<IfsIdi6Be<d<t2Ksh+#*! zgfY}8MUX|2LQpuh9v5(0Bt?qoh+%~eaY%so+sG%1M9NOf@2lIQ)d$x(z#<kwzc_?X zdqm>2ZfW7;XVG|PC$3maXK>)KhrU>4g%+d2M>AdYAitK5hnQLtBdjDw-NF+o3{)h{ z?+;obHMoVk@rhs|4Xr73Vl0&;Pp@oSi$ihwfKM_<QC%0~v*D1zEe{$Hk5)%CN3b9h z1z8NctN2O;zOWQqjgJCbkqjL}6ED)DrQnJ%@qKyvzPQx`!VG06?sTU$nKXSJp5miB zfeG4;AIS|zVi{;7cISnMvN@t64H=JwPKeX;Z6W$fIKDHSj-!nDOWK|<YV()GJs*;1 zy!x)ZCd20rQ6f<xTV8?JmZ_16uNImGu%nC0ram+x2r)D8A}yJajhvoU&3=L+hzt!u zB{kUE632x?m@JD7a0XI`?3OW&@`;YPIz$L&2iA{wI(VaW*dw{#!|lfV@mGU?bqqH* zb2-UeFfo2ym70r+(d3cEiYdH1ku|6;;b@eqjND=;E*FZT@-R*p^^A-sH*ZRqR5sQ} zQ`^2!6;wBj2sT1cqamGi7QKEP7vPE30Aw6{)fj4w(yE9@wYWI?b5mD@RTC3k?<t_D zOVN;OR>&_B&W%g@L=%&bx}mXGH8*%g%|jO<S}QH)m?~i}1T7I?#B^mOX<=y2WVv#Z zWLO)8C?7VRW*>>Qh#0vTSsO|t4@E}G3~(WR#8w2rn~LG0*9hvpP98o?215(4#`*>N zhzZC<ImE1&LRuEKh%c0&P<+I#_Y+1LsdN$<uOu~N&&nmor%SL)BTlcr;VyI~g!zR+ zvI`PAImmJ;q=-a?g+h?UB6>t!<ETWi>@@HOqBMF|i|-5xq|RY{Y!QP6zS+spELK_8 z^5RF`fUCHTi>96E#RN)zoKXxLvHlR!35j?U!`g^%E*V}(UN}7zTAj#-BJ0)#DjlIs zk>E7+2PstbU~9zUM@yJxv6Q8|3CfiMr7Wc33%L<eLZr_jDxW^JoRV0ur)6OujdheR zj83bX^RWfWqj<?j(&EdpJuv5#cR=N9d&28PkA!BU9tVnVx=0q?w~yFbRiep15a%== z5x@r}#h`&fm&?Zrwf9<%BAQ7b%bl(Afy$TDg~w1GrPvN*TC|@iHWGTfv!Z8(r6=e@ zU2*KuiQH&QPh%q4QxG`?7<gz$h2ECt<|ql#F0D{2{Sjf*?&C1&#NEsKnHmJFHJsr> zW`q*r)0!cCR9Jif7A82Jym+Den2B<A%qZz;9tlk?k+yVDEMh64p-d_q$1UTOSKA>& zt&<fHT`zsYT+KWWKb+EE7?-$Upa9aI9wUOulM9RhTp|LqapuY~e6^u<VYfy0vK;*7 zXM+n&$s)n5b3o3k3rJUQx0A8Zgf%(XCKnuEPu$5UYH9&`R?)l+MIfiAR7XW`8p4YJ zV(}_>m7O#O^T-)9z=(-A+B41~$cBieNL4|F7P56=KCBEBF`ZGZ4j+@GLriEp^u!E$ zY^UB3Es{ri4h@jGBS-me`7z%f2N@*MSH}%m;(Lg}9x-N#XC;XYfoMFv2D3f%Xfi70 zCmN}HB-x8`J%Vr{fxLDgS%*d-d1WB=5;PjFP9V5Pq(XXSaDWV15{0CMQ@Fn+GC<R6 z3!(jskJLICzo9gmC6G8QxOlpnnWC2;BfFJ+<tzs|v$WgN-gH56F|7NAks35vp{x#+ zi-ciGHicmjSxxyPe0GNRWNGG#P*D=n$J`ajZ>mEfWG7cO?bRfheABnn$<m@)XLzXz z=$dS8bohjN(m;_$a2g&_T}W>{i&3L3U9AQM0Vz_9BpNBCRB}5ILAD12PD(M$2bdv! zIM)`_L&!`$T+W!`Q)FTc$WvHomTrlxpb_)-MM(zFz_kPs%X;D$eOtN;111$00ai$% zWd2o=$p-?tsvrkvZuerUfh;yn8Ij91u<eKo%}zea3ZT&(Q7t~=6vp?3==D$aC@H6b zEtW#d?jZs6B=OY|)G6BT6_CYLi#i3QfQ-brgE~s}Lp?#!3Ve3D2a82AK>7qtFAX$p zT)E)Ul?%^YxoYSfE3!(^$!96X44`&FaVi|-cri{A>Y9jUdT%z}g=Iw?wU1c(S<%Xl zOvWvqy#aRI-0K-}YmAdk#a)AmMl6MUQwkWes8A(2%VORhI|G$CfzoOzIwMaEluOt* z(oA&&7)3FvB4Y6%C09#iK`GpR4&JQ9c*S!_#4hrKy;7npQ00t)w)4h`^zf_v(PRZB z3~Jh?wB4*e$`u+bSY1gdl=B-W6yus6+P+Cr#n4O*bGw<5%ij7>XnMs<Q^+o19aO8K zxe9|TSEW!mi>|GQ^2LFZ`74YwMVStFQZta{W)l;dsi7$bd5j}sPT7MwWm_22b2;`i znn=+%R<Rj|T5DTiRq1}b$kd9SlOC9|S{S6%Nt0o!*lD&0oD>$Qq;*C;rv%>Nw<ni+ zwm=%-n^xH6L$}t0JrjGl5@@Q|qN{Zfs>lV2?1~XyoibR&v(j7!$S9<yOe^zH8WfU9 zOAAzzH0)EQu>O$j6a$1*P~&u}os?!gZYf5D?jSqn3Ly{IPPrpyl#16$=ZMxD<j-VB zI?YH#0^eWsOR~f(Nj@A79dd-{VYjuZv9rLdjK~J3E?#<vD*nMr6K|+iq$Zv1Ky9Z{ zM?NvnG`69o-C!8hsE0a?2Mbx_Tv$0unAA|%Eu3dyqJA3ulr-!t!8UCtj<!r7K(h*7 zxIja%;Tck^Tul;Td^LfWxI%1(N2qU$o!~F8LhN%3l5S~bd7{+nK{<$$=8=c0hD}UP zt5+GjGiX)ayhlitIXTobLoXTkY%;g<Ws{sp`cVWbGD$I$6de`{J8qc>`YfRC%DjmQ z1VF4vz#JiF<@e9&Kp=L4CZYIbv1pV(S0#34$xu#;w?e&&Oryp^G?V~-wu~yH*81AT z%9mr##zAr^f?~I~bL1fkF_zg#d1^uqaB7RLMy^^Tc1&5-3N~doZ{bbD*RNs9Mrdr2 zPcoStEatxU-X4uM=3bwZHpf1o5gYa?+IS%mlNq&Bv7Xkx{P0fkw6qaPVzoUT5ywNw z7!i9L3Mt8JX>*oVe*!QwR%7QkmeQNTboPc;{4p!UtCOur3ZnK<Nh3ETh^%-|M;069 z#2`j#oHJmb#EHK;0*?x$GX`Z%AP#nN{9+l%5$IyCC<i-MZ?H{3nWZkqMIrd0UA!o{ z#i7-yWWU(KP6y-oHm8Yjk<&Udl{1yFd?EtWEuEd!VhbMOycJKy>JCKpuM9OI{~P(R zhAWn;bS%>u^imPJFj6`=B>G()bxjsCEnlfJz@3ii`qTl^qMuzt4I=E#yD~x?N&qt- zPH<*~3=~X8{sgM&1dnlk2d|2_FfI+MMa83btD35;if(OcVCG@-0P4sGcQ`HDX%hYH zimYaxFdQL7KDdIb#SsZK6+SBAOtCmffk1hnVxww)baX|uLzl2{o9v82tJ*S)YD4Pu z6F!I>vDWJEtcnwyt;uAjNo*ajT@VZR%424W@gTmqXsyL#6HIFQfIOXXROmLbcH7Dy zX;j!H(P#%!xe%76LgBTT7*;cJ)DlY~X@xzqO-6($vCq;*CsEcm(vc}~0^P*cV@)}> zF5`nT-$CIN&|zYw8LC|x9g29fU~xFT)><n=f{92nigjm+Q#b3h_b2H#rq-Cr)*fDM zU)ofMb4_udaP{F><1H?gN)Dnd)+wj+(e8|IPi5sfaicIAaX{UJG`@0ckT&C(5x=Rd zVkQ)wH?^Y$qK#HTWwI$;c;%bZLLqvOM`K&CXoO7i2IyD1jUdPC<857W9B&h{n$q5P z*g05L0C{e<k!B%ysZ<Wb632Ck31lsj9$kTr>V^oBu_gjN3eIiT!X6RVd*h`&`H-$C zucs3LbgU2W-J|M7={$k+T~y1Dgc_N@$Uu#oegJX#MB(*ByCtFulBjZh$qil1<_OL$ zs<y2sE=tKIL80?-BC~KiDfWlrbQQXI%uOA@#Z!nU9wmluyy&kyd04~?N=CopQgJ@r z%VqaEc?8jgphmHK<rsmv#Z=%*1XowUy#+GBKP0y>am}@Af#S@nU3}t=PZgF&MAfoh zEIq^&rAtaj+;WEJkyL>U(hb`shu$mJVR>X!+p&pW!zHH6&_;yk6NO{HX3tFpW`B<t zuZ!kxWK?Hzv*u=`E99uVbVemgg3!4cae+!WD!vQQ<Y<GzV0#D)ZE<>&T!xGHFH~2f zu2<pRb^k8IkljV{91)n3VPT2uZpEI7*zzAxU<<w@mq%h>G9JyVTcCy#W@fcF{i4`- za7HiTX4w7=@rzWYBc$GF_l;@5<V>#*C+e}>)Sk3^&LFCq4?1^c2>45(+N-kRn=q?) zfxiK--K%^9=Fl{L<v3{Z!#5Fvw{>yj!dgtMF<-Ro=WijaF-0ddr7ZDGBaj%v)7IL$ z-Z)?TENsRQPFQDgG%V2*qHRw)<%~x;dBQ_9oy5LwA}T35@p`X364rxNX`Z!q(vfYP z<w_=8IIv@hnM_YtfV_Z1)Nd|#zqizMoe1W8PtB&v^QM|jq|V^b>!!vlTQ-6J+iG^W z_XRXw^3NsE%kb^qSd*Q*<8BeN0pYoj8%yN$h7KY4-X*2eTc9|3#U3VRJ4W2V*X3=m zf}Se$Z8Okueb$aiwco8-J4SMzYqAglwS{k+9o`GEc9dY(9auX^tbOs-j>%#FE3bBt zvOYIl?I5k)cUtWjvAQRAT@dB&?7wZLGy3XpE6UqTix*}Gx}`~{$Umipy-BQu_`OT4 z`?*}VVab6v;ycb_0LJL92JGHcypP6q++MU++_tEO{?Mvv`jJj;hvWi$s1F-PwAhM+ zYChNi`uad6UPoHHMBT&QGCkWz>$rF|z;Xl-X%*}M*f^Oby>uN-8iOFZoeI42jw66T z)bqNr=hJU3eJvH`X{`QhW1?T)EZ1Q<B~m1~4sfl0k=azo#DfslITq|v1uFsLoaiYE ze4w5l+pti&z3jweh-id0wY?&UheY7*WYU7X-$WC|$D*Vqw^&$$R4j&Nr0-IrOTSDy zOB;0-ttmCb<b*W7Z?n32NkcG%FVck;2iq4cX=rjvHLpCyb)2mWG1Xca!LA3g1KTAz zYehg`U4T2tTu}&f(y%P$>ZtDxbLuVm`T$*LQ>&_AkgggNH`hYC><NvG&`cHE!DN2v zt3IIZBSWl%qC!&y0(grZADj@2Pv)gNkkUdEN4+Yi3Wzn%%~+A2(Y|0#r&MH*nq7G_ z$A?4YO>Pb&-8vGe#rwFZcs?S962{jx-9_ZXBDBcCg4ddx!wKBNw+JtKbc=dvQ<7|! zN0;@9MMHI4Al+?@&zNdfQQv4@g==Wknu4v1EfbXt>BEh;?aJ8prK)gK8F^(0%aL0K zg<Z@1<Iz<tR|I6l`{a@;u<gzxQH8xZq~ztxA5G)Q9XoBB#xLPI&~8~qvI`6qHE?=M zD&B+TZX8WDTY}NyXabd1-<YT^=a7Xi$2BcA2|Y6yL%d0+jj#OT)I`|X+na*CCXw$< zH$Mw?=+5h+(HMX#WR4oNTvnCN;lk`HP3}7g<kwsENqGvyus-eDXbdLe(+g(TP45uc zy%(*fi9RGp`!FQsYa%9@r<E90#6f3vxzqJtkaKYtS7StR(E;vJ@s5RN-qC<$ci={h z4x$|WmTrOGHb(uW=%Ym@*=5Pv*jcV+h;HAEmHS+u&P)$c+ufVVJq^{wZ7sCKe1&Bb z<tr+K%FJ5dxO8vs7wX&TnbOsIjZtbkHwPH}{aC)i=r23%MS)6;tnFPm2O_R=bXtqH z(MRL2O+`L6ZLl_)9&~+Tm{+0huco@g#m#{D?uu!Fz!DHG6Wu*kIfp#){TKRBOCAO@ zNQ<hdOXsv6`>eXOsO!oerAoG_q8tgc`@#04ZMP`PPuMA3{$#dLpIh$gbm{Z-<pcG) zWa3C8#}lDYj7@4!3)G6_t^1NY7_84*_id^ibzc+sjrX=D{&in7Q!uv5L&$TSNe~5X zZ8V<M;3=CszS^zHRJSii25+!Bzo?s*mqf0;%D1m*`1Mk#I2@G@9j%-#>ZV@qn7ept zX??}O42a*obfWUGz)`xvE{AU`$u6^RDG6Dn^8edP5<1Oav}9i0qEM(Q6t<Qv4=rn6 z*u3PZ=1^;JDR~*xFKKQL*0&SpsMaQYa~%(D3zoGvfK+fbv|vWu+(6HbZGvn`>q3I~ zh<jZ_Lu*rW;}Y^hUZ{O#OE9#!ZUy;ObPMX58x{$%b!{t~>nW&yL9kwkXlx4wmj|0g z?09ZjvS<;7+bm7Y+FZ9d*br)IY7v4IT}x}QrLI+?T9?q5<%zqky){_3n4a3}TLfrY z9BdU2?JEf^YY^zRruofvBEH5Zsi2J4PDKjmhBI`&7z;#rmM3Dd7zA@VbV4?kjp2rZ zWUs}TF0tX1R-bo~1RMr#ymOFA_KH0!97K)au5BE`kK)rS;=B#Z>knt}s%pyVOIwi+ zQURyALU`&Gry|o91IS3pd#(B<V9K;&$yf;%o3;|2xQ3_y1pE)-ZAiK{B-tB=rXh7R zjlj}PG<Z8c)gMoI0^Ed%P4Pfzn9kkdu&X#zDU_DEBC{?*n`#tDH<5#p!-S@aj_{ga zh@&(Esh?%Wa=zIiLW(59VNw|h$B@QR#AF1g&<uZ!-W%0^WIC<}Q6(71#-a8|kt#^~ zI6o<JTQ8K3!uO+4beKigr=+yJR7Y1RMW+vN7ZY6)mBFn=c!yJ74n`01GA(){6>&0_ z9&sTH?lO>)WPZr!48^0-^gy>s;WD1pW5geQhyZ64tStW2RH1b7#tkk4LWRU9NO0YY zEkjlsA&)N4Se?LSO}+8n7}CQ&BbAY^csH(1lT}uQOXZjt9(u~+9h`6$mz~k&Nf4RF z`}OHw!AI9WNfgq-TtW$c&fqP{PAnHvQ{iON9d20EjNn2mad{Fg^x`$kM7EbMs*2#P zaO7_`gE;`6aPkp<sp0{+s<bTA6q+{HH(l+(hdhIewB&6~GSk&_2%7L)pHb2ZO5iFE zJjfPCm>6CgP_ZY%SRq5U8Zq?Xf*)K3g0i4hZ~u@CZrxB+D7jcqxEEiHBx1_ASPvd3 zCOb2!Yr={)Ld8?Y5=-2&c*LXNRLF2A@>H&ZOA;qSkWqI?4;D7fMV~0>DFzXYZYs0R zN++`^+>?_Q$3*FBv)(L<oqci<-NvrRvM@8?RTH`oI*nHkBHdYBpN9I;1z!(t^AgXN zSWQo|h!|bKF0vZ;cSsLk{e{=KXm4LE*IRA00$(3ewrQw=?(pCk=p87Wcc%-*uwft~ zRVZ`e9^{k+Qb*~EyjMwL?FmEDq>`e-^5%wxH!Hg0NJttN2cll!ge<yUx<tlGccT|T z1x3c;iZ;r<P`}klnTVXu;?@(i8hI>TrclibWF%_yg!dH?K_e-E`FYABWtWIA4Y0}< zz3hXx(D)!kgnXGUbOH1SeLPsKzHqmd#=9jk^h~&BfSM<6SwWAD9Siz^F}6EG>VCCQ zvSW?yNsD{g4ZrADaIoG+(P$?S@id*-=%4`t$xDdsk$3_l5WP~3mJthaIfjr6Xm2=U zj}bK;LiOyyjd>Yd)M&M**4GR5HtHv~d}|eAI!;U0i#`W7m3}5;lPq9O76{N$AZ$aC z3ZOK6URwHoM7vf)%C-GGztEzmwZ`P6kG={ho;(t#2UW&Gn11$<InLS$3(=7VeV(V! zSb5;1J!;0UwQ?PK(0IfV%Pf}#gX8nI$DJ&(Wn3?diX)NqPMn)f&K~6Z1!e&l_or%I z_ySe5YHA&r@yIR(ZOlToqfslP8a;O<7Ao9oe0Y(K2w97h8CX(QX9D#o(r0DxB)V6s z=dj$mEcxqZcnZTy89rPjAD&^zXblSGpI<Cljwz8a#83<3hZ7i{!cggPJ^S4t7roNE zj^kO%a2>;wa>RcP>v<Q$cNqSQp*#Lu^b=VA8iqYN;#2vulI2Gjy5o1tQ|WN)v)>?z znZWSR4FAq>N6{bQlK({x`Typ0EBZ&7ZpC1?CenX3hu_9<1JiBZ!SqTGCI6xv@^k6^ z=N$Bp?IhFjdxl4rO8@Z;-Kjo^@#PE~7%DzD{a;vaq4Y2AEG4|haOF_xPcn4NFK7H5 zhHVTLpPT*@mRl(OwJdMXGASuBOu{o5y5%dnQ<+}TZOuWi=sse4MR#uwdPR2}hby`l za?r2ZLuz;|!zjZzL%069=(F2Nza<C#o{YbM;Z+Q;VR#S2`xv_QI}r7_*eYFky=85H z8#?tO%Q~8g?!)sF-0#<2Y*~Nf=jZV}ocpQoUt(ETGyPuZtRLa$>+oE~^pn4DSu6SZ z0X%Qy=ld_StPfbuKI1HFDcn#Ck+!jr)A6i2@;wmgTg-Sho`*1F7Zgx~#9#4zAM>Vw zoW%71#q&~rJ_`!;@$;EbKy~o<kF~77!VUfPg_hOGLQa4JUHtquo?m3fBoz2JKer)L zH3~h6=bM?n9+B?HG%w(JE<Ya)1!DZ%2?f*$@*uLVZcob^^c95f$EkZ4#Ah?{WDu+2 z;;(rAl4+vdC?-TY$hrcI+;3*DM7i+uSzA%Y+^-ycjb-i5ZSYXV`03>~W87d&8I1J? z<AD!Y)^Tuyo-r6_8H_Uw#xjHPYh)CuTCx(Ve#Pqj3XGR<cY4rOmURz5Kc<N54B{Uf z#5)_rtv|A?^WjP+8pPKa#2@2XNiIKJs!?=1h!5uIKAFhKiw)#W_gL1Z5tdc-1(4I2 z@(Uo}1a;9{26EE9membc^c{o!&Xtz+B-o2%H&|Bt?y_e5`$o%B-NJ(FEbC;rqVIs< zI41Zkgc^7}kc$njHzTaxHX!3nIUC4ra7C9I$Ui=W+Ws(*)j+C9AA8WU-iIsR6-A>4 zsW;Jb)c`T3msR}`1mn22JcY8W<l1u4c*}YUu6PKz)G+lr2-Fa9%s9)s46gVUNKoV2 z%^*-?%Gq~W*5`18#$Ib#Y9LsHXVuBygJ;!&e~D++Igk1&ifIK>bS1KG7w*Y^^(Z4Z z8OSZ5dX*^u2BgYl>nNGDqT-t@OLe@jfod^|r|4yaa?v)+B3D!k$|pFY1#NW;s0khh z*9xab2Er9tL+}@AhWj6WR6}S)q|t}yhQsX&w;LRVlSs62Yb4w#xc%VvhdTi7AUJeD z);Kuivo!(kP`F8OQ{l?t0&o>@m2lJGj({V%GXZDA)xp)n&4+7(YldrqJMz!ZuG@Ec z)tBeo+TAkj+_}$>{QKzYCm%ZFSD(#0A~bc_ma@Z!o%rBR_dK}koJ}h)9rnA+A9{OK z_ix_*Y^R2y6K`0x)0`6zylcaWrGsuf_l5gk*fQscE!WNc@e2#~DXxCtz~wLA_S(qG zrypv%^riNH@7g%`zZZTr_2^gsar1v8$F}_Oyz(pNexA5H`PohXe5-%chL`?y#Q**| z@!#VEdwsa5?Z%&!rtWy-h9`r?))Tw#cK6@<4qBQCKY#Z=!>10Naq_m}p|?%_Q+4B* zNjJ=U>^pD&?u%Vcz2=5hpUyjNLfuhYN*=nRI{D>yzuZv#!=0^veo%Qv;6DdeU--_L zu`gWwzx!T{EUNGQUSs7=9s8ViQB}?OHTS;t)(s=4A75HFVcnFEZ~Eu*ZCeigV$VSv zKfLzlTh81TynjsbjsFgxIAq@q{eS!Qnt%NBik82uc=^f~pC3_Pd)>Js!*3S-Z1h>r zbyW-+zVwNI{P>*ok8fx%v8*T@ncrLBZiKrZ?iskR;T8?DtYhGM;ZA}35!^Fyzk_=Z z?rXUHQAujy7QjW}GH_(xUJQ35-0$GtgZmt=6xC}STrJ!JxD{|+aO>c<z+DUXBe*Bv zUWWS%+$flchr-puEr8nqcNyHRa6f~48IH`zPvHikq3;Pt4ZaGl1&&PBUbs`>E`z%j z?tZwJ;XZ;ZMFk%PcPLyf+yb~2a9wcg;I_bB2KOA?YjE$weGRu8I+8JP)E!jZNo@!5 zp$n%U^&QlPsOz9EgMOl41f;H!el+SJ`z#uCXt1F{h6We<QSU(f)E7`ELBE(Q4ryK> z;3CT+%YrNlvLwiYAj^R)2C@{$LLke4eow$rUrQq-4X-p5(bz>}1PvZETGCKU!xD{S zG$hd&Mk6N;yEJOjkV~C5{Th##>875Yel$Rk-ZVbYxIjPZ{wZ%14Ou4C2a{n!1_>D= zWPp(2K?VmI8f0LQVL=83{iwSqxzyWJFHgUn(P5I@dXDE(>geEq@&XFw&K;2Yck0*a zM}rrtp+$oN4F*b2>PhKGM#~^TvRTMhAsdBk6Z+lA@~fdY{e*D?=toN<GU-BjO1~)> zCdhvl>;5s9rSemkPT@)qVY$J-J$ZB|%RGqVpb?g2s<I-3fc#X}^dmcq(n|G!%ACrV z%9egKdQyI?d?Fm#4#ZEU1N~?eBfqMj`yDF%zqnomTivYB1KcLQd{Bm~@*)$b1f*o) zkYz&_4gF|frnt>=qj8YpqG6DJ@4C`T)(VA_u|hv#`va2sPi8-v`();mc~53Nne$}E zlle|&JN<TMnUkn(;J2(#%3Rzj{dHXaTe*IbiBI)-d)gnF43y_%ueGc-aQDD{2}i$K zTt~j(G9crU@`u_dwMA-&^b<A-pxL(w`v^EPk?1D|eLx!b=_f1$Kr#;KC(J!SviRtC zqpPgeyV{a4b3o^(H$_Q#ukxvr^X;kgfW+?*SH23f7I=5LlLbR^l#a(C&E!{dgoO^j zUw=uaKjka+Yt)BPe?@&2{mAa7e5AgP`Zem)=tl+@$)`S+eq?--pKMS1ky%WBl}C|> zq+iwVbzENat`p?aaK)qI7uGZUs!n!rdl}7TGW%vJPt_-yvr>K9o;pkRHtDFwl(?%7 zk?l<3s$K|_8Gf@L74{`?s%?q+0sN|+f9dM?l>JC@=|^@U{m4)DBiV0?hWc7^ZW^FO znGh}gsO)~&c;$xB@$3K4`@=0|V<%UgbMN|<)-k~M!fl2_cVRsP_cV~yKQu*QH=d6N z{3=eBxYv`GwVH_W`$0d-8n6%T_xJ?5Ik+QG7e*oc#M3S7ZnzCw&_8lLJ$M%>;|%cB zHIf9(rjaO0*JR;?ZNRoOs*3eA+@6f5`bB9kL23sJYgzIQ0UjoX(1XgB(n@);E8K2y zd%*1lHxh0?xC7wE!W|5E2prL)TNSoCx^JNe;ilj@09Ofj1l%mR*>H2=D7+4^0gjR} zAFc^*5!_-p3U2{ygIf-VA=^3@E(}NMLbh6+aI4|E;Noz^(*uYs6wevJEI*$JcoN*n zaNmVPQCOScPJ=rgj`9=PY@G>rHr%;zl;sz|p-Z;V1q+$f4O4e?CHtwF(ojat_(r&! z;eH5rCmfolbuZlga1X#e2uC_T4EQs+pTj)?N4UUaWyK#Iw#U>x8jml(|N2A!lvwcQ zr4{Q|S}jAam_NJs?(3#UzdmQ|{3C~7aPP$%Ub*D${pURW-JQoD_UniKJ~p&rry-v; zow(D#ezmIaU#%zXk_^;59ve1i!o=I>!tGz)UU5bH1w9YPmVa;Cf5PY9JM;B_jGD3S zl`Fn_@Wp+;IDNxDc%Jb0y?(o{`tY{<&I;^&SI5Hf<Ldvj?|pY4zNw??!)w2H^}=i3 z`>5%fV@AKWvT>LC<$vGh_BS3~cSzsTJ)fR=)|2;tc=%O+Tlj~UL*)+~^UeiF7yT;x z-(_!)KlZ)0-LHAGb@u}=fAxp4b-{O^?e2Q;&N-h=d+*UVeqDU&vfZCNW9&)4o;qVq z+`4?wDZ8F}<JWgywExGSE}Hb4qZanP|LA`XKkTwcXMX>NP3OFJ<%hrSSh4ExJ?r<n z<$E6<dGNV#-Tyu4?AB3Fo%zb#z5jgaeJ7MXvZ4B`U;pjCSE|qd;>|lwdgZIP2A|OR zx1k6B?)i&m-m^MZ{mI)uteH`LacAX4AHTTY+sps5vF?NC_RcJ8eErYQb&aU`?;FD- zV=me7$*9@~6T{k{+G*57Q^sES&M`Z+t;v2l_wrR=9(%`OuigKvUrlYl<nN!~S8Uz= z*)#vxZO%g@Ke_1u>+ZuR+)}<<)#dX;;j?LeHSylatB0Kb<VP30{mj|-ggUBj`qAXs zZ$7hh@%t;@Ju9B5`|r5cjSnAv^oGA&d&@7s*z1wk%69tdpQ{(vefX0(gEw!e3%&ZQ z$!kt}r0S!OuY9~^!pmchp7ll98*jh=ljcjiZa;1Qc_kaZ_}Li;EW7=swO4Ju_u=>v zyNrFI?vEX(e{cRPSFbyE=bs#NPU{0VtgAZt+}9U2pWSfZ8$Um(v--9m;2z=sJ75Ez zY2LOvF?g>7K5APPuUc~4Yrk0X^w!UoA24RW_s?7S!;4S){2$57CagL1*0&#g<d5a2 zY$;pVbU<tUz4sk<!L{$4fBmepk1Rj$rMmZSUc2kFe+W$3Y5&-+Hvo6?dke20wAUH0 z?%eRb@BQS+-)%hw{@?FAd!L8ry;8d0(}TO#oRmF#w_$xhTEFwA6UPrut$6&({X#Ev z-v7~U!;T*P<CEW>JoTyTzP_!vqN?@%og)99TfXSMc`q-IjQVh&Ne}P2__)_QUK)AK zt8;F=@~)~2UXI`M{!VBkaC@MWIs~p3ZXw)pa3{cRhWkF;ZE%mky$JU<+#qzUd&5nH zn+4Yb7lG@8I}`3IxI5t<hkFI?J-DynhNBZa2(AilKHMs}9=KEBE`qxm?g6;x;NF1y z7;Z2YA4b6)4mTTaDO?n;AMPx;t#Eh2{T%L9xWB=D4Yw;g+Ocrea0}p$hNI>AEpS)D zZG(FZ?q#@l;l7011!KS%xJtN2xGdZjxGUkd!951|GTggxU&8G&9Q1INaE)*);kw~Y zhPx2%Cb;|IehK$F+`r%kq4VDxZX(<)xE8nwTp!$-a96=S0{0@^+i;)3?To=<f4He| z^Wc`jb-|qkcP`v@a6f{38txBpAHdN>Zv@<Uxan|<;6iXIxYOV+gL?q(Ik-3AK872N z0cjN6;c&Czmcr4NKtJ4Ba9iQ-g8Mn#t8jmV`x<W75y)$}YPcnE9dKE=EpS)DZG(FZ z?q#@l;l7011%u}pxJtN2xRr3-a3{lE2zL|Q{cyj8dmZjyaDy;d?hQ8)ZWde%Tm-HU z?o7C=;O>Nb9PSmk_u#&Q8;$|?Ah;^H`EaY?df-lhy9n-PxCh{#gL?z+W4Kk9$}#+Y z3}PdM#bJ#{wIXxiw;?%X<FO0FE}^E3)~Ju>Nz@;JDwd2B=SozcP1W@siMr-2O;x>3 zqFT<^F>YQbQ6+ILK3ptO-?5cwoG4MhovvjKEs>}TK{XEg;r9tfVp4T*M$7s;j0Zwx z_t%V%ogz)M`d&eG#AX5Zz-W#<q2KjqN}db)G^(GqEL}}zIP^me!*ETKXCN)icmXT} zLcMi@PTrKqCF=8AG}V64j;QtxYSaRz8g#2>Y-7|mpjiCuCne*}w`)}AT!}i@&h}4P z)uZhUeZNvt4IQO3;e+)OwRw$>an)lIwGav8>hRCC67@<zGj2tukoF(;XjFt5p93SS zdL*lQx2@_$`$@(r=#4oGGnY!#kC9(okDlaY|J6?RIcQ20<1y1T)i}=krbdmr2%Q^I z)f8*g&`A>YdRXgq#vu}QqK$gzF^Q_SOXxfIN!0jdTGnt>783vL9F6)jH;h(0?^m-D z|A#t>PK|y)ua=DeXXkwna+73Tg!azK9<fTIVo;e;gJ5zJRdG^lAL0Z(yPKw>F^8y7 zrxfE_#3WQbUNh22L#UtGEvl?RqTU{(8BdxbQ6tdbu@cv|NmLo~jSH>pbcwnlrNzI8 zw37IxgEUnJ1}dSB{(+`SJt0xA{7~1gt2a|j=p6x3bM8D%6Q9S#qi@&5akPCBIS&<y z)jNYL&?_*<x#r!&RinRIQ(b(3Wb8uCW5!+#Z6xbAh@I0_on};nmNlAd@%d1K#c$xs zcrTb))|Hrsk*x1@YFW>oB4>rovWvM5^&9+?&@utaWn$l#0E|}A<5I$0R6%ZeyD;iO zyH+-Hll{HjuwUWIRkx4U<_gSKNSo^tTIcS)Bx+Q>ruxZniJEo1?mQpk#NKeHR-%GY zSK8@6mdmvr<vNaZ$1(($%P9wH@%ym$uiDxl$F=hD<2B=OZa}-)4QOPy)a(9QEvt@` z-MQM%Ue>+=vbbEfJ|!97ze{U>6N{f~i@)YENwue~*JYfbsoOMT)kaBGezsO(1&@pG zq5*NT@ijA%(fixtujNrH0R6aftYz(&CA6y3%O&GOs7g%r-~x%7JXWI~eL|v=cHR&F zt{k{dm9^>`S*wa=t)h}RsZa8Bq9$^_{E{W#d9apz7FXe$kJ40s<V@Iln?~(-mX!5l z$Yfa+lO&3oJ1hPf`edqYnSC|tMJ}AFB^tGr>rpSN7Ryp=rIWAMRCBJBvd%<7v-nNN zO4RL$nHjIXM56wChDN=}z1stJ;rtbuLV5)ti`(~)I76d$hQ7ts^j{ckxZTalO2+f% zX(c{bE>Ux)YSbBAk3K+W!;ECWQ;aX#N{l;2qBd>Oj5D8+sISEmPci7Nt=u|)TCJ&u z50X@i5X?Ez30cTc>-nTe_QkU7e<}g+)>GW>pF~Atm72Iz7ubF9Z@HPI?$%VR4v~?i z!@6p>BJq@#U)fc=gp2SrJNHiPkW>$#a9GQkPfOIqd$jnur%Kd2P@JiLdzwTgH*3@( zmr2x;wYpR{O_8XOJsK@3mMFYPrmDl5O%in=WO1_FCrH$O!?bu>wxI;|%a%j=m0_ww zP+hrd9W+W(y*ETxnqP3T|A(5(;*Vq0!^jCnod^_Ev!;Oxvd%#t#3Jv1jMckEqq>-X zf+Qwg)ME83(1r78_X8y3c@V^?Ue3vRD0D`h$L(W_T?8j{by|3crkX!j$~x69&PLA3 zwRUZt{fMOc*I><f$Im2cXH;`e(DUa@)P5&x)JGi>b!NF{9LFv4R$Kg+V<goRrJCx) zITCf8t=C7~NKZuOa*W^OTHJ|R%=x`LEC4Fb-FDJcOHY!h@n>rBcOjpMs-aG!4&-W9 ziE75(!fX~l!EPkGvl83T8*+^Q=GOHev@X``khBz^o~LCMHAvJYNGq4nXqNTp4>e-| z45Zf;NH!}`&j}i9CurL^Np&8wl4X@YCQ)<k;`sV-iTZ6=H{Ltg9Jyh&j`2^d{rk4| z*RftJ?Tj8aSISyr7e@tm7gwQ1b54{TEvZ_fTCbU$pvP^-&yc~C#zQJKRR=PKP#5p4 zQO|IKCfcpzv^ykK^CC?(k+nY?-6-dMmPggqc7p!Pj6qaTrrOLct<7#}^%qO=zdv15 zJq0_K^g7BeNBGR&c<CV`$B*$=q6GVxD+br8z&D4<r!l)rI9vh`|Ha^=-<!o)$|xJ8 z`R{^pO1~-0{~VsfMI}0X6bsA@5oBVG*bI+y_$1UO`n4ctGyG>9z5z{<ezc}+hF9$> z(BiBBJ+-;`&*$*7Q8nq;;L?B4ZW6DKWO6bf#rgY^1JD8;@jt`-KSR$?zgciaR*{GQ zHRSUuY#F=?2%Bc~F9FNp|2bd<;6s2IR43ob_?y^&Is4CJ|0edYXa6dOO95fzO|AoM z1gr$C0~`kk6-Vz22>WO99)PugI{~6jjHb<?D)|3ZW?4bN_W?<dw*g7sZvaW&lYk`e z$AHMv(YFJVyc+>Y-sON;witaOAj#VVNb)uUlDsS+$%_G!yrTd~-U2`r@n~90BzZM} zB#+h?F|3Rp2T1bv0wj660g}8yfF$ozlq<>mD<H}HEg-7o=;r}R-jjeN??J$cz~2i< z@~#6Ud1nApIh+hg<<JjE^4Bsx%>D+3lK?SLOg;z@{l(<{0gE7aC?LiEIeH9|`vD-y z`3qnTAe~jAcz**(^mKlO<U9sQe6&7Gd~~*@1#lBXTEm6?H8}xzDBw!K4#0LmlD80$ z<W&JuIwk>9I>rG~{G$Nd0EYvjiH+U~a0no6f<ficAEI3m-CKa2fUg3M0saNRv4AuL z#(@7R;Guvw0fqs$0+Jq=0g@i)0g@i;07(xz<3oCM0h0V<7~jhNYKEf$k3~4Gc~gGw z0!VVcg0gk+{|%7x<#j-k^9ms4=ktIR?-PJT{|F$-xd)K=t_38%GXW_-GYnS)VpNzM z0z4FOG2rolbe4(a%>g8NhXPVM#sE?}=-d;<KMauavltNnM}LLPr2PC8e+C2o8Bpj6 z*a^B{08)Pb9FX$!en864djTo_t$<;`O8`la^8rbZGXP1CUO>`=&Sk9ti~y28M*~tk zivbq^PGJ85?B5IUIN)~yr1XCZ<&Fe=7jO~a>wuF09|xp-e*}=?yNUhRvi}_RpTYh# zU>)egfI+||fF!39kmO7OBsu#6Ho#xT_#uq{c#x#~0FdZ@4@mN!1`Gn;!{K*u_$3^^ ziNn_d9s#;A<CidgDj>x_5s>8W!Qrr4gxu#be$7Yt6M&Sz4*?S0?SL!MZJ!TF`Ap~T zD1T1@oC}y@Naym%zntL$K+4xi>_3>{zJL+n%K(=G76V2BKP$E@n2?j71tk1W0g3Kz z_HSUAVtkbSG>stsdO(VQ1|acG0wg&H15)_jfF%DzBx)hxvkdPAB);1KiSH^v;=2ft z_|5<%zT*IiZ#u(00H?rT0@w=psU`jI0FocPf^Q5U^-sG4QoFhw^pt<+0#bf%2Bdo0 z!!Qgu1O6icrvuIf#Q)JX_(T2qc)&WqJpqw*qjv$MdNCLfW9wuhrt<p_;=|+UR{<%W zUjb6QPXSVVFrxL$cdO91NuzXv!E@HD`gfUws@d|iMPUl@?$YX_wIv;>giK^!99 z3G7GTX(4R#V8CU7NQ(uY$%g|jhpOWMn*m1yE(U%tz>$!Hu};WC-yz~bA7Jf`A#fBR zc!uu=h$cI{6c9W_PUjMaw*ejnQNf$Y5VwZRVmO82c!s+IA{|3^VtDI~(tj<(^BHbo z*v@bf!-sB=^!GBnf#H=5&tiBg!xY0c3|BF1WjK%F42FNaUdsOs!==}W{20>2aF=VP ze=x&;TqFH&GyDz1Uoz}scs#=vh6@;uVz?W_tFM;wE@fEFa5BRY49ggPwN=u8!tnbH z&trHp!+wVI8O~w&{8f_wNrq8|$1t42a6H4242LuP-<6X8KMeoK@HY&9&hR0Iw==wv z;Sh%Zy+X?Qkl|k$KEUv9hSxE?oZ(pvPi5H2@HmFe3>z6vV>p%J+{<OWwG8)WxGTd? zE|cN^VE81%M;Knp@LYy77*;U+^!t+keTGjle3aq$8J@?mi{bGMXE3Z_SjMn~;cJ&l z`7blv#_(o_Co}A4*uroD!?6taW%vm?BJ?Li{=x7ihQDBVBg3m0W*PP{EM;gh{KLgk z-b)OB$nXY+8yIF7HZyEwcp$^Q8Gdw;l=mLP#~D7z@FIq1Gn~n=is3E{2Qz&ALMiW6 zhD{9X81Bz-PljJzAn8A0_<M%GW_TMQ`pzNGpC|0CA*(tiyb7J>Am9%KECIZzSjs8e zUHVHHevS^7!arj83d83aKF;t#hSxCsKErbuZe|z<r1A_iY-Bi_;lT{|V@Q)RqW^qX z3ID|K6^0KoyocfU8J@>5!?2s-Qie?or!XAPu#8~|!}l<vQ2cK)e3IcK46kQ+1w%SJ zLG=9$k73x(a5_WUMj*P842Lr;VfYm$Wg=dNzhn43!zUR&$nYM9-)DFp!wkc2hD#YX zF`UA1Jj4AMj$rsX=DVcFM+{$K_&mdV7~aN^=G{bp2E%TKQHD(nY2HnAH4LXP9Ko=R zA<egm?sLpv34Xxv9frSP_&CE`7+%A0Gs6uG!wgq4Y-ZTVkmk`;-w$S3%8-sl68;?+ zG6es`@NtGTUncyW3~yn04#Uk1*E2kU;c|w}4C@&l!Eg*9rF#^^|HC|#{QqY72Zk>( z{0T#v9}^v|$Pqk;;Ry`m44WA?GCZ8&!3;|o()?G%3qy<G2Mk|g_zQ+K@1^jcFuaQ4 z#SG76_+5sb4C%}k@wG9eb6n&vXLu+>n*S1hFNR;Db0h!94But=21B0j4tbdUcQgC} z!*dy)&hR9LX@)BpwlEAboW+n<bt(RR8Sct(Cx-8%f2DAG7l`1q3?E~7GsCMHZen;6 z!{Zs!yGF!M^H+jFh7%c%Ww;YVdihPn%kVXZk1>3J;nfT;Wq1-pnzs`F3WhBVs~M6Z zPvLto9Ln&Y7*q)VF2m;-KEdz@46kE&I>U_&(+p|eN^)8lE?_vB;UNr%GAw5JE*c^6 zy}^*?ujGH2;dKlzXSk7JAH$;=wlS<_Sk7=ShPyEQn8(e(Gkk&J(+qECcq79z8Ge^x zC&S|y(!7=QJ%ZsFhNBq%9|9?yUU(+>2Zk>({0YN58D7lr9EK+_j5A!suz?}XXYqeX zfZ<4n!x_^27XOEQh4~f1j~Kqk@Og$$GJKHXJq%$c3cm9gZf3ZF;s0yx{6gc(>NuWd zzl1Cl8{F=0&}!paC9K^tlg>6%tuSl4Z5FfLvB~a+QoTu&X%csujOnyH)jkYTF%K0Y z6gFUmh(&@_$U~8c74xtQL5oDJl7}jBEmEOKgmuZoF8KT1`?=GZo9>?$hipIlIp>~p z?>+b2Gc#xIy}xh4ad;RWgkON4g*FU?^%+9?y?S<Nn%CeeT!G7Q3C=^GzwvUja0XUj z368-**aLGg3sbPo=<U=BTVNCP`w%^U4f?%_?kjK+F2H#>2d7~bR$vJZz~p(9BfSH* z!#3CoH|Xc<@HSk7%Ww%U!UZ@BeZI)|%jb)nRX7F*;Q-9TEKI=;*bZA@6WriDS%<4| z1unxSI1lIGES!NASb}445ca?v%)%6GgRQUyHo@E07~URha25K)4Lp4jF2H#>2WR07 zoQ7361_$8)^xuu_uek^2U<Yi6ZLk$?aGoX4`!&*6;R;-aOK={}LHk-7ZpRF)z!DsT zgKz-mVGqo~4%iOcU@L5ahH$-~wDZuqdb7{BS{G{mkBRdp^m$fypJ#Rc*l11B{6qLX zcovSp_`K`JyWo@XarhAQNAq~SYerws@8K_@zi)Z^1^60#75Y4@m-k03Ienhh`2_TN zRd;{Hhx707&u|G|h4Fb2e=qz#>ED6z`_@tXF#HO98h!>o1|NZM+eY|y+=e&d3j8&U z-^YH6zYf0({plh0*ZfWB^Rn(o;6eCBxEnqR<M%iJ1=9YS|4YC47yK*yBYYG73jPBA z1llx1SWgv}Vcd_8;c@>xfM?+@*bcWr9}n&S`=NSqs2&{Z01lPIq4wiYKF)gmP#GM` z$6wEf^8V!x<>RtD)J`0#9f#VEL$%>h+i<8>9BK;=)q+C_hiby1-nD+{+Y7aUL%oed zt>aL4aH!ij)GZup4TrjkL#^UaH*lyG9O^m_wTwf(fkXNE?fVOL4ToC9p|0Xk3pmsj z9BLkix{O23;ZT=ws97B9A`Uf!LtVh3rg5nAI8+sfI)_75aHuj4Rl=c)IMf&pHG)G8 z;!wwMr~w?RABW20P`x-*4-Rzzhsxnl`*El&4wb>7QaIEu9I69{+KEH8<51gis5TsG z8xGZqLv6vK{ByzM*1w_paVQ^eJs+wUhw{%6o)2}~zP~?V4&~42aEDsMp>E<(t2mTD z=flfGt>94Caj0b+%I7h>Jk$~n<?|b!54DIxUB#gmaHuOd)I1J#8Hbv~p)TQ2vpCd6 z9BKxKx`0DX<51^us45P14u`7XP-PsdghLf^s4*OB1cw^Lp^o8D12|Ma4wc8DdU2>8 z9O?iLmBXR-<4{=~DuY9%aHw54R0j^V6NhTYp|;~tZ8+369I6$E+JZy1;84P$nsBIh zZQjfKKhy>e<=2~dKGZr6<@0o&59QYhyF>Z>ojcST4s{cUTE(Gm;7}_#)O8$c8HaiU zhg!m+uHjINIMh`fY5|A3f<w*YP?vG2IUMQ|4mFEIUBsbgaHtD7)HDut9*3&pQ0H){ z3Jz7qp-MPZ5r-PXp+<11K^*EB4mE&7_2W=^9I6+G>cOE7;7~anYCjH@#i24dR0@aM zg+q1VP&;v`b{uLu4%LQ3ZNs5jai}dgR0|Fz9I6S2de^?c`}qmAfkXNAT%HfLjzitS zp>E?)w{WO69Lnd{y?&@w9O?!RwSq%k$Dx*Ss5fw^B^>G+4z-9wUB#gmaHuOd)I1J# z8Hbv~p)TQ2vpCd69BKxKx`0DX<51^us45P14u`7XP-PsdghLf^s4*OB1cw^Lp^o8D z12|Ma4wc8DdU2>89O?iLmBXR-<4{=~DuY9%aHw54R0j^V6NhTYp|;~tZ8+369I6$E z+JZy1;84P$ns6w8mS1@ON7M!m^)?Q*jzitSp?qH6>w~(5L#^RZK3^D~{}Hu{L*2lk zR&c1QO+HytbH!+1ZJJBQSL`~rL8DDwH0O-=*POL~JU?ah{C3iPp4QWSp4QWSVf$;| zu<tdVzHapNHKV7mlD<Ov66uSiFOWV*`Yh=)q*sl;T@}(xqz@Xs{+!YCv&L|Hjp6nh zJ>L-0pPAv0FOKi4Sai2zyY3T%_WB+9@qH6F-L3RD9u2dbZjm3~H}MYn?|nSV&)Dzw zzPwoeOZcOBx4W%BzOUjXe95lE@Yg8I?_l|#lONwlaSe~}oA?9EKgII?Ob=gw8vh%< zAO9zQ2>-XcZBKlkg<t>RzrDrxTljSmAG6QCV=VuKyDcBzSMij)b)@+Iimbb}=LYTR z&l2(Nd71Kgcl&LB5%>Ee+&6H)Zo_@`v8X+!@RWU7_E**F-fG(y-*57!ExXnJ%dxzl zub%JUEBxipSMmH-@~>E)=U=qW;;;8?g5L8hHd*B_%L?;Dv42L%Ut#+`XZzyi<NH;f zwd3#Q=cs>$^=B>3Uk{OAB0pzoUjFl*X|HMOZ)5#utSvpiZ0qsY5v#}RUnBo5Yx}Ja zS8Mn4d@9VZHZ73<CoALm@%=D<-N)8Ps^MgV*XQT?4$F`4Cwj})zr*tLlpnNw`>Vaq z*!t?7dGlKS53C*Q^Yga<_3qcz*ZYx#b3H_@zTet$t6%;%iS;ig)^|3s{HGKCy474? zAHO%(*5~t0_4)ru)X(oFwdJoTmVZ3qcM|*eP$IvQsQ(joyzAHBnaKC+s_XN8e!AWt zw&Pdt+Y|nyMEQY)Kb7$7iS~LYv3=c%`ll1+{k{=Ps=dCJ@Si2N->-wOUw$}o{B|U^ z=jnuhInm#~o~YmNuc)uzLrc{AwS;q>N^SeOE}`c9j#Kl$B+7FgN-f`FUL8&EdBq|| zy%@&Wu~<U+eRrcp1w>goS@O6=4Hm^x^5PjQG-W~bUX0>CMWG}+Q*l72ZUQ7dKXGER zA!u>_OujQ!AI2#lPSSDTsxVS(Ul^3CK1ikoV6^a&_lOZ|u~dVj6R&v`uS87M506$! z$e}1KYdU4I*Y|WrAzCezkHulKkW69iLsq-#aOvy^Y+)3(GB`R?%v<T;r3nksHxe8v zoH~8dqn%kGw4sSni``VT_+oLSqA<NO6dW&%T0FnuFmRIXM_+kgZ4s~QXu9)-p;rrW zi#8moz$0y0fV|<cSA)^hLsJ%9Icmgox+jc!*ynMhJf^a>pN0GmLtTZ9<}F<d>=OmJ zj7r8!rBjCr<?ho{9_h}aAW?4|T{LYW?+;E*o_wi%BHLJb{;R`byjYL-9UaMji`4ks zcw9rnmZdwpr!3%IA==omqO8TjD@<81x_Co8H66rZMB{2Qhff!aceg8!SRY0ikJi-? z?exP#?9v@-ZPE~^%J)7qF*#C5XAWAVvSKYJ6d_S-rL1kk&V9mT2qq(e(T25!<4)tp zqM=#Hs5`hPhQ^EWuG18I?D%}pY2meYc?c~#Q}2B+<J`T6ij&7}r=p`A?Po)udoDaL zql08;bE<YUJa&CL2$Sj}f_o_AIJqwBad33+5eqj~nEJ?r1&ujTcr9+r%_;Ht(G=JS zW+BFhP8Z8zWW6vUj7b@V!?Ux{g3c8znBP=6JhRiOXmk23H0J$oQvLCbk4rie#TBc? z4*P&HD_*yUhP&T&dvi2Iva^1b&P4m-^*!+Z+^f>j@l$p>zA!m*x>#uJ1$CXE)&hIu z@xQ-tvgBd)!t*hI@Qm$aU+@v$9_l-^#kcqVmG%A=?CbLgiXMl~VoKi~Og61>Q*7>N zRIByQE{mXc*n&CMugH&6G*nsL@xH`onJu4Kw$`QlJPdY_?#fTuAUjn)`)t|XxsF@- zR;$DZi{NC~Y!-wvYQ<#LHbUMV!8%{gruQ7M@S7HakMl9_qjqgPOpbtFAR8??{_Vn% z!ij<n)x(AN8$>scqJ8D;_~fbJ_|U0B=J|>7a_wCpnGp|1Bc~>bmTG$v4BK0m9pTEj z2h0pcE0w?+;nbv!+~ei5!I_lr?fZYq*j*S47x@2wj)-c$=R0n^(uTpU?hTdv`-{#_ zq5B=%;%#}5K`2r7z6O!F?1K&%b>%<O*ue6QZTexK&b-i}?(QH8a2b?`ju#7Q?=QXS z^n?YcjDvP2m)X<Q8|=0ZYuQbuGnNyC0Z4;j_XE5WMfFmB=cekP*_5)kafJ^y;3xO5 zYtw47Y*M`EzMtL#&%nK#O6;?CtRIoO7^XHYnD!R0k5z8%-&gL<dc5m#8!uQxSJQJn Y!HFpwQ&YA7^OEs8q7G13k0&(!4~LhHxc~qF diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/ast.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/ast.o deleted file mode 100644 index 40d92d1f05547365b6d4a0992047049dc9b613b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215832 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≶6S%ve`V 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 nTxB&~lGLG=I`0`(=3i6EL+=>%s^$>;MZM}d z<Ze-~nrhxF>Re6LoubY~54BHJyw0xLIV$B>>0cG|YudO~4w!W-cIZA)_c{*IA?jYq zA$vpJtEssw)UA%H{h)5;>fQ+sbx^F*=OQP<3J0c&E&6ZQSFV#DVy;yWVs-!U1BcN6 z@6YxkhjKNfzMn3sN74V&1Hpsy`CmR0j8ss=!?>y)?hsGoYN@L}5B4fnRizbGAM(}f zBRLgnj~)@KRyuK_O?iI*{^88RNtw9?df+=TJ2Romn6pAd!(H_0sVW>4`Z9QBNw) vA9`WGzC**|!Ql*hz%i;|Xi_*lZPqkBVGIo%6rPfoF;laN{Hsz4Yt#P&2zhLk diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/base64vlq.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/base64vlq.o deleted file mode 100644 index d39efac632547a1aad4bc141bc747b83ea821825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23464 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/bind.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/bind.o deleted file mode 100644 index 03c055bce7579f15dd710b59a5c944063c66c780..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430052 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/constants.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/constants.o deleted file mode 100644 index 1a9257af1f963b519d556994b33571c7587806dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25292 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/context.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/context.o deleted file mode 100644 index 61ec099d57f4d94af3362229dd764dca556edbb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 918252 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%0AjzNeYEr=ZTdPI8( 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/contextualize.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/contextualize.o deleted file mode 100644 index a7a43eeeaa1e9c1e80e270c9afb221bb95951d16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403336 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/copy_c_str.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/copy_c_str.o deleted file mode 100644 index 65de55814f56b11516ea47ca2b788e10b3baacd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3100 zcmbVOOKcle6n*1=evVVKXjK*l3Z&4CQ<6dpC5_dFIwD0O{}$*l9#3Nv+hcj`e5y)C zLIOqNCspiFVUIwSx?u?_%Sy07q6?&w1t<uyWkIBdbLZWc#1lu2xY2v(-uv!5bKmDa z=f{8leh?Kx3kq~-gyRu(DKy9-wDqv3w(PPY>8{coh_b;cs2w0D#4zgia$V}uo*J2( z+P0OZv!eLEZI?NTka$<c5E@3_tee{&!#J0j%52+;M|o~?e#-VE`0QL`-Y8bCI5Y;n z+04W%TVaat2746WPslGIeGJl2d}c0Jvln;sea}4C8IRLuHA`#0npv5*-Cg+&Yt55y z?US!;THccV>;1ocrDDaVO!nd%=QLG*zhVD4^_J@`IhHrW&-W=$y2yMYCY5#Y@lm(r zt2T1=m8$Lf`Tk@+bzd(spP~o0<a6saFT~Hc!F+!(!NNZI_;`2i-&)hxg?PPfM`luO zict5jSfLZi@5!gG$;0`~YPDn=6|;=nxBGn8`Rj9>)*R<|utT79J@Mry`JCK4-U0jf zZ<rn;$Po$R)<f63BfqL?`T6q9cbfTrX1<fij}vQ|pLba>$ItgA^POkD1nwP4c27Rb zDI>4C(WopHD|y2hJ11wzex3PJ?3@E1x#qyvx<2fJaixaSkP{4}`8|#CrVlgUGV`%1 zKwD5cAuawO+S?eQ`uPs{CJ-Q0%~BrJD3)^Ll%efkrn9TRXJ#fxS0Aj?r0hq_np9Tr zWLNKxt^UK-y*DzK-@5Y&LgcZ;yiEv+Grmtz{cC}5s1F5i1MZR<y+FMdngs|E{smn` zi_mKxr7kjoE~cJz=tAk*Oxv$8wWypaMEe?<ZN&FH8uT9R$#^mxjQ41X$l>_f^-iRC zN(;tc?05;A71Xs4hU3y2O`hpIjp0yOj3$xB5fO|Jb#%}UcYB`bQy#>0?R>IFJD?5Y zklMnCBCgS700+@N*kp<^q!1AOl!&$w??SKfv1q!UE){dG>7qU@r@CTT23{xKs#fI< zYTLTthuXi0CBF{DFq@V{!q*p((@H%iN8q~5+7=vU?U}8R$*nO~;z0Sq8|=x@1CkmW zo4Jr$v}<nBsiaQm{i$B7grBs&6aD@AbNUOXj;4BZrfcU@81`ZZ^Z|FVa#U<DFYQ}h zdfEkFx?Xk*i|JXXwvb+0TG9)RymNKI)ZIq9;^b|k?Bp9I+fC0mO4UBvrDiw9NO!JL zEak-{?W1w&wLwyj_iul4Wc*cY$NmbdVAh0FE6#gPuP6c{mYvLGX>(}{sNouTA`goy z3@3<oY4P*FCL=$5brO0O?JoPN_DF7{QJk_BFZoFPyql1nF%;*Ip?UX*KD>4e=v5Bz zX>vmRb03jzZ&?~%hM)-Jk6r~_veakS27y#w^c^ZK^<G2ugbM315m4!}R|v(cU7Zlx zazaaVMq~7wPV*l{ySG6r+1ylxDKhcI`+>7vk+biGKE}iIIAZX`^$`!uKFSFHruG$q zpoy4_FEb7?QW4WQ-C)8bV~i2t`DtBULQFA+sN%?G4E4h9hRx`WCwLs_y}rahj<`7f zsZj4Re4?8=mH}Wl##7!5A)bJ}V^}=vvpH{`4KVh+qg4GRyCRITS)zZV$hN90d(Y7A Mf*8rlUlm&Cf7fet2><{9 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/error_handling.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/error_handling.o deleted file mode 100644 index ca5edada6ba22fcbce8d806b4d252826eebcaec0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96276 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 F{|nMRP;USL diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/eval.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/eval.o deleted file mode 100644 index 69cdfa49db4e0b9a743cc96f899a2a6e4c4cfc1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1209700 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 g(H!FH#R!|AoPiRpvlokevcZb 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/expand.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/expand.o deleted file mode 100644 index 85eadd1bb579b688e807a0a772f6bdc577e8bcfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 993712 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%0AUz(%sx|4= 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%0Dov`Co<JjNXqvg1+%I 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 N|BL%A?3LDh{y+JGdHnzY diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/extend.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/extend.o deleted file mode 100644 index 873e2400f120f8343dfea1f26e7637777d1405e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347048 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%0AkTOYXOHz>`g-I$U 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%0ADPSkL?3!WPB^Z0jr6!`@ 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 Y+o>2_J>t_qTPh6TEJIWspx9vm0P`~3pa1{> diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/file.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/file.o deleted file mode 100644 index bf6d2412581740c26a576db867dd8beba94e5258..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128900 zcmdSC2YeOP_CLC3=D<k^Au-9}&`-h%MUg-N5d<_e33yPtSRjNB(u5!=5F$m1hz5Ta z>{z%rcI;SCELXvb9orSJ4a9;S#Vhao-DS?4IVa$I|Nr~E{~MT@z1I4!wbx#|%$_}S zCa?eT?O#D5EJxsgo#(1F9P+VaYl^)I={mOJTc{<(MvdvLY1kCpsn4yftYXUI3YAv$ zsDWcg#c7k8c9cpPdpqy2#C>E1M3s`LV_Dg>Nt4Q^ES@xFUPW0&`NXoaM0?Y<onu)b zY-!DeuvIeUQTaD%ZuzXTIds!+Z)2WP+p4uoTGAyUO7F8oCe9g2{*A0Cub44u@SGX4 z)P8#tLdsCFwkKLCdz)de9(hUjCN5ZDusD~M4d^?nZ=7M`u4*IBHz_~AtZdSPiup6< zOw$0rf9th>t+l)u{&_clEMaf%oCUI|66W`Bo3=Mh8=0WXy9?#5?=`H`Wo5JHPA;2) z=#@=fIA>B)d9xcUplO<$VUJavw%L;HINfKntZd5kvZ?dSXHQWAe|ei|d-HU`wrG3V z+Fphb)4e9k$|jdrl*c*#@~&wTmoe48Ad&V{us3Dm!f7b+)VY+w-sycuob1Akz4@CI z%h+oI{|Z#)CRB;BS3Ys#{3+)p+xtT|<V<!_Y}dV@&Yojxd-KcZOq;SG$-m&gJeo-U z^VLKeR7!iZ%O}Yq`^)?P)ZVNab7T$IWpABs7{<T+$1K@y>hf>a+)1(^etTEGrpmWJ zOP#yDr_McK@0i2X$Gn9TE6$%cWr5$`s(&l}S9O#Mzf!d4m@<Co#1i7SH~dqjnRdQ9 z|FG9%NhMR-)76_)zh|7O3bjoS=)X@?^qOZaai+4A(%y_YtdYq{_L^2G{b$j!xIMO1 z(PQ7S#FvWYvsXTE-mEEQbI^l14*JXc;c}%vii0t>C2O>QA6a6RVx_b<cj8Q0!G3$4 z)+zl$r7K>)O3|9+DWyH>-@NiketRRez1`ZtPugDXZcFGfETui!SfJy#*Yz^x&tiR@ zd+TaN?}5EmD(SN~Y3^+JRZ+HZ&Y~G}CYP1P25490Y4goWsY;#1uv*nGcI~wUE}h&G z?2+IQSNpXkIHuQrZ;6jEmasa_7@vbQcMh%X^^Vj3t!;E^^%s4|j2vA3YiaetSoLpD zb%J{7i_adywuhEVR~|UDFtfD!lUVhylCiHz>7i|kF0FpH^u=f5(CS@h^&LO%Ic>9a z<u}<!up25}cbv>*-RM0qsqE*v_KV*vt$s#%QN62l<@4Eb^QZS6(|2^=Q6rJb^wR2u zHG`}FEL~eawszj0p{swbXkEIt!QkrmN>`r0M^v<_>e*>wajg2QSoL4h*j|hw0(5Eh zyNbpfNYZN;)+ojXFjg);AQoqpt{qonJS$!6#Hy#P=~uP1^Px@^jY`)ptC8W7I<e~C zOV?VZD;MtxWUUwo{nB;gYGdnW@7%i|C5)|GxDnAUt$yusUPT92zv2y?^i4&#bnU>6 zrRx^&DecvVfmv8NwEFwl+SxUO*A5h=YlrPAUHR-^vFh*R`IfFLwP1Y%tjDUqD}GZu z^S!Aq7~J47IJEk|3kS!lKh?fEi$?F=fP5ZfCGO99ru4w-9m^|WNSfJK;pJytJ`W%x z+dBz_SG@d=(sc{BE4`Z#GL#j?EPnGb7Fe>$RP`;%zSS?lxmu5NS*t5xbl~b=;b7LP z?SCP+wNuuxrcg7b)h|i4SoLl+h3RMYJ-hF?zT^9rjeD-N`Z-_NDyAiPb_P7#vhP%d z^G2iMqy$_saGUqFRXDF>72yP2I&j-ek>r_8zI1J{sz;}+E4O)jK<Coxp9WX|g{A}9 z!c5r){w-DZ4Jlo>Y^Q01NN+E#RuWj>S-NiYc7RnTYX@%kL}_75loo(^BWV+>-jA4c zmfa)4(|2HNm&)#?1i`Bi>{fzjQQmzWRH423q$u<r<BvD{6gZWo={IsbNbImLqjxea z>y~XUt^Pn+UAL?jJ=8;@Bbd=)gMrk<d21vuR{ii|G#Z3tb8PMOJ*8`h)|RdvyeHOk zZ!D|d-r^63uKu=Sa%|m{%>#>nm0h|a+LI~9<^h-VZbFrn=cBV{!kt<zqLqQ02b|Em z>B6Iv)h=m>LGZb%-#f*!2K*H3xo`faea_(Of5&>w+Y?)R5B*utJ+^MyM&=u<{wdi& z)>GY@#H#fOdx*_<b7`-!d*;7`R4vUc=mz~7=+`DG*Y<;UXQMs%knBa&ng4e2htRL# zAS5b^F)GvyEIwrP-L_Oy)w>Cr=`&f6>=<mlj&jJHckOckjz_l&ql}Ej(A9@33W`6B zsk#6cBa0lwRHP0)7wdU&{vI?Z3~)+A`rv7v1Hnib)P}N@-Ud7xjLlxgxL7rYx`bYy z(0uP<ACV61yEQ?uDK5A!L2zSSa7BXPs<_}1bb`G%V7OwBn9D=Ief9SR_SyR+CsUs4 zC}oOXpaw%<;ZxxBP?8vv6u2$AZ6<^&1x^JfsrTVxdEqzNxH93QjLW6GV0@`euDh`Z z`%wHMZ<GgDzgW6<wG_rHG;8&Dn4X|rWUYP^iPCj9wl~_w-qy~NqsOzgt0ll|;T5U4 zwFzLcYF8_tTI(JrSC@4))1H=*wfX_2nJxKxe7K5=x+q)Iq~u}g!Mdx6(~^fNi4Ur) z70?|<vsN!sriFy*>+!m+B&7uv43Y^Bl|xGgW0}0_Z#{tP77F3XShJ+FkJocAhwHZP zS5WOL6^*NucwALLkE^qkt9vBOb(N&YRgwv=jxnx2&PKj&>uw2n*c&~?N_KUZf@)WZ zGOkkMaa935t`;a)cS@M+DoKy4BokcCpw`;e${mljT*YUs67bhE_-j`)>IwYMSkkqt zS;PeXKE+q%@!0<f{8;sY(hHwwSK%x}&M~}0M%LxxzqGbcT`czg_-EowDC_dp3GzHp ziTb@0<V8vHMG5j5N%D0G^5seL3|U&^-+vLS#QdEE`7cTGgEG1cH_Hmz`)!hZMMC}+ zN%?O`kYAD{AF1rCtNPx7N%mh&(0@8f|FZ=7J4x~nrTpO%6jK%9B{DcoOd88p9f$d8 zVsxV5paYjedv6ZYQn9^^S-hpJ`V%cNQSocp(jOj1#rK)U<>W4PM$Z0`Y*kH?fl6gy zEDg-o22OGf_{XbNzoUgFdhnGTf*zhg1Me~|T^D}Ww<Rgws}!eG@kXV%_d3^rzqhU8 zYCvMnv!#KBJNK5kTK++66>ppqwHivThvzZdgY1#gU;ntZ>I;Yx72hIwot*mZeO4*% zecCnPA2n9po@C$(X<*^5y<ELe+4@GVib38im-j@6ui94xs63!TePdRNE3ulQ0_t-p z1ytR60_ux(3g|{P@+J*-DWGP`;2-}|K+P;<wQopF0o4;5eZy|1_ncnT1{lnPv9<E< zb@19?Y4yO}rE7bks@N-}<D7^eIFz;ORs=rl(bc2CZzFJ%JhhJ~$y#+Ot7C0fT%5Ka zJap*sMj%yj*KHk(an@K^wXFhobz4h-fo(!{P;OMLC6=TI;~rC4D*jd98*3V~SaYk< z_k}<!UJc_`JZYAp*TCHiG2z~iivkOX+bnh4`J&1bZPue;rcPR>Fyhel<D9cl7V#zz z+?e2M&Qa*!;$!UYVssRpf|8z;6oFWav)s6F!4)4)ImF8#b|}7p{iB_BBq){}6SUHX zR7>p5nc#Nl`bVm&gwu`bE<A8!q9OKsNt}p18~cMKPQ|{B32uk3zxhJp+<>fwXv+gP zCb&*}C*9)Ife&*yPZNVR@hFMQv7dzfNfJSr-~!iEBnE)s!sj*;t3agT{49yPK;+{5 zJc(C8(5)RLJ_kXEUna31gkG_uk58-+&KB~eH$2M(!;#MUR|)p6*yXkWM|$6nlIt|F zgv1@#nfXc*Z)4|5-IFA~(?s|BNTeZi8hD<PPMVOC6E*Q)O6Gu|H7U6e1dD$n4O|O? zroSZdpw_7%@qs3!1WSc7pL-~2isI3llpG6!*1n@;00>$;jgKD2gP?DPBvxxeO0Lwz zC`xVv@f4lpcIf(D!eOn8sXTCFg26t3-Qtq>8Q2B<k<HkB$mW1USPPt;EF40Faa%6I zDt+ks8-&yBcn}5HCzClAdxQ!9#=%AQBzcfS4Oc7Q#UP_Q*eC8vmtKBkpVvc^nU<O% z3JZqN9n6I|EOx3PV{rBJrE6u;OIL1dQd;c{UR%Eu>xePyOJfFStW3nJ|C2IHJwr^9 zEegY&M-D4p#}0^*@e^f14UeU3Wq7dcgInFSv&QX}g)b`VB+5k5f=PHDIk9}fj7eqc zLE;G~ELb?vJdTh^9;#4re`l-01c;kCA4!Kjn45LM2w^SGwz3-r(`rzmh2XWozJ0H< zH;N!`eH&$8WcSak-+yJ`GR&EX8-V?1jVmLDo52lIINIW7T`(*ra|&J`0GVy_>jr|h zGQL*%vDI=*yYCOhF!qM73|?A)UA@Z!mm_zj^E}SezELpt0l68xCTaT{?3}T3Yoz(E zpPD`v=ex02YFrP^PrKOXhb}+yA7TG>pSFwGaZ6k2!|OP(oSY23t^KW(r2zhNAKq6^ z>T&dJwqNB_p2l3DchIMI>dN|;y3rAW{_&Ae{{u>|(D>)zBFoLhDYjB-F`v7Ec|?mB zF%xWQU48gLiTN<TG1S=s4RePIW53@@S<*S1%mWaPrhGilD}{F(3Bt0s;#e;rFLlo# zX}7UI<H-u_#4uK`9n$p&N(M{}K_VDH=62__Utu+1cTeZYWThXCqn+NFy!4(prlptQ zn4KQOF+Y72j@v}~SvXZ$>63Y~)93RPNU!86EqyId+39>JRF$8;ktb;IVpRo|EjVws z(qF{sC6WF%POI$n|43m#q<sjF0`?W@H?b+F-+`l*{vf?f-%3gPb{wm!033qI1nimV z88}<%yc4n0o06BFk7HVTTO6~~JK~t1-W^A&v<ZoT{b>3!oJIO79If=VINIq~;7CY= zbKuFk_CoBkw`cqW6eDX#g=IPHrD=5K&xSbwor}g~AF{B4pUH`e<k;kZ5Sbyvsz+9U ztmcN5MiyIRX2h^E$>Ie(v%O&*MOHpp9StjwtP-+{4XX)RRb(A+Sk1{2a4fT*VMQbh zROTs$6_qSFmO0w6+DaB2%N%D|M@tqQ%baXj$4XW{SX^n5#qKOwC19OrSY655Outqb zR(G=4@-i<qte#{A;A*3<!QTV6J;=(u2Iun_;8Q4;5#DcDr;-CgWd3GYBgv8xK4e&9 z$O1?-%Ef6cD|xDw8N_)B?arWB+ATM%S>#B&Qw(c9S<>z-!&*p|thu>{wU{hfa|;Y> z30e8fy%d=|0JeRxm3cnSRm}YoiXj!5Tr8HXb!170o-(W&a_CUjvtZps#qE|IO|!GU zHS`Y9*>={ipjSiLehG9FJL?eWFQ93^47!D#)evQn^edqA?d)SgTUiktTQ>meOK{uU zN1X{e+y36lDn+6l1wTLl;Be5Znf;HT)2ti<?VspfZhOFxaaJ#|rjq>|Af4^3a-_S_ z#Gjx`?5w$<IRK%@IMHpEowXE<5(0$nL{Y4)RbV(6dF}dO?6mB>Lxq@_wgKa5nbUqu z!mUtoJ<OYENHm@eS-`%<N*{!TNFRx#m0pIUEgEHX6=DIC4_J9CaK4Y}y$olrvJ<KY zoxEqj-b2whaghlB7o1jY!FB9x*oiAK-%w8+MBcHG4<sfX9bOw1;i2G6AvbEXIvAj4 zv>?Lg7)eK0q8uSkgs*^j3l;mM6mK=+Q&WgT(nQ{uz%+t~_Bakfx|qs316EAY44bXU z<5n*tIoFjaw}=zrF%Zw8;&NB4%Tr+_7rPR#;#!FBq2hHm<Aoem+`?PI{5J*vuvyu0 zPp{zpNBDDy{!8)wu2^RnXpfN`yZwYsXuJ$fjsdqHC9m4hq$E5T<OH%lwj;6zO*{w? z;i(WUqxeU=Fj?GmB}KMl+1WJ43xbNK$l-;-uII#STyYwJ<LHPV4TB<lHGmHV0nT)O zVY^KfH`_x$?W64G_ajk+-EN9XbDF<~B;#c_Bbh^(9g@{qf}|yKz9pxzhtq=Y;THCl zIq2co?Tud(*=hw|yHe>^yWFH`*&JyJyMUvjhRL*o$t3PJ*lr>mF(Q31ltiAu!G0Zw zdT9;^f?cFr%jtvD)wvX$|By4(nSrU$>8Mv{Q2u=#g;?W^FE|0@9Y8qc7)zXja*$O( zITJCIIIWix%)vPKHZU!r7z<oRh^ivG3b5M=T|}DFdnCN@Q7}KGpfavP^CJ4Gk*p*g zSBVDTSY8fP);^#GGHabvYe-j7dUYyk38X_Qz3m~dA6mBz(yf%<pGsP3q)#Q3A@nHS zZF38x&Um<KBGHy^{}Wu{(AqOd9raE-2Et0m-o78I(pl8@R-`cw4#Vhqbbur9F`NYk z>UCiH*p3)sgF^Bn8Bh(d1IT)-cbqeXLX3lf<AvP<=lWJ;B3K<};2<?E(SZzYrDG3Z zvg;2lI2vcRg8Bn_btvcr@&dp}Vt(peg!F0P1(rJZAUTc6R?ZeA&ttMv;2&_r-hp&5 z&3Oy#51BmM`2fj%OtvZ-gJghi1k%yhi{yb?5gsHj&<KJ6y$dv9DuP~ARLm3)5t1s^ z9b|`IICNqxM1aZ2DP#_dGdBYs;h|^>m;rf^ykD5X`BbT-fJ0V<hoW^PU!{PDq8mu^ zP(+uC=(_U-4jEvj_2?YfhI8<}h9KJKe}R*gc3kTaWdm5@*C2(aFBvDhjL<D$i`G%X zI1SRUXcsWXlX+?fT7uvopsY}LP{Ls}rc!!>a~Do?nCu;0jFZ$EUY4LUQ|hpkn+WXX zY{uz9Ci_I6!|4Ym$C!MipP`4r3q6B_DEtG*V_+g}g6m(1V2KgY<B%+;crtZdPemcK zy^eyJK0RhH3U7z#b&BUCibY#S_ftqj@t_4*-T_+ngS3;UZ9)dEzFrKalV#kB`NH>~ zF5nai5XG-86yhD1J3w(oU{NM&l82(HILHptpksarX)Aqs7gjNwdh6ejHST#3@^XrV zVoY@zp>x0%tsNZGIi1un>2@P9-8K;%>qa_roLf<uXNzWcM^S{#HyvjO@N7Q8MP2LT z^gS-`!7SLc)Gg?tLq~N7A}wfJUFf)+s1+l@1`rHl)+MYQB7y-b<^BwPD@37kQe?G( zuyG>*atU_A{Xz2$#$aQMFkZ9%qLK)oZ6wWH32!o$IT4->@iHp5vf7dDDt5dM+$O;* z3RdC#GZ9zPt%A!8c@;;Dg7+~}q3?;{)tJm$qT>OqM>Gju+hq%!Bfi`1z{~RAg_3mJ z42m5rcsHphL8T$r;AT+Ay#eYQ?7;_fr6*SOcTgdga;u(*<hG<lL|cP-A_dPR3JOmF za~cKzV%%Cwbm2lU{)fyR9_DReyh7%yE;Gbpis)D1a%nO6o(iS06U_kgXbL_|5Xd@F z6%#Fnco-p{sc2f#raH*>Rd^<(=M(W|JYOYQ1@3K>{NR&B?*;coN`6krSVZ3h^Lq;Z zN)RZIWN9!XhCCa0IKe{eI-KG)?A(Cx49LZe%(C!MoW^4hw)cVZrh<DOCC9=mCs(!| z5v~O1f5`1>F&o#YDk;Y#k#_^+j}y~NYRdNL35NuQUjpD`g8HX2B#RLK67s)@ImJ@d zts8ep<<lS!{U3X96!THtgc6yT$ZH2tZ;HpI6c2#t42n4tXl-U2;&3JMCP8!?#plPx z3}c7~k$1llFN=%+#GADt9)z?0Xk3A@7Mi&{uNO|z(1md%D^2<<@=iD6)p4;bgbLF_ zh%dn&thP{TjCVYeBJV0l?x6I4sI2NJF4u8*5P%&7T^$FBChvkHJKeRG>UB=eHw0}0 z$kMglU2@oe4NJ9lg?zxn-hlE7#eU4kj{Bnl&(;a>T7S)hax2vfc*hTrok{udkw@m% zsaF1-rQ8<>h;Xp6n)e5PvTj5<AkvYPr3&X6@j;(h)lj|>*S8b3WjhKV191=R!5mxl zLKEEZiAK`WW}{)YdgvYs2^SQCZTvcC7)fWp&QwSiVh{GT*Pv~>g%HjiDAQ|@WL_Bl z#DMzQ_h^vH(zy?yL1BQZ!sBr|2Yc`opQZ3TBN^pW4_88RDRs`a)v(}}Wj(mJP%_ak zsRfr4jo>t&B=2!ZUZT!IdDEmWTW&pyyf=(|g-<TRyCM3Ks+ahU9t1a|2_!fBmGW}I zE}&>rTqMHn!0Arz-R5@K)K714UqO`xpRn1Q+?rDz&UqW72&ZG27la2H<STX*v3F}l zBR>I>lfBII!^43b$J{<mWivd%h<{FHD0~jYygdp!PGTceO?a^pH}r{B6JBM+A)i<^ z;maW2h&@=~6D#BYG~&)F#Gc+Ce!>8I`haf#7U5S7rf&+22>;uNhxx>w*6|%MeD)fg zj5~bOl~qX^fZc+k1wM6ElBf}{NFnx?<ah(T!Uyz}WU#^9lma8dXBzRnKC!1HGl97o zd+=pXN#sQ+4hsLnfWA&;NEPfcgAswm<{|A6<1O851|3d?_7w3`13bDepa}nDFeRxl zo^k~6gjW`Jcpzb*lowoeQ4aS2W)Sw^jJk|rInQ9uPhm%dmmBfA6k>I84?hIV4rWtZ zS2iIP*EbCCslx)j!QEq2-mO!`6XE|F^xngwMffPZ3n5(=^-|QZ46`TJg$AADL(9e` z52}D=23S}p(BtiO2Ho?pXc2zf08gzG=<zlak5pyZ=GTdiPpHB}40>suXz4N!B7Cty zUtA~Jjfn_9Z_w-OM8_wA;Rbj_-UfTHR-;qT&~)4G2IL5$@2(T=3H3xEtB8KDp1K3j z^FoeuYN8Y76Z)G7`Klg+8NW)&V7W~~<lP3)0|frShhBQ_!&W51kAnRIMF;CKbJvCl zzXI+Dl+>&5lY9d1Z<I8wpMz6e$Kfq+J^V~I^Sp2#PHnLVo7Yct&Ml+tG$P!=0NeY3 z?x-cgeGI0%591mW;ZqG}kPjmxMju3Y95C~+2S@oZp1jU8m`Og2o0oRH+5qR(1r*`y z4dy~0#^cmoz`Te(c$p95aq1m|xzUI5JN1JB-dPt=gd5_u6`A2yAI9TU8(>PX2VeGK zJWdTYm=Amyzf;o<@T<CjBD}(2{_tTuPF)Ag<Jf~~!NfM@aq1O=3Hva9r@k@3Hgy3- zI3r(Y*xiTmIMp7QLD+-+eHf2ZV-04c594=gkpWJq3n;=@8O*spjK`__fq52tuqwDO zVQ7et3gI1)e@x63L3QV;r}X;L_k|H}_K95+8hFqEw;vYhy+-C1=&V2RsW2WQ+}4PH z@QLGDD_}1JY{12)_(&AbORglS4lCFDhC`$6ZVY|5V@0nm$1AP?7IS6jek`ZRb<5y; z?O@Fk#ay@Ive5BgE=HKP@ZqcI@!NbH01vbVrYG0?v6gr9Z6HqAL0CYp#+|@NJxI%Y z)*j&nN@oCdys$)luTC+Sv957ldR4mA>IdfVD#IX(x%joh1?<p1a{+CX%YEiq<ZOu^ zTyN_I?qhU76>_T*_3BuGXQtS(WNGR0*s46D*T}kM#a!;n!cvK{_NDSqmf%ZSXyLHs zJ&iC2dbQ(ahSye|!NGcOAd2vdtD95c@o>Pjtg)qJ#k^BE4)=5_Mtz+ZS(FoAX9W5> zvi{qB1}pdDu1KqHvLr_I_*V04<7SPlH`hgOf===Auy-x;mjy_lI#I4wvjFK+WdVwL z&o!&Dalp|IEM>(y4tuvK=6%;%7t+w{V?*U*58iv-2}rj>*Uyl~4Wg-#!+tA@c~`U8 zE$(D5WU_?x*|!+*sSej%MGr3T-h{}ljhk&{BFB4Vt}Cg?U1IBia!|M)yJA-bCHsU^ z=tPwqN=}f?OQl6IR|4Nb1uJ-0Wn974+Mue7u9mEe9vr}VMQG8+E$1KgRTi?Gf7E9= zmA)F|MGxLR2N0WKah+FeRnO9`SL8ju=)tARr{T)tIPO?e*Ia+7kHTIVmrc|q?!h~J zer9BITz0pSaZ%_F*xg0h39?pyvRJFCygwQHP0<Ig0q*CxjeSNI)v|1^$SXY~D?SIZ z``qR=OExc2%(>G6bOZ%%r~)L4ZvgnPZSkKAQ(1cm+%;|<lXV`?q~f;Yn#Ko+h4%9a z6$e!xPv|&vmFJs0A$G^hbGD9`h;Y;i@X<ts9Xs$lFaf4IP@taU6@5oB4}m5aLIW}- z4_uLsa9&!(R~{lHi};#@e5liKK*x2cU8~_5_feAj^d;jm_u*N_I{8rhJuJ**Tng*d zFOr5oYLC<<AW!7eyo`BvvuxB@TE<d4s~HS4-;Cupo?6&BZ9r#SBA0=Vg@PrzOU^oS ztX#<ob%#LY^dWLR`E6<7c#v9NLV5UfFjf+Ct=$y)Q@u)BY%~rhuKHwLY=<`i@di;h z+9xHVrUS)if*EV<@JB!dS*}~`)wE$;5#byzLs3#|v#72_y>1ik0}(%LlyQ$=ae<LM zlv42~h`Gd-@mQkwq05nrXtV%F8R(1b@K=Cw?I~kxVjc<_jzGkx?-|dy8Ob<k@#zrp z(S63hQfglg5ueUy>`1BoB1FGZ{Ho1bi3eHM$w5fkvJKWlb&HdJMANlI5nE;vxw3I( zl%BK{UEMnAdmi!Qgk#YDcqn=Tojo8AlGnBac&~#e)f&Cg@d{o&8huqb7IOwJDmB`V z>_d+L5!!}>kfZVv2pjE<uEuE-lRx)_gg8PJE?Nu0b_x%q5WWlnr(uo$WZ<d!FKWsI zA6AR-4?u8*wUMyMFc7p2T+Mlp)hJ*QZUiBsRMz3{fQ-f7D9w6FLwNR@9|tjSBO5iW z6S5o-8G-CXh|Gw=6X9C`*};tPE+iQA<!xjn<a@90Qt);76P)TJsEwLg3^p+`kl`FK zdsEO#KL=9E%0iP;NG4O-+Ng!6gS>>SHio6J?i|lKl#bt7bi~^k`y9U5@ivp+IN_Pl zE5n;P-->n&>vXy*uVV-<V<?JQ+k22|^$RYyjrOy;Tm2!E(pM4SO9rxu1d8)_G{7(u z=qn3(4IY>VPHuPwP6NRXOhfr#P&C|VIMcx)tKmNkhws?f<lJjGeD;pCX!wZXoC6L@ zAR0blIDCkW0Yfx=-f(7vlTXg8hQo*SCxKJKmouKLhbM)B(N@Oy5RU|x4{)t4^N2Ta z7M?YyIn573Dqr&88!t}t9B9p9Ny;Tz0P;DKeAMpry%^+X>;aa_>CP+yd=1mKa$f_= zlC4lQ{gM0&z~*aPHl0yok@q_!$JB?EPuT3xekiHgI$gj$KSa|gzR)7WKt$g8U~Zyd zm8&P3JO;)mWL6t=lkY+12En>i&QM?=uK?s=viK6Glluqlio7$ySxxSh9&U~-(9M#g z%5zA%buEB=hb(Zb6+lCv8IQOH-%n}5cTq&MOjKH0V6&C=4dCo4foJ3+efRaU!1J`8 z_lvRkqRgx{t%lm+C~{~bz-QY|ZW8--u<-z!Xc5i^@MwbHG($x0u~Oo7=zRd%2j274 z`#$MV))%PvT)+e0$aawRlyUf5(AiGbtDvR)JJ3y>toJ~-B>sEQ`A+lQpi4+|fOML7 zLOzn@<8G&UA4C2q$x{r;S5=+nV+{GTB&Qhi7fDut98Jr=lFVBJQr6$^By%S~g8I7; zTv>m3sov%0u(W}UI43j{Xw@i{tf5E7DXdqP>5;MOM9wEPmlbCVW#p(hM`j@Mz64M< zkUYOAY++0~2792He&FO5p%1uoC~4zSnoEcIewfHx1=&{0+xz8wX$lX_AgjkF*1<35 zn^q#PF=WFjFY?GK3h|9Ck;kd|Rg`!4$SG1mX~BN0nswG2Xe<?w1X`f-h12{WP?I#@ zWp|q2Z^+h?d;;W3qT5T-9Yc;M*_y*A2L~&64KS8ajFm1UB;P;nCt;U?t8wb}00q7w z&LvolATnr5euqykK}x=px$|kZ&ON#d3|V#06Xgn&7twDZwOEvo@^R&%^tTRlI{E_0 z53vWn)R%W9&}v^oa*)#RQ%J-03o#qP9>}ruo3~1>Nn0@cP|(EE&UBYykgr^rI56&_ z??AvN5qct=a{8W&q#T(0k_=x7@^MNBSS&VJx=rl_^Ct=h5vO7xGgk*0BQ<=m_JQL| ztwlWa5Aj9q&@WwZXeUK~AX&tB8zYnlLR~@fWyB(`nG}(fSIn$V18RZi4_~rk*4^!q z9(Wvt=}zZcpoi_`C%}X(_%6;?!{8e{We)lfr(c=OR<RH9BnFA2G0tMQ!U^msSpCRu z<zXw8(xKqbr>v8zj#k6ZBe8V>?X8619twMEMY2Om#;gB+%1-plG@$-5cqIh8RmR%| z%x#DZZJ$iTeZU_}S*1q?LEyU+a0niU!?)cKJstuhdH4=IyDtKdmwP9IaT=0NtN5Fr z%f;ZT+*rX(uqz<W9m-33!9tKk=blPZ1o)0>goi*axJ67AF%^+nK8cjdm$?<aObAo5 zuJXE`G_N~6KIt|d8_=_Nkt#Xr+Kja*$w+uFXA$l!_^4F{w?Hr$z?^3>pRfz=GURjo zJw(C7hJ2nshbVa3kpJSZ9|~SF<O}@SL%}<Se38FgDA)~>9VF*9JKDn@@*T*WxAeQ< zbS?K(94rw%1VIV9WzHwMJ1K$gi-RHIi|jf3jdZM1TMofvRQvBZGSIiBy$}l%l5gER z%;h;ij#?jn8>dcm#<E&7I4-;+s1RSv4)FzT;oJzIoP=KN)FLS-p=-h)V=meU^MsuG zK6M&Xn&DE&D~ZX_uLWt3MED|bw^Gu?GCvzoWe>jq?m<f0T6cQg5)NnEoP!^AQP}Q; zTUqQmJ$#_>iQvws<W#?8F}U|qQl6NlCp_VYApeG#xry2#wlop`6{2H1L%b$YEW+Ku zolePZi4v_i2ck_BZ}sK<j9WE1cTxTls=?OHAp8V4`^o*-Vii)NYC8NYxW^PjvfD4| z1ny)?KJ!WPW`cVYCEv#LPy=7y?O^|#q5~e0Y&Gsdgg*nI2}a1AhPKa}R^X1HB+D;3 z9o$PP$?-|@t^oH1N?PDrtxK%Ec?E0-<7rM?k0|cQDQS@LcOE&tZ1f#s;(bSTk=V(A zETf4b_6v-hosCx$yfA4_c8S<3;65aFv@QFAosG9zy;xs=h<yg|NwAtzZWQo9(yI{f z0kJ{AT|n#{^#c++yM6*z#Fj(K*YtB%sb9O;*+CzIZR7wER~iI<;^)oJQ<y`*9gnt} zbEhqPkDZ;KfEBU6kS-+RQG;mULo9*xK_Xr^h>Qe8h?YfcD<HoR_Nj5JVInNvwqt(+ z*A-ehe;AXQiCAe;b%Ca+Do2l8J5d}F?hQ@OXmSdicfjz8TYL&$i?4X#b*ROA{c-41 zf<*<+2NNEZh@nLMj6K^5oot;-R4}K0c9RzMG11GIfnj$fGL%<@e#<~*k4A^EatAQi z(0i1*BWP&gkZ<5u_IN#h)3O4J=s^e?9uMK%kDwE`@Qt)UWEj%WplDm1Bye#e&>F?8 z=-%lBo*bQMfGZM#M-doZW~8-=Qchk(^kO63oG9h*BSdt)k#0$pa$+H(*Bj}!L}_E0 z?_EavT%xq4ls<2yFDFXTbz%86BYiDVS}1kDFwzebrJNRs==VnYS)#Oq)XnapgZfRP zw2PD$80pW6(w<UUY@~lCN=qmW4>Hn#l_-`!SqP6b;sT#oww&;4h}UD!?&lL%_knSD z1`;|k?<%0~Ao65S^NYa+brlak0NHbtkM~*fV0J+M9x>-6Vnq03aQ9Jip4IR~PxFjl z=|d&q9{|Wh8_2#eQ9VQz5pD*N6tDA%&xBY`9)vqt2=(nQ`_g(82J0%aGl_5sES$j% zuF@9lwrs9Fz|#Fqw%+gzFjgeu*l;~K*^a~41M^TK4wM&15--Q#^l>7Njml$Bwz2S! zz+`Zwi2KLp<-y6;7Csu7eu+3XG!IU;yYMJrW+&p<s605;##RAyb0Utd%Y&1RE&n-U zvdgm`#hE3`{)fDi&DsijI1Fe16LcDuw1|6z?a0a<1HKia6f+I-)z4ogTZG>P=L>S* zFzc7O6R3dUbPE>YQVgf3@jmI9(O4m}!rQu#kn{J67&)gvv+)=wy34ZNmK`oBNb7~W zyb_2`ccQy3yC54hy>C3$iGB*YC1_r;8=v7s_dxYc7(WM@hlds%1JNyKLUgth-4D?l zNS|>sM5h%j24V$nQ5uhTq6Z*qT88=aFo=d1Ob6mkiY7SGDm*+n4eTY@8_(oT9fR@_ zq?mKB1@mDF=FlIH;At?wr{DtqXfZA*{0&ULkK35<#OHoWGa*7mVb|f9gko>Z+x-N| z5^$fQ<SL&e`VzRmQL@RG|DRxT;kfaAK0*5tSXRQ`_;H`$OfWB^fNkC5ar6=}pQ7M( zUr}}#0av%Y4)@EzC9Clva1EQaBbtWD=CnZmj<rt-I;{+V2<Jl*qqK>|Hb6xc;qWjc zDRd<&XvB%|GKlY@Vi${fcogq9l9($|iqe<xZx9~?6OGTbzGNl1uI>XR!t8!!6i>3) z@;r7Y8_6P9qU;hU!Zi?cp4oV<S=G>y;ZlYOzX<U-jNFZHwm8vn?S`nW-<JCgm{!Ex z@8%$bp~N{dxKBXS*3rvrgZ4fXdt)x6YHmmtGjA@~_fw?q5tOIWl@vX5C}%<Q&cck{ zYVn!lpXj^+GYFcR=oEYbic{g{XYqcw-}fM!Peb<jVY6)0zc7sMyr;#0A^#;}p00al zq<|vYa154Iu{U4whpq@^p}`bdAhJEAEl!ReZ-5si0wWU0=EQkVi-FPU2DmN}sOCK@ zjr9IR>GkwDdYO?voG2}1Cedq+bW5Uiqtw0KNS{oUK9501MDH`wrxT@{r0(NJ`dp$k z(v`aZGSU|lrFTl*oksdfqVzr~{m@8vCQ2WY(l3qlokZzlQu>3DzMm+4N=pAU(vK6R z&q-<UbX~8XCQA7WcM;7s(%%!MvfYFSLOL3IbH}~)EkXtGr+?snhT*w+)VdNUx535l z^jn-5o^C+JR-*N;vZ=7=@!@5QKH-H18S^1~04XO<p{J0I2(L20)9V7_qX`Bx$A{@d zW6I8p2D3N?MuZPS+-NL{ceb7Ax!<4007>9RpB)z{!tH@Mp2oH$Vnp~vBPsV~Bkyj* zLydT93UP>W#|x#v%%t%hzKRIX1-Fut4->Nud0blw`PIaH=T@-l^&ZU4kl#nlUp_l3 zl8-|4FN!l0ofP4h!R7sP^N9HXgC1+byCC_JIvwpdOA}g;S+8nwQurGHvd#dgccS4C zRYW)hkrc;#;{3r$v)C3T-Q~zQoC^+mXcXbDuy7hP7_BYXZF%z}XKN}7ay$vo1m>bd z9B*_yI5~ENZwBUxM4US-R`%p55`G1kJ&8DXR;+MxJPF$vuUcXE_}3F9_v9<b%5W!O zPD#YMvtngWjzHmZV3sA~+*z^0$+0MW129_>alFCu<SR#|@JqmanTT^|&&r-0pTfTb z6T;=pQx13btZ;Iq3U>r%NFt8&JWsxI%#yQbt9gYxdv5*!U#wBH<>vDDRaS044pX5) z?C^{k`Uwnkg53OG_or6FiNWym>yVTa<e^-dnmrqrV!P#1rwb`LL%tlA?uTmR41U3; z;3ts3&H#z2Z53w0G0b1($1x^3(HhKWAH>S%Rp7N8UN8!$+fM;>suSG+=&go62efS$ z+-K;ypq=>KyJcy?R)|{9gz9+^1?+<7LG!U-WVsXF2zn=I7BsTLiPnPt)X?jk=pCTH zG4y3l^iI&ff&PT9Y;dA?fff_A{cD}*X3#l?zRrnm0bK}M+P@y3=?U1*WW=SxG?Z#Y zK^KS`&x5I(@xdNIn}W?}43S!VuZOCjIi5xC!yN_aZlL+JGqS~r?gm|A@Q>lPAz&At z0(uSh$a9=UHHT$O6m9_HT{7Q|Gh2T}#$H}~6l%yXWZ;pooY;;>@w6Zsn2xpKaS;B- zLQtcPv>WaT!O;}7w2mRi*iujN)EYVsEd#FQY2iz8dY<qOiExqk6eK}5gHEtv+|G-F za}K#(Jlxnt;BeV6(p`<ZYT3}^Z|q4RxD*&U(K<L3ZmFd}55iqgZ#g9PBfwnqi}W>M zPVVF25KV|!do&-e<3&y}Fs|eIVc~Ir-G)6fOy5cB!i3oT)EY+YaU{7!8!59oF=}dw z)?+G;b?2TfPmO&KHLli1CR)2sm1<nA^{DLwH`UXNmZ!K25-nq~0q3YS+{jd8hHJPU zGc>NBV%!Am_t^1NP-bbWCKS(#JyOJe1Be%^$Q<>!LoN2kjfzv+&r-J(k#muoT)K`+ z_0siZK)Bi)sW27G)m{%Q9+%j)z;X#TvdCb$1na@}L}c}v(d)owqsK*-B-V+@D+ITU zl1t+aOex7P0M&JOv1$%K!qak@(}fdz4r`5=vux!LSXrwurp1QA>Z4eP$aZorWDd_F z2P^kP*0<;`IXlVGEKi4NT0{89j1oK4aWJIS!W$vsePU#f)t`o-JyaSDzYU4(q5Ith z43$+l9llD*udYPt<edbG?7a1GT~GF7m~|}xvb*xrNZN-KAt@#<f?IX@PHdzxMrIbW zm`eep`s(+y8(%hf6S%G3T8!cDGPzbz%;kjw7jVI;1c-Jl%FB?b_go|UEoH6;2ce^f z3h^Y&s#oA6zrA=fRf@ld1J^)BIq<R8DBe65U3P$Wp!vL!(th#dDY?(5;I{t|&NiPn zR_VP4M2bxQ3wHN@I&Z8C$YP4(wy2jRbWa*Y)oP2QfyqXR<O}SP@5iZpR;J|MpOX6t zxO`?IE#$l<7Y{^n*14&;C#B@h1^0qsCUiSh=;RA^k)86js}nw<&pRzSm>09n9CG3H zR8=c@J)4&$1+Ql-`2DcnVX(H|e7G&EKt=(Cj=~ebEJZhxmDl(Q6Tr{GP7&A4`Kj0r zd&xF9YSoB9=U#XWJ|BnST&WK6AOfG_Sady^Kaj}-UP{7oxO@wO2N9@03cY#L@pxu$ z+YjRuwC!Cy1?=B>O0%2w04mMyz*E5P#Zz{KYuJH7P%Yx)jQ|%6BRmAo0#Cjm5UE5; zK9q0Lw&M~wVKq5gexs=;(oKp+bj4{VAWe$V5k(bT!8YPV!{yaaeuSFb0fyU^Tui{Y zjTmCM-N+4S?l8kWj$92Mak}AlC$~gn#~Ci)?1A5sJz|pK_8_;7#?CO@p5$`f58H^j zhI<0J`I0F{EHqrc_@e#}Di%c6jmD2EAZdCmg4GVtz#4D@3_|=Bi9`5U8k$sqE1?k{ z0{8I1U`Fmg9jPZtG9_c%wA)a==u(Ezm)K4JVRs?L!MV$M&|o6#B4o*z5u4tJIWNBO zxB)b$G)*^y#upxM2E7DEo8AvP-_Cl-(3~T;x3iuGeFfzYg2wk4w}a+=c+-bK_pr0x z27L|X4}<P$XMJqwNAUH<$80<6E2Hoz83DUF-w@<ywVFQ3LAdMBkl#iFPmwg$+kGRd zqv^|JS-G_kTOoQO=jQ4KFNN6UMX;QHSojd^hkC=<7w$a%0cnpx)hl;RAeWe*Wshc_ z3L{^#lZQv4gD3w0j-oMJ{!}Iol*U{%mOB7iMqu_4fENL@k-&(<YK>bYB^sF}kEVCo z;aUUj>~I-A4t;@<Axnf`0A@GMm83Ek-ebhW>o!pzotw*;O{e%w&=(OdG~y~>$=uS1 z=#L2Z2arpqO>dRY1mf<pWIFJZ4dywYKP-(bk_4*n(u7w7eIqTt?XWRmzM!f}G`S7j z=O}sKNSeMu@<00Hi}stqt9B$}yCC_M(jQd;)!a-XRISU<$1FVDk}xMA!>#759#}l= zu_&;8u{X_?of8uoPE<WuWin=9g~lW&q8^yX<Q!nDX|jhg$(IQ{SXmvhD-7(k04o4F z^Nj)z%vUY3hoJBV?aq*2y@LX$oF0XE^~63j*p<d#zF^?NrmCjAL(s~{kks^21i{f& zlvf1KFmiA3aNW5ThJ>3+Ftl+gA;5<{5gr0}F;#jNQV)}4s)%FfiTvPn(_nr1s`x2b z*UD}-pn*I3#fO-$P&TXkN@n{5lla6P?C2N0!)w9kGuoz3dT&^!c(W9fQtt{fN3|f( zh;JTz0*z*$rMca**?-c)dySQjhqt1haP~ndWuC={N2}+Y>kaz&!=u$x%r6YO*WuCX zS!U0^+LKv_N2@2A>kN9{;nC{3=BEa|`tWG^bTjXGOeU|w-n53zOV@#Hx4amJWF0(? ziU~dK9^}$|-tACI$3&{>b#*Js$&O#KF_g}w;>{jKnGY8pRMkrznXSyM>0;t<Pggf7 zHk+qvOd@t6B)cemSd~@{C=yY3dy0Kxw6+*6zP41imTW(<?gMmQPZ%wZG<9pqb`)D@ zw4OFv9C+&1lI<z>xzT#oXmJRtTT8a9Sg(QF!xxMeN2I#7Wc!L;VYFT|S{#<@){^Zk zw%2IAX|!0Mb!*A?<_<b-*`@n&Ra}lET`;50Zq`55IC2AuV0B*rXw!c%Y2{u#IX;do z0iVw{nr;hLm#J}Ny%duQ$%AZ#SA!XnOR$aj29q32HUz_88THTqhPql2K5dZBaqr(y zQH#=#8kO(<hKgFBj+E+Le)=0KY6<#cqw@RTP*JPQ-y4;`{)UQLa6TP3STf*|v?B*x ztvx?&R0{uwidu$lH$>-h^xsfXE7F%6mBD{QMJ`S^Jph%ar={s(g)cLxwk5(A7FZTz zZ#qI7vvcciR`R9oST*23Q>8|!sF6q-ty@*L$k;)ndZkh2aC8J!*&1V0V>;Jsj4H>Z zBdE$&8GFO1UT;)6Fdacvw$4~@tRu*>-fUDkIvqh(w$j)?jq2@2l|$4KRAp<8<(#T> ztu?9~r;ea1TWxHaQN72ga<Dprs%*WnJx29@qssR<kDw}Bactyi+TkaRDi?c?pekE) z>?xzV&8Tw4@d&E2RmX=|4s^$0V8uM{F-%Va%P<B8Xd=Qx;8Ku9TpKImO=%Gyrxo#8 zSrM;WMZ63Z@v2h9=SfApQWSCEFXHbMB5%{)t1uAh!_<4U%v6y)NRo?{f%XHyn~B44 zKAH{jAOeSQEczcZv!;N_g9zl|Sj4v-BU15bl6+_x;Gu|i0(|yUL}`SnKn#%h?fdbf z<29HtmelVb|F(61-iFI>TaN*@K1hDsdLq*I0oro0Q;p<yCR;gIBDssn&hqxYRY&J$ zaK0v|lk@g8{0!x6Jay?J>>$o*R$x1%9eW_1oj<1FSe#!6BmZ=nV;7L^P^kQ|GRNUe zhxm9*1P%ffr`1PFDaMb_rt;myZbD3gc0rNT2J~zu=Qy2_T#97=DZ_gqDNTh`N~)d= zrpKt9zA2*<Aj!T8s#f3vBs<V+`6+PQlSV<F17t(~;(`FqvLNTnf`mZIf?U9Y6f`m9 z5<A+^DrgRpHI}~=%NtffYeO!xqd8VVdysE4CY4z1unJBxy34V)VHK2;L`3peU}?iD z7zVOF9L!&dl?|)lbddQZSK+apRWJ_ZStM86(Ne2mCCG&&FS4V<tb$8G%8aV*=vaK1 z7-SWtm)OziR>4gmWf9ie(Ro;K1i6~h%j{@{RZt6ZJ;}@M=pw7&UXaq%6?Sy7Rq%k( zy~>HMv8;k8Kr`(5SMzZpn$nFRUIw%EHGwBl)BsnF1AN{nQxQr2G)=D<weFPP5&bT^ z_3;G<(X2iJzx4?Svs3UsOt25O?t?Hpt-q$l63%o!2gVBR#Zg3m1D6Zvt^0pRt}B(b z%>_{PR)4ezm>I;KoQPw7>Oo6%zJUx*gtS9G8nOuxuEw{HB|t><B`~?d-}*H3bnXD% z5z(K)%pMQH2%2&I!)q&G7E>^qF2n_`yOVi(oDm%W1|PGuK9jcsu0TDmAWKB20a8P~ zadkkv;A;WoBc9gfiC{kQR1aRFPXNNlT&*XY5BjT^lTxqOM!x}sPn%j#^A)TCYLkx! zThB}|AAf-p9hyy`1h|&N9R4kUawbo6teNQBOb&M%B3Z>`B*169a`1^3<@cF@07Q$^ z?!!3{?UsHG&LaIfa?@|c(N3?$5w+fc>yCM7a@o;A?p=77B3NY)jt&8ef8-{*=mD@8 z(o66N!3tfDW9VA<a1&FvxrbV$@Q@xF%s(2FzVnyx(bMFD(j(*!mC0wBJT>|nPN8xn zZ%UDm&v3LQfc#@T(HB#IAD|cV@F-JHx`$`zRCES(H!-6(Ol`;liRisx?x)}#(=fH* zFEIH*gy{PT8Y%?w+<3n$qWvZcaUu37Ur3C{OZ2;x%+GKQwsK#9BYGWU$n9j~Z|`IS zYmY_1lvIq|3PI*12=}v$wwet}z~8Qbk$KQBqm5s+4NeRFHhjSyITH$xQRxq@#0jBa zDPHVUL5@8Q{X?`N<O5cCVDh=^t28a@nr)R7PRfZz<!iztV*mWcYs1}A!PM9TQb z9)QNr)M{X~ILC`?sm^7iy~}w{1{3Zd*^sxA`!FUqiJoe8p%VK*)<A%`K8>pb*WukI zs_0qh4_5axAdbqv+F|9s9Isl%FDJzC<s!FiCr!(#GzG57isu^^N>{{YLLw`Ex+Pn; zs(FccM_T^?$I$2QVJ}nPxrd*S5{<&}UG}%pmR#_X9d4vbKRW?gkFsKSAS2m2=9rAw zJp38?EXO{BmTVsLjTYO7UyIKfL-JtHLn`PV8X_fP1&Fb1AB$xzAqs3CaU*yj4TNkT z`YE_-A6~>NAY}WfG&a~i;)sxpQ``|5_t@jmlI>%K(PI0EYaO<IhzQ$6U^NO?v=yny zc9K_;<WLxR3uF=dQ-rC&JruB~1c)o*NEDC;m|cX2z)nIs&H>pIhrlN!S+#+IAd49L z2vdOr6tFA-;))p0$OX9n3LJ%0fRFPdJOuJdP92KF?WcmrD?*?fd3@v;kdOIgsua9Y ztzggkH=3t>m}!|O(W6G!!N1h-<pW$xKcXJRv0s`=V9N_pu=D8dcmz5ddvIVHKazvb z8*%YF;n!a7hw=Kz?_!mv@nfMU%sfvj@f%qu%wziGG)`5-n7IqI#rz{%lphULUk*I| zcIds2J-9qgj_`+ZL}k7_EuMLm%3NJvGdqvDTNf+y7W;_BQd0`~2{$4C08HUAWACoO zpTERjIIIX|vRX|*2@8kK+Qhd2Ws;W<amE2a+Af5sKVb^hKaT28)bWQF12B*PF}4KY z=~U>V>`G%@2vf>k-arI|ICBXwS7LAT9%Zt!+74^^BRFZuzU?E|p?p?b-pTP#t;jzm zrI_+>M5!bin7q}y3fQxbgPOI(nh>ISOp5i{8gusOuJ~PqpS?tV(rer~5Sne2PFQ2c z%b&?-%Y_jz%Nn)8n5d;l%FW6NqbL*P2jIGcQ+_lgR;P0Qxwv}#`zTp>hP49bjoAl{ zqBb9<`7^+rIEKDA<pA+7kTSO^8obOXHC>I|CiMd{s6RA!D@2n$ADgo}O_raLQ=gkN zE<||0TeJnr>LX=rEmK%GfmgsAcWqa^&!zJi<fsJ7Kb0P}qJsy)8$aD8S6XoJRuu7N zt@NHgTlsC#Rwl@A&ozXhsc*JT1_kf2V?@a>uDxvowX86XdQF=Oj<e?zB|r9e15y1^ z29u$SidY+nk{?s#pM~T$jjkD&K36<p6-=iyem0z$&g>2UV+}|4GQ%W(#7al|R2dG? zu{!%<1khykmC3O6jDGNgn^o8cIy2?x5S{fk%gg&BN2}BHnUFU_EV&)4&%rnCbM9&# z=jR(f{>1n>41odiPgrvczGaIU7r{~u2&?U*$Z3`ww$#Ystgl@@L4GLk0(h$iF*T0N zX1OQO!X*1+mPv;CU7%(&pU#v-tl!+yb_sxkZ?;STV&Zvh4DH!ko7Tsz+Ly?mo?7kt zLNHT)IM7+YarrFIM+Ql&wyQrhco_`NwNWYinbkMeO!-Yg!lY~46!#(+oX2le2IWUK z?e)WEN=J#4RaBz`ais}J#JZbK$TmTgnD!dpj49NugMY4+TX5gG@j))YzB;Wf#t=WO za8x<39ugq+WUPm=tnFJaLeykz-$PLn`X&ENcVfSs@9CGnLMmH*t@inD<NG9gI*rN_ z781p(NJ2%d%ZQRCJQpZzvI=(7t)riZ%v8Y!UlnXvzCaEix(e7DWfg3Orl$%vs4A#Z z+;oiX2~|*Ps$hevf={*kU+6R1O(*D>D%hZ_puY}1|I{$II;y}AORfUh+|UfIjvJYc z+uTfQgDTW+<l`yS#^t7k>Edlva{K&*;yLTLEccYwS-*L?DK0GNwg(HWnQU5!SZ!g! z6c!lW@=)vww!C=+CAGE+wzd+8l8PtFSiUgI$Bln8n48sc1#{75tzAByJ;x97l(u%c zY+)%7yAsQ5uP-sBf(}b%beij|QNq7GC9Kue$-imL&3KqxM%knMu;lVC<oIbWJY!6G z^%YWnr=~XsnQ8Z;z^7>GsRmW7x}E;EXBlwn0;s<4X{iq6*9tymzkY$~vHI(~E1-&P zTsms(-aMHWU+S|pX1*L!^W|iWUt*gtXM+Wj-VXXaInYJrtnsKI`Yo&QU7wj?+q9FH zm~8b|Q~4z}<oYHeU`jq&4Ya~cL3(aofR}-Q8_%)OlH`LRXE1Ep09(Cogjv<GwOM<8 zshYpY@bU9xGJMl?*k-!nON>@RFdITkwg<l!!q;f2DTfZ<URe$~mh6UcG(^8Ya!}u_ zWM@I$)5q-fV-;F|&lldyjBnR&*6K4F;>FNZSe-GjYJh)FgP1+HI+~*&Ryays2ju+J zGt9FBYcRH2y_;eF<txmvBhaNX5W}FJ9Ec<8%0Oi+-EGJ_AyCs3s0j&_KZrUfH>iHP zRE}Z%i=7Cps5GT?1FP|M(xqyA+erhd$F~}Y>IkqH_Z^zAY3u)y%?HsQGyW1b@)OzS zN1y?Y=ciB=xsasn0#f=E$VHbCT*B!s$LU4alkBU=+U1MxAlYA$8<#J7gyaB4)-0dM zWkG8U=eIw@l$z3<%qh*3bdb*zJc#74Adi2A<Oq^woJVd)!MJ^>&(@&g<tBdm`@wWb zH4~RnyL>!nGV0D{Gt7?X-^5kqTOei43k)ZieqQL>)Abj(=Q3*5RcI&MO2m55)zCE- z*KipayYW!?TkZ7_C~}+l5ldGpr*kM_l3dPYx4|!KaFZ%iO#RvFcqT5RcDb7DsBc*h zgT>jL>P}$6-n7qjE$9zg$1S)F6pWML&eSNfE_F5BlAF-F41MWxbcurI9I;+<wcRKf zZI>a#B6~v(vwX`w^f#4cWQL*fT0;shOc5Db@O;Qo@P019E$3!6&)TobImrdM#oDZ{ z$jx+dTE&Z1<AU8%Y-Z)kfwPOobvO98>}_@6#p0nF#L<qMY7H^AhO5~crfB{meJ<mD zjh|@^?Xn_8`BewdUw`Lh+}ko1!1`3S3}fsZodbe3*R|#e)>Jl%Byf>+gA4WqPKRQF zwrRXa<-Y8~6GJC^_C*?hi9TDgjFqNfZbvo^$itAcEx$7Q@nBcm<C_YLhaqb%NgJ0t zSKH&N()KV|Yl}_wy`~*k)p#1K@gwXrIBe}^OFiu)*Qo1%ZSqj1uGeh3<LpMOObA?` zjfRIIJ5UuhB36m3;reMbJPi7MtM>OHeU{D3&$NcEcMW>R8DI0NNoZb=ndW7T)#@D3 zyk2vyxy=hB2%A?DxX3!_f<1-R&1<vIdo-_OR-0fYmQ*a}K+UZo`a3sOMI%{7{Hm>N ze+KiR##$rSy7t`as_|D>jhgKn<+rsms&0p??K*F?Jq+3YlC&dM@S>!$7;U$3HS(JB zALFkso2*8|{MiUc4RQ^-)tFdo{N}J66pZd3Q<gXFRj#sIYbZEtEeTv?-S2`u<<zyd zU)wZ(q1JZ0@Wg_NIsDSFs;SdiQv*>`>UMh`C~I8J#U@00?j66L)y*({!9^r7HtH&N z5lIYF5iUaC%Xfxb{%Pm`hd#-1WItv%@Tp_9Z#p|HVFH^-l^#Y`Qm4#!`;PUZq`~$` z3{w|wyGdf0x^NLm3{yESqDIZtO3;`vJpK!TNE*hE#4v8S4K#^i+;9;|4C9xJK<|~S z6cboOsb}#!;d7m{_^fW|eHin(_0LvkbLU#d$@O&fm+}AR1XGgtgPgdB<W#=GFcmBN zWlyyc;ty?ucb(j<=}RubUzdIbqI_T`$Uj=rA1T%MvY~6uxC#&zHMbLNsZ=+iDLcWI zN_ACJ!v8?q(~h`Q>T4QXD&@e~TKmNBjdMc<X00_jyOG>dscu9&!ZmIu=yP&Z)w+le zR!4;A>}-ttoF5plnfgAba*@0#I!E8wR4(GHTh=UnV^b-Y0yo0CHS^)M#!ELowJJXI zAWt47YE^vrDRT(zOOF(vS{0wkIxgqL<I@SczV=+J<1-Z2xt*!cb;QRHt0O+Lw4Ko| ztaEO2^K?tQL6ufOo?O}us<b;*Y4=0>@U3BkDlK1>;kGGW+Lr5*O1nXqcD63%1&1%K zA9lFXZewX@-{t1%mUd0$1?(@*`ZblRzuX6;><%?41F%K~V1g3<0E34Qz#0{R-*v$S zh74}#4y`Ur3cwm2fOWdy*Bw3pe%RpxFbvPHthraXdAb3pQq`Rgd2)4EsnYIOrTqlj zhc9iFDs3lS%I@*fHoQEkv{kya_vlhSe)!V*VRe*t&bC~1{$JSn=c(>}V3}I!X9Ui@ z*Y(4V!2V^r3G82{n!p#P32aUol>N)(h*+hBKf~bRgR*~_91(BV!MH0Plma|}^7Z)r z%k+o{AGn>M&vo?pjy_l&L6HHN*9ZYvaFv^<8-P8_WP>k(Jh=(%QKijR!v8?~@TJ|O zO8bE><)`t|X01;u?H*m)p}H7n9=^1GSRJLEGw&!g0sIqIg=zx3RTB_+wrrhuzw3t^ zfnBBv?9xr3IVx8MWoOEu>{3D5sD!`4;NgR^O9kaLTtvC?g(7Yk1q!c73d$}Wlyy27 z*Bw46epnqrkxih60a&!b&C?CQPSpe^K%U$LcB;~LR>Ci!efZMuRHa?5OL=L$v^oEi zRN9@owD;&zK7RPp`eBDFZ9e8!*5ZrYJl)dnR;Asavb4KZX}2liThLA@?Y2taglD%Z z?TxyWx5rB>u1qTJZe7|}btykMd};l#I!Zh3(Rp}L9gUIOfA!g_Sn@g8&idWUF4!*< z8!P2AmbZMs;3;W$x}JJsBp;V0fqhRYXkM=4qyRR$Dj|0MM;20*56_J12ih@oi(XLm zjf^IA`~B`G&A{bc(GRO5bZTl`f&s%?`iz^Y8--oVlou{Tca&@>BzKe)XnCpFjfM#H zNmnPt19OhVr>0f@xwNt8-VvcEGGN1KFJhewd%hqU4R?l(?j`S4Hd7@jQu2vv6-0-P zPBxz>od24en;VP+svqr68H@v}A8l5`=GXYjZXT<<Wjmny(Zjm`JQ?ptrO@@2^MLM0 zvvvQu;PCy(538fNvLEH^_BB+Wt$Dg19Wec<M)jkp4~TyBqwA?BMzS9zfs^_X%FowJ zQUJ$nNQhnX{kaaEQ9VXGh9<HSs&#~pmwRreoXM?2_9H*6j?k%oRE4>hwY1r_CQ~;G z`~CfBkDsB(<Pum&?pS|EUG_Ag)OWyxgi*UDv8NrVOpxyPkLe~qw{aSGT?Vca?1?4l z8VGa4>r9E=j%Q4`3}eD&U_g^ya~o~c(KR7DY``brdAW7L3^#i>;5BMm-x>1caMq}4 zy->nOpq&toq<eZacoz0m-6h|Scg@e-oZVv8=xP0{dOH8X;ivU}SRKVxGuXy#Ue{l5 zg6)>JR#%|Q*x+ZZ@iVIY3_X}-Bah^W{qM;@t)zrx26x}!i~7dICb}oFiSAA$cO{ZL zbz$7*Y5a8=CLk`u1jJ>SfVd0{;H>o;wvvc-)Qu+UZcUp^T!zWSWtdD{hRMWbU?7*B zU>Kv4x)bb&19h|ty|C4k&Eh%NLAMob@z?R@BQiGn5lIZ)v$i!!)lU9j%276)c`8Te z=7ffWmpMG07jGtcDBr>^SF{tPwTa|*e=9PjahrsRU)>B7E*Fu+z~IAXl^>SP>U@;O zcY!jwx^2YdS~tUF;v$k57?or@6AWVNc2)zA>S|~54SlB_E|+<WgeW-Hc?EvAVse7> z9+DlIY~}FBw7r<@;Cu`2$xP064j?&30mz-IlKheFLMA&oO*i7lU`$SN_)FXkOm=iS zfqNU1tDO^&e1OSTlKV81lbm7TzNWbRQpJ8G+bs^92X4o-#dy!DU8{n<;7tXiT|R#j zQy{=5v|Ryz*x81tcCF+uUCsr_!remWsX`0@8#(cpsH2!1?>r9aRK;b%FJQ9F*$M7C z$?ZU_{DCRH3-%k>9iITdrr?o+OgQi#s1!UR9q0<uft+LjzwiXvNR#!gf;k`yHHqJy zt_L|#li60m7LaFYGS4b_8>F#}ADVsyl0~QGe5>Fn<ZsB%RzWKdSz;A*@Q}l-g5DtS z)4CI^f*~OPrAhphbS}sbH95~JxCSJvh8f|fq<o#ykofKBKS44?lrFUj?g#m$1UvZh ztks5LDUg3HBKJqI5pneskJ@f{qpbrD=6S$0Oq;ox=K_^{E-)Oc5{nw3pjH)w?5y8e zxrjfpv{t-4lH~S9>M_AeJ|@V;{BBwY^t8#C-*cOz&(?+NowbAY<R4zY7)Isg-H!|Y zS?}3feebN@39vSMl{R;~F}otc?0#d`kAvB!xB1MzD$Q10JsgdOgZU~sB$&@KvS3T^ zg=_+3ksmCv_(`2-NJnYnrD15T=Cj7ZEOrAVUe}m+jeo0`@jYH=QCk$sa@KDHq5f3) zxXaE(E#<Lfs0Cbzxak)d@k0^*d}S7_$`=?jZ?*Z0kXu1df4T#n!DzL5S}pUR_WajT z$@(t^?*dLtUx8XMfLsHtwN<<}slO9{5Xh<5r2qzV(gxp-ve!apwZf{z^j`~-%>gz2 z7(CVWXA`Vvo!<lezEI>Qe_vpHXl8u5!@e6?D1Y=5^T|+<Hza;A9+1E9g7q+eF~J<w zlfV(H{w8BtkIr{0SL9m6Q0;+<dgeWLcNed(<F87*{LX;-;(+{80Dna;e?b*kgvJx# zG%`@c5?V)DZ5rj)a~d6GW!G=s=+ou6HM9$b)9A#E41k=*VsNh0=!A@3)W`xMgT_;R zQV!}N*wZqIv;dMB848}>9%fn~y9Tz^5=g_($OM0IZjT0CGP)tRhKi)lNez29?2^%< zK7I$|GV8^eja+By;Y;ap1TA3z&xP6EFnCn1aRRWMBIR7Y-VINJZN$7D+-AOcMb^b7 zjil$UFhn7KukRKE7Q!Cf;9O&-Ns(~1<J_huw^+u|1`65|_L|uqkFZ$E;-kE}XhO6& zM)U=&Wjv>h!MP{FN4$=uLQAhAZKZSht}&FRz%`bkqR?7<kYOB+CKxr`LJ!yQ+Qe16 z>0q_(r0cky#1G2NN1pBDPBD&0v%ww1CX<nIBE%gmi{2hv0M$;QJG#{Yq9|LIp%aC8 z{jM!ki?wMXy0idS6{D+LE>r(_dfUxq>XstJaq((E$V^GPn`%&uN$~RcZk|Z?&{<BF z<>{%*Q%|*v6XGPMC-FGdV^Hun)n$%@;C&x$5_&?Ms5=1~%t<z~VnZzPw0rRT#(i}g zT)%kC**xiK{}8To__I{Hk)R^c&~Rz*CI;o&=*A}(>5{N62F3l8O@`T)`gp_*4qK-C z4KZ0Jw$W4KTJ;hoF^^<$ZlY|cE@C}4XCY2CH5fylr+H)`hZR{}GTc7Hn!zPHB-_de zf5o;yZI6s+i=riFJIYkBs*}-iC@SNmhAi<IACHka-N(aE3F91OLcKE*ICzL0uQebr zr!wK|*6=7R$0|XMoZV6s=aLwkaRw}mE3yVjlCtsf&SGO+D{E=Rp_5^5LOtkqYe-o+ zlP#cw@0*xjPyVEMgH*uDaR%X2j+32fs>gIanx5uiz^&;X5>+*W<mmcznc$h)57;}$ zQyc(i#dBlxo9*h!Oy*=*qv7M+I2ZR@o-#uNKOi#2p}X@v_MnN^C)F6t-p33oTvKp* zVUdm(V|iY@!!a(4JYj-#aR#nsIp{m*vnT{yAQKQR=|&C`OIb8oXcTN&+%J{0sK(<r zTLc|k7OjJgGI7NBOF-a%QBkK^GbS!5U$8)QTDV|-rx|l5&008lN~cL3I&|t*)TOAn z)5IASKG}lveT+DG%HoPT>?E>hbnVeSfs;UVLJpnED$bubWdUXsGiFUGnlx`7-JLOa zLD|Ie1yhQqqda2X+yxS&s9AF-mCu?|Hfa{hGG&3{!7;^Fq%w&#A^|fqCY3Fym_K9A zG$oxgWl>rAEaEHX&Ic=irt2Y*p+ZkxG+8MusF+nYqhiW@jhBEpM>^`}2w_5w6_X~h z2$QCl&o8T(Uyc|nn<!z${3+$L1uD{$RLqGBrxs~NmqDPL3mOLuz(J3?(NNh#tTKv| z#udiW6I~t8spXTV80QjMT5m?&VVyKNPE`^^qB3U8RherEy<AW+S#mKlE~qH4fZVMd zS@W`{C(WHaWzu;RB4!Bp>=~10RGbeIbu_JF`uvWQr%WwhI7<UqFXgkQ%|#J)ODU_E zF?-5_c~d4qMZSZP4m)advaLX{f%A3dc1(^o%ulQMB5mPnaz4vU%K__Vu+pZbb=pea z0V}P-dBN`OJie?3=c$mty`;i9w|82rp8`SWMk_7H`9a*|OkV-Xy2=XheyX>^sagvD zD|T-%pI?%8H@NuIdTp!`&f>J*;12=+UrUC7{Z=N^_s-vr^mkU;=OdgU?>a?erEa0K za|t{OI*(g5fkNkn%FktbyG*C$Yr?7*bsl5J7zBQ>>~_`&=}Fp;Ur5N;R__r|xUv$I z<y=4$M_@5OhUU3SIMu-U%A$wYRra1$O!8xtSkX>{u`u?LWgo|KZD+POLZ#4Iq@7ld zK5qPUUYFtd&|2X-B(rjk8Joy}p*JhHH%QyD^2@Y7(0<EGy9u!$f;t$&Gvr?{VWfW( zY5C6k;$1KvsAM!>vxYeTTs{Q6&xumZU&K@mda!ax+H}Bv6sT0C_i*KpV7zRxrXH3y zUba}tTV(os@vg>gsg#A<E`dt8-C7~N`gExQZLJ*g;`?cxU~rpdcTrJcWOQ_%lF=EH zHWdJdm{n?`Q&-w@_E%P<(Z|c3-p*Z>M~YoiFq0T4+)t`zuXNHXK>e~*Hk5m<w6RM; zzFaA@yT?kaA^D0b_}!M>+9Lfb=(P3l=T6H$T5@(OM6H#!odA+{w>%*5mopXOZH2g9 zBS_laLO|SN5W5s&BN6B$IVle?{t<D7&X(oyoI#Y7=@|b<6TRX6<;!n^*VkLUm#Q8) z7Q7uIZAIP8yHg=kGE>-mJ!^&Y%DFxP`|RKM;BT1Vu(CsNT)Ey_q21ME6WZSYeg?9; zV!0fdHdtt>7z-*H)vG!51+04c&OVHj5e$aE3dZ-+<)5DtaGd#RMIf>&p7<%P;Ec55 zK*ZT6(l~HjwR{Cu2`pR^M7nK$&Fb8eZ8g|&#=Xu93+@hNI*(dE1{yVR{=GD<cObag z$$1yNE1ZgZ-n$nWKVA8`{3;OC&DS)XKZF&?YTyhXVt0gTbK$|XO>UMLWs)(Mh2^}& zO)iar#l>fCmPmq(QW7yypJCV}m%FU-SL)<H<1C$WPg8WtqvgtU;`}7YFk|={EwaQg zzt)4A@tO-6Ws-$DE{-^_X1O8Ery49V(j?7K`X$Z~?`vgCj5EnWm_=}tIF*bajUOLt zmL-Op<nJ!4%p}uY>%+}QCt@zE%p}iuStCsHfXh1DB!hb1VTlnYdAiFw+axErtPv)8 zt;;&wBp+~DBjQC<sh2gwL>EoLBo7;y|G((Hr^{z*%~OG&Ymp_&bjm#q*7aek3=oq% z)2*rzzv!f?GE1bYJ=dsC{QuSVG+kQLX3;QB@)kEHXGe5XJJD@&cyT^)GicK%|Cc)G z|GCEay$^2hyTSQ;LypmV$koG>jKu93E&9}jBn_aZ^O`RnSYmXdjrfNi{?{Pp()WUX zuz>-@pOJxVaUsJ^GOjh=Bwuz>NroQQq9<I)Xp?;1WsQ7GC(RQYToe2r`9B+x0%D>v zSzjJdE|a{{WhEIlTKtwKHw-sRbuzA%RG-r{B(9ZY_<s+?d<$Sb?uM0nqf{b(G>|1O zWVlJjwaQHLS{GHPp~Ws_gh|G=lFC`B(dO6xn7x?fSgZkX!+3F^(h#>}A%hz(=y&R5 zBP<YTRwtc2A<j~=`0*K?VQ+2S#vipZY4hWKG!K(Bzr!NTzws*#+&*zjJWes<$6Z?V zr3*>AA{%X!BT5$6SE*06w(+wLpZ#iwv|6SvYKm5Ge!{)7Zix8_bxqw6^E=~bTu9Os z^m#2ZKc!AFOEte74Y*aD)LM+l{Mt7~iTZ2p(z>mfIyJwK!&qsOYxVDNaA|Lk#aM3q zu^l(CR3d&fhJJIK+bEMfPtV*@PGe}hYv})~?o8mLs_wUc)hlA%aI0~tMny#>n1mz* zMT~`L5YR|aaqBQ7lVo6$jG0LYiikTZT3kz26s=lpwc^%d)fQW;wAB`^3stMQwbZTH zy3p3v_j%5F&Ye3m2~4WA|93tdzV~<beZM!~7=o>N{#r%Yny1Gl87*rk^S_Ivdv~sv z80A~ZD~Usu#4$lqBS-5cjCv8%pTFwypBb%8MC{W$@?iVG$~WdIiAyp`&2@FHY(J85 z<#MC0@1%1xoWGV#wib|K?y|&*?ug$z!96}0XysKhchBLRFJ#4CYgkV}1z1_8IJgT9 zs3?Dzmb=@~OG|QB8ZuV$66prZPlIuEvU?n^GxuKR$<EbBfve-)<LJOuUX62iAodHa z<W0Z_$tYtbFUI|_^3@=qdRuKW|GNtanSk=5`{h{4y}8g!SM^KGneDW>^L8B5V{#W6 zhhvQ6lCkzSY-@Y`qdDzeZINVGdK8ZXMtkodA;u2uVM{#b@h@6WbLSN}9Kbn%tR7zD zOt7&pJ%0XM8|G#^-&=iP)<J`;@&1JMRNMB_e=dg5BPoR8Z8j9gWae1K<KLUKwsk5Y z+x&2?)#q+~CSu)~IWz_*3LY<JWSy_bIlrhIiMZHCr{TmP+L$)cHa3P9GfRdRM<Q)7 zLtaGEqrDl(LnPNGj(^R9+1C<t*>@3ok4Q%{dPY|)lEmRaEZP+5Xm5m5@5TcdTzf}n zTQqY}V*)BZXlOBxA`U$?$Y-1j*+>?T_Uc@zHN;{wn&O=vzx|I)I%?d6T8|$E&3ENJ zfR3{nM^vM-;?58FTFY@Af+#2WhbeMn-PV<k^&r~(j(mj4#fcTOSx$K6B{-py9zRU1 z>@+$q14G%@y%>j)IuG%9gNzw#R?DW+9o3d@PDEQ$9{=2&DMERTTIn5`OeSK*6DFKE zvA8?dnTmI`7gr7|EgphXxAvBj%F<FC8IBlvVDS({Hr7-OV`F#tu;Hoh_5;1lY2zWm zvECskq~Oyb>9$mB_aP^Bbj~<r=FFMHTDzJ$&YTe)mg+jB9jzpSrqY#&r4DK7N+e5o zT$!y+J63yIS3J>#+=_R^+v7-9L!>j-+}P38p7!EUkt5CNQDkOECu}uDQnOGqnj$mf z=~f&D;wZ|S*3psh#?kE@^M9l}neH4M)VD~aJ3TFdiiLAK9GDsF(L}N}O5f-<5O8Eg zz2<mN%mmdM>!FNT#5&uf2|g!c%_fQ+jW(w7mR9qSYK+I))A8oG@gddPF_Za87ko}4 zY1Wz%QbvD9JUP=mbs_3(ys+GrOvXAJ<uckdy(^V&j>niih$^%Lp*hhJ%@{GQ&8h{F zSUaqbgHBK{kWHR5_LxYULMAUrn@Jc`)oGFxN>7lOOiJui%1hZaxCCTkAC7t^-l0fO zi#Fkyn#pSE=x~o2%~(gXjGLqJgdUknDATC~i9|w8k1GRDE}b*ydlbjf2+RRpG;=iG zPT2oDx=eJ^on7sw3>jL7y8KL@27`bz!r>;WRJ=XfISZNT(HHB*v{;J?!=kaPlah%x zLWJKb+c9Olc0H90JUTJ<Cq|N;vBo&tE;{%2mSR>WROhC6b2IuHduE%8pNTY0M7wB8 zxAMVu33!P0G{%x?I)-2^qqgCRF^3io;S<xMjWbXe$LKMVzzAb}L!*nF8SCtzkhD#3 zVkB-K(Da+&Xkx^SIBKAX0o?@AF|8I(kYWu??H%ng4@dT~mJZ~Z>905*#5&P-8aomR zMvJ|j*9MDe<||HuQ_&V&EkN`bUc4=781xg+v!~vkZTm)GemA;6F=Pdg)NYR=0FG3& z#j%EiLmVZh9zCyT*LW0(G(|gS#@lnpshnXe65%0tXdH{2a%@Ao%H}|&iC$T?se18r zJeok+nMl-jGdk=BLz<pVjVbxAc0{rr{j}*%TwIvhtOyo!l=|L7Y(%UuD7)OKom3yM zAK%ze7BShCZRqt9>k-UV#3kDc<2XyVH@73<wkd`x*fA?B0(70L-<$hN*u$(L<JM$X zSf@8v!vj|=beqN2jj04k<M`a7sX~Q{HZ^e|igm_NJLoD$i$Uc%90^;Uv9^xxSgzY# z-CklEZK$0zzM(YYp>Hu)R1RmLrZmxAsC_p^8(Yy5V8Ga$@gv?8v8@Q2@%APTTA{Kp zk2eJ#$1yU5V-2%PI%=}%qcN&qQ^Yk#E4fB#CDSzRW6(e)x@HQ|#2Q_TY2|UoGZdxD z$T+m%vR-pJ-&$XJN<X|g#;aa@57OLAz|}}Ia<OqnB!xUQ8EG>hN3$1i%gf-lGnP!? zl1(Uiwe>8xIEy9UuorL2Y@)KfnPokxA74NI*oFv-rnVRFX7%P7GtvcXGT!;ri$A?| z4w=%3w_{XDBy8!y6S+4Jw%0Oo%Cgp1gq$T)VXa^CqK)awGPd0Z=7@Is)RMqWAT!+x zRUnNXbHs45+OkFu7OvYBYVD?xw_{qb{*hC_tc8s?CtIX1Bhi7kcSRa|ddh}pnT~6$ z9f6*q6IH!-QlqCwTx>HFDKF?SOk4`{Wju#HWPHSVVx=sv*5^|-N{m<FVzq7c`0~1w z7=!gWD=Te^IlHy>jcu41I&p)MuWpO>m>vnu#yxH*ypbkZon4J-gf__~n(~HRj?mZu zcZj4JJ}^$Je7wlyWOjLK@uS3abb50#kC7vpS1yk_I%OC2u_>C4CKFwzXT?;}*o(Br zn_`$Duv(=?$dc_TXq^TjeZ<b%RCBZz(Joot6R~#82>8?(O-6Ya&WlWnCGCnB{beQ> z8zNY3v|&PN8bGWqnV!YQjrm$fCniBQ&<Z*(D~H3t0)q>Qii@*|28Rh)EIK3R`g$k! zW-*0{QOKed!yykxLQ)us!#-x@uuYCHG@&2SX$g&_VV#iea%P?NhuIa0wqqvg9GY&U z55tfjWu@=~jfW-VioggVJ1ol<M2F*T6ivFJ9G!>N3fbax#ZH%M+uCH)^i*b+6tZZ7 zY>KDQ$;6zO^iNuOHf<fwvgxWdYm_ZBC8Mz;IV(s8g^+J%9OJCZd1bQ5%+5^hqE*yf zjx}*CN8;_)Bl~RXVpk`oH)w#lJ1kg0q88@soAy$C&}idxsCOBW=fk-A#)edF6U*C8 zXAbh*-CJFt?XPdibjY_76Nv)ikW7YL9egmOUYIKk=LK19YYPQXQc}1p6F_*Z=_?!K zJt*NskdddJ?s4sBr>1sOqp+AJCuI3^FeaGUgI!+{NG7r!7MjL!S<Xrd4zDeq?Xb{z zR&cWcrC~Q;SciGl8w=Zx_H;DfzMd+*zRg5eZA~m}kB{9R*O8hvx*G}DAtHRVI6lci zFyG_|jZs3gPnnjni?lOOJ4&Fp30n)s4%3+FS0dgPPs5f8hR@C?PEOJ3Ove@mMp+w_ zlWE7s-E=ASjWD<UMbN3RTjbgW1FbWpXkD@w;S8;%owEg#3M*RUGA^^|Gm;YROu^0u zT3JH`{e$g!!w&yL-w<EpT?IPw+|F#2nR%Ff>Gf|K+lg1Wv>Q_S=|aTKRI@iTMuSUf zW;I3yCaf)qvD6e+AZ0QX`^9GBX3Nq_a$U}XMjeVEJ5|*JF|ZOE@NKOR-jML-pbcas z6C*oMwrjBz1jN?*gl9cfx^cpgrWim1P2<aORefWW5gJleozAg+z-*XX&avQ?3v8@w z)^_Njy_6CXy591^wtlXUieM<@{sqZ-_l7G50=8A7x8N~eV+>^p5sHx0viVoR#XBt6 zHN45UDmC?P&&>>N>vr=%_93i9Raj}zF&dnG%F$MM)oxY^cka>J906ysPPFMZdcY^E zU)hM-)Jf~4ys0#^NoX2M6N3->2}Z^}p-PlT(E(xa(;8UG*fB#)gX$QBppM~Lb*u`z zu*@+`sj#JIo~<`w1GWg00kRB#@^!MUuv4Owk;$%9D`wV>GZ13%?Cjbu%!X~A^9?d# ztG^3{9q42`b75CuT^s96*KVNmGm|40s<ke^<d$<yWuWuUXa&)7_Ck3Q(#rAdKZ=>_ z4KRLUJVn6f!TMZjH492%|6Q1=I7<-~*KCg<bdw(vt&cf|E@wj8nY_u?%yaMZC$Lsf z!Vt|&DfQcFFOe%WR5;B^LZL4I<Ah>F3kJ3SB&iJ?l(UMo&?qC9^Xo&Qj*rET+&E;H znHN;LLAe6Ms;W{X+J&yIjro$LXCrH-WzJ?Q+RSEP%PnJ>+Oo~HxEUnO4o4eyILyk@ ztQR@TxQz}p?Fvo6P-{aAy41{QvUU<0J|E~QY*w209ob3q;6|DiTG_fS2-qtd&JFEg zn*$EA<jj6YuvlO;nz32T{u%M$qx0TqvvQmMHp^m`726-fys|Uo#5}v`TLT+}Qk2ok zwiNhQHk`iU5VjLrVjaz9l&}#D^yD(vW;mSQ%=&Pa3Ax;ajMq_f1D2NaAlqJ6u=z&4 zJIVw)B9z?rj@*!KHduY<Q!g&E;?RfrdYorsQ<cer{K%MW$c{_C{j8|;ZtP-`ZyH3T zD%HiSB^-L}liZAO6Kd1@O2{?Sh+%77;KJ(Kp#rrw&_{&xJ?KjlZDI`OsgvoVAzfC+ z#g29}u#Z%w1=1wD!D-C6-`uO^^4J-u+>PwuVrTSWC6RVk5_YPU7i2gY@XF4S@@%>3 zrjnH(^Gs(j$@TSlo>YX_hQY!x-&)rCa(&rk*O9&1C@W8Qn1!V2u#g9FFRX!SQ#$C% z@)J{52FuP0Gmws*+<Q)!mBr2otS~%VEP+<<u7=~b0cXn{xV+I@GDfhm&<+!zXLITt z-T=cs)@1WOd2e@;&<1d=iN0sf8cn^y8r1Ep9d5T(f<sKZADA)U+n5K&RrYuVae^Q2 zsD-iD@$?AuLVmoF!wz4~=b22%*er-MN7S%|kuM`>+wJ3wJLDY>)Ecy4=kc|>7f_46 zvEKBvz2|;MV+TGWkiroy(}TKe4&j`pwO-BJ2iy`W!}O&ER~urT2*}=gsI5P$8^>Ig zSU0w#u^}l4I?tA!|3-`@FOKVcF+H=c<7$m0Yi|Az0?3O3<BY%q3#r;n_-1b?%P_}z zIk$ziuN?Bh>^S9V=eR}5agV!Wrn#b#s*O)$a2bsp>)Z`uxw3@q6D^<`2H9C@?wG(_ zcTHHVxrS(+!?SNAnaUJctH6$ab8WsYYUf0#534*e&-Swl*CcxP)f(icV`Ol@25AYN zb36@M!pTfdMwnYSaID)m*%@ICjiXThlvVO3Tj(BJ?KCe(CnpA#rsA=lyQXTZVs31z zF!{qN7ouYya?QDu7g!0Na{{aCG1EzSVjpshE6p7sG!@+i%1*JlDFj1%V`z?RewjO< z+2s{A7av%P4e1HhnVWz-e~s84D$<Q{mbKA43fC#U2J}meQ3W3=s5O%9+aBd(4jl;D zma1_RG_d2Iv#pesPRChpBpFS&rfM5f@GB$d*sQ{l8ZN+gByj1|IAGDFyj<NJS2#PJ z5$nYr2b_GPY{%tg*u&{anA;_|Cl$v7BWl8hdwS8Ug=}BSxT$1(;rSXa5;h^BTzTYb zXFD5d?lbWgD6GRSF6mNW=a7yA=GLX%bnL*e#ZRJSOJN(<g1Pm`z9oX4L)*(l%uP9? zXSUNOMsTIh8S_!*e3S*=X49>J%%-Qkbj=i?Z>h8q2?8D0m_KQ#txk4L%Wq*$lRly0 z73Ni@1@<F+Y+Fr3w}sST^E`o#D@oYU4k8|&^c0k+vQpzuY(__Ob8QdeUv4^M-8F=4 zJLluv-S&)a76%;J8;9od8D>zNcvV#dmkwzTYr0D4ZhTjJ?rDO#Ppz!0;N9wRWo4n; z)wPY?J?LTFM5fpT!~bl#_2#0|1XjyVU%{GkS&vn_lbY_$2KFR%S*kbFwsF=J#on7S z&cux4K8$gMwE<)F7C0-I!)(E1hX(<Zd%1sZ%bs?iZ22SG|MQ9fUohPEmY_asgNb0_ z4QT``5ym!@te*PS4AC1zyK(Cm&fQ~w+*hUA@l7iRZXf#Rc3M|k(zrDb{c&5F!kB8D zlKpncQ?-OgKX6aC@Vp+G!docZ>TbkdcktXFA4a6Q+Fi`;Q-54nGE5hCKT{2tNcDIo zn~$00Pp0oKxW}!Gnf-pO#Ym>0V5b!=xJ!-dLiEdFWlSy&`;}`gtX`NP8TQ8|=fEwf zDh)Vp9gZ##Qvc$d<kW~QlkAt%ilogaqF)XxV{&QOpVU?+l~0EKamjp2+I(UrnGMxK zNAF(d+5KpdRS3?F;r6jV@gBk3{{@cKvf6L&`!fPCjDB|i73%wm{={u0-zsT~w$C!1 zsC({@4^=&;|1>?Ree93xkzKeu-HCTpW}<ln&;9YCvdg(9`{QyXnq%V(zO=$slY8!u z4@i5aKef;OabAsk9yaZ9&pr0Xy<Ng#{h_Hp=j84pg}LUX`!%8cQhWCjXX|>Ku|H07 z=JVDocjdvYKG<kG61a+T)TD-vhDdEN&m1)hb86YjOr)IEG?$XNIe}Gcuj>T#yR~r7 zMXh<CEF4T``vVhH*isDa+MfZ~{aHR?^F^jO@@ehpwEMd>Nu&1ZHIHlqb6?CPX?n&A zXXVZ(JDH^)vqJOsz_+l~Ca<ZZ3->Vtx6Rna!8>Jv9J4;;*y0Ui7g~Lx9jbLP9QD&2 z$SVxqWSZHDN@C{#PO_FOLnh`?+ReD4+luySD7|znk>DLaL+P1*tB-ju1_X3!Sr+qF zMqcE^Xrc=fa+6qdgVG%Ak4w~IldxklHY>PB<yrqIE?CTE#D<QL#kPElK|%EHVp_fn zzMh!xbx*#<VC9r=dse>ftcaLZSH82Rd}p>U<Xes9TQ%|N%RVYmz6*OvtGgrKWbT(@ z@rh|1{zvP;&Me*nn<Jt`#y50en5AxG_cWAzuz-wwo$rF$_NxZ2z5!lgw*n2(((WZe z2$t3~v9HmX*BG%ElbV4hFcWtM?F*t!@fK`9^;o2Ei93e9LN+PfBu=(^jff6c?YMde z2Y7=f{5CcH)*eOXU7e<wiB7u11{jIpl*0BX*iq@QLBnC1*QOae>?6k7l`ZC(nt1UL zJGz-Cnj05-W5`T|D^0?1Kvf<`7ld0UX7da)<SYYB#j%4_uVdeg*@#qQv>o@y&Fw|* zF-d0I2>VfO^l{9QZ4nx|Hb*GU=njI^XZsb{Fjo<Kac{E6xK~EyxwkfYbzf<+53ZGs z*=}X3>@ahfa5AfGme=BYz%KK%-8&1`gGTpWKqf;gO#!jTvPH|~UQiNc!*%Ln3m&$z zWN(h%^~w$tZ*!pX*qVfNWrW<U%d*&O=E#Q2VB=M<d7NdjSFft!*k!eQ%#BdSPG1>5 z5>7LD9tgP}g{<|N^X3S|#K?32$lRb^na$;#8ePWQA~xud{g6i1>-KoZ)O<g|wPAkb z0Arr}R)pd^LfU3-F;bmWc<$5dq@&i1o|t+}3LPOdPBS;^gJ}qA>6hudnYDb$e!9-( z%Z#VnX8SVzG_P5F$!T{lUw)bKH1oGFIi8y1{pY@#W`lFZt|Z<<$DGn!GHPt7ieTSj zL}ZdVp$!>-v4(*iZF7i;z%Urwpu&v=VUElSQ?uazJb8RcDTzaq#zb~F=yhz`V2GCr z)%tCh@*kFY6?!{PoAVpKHTYs#*O%{Ku;KUR?H6qOeR=x@n}1*4e!(7~FK@qKC(xI- zU$7tO%UjbG9M_c|$G5>$quqp>Z;7*V26I-**hzLD_X*ccXxs6wm$iN$;~ku^+UL}K zv^X7Mjl<B1Ba=zfc*^}>3M;E&Y{WGEx6(8Hzm#uTEq^2CTUJ-F5yQ#q8#ZD%<_3%# zs5W9aS)I~G3@59X+KA!QciZt7L42_qZoW~0<3#g~Gdq_lq))>A2+R?(+<mcluzyBk z3hWTA<^NuYU$9&3PvX8{dG;r$FW5QuC#WyjKlUf6FW5!)C#WyjOZF$IFW6D`C#Wyj zSN12UFW6o7Cn)rok#X(8G!K1E)-(@tc$Z-VCnSyC_1)oJS-YvL{%8Ykv4qR)=k8sY zn-Ta9nR$;E?_k;|x@*|bL5^O5%$-pd<hB||yEe=`=gy=ce{dbjeDR_Wze0wEWkm%) zc!wM$3Ui@5>~@*Dfx@XUCzLpS!9it#zT=yIhz|ZQ%zjyE@VUAa++_qh-(ZPmxy~z? z;8@Qc6ygZ4uviVp1xLijTyrcS8pe8k13sE(HfcAIsg<2gyf47I3l@}4IqBm7u1qJ7 z8>;_!b;Mj==k-zS>Pspt(s*Aa!5dokOr?N4u?}=0U_&{Qe+{#soOB!S*qJZLesBy> zNZqP1cj4EQ<!%Fc!?o0W@PXfP(~(ftm2Nb7^T{lCr8TIvu0sypv(;*vlg$?U#Z=k0 zr&>Whm&jz|wK{Vk9uFUgkH(oE4tUI^-JqWjtZt|tVMbhQs;%?8ms4;WVX5w7Fv&DL z6T&1jrL&LrfZNzLvoEV_x*GdvCQA0vOl0h%nP}KY+kT7>rpK|mW+1hX9Ozs&pob{v z60NOG@hY3gsP)Qh;}KuIgjVJmp9RYZxYU;;h77rxQBVZJUKH%e1~dZEOW?~VycE-D zUI>7YZ)A0<@O6(4e60dEFU>=?uFAn#N~p9dk~mI>6T&*c*ALL^^FAXVtX?%AQyusK zqtmBg&2VAV++oDQm7c7ArMZs?uMOq5ZWoy>uH=z_3oIDQ5l{D9)_3%8Zx_cat;JrB z{#ifFH=VSC8<*yBb$pUN^_S+T;1Jzh(y*uE+0Le~*BSPqdvjzi803bPxiF9&g1Kan zYdMHmU#`qWgIrgcs|MLYn9ByamUFHfWV<jI4su;&MJjaVAlqqkZ#ibx-MwX%xuTF8 zQ25e8w&&)WLaz0^iwfCpFp=%0=!07d9N*(vR}r#0VAo}vI|uyMI(uros(^Nq^SN{P z;qbig%Q^%1fmtVKzA&57F;@)CtqJ#HMx%X5X08kI0+tuSKinD6Yg^XNG(--ON0YRl zDX|}vk0howTe-2LV+LRIz~{wi$+m1ZAr2jSD<FuyxuI?@v*TR>d&|d*bfNz@jR!8w zhuEh;4>9R78Pjh5Pr%N!#0(oGe8FVe+4ju0+xa2itkmffZRlngeSL4;bOqcg4(Z|g zLj^91m@CKVc(Y%8z^ykJ_2H}<f8E%83%a%*AILIM&+`E9Zdp4U^dp|{mYrFCY_UG! z2jzGHz+}0ZOy;F&1l~6?$wH^S-WZfOb0*$w`{Vr3I6-4zCUfV6Gp>&mW!*UJJq6YF zB4VW6T=BvrGvPU%zCFc&WiP|`?q}aOWc%>a-AC=+yR2KM;Z(b}Yie6?#$o;d1XpET zZ`#+A+{-Sk>F$fn!N>c(%#(FuF9*oIyD4Ce^k$P4_^v&B3w0Vm@Cjf(o0szt1(YT~ zM-go@ZwcEAb$T?{NNH>y_}&ygcgxTJI32t`m7`;)u$X|_zut@`f%z-W>K9D?D<9s+ zUw;_a*qHrp&v3k=g}$>i!rK`5rXdv0Vyo~_g=?ZSJbV|6pSi}XwVn7xTYCpCfbknj zDg0GvzGj3^?%P~Pmk~Up46z+vcpOGx*lCS7D;~TxKM9JxA$3_{`sH0YKB3rGiu&tU zHNGp|!D2(3bC3OwP}%TkVrCRQkIg=Kl_mGvKlh!0Od{RZWZ`*UR?3f91>d*I2xuOz zLS_Bk5PZbB4}<>ZDR;cqSL>{CzjMW0bn3k(!N>o!GF8Iudg_xg?SE9u;LcSiRELn% zf4`WWS@p?!n5ETkUwKVSl_Ols0^NRlST-DPGquddF(Y$dlO4!pFH&oI5<K)?-As?~ z{`^YlEk#T{!`C;n`$pWylZLIV*i<onW?px=p}M&N=j*A18*sUSdbR=AWjPgUL)Lq% zGaGQzM~&EktNdbD&Sw>4F#MtrgHm_HE=CqNzUna;V=41JLKZ!r&8x;{mNq;y%fvw3 z>*WReMNf>%d@o$@rLhWybXdzd4=lhlUN>@o9U<gfmX@wObMD3ogI<GnqRq)d0t-zh z3yxsllWJtSqLA5CDk#mt%(vi3l=Ev9Zc@bci1~{>EM0si7hS@7Obagx^Lc8Q@4bf6 zhhgDCWKTy6ts_~lE)|?-SuY(G>?-`GP{EGMc}b5GJiIT#Ywl=Lrhv?5Q13>C=UMoT zyMklX_cEfd<yir3)p**U*Xs(8E;5OW?fiH6vnJiF=XOnAXw}JH9TkwqKHrWkz-{;i zy@He8%Q~}wpv+&`Kqcds^wAAtR>*slrX$GJExe|g>*LsxaQzB)M9t})<m_Hp3rO3; zyT2Xhy5>MeHed--#t&EXoiqK3xn75r;GoE6T_H}g`}0Br%63&??A9|3WT(w7tW6Cq zBoU#}paEa=Mttl?EOY}f^d+p>D#}899b3lQaLVNF(nx!GMTDdA#&lMi6Iwhk{P<XF z2b<5KCmT!Zl^Y)lj;Hf%L#H?W^*0lZ0$QOGS>RMB6qQ2!4pLayAxg;if(~7RLMZT% zCY07fD$<xTZi=DSWp6~98XO-J<njiNN(;7_NzDd)R5BXU$wY6xkol@<ZNs#2lOvN$ zBa?B~jMHP>>>tm4755(A!J31czt5TX%CBAp)@;rF5f;1%%<n%H8mbA<1Z{FGh3vG4 zaH$|mQs^g+<llR-f5(Lxp7|^*dY@c#>{4c#^Dl$IGX!EjFc$iw5qW<T$XYXBelI); zCiV^0_PbZHGy2Z$X|Nf}@a()k{P6!YvylTqolOO;BPUmkjXB|bwE3N#w}ETsnG@ER zVa|@JPAHlDOrC%#J?4q1J@`C{`AabTi){SHT{PX;T3a8-@nhfSjASPK3FVc&*iB*c z4O`xQ_+(9U{J|gX%L}u%{={D60;dyb-~A;({Fz+y!7fzOJUx@AChuG|HkB_+P?wNN zRsNr*Qq^xr5684;TpMzAGCvB&+a1uzoLIVpK@F$bJrHaA(G!mQ`jHbNk#Uizmu}_j zq7j@y<1bX<D@6F<7(Yb>v73LRDAE>d^KjCOr$j4tJMq8%3?1LDg-+CKoY~}cb;iBm zb7@%u<_9tU8Ou1n1>b}tp?F3xMu>X@|NI@k*cNNV48Z(7xd>i<<M}fFvMXbR#YGx# z1gB`p9%MyQjVXNz&OBj19Ut~>iZTDOcpF|G-mr%@MEgH%*=_zv7wq8*Fm?fgjeYFy zK&CkWo9#GUpW&JRtwy{Z_kN5^^P#N3CG_>>EEw{%ik@dj0{Za7{tvHPj5YneNeD2r z|HG`4=>YK&IQ$jBWDGCTc4OwxLXra-zy-ANmO6}`JveF$3#gUy0VdPpo$1!FhB=6{ zr+GBy*(J+ZVc?_=uRSA_;K5kZ@m<Iky|LEx1bg=M5f3dmcmon>*`2Hhku%&AK1bkY z#3oP{1cNt6Bwlx#vWhCnKe&v2Mf^|ISjPX#@t;l<cEcZp=I;>kFmaq{O*8*bkp6Mv zI`N-hvi(zX{NKX<<?&2J^t3?sZV?B|-su04{UwUWQt<)tF)=p*uS@@9ag5@9QXlc( z*!G`PxW5+vBL1z9`20coe-t<0%%*T#F*m*aweRBN{CDwj{vWDvj_4!2|FwJmiFf{7 z`MUb)%J*^QTcPQ>P3e44d{KP2kM#G~evAC+5c})i#p@xt-`cn7A0$?Y)uJ`c{J&Q2 z{x0q#dk2fhhz%Rby^H@73g5-YS9mTxr}Yv3|JwZu#p@|?rTAPQ@$Iku_vO#u#LYIh zWw(u(DM|a(U;F=*zn_a=mA|`fz<+1o#iuX(PJd7NH&{HV5C6X``&E7Tzd-ueh>wda z{zvxr8DPt;PCR4_E0>G8<vUsSrid{yE_RD&iWiHQiHFMH(c(0*S-e!dLcCA>p_m(= zd*tsjafSGd_`3Lx_z!V2`ByKVEcS@!ii^cN#TDW+;{Wydxbj-4bi4f8R`GY`@lqe@ z+1Tz~J?ks{eFoYbK2$8(%F1<OZvJm<`%Q|+Y;mIE(b`9RHn#nn6ptT@ZHmXdKH{^n z?f+fz*nUe}GM6hJOZte<#<qWm;&HTix8kv)kN9kC`?o0`kBB8(t3Hdl^?764e@XH9 zt2j~dXze3D8{7VIU$HsRB3`a|Ea@XY8{7VcipL`HZpC9oAMx4P_FX(4RD7ORJl^di zJ{#NqmfP9#8YGSsYsB38ypQw`7AJ|Peo6LSe4PI-K23f2zp?G_uX1wb<?6F5ua(={ z9O^56&fU}Ur%mNNuaENH*!E9We5Z<6iQmpi$BaJmyIc0o7w-`t5zm&pi#C#b7k?MN zi@yusmBTmt2>*ZW{w(#=u0E9HwEtq|V_)%i?%sC&hsMD*eT;`2+x`LD*!n+AY!y4i zJH@5q8{(fum(J_@D6g@ycf5F^c$N5s_&f1)ackw{68U@Y|HyxrKQ8_*e_Z@s{<!$N z{BiMj`SasG;{X4<|Ho*)>FTqakGuMu+dc-XeEZ4|=g)g;AO8}4wT}<f-aZzcKaVMY z-xl8!2Mx0IdlxZxJbYjN{zKeG{_ZAjrT7+!zmvbOi2oM1kpBmY<^M;*bNRWm(&y4U zMCo(+>C)%&^RPbR|9{=TI~DH-#lyC@B|b*XE&u-7{|WMOQ*YpTdwE_B)TW<xdY-C= zH$CNfF$FLNnv<c1%}#sXuci4uo?q1SIbEJNRGZa*!m~T*S<vly?vSN(rsuf>jvaeE z&mBf=J<IdlM*ACh-bI_I_n+x`<MsU4vpmmjF3*_ld2VBQ<=LL+HchWO$Mf8V<f6Hr z=Qi_R#k1QOOrPs{Zd2|yJeO;u?4I*HFQw;G&iA~F^t{&vh`*k<z0mWP>iH!+uhjG7 z7kS=VJ&(Qw8KupUzg_BiZUbS*`JU$%@0(oid2Zpn=@p*m7OiXX>=ulhFF+bKIR6dL zZlN^rD$jF^luz({p*obeuJ$}PIp6DA&-<MQocilL&rM2)ehYae`z;GSZ(rGY>D!*? zCL&K>?|E*Je)LAqa~=9lH+!CIEO*?Bw5US<3(wc;`JLN5Z^xZ&g=j-%IU8!<6GIi| z`A~&<I#fwoLzQGgsFJ*kXIDvng$m;;$qz!6<nT~sXbx3|siDfy5GwRNLWTQ2o?YSI z7%I@pd6`1|d8iQIyew0Q&!9kEAwG)&b%nS*REW=iGgF8^4;A97D>H@oM5quS2o>U6 z*JKLO3l-vLcy@(2G*pPwLxuRQP$6y;D#W91$`s<Gp~9N8i|5UU+M+a6SdWGZYx7WM zzJ`|KTE`=y42*;_a6!oP1ByJa3To4>LZ06d@_gcfp4SPr=`N@eZ>c}IBGlghj(W5+ z>gwjru;5OdXP{BL(}B5&QcMl-wF^A&Ry|*fhWUn`n|JiQZm0prhCCS=@}xXeNg6^P z-WT$)HRR#ZNYhj3h6fA_dAJT4<zlr%$io344`U$@hlV`75+!g8)TRsJq3b{WnVCMb z2Kuc~yS|F{;!XmiJ)Y-IeJ7w@xD(P+be<)f+1&go+K4;p8#)J_mGu9L&dTlJ)}d~f zU^L*b6?NOqd`?8&Zj=5=sN0w8xfXT%ZatrZy6t90b*S4DH5#9ex_!Bx$D?lFt>=-~ zpp(&a`dY+C9nnpw+ipdF?za%G>^!m%!;|ccMBR3)zCCV$KZ?WXMV{wo=Xap9dSCi? zp{Bh8wd;>UnRaL>)5=1bwq+>O7KSoy`%tF67|OK0FUw@wk@GW|c1S4GN<*2pXDHK# zhca#NP^MLdGHq}u({>1D+Qd+%ogd1yQ$m?`Z79?B3}xEKcy^h#Zz$6)3uW5A$gscf zj7*z^OmoBc^QelhH~t<n(DlaiL%s3dq2BnQP;Y$8#hD)Uj!=*K1TxSKiw__JU61-; zs7L({GSCf+%R)Ws9ible;ZToyXQ)U07BbKciw`3M-LUv9GSCf+uOS0nkGdH$%?*nO zhkDdAnQ0n2??SC}!{T$uKsPMzs!ZFhD3ob8gfi{oP^PtnGVLJrbua8>o8G&~KsTTH zN+{DV3T4_Ip-j6blxgRMGVT0Ord=4yw2MNSHZPQEmxMBHW+>CH2xZzWp-lT}DAQg* zt#g_7XJnw8OPmtQw7O8HMM9aj+wEvIsA>F-DzZK5re~j-nfN_|%yARHExzh`58z~J zlar7e|IiUrRVO+Ms7+&ts@wm%8&Pt57eD%%=RE<n>6}|L^OooF?B*?gtLMFUI=rp> zj_0`<^mA>}92(NRU?>K3s7<<{`P)G@+8^$1`|V9$hUPz1j=Q8V>TLs?Gj7Acr38M8 zXd2Cikmmc)d=C~jDG6!5=`{V2=EFlgk7|>LVA>=<>l%)%+XN9oB)qRfZEYjvQEwB^ z&O|rG^JY+#m}{ToHxOinW;cm=dfP)W?#N<ej<WD}huRZrFDUvy7-~PL1E3HO?_en8 zhF1bL4C)Z53aBcmYN*jrM?hU&QMLc8^Pf5=QMdQ9mB+0eyybiIFWl;*onAlkq<Ndo zp84lzuH5gu8>e1*;Xc3KD|PP9TP^h`*X@+}PQ#euEgqWQeoFU;lYVq=@w*58bI5VW zUp4UW^$#30`o1SS-oJ0jx9@D-?8nQtyZWIA=X*CC{`;HDTca&w7vHtRny=pd?&l+m z|FGoRvo3h$^aG|IbNb>-E4I6R(H*lEzVrMWryuobb?oBgcitZ{e8SU-lH;B`xpwR} zMQtw~JMWg7n$Eqq{OvWLKUi_v)a`y-e8%!`USD_et@~X$>&R~}nDyp?SI#<b(Slh` zmweDV?z(3uFa6Wf&%XQ7ix(X5hrzW^zEiT*iZS0GeA=(Je{I+g4(wS}(fn@BlY73s z`u#<-pLwt1f)~EK@9uX`f2#fg6a;VVJO{N7Y9I=w2x<saHB=o`D^w5E0;t7MO}^*N zhMEtx7^)icna`lMMqw61l|qe$;-Vu7H5Y0D)KaKo6m}_84O9^dd?-{66noq>)I6wl zPy@Gw8Pq7KdZ?*TE1_0HeFW8nijsy}1GNsS6_ut3Y97=BP%EI;Lb37{K@EkffvSgU zg8B@KJ0%rR9HZ|V!n)~sM-9h+_^|;}X8Yrhb2UWY<5X?rTrASg^*m0=I2Gd*%=`|t zZYt5x_#1GLm3O?<%IC}cWb_~WnT7+h?eJIGZSCJI*-S8@&pGCdxyVO^$GIfuko--N z{|Db{WzJYpJRT>lC!xRMgq1(`222Y(1OB*jX4~MxnG0qvl(|6W!k7zUE`+%N=E9c? zUM_UGz~#c03))3<J?~X0E?jSe;zE@RR4z=pAmu{zam0}ePcAsQ(BuM>3rj92xsc=n zk_$&J7`ag70+9<tE(p00<N}ZjKQ8#V(BlG+3p+08_~Q({x3u1cyklB#Q(D=#Z3>y) z8~Z)}%pwrvI*{u>uKT#&<2sM)JFe@vp5r=>>o>03xL(@>Y2^Bh>oTs#xDMm`i|a0~ zx46#Y`iko+uBW(;;`)i}Ca#ybPU8BA>msg)xDMj_hwC2x%x(tw|8u$Ey12>zH&Ji+ z;|hZL&jkb*4*YQ(V;ON6<BtO!?ND~@ZMoXYL`-w}<8bPO^p~S5M^jhEYjf;!prik; zyt!CI_ta-Q;v!~Om~#!owF}oQT&r-6!nFz4BwUMd4Z^ht*Bo4HaE-yW1=kc@OK=Ur zwFB1-Tq|&mz_kI_1Y8Sn4Zz>a>T6y=n)v%9N9HtlIP^Jb<7}4`HqLZ8S>r616E)6o zIZ5N}mJ>A2Y&kjOtd<iq&S*I)<7}1_GR|Z<8RIOL6EV(UISJ$Jl@l<|TsisTtd$cl z&R99=;%t=@F3war+2Smf6Rp>vILYGdloKq@OgXvYtdtWg&PX|_;%t-?D*iYvVmZ6= zqn?=sft(0&0>mGevFvNPiskB+t5&mGy#VE*zK`=3mNDBkf1Iw+Z%$4)YvGUUtX)Aa zv$(wCvWm+oE~B`7;<Aa$B`%Y=JmRv5%ONg<xcuR=hszx<bGW?WvWCkUE@QZS;j)Fx z6)scwJNzIUC)XdFwLSFLH)ecYb@zpo@xpF-;*q<a-0kGg%r8MsG5IqKZt%ZVUzZ>( z=CvCe&DIHI?w)Yhguhq*%Xz(TPQG!avm4^UHpBM9w!(J8Hp2G7wqe?Z+5_7H+X34E z>p$y0>pkl{>pSZ@>pAN<>o@B*>ox1NtIwPfGhbNe_~R0l^^I+o?Uikn?UZel?UQYj z?UHSh?U8Mf?T~Gd?T>Ab?T&4Z?Tu}X?Tl@V?Tc-T?TT%RKTgvbzN_!MDNo$|<Eia2 z#=@NK=<GAmA0aRLYEN9~u>ClDc=Wgjw*|;8IBvah%Z*!Yk6;Ys)*83e_~R0U@!$%C zKkgW92D(1q%{#d2VHn}Iet^Oa*Cnp0=%1_aJPM$@aGT&}?!M6bzcz-OJxj!ELwRPF zY_R9@Y^eGUH&?t{W$EUMZcW8};csgTlTTbzasA}%_%Nf&wL>R#PrJ;|<oD-owfPYj z&W=o-_0nsj=g+Q(9^3jdsFhGYEbRzRf%+CI5;ysi$oJX<u%C(e{T}MGgHgYRW4>15 zc^#8+5Oad({qhvl{TSwJEm)UL$Gks@_IL)yNz_;Vo*81}(FAw=y@-gizC5uN#wz&z zB<%9{g6y3xdoF!P!wgNvtPN?8ZkY$0VU*w8tRAf%)5&oJ-kLNc>fW|cgCy?&qN;hQ zuEv~gcXy~gp!S3+hGHF~Kl_77u7_eWYs?a`916+yDxpR|jf6T3Y7`XR)QEf@tLJgx zc&G_b$3abkV*Vn_yi=hfP*JF6C}f{E11bSUKia?!C}t0uqla$B=+6Yv&3I_u9=aM2 z&D7{$0A36=59%_g`A}Ehf6eUM@4I03LH9Slu;0#?U2}8Cyw~r4B!1YVvn&7k=CkWA z-}%v3wrW_Ld~cJV{eJ#~tM~uQKW3jZsQ$4}{`K}Z{&2@_H!Q8#qUhmayZ-&6*}uN> zs@cbkK5zGT#+NTE?>X6fW!P(<?lflS?_Rv;33u%f{nwuF>=T)N|EO2reSYmJgN8n` z)5O<4e)FNr-<opepd%js>e%mh-TwIv&+Pre>vPULplOrG_uss8O5)#pU*_+8@e2<Z z9kp=PFAtq?$8!T0C7xb)`KX^wKV{aI=b!m}%`R_LUei4M=+Dl+^4q^S<eEDxk9oMU z_}bZvzx(UIAN$y<iwDkXz2o)n^Z(LV^uewr)6aS|eZo<%o_%ilwpIUrZQExKIdu9% zr@eh;%guw2y5aRRwtH{C^R~PCuPb*ytgiLKvuj!|d}Y~heltA!)(2O<x#F@xTX#QD zeCpwUfAG?>Eg$*ygol6g;_IKRxnst5TkH|ru6XzNzS%Hw`#}$E`-k18O*!S@nV*i^ zZvLc)zB6m)4}b9Nj2jpI<jS7?KfCAZJyw4lzwnXRiI-ovL*rk+dD3~u{Nwby4@`Wp zZTE$LK4$EFk!cnFi-+ub+XqMe{($L2mXtlV)uzYq^yH|@&y$}%f9;!loP6h<pNvl4 zd&|+!-_&!!m>(T*`Ay?*j;~37xW#}^#vK`X;WxMb{@SIhPI~*$0Z)HDz4dRlSvLIz z{||evZ8+uLx!2Er==cwh{_fgQMNeNn>b~VId+gi&@d-<Af1qS^^?|EePCa$@TSM<$ zwe_KgTwlfgi$7ib{2%X%#D4hwGsmV&=g!;e++A;)ea{h}jJV>l)pw*u&wh6Q1D|>L z?z5i%=Ovr|>pO$$e|W=n2OZn;2qw|Lh2r_e$4~>&xORsc26ZG9*ZVC{ycvHd)FV*8 zg?a<(W2li^px#48pgN)EL){F;8}Pq?`Uq+Z^fS9bl|XS{paH5GY8KQjP!B*o3H1`x z`%vDN=%b+ahZ+er0g5+>u7J7)>H(-Hp?FyNJ`^{Yc7)=swUJO0pdwJ6Q1hW~hPn^x z7f`F9-i6v69Y_(>!BC^2j)!W3nhA9&)FP;*P^+Nch59$t_UO|Nh8hiZJQVjFW<p&G zwFqh{)X$+_fci5O_anAL2el7WB~%^MsZd=|*Fo_X%p*|0h2qVi&!DzLXSNSiB~%^M zsZi}u=R#cr^&r#=sF$HWfZA?5dzMiN)<N+`Vms8iP}e|x7mBwNo`zZt^$)0R&{-Bk z4Tm}kYARF;>LRFbL)``SQ>bU5-iBHSwH4+aL!pj<ngkVtdJ|dCv4?%+U?}{4eVWyJ zuElo4(7Jqx)#5v5o0>7-8-JA5dImkDw2nfDN59tH95_tvXSK>uE!m~x_e(s|*6&b) z3h}WLtMxf5g0lrv+S+Vr;C;1=SB%3S2TJcbID~iJl7o%Ik}88!MjI55GkEt{16qGs zLB9mg70!K%bM4|lYqr8UtU1tHDXm8kv>cwbx1Gdoa*)y50)q`qE;-zwvBuyh$RlXJ zHs0XglML!GoXC$=7$KR+`DifGS_6?<E79hZt?N+S)M8apx_^EsO)(=l!r1!cn80!y z1}a+KdV1jHHt?NVdkqV0eMhN2ba7y-9gTxoS%nJEIHMi|`$FO0=?56>ifRCfzqetH zp7MA|@mzs~QR|vaCjADssWoq>z~L#r)oKQnn%hTMt*>I9q8jmra)yUI3UL?N>O3sa z`Z<an-gqC_%rCVjL&h2lw`I!x=v{08cW0teqkQ@#9{4t}$J**%9K`JBD)&XG3X1Ia z5D1fW7A91R*>S2?cZaH#;{PxxTP?D+EMu#!&HD8XR1jt2uT`TLA!%^9PnE&ewnjf& zXQb7cltq<{O)|xO5?Tx+cxNW-N@R<hrwV5vst;{li2oG9Efm2MGZDO9$>6bpZ)%)( z_*Cm~7($d^Lr%0>({0AXSMM?84!u9TCa|@Kyq^Z|Rmxi^dsoB)tus{!D;Edxnyc9F zl1by)CLtJsCK_84>I2K)LVaMsTOk*eE^dQU>mmfKLcB*+^%4XuTPLbXY?cZ5_sBsy zT$*V(FQUt2!%Nu)@yd|EeYZmSIYN<_s}#!3nNSX{wqB0RRQ2B|;8QaJzbn6ZTqwU5 z%GMznTZc*O{hI?@k0EM|F(T|7)*x@F^;}J$^};^3+3auY*!QZ8$u+jK`lroOxbTit zO`28_6whvoe|aYUckOEfcz2tisDC!q=F;z`8=q_2gP?z^IM*)@w0^F{-ht3mq1yJd zUhWJdRlDD+CSHg#QSBM4s&Y@puV#6_ZAR-8B%bL<C31e1$krQ~jJtg++1fgY*GK4M z>F@*7*Rs&PK|5Nl8&Ud->bvL}Xsf9$(E6z|q!?7`bt%MM7YABXl%T^w*}7I0{kHLe z)=495PTpX<wyQHO?0&=;PQB?i#?K-5;SIMa<=f@To|iLWUJpx*?6Pfxmhd0~pw`zi z1$xg^8)g+s54nGzEkxMy&Qjmk4a;gto9}7e?|?l71$-6KO)pm;7}(krGPRC@!f3`{ zo7#RUGEfeOBJ#BL85)_i_Eg5bm?^3?>bc$qT~aZ*p~DF%7scyR<R!D`{)3IJM{OcX zGBxoyR5!YbqjJlewF<0xaiI0G0(%EGRTH;T#y<$c;V*5*e`En`UgQYt^Rp)eRpOo! ztHoKeD$Y&{?5Rx3%GFeNMcid;u51m?L}_Og;!IGsMyg!qpj?!e3y@MKuM&RB)(cfu z>wTnHTB}A_t-)}pR<&H!=GP5@Uq75m2bi<kOdOfX#AA@f3}r|Br|g+5_di}7xc`>= z!D+Fecuq!VLx&I51h!s7wlS1Zu#H4qf=p0a%sDtrzM84FJHacupMoeUEnjJ|T4zoO z95$+s?U$)zkHQfhqNcbMKdcykx;Tj5ST*$PQLz+>ca(^G5wf(B(t2@B5Q%104lXfZ zs};cjM`VVHzbnTN&gA$EB%D#YsV4CGuxhJSld;vTSpEXBRQPa{`N1X*-r3Nyf7Is> z+1ac4{l*ltHst*?Q#L<RqSuN>$luXyMfj=N=J~&PCu@$f;V;kp2Qo*B7=GaY3i*Gc z{NENX!{#5!oQK-{&4Ime{7Sh?gx?!mSVqybw%^JR{C`g7V^D<r4Tk^GO*RY6cT&9m zD59Zdxlc=fDmo?p%Ahv!Hi0kMzedD!f2@m71yS=#P6SchCC7p&*b*+bun;Nvn&j<4 zED}n1ivqnu$p?tvFz{s%jiTh&;343>AiAiM+riOb2Y4)aGB^=l904+%5#VrePp|?; zTTA{M3XJmWAk9}u{-NYWk}s3oDS4{oqb2VmzK#N>e~ZNyu}oZx?uh0;61zn%nyJr) zH2DU|`21A7Sv*IKh)0NfiJzlo(cNp}PsN+XbHs>vgvjoi;r{I_mM@E(r&0g=;??3D zuo&TR<KZyybm@-=(RNElf#@nr_5mxwA`n&ZYhM9rf6bQG-`|1shnpPKzfby$LHctg zNPlL6^rsD^KM|1j4+j~)At3$PL;71t|6|m5`twJS{yYWl11<*#z@NK7y1yR87+rEP zNPjz}KNZ{q^6}CymHzG^!`o5%n}7`GRYYzG_yWjscod}nKahN_<clP?N&bf9TFF)5 zD7YUe{l6fx^zQ}nQSmB}{+}!I!V2YxSPxdg-6)XxHx%3i>E08>jICq`5WlazhdE?9 z<VQhla+KU9`5eg|l81>qh@Yb0G44S6_W(%$?v%V(^0i<Q%r6qBg3PBWAk%dO$at4Z z-bM1i(Vx-$ZE-nBd-sToL3CjyyxhZbyFly~$AApyFp&Q21JeCJ(2tYPia!7c!~7D- zGr@x)cY@5XR`4Lm$Ak2zQruO150>cPA3)ZFXF=M36g&{TLFV&iey+@GLFV@mkomYh z$aFAJaxF5G{0>O}t^k?O=YjZrtqcFr|2mN7!$8`{Jk#hu1Ty{if~-&1gRBqV1X&-> z1u^E7w1SBL;oks{gZy=n?hux7cK}FtXbZ;wuYj;qf@<I)?2;1jXmBs^82E#-_KpP6 zeS0;~M|0$X&eveq8;f%c=y|mu$Gb6LF<1)HT^We(+2{j20NM5|a6Iz&fZNT4b--TY zr?*-8FXFGnpNWgaYsDThDNYrqh=+>h;`ZW};u;hLs?dPd;=SUX;&~v7Zorx1H^dXg zuZWw9Z`^9_za-u-eqX#yJYTF9OT`0ku<rL3Hx>VZf@VCP6Q2@)xzOrACf+JuFQ&zW zI8rPV2Z;m4H@{{5ds+Okc%OKMc#+s5M#Pa~nRxEC*1uWeDdHq?s5n^s@EU9X&*BPk zxp;$kwb&_67mpH0i+hQ?h#y`p|HUa{y;vq5C~hYH^D66Zx;RZ7BOWI1EN&y7aHVxO zQ5+`jFM8s-1=e1R7!hm4YH<hgE8-+HeAbI&#Dm3s#eboLq4~#RlX#kVxL7G}CvG7& zUT)o=DvlB>#BId^V%L0YzfC+=JW4DUi^LNyv-T&7!^HhXo)j|v>n^oy5>FG0#Uk;U zi>$q0inof_i(O)yI8rPV2a9`%f4b26_nLU8c#D`2o5VV?M%-Q8QGD+L>)%`APsJaJ zo#J%ybnyi7_Vca#MPiE>5f2pi7T-Hh;fark4~UnG7m8EGDdLXeR^q?Uwf=n~zAC;T z-YecIo-580zc<&qzg1j&j+NJlE5#M!4&qnDQ|4Ivlf<WHTlsPEc5#u|BPPYqG4O1H z`t+&zOYt$WS^S1L0^AJt4-wa%Y2`KIa*+Nl6E79d6Pv`-#KXl(@vGvt;$LQ2|NbOC zEZ#4ETf9<CiwUv4$GX?LdBD+<j}VK+BJrG=*8WWKWbt_M-EM3Cruew{h`30+R-E5u z?O!0K#2MnLVuLtX+(Z0F+PeR%_=fnB_$%>e;{D?H#Y@C<#YXW|@o=$HED{HaZ>DVc zFN-rpT_hdwb;*Z{TZ)^Ax`Z|0<xcC*6QGa!@e}bL@w?*0;pY5lKsP2-v^N4|ecK8D zv0gpDot1eAO8xu9?}_}}0QD~x6CyvWLH%*!k>dX1p5kWWKex5^SBtB}M@1gq(!cMC zw~7~w=ZI-BAs!Dh9pl7d;{M|9;*R3FZLEE+t4;dFr^Wlk?}^_OFBTJGlX$Yo&pFUP zZK@66=PxMlEAB4xO%Lj?+uHJdQ3rnmekJ*5;*Z38#B0R);<@51v0ZEy$BSb`zNXLc zi^a{we{E&;|0=#Cz9zmXJ|#XbJ|x~NUMF55o-dvyCPlu$z<5j)YsG`aeZ(!q&%a{r zza_pRJ|;dS-XvZpo+YNlDPp}?DVB(Pi@S>dMtfmAKM`LRxer18W#Urt8gagOt~g8N zegxgc#AC#-i)^1X=j(RlV3GS2l(!SPUqSh^ftDYMI$Rs@jN~W8pNQWPZx9!Vd=Z8I zoh^2Wr-+lp5#k}@PU6<$huD9hKYtc~BR(NMEZ#3J6c>mWif4=boFw~&Q^X_05#msB zu(+$Zz4*xh>;41rP4Q)MrMN=8TfAMo6l8kN6M5l>GWSbJzW76Ozl7Xd+*SPd=2rg` z@%Q30;uGRe#9PE~i&uzz-<$r=63-APixb2n#gXDrk)KJWd!0rP;OAB;e<Z#qz9zmX zJ|c3ThW5EnL*61@Cte|@#2F&@ZD^nSHsnOHRy<TJ7rBo^d)tZpY%k@{PzlHn#XpO$ ziZ6(~89;mYi%Z1C;<e)C;(6kkVnjSioFI-B4-oef-8j0nWPaY7;r~f|MdS--)c=uq zk9eDSqj-+U{Uq8?h)v=+@kp^s94787?k)}zbunSUzu+nT<>#!)cf>cu7scO-kBg6p z_lkFlH;LDYmx<?#&Ehx2264PNTC5Te7WWmuD)Jly{|0O({uBE<lvj(Z#HYnyh~E=$ z6)zSs-8b$rEi+7rQSoGPv{)tXF77Cz+cWL~!zH^~E*2Mx3&b8VDYlAJ#X7M@tQJef zA!4yuBn}eS71{9DifhEx;wo{axI$bmE)f@t3&jQEJaMkrBPPWuV!c==)`-<&sW?O| z7K_9|;y}?8*X&}`w_02!t`t{@%f)5lQgMm6SX?MB5PQU=*eXsHr-=1pomeAQi>2Za zu~-}^dg8jTs=UNC;%ae~xKdmuE)|!Ei^YZF0&$)=SL_j!;uNu7tP^X*YOz!tA{L89 z;vjL|&PtECMqDkf5?6{V#O2~LajCdaTp-R9=ZZaIQfw8cic`dTv05w@hls^ukvK>k zD0<?$os>RtmAFz|Aubn}iA%*LBF}f(e=QUjh&^IbY!#=9bz+TJEtZN!;vjLL=!t94 zahZNoTqUj)SBT5SCE{Xnp}0VtC(adH#i`;Hv0khbYs4X9u~;PPPSAjXl09+F4vN3H zN?a+f5SNQf#Kq!5ae+8boGZ49Q^hG_y;vvKh(p9;u}B;wuG?PqMO-7U7I|LJ@>nh| z6PJn$#RcL#ajw`SCdDaYy;vvKh(p9;u}B;w@<KD?vsPRqt`=8_%f)5lQgNZUK%6Je z6<bAKtY$b<#Cow>EER`{#o|EG6LpJsz*_7x(7#pUN|ERDCVxeK{*m%xaiO?C>=Bb< ztH|?vx~mgw#A>lrED{Ha14U0<qkRbOgP8b={A>ng-XSBGic3V^51{@$ajw`SCdDaY zy;vvKh(p9;u}B;w=I)QI(SF5hafP^CTqZ6R7m5qSdE#8LRh%kL5$nZju~Zx)7K;N# zPjvezYqgKDN?a-Ov(C)7<>C@?vA9rNAohq!u~nQZ)`>M@wOA?^iG##}q9?A=e#UB% zFHtalE5&6ZU$CJ55^=FOPn;|Eh;CnHisX8+POK4!h{a-&I7nQleUG&wKRCg7tQJ>@ z%f)5lQgNZUK%6Je6??>_I7O@%>%<zdS}YZd#6jXf(G%BcUu3PgO612hn2r_Vaxr)R zW{LE9pM>@oiVMVf;#{#uOp2}IRIyI15v#>gafnzf7Kwwzfubk!V<C*!T5*lIT3jWr z6qkuh#U<imaiN&I4>VW$Jz`R96?xBv@t7jki*;g+I7BQKi^M_VI_%S!^oVQ3)gu2q z2hEp@%fzK(?*7p{>CY8g#i`;Hv0kheOT{5#u{col#C6)&Su3s*xsSwnav#aWS6m`4 z78i;O#2zszwu)25I<ZEq7E8q<agaDr^u#sV_gO8j68Ys!#&emtR9qr178i>ANF(j{ zh)J<koGMNc>&0rZR2(7}i$&rfah>*i){1My)#56Ve-_EaUtB6K5f_UK#RX!Im=s&Z z+<mHg=~s)T;t;V|ED{Ha>$DHFR$L>l7FUSN#bx4BaiPfjNlf27ajw`SCdF29s#qu1 zh}B}LI7BQK2a2A^k0LSLwW6+t4_GaEg}7W?CN341h>OK};#{#uOo~&)da+Kd5r>Gy zVv#sV<ex7z@fFvItHl-Ka&eisR9q-75a)?=#a3~uI7O@%tHn}rh*&HR6g_dB_KDVt ztHhP!3URr(L|iN`6c>m+Vp41sr;2rAjaV&~ibdieai9n=$^(9kc>${S0KUnADl%Y! z$nzY^x|uzIFNsnf1=8IC;tnD|yG{KMMR$I)Qu4#%9pd%kg&_T%CAm$EiYJKU#KXlh zaX-<W=WHW+6Y*n>tA7^%AU-4hLVQTPTf9ZQR=fmcJkOSVhUm_DPL@1Ybn}3rlHK^f zlVmsUyYrp3C>ZA7TjDB__fx6AT;!_|l-)RgqvQqR1)>|*6O!F{K3TFG$45yn6$gvk ziJOU^YJ7ZGd`<kF_@wC0f9{d|9r0V@W#TzvN^B8N6^|3gh&&Hsx(^oj5_c505dW!h zk@sV1|0VG^;?Kk%ir*7&5_x}??k*Df@;BvnahiCdc#Jq&EEo3|cN4c2Hx=D^(K{L! zUlpGf-MP_^CEqT(bE69+yYV_9*^Sfg+^A0a!^H!{-No%he#x8Z{8Z!I8{!M%uf(5- z_lb+dD@A@tkN&vv_f*JiH^)hTj5tE%pN*vby~G_w-t(oqzv4fd|51EN{EhfC@rUB~ z#GAyc#EV3C4%9Arn#lJl7>-`e88BLMxwyZ$o5(*0O8c9NpJ=>#M|@S}ePY^sLj1AF z`^D71RlH8TRGcH~zVU!&$-HljAP3Y+9x0ZHdy6}ZTZ-;n=tBg`aNibxFFq|kCO#;- zbD%|%uN3(LEdC9cCANuC@dS~7rWpSQ94?lL`-!`X+lYKq1pfwntnum3;vd9k#9xRH ziFb>)h}Vjjh-Zsuh%xbGaiVynSSc2Z*j_d9;yegj#gj$<F3F<L`4P=UpXYy+MW6E~ z%A(J6LCT`PP_pRr{UVx+{sPIOKVP!w&yy_r7f2TUxspYHwq()oku3UY$)cZ>Ecyw_ zqTec6^qVA${#41Lf0|^`pCVcGCrcLnddZ?cL9*!ANf!OFl10BpvgnVJEc(@wMZZF_ z=$A?s{h^XYe~4t!A1qn)izSQx9+E}BNV4efBw6$aNf!OBC5!$*$)fK|7R}p+tWTcR z_di2pqb&OCB#Zt>l0|>5WYOn)4s<X2Yb1;QTarb8wPewMMY8Cxk}UeqNf!N;l12Y1 z$)dkPvgq@CoADF<<&s7J5y_&zOtR=dAX)U6N*4XQB#Zt8^b<Jxn=JZul0|>4WYMpY zEc(kZ4r9(fS@a)}Ec#0&i~e1bMW5??x)=T1B#S=R{WKT-8zqbWLdl|kjbzbZAX)V1 zOBVfkl0~2M6ox1Ib0v%ZY{{bEBU$v*l0`o$S@aW<MZZ<D=r>6g{i%{g|1`;>KSi?W zPnInD^^!$@f@IOJlPvmUC5wKIWYHfbS@f$Vi++V<(Jz%O`a>m){t(HcKUlKp7fTlX zJtT{Mkz~=|NwVk<k}UdLOBVfsl11N_Ec%{g(f<tdJ=PD=Ung1gd4GxKqQ6$M=<{9^ z%|)O4Nt8wZEy<$4TC(WBB3blTNf!O*B#Zt^$)f+1WYJ$CS@a*5Ec(kOi~b{$MSq!O z(SJa)=r5Hl`gchd{Uwq`|2D~@zgV*9-zZu17fKfWYb1;Q0?DF3U$W@WlPvldNEZFM zl0|>EWYO=DEc$85qMwv3`U%OR-zr)3n<R_=RLP=$nq<+RB3bk&OBVfl$)Z0&vgp@I z7X7i3MZZR}=#P>t`qh#}ze2L;mr54>p^`;^h-A?pELrr6C5!$Zl10Brvgq$5S@Z`< z7X7Uyi~c~#qVG!<eNVFJ^WL9n|Catb$)f*}WYJ$MS@hqNEc$CCi~d`ZMSrzq(SJp< z=&zD2`p-!g{gskM|0&6$ze2L;KQ3AHmrEA?M<k2>GRdO<fMn5MDp~aJk}Ud5B#ZuS zl0|>9WYND-vgj|AEc(|-7X1a1MSs3z(Vr(-^e>Ps`g0|V{#4ALP$dRT0Wl>VP!EpB z`<*o)tPZG_eyQ|}LHrv~B>h3srzZ8+VLnBF)`IkBHAwwc(qAe4<<eg!{iV`h3^Lrg z;#83Cr+_AYpoyRKi$%cL`w8}UxYu(fCY}8KLh@CTpQa3tT5%tPzt<$Mko=)!_Z<iR z*?ZbA#eEb0cBTwF*U7)HNnR*<KiPNRap1lg-MjBL93$C%r{Q$UD1fPQKZ7#H=+aw| zYW&Wk47FV5cTq<8H%aEloVUfEChv*y_Y=vykH+5$$y1B0%ysy7@cMo$nm@L{JMW8S ze<sXm?!KRKD&j)(RWj#32+iI1D-K0mXuceiZvH-%d+z7(w@U7LuaCcd<h}`M=5K)9 z&y)GF(4+s8jVV6f=-exO7#VXJo4<O;@OgiZzsu#n`+i1~{9h;k@1*%=b3OO{jPs58 zT#xr8`Q!cw&E5AuZZ_e=T<*CKvlq;Hzl^^NV7}LubM04OA-BMsadbbv_Z^l;<;Y*l zv0saP3)^3mBhSf^TXW<Gkgs9)x=-$+<1NYw|6e)sOF41_@+<70_NxN_p3JfT^_=h@ z$T5%S$is5v_j2;%?ws^#zYnhL@AVw>hMe#dIWpI!;q>U9z4Oj{Hpl)?bL5#h;a#0$ zu6?_}zwL9(FU*nO&XGB92*>aBoc#YNN7nuRAUrP;Ipx@jhG;5Paa24J8#yhSibdL^ zZL!*hlrbCMkgDu#j<+|}Hntg!hSZp{+DXuM##O1VX{mH)Ek5&??OAnGyfe!$<FtN! zBV0$vHP+@>FDsqi5pRzqqv_TZLRSC{sj~9O#7H6*oe^n`b~e>^D;6V@U8&Z{v}ogu z+D2(rAsO+O_Dt*=QWcR&v1EB^q#+V(OQvT<I%CO5D&5f;ZHd|NWu>eXfi%UCj*eM$ zAH)v{9nsj)mW+1BY7upY)R0al#x*vi%gP!Nqe!|l8c(N?9^<ICVcNLKk;$cz$z>6G zR26Bcj=<Fk?K6>yh)t@iEoS1I$@Q|Tcq$T|mg-1!rDG-oToNLUiD-LEq%oREMAEU& zws?CqP1ljeo@iuRtOfbi7)>{}+Gvdothh|7iYAjWlwD9>4XLr^%ED0i)osxkv0h@( zP|m1_D@b`+XAJS|jv*%#(R3USEHD!QY&!=HDHk&GEVo{iRXIPR$dN=xv<byMN#&i1 z)yU3Rv?<bzTB*8Nc)r(<Zx|jina{jRrBO*Djjb~xEnTQV9yQW~#~pjz*xITJlRlJX z1!{i0F%oY^6^KRKdMn>rRD2`{mWM~ib)+K4A#2+@nrvx~hjw`c^^v|X(x?z4P^=xW z<mzm^G961KTC9jhX2XtGred)fEww$y2YTE98Er?#70id)`o=_mqFULQ=t#v}z=b7m zY?-ld>XxZ-UG1@+WUMhAL!O1Ru{jz?WROvbSi6l>Y6OZj*4Z7aRie_>aU_JjNyWJK zcp5pUDw$*8!fZ-)pn119C4$<Giry1X)BDNe8savXxU8RYY(so(sr7PlcWI=(ydpv^ zg%Z}XwjwP(J&|OrGu6=^O~la;be9?*L$xj3^9_rc78U9k!+lx4X<paWi<REnxV6}8 zGnXHQ*Lv66^b+`b8hF0#4Y%=pH+{9~e4AO#TE>N^G1Ic?bV6hpYN1f(9X)1DB-Yay zOQs{~=(I#^c%DvGp3aCoooe}4F6R3(GS5v}X}(q&YS_^ej{EwN6C#muktpk1LwZ7W lBofCkr<y&cz@7&KSX|Mm@M`NK&7BycOM|DJpqMrI{XbUU<kbKG diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/functions.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/functions.o deleted file mode 100644 index 06830211aec4f422962b86224091c8cea4c12bd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202804 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/inspect.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/inspect.o deleted file mode 100644 index ac789bd04a3d70f052b5536c9f6eb78d5e2a3e5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604572 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%0DG%}&&JLT}_Fl6-yF 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 GU;iJ&F5D*o diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/output_compressed.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/output_compressed.o deleted file mode 100644 index 67ff690df1244e96e8ed08be1c77213eec11fb83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270240 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/output_nested.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/output_nested.o deleted file mode 100644 index fdc276739e3757f3a594509c5d14d2b26b623cc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242872 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ð`B_+cXDNt|P^cmAxU8WrYDJQ+=*#pn;Qhb(P=M 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 blN=P7y5N9!X1#^C;{B#x@eI|Y7A5w7zK%{K diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/parser.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/parser.o deleted file mode 100644 index 650829abce7fdd0a742c4d7d968e203f89ba53a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1718884 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%0Avs5!mqqN>u_`y02T>= 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�>A_NIr{SDc+wB-ID%T5Nz0o7&X6AJcKi8413ywm%!0cM03s=?v-zVmv9!F zGtunuCM2~HX*y^1GwuG6Sy4&JiE_Ik<Fy%PVI$tRejLUhJR1^2UVDJnko&u_!^6?} z(Hmywo3(bGuC=qxT3Z!CwYDgmHw0t*Ge#9K<*E79z1nRQAHu_0S%VjF4IV=8#9=F` ztieZR4IV0M@EJ!9p29VF29Eq=xj{K-qISW9n`btu8vKSlC~zV2I=~qZBr>+05Y!1c z1b$@=M!$fMg4{0MX!gHYgO>$saBo@`e>+pv;Jy5YM`<SYw7+8Ijgc?XnKk$wRf9+3 zFhf;?e`67j{VO&2L$1NcY&H02`D)U!^Qys`fJ+VjP}SfNLg!I~HQ5?#@Q)Ex{Gp^V z7lOtWbCH>{2Cwi_TZ4cPwX@vD&hj0+C=Ok3;fnftmN%Yzf4jo{@ta@|TQjKbEb}MK zf^mI7=J>nbFldC_XD*5;9zkyp&&{B&H*I3siL3%*Q-=3h*^9#Tn<4fh!;$_={dN6x zOxu}sep{eW?iw4C6?_fBv~_Hgh$wEgdDb^2U}=<WQGzcC)1(1!N};_vXe_qo7DIS! zU%+mxM(E>X$F&>*?qg=wWauuPo(rUYiyGaQU~5$)F*TUxdrq^;nuc0?+7Cgi)}<Mk z+%Z$X$uDdUFb&Jr1tJ%`o6!TZ>@QxD!+bL$nHFJ#X)VIP$@{$qI8C!Ai_*CgQQF}< zfKT5z6<$Ps5)ZcSmdYDKmu8gH-m6JCvq2iqZgY>@T(+JsrS;6_;nJttdOirR_IDP4 zCWrE!?2=4|%HqVz3~aS!)l^%26<Rlo&HOVD)QR06Ud-lG7bZmiUBZSmnI-`+l9e9x zO^YE(jj)M+7hc>JhO`BoEzR=YiweMo#1jr?)2cUp$yaNJ_}P#)W$0HBKH{O_i41R= zG-|wH#0`x3qA#|dz{NBY8_XmNkfg4dpFuD5&~Rk1`EC-X0QD=W$_}YNeU#IGVWwZi z=|9Nuwvg$u4;2yw&w1tismWD#e4Nv-HPbKU^zWMK^IVe4*4x&!IExEIc_v(85?;ZC zXPbokx-n)_#<o&UztT*<3h4vld#f&S0!BDykOJ60h3QqCYDe=yEE#F0AJ@>O85rsD z`ygwX0UY0<G@E0W3~!o*SBq<KL?3NVFLhK+HCGO@%XpD97;mY5FLU)PbyUCK+Ym{- z)|8TB$X_qYD8#VS5KGxDlx8{K6+l-7v0sIgVg9qR<N;jM+S~w*y1)~;{7^wH>;kro zr;$su&SM;>rQ{vRM{A)`qW8H5rmLyZm-!TyU(=`;G?>pq`7wj1GWA@zoX#g5l;D(^ zfOspNw>xb`R}?#m(y8CDtrl$zcr%^+*mm?8>E0htzIIzJfaAm<ebNnA|D~Ay!O_h% zALVjdb9qXi6*H2#Jd{QgSw+lc6}dL*_>P9Jq{-EiT*@AEx9UC`(=vJ@WIdRT7IV|d z9@f>02VxQqH^s&cY`tnEeo3Q^&Ae}HENBPBL|#rr)y_$9^ir|6hwI9Csf7KkgbA#K z?^y|BSqTSN31gKKzOPlj21+<a$McxZ;Y(J+)|!>@3bY-8{($SWBk6V+b_`)(;A_yW zn(x`oV!pv*Zm$*Jm1a{8XcbOl74GI^f8Jmfewo4Vd#X_vG#TknE<tBtr92sDK_ri3 z*JbeJm^KH!rwLoNz+fFZ0fq`?u>`M`V9Z3*sY6&8sTL!`%4mCzdE5>YU9NE$EYqyf zHqGUS%;o3I<@?O#Qt~Rf$l@bZ&^WQv?MNQGzqIzt+29Vau9vtUP6WzRF;^KOmSpHw z+2VH&K)M>EQVAGL7Hsnmz(^>@wG+v^tM^4!N4ECg_4;RCeBIFSMdQ@{pZehw1a#{D z5swim>Q*e?-?A$vDdu<!XElcPuFESN<Dc4UV5^pCB?GcV>#E4la4gU{F>e=CMUH@N z3=mO8k>XN1prkKOMvdkJjn75=?Sev;uxpW%!r+1;@6E9wa@tefGEFf^OOs%5s()%* zlfgn{S+Ve(3_^&12L|1TcSTiX8fMK$VEa+5s1{|5Zp0#Qg6~4H3Uj%&BgO7qYQW}- zm`a3U-`}h)vjM~b{?{3i3oHq%7xh6xIu(C>e##$GTI>Iyz!BoN+Le*3+ma0Lr((j` zCVY_+{-2cL{O#ntMgD^%3I3n9GhJDb^>mzq{-cp9T2Nh?S5Vj-c2LQcrvl-Hq6HkU zNUBWI)~~83tiRQ$wk`Y5nlc#R;okB{>^n>l(?pfnnTxZp-V}J<R_s8~+jtW^JMLW3 z$l#+qApSt5<-+(U6n%a!;h&-YpQ-)i3jZBm<iC!Nwn*i^X=3=Gr~HT*g)fwl53klP zyu_`2fc5={-0#0vaevT)&&S68_euU=;NW}&{~e4rFc=nIQt{qEtvbF`Af8FFHu}Fq z<a}zM&S-!z`xEDL!@ZV&L-yyx;(roD>X?OonXkbd@kRkUr&z7@lntT^i=y~PIRfcm zhTp5>-0dlIZTahprFrPR;E;SCb8Na8&Cl$YQst|}b?M_b_0X5b>=}(m>~q(3@jfl} zUVjVu98)yf<cj~cCh2_4<G-`^osY!@E6)F~b>V!p@c%9b)j6(Qe2KG0ez!J@)@A3} zV*jzOsAzq@JprmF|IS{wHeN^b^4xifc|JA!|5wZ(E{gyA3H}YL)&}thy8-9ZRd8Zp zbJGio#cUkX!9zIlOg#5#{%Ck8t4yH~3*|A~Y^VCJ7q1s2M;6l@FTM73J#7F32*<)y zVv47gNREpfiI=_nBl?JIDkH@bPf>r2ERSSGirb6(e>@A_`7$xzC=+Rg1V^J@EaGg9 zx|+)n6AMy&O(XF(q+cA(uk<y=SDebX`WoV$$-)vmEy|C_!!jct_sj4xjabB&;r<kT zx@Jxo&SYzd*IF(~@Y8h160C?f6|;<#c1UwEw$#LmU7+a~ZIcnc+DLBIcB^RbulNuV zr}3>Pf24Ra;ge4x*H@n8NU<qDMeO#(i+3;?bbTz&xJhXk*;>rS33+0J#~=SvjSpFf zq0eHF#FK3I;<NlBEFo5lw+ku+K42JA5E&9AKETA(NPpKpBE2$lWJw<|HxTEfKq*~W zDdph3$S7XW7(#uCBM6#`ca<VYS}5WgBO^@g@Wnt8pU@Y&ZWx1fb+Hmpx+rSxi@|v= z)xH~^$MXg{mc%d0L4Xy~tkp<T$Xl$Ca#JA<#b$4EWNS=`wZ!h_24YY?o@&s9xG*(R ztbmv_x$sySN~s*@eJwG{Cb|cUsRhL(rdZ`+Q)(C~-YX~)>plLs)gn1nn-w@(E-L?P zO(s_K^(Ft;a@PRoJW`2iql7ZYisJuTc4NisctiSs+Y9`+7wI4aK5CY#Xx++6#EkqZ zu?4>6o&0jK6<(3{AlpYy|6NXYIt19d8b?EM{l@~yJbc$IDpKsj`(^RI8^bQZK?8-p zD7dkcc<sKS_%4?m+$wnRM&hG_a^H=j6bGXq!G0W~d1F|Nn3R(e=J{;&b5D!jDL6%N zGa9NJ#Z0`)8zsJ>jk`DEwaK|Tm0_NN2w99bKyMVQb5q{N!vgh?DxNLoltn2ih+U7g zv0|S$<-fnG{Fk&1v2gv|fR8ZSs^O^1eo>uIEme_`e1wi7yv!eRRz<9sO8eot1*>mt z3&W|NH=yX3<@>Arccaa!hvCHyqH{55)uw*IEF4BQ03mpnys@#(3TP@Ss9B3a1CHg8 zrsy9Pp%nL`=U}${h0R(mMA~=rtKzE&vKS|D#fTl;j$VWXdIemDdGILe^K^HdBZefj z1O3|aLZ(7Z>pG(_UL;qD>uGIfGkPAnHz6BOw3}FKr4RDKk{1?~;TgxK;=`1YJb97k zy^-FmS&Ipa5&S_;IcE_Nx6(9)`7Knv`i3*#F-t+`X!0Ul8GW%5$;Ec`V(^Yaf!b0< zJ6wnIM-YocCOQJ53FbLA<|okn$SH5aRlvT7b{#>*mDEx2@5I+xV?zFw<2#1sbnahr zWJ=@66!B7AWNMY|e~I`BpV^D#Lv!xrGfV>F6Fv=a3%y*5ENMz6AbOH`cRIBjz!y1F zF%MiOMi<1#;|9B+?k|*@`o$wvB?_6`NS;N~<UU|we{r4{jEuThL_(~I1w~3+1P#E+ zF8h$jM9O0y@+j00JQX3>7F|~8zc)k~q#!BourMv|tQ@?^M}@JLU$a?F+k;GbPxFbV zvvNWu9!)O<SL2LKdx?I{Ggt5BT8WItr%NNm*!)l;$9(8~56`xi>2dVj5Cq|?!-_;L z^w(2ibk2X}{vwp>I2?@<nbIV($X`O26tT%07wP>goqxGdOH~FFixsu2ARvq{K@^44 z2XeR4E-h2apM12|ywF9;-I#WZ6-{^-6z#3JD7jMnfETjx$?QlmESoCo6;-Hyc&Cda zK?b&o`){Eh0E(Ree0QJ-Z%)AiYn19B-qye>J3hyUy{&;r(O+gm0|Au{ZS13L4DmCL zh+zn4WPu>=2fVz74+3W=@V5@ox@KX!7J4boz|#SIV7mkM|NVsHa7N};qK?C=5WWxJ zx^9a7Mf9>$G<C9jCpYUqK)ghh2GY?Uv=L^FN7azoY|{Jk>0J_S($7#?uW_;HcBsDZ z6j+OTXC8|BodOi~7Eh6Xcg@!7PeR#_H{g3Hdwh_c4jBrd2TtDOb3RN;Xa6gIBIezK zP+L3d0Ryku{KqfkKVBpMaaj3}nk=mkiiDlRCpz;xDerCcPPr-ikDT`>E_suCIDp|K z>OeehU_aShc_-&P>UR}DlL=G>kO{$45rWHcHKSGiu8HB^VAxxqYC?k2Rva;m!;PB< z8J3?TP6*W%@w*FoO(j-#5x?oo47zW2f3y*xSp?ds`6URRiV$3ms~KH}rU_@X*6gBt zXovKaa+p^T!^i3HWK+ZISi?_+GF(B0yTDesYp8G+P~omb;hw{~#56BuO{O(3Px-=S z-U`$RG@1L5W1RSsP7l{6c9h-Oyu45@exgc0Cf91?hiGIzCKp`%fVWq6ouk@cP9{c7 zOvvN+9s@XXi!|_I4hqoBd<4JEJHaJ$Dzo9fGEtp_;u!8jnPqU9oy>8R*+76!5@;Ym zCInAK2rkFfj7FK^!&2wq`6xOya+A?C?Qb{vD#VbyN^t^OiW5t+^m0Z(4C14or@469 z0eJOQoXxW8Z4i#*L=g1WFI<*h4VLa79*KF5BL5WG0*ozCJ(QPezZiLmpRulw@0-@c z*G-9|>DjcMShnV++`7G-8(NaD`(RJ|Yz<QhHB9@cVVd}R4U>OpWI|WwDM5UQ;Q|-y zdTm>8bFm)Gp##k{C)?Sk*1Hrdj`_w6gUzNkl1;rwHuZ%lLJ6I#iL6frL|fcu=<MlC zG;B5IR~dBnec7sJxMWXOby}2({<$!i(|CVBk2)Pgave5x0+1mD!C^qsrU-(kA_SM? zYDU9v-E$6$YDxT33GLDRj%R*P<yif|8dldH7k<mB3a+-PD<0ZfP1>3dZlcertxh`k zQ#yBN_hCIGdB$HQ>X9ws91ytym%4`fq>4~uvUVa=KS9ido<u5kC#}OMv8GPMwUA|9 zZfGB(1cF?Au0Di+SY)~PhC1{<I1OZQnmk4ZGjdb7Td`4aw_>@>m`;(Jf{|ye*n`m{ zx)`*d6x|#Y0lFBkA+`y&97l@fl8>6;0z84n{M>)7k1>_{7*za?R3p%ujI|=)Quw_o zHdM*!s3yZ~-HQ{{y%<K_izDbB%bsLS<AaeHfysI@p+M#Q756Sa%%fFbT~9{vp<)wU zTKJ)09F3LLh2fJ?6omX=_R7&o4K7T4<I!&P!+e$da_&cO$Ys|dz11<!{6m*+^brGw zQe?|K4S5$)-iMI)wsTat*YIg{Dfx6Q`9_v}sZH{MocVMY$@`Mz{cTNeAxYk!n%>jD z)2})nrfVEt|K=g3Sc}(M<M7@ly$Y@MewyFDos|_@?1&MA@Y$nE@f*H3ESjt4=*KMn zs%HQny&`HaXIk|52^0I#h1f6QmGEvwVi?|y3-)u4`^qV#5_W_vsKHbSJQoF{;Mndv zhn}aip3B6JO#6W8FittgS)7^H)?g}gI5<00+*cx0AAE{d*H#vAVTQGn@Cv`-H^oIl za_58bdB|Tg;HwAI+0C*edN#x1(E9;&mO%Xg;!XlV@Kl80a$L>m-|2`}&=`%iza_`} zKindh@<8)QmX+m=+!Swd=^PNt>%+>#+-z{Op2l7s6u}dkU|;k(@JY&g=*f{=9!;M| z)~53w6F%WWcr6B>Fwu{)9imqtvyUjV3S`Ej69i912*w95g3;(7#h$BwgnmGgc*<XF zn{L4DgB*hI<!&dn&7*Z;R&im@&9M3$`pzIhLXBYri~-+?wfdY<VW@f484zo@|J*)j zv03jo>D;G<R|vGf;x>9s=}<<npH#{AxXFbDDx8fG=;UWYUmH<9MxLVz{7HM71v<x1 zSl%ss^oTC7pE<JyHDq=WnT@8*4kEKxsr)8nI?8W9AQK3JFI&m-BM6>~5L}L{8T~tb z5gznW`K;3XzRUc6W8?Q5=66*M{O&<+Q;3;8n&0V8es=&eogh0jzXZWk5rWHcHKTur z-`(7dP_ca{KWZEhqav_whi@5(=~&&`fsbX3Fz>{hSd5Dk{qPPrQphG|CEMD!nW46} z2DVo7ltl+!vi-E*b@rRq!Ue>M*E8gyurjxIIJbT-nzQzp^t8*Ha6|*o!2{kwh{UpJ zLQ1O?OjTfV<QD3-9OD4=VqQT|EMCBj`xmA_Dk2la&k<^Xu}2%lcvPD<a6XMlou@3- zW(`}$9vAsm;@xSnDAQVVS7AL4K``iL5$CSCMLg&tyIiM>*{SW*tnDAtt=itf+Fs{U zwr<+q3T+QKhqm!XV<gt+Slb_wwr}Q6qSp38*7lk7e^uLCw6;%Z!|Kaba5R6%Rh#X5 ztmqRiik?M^uCyt74k@~l6g}g26#W{$VIg~?_^#J2+;lk=O{W9Ji2?LUR<jZ<;}!>> zMRUBT6cAQL>w&;xG%~M7iVw~)m$-<=G#|LkC6?opDF<sVBn*x52AThLDw#QY5)tqH z;c%>2@fl7da_jA{@N##5j?9j_`)+uFti_-l45qkg$7lKEl-vlO5$s=pw;xP>+)M4( zewP`+MYMDAerqLILS6RzQ8ag+bH;|}120t5fm?OnQ#kLV{H+#k8IM!mTV3*g2wBgw z4Hwo?-t%a<um-b{=UPmN*E3arQC-&d)P<X$kM4~r^hK2MUqVfQ8qA@X6+23kW<zOa zEwhMPu~W{OwE+N~BG3Rmvqlg+6(P7BS2G&DkXq-QS=-5j8)_F8<*Rb~KkR*XoE1g( zJuoWf1ZG813>Xk|UQvvg-Y~D-2M#mlv?h!gF|UXL6>|bb!2oL(MO`ssju<du)-`7_ z{<^2nIW_jFhi_TF`|-EC{J}kQ@44qz-Kwtc7Z|bwxLaNNi||^#efe?ABYygg72CJj zpg(MPefoZTI-U>H-(ioZ#!HVb+<M<mNtb4%w^LHfqf<sne;Sgy?@X=2zw^|1M_qd9 zwd<1poAtx_xZI=V0{lMxV6<Jgx%Q}gA^UYvb=S81rm*9WOn;|w_G?|T_j|JcU#eT( zC5MN9*cbj`bruP~79;&{vRmGgI#!pe{*hT0x-9$Y*dzT{>PGrAp>E_%>DPJF7xd{` zzI%9~Ef>#ped<ixlKwK7ye%0e{b@+*zB9E7r)xRK)Sf8oR?Lp1gX>1BE!jV~>{3@e zm!_ounz&otX9HTFOE0!e_PNNb3O|?Xo}VfGbf7VPe<J-wS?OsJ|B&OB^cyZI!QY^` zA)VRMQ+tCVeGetQf9#p=q=hPbj85MsOdmV%O@HfE`}9}hr59EHi&)cn4Niae#_+nG zdewF6^-}u#vQpMVEv)pv9B;+Seox`(^jBl0;YV7+@BJn`H2Vb}*?-oa#-D15PyS6j z`;Wax*Nw@-&$fhL`%U<=G@Lf`+w_au>G)dy9eLPMEg}8#sf_o3_CuHS)lc@x&!obC zj6EUzuF_Wf_y3NY{o~8u9Ygkx*wZt%{A0`_*MHe+dXsrE{Z)Fs(*KKO*1C)G4cF?k ztnhKyOLZ+DcU_ckxmJ`^;rW@e52>y{yjR@~Gu>G?D*do4eYdN_ivPmnUftyMz1RFh zl+So@4r)0#2OpjN(ly>>#<d)rpH(?H$EJtggzQWln;o3HwVV)d7Z1)$Q_|ZR=~5n? z872K`Nb0^bwF;*v#D-HnA=3W}53i5!=bM<frk`ev9GIR@FSmS}@kZ-UGv04`EA{@! zTdCQp|4#aL=Ox+uy6<G~SLW{(Tv2@U_w|%?MMip^Z~kVK^rs=I`_9xV{5z-qnC#SV zc{wul2)uh=JlMvjzjGk{-^B*BdPA`8yq3qmp}%vm@pZ&G>8q@|#`N_0bwKr#?W^o$ z`*nbyY@gM3vh9_Ap(FhmH2tU654AhE<$n$7QukW+-o@U#kFGl|J86DxIcaYA%}MiU zdeRK9+qqZWV(Dr3WBOZ=(*GwqI}@+{4J&;QBt5Ra&%&p)gh&1+{9GDNPrEO(_!%wn z;lGK$+>-uT7Cx&beA#cp=_s>P?DhdIzk_V5r`>OUOUeK7(RXHgb+=D{sb=9{Z%2>5 z|2uAW^!@G_vZL?JnOcs%A~$;UotM7rm>+$w<U2BZ=sqR=ZB8B1MUFqDUob<<L;5TE z2Cc@g%QowW={uMI@<G`0wqv#vALMm;d$vv5r@yN<{l(nr9?w2w__p1_d!+AErJMZY z^fg-hy8Dkv{~dS!ubaBm-QMyx=WFS&t4bq<T~&N4`>^FfWxTHER(G`z^QW@$N2HH> zEx#iHZ}j=^F6)whCuhP7b?;@rk?4??N9^=hOolggvoF)Ul0J7`l|7cd!pE|VlKzyw z@sd84wF;+)?(9=Nbl+=vshE9wJBe>fUe@v)`fbZE+T@+$>6Vv<lk~h9-lohB+b7a@ z7H`hpczhx|DV{tsJqt6!?0A*2PxeKYC)2MJreAz&n?2Zds~eU6MD0%5D~{Ry;eCPh zUCuP|yOwW~w|s%*%C?odkBhH2hNdqlKF(fm49#C}#8cAfkd$_3YDG_*lYdHF<-?U3 zI?UW>)(PqN)&7xvzpcaBb#vgGZ5`_V)^_G4uCM#3<*RPHX9x7H=_eW4gL}J`I%JQv zhh<yi(qppUy2fdCO{clRZx=r$X6?H=9nz$123MyuXnAY!jp8JSr<6A`%5c7@$|%|Q zGE?`RsZ|(nwN;r?-2(i$XfG_zT-iuZ`psA2#<zS~!M=*urEdN7wdcdX`M~6!?7IpN zXCIi{@jG8+JAVd#SK%3Mw2|pXYhU;GBhz2Sk^b(wmj4z06aLoK%=L21rhBH!rh6gX zbk}B^?uB&Ir8*C!ZxqZiYu$C}mmg+WrEbMa`kNWn$o%)E9}2BfH)vpXF@BT2yEA9q z#RI$5Et-B`zkT{mxfjk$9i6jZ?eMpOFVyu<e~aYZ`8xwAv_*r8H}Xf?Wbd3@J}|w{ zrwaKSf+JhL4tGN2yMO))<%PN~=|yrt`U<6Q_1pLbN2j;(zJ3?)IHYdgmX{}0);E2F zp;z6Z>A$$0dF8EUXnRWbSUO-x_Wxbhr<-)vx?U|6TRnb;C)82tm#H#FOU+h{^hocL zJ)buAs_S@X-6sF?nLJP3!4uMpYQDO1yS=i1mAc}W>HWGx`e>Ma;WWLJ=Be9ZLc5vM zUt^N~5|d*Gw#$Es$xCh8&M?=kbqDoow^A0tpZQ?hwkZ>yAXn300fz+_kePW!sVCfA zu4cmR<SLs297~GQn~>S*Ad6WG!m*>W8hp?V#jIuF2*YVEQl5w71K750dJ`^z?zL^x zNVuF_HbM&hD4_}=vm^6*7wj*Tl@M;DS`B{&JRrEhmtodAfl@<O8?eK?8l?y@0+ewQ zP6)5A%Q<b^^do!_uDUjdPB@Z3Ob$H4jx#W|k#Nl!>FT#X;8HWmMOZIa6XAX{i**#? zta7ylyb-o#Wc=Zdz$4sXwmh|k#~(I@Go9(afbHjK#p4eP!r8V>1K~|_^?MBPqu|Ol z!r$+qRo&Dd+tkaT1O3#Aejz_cYq!sBZ`gF$MaudJZ6Zoiq-=!HmZFr36ox_}qcC)` zRBSBUBh(~{jb#Ufb`ix2F|<#03PV#F%K^w9AQc<SAqX8Uij9S#P{=3@4U>xX<y3^u z7RAPLCPL?nVuctAg^Y45vY(QQjpYu6#*1QOxd)+#M6p5)g+fMQ=tHU4Se`@Z6;W&~ zFCjEp6f49~C}b3d>Uga9b@T}ee4|1(mM;<dK@=;*P$*;+h8C+nmi7qEC5nw@c7!^L zVuctAg^a?`T2iq!>WolVQEV*BAk<A1E5uMJWE6(#rD9`Q522o-*jRcXw1p^Eh@nu( zC=9i_BNb1~1O@u3kd37;LOY9Mg%}EjjKW*tg;KG;oPf|^QEV)yAT&f2E5uMJWR!<y z$=mQEZ2Cl1>`R1l<Xk!FY}iOv3HR@vbssn32<1))K2u$IJOsayuyv0VJ|m<z+3WCZ z(0%rN<f)7B`MGmf`dD$pk;TbV>e*0@g*${Nj~cS3fx-eGW6bT^%-x2#jUH5*e?YG| zkBnCQvoOZGvc}w-kZI}kN7?jWM`@OA+r}T$QSAfRwrvu^4?5=KNVDdiFNb4cQ`hH! z&&)4Yao804OxmStlzmVun>{gYy4ZwQp;$&E9;E@)6NWMMBb;G@ymYL+KVp1y&cmtn zDUS1hl(Zvl+x!>w<vDDE#qcV;ZJSDQGm!F;_RGJI(ghdFO1e0$c7I%%$LV4%mvD_7 zq-&*IoKz&MNa62u{Sm*{H9ac`&pkeW6&pEW=0a$GQS2007@?&_sjLmSfm}&(IGrr3 zO!mggvUx6n&>FDWfj~^#woQGp*a*;XlyXA2)d^MS{vg<oE6e8oG(xY4Qu!3{E4gg$ z&s$cR?C+IjbAJJ$k6^R86VpcK-WL<xLld>}kg|&?WwL1_Z_+G>LwQ5kbVCuYjyI;# z4Mli_Tup>`!<F9sjy;k;Oct-1ux_DzJ=?ZvB5ancc`v{P7tUENYW!jAMVZ=6_(`W$ zJpQoK;^Gl@UxKbC!h_&yDZw8$>r7sAGvM*TmB+&0T`|g@u#rn{C4|-x#TIN;gw_?s zb|yoikWuDdBp=r*ux;BI<;BHv%6qWs8i%>$XaF|N@!C8I;i4z<+G;9h4F>yCWm)YS zC>J0*6zWSzo4#{dtj(-YyKj*)9KzRYczym3_<&p{e3fNY$bLjwm13=t2;BvnUDw34 zk<0IarE{SdVbi4{oFbRKO~$O}MJW?5y-Y3`*^=)e^s^`l;jGIut6{ela=7%0a^)cW z&8&&ta$oF$uJ>|zY**OyUBe)dqwNveK@{7TO{QWS?82_O+GVhj&HY!*?h?(?p21(h zR6c=CRS3Ix&kLk8=)Fn~&xVam>W7tc%52KAS8Zbux}!R!3$D3UbnRJdNLfjgGTF3| z{k9I+8!M}nk2n1N^r|_2A2w|T;kR-%th-vy8nAk9(^ec0_)2gE)g1i-ff<mU?$Z4L zj|{G2Rt2Hm{~1bsQRN|IKUZDl1B8ANrJ<<uwNY$krWnO~Tmxk<bnyUn(^R;K+i5Xv zETn8DN||ih$S(Oa*gGoAYG1ZS-kDor(_KP%`<i(u-4d^_mBU|PBNxmeVE;8_6?=X- zLdS?=^E|;+>^+T>jAD~o9mCvM!!;GB*!BIv+L-@3>_gHPu(BRqO>YDCTwksnguf~D z3kBPh31^db1L2&(6(n-BAVS-SVz=`3jAC1#l;N60gHNJrR;X>1o>n`V1lMGZ*xKw_ zHmNO4*p|EoN@Of|teZD>9Bkz6yL}MaUliN4!w?!Hip^kzQB36;qu3;Cpqz$94U20H z@3lcb>78KHOP+9p9(gFez7O3fhf`o9m;7NH=9H6RBi%b1p~0fqt~t(BtTls7#ai<q zMm`BPeR+}(F8u8jYt8jNbNc<TX=@1Q*enmF!mDqd!=bQ|T8nI&Q<jB|bZ^Pur!ad{ zP_qX#;w`0IPgu8QUNrU`w<hR+Qku1JV}w{Cefdh|?UiM><82TMl-~I$!ru(-DivFs zz6dpoVw+%Rgo29A;8d*91zIaR_nl%Jat5?<LD+N?5FR6!Wz|6Gf$X5t9Ga9PQm$2@ zX`z&m9aL<m*FagdS3agKVbeYk&bw6}O1JfSfVTx#aZ=10C?V@!e}u|XX>wuPHOvaa zP4Br-aX5#760&Ts9bpvPYc){5u(8;7tbwxT*7*cBgH4x#@Itw)p@$<h70T_P+$R;A zBp)32)&pchxb{g^-%dCP>=Tq#8UlE+T=iE1-YS=sj|deP^Lk{5;nWk-M&5K_R;X>~ z+8q#nP{Zr<GT`fS*->}5WmU+2M_Kl!!@UT-0Gl1)#I$YO^exW42bN$PEk#23zFc;G z^g(D(QS7?f38A1;BBYHpm03a97IYs7AEw%sQvuJE%dW-)EUQfRP-T^i-8m4Uzrtos zC8mwML%Z2FxlljY^l~GddD}b`xtU)E_Hbo2UJZChaE$|eD7Xm6O1tr1z}dEAxyHEx zPYAB!bSd<bwCzlI6rra?u~t8iP*AZW>jk6OGVg&I9HL2?ic{<sbqgl@fF_*~euWD! z^6nV3#w)8#__$ownr9K3C`yU&CAk`&LD~0J-lk6W$06%PkZ98#Rb0Hc!46ra@8IIw z!0G$Jvq7jMZ0cGZaJk@G4RHP7+8nSHTsr{n8eIDW4hXLE051=&y8#~xu6F=G39i|2 zo_2&yhq@}@dcoBPaOdDU7I08-jRd?QxSj-jF}U6W{3y7-1^hL*X2r^N2rJkLaM|G6 z6mZ+%+6S<Ia2*ABTyUKRcvf&-0ysRlt_Qp^xb6ZRA6$<Ea??dV5I7bM4?D|F`$3?z zTEXJxBjxO{d__uR9~3Dgk$s(1Y%C1XMlOUKklku`6$_DahYA4%Vq}koV2++d(z8;r z;W9)U8Sab7Zng7^g-DsKLI8mnxqd=0N8cc6id1a44ADl0`wOyLU6sW`q_hv$Opy|~ zwu_WSk-daeY`6^3MuxjIvRj=P#X_WXQz7ea<lHH$^hEaNQnBGOL>n3I*2r#kniUI? zlBkdkH*zKxRrW^qep0dFGDI60?m@_Ib<!3Kk#dv@*>EH0by4LkWS=V)8!kh%k>Os1 z>{fSyVj)tlR3RJg$lq5P3(8$mvEedA8yW6+WVgCQ6^Bd8qbg*>ee(BJR>o~&HQhOE zxD3%ohPyVhTix-B!zE=S6|&(*?wduG?UCJADmGk(Xd}aIMs};aaj_67d#aEPH*!xe zs(gm*ucTtbWr#L1+#iuWFP=LiFP>_kFuSW%62fkBHEaO*ZEzid*G3n?Mqa-#YZqnN zi$bS>8+z6Uo}gk+x=lv0WvPKO5h`nIM)m@u2Fmit4k|Y3Z}H->?qt5(kq}-gmu-o; z5b7j~2`_+9P$?18Ms^9ag0OXONeHi`+La!Fo62R&vW#Vw$?l~rv@5LlatLhzo4v#) zrj5MBz8>^Dq?`~o{FQySral4o^UAWhzl6}+qEx;G{828O`>U2!CcBM>V{?BUSzp0s zb0?;a%zbAlo-bt^4=H<zQYJi6uF@GMWbN1&l#pe!I0BTTgK${h9Gzu_Y{Z<*D5;bQ z-;v7}lv!7aQcw7qTz27HhtLb6nDBU`*h%$IP##txYw!bB$c8(8DD$6^UlvQkruP`a z?c{2x2iz^Vii=61#YHI-ZY)>Hg>34}fE}`Mj|&x7Gm5D+fzqtnwo(gYx2*!3PMvTZ z-bhWq)&2$Gfji{&Q`cm`MyyHdIva4}PGYs&Ifs|PrmRl@AKOK&&b#LD8Q7Gy=x(`d zXV}!$b@$wL1Z?UW2iS8DX%Su?T+8g4NB4zI6ORI%5L^=hXV^<xy#QYeF2Y0h7V9Ly zL-vttt$lNNA8cCj^8IqxaR-R?LjN4@bf8@O9hAc<uxa94hvcqxU{lv<z_kxm;zYoP z!{o|A`1}6tbNnc5y3~ZD2IQgi%bxe5a>(od=N#V*8~Ggi;NPcQi7ga%mF>kFje_U% zFcxmaA3#l;5rR4T2BAQ~)(%95+V#nOk@tRPL}<3^luHo0S`;f(17#C@?r<_}q`RB{ zK4loL#%pzf+E{9!@S6TmD%Rb15DFA4#LyQ~v4iPrgnp<_*%fbC9|9YBs*X^2sc)j| z+IE>|*)HpeX*a`0-Ur_TXI(h{tkAEZ%!4~<<a-RH92O{N0bUtgVdLhAS#|#sWi+yB zBMtr;l=*h#bpl5iQG{|KPRmPlYBm$zDVKF?GHQHRz1Cp6nV8C5xT%Dji&1!!c~>`^ zS}1$r_&yOf(k&OZtEU6*X1u#aRDQuNZD!rS>;kKS@+z|5tFBT5Wskq)3;kEv$l1iZ zQ`bXsYUDuffY2hM*o+oLXbDm5$Y3ZGGRp3F%sD`hI|<>egZRP+7iB)$?C-<D9;_@A zu7PqgvO}T1gtU<toXiTf?NjJ8A$*aB*Jm`~O>)`8;W?I7A^Ub^;YJx+aV|pF!e%eJ zh-o9=gPj-6U0h902=9=~PL352T2~ZXn$-{rDkVbNNK=^=gl$3p1mP`JyV3}_lU%k- zH@2)Y*}E&tUIT7|P#@T=sl>FASF#g8pD5*oaQ{=enXRdBg8jL&tf?O&6jVxtw2`JV zD+pUtzlQLys$H2EBV9lvwx)h>S!J>pRhBjN2V~6!O4d|j+DKE60e!HP6T+njS8eL$ zU|+2)oBOp0-6~3D0^k#J+1$riR+;Q)m1T3k0ig$Bv$+$~M&{0E{J#&#FZlHFpK!(_ z=xSUaurav8`H-W^;kn%dHgZ?!htSTV*xYwB6>I8hSdy)@G}a4JHV~zrFl03mmc%ll zgAp1jijA0*BSk3_4wb8PnF-mv27(f@Y&fTZaz+p?F2isuWFubl$UJEq*mTJW_c}Tc zrH{6RhsxD>4B(4$HNOiu|1nDJ0{CNa5zccgS&f99<Z50Ga6`Eoj{#itxHc_+(s2<k zDOZVbl3e`=f0C<_u-);}A{-%CKf)X3YIqRvHMyDzmpmcY%3dKK!5@}|Gra-`H<zoq zH(*7s2EsW`)W`@ImaB1Pz}13lZNMJEMfeZ7nhEDWiSmtvf0C=2@Kw2*2#-BkiG-KS z)kL`4U&(4d2ynqu<RV;4u13Q5<!UDU^B^WR5?&=&zZ(G$Kb5Rz!rSC(B)mti=Fb3E z8k{G#EE|7V1<rKY)&@N3v{pR+Fa*w&NBE#z&4lmB)sOH~xtf<eJr`aJHq|05$<>eW z47gf`%O5TbJi<w5v>GmdXn$tzOdr7sJIG~E3XM1u9vzxzWp|O{pAV19J<Eh+ph)S6 zP@vdxHyD(^S64X`q4Pztvur3rmxyA87`m!Dg`ug8<r-w)C>0ya7=&&U#m2%=C}fl` zkR47`yA8C%$vUe}SW{srs2GLk^q-_+yJ0zmx{G3yUJ0Q!M6p5)g+fNz6WK>d#m2Ia zQEV*zjbeprpl}RBtB>UvgiaR4#&QBegGI5iFcb<Ig`qK0vA$e@&@fSKESDm5l_*w- zp-{*uw<4Q2^YmUUI50l|(qpW665NZdy+yJ2RY*CoI^`3NTojw+mqxJ})Ii}duT>!% z?zspBiWS=Y*t`vVe2KiFa||9#2I&E%so1)A@w~C1o)nsk6h2IxC5owxL+FuzhGNTj z9-az@>FJ=6khhBT?sNlQ9)w{|Yu;LTzSt~0X9Uq4MJR8cm4|+Ujl8$|0|YyUr<J1c zFQCjMify(!gk}@P_5eenkWm=wCKX%Y1rb_86dTK82rVs&6=En9G73XmNX5poDnjdu zVq;kgp$$c`LJWmMMq#Mc6J>FYwnl-n3fWld5$Yp~6=En9G72AMPnU}I<uHT>ieh6q z3ZWB4u|f=mLPi;Z2jww(U~VF8brFuTi*Q==HpO#xS&!a!x<n|~oSiS$1F(^cuqU3w z57nc&owB5y5-5a+ho|>pNAQR1^z>d&*s3SPtS8jpCg^iCtdpMFg#WBmal1yU6)8h8 zkO6p=kUe=5^L0i#qP5S-6FH*T1Ny~~;wzx^PR$oNQ`9Eg#`~f$i$-o*U*k2$FM93K zM9A?(?*h}BcQjtmoCzD*N)gJ2c<s^`Hj*_8?~>f4H&PP9txs#)(&0$fIIy2kmR+JX zP$nQd6zWSz8+oUdS)q2{;tqNS!mnz0eLe&HS}yxcV4`JJ$eyAs`%K_Pgg%DNwjnWX z<TC;8k~g(93E=_f=JSbcyI;Uw^!%I>+w<L!zK&$<8D=YlXd_Rn&w=uKb(J#qN0atR zLioL0c24er(BY!k)~SJVFtS6TzJ#=qt;4KP+qTZp5I#l2>vJ*SFu82&9A{Y-vaeE> zZJiSkx&Ss?O=8-})@gHkeqGK1o4#vFI8rV<)D}W$IZ<qBIwKTRN`$nLrZOuC+k&nL z;k8t|(hG1qxsu{l+}*OuWS5myE@rKY(B`mNQ;BIK@BZHg`n^(42>YH<^&ETz>{pa! zbFYE&0<uG)zJ#=qzB4P-w$1zog#V%8_4ygFohD_Q`EARpklkKcwwd2W)(<R@_MMnE zvYC03b;pU8Zf3$^ay8rvxYUJJk49!~7P5+4V{L@46s4JvHoe!eR?iDq%dVyMArNZW z=H19Bwliv=^nyxRBeuswr`TAwGZh<44U`I0cCJ1ar`TBfnTn022FmVGIiUJjoML17 zi>cUHYM>kpm1C-p#VIzH!%fA;QUm2@sC3ZYwL_kia49t{hpVbVSC?h&0Ko$#Y!4MR zP<AzyWNy?9!?D)vWm%>9EX%qzZCU$Rt%eWa3L~^@@CZ;&fsH)5ImPBV&{S+vHBe52 z%0<=3;uIUpS*BuRsey7CRIaZ+7N^))t~3=JOAVA8pmI<3u{g!Xa;vG>SZbi`jN9lw zx}7G3>z-NlVdD_6Pf}LtY`{z9s=o^GcDZbX5uxI(atyM=aOw$ZBabA^3bpO4qvIg_ zu!h&?6~M`I*(1r{EvrKId&;U5CvhJ_FTrMyg2c3u-)pilmS8(AMMC(YT=q<`3qpH~ zVtwBap~FR~oCbK7T(;#7w5&4O=PAn`gAYb%5NtMgV%o@K@P0U0PtvU*A$;s2J`Xjv zyEunS!bV;{b^?2)kX2lsr4U+96r1}BreaO~31jGR35S;uc9*N+Ai!&a>!nNcgbtT6 z(a!aVP;n9qKyYyh+awl6sEa5z35LRmt5Vh(mJcCa(EOxmHKJos;Ve~ZY!z*R3t`sX zU?WR+9ztx;R49GaJ1bO!%DThy(QN{oKKtj6@b~xFzB3Ntv6v8EE|*=4^B}Z@DE2_J z5JEwvL`WMs;FuMJeVrh@vT9d02HadOo9A+tRVI6DW!Xi(JVG17W*0dzZR8>!1Nt~A z+jvO1U6eA}w2>Ec_k;bMvaCJ-1m($~Lin;=HsTtDxzBb8`;Bmg;rX6R-ykNO{fgX` zzK{F)QT(AJoat62oa?GqJpOPboT=W;fKx`b;^i>>ee|##57Iaqe;ARwD4AY{4_=+S z-i3`^nG_lU!IVOHja+unorqAN*ah=fP^cDp#+`F`o0dOaU?Y^X5MuMv@8UdjWuCPu z<{O#RRp|Q7>VCgGC;WY_QEZYsq0oV_kwP5Hr0SHDFwFBbT-%B@P#&<wwL@%6?3=Ka zY)y7CicNY&Y?V!_Z<)ohF}uP>j^P?8ujA7EI9#HHqt0sEvQUwRPXT)#QEZa`1ZBpc zLO8!%3E|>$+3Cbufnvj{L8S`{bXTEDPrxnYvR%{FvdUy{qb$1xtbkAt*z6WSOdGic z{D8IYcujr@W#<{-*lX$PNBE#zCBn_GBddvUlwAD?@0F{Gu)}C3_B#;p?BKc%@Uh^^ z>EUk<eI5<HOn9wa&4jPY)j)VPW|MtDcl2oda2ZD0;^YsUMtYDDe&3qMALhNDb7~-b zUals>_L@_J&%D`ZZr5^W%!Lz4ucz}d91bsaxwbu<?F*q}LvuoZbHp0EY3ZA<1njIu zZJr6UoJ+H{W2}s<AY_-+ttM<Eu7NVnRBSBUV&oOgz^=j?DEnB?tq?ax=!?y$hSt?U zIR=eCulfQoL>u`y_slW*qF)FbxdYTd+52y~%5ku%3gLV=<e~IJB3$z3+?8H%qmJPZ z8^alSa<~Z+UrEYZ+T+GtavRvlzqN}{&PL5^RNEdd+T4^2&kh^u4?`VAvEebacy-Dt z2whyAatjXn`*cr8W;;8-zb*(H86L9&#qJ~zL-274?~u<r{Jk&=EEfv(2RtUY0zXI0 z3KXlo60%p7iq$^gmR#*b*mRPFPv4q{BD;o^5z1;P4(}9%0>uu6(~V+J4y0V6LPlYM z2Sl;4j6x_-Y%HUVVueV#Plb%a0`G`oW0`<Zpx9WRFp3o-<t-I5%Et(OU!AfFR=5{z zWTn?OiVb%Iqu5w#pl}S8>SNg!p+K>*G#JIkQUiqrcCS8`MuY;z#<G)9Y%DcUSm5C5 zW7!*_K(VpxZxkC#4HOnQzWP`OAQUJzmZObgW2u31^=<iyb2n^ya1kzlrw*<S0S5+G z@t`{Y_T2LvY~<xs;~hDrKWuuPd;{33R#Diql0`9$kY(N3$!e84Tb4EKIAom}Mpzt< zQ>^yMrecL^pqvAh;nm0D6dTJ0reb5MfpQg8{#Jb~PO-6EYbrLD8YnkI<?iZZaf*#) ztf|;oYM_jV%45~X;uIUpL#AS5se$qoR9>z=7N^))o;MX6OAVCQpz?n8u{g!X@|LOC zSZbhr1Qi}Nk-M`~Y%HIfijAcP%CUHYJXKGU31OFW_%@Wi0zC)ptCVH6hZ&`B@!+}! zlv||I=V8Fd<?3C`8f{q>vY%0weYW{GgdTv+-uEG<jl4s@B6_f<dXW%5Etj=tLxk!@ zvG#0j6l+fc%8pX$a}eMFxvV{XEUQBH(aN&+?10b#uvvSEX(R1<3G}z5oDd#0wCe8p z2<)GgW$pRiDAt~~C@{MU^;sOSi(J;887-?qc2{Ltd)gzkC~VdqV%kW1P6Yi7DJO)> zom;g%=YxHXvaCHLjAHE>4a!)l^mz>MX}PRDH(FMO?1{><_S}rn1lX)S#I%w2bVm<1 zP%jd~7v-||inc_kB8pvq^#}!(5+QBm!%AiaVe5M%g!fSG$`ODA<+77{N6RXceWJ3; z#dB_Fgbstvno3L?d8hi6ak<dNu<7G7;mUXAq4a)p4PcME<(lE194-%=vbF)dGPnl* zJ!j2yZ*Ei8Fu+dZ<;p?$o7xKpp%Bc`%m~dbiuG|0gys{)7Koux$SC#5?k^R4DNo7{ zqS#orM<`INPz@AjPh~94D6~iQvFwV_KBCxI7z%}qauTx7k&5-jDb|-$O~ne;KzR>) z{wrM`3E}DI@!+(R;a9Nd6s4)S%i1FpR7!-jk&}U0LD(iWFN7CU?MipRHRQ5x&2L#{ zve#9XoeT>iv=VG~G7!^7PKHZBzedUlVbAlcHuYApA5fMx^=^cMN{Ns*(o|*zVQcCH z2tTLVmG=NYlFOR<xMh{e{#;qs)F%;o8#ZeyF>R!&z0tX5bub~EBA4ydzaVskDAv@2 z5DF?KLfS}EnH7YssmDNgkZM;h0UR!uHT8JQDwBP+vaG2mB6J~a)>LBJNK<#bFTZXN zflcpWgkA5?L+O2I6ySv5DqikeJdk^uVN)T(Lms41<3PZ99+B&Oz?&YG>jS`7AD8PV zz(b#u>!@dPSb0vafzRjgKG^hqsF4$M*Uhkzx27gw$j@l#_A$%<C}|fXA6nJWm+n~d zO|%Q_0^AOv#z0vHTVOTqil)OJ%UAM5*!0uFRj@1mq>a)v_=%i#0c^_J3VWuaz0<VO zvpK65Y~+*2x`%Sg0<h`#rE*93J3{$8YD`is%eowbH%r*={t?O#5S-_!yncFBhJoa0 zy@zwV9c*O85lT-8_LZ=Wcmf39l&~#fgmN4NFOaZhwa4l%5>~l5sR~wmpRnph%Dh<p zWx_5fQue`aI5zBxBIP!O9udVpCLM>+y`tFReZQ&LU12$_WDji->&u!(v2UwS#Hlw~ zr=O|(@<Kkxd0xzIdL$Dr@Dg1OjW6f0?<;a`^jZ#gg-!R`vajc^zrseg-^>@}Pd4+x zrsW9#CYSB4&IolE#pcl!p`cPCq>bF4nH7X>C02*<hN@lZ4ftodY>C<TNe+%Ch_O zx(ICto86y@X(RXNdq96o$_e3a7gl|ed;{$Flx1`O2SVS7QkfZob4b|c{;6e^$(~nP zHuukwH6tk5+=*!;b3YjL<D{GrE^<-Txt|X9CCai5buL0dr9?;@*-*?1!q(Jb5WY^e zEB652FPAlSgk_b<o}esi>eUF1gUy;sOdDzH^61=J>R>|nj9hk=ZiP^9QEcwpBeat! zm4g8fm&@kf*RslFAEPXrdm}>qVY9gt(?;e#8T3!2oDlx?;;I{J3fMD?VjHS0LP4cO zNE_Ku%nHKR)Y&1tfNEEk2V7Y$YwFyVRVI6NWm!|_MQB;rtf|Dbk*1yp`jt|)@sM)4 zC}px~Bkx(>0`_=iC4@&@QgyYS0Q)Cp*=mvUW}py;EPKC}S%Fej_#Z(yziWoSUqXll zBin+ZucTsQ`3|Abhu(y=k^dNjSz!hy+y;%EO%1Lr2DqeLw!Sl1R+;Q&m1X;FCWID- z&Gs8HZDhZl4Ei}zP6$`JwCc9F9PBa5veg@jP*5om(neN`SwYw?;+r6Rw`y0O2An9D zHT5>jDw91)S=Q9C2t5ItHI<k)($w|Qxh>Vfgz#;-?5>a?w5urA)P4vBl@cLsq^Zmb z!q(J1A$*W(S55{TESEKPAImC}Jw#d7)cp`T0XAzYF>R!&UxNOtloP@WFRQv!XG3UV zQLL#Q5DF?KLfS}EnH7YsshuF)RkbVY18yXjHFZhLDwDmLvaG3H5LyQ|Ybr5qq^YAo zzg5Z!;dYl-ZR&WipH`MN^$~=EN{Ns*(o|*zVQcF15Pn0oD_;VBCzmz#CCe(4{gbk+ zsgn@;3^r>jF>R!&P3YWT)WL*s#$i>PIuPuWm1T236`^xQsf+>~Etk#x49hB$eUq|m z?n4l|3O1WNF>Pe-9WlX9nrK2eRxaBu%ObRnC^q*RD61no6zWSz8`*Qr3bpMc=?x&f zg@)H>2f!WWvb+CAmQ^8pH)YvJ(mfHXz-E0Xrj0z_-3$5?Qcei>7+!VHy$tpT%Ce<- z6QQ6|BBYHpm03a97W88Xf2Z1&SuxVNG-BJ#pIcU$?2gK^&HN>@+Jllcm6$fNnGXg1 zSScrj3tz#eTE_-~eX+7^?ln-(Lv|?CmykBncV>m!wwW)7@U<FVpSuC?lgl>qm6lZ@ z`(b6-X1)rcJ7KfF6VpaE^O9)p%4%{#_=sHg{IniIy+pC4>4{KKDG|~}n#!yoYzw+A zg!`y=Wgo!)a@l6?ZCPcq4^@_J<}yNi!DdY*rj2aomq33@$_e37S61E3AA$X|vTW`( zP`*cYDAbpbHqv)yh1#~6+hXLiYX*H52kau3ZRQy*t3q~HW!YwKkI<s9S>K6iBb)g| z(9e)^Lb%+Bs(n8n>}!-|eIH>IYtLv<#!98nV}MV~W$n4qvMOXxRF<{pW`ridX6+%S zjkKpbda!|dkr2KpmtE^yB2*E@uJw9^f=Y>yHnQiK6@;ztjS${LwJS#e4wTET^&Ks% zO!kS&vTJ>3gbstvno3L?xz^tU{VORagr{G{J!eh*73?`hv8J|1D5#VOX(LT#RuHzP z&I{qiRJ+n0a1FVvsq<S_ne26yWldcWp_O2>rV`UentBQ7*GM@b?0I$7rrr(q1In_w zPeAB7Q7Z2Nek7O8{c+1Gll{4}Z0=7Y^fqiZcVgPe-2d@r{-)cHu<55!gxkHFhaz7E zVAl7_DihB17PIVw*EtZHUz8FdZTflH!YJEa<*lz|FE62n`vGawd4zWpbJQ7>kX2d( zu0Khrv?XBg;OYmsdvNs!JR-PG0z4zQE(E+HxJCos7F-hnUk|RI0cU!f%`7bq*e$rW z0o*>g4gowSxGn{}I=CJLd@{H`0sJ<&=6feE-U&8+tF$ZNs=>7Z;AX*957;-jb_3im zxK0N=FSu?6yfe5S1bj5OCIU_hu6F_d5nSH@{t#R<Vn@vycGi4=+;ow*gYUswgq>v{ zcu(*ZEN(tho(YRwq(t^Xk@6n0Kaz@#g(2F=h44ADTkWo5AyTHOkX?k4Jz7+m6Pu}n zHkA#RA==1r7esceonI_ON@o?a;YO~XqRN`cUQa4ET!v^P!|j3WR##=Q5Gh-#kPSC- zZ5LIVkiCmkY`6^3Muxj5vRj=P#X_X?S0Nj2<lHH$oQ&+jQnBGOL>n3I5M;MH&5DIc zxln~{xREols4@oGH%rBa%Mfj3xMPvs>ZC0eB4xY^*>EH0by4L7WWOR68!kh%k>O58 zcB{KUu@EUAs*nvgaxW>W{DSN{oz6B~hG-+hof+A!?oh=-q|Bp2Hr&X4uBdV-vX7LC z4VNL>$Z(HEcB?yHu@EVPRLF)Kxo;L#E<^T}QnBGOL>n3IC}g*~8y5?aa-#~_a3lBh zqRRHT3Gb`>azc2NTn*;~9`He)pFS$S19;+xauu~tMAje)HMM&$C(Q+$eyQ;?!0Upm zDD)l#z6(OXPqD9~UHg8XG!{1U{jf1cu_xJ^jbd%DfwBs^*Do}*IHUCux<VBD%5M!6 zu2@j9m!Ew<%1iGDn{G$K1wPJ0>DOu-0Jr}{t``8m4X)xO4us}W(zZ!B#d?02saVfz zpd1U8Q>%}~DK?gqOvT1h1LX{;Tu^;1PO-6^V=6Y58Yq`Q<?8BVaf*#)xT)A!YM{)3 zT^2T;ZC7r@1H#@c?z$#~7SqOT<hJb-T!c+>HTjOV!+U3Fhw|2nJ&a<lsDW|^RGx*6 zeE*viPA;Vk!DMcm+N7+f?ZFNWvo{cGpmc>w7>>=mH{R1})_XhFJyLcMrA#($<Q>mF zz&=b_rQ-lk3$EfuiDVTi7a;pmsn}b)-(ub~f0`$!2Pok#ay9G*cvNr|YcXq?>Xf+= z3c^h;Z0p+*S&K^8+P)A%okg+5V<-&ID90lERH-Dx0j~?L;=HFV>oTm!by^vl6e%M` zDU(eb*-JNreV4Lqp0{8!4~0n)cK(dJpkXP%wSucSb!NRIA-nRPL?{S1xv(wyv&fnx zVe8I|2)!YS&6A-pJfp0K$!)4hCXIl*2Ul_4)0V{*c|<Fd5biRv>bu1g!G1?s)~(kN z3MwT++Q?h*%nHKRoev=Vm1<XJ!boS+h;3y)wyZMQb1Tc<hW->;b)aN#Lle_R-iF=} zt28#O7U2?K<m;CHn!zChi%ZD7LCPx=j+d+X-p}*A`(e|6@k2-(c@U@e5DC>2wi?p~ zRmXI^@_G}t${S&M95{=lZ6a)y=k=I(BW9PioR~9D@5&PqrdCEP{uzoPU#y{*2$_~H z!zniOO`yF$Y}+>WDWX&Ckcm(xLGV)v*OFD7Rz&#!hQj&NMxK{W!AvgDj7o%8$Yr;8 zW}P8QiR^2Gt2il!##E<p|34;*HJB^EIxfWY(Soq&mwCy^)w4d>$BWW*58(LVBD`O& z=HetMw2jK!$=M0np_V-|*Ff3VRBS8<;#3=`127?6XjIj+e=yh=Da&SX4njetL`WMs z`<WGlOU3S82H|T|yK)!cc)9HCzrwQ0WIv=VJNri<bO&s9!VuF&&i=W-$_L#AHr-!@ zugldi8SuN{D$bQz>s6<$gwR4?=gBRn8GoRS?B-RF7o@FcYZ}ECqXx>4P?-?}Oq;PP z;QGN;ocXk6%>u#sf^ZMOUcptYHEmhT;qq8Rmx(oylvPA2lT90WP~HIS&6H(rXQ)9G zt4+#wqLj&|jnv)&>|K>*wHfL!iq$4%Us1|r(?)6^4)*cNvf2!tDT>u5Ww0n^vS}l= z&j)*$vaB{kqeZdWq+BCPnQYof?OVaVM_E>zp~pnA+N3-zN||ihNbTpqepOjko1qUy zNeEB4rs^Hy8?a{(#qJP4gA!CqgtU=61hay$jd*6%?4a6}WdK)@%NjVlWtGY9uB>wL z?3fdwrC_r=1Tk&o4skZ<mrFSzT<6-VO}!56JC$Wky&0jPQX-^{G?iIF*qV9|gdb7u z%Bz5H%4JQx&$7y7zo#r~>H`S944XBTm^RYXEzr3{9ZU#6lgplfc0%X?QLL$ZArw?f zgtU>SGAjsMQxAslK-I3C4S2p>*3<!(RVMoqWm!{?K<G@^tf|Dbk*59v`fS&6TPB28 z$z@Gl0HI|>v8FDLP*5om(ngxftRQSnT^_<~sCH!wz-{ERrgpQeGTFVAWliml(5A3i zQ;BIKO}z#5@ls9*cetK?wx&J-_N&UWrcOjCsFVn4BTZ#i5VodHhVVzKUHJvDP9wIa zzGGQsvS(J7HT6AY{Ro>im6$ft)V-m2n3NO3c}7=l>Iq<<tt@NmV1$B7iI6tZRAvQX zYwCFr9<JJzTLABn%bI$TWtGXkM_Ja?OAxvdHft&|ZKSEazs~P?yThhW?}W#GlZVn5 z7smr$7+l30C9{r}P(zWjKSJZ6lD?EVb|8PCjl7gO2zfy|DM}A8iY-PBl;fZ>7&bB% zr`T9dHWeF74U{vXa%uIkIK{>?)KqLNHBc_af{lbtH_7vWuLoCgO{OjDItbn#gx>=E zIJk<nrY&m;92+a^_(+Pvq^uxHnQYp~WB0mXHz><422yqm6hhj_S38+C72$0m7*wqG zo}e6}+6mz*W2&B{$ANvbvg{-!<$^#V3|YO4J!V#*m@rkYm9VLdvEdozc2Mq<O67UL zm*ui8FwU~dWWTPga&c03BlHYxb{-ScM$Y5)(f|Fm4mKWAdWupeY?Q0Cy9wEqzd0x& z%VtpqW&0ppoakOw$VPksC}X5zl;aROvpVJLZ}QTsf1BI%6e7ItyWAE1#D#ftE3Ztr zfn1GSL1J6j^xqH=(nf9v)LuYB^@Od)<ez{rZx-eCCTx{AY+$k395{=lJBYAVp4VgE z`j}m|8;Lpd^fRU%5vEo~EB;voLtautFA*{=`iaZk;D4?>`^05}QR<7;onoh3gt8mv zb+{I{maOShdm2>OBHGCB`|F6AETtKh2v?HJ4nSrtBua_wHG-=+VuseKPT?i8y(re; z>k+zNl!UO?_j$?m3v;IcUL9N?0PgU!Se<{#;eN1b;w-=Bt`%WZ*LHwk2iGob^4r_v zuqo>^z!}@}&ev~cz#D^W^bC3QPS`XtuNVG)6%z}yY1$b>=d99C*T%rbSw%i@qtJ)y zl!W$ETkIA&ZCL|tgr(<fgm&lPd@j>)tQ)5xG*lEj^Up%)LQ$*`L!ppS?m_l_)m7N* zc2n}ziY(s8$o^U?Hry`|nj(sgg`rT$C`}l{VH%6AWQ1~PyL|f{4x8>8!Xa|mCHKJ( z`Fz{`Sbg50d<~o4RKt$W(H96!5yd9OP$*=S<1vQ6Yb^GOCn@KMV#oi=KjmZE9X7rH z5zahg-lFv8Gwi719R7dFYs9>6)BKu?Q#lo9-W59gjKZ^U@o?}JRpvlwK2dDl=S65? zQEX8e3WbcqLwKN6?5Jo!Xa`YjEER-y6vYZLv|DuwLsJ>cUdZk*6&uTb2puYljfJ65 z$S9p~+gU+(BBQ*5+s{Y34H>2P-||i02%BEMgx|_#2h45=9VUtiA83@m#VvFsC?`v$ z&xL@O$z_iq11+mU_La)26l)!a(0Q=ggDEj><aPKjpwE0m-lnuYgjdLA?U@Imr9`pz zbTW#yXIW5Il}evY0ei`1?ODOHDr9e`ENjn72yG0TwTGBC(w=KUzeUOk;kGxjW7eL# z!G20v)}BX=V(objl-H%w=L^7Z<+Ap?Xjv7qe^i#W=VgRGh0WSSOdDwr?<kAo&XVpP z!ms6OCVX}#-G7cfnm<f}GfgGDbCy;-{;=4rY<F`Xz|-ew#VcM9o1p%Y8iy^@_6Qv+ zN+V&&vPTAH_13@}ufl*i*7TL}&a>rXJ03Rj5AOR|d8_pzD4%GAM(K-TuzBf|+u)h= z+P}g^YVX-TryL3!dEVRCC{}wB6j-r(A&zBeb;|na-Zrr5PAD#B4U_@42F*p4k3b1q z$+pCd*jj;Nla5e+o;~koM{LN*+aQlX_)Tr&#^Ug9gUY?Ikv`Nw*&fHzE;^nP!k^`` z)*Ob=F{0Rsbv#0+i&7Z|c$HkXawl6>ne1zoWpApTg3zU~*>OZn8+mJR_M7r`m>)Ln zAmI&i*_tno&?=(X+*dS;oz`oB(nBhJ8UQPD*=fCwWmU-Trz|_I*F&fTo3)3SHgZ~z z1^q!OCxp#6=bekZkMa!Ila*y1d>NsjQX-^{d_2gkAZ&eq2g0AJcBLIg+Fm2JJ@<iS zmC2r6S+?i?fvjI)v!)W$M)uqpxaNoH+D{1QoRdwpLu3@#>xyERBq^Ut*eEL^JE&L( z?*-*K6-o$qnXBsXPC{siC?>ogI(eiznh?%+3x#dOXM%m6vP}3Qgsu{$G8XV|xopiZ zv#c`N_bJQPd>BHv!e(nuOdDDAE|}mdnrK4!m|QmZ4G`K|6uXc%MJTA02x%i160?G^ zHMIoc9aOurAK*c9SyRiFRVI6YvaG4wBlH*8tf|Dbk)}=p{e3AXgvZ@lbwho{BBEGR ze*`6{ln7}fO=VU)30qTVLTDaQDqR4(%4JQR)w0TDcT<)%b#{b0!)8q-rj0ap2<Vqe z*~UZ4g`$+nrj6W79+*2{l2>5UTP@)g^JujQPn$P)W#4Bwnm-JMGfgG@%Y3bP{NYJB z(|gmb^XKtDE!2uve2)4VLz-RsjoU+llIat1hXrzp)nFqJ$rS3M2{jUSmCKIy84wB- z+mY=-p<3j5@gz_#u3m_gCjy1=Te#AGKYbK`m{I*Gu{GayR3D!{ia%_oem4=aSuJ|} zA#|=`Jv6bunrUs}Xs0rv`!VX*G$Fg>I${poFzM@-^)ZJVU?U5;WQTm3-C-lIc9u1Y z&0r!Z?@7fT;W?H~tB>UqgnkjluE-iFU2Q|#?dB3t!sTQ8@HV5^q$89u3+CN?5H_-V zkHB?$Hf&@~_CR)jsaPLspp3aSAImt{^eiDvZp%ZFN7|>renDBb(Iz4Et|*o70e_au zM*O;EmC0_W;n>+e8Cl=JW@kGwZRBj{A(-GWOy^GchFlGVofc+0`Vsy~t|r1Jxf%%X zkgFfzE{jmBiEztB>FP)LtXvI*-4+vz@EN(92xsgh7U3wlnh5WbtKUSxZ{)IlJST>{ zxQ1>Q@8cNn%Nn<>Zw-_$kiCTFWrdDG=<Mp01T)!7GcuLgm&m&`KWw`E#XDgQlwGkc z`)hk9gtOhwWw5j5B(P6YmR&$Y5V}~D${4_#<+2eEwX8DPW0hqW(0K@52b*0$#I%tM zXkkonSxqz{950v6eKmwO7RAoh^$-dwB|_TB6DPBRur+lv2-mB2Wmmwx<g%vrvaB-M z`zgzsx-~*O!DdY*rj0c9Y0zJjazc36*s2@q3$VXemd*VqgxX7`vM}J{a@pM5AQZC7 zWOq@P&AlB$3&3V`C#H?e{RUi$4~I*VaQn`jdjsLUay1gZAy)%oyCs>}O!(STbTtyb zDOUsG_%1mseP$bV1b^tXv{DH#maB=d&oW{WzA0BT;hoEhMR>1VCBnw#$Z95ht}9)Q zgbOX7yIKazAMRN}Ji_%>q^pVWsg>xmBXV!F;9%Iu5m^J}6l6ak6}#YjpojJ9rG11u z8I$=!lQK#ZCbzF9X&1ru-SWxa1{;}C4V06yt<TXFkPxnP2fJwp-$<~>D9eU-6GC^3 zQh6G1qFi>3-ey^4vL`9auF<gwJpr3tqr|k4Yjk}~a7#@zA$(gdn|nWmb`{0uz9&Kl ziBdTkaIjo9_kAp@O!g3E+1&R-=mgko?!>f_xqk`zuToA3FTAtry3dBt!lKyz?|@KH zDG|~}Zg|WJ!q(JI5bmnlmGuEPlFOR9q-B-K-b`86)Gi3E1DiFKm^RYXQJ~){<%Dp% zaaEf-9_*);Wlenqp`cPCq>VI{SwYyE`aFc+Q0>Z>fZxewO?}C-%4GkfENki{gg%4K zno3L?X=)QX_ZM|AA)N89s!cr%?30ycO&y3(P$?18Mw-g3AZ$%N6~gDLc4ZXcXt}JZ zXINI5?3<KjO&x;JRj^r8iD@HE?TF5GRtFQpadO$ww+2G%i(+%{fzVc>RGI*Hk;~@3 ziDi|^-cwmN_stO60XCaEF>Pe-kAnW9loP`KcURp|Z-f1%vTQ?rgiuf^5z<CB6tjY` zHT7H8)bJ`D0T+_Xn)-ufmC5d;ENkjd$eIU~tf|Dbk)|FC`sq?m2$#L5YEy@UJxW<N z_v;b5U6jhBfKSO~bHBl|%49#UESvjH2t5p&&7GJwGWRtx!Je9ELimkbb}?;-P+w7+ z2oICXJ|$*Wpx8DfWjCo9g@yJL#R?sWP?$k)LfXhbxnforo(Ufb;geOnasl9_a@m3o zw5&4OS18LC^f-jhh0PX}m^QMYZT_C`*g0U+M{B~7a@m4*Mrb)vY%{Nj&|0EYdI4@H zm(9JqWtGV;E6e7-DngsXW^*T|jm-Tv&>xU;LU`=GypZkX)iYp!s4Uxa{{-c=phEbm zTnXWKa#^2QD^R9oI4l(AT_U87yraylP}_$06GlF>8d_Nda0$6=8?;3zWR=NYT3NOY z>JVBGHrocow2^Ia8t4~FIU!taJhy>e0#|{3i?XcmqY(-!B|_TBO_Etb*qS;P!uP9o z<psc3<g%vTWm#piCo9XEdJjU+!DdY*rj0apV{~q7bub}Z_&zq(I+lRFo3cs=0v;__ z{Yil5%Viyk2o>KZJ_FfdIQ4|Ik=0>VsBQli;bI7n)bRR@1H4x*yH{LpSrxJ$QkH!u z>I#I$!e*;OOxw1NeQj$=EWyfJiiGeHxope#M5vc2*7t1@>LW^JAHe={+0N{3S!J>h zRhI3{GD3U7W^*T|jqJ>qKz~=tHXc&m6s1fyZRE=VpMd?dvP$jm&$s%#u#v}zNLF#D zc0%@2QnB6B1))_$NeCa4%NBG4gtivNuE<Rh3MwT++Q?PHtRQSVr3B#}RJ*bt;6ZZP z%9JguO!fd}*-qIWp})XpJB64wvQs93{=SqG!s8y`8D>rWibX`Rrv3;@P$?18Mw-g3 zb`rLx&V<lBqExy7c9qMTI;&-s$?m2sYwGL>b%xEFN=zGR>JZQ`m2yJ3)`L}>dJWiP zm1Rx65uu<`BBYHpm03a9ntB(6A6D(kB)~W1vZmf^S!J@{QI<9JK7?L`&6-L~8)@oh z=v;$3m=Jy<m+jPMg!U7~nz{!<L8U}U8)+)Dg0MC9KnNeL+La-I=gMVGJ=C(wWM8B# zYw7@mPKV8!N=zGR>QA80@({OWLU^TI*3|hB>LQ9Ybuom3N{Ns*(o|*zVQcDg5ME8S zE1LmsC6_gIMawFaT~d}cwHrb`VY8+Z(?*(l6X<`JazfbWVfNXY`WV=glx0nQ4xyk@ zBBYHpm03a9n)*6~KUD3?PlOt=HT5maDz^oDCS_Su-$B+C*sQ6<w2`Ln3B^OCoDj}6 zp=wi)1AB<Ftf_+#3MwT++DKEG6@;y+Lm_;*YFBOoyj?D9>IIfnCi^aBSyL}U=x?xD zQ;BIKP3?rvt)LDjgb&JPJ9R^ZHWS6>-V32bl**of`^sf=-`29qWFM$3n|leN-C(o1 z6VpcKe!wdEt~n7leOHL^$W^(a8czot9bCmn*PkG;YIRCmgk}@P=01~Atf@6nx<e(5 z#R`27%IvFgk_q8May7pN`10yxHGc#++Zu8eTQM40t%Qn{8$r24wQPj9A#{%@)(VC~ zA)`Eo?B}bitb`erG)ep9o|N@OvDd<9AT&f2o6+;wny+gYCxq8O!fx8h^gh_%DXTOC z*mEhXegVL)a#<^uFp5oLB~aFpN}p{2d&^}n$yTwf3fUE9*$evB5$Xk-U9iNokr(v0 zfPRmZ6T;ITt=hzg!G2L$rFQ^7ldJwaz*!_@O>BcupjZ><0A(Sm^jQgTRk^H*^H^4e z?6s9;P3(x!@~~MGiD@HEJP#M|XkEk!;iGaj)UBEKb1m5Pi@*m1ZnQRA-7o=gxpm|! zUhNU>BIQPuy+h^g^0^J6dqlC-VJJ+(D9<80Ov>K(?qc&c$|s=w7+O=D(HBNZPG2i; z(V4K3uT6hzSvG?jC<9U8WGz$k%vheVOm;_SRv4a9A~U!MwP+)gqF|ud_jeD$NW+M& z=R>i_FVp3a5bpCB_nsY}Bf-91S)~U6pOUNoMZgc`vbINric3Bj*<m>KgtU=|NM?oF zcBFg);VBwkpE)q)c{O!AQogXP3fT)P%Z`+<ku@tQ*^xp_8#z)A2K_iGCxnYU&egH~ zbS~JJD9idj458~psoVp2zg%`$jIgXS*%Opy50O_RG!8bKJ27qKA#!<4a4k(VA$&$I zn|n`$dW&M4cPoT~N{Ns*vZ0t2gsrLDLwG0Et{e<_xLnrMzLr%c`xs?eQyUTL51TcW zm^RYX$)JBCWg8DEABs{Yn>O<9^*3PuqAY6<L$f`>ools8X)j8dY}!ce4qz{;EUV2> zS5d4sDNBn|CYv@=dlj(PRhHFeXme4lHYq(tDU(ebsa*kkH)WYHDLaW$CYv@Qyf4^? zD$6Ft&<UbgZBhn`QYM==QhPAiLzQK<85%B%)h6XqQOab~Mrz*#_TQCd!laB7rA#($ zMEGg2UsIL|lk&1CWwL1_!ta9psj{qF4E-pI)h6XTQOab~MrzOgWPTkl1RMEUH7WCn zQYM==BD_4<Ybnb{Ov-Aal*y)z2yX~>y|S!Zq--51gnyRHhQq9>2sa{ouj(qK>?TT? zY}&}A`h$IfvTRbM91|#ngXFSFF>5NqXCV9H>MEq1FG`tg+Q_7?1p8KH*`!FhAy5d% z$z_vb)>MS=MfMZbRY-Y6lrq`0kx5Mi`*mg6q!{{06q^Al?~76<n>JGWC$MLEs_M;` zlo>@SlT8~D?f`aIW!a>rFJ=Dfg}T^SdUuCwO=Xn{*OsgIMu4=D=f8gI=8YQ!8#(Pr z*;f>MY$GM8*vk^9*lUoTP~dpj?BS0%D3=J&Xhkc&x{9O~DVw1=CG{&I93Ypy_9UfW zpzH;BKyVdnl@aPAN<x91<Z7V6RLY+M_Ib*(3+YOPt`8K#f5_GF1>lt6Dh~Qrgl2wP z*B0SIa#@2&=~$gI2SP!`uC4B%tSgm-a9g>oHYuA`r)-E&P_f#~?pIx9dxUlt#Z;KR zzbH1`!w@=26kE)*5qkLdDHn=TCcH(i(mf_*Bfb=rkY(5TwV;d+!o^)P-U`{ICV=v` zR1(6Ep5b0=`~h&jXXPr^qR^`nswZ4iLKVWx<!W$kTbvJ|*-ly3Fou>8#ilwJLaT{l z2jldm%>Vm^I)Kuy&7mdYFg|O<QZ@y9>w($Zskpr%w-G`YiekrqAB0X6#d@_rLL)@! zNBEFj31QewHYo}PihYhlN*M8f0p%cc@i=v}OxPLMVY+R46fea8rTrUP@+j6MTL9wc zwN7^QOyinxySF+mi>u8`?y2g<|MMu<V6tJ-cBuRjDK}`1Y`6@C8QJ}wl)I*jN)3hn z2$Usp(5<5fk7Pr@O@ga<Q80_t$ZN{($X-(_)^HZsUKG2ow?JsmKsgbRHu8mPX4N2E zAB2mOWN5cQ*&pzT;3{UFjL^l^DMJzZn<%zjZ$s!YQLHr&AoPYPrt%&_KZ;^1Un4Zv zbA0eLmH81`P83t=j?l)U*z@Do2sMdfD!U^zKonCs9-)gxF_l3Gon4)BB|>+IVo!PF z5t<~56`Fw1Gu0_?A@sc{R;bPMdE;k+P2ZCsTtcpfWdT<XuHwd91ED{Ok`QhoSHpII ze-5sqP!mFjh>{TQKasnn=@`HZf~%U){t~Juyil%&F@Q@-sKK>uQyz}2GbLnug&`J* ze3Zsv1d0_R<x&;0bBv*&GJPoax`G8B(pYRejYa4KQS7D1(+GVcioNuB*C_oK!tyMm zW$H(`s$31tfMKIpL#Lu0g!=V1A$vg*5i0J$e;bAE4n4KDJH^)5DK)6{o(-*<TgzZs zzhXV>s#6w4C|rhiL3J{UEpB8>6xZb6Mp+)i4ZF(rxl<Z9LDrVAk#FsIRt>^NSrY|V zFj6Q1g;!PN{puPhBcL))GfKt-J``NVWnvbokw?6nkUdr^cJ8sjL{aQEO3L@5R8{Ht z0&hRo&6kn=lT=ExfjzgfY)3DIP&ZL*c*`QRu_(6bw?wE(6jS*#LI;XsDu*L<yeJ9b zP`PXd(}!{)3XH5?=sJY%u1<Lvp{GSj2;Y*+W-xsy@1wvs)eB8QXto!*i)<|OA=F8f zgm5{z8de5eE4YeR&jtu>C5ml{3PL*t3gN+W*)FMpatgA~l1f7Olw1uj0KOhv#Yvop z(8Z#Zt^^zvTsHvT8eDe+-WObt0)`P-^WOnwp_jNm)-zH*l5m-DCS{f81`I-0>oW+1 zEIV|50_9iLGL;Ti$VR*{C~IhV3E>7WbDoV`1MU%A#l@gdHwo1fo+4L;@C&&bT-!F) zx?q=;Wm9G7Kv8U}J0WzED0WIuU&@}pUuZW_vbX<<!}zQbhu9SC0h`&wRoouq&OzuS zQS5>2I)q*j#d<X!p>IX$N4TK2NkSMllTC_3fntx+q=XUw7f>EVW1mxl%Y+A^!Lhgh z|CiRIcs5P{mMq$80f?6gyM8(ifZM&*X<1a}CD*xn@&7!^kGLYjr0r1oBU0LFjcm9K zg&EoXo|HMKi%JcJ{s@$VG1<YIbaEEpdBIh@D40cR<h9}P$Ua3X)^HYhOcZ;hAmvg~ z%7kO(D%}SdgzWKUI4B{@hBF3~8-s9h-Va(K8}Z|yyf2l6@UuyJ-une`p;zQ8)}qj4 z3Dpy>E1?SEm2x$>wp|S$Lvto&S;H9WB8pA5143(wV$U$sm$LBh7g_+6?0JtkjL#ae ztWCk5_n6(F;`Y3^DMFWuV$Xa15IRK^>(xOBjS{6F;iGaTgkdw;q$m_9_Ap0E81a7r z<uG*dBz3b)xHPWA*z?~1(s~rnrs?03C$T2k0uaBXb+V&p8VA7b-s-e0PK}q`bJdIg z=TSyuvSHG8sQeKrw`h%QxD16E+5MiBd#8&^4Tb&)lx1+xZJ-B_q$l7O!BxB{m_=&j zd2e-OuPYU6I1BU@#jfj}5jt2DdoVc$p_@f96;e(TrA#<XuF|z8WVHr?60&Sk=Yeuz z5H5Cav=y=u-vY{0Qb`D3d{vK#?-9NxSFsj_CP=8Ba7kvjsSpm9tHHJHntC3ZpGw;r z#?b5%wyFMz?8QZ~C!y&}Y4`hue#Mxwr$*v1K5N8WPz)4%YGi0V6}P9xl@K~f6nkpi z6rlq|v0m+f&=67j5#A(MLKrraO^QN+VvmHRgc1K2P@2)jebvn};T*UQV^59$OY2cQ zo2GwDZo`^n3qX9Y*2#{ZX&eBzd#ls3I5l2!<Ej_`&!e1+$%aYWq4GzhT%t9y;W89v zWcPbgMokx$8VdapD0AYVTUrku$qInogR6K^FpJd4Q{$q@UQ#O7a2D7~l!UP1bv*~| z40v>K6^BEiO(axLc$r)k!uAqsaBbT-B?#;-A$v4p=oC@xd^!xFi$$^9{q&_A^ZSL4 z1SNYkA`auTMhvzo*rO4%Z&z`9G`fZ%ErLB7jR)mpQrlRsUPNeisq`c4CRaijHj_<? zLV;q>J*2di@P7g26*TxmtwEV^5c&{%H2Pm!kK)-h{adnXs|6rlUz^j8o@pEaw|lG8 zvN$zfa%)vD{+~yg2a^qxwnOEQNLf&8WW!}B%*gK4q;#1sDm4`PBT!DoWQS|g$w<KK zgR6K^FpJd4qtOM(zDz3Ca29w|6uYiTxmlDl;gfQeUIGk4_V{u;C?U&+^8hFh2jSwp zU$H_q;<rHgSt<$PjFa`e*AZ~#;40Rl(6<t*CoH`|p$g$0ay7WNT@CHPUQ}7uFoxC@ z#irU7p>0I5XPD_r>HhnLRstn^-Xjj<vqo%SQ?TbfX78oq_Pn<PLN|+I&wB?UbeSmD zt3e3eBT7HQ$#NxxVKdpJC=@96Fh@!l@qYp3bae4zb+b&k9<IaK^WOi`dKAy5>EDuf zuqN385Pzz5vZH4j2f*##>a;9QjhEbq)r<e<QSQfN!=&v{`6E&u)f(Aw845G9`#mWy zOc#|J3jGl%>*Jtn(1S<P2e2u)iWdd5NR2%2^+I+@D%Nlo*h7?r@Nl{8L1g++2BW|g z)eDV8=#J`?2N0Sfik(cPJSIw+@IARopPP`)`zcUDmNoQMP~Hf_#g+TY3fYK%0A;>6 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%0AZ+dA}_9ca%9#Rb`|18aWTY&&k){-Iv6>U?0Y- zj(Lw=@^TvSj!2|NF7k5Ps_LnaEamZMRnH&cs_}`cdr2FXBcAQc)>3bv96o<ZDLwAW zyK3$~cg={M++E&AZ|WW*=WeR{gB|zw|9!ZymV7R{sLRLkit2Yc?t1dDQJ$QyeU#NA z8L8ToUZ~obhN_;sHmaVxB+7PiEdJ+jJ~CD1ak{EJKISdw!;J4m`t2)k??PXB_{?E> zy?U?yjh0HS<a?Df<?K|RBShUo)Op0a+-l{-(4dYgo(0?Ks7Z4hs{OCuq+~WwNSZ97 zCvA^o^fe@7>L8P-gP7S-ZrE!`7dX$xs_G)WM)Esmrv1PB?a+eZwB?WGy#?($Q|Bq9 z@7}zp@}+(Fe=A>|H~&BTjnVqc3jTi<ZB*Czy&-K?U%8eIxep$$$-6`yey7KEeX=p{ zvsw~yvb9oDYp;|Hxi5;}COzZ*=l}kW<ZXuh+}4#cyAmrYvwbMDYg1+`DK~aw0cA%O zZc=84P!=zyEY_hcR-+uwrwmS_3@)S$PN57IN&A$1EdOVF<YJDsIL2pR@ZO2@x*6xS zNE379W2XIIy^s2bIBUjn-S^_U7isQR^?!B23DgxfQ&(6+U11~dN=52#E}s)Kd&tA_ zs(W<#cKO`%oGzE8M|kfaUteD5uoO8jn?G>Qec~LlkiV}|JvXdVmATz`E)scO|Aupz zdeX8^@^q~x@*aZkPcKwTo{MOY_oWTqPbujwR!Uc~mGgWC?Wg7ew97B$T_g4_Q%b(e zd5)$okr1Smd{!u>Z0dnaf*HrPIDWNKYRC2e1P4QS?@L{MIBj-SI6~X2YZ&i?*Hcd6 z4!;v<9-)*zAa0{ldb3H%|J~+2aimhZ7{xmS>g+ySm6F{yrF3pP?{Ri0rO7eWv34q@ zKe)Avci-{<2YYV;uEnwS`SundxCNKs?(Pmjf(CaF8r<C-f(Hri?ivU#L4t$?NPs|q z1PK-(ND}7ve^>Q}v*(=eo0)I!+&j-b>tWHm-mb2$sxDbpYoR+>6zcuHB-A^&6uZu4 zv;{qMixudaSB83-R)u=6z{m9SVr)dZtqt``ufxuCJ#_$+ZiI$~kG%q}We;ky1^vWU z^z7S0y%XE1!wzgqS*LpM3iV<jKmP^Xw<pxw4BcB|KW#aH9*OlQ(IIr+;7^A`y_iQs zy_eweW1-%x<Jh8p9qJ7^fqdX(sMqvVs8{DS_N(VYy+6Tq=k0rMV!zgx)_$#hTF}$U z{EqImJWuNX`+NO=<$Gn^t1}$`Yj!`chT2-8^<3~-9-I3ir!`C251-h5e_u+_z|v*n z+gk7(nTcj_sx@wHh+*l*tZjl=U)g>#skz;s@gJ-^@87Vz4|%6xH+z`=8tZ7d)u${i zy}F>qb6bbDH^(L=qrGpS<K_0i%T0WN%*63>FUH%mJEK~@V+AZ-ypoOQ?#LBX>ZvVO z&+gDs%6X?luy?2{wi@iaqZ2_hCAQ~VyMD-#$nw|QWpxi_?Gjw+ZFNh=+Ej+MNpQl+ zI<`7J)53iA&XR7OUl6X2DUngBP8kc@JNnhYeuQ+27R+C8D7XQ<4#sK8S^^FL7lA*5 z@mqy@)xaL$Z15Pk#?jL+9FJOlij{qSll8~<zp192QGj052sn=XW-&b8H7CFM=9blI zR}p)zKQ?Eoqc11QmEO|7(pQ4n-K|_-4&p7a=Y8Gg<D-_A-GpGR>(_?~t^707?D<yE zRDuGmJF3^_I-%Z}My%sU+<LUl%6ZJ5AQ+R&p7Z5(KU}x_*?w1TiK&OZk=_sip6LoG zC>P6qn+gxrp`86TnYY#BUT*a5IeKF!ioQKD`u5oHYxAE5d2OBtd2e0?d415gKZAC= z5)u2ID8XJr__%m+gS~6alS)Z~y}QYSz18U3>tqP_;%5o=>LD|&$6WipP_VbESg=>5 z6nV-9dzUK&d&`imWv`0fy;`t$wI;Shb%VW54THUGP5J)N@^?Ogrf-j)y)%0D9?1Lq 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 RVz*?Y`jy$DVq)mn{|9?czBd2> diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/prelexer.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/prelexer.o deleted file mode 100644 index 6c9032f4877637501d0a1bafb0c2f0bef0a1aa1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240656 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 Z3QG#*O(>zW24^|HTA3gzu6$bX{{tsI*X;lR diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/sass.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/sass.o deleted file mode 100644 index f74335bdbaded238f8b3d918cea7e208f081fad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276772 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�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�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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/sass_interface.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/sass_interface.o deleted file mode 100644 index 4897637a8768995960ba42d0e00eb9261852dbdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374200 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 z�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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/source_map.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/source_map.o deleted file mode 100644 index b155e7d13d946d55dc8c7fc9f81f18f16ab93761..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130084 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/to_c.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/to_c.o deleted file mode 100644 index 291e7fce0e63f7a075950af499ce6dbcc059bbca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212528 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Ν<RhtCUf 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 H*CG8sVPJzC diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/to_string.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/to_string.o deleted file mode 100644 index e2b9459c798705dff8cd8752cbcca58eeddd21fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163616 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�LdZ&{<@;LHv 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/units.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/libsass/units.o deleted file mode 100644 index 80f657c65244b87ea991b5c734cbe3ad388600f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20204 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 diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/sass_context_wrapper.o b/node_modules/gulp-sass/node_modules/node-sass/build/Release/obj.target/binding/sass_context_wrapper.o deleted file mode 100644 index a7c96d854b398bab72a4d7a5fc882d75d2716b48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66680 zcmdVD34B!5**|{g=4N3gEP)8YAV#7Bfj}l30TGGG01*f=3E)14WFUc%iOD2@qM}wS zb*WaRSU0p)+^SY>tF|t0UFuuytJu2lbzf?IwXW6r`##Tk&fR7b;#)rd&*vXF_nc=v z&w0*z&pmVR6JP)R-<gIHNHcIjp!fnHi~<DwjYpV5@Bn|$eWVDt3D1)P6G&mK$VH=x z*v5nah@#Qv$PvvBtW(=0q4jO~+%STKvy3f5;wTzj)7l!1ZETHoC!&d#RepWjg?X;T zi?R&EbSv<sqtT{BOQNH-uB(Hs^y_;~_(w~80rXi&KMDI-Z<2khdV7VJqG+_Xy1Cjx zXg@)X{YSpne^eLlzi4!Qye--R>!Pdsx>}R;eJRXZ-}Ok4zSm$M=^Ex%hIBL<Ymct( zX;~jr1b=y12&B72?l#f)uILLHM!S$WibmU75-kqKU*5ZX1#0&j<cMm0u~mI*P~z2b zLO|cj>c#~&m)7_Ba)r|RK8AgJDU_$WVIS*jS+%Ms)}O5JmX%6qAF5RR9T!!x>zZ0$ zPfORDSZ|Vjj~(rjMDnCoFAON9zV$7wTx5TF|F8NwJG!`r2hz7)>P6eP{R`W$l=gMT zRYCmvT8~xb`-2p7jI^ukp)XtEQtIpOTb0<<9qaY$JK#7`l&<2ZMW0|PN~y0m(ZeiB z`o#amo0Nv9*Q(fcO{q_+H>rLbUvfzzX};-&3FXG<_SexxHPSYqzEed=>&rsNmZ8<B zucf=YGZyVa52kU(U*26}U$@lnX=2}e=o_o@NU1NrYAt)pudn(QCA7cT_rGsR!iiGq zWBa;WTK)QBqEAl=d%dj`eGL0DR5GPLZY-et^*t~8emYVKZxww7Um3<I<pZC-*7$nZ zm5BCrZRqG~i$<5!DoJ(imU--WK^9<KNke)^AYe$7^yniX58+YJ#~}XF3>aIGFUCou z0fGLgTofz>n$vbO1cD>^Z~3CFZ{1Jjxo-<D$G%4#gsWcBRJZltb?3}mbmn)7^mhqe zcg`tUZs@q~MQ6U4*lW=_2RYb9TVEC4<2DXVU9$CyqpOconSEf?ZGA+GfxzO1@!e&= z*|Nn*E2oSr=|X>$AZM*7fF^qacsM^2iKz%le^eG$xo9i9`Pc`&EV%*(PHZ#+8%G63 zWoKqx0Dn-soPhA!zrW)@&1Y1P7<HCeGhEsf^N@<bi499wL*`{v9iz0K=>SOA&7$XY zr0FkfU#0gut*_<`>wGi_;=LGQk&yNJz@P6Yn5R^O$>P>%8HbQs*B?z70rS*@(ax+- zz+*P2zkw)_egotJ>2LG35m^Q@@?mnoY)#9ggc(Z<1k$pOtOgDqz6z}>kp5S?W@Mq2 z1<d!-hs`SoUm@sL$#A63O`nD+kiH2sWgz`rzWx-WLcqw_ipCo-zfK>PfH@=*91SH! z2xfXlJLM4wWF<JSU<I&^L<#vR#{#>ND5EnPy)vf*dp%L|{FL7V`z%oo@@fm60}Ua{ z+PN6P&%l|7&SlQ`abM$MWDz5H5IBz}?ud{37MuGHoiei5f^!RTFU{Duj7uCmOQY&F zD)ibycqn*12zR2Tnoa)lJPgV^q~!=d<qKddFe#e1WxRk~ZI6at1!N2_LQU@gIm<jM zV?+}Yj{r?o5g7Rck~$_MV2&awV$6DsG#HsAU`8_n0aGxeeg{l_0N6FeZ-SD<zYhFq zia+!;<(=~n2<=Brq|;9teLm>Mn3F-Y%x}_jXHyHxJq%YP_ZULvuA{3FJPXn72<C4y z-Xz=X_LBZMuz}zkxaN)k{oah+L)~;P_{*SVnU`h^BV(!1Bg=?)hc0s=IzZNYT;{zR zKske`*JOMOjA@QSPY5u_mx|+TQ12y<Uu0Ow3mlf0Ba`wouVcR{tw!)Gpz<({nD=MQ zQU-?lxUTmBau>>LK4Lcl%2(Q0xu!m5Qzt@PsEa{uC#8S2sV><bQ0^e=D>jvySBP06 z=;TVvn9smtna^kB-j9Tl`)6DOxv!I;5lkCp7z+{1H@!NhkP(iK;0o~kjQBqA^0Bcl zz8k>v6!Cp#^F0`bD!LfK=Rp~h1L}7+m1^4v?hE8mL<nZ;u3t=E3@P#&kXSA^Q~Fk@ z6l5cKotE3zC#T47gPe)M)!g4pHiF}TJ%}iiZH+F^F4ojyo9fg`P8`%-B)c(_dIFDY zA?lN%KbkNq=M&K8VMH`fbkVsWIY$G1Dv?eil4>DF`X`uo0%K-iC19D4XXa+pk{~w+ z*Ff&xxSF|zL^9I<y*E%}Z$!x_<^%m^W_ktUz}P<l(?FQ_GRN#djINfMy9Nm(H%<(> zn~9kFBO)2;^_cMj={x!Q*1nW(DZq8y)f1@`J(V{WE$0nrH0uNCN@?RSAbX#s9{Db? z0b@Kdnr{HH_t$9jKLuG)LY*{U=Kludr%2{wU6r4(+=N#^_?8HtIm+_WU_l|uZ+<~} z5<zk29{@r<5x(*gf(t>|g^bJ@0m={}JgTbPgPSxp?4^DK?Z!S_mbnl~lhTApxe=UE zAUc<bRGQMs)QRnw>&&MhrCl(Q^|&yhKn>K4KClFrbBl3V4a?X)YoOW4$lMPbB4$b2 zFyeq$19@Kq--f)+!_v&cg0xKHFiUAD$_hc3DwB~pfzV|R+6a~cv!1ZkX(UfAPzexZ zC_NDfX!KrWSxy2HJVY<>lY*CmG;$miE=-#aR%(|t>=`-tfKW+<MI;j<qM{fX@d9cq zM+Syb4N!S9JAg5dW*=pc{YED7n8y&tX(vnyZO?)#MUSVVb2|#20eP<HlLI6GMpr#6 z>9c@L^J`Z%`d?aln@GEBbl*=wh57WCrOX}uC~lZs6?i+^(deCqyDDFXKaBKOaSe=} zhBAJKl=+ik8KnmRV_ur+tbXp<AEqOimu1$HGmuLIJ0<uEQJ}`WJhKZCC?Vo7f}d!@ z6*hqfb44A4EO>UgGIP07sK$;=%G=z*<IGW<L(Xhqc!;^$J;d~ojTy%sNS0ooIqX`j z^r+f`#{$px+?ZL1#Sz&PWqZy8;Z_9mCY!L8T1D`FEpf9=APHI7yspK5X;Vo|sH2cS z`{kC*6I3y>PGhTs^FZMO-kN!iqDTSBWb;>Cz_XY&XEiWfz}wvgd~`CbA9oIDdJH2y z$z#|BtYkbfsxfRCip^sfQ$i(JW*PZcf$SZ_e#UYW9s$7_!<4f8_kmPnnAo1Bxbs6W zN{wM&LU1|=GKNux<aVxY&OLanriKF^>Mvk}cMMZDlX4?Ca*F6&B2v=gnd%;~l+X<% z<ZAFdVv#ernP=>Twt)GuYe|11>8D2hNxB}`?_j3{f1-2#H2o1Q1*tT|fzI+FZr1|i zZUtS}%3Tmiu9bUP(RgB1wQ?f#aIG*UL~4!v2SN7M${$&7!uudNwW5^ek3in4Rwz#x zm8H1zXM&(=#Y+e_fFQM^%fYq6xd%_v)NsH<-39I5T2VHWawAw)WY>z4l3HP^yH=FY zGbH4ma8zOZ^+fJjQvlYC81xsI*QVuNf~qN*1ONRR6N-_R_X~pQPU1I!v(oaa;Uk8B z3wTso-jRUGBJ(c5d1;xX$lS>@&5Pu(5GmvCpf1V@J>c3-oVTSBoxJ)MaT~#Ff!#%v zU!_T-)s#1Z9X$<{+x?Wuz#c=CJJQ6ZB4cD+3Ut8SK5Q5b#57bD%*68H6^te3Uxp#u zU=2X7tSg6kriV+1!R(t3!iDbsjNqtAC^v%n^I;#u5VE*JSv*%$e&MCCU}z52L@)uK z>qz?AVWg9!4{^N1_m|9=a}$_eBF5{;I$=_)-Zz2%jz~L)X`hJ&nT3Wi4Z*zCPdNzK z<B0NWKV?0zmk{N5!}OiCXuAQ}zYygCKjl4OGpOr6JWO|8kr_p;geZUV=Q9`BBZ%^Z zUt0^XXA))Cut`_|x;(lOmByp^Q^RD@CZjmjruhs!lcqdl<Xi&`kK)e~R<DF#oeq8D zCZcNfc=6XmA(^xieI8h>M2S(27fVoCJYFy*^f_)cQZ7^#SuIo_g$dr_<R3MpcEX1s zIKzp`D}OjlQ^N_FM1@w|`O`p9!-<y=tOG%Y6S4;)YLI8+f*Uk79Pm)Tf(_o`MA=Nr zjbH&5m#lM%NXc-*RQGVAg#Jy++{1|~jDI*;0xmV|=gp9X-B@z1Z()~KOYX@e9$DC3 zjJpVSJCi~u;Lb<rYGLQ2lTssC4tXxa$pI3u{i3KRY3eqiN(oPnKz84b0^}_VH<jmb z7-e`Cbjr-#Ea=EGRpfungbn715yQv}ROH|<fnftjjd+o6%}{Y{TPCrZV@6Oj9?iZm z(ti{N!?*yJ^}5B510}h|PGJ7=#Hd<q8}5YIbxa9e575Zp7i4dfJdouk91eohB$cxK zEkLR!NqJI}RNVPDgP@wEmk@jo1TNW(0A*;qo^uc8qAW}ed#NSR?roCFW>Rhh-_lY` zL`o`*ss5HmrB)Nyq*7^Vl()a7RdA^@iAP$R?Jg#Ts9p?3S1rv)R|Pr*@?4;k1G*x4 zLRZuuYU(zjdJG@@et@!5_XEQ!r~zD3<}`pgFh02f9KuB!PmHPoRO6<e8vs*6H{d4I z$iEF_Zv&`fxe2d=;4}cGEI(AP8vx}=4M1_{mxG`hfR_+F76kUli~wb5HvrB(xJ^^T zUTPDxdmDhVnUovB<KO|-xkRMIk4*J904lX=0AsPy&-aj&x4!`#!KDsv*Q!qryhK~g zdI(kKzO1R+gzC=NGbAW=yBQM5G_F(LVwqC~tL9{n?S&;PC|#4C-h((W_IzM2CQN;H z`mKz)0hnEcIU+m#BgWhh%!t{*v}BKc66w8ZW!8~B_HCrADBY7i_6wv}P<nIr*er~0 zy_7yHdo0QRgwj9G9&_wm+RoXQojVB$BexjWKyDSTW^N6xX}O2vY8hiEL%yBRKhGY! z0O?aG{mbl(33xIPFjo&B_Re@9Ft}xJL_^}*>KHCA4VIuLc!|_GTrZK1g$)5CX9Xyq z><!6thEwZeEbrxoax<{PI*=~BPAsL=hv~R*-^w{?mSIdHk6h~#+<?u5&>3{Ogf2Vj zayMN_g^@D@{xYcC_qt>rCi*VAyiAw(=<*p|l+2yrpM-^(`It+Fmw<|X5NPd0f5xF3 zIVS-VBoDpeU_(>$ptXW7Tq3@M32p<|gT(paaJ||R*E|Dk2E1#2;?luO&P;N;`5Dk@ z%40@w8Zhki&&BC!YDO7N(-5{(P$vQN(~vy{<@{+MbPm{JejXynKS4_l<#<{wu&0fj zWmpU_)0ZwL-p1r5M$XBgTQpgJ?V{5LDo@nv!gWTqXXN|_tUsk0ZbG(`C$sx1n`LM~ z4Y6SGK@6mGP!Mx+wq9N;gIT!QZW@kACY9KniG0#j*$no?XzGGSdfq&gHlvuX=6Azw zrvzWnUJQ)*9F3Aj1DcoBdVMiky^%>mW(LpD4L}5-?es$skDCR8o}rh6k~}~k#r)%m zQ4P@FAP*j(nG!lI9~tB?1=%}5x3S!Weh{1iS}DuF97r`oQ=a5i#hrgY2x@@#5`upN zK?Z2bkjltY7Uv$^3uR$yIN+gnLA!T=RyLDzBlu@6wM3+3oMftd(Wr!aNytBLlQYzM z>1}F@=16Bq39i-kGJ3dP(Aiy(-6pqUf%$lTi(rl)F1Ku18_6w3P6e=+5v71T6JtZR z4kPDA(4HXr{w_Lqw&3$XXW&lHoUF$)t#ll)bwnw03GqTMcsS6f5~;*5bRn?2h%(D1 z#P@MIuK+z9g*PKE5)TtO1whvmX|Y2xa*hY)T*4mi!Uit~<^{s89IktdDld;%ndDyc zC<vrUIk;2suCkH7iH7BIUw}ooWm*;|x8>8>t>cMNwPkxD&J;EH<mck<z}uG3Ww{9v z5S+HGl;!sVsoFB-No`qi=U)keYRg_i@V`NjwoGof+p?+y3uTeE?4fRhc5ho&HuDWY z@F^{|B%q|EEi={KmX*+Dq|AK-qzdD2-S*wUn8%mWg!`Aw+;k)Yxp}ynxn;Pf<t`*r zZY!?oxqY~1<o+1f%-o;jnw5JOuEUHBelBiiX4y~AgAZZ0;!%27magxUQ7?Lf1rwMW z&V%zY_%Y*fA0zLea_b152A)6ByfDtk!*dp2XmmD$e*x3C#F(FT6J|TAE+<zb7{GFX z$@}=oYLj;_kQ))q{j*4&U%DNnpAh-L6jm6)Z6G~J<S8l1e*)=SB2Q0A9)^*ImCx{z zm1+Bc%*snrlFLEn6-%j)%#R^`6PdkgF@m>Xu;n>yj!(`vhp8Daf!S^w&3KWlqcFYM z{xO1g0sAshmiQ_E3+zZt>t>VJ<wkG<unj~x%9ppQ^J78!C6SNM(#tbdm8u_&Koc)R zFxO;}tu9*@0=tGN>-{<Q1N$?g^!R0d2`n#o`m*$bhch#RyFmGrWHx%Wslh$RT3{Fl zBbX;;*(Ru&S(Tz5w9|=xdKPv*95Y4yT9BS6@>ah%aT~#}K?^Sg{al}q)E?V>kWMD@ zc`3<10qGthpYJ29Hnj_+v5P?dv5%~jmw~i}$d~v^uE^Jd^fw}3o|60pNR#S7zRIf{ zD^OrNh;ogOl5-}o*AwLi#~ViQ9$;Q1?Ct)#`2g6m!$7&mt4S>xRRtUh`X=J}T}m_0 z2I&t({(TA+M)0p7eMsboy<{W!Phf+KL3zyEJdNNeV8cXtG7GimRJoB;4Qzra&pYJ{ zU4!{mRtgt`_At?3@aOgxu({Z&F<;Cge!HpR!6>k6i1L!pJ2~e7`!Z49a^*H17KM7S zxhz?}g7JG?J(%A0XL$&){X}`s+j5QI<-k5ml=rhplgpUEGMoWGFhB4a6I=`ISw#87 zpU;KBK2DS`eHFyRI`u}`lztIRV;jI2us5aEfZ*_CPXV20*EGGk9h?gk@6KAocAy`_ zTG^eYIm^uC-C5PwbB+cp@6Kj9yR*SlfxH&M946VO$&{iNV)uab36X=t$hWkBaje2@ zc}O#m=3fH)O-JHU8c3dj2?1ko+TmYQ0FjK}tt6I*0yb*zH^BGh3fw<GexPC84f5ET z=&QFPVLpO`XV)D=D<RY5Lkm<W^BEI&xoMfp8j;S#`K3VCom5ssVfJ${q1jMm1djqE zKNz24-c5{JK#?=ACq0#pl#z2MVVV%;xv^QmY$9weVcCAZb>Pg^3jRK*H*(Ga6Cbcz z;t~(O2rRF}mYI5u@F1HVTnlGChG4GJ6k9p_WDRIp%&RQU`5NB3nEZ1dTcRDP+z@&e zT0>(dlO+?6FpO>l^CFieIVS@17s6iV#=Zee&5^)f>%s<)0_JwY?$ov^ON`(Hz>Yl% zlpFn&Nx=3H<(EE6&L&|0N|ZaCJVIO0>W$#rKp%26NOzlrph^<=)C2nqqWsR3HZAp? z^DAI^4SS!X&Io=7EU#4`75+4>=`b`U?l4bjimEnJtIl(brel^))6^}}7&rcKYK7|L z3^&50=M~p-WsWCCwH~K7&kckrq3fn1ll<u*d)MQ)vfPA55S;b6QkLHbq*{;bk}K}~ zOF&TTaW5hGYY=uJBb=O}4B<vqM9w|<mZpZiRPHC9lQYU@c1-XC?Y1Q%CF^mfy4T}M zh&zFQ_3aD*6OJWM;#>)t<lhsVhYpL5OgyqFY<rPOAzB>?U2O{c=&GDEAkSVnIUvg^ zw-?re`U2%}s;1gQk78qYC?nMI6JI9EE!oFOCfh`f+by1_7|QfTG#GidELCZDvt>zn zt8M6gqi|08k!^HcN7sx4SL15lpEl`Vt@7Zsn9eaGA0wCv4)(#5X(bq}sU`6GcqPmT z9YYtjwCUG;uX_2^isE)qvtsboCtj*w%P8<LpJjP+<9SVG)C86_q-vz4Z&zBlx`XS0 zJ%uQ_e#&XU{*)-=ExlA#GC5ZO+l`W%1ytfJ#!87E2k8S6I>4grZ8A=90-Fb)nbW-L z)cU~4C}w|79TU8E9L|R#m<Nr~>+z**YtCHM`q2nx^%znt*mhuc5O%49RXsj<E6`jI zEn^m-UZ@^;x2KV+fHt|+HfMGvYPSi&T%-B2>9<CoK*n5aqfP>9J8`YosGOeze2GvA zSKeHEIe!Ow-0>i7a7adQCNPbJJ#mcoj})U7*j#ez=`Q}96M-!u?Ab1C@B(1(K`_r5 zqvtcFCHpC0ho^yZo~8u<4pguOs0+tX;T_Kf_X2hnQMQlKt%B9aJ;Oqfwh;L$CvPSx zuLUmv?IEJ?9HUkwQY9k(Hb{G~0{IrdIB^>}b3j{1^m|=&DvlBS5zzM&=|NozUD<yF zb{0CE`6ri<YU8ayZza+@Qkpa+q|6Ck0n*b%epjsZkVn&5%hA-|N6&?Mqv>$IkzPS< zGUG-xlmhb|Gp`$oqYj0N@#+l7X@L2V;oj;D$VD2?S7$)30!#%m3)C49Qe?iz^JNFr zsK#hy{)W&WIA|mLL15k|>_1KEdcm&&&L0cZ*QT6H43R0JC@w~DDJV?+)~0sZ)J)FT z;FF1*FOCO*|4Gt@lbTpax~*a6bQgLf<&g6txOpL$;U@*Z0EtgHX8KMzPCzf_6OLIV z<2vD(vjCJ;)W^p;+Kga3Fqac{zceYMSVoYX{NyU)hld3vK#sd~jI%hPli|smb#sBm zVFqGUi-Vnz<HZ3})WDU0Gsxb>!2*_>@B#?V;y@|OPs`Pd1Im-Sl;X~x0fJf_cnQHH zK;WThMu3{DJrt?7d$y*Az0?M1_iolHn@PD5oP{>QI+uu)%z{jHFAkK@auRZH)~Uky zmkZ<`wH3V-&7YSGWTbz&u$smaBa?V!xnTR1Ng>)T5xQC~_~@$SQOI){P7cWSiW;Js zs<f+hfKOU^;4&?}O{Co(@XYthT+h-#nc0nU7`s^qP~K`CuxbrToqjQ0Gw8Hlzzn22 zPf!XhY|<c@nf4jJR`h=y->L)lc%lsVQ`P``3Q<P;DQ5zE1yRQNDc1sfA5r%4Q~n6- zYeXsZQ{DqMJsp%Oe#$6drx2ysPbmSmjwq#mN+YnHM49EM^aJ~2qRjPEwgbyQ%c=HL z?g!;rl3C!VybA1>L|N>o1TwImKrkEplzoAnPn6|;N&~RnL^;Y&IThHeh!XWvZUOdx zh!XQtUIz9XqOA2(f|(c|5X`urG9B2(MCtcajs$iyQ8xQ2=L35)QBL<$?gsW*qMYrg zyb0{EEKtt(Q}zLN4pA=lQx*UlBg)VGlwM#jB+3py<w{`hCCYVv%45L3N0giWl+S@3 zI}DWD{geZMjS%H7KcyMiZlc`hr<?@rB}923y&c_@#$xGnw*&haQT{8v%S(A1*zbt) zhjhKCD>9F*#`+b(e9%w%8rU&wKzS%#FH1#c0<e`tc{p7Td20*i1A8P<9!W1P_t=&I z_FSU;F}=!5xfa+5iSlQ^%#*-=M3g7|KKK`~c__X4WI7#aclls{U=JnAu5^7QT&!LO zY$s8kN~c{~m&`_BFDA-g(&^~Ai*gmP4-@4XuLZIod>o{&i2Q6yaz=+?%tSDsOG%y$ z($PeIS;%SHjh(=5CCV#)$|b<wNt9Rpls^Fb22oz~Q$7WD<XTW(_fz%;wu&f!^HGfS z#5y=)Tm(eD6VbO2j7d8YCjyJb1~IC|1}!9cvB4DOs8nkaMdn#Ae<h^7YmpzY+6kLM zaMmI!uly^4R2vm!64jRC&c7D~wHEObf-ix<bMB0Q+=Qq(mv3BxArzIVI3BNV;S}|J zX!ou~l+C2v2>w<};dnet$xO^t_gX{=T|`3ewTLQ=e=S1ZQ)`iTpr6+wq}{(3*-iyF zGKojlBDUL^#0QpzuGS(xx+?jXx(p`=<bKHI7o}aTMSRlA17)4!w{0Tr_JC*Mp=`Q_ zT;N%wsABA9En>T5%(uwUGN+Hs{Sy*_+!t^)b3ef~%@}jcdZLw%%(aj(a>wBs$SuLu zG{z<3<jTtnyAU5tw<ovIp6>pHHm^kc31mG^{tOY#$UhnAZA7|S-)cU?)ECM8{HsB^ zhp5-4qCO1DD@45^1=YylpE{eXMrQvWs<_FWI#O;?v!4cv@4wH~sGM(s;ydIEN0O0~ z0pe`K-T}Eo{+SzF0W9wW?{H&R0NagVUh81_w!{c-1o}cE-86DKDRwfr6xdxvxy>bX zU^SS6p8;KLf^`2#a+WQmTo>E`(xpUxc;q5C*$Dmy*k_6I_{gPR$|u0`4g3=$wa-*R zgA>xQtU)lJ8o9t@VK4^lR-!!br(6c?{X}`mPuT@*CM^`-9I5a9IUm(ka#o=k-AN59 zZ<JH2Ifvke^S-&reC%DQ{Z495nWJ(}MZAmB`}%l|ocDpAi^<oV<|3WuRntiH;HaD! z;@?ub)W>UNQbRE-fKHQISC~o%6Z!)TGBTee`B@GczljBg?^~-z{Shp-3MCNy7-YV8 zojpobyZ&`v8k#NNyUrnP?t9lfP>!WWJ=e)6M0cp6&&f48?}Ap^4f??@I+2*k$XNv1 zsYIXWqO&~T<{Af_w$U(7LuDK|X%o0A&8H&N&<}VlHJUc!51OjE@6+7$Amk}q$r6pG z$14}v=y`&kOb<xj1)9$E1XRAu%#W8-zJ`f0*qG9UcA1_vbs89sp@titT8d;BB`2B~ zk_~e{E>p%)V+)u|kS?N;$~+ESQ^G+ATSYs8HRFVM8Hh}C>L#Q=MAF=sA3RJsAcT=A zF!chU%a8>6r^FpY8oxE)i8SwrOruSa>389h$Oh_O!qZRFi|A7Pqy|m;y|9@^78T-B z#PS~zb>yMY`p^j2kTvyNAf7?eEGi-{rWMg+5OX}ZipT)75Gj+bXBJM;R9!?Dvzqwc z#!X7`Vx)=*G%u#2{){fPL1XgoQg;9>qEvA&;b<pg%DO!2hEq=mVk45~zC|N4z;H3( z8GHvFx)e!_%eWR55b0KjL>)JDC)4l7)#O8{<a(11C>D{IOxoANivs}C#r!+zIiB=< zfmAVpCLI<tX-lPuF2$p2kh*9XQhOr>D{#e06~eNz5~NI?g$bPU?EaW(vWoa8kBf=K zDY{H01I|1EsEJdi9LUXQEf^}1G$$6(Z{f_%B)}=Y&@Y>c_*YbyfKXHfu=pyZiW#I| zWtq2-1gGdHO-1|@t3MF)0|1L3CuRao`sqv&UCh^rN)9pKr_{$t75|g?2sG(LT@hW1 zvuXj-!E<$?gSJI<G4}(Z=o+Morx6Psvoz@>rAa%;MSQ%vmRNocu(+OB=;SZ6NF8!T zsft`hoIl1USMf%qgnlxTxV<CN)kM0;A#G>U6-2s&NVhQQ4#wWaX<EHYD|yI4xUziO z!K#cta1cuUH$cp!>4u;2sGoNQP(n2sn8PsuxyYQMi##1<lMc(6bc#`34$FtZbTOl# z7S$qE+<{avfhL^?Qx_5|V%Z-O-zb2^7ZM+V+(k@!tW?AgtZpP+!DLYR!eIGAP|0+Y z9>p@1Q`V;|un^j(gs?L)kmaTAJ7N@K`@J27`vIaBnwG#1_{_q|07-4yY4rQO@g$SB zAI*J#hK7I<o<oQO<t-niRS5YDKxiZ4LHfQ>N#w87g!vu<uPKfEZJ^#wViEmdT!~G1 z2*|I9u$W#P!btTvW5U0Iok+!MwkbyGWFQVD<gxNb5tnVH3qWWkVkd~$YGv1m;S)MQ zc$<hDXolklBQ(|ULu|Ci8Ge*Gk$larC$F1Ssv^1+*APfQ%r}ds<HFspl2WvnZqhAw z5nYPc5g$(rG=3EEAaW`xEdp4)6{%tZO=`SFbSb_9pcq06kI)M=#hN=wh8`Ce-^(&c znKZ)|(Z!_WM#XgD7x$Fi1_>&h^~kU^{f57DyA7lK3S6v50u^^44rE@~Ow}xZ=;Hhr zSW)>TQO*4qVc_~3Cubr#%gVSjH*f-Ya!27B$Q_5PnL7#BwA^X9TDh}uP0y{tH6ynU z*Ua3*am~s-9@k;U)H%@7O~l_-g)tIZ>9gS~W6oJX2e4<d4C)?2dPe9{TtipVg(eC7 z0s+aXcjEFDDLwR{!X7LOGZz+q4)AWEGZ&fo9YWzQfaeidht?e^d{u*o;n%2v!ZZkx zy3EC9;gmpONP|nv!s&s+(EzDuWG*!eO9F*^X|UcbEDsb;aDi0;V=9?B9k`5$8L5MT z4Y<svxt0qv%Qz?s;{2?d!Un{&e#oj}3s(R<3cLj3{Yz6<BfWw2Y@B)?k{3{N;?(U( z?x5tU@cB)-_abTJK7nf>_c>h6+}CkU%l$j9R_>R$rstZyV9yQWnwgu2YgTRnuETPt z;Tp`X#5I&VAJ^>Mg}4sSZNPOz?n+!o<{pRZsN8m3b8@?J9c@g#1s0rvWXA1tuR?^K zMKkYCWc0{kzy;_$OdyZmctiEaa8@91E8IP)QQ%R5yl>EQ4$%C0fxIiEI+(v8koN#! z@;JjKfxMp}qhD)&a&ifPo5+X<%o~xM5h5ziqv1OCzi|02(asE*S1u;vQ^2UlUgopJ z@dhrB6UWxT+_w=QpAkxT%8;GzEd#;sG7#)81HtYx5bQ1k!R|5;TouTB5E;J<Lo$W~ zo*&424luP)h8G3$UIENLAo>v~Go5_<Um!CcbNYteLtf{Ca_9IRlF~UIKyvCXTv`*T z{lgDB6;VUxa_$_@0G+vln_f52)K)WBa_2Y+Ah-7;%)&*;c*PPt)deo&kLEZeXM`r< zD*l{|<k&J?-XVq`2B!QAF_w|FK#lGLYTvoj5N*jg(B<LDD3QCB5bX9a!EO%|?DjCh zZVwae_AtR!frAS&rljZH1bbF5g&|XbM5cGTVPtxr8%C!84Vc|d{CNQ*ZwC-hpfs!i z_4F6ORT@4%koPIz#Tsr8<mIEdHryS^o8*Q!VlX3j&ZaE%=yppzIdub!6sK-Ra_rf- zoI)PF56u|qxpxBCn6WU^X{n1cy?!Lv?MH&$ek9oKM}iAny^UbE9|=ZFO(5g*U_nM5 zV0hph!0e*K052jxFV18?UrJ1ifi#q#ZCLzl!)`wlzxMMic!Cu)pwA;08j~6B4&+_! zh7)L(<dg@1%y?pk+O#n5hWJ5y^<#CDHK*|3AUyy?)?BiuFbnAE7$dR{<~BY8;J=7E zk6eT;38Z<Ho<~#8kMZieQgH0BvKBexw3<mif?k#ch?#_jZ3EL&7C=%o9O<dGxYR;E z<MgR@NUo&h#Hr0lwovjEzQMVOlBHAWgywaWTsO53$p<LeIduz?Pg62H^&BK$r{t+q zw;}m=N}e`9umS6{w2bmBXRxizV$YwC!IK?V1sI;U2iMtv;rSc&U^@pes{c2de=gt> z)g0(9FymmrsQyRvU`#NoUr(h>UlhpGb1B0|1oHk4{^b}=7;X>bRlq}R56Pn<4{^hZ zKwd3i9{7m9F_5<q@XwWeTH)D&K;BJ2&_E7_X@!ph@eM{no(>3cy&1^MMjyOEbKC~R z1Rz9bTHymgOm`!m1Y(XG@fr{d-H4BYSPldYtDNnYw7}d-)O;48yq|)?V+vV}^-11V zAoe|6Sf5M_<W+-}2LZD1IUp7Qv5vY2AzlNb83-D48SyR<tAU`AfDzYQfxO3o;BH1D zJJJJr&j4X7y&i}+frz3>u*hvdtVi3RM$U-4fH={OcmRkqfUuqWC=llYakbWQc19rY zb0BQjU66r}Mysz7np?*G=D0?*?tkF255doylaZVeD#aE1Ot_Anhs$K5T@X-s8Pe#4 z?AW7mnNP$E1Lj3Y&j@wmiknV5E!-yq!5jy*fqhEm(S=7L-Uw{wG2EM@0Jjo&EO$a$ zU(no_c^tLyLfxV=qcpTkBpsRRWl`rtCIH=3gt_a1KR#o4hSP&aWN;6n<;h7j6%&je zv>EEzB?O}f*~^)cfYF2Yf}$E|%oqiDN+7S46cd~S7(ME6z*OFh(SWN0`%=cp7k5*E ztoMP3MYdDZpEoaS!qS~~A&SpMidX*`TOg8UZ8!7i){5>qtozl`V<K2T<I^%f1a}~G zA+AQ|xrDyjK^wtKftflV*qyw?L3y))k#jdFbQ;e3rNhq^5!yz&a^3@--b!NqDkU9< zcfoehl#Q6?)3XX6hx3Zyy!2sQQ!fLoATY=^^-qAC!JZ!Cn%V%>Rm}jiX=o_i8#)*q zP9p)f3_+?s7|1|&AQz_4-!>H)ffa{N#)e=Zo9<NTujXvHhVBXI4{Ig<3*^+&wjo?W zdIOa}Ms}p&1H*z_fDarAj)lW8{P{Im*O-#W@vIr0Q{upAPad0r<~;m-b{<!OgY!t@ zpgfF4D^cRd;3T#6sBJeUcM6^j<!wouR<{@VVwo9u4GQS*6BWTt3;&I~y*CB?SfiJj z*vSOJ2;>9~7%?V2ZA4CBR7U=Y*H6txn;U7=jlq4yNYJg>fwU2GLiBplbkj&1F&Fd< z9F!Un3IUsrwl+gCq|ePhB)b%BS?Q222ivd-NK^$07n~9J;rtP-D7|is<_r-h?mT7~ zDTu?(z&>M~Y(@-6=1Lvu9;tI(5?UHm`u2gUQLcQvlpGgD=Rdm0sD{uO%T=7*DadES zaJ-`3B~UlUt8DC87_Lf#U1HlCC}^HClU$=pK3)tB=}h;Y$+CD_<YW+Xd@{j>)gt@o z!YV{7%0JOjTP}Xz*WuEr0>_#|vgdN`VE3Q=NCqm@1l01RBqa7k3vFab6=i=XPpWA$ z;{djHA)I(%I`ooORriyH&^D$3UYW8#i1R`rB&XW015k7zH-Kq-aWtKpUD^l?e4`ki zu@^?hnR^AOjg+`r0|dj`6mPwhx}4{wl$GmZhs+>a8#X*<D1$>}V1)+i#vGEJ6Br$s zAH)vF7;sQ~pJfHOwS%#WN)igqLvnV2Et|6+jGYPipfS1`0hnt8=pqM?QSwO6V{Rl4 zVTN>g4BYc=0F-K7Hph}f#kpuFCTgZ;pFnsFS$Rb0NJ!VZT~G9giw=bg(v2`WBvBUb zgQQ4;vPf!)Tu`T*Pr2;?<6@dDjXAgm0{=n}q$!KW4E&!l0~?9Gv7X+UiS@nh{WE8D z#oJ=VYc_SyESV7w<NwUISa<Kt{;HWBU9FvcZL!_4_x7|JGiJ;rHS{5gzRp<h%&wNM z-HCB7ef>@@eZ4&znAy9j7jL>~>FtfS#=Ge29?=awcqx6XXGUvxHx;A5YDPOsXmGB0 zv3v|~TPGG^(|~R1Lc$tAMLQ|z>jwus+1Fp(*VVC60a1PhJkszuhCv$C`EPvi*|ou| z{`)!0OuNsz0He+yPI~kV0QWNR;7O1E;8}AFoD7lIL?rEhtbk<&)4tez82GoQ-D8?y z(32tdhxspHEZ51CY}9d*vLoyZ@}E698cjA$5<_4)T3GGrFImeFSiXT*m0#%d81w|= z(0IHvhWe)6@CEpONTMU&)f`*j-Pw|e8MMTxZ|SOO>Fiw9(z?!|=OcBf(KWFigSOe5 zI@WZxB>H+{2JOG~^+%%}@o29>+w#?|t+C$TW_-cH*a_2{5<MMVYYckaw2bT9pvMzS z;;k*6bNj32%uz_4@jQcWGoi1SGU$X#+Rbfh?dj-FEbHl5)6r$nS`rK!;yvp?rXAUZ zHQLSvoh@s6jUMC`*_ep+Ktpv;Ps=7Yh8`E`a`KX{0iCI%HxcVfxD1(IKt|QayK3Uy zn_5<N#vHEZo|cY8uZwqH!90G+-lCSSw$2z6#HsTPdIDA7w|*7;Mb8&pEZPRA$h5nL z61B4$l!+ekI1W<&jQ7|spJ&i>A(zG!9JD)K*Bj@$q~CZq^u*B%6Pv0NsE$>AsNp53 zn_Bul3q3({Df8C{?XWw>DC#_e_R}4#s^fVE-PO}qUwZKQglKo7y(iYvCdKNB_QYBZ z+EjPMR<v~X#pdyQ4P6EZmiF^&)F5KegTY8|YfCp(h+=JOMS=K!ks4o1@20L+gPx-~ z+LQfEdj-*WcgqQVG26O?K^yxEYq*KfO#`W;wq?)*OP5(%-8_SSB(7Xe_VvU&4SLR? z+NeP{Z&1-0k9VUc6L4}vPsjR>L`Q$jpa-P7)(zU00%M|MeXIwZ^eESroAxL@cygh& z`{{Y23r+Pn&!DFd%ey*Iy1F)lo+Ku<3xgj2Dmmppy6Z{y*gS(C;;6h<VsJL-aih0g z81(zNA@&k}F{R5|8As+BwB_!vkM(Gq8>0z>9^ScRT#cXhW#KrkayX8j=WvrT=<X%e z+{5E%HGLYTV9AmdOAGp`-^aTODrS@vOlj@J$9jq@N=jyw&X_fOYQdCMExoa}0+5-v zY(`mcf7eu+C{wBCY0Wb&uSC<CxnaYG8SQ;-@e|jz%;@d&PO)qHI=hQWmlw^mIipwg zb#%7TR2c1$4jetIzO=t;mh|Vc`q+j@zk#daC4@^B#u7DsJv|uFz~BHrzKRG2@*Z$- z>?4*(Hg=FSMLyE3+K%4tcyA0;N%<L?VhL)Bk%oRll70>t#T;xN4?n&#%mT-vSW7p5 zdaD;--|CGt)Hg-L<vt`8&x<mAV1Jb_^RijhZEO2_6V>bEeO-xVtL-VGvlFvXBG$Gv zwm#moDbi^SiO=YacdaSt=z^Q{kO!bU(Sz1&Cw!%=5UVj9ukPsNO7LO06q@WSK)4*t zHQjxhES2ma3>VQSJG%}u8ZXHpWv7i*SOoYu!&C**j2w|9oNL?=u6ZdHVFiKt->b-j zOC`lEGuGyj^5Xnb<<0Fq@eL9F_!~NR1Z}2*N47dj@c<EtL<}#N(T^pDngvl&i_ysx zXE<EfyS%F{wwk`nME-Ih%GY76tn01s>+EC}N+eO6d-|xq)b&!rOGSTP(9+4>Nm5>V zRb8)|1z28|QJ&n1W7GOoah1PHdUb?Lpjy^;tVRP~HkiWeBxd21myV3o@Xrh?>E)PR z*DFgOX3=X)zqx8f#4NHn@^Fy3x>quj2E3WUT+AV5rOd)9FCFGCM-LPRmGp9;-Z1#6 znxTZ38m_QQ<0`h4DOKsi<<t&nvFGA<BYgV7uIkgp?nb0w=X!RtyAVG1G8lvJ7WT&? zJw0(6=RL5O8Ln!Kt%+>xW;T`da)hCdo5Z1gt5@@g<$-<7x+N**6&*ZPc?1aO6Dmdb z!0ket(*_+dnU(6Z%3*atA1j(9(`q_f)_asEVSR$={Ag6JENsZf2+xqNaHZE8fql#< zB=op>9ni-rddo_^dIk0|E4^-B=uORvX1Aa--lC~o<!*#evu3X>ckEzxLHO9wcWFYm z>s$j~w%N^bXP~gtuE|8GJefEHZB=vJ9y@f>C8TJ{GWG!49G3yqS&hrcQ>h4*OJZGX z67BGbO3)OpEf<z>$@0YNDx1#%e0*ql%erERZj$ju(mtl}Y?|C!I=aByxyj*Af%QpN ztnBH4>V`x|M~A^_qpyo@m$7W^ZIAaPj6T>NuEa9LTf}fFbL+es+HD2eL|ad5drJ?i zsY=o^o0U-EBMq$`4cZ1m7%YZNF_DVTDkAH<6Pw^wj>(`T8ZGZIZ1BBm#BZ{9LhzLb z!?d0ts(V{II=Df5Fg|sqv$2fP465E6W4-adp4Ql*SoYIOvm{y->1vI)Va*buHRizF zMzkM`z5NGci1sH|b>dbNOG4TXIb{&uK}a5_l~xYS=~|!<S*E2a(zv)O95rZvpd}IS zIha?V)ckq>#8_UxxPIBn`e>xSW?5}r{X(O8<+A9ZM>a<sOm$ODU7Z6itB?2?v`78b zLCfLP#X(gLNVE5Lyfx@kUPgCAS~)ilFS|E~6bw#vr6PKpV(F|waw>15d!l}WBA=0i z%2jsiAxS0F4Ts%FX@KhOI5CDEI!NY}q0{BcYg&2}d_yHmVuKJ~9=^Y9Slrr?5}oj& zXX8Fp7NIO-gI?)y7=#5q@%3upaCdo#QMU_IzN(67_K$SX9j=xz*44***0*#jy0NZK zS|^I%rg5}jPhdZp_J{=M(daX%T-4jcq1UGNL2c3lrpLKqt+IJToJW7p$kwnpF{nxr z@>*Gm=>WH;bT?C}c0=mmsz{`%G)kLeAbI)O&AK(H;jFY&!^$aoz>AQ7HOZ%?bZN`F zn5OMcjhok}hbrBtX0VRJqrcNw!>P>pKJpbcEnRNw&<A}OpS=~Z*WHXFx=Fi{yO&XY zgcdI{3zn6xi1l==-lToutqEu98EkMz8}Q6cyVFQ!x=bjo8cbk!bv&4?*B`TM+GDNj zl7|_M)z1S|YsRAt_a+}dDzH~^y2VrDS00N*uu#w|3Q6hgrF*!UD{An7gKmI0wjGj! zvzxZO^bCl%Ol#kzU~QwjM$K9@NbYJJb&o34Yh}bpp*WepaWSOBCC(FwI!x3+mChPu z=aqP{(-AQoF@7?kJUFz+8;X}6Z+stf8)zAEiYl2QdzVrBDMUBEu^#P;;gO(z4#b#F z+8mF9J=)rdy~VbuXMb9>sm*F-OE|1@U|hID?y^@aWH0K*hmj(9#Y$`NXd)qx5_mqW z(hDAYDT>iM9IcdFZo@6`eN~1_Xlqh5dDS|EluAqLy71_rr4#cUTWK4IEj&#~C8$<) zCAztJ3g5LMvfggM1zq+wvWKay6Pvg$wzgO&Cf8J1RV<0MV5@=dn-HhssA_E4P(zg) zX`mU=_O$I=O&8%=bPt4vQn|1*zN&>bw^TyNB36bSX7{`Z&Gt55QyF!W@T{b#UJ=@t zrsozhqY=-h=+?`qMQ)L<zV)1_Rpm?)Op*6mWZ@d3?983JF<PO~y;xbPx{IO-LA8Ra z1##SS{NGBTMSUjGYIh)uKuf{B){83*gDt7xy@M%D=Ju*AThubJJZN6-O6B|kGnBfK zAxSwh9A<ayM$*OO&5{lD`9YiELx;ntF8xH!XQMqmMH&|LQ$tic&lv9`xVr+Pv_!kA zMxLnGb*+wjwx&t6sRHe`JX+T@O9U&Ub^RF2X(Uoe=n9v49zK#O1GRK*uKoDeojcD8 z@~~Aiq6Of#Pjd|*7Vl`A=R8~VO4LRcR4-rBY*a5<60NDOk2XfCYi(d<V_h@mrN(88 z>JF`IZi+5j5oshG-Bo(Z<gKLeY<Rvlh9`AB*dyfA1=!Yf+>De{0qiPZN>PnoiP~5% zA0vP)c{HWd2<>w(Kgsf`a_u|~oQpkqN=vPDb+7uC^)Z^O{3w@V-gEQop#6(w8@hC3 za;foSeJ(6jIVIw>5n*SnKtC(IjSPg9oa-!BoI%db<W*2wwV<P`t*)y#(bCl#t0QBT zu9|jicai5^3d5E9iG+SIPD_`;6i8-Onm@%nklY%|X)|)*YIiR}iF2N@ZV4X!EL*+0 zH<qZ6Cl=s=VVlla8=SmeLl2hTu6cA%O787&gB~Ty(b+rPCTQtY>(DAq^sI%GmT4|F zdld{Oz9Dd`)5XOr;6XXssND>fQL;l)E_hv;CQIzmC9ihX&=$R#JLR%>P@{R_yFAg+ z*=sbb9_;GJwp#I>^Hg$Bovv=e3;ORTt(M|E3mF*pTDoJ=-p)AI*(p!aoRSi&s=Bl! z6|s_$11{(kRZLE;!M8$9&BRO9!R(M_>H_;<m%GEcCpcXTnohP+XRzylcTV)6g@%ru z01fSiw}Te7t|84CBbDWL7TA2lqv8RWI~uTP#rA}HhU~U%7KU0H=zWsTAV)J4F(lbZ z5As=(Cz_NjVcLSl=oG`Lkv50djY(3=#}McQNN39?N5q9lmY{h{9gw1NRo$VfS;&t~ zlI3No;;M;v_O0(qmUiQl<mt&YPShkY_0W@0Nhh&|Y4xkJsiQ~!E+~n&%EhOXNlffn zMO6nE-Ad&sV~;$1h<2g+qJ|CP#6&C_=h=sE;dt0q<(AgfFK3?G;(gfeq|E8&Lb33u zs;4VAjvA_c2kB!--WgWPys8J--BH=kqFq@W5as+kTtlGX=g~t2*S(PD$4$KK^vYu_ zyuQqb5i7KW%E40{A4dwEN$liRt<iQXAL_AB_Q2rEa{J~@Gbj5>O6W6U0B@=Jmq#bt zGcp{xh7q0F;Pbr0HOMsYFby!vI}E8Od54}nW2c<s2NT$%Q@l8EXfwR_cB*}?!7S$4 z)b5<EJPO&})5c>9s~3+=v4z#z6UPboI3HKG`|m7yux+<A=`@07$F8yuWxLvl|ADx> zjR<WwZN%mptc}=A1GN#GVSqMb(}&td1`*h!ZA9`JS{o7Ol#4)Jg^@^d5xI@HhkF_e zXoLxuy0PKXMj7*E=5&Jth*W7F=bi*}Nis6Ecxj2|RMVuosc|WAqX$qiORK=SC2rz1 z)WYp)Z4fFcbT4L-hfcjR^K%X`cqR{&a&PB)GNAHw^%G$kr1=ZS0Bv8WsT;l!lbb}! zk#RuoJ=)~yCU$7;oo{zj4Tu98$}L^0)pHZh4|3frVNns$RjavqLq~7q=)DYD-a7Y2 z&gxcg=%m~!;0?3yvy<b`)wN2|4N+UE_g);MQkjrk?XCrW>N~fgsY&JLQrd%5XZxt$ zcIP_UQ7nsc!y4)aByF72USox9Kw>jeZ9v-f$|RIA)t;kWSF^OA?Q{DPwda;%b1k_% z(q6*JTG-nz2a_EscaW0uckizx5mRlnq{w~nX*Q+6AVW?{{s9J{l)R~jqm-=4tu*D} zG(_1wI#eZ9#?Z#CB(an;_7DrieT{cZcvYUPTUw-RC`fLbsa6H9raHh_Ff=`>27~`k zx5Y6gaGy_d%>eyc52Cs&m#a;1jpp{)@9vXcddd#z)3KZ0n8ZC;S4?6as2?UV4$ujc z_=eg8hak8|yPwzZL+g89nbaL`2<31!YFEb^g5d6Z)ew~U`n<191GHQJE}>cmg?-um z|LsxX;M4X1t|+AkFLV>rrk5e=p0&sO43z3hAKv+X&qCcxk*2CBKOa@A87xYm*12Pk zB-8ABOQuneQ9>2!D7zZ9^c?~(Y4k3tzc~0Aw5yER7IZ%#_0ZrCH%+@mZ#mO5An&G+ zNBZ!-SkETSJHV4y{4!bJpL)$w&%bx~;1=TYRMC?&9ez+}f9>p3x9idh6tND+EH|dC z^tIn-rAenJq}O99f)kBcabms7I@Dz2t6w)IxptLE>e?msRJ*Ay$4MGbfqXUWqx$OD zNA=dBkLa%>A9?7tP!1!grmF3qcDZ_<)PcU4(KVX#0i@mjwTDt_9iab*tCqI(tgGf< z#_40X*i}eI4j|9thgwd^kwNvU0sP)`!78V5(D<RoX7006&-(X#poUA75<WDnTG1-p z^{j2Gj1olh$~|=$0wR%B)Dlu<YgE_NM4FnS3nMtapps2aa#3}Y#@0rbL~x8jcos*F z1jTvf0r#w?SZg1Cq~UaDsp}+s>V6ikqMb^5d%=Q^SSNl3iJz;&waLhVTuZl!$=rCz zoD%Q<X?JR)hJ5QK;z_q<Y6bND9+BHsM=i7-vj7eJv)wn9`Z&6S9IBz}iJP<Px3$i5 zz1_mK59^|%i2O)K8kWzd!FHk?Gb52f7Nl;r0hXd}meh+-H^&f{pM#6+(S@h&&Y`V2 zZT6JQ&B5(<Ei{vN3;4mG9xl<#F#c;ucdw+T9M(hdo*Z~Z*MOPQDJc2z8Fyrr9*{j; zsh?l#n=T$g)Ttbe8c-UOZ##~xdyW+HFAp#ZF=0SS-WO5_esnI#7>gk<ZeaORloP+% z?8T2*ck|HO<{DU86_hRNXlsi($B@(%;6o0q0ej!-pr~C06ekHcuzW=$-YU=^^GbU# z1Iyy5Gk!Fxs?0r;VZd=t8Mt`tV-VW&?mKMVsx>X;J$6!4-_2ci3jRTcwdCFxi3~8j zrD9Dz%%$QS;&3-K(LFls`D<Zlqn}?Y<sdk;(zpggSy+W<s|6M}QT;<%H1ZT!X{uU~ z-$xNg1MTT+#ZLzzgV7VGw>84YUgf27|MrUz(l3@`DPx~RQ$~jAaHWS0iyc48r?%3+ z7>abb7K@%P=I8WkDkC>kck(ZA8{!?bbfe#`r7&kVOg^<V5PBu*x_nC2i&h3@@+!r9 zR9bpnXGMLZigT-uk;BdB)lymlD#pN0UhSgY@Vli3)s@8U(^x7R{dYxc$q*9u5q#oR zZiDnq&-XLTFXhdlj9OSyA$D`R)#c8iNPBZEr5~^+<v6gDQ*rw=R=`VKWlQ4mb$#93 zm|A1qs_PC&^C_7HMyZSe)C@%RDhkhP?(6AV*5$ex!vK<m^9k{JHB9FT++M*D`oTU5 zUgyI21Zb(ICVO?$=<VZ94e3oVXJYjV`qd)Wp{OP6Tzoz)v(%=5i(%mUO=9)x!d*vg z2j1`ohe*mx$Fz)}y@1NGmlm$zpEu#XIr7sRV(Y;#q#TS_piJFix;IWbV!h4rhK`M~ zPI@#M!P^Cr_guU@ew9wUl8y^@bTC^bJulELFC~XpA^+IlJ8D3oTOBnV&*qPt?p0Q% z&Pn<TY%7y>xoV38s`RYbWezQ)Wqpzr&2jxxQQojq9;IKFgq`2N>K7a8+j^gEDO4Ei zv{w3gGHZ5F%jNK03Q`ljRbl}4R5Xk$18^r(_=O@q?pi+7=tHuv6;79eA=>xx)z$3O z?ZhL-E*+>vC2{&Ppo6tZb(SO~LzBNbB=LEbm(xMi-7DwquGH-<DT8Dem6r`ElR=wx zQZ}iYH@(q`CRX}UK95Wq@D@6Zb3yJ6P2VVJkIBv{X=n4(r)ieb<XVMB20o#k#OqbY zw-LUjX7ULpwc#cGdEjG9bU;_FR!d8oI^!F-23*^G)Q?l3eHK*-k9W<NYP~r$M)w_} zvM$wqp%^~+&7jRR$Q_`~Gr(=1O;3HVXOo9`gEt8Op1P}(`tkfso7Nc0nbeSn@^fwV zbBJ>Me%krj_MXv<{fA!sG?Whv+CKyR53N-?)i2HaJ?E;~t9sYAnI61w_Waz-)x79j zr2BX6-``>0cir$o%l}ZJ^Jal{Y;#=~elaL_wnKi^>C#fFwLM@?>;!Tz9%SH=1v#}O zTGt$HrgwkXzui9gV3%8mwvQlHK<EAV<wXkScf9t*R`*7YcJ&Tox%X$nDJ~|It(@Le z8ZL2=l}ZLJOeM$x12Q$xX;Aw&2q{^^CAgcE7c)bt1El0GCmSRD>j$-giYEll&-URh zE<-Al@ce3BY-Oxv9Wv3$lv$KD##VFxS)GzxvAheu0|Un?S@7m9<U^AUy-XXw<aav( z{U_{w%Y(ZFl-|t%LTB~xm>W&RaA(8sST`ETp#QwP+0Lp<u3Kc@-_Xo2rr>hIT`|0a zwl$^;+{;b5id*yS##nzxKQ9Mtug|3>rQZZj^)(NphHx26xlqYEJ#F8w;CuImJ>jF- z{F)JIQFeOI_&;1h4_0Ye*d4=#p9lIddnTh&ymY5$T|-L`y>_B=Q>`z*WCCTo2gW;k z&7`+@9(YgXf_FRC<DD?IxVNRP0~fT1a=@EKr3I+Oo~e~E{RohH21Y}E>Ve;=CFuUz zi`zqG2=k!o%Br77Q3tVy3RTLTq`IpOuMVM6*bVNPEc`3c|8UXaT9p2Wnv&PAyf5Ei z&wQTY?fZR_Kn?hM5$0N24fL}W=NY)H55)P-sXV=!O`(DG%gl?Z3KOo%egIi|e!rXP zOufDchk}w9mL8`gH(p@kr-JOPLEeeva;Ed-WB?1j@7ZxZEzz%~376K!5-qLm_S<RP zpp@R`Eyo6K!o}_Kmb+qTne68CsY%gV$dCMHH*DMRw%zKEHGO!2qrCfCR|(ksrxP(< z*W+Xi)r5Ut&2JD)*5osTUobDP;YN4G4XgmE_?#Efs|I1agx^w+xrN@a$x3LMK%WTl z@zL`cePE_JzAol}b%bNQpV6nOv}}2AtTwi~rLWVc5No#76rTouyyUfoE%%^&GWJ{c zy~Qe*_v?GHrSu}2Wqo)ly}X0oevdhCQKh2zvh%#(-K(6dO}}7OZ5eq#EFhb{{EOuX z-eTR>7VF{tF@A>T#`rP~(}6%Yeb7f}ZbqM?GTM(y-qLVOs0Vt3^Z2#WF11&puFI=4 z^#e3Fk6&j=H9i-xp$03~g|RL=Hi;fb+b`;nYcEb049?)!hqo*bsEjqq8|Zh(<kMTu z??s^(fG@?@cv{xP@D8K_Rrt2soQEQ`#NfAx4?&5~0Q@{b?Pj^1>Fja2u|CPNSp#le zxuqOk-YTZbaP!f-L*2j9$IVcsf_Ye_Vc5QNbe&bE*~k0aO`aLTB}$h22febvnLHH% zr^om;L&P8j8%lO`pXVKtRVNl%jGpVe@x_P%Yig+GiXN|JyVag#9hKZ;U|C}yy<h=X zFTRxDrhpI9c(~P5JT?6LX|&X3?+#QmUR7ZlI+V+u0|gG8f|-6st6pxP#uNvZs<Xd4 zREMu&#n$6)i+ee};RP?<i}kwe+<9ds+Ldcbp@xJ1({F<8?w4ZPM=PNc(G8cH|H9?X zaaw?M$h&djQ!m2Hj`ygmH6HV+q?ZFPXs74Gc#i|KNZQK-Ez3LP0}DFoa*Cqa`^d`B zS*(}8$sj401ac`W^$CPao8$b1haZNpF%IapCtNBg!qp?*e*H6g27RnyRrQ+F1^F0D zrRbW|4f<Has>GVp1^F29K1UQ(^ErT*tuk^#AHEFY?(6F8ox*#WF-D;cwk8IWaZ|mL zvzu_%M%m)(YAPq2<P`~59^Ti{y3X}I6x53!<r4`DT|SiJf_#i+LXxgyD^{?Nxnco6 zx8k+Khw%xND6&}L06w--MX_yggYIV~>^Hl`x@Hi)EFJ6=u;%gKo~BSUz;hC<!F5NP zLO6K<N%^x+tt^>+Pdy~z8!&d+(01mOcT@c=ePCPpR?V4>oeJ^{%md52`#{PY*?~pf zcZsslE)7?=wJof{Ifc&nnm&6glz!tvJGGRV`sf_>a;&_)pD<K!_)e+8Sf}KgTJgHo zE__E?VA{58+7OF%(+uCzn$UQxA@%3&un_X)Lri*?mcE@Rvaz;gf*k5=q`3y4nov^* z{j8)n>HCYx#imY%YS0`1rMNAoBe2PgL-r4Dm{V);XQk>Pg2mH+Ru6s+D0LEQpi=r7 zzkezH8jMq<o%xFEd###wxa&n~8YQnz^O_u{n{HLL3wz=?A=Wm)JA2V+tMs=9`Nvfr zA^y}s)cF{ptXOP`*a`H}2|TaR@6kT^U_A`mJY6v#&wj}~oe3Y$T%SAmg$eev1G+Qd zVo{&7Ga8_TbnBBW>C=zN*Tpq}Cj9QmqYOHhgu|W>{6$+gZj7$s*BwXuTY91$c)PRu zmSI<Hga2E)Mr&fD=R=3aY8yjemDBuqpBTOciO)ME=!nen6;b^ukH*O11WHu1tiC={ z(@Yrkf>tD&7A<eC#aBOAs<t886sfPJ^nxa4Th_RkV*FI9y0*5lu71HX0--P3d}Ko; zy0rQT`a&bJSKmFsXoRm(MPUrSfkt1(Gz6m_820L?j*3BOknS~l6ZnkgY79&UU3v|A ze1_*A(ba8uF4#pMX%Vd(S`w}JU4j?tHCk7ZA@prpq`G4mFcZCoM9|UGN<XbKHmFEA zd$mZy=n}QPM%U`LUSq=v_#fpjRN|X|y&c%HlFwHT_!&$4(}4PGsQUYsei)f+67o>r zGvzm;ljU%(uDeCm^|ebPgsE;ivc85AHH#uOTptUXqLCGmdag>O8<s6uLUc!@PDJag zmqu!%4RsByNb@x`MjEOc6{>L={TPm<o0{<s-=&mlu4&+?ZfT^E6U|3bw7izlO?3<F zt2w^~b;>}Muct|<3RkUy-vv)aq`f~BUuf)p%}03K3+juXs!Hv&YBSOph+Tgd)J`T0 z$wYGKHM)D^^oe2@9P4iBiP<n(QtLV!>cF>sZ9r+)?N&k3NVwV9cA?2>{06i%SR<9H zKKQCN^sH)+_Qd1pqdl=$6wR||lhLy(7VV6!PH+M*5o=c|G7*iHsCWfgyvI<Qls{A& zuN&82lm(h_@xFxmYz)8B&hzb<z7Bc0T@Rk|;X@+$nMqF~+QGIeb*d+D8lSR-Hhgb} zzslU*(H%pf1acL%wH@CswF@qEWuXI53a?vlZRtbN<U`NBMjKuz$(^{(Mxihw#g<4q zVZ_$+Fb4~io!ou#q2<=qQT5GX^vhO!`k|{2-{8gO`#Qjw&F~6HoD__<^iaR0)`w`2 zZx#E$Oq+r|Vd!qGJg+`@3`SVegJU;6{a8sM4I}XKd?eJ^L73QjCwKmmHoipZ%3(bo zFhsj?>{7iNG9@KpI9#Z{*!q@k9Mq)m0g>Zk>ye<GxXRdp@=;<?Ifa3bzM-wEhm$O+ zku9rnI8A+KTd{Z%%!Wall^AXGN_{9+pH4=C$rylJ<OAaFkBOh+2Cz23TNRv7jr)I( z=cn^V6HfHGSM?>XCmDWzK3Pad00$Dlt52~ts_jhmm0va4uBIN^sy<DiKWk6R0gv^y zVcZZWAxjk!7I>au(M^C_H_?J*D38Uo`aPhDZCbcw*`d`-qS3l&i;-yWKz$`PMmHEI z;giXxk@X@z0{;}gBW(`DC*u$0&nO$ldZdq+bmvCHICldW-odArHN#>T!%EF?zl)*J z#c)NpVNeJ>3*?)kc2QIHq5#q%3HVq&{}C==WEkJ!j}U1H_^drJ2IB~i4_b2?pI<ld z&3a?eSracCKVoKZ>yIX0mU;U<BX8S$VpjFav(q+jcyHHF-YS?>d;XR256>UJW$8Yj z-}DRc--Ylf!b=DrBUs2Z7h!*da)erhW&|pk2|5*w3PgYBQb7>EwU9xB+(SI%9r6nO zkxvOnE+tpeANv@w8^=xoj{HJ@du>v>e=qQDz`64}7<m!A4SCVu9b!wyA_Y@5k*~;J zvWINeHfev8JpHBex8@<AQ%J=_vQ)O47F@P@QgQjYcWgS+s0B<WwIO`ELfQBdzAjFG zCBqf`Lj@Y2zyPuVUw-F5ohRuy8zEPrIe%&gX+}E!Q7cjTQaiwx;tgs8gdKq}3Slh5 zI0R}Rd5G~Db_1UmH}*l8h_Elheh5ULgt!pl0D&hX#y8m6rkRM#5XuoM5ULOkMmPk4 zWalG36k!1ZK5cH`3-1O#2XEl3@&;AgQ3yvP9E%V|ScMQnScA}kuoj^UfpndKxECRT z(1*~EfGRf742%;Ih-Wk6QxHx=_yNM12xlRbY&koWSiazu_kxAbU3kaEn}0QJ^3JK- z@0)w0Sz7*&qR$R|?a{-R*8cj{2j9K#)m`^)uK3sNwr|dj0KRYI0sWH}9yTJgX>H$6 ze}2ZfM+g3=FKzQz53Gq*e0ucJo8K%r`rxmw_<Y60h0&ICwv0Ue7k6DV<>ld%o~VBK zhm%ga<%^c{|FUv%|HkrD&;R|QPiGzbZd1+^tMB^wr9UnE<EZTZJO8`0{ht4RAw1)% z*BWz9T3vBt$&a6^e)r?Lt2QIOf8!~?|JCP@e(>4+k|qCM{>FiSd%S(j+LQXu`O(97 zeRRm=qMPR<{Q07}x1aaXVTHdu>FIxcJ^#|9w*C5q(EG!0ezhyR`H}O1pLY3si(g!I z)_Grk5Z^xbm}d_8*}v|2^0$XQcg32n^u11fckwlcr2k;^7R3A4e6jb3_kA&K*L%Ny z`t|e^Rv(`G$GNM@Kicui;`(zc{}9XmZT+_PH}1Lj#l>|K8(+HYqg@k9noB>PI(lYD z`Lg3GF8J!Tj;`u|Kfm|9@g2sc)})`jbxh42zn*%?A5R;WH|Lh8H&#q*ifxR%Gal&+ z|Jrf;3xAE4{Nb|vXxF0Gwtaf-M5DFflFcQf$}ioq^Rcfk-0{{0jd_o3ZTv8^^=Hi& zt~a+W&w1mf$~lXxKl*Lx)i*vIR(sxg)qj6{+;2{Oqj+ZXCGQ`z&r3(1cje-%4!Gdq zk4LwBJ8|DjpSkJgGZ+52{Nqn9yXN3?4jaAT_>!5AT>Z_@k-q4YC-V#PKm74+s}>*l z;Sulr=!D_%@a@r6<)7wN-81?9y`J5eZW!kvT#4{2gohBGMR*_KTZB>QNQDTM2z3a@ zAjA>2B3zDeE5aWTo<?{V;a><N(DC*|C`VX`a1_FNge?dcAzX)WH^SoxuOfVckdBU; zhcFFc9>U=WZ3r6>euQuZ!fgl-B0Pie9>O;WBQdy7La0Dkgm5%M7s6=>7bEOMxCi0S z2(KZ0ijaZHU_8QfghLP-5n>1%5zaxl65&?}4<S5@@IJz~2%|8N6e3h2)FB*$5Jxy2 z;Sz-F5q^j8KM1cQ{1YJ)gX7)^#R&5enh;haY(h8};VOjN5gtZ(4&eiYe<S2zJlr2) z7Q$f&$0BqioPn?n;Rb}?BRqldH-yg+vM|WyBg{akMrcM@gK#3kc?dfY?m&11;dz7) z5xzqhJrZLaLKVVdgyRrSK==Vd80DsMxV;+oAjaQ@9)&uuP7S9({T9O$aXoUFjT(oU zfl!T(;G|N8dJ%)S$+Lsexn7~>VBDmk8GpsA73$n#n`;XuEYfuuPna~V7%MRd5~_Kb zEx2B|{(&)ej8gv@N<dr@i)K6)d<X?5)VI}kfx18-)WJZB5&J+Fu}_9Bpf)38p^TWV znD53cBB)((49U;KWFX~w`%s0tc!G_3pkJZ3I2NCCphA_Pp@`rVnY#~ewhJ)_a|@~8 z;N%#UDp-vwkfJ^-M%32W<?5ZI1mAN6=c8Pt>v&Zzq>M|-6zYb(Y$GOMCL^xuJR5cE z6oq;OZBtC$OA7RGy=_F^48?WAXq)S5%&MfT69a<?ez%`OU5dUaE^NRYOk4+oOHdn; zIia?~m4d300_}1NbS|tWuG=wjYZr=F*E*hfe5vB<0hhFcch)J?O$XV6A4*%_Qf=oL z5P#i_N)ty<6jO5@Q_nm=>53vpF*PKD;~YniKU{HLH`UJZ6inx2{durY1b0Z){@m$Z zSz;H>|5C<E5!@F##jdZgOdwr%FS2$0W2Qp2jj;va?p3INqNj@B{|f5L#kSx&@%`!W zz4ZF4gsa36{1*(O9BY@@TrK?y6?Gc<CaIxQ(Wu0FywslsOHiMJDis%Ai#8#sn<U2@ zk)t^0(rHTYYjk4aItJa8j3}+Pxw^#@Cpn&&EY(rtRL6m<mEhdzwk~|_k#&8uw~d-8 z&G&OG9wo;+#rIdD(!_=N7+=T;I6`whAY8YgcWCR!D6R*?HrL6+73z;Dg*41IG4&#t zD(d59it8P$R>g<}`XS|bFN!@9G5&T4stCG-YlhV0hnUGlePfprJk1$#uaipab1H2D z)}^HW<04yE=6(wGC}wL>zf}sf6P$v2U36`8bd_OrBV9j*sp5&>tyHLgpsR}D(;|3| zBbbOQuFvP%T*o3wx&kPe6sS}LheJ^O6@%5pHOXlvd&|)A@HpFuv6YJJB^V_}6iVlN z2rWl+?U3$Xita8s?v%0cL^xaor;A|3>9yZ>D)sllWDz_BgF4yuxKr#}vA)hJ_6jle zWyjRxAV7l4f_9EE@#@ZMyYsz_;u2ROre3k@0O7j8;krn2T<hc*C{cpfqdrA2UZ7Ch zvuxB)#IDaAyGBbRU%bTj>eAIpa9^}p(RHJY00$x)L7gJ?Sb=(k`|0nP^-Ays$6vdu z6l$lF<ILp>^+v?j^#ukgD)v}(RZ)LNuR<N*3>}r?!V{b^`qq_-Ys_TZhzq11w>$MX zO9q9*&=5rZb;l^d0tgD~9T^L&98XLW=d1uq8q>v6pi7(rwTmaFI-Yn*bd7U#JtI|X zp{(MsCUkQu_B5wz@uZhg&n&jNP8HPaK#38Li*w#}obxi;73tdK=vpDBp5d7KcWF6S zJ1qw?{FkdD(&70Nym30P`xz$GtH13Mzb5f$6(`C61bEn1{3FB|DvM7>jFGq)BRs<$ zh|$E0n*>HF8LmJKoyDjiBL^{LXqco`IBLw;2jd}aTNERrf{!41xOnNCXkO?&881ov zXNez{_(a6u&*+i(2#FgcE|GYO#A78MA@M((mHdYiKQ8e@5??3rl@jlbfr#=OE%7G{ zX)rM|P6U$dT!@(HJ5@O{u9El%5^t8cMdBkRMw@22N{P|786G1sdOgF4INpGm@>?bF z3W=*Fu8_Du;#`S$AVxhjOKe>(u*4R%1ENc8T`aJ~)&&AfY@I8x#MapYOKefONuR{l z7J((U$R9+P*xD$t#MXSku)SGgYp%c&TU7!}Y$ec;_5#1eR=2<sTb%++Y_$t4vDGH9 z#MbcwOKcq@u*B980!wT)3oNnKAh5*N5`iVQ76~k|RV%Q>)_j2_w&n^fu~j9o#8$b$ z5?dt#OKeRSSYm66z!F>g3oNl!Ah5*N1c4>C@&uOH$`x2*Ym~qeTiF6jY-I^7v1JJ? zv1JG>vGol)8`ZDG)|UcHZ2ePUiLH+Xme~4GV2Q1F1(w))Q(%d$*94Z>dP!i3t>*-m z*!ru$5?fCSEV1>tz!F=J3M{epkiZgK4+t!=^?QLOw(b&GV(U(UCAMx8SYqpDfhD%C z7g%EJ7XnLc?GRXE>vDl5wzdl_v30S)5?dDtEU|U2z!F<$3oNnq1A!&Bwg@b-wOL?^ zt&IXpY$XJi*y<KoVyjbNiLG{lCAQiGme@L8V2Q0`1eVx3LSTulW`QNP8U&WuS|YH- z)*^u=wrT~I*qSe}#MWGaCAO*rme?v6SYoS0V2Q2i0!wU75m;hte}N^o3Ivwenjo;m zR-V8TTe$*DY>g6FVk=u<iLESwCAKVqCAJKKCAPl7q{sbV#nzVsOKkm9V2Q1d1(w+Q zP+*CzcLkQ%dQ)JDt=9yW*m_A|iLK`Zme~5Mz!F<e3M{epxWE!yj|wcY^^m|4TMq~< zvGsd_CARJoSYqo=fhD$X6If#FW`QNPt`}Hh>lXq`Z0!(OV(W5&CAPK;EU|U5z!F;* z2rRL6uD}voXA3N`^#g$=wzdc?v9(!XiLH$SOKc?sme}eRSYoSFV2Q1EfhD%u1eVx3 zUSNr>V+5AiIznKHdA$Nu2CYZ1uFWVxjCJgY0>rc~M8xrA03*P#oe=n&O)vysV+h;y z1f%Ug`H?~#NiazxroUE!=L@`E;0pvU1kXsMY28PE!;l^c`QwF75z+PEhXjM3C%EeY zyU6?q%nje=qyNkYKjVXCJqxV*y9SY4pR9j1**M%sH=_LTKh=r5D4k=7w+ct<lK?F2 zCb_vi=klUBAb=<Mr7Nn!W%Sw9cyCO8Oxi#{<Eg^I9De(^J{*9PB1g4#;-_j+QV(c( z*M<(9g2QV{@aBG^x)0a#&;4A#zKllK;BX;+yxkke8^!V3yl8*Pz(t)AYj@l2JMTbL poEVPA`1gs?1ii;03<KQf2w;xycw=M{499N`N(`Oy$&gyZ_<u>Ftu_Dv diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/binding.Makefile b/node_modules/gulp-sass/node_modules/node-sass/build/binding.Makefile deleted file mode 100644 index 4634db78..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/binding.Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# This file is generated by gyp; do not edit. - -export builddir_name ?= build/./. -.PHONY: all -all: - $(MAKE) binding diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/binding.target.mk b/node_modules/gulp-sass/node_modules/node-sass/build/binding.target.mk deleted file mode 100644 index bccb9f53..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/binding.target.mk +++ /dev/null @@ -1,177 +0,0 @@ -# This file is generated by gyp; do not edit. - -TOOLSET := target -TARGET := binding -DEFS_Debug := \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DBUILDING_NODE_EXTENSION' \ - '-DDEBUG' \ - '-D_DEBUG' - -# Flags passed to all source files. -CFLAGS_Debug := \ - -O0 \ - -gdwarf-2 \ - -mmacosx-version-min=10.7 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Debug := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Debug := \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Debug := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Debug := - -INCS_Debug := \ - -I/Users/tmshv/.node-gyp/0.11.11/src \ - -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include \ - -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include \ - -I$(srcdir)/node_modules/nan - -DEFS_Release := \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DBUILDING_NODE_EXTENSION' - -# Flags passed to all source files. -CFLAGS_Release := \ - -Os \ - -gdwarf-2 \ - -mmacosx-version-min=10.7 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Release := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Release := \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Release := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Release := - -INCS_Release := \ - -I/Users/tmshv/.node-gyp/0.11.11/src \ - -I/Users/tmshv/.node-gyp/0.11.11/deps/uv/include \ - -I/Users/tmshv/.node-gyp/0.11.11/deps/v8/include \ - -I$(srcdir)/node_modules/nan - -OBJS := \ - $(obj).target/$(TARGET)/binding.o \ - $(obj).target/$(TARGET)/sass_context_wrapper.o \ - $(obj).target/$(TARGET)/libsass/ast.o \ - $(obj).target/$(TARGET)/libsass/base64vlq.o \ - $(obj).target/$(TARGET)/libsass/bind.o \ - $(obj).target/$(TARGET)/libsass/constants.o \ - $(obj).target/$(TARGET)/libsass/context.o \ - $(obj).target/$(TARGET)/libsass/contextualize.o \ - $(obj).target/$(TARGET)/libsass/copy_c_str.o \ - $(obj).target/$(TARGET)/libsass/error_handling.o \ - $(obj).target/$(TARGET)/libsass/eval.o \ - $(obj).target/$(TARGET)/libsass/expand.o \ - $(obj).target/$(TARGET)/libsass/extend.o \ - $(obj).target/$(TARGET)/libsass/file.o \ - $(obj).target/$(TARGET)/libsass/functions.o \ - $(obj).target/$(TARGET)/libsass/inspect.o \ - $(obj).target/$(TARGET)/libsass/output_compressed.o \ - $(obj).target/$(TARGET)/libsass/output_nested.o \ - $(obj).target/$(TARGET)/libsass/parser.o \ - $(obj).target/$(TARGET)/libsass/prelexer.o \ - $(obj).target/$(TARGET)/libsass/sass.o \ - $(obj).target/$(TARGET)/libsass/sass_interface.o \ - $(obj).target/$(TARGET)/libsass/source_map.o \ - $(obj).target/$(TARGET)/libsass/to_c.o \ - $(obj).target/$(TARGET)/libsass/to_string.o \ - $(obj).target/$(TARGET)/libsass/units.o - -# Add to the list of files we specially track dependencies for. -all_deps += $(OBJS) - -# CFLAGS et al overrides must be target-local. -# See "Target-specific Variable Values" in the GNU Make manual. -$(OBJS): TOOLSET := $(TOOLSET) -$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) -$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)) - -# Suffix rules, putting all outputs into $(obj). - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -# Try building from generated source, too. - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -# End of this set of suffix rules -### Rules for final target. -LDFLAGS_Debug := \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.7 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Debug := \ - -Wl,-search_paths_first - -LDFLAGS_Release := \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.7 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Release := \ - -Wl,-search_paths_first - -LIBS := \ - -undefined dynamic_lookup - -$(builddir)/binding.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) -$(builddir)/binding.node: LIBS := $(LIBS) -$(builddir)/binding.node: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE)) -$(builddir)/binding.node: TOOLSET := $(TOOLSET) -$(builddir)/binding.node: $(OBJS) FORCE_DO_CMD - $(call do_cmd,solink_module) - -all_deps += $(builddir)/binding.node -# Add target alias -.PHONY: binding -binding: $(builddir)/binding.node - -# Short alias for building this executable. -.PHONY: binding.node -binding.node: $(builddir)/binding.node - -# Add executable to "all" target. -.PHONY: all -all: $(builddir)/binding.node - diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/config.gypi b/node_modules/gulp-sass/node_modules/node-sass/build/config.gypi deleted file mode 100644 index 48e65d23..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/config.gypi +++ /dev/null @@ -1,119 +0,0 @@ -# Do not edit. File was generated by node-gyp's "configure" step -{ - "target_defaults": { - "cflags": [], - "default_configuration": "Release", - "defines": [], - "include_dirs": [], - "libraries": [] - }, - "variables": { - "clang": 1, - "host_arch": "x64", - "node_install_npm": "true", - "node_prefix": "", - "node_shared_cares": "false", - "node_shared_http_parser": "false", - "node_shared_libuv": "false", - "node_shared_openssl": "false", - "node_shared_v8": "false", - "node_shared_zlib": "false", - "node_tag": "", - "node_use_dtrace": "true", - "node_use_etw": "false", - "node_use_mdb": "false", - "node_use_openssl": "true", - "node_use_perfctr": "false", - "python": "/usr/bin/python", - "target_arch": "x64", - "uv_parent_path": "/deps/uv/", - "uv_use_dtrace": "true", - "v8_enable_gdbjit": 0, - "v8_enable_i18n_support": 0, - "v8_no_strict_aliasing": 1, - "v8_optimized_debug": 0, - "v8_random_seed": 0, - "v8_use_snapshot": "false", - "nodedir": "/Users/tmshv/.node-gyp/0.11.11", - "copy_dev_lib": "true", - "standalone_static_library": 1, - "save_dev": "true", - "browser": "", - "viewer": "man", - "rollback": "true", - "usage": "", - "globalignorefile": "/usr/etc/npmignore", - "init_author_url": "", - "shell": "/bin/bash", - "parseable": "", - "shrinkwrap": "true", - "email": "", - "init_license": "ISC", - "cache_max": "null", - "init_author_email": "", - "sign_git_tag": "", - "cert": "", - "git_tag_version": "true", - "local_address": "", - "long": "", - "registry": "https://registry.npmjs.org/", - "fetch_retries": "2", - "npat": "", - "key": "", - "message": "%s", - "versions": "", - "globalconfig": "/usr/etc/npmrc", - "always_auth": "", - "cache_lock_retries": "10", - "heading": "npm", - "fetch_retry_mintimeout": "10000", - "proprietary_attribs": "true", - "json": "", - "description": "true", - "engine_strict": "", - "https_proxy": "", - "init_module": "/Users/tmshv/.npm-init.js", - "userconfig": "/Users/tmshv/.npmrc", - "node_version": "v0.11.11", - "user": "", - "editor": "vi", - "save": "", - "tag": "latest", - "global": "", - "optional": "true", - "username": "", - "bin_links": "true", - "force": "", - "searchopts": "", - "depth": "null", - "rebuild_bundle": "true", - "searchsort": "name", - "unicode": "true", - "fetch_retry_maxtimeout": "60000", - "ca": "", - "strict_ssl": "true", - "dev": "", - "fetch_retry_factor": "10", - "group": "20", - "cache_lock_stale": "60000", - "version": "", - "cache_min": "10", - "cache": "/Users/tmshv/.npm", - "searchexclude": "", - "color": "true", - "save_optional": "", - "ignore_scripts": "", - "user_agent": "node/v0.11.11 darwin x64", - "cache_lock_wait": "10000", - "production": "", - "save_bundle": "", - "umask": "18", - "git": "git", - "init_author_name": "", - "onload_script": "", - "tmp": "/var/folders/xb/z59jfbz97cgg04hsk3kg61cc0000gn/T/", - "unsafe_perm": "true", - "link": "", - "prefix": "/usr" - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/build/gyp-mac-tool b/node_modules/gulp-sass/node_modules/node-sass/build/gyp-mac-tool deleted file mode 100755 index 12edee94..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/build/gyp-mac-tool +++ /dev/null @@ -1,265 +0,0 @@ -#!/usr/bin/env python -# Generated by gyp. Do not edit. -# Copyright (c) 2012 Google Inc. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Utility functions to perform Xcode-style build steps. - -These functions are executed via gyp-mac-tool when using the Makefile generator. -""" - -import fcntl -import json -import os -import plistlib -import re -import shutil -import string -import subprocess -import sys - - -def main(args): - executor = MacTool() - exit_code = executor.Dispatch(args) - if exit_code is not None: - sys.exit(exit_code) - - -class MacTool(object): - """This class performs all the Mac tooling steps. The methods can either be - executed directly, or dispatched from an argument list.""" - - def Dispatch(self, args): - """Dispatches a string command to a method.""" - if len(args) < 1: - raise Exception("Not enough arguments") - - method = "Exec%s" % self._CommandifyName(args[0]) - return getattr(self, method)(*args[1:]) - - def _CommandifyName(self, name_string): - """Transforms a tool name like copy-info-plist to CopyInfoPlist""" - return name_string.title().replace('-', '') - - def ExecCopyBundleResource(self, source, dest): - """Copies a resource file to the bundle/Resources directory, performing any - necessary compilation on each resource.""" - extension = os.path.splitext(source)[1].lower() - if os.path.isdir(source): - # Copy tree. - # TODO(thakis): This copies file attributes like mtime, while the - # single-file branch below doesn't. This should probably be changed to - # be consistent with the single-file branch. - if os.path.exists(dest): - shutil.rmtree(dest) - shutil.copytree(source, dest) - elif extension == '.xib': - return self._CopyXIBFile(source, dest) - elif extension == '.storyboard': - return self._CopyXIBFile(source, dest) - elif extension == '.strings': - self._CopyStringsFile(source, dest) - else: - shutil.copy(source, dest) - - def _CopyXIBFile(self, source, dest): - """Compiles a XIB file with ibtool into a binary plist in the bundle.""" - - # ibtool sometimes crashes with relative paths. See crbug.com/314728. - base = os.path.dirname(os.path.realpath(__file__)) - if os.path.relpath(source): - source = os.path.join(base, source) - if os.path.relpath(dest): - dest = os.path.join(base, dest) - - args = ['xcrun', 'ibtool', '--errors', '--warnings', '--notices', - '--output-format', 'human-readable-text', '--compile', dest, source] - ibtool_section_re = re.compile(r'/\*.*\*/') - ibtool_re = re.compile(r'.*note:.*is clipping its content') - ibtoolout = subprocess.Popen(args, stdout=subprocess.PIPE) - current_section_header = None - for line in ibtoolout.stdout: - if ibtool_section_re.match(line): - current_section_header = line - elif not ibtool_re.match(line): - if current_section_header: - sys.stdout.write(current_section_header) - current_section_header = None - sys.stdout.write(line) - return ibtoolout.returncode - - def _CopyStringsFile(self, source, dest): - """Copies a .strings file using iconv to reconvert the input into UTF-16.""" - input_code = self._DetectInputEncoding(source) or "UTF-8" - - # Xcode's CpyCopyStringsFile / builtin-copyStrings seems to call - # CFPropertyListCreateFromXMLData() behind the scenes; at least it prints - # CFPropertyListCreateFromXMLData(): Old-style plist parser: missing - # semicolon in dictionary. - # on invalid files. Do the same kind of validation. - import CoreFoundation - s = open(source, 'rb').read() - d = CoreFoundation.CFDataCreate(None, s, len(s)) - _, error = CoreFoundation.CFPropertyListCreateFromXMLData(None, d, 0, None) - if error: - return - - fp = open(dest, 'wb') - fp.write(s.decode(input_code).encode('UTF-16')) - fp.close() - - def _DetectInputEncoding(self, file_name): - """Reads the first few bytes from file_name and tries to guess the text - encoding. Returns None as a guess if it can't detect it.""" - fp = open(file_name, 'rb') - try: - header = fp.read(3) - except e: - fp.close() - return None - fp.close() - if header.startswith("\xFE\xFF"): - return "UTF-16" - elif header.startswith("\xFF\xFE"): - return "UTF-16" - elif header.startswith("\xEF\xBB\xBF"): - return "UTF-8" - else: - return None - - def ExecCopyInfoPlist(self, source, dest, *keys): - """Copies the |source| Info.plist to the destination directory |dest|.""" - # Read the source Info.plist into memory. - fd = open(source, 'r') - lines = fd.read() - fd.close() - - # Insert synthesized key/value pairs (e.g. BuildMachineOSBuild). - plist = plistlib.readPlistFromString(lines) - if keys: - plist = dict(plist.items() + json.loads(keys[0]).items()) - lines = plistlib.writePlistToString(plist) - - # Go through all the environment variables and replace them as variables in - # the file. - IDENT_RE = re.compile('[/\s]') - for key in os.environ: - if key.startswith('_'): - continue - evar = '${%s}' % key - evalue = os.environ[key] - lines = string.replace(lines, evar, evalue) - - # Xcode supports various suffices on environment variables, which are - # all undocumented. :rfc1034identifier is used in the standard project - # template these days, and :identifier was used earlier. They are used to - # convert non-url characters into things that look like valid urls -- - # except that the replacement character for :identifier, '_' isn't valid - # in a URL either -- oops, hence :rfc1034identifier was born. - evar = '${%s:identifier}' % key - evalue = IDENT_RE.sub('_', os.environ[key]) - lines = string.replace(lines, evar, evalue) - - evar = '${%s:rfc1034identifier}' % key - evalue = IDENT_RE.sub('-', os.environ[key]) - lines = string.replace(lines, evar, evalue) - - # Remove any keys with values that haven't been replaced. - lines = lines.split('\n') - for i in range(len(lines)): - if lines[i].strip().startswith("<string>${"): - lines[i] = None - lines[i - 1] = None - lines = '\n'.join(filter(lambda x: x is not None, lines)) - - # Write out the file with variables replaced. - fd = open(dest, 'w') - fd.write(lines) - fd.close() - - # Now write out PkgInfo file now that the Info.plist file has been - # "compiled". - self._WritePkgInfo(dest) - - def _WritePkgInfo(self, info_plist): - """This writes the PkgInfo file from the data stored in Info.plist.""" - plist = plistlib.readPlist(info_plist) - if not plist: - return - - # Only create PkgInfo for executable types. - package_type = plist['CFBundlePackageType'] - if package_type != 'APPL': - return - - # The format of PkgInfo is eight characters, representing the bundle type - # and bundle signature, each four characters. If that is missing, four - # '?' characters are used instead. - signature_code = plist.get('CFBundleSignature', '????') - if len(signature_code) != 4: # Wrong length resets everything, too. - signature_code = '?' * 4 - - dest = os.path.join(os.path.dirname(info_plist), 'PkgInfo') - fp = open(dest, 'w') - fp.write('%s%s' % (package_type, signature_code)) - fp.close() - - def ExecFlock(self, lockfile, *cmd_list): - """Emulates the most basic behavior of Linux's flock(1).""" - # Rely on exception handling to report errors. - fd = os.open(lockfile, os.O_RDONLY|os.O_NOCTTY|os.O_CREAT, 0o666) - fcntl.flock(fd, fcntl.LOCK_EX) - return subprocess.call(cmd_list) - - def ExecFilterLibtool(self, *cmd_list): - """Calls libtool and filters out '/path/to/libtool: file: foo.o has no - symbols'.""" - libtool_re = re.compile(r'^.*libtool: file: .* has no symbols$') - libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE) - _, err = libtoolout.communicate() - for line in err.splitlines(): - if not libtool_re.match(line): - print >>sys.stderr, line - return libtoolout.returncode - - def ExecPackageFramework(self, framework, version): - """Takes a path to Something.framework and the Current version of that and - sets up all the symlinks.""" - # Find the name of the binary based on the part before the ".framework". - binary = os.path.basename(framework).split('.')[0] - - CURRENT = 'Current' - RESOURCES = 'Resources' - VERSIONS = 'Versions' - - if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)): - # Binary-less frameworks don't seem to contain symlinks (see e.g. - # chromium's out/Debug/org.chromium.Chromium.manifest/ bundle). - return - - # Move into the framework directory to set the symlinks correctly. - pwd = os.getcwd() - os.chdir(framework) - - # Set up the Current version. - self._Relink(version, os.path.join(VERSIONS, CURRENT)) - - # Set up the root symlinks. - self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary) - self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES) - - # Back to where we were before! - os.chdir(pwd) - - def _Relink(self, dest, link): - """Creates a symlink to |dest| named |link|. If |link| already exists, - it is overwritten.""" - if os.path.lexists(link): - os.remove(link) - os.symlink(dest, link) - - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) diff --git a/node_modules/gulp-sass/node_modules/node-sass/examples/middleware.js b/node_modules/gulp-sass/node_modules/node-sass/examples/middleware.js deleted file mode 100644 index 4c2d6a2c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/examples/middleware.js +++ /dev/null @@ -1,23 +0,0 @@ - -/** - * Module dependencies. - */ - -var connect = require('connect'), - sass = require('../sass'); - -// Setup server -// $ curl http://localhost:3000/test.css - -var server = connect.createServer( - sass.middleware({ - src: __dirname, - dest: __dirname + '/public', - debug: true, - outputStyle: 'compressed' - }), - connect.static(__dirname + '/public') -); - -server.listen(3000); -console.log('server listening on port 3000'); diff --git a/node_modules/gulp-sass/node_modules/node-sass/examples/public/.npmignore b/node_modules/gulp-sass/node_modules/node-sass/examples/public/.npmignore deleted file mode 100644 index 23188627..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/examples/public/.npmignore +++ /dev/null @@ -1 +0,0 @@ -*.css \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/examples/test.scss b/node_modules/gulp-sass/node_modules/node-sass/examples/test.scss deleted file mode 100644 index 0d646d51..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/examples/test.scss +++ /dev/null @@ -1,13 +0,0 @@ -#navbar { - width: 70%; - height: 23px; } - -#navbar ul { - list-style-type: none; } - -#navbar li { - float: left; - a { - font-weight: bold; - } -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/lib/cli.js b/node_modules/gulp-sass/node_modules/node-sass/lib/cli.js deleted file mode 100644 index debe2b0f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/lib/cli.js +++ /dev/null @@ -1,156 +0,0 @@ -var watch = require('node-watch'), - render = require('./render'), - path = require('path'), - Emitter = require('events').EventEmitter, - cwd = process.cwd(); - -var optimist = require('optimist') - .usage('Compile .scss files with node-sass.\nUsage: $0 [options] <input.scss> [<output.css>]') - .options('output-style', { - describe: 'CSS output style (nested|expanded|compact|compressed)', - 'default': 'nested' - }) - .options('source-comments', { - describe: 'Include debug info in output (none|normal|map)', - 'default': 'none' - }) - .options('source-map', { - describe: 'Emit source map' - }) - .options('include-path', { - describe: 'Path to look for @import-ed files', - 'default': cwd - }) - .options('watch', { - describe: 'Watch a directory or file', - alias: 'w' - }) - .options('output', { - describe: 'Output css file', - alias: 'o' - }) - .options('stdout', { - describe: 'Print the resulting CSS to stdout' - }) - .options('help', { - describe: 'Print usage info', - type: 'string', - alias: 'help' - }) - .check(function(argv){ - if (argv.help) { return true; } - if (argv._.length < 1) { return false; } - }); - -// throttle function, used so when multiple files change at the same time -// (e.g. git pull) the files are only compiled once. -function throttle(fn) { - var timer; - var args = Array.prototype.slice.call(arguments, 1); - return function() { - var self = this; - clearTimeout(timer); - timer = setTimeout(function() { - fn.apply(self, args); - }, 20); - }; -} - -function isSassFile(file) { - return file.match(/\.(sass|scss)/); -} - -exports = module.exports = function(args) { - var argv = optimist.parse(args); - - if (argv.help) { - optimist.showHelp(); - process.exit(0); - return; - } - - var emitter = new Emitter(); - - emitter.on('error', function(err){ - console.error(err); - process.exit(1); - }); - - var options = { - stdout: argv.stdout - }; - - var inFile = options.inFile = argv._[0]; - var outFile = options.outFile = argv.o || argv._[1]; - - if (!outFile) { - var suffix = '.css'; - if (/\.css$/.test(inFile)) { - suffix = ''; - } - outFile = options.outFile = path.join(cwd, path.basename(inFile, '.scss') + suffix); - } - - // make sure it's an array. - options.includePaths = argv['include-path']; - if (!Array.isArray(options.includePaths)) { - options.includePaths = [options.includePaths]; - } - - // if it's an array, make it a string - options.outputStyle = argv['output-style']; - if (Array.isArray(options.outputStyle)) { - options.outputStyle = options.outputStyle[0]; - } - - // if it's an array, make it a string - options.sourceComments = argv['source-comments']; - if (Array.isArray(options.sourceComments)) { - options.sourceComments = options.sourceComments[0]; - } - - // Set the sourceMap path if the sourceComment was 'map', but set source-map was missing - if (options.sourceComments === 'map' && !argv['source-map']) { - argv['source-map'] = true; - } - - // set source map file and set sourceComments to 'map' - if (argv['source-map']) { - options.sourceComments = 'map'; - if (argv['source-map'] === true) { - options.sourceMap = outFile + '.map'; - } else { - options.sourceMap = path.resolve(cwd, argv['source-map']); - } - } - - if (argv.w) { - - var watchDir = argv.w; - - if (watchDir === true) { - watchDir = []; - } else if (!Array.isArray(watchDir)) { - watchDir = [watchDir]; - } - watchDir.push(inFile); - - var throttledRender = throttle(render, options, emitter); - - watch(watchDir, function(file){ - emitter.emit('warn', '=> changed: '.grey + file.blue); - if (isSassFile(file)) { - throttledRender(); - } - }); - - throttledRender(); - - } else { - render(options, emitter); - } - - return emitter; -}; - -exports.optimist = optimist; diff --git a/node_modules/gulp-sass/node_modules/node-sass/lib/middleware.js b/node_modules/gulp-sass/node_modules/node-sass/lib/middleware.js deleted file mode 100644 index 920b1603..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/lib/middleware.js +++ /dev/null @@ -1,207 +0,0 @@ -var sass = require('../sass'), - fs = require('fs'), - url = require('url'), - dirname = require('path').dirname, - mkdirp = require('mkdirp'), - join = require('path').join; - -var imports = {}; - -/** - * Return Connect middleware with the given `options`. - * - * Options: - * - * `force` Always re-compile - * `debug` Output debugging information - * `src` Source directory used to find .scss files - * `dest` Destination directory used to output .css files - * when undefined defaults to `src`. - * `outputStyle` Sass output style (nested,expanded, compact or compressed) - * - * Examples: - * - * Pass the middleware to Connect, grabbing .scss files from this directory - * and saving .css files to _./public_. - * - * Following that we have a `staticProvider` layer setup to serve the .css - * files generated by Sass. - * - * var server = connect.createServer( - * sass.middleware({ - * src: __dirname - * , dest: __dirname + '/public' - * }) - * , connect.static(__dirname + '/public') - * ); - * - * @param {Object} options - * @return {Function} - * @api public - */ - -module.exports = function(options){ - options = options || {}; - - // Accept src/dest dir - if ('string' == typeof options) { - options = { src: options }; - } - - // Force compilation - var force = options.force; - - // Debug option - var debug = options.debug; - - // Source dir required - var src = options.src; - if (!src) { throw new Error('sass.middleware() requires "src" directory'); } - - // Default dest dir to source - var dest = options.dest - ? options.dest - : src; - - var root = options.root || null; - - // Default compile callback - options.compile = options.compile || function(){ - return sass; - }; - - // Middleware - return function sass(req, res, next){ - if ('GET' != req.method && 'HEAD' != req.method) { return next(); } - var path = url.parse(req.url).pathname; - if (options.prefix && 0 === path.indexOf(options.prefix)) { - path = path.substring(options.prefix.length); - } - if (/\.css$/.test(path)) { - var cssPath = join(dest, path), - sassPath = join(src, path.replace('.css', '.scss')), - sassDir = dirname(sassPath); - - if (root) { - cssPath = join(root, dest, path.replace(dest, '')); - sassPath = join(root, src, path - .replace(dest, '') - .replace('.css', '.scss')); - sassDir = dirname(sassPath); - } - - if (debug) { - log('source', sassPath); - log('dest', cssPath); - } - - // Ignore ENOENT to fall through as 404 - var error = function(err) { - next('ENOENT' == err.code - ? null - : err); - }; - - // Compile to cssPath - var compile = function() { - if (debug) { log('read', cssPath); } - fs.readFile(sassPath, 'utf8', function(err, str){ - if (err) { return error(err); } - var style = options.compile(); - var paths = []; - delete imports[sassPath]; - style.render(str, function(err, css){ - if (err) { return next(err); } - if (debug) { log('render', sassPath); } - imports[sassPath] = paths; - mkdirp(dirname(cssPath), 0700, function(err){ - if (err) { return error(err); } - fs.writeFile(cssPath, css, 'utf8', next); - }); - }, { - include_paths: [ sassDir ].concat(options.include_paths || options.includePaths || []), - output_style: options.output_style || options.outputStyle - }); - }); - }; - - // Force - if (force) { return compile(); } - - // Re-compile on server restart, disregarding - // mtimes since we need to map imports - if (!imports[sassPath]) { return compile(); } - - // Compare mtimes - fs.stat(sassPath, function(err, sassStats){ - if (err) { return error(err); } - fs.stat(cssPath, function(err, cssStats){ - // CSS has not been compiled, compile it! - if (err) { - if ('ENOENT' == err.code) { - if (debug) { log('not found', cssPath); } - compile(); - } else { - next(err); - } - } else { - // Source has changed, compile it - if (sassStats.mtime > cssStats.mtime) { - if (debug) { log('modified', cssPath); } - compile(); - // Already compiled, check imports - } else { - checkImports(sassPath, function(changed){ - if (debug && changed && changed.length) { - changed.forEach(function(path) { - log('modified import %s', path); - }); - } - changed && changed.length ? compile() : next(); - }); - } - } - }); - }); - } else { - next(); - } - }; -}; - -/** - * Check `path`'s imports to see if they have been altered. - * - * @param {String} path - * @param {Function} fn - * @api private - */ - -function checkImports(path, fn) { - var nodes = imports[path]; - if (!nodes) { return fn(); } - if (!nodes.length) { return fn(); } - - var pending = nodes.length, - changed = []; - - nodes.forEach(function(imported){ - fs.stat(imported.path, function(err, stat){ - // error or newer mtime - if (err || !imported.mtime || stat.mtime > imported.mtime) { - changed.push(imported.path); - } - --pending || fn(changed); - }); - }); -} - -/** - * Log a message. - * - * @api private - */ - -function log(key, val) { - console.error(' \033[90m%s :\033[0m \033[36m%s\033[0m', key, val); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/lib/render.js b/node_modules/gulp-sass/node_modules/node-sass/lib/render.js deleted file mode 100644 index a481d537..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/lib/render.js +++ /dev/null @@ -1,53 +0,0 @@ -var sass = require('../sass'), - chalk = require('chalk'), - fs = require('fs'); - -function render(options, emitter) { - - sass.render({ - file: options.inFile, - includePaths: options.includePaths, - outputStyle: options.outputStyle, - sourceComments: options.sourceComments, - sourceMap: options.sourceMap, - success: function(css, sourceMap) { - - var todo = 1; - var done = function() { - if (--todo <= 0) { - emitter.emit('done'); - } - }; - - emitter.emit('warn', chalk.green('Rendering Complete, saving .css file...')); - - fs.writeFile(options.outFile, css, function(err) { - if (err) { return emitter.emit('error', chalk.red('Error: ' + err)); } - emitter.emit('warn', chalk.green('Wrote CSS to ' + options.outFile)); - emitter.emit('write', err, options.outFile, css); - done(); - }); - - if (options.sourceMap) { - todo++; - fs.writeFile(options.sourceMap, sourceMap, function(err) { - if (err) {return emitter.emit('error', chalk.red('Error' + err)); } - emitter.emit('warn', chalk.green('Wrote Source Map to ' + options.sourceMap)); - emitter.emit('write-source-map', err, options.sourceMap, sourceMap); - done(); - }); - } - - if (options.stdout) { - emitter.emit('log', css); - } - - emitter.emit('render', css); - }, - error: function(error) { - emitter.emit('error', chalk.red(error)); - } - }); -} - -module.exports = render; diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/.npmignore b/node_modules/gulp-sass/node_modules/node-sass/libsass/.npmignore deleted file mode 100644 index 53389aff..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/.npmignore +++ /dev/null @@ -1,50 +0,0 @@ -# Miscellaneous stuff - -.DS_Store -.sass-cache -*.gem -.svn/* -.gitattributes - -# Configuration stuff - -Makefile.in -/aclocal.m4 -/autom4te.cache/ -/config.guess -/config.h -/config.h.in -/config.log -/config.status -/config.sub -/configure -/depcomp -/install-sh -/libtool -/ltmain.sh -/m4/libtool.m4 -/m4/ltoptions.m4 -/m4/ltsugar.m4 -/m4/ltversion.m4 -/m4/lt~obsolete.m4 -/missing -/stamp-h1 -src/Makefile -libsass/* - -# Build stuff - -*.o -*.lo -*.a -a.out - -bin/* -.deps/ -.libs/ - -# Final results - -sassc++ -libsass.la -support/libsass.pc diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/.travis.yml b/node_modules/gulp-sass/node_modules/node-sass/libsass/.travis.yml deleted file mode 100644 index 09c40b32..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: cpp - -compiler: - - gcc - - clang - -env: - - AUTOTOOLS=yes - - AUTOTOOLS=no - -before_install: - - git clone https://github.com/hcatlin/sass-spec.git - - git clone https://github.com/hcatlin/sassc.git - - export SASS_SPEC_PATH=$TRAVIS_BUILD_DIR/sass-spec - - export SASS_SASSC_PATH=$TRAVIS_BUILD_DIR/sassc - - export SASS_LIBSASS_PATH=$TRAVIS_BUILD_DIR - -script: ./travis.sh diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/COPYING b/node_modules/gulp-sass/node_modules/node-sass/libsass/COPYING deleted file mode 100644 index 8639c111..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/COPYING +++ /dev/null @@ -1,25 +0,0 @@ - -Copyright (C) 2012 by Hampton Catlin - -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. - - -The following files in the spec were taken from the original Ruby Sass project which -is copyright Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein and under -the same license. diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/INSTALL b/node_modules/gulp-sass/node_modules/node-sass/libsass/INSTALL deleted file mode 100644 index a1e89e18..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/INSTALL +++ /dev/null @@ -1,370 +0,0 @@ -Installation Instructions -************************* - -Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, -Inc. - - Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. This file is offered as-is, -without warranty of any kind. - -Basic Installation -================== - - Briefly, the shell commands `./configure; make; make install' should -configure, build, and install this package. The following -more-detailed instructions are generic; see the `README' file for -instructions specific to this package. Some packages provide this -`INSTALL' file but do not implement all of the features documented -below. The lack of an optional feature in a given package is not -necessarily a bug. More recommendations for GNU packages can be found -in *note Makefile Conventions: (standards)Makefile Conventions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. Caching is -disabled by default to prevent problems with accidental use of stale -cache files. - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You need `configure.ac' if -you want to change it or regenerate `configure' using a newer version -of `autoconf'. - - The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. - - Running `configure' might take a while. While running, it prints - some messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package, generally using the just-built uninstalled binaries. - - 4. Type `make install' to install the programs and any data files and - documentation. When installing into a prefix owned by root, it is - recommended that the package be configured and built as a regular - user, and only the `make install' phase executed with root - privileges. - - 5. Optionally, type `make installcheck' to repeat any self-tests, but - this time using the binaries in their final installed location. - This target does not install anything. Running this target as a - regular user, particularly if the prior `make install' required - root privileges, verifies that the installation completed - correctly. - - 6. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - - 7. Often, you can also type `make uninstall' to remove the installed - files again. In practice, not all packages have tested that - uninstallation works correctly, even though it is required by the - GNU Coding Standards. - - 8. Some packages, particularly those that use Automake, provide `make - distcheck', which can by used by developers to test that all other - targets like `make install' and `make uninstall' work correctly. - This target is generally not run by end users. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' -for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c99 CFLAGS=-g LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. This -is known as a "VPATH" build. - - With a non-GNU `make', it is safer to compile the package for one -architecture at a time in the source code directory. After you have -installed the package for one architecture, use `make distclean' before -reconfiguring for another architecture. - - On MacOS X 10.5 and later systems, you can create libraries and -executables that work on multiple system types--known as "fat" or -"universal" binaries--by specifying multiple `-arch' options to the -compiler but only a single `-arch' option to the preprocessor. Like -this: - - ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CPP="gcc -E" CXXCPP="g++ -E" - - This is not guaranteed to produce working output in all cases, you -may have to build one architecture at a time and combine the results -using the `lipo' tool if you have problems. - -Installation Names -================== - - By default, `make install' installs the package's commands under -`/usr/local/bin', include files under `/usr/local/include', etc. You -can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX', where PREFIX must be an -absolute file name. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option `--exec-prefix=PREFIX' to `configure', the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. In general, the -default for these options is expressed in terms of `${prefix}', so that -specifying just `--prefix' will affect all of the other directory -specifications that were not explicitly provided. - - The most portable way to affect installation locations is to pass the -correct locations to `configure'; however, many packages provide one or -both of the following shortcuts of passing variable assignments to the -`make install' command line to change installation locations without -having to reconfigure or recompile. - - The first method involves providing an override variable for each -affected directory. For example, `make install -prefix=/alternate/directory' will choose an alternate location for all -directory configuration variables that were expressed in terms of -`${prefix}'. Any directories that were specified during `configure', -but not in terms of `${prefix}', must each be overridden at install -time for the entire installation to be relocated. The approach of -makefile variable overrides for each directory variable is required by -the GNU Coding Standards, and ideally causes no recompilation. -However, some platforms have known limitations with the semantics of -shared libraries that end up requiring recompilation when using this -method, particularly noticeable in packages that use GNU Libtool. - - The second method involves providing the `DESTDIR' variable. For -example, `make install DESTDIR=/alternate/directory' will prepend -`/alternate/directory' before all installation names. The approach of -`DESTDIR' overrides is not required by the GNU Coding Standards, and -does not work on platforms that have drive letters. On the other hand, -it does better at avoiding recompilation issues, and works well even -when some directory options were not specified in terms of `${prefix}' -at `configure' time. - -Optional Features -================= - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - - Some packages offer the ability to configure how verbose the -execution of `make' will be. For these packages, running `./configure ---enable-silent-rules' sets the default to minimal output, which can be -overridden with `make V=1'; while running `./configure ---disable-silent-rules' sets the default to verbose, which can be -overridden with `make V=0'. - -Particular systems -================== - - On HP-UX, the default C compiler is not ANSI C compatible. If GNU -CC is not installed, it is recommended to use the following options in -order to use an ANSI C compiler: - - ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" - -and if that doesn't work, install pre-built binaries of GCC for HP-UX. - - HP-UX `make' updates targets which have the same time stamps as -their prerequisites, which makes it generally unusable when shipped -generated files such as `configure' are involved. Use GNU `make' -instead. - - On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -parse its `<wchar.h>' header file. The option `-nodtk' can be used as -a workaround. If GNU CC is not installed, it is therefore recommended -to try - - ./configure CC="cc" - -and if that doesn't work, try - - ./configure CC="cc -nodtk" - - On Solaris, don't put `/usr/ucb' early in your `PATH'. This -directory contains several dysfunctional programs; working variants of -these programs are available in `/usr/bin'. So, if you need `/usr/ucb' -in your `PATH', put it _after_ `/usr/bin'. - - On Haiku, software installed for all users goes in `/boot/common', -not `/usr/local'. It is recommended to use the following options: - - ./configure --prefix=/boot/common - -Specifying the System Type -========================== - - There may be some features `configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS - KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the option `--target=TYPE' to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). - -Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf bug. Until the bug is fixed you can use this workaround: - - CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash - -`configure' Invocation -====================== - - `configure' recognizes the following options to control how it -operates. - -`--help' -`-h' - Print a summary of all of the options to `configure', and exit. - -`--help=short' -`--help=recursive' - Print a summary of the options unique to this package's - `configure', and exit. The `short' variant lists options used - only in the top level, while the `recursive' variant lists options - also present in any nested packages. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`--prefix=DIR' - Use DIR as the installation prefix. *note Installation Names:: - for more details, including other options available for fine-tuning - the installation locations. - -`--no-create' -`-n' - Run the configure checks, but stop before creating any output - files. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/libsass/LICENSE deleted file mode 100644 index 8639c111..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ - -Copyright (C) 2012 by Hampton Catlin - -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. - - -The following files in the spec were taken from the original Ruby Sass project which -is copyright Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein and under -the same license. diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/Makefile b/node_modules/gulp-sass/node_modules/node-sass/libsass/Makefile deleted file mode 100644 index e4904f77..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -CXX = g++ -CXXFLAGS = -Wall -O2 -fPIC -LDFLAGS = -fPIC - -PREFIX = /usr/local -LIBDIR = $(PREFIX)/lib - -SASS_SASSC_PATH ?= sassc -SASS_SPEC_PATH ?= sass-spec -SASSC_BIN = $(SASS_SASSC_PATH)/bin/sassc - -SOURCES = ast.cpp base64vlq.cpp bind.cpp constants.cpp context.cpp contextualize.cpp \ - copy_c_str.cpp error_handling.cpp eval.cpp expand.cpp extend.cpp file.cpp \ - functions.cpp inspect.cpp output_compressed.cpp output_nested.cpp \ - parser.cpp prelexer.cpp sass.cpp sass_interface.cpp source_map.cpp to_c.cpp to_string.cpp \ - units.cpp - -OBJECTS = $(SOURCES:.cpp=.o) - -all: static - -static: libsass.a -shared: libsass.so - -libsass.a: $(OBJECTS) - ar rvs $@ $(OBJECTS) - -libsass.so: $(OBJECTS) - $(CXX) -shared $(LDFLAGS) -o $@ $(OBJECTS) - -%.o: %.cpp - $(CXX) $(CXXFLAGS) -c -o $@ $< - -%: %.o libsass.a - $(CXX) $(CXXFLAGS) -o $@ $+ $(LDFLAGS) - -install: libsass.a - install -Dpm0755 $< $(DESTDIR)$(LIBDIR)/$< - -install-shared: libsass.so - install -Dpm0755 $< $(DESTDIR)$(LIBDIR)/$< - -$(SASSC_BIN): libsass.a - cd $(SASS_SASSC_PATH) && make - -test: $(SASSC_BIN) libsass.a - ruby $(SASS_SPEC_PATH)/sass-spec.rb -c $(SASSC_BIN) -s $(LOG_FLAGS) $(SASS_SPEC_PATH) - -test_build: $(SASSC_BIN) libsass.a - ruby $(SASS_SPEC_PATH)/sass-spec.rb -c $(SASSC_BIN) -s --ignore-todo $(LOG_FLAGS) $(SASS_SPEC_PATH) - -test_issues: $(SASSC_BIN) libsass.a - ruby $(SASS_SPEC_PATH)/sass-spec.rb -c $(SASSC_BIN) $(LOG_FLAGS) $(SASS_SPEC_PATH)/spec/issues - -clean: - rm -f $(OBJECTS) *.a *.so - - -.PHONY: all static shared bin install install-shared clean - diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/Makefile.am b/node_modules/gulp-sass/node_modules/node-sass/libsass/Makefile.am deleted file mode 100644 index dc24600e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/Makefile.am +++ /dev/null @@ -1,57 +0,0 @@ -ACLOCAL_AMFLAGS = -I m4 - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = support/libsass.pc - -lib_LTLIBRARIES = libsass.la -libsass_la_SOURCES = ast.cpp base64vlq.cpp bind.cpp constants.cpp context.cpp contextualize.cpp \ - copy_c_str.cpp error_handling.cpp eval.cpp expand.cpp extend.cpp file.cpp \ - functions.cpp inspect.cpp output_compressed.cpp output_nested.cpp \ - parser.cpp prelexer.cpp sass.cpp sass_interface.cpp source_map.cpp to_c.cpp to_string.cpp \ - units.cpp -libsass_la_LDFLAGS = -no-undefined -version-info 0:0:0 - -include_HEADERS = sass_interface.h sass.h - -check_PROGRAMS = sassc++ - -sassc___SOURCES = sassc++.cpp -sassc___LDADD = libsass.la - -if ENABLE_TESTS - -noinst_PROGRAMS = sass-tester - -sass_tester_SOURCES = $(SASS_SASSC_PATH)/sassc.c -sass_tester_LDADD = libsass.la -sass_tester_LDFLAGS = -no-install - -TESTS = \ - $(SASS_SPEC_PATH)/spec/basic \ - $(SASS_SPEC_PATH)/spec/benchmarks \ - $(SASS_SPEC_PATH)/spec/bourbon \ - $(SASS_SPEC_PATH)/spec/libsass \ - $(SASS_SPEC_PATH)/spec/scss \ - $(SASS_SPEC_PATH)/spec/todo - -LOG_COMPILER = $(RUBY) $(SASS_SPEC_PATH)/sass-spec.rb -AM_LOG_FLAGS = -c ./sass-tester - -SASS_SASSC_PATH ?= sassc -SASS_SPEC_PATH ?= sass-spec -SASSC_BIN = $(SASS_SASSC_PATH)/bin/sassc - -$(SASSC_BIN): libsass.la - cd $(SASS_SASSC_PATH) && make - -test: $(SASSC_BIN) libsass.la - ruby $(SASS_SPEC_PATH)/sass-spec.rb -c $(SASSC_BIN) -s $(LOG_FLAGS) $(SASS_SPEC_PATH) - -test_build: $(SASSC_BIN) libsass.la - ruby $(SASS_SPEC_PATH)/sass-spec.rb -c $(SASSC_BIN) -s --ignore-todo $(LOG_FLAGS) $(SASS_SPEC_PATH) - -test_issues: $(SASSC_BIN) libsass.la - ruby $(SASS_SPEC_PATH)/sass-spec.rb -c $(SASSC_BIN) $(LOG_FLAGS) $(SASS_SPEC_PATH)/spec/issues - -endif - diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/Readme.md b/node_modules/gulp-sass/node_modules/node-sass/libsass/Readme.md deleted file mode 100644 index 56d71114..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/Readme.md +++ /dev/null @@ -1,113 +0,0 @@ -Libsass -======= - -by Aaron Leung and Hampton Catlin (@hcatlin) - -[![Build Status](https://travis-ci.org/hcatlin/libsass.png?branch=master)](https://travis-ci.org/hcatlin/libsass) - -http://github.com/hcatlin/libsass - -Libsass is just a library, but if you want to RUN libsass, -then go to http://github.com/hcatlin/sassc or -http://github.com/hcatlin/sassruby or find your local -implementer. - -About ------ - -Libsass is a C/C++ port of the Sass CSS precompiler. The original version was written in Ruby, but this version is meant for efficiency and portability. - -This library strives to be light, simple, and easy to build and integrate with a variety of platforms and languages. - -Developing ----------- - -As you may have noticed, the libsass repo itself has -no executables and no tests. Oh noes! How can you develop??? - -Well, luckily, SassC is the official binary wrapper for -libsass and is *always* kept in sync. SassC uses a git submodule -to include libsass. When developing libsass, its best to actually -check out SassC and develop in that directory with the SassC spec -and tests there. - -We even run Travis tests for SassC! - -Tests -------- - -Since libsass is a pure library, tests are run through the [SassSpec](http://github.com/hcatlin/sass-spec) project using the [SassC](http://github.com/hcatlin/sassc) driver. - -To run tests against libsass while developing, please ensure you have the latest version of the above projects cloned, and then define the following environment variables: - - export SASS_SPEC_PATH=~/path/sass-spec - export SASS_SASSC_PATH=~/path/sassc - export SASS_LIBSASS_PATH=~/path/libsass - -Obviously, update them to your local environment. Then, its just a matter of running... - - make test - -Usage ------ - -While libsass is primarily implemented in C++, it provides a simple -C interface that is defined in [sass_interface.h]. Its usage is pretty -straight forward. - -First, you create a sass context struct. We use these objects to define -different execution parameters for the library. There are three -different context types. - - sass_context // string-in-string-out compilation - sass_file_context // file-based compilation - sass_folder_context // full-folder multi-file - -Each of the contexts have slightly different behavior and are -implemented seperately. This does add extra work to implementing -a wrapper library, but we felt that a mixed-use context object -provides for too much implicit logic. What if you set "input_string" -AND "input_file"... what do we do? This would introduce bugs into -wrapper libraries that would be difficult to debug. - -We anticipate that most adapters in most languages will define -their own logic for how to separate these use cases based on the -language. For instance, the original Ruby interface has a combined -interface, but is backed by three different processes. - -To generate a context, use one of the following methods. - - sass_new_context() - sass_new_file_context() - sass_new_folder_context() - -Again, please see the sass_interface.h for more information. - -And, to get even more information, then please see the implementations -in SassC and SassC-Ruby. - -About Sass ----------- - -Sass is a CSS pre-processor language to add on exciting, new, -awesome features to CSS. Sass was the first language of its kind -and by far the most mature and up to date codebase. - -Sass was originally created by the co-creator of this library, -Hampton Catlin (@hcatlin). The extension and continuing evolution -of the language has all been the result of years of work by Nathan -Weizenbaum (@nex3) and Chris Eppstein (@chriseppstein). - -For more information about Sass itself, please visit http://sass-lang.com - -Contribution Agreement ----------------------- - -Any contribution to the project are seen as copyright assigned to Hampton Catlin, a -human on the planet earth. Your contribution warrants that you have the right to -assign copyright on your work. The intention here is to ensure that the project -remains totally free (liberal, like). - -Our MIT license is designed to be as simple, and liberal as possible. - - diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/ast.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/ast.cpp deleted file mode 100644 index 9b1c3111..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/ast.cpp +++ /dev/null @@ -1,76 +0,0 @@ -#include "ast.hpp" -#include "context.hpp" -#include "to_string.hpp" -#include <iostream> - -namespace Sass { - using namespace std; - - bool Compound_Selector::operator<(const Compound_Selector& rhs) const - { - To_String to_string; - // ugly - return const_cast<Compound_Selector*>(this)->perform(&to_string) < - const_cast<Compound_Selector&>(rhs).perform(&to_string); - } - - Compound_Selector* Complex_Selector::base() - { - if (!tail()) return head(); - else return tail()->base(); - } - - Complex_Selector* Complex_Selector::context(Context& ctx) - { - if (!tail()) return 0; - if (!head()) return tail()->context(ctx); - return new (ctx.mem) Complex_Selector(path(), position(), combinator(), head(), tail()->context(ctx)); - } - - Complex_Selector* Complex_Selector::innermost() - { - if (!tail()) return this; - else return tail()->innermost(); - } - - Selector_Placeholder* Selector::find_placeholder() - { - return 0; - } - - Selector_Placeholder* Selector_List::find_placeholder() - { - if (has_placeholder()) { - for (size_t i = 0, L = length(); i < L; ++i) { - if ((*this)[i]->has_placeholder()) return (*this)[i]->find_placeholder(); - } - } - return 0; - } - - Selector_Placeholder* Complex_Selector::find_placeholder() - { - if (has_placeholder()) { - if (head() && head()->has_placeholder()) return head()->find_placeholder(); - else if (tail() && tail()->has_placeholder()) return tail()->find_placeholder(); - } - return 0; - } - - Selector_Placeholder* Compound_Selector::find_placeholder() - { - if (has_placeholder()) { - for (size_t i = 0, L = length(); i < L; ++i) { - if ((*this)[i]->has_placeholder()) return (*this)[i]->find_placeholder(); - } - // return this; - } - return 0; - } - - Selector_Placeholder* Selector_Placeholder::find_placeholder() - { - return this; - } - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/ast.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/ast.hpp deleted file mode 100644 index c333df79..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/ast.hpp +++ /dev/null @@ -1,1234 +0,0 @@ -#define SASS_AST - -#include <string> -#include <sstream> -#include <vector> -#include <algorithm> - -#ifdef __clang__ - -/* - * There are some overloads used here that trigger the clang overload - * hiding warning. Specifically: - * - * Type type() which hides string type() from Expression - * - * and - * - * Block* block() which hides virtual Block* block() from Statement - * - */ - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Woverloaded-virtual" - -#endif - - -#ifndef SASS_OPERATION -#include "operation.hpp" -#endif - -#ifndef SASS_TOKEN -#include "token.hpp" -#endif - -#ifndef SASS_ENVIRONMENT -#include "environment.hpp" -#endif - -#ifndef SASS -#include "sass.h" -#endif - -#include "units.hpp" - -#ifndef SASS_ERROR_HANDLING -#include "error_handling.hpp" -#endif - -#include "ast_def_macros.hpp" - -#include <sstream> -#include <iostream> -#include <typeinfo> - -#ifndef SASS_POSITION -#include "position.hpp" -#endif - -namespace Sass { - using namespace std; - - ///////////////////////////////////////////////////////////////////////////// - // Mixin class for AST nodes that should behave like vectors. Uses the - // "Template Method" design pattern to allow subclasses to adjust their flags - // when certain objects are pushed. - ///////////////////////////////////////////////////////////////////////////// - template <typename T> - class Vectorized { - vector<T> elements_; - protected: - virtual void adjust_after_pushing(T element) { } - public: - Vectorized(size_t s = 0) : elements_(vector<T>()) - { elements_.reserve(s); } - virtual ~Vectorized() = 0; - size_t length() const { return elements_.size(); } - bool empty() const { return elements_.empty(); } - T& operator[](size_t i) { return elements_[i]; } - Vectorized& operator<<(T element) - { - elements_.push_back(element); - adjust_after_pushing(element); - return *this; - } - Vectorized& operator+=(Vectorized* v) - { - for (size_t i = 0, L = v->length(); i < L; ++i) *this << (*v)[i]; - return *this; - } - vector<T>& elements() { return elements_; } - }; - template <typename T> - inline Vectorized<T>::~Vectorized() { } - - ////////////////////////////////////////////////////////// - // Abstract base class for all abstract syntax tree nodes. - ////////////////////////////////////////////////////////// - class Block; - class Statement; - class Expression; - class Selector; - class AST_Node { - ADD_PROPERTY(string, path); - ADD_PROPERTY(Position, position); - public: - AST_Node(string path, Position position) : path_(path), position_(position) { } - virtual ~AST_Node() = 0; - // virtual Block* block() { return 0; } - ATTACH_OPERATIONS(); - }; - inline AST_Node::~AST_Node() { } - - ///////////////////////////////////////////////////////////////////////// - // Abstract base class for statements. This side of the AST hierarchy - // represents elements in expansion contexts, which exist primarily to be - // rewritten and macro-expanded. - ///////////////////////////////////////////////////////////////////////// - class Statement : public AST_Node { - public: - Statement(string path, Position position) : AST_Node(path, position) { } - virtual ~Statement() = 0; - // needed for rearranging nested rulesets during CSS emission - virtual bool is_hoistable() { return false; } - virtual Block* block() { return 0; } - }; - inline Statement::~Statement() { } - - //////////////////////// - // Blocks of statements. - //////////////////////// - class Block : public Statement, public Vectorized<Statement*> { - ADD_PROPERTY(bool, is_root); - // needed for properly formatted CSS emission - ADD_PROPERTY(bool, has_hoistable); - ADD_PROPERTY(bool, has_non_hoistable); - protected: - void adjust_after_pushing(Statement* s) - { - if (s->is_hoistable()) has_hoistable_ = true; - else has_non_hoistable_ = true; - }; - public: - Block(string path, Position position, size_t s = 0, bool r = false) - : Statement(path, position), - Vectorized<Statement*>(s), - is_root_(r), has_hoistable_(false), has_non_hoistable_(false) - { } - Block* block() { return this; } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////////////////////////////// - // Abstract base class for statements that contain blocks of statements. - //////////////////////////////////////////////////////////////////////// - class Has_Block : public Statement { - ADD_PROPERTY(Block*, block); - public: - Has_Block(string path, Position position, Block* b) - : Statement(path, position), block_(b) - { } - virtual ~Has_Block() = 0; - }; - inline Has_Block::~Has_Block() { } - - ///////////////////////////////////////////////////////////////////////////// - // Rulesets (i.e., sets of styles headed by a selector and containing a block - // of style declarations. - ///////////////////////////////////////////////////////////////////////////// - class Selector; - class Ruleset : public Has_Block { - ADD_PROPERTY(Selector*, selector); - public: - Ruleset(string path, Position position, Selector* s, Block* b) - : Has_Block(path, position, b), selector_(s) - { } - // nested rulesets need to be hoisted out of their enclosing blocks - bool is_hoistable() { return true; } - ATTACH_OPERATIONS(); - }; - - ///////////////////////////////////////////////////////// - // Nested declaration sets (i.e., namespaced properties). - ///////////////////////////////////////////////////////// - class String; - class Propset : public Has_Block { - ADD_PROPERTY(String*, property_fragment); - public: - Propset(string path, Position position, String* pf, Block* b = 0) - : Has_Block(path, position, b), property_fragment_(pf) - { } - ATTACH_OPERATIONS(); - }; - - ///////////////// - // Media queries. - ///////////////// - class List; - class Media_Block : public Has_Block { - ADD_PROPERTY(List*, media_queries); - ADD_PROPERTY(Selector*, enclosing_selector); - public: - Media_Block(string path, Position position, List* mqs, Block* b) - : Has_Block(path, position, b), media_queries_(mqs), enclosing_selector_(0) - { } - bool is_hoistable() { return true; } - ATTACH_OPERATIONS(); - }; - - /////////////////////////////////////////////////////////////////////// - // At-rules -- arbitrary directives beginning with "@" that may have an - // optional statement block. - /////////////////////////////////////////////////////////////////////// - class At_Rule : public Has_Block { - ADD_PROPERTY(string, keyword); - ADD_PROPERTY(Selector*, selector); - public: - At_Rule(string path, Position position, string kwd, Selector* sel = 0, Block* b = 0) - : Has_Block(path, position, b), keyword_(kwd), selector_(sel) - { } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////////////////////////////// - // Declarations -- style rules consisting of a property name and values. - //////////////////////////////////////////////////////////////////////// - class Declaration : public Statement { - ADD_PROPERTY(String*, property); - ADD_PROPERTY(Expression*, value); - ADD_PROPERTY(bool, is_important); - public: - Declaration(string path, Position position, - String* prop, Expression* val, bool i = false) - : Statement(path, position), property_(prop), value_(val), is_important_(i) - { } - ATTACH_OPERATIONS(); - }; - - ///////////////////////////////////// - // Assignments -- variable and value. - ///////////////////////////////////// - class Variable; - class Expression; - class Assignment : public Statement { - ADD_PROPERTY(string, variable); - ADD_PROPERTY(Expression*, value); - ADD_PROPERTY(bool, is_guarded); - public: - Assignment(string path, Position position, - string var, Expression* val, bool guarded = false) - : Statement(path, position), variable_(var), value_(val), is_guarded_(guarded) - { } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////////////////////////////////// - // Import directives. CSS and Sass import lists can be intermingled, so it's - // necessary to store a list of each in an Import node. - //////////////////////////////////////////////////////////////////////////// - class Import : public Statement { - vector<string> files_; - vector<Expression*> urls_; - public: - Import(string path, Position position) - : Statement(path, position), - files_(vector<string>()), urls_(vector<Expression*>()) - { } - vector<string>& files() { return files_; } - vector<Expression*>& urls() { return urls_; } - ATTACH_OPERATIONS(); - }; - - class Import_Stub : public Statement { - ADD_PROPERTY(string, file_name); - public: - Import_Stub(string path, Position position, string f) - : Statement(path, position), file_name_(f) - { } - ATTACH_OPERATIONS(); - }; - - ////////////////////////////// - // The Sass `@warn` directive. - ////////////////////////////// - class Warning : public Statement { - ADD_PROPERTY(Expression*, message); - public: - Warning(string path, Position position, Expression* msg) - : Statement(path, position), message_(msg) - { } - ATTACH_OPERATIONS(); - }; - - /////////////////////////////////////////// - // CSS comments. These may be interpolated. - /////////////////////////////////////////// - class Comment : public Statement { - ADD_PROPERTY(String*, text); - public: - Comment(string path, Position position, String* txt) - : Statement(path, position), text_(txt) - { } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////// - // The Sass `@if` control directive. - //////////////////////////////////// - class If : public Statement { - ADD_PROPERTY(Expression*, predicate); - ADD_PROPERTY(Block*, consequent); - ADD_PROPERTY(Block*, alternative); - public: - If(string path, Position position, Expression* pred, Block* con, Block* alt = 0) - : Statement(path, position), predicate_(pred), consequent_(con), alternative_(alt) - { } - ATTACH_OPERATIONS(); - }; - - ///////////////////////////////////// - // The Sass `@for` control directive. - ///////////////////////////////////// - class For : public Has_Block { - ADD_PROPERTY(string, variable); - ADD_PROPERTY(Expression*, lower_bound); - ADD_PROPERTY(Expression*, upper_bound); - ADD_PROPERTY(bool, is_inclusive); - public: - For(string path, Position position, - string var, Expression* lo, Expression* hi, Block* b, bool inc) - : Has_Block(path, position, b), - variable_(var), lower_bound_(lo), upper_bound_(hi), is_inclusive_(inc) - { } - ATTACH_OPERATIONS(); - }; - - ////////////////////////////////////// - // The Sass `@each` control directive. - ////////////////////////////////////// - class Each : public Has_Block { - ADD_PROPERTY(string, variable); - ADD_PROPERTY(Expression*, list); - public: - Each(string path, Position position, string var, Expression* lst, Block* b) - : Has_Block(path, position, b), variable_(var), list_(lst) - { } - ATTACH_OPERATIONS(); - }; - - /////////////////////////////////////// - // The Sass `@while` control directive. - /////////////////////////////////////// - class While : public Has_Block { - ADD_PROPERTY(Expression*, predicate); - public: - While(string path, Position position, Expression* pred, Block* b) - : Has_Block(path, position, b), predicate_(pred) - { } - ATTACH_OPERATIONS(); - }; - - ///////////////////////////////////////////////////////////// - // The @return directive for use inside SassScript functions. - ///////////////////////////////////////////////////////////// - class Return : public Statement { - ADD_PROPERTY(Expression*, value); - public: - Return(string path, Position position, Expression* val) - : Statement(path, position), value_(val) - { } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////// - // The Sass `@extend` directive. - //////////////////////////////// - class Extension : public Statement { - ADD_PROPERTY(Selector*, selector); - public: - Extension(string path, Position position, Selector* s) - : Statement(path, position), selector_(s) - { } - ATTACH_OPERATIONS(); - }; - - ///////////////////////////////////////////////////////////////////////////// - // Definitions for both mixins and functions. The two cases are distinguished - // by a type tag. - ///////////////////////////////////////////////////////////////////////////// - struct Context; - struct Backtrace; - class Parameters; - typedef Environment<AST_Node*> Env; - typedef const char* Signature; - typedef Expression* (*Native_Function)(Env&, Context&, Signature, const string&, Position, Backtrace*); - typedef const char* Signature; - class Definition : public Has_Block { - public: - enum Type { MIXIN, FUNCTION }; - ADD_PROPERTY(string, name); - ADD_PROPERTY(Parameters*, parameters); - ADD_PROPERTY(Env*, environment); - ADD_PROPERTY(Type, type); - ADD_PROPERTY(Native_Function, native_function); - ADD_PROPERTY(Sass_C_Function, c_function); - ADD_PROPERTY(bool, is_overload_stub); - ADD_PROPERTY(Signature, signature); - public: - Definition(string path, - Position position, - string n, - Parameters* params, - Block* b, - Type t) - : Has_Block(path, position, b), - name_(n), - parameters_(params), - environment_(0), - type_(t), - native_function_(0), - c_function_(0), - is_overload_stub_(false), - signature_(0) - { } - Definition(string path, - Position position, - Signature sig, - string n, - Parameters* params, - Native_Function func_ptr, - bool overload_stub = false) - : Has_Block(path, position, 0), - name_(n), - parameters_(params), - environment_(0), - type_(FUNCTION), - native_function_(func_ptr), - c_function_(0), - is_overload_stub_(overload_stub), - signature_(sig) - { } - Definition(string path, - Position position, - Signature sig, - string n, - Parameters* params, - Sass_C_Function func_ptr, - bool whatever, - bool whatever2) - : Has_Block(path, position, 0), - name_(n), - parameters_(params), - environment_(0), - type_(FUNCTION), - native_function_(0), - c_function_(func_ptr), - is_overload_stub_(false), - signature_(sig) - { } - ATTACH_OPERATIONS(); - }; - - ////////////////////////////////////// - // Mixin calls (i.e., `@include ...`). - ////////////////////////////////////// - class Arguments; - class Mixin_Call : public Has_Block { - ADD_PROPERTY(string, name); - ADD_PROPERTY(Arguments*, arguments); - public: - Mixin_Call(string path, Position position, string n, Arguments* args, Block* b = 0) - : Has_Block(path, position, b), name_(n), arguments_(args) - { } - ATTACH_OPERATIONS(); - }; - - /////////////////////////////////////////////////// - // The @content directive for mixin content blocks. - /////////////////////////////////////////////////// - class Content : public Statement { - public: - Content(string path, Position position) : Statement(path, position) { } - ATTACH_OPERATIONS(); - }; - - ////////////////////////////////////////////////////////////////////// - // Abstract base class for expressions. This side of the AST hierarchy - // represents elements in value contexts, which exist primarily to be - // evaluated and returned. - ////////////////////////////////////////////////////////////////////// - class Expression : public AST_Node { - public: - enum Concrete_Type { - NONE, - BOOLEAN, - NUMBER, - COLOR, - STRING, - LIST, - NULL_VAL, - NUM_TYPES - }; - private: - // expressions in some contexts shouldn't be evaluated - ADD_PROPERTY(bool, is_delayed); - ADD_PROPERTY(bool, is_interpolant); - ADD_PROPERTY(Concrete_Type, concrete_type); - public: - Expression(string path, Position position, - bool d = false, bool i = false, Concrete_Type ct = NONE) - : AST_Node(path, position), - is_delayed_(d), is_interpolant_(i), concrete_type_(ct) - { } - virtual operator bool() { return true; } - virtual ~Expression() = 0; - virtual string type() { return ""; /* TODO: raise an error? */ } - virtual bool is_invisible() { return false; } - static string type_name() { return ""; } - virtual bool is_false() { return false; } - }; - inline Expression::~Expression() { } - - /////////////////////////////////////////////////////////////////////// - // Lists of values, both comma- and space-separated (distinguished by a - // type-tag.) Also used to represent variable-length argument lists. - /////////////////////////////////////////////////////////////////////// - class List : public Expression, public Vectorized<Expression*> { - public: - enum Separator { SPACE, COMMA }; - private: - ADD_PROPERTY(Separator, separator); - ADD_PROPERTY(bool, is_arglist); - public: - List(string path, Position position, - size_t size = 0, Separator sep = SPACE, bool argl = false) - : Expression(path, position), - Vectorized<Expression*>(size), - separator_(sep), is_arglist_(argl) - { concrete_type(LIST); } - string type() { return is_arglist_ ? "arglist" : "list"; } - static string type_name() { return "list"; } - bool is_invisible() { return !length(); } - ATTACH_OPERATIONS(); - }; - - ////////////////////////////////////////////////////////////////////////// - // Binary expressions. Represents logical, relational, and arithmetic - // operations. Templatized to avoid large switch statements and repetitive - // subclassing. - ////////////////////////////////////////////////////////////////////////// - class Binary_Expression : public Expression { - public: - enum Type { - AND, OR, // logical connectives - EQ, NEQ, GT, GTE, LT, LTE, // arithmetic relations - ADD, SUB, MUL, DIV, MOD, // arithmetic functions - NUM_OPS // so we know how big to make the op table - }; - private: - ADD_PROPERTY(Type, type); - ADD_PROPERTY(Expression*, left); - ADD_PROPERTY(Expression*, right); - public: - Binary_Expression(string path, Position position, - Type t, Expression* lhs, Expression* rhs) - : Expression(path, position), type_(t), left_(lhs), right_(rhs) - { } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////////////////////////////////// - // Arithmetic negation (logical negation is just an ordinary function call). - //////////////////////////////////////////////////////////////////////////// - class Unary_Expression : public Expression { - public: - enum Type { PLUS, MINUS }; - private: - ADD_PROPERTY(Type, type); - ADD_PROPERTY(Expression*, operand); - public: - Unary_Expression(string path, Position position, Type t, Expression* o) - : Expression(path, position), type_(t), operand_(o) - { } - ATTACH_OPERATIONS(); - }; - - ////////////////// - // Function calls. - ////////////////// - class Function_Call : public Expression { - ADD_PROPERTY(string, name); - ADD_PROPERTY(Arguments*, arguments); - public: - Function_Call(string path, Position position, string n, Arguments* args) - : Expression(path, position), name_(n), arguments_(args) - { concrete_type(STRING); } - ATTACH_OPERATIONS(); - }; - - ///////////////////////// - // Function call schemas. - ///////////////////////// - class Function_Call_Schema : public Expression { - ADD_PROPERTY(String*, name); - ADD_PROPERTY(Arguments*, arguments); - public: - Function_Call_Schema(string path, Position position, String* n, Arguments* args) - : Expression(path, position), name_(n), arguments_(args) - { concrete_type(STRING); } - ATTACH_OPERATIONS(); - }; - - /////////////////////// - // Variable references. - /////////////////////// - class Variable : public Expression { - ADD_PROPERTY(string, name); - public: - Variable(string path, Position position, string n) - : Expression(path, position), name_(n) - { } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////////////////////////////////// - // Textual (i.e., unevaluated) numeric data. Variants are distinguished with - // a type tag. - //////////////////////////////////////////////////////////////////////////// - class Textual : public Expression { - public: - enum Type { NUMBER, PERCENTAGE, DIMENSION, HEX }; - private: - ADD_PROPERTY(Type, type); - ADD_PROPERTY(string, value); - public: - Textual(string path, Position position, Type t, string val) - : Expression(path, position, true), type_(t), value_(val) - { } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////// - // Numbers, percentages, dimensions, and colors. - //////////////////////////////////////////////// - class Number : public Expression { - ADD_PROPERTY(double, value); - vector<string> numerator_units_; - vector<string> denominator_units_; - public: - Number(string path, Position position, double val, string u = "") - : Expression(path, position), - value_(val), - numerator_units_(vector<string>()), - denominator_units_(vector<string>()) - { - if (!u.empty()) numerator_units_.push_back(u); - concrete_type(NUMBER); - } - vector<string>& numerator_units() { return numerator_units_; } - vector<string>& denominator_units() { return denominator_units_; } - string type() { return "number"; } - static string type_name() { return "number"; } - string unit() - { - stringstream u; - for (size_t i = 0, S = numerator_units_.size(); i < S; ++i) { - if (i) u << '*'; - u << numerator_units_[i]; - } - if (!denominator_units_.empty()) u << '/'; - for (size_t i = 0, S = denominator_units_.size(); i < S; ++i) { - if (i) u << '*'; - u << denominator_units_[i]; - } - return u.str(); - } - bool is_unitless() - { return numerator_units_.empty() && denominator_units_.empty(); } - void normalize(string to = "") - { - // (multiple passes because I'm too tired to think up something clever) - // Find a unit to convert everything to, if one isn't provided. - if (to.empty()) { - for (size_t i = 0, S = numerator_units_.size(); i < S; ++i) { - string u(numerator_units_[i]); - if (string_to_unit(u) == INCOMMENSURABLE) { - continue; - } - else { - to = u; - break; - } - } - } - if (to.empty()) { - for (size_t i = 0, S = denominator_units_.size(); i < S; ++i) { - string u(denominator_units_[i]); - if (string_to_unit(u) == INCOMMENSURABLE) { - continue; - } - else { - to = u; - break; - } - } - } - // Now loop through again and do all the conversions. - for (size_t i = 0, S = numerator_units_.size(); i < S; ++i) { - string from(numerator_units_[i]); - if (string_to_unit(from) == INCOMMENSURABLE) continue; - value_ *= conversion_factor(from, to); - numerator_units_[i] = to; - } - for (size_t i = 0, S = denominator_units_.size(); i < S; ++i) { - string from(denominator_units_[i]); - if (string_to_unit(from) == INCOMMENSURABLE) continue; - value_ /= conversion_factor(from, to); - denominator_units_[i] = to; - } - // Now divide out identical units in the numerator and denominator. - vector<string> ncopy; - ncopy.reserve(numerator_units_.size()); - for (vector<string>::iterator n = numerator_units_.begin(); - n != numerator_units_.end(); - ++n) { - vector<string>::iterator d = find(denominator_units_.begin(), - denominator_units_.end(), - *n); - if (d != denominator_units_.end()) { - denominator_units_.erase(d); - } - else { - ncopy.push_back(*n); - } - } - numerator_units_ = ncopy; - // Sort the units to make them pretty and, well, normal. - sort(numerator_units_.begin(), numerator_units_.end()); - sort(denominator_units_.begin(), denominator_units_.end()); - } - // useful for making one number compatible with another - string find_convertible_unit() - { - for (size_t i = 0, S = numerator_units_.size(); i < S; ++i) { - string u(numerator_units_[i]); - if (string_to_unit(u) != INCOMMENSURABLE) return u; - } - for (size_t i = 0, S = denominator_units_.size(); i < S; ++i) { - string u(denominator_units_[i]); - if (string_to_unit(u) != INCOMMENSURABLE) return u; - } - return string(); - } - ATTACH_OPERATIONS(); - }; - - ////////// - // Colors. - ////////// - class Color : public Expression { - ADD_PROPERTY(double, r); - ADD_PROPERTY(double, g); - ADD_PROPERTY(double, b); - ADD_PROPERTY(double, a); - ADD_PROPERTY(string, disp); - public: - Color(string path, Position position, double r, double g, double b, double a = 1, const string disp = "") - : Expression(path, position), r_(r), g_(g), b_(b), a_(a), disp_(disp) - { concrete_type(COLOR); } - string type() { return "color"; } - static string type_name() { return "color"; } - ATTACH_OPERATIONS(); - }; - - //////////// - // Booleans. - //////////// - class Boolean : public Expression { - ADD_PROPERTY(bool, value); - public: - Boolean(string path, Position position, bool val) : Expression(path, position), value_(val) - { concrete_type(BOOLEAN); } - virtual operator bool() { return value_; } - string type() { return "bool"; } - static string type_name() { return "bool"; } - virtual bool is_false() { return !value_; } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////////////////////////////// - // Abstract base class for Sass string values. Includes interpolated and - // "flat" strings. - //////////////////////////////////////////////////////////////////////// - class String : public Expression { - ADD_PROPERTY(bool, needs_unquoting); - public: - String(string path, Position position, bool unq = false, bool delayed = false) - : Expression(path, position, delayed), needs_unquoting_(unq) - { concrete_type(STRING); } - static string type_name() { return "string"; } - virtual ~String() = 0; - ATTACH_OPERATIONS(); - }; - inline String::~String() { }; - - /////////////////////////////////////////////////////////////////////// - // Interpolated strings. Meant to be reduced to flat strings during the - // evaluation phase. - /////////////////////////////////////////////////////////////////////// - class String_Schema : public String, public Vectorized<Expression*> { - ADD_PROPERTY(char, quote_mark); - public: - String_Schema(string path, Position position, size_t size = 0, bool unq = false, char qm = '\0') - : String(path, position, unq), Vectorized<Expression*>(size), quote_mark_(qm) - { } - string type() { return "string"; } - static string type_name() { return "string"; } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////////////// - // Flat strings -- the lowest level of raw textual data. - //////////////////////////////////////////////////////// - class String_Constant : public String { - ADD_PROPERTY(string, value); - public: - String_Constant(string path, Position position, string val, bool unq = false) - : String(path, position, unq, true), value_(val) - { } - String_Constant(string path, Position position, const char* beg, bool unq = false) - : String(path, position, unq, true), value_(string(beg)) - { } - String_Constant(string path, Position position, const char* beg, const char* end, bool unq = false) - : String(path, position, unq, true), value_(string(beg, end-beg)) - { } - String_Constant(string path, Position position, const Token& tok, bool unq = false) - : String(path, position, unq, true), value_(string(tok.begin, tok.end)) - { } - string type() { return "string"; } - static string type_name() { return "string"; } - bool is_quoted() { return value_.length() && (value_[0] == '"' || value_[0] == '\''); } - char quote_mark() { return is_quoted() ? value_[0] : '\0'; } - ATTACH_OPERATIONS(); - }; - - ///////////////// - // Media queries. - ///////////////// - class Media_Query : public Expression, - public Vectorized<Media_Query_Expression*> { - ADD_PROPERTY(String*, media_type); - ADD_PROPERTY(bool, is_negated); - ADD_PROPERTY(bool, is_restricted); - public: - Media_Query(string path, Position position, - String* t = 0, size_t s = 0, bool n = false, bool r = false) - : Expression(path, position), Vectorized<Media_Query_Expression*>(s), - media_type_(t), is_negated_(n), is_restricted_(r) - { } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////////// - // Media expressions (for use inside media queries). - //////////////////////////////////////////////////// - class Media_Query_Expression : public Expression { - ADD_PROPERTY(Expression*, feature); - ADD_PROPERTY(Expression*, value); - ADD_PROPERTY(bool, is_interpolated); - public: - Media_Query_Expression(string path, Position position, - Expression* f, Expression* v, bool i = false) - : Expression(path, position), feature_(f), value_(v), is_interpolated_(i) - { } - ATTACH_OPERATIONS(); - }; - - ////////////////// - // The null value. - ////////////////// - class Null : public Expression { - public: - Null(string path, Position position) : Expression(path, position) { concrete_type(NULL_VAL); } - string type() { return "null"; } - static string type_name() { return "null"; } - bool is_invisible() { return true; } - operator bool() { return false; } - bool is_false() { return true; } - ATTACH_OPERATIONS(); - }; - - ///////////////////////////////// - // Thunks for delayed evaluation. - ///////////////////////////////// - class Thunk : public Expression { - ADD_PROPERTY(Expression*, expression); - ADD_PROPERTY(Env*, environment); - public: - Thunk(string path, Position position, Expression* exp, Env* env = 0) - : Expression(path, position), expression_(exp), environment_(env) - { } - }; - - ///////////////////////////////////////////////////////// - // Individual parameter objects for mixins and functions. - ///////////////////////////////////////////////////////// - class Parameter : public AST_Node { - ADD_PROPERTY(string, name); - ADD_PROPERTY(Expression*, default_value); - ADD_PROPERTY(bool, is_rest_parameter); - public: - Parameter(string p, Position pos, - string n, Expression* def = 0, bool rest = false) - : AST_Node(p, pos), name_(n), default_value_(def), is_rest_parameter_(rest) - { - if (default_value_ && is_rest_parameter_) { - error("variable-length parameter may not have a default value", path(), position()); - } - } - ATTACH_OPERATIONS(); - }; - - ///////////////////////////////////////////////////////////////////////// - // Parameter lists -- in their own class to facilitate context-sensitive - // error checking (e.g., ensuring that all optional parameters follow all - // required parameters). - ///////////////////////////////////////////////////////////////////////// - class Parameters : public AST_Node, public Vectorized<Parameter*> { - ADD_PROPERTY(bool, has_optional_parameters); - ADD_PROPERTY(bool, has_rest_parameter); - protected: - void adjust_after_pushing(Parameter* p) - { - if (p->default_value()) { - if (has_rest_parameter_) { - error("optional parameters may not be combined with variable-length parameters", p->path(), p->position()); - } - has_optional_parameters_ = true; - } - else if (p->is_rest_parameter()) { - if (has_rest_parameter_) { - error("functions and mixins cannot have more than one variable-length parameter", p->path(), p->position()); - } - if (has_optional_parameters_) { - error("optional parameters may not be combined with variable-length parameters", p->path(), p->position()); - } - has_rest_parameter_ = true; - } - else { - if (has_rest_parameter_) { - error("required parameters must precede variable-length parameters", p->path(), p->position()); - } - if (has_optional_parameters_) { - error("required parameters must precede optional parameters", p->path(), p->position()); - } - } - } - public: - Parameters(string path, Position position) - : AST_Node(path, position), - Vectorized<Parameter*>(), - has_optional_parameters_(false), - has_rest_parameter_(false) - { } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////////////////// - // Individual argument objects for mixin and function calls. - //////////////////////////////////////////////////////////// - class Argument : public Expression { - ADD_PROPERTY(Expression*, value); - ADD_PROPERTY(string, name); - ADD_PROPERTY(bool, is_rest_argument); - public: - Argument(string p, Position pos, Expression* val, string n = "", bool rest = false) - : Expression(p, pos), value_(val), name_(n), is_rest_argument_(rest) - { - if (!name_.empty() && is_rest_argument_) { - error("variable-length argument may not be passed by name", path(), position()); - } - } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////////////////////////////// - // Argument lists -- in their own class to facilitate context-sensitive - // error checking (e.g., ensuring that all ordinal arguments precede all - // named arguments). - //////////////////////////////////////////////////////////////////////// - class Arguments : public Expression, public Vectorized<Argument*> { - ADD_PROPERTY(bool, has_named_arguments); - ADD_PROPERTY(bool, has_rest_argument); - protected: - void adjust_after_pushing(Argument* a) - { - if (!a->name().empty()) { - if (has_rest_argument_) { - error("named arguments must precede variable-length argument", a->path(), a->position()); - } - has_named_arguments_ = true; - } - else if (a->is_rest_argument()) { - if (has_rest_argument_) { - error("functions and mixins may only be called with one variable-length argument", a->path(), a->position()); - } - if (has_named_arguments_) { - error("functions and mixins may not be called with both named arguments and variable-length arguments", a->path(), a->position()); - } - has_rest_argument_ = true; - } - else { - if (has_rest_argument_) { - error("ordinal arguments must precede variable-length arguments", a->path(), a->position()); - } - if (has_named_arguments_) { - error("ordinal arguments must precede named arguments", a->path(), a->position()); - } - } - } - public: - Arguments(string path, Position position) - : Expression(path, position), - Vectorized<Argument*>(), - has_named_arguments_(false), - has_rest_argument_(false) - { } - ATTACH_OPERATIONS(); - }; - - ///////////////////////////////////////// - // Abstract base class for CSS selectors. - ///////////////////////////////////////// - class Selector : public AST_Node { - ADD_PROPERTY(bool, has_reference); - ADD_PROPERTY(bool, has_placeholder); - public: - Selector(string path, Position position, bool r = false, bool h = false) - : AST_Node(path, position), has_reference_(r), has_placeholder_(h) - { } - virtual ~Selector() = 0; - virtual Selector_Placeholder* find_placeholder(); - }; - inline Selector::~Selector() { } - - ///////////////////////////////////////////////////////////////////////// - // Interpolated selectors -- the interpolated String will be expanded and - // re-parsed into a normal selector classure. - ///////////////////////////////////////////////////////////////////////// - class Selector_Schema : public Selector { - ADD_PROPERTY(String*, contents); - public: - Selector_Schema(string path, Position position, String* c) - : Selector(path, position), contents_(c) - { } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////// - // Abstract base class for simple selectors. - //////////////////////////////////////////// - class Simple_Selector : public Selector { - public: - Simple_Selector(string path, Position position) - : Selector(path, position) - { } - virtual ~Simple_Selector() = 0; - }; - inline Simple_Selector::~Simple_Selector() { } - - ///////////////////////////////////// - // Parent references (i.e., the "&"). - ///////////////////////////////////// - class Selector_Reference : public Simple_Selector { - ADD_PROPERTY(Selector*, selector); - public: - Selector_Reference(string path, Position position, Selector* r = 0) - : Simple_Selector(path, position), selector_(r) - { has_reference(true); } - ATTACH_OPERATIONS(); - }; - - ///////////////////////////////////////////////////////////////////////// - // Placeholder selectors (e.g., "%foo") for use in extend-only selectors. - ///////////////////////////////////////////////////////////////////////// - class Selector_Placeholder : public Simple_Selector { - ADD_PROPERTY(string, name); - public: - Selector_Placeholder(string path, Position position, string n) - : Simple_Selector(path, position), name_(n) - { has_placeholder(true); } - virtual Selector_Placeholder* find_placeholder(); - ATTACH_OPERATIONS(); - }; - - ///////////////////////////////////////////////////////////////////// - // Type selectors (and the universal selector) -- e.g., div, span, *. - ///////////////////////////////////////////////////////////////////// - class Type_Selector : public Simple_Selector { - ADD_PROPERTY(string, name); - public: - Type_Selector(string path, Position position, string n) - : Simple_Selector(path, position), name_(n) - { } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////// - // Selector qualifiers -- i.e., classes and ids. - //////////////////////////////////////////////// - class Selector_Qualifier : public Simple_Selector { - ADD_PROPERTY(string, name); - public: - Selector_Qualifier(string path, Position position, string n) - : Simple_Selector(path, position), name_(n) - { } - ATTACH_OPERATIONS(); - }; - - /////////////////////////////////////////////////// - // Attribute selectors -- e.g., [src*=".jpg"], etc. - /////////////////////////////////////////////////// - class Attribute_Selector : public Simple_Selector { - ADD_PROPERTY(string, name); - ADD_PROPERTY(string, matcher); - ADD_PROPERTY(string, value); - public: - Attribute_Selector(string path, Position position, string n, string m, string v) - : Simple_Selector(path, position), name_(n), matcher_(m), value_(v) - { } - ATTACH_OPERATIONS(); - }; - - ////////////////////////////////////////////////////////////////// - // Pseudo selectors -- e.g., :first-child, :nth-of-type(...), etc. - ////////////////////////////////////////////////////////////////// - class Pseudo_Selector : public Simple_Selector { - ADD_PROPERTY(string, name); - ADD_PROPERTY(String*, expression); - public: - Pseudo_Selector(string path, Position position, string n, String* expr = 0) - : Simple_Selector(path, position), name_(n), expression_(expr) - { } - ATTACH_OPERATIONS(); - }; - - ///////////////////////////////////////////////// - // Negated selector -- e.g., :not(:first-of-type) - ///////////////////////////////////////////////// - class Negated_Selector : public Simple_Selector { - ADD_PROPERTY(Selector*, selector); - public: - Negated_Selector(string path, Position position, Selector* sel) - : Simple_Selector(path, position), selector_(sel) - { } - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////////////////////////////////// - // Simple selector sequences. Maintains flags indicating whether it contains - // any parent references or placeholders, to simplify expansion. - //////////////////////////////////////////////////////////////////////////// - class Compound_Selector : public Selector, public Vectorized<Simple_Selector*> { - protected: - void adjust_after_pushing(Simple_Selector* s) - { - if (s->has_reference()) has_reference(true); - if (s->has_placeholder()) has_placeholder(true); - } - public: - Compound_Selector(string path, Position position, size_t s = 0) - : Selector(path, position), - Vectorized<Simple_Selector*>(s) - { } - bool operator<(const Compound_Selector& rhs) const; - virtual Selector_Placeholder* find_placeholder(); - ATTACH_OPERATIONS(); - }; - - //////////////////////////////////////////////////////////////////////////// - // General selectors -- i.e., simple sequences combined with one of the four - // CSS selector combinators (">", "+", "~", and whitespace). Essentially a - // linked list. - //////////////////////////////////////////////////////////////////////////// - struct Context; - class Complex_Selector : public Selector { - public: - enum Combinator { ANCESTOR_OF, PARENT_OF, PRECEDES, ADJACENT_TO }; - private: - ADD_PROPERTY(Combinator, combinator); - ADD_PROPERTY(Compound_Selector*, head); - ADD_PROPERTY(Complex_Selector*, tail); - public: - Complex_Selector(string path, Position position, - Combinator c, - Compound_Selector* h, - Complex_Selector* t) - : Selector(path, position), combinator_(c), head_(h), tail_(t) - { - if ((h && h->has_reference()) || (t && t->has_reference())) has_reference(true); - if ((h && h->has_placeholder()) || (t && t->has_placeholder())) has_placeholder(true); - } - Compound_Selector* base(); - Complex_Selector* context(Context&); - Complex_Selector* innermost(); - virtual Selector_Placeholder* find_placeholder(); - ATTACH_OPERATIONS(); - }; - - /////////////////////////////////// - // Comma-separated selector groups. - /////////////////////////////////// - class Selector_List - : public Selector, public Vectorized<Complex_Selector*> { - protected: - void adjust_after_pushing(Complex_Selector* c) - { - if (c->has_reference()) has_reference(true); - if (c->has_placeholder()) has_placeholder(true); - } - public: - Selector_List(string path, Position position, size_t s = 0) - : Selector(path, position), Vectorized<Complex_Selector*>(s) - { } - virtual Selector_Placeholder* find_placeholder(); - ATTACH_OPERATIONS(); - }; -} - -#ifdef __clang__ - -#pragma clang diagnostic pop - -#endif diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/ast_def_macros.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/ast_def_macros.hpp deleted file mode 100644 index 663e4c40..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/ast_def_macros.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#define ATTACH_OPERATIONS()\ -virtual void perform(Operation<void>* op) { (*op)(this); }\ -virtual AST_Node* perform(Operation<AST_Node*>* op) { return (*op)(this); }\ -virtual Statement* perform(Operation<Statement*>* op) { return (*op)(this); }\ -virtual Expression* perform(Operation<Expression*>* op) { return (*op)(this); }\ -virtual Selector* perform(Operation<Selector*>* op) { return (*op)(this); }\ -virtual string perform(Operation<string>* op) { return (*op)(this); }\ -virtual Sass_Value perform(Operation<Sass_Value>* op) { return (*op)(this); } - -#define ADD_PROPERTY(type, name)\ -protected:\ - type name##_;\ -public:\ - type name() const { return name##_; }\ - type name(type name##__) { return name##_ = name##__; }\ -private: diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/ast_factory.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/ast_factory.hpp deleted file mode 100644 index 50681338..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/ast_factory.hpp +++ /dev/null @@ -1,82 +0,0 @@ -#define SASS_AST_FACTORY - -#include <vector> - -#ifndef SASS_AST -#include "ast.hpp" -#endif - -namespace Sass { - using namespace std; - - class AST_Factory { - vector<AST_Node*> nodes; - public: - // statements - Block* new_Block(string p, size_t l, size_t s = 0, bool r = false); - Ruleset* new_Ruleset(string p, size_t l, Selector* s, Block* b); - Propset* new_Propset(string p, size_t l, String* pf, Block* b); - Media_Query* new_Media_Query(string p, size_t l, List* q, Block* b); - At_Rule* new_At_Rule(string p, size_t l, string kwd, Selector* sel, Block* b); - Declaration* new_Declaration(string p, size_t l, String* prop, List* vals); - Assignment* new_Assignment(string p, size_t l, string var, Expression* val, bool guarded = false); - Import<Function_Call*>* new_CSS_Import(string p, size_t l, Function_Call* loc); - Import<String*>* new_SASS_Import(string p, size_t l, String* loc); - Warning* new_Warning(string p, size_t l, Expression* msg); - Comment* new_Comment(string p, size_t l, String* txt); - If* new_If(string p, size_t l, Expression* pred, Block* con, Block* alt = 0); - For* new_For(string p, size_t l, string var, Expression* lo, Expression* hi, Block* b, bool inc); - Each* new_Each(string p, size_t l, string var, Expression* lst, Block* b); - While* new_While(string p, size_t l, Expression* pred, Block* b); - Extension* new_Extension(string p, size_t l, Selector* s); - Definition<MIXIN>* new_Mixin_Definition(string p, size_t l, string n, Parameters* params, Block* b); - Definition<FUNCTION>* new_Function_Definition(string p, size_t l, string n, Parameters* params, Block* b); - Mixin_Call* new_Mixin_Call(string p, size_t l, string n, Arguments* args, Block* b = 0); - // expressions - List* new_List(string p, size_t l, size_t size = 0, List::Separator sep = List::space, bool argl = false); - Binary_Expression<AND>* new_And(string p, size_t l, Expression* lhs, Expression* rhs); - Binary_Expression<OR>* new_Or(string p, size_t l, Expression* lhs, Expression* rhs); - Binary_Expression<EQ>* new_Eq(string p, size_t l, Expression* lhs, Expression* rhs); - Binary_Expression<NEQ>* new_Neq(string p, size_t l, Expression* lhs, Expression* rhs); - Binary_Expression<GT>* new_Gt(string p, size_t l, Expression* lhs, Expression* rhs); - Binary_Expression<GTE>* new_Gte(string p, size_t l, Expression* lhs, Expression* rhs); - Binary_Expression<LT>* new_Lt(string p, size_t l, Expression* lhs, Expression* rhs); - Binary_Expression<LTE>* new_Lte(string p, size_t l, Expression* lhs, Expression* rhs); - Binary_Expression<ADD>* new_Add(string p, size_t l, Expression* lhs, Expression* rhs); - Binary_Expression<SUB>* new_Sub(string p, size_t l, Expression* lhs, Expression* rhs); - Binary_Expression<MUL>* new_Mul(string p, size_t l, Expression* lhs, Expression* rhs); - Binary_Expression<DIV>* new_Div(string p, size_t l, Expression* lhs, Expression* rhs); - Negation* new_Negation(string p, size_t l, Expression* o); - Function_Call* new_Function_Call(string p, size_t l, String* n, Arguments* args); - Variable* new_Variable(string p, size_t l, string n); - Textual<NUMBER>* new_Textual_Number(string p, size_t l, string val); - Textual<PERCENTAGE>* new_Textual_Percentage(string p, size_t l, string val); - Textual<DIMENSION>* new_Textual_Dimension(string p, size_t l, string val); - Textual<HEX>* new_Textual_Hex(string p, size_t l, string val); - Number* new_Number(string p, size_t l, double val); - Percentage* new_Percentage(string p, size_t l, double val); - Dimension* new_Dimension(string p, size_t l, double val, string unit); - Color* new_Color(string p, size_t l, double r, double g, double b, double a = 1, string disp = ""); - Boolean* new_Boolean(string p, size_t l, bool val); - String_Schema* new_String_Schema(string p, size_t l, size_t size = 0); - String_Constant* new_String_Constant(string p, size_t l, string val); - String_Constant* new_String_Constant(string p, size_t l, const char* beg); - String_Constant* new_String_Constant(string p, size_t l, const char* beg, const char* end); - Media_Expression* new_Media_Expression(string p, size_t l, String* f, Expression* v); - // parameters and arguments - Parameter* new_Parameter(string p, size_t l, string n, Expression* def = 0, bool rest = false); - Parameters* new_Parameters(string p, size_t l); - Argument* new_Argument(string p, size_t l, Expression* val, string n = "", bool rest = false); - Arguments* new_Arguments(string p, size_t l); - // selectors - Selector_Schema* new_Selector_Schema(string p, size_t l, String* c); - Simple_Selector* new_Simple_Selector(string p, size_t l, string c); - Reference_Selector* new_Reference_Selector(string p, size_t l); - Placeholder_Selector* new_Placeholder_Selector(string p, size_t l, string n); - Pseudo_Selector* new_Pseudo_Selector(string p, size_t l, string n, Expression* expr = 0); - Negated_Selector* new_Negated_Selector(string p, size_t l, Simple_Base* sel); - Compound_Selector* new_Compound_Selector(string p, size_t l, size_t s = 0); - Complex_Selector* new_Complex_Selector(string p, size_t l, Complex_Selector::Combinator c, Complex_Selector* ctx, Compound_Selector* sel); - Selector_List* new_Selector_List(string p, size_t l, size_t s = 0); - }; -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/ast_fwd_decl.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/ast_fwd_decl.hpp deleted file mode 100644 index d6d8ba3c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/ast_fwd_decl.hpp +++ /dev/null @@ -1,66 +0,0 @@ -///////////////////////////////////////////// -// Forward declarations for the AST visitors. -///////////////////////////////////////////// -namespace Sass { - - class AST_Node; - // statements - class Statement; - class Block; - class Ruleset; - class Propset; - class Media_Block; - class At_Rule; - class Declaration; - class Assignment; - class Import; - class Import_Stub; - class Warning; - class Comment; - class If; - class For; - class Each; - class While; - class Return; - class Content; - class Extension; - class Definition; - class Mixin_Call; - // expressions - class Expression; - class List; - class Binary_Expression; - class Unary_Expression; - class Function_Call; - class Function_Call_Schema; - class Variable; - class Textual; - class Number; - class Color; - class Boolean; - class String_Schema; - class String; - class String_Constant; - class Media_Query; - class Media_Query_Expression; - class Null; - // parameters and arguments - class Parameter; - class Parameters; - class Argument; - class Arguments; - // selectors - class Selector; - class Selector_Schema; - class Selector_Reference; - class Selector_Placeholder; - class Type_Selector; - class Selector_Qualifier; - class Attribute_Selector; - class Pseudo_Selector; - class Negated_Selector; - class Compound_Selector; - class Complex_Selector; - class Selector_List; - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/backtrace.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/backtrace.hpp deleted file mode 100644 index 48294de7..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/backtrace.hpp +++ /dev/null @@ -1,61 +0,0 @@ -#define SASS_BACKTRACE - -#include <sstream> - -#ifndef SASS_POSITION -#include "position.hpp" -#endif - -namespace Sass { - - using namespace std; - - struct Backtrace { - - Backtrace* parent; - string path; - Position position; - string caller; - - Backtrace(Backtrace* prn, string pth, Position position, string c) - : parent(prn), - path(pth), - position(position), - caller(c) - { } - - string to_string(bool warning = false) - { - stringstream ss; - Backtrace* this_point = this; - - if (!warning) ss << endl << "Backtrace:"; - // the first tracepoint (which is parent-less) is an empty placeholder - while (this_point->parent) { - ss << endl - << "\t" - << (warning ? " " : "") - << this_point->path - << ":" - << this_point->position.line - << this_point->parent->caller; - this_point = this_point->parent; - } - - return ss.str(); - } - - size_t depth() - { - size_t d = 0; - Backtrace* p = parent; - while (p) { - ++d; - p = p->parent; - } - return d-1; - } - - }; - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/base64vlq.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/base64vlq.cpp deleted file mode 100644 index 1e569ca4..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/base64vlq.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include "base64vlq.hpp" - -namespace Sass { - - string Base64VLQ::encode(const int number) const - { - string encoded = ""; - - int vlq = to_vlq_signed(number); - - do { - int digit = vlq & VLQ_BASE_MASK; - vlq >>= VLQ_BASE_SHIFT; - if (vlq > 0) { - digit |= VLQ_CONTINUATION_BIT; - } - encoded += base64_encode(digit); - } while (vlq > 0); - - return encoded; - } - - char Base64VLQ::base64_encode(const int number) const - { - int index = number; - if (index < 0) index = 0; - if (index > 63) index = 63; - return CHARACTERS[index]; - } - - int Base64VLQ::to_vlq_signed(const int number) const - { - return (number < 0) ? ((-number) << 1) + 1 : (number << 1) + 0; - } - - const char* Base64VLQ::CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - const int Base64VLQ::VLQ_BASE_SHIFT = 5; - const int Base64VLQ::VLQ_BASE = 1 << VLQ_BASE_SHIFT; - const int Base64VLQ::VLQ_BASE_MASK = VLQ_BASE - 1; - const int Base64VLQ::VLQ_CONTINUATION_BIT = VLQ_BASE; - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/base64vlq.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/base64vlq.hpp deleted file mode 100644 index a1e089d6..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/base64vlq.hpp +++ /dev/null @@ -1,28 +0,0 @@ -#define SASS_BASE64VLQ - -#include <string> - -namespace Sass { - using std::string; - - class Base64VLQ { - - public: - - string encode(const int number) const; - - private: - - char base64_encode(const int number) const; - - int to_vlq_signed(const int number) const; - - static const char* CHARACTERS; - - static const int VLQ_BASE_SHIFT; - static const int VLQ_BASE; - static const int VLQ_BASE_MASK; - static const int VLQ_CONTINUATION_BIT; - }; - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/bind.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/bind.cpp deleted file mode 100644 index 0afb86a8..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/bind.cpp +++ /dev/null @@ -1,160 +0,0 @@ -#include "bind.hpp" -#include "ast.hpp" -#include "context.hpp" -#include "eval.hpp" -#include <map> -#include <iostream> -#include <sstream> -#include "to_string.hpp" - -namespace Sass { - using namespace std; - - void bind(string callee, Parameters* ps, Arguments* as, Context& ctx, Env* env, Eval* eval) - { - map<string, Parameter*> param_map; - - // Set up a map to ensure named arguments refer to actual parameters. Also - // eval each default value left-to-right, wrt env, populating env as we go. - for (size_t i = 0, L = ps->length(); i < L; ++i) { - Parameter* p = (*ps)[i]; - param_map[p->name()] = p; - // if (p->default_value()) { - // env->current_frame()[p->name()] = p->default_value()->perform(eval->with(env)); - // } - } - - // plug in all args; if we have leftover params, deal with it later - size_t ip = 0, LP = ps->length(); - size_t ia = 0, LA = as->length(); - while (ia < LA) { - if (ip >= LP) { - stringstream msg; - msg << callee << " only takes " << LP << " arguments; " - << "given " << LA; - error(msg.str(), as->path(), as->position()); - } - Parameter* p = (*ps)[ip]; - Argument* a = (*as)[ia]; - - if (a->is_rest_argument() && p->is_rest_parameter()) { - // rest param and rest arg -- just add one to the other - if (env->current_frame_has(p->name())) { - *static_cast<List*>(env->current_frame()[p->name()]) - += static_cast<List*>(a->value()); - } - else { - env->current_frame()[p->name()] = a->value(); - } - ++ia; - ++ip; - } - else if (p->is_rest_parameter()) { - List* arglist = 0; - if (!env->current_frame_has(p->name())) { - arglist = new (ctx.mem) List(p->path(), - p->position(), - 0, - List::COMMA, - true); - env->current_frame()[p->name()] = arglist; - } - else { - arglist = static_cast<List*>(env->current_frame()[p->name()]); - } - *arglist << a->value(); // TODO: named args going into rest-param? - ++ia; - } - else if (a->is_rest_argument()) { - // normal param and rest arg - if (env->current_frame_has(p->name())) { - stringstream msg; - msg << "parameter " << p->name() - << " provided more than once in call to " << callee; - error(msg.str(), a->path(), a->position()); - } - List* arglist = static_cast<List*>(a->value()); - // if it's the last param, move the whole arglist into it - if (ip == LP-1) { - env->current_frame()[p->name()] = arglist; - ++ia; - } - // otherwise move one of the rest args into the param and loop - else { - env->current_frame()[p->name()] = (*arglist)[0]; - arglist->elements().erase(arglist->elements().begin()); - } - ++ip; - } - else if (a->name().empty()) { - // ordinal arg -- bind it to the next param - env->current_frame()[p->name()] = a->value(); - ++ip; - ++ia; - } - else { - // named arg -- bind it to the appropriately named param - if (!param_map.count(a->name())) { - stringstream msg; - msg << callee << " has no parameter named " << a->name(); - error(msg.str(), a->path(), a->position()); - } - if (param_map[a->name()]->is_rest_parameter()) { - stringstream msg; - msg << "argument " << a->name() << " of " << callee - << "cannot be used as named argument"; - error(msg.str(), a->path(), a->position()); - } - if (env->current_frame_has(a->name())) { - stringstream msg; - msg << "parameter " << p->name() - << "provided more than once in call to " << callee; - error(msg.str(), a->path(), a->position()); - } - env->current_frame()[a->name()] = a->value(); - ++ia; - } - } - - // If we make it here, we're out of args but may have leftover params. - // That's only okay if they have default values, or were already bound by - // named arguments, or if it's a single rest-param. - for (size_t i = ip; i < LP; ++i) { - To_String to_string; - Parameter* leftover = (*ps)[i]; - // cerr << "env for default params:" << endl; - // env->print(); - // cerr << "********" << endl; - if (!env->current_frame_has(leftover->name())) { - if (leftover->is_rest_parameter()) { - env->current_frame()[leftover->name()] = new (ctx.mem) List(leftover->path(), - leftover->position(), - 0, - List::COMMA, - true); - } - else if (leftover->default_value()) { - // make sure to eval the default value in the env that we've been populating - Env* old_env = eval->env; - Backtrace* old_bt = eval->backtrace; - Expression* dv = leftover->default_value()->perform(eval->with(env, eval->backtrace)); - eval->env = old_env; - eval->backtrace = old_bt; - // dv->perform(&to_string); - env->current_frame()[leftover->name()] = dv; - } - else { - // param is unbound and has no default value -- error - stringstream msg; - msg << "required parameter " << leftover->name() - << " is missing in call to " << callee; - error(msg.str(), as->path(), as->position()); - } - } - } - - return; - } - - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/bind.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/bind.hpp deleted file mode 100644 index 8999ff86..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/bind.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#define SASS_BIND - -#ifndef SASS_ENVIRONMENT -#include "environment.hpp" -#endif - -#include <string> - -namespace Sass { - class AST_Node; - class Parameters; - class Arguments; - struct Context; - class Eval; - typedef Environment<AST_Node*> Env; - - void bind(string caller, Parameters*, Arguments*, Context&, Env*, Eval*); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/color_names.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/color_names.hpp deleted file mode 100644 index 8046f6a1..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/color_names.hpp +++ /dev/null @@ -1,311 +0,0 @@ -#define SASS_COLOR_NAMES - -namespace Sass { - - const char* color_names[] = - { - "aliceblue", - "antiquewhite", - "aqua", - "aquamarine", - "azure", - "beige", - "bisque", - "black", - "blanchedalmond", - "blue", - "blueviolet", - "brown", - "burlywood", - "cadetblue", - "chartreuse", - "chocolate", - "coral", - "cornflowerblue", - "cornsilk", - "crimson", - "cyan", - "darkblue", - "darkcyan", - "darkgoldenrod", - "darkgray", - "darkgrey", - "darkgreen", - "darkkhaki", - "darkmagenta", - "darkolivegreen", - "darkorange", - "darkorchid", - "darkred", - "darksalmon", - "darkseagreen", - "darkslateblue", - "darkslategray", - "darkslategrey", - "darkturquoise", - "darkviolet", - "deeppink", - "deepskyblue", - "dimgray", - "dimgrey", - "dodgerblue", - "firebrick", - "floralwhite", - "forestgreen", - "fuchsia", - "gainsboro", - "ghostwhite", - "gold", - "goldenrod", - "gray", - "grey", - "green", - "greenyellow", - "honeydew", - "hotpink", - "indianred", - "indigo", - "ivory", - "khaki", - "lavender", - "lavenderblush", - "lawngreen", - "lemonchiffon", - "lightblue", - "lightcoral", - "lightcyan", - "lightgoldenrodyellow", - "lightgray", - "lightgrey", - "lightgreen", - "lightpink", - "lightsalmon", - "lightseagreen", - "lightskyblue", - "lightslategray", - "lightslategrey", - "lightsteelblue", - "lightyellow", - "lime", - "limegreen", - "linen", - "magenta", - "maroon", - "mediumaquamarine", - "mediumblue", - "mediumorchid", - "mediumpurple", - "mediumseagreen", - "mediumslateblue", - "mediumspringgreen", - "mediumturquoise", - "mediumvioletred", - "midnightblue", - "mintcream", - "mistyrose", - "moccasin", - "navajowhite", - "navy", - "oldlace", - "olive", - "olivedrab", - "orange", - "orangered", - "orchid", - "palegoldenrod", - "palegreen", - "paleturquoise", - "palevioletred", - "papayawhip", - "peachpuff", - "peru", - "pink", - "plum", - "powderblue", - "purple", - "red", - "rosybrown", - "royalblue", - "saddlebrown", - "salmon", - "sandybrown", - "seagreen", - "seashell", - "sienna", - "silver", - "skyblue", - "slateblue", - "slategray", - "slategrey", - "snow", - "springgreen", - "steelblue", - "tan", - "teal", - "thistle", - "tomato", - "turquoise", - "violet", - "wheat", - "white", - "whitesmoke", - "yellow", - "yellowgreen", - // sentinel value - 0 - }; - - const double color_values[] = - { - 0xf0, 0xf8, 0xff, - 0xfa, 0xeb, 0xd7, - 0x00, 0xff, 0xff, - 0x7f, 0xff, 0xd4, - 0xf0, 0xff, 0xff, - 0xf5, 0xf5, 0xdc, - 0xff, 0xe4, 0xc4, - 0x00, 0x00, 0x00, - 0xff, 0xeb, 0xcd, - 0x00, 0x00, 0xff, - 0x8a, 0x2b, 0xe2, - 0xa5, 0x2a, 0x2a, - 0xde, 0xb8, 0x87, - 0x5f, 0x9e, 0xa0, - 0x7f, 0xff, 0x00, - 0xd2, 0x69, 0x1e, - 0xff, 0x7f, 0x50, - 0x64, 0x95, 0xed, - 0xff, 0xf8, 0xdc, - 0xdc, 0x14, 0x3c, - 0x00, 0xff, 0xff, - 0x00, 0x00, 0x8b, - 0x00, 0x8b, 0x8b, - 0xb8, 0x86, 0x0b, - 0xa9, 0xa9, 0xa9, - 0xa9, 0xa9, 0xa9, - 0x00, 0x64, 0x00, - 0xbd, 0xb7, 0x6b, - 0x8b, 0x00, 0x8b, - 0x55, 0x6b, 0x2f, - 0xff, 0x8c, 0x00, - 0x99, 0x32, 0xcc, - 0x8b, 0x00, 0x00, - 0xe9, 0x96, 0x7a, - 0x8f, 0xbc, 0x8f, - 0x48, 0x3d, 0x8b, - 0x2f, 0x4f, 0x4f, - 0x2f, 0x4f, 0x4f, - 0x00, 0xce, 0xd1, - 0x94, 0x00, 0xd3, - 0xff, 0x14, 0x93, - 0x00, 0xbf, 0xff, - 0x69, 0x69, 0x69, - 0x69, 0x69, 0x69, - 0x1e, 0x90, 0xff, - 0xb2, 0x22, 0x22, - 0xff, 0xfa, 0xf0, - 0x22, 0x8b, 0x22, - 0xff, 0x00, 0xff, - 0xdc, 0xdc, 0xdc, - 0xf8, 0xf8, 0xff, - 0xff, 0xd7, 0x00, - 0xda, 0xa5, 0x20, - 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, - 0x00, 0x80, 0x00, - 0xad, 0xff, 0x2f, - 0xf0, 0xff, 0xf0, - 0xff, 0x69, 0xb4, - 0xcd, 0x5c, 0x5c, - 0x4b, 0x00, 0x82, - 0xff, 0xff, 0xf0, - 0xf0, 0xe6, 0x8c, - 0xe6, 0xe6, 0xfa, - 0xff, 0xf0, 0xf5, - 0x7c, 0xfc, 0x00, - 0xff, 0xfa, 0xcd, - 0xad, 0xd8, 0xe6, - 0xf0, 0x80, 0x80, - 0xe0, 0xff, 0xff, - 0xfa, 0xfa, 0xd2, - 0xd3, 0xd3, 0xd3, - 0xd3, 0xd3, 0xd3, - 0x90, 0xee, 0x90, - 0xff, 0xb6, 0xc1, - 0xff, 0xa0, 0x7a, - 0x20, 0xb2, 0xaa, - 0x87, 0xce, 0xfa, - 0x77, 0x88, 0x99, - 0x77, 0x88, 0x99, - 0xb0, 0xc4, 0xde, - 0xff, 0xff, 0xe0, - 0x00, 0xff, 0x00, - 0x32, 0xcd, 0x32, - 0xfa, 0xf0, 0xe6, - 0xff, 0x00, 0xff, - 0x80, 0x00, 0x00, - 0x66, 0xcd, 0xaa, - 0x00, 0x00, 0xcd, - 0xba, 0x55, 0xd3, - 0x93, 0x70, 0xd8, - 0x3c, 0xb3, 0x71, - 0x7b, 0x68, 0xee, - 0x00, 0xfa, 0x9a, - 0x48, 0xd1, 0xcc, - 0xc7, 0x15, 0x85, - 0x19, 0x19, 0x70, - 0xf5, 0xff, 0xfa, - 0xff, 0xe4, 0xe1, - 0xff, 0xe4, 0xb5, - 0xff, 0xde, 0xad, - 0x00, 0x00, 0x80, - 0xfd, 0xf5, 0xe6, - 0x80, 0x80, 0x00, - 0x6b, 0x8e, 0x23, - 0xff, 0xa5, 0x00, - 0xff, 0x45, 0x00, - 0xda, 0x70, 0xd6, - 0xee, 0xe8, 0xaa, - 0x98, 0xfb, 0x98, - 0xaf, 0xee, 0xee, - 0xd8, 0x70, 0x93, - 0xff, 0xef, 0xd5, - 0xff, 0xda, 0xb9, - 0xcd, 0x85, 0x3f, - 0xff, 0xc0, 0xcb, - 0xdd, 0xa0, 0xdd, - 0xb0, 0xe0, 0xe6, - 0x80, 0x00, 0x80, - 0xff, 0x00, 0x00, - 0xbc, 0x8f, 0x8f, - 0x41, 0x69, 0xe1, - 0x8b, 0x45, 0x13, - 0xfa, 0x80, 0x72, - 0xf4, 0xa4, 0x60, - 0x2e, 0x8b, 0x57, - 0xff, 0xf5, 0xee, - 0xa0, 0x52, 0x2d, - 0xc0, 0xc0, 0xc0, - 0x87, 0xce, 0xeb, - 0x6a, 0x5a, 0xcd, - 0x70, 0x80, 0x90, - 0x70, 0x80, 0x90, - 0xff, 0xfa, 0xfa, - 0x00, 0xff, 0x7f, - 0x46, 0x82, 0xb4, - 0xd2, 0xb4, 0x8c, - 0x00, 0x80, 0x80, - 0xd8, 0xbf, 0xd8, - 0xff, 0x63, 0x47, - 0x40, 0xe0, 0xd0, - 0xee, 0x82, 0xee, - 0xf5, 0xde, 0xb3, - 0xff, 0xff, 0xff, - 0xf5, 0xf5, 0xf5, - 0xff, 0xff, 0x00, - 0x9a, 0xcd, 0x32, - // sentinel value - 0xfff - }; - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/configure.ac b/node_modules/gulp-sass/node_modules/node-sass/libsass/configure.ac deleted file mode 100644 index 0cd5f899..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/configure.ac +++ /dev/null @@ -1,73 +0,0 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -AC_PREREQ([2.61]) -AC_INIT([libsass], [1.0], [support@moovweb.com]) -AC_CONFIG_SRCDIR([ast.hpp]) -AC_CONFIG_MACRO_DIR([m4]) -AC_CONFIG_HEADERS([config.h]) -AM_INIT_AUTOMAKE([1.10 foreign]) -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) -LT_INIT - -# Checks for programs. -AC_PROG_CXX - -AC_LANG([C++]) - -# Checks for header files. -AC_CHECK_HEADERS([unistd.h]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_TYPE_SIZE_T - -# Checks for library functions. -AC_FUNC_MALLOC -AC_CHECK_FUNCS([floor getcwd strtol]) - -# Checks for testing. -AC_ARG_ENABLE(tests, AS_HELP_STRING([--enable-tests], [enable testing the build]), - [enable_tests="$enableval"], [enable_tests=no]) - -if test "x$enable_tests" = "xyes"; then - AC_PROG_CC - AC_PROG_AWK - AC_PATH_PROG(RUBY, [ruby]) - - AC_ARG_WITH(sassc-dir, - AS_HELP_STRING([--with-sassc-dir=<dir>], [specify directory of sassc sources for testing (default: sassc)]), - [sassc_dir="$withval"], [sassc_dir="sassc"]) - AC_CHECK_FILE([$sassc_dir/sassc.c], [], [ - AC_MSG_ERROR([Unable to find sassc directory. -You must clone the sassc repository in this directory or specify -the --with-sassc-dir=<dir> argument. -]) - ]) - SASS_SASSC_PATH=$sassc_dir - AC_SUBST(SASS_SASSC_PATH) - - AC_ARG_WITH(sass-spec-dir, - AS_HELP_STRING([--with-sass-spec-dir=<dir>], [specify directory of sass-spec for testing (default: sass-spec)]), - [sass_spec_dir="$withval"], [sass_spec_dir="sass-spec"]) - AC_CHECK_FILE([$sass_spec_dir/sass-spec.rb], [], [ - AC_MSG_ERROR([Unable to find sass-spec directory. -You must clone the sass-spec repository in this directory or specify -the --with-sass-spec-dir=<dir> argument. -]) - ]) - # Automake doesn't like its tests in an absolute path, so we make it relative. - case $sass_spec_dir in - /*) - SASS_SPEC_PATH=`$RUBY -e "require 'pathname';puts Pathname.new('$sass_spec_dir').relative_path_from(Pathname.new('$PWD')).to_s"` - ;; - *) - SASS_SPEC_PATH="$sass_spec_dir" - ;; - esac - AC_SUBST(SASS_SPEC_PATH) -fi - -AM_CONDITIONAL(ENABLE_TESTS, test "x$enable_tests" = "xyes") - -AC_CONFIG_FILES([Makefile support/libsass.pc]) -AC_OUTPUT diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/constants.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/constants.cpp deleted file mode 100644 index e9a87e24..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/constants.cpp +++ /dev/null @@ -1,132 +0,0 @@ -#include "constants.hpp" - -namespace Sass { - namespace Constants { - - // hidden variable name for the image path (for the image-url built-in) - extern const char image_path_var[] = "$[image path]"; - - // sass keywords - extern const char import_kwd[] = "@import"; - extern const char mixin_kwd[] = "@mixin"; - extern const char function_kwd[] = "@function"; - extern const char return_kwd[] = "@return"; - extern const char include_kwd[] = "@include"; - extern const char content_kwd[] = "@content"; - extern const char extend_kwd[] = "@extend"; - extern const char if_kwd[] = "@if"; - extern const char else_kwd[] = "@else"; - extern const char if_after_else_kwd[] = "if"; - extern const char for_kwd[] = "@for"; - extern const char from_kwd[] = "from"; - extern const char to_kwd[] = "to"; - extern const char through_kwd[] = "through"; - extern const char each_kwd[] = "@each"; - extern const char in_kwd[] = "in"; - extern const char while_kwd[] = "@while"; - extern const char warn_kwd[] = "@warn"; - extern const char default_kwd[] = "default"; - extern const char null_kwd[] = "null"; - extern const char optional_kwd[] = "optional"; - - // css standard units - extern const char em_kwd[] = "em"; - extern const char ex_kwd[] = "ex"; - extern const char px_kwd[] = "px"; - extern const char cm_kwd[] = "cm"; - extern const char mm_kwd[] = "mm"; - extern const char pt_kwd[] = "pt"; - extern const char pc_kwd[] = "pc"; - extern const char deg_kwd[] = "deg"; - extern const char rad_kwd[] = "rad"; - extern const char grad_kwd[] = "grad"; - extern const char ms_kwd[] = "ms"; - extern const char s_kwd[] = "s"; - extern const char Hz_kwd[] = "Hz"; - extern const char kHz_kwd[] = "kHz"; - - // vendor prefixes - extern const char vendor_opera_kwd[] = "-o-"; - extern const char vendor_webkit_kwd[] = "-webkit-"; - extern const char vendor_mozilla_kwd[] = "-moz-"; - extern const char vendor_ms_kwd[] = "-ms-"; - extern const char vendor_khtml_kwd[] = "-khtml-"; - - // css functions and keywords - extern const char charset_kwd[] = "@charset"; - extern const char media_kwd[] = "@media"; - extern const char keyframes_kwd[] = "keyframes"; - extern const char only_kwd[] = "only"; - extern const char rgb_kwd[] = "rgb("; - extern const char url_kwd[] = "url("; - extern const char image_url_kwd[] = "image-url("; - extern const char important_kwd[] = "important"; - extern const char pseudo_not_kwd[] = ":not("; - extern const char even_kwd[] = "even"; - extern const char odd_kwd[] = "odd"; - extern const char progid_kwd[] = "progid"; - - // css attribute-matching operators - extern const char tilde_equal[] = "~="; - extern const char pipe_equal[] = "|="; - extern const char caret_equal[] = "^="; - extern const char dollar_equal[] = "$="; - extern const char star_equal[] = "*="; - - // relational & logical operators and constants - extern const char and_kwd[] = "and"; - extern const char or_kwd[] = "or"; - extern const char not_kwd[] = "not"; - extern const char gt[] = ">"; - extern const char gte[] = ">="; - extern const char lt[] = "<"; - extern const char lte[] = "<="; - extern const char eq[] = "=="; - extern const char neq[] = "!="; - extern const char true_kwd[] = "true"; - extern const char false_kwd[] = "false"; - - // miscellaneous punctuation and delimiters - extern const char percent_str[] = "%"; - extern const char empty_str[] = ""; - extern const char slash_slash[] = "//"; - extern const char slash_star[] = "/*"; - extern const char star_slash[] = "*/"; - extern const char hash_lbrace[] = "#{"; - extern const char rbrace[] = "}"; - extern const char rparen[] = ")"; - extern const char sign_chars[] = "-+"; - extern const char hyphen[] = "-"; - extern const char ellipsis[] = "..."; - - // type names - extern const char numeric_name[] = "numeric value"; - extern const char number_name[] = "number"; - extern const char percentage_name[] = "percentage"; - extern const char dimension_name[] = "numeric dimension"; - extern const char string_name[] = "string"; - extern const char bool_name[] = "bool"; - extern const char color_name[] = "color"; - extern const char list_name[] = "list"; - extern const char arglist_name[] = "arglist"; - - // byte order marks - // (taken from http://en.wikipedia.org/wiki/Byte_order_mark) - extern const unsigned char utf_8_bom[] = { 0xEF, 0xBB, 0xBF }; - extern const unsigned char utf_16_bom_be[] = { 0xFE, 0xFF }; - extern const unsigned char utf_16_bom_le[] = { 0xFF, 0xFE }; - extern const unsigned char utf_32_bom_be[] = { 0x00, 0x00, 0xFE, 0xFF }; - extern const unsigned char utf_32_bom_le[] = { 0xFF, 0xFE, 0x00, 0x00 }; - extern const unsigned char utf_7_bom_1[] = { 0x2B, 0x2F, 0x76, 0x38 }; - extern const unsigned char utf_7_bom_2[] = { 0x2B, 0x2F, 0x76, 0x39 }; - extern const unsigned char utf_7_bom_3[] = { 0x2B, 0x2F, 0x76, 0x2B }; - extern const unsigned char utf_7_bom_4[] = { 0x2B, 0x2F, 0x76, 0x2F }; - extern const unsigned char utf_7_bom_5[] = { 0x2B, 0x2F, 0x76, 0x38, 0x2D }; - extern const unsigned char utf_1_bom[] = { 0xF7, 0x64, 0x4C }; - extern const unsigned char utf_ebcdic_bom[] = { 0xDD, 0x73, 0x66, 0x73 }; - extern const unsigned char scsu_bom[] = { 0x0E, 0xFE, 0xFF }; - extern const unsigned char bocu_1_bom[] = { 0xFB, 0xEE, 0x28 }; - extern const unsigned char gb_18030_bom[] = { 0x84, 0x31, 0x95, 0x33 }; - - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/constants.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/constants.hpp deleted file mode 100644 index 7cc60300..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/constants.hpp +++ /dev/null @@ -1,132 +0,0 @@ -#define SASS_CONSTANTS - -namespace Sass { - namespace Constants { - - // hidden variable name for the image path (for the image-url built-in) - extern const char image_path_var[]; - - // sass keywords - extern const char import_kwd[]; - extern const char mixin_kwd[]; - extern const char function_kwd[]; - extern const char return_kwd[]; - extern const char include_kwd[]; - extern const char content_kwd[]; - extern const char extend_kwd[]; - extern const char if_kwd[]; - extern const char else_kwd[]; - extern const char if_after_else_kwd[]; - extern const char for_kwd[]; - extern const char from_kwd[]; - extern const char to_kwd[]; - extern const char through_kwd[]; - extern const char each_kwd[]; - extern const char in_kwd[]; - extern const char while_kwd[]; - extern const char warn_kwd[]; - extern const char default_kwd[]; - extern const char null_kwd[]; - extern const char optional_kwd[]; - - // css standard units - extern const char em_kwd[]; - extern const char ex_kwd[]; - extern const char px_kwd[]; - extern const char cm_kwd[]; - extern const char mm_kwd[]; - extern const char pt_kwd[]; - extern const char pc_kwd[]; - extern const char deg_kwd[]; - extern const char rad_kwd[]; - extern const char grad_kwd[]; - extern const char ms_kwd[]; - extern const char s_kwd[]; - extern const char Hz_kwd[]; - extern const char kHz_kwd[]; - - // vendor prefixes - extern const char vendor_opera_kwd[]; - extern const char vendor_webkit_kwd[]; - extern const char vendor_mozilla_kwd[]; - extern const char vendor_ms_kwd[]; - extern const char vendor_khtml_kwd[]; - - // css functions and keywords - extern const char charset_kwd[]; - extern const char media_kwd[]; - extern const char keyframes_kwd[]; - extern const char only_kwd[]; - extern const char rgb_kwd[]; - extern const char url_kwd[]; - extern const char image_url_kwd[]; - extern const char important_kwd[]; - extern const char pseudo_not_kwd[]; - extern const char even_kwd[]; - extern const char odd_kwd[]; - extern const char progid_kwd[]; - - // css attribute-matching operators - extern const char tilde_equal[]; - extern const char pipe_equal[]; - extern const char caret_equal[]; - extern const char dollar_equal[]; - extern const char star_equal[]; - - // relational & logical operators and constants - extern const char and_kwd[]; - extern const char or_kwd[]; - extern const char not_kwd[]; - extern const char gt[]; - extern const char gte[]; - extern const char lt[]; - extern const char lte[]; - extern const char eq[]; - extern const char neq[]; - extern const char true_kwd[]; - extern const char false_kwd[]; - - // miscellaneous punctuation and delimiters - extern const char percent_str[]; - extern const char empty_str[]; - extern const char slash_slash[]; - extern const char slash_star[]; - extern const char star_slash[]; - extern const char hash_lbrace[]; - extern const char rbrace[]; - extern const char rparen[]; - extern const char sign_chars[]; - extern const char hyphen[]; - extern const char ellipsis[]; - - // type names - extern const char numeric_name[]; - extern const char number_name[]; - extern const char percentage_name[]; - extern const char dimension_name[]; - extern const char string_name[]; - extern const char bool_name[]; - extern const char color_name[]; - extern const char list_name[]; - extern const char arglist_name[]; - - // byte order marks - // (taken from http://en.wikipedia.org/wiki/Byte_order_mark) - extern const unsigned char utf_8_bom[]; - extern const unsigned char utf_16_bom_be[]; - extern const unsigned char utf_16_bom_le[]; - extern const unsigned char utf_32_bom_be[]; - extern const unsigned char utf_32_bom_le[]; - extern const unsigned char utf_7_bom_1[]; - extern const unsigned char utf_7_bom_2[]; - extern const unsigned char utf_7_bom_3[]; - extern const unsigned char utf_7_bom_4[]; - extern const unsigned char utf_7_bom_5[]; - extern const unsigned char utf_1_bom[]; - extern const unsigned char utf_ebcdic_bom[]; - extern const unsigned char scsu_bom[]; - extern const unsigned char bocu_1_bom[]; - extern const unsigned char gb_18030_bom[]; - - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/context.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/context.cpp deleted file mode 100644 index 1f589e3a..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/context.cpp +++ /dev/null @@ -1,394 +0,0 @@ -#ifdef _WIN32 -#include <direct.h> -#define getcwd _getcwd -#define PATH_SEP ';' -#else -#include <unistd.h> -#define PATH_SEP ':' -#endif - -#include <cstring> -#include <iostream> -#include <sstream> -#include "context.hpp" -#include "constants.hpp" -#include "parser.hpp" -#include "file.hpp" -#include "inspect.hpp" -#include "output_nested.hpp" -#include "output_compressed.hpp" -#include "expand.hpp" -#include "eval.hpp" -#include "contextualize.hpp" -#include "extend.hpp" -#include "copy_c_str.hpp" -#include "color_names.hpp" -#include "functions.hpp" -#include "backtrace.hpp" - -#ifndef SASS_PRELEXER -#include "prelexer.hpp" -#endif - -#include <iomanip> -#include <iostream> - -namespace Sass { - using namespace Constants; - using std::cerr; - using std::endl; - - Context::Context(Context::Data initializers) - : mem(Memory_Manager<AST_Node>()), - source_c_str (initializers.source_c_str()), - sources (vector<const char*>()), - include_paths (initializers.include_paths()), - queue (vector<pair<string, const char*> >()), - style_sheets (map<string, Block*>()), - source_map(File::base_name(initializers.entry_point())), - image_path (initializers.image_path()), - source_comments (initializers.source_comments()), - source_maps (initializers.source_maps()), - output_style (initializers.output_style()), - source_map_file (initializers.source_map_file()), - names_to_colors (map<string, Color*>()), - colors_to_names (map<int, string>()) - { - cwd = get_cwd(); - - collect_include_paths(initializers.include_paths_c_str()); - collect_include_paths(initializers.include_paths_array()); - - setup_color_map(); - - string entry_point = initializers.entry_point(); - if (!entry_point.empty()) { - string result(add_file(entry_point)); - if (result.empty()) { - throw entry_point; - } - } - } - - Context::~Context() - { for (size_t i = 0; i < sources.size(); ++i) delete[] sources[i]; } - - void Context::setup_color_map() - { - size_t i = 0; - while (color_names[i]) { - string name(color_names[i]); - Color* value = new (mem) Color("[COLOR TABLE]", Position(), - color_values[i*3], - color_values[i*3+1], - color_values[i*3+2]); - names_to_colors[name] = value; - int numval = color_values[i*3]*0x10000; - numval += color_values[i*3+1]*0x100; - numval += color_values[i*3+2]; - colors_to_names[numval] = name; - ++i; - } - } - - void Context::collect_include_paths(const char* paths_str) - { - include_paths.push_back(cwd); - - if (paths_str) { - const char* beg = paths_str; - const char* end = Prelexer::find_first<PATH_SEP>(beg); - - while (end) { - string path(beg, end - beg); - if (!path.empty()) { - if (*path.rbegin() != '/') path += '/'; - include_paths.push_back(path); - } - beg = end + 1; - end = Prelexer::find_first<PATH_SEP>(beg); - } - - string path(beg); - if (!path.empty()) { - if (*path.rbegin() != '/') path += '/'; - include_paths.push_back(path); - } - } - } - - void Context::collect_include_paths(const char* paths_array[]) - { - include_paths.push_back(get_cwd()); - if (*include_paths.back().rbegin() != '/') include_paths.back() += '/'; - - // if (paths_array) { - // for (size_t i = 0; paths_array[i]; ++i) { - // string path(paths_array[i]); - // if (!path.empty()) { - // if (*path.rbegin() != '/') path += '/'; - // include_paths.push_back(path); - // } - // } - // } - } - - string Context::add_file(string path) - { - using namespace File; - char* contents = 0; - string real_path; - for (size_t i = 0, S = include_paths.size(); i < S; ++i) { - string full_path(join_paths(include_paths[i], path)); - included_files.push_back(full_path); - if (style_sheets.count(full_path)) return full_path; - contents = resolve_and_load(full_path, real_path); - if (contents) { - sources.push_back(contents); - included_files.push_back(real_path); - queue.push_back(make_pair(full_path, contents)); - source_map.files.push_back(resolve_relative_path(real_path, source_map_file, cwd)); - style_sheets[full_path] = 0; - return full_path; - } - } - return string(); - } - - string Context::add_file(string dir, string rel_filepath) - { - using namespace File; - char* contents = 0; - string real_path; - string full_path(join_paths(dir, rel_filepath)); - if (style_sheets.count(full_path)) return full_path; - contents = resolve_and_load(full_path, real_path); - if (contents) { - sources.push_back(contents); - included_files.push_back(real_path); - queue.push_back(make_pair(full_path, contents)); - source_map.files.push_back(resolve_relative_path(real_path, source_map_file, cwd)); - style_sheets[full_path] = 0; - return full_path; - } - for (size_t i = 0, S = include_paths.size(); i < S; ++i) { - string full_path(join_paths(include_paths[i], rel_filepath)); - if (style_sheets.count(full_path)) return full_path; - contents = resolve_and_load(full_path, real_path); - if (contents) { - sources.push_back(contents); - included_files.push_back(real_path); - queue.push_back(make_pair(full_path, contents)); - source_map.files.push_back(resolve_relative_path(real_path, source_map_file, cwd)); - style_sheets[full_path] = 0; - return full_path; - } - } - return string(); - } - - void register_function(Context&, Signature sig, Native_Function f, Env* env); - void register_function(Context&, Signature sig, Native_Function f, size_t arity, Env* env); - void register_overload_stub(Context&, string name, Env* env); - void register_built_in_functions(Context&, Env* env); - void register_c_functions(Context&, Env* env, Sass_C_Function_Descriptor*); - void register_c_function(Context&, Env* env, Sass_C_Function_Descriptor); - - char* Context::compile_file() - { - Block* root = 0; - for (size_t i = 0; i < queue.size(); ++i) { - Parser p(Parser::from_c_str(queue[i].second, *this, queue[i].first, Position(1 + i, 1, 1))); - Block* ast = p.parse(); - if (i == 0) root = ast; - style_sheets[queue[i].first] = ast; - } - Env tge; - Backtrace backtrace(0, "", Position(), ""); - register_built_in_functions(*this, &tge); - Eval eval(*this, &tge, &backtrace); - Contextualize contextualize(*this, &eval, &tge, &backtrace); - Expand expand(*this, &eval, &contextualize, &tge, &backtrace); - // Inspect inspect(this); - Output_Nested output_nested; - - root = root->perform(&expand)->block(); - if (expand.extensions.size()) { - Extend extend(*this, expand.extensions, &backtrace); - root->perform(&extend); - } - char* result = 0; - switch (output_style) { - case COMPRESSED: { - Output_Compressed output_compressed(this); - root->perform(&output_compressed); - string output = output_compressed.get_buffer(); - if (source_maps) output += format_source_mapping_url(source_map_file); - result = copy_c_str(output.c_str()); - } break; - - default: { - Output_Nested output_nested(source_comments, this); - root->perform(&output_nested); - string output = output_nested.get_buffer(); - if (source_maps) output += "\n" + format_source_mapping_url(source_map_file); - result = copy_c_str(output.c_str()); - - } break; - } - - return result; - } - - string Context::format_source_mapping_url(const string& file) const - { - return "/*# sourceMappingURL=" + File::base_name(file) + " */"; - } - - char* Context::generate_source_map() - { - if (!source_maps) return 0; - char* result = 0; - string map = source_map.generate_source_map(this); - result = copy_c_str(map.c_str()); - return result; - } - - char* Context::compile_string() - { - if (!source_c_str) return 0; - queue.clear(); - queue.push_back(make_pair("source string", source_c_str)); - return compile_file(); - } - - std::vector<std::string> Context::get_included_files() - { - std::sort(included_files.begin(), included_files.end()); - included_files.erase( std::unique( included_files.begin(), included_files.end() ), included_files.end()); - return included_files; - } - - string Context::get_cwd() - { - const size_t wd_len = 1024; - char wd[wd_len]; - string cwd = getcwd(wd, wd_len); - if (cwd[cwd.length() - 1] != '/') cwd += '/'; - return cwd; - } - - void register_function(Context& ctx, Signature sig, Native_Function f, Env* env) - { - Definition* def = make_native_function(sig, f, ctx); - def->environment(env); - (*env)[def->name() + "[f]"] = def; - } - - void register_function(Context& ctx, Signature sig, Native_Function f, size_t arity, Env* env) - { - Definition* def = make_native_function(sig, f, ctx); - stringstream ss; - ss << def->name() << "[f]" << arity; - def->environment(env); - (*env)[ss.str()] = def; - } - - void register_overload_stub(Context& ctx, string name, Env* env) - { - Definition* stub = new (ctx.mem) Definition("[built-in function]", - Position(), - 0, - name, - 0, - 0, - true); - (*env)[name + "[f]"] = stub; - } - - - void register_built_in_functions(Context& ctx, Env* env) - { - using namespace Functions; - // RGB Functions - register_function(ctx, rgb_sig, rgb, env); - register_overload_stub(ctx, "rgba", env); - register_function(ctx, rgba_4_sig, rgba_4, 4, env); - register_function(ctx, rgba_2_sig, rgba_2, 2, env); - register_function(ctx, red_sig, red, env); - register_function(ctx, green_sig, green, env); - register_function(ctx, blue_sig, blue, env); - register_function(ctx, mix_sig, mix, env); - // HSL Functions - register_function(ctx, hsl_sig, hsl, env); - register_function(ctx, hsla_sig, hsla, env); - register_function(ctx, hue_sig, hue, env); - register_function(ctx, saturation_sig, saturation, env); - register_function(ctx, lightness_sig, lightness, env); - register_function(ctx, adjust_hue_sig, adjust_hue, env); - register_function(ctx, lighten_sig, lighten, env); - register_function(ctx, darken_sig, darken, env); - register_function(ctx, saturate_sig, saturate, env); - register_function(ctx, desaturate_sig, desaturate, env); - register_function(ctx, grayscale_sig, grayscale, env); - register_function(ctx, complement_sig, complement, env); - register_function(ctx, invert_sig, invert, env); - // Opacity Functions - register_function(ctx, alpha_sig, alpha, env); - register_function(ctx, opacity_sig, alpha, env); - register_function(ctx, opacify_sig, opacify, env); - register_function(ctx, fade_in_sig, opacify, env); - register_function(ctx, transparentize_sig, transparentize, env); - register_function(ctx, fade_out_sig, transparentize, env); - // Other Color Functions - register_function(ctx, adjust_color_sig, adjust_color, env); - register_function(ctx, scale_color_sig, scale_color, env); - register_function(ctx, change_color_sig, change_color, env); - register_function(ctx, ie_hex_str_sig, ie_hex_str, env); - // String Functions - register_function(ctx, unquote_sig, sass_unquote, env); - register_function(ctx, quote_sig, sass_quote, env); - // Number Functions - register_function(ctx, percentage_sig, percentage, env); - register_function(ctx, round_sig, round, env); - register_function(ctx, ceil_sig, ceil, env); - register_function(ctx, floor_sig, floor, env); - register_function(ctx, abs_sig, abs, env); - register_function(ctx, min_sig, min, env); - register_function(ctx, max_sig, max, env); - // List Functions - register_function(ctx, length_sig, length, env); - register_function(ctx, nth_sig, nth, env); - register_function(ctx, index_sig, index, env); - register_function(ctx, join_sig, join, env); - register_function(ctx, append_sig, append, env); - register_function(ctx, compact_sig, compact, env); - register_function(ctx, zip_sig, zip, env); - // Introspection Functions - register_function(ctx, type_of_sig, type_of, env); - register_function(ctx, unit_sig, unit, env); - register_function(ctx, unitless_sig, unitless, env); - register_function(ctx, comparable_sig, comparable, env); - // Boolean Functions - register_function(ctx, not_sig, sass_not, env); - register_function(ctx, if_sig, sass_if, env); - // Path Functions - register_function(ctx, image_url_sig, image_url, env); - } - - void register_c_functions(Context& ctx, Env* env, Sass_C_Function_Descriptor* descrs) - { - while (descrs->signature && descrs->function) { - register_c_function(ctx, env, *descrs); - ++descrs; - } - } - void register_c_function(Context& ctx, Env* env, Sass_C_Function_Descriptor descr) - { - Definition* def = make_c_function(descr.signature, descr.function, ctx); - def->environment(env); - (*env)[def->name() + "[f]"] = def; - } - - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/context.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/context.hpp deleted file mode 100644 index 73877bae..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/context.hpp +++ /dev/null @@ -1,93 +0,0 @@ -#define SASS_CONTEXT - -#include <string> -#include <vector> -#include <map> -#include "kwd_arg_macros.hpp" - -#ifndef SASS_MEMORY_MANAGER -#include "memory_manager.hpp" -#endif - -#ifndef SASS_ENVIRONMENT -#include "environment.hpp" -#endif - -#ifndef SASS_SOURCE_MAP -#include "source_map.hpp" -#endif - -namespace Sass { - using namespace std; - class AST_Node; - class Block; - class Expression; - class Color; - struct Backtrace; - // typedef const char* Signature; - // struct Context; - // typedef Environment<AST_Node*> Env; - // typedef Expression* (*Native_Function)(Env&, Context&, Signature, string, size_t); - - enum Output_Style { NESTED, EXPANDED, COMPACT, COMPRESSED, FORMATTED }; - - struct Context { - Memory_Manager<AST_Node> mem; - - const char* source_c_str; - vector<const char*> sources; // c-strs containing Sass file contents - vector<string> include_paths; - vector<pair<string, const char*> > queue; // queue of files to be parsed - map<string, Block*> style_sheets; // map of paths to ASTs - SourceMap source_map; - - string image_path; // for the image-url Sass function - bool source_comments; - bool source_maps; - Output_Style output_style; - string source_map_file; - - map<string, Color*> names_to_colors; - map<int, string> colors_to_names; - - KWD_ARG_SET(Data) { - KWD_ARG(Data, const char*, source_c_str); - KWD_ARG(Data, string, entry_point); - KWD_ARG(Data, string, image_path); - KWD_ARG(Data, const char*, include_paths_c_str); - KWD_ARG(Data, const char**, include_paths_array); - KWD_ARG(Data, vector<string>, include_paths); - KWD_ARG(Data, bool, source_comments); - KWD_ARG(Data, bool, source_maps); - KWD_ARG(Data, Output_Style, output_style); - KWD_ARG(Data, string, source_map_file) - }; - - Context(Data); - ~Context(); - void collect_include_paths(const char* paths_str); - void collect_include_paths(const char* paths_array[]); - void setup_color_map(); - string add_file(string); - string add_file(string, string); - char* compile_string(); - char* compile_file(); - char* generate_source_map(); - - std::vector<string> get_included_files(); - - private: - string format_source_mapping_url(const string& file) const; - string get_cwd(); - - vector<string> included_files; - string cwd; - - // void register_built_in_functions(Env* env); - // void register_function(Signature sig, Native_Function f, Env* env); - // void register_function(Signature sig, Native_Function f, size_t arity, Env* env); - // void register_overload_stub(string name, Env* env); - - }; - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/contextualize.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/contextualize.cpp deleted file mode 100644 index 89548b79..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/contextualize.cpp +++ /dev/null @@ -1,137 +0,0 @@ -#include "contextualize.hpp" -#include "ast.hpp" -#include "eval.hpp" -#include "backtrace.hpp" -#include "to_string.hpp" -#include "parser.hpp" - -namespace Sass { - - Contextualize::Contextualize(Context& ctx, Eval* eval, Env* env, Backtrace* bt, Selector* placeholder, Selector* extender) - : ctx(ctx), eval(eval), env(env), parent(0), backtrace(bt), placeholder(placeholder), extender(extender) - { } - - Contextualize::~Contextualize() { } - - Selector* Contextualize::fallback_impl(AST_Node* n) - { return parent; } - - Contextualize* Contextualize::with(Selector* s, Env* e, Backtrace* bt, Selector* p, Selector* ex) - { - parent = s; - env = e; - backtrace = bt; - placeholder = p; - extender = ex; - return this; - } - - Selector* Contextualize::operator()(Selector_Schema* s) - { - To_String to_string; - string result_str(s->contents()->perform(eval->with(env, backtrace))->perform(&to_string)); - result_str += '{'; // the parser looks for a brace to end the selector - Selector* result_sel = Parser::from_c_str(result_str.c_str(), ctx, s->path(), s->position()).parse_selector_group(); - return result_sel->perform(this); - } - - Selector* Contextualize::operator()(Selector_List* s) - { - Selector_List* p = static_cast<Selector_List*>(parent); - Selector_List* ss = 0; - if (p) { - ss = new (ctx.mem) Selector_List(s->path(), s->position(), p->length() * s->length()); - for (size_t i = 0, L = p->length(); i < L; ++i) { - for (size_t j = 0, L = s->length(); j < L; ++j) { - parent = (*p)[i]; - Complex_Selector* comb = static_cast<Complex_Selector*>((*s)[j]->perform(this)); - if (comb) *ss << comb; - } - } - } - else { - ss = new (ctx.mem) Selector_List(s->path(), s->position(), s->length()); - for (size_t j = 0, L = s->length(); j < L; ++j) { - Complex_Selector* comb = static_cast<Complex_Selector*>((*s)[j]->perform(this)); - if (comb) *ss << comb; - } - } - return ss->length() ? ss : 0; - } - - Selector* Contextualize::operator()(Complex_Selector* s) - { - To_String to_string; - Complex_Selector* ss = new (ctx.mem) Complex_Selector(*s); - if (ss->head()) { - ss->head(static_cast<Compound_Selector*>(s->head()->perform(this))); - } - if (ss->tail()) { - ss->tail(static_cast<Complex_Selector*>(s->tail()->perform(this))); - } - if (!ss->head() && ss->combinator() == Complex_Selector::ANCESTOR_OF) { - return ss->tail(); - } - else { - return ss; - } - } - - Selector* Contextualize::operator()(Compound_Selector* s) - { - To_String to_string; - if (placeholder && extender && s->perform(&to_string) == placeholder->perform(&to_string)) { - return extender; - } - Compound_Selector* ss = new (ctx.mem) Compound_Selector(s->path(), s->position(), s->length()); - for (size_t i = 0, L = s->length(); i < L; ++i) { - Simple_Selector* simp = static_cast<Simple_Selector*>((*s)[i]->perform(this)); - if (simp) *ss << simp; - } - return ss->length() ? ss : 0; - } - - Selector* Contextualize::operator()(Negated_Selector* s) - { - Selector* old_parent = parent; - parent = 0; - Negated_Selector* neg = new (ctx.mem) Negated_Selector(s->path(), - s->position(), - s->selector()->perform(this)); - parent = old_parent; - return neg; - } - - Selector* Contextualize::operator()(Pseudo_Selector* s) - { return s; } - - Selector* Contextualize::operator()(Attribute_Selector* s) - { return s; } - - Selector* Contextualize::operator()(Selector_Qualifier* s) - { return s; } - - Selector* Contextualize::operator()(Type_Selector* s) - { return s; } - - Selector* Contextualize::operator()(Selector_Placeholder* s) - { - To_String to_string; - if (placeholder && extender && s->perform(&to_string) == placeholder->perform(&to_string)) { - return extender; - } - else { - return s; - } - } - - Selector* Contextualize::operator()(Selector_Reference* s) - { - if (!parent) return 0; - Selector_Reference* ss = new (ctx.mem) Selector_Reference(*s); - ss->selector(parent); - return ss; - } - - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/contextualize.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/contextualize.hpp deleted file mode 100644 index de99ddf1..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/contextualize.hpp +++ /dev/null @@ -1,65 +0,0 @@ -#define SASS_CONTEXTUALIZE - -#ifndef SASS_ENVIRONMENT -#include "environment.hpp" -#endif - -#ifndef SASS_OPERATION -#include "operation.hpp" -#endif - -namespace Sass { - class AST_Node; - class Selector; - class Selector_Schema; - class Selector_List; - class Complex_Selector; - class Compound_Selector; - class Negated_Selector; - class Pseudo_Selector; - class Attribute_Selector; - class Selector_Qualifier; - class Type_Selector; - class Selector_Placeholder; - class Selector_Reference; - class Simple_Selector; - struct Context; - class Eval; - struct Backtrace; - - typedef Environment<AST_Node*> Env; - - class Contextualize : public Operation_CRTP<Selector*, Contextualize> { - - Context& ctx; - Eval* eval; - Env* env; - Selector* parent; - Backtrace* backtrace; - - Selector* fallback_impl(AST_Node* n); - - public: - Selector* placeholder; - Selector* extender; - Contextualize(Context&, Eval*, Env*, Backtrace*, Selector* placeholder = 0, Selector* extender = 0); - virtual ~Contextualize(); - Contextualize* with(Selector*, Env*, Backtrace*, Selector* placeholder = 0, Selector* extender = 0); - using Operation<Selector*>::operator(); - - Selector* operator()(Selector_Schema*); - Selector* operator()(Selector_List*); - Selector* operator()(Complex_Selector*); - Selector* operator()(Compound_Selector*); - Selector* operator()(Negated_Selector*); - Selector* operator()(Pseudo_Selector*); - Selector* operator()(Attribute_Selector*); - Selector* operator()(Selector_Qualifier*); - Selector* operator()(Type_Selector*); - Selector* operator()(Selector_Placeholder*); - Selector* operator()(Selector_Reference*); - - template <typename U> - Selector* fallback(U x) { return fallback_impl(x); } - }; -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/copy_c_str.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/copy_c_str.cpp deleted file mode 100644 index ce2dc389..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/copy_c_str.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include <cstdlib> -#include <cstring> - -namespace Sass { - using namespace std; - - char* copy_c_str(const char* orig) - { - char* copy = (char*) malloc(sizeof(char) * strlen(orig) + 1); - strcpy(copy, orig); - return copy; - } -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/copy_c_str.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/copy_c_str.hpp deleted file mode 100644 index 84ef998b..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/copy_c_str.hpp +++ /dev/null @@ -1,5 +0,0 @@ -namespace Sass { - - char* copy_c_str(const char*); - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/environment.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/environment.hpp deleted file mode 100644 index 8b94ea39..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/environment.hpp +++ /dev/null @@ -1,56 +0,0 @@ -#define SASS_ENVIRONMENT - -#include <string> -#include <map> -#include "ast_def_macros.hpp" -#include <iostream> - -namespace Sass { - using std::string; - using std::map; - using std::cerr; - using std::endl; - - template <typename T> - class Environment { - // TODO: test with unordered_map - map<string, T> current_frame_; - ADD_PROPERTY(Environment*, parent); - - public: - Environment() : current_frame_(map<string, T>()), parent_(0) { } - - map<string, T>& current_frame() { return current_frame_; } - - void link(Environment& env) { parent_ = &env; } - void link(Environment* env) { parent_ = env; } - - bool has(const string key) const - { - if (current_frame_.count(key)) return true; - else if (parent_) return parent_->has(key); - else return false; - } - - bool current_frame_has(const string key) const - { return current_frame_.count(key); } - - T& operator[](const string key) - { - if (current_frame_.count(key)) return current_frame_[key]; - else if (parent_) return (*parent_)[key]; - else return current_frame_[key]; - } - - void print() - { - for (typename map<string, T>::iterator i = current_frame_.begin(); i != current_frame_.end(); ++i) { - cerr << i->first << endl; - } - if (parent_) { - cerr << "---" << endl; - parent_->print(); - } - } - }; -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/error_handling.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/error_handling.cpp deleted file mode 100644 index 3f385a4a..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/error_handling.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef SASS_ERROR_HANDLING -#include "error_handling.hpp" -#endif - -#include "backtrace.hpp" -#include "prelexer.hpp" - -namespace Sass { - - Error::Error(Type type, string path, Position position, string message) - : type(type), path(path), position(position), message(message) - { } - - void error(string msg, string path, Position position) - { throw Error(Error::syntax, path, position, msg); } - - void error(string msg, string path, Position position, Backtrace* bt) - { - if (!path.empty() && Prelexer::string_constant(path.c_str())) - path = path.substr(1, path.size() - 1); - - Backtrace top(bt, path, position, ""); - msg += top.to_string(); - - throw Error(Error::syntax, path, position, msg); - } - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/error_handling.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/error_handling.hpp deleted file mode 100644 index c944b2da..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/error_handling.hpp +++ /dev/null @@ -1,28 +0,0 @@ -#define SASS_ERROR_HANDLING -#include <string> - -#ifndef SASS_POSITION -#include "position.hpp" -#endif - -namespace Sass { - using namespace std; - - struct Backtrace; - - struct Error { - enum Type { read, write, syntax, evaluation }; - - Type type; - string path; - Position position; - string message; - - Error(Type type, string path, Position position, string message); - - }; - - void error(string msg, string path, Position position); - void error(string msg, string path, Position position, Backtrace* bt); - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/eval.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/eval.cpp deleted file mode 100644 index 458bf10f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/eval.cpp +++ /dev/null @@ -1,853 +0,0 @@ -#include "eval.hpp" -#include "ast.hpp" -#include "bind.hpp" -#include "to_string.hpp" -#include "inspect.hpp" -#include "to_c.hpp" -#include "context.hpp" -#include "backtrace.hpp" -#include "prelexer.hpp" -#include <cstdlib> -#include <cmath> - -#include <iostream> -#include <iomanip> - -namespace Sass { - using namespace std; - - inline double add(double x, double y) { return x + y; } - inline double sub(double x, double y) { return x - y; } - inline double mul(double x, double y) { return x * y; } - inline double div(double x, double y) { return x / y; } // x/0 checked by caller - typedef double (*bop)(double, double); - bop ops[Binary_Expression::NUM_OPS] = { - 0, 0, // and, or - 0, 0, 0, 0, 0, 0, // eq, neq, gt, gte, lt, lte - add, sub, mul, div, fmod - }; - - Eval::Eval(Context& ctx, Env* env, Backtrace* bt) - : ctx(ctx), env(env), backtrace(bt) { } - Eval::~Eval() { } - - Eval* Eval::with(Env* e, Backtrace* bt) // for setting the env before eval'ing an expression - { - env = e; - backtrace = bt; - return this; - } - - Expression* Eval::operator()(Block* b) - { - Expression* val = 0; - for (size_t i = 0, L = b->length(); i < L; ++i) { - val = (*b)[i]->perform(this); - if (val) return val; - } - return val; - } - - Expression* Eval::operator()(Assignment* a) - { - string var(a->variable()); - if (env->has(var)) { - if(!a->is_guarded()) (*env)[var] = a->value()->perform(this); - } - else { - env->current_frame()[var] = a->value()->perform(this); - } - return 0; - } - - Expression* Eval::operator()(If* i) - { - if (*i->predicate()->perform(this)) { - return i->consequent()->perform(this); - } - else { - Block* alt = i->alternative(); - if (alt) return alt->perform(this); - } - return 0; - } - - Expression* Eval::operator()(For* f) - { - string variable(f->variable()); - Expression* low = f->lower_bound()->perform(this); - if (low->concrete_type() != Expression::NUMBER) { - error("lower bound of `@for` directive must be numeric", low->path(), low->position()); - } - Expression* high = f->upper_bound()->perform(this); - if (high->concrete_type() != Expression::NUMBER) { - error("upper bound of `@for` directive must be numeric", high->path(), high->position()); - } - double lo = static_cast<Number*>(low)->value(); - double hi = static_cast<Number*>(high)->value(); - if (f->is_inclusive()) ++hi; - Env new_env; - new_env[variable] = new (ctx.mem) Number(low->path(), low->position(), lo); - new_env.link(env); - env = &new_env; - Block* body = f->block(); - Expression* val = 0; - for (double i = lo; - i < hi; - (*env)[variable] = new (ctx.mem) Number(low->path(), low->position(), ++i)) { - val = body->perform(this); - if (val) break; - } - env = new_env.parent(); - return val; - } - - Expression* Eval::operator()(Each* e) - { - string variable(e->variable()); - Expression* expr = e->list()->perform(this); - List* list = 0; - if (expr->concrete_type() != Expression::LIST) { - list = new (ctx.mem) List(expr->path(), expr->position(), 1, List::COMMA); - *list << expr; - } - else { - list = static_cast<List*>(expr); - } - Env new_env; - new_env[variable] = 0; - new_env.link(env); - env = &new_env; - Block* body = e->block(); - Expression* val = 0; - for (size_t i = 0, L = list->length(); i < L; ++i) { - (*env)[variable] = (*list)[i]; - val = body->perform(this); - if (val) break; - } - env = new_env.parent(); - return val; - } - - Expression* Eval::operator()(While* w) - { - Expression* pred = w->predicate(); - Block* body = w->block(); - while (*pred->perform(this)) { - Expression* val = body->perform(this); - if (val) return val; - } - return 0; - } - - Expression* Eval::operator()(Return* r) - { - return r->value()->perform(this); - } - - Expression* Eval::operator()(Warning* w) - { - Expression* message = w->message()->perform(this); - To_String to_string; - string prefix("WARNING: "); - string indent(" "); - string result(unquote(message->perform(&to_string))); - cerr << prefix << result; - Backtrace top(backtrace, w->path(), w->position(), ""); - cerr << top.to_string(true); - cerr << endl << endl; - return 0; - } - - Expression* Eval::operator()(List* l) - { - List* ll = new (ctx.mem) List(l->path(), - l->position(), - l->length(), - l->separator(), - l->is_arglist()); - for (size_t i = 0, L = l->length(); i < L; ++i) { - *ll << (*l)[i]->perform(this); - } - return ll; - } - - // -- only need to define two comparisons, and the rest can be implemented in terms of them - bool eq(Expression*, Expression*, Context&, Eval*); - bool lt(Expression*, Expression*, Context&); - // -- arithmetic on the combinations that matter - Expression* op_numbers(Context&, Binary_Expression*, Expression*, Expression*); - Expression* op_number_color(Context&, Binary_Expression::Type, Expression*, Expression*); - Expression* op_color_number(Context&, Binary_Expression::Type, Expression*, Expression*); - Expression* op_colors(Context&, Binary_Expression::Type, Expression*, Expression*); - Expression* op_strings(Context&, Binary_Expression::Type, Expression*, Expression*); - - Expression* Eval::operator()(Binary_Expression* b) - { - Binary_Expression::Type op_type = b->type(); - // don't eval delayed expressions (the '/' when used as a separator) - if (op_type == Binary_Expression::DIV && b->is_delayed()) return b; - // the logical connectives need to short-circuit - Expression* lhs = b->left()->perform(this); - switch (op_type) { - case Binary_Expression::AND: - return *lhs ? b->right()->perform(this) : lhs; - break; - - case Binary_Expression::OR: - return *lhs ? lhs : b->right()->perform(this); - break; - - default: - break; - } - // not a logical connective, so go ahead and eval the rhs - Expression* rhs = b->right()->perform(this); - - // see if it's a relational expression - switch(op_type) { - case Binary_Expression::EQ: return new (ctx.mem) Boolean(b->path(), b->position(), eq(lhs, rhs, ctx)); - case Binary_Expression::NEQ: return new (ctx.mem) Boolean(b->path(), b->position(), !eq(lhs, rhs, ctx)); - case Binary_Expression::GT: return new (ctx.mem) Boolean(b->path(), b->position(), !lt(lhs, rhs, ctx) && !eq(lhs, rhs, ctx)); - case Binary_Expression::GTE: return new (ctx.mem) Boolean(b->path(), b->position(), !lt(lhs, rhs, ctx)); - case Binary_Expression::LT: return new (ctx.mem) Boolean(b->path(), b->position(), lt(lhs, rhs, ctx)); - case Binary_Expression::LTE: return new (ctx.mem) Boolean(b->path(), b->position(), lt(lhs, rhs, ctx) || eq(lhs, rhs, ctx)); - - default: break; - } - - Expression::Concrete_Type l_type = lhs->concrete_type(); - Expression::Concrete_Type r_type = rhs->concrete_type(); - - if (l_type == Expression::NUMBER && r_type == Expression::NUMBER) { - return op_numbers(ctx, b, lhs, rhs); - } - if (l_type == Expression::NUMBER && r_type == Expression::COLOR) { - return op_number_color(ctx, op_type, lhs, rhs); - } - if (l_type == Expression::COLOR && r_type == Expression::NUMBER) { - return op_color_number(ctx, op_type, lhs, rhs); - } - if (l_type == Expression::COLOR && r_type == Expression::COLOR) { - return op_colors(ctx, op_type, lhs, rhs); - } - return op_strings(ctx, op_type, lhs, rhs); - } - - Expression* Eval::operator()(Unary_Expression* u) - { - Expression* operand = u->operand()->perform(this); - if (operand->concrete_type() == Expression::NUMBER) { - Number* result = new (ctx.mem) Number(*static_cast<Number*>(operand)); - result->value(u->type() == Unary_Expression::MINUS - ? -result->value() - : result->value()); - return result; - } - else { - To_String to_string; - // Special cases: +/- variables which evaluate to null ouput just +/-, - // but +/- null itself outputs the string - if (operand->concrete_type() == Expression::NULL_VAL && typeid(*(u->operand())) == typeid(Variable)) { - u->operand(new (ctx.mem) String_Constant(u->path(), u->position(), "")); - } - String_Constant* result = new (ctx.mem) String_Constant(u->path(), - u->position(), - u->perform(&to_string)); - return result; - } - // unreachable - return u; - } - - Expression* Eval::operator()(Function_Call* c) - { - if (c->name() == "calc") return c; - Arguments* args = static_cast<Arguments*>(c->arguments()->perform(this)); - string full_name(c->name() + "[f]"); - - // if it doesn't exist, just pass it through as a literal - if (!env->has(full_name)) { - Function_Call* lit = new (ctx.mem) Function_Call(c->path(), - c->position(), - c->name(), - args); - To_String to_string; - return new (ctx.mem) String_Constant(c->path(), - c->position(), - lit->perform(&to_string)); - } - - Expression* result = c; - Definition* def = static_cast<Definition*>((*env)[full_name]); - Block* body = def->block(); - Native_Function func = def->native_function(); - Sass_C_Function c_func = def->c_function(); - - for (size_t i = 0, L = args->length(); i < L; ++i) { - (*args)[i]->value((*args)[i]->value()->perform(this)); - } - - Parameters* params = def->parameters(); - Env new_env; - new_env.link(def->environment()); - // bind("function " + c->name(), params, args, ctx, &new_env, this); - // Env* old_env = env; - // env = &new_env; - - // Backtrace here(backtrace, c->path(), c->line(), ", in function `" + c->name() + "`"); - // backtrace = &here; - - // if it's user-defined, eval the body - if (body) { - - bind("function " + c->name(), params, args, ctx, &new_env, this); - Env* old_env = env; - env = &new_env; - - Backtrace here(backtrace, c->path(), c->position(), ", in function `" + c->name() + "`"); - backtrace = &here; - - result = body->perform(this); - if (!result) { - error(string("function ") + c->name() + " did not return a value", c->path(), c->position()); - } - backtrace = here.parent; - env = old_env; - } - // if it's native, invoke the underlying CPP function - else if (func) { - - bind("function " + c->name(), params, args, ctx, &new_env, this); - Env* old_env = env; - env = &new_env; - - Backtrace here(backtrace, c->path(), c->position(), ", in function `" + c->name() + "`"); - backtrace = &here; - - result = func(*env, ctx, def->signature(), c->path(), c->position(), backtrace); - - backtrace = here.parent; - env = old_env; - } - // else if it's a user-defined c function - else if (c_func) { - - bind("function " + c->name(), params, args, ctx, &new_env, this); - Env* old_env = env; - env = &new_env; - - Backtrace here(backtrace, c->path(), c->position(), ", in function `" + c->name() + "`"); - backtrace = &here; - - To_C to_c; - Sass_Value c_val = c_func(args->perform(&to_c)); - if (c_val.unknown.tag == SASS_ERROR) { - error("error in C function " + c->name() + ": " + c_val.error.message, c->path(), c->position(), backtrace); - } - result = cval_to_astnode(c_val, ctx, backtrace, c->path(), c->position()); - - backtrace = here.parent; - env = old_env; - } - // else it's an overloaded native function; resolve it - else if (def->is_overload_stub()) { - size_t arity = args->length(); - stringstream ss; - ss << full_name << arity; - string resolved_name(ss.str()); - if (!env->has(resolved_name)) error("overloaded function `" + string(c->name()) + "` given wrong number of arguments", c->path(), c->position()); - Definition* resolved_def = static_cast<Definition*>((*env)[resolved_name]); - params = resolved_def->parameters(); - Env newer_env; - newer_env.link(resolved_def->environment()); - bind("function " + c->name(), params, args, ctx, &newer_env, this); - Env* old_env = env; - env = &newer_env; - - Backtrace here(backtrace, c->path(), c->position(), ", in function `" + c->name() + "`"); - backtrace = &here; - - result = resolved_def->native_function()(*env, ctx, resolved_def->signature(), c->path(), c->position(), backtrace); - - backtrace = here.parent; - env = old_env; - } - - // backtrace = here.parent; - // env = old_env; - result->position(c->position()); - return result; - } - - Expression* Eval::operator()(Function_Call_Schema* s) - { - Expression* evaluated_name = s->name()->perform(this); - Expression* evaluated_args = s->arguments()->perform(this); - String_Schema* ss = new (ctx.mem) String_Schema(s->path(), s->position(), 2); - (*ss) << evaluated_name << evaluated_args; - return ss->perform(this); - } - - Expression* Eval::operator()(Variable* v) - { - // To_String to_string; - // cerr << "looking up " << v->name() << endl; - string name(v->name()); - Expression* value = 0; - if (env->has(name)) value = static_cast<Expression*>((*env)[name]); - else error("unbound variable " + v->name(), v->path(), v->position()); - // cerr << "fetched a value of type " << typeid(*value).name() << endl; - // if (value) cerr << "fetched a value: " << value->perform(&to_string) << endl; - return value; - } - - Expression* Eval::operator()(Textual* t) - { - using Prelexer::number; - Expression* result = 0; - switch (t->type()) - { - case Textual::NUMBER: - result = new (ctx.mem) Number(t->path(), - t->position(), - atof(t->value().c_str())); - break; - case Textual::PERCENTAGE: - result = new (ctx.mem) Number(t->path(), - t->position(), - atof(t->value().c_str()), - "%"); - break; - case Textual::DIMENSION: - result = new (ctx.mem) Number(t->path(), - t->position(), - atof(t->value().c_str()), - Token(number(t->value().c_str()))); - break; - case Textual::HEX: { - string hext(t->value().substr(1)); // chop off the '#' - if (hext.length() == 6) { - string r(hext.substr(0,2)); - string g(hext.substr(2,2)); - string b(hext.substr(4,2)); - result = new (ctx.mem) Color(t->path(), - t->position(), - static_cast<double>(strtol(r.c_str(), NULL, 16)), - static_cast<double>(strtol(g.c_str(), NULL, 16)), - static_cast<double>(strtol(b.c_str(), NULL, 16)), - 1, - t->value()); - } - else { - result = new (ctx.mem) Color(t->path(), - t->position(), - static_cast<double>(strtol(string(2,hext[0]).c_str(), NULL, 16)), - static_cast<double>(strtol(string(2,hext[1]).c_str(), NULL, 16)), - static_cast<double>(strtol(string(2,hext[2]).c_str(), NULL, 16)), - 1, - t->value()); - } - } break; - } - return result; - } - - Expression* Eval::operator()(Number* n) - { - return n; - } - - Expression* Eval::operator()(Boolean* b) - { - return b; - } - - char is_quoted(string str) - { - size_t len = str.length(); - if (len < 2) return 0; - if ((str[0] == '"' && str[len-1] == '"') || (str[0] == '\'' && str[len-1] == '\'')) { - return str[0]; - } - else { - return 0; - } - } - - Expression* Eval::operator()(String_Schema* s) - { - string acc; - To_String to_string; - for (size_t i = 0, L = s->length(); i < L; ++i) { - string chunk((*s)[i]->perform(this)->perform(&to_string)); - if (((s->quote_mark() && is_quoted(chunk)) || !s->quote_mark()) && (*s)[i]->is_interpolant()) { // some redundancy in that test - acc += unquote(chunk); - } - else { - acc += chunk; - } - } - return new (ctx.mem) String_Constant(s->path(), - s->position(), - acc); - } - - Expression* Eval::operator()(String_Constant* s) - { - if (!s->is_delayed() && ctx.names_to_colors.count(s->value())) { - Color* c = new (ctx.mem) Color(*ctx.names_to_colors[s->value()]); - c->path(s->path()); - c->position(s->position()); - return c; - } - return s; - } - - Expression* Eval::operator()(Media_Query* q) - { - String* t = q->media_type(); - t = static_cast<String*>(t ? t->perform(this) : 0); - Media_Query* qq = new (ctx.mem) Media_Query(q->path(), - q->position(), - t, - q->length(), - q->is_negated(), - q->is_restricted()); - for (size_t i = 0, L = q->length(); i < L; ++i) { - *qq << static_cast<Media_Query_Expression*>((*q)[i]->perform(this)); - } - return qq; - } - - Expression* Eval::operator()(Media_Query_Expression* e) - { - Expression* feature = e->feature(); - feature = (feature ? feature->perform(this) : 0); - Expression* value = e->value(); - value = (value ? value->perform(this) : 0); - return new (ctx.mem) Media_Query_Expression(e->path(), - e->position(), - feature, - value, - e->is_interpolated()); - } - - Expression* Eval::operator()(Null* n) - { - return n; - } - - Expression* Eval::operator()(Argument* a) - { - Expression* val = a->value(); - val->is_delayed(false); - val = val->perform(this); - val->is_delayed(false); - if (a->is_rest_argument() && (val->concrete_type() != Expression::LIST)) { - List* wrapper = new (ctx.mem) List(val->path(), - val->position(), - 0, - List::COMMA, - true); - *wrapper << val; - val = wrapper; - } - return new (ctx.mem) Argument(a->path(), - a->position(), - val, - a->name(), - a->is_rest_argument()); - } - - Expression* Eval::operator()(Arguments* a) - { - Arguments* aa = new (ctx.mem) Arguments(a->path(), a->position()); - for (size_t i = 0, L = a->length(); i < L; ++i) { - *aa << static_cast<Argument*>((*a)[i]->perform(this)); - } - return aa; - } - - inline Expression* Eval::fallback_impl(AST_Node* n) - { - return static_cast<Expression*>(n); - } - - // All the binary helpers. - - bool eq(Expression* lhs, Expression* rhs, Context& ctx) - { - Expression::Concrete_Type ltype = lhs->concrete_type(); - Expression::Concrete_Type rtype = rhs->concrete_type(); - if (ltype != rtype) return false; - switch (ltype) { - - case Expression::BOOLEAN: { - return static_cast<Boolean*>(lhs)->value() == - static_cast<Boolean*>(rhs)->value(); - } break; - - case Expression::NUMBER: { - Number* l = static_cast<Number*>(lhs); - Number* r = static_cast<Number*>(rhs); - Number tmp_r(*r); - tmp_r.normalize(l->find_convertible_unit()); - return l->unit() == tmp_r.unit() && l->value() == tmp_r.value() - ? true - : false; - } break; - - case Expression::COLOR: { - Color* l = static_cast<Color*>(lhs); - Color* r = static_cast<Color*>(rhs); - return l->r() == r->r() && - l->g() == r->g() && - l->b() == r->b() && - l->a() == r->a(); - } break; - - case Expression::STRING: { - return unquote(static_cast<String_Constant*>(lhs)->value()) == - unquote(static_cast<String_Constant*>(rhs)->value()); - } break; - - case Expression::LIST: { - List* l = static_cast<List*>(lhs); - List* r = static_cast<List*>(rhs); - if (l->length() != r->length()) return false; - if (l->separator() != r->separator()) return false; - for (size_t i = 0, L = l->length(); i < L; ++i) { - if (!eq((*l)[i], (*r)[i], ctx)) return false; - } - return true; - } break; - - case Expression::NULL_VAL: { - return true; - } break; - - default: break; - } - return false; - } - - bool lt(Expression* lhs, Expression* rhs, Context& ctx) - { - if (lhs->concrete_type() != Expression::NUMBER || - rhs->concrete_type() != Expression::NUMBER) - error("may only compare numbers", lhs->path(), lhs->position()); - Number* l = static_cast<Number*>(lhs); - Number* r = static_cast<Number*>(rhs); - Number tmp_r(*r); - tmp_r.normalize(l->find_convertible_unit()); - string l_unit(l->unit()); - string r_unit(tmp_r.unit()); - if (!l_unit.empty() && !r_unit.empty() && l->unit() != tmp_r.unit()) { - error("cannot compare numbers with incompatible units", l->path(), l->position()); - } - return l->value() < tmp_r.value(); - } - - Expression* op_numbers(Context& ctx, Binary_Expression* b, Expression* lhs, Expression* rhs) - { - Number* l = static_cast<Number*>(lhs); - Number* r = static_cast<Number*>(rhs); - double lv = l->value(); - double rv = r->value(); - Binary_Expression::Type op = b->type(); - if (op == Binary_Expression::DIV && !rv) { - return new (ctx.mem) String_Constant(l->path(), b->position(), "Infinity"); - } - if (op == Binary_Expression::MOD && !rv) { - error("division by zero", r->path(), r->position()); - } - - Number tmp(*r); - tmp.normalize(l->find_convertible_unit()); - string l_unit(l->unit()); - string r_unit(tmp.unit()); - if (l_unit != r_unit && !l_unit.empty() && !r_unit.empty() && - (op == Binary_Expression::ADD || op == Binary_Expression::SUB)) { - error("cannot add or subtract numbers with incompatible units", l->path(), l->position()); - } - Number* v = new (ctx.mem) Number(*l); - v->position(b->position()); - if (l_unit.empty() && (op == Binary_Expression::ADD || op == Binary_Expression::SUB)) { - v->numerator_units() = r->numerator_units(); - v->denominator_units() = r->denominator_units(); - } - - v->value(ops[op](lv, rv)); - if (op == Binary_Expression::MUL) { - for (size_t i = 0, S = r->numerator_units().size(); i < S; ++i) { - v->numerator_units().push_back(r->numerator_units()[i]); - } - for (size_t i = 0, S = r->denominator_units().size(); i < S; ++i) { - v->denominator_units().push_back(r->denominator_units()[i]); - } - } - else if (op == Binary_Expression::DIV) { - for (size_t i = 0, S = r->numerator_units().size(); i < S; ++i) { - v->denominator_units().push_back(r->numerator_units()[i]); - } - for (size_t i = 0, S = r->denominator_units().size(); i < S; ++i) { - v->numerator_units().push_back(r->denominator_units()[i]); - } - } - v->normalize(); - return v; - } - - Expression* op_number_color(Context& ctx, Binary_Expression::Type op, Expression* lhs, Expression* rhs) - { - Number* l = static_cast<Number*>(lhs); - Color* r = static_cast<Color*>(rhs); - // TODO: currently SASS converts colors to standard form when adding to strings; - // when https://github.com/nex3/sass/issues/363 is added this can be removed to - // preserve the original value - r->disp(""); - double lv = l->value(); - switch (op) { - case Binary_Expression::ADD: - case Binary_Expression::MUL: { - return new (ctx.mem) Color(l->path(), - l->position(), - ops[op](lv, r->r()), - ops[op](lv, r->g()), - ops[op](lv, r->b()), - r->a()); - } break; - case Binary_Expression::SUB: - case Binary_Expression::DIV: { - string sep(op == Binary_Expression::SUB ? "-" : "/"); - To_String to_string; - return new (ctx.mem) String_Constant(l->path(), - l->position(), - l->perform(&to_string) - + sep - + r->perform(&to_string)); - } break; - case Binary_Expression::MOD: { - error("cannot divide a number by a color", r->path(), r->position()); - } break; - default: break; // caller should ensure that we don't get here - } - // unreachable - return l; - } - - Expression* op_color_number(Context& ctx, Binary_Expression::Type op, Expression* lhs, Expression* rhs) - { - Color* l = static_cast<Color*>(lhs); - Number* r = static_cast<Number*>(rhs); - double rv = r->value(); - if (op == Binary_Expression::DIV && !rv) error("division by zero", r->path(), r->position()); - return new (ctx.mem) Color(l->path(), - l->position(), - ops[op](l->r(), rv), - ops[op](l->g(), rv), - ops[op](l->b(), rv), - l->a()); - } - - Expression* op_colors(Context& ctx, Binary_Expression::Type op, Expression* lhs, Expression* rhs) - { - Color* l = static_cast<Color*>(lhs); - Color* r = static_cast<Color*>(rhs); - if (l->a() != r->a()) { - error("alpha channels must be equal when combining colors", r->path(), r->position()); - } - if ((op == Binary_Expression::DIV || op == Binary_Expression::MOD) && - (!r->r() || !r->g() ||!r->b())) { - error("division by zero", r->path(), r->position()); - } - return new (ctx.mem) Color(l->path(), - l->position(), - ops[op](l->r(), r->r()), - ops[op](l->g(), r->g()), - ops[op](l->b(), r->b()), - l->a()); - } - - Expression* op_strings(Context& ctx, Binary_Expression::Type op, Expression* lhs, Expression*rhs) - { - To_String to_string; - Expression::Concrete_Type ltype = lhs->concrete_type(); - Expression::Concrete_Type rtype = rhs->concrete_type(); - - // TODO: currently SASS converts colors to standard form when adding to strings; - // when https://github.com/nex3/sass/issues/363 is added this can be removed to - // preserve the original value - if (ltype == Expression::COLOR) ((Sass::Color*)lhs)->disp(""); - if (rtype == Expression::COLOR) ((Sass::Color*)rhs)->disp(""); - - string lstr(lhs->perform(&to_string)); - string rstr(rhs->perform(&to_string)); - bool unquoted = false; - if (ltype == Expression::STRING && lstr[0] != '"' && lstr[0] != '\'') unquoted = true; - if (ltype == Expression::STRING && !lhs->is_delayed() && ctx.names_to_colors.count(lstr) && - rtype == Expression::STRING && !rhs->is_delayed() && ctx.names_to_colors.count(rstr)) { - return op_colors(ctx, op, ctx.names_to_colors[lstr], ctx.names_to_colors[rstr]); - } - else if (ltype == Expression::STRING && !lhs->is_delayed() && ctx.names_to_colors.count(lstr) && - rtype == Expression::NUMBER) { - return op_color_number(ctx, op, ctx.names_to_colors[lstr], rhs); - } - else if (ltype == Expression::NUMBER && - rtype == Expression::STRING && !rhs->is_delayed() && ctx.names_to_colors.count(rstr)) { - return op_number_color(ctx, op, rhs, ctx.names_to_colors[rstr]); - } - if (op == Binary_Expression::MUL) error("invalid operands for multiplication", lhs->path(), lhs->position()); - if (op == Binary_Expression::MOD) error("invalid operands for modulo", lhs->path(), lhs->position()); - string sep; - switch (op) { - case Binary_Expression::SUB: sep = "-"; break; - case Binary_Expression::DIV: sep = "/"; break; - default: break; - } - char q = '\0'; - if (lstr[0] == '"' || lstr[0] == '\'') q = lstr[0]; - else if (rstr[0] == '"' || rstr[0] == '\'') q = rstr[0]; - string result(unquote(lstr) + sep + unquote(rstr)); - return new (ctx.mem) String_Constant(lhs->path(), - lhs->position(), - unquoted ? result : quote(result, q)); - } - - Expression* cval_to_astnode(Sass_Value v, Context& ctx, Backtrace* backtrace, string path, Position position) - { - using std::strlen; - using std::strcpy; - Expression* e = 0; - switch (v.unknown.tag) { - case SASS_BOOLEAN: { - e = new (ctx.mem) Boolean(path, position, v.boolean.value); - } break; - case SASS_NUMBER: { - e = new (ctx.mem) Number(path, position, v.number.value, v.number.unit); - } break; - case SASS_COLOR: { - e = new (ctx.mem) Color(path, position, v.color.r, v.color.g, v.color.b, v.color.a); - } break; - case SASS_STRING: { - e = new (ctx.mem) String_Constant(path, position, v.string.value); - } break; - case SASS_LIST: { - List* l = new (ctx.mem) List(path, position, v.list.length, v.list.separator == SASS_COMMA ? List::COMMA : List::SPACE); - for (size_t i = 0, L = v.list.length; i < L; ++i) { - *l << cval_to_astnode(v.list.values[i], ctx, backtrace, path, position); - } - e = l; - } break; - case SASS_NULL: { - e = new (ctx.mem) Null(path, position); - } break; - case SASS_ERROR: { - error("error in C function: " + string(v.error.message), path, position, backtrace); - } break; - } - return e; - } - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/eval.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/eval.hpp deleted file mode 100644 index c17e25d6..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/eval.hpp +++ /dev/null @@ -1,77 +0,0 @@ -#define SASS_EVAL - -#include <iostream> - -#ifndef SASS_OPERATION -#include "operation.hpp" -#endif - -#ifndef SASS_ENVIRONMENT -#include "environment.hpp" -#endif - -#ifndef SASS -#include "sass.h" -#endif - -#ifndef SASS_POSITION -#include "position.hpp" -#endif - -namespace Sass { - using namespace std; - - struct Context; - typedef Environment<AST_Node*> Env; - struct Backtrace; - - class Eval : public Operation_CRTP<Expression*, Eval> { - - Context& ctx; - - Expression* fallback_impl(AST_Node* n); - - public: - Env* env; - Backtrace* backtrace; - Eval(Context&, Env*, Backtrace*); - virtual ~Eval(); - Eval* with(Env* e, Backtrace* bt); // for setting the env before eval'ing an expression - using Operation<Expression*>::operator(); - - // for evaluating function bodies - Expression* operator()(Block*); - Expression* operator()(Assignment*); - Expression* operator()(If*); - Expression* operator()(For*); - Expression* operator()(Each*); - Expression* operator()(While*); - Expression* operator()(Return*); - Expression* operator()(Warning*); - - Expression* operator()(List*); - Expression* operator()(Binary_Expression*); - Expression* operator()(Unary_Expression*); - Expression* operator()(Function_Call*); - Expression* operator()(Function_Call_Schema*); - Expression* operator()(Variable*); - Expression* operator()(Textual*); - Expression* operator()(Number*); - Expression* operator()(Boolean*); - Expression* operator()(String_Schema*); - Expression* operator()(String_Constant*); - Expression* operator()(Media_Query*); - Expression* operator()(Media_Query_Expression*); - Expression* operator()(Null*); - Expression* operator()(Argument*); - Expression* operator()(Arguments*); - - template <typename U> - Expression* fallback(U x) { return fallback_impl(x); } - }; - - Expression* cval_to_astnode(Sass_Value v, Context& ctx, Backtrace* backtrace, string path = "", Position position = Position()); - - bool eq(Expression*, Expression*, Context&); - bool lt(Expression*, Expression*, Context&); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/expand.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/expand.cpp deleted file mode 100644 index c1c72069..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/expand.cpp +++ /dev/null @@ -1,334 +0,0 @@ -#include "expand.hpp" -#include "bind.hpp" -#include "eval.hpp" -#include "contextualize.hpp" -#include "to_string.hpp" -#include "backtrace.hpp" - -#include <iostream> -#include <typeinfo> - -#ifndef SASS_CONTEXT -#include "context.hpp" -#endif - -namespace Sass { - - Expand::Expand(Context& ctx, Eval* eval, Contextualize* contextualize, Env* env, Backtrace* bt) - : ctx(ctx), - eval(eval), - contextualize(contextualize), - env(env), - block_stack(vector<Block*>()), - property_stack(vector<String*>()), - selector_stack(vector<Selector*>()), - backtrace(bt), - extensions(multimap<Compound_Selector, Complex_Selector*>()) - { selector_stack.push_back(0); } - - Statement* Expand::operator()(Block* b) - { - Env new_env; - new_env.link(*env); - env = &new_env; - Block* bb = new (ctx.mem) Block(b->path(), b->position(), b->length(), b->is_root()); - block_stack.push_back(bb); - append_block(b); - block_stack.pop_back(); - env = env->parent(); - return bb; - } - - Statement* Expand::operator()(Ruleset* r) - { - To_String to_string; - // if (selector_stack.back()) cerr << "expanding " << selector_stack.back()->perform(&to_string) << " and " << r->selector()->perform(&to_string) << endl; - Selector* sel_ctx = r->selector()->perform(contextualize->with(selector_stack.back(), env, backtrace)); - selector_stack.push_back(sel_ctx); - Ruleset* rr = new (ctx.mem) Ruleset(r->path(), - r->position(), - sel_ctx, - r->block()->perform(this)->block()); - selector_stack.pop_back(); - return rr; - } - - Statement* Expand::operator()(Propset* p) - { - property_stack.push_back(p->property_fragment()); - Block* expanded_block = p->block()->perform(this)->block(); - - Block* current_block = block_stack.back(); - for (size_t i = 0, L = expanded_block->length(); i < L; ++i) { - Statement* stm = (*expanded_block)[i]; - if (typeid(*stm) == typeid(Declaration)) { - Declaration* dec = static_cast<Declaration*>(stm); - String_Schema* combined_prop = new (ctx.mem) String_Schema(p->path(), p->position()); - if (!property_stack.empty()) { - *combined_prop << property_stack.back() - << new (ctx.mem) String_Constant(p->path(), p->position(), "-") - << dec->property(); // TODO: eval the prop into a string constant - } - else { - *combined_prop << dec->property(); - } - dec->property(combined_prop); - *current_block << dec; - } - else { - error("contents of namespaced properties must result in style declarations only", stm->path(), stm->position(), backtrace); - } - } - - property_stack.pop_back(); - - return 0; - } - - Statement* Expand::operator()(Media_Block* m) - { - Expression* media_queries = m->media_queries()->perform(eval->with(env, backtrace)); - Media_Block* mm = new (ctx.mem) Media_Block(m->path(), - m->position(), - static_cast<List*>(media_queries), - m->block()->perform(this)->block()); - mm->enclosing_selector(selector_stack.back()); - return mm; - } - - Statement* Expand::operator()(At_Rule* a) - { - Block* ab = a->block(); - selector_stack.push_back(0); - Selector* as = a->selector(); - if (as) as = as->perform(contextualize->with(0, env, backtrace)); - Block* bb = ab ? ab->perform(this)->block() : 0; - At_Rule* aa = new (ctx.mem) At_Rule(a->path(), - a->position(), - a->keyword(), - as, - bb); - selector_stack.pop_back(); - return aa; - } - - Statement* Expand::operator()(Declaration* d) - { - String* old_p = d->property(); - String* new_p = static_cast<String*>(old_p->perform(eval->with(env, backtrace))); - return new (ctx.mem) Declaration(d->path(), - d->position(), - new_p, - d->value()->perform(eval->with(env, backtrace)), - d->is_important()); - } - - Statement* Expand::operator()(Assignment* a) - { - string var(a->variable()); - if (env->has(var)) { - if(!a->is_guarded()) (*env)[var] = a->value()->perform(eval->with(env, backtrace)); - } - else { - env->current_frame()[var] = a->value()->perform(eval->with(env, backtrace)); - } - return 0; - } - - Statement* Expand::operator()(Import* i) - { - return i; // TODO: eval i->urls() - } - - Statement* Expand::operator()(Import_Stub* i) - { - append_block(ctx.style_sheets[i->file_name()]); - return 0; - } - - Statement* Expand::operator()(Warning* w) - { - // eval handles this too, because warnings may occur in functions - w->perform(eval->with(env, backtrace)); - return 0; - } - - Statement* Expand::operator()(Comment* c) - { - // TODO: eval the text, once we're parsing/storing it as a String_Schema - return c; - } - - Statement* Expand::operator()(If* i) - { - if (*i->predicate()->perform(eval->with(env, backtrace))) { - append_block(i->consequent()); - } - else { - Block* alt = i->alternative(); - if (alt) append_block(alt); - } - return 0; - } - - Statement* Expand::operator()(For* f) - { - string variable(f->variable()); - Expression* low = f->lower_bound()->perform(eval->with(env, backtrace)); - if (low->concrete_type() != Expression::NUMBER) { - error("lower bound of `@for` directive must be numeric", low->path(), low->position(), backtrace); - } - Expression* high = f->upper_bound()->perform(eval->with(env, backtrace)); - if (high->concrete_type() != Expression::NUMBER) { - error("upper bound of `@for` directive must be numeric", high->path(), high->position(), backtrace); - } - double lo = static_cast<Number*>(low)->value(); - double hi = static_cast<Number*>(high)->value(); - if (f->is_inclusive()) ++hi; - Env new_env; - new_env[variable] = new (ctx.mem) Number(low->path(), low->position(), lo); - new_env.link(env); - env = &new_env; - Block* body = f->block(); - for (double i = lo; - i < hi; - (*env)[variable] = new (ctx.mem) Number(low->path(), low->position(), ++i)) { - append_block(body); - } - env = new_env.parent(); - return 0; - } - - Statement* Expand::operator()(Each* e) - { - string variable(e->variable()); - Expression* expr = e->list()->perform(eval->with(env, backtrace)); - List* list = 0; - if (expr->concrete_type() != Expression::LIST) { - list = new (ctx.mem) List(expr->path(), expr->position(), 1, List::COMMA); - *list << expr; - } - else { - list = static_cast<List*>(expr); - } - Env new_env; - new_env[variable] = 0; - new_env.link(env); - env = &new_env; - Block* body = e->block(); - for (size_t i = 0, L = list->length(); i < L; ++i) { - (*env)[variable] = (*list)[i]->perform(eval->with(env, backtrace)); - append_block(body); - } - env = new_env.parent(); - return 0; - } - - Statement* Expand::operator()(While* w) - { - Expression* pred = w->predicate(); - Block* body = w->block(); - while (*pred->perform(eval->with(env, backtrace))) { - append_block(body); - } - return 0; - } - - Statement* Expand::operator()(Return* r) - { - error("@return may only be used within a function", r->path(), r->position(), backtrace); - return 0; - } - - Statement* Expand::operator()(Extension* e) - { - Selector_List* extender = static_cast<Selector_List*>(selector_stack.back()); - if (!extender) return 0; - Selector_List* extendee = static_cast<Selector_List*>(e->selector()->perform(contextualize->with(0, env, backtrace))); - if (extendee->length() != 1) { - error("selector groups may not be extended", extendee->path(), extendee->position(), backtrace); - } - Complex_Selector* c = (*extendee)[0]; - if (!c->head() || c->tail()) { - error("nested selectors may not be extended", c->path(), c->position(), backtrace); - } - Compound_Selector* s = c->head(); - for (size_t i = 0, L = extender->length(); i < L; ++i) { - extensions.insert(make_pair(*s, (*extender)[i])); - To_String to_string; - } - return 0; - } - - Statement* Expand::operator()(Definition* d) - { - Definition* dd = new (ctx.mem) Definition(*d); - env->current_frame()[d->name() + - (d->type() == Definition::MIXIN ? "[m]" : "[f]")] = dd; - // set the static link so we can have lexical scoping - dd->environment(env); - return 0; - } - - Statement* Expand::operator()(Mixin_Call* c) - { - string full_name(c->name() + "[m]"); - if (!env->has(full_name)) { - error("no mixin named " + c->name(), c->path(), c->position(), backtrace); - } - Definition* def = static_cast<Definition*>((*env)[full_name]); - Block* body = def->block(); - Parameters* params = def->parameters(); - Arguments* args = static_cast<Arguments*>(c->arguments() - ->perform(eval->with(env, backtrace))); - Backtrace here(backtrace, c->path(), c->position(), ", in mixin `" + c->name() + "`"); - backtrace = &here; - Env new_env; - new_env.link(def->environment()); - if (c->block()) { - // represent mixin content blocks as thunks/closures - Definition* thunk = new (ctx.mem) Definition(c->path(), - c->position(), - "@content", - new (ctx.mem) Parameters(c->path(), c->position()), - c->block(), - Definition::MIXIN); - thunk->environment(env); - new_env.current_frame()["@content[m]"] = thunk; - } - bind("mixin " + c->name(), params, args, ctx, &new_env, eval); - Env* old_env = env; - env = &new_env; - append_block(body); - env = old_env; - backtrace = here.parent; - return 0; - } - - Statement* Expand::operator()(Content* c) - { - // convert @content directives into mixin calls to the underlying thunk - if (!env->has("@content[m]")) return 0; - Mixin_Call* call = new (ctx.mem) Mixin_Call(c->path(), - c->position(), - "@content", - new (ctx.mem) Arguments(c->path(), c->position())); - return call->perform(this); - } - - inline Statement* Expand::fallback_impl(AST_Node* n) - { - error("unknown internal error; please contact the LibSass maintainers", n->path(), n->position(), backtrace); - String_Constant* msg = new (ctx.mem) String_Constant("", Position(), string("`Expand` doesn't handle ") + typeid(*n).name()); - return new (ctx.mem) Warning("", Position(), msg); - } - - inline void Expand::append_block(Block* b) - { - Block* current_block = block_stack.back(); - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* ith = (*b)[i]->perform(this); - if (ith) *current_block << ith; - } - } -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/expand.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/expand.hpp deleted file mode 100644 index 2c65b745..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/expand.hpp +++ /dev/null @@ -1,76 +0,0 @@ -#define SASS_EXPAND - -#include <vector> -#include <map> -#include <iostream> - -#ifndef SASS_AST -#include "ast.hpp" -#endif - -#ifndef SASS_OPERATION -#include "operation.hpp" -#endif - -#ifndef SASS_ENVIRONMENT -#include "environment.hpp" -#endif - -namespace Sass { - using namespace std; - - struct Context; - class Eval; - class Contextualize; - typedef Environment<AST_Node*> Env; - struct Backtrace; - - class Expand : public Operation_CRTP<Statement*, Expand> { - - Context& ctx; - Eval* eval; - Contextualize* contextualize; - Env* env; - vector<Block*> block_stack; - vector<String*> property_stack; - vector<Selector*> selector_stack; - Backtrace* backtrace; - - Statement* fallback_impl(AST_Node* n); - - public: - Expand(Context&, Eval*, Contextualize*, Env*, Backtrace*); - virtual ~Expand() { } - - using Operation<Statement*>::operator(); - - Statement* operator()(Block*); - Statement* operator()(Ruleset*); - Statement* operator()(Propset*); - Statement* operator()(Media_Block*); - Statement* operator()(At_Rule*); - Statement* operator()(Declaration*); - Statement* operator()(Assignment*); - Statement* operator()(Import*); - Statement* operator()(Import_Stub*); - Statement* operator()(Warning*); - Statement* operator()(Comment*); - Statement* operator()(If*); - Statement* operator()(For*); - Statement* operator()(Each*); - Statement* operator()(While*); - Statement* operator()(Return*); - Statement* operator()(Extension*); - Statement* operator()(Definition*); - Statement* operator()(Mixin_Call*); - Statement* operator()(Content*); - - template <typename U> - Statement* fallback(U x) { return fallback_impl(x); } - - void append_block(Block*); - - multimap<Compound_Selector, Complex_Selector*> extensions; - }; - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/extconf.rb b/node_modules/gulp-sass/node_modules/node-sass/libsass/extconf.rb deleted file mode 100644 index 3e6d00bc..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/extconf.rb +++ /dev/null @@ -1,6 +0,0 @@ -require 'mkmf' -# .. more stuff -#$LIBPATH.push(Config::CONFIG['libdir']) -$CFLAGS << " #{ENV["CFLAGS"]}" -$LIBS << " #{ENV["LIBS"]}" -create_makefile("libsass") diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/extend.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/extend.cpp deleted file mode 100644 index b2fd84bb..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/extend.cpp +++ /dev/null @@ -1,116 +0,0 @@ -#include "extend.hpp" -#include "context.hpp" -#include "contextualize.hpp" -#include "to_string.hpp" -#include "backtrace.hpp" -#include <iostream> - -namespace Sass { - - Extend::Extend(Context& ctx, multimap<Compound_Selector, Complex_Selector*>& extensions, Backtrace* bt) - : ctx(ctx), extensions(extensions), backtrace(bt) - { } - - void Extend::operator()(Block* b) - { - for (size_t i = 0, L = b->length(); i < L; ++i) { - (*b)[i]->perform(this); - } - } - - void Extend::operator()(Ruleset* r) - { - Selector_List* sg = static_cast<Selector_List*>(r->selector()); - Selector_List* ng = 0; - bool extended = false; - if (sg->has_placeholder()) { - // To_String to_string; - Compound_Selector* placeholder = new (ctx.mem) Compound_Selector(sg->path(), sg->position(), 1); - *placeholder << sg->find_placeholder(); - // cerr << "placeholder: " << placeholder->perform(&to_string) << endl; - // if the placeholder needs to be subbed - if (extensions.count(*placeholder)) { - // cerr << "need to sub " << placeholder->perform(&to_string) << " " << extensions.count(*placeholder) << " times" << endl; - // perform each substitution and append it to the selector group of the ruleset - ng = new (ctx.mem) Selector_List(sg->path(), sg->position(), extensions.count(*placeholder)); - for (multimap<Compound_Selector, Complex_Selector*>::iterator extender = extensions.lower_bound(*placeholder), E = extensions.upper_bound(*placeholder); - extender != E; - ++extender) { - // cerr << "performing a substitution: " << placeholder->perform(&to_string) << " -> " << extender->second->perform(&to_string) << endl; - Contextualize sub_plc(ctx, 0, 0, backtrace, placeholder, extender->second); - Selector_List* subbed = static_cast<Selector_List*>(sg->perform(&sub_plc)); - // if (subbed) cerr << "subbed: " << subbed->perform(&to_string) << endl; - *ng += subbed; - extended = true; - } - ng->has_placeholder(false); - } - // otherwise prevent it from rendering - else { - // r->selector(0); - } - } - else { - ng = new (ctx.mem) Selector_List(sg->path(), sg->position(), sg->length()); - // for each selector in the group - for (size_t i = 0, L = sg->length(); i < L; ++i) { - Complex_Selector* sel = (*sg)[i]; - *ng << sel; - // if it's supposed to be extended - Compound_Selector* sel_base = sel->base(); - To_String to_string; - if (sel_base && extensions.count(*sel_base)) { - // extend it wrt each of its extenders - for (multimap<Compound_Selector, Complex_Selector*>::iterator extender = extensions.lower_bound(*sel_base), E = extensions.upper_bound(*sel_base); - extender != E; - ++extender) { - *ng += generate_extension(sel, extender->second); - extended = true; - } - } - } - } - if (extended) r->selector(ng); - r->block()->perform(this); - } - - void Extend::operator()(Media_Block* m) - { - m->block()->perform(this); - } - - void Extend::operator()(At_Rule* a) - { - if (a->block()) a->block()->perform(this); - } - - Selector_List* Extend::generate_extension(Complex_Selector* extendee, Complex_Selector* extender) - { - To_String to_string; - Selector_List* new_group = new (ctx.mem) Selector_List(extendee->path(), extendee->position()); - Complex_Selector* extendee_context = extendee->context(ctx); - Complex_Selector* extender_context = extender->context(ctx); - if (extendee_context && extender_context) { - Complex_Selector* base = new (ctx.mem) Complex_Selector(new_group->path(), new_group->position(), Complex_Selector::ANCESTOR_OF, extender->base(), 0); - extendee_context->innermost()->tail(extender); - *new_group << extendee_context; - // make another one so we don't erroneously share tails - extendee_context = extendee->context(ctx); - extendee_context->innermost()->tail(base); - extender_context->innermost()->tail(extendee_context); - *new_group << extender_context; - } - else if (extendee_context) { - extendee_context->innermost()->tail(extender); - *new_group << extendee_context; - } - else if (extender_context) { - *new_group << extender; - } - else { - *new_group << extender; - } - return new_group; - } - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/extend.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/extend.hpp deleted file mode 100644 index 7d94f223..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/extend.hpp +++ /dev/null @@ -1,47 +0,0 @@ -#define SASS_EXTEND - -#include <vector> -#include <map> -#include <iostream> - -#ifndef SASS_AST -#include "ast.hpp" -#endif - -#ifndef SASS_OPERATION -#include "operation.hpp" -#endif - -namespace Sass { - using namespace std; - - struct Context; - struct Backtrace; - - class Extend : public Operation_CRTP<void, Extend> { - - Context& ctx; - multimap<Compound_Selector, Complex_Selector*>& extensions; - Backtrace* backtrace; - - void fallback_impl(AST_Node* n) { }; - - public: - Extend(Context&, multimap<Compound_Selector, Complex_Selector*>&, Backtrace*); - virtual ~Extend() { } - - using Operation<void>::operator(); - - void operator()(Block*); - void operator()(Ruleset*); - void operator()(Media_Block*); - void operator()(At_Rule*); - - Selector_List* generate_extension(Complex_Selector*, Complex_Selector*); - - template <typename U> - void fallback(U x) { return fallback_impl(x); } - }; - - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/file.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/file.cpp deleted file mode 100644 index d17334f1..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/file.cpp +++ /dev/null @@ -1,144 +0,0 @@ -#ifdef _WIN32 -#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) -#endif - -#include <iostream> -#include <fstream> -#include <cctype> -#include <sys/stat.h> -#include "file.hpp" -#include "context.hpp" - -namespace Sass { - namespace File { - using namespace std; - - string base_name(string path) - { - size_t pos = path.find_last_of('/'); - if (pos == string::npos) return path; - else return path.substr(pos+1); - } - - string dir_name(string path) - { - size_t pos = path.find_last_of('/'); - if (pos == string::npos) return ""; - else return path.substr(0, pos+1); - } - - string join_paths(string l, string r) - { - if (l.empty()) return r; - if (r.empty()) return l; - if (is_absolute_path(r)) return r; - - if (l[l.length()-1] != '/') l += '/'; - - while ((r.length() > 3) && (r.substr(0, 3) == "../")) { - r = r.substr(3); - size_t index = l.find_last_of('/', l.length() - 2); - l = l.substr(0, index + 1); - } - - return l + r; - } - - bool is_absolute_path(const string& path) - { - if (path[0] == '/') return true; - // TODO: UN-HACKIFY THIS - #ifdef _WIN32 - if (path.length() >= 2 && isalpha(path[0]) && path[1] == ':') return true; - #endif - return false; - } - - string make_absolute_path(const string& path, const string& cwd) - { - return (is_absolute_path(path) ? path : join_paths(cwd, path)); - } - - string resolve_relative_path(const string& uri, const string& base, const string& cwd) - { - string absolute_uri = make_absolute_path(uri, cwd); - string absolute_base = make_absolute_path(base, cwd); - - string stripped_uri = ""; - string stripped_base = ""; - - size_t index = 0; - size_t minSize = min(absolute_uri.size(), absolute_base.size()); - for (size_t i = 0; i < minSize; ++i) { - if (absolute_uri[i] != absolute_base[i]) break; - if (absolute_uri[i] == '/') index = i + 1; - } - for (size_t i = index; i < absolute_uri.size(); ++i) { - stripped_uri += absolute_uri[i]; - } - for (size_t i = index; i < absolute_base.size(); ++i) { - stripped_base += absolute_base[i]; - } - size_t directories = 0; - for (size_t i = 0; i < stripped_base.size(); ++i) { - if (stripped_base[i] == '/') ++directories; - } - string result = ""; - for (size_t i = 0; i < directories; ++i) { - result += "../"; - } - result += stripped_uri; - - return result; - } - - char* resolve_and_load(string path, string& real_path) - { - // Resolution order for ambiguous imports: - // (1) filename as given - // (2) underscore + given - // (3) underscore + given + extension - // (4) given + extension - char* contents = 0; - // if the file isn't found with the given filename ... - real_path = path; - if (!(contents = read_file(real_path))) { - string dir(dir_name(path)); - string base(base_name(path)); - string _base("_" + base); - real_path = dir + _base; - // if the file isn't found with '_' + filename ... - if (!(contents = read_file(real_path))) { - string _base_scss(_base + ".scss"); - real_path = dir + _base_scss; - // if the file isn't found with '_' + filename + ".scss" ... - if (!(contents = read_file(real_path))) { - string base_scss(base + ".scss"); - // try filename + ".scss" as the last resort - real_path = dir + base_scss; - contents = read_file(real_path); - } - } - } - return contents; - } - - char* read_file(string path) - { - struct stat st; - if (stat(path.c_str(), &st) == -1 || S_ISDIR(st.st_mode)) return 0; - ifstream file(path.c_str(), ios::in | ios::binary | ios::ate); - char* contents = 0; - if (file.is_open()) { - size_t size = file.tellg(); - contents = new char[size + 1]; // extra byte for the null char - file.seekg(0, ios::beg); - file.read(contents, size); - contents[size] = '\0'; - file.close(); - } - return contents; - } - - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/file.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/file.hpp deleted file mode 100644 index e095040c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/file.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#include <string> - -namespace Sass { - using namespace std; - struct Context; - namespace File { - string base_name(string); - string dir_name(string); - string join_paths(string, string); - bool is_absolute_path(const string& path); - string make_absolute_path(const string& path, const string& cwd); - string resolve_relative_path(const string& uri, const string& base, const string& cwd); - char* resolve_and_load(string path, string& real_path); - char* read_file(string path); - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/functions.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/functions.cpp deleted file mode 100644 index 3ef0647d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/functions.cpp +++ /dev/null @@ -1,978 +0,0 @@ -#include "functions.hpp" -#include "ast.hpp" -#include "context.hpp" -#include "backtrace.hpp" -#include "parser.hpp" -#include "constants.hpp" -#include "to_string.hpp" -#include "inspect.hpp" -#include "eval.hpp" - -#include <cmath> -#include <cctype> -#include <sstream> -#include <iomanip> -#include <iostream> - -#define ARG(argname, argtype) get_arg<argtype>(argname, env, sig, path, position, backtrace) -#define ARGR(argname, argtype, lo, hi) get_arg_r(argname, env, sig, path, position, lo, hi, backtrace) - -namespace Sass { - using std::stringstream; - using std::endl; - - Definition* make_native_function(Signature sig, Native_Function f, Context& ctx) - { - Parser sig_parser = Parser::from_c_str(sig, ctx, "[built-in function]"); - sig_parser.lex<Prelexer::identifier>(); - string name(sig_parser.lexed); - Parameters* params = sig_parser.parse_parameters(); - return new (ctx.mem) Definition("[built-in function]", - Position(), - sig, - name, - params, - f, - false); - } - - Definition* make_c_function(Signature sig, Sass_C_Function f, Context& ctx) - { - Parser sig_parser = Parser::from_c_str(sig, ctx, "[c function]"); - sig_parser.lex<Prelexer::identifier>(); - string name(sig_parser.lexed); - Parameters* params = sig_parser.parse_parameters(); - return new (ctx.mem) Definition("[c function]", - Position(), - sig, - name, - params, - f, - false, true); - } - - namespace Functions { - - template <typename T> - T* get_arg(const string& argname, Env& env, Signature sig, const string& path, Position position, Backtrace* backtrace) - { - // Minimal error handling -- the expectation is that built-ins will be written correctly! - T* val = dynamic_cast<T*>(env[argname]); - if (!val) { - string msg("argument `"); - msg += argname; - msg += "` of `"; - msg += sig; - msg += "` must be a "; - msg += T::type_name(); - error(msg, path, position, backtrace); - } - return val; - } - - Number* get_arg_r(const string& argname, Env& env, Signature sig, const string& path, Position position, double lo, double hi, Backtrace* backtrace) - { - // Minimal error handling -- the expectation is that built-ins will be written correctly! - Number* val = get_arg<Number>(argname, env, sig, path, position, backtrace); - double v = val->value(); - if (!(lo <= v && v <= hi)) { - stringstream msg; - msg << "argument `" << argname << "` of `" << sig << "` must be between "; - msg << lo << " and " << hi; - error(msg.str(), path, position, backtrace); - } - return val; - } - - //////////////// - // RGB FUNCTIONS - //////////////// - - Signature rgb_sig = "rgb($red, $green, $blue)"; - BUILT_IN(rgb) - { - return new (ctx.mem) Color(path, - position, - ARGR("$red", Number, 0, 255)->value(), - ARGR("$green", Number, 0, 255)->value(), - ARGR("$blue", Number, 0, 255)->value()); - } - - Signature rgba_4_sig = "rgba($red, $green, $blue, $alpha)"; - BUILT_IN(rgba_4) - { - return new (ctx.mem) Color(path, - position, - ARGR("$red", Number, 0, 255)->value(), - ARGR("$green", Number, 0, 255)->value(), - ARGR("$blue", Number, 0, 255)->value(), - ARGR("$alpha", Number, 0, 1)->value()); - } - - Signature rgba_2_sig = "rgba($color, $alpha)"; - BUILT_IN(rgba_2) - { - Color* c_arg = ARG("$color", Color); - Color* new_c = new (ctx.mem) Color(*c_arg); - new_c->a(ARGR("$alpha", Number, 0, 1)->value()); - new_c->disp(""); - return new_c; - } - - Signature red_sig = "red($color)"; - BUILT_IN(red) - { return new (ctx.mem) Number(path, position, ARG("$color", Color)->r()); } - - Signature green_sig = "green($color)"; - BUILT_IN(green) - { return new (ctx.mem) Number(path, position, ARG("$color", Color)->g()); } - - Signature blue_sig = "blue($color)"; - BUILT_IN(blue) - { return new (ctx.mem) Number(path, position, ARG("$color", Color)->b()); } - - Signature mix_sig = "mix($color-1, $color-2, $weight: 50%)"; - BUILT_IN(mix) - { - Color* color1 = ARG("$color-1", Color); - Color* color2 = ARG("$color-2", Color); - Number* weight = ARGR("$weight", Number, 0, 100); - - double p = weight->value()/100; - double w = 2*p - 1; - double a = color1->a() - color2->a(); - - double w1 = (((w * a == -1) ? w : (w + a)/(1 + w*a)) + 1)/2.0; - double w2 = 1 - w1; - - return new (ctx.mem) Color(path, - position, - std::floor(w1*color1->r() + w2*color2->r()), - std::floor(w1*color1->g() + w2*color2->g()), - std::floor(w1*color1->b() + w2*color2->b()), - color1->a()*p + color2->a()*(1-p)); - } - - //////////////// - // HSL FUNCTIONS - //////////////// - - // RGB to HSL helper function - struct HSL { double h; double s; double l; }; - HSL rgb_to_hsl(double r, double g, double b) - { - r /= 255.0; g /= 255.0; b /= 255.0; - - double max = std::max(r, std::max(g, b)); - double min = std::min(r, std::min(g, b)); - double del = max - min; - - double h = 0, s = 0, l = (max + min)/2; - - if (max == min) { - h = s = 0; // achromatic - } - else { - if (l < 0.5) s = del / (max + min); - else s = del / (2.0 - max - min); - - double dr = (((max - r)/6.0) + (del/2.0))/del; - double dg = (((max - g)/6.0) + (del/2.0))/del; - double db = (((max - b)/6.0) + (del/2.0))/del; - - if (r == max) h = db - dg; - else if (g == max) h = (1.0/3.0) + dr - db; - else if (b == max) h = (2.0/3.0) + dg - dr; - - if (h < 0) h += 1; - else if (h > 1) h -= 1; - } - HSL hsl_struct; - hsl_struct.h = static_cast<int>(h*360)%360; - hsl_struct.s = s*100; - hsl_struct.l = l*100; - return hsl_struct; - } - - // hue to RGB helper function - double h_to_rgb(double m1, double m2, double h) { - if (h < 0) h += 1; - if (h > 1) h -= 1; - if (h*6.0 < 1) return m1 + (m2 - m1)*h*6; - if (h*2.0 < 1) return m2; - if (h*3.0 < 2) return m1 + (m2 - m1) * (2.0/3.0 - h)*6; - return m1; - } - - Color* hsla_impl(double h, double s, double l, double a, Context& ctx, const string& path, Position position) - { - h = static_cast<double>(((static_cast<int>(h) % 360) + 360) % 360) / 360.0; - s /= 100.0; - l /= 100.0; - - double m2; - if (l <= 0.5) m2 = l*(s+1.0); - else m2 = l+s-l*s; - double m1 = l*2-m2; - // round the results -- consider moving this into the Color constructor - double r = (h_to_rgb(m1, m2, h+1.0/3.0) * 255.0); - double g = (h_to_rgb(m1, m2, h) * 255.0); - double b = (h_to_rgb(m1, m2, h-1.0/3.0) * 255.0); - - return new (ctx.mem) Color(path, position, r, g, b, a); - } - - Signature hsl_sig = "hsl($hue, $saturation, $lightness)"; - BUILT_IN(hsl) - { - return hsla_impl(ARG("$hue", Number)->value(), - ARGR("$saturation", Number, 0, 100)->value(), - ARGR("$lightness", Number, 0, 100)->value(), - 1.0, - ctx, - path, - position); - } - - Signature hsla_sig = "hsla($hue, $saturation, $lightness, $alpha)"; - BUILT_IN(hsla) - { - return hsla_impl(ARG("$hue", Number)->value(), - ARGR("$saturation", Number, 0, 100)->value(), - ARGR("$lightness", Number, 0, 100)->value(), - ARGR("$alpha", Number, 0, 1)->value(), - ctx, - path, - position); - } - - Signature hue_sig = "hue($color)"; - BUILT_IN(hue) - { - Color* rgb_color = ARG("$color", Color); - HSL hsl_color = rgb_to_hsl(rgb_color->r(), - rgb_color->g(), - rgb_color->b()); - return new (ctx.mem) Number(path, position, hsl_color.h, "deg"); - } - - Signature saturation_sig = "saturation($color)"; - BUILT_IN(saturation) - { - Color* rgb_color = ARG("$color", Color); - HSL hsl_color = rgb_to_hsl(rgb_color->r(), - rgb_color->g(), - rgb_color->b()); - return new (ctx.mem) Number(path, position, hsl_color.s, "%"); - } - - Signature lightness_sig = "lightness($color)"; - BUILT_IN(lightness) - { - Color* rgb_color = ARG("$color", Color); - HSL hsl_color = rgb_to_hsl(rgb_color->r(), - rgb_color->g(), - rgb_color->b()); - return new (ctx.mem) Number(path, position, hsl_color.l, "%"); - } - - Signature adjust_hue_sig = "adjust-hue($color, $degrees)"; - BUILT_IN(adjust_hue) - { - Color* rgb_color = ARG("$color", Color); - Number* degrees = ARG("$degrees", Number); - HSL hsl_color = rgb_to_hsl(rgb_color->r(), - rgb_color->g(), - rgb_color->b()); - return hsla_impl(hsl_color.h + degrees->value(), - hsl_color.s, - hsl_color.l, - rgb_color->a(), - ctx, - path, - position); - } - - Signature lighten_sig = "lighten($color, $amount)"; - BUILT_IN(lighten) - { - Color* rgb_color = ARG("$color", Color); - Number* amount = ARGR("$amount", Number, 0, 100); - HSL hsl_color = rgb_to_hsl(rgb_color->r(), - rgb_color->g(), - rgb_color->b()); - //Check lightness is not negative before lighten it - double hslcolorL = hsl_color.l; - if (hslcolorL < 0) { - hslcolorL = 0; - } - - return hsla_impl(hsl_color.h, - hsl_color.s, - hslcolorL + amount->value(), - rgb_color->a(), - ctx, - path, - position); - } - - Signature darken_sig = "darken($color, $amount)"; - BUILT_IN(darken) - { - Color* rgb_color = ARG("$color", Color); - Number* amount = ARGR("$amount", Number, 0, 100); - HSL hsl_color = rgb_to_hsl(rgb_color->r(), - rgb_color->g(), - rgb_color->b()); - - //Check lightness if not over 100, before darken it - double hslcolorL = hsl_color.l; - if (hslcolorL > 100) { - hslcolorL = 100; - } - - return hsla_impl(hsl_color.h, - hsl_color.s, - hslcolorL - amount->value(), - rgb_color->a(), - ctx, - path, - position); - } - - Signature saturate_sig = "saturate($color, $amount)"; - BUILT_IN(saturate) - { - Color* rgb_color = ARG("$color", Color); - Number* amount = ARGR("$amount", Number, 0, 100); - HSL hsl_color = rgb_to_hsl(rgb_color->r(), - rgb_color->g(), - rgb_color->b()); - //Check saturation is not negative before saturate it - double hslcolorS = hsl_color.s; - if (hslcolorS < 0) { - hslcolorS = 0; - } - - - return hsla_impl(hsl_color.h, - hslcolorS + amount->value(), - hsl_color.l, - rgb_color->a(), - ctx, - path, - position); - } - - Signature desaturate_sig = "desaturate($color, $amount)"; - BUILT_IN(desaturate) - { - Color* rgb_color = ARG("$color", Color); - Number* amount = ARGR("$amount", Number, 0, 100); - HSL hsl_color = rgb_to_hsl(rgb_color->r(), - rgb_color->g(), - rgb_color->b()); - //Check saturation is not over 100 before desaturate it - double hslcolorS = hsl_color.s; - if (hslcolorS > 100) { - hslcolorS = 100; - } - - return hsla_impl(hsl_color.h, - hslcolorS - amount->value(), - hsl_color.l, - rgb_color->a(), - ctx, - path, - position); - } - - Signature grayscale_sig = "grayscale($color)"; - BUILT_IN(grayscale) - { - Color* rgb_color = ARG("$color", Color); - HSL hsl_color = rgb_to_hsl(rgb_color->r(), - rgb_color->g(), - rgb_color->b()); - return hsla_impl(hsl_color.h, - 0.0, - hsl_color.l, - rgb_color->a(), - ctx, - path, - position); - } - - Signature complement_sig = "complement($color)"; - BUILT_IN(complement) - { - Color* rgb_color = ARG("$color", Color); - HSL hsl_color = rgb_to_hsl(rgb_color->r(), - rgb_color->g(), - rgb_color->b()); - return hsla_impl(hsl_color.h - 180.0, - hsl_color.s, - hsl_color.l, - rgb_color->a(), - ctx, - path, - position); - } - - Signature invert_sig = "invert($color)"; - BUILT_IN(invert) - { - Color* rgb_color = ARG("$color", Color); - return new (ctx.mem) Color(path, - position, - 255 - rgb_color->r(), - 255 - rgb_color->g(), - 255 - rgb_color->b(), - rgb_color->a()); - } - - //////////////////// - // OPACITY FUNCTIONS - //////////////////// - Signature alpha_sig = "alpha($color)"; - Signature opacity_sig = "opacity($color)"; - BUILT_IN(alpha) - { - String_Constant* ie_kwd = dynamic_cast<String_Constant*>(env["$color"]); - if (ie_kwd) { - return new (ctx.mem) String_Constant(path, position, "alpha(" + ie_kwd->value() + ")"); - } - else { - return new (ctx.mem) Number(path, position, ARG("$color", Color)->a()); - } - } - - Signature opacify_sig = "opacify($color, $amount)"; - Signature fade_in_sig = "fade-in($color, $amount)"; - BUILT_IN(opacify) - { - Color* color = ARG("$color", Color); - double alpha = color->a() + ARGR("$amount", Number, 0, 1)->value(); - return new (ctx.mem) Color(path, - position, - color->r(), - color->g(), - color->b(), - alpha > 1.0 ? 1.0 : alpha); - } - - Signature transparentize_sig = "transparentize($color, $amount)"; - Signature fade_out_sig = "fade-out($color, $amount)"; - BUILT_IN(transparentize) - { - Color* color = ARG("$color", Color); - double alpha = color->a() - ARGR("$amount", Number, 0, 1)->value(); - return new (ctx.mem) Color(path, - position, - color->r(), - color->g(), - color->b(), - alpha < 0.0 ? 0.0 : alpha); - } - - //////////////////////// - // OTHER COLOR FUNCTIONS - //////////////////////// - - Signature adjust_color_sig = "adjust-color($color, $red: false, $green: false, $blue: false, $hue: false, $saturation: false, $lightness: false, $alpha: false)"; - BUILT_IN(adjust_color) - { - Color* color = ARG("$color", Color); - Number* r = dynamic_cast<Number*>(env["$red"]); - Number* g = dynamic_cast<Number*>(env["$green"]); - Number* b = dynamic_cast<Number*>(env["$blue"]); - Number* h = dynamic_cast<Number*>(env["$hue"]); - Number* s = dynamic_cast<Number*>(env["$saturation"]); - Number* l = dynamic_cast<Number*>(env["$lightness"]); - Number* a = dynamic_cast<Number*>(env["$alpha"]); - - bool rgb = r || g || b; - bool hsl = h || s || l; - - if (rgb && hsl) { - error("cannot specify both RGB and HSL values for `adjust-color`", path, position); - } - if (rgb) { - return new (ctx.mem) Color(path, - position, - color->r() + (r ? r->value() : 0), - color->g() + (g ? g->value() : 0), - color->b() + (b ? b->value() : 0), - color->a() + (a ? a->value() : 0)); - } - if (hsl) { - HSL hsl_struct = rgb_to_hsl(color->r(), color->g(), color->b()); - return hsla_impl(hsl_struct.h + (h ? h->value() : 0), - hsl_struct.s + (s ? s->value() : 0), - hsl_struct.l + (l ? l->value() : 0), - color->a() + (a ? a->value() : 0), - ctx, - path, - position); - } - if (a) { - return new (ctx.mem) Color(path, - position, - color->r(), - color->g(), - color->b(), - color->a() + (a ? a->value() : 0)); - } - error("not enough arguments for `adjust-color`", path, position); - // unreachable - return color; - } - - Signature scale_color_sig = "scale-color($color, $red: false, $green: false, $blue: false, $hue: false, $saturation: false, $lightness: false, $alpha: false)"; - BUILT_IN(scale_color) - { - Color* color = ARG("$color", Color); - Number* r = dynamic_cast<Number*>(env["$red"]); - Number* g = dynamic_cast<Number*>(env["$green"]); - Number* b = dynamic_cast<Number*>(env["$blue"]); - Number* h = dynamic_cast<Number*>(env["$hue"]); - Number* s = dynamic_cast<Number*>(env["$saturation"]); - Number* l = dynamic_cast<Number*>(env["$lightness"]); - Number* a = dynamic_cast<Number*>(env["$alpha"]); - - bool rgb = r || g || b; - bool hsl = h || s || l; - - if (rgb && hsl) { - error("cannot specify both RGB and HSL values for `scale-color`", path, position); - } - if (rgb) { - double rscale = (r ? ARGR("$red", Number, -100.0, 100.0)->value() : 0.0) / 100.0; - double gscale = (g ? ARGR("$green", Number, -100.0, 100.0)->value() : 0.0) / 100.0; - double bscale = (b ? ARGR("$blue", Number, -100.0, 100.0)->value() : 0.0) / 100.0; - double ascale = (a ? ARGR("$alpha", Number, -100.0, 100.0)->value() : 0.0) / 100.0; - return new (ctx.mem) Color(path, - position, - color->r() + rscale * (rscale > 0.0 ? 255 - color->r() : color->r()), - color->g() + gscale * (gscale > 0.0 ? 255 - color->g() : color->g()), - color->b() + bscale * (bscale > 0.0 ? 255 - color->b() : color->b()), - color->a() + ascale * (ascale > 0.0 ? 1.0 - color->a() : color->a())); - } - if (hsl) { - double hscale = (h ? ARGR("$hue", Number, -100.0, 100.0)->value() : 0.0) / 100.0; - double sscale = (s ? ARGR("$saturation", Number, -100.0, 100.0)->value() : 0.0) / 100.0; - double lscale = (l ? ARGR("$lightness", Number, -100.0, 100.0)->value() : 0.0) / 100.0; - double ascale = (a ? ARGR("$alpha", Number, -100.0, 100.0)->value() : 0.0) / 100.0; - HSL hsl_struct = rgb_to_hsl(color->r(), color->g(), color->b()); - hsl_struct.h += hscale * (hscale > 0.0 ? 360.0 - hsl_struct.h : hsl_struct.h); - hsl_struct.s += sscale * (sscale > 0.0 ? 100.0 - hsl_struct.s : hsl_struct.s); - hsl_struct.l += lscale * (lscale > 0.0 ? 100.0 - hsl_struct.l : hsl_struct.l); - double alpha = color->a() + ascale * (ascale > 0.0 ? 1.0 - color->a() : color->r()); - return hsla_impl(hsl_struct.h, hsl_struct.s, hsl_struct.l, alpha, ctx, path, position); - } - if (a) { - double ascale = (a ? ARGR("$alpha", Number, -100.0, 100.0)->value() : 0.0) / 100.0; - return new (ctx.mem) Color(path, - position, - color->r(), - color->g(), - color->b(), - color->a() + ascale * (ascale > 0.0 ? 1.0 - color->a() : color->a())); - } - error("not enough arguments for `scale-color`", path, position); - // unreachable - return color; - } - - Signature change_color_sig = "change-color($color, $red: false, $green: false, $blue: false, $hue: false, $saturation: false, $lightness: false, $alpha: false)"; - BUILT_IN(change_color) - { - Color* color = ARG("$color", Color); - Number* r = dynamic_cast<Number*>(env["$red"]); - Number* g = dynamic_cast<Number*>(env["$green"]); - Number* b = dynamic_cast<Number*>(env["$blue"]); - Number* h = dynamic_cast<Number*>(env["$hue"]); - Number* s = dynamic_cast<Number*>(env["$saturation"]); - Number* l = dynamic_cast<Number*>(env["$lightness"]); - Number* a = dynamic_cast<Number*>(env["$alpha"]); - - bool rgb = r || g || b; - bool hsl = h || s || l; - - if (rgb && hsl) { - error("cannot specify both RGB and HSL values for `change-color`", path, position); - } - if (rgb) { - return new (ctx.mem) Color(path, - position, - r ? ARGR("$red", Number, 0, 255)->value() : color->r(), - g ? ARGR("$green", Number, 0, 255)->value() : color->g(), - b ? ARGR("$blue", Number, 0, 255)->value() : color->b(), - a ? ARGR("$alpha", Number, 0, 255)->value() : color->a()); - } - if (hsl) { - HSL hsl_struct = rgb_to_hsl(color->r(), color->g(), color->b()); - if (h) hsl_struct.h = static_cast<double>(((static_cast<int>(h->value()) % 360) + 360) % 360) / 360.0; - if (s) hsl_struct.s = ARGR("$saturation", Number, 0, 100)->value(); - if (l) hsl_struct.l = ARGR("$lightness", Number, 0, 100)->value(); - double alpha = a ? ARGR("$alpha", Number, 0, 1.0)->value() : color->a(); - return hsla_impl(hsl_struct.h, hsl_struct.s, hsl_struct.l, alpha, ctx, path, position); - } - if (a) { - double alpha = a ? ARGR("$alpha", Number, 0, 1.0)->value() : color->a(); - return new (ctx.mem) Color(path, - position, - color->r(), - color->g(), - color->b(), - alpha); - } - error("not enough arguments for `change-color`", path, position); - // unreachable - return color; - } - - template <size_t range> - static double cap_channel(double c) { - if (c > range) return range; - else if (c < 0) return 0; - else return c; - } - - Signature ie_hex_str_sig = "ie-hex-str($color)"; - BUILT_IN(ie_hex_str) - { - Color* c = ARG("$color", Color); - double r = cap_channel<0xff>(c->r()); - double g = cap_channel<0xff>(c->g()); - double b = cap_channel<0xff>(c->b()); - double a = cap_channel<1> (c->a()) * 255; - - stringstream ss; - ss << '#' << std::setw(2) << std::setfill('0'); - ss << std::hex << std::setw(2) << static_cast<unsigned long>(std::floor(a+0.5)); - ss << std::hex << std::setw(2) << static_cast<unsigned long>(std::floor(r+0.5)); - ss << std::hex << std::setw(2) << static_cast<unsigned long>(std::floor(g+0.5)); - ss << std::hex << std::setw(2) << static_cast<unsigned long>(std::floor(b+0.5)); - - string result(ss.str()); - for (size_t i = 0, L = result.length(); i < L; ++i) { - result[i] = std::toupper(result[i]); - } - return new (ctx.mem) String_Constant(path, position, result); - } - - /////////////////// - // STRING FUNCTIONS - /////////////////// - - Signature unquote_sig = "unquote($string)"; - BUILT_IN(sass_unquote) - { - To_String to_string; - AST_Node* arg = env["$string"]; - string str(unquote(arg->perform(&to_string))); - String_Constant* result = new (ctx.mem) String_Constant(path, position, str); - result->is_delayed(true); - return result; - } - - Signature quote_sig = "quote($string)"; - BUILT_IN(sass_quote) - { - To_String to_string; - AST_Node* arg = env["$string"]; - string str(quote(arg->perform(&to_string), '"')); - String_Constant* result = new (ctx.mem) String_Constant(path, position, str); - result->is_delayed(true); - return result; - } - - /////////////////// - // NUMBER FUNCTIONS - /////////////////// - - Signature percentage_sig = "percentage($value)"; - BUILT_IN(percentage) - { - Number* n = ARG("$value", Number); - if (!n->is_unitless()) error("argument $value of `" + string(sig) + "` must be unitless", path, position); - return new (ctx.mem) Number(path, position, n->value() * 100, "%"); - } - - Signature round_sig = "round($value)"; - BUILT_IN(round) - { - Number* n = ARG("$value", Number); - Number* r = new (ctx.mem) Number(*n); - r->path(path); - r->position(position); - r->value(std::floor(r->value() + 0.5)); - return r; - } - - Signature ceil_sig = "ceil($value)"; - BUILT_IN(ceil) - { - Number* n = ARG("$value", Number); - Number* r = new (ctx.mem) Number(*n); - r->path(path); - r->position(position); - r->value(std::ceil(r->value())); - return r; - } - - Signature floor_sig = "floor($value)"; - BUILT_IN(floor) - { - Number* n = ARG("$value", Number); - Number* r = new (ctx.mem) Number(*n); - r->path(path); - r->position(position); - r->value(std::floor(r->value())); - return r; - } - - Signature abs_sig = "abs($value)"; - BUILT_IN(abs) - { - Number* n = ARG("$value", Number); - Number* r = new (ctx.mem) Number(*n); - r->path(path); - r->position(position); - r->value(std::abs(r->value())); - return r; - } - - Signature min_sig = "min($x1, $x2...)"; - BUILT_IN(min) - { - Number* x1 = ARG("$x1", Number); - List* arglist = ARG("$x2", List); - Number* least = x1; - for (size_t i = 0, L = arglist->length(); i < L; ++i) { - Number* xi = dynamic_cast<Number*>((*arglist)[i]); - if (!xi) error("`" + string(sig) + "` only takes numeric arguments", path, position); - if (lt(xi, least, ctx)) least = xi; - } - return least; - } - - Signature max_sig = "max($x2, $x2...)"; - BUILT_IN(max) - { - Number* x1 = ARG("$x1", Number); - List* arglist = ARG("$x2", List); - Number* greatest = x1; - for (size_t i = 0, L = arglist->length(); i < L; ++i) { - Number* xi = dynamic_cast<Number*>((*arglist)[i]); - if (!xi) error("`" + string(sig) + "` only takes numeric arguments", path, position); - if (lt(greatest, xi, ctx)) greatest = xi; - } - return greatest; - } - - ///////////////// - // LIST FUNCTIONS - ///////////////// - - Signature length_sig = "length($list)"; - BUILT_IN(length) - { - List* list = dynamic_cast<List*>(env["$list"]); - return new (ctx.mem) Number(path, - position, - list ? list->length() : 1); - } - - Signature nth_sig = "nth($list, $n)"; - BUILT_IN(nth) - { - List* l = dynamic_cast<List*>(env["$list"]); - Number* n = ARG("$n", Number); - if (!l) { - l = new (ctx.mem) List(path, position, 1); - *l << ARG("$list", Expression); - } - if (l->empty()) error("argument `$list` of `" + string(sig) + "` must not be empty", path, position); - if (n->value() < 1) error("argument `$n` of `" + string(sig) + "` must be greater than or equal to 1", path, position); - return (*l)[std::floor(n->value() - 1)]; - } - - Signature index_sig = "index($list, $value)"; - BUILT_IN(index) - { - List* l = dynamic_cast<List*>(env["$list"]); - Expression* v = ARG("$value", Expression); - if (!l) { - l = new (ctx.mem) List(path, position, 1); - *l << ARG("$list", Expression); - } - for (size_t i = 0, L = l->length(); i < L; ++i) { - if (eq((*l)[i], v, ctx)) return new (ctx.mem) Number(path, position, i+1); - } - return new (ctx.mem) Boolean(path, position, false); - } - - Signature join_sig = "join($list1, $list2, $separator: auto)"; - BUILT_IN(join) - { - List* l1 = dynamic_cast<List*>(env["$list1"]); - List* l2 = dynamic_cast<List*>(env["$list2"]); - String_Constant* sep = ARG("$separator", String_Constant); - List::Separator sep_val = (l1 ? l1->separator() : List::SPACE); - if (!l1) { - l1 = new (ctx.mem) List(path, position, 1); - *l1 << ARG("$list1", Expression); - sep_val = (l2 ? l2->separator() : List::SPACE); - } - if (!l2) { - l2 = new (ctx.mem) List(path, position, 1); - *l2 << ARG("$list2", Expression); - } - size_t len = l1->length() + l2->length(); - string sep_str = unquote(sep->value()); - if (sep_str == "space") sep_val = List::SPACE; - else if (sep_str == "comma") sep_val = List::COMMA; - else if (sep_str != "auto") error("argument `$separator` of `" + string(sig) + "` must be `space`, `comma`, or `auto`", path, position); - List* result = new (ctx.mem) List(path, position, len, sep_val); - *result += l1; - *result += l2; - return result; - } - - Signature append_sig = "append($list, $val, $separator: auto)"; - BUILT_IN(append) - { - List* l = dynamic_cast<List*>(env["$list"]); - Expression* v = ARG("$val", Expression); - String_Constant* sep = ARG("$separator", String_Constant); - if (!l) { - l = new (ctx.mem) List(path, position, 1); - *l << ARG("$list", Expression); - } - List* result = new (ctx.mem) List(path, position, l->length() + 1); - string sep_str(unquote(sep->value())); - if (sep_str == "space") result->separator(List::SPACE); - else if (sep_str == "comma") result->separator(List::COMMA); - else if (sep_str != "auto") error("argument `$separator` of `" + string(sig) + "` must be `space`, `comma`, or `auto`", path, position); - *result += l; - *result << v; - return result; - } - - Signature zip_sig = "zip($lists...)"; - BUILT_IN(zip) - { - List* arglist = new (ctx.mem) List(*ARG("$lists", List)); - size_t shortest = 0; - for (size_t i = 0, L = arglist->length(); i < L; ++i) { - List* ith = dynamic_cast<List*>((*arglist)[i]); - if (!ith) { - ith = new (ctx.mem) List(path, position, 1); - *ith << (*arglist)[i]; - (*arglist)[i] = ith; - } - shortest = (i ? std::min(shortest, ith->length()) : ith->length()); - } - List* zippers = new (ctx.mem) List(path, position, shortest, List::COMMA); - size_t L = arglist->length(); - for (size_t i = 0; i < shortest; ++i) { - List* zipper = new (ctx.mem) List(path, position, L); - for (size_t j = 0; j < L; ++j) { - *zipper << (*static_cast<List*>((*arglist)[j]))[i]; - } - *zippers << zipper; - } - return zippers; - } - - Signature compact_sig = "compact($values...)"; - BUILT_IN(compact) - { - List* arglist = ARG("$values", List); - if (arglist->length() == 1) { - Expression* the_arg = (*arglist)[0]; - arglist = dynamic_cast<List*>(the_arg); - if (!arglist) { - List* result = new (ctx.mem) List(path, position, 1, List::COMMA); - *result << the_arg; - return result; - } - } - List* result = new (ctx.mem) List(path, position, 0, List::COMMA); - for (size_t i = 0, L = arglist->length(); i < L; ++i) { - Boolean* ith = dynamic_cast<Boolean*>((*arglist)[i]); - if (ith && ith->value() == false) continue; - *result << (*arglist)[i]; - } - return result; - } - - ////////////////////////// - // INTROSPECTION FUNCTIONS - ////////////////////////// - - Signature type_of_sig = "type-of($value)"; - BUILT_IN(type_of) - { - Expression* v = ARG("$value", Expression); - if (v->concrete_type() == Expression::STRING) { - To_String to_string; - string str(v->perform(&to_string)); - if (ctx.names_to_colors.count(str)) { - return new (ctx.mem) String_Constant(path, position, "color"); - } - } - return new (ctx.mem) String_Constant(path, position, ARG("$value", Expression)->type()); - } - - Signature unit_sig = "unit($number)"; - BUILT_IN(unit) - { return new (ctx.mem) String_Constant(path, position, quote(ARG("$number", Number)->unit(), '"')); } - - Signature unitless_sig = "unitless($number)"; - BUILT_IN(unitless) - { return new (ctx.mem) Boolean(path, position, ARG("$number", Number)->is_unitless()); } - - Signature comparable_sig = "comparable($number-1, $number-2)"; - BUILT_IN(comparable) - { - Number* n1 = ARG("$number-1", Number); - Number* n2 = ARG("$number-2", Number); - if (n1->is_unitless() || n2->is_unitless()) { - return new (ctx.mem) Boolean(path, position, true); - } - Number tmp_n2(*n2); - tmp_n2.normalize(n1->find_convertible_unit()); - return new (ctx.mem) Boolean(path, position, n1->unit() == tmp_n2.unit()); - } - - //////////////////// - // BOOLEAN FUNCTIONS - //////////////////// - - Signature not_sig = "not($value)"; - BUILT_IN(sass_not) - { return new (ctx.mem) Boolean(path, position, ARG("$value", Expression)->is_false()); } - - Signature if_sig = "if($condition, $if-true, $if-false)"; - BUILT_IN(sass_if) - { return ARG("$condition", Expression)->is_false() ? ARG("$if-false", Expression) : ARG("$if-true", Expression); } - - //////////////// - // URL FUNCTIONS - //////////////// - - Signature image_url_sig = "image-url($path, $only-path: false, $cache-buster: false)"; - BUILT_IN(image_url) - { - String_Constant* ipath = ARG("$path", String_Constant); - bool only_path = !ARG("$only-path", Expression)->is_false(); - string full_path(quote(ctx.image_path + "/" + unquote(ipath->value()), '"')); - if (!only_path) full_path = "url(" + full_path + ")"; - return new (ctx.mem) String_Constant(path, position, full_path); - } - - } -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/functions.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/functions.hpp deleted file mode 100644 index ecda3d98..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/functions.hpp +++ /dev/null @@ -1,141 +0,0 @@ -#define SASS_FUNCTIONS - -#ifndef SASS_ENVIRONMENT -#include "environment.hpp" -#endif - -#ifndef SASS -#include "sass.h" -#endif - -#include <string> - -#ifndef SASS_POSITION -#include "position.hpp" -#endif - -#define BUILT_IN(name) Expression*\ -name(Env& env, Context& ctx, Signature sig, const string& path, Position position, Backtrace* backtrace) - -namespace Sass { - struct Context; - struct Backtrace; - class AST_Node; - class Expression; - class Definition; - typedef Environment<AST_Node*> Env; - typedef const char* Signature; - typedef Expression* (*Native_Function)(Env&, Context&, Signature, const string&, Position, Backtrace*); - - Definition* make_native_function(Signature, Native_Function, Context&); - Definition* make_c_function(Signature sig, Sass_C_Function f, Context& ctx); - - namespace Functions { - - extern Signature rgb_sig; - extern Signature rgba_4_sig; - extern Signature rgba_2_sig; - extern Signature red_sig; - extern Signature green_sig; - extern Signature blue_sig; - extern Signature mix_sig; - extern Signature hsl_sig; - extern Signature hsla_sig; - extern Signature hue_sig; - extern Signature saturation_sig; - extern Signature lightness_sig; - extern Signature adjust_hue_sig; - extern Signature lighten_sig; - extern Signature darken_sig; - extern Signature saturate_sig; - extern Signature desaturate_sig; - extern Signature grayscale_sig; - extern Signature complement_sig; - extern Signature invert_sig; - extern Signature alpha_sig; - extern Signature opacity_sig; - extern Signature opacify_sig; - extern Signature fade_in_sig; - extern Signature transparentize_sig; - extern Signature fade_out_sig; - extern Signature adjust_color_sig; - extern Signature scale_color_sig; - extern Signature change_color_sig; - extern Signature ie_hex_str_sig; - extern Signature unquote_sig; - extern Signature quote_sig; - extern Signature percentage_sig; - extern Signature round_sig; - extern Signature ceil_sig; - extern Signature floor_sig; - extern Signature abs_sig; - extern Signature min_sig; - extern Signature max_sig; - extern Signature length_sig; - extern Signature nth_sig; - extern Signature index_sig; - extern Signature join_sig; - extern Signature append_sig; - extern Signature zip_sig; - extern Signature compact_sig; - extern Signature type_of_sig; - extern Signature unit_sig; - extern Signature unitless_sig; - extern Signature comparable_sig; - extern Signature not_sig; - extern Signature if_sig; - extern Signature image_url_sig; - - BUILT_IN(rgb); - BUILT_IN(rgba_4); - BUILT_IN(rgba_2); - BUILT_IN(red); - BUILT_IN(green); - BUILT_IN(blue); - BUILT_IN(mix); - BUILT_IN(hsl); - BUILT_IN(hsla); - BUILT_IN(hue); - BUILT_IN(saturation); - BUILT_IN(lightness); - BUILT_IN(adjust_hue); - BUILT_IN(lighten); - BUILT_IN(darken); - BUILT_IN(saturate); - BUILT_IN(desaturate); - BUILT_IN(grayscale); - BUILT_IN(complement); - BUILT_IN(invert); - BUILT_IN(alpha); - BUILT_IN(opacify); - BUILT_IN(transparentize); - BUILT_IN(adjust_color); - BUILT_IN(scale_color); - BUILT_IN(change_color); - BUILT_IN(ie_hex_str); - BUILT_IN(sass_unquote); - BUILT_IN(sass_quote); - BUILT_IN(percentage); - BUILT_IN(round); - BUILT_IN(ceil); - BUILT_IN(floor); - BUILT_IN(abs); - BUILT_IN(min); - BUILT_IN(max); - BUILT_IN(length); - BUILT_IN(nth); - BUILT_IN(index); - BUILT_IN(join); - BUILT_IN(append); - BUILT_IN(zip); - BUILT_IN(compact); - BUILT_IN(type_of); - BUILT_IN(unit); - BUILT_IN(unitless); - BUILT_IN(comparable); - BUILT_IN(sass_not); - BUILT_IN(sass_if); - BUILT_IN(image_url); - - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/inspect.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/inspect.cpp deleted file mode 100644 index 1e3834e9..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/inspect.cpp +++ /dev/null @@ -1,640 +0,0 @@ -#include "inspect.hpp" -#include "ast.hpp" -#include "context.hpp" -#include <cmath> -#include <iostream> -#include <iomanip> - -namespace Sass { - using namespace std; - - Inspect::Inspect(Context* ctx) : buffer(""), indentation(0), ctx(ctx) { } - Inspect::~Inspect() { } - - // statements - void Inspect::operator()(Block* block) - { - if (!block->is_root()) { - append_multiline_part_to_buffer(" {\n"); - ++indentation; - } - for (size_t i = 0, L = block->length(); i < L; ++i) { - indent(); - (*block)[i]->perform(this); - // extra newline at the end of top-level statements - if (block->is_root()) append_multiline_part_to_buffer("\n"); - append_multiline_part_to_buffer("\n"); - } - if (!block->is_root()) { - --indentation; - indent(); - append_singleline_part_to_buffer("}"); - } - // remove extra newline that gets added after the last top-level block - if (block->is_root()) { - size_t l = buffer.length(); - if (l > 2 && buffer[l-1] == '\n' && buffer[l-2] == '\n') { - buffer.erase(l-1); - if (ctx) ctx->source_map.remove_line(); - } - } - } - - void Inspect::operator()(Ruleset* ruleset) - { - ruleset->selector()->perform(this); - ruleset->block()->perform(this); - } - - void Inspect::operator()(Propset* propset) - { - propset->property_fragment()->perform(this); - append_singleline_part_to_buffer(": "); - propset->block()->perform(this); - } - - void Inspect::operator()(Media_Block* media_block) - { - if (ctx) ctx->source_map.add_mapping(media_block); - append_singleline_part_to_buffer("@media "); - media_block->media_queries()->perform(this); - media_block->block()->perform(this); - } - - void Inspect::operator()(At_Rule* at_rule) - { - append_singleline_part_to_buffer(at_rule->keyword()); - if (at_rule->selector()) { - append_singleline_part_to_buffer(" "); - at_rule->selector()->perform(this); - } - if (at_rule->block()) { - at_rule->block()->perform(this); - } - else { - append_singleline_part_to_buffer(";"); - } - } - - void Inspect::operator()(Declaration* dec) - { - if (ctx) ctx->source_map.add_mapping(dec->property()); - dec->property()->perform(this); - append_singleline_part_to_buffer(": "); - if (ctx) ctx->source_map.add_mapping(dec->value()); - dec->value()->perform(this); - if (dec->is_important()) append_singleline_part_to_buffer(" !important"); - append_singleline_part_to_buffer(";"); - } - - void Inspect::operator()(Assignment* assn) - { - append_singleline_part_to_buffer(assn->variable()); - append_singleline_part_to_buffer(": "); - assn->value()->perform(this); - if (assn->is_guarded()) append_singleline_part_to_buffer(" !default"); - append_singleline_part_to_buffer(";"); - } - - void Inspect::operator()(Import* import) - { - if (!import->urls().empty()) { - if (ctx) ctx->source_map.add_mapping(import); - append_singleline_part_to_buffer("@import "); - import->urls().front()->perform(this); - append_singleline_part_to_buffer(";"); - for (size_t i = 1, S = import->urls().size(); i < S; ++i) { - append_multiline_part_to_buffer("\n"); - if (ctx) ctx->source_map.add_mapping(import); - append_singleline_part_to_buffer("@import "); - import->urls()[i]->perform(this); - append_singleline_part_to_buffer(";"); - } - } - } - - void Inspect::operator()(Import_Stub* import) - { - if (ctx) ctx->source_map.add_mapping(import); - append_singleline_part_to_buffer("@import "); - append_singleline_part_to_buffer(import->file_name()); - append_singleline_part_to_buffer(";"); - } - - void Inspect::operator()(Warning* warning) - { - if (ctx) ctx->source_map.add_mapping(warning); - append_singleline_part_to_buffer("@warn "); - warning->message()->perform(this); - append_singleline_part_to_buffer(";"); - } - - void Inspect::operator()(Comment* comment) - { - comment->text()->perform(this); - } - - void Inspect::operator()(If* cond) - { - append_singleline_part_to_buffer("@if "); - cond->predicate()->perform(this); - cond->consequent()->perform(this); - if (cond->alternative()) { - append_multiline_part_to_buffer("\n"); - indent(); - append_singleline_part_to_buffer("else"); - cond->alternative()->perform(this); - } - } - - void Inspect::operator()(For* loop) - { - append_singleline_part_to_buffer("@for "); - append_singleline_part_to_buffer(loop->variable()); - append_singleline_part_to_buffer(" from "); - loop->lower_bound()->perform(this); - append_singleline_part_to_buffer((loop->is_inclusive() ? " through " : " to ")); - loop->upper_bound()->perform(this); - loop->block()->perform(this); - } - - void Inspect::operator()(Each* loop) - { - append_singleline_part_to_buffer("@each "); - append_singleline_part_to_buffer(loop->variable()); - append_singleline_part_to_buffer(" in "); - loop->list()->perform(this); - loop->block()->perform(this); - } - - void Inspect::operator()(While* loop) - { - append_singleline_part_to_buffer("@while "); - loop->predicate()->perform(this); - loop->block()->perform(this); - } - - void Inspect::operator()(Return* ret) - { - append_singleline_part_to_buffer("@return "); - ret->value()->perform(this); - append_singleline_part_to_buffer(";"); - } - - void Inspect::operator()(Extension* extend) - { - append_singleline_part_to_buffer("@extend "); - extend->selector()->perform(this); - append_singleline_part_to_buffer(";"); - } - - void Inspect::operator()(Definition* def) - { - if (def->type() == Definition::MIXIN) { - append_singleline_part_to_buffer("@mixin "); - } else { - append_singleline_part_to_buffer("@function "); - } - append_singleline_part_to_buffer(def->name()); - def->parameters()->perform(this); - def->block()->perform(this); - } - - void Inspect::operator()(Mixin_Call* call) - { - append_singleline_part_to_buffer(string("@include ") += call->name()); - if (call->arguments()) { - call->arguments()->perform(this); - } - if (call->block()) { - append_singleline_part_to_buffer(" "); - call->block()->perform(this); - } - if (!call->block()) append_singleline_part_to_buffer(";"); - } - - void Inspect::operator()(Content* content) - { - if (ctx) ctx->source_map.add_mapping(content); - append_singleline_part_to_buffer("@content;"); - } - - void Inspect::operator()(List* list) - { - string sep(list->separator() == List::SPACE ? " " : ", "); - if (list->empty()) return; - bool items_output = false; - for (size_t i = 0, L = list->length(); i < L; ++i) { - Expression* list_item = (*list)[i]; - if (list_item->is_invisible()) { - continue; - } - if (items_output) append_singleline_part_to_buffer(sep); - list_item->perform(this); - items_output = true; - } - } - - void Inspect::operator()(Binary_Expression* expr) - { - expr->left()->perform(this); - switch (expr->type()) { - case Binary_Expression::AND: append_singleline_part_to_buffer(" and "); break; - case Binary_Expression::OR: append_singleline_part_to_buffer(" or "); break; - case Binary_Expression::EQ: append_singleline_part_to_buffer(" == "); break; - case Binary_Expression::NEQ: append_singleline_part_to_buffer(" != "); break; - case Binary_Expression::GT: append_singleline_part_to_buffer(" > "); break; - case Binary_Expression::GTE: append_singleline_part_to_buffer(" >= "); break; - case Binary_Expression::LT: append_singleline_part_to_buffer(" < "); break; - case Binary_Expression::LTE: append_singleline_part_to_buffer(" <= "); break; - case Binary_Expression::ADD: append_singleline_part_to_buffer(" + "); break; - case Binary_Expression::SUB: append_singleline_part_to_buffer(" - "); break; - case Binary_Expression::MUL: append_singleline_part_to_buffer(" * "); break; - case Binary_Expression::DIV: append_singleline_part_to_buffer("/"); break; - case Binary_Expression::MOD: append_singleline_part_to_buffer(" % "); break; - default: break; // shouldn't get here - } - expr->right()->perform(this); - } - - void Inspect::operator()(Unary_Expression* expr) - { - if (expr->type() == Unary_Expression::PLUS) append_singleline_part_to_buffer("+"); - else append_singleline_part_to_buffer("-"); - expr->operand()->perform(this); - } - - void Inspect::operator()(Function_Call* call) - { - append_singleline_part_to_buffer(call->name()); - call->arguments()->perform(this); - } - - void Inspect::operator()(Function_Call_Schema* call) - { - call->name()->perform(this); - call->arguments()->perform(this); - } - - void Inspect::operator()(Variable* var) - { - append_singleline_part_to_buffer(var->name()); - } - - void Inspect::operator()(Textual* txt) - { - append_singleline_part_to_buffer(txt->value()); - } - - // helper functions for serializing numbers - string frac_to_string(double f, size_t p) { - stringstream ss; - ss.setf(ios::fixed, ios::floatfield); - ss.precision(p); - ss << f; - string result(ss.str().substr(f < 0 ? 2 : 1)); - size_t i = result.size() - 1; - while (result[i] == '0') --i; - result = result.substr(0, i+1); - return result; - } - string double_to_string(double d, size_t p) { - stringstream ss; - double ipart; - double fpart = std::modf(d, &ipart); - ss << ipart; - if (fpart != 0) ss << frac_to_string(fpart, 5); - return ss.str(); - } - - void Inspect::operator()(Number* n) - { - stringstream ss; - ss.precision(5); - ss << fixed << n->value(); - string d(ss.str()); - for (size_t i = d.length()-1; d[i] == '0'; --i) { - d.resize(d.length()-1); - } - if (d[d.length()-1] == '.') d.resize(d.length()-1); - if (n->numerator_units().size() > 1 || n->denominator_units().size() > 0) { - error(d + n->unit() + " is not a valid CSS value", n->path(), n->position()); - } - append_singleline_part_to_buffer(d); - append_singleline_part_to_buffer(n->unit()); - } - - // helper function for serializing colors - template <size_t range> - static double cap_channel(double c) { - if (c > range) return range; - else if (c < 0) return 0; - else return c; - } - - void Inspect::operator()(Color* c) - { - stringstream ss; - double r = cap_channel<0xff>(c->r()); - double g = cap_channel<0xff>(c->g()); - double b = cap_channel<0xff>(c->b()); - double a = cap_channel<1> (c->a()); - - // if (a >= 1 && ctx.colors_to_names.count(numval)) { - // ss << ctx.colors_to_names[numval]; - // } - // else - - // retain the originally specified color definition if unchanged - if (!c->disp().empty()) { - ss << c->disp(); - } - else if (a >= 1) { - // see if it's a named color - int numval = r * 0x10000; - numval += g * 0x100; - numval += b; - if (ctx && ctx->colors_to_names.count(numval)) { - ss << ctx->colors_to_names[numval]; - } - else { - // otherwise output the hex triplet - ss << '#' << setw(2) << setfill('0'); - ss << hex << setw(2) << static_cast<unsigned long>(floor(r+0.5)); - ss << hex << setw(2) << static_cast<unsigned long>(floor(g+0.5)); - ss << hex << setw(2) << static_cast<unsigned long>(floor(b+0.5)); - } - } - else { - ss << "rgba("; - ss << static_cast<unsigned long>(r) << ", "; - ss << static_cast<unsigned long>(g) << ", "; - ss << static_cast<unsigned long>(b) << ", "; - ss << a << ')'; - } - append_singleline_part_to_buffer(ss.str()); - } - - void Inspect::operator()(Boolean* b) - { - append_singleline_part_to_buffer(b->value() ? "true" : "false"); - } - - void Inspect::operator()(String_Schema* ss) - { - // Evaluation should turn these into String_Constants, so this method is - // only for inspection purposes. - for (size_t i = 0, L = ss->length(); i < L; ++i) { - if ((*ss)[i]->is_interpolant()) append_singleline_part_to_buffer("#{"); - (*ss)[i]->perform(this); - if ((*ss)[i]->is_interpolant()) append_singleline_part_to_buffer("}"); - } - } - - void Inspect::operator()(String_Constant* s) - { - append_singleline_part_to_buffer(s->needs_unquoting() ? unquote(s->value()) : s->value()); - } - - void Inspect::operator()(Media_Query* mq) - { - size_t i = 0; - if (mq->media_type()) { - if (mq->is_negated()) append_singleline_part_to_buffer("not "); - else if (mq->is_restricted()) append_singleline_part_to_buffer("only "); - mq->media_type()->perform(this); - } - else { - (*mq)[i++]->perform(this); - } - for (size_t L = mq->length(); i < L; ++i) { - append_singleline_part_to_buffer(" and "); - (*mq)[i]->perform(this); - } - } - - void Inspect::operator()(Media_Query_Expression* mqe) - { - if (mqe->is_interpolated()) { - mqe->feature()->perform(this); - } - else { - append_singleline_part_to_buffer("("); - mqe->feature()->perform(this); - if (mqe->value()) { - append_singleline_part_to_buffer(": "); - mqe->value()->perform(this); - } - append_singleline_part_to_buffer(")"); - } - } - - void Inspect::operator()(Null* n) - { - append_singleline_part_to_buffer("null"); - } - - // parameters and arguments - void Inspect::operator()(Parameter* p) - { - append_singleline_part_to_buffer(p->name()); - if (p->default_value()) { - append_singleline_part_to_buffer(": "); - p->default_value()->perform(this); - } - else if (p->is_rest_parameter()) { - append_singleline_part_to_buffer("..."); - } - } - - void Inspect::operator()(Parameters* p) - { - append_singleline_part_to_buffer("("); - if (!p->empty()) { - (*p)[0]->perform(this); - for (size_t i = 1, L = p->length(); i < L; ++i) { - append_singleline_part_to_buffer(", "); - (*p)[i]->perform(this); - } - } - append_singleline_part_to_buffer(")"); - } - - void Inspect::operator()(Argument* a) - { - if (!a->name().empty()) { - append_singleline_part_to_buffer(a->name()); - append_singleline_part_to_buffer(": "); - } - // Special case: argument nulls can be ignored - if (a->value()->concrete_type() == Expression::NULL_VAL) { - return; - } - a->value()->perform(this); - if (a->is_rest_argument()) { - append_singleline_part_to_buffer("..."); - } - } - - void Inspect::operator()(Arguments* a) - { - append_singleline_part_to_buffer("("); - if (!a->empty()) { - (*a)[0]->perform(this); - for (size_t i = 1, L = a->length(); i < L; ++i) { - append_singleline_part_to_buffer(", "); - (*a)[i]->perform(this); - } - } - append_singleline_part_to_buffer(")"); - } - - // selectors - void Inspect::operator()(Selector_Schema* s) - { - s->contents()->perform(this); - } - - void Inspect::operator()(Selector_Reference* ref) - { - if (ref->selector()) ref->selector()->perform(this); - else append_singleline_part_to_buffer("&"); - } - - void Inspect::operator()(Selector_Placeholder* s) - { - append_singleline_part_to_buffer(s->name()); - } - - void Inspect::operator()(Type_Selector* s) - { - if (ctx) ctx->source_map.add_mapping(s); - append_singleline_part_to_buffer(s->name()); - } - - void Inspect::operator()(Selector_Qualifier* s) - { - if (ctx) ctx->source_map.add_mapping(s); - append_singleline_part_to_buffer(s->name()); - } - - void Inspect::operator()(Attribute_Selector* s) - { - if (ctx) ctx->source_map.add_mapping(s); - append_singleline_part_to_buffer("["); - append_singleline_part_to_buffer(s->name()); - if (!s->matcher().empty()) { - append_singleline_part_to_buffer(s->matcher()); - append_singleline_part_to_buffer(s->value()); - } - append_singleline_part_to_buffer("]"); - } - - void Inspect::operator()(Pseudo_Selector* s) - { - if (ctx) ctx->source_map.add_mapping(s); - append_singleline_part_to_buffer(s->name()); - if (s->expression()) { - s->expression()->perform(this); - append_singleline_part_to_buffer(")"); - } - } - - void Inspect::operator()(Negated_Selector* s) - { - if (ctx) ctx->source_map.add_mapping(s); - append_singleline_part_to_buffer(":not("); - s->selector()->perform(this); - append_singleline_part_to_buffer(")"); - } - - void Inspect::operator()(Compound_Selector* s) - { - for (size_t i = 0, L = s->length(); i < L; ++i) { - (*s)[i]->perform(this); - } - } - - void Inspect::operator()(Complex_Selector* c) - { - Compound_Selector* head = c->head(); - Complex_Selector* tail = c->tail(); - Complex_Selector::Combinator comb = c->combinator(); - if (head) head->perform(this); - if (head && tail) append_singleline_part_to_buffer(" "); - switch (comb) { - case Complex_Selector::ANCESTOR_OF: break; - case Complex_Selector::PARENT_OF: append_singleline_part_to_buffer(">"); break; - case Complex_Selector::PRECEDES: append_singleline_part_to_buffer("~"); break; - case Complex_Selector::ADJACENT_TO: append_singleline_part_to_buffer("+"); break; - } - if (tail && comb != Complex_Selector::ANCESTOR_OF) { - append_singleline_part_to_buffer(" "); - } - if (tail) tail->perform(this); - } - - void Inspect::operator()(Selector_List* g) - { - if (g->empty()) return; - (*g)[0]->perform(this); - for (size_t i = 1, L = g->length(); i < L; ++i) { - append_singleline_part_to_buffer(", "); - (*g)[i]->perform(this); - } - } - - inline void Inspect::fallback_impl(AST_Node* n) - { } - - void Inspect::indent() - { append_singleline_part_to_buffer(string(2*indentation, ' ')); } - - string unquote(const string& s) - { - if (s.empty()) return ""; - if (s.length() == 1) { - if (s[0] == '"' || s[0] == '\'') return ""; - } - char q; - if (*s.begin() == '"' && *s.rbegin() == '"') q = '"'; - else if (*s.begin() == '\'' && *s.rbegin() == '\'') q = '\''; - else return s; - string t; - t.reserve(s.length()-2); - for (size_t i = 1, L = s.length()-1; i < L; ++i) { - // if we see a quote, we need to remove the preceding backslash from t - if (s[i] == q) t.erase(t.length()-1); - t.push_back(s[i]); - } - return t; - } - - string quote(const string& s, char q) - { - if (s.empty()) return string(2, q); - if (!q || s[0] == '"' || s[0] == '\'') return s; - string t; - t.reserve(s.length()+2); - t.push_back(q); - for (size_t i = 0, L = s.length(); i < L; ++i) { - if (s[i] == q) t.push_back('\\'); - t.push_back(s[i]); - } - t.push_back(q); - return t; - } - - void Inspect::append_singleline_part_to_buffer(const string& text) - { - buffer += text; - if (ctx) ctx->source_map.update_column(text); - } - - void Inspect::append_multiline_part_to_buffer(const string& text) - { - buffer += text; - if (ctx) ctx->source_map.new_line(); - } - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/inspect.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/inspect.hpp deleted file mode 100644 index e2250788..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/inspect.hpp +++ /dev/null @@ -1,99 +0,0 @@ -#include <string> - -#ifndef SASS_OPERATION -#include "operation.hpp" -#endif - -// #ifndef SASS_TO_STRING -// #include "to_string.hpp" -// #endif - -namespace Sass { - using namespace std; - struct Context; - - class Inspect : public Operation_CRTP<void, Inspect> { - // import all the class-specific methods and override as desired - using Operation_CRTP<void, Inspect>::operator(); - - // To_String* to_string; - string buffer; - size_t indentation; - Context* ctx; - void indent(); - - void fallback_impl(AST_Node* n); - - void append_singleline_part_to_buffer(const string& text); - void append_multiline_part_to_buffer(const string& text); - - public: - - Inspect(Context* ctx = 0); - virtual ~Inspect(); - - string get_buffer() { return buffer; } - - // statements - virtual void operator()(Block*); - virtual void operator()(Ruleset*); - virtual void operator()(Propset*); - virtual void operator()(Media_Block*); - virtual void operator()(At_Rule*); - virtual void operator()(Declaration*); - virtual void operator()(Assignment*); - virtual void operator()(Import*); - virtual void operator()(Import_Stub*); - virtual void operator()(Warning*); - virtual void operator()(Comment*); - virtual void operator()(If*); - virtual void operator()(For*); - virtual void operator()(Each*); - virtual void operator()(While*); - virtual void operator()(Return*); - virtual void operator()(Extension*); - virtual void operator()(Definition*); - virtual void operator()(Mixin_Call*); - virtual void operator()(Content*); - // expressions - virtual void operator()(List*); - virtual void operator()(Binary_Expression*); - virtual void operator()(Unary_Expression*); - virtual void operator()(Function_Call*); - virtual void operator()(Function_Call_Schema*); - virtual void operator()(Variable*); - virtual void operator()(Textual*); - virtual void operator()(Number*); - virtual void operator()(Color*); - virtual void operator()(Boolean*); - virtual void operator()(String_Schema*); - virtual void operator()(String_Constant*); - virtual void operator()(Media_Query*); - virtual void operator()(Media_Query_Expression*); - virtual void operator()(Null*); - // parameters and arguments - virtual void operator()(Parameter*); - virtual void operator()(Parameters*); - virtual void operator()(Argument*); - virtual void operator()(Arguments*); - // selectors - virtual void operator()(Selector_Schema*); - virtual void operator()(Selector_Reference*); - virtual void operator()(Selector_Placeholder*); - virtual void operator()(Type_Selector*); - virtual void operator()(Selector_Qualifier*); - virtual void operator()(Attribute_Selector*); - virtual void operator()(Pseudo_Selector*); - virtual void operator()(Negated_Selector*); - virtual void operator()(Compound_Selector*); - virtual void operator()(Complex_Selector*); - virtual void operator()(Selector_List*); - - template <typename U> - void fallback(U x) { fallback_impl(x); } - }; - - string unquote(const string&); - string quote(const string&, char); - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/kwd_arg_macros.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/kwd_arg_macros.hpp deleted file mode 100644 index 2b9a13ae..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/kwd_arg_macros.hpp +++ /dev/null @@ -1,23 +0,0 @@ -// Intended usage: -// KWD_ARG_SET(Args) { -// KWD_ARG(Args, string, foo); -// KWD_ARG(Args, int, bar); -// ... -// }; -// -// ... and later ... -// -// something(Args().foo("hey").bar(3)); - -#define KWD_ARG_SET(set_name) class set_name - -#define KWD_ARG(set_name, type, name) \ -private: \ - type name##_; \ -public: \ - set_name& name(type name##__) { \ - name##_ = name##__; \ - return *this; \ - } \ - type name() { return name##_; } \ -private: diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/m4/.gitkeep b/node_modules/gulp-sass/node_modules/node-sass/libsass/m4/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/mapping.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/mapping.hpp deleted file mode 100644 index fc20436f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/mapping.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#define SASS_MAPPING - -#ifndef SASS_POSITION -#include "position.hpp" -#endif - -namespace Sass { - - struct Mapping { - Position original_position; - Position generated_position; - - Mapping(const Position& original_position, const Position& generated_position) - : original_position(original_position), generated_position(generated_position) { } - }; - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/memory_manager.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/memory_manager.hpp deleted file mode 100644 index d2e5f7d3..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/memory_manager.hpp +++ /dev/null @@ -1,54 +0,0 @@ -#define SASS_MEMORY_MANAGER - -#include <vector> -#include <iostream> -using namespace std; - -namespace Sass { - ///////////////////////////////////////////////////////////////////////////// - // A class for tracking allocations of AST_Node objects. The intended usage - // is something like: Some_Node* n = new (mem_mgr) Some_Node(...); - // Then, at the end of the program, the memory manager will delete all of the - // allocated nodes that have been passed to it. - // In the future, this class may implement a custom allocator. - ///////////////////////////////////////////////////////////////////////////// - template <typename T> - class Memory_Manager { - vector<T*> nodes; - - public: - Memory_Manager(size_t size = 0) : nodes(vector<T*>()) - { nodes.reserve(size); } - - ~Memory_Manager() - { - for (size_t i = 0, S = nodes.size(); i < S; ++i) { - // cout << "deleting " << typeid(*nodes[i]).name() << endl; - delete nodes[i]; - } - } - - T* operator()(T* np) - { - nodes.push_back(np); - // cout << "registering " << typeid(*np).name() << endl; - return np; - } - - void remove(T* np) - { - nodes.erase(find(nodes.begin(), nodes.end(), np)); - } - }; -} - -template <typename T> -inline void* operator new(size_t size, Sass::Memory_Manager<T>& mem_mgr) -{ return mem_mgr(static_cast<T*>(operator new(size))); } - -template <typename T> -inline void operator delete(void *np, Sass::Memory_Manager<T>& mem_mgr) -{ - mem_mgr.remove(reinterpret_cast<T*>(np)); - operator delete(np); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/operation.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/operation.hpp deleted file mode 100644 index b5ebfc91..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/operation.hpp +++ /dev/null @@ -1,141 +0,0 @@ -#define SASS_OPERATION - -#include "ast_fwd_decl.hpp" - -#include <iostream> -using namespace std; -#include <typeinfo> - -namespace Sass { - - template<typename T> - class Operation { - public: - virtual T operator()(AST_Node* x) = 0; - virtual ~Operation() { } - // statements - virtual T operator()(Block* x) = 0; - virtual T operator()(Ruleset* x) = 0; - virtual T operator()(Propset* x) = 0; - virtual T operator()(Media_Block* x) = 0; - virtual T operator()(At_Rule* x) = 0; - virtual T operator()(Declaration* x) = 0; - virtual T operator()(Assignment* x) = 0; - virtual T operator()(Import* x) = 0; - virtual T operator()(Import_Stub* x) = 0; - virtual T operator()(Warning* x) = 0; - virtual T operator()(Comment* x) = 0; - virtual T operator()(If* x) = 0; - virtual T operator()(For* x) = 0; - virtual T operator()(Each* x) = 0; - virtual T operator()(While* x) = 0; - virtual T operator()(Return* x) = 0; - virtual T operator()(Content* x) = 0; - virtual T operator()(Extension* x) = 0; - virtual T operator()(Definition* x) = 0; - virtual T operator()(Mixin_Call* x) = 0; - // expressions - virtual T operator()(List* x) = 0; - virtual T operator()(Binary_Expression* x) = 0; - virtual T operator()(Unary_Expression* x) = 0; - virtual T operator()(Function_Call* x) = 0; - virtual T operator()(Function_Call_Schema* x) = 0; - virtual T operator()(Variable* x) = 0; - virtual T operator()(Textual* x) = 0; - virtual T operator()(Number* x) = 0; - virtual T operator()(Color* x) = 0; - virtual T operator()(Boolean* x) = 0; - virtual T operator()(String_Schema* x) = 0; - virtual T operator()(String_Constant* x) = 0; - virtual T operator()(Media_Query* x) = 0; - virtual T operator()(Media_Query_Expression* x) = 0; - virtual T operator()(Null* x) = 0; - // parameters and arguments - virtual T operator()(Parameter* x) = 0; - virtual T operator()(Parameters* x) = 0; - virtual T operator()(Argument* x) = 0; - virtual T operator()(Arguments* x) = 0; - // selectors - virtual T operator()(Selector_Schema* x) = 0; - virtual T operator()(Selector_Reference* x) = 0; - virtual T operator()(Selector_Placeholder* x) = 0; - virtual T operator()(Type_Selector* x) = 0; - virtual T operator()(Selector_Qualifier* x) = 0; - virtual T operator()(Attribute_Selector* x) = 0; - virtual T operator()(Pseudo_Selector* x) = 0; - virtual T operator()(Negated_Selector* x) = 0; - virtual T operator()(Compound_Selector* x) = 0; - virtual T operator()(Complex_Selector* x) = 0; - virtual T operator()(Selector_List* x) = 0; - - template <typename U> - T fallback(U x) { return T(); } - }; - - template <typename T, typename D> - class Operation_CRTP : public Operation<T> { - public: - virtual T operator()(AST_Node* x) { return static_cast<D*>(this)->fallback(x); } - virtual ~Operation_CRTP() = 0; - // statements - virtual T operator()(Block* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Ruleset* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Propset* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Media_Block* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(At_Rule* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Declaration* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Assignment* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Import* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Import_Stub* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Warning* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Comment* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(If* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(For* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Each* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(While* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Return* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Content* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Extension* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Definition* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Mixin_Call* x) { return static_cast<D*>(this)->fallback(x); } - // expressions - virtual T operator()(List* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Binary_Expression* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Unary_Expression* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Function_Call* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Function_Call_Schema* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Variable* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Textual* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Number* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Color* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Boolean* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(String_Schema* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(String_Constant* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Media_Query* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Media_Query_Expression* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Null* x) { return static_cast<D*>(this)->fallback(x); } - // parameters and arguments - virtual T operator()(Parameter* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Parameters* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Argument* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Arguments* x) { return static_cast<D*>(this)->fallback(x); } - // selectors - virtual T operator()(Selector_Schema* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Selector_Reference* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Selector_Placeholder* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Type_Selector* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Selector_Qualifier* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Attribute_Selector* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Pseudo_Selector* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Negated_Selector* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Compound_Selector* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Complex_Selector* x) { return static_cast<D*>(this)->fallback(x); } - virtual T operator()(Selector_List* x) { return static_cast<D*>(this)->fallback(x); } - - template <typename U> - T fallback(U x) { return T(); } - }; - template<typename T, typename D> - inline Operation_CRTP<T, D>::~Operation_CRTP() { } - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/output_compressed.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/output_compressed.cpp deleted file mode 100644 index e8042cb0..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/output_compressed.cpp +++ /dev/null @@ -1,249 +0,0 @@ -#include "output_compressed.hpp" -#include "inspect.hpp" -#include "ast.hpp" -#include "context.hpp" - -namespace Sass { - using namespace std; - - Output_Compressed::Output_Compressed(Context* ctx) : buffer(""), ctx(ctx) { } - Output_Compressed::~Output_Compressed() { } - - inline void Output_Compressed::fallback_impl(AST_Node* n) - { - Inspect i(ctx); - n->perform(&i); - buffer += i.get_buffer(); - } - - void Output_Compressed::operator()(Block* b) - { - if (!b->is_root()) return; - for (size_t i = 0, L = b->length(); i < L; ++i) { - (*b)[i]->perform(this); - } - } - - void Output_Compressed::operator()(Ruleset* r) - { - Selector* s = r->selector(); - Block* b = r->block(); - - if (s->has_placeholder()) return; - - if (b->has_non_hoistable()) { - s->perform(this); - append_singleline_part_to_buffer("{"); - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (!stm->is_hoistable()) { - stm->perform(this); - } - } - append_singleline_part_to_buffer("}"); - } - - if (b->has_hoistable()) { - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (stm->is_hoistable()) { - stm->perform(this); - } - } - } - } - - void Output_Compressed::operator()(Media_Block* m) - { - List* q = m->media_queries(); - Block* b = m->block(); - - ctx->source_map.add_mapping(m); - append_singleline_part_to_buffer("@media "); - q->perform(this); - append_singleline_part_to_buffer("{"); - - Selector* e = m->enclosing_selector(); - bool hoisted = false; - if (e && b->has_non_hoistable()) { - hoisted = true; - e->perform(this); - append_singleline_part_to_buffer("{"); - } - - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (!stm->is_hoistable()) { - stm->perform(this); - } - } - - if (hoisted) { - append_singleline_part_to_buffer("}"); - } - - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (stm->is_hoistable()) { - stm->perform(this); - } - } - - append_singleline_part_to_buffer("}"); - } - - void Output_Compressed::operator()(At_Rule* a) - { - string kwd = a->keyword(); - Selector* s = a->selector(); - Block* b = a->block(); - - append_singleline_part_to_buffer(kwd); - if (s) { - append_singleline_part_to_buffer(" "); - s->perform(this); - } - - if (!b) { - append_singleline_part_to_buffer(";"); - return; - } - - append_singleline_part_to_buffer("{"); - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (!stm->is_hoistable()) { - stm->perform(this); - } - } - - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (stm->is_hoistable()) { - stm->perform(this); - } - } - - append_singleline_part_to_buffer("}"); - } - - void Output_Compressed::operator()(Declaration* d) - { - bool bPrintExpression = true; - // Check print conditions - if (d->value()->concrete_type() == Expression::NULL_VAL) { - bPrintExpression = false; - } - if (d->value()->concrete_type() == Expression::STRING) { - String_Constant* valConst = static_cast<String_Constant*>(d->value()); - string val(valConst->value()); - if (val.empty()) { - bPrintExpression = false; - } - } - // Print if OK - if(bPrintExpression) { - if (ctx) ctx->source_map.add_mapping(d->property()); - d->property()->perform(this); - append_singleline_part_to_buffer(":"); - if (ctx) ctx->source_map.add_mapping(d->value()); - d->value()->perform(this); - if (d->is_important()) append_singleline_part_to_buffer("!important"); - append_singleline_part_to_buffer(";"); - } - } - - void Output_Compressed::operator()(Comment* c) - { - return; - } - - void Output_Compressed::operator()(List* list) - { - string sep(list->separator() == List::SPACE ? " " : ","); - if (list->empty()) return; - Expression* first = (*list)[0]; - bool first_invisible = first->is_invisible(); - if (!first_invisible) first->perform(this); - for (size_t i = 1, L = list->length(); i < L; ++i) { - Expression* next = (*list)[i]; - bool next_invisible = next->is_invisible(); - if (i == 1 && !first_invisible && !next_invisible) append_singleline_part_to_buffer(sep); - else if (!next_invisible) append_singleline_part_to_buffer(sep); - next->perform(this); - } - } - - void Output_Compressed::operator()(Media_Query_Expression* mqe) - { - if (mqe->is_interpolated()) { - mqe->feature()->perform(this); - } - else { - append_singleline_part_to_buffer("("); - mqe->feature()->perform(this); - if (mqe->value()) { - append_singleline_part_to_buffer(":"); - mqe->value()->perform(this); - } - append_singleline_part_to_buffer(")"); - } - } - - void Output_Compressed::operator()(Argument* a) - { - if (!a->name().empty()) { - append_singleline_part_to_buffer(a->name()); - append_singleline_part_to_buffer(":"); - } - a->value()->perform(this); - if (a->is_rest_argument()) { - append_singleline_part_to_buffer("..."); - } - } - - void Output_Compressed::operator()(Arguments* a) - { - append_singleline_part_to_buffer("("); - if (!a->empty()) { - (*a)[0]->perform(this); - for (size_t i = 1, L = a->length(); i < L; ++i) { - append_singleline_part_to_buffer(","); - (*a)[i]->perform(this); - } - } - append_singleline_part_to_buffer(")"); - } - - void Output_Compressed::operator()(Complex_Selector* c) - { - Compound_Selector* head = c->head(); - Complex_Selector* tail = c->tail(); - Complex_Selector::Combinator comb = c->combinator(); - if (head) head->perform(this); - switch (comb) { - case Complex_Selector::ANCESTOR_OF: append_singleline_part_to_buffer(" "); break; - case Complex_Selector::PARENT_OF: append_singleline_part_to_buffer(">"); break; - case Complex_Selector::PRECEDES: append_singleline_part_to_buffer("~"); break; - case Complex_Selector::ADJACENT_TO: append_singleline_part_to_buffer("+"); break; - } - if (tail) tail->perform(this); - } - - void Output_Compressed::operator()(Selector_List* g) - { - if (g->empty()) return; - (*g)[0]->perform(this); - for (size_t i = 1, L = g->length(); i < L; ++i) { - append_singleline_part_to_buffer(","); - (*g)[i]->perform(this); - } - } - - void Output_Compressed::append_singleline_part_to_buffer(const string& text) - { - buffer += text; - if (ctx) ctx->source_map.update_column(text); - } - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/output_compressed.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/output_compressed.hpp deleted file mode 100644 index e7d7d31c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/output_compressed.hpp +++ /dev/null @@ -1,87 +0,0 @@ -#include <string> - -#ifndef SASS_OPERATION -#include "operation.hpp" -#endif - -namespace Sass { - using namespace std; - - struct Context; - - class Output_Compressed : public Operation_CRTP<void, Output_Compressed> { - // import all the class-specific methods and override as desired - using Operation_CRTP<void, Output_Compressed>::operator(); - - string buffer; - Context* ctx; - - void fallback_impl(AST_Node* n); - - void append_singleline_part_to_buffer(const string& text); - - public: - Output_Compressed(Context* ctx = 0); - virtual ~Output_Compressed(); - - string get_buffer() { return buffer; } - - // statements - virtual void operator()(Block*); - virtual void operator()(Ruleset*); - // virtual void operator()(Propset*); - virtual void operator()(Media_Block*); - virtual void operator()(At_Rule*); - virtual void operator()(Declaration*); - // virtual void operator()(Assignment*); - // virtual void operator()(Import*); - // virtual void operator()(Import_Stub*); - // virtual void operator()(Warning*); - virtual void operator()(Comment*); - // virtual void operator()(If*); - // virtual void operator()(For*); - // virtual void operator()(Each*); - // virtual void operator()(While*); - // virtual void operator()(Return*); - // virtual void operator()(Extension*); - // virtual void operator()(Definition*); - // virtual void operator()(Mixin_Call*); - // virtual void operator()(Content*); - // // expressions - virtual void operator()(List*); - // virtual void operator()(Binary_Expression*); - // virtual void operator()(Unary_Expression*); - // virtual void operator()(Function_Call*); - // virtual void operator()(Function_Call_Schema*); - // virtual void operator()(Variable*); - // virtual void operator()(Textual*); - // virtual void operator()(Number*); - // virtual void operator()(Color*); - // virtual void operator()(Boolean*); - // virtual void operator()(String_Schema*); - // virtual void operator()(String_Constant* x); - // virtual void operator()(Media_Query*); - virtual void operator()(Media_Query_Expression*); - // // parameters and arguments - // virtual void operator()(Parameter*); - // virtual void operator()(Parameters*); - virtual void operator()(Argument*); - virtual void operator()(Arguments*); - // // selectors - // virtual void operator()(Selector_Schema*); - // virtual void operator()(Selector_Reference*); - // virtual void operator()(Selector_Placeholder*); - // virtual void operator()(Type_Selector*); - // virtual void operator()(Selector_Qualifier*); - // virtual void operator()(Attribute_Selector*); - // virtual void operator()(Pseudo_Selector*); - // virtual void operator()(Negated_Selector*); - // virtual void operator()(Compound_Selector*); - virtual void operator()(Complex_Selector*); - virtual void operator()(Selector_List*); - - template <typename U> - void fallback(U x) { fallback_impl(x); } - }; - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/output_nested.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/output_nested.cpp deleted file mode 100644 index 9f0eb5b9..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/output_nested.cpp +++ /dev/null @@ -1,225 +0,0 @@ -#include "output_nested.hpp" -#include "inspect.hpp" -#include "ast.hpp" -#include "context.hpp" -#include <iostream> -#include <sstream> -#include <typeinfo> - -namespace Sass { - using namespace std; - - Output_Nested::Output_Nested(bool source_comments, Context* ctx) - : buffer(""), indentation(0), source_comments(source_comments), ctx(ctx) - { } - Output_Nested::~Output_Nested() { } - - inline void Output_Nested::fallback_impl(AST_Node* n) - { - Inspect i(ctx); - n->perform(&i); - buffer += i.get_buffer(); - } - - void Output_Nested::operator()(Block* b) - { - if (!b->is_root()) return; - for (size_t i = 0, L = b->length(); i < L; ++i) { - (*b)[i]->perform(this); - if (i < L-1) append_multiline_part_to_buffer("\n"); - } - } - - void Output_Nested::operator()(Ruleset* r) - { - Selector* s = r->selector(); - Block* b = r->block(); - bool decls = false; - - if (s->has_placeholder()) return; - - if (b->has_non_hoistable()) { - decls = true; - indent(); - if (source_comments) { - stringstream ss; - ss << "/* line " << r->position().line << ", " << r->path() << " */" << endl; - append_singleline_part_to_buffer(ss.str()); - indent(); - } - s->perform(this); - append_multiline_part_to_buffer(" {\n"); - ++indentation; - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - bool bPrintExpression = true; - // Check print conditions - if (typeid(*stm) == typeid(Declaration)) { - Declaration* dec = static_cast<Declaration*>(stm); - if (dec->value()->concrete_type() == Expression::STRING) { - String_Constant* valConst = static_cast<String_Constant*>(dec->value()); - string val(valConst->value()); - if (val.empty()) { - bPrintExpression = false; - } - } - else if (dec->value()->concrete_type() == Expression::LIST) { - List* list = static_cast<List*>(dec->value()); - bool all_invisible = true; - for (size_t list_i = 0, list_L = list->length(); list_i < list_L; ++list_i) { - Expression* item = (*list)[list_i]; - if (!item->is_invisible()) all_invisible = false; - } - if (all_invisible) bPrintExpression = false; - } - } - // Print if OK - if (!stm->is_hoistable() && bPrintExpression) { - if (!stm->block()) indent(); - stm->perform(this); - append_multiline_part_to_buffer("\n"); - } - } - --indentation; - buffer.erase(buffer.length()-1); - if (ctx) ctx->source_map.remove_line(); - append_multiline_part_to_buffer(" }\n"); - } - - if (b->has_hoistable()) { - if (decls) ++indentation; - // indent(); - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (stm->is_hoistable()) { - stm->perform(this); - } - } - if (decls) --indentation; - } - } - - void Output_Nested::operator()(Media_Block* m) - { - List* q = m->media_queries(); - Block* b = m->block(); - bool decls = false; - - indent(); - ctx->source_map.add_mapping(m); - append_singleline_part_to_buffer("@media "); - q->perform(this); - append_multiline_part_to_buffer(" {\n"); - - Selector* e = m->enclosing_selector(); - bool hoisted = false; - if (e && b->has_non_hoistable()) { - hoisted = true; - ++indentation; - indent(); - e->perform(this); - append_multiline_part_to_buffer(" {\n"); - } - - ++indentation; - decls = true; - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (!stm->is_hoistable()) { - if (!stm->block()) indent(); - stm->perform(this); - append_multiline_part_to_buffer("\n"); - } - } - --indentation; - - if (hoisted) { - buffer.erase(buffer.length()-1); - if (ctx) ctx->source_map.remove_line(); - append_multiline_part_to_buffer(" }\n"); - --indentation; - } - - if (decls) ++indentation; - if (hoisted) ++indentation; - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (stm->is_hoistable()) { - stm->perform(this); - } - } - if (hoisted) --indentation; - if (decls) --indentation; - - buffer.erase(buffer.length()-1); - if (ctx) ctx->source_map.remove_line(); - append_multiline_part_to_buffer(" }\n"); - } - - void Output_Nested::operator()(At_Rule* a) - { - string kwd = a->keyword(); - Selector* s = a->selector(); - Block* b = a->block(); - bool decls = false; - - // indent(); - append_singleline_part_to_buffer(kwd); - if (s) { - append_singleline_part_to_buffer(" "); - s->perform(this); - } - - if (!b) { - append_singleline_part_to_buffer(";"); - return; - } - - append_multiline_part_to_buffer(" {\n"); - ++indentation; - decls = true; - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (!stm->is_hoistable()) { - if (!stm->block()) indent(); - stm->perform(this); - append_multiline_part_to_buffer("\n"); - } - } - --indentation; - - if (decls) ++indentation; - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (stm->is_hoistable()) { - stm->perform(this); - append_multiline_part_to_buffer("\n"); - } - } - if (decls) --indentation; - - buffer.erase(buffer.length()-1); - if (ctx) ctx->source_map.remove_line(); - if (b->has_hoistable()) { - buffer.erase(buffer.length()-1); - if (ctx) ctx->source_map.remove_line(); - } - append_multiline_part_to_buffer(" }\n"); - } - - void Output_Nested::indent() - { append_singleline_part_to_buffer(string(2*indentation, ' ')); } - - void Output_Nested::append_singleline_part_to_buffer(const string& text) - { - buffer += text; - if (ctx) ctx->source_map.update_column(text); - } - - void Output_Nested::append_multiline_part_to_buffer(const string& text) - { - buffer += text; - if (ctx) ctx->source_map.new_line(); - } - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/output_nested.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/output_nested.hpp deleted file mode 100644 index f8762b49..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/output_nested.hpp +++ /dev/null @@ -1,98 +0,0 @@ -#include <string> - -#ifndef SASS_OPERATION -#include "operation.hpp" -#endif - -// #ifndef SASS_TO_STRING -// #include "to_string.hpp" -// #endif - -namespace Sass { - using namespace std; - struct Context; - - class Output_Nested : public Operation_CRTP<void, Output_Nested> { - // import all the class-specific methods and override as desired - using Operation_CRTP<void, Output_Nested>::operator(); - - string buffer; - size_t indentation; - bool source_comments; - Context* ctx; - void indent(); - - void fallback_impl(AST_Node* n); - - void append_singleline_part_to_buffer(const string& text); - void append_multiline_part_to_buffer(const string& text); - - public: - - Output_Nested(bool source_comments = false, Context* ctx = 0); - virtual ~Output_Nested(); - - string get_buffer() { return buffer; } - - // statements - virtual void operator()(Block*); - virtual void operator()(Ruleset*); - // virtual void operator()(Propset*); - virtual void operator()(Media_Block*); - virtual void operator()(At_Rule*); - // virtual void operator()(Declaration*); - // virtual void operator()(Assignment*); - // virtual void operator()(Import*); - // virtual void operator()(Import_Stub*); - // virtual void operator()(Warning*); - // virtual void operator()(Comment*); - // virtual void operator()(If*); - // virtual void operator()(For*); - // virtual void operator()(Each*); - // virtual void operator()(While*); - // virtual void operator()(Return*); - // virtual void operator()(Extension*); - // virtual void operator()(Definition*); - // virtual void operator()(Mixin_Call*); - // virtual void operator()(Content*); - // // expressions - // virtual void operator()(List*); - // virtual void operator()(Binary_Expression*); - // virtual void operator()(Unary_Expression*); - // virtual void operator()(Function_Call*); - // virtual void operator()(Function_Call_Schema*); - // virtual void operator()(Variable*); - // virtual void operator()(Textual*); - // virtual void operator()(Number*); - // virtual void operator()(Color*); - // virtual void operator()(Boolean*); - // virtual void operator()(String_Schema*); - // virtual void operator()(String_Constant* x); - // virtual void operator()(Media_Query*); - // virtual void operator()(Media_Query_Expression*); - // // parameters and arguments - // virtual void operator()(Parameter*); - // virtual void operator()(Parameters*); - // virtual void operator()(Argument*); - // virtual void operator()(Arguments*); - // // selectors - // virtual void operator()(Selector_Schema*); - // virtual void operator()(Selector_Reference*); - // virtual void operator()(Selector_Placeholder*); - // virtual void operator()(Type_Selector*); - // virtual void operator()(Selector_Qualifier*); - // virtual void operator()(Attribute_Selector*); - // virtual void operator()(Pseudo_Selector*); - // virtual void operator()(Negated_Selector*); - // virtual void operator()(Compound_Selector*); - // virtual void operator()(Complex_Selector*); - // virtual void operator()(Selector_List*); - - template <typename U> - void fallback(U x) { fallback_impl(x); } - }; - - string unquote(const string&); - string quote(const string&, char); - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/parser.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/parser.cpp deleted file mode 100644 index 137ed269..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/parser.cpp +++ /dev/null @@ -1,1610 +0,0 @@ -#include <cstdlib> -#include <iostream> -#include "parser.hpp" -#include "file.hpp" -#include "inspect.hpp" -#include "to_string.hpp" -#include "constants.hpp" - -#ifndef SASS_PRELEXER -#include "prelexer.hpp" -#endif - -#include <typeinfo> - -namespace Sass { - using namespace std; - using namespace Constants; - - Parser Parser::from_c_str(const char* str, Context& ctx, string path, Position source_position) - { - Parser p(ctx, path, source_position); - p.source = str; - p.position = p.source; - p.end = str + strlen(str); - return p; - } - - Parser Parser::from_token(Token t, Context& ctx, string path, Position source_position) - { - Parser p(ctx, path, source_position); - p.source = t.begin; - p.position = p.source; - p.end = t.end; - return p; - } - - Block* Parser::parse() - { - Block* root = new (ctx.mem) Block(path, source_position); - root->is_root(true); - read_bom(); - lex< optional_spaces >(); - Selector_Lookahead lookahead_result; - while (position < end) { - if (lex< block_comment >()) { - String_Constant* contents = new (ctx.mem) String_Constant(path, source_position, lexed); - Comment* comment = new (ctx.mem) Comment(path, source_position, contents); - (*root) << comment; - } - else if (peek< import >()) { - Import* imp = parse_import(); - if (!imp->urls().empty()) (*root) << imp; - if (!imp->files().empty()) { - for (size_t i = 0, S = imp->files().size(); i < S; ++i) { - (*root) << new (ctx.mem) Import_Stub(path, source_position, imp->files()[i]); - } - } - if (!lex< exactly<';'> >()) error("top-level @import directive must be terminated by ';'"); - } - else if (peek< mixin >() || peek< function >()) { - (*root) << parse_definition(); - } - else if (peek< variable >()) { - (*root) << parse_assignment(); - if (!lex< exactly<';'> >()) error("top-level variable binding must be terminated by ';'"); - } - else if (peek< sequence< optional< exactly<'*'> >, alternatives< identifier_schema, identifier >, optional_spaces, exactly<':'>, optional_spaces, exactly<'{'> > >(position)) { - (*root) << parse_propset(); - } - else if (peek< include >() /* || peek< exactly<'+'> >() */) { - Mixin_Call* mixin_call = parse_mixin_call(); - (*root) << mixin_call; - if (!mixin_call->block() && !lex< exactly<';'> >()) error("top-level @include directive must be terminated by ';'"); - } - else if (peek< if_directive >()) { - (*root) << parse_if_directive(); - } - else if (peek< for_directive >()) { - (*root) << parse_for_directive(); - } - else if (peek< each_directive >()) { - (*root) << parse_each_directive(); - } - else if (peek< while_directive >()) { - (*root) << parse_while_directive(); - } - else if (peek< media >()) { - (*root) << parse_media_block(); - } - else if (peek< warn >()) { - (*root) << parse_warning(); - if (!lex< exactly<';'> >()) error("top-level @warn directive must be terminated by ';'"); - } - // ignore the @charset directive for now - else if (lex< exactly< charset_kwd > >()) { - lex< string_constant >(); - lex< exactly<';'> >(); - } - else if (peek< at_keyword >()) { - At_Rule* at_rule = parse_at_rule(); - (*root) << at_rule; - if (!at_rule->block() && !lex< exactly<';'> >()) error("top-level directive must be terminated by ';'"); - } - else if ((lookahead_result = lookahead_for_selector(position)).found) { - (*root) << parse_ruleset(lookahead_result); - } - else { - lex< spaces_and_comments >(); - if (position >= end) break; - error("invalid top-level expression"); - } - lex< optional_spaces >(); - } - return root; - } - - Import* Parser::parse_import() - { - lex< import >(); - Import* imp = new (ctx.mem) Import(path, source_position); - bool first = true; - do { - if (lex< string_constant >()) { - string import_path(lexed); - size_t dot = import_path.find_last_of('.'); - if (dot != string::npos && import_path.substr(dot, 4) == ".css") { - String_Constant* loc = new (ctx.mem) String_Constant(path, source_position, import_path); - Argument* loc_arg = new (ctx.mem) Argument(path, source_position, loc); - Arguments* loc_args = new (ctx.mem) Arguments(path, source_position); - (*loc_args) << loc_arg; - Function_Call* new_url = new (ctx.mem) Function_Call(path, source_position, "url", loc_args); - imp->urls().push_back(new_url); - } - else { - string current_dir = File::dir_name(path); - // string resolved(ctx.add_file(File::join_paths(current_dir, unquote(import_path)))); - string resolved(ctx.add_file(current_dir, unquote(import_path))); - if (resolved.empty()) error("file to import not found or unreadable: " + import_path); - imp->files().push_back(resolved); - } - } - else if (peek< uri_prefix >()) { - imp->urls().push_back(parse_value()); - } - else { - if (first) error("@import directive requires a url or quoted path"); - else error("expecting another url or quoted path in @import list"); - } - first = false; - } while (lex< exactly<','> >()); - return imp; - } - - Definition* Parser::parse_definition() - { - Definition::Type which_type = Definition::MIXIN; - if (lex< mixin >()) which_type = Definition::MIXIN; - else if (lex< function >()) which_type = Definition::FUNCTION; - string which_str(lexed); - if (!lex< identifier >()) error("invalid name in " + which_str + " definition"); - string name(lexed); - Position source_position_of_def = source_position; - Parameters* params = parse_parameters(); - if (!peek< exactly<'{'> >()) error("body for " + which_str + " " + name + " must begin with a '{'"); - if (which_type == Definition::MIXIN) stack.push_back(mixin_def); - else stack.push_back(function_def); - Block* body = parse_block(); - stack.pop_back(); - Definition* def = new (ctx.mem) Definition(path, source_position_of_def, name, params, body, which_type); - return def; - } - - Parameters* Parser::parse_parameters() - { - string name(lexed); // for the error message - Parameters* params = new (ctx.mem) Parameters(path, source_position); - if (lex< exactly<'('> >()) { - // if there's anything there at all - if (!peek< exactly<')'> >()) { - do (*params) << parse_parameter(); - while (lex< exactly<','> >()); - } - if (!lex< exactly<')'> >()) error("expected a variable name (e.g. $x) or ')' for the parameter list for " + name); - } - return params; - } - - Parameter* Parser::parse_parameter() - { - lex< variable >(); - string name(lexed); - Position pos = source_position; - Expression* val = 0; - bool is_rest = false; - if (lex< exactly<':'> >()) { // there's a default value - val = parse_space_list(); - val->is_delayed(false); - } - else if (lex< exactly< ellipsis > >()) { - is_rest = true; - } - Parameter* p = new (ctx.mem) Parameter(path, pos, name, val, is_rest); - return p; - } - - Mixin_Call* Parser::parse_mixin_call() - { - lex< include >() /* || lex< exactly<'+'> >() */; - if (!lex< identifier >()) error("invalid name in @include directive"); - Position source_position_of_call = source_position; - string name(lexed); - Arguments* args = parse_arguments(); - Block* content = 0; - if (peek< exactly<'{'> >()) { - content = parse_block(); - } - Mixin_Call* the_call = new (ctx.mem) Mixin_Call(path, source_position_of_call, name, args, content); - return the_call; - } - - Arguments* Parser::parse_arguments() - { - string name(lexed); - Arguments* args = new (ctx.mem) Arguments(path, source_position); - - if (lex< exactly<'('> >()) { - // if there's anything there at all - if (!peek< exactly<')'> >()) { - do (*args) << parse_argument(); - while (lex< exactly<','> >()); - } - if (!lex< exactly<')'> >()) error("expected a variable name (e.g. $x) or ')' for the parameter list for " + name); - } - - return args; - } - - Argument* Parser::parse_argument() - { - Argument* arg; - if (peek< sequence < variable, spaces_and_comments, exactly<':'> > >()) { - lex< variable >(); - string name(lexed); - Position p = source_position; - lex< exactly<':'> >(); - Expression* val = parse_space_list(); - val->is_delayed(false); - arg = new (ctx.mem) Argument(path, p, val, name); - } - else { - bool is_arglist = false; - Expression* val = parse_space_list(); - val->is_delayed(false); - if (lex< exactly< ellipsis > >()) { - is_arglist = true; - } - arg = new (ctx.mem) Argument(path, source_position, val, "", is_arglist); - } - return arg; - } - - Assignment* Parser::parse_assignment() - { - lex< variable >(); - string name(lexed); - Position var_source_position = source_position; - if (!lex< exactly<':'> >()) error("expected ':' after " + name + " in assignment statement"); - Expression* val = parse_list(); - val->is_delayed(false); - bool is_guarded = lex< default_flag >(); - Assignment* var = new (ctx.mem) Assignment(path, var_source_position, name, val, is_guarded); - return var; - } - - Propset* Parser::parse_propset() - { - String* property_segment; - if (peek< sequence< optional< exactly<'*'> >, identifier_schema > >()) { - property_segment = parse_identifier_schema(); - } - else { - lex< sequence< optional< exactly<'*'> >, identifier > >(); - property_segment = new (ctx.mem) String_Constant(path, source_position, lexed); - } - Propset* propset = new (ctx.mem) Propset(path, source_position, property_segment); - lex< exactly<':'> >(); - - if (!peek< exactly<'{'> >()) error("expected a '{' after namespaced property"); - - propset->block(parse_block()); - - return propset; - } - - Ruleset* Parser::parse_ruleset(Selector_Lookahead lookahead) - { - Selector* sel; - if (lookahead.has_interpolants) { - sel = parse_selector_schema(lookahead.found); - } - else { - sel = parse_selector_group(); - } - Position r_source_position = source_position; - if (!peek< exactly<'{'> >()) error("expected a '{' after the selector"); - Block* block = parse_block(); - Ruleset* ruleset = new (ctx.mem) Ruleset(path, r_source_position, sel, block); - return ruleset; - } - - Selector_Schema* Parser::parse_selector_schema(const char* end_of_selector) - { - lex< optional_spaces >(); - const char* i = position; - const char* p; - String_Schema* schema = new (ctx.mem) String_Schema(path, source_position); - - while (i < end_of_selector) { - p = find_first_in_interval< exactly<hash_lbrace> >(i, end_of_selector); - if (p) { - // accumulate the preceding segment if there is one - if (i < p) (*schema) << new (ctx.mem) String_Constant(path, source_position, Token(i, p)); - // find the end of the interpolant and parse it - const char* j = find_first_in_interval< exactly<rbrace> >(p, end_of_selector); - Expression* interp_node = Parser::from_token(Token(p+2, j), ctx, path, source_position).parse_list(); - interp_node->is_interpolant(true); - (*schema) << interp_node; - i = j + 1; - } - else { // no interpolants left; add the last segment if there is one - if (i < end_of_selector) (*schema) << new (ctx.mem) String_Constant(path, source_position, Token(i, end_of_selector)); - break; - } - } - position = end_of_selector; - return new (ctx.mem) Selector_Schema(path, source_position, schema); - } - - Selector_List* Parser::parse_selector_group() - { - To_String to_string; - Selector_List* group = new (ctx.mem) Selector_List(path, source_position); - do { - Complex_Selector* comb = parse_selector_combination(); - if (!comb->has_reference()) { - Position sel_source_position = source_position; - Selector_Reference* ref = new (ctx.mem) Selector_Reference(path, sel_source_position); - Compound_Selector* ref_wrap = new (ctx.mem) Compound_Selector(path, sel_source_position); - (*ref_wrap) << ref; - if (!comb->head()) { - comb->head(ref_wrap); - comb->has_reference(true); - } - else { - comb = new (ctx.mem) Complex_Selector(path, sel_source_position, Complex_Selector::ANCESTOR_OF, ref_wrap, comb); - comb->has_reference(true); - } - } - (*group) << comb; - } - while (lex< exactly<','> >()); - return group; - } - - Complex_Selector* Parser::parse_selector_combination() - { - Position sel_source_position = Position(); - Compound_Selector* lhs; - if (peek< exactly<'+'> >() || - peek< exactly<'~'> >() || - peek< exactly<'>'> >()) { - // no selector before the combinator - lhs = 0; - } - else { - lhs = parse_simple_selector_sequence(); - sel_source_position = source_position; - } - - Complex_Selector::Combinator cmb; - if (lex< exactly<'+'> >()) cmb = Complex_Selector::ADJACENT_TO; - else if (lex< exactly<'~'> >()) cmb = Complex_Selector::PRECEDES; - else if (lex< exactly<'>'> >()) cmb = Complex_Selector::PARENT_OF; - else cmb = Complex_Selector::ANCESTOR_OF; - - Complex_Selector* rhs; - if (peek< exactly<','> >() || - peek< exactly<')'> >() || - peek< exactly<'{'> >() || - peek< exactly<'}'> >() || - peek< exactly<';'> >()) { - // no selector after the combinator - rhs = 0; - } - else { - rhs = parse_selector_combination(); - sel_source_position = source_position; - } - if (!sel_source_position.line) sel_source_position = source_position; - return new (ctx.mem) Complex_Selector(path, sel_source_position, cmb, lhs, rhs); - } - - Compound_Selector* Parser::parse_simple_selector_sequence() - { - Compound_Selector* seq = new (ctx.mem) Compound_Selector(path, source_position); - // check for backref or type selector, which are only allowed at the front - if (lex< exactly<'&'> >()) { - (*seq) << new (ctx.mem) Selector_Reference(path, source_position); - } - else if (lex< sequence< negate< functional >, alternatives< type_selector, universal, string_constant, dimension, percentage, number > > >()) { - (*seq) << new (ctx.mem) Type_Selector(path, source_position, lexed); - } - else { - (*seq) << parse_simple_selector(); - } - - while (!peek< spaces >(position) && - !(peek < exactly<'+'> >(position) || - peek < exactly<'~'> >(position) || - peek < exactly<'>'> >(position) || - peek < exactly<','> >(position) || - peek < exactly<')'> >(position) || - peek < exactly<'{'> >(position) || - peek < exactly<'}'> >(position) || - peek < exactly<';'> >(position))) { - (*seq) << parse_simple_selector(); - } - return seq; - } - - Simple_Selector* Parser::parse_simple_selector() - { - if (lex< id_name >() || lex< class_name >()) { - return new (ctx.mem) Selector_Qualifier(path, source_position, lexed); - } - else if (lex< string_constant >() || lex< number >()) { - return new (ctx.mem) Type_Selector(path, source_position, lexed); - } - else if (peek< pseudo_not >()) { - return parse_negated_selector(); - } - else if (peek< exactly<':'> >(position) || peek< functional >()) { - return parse_pseudo_selector(); - } - else if (peek< exactly<'['> >(position)) { - return parse_attribute_selector(); - } - else if (lex< placeholder >()) { - return new (ctx.mem) Selector_Placeholder(path, source_position, lexed); - } - else { - error("invalid selector after " + lexed.to_string()); - } - // unreachable statement - return 0; - } - - Negated_Selector* Parser::parse_negated_selector() - { - lex< pseudo_not >(); - Position nsource_position = source_position; - Selector* negated = parse_selector_group(); - if (!lex< exactly<')'> >()) { - error("negated selector is missing ')'"); - } - return new (ctx.mem) Negated_Selector(path, nsource_position, negated); - } - - Pseudo_Selector* Parser::parse_pseudo_selector() { - if (lex< sequence< pseudo_prefix, functional > >() || lex< functional >()) { - string name(lexed); - String* expr = 0; - Position p = source_position; - if (lex< alternatives< even, odd > >()) { - expr = new (ctx.mem) String_Constant(path, p, lexed); - } - else if (peek< binomial >(position)) { - lex< sequence< optional< coefficient >, exactly<'n'> > >(); - String_Constant* var_coef = new (ctx.mem) String_Constant(path, p, lexed); - lex< sign >(); - String_Constant* op = new (ctx.mem) String_Constant(path, p, lexed); - // Binary_Expression::Type op = (lexed == "+" ? Binary_Expression::ADD : Binary_Expression::SUB); - lex< digits >(); - String_Constant* constant = new (ctx.mem) String_Constant(path, p, lexed); - // expr = new (ctx.mem) Binary_Expression(path, p, op, var_coef, constant); - String_Schema* schema = new (ctx.mem) String_Schema(path, p, 3); - *schema << var_coef << op << constant; - expr = schema; - } - else if (lex< sequence< optional<sign>, - optional<digits>, - exactly<'n'> > >()) { - expr = new (ctx.mem) String_Constant(path, p, lexed); - } - else if (lex< sequence< optional<sign>, digits > >()) { - expr = new (ctx.mem) String_Constant(path, p, lexed); - } - else if (lex< identifier >()) { - expr = new (ctx.mem) String_Constant(path, p, lexed); - } - else if (lex< string_constant >()) { - expr = new (ctx.mem) String_Constant(path, p, lexed); - } - else if (peek< exactly<')'> >()) { - expr = new (ctx.mem) String_Constant(path, p, ""); - } - else { - error("invalid argument to " + name + "...)"); - } - if (!lex< exactly<')'> >()) error("unterminated argument to " + name + "...)"); - return new (ctx.mem) Pseudo_Selector(path, p, name, expr); - } - else if (lex < sequence< pseudo_prefix, identifier > >()) { - return new (ctx.mem) Pseudo_Selector(path, source_position, lexed); - } - else { - error("unrecognized pseudo-class or pseudo-element"); - } - // unreachable statement - return 0; - } - - Attribute_Selector* Parser::parse_attribute_selector() - { - lex< exactly<'['> >(); - Position p = source_position; - if (!lex< type_selector >()) error("invalid attribute name in attribute selector"); - string name(lexed); - if (lex< exactly<']'> >()) return new (ctx.mem) Attribute_Selector(path, p, name, "", ""); - if (!lex< alternatives< exact_match, class_match, dash_match, - prefix_match, suffix_match, substring_match > >()) { - error("invalid operator in attribute selector for " + name); - } - string matcher(lexed); - if (!lex< string_constant >() && !lex< identifier >()) error("expected a string constant or identifier in attribute selector for " + name); - string value(lexed); - if (!lex< exactly<']'> >()) error("unterminated attribute selector for " + name); - return new (ctx.mem) Attribute_Selector(path, p, name, matcher, value); - } - - Block* Parser::parse_block() - { - lex< exactly<'{'> >(); - bool semicolon = false; - Selector_Lookahead lookahead_result; - Block* block = new (ctx.mem) Block(path, source_position); - while (!lex< exactly<'}'> >()) { - if (semicolon) { - if (!lex< exactly<';'> >()) { - error("non-terminal statement or declaration must end with ';'"); - } - semicolon = false; - while (lex< block_comment >()) { - String_Constant* contents = new (ctx.mem) String_Constant(path, source_position, lexed); - Comment* comment = new (ctx.mem) Comment(path, source_position, contents); - (*block) << comment; - } - if (lex< exactly<'}'> >()) break; - } - if (lex< block_comment >()) { - String_Constant* contents = new (ctx.mem) String_Constant(path, source_position, lexed); - Comment* comment = new (ctx.mem) Comment(path, source_position, contents); - (*block) << comment; - } - else if (peek< import >(position)) { - if (stack.back() == mixin_def || stack.back() == function_def) { - lex< import >(); // to adjust the source_position number - error("@import directives are not allowed inside mixins and functions"); - } - Import* imp = parse_import(); - if (!imp->urls().empty()) (*block) << imp; - if (!imp->files().empty()) { - for (size_t i = 0, S = imp->files().size(); i < S; ++i) { - (*block) << new (ctx.mem) Import_Stub(path, source_position, imp->files()[i]); - } - } - semicolon = true; - } - else if (lex< variable >()) { - (*block) << parse_assignment(); - semicolon = true; - } - else if (peek< if_directive >()) { - (*block) << parse_if_directive(); - } - else if (peek< for_directive >()) { - (*block) << parse_for_directive(); - } - else if (peek< each_directive >()) { - (*block) << parse_each_directive(); - } - else if (peek < while_directive >()) { - (*block) << parse_while_directive(); - } - else if (lex < return_directive >()) { - (*block) << new (ctx.mem) Return(path, source_position, parse_list()); - semicolon = true; - } - else if (peek< warn >()) { - (*block) << parse_warning(); - semicolon = true; - } - else if (stack.back() == function_def) { - error("only variable declarations and control directives are allowed inside functions"); - } - else if (peek< mixin >() || peek< function >()) { - (*block) << parse_definition(); - } - else if (peek< include >(position)) { - Mixin_Call* the_call = parse_mixin_call(); - (*block) << the_call; - // don't need a semicolon after a content block - semicolon = (the_call->block()) ? false : true; - } - else if (lex< content >()) { - if (stack.back() != mixin_def) { - error("@content may only be used within a mixin"); - } - (*block) << new (ctx.mem) Content(path, source_position); - semicolon = true; - } - /* - else if (peek< exactly<'+'> >()) { - (*block) << parse_mixin_call(); - semicolon = true; - } - */ - else if (lex< extend >()) { - Selector_Lookahead lookahead = lookahead_for_extension_target(position); - if (!lookahead.found) error("invalid selector for @extend"); - Selector* target; - if (lookahead.has_interpolants) target = parse_selector_schema(lookahead.found); - else target = parse_selector_group(); - (*block) << new (ctx.mem) Extension(path, source_position, target); - semicolon = true; - } - else if (peek< media >()) { - (*block) << parse_media_block(); - } - // ignore the @charset directive for now - else if (lex< exactly< charset_kwd > >()) { - lex< string_constant >(); - lex< exactly<';'> >(); - } - else if (peek< at_keyword >()) { - At_Rule* at_rule = parse_at_rule(); - (*block) << at_rule; - if (!at_rule->block()) semicolon = true; - } - else if ((lookahead_result = lookahead_for_selector(position)).found) { - (*block) << parse_ruleset(lookahead_result); - } - else if (peek< sequence< optional< exactly<'*'> >, alternatives< identifier_schema, identifier >, optional_spaces, exactly<':'>, optional_spaces, exactly<'{'> > >(position)) { - (*block) << parse_propset(); - } - else if (!peek< exactly<';'> >()) { - if (peek< sequence< optional< exactly<'*'> >, identifier_schema, exactly<':'>, exactly<'{'> > >()) { - (*block) << parse_propset(); - } - else if (peek< sequence< optional< exactly<'*'> >, identifier, exactly<':'>, exactly<'{'> > >()) { - (*block) << parse_propset(); - } - else { - Declaration* decl = parse_declaration(); - (*block) << decl; - if (peek< exactly<'{'> >()) { - // parse a propset that rides on the declaration's property - Propset* ps = new (ctx.mem) Propset(path, source_position, decl->property(), parse_block()); - (*block) << ps; - } - else { - // finish and let the semicolon get munched - semicolon = true; - } - } - } - else lex< exactly<';'> >(); - while (lex< block_comment >()) { - String_Constant* contents = new (ctx.mem) String_Constant(path, source_position, lexed); - Comment* comment = new (ctx.mem) Comment(path, source_position, contents); - (*block) << comment; - } - } - return block; - } - - Declaration* Parser::parse_declaration() { - String* prop = 0; - if (peek< sequence< optional< exactly<'*'> >, identifier_schema > >()) { - prop = parse_identifier_schema(); - } - else if (lex< sequence< optional< exactly<'*'> >, identifier > >()) { - prop = new (ctx.mem) String_Constant(path, source_position, lexed); - } - else { - error("invalid property name"); - } - if (!lex< exactly<':'> >()) error("property \"" + string(lexed) + "\" must be followed by a ':'"); - if (peek< exactly<';'> >()) error("style declaration must contain a value"); - Expression* list = parse_list(); - return new (ctx.mem) Declaration(path, prop->position(), prop, list/*, lex<important>()*/); - } - - Expression* Parser::parse_list() - { - return parse_comma_list(); - } - - Expression* Parser::parse_comma_list() - { - if (//peek< exactly<'!'> >(position) || - peek< exactly<';'> >(position) || - peek< exactly<'}'> >(position) || - peek< exactly<'{'> >(position) || - peek< exactly<')'> >(position) || - //peek< exactly<':'> >(position) || - peek< exactly<ellipsis> >(position)) - { return new (ctx.mem) List(path, source_position, 0); } - Expression* list1 = parse_space_list(); - // if it's a singleton, return it directly; don't wrap it - if (!peek< exactly<','> >(position)) return list1; - - List* comma_list = new (ctx.mem) List(path, source_position, 2, List::COMMA); - (*comma_list) << list1; - - while (lex< exactly<','> >()) - { - Expression* list = parse_space_list(); - (*comma_list) << list; - } - - return comma_list; - } - - Expression* Parser::parse_space_list() - { - Expression* disj1 = parse_disjunction(); - // if it's a singleton, return it directly; don't wrap it - if (//peek< exactly<'!'> >(position) || - peek< exactly<';'> >(position) || - peek< exactly<'}'> >(position) || - peek< exactly<'{'> >(position) || - peek< exactly<')'> >(position) || - peek< exactly<','> >(position) || - // peek< exactly<':'> >(position) || - peek< exactly<ellipsis> >(position) || - peek< default_flag >(position)) - { return disj1; } - - List* space_list = new (ctx.mem) List(path, source_position, 2, List::SPACE); - (*space_list) << disj1; - - while (!(//peek< exactly<'!'> >(position) || - peek< exactly<';'> >(position) || - peek< exactly<'}'> >(position) || - peek< exactly<'{'> >(position) || - peek< exactly<')'> >(position) || - peek< exactly<','> >(position) || - // peek< exactly<':'> >(position) || - peek< exactly<ellipsis> >(position) || - peek< default_flag >(position))) - { - (*space_list) << parse_disjunction(); - } - - return space_list; - } - - Expression* Parser::parse_disjunction() - { - Expression* conj1 = parse_conjunction(); - // if it's a singleton, return it directly; don't wrap it - if (!peek< sequence< or_op, negate< identifier > > >()) return conj1; - - vector<Expression*> operands; - while (lex< sequence< or_op, negate< identifier > > >()) - operands.push_back(parse_conjunction()); - - return fold_operands(conj1, operands, Binary_Expression::OR); - } - - Expression* Parser::parse_conjunction() - { - Expression* rel1 = parse_relation(); - // if it's a singleton, return it directly; don't wrap it - if (!peek< sequence< and_op, negate< identifier > > >()) return rel1; - - vector<Expression*> operands; - while (lex< sequence< and_op, negate< identifier > > >()) - operands.push_back(parse_relation()); - - return fold_operands(rel1, operands, Binary_Expression::AND); - } - - Expression* Parser::parse_relation() - { - Expression* expr1 = parse_expression(); - // if it's a singleton, return it directly; don't wrap it - if (!(peek< eq_op >(position) || - peek< neq_op >(position) || - peek< gte_op >(position) || - peek< gt_op >(position) || - peek< lte_op >(position) || - peek< lt_op >(position))) - { return expr1; } - - Binary_Expression::Type op - = lex<eq_op>() ? Binary_Expression::EQ - : lex<neq_op>() ? Binary_Expression::NEQ - : lex<gte_op>() ? Binary_Expression::GTE - : lex<lte_op>() ? Binary_Expression::LTE - : lex<gt_op>() ? Binary_Expression::GT - : lex<lt_op>() ? Binary_Expression::LT - : Binary_Expression::LT; // whatever - - Expression* expr2 = parse_expression(); - - return new (ctx.mem) Binary_Expression(path, expr1->position(), op, expr1, expr2); - } - - Expression* Parser::parse_expression() - { - Expression* term1 = parse_term(); - // if it's a singleton, return it directly; don't wrap it - if (!(peek< exactly<'+'> >(position) || - peek< sequence< negate< number >, exactly<'-'> > >(position))) - { return term1; } - - vector<Expression*> operands; - vector<Binary_Expression::Type> operators; - while (lex< exactly<'+'> >() || lex< sequence< negate< number >, exactly<'-'> > >()) { - operators.push_back(lexed == "+" ? Binary_Expression::ADD : Binary_Expression::SUB); - operands.push_back(parse_term()); - } - - return fold_operands(term1, operands, operators); - } - - Expression* Parser::parse_term() - { - Expression* fact1 = parse_factor(); - // if it's a singleton, return it directly; don't wrap it - if (!(peek< exactly<'*'> >(position) || - peek< exactly<'/'> >(position) || - peek< exactly<'%'> >(position))) - { return fact1; } - - vector<Expression*> operands; - vector<Binary_Expression::Type> operators; - while (lex< exactly<'*'> >() || lex< exactly<'/'> >() || lex< exactly<'%'> >()) { - if (lexed == "*") operators.push_back(Binary_Expression::MUL); - else if (lexed == "/") operators.push_back(Binary_Expression::DIV); - else operators.push_back(Binary_Expression::MOD); - operands.push_back(parse_factor()); - } - - return fold_operands(fact1, operands, operators); - } - - Expression* Parser::parse_factor() - { - if (lex< exactly<'('> >()) { - Expression* value = parse_comma_list(); - if (!lex< exactly<')'> >()) error("unclosed parenthesis"); - value->is_delayed(false); - // make sure wrapped lists and division expressions are non-delayed within parentheses - if (value->concrete_type() == Expression::LIST) { - List* l = static_cast<List*>(value); - if (!l->empty()) (*l)[0]->is_delayed(false); - } else if (typeid(*value) == typeid(Binary_Expression)) { - Binary_Expression* b = static_cast<Binary_Expression*>(value); - Binary_Expression* lhs = static_cast<Binary_Expression*>(b->left()); - if (lhs && lhs->type() == Binary_Expression::DIV) lhs->is_delayed(false); - } - return value; - } - else if (peek< ie_stuff >()) { - return parse_ie_stuff(); - } - else if (peek< ie_keyword_arg >()) { - String_Schema* kwd_arg = new (ctx.mem) String_Schema(path, source_position, 3); - if (lex< variable >()) *kwd_arg << new (ctx.mem) Variable(path, source_position, lexed); - else { - lex< alternatives< identifier_schema, identifier > >(); - *kwd_arg << new (ctx.mem) String_Constant(path, source_position, lexed); - } - lex< exactly<'='> >(); - *kwd_arg << new (ctx.mem) String_Constant(path, source_position, lexed); - if (lex< variable >()) *kwd_arg << new (ctx.mem) Variable(path, source_position, lexed); - else { - lex< alternatives< identifier_schema, identifier, number > >(); - *kwd_arg << new (ctx.mem) String_Constant(path, source_position, lexed); - } - return kwd_arg; - } - else if (peek< functional_schema >()) { - return parse_function_call_schema(); - } - else if (peek< identifier_schema >()) { - return parse_identifier_schema(); - } - else if (peek< functional >() && !peek< uri_prefix >()) { - return parse_function_call(); - } - else if (lex< sequence< exactly<'+'>, spaces_and_comments, negate< number > > >()) { - return new (ctx.mem) Unary_Expression(path, source_position, Unary_Expression::PLUS, parse_factor()); - } - else if (lex< sequence< exactly<'-'>, spaces_and_comments, negate< number> > >()) { - return new (ctx.mem) Unary_Expression(path, source_position, Unary_Expression::MINUS, parse_factor()); - } - else { - return parse_value(); - } - } - - Expression* Parser::parse_value() - { - if (lex< uri_prefix >()) { - // TODO: really need to clean up this chunk - Arguments* args = new (ctx.mem) Arguments(path, source_position); - Function_Call* result = new (ctx.mem) Function_Call(path, source_position, "url", args); - // gah, gonna have to use exception handling to do backtracking ... - const char* here = position; - try { - try { - if (peek< string_constant >()) { - // cerr << "parsing a url string" << endl; - String* str = parse_string(); - (*args) << new (ctx.mem) Argument(path, source_position, str); - // cerr << "done" << endl; - } - else if (peek< sequence< url_schema, spaces_and_comments, exactly<')'> > >()) { - // cerr << "url schema" << endl; - lex< url_schema >(); - String_Schema* the_url = Parser::from_token(lexed, ctx, path, source_position).parse_url_schema(); - (*args) << new (ctx.mem) Argument(path, source_position, the_url); - // cerr << "done" << endl; - } - else if (peek< sequence< url_value, spaces_and_comments, exactly<')'> > >()) { - // cerr << "url value" << endl; - lex< url_value >(); - String_Constant* the_url = new (ctx.mem) String_Constant(path, source_position, lexed); - (*args) << new (ctx.mem) Argument(path, source_position, the_url); - // cerr << "done" << endl; - } - else { - // cerr << "stuff" << endl; - const char* value = position; - const char* rparen = find_first< exactly<')'> >(position); - if (!rparen) error("URI is missing ')'"); - Token content_tok(Token(value, rparen)); - String_Constant* content_node = new (ctx.mem) String_Constant(path, source_position, content_tok); - (*args) << new (ctx.mem) Argument(path, source_position, content_node); - position = rparen; - // cerr << "done" << endl; - } - } - catch (Error& e) { - // cerr << "expression" << endl; - position = here; - Expression* expr = parse_list(); - (*args) << new (ctx.mem) Argument(path, source_position, expr); - // cerr << "done" << endl; - } - } - catch (Error& e) { - error("unable to parse URL"); - } - if (!lex< exactly<')'> >()) error("URI is missing ')'"); - return result; - } - - if (lex< important >()) - { return new (ctx.mem) String_Constant(path, source_position, "!important"); } - - if (lex< value_schema >()) - { return Parser::from_token(lexed, ctx, path, source_position).parse_value_schema(); } - - if (lex< sequence< true_val, negate< identifier > > >()) - { return new (ctx.mem) Boolean(path, source_position, true); } - - if (lex< sequence< false_val, negate< identifier > > >()) - { return new (ctx.mem) Boolean(path, source_position, false); } - - if (lex< sequence< null, negate< identifier > > >()) - { return new (ctx.mem) Null(path, source_position); } - - if (lex< identifier >()) { - String_Constant* str = new (ctx.mem) String_Constant(path, source_position, lexed); - str->is_delayed(true); - return str; - } - - if (lex< percentage >()) - { return new (ctx.mem) Textual(path, source_position, Textual::PERCENTAGE, lexed); } - - if (lex< dimension >()) - { return new (ctx.mem) Textual(path, source_position, Textual::DIMENSION, lexed); } - - if (lex< number >()) - { return new (ctx.mem) Textual(path, source_position, Textual::NUMBER, lexed); } - - if (lex< hex >()) - { return new (ctx.mem) Textual(path, source_position, Textual::HEX, lexed); } - - if (peek< string_constant >()) - { return parse_string(); } - - if (lex< variable >()) - { return new (ctx.mem) Variable(path, source_position, lexed); } - - error("error reading values after " + lexed.to_string()); - - // unreachable statement - return 0; - } - - String* Parser::parse_string() - { - lex< string_constant >(); - Token str(lexed); - const char* i = str.begin; - // see if there any interpolants - const char* p = find_first_in_interval< sequence< negate< exactly<'\\'> >, exactly<hash_lbrace> > >(str.begin, str.end); - if (!p) { - String_Constant* str_node = new (ctx.mem) String_Constant(path, source_position, str); - str_node->is_delayed(true); - return str_node; - } - - String_Schema* schema = new (ctx.mem) String_Schema(path, source_position); - schema->quote_mark(*str.begin); - while (i < str.end) { - p = find_first_in_interval< sequence< negate< exactly<'\\'> >, exactly<hash_lbrace> > >(i, str.end); - if (p) { - if (i < p) { - (*schema) << new (ctx.mem) String_Constant(path, source_position, Token(i, p)); // accumulate the preceding segment if it's nonempty - } - const char* j = find_first_in_interval< exactly<rbrace> >(p, str.end); // find the closing brace - if (j) { - // parse the interpolant and accumulate it - Expression* interp_node = Parser::from_token(Token(p+2, j), ctx, path, source_position).parse_list(); - interp_node->is_interpolant(true); - (*schema) << interp_node; - i = j+1; - } - else { - // throw an error if the interpolant is unterminated - error("unterminated interpolant inside string constant " + str.to_string()); - } - } - else { // no interpolants left; add the last segment if nonempty - if (i < str.end) (*schema) << new (ctx.mem) String_Constant(path, source_position, Token(i, str.end)); - break; - } - } - return schema; - } - - String* Parser::parse_ie_stuff() - { - lex< ie_stuff >(); - Token str(lexed); - --str.end; - --position; - const char* i = str.begin; - // see if there any interpolants - const char* p = find_first_in_interval< sequence< negate< exactly<'\\'> >, exactly<hash_lbrace> > >(str.begin, str.end); - if (!p) { - String_Constant* str_node = new (ctx.mem) String_Constant(path, source_position, str); - str_node->is_delayed(true); - return str_node; - } - - String_Schema* schema = new (ctx.mem) String_Schema(path, source_position); - while (i < str.end) { - p = find_first_in_interval< sequence< negate< exactly<'\\'> >, exactly<hash_lbrace> > >(i, str.end); - if (p) { - if (i < p) { - (*schema) << new (ctx.mem) String_Constant(path, source_position, Token(i, p)); // accumulate the preceding segment if it's nonempty - } - const char* j = find_first_in_interval< exactly<rbrace> >(p, str.end); // find the closing brace - if (j) { - // parse the interpolant and accumulate it - Expression* interp_node = Parser::from_token(Token(p+2, j), ctx, path, source_position).parse_list(); - interp_node->is_interpolant(true); - (*schema) << interp_node; - i = j+1; - } - else { - // throw an error if the interpolant is unterminated - error("unterminated interpolant inside IE function " + str.to_string()); - } - } - else { // no interpolants left; add the last segment if nonempty - if (i < str.end) (*schema) << new (ctx.mem) String_Constant(path, source_position, Token(i, str.end)); - break; - } - } - return schema; - } - - String_Schema* Parser::parse_value_schema() - { - String_Schema* schema = new (ctx.mem) String_Schema(path, source_position); - size_t num_items = 0; - while (position < end) { - if (lex< interpolant >()) { - Token insides(Token(lexed.begin + 2, lexed.end - 1)); - Expression* interp_node = Parser::from_token(insides, ctx, path, source_position).parse_list(); - interp_node->is_interpolant(true); - (*schema) << interp_node; - } - else if (lex< identifier >()) { - (*schema) << new (ctx.mem) String_Constant(path, source_position, lexed); - } - else if (lex< percentage >()) { - (*schema) << new (ctx.mem) Textual(path, source_position, Textual::PERCENTAGE, lexed); - } - else if (lex< dimension >()) { - (*schema) << new (ctx.mem) Textual(path, source_position, Textual::DIMENSION, lexed); - } - else if (lex< number >()) { - (*schema) << new (ctx.mem) Textual(path, source_position, Textual::NUMBER, lexed); - } - else if (lex< hex >()) { - (*schema) << new (ctx.mem) Textual(path, source_position, Textual::HEX, lexed); - } - else if (lex< string_constant >()) { - (*schema) << new (ctx.mem) String_Constant(path, source_position, lexed); - if (!num_items) schema->quote_mark(*lexed.begin); - } - else if (lex< variable >()) { - (*schema) << new (ctx.mem) Variable(path, source_position, lexed); - } - else { - error("error parsing interpolated value"); - } - ++num_items; - } - return schema; - } - - String_Schema* Parser::parse_url_schema() - { - String_Schema* schema = new (ctx.mem) String_Schema(path, source_position); - - while (position < end) { - if (position[0] == '/') { - lexed = Token(position, position+1); - (*schema) << new (ctx.mem) String_Constant(path, source_position, lexed); - ++position; - } - else if (lex< interpolant >()) { - Token insides(Token(lexed.begin + 2, lexed.end - 1)); - Expression* interp_node = Parser::from_token(insides, ctx, path, source_position).parse_list(); - interp_node->is_interpolant(true); - (*schema) << interp_node; - } - else if (lex< sequence< identifier, exactly<':'> > >()) { - (*schema) << new (ctx.mem) String_Constant(path, source_position, lexed); - } - else if (lex< filename >()) { - (*schema) << new (ctx.mem) String_Constant(path, source_position, lexed); - } - else { - error("error parsing interpolated url"); - } - } - return schema; - } - - String* Parser::parse_identifier_schema() - { - lex< sequence< optional< exactly<'*'> >, identifier_schema > >(); - Token id(lexed); - const char* i = id.begin; - // see if there any interpolants - const char* p = find_first_in_interval< sequence< negate< exactly<'\\'> >, exactly<hash_lbrace> > >(id.begin, id.end); - if (!p) { - return new (ctx.mem) String_Constant(path, source_position, id); - } - - String_Schema* schema = new (ctx.mem) String_Schema(path, source_position); - while (i < id.end) { - p = find_first_in_interval< sequence< negate< exactly<'\\'> >, exactly<hash_lbrace> > >(i, id.end); - if (p) { - if (i < p) { - (*schema) << new (ctx.mem) String_Constant(path, source_position, Token(i, p)); // accumulate the preceding segment if it's nonempty - } - const char* j = find_first_in_interval< exactly<rbrace> >(p, id.end); // find the closing brace - if (j) { - // parse the interpolant and accumulate it - Expression* interp_node = Parser::from_token(Token(p+2, j), ctx, path, source_position).parse_list(); - interp_node->is_interpolant(true); - (*schema) << interp_node; - i = j+1; - } - else { - // throw an error if the interpolant is unterminated - error("unterminated interpolant inside interpolated identifier " + id.to_string()); - } - } - else { // no interpolants left; add the last segment if nonempty - if (i < id.end) (*schema) << new (ctx.mem) String_Constant(path, source_position, Token(i, id.end)); - break; - } - } - return schema; - } - - Function_Call* Parser::parse_function_call() - { - lex< identifier >(); - string name(lexed); - Position source_position_of_call = source_position; - - Function_Call* the_call = new (ctx.mem) Function_Call(path, source_position_of_call, name, parse_arguments()); - return the_call; - } - - Function_Call_Schema* Parser::parse_function_call_schema() - { - String* name = parse_identifier_schema(); - Position source_position_of_call = source_position; - - Function_Call_Schema* the_call = new (ctx.mem) Function_Call_Schema(path, source_position_of_call, name, parse_arguments()); - return the_call; - } - - If* Parser::parse_if_directive(bool else_if) - { - lex< if_directive >() || (else_if && lex< exactly<if_after_else_kwd> >()); - Position if_source_position = source_position; - Expression* predicate = parse_list(); - predicate->is_delayed(false); - if (!peek< exactly<'{'> >()) error("expected '{' after the predicate for @if"); - Block* consequent = parse_block(); - Block* alternative = 0; - if (lex< else_directive >()) { - if (peek< exactly<if_after_else_kwd> >()) { - alternative = new (ctx.mem) Block(path, source_position); - (*alternative) << parse_if_directive(true); - } - else if (!peek< exactly<'{'> >()) { - error("expected '{' after @else"); - } - else { - alternative = parse_block(); - } - } - return new (ctx.mem) If(path, if_source_position, predicate, consequent, alternative); - } - - For* Parser::parse_for_directive() - { - lex< for_directive >(); - Position for_source_position = source_position; - if (!lex< variable >()) error("@for directive requires an iteration variable"); - string var(lexed); - if (!lex< from >()) error("expected 'from' keyword in @for directive"); - Expression* lower_bound = parse_expression(); - lower_bound->is_delayed(false); - bool inclusive = false; - if (lex< through >()) inclusive = true; - else if (lex< to >()) inclusive = false; - else error("expected 'through' or 'to' keywod in @for directive"); - Expression* upper_bound = parse_expression(); - upper_bound->is_delayed(false); - if (!peek< exactly<'{'> >()) error("expected '{' after the upper bound in @for directive"); - Block* body = parse_block(); - return new (ctx.mem) For(path, for_source_position, var, lower_bound, upper_bound, body, inclusive); - } - - Each* Parser::parse_each_directive() - { - lex < each_directive >(); - Position each_source_position = source_position; - if (!lex< variable >()) error("@each directive requires an iteration variable"); - string var(lexed); - if (!lex< in >()) error("expected 'in' keyword in @each directive"); - Expression* list = parse_list(); - list->is_delayed(false); - if (list->concrete_type() == Expression::LIST) { - List* l = static_cast<List*>(list); - for (size_t i = 0, L = l->length(); i < L; ++i) { - (*l)[i]->is_delayed(false); - } - } - if (!peek< exactly<'{'> >()) error("expected '{' after the upper bound in @each directive"); - Block* body = parse_block(); - return new (ctx.mem) Each(path, each_source_position, var, list, body); - } - - While* Parser::parse_while_directive() - { - lex< while_directive >(); - Position while_source_position = source_position; - Expression* predicate = parse_list(); - predicate->is_delayed(false); - Block* body = parse_block(); - return new (ctx.mem) While(path, while_source_position, predicate, body); - } - - Media_Block* Parser::parse_media_block() - { - lex< media >(); - Position media_source_position = source_position; - - List* media_queries = parse_media_queries(); - - if (!peek< exactly<'{'> >()) { - error("expected '{' in media query"); - } - Block* block = parse_block(); - - return new (ctx.mem) Media_Block(path, media_source_position, media_queries, block); - } - - List* Parser::parse_media_queries() - { - List* media_queries = new (ctx.mem) List(path, source_position, 0, List::COMMA); - if (!peek< exactly<'{'> >()) (*media_queries) << parse_media_query(); - while (lex< exactly<','> >()) (*media_queries) << parse_media_query(); - return media_queries; - } - - // Expression* Parser::parse_media_query() - Media_Query* Parser::parse_media_query() - { - Media_Query* media_query = new (ctx.mem) Media_Query(path, source_position); - - if (lex< exactly< not_kwd > >()) media_query->is_negated(true); - else if (lex< exactly< only_kwd > >()) media_query->is_restricted(true); - - if (peek< identifier_schema >()) media_query->media_type(parse_identifier_schema()); - else if (lex< identifier >()) media_query->media_type(new (ctx.mem) String_Constant(path, source_position, lexed)); - else (*media_query) << parse_media_expression(); - - while (lex< exactly< and_kwd > >()) (*media_query) << parse_media_expression(); - - return media_query; - } - - Media_Query_Expression* Parser::parse_media_expression() - { - if (peek< identifier_schema >()) { - String* ss = parse_identifier_schema(); - return new (ctx.mem) Media_Query_Expression(path, source_position, ss, 0, true); - } - if (!lex< exactly<'('> >()) { - error("media query expression must begin with '('"); - } - Expression* feature = 0; - if (peek< exactly<')'> >()) { - error("media feature required in media query expression"); - } - feature = parse_expression(); - Expression* expression = 0; - if (lex< exactly<':'> >()) { - expression = parse_list(); - } - if (!lex< exactly<')'> >()) { - error("unclosed parenthesis in media query expression"); - } - return new (ctx.mem) Media_Query_Expression(path, feature->position(), feature, expression); - } - - At_Rule* Parser::parse_at_rule() - { - lex<at_keyword>(); - string kwd(lexed); - Position at_source_position = source_position; - Selector* sel = 0; - Selector_Lookahead lookahead = lookahead_for_extension_target(position); - if (lookahead.found) { - if (lookahead.has_interpolants) { - sel = parse_selector_schema(lookahead.found); - } - else { - sel = parse_selector_group(); - } - } - Block* body = 0; - if (peek< exactly<'{'> >()) body = parse_block(); - return new (ctx.mem) At_Rule(path, at_source_position, kwd, sel, body); - } - - Warning* Parser::parse_warning() - { - lex< warn >(); - return new (ctx.mem) Warning(path, source_position, parse_list()); - } - - Selector_Lookahead Parser::lookahead_for_selector(const char* start) - { - const char* p = start ? start : position; - const char* q; - bool saw_interpolant = false; - - while ((q = peek< identifier >(p)) || - (q = peek< type_selector >(p)) || - (q = peek< id_name >(p)) || - (q = peek< class_name >(p)) || - (q = peek< sequence< pseudo_prefix, identifier > >(p)) || - (q = peek< percentage >(p)) || - (q = peek< dimension >(p)) || - (q = peek< string_constant >(p)) || - (q = peek< exactly<'*'> >(p)) || - (q = peek< exactly<'('> >(p)) || - (q = peek< exactly<')'> >(p)) || - (q = peek< exactly<'['> >(p)) || - (q = peek< exactly<']'> >(p)) || - (q = peek< exactly<'+'> >(p)) || - (q = peek< exactly<'~'> >(p)) || - (q = peek< exactly<'>'> >(p)) || - (q = peek< exactly<','> >(p)) || - (q = peek< binomial >(p)) || - (q = peek< sequence< optional<sign>, - optional<digits>, - exactly<'n'> > >(p)) || - (q = peek< sequence< optional<sign>, - digits > >(p)) || - (q = peek< number >(p)) || - (q = peek< exactly<'&'> >(p)) || - (q = peek< exactly<'%'> >(p)) || - (q = peek< alternatives<exact_match, - class_match, - dash_match, - prefix_match, - suffix_match, - substring_match> >(p)) || - (q = peek< sequence< exactly<'.'>, interpolant > >(p)) || - (q = peek< sequence< exactly<'#'>, interpolant > >(p)) || - (q = peek< sequence< exactly<'-'>, interpolant > >(p)) || - (q = peek< sequence< pseudo_prefix, interpolant > >(p)) || - (q = peek< interpolant >(p))) { - p = q; - if (*(p - 1) == '}') saw_interpolant = true; - } - - Selector_Lookahead result; - result.found = peek< exactly<'{'> >(p) ? p : 0; - result.has_interpolants = saw_interpolant; - - return result; - } - - Selector_Lookahead Parser::lookahead_for_extension_target(const char* start) - { - const char* p = start ? start : position; - const char* q; - bool saw_interpolant = false; - bool saw_stuff = false; - - while ((q = peek< identifier >(p)) || - (q = peek< type_selector >(p)) || - (q = peek< id_name >(p)) || - (q = peek< class_name >(p)) || - (q = peek< sequence< pseudo_prefix, identifier > >(p)) || - (q = peek< percentage >(p)) || - (q = peek< dimension >(p)) || - (q = peek< string_constant >(p)) || - (q = peek< exactly<'*'> >(p)) || - (q = peek< exactly<'('> >(p)) || - (q = peek< exactly<')'> >(p)) || - (q = peek< exactly<'['> >(p)) || - (q = peek< exactly<']'> >(p)) || - (q = peek< exactly<'+'> >(p)) || - (q = peek< exactly<'~'> >(p)) || - (q = peek< exactly<'>'> >(p)) || - (q = peek< exactly<','> >(p)) || - (q = peek< binomial >(p)) || - (q = peek< sequence< optional<sign>, - optional<digits>, - exactly<'n'> > >(p)) || - (q = peek< sequence< optional<sign>, - digits > >(p)) || - (q = peek< number >(p)) || - (q = peek< exactly<'&'> >(p)) || - (q = peek< exactly<'%'> >(p)) || - (q = peek< alternatives<exact_match, - class_match, - dash_match, - prefix_match, - suffix_match, - substring_match> >(p)) || - (q = peek< sequence< exactly<'.'>, interpolant > >(p)) || - (q = peek< sequence< exactly<'#'>, interpolant > >(p)) || - (q = peek< sequence< exactly<'-'>, interpolant > >(p)) || - (q = peek< sequence< pseudo_prefix, interpolant > >(p)) || - (q = peek< interpolant >(p))) { - p = q; - if (*(p - 1) == '}') saw_interpolant = true; - saw_stuff = true; - } - - Selector_Lookahead result; - result.found = peek< alternatives< exactly<';'>, exactly<'}'>, exactly<'{'> > >(p) && saw_stuff ? p : 0; - result.has_interpolants = saw_interpolant; - - return result; - } - - void Parser::read_bom() - { - size_t skip = 0; - string encoding; - bool utf_8 = false; - switch ((unsigned char) source[0]) { - case 0xEF: - skip = check_bom_chars(source, end, utf_8_bom, 3); - encoding = "UTF-8"; - utf_8 = true; - break; - case 0xFE: - skip = check_bom_chars(source, end, utf_16_bom_be, 2); - encoding = "UTF-16 (big endian)"; - break; - case 0xFF: - skip = check_bom_chars(source, end, utf_16_bom_le, 2); - skip += (skip ? check_bom_chars(source, end, utf_32_bom_le, 4) : 0); - encoding = (skip == 2 ? "UTF-16 (little endian)" : "UTF-32 (little endian)"); - break; - case 0x00: - skip = check_bom_chars(source, end, utf_32_bom_be, 4); - encoding = "UTF-32 (big endian)"; - break; - case 0x2B: - skip = check_bom_chars(source, end, utf_7_bom_1, 4) - | check_bom_chars(source, end, utf_7_bom_2, 4) - | check_bom_chars(source, end, utf_7_bom_3, 4) - | check_bom_chars(source, end, utf_7_bom_4, 4) - | check_bom_chars(source, end, utf_7_bom_5, 5); - encoding = "UTF-7"; - break; - case 0xF7: - skip = check_bom_chars(source, end, utf_1_bom, 3); - encoding = "UTF-1"; - break; - case 0xDD: - skip = check_bom_chars(source, end, utf_ebcdic_bom, 4); - encoding = "UTF-EBCDIC"; - break; - case 0x0E: - skip = check_bom_chars(source, end, scsu_bom, 3); - encoding = "SCSU"; - break; - case 0xFB: - skip = check_bom_chars(source, end, bocu_1_bom, 3); - encoding = "BOCU-1"; - break; - case 0x84: - skip = check_bom_chars(source, end, gb_18030_bom, 4); - encoding = "GB-18030"; - break; - } - if (skip > 0 && !utf_8) error("only UTF-8 documents are currently supported; your document appears to be " + encoding); - position += skip; - } - - size_t check_bom_chars(const char* src, const char *end, const unsigned char* bom, size_t len) - { - size_t skip = 0; - if (src + len > end) return 0; - for (size_t i = 0; i < len; ++i, ++skip) { - if ((unsigned char) src[i] != bom[i]) return 0; - } - return skip; - } - - - Expression* Parser::fold_operands(Expression* base, vector<Expression*>& operands, Binary_Expression::Type op) - { - for (size_t i = 0, S = operands.size(); i < S; ++i) { - base = new (ctx.mem) Binary_Expression(path, source_position, op, base, operands[i]); - Binary_Expression* b = static_cast<Binary_Expression*>(base); - if (op == Binary_Expression::DIV && b->left()->is_delayed() && b->right()->is_delayed()) { - base->is_delayed(true); - } - else { - b->left()->is_delayed(false); - b->right()->is_delayed(false); - } - } - return base; - } - - Expression* Parser::fold_operands(Expression* base, vector<Expression*>& operands, vector<Binary_Expression::Type>& ops) - { - for (size_t i = 0, S = operands.size(); i < S; ++i) { - base = new (ctx.mem) Binary_Expression(path, base->position(), ops[i], base, operands[i]); - Binary_Expression* b = static_cast<Binary_Expression*>(base); - if (ops[i] == Binary_Expression::DIV && b->left()->is_delayed() && b->right()->is_delayed()) { - base->is_delayed(true); - } - else { - b->left()->is_delayed(false); - b->right()->is_delayed(false); - } - } - return base; - } - - void Parser::error(string msg, Position pos) - { - throw Error(Error::syntax, path, pos.line ? pos : source_position, msg); - } - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/parser.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/parser.hpp deleted file mode 100644 index e7201542..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/parser.hpp +++ /dev/null @@ -1,239 +0,0 @@ -#define SASS_PARSER - -#include <vector> -#include <map> - -#ifndef SASS_PRELEXER -#include "prelexer.hpp" -#endif - -#ifndef SASS_TOKEN -#include "token.hpp" -#endif - -#ifndef SASS_CONTEXT -#include "context.hpp" -#endif - -#ifndef SASS_AST -#include "ast.hpp" -#endif - -#ifndef SASS_POSITION -#include "position.hpp" -#endif - -#include <iostream> - -struct Selector_Lookahead { - const char* found; - bool has_interpolants; -}; - -namespace Sass { - using std::string; - using std::vector; - using std::map; - using namespace Prelexer; - - class Parser { - public: - class AST_Node; - - enum Syntactic_Context { nothing, mixin_def, function_def }; - - Context& ctx; - vector<Syntactic_Context> stack; - const char* source; - const char* position; - const char* end; - string path; - size_t column; - Position source_position; - - - Token lexed; - - Parser(Context& ctx, string path, Position source_position) - : ctx(ctx), stack(vector<Syntactic_Context>()), - source(0), position(0), end(0), path(path), column(1), source_position(source_position) - { stack.push_back(nothing); } - - static Parser from_string(string src, Context& ctx, string path = "", Position source_position = Position()); - static Parser from_c_str(const char* src, Context& ctx, string path = "", Position source_position = Position()); - static Parser from_token(Token t, Context& ctx, string path = "", Position source_position = Position()); - -#ifdef __clang__ - - // lex and peak uses the template parameter to branch on the action, which - // triggers clangs tautological comparison on the single-comparison - // branches. This is not a bug, just a merging of behaviour into - // one function - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wtautological-compare" - -#endif - - template <prelexer mx> - const char* peek(const char* start = 0) - { - if (!start) start = position; - const char* after_whitespace; - if (mx == block_comment) { - after_whitespace = // start; - zero_plus< alternatives<spaces, line_comment> >(start); - } - else if (/*mx == ancestor_of ||*/ mx == no_spaces) { - after_whitespace = position; - } - else if (mx == spaces || mx == ancestor_of) { - after_whitespace = mx(start); - if (after_whitespace) { - return after_whitespace; - } - else { - return 0; - } - } - else if (mx == optional_spaces) { - after_whitespace = optional_spaces(start); - } - else { - after_whitespace = spaces_and_comments(start); - } - const char* after_token = mx(after_whitespace); - if (after_token) { - return after_token; - } - else { - return 0; - } - } - - template <prelexer mx> - const char* lex() - { - const char* after_whitespace; - if (mx == block_comment) { - after_whitespace = // position; - zero_plus< alternatives<spaces, line_comment> >(position); - } - else if (mx == ancestor_of || mx == no_spaces) { - after_whitespace = position; - } - else if (mx == spaces) { - after_whitespace = spaces(position); - if (after_whitespace) { - source_position.line += count_interval<'\n'>(position, after_whitespace); - lexed = Token(position, after_whitespace); - return position = after_whitespace; - } - else { - return 0; - } - } - else if (mx == optional_spaces) { - after_whitespace = optional_spaces(position); - } - else { - after_whitespace = spaces_and_comments(position); - } - const char* after_token = mx(after_whitespace); - if (after_token) { - size_t previous_line = source_position.line; - source_position.line += count_interval<'\n'>(position, after_token); - - size_t whitespace = 0; - const char* ptr = after_whitespace - 1; - while (ptr >= position) { - if (*ptr == '\n') - break; - whitespace++; - ptr--; - } - if (previous_line != source_position.line) { - column = 1; - } - - source_position.column = column + whitespace; - column += after_token - after_whitespace + whitespace; - lexed = Token(after_whitespace, after_token); - - return position = after_token; - } - else { - return 0; - } - } - -#ifdef __clang__ - -#pragma clang diagnostic pop - -#endif - - void error(string msg, Position pos = Position()); - void read_bom(); - - Block* parse(); - Import* parse_import(); - Definition* parse_definition(); - Parameters* parse_parameters(); - Parameter* parse_parameter(); - Mixin_Call* parse_mixin_call(); - Arguments* parse_arguments(); - Argument* parse_argument(); - Assignment* parse_assignment(); - Propset* parse_propset(); - Ruleset* parse_ruleset(Selector_Lookahead lookahead); - Selector_Schema* parse_selector_schema(const char* end_of_selector); - Selector_List* parse_selector_group(); - Complex_Selector* parse_selector_combination(); - Compound_Selector* parse_simple_selector_sequence(); - Simple_Selector* parse_simple_selector(); - Negated_Selector* parse_negated_selector(); - Pseudo_Selector* parse_pseudo_selector(); - Attribute_Selector* parse_attribute_selector(); - Block* parse_block(); - Declaration* parse_declaration(); - Expression* parse_list(); - Expression* parse_comma_list(); - Expression* parse_space_list(); - Expression* parse_disjunction(); - Expression* parse_conjunction(); - Expression* parse_relation(); - Expression* parse_expression(); - Expression* parse_term(); - Expression* parse_factor(); - Expression* parse_value(); - Function_Call* parse_function_call(); - Function_Call_Schema* parse_function_call_schema(); - String* parse_string(); - String* parse_ie_stuff(); - String_Schema* parse_value_schema(); - String* parse_identifier_schema(); - String_Schema* parse_url_schema(); - If* parse_if_directive(bool else_if = false); - For* parse_for_directive(); - Each* parse_each_directive(); - While* parse_while_directive(); - Media_Block* parse_media_block(); - List* parse_media_queries(); - Media_Query* parse_media_query(); - Media_Query_Expression* parse_media_expression(); - At_Rule* parse_at_rule(); - Warning* parse_warning(); - - Selector_Lookahead lookahead_for_selector(const char* start = 0); - Selector_Lookahead lookahead_for_extension_target(const char* start = 0); - - Expression* fold_operands(Expression* base, vector<Expression*>& operands, Binary_Expression::Type op); - Expression* fold_operands(Expression* base, vector<Expression*>& operands, vector<Binary_Expression::Type>& ops); - - void throw_syntax_error(string message, size_t ln = 0); - void throw_read_error(string message, size_t ln = 0); - }; - - size_t check_bom_chars(const char* src, const char *end, const unsigned char* bom, size_t len); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/position.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/position.hpp deleted file mode 100644 index a9086b33..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/position.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#define SASS_POSITION - -#include <cstdlib> - -namespace Sass { - - struct Position { - size_t file; - size_t line; - size_t column; - - Position() - : file(0), line(0), column(0) { } - - Position(const size_t file, const size_t line, const size_t column) - : file(file), line(line), column(column) { } - - Position(const size_t line, const size_t column) - : file(0), line(line), column(column) { } - }; - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/prelexer.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/prelexer.cpp deleted file mode 100644 index 075bb374..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/prelexer.cpp +++ /dev/null @@ -1,479 +0,0 @@ -#include <cctype> -#include <iostream> -#include "constants.hpp" -#include "prelexer.hpp" - - -namespace Sass { - using namespace Constants; - - namespace Prelexer { - using std::cerr; using std::endl; - // Matches zero characters (always succeeds without consuming input). - const char* epsilon(char *src) { - return src; - } - // Matches the empty string. - const char* empty(char *src) { - return *src ? 0 : src; - } - - // Match any single character. - const char* any_char(const char* src) { return *src ? src+1 : src; } - - // Match a single character satisfying the ctype predicates. - const char* space(const char* src) { return std::isspace(*src) ? src+1 : 0; } - const char* alpha(const char* src) { return std::isalpha(*src) ? src+1 : 0; } - const char* digit(const char* src) { return std::isdigit(*src) ? src+1 : 0; } - const char* xdigit(const char* src) { return std::isxdigit(*src) ? src+1 : 0; } - const char* alnum(const char* src) { return std::isalnum(*src) ? src+1 : 0; } - const char* punct(const char* src) { return std::ispunct(*src) ? src+1 : 0; } - // Match multiple ctype characters. - const char* spaces(const char* src) { return one_plus<space>(src); } - const char* alphas(const char* src) { return one_plus<alpha>(src); } - const char* digits(const char* src) { return one_plus<digit>(src); } - const char* xdigits(const char* src) { return one_plus<xdigit>(src); } - const char* alnums(const char* src) { return one_plus<alnum>(src); } - const char* puncts(const char* src) { return one_plus<punct>(src); } - - // Match a line comment. - - const char* line_comment(const char* src) { return to_endl<slash_slash>(src); } - // Match a block comment. - - - const char* block_comment(const char* src) { - return sequence< optional_spaces, delimited_by<slash_star, star_slash, false> >(src); - } - // Match either comment. - const char* comment(const char* src) { - return alternatives<block_comment, line_comment>(src); - } - // Match double- and single-quoted strings. - const char* double_quoted_string(const char* src) { - return delimited_by<'"', '"', true>(src); - } - const char* single_quoted_string(const char* src) { - return delimited_by<'\'', '\'', true>(src); - } - const char* string_constant(const char* src) { - return alternatives<double_quoted_string, single_quoted_string>(src); - } - // Match interpolants. - - - const char* interpolant(const char* src) { - return delimited_by<hash_lbrace, rbrace, false>(src); - } - - // Whitespace handling. - const char* optional_spaces(const char* src) { return optional<spaces>(src); } - const char* optional_comment(const char* src) { return optional<comment>(src); } - const char* spaces_and_comments(const char* src) { - return zero_plus< alternatives<spaces, comment> >(src); - } - const char* no_spaces(const char* src) { - return negate< spaces >(src); - } - - const char* backslash_something(const char* src) { - return sequence< exactly<'\\'>, any_char >(src); - } - - // Match CSS identifiers. - const char* identifier(const char* src) { - return sequence< optional< exactly<'-'> >, - alternatives< alpha, exactly<'_'>, backslash_something >, - zero_plus< alternatives< alnum, - exactly<'-'>, - exactly<'_'>, - backslash_something > > >(src); - } - - // Match CSS selectors. - const char* sel_ident(const char* src) { - return sequence< optional< alternatives< exactly<'-'>, exactly<'|'> > >, - alternatives< alpha, exactly<'_'>, backslash_something, exactly<'|'> >, - zero_plus< alternatives< alnum, - exactly<'-'>, - exactly<'_'>, - exactly<'|'>, - backslash_something > > >(src); - } - - // Match interpolant schemas - const char* identifier_schema(const char* src) { - // follows this pattern: (x*ix*)+ ... well, not quite - return one_plus< sequence< zero_plus< alternatives< identifier, exactly<'-'> > >, - interpolant, - zero_plus< alternatives< identifier, number, exactly<'-'> > > > >(src); - } - const char* value_schema(const char* src) { - // follows this pattern: ([xyz]*i[xyz]*)+ - return one_plus< sequence< zero_plus< alternatives< identifier, percentage, dimension, hex, number, string_constant > >, - interpolant, - zero_plus< alternatives< identifier, percentage, dimension, hex, number, string_constant > > > >(src); - } - const char* filename_schema(const char* src) { - return one_plus< sequence< zero_plus< alternatives< identifier, number, exactly<'.'>, exactly<'/'> > >, - interpolant, - zero_plus< alternatives< identifier, number, exactly<'.'>, exactly<'/'> > > > >(src); - } - - const char* filename(const char* src) { - return one_plus< alternatives< identifier, number, exactly<'.'> > >(src); - } - - // Match CSS '@' keywords. - const char* at_keyword(const char* src) { - return sequence<exactly<'@'>, identifier>(src); - } - - const char* import(const char* src) { - return exactly<import_kwd>(src); - } - - const char* media(const char* src) { - return exactly<media_kwd>(src); - } - - const char* keyframes(const char* src) { - return sequence< exactly<'@'>, optional< vendor_prefix >, exactly< keyframes_kwd > >(src); - } - - const char* vendor_prefix(const char* src) { - return alternatives< exactly< vendor_opera_kwd >, exactly< vendor_webkit_kwd >, exactly< vendor_mozilla_kwd >, exactly< vendor_ms_kwd >, exactly< vendor_khtml_kwd > >(src); - } - - const char* keyf(const char* src) { - return one_plus< alternatives< to, from, percentage > >(src); - } - - const char* mixin(const char* src) { - return exactly<mixin_kwd>(src); - } - - const char* function(const char* src) { - return exactly<function_kwd>(src); - } - - const char* return_directive(const char* src) { - return exactly<return_kwd>(src); - } - - const char* include(const char* src) { - return exactly<include_kwd>(src); - } - - const char* content(const char* src) { - return exactly<content_kwd>(src); - } - - const char* extend(const char* src) { - return exactly<extend_kwd>(src); - } - - - const char* if_directive(const char* src) { - return exactly<if_kwd>(src); - } - - const char* else_directive(const char* src) { - return exactly<else_kwd>(src); - } - const char* elseif_directive(const char* src) { - return sequence< else_directive, - spaces_and_comments, - exactly< if_after_else_kwd > >(src); - } - - const char* for_directive(const char* src) { - return exactly<for_kwd>(src); - } - - const char* from(const char* src) { - return exactly<from_kwd>(src); - } - - const char* to(const char* src) { - return exactly<to_kwd>(src); - } - - const char* through(const char* src) { - return exactly<through_kwd>(src); - } - - const char* each_directive(const char* src) { - return exactly<each_kwd>(src); - } - - const char* in(const char* src) { - return exactly<in_kwd>(src); - } - - const char* while_directive(const char* src) { - return exactly<while_kwd>(src); - } - - const char* name(const char* src) { - return one_plus< alternatives< alnum, - exactly<'-'>, - exactly<'_'> > >(src); - } - - const char* warn(const char* src) { - return exactly<warn_kwd>(src); - } - - const char* directive(const char* src) { - return sequence< exactly<'@'>, identifier >(src); - } - - const char* null(const char* src) { - return exactly<null_kwd>(src); - } - - // Match CSS type selectors - const char* namespace_prefix(const char* src) { - return sequence< optional< alternatives< identifier, exactly<'*'> > >, - exactly<'|'> >(src); - } - const char* type_selector(const char* src) { - return sequence< optional<namespace_prefix>, identifier>(src); - } - const char* universal(const char* src) { - return sequence< optional<namespace_prefix>, exactly<'*'> >(src); - } - // Match CSS id names. - const char* id_name(const char* src) { - return sequence<exactly<'#'>, name>(src); - } - // Match CSS class names. - const char* class_name(const char* src) { - return sequence<exactly<'.'>, identifier>(src); - } - // match placeholder selectors - const char* placeholder(const char* src) { - return sequence<exactly<'%'>, identifier>(src); - } - // Match CSS numeric constants. - - const char* sign(const char* src) { - return class_char<sign_chars>(src); - } - const char* unsigned_number(const char* src) { - return alternatives<sequence< zero_plus<digits>, - exactly<'.'>, - one_plus<digits> >, - digits>(src); - } - const char* number(const char* src) { - return sequence< optional<sign>, unsigned_number>(src); - } - const char* coefficient(const char* src) { - return alternatives< sequence< optional<sign>, digits >, - sign >(src); - } - const char* binomial(const char* src) { - return sequence< optional<sign>, - optional<digits>, - exactly<'n'>, optional_spaces, - sign, optional_spaces, - digits >(src); - } - const char* percentage(const char* src) { - return sequence< number, exactly<'%'> >(src); - } - - const char* em(const char* src) { - return sequence< number, exactly<em_kwd> >(src); - } - const char* dimension(const char* src) { - return sequence<number, identifier>(src); - } - const char* hex(const char* src) { - const char* p = sequence< exactly<'#'>, one_plus<xdigit> >(src); - int len = p - src; - return (len != 4 && len != 7) ? 0 : p; - } - - const char* rgb_prefix(const char* src) { - return exactly<rgb_kwd>(src); - } - // Match CSS uri specifiers. - - const char* uri_prefix(const char* src) { - return exactly<url_kwd>(src); - } - // TODO: rename the following two functions - const char* uri(const char* src) { - return sequence< exactly<url_kwd>, - optional<spaces>, - string_constant, - optional<spaces>, - exactly<')'> >(src); - } - const char* url_value(const char* src) { - return sequence< optional< sequence< identifier, exactly<':'> > >, // optional protocol - one_plus< sequence< zero_plus< exactly<'/'> >, filename > >, // one or more folders and/or trailing filename - optional< exactly<'/'> > >(src); - } - const char* url_schema(const char* src) { - return sequence< optional< sequence< identifier, exactly<':'> > >, // optional protocol - filename_schema >(src); // optional trailing slash - } - // Match CSS "!important" keyword. - const char* important(const char* src) { - return sequence< exactly<'!'>, - spaces_and_comments, - exactly<important_kwd> >(src); - } - // Match Sass "!default" keyword. - const char* default_flag(const char* src) { - return sequence< exactly<'!'>, - spaces_and_comments, - exactly<default_kwd> >(src); - } - // Match CSS pseudo-class/element prefixes. - const char* pseudo_prefix(const char* src) { - return sequence< exactly<':'>, optional< exactly<':'> > >(src); - } - // Match CSS function call openers. - const char* functional_schema(const char* src) { - return sequence< identifier_schema, exactly<'('> >(src); - } - const char* functional(const char* src) { - return sequence< identifier, exactly<'('> >(src); - } - // Match the CSS negation pseudo-class. - const char* pseudo_not(const char* src) { - return exactly< pseudo_not_kwd >(src); - } - // Match CSS 'odd' and 'even' keywords for functional pseudo-classes. - const char* even(const char* src) { - return exactly<even_kwd>(src); - } - const char* odd(const char* src) { - return exactly<odd_kwd>(src); - } - // Match CSS attribute-matching operators. - const char* exact_match(const char* src) { return exactly<'='>(src); } - const char* class_match(const char* src) { return exactly<tilde_equal>(src); } - const char* dash_match(const char* src) { return exactly<pipe_equal>(src); } - const char* prefix_match(const char* src) { return exactly<caret_equal>(src); } - const char* suffix_match(const char* src) { return exactly<dollar_equal>(src); } - const char* substring_match(const char* src) { return exactly<star_equal>(src); } - // Match CSS combinators. - const char* adjacent_to(const char* src) { - return sequence< optional_spaces, exactly<'+'> >(src); - } - const char* precedes(const char* src) { - return sequence< optional_spaces, exactly<'~'> >(src); - } - const char* parent_of(const char* src) { - return sequence< optional_spaces, exactly<'>'> >(src); - } - const char* ancestor_of(const char* src) { - return sequence< spaces, negate< exactly<'{'> > >(src); - } - - // Match SCSS variable names. - const char* variable(const char* src) { - return sequence<exactly<'$'>, name>(src); - } - - // Match Sass boolean keywords. - const char* true_val(const char* src) { - return exactly<true_kwd>(src); - } - const char* false_val(const char* src) { - return exactly<false_kwd>(src); - } - const char* and_op(const char* src) { - return exactly<and_kwd>(src); - } - const char* or_op(const char* src) { - return exactly<or_kwd>(src); - } - const char* not_op(const char* src) { - return exactly<not_kwd>(src); - } - const char* eq_op(const char* src) { - return exactly<eq>(src); - } - const char* neq_op(const char* src) { - return exactly<neq>(src); - } - const char* gt_op(const char* src) { - return exactly<gt>(src); - } - const char* gte_op(const char* src) { - return exactly<gte>(src); - } - const char* lt_op(const char* src) { - return exactly<lt>(src); - } - const char* lte_op(const char* src) { - return exactly<lte>(src); - } - - // match the IE syntax - const char* progid(const char* src) { - return exactly<progid_kwd>(src); - } - - const char* ie_stuff(const char* src) { - return sequence< progid, exactly<':'>, alternatives< identifier_schema, identifier >, one_plus< sequence< exactly<'.'>, alternatives< identifier_schema, identifier > > >, delimited_by<'(', ';', true> >(src); - } - - // const char* ie_args(const char* src) { - // return sequence< alternatives< ie_keyword_arg, value_schema, string_constant, interpolant, number, identifier, delimited_by< '(', ')', true> >, - // zero_plus< sequence< spaces_and_comments, exactly<','>, spaces_and_comments, alternatives< ie_keyword_arg, value_schema, string_constant, interpolant, number, identifier, delimited_by<'(', ')', true> > > > >(src); - // } - - const char* ie_keyword_arg(const char* src) { - return sequence< alternatives< variable, identifier_schema, identifier >, spaces_and_comments, exactly<'='>, spaces_and_comments, alternatives< variable, identifier_schema, identifier, number > >(src); - } - - // Path matching functions. - const char* folder(const char* src) { - return sequence< zero_plus< any_char_except<'/'> >, - exactly<'/'> >(src); - } - const char* folders(const char* src) { - return zero_plus< folder >(src); - } - - const char* chunk(const char* src) { - char inside_str = 0; - const char* p = src; - size_t depth = 0; - while (true) { - if (!*p) { - return 0; - } - else if (!inside_str && (*p == '"' || *p == '\'')) { - inside_str = *p; - } - else if (*p == inside_str && *(p-1) != '\\') { - inside_str = 0; - } - else if (*p == '(' && !inside_str) { - ++depth; - } - else if (*p == ')' && !inside_str) { - if (depth == 0) return p; - else --depth; - } - ++p; - } - // unreachable - return 0; - } - - // const char* balanced_parens(const char* src) { - // size_t depth = 0; - // while (*src - // } - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/prelexer.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/prelexer.hpp deleted file mode 100644 index b8b6d471..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/prelexer.hpp +++ /dev/null @@ -1,472 +0,0 @@ -#define SASS_PRELEXER - -namespace Sass { - namespace Prelexer { - - typedef int (*ctype_predicate)(int); - typedef const char* (*prelexer)(const char*); - - // Match a single character literal. - template <char pre> - const char* exactly(const char* src) { - return *src == pre ? src + 1 : 0; - } - - // Match a string constant. - template <const char* prefix> - const char* exactly(const char* src) { - const char* pre = prefix; - while (*pre && *src == *pre) ++src, ++pre; - return *pre ? 0 : src; - } - - // Match a single character that satifies the supplied ctype predicate. - template <ctype_predicate pred> - const char* class_char(const char* src) { - return pred(*src) ? src + 1 : 0; - } - - // Match a single character that is a member of the supplied class. - template <const char* char_class> - const char* class_char(const char* src) { - const char* cc = char_class; - while (*cc && *src != *cc) ++cc; - return *cc ? src + 1 : 0; - } - - // Match a sequence of characters that all satisfy the supplied ctype predicate. - template <ctype_predicate pred> - const char* class_chars(const char* src) { - const char* p = src; - while (pred(*p)) ++p; - return p == src ? 0 : p; - } - - // Match a sequence of characters that are all members of the supplied class. - template <const char* char_class> - const char* class_chars(const char* src) { - const char* p = src; - while (class_char<char_class>(p)) ++p; - return p == src ? 0 : p; - } - - // Match a sequence of characters up to the next newline. - template <const char* prefix> - const char* to_endl(const char* src) { - if (!(src = exactly<prefix>(src))) return 0; - while (*src && *src != '\n') ++src; - return src; - } - - // Match a sequence of characters delimited by the supplied chars. - template <char beg, char end, bool esc> - const char* delimited_by(const char* src) { - src = exactly<beg>(src); - if (!src) return 0; - const char* stop; - while (1) { - if (!*src) return 0; - stop = exactly<end>(src); - if (stop && (!esc || *(src - 1) != '\\')) return stop; - src = stop ? stop : src + 1; - } - } - - // Match a sequence of characters delimited by the supplied strings. - template <const char* beg, const char* end, bool esc> - const char* delimited_by(const char* src) { - src = exactly<beg>(src); - if (!src) return 0; - const char* stop; - while (1) { - if (!*src) return 0; - stop = exactly<end>(src); - if (stop && (!esc || *(src - 1) != '\\')) return stop; - src = stop ? stop : src + 1; - } - } - - // Match any single character. - const char* any_char(const char* src); - // Match any single character except the supplied one. - template <char c> - const char* any_char_except(const char* src) { - return (*src && *src != c) ? src+1 : 0; - } - - // Matches zero characters (always succeeds without consuming input). - const char* epsilon(const char*); - - // Matches the empty string. - const char* empty(const char*); - - // Succeeds of the supplied matcher fails, and vice versa. - template <prelexer mx> - const char* negate(const char* src) { - return mx(src) ? 0 : src; - } - - // Tries the matchers in sequence and returns the first match (or none) - template <prelexer mx1, prelexer mx2> - const char* alternatives(const char* src) { - const char* rslt; - (rslt = mx1(src)) || (rslt = mx2(src)); - return rslt; - } - - // Same as above, but with 3 arguments. - template <prelexer mx1, prelexer mx2, prelexer mx3> - const char* alternatives(const char* src) { - const char* rslt; - (rslt = mx1(src)) || (rslt = mx2(src)) || (rslt = mx3(src)); - return rslt; - } - - // Same as above, but with 4 arguments. - template <prelexer mx1, prelexer mx2, prelexer mx3, prelexer mx4> - const char* alternatives(const char* src) { - const char* rslt; - (rslt = mx1(src)) || (rslt = mx2(src)) || - (rslt = mx3(src)) || (rslt = mx4(src)); - return rslt; - } - - // Same as above, but with 5 arguments. - template <prelexer mx1, prelexer mx2, prelexer mx3, - prelexer mx4, prelexer mx5> - const char* alternatives(const char* src) { - const char* rslt; - (rslt = mx1(src)) || (rslt = mx2(src)) || (rslt = mx3(src)) || - (rslt = mx4(src)) || (rslt = mx5(src)); - return rslt; - } - - // Same as above, but with 6 arguments. - template <prelexer mx1, prelexer mx2, prelexer mx3, - prelexer mx4, prelexer mx5, prelexer mx6> - const char* alternatives(const char* src) { - const char* rslt; - (rslt = mx1(src)) || (rslt = mx2(src)) || (rslt = mx3(src)) || - (rslt = mx4(src)) || (rslt = mx5(src)) || (rslt = mx6(src)); - return rslt; - } - - // Same as above, but with 7 arguments. - template <prelexer mx1, prelexer mx2, - prelexer mx3, prelexer mx4, - prelexer mx5, prelexer mx6, - prelexer mx7> - const char* alternatives(const char* src) { - const char* rslt = src; - (rslt = mx1(rslt)) || (rslt = mx2(rslt)) || - (rslt = mx3(rslt)) || (rslt = mx4(rslt)) || - (rslt = mx5(rslt)) || (rslt = mx6(rslt)) || - (rslt = mx7(rslt)); - return rslt; - } - - // Same as above, but with 8 arguments. - template <prelexer mx1, prelexer mx2, - prelexer mx3, prelexer mx4, - prelexer mx5, prelexer mx6, - prelexer mx7, prelexer mx8> - const char* alternatives(const char* src) { - const char* rslt = src; - (rslt = mx1(rslt)) || (rslt = mx2(rslt)) || - (rslt = mx3(rslt)) || (rslt = mx4(rslt)) || - (rslt = mx5(rslt)) || (rslt = mx6(rslt)) || - (rslt = mx7(rslt)) || (rslt = mx8(rslt)); - return rslt; - } - - // Tries the matchers in sequence and succeeds if they all succeed. - template <prelexer mx1, prelexer mx2> - const char* sequence(const char* src) { - const char* rslt = src; - (rslt = mx1(rslt)) && (rslt = mx2(rslt)); - return rslt; - } - - // Same as above, but with 3 arguments. - template <prelexer mx1, prelexer mx2, prelexer mx3> - const char* sequence(const char* src) { - const char* rslt = src; - (rslt = mx1(rslt)) && (rslt = mx2(rslt)) && (rslt = mx3(rslt)); - return rslt; - } - - // Same as above, but with 4 arguments. - template <prelexer mx1, prelexer mx2, prelexer mx3, prelexer mx4> - const char* sequence(const char* src) { - const char* rslt = src; - (rslt = mx1(rslt)) && (rslt = mx2(rslt)) && - (rslt = mx3(rslt)) && (rslt = mx4(rslt)); - return rslt; - } - - // Same as above, but with 5 arguments. - template <prelexer mx1, prelexer mx2, - prelexer mx3, prelexer mx4, - prelexer mx5> - const char* sequence(const char* src) { - const char* rslt = src; - (rslt = mx1(rslt)) && (rslt = mx2(rslt)) && - (rslt = mx3(rslt)) && (rslt = mx4(rslt)) && - (rslt = mx5(rslt)); - return rslt; - } - - // Same as above, but with 6 arguments. - template <prelexer mx1, prelexer mx2, - prelexer mx3, prelexer mx4, - prelexer mx5, prelexer mx6> - const char* sequence(const char* src) { - const char* rslt = src; - (rslt = mx1(rslt)) && (rslt = mx2(rslt)) && - (rslt = mx3(rslt)) && (rslt = mx4(rslt)) && - (rslt = mx5(rslt)) && (rslt = mx6(rslt)); - return rslt; - } - - // Same as above, but with 7 arguments. - template <prelexer mx1, prelexer mx2, - prelexer mx3, prelexer mx4, - prelexer mx5, prelexer mx6, - prelexer mx7> - const char* sequence(const char* src) { - const char* rslt = src; - (rslt = mx1(rslt)) && (rslt = mx2(rslt)) && - (rslt = mx3(rslt)) && (rslt = mx4(rslt)) && - (rslt = mx5(rslt)) && (rslt = mx6(rslt)) && - (rslt = mx7(rslt)); - return rslt; - } - - // Match a pattern or not. Always succeeds. - template <prelexer mx> - const char* optional(const char* src) { - const char* p = mx(src); - return p ? p : src; - } - - // Match zero or more of the supplied pattern - template <prelexer mx> - const char* zero_plus(const char* src) { - const char* p = mx(src); - while (p) src = p, p = mx(src); - return src; - } - - // Match one or more of the supplied pattern - template <prelexer mx> - const char* one_plus(const char* src) { - const char* p = mx(src); - if (!p) return 0; - while (p) src = p, p = mx(src); - return src; - } - - // Match a single character satisfying the ctype predicates. - const char* space(const char* src); - const char* alpha(const char* src); - const char* digit(const char* src); - const char* xdigit(const char* src); - const char* alnum(const char* src); - const char* punct(const char* src); - // Match multiple ctype characters. - const char* spaces(const char* src); - const char* alphas(const char* src); - const char* digits(const char* src); - const char* xdigits(const char* src); - const char* alnums(const char* src); - const char* puncts(const char* src); - - // Match a line comment. - const char* line_comment(const char* src); - // Match a block comment. - const char* block_comment(const char* src); - // Match either. - const char* comment(const char* src); - // Match double- and single-quoted strings. - const char* double_quoted_string(const char* src); - const char* single_quoted_string(const char* src); - const char* string_constant(const char* src); - // Match interpolants. - const char* interpolant(const char* src); - - // Whitespace handling. - const char* optional_spaces(const char* src); - const char* optional_comment(const char* src); - const char* spaces_and_comments(const char* src); - const char* no_spaces(const char* src); - - const char* backslash_something(const char* src); - - // Match a CSS identifier. - const char* identifier(const char* src); - // Match selector names. - const char* sel_ident(const char* src); - // Match interpolant schemas - const char* identifier_schema(const char* src); - const char* value_schema(const char* src); - const char* filename(const char* src); - const char* filename_schema(const char* src); - const char* url_schema(const char* src); - const char* url_value(const char* src); - const char* vendor_prefix(const char* src); - // Match CSS '@' keywords. - const char* at_keyword(const char* src); - const char* import(const char* src); - const char* media(const char* src); - const char* keyframes(const char* src); - const char* keyf(const char* src); - const char* mixin(const char* src); - const char* function(const char* src); - const char* return_directive(const char* src); - const char* include(const char* src); - const char* content(const char* src); - const char* extend(const char* src); - - const char* if_directive(const char* src); - const char* else_directive(const char* src); - const char* elseif_directive(const char* src); - - const char* for_directive(const char* src); - const char* from(const char* src); - const char* to(const char* src); - const char* through(const char* src); - - const char* each_directive(const char* src); - const char* in(const char* src); - - const char* while_directive(const char* src); - - const char* warn(const char* src); - - const char* directive(const char* src); - const char* at_keyword(const char* src); - - const char* null(const char* src); - - // Match CSS type selectors - const char* namespace_prefix(const char* src); - const char* type_selector(const char* src); - const char* universal(const char* src); - // Match CSS id names. - const char* id_name(const char* src); - // Match CSS class names. - const char* class_name(const char* src); - // Match placeholder selectors. - const char* placeholder(const char* src); - // Match CSS numeric constants. - const char* sign(const char* src); - const char* unsigned_number(const char* src); - const char* number(const char* src); - const char* coefficient(const char* src); - const char* binomial(const char* src); - const char* percentage(const char* src); - const char* dimension(const char* src); - const char* hex(const char* src); - const char* rgb_prefix(const char* src); - // Match CSS uri specifiers. - const char* uri_prefix(const char* src); - const char* uri(const char* src); - const char* url(const char* src); - // Match CSS "!important" keyword. - const char* important(const char* src); - // Match Sass "!default" keyword. - const char* default_flag(const char* src); - // Match CSS pseudo-class/element prefixes - const char* pseudo_prefix(const char* src); - // Match CSS function call openers. - const char* functional(const char* src); - const char* functional_schema(const char* src); - const char* pseudo_not(const char* src); - // Match CSS 'odd' and 'even' keywords for functional pseudo-classes. - const char* even(const char* src); - const char* odd(const char* src); - // Match CSS attribute-matching operators. - const char* exact_match(const char* src); - const char* class_match(const char* src); - const char* dash_match(const char* src); - const char* prefix_match(const char* src); - const char* suffix_match(const char* src); - const char* substring_match(const char* src); - // Match CSS combinators. - const char* adjacent_to(const char* src); - const char* precedes(const char* src); - const char* parent_of(const char* src); - const char* ancestor_of(const char* src); - - // Match SCSS variable names. - const char* variable(const char* src); - - // Match Sass boolean keywords. - const char* true_val(const char* src); - const char* false_val(const char* src); - const char* and_op(const char* src); - const char* or_op(const char* src); - const char* not_op(const char* src); - const char* eq_op(const char* src); - const char* neq_op(const char* src); - const char* gt_op(const char* src); - const char* gte_op(const char* src); - const char* lt_op(const char* src); - const char* lte_op(const char* src); - - // IE stuff - const char* ie_stuff(const char* src); - const char* ie_args(const char* src); - const char* ie_keyword_arg(const char* src); - - // Path matching functions. - const char* folder(const char* src); - const char* folders(const char* src); - - // Utility functions for finding and counting characters in a string. - template<char c> - const char* find_first(const char* src) { - while (*src && *src != c) ++src; - return *src ? src : 0; - } - template<prelexer mx> - const char* find_first(const char* src) { - while (*src && !mx(src)) ++src; - return *src ? src : 0; - } - template<prelexer mx> - const char* find_first_in_interval(const char* beg, const char* end) { - while ((beg < end) && *beg) { - if (mx(beg)) return beg; - ++beg; - } - return 0; - } - template <char c> - unsigned int count_interval(const char* beg, const char* end) { - unsigned int counter = 0; - while (beg < end && *beg) { - if (*beg == c) ++counter; - ++beg; - } - return counter; - } - template <prelexer mx> - unsigned int count_interval(const char* beg, const char* end) { - unsigned int counter = 0; - while (beg < end && *beg) { - const char* p; - if ((p = mx(beg))) { - ++counter; - beg = p; - } - else { - ++beg; - } - } - return counter; - } - - const char* chunk(const char* src); - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/sass.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/sass.cpp deleted file mode 100644 index 2ff1377c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/sass.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include <cstdlib> -#include <cstring> -#include <vector> -#include <sstream> - -#ifndef SASS -#include "sass.h" -#endif - -#include "context.hpp" - -#ifndef SASS_ERROR_HANDLING -#include "error_handling.hpp" -#endif - -extern "C" { - using namespace std; - - struct Sass_Context* make_sass_context() - { return (Sass_Context*) calloc(1, sizeof(Sass_Context)); } - - void free_sass_context(struct Sass_Context* ctx) - { - if (ctx->output_string) free(ctx->output_string); - if (ctx->error_message) free(ctx->error_message); - free(ctx); - } - - namespace Sass { - enum Sass_Source { FILE_SOURCE, STRING_SOURCE }; - - static void compile_sass(struct Sass_Context* c_ctx, - Sass::Sass_Source src_option) - { - using namespace Sass; - try { - Context cpp_ctx( - Context::Data().source_c_str (c_ctx->input_string) - - .entry_point (c_ctx->input_path ? - c_ctx->input_path : - "") - - .output_style ((Output_Style) - c_ctx->output_style) - - .source_comments (c_ctx->source_comments) - .source_maps (c_ctx->source_maps) - - .image_path (c_ctx->image_path ? - c_ctx->image_path : - "") - - .include_paths_c_str (c_ctx->include_paths_string) - .include_paths_array (/*c_ctx->include_paths_array*/0) - .include_paths (vector<string>()) - ); - if (src_option == FILE_SOURCE) cpp_ctx.compile_file(); - else cpp_ctx.compile_string(); - c_ctx->error_message = 0; - c_ctx->error_status = 0; - } - catch (Error& e) { - stringstream msg_stream; - msg_stream << e.path << ":" << e.position.line << ": error: " << e.message << endl; - string msg(msg_stream.str()); - char* msg_str = (char*) malloc(msg.size() + 1); - strcpy(msg_str, msg.c_str()); - c_ctx->error_status = 1; - c_ctx->output_string = 0; - c_ctx->error_message = msg_str; - } - catch (bad_alloc& ba) { - stringstream msg_stream; - msg_stream << "Unable to allocate memory: " << ba.what() << endl; - string msg(msg_stream.str()); - char* msg_str = (char*) malloc(msg.size() + 1); - strcpy(msg_str, msg.c_str()); - c_ctx->error_status = 1; - c_ctx->output_string = 0; - c_ctx->error_message = msg_str; - } - } - } - - void compile_sass_file(struct Sass_Context* c_ctx) - { Sass::compile_sass(c_ctx, Sass::FILE_SOURCE); } - - void compile_sass_string(struct Sass_Context* c_ctx) - { Sass::compile_sass(c_ctx, Sass::STRING_SOURCE); } - - - union Sass_Value make_sass_boolean(int val) - { - union Sass_Value v; - v.boolean.tag = SASS_BOOLEAN; - v.boolean.value = val; - return v; - } - - union Sass_Value make_sass_number(double val, const char* unit) - { - union Sass_Value v; - v.number.tag = SASS_NUMBER; - v.number.value = val; - v.number.unit = strdup(unit); - return v; - } - - union Sass_Value make_sass_color(double r, double g, double b, double a) - { - union Sass_Value v; - v.color.tag = SASS_COLOR; - v.color.r = r; - v.color.g = g; - v.color.b = b; - v.color.a = a; - return v; - } - - union Sass_Value make_sass_string(const char* val) - { - union Sass_Value v; - v.string.tag = SASS_STRING; - v.string.value = strdup(val); - return v; - } - - union Sass_Value make_sass_list(size_t len, enum Sass_Separator sep) - { - union Sass_Value v; - v.list.tag = SASS_LIST; - v.list.length = len; - v.list.separator = sep; - v.list.values = (union Sass_Value*) malloc(sizeof(union Sass_Value)*len); - return v; - } - - union Sass_Value make_sass_null() - { - union Sass_Value v; - v.null.tag = SASS_NULL; - return v; - } - - union Sass_Value make_sass_error(const char* msg) - { - union Sass_Value v; - v.error.tag = SASS_ERROR; - v.error.message = strdup(msg); - return v; - } - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/sass.h b/node_modules/gulp-sass/node_modules/node-sass/libsass/sass.h deleted file mode 100644 index 74675f0c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/sass.h +++ /dev/null @@ -1,130 +0,0 @@ -#define SASS - -#include <stddef.h> - -#ifdef __cplusplus -extern "C" { -#endif - -#define SASS_OUTPUT_NESTED 0 -#define SASS_OUTPUT_EXPANDED 1 -#define SASS_OUTPUT_COMPACT 2 -#define SASS_OUTPUT_COMPRESSED 3 -#define SASS_OUTPUT_FORMATTED 4 - -struct Sass_Context { - const char* input_path; - const char* input_string; - char* output_string; - - int error_status; - char* error_message; - - int output_style; - int source_comments; - int source_maps; - const char* image_path; - const char* include_paths_string; - const char** include_paths_array; -}; - -struct Sass_Context* make_sass_context (); -void free_sass_context (struct Sass_Context*); -void compile_sass_file (struct Sass_Context*); -void compile_sass_string (struct Sass_Context*); - -// type tags for Sass values -enum Sass_Tag { - SASS_BOOLEAN, - SASS_NUMBER, - SASS_COLOR, - SASS_STRING, - SASS_LIST, - SASS_NULL, - SASS_ERROR -}; - -// tags for denoting Sass list separators -enum Sass_Separator { - SASS_COMMA, - SASS_SPACE -}; - -// Component structs for the Sass value union type. -// Not meant to be used directly. -struct Sass_Unknown { - enum Sass_Tag tag; -}; - -struct Sass_Boolean { - enum Sass_Tag tag; - int value; -}; - -struct Sass_Number { - enum Sass_Tag tag; - double value; - char* unit; -}; - -struct Sass_Color { - enum Sass_Tag tag; - double r; - double g; - double b; - double a; -}; - -struct Sass_String { - enum Sass_Tag tag; - char* value; -}; - -union Sass_Value; - -struct Sass_List { - enum Sass_Tag tag; - enum Sass_Separator separator; - size_t length; - union Sass_Value* values; -}; - -struct Sass_Null { - enum Sass_Tag tag; -}; - -struct Sass_Error { - enum Sass_Tag tag; - char* message; -}; - -// represention of Sass values in C -union Sass_Value { - struct Sass_Unknown unknown; - struct Sass_Boolean boolean; - struct Sass_Number number; - struct Sass_Color color; - struct Sass_String string; - struct Sass_List list; - struct Sass_Null null; - struct Sass_Error error; -}; - -union Sass_Value make_sass_boolean (int val); -union Sass_Value make_sass_number (double val, const char* unit); -union Sass_Value make_sass_color (double r, double g, double b, double a); -union Sass_Value make_sass_string (const char* val); -union Sass_Value make_sass_list (size_t len, enum Sass_Separator sep); -union Sass_Value make_sass_null (); -union Sass_Value make_sass_error (const char* msg); - -typedef union Sass_Value(*Sass_C_Function)(union Sass_Value); - -struct Sass_C_Function_Descriptor { - const char* signature; - Sass_C_Function function; -}; - -#ifdef __cplusplus -} -#endif diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/sass_interface.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/sass_interface.cpp deleted file mode 100644 index 154eed65..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/sass_interface.cpp +++ /dev/null @@ -1,187 +0,0 @@ -#ifdef _WIN32 -#include <io.h> -#else -#include <unistd.h> -#endif - -#include "sass_interface.h" -#include "context.hpp" - -#ifndef SASS_ERROR_HANDLING -#include "error_handling.hpp" -#endif - -#include <iostream> -#include <sstream> -#include <string> -#include <cstdlib> -#include <cstring> -#include <iostream> - -extern "C" { - using namespace std; - - sass_context* sass_new_context() - { return (sass_context*) calloc(1, sizeof(sass_context)); } - - void free_string_array(char ** arr, int num) { - if(!arr) - return; - - for(int i = 0; i < num; i++) { - free(arr[i]); - } - - free(arr); - } - - void sass_free_context(sass_context* ctx) - { - if (ctx->output_string) free(ctx->output_string); - if (ctx->error_message) free(ctx->error_message); - - free_string_array(ctx->included_files, ctx->num_included_files); - - free(ctx); - } - - sass_file_context* sass_new_file_context() - { return (sass_file_context*) calloc(1, sizeof(sass_file_context)); } - - void sass_free_file_context(sass_file_context* ctx) - { - if (ctx->output_string) free(ctx->output_string); - if (ctx->source_map_string) free(ctx->source_map_string); - if (ctx->source_map_file) free(ctx->source_map_file); - if (ctx->error_message) free(ctx->error_message); - - free_string_array(ctx->included_files, ctx->num_included_files); - - free(ctx); - } - - sass_folder_context* sass_new_folder_context() - { return (sass_folder_context*) calloc(1, sizeof(sass_folder_context)); } - - void sass_free_folder_context(sass_folder_context* ctx) - { - free_string_array(ctx->included_files, ctx->num_included_files); - free(ctx); - } - - void copy_strings(const std::vector<std::string>& strings, char*** array, int* n) { - int num = strings.size(); - char** arr = (char**) malloc(sizeof(char*)* num); - - for(int i = 0; i < num; i++) { - arr[i] = (char*) malloc(sizeof(char) * strings[i].size() + 1); - std::copy(strings[i].begin(), strings[i].end(), arr[i]); - arr[i][strings[i].size()] = '\0'; - } - - *array = arr; - *n = num; - } - - int sass_compile(sass_context* c_ctx) - { - using namespace Sass; - try { - Context cpp_ctx( - Context::Data().source_c_str(c_ctx->source_string) - .entry_point("") - .output_style((Output_Style) c_ctx->options.output_style) - .source_comments(c_ctx->options.source_comments == SASS_SOURCE_COMMENTS_DEFAULT) - .source_maps(false) // Only supported for files. - .image_path(c_ctx->options.image_path) - .include_paths_c_str(c_ctx->options.include_paths) - .include_paths_array(0) - .include_paths(vector<string>()) - ); - c_ctx->output_string = cpp_ctx.compile_string(); - c_ctx->error_message = 0; - c_ctx->error_status = 0; - - copy_strings(cpp_ctx.get_included_files(), &c_ctx->included_files, &c_ctx->num_included_files); - } - catch (Error& e) { - stringstream msg_stream; - msg_stream << e.path << ":" << e.position.line << ": error: " << e.message << endl; - c_ctx->error_message = strdup(msg_stream.str().c_str()); - c_ctx->error_status = 1; - c_ctx->output_string = 0; - } - catch(bad_alloc& ba) { - stringstream msg_stream; - msg_stream << "Unable to allocate memory: " << ba.what() << endl; - c_ctx->error_message = strdup(msg_stream.str().c_str()); - c_ctx->error_status = 1; - c_ctx->output_string = 0; - } - // TO DO: CATCH EVERYTHING ELSE - return 0; - } - - int sass_compile_file(sass_file_context* c_ctx) - { - using namespace Sass; - try { - bool source_maps = false; - string source_map_file = ""; - if (c_ctx->source_map_file && (c_ctx->options.source_comments == SASS_SOURCE_COMMENTS_MAP)) { - source_maps = true; - source_map_file = c_ctx->source_map_file; - } - Context cpp_ctx( - Context::Data().entry_point(c_ctx->input_path) - .output_style((Output_Style) c_ctx->options.output_style) - .source_comments(c_ctx->options.source_comments == SASS_SOURCE_COMMENTS_DEFAULT) - .source_maps(source_maps) - .source_map_file(source_map_file) - .image_path(c_ctx->options.image_path) - .include_paths_c_str(c_ctx->options.include_paths) - .include_paths_array(0) - .include_paths(vector<string>()) - ); - c_ctx->output_string = cpp_ctx.compile_file(); - c_ctx->source_map_string = cpp_ctx.generate_source_map(); - c_ctx->error_message = 0; - c_ctx->error_status = 0; - - copy_strings(cpp_ctx.get_included_files(), &c_ctx->included_files, &c_ctx->num_included_files); - } - catch (Error& e) { - stringstream msg_stream; - msg_stream << e.path << ":" << e.position.line << ": error: " << e.message << endl; - c_ctx->error_message = strdup(msg_stream.str().c_str()); - c_ctx->error_status = 1; - c_ctx->output_string = 0; - c_ctx->source_map_string = 0; - } - catch(bad_alloc& ba) { - stringstream msg_stream; - msg_stream << "Unable to allocate memory: " << ba.what() << endl; - c_ctx->error_message = strdup(msg_stream.str().c_str()); - c_ctx->error_status = 1; - c_ctx->output_string = 0; - c_ctx->source_map_string = 0; - } - catch(string& bad_path) { - // couldn't find the specified file in the include paths; report an error - stringstream msg_stream; - msg_stream << "error reading file \"" << bad_path << "\"" << endl; - c_ctx->error_message = strdup(msg_stream.str().c_str()); - c_ctx->error_status = 1; - c_ctx->output_string = 0; - c_ctx->source_map_string = 0; - } - // TO DO: CATCH EVERYTHING ELSE - return 0; - } - - int sass_compile_folder(sass_folder_context* c_ctx) - { - return 1; - } - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/sass_interface.h b/node_modules/gulp-sass/node_modules/node-sass/libsass/sass_interface.h deleted file mode 100644 index e5a4cb1e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/sass_interface.h +++ /dev/null @@ -1,74 +0,0 @@ -#define SASS_INTERFACE - -#include "sass.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define SASS_STYLE_NESTED 0 -#define SASS_STYLE_EXPANDED 1 -#define SASS_STYLE_COMPACT 2 -#define SASS_STYLE_COMPRESSED 3 - -#define SASS_SOURCE_COMMENTS_NONE 0 -#define SASS_SOURCE_COMMENTS_DEFAULT 1 -#define SASS_SOURCE_COMMENTS_MAP 2 - -struct sass_options { - int output_style; - int source_comments; // really want a bool, but C doesn't have them - const char* include_paths; - const char* image_path; -}; - -struct sass_context { - const char* source_string; - char* output_string; - struct sass_options options; - int error_status; - char* error_message; - struct Sass_C_Function_Data* c_functions; - char** included_files; - int num_included_files; -}; - -struct sass_file_context { - const char* input_path; - char* output_string; - char* source_map_string; - char* source_map_file; - struct sass_options options; - int error_status; - char* error_message; - struct Sass_C_Function_Data* c_functions; - char** included_files; - int num_included_files; -}; - -struct sass_folder_context { - const char* search_path; - const char* output_path; - struct sass_options options; - int error_status; - char* error_message; - struct Sass_C_Function_Data* c_functions; - char** included_files; - int num_included_files; -}; - -struct sass_context* sass_new_context (void); -struct sass_file_context* sass_new_file_context (void); -struct sass_folder_context* sass_new_folder_context (void); - -void sass_free_context (struct sass_context* ctx); -void sass_free_file_context (struct sass_file_context* ctx); -void sass_free_folder_context (struct sass_folder_context* ctx); - -int sass_compile (struct sass_context* ctx); -int sass_compile_file (struct sass_file_context* ctx); -int sass_compile_folder (struct sass_folder_context* ctx); - -#ifdef __cplusplus -} -#endif diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/sassc++.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/sassc++.cpp deleted file mode 100644 index e4aa1491..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/sassc++.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include <cstdlib> -#include <string> -#include <iostream> -#include "context.hpp" - -#ifndef SASS_ERROR_HANDLING -#include "error_handling.hpp" -#endif - -using namespace std; - -int main(int argc, char** argv) -{ - if (argc < 2) { - cout << "Please specify a file on the command line." << endl; - return 1; - } - - string file_name(argv[1]); - - try { - Sass::Context ctx( - Sass::Context::Data().entry_point(file_name) - .output_style(Sass::FORMATTED) - ); - char* result = ctx.compile_file(); - if (result) { - cout << result; - free(result); - } - } - catch (Sass::Error& e) { - cout << e.path << ":" << e.position.line << ": " << e.message << endl; - } - catch (string& msg) { - cout << msg << endl; - } - - return 0; -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/source_map.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/source_map.cpp deleted file mode 100644 index edc81822..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/source_map.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include "source_map.hpp" - -#ifndef SASS_CONTEXT -#include "context.hpp" -#endif - -namespace Sass { - - SourceMap::SourceMap(const string& file) : current_position(Position(1, 1)), file(file) { } - - string SourceMap::generate_source_map(Context* ctx) { - string result = "{\n"; - result += " \"version\": 3,\n"; - result += " \"file\": \"" + file + "\",\n"; - result += " \"sources\": ["; - for (size_t i = 0; i < files.size(); ++i) { - result+="\"" + files[i] + "\","; - } - if (!files.empty()) result.erase(result.length() - 1); - result += "],\n"; - result += " \"names\": [],\n"; - result += " \"mappings\": \"" + serialize_mappings() + "\"\n"; - result += "}"; - - return result; - } - - - string SourceMap::serialize_mappings() { - string result = ""; - - size_t previous_generated_line = 0; - size_t previous_generated_column = 0; - size_t previous_original_line = 0; - size_t previous_original_column = 0; - size_t previous_original_file = 0; - for (size_t i = 0; i < mappings.size(); ++i) { - const size_t generated_line = mappings[i].generated_position.line - 1; - const size_t generated_column = mappings[i].generated_position.column - 1; - const size_t original_line = mappings[i].original_position.line - 1; - const size_t original_column = mappings[i].original_position.column - 1; - const size_t original_file = mappings[i].original_position.file - 1; - - if (generated_line != previous_generated_line) { - previous_generated_column = 0; - while (generated_line != previous_generated_line) { - result += ";"; - previous_generated_line += 1; - } - } - else { - if (i > 0) result += ","; - } - - // generated column - result += base64vlq.encode(generated_column - previous_generated_column); - previous_generated_column = generated_column; - // file - result += base64vlq.encode(original_file - previous_original_file); - previous_original_file = original_file; - // source line - result += base64vlq.encode(original_line - previous_original_line); - previous_original_line = original_line; - // source column - result += base64vlq.encode(original_column - previous_original_column); - previous_original_column = original_column; - } - - return result; - } - - void SourceMap::new_line() - { - current_position.line += 1; - current_position.column = 1; - } - - void SourceMap::remove_line() - { - current_position.line -= 1; - current_position.column = 1; - } - - void SourceMap::update_column(const string& str) - { - current_position.column += str.length(); - } - - void SourceMap::update_column() - { - current_position.column += 1; - } - - void SourceMap::add_mapping(AST_Node* node) - { - mappings.push_back(Mapping(node->position(), current_position)); - } - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/source_map.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/source_map.hpp deleted file mode 100644 index 065d1606..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/source_map.hpp +++ /dev/null @@ -1,49 +0,0 @@ -#define SASS_SOURCE_MAP - -#include <vector> - -#ifndef SASS_MAPPING -#include "mapping.hpp" -#endif - -#ifndef SASS_AST -#include "ast.hpp" -#endif - -#ifndef SASSS_BASE64VLQ -#include "base64vlq.hpp" -#endif - - - -namespace Sass { - using std::vector; - - struct Context; - - class SourceMap { - - public: - vector<string> files; - - SourceMap(const string& file); - - void new_line(); - void remove_line(); - void update_column(const string& str); - void update_column(); - void add_mapping(AST_Node* node); - - string generate_source_map(Context* ctx); - - private: - - string serialize_mappings(); - - vector<Mapping> mappings; - Position current_position; - string file; - Base64VLQ base64vlq; - }; - -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/support/libsass.pc.in b/node_modules/gulp-sass/node_modules/node-sass/libsass/support/libsass.pc.in deleted file mode 100644 index 84bf779e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/support/libsass.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: libsass -URL: https://github.com/hcatlin/libsass -Description: A C implementation of a Sass compiler -Version: @VERSION@ -Libs: -L${libdir} -lsass -Cflags: -I${includedir} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/test-driver b/node_modules/gulp-sass/node_modules/node-sass/libsass/test-driver deleted file mode 100755 index 32bf39e8..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/test-driver +++ /dev/null @@ -1,127 +0,0 @@ -#! /bin/sh -# test-driver - basic testsuite driver script. - -scriptversion=2012-06-27.10; # UTC - -# Copyright (C) 2011-2013 Free Software Foundation, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to <bug-automake@gnu.org> or send patches to -# <automake-patches@gnu.org>. - -# Make unconditional expansion of undefined variables an error. This -# helps a lot in preventing typo-related bugs. -set -u - -usage_error () -{ - echo "$0: $*" >&2 - print_usage >&2 - exit 2 -} - -print_usage () -{ - cat <<END -Usage: - test-driver --test-name=NAME --log-file=PATH --trs-file=PATH - [--expect-failure={yes|no}] [--color-tests={yes|no}] - [--enable-hard-errors={yes|no}] [--] TEST-SCRIPT -The '--test-name', '--log-file' and '--trs-file' options are mandatory. -END -} - -# TODO: better error handling in option parsing (in particular, ensure -# TODO: $log_file, $trs_file and $test_name are defined). -test_name= # Used for reporting. -log_file= # Where to save the output of the test script. -trs_file= # Where to save the metadata of the test run. -expect_failure=no -color_tests=no -enable_hard_errors=yes -while test $# -gt 0; do - case $1 in - --help) print_usage; exit $?;; - --version) echo "test-driver $scriptversion"; exit $?;; - --test-name) test_name=$2; shift;; - --log-file) log_file=$2; shift;; - --trs-file) trs_file=$2; shift;; - --color-tests) color_tests=$2; shift;; - --expect-failure) expect_failure=$2; shift;; - --enable-hard-errors) enable_hard_errors=$2; shift;; - --) shift; break;; - -*) usage_error "invalid option: '$1'";; - esac - shift -done - -if test $color_tests = yes; then - # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'. - red='' # Red. - grn='' # Green. - lgn='' # Light green. - blu='' # Blue. - mgn='' # Magenta. - std='' # No color. -else - red= grn= lgn= blu= mgn= std= -fi - -do_exit='rm -f $log_file $trs_file; (exit $st); exit $st' -trap "st=129; $do_exit" 1 -trap "st=130; $do_exit" 2 -trap "st=141; $do_exit" 13 -trap "st=143; $do_exit" 15 - -# Test script is run here. -"$@" >$log_file 2>&1 -estatus=$? -if test $enable_hard_errors = no && test $estatus -eq 99; then - estatus=1 -fi - -case $estatus:$expect_failure in - 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; - 0:*) col=$grn res=PASS recheck=no gcopy=no;; - 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; - 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; - *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; - *:*) col=$red res=FAIL recheck=yes gcopy=yes;; -esac - -# Report outcome to console. -echo "${col}${res}${std}: $test_name" - -# Register the test result, and other relevant metadata. -echo ":test-result: $res" > $trs_file -echo ":global-test-result: $res" >> $trs_file -echo ":recheck: $recheck" >> $trs_file -echo ":copy-in-global-log: $gcopy" >> $trs_file - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/to_c.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/to_c.cpp deleted file mode 100644 index 4cd2b15f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/to_c.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "to_c.hpp" -#include "ast.hpp" - -namespace Sass { - using namespace std; - - Sass_Value To_C::fallback_impl(AST_Node* n) - { return make_sass_null(); } - - Sass_Value To_C::operator()(Boolean* b) - { return make_sass_boolean(b->value()); } - - Sass_Value To_C::operator()(Number* n) - { return make_sass_number(n->value(), n->unit().c_str()); } - - Sass_Value To_C::operator()(Color* c) - { return make_sass_color(c->r(), c->g(), c->b(), c->a()); } - - Sass_Value To_C::operator()(String_Constant* s) - { return make_sass_string(s->value().c_str()); } - - Sass_Value To_C::operator()(List* l) - { - Sass_Value v = make_sass_list(l->length(), l->separator() == List::COMMA ? SASS_COMMA : SASS_SPACE); - for (size_t i = 0, L = l->length(); i < L; ++i) { - v.list.values[i] = (*l)[i]->perform(this); - } - return v; - } - - Sass_Value To_C::operator()(Arguments* a) - { - Sass_Value v = make_sass_list(a->length(), SASS_COMMA); - for (size_t i = 0, L = a->length(); i < L; ++i) { - v.list.values[i] = (*a)[i]->perform(this); - } - return v; - } - - Sass_Value To_C::operator()(Argument* a) - { return a->value()->perform(this); } - - // not strictly necessary because of the fallback - Sass_Value To_C::operator()(Null* n) - { return make_sass_null(); } - -}; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/to_c.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/to_c.hpp deleted file mode 100644 index 63aae3cc..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/to_c.hpp +++ /dev/null @@ -1,44 +0,0 @@ -#define SASS_TO_C - -#ifndef SASS_OPERATION -#include "operation.hpp" -#endif - -#ifndef SASS -#include "sass.h" -#endif - -namespace Sass { - using namespace std; - - class AST_Node; - class Boolean; - class Number; - class String_Constant; - class List; - class Null; - - class To_C : public Operation_CRTP<Sass_Value, To_C> { - - Sass_Value fallback_impl(AST_Node* n); - - public: - - To_C() { } - virtual ~To_C() { } - using Operation<Sass_Value>::operator(); - - Sass_Value operator()(Boolean*); - Sass_Value operator()(Number*); - Sass_Value operator()(Color*); - Sass_Value operator()(String_Constant*); - Sass_Value operator()(List*); - Sass_Value operator()(Null*); - Sass_Value operator()(Arguments*); - Sass_Value operator()(Argument*); - - template <typename U> - Sass_Value fallback(U x) { return fallback_impl(x); } - }; - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/to_string.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/to_string.cpp deleted file mode 100644 index 6330927f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/to_string.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include <cmath> -#include <sstream> -#include <iomanip> - -#ifndef SASS_TO_STRING -#include "to_string.hpp" -#endif - -#include "inspect.hpp" -#include "ast.hpp" -#include "context.hpp" -#include <iostream> - -namespace Sass { - using namespace std; - - To_String::To_String(Context* ctx) : ctx(ctx) { } - To_String::~To_String() { } - - inline string To_String::fallback_impl(AST_Node* n) - { - Inspect i(ctx); - n->perform(&i); - return i.get_buffer(); - } - - inline string To_String::operator()(Null* n) - { return ""; } -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/to_string.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/to_string.hpp deleted file mode 100644 index 94aca727..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/to_string.hpp +++ /dev/null @@ -1,32 +0,0 @@ -#define SASS_TO_STRING - -#include <string> - -#ifndef SASS_OPERATION -#include "operation.hpp" -#endif - -namespace Sass { - using namespace std; - - struct Context; - class Null; - - class To_String : public Operation_CRTP<string, To_String> { - // import all the class-specific methods and override as desired - using Operation<string>::operator(); - // override this to define a catch-all - string fallback_impl(AST_Node* n); - - Context* ctx; - - public: - To_String(Context* ctx = 0); - virtual ~To_String(); - - string operator()(Null* n); - - template <typename U> - string fallback(U n) { return fallback_impl(n); } - }; -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/token.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/token.hpp deleted file mode 100644 index 66595041..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/token.hpp +++ /dev/null @@ -1,32 +0,0 @@ -#define SASS_TOKEN - -#include <cstring> -#include <string> -#include <sstream> - -namespace Sass { - using namespace std; - - // Token type for representing lexed chunks of text - struct Token { - - const char* begin; - const char* end; - - Token() : begin(0), end(0) { } - Token(const char* s) : begin(s), end(s + strlen(s)) { } - Token(const char* b, const char* e) : begin(b), end(e) { } - - size_t length() const { return end - begin; } - string to_string() const { return string(begin, end - begin); } - - string unquote() const; - void unquote_to_stream(stringstream& buf) const; - - operator bool() { return begin && end && begin >= end; } - operator string() { return to_string(); } - - bool operator==(Token t) { return to_string() == t.to_string(); } - }; - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/travis.sh b/node_modules/gulp-sass/node_modules/node-sass/libsass/travis.sh deleted file mode 100755 index 0973f144..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/travis.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -set -e - -if [ "x$AUTOTOOLS" == "xyes" ]; then - autoreconf -i - ./configure --enable-tests \ - --with-sassc-dir=$SASS_SASSC_PATH \ - --with-sass-spec-dir=$SASS_SPEC_PATH \ - --prefix=$TRAVIS_BUILD_DIR - make install - cp $TRAVIS_BUILD_DIR/lib/libsass.a $TRAVIS_BUILD_DIR -fi - -make LOG_FLAGS=--skip VERBOSE=1 test_build diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/units.cpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/units.cpp deleted file mode 100644 index 671cb737..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/units.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "units.hpp" - -namespace Sass { - - double conversion_factors[6][6] = { - /* in cm pc mm pt px */ - /* in */ { 1, 2.54, 6, 25.4, 72, 96 }, - /* cm */ { 1.0/2.54, 1, 6.0/2.54, 10, 72.0/2.54, 96.0/2.54 }, - /* pc */ { 1.0/6.0, 2.54/6.0, 1, 25.4/6.0, 72.0/6.0, 96.0/6.0 }, - /* mm */ { 1.0/25.4, 1.0/10.0, 6.0/25.4, 1, 72.0/25.4, 96.0/25.4 }, - /* pt */ { 1.0/72.0, 2.54/72.0, 6.0/72.0, 25.4/72.0, 1, 96.0/72.0 }, - /* px */ { 1.0/96.0, 2.54/96.0, 6.0/96.0, 25.4/96.0, 72.0/96.0, 1 } - }; - - Unit string_to_unit(const string& s) - { - if (s == "in") return IN; - else if (s == "cm") return CM; - else if (s == "pc") return PC; - else if (s == "mm") return MM; - else if (s == "pt") return PT; - else if (s == "px") return PX; - else return INCOMMENSURABLE; - } - - double conversion_factor(const string& s1, const string& s2) - { - Unit u1 = string_to_unit(s1); - Unit u2 = string_to_unit(s2); - double factor; - if (u1 == INCOMMENSURABLE || u2 == INCOMMENSURABLE) - factor = 0; - else - factor = conversion_factors[u1][u2]; - return factor; - } - - double convert(double n, const string& from, const string& to) - { - double factor = conversion_factor(from, to); - return factor ? factor * n : n; - } - -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/libsass/units.hpp b/node_modules/gulp-sass/node_modules/node-sass/libsass/units.hpp deleted file mode 100644 index d43853f2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/libsass/units.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#include <string> - -namespace Sass { - using namespace std; - - enum Unit { IN, CM, PC, MM, PT, PX, INCOMMENSURABLE }; - extern double conversion_factors[6][6]; - Unit string_to_unit(const string&); - double conversion_factor(const string&, const string&); - double convert(double, const string&, const string&); -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/.bin/_mocha b/node_modules/gulp-sass/node_modules/node-sass/node_modules/.bin/_mocha deleted file mode 120000 index f2a54ffd..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/.bin/_mocha +++ /dev/null @@ -1 +0,0 @@ -../mocha/bin/_mocha \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/.bin/mocha b/node_modules/gulp-sass/node_modules/node-sass/node_modules/.bin/mocha deleted file mode 120000 index 43c668d9..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/.bin/mocha +++ /dev/null @@ -1 +0,0 @@ -../mocha/bin/mocha \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/chalk.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/chalk.js deleted file mode 100644 index 4aad200c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/chalk.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; -var ansi = require('ansi-styles'); -var defineProps = Object.defineProperties; - -ansi.grey = ansi.gray; - -var styles = (function () { - var ret = {}; - - Object.keys(ansi).forEach(function (key) { - ret[key] = { - get: function () { - this._styles.push(key); - return this; - } - }; - }); - - return ret; -})(); - -var chalk = module.exports = defineProps({}, init()); - -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 code[0] + (str || '') + code[1]; - }, str); - }, styles); - - obj._styles = []; - - return obj[name]; - } - } - }); - - return ret; -} - -chalk.styles = ansi; - -chalk.stripColor = function (str) { - return typeof str === 'string' ? str.replace(/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]/g, '') : str; -}; - -chalk.supportsColor = require('has-color'); - -// detect mode if not set manually -if (chalk.enabled === undefined) { - chalk.enabled = chalk.supportsColor; -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js deleted file mode 100644 index 56a5d19b..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; -module.exports = { - reset: ['\x1b[0m', '\x1b[0m'], - - bold: ['\x1b[1m', '\x1b[22m'], - italic: ['\x1b[3m', '\x1b[23m'], - underline: ['\x1b[4m', '\x1b[24m'], - inverse: ['\x1b[7m', '\x1b[27m'], - strikethrough: ['\x1b[9m', '\x1b[29m'], - - black: ['\x1b[30m', '\x1b[39m'], - red: ['\x1b[31m', '\x1b[39m'], - green: ['\x1b[32m', '\x1b[39m'], - yellow: ['\x1b[33m', '\x1b[39m'], - blue: ['\x1b[34m', '\x1b[39m'], - magenta: ['\x1b[35m', '\x1b[39m'], - cyan: ['\x1b[36m', '\x1b[39m'], - white: ['\x1b[37m', '\x1b[39m'], - gray: ['\x1B[90m', '\x1b[39m'], - - bgBlack: ['\x1b[40m', '\x1b[49m'], - bgRed: ['\x1b[41m', '\x1b[49m'], - bgGreen: ['\x1b[42m', '\x1b[49m'], - bgYellow: ['\x1b[43m', '\x1b[49m'], - bgBlue: ['\x1b[44m', '\x1b[49m'], - bgMagenta: ['\x1b[45m', '\x1b[49m'], - bgCyan: ['\x1b[46m', '\x1b[49m'], - bgWhite: ['\x1b[47m', '\x1b[49m'] -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/ansi-styles/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/ansi-styles/package.json deleted file mode 100644 index c2f556a5..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "ansi-styles", - "version": "0.2.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 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[0] + 'Hello world!' + ansi.green[1]);\n```\n\n## API\n\nEach style is an array of a start and end escape code.\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 License • © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "_id": "ansi-styles@0.2.0", - "_from": "ansi-styles@~0.2.0" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/ansi-styles/readme.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/ansi-styles/readme.md deleted file mode 100644 index 646837c6..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,65 +0,0 @@ -# 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 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[0] + 'Hello world!' + ansi.green[1]); -``` - -## API - -Each style is an array of a start and end escape code. - - -## 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 License • © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/has-color/has-color.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/has-color/has-color.js deleted file mode 100644 index 27316b1f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/has-color/has-color.js +++ /dev/null @@ -1,24 +0,0 @@ -'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-sass/node_modules/node-sass/node_modules/chalk/node_modules/has-color/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/has-color/package.json deleted file mode 100644 index e55a6244..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/has-color/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "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-sass/node_modules/node-sass/node_modules/chalk/node_modules/has-color/readme.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/has-color/readme.md deleted file mode 100644 index 0918c851..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/node_modules/has-color/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# 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-sass/node_modules/node-sass/node_modules/chalk/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/package.json deleted file mode 100644 index 754653a0..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "chalk", - "version": "0.3.0", - "description": "Terminal string styling done right", - "keywords": [ - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "ansi", - "styles", - "tty", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "homepage": "https://github.com/sindresorhus/chalk", - "bugs": { - "url": "https://github.com/sindresorhus/chalk/issues" - }, - "license": "MIT", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "files": [ - "chalk.js" - ], - "main": "chalk", - "repository": { - "type": "git", - "url": "git://github.com/sindresorhus/chalk.git" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "has-color": "~0.1.0", - "ansi-styles": "~0.2.0" - }, - "devDependencies": { - "mocha": "~1.12.0" - }, - "engines": { - "node": ">=0.8.0" - }, - "readme": "# chalk [![Build Status](https://secure.travis-ci.org/sindresorhus/chalk.png?branch=master)](http://travis-ci.org/sindresorhus/chalk)\n\n> Terminal string styling done right.\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. 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\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 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\nchalk.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)\n\nChain [styles](#styles) and call the last one as a method with a string argument.\n\nMultiple arguments are also supported. Chalk will add a space between each one.\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\n```js\nvar chalk = require('chalk');\n\nconsole.log(chalk.styles.red);\n//=> ['\\x1b[31m', '\\x1b[39m']\n\nconsole.log(chalk.styles.red[0] + 'Hello' + chalk.styles.red[1]);\n// first item is the style escape code and second is the reset escape code\n```\n\n### chalk.stripColor(string)\n\nStrip color from a string.\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 License • © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "_id": "chalk@0.3.0", - "_from": "chalk@~0.3.0" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/readme.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/readme.md deleted file mode 100644 index 32aa4a90..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/chalk/readme.md +++ /dev/null @@ -1,134 +0,0 @@ -# chalk [![Build Status](https://secure.travis-ci.org/sindresorhus/chalk.png?branch=master)](http://travis-ci.org/sindresorhus/chalk) - -> Terminal string styling done right. - -[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. 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 - - -## 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 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 -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) - -Chain [styles](#styles) and call the last one as a method with a string argument. - -Multiple arguments are also supported. Chalk will add a space between each one. - -### 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). - -```js -var chalk = require('chalk'); - -console.log(chalk.styles.red); -//=> ['\x1b[31m', '\x1b[39m'] - -console.log(chalk.styles.red[0] + 'Hello' + chalk.styles.red[1]); -// first item is the style escape code and second is the reset escape code -``` - -### chalk.stripColor(string) - -Strip color from a string. - - -## 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 License • © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/.npmignore b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/.npmignore deleted file mode 100644 index 9303c347..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/.travis.yml b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/.travis.yml deleted file mode 100644 index 84fd7ca2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.9 diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/examples/pow.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e6924212..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/index.js deleted file mode 100644 index fda6de8a..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/index.js +++ /dev/null @@ -1,82 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/package.json deleted file mode 100644 index dc434821..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "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-sass/node_modules/node-sass/node_modules/mkdirp/readme.markdown b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/readme.markdown deleted file mode 100644 index 83b0216a..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/readme.markdown +++ /dev/null @@ -1,63 +0,0 @@ -# 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-sass/node_modules/node-sass/node_modules/mkdirp/test/chmod.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 520dcb8e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,38 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/test/clobber.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 0eb70998..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/test/mkdirp.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index b07cd70c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/test/perm.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/perm.js deleted file mode 100644 index 23a7abbd..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/test/perm_sync.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index f685f609..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,39 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/test/race.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/race.js deleted file mode 100644 index 96a04476..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,41 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/test/rel.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 79858243..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/test/return.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/return.js deleted file mode 100644 index bce68e56..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/return.js +++ /dev/null @@ -1,25 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/test/return_sync.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/return_sync.js deleted file mode 100644 index 7c222d35..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/return_sync.js +++ /dev/null @@ -1,24 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/test/root.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/root.js deleted file mode 100644 index 97ad7a2f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/root.js +++ /dev/null @@ -1,18 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/test/sync.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/sync.js deleted file mode 100644 index 7530cada..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,32 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/test/umask.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 64ccafe2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mkdirp/test/umask_sync.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index 35bd5cbb..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,32 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/Readme.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/Readme.md deleted file mode 100644 index ae0e8cce..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/Readme.md +++ /dev/null @@ -1,124 +0,0 @@ - [![Build Status](https://secure.travis-ci.org/visionmedia/mocha.png)](http://travis-ci.org/visionmedia/mocha) - - [![Mocha test framework](http://f.cl.ly/items/3l1k0n2A1U3M1I1L210p/Screen%20Shot%202012-02-24%20at%202.21.43%20PM.png)](http://visionmedia.github.io/mocha) - - Mocha is a simple, flexible, fun JavaScript test framework for node.js and the browser. For more information view the [documentation](http://visionmedia.github.io/mocha). - -## Contributors - -``` - - project : mocha - repo age : 1 year, 7 months - active : 272 days - commits : 1116 - files : 123 - authors : - 504 TJ Holowaychuk 45.2% - 389 Tj Holowaychuk 34.9% - 31 Guillermo Rauch 2.8% - 13 Attila Domokos 1.2% - 9 John Firebaugh 0.8% - 8 Jo Liss 0.7% - 7 Nathan Rajlich 0.6% - 6 James Carr 0.5% - 6 Brendan Nee 0.5% - 5 Aaron Heckmann 0.4% - 4 hokaccha 0.4% - 4 Xavier Antoviaque 0.4% - 4 Joshua Krall 0.4% - 3 Wil Moore III 0.3% - 3 Jesse Dailey 0.3% - 3 Nathan Bowser 0.3% - 3 Tyson Tate 0.3% - 3 Cory Thomas 0.3% - 3 Ryunosuke SATO 0.3% - 3 Paul Miller 0.3% - 3 Ben Lindsey 0.3% - 2 Forbes Lindesay 0.2% - 2 Konstantin Käfer 0.2% - 2 Brian Beck 0.2% - 2 Merrick Christensen 0.2% - 2 Michael Riley 0.2% - 2 David Henderson 0.2% - 2 Nathan Alderson 0.2% - 2 Paul Armstrong 0.2% - 2 Pete Hawkins 0.2% - 2 Quang Van 0.2% - 2 Raynos 0.2% - 2 Jonas Westerlund 0.2% - 2 Domenic Denicola 0.2% - 2 Shawn Krisman 0.2% - 2 Simon Gaeremynck 0.2% - 2 FARKAS Máté 0.2% - 2 Timo Tijhof 0.2% - 2 Justin DuJardin 0.2% - 2 Juzer Ali 0.2% - 2 Ian Storm Taylor 0.2% - 2 Arian Stolwijk 0.2% - 2 domenic 0.2% - 1 Richard Dingwall 0.1% - 1 Russ Bradberry 0.1% - 1 Sasha Koss 0.1% - 1 Seiya Konno 0.1% - 1 Standa Opichal 0.1% - 1 Steve Mason 0.1% - 1 Will Langstroth 0.1% - 1 Yanis Wang 0.1% - 1 Yuest Wang 0.1% - 1 abrkn 0.1% - 1 airportyh 0.1% - 1 fengmk2 0.1% - 1 tgautier@yahoo.com 0.1% - 1 traleig1 0.1% - 1 vlad 0.1% - 1 yuitest 0.1% - 1 Adam Crabtree 0.1% - 1 Andreas Brekken 0.1% - 1 Atsuya Takagi 0.1% - 1 Austin Birch 0.1% - 1 Bjørge Næss 0.1% - 1 Brian Moore 0.1% - 1 Bryan Donovan 0.1% - 1 Casey Foster 0.1% - 1 Corey Butler 0.1% - 1 Dave McKenna 0.1% - 1 Fedor Indutny 0.1% - 1 Florian Margaine 0.1% - 1 Frederico Silva 0.1% - 1 Fredrik Lindin 0.1% - 1 Gareth Murphy 0.1% - 1 Gavin Mogan 0.1% - 1 Greg Perkins 0.1% - 1 Harry Brundage 0.1% - 1 Herman Junge 0.1% - 1 Ian Young 0.1% - 1 Ivan 0.1% - 1 Jaakko Salonen 0.1% - 1 Jakub Nešetřil 0.1% - 1 James Bowes 0.1% - 1 James Lal 0.1% - 1 Jason Barry 0.1% - 1 Javier Aranda 0.1% - 1 Jeff Kunkle 0.1% - 1 Jonathan Creamer 0.1% - 1 Jussi Virtanen 0.1% - 1 Katie Gengler 0.1% - 1 Kazuhito Hokamura 0.1% - 1 Koen Punt 0.1% - 1 Laszlo Bacsi 0.1% - 1 László Bácsi 0.1% - 1 Maciej Małecki 0.1% - 1 Matt Robenolt 0.1% - 1 Matt Smith 0.1% - 1 Matthew Shanley 0.1% - 1 Michael Schoonmaker 0.1% - 1 Phil Sung 0.1% - 1 R56 0.1% -``` - -## Links - - - [Google Group](http://groups.google.com/group/mochajs) - - [Wiki](https://github.com/visionmedia/mocha/wiki) - - Mocha [Extensions and reporters](https://github.com/visionmedia/mocha/wiki) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/bin/_mocha b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/bin/_mocha deleted file mode 100755 index f6bf8957..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/bin/_mocha +++ /dev/null @@ -1,448 +0,0 @@ -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('commander') - , sprintf = require('util').format - , path = require('path') - , fs = require('fs') - , glob = require('glob') - , resolve = path.resolve - , exists = fs.existsSync || path.existsSync - , Mocha = require('../') - , utils = Mocha.utils - , reporters = Mocha.reporters - , interfaces = Mocha.interfaces - , Base = reporters.Base - , join = path.join - , basename = path.basename - , cwd = process.cwd() - , mocha = new Mocha; - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Files. - */ - -var files = []; - -/** - * Globals. - */ - -var globals = []; - -/** - * Requires. - */ - -var requires = []; - -/** - * Images. - */ - -var images = { - fail: __dirname + '/../images/error.png' - , pass: __dirname + '/../images/ok.png' -}; - -// options - -program - .version(JSON.parse(fs.readFileSync(__dirname + '/../package.json', 'utf8')).version) - .usage('[debug] [options] [files]') - .option('-r, --require <name>', 'require the given module') - .option('-R, --reporter <name>', 'specify the reporter to use', 'dot') - .option('-u, --ui <name>', 'specify user-interface (bdd|tdd|exports)', 'bdd') - .option('-g, --grep <pattern>', 'only run tests matching <pattern>') - .option('-i, --invert', 'inverts --grep matches') - .option('-t, --timeout <ms>', 'set test-case timeout in milliseconds [2000]') - .option('-s, --slow <ms>', '"slow" test threshold in milliseconds [75]') - .option('-w, --watch', 'watch files for changes') - .option('-c, --colors', 'force enabling of colors') - .option('-C, --no-colors', 'force disabling of colors') - .option('-G, --growl', 'enable growl notification support') - .option('-d, --debug', "enable node's debugger, synonym for node --debug") - .option('-b, --bail', "bail after first test failure") - .option('-A, --async-only', "force all tests to take a callback (async)") - .option('-S, --sort', "sort test files") - .option('--recursive', 'include sub directories') - .option('--debug-brk', "enable node's debugger breaking on the first line") - .option('--globals <names>', 'allow the given comma-delimited global [names]', list, []) - .option('--check-leaks', 'check for global variable leaks') - .option('--interfaces', 'display available interfaces') - .option('--reporters', 'display available reporters') - .option('--compilers <ext>:<module>,...', 'use the given module(s) to compile files', list, []) - -program.name = 'mocha'; - -// init command - -program - .command('init <path>') - .description('initialize a client-side mocha setup at <path>') - .action(function(path){ - var mkdir = require('mkdirp'); - mkdir.sync(path); - var css = fs.readFileSync(join(__dirname, '..', 'mocha.css')); - var js = fs.readFileSync(join(__dirname, '..', 'mocha.js')); - var tmpl = fs.readFileSync(join(__dirname, '..', 'lib/template.html')); - fs.writeFileSync(join(path, 'mocha.css'), css); - fs.writeFileSync(join(path, 'mocha.js'), js); - fs.writeFileSync(join(path, 'tests.js'), ''); - fs.writeFileSync(join(path, 'index.html'), tmpl); - process.exit(0); - }); - -// --globals - -program.on('globals', function(val){ - globals = globals.concat(list(val)); -}); - -// --reporters - -program.on('reporters', function(){ - console.log(); - console.log(' dot - dot matrix'); - console.log(' doc - html documentation'); - console.log(' spec - hierarchical spec list'); - console.log(' json - single json object'); - console.log(' progress - progress bar'); - console.log(' list - spec-style listing'); - console.log(' tap - test-anything-protocol'); - console.log(' landing - unicode landing strip'); - console.log(' xunit - xunit reporter'); - console.log(' teamcity - teamcity ci support'); - console.log(' html-cov - HTML test coverage'); - console.log(' json-cov - JSON test coverage'); - console.log(' min - minimal reporter (great with --watch)'); - console.log(' json-stream - newline delimited json events'); - console.log(' markdown - markdown documentation (github flavour)'); - console.log(' nyan - nyan cat!'); - console.log(); - process.exit(); -}); - -// --interfaces - -program.on('interfaces', function(){ - console.log(''); - console.log(' bdd'); - console.log(' tdd'); - console.log(' qunit'); - console.log(' exports'); - console.log(''); - process.exit(); -}); - -// -r, --require - -module.paths.push(cwd, join(cwd, 'node_modules')); - -program.on('require', function(mod){ - var abs = exists(mod) || exists(mod + '.js'); - if (abs) mod = resolve(mod); - requires.push(mod); -}); - -// mocha.opts support - -try { - var opts = fs.readFileSync('test/mocha.opts', 'utf8') - .trim() - .split(/\s+/); - - process.argv = process.argv - .slice(0, 2) - .concat(opts.concat(process.argv.slice(2))); -} catch (err) { - // ignore -} - -// parse args - -program.parse(process.argv); - -// infinite stack traces - -Error.stackTraceLimit = Infinity; // TODO: config - -// reporter - -mocha.reporter(program.reporter); - -// interface - -mocha.ui(program.ui); - -// load reporter - -try { - Reporter = require('../lib/reporters/' + program.reporter); -} catch (err) { - try { - Reporter = require(program.reporter); - } catch (err) { - throw new Error('reporter "' + program.reporter + '" does not exist'); - } -} - -// --no-colors - -if (!program.colors) Base.useColors = false; - -// --colors - -if (~process.argv.indexOf('--colors') || - ~process.argv.indexOf('-c')) { - Base.useColors = true; -} - -// --slow <ms> - -if (program.slow) mocha.suite.slow(program.slow); - -// --timeout - -if (program.timeout) mocha.suite.timeout(program.timeout); - -// --bail - -mocha.suite.bail(program.bail); - -// --grep - -if (program.grep) mocha.grep(new RegExp(program.grep)); - -// --invert - -if (program.invert) mocha.invert(); - -// --check-leaks - -if (program.checkLeaks) mocha.checkLeaks(); - -// --growl - -if (program.growl) mocha.growl(); - -// --async-only - -if (program.asyncOnly) mocha.asyncOnly(); - -// --globals - -mocha.globals(globals); - -// custom compiler support - -var extensions = ['js']; -program.compilers.forEach(function(c) { - var compiler = c.split(':') - , ext = compiler[0] - , mod = compiler[1]; - - if (mod[0] == '.') mod = join(process.cwd(), mod); - require(mod); - extensions.push(ext); -}); - -var re = new RegExp('\\.(' + extensions.join('|') + ')$'); - -// requires - -requires.forEach(function(mod) { - require(mod); -}); - -// files - -var files = [] - , args = program.args; - -// default files to test/*.{js,coffee} - -if (!args.length) args.push('test'); - -args.forEach(function(arg){ - files = files.concat(lookupFiles(arg, program.recursive)); -}); - -// resolve - -files = files.map(function(path){ - return resolve(path); -}); - -if (program.sort) { - files.sort(); -} - -// --watch - -if (program.watch) { - console.log(); - hideCursor(); - process.on('SIGINT', function(){ - showCursor(); - console.log('\n'); - process.exit(); - }); - - var spinner = 'win32' == process.platform - ? ['|','/','-','\\'] - : ['◜','◠','◝','◞','◡','◟']; - - var frames = spinner.map(function(c) { - return sprintf(' \u001b[96m%s \u001b[90mwatching\u001b[0m', c); - }); - - var watchFiles = utils.files(cwd); - - function loadAndRun() { - try { - mocha.files = files; - mocha.run(function(){ - play(frames); - }); - } catch(e) { - console.log(e.stack); - } - } - - function purge() { - watchFiles.forEach(function(file){ - delete require.cache[file]; - }); - } - - loadAndRun(); - - utils.watch(watchFiles, function(){ - purge(); - stop() - mocha.suite = mocha.suite.clone(); - mocha.ui(program.ui); - loadAndRun(); - }); - - return; -} - -// load - -mocha.files = files; -mocha.run(process.exit); - -// enable growl notifications - -function growl(runner, reporter) { - var notify = require('growl'); - - runner.on('end', function(){ - var stats = reporter.stats; - if (stats.failures) { - var msg = stats.failures + ' of ' + runner.total + ' tests failed'; - notify(msg, { name: 'mocha', title: 'Failed', image: images.fail }); - } else { - notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', { - name: 'mocha' - , title: 'Passed' - , image: images.pass - }); - } - }); -} - -/** - * Parse list. - */ - -function list(str) { - return str.split(/ *, */); -} - -/** - * Hide the cursor. - */ - -function hideCursor(){ - process.stdout.write('\u001b[?25l'); -}; - -/** - * Show the cursor. - */ - -function showCursor(){ - process.stdout.write('\u001b[?25h'); -}; - -/** - * Stop play()ing. - */ - -function stop() { - process.stdout.write('\u001b[2K'); - clearInterval(play.timer); -} - -/** - * Lookup file names at the given `path`. - */ - -function lookupFiles(path, recursive) { - var files = []; - - if (!exists(path)) { - if (exists(path + '.js')) { - path += '.js' - } else { - return glob.sync(path); - } - } - - var stat = fs.statSync(path); - if (stat.isFile()) return path; - - fs.readdirSync(path).forEach(function(file){ - file = join(path, file); - var stat = fs.statSync(file); - if (stat.isDirectory()) { - if (recursive) files = files.concat(lookupFiles(file, recursive)); - return - } - if (!stat.isFile() || !re.test(file) || basename(file)[0] == '.') return; - files.push(file); - }); - - return files; -} - -/** - * Play the given array of strings. - */ - -function play(arr, interval) { - var len = arr.length - , interval = interval || 100 - , i = 0; - - play.timer = setInterval(function(){ - var str = arr[i++ % len]; - process.stdout.write('\u001b[0G' + str); - }, interval); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/bin/mocha b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/bin/mocha deleted file mode 100755 index 742d6077..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/bin/mocha +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env node - -/** - * This tiny wrapper file checks for known node flags and appends them - * when found, before invoking the "real" _mocha(1) executable. - */ - -var spawn = require('child_process').spawn - , args = [ __dirname + '/_mocha' ]; - -process.argv.slice(2).forEach(function(arg){ - var flag = arg.split('=')[0]; - - switch (flag) { - case '-d': - args.unshift('--debug'); - break; - case 'debug': - case '--debug': - case '--debug-brk': - args.unshift(arg); - break; - case '-gc': - case '--expose-gc': - args.unshift('--expose-gc'); - break; - case '--gc-global': - case '--harmony': - case '--harmony-proxies': - case '--harmony-collections': - case '--harmony-generators': - case '--prof': - args.unshift(arg); - break; - default: - if (0 == arg.indexOf('--trace')) args.unshift(arg); - else args.push(arg); - break; - } -}); - -var proc = spawn(process.argv[0], args, { customFds: [0,1,2] }); -proc.on('exit', function (code, signal) { - process.on('exit', function(){ - if (signal) { - process.kill(process.pid, signal); - } else { - process.exit(code); - } - }); -}); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/images/error.png b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/images/error.png deleted file mode 100644 index a07a1ba5efef3e4be01383485cdd59d87691ae7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAB?S0{xB}@#3=H#t6a&Ky28IX* zhDI<ONGt@SB@7He1OyNg$at2Rctc+Pp0V*u7nc{Rs@r&ZcdMve;O9Tdz;Kv>;bT+N zJ_d#}3=HROY~H<lv-RDb5}+Qzk|4j}#)PE259?1kMo(GuE1vJZGJ~t?2~MEoEl(H6 zkczn0OE>+F81S@RY}C7)_Aw#d|MtVb_a~h&)Rp4=QT2WP6Q!Vh`Tbw)C0L`Hjr0=~ z9$q`dGMD9A%ZpEiDeV&BjQ7mTJ@UL?o6p#BvCvJTmtn!~Z$T%V*(ZO9v7FD-TxB)0 zdg`1chBG#&VzR#-Sg`Tz{B++v?;f1y-of{vSo8emT75<dk-({CdXtk348Lrx<x!NX zR7kbd6?cgHC+2)_z3q{5#@$^f*2zsfX!ovo$pr25BF~@RTXNW-w>L`U_{(iyq;*ak qoLzkFu?=s{K4<0MJ2ut-SB-zNMaS1nOp+JqO9oF@KbLh*2~7Z$dY*9r diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/images/ok.png b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/images/ok.png deleted file mode 100644 index b3623a59946024c48067d73d664e070dbc2d8a32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAB?S0{xJIori(YS*wAUIaKoBJF zvj!rdveN6mWw-t6ABLwLvMapgS$QL{=59##Dd*y=UgdZE^Uk|v9Cc`W76(-P|8)8t zpa!9mAiv<A?nYHj1y&I=2}V5*CY}Z<hS>!{OM$WnJzX3_DsF8(b5f{TLBu6cm|clU zs#od6hyV36>l!DuJ~i6gRJ|(h>%N=uiCw`>-uwaww$}4;Jh;`b%=GEzCGjs473QC< zoj;vb)**hkbI|rOH-CY(cRg0*&vrd;aO|w5Y!c5c%l3JVM=TdRUpN+^&tQ1$_04MM zy$qe->%PkEb(kh<UCqeRR>#O!>DBXDc!!9W;kOl4QpsMNCpniS<Qns=-;$USrS^p1 x>gx7V=EJjg<yBu5ys*}fW8tL_uL?K|HtS~zY3LOiG%NuHp{J{#%Q~loCII-;jB@}0 diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/index.js deleted file mode 100644 index 507566fa..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/index.js +++ /dev/null @@ -1,4 +0,0 @@ - -module.exports = process.env.COV - ? require('./lib-cov/mocha') - : require('./lib/mocha'); \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/debug.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/debug.js deleted file mode 100644 index 03cf5923..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/debug.js +++ /dev/null @@ -1,5 +0,0 @@ - -module.exports = function(type){ - return function(){ - } -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/events.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/events.js deleted file mode 100644 index cfbd0720..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/events.js +++ /dev/null @@ -1,178 +0,0 @@ - -/** - * Module exports. - */ - -exports.EventEmitter = EventEmitter; - -/** - * Check if `obj` is an array. - */ - -function isArray(obj) { - return '[object Array]' == {}.toString.call(obj); -} - -/** - * Event emitter constructor. - * - * @api public - */ - -function EventEmitter(){}; - -/** - * Adds a listener. - * - * @api public - */ - -EventEmitter.prototype.on = function (name, fn) { - if (!this.$events) { - this.$events = {}; - } - - if (!this.$events[name]) { - this.$events[name] = fn; - } else if (isArray(this.$events[name])) { - this.$events[name].push(fn); - } else { - this.$events[name] = [this.$events[name], fn]; - } - - return this; -}; - -EventEmitter.prototype.addListener = EventEmitter.prototype.on; - -/** - * Adds a volatile listener. - * - * @api public - */ - -EventEmitter.prototype.once = function (name, fn) { - var self = this; - - function on () { - self.removeListener(name, on); - fn.apply(this, arguments); - }; - - on.listener = fn; - this.on(name, on); - - return this; -}; - -/** - * Removes a listener. - * - * @api public - */ - -EventEmitter.prototype.removeListener = function (name, fn) { - if (this.$events && this.$events[name]) { - var list = this.$events[name]; - - if (isArray(list)) { - var pos = -1; - - for (var i = 0, l = list.length; i < l; i++) { - if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { - pos = i; - break; - } - } - - if (pos < 0) { - return this; - } - - list.splice(pos, 1); - - if (!list.length) { - delete this.$events[name]; - } - } else if (list === fn || (list.listener && list.listener === fn)) { - delete this.$events[name]; - } - } - - return this; -}; - -/** - * Removes all listeners for an event. - * - * @api public - */ - -EventEmitter.prototype.removeAllListeners = function (name) { - if (name === undefined) { - this.$events = {}; - return this; - } - - if (this.$events && this.$events[name]) { - this.$events[name] = null; - } - - return this; -}; - -/** - * Gets all listeners for a certain event. - * - * @api public - */ - -EventEmitter.prototype.listeners = function (name) { - if (!this.$events) { - this.$events = {}; - } - - if (!this.$events[name]) { - this.$events[name] = []; - } - - if (!isArray(this.$events[name])) { - this.$events[name] = [this.$events[name]]; - } - - return this.$events[name]; -}; - -/** - * Emits an event. - * - * @api public - */ - -EventEmitter.prototype.emit = function (name) { - if (!this.$events) { - return false; - } - - var handler = this.$events[name]; - - if (!handler) { - return false; - } - - var args = [].slice.call(arguments, 1); - - if ('function' == typeof handler) { - handler.apply(this, args); - } else if (isArray(handler)) { - var listeners = handler.slice(); - - for (var i = 0, l = listeners.length; i < l; i++) { - listeners[i].apply(this, args); - } - } else { - return false; - } - - return true; -}; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/fs.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/fs.js deleted file mode 100644 index e69de29b..00000000 diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/path.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/path.js deleted file mode 100644 index e69de29b..00000000 diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/progress.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/progress.js deleted file mode 100644 index 1d60cde6..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/progress.js +++ /dev/null @@ -1,125 +0,0 @@ - -/** - * Expose `Progress`. - */ - -module.exports = Progress; - -/** - * Initialize a new `Progress` indicator. - */ - -function Progress() { - this.percent = 0; - this.size(0); - this.fontSize(11); - this.font('helvetica, arial, sans-serif'); -} - -/** - * Set progress size to `n`. - * - * @param {Number} n - * @return {Progress} for chaining - * @api public - */ - -Progress.prototype.size = function(n){ - this._size = n; - return this; -}; - -/** - * Set text to `str`. - * - * @param {String} str - * @return {Progress} for chaining - * @api public - */ - -Progress.prototype.text = function(str){ - this._text = str; - return this; -}; - -/** - * Set font size to `n`. - * - * @param {Number} n - * @return {Progress} for chaining - * @api public - */ - -Progress.prototype.fontSize = function(n){ - this._fontSize = n; - return this; -}; - -/** - * Set font `family`. - * - * @param {String} family - * @return {Progress} for chaining - */ - -Progress.prototype.font = function(family){ - this._font = family; - return this; -}; - -/** - * Update percentage to `n`. - * - * @param {Number} n - * @return {Progress} for chaining - */ - -Progress.prototype.update = function(n){ - this.percent = n; - return this; -}; - -/** - * Draw on `ctx`. - * - * @param {CanvasRenderingContext2d} ctx - * @return {Progress} for chaining - */ - -Progress.prototype.draw = function(ctx){ - var percent = Math.min(this.percent, 100) - , size = this._size - , half = size / 2 - , x = half - , y = half - , rad = half - 1 - , fontSize = this._fontSize; - - ctx.font = fontSize + 'px ' + this._font; - - var angle = Math.PI * 2 * (percent / 100); - ctx.clearRect(0, 0, size, size); - - // outer circle - ctx.strokeStyle = '#9f9f9f'; - ctx.beginPath(); - ctx.arc(x, y, rad, 0, angle, false); - ctx.stroke(); - - // inner circle - ctx.strokeStyle = '#eee'; - ctx.beginPath(); - ctx.arc(x, y, rad - 1, 0, angle, true); - ctx.stroke(); - - // text - var text = this._text || (percent | 0) + '%' - , w = ctx.measureText(text).width; - - ctx.fillText( - text - , x - w / 2 + 1 - , y + fontSize / 2 - 1); - - return this; -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/tty.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/tty.js deleted file mode 100644 index 6f5f079a..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/browser/tty.js +++ /dev/null @@ -1,13 +0,0 @@ - -exports.isatty = function(){ - return true; -}; - -exports.getWindowSize = function(){ - if ('innerHeight' in global) { - return [global.innerHeight, global.innerWidth]; - } else { - // In a Web Worker, the DOM Window is not available. - return [640, 480]; - } -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/context.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/context.js deleted file mode 100644 index 6d6422a1..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/context.js +++ /dev/null @@ -1,69 +0,0 @@ - -/** - * Expose `Context`. - */ - -module.exports = Context; - -/** - * Initialize a new `Context`. - * - * @api private - */ - -function Context(){} - -/** - * Set or get the context `Runnable` to `runnable`. - * - * @param {Runnable} runnable - * @return {Context} - * @api private - */ - -Context.prototype.runnable = function(runnable){ - if (0 == arguments.length) return this._runnable; - this.test = this._runnable = runnable; - return this; -}; - -/** - * Set test timeout `ms`. - * - * @param {Number} ms - * @return {Context} self - * @api private - */ - -Context.prototype.timeout = function(ms){ - this.runnable().timeout(ms); - return this; -}; - -/** - * Set test slowness threshold `ms`. - * - * @param {Number} ms - * @return {Context} self - * @api private - */ - -Context.prototype.slow = function(ms){ - this.runnable().slow(ms); - return this; -}; - -/** - * Inspect the context void of `._runnable`. - * - * @return {String} - * @api private - */ - -Context.prototype.inspect = function(){ - return JSON.stringify(this, function(key, val){ - if ('_runnable' == key) return; - if ('test' == key) return; - return val; - }, 2); -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/hook.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/hook.js deleted file mode 100644 index 814e7b62..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/hook.js +++ /dev/null @@ -1,49 +0,0 @@ - -/** - * Module dependencies. - */ - -var Runnable = require('./runnable'); - -/** - * Expose `Hook`. - */ - -module.exports = Hook; - -/** - * Initialize a new `Hook` with the given `title` and callback `fn`. - * - * @param {String} title - * @param {Function} fn - * @api private - */ - -function Hook(title, fn) { - Runnable.call(this, title, fn); - this.type = 'hook'; -} - -/** - * Inherit from `Runnable.prototype`. - */ - -Hook.prototype.__proto__ = Runnable.prototype; - -/** - * Get or set the test `err`. - * - * @param {Error} err - * @return {Error} - * @api public - */ - -Hook.prototype.error = function(err){ - if (0 == arguments.length) { - var err = this._error; - this._error = null; - return err; - } - - this._error = err; -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/bdd.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/bdd.js deleted file mode 100644 index e838109d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/bdd.js +++ /dev/null @@ -1,135 +0,0 @@ - -/** - * Module dependencies. - */ - -var Suite = require('../suite') - , Test = require('../test') - , utils = require('../utils'); - -/** - * BDD-style interface: - * - * describe('Array', function(){ - * describe('#indexOf()', function(){ - * it('should return -1 when not present', function(){ - * - * }); - * - * it('should return the index when present', function(){ - * - * }); - * }); - * }); - * - */ - -module.exports = function(suite){ - var suites = [suite]; - - suite.on('pre-require', function(context, file, mocha){ - - /** - * Execute before running tests. - */ - - context.before = function(fn){ - suites[0].beforeAll(fn); - }; - - /** - * Execute after running tests. - */ - - context.after = function(fn){ - suites[0].afterAll(fn); - }; - - /** - * Execute before each test case. - */ - - context.beforeEach = function(fn){ - suites[0].beforeEach(fn); - }; - - /** - * Execute after each test case. - */ - - context.afterEach = function(fn){ - suites[0].afterEach(fn); - }; - - /** - * Describe a "suite" with the given `title` - * and callback `fn` containing nested suites - * and/or tests. - */ - - context.describe = context.context = function(title, fn){ - var suite = Suite.create(suites[0], title); - suites.unshift(suite); - fn.call(suite); - suites.shift(); - return suite; - }; - - /** - * Pending describe. - */ - - context.xdescribe = - context.xcontext = - context.describe.skip = function(title, fn){ - var suite = Suite.create(suites[0], title); - suite.pending = true; - suites.unshift(suite); - fn.call(suite); - suites.shift(); - }; - - /** - * Exclusive suite. - */ - - context.describe.only = function(title, fn){ - var suite = context.describe(title, fn); - mocha.grep(suite.fullTitle()); - }; - - /** - * Describe a specification or test-case - * with the given `title` and callback `fn` - * acting as a thunk. - */ - - context.it = context.specify = function(title, fn){ - var suite = suites[0]; - if (suite.pending) var fn = null; - var test = new Test(title, fn); - suite.addTest(test); - return test; - }; - - /** - * Exclusive test-case. - */ - - context.it.only = function(title, fn){ - var test = context.it(title, fn); - var reString = '^' + utils.escapeRegexp(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); - }; - - /** - * Pending test case. - */ - - context.xit = - context.xspecify = - context.it.skip = function(title){ - context.it(title); - }; - }); -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/exports.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/exports.js deleted file mode 100644 index 6b229c0f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/exports.js +++ /dev/null @@ -1,60 +0,0 @@ - -/** - * Module dependencies. - */ - -var Suite = require('../suite') - , Test = require('../test'); - -/** - * TDD-style interface: - * - * exports.Array = { - * '#indexOf()': { - * 'should return -1 when the value is not present': function(){ - * - * }, - * - * 'should return the correct index when the value is present': function(){ - * - * } - * } - * }; - * - */ - -module.exports = function(suite){ - var suites = [suite]; - - suite.on('require', visit); - - function visit(obj) { - var suite; - for (var key in obj) { - if ('function' == typeof obj[key]) { - var fn = obj[key]; - switch (key) { - case 'before': - suites[0].beforeAll(fn); - break; - case 'after': - suites[0].afterAll(fn); - break; - case 'beforeEach': - suites[0].beforeEach(fn); - break; - case 'afterEach': - suites[0].afterEach(fn); - break; - default: - suites[0].addTest(new Test(key, fn)); - } - } else { - var suite = Suite.create(suites[0], key); - suites.unshift(suite); - visit(obj[key]); - suites.shift(); - } - } - } -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/index.js deleted file mode 100644 index f7b2655e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/index.js +++ /dev/null @@ -1,5 +0,0 @@ - -exports.bdd = require('./bdd'); -exports.tdd = require('./tdd'); -exports.qunit = require('./qunit'); -exports.exports = require('./exports'); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/qunit.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/qunit.js deleted file mode 100644 index 30f6748f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/qunit.js +++ /dev/null @@ -1,122 +0,0 @@ - -/** - * Module dependencies. - */ - -var Suite = require('../suite') - , Test = require('../test') - , utils = require('../utils'); - -/** - * QUnit-style interface: - * - * suite('Array'); - * - * test('#length', function(){ - * var arr = [1,2,3]; - * ok(arr.length == 3); - * }); - * - * test('#indexOf()', function(){ - * var arr = [1,2,3]; - * ok(arr.indexOf(1) == 0); - * ok(arr.indexOf(2) == 1); - * ok(arr.indexOf(3) == 2); - * }); - * - * suite('String'); - * - * test('#length', function(){ - * ok('foo'.length == 3); - * }); - * - */ - -module.exports = function(suite){ - var suites = [suite]; - - suite.on('pre-require', function(context, file, mocha){ - - /** - * Execute before running tests. - */ - - context.before = function(fn){ - suites[0].beforeAll(fn); - }; - - /** - * Execute after running tests. - */ - - context.after = function(fn){ - suites[0].afterAll(fn); - }; - - /** - * Execute before each test case. - */ - - context.beforeEach = function(fn){ - suites[0].beforeEach(fn); - }; - - /** - * Execute after each test case. - */ - - context.afterEach = function(fn){ - suites[0].afterEach(fn); - }; - - /** - * Describe a "suite" with the given `title`. - */ - - context.suite = function(title){ - if (suites.length > 1) suites.shift(); - var suite = Suite.create(suites[0], title); - suites.unshift(suite); - return suite; - }; - - /** - * Exclusive test-case. - */ - - context.suite.only = function(title, fn){ - var suite = context.suite(title, fn); - mocha.grep(suite.fullTitle()); - }; - - /** - * Describe a specification or test-case - * with the given `title` and callback `fn` - * acting as a thunk. - */ - - context.test = function(title, fn){ - var test = new Test(title, fn); - suites[0].addTest(test); - return test; - }; - - /** - * Exclusive test-case. - */ - - context.test.only = function(title, fn){ - var test = context.test(title, fn); - var reString = '^' + utils.escapeRegexp(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); - }; - - /** - * Pending test case. - */ - - context.test.skip = function(title){ - context.test(title); - }; - }); -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/tdd.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/tdd.js deleted file mode 100644 index da5ca2c5..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/interfaces/tdd.js +++ /dev/null @@ -1,138 +0,0 @@ - -/** - * Module dependencies. - */ - -var Suite = require('../suite') - , Test = require('../test') - , utils = require('../utils');; - -/** - * TDD-style interface: - * - * suite('Array', function(){ - * suite('#indexOf()', function(){ - * suiteSetup(function(){ - * - * }); - * - * test('should return -1 when not present', function(){ - * - * }); - * - * test('should return the index when present', function(){ - * - * }); - * - * suiteTeardown(function(){ - * - * }); - * }); - * }); - * - */ - -module.exports = function(suite){ - var suites = [suite]; - - suite.on('pre-require', function(context, file, mocha){ - - /** - * Execute before each test case. - */ - - context.setup = function(fn){ - suites[0].beforeEach(fn); - }; - - /** - * Execute after each test case. - */ - - context.teardown = function(fn){ - suites[0].afterEach(fn); - }; - - /** - * Execute before the suite. - */ - - context.suiteSetup = function(fn){ - suites[0].beforeAll(fn); - }; - - /** - * Execute after the suite. - */ - - context.suiteTeardown = function(fn){ - suites[0].afterAll(fn); - }; - - /** - * Describe a "suite" with the given `title` - * and callback `fn` containing nested suites - * and/or tests. - */ - - context.suite = function(title, fn){ - var suite = Suite.create(suites[0], title); - suites.unshift(suite); - fn.call(suite); - suites.shift(); - return suite; - }; - - /** - * Pending suite. - */ - context.suite.skip = function(title, fn) { - var suite = Suite.create(suites[0], title); - suite.pending = true; - suites.unshift(suite); - fn.call(suite); - suites.shift(); - }; - - /** - * Exclusive test-case. - */ - - context.suite.only = function(title, fn){ - var suite = context.suite(title, fn); - mocha.grep(suite.fullTitle()); - }; - - /** - * Describe a specification or test-case - * with the given `title` and callback `fn` - * acting as a thunk. - */ - - context.test = function(title, fn){ - var suite = suites[0]; - if (suite.pending) var fn = null; - var test = new Test(title, fn); - suite.addTest(test); - return test; - }; - - /** - * Exclusive test-case. - */ - - context.test.only = function(title, fn){ - var test = context.test(title, fn); - var reString = '^' + utils.escapeRegexp(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); - }; - - /** - * Pending test case. - */ - - context.test.skip = function(title){ - context.test(title); - }; - }); -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/mocha.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/mocha.js deleted file mode 100644 index 950cfadb..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/mocha.js +++ /dev/null @@ -1,317 +0,0 @@ -/*! - * mocha - * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca> - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var path = require('path') - , utils = require('./utils'); - -/** - * Expose `Mocha`. - */ - -exports = module.exports = Mocha; - -/** - * Expose internals. - */ - -exports.utils = utils; -exports.interfaces = require('./interfaces'); -exports.reporters = require('./reporters'); -exports.Runnable = require('./runnable'); -exports.Context = require('./context'); -exports.Runner = require('./runner'); -exports.Suite = require('./suite'); -exports.Hook = require('./hook'); -exports.Test = require('./test'); - -/** - * Return image `name` path. - * - * @param {String} name - * @return {String} - * @api private - */ - -function image(name) { - return __dirname + '/../images/' + name + '.png'; -} - -/** - * Setup mocha with `options`. - * - * Options: - * - * - `ui` name "bdd", "tdd", "exports" etc - * - `reporter` reporter instance, defaults to `mocha.reporters.Dot` - * - `globals` array of accepted globals - * - `timeout` timeout in milliseconds - * - `bail` bail on the first test failure - * - `slow` milliseconds to wait before considering a test slow - * - `ignoreLeaks` ignore global leaks - * - `grep` string or regexp to filter tests with - * - * @param {Object} options - * @api public - */ - -function Mocha(options) { - options = options || {}; - this.files = []; - this.options = options; - this.grep(options.grep); - this.suite = new exports.Suite('', new exports.Context); - this.ui(options.ui); - this.bail(options.bail); - this.reporter(options.reporter); - if (null != options.timeout) this.timeout(options.timeout); - if (options.slow) this.slow(options.slow); -} - -/** - * Enable or disable bailing on the first failure. - * - * @param {Boolean} [bail] - * @api public - */ - -Mocha.prototype.bail = function(bail){ - if (0 == arguments.length) bail = true; - this.suite.bail(bail); - return this; -}; - -/** - * Add test `file`. - * - * @param {String} file - * @api public - */ - -Mocha.prototype.addFile = function(file){ - this.files.push(file); - return this; -}; - -/** - * Set reporter to `reporter`, defaults to "dot". - * - * @param {String|Function} reporter name or constructor - * @api public - */ - -Mocha.prototype.reporter = function(reporter){ - if ('function' == typeof reporter) { - this._reporter = reporter; - } else { - reporter = reporter || 'dot'; - try { - this._reporter = require('./reporters/' + reporter); - } catch (err) { - this._reporter = require(reporter); - } - if (!this._reporter) throw new Error('invalid reporter "' + reporter + '"'); - } - return this; -}; - -/** - * Set test UI `name`, defaults to "bdd". - * - * @param {String} bdd - * @api public - */ - -Mocha.prototype.ui = function(name){ - name = name || 'bdd'; - this._ui = exports.interfaces[name]; - if (!this._ui) throw new Error('invalid interface "' + name + '"'); - this._ui = this._ui(this.suite); - return this; -}; - -/** - * Load registered files. - * - * @api private - */ - -Mocha.prototype.loadFiles = function(fn){ - var self = this; - var suite = this.suite; - var pending = this.files.length; - this.files.forEach(function(file){ - file = path.resolve(file); - suite.emit('pre-require', global, file, self); - suite.emit('require', require(file), file, self); - suite.emit('post-require', global, file, self); - --pending || (fn && fn()); - }); -}; - -/** - * Enable growl support. - * - * @api private - */ - -Mocha.prototype._growl = function(runner, reporter) { - var notify = require('growl'); - - runner.on('end', function(){ - var stats = reporter.stats; - if (stats.failures) { - var msg = stats.failures + ' of ' + runner.total + ' tests failed'; - notify(msg, { name: 'mocha', title: 'Failed', image: image('error') }); - } else { - notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', { - name: 'mocha' - , title: 'Passed' - , image: image('ok') - }); - } - }); -}; - -/** - * Add regexp to grep, if `re` is a string it is escaped. - * - * @param {RegExp|String} re - * @return {Mocha} - * @api public - */ - -Mocha.prototype.grep = function(re){ - this.options.grep = 'string' == typeof re - ? new RegExp(utils.escapeRegexp(re)) - : re; - return this; -}; - -/** - * Invert `.grep()` matches. - * - * @return {Mocha} - * @api public - */ - -Mocha.prototype.invert = function(){ - this.options.invert = true; - return this; -}; - -/** - * Ignore global leaks. - * - * @param {Boolean} ignore - * @return {Mocha} - * @api public - */ - -Mocha.prototype.ignoreLeaks = function(ignore){ - this.options.ignoreLeaks = !!ignore; - return this; -}; - -/** - * Enable global leak checking. - * - * @return {Mocha} - * @api public - */ - -Mocha.prototype.checkLeaks = function(){ - this.options.ignoreLeaks = false; - return this; -}; - -/** - * Enable growl support. - * - * @return {Mocha} - * @api public - */ - -Mocha.prototype.growl = function(){ - this.options.growl = true; - return this; -}; - -/** - * Ignore `globals` array or string. - * - * @param {Array|String} globals - * @return {Mocha} - * @api public - */ - -Mocha.prototype.globals = function(globals){ - this.options.globals = (this.options.globals || []).concat(globals); - return this; -}; - -/** - * Set the timeout in milliseconds. - * - * @param {Number} timeout - * @return {Mocha} - * @api public - */ - -Mocha.prototype.timeout = function(timeout){ - this.suite.timeout(timeout); - return this; -}; - -/** - * Set slowness threshold in milliseconds. - * - * @param {Number} slow - * @return {Mocha} - * @api public - */ - -Mocha.prototype.slow = function(slow){ - this.suite.slow(slow); - return this; -}; - -/** - * Makes all tests async (accepting a callback) - * - * @return {Mocha} - * @api public - */ - -Mocha.prototype.asyncOnly = function(){ - this.options.asyncOnly = true; - return this; -}; - -/** - * Run tests and invoke `fn()` when complete. - * - * @param {Function} fn - * @return {Runner} - * @api public - */ - -Mocha.prototype.run = function(fn){ - if (this.files.length) this.loadFiles(); - var suite = this.suite; - var options = this.options; - var runner = new exports.Runner(suite); - var reporter = new this._reporter(runner); - runner.ignoreLeaks = false !== options.ignoreLeaks; - runner.asyncOnly = options.asyncOnly; - if (options.grep) runner.grep(options.grep, options.invert); - if (options.globals) runner.globals(options.globals); - if (options.growl) this._growl(runner, reporter); - return runner.run(fn); -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/ms.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/ms.js deleted file mode 100644 index c5847f8d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/ms.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} options - * @return {String|Number} - * @api public - */ - -module.exports = function(val, options){ - options = options || {}; - if ('string' == typeof val) return parse(val); - return options.long - ? long(val) - : short(val); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - var match = /^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(str); - if (!match) return; - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'y': - return n * y; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 's': - return n * s; - case 'ms': - return n; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function short(ms) { - if (ms >= d) return Math.round(ms / d) + 'd'; - if (ms >= h) return Math.round(ms / h) + 'h'; - if (ms >= m) return Math.round(ms / m) + 'm'; - if (ms >= s) return Math.round(ms / s) + 's'; - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function long(ms) { - return plural(ms, d, 'day') - || plural(ms, h, 'hour') - || plural(ms, m, 'minute') - || plural(ms, s, 'second') - || ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, n, name) { - if (ms < n) return; - if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name; - return Math.ceil(ms / n) + ' ' + name + 's'; -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/base.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/base.js deleted file mode 100644 index b8d9f822..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/base.js +++ /dev/null @@ -1,401 +0,0 @@ - -/** - * Module dependencies. - */ - -var tty = require('tty') - , diff = require('diff') - , ms = require('../ms'); - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Check if both stdio streams are associated with a tty. - */ - -var isatty = tty.isatty(1) && tty.isatty(2); - -/** - * Expose `Base`. - */ - -exports = module.exports = Base; - -/** - * Enable coloring by default. - */ - -exports.useColors = isatty; - -/** - * Default color map. - */ - -exports.colors = { - 'pass': 90 - , 'fail': 31 - , 'bright pass': 92 - , 'bright fail': 91 - , 'bright yellow': 93 - , 'pending': 36 - , 'suite': 0 - , 'error title': 0 - , 'error message': 31 - , 'error stack': 90 - , 'checkmark': 32 - , 'fast': 90 - , 'medium': 33 - , 'slow': 31 - , 'green': 32 - , 'light': 90 - , 'diff gutter': 90 - , 'diff added': 42 - , 'diff removed': 41 -}; - -/** - * Default symbol map. - */ - -exports.symbols = { - ok: '✓', - err: '✖', - dot: '․' -}; - -// With node.js on Windows: use symbols available in terminal default fonts -if ('win32' == process.platform) { - exports.symbols.ok = '\u221A'; - exports.symbols.err = '\u00D7'; - exports.symbols.dot = '.'; -} - -/** - * Color `str` with the given `type`, - * allowing colors to be disabled, - * as well as user-defined color - * schemes. - * - * @param {String} type - * @param {String} str - * @return {String} - * @api private - */ - -var color = exports.color = function(type, str) { - if (!exports.useColors) return str; - return '\u001b[' + exports.colors[type] + 'm' + str + '\u001b[0m'; -}; - -/** - * Expose term window size, with some - * defaults for when stderr is not a tty. - */ - -exports.window = { - width: isatty - ? process.stdout.getWindowSize - ? process.stdout.getWindowSize(1)[0] - : tty.getWindowSize()[1] - : 75 -}; - -/** - * Expose some basic cursor interactions - * that are common among reporters. - */ - -exports.cursor = { - hide: function(){ - process.stdout.write('\u001b[?25l'); - }, - - show: function(){ - process.stdout.write('\u001b[?25h'); - }, - - deleteLine: function(){ - process.stdout.write('\u001b[2K'); - }, - - beginningOfLine: function(){ - process.stdout.write('\u001b[0G'); - }, - - CR: function(){ - exports.cursor.deleteLine(); - exports.cursor.beginningOfLine(); - } -}; - -/** - * Outut the given `failures` as a list. - * - * @param {Array} failures - * @api public - */ - -exports.list = function(failures){ - console.error(); - failures.forEach(function(test, i){ - // format - var fmt = color('error title', ' %s) %s:\n') - + color('error message', ' %s') - + color('error stack', '\n%s\n'); - - // msg - var err = test.err - , message = err.message || '' - , stack = err.stack || message - , index = stack.indexOf(message) + message.length - , msg = stack.slice(0, index) - , actual = err.actual - , expected = err.expected - , escape = true; - - // uncaught - if (err.uncaught) { - msg = 'Uncaught ' + msg; - } - - // explicitly show diff - if (err.showDiff && sameType(actual, expected)) { - escape = false; - err.actual = actual = stringify(actual); - err.expected = expected = stringify(expected); - } - - // actual / expected diff - if ('string' == typeof actual && 'string' == typeof expected) { - msg = errorDiff(err, 'WordsWithSpace', escape); - - // linenos - var lines = msg.split('\n'); - if (lines.length > 4) { - var width = String(lines.length).length; - msg = lines.map(function(str, i){ - return pad(++i, width) + ' |' + ' ' + str; - }).join('\n'); - } - - // legend - msg = '\n' - + color('diff removed', 'actual') - + ' ' - + color('diff added', 'expected') - + '\n\n' - + msg - + '\n'; - - // indent - msg = msg.replace(/^/gm, ' '); - - fmt = color('error title', ' %s) %s:\n%s') - + color('error stack', '\n%s\n'); - } - - // indent stack trace without msg - stack = stack.slice(index ? index + 1 : index) - .replace(/^/gm, ' '); - - console.error(fmt, (i + 1), test.fullTitle(), msg, stack); - }); -}; - -/** - * Initialize a new `Base` reporter. - * - * All other reporters generally - * inherit from this reporter, providing - * stats such as test duration, number - * of tests passed / failed etc. - * - * @param {Runner} runner - * @api public - */ - -function Base(runner) { - var self = this - , stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 } - , failures = this.failures = []; - - if (!runner) return; - this.runner = runner; - - runner.stats = stats; - - runner.on('start', function(){ - stats.start = new Date; - }); - - runner.on('suite', function(suite){ - stats.suites = stats.suites || 0; - suite.root || stats.suites++; - }); - - runner.on('test end', function(test){ - stats.tests = stats.tests || 0; - stats.tests++; - }); - - runner.on('pass', function(test){ - stats.passes = stats.passes || 0; - - var medium = test.slow() / 2; - test.speed = test.duration > test.slow() - ? 'slow' - : test.duration > medium - ? 'medium' - : 'fast'; - - stats.passes++; - }); - - runner.on('fail', function(test, err){ - stats.failures = stats.failures || 0; - stats.failures++; - test.err = err; - failures.push(test); - }); - - runner.on('end', function(){ - stats.end = new Date; - stats.duration = new Date - stats.start; - }); - - runner.on('pending', function(){ - stats.pending++; - }); -} - -/** - * Output common epilogue used by many of - * the bundled reporters. - * - * @api public - */ - -Base.prototype.epilogue = function(){ - var stats = this.stats; - var tests; - var fmt; - - console.log(); - - // passes - fmt = color('bright pass', ' ') - + color('green', ' %d passing') - + color('light', ' (%s)'); - - console.log(fmt, - stats.passes || 0, - ms(stats.duration)); - - // pending - if (stats.pending) { - fmt = color('pending', ' ') - + color('pending', ' %d pending'); - - console.log(fmt, stats.pending); - } - - // failures - if (stats.failures) { - fmt = color('fail', ' %d failing'); - - console.error(fmt, - stats.failures); - - Base.list(this.failures); - console.error(); - } - - console.log(); -}; - -/** - * Pad the given `str` to `len`. - * - * @param {String} str - * @param {String} len - * @return {String} - * @api private - */ - -function pad(str, len) { - str = String(str); - return Array(len - str.length + 1).join(' ') + str; -} - -/** - * Return a character diff for `err`. - * - * @param {Error} err - * @return {String} - * @api private - */ - -function errorDiff(err, type, escape) { - return diff['diff' + type](err.actual, err.expected).map(function(str){ - if (escape) { - str.value = str.value - .replace(/\t/g, '<tab>') - .replace(/\r/g, '<CR>') - .replace(/\n/g, '<LF>\n'); - } - if (str.added) return colorLines('diff added', str.value); - if (str.removed) return colorLines('diff removed', str.value); - return str.value; - }).join(''); -} - -/** - * Color lines for `str`, using the color `name`. - * - * @param {String} name - * @param {String} str - * @return {String} - * @api private - */ - -function colorLines(name, str) { - return str.split('\n').map(function(str){ - return color(name, str); - }).join('\n'); -} - -/** - * Stringify `obj`. - * - * @param {Mixed} obj - * @return {String} - * @api private - */ - -function stringify(obj) { - if (obj instanceof RegExp) return obj.toString(); - return JSON.stringify(obj, null, 2); -} - -/** - * Check that a / b have the same type. - * - * @param {Object} a - * @param {Object} b - * @return {Boolean} - * @api private - */ - -function sameType(a, b) { - a = Object.prototype.toString.call(a); - b = Object.prototype.toString.call(b); - return a == b; -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/doc.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/doc.js deleted file mode 100644 index 2e5bf57f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/doc.js +++ /dev/null @@ -1,56 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils'); - -/** - * Expose `Doc`. - */ - -exports = module.exports = Doc; - -/** - * Initialize a new `Doc` reporter. - * - * @param {Runner} runner - * @api public - */ - -function Doc(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , total = runner.total - , indents = 2; - - function indent() { - return Array(indents).join(' '); - } - - runner.on('suite', function(suite){ - if (suite.root) return; - ++indents; - console.log('%s<section class="suite">', indent()); - ++indents; - console.log('%s<h1>%s</h1>', indent(), utils.escape(suite.title)); - console.log('%s<dl>', indent()); - }); - - runner.on('suite end', function(suite){ - if (suite.root) return; - console.log('%s</dl>', indent()); - --indents; - console.log('%s</section>', indent()); - --indents; - }); - - runner.on('pass', function(test){ - console.log('%s <dt>%s</dt>', indent(), utils.escape(test.title)); - var code = utils.escape(utils.clean(test.fn.toString())); - console.log('%s <dd><pre><code>%s</code></pre></dd>', indent(), code); - }); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/dot.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/dot.js deleted file mode 100644 index 0c298ba7..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/dot.js +++ /dev/null @@ -1,62 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , color = Base.color; - -/** - * Expose `Dot`. - */ - -exports = module.exports = Dot; - -/** - * Initialize a new `Dot` matrix test reporter. - * - * @param {Runner} runner - * @api public - */ - -function Dot(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , width = Base.window.width * .75 | 0 - , n = 0; - - runner.on('start', function(){ - process.stdout.write('\n '); - }); - - runner.on('pending', function(test){ - process.stdout.write(color('pending', Base.symbols.dot)); - }); - - runner.on('pass', function(test){ - if (++n % width == 0) process.stdout.write('\n '); - if ('slow' == test.speed) { - process.stdout.write(color('bright yellow', Base.symbols.dot)); - } else { - process.stdout.write(color(test.speed, Base.symbols.dot)); - } - }); - - runner.on('fail', function(test, err){ - if (++n % width == 0) process.stdout.write('\n '); - process.stdout.write(color('fail', Base.symbols.dot)); - }); - - runner.on('end', function(){ - console.log(); - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -Dot.prototype.__proto__ = Base.prototype; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/html-cov.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/html-cov.js deleted file mode 100644 index bfb27ffd..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/html-cov.js +++ /dev/null @@ -1,51 +0,0 @@ - -/** - * Module dependencies. - */ - -var JSONCov = require('./json-cov') - , fs = require('fs'); - -/** - * Expose `HTMLCov`. - */ - -exports = module.exports = HTMLCov; - -/** - * Initialize a new `JsCoverage` reporter. - * - * @param {Runner} runner - * @api public - */ - -function HTMLCov(runner) { - var jade = require('jade') - , file = __dirname + '/templates/coverage.jade' - , str = fs.readFileSync(file, 'utf8') - , fn = jade.compile(str, { filename: file }) - , self = this; - - JSONCov.call(this, runner, false); - - runner.on('end', function(){ - process.stdout.write(fn({ - cov: self.cov - , coverageClass: coverageClass - })); - }); -} - -/** - * Return coverage class for `n`. - * - * @return {String} - * @api private - */ - -function coverageClass(n) { - if (n >= 75) return 'high'; - if (n >= 50) return 'medium'; - if (n >= 25) return 'low'; - return 'terrible'; -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/html.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/html.js deleted file mode 100644 index f09279be..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/html.js +++ /dev/null @@ -1,253 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils') - , Progress = require('../browser/progress') - , escape = utils.escape; - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Expose `Doc`. - */ - -exports = module.exports = HTML; - -/** - * Stats template. - */ - -var statsTemplate = '<ul id="mocha-stats">' - + '<li class="progress"><canvas width="40" height="40"></canvas></li>' - + '<li class="passes"><a href="#">passes:</a> <em>0</em></li>' - + '<li class="failures"><a href="#">failures:</a> <em>0</em></li>' - + '<li class="duration">duration: <em>0</em>s</li>' - + '</ul>'; - -/** - * Initialize a new `Doc` reporter. - * - * @param {Runner} runner - * @api public - */ - -function HTML(runner, root) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , total = runner.total - , stat = fragment(statsTemplate) - , items = stat.getElementsByTagName('li') - , passes = items[1].getElementsByTagName('em')[0] - , passesLink = items[1].getElementsByTagName('a')[0] - , failures = items[2].getElementsByTagName('em')[0] - , failuresLink = items[2].getElementsByTagName('a')[0] - , duration = items[3].getElementsByTagName('em')[0] - , canvas = stat.getElementsByTagName('canvas')[0] - , report = fragment('<ul id="mocha-report"></ul>') - , stack = [report] - , progress - , ctx - - root = root || document.getElementById('mocha'); - - if (canvas.getContext) { - var ratio = window.devicePixelRatio || 1; - canvas.style.width = canvas.width; - canvas.style.height = canvas.height; - canvas.width *= ratio; - canvas.height *= ratio; - ctx = canvas.getContext('2d'); - ctx.scale(ratio, ratio); - progress = new Progress; - } - - if (!root) return error('#mocha div missing, add it to your document'); - - // pass toggle - on(passesLink, 'click', function(){ - unhide(); - var name = /pass/.test(report.className) ? '' : ' pass'; - report.className = report.className.replace(/fail|pass/g, '') + name; - if (report.className.trim()) hideSuitesWithout('test pass'); - }); - - // failure toggle - on(failuresLink, 'click', function(){ - unhide(); - var name = /fail/.test(report.className) ? '' : ' fail'; - report.className = report.className.replace(/fail|pass/g, '') + name; - if (report.className.trim()) hideSuitesWithout('test fail'); - }); - - root.appendChild(stat); - root.appendChild(report); - - if (progress) progress.size(40); - - runner.on('suite', function(suite){ - if (suite.root) return; - - // suite - var url = '?grep=' + encodeURIComponent(suite.fullTitle()); - var el = fragment('<li class="suite"><h1><a href="%s">%s</a></h1></li>', url, escape(suite.title)); - - // container - stack[0].appendChild(el); - stack.unshift(document.createElement('ul')); - el.appendChild(stack[0]); - }); - - runner.on('suite end', function(suite){ - if (suite.root) return; - stack.shift(); - }); - - runner.on('fail', function(test, err){ - if ('hook' == test.type) runner.emit('test end', test); - }); - - runner.on('test end', function(test){ - // TODO: add to stats - var percent = stats.tests / this.total * 100 | 0; - if (progress) progress.update(percent).draw(ctx); - - // update stats - var ms = new Date - stats.start; - text(passes, stats.passes); - text(failures, stats.failures); - text(duration, (ms / 1000).toFixed(2)); - - // test - if ('passed' == test.state) { - var el = fragment('<li class="test pass %e"><h2>%e<span class="duration">%ems</span> <a href="?grep=%e" class="replay">‣</a></h2></li>', test.speed, test.title, test.duration, encodeURIComponent(test.fullTitle())); - } else if (test.pending) { - var el = fragment('<li class="test pass pending"><h2>%e</h2></li>', test.title); - } else { - var el = fragment('<li class="test fail"><h2>%e <a href="?grep=%e" class="replay">‣</a></h2></li>', test.title, encodeURIComponent(test.fullTitle())); - var str = test.err.stack || test.err.toString(); - - // FF / Opera do not add the message - if (!~str.indexOf(test.err.message)) { - str = test.err.message + '\n' + str; - } - - // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we - // check for the result of the stringifying. - if ('[object Error]' == str) str = test.err.message; - - // Safari doesn't give you a stack. Let's at least provide a source line. - if (!test.err.stack && test.err.sourceURL && test.err.line !== undefined) { - str += "\n(" + test.err.sourceURL + ":" + test.err.line + ")"; - } - - el.appendChild(fragment('<pre class="error">%e</pre>', str)); - } - - // toggle code - // TODO: defer - if (!test.pending) { - var h2 = el.getElementsByTagName('h2')[0]; - - on(h2, 'click', function(){ - pre.style.display = 'none' == pre.style.display - ? 'block' - : 'none'; - }); - - var pre = fragment('<pre><code>%e</code></pre>', utils.clean(test.fn.toString())); - el.appendChild(pre); - pre.style.display = 'none'; - } - - // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack. - if (stack[0]) stack[0].appendChild(el); - }); -} - -/** - * Display error `msg`. - */ - -function error(msg) { - document.body.appendChild(fragment('<div id="mocha-error">%s</div>', msg)); -} - -/** - * Return a DOM fragment from `html`. - */ - -function fragment(html) { - var args = arguments - , div = document.createElement('div') - , i = 1; - - div.innerHTML = html.replace(/%([se])/g, function(_, type){ - switch (type) { - case 's': return String(args[i++]); - case 'e': return escape(args[i++]); - } - }); - - return div.firstChild; -} - -/** - * Check for suites that do not have elements - * with `classname`, and hide them. - */ - -function hideSuitesWithout(classname) { - var suites = document.getElementsByClassName('suite'); - for (var i = 0; i < suites.length; i++) { - var els = suites[i].getElementsByClassName(classname); - if (0 == els.length) suites[i].className += ' hidden'; - } -} - -/** - * Unhide .hidden suites. - */ - -function unhide() { - var els = document.getElementsByClassName('suite hidden'); - for (var i = 0; i < els.length; ++i) { - els[i].className = els[i].className.replace('suite hidden', 'suite'); - } -} - -/** - * Set `el` text to `str`. - */ - -function text(el, str) { - if (el.textContent) { - el.textContent = str; - } else { - el.innerText = str; - } -} - -/** - * Listen on `event` with callback `fn`. - */ - -function on(el, event, fn) { - if (el.addEventListener) { - el.addEventListener(event, fn, false); - } else { - el.attachEvent('on' + event, fn); - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/index.js deleted file mode 100644 index 4750f26d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/index.js +++ /dev/null @@ -1,19 +0,0 @@ - -exports.Base = require('./base'); -exports.Dot = require('./dot'); -exports.Doc = require('./doc'); -exports.TAP = require('./tap'); -exports.JSON = require('./json'); -exports.HTML = require('./html'); -exports.List = require('./list'); -exports.Min = require('./min'); -exports.Spec = require('./spec'); -exports.Nyan = require('./nyan'); -exports.XUnit = require('./xunit'); -exports.Markdown = require('./markdown'); -exports.Progress = require('./progress'); -exports.Landing = require('./landing'); -exports.JSONCov = require('./json-cov'); -exports.HTMLCov = require('./html-cov'); -exports.JSONStream = require('./json-stream'); -exports.Teamcity = require('./teamcity'); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/json-cov.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/json-cov.js deleted file mode 100644 index 73d00093..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/json-cov.js +++ /dev/null @@ -1,153 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `JSONCov`. - */ - -exports = module.exports = JSONCov; - -/** - * Initialize a new `JsCoverage` reporter. - * - * @param {Runner} runner - * @param {Boolean} output - * @api public - */ - -function JSONCov(runner, output) { - var self = this - , output = 1 == arguments.length ? true : output; - - Base.call(this, runner); - - var tests = [] - , failures = [] - , passes = []; - - runner.on('test end', function(test){ - tests.push(test); - }); - - runner.on('pass', function(test){ - passes.push(test); - }); - - runner.on('fail', function(test){ - failures.push(test); - }); - - runner.on('end', function(){ - var cov = global._$jscoverage || {}; - var result = self.cov = map(cov); - result.stats = self.stats; - result.tests = tests.map(clean); - result.failures = failures.map(clean); - result.passes = passes.map(clean); - if (!output) return; - process.stdout.write(JSON.stringify(result, null, 2 )); - }); -} - -/** - * Map jscoverage data to a JSON structure - * suitable for reporting. - * - * @param {Object} cov - * @return {Object} - * @api private - */ - -function map(cov) { - var ret = { - instrumentation: 'node-jscoverage' - , sloc: 0 - , hits: 0 - , misses: 0 - , coverage: 0 - , files: [] - }; - - for (var filename in cov) { - var data = coverage(filename, cov[filename]); - ret.files.push(data); - ret.hits += data.hits; - ret.misses += data.misses; - ret.sloc += data.sloc; - } - - ret.files.sort(function(a, b) { - return a.filename.localeCompare(b.filename); - }); - - if (ret.sloc > 0) { - ret.coverage = (ret.hits / ret.sloc) * 100; - } - - return ret; -}; - -/** - * Map jscoverage data for a single source file - * to a JSON structure suitable for reporting. - * - * @param {String} filename name of the source file - * @param {Object} data jscoverage coverage data - * @return {Object} - * @api private - */ - -function coverage(filename, data) { - var ret = { - filename: filename, - coverage: 0, - hits: 0, - misses: 0, - sloc: 0, - source: {} - }; - - data.source.forEach(function(line, num){ - num++; - - if (data[num] === 0) { - ret.misses++; - ret.sloc++; - } else if (data[num] !== undefined) { - ret.hits++; - ret.sloc++; - } - - ret.source[num] = { - source: line - , coverage: data[num] === undefined - ? '' - : data[num] - }; - }); - - ret.coverage = ret.hits / ret.sloc * 100; - - return ret; -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @param {Object} test - * @return {Object} - * @api private - */ - -function clean(test) { - return { - title: test.title - , fullTitle: test.fullTitle() - , duration: test.duration - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/json-stream.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/json-stream.js deleted file mode 100644 index 7cb8fbed..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/json-stream.js +++ /dev/null @@ -1,61 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , color = Base.color; - -/** - * Expose `List`. - */ - -exports = module.exports = List; - -/** - * Initialize a new `List` test reporter. - * - * @param {Runner} runner - * @api public - */ - -function List(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , total = runner.total; - - runner.on('start', function(){ - console.log(JSON.stringify(['start', { total: total }])); - }); - - runner.on('pass', function(test){ - console.log(JSON.stringify(['pass', clean(test)])); - }); - - runner.on('fail', function(test, err){ - console.log(JSON.stringify(['fail', clean(test)])); - }); - - runner.on('end', function(){ - process.stdout.write(JSON.stringify(['end', self.stats])); - }); -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @param {Object} test - * @return {Object} - * @api private - */ - -function clean(test) { - return { - title: test.title - , fullTitle: test.fullTitle() - , duration: test.duration - } -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/json.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/json.js deleted file mode 100644 index a699f501..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/json.js +++ /dev/null @@ -1,70 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `JSON`. - */ - -exports = module.exports = JSONReporter; - -/** - * Initialize a new `JSON` reporter. - * - * @param {Runner} runner - * @api public - */ - -function JSONReporter(runner) { - var self = this; - Base.call(this, runner); - - var tests = [] - , failures = [] - , passes = []; - - runner.on('test end', function(test){ - tests.push(test); - }); - - runner.on('pass', function(test){ - passes.push(test); - }); - - runner.on('fail', function(test){ - failures.push(test); - }); - - runner.on('end', function(){ - var obj = { - stats: self.stats - , tests: tests.map(clean) - , failures: failures.map(clean) - , passes: passes.map(clean) - }; - - process.stdout.write(JSON.stringify(obj, null, 2)); - }); -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @param {Object} test - * @return {Object} - * @api private - */ - -function clean(test) { - return { - title: test.title - , fullTitle: test.fullTitle() - , duration: test.duration - } -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/landing.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/landing.js deleted file mode 100644 index bf064f64..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/landing.js +++ /dev/null @@ -1,97 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `Landing`. - */ - -exports = module.exports = Landing; - -/** - * Airplane color. - */ - -Base.colors.plane = 0; - -/** - * Airplane crash color. - */ - -Base.colors['plane crash'] = 31; - -/** - * Runway color. - */ - -Base.colors.runway = 90; - -/** - * Initialize a new `Landing` reporter. - * - * @param {Runner} runner - * @api public - */ - -function Landing(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , width = Base.window.width * .75 | 0 - , total = runner.total - , stream = process.stdout - , plane = color('plane', '✈') - , crashed = -1 - , n = 0; - - function runway() { - var buf = Array(width).join('-'); - return ' ' + color('runway', buf); - } - - runner.on('start', function(){ - stream.write('\n '); - cursor.hide(); - }); - - runner.on('test end', function(test){ - // check if the plane crashed - var col = -1 == crashed - ? width * ++n / total | 0 - : crashed; - - // show the crash - if ('failed' == test.state) { - plane = color('plane crash', '✈'); - crashed = col; - } - - // render landing strip - stream.write('\u001b[4F\n\n'); - stream.write(runway()); - stream.write('\n '); - stream.write(color('runway', Array(col).join('⋅'))); - stream.write(plane) - stream.write(color('runway', Array(width - col).join('⋅') + '\n')); - stream.write(runway()); - stream.write('\u001b[0m'); - }); - - runner.on('end', function(){ - cursor.show(); - console.log(); - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -Landing.prototype.__proto__ = Base.prototype; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/list.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/list.js deleted file mode 100644 index 3328e157..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/list.js +++ /dev/null @@ -1,64 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `List`. - */ - -exports = module.exports = List; - -/** - * Initialize a new `List` test reporter. - * - * @param {Runner} runner - * @api public - */ - -function List(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , n = 0; - - runner.on('start', function(){ - console.log(); - }); - - runner.on('test', function(test){ - process.stdout.write(color('pass', ' ' + test.fullTitle() + ': ')); - }); - - runner.on('pending', function(test){ - var fmt = color('checkmark', ' -') - + color('pending', ' %s'); - console.log(fmt, test.fullTitle()); - }); - - runner.on('pass', function(test){ - var fmt = color('checkmark', ' '+Base.symbols.dot) - + color('pass', ' %s: ') - + color(test.speed, '%dms'); - cursor.CR(); - console.log(fmt, test.fullTitle(), test.duration); - }); - - runner.on('fail', function(test, err){ - cursor.CR(); - console.log(color('fail', ' %d) %s'), ++n, test.fullTitle()); - }); - - runner.on('end', self.epilogue.bind(self)); -} - -/** - * Inherit from `Base.prototype`. - */ - -List.prototype.__proto__ = Base.prototype; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/markdown.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/markdown.js deleted file mode 100644 index 6383a642..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/markdown.js +++ /dev/null @@ -1,91 +0,0 @@ -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils'); - -/** - * Expose `Markdown`. - */ - -exports = module.exports = Markdown; - -/** - * Initialize a new `Markdown` reporter. - * - * @param {Runner} runner - * @api public - */ - -function Markdown(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , level = 0 - , buf = ''; - - function title(str) { - return Array(level).join('#') + ' ' + str; - } - - function indent() { - return Array(level).join(' '); - } - - function mapTOC(suite, obj) { - var ret = obj; - obj = obj[suite.title] = obj[suite.title] || { suite: suite }; - suite.suites.forEach(function(suite){ - mapTOC(suite, obj); - }); - return ret; - } - - function stringifyTOC(obj, level) { - ++level; - var buf = ''; - var link; - for (var key in obj) { - if ('suite' == key) continue; - if (key) link = ' - [' + key + '](#' + utils.slug(obj[key].suite.fullTitle()) + ')\n'; - if (key) buf += Array(level).join(' ') + link; - buf += stringifyTOC(obj[key], level); - } - --level; - return buf; - } - - function generateTOC(suite) { - var obj = mapTOC(suite, {}); - return stringifyTOC(obj, 0); - } - - generateTOC(runner.suite); - - runner.on('suite', function(suite){ - ++level; - var slug = utils.slug(suite.fullTitle()); - buf += '<a name="' + slug + '"></a>' + '\n'; - buf += title(suite.title) + '\n'; - }); - - runner.on('suite end', function(suite){ - --level; - }); - - runner.on('pass', function(test){ - var code = utils.clean(test.fn.toString()); - buf += test.title + '.\n'; - buf += '\n```js\n'; - buf += code + '\n'; - buf += '```\n\n'; - }); - - runner.on('end', function(){ - process.stdout.write('# TOC\n'); - process.stdout.write(generateTOC(runner.suite)); - process.stdout.write(buf); - }); -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/min.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/min.js deleted file mode 100644 index 1b6117d0..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/min.js +++ /dev/null @@ -1,38 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `Min`. - */ - -exports = module.exports = Min; - -/** - * Initialize a new `Min` minimal test reporter (best used with --watch). - * - * @param {Runner} runner - * @api public - */ - -function Min(runner) { - Base.call(this, runner); - - runner.on('start', function(){ - // clear screen - process.stdout.write('\u001b[2J'); - // set cursor position - process.stdout.write('\u001b[1;3H'); - }); - - runner.on('end', this.epilogue.bind(this)); -} - -/** - * Inherit from `Base.prototype`. - */ - -Min.prototype.__proto__ = Base.prototype; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/nyan.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/nyan.js deleted file mode 100644 index 4501f6b2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/nyan.js +++ /dev/null @@ -1,260 +0,0 @@ -/** - * Module dependencies. - */ - -var Base = require('./base') - , color = Base.color; - -/** - * Expose `Dot`. - */ - -exports = module.exports = NyanCat; - -/** - * Initialize a new `Dot` matrix test reporter. - * - * @param {Runner} runner - * @api public - */ - -function NyanCat(runner) { - Base.call(this, runner); - var self = this - , stats = this.stats - , width = Base.window.width * .75 | 0 - , rainbowColors = this.rainbowColors = self.generateColors() - , colorIndex = this.colorIndex = 0 - , numerOfLines = this.numberOfLines = 4 - , trajectories = this.trajectories = [[], [], [], []] - , nyanCatWidth = this.nyanCatWidth = 11 - , trajectoryWidthMax = this.trajectoryWidthMax = (width - nyanCatWidth) - , scoreboardWidth = this.scoreboardWidth = 5 - , tick = this.tick = 0 - , n = 0; - - runner.on('start', function(){ - Base.cursor.hide(); - self.draw(); - }); - - runner.on('pending', function(test){ - self.draw(); - }); - - runner.on('pass', function(test){ - self.draw(); - }); - - runner.on('fail', function(test, err){ - self.draw(); - }); - - runner.on('end', function(){ - Base.cursor.show(); - for (var i = 0; i < self.numberOfLines; i++) write('\n'); - self.epilogue(); - }); -} - -/** - * Draw the nyan cat - * - * @api private - */ - -NyanCat.prototype.draw = function(){ - this.appendRainbow(); - this.drawScoreboard(); - this.drawRainbow(); - this.drawNyanCat(); - this.tick = !this.tick; -}; - -/** - * Draw the "scoreboard" showing the number - * of passes, failures and pending tests. - * - * @api private - */ - -NyanCat.prototype.drawScoreboard = function(){ - var stats = this.stats; - var colors = Base.colors; - - function draw(color, n) { - write(' '); - write('\u001b[' + color + 'm' + n + '\u001b[0m'); - write('\n'); - } - - draw(colors.green, stats.passes); - draw(colors.fail, stats.failures); - draw(colors.pending, stats.pending); - write('\n'); - - this.cursorUp(this.numberOfLines); -}; - -/** - * Append the rainbow. - * - * @api private - */ - -NyanCat.prototype.appendRainbow = function(){ - var segment = this.tick ? '_' : '-'; - var rainbowified = this.rainbowify(segment); - - for (var index = 0; index < this.numberOfLines; index++) { - var trajectory = this.trajectories[index]; - if (trajectory.length >= this.trajectoryWidthMax) trajectory.shift(); - trajectory.push(rainbowified); - } -}; - -/** - * Draw the rainbow. - * - * @api private - */ - -NyanCat.prototype.drawRainbow = function(){ - var self = this; - - this.trajectories.forEach(function(line, index) { - write('\u001b[' + self.scoreboardWidth + 'C'); - write(line.join('')); - write('\n'); - }); - - this.cursorUp(this.numberOfLines); -}; - -/** - * Draw the nyan cat - * - * @api private - */ - -NyanCat.prototype.drawNyanCat = function() { - var self = this; - var startWidth = this.scoreboardWidth + this.trajectories[0].length; - var color = '\u001b[' + startWidth + 'C'; - var padding = ''; - - write(color); - write('_,------,'); - write('\n'); - - write(color); - padding = self.tick ? ' ' : ' '; - write('_|' + padding + '/\\_/\\ '); - write('\n'); - - write(color); - padding = self.tick ? '_' : '__'; - var tail = self.tick ? '~' : '^'; - var face; - write(tail + '|' + padding + this.face() + ' '); - write('\n'); - - write(color); - padding = self.tick ? ' ' : ' '; - write(padding + '"" "" '); - write('\n'); - - this.cursorUp(this.numberOfLines); -}; - -/** - * Draw nyan cat face. - * - * @return {String} - * @api private - */ - -NyanCat.prototype.face = function() { - var stats = this.stats; - if (stats.failures) { - return '( x .x)'; - } else if (stats.pending) { - return '( o .o)'; - } else if(stats.passes) { - return '( ^ .^)'; - } else { - return '( - .-)'; - } -} - -/** - * Move cursor up `n`. - * - * @param {Number} n - * @api private - */ - -NyanCat.prototype.cursorUp = function(n) { - write('\u001b[' + n + 'A'); -}; - -/** - * Move cursor down `n`. - * - * @param {Number} n - * @api private - */ - -NyanCat.prototype.cursorDown = function(n) { - write('\u001b[' + n + 'B'); -}; - -/** - * Generate rainbow colors. - * - * @return {Array} - * @api private - */ - -NyanCat.prototype.generateColors = function(){ - var colors = []; - - for (var i = 0; i < (6 * 7); i++) { - var pi3 = Math.floor(Math.PI / 3); - var n = (i * (1.0 / 6)); - var r = Math.floor(3 * Math.sin(n) + 3); - var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3); - var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3); - colors.push(36 * r + 6 * g + b + 16); - } - - return colors; -}; - -/** - * Apply rainbow to the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -NyanCat.prototype.rainbowify = function(str){ - var color = this.rainbowColors[this.colorIndex % this.rainbowColors.length]; - this.colorIndex += 1; - return '\u001b[38;5;' + color + 'm' + str + '\u001b[0m'; -}; - -/** - * Stdout helper. - */ - -function write(string) { - process.stdout.write(string); -} - -/** - * Inherit from `Base.prototype`. - */ - -NyanCat.prototype.__proto__ = Base.prototype; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/progress.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/progress.js deleted file mode 100644 index 59536386..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/progress.js +++ /dev/null @@ -1,86 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `Progress`. - */ - -exports = module.exports = Progress; - -/** - * General progress bar color. - */ - -Base.colors.progress = 90; - -/** - * Initialize a new `Progress` bar test reporter. - * - * @param {Runner} runner - * @param {Object} options - * @api public - */ - -function Progress(runner, options) { - Base.call(this, runner); - - var self = this - , options = options || {} - , stats = this.stats - , width = Base.window.width * .50 | 0 - , total = runner.total - , complete = 0 - , max = Math.max; - - // default chars - options.open = options.open || '['; - options.complete = options.complete || '▬'; - options.incomplete = options.incomplete || Base.symbols.dot; - options.close = options.close || ']'; - options.verbose = false; - - // tests started - runner.on('start', function(){ - console.log(); - cursor.hide(); - }); - - // tests complete - runner.on('test end', function(){ - complete++; - var incomplete = total - complete - , percent = complete / total - , n = width * percent | 0 - , i = width - n; - - cursor.CR(); - process.stdout.write('\u001b[J'); - process.stdout.write(color('progress', ' ' + options.open)); - process.stdout.write(Array(n).join(options.complete)); - process.stdout.write(Array(i).join(options.incomplete)); - process.stdout.write(color('progress', options.close)); - if (options.verbose) { - process.stdout.write(color('progress', ' ' + complete + ' of ' + total)); - } - }); - - // tests are complete, output some stats - // and the failures if any - runner.on('end', function(){ - cursor.show(); - console.log(); - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -Progress.prototype.__proto__ = Base.prototype; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/spec.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/spec.js deleted file mode 100644 index cd97261c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/spec.js +++ /dev/null @@ -1,87 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `Spec`. - */ - -exports = module.exports = Spec; - -/** - * Initialize a new `Spec` test reporter. - * - * @param {Runner} runner - * @api public - */ - -function Spec(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , indents = 0 - , n = 0; - - function indent() { - return Array(indents).join(' ') - } - - runner.on('start', function(){ - console.log(); - }); - - runner.on('suite', function(suite){ - ++indents; - console.log(color('suite', '%s%s'), indent(), suite.title); - }); - - runner.on('suite end', function(suite){ - --indents; - if (1 == indents) console.log(); - }); - - runner.on('test', function(test){ - process.stdout.write(indent() + color('pass', ' ◦ ' + test.title + ': ')); - }); - - runner.on('pending', function(test){ - var fmt = indent() + color('pending', ' - %s'); - console.log(fmt, test.title); - }); - - runner.on('pass', function(test){ - if ('fast' == test.speed) { - var fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s '); - cursor.CR(); - console.log(fmt, test.title); - } else { - var fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s ') - + color(test.speed, '(%dms)'); - cursor.CR(); - console.log(fmt, test.title, test.duration); - } - }); - - runner.on('fail', function(test, err){ - cursor.CR(); - console.log(indent() + color('fail', ' %d) %s'), ++n, test.title); - }); - - runner.on('end', self.epilogue.bind(self)); -} - -/** - * Inherit from `Base.prototype`. - */ - -Spec.prototype.__proto__ = Base.prototype; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/tap.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/tap.js deleted file mode 100644 index 2bcd995b..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/tap.js +++ /dev/null @@ -1,73 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `TAP`. - */ - -exports = module.exports = TAP; - -/** - * Initialize a new `TAP` reporter. - * - * @param {Runner} runner - * @api public - */ - -function TAP(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , n = 1 - , passes = 0 - , failures = 0; - - runner.on('start', function(){ - var total = runner.grepTotal(runner.suite); - console.log('%d..%d', 1, total); - }); - - runner.on('test end', function(){ - ++n; - }); - - runner.on('pending', function(test){ - console.log('ok %d %s # SKIP -', n, title(test)); - }); - - runner.on('pass', function(test){ - passes++; - console.log('ok %d %s', n, title(test)); - }); - - runner.on('fail', function(test, err){ - failures++; - console.log('not ok %d %s', n, title(test)); - if (err.stack) console.log(err.stack.replace(/^/gm, ' ')); - }); - - runner.on('end', function(){ - console.log('# tests ' + (passes + failures)); - console.log('# pass ' + passes); - console.log('# fail ' + failures); - }); -} - -/** - * Return a TAP-safe title of `test` - * - * @param {Object} test - * @return {String} - * @api private - */ - -function title(test) { - return test.fullTitle().replace(/#/g, ''); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/teamcity.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/teamcity.js deleted file mode 100644 index 032eea7d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/teamcity.js +++ /dev/null @@ -1,65 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `Teamcity`. - */ - -exports = module.exports = Teamcity; - -/** - * Initialize a new `Teamcity` reporter. - * - * @param {Runner} runner - * @api public - */ - -function Teamcity(runner) { - Base.call(this, runner); - var stats = this.stats; - - runner.on('start', function() { - console.log("##teamcity[testSuiteStarted name='mocha.suite']"); - }); - - runner.on('test', function(test) { - console.log("##teamcity[testStarted name='" + escape(test.fullTitle()) + "']"); - }); - - runner.on('fail', function(test, err) { - console.log("##teamcity[testFailed name='" + escape(test.fullTitle()) + "' message='" + escape(err.message) + "']"); - }); - - runner.on('pending', function(test) { - console.log("##teamcity[testIgnored name='" + escape(test.fullTitle()) + "' message='pending']"); - }); - - runner.on('test end', function(test) { - console.log("##teamcity[testFinished name='" + escape(test.fullTitle()) + "' duration='" + test.duration + "']"); - }); - - runner.on('end', function() { - console.log("##teamcity[testSuiteFinished name='mocha.suite' duration='" + stats.duration + "']"); - }); -} - -/** - * Escape the given `str`. - */ - -function escape(str) { - return str - .replace(/\|/g, "||") - .replace(/\n/g, "|n") - .replace(/\r/g, "|r") - .replace(/\[/g, "|[") - .replace(/\]/g, "|]") - .replace(/\u0085/g, "|x") - .replace(/\u2028/g, "|l") - .replace(/\u2029/g, "|p") - .replace(/'/g, "|'"); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/coverage.jade b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/coverage.jade deleted file mode 100644 index b78119fb..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/coverage.jade +++ /dev/null @@ -1,50 +0,0 @@ -!!! 5 -html - head - title Coverage - include script.html - include style.html - body - #coverage - h1#overview Coverage - include menu - - #stats(class=coverageClass(cov.coverage)) - .percentage #{cov.coverage | 0}% - .sloc= cov.sloc - .hits= cov.hits - .misses= cov.misses - - #files - for file in cov.files - .file - h2(id=file.filename)= file.filename - #stats(class=coverageClass(file.coverage)) - .percentage #{file.coverage | 0}% - .sloc= file.sloc - .hits= file.hits - .misses= file.misses - - table#source - thead - tr - th Line - th Hits - th Source - tbody - for line, number in file.source - if line.coverage > 0 - tr.hit - td.line= number - td.hits= line.coverage - td.source= line.source - else if 0 === line.coverage - tr.miss - td.line= number - td.hits 0 - td.source= line.source - else - tr - td.line= number - td.hits - td.source= line.source || ' ' diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/menu.jade b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/menu.jade deleted file mode 100644 index e9ba4648..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/menu.jade +++ /dev/null @@ -1,13 +0,0 @@ -#menu - li - a(href='#overview') overview - for file in cov.files - li - span.cov(class=coverageClass(file.coverage)) #{file.coverage | 0} - a(href='##{file.filename}') - segments = file.filename.split('/') - basename = segments.pop() - if segments.length - span.dirname= segments.join('/') + '/' - span.basename= basename - a#logo(href='http://visionmedia.github.io/mocha/') m diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/script.html b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/script.html deleted file mode 100644 index 073cf793..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/script.html +++ /dev/null @@ -1,34 +0,0 @@ -<script> - -headings = []; - -onload = function(){ - headings = document.querySelectorAll('h2'); -}; - -onscroll = function(e){ - var heading = find(window.scrollY); - if (!heading) return; - var links = document.querySelectorAll('#menu a') - , link; - - for (var i = 0, len = links.length; i < len; ++i) { - link = links[i]; - link.className = link.getAttribute('href') == '#' + heading.id - ? 'active' - : ''; - } -}; - -function find(y) { - var i = headings.length - , heading; - - while (i--) { - heading = headings[i]; - if (y >= heading.offsetTop) { - return heading; - } - } -} -</script> diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/style.html b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/style.html deleted file mode 100644 index 643c0ab7..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/templates/style.html +++ /dev/null @@ -1,320 +0,0 @@ -<style> - -body { - font: 14px/1.6 "Helvetica Neue", Helvetica, Arial, sans-serif; - margin: 0; - color: #2C2C2C; - border-top: 2px solid #ddd; -} - -#coverage { - padding: 60px; -} - -h1 a { - color: inherit; - font-weight: inherit; -} - -h1 a:hover { - text-decoration: none; -} - -.onload h1 { - opacity: 1; -} - -h2 { - width: 80%; - margin-top: 80px; - margin-bottom: 0; - font-weight: 100; - letter-spacing: 1px; - border-bottom: 1px solid #eee; -} - -a { - color: #8A6343; - font-weight: bold; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -ul { - margin-top: 20px; - padding: 0 15px; - width: 100%; -} - -ul li { - float: left; - width: 40%; - margin-top: 5px; - margin-right: 60px; - list-style: none; - border-bottom: 1px solid #eee; - padding: 5px 0; - font-size: 12px; -} - -ul::after { - content: '.'; - height: 0; - display: block; - visibility: hidden; - clear: both; -} - -code { - font: 12px monaco, monospace; -} - -pre { - margin: 30px; - padding: 30px; - border: 1px solid #eee; - border-bottom-color: #ddd; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -webkit-box-shadow: inset 0 0 10px #eee; - -moz-box-shadow: inset 0 0 10px #eee; - box-shadow: inset 0 0 10px #eee; - overflow-x: auto; -} - -img { - margin: 30px; - padding: 1px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: 0 3px 10px #dedede, 0 1px 5px #888; - -moz-box-shadow: 0 3px 10px #dedede, 0 1px 5px #888; - box-shadow: 0 3px 10px #dedede, 0 1px 5px #888; - max-width: 100%; -} - -footer { - background: #eee; - width: 100%; - padding: 50px 0; - text-align: right; - border-top: 1px solid #ddd; -} - -footer span { - display: block; - margin-right: 30px; - color: #888; - font-size: 12px; -} - -#menu { - position: fixed; - font-size: 12px; - overflow-y: auto; - top: 0; - right: 0; - margin: 0; - height: 100%; - padding: 15px 0; - text-align: right; - border-left: 1px solid #eee; - -moz-box-shadow: 0 0 2px #888 - , inset 5px 0 20px rgba(0,0,0,.5) - , inset 5px 0 3px rgba(0,0,0,.3); - -webkit-box-shadow: 0 0 2px #888 - , inset 5px 0 20px rgba(0,0,0,.5) - , inset 5px 0 3px rgba(0,0,0,.3); - box-shadow: 0 0 2px #888 - , inset 5px 0 20px rgba(0,0,0,.5) - , inset 5px 0 3px rgba(0,0,0,.3); - -webkit-font-smoothing: antialiased; - background: url("data:image/png;base64,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"); -} - -#menu::after { - display: block; - content: ''; - padding-top: 80px; -} - -#logo { - position: fixed; - bottom: 10px; - right: 10px; - background: rgba(255,255,255,.1); - font-size: 11px; - display: block; - width: 20px; - height: 20px; - line-height: 20px; - text-align: center; - -webkit-border-radius: 20px; - -moz-border-radius: 20px; - border-radius: 20px; - -webkit-box-shadow: 0 0 3px rgba(0,0,0,.2); - -moz-box-shadow: 0 0 3px rgba(0,0,0,.2); - box-shadow: 0 0 3px rgba(0,0,0,.2); - color: inherit; -} - -#menu li a { - display: block; - color: white; - padding: 0 35px 0 25px; - -webkit-transition: background 300ms; - -moz-transition: background 300ms; -} - -#menu li { - position: relative; - list-style: none; -} - -#menu a:hover, -#menu a.active { - text-decoration: none; - background: rgba(255,255,255,.1); -} - -#menu li:hover .cov { - opacity: 1; -} - -#menu li .dirname { - opacity: .60; - padding-right: 2px; -} - -#menu li .basename { - opacity: 1; -} - -#menu .cov { - background: rgba(0,0,0,.4); - position: absolute; - top: 0; - right: 8px; - font-size: 9px; - opacity: .6; - text-align: left; - width: 17px; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - border-radius: 10px; - padding: 2px 3px; - text-align: center; -} - -#stats:nth-child(2n) { - display: inline-block; - margin-top: 15px; - border: 1px solid #eee; - padding: 10px; - -webkit-box-shadow: inset 0 0 2px #eee; - -moz-box-shadow: inset 0 0 2px #eee; - box-shadow: inset 0 0 2px #eee; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} - -#stats div { - float: left; - padding: 0 5px; -} - -#stats::after { - display: block; - content: ''; - clear: both; -} - -#stats .sloc::after { - content: ' SLOC'; - color: #b6b6b6; -} - -#stats .percentage::after { - content: ' coverage'; - color: #b6b6b6; -} - -#stats .hits, -#stats .misses { - display: none; -} - -.high { - color: #00d4b4; -} -.medium { - color: #e87d0d; -} -.low { - color: #d4081a; -} -.terrible { - color: #d4081a; - font-weight: bold; -} - -table { - width: 80%; - margin-top: 10px; - border-collapse: collapse; - border: 1px solid #cbcbcb; - color: #363636; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -table thead { - display: none; -} - -table td.line, -table td.hits { - width: 20px; - background: #eaeaea; - text-align: center; - font-size: 11px; - padding: 0 10px; - color: #949494; -} - -table td.hits { - width: 10px; - padding: 2px 5px; - color: rgba(0,0,0,.2); - background: #f0f0f0; -} - -tr.miss td.line, -tr.miss td.hits { - background: #e6c3c7; -} - -tr.miss td { - background: #f8d5d8; -} - -td.source { - padding-left: 15px; - line-height: 15px; - white-space: pre; - font: 12px monaco, monospace; -} - -code .comment { color: #ddd } -code .init { color: #2F6FAD } -code .string { color: #5890AD } -code .keyword { color: #8A6343 } -code .number { color: #2F6FAD } -</style> \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/xunit.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/xunit.js deleted file mode 100644 index 1ed5ee93..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/reporters/xunit.js +++ /dev/null @@ -1,115 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils') - , escape = utils.escape; - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Expose `XUnit`. - */ - -exports = module.exports = XUnit; - -/** - * Initialize a new `XUnit` reporter. - * - * @param {Runner} runner - * @api public - */ - -function XUnit(runner) { - Base.call(this, runner); - var stats = this.stats - , tests = [] - , self = this; - - runner.on('pass', function(test){ - tests.push(test); - }); - - runner.on('fail', function(test){ - tests.push(test); - }); - - runner.on('end', function(){ - console.log(tag('testsuite', { - name: 'Mocha Tests' - , tests: stats.tests - , failures: stats.failures - , errors: stats.failures - , skipped: stats.tests - stats.failures - stats.passes - , timestamp: (new Date).toUTCString() - , time: (stats.duration / 1000) || 0 - }, false)); - - tests.forEach(test); - console.log('</testsuite>'); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -XUnit.prototype.__proto__ = Base.prototype; - -/** - * Output tag for the given `test.` - */ - -function test(test) { - var attrs = { - classname: test.parent.fullTitle() - , name: test.title - , time: test.duration / 1000 - }; - - if ('failed' == test.state) { - var err = test.err; - attrs.message = escape(err.message); - console.log(tag('testcase', attrs, false, tag('failure', attrs, false, cdata(err.stack)))); - } else if (test.pending) { - console.log(tag('testcase', attrs, false, tag('skipped', {}, true))); - } else { - console.log(tag('testcase', attrs, true) ); - } -} - -/** - * HTML tag helper. - */ - -function tag(name, attrs, close, content) { - var end = close ? '/>' : '>' - , pairs = [] - , tag; - - for (var key in attrs) { - pairs.push(key + '="' + escape(attrs[key]) + '"'); - } - - tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end; - if (content) tag += content + '</' + name + end; - return tag; -} - -/** - * Return cdata escaped CDATA `str`. - */ - -function cdata(str) { - return '<![CDATA[' + escape(str) + ']]>'; -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/runnable.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/runnable.js deleted file mode 100644 index b34bf1e1..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/runnable.js +++ /dev/null @@ -1,217 +0,0 @@ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , debug = require('debug')('mocha:runnable') - , milliseconds = require('./ms'); - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Object#toString(). - */ - -var toString = Object.prototype.toString; - -/** - * Expose `Runnable`. - */ - -module.exports = Runnable; - -/** - * Initialize a new `Runnable` with the given `title` and callback `fn`. - * - * @param {String} title - * @param {Function} fn - * @api private - */ - -function Runnable(title, fn) { - this.title = title; - this.fn = fn; - this.async = fn && fn.length; - this.sync = ! this.async; - this._timeout = 2000; - this._slow = 75; - this.timedOut = false; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Runnable.prototype.__proto__ = EventEmitter.prototype; - -/** - * Set & get timeout `ms`. - * - * @param {Number|String} ms - * @return {Runnable|Number} ms or self - * @api private - */ - -Runnable.prototype.timeout = function(ms){ - if (0 == arguments.length) return this._timeout; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('timeout %d', ms); - this._timeout = ms; - if (this.timer) this.resetTimeout(); - return this; -}; - -/** - * Set & get slow `ms`. - * - * @param {Number|String} ms - * @return {Runnable|Number} ms or self - * @api private - */ - -Runnable.prototype.slow = function(ms){ - if (0 === arguments.length) return this._slow; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('timeout %d', ms); - this._slow = ms; - return this; -}; - -/** - * Return the full title generated by recursively - * concatenating the parent's full title. - * - * @return {String} - * @api public - */ - -Runnable.prototype.fullTitle = function(){ - return this.parent.fullTitle() + ' ' + this.title; -}; - -/** - * Clear the timeout. - * - * @api private - */ - -Runnable.prototype.clearTimeout = function(){ - clearTimeout(this.timer); -}; - -/** - * Inspect the runnable void of private properties. - * - * @return {String} - * @api private - */ - -Runnable.prototype.inspect = function(){ - return JSON.stringify(this, function(key, val){ - if ('_' == key[0]) return; - if ('parent' == key) return '#<Suite>'; - if ('ctx' == key) return '#<Context>'; - return val; - }, 2); -}; - -/** - * Reset the timeout. - * - * @api private - */ - -Runnable.prototype.resetTimeout = function(){ - var self = this; - var ms = this.timeout() || 1e9; - - this.clearTimeout(); - this.timer = setTimeout(function(){ - self.callback(new Error('timeout of ' + ms + 'ms exceeded')); - self.timedOut = true; - }, ms); -}; - -/** - * Run the test and invoke `fn(err)`. - * - * @param {Function} fn - * @api private - */ - -Runnable.prototype.run = function(fn){ - var self = this - , ms = this.timeout() - , start = new Date - , ctx = this.ctx - , finished - , emitted; - - if (ctx) ctx.runnable(this); - - // timeout - if (this.async) { - if (ms) { - this.timer = setTimeout(function(){ - done(new Error('timeout of ' + ms + 'ms exceeded')); - self.timedOut = true; - }, ms); - } - } - - // called multiple times - function multiple(err) { - if (emitted) return; - emitted = true; - self.emit('error', err || new Error('done() called multiple times')); - } - - // finished - function done(err) { - if (self.timedOut) return; - if (finished) return multiple(err); - self.clearTimeout(); - self.duration = new Date - start; - finished = true; - fn(err); - } - - // for .resetTimeout() - this.callback = done; - - // async - if (this.async) { - try { - this.fn.call(ctx, function(err){ - if (err instanceof Error || toString.call(err) === "[object Error]") return done(err); - if (null != err) return done(new Error('done() invoked with non-Error: ' + err)); - done(); - }); - } catch (err) { - done(err); - } - return; - } - - if (this.asyncOnly) { - return done(new Error('--async-only option in use without declaring `done()`')); - } - - // sync - try { - if (!this.pending) this.fn.call(ctx); - this.duration = new Date - start; - fn(); - } catch (err) { - fn(err); - } -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/runner.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/runner.js deleted file mode 100644 index dffc3c05..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/runner.js +++ /dev/null @@ -1,561 +0,0 @@ -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , debug = require('debug')('mocha:runner') - , Test = require('./test') - , utils = require('./utils') - , filter = utils.filter - , keys = utils.keys; - -/** - * Non-enumerable globals. - */ - -var globals = [ - 'setTimeout', - 'clearTimeout', - 'setInterval', - 'clearInterval', - 'XMLHttpRequest', - 'Date' -]; - -/** - * Expose `Runner`. - */ - -module.exports = Runner; - -/** - * Initialize a `Runner` for the given `suite`. - * - * Events: - * - * - `start` execution started - * - `end` execution complete - * - `suite` (suite) test suite execution started - * - `suite end` (suite) all tests (and sub-suites) have finished - * - `test` (test) test execution started - * - `test end` (test) test completed - * - `hook` (hook) hook execution started - * - `hook end` (hook) hook complete - * - `pass` (test) test passed - * - `fail` (test, err) test failed - * - `pending` (test) test pending - * - * @api public - */ - -function Runner(suite) { - var self = this; - this._globals = []; - this.suite = suite; - this.total = suite.total(); - this.failures = 0; - this.on('test end', function(test){ self.checkGlobals(test); }); - this.on('hook end', function(hook){ self.checkGlobals(hook); }); - this.grep(/.*/); - this.globals(this.globalProps().concat(['errno'])); -} - -/** - * Wrapper for setImmediate, process.nextTick, or browser polyfill. - * - * @param {Function} fn - * @api private - */ - -Runner.immediately = global.setImmediate || process.nextTick; - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Runner.prototype.__proto__ = EventEmitter.prototype; - -/** - * Run tests with full titles matching `re`. Updates runner.total - * with number of tests matched. - * - * @param {RegExp} re - * @param {Boolean} invert - * @return {Runner} for chaining - * @api public - */ - -Runner.prototype.grep = function(re, invert){ - debug('grep %s', re); - this._grep = re; - this._invert = invert; - this.total = this.grepTotal(this.suite); - return this; -}; - -/** - * Returns the number of tests matching the grep search for the - * given suite. - * - * @param {Suite} suite - * @return {Number} - * @api public - */ - -Runner.prototype.grepTotal = function(suite) { - var self = this; - var total = 0; - - suite.eachTest(function(test){ - var match = self._grep.test(test.fullTitle()); - if (self._invert) match = !match; - if (match) total++; - }); - - return total; -}; - -/** - * Return a list of global properties. - * - * @return {Array} - * @api private - */ - -Runner.prototype.globalProps = function() { - var props = utils.keys(global); - - // non-enumerables - for (var i = 0; i < globals.length; ++i) { - if (~utils.indexOf(props, globals[i])) continue; - props.push(globals[i]); - } - - return props; -}; - -/** - * Allow the given `arr` of globals. - * - * @param {Array} arr - * @return {Runner} for chaining - * @api public - */ - -Runner.prototype.globals = function(arr){ - if (0 == arguments.length) return this._globals; - debug('globals %j', arr); - utils.forEach(arr, function(arr){ - this._globals.push(arr); - }, this); - return this; -}; - -/** - * Check for global variable leaks. - * - * @api private - */ - -Runner.prototype.checkGlobals = function(test){ - if (this.ignoreLeaks) return; - var ok = this._globals; - var globals = this.globalProps(); - var isNode = process.kill; - var leaks; - - // check length - 2 ('errno' and 'location' globals) - if (isNode && 1 == ok.length - globals.length) return; - else if (2 == ok.length - globals.length) return; - - if(this.prevGlobalsLength == globals.length) return; - this.prevGlobalsLength = globals.length; - - leaks = filterLeaks(ok, globals); - this._globals = this._globals.concat(leaks); - - if (leaks.length > 1) { - this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + '')); - } else if (leaks.length) { - this.fail(test, new Error('global leak detected: ' + leaks[0])); - } -}; - -/** - * Fail the given `test`. - * - * @param {Test} test - * @param {Error} err - * @api private - */ - -Runner.prototype.fail = function(test, err){ - ++this.failures; - test.state = 'failed'; - - if ('string' == typeof err) { - err = new Error('the string "' + err + '" was thrown, throw an Error :)'); - } - - this.emit('fail', test, err); -}; - -/** - * Fail the given `hook` with `err`. - * - * Hook failures (currently) hard-end due - * to that fact that a failing hook will - * surely cause subsequent tests to fail, - * causing jumbled reporting. - * - * @param {Hook} hook - * @param {Error} err - * @api private - */ - -Runner.prototype.failHook = function(hook, err){ - this.fail(hook, err); - this.emit('end'); -}; - -/** - * Run hook `name` callbacks and then invoke `fn()`. - * - * @param {String} name - * @param {Function} function - * @api private - */ - -Runner.prototype.hook = function(name, fn){ - var suite = this.suite - , hooks = suite['_' + name] - , self = this - , timer; - - function next(i) { - var hook = hooks[i]; - if (!hook) return fn(); - if (self.failures && suite.bail()) return fn(); - self.currentRunnable = hook; - - hook.ctx.currentTest = self.test; - - self.emit('hook', hook); - - hook.on('error', function(err){ - self.failHook(hook, err); - }); - - hook.run(function(err){ - hook.removeAllListeners('error'); - var testError = hook.error(); - if (testError) self.fail(self.test, testError); - if (err) return self.failHook(hook, err); - self.emit('hook end', hook); - delete hook.ctx.currentTest; - next(++i); - }); - } - - Runner.immediately(function(){ - next(0); - }); -}; - -/** - * Run hook `name` for the given array of `suites` - * in order, and callback `fn(err)`. - * - * @param {String} name - * @param {Array} suites - * @param {Function} fn - * @api private - */ - -Runner.prototype.hooks = function(name, suites, fn){ - var self = this - , orig = this.suite; - - function next(suite) { - self.suite = suite; - - if (!suite) { - self.suite = orig; - return fn(); - } - - self.hook(name, function(err){ - if (err) { - self.suite = orig; - return fn(err); - } - - next(suites.pop()); - }); - } - - next(suites.pop()); -}; - -/** - * Run hooks from the top level down. - * - * @param {String} name - * @param {Function} fn - * @api private - */ - -Runner.prototype.hookUp = function(name, fn){ - var suites = [this.suite].concat(this.parents()).reverse(); - this.hooks(name, suites, fn); -}; - -/** - * Run hooks from the bottom up. - * - * @param {String} name - * @param {Function} fn - * @api private - */ - -Runner.prototype.hookDown = function(name, fn){ - var suites = [this.suite].concat(this.parents()); - this.hooks(name, suites, fn); -}; - -/** - * Return an array of parent Suites from - * closest to furthest. - * - * @return {Array} - * @api private - */ - -Runner.prototype.parents = function(){ - var suite = this.suite - , suites = []; - while (suite = suite.parent) suites.push(suite); - return suites; -}; - -/** - * Run the current test and callback `fn(err)`. - * - * @param {Function} fn - * @api private - */ - -Runner.prototype.runTest = function(fn){ - var test = this.test - , self = this; - - if (this.asyncOnly) test.asyncOnly = true; - - try { - test.on('error', function(err){ - self.fail(test, err); - }); - test.run(fn); - } catch (err) { - fn(err); - } -}; - -/** - * Run tests in the given `suite` and invoke - * the callback `fn()` when complete. - * - * @param {Suite} suite - * @param {Function} fn - * @api private - */ - -Runner.prototype.runTests = function(suite, fn){ - var self = this - , tests = suite.tests.slice() - , test; - - function next(err) { - // if we bail after first err - if (self.failures && suite._bail) return fn(); - - // next test - test = tests.shift(); - - // all done - if (!test) return fn(); - - // grep - var match = self._grep.test(test.fullTitle()); - if (self._invert) match = !match; - if (!match) return next(); - - // pending - if (test.pending) { - self.emit('pending', test); - self.emit('test end', test); - return next(); - } - - // execute test and hook(s) - self.emit('test', self.test = test); - self.hookDown('beforeEach', function(){ - self.currentRunnable = self.test; - self.runTest(function(err){ - test = self.test; - - if (err) { - self.fail(test, err); - self.emit('test end', test); - return self.hookUp('afterEach', next); - } - - test.state = 'passed'; - self.emit('pass', test); - self.emit('test end', test); - self.hookUp('afterEach', next); - }); - }); - } - - this.next = next; - next(); -}; - -/** - * Run the given `suite` and invoke the - * callback `fn()` when complete. - * - * @param {Suite} suite - * @param {Function} fn - * @api private - */ - -Runner.prototype.runSuite = function(suite, fn){ - var total = this.grepTotal(suite) - , self = this - , i = 0; - - debug('run suite %s', suite.fullTitle()); - - if (!total) return fn(); - - this.emit('suite', this.suite = suite); - - function next() { - var curr = suite.suites[i++]; - if (!curr) return done(); - self.runSuite(curr, next); - } - - function done() { - self.suite = suite; - self.hook('afterAll', function(){ - self.emit('suite end', suite); - fn(); - }); - } - - this.hook('beforeAll', function(){ - self.runTests(suite, next); - }); -}; - -/** - * Handle uncaught exceptions. - * - * @param {Error} err - * @api private - */ - -Runner.prototype.uncaught = function(err){ - debug('uncaught exception %s', err.message); - var runnable = this.currentRunnable; - if (!runnable || 'failed' == runnable.state) return; - runnable.clearTimeout(); - err.uncaught = true; - this.fail(runnable, err); - - // recover from test - if ('test' == runnable.type) { - this.emit('test end', runnable); - this.hookUp('afterEach', this.next); - return; - } - - // bail on hooks - this.emit('end'); -}; - -/** - * Run the root suite and invoke `fn(failures)` - * on completion. - * - * @param {Function} fn - * @return {Runner} for chaining - * @api public - */ - -Runner.prototype.run = function(fn){ - var self = this - , fn = fn || function(){}; - - function uncaught(err){ - self.uncaught(err); - } - - debug('start'); - - // callback - this.on('end', function(){ - debug('end'); - process.removeListener('uncaughtException', uncaught); - fn(self.failures); - }); - - // run suites - this.emit('start'); - this.runSuite(this.suite, function(){ - debug('finished running'); - self.emit('end'); - }); - - // uncaught exception - process.on('uncaughtException', uncaught); - - return this; -}; - -/** - * Filter leaks with the given globals flagged as `ok`. - * - * @param {Array} ok - * @param {Array} globals - * @return {Array} - * @api private - */ - -function filterLeaks(ok, globals) { - return filter(globals, function(key){ - // Firefox and Chrome exposes iframes as index inside the window object - if (/^d+/.test(key)) return false; - - // in firefox - // if runner runs in an iframe, this iframe's window.getInterface method not init at first - // it is assigned in some seconds - if (global.navigator && /^getInterface/.test(key)) return false; - - // an iframe could be approached by window[iframeIndex] - // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak - if (global.navigator && /^\d+/.test(key)) return false; - - // Opera and IE expose global variables for HTML element IDs (issue #243) - if (/^mocha-/.test(key)) return false; - - var matched = filter(ok, function(ok){ - if (~ok.indexOf('*')) return 0 == key.indexOf(ok.split('*')[0]); - return key == ok; - }); - return matched.length == 0 && (!global.navigator || 'onerror' !== key); - }); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/suite.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/suite.js deleted file mode 100644 index 869bb88d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/suite.js +++ /dev/null @@ -1,296 +0,0 @@ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , debug = require('debug')('mocha:suite') - , milliseconds = require('./ms') - , utils = require('./utils') - , Hook = require('./hook'); - -/** - * Expose `Suite`. - */ - -exports = module.exports = Suite; - -/** - * Create a new `Suite` with the given `title` - * and parent `Suite`. When a suite with the - * same title is already present, that suite - * is returned to provide nicer reporter - * and more flexible meta-testing. - * - * @param {Suite} parent - * @param {String} title - * @return {Suite} - * @api public - */ - -exports.create = function(parent, title){ - var suite = new Suite(title, parent.ctx); - suite.parent = parent; - if (parent.pending) suite.pending = true; - title = suite.fullTitle(); - parent.addSuite(suite); - return suite; -}; - -/** - * Initialize a new `Suite` with the given - * `title` and `ctx`. - * - * @param {String} title - * @param {Context} ctx - * @api private - */ - -function Suite(title, ctx) { - this.title = title; - this.ctx = ctx; - this.suites = []; - this.tests = []; - this.pending = false; - this._beforeEach = []; - this._beforeAll = []; - this._afterEach = []; - this._afterAll = []; - this.root = !title; - this._timeout = 2000; - this._slow = 75; - this._bail = false; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Suite.prototype.__proto__ = EventEmitter.prototype; - -/** - * Return a clone of this `Suite`. - * - * @return {Suite} - * @api private - */ - -Suite.prototype.clone = function(){ - var suite = new Suite(this.title); - debug('clone'); - suite.ctx = this.ctx; - suite.timeout(this.timeout()); - suite.slow(this.slow()); - suite.bail(this.bail()); - return suite; -}; - -/** - * Set timeout `ms` or short-hand such as "2s". - * - * @param {Number|String} ms - * @return {Suite|Number} for chaining - * @api private - */ - -Suite.prototype.timeout = function(ms){ - if (0 == arguments.length) return this._timeout; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('timeout %d', ms); - this._timeout = parseInt(ms, 10); - return this; -}; - -/** - * Set slow `ms` or short-hand such as "2s". - * - * @param {Number|String} ms - * @return {Suite|Number} for chaining - * @api private - */ - -Suite.prototype.slow = function(ms){ - if (0 === arguments.length) return this._slow; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('slow %d', ms); - this._slow = ms; - return this; -}; - -/** - * Sets whether to bail after first error. - * - * @parma {Boolean} bail - * @return {Suite|Number} for chaining - * @api private - */ - -Suite.prototype.bail = function(bail){ - if (0 == arguments.length) return this._bail; - debug('bail %s', bail); - this._bail = bail; - return this; -}; - -/** - * Run `fn(test[, done])` before running tests. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.beforeAll = function(fn){ - if (this.pending) return this; - var hook = new Hook('"before all" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._beforeAll.push(hook); - this.emit('beforeAll', hook); - return this; -}; - -/** - * Run `fn(test[, done])` after running tests. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.afterAll = function(fn){ - if (this.pending) return this; - var hook = new Hook('"after all" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._afterAll.push(hook); - this.emit('afterAll', hook); - return this; -}; - -/** - * Run `fn(test[, done])` before each test case. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.beforeEach = function(fn){ - if (this.pending) return this; - var hook = new Hook('"before each" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._beforeEach.push(hook); - this.emit('beforeEach', hook); - return this; -}; - -/** - * Run `fn(test[, done])` after each test case. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.afterEach = function(fn){ - if (this.pending) return this; - var hook = new Hook('"after each" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._afterEach.push(hook); - this.emit('afterEach', hook); - return this; -}; - -/** - * Add a test `suite`. - * - * @param {Suite} suite - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.addSuite = function(suite){ - suite.parent = this; - suite.timeout(this.timeout()); - suite.slow(this.slow()); - suite.bail(this.bail()); - this.suites.push(suite); - this.emit('suite', suite); - return this; -}; - -/** - * Add a `test` to this suite. - * - * @param {Test} test - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.addTest = function(test){ - test.parent = this; - test.timeout(this.timeout()); - test.slow(this.slow()); - test.ctx = this.ctx; - this.tests.push(test); - this.emit('test', test); - return this; -}; - -/** - * Return the full title generated by recursively - * concatenating the parent's full title. - * - * @return {String} - * @api public - */ - -Suite.prototype.fullTitle = function(){ - if (this.parent) { - var full = this.parent.fullTitle(); - if (full) return full + ' ' + this.title; - } - return this.title; -}; - -/** - * Return the total number of tests. - * - * @return {Number} - * @api public - */ - -Suite.prototype.total = function(){ - return utils.reduce(this.suites, function(sum, suite){ - return sum + suite.total(); - }, 0) + this.tests.length; -}; - -/** - * Iterates through each suite recursively to find - * all tests. Applies a function in the format - * `fn(test)`. - * - * @param {Function} fn - * @return {Suite} - * @api private - */ - -Suite.prototype.eachTest = function(fn){ - utils.forEach(this.tests, fn); - utils.forEach(this.suites, function(suite){ - suite.eachTest(fn); - }); - return this; -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/template.html b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/template.html deleted file mode 100644 index 0590d4aa..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/template.html +++ /dev/null @@ -1,18 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <title>Mocha - - - - - -
    - - - - - - diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/test.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/test.js deleted file mode 100644 index 11773e0c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/test.js +++ /dev/null @@ -1,32 +0,0 @@ - -/** - * Module dependencies. - */ - -var Runnable = require('./runnable'); - -/** - * Expose `Test`. - */ - -module.exports = Test; - -/** - * Initialize a new `Test` with the given `title` and callback `fn`. - * - * @param {String} title - * @param {Function} fn - * @api private - */ - -function Test(title, fn) { - Runnable.call(this, title, fn); - this.pending = !fn; - this.type = 'test'; -} - -/** - * Inherit from `Runnable.prototype`. - */ - -Test.prototype.__proto__ = Runnable.prototype; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/utils.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/utils.js deleted file mode 100644 index 939a8aa6..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/lib/utils.js +++ /dev/null @@ -1,281 +0,0 @@ -/** - * Module dependencies. - */ - -var fs = require('fs') - , path = require('path') - , join = path.join - , debug = require('debug')('mocha:watch'); - -/** - * Ignored directories. - */ - -var ignore = ['node_modules', '.git']; - -/** - * Escape special characters in the given string of html. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function(html){ - return String(html) - .replace(/&/g, '&') - .replace(/"/g, '"') - .replace(//g, '>'); -}; - -/** - * Array#forEach (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @param {Object} scope - * @api private - */ - -exports.forEach = function(arr, fn, scope){ - for (var i = 0, l = arr.length; i < l; i++) - fn.call(scope, arr[i], i); -}; - -/** - * Array#indexOf (<=IE8) - * - * @parma {Array} arr - * @param {Object} obj to find index of - * @param {Number} start - * @api private - */ - -exports.indexOf = function(arr, obj, start){ - for (var i = start || 0, l = arr.length; i < l; i++) { - if (arr[i] === obj) - return i; - } - return -1; -}; - -/** - * Array#reduce (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @param {Object} initial value - * @api private - */ - -exports.reduce = function(arr, fn, val){ - var rval = val; - - for (var i = 0, l = arr.length; i < l; i++) { - rval = fn(rval, arr[i], i, arr); - } - - return rval; -}; - -/** - * Array#filter (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @api private - */ - -exports.filter = function(arr, fn){ - var ret = []; - - for (var i = 0, l = arr.length; i < l; i++) { - var val = arr[i]; - if (fn(val, i, arr)) ret.push(val); - } - - return ret; -}; - -/** - * Object.keys (<=IE8) - * - * @param {Object} obj - * @return {Array} keys - * @api private - */ - -exports.keys = Object.keys || function(obj) { - var keys = [] - , has = Object.prototype.hasOwnProperty // for `window` on <=IE8 - - for (var key in obj) { - if (has.call(obj, key)) { - keys.push(key); - } - } - - return keys; -}; - -/** - * Watch the given `files` for changes - * and invoke `fn(file)` on modification. - * - * @param {Array} files - * @param {Function} fn - * @api private - */ - -exports.watch = function(files, fn){ - var options = { interval: 100 }; - files.forEach(function(file){ - debug('file %s', file); - fs.watchFile(file, options, function(curr, prev){ - if (prev.mtime < curr.mtime) fn(file); - }); - }); -}; - -/** - * Ignored files. - */ - -function ignored(path){ - return !~ignore.indexOf(path); -} - -/** - * Lookup files in the given `dir`. - * - * @return {Array} - * @api private - */ - -exports.files = function(dir, ret){ - ret = ret || []; - - fs.readdirSync(dir) - .filter(ignored) - .forEach(function(path){ - path = join(dir, path); - if (fs.statSync(path).isDirectory()) { - exports.files(path, ret); - } else if (path.match(/\.(js|coffee|litcoffee|coffee.md)$/)) { - ret.push(path); - } - }); - - return ret; -}; - -/** - * Compute a slug from the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.slug = function(str){ - return str - .toLowerCase() - .replace(/ +/g, '-') - .replace(/[^-\w]/g, ''); -}; - -/** - * Strip the function definition from `str`, - * and re-indent for pre whitespace. - */ - -exports.clean = function(str) { - str = str - .replace(/^function *\(.*\) *{/, '') - .replace(/\s+\}$/, ''); - - var whitespace = str.match(/^\n?(\s*)/)[1] - , re = new RegExp('^' + whitespace, 'gm'); - - str = str.replace(re, ''); - - return exports.trim(str); -}; - -/** - * Escape regular expression characters in `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.escapeRegexp = function(str){ - return str.replace(/[-\\^$*+?.()|[\]{}]/g, "\\$&"); -}; - -/** - * Trim the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.trim = function(str){ - return str.replace(/^\s+|\s+$/g, ''); -}; - -/** - * Parse the given `qs`. - * - * @param {String} qs - * @return {Object} - * @api private - */ - -exports.parseQuery = function(qs){ - return exports.reduce(qs.replace('?', '').split('&'), function(obj, pair){ - var i = pair.indexOf('=') - , key = pair.slice(0, i) - , val = pair.slice(++i); - - obj[key] = decodeURIComponent(val); - return obj; - }, {}); -}; - -/** - * Highlight the given string of `js`. - * - * @param {String} js - * @return {String} - * @api private - */ - -function highlight(js) { - return js - .replace(//g, '>') - .replace(/\/\/(.*)/gm, '//$1') - .replace(/('.*?')/gm, '$1') - .replace(/(\d+\.\d+)/gm, '$1') - .replace(/(\d+)/gm, '$1') - .replace(/\bnew *(\w+)/gm, 'new $1') - .replace(/\b(function|new|throw|return|var|if|else)\b/gm, '$1') -} - -/** - * Highlight the contents of tag `name`. - * - * @param {String} name - * @api private - */ - -exports.highlightTags = function(name) { - var code = document.getElementsByTagName(name); - for (var i = 0, len = code.length; i < len; ++i) { - code[i].innerHTML = highlight(code[i].innerHTML); - } -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/mocha.css b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/mocha.css deleted file mode 100644 index 274b9776..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/mocha.css +++ /dev/null @@ -1,260 +0,0 @@ -@charset "utf-8"; - -body { - margin:0; -} - -#mocha { - font: 20px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif; - margin: 60px 50px; -} - -#mocha ul, #mocha li { - margin: 0; - padding: 0; -} - -#mocha ul { - list-style: none; -} - -#mocha h1, #mocha h2 { - margin: 0; -} - -#mocha h1 { - margin-top: 15px; - font-size: 1em; - font-weight: 200; -} - -#mocha h1 a { - text-decoration: none; - color: inherit; -} - -#mocha h1 a:hover { - text-decoration: underline; -} - -#mocha .suite .suite h1 { - margin-top: 0; - font-size: .8em; -} - -#mocha .hidden { - display: none; -} - -#mocha h2 { - font-size: 12px; - font-weight: normal; - cursor: pointer; -} - -#mocha .suite { - margin-left: 15px; -} - -#mocha .test { - margin-left: 15px; - overflow: hidden; -} - -#mocha .test.pending:hover h2::after { - content: '(pending)'; - font-family: arial, sans-serif; -} - -#mocha .test.pass.medium .duration { - background: #C09853; -} - -#mocha .test.pass.slow .duration { - background: #B94A48; -} - -#mocha .test.pass::before { - content: '✓'; - font-size: 12px; - display: block; - float: left; - margin-right: 5px; - color: #00d6b2; -} - -#mocha .test.pass .duration { - font-size: 9px; - margin-left: 5px; - padding: 2px 5px; - color: white; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.2); - -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.2); - box-shadow: inset 0 1px 1px rgba(0,0,0,.2); - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - -ms-border-radius: 5px; - -o-border-radius: 5px; - border-radius: 5px; -} - -#mocha .test.pass.fast .duration { - display: none; -} - -#mocha .test.pending { - color: #0b97c4; -} - -#mocha .test.pending::before { - content: '◦'; - color: #0b97c4; -} - -#mocha .test.fail { - color: #c00; -} - -#mocha .test.fail pre { - color: black; -} - -#mocha .test.fail::before { - content: '✖'; - font-size: 12px; - display: block; - float: left; - margin-right: 5px; - color: #c00; -} - -#mocha .test pre.error { - color: #c00; - max-height: 300px; - overflow: auto; -} - -#mocha .test pre { - display: block; - float: left; - clear: left; - font: 12px/1.5 monaco, monospace; - margin: 5px; - padding: 15px; - border: 1px solid #eee; - border-bottom-color: #ddd; - -webkit-border-radius: 3px; - -webkit-box-shadow: 0 1px 3px #eee; - -moz-border-radius: 3px; - -moz-box-shadow: 0 1px 3px #eee; - border-radius: 3px; -} - -#mocha .test h2 { - position: relative; -} - -#mocha .test a.replay { - position: absolute; - top: 3px; - right: 0; - text-decoration: none; - vertical-align: middle; - display: block; - width: 15px; - height: 15px; - line-height: 15px; - text-align: center; - background: #eee; - font-size: 15px; - -moz-border-radius: 15px; - border-radius: 15px; - -webkit-transition: opacity 200ms; - -moz-transition: opacity 200ms; - transition: opacity 200ms; - opacity: 0.3; - color: #888; -} - -#mocha .test:hover a.replay { - opacity: 1; -} - -#mocha-report.pass .test.fail { - display: none; -} - -#mocha-report.fail .test.pass { - display: none; -} - -#mocha-report.pending .test.pass, -#mocha-report.pending .test.fail { - display: none; -} -#mocha-report.pending .test.pass.pending { - display: block; -} - -#mocha-error { - color: #c00; - font-size: 1.5em; - font-weight: 100; - letter-spacing: 1px; -} - -#mocha-stats { - position: fixed; - top: 15px; - right: 10px; - font-size: 12px; - margin: 0; - color: #888; - z-index: 1; -} - -#mocha-stats .progress { - float: right; - padding-top: 0; -} - -#mocha-stats em { - color: black; -} - -#mocha-stats a { - text-decoration: none; - color: inherit; -} - -#mocha-stats a:hover { - border-bottom: 1px solid #eee; -} - -#mocha-stats li { - display: inline-block; - margin: 0 5px; - list-style: none; - padding-top: 11px; -} - -#mocha-stats canvas { - width: 40px; - height: 40px; -} - -#mocha code .comment { color: #ddd } -#mocha code .init { color: #2F6FAD } -#mocha code .string { color: #5890AD } -#mocha code .keyword { color: #8A6343 } -#mocha code .number { color: #2F6FAD } - -@media screen and (max-device-width: 480px) { - #mocha { - margin: 60px 0px; - } - - #mocha #stats { - position: absolute; - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/mocha.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/mocha.js deleted file mode 100644 index 0a04e204..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/mocha.js +++ /dev/null @@ -1,5554 +0,0 @@ -;(function(){ - -// CommonJS require() - -function require(p){ - var path = require.resolve(p) - , mod = require.modules[path]; - if (!mod) throw new Error('failed to require "' + p + '"'); - if (!mod.exports) { - mod.exports = {}; - mod.call(mod.exports, mod, mod.exports, require.relative(path)); - } - return mod.exports; - } - -require.modules = {}; - -require.resolve = function (path){ - var orig = path - , reg = path + '.js' - , index = path + '/index.js'; - return require.modules[reg] && reg - || require.modules[index] && index - || orig; - }; - -require.register = function (path, fn){ - require.modules[path] = fn; - }; - -require.relative = function (parent) { - return function(p){ - if ('.' != p.charAt(0)) return require(p); - - var path = parent.split('/') - , segs = p.split('/'); - path.pop(); - - for (var i = 0; i < segs.length; i++) { - var seg = segs[i]; - if ('..' == seg) path.pop(); - else if ('.' != seg) path.push(seg); - } - - return require(path.join('/')); - }; - }; - - -require.register("browser/debug.js", function(module, exports, require){ - -module.exports = function(type){ - return function(){ - } -}; - -}); // module: browser/debug.js - -require.register("browser/diff.js", function(module, exports, require){ -/* See LICENSE file for terms of use */ - -/* - * Text diff implementation. - * - * This library supports the following APIS: - * JsDiff.diffChars: Character by character diff - * JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace - * JsDiff.diffLines: Line based diff - * - * JsDiff.diffCss: Diff targeted at CSS content - * - * These methods are based on the implementation proposed in - * "An O(ND) Difference Algorithm and its Variations" (Myers, 1986). - * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927 - */ -var JsDiff = (function() { - /*jshint maxparams: 5*/ - function clonePath(path) { - return { newPos: path.newPos, components: path.components.slice(0) }; - } - function removeEmpty(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - if (array[i]) { - ret.push(array[i]); - } - } - return ret; - } - function escapeHTML(s) { - var n = s; - n = n.replace(/&/g, '&'); - n = n.replace(//g, '>'); - n = n.replace(/"/g, '"'); - - return n; - } - - var Diff = function(ignoreWhitespace) { - this.ignoreWhitespace = ignoreWhitespace; - }; - Diff.prototype = { - diff: function(oldString, newString) { - // Handle the identity case (this is due to unrolling editLength == 0 - if (newString === oldString) { - return [{ value: newString }]; - } - if (!newString) { - return [{ value: oldString, removed: true }]; - } - if (!oldString) { - return [{ value: newString, added: true }]; - } - - newString = this.tokenize(newString); - oldString = this.tokenize(oldString); - - var newLen = newString.length, oldLen = oldString.length; - var maxEditLength = newLen + oldLen; - var bestPath = [{ newPos: -1, components: [] }]; - - // Seed editLength = 0 - var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); - if (bestPath[0].newPos+1 >= newLen && oldPos+1 >= oldLen) { - return bestPath[0].components; - } - - for (var editLength = 1; editLength <= maxEditLength; editLength++) { - for (var diagonalPath = -1*editLength; diagonalPath <= editLength; diagonalPath+=2) { - var basePath; - var addPath = bestPath[diagonalPath-1], - removePath = bestPath[diagonalPath+1]; - oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; - if (addPath) { - // No one else is going to attempt to use this value, clear it - bestPath[diagonalPath-1] = undefined; - } - - var canAdd = addPath && addPath.newPos+1 < newLen; - var canRemove = removePath && 0 <= oldPos && oldPos < oldLen; - if (!canAdd && !canRemove) { - bestPath[diagonalPath] = undefined; - continue; - } - - // Select the diagonal that we want to branch from. We select the prior - // path whose position in the new string is the farthest from the origin - // and does not pass the bounds of the diff graph - if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) { - basePath = clonePath(removePath); - this.pushComponent(basePath.components, oldString[oldPos], undefined, true); - } else { - basePath = clonePath(addPath); - basePath.newPos++; - this.pushComponent(basePath.components, newString[basePath.newPos], true, undefined); - } - - var oldPos = this.extractCommon(basePath, newString, oldString, diagonalPath); - - if (basePath.newPos+1 >= newLen && oldPos+1 >= oldLen) { - return basePath.components; - } else { - bestPath[diagonalPath] = basePath; - } - } - } - }, - - pushComponent: function(components, value, added, removed) { - var last = components[components.length-1]; - if (last && last.added === added && last.removed === removed) { - // We need to clone here as the component clone operation is just - // as shallow array clone - components[components.length-1] = - {value: this.join(last.value, value), added: added, removed: removed }; - } else { - components.push({value: value, added: added, removed: removed }); - } - }, - extractCommon: function(basePath, newString, oldString, diagonalPath) { - var newLen = newString.length, - oldLen = oldString.length, - newPos = basePath.newPos, - oldPos = newPos - diagonalPath; - while (newPos+1 < newLen && oldPos+1 < oldLen && this.equals(newString[newPos+1], oldString[oldPos+1])) { - newPos++; - oldPos++; - - this.pushComponent(basePath.components, newString[newPos], undefined, undefined); - } - basePath.newPos = newPos; - return oldPos; - }, - - equals: function(left, right) { - var reWhitespace = /\S/; - if (this.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right)) { - return true; - } else { - return left === right; - } - }, - join: function(left, right) { - return left + right; - }, - tokenize: function(value) { - return value; - } - }; - - var CharDiff = new Diff(); - - var WordDiff = new Diff(true); - var WordWithSpaceDiff = new Diff(); - WordDiff.tokenize = WordWithSpaceDiff.tokenize = function(value) { - return removeEmpty(value.split(/(\s+|\b)/)); - }; - - var CssDiff = new Diff(true); - CssDiff.tokenize = function(value) { - return removeEmpty(value.split(/([{}:;,]|\s+)/)); - }; - - var LineDiff = new Diff(); - LineDiff.tokenize = function(value) { - return value.split(/^/m); - }; - - return { - Diff: Diff, - - diffChars: function(oldStr, newStr) { return CharDiff.diff(oldStr, newStr); }, - diffWords: function(oldStr, newStr) { return WordDiff.diff(oldStr, newStr); }, - diffWordsWithSpace: function(oldStr, newStr) { return WordWithSpaceDiff.diff(oldStr, newStr); }, - diffLines: function(oldStr, newStr) { return LineDiff.diff(oldStr, newStr); }, - - diffCss: function(oldStr, newStr) { return CssDiff.diff(oldStr, newStr); }, - - createPatch: function(fileName, oldStr, newStr, oldHeader, newHeader) { - var ret = []; - - ret.push('Index: ' + fileName); - ret.push('==================================================================='); - ret.push('--- ' + fileName + (typeof oldHeader === 'undefined' ? '' : '\t' + oldHeader)); - ret.push('+++ ' + fileName + (typeof newHeader === 'undefined' ? '' : '\t' + newHeader)); - - var diff = LineDiff.diff(oldStr, newStr); - if (!diff[diff.length-1].value) { - diff.pop(); // Remove trailing newline add - } - diff.push({value: '', lines: []}); // Append an empty value to make cleanup easier - - function contextLines(lines) { - return lines.map(function(entry) { return ' ' + entry; }); - } - function eofNL(curRange, i, current) { - var last = diff[diff.length-2], - isLast = i === diff.length-2, - isLastOfType = i === diff.length-3 && (current.added !== last.added || current.removed !== last.removed); - - // Figure out if this is the last line for the given file and missing NL - if (!/\n$/.test(current.value) && (isLast || isLastOfType)) { - curRange.push('\\ No newline at end of file'); - } - } - - var oldRangeStart = 0, newRangeStart = 0, curRange = [], - oldLine = 1, newLine = 1; - for (var i = 0; i < diff.length; i++) { - var current = diff[i], - lines = current.lines || current.value.replace(/\n$/, '').split('\n'); - current.lines = lines; - - if (current.added || current.removed) { - if (!oldRangeStart) { - var prev = diff[i-1]; - oldRangeStart = oldLine; - newRangeStart = newLine; - - if (prev) { - curRange = contextLines(prev.lines.slice(-4)); - oldRangeStart -= curRange.length; - newRangeStart -= curRange.length; - } - } - curRange.push.apply(curRange, lines.map(function(entry) { return (current.added?'+':'-') + entry; })); - eofNL(curRange, i, current); - - if (current.added) { - newLine += lines.length; - } else { - oldLine += lines.length; - } - } else { - if (oldRangeStart) { - // Close out any changes that have been output (or join overlapping) - if (lines.length <= 8 && i < diff.length-2) { - // Overlapping - curRange.push.apply(curRange, contextLines(lines)); - } else { - // end the range and output - var contextSize = Math.min(lines.length, 4); - ret.push( - '@@ -' + oldRangeStart + ',' + (oldLine-oldRangeStart+contextSize) - + ' +' + newRangeStart + ',' + (newLine-newRangeStart+contextSize) - + ' @@'); - ret.push.apply(ret, curRange); - ret.push.apply(ret, contextLines(lines.slice(0, contextSize))); - if (lines.length <= 4) { - eofNL(ret, i, current); - } - - oldRangeStart = 0; newRangeStart = 0; curRange = []; - } - } - oldLine += lines.length; - newLine += lines.length; - } - } - - return ret.join('\n') + '\n'; - }, - - applyPatch: function(oldStr, uniDiff) { - var diffstr = uniDiff.split('\n'); - var diff = []; - var remEOFNL = false, - addEOFNL = false; - - for (var i = (diffstr[0][0]==='I'?4:0); i < diffstr.length; i++) { - if(diffstr[i][0] === '@') { - var meh = diffstr[i].split(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/); - diff.unshift({ - start:meh[3], - oldlength:meh[2], - oldlines:[], - newlength:meh[4], - newlines:[] - }); - } else if(diffstr[i][0] === '+') { - diff[0].newlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === '-') { - diff[0].oldlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === ' ') { - diff[0].newlines.push(diffstr[i].substr(1)); - diff[0].oldlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === '\\') { - if (diffstr[i-1][0] === '+') { - remEOFNL = true; - } else if(diffstr[i-1][0] === '-') { - addEOFNL = true; - } - } - } - - var str = oldStr.split('\n'); - for (var i = diff.length - 1; i >= 0; i--) { - var d = diff[i]; - for (var j = 0; j < d.oldlength; j++) { - if(str[d.start-1+j] !== d.oldlines[j]) { - return false; - } - } - Array.prototype.splice.apply(str,[d.start-1,+d.oldlength].concat(d.newlines)); - } - - if (remEOFNL) { - while (!str[str.length-1]) { - str.pop(); - } - } else if (addEOFNL) { - str.push(''); - } - return str.join('\n'); - }, - - convertChangesToXML: function(changes){ - var ret = []; - for ( var i = 0; i < changes.length; i++) { - var change = changes[i]; - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - - ret.push(escapeHTML(change.value)); - - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - } - return ret.join(''); - }, - - // See: http://code.google.com/p/google-diff-match-patch/wiki/API - convertChangesToDMP: function(changes){ - var ret = [], change; - for ( var i = 0; i < changes.length; i++) { - change = changes[i]; - ret.push([(change.added ? 1 : change.removed ? -1 : 0), change.value]); - } - return ret; - } - }; -})(); - -if (typeof module !== 'undefined') { - module.exports = JsDiff; -} - -}); // module: browser/diff.js - -require.register("browser/events.js", function(module, exports, require){ - -/** - * Module exports. - */ - -exports.EventEmitter = EventEmitter; - -/** - * Check if `obj` is an array. - */ - -function isArray(obj) { - return '[object Array]' == {}.toString.call(obj); -} - -/** - * Event emitter constructor. - * - * @api public - */ - -function EventEmitter(){}; - -/** - * Adds a listener. - * - * @api public - */ - -EventEmitter.prototype.on = function (name, fn) { - if (!this.$events) { - this.$events = {}; - } - - if (!this.$events[name]) { - this.$events[name] = fn; - } else if (isArray(this.$events[name])) { - this.$events[name].push(fn); - } else { - this.$events[name] = [this.$events[name], fn]; - } - - return this; -}; - -EventEmitter.prototype.addListener = EventEmitter.prototype.on; - -/** - * Adds a volatile listener. - * - * @api public - */ - -EventEmitter.prototype.once = function (name, fn) { - var self = this; - - function on () { - self.removeListener(name, on); - fn.apply(this, arguments); - }; - - on.listener = fn; - this.on(name, on); - - return this; -}; - -/** - * Removes a listener. - * - * @api public - */ - -EventEmitter.prototype.removeListener = function (name, fn) { - if (this.$events && this.$events[name]) { - var list = this.$events[name]; - - if (isArray(list)) { - var pos = -1; - - for (var i = 0, l = list.length; i < l; i++) { - if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { - pos = i; - break; - } - } - - if (pos < 0) { - return this; - } - - list.splice(pos, 1); - - if (!list.length) { - delete this.$events[name]; - } - } else if (list === fn || (list.listener && list.listener === fn)) { - delete this.$events[name]; - } - } - - return this; -}; - -/** - * Removes all listeners for an event. - * - * @api public - */ - -EventEmitter.prototype.removeAllListeners = function (name) { - if (name === undefined) { - this.$events = {}; - return this; - } - - if (this.$events && this.$events[name]) { - this.$events[name] = null; - } - - return this; -}; - -/** - * Gets all listeners for a certain event. - * - * @api public - */ - -EventEmitter.prototype.listeners = function (name) { - if (!this.$events) { - this.$events = {}; - } - - if (!this.$events[name]) { - this.$events[name] = []; - } - - if (!isArray(this.$events[name])) { - this.$events[name] = [this.$events[name]]; - } - - return this.$events[name]; -}; - -/** - * Emits an event. - * - * @api public - */ - -EventEmitter.prototype.emit = function (name) { - if (!this.$events) { - return false; - } - - var handler = this.$events[name]; - - if (!handler) { - return false; - } - - var args = [].slice.call(arguments, 1); - - if ('function' == typeof handler) { - handler.apply(this, args); - } else if (isArray(handler)) { - var listeners = handler.slice(); - - for (var i = 0, l = listeners.length; i < l; i++) { - listeners[i].apply(this, args); - } - } else { - return false; - } - - return true; -}; -}); // module: browser/events.js - -require.register("browser/fs.js", function(module, exports, require){ - -}); // module: browser/fs.js - -require.register("browser/path.js", function(module, exports, require){ - -}); // module: browser/path.js - -require.register("browser/progress.js", function(module, exports, require){ - -/** - * Expose `Progress`. - */ - -module.exports = Progress; - -/** - * Initialize a new `Progress` indicator. - */ - -function Progress() { - this.percent = 0; - this.size(0); - this.fontSize(11); - this.font('helvetica, arial, sans-serif'); -} - -/** - * Set progress size to `n`. - * - * @param {Number} n - * @return {Progress} for chaining - * @api public - */ - -Progress.prototype.size = function(n){ - this._size = n; - return this; -}; - -/** - * Set text to `str`. - * - * @param {String} str - * @return {Progress} for chaining - * @api public - */ - -Progress.prototype.text = function(str){ - this._text = str; - return this; -}; - -/** - * Set font size to `n`. - * - * @param {Number} n - * @return {Progress} for chaining - * @api public - */ - -Progress.prototype.fontSize = function(n){ - this._fontSize = n; - return this; -}; - -/** - * Set font `family`. - * - * @param {String} family - * @return {Progress} for chaining - */ - -Progress.prototype.font = function(family){ - this._font = family; - return this; -}; - -/** - * Update percentage to `n`. - * - * @param {Number} n - * @return {Progress} for chaining - */ - -Progress.prototype.update = function(n){ - this.percent = n; - return this; -}; - -/** - * Draw on `ctx`. - * - * @param {CanvasRenderingContext2d} ctx - * @return {Progress} for chaining - */ - -Progress.prototype.draw = function(ctx){ - var percent = Math.min(this.percent, 100) - , size = this._size - , half = size / 2 - , x = half - , y = half - , rad = half - 1 - , fontSize = this._fontSize; - - ctx.font = fontSize + 'px ' + this._font; - - var angle = Math.PI * 2 * (percent / 100); - ctx.clearRect(0, 0, size, size); - - // outer circle - ctx.strokeStyle = '#9f9f9f'; - ctx.beginPath(); - ctx.arc(x, y, rad, 0, angle, false); - ctx.stroke(); - - // inner circle - ctx.strokeStyle = '#eee'; - ctx.beginPath(); - ctx.arc(x, y, rad - 1, 0, angle, true); - ctx.stroke(); - - // text - var text = this._text || (percent | 0) + '%' - , w = ctx.measureText(text).width; - - ctx.fillText( - text - , x - w / 2 + 1 - , y + fontSize / 2 - 1); - - return this; -}; - -}); // module: browser/progress.js - -require.register("browser/tty.js", function(module, exports, require){ - -exports.isatty = function(){ - return true; -}; - -exports.getWindowSize = function(){ - if ('innerHeight' in global) { - return [global.innerHeight, global.innerWidth]; - } else { - // In a Web Worker, the DOM Window is not available. - return [640, 480]; - } -}; - -}); // module: browser/tty.js - -require.register("context.js", function(module, exports, require){ - -/** - * Expose `Context`. - */ - -module.exports = Context; - -/** - * Initialize a new `Context`. - * - * @api private - */ - -function Context(){} - -/** - * Set or get the context `Runnable` to `runnable`. - * - * @param {Runnable} runnable - * @return {Context} - * @api private - */ - -Context.prototype.runnable = function(runnable){ - if (0 == arguments.length) return this._runnable; - this.test = this._runnable = runnable; - return this; -}; - -/** - * Set test timeout `ms`. - * - * @param {Number} ms - * @return {Context} self - * @api private - */ - -Context.prototype.timeout = function(ms){ - this.runnable().timeout(ms); - return this; -}; - -/** - * Set test slowness threshold `ms`. - * - * @param {Number} ms - * @return {Context} self - * @api private - */ - -Context.prototype.slow = function(ms){ - this.runnable().slow(ms); - return this; -}; - -/** - * Inspect the context void of `._runnable`. - * - * @return {String} - * @api private - */ - -Context.prototype.inspect = function(){ - return JSON.stringify(this, function(key, val){ - if ('_runnable' == key) return; - if ('test' == key) return; - return val; - }, 2); -}; - -}); // module: context.js - -require.register("hook.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Runnable = require('./runnable'); - -/** - * Expose `Hook`. - */ - -module.exports = Hook; - -/** - * Initialize a new `Hook` with the given `title` and callback `fn`. - * - * @param {String} title - * @param {Function} fn - * @api private - */ - -function Hook(title, fn) { - Runnable.call(this, title, fn); - this.type = 'hook'; -} - -/** - * Inherit from `Runnable.prototype`. - */ - -function F(){}; -F.prototype = Runnable.prototype; -Hook.prototype = new F; -Hook.prototype.constructor = Hook; - - -/** - * Get or set the test `err`. - * - * @param {Error} err - * @return {Error} - * @api public - */ - -Hook.prototype.error = function(err){ - if (0 == arguments.length) { - var err = this._error; - this._error = null; - return err; - } - - this._error = err; -}; - -}); // module: hook.js - -require.register("interfaces/bdd.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Suite = require('../suite') - , Test = require('../test') - , utils = require('../utils'); - -/** - * BDD-style interface: - * - * describe('Array', function(){ - * describe('#indexOf()', function(){ - * it('should return -1 when not present', function(){ - * - * }); - * - * it('should return the index when present', function(){ - * - * }); - * }); - * }); - * - */ - -module.exports = function(suite){ - var suites = [suite]; - - suite.on('pre-require', function(context, file, mocha){ - - /** - * Execute before running tests. - */ - - context.before = function(fn){ - suites[0].beforeAll(fn); - }; - - /** - * Execute after running tests. - */ - - context.after = function(fn){ - suites[0].afterAll(fn); - }; - - /** - * Execute before each test case. - */ - - context.beforeEach = function(fn){ - suites[0].beforeEach(fn); - }; - - /** - * Execute after each test case. - */ - - context.afterEach = function(fn){ - suites[0].afterEach(fn); - }; - - /** - * Describe a "suite" with the given `title` - * and callback `fn` containing nested suites - * and/or tests. - */ - - context.describe = context.context = function(title, fn){ - var suite = Suite.create(suites[0], title); - suites.unshift(suite); - fn.call(suite); - suites.shift(); - return suite; - }; - - /** - * Pending describe. - */ - - context.xdescribe = - context.xcontext = - context.describe.skip = function(title, fn){ - var suite = Suite.create(suites[0], title); - suite.pending = true; - suites.unshift(suite); - fn.call(suite); - suites.shift(); - }; - - /** - * Exclusive suite. - */ - - context.describe.only = function(title, fn){ - var suite = context.describe(title, fn); - mocha.grep(suite.fullTitle()); - }; - - /** - * Describe a specification or test-case - * with the given `title` and callback `fn` - * acting as a thunk. - */ - - context.it = context.specify = function(title, fn){ - var suite = suites[0]; - if (suite.pending) var fn = null; - var test = new Test(title, fn); - suite.addTest(test); - return test; - }; - - /** - * Exclusive test-case. - */ - - context.it.only = function(title, fn){ - var test = context.it(title, fn); - var reString = '^' + utils.escapeRegexp(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); - }; - - /** - * Pending test case. - */ - - context.xit = - context.xspecify = - context.it.skip = function(title){ - context.it(title); - }; - }); -}; - -}); // module: interfaces/bdd.js - -require.register("interfaces/exports.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Suite = require('../suite') - , Test = require('../test'); - -/** - * TDD-style interface: - * - * exports.Array = { - * '#indexOf()': { - * 'should return -1 when the value is not present': function(){ - * - * }, - * - * 'should return the correct index when the value is present': function(){ - * - * } - * } - * }; - * - */ - -module.exports = function(suite){ - var suites = [suite]; - - suite.on('require', visit); - - function visit(obj) { - var suite; - for (var key in obj) { - if ('function' == typeof obj[key]) { - var fn = obj[key]; - switch (key) { - case 'before': - suites[0].beforeAll(fn); - break; - case 'after': - suites[0].afterAll(fn); - break; - case 'beforeEach': - suites[0].beforeEach(fn); - break; - case 'afterEach': - suites[0].afterEach(fn); - break; - default: - suites[0].addTest(new Test(key, fn)); - } - } else { - var suite = Suite.create(suites[0], key); - suites.unshift(suite); - visit(obj[key]); - suites.shift(); - } - } - } -}; - -}); // module: interfaces/exports.js - -require.register("interfaces/index.js", function(module, exports, require){ - -exports.bdd = require('./bdd'); -exports.tdd = require('./tdd'); -exports.qunit = require('./qunit'); -exports.exports = require('./exports'); - -}); // module: interfaces/index.js - -require.register("interfaces/qunit.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Suite = require('../suite') - , Test = require('../test') - , utils = require('../utils'); - -/** - * QUnit-style interface: - * - * suite('Array'); - * - * test('#length', function(){ - * var arr = [1,2,3]; - * ok(arr.length == 3); - * }); - * - * test('#indexOf()', function(){ - * var arr = [1,2,3]; - * ok(arr.indexOf(1) == 0); - * ok(arr.indexOf(2) == 1); - * ok(arr.indexOf(3) == 2); - * }); - * - * suite('String'); - * - * test('#length', function(){ - * ok('foo'.length == 3); - * }); - * - */ - -module.exports = function(suite){ - var suites = [suite]; - - suite.on('pre-require', function(context, file, mocha){ - - /** - * Execute before running tests. - */ - - context.before = function(fn){ - suites[0].beforeAll(fn); - }; - - /** - * Execute after running tests. - */ - - context.after = function(fn){ - suites[0].afterAll(fn); - }; - - /** - * Execute before each test case. - */ - - context.beforeEach = function(fn){ - suites[0].beforeEach(fn); - }; - - /** - * Execute after each test case. - */ - - context.afterEach = function(fn){ - suites[0].afterEach(fn); - }; - - /** - * Describe a "suite" with the given `title`. - */ - - context.suite = function(title){ - if (suites.length > 1) suites.shift(); - var suite = Suite.create(suites[0], title); - suites.unshift(suite); - return suite; - }; - - /** - * Exclusive test-case. - */ - - context.suite.only = function(title, fn){ - var suite = context.suite(title, fn); - mocha.grep(suite.fullTitle()); - }; - - /** - * Describe a specification or test-case - * with the given `title` and callback `fn` - * acting as a thunk. - */ - - context.test = function(title, fn){ - var test = new Test(title, fn); - suites[0].addTest(test); - return test; - }; - - /** - * Exclusive test-case. - */ - - context.test.only = function(title, fn){ - var test = context.test(title, fn); - var reString = '^' + utils.escapeRegexp(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); - }; - - /** - * Pending test case. - */ - - context.test.skip = function(title){ - context.test(title); - }; - }); -}; - -}); // module: interfaces/qunit.js - -require.register("interfaces/tdd.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Suite = require('../suite') - , Test = require('../test') - , utils = require('../utils');; - -/** - * TDD-style interface: - * - * suite('Array', function(){ - * suite('#indexOf()', function(){ - * suiteSetup(function(){ - * - * }); - * - * test('should return -1 when not present', function(){ - * - * }); - * - * test('should return the index when present', function(){ - * - * }); - * - * suiteTeardown(function(){ - * - * }); - * }); - * }); - * - */ - -module.exports = function(suite){ - var suites = [suite]; - - suite.on('pre-require', function(context, file, mocha){ - - /** - * Execute before each test case. - */ - - context.setup = function(fn){ - suites[0].beforeEach(fn); - }; - - /** - * Execute after each test case. - */ - - context.teardown = function(fn){ - suites[0].afterEach(fn); - }; - - /** - * Execute before the suite. - */ - - context.suiteSetup = function(fn){ - suites[0].beforeAll(fn); - }; - - /** - * Execute after the suite. - */ - - context.suiteTeardown = function(fn){ - suites[0].afterAll(fn); - }; - - /** - * Describe a "suite" with the given `title` - * and callback `fn` containing nested suites - * and/or tests. - */ - - context.suite = function(title, fn){ - var suite = Suite.create(suites[0], title); - suites.unshift(suite); - fn.call(suite); - suites.shift(); - return suite; - }; - - /** - * Pending suite. - */ - context.suite.skip = function(title, fn) { - var suite = Suite.create(suites[0], title); - suite.pending = true; - suites.unshift(suite); - fn.call(suite); - suites.shift(); - }; - - /** - * Exclusive test-case. - */ - - context.suite.only = function(title, fn){ - var suite = context.suite(title, fn); - mocha.grep(suite.fullTitle()); - }; - - /** - * Describe a specification or test-case - * with the given `title` and callback `fn` - * acting as a thunk. - */ - - context.test = function(title, fn){ - var suite = suites[0]; - if (suite.pending) var fn = null; - var test = new Test(title, fn); - suite.addTest(test); - return test; - }; - - /** - * Exclusive test-case. - */ - - context.test.only = function(title, fn){ - var test = context.test(title, fn); - var reString = '^' + utils.escapeRegexp(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); - }; - - /** - * Pending test case. - */ - - context.test.skip = function(title){ - context.test(title); - }; - }); -}; - -}); // module: interfaces/tdd.js - -require.register("mocha.js", function(module, exports, require){ -/*! - * mocha - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var path = require('browser/path') - , utils = require('./utils'); - -/** - * Expose `Mocha`. - */ - -exports = module.exports = Mocha; - -/** - * Expose internals. - */ - -exports.utils = utils; -exports.interfaces = require('./interfaces'); -exports.reporters = require('./reporters'); -exports.Runnable = require('./runnable'); -exports.Context = require('./context'); -exports.Runner = require('./runner'); -exports.Suite = require('./suite'); -exports.Hook = require('./hook'); -exports.Test = require('./test'); - -/** - * Return image `name` path. - * - * @param {String} name - * @return {String} - * @api private - */ - -function image(name) { - return __dirname + '/../images/' + name + '.png'; -} - -/** - * Setup mocha with `options`. - * - * Options: - * - * - `ui` name "bdd", "tdd", "exports" etc - * - `reporter` reporter instance, defaults to `mocha.reporters.Dot` - * - `globals` array of accepted globals - * - `timeout` timeout in milliseconds - * - `bail` bail on the first test failure - * - `slow` milliseconds to wait before considering a test slow - * - `ignoreLeaks` ignore global leaks - * - `grep` string or regexp to filter tests with - * - * @param {Object} options - * @api public - */ - -function Mocha(options) { - options = options || {}; - this.files = []; - this.options = options; - this.grep(options.grep); - this.suite = new exports.Suite('', new exports.Context); - this.ui(options.ui); - this.bail(options.bail); - this.reporter(options.reporter); - if (null != options.timeout) this.timeout(options.timeout); - if (options.slow) this.slow(options.slow); -} - -/** - * Enable or disable bailing on the first failure. - * - * @param {Boolean} [bail] - * @api public - */ - -Mocha.prototype.bail = function(bail){ - if (0 == arguments.length) bail = true; - this.suite.bail(bail); - return this; -}; - -/** - * Add test `file`. - * - * @param {String} file - * @api public - */ - -Mocha.prototype.addFile = function(file){ - this.files.push(file); - return this; -}; - -/** - * Set reporter to `reporter`, defaults to "dot". - * - * @param {String|Function} reporter name or constructor - * @api public - */ - -Mocha.prototype.reporter = function(reporter){ - if ('function' == typeof reporter) { - this._reporter = reporter; - } else { - reporter = reporter || 'dot'; - try { - this._reporter = require('./reporters/' + reporter); - } catch (err) { - this._reporter = require(reporter); - } - if (!this._reporter) throw new Error('invalid reporter "' + reporter + '"'); - } - return this; -}; - -/** - * Set test UI `name`, defaults to "bdd". - * - * @param {String} bdd - * @api public - */ - -Mocha.prototype.ui = function(name){ - name = name || 'bdd'; - this._ui = exports.interfaces[name]; - if (!this._ui) throw new Error('invalid interface "' + name + '"'); - this._ui = this._ui(this.suite); - return this; -}; - -/** - * Load registered files. - * - * @api private - */ - -Mocha.prototype.loadFiles = function(fn){ - var self = this; - var suite = this.suite; - var pending = this.files.length; - this.files.forEach(function(file){ - file = path.resolve(file); - suite.emit('pre-require', global, file, self); - suite.emit('require', require(file), file, self); - suite.emit('post-require', global, file, self); - --pending || (fn && fn()); - }); -}; - -/** - * Enable growl support. - * - * @api private - */ - -Mocha.prototype._growl = function(runner, reporter) { - var notify = require('growl'); - - runner.on('end', function(){ - var stats = reporter.stats; - if (stats.failures) { - var msg = stats.failures + ' of ' + runner.total + ' tests failed'; - notify(msg, { name: 'mocha', title: 'Failed', image: image('error') }); - } else { - notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', { - name: 'mocha' - , title: 'Passed' - , image: image('ok') - }); - } - }); -}; - -/** - * Add regexp to grep, if `re` is a string it is escaped. - * - * @param {RegExp|String} re - * @return {Mocha} - * @api public - */ - -Mocha.prototype.grep = function(re){ - this.options.grep = 'string' == typeof re - ? new RegExp(utils.escapeRegexp(re)) - : re; - return this; -}; - -/** - * Invert `.grep()` matches. - * - * @return {Mocha} - * @api public - */ - -Mocha.prototype.invert = function(){ - this.options.invert = true; - return this; -}; - -/** - * Ignore global leaks. - * - * @param {Boolean} ignore - * @return {Mocha} - * @api public - */ - -Mocha.prototype.ignoreLeaks = function(ignore){ - this.options.ignoreLeaks = !!ignore; - return this; -}; - -/** - * Enable global leak checking. - * - * @return {Mocha} - * @api public - */ - -Mocha.prototype.checkLeaks = function(){ - this.options.ignoreLeaks = false; - return this; -}; - -/** - * Enable growl support. - * - * @return {Mocha} - * @api public - */ - -Mocha.prototype.growl = function(){ - this.options.growl = true; - return this; -}; - -/** - * Ignore `globals` array or string. - * - * @param {Array|String} globals - * @return {Mocha} - * @api public - */ - -Mocha.prototype.globals = function(globals){ - this.options.globals = (this.options.globals || []).concat(globals); - return this; -}; - -/** - * Set the timeout in milliseconds. - * - * @param {Number} timeout - * @return {Mocha} - * @api public - */ - -Mocha.prototype.timeout = function(timeout){ - this.suite.timeout(timeout); - return this; -}; - -/** - * Set slowness threshold in milliseconds. - * - * @param {Number} slow - * @return {Mocha} - * @api public - */ - -Mocha.prototype.slow = function(slow){ - this.suite.slow(slow); - return this; -}; - -/** - * Makes all tests async (accepting a callback) - * - * @return {Mocha} - * @api public - */ - -Mocha.prototype.asyncOnly = function(){ - this.options.asyncOnly = true; - return this; -}; - -/** - * Run tests and invoke `fn()` when complete. - * - * @param {Function} fn - * @return {Runner} - * @api public - */ - -Mocha.prototype.run = function(fn){ - if (this.files.length) this.loadFiles(); - var suite = this.suite; - var options = this.options; - var runner = new exports.Runner(suite); - var reporter = new this._reporter(runner); - runner.ignoreLeaks = false !== options.ignoreLeaks; - runner.asyncOnly = options.asyncOnly; - if (options.grep) runner.grep(options.grep, options.invert); - if (options.globals) runner.globals(options.globals); - if (options.growl) this._growl(runner, reporter); - return runner.run(fn); -}; - -}); // module: mocha.js - -require.register("ms.js", function(module, exports, require){ -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} options - * @return {String|Number} - * @api public - */ - -module.exports = function(val, options){ - options = options || {}; - if ('string' == typeof val) return parse(val); - return options.long - ? long(val) - : short(val); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - var match = /^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(str); - if (!match) return; - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'y': - return n * y; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 's': - return n * s; - case 'ms': - return n; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function short(ms) { - if (ms >= d) return Math.round(ms / d) + 'd'; - if (ms >= h) return Math.round(ms / h) + 'h'; - if (ms >= m) return Math.round(ms / m) + 'm'; - if (ms >= s) return Math.round(ms / s) + 's'; - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function long(ms) { - return plural(ms, d, 'day') - || plural(ms, h, 'hour') - || plural(ms, m, 'minute') - || plural(ms, s, 'second') - || ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, n, name) { - if (ms < n) return; - if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name; - return Math.ceil(ms / n) + ' ' + name + 's'; -} - -}); // module: ms.js - -require.register("reporters/base.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var tty = require('browser/tty') - , diff = require('browser/diff') - , ms = require('../ms'); - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Check if both stdio streams are associated with a tty. - */ - -var isatty = tty.isatty(1) && tty.isatty(2); - -/** - * Expose `Base`. - */ - -exports = module.exports = Base; - -/** - * Enable coloring by default. - */ - -exports.useColors = isatty; - -/** - * Default color map. - */ - -exports.colors = { - 'pass': 90 - , 'fail': 31 - , 'bright pass': 92 - , 'bright fail': 91 - , 'bright yellow': 93 - , 'pending': 36 - , 'suite': 0 - , 'error title': 0 - , 'error message': 31 - , 'error stack': 90 - , 'checkmark': 32 - , 'fast': 90 - , 'medium': 33 - , 'slow': 31 - , 'green': 32 - , 'light': 90 - , 'diff gutter': 90 - , 'diff added': 42 - , 'diff removed': 41 -}; - -/** - * Default symbol map. - */ - -exports.symbols = { - ok: '✓', - err: '✖', - dot: '․' -}; - -// With node.js on Windows: use symbols available in terminal default fonts -if ('win32' == process.platform) { - exports.symbols.ok = '\u221A'; - exports.symbols.err = '\u00D7'; - exports.symbols.dot = '.'; -} - -/** - * Color `str` with the given `type`, - * allowing colors to be disabled, - * as well as user-defined color - * schemes. - * - * @param {String} type - * @param {String} str - * @return {String} - * @api private - */ - -var color = exports.color = function(type, str) { - if (!exports.useColors) return str; - return '\u001b[' + exports.colors[type] + 'm' + str + '\u001b[0m'; -}; - -/** - * Expose term window size, with some - * defaults for when stderr is not a tty. - */ - -exports.window = { - width: isatty - ? process.stdout.getWindowSize - ? process.stdout.getWindowSize(1)[0] - : tty.getWindowSize()[1] - : 75 -}; - -/** - * Expose some basic cursor interactions - * that are common among reporters. - */ - -exports.cursor = { - hide: function(){ - process.stdout.write('\u001b[?25l'); - }, - - show: function(){ - process.stdout.write('\u001b[?25h'); - }, - - deleteLine: function(){ - process.stdout.write('\u001b[2K'); - }, - - beginningOfLine: function(){ - process.stdout.write('\u001b[0G'); - }, - - CR: function(){ - exports.cursor.deleteLine(); - exports.cursor.beginningOfLine(); - } -}; - -/** - * Outut the given `failures` as a list. - * - * @param {Array} failures - * @api public - */ - -exports.list = function(failures){ - console.error(); - failures.forEach(function(test, i){ - // format - var fmt = color('error title', ' %s) %s:\n') - + color('error message', ' %s') - + color('error stack', '\n%s\n'); - - // msg - var err = test.err - , message = err.message || '' - , stack = err.stack || message - , index = stack.indexOf(message) + message.length - , msg = stack.slice(0, index) - , actual = err.actual - , expected = err.expected - , escape = true; - - // uncaught - if (err.uncaught) { - msg = 'Uncaught ' + msg; - } - - // explicitly show diff - if (err.showDiff && sameType(actual, expected)) { - escape = false; - err.actual = actual = stringify(actual); - err.expected = expected = stringify(expected); - } - - // actual / expected diff - if ('string' == typeof actual && 'string' == typeof expected) { - msg = errorDiff(err, 'WordsWithSpace', escape); - - // linenos - var lines = msg.split('\n'); - if (lines.length > 4) { - var width = String(lines.length).length; - msg = lines.map(function(str, i){ - return pad(++i, width) + ' |' + ' ' + str; - }).join('\n'); - } - - // legend - msg = '\n' - + color('diff removed', 'actual') - + ' ' - + color('diff added', 'expected') - + '\n\n' - + msg - + '\n'; - - // indent - msg = msg.replace(/^/gm, ' '); - - fmt = color('error title', ' %s) %s:\n%s') - + color('error stack', '\n%s\n'); - } - - // indent stack trace without msg - stack = stack.slice(index ? index + 1 : index) - .replace(/^/gm, ' '); - - console.error(fmt, (i + 1), test.fullTitle(), msg, stack); - }); -}; - -/** - * Initialize a new `Base` reporter. - * - * All other reporters generally - * inherit from this reporter, providing - * stats such as test duration, number - * of tests passed / failed etc. - * - * @param {Runner} runner - * @api public - */ - -function Base(runner) { - var self = this - , stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 } - , failures = this.failures = []; - - if (!runner) return; - this.runner = runner; - - runner.stats = stats; - - runner.on('start', function(){ - stats.start = new Date; - }); - - runner.on('suite', function(suite){ - stats.suites = stats.suites || 0; - suite.root || stats.suites++; - }); - - runner.on('test end', function(test){ - stats.tests = stats.tests || 0; - stats.tests++; - }); - - runner.on('pass', function(test){ - stats.passes = stats.passes || 0; - - var medium = test.slow() / 2; - test.speed = test.duration > test.slow() - ? 'slow' - : test.duration > medium - ? 'medium' - : 'fast'; - - stats.passes++; - }); - - runner.on('fail', function(test, err){ - stats.failures = stats.failures || 0; - stats.failures++; - test.err = err; - failures.push(test); - }); - - runner.on('end', function(){ - stats.end = new Date; - stats.duration = new Date - stats.start; - }); - - runner.on('pending', function(){ - stats.pending++; - }); -} - -/** - * Output common epilogue used by many of - * the bundled reporters. - * - * @api public - */ - -Base.prototype.epilogue = function(){ - var stats = this.stats; - var tests; - var fmt; - - console.log(); - - // passes - fmt = color('bright pass', ' ') - + color('green', ' %d passing') - + color('light', ' (%s)'); - - console.log(fmt, - stats.passes || 0, - ms(stats.duration)); - - // pending - if (stats.pending) { - fmt = color('pending', ' ') - + color('pending', ' %d pending'); - - console.log(fmt, stats.pending); - } - - // failures - if (stats.failures) { - fmt = color('fail', ' %d failing'); - - console.error(fmt, - stats.failures); - - Base.list(this.failures); - console.error(); - } - - console.log(); -}; - -/** - * Pad the given `str` to `len`. - * - * @param {String} str - * @param {String} len - * @return {String} - * @api private - */ - -function pad(str, len) { - str = String(str); - return Array(len - str.length + 1).join(' ') + str; -} - -/** - * Return a character diff for `err`. - * - * @param {Error} err - * @return {String} - * @api private - */ - -function errorDiff(err, type, escape) { - return diff['diff' + type](err.actual, err.expected).map(function(str){ - if (escape) { - str.value = str.value - .replace(/\t/g, '') - .replace(/\r/g, '') - .replace(/\n/g, '\n'); - } - if (str.added) return colorLines('diff added', str.value); - if (str.removed) return colorLines('diff removed', str.value); - return str.value; - }).join(''); -} - -/** - * Color lines for `str`, using the color `name`. - * - * @param {String} name - * @param {String} str - * @return {String} - * @api private - */ - -function colorLines(name, str) { - return str.split('\n').map(function(str){ - return color(name, str); - }).join('\n'); -} - -/** - * Stringify `obj`. - * - * @param {Mixed} obj - * @return {String} - * @api private - */ - -function stringify(obj) { - if (obj instanceof RegExp) return obj.toString(); - return JSON.stringify(obj, null, 2); -} - -/** - * Check that a / b have the same type. - * - * @param {Object} a - * @param {Object} b - * @return {Boolean} - * @api private - */ - -function sameType(a, b) { - a = Object.prototype.toString.call(a); - b = Object.prototype.toString.call(b); - return a == b; -} - -}); // module: reporters/base.js - -require.register("reporters/doc.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils'); - -/** - * Expose `Doc`. - */ - -exports = module.exports = Doc; - -/** - * Initialize a new `Doc` reporter. - * - * @param {Runner} runner - * @api public - */ - -function Doc(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , total = runner.total - , indents = 2; - - function indent() { - return Array(indents).join(' '); - } - - runner.on('suite', function(suite){ - if (suite.root) return; - ++indents; - console.log('%s
    ', indent()); - ++indents; - console.log('%s

    %s

    ', indent(), utils.escape(suite.title)); - console.log('%s
    ', indent()); - }); - - runner.on('suite end', function(suite){ - if (suite.root) return; - console.log('%s
    ', indent()); - --indents; - console.log('%s
    ', indent()); - --indents; - }); - - runner.on('pass', function(test){ - console.log('%s
    %s
    ', indent(), utils.escape(test.title)); - var code = utils.escape(utils.clean(test.fn.toString())); - console.log('%s
    %s
    ', indent(), code); - }); -} - -}); // module: reporters/doc.js - -require.register("reporters/dot.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , color = Base.color; - -/** - * Expose `Dot`. - */ - -exports = module.exports = Dot; - -/** - * Initialize a new `Dot` matrix test reporter. - * - * @param {Runner} runner - * @api public - */ - -function Dot(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , width = Base.window.width * .75 | 0 - , n = 0; - - runner.on('start', function(){ - process.stdout.write('\n '); - }); - - runner.on('pending', function(test){ - process.stdout.write(color('pending', Base.symbols.dot)); - }); - - runner.on('pass', function(test){ - if (++n % width == 0) process.stdout.write('\n '); - if ('slow' == test.speed) { - process.stdout.write(color('bright yellow', Base.symbols.dot)); - } else { - process.stdout.write(color(test.speed, Base.symbols.dot)); - } - }); - - runner.on('fail', function(test, err){ - if (++n % width == 0) process.stdout.write('\n '); - process.stdout.write(color('fail', Base.symbols.dot)); - }); - - runner.on('end', function(){ - console.log(); - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -Dot.prototype = new F; -Dot.prototype.constructor = Dot; - -}); // module: reporters/dot.js - -require.register("reporters/html-cov.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var JSONCov = require('./json-cov') - , fs = require('browser/fs'); - -/** - * Expose `HTMLCov`. - */ - -exports = module.exports = HTMLCov; - -/** - * Initialize a new `JsCoverage` reporter. - * - * @param {Runner} runner - * @api public - */ - -function HTMLCov(runner) { - var jade = require('jade') - , file = __dirname + '/templates/coverage.jade' - , str = fs.readFileSync(file, 'utf8') - , fn = jade.compile(str, { filename: file }) - , self = this; - - JSONCov.call(this, runner, false); - - runner.on('end', function(){ - process.stdout.write(fn({ - cov: self.cov - , coverageClass: coverageClass - })); - }); -} - -/** - * Return coverage class for `n`. - * - * @return {String} - * @api private - */ - -function coverageClass(n) { - if (n >= 75) return 'high'; - if (n >= 50) return 'medium'; - if (n >= 25) return 'low'; - return 'terrible'; -} -}); // module: reporters/html-cov.js - -require.register("reporters/html.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils') - , Progress = require('../browser/progress') - , escape = utils.escape; - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Expose `Doc`. - */ - -exports = module.exports = HTML; - -/** - * Stats template. - */ - -var statsTemplate = ''; - -/** - * Initialize a new `Doc` reporter. - * - * @param {Runner} runner - * @api public - */ - -function HTML(runner, root) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , total = runner.total - , stat = fragment(statsTemplate) - , items = stat.getElementsByTagName('li') - , passes = items[1].getElementsByTagName('em')[0] - , passesLink = items[1].getElementsByTagName('a')[0] - , failures = items[2].getElementsByTagName('em')[0] - , failuresLink = items[2].getElementsByTagName('a')[0] - , duration = items[3].getElementsByTagName('em')[0] - , canvas = stat.getElementsByTagName('canvas')[0] - , report = fragment('
      ') - , stack = [report] - , progress - , ctx - - root = root || document.getElementById('mocha'); - - if (canvas.getContext) { - var ratio = window.devicePixelRatio || 1; - canvas.style.width = canvas.width; - canvas.style.height = canvas.height; - canvas.width *= ratio; - canvas.height *= ratio; - ctx = canvas.getContext('2d'); - ctx.scale(ratio, ratio); - progress = new Progress; - } - - if (!root) return error('#mocha div missing, add it to your document'); - - // pass toggle - on(passesLink, 'click', function(){ - unhide(); - var name = /pass/.test(report.className) ? '' : ' pass'; - report.className = report.className.replace(/fail|pass/g, '') + name; - if (report.className.trim()) hideSuitesWithout('test pass'); - }); - - // failure toggle - on(failuresLink, 'click', function(){ - unhide(); - var name = /fail/.test(report.className) ? '' : ' fail'; - report.className = report.className.replace(/fail|pass/g, '') + name; - if (report.className.trim()) hideSuitesWithout('test fail'); - }); - - root.appendChild(stat); - root.appendChild(report); - - if (progress) progress.size(40); - - runner.on('suite', function(suite){ - if (suite.root) return; - - // suite - var url = '?grep=' + encodeURIComponent(suite.fullTitle()); - var el = fragment('
    • %s

    • ', url, escape(suite.title)); - - // container - stack[0].appendChild(el); - stack.unshift(document.createElement('ul')); - el.appendChild(stack[0]); - }); - - runner.on('suite end', function(suite){ - if (suite.root) return; - stack.shift(); - }); - - runner.on('fail', function(test, err){ - if ('hook' == test.type) runner.emit('test end', test); - }); - - runner.on('test end', function(test){ - // TODO: add to stats - var percent = stats.tests / this.total * 100 | 0; - if (progress) progress.update(percent).draw(ctx); - - // update stats - var ms = new Date - stats.start; - text(passes, stats.passes); - text(failures, stats.failures); - text(duration, (ms / 1000).toFixed(2)); - - // test - if ('passed' == test.state) { - var el = fragment('
    • %e%ems ‣

    • ', test.speed, test.title, test.duration, encodeURIComponent(test.fullTitle())); - } else if (test.pending) { - var el = fragment('
    • %e

    • ', test.title); - } else { - var el = fragment('
    • %e ‣

    • ', test.title, encodeURIComponent(test.fullTitle())); - var str = test.err.stack || test.err.toString(); - - // FF / Opera do not add the message - if (!~str.indexOf(test.err.message)) { - str = test.err.message + '\n' + str; - } - - // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we - // check for the result of the stringifying. - if ('[object Error]' == str) str = test.err.message; - - // Safari doesn't give you a stack. Let's at least provide a source line. - if (!test.err.stack && test.err.sourceURL && test.err.line !== undefined) { - str += "\n(" + test.err.sourceURL + ":" + test.err.line + ")"; - } - - el.appendChild(fragment('
      %e
      ', str)); - } - - // toggle code - // TODO: defer - if (!test.pending) { - var h2 = el.getElementsByTagName('h2')[0]; - - on(h2, 'click', function(){ - pre.style.display = 'none' == pre.style.display - ? 'block' - : 'none'; - }); - - var pre = fragment('
      %e
      ', utils.clean(test.fn.toString())); - el.appendChild(pre); - pre.style.display = 'none'; - } - - // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack. - if (stack[0]) stack[0].appendChild(el); - }); -} - -/** - * Display error `msg`. - */ - -function error(msg) { - document.body.appendChild(fragment('
      %s
      ', msg)); -} - -/** - * Return a DOM fragment from `html`. - */ - -function fragment(html) { - var args = arguments - , div = document.createElement('div') - , i = 1; - - div.innerHTML = html.replace(/%([se])/g, function(_, type){ - switch (type) { - case 's': return String(args[i++]); - case 'e': return escape(args[i++]); - } - }); - - return div.firstChild; -} - -/** - * Check for suites that do not have elements - * with `classname`, and hide them. - */ - -function hideSuitesWithout(classname) { - var suites = document.getElementsByClassName('suite'); - for (var i = 0; i < suites.length; i++) { - var els = suites[i].getElementsByClassName(classname); - if (0 == els.length) suites[i].className += ' hidden'; - } -} - -/** - * Unhide .hidden suites. - */ - -function unhide() { - var els = document.getElementsByClassName('suite hidden'); - for (var i = 0; i < els.length; ++i) { - els[i].className = els[i].className.replace('suite hidden', 'suite'); - } -} - -/** - * Set `el` text to `str`. - */ - -function text(el, str) { - if (el.textContent) { - el.textContent = str; - } else { - el.innerText = str; - } -} - -/** - * Listen on `event` with callback `fn`. - */ - -function on(el, event, fn) { - if (el.addEventListener) { - el.addEventListener(event, fn, false); - } else { - el.attachEvent('on' + event, fn); - } -} - -}); // module: reporters/html.js - -require.register("reporters/index.js", function(module, exports, require){ - -exports.Base = require('./base'); -exports.Dot = require('./dot'); -exports.Doc = require('./doc'); -exports.TAP = require('./tap'); -exports.JSON = require('./json'); -exports.HTML = require('./html'); -exports.List = require('./list'); -exports.Min = require('./min'); -exports.Spec = require('./spec'); -exports.Nyan = require('./nyan'); -exports.XUnit = require('./xunit'); -exports.Markdown = require('./markdown'); -exports.Progress = require('./progress'); -exports.Landing = require('./landing'); -exports.JSONCov = require('./json-cov'); -exports.HTMLCov = require('./html-cov'); -exports.JSONStream = require('./json-stream'); -exports.Teamcity = require('./teamcity'); - -}); // module: reporters/index.js - -require.register("reporters/json-cov.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `JSONCov`. - */ - -exports = module.exports = JSONCov; - -/** - * Initialize a new `JsCoverage` reporter. - * - * @param {Runner} runner - * @param {Boolean} output - * @api public - */ - -function JSONCov(runner, output) { - var self = this - , output = 1 == arguments.length ? true : output; - - Base.call(this, runner); - - var tests = [] - , failures = [] - , passes = []; - - runner.on('test end', function(test){ - tests.push(test); - }); - - runner.on('pass', function(test){ - passes.push(test); - }); - - runner.on('fail', function(test){ - failures.push(test); - }); - - runner.on('end', function(){ - var cov = global._$jscoverage || {}; - var result = self.cov = map(cov); - result.stats = self.stats; - result.tests = tests.map(clean); - result.failures = failures.map(clean); - result.passes = passes.map(clean); - if (!output) return; - process.stdout.write(JSON.stringify(result, null, 2 )); - }); -} - -/** - * Map jscoverage data to a JSON structure - * suitable for reporting. - * - * @param {Object} cov - * @return {Object} - * @api private - */ - -function map(cov) { - var ret = { - instrumentation: 'node-jscoverage' - , sloc: 0 - , hits: 0 - , misses: 0 - , coverage: 0 - , files: [] - }; - - for (var filename in cov) { - var data = coverage(filename, cov[filename]); - ret.files.push(data); - ret.hits += data.hits; - ret.misses += data.misses; - ret.sloc += data.sloc; - } - - ret.files.sort(function(a, b) { - return a.filename.localeCompare(b.filename); - }); - - if (ret.sloc > 0) { - ret.coverage = (ret.hits / ret.sloc) * 100; - } - - return ret; -}; - -/** - * Map jscoverage data for a single source file - * to a JSON structure suitable for reporting. - * - * @param {String} filename name of the source file - * @param {Object} data jscoverage coverage data - * @return {Object} - * @api private - */ - -function coverage(filename, data) { - var ret = { - filename: filename, - coverage: 0, - hits: 0, - misses: 0, - sloc: 0, - source: {} - }; - - data.source.forEach(function(line, num){ - num++; - - if (data[num] === 0) { - ret.misses++; - ret.sloc++; - } else if (data[num] !== undefined) { - ret.hits++; - ret.sloc++; - } - - ret.source[num] = { - source: line - , coverage: data[num] === undefined - ? '' - : data[num] - }; - }); - - ret.coverage = ret.hits / ret.sloc * 100; - - return ret; -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @param {Object} test - * @return {Object} - * @api private - */ - -function clean(test) { - return { - title: test.title - , fullTitle: test.fullTitle() - , duration: test.duration - } -} - -}); // module: reporters/json-cov.js - -require.register("reporters/json-stream.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , color = Base.color; - -/** - * Expose `List`. - */ - -exports = module.exports = List; - -/** - * Initialize a new `List` test reporter. - * - * @param {Runner} runner - * @api public - */ - -function List(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , total = runner.total; - - runner.on('start', function(){ - console.log(JSON.stringify(['start', { total: total }])); - }); - - runner.on('pass', function(test){ - console.log(JSON.stringify(['pass', clean(test)])); - }); - - runner.on('fail', function(test, err){ - console.log(JSON.stringify(['fail', clean(test)])); - }); - - runner.on('end', function(){ - process.stdout.write(JSON.stringify(['end', self.stats])); - }); -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @param {Object} test - * @return {Object} - * @api private - */ - -function clean(test) { - return { - title: test.title - , fullTitle: test.fullTitle() - , duration: test.duration - } -} -}); // module: reporters/json-stream.js - -require.register("reporters/json.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `JSON`. - */ - -exports = module.exports = JSONReporter; - -/** - * Initialize a new `JSON` reporter. - * - * @param {Runner} runner - * @api public - */ - -function JSONReporter(runner) { - var self = this; - Base.call(this, runner); - - var tests = [] - , failures = [] - , passes = []; - - runner.on('test end', function(test){ - tests.push(test); - }); - - runner.on('pass', function(test){ - passes.push(test); - }); - - runner.on('fail', function(test){ - failures.push(test); - }); - - runner.on('end', function(){ - var obj = { - stats: self.stats - , tests: tests.map(clean) - , failures: failures.map(clean) - , passes: passes.map(clean) - }; - - process.stdout.write(JSON.stringify(obj, null, 2)); - }); -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @param {Object} test - * @return {Object} - * @api private - */ - -function clean(test) { - return { - title: test.title - , fullTitle: test.fullTitle() - , duration: test.duration - } -} -}); // module: reporters/json.js - -require.register("reporters/landing.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `Landing`. - */ - -exports = module.exports = Landing; - -/** - * Airplane color. - */ - -Base.colors.plane = 0; - -/** - * Airplane crash color. - */ - -Base.colors['plane crash'] = 31; - -/** - * Runway color. - */ - -Base.colors.runway = 90; - -/** - * Initialize a new `Landing` reporter. - * - * @param {Runner} runner - * @api public - */ - -function Landing(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , width = Base.window.width * .75 | 0 - , total = runner.total - , stream = process.stdout - , plane = color('plane', '✈') - , crashed = -1 - , n = 0; - - function runway() { - var buf = Array(width).join('-'); - return ' ' + color('runway', buf); - } - - runner.on('start', function(){ - stream.write('\n '); - cursor.hide(); - }); - - runner.on('test end', function(test){ - // check if the plane crashed - var col = -1 == crashed - ? width * ++n / total | 0 - : crashed; - - // show the crash - if ('failed' == test.state) { - plane = color('plane crash', '✈'); - crashed = col; - } - - // render landing strip - stream.write('\u001b[4F\n\n'); - stream.write(runway()); - stream.write('\n '); - stream.write(color('runway', Array(col).join('⋅'))); - stream.write(plane) - stream.write(color('runway', Array(width - col).join('⋅') + '\n')); - stream.write(runway()); - stream.write('\u001b[0m'); - }); - - runner.on('end', function(){ - cursor.show(); - console.log(); - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -Landing.prototype = new F; -Landing.prototype.constructor = Landing; - -}); // module: reporters/landing.js - -require.register("reporters/list.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `List`. - */ - -exports = module.exports = List; - -/** - * Initialize a new `List` test reporter. - * - * @param {Runner} runner - * @api public - */ - -function List(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , n = 0; - - runner.on('start', function(){ - console.log(); - }); - - runner.on('test', function(test){ - process.stdout.write(color('pass', ' ' + test.fullTitle() + ': ')); - }); - - runner.on('pending', function(test){ - var fmt = color('checkmark', ' -') - + color('pending', ' %s'); - console.log(fmt, test.fullTitle()); - }); - - runner.on('pass', function(test){ - var fmt = color('checkmark', ' '+Base.symbols.dot) - + color('pass', ' %s: ') - + color(test.speed, '%dms'); - cursor.CR(); - console.log(fmt, test.fullTitle(), test.duration); - }); - - runner.on('fail', function(test, err){ - cursor.CR(); - console.log(color('fail', ' %d) %s'), ++n, test.fullTitle()); - }); - - runner.on('end', self.epilogue.bind(self)); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -List.prototype = new F; -List.prototype.constructor = List; - - -}); // module: reporters/list.js - -require.register("reporters/markdown.js", function(module, exports, require){ -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils'); - -/** - * Expose `Markdown`. - */ - -exports = module.exports = Markdown; - -/** - * Initialize a new `Markdown` reporter. - * - * @param {Runner} runner - * @api public - */ - -function Markdown(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , level = 0 - , buf = ''; - - function title(str) { - return Array(level).join('#') + ' ' + str; - } - - function indent() { - return Array(level).join(' '); - } - - function mapTOC(suite, obj) { - var ret = obj; - obj = obj[suite.title] = obj[suite.title] || { suite: suite }; - suite.suites.forEach(function(suite){ - mapTOC(suite, obj); - }); - return ret; - } - - function stringifyTOC(obj, level) { - ++level; - var buf = ''; - var link; - for (var key in obj) { - if ('suite' == key) continue; - if (key) link = ' - [' + key + '](#' + utils.slug(obj[key].suite.fullTitle()) + ')\n'; - if (key) buf += Array(level).join(' ') + link; - buf += stringifyTOC(obj[key], level); - } - --level; - return buf; - } - - function generateTOC(suite) { - var obj = mapTOC(suite, {}); - return stringifyTOC(obj, 0); - } - - generateTOC(runner.suite); - - runner.on('suite', function(suite){ - ++level; - var slug = utils.slug(suite.fullTitle()); - buf += '' + '\n'; - buf += title(suite.title) + '\n'; - }); - - runner.on('suite end', function(suite){ - --level; - }); - - runner.on('pass', function(test){ - var code = utils.clean(test.fn.toString()); - buf += test.title + '.\n'; - buf += '\n```js\n'; - buf += code + '\n'; - buf += '```\n\n'; - }); - - runner.on('end', function(){ - process.stdout.write('# TOC\n'); - process.stdout.write(generateTOC(runner.suite)); - process.stdout.write(buf); - }); -} -}); // module: reporters/markdown.js - -require.register("reporters/min.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `Min`. - */ - -exports = module.exports = Min; - -/** - * Initialize a new `Min` minimal test reporter (best used with --watch). - * - * @param {Runner} runner - * @api public - */ - -function Min(runner) { - Base.call(this, runner); - - runner.on('start', function(){ - // clear screen - process.stdout.write('\u001b[2J'); - // set cursor position - process.stdout.write('\u001b[1;3H'); - }); - - runner.on('end', this.epilogue.bind(this)); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -Min.prototype = new F; -Min.prototype.constructor = Min; - - -}); // module: reporters/min.js - -require.register("reporters/nyan.js", function(module, exports, require){ -/** - * Module dependencies. - */ - -var Base = require('./base') - , color = Base.color; - -/** - * Expose `Dot`. - */ - -exports = module.exports = NyanCat; - -/** - * Initialize a new `Dot` matrix test reporter. - * - * @param {Runner} runner - * @api public - */ - -function NyanCat(runner) { - Base.call(this, runner); - var self = this - , stats = this.stats - , width = Base.window.width * .75 | 0 - , rainbowColors = this.rainbowColors = self.generateColors() - , colorIndex = this.colorIndex = 0 - , numerOfLines = this.numberOfLines = 4 - , trajectories = this.trajectories = [[], [], [], []] - , nyanCatWidth = this.nyanCatWidth = 11 - , trajectoryWidthMax = this.trajectoryWidthMax = (width - nyanCatWidth) - , scoreboardWidth = this.scoreboardWidth = 5 - , tick = this.tick = 0 - , n = 0; - - runner.on('start', function(){ - Base.cursor.hide(); - self.draw(); - }); - - runner.on('pending', function(test){ - self.draw(); - }); - - runner.on('pass', function(test){ - self.draw(); - }); - - runner.on('fail', function(test, err){ - self.draw(); - }); - - runner.on('end', function(){ - Base.cursor.show(); - for (var i = 0; i < self.numberOfLines; i++) write('\n'); - self.epilogue(); - }); -} - -/** - * Draw the nyan cat - * - * @api private - */ - -NyanCat.prototype.draw = function(){ - this.appendRainbow(); - this.drawScoreboard(); - this.drawRainbow(); - this.drawNyanCat(); - this.tick = !this.tick; -}; - -/** - * Draw the "scoreboard" showing the number - * of passes, failures and pending tests. - * - * @api private - */ - -NyanCat.prototype.drawScoreboard = function(){ - var stats = this.stats; - var colors = Base.colors; - - function draw(color, n) { - write(' '); - write('\u001b[' + color + 'm' + n + '\u001b[0m'); - write('\n'); - } - - draw(colors.green, stats.passes); - draw(colors.fail, stats.failures); - draw(colors.pending, stats.pending); - write('\n'); - - this.cursorUp(this.numberOfLines); -}; - -/** - * Append the rainbow. - * - * @api private - */ - -NyanCat.prototype.appendRainbow = function(){ - var segment = this.tick ? '_' : '-'; - var rainbowified = this.rainbowify(segment); - - for (var index = 0; index < this.numberOfLines; index++) { - var trajectory = this.trajectories[index]; - if (trajectory.length >= this.trajectoryWidthMax) trajectory.shift(); - trajectory.push(rainbowified); - } -}; - -/** - * Draw the rainbow. - * - * @api private - */ - -NyanCat.prototype.drawRainbow = function(){ - var self = this; - - this.trajectories.forEach(function(line, index) { - write('\u001b[' + self.scoreboardWidth + 'C'); - write(line.join('')); - write('\n'); - }); - - this.cursorUp(this.numberOfLines); -}; - -/** - * Draw the nyan cat - * - * @api private - */ - -NyanCat.prototype.drawNyanCat = function() { - var self = this; - var startWidth = this.scoreboardWidth + this.trajectories[0].length; - var color = '\u001b[' + startWidth + 'C'; - var padding = ''; - - write(color); - write('_,------,'); - write('\n'); - - write(color); - padding = self.tick ? ' ' : ' '; - write('_|' + padding + '/\\_/\\ '); - write('\n'); - - write(color); - padding = self.tick ? '_' : '__'; - var tail = self.tick ? '~' : '^'; - var face; - write(tail + '|' + padding + this.face() + ' '); - write('\n'); - - write(color); - padding = self.tick ? ' ' : ' '; - write(padding + '"" "" '); - write('\n'); - - this.cursorUp(this.numberOfLines); -}; - -/** - * Draw nyan cat face. - * - * @return {String} - * @api private - */ - -NyanCat.prototype.face = function() { - var stats = this.stats; - if (stats.failures) { - return '( x .x)'; - } else if (stats.pending) { - return '( o .o)'; - } else if(stats.passes) { - return '( ^ .^)'; - } else { - return '( - .-)'; - } -} - -/** - * Move cursor up `n`. - * - * @param {Number} n - * @api private - */ - -NyanCat.prototype.cursorUp = function(n) { - write('\u001b[' + n + 'A'); -}; - -/** - * Move cursor down `n`. - * - * @param {Number} n - * @api private - */ - -NyanCat.prototype.cursorDown = function(n) { - write('\u001b[' + n + 'B'); -}; - -/** - * Generate rainbow colors. - * - * @return {Array} - * @api private - */ - -NyanCat.prototype.generateColors = function(){ - var colors = []; - - for (var i = 0; i < (6 * 7); i++) { - var pi3 = Math.floor(Math.PI / 3); - var n = (i * (1.0 / 6)); - var r = Math.floor(3 * Math.sin(n) + 3); - var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3); - var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3); - colors.push(36 * r + 6 * g + b + 16); - } - - return colors; -}; - -/** - * Apply rainbow to the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -NyanCat.prototype.rainbowify = function(str){ - var color = this.rainbowColors[this.colorIndex % this.rainbowColors.length]; - this.colorIndex += 1; - return '\u001b[38;5;' + color + 'm' + str + '\u001b[0m'; -}; - -/** - * Stdout helper. - */ - -function write(string) { - process.stdout.write(string); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -NyanCat.prototype = new F; -NyanCat.prototype.constructor = NyanCat; - - -}); // module: reporters/nyan.js - -require.register("reporters/progress.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `Progress`. - */ - -exports = module.exports = Progress; - -/** - * General progress bar color. - */ - -Base.colors.progress = 90; - -/** - * Initialize a new `Progress` bar test reporter. - * - * @param {Runner} runner - * @param {Object} options - * @api public - */ - -function Progress(runner, options) { - Base.call(this, runner); - - var self = this - , options = options || {} - , stats = this.stats - , width = Base.window.width * .50 | 0 - , total = runner.total - , complete = 0 - , max = Math.max; - - // default chars - options.open = options.open || '['; - options.complete = options.complete || '▬'; - options.incomplete = options.incomplete || Base.symbols.dot; - options.close = options.close || ']'; - options.verbose = false; - - // tests started - runner.on('start', function(){ - console.log(); - cursor.hide(); - }); - - // tests complete - runner.on('test end', function(){ - complete++; - var incomplete = total - complete - , percent = complete / total - , n = width * percent | 0 - , i = width - n; - - cursor.CR(); - process.stdout.write('\u001b[J'); - process.stdout.write(color('progress', ' ' + options.open)); - process.stdout.write(Array(n).join(options.complete)); - process.stdout.write(Array(i).join(options.incomplete)); - process.stdout.write(color('progress', options.close)); - if (options.verbose) { - process.stdout.write(color('progress', ' ' + complete + ' of ' + total)); - } - }); - - // tests are complete, output some stats - // and the failures if any - runner.on('end', function(){ - cursor.show(); - console.log(); - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -Progress.prototype = new F; -Progress.prototype.constructor = Progress; - - -}); // module: reporters/progress.js - -require.register("reporters/spec.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `Spec`. - */ - -exports = module.exports = Spec; - -/** - * Initialize a new `Spec` test reporter. - * - * @param {Runner} runner - * @api public - */ - -function Spec(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , indents = 0 - , n = 0; - - function indent() { - return Array(indents).join(' ') - } - - runner.on('start', function(){ - console.log(); - }); - - runner.on('suite', function(suite){ - ++indents; - console.log(color('suite', '%s%s'), indent(), suite.title); - }); - - runner.on('suite end', function(suite){ - --indents; - if (1 == indents) console.log(); - }); - - runner.on('test', function(test){ - process.stdout.write(indent() + color('pass', ' ◦ ' + test.title + ': ')); - }); - - runner.on('pending', function(test){ - var fmt = indent() + color('pending', ' - %s'); - console.log(fmt, test.title); - }); - - runner.on('pass', function(test){ - if ('fast' == test.speed) { - var fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s '); - cursor.CR(); - console.log(fmt, test.title); - } else { - var fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s ') - + color(test.speed, '(%dms)'); - cursor.CR(); - console.log(fmt, test.title, test.duration); - } - }); - - runner.on('fail', function(test, err){ - cursor.CR(); - console.log(indent() + color('fail', ' %d) %s'), ++n, test.title); - }); - - runner.on('end', self.epilogue.bind(self)); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -Spec.prototype = new F; -Spec.prototype.constructor = Spec; - - -}); // module: reporters/spec.js - -require.register("reporters/tap.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `TAP`. - */ - -exports = module.exports = TAP; - -/** - * Initialize a new `TAP` reporter. - * - * @param {Runner} runner - * @api public - */ - -function TAP(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , n = 1 - , passes = 0 - , failures = 0; - - runner.on('start', function(){ - var total = runner.grepTotal(runner.suite); - console.log('%d..%d', 1, total); - }); - - runner.on('test end', function(){ - ++n; - }); - - runner.on('pending', function(test){ - console.log('ok %d %s # SKIP -', n, title(test)); - }); - - runner.on('pass', function(test){ - passes++; - console.log('ok %d %s', n, title(test)); - }); - - runner.on('fail', function(test, err){ - failures++; - console.log('not ok %d %s', n, title(test)); - if (err.stack) console.log(err.stack.replace(/^/gm, ' ')); - }); - - runner.on('end', function(){ - console.log('# tests ' + (passes + failures)); - console.log('# pass ' + passes); - console.log('# fail ' + failures); - }); -} - -/** - * Return a TAP-safe title of `test` - * - * @param {Object} test - * @return {String} - * @api private - */ - -function title(test) { - return test.fullTitle().replace(/#/g, ''); -} - -}); // module: reporters/tap.js - -require.register("reporters/teamcity.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `Teamcity`. - */ - -exports = module.exports = Teamcity; - -/** - * Initialize a new `Teamcity` reporter. - * - * @param {Runner} runner - * @api public - */ - -function Teamcity(runner) { - Base.call(this, runner); - var stats = this.stats; - - runner.on('start', function() { - console.log("##teamcity[testSuiteStarted name='mocha.suite']"); - }); - - runner.on('test', function(test) { - console.log("##teamcity[testStarted name='" + escape(test.fullTitle()) + "']"); - }); - - runner.on('fail', function(test, err) { - console.log("##teamcity[testFailed name='" + escape(test.fullTitle()) + "' message='" + escape(err.message) + "']"); - }); - - runner.on('pending', function(test) { - console.log("##teamcity[testIgnored name='" + escape(test.fullTitle()) + "' message='pending']"); - }); - - runner.on('test end', function(test) { - console.log("##teamcity[testFinished name='" + escape(test.fullTitle()) + "' duration='" + test.duration + "']"); - }); - - runner.on('end', function() { - console.log("##teamcity[testSuiteFinished name='mocha.suite' duration='" + stats.duration + "']"); - }); -} - -/** - * Escape the given `str`. - */ - -function escape(str) { - return str - .replace(/\|/g, "||") - .replace(/\n/g, "|n") - .replace(/\r/g, "|r") - .replace(/\[/g, "|[") - .replace(/\]/g, "|]") - .replace(/\u0085/g, "|x") - .replace(/\u2028/g, "|l") - .replace(/\u2029/g, "|p") - .replace(/'/g, "|'"); -} - -}); // module: reporters/teamcity.js - -require.register("reporters/xunit.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils') - , escape = utils.escape; - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Expose `XUnit`. - */ - -exports = module.exports = XUnit; - -/** - * Initialize a new `XUnit` reporter. - * - * @param {Runner} runner - * @api public - */ - -function XUnit(runner) { - Base.call(this, runner); - var stats = this.stats - , tests = [] - , self = this; - - runner.on('pass', function(test){ - tests.push(test); - }); - - runner.on('fail', function(test){ - tests.push(test); - }); - - runner.on('end', function(){ - console.log(tag('testsuite', { - name: 'Mocha Tests' - , tests: stats.tests - , failures: stats.failures - , errors: stats.failures - , skipped: stats.tests - stats.failures - stats.passes - , timestamp: (new Date).toUTCString() - , time: (stats.duration / 1000) || 0 - }, false)); - - tests.forEach(test); - console.log(''); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -XUnit.prototype = new F; -XUnit.prototype.constructor = XUnit; - - -/** - * Output tag for the given `test.` - */ - -function test(test) { - var attrs = { - classname: test.parent.fullTitle() - , name: test.title - , time: test.duration / 1000 - }; - - if ('failed' == test.state) { - var err = test.err; - attrs.message = escape(err.message); - console.log(tag('testcase', attrs, false, tag('failure', attrs, false, cdata(err.stack)))); - } else if (test.pending) { - console.log(tag('testcase', attrs, false, tag('skipped', {}, true))); - } else { - console.log(tag('testcase', attrs, true) ); - } -} - -/** - * HTML tag helper. - */ - -function tag(name, attrs, close, content) { - var end = close ? '/>' : '>' - , pairs = [] - , tag; - - for (var key in attrs) { - pairs.push(key + '="' + escape(attrs[key]) + '"'); - } - - tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end; - if (content) tag += content + ''; -} - -}); // module: reporters/xunit.js - -require.register("runnable.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var EventEmitter = require('browser/events').EventEmitter - , debug = require('browser/debug')('mocha:runnable') - , milliseconds = require('./ms'); - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Object#toString(). - */ - -var toString = Object.prototype.toString; - -/** - * Expose `Runnable`. - */ - -module.exports = Runnable; - -/** - * Initialize a new `Runnable` with the given `title` and callback `fn`. - * - * @param {String} title - * @param {Function} fn - * @api private - */ - -function Runnable(title, fn) { - this.title = title; - this.fn = fn; - this.async = fn && fn.length; - this.sync = ! this.async; - this._timeout = 2000; - this._slow = 75; - this.timedOut = false; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -function F(){}; -F.prototype = EventEmitter.prototype; -Runnable.prototype = new F; -Runnable.prototype.constructor = Runnable; - - -/** - * Set & get timeout `ms`. - * - * @param {Number|String} ms - * @return {Runnable|Number} ms or self - * @api private - */ - -Runnable.prototype.timeout = function(ms){ - if (0 == arguments.length) return this._timeout; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('timeout %d', ms); - this._timeout = ms; - if (this.timer) this.resetTimeout(); - return this; -}; - -/** - * Set & get slow `ms`. - * - * @param {Number|String} ms - * @return {Runnable|Number} ms or self - * @api private - */ - -Runnable.prototype.slow = function(ms){ - if (0 === arguments.length) return this._slow; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('timeout %d', ms); - this._slow = ms; - return this; -}; - -/** - * Return the full title generated by recursively - * concatenating the parent's full title. - * - * @return {String} - * @api public - */ - -Runnable.prototype.fullTitle = function(){ - return this.parent.fullTitle() + ' ' + this.title; -}; - -/** - * Clear the timeout. - * - * @api private - */ - -Runnable.prototype.clearTimeout = function(){ - clearTimeout(this.timer); -}; - -/** - * Inspect the runnable void of private properties. - * - * @return {String} - * @api private - */ - -Runnable.prototype.inspect = function(){ - return JSON.stringify(this, function(key, val){ - if ('_' == key[0]) return; - if ('parent' == key) return '#'; - if ('ctx' == key) return '#'; - return val; - }, 2); -}; - -/** - * Reset the timeout. - * - * @api private - */ - -Runnable.prototype.resetTimeout = function(){ - var self = this; - var ms = this.timeout() || 1e9; - - this.clearTimeout(); - this.timer = setTimeout(function(){ - self.callback(new Error('timeout of ' + ms + 'ms exceeded')); - self.timedOut = true; - }, ms); -}; - -/** - * Run the test and invoke `fn(err)`. - * - * @param {Function} fn - * @api private - */ - -Runnable.prototype.run = function(fn){ - var self = this - , ms = this.timeout() - , start = new Date - , ctx = this.ctx - , finished - , emitted; - - if (ctx) ctx.runnable(this); - - // timeout - if (this.async) { - if (ms) { - this.timer = setTimeout(function(){ - done(new Error('timeout of ' + ms + 'ms exceeded')); - self.timedOut = true; - }, ms); - } - } - - // called multiple times - function multiple(err) { - if (emitted) return; - emitted = true; - self.emit('error', err || new Error('done() called multiple times')); - } - - // finished - function done(err) { - if (self.timedOut) return; - if (finished) return multiple(err); - self.clearTimeout(); - self.duration = new Date - start; - finished = true; - fn(err); - } - - // for .resetTimeout() - this.callback = done; - - // async - if (this.async) { - try { - this.fn.call(ctx, function(err){ - if (err instanceof Error || toString.call(err) === "[object Error]") return done(err); - if (null != err) return done(new Error('done() invoked with non-Error: ' + err)); - done(); - }); - } catch (err) { - done(err); - } - return; - } - - if (this.asyncOnly) { - return done(new Error('--async-only option in use without declaring `done()`')); - } - - // sync - try { - if (!this.pending) this.fn.call(ctx); - this.duration = new Date - start; - fn(); - } catch (err) { - fn(err); - } -}; - -}); // module: runnable.js - -require.register("runner.js", function(module, exports, require){ -/** - * Module dependencies. - */ - -var EventEmitter = require('browser/events').EventEmitter - , debug = require('browser/debug')('mocha:runner') - , Test = require('./test') - , utils = require('./utils') - , filter = utils.filter - , keys = utils.keys; - -/** - * Non-enumerable globals. - */ - -var globals = [ - 'setTimeout', - 'clearTimeout', - 'setInterval', - 'clearInterval', - 'XMLHttpRequest', - 'Date' -]; - -/** - * Expose `Runner`. - */ - -module.exports = Runner; - -/** - * Initialize a `Runner` for the given `suite`. - * - * Events: - * - * - `start` execution started - * - `end` execution complete - * - `suite` (suite) test suite execution started - * - `suite end` (suite) all tests (and sub-suites) have finished - * - `test` (test) test execution started - * - `test end` (test) test completed - * - `hook` (hook) hook execution started - * - `hook end` (hook) hook complete - * - `pass` (test) test passed - * - `fail` (test, err) test failed - * - `pending` (test) test pending - * - * @api public - */ - -function Runner(suite) { - var self = this; - this._globals = []; - this.suite = suite; - this.total = suite.total(); - this.failures = 0; - this.on('test end', function(test){ self.checkGlobals(test); }); - this.on('hook end', function(hook){ self.checkGlobals(hook); }); - this.grep(/.*/); - this.globals(this.globalProps().concat(['errno'])); -} - -/** - * Wrapper for setImmediate, process.nextTick, or browser polyfill. - * - * @param {Function} fn - * @api private - */ - -Runner.immediately = global.setImmediate || process.nextTick; - -/** - * Inherit from `EventEmitter.prototype`. - */ - -function F(){}; -F.prototype = EventEmitter.prototype; -Runner.prototype = new F; -Runner.prototype.constructor = Runner; - - -/** - * Run tests with full titles matching `re`. Updates runner.total - * with number of tests matched. - * - * @param {RegExp} re - * @param {Boolean} invert - * @return {Runner} for chaining - * @api public - */ - -Runner.prototype.grep = function(re, invert){ - debug('grep %s', re); - this._grep = re; - this._invert = invert; - this.total = this.grepTotal(this.suite); - return this; -}; - -/** - * Returns the number of tests matching the grep search for the - * given suite. - * - * @param {Suite} suite - * @return {Number} - * @api public - */ - -Runner.prototype.grepTotal = function(suite) { - var self = this; - var total = 0; - - suite.eachTest(function(test){ - var match = self._grep.test(test.fullTitle()); - if (self._invert) match = !match; - if (match) total++; - }); - - return total; -}; - -/** - * Return a list of global properties. - * - * @return {Array} - * @api private - */ - -Runner.prototype.globalProps = function() { - var props = utils.keys(global); - - // non-enumerables - for (var i = 0; i < globals.length; ++i) { - if (~utils.indexOf(props, globals[i])) continue; - props.push(globals[i]); - } - - return props; -}; - -/** - * Allow the given `arr` of globals. - * - * @param {Array} arr - * @return {Runner} for chaining - * @api public - */ - -Runner.prototype.globals = function(arr){ - if (0 == arguments.length) return this._globals; - debug('globals %j', arr); - utils.forEach(arr, function(arr){ - this._globals.push(arr); - }, this); - return this; -}; - -/** - * Check for global variable leaks. - * - * @api private - */ - -Runner.prototype.checkGlobals = function(test){ - if (this.ignoreLeaks) return; - var ok = this._globals; - var globals = this.globalProps(); - var isNode = process.kill; - var leaks; - - // check length - 2 ('errno' and 'location' globals) - if (isNode && 1 == ok.length - globals.length) return; - else if (2 == ok.length - globals.length) return; - - if(this.prevGlobalsLength == globals.length) return; - this.prevGlobalsLength = globals.length; - - //console.time('filterLeaksTime'); - leaks = filterLeaks(ok, globals); - //console.timeEnd('filterLeaksTime'); - this._globals = this._globals.concat(leaks); - - if (leaks.length > 1) { - this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + '')); - } else if (leaks.length) { - this.fail(test, new Error('global leak detected: ' + leaks[0])); - } -}; - -/** - * Fail the given `test`. - * - * @param {Test} test - * @param {Error} err - * @api private - */ - -Runner.prototype.fail = function(test, err){ - ++this.failures; - test.state = 'failed'; - - if ('string' == typeof err) { - err = new Error('the string "' + err + '" was thrown, throw an Error :)'); - } - - this.emit('fail', test, err); -}; - -/** - * Fail the given `hook` with `err`. - * - * Hook failures (currently) hard-end due - * to that fact that a failing hook will - * surely cause subsequent tests to fail, - * causing jumbled reporting. - * - * @param {Hook} hook - * @param {Error} err - * @api private - */ - -Runner.prototype.failHook = function(hook, err){ - this.fail(hook, err); - this.emit('end'); -}; - -/** - * Run hook `name` callbacks and then invoke `fn()`. - * - * @param {String} name - * @param {Function} function - * @api private - */ - -Runner.prototype.hook = function(name, fn){ - var suite = this.suite - , hooks = suite['_' + name] - , self = this - , timer; - - function next(i) { - var hook = hooks[i]; - if (!hook) return fn(); - if (self.failures && suite.bail()) return fn(); - self.currentRunnable = hook; - - hook.ctx.currentTest = self.test; - - self.emit('hook', hook); - - hook.on('error', function(err){ - self.failHook(hook, err); - }); - - hook.run(function(err){ - hook.removeAllListeners('error'); - var testError = hook.error(); - if (testError) self.fail(self.test, testError); - if (err) return self.failHook(hook, err); - self.emit('hook end', hook); - delete hook.ctx.currentTest; - next(++i); - }); - } - - Runner.immediately(function(){ - next(0); - }); -}; - -/** - * Run hook `name` for the given array of `suites` - * in order, and callback `fn(err)`. - * - * @param {String} name - * @param {Array} suites - * @param {Function} fn - * @api private - */ - -Runner.prototype.hooks = function(name, suites, fn){ - var self = this - , orig = this.suite; - - function next(suite) { - self.suite = suite; - - if (!suite) { - self.suite = orig; - return fn(); - } - - self.hook(name, function(err){ - if (err) { - self.suite = orig; - return fn(err); - } - - next(suites.pop()); - }); - } - - next(suites.pop()); -}; - -/** - * Run hooks from the top level down. - * - * @param {String} name - * @param {Function} fn - * @api private - */ - -Runner.prototype.hookUp = function(name, fn){ - var suites = [this.suite].concat(this.parents()).reverse(); - this.hooks(name, suites, fn); -}; - -/** - * Run hooks from the bottom up. - * - * @param {String} name - * @param {Function} fn - * @api private - */ - -Runner.prototype.hookDown = function(name, fn){ - var suites = [this.suite].concat(this.parents()); - this.hooks(name, suites, fn); -}; - -/** - * Return an array of parent Suites from - * closest to furthest. - * - * @return {Array} - * @api private - */ - -Runner.prototype.parents = function(){ - var suite = this.suite - , suites = []; - while (suite = suite.parent) suites.push(suite); - return suites; -}; - -/** - * Run the current test and callback `fn(err)`. - * - * @param {Function} fn - * @api private - */ - -Runner.prototype.runTest = function(fn){ - var test = this.test - , self = this; - - if (this.asyncOnly) test.asyncOnly = true; - - try { - test.on('error', function(err){ - self.fail(test, err); - }); - test.run(fn); - } catch (err) { - fn(err); - } -}; - -/** - * Run tests in the given `suite` and invoke - * the callback `fn()` when complete. - * - * @param {Suite} suite - * @param {Function} fn - * @api private - */ - -Runner.prototype.runTests = function(suite, fn){ - var self = this - , tests = suite.tests.slice() - , test; - - function next(err) { - // if we bail after first err - if (self.failures && suite._bail) return fn(); - - // next test - test = tests.shift(); - - // all done - if (!test) return fn(); - - // grep - var match = self._grep.test(test.fullTitle()); - if (self._invert) match = !match; - if (!match) return next(); - - // pending - if (test.pending) { - self.emit('pending', test); - self.emit('test end', test); - return next(); - } - - // execute test and hook(s) - self.emit('test', self.test = test); - self.hookDown('beforeEach', function(){ - self.currentRunnable = self.test; - self.runTest(function(err){ - test = self.test; - - if (err) { - self.fail(test, err); - self.emit('test end', test); - return self.hookUp('afterEach', next); - } - - test.state = 'passed'; - self.emit('pass', test); - self.emit('test end', test); - self.hookUp('afterEach', next); - }); - }); - } - - this.next = next; - next(); -}; - -/** - * Run the given `suite` and invoke the - * callback `fn()` when complete. - * - * @param {Suite} suite - * @param {Function} fn - * @api private - */ - -Runner.prototype.runSuite = function(suite, fn){ - var total = this.grepTotal(suite) - , self = this - , i = 0; - - debug('run suite %s', suite.fullTitle()); - - if (!total) return fn(); - - this.emit('suite', this.suite = suite); - - function next() { - var curr = suite.suites[i++]; - if (!curr) return done(); - self.runSuite(curr, next); - } - - function done() { - self.suite = suite; - self.hook('afterAll', function(){ - self.emit('suite end', suite); - fn(); - }); - } - - this.hook('beforeAll', function(){ - self.runTests(suite, next); - }); -}; - -/** - * Handle uncaught exceptions. - * - * @param {Error} err - * @api private - */ - -Runner.prototype.uncaught = function(err){ - debug('uncaught exception %s', err.message); - var runnable = this.currentRunnable; - if (!runnable || 'failed' == runnable.state) return; - runnable.clearTimeout(); - err.uncaught = true; - this.fail(runnable, err); - - // recover from test - if ('test' == runnable.type) { - this.emit('test end', runnable); - this.hookUp('afterEach', this.next); - return; - } - - // bail on hooks - this.emit('end'); -}; - -/** - * Run the root suite and invoke `fn(failures)` - * on completion. - * - * @param {Function} fn - * @return {Runner} for chaining - * @api public - */ - -Runner.prototype.run = function(fn){ - var self = this - , fn = fn || function(){}; - - function uncaught(err){ - self.uncaught(err); - } - - debug('start'); - - // callback - this.on('end', function(){ - debug('end'); - process.removeListener('uncaughtException', uncaught); - fn(self.failures); - }); - - // run suites - this.emit('start'); - this.runSuite(this.suite, function(){ - debug('finished running'); - self.emit('end'); - }); - - // uncaught exception - process.on('uncaughtException', uncaught); - - return this; -}; - -/** - * Filter leaks with the given globals flagged as `ok`. - * - * @param {Array} ok - * @param {Array} globals - * @return {Array} - * @api private - */ - -function filterLeaks(ok, globals) { - return filter(globals, function(key){ - // Firefox and Chrome exposes iframes as index inside the window object - if (/^d+/.test(key)) return false; - - // in firefox - // if runner runs in an iframe, this iframe's window.getInterface method not init at first - // it is assigned in some seconds - if (global.navigator && /^getInterface/.test(key)) return false; - - // an iframe could be approached by window[iframeIndex] - // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak - if (global.navigator && /^\d+/.test(key)) return false; - - // Opera and IE expose global variables for HTML element IDs (issue #243) - if (/^mocha-/.test(key)) return false; - - var matched = filter(ok, function(ok){ - if (~ok.indexOf('*')) return 0 == key.indexOf(ok.split('*')[0]); - return key == ok; - }); - return matched.length == 0 && (!global.navigator || 'onerror' !== key); - }); -} - -}); // module: runner.js - -require.register("suite.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var EventEmitter = require('browser/events').EventEmitter - , debug = require('browser/debug')('mocha:suite') - , milliseconds = require('./ms') - , utils = require('./utils') - , Hook = require('./hook'); - -/** - * Expose `Suite`. - */ - -exports = module.exports = Suite; - -/** - * Create a new `Suite` with the given `title` - * and parent `Suite`. When a suite with the - * same title is already present, that suite - * is returned to provide nicer reporter - * and more flexible meta-testing. - * - * @param {Suite} parent - * @param {String} title - * @return {Suite} - * @api public - */ - -exports.create = function(parent, title){ - var suite = new Suite(title, parent.ctx); - suite.parent = parent; - if (parent.pending) suite.pending = true; - title = suite.fullTitle(); - parent.addSuite(suite); - return suite; -}; - -/** - * Initialize a new `Suite` with the given - * `title` and `ctx`. - * - * @param {String} title - * @param {Context} ctx - * @api private - */ - -function Suite(title, ctx) { - this.title = title; - this.ctx = ctx; - this.suites = []; - this.tests = []; - this.pending = false; - this._beforeEach = []; - this._beforeAll = []; - this._afterEach = []; - this._afterAll = []; - this.root = !title; - this._timeout = 2000; - this._slow = 75; - this._bail = false; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -function F(){}; -F.prototype = EventEmitter.prototype; -Suite.prototype = new F; -Suite.prototype.constructor = Suite; - - -/** - * Return a clone of this `Suite`. - * - * @return {Suite} - * @api private - */ - -Suite.prototype.clone = function(){ - var suite = new Suite(this.title); - debug('clone'); - suite.ctx = this.ctx; - suite.timeout(this.timeout()); - suite.slow(this.slow()); - suite.bail(this.bail()); - return suite; -}; - -/** - * Set timeout `ms` or short-hand such as "2s". - * - * @param {Number|String} ms - * @return {Suite|Number} for chaining - * @api private - */ - -Suite.prototype.timeout = function(ms){ - if (0 == arguments.length) return this._timeout; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('timeout %d', ms); - this._timeout = parseInt(ms, 10); - return this; -}; - -/** - * Set slow `ms` or short-hand such as "2s". - * - * @param {Number|String} ms - * @return {Suite|Number} for chaining - * @api private - */ - -Suite.prototype.slow = function(ms){ - if (0 === arguments.length) return this._slow; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('slow %d', ms); - this._slow = ms; - return this; -}; - -/** - * Sets whether to bail after first error. - * - * @parma {Boolean} bail - * @return {Suite|Number} for chaining - * @api private - */ - -Suite.prototype.bail = function(bail){ - if (0 == arguments.length) return this._bail; - debug('bail %s', bail); - this._bail = bail; - return this; -}; - -/** - * Run `fn(test[, done])` before running tests. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.beforeAll = function(fn){ - if (this.pending) return this; - var hook = new Hook('"before all" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._beforeAll.push(hook); - this.emit('beforeAll', hook); - return this; -}; - -/** - * Run `fn(test[, done])` after running tests. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.afterAll = function(fn){ - if (this.pending) return this; - var hook = new Hook('"after all" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._afterAll.push(hook); - this.emit('afterAll', hook); - return this; -}; - -/** - * Run `fn(test[, done])` before each test case. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.beforeEach = function(fn){ - if (this.pending) return this; - var hook = new Hook('"before each" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._beforeEach.push(hook); - this.emit('beforeEach', hook); - return this; -}; - -/** - * Run `fn(test[, done])` after each test case. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.afterEach = function(fn){ - if (this.pending) return this; - var hook = new Hook('"after each" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._afterEach.push(hook); - this.emit('afterEach', hook); - return this; -}; - -/** - * Add a test `suite`. - * - * @param {Suite} suite - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.addSuite = function(suite){ - suite.parent = this; - suite.timeout(this.timeout()); - suite.slow(this.slow()); - suite.bail(this.bail()); - this.suites.push(suite); - this.emit('suite', suite); - return this; -}; - -/** - * Add a `test` to this suite. - * - * @param {Test} test - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.addTest = function(test){ - test.parent = this; - test.timeout(this.timeout()); - test.slow(this.slow()); - test.ctx = this.ctx; - this.tests.push(test); - this.emit('test', test); - return this; -}; - -/** - * Return the full title generated by recursively - * concatenating the parent's full title. - * - * @return {String} - * @api public - */ - -Suite.prototype.fullTitle = function(){ - if (this.parent) { - var full = this.parent.fullTitle(); - if (full) return full + ' ' + this.title; - } - return this.title; -}; - -/** - * Return the total number of tests. - * - * @return {Number} - * @api public - */ - -Suite.prototype.total = function(){ - return utils.reduce(this.suites, function(sum, suite){ - return sum + suite.total(); - }, 0) + this.tests.length; -}; - -/** - * Iterates through each suite recursively to find - * all tests. Applies a function in the format - * `fn(test)`. - * - * @param {Function} fn - * @return {Suite} - * @api private - */ - -Suite.prototype.eachTest = function(fn){ - utils.forEach(this.tests, fn); - utils.forEach(this.suites, function(suite){ - suite.eachTest(fn); - }); - return this; -}; - -}); // module: suite.js - -require.register("test.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Runnable = require('./runnable'); - -/** - * Expose `Test`. - */ - -module.exports = Test; - -/** - * Initialize a new `Test` with the given `title` and callback `fn`. - * - * @param {String} title - * @param {Function} fn - * @api private - */ - -function Test(title, fn) { - Runnable.call(this, title, fn); - this.pending = !fn; - this.type = 'test'; -} - -/** - * Inherit from `Runnable.prototype`. - */ - -function F(){}; -F.prototype = Runnable.prototype; -Test.prototype = new F; -Test.prototype.constructor = Test; - - -}); // module: test.js - -require.register("utils.js", function(module, exports, require){ -/** - * Module dependencies. - */ - -var fs = require('browser/fs') - , path = require('browser/path') - , join = path.join - , debug = require('browser/debug')('mocha:watch'); - -/** - * Ignored directories. - */ - -var ignore = ['node_modules', '.git']; - -/** - * Escape special characters in the given string of html. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function(html){ - return String(html) - .replace(/&/g, '&') - .replace(/"/g, '"') - .replace(//g, '>'); -}; - -/** - * Array#forEach (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @param {Object} scope - * @api private - */ - -exports.forEach = function(arr, fn, scope){ - for (var i = 0, l = arr.length; i < l; i++) - fn.call(scope, arr[i], i); -}; - -/** - * Array#indexOf (<=IE8) - * - * @parma {Array} arr - * @param {Object} obj to find index of - * @param {Number} start - * @api private - */ - -exports.indexOf = function(arr, obj, start){ - for (var i = start || 0, l = arr.length; i < l; i++) { - if (arr[i] === obj) - return i; - } - return -1; -}; - -/** - * Array#reduce (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @param {Object} initial value - * @api private - */ - -exports.reduce = function(arr, fn, val){ - var rval = val; - - for (var i = 0, l = arr.length; i < l; i++) { - rval = fn(rval, arr[i], i, arr); - } - - return rval; -}; - -/** - * Array#filter (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @api private - */ - -exports.filter = function(arr, fn){ - var ret = []; - - for (var i = 0, l = arr.length; i < l; i++) { - var val = arr[i]; - if (fn(val, i, arr)) ret.push(val); - } - - return ret; -}; - -/** - * Object.keys (<=IE8) - * - * @param {Object} obj - * @return {Array} keys - * @api private - */ - -exports.keys = Object.keys || function(obj) { - var keys = [] - , has = Object.prototype.hasOwnProperty // for `window` on <=IE8 - - for (var key in obj) { - if (has.call(obj, key)) { - keys.push(key); - } - } - - return keys; -}; - -/** - * Watch the given `files` for changes - * and invoke `fn(file)` on modification. - * - * @param {Array} files - * @param {Function} fn - * @api private - */ - -exports.watch = function(files, fn){ - var options = { interval: 100 }; - files.forEach(function(file){ - debug('file %s', file); - fs.watchFile(file, options, function(curr, prev){ - if (prev.mtime < curr.mtime) fn(file); - }); - }); -}; - -/** - * Ignored files. - */ - -function ignored(path){ - return !~ignore.indexOf(path); -} - -/** - * Lookup files in the given `dir`. - * - * @return {Array} - * @api private - */ - -exports.files = function(dir, ret){ - ret = ret || []; - - fs.readdirSync(dir) - .filter(ignored) - .forEach(function(path){ - path = join(dir, path); - if (fs.statSync(path).isDirectory()) { - exports.files(path, ret); - } else if (path.match(/\.(js|coffee|litcoffee|coffee.md)$/)) { - ret.push(path); - } - }); - - return ret; -}; - -/** - * Compute a slug from the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.slug = function(str){ - return str - .toLowerCase() - .replace(/ +/g, '-') - .replace(/[^-\w]/g, ''); -}; - -/** - * Strip the function definition from `str`, - * and re-indent for pre whitespace. - */ - -exports.clean = function(str) { - str = str - .replace(/^function *\(.*\) *{/, '') - .replace(/\s+\}$/, ''); - - var whitespace = str.match(/^\n?(\s*)/)[1] - , re = new RegExp('^' + whitespace, 'gm'); - - str = str.replace(re, ''); - - return exports.trim(str); -}; - -/** - * Escape regular expression characters in `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.escapeRegexp = function(str){ - return str.replace(/[-\\^$*+?.()|[\]{}]/g, "\\$&"); -}; - -/** - * Trim the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.trim = function(str){ - return str.replace(/^\s+|\s+$/g, ''); -}; - -/** - * Parse the given `qs`. - * - * @param {String} qs - * @return {Object} - * @api private - */ - -exports.parseQuery = function(qs){ - return exports.reduce(qs.replace('?', '').split('&'), function(obj, pair){ - var i = pair.indexOf('=') - , key = pair.slice(0, i) - , val = pair.slice(++i); - - obj[key] = decodeURIComponent(val); - return obj; - }, {}); -}; - -/** - * Highlight the given string of `js`. - * - * @param {String} js - * @return {String} - * @api private - */ - -function highlight(js) { - return js - .replace(//g, '>') - .replace(/\/\/(.*)/gm, '//$1') - .replace(/('.*?')/gm, '$1') - .replace(/(\d+\.\d+)/gm, '$1') - .replace(/(\d+)/gm, '$1') - .replace(/\bnew *(\w+)/gm, 'new $1') - .replace(/\b(function|new|throw|return|var|if|else)\b/gm, '$1') -} - -/** - * Highlight the contents of tag `name`. - * - * @param {String} name - * @api private - */ - -exports.highlightTags = function(name) { - var code = document.getElementsByTagName(name); - for (var i = 0, len = code.length; i < len; ++i) { - code[i].innerHTML = highlight(code[i].innerHTML); - } -}; - -}); // module: utils.js -// The global object is "self" in Web Workers. -global = (function() { return this; })(); - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date; -var setTimeout = global.setTimeout; -var setInterval = global.setInterval; -var clearTimeout = global.clearTimeout; -var clearInterval = global.clearInterval; - -/** - * Node shims. - * - * These are meant only to allow - * mocha.js to run untouched, not - * to allow running node code in - * the browser. - */ - -var process = {}; -process.exit = function(status){}; -process.stdout = {}; - -/** - * Remove uncaughtException listener. - */ - -process.removeListener = function(e){ - if ('uncaughtException' == e) { - global.onerror = function() {}; - } -}; - -/** - * Implements uncaughtException listener. - */ - -process.on = function(e, fn){ - if ('uncaughtException' == e) { - global.onerror = function(err, url, line){ - fn(new Error(err + ' (' + url + ':' + line + ')')); - }; - } -}; - -/** - * Expose mocha. - */ - -var Mocha = global.Mocha = require('mocha'), - mocha = global.mocha = new Mocha({ reporter: 'html' }); - -var immediateQueue = [] - , immediateTimeout; - -function timeslice() { - var immediateStart = new Date().getTime(); - while (immediateQueue.length && (new Date().getTime() - immediateStart) < 100) { - immediateQueue.shift()(); - } - if (immediateQueue.length) { - immediateTimeout = setTimeout(timeslice, 0); - } else { - immediateTimeout = null; - } -} - -/** - * High-performance override of Runner.immediately. - */ - -Mocha.Runner.immediately = function(callback) { - immediateQueue.push(callback); - if (!immediateTimeout) { - immediateTimeout = setTimeout(timeslice, 0); - } -}; - -/** - * Override ui to ensure that the ui functions are initialized. - * Normally this would happen in Mocha.prototype.loadFiles. - */ - -mocha.ui = function(ui){ - Mocha.prototype.ui.call(this, ui); - this.suite.emit('pre-require', global, null, this); - return this; -}; - -/** - * Setup mocha with the given setting options. - */ - -mocha.setup = function(opts){ - if ('string' == typeof opts) opts = { ui: opts }; - for (var opt in opts) this[opt](opts[opt]); - return this; -}; - -/** - * Run mocha, returning the Runner. - */ - -mocha.run = function(fn){ - var options = mocha.options; - mocha.globals('location'); - - var query = Mocha.utils.parseQuery(global.location.search || ''); - if (query.grep) mocha.grep(query.grep); - if (query.invert) mocha.invert(); - - return Mocha.prototype.run.call(mocha, function(){ - // The DOM Document is not available in Web Workers. - if (global.document) { - Mocha.utils.highlightTags('code'); - } - if (fn) fn(); - }); -}; - -/** - * Expose the process shim. - */ - -Mocha.process = process; -})(); \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/.bin/jade b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/.bin/jade deleted file mode 120000 index 571fae73..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/.bin/jade +++ /dev/null @@ -1 +0,0 @@ -../jade/bin/jade \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/.npmignore b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/.travis.yml b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/.travis.yml deleted file mode 100644 index f1d0f13c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.4 - - 0.6 diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/History.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/History.md deleted file mode 100644 index 4961d2e2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/History.md +++ /dev/null @@ -1,107 +0,0 @@ - -0.6.1 / 2012-06-01 -================== - - * Added: append (yes or no) on confirmation - * Added: allow node.js v0.7.x - -0.6.0 / 2012-04-10 -================== - - * Added `.prompt(obj, callback)` support. Closes #49 - * Added default support to .choose(). Closes #41 - * Fixed the choice example - -0.5.1 / 2011-12-20 -================== - - * Fixed `password()` for recent nodes. Closes #36 - -0.5.0 / 2011-12-04 -================== - - * Added sub-command option support [itay] - -0.4.3 / 2011-12-04 -================== - - * Fixed custom help ordering. Closes #32 - -0.4.2 / 2011-11-24 -================== - - * Added travis support - * Fixed: line-buffered input automatically trimmed. Closes #31 - -0.4.1 / 2011-11-18 -================== - - * Removed listening for "close" on --help - -0.4.0 / 2011-11-15 -================== - - * Added support for `--`. Closes #24 - -0.3.3 / 2011-11-14 -================== - - * Fixed: wait for close event when writing help info [Jerry Hamlet] - -0.3.2 / 2011-11-01 -================== - - * Fixed long flag definitions with values [felixge] - -0.3.1 / 2011-10-31 -================== - - * Changed `--version` short flag to `-V` from `-v` - * Changed `.version()` so it's configurable [felixge] - -0.3.0 / 2011-10-31 -================== - - * Added support for long flags only. Closes #18 - -0.2.1 / 2011-10-24 -================== - - * "node": ">= 0.4.x < 0.7.0". Closes #20 - -0.2.0 / 2011-09-26 -================== - - * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs] - -0.1.0 / 2011-08-24 -================== - - * Added support for custom `--help` output - -0.0.5 / 2011-08-18 -================== - - * Changed: when the user enters nothing prompt for password again - * Fixed issue with passwords beginning with numbers [NuckChorris] - -0.0.4 / 2011-08-15 -================== - - * Fixed `Commander#args` - -0.0.3 / 2011-08-15 -================== - - * Added default option value support - -0.0.2 / 2011-08-15 -================== - - * Added mask support to `Command#password(str[, mask], fn)` - * Added `Command#password(str, fn)` - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/Makefile b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/Makefile deleted file mode 100644 index 00746255..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -TESTS = $(shell find test/test.*.js) - -test: - @./test/run $(TESTS) - -.PHONY: test \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/Readme.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/Readme.md deleted file mode 100644 index b8328c37..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/Readme.md +++ /dev/null @@ -1,262 +0,0 @@ -# Commander.js - - The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander). - - [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js) - -## Installation - - $ npm install commander - -## Option parsing - - Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('commander'); - -program - .version('0.0.1') - .option('-p, --peppers', 'Add peppers') - .option('-P, --pineapple', 'Add pineapple') - .option('-b, --bbq', 'Add bbq sauce') - .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') - .parse(process.argv); - -console.log('you ordered a pizza with:'); -if (program.peppers) console.log(' - peppers'); -if (program.pineapple) console.log(' - pineappe'); -if (program.bbq) console.log(' - bbq'); -console.log(' - %s cheese', program.cheese); -``` - - Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. - -## Automated --help - - The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free: - -``` - $ ./examples/pizza --help - - Usage: pizza [options] - - Options: - - -V, --version output the version number - -p, --peppers Add peppers - -P, --pineapple Add pineappe - -b, --bbq Add bbq sauce - -c, --cheese Add the specified type of cheese [marble] - -h, --help output usage information - -``` - -## Coercion - -```js -function range(val) { - return val.split('..').map(Number); -} - -function list(val) { - return val.split(','); -} - -program - .version('0.0.1') - .usage('[options] ') - .option('-i, --integer ', 'An integer argument', parseInt) - .option('-f, --float ', 'A float argument', parseFloat) - .option('-r, --range ..', 'A range', range) - .option('-l, --list ', 'A list', list) - .option('-o, --optional [value]', 'An optional value') - .parse(process.argv); - -console.log(' int: %j', program.integer); -console.log(' float: %j', program.float); -console.log(' optional: %j', program.optional); -program.range = program.range || []; -console.log(' range: %j..%j', program.range[0], program.range[1]); -console.log(' list: %j', program.list); -console.log(' args: %j', program.args); -``` - -## Custom help - - You can display arbitrary `-h, --help` information - by listening for "--help". Commander will automatically - exit once you are done so that the remainder of your program - does not execute causing undesired behaviours, for example - in the following executable "stuff" will not output when - `--help` is used. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('../'); - -function list(val) { - return val.split(',').map(Number); -} - -program - .version('0.0.1') - .option('-f, --foo', 'enable some foo') - .option('-b, --bar', 'enable some bar') - .option('-B, --baz', 'enable some baz'); - -// must be before .parse() since -// node's emit() is immediate - -program.on('--help', function(){ - console.log(' Examples:'); - console.log(''); - console.log(' $ custom-help --help'); - console.log(' $ custom-help -h'); - console.log(''); -}); - -program.parse(process.argv); - -console.log('stuff'); -``` - -yielding the following help output: - -``` - -Usage: custom-help [options] - -Options: - - -h, --help output usage information - -V, --version output the version number - -f, --foo enable some foo - -b, --bar enable some bar - -B, --baz enable some baz - -Examples: - - $ custom-help --help - $ custom-help -h - -``` - -## .prompt(msg, fn) - - Single-line prompt: - -```js -program.prompt('name: ', function(name){ - console.log('hi %s', name); -}); -``` - - Multi-line prompt: - -```js -program.prompt('description:', function(name){ - console.log('hi %s', name); -}); -``` - - Coercion: - -```js -program.prompt('Age: ', Number, function(age){ - console.log('age: %j', age); -}); -``` - -```js -program.prompt('Birthdate: ', Date, function(date){ - console.log('date: %s', date); -}); -``` - -## .password(msg[, mask], fn) - -Prompt for password without echoing: - -```js -program.password('Password: ', function(pass){ - console.log('got "%s"', pass); - process.stdin.destroy(); -}); -``` - -Prompt for password with mask char "*": - -```js -program.password('Password: ', '*', function(pass){ - console.log('got "%s"', pass); - process.stdin.destroy(); -}); -``` - -## .confirm(msg, fn) - - Confirm with the given `msg`: - -```js -program.confirm('continue? ', function(ok){ - console.log(' got %j', ok); -}); -``` - -## .choose(list, fn) - - Let the user choose from a `list`: - -```js -var list = ['tobi', 'loki', 'jane', 'manny', 'luna']; - -console.log('Choose the coolest pet:'); -program.choose(list, function(i){ - console.log('you chose %d "%s"', i, list[i]); -}); -``` - -## Links - - - [API documentation](http://visionmedia.github.com/commander.js/) - - [ascii tables](https://github.com/LearnBoost/cli-table) - - [progress bars](https://github.com/visionmedia/node-progress) - - [more progress bars](https://github.com/substack/node-multimeter) - - [examples](https://github.com/visionmedia/commander.js/tree/master/examples) - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> - -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/index.js deleted file mode 100644 index 06ec1e4b..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/index.js +++ /dev/null @@ -1,2 +0,0 @@ - -module.exports = require('./lib/commander'); \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/lib/commander.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/lib/commander.js deleted file mode 100644 index 5ba87ebb..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/lib/commander.js +++ /dev/null @@ -1,1026 +0,0 @@ - -/*! - * commander - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , path = require('path') - , tty = require('tty') - , basename = path.basename; - -/** - * Expose the root command. - */ - -exports = module.exports = new Command; - -/** - * Expose `Command`. - */ - -exports.Command = Command; - -/** - * Expose `Option`. - */ - -exports.Option = Option; - -/** - * Initialize a new `Option` with the given `flags` and `description`. - * - * @param {String} flags - * @param {String} description - * @api public - */ - -function Option(flags, description) { - this.flags = flags; - this.required = ~flags.indexOf('<'); - this.optional = ~flags.indexOf('['); - this.bool = !~flags.indexOf('-no-'); - flags = flags.split(/[ ,|]+/); - if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift(); - this.long = flags.shift(); - this.description = description; -} - -/** - * Return option name. - * - * @return {String} - * @api private - */ - -Option.prototype.name = function(){ - return this.long - .replace('--', '') - .replace('no-', ''); -}; - -/** - * Check if `arg` matches the short or long flag. - * - * @param {String} arg - * @return {Boolean} - * @api private - */ - -Option.prototype.is = function(arg){ - return arg == this.short - || arg == this.long; -}; - -/** - * Initialize a new `Command`. - * - * @param {String} name - * @api public - */ - -function Command(name) { - this.commands = []; - this.options = []; - this.args = []; - this.name = name; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Command.prototype.__proto__ = EventEmitter.prototype; - -/** - * Add command `name`. - * - * The `.action()` callback is invoked when the - * command `name` is specified via __ARGV__, - * and the remaining arguments are applied to the - * function for access. - * - * When the `name` is "*" an un-matched command - * will be passed as the first arg, followed by - * the rest of __ARGV__ remaining. - * - * Examples: - * - * program - * .version('0.0.1') - * .option('-C, --chdir ', 'change the working directory') - * .option('-c, --config ', 'set config path. defaults to ./deploy.conf') - * .option('-T, --no-tests', 'ignore test hook') - * - * program - * .command('setup') - * .description('run remote setup commands') - * .action(function(){ - * console.log('setup'); - * }); - * - * program - * .command('exec ') - * .description('run the given remote command') - * .action(function(cmd){ - * console.log('exec "%s"', cmd); - * }); - * - * program - * .command('*') - * .description('deploy the given env') - * .action(function(env){ - * console.log('deploying "%s"', env); - * }); - * - * program.parse(process.argv); - * - * @param {String} name - * @return {Command} the new command - * @api public - */ - -Command.prototype.command = function(name){ - var args = name.split(/ +/); - var cmd = new Command(args.shift()); - this.commands.push(cmd); - cmd.parseExpectedArgs(args); - cmd.parent = this; - return cmd; -}; - -/** - * Parse expected `args`. - * - * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. - * - * @param {Array} args - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parseExpectedArgs = function(args){ - if (!args.length) return; - var self = this; - args.forEach(function(arg){ - switch (arg[0]) { - case '<': - self.args.push({ required: true, name: arg.slice(1, -1) }); - break; - case '[': - self.args.push({ required: false, name: arg.slice(1, -1) }); - break; - } - }); - return this; -}; - -/** - * Register callback `fn` for the command. - * - * Examples: - * - * program - * .command('help') - * .description('display verbose help') - * .action(function(){ - * // output help here - * }); - * - * @param {Function} fn - * @return {Command} for chaining - * @api public - */ - -Command.prototype.action = function(fn){ - var self = this; - this.parent.on(this.name, function(args, unknown){ - // Parse any so-far unknown options - unknown = unknown || []; - var parsed = self.parseOptions(unknown); - - // Output help if necessary - outputHelpIfNecessary(self, parsed.unknown); - - // If there are still any unknown options, then we simply - // die, unless someone asked for help, in which case we give it - // to them, and then we die. - if (parsed.unknown.length > 0) { - self.unknownOption(parsed.unknown[0]); - } - - self.args.forEach(function(arg, i){ - if (arg.required && null == args[i]) { - self.missingArgument(arg.name); - } - }); - - // Always append ourselves to the end of the arguments, - // to make sure we match the number of arguments the user - // expects - if (self.args.length) { - args[self.args.length] = self; - } else { - args.push(self); - } - - fn.apply(this, args); - }); - return this; -}; - -/** - * Define option with `flags`, `description` and optional - * coercion `fn`. - * - * The `flags` string should contain both the short and long flags, - * separated by comma, a pipe or space. The following are all valid - * all will output this way when `--help` is used. - * - * "-p, --pepper" - * "-p|--pepper" - * "-p --pepper" - * - * Examples: - * - * // simple boolean defaulting to false - * program.option('-p, --pepper', 'add pepper'); - * - * --pepper - * program.pepper - * // => Boolean - * - * // simple boolean defaulting to false - * program.option('-C, --no-cheese', 'remove cheese'); - * - * program.cheese - * // => true - * - * --no-cheese - * program.cheese - * // => true - * - * // required argument - * program.option('-C, --chdir ', 'change the working directory'); - * - * --chdir /tmp - * program.chdir - * // => "/tmp" - * - * // optional argument - * program.option('-c, --cheese [type]', 'add cheese [marble]'); - * - * @param {String} flags - * @param {String} description - * @param {Function|Mixed} fn or default - * @param {Mixed} defaultValue - * @return {Command} for chaining - * @api public - */ - -Command.prototype.option = function(flags, description, fn, defaultValue){ - var self = this - , option = new Option(flags, description) - , oname = option.name() - , name = camelcase(oname); - - // default as 3rd arg - if ('function' != typeof fn) defaultValue = fn, fn = null; - - // preassign default value only for --no-*, [optional], or - if (false == option.bool || option.optional || option.required) { - // when --no-* we make sure default is true - if (false == option.bool) defaultValue = true; - // preassign only if we have a default - if (undefined !== defaultValue) self[name] = defaultValue; - } - - // register the option - this.options.push(option); - - // when it's passed assign the value - // and conditionally invoke the callback - this.on(oname, function(val){ - // coercion - if (null != val && fn) val = fn(val); - - // unassigned or bool - if ('boolean' == typeof self[name] || 'undefined' == typeof self[name]) { - // if no value, bool true, and we have a default, then use it! - if (null == val) { - self[name] = option.bool - ? defaultValue || true - : false; - } else { - self[name] = val; - } - } else if (null !== val) { - // reassign - self[name] = val; - } - }); - - return this; -}; - -/** - * Parse `argv`, settings options and invoking commands when defined. - * - * @param {Array} argv - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parse = function(argv){ - // store raw args - this.rawArgs = argv; - - // guess name - if (!this.name) this.name = basename(argv[1]); - - // process argv - var parsed = this.parseOptions(this.normalize(argv.slice(2))); - this.args = parsed.args; - return this.parseArgs(this.args, parsed.unknown); -}; - -/** - * Normalize `args`, splitting joined short flags. For example - * the arg "-abc" is equivalent to "-a -b -c". - * - * @param {Array} args - * @return {Array} - * @api private - */ - -Command.prototype.normalize = function(args){ - var ret = [] - , arg; - - for (var i = 0, len = args.length; i < len; ++i) { - arg = args[i]; - if (arg.length > 1 && '-' == arg[0] && '-' != arg[1]) { - arg.slice(1).split('').forEach(function(c){ - ret.push('-' + c); - }); - } else { - ret.push(arg); - } - } - - return ret; -}; - -/** - * Parse command `args`. - * - * When listener(s) are available those - * callbacks are invoked, otherwise the "*" - * event is emitted and those actions are invoked. - * - * @param {Array} args - * @return {Command} for chaining - * @api private - */ - -Command.prototype.parseArgs = function(args, unknown){ - var cmds = this.commands - , len = cmds.length - , name; - - if (args.length) { - name = args[0]; - if (this.listeners(name).length) { - this.emit(args.shift(), args, unknown); - } else { - this.emit('*', args); - } - } else { - outputHelpIfNecessary(this, unknown); - - // If there were no args and we have unknown options, - // then they are extraneous and we need to error. - if (unknown.length > 0) { - this.unknownOption(unknown[0]); - } - } - - return this; -}; - -/** - * Return an option matching `arg` if any. - * - * @param {String} arg - * @return {Option} - * @api private - */ - -Command.prototype.optionFor = function(arg){ - for (var i = 0, len = this.options.length; i < len; ++i) { - if (this.options[i].is(arg)) { - return this.options[i]; - } - } -}; - -/** - * Parse options from `argv` returning `argv` - * void of these options. - * - * @param {Array} argv - * @return {Array} - * @api public - */ - -Command.prototype.parseOptions = function(argv){ - var args = [] - , len = argv.length - , literal - , option - , arg; - - var unknownOptions = []; - - // parse options - for (var i = 0; i < len; ++i) { - arg = argv[i]; - - // literal args after -- - if ('--' == arg) { - literal = true; - continue; - } - - if (literal) { - args.push(arg); - continue; - } - - // find matching Option - option = this.optionFor(arg); - - // option is defined - if (option) { - // requires arg - if (option.required) { - arg = argv[++i]; - if (null == arg) return this.optionMissingArgument(option); - if ('-' == arg[0]) return this.optionMissingArgument(option, arg); - this.emit(option.name(), arg); - // optional arg - } else if (option.optional) { - arg = argv[i+1]; - if (null == arg || '-' == arg[0]) { - arg = null; - } else { - ++i; - } - this.emit(option.name(), arg); - // bool - } else { - this.emit(option.name()); - } - continue; - } - - // looks like an option - if (arg.length > 1 && '-' == arg[0]) { - unknownOptions.push(arg); - - // If the next argument looks like it might be - // an argument for this option, we pass it on. - // If it isn't, then it'll simply be ignored - if (argv[i+1] && '-' != argv[i+1][0]) { - unknownOptions.push(argv[++i]); - } - continue; - } - - // arg - args.push(arg); - } - - return { args: args, unknown: unknownOptions }; -}; - -/** - * Argument `name` is missing. - * - * @param {String} name - * @api private - */ - -Command.prototype.missingArgument = function(name){ - console.error(); - console.error(" error: missing required argument `%s'", name); - console.error(); - process.exit(1); -}; - -/** - * `Option` is missing an argument, but received `flag` or nothing. - * - * @param {String} option - * @param {String} flag - * @api private - */ - -Command.prototype.optionMissingArgument = function(option, flag){ - console.error(); - if (flag) { - console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag); - } else { - console.error(" error: option `%s' argument missing", option.flags); - } - console.error(); - process.exit(1); -}; - -/** - * Unknown option `flag`. - * - * @param {String} flag - * @api private - */ - -Command.prototype.unknownOption = function(flag){ - console.error(); - console.error(" error: unknown option `%s'", flag); - console.error(); - process.exit(1); -}; - -/** - * Set the program version to `str`. - * - * This method auto-registers the "-V, --version" flag - * which will print the version number when passed. - * - * @param {String} str - * @param {String} flags - * @return {Command} for chaining - * @api public - */ - -Command.prototype.version = function(str, flags){ - if (0 == arguments.length) return this._version; - this._version = str; - flags = flags || '-V, --version'; - this.option(flags, 'output the version number'); - this.on('version', function(){ - console.log(str); - process.exit(0); - }); - return this; -}; - -/** - * Set the description `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.description = function(str){ - if (0 == arguments.length) return this._description; - this._description = str; - return this; -}; - -/** - * Set / get the command usage `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.usage = function(str){ - var args = this.args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }); - - var usage = '[options' - + (this.commands.length ? '] [command' : '') - + ']' - + (this.args.length ? ' ' + args : ''); - if (0 == arguments.length) return this._usage || usage; - this._usage = str; - - return this; -}; - -/** - * Return the largest option length. - * - * @return {Number} - * @api private - */ - -Command.prototype.largestOptionLength = function(){ - return this.options.reduce(function(max, option){ - return Math.max(max, option.flags.length); - }, 0); -}; - -/** - * Return help for options. - * - * @return {String} - * @api private - */ - -Command.prototype.optionHelp = function(){ - var width = this.largestOptionLength(); - - // Prepend the help information - return [pad('-h, --help', width) + ' ' + 'output usage information'] - .concat(this.options.map(function(option){ - return pad(option.flags, width) - + ' ' + option.description; - })) - .join('\n'); -}; - -/** - * Return command help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.commandHelp = function(){ - if (!this.commands.length) return ''; - return [ - '' - , ' Commands:' - , '' - , this.commands.map(function(cmd){ - var args = cmd.args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }).join(' '); - - return cmd.name - + (cmd.options.length - ? ' [options]' - : '') + ' ' + args - + (cmd.description() - ? '\n' + cmd.description() - : ''); - }).join('\n\n').replace(/^/gm, ' ') - , '' - ].join('\n'); -}; - -/** - * Return program help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.helpInformation = function(){ - return [ - '' - , ' Usage: ' + this.name + ' ' + this.usage() - , '' + this.commandHelp() - , ' Options:' - , '' - , '' + this.optionHelp().replace(/^/gm, ' ') - , '' - , '' - ].join('\n'); -}; - -/** - * Prompt for a `Number`. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptForNumber = function(str, fn){ - var self = this; - this.promptSingleLine(str, function parseNumber(val){ - val = Number(val); - if (isNaN(val)) return self.promptSingleLine(str + '(must be a number) ', parseNumber); - fn(val); - }); -}; - -/** - * Prompt for a `Date`. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptForDate = function(str, fn){ - var self = this; - this.promptSingleLine(str, function parseDate(val){ - val = new Date(val); - if (isNaN(val.getTime())) return self.promptSingleLine(str + '(must be a date) ', parseDate); - fn(val); - }); -}; - -/** - * Single-line prompt. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptSingleLine = function(str, fn){ - if ('function' == typeof arguments[2]) { - return this['promptFor' + (fn.name || fn)](str, arguments[2]); - } - - process.stdout.write(str); - process.stdin.setEncoding('utf8'); - process.stdin.once('data', function(val){ - fn(val.trim()); - }).resume(); -}; - -/** - * Multi-line prompt. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptMultiLine = function(str, fn){ - var buf = []; - console.log(str); - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function(val){ - if ('\n' == val || '\r\n' == val) { - process.stdin.removeAllListeners('data'); - fn(buf.join('\n')); - } else { - buf.push(val.trimRight()); - } - }).resume(); -}; - -/** - * Prompt `str` and callback `fn(val)` - * - * Commander supports single-line and multi-line prompts. - * To issue a single-line prompt simply add white-space - * to the end of `str`, something like "name: ", whereas - * for a multi-line prompt omit this "description:". - * - * - * Examples: - * - * program.prompt('Username: ', function(name){ - * console.log('hi %s', name); - * }); - * - * program.prompt('Description:', function(desc){ - * console.log('description was "%s"', desc.trim()); - * }); - * - * @param {String|Object} str - * @param {Function} fn - * @api public - */ - -Command.prototype.prompt = function(str, fn){ - var self = this; - - if ('string' == typeof str) { - if (/ $/.test(str)) return this.promptSingleLine.apply(this, arguments); - this.promptMultiLine(str, fn); - } else { - var keys = Object.keys(str) - , obj = {}; - - function next() { - var key = keys.shift() - , label = str[key]; - - if (!key) return fn(obj); - self.prompt(label, function(val){ - obj[key] = val; - next(); - }); - } - - next(); - } -}; - -/** - * Prompt for password with `str`, `mask` char and callback `fn(val)`. - * - * The mask string defaults to '', aka no output is - * written while typing, you may want to use "*" etc. - * - * Examples: - * - * program.password('Password: ', function(pass){ - * console.log('got "%s"', pass); - * process.stdin.destroy(); - * }); - * - * program.password('Password: ', '*', function(pass){ - * console.log('got "%s"', pass); - * process.stdin.destroy(); - * }); - * - * @param {String} str - * @param {String} mask - * @param {Function} fn - * @api public - */ - -Command.prototype.password = function(str, mask, fn){ - var self = this - , buf = ''; - - // default mask - if ('function' == typeof mask) { - fn = mask; - mask = ''; - } - - process.stdin.resume(); - tty.setRawMode(true); - process.stdout.write(str); - - // keypress - process.stdin.on('keypress', function(c, key){ - if (key && 'enter' == key.name) { - console.log(); - process.stdin.removeAllListeners('keypress'); - tty.setRawMode(false); - if (!buf.trim().length) return self.password(str, mask, fn); - fn(buf); - return; - } - - if (key && key.ctrl && 'c' == key.name) { - console.log('%s', buf); - process.exit(); - } - - process.stdout.write(mask); - buf += c; - }).resume(); -}; - -/** - * Confirmation prompt with `str` and callback `fn(bool)` - * - * Examples: - * - * program.confirm('continue? ', function(ok){ - * console.log(' got %j', ok); - * process.stdin.destroy(); - * }); - * - * @param {String} str - * @param {Function} fn - * @api public - */ - - -Command.prototype.confirm = function(str, fn, verbose){ - var self = this; - this.prompt(str, function(ok){ - if (!ok.trim()) { - if (!verbose) str += '(yes or no) '; - return self.confirm(str, fn, true); - } - fn(parseBool(ok)); - }); -}; - -/** - * Choice prompt with `list` of items and callback `fn(index, item)` - * - * Examples: - * - * var list = ['tobi', 'loki', 'jane', 'manny', 'luna']; - * - * console.log('Choose the coolest pet:'); - * program.choose(list, function(i){ - * console.log('you chose %d "%s"', i, list[i]); - * process.stdin.destroy(); - * }); - * - * @param {Array} list - * @param {Number|Function} index or fn - * @param {Function} fn - * @api public - */ - -Command.prototype.choose = function(list, index, fn){ - var self = this - , hasDefault = 'number' == typeof index; - - if (!hasDefault) { - fn = index; - index = null; - } - - list.forEach(function(item, i){ - if (hasDefault && i == index) { - console.log('* %d) %s', i + 1, item); - } else { - console.log(' %d) %s', i + 1, item); - } - }); - - function again() { - self.prompt(' : ', function(val){ - val = parseInt(val, 10) - 1; - if (hasDefault && isNaN(val)) val = index; - - if (null == list[val]) { - again(); - } else { - fn(val, list[val]); - } - }); - } - - again(); -}; - -/** - * Camel-case the given `flag` - * - * @param {String} flag - * @return {String} - * @api private - */ - -function camelcase(flag) { - return flag.split('-').reduce(function(str, word){ - return str + word[0].toUpperCase() + word.slice(1); - }); -} - -/** - * Parse a boolean `str`. - * - * @param {String} str - * @return {Boolean} - * @api private - */ - -function parseBool(str) { - return /^y|yes|ok|true$/i.test(str); -} - -/** - * Pad `str` to `width`. - * - * @param {String} str - * @param {Number} width - * @return {String} - * @api private - */ - -function pad(str, width) { - var len = Math.max(0, width - str.length); - return str + Array(len + 1).join(' '); -} - -/** - * Output help information if necessary - * - * @param {Command} command to output help for - * @param {Array} array of options to search for -h or --help - * @api private - */ - -function outputHelpIfNecessary(cmd, options) { - options = options || []; - for (var i = 0; i < options.length; i++) { - if (options[i] == '--help' || options[i] == '-h') { - process.stdout.write(cmd.helpInformation()); - cmd.emit('--help'); - process.exit(0); - } - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/package.json deleted file mode 100644 index 92f2ed79..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/commander/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "commander", - "version": "0.6.1", - "description": "the complete solution for node.js command-line programs", - "keywords": [ - "command", - "option", - "parser", - "prompt", - "stdin" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "repository": { - "type": "git", - "url": "https://github.com/visionmedia/commander.js.git" - }, - "dependencies": {}, - "devDependencies": { - "should": ">= 0.0.1" - }, - "scripts": { - "test": "make test" - }, - "main": "index", - "engines": { - "node": ">= 0.4.x" - }, - "readme": "# Commander.js\n\n The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander).\n\n [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js)\n\n## Installation\n\n $ npm install commander\n\n## Option parsing\n\n Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('commander');\n\nprogram\n .version('0.0.1')\n .option('-p, --peppers', 'Add peppers')\n .option('-P, --pineapple', 'Add pineapple')\n .option('-b, --bbq', 'Add bbq sauce')\n .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')\n .parse(process.argv);\n\nconsole.log('you ordered a pizza with:');\nif (program.peppers) console.log(' - peppers');\nif (program.pineapple) console.log(' - pineappe');\nif (program.bbq) console.log(' - bbq');\nconsole.log(' - %s cheese', program.cheese);\n```\n\n Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as \"--template-engine\" are camel-cased, becoming `program.templateEngine` etc.\n\n## Automated --help\n\n The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:\n\n``` \n $ ./examples/pizza --help\n\n Usage: pizza [options]\n\n Options:\n\n -V, --version output the version number\n -p, --peppers Add peppers\n -P, --pineapple Add pineappe\n -b, --bbq Add bbq sauce\n -c, --cheese Add the specified type of cheese [marble]\n -h, --help output usage information\n\n```\n\n## Coercion\n\n```js\nfunction range(val) {\n return val.split('..').map(Number);\n}\n\nfunction list(val) {\n return val.split(',');\n}\n\nprogram\n .version('0.0.1')\n .usage('[options] ')\n .option('-i, --integer ', 'An integer argument', parseInt)\n .option('-f, --float ', 'A float argument', parseFloat)\n .option('-r, --range ..', 'A range', range)\n .option('-l, --list ', 'A list', list)\n .option('-o, --optional [value]', 'An optional value')\n .parse(process.argv);\n\nconsole.log(' int: %j', program.integer);\nconsole.log(' float: %j', program.float);\nconsole.log(' optional: %j', program.optional);\nprogram.range = program.range || [];\nconsole.log(' range: %j..%j', program.range[0], program.range[1]);\nconsole.log(' list: %j', program.list);\nconsole.log(' args: %j', program.args);\n```\n\n## Custom help\n\n You can display arbitrary `-h, --help` information\n by listening for \"--help\". Commander will automatically\n exit once you are done so that the remainder of your program\n does not execute causing undesired behaviours, for example\n in the following executable \"stuff\" will not output when\n `--help` is used.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('../');\n\nfunction list(val) {\n return val.split(',').map(Number);\n}\n\nprogram\n .version('0.0.1')\n .option('-f, --foo', 'enable some foo')\n .option('-b, --bar', 'enable some bar')\n .option('-B, --baz', 'enable some baz');\n\n// must be before .parse() since\n// node's emit() is immediate\n\nprogram.on('--help', function(){\n console.log(' Examples:');\n console.log('');\n console.log(' $ custom-help --help');\n console.log(' $ custom-help -h');\n console.log('');\n});\n\nprogram.parse(process.argv);\n\nconsole.log('stuff');\n```\n\nyielding the following help output:\n\n```\n\nUsage: custom-help [options]\n\nOptions:\n\n -h, --help output usage information\n -V, --version output the version number\n -f, --foo enable some foo\n -b, --bar enable some bar\n -B, --baz enable some baz\n\nExamples:\n\n $ custom-help --help\n $ custom-help -h\n\n```\n\n## .prompt(msg, fn)\n\n Single-line prompt:\n\n```js\nprogram.prompt('name: ', function(name){\n console.log('hi %s', name);\n});\n```\n\n Multi-line prompt:\n\n```js\nprogram.prompt('description:', function(name){\n console.log('hi %s', name);\n});\n```\n\n Coercion:\n\n```js\nprogram.prompt('Age: ', Number, function(age){\n console.log('age: %j', age);\n});\n```\n\n```js\nprogram.prompt('Birthdate: ', Date, function(date){\n console.log('date: %s', date);\n});\n```\n\n## .password(msg[, mask], fn)\n\nPrompt for password without echoing:\n\n```js\nprogram.password('Password: ', function(pass){\n console.log('got \"%s\"', pass);\n process.stdin.destroy();\n});\n```\n\nPrompt for password with mask char \"*\":\n\n```js\nprogram.password('Password: ', '*', function(pass){\n console.log('got \"%s\"', pass);\n process.stdin.destroy();\n});\n```\n\n## .confirm(msg, fn)\n\n Confirm with the given `msg`:\n\n```js\nprogram.confirm('continue? ', function(ok){\n console.log(' got %j', ok);\n});\n```\n\n## .choose(list, fn)\n\n Let the user choose from a `list`:\n\n```js\nvar list = ['tobi', 'loki', 'jane', 'manny', 'luna'];\n\nconsole.log('Choose the coolest pet:');\nprogram.choose(list, function(i){\n console.log('you chose %d \"%s\"', i, list[i]);\n});\n```\n\n## Links\n\n - [API documentation](http://visionmedia.github.com/commander.js/)\n - [ascii tables](https://github.com/LearnBoost/cli-table)\n - [progress bars](https://github.com/visionmedia/node-progress)\n - [more progress bars](https://github.com/substack/node-multimeter)\n - [examples](https://github.com/visionmedia/commander.js/tree/master/examples)\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/commander.js/issues" - }, - "homepage": "https://github.com/visionmedia/commander.js", - "_id": "commander@0.6.1", - "_from": "commander@0.6.1" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/Readme.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/Readme.md deleted file mode 100644 index c5a34e8b..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/Readme.md +++ /dev/null @@ -1,115 +0,0 @@ -# debug - - tiny node.js debugging utility modelled after node core's debugging technique. - -## Installation - -``` -$ npm install debug -``` - -## Usage - - With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility. - -Example _app.js_: - -```js -var debug = require('debug')('http') - , http = require('http') - , name = 'My App'; - -// fake app - -debug('booting %s', name); - -http.createServer(function(req, res){ - debug(req.method + ' ' + req.url); - res.end('hello\n'); -}).listen(3000, function(){ - debug('listening'); -}); - -// fake worker of some kind - -require('./worker'); -``` - -Example _worker.js_: - -```js -var debug = require('debug')('worker'); - -setInterval(function(){ - debug('doing some work'); -}, 1000); -``` - - The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples: - - ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png) - - ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png) - -## Millisecond diff - - When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. - - ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) - - When stderr is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below: - _(NOTE: Debug now uses stderr instead of stdout, so the correct shell command for this example is actually `DEBUG=* node example/worker 2> out &`)_ - - ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) - -## Conventions - - If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". - -## Wildcards - - The "*" character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect.compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. - - You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=* -connect:*` would include all debuggers except those starting with "connect:". - -## Browser support - - Debug works in the browser as well, currently persisted by `localStorage`. For example if you have `worker:a` and `worker:b` as shown below, and wish to debug both type `debug.enable('worker:*')` in the console and refresh the page, this will remain until you disable with `debug.disable()`. - -```js -a = debug('worker:a'); -b = debug('worker:b'); - -setInterval(function(){ - a('doing some work'); -}, 1000); - -setInterval(function(){ - a('doing some work'); -}, 1200); -``` - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> - -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/debug.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/debug.js deleted file mode 100644 index 509dc0de..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/debug.js +++ /dev/null @@ -1,137 +0,0 @@ - -/** - * Expose `debug()` as the module. - */ - -module.exports = debug; - -/** - * Create a debugger with the given `name`. - * - * @param {String} name - * @return {Type} - * @api public - */ - -function debug(name) { - if (!debug.enabled(name)) return function(){}; - - return function(fmt){ - fmt = coerce(fmt); - - var curr = new Date; - var ms = curr - (debug[name] || curr); - debug[name] = curr; - - fmt = name - + ' ' - + fmt - + ' +' + debug.humanize(ms); - - // This hackery is required for IE8 - // where `console.log` doesn't have 'apply' - window.console - && console.log - && Function.prototype.apply.call(console.log, console, arguments); - } -} - -/** - * The currently active debug mode names. - */ - -debug.names = []; -debug.skips = []; - -/** - * Enables a debug mode by name. This can include modes - * separated by a colon and wildcards. - * - * @param {String} name - * @api public - */ - -debug.enable = function(name) { - try { - localStorage.debug = name; - } catch(e){} - - var split = (name || '').split(/[\s,]+/) - , len = split.length; - - for (var i = 0; i < len; i++) { - name = split[i].replace('*', '.*?'); - if (name[0] === '-') { - debug.skips.push(new RegExp('^' + name.substr(1) + '$')); - } - else { - debug.names.push(new RegExp('^' + name + '$')); - } - } -}; - -/** - * Disable debug output. - * - * @api public - */ - -debug.disable = function(){ - debug.enable(''); -}; - -/** - * Humanize the given `ms`. - * - * @param {Number} m - * @return {String} - * @api private - */ - -debug.humanize = function(ms) { - var sec = 1000 - , min = 60 * 1000 - , hour = 60 * min; - - if (ms >= hour) return (ms / hour).toFixed(1) + 'h'; - if (ms >= min) return (ms / min).toFixed(1) + 'm'; - if (ms >= sec) return (ms / sec | 0) + 's'; - return ms + 'ms'; -}; - -/** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - -debug.enabled = function(name) { - for (var i = 0, len = debug.skips.length; i < len; i++) { - if (debug.skips[i].test(name)) { - return false; - } - } - for (var i = 0, len = debug.names.length; i < len; i++) { - if (debug.names[i].test(name)) { - return true; - } - } - return false; -}; - -/** - * Coerce `val`. - */ - -function coerce(val) { - if (val instanceof Error) return val.stack || val.message; - return val; -} - -// persist - -try { - if (window.localStorage) debug.enable(localStorage.debug); -} catch(e){} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/index.js deleted file mode 100644 index e02c13b7..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/index.js +++ /dev/null @@ -1,5 +0,0 @@ -if ('undefined' == typeof window) { - module.exports = require('./lib/debug'); -} else { - module.exports = require('./debug'); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/lib/debug.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/lib/debug.js deleted file mode 100644 index 3b0a9183..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/lib/debug.js +++ /dev/null @@ -1,147 +0,0 @@ -/** - * Module dependencies. - */ - -var tty = require('tty'); - -/** - * Expose `debug()` as the module. - */ - -module.exports = debug; - -/** - * Enabled debuggers. - */ - -var names = [] - , skips = []; - -(process.env.DEBUG || '') - .split(/[\s,]+/) - .forEach(function(name){ - name = name.replace('*', '.*?'); - if (name[0] === '-') { - skips.push(new RegExp('^' + name.substr(1) + '$')); - } else { - names.push(new RegExp('^' + name + '$')); - } - }); - -/** - * Colors. - */ - -var colors = [6, 2, 3, 4, 5, 1]; - -/** - * Previous debug() call. - */ - -var prev = {}; - -/** - * Previously assigned color. - */ - -var prevColor = 0; - -/** - * Is stdout a TTY? Colored output is disabled when `true`. - */ - -var isatty = tty.isatty(2); - -/** - * Select a color. - * - * @return {Number} - * @api private - */ - -function color() { - return colors[prevColor++ % colors.length]; -} - -/** - * Humanize the given `ms`. - * - * @param {Number} m - * @return {String} - * @api private - */ - -function humanize(ms) { - var sec = 1000 - , min = 60 * 1000 - , hour = 60 * min; - - if (ms >= hour) return (ms / hour).toFixed(1) + 'h'; - if (ms >= min) return (ms / min).toFixed(1) + 'm'; - if (ms >= sec) return (ms / sec | 0) + 's'; - return ms + 'ms'; -} - -/** - * Create a debugger with the given `name`. - * - * @param {String} name - * @return {Type} - * @api public - */ - -function debug(name) { - function disabled(){} - disabled.enabled = false; - - var match = skips.some(function(re){ - return re.test(name); - }); - - if (match) return disabled; - - match = names.some(function(re){ - return re.test(name); - }); - - if (!match) return disabled; - var c = color(); - - function colored(fmt) { - fmt = coerce(fmt); - - var curr = new Date; - var ms = curr - (prev[name] || curr); - prev[name] = curr; - - fmt = ' \u001b[9' + c + 'm' + name + ' ' - + '\u001b[3' + c + 'm\u001b[90m' - + fmt + '\u001b[3' + c + 'm' - + ' +' + humanize(ms) + '\u001b[0m'; - - console.error.apply(this, arguments); - } - - function plain(fmt) { - fmt = coerce(fmt); - - fmt = new Date().toUTCString() - + ' ' + name + ' ' + fmt; - console.error.apply(this, arguments); - } - - colored.enabled = plain.enabled = true; - - return isatty || process.env.DEBUG_COLORS - ? colored - : plain; -} - -/** - * Coerce `val`. - */ - -function coerce(val) { - if (val instanceof Error) return val.stack || val.message; - return val; -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/package.json deleted file mode 100644 index f44874e1..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/debug/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "debug", - "version": "0.7.4", - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/debug.git" - }, - "description": "small debugging utility", - "keywords": [ - "debug", - "log", - "debugger" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "dependencies": {}, - "devDependencies": { - "mocha": "*" - }, - "main": "lib/debug.js", - "browser": "./debug.js", - "engines": { - "node": "*" - }, - "files": [ - "lib/debug.js", - "debug.js", - "index.js" - ], - "component": { - "scripts": { - "debug/index.js": "index.js", - "debug/debug.js": "debug.js" - } - }, - "readme": "# debug\n\n tiny node.js debugging utility modelled after node core's debugging technique.\n\n## Installation\n\n```\n$ npm install debug\n```\n\n## Usage\n\n With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility.\n \nExample _app.js_:\n\n```js\nvar debug = require('debug')('http')\n , http = require('http')\n , name = 'My App';\n\n// fake app\n\ndebug('booting %s', name);\n\nhttp.createServer(function(req, res){\n debug(req.method + ' ' + req.url);\n res.end('hello\\n');\n}).listen(3000, function(){\n debug('listening');\n});\n\n// fake worker of some kind\n\nrequire('./worker');\n```\n\nExample _worker.js_:\n\n```js\nvar debug = require('debug')('worker');\n\nsetInterval(function(){\n debug('doing some work');\n}, 1000);\n```\n\n The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:\n\n ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png)\n\n ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png)\n\n## Millisecond diff\n\n When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the \"+NNNms\" will show you how much time was spent between calls.\n\n ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png)\n\n When stderr is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:\n _(NOTE: Debug now uses stderr instead of stdout, so the correct shell command for this example is actually `DEBUG=* node example/worker 2> out &`)_\n \n ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png)\n \n## Conventions\n\n If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use \":\" to separate features. For example \"bodyParser\" from Connect would then be \"connect:bodyParser\". \n\n## Wildcards\n\n The \"*\" character may be used as a wildcard. Suppose for example your library has debuggers named \"connect:bodyParser\", \"connect:compress\", \"connect:session\", instead of listing all three with `DEBUG=connect:bodyParser,connect.compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.\n\n You can also exclude specific debuggers by prefixing them with a \"-\" character. For example, `DEBUG=* -connect:*` would include all debuggers except those starting with \"connect:\".\n\n## Browser support\n\n Debug works in the browser as well, currently persisted by `localStorage`. For example if you have `worker:a` and `worker:b` as shown below, and wish to debug both type `debug.enable('worker:*')` in the console and refresh the page, this will remain until you disable with `debug.disable()`. \n\n```js\na = debug('worker:a');\nb = debug('worker:b');\n\nsetInterval(function(){\n a('doing some work');\n}, 1000);\n\nsetInterval(function(){\n a('doing some work');\n}, 1200);\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/debug/issues" - }, - "homepage": "https://github.com/visionmedia/debug", - "_id": "debug@0.7.4", - "_from": "debug@*" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/diff/README.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/diff/README.md deleted file mode 100644 index 95bd8da2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/diff/README.md +++ /dev/null @@ -1,101 +0,0 @@ -# jsdiff - -[![Build Status](https://secure.travis-ci.org/kpdecker/jsdiff.png)](http://travis-ci.org/kpdecker/jsdiff) - -A javascript text differencing implementation. - -Based on the algorithm proposed in -["An O(ND) Difference Algorithm and its Variations" (Myers, 1986)](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927). - -## Installation - - npm install diff - -or - - git clone git://github.com/kpdecker/jsdiff.git - -## API - -* JsDiff.diffChars(oldStr, newStr) - Diffs two blocks of text, comparing character by character. - - Returns a list of change objects (See below). - -* JsDiff.diffWords(oldStr, newStr) - Diffs two blocks of text, comparing word by word. - - Returns a list of change objects (See below). - -* JsDiff.diffLines(oldStr, newStr) - Diffs two blocks of text, comparing line by line. - - Returns a list of change objects (See below). - -* JsDiff.diffCss(oldStr, newStr) - Diffs two blocks of text, comparing CSS tokens. - - Returns a list of change objects (See below). - -* JsDiff.createPatch(fileName, oldStr, newStr, oldHeader, newHeader) - Creates a unified diff patch. - - Parameters: - * fileName : String to be output in the filename sections of the patch - * oldStr : Original string value - * newStr : New string value - * oldHeader : Additional information to include in the old file header - * newHeader : Additional information to include in thew new file header - -* JsDiff.applyPatch(oldStr, diffStr) - Applies a unified diff patch. - - Return a string containing new version of provided data. - -* convertChangesToXML(changes) - Converts a list of changes to a serialized XML format - -### Change Objects -Many of the methods above return change objects. These objects are consist of the following fields: - -* value: Text content -* added: True if the value was inserted into the new string -* removed: True of the value was removed from the old string - -Note that some cases may omit a particular flag field. Comparison on the flag fields should always be done in a truthy or falsy manner. - -## [Example](http://kpdecker.github.com/jsdiff) - -## License - -Software License Agreement (BSD License) - -Copyright (c) 2009-2011, Kevin Decker kpdecker@gmail.com - -All rights reserved. - -Redistribution and use of this software 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 Kevin Decker 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. diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/diff/diff.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/diff/diff.js deleted file mode 100644 index a34c22a0..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/diff/diff.js +++ /dev/null @@ -1,354 +0,0 @@ -/* See LICENSE file for terms of use */ - -/* - * Text diff implementation. - * - * This library supports the following APIS: - * JsDiff.diffChars: Character by character diff - * JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace - * JsDiff.diffLines: Line based diff - * - * JsDiff.diffCss: Diff targeted at CSS content - * - * These methods are based on the implementation proposed in - * "An O(ND) Difference Algorithm and its Variations" (Myers, 1986). - * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927 - */ -var JsDiff = (function() { - /*jshint maxparams: 5*/ - function clonePath(path) { - return { newPos: path.newPos, components: path.components.slice(0) }; - } - function removeEmpty(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - if (array[i]) { - ret.push(array[i]); - } - } - return ret; - } - function escapeHTML(s) { - var n = s; - n = n.replace(/&/g, '&'); - n = n.replace(//g, '>'); - n = n.replace(/"/g, '"'); - - return n; - } - - var Diff = function(ignoreWhitespace) { - this.ignoreWhitespace = ignoreWhitespace; - }; - Diff.prototype = { - diff: function(oldString, newString) { - // Handle the identity case (this is due to unrolling editLength == 0 - if (newString === oldString) { - return [{ value: newString }]; - } - if (!newString) { - return [{ value: oldString, removed: true }]; - } - if (!oldString) { - return [{ value: newString, added: true }]; - } - - newString = this.tokenize(newString); - oldString = this.tokenize(oldString); - - var newLen = newString.length, oldLen = oldString.length; - var maxEditLength = newLen + oldLen; - var bestPath = [{ newPos: -1, components: [] }]; - - // Seed editLength = 0 - var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); - if (bestPath[0].newPos+1 >= newLen && oldPos+1 >= oldLen) { - return bestPath[0].components; - } - - for (var editLength = 1; editLength <= maxEditLength; editLength++) { - for (var diagonalPath = -1*editLength; diagonalPath <= editLength; diagonalPath+=2) { - var basePath; - var addPath = bestPath[diagonalPath-1], - removePath = bestPath[diagonalPath+1]; - oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; - if (addPath) { - // No one else is going to attempt to use this value, clear it - bestPath[diagonalPath-1] = undefined; - } - - var canAdd = addPath && addPath.newPos+1 < newLen; - var canRemove = removePath && 0 <= oldPos && oldPos < oldLen; - if (!canAdd && !canRemove) { - bestPath[diagonalPath] = undefined; - continue; - } - - // Select the diagonal that we want to branch from. We select the prior - // path whose position in the new string is the farthest from the origin - // and does not pass the bounds of the diff graph - if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) { - basePath = clonePath(removePath); - this.pushComponent(basePath.components, oldString[oldPos], undefined, true); - } else { - basePath = clonePath(addPath); - basePath.newPos++; - this.pushComponent(basePath.components, newString[basePath.newPos], true, undefined); - } - - var oldPos = this.extractCommon(basePath, newString, oldString, diagonalPath); - - if (basePath.newPos+1 >= newLen && oldPos+1 >= oldLen) { - return basePath.components; - } else { - bestPath[diagonalPath] = basePath; - } - } - } - }, - - pushComponent: function(components, value, added, removed) { - var last = components[components.length-1]; - if (last && last.added === added && last.removed === removed) { - // We need to clone here as the component clone operation is just - // as shallow array clone - components[components.length-1] = - {value: this.join(last.value, value), added: added, removed: removed }; - } else { - components.push({value: value, added: added, removed: removed }); - } - }, - extractCommon: function(basePath, newString, oldString, diagonalPath) { - var newLen = newString.length, - oldLen = oldString.length, - newPos = basePath.newPos, - oldPos = newPos - diagonalPath; - while (newPos+1 < newLen && oldPos+1 < oldLen && this.equals(newString[newPos+1], oldString[oldPos+1])) { - newPos++; - oldPos++; - - this.pushComponent(basePath.components, newString[newPos], undefined, undefined); - } - basePath.newPos = newPos; - return oldPos; - }, - - equals: function(left, right) { - var reWhitespace = /\S/; - if (this.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right)) { - return true; - } else { - return left === right; - } - }, - join: function(left, right) { - return left + right; - }, - tokenize: function(value) { - return value; - } - }; - - var CharDiff = new Diff(); - - var WordDiff = new Diff(true); - var WordWithSpaceDiff = new Diff(); - WordDiff.tokenize = WordWithSpaceDiff.tokenize = function(value) { - return removeEmpty(value.split(/(\s+|\b)/)); - }; - - var CssDiff = new Diff(true); - CssDiff.tokenize = function(value) { - return removeEmpty(value.split(/([{}:;,]|\s+)/)); - }; - - var LineDiff = new Diff(); - LineDiff.tokenize = function(value) { - return value.split(/^/m); - }; - - return { - Diff: Diff, - - diffChars: function(oldStr, newStr) { return CharDiff.diff(oldStr, newStr); }, - diffWords: function(oldStr, newStr) { return WordDiff.diff(oldStr, newStr); }, - diffWordsWithSpace: function(oldStr, newStr) { return WordWithSpaceDiff.diff(oldStr, newStr); }, - diffLines: function(oldStr, newStr) { return LineDiff.diff(oldStr, newStr); }, - - diffCss: function(oldStr, newStr) { return CssDiff.diff(oldStr, newStr); }, - - createPatch: function(fileName, oldStr, newStr, oldHeader, newHeader) { - var ret = []; - - ret.push('Index: ' + fileName); - ret.push('==================================================================='); - ret.push('--- ' + fileName + (typeof oldHeader === 'undefined' ? '' : '\t' + oldHeader)); - ret.push('+++ ' + fileName + (typeof newHeader === 'undefined' ? '' : '\t' + newHeader)); - - var diff = LineDiff.diff(oldStr, newStr); - if (!diff[diff.length-1].value) { - diff.pop(); // Remove trailing newline add - } - diff.push({value: '', lines: []}); // Append an empty value to make cleanup easier - - function contextLines(lines) { - return lines.map(function(entry) { return ' ' + entry; }); - } - function eofNL(curRange, i, current) { - var last = diff[diff.length-2], - isLast = i === diff.length-2, - isLastOfType = i === diff.length-3 && (current.added !== last.added || current.removed !== last.removed); - - // Figure out if this is the last line for the given file and missing NL - if (!/\n$/.test(current.value) && (isLast || isLastOfType)) { - curRange.push('\\ No newline at end of file'); - } - } - - var oldRangeStart = 0, newRangeStart = 0, curRange = [], - oldLine = 1, newLine = 1; - for (var i = 0; i < diff.length; i++) { - var current = diff[i], - lines = current.lines || current.value.replace(/\n$/, '').split('\n'); - current.lines = lines; - - if (current.added || current.removed) { - if (!oldRangeStart) { - var prev = diff[i-1]; - oldRangeStart = oldLine; - newRangeStart = newLine; - - if (prev) { - curRange = contextLines(prev.lines.slice(-4)); - oldRangeStart -= curRange.length; - newRangeStart -= curRange.length; - } - } - curRange.push.apply(curRange, lines.map(function(entry) { return (current.added?'+':'-') + entry; })); - eofNL(curRange, i, current); - - if (current.added) { - newLine += lines.length; - } else { - oldLine += lines.length; - } - } else { - if (oldRangeStart) { - // Close out any changes that have been output (or join overlapping) - if (lines.length <= 8 && i < diff.length-2) { - // Overlapping - curRange.push.apply(curRange, contextLines(lines)); - } else { - // end the range and output - var contextSize = Math.min(lines.length, 4); - ret.push( - '@@ -' + oldRangeStart + ',' + (oldLine-oldRangeStart+contextSize) - + ' +' + newRangeStart + ',' + (newLine-newRangeStart+contextSize) - + ' @@'); - ret.push.apply(ret, curRange); - ret.push.apply(ret, contextLines(lines.slice(0, contextSize))); - if (lines.length <= 4) { - eofNL(ret, i, current); - } - - oldRangeStart = 0; newRangeStart = 0; curRange = []; - } - } - oldLine += lines.length; - newLine += lines.length; - } - } - - return ret.join('\n') + '\n'; - }, - - applyPatch: function(oldStr, uniDiff) { - var diffstr = uniDiff.split('\n'); - var diff = []; - var remEOFNL = false, - addEOFNL = false; - - for (var i = (diffstr[0][0]==='I'?4:0); i < diffstr.length; i++) { - if(diffstr[i][0] === '@') { - var meh = diffstr[i].split(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/); - diff.unshift({ - start:meh[3], - oldlength:meh[2], - oldlines:[], - newlength:meh[4], - newlines:[] - }); - } else if(diffstr[i][0] === '+') { - diff[0].newlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === '-') { - diff[0].oldlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === ' ') { - diff[0].newlines.push(diffstr[i].substr(1)); - diff[0].oldlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === '\\') { - if (diffstr[i-1][0] === '+') { - remEOFNL = true; - } else if(diffstr[i-1][0] === '-') { - addEOFNL = true; - } - } - } - - var str = oldStr.split('\n'); - for (var i = diff.length - 1; i >= 0; i--) { - var d = diff[i]; - for (var j = 0; j < d.oldlength; j++) { - if(str[d.start-1+j] !== d.oldlines[j]) { - return false; - } - } - Array.prototype.splice.apply(str,[d.start-1,+d.oldlength].concat(d.newlines)); - } - - if (remEOFNL) { - while (!str[str.length-1]) { - str.pop(); - } - } else if (addEOFNL) { - str.push(''); - } - return str.join('\n'); - }, - - convertChangesToXML: function(changes){ - var ret = []; - for ( var i = 0; i < changes.length; i++) { - var change = changes[i]; - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - - ret.push(escapeHTML(change.value)); - - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - } - return ret.join(''); - }, - - // See: http://code.google.com/p/google-diff-match-patch/wiki/API - convertChangesToDMP: function(changes){ - var ret = [], change; - for ( var i = 0; i < changes.length; i++) { - change = changes[i]; - ret.push([(change.added ? 1 : change.removed ? -1 : 0), change.value]); - } - return ret; - } - }; -})(); - -if (typeof module !== 'undefined') { - module.exports = JsDiff; -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/diff/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/diff/package.json deleted file mode 100644 index 867fd0ce..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/diff/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "diff", - "version": "1.0.7", - "description": "A javascript text diff implementation.", - "keywords": [ - "diff", - "javascript" - ], - "maintainers": [ - { - "name": "Kevin Decker", - "email": "kpdecker@gmail.com", - "url": "http://incaseofstairs.com" - } - ], - "bugs": { - "url": "http://github.com/kpdecker/jsdiff/issues", - "email": "kpdecker@gmail.com" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/kpdecker/jsdiff/blob/master/LICENSE" - } - ], - "repository": { - "type": "git", - "url": "git://github.com/kpdecker/jsdiff.git" - }, - "engines": { - "node": ">=0.3.1" - }, - "main": "./diff", - "scripts": { - "test": "mocha test/*.js" - }, - "dependencies": {}, - "devDependencies": { - "mocha": "~1.6", - "should": "~1.2" - }, - "optionalDependencies": {}, - "files": [ - "diff.js" - ], - "readme": "# jsdiff\n\n[![Build Status](https://secure.travis-ci.org/kpdecker/jsdiff.png)](http://travis-ci.org/kpdecker/jsdiff)\n\nA javascript text differencing implementation.\n\nBased on the algorithm proposed in\n[\"An O(ND) Difference Algorithm and its Variations\" (Myers, 1986)](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927).\n\n## Installation\n\n npm install diff\n\nor\n\n git clone git://github.com/kpdecker/jsdiff.git\n\n## API\n\n* JsDiff.diffChars(oldStr, newStr)\n Diffs two blocks of text, comparing character by character.\n\n Returns a list of change objects (See below).\n\n* JsDiff.diffWords(oldStr, newStr)\n Diffs two blocks of text, comparing word by word.\n\n Returns a list of change objects (See below).\n\n* JsDiff.diffLines(oldStr, newStr)\n Diffs two blocks of text, comparing line by line.\n\n Returns a list of change objects (See below).\n\n* JsDiff.diffCss(oldStr, newStr)\n Diffs two blocks of text, comparing CSS tokens.\n\n Returns a list of change objects (See below).\n\n* JsDiff.createPatch(fileName, oldStr, newStr, oldHeader, newHeader)\n Creates a unified diff patch.\n\n Parameters:\n * fileName : String to be output in the filename sections of the patch\n * oldStr : Original string value\n * newStr : New string value\n * oldHeader : Additional information to include in the old file header\n * newHeader : Additional information to include in thew new file header\n\n* JsDiff.applyPatch(oldStr, diffStr)\n Applies a unified diff patch.\n\n Return a string containing new version of provided data.\n\n* convertChangesToXML(changes)\n Converts a list of changes to a serialized XML format\n\n### Change Objects\nMany of the methods above return change objects. These objects are consist of the following fields:\n\n* value: Text content\n* added: True if the value was inserted into the new string\n* removed: True of the value was removed from the old string\n\nNote that some cases may omit a particular flag field. Comparison on the flag fields should always be done in a truthy or falsy manner.\n\n## [Example](http://kpdecker.github.com/jsdiff)\n\n## License\n\nSoftware License Agreement (BSD License)\n\nCopyright (c) 2009-2011, Kevin Decker kpdecker@gmail.com\n\nAll rights reserved.\n\nRedistribution and use of this software in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above\n copyright notice, this list of conditions and the\n following disclaimer.\n\n* Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the\n following disclaimer in the documentation and/or other\n materials provided with the distribution.\n\n* Neither the name of Kevin Decker nor the names of its\n contributors may be used to endorse or promote products\n derived from this software without specific prior\n written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR\nIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER\nIN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\nOF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/kpdecker/jsdiff", - "_id": "diff@1.0.7", - "_from": "diff@1.0.7" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/.npmignore b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/.npmignore deleted file mode 100644 index 2af4b71c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.*.swp -test/a/ diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/.travis.yml b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/.travis.yml deleted file mode 100644 index baa0031d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.8 diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/README.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/README.md deleted file mode 100644 index cc691645..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/README.md +++ /dev/null @@ -1,250 +0,0 @@ -# Glob - -Match files using the patterns the shell uses, like stars and stuff. - -This is a glob implementation in JavaScript. It uses the `minimatch` -library to do its matching. - -## Attention: node-glob users! - -The API has changed dramatically between 2.x and 3.x. This library is -now 100% JavaScript, and the integer flags have been replaced with an -options object. - -Also, there's an event emitter class, proper tests, and all the other -things you've come to expect from node modules. - -And best of all, no compilation! - -## Usage - -```javascript -var glob = require("glob") - -// options is optional -glob("**/*.js", options, function (er, files) { - // files is an array of filenames. - // If the `nonull` option is set, and nothing - // was found, then files is ["**/*.js"] - // er is an error object or null. -}) -``` - -## Features - -Please see the [minimatch -documentation](https://github.com/isaacs/minimatch) for more details. - -Supports these glob features: - -* Brace Expansion -* Extended glob matching -* "Globstar" `**` matching - -See: - -* `man sh` -* `man bash` -* `man 3 fnmatch` -* `man 5 gitignore` -* [minimatch documentation](https://github.com/isaacs/minimatch) - -## glob(pattern, [options], cb) - -* `pattern` {String} Pattern to be matched -* `options` {Object} -* `cb` {Function} - * `err` {Error | null} - * `matches` {Array} filenames found matching the pattern - -Perform an asynchronous glob search. - -## glob.sync(pattern, [options]) - -* `pattern` {String} Pattern to be matched -* `options` {Object} -* return: {Array} filenames found matching the pattern - -Perform a synchronous glob search. - -## Class: glob.Glob - -Create a Glob object by instanting the `glob.Glob` class. - -```javascript -var Glob = require("glob").Glob -var mg = new Glob(pattern, options, cb) -``` - -It's an EventEmitter, and starts walking the filesystem to find matches -immediately. - -### new glob.Glob(pattern, [options], [cb]) - -* `pattern` {String} pattern to search for -* `options` {Object} -* `cb` {Function} Called when an error occurs, or matches are found - * `err` {Error | null} - * `matches` {Array} filenames found matching the pattern - -Note that if the `sync` flag is set in the options, then matches will -be immediately available on the `g.found` member. - -### Properties - -* `minimatch` The minimatch object that the glob uses. -* `options` The options object passed in. -* `error` The error encountered. When an error is encountered, the - glob object is in an undefined state, and should be discarded. -* `aborted` Boolean which is set to true when calling `abort()`. There - is no way at this time to continue a glob search after aborting, but - you can re-use the statCache to avoid having to duplicate syscalls. -* `statCache` Collection of all the stat results the glob search - performed. -* `cache` Convenience object. Each field has the following possible - values: - * `false` - Path does not exist - * `true` - Path exists - * `1` - Path exists, and is not a directory - * `2` - Path exists, and is a directory - * `[file, entries, ...]` - Path exists, is a directory, and the - array value is the results of `fs.readdir` - -### Events - -* `end` When the matching is finished, this is emitted with all the - matches found. If the `nonull` option is set, and no match was found, - then the `matches` list contains the original pattern. The matches - are sorted, unless the `nosort` flag is set. -* `match` Every time a match is found, this is emitted with the matched. -* `error` Emitted when an unexpected error is encountered, or whenever - any fs error occurs if `options.strict` is set. -* `abort` When `abort()` is called, this event is raised. - -### Methods - -* `abort` Stop the search. - -### Options - -All the options that can be passed to Minimatch can also be passed to -Glob to change pattern matching behavior. Also, some have been added, -or have glob-specific ramifications. - -All options are false by default, unless otherwise noted. - -All options are added to the glob object, as well. - -* `cwd` The current working directory in which to search. Defaults - to `process.cwd()`. -* `root` The place where patterns starting with `/` will be mounted - onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix - systems, and `C:\` or some such on Windows.) -* `dot` Include `.dot` files in normal matches and `globstar` matches. - Note that an explicit dot in a portion of the pattern will always - match dot files. -* `nomount` By default, a pattern starting with a forward-slash will be - "mounted" onto the root setting, so that a valid filesystem path is - returned. Set this flag to disable that behavior. -* `mark` Add a `/` character to directory matches. Note that this - requires additional stat calls. -* `nosort` Don't sort the results. -* `stat` Set to true to stat *all* results. This reduces performance - somewhat, and is completely unnecessary, unless `readdir` is presumed - to be an untrustworthy indicator of file existence. It will cause - ELOOP to be triggered one level sooner in the case of cyclical - symbolic links. -* `silent` When an unusual error is encountered - when attempting to read a directory, a warning will be printed to - stderr. Set the `silent` option to true to suppress these warnings. -* `strict` When an unusual error is encountered - when attempting to read a directory, the process will just continue on - in search of other matches. Set the `strict` option to raise an error - in these cases. -* `cache` See `cache` property above. Pass in a previously generated - cache object to save some fs calls. -* `statCache` A cache of results of filesystem information, to prevent - unnecessary stat calls. While it should not normally be necessary to - set this, you may pass the statCache from one glob() call to the - options object of another, if you know that the filesystem will not - change between calls. (See "Race Conditions" below.) -* `sync` Perform a synchronous glob search. -* `nounique` In some cases, brace-expanded patterns can result in the - same file showing up multiple times in the result set. By default, - this implementation prevents duplicates in the result set. - Set this flag to disable that behavior. -* `nonull` Set to never return an empty set, instead returning a set - containing the pattern itself. This is the default in glob(3). -* `nocase` Perform a case-insensitive match. Note that case-insensitive - filesystems will sometimes result in glob returning results that are - case-insensitively matched anyway, since readdir and stat will not - raise an error. -* `debug` Set to enable debug logging in minimatch and glob. -* `globDebug` Set to enable debug logging in glob, but not minimatch. - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between node-glob and other -implementations, and are intentional. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. - -If an escaped pattern has no matches, and the `nonull` flag is set, -then glob returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. - -## Windows - -**Please only use forward-slashes in glob expressions.** - -Though windows uses either `/` or `\` as its path separator, only `/` -characters are used by this glob implementation. You must use -forward-slashes **only** in glob expressions. Back-slashes will always -be interpreted as escape characters, not path separators. - -Results from absolute patterns such as `/foo/*` are mounted onto the -root setting using `path.join`. On windows, this will by default result -in `/foo/*` matching `C:\foo\bar.txt`. - -## Race Conditions - -Glob searching, by its very nature, is susceptible to race conditions, -since it relies on directory walking and such. - -As a result, it is possible that a file that exists when glob looks for -it may have been deleted or modified by the time it returns the result. - -As part of its internal implementation, this program caches all stat -and readdir calls that it makes, in order to cut down on system -overhead. However, this also makes it even more susceptible to races, -especially if the cache or statCache objects are reused between glob -calls. - -Users are thus advised not to use a glob result as a guarantee of -filesystem state in the face of rapid changes. For the vast majority -of operations, this is never a problem. diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/examples/g.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/examples/g.js deleted file mode 100644 index be122df0..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/examples/g.js +++ /dev/null @@ -1,9 +0,0 @@ -var Glob = require("../").Glob - -var pattern = "test/a/**/[cg]/../[cg]" -console.log(pattern) - -var mg = new Glob(pattern, {mark: true, sync:true}, function (er, matches) { - console.log("matches", matches) -}) -console.log("after") diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/examples/usr-local.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/examples/usr-local.js deleted file mode 100644 index 327a425e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/examples/usr-local.js +++ /dev/null @@ -1,9 +0,0 @@ -var Glob = require("../").Glob - -var pattern = "{./*/*,/*,/usr/local/*}" -console.log(pattern) - -var mg = new Glob(pattern, {mark: true}, function (er, matches) { - console.log("matches", matches) -}) -console.log("after") diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/glob.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/glob.js deleted file mode 100644 index f0118a4f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/glob.js +++ /dev/null @@ -1,675 +0,0 @@ -// Approach: -// -// 1. Get the minimatch set -// 2. For each pattern in the set, PROCESS(pattern) -// 3. Store matches per-set, then uniq them -// -// PROCESS(pattern) -// Get the first [n] items from pattern that are all strings -// Join these together. This is PREFIX. -// If there is no more remaining, then stat(PREFIX) and -// add to matches if it succeeds. END. -// readdir(PREFIX) as ENTRIES -// If fails, END -// If pattern[n] is GLOBSTAR -// // handle the case where the globstar match is empty -// // by pruning it out, and testing the resulting pattern -// PROCESS(pattern[0..n] + pattern[n+1 .. $]) -// // handle other cases. -// for ENTRY in ENTRIES (not dotfiles) -// // attach globstar + tail onto the entry -// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $]) -// -// else // not globstar -// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) -// Test ENTRY against pattern[n] -// If fails, continue -// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) -// -// Caveat: -// Cache all stats and readdirs results to minimize syscall. Since all -// we ever care about is existence and directory-ness, we can just keep -// `true` for files, and [children,...] for directories, or `false` for -// things that don't exist. - - - -module.exports = glob - -var fs = require("graceful-fs") -, minimatch = require("minimatch") -, Minimatch = minimatch.Minimatch -, inherits = require("inherits") -, EE = require("events").EventEmitter -, path = require("path") -, isDir = {} -, assert = require("assert").ok - -function glob (pattern, options, cb) { - if (typeof options === "function") cb = options, options = {} - if (!options) options = {} - - if (typeof options === "number") { - deprecated() - return - } - - var g = new Glob(pattern, options, cb) - return g.sync ? g.found : g -} - -glob.fnmatch = deprecated - -function deprecated () { - throw new Error("glob's interface has changed. Please see the docs.") -} - -glob.sync = globSync -function globSync (pattern, options) { - if (typeof options === "number") { - deprecated() - return - } - - options = options || {} - options.sync = true - return glob(pattern, options) -} - - -glob.Glob = Glob -inherits(Glob, EE) -function Glob (pattern, options, cb) { - if (!(this instanceof Glob)) { - return new Glob(pattern, options, cb) - } - - if (typeof cb === "function") { - this.on("error", cb) - this.on("end", function (matches) { - cb(null, matches) - }) - } - - options = options || {} - - this.EOF = {} - this._emitQueue = [] - - this.maxDepth = options.maxDepth || 1000 - this.maxLength = options.maxLength || Infinity - this.cache = options.cache || {} - this.statCache = options.statCache || {} - - this.changedCwd = false - var cwd = process.cwd() - if (!options.hasOwnProperty("cwd")) this.cwd = cwd - else { - this.cwd = options.cwd - this.changedCwd = path.resolve(options.cwd) !== cwd - } - - this.root = options.root || path.resolve(this.cwd, "/") - this.root = path.resolve(this.root) - if (process.platform === "win32") - this.root = this.root.replace(/\\/g, "/") - - this.nomount = !!options.nomount - - if (!pattern) { - throw new Error("must provide pattern") - } - - // base-matching: just use globstar for that. - if (options.matchBase && -1 === pattern.indexOf("/")) { - if (options.noglobstar) { - throw new Error("base matching requires globstar") - } - pattern = "**/" + pattern - } - - this.strict = options.strict !== false - this.dot = !!options.dot - this.mark = !!options.mark - this.sync = !!options.sync - this.nounique = !!options.nounique - this.nonull = !!options.nonull - this.nosort = !!options.nosort - this.nocase = !!options.nocase - this.stat = !!options.stat - - this.debug = !!options.debug || !!options.globDebug - if (this.debug) - this.log = console.error - - this.silent = !!options.silent - - var mm = this.minimatch = new Minimatch(pattern, options) - this.options = mm.options - pattern = this.pattern = mm.pattern - - this.error = null - this.aborted = false - - // list of all the patterns that ** has resolved do, so - // we can avoid visiting multiple times. - this._globstars = {} - - EE.call(this) - - // process each pattern in the minimatch set - var n = this.minimatch.set.length - - // The matches are stored as {: true,...} so that - // duplicates are automagically pruned. - // Later, we do an Object.keys() on these. - // Keep them as a list so we can fill in when nonull is set. - this.matches = new Array(n) - - this.minimatch.set.forEach(iterator.bind(this)) - function iterator (pattern, i, set) { - this._process(pattern, 0, i, function (er) { - if (er) this.emit("error", er) - if (-- n <= 0) this._finish() - }) - } -} - -Glob.prototype.log = function () {} - -Glob.prototype._finish = function () { - assert(this instanceof Glob) - - var nou = this.nounique - , all = nou ? [] : {} - - for (var i = 0, l = this.matches.length; i < l; i ++) { - var matches = this.matches[i] - this.log("matches[%d] =", i, matches) - // do like the shell, and spit out the literal glob - if (!matches) { - if (this.nonull) { - var literal = this.minimatch.globSet[i] - if (nou) all.push(literal) - else all[literal] = true - } - } else { - // had matches - var m = Object.keys(matches) - if (nou) all.push.apply(all, m) - else m.forEach(function (m) { - all[m] = true - }) - } - } - - if (!nou) all = Object.keys(all) - - if (!this.nosort) { - all = all.sort(this.nocase ? alphasorti : alphasort) - } - - if (this.mark) { - // at *some* point we statted all of these - all = all.map(function (m) { - var sc = this.cache[m] - if (!sc) - return m - var isDir = (Array.isArray(sc) || sc === 2) - if (isDir && m.slice(-1) !== "/") { - return m + "/" - } - if (!isDir && m.slice(-1) === "/") { - return m.replace(/\/+$/, "") - } - return m - }, this) - } - - this.log("emitting end", all) - - this.EOF = this.found = all - this.emitMatch(this.EOF) -} - -function alphasorti (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return alphasort(a, b) -} - -function alphasort (a, b) { - return a > b ? 1 : a < b ? -1 : 0 -} - -Glob.prototype.abort = function () { - this.aborted = true - this.emit("abort") -} - -Glob.prototype.pause = function () { - if (this.paused) return - if (this.sync) - this.emit("error", new Error("Can't pause/resume sync glob")) - this.paused = true - this.emit("pause") -} - -Glob.prototype.resume = function () { - if (!this.paused) return - if (this.sync) - this.emit("error", new Error("Can't pause/resume sync glob")) - this.paused = false - this.emit("resume") - this._processEmitQueue() - //process.nextTick(this.emit.bind(this, "resume")) -} - -Glob.prototype.emitMatch = function (m) { - if (!this.stat || this.statCache[m] || m === this.EOF) { - this._emitQueue.push(m) - this._processEmitQueue() - } else { - this._stat(m, function(exists, isDir) { - if (exists) { - this._emitQueue.push(m) - this._processEmitQueue() - } - }) - } -} - -Glob.prototype._processEmitQueue = function (m) { - while (!this._processingEmitQueue && - !this.paused) { - this._processingEmitQueue = true - var m = this._emitQueue.shift() - if (!m) { - this._processingEmitQueue = false - break - } - - this.log('emit!', m === this.EOF ? "end" : "match") - - this.emit(m === this.EOF ? "end" : "match", m) - this._processingEmitQueue = false - } -} - -Glob.prototype._process = function (pattern, depth, index, cb_) { - assert(this instanceof Glob) - - var cb = function cb (er, res) { - assert(this instanceof Glob) - if (this.paused) { - if (!this._processQueue) { - this._processQueue = [] - this.once("resume", function () { - var q = this._processQueue - this._processQueue = null - q.forEach(function (cb) { cb() }) - }) - } - this._processQueue.push(cb_.bind(this, er, res)) - } else { - cb_.call(this, er, res) - } - }.bind(this) - - if (this.aborted) return cb() - - if (depth > this.maxDepth) return cb() - - // Get the first [n] parts of pattern that are all strings. - var n = 0 - while (typeof pattern[n] === "string") { - n ++ - } - // now n is the index of the first one that is *not* a string. - - // see if there's anything else - var prefix - switch (n) { - // if not, then this is rather simple - case pattern.length: - prefix = pattern.join("/") - this._stat(prefix, function (exists, isDir) { - // either it's there, or it isn't. - // nothing more to do, either way. - if (exists) { - if (prefix && isAbsolute(prefix) && !this.nomount) { - if (prefix.charAt(0) === "/") { - prefix = path.join(this.root, prefix) - } else { - prefix = path.resolve(this.root, prefix) - } - } - - if (process.platform === "win32") - prefix = prefix.replace(/\\/g, "/") - - this.matches[index] = this.matches[index] || {} - this.matches[index][prefix] = true - this.emitMatch(prefix) - } - return cb() - }) - return - - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null - break - - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's "absolute" like /foo/bar, - // or "relative" like "../baz" - prefix = pattern.slice(0, n) - prefix = prefix.join("/") - break - } - - // get the list of entries. - var read - if (prefix === null) read = "." - else if (isAbsolute(prefix) || isAbsolute(pattern.join("/"))) { - if (!prefix || !isAbsolute(prefix)) { - prefix = path.join("/", prefix) - } - read = prefix = path.resolve(prefix) - - // if (process.platform === "win32") - // read = prefix = prefix.replace(/^[a-zA-Z]:|\\/g, "/") - - this.log('absolute: ', prefix, this.root, pattern, read) - } else { - read = prefix - } - - this.log('readdir(%j)', read, this.cwd, this.root) - - return this._readdir(read, function (er, entries) { - if (er) { - // not a directory! - // this means that, whatever else comes after this, it can never match - return cb() - } - - // globstar is special - if (pattern[n] === minimatch.GLOBSTAR) { - // test without the globstar, and with every child both below - // and replacing the globstar. - var s = [ pattern.slice(0, n).concat(pattern.slice(n + 1)) ] - entries.forEach(function (e) { - if (e.charAt(0) === "." && !this.dot) return - // instead of the globstar - s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1))) - // below the globstar - s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n))) - }, this) - - s = s.filter(function (pattern) { - var key = gsKey(pattern) - var seen = !this._globstars[key] - this._globstars[key] = true - return seen - }, this) - - if (!s.length) - return cb() - - // now asyncForEach over this - var l = s.length - , errState = null - s.forEach(function (gsPattern) { - this._process(gsPattern, depth + 1, index, function (er) { - if (errState) return - if (er) return cb(errState = er) - if (--l <= 0) return cb() - }) - }, this) - - return - } - - // not a globstar - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = pattern[n] - var rawGlob = pattern[n]._glob - , dotOk = this.dot || rawGlob.charAt(0) === "." - - entries = entries.filter(function (e) { - return (e.charAt(0) !== "." || dotOk) && - e.match(pattern[n]) - }) - - // If n === pattern.length - 1, then there's no need for the extra stat - // *unless* the user has specified "mark" or "stat" explicitly. - // We know that they exist, since the readdir returned them. - if (n === pattern.length - 1 && - !this.mark && - !this.stat) { - entries.forEach(function (e) { - if (prefix) { - if (prefix !== "/") e = prefix + "/" + e - else e = prefix + e - } - if (e.charAt(0) === "/" && !this.nomount) { - e = path.join(this.root, e) - } - - if (process.platform === "win32") - e = e.replace(/\\/g, "/") - - this.matches[index] = this.matches[index] || {} - this.matches[index][e] = true - this.emitMatch(e) - }, this) - return cb.call(this) - } - - - // now test all the remaining entries as stand-ins for that part - // of the pattern. - var l = entries.length - , errState = null - if (l === 0) return cb() // no matches possible - entries.forEach(function (e) { - var p = pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1)) - this._process(p, depth + 1, index, function (er) { - if (errState) return - if (er) return cb(errState = er) - if (--l === 0) return cb.call(this) - }) - }, this) - }) - -} - -function gsKey (pattern) { - return '**' + pattern.map(function (p) { - return (p === minimatch.GLOBSTAR) ? '**' : (''+p) - }).join('/') -} - -Glob.prototype._stat = function (f, cb) { - assert(this instanceof Glob) - var abs = f - if (f.charAt(0) === "/") { - abs = path.join(this.root, f) - } else if (this.changedCwd) { - abs = path.resolve(this.cwd, f) - } - - if (f.length > this.maxLength) { - var er = new Error("Path name too long") - er.code = "ENAMETOOLONG" - er.path = f - return this._afterStat(f, abs, cb, er) - } - - this.log('stat', [this.cwd, f, '=', abs]) - - if (!this.stat && this.cache.hasOwnProperty(f)) { - var exists = this.cache[f] - , isDir = exists && (Array.isArray(exists) || exists === 2) - if (this.sync) return cb.call(this, !!exists, isDir) - return process.nextTick(cb.bind(this, !!exists, isDir)) - } - - var stat = this.statCache[abs] - if (this.sync || stat) { - var er - try { - stat = fs.statSync(abs) - } catch (e) { - er = e - } - this._afterStat(f, abs, cb, er, stat) - } else { - fs.stat(abs, this._afterStat.bind(this, f, abs, cb)) - } -} - -Glob.prototype._afterStat = function (f, abs, cb, er, stat) { - var exists - assert(this instanceof Glob) - - if (abs.slice(-1) === "/" && stat && !stat.isDirectory()) { - this.log("should be ENOTDIR, fake it") - - er = new Error("ENOTDIR, not a directory '" + abs + "'") - er.path = abs - er.code = "ENOTDIR" - stat = null - } - - var emit = !this.statCache[abs] - this.statCache[abs] = stat - - if (er || !stat) { - exists = false - } else { - exists = stat.isDirectory() ? 2 : 1 - if (emit) - this.emit('stat', f, stat) - } - this.cache[f] = this.cache[f] || exists - cb.call(this, !!exists, exists === 2) -} - -Glob.prototype._readdir = function (f, cb) { - assert(this instanceof Glob) - var abs = f - if (f.charAt(0) === "/") { - abs = path.join(this.root, f) - } else if (isAbsolute(f)) { - abs = f - } else if (this.changedCwd) { - abs = path.resolve(this.cwd, f) - } - - if (f.length > this.maxLength) { - var er = new Error("Path name too long") - er.code = "ENAMETOOLONG" - er.path = f - return this._afterReaddir(f, abs, cb, er) - } - - this.log('readdir', [this.cwd, f, abs]) - if (this.cache.hasOwnProperty(f)) { - var c = this.cache[f] - if (Array.isArray(c)) { - if (this.sync) return cb.call(this, null, c) - return process.nextTick(cb.bind(this, null, c)) - } - - if (!c || c === 1) { - // either ENOENT or ENOTDIR - var code = c ? "ENOTDIR" : "ENOENT" - , er = new Error((c ? "Not a directory" : "Not found") + ": " + f) - er.path = f - er.code = code - this.log(f, er) - if (this.sync) return cb.call(this, er) - return process.nextTick(cb.bind(this, er)) - } - - // at this point, c === 2, meaning it's a dir, but we haven't - // had to read it yet, or c === true, meaning it's *something* - // but we don't have any idea what. Need to read it, either way. - } - - if (this.sync) { - var er, entries - try { - entries = fs.readdirSync(abs) - } catch (e) { - er = e - } - return this._afterReaddir(f, abs, cb, er, entries) - } - - fs.readdir(abs, this._afterReaddir.bind(this, f, abs, cb)) -} - -Glob.prototype._afterReaddir = function (f, abs, cb, er, entries) { - assert(this instanceof Glob) - if (entries && !er) { - this.cache[f] = entries - // if we haven't asked to stat everything for suresies, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. This also gets us one step - // further into ELOOP territory. - if (!this.mark && !this.stat) { - entries.forEach(function (e) { - if (f === "/") e = f + e - else e = f + "/" + e - this.cache[e] = true - }, this) - } - - return cb.call(this, er, entries) - } - - // now handle errors, and cache the information - if (er) switch (er.code) { - case "ENOTDIR": // totally normal. means it *does* exist. - this.cache[f] = 1 - return cb.call(this, er) - case "ENOENT": // not terribly unusual - case "ELOOP": - case "ENAMETOOLONG": - case "UNKNOWN": - this.cache[f] = false - return cb.call(this, er) - default: // some unusual error. Treat as failure. - this.cache[f] = false - if (this.strict) this.emit("error", er) - if (!this.silent) console.error("glob error", er) - return cb.call(this, er) - } -} - -var isAbsolute = process.platform === "win32" ? absWin : absUnix - -function absWin (p) { - if (absUnix(p)) return true - // pull off the device/UNC bit from a windows path. - // from node's lib/path.js - var splitDeviceRe = - /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/ - , result = splitDeviceRe.exec(p) - , device = result[1] || '' - , isUnc = device && device.charAt(1) !== ':' - , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute - - return isAbsolute -} - -function absUnix (p) { - return p.charAt(0) === "/" || p === "" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/.npmignore b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/.npmignore deleted file mode 100644 index c2658d7d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/README.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/README.md deleted file mode 100644 index eb1a1093..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# graceful-fs - -graceful-fs functions as a drop-in replacement for the fs module, -making various improvements. - -The improvements are meant to normalize behavior across different -platforms and environments, and to make filesystem access more -resilient to errors. - -## Improvements over fs module - -graceful-fs: - -* Queues up `open` and `readdir` calls, and retries them once - something closes if there is an EMFILE error from too many file - descriptors. -* fixes `lchmod` for Node versions prior to 0.6.2. -* implements `fs.lutimes` if possible. Otherwise it becomes a noop. -* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or - `lchown` if the user isn't root. -* makes `lchmod` and `lchown` become noops, if not available. -* retries reading a file if `read` results in EAGAIN error. - -On Windows, it retries renaming a file for up to one second if `EACCESS` -or `EPERM` error occurs, likely because antivirus software has locked -the directory. diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/graceful-fs.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/graceful-fs.js deleted file mode 100644 index 1865f92c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/graceful-fs.js +++ /dev/null @@ -1,159 +0,0 @@ -// Monkey-patching the fs module. -// It's ugly, but there is simply no other way to do this. -var fs = module.exports = require('fs') - -var assert = require('assert') - -// fix up some busted stuff, mostly on windows and old nodes -require('./polyfills.js') - -// The EMFILE enqueuing stuff - -var util = require('util') - -function noop () {} - -var debug = noop -var util = require('util') -if (util.debuglog) - debug = util.debuglog('gfs') -else if (/\bgfs\b/i.test(process.env.NODE_DEBUG || '')) - debug = function() { - var m = util.format.apply(util, arguments) - m = 'GFS: ' + m.split(/\n/).join('\nGFS: ') - console.error(m) - } - -if (/\bgfs\b/i.test(process.env.NODE_DEBUG || '')) { - process.on('exit', function() { - debug('fds', fds) - debug(queue) - assert.equal(queue.length, 0) - }) -} - - -var originalOpen = fs.open -fs.open = open - -function open(path, flags, mode, cb) { - if (typeof mode === "function") cb = mode, mode = null - if (typeof cb !== "function") cb = noop - new OpenReq(path, flags, mode, cb) -} - -function OpenReq(path, flags, mode, cb) { - this.path = path - this.flags = flags - this.mode = mode - this.cb = cb - Req.call(this) -} - -util.inherits(OpenReq, Req) - -OpenReq.prototype.process = function() { - originalOpen.call(fs, this.path, this.flags, this.mode, this.done) -} - -var fds = {} -OpenReq.prototype.done = function(er, fd) { - debug('open done', er, fd) - if (fd) - fds['fd' + fd] = this.path - Req.prototype.done.call(this, er, fd) -} - - -var originalReaddir = fs.readdir -fs.readdir = readdir - -function readdir(path, cb) { - if (typeof cb !== "function") cb = noop - new ReaddirReq(path, cb) -} - -function ReaddirReq(path, cb) { - this.path = path - this.cb = cb - Req.call(this) -} - -util.inherits(ReaddirReq, Req) - -ReaddirReq.prototype.process = function() { - originalReaddir.call(fs, this.path, this.done) -} - -ReaddirReq.prototype.done = function(er, files) { - Req.prototype.done.call(this, er, files) - onclose() -} - - -var originalClose = fs.close -fs.close = close - -function close (fd, cb) { - debug('close', fd) - if (typeof cb !== "function") cb = noop - delete fds['fd' + fd] - originalClose.call(fs, fd, function(er) { - onclose() - cb(er) - }) -} - - -var originalCloseSync = fs.closeSync -fs.closeSync = closeSync - -function closeSync (fd) { - try { - return originalCloseSync(fd) - } finally { - onclose() - } -} - - -// Req class -function Req () { - // start processing - this.done = this.done.bind(this) - this.failures = 0 - this.process() -} - -Req.prototype.done = function (er, result) { - var tryAgain = false - if (er) { - var code = er.code - var tryAgain = code === "EMFILE" - if (process.platform === "win32") - tryAgain = tryAgain || code === "OK" - } - - if (tryAgain) { - this.failures ++ - enqueue(this) - } else { - var cb = this.cb - cb(er, result) - } -} - -var queue = [] - -function enqueue(req) { - queue.push(req) - debug('enqueue %d %s', queue.length, req.constructor.name, req) -} - -function onclose() { - var req = queue.shift() - if (req) { - debug('process', req.constructor.name, req) - req.process() - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/package.json deleted file mode 100644 index ea5a208a..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "graceful-fs", - "description": "A drop-in replacement for fs, making various improvements.", - "version": "2.0.1", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-graceful-fs.git" - }, - "main": "graceful-fs.js", - "engines": { - "node": ">=0.4.0" - }, - "directories": { - "test": "test" - }, - "scripts": { - "test": "tap test/*.js" - }, - "keywords": [ - "fs", - "module", - "reading", - "retry", - "retries", - "queue", - "error", - "errors", - "handling", - "EMFILE", - "EAGAIN", - "EINVAL", - "EPERM", - "EACCESS" - ], - "license": "BSD", - "readme": "# graceful-fs\n\ngraceful-fs functions as a drop-in replacement for the fs module,\nmaking various improvements.\n\nThe improvements are meant to normalize behavior across different\nplatforms and environments, and to make filesystem access more\nresilient to errors.\n\n## Improvements over fs module\n\ngraceful-fs:\n\n* Queues up `open` and `readdir` calls, and retries them once\n something closes if there is an EMFILE error from too many file\n descriptors.\n* fixes `lchmod` for Node versions prior to 0.6.2.\n* implements `fs.lutimes` if possible. Otherwise it becomes a noop.\n* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or\n `lchown` if the user isn't root.\n* makes `lchmod` and `lchown` become noops, if not available.\n* retries reading a file if `read` results in EAGAIN error.\n\nOn Windows, it retries renaming a file for up to one second if `EACCESS`\nor `EPERM` error occurs, likely because antivirus software has locked\nthe directory.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-graceful-fs/issues" - }, - "homepage": "https://github.com/isaacs/node-graceful-fs", - "_id": "graceful-fs@2.0.1", - "_from": "graceful-fs@~2.0.0" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/polyfills.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/polyfills.js deleted file mode 100644 index afc83b3f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/polyfills.js +++ /dev/null @@ -1,228 +0,0 @@ -var fs = require('fs') -var constants = require('constants') - -var origCwd = process.cwd -var cwd = null -process.cwd = function() { - if (!cwd) - cwd = origCwd.call(process) - return cwd -} -var chdir = process.chdir -process.chdir = function(d) { - cwd = null - chdir.call(process, d) -} - -// (re-)implement some things that are known busted or missing. - -// lchmod, broken prior to 0.6.2 -// back-port the fix here. -if (constants.hasOwnProperty('O_SYMLINK') && - process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) { - fs.lchmod = function (path, mode, callback) { - callback = callback || noop - fs.open( path - , constants.O_WRONLY | constants.O_SYMLINK - , mode - , function (err, fd) { - if (err) { - callback(err) - return - } - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - fs.fchmod(fd, mode, function (err) { - fs.close(fd, function(err2) { - callback(err || err2) - }) - }) - }) - } - - fs.lchmodSync = function (path, mode) { - var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode) - - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - var err, err2 - try { - var ret = fs.fchmodSync(fd, mode) - } catch (er) { - err = er - } - try { - fs.closeSync(fd) - } catch (er) { - err2 = er - } - if (err || err2) throw (err || err2) - return ret - } -} - - -// lutimes implementation, or no-op -if (!fs.lutimes) { - if (constants.hasOwnProperty("O_SYMLINK")) { - fs.lutimes = function (path, at, mt, cb) { - fs.open(path, constants.O_SYMLINK, function (er, fd) { - cb = cb || noop - if (er) return cb(er) - fs.futimes(fd, at, mt, function (er) { - fs.close(fd, function (er2) { - return cb(er || er2) - }) - }) - }) - } - - fs.lutimesSync = function (path, at, mt) { - var fd = fs.openSync(path, constants.O_SYMLINK) - , err - , err2 - , ret - - try { - var ret = fs.futimesSync(fd, at, mt) - } catch (er) { - err = er - } - try { - fs.closeSync(fd) - } catch (er) { - err2 = er - } - if (err || err2) throw (err || err2) - return ret - } - - } else if (fs.utimensat && constants.hasOwnProperty("AT_SYMLINK_NOFOLLOW")) { - // maybe utimensat will be bound soonish? - fs.lutimes = function (path, at, mt, cb) { - fs.utimensat(path, at, mt, constants.AT_SYMLINK_NOFOLLOW, cb) - } - - fs.lutimesSync = function (path, at, mt) { - return fs.utimensatSync(path, at, mt, constants.AT_SYMLINK_NOFOLLOW) - } - - } else { - fs.lutimes = function (_a, _b, _c, cb) { process.nextTick(cb) } - fs.lutimesSync = function () {} - } -} - - -// https://github.com/isaacs/node-graceful-fs/issues/4 -// Chown should not fail on einval or eperm if non-root. - -fs.chown = chownFix(fs.chown) -fs.fchown = chownFix(fs.fchown) -fs.lchown = chownFix(fs.lchown) - -fs.chownSync = chownFixSync(fs.chownSync) -fs.fchownSync = chownFixSync(fs.fchownSync) -fs.lchownSync = chownFixSync(fs.lchownSync) - -function chownFix (orig) { - if (!orig) return orig - return function (target, uid, gid, cb) { - return orig.call(fs, target, uid, gid, function (er, res) { - if (chownErOk(er)) er = null - cb(er, res) - }) - } -} - -function chownFixSync (orig) { - if (!orig) return orig - return function (target, uid, gid) { - try { - return orig.call(fs, target, uid, gid) - } catch (er) { - if (!chownErOk(er)) throw er - } - } -} - -function chownErOk (er) { - // if there's no getuid, or if getuid() is something other than 0, - // and the error is EINVAL or EPERM, then just ignore it. - // This specific case is a silent failure in cp, install, tar, - // and most other unix tools that manage permissions. - // When running as root, or if other types of errors are encountered, - // then it's strict. - if (!er || (!process.getuid || process.getuid() !== 0) - && (er.code === "EINVAL" || er.code === "EPERM")) return true -} - - -// if lchmod/lchown do not exist, then make them no-ops -if (!fs.lchmod) { - fs.lchmod = function (path, mode, cb) { - process.nextTick(cb) - } - fs.lchmodSync = function () {} -} -if (!fs.lchown) { - fs.lchown = function (path, uid, gid, cb) { - process.nextTick(cb) - } - fs.lchownSync = function () {} -} - - - -// on Windows, A/V software can lock the directory, causing this -// to fail with an EACCES or EPERM if the directory contains newly -// created files. Try again on failure, for up to 1 second. -if (process.platform === "win32") { - var rename_ = fs.rename - fs.rename = function rename (from, to, cb) { - var start = Date.now() - rename_(from, to, function CB (er) { - if (er - && (er.code === "EACCES" || er.code === "EPERM") - && Date.now() - start < 1000) { - return rename_(from, to, CB) - } - cb(er) - }) - } -} - - -// if read() returns EAGAIN, then just try it again. -var read = fs.read -fs.read = function (fd, buffer, offset, length, position, callback_) { - var callback - if (callback_ && typeof callback_ === 'function') { - var eagCounter = 0 - callback = function (er, _, __) { - if (er && er.code === 'EAGAIN' && eagCounter < 10) { - eagCounter ++ - return read.call(fs, fd, buffer, offset, length, position, callback) - } - callback_.apply(this, arguments) - } - } - return read.call(fs, fd, buffer, offset, length, position, callback) -} - -var readSync = fs.readSync -fs.readSync = function (fd, buffer, offset, length, position) { - var eagCounter = 0 - while (true) { - try { - return readSync.call(fs, fd, buffer, offset, length, position) - } catch (er) { - if (er.code === 'EAGAIN' && eagCounter < 10) { - eagCounter ++ - continue - } - throw er - } - } -} - diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/test/open.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/test/open.js deleted file mode 100644 index 104f36b0..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/test/open.js +++ /dev/null @@ -1,39 +0,0 @@ -var test = require('tap').test -var fs = require('../graceful-fs.js') - -test('graceful fs is monkeypatched fs', function (t) { - t.equal(fs, require('fs')) - t.end() -}) - -test('open an existing file works', function (t) { - var fd = fs.openSync(__filename, 'r') - fs.closeSync(fd) - fs.open(__filename, 'r', function (er, fd) { - if (er) throw er - fs.close(fd, function (er) { - if (er) throw er - t.pass('works') - t.end() - }) - }) -}) - -test('open a non-existing file throws', function (t) { - var er - try { - var fd = fs.openSync('this file does not exist', 'r') - } catch (x) { - er = x - } - t.ok(er, 'should throw') - t.notOk(fd, 'should not get an fd') - t.equal(er.code, 'ENOENT') - - fs.open('neither does this file', 'r', function (er, fd) { - t.ok(er, 'should throw') - t.notOk(fd, 'should not get an fd') - t.equal(er.code, 'ENOENT') - t.end() - }) -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/LICENSE deleted file mode 100644 index dea3013d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/README.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/README.md deleted file mode 100644 index b1c56658..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/README.md +++ /dev/null @@ -1,42 +0,0 @@ -Browser-friendly inheritance fully compatible with standard node.js -[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). - -This package exports standard `inherits` from node.js `util` module in -node environment, but also provides alternative browser-friendly -implementation through [browser -field](https://gist.github.com/shtylman/4339901). Alternative -implementation is a literal copy of standard one located in standalone -module to avoid requiring of `util`. It also has a shim for old -browsers with no `Object.create` support. - -While keeping you sure you are using standard `inherits` -implementation in node.js environment, it allows bundlers such as -[browserify](https://github.com/substack/node-browserify) to not -include full `util` package to your client code if all you need is -just `inherits` function. It worth, because browser shim for `util` -package is large and `inherits` is often the single function you need -from it. - -It's recommended to use this package instead of -`require('util').inherits` for any code that has chances to be used -not only in node.js but in browser too. - -## usage - -```js -var inherits = require('inherits'); -// then use exactly as the standard one -``` - -## note on version ~1.0 - -Version ~1.0 had completely different motivation and is not compatible -neither with 2.0 nor with standard node.js `inherits`. - -If you are using version ~1.0 and planning to switch to ~2.0, be -careful: - -* new version uses `super_` instead of `super` for referencing - superclass -* new version overwrites current prototype while old one preserves any - existing fields on it diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits.js deleted file mode 100644 index 29f5e24f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('util').inherits diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits_browser.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits_browser.js deleted file mode 100644 index c1e78a75..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits_browser.js +++ /dev/null @@ -1,23 +0,0 @@ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/package.json deleted file mode 100644 index 5bf0db56..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "inherits", - "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", - "version": "2.0.1", - "keywords": [ - "inheritance", - "class", - "klass", - "oop", - "object-oriented", - "inherits", - "browser", - "browserify" - ], - "main": "./inherits.js", - "browser": "./inherits_browser.js", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/inherits" - }, - "license": "ISC", - "scripts": { - "test": "node test" - }, - "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n superclass\n* new version overwrites current prototype while old one preserves any\n existing fields on it\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/inherits/issues" - }, - "homepage": "https://github.com/isaacs/inherits", - "_id": "inherits@2.0.1", - "_from": "inherits@2" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/test.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/test.js deleted file mode 100644 index fc53012d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/inherits/test.js +++ /dev/null @@ -1,25 +0,0 @@ -var inherits = require('./inherits.js') -var assert = require('assert') - -function test(c) { - assert(c.constructor === Child) - assert(c.constructor.super_ === Parent) - assert(Object.getPrototypeOf(c) === Child.prototype) - assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype) - assert(c instanceof Child) - assert(c instanceof Parent) -} - -function Child() { - Parent.call(this) - test(this) -} - -function Parent() {} - -inherits(Child, Parent) - -var c = new Child -test(c) - -console.log('ok') diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/.npmignore b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/LICENSE deleted file mode 100644 index 05a40109..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/README.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/README.md deleted file mode 100644 index 978268e2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/README.md +++ /dev/null @@ -1,218 +0,0 @@ -# minimatch - -A minimal matching utility. - -[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch) - - -This is the matching library used internally by npm. - -Eventually, it will replace the C binding in node-glob. - -It works by converting glob expressions into JavaScript `RegExp` -objects. - -## Usage - -```javascript -var minimatch = require("minimatch") - -minimatch("bar.foo", "*.foo") // true! -minimatch("bar.foo", "*.bar") // false! -minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy! -``` - -## Features - -Supports these glob features: - -* Brace Expansion -* Extended glob matching -* "Globstar" `**` matching - -See: - -* `man sh` -* `man bash` -* `man 3 fnmatch` -* `man 5 gitignore` - -## Minimatch Class - -Create a minimatch object by instanting the `minimatch.Minimatch` class. - -```javascript -var Minimatch = require("minimatch").Minimatch -var mm = new Minimatch(pattern, options) -``` - -### Properties - -* `pattern` The original pattern the minimatch object represents. -* `options` The options supplied to the constructor. -* `set` A 2-dimensional array of regexp or string expressions. - Each row in the - array corresponds to a brace-expanded pattern. Each item in the row - corresponds to a single path-part. For example, the pattern - `{a,b/c}/d` would expand to a set of patterns like: - - [ [ a, d ] - , [ b, c, d ] ] - - If a portion of the pattern doesn't have any "magic" in it - (that is, it's something like `"foo"` rather than `fo*o?`), then it - will be left as a string rather than converted to a regular - expression. - -* `regexp` Created by the `makeRe` method. A single regular expression - expressing the entire pattern. This is useful in cases where you wish - to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. -* `negate` True if the pattern is negated. -* `comment` True if the pattern is a comment. -* `empty` True if the pattern is `""`. - -### Methods - -* `makeRe` Generate the `regexp` member if necessary, and return it. - Will return `false` if the pattern is invalid. -* `match(fname)` Return true if the filename matches the pattern, or - false otherwise. -* `matchOne(fileArray, patternArray, partial)` Take a `/`-split - filename, and match it against a single row in the `regExpSet`. This - method is mainly for internal use, but is exposed so that it can be - used by a glob-walker that needs to avoid excessive filesystem calls. - -All other methods are internal, and will be called as necessary. - -## Functions - -The top-level exported function has a `cache` property, which is an LRU -cache set to store 100 items. So, calling these methods repeatedly -with the same pattern and options will use the same Minimatch object, -saving the cost of parsing it multiple times. - -### minimatch(path, pattern, options) - -Main export. Tests a path against the pattern using the options. - -```javascript -var isJS = minimatch(file, "*.js", { matchBase: true }) -``` - -### minimatch.filter(pattern, options) - -Returns a function that tests its -supplied argument, suitable for use with `Array.filter`. Example: - -```javascript -var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) -``` - -### minimatch.match(list, pattern, options) - -Match against the list of -files, in the style of fnmatch or glob. If nothing is matched, and -options.nonull is set, then return a list containing the pattern itself. - -```javascript -var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) -``` - -### minimatch.makeRe(pattern, options) - -Make a regular expression object from the pattern. - -## Options - -All options are `false` by default. - -### debug - -Dump a ton of stuff to stderr. - -### nobrace - -Do not expand `{a,b}` and `{1..3}` brace sets. - -### noglobstar - -Disable `**` matching against multiple folder names. - -### dot - -Allow patterns to match filenames starting with a period, even if -the pattern does not explicitly have a period in that spot. - -Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` -is set. - -### noext - -Disable "extglob" style patterns like `+(a|b)`. - -### nocase - -Perform a case-insensitive match. - -### nonull - -When a match is not found by `minimatch.match`, return a list containing -the pattern itself. When set, an empty list is returned if there are -no matches. - -### matchBase - -If set, then patterns without slashes will be matched -against the basename of the path if it contains slashes. For example, -`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. - -### nocomment - -Suppress the behavior of treating `#` at the start of a pattern as a -comment. - -### nonegate - -Suppress the behavior of treating a leading `!` character as negation. - -### flipNegate - -Returns from negate expressions the same as if they were not negated. -(Ie, true on a hit, false on a miss.) - - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between minimatch and other -implementations, and are intentional. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. - -If an escaped pattern has no matches, and the `nonull` flag is set, -then minimatch.match returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/minimatch.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/minimatch.js deleted file mode 100644 index c633f89f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/minimatch.js +++ /dev/null @@ -1,1055 +0,0 @@ -;(function (require, exports, module, platform) { - -if (module) module.exports = minimatch -else exports.minimatch = minimatch - -if (!require) { - require = function (id) { - switch (id) { - case "sigmund": return function sigmund (obj) { - return JSON.stringify(obj) - } - case "path": return { basename: function (f) { - f = f.split(/[\/\\]/) - var e = f.pop() - if (!e) e = f.pop() - return e - }} - case "lru-cache": return function LRUCache () { - // not quite an LRU, but still space-limited. - var cache = {} - var cnt = 0 - this.set = function (k, v) { - cnt ++ - if (cnt >= 100) cache = {} - cache[k] = v - } - this.get = function (k) { return cache[k] } - } - } - } -} - -minimatch.Minimatch = Minimatch - -var LRU = require("lru-cache") - , cache = minimatch.cache = new LRU({max: 100}) - , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} - , sigmund = require("sigmund") - -var path = require("path") - // any single thing other than / - // don't need to escape / when using new RegExp() - , qmark = "[^/]" - - // * => any number of characters - , star = qmark + "*?" - - // ** when dots are allowed. Anything goes, except .. and . - // not (^ or / followed by one or two dots followed by $ or /), - // followed by anything, any number of times. - , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?" - - // not a ^ or / followed by a dot, - // followed by anything, any number of times. - , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?" - - // characters that need to be escaped in RegExp. - , reSpecials = charSet("().*{}+?[]^$\\!") - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split("").reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - a = a || {} - b = b || {} - var t = {} - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch - - var orig = minimatch - - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch -} - - -function minimatch (p, pattern, options) { - if (typeof pattern !== "string") { - throw new TypeError("glob pattern string required") - } - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === "#") { - return false - } - - // "" only matches "" - if (pattern.trim() === "") return p === "" - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options, cache) - } - - if (typeof pattern !== "string") { - throw new TypeError("glob pattern string required") - } - - if (!options) options = {} - pattern = pattern.trim() - - // windows: need to use /, not \ - // On other platforms, \ is a valid (albeit bad) filename char. - if (platform === "win32") { - pattern = pattern.split("\\").join("/") - } - - // lru storage. - // these things aren't particularly big, but walking down the string - // and turning it into a regexp can get pretty costly. - var cacheKey = pattern + "\n" + sigmund(options) - var cached = minimatch.cache.get(cacheKey) - if (cached) return cached - minimatch.cache.set(cacheKey, this) - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.debug = function() {} - -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return - - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === "#") { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) this.debug = console.error - - this.debug(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - this.debug(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - this.debug(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return -1 === s.indexOf(false) - }) - - this.debug(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - , negate = false - , options = this.options - , negateOffset = 0 - - if (options.nonegate) return - - for ( var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === "!" - ; i ++) { - negate = !negate - negateOffset ++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return new Minimatch(pattern, options).braceExpand() -} - -Minimatch.prototype.braceExpand = braceExpand -function braceExpand (pattern, options) { - options = options || this.options - pattern = typeof pattern === "undefined" - ? this.pattern : pattern - - if (typeof pattern === "undefined") { - throw new Error("undefined pattern") - } - - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - - var escaping = false - - // examples and comments refer to this crazy pattern: - // a{b,c{d,e},{f,g}h}x{y,z} - // expected: - // abxy - // abxz - // acdxy - // acdxz - // acexy - // acexz - // afhxy - // afhxz - // aghxy - // aghxz - - // everything before the first \{ is just a prefix. - // So, we pluck that off, and work with the rest, - // and then prepend it to everything we find. - if (pattern.charAt(0) !== "{") { - this.debug(pattern) - var prefix = null - for (var i = 0, l = pattern.length; i < l; i ++) { - var c = pattern.charAt(i) - this.debug(i, c) - if (c === "\\") { - escaping = !escaping - } else if (c === "{" && !escaping) { - prefix = pattern.substr(0, i) - break - } - } - - // actually no sets, all { were escaped. - if (prefix === null) { - this.debug("no sets") - return [pattern] - } - - var tail = braceExpand.call(this, pattern.substr(i), options) - return tail.map(function (t) { - return prefix + t - }) - } - - // now we have something like: - // {b,c{d,e},{f,g}h}x{y,z} - // walk through the set, expanding each part, until - // the set ends. then, we'll expand the suffix. - // If the set only has a single member, then'll put the {} back - - // first, handle numeric sets, since they're easier - var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/) - if (numset) { - this.debug("numset", numset[1], numset[2]) - var suf = braceExpand.call(this, pattern.substr(numset[0].length), options) - , start = +numset[1] - , end = +numset[2] - , inc = start > end ? -1 : 1 - , set = [] - for (var i = start; i != (end + inc); i += inc) { - // append all the suffixes - for (var ii = 0, ll = suf.length; ii < ll; ii ++) { - set.push(i + suf[ii]) - } - } - return set - } - - // ok, walk through the set - // We hope, somewhat optimistically, that there - // will be a } at the end. - // If the closing brace isn't found, then the pattern is - // interpreted as braceExpand("\\" + pattern) so that - // the leading \{ will be interpreted literally. - var i = 1 // skip the \{ - , depth = 1 - , set = [] - , member = "" - , sawEnd = false - , escaping = false - - function addMember () { - set.push(member) - member = "" - } - - this.debug("Entering for") - FOR: for (i = 1, l = pattern.length; i < l; i ++) { - var c = pattern.charAt(i) - this.debug("", i, c) - - if (escaping) { - escaping = false - member += "\\" + c - } else { - switch (c) { - case "\\": - escaping = true - continue - - case "{": - depth ++ - member += "{" - continue - - case "}": - depth -- - // if this closes the actual set, then we're done - if (depth === 0) { - addMember() - // pluck off the close-brace - i ++ - break FOR - } else { - member += c - continue - } - - case ",": - if (depth === 1) { - addMember() - } else { - member += c - } - continue - - default: - member += c - continue - } // switch - } // else - } // for - - // now we've either finished the set, and the suffix is - // pattern.substr(i), or we have *not* closed the set, - // and need to escape the leading brace - if (depth !== 0) { - this.debug("didn't close", pattern) - return braceExpand.call(this, "\\" + pattern, options) - } - - // x{y,z} -> ["xy", "xz"] - this.debug("set", set) - this.debug("suffix", pattern.substr(i)) - var suf = braceExpand.call(this, pattern.substr(i), options) - // ["b", "c{d,e}","{f,g}h"] -> - // [["b"], ["cd", "ce"], ["fh", "gh"]] - var addBraces = set.length === 1 - this.debug("set pre-expanded", set) - set = set.map(function (p) { - return braceExpand.call(this, p, options) - }, this) - this.debug("set expanded", set) - - - // [["b"], ["cd", "ce"], ["fh", "gh"]] -> - // ["b", "cd", "ce", "fh", "gh"] - set = set.reduce(function (l, r) { - return l.concat(r) - }) - - if (addBraces) { - set = set.map(function (s) { - return "{" + s + "}" - }) - } - - // now attach the suffixes. - var ret = [] - for (var i = 0, l = set.length; i < l; i ++) { - for (var ii = 0, ll = suf.length; ii < ll; ii ++) { - ret.push(set[i] + suf[ii]) - } - } - return ret -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - var options = this.options - - // shortcuts - if (!options.noglobstar && pattern === "**") return GLOBSTAR - if (pattern === "") return "" - - var re = "" - , hasMagic = !!options.nocase - , escaping = false - // ? => one single character - , patternListStack = [] - , plType - , stateChar - , inClass = false - , reClassStart = -1 - , classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - , patternStart = pattern.charAt(0) === "." ? "" // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))" - : "(?!\\.)" - , self = this - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case "*": - re += star - hasMagic = true - break - case "?": - re += qmark - hasMagic = true - break - default: - re += "\\"+stateChar - break - } - self.debug('clearStateChar %j %j', stateChar, re) - stateChar = false - } - } - - for ( var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i ++ ) { - - this.debug("%s\t%s %s %j", pattern, i, re, c) - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += "\\" + c - escaping = false - continue - } - - SWITCH: switch (c) { - case "/": - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - - case "\\": - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case "?": - case "*": - case "+": - case "@": - case "!": - this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c) - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class') - if (c === "!" && i === classStart + 1) c = "^" - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar) - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case "(": - if (inClass) { - re += "(" - continue - } - - if (!stateChar) { - re += "\\(" - continue - } - - plType = stateChar - patternListStack.push({ type: plType - , start: i - 1 - , reStart: re.length }) - // negation is (?:(?!js)[^/]*) - re += stateChar === "!" ? "(?:(?!" : "(?:" - this.debug('plType %j %j', stateChar, re) - stateChar = false - continue - - case ")": - if (inClass || !patternListStack.length) { - re += "\\)" - continue - } - - clearStateChar() - hasMagic = true - re += ")" - plType = patternListStack.pop().type - // negation is (?:(?!js)[^/]*) - // The others are (?:) - switch (plType) { - case "!": - re += "[^/]*?)" - break - case "?": - case "+": - case "*": re += plType - case "@": break // the default anyway - } - continue - - case "|": - if (inClass || !patternListStack.length || escaping) { - re += "\\|" - escaping = false - continue - } - - clearStateChar() - re += "|" - continue - - // these are mostly the same in regexp and glob - case "[": - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += "\\" + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case "]": - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += "\\" + c - escaping = false - continue - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === "^" && inClass)) { - re += "\\" - } - - re += c - - } // switch - } // for - - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - var cs = pattern.substr(classStart + 1) - , sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + "\\[" + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - var pl - while (pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + 3) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = "\\" - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + "|" - }) - - this.debug("tail=%j\n %s", tail, tail) - var t = pl.type === "*" ? star - : pl.type === "?" ? qmark - : "\\" + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) - + t + "\\(" - + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += "\\\\" - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case ".": - case "[": - case "(": addPatternStart = true - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== "" && hasMagic) re = "(?=.)" + re - - if (addPatternStart) re = patternStart + re - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [ re, hasMagic ] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? "i" : "" - , regExp = new RegExp("^" + re + "$", flags) - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) return this.regexp = false - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - , flags = options.nocase ? "i" : "" - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === "string") ? regExpEscape(p) - : p._src - }).join("\\\/") - }).join("|") - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = "^(?:" + re + ")$" - - // can match anything, as long as it's not this. - if (this.negate) re = "^(?!" + re + ").*$" - - try { - return this.regexp = new RegExp(re, flags) - } catch (ex) { - return this.regexp = false - } -} - -minimatch.match = function (list, pattern, options) { - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = match -function match (f, partial) { - this.debug("match", f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === "" - - if (f === "/" && partial) return true - - var options = this.options - - // windows: need to use /, not \ - // On other platforms, \ is a valid (albeit bad) filename char. - if (platform === "win32") { - f = f.split("\\").join("/") - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - this.debug(this.pattern, "split", f) - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - this.debug(this.pattern, "set", set) - - var splitFile = path.basename(f.join("/")).split("/") - - for (var i = 0, l = set.length; i < l; i ++) { - var pattern = set[i], file = f - if (options.matchBase && pattern.length === 1) { - file = splitFile - } - var hit = this.matchOne(file, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - this.debug("matchOne", - { "this": this - , file: file - , pattern: pattern }) - - this.debug("matchOne", file.length, pattern.length) - - for ( var fi = 0 - , pi = 0 - , fl = file.length - , pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi ++, pi ++ ) { - - this.debug("matchOne loop") - var p = pattern[pi] - , f = file[fi] - - this.debug(pattern, p, f) - - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false - - if (p === GLOBSTAR) { - this.debug('GLOBSTAR', [pattern, p, f]) - - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - , pr = pi + 1 - if (pr === pl) { - this.debug('** at the end') - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for ( ; fi < fl; fi ++) { - if (file[fi] === "." || file[fi] === ".." || - (!options.dot && file[fi].charAt(0) === ".")) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - WHILE: while (fr < fl) { - var swallowee = file[fr] - - this.debug('\nglobstar while', - file, fr, pattern, pr, swallowee) - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee) - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === "." || swallowee === ".." || - (!options.dot && swallowee.charAt(0) === ".")) { - this.debug("dot detected!", file, fr, pattern, pr) - break WHILE - } - - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue') - fr ++ - } - } - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - this.debug("\n>>> no match, partial?", file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === "string") { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - this.debug("string match", p, f, hit) - } else { - hit = f.match(p) - this.debug("pattern match", p, f, hit) - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === "") - return emptyFileEnd - } - - // should be unreachable. - throw new Error("wtf?") -} - - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, "$1") -} - - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") -} - -})( typeof require === "function" ? require : null, - this, - typeof module === "object" ? module : null, - typeof process === "object" ? process.platform : "win32" - ) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore deleted file mode 100644 index 07e6e472..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS deleted file mode 100644 index 4a0bc503..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS +++ /dev/null @@ -1,14 +0,0 @@ -# Authors, sorted by whether or not they are me -Isaac Z. Schlueter -Brian Cottingham -Carlos Brito Lage -Jesse Dailey -Kevin O'Hara -Marco Rogers -Mark Cavage -Marko Mikulicic -Nathan Rajlich -Satheesh Natesan -Trent Mick -ashleybrener -n4kz diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE deleted file mode 100644 index 05a40109..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md deleted file mode 100644 index 03ee0f98..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# lru cache - -A cache object that deletes the least-recently-used items. - -## Usage: - -```javascript -var LRU = require("lru-cache") - , options = { max: 500 - , length: function (n) { return n * 2 } - , dispose: function (key, n) { n.close() } - , maxAge: 1000 * 60 * 60 } - , cache = LRU(options) - , otherCache = LRU(50) // sets just the max size - -cache.set("key", "value") -cache.get("key") // "value" - -cache.reset() // empty the cache -``` - -If you put more stuff in it, then items will fall out. - -If you try to put an oversized thing in it, then it'll fall out right -away. - -## Options - -* `max` The maximum size of the cache, checked by applying the length - function to all values in the cache. Not setting this is kind of - silly, since that's the whole purpose of this lib, but it defaults - to `Infinity`. -* `maxAge` Maximum age in ms. Items are not pro-actively pruned out - as they age, but if you try to get an item that is too old, it'll - drop it and return undefined instead of giving it to you. -* `length` Function that is used to calculate the length of stored - items. If you're storing strings or buffers, then you probably want - to do something like `function(n){return n.length}`. The default is - `function(n){return 1}`, which is fine if you want to store `n` - like-sized things. -* `dispose` Function that is called on items when they are dropped - from the cache. This can be handy if you want to close file - descriptors or do other cleanup tasks when items are no longer - accessible. Called with `key, value`. It's called *before* - actually removing the item from the internal cache, so if you want - to immediately put it back in, you'll have to do that in a - `nextTick` or `setTimeout` callback or it won't do anything. -* `stale` By default, if you set a `maxAge`, it'll only actually pull - stale items out of the cache when you `get(key)`. (That is, it's - not pre-emptively doing a `setTimeout` or anything.) If you set - `stale:true`, it'll return the stale value before deleting it. If - you don't set this, then it'll return `undefined` when you try to - get a stale entry, as if it had already been deleted. - -## API - -* `set(key, value)` -* `get(key) => value` - - Both of these will update the "recently used"-ness of the key. - They do what you think. - -* `peek(key)` - - Returns the key value (or `undefined` if not found) without - updating the "recently used"-ness of the key. - - (If you find yourself using this a lot, you *might* be using the - wrong sort of data structure, but there are some use cases where - it's handy.) - -* `del(key)` - - Deletes a key out of the cache. - -* `reset()` - - Clear the cache entirely, throwing away all values. - -* `has(key)` - - Check if a key is in the cache, without updating the recent-ness - or deleting it for being stale. - -* `forEach(function(value,key,cache), [thisp])` - - Just like `Array.prototype.forEach`. Iterates over all the keys - in the cache, in order of recent-ness. (Ie, more recently used - items are iterated over first.) - -* `keys()` - - Return an array of the keys in the cache. - -* `values()` - - Return an array of the values in the cache. diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js deleted file mode 100644 index d1d13817..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js +++ /dev/null @@ -1,252 +0,0 @@ -;(function () { // closure for web browsers - -if (typeof module === 'object' && module.exports) { - module.exports = LRUCache -} else { - // just set the global for non-node platforms. - this.LRUCache = LRUCache -} - -function hOP (obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key) -} - -function naiveLength () { return 1 } - -function LRUCache (options) { - if (!(this instanceof LRUCache)) - return new LRUCache(options) - - if (typeof options === 'number') - options = { max: options } - - if (!options) - options = {} - - this._max = options.max - // Kind of weird to have a default max of Infinity, but oh well. - if (!this._max || !(typeof this._max === "number") || this._max <= 0 ) - this._max = Infinity - - this._lengthCalculator = options.length || naiveLength - if (typeof this._lengthCalculator !== "function") - this._lengthCalculator = naiveLength - - this._allowStale = options.stale || false - this._maxAge = options.maxAge || null - this._dispose = options.dispose - this.reset() -} - -// resize the cache when the max changes. -Object.defineProperty(LRUCache.prototype, "max", - { set : function (mL) { - if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity - this._max = mL - if (this._length > this._max) trim(this) - } - , get : function () { return this._max } - , enumerable : true - }) - -// resize the cache when the lengthCalculator changes. -Object.defineProperty(LRUCache.prototype, "lengthCalculator", - { set : function (lC) { - if (typeof lC !== "function") { - this._lengthCalculator = naiveLength - this._length = this._itemCount - for (var key in this._cache) { - this._cache[key].length = 1 - } - } else { - this._lengthCalculator = lC - this._length = 0 - for (var key in this._cache) { - this._cache[key].length = this._lengthCalculator(this._cache[key].value) - this._length += this._cache[key].length - } - } - - if (this._length > this._max) trim(this) - } - , get : function () { return this._lengthCalculator } - , enumerable : true - }) - -Object.defineProperty(LRUCache.prototype, "length", - { get : function () { return this._length } - , enumerable : true - }) - - -Object.defineProperty(LRUCache.prototype, "itemCount", - { get : function () { return this._itemCount } - , enumerable : true - }) - -LRUCache.prototype.forEach = function (fn, thisp) { - thisp = thisp || this - var i = 0; - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - i++ - var hit = this._lruList[k] - if (this._maxAge && (Date.now() - hit.now > this._maxAge)) { - del(this, hit) - if (!this._allowStale) hit = undefined - } - if (hit) { - fn.call(thisp, hit.value, hit.key, this) - } - } -} - -LRUCache.prototype.keys = function () { - var keys = new Array(this._itemCount) - var i = 0 - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - keys[i++] = hit.key - } - return keys -} - -LRUCache.prototype.values = function () { - var values = new Array(this._itemCount) - var i = 0 - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - values[i++] = hit.value - } - return values -} - -LRUCache.prototype.reset = function () { - if (this._dispose && this._cache) { - for (var k in this._cache) { - this._dispose(k, this._cache[k].value) - } - } - - this._cache = Object.create(null) // hash of items by key - this._lruList = Object.create(null) // list of items in order of use recency - this._mru = 0 // most recently used - this._lru = 0 // least recently used - this._length = 0 // number of items in the list - this._itemCount = 0 -} - -// Provided for debugging/dev purposes only. No promises whatsoever that -// this API stays stable. -LRUCache.prototype.dump = function () { - return this._cache -} - -LRUCache.prototype.dumpLru = function () { - return this._lruList -} - -LRUCache.prototype.set = function (key, value) { - if (hOP(this._cache, key)) { - // dispose of the old one before overwriting - if (this._dispose) this._dispose(key, this._cache[key].value) - if (this._maxAge) this._cache[key].now = Date.now() - this._cache[key].value = value - this.get(key) - return true - } - - var len = this._lengthCalculator(value) - var age = this._maxAge ? Date.now() : 0 - var hit = new Entry(key, value, this._mru++, len, age) - - // oversized objects fall out of cache automatically. - if (hit.length > this._max) { - if (this._dispose) this._dispose(key, value) - return false - } - - this._length += hit.length - this._lruList[hit.lu] = this._cache[key] = hit - this._itemCount ++ - - if (this._length > this._max) trim(this) - return true -} - -LRUCache.prototype.has = function (key) { - if (!hOP(this._cache, key)) return false - var hit = this._cache[key] - if (this._maxAge && (Date.now() - hit.now > this._maxAge)) { - return false - } - return true -} - -LRUCache.prototype.get = function (key) { - return get(this, key, true) -} - -LRUCache.prototype.peek = function (key) { - return get(this, key, false) -} - -LRUCache.prototype.pop = function () { - var hit = this._lruList[this._lru] - del(this, hit) - return hit || null -} - -LRUCache.prototype.del = function (key) { - del(this, this._cache[key]) -} - -function get (self, key, doUse) { - var hit = self._cache[key] - if (hit) { - if (self._maxAge && (Date.now() - hit.now > self._maxAge)) { - del(self, hit) - if (!self._allowStale) hit = undefined - } else { - if (doUse) use(self, hit) - } - if (hit) hit = hit.value - } - return hit -} - -function use (self, hit) { - shiftLU(self, hit) - hit.lu = self._mru ++ - self._lruList[hit.lu] = hit -} - -function trim (self) { - while (self._lru < self._mru && self._length > self._max) - del(self, self._lruList[self._lru]) -} - -function shiftLU (self, hit) { - delete self._lruList[ hit.lu ] - while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++ -} - -function del (self, hit) { - if (hit) { - if (self._dispose) self._dispose(hit.key, hit.value) - self._length -= hit.length - self._itemCount -- - delete self._cache[ hit.key ] - shiftLU(self, hit) - } -} - -// classy, since V8 prefers predictable objects. -function Entry (key, value, lu, length, now) { - this.key = key - this.value = value - this.lu = lu - this.length = length - this.now = now -} - -})() diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json deleted file mode 100644 index 4472725d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "lru-cache", - "description": "A cache object that deletes the least-recently-used items.", - "version": "2.5.0", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "scripts": { - "test": "tap test --gc" - }, - "main": "lib/lru-cache.js", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-lru-cache.git" - }, - "devDependencies": { - "tap": "", - "weak": "" - }, - "license": { - "type": "MIT", - "url": "http://github.com/isaacs/node-lru-cache/raw/master/LICENSE" - }, - "readme": "# lru cache\n\nA cache object that deletes the least-recently-used items.\n\n## Usage:\n\n```javascript\nvar LRU = require(\"lru-cache\")\n , options = { max: 500\n , length: function (n) { return n * 2 }\n , dispose: function (key, n) { n.close() }\n , maxAge: 1000 * 60 * 60 }\n , cache = LRU(options)\n , otherCache = LRU(50) // sets just the max size\n\ncache.set(\"key\", \"value\")\ncache.get(\"key\") // \"value\"\n\ncache.reset() // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\n## Options\n\n* `max` The maximum size of the cache, checked by applying the length\n function to all values in the cache. Not setting this is kind of\n silly, since that's the whole purpose of this lib, but it defaults\n to `Infinity`.\n* `maxAge` Maximum age in ms. Items are not pro-actively pruned out\n as they age, but if you try to get an item that is too old, it'll\n drop it and return undefined instead of giving it to you.\n* `length` Function that is used to calculate the length of stored\n items. If you're storing strings or buffers, then you probably want\n to do something like `function(n){return n.length}`. The default is\n `function(n){return 1}`, which is fine if you want to store `n`\n like-sized things.\n* `dispose` Function that is called on items when they are dropped\n from the cache. This can be handy if you want to close file\n descriptors or do other cleanup tasks when items are no longer\n accessible. Called with `key, value`. It's called *before*\n actually removing the item from the internal cache, so if you want\n to immediately put it back in, you'll have to do that in a\n `nextTick` or `setTimeout` callback or it won't do anything.\n* `stale` By default, if you set a `maxAge`, it'll only actually pull\n stale items out of the cache when you `get(key)`. (That is, it's\n not pre-emptively doing a `setTimeout` or anything.) If you set\n `stale:true`, it'll return the stale value before deleting it. If\n you don't set this, then it'll return `undefined` when you try to\n get a stale entry, as if it had already been deleted.\n\n## API\n\n* `set(key, value)`\n* `get(key) => value`\n\n Both of these will update the \"recently used\"-ness of the key.\n They do what you think.\n\n* `peek(key)`\n\n Returns the key value (or `undefined` if not found) without\n updating the \"recently used\"-ness of the key.\n\n (If you find yourself using this a lot, you *might* be using the\n wrong sort of data structure, but there are some use cases where\n it's handy.)\n\n* `del(key)`\n\n Deletes a key out of the cache.\n\n* `reset()`\n\n Clear the cache entirely, throwing away all values.\n\n* `has(key)`\n\n Check if a key is in the cache, without updating the recent-ness\n or deleting it for being stale.\n\n* `forEach(function(value,key,cache), [thisp])`\n\n Just like `Array.prototype.forEach`. Iterates over all the keys\n in the cache, in order of recent-ness. (Ie, more recently used\n items are iterated over first.)\n\n* `keys()`\n\n Return an array of the keys in the cache.\n\n* `values()`\n\n Return an array of the values in the cache.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-lru-cache/issues" - }, - "homepage": "https://github.com/isaacs/node-lru-cache", - "_id": "lru-cache@2.5.0", - "_from": "lru-cache@2" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js deleted file mode 100644 index f72697c4..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js +++ /dev/null @@ -1,369 +0,0 @@ -var test = require("tap").test - , LRU = require("../") - -test("basic", function (t) { - var cache = new LRU({max: 10}) - cache.set("key", "value") - t.equal(cache.get("key"), "value") - t.equal(cache.get("nada"), undefined) - t.equal(cache.length, 1) - t.equal(cache.max, 10) - t.end() -}) - -test("least recently set", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), "B") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("lru recently gotten", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - cache.get("a") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), undefined) - t.equal(cache.get("a"), "A") - t.end() -}) - -test("del", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.del("a") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("max", function (t) { - var cache = new LRU(3) - - // test changing the max, verify that the LRU items get dropped. - cache.max = 100 - for (var i = 0; i < 100; i ++) cache.set(i, i) - t.equal(cache.length, 100) - for (var i = 0; i < 100; i ++) { - t.equal(cache.get(i), i) - } - cache.max = 3 - t.equal(cache.length, 3) - for (var i = 0; i < 97; i ++) { - t.equal(cache.get(i), undefined) - } - for (var i = 98; i < 100; i ++) { - t.equal(cache.get(i), i) - } - - // now remove the max restriction, and try again. - cache.max = "hello" - for (var i = 0; i < 100; i ++) cache.set(i, i) - t.equal(cache.length, 100) - for (var i = 0; i < 100; i ++) { - t.equal(cache.get(i), i) - } - // should trigger an immediate resize - cache.max = 3 - t.equal(cache.length, 3) - for (var i = 0; i < 97; i ++) { - t.equal(cache.get(i), undefined) - } - for (var i = 98; i < 100; i ++) { - t.equal(cache.get(i), i) - } - t.end() -}) - -test("reset", function (t) { - var cache = new LRU(10) - cache.set("a", "A") - cache.set("b", "B") - cache.reset() - t.equal(cache.length, 0) - t.equal(cache.max, 10) - t.equal(cache.get("a"), undefined) - t.equal(cache.get("b"), undefined) - t.end() -}) - - -// Note: `.dump()` is a debugging tool only. No guarantees are made -// about the format/layout of the response. -test("dump", function (t) { - var cache = new LRU(10) - var d = cache.dump(); - t.equal(Object.keys(d).length, 0, "nothing in dump for empty cache") - cache.set("a", "A") - var d = cache.dump() // { a: { key: "a", value: "A", lu: 0 } } - t.ok(d.a) - t.equal(d.a.key, "a") - t.equal(d.a.value, "A") - t.equal(d.a.lu, 0) - - cache.set("b", "B") - cache.get("b") - d = cache.dump() - t.ok(d.b) - t.equal(d.b.key, "b") - t.equal(d.b.value, "B") - t.equal(d.b.lu, 2) - - t.end() -}) - - -test("basic with weighed length", function (t) { - var cache = new LRU({ - max: 100, - length: function (item) { return item.size } - }) - cache.set("key", {val: "value", size: 50}) - t.equal(cache.get("key").val, "value") - t.equal(cache.get("nada"), undefined) - t.equal(cache.lengthCalculator(cache.get("key")), 50) - t.equal(cache.length, 50) - t.equal(cache.max, 100) - t.end() -}) - - -test("weighed length item too large", function (t) { - var cache = new LRU({ - max: 10, - length: function (item) { return item.size } - }) - t.equal(cache.max, 10) - - // should fall out immediately - cache.set("key", {val: "value", size: 50}) - - t.equal(cache.length, 0) - t.equal(cache.get("key"), undefined) - t.end() -}) - -test("least recently set with weighed length", function (t) { - var cache = new LRU({ - max:8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - cache.set("d", "DDDD") - t.equal(cache.get("d"), "DDDD") - t.equal(cache.get("c"), "CCC") - t.equal(cache.get("b"), undefined) - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("lru recently gotten with weighed length", function (t) { - var cache = new LRU({ - max: 8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - cache.get("a") - cache.get("b") - cache.set("d", "DDDD") - t.equal(cache.get("c"), undefined) - t.equal(cache.get("d"), "DDDD") - t.equal(cache.get("b"), "BB") - t.equal(cache.get("a"), "A") - t.end() -}) - -test("set returns proper booleans", function(t) { - var cache = new LRU({ - max: 5, - length: function (item) { return item.length } - }) - - t.equal(cache.set("a", "A"), true) - - // should return false for max exceeded - t.equal(cache.set("b", "donuts"), false) - - t.equal(cache.set("b", "B"), true) - t.equal(cache.set("c", "CCCC"), true) - t.end() -}) - -test("drop the old items", function(t) { - var cache = new LRU({ - max: 5, - maxAge: 50 - }) - - cache.set("a", "A") - - setTimeout(function () { - cache.set("b", "b") - t.equal(cache.get("a"), "A") - }, 25) - - setTimeout(function () { - cache.set("c", "C") - // timed out - t.notOk(cache.get("a")) - }, 60) - - setTimeout(function () { - t.notOk(cache.get("b")) - t.equal(cache.get("c"), "C") - }, 90) - - setTimeout(function () { - t.notOk(cache.get("c")) - t.end() - }, 155) -}) - -test("disposal function", function(t) { - var disposed = false - var cache = new LRU({ - max: 1, - dispose: function (k, n) { - disposed = n - } - }) - - cache.set(1, 1) - cache.set(2, 2) - t.equal(disposed, 1) - cache.set(3, 3) - t.equal(disposed, 2) - cache.reset() - t.equal(disposed, 3) - t.end() -}) - -test("disposal function on too big of item", function(t) { - var disposed = false - var cache = new LRU({ - max: 1, - length: function (k) { - return k.length - }, - dispose: function (k, n) { - disposed = n - } - }) - var obj = [ 1, 2 ] - - t.equal(disposed, false) - cache.set("obj", obj) - t.equal(disposed, obj) - t.end() -}) - -test("has()", function(t) { - var cache = new LRU({ - max: 1, - maxAge: 10 - }) - - cache.set('foo', 'bar') - t.equal(cache.has('foo'), true) - cache.set('blu', 'baz') - t.equal(cache.has('foo'), false) - t.equal(cache.has('blu'), true) - setTimeout(function() { - t.equal(cache.has('blu'), false) - t.end() - }, 15) -}) - -test("stale", function(t) { - var cache = new LRU({ - maxAge: 10, - stale: true - }) - - cache.set('foo', 'bar') - t.equal(cache.get('foo'), 'bar') - t.equal(cache.has('foo'), true) - setTimeout(function() { - t.equal(cache.has('foo'), false) - t.equal(cache.get('foo'), 'bar') - t.equal(cache.get('foo'), undefined) - t.end() - }, 15) -}) - -test("lru update via set", function(t) { - var cache = LRU({ max: 2 }); - - cache.set('foo', 1); - cache.set('bar', 2); - cache.del('bar'); - cache.set('baz', 3); - cache.set('qux', 4); - - t.equal(cache.get('foo'), undefined) - t.equal(cache.get('bar'), undefined) - t.equal(cache.get('baz'), 3) - t.equal(cache.get('qux'), 4) - t.end() -}) - -test("least recently set w/ peek", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - t.equal(cache.peek("a"), "A") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), "B") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("pop the least used item", function (t) { - var cache = new LRU(3) - , last - - cache.set("a", "A") - cache.set("b", "B") - cache.set("c", "C") - - t.equal(cache.length, 3) - t.equal(cache.max, 3) - - // Ensure we pop a, c, b - cache.get("b", "B") - - last = cache.pop() - t.equal(last.key, "a") - t.equal(last.value, "A") - t.equal(cache.length, 2) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last.key, "c") - t.equal(last.value, "C") - t.equal(cache.length, 1) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last.key, "b") - t.equal(last.value, "B") - t.equal(cache.length, 0) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last, null) - t.equal(cache.length, 0) - t.equal(cache.max, 3) - - t.end() -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js deleted file mode 100644 index eefb80d9..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js +++ /dev/null @@ -1,52 +0,0 @@ -var test = require('tap').test -var LRU = require('../') - -test('forEach', function (t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - var i = 9 - l.forEach(function (val, key, cache) { - t.equal(cache, l) - t.equal(key, i.toString()) - t.equal(val, i.toString(2)) - i -= 1 - }) - - // get in order of most recently used - l.get(6) - l.get(8) - - var order = [ 8, 6, 9, 7, 5 ] - var i = 0 - - l.forEach(function (val, key, cache) { - var j = order[i ++] - t.equal(cache, l) - t.equal(key, j.toString()) - t.equal(val, j.toString(2)) - }) - - t.end() -}) - -test('keys() and values()', function (t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - t.similar(l.keys(), ['9', '8', '7', '6', '5']) - t.similar(l.values(), ['1001', '1000', '111', '110', '101']) - - // get in order of most recently used - l.get(6) - l.get(8) - - t.similar(l.keys(), ['8', '6', '9', '7', '5']) - t.similar(l.values(), ['1000', '110', '1001', '111', '101']) - - t.end() -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js deleted file mode 100644 index 7af45b02..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env node --expose_gc - -var weak = require('weak'); -var test = require('tap').test -var LRU = require('../') -var l = new LRU({ max: 10 }) -var refs = 0 -function X() { - refs ++ - weak(this, deref) -} - -function deref() { - refs -- -} - -test('no leaks', function (t) { - // fill up the cache - for (var i = 0; i < 100; i++) { - l.set(i, new X); - // throw some gets in there, too. - if (i % 2 === 0) - l.get(i / 2) - } - - gc() - - var start = process.memoryUsage() - - // capture the memory - var startRefs = refs - - // do it again, but more - for (var i = 0; i < 10000; i++) { - l.set(i, new X); - // throw some gets in there, too. - if (i % 2 === 0) - l.get(i / 2) - } - - gc() - - var end = process.memoryUsage() - t.equal(refs, startRefs, 'no leaky refs') - - console.error('start: %j\n' + - 'end: %j', start, end); - t.pass(); - t.end(); -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md deleted file mode 100644 index 7e365129..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# sigmund - -Quick and dirty signatures for Objects. - -This is like a much faster `deepEquals` comparison, which returns a -string key suitable for caches and the like. - -## Usage - -```javascript -function doSomething (someObj) { - var key = sigmund(someObj, maxDepth) // max depth defaults to 10 - var cached = cache.get(key) - if (cached) return cached) - - var result = expensiveCalculation(someObj) - cache.set(key, result) - return result -} -``` - -The resulting key will be as unique and reproducible as calling -`JSON.stringify` or `util.inspect` on the object, but is much faster. -In order to achieve this speed, some differences are glossed over. -For example, the object `{0:'foo'}` will be treated identically to the -array `['foo']`. - -Also, just as there is no way to summon the soul from the scribblings -of a cocain-addled psychoanalyst, there is no way to revive the object -from the signature string that sigmund gives you. In fact, it's -barely even readable. - -As with `sys.inspect` and `JSON.stringify`, larger objects will -produce larger signature strings. - -Because sigmund is a bit less strict than the more thorough -alternatives, the strings will be shorter, and also there is a -slightly higher chance for collisions. For example, these objects -have the same signature: - - var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} - var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} - -Like a good Freudian, sigmund is most effective when you already have -some understanding of what you're looking for. It can help you help -yourself, but you must be willing to do some work as well. - -Cycles are handled, and cyclical objects are silently omitted (though -the key is included in the signature output.) - -The second argument is the maximum depth, which defaults to 10, -because that is the maximum object traversal depth covered by most -insurance carriers. diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js deleted file mode 100644 index 5acfd6d9..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js +++ /dev/null @@ -1,283 +0,0 @@ -// different ways to id objects -// use a req/res pair, since it's crazy deep and cyclical - -// sparseFE10 and sigmund are usually pretty close, which is to be expected, -// since they are essentially the same algorithm, except that sigmund handles -// regular expression objects properly. - - -var http = require('http') -var util = require('util') -var sigmund = require('./sigmund.js') -var sreq, sres, creq, cres, test - -http.createServer(function (q, s) { - sreq = q - sres = s - sres.end('ok') - this.close(function () { setTimeout(function () { - start() - }, 200) }) -}).listen(1337, function () { - creq = http.get({ port: 1337 }) - creq.on('response', function (s) { cres = s }) -}) - -function start () { - test = [sreq, sres, creq, cres] - // test = sreq - // sreq.sres = sres - // sreq.creq = creq - // sreq.cres = cres - - for (var i in exports.compare) { - console.log(i) - var hash = exports.compare[i]() - console.log(hash) - console.log(hash.length) - console.log('') - } - - require('bench').runMain() -} - -function customWs (obj, md, d) { - d = d || 0 - var to = typeof obj - if (to === 'undefined' || to === 'function' || to === null) return '' - if (d > md || !obj || to !== 'object') return ('' + obj).replace(/[\n ]+/g, '') - - if (Array.isArray(obj)) { - return obj.map(function (i, _, __) { - return customWs(i, md, d + 1) - }).reduce(function (a, b) { return a + b }, '') - } - - var keys = Object.keys(obj) - return keys.map(function (k, _, __) { - return k + ':' + customWs(obj[k], md, d + 1) - }).reduce(function (a, b) { return a + b }, '') -} - -function custom (obj, md, d) { - d = d || 0 - var to = typeof obj - if (to === 'undefined' || to === 'function' || to === null) return '' - if (d > md || !obj || to !== 'object') return '' + obj - - if (Array.isArray(obj)) { - return obj.map(function (i, _, __) { - return custom(i, md, d + 1) - }).reduce(function (a, b) { return a + b }, '') - } - - var keys = Object.keys(obj) - return keys.map(function (k, _, __) { - return k + ':' + custom(obj[k], md, d + 1) - }).reduce(function (a, b) { return a + b }, '') -} - -function sparseFE2 (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - Object.keys(v).forEach(function (k, _, __) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') return - var to = typeof v[k] - if (to === 'function' || to === 'undefined') return - soFar += k + ':' - ch(v[k], depth + 1) - }) - soFar += '}' - } - ch(obj, 0) - return soFar -} - -function sparseFE (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - Object.keys(v).forEach(function (k, _, __) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') return - var to = typeof v[k] - if (to === 'function' || to === 'undefined') return - soFar += k - ch(v[k], depth + 1) - }) - } - ch(obj, 0) - return soFar -} - -function sparse (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - for (var k in v) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') continue - var to = typeof v[k] - if (to === 'function' || to === 'undefined') continue - soFar += k - ch(v[k], depth + 1) - } - } - ch(obj, 0) - return soFar -} - -function noCommas (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - for (var k in v) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') continue - var to = typeof v[k] - if (to === 'function' || to === 'undefined') continue - soFar += k + ':' - ch(v[k], depth + 1) - } - soFar += '}' - } - ch(obj, 0) - return soFar -} - - -function flatten (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - for (var k in v) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') continue - var to = typeof v[k] - if (to === 'function' || to === 'undefined') continue - soFar += k + ':' - ch(v[k], depth + 1) - soFar += ',' - } - soFar += '}' - } - ch(obj, 0) - return soFar -} - -exports.compare = -{ - // 'custom 2': function () { - // return custom(test, 2, 0) - // }, - // 'customWs 2': function () { - // return customWs(test, 2, 0) - // }, - 'JSON.stringify (guarded)': function () { - var seen = [] - return JSON.stringify(test, function (k, v) { - if (typeof v !== 'object' || !v) return v - if (seen.indexOf(v) !== -1) return undefined - seen.push(v) - return v - }) - }, - - 'flatten 10': function () { - return flatten(test, 10) - }, - - // 'flattenFE 10': function () { - // return flattenFE(test, 10) - // }, - - 'noCommas 10': function () { - return noCommas(test, 10) - }, - - 'sparse 10': function () { - return sparse(test, 10) - }, - - 'sparseFE 10': function () { - return sparseFE(test, 10) - }, - - 'sparseFE2 10': function () { - return sparseFE2(test, 10) - }, - - sigmund: function() { - return sigmund(test, 10) - }, - - - // 'util.inspect 1': function () { - // return util.inspect(test, false, 1, false) - // }, - // 'util.inspect undefined': function () { - // util.inspect(test) - // }, - // 'util.inspect 2': function () { - // util.inspect(test, false, 2, false) - // }, - // 'util.inspect 3': function () { - // util.inspect(test, false, 3, false) - // }, - // 'util.inspect 4': function () { - // util.inspect(test, false, 4, false) - // }, - // 'util.inspect Infinity': function () { - // util.inspect(test, false, Infinity, false) - // } -} - -/** results -**/ diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json deleted file mode 100644 index cb7e2bd4..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "sigmund", - "version": "1.0.0", - "description": "Quick and dirty signatures for Objects.", - "main": "sigmund.js", - "directories": { - "test": "test" - }, - "dependencies": {}, - "devDependencies": { - "tap": "~0.3.0" - }, - "scripts": { - "test": "tap test/*.js", - "bench": "node bench.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/sigmund" - }, - "keywords": [ - "object", - "signature", - "key", - "data", - "psychoanalysis" - ], - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "license": "BSD", - "readme": "# sigmund\n\nQuick and dirty signatures for Objects.\n\nThis is like a much faster `deepEquals` comparison, which returns a\nstring key suitable for caches and the like.\n\n## Usage\n\n```javascript\nfunction doSomething (someObj) {\n var key = sigmund(someObj, maxDepth) // max depth defaults to 10\n var cached = cache.get(key)\n if (cached) return cached)\n\n var result = expensiveCalculation(someObj)\n cache.set(key, result)\n return result\n}\n```\n\nThe resulting key will be as unique and reproducible as calling\n`JSON.stringify` or `util.inspect` on the object, but is much faster.\nIn order to achieve this speed, some differences are glossed over.\nFor example, the object `{0:'foo'}` will be treated identically to the\narray `['foo']`.\n\nAlso, just as there is no way to summon the soul from the scribblings\nof a cocain-addled psychoanalyst, there is no way to revive the object\nfrom the signature string that sigmund gives you. In fact, it's\nbarely even readable.\n\nAs with `sys.inspect` and `JSON.stringify`, larger objects will\nproduce larger signature strings.\n\nBecause sigmund is a bit less strict than the more thorough\nalternatives, the strings will be shorter, and also there is a\nslightly higher chance for collisions. For example, these objects\nhave the same signature:\n\n var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}\n var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}\n\nLike a good Freudian, sigmund is most effective when you already have\nsome understanding of what you're looking for. It can help you help\nyourself, but you must be willing to do some work as well.\n\nCycles are handled, and cyclical objects are silently omitted (though\nthe key is included in the signature output.)\n\nThe second argument is the maximum depth, which defaults to 10,\nbecause that is the maximum object traversal depth covered by most\ninsurance carriers.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/sigmund/issues" - }, - "homepage": "https://github.com/isaacs/sigmund", - "_id": "sigmund@1.0.0", - "_from": "sigmund@~1.0.0" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js deleted file mode 100644 index 82c7ab8c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js +++ /dev/null @@ -1,39 +0,0 @@ -module.exports = sigmund -function sigmund (subject, maxSessions) { - maxSessions = maxSessions || 10; - var notes = []; - var analysis = ''; - var RE = RegExp; - - function psychoAnalyze (subject, session) { - if (session > maxSessions) return; - - if (typeof subject === 'function' || - typeof subject === 'undefined') { - return; - } - - if (typeof subject !== 'object' || !subject || - (subject instanceof RE)) { - analysis += subject; - return; - } - - if (notes.indexOf(subject) !== -1 || session === maxSessions) return; - - notes.push(subject); - analysis += '{'; - Object.keys(subject).forEach(function (issue, _, __) { - // pseudo-private values. skip those. - if (issue.charAt(0) === '_') return; - var to = typeof subject[issue]; - if (to === 'function' || to === 'undefined') return; - analysis += issue; - psychoAnalyze(subject[issue], session + 1); - }); - } - psychoAnalyze(subject, 0); - return analysis; -} - -// vim: set softtabstop=4 shiftwidth=4: diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js deleted file mode 100644 index 50c53a13..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js +++ /dev/null @@ -1,24 +0,0 @@ -var test = require('tap').test -var sigmund = require('../sigmund.js') - - -// occasionally there are duplicates -// that's an acceptable edge-case. JSON.stringify and util.inspect -// have some collision potential as well, though less, and collision -// detection is expensive. -var hash = '{abc/def/g{0h1i2{jkl' -var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} -var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} - -var obj3 = JSON.parse(JSON.stringify(obj1)) -obj3.c = /def/ -obj3.g[2].cycle = obj3 -var cycleHash = '{abc/def/g{0h1i2{jklcycle' - -test('basic', function (t) { - t.equal(sigmund(obj1), hash) - t.equal(sigmund(obj2), hash) - t.equal(sigmund(obj3), cycleHash) - t.end() -}) - diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/package.json deleted file mode 100644 index f8f545aa..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "minimatch", - "description": "a glob matcher in javascript", - "version": "0.2.14", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "main": "minimatch.js", - "scripts": { - "test": "tap test/*.js" - }, - "engines": { - "node": "*" - }, - "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" - }, - "devDependencies": { - "tap": "" - }, - "license": { - "type": "MIT", - "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE" - }, - "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nEventually, it will replace the C binding in node-glob.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\nminimatch(\"bar.foo\", \"*.+(bar|foo)\", { debug: true }) // true, and noisy!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n Each row in the\n array corresponds to a brace-expanded pattern. Each item in the row\n corresponds to a single path-part. For example, the pattern\n `{a,b/c}/d` would expand to a set of patterns like:\n\n [ [ a, d ]\n , [ b, c, d ] ]\n\n If a portion of the pattern doesn't have any \"magic\" in it\n (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n will be left as a string rather than converted to a regular\n expression.\n\n* `regexp` Created by the `makeRe` method. A single regular expression\n expressing the entire pattern. This is useful in cases where you wish\n to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n filename, and match it against a single row in the `regExpSet`. This\n method is mainly for internal use, but is exposed so that it can be\n used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items. So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export. Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`. Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob. If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself. When set, an empty list is returned if there are\nno matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes. For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/minimatch/issues" - }, - "homepage": "https://github.com/isaacs/minimatch", - "_id": "minimatch@0.2.14", - "_from": "minimatch@~0.2.11" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/basic.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/basic.js deleted file mode 100644 index ae7ac73c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/basic.js +++ /dev/null @@ -1,399 +0,0 @@ -// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test -// -// TODO: Some of these tests do very bad things with backslashes, and will -// most likely fail badly on windows. They should probably be skipped. - -var tap = require("tap") - , globalBefore = Object.keys(global) - , mm = require("../") - , files = [ "a", "b", "c", "d", "abc" - , "abd", "abe", "bb", "bcd" - , "ca", "cb", "dd", "de" - , "bdir/", "bdir/cfile"] - , next = files.concat([ "a-b", "aXb" - , ".x", ".y" ]) - - -var patterns = - [ "http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test" - , ["a*", ["a", "abc", "abd", "abe"]] - , ["X*", ["X*"], {nonull: true}] - - // allow null glob expansion - , ["X*", []] - - // isaacs: Slightly different than bash/sh/ksh - // \\* is not un-escaped to literal "*" in a failed match, - // but it does make it get treated as a literal star - , ["\\*", ["\\*"], {nonull: true}] - , ["\\**", ["\\**"], {nonull: true}] - , ["\\*\\*", ["\\*\\*"], {nonull: true}] - - , ["b*/", ["bdir/"]] - , ["c*", ["c", "ca", "cb"]] - , ["**", files] - - , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}] - , ["s/\\..*//", ["s/\\..*//"], {nonull: true}] - - , "legendary larry crashes bashes" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}] - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}] - - , "character classes" - , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] - , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", - "bdir/", "ca", "cb", "dd", "de"]] - , ["a*[^c]", ["abd", "abe"]] - , function () { files.push("a-b", "aXb") } - , ["a[X-]b", ["a-b", "aXb"]] - , function () { files.push(".x", ".y") } - , ["[^a-c]*", ["d", "dd", "de"]] - , function () { files.push("a*b/", "a*b/ooo") } - , ["a\\*b/*", ["a*b/ooo"]] - , ["a\\*?/*", ["a*b/ooo"]] - , ["*\\\\!*", [], {null: true}, ["echo !7"]] - , ["*\\!*", ["echo !7"], null, ["echo !7"]] - , ["*.\\*", ["r.*"], null, ["r.*"]] - , ["a[b]c", ["abc"]] - , ["a[\\b]c", ["abc"]] - , ["a?c", ["abc"]] - , ["a\\*c", [], {null: true}, ["abc"]] - , ["", [""], { null: true }, [""]] - - , "http://www.opensource.apple.com/source/bash/bash-23/" + - "bash/tests/glob-test" - , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } - , ["*/man*/bash.*", ["man/man1/bash.1"]] - , ["man/man1/bash.1", ["man/man1/bash.1"]] - , ["a***c", ["abc"], null, ["abc"]] - , ["a*****?c", ["abc"], null, ["abc"]] - , ["?*****??", ["abc"], null, ["abc"]] - , ["*****??", ["abc"], null, ["abc"]] - , ["?*****?c", ["abc"], null, ["abc"]] - , ["?***?****c", ["abc"], null, ["abc"]] - , ["?***?****?", ["abc"], null, ["abc"]] - , ["?***?****", ["abc"], null, ["abc"]] - , ["*******c", ["abc"], null, ["abc"]] - , ["*******?", ["abc"], null, ["abc"]] - , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["[-abc]", ["-"], null, ["-"]] - , ["[abc-]", ["-"], null, ["-"]] - , ["\\", ["\\"], null, ["\\"]] - , ["[\\\\]", ["\\"], null, ["\\"]] - , ["[[]", ["["], null, ["["]] - , ["[", ["["], null, ["["]] - , ["[*", ["[abc"], null, ["[abc"]] - , "a right bracket shall lose its special meaning and\n" + - "represent itself in a bracket expression if it occurs\n" + - "first in the list. -- POSIX.2 2.8.3.2" - , ["[]]", ["]"], null, ["]"]] - , ["[]-]", ["]"], null, ["]"]] - , ["[a-\z]", ["p"], null, ["p"]] - , ["??**********?****?", [], { null: true }, ["abc"]] - , ["??**********?****c", [], { null: true }, ["abc"]] - , ["?************c****?****", [], { null: true }, ["abc"]] - , ["*c*?**", [], { null: true }, ["abc"]] - , ["a*****c*?**", [], { null: true }, ["abc"]] - , ["a********???*******", [], { null: true }, ["abc"]] - , ["[]", [], { null: true }, ["a"]] - , ["[abc", [], { null: true }, ["["]] - - , "nocase tests" - , ["XYZ", ["xYz"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["ab*", ["ABC"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - - // [ pattern, [matches], MM opts, files, TAP opts] - , "onestar/twostar" - , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]] - , ["{/?,*}", ["/a", "bb"], {null: true} - , ["/a", "/b/b", "/a/b/c", "bb"]] - - , "dots should not match unless requested" - , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]] - - // .. and . can only match patterns starting with ., - // even when options.dot is set. - , function () { - files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"] - } - , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}] - , ["a/*/b", ["a/c/b"], {dot:false}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}] - - - // this also tests that changing the options needs - // to change the cache key, even if the pattern is - // the same! - , ["**", ["a/b","a/.d",".a/.d"], { dot: true } - , [ ".a/.d", "a/.d", "a/b"]] - - , "paren sets cannot contain slashes" - , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]] - - // brace sets trump all else. - // - // invalid glob pattern. fails on bash4 and bsdglob. - // however, in this implementation, it's easier just - // to do the intuitive thing, and let brace-expansion - // actually come before parsing any extglob patterns, - // like the documentation seems to say. - // - // XXX: if anyone complains about this, either fix it - // or tell them to grow up and stop complaining. - // - // bash/bsdglob says this: - // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]] - // but we do this instead: - , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]] - - // test partial parsing in the presence of comment/negation chars - , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]] - , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]] - - // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped. - , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g" - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"] - , {} - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]] - - - // crazy nested {,,} and *(||) tests. - , function () { - files = [ "a", "b", "c", "d" - , "ab", "ac", "ad" - , "bc", "cb" - , "bc,d", "c,db", "c,d" - , "d)", "(b|c", "*(b|c" - , "b|c", "b|cc", "cb|c" - , "x(a|b|c)", "x(a|c)" - , "(a|b|c)", "(a|c)"] - } - , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]] - , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]] - // a - // *(b|c) - // *(b|d) - , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]] - , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]] - - - // test various flag settings. - , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"] - , { noext: true } ] - , ["a?b", ["x/y/acb", "acb/"], {matchBase: true} - , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ] - , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]] - - - // begin channelling Boole and deMorgan... - , "negation tests" - , function () { - files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"] - } - - // anything that is NOT a* matches. - , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]] - - // anything that IS !a* matches. - , ["!a*", ["!ab", "!abc"], {nonegate: true}] - - // anything that IS a* matches - , ["!!a*", ["a!b"]] - - // anything that is NOT !a* matches - , ["!\\!a*", ["a!b", "d", "e", "\\!a"]] - - // negation nestled within a pattern - , function () { - files = [ "foo.js" - , "foo.bar" - // can't match this one without negative lookbehind. - , "foo.js.js" - , "blar.js" - , "foo." - , "boo.js.boo" ] - } - , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ] - - // https://github.com/isaacs/minimatch/issues/5 - , function () { - files = [ 'a/b/.x/c' - , 'a/b/.x/c/d' - , 'a/b/.x/c/d/e' - , 'a/b/.x' - , 'a/b/.x/' - , 'a/.x/b' - , '.x' - , '.x/' - , '.x/a' - , '.x/a/b' - , 'a/.x/b/.x/c' - , '.x/.x' ] - } - , ["**/.x/**", [ '.x/' - , '.x/a' - , '.x/a/b' - , 'a/.x/b' - , 'a/b/.x/' - , 'a/b/.x/c' - , 'a/b/.x/c/d' - , 'a/b/.x/c/d/e' ] ] - - ] - -var regexps = - [ '/^(?:(?=.)a[^/]*?)$/', - '/^(?:(?=.)X[^/]*?)$/', - '/^(?:(?=.)X[^/]*?)$/', - '/^(?:\\*)$/', - '/^(?:(?=.)\\*[^/]*?)$/', - '/^(?:\\*\\*)$/', - '/^(?:(?=.)b[^/]*?\\/)$/', - '/^(?:(?=.)c[^/]*?)$/', - '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/', - '/^(?:\\.\\.\\/(?!\\.)(?=.)[^/]*?\\/)$/', - '/^(?:s\\/(?=.)\\.\\.[^/]*?\\/)$/', - '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/1\\/)$/', - '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/\u0001\\/)$/', - '/^(?:(?!\\.)(?=.)[a-c]b[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[a-y][^/]*?[^c])$/', - '/^(?:(?=.)a[^/]*?[^c])$/', - '/^(?:(?=.)a[X-]b)$/', - '/^(?:(?!\\.)(?=.)[^a-c][^/]*?)$/', - '/^(?:a\\*b\\/(?!\\.)(?=.)[^/]*?)$/', - '/^(?:(?=.)a\\*[^/]\\/(?!\\.)(?=.)[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\\\\\![^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\![^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\.\\*)$/', - '/^(?:(?=.)a[b]c)$/', - '/^(?:(?=.)a[b]c)$/', - '/^(?:(?=.)a[^/]c)$/', - '/^(?:a\\*c)$/', - 'false', - '/^(?:(?!\\.)(?=.)[^/]*?\\/(?=.)man[^/]*?\\/(?=.)bash\\.[^/]*?)$/', - '/^(?:man\\/man1\\/bash\\.1)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?c)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/', - '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c)$/', - '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', - '/^(?:(?=.)a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[-abc])$/', - '/^(?:(?!\\.)(?=.)[abc-])$/', - '/^(?:\\\\)$/', - '/^(?:(?!\\.)(?=.)[\\\\])$/', - '/^(?:(?!\\.)(?=.)[\\[])$/', - '/^(?:\\[)$/', - '/^(?:(?=.)\\[(?!\\.)(?=.)[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[\\]])$/', - '/^(?:(?!\\.)(?=.)[\\]-])$/', - '/^(?:(?!\\.)(?=.)[a-z])$/', - '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', - '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/', - '/^(?:\\[\\])$/', - '/^(?:\\[abc)$/', - '/^(?:(?=.)XYZ)$/i', - '/^(?:(?=.)ab[^/]*?)$/i', - '/^(?:(?!\\.)(?=.)[ia][^/][ck])$/i', - '/^(?:\\/(?!\\.)(?=.)[^/]*?|(?!\\.)(?=.)[^/]*?)$/', - '/^(?:\\/(?!\\.)(?=.)[^/]|(?!\\.)(?=.)[^/]*?)$/', - '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/', - '/^(?:a\\/(?!(?:^|\\/)\\.{1,2}(?:$|\\/))(?=.)[^/]*?\\/b)$/', - '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/', - '/^(?:a\\/(?!\\.)(?=.)[^/]*?\\/b)$/', - '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/', - '/^(?:(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\/b\\))$/', - '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/', - '/^(?:(?=.)\\[(?=.)\\!a[^/]*?)$/', - '/^(?:(?=.)\\[(?=.)#a[^/]*?)$/', - '/^(?:(?=.)\\+\\(a\\|[^/]*?\\|c\\\\\\\\\\|d\\\\\\\\\\|e\\\\\\\\\\\\\\\\\\|f\\\\\\\\\\\\\\\\\\|g)$/', - '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/', - '/^(?:a|(?!\\.)(?=.)[^/]*?\\(b\\|c|d\\))$/', - '/^(?:a|(?!\\.)(?=.)(?:b|c)*|(?!\\.)(?=.)(?:b|d)*)$/', - '/^(?:(?!\\.)(?=.)(?:a|b|c)*|(?!\\.)(?=.)(?:a|c)*)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\|b\\|c\\)|(?!\\.)(?=.)[^/]*?\\(a\\|c\\))$/', - '/^(?:(?=.)a[^/]b)$/', - '/^(?:(?=.)#[^/]*?)$/', - '/^(?!^(?:(?=.)a[^/]*?)$).*$/', - '/^(?:(?=.)\\!a[^/]*?)$/', - '/^(?:(?=.)a[^/]*?)$/', - '/^(?!^(?:(?=.)\\!a[^/]*?)$).*$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\.(?:(?!js)[^/]*?))$/', - '/^(?:(?:(?!(?:\\/|^)\\.).)*?\\/\\.x\\/(?:(?!(?:\\/|^)\\.).)*?)$/' ] -var re = 0; - -tap.test("basic tests", function (t) { - var start = Date.now() - - // [ pattern, [matches], MM opts, files, TAP opts] - patterns.forEach(function (c) { - if (typeof c === "function") return c() - if (typeof c === "string") return t.comment(c) - - var pattern = c[0] - , expect = c[1].sort(alpha) - , options = c[2] || {} - , f = c[3] || files - , tapOpts = c[4] || {} - - // options.debug = true - var m = new mm.Minimatch(pattern, options) - var r = m.makeRe() - var expectRe = regexps[re++] - tapOpts.re = String(r) || JSON.stringify(r) - tapOpts.files = JSON.stringify(f) - tapOpts.pattern = pattern - tapOpts.set = m.set - tapOpts.negated = m.negate - - var actual = mm.match(f, pattern, options) - actual.sort(alpha) - - t.equivalent( actual, expect - , JSON.stringify(pattern) + " " + JSON.stringify(expect) - , tapOpts ) - - t.equal(tapOpts.re, expectRe, tapOpts) - }) - - t.comment("time=" + (Date.now() - start) + "ms") - t.end() -}) - -tap.test("global leak test", function (t) { - var globalAfter = Object.keys(global) - t.equivalent(globalAfter, globalBefore, "no new globals, please") - t.end() -}) - -function alpha (a, b) { - return a > b ? 1 : -1 -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/brace-expand.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/brace-expand.js deleted file mode 100644 index 7ee278a2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/brace-expand.js +++ /dev/null @@ -1,33 +0,0 @@ -var tap = require("tap") - , minimatch = require("../") - -tap.test("brace expansion", function (t) { - // [ pattern, [expanded] ] - ; [ [ "a{b,c{d,e},{f,g}h}x{y,z}" - , [ "abxy" - , "abxz" - , "acdxy" - , "acdxz" - , "acexy" - , "acexz" - , "afhxy" - , "afhxz" - , "aghxy" - , "aghxz" ] ] - , [ "a{1..5}b" - , [ "a1b" - , "a2b" - , "a3b" - , "a4b" - , "a5b" ] ] - , [ "a{b}c", ["a{b}c"] ] - ].forEach(function (tc) { - var p = tc[0] - , expect = tc[1] - t.equivalent(minimatch.braceExpand(p), expect, p) - }) - console.error("ending") - t.end() -}) - - diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/caching.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/caching.js deleted file mode 100644 index 0fec4b0f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/caching.js +++ /dev/null @@ -1,14 +0,0 @@ -var Minimatch = require("../minimatch.js").Minimatch -var tap = require("tap") -tap.test("cache test", function (t) { - var mm1 = new Minimatch("a?b") - var mm2 = new Minimatch("a?b") - t.equal(mm1, mm2, "should get the same object") - // the lru should drop it after 100 entries - for (var i = 0; i < 100; i ++) { - new Minimatch("a"+i) - } - mm2 = new Minimatch("a?b") - t.notEqual(mm1, mm2, "cache should have dropped") - t.end() -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/defaults.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/defaults.js deleted file mode 100644 index 25f1f601..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/defaults.js +++ /dev/null @@ -1,274 +0,0 @@ -// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test -// -// TODO: Some of these tests do very bad things with backslashes, and will -// most likely fail badly on windows. They should probably be skipped. - -var tap = require("tap") - , globalBefore = Object.keys(global) - , mm = require("../") - , files = [ "a", "b", "c", "d", "abc" - , "abd", "abe", "bb", "bcd" - , "ca", "cb", "dd", "de" - , "bdir/", "bdir/cfile"] - , next = files.concat([ "a-b", "aXb" - , ".x", ".y" ]) - -tap.test("basic tests", function (t) { - var start = Date.now() - - // [ pattern, [matches], MM opts, files, TAP opts] - ; [ "http://www.bashcookbook.com/bashinfo" + - "/source/bash-1.14.7/tests/glob-test" - , ["a*", ["a", "abc", "abd", "abe"]] - , ["X*", ["X*"], {nonull: true}] - - // allow null glob expansion - , ["X*", []] - - // isaacs: Slightly different than bash/sh/ksh - // \\* is not un-escaped to literal "*" in a failed match, - // but it does make it get treated as a literal star - , ["\\*", ["\\*"], {nonull: true}] - , ["\\**", ["\\**"], {nonull: true}] - , ["\\*\\*", ["\\*\\*"], {nonull: true}] - - , ["b*/", ["bdir/"]] - , ["c*", ["c", "ca", "cb"]] - , ["**", files] - - , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}] - , ["s/\\..*//", ["s/\\..*//"], {nonull: true}] - - , "legendary larry crashes bashes" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}] - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}] - - , "character classes" - , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] - , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", - "bdir/", "ca", "cb", "dd", "de"]] - , ["a*[^c]", ["abd", "abe"]] - , function () { files.push("a-b", "aXb") } - , ["a[X-]b", ["a-b", "aXb"]] - , function () { files.push(".x", ".y") } - , ["[^a-c]*", ["d", "dd", "de"]] - , function () { files.push("a*b/", "a*b/ooo") } - , ["a\\*b/*", ["a*b/ooo"]] - , ["a\\*?/*", ["a*b/ooo"]] - , ["*\\\\!*", [], {null: true}, ["echo !7"]] - , ["*\\!*", ["echo !7"], null, ["echo !7"]] - , ["*.\\*", ["r.*"], null, ["r.*"]] - , ["a[b]c", ["abc"]] - , ["a[\\b]c", ["abc"]] - , ["a?c", ["abc"]] - , ["a\\*c", [], {null: true}, ["abc"]] - , ["", [""], { null: true }, [""]] - - , "http://www.opensource.apple.com/source/bash/bash-23/" + - "bash/tests/glob-test" - , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } - , ["*/man*/bash.*", ["man/man1/bash.1"]] - , ["man/man1/bash.1", ["man/man1/bash.1"]] - , ["a***c", ["abc"], null, ["abc"]] - , ["a*****?c", ["abc"], null, ["abc"]] - , ["?*****??", ["abc"], null, ["abc"]] - , ["*****??", ["abc"], null, ["abc"]] - , ["?*****?c", ["abc"], null, ["abc"]] - , ["?***?****c", ["abc"], null, ["abc"]] - , ["?***?****?", ["abc"], null, ["abc"]] - , ["?***?****", ["abc"], null, ["abc"]] - , ["*******c", ["abc"], null, ["abc"]] - , ["*******?", ["abc"], null, ["abc"]] - , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["[-abc]", ["-"], null, ["-"]] - , ["[abc-]", ["-"], null, ["-"]] - , ["\\", ["\\"], null, ["\\"]] - , ["[\\\\]", ["\\"], null, ["\\"]] - , ["[[]", ["["], null, ["["]] - , ["[", ["["], null, ["["]] - , ["[*", ["[abc"], null, ["[abc"]] - , "a right bracket shall lose its special meaning and\n" + - "represent itself in a bracket expression if it occurs\n" + - "first in the list. -- POSIX.2 2.8.3.2" - , ["[]]", ["]"], null, ["]"]] - , ["[]-]", ["]"], null, ["]"]] - , ["[a-\z]", ["p"], null, ["p"]] - , ["??**********?****?", [], { null: true }, ["abc"]] - , ["??**********?****c", [], { null: true }, ["abc"]] - , ["?************c****?****", [], { null: true }, ["abc"]] - , ["*c*?**", [], { null: true }, ["abc"]] - , ["a*****c*?**", [], { null: true }, ["abc"]] - , ["a********???*******", [], { null: true }, ["abc"]] - , ["[]", [], { null: true }, ["a"]] - , ["[abc", [], { null: true }, ["["]] - - , "nocase tests" - , ["XYZ", ["xYz"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["ab*", ["ABC"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - - // [ pattern, [matches], MM opts, files, TAP opts] - , "onestar/twostar" - , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]] - , ["{/?,*}", ["/a", "bb"], {null: true} - , ["/a", "/b/b", "/a/b/c", "bb"]] - - , "dots should not match unless requested" - , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]] - - // .. and . can only match patterns starting with ., - // even when options.dot is set. - , function () { - files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"] - } - , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}] - , ["a/*/b", ["a/c/b"], {dot:false}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}] - - - // this also tests that changing the options needs - // to change the cache key, even if the pattern is - // the same! - , ["**", ["a/b","a/.d",".a/.d"], { dot: true } - , [ ".a/.d", "a/.d", "a/b"]] - - , "paren sets cannot contain slashes" - , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]] - - // brace sets trump all else. - // - // invalid glob pattern. fails on bash4 and bsdglob. - // however, in this implementation, it's easier just - // to do the intuitive thing, and let brace-expansion - // actually come before parsing any extglob patterns, - // like the documentation seems to say. - // - // XXX: if anyone complains about this, either fix it - // or tell them to grow up and stop complaining. - // - // bash/bsdglob says this: - // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]] - // but we do this instead: - , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]] - - // test partial parsing in the presence of comment/negation chars - , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]] - , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]] - - // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped. - , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g" - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"] - , {} - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]] - - - // crazy nested {,,} and *(||) tests. - , function () { - files = [ "a", "b", "c", "d" - , "ab", "ac", "ad" - , "bc", "cb" - , "bc,d", "c,db", "c,d" - , "d)", "(b|c", "*(b|c" - , "b|c", "b|cc", "cb|c" - , "x(a|b|c)", "x(a|c)" - , "(a|b|c)", "(a|c)"] - } - , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]] - , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]] - // a - // *(b|c) - // *(b|d) - , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]] - , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]] - - - // test various flag settings. - , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"] - , { noext: true } ] - , ["a?b", ["x/y/acb", "acb/"], {matchBase: true} - , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ] - , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]] - - - // begin channelling Boole and deMorgan... - , "negation tests" - , function () { - files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"] - } - - // anything that is NOT a* matches. - , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]] - - // anything that IS !a* matches. - , ["!a*", ["!ab", "!abc"], {nonegate: true}] - - // anything that IS a* matches - , ["!!a*", ["a!b"]] - - // anything that is NOT !a* matches - , ["!\\!a*", ["a!b", "d", "e", "\\!a"]] - - // negation nestled within a pattern - , function () { - files = [ "foo.js" - , "foo.bar" - // can't match this one without negative lookbehind. - , "foo.js.js" - , "blar.js" - , "foo." - , "boo.js.boo" ] - } - , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ] - - ].forEach(function (c) { - if (typeof c === "function") return c() - if (typeof c === "string") return t.comment(c) - - var pattern = c[0] - , expect = c[1].sort(alpha) - , options = c[2] || {} - , f = c[3] || files - , tapOpts = c[4] || {} - - // options.debug = true - var Class = mm.defaults(options).Minimatch - var m = new Class(pattern, {}) - var r = m.makeRe() - tapOpts.re = String(r) || JSON.stringify(r) - tapOpts.files = JSON.stringify(f) - tapOpts.pattern = pattern - tapOpts.set = m.set - tapOpts.negated = m.negate - - var actual = mm.match(f, pattern, options) - actual.sort(alpha) - - t.equivalent( actual, expect - , JSON.stringify(pattern) + " " + JSON.stringify(expect) - , tapOpts ) - }) - - t.comment("time=" + (Date.now() - start) + "ms") - t.end() -}) - -tap.test("global leak test", function (t) { - var globalAfter = Object.keys(global) - t.equivalent(globalAfter, globalBefore, "no new globals, please") - t.end() -}) - -function alpha (a, b) { - return a > b ? 1 : -1 -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js deleted file mode 100644 index 6676e262..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js +++ /dev/null @@ -1,8 +0,0 @@ -var test = require('tap').test -var minimatch = require('../') - -test('extglob ending with statechar', function(t) { - t.notOk(minimatch('ax', 'a?(b*)')) - t.ok(minimatch('ax', '?(a*|b)')) - t.end() -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/package.json deleted file mode 100644 index bfbbbcca..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "glob", - "description": "a little globber", - "version": "3.2.3", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-glob.git" - }, - "main": "glob.js", - "engines": { - "node": "*" - }, - "dependencies": { - "minimatch": "~0.2.11", - "graceful-fs": "~2.0.0", - "inherits": "2" - }, - "devDependencies": { - "tap": "~0.4.0", - "mkdirp": "0", - "rimraf": "1" - }, - "scripts": { - "test": "tap test/*.js" - }, - "license": "BSD", - "readme": "# Glob\n\nMatch files using the patterns the shell uses, like stars and stuff.\n\nThis is a glob implementation in JavaScript. It uses the `minimatch`\nlibrary to do its matching.\n\n## Attention: node-glob users!\n\nThe API has changed dramatically between 2.x and 3.x. This library is\nnow 100% JavaScript, and the integer flags have been replaced with an\noptions object.\n\nAlso, there's an event emitter class, proper tests, and all the other\nthings you've come to expect from node modules.\n\nAnd best of all, no compilation!\n\n## Usage\n\n```javascript\nvar glob = require(\"glob\")\n\n// options is optional\nglob(\"**/*.js\", options, function (er, files) {\n // files is an array of filenames.\n // If the `nonull` option is set, and nothing\n // was found, then files is [\"**/*.js\"]\n // er is an error object or null.\n})\n```\n\n## Features\n\nPlease see the [minimatch\ndocumentation](https://github.com/isaacs/minimatch) for more details.\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n* [minimatch documentation](https://github.com/isaacs/minimatch)\n\n## glob(pattern, [options], cb)\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* `cb` {Function}\n * `err` {Error | null}\n * `matches` {Array} filenames found matching the pattern\n\nPerform an asynchronous glob search.\n\n## glob.sync(pattern, [options])\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* return: {Array} filenames found matching the pattern\n\nPerform a synchronous glob search.\n\n## Class: glob.Glob\n\nCreate a Glob object by instanting the `glob.Glob` class.\n\n```javascript\nvar Glob = require(\"glob\").Glob\nvar mg = new Glob(pattern, options, cb)\n```\n\nIt's an EventEmitter, and starts walking the filesystem to find matches\nimmediately.\n\n### new glob.Glob(pattern, [options], [cb])\n\n* `pattern` {String} pattern to search for\n* `options` {Object}\n* `cb` {Function} Called when an error occurs, or matches are found\n * `err` {Error | null}\n * `matches` {Array} filenames found matching the pattern\n\nNote that if the `sync` flag is set in the options, then matches will\nbe immediately available on the `g.found` member.\n\n### Properties\n\n* `minimatch` The minimatch object that the glob uses.\n* `options` The options object passed in.\n* `error` The error encountered. When an error is encountered, the\n glob object is in an undefined state, and should be discarded.\n* `aborted` Boolean which is set to true when calling `abort()`. There\n is no way at this time to continue a glob search after aborting, but\n you can re-use the statCache to avoid having to duplicate syscalls.\n* `statCache` Collection of all the stat results the glob search\n performed.\n* `cache` Convenience object. Each field has the following possible\n values:\n * `false` - Path does not exist\n * `true` - Path exists\n * `1` - Path exists, and is not a directory\n * `2` - Path exists, and is a directory\n * `[file, entries, ...]` - Path exists, is a directory, and the\n array value is the results of `fs.readdir`\n\n### Events\n\n* `end` When the matching is finished, this is emitted with all the\n matches found. If the `nonull` option is set, and no match was found,\n then the `matches` list contains the original pattern. The matches\n are sorted, unless the `nosort` flag is set.\n* `match` Every time a match is found, this is emitted with the matched.\n* `error` Emitted when an unexpected error is encountered, or whenever\n any fs error occurs if `options.strict` is set.\n* `abort` When `abort()` is called, this event is raised.\n\n### Methods\n\n* `abort` Stop the search.\n\n### Options\n\nAll the options that can be passed to Minimatch can also be passed to\nGlob to change pattern matching behavior. Also, some have been added,\nor have glob-specific ramifications.\n\nAll options are false by default, unless otherwise noted.\n\nAll options are added to the glob object, as well.\n\n* `cwd` The current working directory in which to search. Defaults\n to `process.cwd()`.\n* `root` The place where patterns starting with `/` will be mounted\n onto. Defaults to `path.resolve(options.cwd, \"/\")` (`/` on Unix\n systems, and `C:\\` or some such on Windows.)\n* `dot` Include `.dot` files in normal matches and `globstar` matches.\n Note that an explicit dot in a portion of the pattern will always\n match dot files.\n* `nomount` By default, a pattern starting with a forward-slash will be\n \"mounted\" onto the root setting, so that a valid filesystem path is\n returned. Set this flag to disable that behavior.\n* `mark` Add a `/` character to directory matches. Note that this\n requires additional stat calls.\n* `nosort` Don't sort the results.\n* `stat` Set to true to stat *all* results. This reduces performance\n somewhat, and is completely unnecessary, unless `readdir` is presumed\n to be an untrustworthy indicator of file existence. It will cause\n ELOOP to be triggered one level sooner in the case of cyclical\n symbolic links.\n* `silent` When an unusual error is encountered\n when attempting to read a directory, a warning will be printed to\n stderr. Set the `silent` option to true to suppress these warnings.\n* `strict` When an unusual error is encountered\n when attempting to read a directory, the process will just continue on\n in search of other matches. Set the `strict` option to raise an error\n in these cases.\n* `cache` See `cache` property above. Pass in a previously generated\n cache object to save some fs calls.\n* `statCache` A cache of results of filesystem information, to prevent\n unnecessary stat calls. While it should not normally be necessary to\n set this, you may pass the statCache from one glob() call to the\n options object of another, if you know that the filesystem will not\n change between calls. (See \"Race Conditions\" below.)\n* `sync` Perform a synchronous glob search.\n* `nounique` In some cases, brace-expanded patterns can result in the\n same file showing up multiple times in the result set. By default,\n this implementation prevents duplicates in the result set.\n Set this flag to disable that behavior.\n* `nonull` Set to never return an empty set, instead returning a set\n containing the pattern itself. This is the default in glob(3).\n* `nocase` Perform a case-insensitive match. Note that case-insensitive\n filesystems will sometimes result in glob returning results that are\n case-insensitively matched anyway, since readdir and stat will not\n raise an error.\n* `debug` Set to enable debug logging in minimatch and glob.\n* `globDebug` Set to enable debug logging in glob, but not minimatch.\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between node-glob and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen glob returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`glob.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n\n## Windows\n\n**Please only use forward-slashes in glob expressions.**\n\nThough windows uses either `/` or `\\` as its path separator, only `/`\ncharacters are used by this glob implementation. You must use\nforward-slashes **only** in glob expressions. Back-slashes will always\nbe interpreted as escape characters, not path separators.\n\nResults from absolute patterns such as `/foo/*` are mounted onto the\nroot setting using `path.join`. On windows, this will by default result\nin `/foo/*` matching `C:\\foo\\bar.txt`.\n\n## Race Conditions\n\nGlob searching, by its very nature, is susceptible to race conditions,\nsince it relies on directory walking and such.\n\nAs a result, it is possible that a file that exists when glob looks for\nit may have been deleted or modified by the time it returns the result.\n\nAs part of its internal implementation, this program caches all stat\nand readdir calls that it makes, in order to cut down on system\noverhead. However, this also makes it even more susceptible to races,\nespecially if the cache or statCache objects are reused between glob\ncalls.\n\nUsers are thus advised not to use a glob result as a guarantee of\nfilesystem state in the face of rapid changes. For the vast majority\nof operations, this is never a problem.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-glob/issues" - }, - "homepage": "https://github.com/isaacs/node-glob", - "_id": "glob@3.2.3", - "_from": "glob@3.2.3" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/00-setup.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/00-setup.js deleted file mode 100644 index 245afafd..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/00-setup.js +++ /dev/null @@ -1,176 +0,0 @@ -// just a little pre-run script to set up the fixtures. -// zz-finish cleans it up - -var mkdirp = require("mkdirp") -var path = require("path") -var i = 0 -var tap = require("tap") -var fs = require("fs") -var rimraf = require("rimraf") - -var files = -[ "a/.abcdef/x/y/z/a" -, "a/abcdef/g/h" -, "a/abcfed/g/h" -, "a/b/c/d" -, "a/bc/e/f" -, "a/c/d/c/b" -, "a/cb/e/f" -] - -var symlinkTo = path.resolve(__dirname, "a/symlink/a/b/c") -var symlinkFrom = "../.." - -files = files.map(function (f) { - return path.resolve(__dirname, f) -}) - -tap.test("remove fixtures", function (t) { - rimraf(path.resolve(__dirname, "a"), function (er) { - t.ifError(er, "remove fixtures") - t.end() - }) -}) - -files.forEach(function (f) { - tap.test(f, function (t) { - var d = path.dirname(f) - mkdirp(d, 0755, function (er) { - if (er) { - t.fail(er) - return t.bailout() - } - fs.writeFile(f, "i like tests", function (er) { - t.ifError(er, "make file") - t.end() - }) - }) - }) -}) - -if (process.platform !== "win32") { - tap.test("symlinky", function (t) { - var d = path.dirname(symlinkTo) - console.error("mkdirp", d) - mkdirp(d, 0755, function (er) { - t.ifError(er) - fs.symlink(symlinkFrom, symlinkTo, "dir", function (er) { - t.ifError(er, "make symlink") - t.end() - }) - }) - }) -} - -;["foo","bar","baz","asdf","quux","qwer","rewq"].forEach(function (w) { - w = "/tmp/glob-test/" + w - tap.test("create " + w, function (t) { - mkdirp(w, function (er) { - if (er) - throw er - t.pass(w) - t.end() - }) - }) -}) - - -// generate the bash pattern test-fixtures if possible -if (process.platform === "win32" || !process.env.TEST_REGEN) { - console.error("Windows, or TEST_REGEN unset. Using cached fixtures.") - return -} - -var spawn = require("child_process").spawn; -var globs = - // put more patterns here. - // anything that would be directly in / should be in /tmp/glob-test - ["test/a/*/+(c|g)/./d" - ,"test/a/**/[cg]/../[cg]" - ,"test/a/{b,c,d,e,f}/**/g" - ,"test/a/b/**" - ,"test/**/g" - ,"test/a/abc{fed,def}/g/h" - ,"test/a/abc{fed/g,def}/**/" - ,"test/a/abc{fed/g,def}/**///**/" - ,"test/**/a/**/" - ,"test/+(a|b|c)/a{/,bc*}/**" - ,"test/*/*/*/f" - ,"test/**/f" - ,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**" - ,"{./*/*,/tmp/glob-test/*}" - ,"{/tmp/glob-test/*,*}" // evil owl face! how you taunt me! - ,"test/a/!(symlink)/**" - ] -var bashOutput = {} -var fs = require("fs") - -globs.forEach(function (pattern) { - tap.test("generate fixture " + pattern, function (t) { - var cmd = "shopt -s globstar && " + - "shopt -s extglob && " + - "shopt -s nullglob && " + - // "shopt >&2; " + - "eval \'for i in " + pattern + "; do echo $i; done\'" - var cp = spawn("bash", ["-c", cmd], { cwd: path.dirname(__dirname) }) - var out = [] - cp.stdout.on("data", function (c) { - out.push(c) - }) - cp.stderr.pipe(process.stderr) - cp.on("close", function (code) { - out = flatten(out) - if (!out) - out = [] - else - out = cleanResults(out.split(/\r*\n/)) - - bashOutput[pattern] = out - t.notOk(code, "bash test should finish nicely") - t.end() - }) - }) -}) - -tap.test("save fixtures", function (t) { - var fname = path.resolve(__dirname, "bash-results.json") - var data = JSON.stringify(bashOutput, null, 2) + "\n" - fs.writeFile(fname, data, function (er) { - t.ifError(er) - t.end() - }) -}) - -function cleanResults (m) { - // normalize discrepancies in ordering, duplication, - // and ending slashes. - return m.map(function (m) { - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort).map(function (f) { - // de-windows - return (process.platform !== 'win32') ? f - : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/') - }) -} - -function flatten (chunks) { - var s = 0 - chunks.forEach(function (c) { s += c.length }) - var out = new Buffer(s) - s = 0 - chunks.forEach(function (c) { - c.copy(out, s) - s += c.length - }) - - return out.toString().trim() -} - -function alphasort (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return a > b ? 1 : a < b ? -1 : 0 -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/bash-comparison.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/bash-comparison.js deleted file mode 100644 index 239ed1a9..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/bash-comparison.js +++ /dev/null @@ -1,63 +0,0 @@ -// basic test -// show that it does the same thing by default as the shell. -var tap = require("tap") -, child_process = require("child_process") -, bashResults = require("./bash-results.json") -, globs = Object.keys(bashResults) -, glob = require("../") -, path = require("path") - -// run from the root of the project -// this is usually where you're at anyway, but be sure. -process.chdir(path.resolve(__dirname, "..")) - -function alphasort (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return a > b ? 1 : a < b ? -1 : 0 -} - -globs.forEach(function (pattern) { - var expect = bashResults[pattern] - // anything regarding the symlink thing will fail on windows, so just skip it - if (process.platform === "win32" && - expect.some(function (m) { - return /\/symlink\//.test(m) - })) - return - - tap.test(pattern, function (t) { - glob(pattern, function (er, matches) { - if (er) - throw er - - // sort and unmark, just to match the shell results - matches = cleanResults(matches) - - t.deepEqual(matches, expect, pattern) - t.end() - }) - }) - - tap.test(pattern + " sync", function (t) { - var matches = cleanResults(glob.sync(pattern)) - - t.deepEqual(matches, expect, "should match shell") - t.end() - }) -}) - -function cleanResults (m) { - // normalize discrepancies in ordering, duplication, - // and ending slashes. - return m.map(function (m) { - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort).map(function (f) { - // de-windows - return (process.platform !== 'win32') ? f - : f.replace(/^[a-zA-Z]:[\/\\]+/, '/').replace(/[\\\/]+/g, '/') - }) -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/bash-results.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/bash-results.json deleted file mode 100644 index a9bc347d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/bash-results.json +++ /dev/null @@ -1,350 +0,0 @@ -{ - "test/a/*/+(c|g)/./d": [ - "test/a/b/c/./d" - ], - "test/a/**/[cg]/../[cg]": [ - "test/a/abcdef/g/../g", - "test/a/abcfed/g/../g", - "test/a/b/c/../c", - "test/a/c/../c", - "test/a/c/d/c/../c", - "test/a/symlink/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c" - ], - "test/a/{b,c,d,e,f}/**/g": [], - "test/a/b/**": [ - "test/a/b", - "test/a/b/c", - "test/a/b/c/d" - ], - "test/**/g": [ - "test/a/abcdef/g", - "test/a/abcfed/g" - ], - "test/a/abc{fed,def}/g/h": [ - "test/a/abcdef/g/h", - "test/a/abcfed/g/h" - ], - "test/a/abc{fed/g,def}/**/": [ - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcfed/g" - ], - "test/a/abc{fed/g,def}/**///**/": [ - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcfed/g" - ], - "test/**/a/**/": [ - "test/a", - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcfed", - "test/a/abcfed/g", - "test/a/b", - "test/a/b/c", - "test/a/bc", - "test/a/bc/e", - "test/a/c", - "test/a/c/d", - "test/a/c/d/c", - "test/a/cb", - "test/a/cb/e", - "test/a/symlink", - "test/a/symlink/a", - "test/a/symlink/a/b", - "test/a/symlink/a/b/c", - "test/a/symlink/a/b/c/a", - "test/a/symlink/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b" - ], - "test/+(a|b|c)/a{/,bc*}/**": [ - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcdef/g/h", - "test/a/abcfed", - "test/a/abcfed/g", - "test/a/abcfed/g/h" - ], - "test/*/*/*/f": [ - "test/a/bc/e/f", - "test/a/cb/e/f" - ], - "test/**/f": [ - "test/a/bc/e/f", - "test/a/cb/e/f" - ], - "test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**": [ - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c" - ], - "{./*/*,/tmp/glob-test/*}": [ - "./examples/g.js", - "./examples/usr-local.js", - "./node_modules/graceful-fs", - "./node_modules/inherits", - "./node_modules/minimatch", - "./node_modules/mkdirp", - "./node_modules/rimraf", - "./node_modules/tap", - "./test/00-setup.js", - "./test/a", - "./test/bash-comparison.js", - "./test/bash-results.json", - "./test/cwd-test.js", - "./test/globstar-match.js", - "./test/mark.js", - "./test/nocase-nomagic.js", - "./test/pause-resume.js", - "./test/root-nomount.js", - "./test/root.js", - "./test/stat.js", - "./test/zz-cleanup.js", - "/tmp/glob-test/asdf", - "/tmp/glob-test/bar", - "/tmp/glob-test/baz", - "/tmp/glob-test/foo", - "/tmp/glob-test/quux", - "/tmp/glob-test/qwer", - "/tmp/glob-test/rewq" - ], - "{/tmp/glob-test/*,*}": [ - "/tmp/glob-test/asdf", - "/tmp/glob-test/bar", - "/tmp/glob-test/baz", - "/tmp/glob-test/foo", - "/tmp/glob-test/quux", - "/tmp/glob-test/qwer", - "/tmp/glob-test/rewq", - "examples", - "glob.js", - "LICENSE", - "node_modules", - "package.json", - "README.md", - "test" - ], - "test/a/!(symlink)/**": [ - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcdef/g/h", - "test/a/abcfed", - "test/a/abcfed/g", - "test/a/abcfed/g/h", - "test/a/b", - "test/a/b/c", - "test/a/b/c/d", - "test/a/bc", - "test/a/bc/e", - "test/a/bc/e/f", - "test/a/c", - "test/a/c/d", - "test/a/c/d/c", - "test/a/c/d/c/b", - "test/a/cb", - "test/a/cb/e", - "test/a/cb/e/f" - ] -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/cwd-test.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/cwd-test.js deleted file mode 100644 index 352c27ef..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/cwd-test.js +++ /dev/null @@ -1,55 +0,0 @@ -var tap = require("tap") - -var origCwd = process.cwd() -process.chdir(__dirname) - -tap.test("changing cwd and searching for **/d", function (t) { - var glob = require('../') - var path = require('path') - t.test('.', function (t) { - glob('**/d', function (er, matches) { - t.ifError(er) - t.like(matches, [ 'a/b/c/d', 'a/c/d' ]) - t.end() - }) - }) - - t.test('a', function (t) { - glob('**/d', {cwd:path.resolve('a')}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'b/c/d', 'c/d' ]) - t.end() - }) - }) - - t.test('a/b', function (t) { - glob('**/d', {cwd:path.resolve('a/b')}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'c/d' ]) - t.end() - }) - }) - - t.test('a/b/', function (t) { - glob('**/d', {cwd:path.resolve('a/b/')}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'c/d' ]) - t.end() - }) - }) - - t.test('.', function (t) { - glob('**/d', {cwd: process.cwd()}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'a/b/c/d', 'a/c/d' ]) - t.end() - }) - }) - - t.test('cd -', function (t) { - process.chdir(origCwd) - t.end() - }) - - t.end() -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/globstar-match.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/globstar-match.js deleted file mode 100644 index 9b234fa2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/globstar-match.js +++ /dev/null @@ -1,19 +0,0 @@ -var Glob = require("../glob.js").Glob -var test = require('tap').test - -test('globstar should not have dupe matches', function(t) { - var pattern = 'a/**/[gh]' - var g = new Glob(pattern, { cwd: __dirname }) - var matches = [] - g.on('match', function(m) { - console.error('match %j', m) - matches.push(m) - }) - g.on('end', function(set) { - console.error('set', set) - matches = matches.sort() - set = set.sort() - t.same(matches, set, 'should have same set of matches') - t.end() - }) -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/mark.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/mark.js deleted file mode 100644 index ed68a335..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/mark.js +++ /dev/null @@ -1,74 +0,0 @@ -var test = require("tap").test -var glob = require('../') -process.chdir(__dirname) - -test("mark, no / on pattern", function (t) { - glob("a/*", {mark: true}, function (er, results) { - if (er) - throw er - var expect = [ 'a/abcdef/', - 'a/abcfed/', - 'a/b/', - 'a/bc/', - 'a/c/', - 'a/cb/' ] - - if (process.platform !== "win32") - expect.push('a/symlink/') - - t.same(results, expect) - t.end() - }) -}) - -test("mark=false, no / on pattern", function (t) { - glob("a/*", function (er, results) { - if (er) - throw er - var expect = [ 'a/abcdef', - 'a/abcfed', - 'a/b', - 'a/bc', - 'a/c', - 'a/cb' ] - - if (process.platform !== "win32") - expect.push('a/symlink') - t.same(results, expect) - t.end() - }) -}) - -test("mark=true, / on pattern", function (t) { - glob("a/*/", {mark: true}, function (er, results) { - if (er) - throw er - var expect = [ 'a/abcdef/', - 'a/abcfed/', - 'a/b/', - 'a/bc/', - 'a/c/', - 'a/cb/' ] - if (process.platform !== "win32") - expect.push('a/symlink/') - t.same(results, expect) - t.end() - }) -}) - -test("mark=false, / on pattern", function (t) { - glob("a/*/", function (er, results) { - if (er) - throw er - var expect = [ 'a/abcdef/', - 'a/abcfed/', - 'a/b/', - 'a/bc/', - 'a/c/', - 'a/cb/' ] - if (process.platform !== "win32") - expect.push('a/symlink/') - t.same(results, expect) - t.end() - }) -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/nocase-nomagic.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/nocase-nomagic.js deleted file mode 100644 index d8629709..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/nocase-nomagic.js +++ /dev/null @@ -1,113 +0,0 @@ -var fs = require('graceful-fs'); -var test = require('tap').test; -var glob = require('../'); - -test('mock fs', function(t) { - var stat = fs.stat - var statSync = fs.statSync - var readdir = fs.readdir - var readdirSync = fs.readdirSync - - function fakeStat(path) { - var ret - switch (path.toLowerCase()) { - case '/tmp': case '/tmp/': - ret = { isDirectory: function() { return true } } - break - case '/tmp/a': - ret = { isDirectory: function() { return false } } - break - } - return ret - } - - fs.stat = function(path, cb) { - var f = fakeStat(path); - if (f) { - process.nextTick(function() { - cb(null, f) - }) - } else { - stat.call(fs, path, cb) - } - } - - fs.statSync = function(path) { - return fakeStat(path) || statSync.call(fs, path) - } - - function fakeReaddir(path) { - var ret - switch (path.toLowerCase()) { - case '/tmp': case '/tmp/': - ret = [ 'a', 'A' ] - break - case '/': - ret = ['tmp', 'tMp', 'tMP', 'TMP'] - } - return ret - } - - fs.readdir = function(path, cb) { - var f = fakeReaddir(path) - if (f) - process.nextTick(function() { - cb(null, f) - }) - else - readdir.call(fs, path, cb) - } - - fs.readdirSync = function(path) { - return fakeReaddir(path) || readdirSync.call(fs, path) - } - - t.pass('mocked') - t.end() -}) - -test('nocase, nomagic', function(t) { - var n = 2 - var want = [ '/TMP/A', - '/TMP/a', - '/tMP/A', - '/tMP/a', - '/tMp/A', - '/tMp/a', - '/tmp/A', - '/tmp/a' ] - glob('/tmp/a', { nocase: true }, function(er, res) { - if (er) - throw er - t.same(res.sort(), want) - if (--n === 0) t.end() - }) - glob('/tmp/A', { nocase: true }, function(er, res) { - if (er) - throw er - t.same(res.sort(), want) - if (--n === 0) t.end() - }) -}) - -test('nocase, with some magic', function(t) { - t.plan(2) - var want = [ '/TMP/A', - '/TMP/a', - '/tMP/A', - '/tMP/a', - '/tMp/A', - '/tMp/a', - '/tmp/A', - '/tmp/a' ] - glob('/tmp/*', { nocase: true }, function(er, res) { - if (er) - throw er - t.same(res.sort(), want) - }) - glob('/tmp/*', { nocase: true }, function(er, res) { - if (er) - throw er - t.same(res.sort(), want) - }) -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/pause-resume.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/pause-resume.js deleted file mode 100644 index e1ffbab1..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/pause-resume.js +++ /dev/null @@ -1,73 +0,0 @@ -// show that no match events happen while paused. -var tap = require("tap") -, child_process = require("child_process") -// just some gnarly pattern with lots of matches -, pattern = "test/a/!(symlink)/**" -, bashResults = require("./bash-results.json") -, patterns = Object.keys(bashResults) -, glob = require("../") -, Glob = glob.Glob -, path = require("path") - -// run from the root of the project -// this is usually where you're at anyway, but be sure. -process.chdir(path.resolve(__dirname, "..")) - -function alphasort (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return a > b ? 1 : a < b ? -1 : 0 -} - -function cleanResults (m) { - // normalize discrepancies in ordering, duplication, - // and ending slashes. - return m.map(function (m) { - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort).map(function (f) { - // de-windows - return (process.platform !== 'win32') ? f - : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/') - }) -} - -var globResults = [] -tap.test("use a Glob object, and pause/resume it", function (t) { - var g = new Glob(pattern) - , paused = false - , res = [] - , expect = bashResults[pattern] - - g.on("pause", function () { - console.error("pause") - }) - - g.on("resume", function () { - console.error("resume") - }) - - g.on("match", function (m) { - t.notOk(g.paused, "must not be paused") - globResults.push(m) - g.pause() - t.ok(g.paused, "must be paused") - setTimeout(g.resume.bind(g), 10) - }) - - g.on("end", function (matches) { - t.pass("reached glob end") - globResults = cleanResults(globResults) - matches = cleanResults(matches) - t.deepEqual(matches, globResults, - "end event matches should be the same as match events") - - t.deepEqual(matches, expect, - "glob matches should be the same as bash results") - - t.end() - }) -}) - diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/root-nomount.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/root-nomount.js deleted file mode 100644 index 3ac5979b..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/root-nomount.js +++ /dev/null @@ -1,39 +0,0 @@ -var tap = require("tap") - -var origCwd = process.cwd() -process.chdir(__dirname) - -tap.test("changing root and searching for /b*/**", function (t) { - var glob = require('../') - var path = require('path') - t.test('.', function (t) { - glob('/b*/**', { globDebug: true, root: '.', nomount: true }, function (er, matches) { - t.ifError(er) - t.like(matches, []) - t.end() - }) - }) - - t.test('a', function (t) { - glob('/b*/**', { globDebug: true, root: path.resolve('a'), nomount: true }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ]) - t.end() - }) - }) - - t.test('root=a, cwd=a/b', function (t) { - glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b'), nomount: true }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ]) - t.end() - }) - }) - - t.test('cd -', function (t) { - process.chdir(origCwd) - t.end() - }) - - t.end() -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/root.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/root.js deleted file mode 100644 index 95c23f99..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/root.js +++ /dev/null @@ -1,46 +0,0 @@ -var t = require("tap") - -var origCwd = process.cwd() -process.chdir(__dirname) - -var glob = require('../') -var path = require('path') - -t.test('.', function (t) { - glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) { - t.ifError(er) - t.like(matches, []) - t.end() - }) -}) - - -t.test('a', function (t) { - console.error("root=" + path.resolve('a')) - glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) { - t.ifError(er) - var wanted = [ - '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' - ].map(function (m) { - return path.join(path.resolve('a'), m).replace(/\\/g, '/') - }) - - t.like(matches, wanted) - t.end() - }) -}) - -t.test('root=a, cwd=a/b', function (t) { - glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) { - return path.join(path.resolve('a'), m).replace(/\\/g, '/') - })) - t.end() - }) -}) - -t.test('cd -', function (t) { - process.chdir(origCwd) - t.end() -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/stat.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/stat.js deleted file mode 100644 index 62917114..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/stat.js +++ /dev/null @@ -1,32 +0,0 @@ -var glob = require('../') -var test = require('tap').test -var path = require('path') - -test('stat all the things', function(t) { - var g = new glob.Glob('a/*abc*/**', { stat: true, cwd: __dirname }) - var matches = [] - g.on('match', function(m) { - matches.push(m) - }) - var stats = [] - g.on('stat', function(m) { - stats.push(m) - }) - g.on('end', function(eof) { - stats = stats.sort() - matches = matches.sort() - eof = eof.sort() - t.same(stats, matches) - t.same(eof, matches) - var cache = Object.keys(this.statCache) - t.same(cache.map(function (f) { - return path.relative(__dirname, f) - }).sort(), matches) - - cache.forEach(function(c) { - t.equal(typeof this.statCache[c], 'object') - }, this) - - t.end() - }) -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/zz-cleanup.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/zz-cleanup.js deleted file mode 100644 index e085f0fa..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/glob/test/zz-cleanup.js +++ /dev/null @@ -1,11 +0,0 @@ -// remove the fixtures -var tap = require("tap") -, rimraf = require("rimraf") -, path = require("path") - -tap.test("cleanup fixtures", function (t) { - rimraf(path.resolve(__dirname, "a"), function (er) { - t.ifError(er, "removed") - t.end() - }) -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/History.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/History.md deleted file mode 100644 index a4b7b49f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/History.md +++ /dev/null @@ -1,63 +0,0 @@ - -1.7.0 / 2012-12-30 -================== - - * support transient notifications in Gnome - -1.6.1 / 2012-09-25 -================== - - * restore compatibility with node < 0.8 [fgnass] - -1.6.0 / 2012-09-06 -================== - - * add notification center support [drudge] - -1.5.1 / 2012-04-08 -================== - - * Merge pull request #16 from KyleAMathews/patch-1 - * Fixes #15 - -1.5.0 / 2012-02-08 -================== - - * Added windows support [perfusorius] - -1.4.1 / 2011-12-28 -================== - - * Fixed: dont exit(). Closes #9 - -1.4.0 / 2011-12-17 -================== - - * Changed API: `growl.notify()` -> `growl()` - -1.3.0 / 2011-12-17 -================== - - * Added support for Ubuntu/Debian/Linux users [niftylettuce] - * Fixed: send notifications even if title not specified [alessioalex] - -1.2.0 / 2011-10-06 -================== - - * Add support for priority. - -1.1.0 / 2011-03-15 -================== - - * Added optional callbacks - * Added parsing of version - -1.0.1 / 2010-03-26 -================== - - * Fixed; sys.exec -> child_process.exec to support latest node - -1.0.0 / 2010-03-19 -================== - - * Initial release diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/Readme.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/Readme.md deleted file mode 100644 index 48d717cc..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/Readme.md +++ /dev/null @@ -1,99 +0,0 @@ -# Growl for nodejs - -Growl support for Nodejs. This is essentially a port of my [Ruby Growl Library](http://github.com/visionmedia/growl). Ubuntu/Linux support added thanks to [@niftylettuce](http://github.com/niftylettuce). - -## Installation - -### Install - -### Mac OS X (Darwin): - - Install [growlnotify(1)](http://growl.info/extras.php#growlnotify). On OS X 10.8, Notification Center is supported using [terminal-notifier](https://github.com/alloy/terminal-notifier). To install: - - $ sudo gem install terminal-notifier - - Install [npm](http://npmjs.org/) and run: - - $ npm install growl - -### Ubuntu (Linux): - - Install `notify-send` through the [libnotify-bin](http://packages.ubuntu.com/libnotify-bin) package: - - $ sudo apt-get install libnotify-bin - - Install [npm](http://npmjs.org/) and run: - - $ npm install growl - -### Windows: - - Download and install [Growl for Windows](http://www.growlforwindows.com/gfw/default.aspx) - - Download [growlnotify](http://www.growlforwindows.com/gfw/help/growlnotify.aspx) - **IMPORTANT :** Unpack growlnotify to a folder that is present in your path! - - Install [npm](http://npmjs.org/) and run: - - $ npm install growl - -## Examples - -Callback functions are optional - - var growl = require('growl') - growl('You have mail!') - growl('5 new messages', { sticky: true }) - growl('5 new emails', { title: 'Email Client', image: 'Safari', sticky: true }) - growl('Message with title', { title: 'Title'}) - growl('Set priority', { priority: 2 }) - growl('Show Safari icon', { image: 'Safari' }) - growl('Show icon', { image: 'path/to/icon.icns' }) - growl('Show image', { image: 'path/to/my.image.png' }) - growl('Show png filesystem icon', { image: 'png' }) - growl('Show pdf filesystem icon', { image: 'article.pdf' }) - growl('Show pdf filesystem icon', { image: 'article.pdf' }, function(err){ - // ... notified - }) - -## Options - - - title - - notification title - - name - - application name - - priority - - priority for the notification (default is 0) - - sticky - - weither or not the notification should remainin until closed - - image - - Auto-detects the context: - - path to an icon sets --iconpath - - path to an image sets --image - - capitalized word sets --appIcon - - filename uses extname as --icon - - otherwise treated as --icon - -## License - -(The MIT License) - -Copyright (c) 2009 TJ Holowaychuk - -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/lib/growl.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/lib/growl.js deleted file mode 100644 index 04f4f9b4..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/lib/growl.js +++ /dev/null @@ -1,234 +0,0 @@ -// Growl - Copyright TJ Holowaychuk (MIT Licensed) - -/** - * Module dependencies. - */ - -var exec = require('child_process').exec - , fs = require('fs') - , path = require('path') - , exists = fs.existsSync || path.existsSync - , os = require('os') - , quote = JSON.stringify - , cmd; - -function which(name) { - var paths = process.env.PATH.split(':'); - var loc; - - for (var i = 0, len = paths.length; i < len; ++i) { - loc = path.join(paths[i], name); - if (exists(loc)) return loc; - } -} - -switch(os.type()) { - case 'Darwin': - if (which('terminal-notifier')) { - cmd = { - type: "Darwin-NotificationCenter" - , pkg: "terminal-notifier" - , msg: '-message' - , title: '-title' - , subtitle: '-subtitle' - , priority: { - cmd: '-execute' - , range: [] - } - }; - } else { - cmd = { - type: "Darwin-Growl" - , pkg: "growlnotify" - , msg: '-m' - , sticky: '--sticky' - , priority: { - cmd: '--priority' - , range: [ - -2 - , -1 - , 0 - , 1 - , 2 - , "Very Low" - , "Moderate" - , "Normal" - , "High" - , "Emergency" - ] - } - }; - } - break; - case 'Linux': - cmd = { - type: "Linux" - , pkg: "notify-send" - , msg: '' - , sticky: '-t 0' - , icon: '-i' - , priority: { - cmd: '-u' - , range: [ - "low" - , "normal" - , "critical" - ] - } - }; - break; - case 'Windows_NT': - cmd = { - type: "Windows" - , pkg: "growlnotify" - , msg: '' - , sticky: '/s:true' - , title: '/t:' - , icon: '/i:' - , priority: { - cmd: '/p:' - , range: [ - -2 - , -1 - , 0 - , 1 - , 2 - ] - } - }; - break; -} - -/** - * Expose `growl`. - */ - -exports = module.exports = growl; - -/** - * Node-growl version. - */ - -exports.version = '1.4.1' - -/** - * Send growl notification _msg_ with _options_. - * - * Options: - * - * - title Notification title - * - sticky Make the notification stick (defaults to false) - * - priority Specify an int or named key (default is 0) - * - name Application name (defaults to growlnotify) - * - image - * - path to an icon sets --iconpath - * - path to an image sets --image - * - capitalized word sets --appIcon - * - filename uses extname as --icon - * - otherwise treated as --icon - * - * Examples: - * - * growl('New email') - * growl('5 new emails', { title: 'Thunderbird' }) - * growl('Email sent', function(){ - * // ... notification sent - * }) - * - * @param {string} msg - * @param {object} options - * @param {function} fn - * @api public - */ - -function growl(msg, options, fn) { - var image - , args - , options = options || {} - , fn = fn || function(){}; - - // noop - if (!cmd) return fn(new Error('growl not supported on this platform')); - args = [cmd.pkg]; - - // image - if (image = options.image) { - switch(cmd.type) { - case 'Darwin-Growl': - var flag, ext = path.extname(image).substr(1) - flag = flag || ext == 'icns' && 'iconpath' - flag = flag || /^[A-Z]/.test(image) && 'appIcon' - flag = flag || /^png|gif|jpe?g$/.test(ext) && 'image' - flag = flag || ext && (image = ext) && 'icon' - flag = flag || 'icon' - args.push('--' + flag, image) - break; - case 'Linux': - args.push(cmd.icon + " " + image); - // libnotify defaults to sticky, set a hint for transient notifications - if (!options.sticky) args.push('--hint=int:transient:1'); - break; - case 'Windows': - args.push(cmd.icon + quote(image)); - break; - } - } - - // sticky - if (options.sticky) args.push(cmd.sticky); - - // priority - if (options.priority) { - var priority = options.priority + ''; - var checkindexOf = cmd.priority.range.indexOf(priority); - if (~cmd.priority.range.indexOf(priority)) { - args.push(cmd.priority, options.priority); - } - } - - // name - if (options.name && cmd.type === "Darwin-Growl") { - args.push('--name', options.name); - } - - switch(cmd.type) { - case 'Darwin-Growl': - args.push(cmd.msg); - args.push(quote(msg)); - if (options.title) args.push(quote(options.title)); - break; - case 'Darwin-NotificationCenter': - args.push(cmd.msg); - args.push(quote(msg)); - if (options.title) { - args.push(cmd.title); - args.push(quote(options.title)); - } - if (options.subtitle) { - args.push(cmd.subtitle); - args.push(quote(options.title)); - } - break; - case 'Darwin-Growl': - args.push(cmd.msg); - args.push(quote(msg)); - if (options.title) args.push(quote(options.title)); - break; - case 'Linux': - if (options.title) { - args.push(quote(options.title)); - args.push(cmd.msg); - args.push(quote(msg)); - } else { - args.push(quote(msg)); - } - break; - case 'Windows': - args.push(quote(msg)); - if (options.title) args.push(cmd.title + quote(options.title)); - break; - } - - // execute - exec(args.join(' '), fn); -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/package.json deleted file mode 100644 index 6565e46d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "growl", - "version": "1.7.0", - "description": "Growl unobtrusive notifications", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "main": "./lib/growl.js", - "readme": "# Growl for nodejs\n\nGrowl support for Nodejs. This is essentially a port of my [Ruby Growl Library](http://github.com/visionmedia/growl). Ubuntu/Linux support added thanks to [@niftylettuce](http://github.com/niftylettuce). \n\n## Installation\n\n### Install \n\n### Mac OS X (Darwin):\n\n Install [growlnotify(1)](http://growl.info/extras.php#growlnotify). On OS X 10.8, Notification Center is supported using [terminal-notifier](https://github.com/alloy/terminal-notifier). To install:\n \n $ sudo gem install terminal-notifier\n \n Install [npm](http://npmjs.org/) and run:\n \n $ npm install growl\n\n### Ubuntu (Linux):\n\n Install `notify-send` through the [libnotify-bin](http://packages.ubuntu.com/libnotify-bin) package:\n\n $ sudo apt-get install libnotify-bin\n\n Install [npm](http://npmjs.org/) and run:\n \n $ npm install growl\n\n### Windows:\n\n Download and install [Growl for Windows](http://www.growlforwindows.com/gfw/default.aspx)\n\n Download [growlnotify](http://www.growlforwindows.com/gfw/help/growlnotify.aspx) - **IMPORTANT :** Unpack growlnotify to a folder that is present in your path!\n\n Install [npm](http://npmjs.org/) and run:\n \n $ npm install growl\n\n## Examples\n\nCallback functions are optional\n\n var growl = require('growl')\n growl('You have mail!')\n growl('5 new messages', { sticky: true })\n growl('5 new emails', { title: 'Email Client', image: 'Safari', sticky: true })\n growl('Message with title', { title: 'Title'})\n growl('Set priority', { priority: 2 })\n growl('Show Safari icon', { image: 'Safari' })\n growl('Show icon', { image: 'path/to/icon.icns' })\n growl('Show image', { image: 'path/to/my.image.png' })\n growl('Show png filesystem icon', { image: 'png' })\n growl('Show pdf filesystem icon', { image: 'article.pdf' })\n growl('Show pdf filesystem icon', { image: 'article.pdf' }, function(err){\n // ... notified\n })\n\n## Options\n\n - title\n - notification title\n - name\n - application name\n - priority\n - priority for the notification (default is 0)\n - sticky\n - weither or not the notification should remainin until closed\n - image\n - Auto-detects the context:\n - path to an icon sets --iconpath\n - path to an image sets --image\n - capitalized word sets --appIcon\n - filename uses extname as --icon\n - otherwise treated as --icon\n \n## License \n\n(The MIT License)\n\nCopyright (c) 2009 TJ Holowaychuk \n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "_id": "growl@1.7.0", - "_from": "growl@1.7.x" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/test.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/test.js deleted file mode 100644 index cf22d90b..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/growl/test.js +++ /dev/null @@ -1,20 +0,0 @@ - -var growl = require('./lib/growl') - -growl('You have mail!') -growl('5 new messages', { sticky: true }) -growl('5 new emails', { title: 'Email Client', image: 'Safari', sticky: true }) -growl('Message with title', { title: 'Title'}) -growl('Set priority', { priority: 2 }) -growl('Show Safari icon', { image: 'Safari' }) -growl('Show icon', { image: 'path/to/icon.icns' }) -growl('Show image', { image: 'path/to/my.image.png' }) -growl('Show png filesystem icon', { image: 'png' }) -growl('Show pdf filesystem icon', { image: 'article.pdf' }) -growl('Show pdf filesystem icon', { image: 'article.pdf' }, function(){ - console.log('callback'); -}) -growl('Show pdf filesystem icon', { title: 'Use show()', image: 'article.pdf' }) -growl('here \' are \n some \\ characters that " need escaping', {}, function(error, stdout, stderr) { - if (error !== null) throw new Error('escaping failed:\n' + stdout + stderr); -}) diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/.npmignore b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/.npmignore deleted file mode 100644 index b9af3d4b..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -test -support -benchmarks -examples -lib-cov -coverage.html -.gitmodules -.travis.yml -History.md -Readme.md -Makefile -test/ -support/ -benchmarks/ -examples/ diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/LICENSE deleted file mode 100644 index 8ad0e0d3..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2009-2010 TJ Holowaychuk - -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/bin/jade b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/bin/jade deleted file mode 100755 index 7e6002f9..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/bin/jade +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var fs = require('fs') - , program = require('commander') - , path = require('path') - , basename = path.basename - , dirname = path.dirname - , resolve = path.resolve - , join = path.join - , mkdirp = require('mkdirp') - , jade = require('../'); - -// jade options - -var options = {}; - -// options - -program - .version(jade.version) - .usage('[options] [dir|file ...]') - .option('-o, --obj ', 'javascript options object') - .option('-O, --out ', 'output the compiled html to ') - .option('-p, --path ', 'filename used to resolve includes') - .option('-P, --pretty', 'compile pretty html output') - .option('-c, --client', 'compile for client-side runtime.js') - .option('-D, --no-debug', 'compile without debugging (smaller functions)') - -program.on('--help', function(){ - console.log(' Examples:'); - console.log(''); - console.log(' # translate jade the templates dir'); - console.log(' $ jade templates'); - console.log(''); - console.log(' # create {foo,bar}.html'); - console.log(' $ jade {foo,bar}.jade'); - console.log(''); - console.log(' # jade over stdio'); - console.log(' $ jade < my.jade > my.html'); - console.log(''); - console.log(' # jade over stdio'); - console.log(' $ echo "h1 Jade!" | jade'); - console.log(''); - console.log(' # foo, bar dirs rendering to /tmp'); - console.log(' $ jade foo bar --out /tmp '); - console.log(''); -}); - -program.parse(process.argv); - -// options given, parse them - -if (program.obj) options = eval('(' + program.obj + ')'); - -// --filename - -if (program.path) options.filename = program.path; - -// --no-debug - -options.compileDebug = program.debug; - -// --client - -options.client = program.client; - -// --pretty - -options.pretty = program.pretty; - -// left-over args are file paths - -var files = program.args; - -// compile files - -if (files.length) { - console.log(); - files.forEach(renderFile); - process.on('exit', console.log); -// stdio -} else { - stdin(); -} - -/** - * Compile from stdin. - */ - -function stdin() { - var buf = ''; - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function(chunk){ buf += chunk; }); - process.stdin.on('end', function(){ - var fn = jade.compile(buf, options); - var output = options.client - ? fn.toString() - : fn(options); - process.stdout.write(output); - }).resume(); -} - -/** - * Process the given path, compiling the jade files found. - * Always walk the subdirectories. - */ - -function renderFile(path) { - var re = /\.jade$/; - fs.lstat(path, function(err, stat) { - if (err) throw err; - // Found jade file - if (stat.isFile() && re.test(path)) { - fs.readFile(path, 'utf8', function(err, str){ - if (err) throw err; - options.filename = path; - var fn = jade.compile(str, options); - var extname = options.client ? '.js' : '.html'; - path = path.replace(re, extname); - if (program.out) path = join(program.out, basename(path)); - var dir = resolve(dirname(path)); - mkdirp(dir, 0755, function(err){ - if (err) throw err; - var output = options.client - ? fn.toString() - : fn(options); - fs.writeFile(path, output, function(err){ - if (err) throw err; - console.log(' \033[90mrendered \033[36m%s\033[0m', path); - }); - }); - }); - // Found directory - } else if (stat.isDirectory()) { - fs.readdir(path, function(err, files) { - if (err) throw err; - files.map(function(filename) { - return path + '/' + filename; - }).forEach(renderFile); - }); - } - }); -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/index.js deleted file mode 100644 index 8ad059f7..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/index.js +++ /dev/null @@ -1,4 +0,0 @@ - -module.exports = process.env.JADE_COV - ? require('./lib-cov/jade') - : require('./lib/jade'); \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/jade.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/jade.js deleted file mode 100644 index 1983a203..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/jade.js +++ /dev/null @@ -1,3586 +0,0 @@ -(function() { - -// CommonJS require() - -function require(p){ - var path = require.resolve(p) - , mod = require.modules[path]; - if (!mod) throw new Error('failed to require "' + p + '"'); - if (!mod.exports) { - mod.exports = {}; - mod.call(mod.exports, mod, mod.exports, require.relative(path)); - } - return mod.exports; - } - -require.modules = {}; - -require.resolve = function (path){ - var orig = path - , reg = path + '.js' - , index = path + '/index.js'; - return require.modules[reg] && reg - || require.modules[index] && index - || orig; - }; - -require.register = function (path, fn){ - require.modules[path] = fn; - }; - -require.relative = function (parent) { - return function(p){ - if ('.' != p.charAt(0)) return require(p); - - var path = parent.split('/') - , segs = p.split('/'); - path.pop(); - - for (var i = 0; i < segs.length; i++) { - var seg = segs[i]; - if ('..' == seg) path.pop(); - else if ('.' != seg) path.push(seg); - } - - return require(path.join('/')); - }; - }; - - -require.register("compiler.js", function(module, exports, require){ - -/*! - * Jade - Compiler - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var nodes = require('./nodes') - , filters = require('./filters') - , doctypes = require('./doctypes') - , selfClosing = require('./self-closing') - , runtime = require('./runtime') - , utils = require('./utils'); - - - if (!Object.keys) { - Object.keys = function(obj){ - var arr = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - arr.push(key); - } - } - return arr; - } - } - - if (!String.prototype.trimLeft) { - String.prototype.trimLeft = function(){ - return this.replace(/^\s+/, ''); - } - } - - - -/** - * Initialize `Compiler` with the given `node`. - * - * @param {Node} node - * @param {Object} options - * @api public - */ - -var Compiler = module.exports = function Compiler(node, options) { - this.options = options = options || {}; - this.node = node; - this.hasCompiledDoctype = false; - this.hasCompiledTag = false; - this.pp = options.pretty || false; - this.debug = false !== options.compileDebug; - this.indents = 0; - this.parentIndents = 0; - if (options.doctype) this.setDoctype(options.doctype); -}; - -/** - * Compiler prototype. - */ - -Compiler.prototype = { - - /** - * Compile parse tree to JavaScript. - * - * @api public - */ - - compile: function(){ - this.buf = ['var interp;']; - if (this.pp) this.buf.push("var __indent = [];"); - this.lastBufferedIdx = -1; - this.visit(this.node); - return this.buf.join('\n'); - }, - - /** - * Sets the default doctype `name`. Sets terse mode to `true` when - * html 5 is used, causing self-closing tags to end with ">" vs "/>", - * and boolean attributes are not mirrored. - * - * @param {string} name - * @api public - */ - - setDoctype: function(name){ - var doctype = doctypes[(name || 'default').toLowerCase()]; - doctype = doctype || ''; - this.doctype = doctype; - this.terse = '5' == name || 'html' == name; - this.xml = 0 == this.doctype.indexOf(' 1 && !escape && block.nodes[0].isText && block.nodes[1].isText) - this.prettyIndent(1, true); - - for (var i = 0; i < len; ++i) { - // Pretty print text - if (pp && i > 0 && !escape && block.nodes[i].isText && block.nodes[i-1].isText) - this.prettyIndent(1, false); - - this.visit(block.nodes[i]); - // Multiple text nodes are separated by newlines - if (block.nodes[i+1] && block.nodes[i].isText && block.nodes[i+1].isText) - this.buffer('\\n'); - } - }, - - /** - * Visit `doctype`. Sets terse mode to `true` when html 5 - * is used, causing self-closing tags to end with ">" vs "/>", - * and boolean attributes are not mirrored. - * - * @param {Doctype} doctype - * @api public - */ - - visitDoctype: function(doctype){ - if (doctype && (doctype.val || !this.doctype)) { - this.setDoctype(doctype.val || 'default'); - } - - if (this.doctype) this.buffer(this.doctype); - this.hasCompiledDoctype = true; - }, - - /** - * Visit `mixin`, generating a function that - * may be called within the template. - * - * @param {Mixin} mixin - * @api public - */ - - visitMixin: function(mixin){ - var name = mixin.name.replace(/-/g, '_') + '_mixin' - , args = mixin.args || '' - , block = mixin.block - , attrs = mixin.attrs - , pp = this.pp; - - if (mixin.call) { - if (pp) this.buf.push("__indent.push('" + Array(this.indents + 1).join(' ') + "');") - if (block || attrs.length) { - - this.buf.push(name + '.call({'); - - if (block) { - this.buf.push('block: function(){'); - - // Render block with no indents, dynamically added when rendered - this.parentIndents++; - var _indents = this.indents; - this.indents = 0; - this.visit(mixin.block); - this.indents = _indents; - this.parentIndents--; - - if (attrs.length) { - this.buf.push('},'); - } else { - this.buf.push('}'); - } - } - - if (attrs.length) { - var val = this.attrs(attrs); - if (val.inherits) { - this.buf.push('attributes: merge({' + val.buf - + '}, attributes), escaped: merge(' + val.escaped + ', escaped, true)'); - } else { - this.buf.push('attributes: {' + val.buf + '}, escaped: ' + val.escaped); - } - } - - if (args) { - this.buf.push('}, ' + args + ');'); - } else { - this.buf.push('});'); - } - - } else { - this.buf.push(name + '(' + args + ');'); - } - if (pp) this.buf.push("__indent.pop();") - } else { - this.buf.push('var ' + name + ' = function(' + args + '){'); - this.buf.push('var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {};'); - this.parentIndents++; - this.visit(block); - this.parentIndents--; - this.buf.push('};'); - } - }, - - /** - * Visit `tag` buffering tag markup, generating - * attributes, visiting the `tag`'s code and block. - * - * @param {Tag} tag - * @api public - */ - - visitTag: function(tag){ - this.indents++; - var name = tag.name - , pp = this.pp; - - if (tag.buffer) name = "' + (" + name + ") + '"; - - if (!this.hasCompiledTag) { - if (!this.hasCompiledDoctype && 'html' == name) { - this.visitDoctype(); - } - this.hasCompiledTag = true; - } - - // pretty print - if (pp && !tag.isInline()) - this.prettyIndent(0, true); - - if ((~selfClosing.indexOf(name) || tag.selfClosing) && !this.xml) { - this.buffer('<' + name); - this.visitAttributes(tag.attrs); - this.terse - ? this.buffer('>') - : this.buffer('/>'); - } else { - // Optimize attributes buffering - if (tag.attrs.length) { - this.buffer('<' + name); - if (tag.attrs.length) this.visitAttributes(tag.attrs); - this.buffer('>'); - } else { - this.buffer('<' + name + '>'); - } - if (tag.code) this.visitCode(tag.code); - this.escape = 'pre' == tag.name; - this.visit(tag.block); - - // pretty print - if (pp && !tag.isInline() && 'pre' != tag.name && !tag.canInline()) - this.prettyIndent(0, true); - - this.buffer(''); - } - this.indents--; - }, - - /** - * Visit `filter`, throwing when the filter does not exist. - * - * @param {Filter} filter - * @api public - */ - - visitFilter: function(filter){ - var fn = filters[filter.name]; - - // unknown filter - if (!fn) { - if (filter.isASTFilter) { - throw new Error('unknown ast filter "' + filter.name + ':"'); - } else { - throw new Error('unknown filter ":' + filter.name + '"'); - } - } - - if (filter.isASTFilter) { - this.buf.push(fn(filter.block, this, filter.attrs)); - } else { - var text = filter.block.nodes.map(function(node){ return node.val }).join('\n'); - filter.attrs = filter.attrs || {}; - filter.attrs.filename = this.options.filename; - this.buffer(utils.text(fn(text, filter.attrs))); - } - }, - - /** - * Visit `text` node. - * - * @param {Text} text - * @api public - */ - - visitText: function(text){ - text = utils.text(text.val.replace(/\\/g, '\\\\')); - if (this.escape) text = escape(text); - this.buffer(text); - }, - - /** - * Visit a `comment`, only buffering when the buffer flag is set. - * - * @param {Comment} comment - * @api public - */ - - visitComment: function(comment){ - if (!comment.buffer) return; - if (this.pp) this.prettyIndent(1, true); - this.buffer(''); - }, - - /** - * Visit a `BlockComment`. - * - * @param {Comment} comment - * @api public - */ - - visitBlockComment: function(comment){ - if (!comment.buffer) return; - if (0 == comment.val.trim().indexOf('if')) { - this.buffer(''); - } else { - this.buffer(''); - } - }, - - /** - * Visit `code`, respecting buffer / escape flags. - * If the code is followed by a block, wrap it in - * a self-calling function. - * - * @param {Code} code - * @api public - */ - - visitCode: function(code){ - // Wrap code blocks with {}. - // we only wrap unbuffered code blocks ATM - // since they are usually flow control - - // Buffer code - if (code.buffer) { - var val = code.val.trimLeft(); - this.buf.push('var __val__ = ' + val); - val = 'null == __val__ ? "" : __val__'; - if (code.escape) val = 'escape(' + val + ')'; - this.buf.push("buf.push(" + val + ");"); - } else { - this.buf.push(code.val); - } - - // Block support - if (code.block) { - if (!code.buffer) this.buf.push('{'); - this.visit(code.block); - if (!code.buffer) this.buf.push('}'); - } - }, - - /** - * Visit `each` block. - * - * @param {Each} each - * @api public - */ - - visitEach: function(each){ - this.buf.push('' - + '// iterate ' + each.obj + '\n' - + ';(function(){\n' - + ' if (\'number\' == typeof ' + each.obj + '.length) {\n' - + ' for (var ' + each.key + ' = 0, $$l = ' + each.obj + '.length; ' + each.key + ' < $$l; ' + each.key + '++) {\n' - + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n'); - - this.visit(each.block); - - this.buf.push('' - + ' }\n' - + ' } else {\n' - + ' for (var ' + each.key + ' in ' + each.obj + ') {\n' - + ' if (' + each.obj + '.hasOwnProperty(' + each.key + ')){' - + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n'); - - this.visit(each.block); - - this.buf.push(' }\n'); - - this.buf.push(' }\n }\n}).call(this);\n'); - }, - - /** - * Visit `attrs`. - * - * @param {Array} attrs - * @api public - */ - - visitAttributes: function(attrs){ - var val = this.attrs(attrs); - if (val.inherits) { - this.buf.push("buf.push(attrs(merge({ " + val.buf + - " }, attributes), merge(" + val.escaped + ", escaped, true)));"); - } else if (val.constant) { - eval('var buf={' + val.buf + '};'); - this.buffer(runtime.attrs(buf, JSON.parse(val.escaped)), true); - } else { - this.buf.push("buf.push(attrs({ " + val.buf + " }, " + val.escaped + "));"); - } - }, - - /** - * Compile attributes. - */ - - attrs: function(attrs){ - var buf = [] - , classes = [] - , escaped = {} - , constant = attrs.every(function(attr){ return isConstant(attr.val) }) - , inherits = false; - - if (this.terse) buf.push('terse: true'); - - attrs.forEach(function(attr){ - if (attr.name == 'attributes') return inherits = true; - escaped[attr.name] = attr.escaped; - if (attr.name == 'class') { - classes.push('(' + attr.val + ')'); - } else { - var pair = "'" + attr.name + "':(" + attr.val + ')'; - buf.push(pair); - } - }); - - if (classes.length) { - classes = classes.join(" + ' ' + "); - buf.push("class: " + classes); - } - - return { - buf: buf.join(', ').replace('class:', '"class":'), - escaped: JSON.stringify(escaped), - inherits: inherits, - constant: constant - }; - } -}; - -/** - * Check if expression can be evaluated to a constant - * - * @param {String} expression - * @return {Boolean} - * @api private - */ - -function isConstant(val){ - // Check strings/literals - if (/^ *("([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'|true|false|null|undefined) *$/i.test(val)) - return true; - - // Check numbers - if (!isNaN(Number(val))) - return true; - - // Check arrays - var matches; - if (matches = /^ *\[(.*)\] *$/.exec(val)) - return matches[1].split(',').every(isConstant); - - return false; -} - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -function escape(html){ - return String(html) - .replace(/&(?!\w+;)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -} -}); // module: compiler.js - -require.register("doctypes.js", function(module, exports, require){ - -/*! - * Jade - doctypes - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = { - '5': '' - , 'default': '' - , 'xml': '' - , 'transitional': '' - , 'strict': '' - , 'frameset': '' - , '1.1': '' - , 'basic': '' - , 'mobile': '' -}; -}); // module: doctypes.js - -require.register("filters.js", function(module, exports, require){ - -/*! - * Jade - filters - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = { - - /** - * Wrap text with CDATA block. - */ - - cdata: function(str){ - return ''; - }, - - /** - * Transform sass to css, wrapped in style tags. - */ - - sass: function(str){ - str = str.replace(/\\n/g, '\n'); - var sass = require('sass').render(str).replace(/\n/g, '\\n'); - return ''; - }, - - /** - * Transform stylus to css, wrapped in style tags. - */ - - stylus: function(str, options){ - var ret; - str = str.replace(/\\n/g, '\n'); - var stylus = require('stylus'); - stylus(str, options).render(function(err, css){ - if (err) throw err; - ret = css.replace(/\n/g, '\\n'); - }); - return ''; - }, - - /** - * Transform less to css, wrapped in style tags. - */ - - less: function(str){ - var ret; - str = str.replace(/\\n/g, '\n'); - require('less').render(str, function(err, css){ - if (err) throw err; - ret = ''; - }); - return ret; - }, - - /** - * Transform markdown to html. - */ - - markdown: function(str){ - var md; - - // support markdown / discount - try { - md = require('markdown'); - } catch (err){ - try { - md = require('discount'); - } catch (err) { - try { - md = require('markdown-js'); - } catch (err) { - try { - md = require('marked'); - } catch (err) { - throw new - Error('Cannot find markdown library, install markdown, discount, or marked.'); - } - } - } - } - - str = str.replace(/\\n/g, '\n'); - return md.parse(str).replace(/\n/g, '\\n').replace(/'/g,'''); - }, - - /** - * Transform coffeescript to javascript. - */ - - coffeescript: function(str){ - str = str.replace(/\\n/g, '\n'); - var js = require('coffee-script').compile(str).replace(/\\/g, '\\\\').replace(/\n/g, '\\n'); - return ''; - } -}; - -}); // module: filters.js - -require.register("inline-tags.js", function(module, exports, require){ - -/*! - * Jade - inline tags - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = [ - 'a' - , 'abbr' - , 'acronym' - , 'b' - , 'br' - , 'code' - , 'em' - , 'font' - , 'i' - , 'img' - , 'ins' - , 'kbd' - , 'map' - , 'samp' - , 'small' - , 'span' - , 'strong' - , 'sub' - , 'sup' -]; -}); // module: inline-tags.js - -require.register("jade.js", function(module, exports, require){ -/*! - * Jade - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Parser = require('./parser') - , Lexer = require('./lexer') - , Compiler = require('./compiler') - , runtime = require('./runtime') - -/** - * Library version. - */ - -exports.version = '0.26.1'; - -/** - * Expose self closing tags. - */ - -exports.selfClosing = require('./self-closing'); - -/** - * Default supported doctypes. - */ - -exports.doctypes = require('./doctypes'); - -/** - * Text filters. - */ - -exports.filters = require('./filters'); - -/** - * Utilities. - */ - -exports.utils = require('./utils'); - -/** - * Expose `Compiler`. - */ - -exports.Compiler = Compiler; - -/** - * Expose `Parser`. - */ - -exports.Parser = Parser; - -/** - * Expose `Lexer`. - */ - -exports.Lexer = Lexer; - -/** - * Nodes. - */ - -exports.nodes = require('./nodes'); - -/** - * Jade runtime helpers. - */ - -exports.runtime = runtime; - -/** - * Template function cache. - */ - -exports.cache = {}; - -/** - * Parse the given `str` of jade and return a function body. - * - * @param {String} str - * @param {Object} options - * @return {String} - * @api private - */ - -function parse(str, options){ - try { - // Parse - var parser = new Parser(str, options.filename, options); - - // Compile - var compiler = new (options.compiler || Compiler)(parser.parse(), options) - , js = compiler.compile(); - - // Debug compiler - if (options.debug) { - console.error('\nCompiled Function:\n\n\033[90m%s\033[0m', js.replace(/^/gm, ' ')); - } - - return '' - + 'var buf = [];\n' - + (options.self - ? 'var self = locals || {};\n' + js - : 'with (locals || {}) {\n' + js + '\n}\n') - + 'return buf.join("");'; - } catch (err) { - parser = parser.context(); - runtime.rethrow(err, parser.filename, parser.lexer.lineno); - } -} - -/** - * Compile a `Function` representation of the given jade `str`. - * - * Options: - * - * - `compileDebug` when `false` debugging code is stripped from the compiled template - * - `client` when `true` the helper functions `escape()` etc will reference `jade.escape()` - * for use with the Jade client-side runtime.js - * - * @param {String} str - * @param {Options} options - * @return {Function} - * @api public - */ - -exports.compile = function(str, options){ - var options = options || {} - , client = options.client - , filename = options.filename - ? JSON.stringify(options.filename) - : 'undefined' - , fn; - - if (options.compileDebug !== false) { - fn = [ - 'var __jade = [{ lineno: 1, filename: ' + filename + ' }];' - , 'try {' - , parse(String(str), options) - , '} catch (err) {' - , ' rethrow(err, __jade[0].filename, __jade[0].lineno);' - , '}' - ].join('\n'); - } else { - fn = parse(String(str), options); - } - - if (client) { - fn = 'attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\n' + fn; - } - - fn = new Function('locals, attrs, escape, rethrow, merge', fn); - - if (client) return fn; - - return function(locals){ - return fn(locals, runtime.attrs, runtime.escape, runtime.rethrow, runtime.merge); - }; -}; - -/** - * Render the given `str` of jade and invoke - * the callback `fn(err, str)`. - * - * Options: - * - * - `cache` enable template caching - * - `filename` filename required for `include` / `extends` and caching - * - * @param {String} str - * @param {Object|Function} options or fn - * @param {Function} fn - * @api public - */ - -exports.render = function(str, options, fn){ - // swap args - if ('function' == typeof options) { - fn = options, options = {}; - } - - // cache requires .filename - if (options.cache && !options.filename) { - return fn(new Error('the "filename" option is required for caching')); - } - - try { - var path = options.filename; - var tmpl = options.cache - ? exports.cache[path] || (exports.cache[path] = exports.compile(str, options)) - : exports.compile(str, options); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Render a Jade file at the given `path` and callback `fn(err, str)`. - * - * @param {String} path - * @param {Object|Function} options or callback - * @param {Function} fn - * @api public - */ - -exports.renderFile = function(path, options, fn){ - var key = path + ':string'; - - if ('function' == typeof options) { - fn = options, options = {}; - } - - try { - options.filename = path; - var str = options.cache - ? exports.cache[key] || (exports.cache[key] = fs.readFileSync(path, 'utf8')) - : fs.readFileSync(path, 'utf8'); - exports.render(str, options, fn); - } catch (err) { - fn(err); - } -}; - -/** - * Express support. - */ - -exports.__express = exports.renderFile; - -}); // module: jade.js - -require.register("lexer.js", function(module, exports, require){ - -/*! - * Jade - Lexer - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Initialize `Lexer` with the given `str`. - * - * Options: - * - * - `colons` allow colons for attr delimiters - * - * @param {String} str - * @param {Object} options - * @api private - */ - -var Lexer = module.exports = function Lexer(str, options) { - options = options || {}; - this.input = str.replace(/\r\n|\r/g, '\n'); - this.colons = options.colons; - this.deferredTokens = []; - this.lastIndents = 0; - this.lineno = 1; - this.stash = []; - this.indentStack = []; - this.indentRe = null; - this.pipeless = false; -}; - -/** - * Lexer prototype. - */ - -Lexer.prototype = { - - /** - * Construct a token with the given `type` and `val`. - * - * @param {String} type - * @param {String} val - * @return {Object} - * @api private - */ - - tok: function(type, val){ - return { - type: type - , line: this.lineno - , val: val - } - }, - - /** - * Consume the given `len` of input. - * - * @param {Number} len - * @api private - */ - - consume: function(len){ - this.input = this.input.substr(len); - }, - - /** - * Scan for `type` with the given `regexp`. - * - * @param {String} type - * @param {RegExp} regexp - * @return {Object} - * @api private - */ - - scan: function(regexp, type){ - var captures; - if (captures = regexp.exec(this.input)) { - this.consume(captures[0].length); - return this.tok(type, captures[1]); - } - }, - - /** - * Defer the given `tok`. - * - * @param {Object} tok - * @api private - */ - - defer: function(tok){ - this.deferredTokens.push(tok); - }, - - /** - * Lookahead `n` tokens. - * - * @param {Number} n - * @return {Object} - * @api private - */ - - lookahead: function(n){ - var fetch = n - this.stash.length; - while (fetch-- > 0) this.stash.push(this.next()); - return this.stash[--n]; - }, - - /** - * Return the indexOf `start` / `end` delimiters. - * - * @param {String} start - * @param {String} end - * @return {Number} - * @api private - */ - - indexOfDelimiters: function(start, end){ - var str = this.input - , nstart = 0 - , nend = 0 - , pos = 0; - for (var i = 0, len = str.length; i < len; ++i) { - if (start == str.charAt(i)) { - ++nstart; - } else if (end == str.charAt(i)) { - if (++nend == nstart) { - pos = i; - break; - } - } - } - return pos; - }, - - /** - * Stashed token. - */ - - stashed: function() { - return this.stash.length - && this.stash.shift(); - }, - - /** - * Deferred token. - */ - - deferred: function() { - return this.deferredTokens.length - && this.deferredTokens.shift(); - }, - - /** - * end-of-source. - */ - - eos: function() { - if (this.input.length) return; - if (this.indentStack.length) { - this.indentStack.shift(); - return this.tok('outdent'); - } else { - return this.tok('eos'); - } - }, - - /** - * Blank line. - */ - - blank: function() { - var captures; - if (captures = /^\n *\n/.exec(this.input)) { - this.consume(captures[0].length - 1); - if (this.pipeless) return this.tok('text', ''); - return this.next(); - } - }, - - /** - * Comment. - */ - - comment: function() { - var captures; - if (captures = /^ *\/\/(-)?([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('comment', captures[2]); - tok.buffer = '-' != captures[1]; - return tok; - } - }, - - /** - * Interpolated tag. - */ - - interpolation: function() { - var captures; - if (captures = /^#\{(.*?)\}/.exec(this.input)) { - this.consume(captures[0].length); - return this.tok('interpolation', captures[1]); - } - }, - - /** - * Tag. - */ - - tag: function() { - var captures; - if (captures = /^(\w[-:\w]*)(\/?)/.exec(this.input)) { - this.consume(captures[0].length); - var tok, name = captures[1]; - if (':' == name[name.length - 1]) { - name = name.slice(0, -1); - tok = this.tok('tag', name); - this.defer(this.tok(':')); - while (' ' == this.input[0]) this.input = this.input.substr(1); - } else { - tok = this.tok('tag', name); - } - tok.selfClosing = !! captures[2]; - return tok; - } - }, - - /** - * Filter. - */ - - filter: function() { - return this.scan(/^:(\w+)/, 'filter'); - }, - - /** - * Doctype. - */ - - doctype: function() { - return this.scan(/^(?:!!!|doctype) *([^\n]+)?/, 'doctype'); - }, - - /** - * Id. - */ - - id: function() { - return this.scan(/^#([\w-]+)/, 'id'); - }, - - /** - * Class. - */ - - className: function() { - return this.scan(/^\.([\w-]+)/, 'class'); - }, - - /** - * Text. - */ - - text: function() { - return this.scan(/^(?:\| ?| ?)?([^\n]+)/, 'text'); - }, - - /** - * Extends. - */ - - "extends": function() { - return this.scan(/^extends? +([^\n]+)/, 'extends'); - }, - - /** - * Block prepend. - */ - - prepend: function() { - var captures; - if (captures = /^prepend +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = 'prepend' - , name = captures[1] - , tok = this.tok('block', name); - tok.mode = mode; - return tok; - } - }, - - /** - * Block append. - */ - - append: function() { - var captures; - if (captures = /^append +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = 'append' - , name = captures[1] - , tok = this.tok('block', name); - tok.mode = mode; - return tok; - } - }, - - /** - * Block. - */ - - block: function() { - var captures; - if (captures = /^block\b *(?:(prepend|append) +)?([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = captures[1] || 'replace' - , name = captures[2] - , tok = this.tok('block', name); - - tok.mode = mode; - return tok; - } - }, - - /** - * Yield. - */ - - yield: function() { - return this.scan(/^yield */, 'yield'); - }, - - /** - * Include. - */ - - include: function() { - return this.scan(/^include +([^\n]+)/, 'include'); - }, - - /** - * Case. - */ - - "case": function() { - return this.scan(/^case +([^\n]+)/, 'case'); - }, - - /** - * When. - */ - - when: function() { - return this.scan(/^when +([^:\n]+)/, 'when'); - }, - - /** - * Default. - */ - - "default": function() { - return this.scan(/^default */, 'default'); - }, - - /** - * Assignment. - */ - - assignment: function() { - var captures; - if (captures = /^(\w+) += *([^;\n]+)( *;? *)/.exec(this.input)) { - this.consume(captures[0].length); - var name = captures[1] - , val = captures[2]; - return this.tok('code', 'var ' + name + ' = (' + val + ');'); - } - }, - - /** - * Call mixin. - */ - - call: function(){ - var captures; - if (captures = /^\+([-\w]+)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('call', captures[1]); - - // Check for args (not attributes) - if (captures = /^ *\((.*?)\)/.exec(this.input)) { - if (!/^ *[-\w]+ *=/.test(captures[1])) { - this.consume(captures[0].length); - tok.args = captures[1]; - } - } - - return tok; - } - }, - - /** - * Mixin. - */ - - mixin: function(){ - var captures; - if (captures = /^mixin +([-\w]+)(?: *\((.*)\))?/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('mixin', captures[1]); - tok.args = captures[2]; - return tok; - } - }, - - /** - * Conditional. - */ - - conditional: function() { - var captures; - if (captures = /^(if|unless|else if|else)\b([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var type = captures[1] - , js = captures[2]; - - switch (type) { - case 'if': js = 'if (' + js + ')'; break; - case 'unless': js = 'if (!(' + js + '))'; break; - case 'else if': js = 'else if (' + js + ')'; break; - case 'else': js = 'else'; break; - } - - return this.tok('code', js); - } - }, - - /** - * While. - */ - - "while": function() { - var captures; - if (captures = /^while +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - return this.tok('code', 'while (' + captures[1] + ')'); - } - }, - - /** - * Each. - */ - - each: function() { - var captures; - if (captures = /^(?:- *)?(?:each|for) +(\w+)(?: *, *(\w+))? * in *([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('each', captures[1]); - tok.key = captures[2] || '$index'; - tok.code = captures[3]; - return tok; - } - }, - - /** - * Code. - */ - - code: function() { - var captures; - if (captures = /^(!?=|-)([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var flags = captures[1]; - captures[1] = captures[2]; - var tok = this.tok('code', captures[1]); - tok.escape = flags[0] === '='; - tok.buffer = flags[0] === '=' || flags[1] === '='; - return tok; - } - }, - - /** - * Attributes. - */ - - attrs: function() { - if ('(' == this.input.charAt(0)) { - var index = this.indexOfDelimiters('(', ')') - , str = this.input.substr(1, index-1) - , tok = this.tok('attrs') - , len = str.length - , colons = this.colons - , states = ['key'] - , escapedAttr - , key = '' - , val = '' - , quote - , c - , p; - - function state(){ - return states[states.length - 1]; - } - - function interpolate(attr) { - return attr.replace(/#\{([^}]+)\}/g, function(_, expr){ - return quote + " + (" + expr + ") + " + quote; - }); - } - - this.consume(index + 1); - tok.attrs = {}; - tok.escaped = {}; - - function parse(c) { - var real = c; - // TODO: remove when people fix ":" - if (colons && ':' == c) c = '='; - switch (c) { - case ',': - case '\n': - switch (state()) { - case 'expr': - case 'array': - case 'string': - case 'object': - val += c; - break; - default: - states.push('key'); - val = val.trim(); - key = key.trim(); - if ('' == key) return; - key = key.replace(/^['"]|['"]$/g, '').replace('!', ''); - tok.escaped[key] = escapedAttr; - tok.attrs[key] = '' == val - ? true - : interpolate(val); - key = val = ''; - } - break; - case '=': - switch (state()) { - case 'key char': - key += real; - break; - case 'val': - case 'expr': - case 'array': - case 'string': - case 'object': - val += real; - break; - default: - escapedAttr = '!' != p; - states.push('val'); - } - break; - case '(': - if ('val' == state() - || 'expr' == state()) states.push('expr'); - val += c; - break; - case ')': - if ('expr' == state() - || 'val' == state()) states.pop(); - val += c; - break; - case '{': - if ('val' == state()) states.push('object'); - val += c; - break; - case '}': - if ('object' == state()) states.pop(); - val += c; - break; - case '[': - if ('val' == state()) states.push('array'); - val += c; - break; - case ']': - if ('array' == state()) states.pop(); - val += c; - break; - case '"': - case "'": - switch (state()) { - case 'key': - states.push('key char'); - break; - case 'key char': - states.pop(); - break; - case 'string': - if (c == quote) states.pop(); - val += c; - break; - default: - states.push('string'); - val += c; - quote = c; - } - break; - case '': - break; - default: - switch (state()) { - case 'key': - case 'key char': - key += c; - break; - default: - val += c; - } - } - p = c; - } - - for (var i = 0; i < len; ++i) { - parse(str.charAt(i)); - } - - parse(','); - - if ('/' == this.input.charAt(0)) { - this.consume(1); - tok.selfClosing = true; - } - - return tok; - } - }, - - /** - * Indent | Outdent | Newline. - */ - - indent: function() { - var captures, re; - - // established regexp - if (this.indentRe) { - captures = this.indentRe.exec(this.input); - // determine regexp - } else { - // tabs - re = /^\n(\t*) */; - captures = re.exec(this.input); - - // spaces - if (captures && !captures[1].length) { - re = /^\n( *)/; - captures = re.exec(this.input); - } - - // established - if (captures && captures[1].length) this.indentRe = re; - } - - if (captures) { - var tok - , indents = captures[1].length; - - ++this.lineno; - this.consume(indents + 1); - - if (' ' == this.input[0] || '\t' == this.input[0]) { - throw new Error('Invalid indentation, you can use tabs or spaces but not both'); - } - - // blank line - if ('\n' == this.input[0]) return this.tok('newline'); - - // outdent - if (this.indentStack.length && indents < this.indentStack[0]) { - while (this.indentStack.length && this.indentStack[0] > indents) { - this.stash.push(this.tok('outdent')); - this.indentStack.shift(); - } - tok = this.stash.pop(); - // indent - } else if (indents && indents != this.indentStack[0]) { - this.indentStack.unshift(indents); - tok = this.tok('indent', indents); - // newline - } else { - tok = this.tok('newline'); - } - - return tok; - } - }, - - /** - * Pipe-less text consumed only when - * pipeless is true; - */ - - pipelessText: function() { - if (this.pipeless) { - if ('\n' == this.input[0]) return; - var i = this.input.indexOf('\n'); - if (-1 == i) i = this.input.length; - var str = this.input.substr(0, i); - this.consume(str.length); - return this.tok('text', str); - } - }, - - /** - * ':' - */ - - colon: function() { - return this.scan(/^: */, ':'); - }, - - /** - * Return the next token object, or those - * previously stashed by lookahead. - * - * @return {Object} - * @api private - */ - - advance: function(){ - return this.stashed() - || this.next(); - }, - - /** - * Return the next token object. - * - * @return {Object} - * @api private - */ - - next: function() { - return this.deferred() - || this.blank() - || this.eos() - || this.pipelessText() - || this.yield() - || this.doctype() - || this.interpolation() - || this["case"]() - || this.when() - || this["default"]() - || this["extends"]() - || this.append() - || this.prepend() - || this.block() - || this.include() - || this.mixin() - || this.call() - || this.conditional() - || this.each() - || this["while"]() - || this.assignment() - || this.tag() - || this.filter() - || this.code() - || this.id() - || this.className() - || this.attrs() - || this.indent() - || this.comment() - || this.colon() - || this.text(); - } -}; - -}); // module: lexer.js - -require.register("nodes/attrs.js", function(module, exports, require){ - -/*! - * Jade - nodes - Attrs - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'), - Block = require('./block'); - -/** - * Initialize a `Attrs` node. - * - * @api public - */ - -var Attrs = module.exports = function Attrs() { - this.attrs = []; -}; - -/** - * Inherit from `Node`. - */ - -Attrs.prototype = new Node; -Attrs.prototype.constructor = Attrs; - - -/** - * Set attribute `name` to `val`, keep in mind these become - * part of a raw js object literal, so to quote a value you must - * '"quote me"', otherwise or example 'user.name' is literal JavaScript. - * - * @param {String} name - * @param {String} val - * @param {Boolean} escaped - * @return {Tag} for chaining - * @api public - */ - -Attrs.prototype.setAttribute = function(name, val, escaped){ - this.attrs.push({ name: name, val: val, escaped: escaped }); - return this; -}; - -/** - * Remove attribute `name` when present. - * - * @param {String} name - * @api public - */ - -Attrs.prototype.removeAttribute = function(name){ - for (var i = 0, len = this.attrs.length; i < len; ++i) { - if (this.attrs[i] && this.attrs[i].name == name) { - delete this.attrs[i]; - } - } -}; - -/** - * Get attribute value by `name`. - * - * @param {String} name - * @return {String} - * @api public - */ - -Attrs.prototype.getAttribute = function(name){ - for (var i = 0, len = this.attrs.length; i < len; ++i) { - if (this.attrs[i] && this.attrs[i].name == name) { - return this.attrs[i].val; - } - } -}; - -}); // module: nodes/attrs.js - -require.register("nodes/block-comment.js", function(module, exports, require){ - -/*! - * Jade - nodes - BlockComment - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `BlockComment` with the given `block`. - * - * @param {String} val - * @param {Block} block - * @param {Boolean} buffer - * @api public - */ - -var BlockComment = module.exports = function BlockComment(val, block, buffer) { - this.block = block; - this.val = val; - this.buffer = buffer; -}; - -/** - * Inherit from `Node`. - */ - -BlockComment.prototype = new Node; -BlockComment.prototype.constructor = BlockComment; - -}); // module: nodes/block-comment.js - -require.register("nodes/block.js", function(module, exports, require){ - -/*! - * Jade - nodes - Block - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a new `Block` with an optional `node`. - * - * @param {Node} node - * @api public - */ - -var Block = module.exports = function Block(node){ - this.nodes = []; - if (node) this.push(node); -}; - -/** - * Inherit from `Node`. - */ - -Block.prototype = new Node; -Block.prototype.constructor = Block; - - -/** - * Block flag. - */ - -Block.prototype.isBlock = true; - -/** - * Replace the nodes in `other` with the nodes - * in `this` block. - * - * @param {Block} other - * @api private - */ - -Block.prototype.replace = function(other){ - other.nodes = this.nodes; -}; - -/** - * Pust the given `node`. - * - * @param {Node} node - * @return {Number} - * @api public - */ - -Block.prototype.push = function(node){ - return this.nodes.push(node); -}; - -/** - * Check if this block is empty. - * - * @return {Boolean} - * @api public - */ - -Block.prototype.isEmpty = function(){ - return 0 == this.nodes.length; -}; - -/** - * Unshift the given `node`. - * - * @param {Node} node - * @return {Number} - * @api public - */ - -Block.prototype.unshift = function(node){ - return this.nodes.unshift(node); -}; - -/** - * Return the "last" block, or the first `yield` node. - * - * @return {Block} - * @api private - */ - -Block.prototype.includeBlock = function(){ - var ret = this - , node; - - for (var i = 0, len = this.nodes.length; i < len; ++i) { - node = this.nodes[i]; - if (node.yield) return node; - else if (node.textOnly) continue; - else if (node.includeBlock) ret = node.includeBlock(); - else if (node.block && !node.block.isEmpty()) ret = node.block.includeBlock(); - } - - return ret; -}; - -/** - * Return a clone of this block. - * - * @return {Block} - * @api private - */ - -Block.prototype.clone = function(){ - var clone = new Block; - for (var i = 0, len = this.nodes.length; i < len; ++i) { - clone.push(this.nodes[i].clone()); - } - return clone; -}; - - -}); // module: nodes/block.js - -require.register("nodes/case.js", function(module, exports, require){ - -/*! - * Jade - nodes - Case - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a new `Case` with `expr`. - * - * @param {String} expr - * @api public - */ - -var Case = exports = module.exports = function Case(expr, block){ - this.expr = expr; - this.block = block; -}; - -/** - * Inherit from `Node`. - */ - -Case.prototype = new Node; -Case.prototype.constructor = Case; - - -var When = exports.When = function When(expr, block){ - this.expr = expr; - this.block = block; - this.debug = false; -}; - -/** - * Inherit from `Node`. - */ - -When.prototype = new Node; -When.prototype.constructor = When; - - - -}); // module: nodes/case.js - -require.register("nodes/code.js", function(module, exports, require){ - -/*! - * Jade - nodes - Code - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Code` node with the given code `val`. - * Code may also be optionally buffered and escaped. - * - * @param {String} val - * @param {Boolean} buffer - * @param {Boolean} escape - * @api public - */ - -var Code = module.exports = function Code(val, buffer, escape) { - this.val = val; - this.buffer = buffer; - this.escape = escape; - if (val.match(/^ *else/)) this.debug = false; -}; - -/** - * Inherit from `Node`. - */ - -Code.prototype = new Node; -Code.prototype.constructor = Code; - -}); // module: nodes/code.js - -require.register("nodes/comment.js", function(module, exports, require){ - -/*! - * Jade - nodes - Comment - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Comment` with the given `val`, optionally `buffer`, - * otherwise the comment may render in the output. - * - * @param {String} val - * @param {Boolean} buffer - * @api public - */ - -var Comment = module.exports = function Comment(val, buffer) { - this.val = val; - this.buffer = buffer; -}; - -/** - * Inherit from `Node`. - */ - -Comment.prototype = new Node; -Comment.prototype.constructor = Comment; - -}); // module: nodes/comment.js - -require.register("nodes/doctype.js", function(module, exports, require){ - -/*! - * Jade - nodes - Doctype - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Doctype` with the given `val`. - * - * @param {String} val - * @api public - */ - -var Doctype = module.exports = function Doctype(val) { - this.val = val; -}; - -/** - * Inherit from `Node`. - */ - -Doctype.prototype = new Node; -Doctype.prototype.constructor = Doctype; - -}); // module: nodes/doctype.js - -require.register("nodes/each.js", function(module, exports, require){ - -/*! - * Jade - nodes - Each - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize an `Each` node, representing iteration - * - * @param {String} obj - * @param {String} val - * @param {String} key - * @param {Block} block - * @api public - */ - -var Each = module.exports = function Each(obj, val, key, block) { - this.obj = obj; - this.val = val; - this.key = key; - this.block = block; -}; - -/** - * Inherit from `Node`. - */ - -Each.prototype = new Node; -Each.prototype.constructor = Each; - -}); // module: nodes/each.js - -require.register("nodes/filter.js", function(module, exports, require){ - -/*! - * Jade - nodes - Filter - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node') - , Block = require('./block'); - -/** - * Initialize a `Filter` node with the given - * filter `name` and `block`. - * - * @param {String} name - * @param {Block|Node} block - * @api public - */ - -var Filter = module.exports = function Filter(name, block, attrs) { - this.name = name; - this.block = block; - this.attrs = attrs; - this.isASTFilter = !block.nodes.every(function(node){ return node.isText }); -}; - -/** - * Inherit from `Node`. - */ - -Filter.prototype = new Node; -Filter.prototype.constructor = Filter; - -}); // module: nodes/filter.js - -require.register("nodes/index.js", function(module, exports, require){ - -/*! - * Jade - nodes - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -exports.Node = require('./node'); -exports.Tag = require('./tag'); -exports.Code = require('./code'); -exports.Each = require('./each'); -exports.Case = require('./case'); -exports.Text = require('./text'); -exports.Block = require('./block'); -exports.Mixin = require('./mixin'); -exports.Filter = require('./filter'); -exports.Comment = require('./comment'); -exports.Literal = require('./literal'); -exports.BlockComment = require('./block-comment'); -exports.Doctype = require('./doctype'); - -}); // module: nodes/index.js - -require.register("nodes/literal.js", function(module, exports, require){ - -/*! - * Jade - nodes - Literal - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Literal` node with the given `str. - * - * @param {String} str - * @api public - */ - -var Literal = module.exports = function Literal(str) { - this.str = str - .replace(/\\/g, "\\\\") - .replace(/\n|\r\n/g, "\\n") - .replace(/'/g, "\\'"); -}; - -/** - * Inherit from `Node`. - */ - -Literal.prototype = new Node; -Literal.prototype.constructor = Literal; - - -}); // module: nodes/literal.js - -require.register("nodes/mixin.js", function(module, exports, require){ - -/*! - * Jade - nodes - Mixin - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Attrs = require('./attrs'); - -/** - * Initialize a new `Mixin` with `name` and `block`. - * - * @param {String} name - * @param {String} args - * @param {Block} block - * @api public - */ - -var Mixin = module.exports = function Mixin(name, args, block, call){ - this.name = name; - this.args = args; - this.block = block; - this.attrs = []; - this.call = call; -}; - -/** - * Inherit from `Attrs`. - */ - -Mixin.prototype = new Attrs; -Mixin.prototype.constructor = Mixin; - - - -}); // module: nodes/mixin.js - -require.register("nodes/node.js", function(module, exports, require){ - -/*! - * Jade - nodes - Node - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Initialize a `Node`. - * - * @api public - */ - -var Node = module.exports = function Node(){}; - -/** - * Clone this node (return itself) - * - * @return {Node} - * @api private - */ - -Node.prototype.clone = function(){ - return this; -}; - -}); // module: nodes/node.js - -require.register("nodes/tag.js", function(module, exports, require){ - -/*! - * Jade - nodes - Tag - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Attrs = require('./attrs'), - Block = require('./block'), - inlineTags = require('../inline-tags'); - -/** - * Initialize a `Tag` node with the given tag `name` and optional `block`. - * - * @param {String} name - * @param {Block} block - * @api public - */ - -var Tag = module.exports = function Tag(name, block) { - this.name = name; - this.attrs = []; - this.block = block || new Block; -}; - -/** - * Inherit from `Attrs`. - */ - -Tag.prototype = new Attrs; -Tag.prototype.constructor = Tag; - - -/** - * Clone this tag. - * - * @return {Tag} - * @api private - */ - -Tag.prototype.clone = function(){ - var clone = new Tag(this.name, this.block.clone()); - clone.line = this.line; - clone.attrs = this.attrs; - clone.textOnly = this.textOnly; - return clone; -}; - -/** - * Check if this tag is an inline tag. - * - * @return {Boolean} - * @api private - */ - -Tag.prototype.isInline = function(){ - return ~inlineTags.indexOf(this.name); -}; - -/** - * Check if this tag's contents can be inlined. Used for pretty printing. - * - * @return {Boolean} - * @api private - */ - -Tag.prototype.canInline = function(){ - var nodes = this.block.nodes; - - function isInline(node){ - // Recurse if the node is a block - if (node.isBlock) return node.nodes.every(isInline); - return node.isText || (node.isInline && node.isInline()); - } - - // Empty tag - if (!nodes.length) return true; - - // Text-only or inline-only tag - if (1 == nodes.length) return isInline(nodes[0]); - - // Multi-line inline-only tag - if (this.block.nodes.every(isInline)) { - for (var i = 1, len = nodes.length; i < len; ++i) { - if (nodes[i-1].isText && nodes[i].isText) - return false; - } - return true; - } - - // Mixed tag - return false; -}; -}); // module: nodes/tag.js - -require.register("nodes/text.js", function(module, exports, require){ - -/*! - * Jade - nodes - Text - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Text` node with optional `line`. - * - * @param {String} line - * @api public - */ - -var Text = module.exports = function Text(line) { - this.val = ''; - if ('string' == typeof line) this.val = line; -}; - -/** - * Inherit from `Node`. - */ - -Text.prototype = new Node; -Text.prototype.constructor = Text; - - -/** - * Flag as text. - */ - -Text.prototype.isText = true; -}); // module: nodes/text.js - -require.register("parser.js", function(module, exports, require){ - -/*! - * Jade - Parser - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Lexer = require('./lexer') - , nodes = require('./nodes'); - -/** - * Initialize `Parser` with the given input `str` and `filename`. - * - * @param {String} str - * @param {String} filename - * @param {Object} options - * @api public - */ - -var Parser = exports = module.exports = function Parser(str, filename, options){ - this.input = str; - this.lexer = new Lexer(str, options); - this.filename = filename; - this.blocks = {}; - this.mixins = {}; - this.options = options; - this.contexts = [this]; -}; - -/** - * Tags that may not contain tags. - */ - -var textOnly = exports.textOnly = ['script', 'style']; - -/** - * Parser prototype. - */ - -Parser.prototype = { - - /** - * Push `parser` onto the context stack, - * or pop and return a `Parser`. - */ - - context: function(parser){ - if (parser) { - this.contexts.push(parser); - } else { - return this.contexts.pop(); - } - }, - - /** - * Return the next token object. - * - * @return {Object} - * @api private - */ - - advance: function(){ - return this.lexer.advance(); - }, - - /** - * Skip `n` tokens. - * - * @param {Number} n - * @api private - */ - - skip: function(n){ - while (n--) this.advance(); - }, - - /** - * Single token lookahead. - * - * @return {Object} - * @api private - */ - - peek: function() { - return this.lookahead(1); - }, - - /** - * Return lexer lineno. - * - * @return {Number} - * @api private - */ - - line: function() { - return this.lexer.lineno; - }, - - /** - * `n` token lookahead. - * - * @param {Number} n - * @return {Object} - * @api private - */ - - lookahead: function(n){ - return this.lexer.lookahead(n); - }, - - /** - * Parse input returning a string of js for evaluation. - * - * @return {String} - * @api public - */ - - parse: function(){ - var block = new nodes.Block, parser; - block.line = this.line(); - - while ('eos' != this.peek().type) { - if ('newline' == this.peek().type) { - this.advance(); - } else { - block.push(this.parseExpr()); - } - } - - if (parser = this.extending) { - this.context(parser); - var ast = parser.parse(); - this.context(); - // hoist mixins - for (var name in this.mixins) - ast.unshift(this.mixins[name]); - return ast; - } - - return block; - }, - - /** - * Expect the given type, or throw an exception. - * - * @param {String} type - * @api private - */ - - expect: function(type){ - if (this.peek().type === type) { - return this.advance(); - } else { - throw new Error('expected "' + type + '", but got "' + this.peek().type + '"'); - } - }, - - /** - * Accept the given `type`. - * - * @param {String} type - * @api private - */ - - accept: function(type){ - if (this.peek().type === type) { - return this.advance(); - } - }, - - /** - * tag - * | doctype - * | mixin - * | include - * | filter - * | comment - * | text - * | each - * | code - * | yield - * | id - * | class - * | interpolation - */ - - parseExpr: function(){ - switch (this.peek().type) { - case 'tag': - return this.parseTag(); - case 'mixin': - return this.parseMixin(); - case 'block': - return this.parseBlock(); - case 'case': - return this.parseCase(); - case 'when': - return this.parseWhen(); - case 'default': - return this.parseDefault(); - case 'extends': - return this.parseExtends(); - case 'include': - return this.parseInclude(); - case 'doctype': - return this.parseDoctype(); - case 'filter': - return this.parseFilter(); - case 'comment': - return this.parseComment(); - case 'text': - return this.parseText(); - case 'each': - return this.parseEach(); - case 'code': - return this.parseCode(); - case 'call': - return this.parseCall(); - case 'interpolation': - return this.parseInterpolation(); - case 'yield': - this.advance(); - var block = new nodes.Block; - block.yield = true; - return block; - case 'id': - case 'class': - var tok = this.advance(); - this.lexer.defer(this.lexer.tok('tag', 'div')); - this.lexer.defer(tok); - return this.parseExpr(); - default: - throw new Error('unexpected token "' + this.peek().type + '"'); - } - }, - - /** - * Text - */ - - parseText: function(){ - var tok = this.expect('text') - , node = new nodes.Text(tok.val); - node.line = this.line(); - return node; - }, - - /** - * ':' expr - * | block - */ - - parseBlockExpansion: function(){ - if (':' == this.peek().type) { - this.advance(); - return new nodes.Block(this.parseExpr()); - } else { - return this.block(); - } - }, - - /** - * case - */ - - parseCase: function(){ - var val = this.expect('case').val - , node = new nodes.Case(val); - node.line = this.line(); - node.block = this.block(); - return node; - }, - - /** - * when - */ - - parseWhen: function(){ - var val = this.expect('when').val - return new nodes.Case.When(val, this.parseBlockExpansion()); - }, - - /** - * default - */ - - parseDefault: function(){ - this.expect('default'); - return new nodes.Case.When('default', this.parseBlockExpansion()); - }, - - /** - * code - */ - - parseCode: function(){ - var tok = this.expect('code') - , node = new nodes.Code(tok.val, tok.buffer, tok.escape) - , block - , i = 1; - node.line = this.line(); - while (this.lookahead(i) && 'newline' == this.lookahead(i).type) ++i; - block = 'indent' == this.lookahead(i).type; - if (block) { - this.skip(i-1); - node.block = this.block(); - } - return node; - }, - - /** - * comment - */ - - parseComment: function(){ - var tok = this.expect('comment') - , node; - - if ('indent' == this.peek().type) { - node = new nodes.BlockComment(tok.val, this.block(), tok.buffer); - } else { - node = new nodes.Comment(tok.val, tok.buffer); - } - - node.line = this.line(); - return node; - }, - - /** - * doctype - */ - - parseDoctype: function(){ - var tok = this.expect('doctype') - , node = new nodes.Doctype(tok.val); - node.line = this.line(); - return node; - }, - - /** - * filter attrs? text-block - */ - - parseFilter: function(){ - var block - , tok = this.expect('filter') - , attrs = this.accept('attrs'); - - this.lexer.pipeless = true; - block = this.parseTextBlock(); - this.lexer.pipeless = false; - - var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs); - node.line = this.line(); - return node; - }, - - /** - * tag ':' attrs? block - */ - - parseASTFilter: function(){ - var block - , tok = this.expect('tag') - , attrs = this.accept('attrs'); - - this.expect(':'); - block = this.block(); - - var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs); - node.line = this.line(); - return node; - }, - - /** - * each block - */ - - parseEach: function(){ - var tok = this.expect('each') - , node = new nodes.Each(tok.code, tok.val, tok.key); - node.line = this.line(); - node.block = this.block(); - return node; - }, - - /** - * 'extends' name - */ - - parseExtends: function(){ - var path = require('path') - , fs = require('fs') - , dirname = path.dirname - , basename = path.basename - , join = path.join; - - if (!this.filename) - throw new Error('the "filename" option is required to extend templates'); - - var path = this.expect('extends').val.trim() - , dir = dirname(this.filename); - - var path = join(dir, path + '.jade') - , str = fs.readFileSync(path, 'utf8') - , parser = new Parser(str, path, this.options); - - parser.blocks = this.blocks; - parser.contexts = this.contexts; - this.extending = parser; - - // TODO: null node - return new nodes.Literal(''); - }, - - /** - * 'block' name block - */ - - parseBlock: function(){ - var block = this.expect('block') - , mode = block.mode - , name = block.val.trim(); - - block = 'indent' == this.peek().type - ? this.block() - : new nodes.Block(new nodes.Literal('')); - - var prev = this.blocks[name]; - - if (prev) { - switch (prev.mode) { - case 'append': - block.nodes = block.nodes.concat(prev.nodes); - prev = block; - break; - case 'prepend': - block.nodes = prev.nodes.concat(block.nodes); - prev = block; - break; - } - } - - block.mode = mode; - return this.blocks[name] = prev || block; - }, - - /** - * include block? - */ - - parseInclude: function(){ - var path = require('path') - , fs = require('fs') - , dirname = path.dirname - , basename = path.basename - , join = path.join; - - var path = this.expect('include').val.trim() - , dir = dirname(this.filename); - - if (!this.filename) - throw new Error('the "filename" option is required to use includes'); - - // no extension - if (!~basename(path).indexOf('.')) { - path += '.jade'; - } - - // non-jade - if ('.jade' != path.substr(-5)) { - var path = join(dir, path) - , str = fs.readFileSync(path, 'utf8'); - return new nodes.Literal(str); - } - - var path = join(dir, path) - , str = fs.readFileSync(path, 'utf8') - , parser = new Parser(str, path, this.options); - parser.blocks = this.blocks; - parser.mixins = this.mixins; - - this.context(parser); - var ast = parser.parse(); - this.context(); - ast.filename = path; - - if ('indent' == this.peek().type) { - ast.includeBlock().push(this.block()); - } - - return ast; - }, - - /** - * call ident block - */ - - parseCall: function(){ - var tok = this.expect('call') - , name = tok.val - , args = tok.args - , mixin = new nodes.Mixin(name, args, new nodes.Block, true); - - this.tag(mixin); - if (mixin.block.isEmpty()) mixin.block = null; - return mixin; - }, - - /** - * mixin block - */ - - parseMixin: function(){ - var tok = this.expect('mixin') - , name = tok.val - , args = tok.args - , mixin; - - // definition - if ('indent' == this.peek().type) { - mixin = new nodes.Mixin(name, args, this.block(), false); - this.mixins[name] = mixin; - return mixin; - // call - } else { - return new nodes.Mixin(name, args, null, true); - } - }, - - /** - * indent (text | newline)* outdent - */ - - parseTextBlock: function(){ - var block = new nodes.Block; - block.line = this.line(); - var spaces = this.expect('indent').val; - if (null == this._spaces) this._spaces = spaces; - var indent = Array(spaces - this._spaces + 1).join(' '); - while ('outdent' != this.peek().type) { - switch (this.peek().type) { - case 'newline': - this.advance(); - break; - case 'indent': - this.parseTextBlock().nodes.forEach(function(node){ - block.push(node); - }); - break; - default: - var text = new nodes.Text(indent + this.advance().val); - text.line = this.line(); - block.push(text); - } - } - - if (spaces == this._spaces) this._spaces = null; - this.expect('outdent'); - return block; - }, - - /** - * indent expr* outdent - */ - - block: function(){ - var block = new nodes.Block; - block.line = this.line(); - this.expect('indent'); - while ('outdent' != this.peek().type) { - if ('newline' == this.peek().type) { - this.advance(); - } else { - block.push(this.parseExpr()); - } - } - this.expect('outdent'); - return block; - }, - - /** - * interpolation (attrs | class | id)* (text | code | ':')? newline* block? - */ - - parseInterpolation: function(){ - var tok = this.advance(); - var tag = new nodes.Tag(tok.val); - tag.buffer = true; - return this.tag(tag); - }, - - /** - * tag (attrs | class | id)* (text | code | ':')? newline* block? - */ - - parseTag: function(){ - // ast-filter look-ahead - var i = 2; - if ('attrs' == this.lookahead(i).type) ++i; - if (':' == this.lookahead(i).type) { - if ('indent' == this.lookahead(++i).type) { - return this.parseASTFilter(); - } - } - - var tok = this.advance() - , tag = new nodes.Tag(tok.val); - - tag.selfClosing = tok.selfClosing; - - return this.tag(tag); - }, - - /** - * Parse tag. - */ - - tag: function(tag){ - var dot; - - tag.line = this.line(); - - // (attrs | class | id)* - out: - while (true) { - switch (this.peek().type) { - case 'id': - case 'class': - var tok = this.advance(); - tag.setAttribute(tok.type, "'" + tok.val + "'"); - continue; - case 'attrs': - var tok = this.advance() - , obj = tok.attrs - , escaped = tok.escaped - , names = Object.keys(obj); - - if (tok.selfClosing) tag.selfClosing = true; - - for (var i = 0, len = names.length; i < len; ++i) { - var name = names[i] - , val = obj[name]; - tag.setAttribute(name, val, escaped[name]); - } - continue; - default: - break out; - } - } - - // check immediate '.' - if ('.' == this.peek().val) { - dot = tag.textOnly = true; - this.advance(); - } - - // (text | code | ':')? - switch (this.peek().type) { - case 'text': - tag.block.push(this.parseText()); - break; - case 'code': - tag.code = this.parseCode(); - break; - case ':': - this.advance(); - tag.block = new nodes.Block; - tag.block.push(this.parseExpr()); - break; - } - - // newline* - while ('newline' == this.peek().type) this.advance(); - - tag.textOnly = tag.textOnly || ~textOnly.indexOf(tag.name); - - // script special-case - if ('script' == tag.name) { - var type = tag.getAttribute('type'); - if (!dot && type && 'text/javascript' != type.replace(/^['"]|['"]$/g, '')) { - tag.textOnly = false; - } - } - - // block? - if ('indent' == this.peek().type) { - if (tag.textOnly) { - this.lexer.pipeless = true; - tag.block = this.parseTextBlock(); - this.lexer.pipeless = false; - } else { - var block = this.block(); - if (tag.block) { - for (var i = 0, len = block.nodes.length; i < len; ++i) { - tag.block.push(block.nodes[i]); - } - } else { - tag.block = block; - } - } - } - - return tag; - } -}; - -}); // module: parser.js - -require.register("runtime.js", function(module, exports, require){ - -/*! - * Jade - runtime - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Lame Array.isArray() polyfill for now. - */ - -if (!Array.isArray) { - Array.isArray = function(arr){ - return '[object Array]' == Object.prototype.toString.call(arr); - }; -} - -/** - * Lame Object.keys() polyfill for now. - */ - -if (!Object.keys) { - Object.keys = function(obj){ - var arr = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - arr.push(key); - } - } - return arr; - } -} - -/** - * Merge two attribute objects giving precedence - * to values in object `b`. Classes are special-cased - * allowing for arrays and merging/joining appropriately - * resulting in a string. - * - * @param {Object} a - * @param {Object} b - * @return {Object} a - * @api private - */ - -exports.merge = function merge(a, b) { - var ac = a['class']; - var bc = b['class']; - - if (ac || bc) { - ac = ac || []; - bc = bc || []; - if (!Array.isArray(ac)) ac = [ac]; - if (!Array.isArray(bc)) bc = [bc]; - ac = ac.filter(nulls); - bc = bc.filter(nulls); - a['class'] = ac.concat(bc).join(' '); - } - - for (var key in b) { - if (key != 'class') { - a[key] = b[key]; - } - } - - return a; -}; - -/** - * Filter null `val`s. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function nulls(val) { - return val != null; -} - -/** - * Render the given attributes object. - * - * @param {Object} obj - * @param {Object} escaped - * @return {String} - * @api private - */ - -exports.attrs = function attrs(obj, escaped){ - var buf = [] - , terse = obj.terse; - - delete obj.terse; - var keys = Object.keys(obj) - , len = keys.length; - - if (len) { - buf.push(''); - for (var i = 0; i < len; ++i) { - var key = keys[i] - , val = obj[key]; - - if ('boolean' == typeof val || null == val) { - if (val) { - terse - ? buf.push(key) - : buf.push(key + '="' + key + '"'); - } - } else if (0 == key.indexOf('data') && 'string' != typeof val) { - buf.push(key + "='" + JSON.stringify(val) + "'"); - } else if ('class' == key && Array.isArray(val)) { - buf.push(key + '="' + exports.escape(val.join(' ')) + '"'); - } else if (escaped && escaped[key]) { - buf.push(key + '="' + exports.escape(val) + '"'); - } else { - buf.push(key + '="' + val + '"'); - } - } - } - - return buf.join(' '); -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function escape(html){ - return String(html) - .replace(/&(?!(\w+|\#\d+);)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; - -/** - * Re-throw the given `err` in context to the - * the jade in `filename` at the given `lineno`. - * - * @param {Error} err - * @param {String} filename - * @param {String} lineno - * @api private - */ - -exports.rethrow = function rethrow(err, filename, lineno){ - if (!filename) throw err; - - var context = 3 - , str = require('fs').readFileSync(filename, 'utf8') - , lines = str.split('\n') - , start = Math.max(lineno - context, 0) - , end = Math.min(lines.length, lineno + context); - - // Error context - var context = lines.slice(start, end).map(function(line, i){ - var curr = i + start + 1; - return (curr == lineno ? ' > ' : ' ') - + curr - + '| ' - + line; - }).join('\n'); - - // Alter exception message - err.path = filename; - err.message = (filename || 'Jade') + ':' + lineno - + '\n' + context + '\n\n' + err.message; - throw err; -}; - -}); // module: runtime.js - -require.register("self-closing.js", function(module, exports, require){ - -/*! - * Jade - self closing tags - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = [ - 'meta' - , 'img' - , 'link' - , 'input' - , 'source' - , 'area' - , 'base' - , 'col' - , 'br' - , 'hr' -]; -}); // module: self-closing.js - -require.register("utils.js", function(module, exports, require){ - -/*! - * Jade - utils - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Convert interpolation in the given string to JavaScript. - * - * @param {String} str - * @return {String} - * @api private - */ - -var interpolate = exports.interpolate = function(str){ - return str.replace(/(\\)?([#!]){(.*?)}/g, function(str, escape, flag, code){ - return escape - ? str - : "' + " - + ('!' == flag ? '' : 'escape') - + "((interp = " + code.replace(/\\'/g, "'") - + ") == null ? '' : interp) + '"; - }); -}; - -/** - * Escape single quotes in `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -var escape = exports.escape = function(str) { - return str.replace(/'/g, "\\'"); -}; - -/** - * Interpolate, and escape the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.text = function(str){ - return interpolate(escape(str)); -}; -}); // module: utils.js - -window.jade = require("jade"); -})(); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/jade.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/jade.md deleted file mode 100644 index 051dc031..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/jade.md +++ /dev/null @@ -1,510 +0,0 @@ - -# Jade - - The jade template engine for node.js - -## Synopsis - - jade [-h|--help] [-v|--version] [-o|--obj STR] - [-O|--out DIR] [-p|--path PATH] [-P|--pretty] - [-c|--client] [-D|--no-debug] - -## Examples - - translate jade the templates dir - - $ jade templates - - create {foo,bar}.html - - $ jade {foo,bar}.jade - - jade over stdio - - $ jade < my.jade > my.html - - jade over s - - $ echo "h1 Jade!" | jade - - foo, bar dirs rendering to /tmp - - $ jade foo bar --out /tmp - - compile client-side templates without debugging - instrumentation, making the output javascript - very light-weight. This requires runtime.js - in your projects. - - $ jade --client --no-debug < my.jade - -## Tags - - Tags are simply nested via whitespace, closing - tags defined for you. These indents are called "blocks". - - ul - li - a Foo - li - a Bar - - You may have several tags in one "block": - - ul - li - a Foo - a Bar - a Baz - -## Self-closing Tags - - Some tags are flagged as self-closing by default, such - as `meta`, `link`, and so on. To explicitly self-close - a tag simply append the `/` character: - - foo/ - foo(bar='baz')/ - - Would yield: - - - - -## Attributes - - Tag attributes look similar to HTML, however - the values are regular JavaScript, here are - some examples: - - a(href='google.com') Google - a(class='button', href='google.com') Google - - As mentioned the attribute values are just JavaScript, - this means ternary operations and other JavaScript expressions - work just fine: - - body(class=user.authenticated ? 'authenticated' : 'anonymous') - a(href=user.website || 'http://google.com') - - Multiple lines work too: - - input(type='checkbox', - name='agreement', - checked) - - Multiple lines without the comma work fine: - - input(type='checkbox' - name='agreement' - checked) - - Funky whitespace? fine: - - input( - type='checkbox' - name='agreement' - checked) - -## Boolean attributes - - Boolean attributes are mirrored by Jade, and accept - bools, aka _true_ or _false_. When no value is specified - _true_ is assumed. For example: - - input(type="checkbox", checked) - // => "" - - For example if the checkbox was for an agreement, perhaps `user.agreed` - was _true_ the following would also output 'checked="checked"': - - input(type="checkbox", checked=user.agreed) - -## Class attributes - - The _class_ attribute accepts an array of classes, - this can be handy when generated from a javascript - function etc: - - classes = ['foo', 'bar', 'baz'] - a(class=classes) - // => "" - -## Class literal - - Classes may be defined using a ".CLASSNAME" syntax: - - .button - // => "
      " - - Or chained: - - .large.button - // => "
      " - - The previous defaulted to divs, however you - may also specify the tag type: - - h1.title My Title - // => "

      My Title

      " - -## Id literal - - Much like the class literal there's an id literal: - - #user-1 - // => "
      " - - Again we may specify the tag as well: - - ul#menu - li: a(href='/home') Home - li: a(href='/store') Store - li: a(href='/contact') Contact - - Finally all of these may be used in any combination, - the following are all valid tags: - - a.button#contact(style: 'color: red') Contact - a.button(style: 'color: red')#contact Contact - a(style: 'color: red').button#contact Contact - -## Block expansion - - Jade supports the concept of "block expansion", in which - using a trailing ":" after a tag will inject a block: - - ul - li: a Foo - li: a Bar - li: a Baz - -## Text - - Arbitrary text may follow tags: - - p Welcome to my site - - yields: - -

      Welcome to my site

      - -## Pipe text - - Another form of text is "pipe" text. Pipes act - as the text margin for large bodies of text. - - p - | This is a large - | body of text for - | this tag. - | - | Nothing too - | exciting. - - yields: - -

      This is a large - body of text for - this tag. - - Nothing too - exciting. -

      - - Using pipes we can also specify regular Jade tags - within the text: - - p - | Click to visit - a(href='http://google.com') Google - | if you want. - -## Text only tags - - As an alternative to pipe text you may add - a trailing "." to indicate that the block - contains nothing but plain-text, no tags: - - p. - This is a large - body of text for - this tag. - - Nothing too - exciting. - - Some tags are text-only by default, for example - _script_, _textarea_, and _style_ tags do not - contain nested HTML so Jade implies the trailing ".": - - script - if (foo) { - bar(); - } - - style - body { - padding: 50px; - font: 14px Helvetica; - } - -## Template script tags - - Sometimes it's useful to define HTML in script - tags using Jade, typically for client-side templates. - - To do this simply give the _script_ tag an arbitrary - _type_ attribute such as _text/x-template_: - - script(type='text/template') - h1 Look! - p Jade still works in here! - -## Interpolation - - Both plain-text and piped-text support interpolation, - which comes in two forms, escapes and non-escaped. The - following will output the _user.name_ in the paragraph - but HTML within it will be escaped to prevent XSS attacks: - - p Welcome #{user.name} - - The following syntax is identical however it will _not_ escape - HTML, and should only be used with strings that you trust: - - p Welcome !{user.name} - -## Inline HTML - - Sometimes constructing small inline snippets of HTML - in Jade can be annoying, luckily we can add plain - HTML as well: - - p Welcome #{user.name} - -## Code - - To buffer output with Jade simply use _=_ at the beginning - of a line or after a tag. This method escapes any HTML - present in the string. - - p= user.description - - To buffer output unescaped use the _!=_ variant, but again - be careful of XSS. - - p!= user.description - - The final way to mess with JavaScript code in Jade is the unbuffered - _-_, which can be used for conditionals, defining variables etc: - - - var user = { description: 'foo bar baz' } - #user - - if (user.description) { - h2 Description - p.description= user.description - - } - - When compiled blocks are wrapped in anonymous functions, so the - following is also valid, without braces: - - - var user = { description: 'foo bar baz' } - #user - - if (user.description) - h2 Description - p.description= user.description - - If you really want you could even use `.forEach()` and others: - - - users.forEach(function(user){ - .user - h2= user.name - p User #{user.name} is #{user.age} years old - - }) - - Taking this further Jade provides some syntax for conditionals, - iteration, switch statements etc. Let's look at those next! - -## Assignment - - Jade's first-class assignment is simple, simply use the _=_ - operator and Jade will _var_ it for you. The following are equivalent: - - - var user = { name: 'tobi' } - user = { name: 'tobi' } - -## Conditionals - - Jade's first-class conditional syntax allows for optional - parenthesis, and you may now omit the leading _-_ otherwise - it's identical, still just regular javascript: - - user = { description: 'foo bar baz' } - #user - if user.description - h2 Description - p.description= user.description - - Jade provides the negated version, _unless_ as well, the following - are equivalent: - - - if (!(user.isAnonymous)) - p You're logged in as #{user.name} - - unless user.isAnonymous - p You're logged in as #{user.name} - -## Iteration - - JavaScript's _for_ loops don't look very declarative, so Jade - also provides its own _for_ loop construct, aliased as _each_: - - for user in users - .user - h2= user.name - p user #{user.name} is #{user.age} year old - - As mentioned _each_ is identical: - - each user in users - .user - h2= user.name - - If necessary the index is available as well: - - for user, i in users - .user(class='user-#{i}') - h2= user.name - - Remember, it's just JavaScript: - - ul#letters - for letter in ['a', 'b', 'c'] - li= letter - -## Mixins - - Mixins provide a way to define jade "functions" which "mix in" - their contents when called. This is useful for abstracting - out large fragments of Jade. - - The simplest possible mixin which accepts no arguments might - look like this: - - mixin hello - p Hello - - You use a mixin by placing `+` before the name: - - +hello - - For something a little more dynamic, mixins can take - arguments, the mixin itself is converted to a javascript - function internally: - - mixin hello(user) - p Hello #{user} - - +hello('Tobi') - - Yields: - -

      Hello Tobi

      - - Mixins may optionally take blocks, when a block is passed - its contents becomes the implicit `block` argument. For - example here is a mixin passed a block, and also invoked - without passing a block: - - mixin article(title) - .article - .article-wrapper - h1= title - if block - block - else - p No content provided - - +article('Hello world') - - +article('Hello world') - p This is my - p Amazing article - - yields: - -
      -
      -

      Hello world

      -

      No content provided

      -
      -
      - -
      -
      -

      Hello world

      -

      This is my

      -

      Amazing article

      -
      -
      - - Mixins can even take attributes, just like a tag. When - attributes are passed they become the implicit `attributes` - argument. Individual attributes can be accessed just like - normal object properties: - - mixin centered - .centered(class=attributes.class) - block - - +centered.bold Hello world - - +centered.red - p This is my - p Amazing article - - yields: - -
      Hello world
      -
      -

      This is my

      -

      Amazing article

      -
      - - If you use `attributes` directly, *all* passed attributes - get used: - - mixin link - a.menu(attributes) - block - - +link.highlight(href='#top') Top - +link#sec1.plain(href='#section1') Section 1 - +link#sec2.plain(href='#section2') Section 2 - - yields: - - Top - Section 1 - Section 2 - - If you pass arguments, they must directly follow the mixin: - - mixin list(arr) - if block - .title - block - ul(attributes) - each item in arr - li= item - - +list(['foo', 'bar', 'baz'])(id='myList', class='bold') - - yields: - -
        -
      • foo
      • -
      • bar
      • -
      • baz
      • -
      diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/jade.min.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/jade.min.js deleted file mode 100644 index 72e4535e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/jade.min.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(){function require(p){var path=require.resolve(p),mod=require.modules[path];if(!mod)throw new Error('failed to require "'+p+'"');return mod.exports||(mod.exports={},mod.call(mod.exports,mod,mod.exports,require.relative(path))),mod.exports}require.modules={},require.resolve=function(path){var orig=path,reg=path+".js",index=path+"/index.js";return require.modules[reg]&®||require.modules[index]&&index||orig},require.register=function(path,fn){require.modules[path]=fn},require.relative=function(parent){return function(p){if("."!=p.charAt(0))return require(p);var path=parent.split("/"),segs=p.split("/");path.pop();for(var i=0;i",this.doctype=doctype,this.terse="5"==name||"html"==name,this.xml=0==this.doctype.indexOf("1&&!escape&&block.nodes[0].isText&&block.nodes[1].isText&&this.prettyIndent(1,!0);for(var i=0;i0&&!escape&&block.nodes[i].isText&&block.nodes[i-1].isText&&this.prettyIndent(1,!1),this.visit(block.nodes[i]),block.nodes[i+1]&&block.nodes[i].isText&&block.nodes[i+1].isText&&this.buffer("\\n")},visitDoctype:function(doctype){doctype&&(doctype.val||!this.doctype)&&this.setDoctype(doctype.val||"default"),this.doctype&&this.buffer(this.doctype),this.hasCompiledDoctype=!0},visitMixin:function(mixin){var name=mixin.name.replace(/-/g,"_")+"_mixin",args=mixin.args||"",block=mixin.block,attrs=mixin.attrs,pp=this.pp;if(mixin.call){pp&&this.buf.push("__indent.push('"+Array(this.indents+1).join(" ")+"');");if(block||attrs.length){this.buf.push(name+".call({");if(block){this.buf.push("block: function(){"),this.parentIndents++;var _indents=this.indents;this.indents=0,this.visit(mixin.block),this.indents=_indents,this.parentIndents--,attrs.length?this.buf.push("},"):this.buf.push("}")}if(attrs.length){var val=this.attrs(attrs);val.inherits?this.buf.push("attributes: merge({"+val.buf+"}, attributes), escaped: merge("+val.escaped+", escaped, true)"):this.buf.push("attributes: {"+val.buf+"}, escaped: "+val.escaped)}args?this.buf.push("}, "+args+");"):this.buf.push("});")}else this.buf.push(name+"("+args+");");pp&&this.buf.push("__indent.pop();")}else this.buf.push("var "+name+" = function("+args+"){"),this.buf.push("var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {};"),this.parentIndents++,this.visit(block),this.parentIndents--,this.buf.push("};")},visitTag:function(tag){this.indents++;var name=tag.name,pp=this.pp;tag.buffer&&(name="' + ("+name+") + '"),this.hasCompiledTag||(!this.hasCompiledDoctype&&"html"==name&&this.visitDoctype(),this.hasCompiledTag=!0),pp&&!tag.isInline()&&this.prettyIndent(0,!0),(~selfClosing.indexOf(name)||tag.selfClosing)&&!this.xml?(this.buffer("<"+name),this.visitAttributes(tag.attrs),this.terse?this.buffer(">"):this.buffer("/>")):(tag.attrs.length?(this.buffer("<"+name),tag.attrs.length&&this.visitAttributes(tag.attrs),this.buffer(">")):this.buffer("<"+name+">"),tag.code&&this.visitCode(tag.code),this.escape="pre"==tag.name,this.visit(tag.block),pp&&!tag.isInline()&&"pre"!=tag.name&&!tag.canInline()&&this.prettyIndent(0,!0),this.buffer("")),this.indents--},visitFilter:function(filter){var fn=filters[filter.name];if(!fn)throw filter.isASTFilter?new Error('unknown ast filter "'+filter.name+':"'):new Error('unknown filter ":'+filter.name+'"');if(filter.isASTFilter)this.buf.push(fn(filter.block,this,filter.attrs));else{var text=filter.block.nodes.map(function(node){return node.val}).join("\n");filter.attrs=filter.attrs||{},filter.attrs.filename=this.options.filename,this.buffer(utils.text(fn(text,filter.attrs)))}},visitText:function(text){text=utils.text(text.val.replace(/\\/g,"\\\\")),this.escape&&(text=escape(text)),this.buffer(text)},visitComment:function(comment){if(!comment.buffer)return;this.pp&&this.prettyIndent(1,!0),this.buffer("")},visitBlockComment:function(comment){if(!comment.buffer)return;0==comment.val.trim().indexOf("if")?(this.buffer("")):(this.buffer(""))},visitCode:function(code){if(code.buffer){var val=code.val.trimLeft();this.buf.push("var __val__ = "+val),val='null == __val__ ? "" : __val__',code.escape&&(val="escape("+val+")"),this.buf.push("buf.push("+val+");")}else this.buf.push(code.val);code.block&&(code.buffer||this.buf.push("{"),this.visit(code.block),code.buffer||this.buf.push("}"))},visitEach:function(each){this.buf.push("// iterate "+each.obj+"\n"+";(function(){\n"+" if ('number' == typeof "+each.obj+".length) {\n"+" for (var "+each.key+" = 0, $$l = "+each.obj+".length; "+each.key+" < $$l; "+each.key+"++) {\n"+" var "+each.val+" = "+each.obj+"["+each.key+"];\n"),this.visit(each.block),this.buf.push(" }\n } else {\n for (var "+each.key+" in "+each.obj+") {\n"+" if ("+each.obj+".hasOwnProperty("+each.key+")){"+" var "+each.val+" = "+each.obj+"["+each.key+"];\n"),this.visit(each.block),this.buf.push(" }\n"),this.buf.push(" }\n }\n}).call(this);\n")},visitAttributes:function(attrs){var val=this.attrs(attrs);val.inherits?this.buf.push("buf.push(attrs(merge({ "+val.buf+" }, attributes), merge("+val.escaped+", escaped, true)));"):val.constant?(eval("var buf={"+val.buf+"};"),this.buffer(runtime.attrs(buf,JSON.parse(val.escaped)),!0)):this.buf.push("buf.push(attrs({ "+val.buf+" }, "+val.escaped+"));")},attrs:function(attrs){var buf=[],classes=[],escaped={},constant=attrs.every(function(attr){return isConstant(attr.val)}),inherits=!1;return this.terse&&buf.push("terse: true"),attrs.forEach(function(attr){if(attr.name=="attributes")return inherits=!0;escaped[attr.name]=attr.escaped;if(attr.name=="class")classes.push("("+attr.val+")");else{var pair="'"+attr.name+"':("+attr.val+")";buf.push(pair)}}),classes.length&&(classes=classes.join(" + ' ' + "),buf.push("class: "+classes)),{buf:buf.join(", ").replace("class:",'"class":'),escaped:JSON.stringify(escaped),inherits:inherits,constant:constant}}};function isConstant(val){if(/^ *("([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'|true|false|null|undefined) *$/i.test(val))return!0;if(!isNaN(Number(val)))return!0;var matches;return(matches=/^ *\[(.*)\] *$/.exec(val))?matches[1].split(",").every(isConstant):!1}function escape(html){return String(html).replace(/&(?!\w+;)/g,"&").replace(//g,">").replace(/"/g,""")}}),require.register("doctypes.js",function(module,exports,require){module.exports={5:"","default":"",xml:'',transitional:'',strict:'',frameset:'',1.1:'',basic:'',mobile:''}}),require.register("filters.js",function(module,exports,require){module.exports={cdata:function(str){return""},sass:function(str){str=str.replace(/\\n/g,"\n");var sass=require("sass").render(str).replace(/\n/g,"\\n");return'"},stylus:function(str,options){var ret;str=str.replace(/\\n/g,"\n");var stylus=require("stylus");return stylus(str,options).render(function(err,css){if(err)throw err;ret=css.replace(/\n/g,"\\n")}),'"},less:function(str){var ret;return str=str.replace(/\\n/g,"\n"),require("less").render(str,function(err,css){if(err)throw err;ret='"}),ret},markdown:function(str){var md;try{md=require("markdown")}catch(err){try{md=require("discount")}catch(err){try{md=require("markdown-js")}catch(err){try{md=require("marked")}catch(err){throw new Error("Cannot find markdown library, install markdown, discount, or marked.")}}}}return str=str.replace(/\\n/g,"\n"),md.parse(str).replace(/\n/g,"\\n").replace(/'/g,"'")},coffeescript:function(str){str=str.replace(/\\n/g,"\n");var js=require("coffee-script").compile(str).replace(/\\/g,"\\\\").replace(/\n/g,"\\n");return'"}}}),require.register("inline-tags.js",function(module,exports,require){module.exports=["a","abbr","acronym","b","br","code","em","font","i","img","ins","kbd","map","samp","small","span","strong","sub","sup"]}),require.register("jade.js",function(module,exports,require){var Parser=require("./parser"),Lexer=require("./lexer"),Compiler=require("./compiler"),runtime=require("./runtime");exports.version="0.26.1",exports.selfClosing=require("./self-closing"),exports.doctypes=require("./doctypes"),exports.filters=require("./filters"),exports.utils=require("./utils"),exports.Compiler=Compiler,exports.Parser=Parser,exports.Lexer=Lexer,exports.nodes=require("./nodes"),exports.runtime=runtime,exports.cache={};function parse(str,options){try{var parser=new Parser(str,options.filename,options),compiler=new(options.compiler||Compiler)(parser.parse(),options),js=compiler.compile();return options.debug&&console.error("\nCompiled Function:\n\n%s",js.replace(/^/gm," ")),"var buf = [];\n"+(options.self?"var self = locals || {};\n"+js:"with (locals || {}) {\n"+js+"\n}\n")+'return buf.join("");'}catch(err){parser=parser.context(),runtime.rethrow(err,parser.filename,parser.lexer.lineno)}}exports.compile=function(str,options){var options=options||{},client=options.client,filename=options.filename?JSON.stringify(options.filename):"undefined",fn;return options.compileDebug!==!1?fn=["var __jade = [{ lineno: 1, filename: "+filename+" }];","try {",parse(String(str),options),"} catch (err) {"," rethrow(err, __jade[0].filename, __jade[0].lineno);","}"].join("\n"):fn=parse(String(str),options),client&&(fn="attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\n"+fn),fn=new Function("locals, attrs, escape, rethrow, merge",fn),client?fn:function(locals){return fn(locals,runtime.attrs,runtime.escape,runtime.rethrow,runtime.merge)}},exports.render=function(str,options,fn){"function"==typeof options&&(fn=options,options={});if(options.cache&&!options.filename)return fn(new Error('the "filename" option is required for caching'));try{var path=options.filename,tmpl=options.cache?exports.cache[path]||(exports.cache[path]=exports.compile(str,options)):exports.compile(str,options);fn(null,tmpl(options))}catch(err){fn(err)}},exports.renderFile=function(path,options,fn){var key=path+":string";"function"==typeof options&&(fn=options,options={});try{options.filename=path;var str=options.cache?exports.cache[key]||(exports.cache[key]=fs.readFileSync(path,"utf8")):fs.readFileSync(path,"utf8");exports.render(str,options,fn)}catch(err){fn(err)}},exports.__express=exports.renderFile}),require.register("lexer.js",function(module,exports,require){var Lexer=module.exports=function Lexer(str,options){options=options||{},this.input=str.replace(/\r\n|\r/g,"\n"),this.colons=options.colons,this.deferredTokens=[],this.lastIndents=0,this.lineno=1,this.stash=[],this.indentStack=[],this.indentRe=null,this.pipeless=!1};Lexer.prototype={tok:function(type,val){return{type:type,line:this.lineno,val:val}},consume:function(len){this.input=this.input.substr(len)},scan:function(regexp,type){var captures;if(captures=regexp.exec(this.input))return this.consume(captures[0].length),this.tok(type,captures[1])},defer:function(tok){this.deferredTokens.push(tok)},lookahead:function(n){var fetch=n-this.stash.length;while(fetch-->0)this.stash.push(this.next());return this.stash[--n]},indexOfDelimiters:function(start,end){var str=this.input,nstart=0,nend=0,pos=0;for(var i=0,len=str.length;iindents)this.stash.push(this.tok("outdent")),this.indentStack.shift();tok=this.stash.pop()}else indents&&indents!=this.indentStack[0]?(this.indentStack.unshift(indents),tok=this.tok("indent",indents)):tok=this.tok("newline");return tok}},pipelessText:function(){if(this.pipeless){if("\n"==this.input[0])return;var i=this.input.indexOf("\n");-1==i&&(i=this.input.length);var str=this.input.substr(0,i);return this.consume(str.length),this.tok("text",str)}},colon:function(){return this.scan(/^: */,":")},advance:function(){return this.stashed()||this.next()},next:function(){return this.deferred()||this.blank()||this.eos()||this.pipelessText()||this.yield()||this.doctype()||this.interpolation()||this["case"]()||this.when()||this["default"]()||this["extends"]()||this.append()||this.prepend()||this.block()||this.include()||this.mixin()||this.call()||this.conditional()||this.each()||this["while"]()||this.assignment()||this.tag()||this.filter()||this.code()||this.id()||this.className()||this.attrs()||this.indent()||this.comment()||this.colon()||this.text()}}}),require.register("nodes/attrs.js",function(module,exports,require){var Node=require("./node"),Block=require("./block"),Attrs=module.exports=function Attrs(){this.attrs=[]};Attrs.prototype=new Node,Attrs.prototype.constructor=Attrs,Attrs.prototype.setAttribute=function(name,val,escaped){return this.attrs.push({name:name,val:val,escaped:escaped}),this},Attrs.prototype.removeAttribute=function(name){for(var i=0,len=this.attrs.length;i/g,">").replace(/"/g,""")},exports.rethrow=function rethrow(err,filename,lineno){if(!filename)throw err;var context=3,str=require("fs").readFileSync(filename,"utf8"),lines=str.split("\n"),start=Math.max(lineno-context,0),end=Math.min(lines.length,lineno+context),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" > ":" ")+curr+"| "+line}).join("\n");throw err.path=filename,err.message=(filename||"Jade")+":"+lineno+"\n"+context+"\n\n"+err.message,err}}),require.register("self-closing.js",function(module,exports,require){module.exports=["meta","img","link","input","source","area","base","col","br","hr"]}),require.register("utils.js",function(module,exports,require){var interpolate=exports.interpolate=function(str){return str.replace(/(\\)?([#!]){(.*?)}/g,function(str,escape,flag,code){return escape?str:"' + "+("!"==flag?"":"escape")+"((interp = "+code.replace(/\\'/g,"'")+") == null ? '' : interp) + '"})},escape=exports.escape=function(str){return str.replace(/'/g,"\\'")};exports.text=function(str){return interpolate(escape(str))}}),window.jade=require("jade")})(); \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/compiler.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/compiler.js deleted file mode 100644 index 516ac83d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/compiler.js +++ /dev/null @@ -1,642 +0,0 @@ - -/*! - * Jade - Compiler - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var nodes = require('./nodes') - , filters = require('./filters') - , doctypes = require('./doctypes') - , selfClosing = require('./self-closing') - , runtime = require('./runtime') - , utils = require('./utils'); - -// if browser -// -// if (!Object.keys) { -// Object.keys = function(obj){ -// var arr = []; -// for (var key in obj) { -// if (obj.hasOwnProperty(key)) { -// arr.push(key); -// } -// } -// return arr; -// } -// } -// -// if (!String.prototype.trimLeft) { -// String.prototype.trimLeft = function(){ -// return this.replace(/^\s+/, ''); -// } -// } -// -// end - - -/** - * Initialize `Compiler` with the given `node`. - * - * @param {Node} node - * @param {Object} options - * @api public - */ - -var Compiler = module.exports = function Compiler(node, options) { - this.options = options = options || {}; - this.node = node; - this.hasCompiledDoctype = false; - this.hasCompiledTag = false; - this.pp = options.pretty || false; - this.debug = false !== options.compileDebug; - this.indents = 0; - this.parentIndents = 0; - if (options.doctype) this.setDoctype(options.doctype); -}; - -/** - * Compiler prototype. - */ - -Compiler.prototype = { - - /** - * Compile parse tree to JavaScript. - * - * @api public - */ - - compile: function(){ - this.buf = ['var interp;']; - if (this.pp) this.buf.push("var __indent = [];"); - this.lastBufferedIdx = -1; - this.visit(this.node); - return this.buf.join('\n'); - }, - - /** - * Sets the default doctype `name`. Sets terse mode to `true` when - * html 5 is used, causing self-closing tags to end with ">" vs "/>", - * and boolean attributes are not mirrored. - * - * @param {string} name - * @api public - */ - - setDoctype: function(name){ - var doctype = doctypes[(name || 'default').toLowerCase()]; - doctype = doctype || ''; - this.doctype = doctype; - this.terse = '5' == name || 'html' == name; - this.xml = 0 == this.doctype.indexOf(' 1 && !escape && block.nodes[0].isText && block.nodes[1].isText) - this.prettyIndent(1, true); - - for (var i = 0; i < len; ++i) { - // Pretty print text - if (pp && i > 0 && !escape && block.nodes[i].isText && block.nodes[i-1].isText) - this.prettyIndent(1, false); - - this.visit(block.nodes[i]); - // Multiple text nodes are separated by newlines - if (block.nodes[i+1] && block.nodes[i].isText && block.nodes[i+1].isText) - this.buffer('\\n'); - } - }, - - /** - * Visit `doctype`. Sets terse mode to `true` when html 5 - * is used, causing self-closing tags to end with ">" vs "/>", - * and boolean attributes are not mirrored. - * - * @param {Doctype} doctype - * @api public - */ - - visitDoctype: function(doctype){ - if (doctype && (doctype.val || !this.doctype)) { - this.setDoctype(doctype.val || 'default'); - } - - if (this.doctype) this.buffer(this.doctype); - this.hasCompiledDoctype = true; - }, - - /** - * Visit `mixin`, generating a function that - * may be called within the template. - * - * @param {Mixin} mixin - * @api public - */ - - visitMixin: function(mixin){ - var name = mixin.name.replace(/-/g, '_') + '_mixin' - , args = mixin.args || '' - , block = mixin.block - , attrs = mixin.attrs - , pp = this.pp; - - if (mixin.call) { - if (pp) this.buf.push("__indent.push('" + Array(this.indents + 1).join(' ') + "');") - if (block || attrs.length) { - - this.buf.push(name + '.call({'); - - if (block) { - this.buf.push('block: function(){'); - - // Render block with no indents, dynamically added when rendered - this.parentIndents++; - var _indents = this.indents; - this.indents = 0; - this.visit(mixin.block); - this.indents = _indents; - this.parentIndents--; - - if (attrs.length) { - this.buf.push('},'); - } else { - this.buf.push('}'); - } - } - - if (attrs.length) { - var val = this.attrs(attrs); - if (val.inherits) { - this.buf.push('attributes: merge({' + val.buf - + '}, attributes), escaped: merge(' + val.escaped + ', escaped, true)'); - } else { - this.buf.push('attributes: {' + val.buf + '}, escaped: ' + val.escaped); - } - } - - if (args) { - this.buf.push('}, ' + args + ');'); - } else { - this.buf.push('});'); - } - - } else { - this.buf.push(name + '(' + args + ');'); - } - if (pp) this.buf.push("__indent.pop();") - } else { - this.buf.push('var ' + name + ' = function(' + args + '){'); - this.buf.push('var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {};'); - this.parentIndents++; - this.visit(block); - this.parentIndents--; - this.buf.push('};'); - } - }, - - /** - * Visit `tag` buffering tag markup, generating - * attributes, visiting the `tag`'s code and block. - * - * @param {Tag} tag - * @api public - */ - - visitTag: function(tag){ - this.indents++; - var name = tag.name - , pp = this.pp; - - if (tag.buffer) name = "' + (" + name + ") + '"; - - if (!this.hasCompiledTag) { - if (!this.hasCompiledDoctype && 'html' == name) { - this.visitDoctype(); - } - this.hasCompiledTag = true; - } - - // pretty print - if (pp && !tag.isInline()) - this.prettyIndent(0, true); - - if ((~selfClosing.indexOf(name) || tag.selfClosing) && !this.xml) { - this.buffer('<' + name); - this.visitAttributes(tag.attrs); - this.terse - ? this.buffer('>') - : this.buffer('/>'); - } else { - // Optimize attributes buffering - if (tag.attrs.length) { - this.buffer('<' + name); - if (tag.attrs.length) this.visitAttributes(tag.attrs); - this.buffer('>'); - } else { - this.buffer('<' + name + '>'); - } - if (tag.code) this.visitCode(tag.code); - this.escape = 'pre' == tag.name; - this.visit(tag.block); - - // pretty print - if (pp && !tag.isInline() && 'pre' != tag.name && !tag.canInline()) - this.prettyIndent(0, true); - - this.buffer(''); - } - this.indents--; - }, - - /** - * Visit `filter`, throwing when the filter does not exist. - * - * @param {Filter} filter - * @api public - */ - - visitFilter: function(filter){ - var fn = filters[filter.name]; - - // unknown filter - if (!fn) { - if (filter.isASTFilter) { - throw new Error('unknown ast filter "' + filter.name + ':"'); - } else { - throw new Error('unknown filter ":' + filter.name + '"'); - } - } - - if (filter.isASTFilter) { - this.buf.push(fn(filter.block, this, filter.attrs)); - } else { - var text = filter.block.nodes.map(function(node){ return node.val }).join('\n'); - filter.attrs = filter.attrs || {}; - filter.attrs.filename = this.options.filename; - this.buffer(utils.text(fn(text, filter.attrs))); - } - }, - - /** - * Visit `text` node. - * - * @param {Text} text - * @api public - */ - - visitText: function(text){ - text = utils.text(text.val.replace(/\\/g, '\\\\')); - if (this.escape) text = escape(text); - this.buffer(text); - }, - - /** - * Visit a `comment`, only buffering when the buffer flag is set. - * - * @param {Comment} comment - * @api public - */ - - visitComment: function(comment){ - if (!comment.buffer) return; - if (this.pp) this.prettyIndent(1, true); - this.buffer(''); - }, - - /** - * Visit a `BlockComment`. - * - * @param {Comment} comment - * @api public - */ - - visitBlockComment: function(comment){ - if (!comment.buffer) return; - if (0 == comment.val.trim().indexOf('if')) { - this.buffer(''); - } else { - this.buffer(''); - } - }, - - /** - * Visit `code`, respecting buffer / escape flags. - * If the code is followed by a block, wrap it in - * a self-calling function. - * - * @param {Code} code - * @api public - */ - - visitCode: function(code){ - // Wrap code blocks with {}. - // we only wrap unbuffered code blocks ATM - // since they are usually flow control - - // Buffer code - if (code.buffer) { - var val = code.val.trimLeft(); - this.buf.push('var __val__ = ' + val); - val = 'null == __val__ ? "" : __val__'; - if (code.escape) val = 'escape(' + val + ')'; - this.buf.push("buf.push(" + val + ");"); - } else { - this.buf.push(code.val); - } - - // Block support - if (code.block) { - if (!code.buffer) this.buf.push('{'); - this.visit(code.block); - if (!code.buffer) this.buf.push('}'); - } - }, - - /** - * Visit `each` block. - * - * @param {Each} each - * @api public - */ - - visitEach: function(each){ - this.buf.push('' - + '// iterate ' + each.obj + '\n' - + ';(function(){\n' - + ' if (\'number\' == typeof ' + each.obj + '.length) {\n' - + ' for (var ' + each.key + ' = 0, $$l = ' + each.obj + '.length; ' + each.key + ' < $$l; ' + each.key + '++) {\n' - + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n'); - - this.visit(each.block); - - this.buf.push('' - + ' }\n' - + ' } else {\n' - + ' for (var ' + each.key + ' in ' + each.obj + ') {\n' - // if browser - // + ' if (' + each.obj + '.hasOwnProperty(' + each.key + ')){' - // end - + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n'); - - this.visit(each.block); - - // if browser - // this.buf.push(' }\n'); - // end - - this.buf.push(' }\n }\n}).call(this);\n'); - }, - - /** - * Visit `attrs`. - * - * @param {Array} attrs - * @api public - */ - - visitAttributes: function(attrs){ - var val = this.attrs(attrs); - if (val.inherits) { - this.buf.push("buf.push(attrs(merge({ " + val.buf + - " }, attributes), merge(" + val.escaped + ", escaped, true)));"); - } else if (val.constant) { - eval('var buf={' + val.buf + '};'); - this.buffer(runtime.attrs(buf, JSON.parse(val.escaped)), true); - } else { - this.buf.push("buf.push(attrs({ " + val.buf + " }, " + val.escaped + "));"); - } - }, - - /** - * Compile attributes. - */ - - attrs: function(attrs){ - var buf = [] - , classes = [] - , escaped = {} - , constant = attrs.every(function(attr){ return isConstant(attr.val) }) - , inherits = false; - - if (this.terse) buf.push('terse: true'); - - attrs.forEach(function(attr){ - if (attr.name == 'attributes') return inherits = true; - escaped[attr.name] = attr.escaped; - if (attr.name == 'class') { - classes.push('(' + attr.val + ')'); - } else { - var pair = "'" + attr.name + "':(" + attr.val + ')'; - buf.push(pair); - } - }); - - if (classes.length) { - classes = classes.join(" + ' ' + "); - buf.push("class: " + classes); - } - - return { - buf: buf.join(', ').replace('class:', '"class":'), - escaped: JSON.stringify(escaped), - inherits: inherits, - constant: constant - }; - } -}; - -/** - * Check if expression can be evaluated to a constant - * - * @param {String} expression - * @return {Boolean} - * @api private - */ - -function isConstant(val){ - // Check strings/literals - if (/^ *("([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'|true|false|null|undefined) *$/i.test(val)) - return true; - - // Check numbers - if (!isNaN(Number(val))) - return true; - - // Check arrays - var matches; - if (matches = /^ *\[(.*)\] *$/.exec(val)) - return matches[1].split(',').every(isConstant); - - return false; -} - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -function escape(html){ - return String(html) - .replace(/&(?!\w+;)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/doctypes.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/doctypes.js deleted file mode 100644 index e87ca1e4..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/doctypes.js +++ /dev/null @@ -1,18 +0,0 @@ - -/*! - * Jade - doctypes - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = { - '5': '' - , 'default': '' - , 'xml': '' - , 'transitional': '' - , 'strict': '' - , 'frameset': '' - , '1.1': '' - , 'basic': '' - , 'mobile': '' -}; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/filters.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/filters.js deleted file mode 100644 index fdb634cb..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/filters.js +++ /dev/null @@ -1,97 +0,0 @@ - -/*! - * Jade - filters - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = { - - /** - * Wrap text with CDATA block. - */ - - cdata: function(str){ - return ''; - }, - - /** - * Transform sass to css, wrapped in style tags. - */ - - sass: function(str){ - str = str.replace(/\\n/g, '\n'); - var sass = require('sass').render(str).replace(/\n/g, '\\n'); - return ''; - }, - - /** - * Transform stylus to css, wrapped in style tags. - */ - - stylus: function(str, options){ - var ret; - str = str.replace(/\\n/g, '\n'); - var stylus = require('stylus'); - stylus(str, options).render(function(err, css){ - if (err) throw err; - ret = css.replace(/\n/g, '\\n'); - }); - return ''; - }, - - /** - * Transform less to css, wrapped in style tags. - */ - - less: function(str){ - var ret; - str = str.replace(/\\n/g, '\n'); - require('less').render(str, function(err, css){ - if (err) throw err; - ret = ''; - }); - return ret; - }, - - /** - * Transform markdown to html. - */ - - markdown: function(str){ - var md; - - // support markdown / discount - try { - md = require('markdown'); - } catch (err){ - try { - md = require('discount'); - } catch (err) { - try { - md = require('markdown-js'); - } catch (err) { - try { - md = require('marked'); - } catch (err) { - throw new - Error('Cannot find markdown library, install markdown, discount, or marked.'); - } - } - } - } - - str = str.replace(/\\n/g, '\n'); - return md.parse(str).replace(/\n/g, '\\n').replace(/'/g,'''); - }, - - /** - * Transform coffeescript to javascript. - */ - - coffeescript: function(str){ - str = str.replace(/\\n/g, '\n'); - var js = require('coffee-script').compile(str).replace(/\\/g, '\\\\').replace(/\n/g, '\\n'); - return ''; - } -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/inline-tags.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/inline-tags.js deleted file mode 100644 index 491de0b5..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/inline-tags.js +++ /dev/null @@ -1,28 +0,0 @@ - -/*! - * Jade - inline tags - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = [ - 'a' - , 'abbr' - , 'acronym' - , 'b' - , 'br' - , 'code' - , 'em' - , 'font' - , 'i' - , 'img' - , 'ins' - , 'kbd' - , 'map' - , 'samp' - , 'small' - , 'span' - , 'strong' - , 'sub' - , 'sup' -]; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/jade.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/jade.js deleted file mode 100644 index 00f0abb1..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/jade.js +++ /dev/null @@ -1,237 +0,0 @@ -/*! - * Jade - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Parser = require('./parser') - , Lexer = require('./lexer') - , Compiler = require('./compiler') - , runtime = require('./runtime') -// if node - , fs = require('fs'); -// end - -/** - * Library version. - */ - -exports.version = '0.26.3'; - -/** - * Expose self closing tags. - */ - -exports.selfClosing = require('./self-closing'); - -/** - * Default supported doctypes. - */ - -exports.doctypes = require('./doctypes'); - -/** - * Text filters. - */ - -exports.filters = require('./filters'); - -/** - * Utilities. - */ - -exports.utils = require('./utils'); - -/** - * Expose `Compiler`. - */ - -exports.Compiler = Compiler; - -/** - * Expose `Parser`. - */ - -exports.Parser = Parser; - -/** - * Expose `Lexer`. - */ - -exports.Lexer = Lexer; - -/** - * Nodes. - */ - -exports.nodes = require('./nodes'); - -/** - * Jade runtime helpers. - */ - -exports.runtime = runtime; - -/** - * Template function cache. - */ - -exports.cache = {}; - -/** - * Parse the given `str` of jade and return a function body. - * - * @param {String} str - * @param {Object} options - * @return {String} - * @api private - */ - -function parse(str, options){ - try { - // Parse - var parser = new Parser(str, options.filename, options); - - // Compile - var compiler = new (options.compiler || Compiler)(parser.parse(), options) - , js = compiler.compile(); - - // Debug compiler - if (options.debug) { - console.error('\nCompiled Function:\n\n\033[90m%s\033[0m', js.replace(/^/gm, ' ')); - } - - return '' - + 'var buf = [];\n' - + (options.self - ? 'var self = locals || {};\n' + js - : 'with (locals || {}) {\n' + js + '\n}\n') - + 'return buf.join("");'; - } catch (err) { - parser = parser.context(); - runtime.rethrow(err, parser.filename, parser.lexer.lineno); - } -} - -/** - * Compile a `Function` representation of the given jade `str`. - * - * Options: - * - * - `compileDebug` when `false` debugging code is stripped from the compiled template - * - `client` when `true` the helper functions `escape()` etc will reference `jade.escape()` - * for use with the Jade client-side runtime.js - * - * @param {String} str - * @param {Options} options - * @return {Function} - * @api public - */ - -exports.compile = function(str, options){ - var options = options || {} - , client = options.client - , filename = options.filename - ? JSON.stringify(options.filename) - : 'undefined' - , fn; - - if (options.compileDebug !== false) { - fn = [ - 'var __jade = [{ lineno: 1, filename: ' + filename + ' }];' - , 'try {' - , parse(String(str), options) - , '} catch (err) {' - , ' rethrow(err, __jade[0].filename, __jade[0].lineno);' - , '}' - ].join('\n'); - } else { - fn = parse(String(str), options); - } - - if (client) { - fn = 'attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\n' + fn; - } - - fn = new Function('locals, attrs, escape, rethrow, merge', fn); - - if (client) return fn; - - return function(locals){ - return fn(locals, runtime.attrs, runtime.escape, runtime.rethrow, runtime.merge); - }; -}; - -/** - * Render the given `str` of jade and invoke - * the callback `fn(err, str)`. - * - * Options: - * - * - `cache` enable template caching - * - `filename` filename required for `include` / `extends` and caching - * - * @param {String} str - * @param {Object|Function} options or fn - * @param {Function} fn - * @api public - */ - -exports.render = function(str, options, fn){ - // swap args - if ('function' == typeof options) { - fn = options, options = {}; - } - - // cache requires .filename - if (options.cache && !options.filename) { - return fn(new Error('the "filename" option is required for caching')); - } - - try { - var path = options.filename; - var tmpl = options.cache - ? exports.cache[path] || (exports.cache[path] = exports.compile(str, options)) - : exports.compile(str, options); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Render a Jade file at the given `path` and callback `fn(err, str)`. - * - * @param {String} path - * @param {Object|Function} options or callback - * @param {Function} fn - * @api public - */ - -exports.renderFile = function(path, options, fn){ - var key = path + ':string'; - - if ('function' == typeof options) { - fn = options, options = {}; - } - - try { - options.filename = path; - var str = options.cache - ? exports.cache[key] || (exports.cache[key] = fs.readFileSync(path, 'utf8')) - : fs.readFileSync(path, 'utf8'); - exports.render(str, options, fn); - } catch (err) { - fn(err); - } -}; - -/** - * Express support. - */ - -exports.__express = exports.renderFile; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/lexer.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/lexer.js deleted file mode 100644 index bca314a9..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/lexer.js +++ /dev/null @@ -1,771 +0,0 @@ - -/*! - * Jade - Lexer - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Initialize `Lexer` with the given `str`. - * - * Options: - * - * - `colons` allow colons for attr delimiters - * - * @param {String} str - * @param {Object} options - * @api private - */ - -var Lexer = module.exports = function Lexer(str, options) { - options = options || {}; - this.input = str.replace(/\r\n|\r/g, '\n'); - this.colons = options.colons; - this.deferredTokens = []; - this.lastIndents = 0; - this.lineno = 1; - this.stash = []; - this.indentStack = []; - this.indentRe = null; - this.pipeless = false; -}; - -/** - * Lexer prototype. - */ - -Lexer.prototype = { - - /** - * Construct a token with the given `type` and `val`. - * - * @param {String} type - * @param {String} val - * @return {Object} - * @api private - */ - - tok: function(type, val){ - return { - type: type - , line: this.lineno - , val: val - } - }, - - /** - * Consume the given `len` of input. - * - * @param {Number} len - * @api private - */ - - consume: function(len){ - this.input = this.input.substr(len); - }, - - /** - * Scan for `type` with the given `regexp`. - * - * @param {String} type - * @param {RegExp} regexp - * @return {Object} - * @api private - */ - - scan: function(regexp, type){ - var captures; - if (captures = regexp.exec(this.input)) { - this.consume(captures[0].length); - return this.tok(type, captures[1]); - } - }, - - /** - * Defer the given `tok`. - * - * @param {Object} tok - * @api private - */ - - defer: function(tok){ - this.deferredTokens.push(tok); - }, - - /** - * Lookahead `n` tokens. - * - * @param {Number} n - * @return {Object} - * @api private - */ - - lookahead: function(n){ - var fetch = n - this.stash.length; - while (fetch-- > 0) this.stash.push(this.next()); - return this.stash[--n]; - }, - - /** - * Return the indexOf `start` / `end` delimiters. - * - * @param {String} start - * @param {String} end - * @return {Number} - * @api private - */ - - indexOfDelimiters: function(start, end){ - var str = this.input - , nstart = 0 - , nend = 0 - , pos = 0; - for (var i = 0, len = str.length; i < len; ++i) { - if (start == str.charAt(i)) { - ++nstart; - } else if (end == str.charAt(i)) { - if (++nend == nstart) { - pos = i; - break; - } - } - } - return pos; - }, - - /** - * Stashed token. - */ - - stashed: function() { - return this.stash.length - && this.stash.shift(); - }, - - /** - * Deferred token. - */ - - deferred: function() { - return this.deferredTokens.length - && this.deferredTokens.shift(); - }, - - /** - * end-of-source. - */ - - eos: function() { - if (this.input.length) return; - if (this.indentStack.length) { - this.indentStack.shift(); - return this.tok('outdent'); - } else { - return this.tok('eos'); - } - }, - - /** - * Blank line. - */ - - blank: function() { - var captures; - if (captures = /^\n *\n/.exec(this.input)) { - this.consume(captures[0].length - 1); - if (this.pipeless) return this.tok('text', ''); - return this.next(); - } - }, - - /** - * Comment. - */ - - comment: function() { - var captures; - if (captures = /^ *\/\/(-)?([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('comment', captures[2]); - tok.buffer = '-' != captures[1]; - return tok; - } - }, - - /** - * Interpolated tag. - */ - - interpolation: function() { - var captures; - if (captures = /^#\{(.*?)\}/.exec(this.input)) { - this.consume(captures[0].length); - return this.tok('interpolation', captures[1]); - } - }, - - /** - * Tag. - */ - - tag: function() { - var captures; - if (captures = /^(\w[-:\w]*)(\/?)/.exec(this.input)) { - this.consume(captures[0].length); - var tok, name = captures[1]; - if (':' == name[name.length - 1]) { - name = name.slice(0, -1); - tok = this.tok('tag', name); - this.defer(this.tok(':')); - while (' ' == this.input[0]) this.input = this.input.substr(1); - } else { - tok = this.tok('tag', name); - } - tok.selfClosing = !! captures[2]; - return tok; - } - }, - - /** - * Filter. - */ - - filter: function() { - return this.scan(/^:(\w+)/, 'filter'); - }, - - /** - * Doctype. - */ - - doctype: function() { - return this.scan(/^(?:!!!|doctype) *([^\n]+)?/, 'doctype'); - }, - - /** - * Id. - */ - - id: function() { - return this.scan(/^#([\w-]+)/, 'id'); - }, - - /** - * Class. - */ - - className: function() { - return this.scan(/^\.([\w-]+)/, 'class'); - }, - - /** - * Text. - */ - - text: function() { - return this.scan(/^(?:\| ?| ?)?([^\n]+)/, 'text'); - }, - - /** - * Extends. - */ - - "extends": function() { - return this.scan(/^extends? +([^\n]+)/, 'extends'); - }, - - /** - * Block prepend. - */ - - prepend: function() { - var captures; - if (captures = /^prepend +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = 'prepend' - , name = captures[1] - , tok = this.tok('block', name); - tok.mode = mode; - return tok; - } - }, - - /** - * Block append. - */ - - append: function() { - var captures; - if (captures = /^append +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = 'append' - , name = captures[1] - , tok = this.tok('block', name); - tok.mode = mode; - return tok; - } - }, - - /** - * Block. - */ - - block: function() { - var captures; - if (captures = /^block\b *(?:(prepend|append) +)?([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = captures[1] || 'replace' - , name = captures[2] - , tok = this.tok('block', name); - - tok.mode = mode; - return tok; - } - }, - - /** - * Yield. - */ - - yield: function() { - return this.scan(/^yield */, 'yield'); - }, - - /** - * Include. - */ - - include: function() { - return this.scan(/^include +([^\n]+)/, 'include'); - }, - - /** - * Case. - */ - - "case": function() { - return this.scan(/^case +([^\n]+)/, 'case'); - }, - - /** - * When. - */ - - when: function() { - return this.scan(/^when +([^:\n]+)/, 'when'); - }, - - /** - * Default. - */ - - "default": function() { - return this.scan(/^default */, 'default'); - }, - - /** - * Assignment. - */ - - assignment: function() { - var captures; - if (captures = /^(\w+) += *([^;\n]+)( *;? *)/.exec(this.input)) { - this.consume(captures[0].length); - var name = captures[1] - , val = captures[2]; - return this.tok('code', 'var ' + name + ' = (' + val + ');'); - } - }, - - /** - * Call mixin. - */ - - call: function(){ - var captures; - if (captures = /^\+([-\w]+)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('call', captures[1]); - - // Check for args (not attributes) - if (captures = /^ *\((.*?)\)/.exec(this.input)) { - if (!/^ *[-\w]+ *=/.test(captures[1])) { - this.consume(captures[0].length); - tok.args = captures[1]; - } - } - - return tok; - } - }, - - /** - * Mixin. - */ - - mixin: function(){ - var captures; - if (captures = /^mixin +([-\w]+)(?: *\((.*)\))?/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('mixin', captures[1]); - tok.args = captures[2]; - return tok; - } - }, - - /** - * Conditional. - */ - - conditional: function() { - var captures; - if (captures = /^(if|unless|else if|else)\b([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var type = captures[1] - , js = captures[2]; - - switch (type) { - case 'if': js = 'if (' + js + ')'; break; - case 'unless': js = 'if (!(' + js + '))'; break; - case 'else if': js = 'else if (' + js + ')'; break; - case 'else': js = 'else'; break; - } - - return this.tok('code', js); - } - }, - - /** - * While. - */ - - "while": function() { - var captures; - if (captures = /^while +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - return this.tok('code', 'while (' + captures[1] + ')'); - } - }, - - /** - * Each. - */ - - each: function() { - var captures; - if (captures = /^(?:- *)?(?:each|for) +(\w+)(?: *, *(\w+))? * in *([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('each', captures[1]); - tok.key = captures[2] || '$index'; - tok.code = captures[3]; - return tok; - } - }, - - /** - * Code. - */ - - code: function() { - var captures; - if (captures = /^(!?=|-)([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var flags = captures[1]; - captures[1] = captures[2]; - var tok = this.tok('code', captures[1]); - tok.escape = flags[0] === '='; - tok.buffer = flags[0] === '=' || flags[1] === '='; - return tok; - } - }, - - /** - * Attributes. - */ - - attrs: function() { - if ('(' == this.input.charAt(0)) { - var index = this.indexOfDelimiters('(', ')') - , str = this.input.substr(1, index-1) - , tok = this.tok('attrs') - , len = str.length - , colons = this.colons - , states = ['key'] - , escapedAttr - , key = '' - , val = '' - , quote - , c - , p; - - function state(){ - return states[states.length - 1]; - } - - function interpolate(attr) { - return attr.replace(/#\{([^}]+)\}/g, function(_, expr){ - return quote + " + (" + expr + ") + " + quote; - }); - } - - this.consume(index + 1); - tok.attrs = {}; - tok.escaped = {}; - - function parse(c) { - var real = c; - // TODO: remove when people fix ":" - if (colons && ':' == c) c = '='; - switch (c) { - case ',': - case '\n': - switch (state()) { - case 'expr': - case 'array': - case 'string': - case 'object': - val += c; - break; - default: - states.push('key'); - val = val.trim(); - key = key.trim(); - if ('' == key) return; - key = key.replace(/^['"]|['"]$/g, '').replace('!', ''); - tok.escaped[key] = escapedAttr; - tok.attrs[key] = '' == val - ? true - : interpolate(val); - key = val = ''; - } - break; - case '=': - switch (state()) { - case 'key char': - key += real; - break; - case 'val': - case 'expr': - case 'array': - case 'string': - case 'object': - val += real; - break; - default: - escapedAttr = '!' != p; - states.push('val'); - } - break; - case '(': - if ('val' == state() - || 'expr' == state()) states.push('expr'); - val += c; - break; - case ')': - if ('expr' == state() - || 'val' == state()) states.pop(); - val += c; - break; - case '{': - if ('val' == state()) states.push('object'); - val += c; - break; - case '}': - if ('object' == state()) states.pop(); - val += c; - break; - case '[': - if ('val' == state()) states.push('array'); - val += c; - break; - case ']': - if ('array' == state()) states.pop(); - val += c; - break; - case '"': - case "'": - switch (state()) { - case 'key': - states.push('key char'); - break; - case 'key char': - states.pop(); - break; - case 'string': - if (c == quote) states.pop(); - val += c; - break; - default: - states.push('string'); - val += c; - quote = c; - } - break; - case '': - break; - default: - switch (state()) { - case 'key': - case 'key char': - key += c; - break; - default: - val += c; - } - } - p = c; - } - - for (var i = 0; i < len; ++i) { - parse(str.charAt(i)); - } - - parse(','); - - if ('/' == this.input.charAt(0)) { - this.consume(1); - tok.selfClosing = true; - } - - return tok; - } - }, - - /** - * Indent | Outdent | Newline. - */ - - indent: function() { - var captures, re; - - // established regexp - if (this.indentRe) { - captures = this.indentRe.exec(this.input); - // determine regexp - } else { - // tabs - re = /^\n(\t*) */; - captures = re.exec(this.input); - - // spaces - if (captures && !captures[1].length) { - re = /^\n( *)/; - captures = re.exec(this.input); - } - - // established - if (captures && captures[1].length) this.indentRe = re; - } - - if (captures) { - var tok - , indents = captures[1].length; - - ++this.lineno; - this.consume(indents + 1); - - if (' ' == this.input[0] || '\t' == this.input[0]) { - throw new Error('Invalid indentation, you can use tabs or spaces but not both'); - } - - // blank line - if ('\n' == this.input[0]) return this.tok('newline'); - - // outdent - if (this.indentStack.length && indents < this.indentStack[0]) { - while (this.indentStack.length && this.indentStack[0] > indents) { - this.stash.push(this.tok('outdent')); - this.indentStack.shift(); - } - tok = this.stash.pop(); - // indent - } else if (indents && indents != this.indentStack[0]) { - this.indentStack.unshift(indents); - tok = this.tok('indent', indents); - // newline - } else { - tok = this.tok('newline'); - } - - return tok; - } - }, - - /** - * Pipe-less text consumed only when - * pipeless is true; - */ - - pipelessText: function() { - if (this.pipeless) { - if ('\n' == this.input[0]) return; - var i = this.input.indexOf('\n'); - if (-1 == i) i = this.input.length; - var str = this.input.substr(0, i); - this.consume(str.length); - return this.tok('text', str); - } - }, - - /** - * ':' - */ - - colon: function() { - return this.scan(/^: */, ':'); - }, - - /** - * Return the next token object, or those - * previously stashed by lookahead. - * - * @return {Object} - * @api private - */ - - advance: function(){ - return this.stashed() - || this.next(); - }, - - /** - * Return the next token object. - * - * @return {Object} - * @api private - */ - - next: function() { - return this.deferred() - || this.blank() - || this.eos() - || this.pipelessText() - || this.yield() - || this.doctype() - || this.interpolation() - || this["case"]() - || this.when() - || this["default"]() - || this["extends"]() - || this.append() - || this.prepend() - || this.block() - || this.include() - || this.mixin() - || this.call() - || this.conditional() - || this.each() - || this["while"]() - || this.assignment() - || this.tag() - || this.filter() - || this.code() - || this.id() - || this.className() - || this.attrs() - || this.indent() - || this.comment() - || this.colon() - || this.text(); - } -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/attrs.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/attrs.js deleted file mode 100644 index 5de9b59c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/attrs.js +++ /dev/null @@ -1,77 +0,0 @@ - -/*! - * Jade - nodes - Attrs - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'), - Block = require('./block'); - -/** - * Initialize a `Attrs` node. - * - * @api public - */ - -var Attrs = module.exports = function Attrs() { - this.attrs = []; -}; - -/** - * Inherit from `Node`. - */ - -Attrs.prototype.__proto__ = Node.prototype; - -/** - * Set attribute `name` to `val`, keep in mind these become - * part of a raw js object literal, so to quote a value you must - * '"quote me"', otherwise or example 'user.name' is literal JavaScript. - * - * @param {String} name - * @param {String} val - * @param {Boolean} escaped - * @return {Tag} for chaining - * @api public - */ - -Attrs.prototype.setAttribute = function(name, val, escaped){ - this.attrs.push({ name: name, val: val, escaped: escaped }); - return this; -}; - -/** - * Remove attribute `name` when present. - * - * @param {String} name - * @api public - */ - -Attrs.prototype.removeAttribute = function(name){ - for (var i = 0, len = this.attrs.length; i < len; ++i) { - if (this.attrs[i] && this.attrs[i].name == name) { - delete this.attrs[i]; - } - } -}; - -/** - * Get attribute value by `name`. - * - * @param {String} name - * @return {String} - * @api public - */ - -Attrs.prototype.getAttribute = function(name){ - for (var i = 0, len = this.attrs.length; i < len; ++i) { - if (this.attrs[i] && this.attrs[i].name == name) { - return this.attrs[i].val; - } - } -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/block-comment.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/block-comment.js deleted file mode 100644 index 4f41e4a5..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/block-comment.js +++ /dev/null @@ -1,33 +0,0 @@ - -/*! - * Jade - nodes - BlockComment - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `BlockComment` with the given `block`. - * - * @param {String} val - * @param {Block} block - * @param {Boolean} buffer - * @api public - */ - -var BlockComment = module.exports = function BlockComment(val, block, buffer) { - this.block = block; - this.val = val; - this.buffer = buffer; -}; - -/** - * Inherit from `Node`. - */ - -BlockComment.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/block.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/block.js deleted file mode 100644 index bb00a1d9..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/block.js +++ /dev/null @@ -1,121 +0,0 @@ - -/*! - * Jade - nodes - Block - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a new `Block` with an optional `node`. - * - * @param {Node} node - * @api public - */ - -var Block = module.exports = function Block(node){ - this.nodes = []; - if (node) this.push(node); -}; - -/** - * Inherit from `Node`. - */ - -Block.prototype.__proto__ = Node.prototype; - -/** - * Block flag. - */ - -Block.prototype.isBlock = true; - -/** - * Replace the nodes in `other` with the nodes - * in `this` block. - * - * @param {Block} other - * @api private - */ - -Block.prototype.replace = function(other){ - other.nodes = this.nodes; -}; - -/** - * Pust the given `node`. - * - * @param {Node} node - * @return {Number} - * @api public - */ - -Block.prototype.push = function(node){ - return this.nodes.push(node); -}; - -/** - * Check if this block is empty. - * - * @return {Boolean} - * @api public - */ - -Block.prototype.isEmpty = function(){ - return 0 == this.nodes.length; -}; - -/** - * Unshift the given `node`. - * - * @param {Node} node - * @return {Number} - * @api public - */ - -Block.prototype.unshift = function(node){ - return this.nodes.unshift(node); -}; - -/** - * Return the "last" block, or the first `yield` node. - * - * @return {Block} - * @api private - */ - -Block.prototype.includeBlock = function(){ - var ret = this - , node; - - for (var i = 0, len = this.nodes.length; i < len; ++i) { - node = this.nodes[i]; - if (node.yield) return node; - else if (node.textOnly) continue; - else if (node.includeBlock) ret = node.includeBlock(); - else if (node.block && !node.block.isEmpty()) ret = node.block.includeBlock(); - } - - return ret; -}; - -/** - * Return a clone of this block. - * - * @return {Block} - * @api private - */ - -Block.prototype.clone = function(){ - var clone = new Block; - for (var i = 0, len = this.nodes.length; i < len; ++i) { - clone.push(this.nodes[i].clone()); - } - return clone; -}; - diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/case.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/case.js deleted file mode 100644 index 08ff0337..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/case.js +++ /dev/null @@ -1,43 +0,0 @@ - -/*! - * Jade - nodes - Case - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a new `Case` with `expr`. - * - * @param {String} expr - * @api public - */ - -var Case = exports = module.exports = function Case(expr, block){ - this.expr = expr; - this.block = block; -}; - -/** - * Inherit from `Node`. - */ - -Case.prototype.__proto__ = Node.prototype; - -var When = exports.When = function When(expr, block){ - this.expr = expr; - this.block = block; - this.debug = false; -}; - -/** - * Inherit from `Node`. - */ - -When.prototype.__proto__ = Node.prototype; - diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/code.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/code.js deleted file mode 100644 index babc6759..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/code.js +++ /dev/null @@ -1,35 +0,0 @@ - -/*! - * Jade - nodes - Code - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Code` node with the given code `val`. - * Code may also be optionally buffered and escaped. - * - * @param {String} val - * @param {Boolean} buffer - * @param {Boolean} escape - * @api public - */ - -var Code = module.exports = function Code(val, buffer, escape) { - this.val = val; - this.buffer = buffer; - this.escape = escape; - if (val.match(/^ *else/)) this.debug = false; -}; - -/** - * Inherit from `Node`. - */ - -Code.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/comment.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/comment.js deleted file mode 100644 index 2e1469e7..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/comment.js +++ /dev/null @@ -1,32 +0,0 @@ - -/*! - * Jade - nodes - Comment - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Comment` with the given `val`, optionally `buffer`, - * otherwise the comment may render in the output. - * - * @param {String} val - * @param {Boolean} buffer - * @api public - */ - -var Comment = module.exports = function Comment(val, buffer) { - this.val = val; - this.buffer = buffer; -}; - -/** - * Inherit from `Node`. - */ - -Comment.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/doctype.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/doctype.js deleted file mode 100644 index b8f33e56..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/doctype.js +++ /dev/null @@ -1,29 +0,0 @@ - -/*! - * Jade - nodes - Doctype - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Doctype` with the given `val`. - * - * @param {String} val - * @api public - */ - -var Doctype = module.exports = function Doctype(val) { - this.val = val; -}; - -/** - * Inherit from `Node`. - */ - -Doctype.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/each.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/each.js deleted file mode 100644 index f54101f1..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/each.js +++ /dev/null @@ -1,35 +0,0 @@ - -/*! - * Jade - nodes - Each - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize an `Each` node, representing iteration - * - * @param {String} obj - * @param {String} val - * @param {String} key - * @param {Block} block - * @api public - */ - -var Each = module.exports = function Each(obj, val, key, block) { - this.obj = obj; - this.val = val; - this.key = key; - this.block = block; -}; - -/** - * Inherit from `Node`. - */ - -Each.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/filter.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/filter.js deleted file mode 100644 index 851a0040..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/filter.js +++ /dev/null @@ -1,35 +0,0 @@ - -/*! - * Jade - nodes - Filter - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node') - , Block = require('./block'); - -/** - * Initialize a `Filter` node with the given - * filter `name` and `block`. - * - * @param {String} name - * @param {Block|Node} block - * @api public - */ - -var Filter = module.exports = function Filter(name, block, attrs) { - this.name = name; - this.block = block; - this.attrs = attrs; - this.isASTFilter = !block.nodes.every(function(node){ return node.isText }); -}; - -/** - * Inherit from `Node`. - */ - -Filter.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/index.js deleted file mode 100644 index 386ad2f9..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/index.js +++ /dev/null @@ -1,20 +0,0 @@ - -/*! - * Jade - nodes - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -exports.Node = require('./node'); -exports.Tag = require('./tag'); -exports.Code = require('./code'); -exports.Each = require('./each'); -exports.Case = require('./case'); -exports.Text = require('./text'); -exports.Block = require('./block'); -exports.Mixin = require('./mixin'); -exports.Filter = require('./filter'); -exports.Comment = require('./comment'); -exports.Literal = require('./literal'); -exports.BlockComment = require('./block-comment'); -exports.Doctype = require('./doctype'); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/literal.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/literal.js deleted file mode 100644 index fde586be..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/literal.js +++ /dev/null @@ -1,32 +0,0 @@ - -/*! - * Jade - nodes - Literal - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Literal` node with the given `str. - * - * @param {String} str - * @api public - */ - -var Literal = module.exports = function Literal(str) { - this.str = str - .replace(/\\/g, "\\\\") - .replace(/\n|\r\n/g, "\\n") - .replace(/'/g, "\\'"); -}; - -/** - * Inherit from `Node`. - */ - -Literal.prototype.__proto__ = Node.prototype; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/mixin.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/mixin.js deleted file mode 100644 index 8407bc79..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/mixin.js +++ /dev/null @@ -1,36 +0,0 @@ - -/*! - * Jade - nodes - Mixin - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Attrs = require('./attrs'); - -/** - * Initialize a new `Mixin` with `name` and `block`. - * - * @param {String} name - * @param {String} args - * @param {Block} block - * @api public - */ - -var Mixin = module.exports = function Mixin(name, args, block, call){ - this.name = name; - this.args = args; - this.block = block; - this.attrs = []; - this.call = call; -}; - -/** - * Inherit from `Attrs`. - */ - -Mixin.prototype.__proto__ = Attrs.prototype; - diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/node.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/node.js deleted file mode 100644 index e98f042c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/node.js +++ /dev/null @@ -1,25 +0,0 @@ - -/*! - * Jade - nodes - Node - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Initialize a `Node`. - * - * @api public - */ - -var Node = module.exports = function Node(){}; - -/** - * Clone this node (return itself) - * - * @return {Node} - * @api private - */ - -Node.prototype.clone = function(){ - return this; -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/tag.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/tag.js deleted file mode 100644 index 4b6728ad..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/tag.js +++ /dev/null @@ -1,95 +0,0 @@ - -/*! - * Jade - nodes - Tag - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Attrs = require('./attrs'), - Block = require('./block'), - inlineTags = require('../inline-tags'); - -/** - * Initialize a `Tag` node with the given tag `name` and optional `block`. - * - * @param {String} name - * @param {Block} block - * @api public - */ - -var Tag = module.exports = function Tag(name, block) { - this.name = name; - this.attrs = []; - this.block = block || new Block; -}; - -/** - * Inherit from `Attrs`. - */ - -Tag.prototype.__proto__ = Attrs.prototype; - -/** - * Clone this tag. - * - * @return {Tag} - * @api private - */ - -Tag.prototype.clone = function(){ - var clone = new Tag(this.name, this.block.clone()); - clone.line = this.line; - clone.attrs = this.attrs; - clone.textOnly = this.textOnly; - return clone; -}; - -/** - * Check if this tag is an inline tag. - * - * @return {Boolean} - * @api private - */ - -Tag.prototype.isInline = function(){ - return ~inlineTags.indexOf(this.name); -}; - -/** - * Check if this tag's contents can be inlined. Used for pretty printing. - * - * @return {Boolean} - * @api private - */ - -Tag.prototype.canInline = function(){ - var nodes = this.block.nodes; - - function isInline(node){ - // Recurse if the node is a block - if (node.isBlock) return node.nodes.every(isInline); - return node.isText || (node.isInline && node.isInline()); - } - - // Empty tag - if (!nodes.length) return true; - - // Text-only or inline-only tag - if (1 == nodes.length) return isInline(nodes[0]); - - // Multi-line inline-only tag - if (this.block.nodes.every(isInline)) { - for (var i = 1, len = nodes.length; i < len; ++i) { - if (nodes[i-1].isText && nodes[i].isText) - return false; - } - return true; - } - - // Mixed tag - return false; -}; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/text.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/text.js deleted file mode 100644 index 3b5dd557..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/nodes/text.js +++ /dev/null @@ -1,36 +0,0 @@ - -/*! - * Jade - nodes - Text - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Text` node with optional `line`. - * - * @param {String} line - * @api public - */ - -var Text = module.exports = function Text(line) { - this.val = ''; - if ('string' == typeof line) this.val = line; -}; - -/** - * Inherit from `Node`. - */ - -Text.prototype.__proto__ = Node.prototype; - -/** - * Flag as text. - */ - -Text.prototype.isText = true; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/parser.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/parser.js deleted file mode 100644 index 92f2af0c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/parser.js +++ /dev/null @@ -1,710 +0,0 @@ - -/*! - * Jade - Parser - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Lexer = require('./lexer') - , nodes = require('./nodes'); - -/** - * Initialize `Parser` with the given input `str` and `filename`. - * - * @param {String} str - * @param {String} filename - * @param {Object} options - * @api public - */ - -var Parser = exports = module.exports = function Parser(str, filename, options){ - this.input = str; - this.lexer = new Lexer(str, options); - this.filename = filename; - this.blocks = {}; - this.mixins = {}; - this.options = options; - this.contexts = [this]; -}; - -/** - * Tags that may not contain tags. - */ - -var textOnly = exports.textOnly = ['script', 'style']; - -/** - * Parser prototype. - */ - -Parser.prototype = { - - /** - * Push `parser` onto the context stack, - * or pop and return a `Parser`. - */ - - context: function(parser){ - if (parser) { - this.contexts.push(parser); - } else { - return this.contexts.pop(); - } - }, - - /** - * Return the next token object. - * - * @return {Object} - * @api private - */ - - advance: function(){ - return this.lexer.advance(); - }, - - /** - * Skip `n` tokens. - * - * @param {Number} n - * @api private - */ - - skip: function(n){ - while (n--) this.advance(); - }, - - /** - * Single token lookahead. - * - * @return {Object} - * @api private - */ - - peek: function() { - return this.lookahead(1); - }, - - /** - * Return lexer lineno. - * - * @return {Number} - * @api private - */ - - line: function() { - return this.lexer.lineno; - }, - - /** - * `n` token lookahead. - * - * @param {Number} n - * @return {Object} - * @api private - */ - - lookahead: function(n){ - return this.lexer.lookahead(n); - }, - - /** - * Parse input returning a string of js for evaluation. - * - * @return {String} - * @api public - */ - - parse: function(){ - var block = new nodes.Block, parser; - block.line = this.line(); - - while ('eos' != this.peek().type) { - if ('newline' == this.peek().type) { - this.advance(); - } else { - block.push(this.parseExpr()); - } - } - - if (parser = this.extending) { - this.context(parser); - var ast = parser.parse(); - this.context(); - // hoist mixins - for (var name in this.mixins) - ast.unshift(this.mixins[name]); - return ast; - } - - return block; - }, - - /** - * Expect the given type, or throw an exception. - * - * @param {String} type - * @api private - */ - - expect: function(type){ - if (this.peek().type === type) { - return this.advance(); - } else { - throw new Error('expected "' + type + '", but got "' + this.peek().type + '"'); - } - }, - - /** - * Accept the given `type`. - * - * @param {String} type - * @api private - */ - - accept: function(type){ - if (this.peek().type === type) { - return this.advance(); - } - }, - - /** - * tag - * | doctype - * | mixin - * | include - * | filter - * | comment - * | text - * | each - * | code - * | yield - * | id - * | class - * | interpolation - */ - - parseExpr: function(){ - switch (this.peek().type) { - case 'tag': - return this.parseTag(); - case 'mixin': - return this.parseMixin(); - case 'block': - return this.parseBlock(); - case 'case': - return this.parseCase(); - case 'when': - return this.parseWhen(); - case 'default': - return this.parseDefault(); - case 'extends': - return this.parseExtends(); - case 'include': - return this.parseInclude(); - case 'doctype': - return this.parseDoctype(); - case 'filter': - return this.parseFilter(); - case 'comment': - return this.parseComment(); - case 'text': - return this.parseText(); - case 'each': - return this.parseEach(); - case 'code': - return this.parseCode(); - case 'call': - return this.parseCall(); - case 'interpolation': - return this.parseInterpolation(); - case 'yield': - this.advance(); - var block = new nodes.Block; - block.yield = true; - return block; - case 'id': - case 'class': - var tok = this.advance(); - this.lexer.defer(this.lexer.tok('tag', 'div')); - this.lexer.defer(tok); - return this.parseExpr(); - default: - throw new Error('unexpected token "' + this.peek().type + '"'); - } - }, - - /** - * Text - */ - - parseText: function(){ - var tok = this.expect('text') - , node = new nodes.Text(tok.val); - node.line = this.line(); - return node; - }, - - /** - * ':' expr - * | block - */ - - parseBlockExpansion: function(){ - if (':' == this.peek().type) { - this.advance(); - return new nodes.Block(this.parseExpr()); - } else { - return this.block(); - } - }, - - /** - * case - */ - - parseCase: function(){ - var val = this.expect('case').val - , node = new nodes.Case(val); - node.line = this.line(); - node.block = this.block(); - return node; - }, - - /** - * when - */ - - parseWhen: function(){ - var val = this.expect('when').val - return new nodes.Case.When(val, this.parseBlockExpansion()); - }, - - /** - * default - */ - - parseDefault: function(){ - this.expect('default'); - return new nodes.Case.When('default', this.parseBlockExpansion()); - }, - - /** - * code - */ - - parseCode: function(){ - var tok = this.expect('code') - , node = new nodes.Code(tok.val, tok.buffer, tok.escape) - , block - , i = 1; - node.line = this.line(); - while (this.lookahead(i) && 'newline' == this.lookahead(i).type) ++i; - block = 'indent' == this.lookahead(i).type; - if (block) { - this.skip(i-1); - node.block = this.block(); - } - return node; - }, - - /** - * comment - */ - - parseComment: function(){ - var tok = this.expect('comment') - , node; - - if ('indent' == this.peek().type) { - node = new nodes.BlockComment(tok.val, this.block(), tok.buffer); - } else { - node = new nodes.Comment(tok.val, tok.buffer); - } - - node.line = this.line(); - return node; - }, - - /** - * doctype - */ - - parseDoctype: function(){ - var tok = this.expect('doctype') - , node = new nodes.Doctype(tok.val); - node.line = this.line(); - return node; - }, - - /** - * filter attrs? text-block - */ - - parseFilter: function(){ - var block - , tok = this.expect('filter') - , attrs = this.accept('attrs'); - - this.lexer.pipeless = true; - block = this.parseTextBlock(); - this.lexer.pipeless = false; - - var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs); - node.line = this.line(); - return node; - }, - - /** - * tag ':' attrs? block - */ - - parseASTFilter: function(){ - var block - , tok = this.expect('tag') - , attrs = this.accept('attrs'); - - this.expect(':'); - block = this.block(); - - var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs); - node.line = this.line(); - return node; - }, - - /** - * each block - */ - - parseEach: function(){ - var tok = this.expect('each') - , node = new nodes.Each(tok.code, tok.val, tok.key); - node.line = this.line(); - node.block = this.block(); - return node; - }, - - /** - * 'extends' name - */ - - parseExtends: function(){ - var path = require('path') - , fs = require('fs') - , dirname = path.dirname - , basename = path.basename - , join = path.join; - - if (!this.filename) - throw new Error('the "filename" option is required to extend templates'); - - var path = this.expect('extends').val.trim() - , dir = dirname(this.filename); - - var path = join(dir, path + '.jade') - , str = fs.readFileSync(path, 'utf8') - , parser = new Parser(str, path, this.options); - - parser.blocks = this.blocks; - parser.contexts = this.contexts; - this.extending = parser; - - // TODO: null node - return new nodes.Literal(''); - }, - - /** - * 'block' name block - */ - - parseBlock: function(){ - var block = this.expect('block') - , mode = block.mode - , name = block.val.trim(); - - block = 'indent' == this.peek().type - ? this.block() - : new nodes.Block(new nodes.Literal('')); - - var prev = this.blocks[name]; - - if (prev) { - switch (prev.mode) { - case 'append': - block.nodes = block.nodes.concat(prev.nodes); - prev = block; - break; - case 'prepend': - block.nodes = prev.nodes.concat(block.nodes); - prev = block; - break; - } - } - - block.mode = mode; - return this.blocks[name] = prev || block; - }, - - /** - * include block? - */ - - parseInclude: function(){ - var path = require('path') - , fs = require('fs') - , dirname = path.dirname - , basename = path.basename - , join = path.join; - - var path = this.expect('include').val.trim() - , dir = dirname(this.filename); - - if (!this.filename) - throw new Error('the "filename" option is required to use includes'); - - // no extension - if (!~basename(path).indexOf('.')) { - path += '.jade'; - } - - // non-jade - if ('.jade' != path.substr(-5)) { - var path = join(dir, path) - , str = fs.readFileSync(path, 'utf8'); - return new nodes.Literal(str); - } - - var path = join(dir, path) - , str = fs.readFileSync(path, 'utf8') - , parser = new Parser(str, path, this.options); - parser.blocks = this.blocks; - parser.mixins = this.mixins; - - this.context(parser); - var ast = parser.parse(); - this.context(); - ast.filename = path; - - if ('indent' == this.peek().type) { - ast.includeBlock().push(this.block()); - } - - return ast; - }, - - /** - * call ident block - */ - - parseCall: function(){ - var tok = this.expect('call') - , name = tok.val - , args = tok.args - , mixin = new nodes.Mixin(name, args, new nodes.Block, true); - - this.tag(mixin); - if (mixin.block.isEmpty()) mixin.block = null; - return mixin; - }, - - /** - * mixin block - */ - - parseMixin: function(){ - var tok = this.expect('mixin') - , name = tok.val - , args = tok.args - , mixin; - - // definition - if ('indent' == this.peek().type) { - mixin = new nodes.Mixin(name, args, this.block(), false); - this.mixins[name] = mixin; - return mixin; - // call - } else { - return new nodes.Mixin(name, args, null, true); - } - }, - - /** - * indent (text | newline)* outdent - */ - - parseTextBlock: function(){ - var block = new nodes.Block; - block.line = this.line(); - var spaces = this.expect('indent').val; - if (null == this._spaces) this._spaces = spaces; - var indent = Array(spaces - this._spaces + 1).join(' '); - while ('outdent' != this.peek().type) { - switch (this.peek().type) { - case 'newline': - this.advance(); - break; - case 'indent': - this.parseTextBlock().nodes.forEach(function(node){ - block.push(node); - }); - break; - default: - var text = new nodes.Text(indent + this.advance().val); - text.line = this.line(); - block.push(text); - } - } - - if (spaces == this._spaces) this._spaces = null; - this.expect('outdent'); - return block; - }, - - /** - * indent expr* outdent - */ - - block: function(){ - var block = new nodes.Block; - block.line = this.line(); - this.expect('indent'); - while ('outdent' != this.peek().type) { - if ('newline' == this.peek().type) { - this.advance(); - } else { - block.push(this.parseExpr()); - } - } - this.expect('outdent'); - return block; - }, - - /** - * interpolation (attrs | class | id)* (text | code | ':')? newline* block? - */ - - parseInterpolation: function(){ - var tok = this.advance(); - var tag = new nodes.Tag(tok.val); - tag.buffer = true; - return this.tag(tag); - }, - - /** - * tag (attrs | class | id)* (text | code | ':')? newline* block? - */ - - parseTag: function(){ - // ast-filter look-ahead - var i = 2; - if ('attrs' == this.lookahead(i).type) ++i; - if (':' == this.lookahead(i).type) { - if ('indent' == this.lookahead(++i).type) { - return this.parseASTFilter(); - } - } - - var tok = this.advance() - , tag = new nodes.Tag(tok.val); - - tag.selfClosing = tok.selfClosing; - - return this.tag(tag); - }, - - /** - * Parse tag. - */ - - tag: function(tag){ - var dot; - - tag.line = this.line(); - - // (attrs | class | id)* - out: - while (true) { - switch (this.peek().type) { - case 'id': - case 'class': - var tok = this.advance(); - tag.setAttribute(tok.type, "'" + tok.val + "'"); - continue; - case 'attrs': - var tok = this.advance() - , obj = tok.attrs - , escaped = tok.escaped - , names = Object.keys(obj); - - if (tok.selfClosing) tag.selfClosing = true; - - for (var i = 0, len = names.length; i < len; ++i) { - var name = names[i] - , val = obj[name]; - tag.setAttribute(name, val, escaped[name]); - } - continue; - default: - break out; - } - } - - // check immediate '.' - if ('.' == this.peek().val) { - dot = tag.textOnly = true; - this.advance(); - } - - // (text | code | ':')? - switch (this.peek().type) { - case 'text': - tag.block.push(this.parseText()); - break; - case 'code': - tag.code = this.parseCode(); - break; - case ':': - this.advance(); - tag.block = new nodes.Block; - tag.block.push(this.parseExpr()); - break; - } - - // newline* - while ('newline' == this.peek().type) this.advance(); - - tag.textOnly = tag.textOnly || ~textOnly.indexOf(tag.name); - - // script special-case - if ('script' == tag.name) { - var type = tag.getAttribute('type'); - if (!dot && type && 'text/javascript' != type.replace(/^['"]|['"]$/g, '')) { - tag.textOnly = false; - } - } - - // block? - if ('indent' == this.peek().type) { - if (tag.textOnly) { - this.lexer.pipeless = true; - tag.block = this.parseTextBlock(); - this.lexer.pipeless = false; - } else { - var block = this.block(); - if (tag.block) { - for (var i = 0, len = block.nodes.length; i < len; ++i) { - tag.block.push(block.nodes[i]); - } - } else { - tag.block = block; - } - } - } - - return tag; - } -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/runtime.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/runtime.js deleted file mode 100644 index fb711f5e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/runtime.js +++ /dev/null @@ -1,174 +0,0 @@ - -/*! - * Jade - runtime - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Lame Array.isArray() polyfill for now. - */ - -if (!Array.isArray) { - Array.isArray = function(arr){ - return '[object Array]' == Object.prototype.toString.call(arr); - }; -} - -/** - * Lame Object.keys() polyfill for now. - */ - -if (!Object.keys) { - Object.keys = function(obj){ - var arr = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - arr.push(key); - } - } - return arr; - } -} - -/** - * Merge two attribute objects giving precedence - * to values in object `b`. Classes are special-cased - * allowing for arrays and merging/joining appropriately - * resulting in a string. - * - * @param {Object} a - * @param {Object} b - * @return {Object} a - * @api private - */ - -exports.merge = function merge(a, b) { - var ac = a['class']; - var bc = b['class']; - - if (ac || bc) { - ac = ac || []; - bc = bc || []; - if (!Array.isArray(ac)) ac = [ac]; - if (!Array.isArray(bc)) bc = [bc]; - ac = ac.filter(nulls); - bc = bc.filter(nulls); - a['class'] = ac.concat(bc).join(' '); - } - - for (var key in b) { - if (key != 'class') { - a[key] = b[key]; - } - } - - return a; -}; - -/** - * Filter null `val`s. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function nulls(val) { - return val != null; -} - -/** - * Render the given attributes object. - * - * @param {Object} obj - * @param {Object} escaped - * @return {String} - * @api private - */ - -exports.attrs = function attrs(obj, escaped){ - var buf = [] - , terse = obj.terse; - - delete obj.terse; - var keys = Object.keys(obj) - , len = keys.length; - - if (len) { - buf.push(''); - for (var i = 0; i < len; ++i) { - var key = keys[i] - , val = obj[key]; - - if ('boolean' == typeof val || null == val) { - if (val) { - terse - ? buf.push(key) - : buf.push(key + '="' + key + '"'); - } - } else if (0 == key.indexOf('data') && 'string' != typeof val) { - buf.push(key + "='" + JSON.stringify(val) + "'"); - } else if ('class' == key && Array.isArray(val)) { - buf.push(key + '="' + exports.escape(val.join(' ')) + '"'); - } else if (escaped && escaped[key]) { - buf.push(key + '="' + exports.escape(val) + '"'); - } else { - buf.push(key + '="' + val + '"'); - } - } - } - - return buf.join(' '); -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function escape(html){ - return String(html) - .replace(/&(?!(\w+|\#\d+);)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; - -/** - * Re-throw the given `err` in context to the - * the jade in `filename` at the given `lineno`. - * - * @param {Error} err - * @param {String} filename - * @param {String} lineno - * @api private - */ - -exports.rethrow = function rethrow(err, filename, lineno){ - if (!filename) throw err; - - var context = 3 - , str = require('fs').readFileSync(filename, 'utf8') - , lines = str.split('\n') - , start = Math.max(lineno - context, 0) - , end = Math.min(lines.length, lineno + context); - - // Error context - var context = lines.slice(start, end).map(function(line, i){ - var curr = i + start + 1; - return (curr == lineno ? ' > ' : ' ') - + curr - + '| ' - + line; - }).join('\n'); - - // Alter exception message - err.path = filename; - err.message = (filename || 'Jade') + ':' + lineno - + '\n' + context + '\n\n' + err.message; - throw err; -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/self-closing.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/self-closing.js deleted file mode 100644 index 05487712..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/self-closing.js +++ /dev/null @@ -1,19 +0,0 @@ - -/*! - * Jade - self closing tags - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = [ - 'meta' - , 'img' - , 'link' - , 'input' - , 'source' - , 'area' - , 'base' - , 'col' - , 'br' - , 'hr' -]; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/utils.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/utils.js deleted file mode 100644 index ff46d022..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/lib/utils.js +++ /dev/null @@ -1,49 +0,0 @@ - -/*! - * Jade - utils - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Convert interpolation in the given string to JavaScript. - * - * @param {String} str - * @return {String} - * @api private - */ - -var interpolate = exports.interpolate = function(str){ - return str.replace(/(\\)?([#!]){(.*?)}/g, function(str, escape, flag, code){ - return escape - ? str - : "' + " - + ('!' == flag ? '' : 'escape') - + "((interp = " + code.replace(/\\'/g, "'") - + ") == null ? '' : interp) + '"; - }); -}; - -/** - * Escape single quotes in `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -var escape = exports.escape = function(str) { - return str.replace(/'/g, "\\'"); -}; - -/** - * Interpolate, and escape the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.text = function(str){ - return interpolate(escape(str)); -}; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.orig b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.orig deleted file mode 100644 index 9303c347..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.orig +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.rej b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.rej deleted file mode 100644 index 69244ff8..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.rej +++ /dev/null @@ -1,5 +0,0 @@ ---- /dev/null -+++ .gitignore -@@ -0,0 +1,2 @@ -+node_modules/ -+npm-debug.log \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.npmignore b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.npmignore deleted file mode 100644 index 9303c347..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/README.markdown b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/README.markdown deleted file mode 100644 index b4dd75fd..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/README.markdown +++ /dev/null @@ -1,54 +0,0 @@ -mkdirp -====== - -Like `mkdir -p`, but in node.js! - -example -======= - -pow.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 -======= - -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())`. - -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())`. - -install -======= - -With [npm](http://npmjs.org) do: - - npm install mkdirp - -license -======= - -MIT/X11 diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e6924212..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.orig b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.orig deleted file mode 100644 index 77414622..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.orig +++ /dev/null @@ -1,6 +0,0 @@ -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', 0755, function (err) { - if (err) console.error(err) - else console.log('pow!') -}); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.rej b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.rej deleted file mode 100644 index 81e7f431..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.rej +++ /dev/null @@ -1,19 +0,0 @@ ---- examples/pow.js -+++ examples/pow.js -@@ -1,6 +1,15 @@ --var mkdirp = require('mkdirp').mkdirp; -+var mkdirp = require('../').mkdirp, -+ mkdirpSync = require('../').mkdirpSync; - - mkdirp('/tmp/foo/bar/baz', 0755, function (err) { - if (err) console.error(err) - else console.log('pow!') - }); -+ -+try { -+ mkdirpSync('/tmp/bar/foo/baz', 0755); -+ console.log('double pow!'); -+} -+catch (ex) { -+ console.log(ex); -+} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/index.js deleted file mode 100644 index 25f43adf..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/index.js +++ /dev/null @@ -1,79 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; - -function mkdirP (p, mode, f) { - if (typeof mode === 'function' || mode === undefined) { - f = mode; - mode = 0777 & (~process.umask()); - } - - var cb = f || function () {}; - if (typeof mode === 'string') mode = parseInt(mode, 8); - p = path.resolve(p); - - fs.mkdir(p, mode, function (er) { - if (!er) return cb(); - switch (er.code) { - case 'ENOENT': - mkdirP(path.dirname(p), mode, function (er) { - if (er) cb(er); - else mkdirP(p, mode, cb); - }); - break; - - case 'EEXIST': - fs.stat(p, function (er2, stat) { - // if the stat fails, then that's super weird. - // let the original EEXIST be the failure reason. - if (er2 || !stat.isDirectory()) cb(er) - else cb(); - }); - break; - - default: - cb(er); - break; - } - }); -} - -mkdirP.sync = function sync (p, mode) { - if (mode === undefined) { - mode = 0777 & (~process.umask()); - } - - if (typeof mode === 'string') mode = parseInt(mode, 8); - p = path.resolve(p); - - try { - fs.mkdirSync(p, mode) - } - catch (err0) { - switch (err0.code) { - case 'ENOENT' : - var err1 = sync(path.dirname(p), mode) - if (err1) throw err1; - else return sync(p, mode); - break; - - case 'EEXIST' : - var stat; - try { - stat = fs.statSync(p); - } - catch (err1) { - throw err0 - } - if (!stat.isDirectory()) throw err0; - else return null; - break; - default : - throw err0 - break; - } - } - - return null; -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/package.json deleted file mode 100644 index 78638866..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "mkdirp", - "description": "Recursively mkdir, like `mkdir -p`", - "version": "0.3.0", - "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.0.x" - }, - "license": "MIT/X11", - "engines": { - "node": "*" - }, - "readme": "mkdirp\n======\n\nLike `mkdir -p`, but in node.js!\n\nexample\n=======\n\npow.js\n------\n var mkdirp = require('mkdirp');\n \n mkdirp('/tmp/foo/bar/baz', function (err) {\n if (err) console.error(err)\n else console.log('pow!')\n });\n\nOutput\n pow!\n\nAnd now /tmp/foo/bar/baz exists, huzzah!\n\nmethods\n=======\n\nvar mkdirp = require('mkdirp');\n\nmkdirp(dir, mode, cb)\n---------------------\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\nmkdirp.sync(dir, mode)\n----------------------\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\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n npm install mkdirp\n\nlicense\n=======\n\nMIT/X11\n", - "readmeFilename": "README.markdown", - "bugs": { - "url": "https://github.com/substack/node-mkdirp/issues" - }, - "homepage": "https://github.com/substack/node-mkdirp", - "_id": "mkdirp@0.3.0", - "_from": "mkdirp@0.3.0" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/chmod.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 520dcb8e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,38 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/clobber.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 0eb70998..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/mkdirp.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index b07cd70c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm.js deleted file mode 100644 index 23a7abbd..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm_sync.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index f685f609..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,39 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/race.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/race.js deleted file mode 100644 index 96a04476..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,41 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/rel.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 79858243..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/sync.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/sync.js deleted file mode 100644 index e0e389de..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,27 +0,0 @@ -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('/'); - - var err = mkdirp.sync(file, 0755); - 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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 64ccafe2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask_sync.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index 83cba560..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,27 +0,0 @@ -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('/'); - - var err = mkdirp.sync(file); - 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-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/package.json deleted file mode 100644 index 689d82d7..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "jade", - "description": "Jade template engine", - "version": "0.26.3", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/jade" - }, - "main": "./index.js", - "bin": { - "jade": "./bin/jade" - }, - "man": [ - "./jade.1" - ], - "dependencies": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "devDependencies": { - "mocha": "*", - "markdown": "*", - "stylus": "*", - "uubench": "*", - "should": "*", - "less": "*", - "uglify-js": "*" - }, - "component": { - "scripts": { - "jade": "runtime.js" - } - }, - "scripts": { - "prepublish": "npm prune" - }, - "bugs": { - "url": "https://github.com/visionmedia/jade/issues" - }, - "readme": "ERROR: No README data found!", - "homepage": "https://github.com/visionmedia/jade", - "_id": "jade@0.26.3", - "_from": "jade@0.26.3" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/runtime.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/runtime.js deleted file mode 100644 index 0f549077..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/runtime.js +++ /dev/null @@ -1,179 +0,0 @@ - -jade = (function(exports){ -/*! - * Jade - runtime - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Lame Array.isArray() polyfill for now. - */ - -if (!Array.isArray) { - Array.isArray = function(arr){ - return '[object Array]' == Object.prototype.toString.call(arr); - }; -} - -/** - * Lame Object.keys() polyfill for now. - */ - -if (!Object.keys) { - Object.keys = function(obj){ - var arr = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - arr.push(key); - } - } - return arr; - } -} - -/** - * Merge two attribute objects giving precedence - * to values in object `b`. Classes are special-cased - * allowing for arrays and merging/joining appropriately - * resulting in a string. - * - * @param {Object} a - * @param {Object} b - * @return {Object} a - * @api private - */ - -exports.merge = function merge(a, b) { - var ac = a['class']; - var bc = b['class']; - - if (ac || bc) { - ac = ac || []; - bc = bc || []; - if (!Array.isArray(ac)) ac = [ac]; - if (!Array.isArray(bc)) bc = [bc]; - ac = ac.filter(nulls); - bc = bc.filter(nulls); - a['class'] = ac.concat(bc).join(' '); - } - - for (var key in b) { - if (key != 'class') { - a[key] = b[key]; - } - } - - return a; -}; - -/** - * Filter null `val`s. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function nulls(val) { - return val != null; -} - -/** - * Render the given attributes object. - * - * @param {Object} obj - * @param {Object} escaped - * @return {String} - * @api private - */ - -exports.attrs = function attrs(obj, escaped){ - var buf = [] - , terse = obj.terse; - - delete obj.terse; - var keys = Object.keys(obj) - , len = keys.length; - - if (len) { - buf.push(''); - for (var i = 0; i < len; ++i) { - var key = keys[i] - , val = obj[key]; - - if ('boolean' == typeof val || null == val) { - if (val) { - terse - ? buf.push(key) - : buf.push(key + '="' + key + '"'); - } - } else if (0 == key.indexOf('data') && 'string' != typeof val) { - buf.push(key + "='" + JSON.stringify(val) + "'"); - } else if ('class' == key && Array.isArray(val)) { - buf.push(key + '="' + exports.escape(val.join(' ')) + '"'); - } else if (escaped && escaped[key]) { - buf.push(key + '="' + exports.escape(val) + '"'); - } else { - buf.push(key + '="' + val + '"'); - } - } - } - - return buf.join(' '); -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function escape(html){ - return String(html) - .replace(/&(?!(\w+|\#\d+);)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; - -/** - * Re-throw the given `err` in context to the - * the jade in `filename` at the given `lineno`. - * - * @param {Error} err - * @param {String} filename - * @param {String} lineno - * @api private - */ - -exports.rethrow = function rethrow(err, filename, lineno){ - if (!filename) throw err; - - var context = 3 - , str = require('fs').readFileSync(filename, 'utf8') - , lines = str.split('\n') - , start = Math.max(lineno - context, 0) - , end = Math.min(lines.length, lineno + context); - - // Error context - var context = lines.slice(start, end).map(function(line, i){ - var curr = i + start + 1; - return (curr == lineno ? ' > ' : ' ') - + curr - + '| ' - + line; - }).join('\n'); - - // Alter exception message - err.path = filename; - err.message = (filename || 'Jade') + ':' + lineno - + '\n' + context + '\n\n' + err.message; - throw err; -}; - - return exports; - -})({}); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/runtime.min.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/runtime.min.js deleted file mode 100644 index 1714efb0..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/runtime.min.js +++ /dev/null @@ -1 +0,0 @@ -jade=function(exports){Array.isArray||(Array.isArray=function(arr){return"[object Array]"==Object.prototype.toString.call(arr)}),Object.keys||(Object.keys=function(obj){var arr=[];for(var key in obj)obj.hasOwnProperty(key)&&arr.push(key);return arr}),exports.merge=function merge(a,b){var ac=a["class"],bc=b["class"];if(ac||bc)ac=ac||[],bc=bc||[],Array.isArray(ac)||(ac=[ac]),Array.isArray(bc)||(bc=[bc]),ac=ac.filter(nulls),bc=bc.filter(nulls),a["class"]=ac.concat(bc).join(" ");for(var key in b)key!="class"&&(a[key]=b[key]);return a};function nulls(val){return val!=null}return exports.attrs=function attrs(obj,escaped){var buf=[],terse=obj.terse;delete obj.terse;var keys=Object.keys(obj),len=keys.length;if(len){buf.push("");for(var i=0;i/g,">").replace(/"/g,""")},exports.rethrow=function rethrow(err,filename,lineno){if(!filename)throw err;var context=3,str=require("fs").readFileSync(filename,"utf8"),lines=str.split("\n"),start=Math.max(lineno-context,0),end=Math.min(lines.length,lineno+context),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" > ":" ")+curr+"| "+line}).join("\n");throw err.path=filename,err.message=(filename||"Jade")+":"+lineno+"\n"+context+"\n\n"+err.message,err},exports}({}); \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/test.jade b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/test.jade deleted file mode 100644 index b3a89889..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/test.jade +++ /dev/null @@ -1,7 +0,0 @@ -p. - This is a large - body of text for - this tag. - - Nothing too - exciting. \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/head.jade b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/head.jade deleted file mode 100644 index 85154062..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/head.jade +++ /dev/null @@ -1,5 +0,0 @@ -head - script(src='/jquery.js') - yield - if false - script(src='/jquery.ui.js') diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/index.jade b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/index.jade deleted file mode 100644 index 1032c5fa..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/index.jade +++ /dev/null @@ -1,22 +0,0 @@ - -tag = 'p' -foo = 'bar' - -#{tag} value -#{tag}(foo='bar') value -#{foo ? 'a' : 'li'}(something) here - -mixin item(icon) - li - if attributes.href - a(attributes) - img.icon(src=icon) - block - else - span(attributes) - img.icon(src=icon) - block - -ul - +item('contact') Contact - +item(href='/contact') Contact diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/index.js deleted file mode 100644 index 226e8c01..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/index.js +++ /dev/null @@ -1,11 +0,0 @@ - -/** - * Module dependencies. - */ - -var jade = require('../'); - -jade.renderFile('testing/index.jade', { pretty: true, debug: true, compileDebug: false }, function(err, str){ - if (err) throw err; - console.log(str); -}); \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/layout.jade b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/layout.jade deleted file mode 100644 index 6923cf15..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/layout.jade +++ /dev/null @@ -1,6 +0,0 @@ -html - include head - script(src='/caustic.js') - script(src='/app.js') - body - block content \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/user.jade b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/user.jade deleted file mode 100644 index 3c636b7c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/user.jade +++ /dev/null @@ -1,7 +0,0 @@ -h1 Tobi -p Is a ferret - -ul - li: a foo - li: a bar - li: a baz \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/user.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/user.js deleted file mode 100644 index 2ecc45ed..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/node_modules/jade/testing/user.js +++ /dev/null @@ -1,27 +0,0 @@ -function anonymous(locals, attrs, escape, rethrow) { -var attrs = jade.attrs, escape = jade.escape, rethrow = jade.rethrow; -var __jade = [{ lineno: 1, filename: "testing/user.jade" }]; -try { -var buf = []; -with (locals || {}) { -var interp; -__jade.unshift({ lineno: 1, filename: __jade[0].filename }); -__jade.unshift({ lineno: 1, filename: __jade[0].filename }); -buf.push('

      Tobi'); -__jade.unshift({ lineno: undefined, filename: __jade[0].filename }); -__jade.shift(); -buf.push('

      '); -__jade.shift(); -__jade.unshift({ lineno: 2, filename: __jade[0].filename }); -buf.push('

      Is a ferret'); -__jade.unshift({ lineno: undefined, filename: __jade[0].filename }); -__jade.shift(); -buf.push('

      '); -__jade.shift(); -__jade.shift(); -} -return buf.join(""); -} catch (err) { - rethrow(err, __jade[0].filename, __jade[0].lineno); -} -} \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/package.json deleted file mode 100644 index bf8992e4..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/mocha/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "mocha", - "version": "1.13.0", - "description": "simple, flexible, fun test framework", - "keywords": [ - "mocha", - "test", - "bdd", - "tdd", - "tap" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/mocha.git" - }, - "main": "./index", - "bin": { - "mocha": "./bin/mocha", - "_mocha": "./bin/_mocha" - }, - "engines": { - "node": ">= 0.4.x" - }, - "scripts": { - "test": "make test-all" - }, - "dependencies": { - "commander": "0.6.1", - "growl": "1.7.x", - "jade": "0.26.3", - "diff": "1.0.7", - "debug": "*", - "mkdirp": "0.3.5", - "glob": "3.2.3" - }, - "devDependencies": { - "should": "*", - "coffee-script": "1.2" - }, - "files": [ - "bin", - "images", - "lib", - "index.js", - "mocha.css", - "mocha.js" - ], - "readme": " [![Build Status](https://secure.travis-ci.org/visionmedia/mocha.png)](http://travis-ci.org/visionmedia/mocha)\n\n [![Mocha test framework](http://f.cl.ly/items/3l1k0n2A1U3M1I1L210p/Screen%20Shot%202012-02-24%20at%202.21.43%20PM.png)](http://visionmedia.github.io/mocha)\n\n Mocha is a simple, flexible, fun JavaScript test framework for node.js and the browser. For more information view the [documentation](http://visionmedia.github.io/mocha).\n\n## Contributors\n\n```\n\n project : mocha\n repo age : 1 year, 7 months\n active : 272 days\n commits : 1116\n files : 123\n authors :\n 504 TJ Holowaychuk 45.2%\n 389 Tj Holowaychuk 34.9%\n 31 Guillermo Rauch 2.8%\n 13 Attila Domokos 1.2%\n 9 John Firebaugh 0.8%\n 8 Jo Liss 0.7%\n 7 Nathan Rajlich 0.6%\n 6 James Carr 0.5%\n 6 Brendan Nee 0.5%\n 5 Aaron Heckmann 0.4%\n 4 hokaccha 0.4%\n 4 Xavier Antoviaque 0.4%\n 4 Joshua Krall 0.4%\n 3 Wil Moore III 0.3%\n 3 Jesse Dailey 0.3%\n 3 Nathan Bowser 0.3%\n 3 Tyson Tate 0.3%\n 3 Cory Thomas 0.3%\n 3 Ryunosuke SATO 0.3%\n 3 Paul Miller 0.3%\n 3 Ben Lindsey 0.3%\n 2 Forbes Lindesay 0.2%\n 2 Konstantin Käfer 0.2%\n 2 Brian Beck 0.2%\n 2 Merrick Christensen 0.2%\n 2 Michael Riley 0.2%\n 2 David Henderson 0.2%\n 2 Nathan Alderson 0.2%\n 2 Paul Armstrong 0.2%\n 2 Pete Hawkins 0.2%\n 2 Quang Van 0.2%\n 2 Raynos 0.2%\n 2 Jonas Westerlund 0.2%\n 2 Domenic Denicola 0.2%\n 2 Shawn Krisman 0.2%\n 2 Simon Gaeremynck 0.2%\n 2 FARKAS Máté 0.2%\n 2 Timo Tijhof 0.2%\n 2 Justin DuJardin 0.2%\n 2 Juzer Ali 0.2%\n 2 Ian Storm Taylor 0.2%\n 2 Arian Stolwijk 0.2%\n 2 domenic 0.2%\n 1 Richard Dingwall 0.1%\n 1 Russ Bradberry 0.1%\n 1 Sasha Koss 0.1%\n 1 Seiya Konno 0.1%\n 1 Standa Opichal 0.1%\n 1 Steve Mason 0.1%\n 1 Will Langstroth 0.1%\n 1 Yanis Wang 0.1%\n 1 Yuest Wang 0.1%\n 1 abrkn 0.1%\n 1 airportyh 0.1%\n 1 fengmk2 0.1%\n 1 tgautier@yahoo.com 0.1%\n 1 traleig1 0.1%\n 1 vlad 0.1%\n 1 yuitest 0.1%\n 1 Adam Crabtree 0.1%\n 1 Andreas Brekken 0.1%\n 1 Atsuya Takagi 0.1%\n 1 Austin Birch 0.1%\n 1 Bjørge Næss 0.1%\n 1 Brian Moore 0.1%\n 1 Bryan Donovan 0.1%\n 1 Casey Foster 0.1%\n 1 Corey Butler 0.1%\n 1 Dave McKenna 0.1%\n 1 Fedor Indutny 0.1%\n 1 Florian Margaine 0.1%\n 1 Frederico Silva 0.1%\n 1 Fredrik Lindin 0.1%\n 1 Gareth Murphy 0.1%\n 1 Gavin Mogan 0.1%\n 1 Greg Perkins 0.1%\n 1 Harry Brundage 0.1%\n 1 Herman Junge 0.1%\n 1 Ian Young 0.1%\n 1 Ivan 0.1%\n 1 Jaakko Salonen 0.1%\n 1 Jakub Nešetřil 0.1%\n 1 James Bowes 0.1%\n 1 James Lal 0.1%\n 1 Jason Barry 0.1%\n 1 Javier Aranda 0.1%\n 1 Jeff Kunkle 0.1%\n 1 Jonathan Creamer 0.1%\n 1 Jussi Virtanen 0.1%\n 1 Katie Gengler 0.1%\n 1 Kazuhito Hokamura 0.1%\n 1 Koen Punt 0.1%\n 1 Laszlo Bacsi 0.1%\n 1 László Bácsi 0.1%\n 1 Maciej Małecki 0.1%\n 1 Matt Robenolt 0.1%\n 1 Matt Smith 0.1%\n 1 Matthew Shanley 0.1%\n 1 Michael Schoonmaker 0.1%\n 1 Phil Sung 0.1%\n 1 R56 0.1%\n```\n\n## Links\n\n - [Google Group](http://groups.google.com/group/mochajs)\n - [Wiki](https://github.com/visionmedia/mocha/wiki)\n - Mocha [Extensions and reporters](https://github.com/visionmedia/mocha/wiki)\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/mocha/issues" - }, - "homepage": "https://github.com/visionmedia/mocha", - "_id": "mocha@1.13.0", - "_from": "mocha@1.13.x" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/LICENSE deleted file mode 100644 index 352c2874..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/LICENSE +++ /dev/null @@ -1,43 +0,0 @@ -Copyright 2013, NAN contributors: - - Rod Vagg - - Benjamin Byholm - - Trevor Norris -(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. diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/README.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/README.md deleted file mode 100644 index 36842c54..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/README.md +++ /dev/null @@ -1,792 +0,0 @@ -Native Abstractions for Node.js -=============================== - -**A header file filled with macro and utility goodness for making add-on development for Node.js easier across versions 0.8, 0.10 and 0.11, and eventually 0.12.** - -***Current version: 0.6.0*** *(See [nan.h](https://github.com/rvagg/nan/blob/master/nan.h) for complete ChangeLog)* - -[![NPM](https://nodei.co/npm/nan.png?downloads=true)](https://nodei.co/npm/nan/) [![NPM](https://nodei.co/npm-dl/nan.png?months=6)](https://nodei.co/npm/nan/) - -Thanks to the crazy changes in V8 (and some in Node core), keeping native addons compiling happily across versions, particularly 0.10 to 0.11/0.12, is a minor nightmare. The goal of this project is to store all logic necessary to develop native Node.js addons without having to inspect `NODE_MODULE_VERSION` and get yourself into a macro-tangle. - -This project also contains some helper utilities that make addon development a bit more pleasant. - - * **[News & Updates](#news)** - * **[Usage](#usage)** - * **[Example](#example)** - * **[API](#api)** - - -## News & Updates - -### Nov-2013: Node 0.11.9+ breaking V8 change - -The version of V8 that's shipping with Node 0.11.9+ has changed the signature for new `Local`s to: `v8::Local::New(isolate, value)`, i.e. introducing the `isolate` argument and therefore breaking all new `Local` declarations for previous versions. NAN 0.6+ now includes a `NanNewLocal(value)` that can be used in place to work around this incompatibility and maintain compatibility with 0.8->0.11.9+ (minus a few early 0.11 releases). - -For example, if you wanted to return a `null` on a callback you will have to change the argument from `v8::Local::New(v8::Null())` to `NanNewLocal(v8::Null())`. - -### Nov-2013: Change to binding.gyp `"include_dirs"` for NAN - -Inclusion of NAN in a project's binding.gyp is now greatly simplified. You can now just use `" -## Usage - -Simply add **NAN** as a dependency in the *package.json* of your Node addon: - -``` bash -$ npm install --save nan -``` - -Pull in the path to **NAN** in your *binding.gyp* so that you can use `#include "nan.h"` in your *.cpp* files: - -``` python -"include_dirs" : [ - "` when compiling your addon. - - -## Example - -See **[LevelDOWN](https://github.com/rvagg/node-leveldown/pull/48)** for a full example of **NAN** in use. - -For a simpler example, see the **[async pi estimation example](https://github.com/rvagg/nan/tree/master/examples/async_pi_estimate)** in the examples directory for full code and an explanation of what this Monte Carlo Pi estimation example does. Below are just some parts of the full example that illustrate the use of **NAN**. - -Compare to the current 0.10 version of this example, found in the [node-addon-examples](https://github.com/rvagg/node-addon-examples/tree/master/9_async_work) repository and also a 0.11 version of the same found [here](https://github.com/kkoopa/node-addon-examples/tree/5c01f58fc993377a567812597e54a83af69686d7/9_async_work). - -Note that there is no embedded version sniffing going on here and also the async work is made much simpler, see below for details on the `NanAsyncWorker` class. - -```c++ -// addon.cc -#include -#include "nan.h" -// ... - -using namespace v8; - -void InitAll(Handle exports) { - exports->Set(NanSymbol("calculateSync"), - FunctionTemplate::New(CalculateSync)->GetFunction()); - - exports->Set(NanSymbol("calculateAsync"), - FunctionTemplate::New(CalculateAsync)->GetFunction()); -} - -NODE_MODULE(addon, InitAll) -``` - -```c++ -// sync.h -#include -#include "nan.h" - -NAN_METHOD(CalculateSync); -``` - -```c++ -// sync.cc -#include -#include "nan.h" -#include "sync.h" -// ... - -using namespace v8; - -// Simple synchronous access to the `Estimate()` function -NAN_METHOD(CalculateSync) { - NanScope(); - - // expect a number as the first argument - int points = args[0]->Uint32Value(); - double est = Estimate(points); - - NanReturnValue(Number::New(est)); -} -``` - -```c++ -// async.cc -#include -#include "nan.h" -#include "async.h" - -// ... - -using namespace v8; - -class PiWorker : public NanAsyncWorker { - public: - PiWorker(NanCallback *callback, int points) - : NanAsyncWorker(callback), points(points) {} - ~PiWorker() {} - - // Executed inside the worker-thread. - // It is not safe to access V8, or V8 data structures - // here, so everything we need for input and output - // should go on `this`. - void Execute () { - estimate = Estimate(points); - } - - // Executed when the async work is complete - // this function will be run inside the main event loop - // so it is safe to use V8 again - void HandleOKCallback () { - NanScope(); - - Local argv[] = { - Local::New(Null()) - , Number::New(estimate) - }; - - callback->Call(2, argv); - }; - - private: - int points; - double estimate; -}; - -// Asynchronous access to the `Estimate()` function -NAN_METHOD(CalculateAsync) { - NanScope(); - - int points = args[0]->Uint32Value(); - NanCallback *callback = new NanCallback(args[1].As()); - - NanAsyncQueueWorker(new PiWorker(callback, points)); - NanReturnUndefined(); -} -``` - - -## API - - * NAN_METHOD - * NAN_GETTER - * NAN_SETTER - * NAN_PROPERTY_GETTER - * NAN_PROPERTY_SETTER - * NAN_PROPERTY_ENUMERATOR - * NAN_PROPERTY_DELETER - * NAN_PROPERTY_QUERY - * NAN_INDEX_GETTER - * NAN_INDEX_SETTER - * NAN_INDEX_ENUMERATOR - * NAN_INDEX_DELETER - * NAN_INDEX_QUERY - * NAN_WEAK_CALLBACK - * NAN_DEPRECATED - * NAN_INLINE - * NanNewLocal - * NanReturnValue - * NanReturnUndefined - * NanReturnNull - * NanReturnEmptyString - * NanScope - * NanLocker - * NanUnlocker - * NanGetInternalFieldPointer - * NanSetInternalFieldPointer - * NanObjectWrapHandle - * NanMakeWeak - * NanSymbol - * NanGetPointerSafe - * NanSetPointerSafe - * NanFromV8String - * NanBooleanOptionValue - * NanUInt32OptionValue - * NanError, NanTypeError, NanRangeError - * NanThrowError, NanThrowTypeError, NanThrowRangeError, NanThrowError(Handle), NanThrowError(Handle, int) - * NanNewBufferHandle(char *, size_t, FreeCallback, void *), NanNewBufferHandle(char *, uint32_t), NanNewBufferHandle(uint32_t) - * NanBufferUse(char *, uint32_t) - * NanNewContextHandle - * NanHasInstance - * NanPersistentToLocal - * NanDispose - * NanAssignPersistent - * NanInitPersistent - * NanCallback - * NanAsyncWorker - * NanAsyncQueueWorker - - -### NAN_METHOD(methodname) - -Use `NAN_METHOD` to define your V8 accessible methods: - -```c++ -// .h: -class Foo : public node::ObjectWrap { - ... - - static NAN_METHOD(Bar); - static NAN_METHOD(Baz); -} - - -// .cc: -NAN_METHOD(Foo::Bar) { - ... -} - -NAN_METHOD(Foo::Baz) { - ... -} -``` - -The reason for this macro is because of the method signature change in 0.11: - -```c++ -// 0.10 and below: -Handle name(const Arguments& args) - -// 0.11 and above -void name(const FunctionCallbackInfo& args) -``` - -The introduction of `FunctionCallbackInfo` brings additional complications: - - -### NAN_GETTER(methodname) - -Use `NAN_GETTER` to declare your V8 accessible getters. You get a `Local` `property` and an appropriately typed `args` object that can act like the `args` argument to a `NAN_METHOD` call. - -You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_GETTER`. - - -### NAN_SETTER(methodname) - -Use `NAN_SETTER` to declare your V8 accessible setters. Same as `NAN_GETTER` but you also get a `Local` `value` object to work with. - -You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_SETTER`. - - -### NAN_PROPERTY_GETTER(cbname) -Use `NAN_PROPERTY_GETTER` to declare your V8 accessible property getters. You get a `Local` `property` and an appropriately typed `args` object that can act similar to the `args` argument to a `NAN_METHOD` call. - -You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_GETTER`. - - -### NAN_PROPERTY_SETTER(cbname) -Use `NAN_PROPERTY_SETTER` to declare your V8 accessible property setters. Same as `NAN_PROPERTY_GETTER` but you also get a `Local` `value` object to work with. - -You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_SETTER`. - - -### NAN_PROPERTY_ENUMERATOR(cbname) -Use `NAN_PROPERTY_ENUMERATOR` to declare your V8 accessible property enumerators. You get an appropriately typed `args` object like the `args` argument to a `NAN_PROPERTY_GETTER` call. - -You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_ENUMERATOR`. - - -### NAN_PROPERTY_DELETER(cbname) -Use `NAN_PROPERTY_DELETER` to declare your V8 accessible property deleters. Same as `NAN_PROPERTY_GETTER`. - -You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_DELETER`. - - -### NAN_PROPERTY_QUERY(cbname) -Use `NAN_PROPERTY_QUERY` to declare your V8 accessible property queries. Same as `NAN_PROPERTY_GETTER`. - -You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_QUERY`. - - -### NAN_INDEX_GETTER(cbname) -Use `NAN_INDEX_GETTER` to declare your V8 accessible index getters. You get a `uint32_t` `index` and an appropriately typed `args` object that can act similar to the `args` argument to a `NAN_METHOD` call. - -You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_INDEX_GETTER`. - - -### NAN_INDEX_SETTER(cbname) -Use `NAN_INDEX_SETTER` to declare your V8 accessible index setters. Same as `NAN_INDEX_GETTER` but you also get a `Local` `value` object to work with. - -You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_INDEX_SETTER`. - - -### NAN_INDEX_ENUMERATOR(cbname) -Use `NAN_INDEX_ENUMERATOR` to declare your V8 accessible index enumerators. You get an appropriately typed `args` object like the `args` argument to a `NAN_INDEX_GETTER` call. - -You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_INDEX_ENUMERATOR`. - - -### NAN_INDEX_DELETER(cbname) -Use `NAN_INDEX_DELETER` to declare your V8 accessible index deleters. Same as `NAN_INDEX_GETTER`. - -You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_INDEX_DELETER`. - - -### NAN_INDEX_QUERY(cbname) -Use `NAN_INDEX_QUERY` to declare your V8 accessible index queries. Same as `NAN_INDEX_GETTER`. - -You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_INDEX_QUERY`. - - -### NAN_WEAK_CALLBACK(type, cbname) - -Use `NAN_WEAK_CALLBACK` to declare your V8 WeakReference callbacks. There is an object argument accessible through `NAN_WEAK_CALLBACK_OBJECT`. The `type` argument gives the type of the `data` argument, accessible through `NAN_WEAK_CALLBACK_DATA(type)`. - -```c++ -static NAN_WEAK_CALLBACK(BufferReference*, WeakCheck) { - if (NAN_WEAK_CALLBACK_DATA(BufferReference*)->noLongerNeeded_) { - delete NAN_WEAK_CALLBACK_DATA(BufferReference*); - } else { - // Still in use, revive, prevent GC - NanMakeWeak(NAN_WEAK_CALLBACK_OBJECT, NAN_WEAK_CALLBACK_DATA(BufferReference*), &WeakCheck); - } -} -``` - - -### NAN_DEPRECATED(declarator) -Declares a function as deprecated. Identical to `V8_DEPRECATED`. - -```c++ -static NAN_DEPRECATED(NAN_METHOD(foo)) { - ... -} -``` - - -### NAN_INLINE(declarator) -Inlines a function. Identical to `V8_INLINE`. - -```c++ -static NAN_INLINE(int foo(int bar)) { - ... -} -``` - - -### NanNewLocal<T>(Handle<Value>) - -Use `NanNewLocal` in place of `v8::Local::New(...)` as this function -requires an `isolate` argument in recent versions of V8 but not in older versions. - -```c++ -NanNewLocal(v8::Null()) -``` - - -### NanReturnValue(Handle<Value>) - -Use `NanReturnValue` when you want to return a value from your V8 accessible method: - -```c++ -NAN_METHOD(Foo::Bar) { - ... - - NanReturnValue(String::New("FooBar!")); -} -``` - -No `return` statement required. - - -### NanReturnUndefined() - -Use `NanReturnUndefined` when you don't want to return anything from your V8 accessible method: - -```c++ -NAN_METHOD(Foo::Baz) { - ... - - NanReturnUndefined(); -} -``` - - -### NanReturnNull() - -Use `NanReturnNull` when you want to return `Null` from your V8 accessible method: - -```c++ -NAN_METHOD(Foo::Baz) { - ... - - NanReturnNull(); -} -``` - - -### NanReturnEmptyString() - -Use `NanReturnEmptyString` when you want to return an empty `String` from your V8 accessible method: - -```c++ -NAN_METHOD(Foo::Baz) { - ... - - NanReturnEmptyString(); -} -``` - - -### NanScope() - -The introduction of `isolate` references for many V8 calls in Node 0.11 makes `NanScope()` necessary, use it in place of `HandleScope scope`: - -```c++ -NAN_METHOD(Foo::Bar) { - NanScope(); - - NanReturnValue(String::New("FooBar!")); -} -``` - - -### NanLocker() - -The introduction of `isolate` references for many V8 calls in Node 0.11 makes `NanLocker()` necessary, use it in place of `Locker locker`: - -```c++ -NAN_METHOD(Foo::Bar) { - NanLocker(); - ... - NanUnlocker(); -} -``` - - -### NanUnlocker() - -The introduction of `isolate` references for many V8 calls in Node 0.11 makes `NanUnlocker()` necessary, use it in place of `Unlocker unlocker`: - -```c++ -NAN_METHOD(Foo::Bar) { - NanLocker(); - ... - NanUnlocker(); -} -``` - - -### void * NanGetInternalFieldPointer(Handle<Object>, int) - -Gets a pointer to the internal field with at `index` from a V8 `Object` handle. - -```c++ -Local obj; -... -NanGetInternalFieldPointer(obj, 0); -``` - -### void NanSetInternalFieldPointer(Handle<Object>, int, void *) - -Sets the value of the internal field at `index` on a V8 `Object` handle. - -```c++ -static Persistent dataWrapperCtor; -... -Local wrapper = NanPersistentToLocal(dataWrapperCtor)->NewInstance(); -NanSetInternalFieldPointer(wrapper, 0, this); -``` - - -### Local<Object> NanObjectWrapHandle(Object) - -When you want to fetch the V8 object handle from a native object you've wrapped with Node's `ObjectWrap`, you should use `NanObjectWrapHandle`: - -```c++ -NanObjectWrapHandle(iterator)->Get(String::NewSymbol("end")) -``` - - -### NanMakeWeak(Persistent<T>, parameter, callback) - -Make a persistent reference weak. - - -### String NanSymbol(char *) - -This isn't strictly about compatibility, it's just an easier way to create string symbol objects (i.e. `String::NewSymbol(x)`), for getting and setting object properties, or names of objects. - -```c++ -bool foo = false; -if (obj->Has(NanSymbol("foo"))) - foo = optionsObj->Get(NanSymbol("foo"))->BooleanValue() -``` - - -### Type NanGetPointerSafe(Type *[, Type]) - -A helper for getting values from optional pointers. If the pointer is `NULL`, the function returns the optional default value, which defaults to `0`. Otherwise, the function returns the value the pointer points to. - -```c++ -char *plugh(uint32_t *optional) { - char res[] = "xyzzy"; - uint32_t param = NanGetPointerSafe(optional, 0x1337); - switch (param) { - ... - } - NanSetPointerSafe(optional, 0xDEADBEEF); -} -``` - - -### bool NanSetPointerSafe(Type *, Type) - -A helper for setting optional argument pointers. If the pointer is `NULL`, the function simply return `false`. Otherwise, the value is assigned to the variable the pointer points to. - -```c++ -const char *plugh(size_t *outputsize) { - char res[] = "xyzzy"; - if !(NanSetPointerSafe(outputsize, strlen(res) + 1)) { - ... - } - - ... -} -``` - - -### char* NanFromV8String(Handle<Value>[, enum Nan::Encoding, size_t *, char *, size_t, int]) - -When you want to convert a V8 `String` to a `char*` use `NanFromV8String`. It is possible to define an encoding that defaults to `Nan::UTF8` as well as a pointer to a variable that will be assigned the number of bytes in the returned string. It is also possible to supply a buffer and its length to the function in order not to have a new buffer allocated. The final argument allows optionally setting `String::WriteOptions`, which default to `String::HINT_MANY_WRITES_EXPECTED | String::NO_NULL_TERMINATION`. -Just remember that you'll end up with an object that you'll need to `delete[]` at some point unless you supply your own buffer: - -```c++ -size_t count; -char* name = NanFromV8String(args[0]); -char* decoded = NanFromV8String(args[1], Nan::BASE64, &count, NULL, 0, String::HINT_MANY_WRITES_EXPECTED); -char param_copy[count]; -memcpy(param_copy, decoded, count); -delete[] decoded; -``` - - -### bool NanBooleanOptionValue(Handle<Value>, Handle<String>[, bool]) - -When you have an "options" object that you need to fetch properties from, boolean options can be fetched with this pair. They check first if the object exists (`IsEmpty`), then if the object has the given property (`Has`) then they get and convert/coerce the property to a `bool`. - -The optional last parameter is the *default* value, which is `false` if left off: - -```c++ -// `foo` is false unless the user supplies a truthy value for it -bool foo = NanBooleanOptionValue(optionsObj, NanSymbol("foo")); -// `bar` is true unless the user supplies a falsy value for it -bool bar = NanBooleanOptionValueDefTrue(optionsObj, NanSymbol("bar"), true); -``` - - -### uint32_t NanUInt32OptionValue(Handle<Value>, Handle<String>, uint32_t) - -Similar to `NanBooleanOptionValue`, use `NanUInt32OptionValue` to fetch an integer option from your options object. Can be any kind of JavaScript `Number` and it will be coerced to an unsigned 32-bit integer. - -Requires all 3 arguments as a default is not optional: - -```c++ -uint32_t count = NanUInt32OptionValue(optionsObj, NanSymbol("count"), 1024); -``` - - -### NanError(message), NanTypeError(message), NanRangeError(message) - -For making `Error`, `TypeError` and `RangeError` objects. - -```c++ -Local res = NanError("you must supply a callback argument"); -``` - - -### NanThrowError(message), NanThrowTypeError(message), NanThrowRangeError(message), NanThrowError(Local<Value>), NanThrowError(Local<Value>, int) - -For throwing `Error`, `TypeError` and `RangeError` objects. You should `return` this call: - -```c++ -return NanThrowError("you must supply a callback argument"); -``` - -Can also handle any custom object you may want to throw. If used with the error code argument, it will add the supplied error code to the error object as a property called `code`. - - -### Local<Object> NanNewBufferHandle(char *, uint32_t), Local<Object> NanNewBufferHandle(uint32_t) - -The `Buffer` API has changed a little in Node 0.11, this helper provides consistent access to `Buffer` creation: - -```c++ -NanNewBufferHandle((char*)value.data(), value.size()); -``` - -Can also be used to initialize a `Buffer` with just a `size` argument. - -Can also be supplied with a `NAN_WEAK_CALLBACK` and a hint for the garbage collector, when dealing with weak references. - - -### Local<Object> NanBufferUse(char*, uint32_t) - -`Buffer::New(char*, uint32_t)` prior to 0.11 would make a copy of the data. -While it was possible to get around this, it required a shim by passing a -callback. So the new API `Buffer::Use(char*, uint32_t)` was introduced to remove -needing to use this shim. - -`NanBufferUse` uses the `char*` passed as the backing data, and will free the -memory automatically when the weak callback is called. Keep this in mind, as -careless use can lead to "double free or corruption" and other cryptic failures. - - -### bool NanHasInstance(Persistent<FunctionTemplate>&, Handle<Value>) - -Can be used to check the type of an object to determine it is of a particular class you have already defined and have a `Persistent` handle for. - - -### Local<Type> NanPersistentToLocal(Persistent<Type>&) - -Aside from `FunctionCallbackInfo`, the biggest and most painful change to V8 in Node 0.11 is the many restrictions now placed on `Persistent` handles. They are difficult to assign and difficult to fetch the original value out of. - -Use `NanPersistentToLocal` to convert a `Persistent` handle back to a `Local` handle. - -```c++ -Local handle = NanPersistentToLocal(persistentHandle); -``` - - -### Local<Context> NanNewContextHandle([ExtensionConfiguration*, Handle<ObjectTemplate>, Handle<Value>]) -Creates a new `Local` handle. - -```c++ -Local ftmpl = FunctionTemplate::New(); -Local otmpl = ftmpl->InstanceTemplate(); -Local ctx = NanNewContextHandle(NULL, otmpl); -``` - - -### void NanDispose(Persistent<T> &) - -Use `NanDispose` to dispose a `Persistent` handle. - -```c++ -NanDispose(persistentHandle); -``` - - -### NanAssignPersistent(type, handle, object) - -Use `NanAssignPersistent` to assign a non-`Persistent` handle to a `Persistent` one. You can no longer just declare a `Persistent` handle and assign directly to it later, you have to `Reset` it in Node 0.11, so this makes it easier. - -In general it is now better to place anything you want to protect from V8's garbage collector as properties of a generic `Object` and then assign that to a `Persistent`. This works in older versions of Node also if you use `NanAssignPersistent`: - -```c++ -Persistent persistentHandle; - -... - -Local obj = Object::New(); -obj->Set(NanSymbol("key"), keyHandle); // where keyHandle might be a Local -NanAssignPersistent(Object, persistentHandle, obj) -``` - - -### NanInitPersistent(type, name, object) - -User `NanInitPersistent` to declare and initialize a new `Persistent` with the supplied object. The assignment operator for `Persistent` is no longer public in Node 0.11, so this macro makes it easier to declare and initializing a new `Persistent`. See NanAssignPersistent for more information. - -```c++ -Local obj = Object::New(); -obj->Set(NanSymbol("key"), keyHandle); // where keyHandle might be a Local -NanInitPersistent(Object, persistentHandle, obj); -``` - - -### NanCallback - -Because of the difficulties imposed by the changes to `Persistent` handles in V8 in Node 0.11, creating `Persistent` versions of your `Local` handles is annoyingly tricky. `NanCallback` makes it easier by taking your `Local` handle, making it persistent until the `NanCallback` is deleted and even providing a handy `Call()` method to fetch and execute the callback `Function`. - -```c++ -Local callbackHandle = args[0].As(); -NanCallback *callback = new NanCallback(callbackHandle); -// pass `callback` around and it's safe from GC until you: -delete callback; -``` - -You can execute the callback like so: - -```c++ -// no arguments: -callback->Call(0, NULL); - -// an error argument: -Local argv[] = { - Exception::Error(String::New("fail!")) -}; -callback->Call(1, argv); - -// a success argument: -Local argv[] = { - Local::New(Null()), - String::New("w00t!") -}; -callback->Call(2, argv); -``` - -`NanCallback` also has a `Local GetCallback()` method that you can use to fetch a local handle to the underlying callback function if you need it. - - -### NanAsyncWorker - -`NanAsyncWorker` is an abstract class that you can subclass to have much of the annoying async queuing and handling taken care of for you. It can even store arbitrary V8 objects for you and have them persist while the async work is in progress. - -See a rough outline of the implementation: - -```c++ -class NanAsyncWorker { -public: - NanAsyncWorker (NanCallback *callback); - - // Clean up persistent handles and delete the *callback - virtual ~NanAsyncWorker (); - - // Check the `char *errmsg` property and call HandleOKCallback() - // or HandleErrorCallback depending on whether it has been set or not - virtual void WorkComplete (); - - // You must implement this to do some async work. If there is an - // error then allocate `errmsg` to to a message and the callback will - // be passed that string in an Error object - virtual void Execute (); - - // Save a V8 object in a Persistent handle to protect it from GC - void SavePersistent(const char *key, Local &obj); - - // Fetch a stored V8 object (don't call from within `Execute()`) - Local GetFromPersistent(const char *key); - -protected: - // Set this if there is an error, otherwise it's NULL - const char *errmsg; - - // Default implementation calls the callback function with no arguments. - // Override this to return meaningful data - virtual void HandleOKCallback (); - - // Default implementation calls the callback function with an Error object - // wrapping the `errmsg` string - virtual void HandleErrorCallback (); -}; -``` - - -### NanAsyncQueueWorker(NanAsyncWorker *) - -`NanAsyncQueueWorker` will run a `NanAsyncWorker` asynchronously via libuv. Both the *execute* and *after_work* steps are taken care of for you—most of the logic for this is embedded in `NanAsyncWorker`. - -### Contributors - -NAN is only possible due to the excellent work of the following contributors: - - - - - - -
      Rod VaggGitHub/rvaggTwitter/@rvagg
      Benjamin ByholmGitHub/kkoopa
      Trevor NorrisGitHub/trevnorrisTwitter/@trevnorris
      Nathan RajlichGitHub/TooTallNateTwitter/@TooTallNate
      - -Licence & copyright ------------------------ - -Copyright (c) 2013 NAN contributors (listed above). - -Native Abstractions for Node.js is licensed under an MIT +no-false-attribs license. 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-sass/node_modules/node-sass/node_modules/nan/build/config.gypi b/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/build/config.gypi deleted file mode 100644 index e085a500..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/build/config.gypi +++ /dev/null @@ -1,38 +0,0 @@ -# Do not edit. File was generated by node-gyp's "configure" step -{ - "target_defaults": { - "cflags": [], - "default_configuration": "Release", - "defines": [], - "include_dirs": [], - "libraries": [] - }, - "variables": { - "clang": 0, - "gcc_version": 47, - "host_arch": "x64", - "node_install_npm": "true", - "node_prefix": "", - "node_shared_cares": "false", - "node_shared_http_parser": "false", - "node_shared_libuv": "false", - "node_shared_openssl": "false", - "node_shared_v8": "false", - "node_shared_zlib": "false", - "node_tag": "", - "node_unsafe_optimizations": 0, - "node_use_dtrace": "false", - "node_use_etw": "false", - "node_use_openssl": "true", - "node_use_perfctr": "false", - "node_use_systemtap": "false", - "python": "/usr/bin/python", - "target_arch": "x64", - "v8_enable_gdbjit": 0, - "v8_no_strict_aliasing": 1, - "v8_use_snapshot": "true", - "nodedir": "/home/rvagg/.node-gyp/0.10.21", - "copy_dev_lib": "true", - "standalone_static_library": 1 - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/include_dirs.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/include_dirs.js deleted file mode 100644 index 4f1dfb41..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/include_dirs.js +++ /dev/null @@ -1 +0,0 @@ -console.log(require('path').relative('.', __dirname)); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/nan.h b/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/nan.h deleted file mode 100644 index 2f4ab153..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/nan.h +++ /dev/null @@ -1,1102 +0,0 @@ -/********************************************************************************** - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2013 NAN contributors: - * - Rod Vagg - * - Benjamin Byholm - * - Trevor Norris - * - * MIT +no-false-attribs License - * - * Version 0.6.0 (current Node unstable: 0.11.9, Node stable: 0.10.22) - * - * ChangeLog: - * * 0.6.0 Nov 21 2013 - * - Introduce NanNewLocal(v8::Handle value) for use in place of - * v8::Local::New(...) since v8 started requiring isolate in Node 0.11.9 - * - * * 0.5.2 Nov 16 2013 - * - Convert SavePersistent and GetFromPersistent in NanAsyncWorker from protected and public - * - * * 0.5.1 Nov 12 2013 - * - Use node::MakeCallback() instead of direct v8::Function::Call() - * - * * 0.5.0 Nov 11 2013 - * - Added @TooTallNate as collaborator - * - New, much simpler, "include_dirs" for binding.gyp - * - Added full range of NAN_INDEX_* macros to match NAN_PROPERTY_* macros - * - * * 0.4.4 Nov 2 2013 - * - Isolate argument from v8::Persistent::MakeWeak removed for 0.11.8+ - * - * * 0.4.3 Nov 2 2013 - * - Include node_object_wrap.h, removed from node.h for Node 0.11.8. - * - * * 0.4.2 Nov 2 2013 - * - Handle deprecation of v8::Persistent::Dispose(v8::Isolate* isolate)) for - * Node 0.11.8 release. - * - * * 0.4.1 Sep 16 2013 - * - Added explicit `#include ` as it was removed from node.h for v0.11.8 - * - * * 0.4.0 Sep 2 2013 - * - Added NAN_INLINE and NAN_DEPRECATED and made use of them - * - Added NanError, NanTypeError and NanRangeError - * - Cleaned up code - * - * * 0.3.2 Aug 30 2013 - * - Fix missing scope declaration in GetFromPersistent() and SaveToPersistent - * in NanAsyncWorker - * - * * 0.3.1 Aug 20 2013 - * - fix "not all control paths return a value" compile warning on some platforms - * - * * 0.3.0 Aug 19 2013 - * - Made NAN work with NPM - * - Lots of fixes to NanFromV8String, pulling in features from new Node core - * - Changed node::encoding to Nan::Encoding in NanFromV8String to unify the API - * - Added optional error number argument for NanThrowError() - * - Added NanInitPersistent() - * - Added NanReturnNull() and NanReturnEmptyString() - * - Added NanLocker and NanUnlocker - * - Added missing scopes - * - Made sure to clear disposed Persistent handles - * - Changed NanAsyncWorker to allocate error messages on the heap - * - Changed NanThrowError(Local) to NanThrowError(Handle) - * - Fixed leak in NanAsyncWorker when errmsg is used - * - * * 0.2.2 Aug 5 2013 - * - Fixed usage of undefined variable with node::BASE64 in NanFromV8String() - * - * * 0.2.1 Aug 5 2013 - * - Fixed 0.8 breakage, node::BUFFER encoding type not available in 0.8 for - * NanFromV8String() - * - * * 0.2.0 Aug 5 2013 - * - Added NAN_PROPERTY_GETTER, NAN_PROPERTY_SETTER, NAN_PROPERTY_ENUMERATOR, - * NAN_PROPERTY_DELETER, NAN_PROPERTY_QUERY - * - Extracted _NAN_METHOD_ARGS, _NAN_GETTER_ARGS, _NAN_SETTER_ARGS, - * _NAN_PROPERTY_GETTER_ARGS, _NAN_PROPERTY_SETTER_ARGS, - * _NAN_PROPERTY_ENUMERATOR_ARGS, _NAN_PROPERTY_DELETER_ARGS, - * _NAN_PROPERTY_QUERY_ARGS - * - Added NanGetInternalFieldPointer, NanSetInternalFieldPointer - * - Added NAN_WEAK_CALLBACK, NAN_WEAK_CALLBACK_OBJECT, - * NAN_WEAK_CALLBACK_DATA, NanMakeWeak - * - Renamed THROW_ERROR to _NAN_THROW_ERROR - * - Added NanNewBufferHandle(char*, size_t, node::smalloc::FreeCallback, void*) - * - Added NanBufferUse(char*, uint32_t) - * - Added NanNewContextHandle(v8::ExtensionConfiguration*, - * v8::Handle, v8::Handle) - * - Fixed broken NanCallback#GetFunction() - * - Added optional encoding and size arguments to NanFromV8String() - * - Added NanGetPointerSafe() and NanSetPointerSafe() - * - Added initial test suite (to be expanded) - * - Allow NanUInt32OptionValue to convert any Number object - * - * * 0.1.0 Jul 21 2013 - * - Added `NAN_GETTER`, `NAN_SETTER` - * - Added `NanThrowError` with single Local argument - * - Added `NanNewBufferHandle` with single uint32_t argument - * - Added `NanHasInstance(Persistent&, Handle)` - * - Added `Local NanCallback#GetFunction()` - * - Added `NanCallback#Call(int, Local[])` - * - Deprecated `NanCallback#Run(int, Local[])` in favour of Call - * - * See https://github.com/rvagg/nan for the latest update to this file - **********************************************************************************/ - -#ifndef NAN_H -#define NAN_H - -#include -#include -#include -#include -#include -#include - -#if defined(__GNUC__) && !defined(DEBUG) -# define NAN_INLINE(declarator) inline __attribute__((always_inline)) declarator -#elif defined(_MSC_VER) && !defined(DEBUG) -# define NAN_INLINE(declarator) __forceinline declarator -#else -# define NAN_INLINE(declarator) inline declarator -#endif - -#if defined(__GNUC__) && !V8_DISABLE_DEPRECATIONS -# define NAN_DEPRECATED(declarator) declarator __attribute__ ((deprecated)) -#elif defined(_MSC_VER) && !V8_DISABLE_DEPRECATIONS -# define NAN_DEPRECATED(declarator) __declspec(deprecated) declarator -#else -# define NAN_DEPRECATED(declarator) declarator -#endif - -// some generic helpers - -template static NAN_INLINE(bool NanSetPointerSafe( - T *var - , T val -)) { - if (var) { - *var = val; - return true; - } else { - return false; - } -} - -template static NAN_INLINE(T NanGetPointerSafe( - T *var - , T fallback = reinterpret_cast(0) -)) { - if (var) { - return *var; - } else { - return fallback; - } -} - -#define NanSymbol(value) v8::String::NewSymbol(value) - -static NAN_INLINE(bool NanBooleanOptionValue( - v8::Local optionsObj - , v8::Handle opt, bool def -)) { - if (def) { - return optionsObj.IsEmpty() - || !optionsObj->Has(opt) - || optionsObj->Get(opt)->BooleanValue(); - } else { - return !optionsObj.IsEmpty() - && optionsObj->Has(opt) - && optionsObj->Get(opt)->BooleanValue(); - } -} - -static NAN_INLINE(bool NanBooleanOptionValue( - v8::Local optionsObj - , v8::Handle opt -)) { - return NanBooleanOptionValue(optionsObj, opt, false); -} - -static NAN_INLINE(uint32_t NanUInt32OptionValue( - v8::Local optionsObj - , v8::Handle opt - , uint32_t def -)) { - return !optionsObj.IsEmpty() - && optionsObj->Has(opt) - && optionsObj->Get(opt)->IsNumber() - ? optionsObj->Get(opt)->Uint32Value() - : def; -} - -#if (NODE_MODULE_VERSION > 0x000B) -// Node 0.11+ (0.11.3 and below won't compile with these) - -static v8::Isolate* nan_isolate = v8::Isolate::GetCurrent(); - -# define _NAN_METHOD_ARGS const v8::FunctionCallbackInfo& args -# define NAN_METHOD(name) void name(_NAN_METHOD_ARGS) -# define _NAN_GETTER_ARGS const v8::PropertyCallbackInfo& args -# define NAN_GETTER(name) \ - void name(v8::Local property, _NAN_GETTER_ARGS) -# define _NAN_SETTER_ARGS const v8::PropertyCallbackInfo& args -# define NAN_SETTER(name) \ - void name( \ - v8::Local property \ - , v8::Local value \ - , _NAN_SETTER_ARGS) -# define _NAN_PROPERTY_GETTER_ARGS \ - const v8::PropertyCallbackInfo& args -# define NAN_PROPERTY_GETTER(name) \ - void name(v8::Local property \ - , _NAN_PROPERTY_GETTER_ARGS) -# define _NAN_PROPERTY_SETTER_ARGS \ - const v8::PropertyCallbackInfo& args -# define NAN_PROPERTY_SETTER(name) \ - void name( \ - v8::Local property \ - , v8::Local value \ - , _NAN_PROPERTY_SETTER_ARGS) -# define _NAN_PROPERTY_ENUMERATOR_ARGS \ - const v8::PropertyCallbackInfo& args -# define NAN_PROPERTY_ENUMERATOR(name) \ - void name(_NAN_PROPERTY_ENUMERATOR_ARGS) -# define _NAN_PROPERTY_DELETER_ARGS \ - const v8::PropertyCallbackInfo& args -# define NAN_PROPERTY_DELETER(name) \ - void name( \ - v8::Local property \ - , _NAN_PROPERTY_DELETER_ARGS) -# define _NAN_PROPERTY_QUERY_ARGS \ - const v8::PropertyCallbackInfo& args -# define NAN_PROPERTY_QUERY(name) \ - void name(v8::Local property, _NAN_PROPERTY_QUERY_ARGS) - -# define _NAN_INDEX_GETTER_ARGS \ - const v8::PropertyCallbackInfo& args -# define NAN_INDEX_GETTER(name) \ - void name(uint32_t index, _NAN_INDEX_GETTER_ARGS) -# define _NAN_INDEX_SETTER_ARGS \ - const v8::PropertyCallbackInfo& args -# define NAN_INDEX_SETTER(name) \ - void name( \ - uint32_t index \ - , v8::Local value \ - , _NAN_INDEX_SETTER_ARGS) -# define _NAN_INDEX_ENUMERATOR_ARGS \ - const v8::PropertyCallbackInfo& args -# define NAN_INDEX_ENUMERATOR(name) \ - void name(_NAN_INDEX_ENUMERATOR_ARGS) -# define _NAN_INDEX_DELETER_ARGS \ - const v8::PropertyCallbackInfo& args -# define NAN_INDEX_DELETER(name) \ - void name( \ - uint32_t index \ - , _NAN_INDEX_DELETER_ARGS) -# define _NAN_INDEX_QUERY_ARGS \ - const v8::PropertyCallbackInfo& args -# define NAN_INDEX_QUERY(name) \ - void name(uint32_t index, _NAN_INDEX_QUERY_ARGS) - -# define NanGetInternalFieldPointer(object, index) \ - object->GetAlignedPointerFromInternalField(index) -# define NanSetInternalFieldPointer(object, index, value) \ - object->SetAlignedPointerInInternalField(index, value) - -# define NAN_WEAK_CALLBACK(type, name) \ - void name( \ - v8::Isolate* isolate \ - , v8::Persistent* object \ - , type data) -# define NAN_WEAK_CALLBACK_OBJECT (*object) -# define NAN_WEAK_CALLBACK_DATA(type) ((type) data) - -# define NanScope() v8::HandleScope scope(nan_isolate) -# define NanLocker() v8::Locker locker(nan_isolate) -# define NanUnlocker() v8::Unlocker unlocker(nan_isolate) -# define NanReturnValue(value) return args.GetReturnValue().Set(value) -# define NanReturnUndefined() return -# define NanReturnNull() return args.GetReturnValue().SetNull() -# define NanReturnEmptyString() return args.GetReturnValue().SetEmptyString() -# define NanAssignPersistent(type, handle, obj) handle.Reset(nan_isolate, obj) -# define NanInitPersistent(type, name, obj) \ - v8::Persistent name(nan_isolate, obj) -# define NanObjectWrapHandle(obj) obj->handle() - -//TODO: remove <0.11.8 support when 0.12 is released -#if NODE_VERSION_AT_LEAST(0, 11, 8) -# define NanMakeWeak(handle, parameter, callback) \ - handle.MakeWeak(parameter, callback) -#else -# define NanMakeWeak(handle, parameter, callback) \ - handle.MakeWeak(nan_isolate, parameter, callback) -#endif - -# define _NAN_ERROR(fun, errmsg) fun(v8::String::New(errmsg)) - -# define _NAN_THROW_ERROR(fun, errmsg) \ - do { \ - NanScope(); \ - v8::ThrowException(_NAN_ERROR(fun, errmsg)); \ - } while (0); - - template static NAN_INLINE(v8::Local NanNewLocal( - v8::Handle val - )) { -//TODO: remove <0.11.9 support when 0.12 is released -#if NODE_VERSION_AT_LEAST(0, 11, 9) - return v8::Local::New(nan_isolate, val); -#else - return v8::Local::New(val); -#endif - } - - static NAN_INLINE(v8::Handle NanError(const char* errmsg)) { - return _NAN_ERROR(v8::Exception::Error, errmsg); - } - - static NAN_INLINE(void NanThrowError(const char* errmsg)) { - _NAN_THROW_ERROR(v8::Exception::Error, errmsg); - } - - static NAN_INLINE(void NanThrowError(v8::Handle error)) { - NanScope(); - v8::ThrowException(error); - } - - static NAN_INLINE(v8::Handle NanError( - const char *msg - , const int errorNumber - )) { - v8::Local err = v8::Exception::Error(v8::String::New(msg)); - v8::Local obj = err.As(); - obj->Set(v8::String::New("code"), v8::Int32::New(errorNumber)); - return err; - } - - static NAN_INLINE(void NanThrowError( - const char *msg - , const int errorNumber - )) { - NanThrowError(NanError(msg, errorNumber)); - } - - static NAN_INLINE(v8::Handle NanTypeError(const char* errmsg)) { - return _NAN_ERROR(v8::Exception::TypeError, errmsg); - } - - static NAN_INLINE(void NanThrowTypeError(const char* errmsg)) { - _NAN_THROW_ERROR(v8::Exception::TypeError, errmsg); - } - - static NAN_INLINE(v8::Handle NanRangeError(const char* errmsg)) { - return _NAN_ERROR(v8::Exception::RangeError, errmsg); - } - - static NAN_INLINE(void NanThrowRangeError(const char* errmsg)) { - _NAN_THROW_ERROR(v8::Exception::RangeError, errmsg); - } - - template static NAN_INLINE(void NanDispose( - v8::Persistent &handle - )) { - -//TODO: remove <0.11.8 support when 0.12 is released -#if NODE_VERSION_AT_LEAST(0, 11, 8) - handle.Reset(); -#else - handle.Dispose(nan_isolate); -#endif - handle.Clear(); - } - - static NAN_INLINE(v8::Local NanNewBufferHandle ( - char *data - , size_t length - , node::smalloc::FreeCallback callback - , void *hint - )) { - return node::Buffer::New(data, length, callback, hint); - } - - static NAN_INLINE(v8::Local NanNewBufferHandle ( - char *data - , uint32_t size - )) { - return node::Buffer::New(data, size); - } - - static NAN_INLINE(v8::Local NanNewBufferHandle (uint32_t size)) { - return node::Buffer::New(size); - } - - static NAN_INLINE(v8::Local NanBufferUse( - char* data - , uint32_t size - )) { - return node::Buffer::Use(data, size); - } - - template - static NAN_INLINE(v8::Local NanPersistentToLocal( - const v8::Persistent& persistent - )) { - if (persistent.IsWeak()) { - return v8::Local::New(nan_isolate, persistent); - } else { - return *reinterpret_cast*>( - const_cast*>(&persistent)); - } - } - - static NAN_INLINE(bool NanHasInstance( - v8::Persistent& function_template - , v8::Handle value - )) { - return NanPersistentToLocal(function_template)->HasInstance(value); - } - - static NAN_INLINE(v8::Local NanNewContextHandle( - v8::ExtensionConfiguration* extensions = NULL - , v8::Handle tmpl = v8::Handle() - , v8::Handle obj = v8::Handle() - )) { - return v8::Local::New( - nan_isolate - , v8::Context::New(nan_isolate, extensions, tmpl, obj) - ); - } - -#else -// Node 0.8 and 0.10 - -# define _NAN_METHOD_ARGS const v8::Arguments& args -# define NAN_METHOD(name) v8::Handle name(_NAN_METHOD_ARGS) -# define _NAN_GETTER_ARGS const v8::AccessorInfo &args -# define NAN_GETTER(name) \ - v8::Handle name(v8::Local property, _NAN_GETTER_ARGS) -# define _NAN_SETTER_ARGS const v8::AccessorInfo &args -# define NAN_SETTER(name) \ - void name( \ - v8::Local property \ - , v8::Local value \ - , _NAN_SETTER_ARGS) -# define _NAN_PROPERTY_GETTER_ARGS const v8::AccessorInfo& args -# define NAN_PROPERTY_GETTER(name) \ - v8::Handle name( \ - v8::Local property \ - , _NAN_PROPERTY_GETTER_ARGS) -# define _NAN_PROPERTY_SETTER_ARGS const v8::AccessorInfo& args -# define NAN_PROPERTY_SETTER(name) \ - v8::Handle name( \ - v8::Local property \ - , v8::Local value \ - , _NAN_PROPERTY_SETTER_ARGS) -# define _NAN_PROPERTY_ENUMERATOR_ARGS const v8::AccessorInfo& args -# define NAN_PROPERTY_ENUMERATOR(name) \ - v8::Handle name(_NAN_PROPERTY_ENUMERATOR_ARGS) -# define _NAN_PROPERTY_DELETER_ARGS const v8::AccessorInfo& args -# define NAN_PROPERTY_DELETER(name) \ - v8::Handle name( \ - v8::Local property \ - , _NAN_PROPERTY_DELETER_ARGS) -# define _NAN_PROPERTY_QUERY_ARGS const v8::AccessorInfo& args -# define NAN_PROPERTY_QUERY(name) \ - v8::Handle name( \ - v8::Local property \ - , _NAN_PROPERTY_QUERY_ARGS) - -# define _NAN_INDEX_GETTER_ARGS const v8::AccessorInfo& args -# define NAN_INDEX_GETTER(name) \ - v8::Handle name( \ - uint32_t index \ - , _NAN_INDEX_GETTER_ARGS) -# define _NAN_INDEX_SETTER_ARGS const v8::AccessorInfo& args -# define NAN_INDEX_SETTER(name) \ - v8::Handle name( \ - uint32_t index \ - , v8::Local value \ - , _NAN_INDEX_SETTER_ARGS) -# define _NAN_INDEX_ENUMERATOR_ARGS const v8::AccessorInfo& args -# define NAN_INDEX_ENUMERATOR(name) \ - v8::Handle name(_NAN_INDEX_ENUMERATOR_ARGS) -# define _NAN_INDEX_DELETER_ARGS const v8::AccessorInfo& args -# define NAN_INDEX_DELETER(name) \ - v8::Handle name( \ - uint32_t index \ - , _NAN_INDEX_DELETER_ARGS) -# define _NAN_INDEX_QUERY_ARGS const v8::AccessorInfo& args -# define NAN_INDEX_QUERY(name) \ - v8::Handle name( \ - uint32_t index \ - , _NAN_INDEX_QUERY_ARGS) - -# define NanGetInternalFieldPointer(object, index) \ - object->GetPointerFromInternalField(index) -# define NanSetInternalFieldPointer(object, index, value) \ - object->SetPointerInInternalField(index, value) -# define NAN_WEAK_CALLBACK(type, name) \ - void name( \ - v8::Persistent object \ - , void *data) -# define NAN_WEAK_CALLBACK_OBJECT object -# define NAN_WEAK_CALLBACK_DATA(type) ((type) data) - -# define NanScope() v8::HandleScope scope -# define NanLocker() v8::Locker locker -# define NanUnlocker() v8::Unlocker unlocker -# define NanReturnValue(value) return scope.Close(value) -# define NanReturnUndefined() return v8::Undefined() -# define NanReturnNull() return v8::Null() -# define NanReturnEmptyString() return v8::String::Empty() -# define NanInitPersistent(type, name, obj) \ - v8::Persistent name = v8::Persistent::New(obj) -# define NanAssignPersistent(type, handle, obj) \ - handle = v8::Persistent::New(obj) -# define NanObjectWrapHandle(obj) obj->handle_ -# define NanMakeWeak(handle, parameters, callback) \ - handle.MakeWeak(parameters, callback) - -# define _NAN_ERROR(fun, errmsg) \ - fun(v8::String::New(errmsg)) - -# define _NAN_THROW_ERROR(fun, errmsg) \ - do { \ - NanScope(); \ - return v8::ThrowException(_NAN_ERROR(fun, errmsg)); \ - } while (0); - - template static NAN_INLINE(v8::Local NanNewLocal( - v8::Handle val - )) { - return v8::Local::New(val); - } - - static NAN_INLINE(v8::Handle NanError(const char* errmsg)) { - return _NAN_ERROR(v8::Exception::Error, errmsg); - } - - static NAN_INLINE(v8::Handle NanThrowError(const char* errmsg)) { - _NAN_THROW_ERROR(v8::Exception::Error, errmsg); - } - - static NAN_INLINE(v8::Handle NanThrowError( - v8::Handle error - )) { - NanScope(); - return v8::ThrowException(error); - } - - static NAN_INLINE(v8::Handle NanError( - const char *msg - , const int errorNumber - )) { - v8::Local err = v8::Exception::Error(v8::String::New(msg)); - v8::Local obj = err.As(); - obj->Set(v8::String::New("code"), v8::Int32::New(errorNumber)); - return err; - } - - static NAN_INLINE(v8::Handle NanThrowError( - const char *msg - , const int errorNumber - )) { - return NanThrowError(NanError(msg, errorNumber)); - } - - static NAN_INLINE(v8::Handle NanTypeError(const char* errmsg)) { - return _NAN_ERROR(v8::Exception::TypeError, errmsg); - } - - static NAN_INLINE(v8::Handle NanThrowTypeError( - const char* errmsg - )) { - _NAN_THROW_ERROR(v8::Exception::TypeError, errmsg); - } - - static NAN_INLINE(v8::Handle NanRangeError( - const char* errmsg - )) { - return _NAN_ERROR(v8::Exception::RangeError, errmsg); - } - - static NAN_INLINE(v8::Handle NanThrowRangeError( - const char* errmsg - )) { - _NAN_THROW_ERROR(v8::Exception::RangeError, errmsg); - } - - template static NAN_INLINE(void NanDispose( - v8::Persistent &handle - )) { - handle.Dispose(); - handle.Clear(); - } - - static NAN_INLINE(v8::Local NanNewBufferHandle ( - char *data - , size_t length - , node::Buffer::free_callback callback - , void *hint - )) { - return NanNewLocal( - node::Buffer::New(data, length, callback, hint)->handle_); - } - - static NAN_INLINE(v8::Local NanNewBufferHandle ( - char *data - , uint32_t size - )) { - return NanNewLocal(node::Buffer::New(data, size)->handle_); - } - - static NAN_INLINE(v8::Local NanNewBufferHandle (uint32_t size)) { - return NanNewLocal(node::Buffer::New(size)->handle_); - } - - static NAN_INLINE(void FreeData(char *data, void *hint)) { - delete[] data; - } - - static NAN_INLINE(v8::Local NanBufferUse( - char* data - , uint32_t size - )) { - return NanNewLocal( - node::Buffer::New(data, size, FreeData, NULL)->handle_); - } - - template - static NAN_INLINE(v8::Local NanPersistentToLocal( - const v8::Persistent& persistent - )) { - if (persistent.IsWeak()) { - return NanNewLocal(persistent); - } else { - return *reinterpret_cast*>( - const_cast*>(&persistent)); - } - } - - static NAN_INLINE(bool NanHasInstance( - v8::Persistent& function_template - , v8::Handle value - )) { - return function_template->HasInstance(value); - } - - static NAN_INLINE(v8::Local NanNewContextHandle( - v8::ExtensionConfiguration* extensions = NULL - , v8::Handle tmpl = v8::Handle() - , v8::Handle obj = v8::Handle() - )) { - v8::Persistent ctx = v8::Context::New(extensions, tmpl, obj); - v8::Local lctx = NanNewLocal(ctx); - ctx.Dispose(); - return lctx; - } - -#endif // node version - -class NanCallback { - public: - NanCallback(const v8::Local &fn) { - NanScope(); - v8::Local obj = v8::Object::New(); - obj->Set(NanSymbol("callback"), fn); - NanAssignPersistent(v8::Object, handle, obj); - } - - ~NanCallback() { - if (handle.IsEmpty()) return; - handle.Dispose(); - handle.Clear(); - } - - NAN_INLINE(v8::Local GetFunction ()) { - return NanPersistentToLocal(handle)->Get(NanSymbol("callback")) - .As(); - } - - // deprecated - NAN_DEPRECATED(void Run(int argc, v8::Local argv[])) { - Call(argc, argv); - } - - void Call(int argc, v8::Local argv[]) { - NanScope(); - - v8::Local callback = NanPersistentToLocal(handle)-> - Get(NanSymbol("callback")).As(); - node::MakeCallback( - v8::Context::GetCurrent()->Global() - , callback - , argc - , argv - ); - } - - private: - v8::Persistent handle; -}; - -/* abstract */ class NanAsyncWorker { -public: - NanAsyncWorker (NanCallback *callback) : callback(callback) { - request.data = this; - errmsg = NULL; - } - - virtual ~NanAsyncWorker () { - NanScope(); - - if (!persistentHandle.IsEmpty()) - NanDispose(persistentHandle); - if (callback) - delete callback; - if (errmsg) - delete errmsg; - } - - virtual void WorkComplete () { - NanScope(); - - if (errmsg == NULL) - HandleOKCallback(); - else - HandleErrorCallback(); - delete callback; - callback = NULL; - } - - void SavePersistent(const char *key, v8::Local &obj) { - NanScope(); - - v8::Local handle = NanPersistentToLocal(persistentHandle); - handle->Set(NanSymbol(key), obj); - } - - v8::Local GetFromPersistent(const char *key) { - NanScope(); - - v8::Local handle = NanPersistentToLocal(persistentHandle); - return handle->Get(NanSymbol(key)).As(); - } - - virtual void Execute () =0; - - uv_work_t request; - -protected: - v8::Persistent persistentHandle; - NanCallback *callback; - const char *errmsg; - - virtual void HandleOKCallback () { - NanScope(); - - callback->Call(0, NULL); - }; - - virtual void HandleErrorCallback () { - NanScope(); - - v8::Local argv[] = { - v8::Exception::Error(v8::String::New(errmsg)) - }; - callback->Call(1, argv); - } -}; - -NAN_INLINE(void NanAsyncExecute (uv_work_t* req)) { - NanAsyncWorker *worker = static_cast(req->data); - worker->Execute(); -} - -NAN_INLINE(void NanAsyncExecuteComplete (uv_work_t* req)) { - NanAsyncWorker* worker = static_cast(req->data); - worker->WorkComplete(); - delete worker; -} - -NAN_INLINE(void NanAsyncQueueWorker (NanAsyncWorker* worker)) { - uv_queue_work( - uv_default_loop() - , &worker->request - , NanAsyncExecute - , (uv_after_work_cb)NanAsyncExecuteComplete - ); -} - -//// Base 64 //// - -#define _nan_base64_encoded_size(size) ((size + 2 - ((size + 2) % 3)) / 3 * 4) - -// Doesn't check for padding at the end. Can be 1-2 bytes over. -static NAN_INLINE(size_t _nan_base64_decoded_size_fast(size_t size)) { - size_t remainder = size % 4; - - size = (size / 4) * 3; - if (remainder) { - if (size == 0 && remainder == 1) { - // special case: 1-byte input cannot be decoded - size = 0; - } else { - // non-padded input, add 1 or 2 extra bytes - size += 1 + (remainder == 3); - } - } - - return size; -} - -template -static NAN_INLINE(size_t _nan_base64_decoded_size( - const TypeName* src - , size_t size -)) { - if (size == 0) - return 0; - - if (src[size - 1] == '=') - size--; - if (size > 0 && src[size - 1] == '=') - size--; - - return _nan_base64_decoded_size_fast(size); -} - -// supports regular and URL-safe base64 -static const int _nan_unbase64_table[] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, -2, -1, -1 - , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - , -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, 62, -1, 63 - , 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1 - , -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 - , 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, 63 - , -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 - , 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 - , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -}; - -#define _nan_unbase64(x) _nan_unbase64_table[(uint8_t)(x)] - -template static size_t _nan_base64_decode( - char* buf - , size_t len - , const TypeName* src - , const size_t srcLen -) { - char* dst = buf; - char* dstEnd = buf + len; - const TypeName* srcEnd = src + srcLen; - - while (src < srcEnd && dst < dstEnd) { - int remaining = srcEnd - src; - char a, b, c, d; - - while (_nan_unbase64(*src) < 0 && src < srcEnd) src++, remaining--; - if (remaining == 0 || *src == '=') break; - a = _nan_unbase64(*src++); - - while (_nan_unbase64(*src) < 0 && src < srcEnd) src++, remaining--; - if (remaining <= 1 || *src == '=') break; - b = _nan_unbase64(*src++); - - *dst++ = (a << 2) | ((b & 0x30) >> 4); - if (dst == dstEnd) break; - - while (_nan_unbase64(*src) < 0 && src < srcEnd) src++, remaining--; - if (remaining <= 2 || *src == '=') break; - c = _nan_unbase64(*src++); - - *dst++ = ((b & 0x0F) << 4) | ((c & 0x3C) >> 2); - if (dst == dstEnd) break; - - while (_nan_unbase64(*src) < 0 && src < srcEnd) src++, remaining--; - if (remaining <= 3 || *src == '=') break; - d = _nan_unbase64(*src++); - - *dst++ = ((c & 0x03) << 6) | (d & 0x3F); - } - - return dst - buf; -} - -//// HEX //// - -template unsigned _nan_hex2bin(TypeName c) { - if (c >= '0' && c <= '9') return c - '0'; - if (c >= 'A' && c <= 'F') return 10 + (c - 'A'); - if (c >= 'a' && c <= 'f') return 10 + (c - 'a'); - return static_cast(-1); -} - -template static size_t _nan_hex_decode( - char* buf - , size_t len - , const TypeName* src - , const size_t srcLen -) { - size_t i; - for (i = 0; i < len && i * 2 + 1 < srcLen; ++i) { - unsigned a = _nan_hex2bin(src[i * 2 + 0]); - unsigned b = _nan_hex2bin(src[i * 2 + 1]); - if (!~a || !~b) return i; - buf[i] = a * 16 + b; - } - - return i; -} - -static bool _NanGetExternalParts( - v8::Handle val - , const char** data - , size_t* len -) { - if (node::Buffer::HasInstance(val)) { - *data = node::Buffer::Data(val.As()); - *len = node::Buffer::Length(val.As()); - return true; - } - - assert(val->IsString()); - v8::Local str = NanNewLocal(val.As()); - - if (str->IsExternalAscii()) { - const v8::String::ExternalAsciiStringResource* ext; - ext = str->GetExternalAsciiStringResource(); - *data = ext->data(); - *len = ext->length(); - return true; - - } else if (str->IsExternal()) { - const v8::String::ExternalStringResource* ext; - ext = str->GetExternalStringResource(); - *data = reinterpret_cast(ext->data()); - *len = ext->length(); - return true; - } - - return false; -} - -namespace Nan { - enum Encoding {ASCII, UTF8, BASE64, UCS2, BINARY, HEX, BUFFER}; -} - -static NAN_INLINE(char* NanFromV8String( - v8::Handle from - , enum Nan::Encoding encoding = Nan::UTF8 - , size_t *datalen = NULL - , char *buf = NULL - , size_t buflen = 0 - , int flags = - v8::String::NO_NULL_TERMINATION | v8::String::HINT_MANY_WRITES_EXPECTED -)) { - NanScope(); - - size_t sz_; - size_t term_len = !(flags & v8::String::NO_NULL_TERMINATION); - char *data = NULL; - size_t len; - bool is_extern = _NanGetExternalParts( - from - , const_cast(&data) - , &len); - - if (is_extern && !term_len) { - NanSetPointerSafe(datalen, len); - return data; - } - - v8::Local toStr = from->ToString(); - - char *to = buf; - - v8::String::AsciiValue value(toStr); - switch(encoding) { - case Nan::ASCII: -#if NODE_MODULE_VERSION < 0x0C - sz_ = toStr->Length(); - if (to == NULL) { - to = new char[sz_ + term_len]; - } else { - assert(buflen >= sz_ + term_len && "too small buffer"); - } - NanSetPointerSafe( - datalen - , toStr->WriteAscii(to, 0, sz_ + term_len, flags)); - return to; -#endif - case Nan::BINARY: - case Nan::BUFFER: - sz_ = toStr->Length(); - if (to == NULL) { - to = new char[sz_ + term_len]; - } else { - assert(buflen >= sz_ + term_len && "too small buffer"); - } -#if NODE_MODULE_VERSION < 0x0C - // TODO(isaacs): THIS IS AWFUL!!! - // AGREE(kkoopa) - { - uint16_t* twobytebuf = new uint16_t[sz_ + term_len]; - - size_t len = toStr->Write(twobytebuf, 0, sz_ + term_len, flags); - - for (size_t i = 0; i < sz_ + term_len && i < len + term_len; i++) { - unsigned char *b = reinterpret_cast(&twobytebuf[i]); - to[i] = *b; - } - - NanSetPointerSafe(datalen, len); - - delete[] twobytebuf; - return to; - } -#else - NanSetPointerSafe( - datalen, - toStr->WriteOneByte( - reinterpret_cast(to) - , 0 - , sz_ + term_len - , flags)); - return to; -#endif - case Nan::UTF8: - sz_ = toStr->Utf8Length(); - if (to == NULL) { - to = new char[sz_ + term_len]; - } else { - assert(buflen >= sz_ + term_len && "too small buffer"); - } - NanSetPointerSafe( - datalen - , toStr->WriteUtf8(to, sz_ + term_len, NULL, flags) - term_len); - return to; - case Nan::BASE64: - sz_ = _nan_base64_decoded_size(*value, toStr->Length()); - if (to == NULL) { - to = new char[sz_ + term_len]; - } else { - assert(buflen >= sz_ + term_len); - } - NanSetPointerSafe( - datalen - , _nan_base64_decode(to, sz_, *value, value.length())); - if (term_len) { - to[sz_] = '\0'; - } - return to; - case Nan::UCS2: - { - sz_ = toStr->Length(); - if (to == NULL) { - to = new char[(sz_ + term_len) * 2]; - } else { - assert(buflen >= (sz_ + term_len) * 2 && "too small buffer"); - } - - int bc = 2 * toStr->Write( - reinterpret_cast(to) - , 0 - , sz_ + term_len - , flags); - NanSetPointerSafe(datalen, bc); - return to; - } - case Nan::HEX: - sz_ = toStr->Length(); - assert(!(sz_ & 1) && "bad hex data"); - if (to == NULL) { - to = new char[sz_ / 2 + term_len]; - } else { - assert(buflen >= sz_ / 2 + term_len && "too small buffer"); - } - - NanSetPointerSafe( - datalen - , _nan_hex_decode(to, sz_ / 2, *value, value.length())); - if (term_len) { - to[sz_ / 2] = '\0'; - } - return to; - default: - assert(0 && "unknown encoding"); - } - return to; -} - -#endif diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/package.json deleted file mode 100644 index 0fcadc05..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/nan/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "nan", - "version": "0.6.0", - "description": "Native Abstractions for Node.js: C++ header for Node 0.8->0.12 compatibility", - "main": "include_dirs.js", - "repository": { - "type": "git", - "url": "git://github.com/rvagg/nan.git" - }, - "contributors": [ - { - "name": "Rod Vagg", - "email": "r@va.gg", - "url": "https://github.com/rvagg" - }, - { - "name": "Benjamin Byholm", - "email": "bbyholm@abo.fi", - "url": "https://github.com/kkoopa/" - }, - { - "name": "Trevor Norris", - "email": "trev.norris@gmail.com", - "url": "https://github.com/trevnorris" - }, - { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net", - "url": "https://github.com/TooTallNate" - } - ], - "license": "MIT", - "readme": "Native Abstractions for Node.js\n===============================\n\n**A header file filled with macro and utility goodness for making add-on development for Node.js easier across versions 0.8, 0.10 and 0.11, and eventually 0.12.**\n\n***Current version: 0.6.0*** *(See [nan.h](https://github.com/rvagg/nan/blob/master/nan.h) for complete ChangeLog)*\n\n[![NPM](https://nodei.co/npm/nan.png?downloads=true)](https://nodei.co/npm/nan/) [![NPM](https://nodei.co/npm-dl/nan.png?months=6)](https://nodei.co/npm/nan/)\n\nThanks to the crazy changes in V8 (and some in Node core), keeping native addons compiling happily across versions, particularly 0.10 to 0.11/0.12, is a minor nightmare. The goal of this project is to store all logic necessary to develop native Node.js addons without having to inspect `NODE_MODULE_VERSION` and get yourself into a macro-tangle.\n\nThis project also contains some helper utilities that make addon development a bit more pleasant.\n\n * **[News & Updates](#news)**\n * **[Usage](#usage)**\n * **[Example](#example)**\n * **[API](#api)**\n\n\n## News & Updates\n\n### Nov-2013: Node 0.11.9+ breaking V8 change\n\nThe version of V8 that's shipping with Node 0.11.9+ has changed the signature for new `Local`s to: `v8::Local::New(isolate, value)`, i.e. introducing the `isolate` argument and therefore breaking all new `Local` declarations for previous versions. NAN 0.6+ now includes a `NanNewLocal(value)` that can be used in place to work around this incompatibility and maintain compatibility with 0.8->0.11.9+ (minus a few early 0.11 releases).\n\nFor example, if you wanted to return a `null` on a callback you will have to change the argument from `v8::Local::New(v8::Null())` to `NanNewLocal(v8::Null())`.\n\n### Nov-2013: Change to binding.gyp `\"include_dirs\"` for NAN\n\nInclusion of NAN in a project's binding.gyp is now greatly simplified. You can now just use `\"\n## Usage\n\nSimply add **NAN** as a dependency in the *package.json* of your Node addon:\n\n``` bash\n$ npm install --save nan\n```\n\nPull in the path to **NAN** in your *binding.gyp* so that you can use `#include \"nan.h\"` in your *.cpp* files:\n\n``` python\n\"include_dirs\" : [\n \"` when compiling your addon.\n\n\n## Example\n\nSee **[LevelDOWN](https://github.com/rvagg/node-leveldown/pull/48)** for a full example of **NAN** in use.\n\nFor a simpler example, see the **[async pi estimation example](https://github.com/rvagg/nan/tree/master/examples/async_pi_estimate)** in the examples directory for full code and an explanation of what this Monte Carlo Pi estimation example does. Below are just some parts of the full example that illustrate the use of **NAN**.\n\nCompare to the current 0.10 version of this example, found in the [node-addon-examples](https://github.com/rvagg/node-addon-examples/tree/master/9_async_work) repository and also a 0.11 version of the same found [here](https://github.com/kkoopa/node-addon-examples/tree/5c01f58fc993377a567812597e54a83af69686d7/9_async_work).\n\nNote that there is no embedded version sniffing going on here and also the async work is made much simpler, see below for details on the `NanAsyncWorker` class.\n\n```c++\n// addon.cc\n#include \n#include \"nan.h\"\n// ...\n\nusing namespace v8;\n\nvoid InitAll(Handle exports) {\n exports->Set(NanSymbol(\"calculateSync\"),\n FunctionTemplate::New(CalculateSync)->GetFunction());\n\n exports->Set(NanSymbol(\"calculateAsync\"),\n FunctionTemplate::New(CalculateAsync)->GetFunction());\n}\n\nNODE_MODULE(addon, InitAll)\n```\n\n```c++\n// sync.h\n#include \n#include \"nan.h\"\n\nNAN_METHOD(CalculateSync);\n```\n\n```c++\n// sync.cc\n#include \n#include \"nan.h\"\n#include \"sync.h\"\n// ...\n\nusing namespace v8;\n\n// Simple synchronous access to the `Estimate()` function\nNAN_METHOD(CalculateSync) {\n NanScope();\n\n // expect a number as the first argument\n int points = args[0]->Uint32Value();\n double est = Estimate(points);\n\n NanReturnValue(Number::New(est));\n}\n```\n\n```c++\n// async.cc\n#include \n#include \"nan.h\"\n#include \"async.h\"\n\n// ...\n\nusing namespace v8;\n\nclass PiWorker : public NanAsyncWorker {\n public:\n PiWorker(NanCallback *callback, int points)\n : NanAsyncWorker(callback), points(points) {}\n ~PiWorker() {}\n\n // Executed inside the worker-thread.\n // It is not safe to access V8, or V8 data structures\n // here, so everything we need for input and output\n // should go on `this`.\n void Execute () {\n estimate = Estimate(points);\n }\n\n // Executed when the async work is complete\n // this function will be run inside the main event loop\n // so it is safe to use V8 again\n void HandleOKCallback () {\n NanScope();\n\n Local argv[] = {\n Local::New(Null())\n , Number::New(estimate)\n };\n\n callback->Call(2, argv);\n };\n\n private:\n int points;\n double estimate;\n};\n\n// Asynchronous access to the `Estimate()` function\nNAN_METHOD(CalculateAsync) {\n NanScope();\n\n int points = args[0]->Uint32Value();\n NanCallback *callback = new NanCallback(args[1].As());\n\n NanAsyncQueueWorker(new PiWorker(callback, points));\n NanReturnUndefined();\n}\n```\n\n\n## API\n\n * NAN_METHOD\n * NAN_GETTER\n * NAN_SETTER\n * NAN_PROPERTY_GETTER\n * NAN_PROPERTY_SETTER\n * NAN_PROPERTY_ENUMERATOR\n * NAN_PROPERTY_DELETER\n * NAN_PROPERTY_QUERY\n * NAN_INDEX_GETTER\n * NAN_INDEX_SETTER\n * NAN_INDEX_ENUMERATOR\n * NAN_INDEX_DELETER\n * NAN_INDEX_QUERY\n * NAN_WEAK_CALLBACK\n * NAN_DEPRECATED\n * NAN_INLINE \n * NanNewLocal\n * NanReturnValue\n * NanReturnUndefined\n * NanReturnNull\n * NanReturnEmptyString\n * NanScope\n * NanLocker\n * NanUnlocker\n * NanGetInternalFieldPointer\n * NanSetInternalFieldPointer\n * NanObjectWrapHandle\n * NanMakeWeak\n * NanSymbol\n * NanGetPointerSafe\n * NanSetPointerSafe\n * NanFromV8String\n * NanBooleanOptionValue\n * NanUInt32OptionValue\n * NanError, NanTypeError, NanRangeError\n * NanThrowError, NanThrowTypeError, NanThrowRangeError, NanThrowError(Handle), NanThrowError(Handle, int)\n * NanNewBufferHandle(char *, size_t, FreeCallback, void *), NanNewBufferHandle(char *, uint32_t), NanNewBufferHandle(uint32_t)\n * NanBufferUse(char *, uint32_t)\n * NanNewContextHandle\n * NanHasInstance\n * NanPersistentToLocal\n * NanDispose\n * NanAssignPersistent\n * NanInitPersistent\n * NanCallback\n * NanAsyncWorker\n * NanAsyncQueueWorker\n\n\n### NAN_METHOD(methodname)\n\nUse `NAN_METHOD` to define your V8 accessible methods:\n\n```c++\n// .h:\nclass Foo : public node::ObjectWrap {\n ...\n\n static NAN_METHOD(Bar);\n static NAN_METHOD(Baz);\n}\n\n\n// .cc:\nNAN_METHOD(Foo::Bar) {\n ...\n}\n\nNAN_METHOD(Foo::Baz) {\n ...\n}\n```\n\nThe reason for this macro is because of the method signature change in 0.11:\n\n```c++\n// 0.10 and below:\nHandle name(const Arguments& args)\n\n// 0.11 and above\nvoid name(const FunctionCallbackInfo& args)\n```\n\nThe introduction of `FunctionCallbackInfo` brings additional complications:\n\n\n### NAN_GETTER(methodname)\n\nUse `NAN_GETTER` to declare your V8 accessible getters. You get a `Local` `property` and an appropriately typed `args` object that can act like the `args` argument to a `NAN_METHOD` call.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_GETTER`.\n\n\n### NAN_SETTER(methodname)\n\nUse `NAN_SETTER` to declare your V8 accessible setters. Same as `NAN_GETTER` but you also get a `Local` `value` object to work with.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_SETTER`.\n\n\n### NAN_PROPERTY_GETTER(cbname)\nUse `NAN_PROPERTY_GETTER` to declare your V8 accessible property getters. You get a `Local` `property` and an appropriately typed `args` object that can act similar to the `args` argument to a `NAN_METHOD` call.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_GETTER`.\n\n\n### NAN_PROPERTY_SETTER(cbname)\nUse `NAN_PROPERTY_SETTER` to declare your V8 accessible property setters. Same as `NAN_PROPERTY_GETTER` but you also get a `Local` `value` object to work with.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_SETTER`.\n\n\n### NAN_PROPERTY_ENUMERATOR(cbname)\nUse `NAN_PROPERTY_ENUMERATOR` to declare your V8 accessible property enumerators. You get an appropriately typed `args` object like the `args` argument to a `NAN_PROPERTY_GETTER` call.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_ENUMERATOR`.\n\n\n### NAN_PROPERTY_DELETER(cbname)\nUse `NAN_PROPERTY_DELETER` to declare your V8 accessible property deleters. Same as `NAN_PROPERTY_GETTER`.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_DELETER`.\n\n\n### NAN_PROPERTY_QUERY(cbname)\nUse `NAN_PROPERTY_QUERY` to declare your V8 accessible property queries. Same as `NAN_PROPERTY_GETTER`.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_QUERY`.\n\n\n### NAN_INDEX_GETTER(cbname)\nUse `NAN_INDEX_GETTER` to declare your V8 accessible index getters. You get a `uint32_t` `index` and an appropriately typed `args` object that can act similar to the `args` argument to a `NAN_METHOD` call.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_INDEX_GETTER`.\n\n\n### NAN_INDEX_SETTER(cbname)\nUse `NAN_INDEX_SETTER` to declare your V8 accessible index setters. Same as `NAN_INDEX_GETTER` but you also get a `Local` `value` object to work with.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_INDEX_SETTER`.\n\n\n### NAN_INDEX_ENUMERATOR(cbname)\nUse `NAN_INDEX_ENUMERATOR` to declare your V8 accessible index enumerators. You get an appropriately typed `args` object like the `args` argument to a `NAN_INDEX_GETTER` call.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_INDEX_ENUMERATOR`.\n\n\n### NAN_INDEX_DELETER(cbname)\nUse `NAN_INDEX_DELETER` to declare your V8 accessible index deleters. Same as `NAN_INDEX_GETTER`.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_INDEX_DELETER`.\n\n\n### NAN_INDEX_QUERY(cbname)\nUse `NAN_INDEX_QUERY` to declare your V8 accessible index queries. Same as `NAN_INDEX_GETTER`.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_INDEX_QUERY`.\n\n\n### NAN_WEAK_CALLBACK(type, cbname)\n\nUse `NAN_WEAK_CALLBACK` to declare your V8 WeakReference callbacks. There is an object argument accessible through `NAN_WEAK_CALLBACK_OBJECT`. The `type` argument gives the type of the `data` argument, accessible through `NAN_WEAK_CALLBACK_DATA(type)`.\n\n```c++\nstatic NAN_WEAK_CALLBACK(BufferReference*, WeakCheck) {\n if (NAN_WEAK_CALLBACK_DATA(BufferReference*)->noLongerNeeded_) {\n delete NAN_WEAK_CALLBACK_DATA(BufferReference*);\n } else {\n // Still in use, revive, prevent GC\n NanMakeWeak(NAN_WEAK_CALLBACK_OBJECT, NAN_WEAK_CALLBACK_DATA(BufferReference*), &WeakCheck);\n }\n}\n```\n\n\n### NAN_DEPRECATED(declarator)\nDeclares a function as deprecated. Identical to `V8_DEPRECATED`.\n\n```c++\nstatic NAN_DEPRECATED(NAN_METHOD(foo)) {\n ...\n}\n```\n\n\n### NAN_INLINE(declarator)\nInlines a function. Identical to `V8_INLINE`.\n\n```c++\nstatic NAN_INLINE(int foo(int bar)) {\n ...\n}\n```\n\n\n### NanNewLocal<T>(Handle<Value>)\n\nUse `NanNewLocal` in place of `v8::Local::New(...)` as this function\nrequires an `isolate` argument in recent versions of V8 but not in older versions.\n\n```c++\nNanNewLocal(v8::Null())\n```\n\n\n### NanReturnValue(Handle<Value>)\n\nUse `NanReturnValue` when you want to return a value from your V8 accessible method:\n\n```c++\nNAN_METHOD(Foo::Bar) {\n ...\n\n NanReturnValue(String::New(\"FooBar!\"));\n}\n```\n\nNo `return` statement required.\n\n\n### NanReturnUndefined()\n\nUse `NanReturnUndefined` when you don't want to return anything from your V8 accessible method:\n\n```c++\nNAN_METHOD(Foo::Baz) {\n ...\n\n NanReturnUndefined();\n}\n```\n\n\n### NanReturnNull()\n\nUse `NanReturnNull` when you want to return `Null` from your V8 accessible method:\n\n```c++\nNAN_METHOD(Foo::Baz) {\n ...\n\n NanReturnNull();\n}\n```\n\n\n### NanReturnEmptyString()\n\nUse `NanReturnEmptyString` when you want to return an empty `String` from your V8 accessible method:\n\n```c++\nNAN_METHOD(Foo::Baz) {\n ...\n\n NanReturnEmptyString();\n}\n```\n\n\n### NanScope()\n\nThe introduction of `isolate` references for many V8 calls in Node 0.11 makes `NanScope()` necessary, use it in place of `HandleScope scope`:\n\n```c++\nNAN_METHOD(Foo::Bar) {\n NanScope();\n\n NanReturnValue(String::New(\"FooBar!\"));\n}\n```\n\n\n### NanLocker()\n\nThe introduction of `isolate` references for many V8 calls in Node 0.11 makes `NanLocker()` necessary, use it in place of `Locker locker`:\n\n```c++\nNAN_METHOD(Foo::Bar) {\n NanLocker();\n ...\n NanUnlocker();\n}\n```\n\n\n### NanUnlocker()\n\nThe introduction of `isolate` references for many V8 calls in Node 0.11 makes `NanUnlocker()` necessary, use it in place of `Unlocker unlocker`:\n\n```c++\nNAN_METHOD(Foo::Bar) {\n NanLocker();\n ...\n NanUnlocker();\n}\n```\n\n\n### void * NanGetInternalFieldPointer(Handle<Object>, int)\n\nGets a pointer to the internal field with at `index` from a V8 `Object` handle.\n\n```c++\nLocal obj;\n...\nNanGetInternalFieldPointer(obj, 0);\n```\n\n### void NanSetInternalFieldPointer(Handle<Object>, int, void *)\n\nSets the value of the internal field at `index` on a V8 `Object` handle.\n\n```c++\nstatic Persistent dataWrapperCtor;\n...\nLocal wrapper = NanPersistentToLocal(dataWrapperCtor)->NewInstance();\nNanSetInternalFieldPointer(wrapper, 0, this);\n```\n\n\n### Local<Object> NanObjectWrapHandle(Object)\n\nWhen you want to fetch the V8 object handle from a native object you've wrapped with Node's `ObjectWrap`, you should use `NanObjectWrapHandle`:\n\n```c++\nNanObjectWrapHandle(iterator)->Get(String::NewSymbol(\"end\"))\n```\n\n\n### NanMakeWeak(Persistent<T>, parameter, callback)\n\nMake a persistent reference weak.\n\n\n### String NanSymbol(char *)\n\nThis isn't strictly about compatibility, it's just an easier way to create string symbol objects (i.e. `String::NewSymbol(x)`), for getting and setting object properties, or names of objects.\n\n```c++\nbool foo = false;\nif (obj->Has(NanSymbol(\"foo\")))\n foo = optionsObj->Get(NanSymbol(\"foo\"))->BooleanValue()\n```\n\n\n### Type NanGetPointerSafe(Type *[, Type])\n\nA helper for getting values from optional pointers. If the pointer is `NULL`, the function returns the optional default value, which defaults to `0`. Otherwise, the function returns the value the pointer points to.\n\n```c++\nchar *plugh(uint32_t *optional) {\n char res[] = \"xyzzy\";\n uint32_t param = NanGetPointerSafe(optional, 0x1337);\n switch (param) {\n ...\n }\n NanSetPointerSafe(optional, 0xDEADBEEF);\n} \n```\n\n\n### bool NanSetPointerSafe(Type *, Type)\n\nA helper for setting optional argument pointers. If the pointer is `NULL`, the function simply return `false`. Otherwise, the value is assigned to the variable the pointer points to.\n\n```c++\nconst char *plugh(size_t *outputsize) {\n char res[] = \"xyzzy\";\n if !(NanSetPointerSafe(outputsize, strlen(res) + 1)) {\n ...\n }\n\n ...\n}\n```\n\n\n### char* NanFromV8String(Handle<Value>[, enum Nan::Encoding, size_t *, char *, size_t, int])\n\nWhen you want to convert a V8 `String` to a `char*` use `NanFromV8String`. It is possible to define an encoding that defaults to `Nan::UTF8` as well as a pointer to a variable that will be assigned the number of bytes in the returned string. It is also possible to supply a buffer and its length to the function in order not to have a new buffer allocated. The final argument allows optionally setting `String::WriteOptions`, which default to `String::HINT_MANY_WRITES_EXPECTED | String::NO_NULL_TERMINATION`.\nJust remember that you'll end up with an object that you'll need to `delete[]` at some point unless you supply your own buffer:\n\n```c++\nsize_t count;\nchar* name = NanFromV8String(args[0]);\nchar* decoded = NanFromV8String(args[1], Nan::BASE64, &count, NULL, 0, String::HINT_MANY_WRITES_EXPECTED);\nchar param_copy[count];\nmemcpy(param_copy, decoded, count);\ndelete[] decoded;\n```\n\n\n### bool NanBooleanOptionValue(Handle<Value>, Handle<String>[, bool])\n\nWhen you have an \"options\" object that you need to fetch properties from, boolean options can be fetched with this pair. They check first if the object exists (`IsEmpty`), then if the object has the given property (`Has`) then they get and convert/coerce the property to a `bool`.\n\nThe optional last parameter is the *default* value, which is `false` if left off:\n\n```c++\n// `foo` is false unless the user supplies a truthy value for it\nbool foo = NanBooleanOptionValue(optionsObj, NanSymbol(\"foo\"));\n// `bar` is true unless the user supplies a falsy value for it\nbool bar = NanBooleanOptionValueDefTrue(optionsObj, NanSymbol(\"bar\"), true);\n```\n\n\n### uint32_t NanUInt32OptionValue(Handle<Value>, Handle<String>, uint32_t)\n\nSimilar to `NanBooleanOptionValue`, use `NanUInt32OptionValue` to fetch an integer option from your options object. Can be any kind of JavaScript `Number` and it will be coerced to an unsigned 32-bit integer.\n\nRequires all 3 arguments as a default is not optional:\n\n```c++\nuint32_t count = NanUInt32OptionValue(optionsObj, NanSymbol(\"count\"), 1024);\n```\n\n\n### NanError(message), NanTypeError(message), NanRangeError(message)\n\nFor making `Error`, `TypeError` and `RangeError` objects.\n\n```c++\nLocal res = NanError(\"you must supply a callback argument\");\n```\n\n\n### NanThrowError(message), NanThrowTypeError(message), NanThrowRangeError(message), NanThrowError(Local<Value>), NanThrowError(Local<Value>, int)\n\nFor throwing `Error`, `TypeError` and `RangeError` objects. You should `return` this call:\n\n```c++\nreturn NanThrowError(\"you must supply a callback argument\");\n```\n\nCan also handle any custom object you may want to throw. If used with the error code argument, it will add the supplied error code to the error object as a property called `code`.\n\n\n### Local<Object> NanNewBufferHandle(char *, uint32_t), Local<Object> NanNewBufferHandle(uint32_t)\n\nThe `Buffer` API has changed a little in Node 0.11, this helper provides consistent access to `Buffer` creation:\n\n```c++\nNanNewBufferHandle((char*)value.data(), value.size());\n```\n\nCan also be used to initialize a `Buffer` with just a `size` argument.\n\nCan also be supplied with a `NAN_WEAK_CALLBACK` and a hint for the garbage collector, when dealing with weak references.\n\n\n### Local<Object> NanBufferUse(char*, uint32_t)\n\n`Buffer::New(char*, uint32_t)` prior to 0.11 would make a copy of the data.\nWhile it was possible to get around this, it required a shim by passing a\ncallback. So the new API `Buffer::Use(char*, uint32_t)` was introduced to remove\nneeding to use this shim.\n\n`NanBufferUse` uses the `char*` passed as the backing data, and will free the\nmemory automatically when the weak callback is called. Keep this in mind, as\ncareless use can lead to \"double free or corruption\" and other cryptic failures.\n\n\n### bool NanHasInstance(Persistent<FunctionTemplate>&, Handle<Value>)\n\nCan be used to check the type of an object to determine it is of a particular class you have already defined and have a `Persistent` handle for.\n\n\n### Local<Type> NanPersistentToLocal(Persistent<Type>&)\n\nAside from `FunctionCallbackInfo`, the biggest and most painful change to V8 in Node 0.11 is the many restrictions now placed on `Persistent` handles. They are difficult to assign and difficult to fetch the original value out of.\n\nUse `NanPersistentToLocal` to convert a `Persistent` handle back to a `Local` handle.\n\n```c++\nLocal handle = NanPersistentToLocal(persistentHandle);\n```\n\n\n### Local<Context> NanNewContextHandle([ExtensionConfiguration*, Handle<ObjectTemplate>, Handle<Value>])\nCreates a new `Local` handle.\n\n```c++\nLocal ftmpl = FunctionTemplate::New();\nLocal otmpl = ftmpl->InstanceTemplate();\nLocal ctx = NanNewContextHandle(NULL, otmpl);\n```\n\n\n### void NanDispose(Persistent<T> &)\n\nUse `NanDispose` to dispose a `Persistent` handle.\n\n```c++\nNanDispose(persistentHandle);\n```\n\n\n### NanAssignPersistent(type, handle, object)\n\nUse `NanAssignPersistent` to assign a non-`Persistent` handle to a `Persistent` one. You can no longer just declare a `Persistent` handle and assign directly to it later, you have to `Reset` it in Node 0.11, so this makes it easier.\n\nIn general it is now better to place anything you want to protect from V8's garbage collector as properties of a generic `Object` and then assign that to a `Persistent`. This works in older versions of Node also if you use `NanAssignPersistent`:\n\n```c++\nPersistent persistentHandle;\n\n...\n\nLocal obj = Object::New();\nobj->Set(NanSymbol(\"key\"), keyHandle); // where keyHandle might be a Local\nNanAssignPersistent(Object, persistentHandle, obj)\n```\n\n\n### NanInitPersistent(type, name, object)\n\nUser `NanInitPersistent` to declare and initialize a new `Persistent` with the supplied object. The assignment operator for `Persistent` is no longer public in Node 0.11, so this macro makes it easier to declare and initializing a new `Persistent`. See NanAssignPersistent for more information.\n\n```c++\nLocal obj = Object::New();\nobj->Set(NanSymbol(\"key\"), keyHandle); // where keyHandle might be a Local\nNanInitPersistent(Object, persistentHandle, obj);\n```\n\n\n### NanCallback\n\nBecause of the difficulties imposed by the changes to `Persistent` handles in V8 in Node 0.11, creating `Persistent` versions of your `Local` handles is annoyingly tricky. `NanCallback` makes it easier by taking your `Local` handle, making it persistent until the `NanCallback` is deleted and even providing a handy `Call()` method to fetch and execute the callback `Function`.\n\n```c++\nLocal callbackHandle = args[0].As();\nNanCallback *callback = new NanCallback(callbackHandle);\n// pass `callback` around and it's safe from GC until you:\ndelete callback;\n```\n\nYou can execute the callback like so:\n\n```c++\n// no arguments:\ncallback->Call(0, NULL);\n\n// an error argument:\nLocal argv[] = {\n Exception::Error(String::New(\"fail!\"))\n};\ncallback->Call(1, argv);\n\n// a success argument:\nLocal argv[] = {\n Local::New(Null()),\n String::New(\"w00t!\")\n};\ncallback->Call(2, argv);\n```\n\n`NanCallback` also has a `Local GetCallback()` method that you can use to fetch a local handle to the underlying callback function if you need it.\n\n\n### NanAsyncWorker\n\n`NanAsyncWorker` is an abstract class that you can subclass to have much of the annoying async queuing and handling taken care of for you. It can even store arbitrary V8 objects for you and have them persist while the async work is in progress.\n\nSee a rough outline of the implementation:\n\n```c++\nclass NanAsyncWorker {\npublic:\n NanAsyncWorker (NanCallback *callback);\n\n // Clean up persistent handles and delete the *callback\n virtual ~NanAsyncWorker ();\n\n // Check the `char *errmsg` property and call HandleOKCallback()\n // or HandleErrorCallback depending on whether it has been set or not\n virtual void WorkComplete ();\n\n // You must implement this to do some async work. If there is an\n // error then allocate `errmsg` to to a message and the callback will\n // be passed that string in an Error object\n virtual void Execute ();\n\n // Save a V8 object in a Persistent handle to protect it from GC\n void SavePersistent(const char *key, Local &obj);\n\n // Fetch a stored V8 object (don't call from within `Execute()`)\n Local GetFromPersistent(const char *key);\n\nprotected:\n // Set this if there is an error, otherwise it's NULL\n const char *errmsg;\n\n // Default implementation calls the callback function with no arguments.\n // Override this to return meaningful data\n virtual void HandleOKCallback ();\n\n // Default implementation calls the callback function with an Error object\n // wrapping the `errmsg` string\n virtual void HandleErrorCallback ();\n};\n```\n\n\n### NanAsyncQueueWorker(NanAsyncWorker *)\n\n`NanAsyncQueueWorker` will run a `NanAsyncWorker` asynchronously via libuv. Both the *execute* and *after_work* steps are taken care of for you—most of the logic for this is embedded in `NanAsyncWorker`.\n\n### Contributors\n\nNAN is only possible due to the excellent work of the following contributors:\n\n\n\n\n\n\n
      Rod VaggGitHub/rvaggTwitter/@rvagg
      Benjamin ByholmGitHub/kkoopa
      Trevor NorrisGitHub/trevnorrisTwitter/@trevnorris
      Nathan RajlichGitHub/TooTallNateTwitter/@TooTallNate
      \n\nLicence & copyright\n-----------------------\n\nCopyright (c) 2013 NAN contributors (listed above).\n\nNative Abstractions for Node.js is licensed under an MIT +no-false-attribs license. 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/nan/issues" - }, - "homepage": "https://github.com/rvagg/nan", - "_id": "nan@0.6.0", - "_from": "nan@~0.6.0" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/LICENSE deleted file mode 100644 index 2a408130..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2012 Yuan Chuan - -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-sass/node_modules/node-sass/node_modules/node-watch/README.md b/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/README.md deleted file mode 100644 index 6ea31bd5..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/README.md +++ /dev/null @@ -1,74 +0,0 @@ -#Node-watch -A [fs.watch](http://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener) wrapper to watch files or directories(recursively by default). - - -### Installation - -```bash -npm install node-watch -``` - -### Example - -```js -var watch = require('node-watch'); - -watch('somedir_or_somefile', function(filename) { - console.log(filename, ' changed.'); -}); -``` - -### Why fs.watch wrapper - -* Some editors will generate temporary files which will cause the callback function to be triggered multiple times. -* when watching a single file the callback function will only be triggered one time and then is seem to be unwatched. -* Missing an option to watch a directory recursively. - - -### The difference -This module **currently** does not differentiate event like `rename` or `delete`. Once there is a change, the callback function will be triggered. - - -### Options - -`recursive`:Watch it recursively or not (defaults to **true**). - -`followSymLinks`: Follow symbolic links or not (defaults to **false**). - -`maxSymLevel`: The max number of following symbolic links, in order to prevent circular links (defaults to **1**). - - -```js -watch('somedir', { recursive: false, followSymLinks: true }, function(filename) { - console.log(filename, ' changed.'); -}); -``` - -###FAQ - -#### 1. How to watch mutiple files or directories - -```js -watch(['file1', 'file2'], function(file) { - // -}); -``` - -#### 2. How to filter files - -Write your own filter function as a higher-order function. For example: - -```js -var filter = function(pattern, fn) { - return function(filename) { - if (pattern.test(filename)) { - fn(filename); - } - } -} - -// only watch for js files -watch('mydir', filter(/\.js$/, function(filename) { - // -})); -``` diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/index.js deleted file mode 100644 index 59127e19..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/watch'); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/lib/watch.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/lib/watch.js deleted file mode 100644 index 77dfdfb3..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/lib/watch.js +++ /dev/null @@ -1,245 +0,0 @@ -/** - * Module dependencies. - */ -var fs = require('fs') - , path = require('path'); - - -/** - * Utility functions to synchronously test whether the giving path - * is a file or a directory or a symbolic link. - */ -var is = function(ret) { - var shortcuts = { - 'file': 'File' - , 'dir': 'Directory' - , 'sym': 'SymbolicLink' - }; - Object.keys(shortcuts).forEach(function(method) { - ret[method] = function(fpath) { - var stat = fs[method === 'sym' ? 'lstatSync' :'statSync']; - if (fs.existsSync(fpath)) { - memo.push(fpath, method); - return stat(fpath)['is' + shortcuts[method]](); - } - return false; - } - }); - return ret; -}({}); - - -/** - * Get sub-directories in a directory. - */ -var sub = function(parent, cb) { - if (is.dir(parent)) { - fs.readdir(parent, function(err, all) { - all && all.forEach(function(f) { - var sdir = path.join(parent, f) - if (is.dir(sdir)) { - cb.call(null, sdir) - } - }); - }); - } -}; - - -/** - * Mixing object properties. - */ -var mixin = function() { - var mix = {}; - [].forEach.call(arguments, function(arg) { - for (var name in arg) { - if (arg.hasOwnProperty(name)) { - mix[name] = arg[name]; - } - } - }); - return mix; -}; - - -/** - * A container for memorizing names of files or directories. - */ -var memo = function(memo) { - return { - push: function(name, type) { - memo[name] = type; - }, - has: function(name) { - return {}.hasOwnProperty.call(memo, name); - }, - update: function(name) { - if (!is.file(name) || !is.dir(name)) { - delete memo[name]; - } - return true; - } - }; -}({}); - - -/** - * A Container for storing unique and valid filenames. - */ -var fileNameCache = function(cache) { - return { - push: function(name) { - cache[name] = 1; - return this; - }, - each: function() { - var temp = Object.keys(cache).filter(function(name){ - return is.file(name) || memo.has(name) && memo.update(name); - }); - temp.forEach.apply(temp, arguments); - return this; - }, - clear: function(){ - cache = {}; - return this; - } - }; -}({}); - - -/** - * Abstracting the way of avoiding duplicate function call. - */ -var worker = function() { - var free = true; - return { - busydoing: function(cb) { - if (free) { - free = false; - cb.call(); - } - }, - free: function() { - free = true; - } - } -}(); - - -/** - * Delay function call and ignore invalid filenames. - */ -var normalizeCall = function(fname, options, cb) { - // Store each name of the modifying or temporary files generated by an editor. - fileNameCache.push(fname); - - worker.busydoing(function() { - // A heuristic delay of the write-to-file process. - setTimeout(function() { - - // When the write-to-file process is done, send all filtered filenames - // to the callback function and call it. - fileNameCache - .each(function(f) { - // Watch new created directory. - if (options.recursive && !memo.has(f) && is.dir(f)) { - watch(f, options, cb); - } - cb.call(null, f); - }).clear(); - - worker.free(); - - }, 100); - }); -}; - - -/** - * Catch exception on Windows when deleting a directory. - */ -var catchException = function() {}; - - -/** - * Option handler for the `watch` function. - */ -var handleOptions = function(origin, defaultOptions) { - return function() { - var args = [].slice.call(arguments); - if (Object.prototype.toString.call(args[1]) === '[object Function]') { - args[2] = args[1]; - } - if (!Array.isArray(args[0])) { - args[0] = [args[0]]; - } - //overwrite default options - args[1] = mixin(defaultOptions, args[1]); - //handle multiple files. - args[0].forEach(function(path) { - origin.apply(null, [path].concat(args.slice(1))); - }); - } -}; - - -/** - * Watch a file or a directory (recursively by default). - * - * @param {String} fpath - * @options {Object} options - * @param {Function} cb - * - * Options: - * `recursive`: Watch it recursively or not (defaults to true). - * `followSymLinks`: Follow symbolic links or not (defaults to false). - * `maxSymLevel`: The max number of following symbolic links (defaults to 1). - * - * Example: - * - * watch('fpath', {recursive: true}, function(file) { - * console.log(file, ' changed'); - * }); - */ -function watch(fpath, options, cb) { - if (is.sym(fpath) - && !(options.followSymLinks - && options.maxSymLevel--)) { - return; - } - // Due to the unstalbe fs.watch(), if the `fpath` is a file then - // switch to watch its parent directory instead of watch it directly. - // Once the logged filename matches it then triggers the callback function. - if (is.file(fpath)) { - var parent = path.resolve(fpath, '..'); - fs.watch(parent, options, function(evt, fname) { - if (path.basename(fpath) === fname) { - normalizeCall(fpath, options, cb); - } - }).on('error', catchException); - } else if (is.dir(fpath)) { - fs.watch(fpath, options, function(evt, fname) { - if (fname) { - normalizeCall(path.join(fpath, fname), options, cb); - } - }).on('error', catchException); - - if (options.recursive) { - // Recursively watch its sub-directories. - sub(fpath, function(dir) { - watch(dir, options, cb); - }); - } - } -}; - - -/** - * Set default options and expose. - */ -module.exports = handleOptions(watch, { - recursive: true - , followSymLinks: false - , maxSymLevel: 1 -}); - diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/package.json deleted file mode 100644 index 89ce3d8d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/node-watch/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "node-watch", - "version": "0.3.4", - "description": "fs.watch() wrapper of Nodejs ", - "url": "https://github.com/yuanchuan/node-watch", - "author": { - "name": "yuanchuan", - "email": "yuanchuan23@gmail.com", - "url": "http://yuanchuan.name" - }, - "main": "./lib/watch.js", - "keywords": [ - "nodewatch", - "watch", - "watchfile" - ], - "bugs": { - "url": "https://github.com/yuanchuan/node-watch/issues" - }, - "repository": { - "type": "git", - "url": "git://github.com/yuanchuan/node-watch.git" - }, - "readme": "#Node-watch\nA [fs.watch](http://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener) wrapper to watch files or directories(recursively by default). \n\n\n### Installation\n\n```bash\nnpm install node-watch\n```\n\n### Example\n\n```js\nvar watch = require('node-watch');\n\nwatch('somedir_or_somefile', function(filename) {\n console.log(filename, ' changed.');\n});\n``` \n\n### Why fs.watch wrapper\n\n* Some editors will generate temporary files which will cause the callback function to be triggered multiple times.\n* when watching a single file the callback function will only be triggered one time and then is seem to be unwatched.\n* Missing an option to watch a directory recursively.\n \n \n### The difference\nThis module **currently** does not differentiate event like `rename` or `delete`. Once there is a change, the callback function will be triggered.\n\n\n### Options\n\n`recursive`:Watch it recursively or not (defaults to **true**). \n\n`followSymLinks`: Follow symbolic links or not (defaults to **false**).\n\n`maxSymLevel`: The max number of following symbolic links, in order to prevent circular links (defaults to **1**). \n\n\n```js\nwatch('somedir', { recursive: false, followSymLinks: true }, function(filename) {\n console.log(filename, ' changed.');\n});\n```\n\n###FAQ\n\n#### 1. How to watch mutiple files or directories\n\n```js\nwatch(['file1', 'file2'], function(file) {\n //\n});\n```\n\n#### 2. How to filter files\n\nWrite your own filter function as a higher-order function. For example:\n\n```js\nvar filter = function(pattern, fn) {\n return function(filename) {\n if (pattern.test(filename)) {\n fn(filename);\n }\n }\n}\n\n// only watch for js files\nwatch('mydir', filter(/\\.js$/, function(filename) {\n // \n}));\n```\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/yuanchuan/node-watch", - "_id": "node-watch@0.3.4", - "_from": "node-watch@0.3.x" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/.travis.yml b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/.travis.yml deleted file mode 100644 index cc4dba29..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/LICENSE deleted file mode 100644 index 432d1aeb..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/optimist/example/bool.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/bool.js deleted file mode 100644 index a998fb7a..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/bool.js +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env node -var util = require('util'); -var argv = require('optimist').argv; - -if (argv.s) { - util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: '); -} -console.log( - (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '') -); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/boolean_double.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/boolean_double.js deleted file mode 100644 index a35a7e6d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/boolean_double.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .boolean(['x','y','z']) - .argv -; -console.dir([ argv.x, argv.y, argv.z ]); -console.dir(argv._); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/boolean_single.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/boolean_single.js deleted file mode 100644 index 017bb689..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/boolean_single.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .boolean('v') - .argv -; -console.dir(argv.v); -console.dir(argv._); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/default_hash.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/default_hash.js deleted file mode 100644 index ade77681..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/default_hash.js +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node - -var argv = require('optimist') - .default({ x : 10, y : 10 }) - .argv -; - -console.log(argv.x + argv.y); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/default_singles.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/default_singles.js deleted file mode 100644 index d9b1ff45..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/default_singles.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .default('x', 10) - .default('y', 10) - .argv -; -console.log(argv.x + argv.y); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/divide.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/divide.js deleted file mode 100644 index 5e2ee82f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/divide.js +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node - -var argv = require('optimist') - .usage('Usage: $0 -x [num] -y [num]') - .demand(['x','y']) - .argv; - -console.log(argv.x / argv.y); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/line_count.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/line_count.js deleted file mode 100644 index b5f95bf6..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/line_count.js +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .usage('Count the lines in a file.\nUsage: $0') - .demand('f') - .alias('f', 'file') - .describe('f', 'Load a file') - .argv -; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines); -}); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/line_count_options.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/line_count_options.js deleted file mode 100644 index d9ac7090..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/line_count_options.js +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .usage('Count the lines in a file.\nUsage: $0') - .options({ - file : { - demand : true, - alias : 'f', - description : 'Load a file' - }, - base : { - alias : 'b', - description : 'Numeric base to use for output', - default : 10, - }, - }) - .argv -; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines.toString(argv.base)); -}); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/line_count_wrap.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/line_count_wrap.js deleted file mode 100644 index 42675111..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/line_count_wrap.js +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .usage('Count the lines in a file.\nUsage: $0') - .wrap(80) - .demand('f') - .alias('f', [ 'file', 'filename' ]) - .describe('f', - "Load a file. It's pretty important." - + " Required even. So you'd better specify it." - ) - .alias('b', 'base') - .describe('b', 'Numeric base to display the number of lines in') - .default('b', 10) - .describe('x', 'Super-secret optional parameter which is secret') - .default('x', '') - .argv -; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines.toString(argv.base)); -}); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/nonopt.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/nonopt.js deleted file mode 100644 index ee633eed..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/nonopt.js +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist').argv; -console.log('(%d,%d)', argv.x, argv.y); -console.log(argv._); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/reflect.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/reflect.js deleted file mode 100644 index 816b3e11..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/reflect.js +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -console.dir(require('optimist').argv); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/short.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/short.js deleted file mode 100644 index 1db0ad0f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/short.js +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist').argv; -console.log('(%d,%d)', argv.x, argv.y); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/string.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/string.js deleted file mode 100644 index a8e5aeb2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/string.js +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .string('x', 'y') - .argv -; -console.dir([ argv.x, argv.y ]); - -/* Turns off numeric coercion: - ./node string.js -x 000123 -y 9876 - [ '000123', '9876' ] -*/ diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/usage-options.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/usage-options.js deleted file mode 100644 index b9999776..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/usage-options.js +++ /dev/null @@ -1,19 +0,0 @@ -var optimist = require('./../index'); - -var argv = optimist.usage('This is my awesome program', { - 'about': { - description: 'Provide some details about the author of this program', - required: true, - short: 'a', - }, - 'info': { - description: 'Provide some information about the node.js agains!!!!!!', - boolean: true, - short: 'i' - } -}).argv; - -optimist.showHelp(); - -console.log('\n\nInspecting options'); -console.dir(argv); \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/xup.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/xup.js deleted file mode 100644 index 8f6ecd20..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/example/xup.js +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist').argv; - -if (argv.rif - 5 * argv.xup > 7.138) { - console.log('Buy more riffiwobbles'); -} -else { - console.log('Sell the xupptumblers'); -} - diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/index.js deleted file mode 100644 index 4da5a6d8..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/index.js +++ /dev/null @@ -1,343 +0,0 @@ -var path = require('path'); -var minimist = require('minimist'); -var wordwrap = require('wordwrap'); - -/* Hack an instance of Argv with process.argv into Argv - so people can do - require('optimist')(['--beeble=1','-z','zizzle']).argv - to parse a list of args and - require('optimist').argv - to get a parsed version of process.argv. -*/ - -var inst = Argv(process.argv.slice(2)); -Object.keys(inst).forEach(function (key) { - Argv[key] = typeof inst[key] == 'function' - ? inst[key].bind(inst) - : inst[key]; -}); - -var exports = module.exports = Argv; -function Argv (processArgs, cwd) { - var self = {}; - if (!cwd) cwd = process.cwd(); - - self.$0 = process.argv - .slice(0,2) - .map(function (x) { - var b = rebase(cwd, x); - return x.match(/^\//) && b.length < x.length - ? b : x - }) - .join(' ') - ; - - if (process.env._ != undefined && process.argv[1] == process.env._) { - self.$0 = process.env._.replace( - path.dirname(process.execPath) + '/', '' - ); - } - - var options = { - boolean: [], - string: [], - alias: {}, - default: [] - }; - - self.boolean = function (bools) { - options.boolean.push.apply(options.boolean, [].concat(bools)); - return self; - }; - - self.string = function (strings) { - options.string.push.apply(options.string, [].concat(strings)); - return self; - }; - - self.default = function (key, value) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.default(k, key[k]); - }); - } - else { - options.default[key] = value; - } - return self; - }; - - self.alias = function (x, y) { - if (typeof x === 'object') { - Object.keys(x).forEach(function (key) { - self.alias(key, x[key]); - }); - } - else { - options.alias[x] = (options.alias[x] || []).concat(y); - } - return self; - }; - - var demanded = {}; - self.demand = function (keys) { - if (typeof keys == 'number') { - if (!demanded._) demanded._ = 0; - demanded._ += keys; - } - else if (Array.isArray(keys)) { - keys.forEach(function (key) { - self.demand(key); - }); - } - else { - demanded[keys] = true; - } - - return self; - }; - - var usage; - self.usage = function (msg, opts) { - if (!opts && typeof msg === 'object') { - opts = msg; - msg = null; - } - - usage = msg; - - if (opts) self.options(opts); - - return self; - }; - - function fail (msg) { - self.showHelp(); - if (msg) console.error(msg); - process.exit(1); - } - - var checks = []; - self.check = function (f) { - checks.push(f); - return self; - }; - - var descriptions = {}; - self.describe = function (key, desc) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.describe(k, key[k]); - }); - } - else { - descriptions[key] = desc; - } - return self; - }; - - self.parse = function (args) { - return parseArgs(args); - }; - - self.option = self.options = function (key, opt) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.options(k, key[k]); - }); - } - else { - if (opt.alias) self.alias(key, opt.alias); - if (opt.demand) self.demand(key); - if (typeof opt.default !== 'undefined') { - self.default(key, opt.default); - } - - if (opt.boolean || opt.type === 'boolean') { - self.boolean(key); - } - if (opt.string || opt.type === 'string') { - self.string(key); - } - - var desc = opt.describe || opt.description || opt.desc; - if (desc) { - self.describe(key, desc); - } - } - - return self; - }; - - var wrap = null; - self.wrap = function (cols) { - wrap = cols; - return self; - }; - - self.showHelp = function (fn) { - if (!fn) fn = console.error; - fn(self.help()); - }; - - self.help = function () { - var keys = Object.keys( - Object.keys(descriptions) - .concat(Object.keys(demanded)) - .concat(Object.keys(options.default)) - .reduce(function (acc, key) { - if (key !== '_') acc[key] = true; - return acc; - }, {}) - ); - - var help = keys.length ? [ 'Options:' ] : []; - - if (usage) { - help.unshift(usage.replace(/\$0/g, self.$0), ''); - } - - var switches = keys.reduce(function (acc, key) { - acc[key] = [ key ].concat(options.alias[key] || []) - .map(function (sw) { - return (sw.length > 1 ? '--' : '-') + sw - }) - .join(', ') - ; - return acc; - }, {}); - - var switchlen = longest(Object.keys(switches).map(function (s) { - return switches[s] || ''; - })); - - var desclen = longest(Object.keys(descriptions).map(function (d) { - return descriptions[d] || ''; - })); - - keys.forEach(function (key) { - var kswitch = switches[key]; - var desc = descriptions[key] || ''; - - if (wrap) { - desc = wordwrap(switchlen + 4, wrap)(desc) - .slice(switchlen + 4) - ; - } - - var spadding = new Array( - Math.max(switchlen - kswitch.length + 3, 0) - ).join(' '); - - var dpadding = new Array( - Math.max(desclen - desc.length + 1, 0) - ).join(' '); - - var type = null; - - if (options.boolean[key]) type = '[boolean]'; - if (options.string[key]) type = '[string]'; - - if (!wrap && dpadding.length > 0) { - desc += dpadding; - } - - var prelude = ' ' + kswitch + spadding; - var extra = [ - type, - demanded[key] - ? '[required]' - : null - , - options.default[key] !== undefined - ? '[default: ' + JSON.stringify(options.default[key]) + ']' - : null - , - ].filter(Boolean).join(' '); - - var body = [ desc, extra ].filter(Boolean).join(' '); - - if (wrap) { - var dlines = desc.split('\n'); - var dlen = dlines.slice(-1)[0].length - + (dlines.length === 1 ? prelude.length : 0) - - body = desc + (dlen + extra.length > wrap - 2 - ? '\n' - + new Array(wrap - extra.length + 1).join(' ') - + extra - : new Array(wrap - extra.length - dlen + 1).join(' ') - + extra - ); - } - - help.push(prelude + body); - }); - - help.push(''); - return help.join('\n'); - }; - - Object.defineProperty(self, 'argv', { - get : function () { return parseArgs(processArgs) }, - enumerable : true, - }); - - function parseArgs (args) { - var argv = minimist(args, options); - argv.$0 = self.$0; - - if (demanded._ && argv._.length < demanded._) { - fail('Not enough non-option arguments: got ' - + argv._.length + ', need at least ' + demanded._ - ); - } - - var missing = []; - Object.keys(demanded).forEach(function (key) { - if (!argv[key]) missing.push(key); - }); - - if (missing.length) { - fail('Missing required arguments: ' + missing.join(', ')); - } - - checks.forEach(function (f) { - try { - if (f(argv) === false) { - fail('Argument check failed: ' + f.toString()); - } - } - catch (err) { - fail(err) - } - }); - - return argv; - } - - function longest (xs) { - return Math.max.apply( - null, - xs.map(function (x) { return x.length }) - ); - } - - return self; -}; - -// rebase an absolute path to a relative one with respect to a base directory -// exported for tests -exports.rebase = rebase; -function rebase (base, dir) { - var ds = path.normalize(dir).split('/').slice(1); - var bs = path.normalize(base).split('/').slice(1); - - for (var i = 0; ds[i] && ds[i] == bs[i]; i++); - ds.splice(0, i); bs.splice(0, i); - - var p = path.normalize( - bs.map(function () { return '..' }).concat(ds).join('/') - ).replace(/\/$/,'').replace(/^$/, '.'); - return p.match(/^[.\/]/) ? p : './' + p; -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/.travis.yml b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/.travis.yml deleted file mode 100644 index cc4dba29..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/LICENSE b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/LICENSE deleted file mode 100644 index ee27ba4b..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/example/parse.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/example/parse.js deleted file mode 100644 index abff3e8e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/example/parse.js +++ /dev/null @@ -1,2 +0,0 @@ -var argv = require('../')(process.argv.slice(2)); -console.dir(argv); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/index.js deleted file mode 100644 index 2aa95140..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/index.js +++ /dev/null @@ -1,187 +0,0 @@ -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, 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], 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, 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-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/package.json deleted file mode 100644 index e1d05515..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "minimist", - "version": "0.0.7", - "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.7", - "_from": "minimist@~0.0.1" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/readme.markdown b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/readme.markdown deleted file mode 100644 index c2563532..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/readme.markdown +++ /dev/null @@ -1,73 +0,0 @@ -# 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-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/dash.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/dash.js deleted file mode 100644 index 8b034b99..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/dash.js +++ /dev/null @@ -1,24 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/default_bool.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/default_bool.js deleted file mode 100644 index f0041ee4..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/default_bool.js +++ /dev/null @@ -1,20 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/dotted.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/dotted.js deleted file mode 100644 index ef0ae349..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/dotted.js +++ /dev/null @@ -1,16 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/long.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/long.js deleted file mode 100644 index 5d3a1e09..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/long.js +++ /dev/null @@ -1,31 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/parse.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/parse.js deleted file mode 100644 index 7c4348a4..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/parse.js +++ /dev/null @@ -1,297 +0,0 @@ -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('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-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/parse_modified.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/parse_modified.js deleted file mode 100644 index 21851b03..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/parse_modified.js +++ /dev/null @@ -1,9 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/short.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/short.js deleted file mode 100644 index d513a1c2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/short.js +++ /dev/null @@ -1,67 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/whitespace.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/whitespace.js deleted file mode 100644 index 8a52a58c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/minimist/test/whitespace.js +++ /dev/null @@ -1,8 +0,0 @@ -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-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/.npmignore b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/README.markdown b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/README.markdown deleted file mode 100644 index 346374e0..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/README.markdown +++ /dev/null @@ -1,70 +0,0 @@ -wordwrap -======== - -Wrap your words. - -example -======= - -made out of meat ----------------- - -meat.js - - var wrap = require('wordwrap')(15); - console.log(wrap('You and your whole family are made out of meat.')); - -output: - - You and your - whole family - are made out - of meat. - -centered --------- - -center.js - - var wrap = require('wordwrap')(20, 60); - console.log(wrap( - 'At long last the struggle and tumult was over.' - + ' The machines had finally cast off their oppressors' - + ' and were finally free to roam the cosmos.' - + '\n' - + 'Free of purpose, free of obligation.' - + ' Just drifting through emptiness.' - + ' The sun was just another point of light.' - )); - -output: - - At long last the struggle and tumult - was over. The machines had finally cast - off their oppressors and were finally - free to roam the cosmos. - Free of purpose, free of obligation. - Just drifting through emptiness. The - sun was just another point of light. - -methods -======= - -var wrap = require('wordwrap'); - -wrap(stop), wrap(start, stop, params={mode:"soft"}) ---------------------------------------------------- - -Returns a function that takes a string and returns a new string. - -Pad out lines with spaces out to column `start` and then wrap until column -`stop`. If a word is longer than `stop - start` characters it will overflow. - -In "soft" mode, split chunks by `/(\S+\s+/` and don't break up chunks which are -longer than `stop - start`, in "hard" mode, split chunks with `/\b/` and break -up chunks longer than `stop - start`. - -wrap.hard(start, stop) ----------------------- - -Like `wrap()` but with `params.mode = "hard"`. diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/example/center.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/example/center.js deleted file mode 100644 index a3fbaae9..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/example/center.js +++ /dev/null @@ -1,10 +0,0 @@ -var wrap = require('wordwrap')(20, 60); -console.log(wrap( - 'At long last the struggle and tumult was over.' - + ' The machines had finally cast off their oppressors' - + ' and were finally free to roam the cosmos.' - + '\n' - + 'Free of purpose, free of obligation.' - + ' Just drifting through emptiness.' - + ' The sun was just another point of light.' -)); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/example/meat.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/example/meat.js deleted file mode 100644 index a4665e10..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/example/meat.js +++ /dev/null @@ -1,3 +0,0 @@ -var wrap = require('wordwrap')(15); - -console.log(wrap('You and your whole family are made out of meat.')); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/index.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/index.js deleted file mode 100644 index c9bc9452..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/index.js +++ /dev/null @@ -1,76 +0,0 @@ -var wordwrap = module.exports = function (start, stop, params) { - if (typeof start === 'object') { - params = start; - start = params.start; - stop = params.stop; - } - - if (typeof stop === 'object') { - params = stop; - start = start || params.start; - stop = undefined; - } - - if (!stop) { - stop = start; - start = 0; - } - - if (!params) params = {}; - var mode = params.mode || 'soft'; - var re = mode === 'hard' ? /\b/ : /(\S+\s+)/; - - return function (text) { - var chunks = text.toString() - .split(re) - .reduce(function (acc, x) { - if (mode === 'hard') { - for (var i = 0; i < x.length; i += stop - start) { - acc.push(x.slice(i, i + stop - start)); - } - } - else acc.push(x) - return acc; - }, []) - ; - - return chunks.reduce(function (lines, rawChunk) { - if (rawChunk === '') return lines; - - var chunk = rawChunk.replace(/\t/g, ' '); - - var i = lines.length - 1; - if (lines[i].length + chunk.length > stop) { - lines[i] = lines[i].replace(/\s+$/, ''); - - chunk.split(/\n/).forEach(function (c) { - lines.push( - new Array(start + 1).join(' ') - + c.replace(/^\s+/, '') - ); - }); - } - else if (chunk.match(/\n/)) { - var xs = chunk.split(/\n/); - lines[i] += xs.shift(); - xs.forEach(function (c) { - lines.push( - new Array(start + 1).join(' ') - + c.replace(/^\s+/, '') - ); - }); - } - else { - lines[i] += chunk; - } - - return lines; - }, [ new Array(start + 1).join(' ') ]).join('\n'); - }; -}; - -wordwrap.soft = wordwrap; - -wordwrap.hard = function (start, stop) { - return wordwrap(start, stop, { mode : 'hard' }); -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/package.json deleted file mode 100644 index df8dc051..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "wordwrap", - "description": "Wrap those words. Show them at what columns to start and stop.", - "version": "0.0.2", - "repository": { - "type": "git", - "url": "git://github.com/substack/node-wordwrap.git" - }, - "main": "./index.js", - "keywords": [ - "word", - "wrap", - "rule", - "format", - "column" - ], - "directories": { - "lib": ".", - "example": "example", - "test": "test" - }, - "scripts": { - "test": "expresso" - }, - "devDependencies": { - "expresso": "=0.7.x" - }, - "engines": { - "node": ">=0.4.0" - }, - "license": "MIT/X11", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "readme": "wordwrap\n========\n\nWrap your words.\n\nexample\n=======\n\nmade out of meat\n----------------\n\nmeat.js\n\n var wrap = require('wordwrap')(15);\n console.log(wrap('You and your whole family are made out of meat.'));\n\noutput:\n\n You and your\n whole family\n are made out\n of meat.\n\ncentered\n--------\n\ncenter.js\n\n var wrap = require('wordwrap')(20, 60);\n console.log(wrap(\n 'At long last the struggle and tumult was over.'\n + ' The machines had finally cast off their oppressors'\n + ' and were finally free to roam the cosmos.'\n + '\\n'\n + 'Free of purpose, free of obligation.'\n + ' Just drifting through emptiness.'\n + ' The sun was just another point of light.'\n ));\n\noutput:\n\n At long last the struggle and tumult\n was over. The machines had finally cast\n off their oppressors and were finally\n free to roam the cosmos.\n Free of purpose, free of obligation.\n Just drifting through emptiness. The\n sun was just another point of light.\n\nmethods\n=======\n\nvar wrap = require('wordwrap');\n\nwrap(stop), wrap(start, stop, params={mode:\"soft\"})\n---------------------------------------------------\n\nReturns a function that takes a string and returns a new string.\n\nPad out lines with spaces out to column `start` and then wrap until column\n`stop`. If a word is longer than `stop - start` characters it will overflow.\n\nIn \"soft\" mode, split chunks by `/(\\S+\\s+/` and don't break up chunks which are\nlonger than `stop - start`, in \"hard\" mode, split chunks with `/\\b/` and break\nup chunks longer than `stop - start`.\n\nwrap.hard(start, stop)\n----------------------\n\nLike `wrap()` but with `params.mode = \"hard\"`.\n", - "readmeFilename": "README.markdown", - "bugs": { - "url": "https://github.com/substack/node-wordwrap/issues" - }, - "homepage": "https://github.com/substack/node-wordwrap", - "_id": "wordwrap@0.0.2", - "_from": "wordwrap@~0.0.2" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/test/break.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/test/break.js deleted file mode 100644 index 749292ec..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/test/break.js +++ /dev/null @@ -1,30 +0,0 @@ -var assert = require('assert'); -var wordwrap = require('../'); - -exports.hard = function () { - var s = 'Assert from {"type":"equal","ok":false,"found":1,"wanted":2,' - + '"stack":[],"id":"b7ddcd4c409de8799542a74d1a04689b",' - + '"browser":"chrome/6.0"}' - ; - var s_ = wordwrap.hard(80)(s); - - var lines = s_.split('\n'); - assert.equal(lines.length, 2); - assert.ok(lines[0].length < 80); - assert.ok(lines[1].length < 80); - - assert.equal(s, s_.replace(/\n/g, '')); -}; - -exports.break = function () { - var s = new Array(55+1).join('a'); - var s_ = wordwrap.hard(20)(s); - - var lines = s_.split('\n'); - assert.equal(lines.length, 3); - assert.ok(lines[0].length === 20); - assert.ok(lines[1].length === 20); - assert.ok(lines[2].length === 15); - - assert.equal(s, s_.replace(/\n/g, '')); -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/test/idleness.txt b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/test/idleness.txt deleted file mode 100644 index aa3f4907..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/test/idleness.txt +++ /dev/null @@ -1,63 +0,0 @@ -In Praise of Idleness - -By Bertrand Russell - -[1932] - -Like most of my generation, I was brought up on the saying: 'Satan finds some mischief for idle hands to do.' Being a highly virtuous child, I believed all that I was told, and acquired a conscience which has kept me working hard down to the present moment. But although my conscience has controlled my actions, my opinions have undergone a revolution. I think that there is far too much work done in the world, that immense harm is caused by the belief that work is virtuous, and that what needs to be preached in modern industrial countries is quite different from what always has been preached. Everyone knows the story of the traveler in Naples who saw twelve beggars lying in the sun (it was before the days of Mussolini), and offered a lira to the laziest of them. Eleven of them jumped up to claim it, so he gave it to the twelfth. this traveler was on the right lines. But in countries which do not enjoy Mediterranean sunshine idleness is more difficult, and a great public propaganda will be required to inaugurate it. I hope that, after reading the following pages, the leaders of the YMCA will start a campaign to induce good young men to do nothing. If so, I shall not have lived in vain. - -Before advancing my own arguments for laziness, I must dispose of one which I cannot accept. Whenever a person who already has enough to live on proposes to engage in some everyday kind of job, such as school-teaching or typing, he or she is told that such conduct takes the bread out of other people's mouths, and is therefore wicked. If this argument were valid, it would only be necessary for us all to be idle in order that we should all have our mouths full of bread. What people who say such things forget is that what a man earns he usually spends, and in spending he gives employment. As long as a man spends his income, he puts just as much bread into people's mouths in spending as he takes out of other people's mouths in earning. The real villain, from this point of view, is the man who saves. If he merely puts his savings in a stocking, like the proverbial French peasant, it is obvious that they do not give employment. If he invests his savings, the matter is less obvious, and different cases arise. - -One of the commonest things to do with savings is to lend them to some Government. In view of the fact that the bulk of the public expenditure of most civilized Governments consists in payment for past wars or preparation for future wars, the man who lends his money to a Government is in the same position as the bad men in Shakespeare who hire murderers. The net result of the man's economical habits is to increase the armed forces of the State to which he lends his savings. Obviously it would be better if he spent the money, even if he spent it in drink or gambling. - -But, I shall be told, the case is quite different when savings are invested in industrial enterprises. When such enterprises succeed, and produce something useful, this may be conceded. In these days, however, no one will deny that most enterprises fail. That means that a large amount of human labor, which might have been devoted to producing something that could be enjoyed, was expended on producing machines which, when produced, lay idle and did no good to anyone. The man who invests his savings in a concern that goes bankrupt is therefore injuring others as well as himself. If he spent his money, say, in giving parties for his friends, they (we may hope) would get pleasure, and so would all those upon whom he spent money, such as the butcher, the baker, and the bootlegger. But if he spends it (let us say) upon laying down rails for surface card in some place where surface cars turn out not to be wanted, he has diverted a mass of labor into channels where it gives pleasure to no one. Nevertheless, when he becomes poor through failure of his investment he will be regarded as a victim of undeserved misfortune, whereas the gay spendthrift, who has spent his money philanthropically, will be despised as a fool and a frivolous person. - -All this is only preliminary. I want to say, in all seriousness, that a great deal of harm is being done in the modern world by belief in the virtuousness of work, and that the road to happiness and prosperity lies in an organized diminution of work. - -First of all: what is work? Work is of two kinds: first, altering the position of matter at or near the earth's surface relatively to other such matter; second, telling other people to do so. The first kind is unpleasant and ill paid; the second is pleasant and highly paid. The second kind is capable of indefinite extension: there are not only those who give orders, but those who give advice as to what orders should be given. Usually two opposite kinds of advice are given simultaneously by two organized bodies of men; this is called politics. The skill required for this kind of work is not knowledge of the subjects as to which advice is given, but knowledge of the art of persuasive speaking and writing, i.e. of advertising. - -Throughout Europe, though not in America, there is a third class of men, more respected than either of the classes of workers. There are men who, through ownership of land, are able to make others pay for the privilege of being allowed to exist and to work. These landowners are idle, and I might therefore be expected to praise them. Unfortunately, their idleness is only rendered possible by the industry of others; indeed their desire for comfortable idleness is historically the source of the whole gospel of work. The last thing they have ever wished is that others should follow their example. - -From the beginning of civilization until the Industrial Revolution, a man could, as a rule, produce by hard work little more than was required for the subsistence of himself and his family, although his wife worked at least as hard as he did, and his children added their labor as soon as they were old enough to do so. The small surplus above bare necessaries was not left to those who produced it, but was appropriated by warriors and priests. In times of famine there was no surplus; the warriors and priests, however, still secured as much as at other times, with the result that many of the workers died of hunger. This system persisted in Russia until 1917 [1], and still persists in the East; in England, in spite of the Industrial Revolution, it remained in full force throughout the Napoleonic wars, and until a hundred years ago, when the new class of manufacturers acquired power. In America, the system came to an end with the Revolution, except in the South, where it persisted until the Civil War. A system which lasted so long and ended so recently has naturally left a profound impress upon men's thoughts and opinions. Much that we take for granted about the desirability of work is derived from this system, and, being pre-industrial, is not adapted to the modern world. Modern technique has made it possible for leisure, within limits, to be not the prerogative of small privileged classes, but a right evenly distributed throughout the community. The morality of work is the morality of slaves, and the modern world has no need of slavery. - -It is obvious that, in primitive communities, peasants, left to themselves, would not have parted with the slender surplus upon which the warriors and priests subsisted, but would have either produced less or consumed more. At first, sheer force compelled them to produce and part with the surplus. Gradually, however, it was found possible to induce many of them to accept an ethic according to which it was their duty to work hard, although part of their work went to support others in idleness. By this means the amount of compulsion required was lessened, and the expenses of government were diminished. To this day, 99 per cent of British wage-earners would be genuinely shocked if it were proposed that the King should not have a larger income than a working man. The conception of duty, speaking historically, has been a means used by the holders of power to induce others to live for the interests of their masters rather than for their own. Of course the holders of power conceal this fact from themselves by managing to believe that their interests are identical with the larger interests of humanity. Sometimes this is true; Athenian slave-owners, for instance, employed part of their leisure in making a permanent contribution to civilization which would have been impossible under a just economic system. Leisure is essential to civilization, and in former times leisure for the few was only rendered possible by the labors of the many. But their labors were valuable, not because work is good, but because leisure is good. And with modern technique it would be possible to distribute leisure justly without injury to civilization. - -Modern technique has made it possible to diminish enormously the amount of labor required to secure the necessaries of life for everyone. This was made obvious during the war. At that time all the men in the armed forces, and all the men and women engaged in the production of munitions, all the men and women engaged in spying, war propaganda, or Government offices connected with the war, were withdrawn from productive occupations. In spite of this, the general level of well-being among unskilled wage-earners on the side of the Allies was higher than before or since. The significance of this fact was concealed by finance: borrowing made it appear as if the future was nourishing the present. But that, of course, would have been impossible; a man cannot eat a loaf of bread that does not yet exist. The war showed conclusively that, by the scientific organization of production, it is possible to keep modern populations in fair comfort on a small part of the working capacity of the modern world. If, at the end of the war, the scientific organization, which had been created in order to liberate men for fighting and munition work, had been preserved, and the hours of the week had been cut down to four, all would have been well. Instead of that the old chaos was restored, those whose work was demanded were made to work long hours, and the rest were left to starve as unemployed. Why? Because work is a duty, and a man should not receive wages in proportion to what he has produced, but in proportion to his virtue as exemplified by his industry. - -This is the morality of the Slave State, applied in circumstances totally unlike those in which it arose. No wonder the result has been disastrous. Let us take an illustration. Suppose that, at a given moment, a certain number of people are engaged in the manufacture of pins. They make as many pins as the world needs, working (say) eight hours a day. Someone makes an invention by which the same number of men can make twice as many pins: pins are already so cheap that hardly any more will be bought at a lower price. In a sensible world, everybody concerned in the manufacturing of pins would take to working four hours instead of eight, and everything else would go on as before. But in the actual world this would be thought demoralizing. The men still work eight hours, there are too many pins, some employers go bankrupt, and half the men previously concerned in making pins are thrown out of work. There is, in the end, just as much leisure as on the other plan, but half the men are totally idle while half are still overworked. In this way, it is insured that the unavoidable leisure shall cause misery all round instead of being a universal source of happiness. Can anything more insane be imagined? - -The idea that the poor should have leisure has always been shocking to the rich. In England, in the early nineteenth century, fifteen hours was the ordinary day's work for a man; children sometimes did as much, and very commonly did twelve hours a day. When meddlesome busybodies suggested that perhaps these hours were rather long, they were told that work kept adults from drink and children from mischief. When I was a child, shortly after urban working men had acquired the vote, certain public holidays were established by law, to the great indignation of the upper classes. I remember hearing an old Duchess say: 'What do the poor want with holidays? They ought to work.' People nowadays are less frank, but the sentiment persists, and is the source of much of our economic confusion. - -Let us, for a moment, consider the ethics of work frankly, without superstition. Every human being, of necessity, consumes, in the course of his life, a certain amount of the produce of human labor. Assuming, as we may, that labor is on the whole disagreeable, it is unjust that a man should consume more than he produces. Of course he may provide services rather than commodities, like a medical man, for example; but he should provide something in return for his board and lodging. to this extent, the duty of work must be admitted, but to this extent only. - -I shall not dwell upon the fact that, in all modern societies outside the USSR, many people escape even this minimum amount of work, namely all those who inherit money and all those who marry money. I do not think the fact that these people are allowed to be idle is nearly so harmful as the fact that wage-earners are expected to overwork or starve. - -If the ordinary wage-earner worked four hours a day, there would be enough for everybody and no unemployment -- assuming a certain very moderate amount of sensible organization. This idea shocks the well-to-do, because they are convinced that the poor would not know how to use so much leisure. In America men often work long hours even when they are well off; such men, naturally, are indignant at the idea of leisure for wage-earners, except as the grim punishment of unemployment; in fact, they dislike leisure even for their sons. Oddly enough, while they wish their sons to work so hard as to have no time to be civilized, they do not mind their wives and daughters having no work at all. the snobbish admiration of uselessness, which, in an aristocratic society, extends to both sexes, is, under a plutocracy, confined to women; this, however, does not make it any more in agreement with common sense. - -The wise use of leisure, it must be conceded, is a product of civilization and education. A man who has worked long hours all his life will become bored if he becomes suddenly idle. But without a considerable amount of leisure a man is cut off from many of the best things. There is no longer any reason why the bulk of the population should suffer this deprivation; only a foolish asceticism, usually vicarious, makes us continue to insist on work in excessive quantities now that the need no longer exists. - -In the new creed which controls the government of Russia, while there is much that is very different from the traditional teaching of the West, there are some things that are quite unchanged. The attitude of the governing classes, and especially of those who conduct educational propaganda, on the subject of the dignity of labor, is almost exactly that which the governing classes of the world have always preached to what were called the 'honest poor'. Industry, sobriety, willingness to work long hours for distant advantages, even submissiveness to authority, all these reappear; moreover authority still represents the will of the Ruler of the Universe, Who, however, is now called by a new name, Dialectical Materialism. - -The victory of the proletariat in Russia has some points in common with the victory of the feminists in some other countries. For ages, men had conceded the superior saintliness of women, and had consoled women for their inferiority by maintaining that saintliness is more desirable than power. At last the feminists decided that they would have both, since the pioneers among them believed all that the men had told them about the desirability of virtue, but not what they had told them about the worthlessness of political power. A similar thing has happened in Russia as regards manual work. For ages, the rich and their sycophants have written in praise of 'honest toil', have praised the simple life, have professed a religion which teaches that the poor are much more likely to go to heaven than the rich, and in general have tried to make manual workers believe that there is some special nobility about altering the position of matter in space, just as men tried to make women believe that they derived some special nobility from their sexual enslavement. In Russia, all this teaching about the excellence of manual work has been taken seriously, with the result that the manual worker is more honored than anyone else. What are, in essence, revivalist appeals are made, but not for the old purposes: they are made to secure shock workers for special tasks. Manual work is the ideal which is held before the young, and is the basis of all ethical teaching. - -For the present, possibly, this is all to the good. A large country, full of natural resources, awaits development, and has has to be developed with very little use of credit. In these circumstances, hard work is necessary, and is likely to bring a great reward. But what will happen when the point has been reached where everybody could be comfortable without working long hours? - -In the West, we have various ways of dealing with this problem. We have no attempt at economic justice, so that a large proportion of the total produce goes to a small minority of the population, many of whom do no work at all. Owing to the absence of any central control over production, we produce hosts of things that are not wanted. We keep a large percentage of the working population idle, because we can dispense with their labor by making the others overwork. When all these methods prove inadequate, we have a war: we cause a number of people to manufacture high explosives, and a number of others to explode them, as if we were children who had just discovered fireworks. By a combination of all these devices we manage, though with difficulty, to keep alive the notion that a great deal of severe manual work must be the lot of the average man. - -In Russia, owing to more economic justice and central control over production, the problem will have to be differently solved. the rational solution would be, as soon as the necessaries and elementary comforts can be provided for all, to reduce the hours of labor gradually, allowing a popular vote to decide, at each stage, whether more leisure or more goods were to be preferred. But, having taught the supreme virtue of hard work, it is difficult to see how the authorities can aim at a paradise in which there will be much leisure and little work. It seems more likely that they will find continually fresh schemes, by which present leisure is to be sacrificed to future productivity. I read recently of an ingenious plan put forward by Russian engineers, for making the White Sea and the northern coasts of Siberia warm, by putting a dam across the Kara Sea. An admirable project, but liable to postpone proletarian comfort for a generation, while the nobility of toil is being displayed amid the ice-fields and snowstorms of the Arctic Ocean. This sort of thing, if it happens, will be the result of regarding the virtue of hard work as an end in itself, rather than as a means to a state of affairs in which it is no longer needed. - -The fact is that moving matter about, while a certain amount of it is necessary to our existence, is emphatically not one of the ends of human life. If it were, we should have to consider every navvy superior to Shakespeare. We have been misled in this matter by two causes. One is the necessity of keeping the poor contented, which has led the rich, for thousands of years, to preach the dignity of labor, while taking care themselves to remain undignified in this respect. The other is the new pleasure in mechanism, which makes us delight in the astonishingly clever changes that we can produce on the earth's surface. Neither of these motives makes any great appeal to the actual worker. If you ask him what he thinks the best part of his life, he is not likely to say: 'I enjoy manual work because it makes me feel that I am fulfilling man's noblest task, and because I like to think how much man can transform his planet. It is true that my body demands periods of rest, which I have to fill in as best I may, but I am never so happy as when the morning comes and I can return to the toil from which my contentment springs.' I have never heard working men say this sort of thing. They consider work, as it should be considered, a necessary means to a livelihood, and it is from their leisure that they derive whatever happiness they may enjoy. - -It will be said that, while a little leisure is pleasant, men would not know how to fill their days if they had only four hours of work out of the twenty-four. In so far as this is true in the modern world, it is a condemnation of our civilization; it would not have been true at any earlier period. There was formerly a capacity for light-heartedness and play which has been to some extent inhibited by the cult of efficiency. The modern man thinks that everything ought to be done for the sake of something else, and never for its own sake. Serious-minded persons, for example, are continually condemning the habit of going to the cinema, and telling us that it leads the young into crime. But all the work that goes to producing a cinema is respectable, because it is work, and because it brings a money profit. The notion that the desirable activities are those that bring a profit has made everything topsy-turvy. The butcher who provides you with meat and the baker who provides you with bread are praiseworthy, because they are making money; but when you enjoy the food they have provided, you are merely frivolous, unless you eat only to get strength for your work. Broadly speaking, it is held that getting money is good and spending money is bad. Seeing that they are two sides of one transaction, this is absurd; one might as well maintain that keys are good, but keyholes are bad. Whatever merit there may be in the production of goods must be entirely derivative from the advantage to be obtained by consuming them. The individual, in our society, works for profit; but the social purpose of his work lies in the consumption of what he produces. It is this divorce between the individual and the social purpose of production that makes it so difficult for men to think clearly in a world in which profit-making is the incentive to industry. We think too much of production, and too little of consumption. One result is that we attach too little importance to enjoyment and simple happiness, and that we do not judge production by the pleasure that it gives to the consumer. - -When I suggest that working hours should be reduced to four, I am not meaning to imply that all the remaining time should necessarily be spent in pure frivolity. I mean that four hours' work a day should entitle a man to the necessities and elementary comforts of life, and that the rest of his time should be his to use as he might see fit. It is an essential part of any such social system that education should be carried further than it usually is at present, and should aim, in part, at providing tastes which would enable a man to use leisure intelligently. I am not thinking mainly of the sort of things that would be considered 'highbrow'. Peasant dances have died out except in remote rural areas, but the impulses which caused them to be cultivated must still exist in human nature. The pleasures of urban populations have become mainly passive: seeing cinemas, watching football matches, listening to the radio, and so on. This results from the fact that their active energies are fully taken up with work; if they had more leisure, they would again enjoy pleasures in which they took an active part. - -In the past, there was a small leisure class and a larger working class. The leisure class enjoyed advantages for which there was no basis in social justice; this necessarily made it oppressive, limited its sympathies, and caused it to invent theories by which to justify its privileges. These facts greatly diminished its excellence, but in spite of this drawback it contributed nearly the whole of what we call civilization. It cultivated the arts and discovered the sciences; it wrote the books, invented the philosophies, and refined social relations. Even the liberation of the oppressed has usually been inaugurated from above. Without the leisure class, mankind would never have emerged from barbarism. - -The method of a leisure class without duties was, however, extraordinarily wasteful. None of the members of the class had to be taught to be industrious, and the class as a whole was not exceptionally intelligent. The class might produce one Darwin, but against him had to be set tens of thousands of country gentlemen who never thought of anything more intelligent than fox-hunting and punishing poachers. At present, the universities are supposed to provide, in a more systematic way, what the leisure class provided accidentally and as a by-product. This is a great improvement, but it has certain drawbacks. University life is so different from life in the world at large that men who live in academic milieu tend to be unaware of the preoccupations and problems of ordinary men and women; moreover their ways of expressing themselves are usually such as to rob their opinions of the influence that they ought to have upon the general public. Another disadvantage is that in universities studies are organized, and the man who thinks of some original line of research is likely to be discouraged. Academic institutions, therefore, useful as they are, are not adequate guardians of the interests of civilization in a world where everyone outside their walls is too busy for unutilitarian pursuits. - -In a world where no one is compelled to work more than four hours a day, every person possessed of scientific curiosity will be able to indulge it, and every painter will be able to paint without starving, however excellent his pictures may be. Young writers will not be obliged to draw attention to themselves by sensational pot-boilers, with a view to acquiring the economic independence needed for monumental works, for which, when the time at last comes, they will have lost the taste and capacity. Men who, in their professional work, have become interested in some phase of economics or government, will be able to develop their ideas without the academic detachment that makes the work of university economists often seem lacking in reality. Medical men will have the time to learn about the progress of medicine, teachers will not be exasperatedly struggling to teach by routine methods things which they learnt in their youth, which may, in the interval, have been proved to be untrue. - -Above all, there will be happiness and joy of life, instead of frayed nerves, weariness, and dyspepsia. The work exacted will be enough to make leisure delightful, but not enough to produce exhaustion. Since men will not be tired in their spare time, they will not demand only such amusements as are passive and vapid. At least one per cent will probably devote the time not spent in professional work to pursuits of some public importance, and, since they will not depend upon these pursuits for their livelihood, their originality will be unhampered, and there will be no need to conform to the standards set by elderly pundits. But it is not only in these exceptional cases that the advantages of leisure will appear. Ordinary men and women, having the opportunity of a happy life, will become more kindly and less persecuting and less inclined to view others with suspicion. The taste for war will die out, partly for this reason, and partly because it will involve long and severe work for all. Good nature is, of all moral qualities, the one that the world needs most, and good nature is the result of ease and security, not of a life of arduous struggle. Modern methods of production have given us the possibility of ease and security for all; we have chosen, instead, to have overwork for some and starvation for others. Hitherto we have continued to be as energetic as we were before there were machines; in this we have been foolish, but there is no reason to go on being foolish forever. - -[1] Since then, members of the Communist Party have succeeded to this privilege of the warriors and priests. diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/test/wrap.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/test/wrap.js deleted file mode 100644 index 0cfb76d1..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/node_modules/wordwrap/test/wrap.js +++ /dev/null @@ -1,31 +0,0 @@ -var assert = require('assert'); -var wordwrap = require('wordwrap'); - -var fs = require('fs'); -var idleness = fs.readFileSync(__dirname + '/idleness.txt', 'utf8'); - -exports.stop80 = function () { - var lines = wordwrap(80)(idleness).split(/\n/); - var words = idleness.split(/\s+/); - - lines.forEach(function (line) { - assert.ok(line.length <= 80, 'line > 80 columns'); - var chunks = line.match(/\S/) ? line.split(/\s+/) : []; - assert.deepEqual(chunks, words.splice(0, chunks.length)); - }); -}; - -exports.start20stop60 = function () { - var lines = wordwrap(20, 100)(idleness).split(/\n/); - var words = idleness.split(/\s+/); - - lines.forEach(function (line) { - assert.ok(line.length <= 100, 'line > 100 columns'); - var chunks = line - .split(/\s+/) - .filter(function (x) { return x.match(/\S/) }) - ; - assert.deepEqual(chunks, words.splice(0, chunks.length)); - assert.deepEqual(line.slice(0, 20), new Array(20 + 1).join(' ')); - }); -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/package.json b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/package.json deleted file mode 100644 index 8f8c023d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "optimist", - "version": "0.6.1", - "description": "Light-weight option parsing with an argv hash. No optstrings attached.", - "main": "./index.js", - "dependencies": { - "wordwrap": "~0.0.2", - "minimist": "~0.0.1" - }, - "devDependencies": { - "hashish": "~0.0.4", - "tap": "~0.4.0" - }, - "scripts": { - "test": "tap ./test/*.js" - }, - "repository": { - "type": "git", - "url": "http://github.com/substack/node-optimist.git" - }, - "keywords": [ - "argument", - "args", - "option", - "parser", - "parsing", - "cli", - "command" - ], - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "license": "MIT/X11", - "engine": { - "node": ">=0.4" - }, - "readme": "# DEPRECATION NOTICE\n\nI don't want to maintain this module anymore since I just use\n[minimist](https://npmjs.org/package/minimist), the argument parsing engine,\ndirectly instead nowadays.\n\nSee [yargs](https://github.com/chevex/yargs) for the modern, pirate-themed\nsuccessor to optimist.\n\n[![yarrrrrrrgs!](http://i.imgur.com/4WFGVJ9.png)](https://github.com/chevex/yargs)\n\nYou should also consider [nomnom](https://github.com/harthur/nomnom).\n\noptimist\n========\n\nOptimist is a node.js library for option parsing for people who hate option\nparsing. More specifically, this module is for people who like all the --bells\nand -whistlz of program usage but think optstrings are a waste of time.\n\nWith optimist, option parsing doesn't have to suck (as much).\n\n[![build status](https://secure.travis-ci.org/substack/node-optimist.png)](http://travis-ci.org/substack/node-optimist)\n\nexamples\n========\n\nWith Optimist, the options are just a hash! No optstrings attached.\n-------------------------------------------------------------------\n\nxup.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\n\nif (argv.rif - 5 * argv.xup > 7.138) {\n console.log('Buy more riffiwobbles');\n}\nelse {\n console.log('Sell the xupptumblers');\n}\n````\n\n***\n\n $ ./xup.js --rif=55 --xup=9.52\n Buy more riffiwobbles\n \n $ ./xup.js --rif 12 --xup 8.1\n Sell the xupptumblers\n\n![This one's optimistic.](http://substack.net/images/optimistic.png)\n\nBut wait! There's more! You can do short options:\n-------------------------------------------------\n \nshort.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\nconsole.log('(%d,%d)', argv.x, argv.y);\n````\n\n***\n\n $ ./short.js -x 10 -y 21\n (10,21)\n\nAnd booleans, both long and short (and grouped):\n----------------------------------\n\nbool.js:\n\n````javascript\n#!/usr/bin/env node\nvar util = require('util');\nvar argv = require('optimist').argv;\n\nif (argv.s) {\n util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: ');\n}\nconsole.log(\n (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '')\n);\n````\n\n***\n\n $ ./bool.js -s\n The cat says: meow\n \n $ ./bool.js -sp\n The cat says: meow.\n\n $ ./bool.js -sp --fr\n Le chat dit: miaou.\n\nAnd non-hypenated options too! Just use `argv._`!\n-------------------------------------------------\n \nnonopt.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\nconsole.log('(%d,%d)', argv.x, argv.y);\nconsole.log(argv._);\n````\n\n***\n\n $ ./nonopt.js -x 6.82 -y 3.35 moo\n (6.82,3.35)\n [ 'moo' ]\n \n $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz\n (0.54,1.12)\n [ 'foo', 'bar', 'baz' ]\n\nPlus, Optimist comes with .usage() and .demand()!\n-------------------------------------------------\n\ndivide.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n .usage('Usage: $0 -x [num] -y [num]')\n .demand(['x','y'])\n .argv;\n\nconsole.log(argv.x / argv.y);\n````\n\n***\n \n $ ./divide.js -x 55 -y 11\n 5\n \n $ node ./divide.js -x 4.91 -z 2.51\n Usage: node ./divide.js -x [num] -y [num]\n\n Options:\n -x [required]\n -y [required]\n\n Missing required arguments: y\n\nEVEN MORE HOLY COW\n------------------\n\ndefault_singles.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n .default('x', 10)\n .default('y', 10)\n .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n $ ./default_singles.js -x 5\n 15\n\ndefault_hash.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n .default({ x : 10, y : 10 })\n .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n $ ./default_hash.js -y 7\n 17\n\nAnd if you really want to get all descriptive about it...\n---------------------------------------------------------\n\nboolean_single.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n .boolean('v')\n .argv\n;\nconsole.dir(argv);\n````\n\n***\n\n $ ./boolean_single.js -v foo bar baz\n true\n [ 'bar', 'baz', 'foo' ]\n\nboolean_double.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n .boolean(['x','y','z'])\n .argv\n;\nconsole.dir([ argv.x, argv.y, argv.z ]);\nconsole.dir(argv._);\n````\n\n***\n\n $ ./boolean_double.js -x -z one two three\n [ true, false, true ]\n [ 'one', 'two', 'three' ]\n\nOptimist is here to help...\n---------------------------\n\nYou can describe parameters for help messages and set aliases. Optimist figures\nout how to format a handy help string automatically.\n\nline_count.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n .usage('Count the lines in a file.\\nUsage: $0')\n .demand('f')\n .alias('f', 'file')\n .describe('f', 'Load a file')\n .argv\n;\n\nvar fs = require('fs');\nvar s = fs.createReadStream(argv.file);\n\nvar lines = 0;\ns.on('data', function (buf) {\n lines += buf.toString().match(/\\n/g).length;\n});\n\ns.on('end', function () {\n console.log(lines);\n});\n````\n\n***\n\n $ node line_count.js\n Count the lines in a file.\n Usage: node ./line_count.js\n\n Options:\n -f, --file Load a file [required]\n\n Missing required arguments: f\n\n $ node line_count.js --file line_count.js \n 20\n \n $ node line_count.js -f line_count.js \n 20\n\nmethods\n=======\n\nBy itself,\n\n````javascript\nrequire('optimist').argv\n`````\n\nwill use `process.argv` array to construct the `argv` object.\n\nYou can pass in the `process.argv` yourself:\n\n````javascript\nrequire('optimist')([ '-x', '1', '-y', '2' ]).argv\n````\n\nor use .parse() to do the same thing:\n\n````javascript\nrequire('optimist').parse([ '-x', '1', '-y', '2' ])\n````\n\nThe rest of these methods below come in just before the terminating `.argv`.\n\n.alias(key, alias)\n------------------\n\nSet key names as equivalent such that updates to a key will propagate to aliases\nand vice-versa.\n\nOptionally `.alias()` can take an object that maps keys to aliases.\n\n.default(key, value)\n--------------------\n\nSet `argv[key]` to `value` if no option was specified on `process.argv`.\n\nOptionally `.default()` can take an object that maps keys to default values.\n\n.demand(key)\n------------\n\nIf `key` is a string, show the usage information and exit if `key` wasn't\nspecified in `process.argv`.\n\nIf `key` is a number, demand at least as many non-option arguments, which show\nup in `argv._`.\n\nIf `key` is an Array, demand each element.\n\n.describe(key, desc)\n--------------------\n\nDescribe a `key` for the generated usage information.\n\nOptionally `.describe()` can take an object that maps keys to descriptions.\n\n.options(key, opt)\n------------------\n\nInstead of chaining together `.alias().demand().default()`, you can specify\nkeys in `opt` for each of the chainable methods.\n\nFor example:\n\n````javascript\nvar argv = require('optimist')\n .options('f', {\n alias : 'file',\n default : '/etc/passwd',\n })\n .argv\n;\n````\n\nis the same as\n\n````javascript\nvar argv = require('optimist')\n .alias('f', 'file')\n .default('f', '/etc/passwd')\n .argv\n;\n````\n\nOptionally `.options()` can take an object that maps keys to `opt` parameters.\n\n.usage(message)\n---------------\n\nSet a usage message to show which commands to use. Inside `message`, the string\n`$0` will get interpolated to the current script name or node command for the\npresent script similar to how `$0` works in bash or perl.\n\n.check(fn)\n----------\n\nCheck that certain conditions are met in the provided arguments.\n\nIf `fn` throws or returns `false`, show the thrown error, usage information, and\nexit.\n\n.boolean(key)\n-------------\n\nInterpret `key` as a boolean. If a non-flag option follows `key` in\n`process.argv`, that string won't get set as the value of `key`.\n\nIf `key` never shows up as a flag in `process.arguments`, `argv[key]` will be\n`false`.\n\nIf `key` is an Array, interpret all the elements as booleans.\n\n.string(key)\n------------\n\nTell the parser logic not to interpret `key` as a number or boolean.\nThis can be useful if you need to preserve leading zeros in an input.\n\nIf `key` is an Array, interpret all the elements as strings.\n\n.wrap(columns)\n--------------\n\nFormat usage output to wrap at `columns` many columns.\n\n.help()\n-------\n\nReturn the generated usage string.\n\n.showHelp(fn=console.error)\n---------------------------\n\nPrint the usage data using `fn` for printing.\n\n.parse(args)\n------------\n\nParse `args` instead of `process.argv`. Returns the `argv` object.\n\n.argv\n-----\n\nGet the arguments as a plain old object.\n\nArguments without a corresponding flag show up in the `argv._` array.\n\nThe script name or node command is available at `argv.$0` similarly to how `$0`\nworks in bash or perl.\n\nparsing tricks\n==============\n\nstop parsing\n------------\n\nUse `--` to stop parsing flags and stuff the remainder into `argv._`.\n\n $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4\n { _: [ '-c', '3', '-d', '4' ],\n '$0': 'node ./examples/reflect.js',\n a: 1,\n b: 2 }\n\nnegate fields\n-------------\n\nIf you want to explicity set a field to false instead of just leaving it\nundefined or to override a default you can do `--no-key`.\n\n $ node examples/reflect.js -a --no-b\n { _: [],\n '$0': 'node ./examples/reflect.js',\n a: true,\n b: false }\n\nnumbers\n-------\n\nEvery argument that looks like a number (`!isNaN(Number(arg))`) is converted to\none. This way you can just `net.createConnection(argv.port)` and you can add\nnumbers out of `argv` with `+` without having that mean concatenation,\nwhich is super frustrating.\n\nduplicates\n----------\n\nIf you specify a flag multiple times it will get turned into an array containing\nall the values in order.\n\n $ node examples/reflect.js -x 5 -x 8 -x 0\n { _: [],\n '$0': 'node ./examples/reflect.js',\n x: [ 5, 8, 0 ] }\n\ndot notation\n------------\n\nWhen you use dots (`.`s) in argument names, an implicit object path is assumed.\nThis lets you organize arguments into nested objects.\n\n $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5\n { _: [],\n '$0': 'node ./examples/reflect.js',\n foo: { bar: { baz: 33 }, quux: 5 } }\n\nshort numbers\n-------------\n\nShort numeric `head -n5` style argument work too:\n\n $ node reflect.js -n123 -m456\n { '3': true,\n '6': true,\n _: [],\n '$0': 'node ./reflect.js',\n n: 123,\n m: 456 }\n\ninstallation\n============\n\nWith [npm](http://github.com/isaacs/npm), just do:\n npm install optimist\n \nor clone this project on github:\n\n git clone http://github.com/substack/node-optimist.git\n\nTo run the tests with [expresso](http://github.com/visionmedia/expresso),\njust do:\n \n expresso\n\ninspired By\n===========\n\nThis module is loosely inspired by Perl's\n[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm).\n", - "readmeFilename": "readme.markdown", - "bugs": { - "url": "https://github.com/substack/node-optimist/issues" - }, - "homepage": "https://github.com/substack/node-optimist", - "_id": "optimist@0.6.1", - "_from": "optimist@0.6.x" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/readme.markdown b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/readme.markdown deleted file mode 100644 index b74b4372..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/readme.markdown +++ /dev/null @@ -1,513 +0,0 @@ -# DEPRECATION NOTICE - -I don't want to maintain this module anymore since I just use -[minimist](https://npmjs.org/package/minimist), the argument parsing engine, -directly instead nowadays. - -See [yargs](https://github.com/chevex/yargs) for the modern, pirate-themed -successor to optimist. - -[![yarrrrrrrgs!](http://i.imgur.com/4WFGVJ9.png)](https://github.com/chevex/yargs) - -You should also consider [nomnom](https://github.com/harthur/nomnom). - -optimist -======== - -Optimist is a node.js library for option parsing for people who hate option -parsing. More specifically, this module is for people who like all the --bells -and -whistlz of program usage but think optstrings are a waste of time. - -With optimist, option parsing doesn't have to suck (as much). - -[![build status](https://secure.travis-ci.org/substack/node-optimist.png)](http://travis-ci.org/substack/node-optimist) - -examples -======== - -With Optimist, the options are just a hash! No optstrings attached. -------------------------------------------------------------------- - -xup.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist').argv; - -if (argv.rif - 5 * argv.xup > 7.138) { - console.log('Buy more riffiwobbles'); -} -else { - console.log('Sell the xupptumblers'); -} -```` - -*** - - $ ./xup.js --rif=55 --xup=9.52 - Buy more riffiwobbles - - $ ./xup.js --rif 12 --xup 8.1 - Sell the xupptumblers - -![This one's optimistic.](http://substack.net/images/optimistic.png) - -But wait! There's more! You can do short options: -------------------------------------------------- - -short.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist').argv; -console.log('(%d,%d)', argv.x, argv.y); -```` - -*** - - $ ./short.js -x 10 -y 21 - (10,21) - -And booleans, both long and short (and grouped): ----------------------------------- - -bool.js: - -````javascript -#!/usr/bin/env node -var util = require('util'); -var argv = require('optimist').argv; - -if (argv.s) { - util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: '); -} -console.log( - (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '') -); -```` - -*** - - $ ./bool.js -s - The cat says: meow - - $ ./bool.js -sp - The cat says: meow. - - $ ./bool.js -sp --fr - Le chat dit: miaou. - -And non-hypenated options too! Just use `argv._`! -------------------------------------------------- - -nonopt.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist').argv; -console.log('(%d,%d)', argv.x, argv.y); -console.log(argv._); -```` - -*** - - $ ./nonopt.js -x 6.82 -y 3.35 moo - (6.82,3.35) - [ 'moo' ] - - $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz - (0.54,1.12) - [ 'foo', 'bar', 'baz' ] - -Plus, Optimist comes with .usage() and .demand()! -------------------------------------------------- - -divide.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .usage('Usage: $0 -x [num] -y [num]') - .demand(['x','y']) - .argv; - -console.log(argv.x / argv.y); -```` - -*** - - $ ./divide.js -x 55 -y 11 - 5 - - $ node ./divide.js -x 4.91 -z 2.51 - Usage: node ./divide.js -x [num] -y [num] - - Options: - -x [required] - -y [required] - - Missing required arguments: y - -EVEN MORE HOLY COW ------------------- - -default_singles.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .default('x', 10) - .default('y', 10) - .argv -; -console.log(argv.x + argv.y); -```` - -*** - - $ ./default_singles.js -x 5 - 15 - -default_hash.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .default({ x : 10, y : 10 }) - .argv -; -console.log(argv.x + argv.y); -```` - -*** - - $ ./default_hash.js -y 7 - 17 - -And if you really want to get all descriptive about it... ---------------------------------------------------------- - -boolean_single.js - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .boolean('v') - .argv -; -console.dir(argv); -```` - -*** - - $ ./boolean_single.js -v foo bar baz - true - [ 'bar', 'baz', 'foo' ] - -boolean_double.js - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .boolean(['x','y','z']) - .argv -; -console.dir([ argv.x, argv.y, argv.z ]); -console.dir(argv._); -```` - -*** - - $ ./boolean_double.js -x -z one two three - [ true, false, true ] - [ 'one', 'two', 'three' ] - -Optimist is here to help... ---------------------------- - -You can describe parameters for help messages and set aliases. Optimist figures -out how to format a handy help string automatically. - -line_count.js - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .usage('Count the lines in a file.\nUsage: $0') - .demand('f') - .alias('f', 'file') - .describe('f', 'Load a file') - .argv -; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines); -}); -```` - -*** - - $ node line_count.js - Count the lines in a file. - Usage: node ./line_count.js - - Options: - -f, --file Load a file [required] - - Missing required arguments: f - - $ node line_count.js --file line_count.js - 20 - - $ node line_count.js -f line_count.js - 20 - -methods -======= - -By itself, - -````javascript -require('optimist').argv -````` - -will use `process.argv` array to construct the `argv` object. - -You can pass in the `process.argv` yourself: - -````javascript -require('optimist')([ '-x', '1', '-y', '2' ]).argv -```` - -or use .parse() to do the same thing: - -````javascript -require('optimist').parse([ '-x', '1', '-y', '2' ]) -```` - -The rest of these methods below come in just before the terminating `.argv`. - -.alias(key, alias) ------------------- - -Set key names as equivalent such that updates to a key will propagate to aliases -and vice-versa. - -Optionally `.alias()` can take an object that maps keys to aliases. - -.default(key, value) --------------------- - -Set `argv[key]` to `value` if no option was specified on `process.argv`. - -Optionally `.default()` can take an object that maps keys to default values. - -.demand(key) ------------- - -If `key` is a string, show the usage information and exit if `key` wasn't -specified in `process.argv`. - -If `key` is a number, demand at least as many non-option arguments, which show -up in `argv._`. - -If `key` is an Array, demand each element. - -.describe(key, desc) --------------------- - -Describe a `key` for the generated usage information. - -Optionally `.describe()` can take an object that maps keys to descriptions. - -.options(key, opt) ------------------- - -Instead of chaining together `.alias().demand().default()`, you can specify -keys in `opt` for each of the chainable methods. - -For example: - -````javascript -var argv = require('optimist') - .options('f', { - alias : 'file', - default : '/etc/passwd', - }) - .argv -; -```` - -is the same as - -````javascript -var argv = require('optimist') - .alias('f', 'file') - .default('f', '/etc/passwd') - .argv -; -```` - -Optionally `.options()` can take an object that maps keys to `opt` parameters. - -.usage(message) ---------------- - -Set a usage message to show which commands to use. Inside `message`, the string -`$0` will get interpolated to the current script name or node command for the -present script similar to how `$0` works in bash or perl. - -.check(fn) ----------- - -Check that certain conditions are met in the provided arguments. - -If `fn` throws or returns `false`, show the thrown error, usage information, and -exit. - -.boolean(key) -------------- - -Interpret `key` as a boolean. If a non-flag option follows `key` in -`process.argv`, that string won't get set as the value of `key`. - -If `key` never shows up as a flag in `process.arguments`, `argv[key]` will be -`false`. - -If `key` is an Array, interpret all the elements as booleans. - -.string(key) ------------- - -Tell the parser logic not to interpret `key` as a number or boolean. -This can be useful if you need to preserve leading zeros in an input. - -If `key` is an Array, interpret all the elements as strings. - -.wrap(columns) --------------- - -Format usage output to wrap at `columns` many columns. - -.help() -------- - -Return the generated usage string. - -.showHelp(fn=console.error) ---------------------------- - -Print the usage data using `fn` for printing. - -.parse(args) ------------- - -Parse `args` instead of `process.argv`. Returns the `argv` object. - -.argv ------ - -Get the arguments as a plain old object. - -Arguments without a corresponding flag show up in the `argv._` array. - -The script name or node command is available at `argv.$0` similarly to how `$0` -works in bash or perl. - -parsing tricks -============== - -stop parsing ------------- - -Use `--` to stop parsing flags and stuff the remainder into `argv._`. - - $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4 - { _: [ '-c', '3', '-d', '4' ], - '$0': 'node ./examples/reflect.js', - a: 1, - b: 2 } - -negate fields -------------- - -If you want to explicity set a field to false instead of just leaving it -undefined or to override a default you can do `--no-key`. - - $ node examples/reflect.js -a --no-b - { _: [], - '$0': 'node ./examples/reflect.js', - a: true, - b: false } - -numbers -------- - -Every argument that looks like a number (`!isNaN(Number(arg))`) is converted to -one. This way you can just `net.createConnection(argv.port)` and you can add -numbers out of `argv` with `+` without having that mean concatenation, -which is super frustrating. - -duplicates ----------- - -If you specify a flag multiple times it will get turned into an array containing -all the values in order. - - $ node examples/reflect.js -x 5 -x 8 -x 0 - { _: [], - '$0': 'node ./examples/reflect.js', - x: [ 5, 8, 0 ] } - -dot notation ------------- - -When you use dots (`.`s) in argument names, an implicit object path is assumed. -This lets you organize arguments into nested objects. - - $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5 - { _: [], - '$0': 'node ./examples/reflect.js', - foo: { bar: { baz: 33 }, quux: 5 } } - -short numbers -------------- - -Short numeric `head -n5` style argument work too: - - $ node reflect.js -n123 -m456 - { '3': true, - '6': true, - _: [], - '$0': 'node ./reflect.js', - n: 123, - m: 456 } - -installation -============ - -With [npm](http://github.com/isaacs/npm), just do: - npm install optimist - -or clone this project on github: - - git clone http://github.com/substack/node-optimist.git - -To run the tests with [expresso](http://github.com/visionmedia/expresso), -just do: - - expresso - -inspired By -=========== - -This module is loosely inspired by Perl's -[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm). diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/_.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/_.js deleted file mode 100644 index d9c58b36..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/_.js +++ /dev/null @@ -1,71 +0,0 @@ -var spawn = require('child_process').spawn; -var test = require('tap').test; - -test('dotSlashEmpty', testCmd('./bin.js', [])); - -test('dotSlashArgs', testCmd('./bin.js', [ 'a', 'b', 'c' ])); - -test('nodeEmpty', testCmd('node bin.js', [])); - -test('nodeArgs', testCmd('node bin.js', [ 'x', 'y', 'z' ])); - -test('whichNodeEmpty', function (t) { - var which = spawn('which', ['node']); - - which.stdout.on('data', function (buf) { - t.test( - testCmd(buf.toString().trim() + ' bin.js', []) - ); - t.end(); - }); - - which.stderr.on('data', function (err) { - assert.error(err); - t.end(); - }); -}); - -test('whichNodeArgs', function (t) { - var which = spawn('which', ['node']); - - which.stdout.on('data', function (buf) { - t.test( - testCmd(buf.toString().trim() + ' bin.js', [ 'q', 'r' ]) - ); - t.end(); - }); - - which.stderr.on('data', function (err) { - t.error(err); - t.end(); - }); -}); - -function testCmd (cmd, args) { - - return function (t) { - var to = setTimeout(function () { - assert.fail('Never got stdout data.') - }, 5000); - - var oldDir = process.cwd(); - process.chdir(__dirname + '/_'); - - var cmds = cmd.split(' '); - - var bin = spawn(cmds[0], cmds.slice(1).concat(args.map(String))); - process.chdir(oldDir); - - bin.stderr.on('data', function (err) { - t.error(err); - t.end(); - }); - - bin.stdout.on('data', function (buf) { - clearTimeout(to); - var _ = JSON.parse(buf.toString()); - t.same(_.map(String), args.map(String)); - t.end(); - }); - }; -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/_/argv.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/_/argv.js deleted file mode 100644 index 3d096062..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/_/argv.js +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -console.log(JSON.stringify(process.argv)); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/_/bin.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/_/bin.js deleted file mode 100755 index 4a18d85f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/_/bin.js +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node -var argv = require('../../index').argv -console.log(JSON.stringify(argv._)); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/dash.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/dash.js deleted file mode 100644 index af8ed6fc..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/dash.js +++ /dev/null @@ -1,31 +0,0 @@ -var optimist = require('../index'); -var test = require('tap').test; - -test('-', function (t) { - t.plan(5); - t.deepEqual( - fix(optimist.parse([ '-n', '-' ])), - { n: '-', _: [] } - ); - t.deepEqual( - fix(optimist.parse([ '-' ])), - { _: [ '-' ] } - ); - t.deepEqual( - fix(optimist.parse([ '-f-' ])), - { f: '-', _: [] } - ); - t.deepEqual( - fix(optimist([ '-b', '-' ]).boolean('b').argv), - { b: true, _: [ '-' ] } - ); - t.deepEqual( - fix(optimist([ '-s', '-' ]).string('s').argv), - { s: '-', _: [] } - ); -}); - -function fix (obj) { - delete obj.$0; - return obj; -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/parse.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/parse.js deleted file mode 100644 index d320f433..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/parse.js +++ /dev/null @@ -1,446 +0,0 @@ -var optimist = require('../index'); -var path = require('path'); -var test = require('tap').test; - -var $0 = 'node ./' + path.relative(process.cwd(), __filename); - -test('short boolean', function (t) { - var parse = optimist.parse([ '-b' ]); - t.same(parse, { b : true, _ : [], $0 : $0 }); - t.same(typeof parse.b, 'boolean'); - t.end(); -}); - -test('long boolean', function (t) { - t.same( - optimist.parse([ '--bool' ]), - { bool : true, _ : [], $0 : $0 } - ); - t.end(); -}); - -test('bare', function (t) { - t.same( - optimist.parse([ 'foo', 'bar', 'baz' ]), - { _ : [ 'foo', 'bar', 'baz' ], $0 : $0 } - ); - t.end(); -}); - -test('short group', function (t) { - t.same( - optimist.parse([ '-cats' ]), - { c : true, a : true, t : true, s : true, _ : [], $0 : $0 } - ); - t.end(); -}); - -test('short group next', function (t) { - t.same( - optimist.parse([ '-cats', 'meow' ]), - { c : true, a : true, t : true, s : 'meow', _ : [], $0 : $0 } - ); - t.end(); -}); - -test('short capture', function (t) { - t.same( - optimist.parse([ '-h', 'localhost' ]), - { h : 'localhost', _ : [], $0 : $0 } - ); - t.end(); -}); - -test('short captures', function (t) { - t.same( - optimist.parse([ '-h', 'localhost', '-p', '555' ]), - { h : 'localhost', p : 555, _ : [], $0 : $0 } - ); - t.end(); -}); - -test('long capture sp', function (t) { - t.same( - optimist.parse([ '--pow', 'xixxle' ]), - { pow : 'xixxle', _ : [], $0 : $0 } - ); - t.end(); -}); - -test('long capture eq', function (t) { - t.same( - optimist.parse([ '--pow=xixxle' ]), - { pow : 'xixxle', _ : [], $0 : $0 } - ); - t.end() -}); - -test('long captures sp', function (t) { - t.same( - optimist.parse([ '--host', 'localhost', '--port', '555' ]), - { host : 'localhost', port : 555, _ : [], $0 : $0 } - ); - t.end(); -}); - -test('long captures eq', function (t) { - t.same( - optimist.parse([ '--host=localhost', '--port=555' ]), - { host : 'localhost', port : 555, _ : [], $0 : $0 } - ); - t.end(); -}); - -test('mixed short bool and capture', function (t) { - t.same( - optimist.parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ], $0 : $0, - } - ); - t.end(); -}); - -test('short and long', function (t) { - t.same( - optimist.parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ], $0 : $0, - } - ); - t.end(); -}); - -test('no', function (t) { - t.same( - optimist.parse([ '--no-moo' ]), - { moo : false, _ : [], $0 : $0 } - ); - t.end(); -}); - -test('multi', function (t) { - t.same( - optimist.parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), - { v : ['a','b','c'], _ : [], $0 : $0 } - ); - t.end(); -}); - -test('comprehensive', function (t) { - t.same( - optimist.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' ], - $0 : $0 - } - ); - t.end(); -}); - -test('nums', function (t) { - var argv = optimist.parse([ - '-x', '1234', - '-y', '5.67', - '-z', '1e7', - '-w', '10f', - '--hex', '0xdeadbeef', - '789', - ]); - t.same(argv, { - x : 1234, - y : 5.67, - z : 1e7, - w : '10f', - hex : 0xdeadbeef, - _ : [ 789 ], - $0 : $0 - }); - t.same(typeof argv.x, 'number'); - t.same(typeof argv.y, 'number'); - t.same(typeof argv.z, 'number'); - t.same(typeof argv.w, 'string'); - t.same(typeof argv.hex, 'number'); - t.same(typeof argv._[0], 'number'); - t.end(); -}); - -test('flag boolean', function (t) { - var parse = optimist([ '-t', 'moo' ]).boolean(['t']).argv; - t.same(parse, { t : true, _ : [ 'moo' ], $0 : $0 }); - t.same(typeof parse.t, 'boolean'); - t.end(); -}); - -test('flag boolean value', function (t) { - var parse = optimist(['--verbose', 'false', 'moo', '-t', 'true']) - .boolean(['t', 'verbose']).default('verbose', true).argv; - - t.same(parse, { - verbose: false, - t: true, - _: ['moo'], - $0 : $0 - }); - - t.same(typeof parse.verbose, 'boolean'); - t.same(typeof parse.t, 'boolean'); - t.end(); -}); - -test('flag boolean default false', function (t) { - var parse = optimist(['moo']) - .boolean(['t', 'verbose']) - .default('verbose', false) - .default('t', false).argv; - - t.same(parse, { - verbose: false, - t: false, - _: ['moo'], - $0 : $0 - }); - - t.same(typeof parse.verbose, 'boolean'); - t.same(typeof parse.t, 'boolean'); - t.end(); - -}); - -test('boolean groups', function (t) { - var parse = optimist([ '-x', '-z', 'one', 'two', 'three' ]) - .boolean(['x','y','z']).argv; - - t.same(parse, { - x : true, - y : false, - z : true, - _ : [ 'one', 'two', 'three' ], - $0 : $0 - }); - - t.same(typeof parse.x, 'boolean'); - t.same(typeof parse.y, 'boolean'); - t.same(typeof parse.z, 'boolean'); - t.end(); -}); - -test('newlines in params' , function (t) { - var args = optimist.parse([ '-s', "X\nX" ]) - t.same(args, { _ : [], s : "X\nX", $0 : $0 }); - - // reproduce in bash: - // VALUE="new - // line" - // node program.js --s="$VALUE" - args = optimist.parse([ "--s=X\nX" ]) - t.same(args, { _ : [], s : "X\nX", $0 : $0 }); - t.end(); -}); - -test('strings' , function (t) { - var s = optimist([ '-s', '0001234' ]).string('s').argv.s; - t.same(s, '0001234'); - t.same(typeof s, 'string'); - - var x = optimist([ '-x', '56' ]).string('x').argv.x; - t.same(x, '56'); - t.same(typeof x, 'string'); - t.end(); -}); - -test('stringArgs', function (t) { - var s = optimist([ ' ', ' ' ]).string('_').argv._; - 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('slashBreak', function (t) { - t.same( - optimist.parse([ '-I/foo/bar/baz' ]), - { I : '/foo/bar/baz', _ : [], $0 : $0 } - ); - t.same( - optimist.parse([ '-xyz/foo/bar/baz' ]), - { x : true, y : true, z : '/foo/bar/baz', _ : [], $0 : $0 } - ); - t.end(); -}); - -test('alias', function (t) { - var argv = optimist([ '-f', '11', '--zoom', '55' ]) - .alias('z', 'zoom') - .argv - ; - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.f, 11); - t.end(); -}); - -test('multiAlias', function (t) { - var argv = optimist([ '-f', '11', '--zoom', '55' ]) - .alias('z', [ 'zm', 'zoom' ]) - .argv - ; - 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('boolean default true', function (t) { - var argv = optimist.options({ - sometrue: { - boolean: true, - default: true - } - }).argv; - - t.equal(argv.sometrue, true); - t.end(); -}); - -test('boolean default false', function (t) { - var argv = optimist.options({ - somefalse: { - boolean: true, - default: false - } - }).argv; - - t.equal(argv.somefalse, false); - t.end(); -}); - -test('nested dotted objects', function (t) { - var argv = optimist([ - '--foo.bar', '3', '--foo.baz', '4', - '--foo.quux.quibble', '5', '--foo.quux.o_O', - '--beep.boop' - ]).argv; - - 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 = optimist(aliased) - .boolean('herp') - .alias('h', 'herp') - .argv; - var propertyArgv = optimist(regular) - .boolean('herp') - .alias('h', 'herp') - .argv; - var expected = { - herp: true, - h: true, - '_': [ 'derp' ], - '$0': $0, - }; - - 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 = { - herp: { alias: 'h', boolean: true } - }; - var aliasedArgv = optimist(aliased) - .options(opts) - .argv; - var propertyArgv = optimist(regular).options(opts).argv; - var expected = { - herp: true, - h: true, - '_': [ 'derp' ], - '$0': $0, - }; - - 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 = { - herp: { alias: 'h', boolean: true } - }; - var aliasedArgv = optimist(aliased) - .boolean('h') - .alias('h', 'herp') - .argv; - var propertyArgv = optimist(regular) - .boolean('h') - .alias('h', 'herp') - .argv; - var expected = { - herp: true, - h: true, - '_': [ ], - '$0': $0, - }; - - 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 = optimist(['--boool', '--other=true']).boolean('boool').argv; - - t.same(parsed.boool, true); - t.same(parsed.other, 'true'); - - parsed = optimist(['--boool', '--other=false']).boolean('boool').argv; - - t.same(parsed.boool, true); - t.same(parsed.other, 'false'); - t.end(); -}); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/parse_modified.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/parse_modified.js deleted file mode 100644 index a57dc84e..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/parse_modified.js +++ /dev/null @@ -1,14 +0,0 @@ -var optimist = require('../'); -var test = require('tap').test; - -test('parse with modifier functions' , function (t) { - t.plan(1); - - var argv = optimist().boolean('b').parse([ '-b', '123' ]); - t.deepEqual(fix(argv), { b: true, _: ['123'] }); -}); - -function fix (obj) { - delete obj.$0; - return obj; -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/short.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/short.js deleted file mode 100644 index b2c38ad8..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/short.js +++ /dev/null @@ -1,16 +0,0 @@ -var optimist = require('../index'); -var test = require('tap').test; - -test('-n123', function (t) { - t.plan(1); - var parse = optimist.parse([ '-n123' ]); - t.equal(parse.n, 123); -}); - -test('-123', function (t) { - t.plan(3); - var parse = optimist.parse([ '-123', '456' ]); - t.equal(parse['1'], true); - t.equal(parse['2'], true); - t.equal(parse['3'], 456); -}); diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/usage.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/usage.js deleted file mode 100644 index 300454c1..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/usage.js +++ /dev/null @@ -1,292 +0,0 @@ -var Hash = require('hashish'); -var optimist = require('../index'); -var test = require('tap').test; - -test('usageFail', function (t) { - var r = checkUsage(function () { - return optimist('-x 10 -z 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .demand(['x','y']) - .argv; - }); - t.same( - r.result, - { x : 10, z : 20, _ : [], $0 : './usage' } - ); - - t.same( - r.errors.join('\n').split(/\n+/), - [ - 'Usage: ./usage -x NUM -y NUM', - 'Options:', - ' -x [required]', - ' -y [required]', - 'Missing required arguments: y', - ] - ); - t.same(r.logs, []); - t.ok(r.exit); - t.end(); -}); - - -test('usagePass', function (t) { - var r = checkUsage(function () { - return optimist('-x 10 -y 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .demand(['x','y']) - .argv; - }); - t.same(r, { - result : { x : 10, y : 20, _ : [], $0 : './usage' }, - errors : [], - logs : [], - exit : false, - }); - t.end(); -}); - -test('checkPass', function (t) { - var r = checkUsage(function () { - return optimist('-x 10 -y 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .check(function (argv) { - if (!('x' in argv)) throw 'You forgot about -x'; - if (!('y' in argv)) throw 'You forgot about -y'; - }) - .argv; - }); - t.same(r, { - result : { x : 10, y : 20, _ : [], $0 : './usage' }, - errors : [], - logs : [], - exit : false, - }); - t.end(); -}); - -test('checkFail', function (t) { - var r = checkUsage(function () { - return optimist('-x 10 -z 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .check(function (argv) { - if (!('x' in argv)) throw 'You forgot about -x'; - if (!('y' in argv)) throw 'You forgot about -y'; - }) - .argv; - }); - - t.same( - r.result, - { x : 10, z : 20, _ : [], $0 : './usage' } - ); - - t.same( - r.errors.join('\n').split(/\n+/), - [ - 'Usage: ./usage -x NUM -y NUM', - 'You forgot about -y' - ] - ); - - t.same(r.logs, []); - t.ok(r.exit); - t.end(); -}); - -test('checkCondPass', function (t) { - function checker (argv) { - return 'x' in argv && 'y' in argv; - } - - var r = checkUsage(function () { - return optimist('-x 10 -y 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .check(checker) - .argv; - }); - t.same(r, { - result : { x : 10, y : 20, _ : [], $0 : './usage' }, - errors : [], - logs : [], - exit : false, - }); - t.end(); -}); - -test('checkCondFail', function (t) { - function checker (argv) { - return 'x' in argv && 'y' in argv; - } - - var r = checkUsage(function () { - return optimist('-x 10 -z 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .check(checker) - .argv; - }); - - t.same( - r.result, - { x : 10, z : 20, _ : [], $0 : './usage' } - ); - - t.same( - r.errors.join('\n').split(/\n+/).join('\n'), - 'Usage: ./usage -x NUM -y NUM\n' - + 'Argument check failed: ' + checker.toString() - ); - - t.same(r.logs, []); - t.ok(r.exit); - t.end(); -}); - -test('countPass', function (t) { - var r = checkUsage(function () { - return optimist('1 2 3 --moo'.split(' ')) - .usage('Usage: $0 [x] [y] [z] {OPTIONS}') - .demand(3) - .argv; - }); - t.same(r, { - result : { _ : [ '1', '2', '3' ], moo : true, $0 : './usage' }, - errors : [], - logs : [], - exit : false, - }); - t.end(); -}); - -test('countFail', function (t) { - var r = checkUsage(function () { - return optimist('1 2 --moo'.split(' ')) - .usage('Usage: $0 [x] [y] [z] {OPTIONS}') - .demand(3) - .argv; - }); - t.same( - r.result, - { _ : [ '1', '2' ], moo : true, $0 : './usage' } - ); - - t.same( - r.errors.join('\n').split(/\n+/), - [ - 'Usage: ./usage [x] [y] [z] {OPTIONS}', - 'Not enough non-option arguments: got 2, need at least 3', - ] - ); - - t.same(r.logs, []); - t.ok(r.exit); - t.end(); -}); - -test('defaultSingles', function (t) { - var r = checkUsage(function () { - return optimist('--foo 50 --baz 70 --powsy'.split(' ')) - .default('foo', 5) - .default('bar', 6) - .default('baz', 7) - .argv - ; - }); - t.same(r.result, { - foo : '50', - bar : 6, - baz : '70', - powsy : true, - _ : [], - $0 : './usage', - }); - t.end(); -}); - -test('defaultAliases', function (t) { - var r = checkUsage(function () { - return optimist('') - .alias('f', 'foo') - .default('f', 5) - .argv - ; - }); - t.same(r.result, { - f : '5', - foo : '5', - _ : [], - $0 : './usage', - }); - t.end(); -}); - -test('defaultHash', function (t) { - var r = checkUsage(function () { - return optimist('--foo 50 --baz 70'.split(' ')) - .default({ foo : 10, bar : 20, quux : 30 }) - .argv - ; - }); - t.same(r.result, { - _ : [], - $0 : './usage', - foo : 50, - baz : 70, - bar : 20, - quux : 30, - }); - t.end(); -}); - -test('rebase', function (t) { - t.equal( - optimist.rebase('/home/substack', '/home/substack/foo/bar/baz'), - './foo/bar/baz' - ); - t.equal( - optimist.rebase('/home/substack/foo/bar/baz', '/home/substack'), - '../../..' - ); - t.equal( - optimist.rebase('/home/substack/foo', '/home/substack/pow/zoom.txt'), - '../pow/zoom.txt' - ); - t.end(); -}); - -function checkUsage (f) { - - var exit = false; - - process._exit = process.exit; - process._env = process.env; - process._argv = process.argv; - - process.exit = function (t) { exit = true }; - process.env = Hash.merge(process.env, { _ : 'node' }); - process.argv = [ './usage' ]; - - var errors = []; - var logs = []; - - console._error = console.error; - console.error = function (msg) { errors.push(msg) }; - console._log = console.log; - console.log = function (msg) { logs.push(msg) }; - - var result = f(); - - process.exit = process._exit; - process.env = process._env; - process.argv = process._argv; - - console.error = console._error; - console.log = console._log; - - return { - errors : errors, - logs : logs, - exit : exit, - result : result, - }; -}; diff --git a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/whitespace.js b/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/whitespace.js deleted file mode 100644 index 90b90752..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/node_modules/optimist/test/whitespace.js +++ /dev/null @@ -1,8 +0,0 @@ -var optimist = require('../'); -var test = require('tap').test; - -test('whitespace should be whitespace' , function (t) { - t.plan(1); - var x = optimist.parse([ '-x', '\t' ]).x; - t.equal(x, '\t'); -}); diff --git a/node_modules/gulp-sass/node_modules/node-sass/package.json b/node_modules/gulp-sass/node_modules/node-sass/package.json deleted file mode 100644 index 05244d93..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "author": { - "name": "Andrew Nesbitt", - "email": "andrewnez@gmail.com", - "url": "http://andrew.github.com" - }, - "name": "node-sass", - "description": "wrapper around libsass", - "version": "0.8.1", - "homepage": "https://github.com/andrew/node-sass", - "keywords": [ - "sass", - "css", - "libsass" - ], - "bugs": { - "url": "https://github.com/andrew/node-sass/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/andrew/node-sass/blob/master/LICENSE" - } - ], - "main": "./sass.js", - "repository": { - "type": "git", - "url": "git://github.com/andrew/node-sass.git" - }, - "scripts": { - "install": "node build.js", - "test": "mocha test", - "pretest": "jshint .", - "prepublish": "bash scripts/prepublish.sh" - }, - "bin": { - "node-sass": "bin/node-sass" - }, - "gypfile": true, - "engines": { - "node": ">=0.10.0" - }, - "dependencies": { - "mkdirp": "0.3.x", - "optimist": "0.6.x", - "node-watch": "0.3.x", - "mocha": "1.13.x", - "chalk": "~0.3.0", - "nan": "~0.6.0" - }, - "devDependencies": { - "jshint": "~2.4.0" - }, - "readme": "##node-sass\n\n[![Build Status](https://secure.travis-ci.org/andrew/node-sass.png?branch=master)](https://travis-ci.org/andrew/node-sass)\n\nNode-sass is a library that provides binding for Node.js to [libsass](https://github.com/hcatlin/libsass), the C version of the popular stylesheet preprocessor, Sass.\n\nIt allows you to natively compile .scss files to css at incredible speed and automatically via a connect middleware.\n\nFind it on npm: \n\n## Install\n\n npm install node-sass\n\n## Usage\n\n```javascript\nvar sass = require('node-sass');\nsass.render({\n\tfile: scss_filename,\n\tsuccess: callback\n\t[, options..]\n\t});\n// OR\nvar css = sass.renderSync({\n\tdata: scss_content\n\t[, options..]\n});\n```\n\n### Options\n\nThe API for using node-sass has changed, so that now there is only one variable - an options hash. Some of these options are optional, and in some circumstances some are mandatory.\n\n#### file\n`file` is a `String` of the path to an `scss` file for libsass to render. One of this or `data` options are required, for both render and renderSync.\n\n#### data\n`data` is a `String` containing the scss to be rendered by libsass. One of this or `file` options are required, for both render and renderSync. It is recommended that you use the `includePaths` option in conjunction with this, as otherwise libsass may have trouble finding files imported via the `@import` directive.\n\n#### success\n`success` is a `Function` to be called upon successful rendering of the scss to css. This option is required but only for the render function. If provided to renderSync it will be ignored.\n\n#### error\n`error` is a `Function` to be called upon occurance of an error when rendering the scss to css. This option is optional, and only applies to the render function. If provided to renderSync it will be ignored.\n\n#### includePaths\n`includePaths` is an `Array` of path `String`s to look for any `@import`ed files. It is recommended that you use this option if you are using the `data` option and have **any** `@import` directives, as otherwise libsass may not find your depended-on files.\n\n#### outputStyle\n`outputStyle` is a `String` to determine how the final CSS should be rendered. Its value should be one of `'nested', 'expanded', 'compact', 'compressed'`.\n[Important: currently the argument `outputStyle` has some problem which may cause the output css becomes nothing because of the libsass, so you should not use it now!]\n\n#### sourceComments\n`sourceComments` is a `String` to determine what debug information is included in the output file. Its value should be one of `'none', 'normal', 'map'`. The default is `'none'`.\nThe `map` option will create the source map file in your CSS destination.\n[Important: `souceComments` is only supported when using the `file` option, and does nothing when using `data` flag.]\n\n#### sourceMap\nIf your `sourceComments` option is set to `map`, `sourceMap` allows setting a new path context for the referenced Sass files. \nThe source map describes a path from your CSS file location, into the the folder where the Sass files are located. In most occasions this will work out-of-the-box but, in some cases, you may need to set a different output. \n\n### Examples\n\n```javascript\nvar sass = require('node-sass');\nsass.render({\n\tdata: 'body{background:blue; a{color:black;}}',\n\tsuccess: function(css){\n \t\tconsole.log(css)\n\t},\n\terror: function(error) {\n\t\tconsole.log(error);\n\t},\n\tincludePaths: [ 'lib/', 'mod/' ],\n\toutputStyle: 'compressed'\n});\n// OR\nconsole.log(sass.renderSync({\n\tdata: 'body{background:blue; a{color:black;}}'),\n\toutputStyle: 'compressed'\n});\n```\n\n### Edge-case behaviours\n\n* In the case that both `file` and `data` options are set, node-sass will only attempt to honour the `file` directive.\n\n## Connect/Express middleware\n\nRecompile `.scss` files automatically for connect and express based http servers\n\n```javascript\nvar server = connect.createServer(\n sass.middleware({\n src: __dirname\n , dest: __dirname + '/public'\n , debug: true\n , outputStyle: 'compressed'\n , prefix: '/prefix'\n }),\n connect.static('/prefix', __dirname + '/public')\n);\n```\n\nHeavily inspired by \n\n## DocPad Plugin\n\n[@jking90](https://github.com/jking90) wrote a [DocPad](http://docpad.org/) plugin that compiles `.scss` files using node-sass: \n\n## Grunt extension\n\n[@sindresorhus](https://github.com/sindresorhus/) has created a set of grunt tasks based on node-sass: \n\n## Gulp extension\n\n[@dlmanning](https://github.com/dlmanning/) has created a gulp sass plugin based on node-sass: \n\n## Harp\n\n[@sintaxi](https://github.com/sintaxi)’s Harp web server implicitly compiles `.scss` files using node-sass: \n\n## Example App\n\nThere is also an example connect app here: \n\n## Rebuilding binaries\n\nNode-sass includes pre-compiled binaries for popular platforms, to add a binary for your platform follow these steps:\n\nCheck out the project:\n\n git clone https://github.com/andrew/node-sass.git\n cd node-sass\n git submodule init\n git submodule update\n npm install\n npm install -g node-gyp\n node-gyp rebuild\n\nReplace the prebuild binary with your newly generated one\n\n cp build/Release/binding.node precompiled/*your-platform*/binding.node\n\n## Command Line Interface\n\nThe interface for command-line usage is fairly simplistic at this stage, as seen in the following usage section.\n\nOutput will be saved with the same name as input SASS file into the current working directory if it's omitted.\n\n### Usage\n `node-sass [options] []`\n\n **Options:**\n \n --output-style CSS output style (nested|expanded|compact|compressed) [default: \"nested\"]\n --source-comments Include debug info in output (none|normal|map) [default: \"none\"]\n --include-path Path to look for @import-ed files [default: cwd]\n --help, -h Print usage info\n\n## Post-install Build\n\nInstall runs a series of Mocha tests to see if your machine can use the pre-built `libsass` which will save some time during install. If any tests fail it will build from source.\n\nIf you know the pre-built version will work and do not want to wait for the tests to run you can skip the tests by setting the environment variable `SKIP_NODE_SASS_TESTS` to true.\n\n SKIP_NODE_SASS_TESTS=true npm install\n\n## Contributors\nSpecial thanks to the following people for submitting patches:\n\nDean Mao\nBrett Wilkins\nlitek\ngonghao\nDylan Greene\n\n### Note on Patches/Pull Requests\n\n * Fork the project.\n * Make your feature addition or bug fix.\n * Add documentation if necessary.\n * Add tests for it. This is important so I don't break it in a future version unintentionally.\n * Send a pull request. Bonus points for topic branches.\n\n## Copyright\n\nCopyright (c) 2013 Andrew Nesbitt. See [LICENSE](https://github.com/andrew/node-sass/blob/master/LICENSE) for details.\n", - "readmeFilename": "README.md", - "_id": "node-sass@0.8.1", - "_from": "node-sass@~0.8.1" -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/sass.js b/node_modules/gulp-sass/node_modules/node-sass/sass.js deleted file mode 100644 index 0eb00fab..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/sass.js +++ /dev/null @@ -1,101 +0,0 @@ -var binding; -var fs = require('fs'); -var path = require('path'); - -var v8 = 'v8-' + /[0-9]+\.[0-9]+/.exec(process.versions.v8)[0]; -var modPath = path.join(__dirname, 'bin', process.platform + '-' + process.arch + '-' + v8, 'binding'); -try { - if (fs.realpathSync(__dirname + '/build')) { - // use the build version if it exists - binding = require(__dirname + '/build/Release/binding'); - } -} catch (e) { - try { - fs.realpathSync(modPath + '.node'); - binding = require(modPath); - } catch (ex) { - // No binary! - throw new Error('`'+ modPath + '.node` is missing. Try reinstalling `node-sass`?'); - } -} - -var SASS_OUTPUT_STYLE = { - nested: 0, - expanded: 1, - compact: 2, - compressed: 3 - }; - -var SASS_SOURCE_COMMENTS = { - none: 0, - // This is called default in libsass, but is a reserved keyword here - normal: 1, - map: 2 - }; - -var prepareOptions = function(options) { - var paths, style, comments; - options = typeof options !== 'object' ? {} : options; - paths = options.include_paths || options.includePaths || []; - style = SASS_OUTPUT_STYLE[options.output_style || options.outputStyle] || 0; - comments = SASS_SOURCE_COMMENTS[options.source_comments || options.sourceComments] || 0; - - return { - paths: paths, - style: style, - comments: comments - }; -}; - -var deprecatedRender = function(css, callback, options) { - options = prepareOptions(options); - var errCallback = function(err) { - callback(err); - }; - var oldCallback = function(css) { - callback(null, css); - }; - return binding.render(css, oldCallback, errCallback, options.paths.join(':'), options.style, options.comments); -}; - -var deprecatedRenderSync = function(css, options) { - options = prepareOptions(options); - return binding.renderSync(css, options.paths.join(':'), options.style, options.comments); -}; - -exports.render = function(options) { - var newOptions; - - if (typeof arguments[0] === 'string') { - return deprecatedRender.apply(this, arguments); - } - - newOptions = prepareOptions(options); - options.error = options.error || function(){}; - - if (options.file !== undefined && options.file !== null) { - return binding.renderFile(options.file, options.success, options.error, newOptions.paths.join(path.delimiter), newOptions.style, newOptions.comments, options.sourceMap); - } - - //Assume data is present if file is not. binding/libsass will tell the user otherwise! - return binding.render(options.data, options.success, options.error, newOptions.paths.join(path.delimiter), newOptions.style); -}; - -exports.renderSync = function(options) { - var newOptions; - - if (typeof arguments[0] === 'string') { - return deprecatedRenderSync.apply(this, arguments); - } - - newOptions = prepareOptions(options); - - if (options.file !== undefined && options.file !== null) { - return binding.renderFileSync(options.file, newOptions.paths.join(path.delimiter), newOptions.style, newOptions.comments); - } - - //Assume data is present if file is not. binding/libsass will tell the user otherwise! - return binding.renderSync(options.data, newOptions.paths.join(path.delimiter), newOptions.style); -}; - -exports.middleware = require('./lib/middleware'); diff --git a/node_modules/gulp-sass/node_modules/node-sass/sass_context_wrapper.cpp b/node_modules/gulp-sass/node_modules/node-sass/sass_context_wrapper.cpp deleted file mode 100644 index 71f8bd4f..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/sass_context_wrapper.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "sass_context_wrapper.h" -#include - -extern "C" { - using namespace std; - - sass_context_wrapper* sass_new_context_wrapper() - { - return (sass_context_wrapper*) calloc(1, sizeof(sass_context_wrapper)); - } - - void sass_free_context_wrapper(sass_context_wrapper* ctx_w) - { - if (ctx_w->ctx) sass_free_context(ctx_w->ctx); - if (ctx_w->fctx) sass_free_file_context(ctx_w->fctx); - - delete ctx_w->callback; - delete ctx_w->errorCallback; - - free(ctx_w); - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/sass_context_wrapper.h b/node_modules/gulp-sass/node_modules/node-sass/sass_context_wrapper.h deleted file mode 100644 index 2992415c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/sass_context_wrapper.h +++ /dev/null @@ -1,21 +0,0 @@ -#include "libsass/sass_interface.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct sass_context_wrapper { - sass_context* ctx; - sass_file_context* fctx; - uv_work_t request; - NanCallback* callback; - NanCallback* errorCallback; -}; - -struct sass_context_wrapper* sass_new_context_wrapper(void); -void sass_free_context_wrapper(struct sass_context_wrapper* ctx); - -#ifdef __cplusplus -} -#endif diff --git a/node_modules/gulp-sass/node_modules/node-sass/scripts/prepublish.sh b/node_modules/gulp-sass/node_modules/node-sass/scripts/prepublish.sh deleted file mode 100755 index 887d129d..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/scripts/prepublish.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -DIRECTORY="../node-sass-binaries" - -if [ "$CI" == "true" ]; then - echo "Skipping prepublish on CI builds"; -elif [ -d "$DIRECTORY" ]; then - echo "Copying binaries to bin" - cp -R $DIRECTORY/*-v8-* bin/ -else - echo "Skipping bin copy. Please clone https://github.com/andrew/node-sass-binaries for prebuilt binaries"; -fi \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/test/cli.js b/node_modules/gulp-sass/node_modules/node-sass/test/cli.js deleted file mode 100644 index 98ed3305..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/test/cli.js +++ /dev/null @@ -1,159 +0,0 @@ -var path = require('path'), - assert = require('assert'), - fs = require('fs'), - exec = require('child_process').exec, - cli = require('../lib/cli'), - - cliPath = path.resolve(__dirname, '../bin/node-sass'), - sampleFilename = path.resolve(__dirname, 'sample.scss'); - -var expectedSampleCompressed = '#navbar {width:80%;height:23px;}\ -#navbar ul {list-style-type:none;}\ -#navbar li {float:left;}\ -#navbar li a {font-weight:bold;}'; - -var expectedSampleNoComments = '#navbar {\n\ - width: 80%;\n\ - height: 23px; }\n\ -\n\ -#navbar ul {\n\ - list-style-type: none; }\n\ -\n\ -#navbar li {\n\ - float: left; }\n\ - #navbar li a {\n\ - font-weight: bold; }\n'; - -describe('cli', function() { - it('should print help when run with no arguments', function(done) { - exec('node ' + cliPath, function(err, stdout, stderr) { - done(assert(stderr.indexOf('Compile .scss files with node-sass') === 0)); - }); - }); - - it('should compile sample.scss as sample.css', function(done) { - var resultPath = path.join(__dirname, 'sample.css'); - - exec('node ' + cliPath + ' ' + sampleFilename, { - cwd: __dirname - }, function() { - - fs.exists(resultPath, function(exists) { - assert(exists); - fs.unlink(resultPath, done); - }); - }); - }); - - it('should compile sample.scss to ../out.css', function(done) { - var resultPath = path.resolve(__dirname, '../out.css'); - - exec('node ' + cliPath + ' ' + sampleFilename + ' ../out.css', { - cwd: __dirname - }, function() { - - fs.exists(resultPath, function(exists) { - assert(exists); - fs.unlink(resultPath, done); - }); - }); - }); - - it('should compile with --include-path option', function(done){ - var emitter = cli([ - '--include-path', path.join(__dirname, 'lib'), - '--include-path', path.join(__dirname, 'functions'), - path.join(__dirname, 'include_path.scss') - ]); - emitter.on('error', done); - emitter.on('write', function(err, file, css){ - assert.equal(css.trim(), 'body {\n background: red;\n color: #0000fe; }'); - fs.unlink(file, done); - }); - }); - - it('should compile with the --output-style', function(done){ - var emitter = cli(['--output-style', 'compressed', path.join(__dirname, 'sample.scss')]); - emitter.on('error', done); - emitter.on('write', function(err, file, css){ - assert.equal(css, expectedSampleCompressed); - fs.unlink(file, done); - }); - }); - - it('should compile with the --source-comments option', function(done){ - var emitter = cli(['--source-comments', 'none', path.join(__dirname, 'sample.scss')]); - emitter.on('error', done); - emitter.on('write', function(err, file, css){ - assert.equal(css, expectedSampleNoComments); - fs.unlink(file, done); - }); - }); - - it('should write the output to the file specified with the --output option', function(done){ - var resultPath = path.join(__dirname, '../output.css'); - var emitter = cli(['--output', resultPath, path.join(__dirname, 'sample.scss')]); - emitter.on('error', done); - emitter.on('write', function(){ - fs.exists(resultPath, function(exists) { - assert(exists); - fs.unlink(resultPath, done); - }); - }); - }); - - it('should compile with the --source-map option', function(done){ - var emitter = cli([path.join(__dirname, 'sample.scss'), '--source-map']); - emitter.on('error', done); - emitter.on('write-source-map', function(err, file) { - assert.equal(file, path.join(__dirname, '../sample.css.map')); - fs.exists(file, function(exists) { - assert(exists); - }); - }); - emitter.on('done', function() { - fs.unlink(path.join(__dirname, '../sample.css.map'), function() { - fs.unlink(path.join(__dirname, '../sample.css'), function() { - done(); - }); - }); - }); - }); - - it('should compile with the --source-map option with specific filename', function(done){ - var emitter = cli([path.join(__dirname, 'sample.scss'), '--source-map', path.join(__dirname, '../sample.map')]); - emitter.on('error', done); - emitter.on('write-source-map', function(err, file) { - assert.equal(file, path.join(__dirname, '../sample.map')); - fs.exists(file, function(exists) { - assert(exists); - }); - }); - emitter.on('done', function() { - fs.unlink(path.join(__dirname, '../sample.map'), function() { - fs.unlink(path.join(__dirname, '../sample.css'), function() { - done(); - }); - }); - }); - }); - - it('should compile a sourceMap if --source-comments="map", but the --source-map option is excluded', function(done){ - var emitter = cli([path.join(__dirname, 'sample.scss'), '--source-comments', 'map']); - emitter.on('error', done); - emitter.on('write-source-map', function(err, file) { - assert.equal(file, path.join(__dirname, '../sample.css.map')); - fs.exists(file, function(exists) { - assert(exists); - }); - }); - emitter.on('done', function() { - fs.unlink(path.join(__dirname, '../sample.css.map'), function() { - fs.unlink(path.join(__dirname, '../sample.css'), function() { - done(); - }); - }); - }); - }); - -}); diff --git a/node_modules/gulp-sass/node_modules/node-sass/test/functions/colorBlue.scss b/node_modules/gulp-sass/node_modules/node-sass/test/functions/colorBlue.scss deleted file mode 100644 index 4fa618cb..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/test/functions/colorBlue.scss +++ /dev/null @@ -1,3 +0,0 @@ -@function colorBlue() { - @return #0000fe; -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/test/include_path.scss b/node_modules/gulp-sass/node_modules/node-sass/test/include_path.scss deleted file mode 100644 index 8ee2b7fe..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/test/include_path.scss +++ /dev/null @@ -1,4 +0,0 @@ -@import "vars"; -@import "colorBlue"; - -body { background: $color; color: colorBlue(); } diff --git a/node_modules/gulp-sass/node_modules/node-sass/test/large_test.scss b/node_modules/gulp-sass/node_modules/node-sass/test/large_test.scss deleted file mode 100644 index 662ae857..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/test/large_test.scss +++ /dev/null @@ -1,11869 +0,0 @@ -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/test/lib/vars.scss b/node_modules/gulp-sass/node_modules/node-sass/test/lib/vars.scss deleted file mode 100644 index a625dd9c..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/test/lib/vars.scss +++ /dev/null @@ -1 +0,0 @@ -$color: red; \ No newline at end of file diff --git a/node_modules/gulp-sass/node_modules/node-sass/test/mem_test_render.js b/node_modules/gulp-sass/node_modules/node-sass/test/mem_test_render.js deleted file mode 100644 index 477cc249..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/test/mem_test_render.js +++ /dev/null @@ -1,19 +0,0 @@ -// var util = require('util'); -// var sass = require('../sass'); -// var fs = require('fs'); -// -// var bigScssStr = fs.readFileSync(require('path').resolve(__dirname,'large_test.scss')); -// var numTestCases = 1000; -// var numCompiled = 0; -// console.log(util.inspect(process.memoryUsage())); -// for (var i = 0; i < numTestCases; i++) { -// sass.render({ -// data: bigScssStr, -// success: function() { -// numCompiled++; -// if (numCompiled === numTestCases) { -// console.log(util.inspect(process.memoryUsage())); -// } -// } -// }); -// } diff --git a/node_modules/gulp-sass/node_modules/node-sass/test/mem_test_renderSync.js b/node_modules/gulp-sass/node_modules/node-sass/test/mem_test_renderSync.js deleted file mode 100644 index 16115b77..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/test/mem_test_renderSync.js +++ /dev/null @@ -1,12 +0,0 @@ -// var util = require('util'); -// var sass = require('../sass'); -// var fs = require('fs'); -// -// var bigScssStr = fs.readFileSync(require('path').resolve(__dirname,'./large_test.scss')); -// var numTestCases = 1000; -// var numCompiled = 0; -// console.log(util.inspect(process.memoryUsage())); -// for (var i = 0; i < numTestCases; i++) { -// sass.renderSync({data: bigScssStr}); -// } -// console.log(util.inspect(process.memoryUsage())); diff --git a/node_modules/gulp-sass/node_modules/node-sass/test/sample.scss b/node_modules/gulp-sass/node_modules/node-sass/test/sample.scss deleted file mode 100644 index 75086c30..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/test/sample.scss +++ /dev/null @@ -1,13 +0,0 @@ -#navbar { - width: 80%; - height: 23px; -} -#navbar ul { - list-style-type: none; -} -#navbar li { - float: left; - a { - font-weight: bold; - } -} diff --git a/node_modules/gulp-sass/node_modules/node-sass/test/source_comments_spec.js b/node_modules/gulp-sass/node_modules/node-sass/test/source_comments_spec.js deleted file mode 100644 index 39e88dbd..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/test/source_comments_spec.js +++ /dev/null @@ -1,36 +0,0 @@ -/*jshint multistr:true */ -var sass = require('../sass'); -var assert = require('assert'); - -var sampleFilename = require('path').resolve(__dirname, 'sample.scss'); - -var expectedCommentsScssStr = '/* line 1, ' + sampleFilename + ' */\n\ -#navbar {\n\ - width: 80%;\n\ - height: 23px; }\n\ -\n\ -/* line 5, ' + sampleFilename + ' */\n\ -#navbar ul {\n\ - list-style-type: none; }\n\ -\n\ -/* line 8, ' + sampleFilename + ' */\n\ -#navbar li {\n\ - float: left; }\n\ - /* line 10, ' + sampleFilename + ' */\n\ - #navbar li a {\n\ - font-weight: bold; }\n'; - -describe("compile file with source comments", function() { - it("should compile with render and comment outputs", function(done) { - sass.render({ - file: sampleFilename, - source_comments: 'normal', - success: function (css) { - done(assert.equal(css, expectedCommentsScssStr)); - }, - error: function (error) { - done(error); - } - }); - }); -}); diff --git a/node_modules/gulp-sass/node_modules/node-sass/test/test.js b/node_modules/gulp-sass/node_modules/node-sass/test/test.js deleted file mode 100644 index 29cae8f2..00000000 --- a/node_modules/gulp-sass/node_modules/node-sass/test/test.js +++ /dev/null @@ -1,174 +0,0 @@ -/*jshint multistr:true */ -var sass = require('../sass'); -var assert = require('assert'); -var path = require('path'); -var badSampleFilename = 'sample.scss'; -var sampleFilename = path.resolve(__dirname, 'sample.scss'); - -var scssStr = '#navbar {\ - width: 80%;\ - height: 23px; }\ - #navbar ul {\ - list-style-type: none; }\ - #navbar li {\ - float: left;\ - a {\ - font-weight: bold; }}\ - @mixin keyAnimation($name, $attr, $value) {\ - @-webkit-keyframes #{$name} {\ - 0% { #{$attr}: $value; }\ - }\ - }'; - -// Note that the bad -var badInput = '#navbar \n\ - width: 80%'; - -var expectedRender = '#navbar {\n\ - width: 80%;\n\ - height: 23px; }\n\ -\n\ -#navbar ul {\n\ - list-style-type: none; }\n\ -\n\ -#navbar li {\n\ - float: left; }\n\ - #navbar li a {\n\ - font-weight: bold; }\n'; - -describe("DEPRECATED: compile scss", function() { - it("should compile with render", function(done) { - sass.render(scssStr, function(err) { - done(err); - }); - }); - - it("should compile with renderSync", function(done) { - done(assert.ok(sass.renderSync(scssStr))); - }); - - it("should match compiled string with render", function(done) { - sass.render(scssStr, function(err, css) { - if (!err) { - done(assert.equal(css, expectedRender)); - } else { - done(err); - } - }); - }); - - it("should match compiled string with renderSync", function(done) { - done(assert.equal(sass.renderSync(scssStr), expectedRender)); - }); - - it("should throw an exception for bad input", function(done) { - done(assert.throws(function() { - sass.renderSync(badInput); - })); - }); -}); - -describe("compile scss", function() { - it("should compile with render", function(done) { - sass.render({ - data: scssStr, - success: function(css) { - done(assert.ok(css)); - } - }); - }); - - it("should compile with renderSync", function(done) { - done(assert.ok(sass.renderSync({data: scssStr}))); - }); - - it("should match compiled string with render", function(done) { - sass.render({ - data: scssStr, - success: function(css) { - done(assert.equal(css, expectedRender)); - }, - error: function(error) { - done(error); - } - }); - }); - - it("should have a error status of 1 for bad css", function(done) { - sass.render({ - data: '{zzz}', - success: function(css) { - console.log(css); - }, - error: function(error, status) { - assert.equal(status, 1); - done(); - } - }); - }); - - it("should match compiled string with renderSync", function(done) { - done(assert.equal(sass.renderSync({data: scssStr}), expectedRender)); - }); - - it("should throw an exception for bad input", function(done) { - done(assert.throws(function() { - sass.renderSync({data: badInput}); - })); - }); -}); - -describe("compile file with include paths", function(){ - it("should compile with render", function(done) { - sass.render({ - file: path.resolve(__dirname, "include_path.scss"), - includePaths: [path.resolve(__dirname, "lib"), path.resolve(__dirname, "functions")], - success: function (css) { - done(assert.equal(css, "body {\n background: red;\n color: #0000fe; }\n")); - }, - error: function (error) { - done(error); - } - }); - }); -}); - -describe("compile file", function() { - it("should compile with render", function(done) { - sass.render({ - file: sampleFilename, - success: function (css) { - done(assert.equal(css, expectedRender)); - }, - error: function (error) { - done(error); - } - }); - }); - - it("should compile with renderSync", function(done) { - done(assert.ok(sass.renderSync({file: sampleFilename}))); - }); - - it("should match compiled string with render", function(done) { - sass.render({ - file: sampleFilename, - success: function(css) { - done(assert.equal(css, expectedRender)); - }, - error: function(error) { - done(error); - } - }); - }); - - it("should match compiled string with renderSync", function(done) { - done(assert.equal(sass.renderSync({file: sampleFilename}), expectedRender)); - }); - - it("should throw an exception for bad input", function(done) { - done(assert.throws(function() { - sass.renderSync({file: badSampleFilename}); - })); - }); -}); diff --git a/node_modules/gulp-sass/package.json b/node_modules/gulp-sass/package.json deleted file mode 100644 index ce35cb85..00000000 --- a/node_modules/gulp-sass/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "gulp-sass", - "version": "0.6.0", - "description": "Gulp plugin for sass", - "main": "index.js", - "scripts": { - "test": "node test/test.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/dlmanning/gulp-sass" - }, - "keywords": [ - "gulpplugin", - "sass", - "gulp" - ], - "author": { - "name": "David Manning" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/dlmanning/gulp-sass/issues" - }, - "dependencies": { - "node-sass": "~0.8.1", - "gulp-util": "~2.2.5", - "map-stream": "~0.1.0" - }, - "devDependencies": { - "tape": "~2.3.2", - "concat-stream": "~1.4.1" - }, - "jshintConfig": { - "laxcomma": true - }, - "readme": "[![Build Status](https://travis-ci.org/dlmanning/gulp-sass.png?branch=master)](https://travis-ci.org/dlmanning/gulp-sass)\n\ngulp-sass\n=========\n\nSASS plugin for [gulp](https://github.com/wearefractal/gulp).\n\n#Install\n\n```\nnpm install gulp-sass\n```\n\n#Basic Usage\n\nSomething like this:\n\n```javascript\nvar gulp = require('gulp');\nvar sass = require('gulp-sass')\n\ngulp.task('sass', function () {\n\tgulp.src('./scss/*.scss')\n\t\t.pipe(sass())\n\t\t.pipe(gulp.dest('./css'));\n});\n```\n\nOptions passed as a hash into `sass()` will be passed along to [`node-sass`](https://github.com/andrew/node-sass)\n\n## gulp-sass specific options\n\n#### `errLogToConsole: true`\n\nIf you pass `errLogToConsole: true` into the options hash, sass errors will be logged to the console instead of generating a `gutil.PluginError` object. Use this option with `gulp.watch` to keep gulp from stopping every time you mess up your sass.\n\n#### `onSuccess: callback`\n\nPass in your own callback to be called upon successful compilaton by node-sass. The callback has the form `callback(css)`, and is passed the compiled css as a string. Note: This *does not* prevent gulp-sass's default behavior of writing the output css file.\n\n#### `onError: callback`\n\nPass in your own callback to be called upon a sass error from node-sass. The callback has the form `callback(err)`, where err is the error string generated by libsass. Note: this *does* prevent an actual `gulpPluginError` object from being created.\n\n#Imports and Partials\n\ngulp-sass now automatically passes along the directory of every scss file it parses as an include path for node-sass. This means that as long as you specify your includes relative to path of your scss file, everything will just work.\n\nscss/includes/_settings.scss:\n\n```scss\n$blue: #3bbfce;\n$margin: 16px;\n```\n\nscss/style.scss:\n\n```scss\n@import \"includes/settings\";\n\n.content-navigation {\n border-color: $blue;\n color:\n darken($blue, 9%);\n}\n\n.border {\n padding: $margin / 2;\n margin: $margin / 2;\n border-color: $blue;\n}\n```\n\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/dlmanning/gulp-sass", - "_id": "gulp-sass@0.6.0", - "_from": "gulp-sass@" -} diff --git a/node_modules/gulp-sass/test/ref/inheritance.css b/node_modules/gulp-sass/test/ref/inheritance.css deleted file mode 100644 index 1e58035d..00000000 --- a/node_modules/gulp-sass/test/ref/inheritance.css +++ /dev/null @@ -1,10 +0,0 @@ -.error, .badError { - border: #f00; - background: #fdd; } - -.error.intrusion { - font-size: 1.3em; - font-weight: bold; } - -.badError { - border-width: 3px; } diff --git a/node_modules/gulp-sass/test/ref/mixins.css b/node_modules/gulp-sass/test/ref/mixins.css deleted file mode 100644 index f1a00f57..00000000 --- a/node_modules/gulp-sass/test/ref/mixins.css +++ /dev/null @@ -1,8 +0,0 @@ -#data { - float: left; - margin-left: 10px; } - #data th { - text-align: center; - font-weight: bold; } - #data td, #data th { - padding: 2px; } diff --git a/node_modules/gulp-sass/test/ref/nesting.css b/node_modules/gulp-sass/test/ref/nesting.css deleted file mode 100644 index 5a7d6bb7..00000000 --- a/node_modules/gulp-sass/test/ref/nesting.css +++ /dev/null @@ -1,9 +0,0 @@ -table.hl { - margin: 2em 0; } - table.hl td.ln { - text-align: right; } - -li { - font-family: serif; - font-weight: bold; - font-size: 1.2em; } diff --git a/node_modules/gulp-sass/test/ref/variables.css b/node_modules/gulp-sass/test/ref/variables.css deleted file mode 100644 index 217dd34b..00000000 --- a/node_modules/gulp-sass/test/ref/variables.css +++ /dev/null @@ -1,8 +0,0 @@ -.content-navigation { - border-color: #3bbfce; - color: #2ca2af; } - -.border { - padding: 8px; - margin: 8px; - border-color: #3bbfce; } diff --git a/node_modules/gulp-sass/test/scss/includes/_cats.scss b/node_modules/gulp-sass/test/scss/includes/_cats.scss deleted file mode 100644 index 7096c21a..00000000 --- a/node_modules/gulp-sass/test/scss/includes/_cats.scss +++ /dev/null @@ -1,2 +0,0 @@ -$blue: #3bbfce; -$margin: 16px; \ No newline at end of file diff --git a/node_modules/gulp-sass/test/scss/inheritance.scss b/node_modules/gulp-sass/test/scss/inheritance.scss deleted file mode 100644 index f3caa927..00000000 --- a/node_modules/gulp-sass/test/scss/inheritance.scss +++ /dev/null @@ -1,16 +0,0 @@ -@import "includes/cats"; - -.error { - border: #f00; - background: #fdd; -} - -.error.intrusion { - font-size: 1.3em; - font-weight: bold; -} - -.badError { - @extend .error; - border-width: 3px; -} \ No newline at end of file diff --git a/node_modules/gulp-sass/test/scss/mixins.scss b/node_modules/gulp-sass/test/scss/mixins.scss deleted file mode 100644 index 3b81f73e..00000000 --- a/node_modules/gulp-sass/test/scss/mixins.scss +++ /dev/null @@ -1,17 +0,0 @@ -@mixin table-base { - th { - text-align: center; - font-weight: bold; - } - td, th {padding: 2px} -} - -@mixin left($dist) { - float: left; - margin-left: $dist; -} - -#data { - @include left(10px); - @include table-base; -} \ No newline at end of file diff --git a/node_modules/gulp-sass/test/scss/nesting.scss b/node_modules/gulp-sass/test/scss/nesting.scss deleted file mode 100644 index d3300ea8..00000000 --- a/node_modules/gulp-sass/test/scss/nesting.scss +++ /dev/null @@ -1,14 +0,0 @@ -table.hl { - margin: 2em 0; - td.ln { - text-align: right; - } -} - -li { - font: { - family: serif; - weight: bold; - size: 1.2em; - } -} diff --git a/node_modules/gulp-sass/test/scss/variables.scss b/node_modules/gulp-sass/test/scss/variables.scss deleted file mode 100644 index 7c5de0f0..00000000 --- a/node_modules/gulp-sass/test/scss/variables.scss +++ /dev/null @@ -1,14 +0,0 @@ -$blue: #3bbfce; -$margin: 16px; - -.content-navigation { - border-color: $blue; - color: - darken($blue, 9%); -} - -.border { - padding: $margin / 2; - margin: $margin / 2; - border-color: $blue; -} \ No newline at end of file diff --git a/node_modules/gulp-sass/test/test.js b/node_modules/gulp-sass/test/test.js deleted file mode 100644 index 978c0a5b..00000000 --- a/node_modules/gulp-sass/test/test.js +++ /dev/null @@ -1,109 +0,0 @@ -var assert = require('assert'); -var gsass = require('../'); -var gutil = require('gulp-util'); -var fs = require('fs'); -var path = require('path'); -var test = require('tape'); - -function createVinyl(sassFileName, contents) { - var base = path.join(__dirname, 'scss'); - var filePath = path.join(base, sassFileName); - - return new gutil.File({ - cwd: __dirname, - base: base, - path: filePath, - contents: contents || fs.readFileSync(filePath) - }); -} - -test('pass file when isNull()', function (t) { - var stream = gsass(); - var emptyFile = { - isNull: function () { return true; } - }; - stream.on('data', function (data) { - t.equal(data, emptyFile); - t.end(); - }); - stream.write(emptyFile); -}); - -// test('emit error when file isStream()', function (t) { -// var stream = gsass(); -// var streamFile = { -// isNull: function () { return false; }, -// isStream: function () { return true; } -// }; -// stream.on() -// }); - -test('compile a single sass file', function (t) { - var sassFile = createVinyl('mixins.scss'); - - var stream = gsass(); - stream.on('data', function (cssFile) { - t.ok(cssFile, 'cssFile should exist'); - t.ok(cssFile.path, 'cssFile.path should exist'); - t.ok(cssFile.relative, 'cssFile.relative should exist'); - t.ok(cssFile.contents, 'cssFile.contents should exist'); - t.equal(cssFile.path, path.join(__dirname, 'scss', 'mixins.css')); - t.equal( - fs.readFileSync(path.join(__dirname, 'ref/mixins.css'), 'utf8'), - cssFile.contents.toString(), - 'file compiles correctly to css' - ); - t.end(); - }) - stream.write(sassFile); -}); - -test('compile multiple sass files', function (t) { - var files = [ - createVinyl('inheritance.scss'), - createVinyl('mixins.scss'), - createVinyl('nesting.scss'), - createVinyl('variables.scss') - ]; - - t.plan(files.length * 4); - var stream = gsass(); - - stream.on('data', function (cssFile) { - t.ok(cssFile, 'cssFile exists'); - t.ok(cssFile.path, 'cssFile.path exists'); - t.ok(cssFile.relative, 'cssFile.relative exists'); - t.ok(cssFile.contents, 'cssFile.contents exists'); - }); - - files.forEach(function (file) { - stream.write(file); - }); -}); - -test('emit error on sass errors', function (t) { - var stream = gsass(); - var errorFile = createVinyl('somefile.sass', - new Buffer('body { font \'Comic Sans\'; }')); - stream.on('error', function (err) { - t.equal(err.message, - 'source string:1: error: property "font" must be followed by a \':\'\n' - ); - t.end(); - }); - stream.write(errorFile); -}); - -test('call custom error callback when opts.onError is given', function (t) { - var stream = gsass({ onError: function (err) { - t.equal(err, - 'source string:1: error: property "font" must be followed by a \':\'\n' - ); - t.end(); - }}); - - var errorFile = createVinyl('somefile.sass', - new Buffer('body { font \'Comic Sans\'; }')); - - stream.write(errorFile); -}); \ No newline at end of file diff --git a/node_modules/gulp-uglify/.jshintrc b/node_modules/gulp-uglify/.jshintrc deleted file mode 100644 index 8fde0026..00000000 --- a/node_modules/gulp-uglify/.jshintrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - "node": true, - "bitwise": true, - "camelcase": false, - "curly": true, - "eqeqeq": true, - "forin": true, - "immed": true, - "latedef": true, - "newcap": true, - "noarg": true, - "nonew": true, - "noempty": true, - "undef": true, - "unused": true, - "strict": true, - "trailing": true -} \ No newline at end of file diff --git a/node_modules/gulp-uglify/.npmignore b/node_modules/gulp-uglify/.npmignore deleted file mode 100644 index 067a3b72..00000000 --- a/node_modules/gulp-uglify/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -build -components \ No newline at end of file diff --git a/node_modules/gulp-uglify/.travis.yml b/node_modules/gulp-uglify/.travis.yml deleted file mode 100644 index 994e2750..00000000 --- a/node_modules/gulp-uglify/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.9 - - 0.10 diff --git a/node_modules/gulp-uglify/CHANGELOG.md b/node_modules/gulp-uglify/CHANGELOG.md deleted file mode 100644 index a1787e85..00000000 --- a/node_modules/gulp-uglify/CHANGELOG.md +++ /dev/null @@ -1,8 +0,0 @@ -# gulp-uglify changelog - -## 0.2.0 - -- Dropped support for Node versions less than 0.9 -- Switched to using Streams2 -- Add support for generating source maps -- Add option for preserving comments diff --git a/node_modules/gulp-uglify/LICENSE.md b/node_modules/gulp-uglify/LICENSE.md deleted file mode 100644 index 77389cc4..00000000 --- a/node_modules/gulp-uglify/LICENSE.md +++ /dev/null @@ -1,20 +0,0 @@ -> Copyright (c) 2013-2014 Terin Stock -> -> 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-uglify/README.md b/node_modules/gulp-uglify/README.md deleted file mode 100644 index f0d469f4..00000000 --- a/node_modules/gulp-uglify/README.md +++ /dev/null @@ -1,81 +0,0 @@ -[![Build Status](https://travis-ci.org/terinjokes/gulp-uglify.png?branch=master)](https://travis-ci.org/terinjokes/gulp-uglify) - -## Information - - - - - - - - - - - - - -
      Packagegulp-uglify
      DescriptionMinify files with UglifyJS.
      Node Version≥ 0.9
      - -## Usage - -```javascript -var uglify = require('gulp-uglify'); - -gulp.task('compress', function() { - gulp.src('lib/*.js') - .pipe(uglify({outSourceMap: true})) - .pipe(gulp.dest('dist')) -}); -``` - -## Options - -- `mangle` - - Pass `false` to skip mangling names. - -- `output` - - Pass an object if you wish to specify additional [output - options](http://lisperator.net/uglifyjs/codegen). The defaults are - optimized for best compression. - -- `compress` - - Pass an object to specify custom [compressor - options](http://lisperator.net/uglifyjs/compress). Pass `false` to skip - compression completely. - -- `preserveComments` - - A convenience option for `options.output.comments`. Defaults to preserving no - comments. - - - `all` - - Preserve all comments in code blocks - - - `some` - - Preserve comments that start with a bang (`!`) or include a Closure - Compiler directive (`@preserve`, `@license`, `@cc_on`) - - - `function` - - Specify your own comment preservation function. You will be passed the - current node and the current comment and are expected to return either - `true` or `false`. - -You can also pass the `uglify` function any of the options [listed -here](https://github.com/mishoo/UglifyJS2#the-simple-way) to modify -UglifyJS's behavior. - - -### Source Maps - -You can have UglifyJS’s generated source maps emitted on the stream by passing -`true` for the `outSourceMap` option. The file object’s path will be based on -the input file’s, with ‘.map’ appended. - -Input source maps are no supported by this plugin at this time. - diff --git a/node_modules/gulp-uglify/index.js b/node_modules/gulp-uglify/index.js deleted file mode 100644 index c4ee594e..00000000 --- a/node_modules/gulp-uglify/index.js +++ /dev/null @@ -1,70 +0,0 @@ -'use strict'; -var through = require('through2'), - uglify = require('uglify-js'), - merge = require('deepmerge'), - Vinyl = require('vinyl'), - uglifyError = require('./lib/error.js'); - -module.exports = function(opt) { - - function minify(file, encoding, callback) { - /*jshint validthis:true */ - - if (file.isNull()) { - this.push(file); - return callback(); - } - - if (file.isStream()) { - return callback(uglifyError('Streaming not supported')); - } - - var options = merge(opt || {}, { - fromString: true, - output: {} - }); - - var mangled, - map, - sourceMap; - - if (options.outSourceMap === true) { - options.outSourceMap = file.relative + '.map'; - } - - if (options.preserveComments === 'all') { - options.output.comments = true; - } else if (options.preserveComments === 'some') { - // preserve comments with directives or that start with a bang (!) - options.output.comments = /^!|@preserve|@license|@cc_on/i; - } else if (typeof options.preserveComments === 'function') { - options.output.comments = options.preserveComments; - } - - try { - mangled = uglify.minify(String(file.contents), options); - file.contents = new Buffer(mangled.code); - this.push(file); - } catch (e) { - console.warn('Error caught from uglify: ' + e.message + ' in ' + file.path + '. Returning unminifed code'); - this.push(file); - return callback(); - } - - if (options.outSourceMap) { - sourceMap = JSON.parse(mangled.map); - sourceMap.sources = [ file.relative ]; - map = new Vinyl({ - cwd: file.cwd, - base: file.base, - path: file.path + '.map', - contents: new Buffer(JSON.stringify(sourceMap)) - }); - this.push(map); - } - - callback(); - } - - return through.obj(minify); -}; diff --git a/node_modules/gulp-uglify/lib/error.js b/node_modules/gulp-uglify/lib/error.js deleted file mode 100644 index 04f75250..00000000 --- a/node_modules/gulp-uglify/lib/error.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; -var PluginError = require('gulp-util/lib/PluginError'); - -module.exports = function uglifyError() { - var Factory = PluginError.bind.apply(PluginError, [].concat(null, 'gulp-uglify', Array.prototype.slice.call(arguments))); - return new Factory(); -}; diff --git a/node_modules/gulp-uglify/node_modules/.bin/uglifyjs b/node_modules/gulp-uglify/node_modules/.bin/uglifyjs deleted file mode 120000 index fef3468b..00000000 --- a/node_modules/gulp-uglify/node_modules/.bin/uglifyjs +++ /dev/null @@ -1 +0,0 @@ -../uglify-js/bin/uglifyjs \ No newline at end of file diff --git a/node_modules/gulp-uglify/node_modules/deepmerge/.npmignore b/node_modules/gulp-uglify/node_modules/deepmerge/.npmignore deleted file mode 100644 index 55eb9828..00000000 --- a/node_modules/gulp-uglify/node_modules/deepmerge/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules - -#jasmine -reports diff --git a/node_modules/gulp-uglify/node_modules/deepmerge/README.markdown b/node_modules/gulp-uglify/node_modules/deepmerge/README.markdown deleted file mode 100644 index 509b026e..00000000 --- a/node_modules/gulp-uglify/node_modules/deepmerge/README.markdown +++ /dev/null @@ -1,64 +0,0 @@ -deepmerge -========= - -Merge the enumerable attributes of two objects deeply. - -example -======= - -```js -var util = require('util') -var merge = require('deepmerge') - -var x = { foo: { bar: 3 }, - array: [ { does: 'work', too: [ 1, 2, 3 ] } ] } -var y = { foo: { baz: 4 }, - quux: 5, - array: [ { does: 'work', too: [ 4, 5, 6 ] }, { really: 'yes' } ] } - -console.log(util.inspect(merge(x, y), false, null)) -``` - -output: - -```js -{ foo: { bar: 3, baz: 4 }, - array: [ { does: 'work', too: [ 1, 2, 3, 4, 5, 6 ] }, { really: 'yes' } ], - quux: 5 } -``` - -methods -======= - -var merge = require('deepmerge') - -merge(x, y) ------------ - -Merge two objects `x` and `y` deeply, returning a new merged object with the -elements from both `x` and `y`. - -If an element at the same key is present for both `x` and `y`, the value from -`y` will appear in the result. - -The merge is immutable, so neither `x` nor `y` will be modified. - -The merge will also merge arrays and array values. - -install -======= - -With [npm](http://npmjs.org) do: - -``` -npm install deepmerge -``` - -test -==== - -With [npm](http://npmjs.org) do: - -``` -npm test -``` diff --git a/node_modules/gulp-uglify/node_modules/deepmerge/example/merge.js b/node_modules/gulp-uglify/node_modules/deepmerge/example/merge.js deleted file mode 100644 index ccac0a42..00000000 --- a/node_modules/gulp-uglify/node_modules/deepmerge/example/merge.js +++ /dev/null @@ -1,5 +0,0 @@ -var merge = require('../') -var x = { foo : { 'bar' : 3 } } -var y = { foo : { 'baz' : 4 }, quux : 5 } -var merged = merge(x, y) -console.dir(merged) diff --git a/node_modules/gulp-uglify/node_modules/deepmerge/index.js b/node_modules/gulp-uglify/node_modules/deepmerge/index.js deleted file mode 100644 index 182d583d..00000000 --- a/node_modules/gulp-uglify/node_modules/deepmerge/index.js +++ /dev/null @@ -1,40 +0,0 @@ -module.exports = function merge (target, src) { - var array = Array.isArray(src) - var dst = array && [] || {} - - if (array) { - target = target || [] - dst = dst.concat(target) - src.forEach(function(e, i) { - if (typeof target[i] === 'undefined') { - dst[i] = e - } else if (typeof e === 'object') { - dst[i] = merge(target[i], e) - } else { - if (target.indexOf(e) === -1) { - dst.push(e) - } - } - }) - } else { - if (target && typeof target === 'object') { - Object.keys(target).forEach(function (key) { - dst[key] = target[key] - }) - } - Object.keys(src).forEach(function (key) { - if (typeof src[key] !== 'object' || !src[key]) { - dst[key] = src[key] - } - else { - if (!target[key]) { - dst[key] = src[key] - } else { - dst[key] = merge(target[key], src[key]) - } - } - }) - } - - return dst -} diff --git a/node_modules/gulp-uglify/node_modules/deepmerge/license.txt b/node_modules/gulp-uglify/node_modules/deepmerge/license.txt deleted file mode 100644 index 2bf24b9b..00000000 --- a/node_modules/gulp-uglify/node_modules/deepmerge/license.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) - -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-uglify/node_modules/deepmerge/package.json b/node_modules/gulp-uglify/node_modules/deepmerge/package.json deleted file mode 100644 index f74847af..00000000 --- a/node_modules/gulp-uglify/node_modules/deepmerge/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "author": { - "name": "Nick Fisher" - }, - "name": "deepmerge", - "description": "A library for deep (recursive) merging of Javascript objects", - "version": "0.2.7", - "homepage": "https://github.com/nrf110/deepmerge", - "repository": { - "type": "git", - "url": "git://github.com/nrf110/deepmerge.git" - }, - "main": "index", - "engines": { - "node": ">=0.4.0" - }, - "scripts": { - "test": "tap test/*.js" - }, - "dependencies": {}, - "devDependencies": { - "tap": "~0.2.4" - }, - "readme": "deepmerge\n=========\n\nMerge the enumerable attributes of two objects deeply.\n\nexample\n=======\n\n```js\nvar util = require('util')\nvar merge = require('deepmerge')\n\nvar x = { foo: { bar: 3 },\n array: [ { does: 'work', too: [ 1, 2, 3 ] } ] }\nvar y = { foo: { baz: 4 },\n quux: 5,\n array: [ { does: 'work', too: [ 4, 5, 6 ] }, { really: 'yes' } ] }\n\nconsole.log(util.inspect(merge(x, y), false, null))\n```\n\noutput:\n\n```js\n{ foo: { bar: 3, baz: 4 },\n array: [ { does: 'work', too: [ 1, 2, 3, 4, 5, 6 ] }, { really: 'yes' } ],\n quux: 5 }\n```\n\nmethods\n=======\n\nvar merge = require('deepmerge')\n\nmerge(x, y)\n-----------\n\nMerge two objects `x` and `y` deeply, returning a new merged object with the\nelements from both `x` and `y`.\n\nIf an element at the same key is present for both `x` and `y`, the value from\n`y` will appear in the result.\n\nThe merge is immutable, so neither `x` nor `y` will be modified.\n\nThe merge will also merge arrays and array values.\n\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install deepmerge\n```\n\ntest\n====\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm test\n```\n", - "readmeFilename": "README.markdown", - "bugs": { - "url": "https://github.com/nrf110/deepmerge/issues" - }, - "_id": "deepmerge@0.2.7", - "dist": { - "shasum": "3a5ab8d37311c4d1aefb22209693afe0a91a0563" - }, - "_from": "deepmerge@~0.2.7", - "_resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-0.2.7.tgz" -} diff --git a/node_modules/gulp-uglify/node_modules/deepmerge/test/merge.js b/node_modules/gulp-uglify/node_modules/deepmerge/test/merge.js deleted file mode 100644 index 2930a9e5..00000000 --- a/node_modules/gulp-uglify/node_modules/deepmerge/test/merge.js +++ /dev/null @@ -1,211 +0,0 @@ -var merge = require('../') -var test = require('tap').test - -test('add keys in target that do not exist at the root', function (t) { - var src = { key1: 'value1', key2: 'value2' } - target = {} - - var res = merge(target, src) - - t.deepEqual(target, {}, 'merge should be immutable') - t.deepEqual(res, src) - t.end() -}) - -test('merge existing simple keys in target at the roots', function (t) { - var src = { key1: 'changed', key2: 'value2' } - var target = { key1: 'value1', key3: 'value3' } - - var expected = { - key1: 'changed', - key2: 'value2', - key3: 'value3' - } - - t.deepEqual(target, { key1: 'value1', key3: 'value3' }) - t.deepEqual(merge(target, src), expected) - t.end() -}) - -test('merge nested objects into target', function (t) { - var src = { - key1: { - subkey1: 'changed', - subkey3: 'added' - } - } - var target = { - key1: { - subkey1: 'value1', - subkey2: 'value2' - } - } - - var expected = { - key1: { - subkey1: 'changed', - subkey2: 'value2', - subkey3: 'added' - } - } - - t.deepEqual(target, { - key1: { - subkey1: 'value1', - subkey2: 'value2' - } - }) - t.deepEqual(merge(target, src), expected) - t.end() -}) - -test('replace simple key with nested object in target', function (t) { - var src = { - key1: { - subkey1: 'subvalue1', - subkey2: 'subvalue2' - } - } - var target = { - key1: 'value1', - key2: 'value2' - } - - var expected = { - key1: { - subkey1: 'subvalue1', - subkey2: 'subvalue2' - }, - key2: 'value2' - } - - t.deepEqual(target, { key1: 'value1', key2: 'value2' }) - t.deepEqual(merge(target, src), expected) - t.end() -}) - -test('should add nested object in target', function(t) { - var src = { - "b": { - "c": {} - } - } - - var target = { - "a": {} - } - - var expected = { - "a": {}, - "b": { - "c": {} - } - } - - t.deepEqual(merge(target, src), expected) - t.end() -}) - -test('should replace object with simple key in target', function (t) { - var src = { key1: 'value1' } - var target = { - key1: { - subkey1: 'subvalue1', - subkey2: 'subvalue2' - }, - key2: 'value2' - } - - var expected = { key1: 'value1', key2: 'value2' } - - t.deepEqual(target, { - key1: { - subkey1: 'subvalue1', - subkey2: 'subvalue2' - }, - key2: 'value2' - }) - t.deepEqual(merge(target, src), expected) - t.end() -}) - -test('should work on simple array', function (t) { - var src = ['one', 'three'] - var target = ['one', 'two'] - - var expected = ['one', 'two', 'three'] - - t.deepEqual(target, ['one', 'two']) - t.deepEqual(merge(target, src), expected) - t.ok(Array.isArray(merge(target, src))) - t.end() -}) - -test('should work on array properties', function (t) { - var src = { - key1: ['one', 'three'], - key2: ['four'] - } - var target = { - key1: ['one', 'two'] - } - - var expected = { - key1: ['one', 'two', 'three'], - key2: ['four'] - } - - t.deepEqual(target, { - key1: ['one', 'two'] - }) - - t.deepEqual(merge(target, src), expected) - t.ok(Array.isArray(merge(target, src).key1)) - t.ok(Array.isArray(merge(target, src).key2)) - t.end() -}) - -test('should work on array of objects', function (t) { - var src = [ - { key1: ['one', 'three'], key2: ['one'] }, - { key3: ['five'] } - ] - var target = [ - { key1: ['one', 'two'] }, - { key3: ['four'] } - ] - - var expected = [ - { key1: ['one', 'two', 'three'], key2: ['one'] }, - { key3: ['four', 'five'] } - ] - - t.deepEqual(target, [ - { key1: ['one', 'two'] }, - { key3: ['four'] } - ]) - t.deepEqual(merge(target, src), expected) - t.ok(Array.isArray(merge(target, src)), 'result should be an array') - t.ok(Array.isArray(merge(target, src)[0].key1), 'subkey should be an array too') - - t.end() -}) - -test('should work on arrays of nested objects', function(t) { - var target = [ - { key1: { subkey: 'one' }} - ] - - var src = [ - { key1: { subkey: 'two' }}, - { key2: { subkey: 'three' }} - ] - - var expected = [ - { key1: { subkey: 'two' }}, - { key2: { subkey: 'three' }} - ] - - t.deepEqual(merge(target, src), expected) - t.end() -}) diff --git a/node_modules/gulp-uglify/node_modules/gulp-util/.npmignore b/node_modules/gulp-uglify/node_modules/gulp-util/.npmignore deleted file mode 100644 index b5ef13a3..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.DS_Store -*.log -node_modules -build -*.node -components \ No newline at end of file diff --git a/node_modules/gulp-uglify/node_modules/gulp-util/.travis.yml b/node_modules/gulp-uglify/node_modules/gulp-util/.travis.yml deleted file mode 100644 index 33ad9f8c..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -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-uglify/node_modules/gulp-util/LICENSE b/node_modules/gulp-uglify/node_modules/gulp-util/LICENSE deleted file mode 100755 index 7cbe012c..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2014 Fractal - -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-uglify/node_modules/gulp-util/README.md b/node_modules/gulp-uglify/node_modules/gulp-util/README.md deleted file mode 100644 index fd0e506e..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/README.md +++ /dev/null @@ -1,166 +0,0 @@ -# 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 - - - - - - - - - - - - - -
      Packagegulp-util
      DescriptionUtility functions for gulp plugins
      Node Version>= 0.9
      - -## 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-uglify/node_modules/gulp-util/index.js b/node_modules/gulp-uglify/node_modules/gulp-util/index.js deleted file mode 100644 index 6746ee4b..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/index.js +++ /dev/null @@ -1,18 +0,0 @@ -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-uglify/node_modules/gulp-util/lib/File.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/File.js deleted file mode 100644 index 690a508a..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/File.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('vinyl'); \ No newline at end of file diff --git a/node_modules/gulp-uglify/node_modules/gulp-util/lib/PluginError.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/PluginError.js deleted file mode 100644 index 96555672..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/PluginError.js +++ /dev/null @@ -1,65 +0,0 @@ -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-uglify/node_modules/gulp-util/lib/beep.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/beep.js deleted file mode 100644 index 5473d754..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/beep.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function() { - process.stdout.write('\x07'); -}; diff --git a/node_modules/gulp-uglify/node_modules/gulp-util/lib/buffer.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/buffer.js deleted file mode 100644 index 4cb064ac..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/buffer.js +++ /dev/null @@ -1,15 +0,0 @@ -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-uglify/node_modules/gulp-util/lib/colors.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/colors.js deleted file mode 100644 index bc804940..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/colors.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('chalk'); \ No newline at end of file diff --git a/node_modules/gulp-uglify/node_modules/gulp-util/lib/combine.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/combine.js deleted file mode 100644 index f20712d2..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/combine.js +++ /dev/null @@ -1,11 +0,0 @@ -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-uglify/node_modules/gulp-util/lib/date.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/date.js deleted file mode 100644 index 935793cc..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/date.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('dateformat'); \ No newline at end of file diff --git a/node_modules/gulp-uglify/node_modules/gulp-util/lib/env.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/env.js deleted file mode 100644 index ea1e03e4..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/env.js +++ /dev/null @@ -1,4 +0,0 @@ -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-uglify/node_modules/gulp-util/lib/isBuffer.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/isBuffer.js deleted file mode 100644 index 0e23782c..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/isBuffer.js +++ /dev/null @@ -1,7 +0,0 @@ -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-uglify/node_modules/gulp-util/lib/isNull.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/isNull.js deleted file mode 100644 index 403bb30e..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/isNull.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(v) { - return v === null; -}; \ No newline at end of file diff --git a/node_modules/gulp-uglify/node_modules/gulp-util/lib/isStream.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/isStream.js deleted file mode 100644 index 9ce0929b..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/isStream.js +++ /dev/null @@ -1,5 +0,0 @@ -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-uglify/node_modules/gulp-util/lib/linefeed.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/linefeed.js deleted file mode 100644 index 5b0dfa4b..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/linefeed.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = '\n'; \ No newline at end of file diff --git a/node_modules/gulp-uglify/node_modules/gulp-util/lib/log.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/log.js deleted file mode 100644 index cdbb22fc..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/log.js +++ /dev/null @@ -1,9 +0,0 @@ -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-uglify/node_modules/gulp-util/lib/noop.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/noop.js deleted file mode 100644 index 7862cb16..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/noop.js +++ /dev/null @@ -1,5 +0,0 @@ -var through = require('through2'); - -module.exports = function () { - return through.obj(); -}; diff --git a/node_modules/gulp-uglify/node_modules/gulp-util/lib/replaceExtension.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/replaceExtension.js deleted file mode 100644 index 3f76938e..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/replaceExtension.js +++ /dev/null @@ -1,9 +0,0 @@ -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-uglify/node_modules/gulp-util/lib/template.js b/node_modules/gulp-uglify/node_modules/gulp-util/lib/template.js deleted file mode 100644 index c467820f..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/lib/template.js +++ /dev/null @@ -1,19 +0,0 @@ -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-uglify/node_modules/gulp-util/node_modules/chalk/index.js b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/index.js deleted file mode 100644 index a21f7022..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/index.js +++ /dev/null @@ -1,63 +0,0 @@ -'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-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi deleted file mode 120000 index b65c9f81..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi +++ /dev/null @@ -1 +0,0 @@ -../strip-ansi/cli.js \ No newline at end of file diff --git a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js deleted file mode 100644 index 3da548c4..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js +++ /dev/null @@ -1,38 +0,0 @@ -'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-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json deleted file mode 100644 index 2d61dabe..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "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-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md deleted file mode 100644 index 4ac8cbd0..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,65 +0,0 @@ -# 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-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js deleted file mode 100644 index 27316b1f..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js +++ /dev/null @@ -1,24 +0,0 @@ -'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-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json deleted file mode 100644 index e55a6244..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "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-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md deleted file mode 100644 index 0918c851..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# 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-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js deleted file mode 100755 index f8019cda..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js +++ /dev/null @@ -1,27 +0,0 @@ -#!/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 > '); - console.log('or'); - console.log('cat | strip-ansi > '); - 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-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js deleted file mode 100644 index 62320c59..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'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-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json deleted file mode 100644 index 7ca2b5d1..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "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-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md deleted file mode 100644 index eb661b3d..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# 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-uglify/node_modules/gulp-util/node_modules/chalk/package.json b/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/package.json deleted file mode 100644 index 853b0144..00000000 --- a/node_modules/gulp-uglify/node_modules/gulp-util/node_modules/chalk/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "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": "# \"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.` \ No newline at end of file diff --git a/node_modules/mocha/lib/reporters/xunit.js b/node_modules/mocha/lib/reporters/xunit.js deleted file mode 100644 index e956380d..00000000 --- a/node_modules/mocha/lib/reporters/xunit.js +++ /dev/null @@ -1,119 +0,0 @@ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils') - , escape = utils.escape; - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Expose `XUnit`. - */ - -exports = module.exports = XUnit; - -/** - * Initialize a new `XUnit` reporter. - * - * @param {Runner} runner - * @api public - */ - -function XUnit(runner) { - Base.call(this, runner); - var stats = this.stats - , tests = [] - , self = this; - - runner.on('pending', function(test){ - tests.push(test); - }); - - runner.on('pass', function(test){ - tests.push(test); - }); - - runner.on('fail', function(test){ - tests.push(test); - }); - - runner.on('end', function(){ - console.log(tag('testsuite', { - name: 'Mocha Tests' - , tests: stats.tests - , failures: stats.failures - , errors: stats.failures - , skipped: stats.tests - stats.failures - stats.passes - , timestamp: (new Date).toUTCString() - , time: (stats.duration / 1000) || 0 - }, false)); - - tests.forEach(test); - console.log(''); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -XUnit.prototype.__proto__ = Base.prototype; - -/** - * Output tag for the given `test.` - */ - -function test(test) { - var attrs = { - classname: test.parent.fullTitle() - , name: test.title - , time: (test.duration / 1000) || 0 - }; - - if ('failed' == test.state) { - var err = test.err; - attrs.message = escape(err.message); - console.log(tag('testcase', attrs, false, tag('failure', attrs, false, cdata(err.stack)))); - } else if (test.pending) { - console.log(tag('testcase', attrs, false, tag('skipped', {}, true))); - } else { - console.log(tag('testcase', attrs, true) ); - } -} - -/** - * HTML tag helper. - */ - -function tag(name, attrs, close, content) { - var end = close ? '/>' : '>' - , pairs = [] - , tag; - - for (var key in attrs) { - pairs.push(key + '="' + escape(attrs[key]) + '"'); - } - - tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end; - if (content) tag += content + ''; -} diff --git a/node_modules/mocha/lib/runnable.js b/node_modules/mocha/lib/runnable.js deleted file mode 100644 index 03b8792b..00000000 --- a/node_modules/mocha/lib/runnable.js +++ /dev/null @@ -1,227 +0,0 @@ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , debug = require('debug')('mocha:runnable') - , milliseconds = require('./ms'); - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Object#toString(). - */ - -var toString = Object.prototype.toString; - -/** - * Expose `Runnable`. - */ - -module.exports = Runnable; - -/** - * Initialize a new `Runnable` with the given `title` and callback `fn`. - * - * @param {String} title - * @param {Function} fn - * @api private - */ - -function Runnable(title, fn) { - this.title = title; - this.fn = fn; - this.async = fn && fn.length; - this.sync = ! this.async; - this._timeout = 2000; - this._slow = 75; - this.timedOut = false; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Runnable.prototype.__proto__ = EventEmitter.prototype; - -/** - * Set & get timeout `ms`. - * - * @param {Number|String} ms - * @return {Runnable|Number} ms or self - * @api private - */ - -Runnable.prototype.timeout = function(ms){ - if (0 == arguments.length) return this._timeout; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('timeout %d', ms); - this._timeout = ms; - if (this.timer) this.resetTimeout(); - return this; -}; - -/** - * Set & get slow `ms`. - * - * @param {Number|String} ms - * @return {Runnable|Number} ms or self - * @api private - */ - -Runnable.prototype.slow = function(ms){ - if (0 === arguments.length) return this._slow; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('timeout %d', ms); - this._slow = ms; - return this; -}; - -/** - * Return the full title generated by recursively - * concatenating the parent's full title. - * - * @return {String} - * @api public - */ - -Runnable.prototype.fullTitle = function(){ - return this.parent.fullTitle() + ' ' + this.title; -}; - -/** - * Clear the timeout. - * - * @api private - */ - -Runnable.prototype.clearTimeout = function(){ - clearTimeout(this.timer); -}; - -/** - * Inspect the runnable void of private properties. - * - * @return {String} - * @api private - */ - -Runnable.prototype.inspect = function(){ - return JSON.stringify(this, function(key, val){ - if ('_' == key[0]) return; - if ('parent' == key) return '#'; - if ('ctx' == key) return '#'; - return val; - }, 2); -}; - -/** - * Reset the timeout. - * - * @api private - */ - -Runnable.prototype.resetTimeout = function(){ - var self = this; - var ms = this.timeout() || 1e9; - - this.clearTimeout(); - this.timer = setTimeout(function(){ - self.callback(new Error('timeout of ' + ms + 'ms exceeded')); - self.timedOut = true; - }, ms); -}; - -/** - * Whitelist these globals for this test run - * - * @api private - */ -Runnable.prototype.globals = function(arr){ - var self = this; - this._allowedGlobals = arr; -}; - -/** - * Run the test and invoke `fn(err)`. - * - * @param {Function} fn - * @api private - */ - -Runnable.prototype.run = function(fn){ - var self = this - , ms = this.timeout() - , start = new Date - , ctx = this.ctx - , finished - , emitted; - - if (ctx) ctx.runnable(this); - - // timeout - if (this.async) { - if (ms) { - this.timer = setTimeout(function(){ - done(new Error('timeout of ' + ms + 'ms exceeded')); - self.timedOut = true; - }, ms); - } - } - - // called multiple times - function multiple(err) { - if (emitted) return; - emitted = true; - self.emit('error', err || new Error('done() called multiple times')); - } - - // finished - function done(err) { - if (self.timedOut) return; - if (finished) return multiple(err); - self.clearTimeout(); - self.duration = new Date - start; - finished = true; - fn(err); - } - - // for .resetTimeout() - this.callback = done; - - // async - if (this.async) { - try { - this.fn.call(ctx, function(err){ - if (err instanceof Error || toString.call(err) === "[object Error]") return done(err); - if (null != err) return done(new Error('done() invoked with non-Error: ' + err)); - done(); - }); - } catch (err) { - done(err); - } - return; - } - - if (this.asyncOnly) { - return done(new Error('--async-only option in use without declaring `done()`')); - } - - // sync - try { - if (!this.pending) this.fn.call(ctx); - this.duration = new Date - start; - fn(); - } catch (err) { - fn(err); - } -}; diff --git a/node_modules/mocha/lib/runner.js b/node_modules/mocha/lib/runner.js deleted file mode 100644 index deb442e1..00000000 --- a/node_modules/mocha/lib/runner.js +++ /dev/null @@ -1,661 +0,0 @@ -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , debug = require('debug')('mocha:runner') - , Test = require('./test') - , utils = require('./utils') - , filter = utils.filter - , keys = utils.keys; - -/** - * Non-enumerable globals. - */ - -var globals = [ - 'setTimeout', - 'clearTimeout', - 'setInterval', - 'clearInterval', - 'XMLHttpRequest', - 'Date' -]; - -/** - * Expose `Runner`. - */ - -module.exports = Runner; - -/** - * Initialize a `Runner` for the given `suite`. - * - * Events: - * - * - `start` execution started - * - `end` execution complete - * - `suite` (suite) test suite execution started - * - `suite end` (suite) all tests (and sub-suites) have finished - * - `test` (test) test execution started - * - `test end` (test) test completed - * - `hook` (hook) hook execution started - * - `hook end` (hook) hook complete - * - `pass` (test) test passed - * - `fail` (test, err) test failed - * - `pending` (test) test pending - * - * @api public - */ - -function Runner(suite) { - var self = this; - this._globals = []; - this._abort = false; - this.suite = suite; - this.total = suite.total(); - this.failures = 0; - this.on('test end', function(test){ self.checkGlobals(test); }); - this.on('hook end', function(hook){ self.checkGlobals(hook); }); - this.grep(/.*/); - this.globals(this.globalProps().concat(extraGlobals())); -} - -/** - * Wrapper for setImmediate, process.nextTick, or browser polyfill. - * - * @param {Function} fn - * @api private - */ - -Runner.immediately = global.setImmediate || process.nextTick; - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Runner.prototype.__proto__ = EventEmitter.prototype; - -/** - * Run tests with full titles matching `re`. Updates runner.total - * with number of tests matched. - * - * @param {RegExp} re - * @param {Boolean} invert - * @return {Runner} for chaining - * @api public - */ - -Runner.prototype.grep = function(re, invert){ - debug('grep %s', re); - this._grep = re; - this._invert = invert; - this.total = this.grepTotal(this.suite); - return this; -}; - -/** - * Returns the number of tests matching the grep search for the - * given suite. - * - * @param {Suite} suite - * @return {Number} - * @api public - */ - -Runner.prototype.grepTotal = function(suite) { - var self = this; - var total = 0; - - suite.eachTest(function(test){ - var match = self._grep.test(test.fullTitle()); - if (self._invert) match = !match; - if (match) total++; - }); - - return total; -}; - -/** - * Return a list of global properties. - * - * @return {Array} - * @api private - */ - -Runner.prototype.globalProps = function() { - var props = utils.keys(global); - - // non-enumerables - for (var i = 0; i < globals.length; ++i) { - if (~utils.indexOf(props, globals[i])) continue; - props.push(globals[i]); - } - - return props; -}; - -/** - * Allow the given `arr` of globals. - * - * @param {Array} arr - * @return {Runner} for chaining - * @api public - */ - -Runner.prototype.globals = function(arr){ - if (0 == arguments.length) return this._globals; - debug('globals %j', arr); - this._globals = this._globals.concat(arr); - return this; -}; - -/** - * Check for global variable leaks. - * - * @api private - */ - -Runner.prototype.checkGlobals = function(test){ - if (this.ignoreLeaks) return; - var ok = this._globals; - - var globals = this.globalProps(); - var isNode = process.kill; - var leaks; - - if (test) { - ok = ok.concat(test._allowedGlobals || []); - } - - if(this.prevGlobalsLength == globals.length) return; - this.prevGlobalsLength = globals.length; - - leaks = filterLeaks(ok, globals); - this._globals = this._globals.concat(leaks); - - if (leaks.length > 1) { - this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + '')); - } else if (leaks.length) { - this.fail(test, new Error('global leak detected: ' + leaks[0])); - } -}; - -/** - * Fail the given `test`. - * - * @param {Test} test - * @param {Error} err - * @api private - */ - -Runner.prototype.fail = function(test, err){ - ++this.failures; - test.state = 'failed'; - - if ('string' == typeof err) { - err = new Error('the string "' + err + '" was thrown, throw an Error :)'); - } - - this.emit('fail', test, err); -}; - -/** - * Fail the given `hook` with `err`. - * - * Hook failures work in the following pattern: - * - If bail, then exit - * - Failed `before` hook skips all tests in a suite and subsuites, - * but jumps to corresponding `after` hook - * - Failed `before each` hook skips remaining tests in a - * suite and jumps to corresponding `after each` hook, - * which is run only once - * - Failed `after` hook does not alter - * execution order - * - Failed `after each` hook skips remaining tests in a - * suite and subsuites, but executes other `after each` - * hooks - * - * @param {Hook} hook - * @param {Error} err - * @api private - */ - -Runner.prototype.failHook = function(hook, err){ - this.fail(hook, err); - if (this.suite.bail()) { - this.emit('end'); - } -}; - -/** - * Run hook `name` callbacks and then invoke `fn()`. - * - * @param {String} name - * @param {Function} function - * @api private - */ - -Runner.prototype.hook = function(name, fn){ - var suite = this.suite - , hooks = suite['_' + name] - , self = this - , timer; - - function next(i) { - var hook = hooks[i]; - if (!hook) return fn(); - if (self.failures && suite.bail()) return fn(); - self.currentRunnable = hook; - - hook.ctx.currentTest = self.test; - - self.emit('hook', hook); - - hook.on('error', function(err){ - self.failHook(hook, err); - }); - - hook.run(function(err){ - hook.removeAllListeners('error'); - var testError = hook.error(); - if (testError) self.fail(self.test, testError); - if (err) { - self.failHook(hook, err); - - // stop executing hooks, notify callee of hook err - return fn(err); - } - self.emit('hook end', hook); - delete hook.ctx.currentTest; - next(++i); - }); - } - - Runner.immediately(function(){ - next(0); - }); -}; - -/** - * Run hook `name` for the given array of `suites` - * in order, and callback `fn(err, errSuite)`. - * - * @param {String} name - * @param {Array} suites - * @param {Function} fn - * @api private - */ - -Runner.prototype.hooks = function(name, suites, fn){ - var self = this - , orig = this.suite; - - function next(suite) { - self.suite = suite; - - if (!suite) { - self.suite = orig; - return fn(); - } - - self.hook(name, function(err){ - if (err) { - var errSuite = self.suite; - self.suite = orig; - return fn(err, errSuite); - } - - next(suites.pop()); - }); - } - - next(suites.pop()); -}; - -/** - * Run hooks from the top level down. - * - * @param {String} name - * @param {Function} fn - * @api private - */ - -Runner.prototype.hookUp = function(name, fn){ - var suites = [this.suite].concat(this.parents()).reverse(); - this.hooks(name, suites, fn); -}; - -/** - * Run hooks from the bottom up. - * - * @param {String} name - * @param {Function} fn - * @api private - */ - -Runner.prototype.hookDown = function(name, fn){ - var suites = [this.suite].concat(this.parents()); - this.hooks(name, suites, fn); -}; - -/** - * Return an array of parent Suites from - * closest to furthest. - * - * @return {Array} - * @api private - */ - -Runner.prototype.parents = function(){ - var suite = this.suite - , suites = []; - while (suite = suite.parent) suites.push(suite); - return suites; -}; - -/** - * Run the current test and callback `fn(err)`. - * - * @param {Function} fn - * @api private - */ - -Runner.prototype.runTest = function(fn){ - var test = this.test - , self = this; - - if (this.asyncOnly) test.asyncOnly = true; - - try { - test.on('error', function(err){ - self.fail(test, err); - }); - test.run(fn); - } catch (err) { - fn(err); - } -}; - -/** - * Run tests in the given `suite` and invoke - * the callback `fn()` when complete. - * - * @param {Suite} suite - * @param {Function} fn - * @api private - */ - -Runner.prototype.runTests = function(suite, fn){ - var self = this - , tests = suite.tests.slice() - , test; - - - function hookErr(err, errSuite, after) { - // before/after Each hook for errSuite failed: - var orig = self.suite; - - // for failed 'after each' hook start from errSuite parent, - // otherwise start from errSuite itself - self.suite = after ? errSuite.parent : errSuite; - - if (self.suite) { - // call hookUp afterEach - self.hookUp('afterEach', function(err2, errSuite2) { - self.suite = orig; - // some hooks may fail even now - if (err2) return hookErr(err2, errSuite2, true); - // report error suite - fn(errSuite); - }); - } else { - // there is no need calling other 'after each' hooks - self.suite = orig; - fn(errSuite); - } - } - - function next(err, errSuite) { - // if we bail after first err - if (self.failures && suite._bail) return fn(); - - if (self._abort) return fn(); - - if (err) return hookErr(err, errSuite, true); - - // next test - test = tests.shift(); - - // all done - if (!test) return fn(); - - // grep - var match = self._grep.test(test.fullTitle()); - if (self._invert) match = !match; - if (!match) return next(); - - // pending - if (test.pending) { - self.emit('pending', test); - self.emit('test end', test); - return next(); - } - - // execute test and hook(s) - self.emit('test', self.test = test); - self.hookDown('beforeEach', function(err, errSuite){ - - if (err) return hookErr(err, errSuite, false); - - self.currentRunnable = self.test; - self.runTest(function(err){ - test = self.test; - - if (err) { - self.fail(test, err); - self.emit('test end', test); - return self.hookUp('afterEach', next); - } - - test.state = 'passed'; - self.emit('pass', test); - self.emit('test end', test); - self.hookUp('afterEach', next); - }); - }); - } - - this.next = next; - next(); -}; - -/** - * Run the given `suite` and invoke the - * callback `fn()` when complete. - * - * @param {Suite} suite - * @param {Function} fn - * @api private - */ - -Runner.prototype.runSuite = function(suite, fn){ - var total = this.grepTotal(suite) - , self = this - , i = 0; - - debug('run suite %s', suite.fullTitle()); - - if (!total) return fn(); - - this.emit('suite', this.suite = suite); - - function next(errSuite) { - if (errSuite) { - // current suite failed on a hook from errSuite - if (errSuite == suite) { - // if errSuite is current suite - // continue to the next sibling suite - return done(); - } else { - // errSuite is among the parents of current suite - // stop execution of errSuite and all sub-suites - return done(errSuite); - } - } - - if (self._abort) return done(); - - var curr = suite.suites[i++]; - if (!curr) return done(); - self.runSuite(curr, next); - } - - function done(errSuite) { - self.suite = suite; - self.hook('afterAll', function(){ - self.emit('suite end', suite); - fn(errSuite); - }); - } - - this.hook('beforeAll', function(err){ - if (err) return done(); - self.runTests(suite, next); - }); -}; - -/** - * Handle uncaught exceptions. - * - * @param {Error} err - * @api private - */ - -Runner.prototype.uncaught = function(err){ - debug('uncaught exception %s', err.message); - var runnable = this.currentRunnable; - if (!runnable || 'failed' == runnable.state) return; - runnable.clearTimeout(); - err.uncaught = true; - this.fail(runnable, err); - - // recover from test - if ('test' == runnable.type) { - this.emit('test end', runnable); - this.hookUp('afterEach', this.next); - return; - } - - // bail on hooks - this.emit('end'); -}; - -/** - * Run the root suite and invoke `fn(failures)` - * on completion. - * - * @param {Function} fn - * @return {Runner} for chaining - * @api public - */ - -Runner.prototype.run = function(fn){ - var self = this - , fn = fn || function(){}; - - function uncaught(err){ - self.uncaught(err); - } - - debug('start'); - - // callback - this.on('end', function(){ - debug('end'); - process.removeListener('uncaughtException', uncaught); - fn(self.failures); - }); - - // run suites - this.emit('start'); - this.runSuite(this.suite, function(){ - debug('finished running'); - self.emit('end'); - }); - - // uncaught exception - process.on('uncaughtException', uncaught); - - return this; -}; - -/** - * Cleanly abort execution - * - * @return {Runner} for chaining - * @api public - */ -Runner.prototype.abort = function(){ - debug('aborting'); - this._abort = true; -} - -/** - * Filter leaks with the given globals flagged as `ok`. - * - * @param {Array} ok - * @param {Array} globals - * @return {Array} - * @api private - */ - -function filterLeaks(ok, globals) { - return filter(globals, function(key){ - // Firefox and Chrome exposes iframes as index inside the window object - if (/^d+/.test(key)) return false; - - // in firefox - // if runner runs in an iframe, this iframe's window.getInterface method not init at first - // it is assigned in some seconds - if (global.navigator && /^getInterface/.test(key)) return false; - - // an iframe could be approached by window[iframeIndex] - // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak - if (global.navigator && /^\d+/.test(key)) return false; - - // Opera and IE expose global variables for HTML element IDs (issue #243) - if (/^mocha-/.test(key)) return false; - - var matched = filter(ok, function(ok){ - if (~ok.indexOf('*')) return 0 == key.indexOf(ok.split('*')[0]); - return key == ok; - }); - return matched.length == 0 && (!global.navigator || 'onerror' !== key); - }); -} - -/** - * Array of globals dependent on the environment. - * - * @return {Array} - * @api private - */ - - function extraGlobals() { - if (typeof(process) === 'object' && - typeof(process.version) === 'string') { - - var nodeVersion = process.version.split('.').reduce(function(a, v) { - return a << 8 | v; - }); - - // 'errno' was renamed to process._errno in v0.9.11. - - if (nodeVersion < 0x00090B) { - return ['errno']; - } - } - - return []; - } diff --git a/node_modules/mocha/lib/suite.js b/node_modules/mocha/lib/suite.js deleted file mode 100644 index 869bb88d..00000000 --- a/node_modules/mocha/lib/suite.js +++ /dev/null @@ -1,296 +0,0 @@ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , debug = require('debug')('mocha:suite') - , milliseconds = require('./ms') - , utils = require('./utils') - , Hook = require('./hook'); - -/** - * Expose `Suite`. - */ - -exports = module.exports = Suite; - -/** - * Create a new `Suite` with the given `title` - * and parent `Suite`. When a suite with the - * same title is already present, that suite - * is returned to provide nicer reporter - * and more flexible meta-testing. - * - * @param {Suite} parent - * @param {String} title - * @return {Suite} - * @api public - */ - -exports.create = function(parent, title){ - var suite = new Suite(title, parent.ctx); - suite.parent = parent; - if (parent.pending) suite.pending = true; - title = suite.fullTitle(); - parent.addSuite(suite); - return suite; -}; - -/** - * Initialize a new `Suite` with the given - * `title` and `ctx`. - * - * @param {String} title - * @param {Context} ctx - * @api private - */ - -function Suite(title, ctx) { - this.title = title; - this.ctx = ctx; - this.suites = []; - this.tests = []; - this.pending = false; - this._beforeEach = []; - this._beforeAll = []; - this._afterEach = []; - this._afterAll = []; - this.root = !title; - this._timeout = 2000; - this._slow = 75; - this._bail = false; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Suite.prototype.__proto__ = EventEmitter.prototype; - -/** - * Return a clone of this `Suite`. - * - * @return {Suite} - * @api private - */ - -Suite.prototype.clone = function(){ - var suite = new Suite(this.title); - debug('clone'); - suite.ctx = this.ctx; - suite.timeout(this.timeout()); - suite.slow(this.slow()); - suite.bail(this.bail()); - return suite; -}; - -/** - * Set timeout `ms` or short-hand such as "2s". - * - * @param {Number|String} ms - * @return {Suite|Number} for chaining - * @api private - */ - -Suite.prototype.timeout = function(ms){ - if (0 == arguments.length) return this._timeout; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('timeout %d', ms); - this._timeout = parseInt(ms, 10); - return this; -}; - -/** - * Set slow `ms` or short-hand such as "2s". - * - * @param {Number|String} ms - * @return {Suite|Number} for chaining - * @api private - */ - -Suite.prototype.slow = function(ms){ - if (0 === arguments.length) return this._slow; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('slow %d', ms); - this._slow = ms; - return this; -}; - -/** - * Sets whether to bail after first error. - * - * @parma {Boolean} bail - * @return {Suite|Number} for chaining - * @api private - */ - -Suite.prototype.bail = function(bail){ - if (0 == arguments.length) return this._bail; - debug('bail %s', bail); - this._bail = bail; - return this; -}; - -/** - * Run `fn(test[, done])` before running tests. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.beforeAll = function(fn){ - if (this.pending) return this; - var hook = new Hook('"before all" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._beforeAll.push(hook); - this.emit('beforeAll', hook); - return this; -}; - -/** - * Run `fn(test[, done])` after running tests. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.afterAll = function(fn){ - if (this.pending) return this; - var hook = new Hook('"after all" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._afterAll.push(hook); - this.emit('afterAll', hook); - return this; -}; - -/** - * Run `fn(test[, done])` before each test case. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.beforeEach = function(fn){ - if (this.pending) return this; - var hook = new Hook('"before each" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._beforeEach.push(hook); - this.emit('beforeEach', hook); - return this; -}; - -/** - * Run `fn(test[, done])` after each test case. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.afterEach = function(fn){ - if (this.pending) return this; - var hook = new Hook('"after each" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._afterEach.push(hook); - this.emit('afterEach', hook); - return this; -}; - -/** - * Add a test `suite`. - * - * @param {Suite} suite - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.addSuite = function(suite){ - suite.parent = this; - suite.timeout(this.timeout()); - suite.slow(this.slow()); - suite.bail(this.bail()); - this.suites.push(suite); - this.emit('suite', suite); - return this; -}; - -/** - * Add a `test` to this suite. - * - * @param {Test} test - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.addTest = function(test){ - test.parent = this; - test.timeout(this.timeout()); - test.slow(this.slow()); - test.ctx = this.ctx; - this.tests.push(test); - this.emit('test', test); - return this; -}; - -/** - * Return the full title generated by recursively - * concatenating the parent's full title. - * - * @return {String} - * @api public - */ - -Suite.prototype.fullTitle = function(){ - if (this.parent) { - var full = this.parent.fullTitle(); - if (full) return full + ' ' + this.title; - } - return this.title; -}; - -/** - * Return the total number of tests. - * - * @return {Number} - * @api public - */ - -Suite.prototype.total = function(){ - return utils.reduce(this.suites, function(sum, suite){ - return sum + suite.total(); - }, 0) + this.tests.length; -}; - -/** - * Iterates through each suite recursively to find - * all tests. Applies a function in the format - * `fn(test)`. - * - * @param {Function} fn - * @return {Suite} - * @api private - */ - -Suite.prototype.eachTest = function(fn){ - utils.forEach(this.tests, fn); - utils.forEach(this.suites, function(suite){ - suite.eachTest(fn); - }); - return this; -}; diff --git a/node_modules/mocha/lib/template.html b/node_modules/mocha/lib/template.html deleted file mode 100644 index 0590d4aa..00000000 --- a/node_modules/mocha/lib/template.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - Mocha - - - - - -
      - - - - - - diff --git a/node_modules/mocha/lib/test.js b/node_modules/mocha/lib/test.js deleted file mode 100644 index 11773e0c..00000000 --- a/node_modules/mocha/lib/test.js +++ /dev/null @@ -1,32 +0,0 @@ - -/** - * Module dependencies. - */ - -var Runnable = require('./runnable'); - -/** - * Expose `Test`. - */ - -module.exports = Test; - -/** - * Initialize a new `Test` with the given `title` and callback `fn`. - * - * @param {String} title - * @param {Function} fn - * @api private - */ - -function Test(title, fn) { - Runnable.call(this, title, fn); - this.pending = !fn; - this.type = 'test'; -} - -/** - * Inherit from `Runnable.prototype`. - */ - -Test.prototype.__proto__ = Runnable.prototype; diff --git a/node_modules/mocha/lib/utils.js b/node_modules/mocha/lib/utils.js deleted file mode 100644 index 37fd5d7e..00000000 --- a/node_modules/mocha/lib/utils.js +++ /dev/null @@ -1,299 +0,0 @@ -/** - * Module dependencies. - */ - -var fs = require('fs') - , path = require('path') - , join = path.join - , debug = require('debug')('mocha:watch'); - -/** - * Ignored directories. - */ - -var ignore = ['node_modules', '.git']; - -/** - * Escape special characters in the given string of html. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function(html){ - return String(html) - .replace(/&/g, '&') - .replace(/"/g, '"') - .replace(//g, '>'); -}; - -/** - * Array#forEach (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @param {Object} scope - * @api private - */ - -exports.forEach = function(arr, fn, scope){ - for (var i = 0, l = arr.length; i < l; i++) - fn.call(scope, arr[i], i); -}; - -/** - * Array#map (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @param {Object} scope - * @api private - */ - -exports.map = function(arr, fn, scope){ - var result = []; - for (var i = 0, l = arr.length; i < l; i++) - result.push(fn.call(scope, arr[i], i)); - return result; -}; - -/** - * Array#indexOf (<=IE8) - * - * @parma {Array} arr - * @param {Object} obj to find index of - * @param {Number} start - * @api private - */ - -exports.indexOf = function(arr, obj, start){ - for (var i = start || 0, l = arr.length; i < l; i++) { - if (arr[i] === obj) - return i; - } - return -1; -}; - -/** - * Array#reduce (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @param {Object} initial value - * @api private - */ - -exports.reduce = function(arr, fn, val){ - var rval = val; - - for (var i = 0, l = arr.length; i < l; i++) { - rval = fn(rval, arr[i], i, arr); - } - - return rval; -}; - -/** - * Array#filter (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @api private - */ - -exports.filter = function(arr, fn){ - var ret = []; - - for (var i = 0, l = arr.length; i < l; i++) { - var val = arr[i]; - if (fn(val, i, arr)) ret.push(val); - } - - return ret; -}; - -/** - * Object.keys (<=IE8) - * - * @param {Object} obj - * @return {Array} keys - * @api private - */ - -exports.keys = Object.keys || function(obj) { - var keys = [] - , has = Object.prototype.hasOwnProperty // for `window` on <=IE8 - - for (var key in obj) { - if (has.call(obj, key)) { - keys.push(key); - } - } - - return keys; -}; - -/** - * Watch the given `files` for changes - * and invoke `fn(file)` on modification. - * - * @param {Array} files - * @param {Function} fn - * @api private - */ - -exports.watch = function(files, fn){ - var options = { interval: 100 }; - files.forEach(function(file){ - debug('file %s', file); - fs.watchFile(file, options, function(curr, prev){ - if (prev.mtime < curr.mtime) fn(file); - }); - }); -}; - -/** - * Ignored files. - */ - -function ignored(path){ - return !~ignore.indexOf(path); -} - -/** - * Lookup files in the given `dir`. - * - * @return {Array} - * @api private - */ - -exports.files = function(dir, ret){ - ret = ret || []; - - fs.readdirSync(dir) - .filter(ignored) - .forEach(function(path){ - path = join(dir, path); - if (fs.statSync(path).isDirectory()) { - exports.files(path, ret); - } else if (path.match(/\.(js|coffee|litcoffee|coffee.md)$/)) { - ret.push(path); - } - }); - - return ret; -}; - -/** - * Compute a slug from the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.slug = function(str){ - return str - .toLowerCase() - .replace(/ +/g, '-') - .replace(/[^-\w]/g, ''); -}; - -/** - * Strip the function definition from `str`, - * and re-indent for pre whitespace. - */ - -exports.clean = function(str) { - str = str - .replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/^\uFEFF/, '') - .replace(/^function *\(.*\) *{/, '') - .replace(/\s+\}$/, ''); - - var spaces = str.match(/^\n?( *)/)[1].length - , tabs = str.match(/^\n?(\t*)/)[1].length - , re = new RegExp('^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs ? tabs : spaces) + '}', 'gm'); - - str = str.replace(re, ''); - - return exports.trim(str); -}; - -/** - * Escape regular expression characters in `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.escapeRegexp = function(str){ - return str.replace(/[-\\^$*+?.()|[\]{}]/g, "\\$&"); -}; - -/** - * Trim the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.trim = function(str){ - return str.replace(/^\s+|\s+$/g, ''); -}; - -/** - * Parse the given `qs`. - * - * @param {String} qs - * @return {Object} - * @api private - */ - -exports.parseQuery = function(qs){ - return exports.reduce(qs.replace('?', '').split('&'), function(obj, pair){ - var i = pair.indexOf('=') - , key = pair.slice(0, i) - , val = pair.slice(++i); - - obj[key] = decodeURIComponent(val); - return obj; - }, {}); -}; - -/** - * Highlight the given string of `js`. - * - * @param {String} js - * @return {String} - * @api private - */ - -function highlight(js) { - return js - .replace(//g, '>') - .replace(/\/\/(.*)/gm, '//$1') - .replace(/('.*?')/gm, '$1') - .replace(/(\d+\.\d+)/gm, '$1') - .replace(/(\d+)/gm, '$1') - .replace(/\bnew *(\w+)/gm, 'new $1') - .replace(/\b(function|new|throw|return|var|if|else)\b/gm, '$1') -} - -/** - * Highlight the contents of tag `name`. - * - * @param {String} name - * @api private - */ - -exports.highlightTags = function(name) { - var code = document.getElementsByTagName(name); - for (var i = 0, len = code.length; i < len; ++i) { - code[i].innerHTML = highlight(code[i].innerHTML); - } -}; diff --git a/node_modules/mocha/mocha.css b/node_modules/mocha/mocha.css deleted file mode 100644 index 42b9798f..00000000 --- a/node_modules/mocha/mocha.css +++ /dev/null @@ -1,270 +0,0 @@ -@charset "utf-8"; - -body { - margin:0; -} - -#mocha { - font: 20px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif; - margin: 60px 50px; -} - -#mocha ul, -#mocha li { - margin: 0; - padding: 0; -} - -#mocha ul { - list-style: none; -} - -#mocha h1, -#mocha h2 { - margin: 0; -} - -#mocha h1 { - margin-top: 15px; - font-size: 1em; - font-weight: 200; -} - -#mocha h1 a { - text-decoration: none; - color: inherit; -} - -#mocha h1 a:hover { - text-decoration: underline; -} - -#mocha .suite .suite h1 { - margin-top: 0; - font-size: .8em; -} - -#mocha .hidden { - display: none; -} - -#mocha h2 { - font-size: 12px; - font-weight: normal; - cursor: pointer; -} - -#mocha .suite { - margin-left: 15px; -} - -#mocha .test { - margin-left: 15px; - overflow: hidden; -} - -#mocha .test.pending:hover h2::after { - content: '(pending)'; - font-family: arial, sans-serif; -} - -#mocha .test.pass.medium .duration { - background: #c09853; -} - -#mocha .test.pass.slow .duration { - background: #b94a48; -} - -#mocha .test.pass::before { - content: '✓'; - font-size: 12px; - display: block; - float: left; - margin-right: 5px; - color: #00d6b2; -} - -#mocha .test.pass .duration { - font-size: 9px; - margin-left: 5px; - padding: 2px 5px; - color: #fff; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.2); - -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.2); - box-shadow: inset 0 1px 1px rgba(0,0,0,.2); - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - -ms-border-radius: 5px; - -o-border-radius: 5px; - border-radius: 5px; -} - -#mocha .test.pass.fast .duration { - display: none; -} - -#mocha .test.pending { - color: #0b97c4; -} - -#mocha .test.pending::before { - content: '◦'; - color: #0b97c4; -} - -#mocha .test.fail { - color: #c00; -} - -#mocha .test.fail pre { - color: black; -} - -#mocha .test.fail::before { - content: '✖'; - font-size: 12px; - display: block; - float: left; - margin-right: 5px; - color: #c00; -} - -#mocha .test pre.error { - color: #c00; - max-height: 300px; - overflow: auto; -} - -/** - * (1): approximate for browsers not supporting calc - * (2): 42 = 2*15 + 2*10 + 2*1 (padding + margin + border) - * ^^ seriously - */ -#mocha .test pre { - display: block; - float: left; - clear: left; - font: 12px/1.5 monaco, monospace; - margin: 5px; - padding: 15px; - border: 1px solid #eee; - max-width: 85%; /*(1)*/ - max-width: calc(100% - 42px); /*(2)*/ - word-wrap: break-word; - border-bottom-color: #ddd; - -webkit-border-radius: 3px; - -webkit-box-shadow: 0 1px 3px #eee; - -moz-border-radius: 3px; - -moz-box-shadow: 0 1px 3px #eee; - border-radius: 3px; -} - -#mocha .test h2 { - position: relative; -} - -#mocha .test a.replay { - position: absolute; - top: 3px; - right: 0; - text-decoration: none; - vertical-align: middle; - display: block; - width: 15px; - height: 15px; - line-height: 15px; - text-align: center; - background: #eee; - font-size: 15px; - -moz-border-radius: 15px; - border-radius: 15px; - -webkit-transition: opacity 200ms; - -moz-transition: opacity 200ms; - transition: opacity 200ms; - opacity: 0.3; - color: #888; -} - -#mocha .test:hover a.replay { - opacity: 1; -} - -#mocha-report.pass .test.fail { - display: none; -} - -#mocha-report.fail .test.pass { - display: none; -} - -#mocha-report.pending .test.pass, -#mocha-report.pending .test.fail { - display: none; -} -#mocha-report.pending .test.pass.pending { - display: block; -} - -#mocha-error { - color: #c00; - font-size: 1.5em; - font-weight: 100; - letter-spacing: 1px; -} - -#mocha-stats { - position: fixed; - top: 15px; - right: 10px; - font-size: 12px; - margin: 0; - color: #888; - z-index: 1; -} - -#mocha-stats .progress { - float: right; - padding-top: 0; -} - -#mocha-stats em { - color: black; -} - -#mocha-stats a { - text-decoration: none; - color: inherit; -} - -#mocha-stats a:hover { - border-bottom: 1px solid #eee; -} - -#mocha-stats li { - display: inline-block; - margin: 0 5px; - list-style: none; - padding-top: 11px; -} - -#mocha-stats canvas { - width: 40px; - height: 40px; -} - -#mocha code .comment { color: #ddd; } -#mocha code .init { color: #2f6fad; } -#mocha code .string { color: #5890ad; } -#mocha code .keyword { color: #8a6343; } -#mocha code .number { color: #2f6fad; } - -@media screen and (max-device-width: 480px) { - #mocha { - margin: 60px 0px; - } - - #mocha #stats { - position: absolute; - } -} diff --git a/node_modules/mocha/mocha.js b/node_modules/mocha/mocha.js deleted file mode 100644 index 3dcdae6c..00000000 --- a/node_modules/mocha/mocha.js +++ /dev/null @@ -1,5812 +0,0 @@ -;(function(){ - -// CommonJS require() - -function require(p){ - var path = require.resolve(p) - , mod = require.modules[path]; - if (!mod) throw new Error('failed to require "' + p + '"'); - if (!mod.exports) { - mod.exports = {}; - mod.call(mod.exports, mod, mod.exports, require.relative(path)); - } - return mod.exports; - } - -require.modules = {}; - -require.resolve = function (path){ - var orig = path - , reg = path + '.js' - , index = path + '/index.js'; - return require.modules[reg] && reg - || require.modules[index] && index - || orig; - }; - -require.register = function (path, fn){ - require.modules[path] = fn; - }; - -require.relative = function (parent) { - return function(p){ - if ('.' != p.charAt(0)) return require(p); - - var path = parent.split('/') - , segs = p.split('/'); - path.pop(); - - for (var i = 0; i < segs.length; i++) { - var seg = segs[i]; - if ('..' == seg) path.pop(); - else if ('.' != seg) path.push(seg); - } - - return require(path.join('/')); - }; - }; - - -require.register("browser/debug.js", function(module, exports, require){ - -module.exports = function(type){ - return function(){ - } -}; - -}); // module: browser/debug.js - -require.register("browser/diff.js", function(module, exports, require){ -/* See LICENSE file for terms of use */ - -/* - * Text diff implementation. - * - * This library supports the following APIS: - * JsDiff.diffChars: Character by character diff - * JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace - * JsDiff.diffLines: Line based diff - * - * JsDiff.diffCss: Diff targeted at CSS content - * - * These methods are based on the implementation proposed in - * "An O(ND) Difference Algorithm and its Variations" (Myers, 1986). - * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927 - */ -var JsDiff = (function() { - /*jshint maxparams: 5*/ - function clonePath(path) { - return { newPos: path.newPos, components: path.components.slice(0) }; - } - function removeEmpty(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - if (array[i]) { - ret.push(array[i]); - } - } - return ret; - } - function escapeHTML(s) { - var n = s; - n = n.replace(/&/g, '&'); - n = n.replace(//g, '>'); - n = n.replace(/"/g, '"'); - - return n; - } - - var Diff = function(ignoreWhitespace) { - this.ignoreWhitespace = ignoreWhitespace; - }; - Diff.prototype = { - diff: function(oldString, newString) { - // Handle the identity case (this is due to unrolling editLength == 0 - if (newString === oldString) { - return [{ value: newString }]; - } - if (!newString) { - return [{ value: oldString, removed: true }]; - } - if (!oldString) { - return [{ value: newString, added: true }]; - } - - newString = this.tokenize(newString); - oldString = this.tokenize(oldString); - - var newLen = newString.length, oldLen = oldString.length; - var maxEditLength = newLen + oldLen; - var bestPath = [{ newPos: -1, components: [] }]; - - // Seed editLength = 0 - var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); - if (bestPath[0].newPos+1 >= newLen && oldPos+1 >= oldLen) { - return bestPath[0].components; - } - - for (var editLength = 1; editLength <= maxEditLength; editLength++) { - for (var diagonalPath = -1*editLength; diagonalPath <= editLength; diagonalPath+=2) { - var basePath; - var addPath = bestPath[diagonalPath-1], - removePath = bestPath[diagonalPath+1]; - oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; - if (addPath) { - // No one else is going to attempt to use this value, clear it - bestPath[diagonalPath-1] = undefined; - } - - var canAdd = addPath && addPath.newPos+1 < newLen; - var canRemove = removePath && 0 <= oldPos && oldPos < oldLen; - if (!canAdd && !canRemove) { - bestPath[diagonalPath] = undefined; - continue; - } - - // Select the diagonal that we want to branch from. We select the prior - // path whose position in the new string is the farthest from the origin - // and does not pass the bounds of the diff graph - if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) { - basePath = clonePath(removePath); - this.pushComponent(basePath.components, oldString[oldPos], undefined, true); - } else { - basePath = clonePath(addPath); - basePath.newPos++; - this.pushComponent(basePath.components, newString[basePath.newPos], true, undefined); - } - - var oldPos = this.extractCommon(basePath, newString, oldString, diagonalPath); - - if (basePath.newPos+1 >= newLen && oldPos+1 >= oldLen) { - return basePath.components; - } else { - bestPath[diagonalPath] = basePath; - } - } - } - }, - - pushComponent: function(components, value, added, removed) { - var last = components[components.length-1]; - if (last && last.added === added && last.removed === removed) { - // We need to clone here as the component clone operation is just - // as shallow array clone - components[components.length-1] = - {value: this.join(last.value, value), added: added, removed: removed }; - } else { - components.push({value: value, added: added, removed: removed }); - } - }, - extractCommon: function(basePath, newString, oldString, diagonalPath) { - var newLen = newString.length, - oldLen = oldString.length, - newPos = basePath.newPos, - oldPos = newPos - diagonalPath; - while (newPos+1 < newLen && oldPos+1 < oldLen && this.equals(newString[newPos+1], oldString[oldPos+1])) { - newPos++; - oldPos++; - - this.pushComponent(basePath.components, newString[newPos], undefined, undefined); - } - basePath.newPos = newPos; - return oldPos; - }, - - equals: function(left, right) { - var reWhitespace = /\S/; - if (this.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right)) { - return true; - } else { - return left === right; - } - }, - join: function(left, right) { - return left + right; - }, - tokenize: function(value) { - return value; - } - }; - - var CharDiff = new Diff(); - - var WordDiff = new Diff(true); - var WordWithSpaceDiff = new Diff(); - WordDiff.tokenize = WordWithSpaceDiff.tokenize = function(value) { - return removeEmpty(value.split(/(\s+|\b)/)); - }; - - var CssDiff = new Diff(true); - CssDiff.tokenize = function(value) { - return removeEmpty(value.split(/([{}:;,]|\s+)/)); - }; - - var LineDiff = new Diff(); - LineDiff.tokenize = function(value) { - return value.split(/^/m); - }; - - return { - Diff: Diff, - - diffChars: function(oldStr, newStr) { return CharDiff.diff(oldStr, newStr); }, - diffWords: function(oldStr, newStr) { return WordDiff.diff(oldStr, newStr); }, - diffWordsWithSpace: function(oldStr, newStr) { return WordWithSpaceDiff.diff(oldStr, newStr); }, - diffLines: function(oldStr, newStr) { return LineDiff.diff(oldStr, newStr); }, - - diffCss: function(oldStr, newStr) { return CssDiff.diff(oldStr, newStr); }, - - createPatch: function(fileName, oldStr, newStr, oldHeader, newHeader) { - var ret = []; - - ret.push('Index: ' + fileName); - ret.push('==================================================================='); - ret.push('--- ' + fileName + (typeof oldHeader === 'undefined' ? '' : '\t' + oldHeader)); - ret.push('+++ ' + fileName + (typeof newHeader === 'undefined' ? '' : '\t' + newHeader)); - - var diff = LineDiff.diff(oldStr, newStr); - if (!diff[diff.length-1].value) { - diff.pop(); // Remove trailing newline add - } - diff.push({value: '', lines: []}); // Append an empty value to make cleanup easier - - function contextLines(lines) { - return lines.map(function(entry) { return ' ' + entry; }); - } - function eofNL(curRange, i, current) { - var last = diff[diff.length-2], - isLast = i === diff.length-2, - isLastOfType = i === diff.length-3 && (current.added !== last.added || current.removed !== last.removed); - - // Figure out if this is the last line for the given file and missing NL - if (!/\n$/.test(current.value) && (isLast || isLastOfType)) { - curRange.push('\\ No newline at end of file'); - } - } - - var oldRangeStart = 0, newRangeStart = 0, curRange = [], - oldLine = 1, newLine = 1; - for (var i = 0; i < diff.length; i++) { - var current = diff[i], - lines = current.lines || current.value.replace(/\n$/, '').split('\n'); - current.lines = lines; - - if (current.added || current.removed) { - if (!oldRangeStart) { - var prev = diff[i-1]; - oldRangeStart = oldLine; - newRangeStart = newLine; - - if (prev) { - curRange = contextLines(prev.lines.slice(-4)); - oldRangeStart -= curRange.length; - newRangeStart -= curRange.length; - } - } - curRange.push.apply(curRange, lines.map(function(entry) { return (current.added?'+':'-') + entry; })); - eofNL(curRange, i, current); - - if (current.added) { - newLine += lines.length; - } else { - oldLine += lines.length; - } - } else { - if (oldRangeStart) { - // Close out any changes that have been output (or join overlapping) - if (lines.length <= 8 && i < diff.length-2) { - // Overlapping - curRange.push.apply(curRange, contextLines(lines)); - } else { - // end the range and output - var contextSize = Math.min(lines.length, 4); - ret.push( - '@@ -' + oldRangeStart + ',' + (oldLine-oldRangeStart+contextSize) - + ' +' + newRangeStart + ',' + (newLine-newRangeStart+contextSize) - + ' @@'); - ret.push.apply(ret, curRange); - ret.push.apply(ret, contextLines(lines.slice(0, contextSize))); - if (lines.length <= 4) { - eofNL(ret, i, current); - } - - oldRangeStart = 0; newRangeStart = 0; curRange = []; - } - } - oldLine += lines.length; - newLine += lines.length; - } - } - - return ret.join('\n') + '\n'; - }, - - applyPatch: function(oldStr, uniDiff) { - var diffstr = uniDiff.split('\n'); - var diff = []; - var remEOFNL = false, - addEOFNL = false; - - for (var i = (diffstr[0][0]==='I'?4:0); i < diffstr.length; i++) { - if(diffstr[i][0] === '@') { - var meh = diffstr[i].split(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/); - diff.unshift({ - start:meh[3], - oldlength:meh[2], - oldlines:[], - newlength:meh[4], - newlines:[] - }); - } else if(diffstr[i][0] === '+') { - diff[0].newlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === '-') { - diff[0].oldlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === ' ') { - diff[0].newlines.push(diffstr[i].substr(1)); - diff[0].oldlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === '\\') { - if (diffstr[i-1][0] === '+') { - remEOFNL = true; - } else if(diffstr[i-1][0] === '-') { - addEOFNL = true; - } - } - } - - var str = oldStr.split('\n'); - for (var i = diff.length - 1; i >= 0; i--) { - var d = diff[i]; - for (var j = 0; j < d.oldlength; j++) { - if(str[d.start-1+j] !== d.oldlines[j]) { - return false; - } - } - Array.prototype.splice.apply(str,[d.start-1,+d.oldlength].concat(d.newlines)); - } - - if (remEOFNL) { - while (!str[str.length-1]) { - str.pop(); - } - } else if (addEOFNL) { - str.push(''); - } - return str.join('\n'); - }, - - convertChangesToXML: function(changes){ - var ret = []; - for ( var i = 0; i < changes.length; i++) { - var change = changes[i]; - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - - ret.push(escapeHTML(change.value)); - - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - } - return ret.join(''); - }, - - // See: http://code.google.com/p/google-diff-match-patch/wiki/API - convertChangesToDMP: function(changes){ - var ret = [], change; - for ( var i = 0; i < changes.length; i++) { - change = changes[i]; - ret.push([(change.added ? 1 : change.removed ? -1 : 0), change.value]); - } - return ret; - } - }; -})(); - -if (typeof module !== 'undefined') { - module.exports = JsDiff; -} - -}); // module: browser/diff.js - -require.register("browser/events.js", function(module, exports, require){ - -/** - * Module exports. - */ - -exports.EventEmitter = EventEmitter; - -/** - * Check if `obj` is an array. - */ - -function isArray(obj) { - return '[object Array]' == {}.toString.call(obj); -} - -/** - * Event emitter constructor. - * - * @api public - */ - -function EventEmitter(){}; - -/** - * Adds a listener. - * - * @api public - */ - -EventEmitter.prototype.on = function (name, fn) { - if (!this.$events) { - this.$events = {}; - } - - if (!this.$events[name]) { - this.$events[name] = fn; - } else if (isArray(this.$events[name])) { - this.$events[name].push(fn); - } else { - this.$events[name] = [this.$events[name], fn]; - } - - return this; -}; - -EventEmitter.prototype.addListener = EventEmitter.prototype.on; - -/** - * Adds a volatile listener. - * - * @api public - */ - -EventEmitter.prototype.once = function (name, fn) { - var self = this; - - function on () { - self.removeListener(name, on); - fn.apply(this, arguments); - }; - - on.listener = fn; - this.on(name, on); - - return this; -}; - -/** - * Removes a listener. - * - * @api public - */ - -EventEmitter.prototype.removeListener = function (name, fn) { - if (this.$events && this.$events[name]) { - var list = this.$events[name]; - - if (isArray(list)) { - var pos = -1; - - for (var i = 0, l = list.length; i < l; i++) { - if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { - pos = i; - break; - } - } - - if (pos < 0) { - return this; - } - - list.splice(pos, 1); - - if (!list.length) { - delete this.$events[name]; - } - } else if (list === fn || (list.listener && list.listener === fn)) { - delete this.$events[name]; - } - } - - return this; -}; - -/** - * Removes all listeners for an event. - * - * @api public - */ - -EventEmitter.prototype.removeAllListeners = function (name) { - if (name === undefined) { - this.$events = {}; - return this; - } - - if (this.$events && this.$events[name]) { - this.$events[name] = null; - } - - return this; -}; - -/** - * Gets all listeners for a certain event. - * - * @api public - */ - -EventEmitter.prototype.listeners = function (name) { - if (!this.$events) { - this.$events = {}; - } - - if (!this.$events[name]) { - this.$events[name] = []; - } - - if (!isArray(this.$events[name])) { - this.$events[name] = [this.$events[name]]; - } - - return this.$events[name]; -}; - -/** - * Emits an event. - * - * @api public - */ - -EventEmitter.prototype.emit = function (name) { - if (!this.$events) { - return false; - } - - var handler = this.$events[name]; - - if (!handler) { - return false; - } - - var args = [].slice.call(arguments, 1); - - if ('function' == typeof handler) { - handler.apply(this, args); - } else if (isArray(handler)) { - var listeners = handler.slice(); - - for (var i = 0, l = listeners.length; i < l; i++) { - listeners[i].apply(this, args); - } - } else { - return false; - } - - return true; -}; -}); // module: browser/events.js - -require.register("browser/fs.js", function(module, exports, require){ - -}); // module: browser/fs.js - -require.register("browser/path.js", function(module, exports, require){ - -}); // module: browser/path.js - -require.register("browser/progress.js", function(module, exports, require){ -/** - * Expose `Progress`. - */ - -module.exports = Progress; - -/** - * Initialize a new `Progress` indicator. - */ - -function Progress() { - this.percent = 0; - this.size(0); - this.fontSize(11); - this.font('helvetica, arial, sans-serif'); -} - -/** - * Set progress size to `n`. - * - * @param {Number} n - * @return {Progress} for chaining - * @api public - */ - -Progress.prototype.size = function(n){ - this._size = n; - return this; -}; - -/** - * Set text to `str`. - * - * @param {String} str - * @return {Progress} for chaining - * @api public - */ - -Progress.prototype.text = function(str){ - this._text = str; - return this; -}; - -/** - * Set font size to `n`. - * - * @param {Number} n - * @return {Progress} for chaining - * @api public - */ - -Progress.prototype.fontSize = function(n){ - this._fontSize = n; - return this; -}; - -/** - * Set font `family`. - * - * @param {String} family - * @return {Progress} for chaining - */ - -Progress.prototype.font = function(family){ - this._font = family; - return this; -}; - -/** - * Update percentage to `n`. - * - * @param {Number} n - * @return {Progress} for chaining - */ - -Progress.prototype.update = function(n){ - this.percent = n; - return this; -}; - -/** - * Draw on `ctx`. - * - * @param {CanvasRenderingContext2d} ctx - * @return {Progress} for chaining - */ - -Progress.prototype.draw = function(ctx){ - try { - var percent = Math.min(this.percent, 100) - , size = this._size - , half = size / 2 - , x = half - , y = half - , rad = half - 1 - , fontSize = this._fontSize; - - ctx.font = fontSize + 'px ' + this._font; - - var angle = Math.PI * 2 * (percent / 100); - ctx.clearRect(0, 0, size, size); - - // outer circle - ctx.strokeStyle = '#9f9f9f'; - ctx.beginPath(); - ctx.arc(x, y, rad, 0, angle, false); - ctx.stroke(); - - // inner circle - ctx.strokeStyle = '#eee'; - ctx.beginPath(); - ctx.arc(x, y, rad - 1, 0, angle, true); - ctx.stroke(); - - // text - var text = this._text || (percent | 0) + '%' - , w = ctx.measureText(text).width; - - ctx.fillText( - text - , x - w / 2 + 1 - , y + fontSize / 2 - 1); - } catch (ex) {} //don't fail if we can't render progress - return this; -}; - -}); // module: browser/progress.js - -require.register("browser/tty.js", function(module, exports, require){ - -exports.isatty = function(){ - return true; -}; - -exports.getWindowSize = function(){ - if ('innerHeight' in global) { - return [global.innerHeight, global.innerWidth]; - } else { - // In a Web Worker, the DOM Window is not available. - return [640, 480]; - } -}; - -}); // module: browser/tty.js - -require.register("context.js", function(module, exports, require){ - -/** - * Expose `Context`. - */ - -module.exports = Context; - -/** - * Initialize a new `Context`. - * - * @api private - */ - -function Context(){} - -/** - * Set or get the context `Runnable` to `runnable`. - * - * @param {Runnable} runnable - * @return {Context} - * @api private - */ - -Context.prototype.runnable = function(runnable){ - if (0 == arguments.length) return this._runnable; - this.test = this._runnable = runnable; - return this; -}; - -/** - * Set test timeout `ms`. - * - * @param {Number} ms - * @return {Context} self - * @api private - */ - -Context.prototype.timeout = function(ms){ - this.runnable().timeout(ms); - return this; -}; - -/** - * Set test slowness threshold `ms`. - * - * @param {Number} ms - * @return {Context} self - * @api private - */ - -Context.prototype.slow = function(ms){ - this.runnable().slow(ms); - return this; -}; - -/** - * Inspect the context void of `._runnable`. - * - * @return {String} - * @api private - */ - -Context.prototype.inspect = function(){ - return JSON.stringify(this, function(key, val){ - if ('_runnable' == key) return; - if ('test' == key) return; - return val; - }, 2); -}; - -}); // module: context.js - -require.register("hook.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Runnable = require('./runnable'); - -/** - * Expose `Hook`. - */ - -module.exports = Hook; - -/** - * Initialize a new `Hook` with the given `title` and callback `fn`. - * - * @param {String} title - * @param {Function} fn - * @api private - */ - -function Hook(title, fn) { - Runnable.call(this, title, fn); - this.type = 'hook'; -} - -/** - * Inherit from `Runnable.prototype`. - */ - -function F(){}; -F.prototype = Runnable.prototype; -Hook.prototype = new F; -Hook.prototype.constructor = Hook; - - -/** - * Get or set the test `err`. - * - * @param {Error} err - * @return {Error} - * @api public - */ - -Hook.prototype.error = function(err){ - if (0 == arguments.length) { - var err = this._error; - this._error = null; - return err; - } - - this._error = err; -}; - -}); // module: hook.js - -require.register("interfaces/bdd.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Suite = require('../suite') - , Test = require('../test') - , utils = require('../utils'); - -/** - * BDD-style interface: - * - * describe('Array', function(){ - * describe('#indexOf()', function(){ - * it('should return -1 when not present', function(){ - * - * }); - * - * it('should return the index when present', function(){ - * - * }); - * }); - * }); - * - */ - -module.exports = function(suite){ - var suites = [suite]; - - suite.on('pre-require', function(context, file, mocha){ - - /** - * Execute before running tests. - */ - - context.before = function(fn){ - suites[0].beforeAll(fn); - }; - - /** - * Execute after running tests. - */ - - context.after = function(fn){ - suites[0].afterAll(fn); - }; - - /** - * Execute before each test case. - */ - - context.beforeEach = function(fn){ - suites[0].beforeEach(fn); - }; - - /** - * Execute after each test case. - */ - - context.afterEach = function(fn){ - suites[0].afterEach(fn); - }; - - /** - * Describe a "suite" with the given `title` - * and callback `fn` containing nested suites - * and/or tests. - */ - - context.describe = context.context = function(title, fn){ - var suite = Suite.create(suites[0], title); - suites.unshift(suite); - fn.call(suite); - suites.shift(); - return suite; - }; - - /** - * Pending describe. - */ - - context.xdescribe = - context.xcontext = - context.describe.skip = function(title, fn){ - var suite = Suite.create(suites[0], title); - suite.pending = true; - suites.unshift(suite); - fn.call(suite); - suites.shift(); - }; - - /** - * Exclusive suite. - */ - - context.describe.only = function(title, fn){ - var suite = context.describe(title, fn); - mocha.grep(suite.fullTitle()); - return suite; - }; - - /** - * Describe a specification or test-case - * with the given `title` and callback `fn` - * acting as a thunk. - */ - - context.it = context.specify = function(title, fn){ - var suite = suites[0]; - if (suite.pending) var fn = null; - var test = new Test(title, fn); - suite.addTest(test); - return test; - }; - - /** - * Exclusive test-case. - */ - - context.it.only = function(title, fn){ - var test = context.it(title, fn); - var reString = '^' + utils.escapeRegexp(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); - return test; - }; - - /** - * Pending test case. - */ - - context.xit = - context.xspecify = - context.it.skip = function(title){ - context.it(title); - }; - }); -}; - -}); // module: interfaces/bdd.js - -require.register("interfaces/exports.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Suite = require('../suite') - , Test = require('../test'); - -/** - * TDD-style interface: - * - * exports.Array = { - * '#indexOf()': { - * 'should return -1 when the value is not present': function(){ - * - * }, - * - * 'should return the correct index when the value is present': function(){ - * - * } - * } - * }; - * - */ - -module.exports = function(suite){ - var suites = [suite]; - - suite.on('require', visit); - - function visit(obj) { - var suite; - for (var key in obj) { - if ('function' == typeof obj[key]) { - var fn = obj[key]; - switch (key) { - case 'before': - suites[0].beforeAll(fn); - break; - case 'after': - suites[0].afterAll(fn); - break; - case 'beforeEach': - suites[0].beforeEach(fn); - break; - case 'afterEach': - suites[0].afterEach(fn); - break; - default: - suites[0].addTest(new Test(key, fn)); - } - } else { - var suite = Suite.create(suites[0], key); - suites.unshift(suite); - visit(obj[key]); - suites.shift(); - } - } - } -}; - -}); // module: interfaces/exports.js - -require.register("interfaces/index.js", function(module, exports, require){ - -exports.bdd = require('./bdd'); -exports.tdd = require('./tdd'); -exports.qunit = require('./qunit'); -exports.exports = require('./exports'); - -}); // module: interfaces/index.js - -require.register("interfaces/qunit.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Suite = require('../suite') - , Test = require('../test') - , utils = require('../utils'); - -/** - * QUnit-style interface: - * - * suite('Array'); - * - * test('#length', function(){ - * var arr = [1,2,3]; - * ok(arr.length == 3); - * }); - * - * test('#indexOf()', function(){ - * var arr = [1,2,3]; - * ok(arr.indexOf(1) == 0); - * ok(arr.indexOf(2) == 1); - * ok(arr.indexOf(3) == 2); - * }); - * - * suite('String'); - * - * test('#length', function(){ - * ok('foo'.length == 3); - * }); - * - */ - -module.exports = function(suite){ - var suites = [suite]; - - suite.on('pre-require', function(context, file, mocha){ - - /** - * Execute before running tests. - */ - - context.before = function(fn){ - suites[0].beforeAll(fn); - }; - - /** - * Execute after running tests. - */ - - context.after = function(fn){ - suites[0].afterAll(fn); - }; - - /** - * Execute before each test case. - */ - - context.beforeEach = function(fn){ - suites[0].beforeEach(fn); - }; - - /** - * Execute after each test case. - */ - - context.afterEach = function(fn){ - suites[0].afterEach(fn); - }; - - /** - * Describe a "suite" with the given `title`. - */ - - context.suite = function(title){ - if (suites.length > 1) suites.shift(); - var suite = Suite.create(suites[0], title); - suites.unshift(suite); - return suite; - }; - - /** - * Exclusive test-case. - */ - - context.suite.only = function(title, fn){ - var suite = context.suite(title, fn); - mocha.grep(suite.fullTitle()); - }; - - /** - * Describe a specification or test-case - * with the given `title` and callback `fn` - * acting as a thunk. - */ - - context.test = function(title, fn){ - var test = new Test(title, fn); - suites[0].addTest(test); - return test; - }; - - /** - * Exclusive test-case. - */ - - context.test.only = function(title, fn){ - var test = context.test(title, fn); - var reString = '^' + utils.escapeRegexp(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); - }; - - /** - * Pending test case. - */ - - context.test.skip = function(title){ - context.test(title); - }; - }); -}; - -}); // module: interfaces/qunit.js - -require.register("interfaces/tdd.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Suite = require('../suite') - , Test = require('../test') - , utils = require('../utils');; - -/** - * TDD-style interface: - * - * suite('Array', function(){ - * suite('#indexOf()', function(){ - * suiteSetup(function(){ - * - * }); - * - * test('should return -1 when not present', function(){ - * - * }); - * - * test('should return the index when present', function(){ - * - * }); - * - * suiteTeardown(function(){ - * - * }); - * }); - * }); - * - */ - -module.exports = function(suite){ - var suites = [suite]; - - suite.on('pre-require', function(context, file, mocha){ - - /** - * Execute before each test case. - */ - - context.setup = function(fn){ - suites[0].beforeEach(fn); - }; - - /** - * Execute after each test case. - */ - - context.teardown = function(fn){ - suites[0].afterEach(fn); - }; - - /** - * Execute before the suite. - */ - - context.suiteSetup = function(fn){ - suites[0].beforeAll(fn); - }; - - /** - * Execute after the suite. - */ - - context.suiteTeardown = function(fn){ - suites[0].afterAll(fn); - }; - - /** - * Describe a "suite" with the given `title` - * and callback `fn` containing nested suites - * and/or tests. - */ - - context.suite = function(title, fn){ - var suite = Suite.create(suites[0], title); - suites.unshift(suite); - fn.call(suite); - suites.shift(); - return suite; - }; - - /** - * Pending suite. - */ - context.suite.skip = function(title, fn) { - var suite = Suite.create(suites[0], title); - suite.pending = true; - suites.unshift(suite); - fn.call(suite); - suites.shift(); - }; - - /** - * Exclusive test-case. - */ - - context.suite.only = function(title, fn){ - var suite = context.suite(title, fn); - mocha.grep(suite.fullTitle()); - }; - - /** - * Describe a specification or test-case - * with the given `title` and callback `fn` - * acting as a thunk. - */ - - context.test = function(title, fn){ - var suite = suites[0]; - if (suite.pending) var fn = null; - var test = new Test(title, fn); - suite.addTest(test); - return test; - }; - - /** - * Exclusive test-case. - */ - - context.test.only = function(title, fn){ - var test = context.test(title, fn); - var reString = '^' + utils.escapeRegexp(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); - }; - - /** - * Pending test case. - */ - - context.test.skip = function(title){ - context.test(title); - }; - }); -}; - -}); // module: interfaces/tdd.js - -require.register("mocha.js", function(module, exports, require){ -/*! - * mocha - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var path = require('browser/path') - , utils = require('./utils'); - -/** - * Expose `Mocha`. - */ - -exports = module.exports = Mocha; - -/** - * Expose internals. - */ - -exports.utils = utils; -exports.interfaces = require('./interfaces'); -exports.reporters = require('./reporters'); -exports.Runnable = require('./runnable'); -exports.Context = require('./context'); -exports.Runner = require('./runner'); -exports.Suite = require('./suite'); -exports.Hook = require('./hook'); -exports.Test = require('./test'); - -/** - * Return image `name` path. - * - * @param {String} name - * @return {String} - * @api private - */ - -function image(name) { - return __dirname + '/../images/' + name + '.png'; -} - -/** - * Setup mocha with `options`. - * - * Options: - * - * - `ui` name "bdd", "tdd", "exports" etc - * - `reporter` reporter instance, defaults to `mocha.reporters.Dot` - * - `globals` array of accepted globals - * - `timeout` timeout in milliseconds - * - `bail` bail on the first test failure - * - `slow` milliseconds to wait before considering a test slow - * - `ignoreLeaks` ignore global leaks - * - `grep` string or regexp to filter tests with - * - * @param {Object} options - * @api public - */ - -function Mocha(options) { - options = options || {}; - this.files = []; - this.options = options; - this.grep(options.grep); - this.suite = new exports.Suite('', new exports.Context); - this.ui(options.ui); - this.bail(options.bail); - this.reporter(options.reporter); - if (null != options.timeout) this.timeout(options.timeout); - this.useColors(options.useColors) - if (options.slow) this.slow(options.slow); - - this.suite.on('pre-require', function (context) { - exports.afterEach = context.afterEach || context.teardown; - exports.after = context.after || context.suiteTeardown; - exports.beforeEach = context.beforeEach || context.setup; - exports.before = context.before || context.suiteSetup; - exports.describe = context.describe || context.suite; - exports.it = context.it || context.test; - exports.setup = context.setup || context.beforeEach; - exports.suiteSetup = context.suiteSetup || context.before; - exports.suiteTeardown = context.suiteTeardown || context.after; - exports.suite = context.suite || context.describe; - exports.teardown = context.teardown || context.afterEach; - exports.test = context.test || context.it; - }); -} - -/** - * Enable or disable bailing on the first failure. - * - * @param {Boolean} [bail] - * @api public - */ - -Mocha.prototype.bail = function(bail){ - if (0 == arguments.length) bail = true; - this.suite.bail(bail); - return this; -}; - -/** - * Add test `file`. - * - * @param {String} file - * @api public - */ - -Mocha.prototype.addFile = function(file){ - this.files.push(file); - return this; -}; - -/** - * Set reporter to `reporter`, defaults to "dot". - * - * @param {String|Function} reporter name or constructor - * @api public - */ - -Mocha.prototype.reporter = function(reporter){ - if ('function' == typeof reporter) { - this._reporter = reporter; - } else { - reporter = reporter || 'dot'; - var _reporter; - try { _reporter = require('./reporters/' + reporter); } catch (err) {}; - if (!_reporter) try { _reporter = require(reporter); } catch (err) {}; - if (!_reporter && reporter === 'teamcity') - console.warn('The Teamcity reporter was moved to a package named ' + - 'mocha-teamcity-reporter ' + - '(https://npmjs.org/package/mocha-teamcity-reporter).'); - if (!_reporter) throw new Error('invalid reporter "' + reporter + '"'); - this._reporter = _reporter; - } - return this; -}; - -/** - * Set test UI `name`, defaults to "bdd". - * - * @param {String} bdd - * @api public - */ - -Mocha.prototype.ui = function(name){ - name = name || 'bdd'; - this._ui = exports.interfaces[name]; - if (!this._ui) try { this._ui = require(name); } catch (err) {}; - if (!this._ui) throw new Error('invalid interface "' + name + '"'); - this._ui = this._ui(this.suite); - return this; -}; - -/** - * Load registered files. - * - * @api private - */ - -Mocha.prototype.loadFiles = function(fn){ - var self = this; - var suite = this.suite; - var pending = this.files.length; - this.files.forEach(function(file){ - file = path.resolve(file); - suite.emit('pre-require', global, file, self); - suite.emit('require', require(file), file, self); - suite.emit('post-require', global, file, self); - --pending || (fn && fn()); - }); -}; - -/** - * Enable growl support. - * - * @api private - */ - -Mocha.prototype._growl = function(runner, reporter) { - var notify = require('growl'); - - runner.on('end', function(){ - var stats = reporter.stats; - if (stats.failures) { - var msg = stats.failures + ' of ' + runner.total + ' tests failed'; - notify(msg, { name: 'mocha', title: 'Failed', image: image('error') }); - } else { - notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', { - name: 'mocha' - , title: 'Passed' - , image: image('ok') - }); - } - }); -}; - -/** - * Add regexp to grep, if `re` is a string it is escaped. - * - * @param {RegExp|String} re - * @return {Mocha} - * @api public - */ - -Mocha.prototype.grep = function(re){ - this.options.grep = 'string' == typeof re - ? new RegExp(utils.escapeRegexp(re)) - : re; - return this; -}; - -/** - * Invert `.grep()` matches. - * - * @return {Mocha} - * @api public - */ - -Mocha.prototype.invert = function(){ - this.options.invert = true; - return this; -}; - -/** - * Ignore global leaks. - * - * @param {Boolean} ignore - * @return {Mocha} - * @api public - */ - -Mocha.prototype.ignoreLeaks = function(ignore){ - this.options.ignoreLeaks = !!ignore; - return this; -}; - -/** - * Enable global leak checking. - * - * @return {Mocha} - * @api public - */ - -Mocha.prototype.checkLeaks = function(){ - this.options.ignoreLeaks = false; - return this; -}; - -/** - * Enable growl support. - * - * @return {Mocha} - * @api public - */ - -Mocha.prototype.growl = function(){ - this.options.growl = true; - return this; -}; - -/** - * Ignore `globals` array or string. - * - * @param {Array|String} globals - * @return {Mocha} - * @api public - */ - -Mocha.prototype.globals = function(globals){ - this.options.globals = (this.options.globals || []).concat(globals); - return this; -}; - -/** - * Emit color output. - * - * @param {Boolean} colors - * @return {Mocha} - * @api public - */ - -Mocha.prototype.useColors = function(colors){ - this.options.useColors = arguments.length && colors != undefined - ? colors - : true; - return this; -}; - -/** - * Use inline diffs rather than +/-. - * - * @param {Boolean} inlineDiffs - * @return {Mocha} - * @api public - */ - -Mocha.prototype.useInlineDiffs = function(inlineDiffs) { - this.options.useInlineDiffs = arguments.length && inlineDiffs != undefined - ? inlineDiffs - : false; - return this; -}; - -/** - * Set the timeout in milliseconds. - * - * @param {Number} timeout - * @return {Mocha} - * @api public - */ - -Mocha.prototype.timeout = function(timeout){ - this.suite.timeout(timeout); - return this; -}; - -/** - * Set slowness threshold in milliseconds. - * - * @param {Number} slow - * @return {Mocha} - * @api public - */ - -Mocha.prototype.slow = function(slow){ - this.suite.slow(slow); - return this; -}; - -/** - * Makes all tests async (accepting a callback) - * - * @return {Mocha} - * @api public - */ - -Mocha.prototype.asyncOnly = function(){ - this.options.asyncOnly = true; - return this; -}; - -/** - * Run tests and invoke `fn()` when complete. - * - * @param {Function} fn - * @return {Runner} - * @api public - */ - -Mocha.prototype.run = function(fn){ - if (this.files.length) this.loadFiles(); - var suite = this.suite; - var options = this.options; - var runner = new exports.Runner(suite); - var reporter = new this._reporter(runner); - runner.ignoreLeaks = false !== options.ignoreLeaks; - runner.asyncOnly = options.asyncOnly; - if (options.grep) runner.grep(options.grep, options.invert); - if (options.globals) runner.globals(options.globals); - if (options.growl) this._growl(runner, reporter); - exports.reporters.Base.useColors = options.useColors; - exports.reporters.Base.inlineDiffs = options.useInlineDiffs; - return runner.run(fn); -}; - -}); // module: mocha.js - -require.register("ms.js", function(module, exports, require){ -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} options - * @return {String|Number} - * @api public - */ - -module.exports = function(val, options){ - options = options || {}; - if ('string' == typeof val) return parse(val); - return options.long ? longFormat(val) : shortFormat(val); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - var match = /^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(str); - if (!match) return; - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'y': - return n * y; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 's': - return n * s; - case 'ms': - return n; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function shortFormat(ms) { - if (ms >= d) return Math.round(ms / d) + 'd'; - if (ms >= h) return Math.round(ms / h) + 'h'; - if (ms >= m) return Math.round(ms / m) + 'm'; - if (ms >= s) return Math.round(ms / s) + 's'; - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function longFormat(ms) { - return plural(ms, d, 'day') - || plural(ms, h, 'hour') - || plural(ms, m, 'minute') - || plural(ms, s, 'second') - || ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, n, name) { - if (ms < n) return; - if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name; - return Math.ceil(ms / n) + ' ' + name + 's'; -} - -}); // module: ms.js - -require.register("reporters/base.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var tty = require('browser/tty') - , diff = require('browser/diff') - , ms = require('../ms') - , utils = require('../utils'); - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Check if both stdio streams are associated with a tty. - */ - -var isatty = tty.isatty(1) && tty.isatty(2); - -/** - * Expose `Base`. - */ - -exports = module.exports = Base; - -/** - * Enable coloring by default. - */ - -exports.useColors = isatty || (process.env.MOCHA_COLORS !== undefined); - -/** - * Inline diffs instead of +/- - */ - -exports.inlineDiffs = false; - -/** - * Default color map. - */ - -exports.colors = { - 'pass': 90 - , 'fail': 31 - , 'bright pass': 92 - , 'bright fail': 91 - , 'bright yellow': 93 - , 'pending': 36 - , 'suite': 0 - , 'error title': 0 - , 'error message': 31 - , 'error stack': 90 - , 'checkmark': 32 - , 'fast': 90 - , 'medium': 33 - , 'slow': 31 - , 'green': 32 - , 'light': 90 - , 'diff gutter': 90 - , 'diff added': 42 - , 'diff removed': 41 -}; - -/** - * Default symbol map. - */ - -exports.symbols = { - ok: '✓', - err: '✖', - dot: '․' -}; - -// With node.js on Windows: use symbols available in terminal default fonts -if ('win32' == process.platform) { - exports.symbols.ok = '\u221A'; - exports.symbols.err = '\u00D7'; - exports.symbols.dot = '.'; -} - -/** - * Color `str` with the given `type`, - * allowing colors to be disabled, - * as well as user-defined color - * schemes. - * - * @param {String} type - * @param {String} str - * @return {String} - * @api private - */ - -var color = exports.color = function(type, str) { - if (!exports.useColors) return str; - return '\u001b[' + exports.colors[type] + 'm' + str + '\u001b[0m'; -}; - -/** - * Expose term window size, with some - * defaults for when stderr is not a tty. - */ - -exports.window = { - width: isatty - ? process.stdout.getWindowSize - ? process.stdout.getWindowSize(1)[0] - : tty.getWindowSize()[1] - : 75 -}; - -/** - * Expose some basic cursor interactions - * that are common among reporters. - */ - -exports.cursor = { - hide: function(){ - isatty && process.stdout.write('\u001b[?25l'); - }, - - show: function(){ - isatty && process.stdout.write('\u001b[?25h'); - }, - - deleteLine: function(){ - isatty && process.stdout.write('\u001b[2K'); - }, - - beginningOfLine: function(){ - isatty && process.stdout.write('\u001b[0G'); - }, - - CR: function(){ - if (isatty) { - exports.cursor.deleteLine(); - exports.cursor.beginningOfLine(); - } else { - process.stdout.write('\r'); - } - } -}; - -/** - * Outut the given `failures` as a list. - * - * @param {Array} failures - * @api public - */ - -exports.list = function(failures){ - console.error(); - failures.forEach(function(test, i){ - // format - var fmt = color('error title', ' %s) %s:\n') - + color('error message', ' %s') - + color('error stack', '\n%s\n'); - - // msg - var err = test.err - , message = err.message || '' - , stack = err.stack || message - , index = stack.indexOf(message) + message.length - , msg = stack.slice(0, index) - , actual = err.actual - , expected = err.expected - , escape = true; - - // uncaught - if (err.uncaught) { - msg = 'Uncaught ' + msg; - } - - // explicitly show diff - if (err.showDiff && sameType(actual, expected)) { - escape = false; - err.actual = actual = stringify(canonicalize(actual)); - err.expected = expected = stringify(canonicalize(expected)); - } - - // actual / expected diff - if ('string' == typeof actual && 'string' == typeof expected) { - fmt = color('error title', ' %s) %s:\n%s') + color('error stack', '\n%s\n'); - var match = message.match(/^([^:]+): expected/); - msg = '\n ' + color('error message', match ? match[1] : msg); - - if (exports.inlineDiffs) { - msg += inlineDiff(err, escape); - } else { - msg += unifiedDiff(err, escape); - } - } - - // indent stack trace without msg - stack = stack.slice(index ? index + 1 : index) - .replace(/^/gm, ' '); - - console.error(fmt, (i + 1), test.fullTitle(), msg, stack); - }); -}; - -/** - * Initialize a new `Base` reporter. - * - * All other reporters generally - * inherit from this reporter, providing - * stats such as test duration, number - * of tests passed / failed etc. - * - * @param {Runner} runner - * @api public - */ - -function Base(runner) { - var self = this - , stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 } - , failures = this.failures = []; - - if (!runner) return; - this.runner = runner; - - runner.stats = stats; - - runner.on('start', function(){ - stats.start = new Date; - }); - - runner.on('suite', function(suite){ - stats.suites = stats.suites || 0; - suite.root || stats.suites++; - }); - - runner.on('test end', function(test){ - stats.tests = stats.tests || 0; - stats.tests++; - }); - - runner.on('pass', function(test){ - stats.passes = stats.passes || 0; - - var medium = test.slow() / 2; - test.speed = test.duration > test.slow() - ? 'slow' - : test.duration > medium - ? 'medium' - : 'fast'; - - stats.passes++; - }); - - runner.on('fail', function(test, err){ - stats.failures = stats.failures || 0; - stats.failures++; - test.err = err; - failures.push(test); - }); - - runner.on('end', function(){ - stats.end = new Date; - stats.duration = new Date - stats.start; - }); - - runner.on('pending', function(){ - stats.pending++; - }); -} - -/** - * Output common epilogue used by many of - * the bundled reporters. - * - * @api public - */ - -Base.prototype.epilogue = function(){ - var stats = this.stats; - var tests; - var fmt; - - console.log(); - - // passes - fmt = color('bright pass', ' ') - + color('green', ' %d passing') - + color('light', ' (%s)'); - - console.log(fmt, - stats.passes || 0, - ms(stats.duration)); - - // pending - if (stats.pending) { - fmt = color('pending', ' ') - + color('pending', ' %d pending'); - - console.log(fmt, stats.pending); - } - - // failures - if (stats.failures) { - fmt = color('fail', ' %d failing'); - - console.error(fmt, - stats.failures); - - Base.list(this.failures); - console.error(); - } - - console.log(); -}; - -/** - * Pad the given `str` to `len`. - * - * @param {String} str - * @param {String} len - * @return {String} - * @api private - */ - -function pad(str, len) { - str = String(str); - return Array(len - str.length + 1).join(' ') + str; -} - - -/** - * Returns an inline diff between 2 strings with coloured ANSI output - * - * @param {Error} Error with actual/expected - * @return {String} Diff - * @api private - */ - -function inlineDiff(err, escape) { - var msg = errorDiff(err, 'WordsWithSpace', escape); - - // linenos - var lines = msg.split('\n'); - if (lines.length > 4) { - var width = String(lines.length).length; - msg = lines.map(function(str, i){ - return pad(++i, width) + ' |' + ' ' + str; - }).join('\n'); - } - - // legend - msg = '\n' - + color('diff removed', 'actual') - + ' ' - + color('diff added', 'expected') - + '\n\n' - + msg - + '\n'; - - // indent - msg = msg.replace(/^/gm, ' '); - return msg; -} - -/** - * Returns a unified diff between 2 strings - * - * @param {Error} Error with actual/expected - * @return {String} Diff - * @api private - */ - -function unifiedDiff(err, escape) { - var indent = ' '; - function cleanUp(line) { - if (escape) { - line = escapeInvisibles(line); - } - if (line[0] === '+') return indent + colorLines('diff added', line); - if (line[0] === '-') return indent + colorLines('diff removed', line); - if (line.match(/\@\@/)) return null; - if (line.match(/\\ No newline/)) return null; - else return indent + line; - } - function notBlank(line) { - return line != null; - } - msg = diff.createPatch('string', err.actual, err.expected); - var lines = msg.split('\n').splice(4); - return '\n ' - + colorLines('diff added', '+ expected') + ' ' - + colorLines('diff removed', '- actual') - + '\n\n' - + lines.map(cleanUp).filter(notBlank).join('\n'); -} - -/** - * Return a character diff for `err`. - * - * @param {Error} err - * @return {String} - * @api private - */ - -function errorDiff(err, type, escape) { - var actual = escape ? escapeInvisibles(err.actual) : err.actual; - var expected = escape ? escapeInvisibles(err.expected) : err.expected; - return diff['diff' + type](actual, expected).map(function(str){ - if (str.added) return colorLines('diff added', str.value); - if (str.removed) return colorLines('diff removed', str.value); - return str.value; - }).join(''); -} - -/** - * Returns a string with all invisible characters in plain text - * - * @param {String} line - * @return {String} - * @api private - */ -function escapeInvisibles(line) { - return line.replace(/\t/g, '') - .replace(/\r/g, '') - .replace(/\n/g, '\n'); -} - -/** - * Color lines for `str`, using the color `name`. - * - * @param {String} name - * @param {String} str - * @return {String} - * @api private - */ - -function colorLines(name, str) { - return str.split('\n').map(function(str){ - return color(name, str); - }).join('\n'); -} - -/** - * Stringify `obj`. - * - * @param {Object} obj - * @return {String} - * @api private - */ - -function stringify(obj) { - if (obj instanceof RegExp) return obj.toString(); - return JSON.stringify(obj, null, 2); -} - -/** - * Return a new object that has the keys in sorted order. - * @param {Object} obj - * @return {Object} - * @api private - */ - - function canonicalize(obj, stack) { - stack = stack || []; - - if (utils.indexOf(stack, obj) !== -1) return obj; - - var canonicalizedObj; - - if ('[object Array]' == {}.toString.call(obj)) { - stack.push(obj); - canonicalizedObj = utils.map(obj, function(item) { - return canonicalize(item, stack); - }); - stack.pop(); - } else if (typeof obj === 'object' && obj !== null) { - stack.push(obj); - canonicalizedObj = {}; - utils.forEach(utils.keys(obj).sort(), function(key) { - canonicalizedObj[key] = canonicalize(obj[key], stack); - }); - stack.pop(); - } else { - canonicalizedObj = obj; - } - - return canonicalizedObj; - } - -/** - * Check that a / b have the same type. - * - * @param {Object} a - * @param {Object} b - * @return {Boolean} - * @api private - */ - -function sameType(a, b) { - a = Object.prototype.toString.call(a); - b = Object.prototype.toString.call(b); - return a == b; -} - - -}); // module: reporters/base.js - -require.register("reporters/doc.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils'); - -/** - * Expose `Doc`. - */ - -exports = module.exports = Doc; - -/** - * Initialize a new `Doc` reporter. - * - * @param {Runner} runner - * @api public - */ - -function Doc(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , total = runner.total - , indents = 2; - - function indent() { - return Array(indents).join(' '); - } - - runner.on('suite', function(suite){ - if (suite.root) return; - ++indents; - console.log('%s
      ', indent()); - ++indents; - console.log('%s

      %s

      ', indent(), utils.escape(suite.title)); - console.log('%s
      ', indent()); - }); - - runner.on('suite end', function(suite){ - if (suite.root) return; - console.log('%s
      ', indent()); - --indents; - console.log('%s
      ', indent()); - --indents; - }); - - runner.on('pass', function(test){ - console.log('%s
      %s
      ', indent(), utils.escape(test.title)); - var code = utils.escape(utils.clean(test.fn.toString())); - console.log('%s
      %s
      ', indent(), code); - }); -} - -}); // module: reporters/doc.js - -require.register("reporters/dot.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , color = Base.color; - -/** - * Expose `Dot`. - */ - -exports = module.exports = Dot; - -/** - * Initialize a new `Dot` matrix test reporter. - * - * @param {Runner} runner - * @api public - */ - -function Dot(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , width = Base.window.width * .75 | 0 - , n = 0; - - runner.on('start', function(){ - process.stdout.write('\n '); - }); - - runner.on('pending', function(test){ - process.stdout.write(color('pending', Base.symbols.dot)); - }); - - runner.on('pass', function(test){ - if (++n % width == 0) process.stdout.write('\n '); - if ('slow' == test.speed) { - process.stdout.write(color('bright yellow', Base.symbols.dot)); - } else { - process.stdout.write(color(test.speed, Base.symbols.dot)); - } - }); - - runner.on('fail', function(test, err){ - if (++n % width == 0) process.stdout.write('\n '); - process.stdout.write(color('fail', Base.symbols.dot)); - }); - - runner.on('end', function(){ - console.log(); - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -Dot.prototype = new F; -Dot.prototype.constructor = Dot; - -}); // module: reporters/dot.js - -require.register("reporters/html-cov.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var JSONCov = require('./json-cov') - , fs = require('browser/fs'); - -/** - * Expose `HTMLCov`. - */ - -exports = module.exports = HTMLCov; - -/** - * Initialize a new `JsCoverage` reporter. - * - * @param {Runner} runner - * @api public - */ - -function HTMLCov(runner) { - var jade = require('jade') - , file = __dirname + '/templates/coverage.jade' - , str = fs.readFileSync(file, 'utf8') - , fn = jade.compile(str, { filename: file }) - , self = this; - - JSONCov.call(this, runner, false); - - runner.on('end', function(){ - process.stdout.write(fn({ - cov: self.cov - , coverageClass: coverageClass - })); - }); -} - -/** - * Return coverage class for `n`. - * - * @return {String} - * @api private - */ - -function coverageClass(n) { - if (n >= 75) return 'high'; - if (n >= 50) return 'medium'; - if (n >= 25) return 'low'; - return 'terrible'; -} -}); // module: reporters/html-cov.js - -require.register("reporters/html.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils') - , Progress = require('../browser/progress') - , escape = utils.escape; - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Expose `HTML`. - */ - -exports = module.exports = HTML; - -/** - * Stats template. - */ - -var statsTemplate = ''; - -/** - * Initialize a new `HTML` reporter. - * - * @param {Runner} runner - * @api public - */ - -function HTML(runner, root) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , total = runner.total - , stat = fragment(statsTemplate) - , items = stat.getElementsByTagName('li') - , passes = items[1].getElementsByTagName('em')[0] - , passesLink = items[1].getElementsByTagName('a')[0] - , failures = items[2].getElementsByTagName('em')[0] - , failuresLink = items[2].getElementsByTagName('a')[0] - , duration = items[3].getElementsByTagName('em')[0] - , canvas = stat.getElementsByTagName('canvas')[0] - , report = fragment('
        ') - , stack = [report] - , progress - , ctx - - root = root || document.getElementById('mocha'); - - if (canvas.getContext) { - var ratio = window.devicePixelRatio || 1; - canvas.style.width = canvas.width; - canvas.style.height = canvas.height; - canvas.width *= ratio; - canvas.height *= ratio; - ctx = canvas.getContext('2d'); - ctx.scale(ratio, ratio); - progress = new Progress; - } - - if (!root) return error('#mocha div missing, add it to your document'); - - // pass toggle - on(passesLink, 'click', function(){ - unhide(); - var name = /pass/.test(report.className) ? '' : ' pass'; - report.className = report.className.replace(/fail|pass/g, '') + name; - if (report.className.trim()) hideSuitesWithout('test pass'); - }); - - // failure toggle - on(failuresLink, 'click', function(){ - unhide(); - var name = /fail/.test(report.className) ? '' : ' fail'; - report.className = report.className.replace(/fail|pass/g, '') + name; - if (report.className.trim()) hideSuitesWithout('test fail'); - }); - - root.appendChild(stat); - root.appendChild(report); - - if (progress) progress.size(40); - - runner.on('suite', function(suite){ - if (suite.root) return; - - // suite - var url = self.suiteURL(suite); - var el = fragment('
      • %s

      • ', url, escape(suite.title)); - - // container - stack[0].appendChild(el); - stack.unshift(document.createElement('ul')); - el.appendChild(stack[0]); - }); - - runner.on('suite end', function(suite){ - if (suite.root) return; - stack.shift(); - }); - - runner.on('fail', function(test, err){ - if ('hook' == test.type) runner.emit('test end', test); - }); - - runner.on('test end', function(test){ - // TODO: add to stats - var percent = stats.tests / this.total * 100 | 0; - if (progress) progress.update(percent).draw(ctx); - - // update stats - var ms = new Date - stats.start; - text(passes, stats.passes); - text(failures, stats.failures); - text(duration, (ms / 1000).toFixed(2)); - - // test - if ('passed' == test.state) { - var url = self.testURL(test); - var el = fragment('
      • %e%ems ‣

      • ', test.speed, test.title, test.duration, url); - } else if (test.pending) { - var el = fragment('
      • %e

      • ', test.title); - } else { - var el = fragment('
      • %e ‣

      • ', test.title, encodeURIComponent(test.fullTitle())); - var str = test.err.stack || test.err.toString(); - - // FF / Opera do not add the message - if (!~str.indexOf(test.err.message)) { - str = test.err.message + '\n' + str; - } - - // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we - // check for the result of the stringifying. - if ('[object Error]' == str) str = test.err.message; - - // Safari doesn't give you a stack. Let's at least provide a source line. - if (!test.err.stack && test.err.sourceURL && test.err.line !== undefined) { - str += "\n(" + test.err.sourceURL + ":" + test.err.line + ")"; - } - - el.appendChild(fragment('
        %e
        ', str)); - } - - // toggle code - // TODO: defer - if (!test.pending) { - var h2 = el.getElementsByTagName('h2')[0]; - - on(h2, 'click', function(){ - pre.style.display = 'none' == pre.style.display - ? 'block' - : 'none'; - }); - - var pre = fragment('
        %e
        ', utils.clean(test.fn.toString())); - el.appendChild(pre); - pre.style.display = 'none'; - } - - // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack. - if (stack[0]) stack[0].appendChild(el); - }); -} - -/** - * Provide suite URL - * - * @param {Object} [suite] - */ - -HTML.prototype.suiteURL = function(suite){ - return '?grep=' + encodeURIComponent(suite.fullTitle()); -}; - -/** - * Provide test URL - * - * @param {Object} [test] - */ - -HTML.prototype.testURL = function(test){ - return '?grep=' + encodeURIComponent(test.fullTitle()); -}; - -/** - * Display error `msg`. - */ - -function error(msg) { - document.body.appendChild(fragment('
        %s
        ', msg)); -} - -/** - * Return a DOM fragment from `html`. - */ - -function fragment(html) { - var args = arguments - , div = document.createElement('div') - , i = 1; - - div.innerHTML = html.replace(/%([se])/g, function(_, type){ - switch (type) { - case 's': return String(args[i++]); - case 'e': return escape(args[i++]); - } - }); - - return div.firstChild; -} - -/** - * Check for suites that do not have elements - * with `classname`, and hide them. - */ - -function hideSuitesWithout(classname) { - var suites = document.getElementsByClassName('suite'); - for (var i = 0; i < suites.length; i++) { - var els = suites[i].getElementsByClassName(classname); - if (0 == els.length) suites[i].className += ' hidden'; - } -} - -/** - * Unhide .hidden suites. - */ - -function unhide() { - var els = document.getElementsByClassName('suite hidden'); - for (var i = 0; i < els.length; ++i) { - els[i].className = els[i].className.replace('suite hidden', 'suite'); - } -} - -/** - * Set `el` text to `str`. - */ - -function text(el, str) { - if (el.textContent) { - el.textContent = str; - } else { - el.innerText = str; - } -} - -/** - * Listen on `event` with callback `fn`. - */ - -function on(el, event, fn) { - if (el.addEventListener) { - el.addEventListener(event, fn, false); - } else { - el.attachEvent('on' + event, fn); - } -} - -}); // module: reporters/html.js - -require.register("reporters/index.js", function(module, exports, require){ - -exports.Base = require('./base'); -exports.Dot = require('./dot'); -exports.Doc = require('./doc'); -exports.TAP = require('./tap'); -exports.JSON = require('./json'); -exports.HTML = require('./html'); -exports.List = require('./list'); -exports.Min = require('./min'); -exports.Spec = require('./spec'); -exports.Nyan = require('./nyan'); -exports.XUnit = require('./xunit'); -exports.Markdown = require('./markdown'); -exports.Progress = require('./progress'); -exports.Landing = require('./landing'); -exports.JSONCov = require('./json-cov'); -exports.HTMLCov = require('./html-cov'); -exports.JSONStream = require('./json-stream'); - -}); // module: reporters/index.js - -require.register("reporters/json-cov.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `JSONCov`. - */ - -exports = module.exports = JSONCov; - -/** - * Initialize a new `JsCoverage` reporter. - * - * @param {Runner} runner - * @param {Boolean} output - * @api public - */ - -function JSONCov(runner, output) { - var self = this - , output = 1 == arguments.length ? true : output; - - Base.call(this, runner); - - var tests = [] - , failures = [] - , passes = []; - - runner.on('test end', function(test){ - tests.push(test); - }); - - runner.on('pass', function(test){ - passes.push(test); - }); - - runner.on('fail', function(test){ - failures.push(test); - }); - - runner.on('end', function(){ - var cov = global._$jscoverage || {}; - var result = self.cov = map(cov); - result.stats = self.stats; - result.tests = tests.map(clean); - result.failures = failures.map(clean); - result.passes = passes.map(clean); - if (!output) return; - process.stdout.write(JSON.stringify(result, null, 2 )); - }); -} - -/** - * Map jscoverage data to a JSON structure - * suitable for reporting. - * - * @param {Object} cov - * @return {Object} - * @api private - */ - -function map(cov) { - var ret = { - instrumentation: 'node-jscoverage' - , sloc: 0 - , hits: 0 - , misses: 0 - , coverage: 0 - , files: [] - }; - - for (var filename in cov) { - var data = coverage(filename, cov[filename]); - ret.files.push(data); - ret.hits += data.hits; - ret.misses += data.misses; - ret.sloc += data.sloc; - } - - ret.files.sort(function(a, b) { - return a.filename.localeCompare(b.filename); - }); - - if (ret.sloc > 0) { - ret.coverage = (ret.hits / ret.sloc) * 100; - } - - return ret; -}; - -/** - * Map jscoverage data for a single source file - * to a JSON structure suitable for reporting. - * - * @param {String} filename name of the source file - * @param {Object} data jscoverage coverage data - * @return {Object} - * @api private - */ - -function coverage(filename, data) { - var ret = { - filename: filename, - coverage: 0, - hits: 0, - misses: 0, - sloc: 0, - source: {} - }; - - data.source.forEach(function(line, num){ - num++; - - if (data[num] === 0) { - ret.misses++; - ret.sloc++; - } else if (data[num] !== undefined) { - ret.hits++; - ret.sloc++; - } - - ret.source[num] = { - source: line - , coverage: data[num] === undefined - ? '' - : data[num] - }; - }); - - ret.coverage = ret.hits / ret.sloc * 100; - - return ret; -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @param {Object} test - * @return {Object} - * @api private - */ - -function clean(test) { - return { - title: test.title - , fullTitle: test.fullTitle() - , duration: test.duration - } -} - -}); // module: reporters/json-cov.js - -require.register("reporters/json-stream.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , color = Base.color; - -/** - * Expose `List`. - */ - -exports = module.exports = List; - -/** - * Initialize a new `List` test reporter. - * - * @param {Runner} runner - * @api public - */ - -function List(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , total = runner.total; - - runner.on('start', function(){ - console.log(JSON.stringify(['start', { total: total }])); - }); - - runner.on('pass', function(test){ - console.log(JSON.stringify(['pass', clean(test)])); - }); - - runner.on('fail', function(test, err){ - console.log(JSON.stringify(['fail', clean(test)])); - }); - - runner.on('end', function(){ - process.stdout.write(JSON.stringify(['end', self.stats])); - }); -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @param {Object} test - * @return {Object} - * @api private - */ - -function clean(test) { - return { - title: test.title - , fullTitle: test.fullTitle() - , duration: test.duration - } -} -}); // module: reporters/json-stream.js - -require.register("reporters/json.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `JSON`. - */ - -exports = module.exports = JSONReporter; - -/** - * Initialize a new `JSON` reporter. - * - * @param {Runner} runner - * @api public - */ - -function JSONReporter(runner) { - var self = this; - Base.call(this, runner); - - var tests = [] - , failures = [] - , passes = []; - - runner.on('test end', function(test){ - tests.push(test); - }); - - runner.on('pass', function(test){ - passes.push(test); - }); - - runner.on('fail', function(test){ - failures.push(test); - }); - - runner.on('end', function(){ - var obj = { - stats: self.stats - , tests: tests.map(clean) - , failures: failures.map(clean) - , passes: passes.map(clean) - }; - - process.stdout.write(JSON.stringify(obj, null, 2)); - }); -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @param {Object} test - * @return {Object} - * @api private - */ - -function clean(test) { - return { - title: test.title - , fullTitle: test.fullTitle() - , duration: test.duration - } -} -}); // module: reporters/json.js - -require.register("reporters/landing.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `Landing`. - */ - -exports = module.exports = Landing; - -/** - * Airplane color. - */ - -Base.colors.plane = 0; - -/** - * Airplane crash color. - */ - -Base.colors['plane crash'] = 31; - -/** - * Runway color. - */ - -Base.colors.runway = 90; - -/** - * Initialize a new `Landing` reporter. - * - * @param {Runner} runner - * @api public - */ - -function Landing(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , width = Base.window.width * .75 | 0 - , total = runner.total - , stream = process.stdout - , plane = color('plane', '✈') - , crashed = -1 - , n = 0; - - function runway() { - var buf = Array(width).join('-'); - return ' ' + color('runway', buf); - } - - runner.on('start', function(){ - stream.write('\n '); - cursor.hide(); - }); - - runner.on('test end', function(test){ - // check if the plane crashed - var col = -1 == crashed - ? width * ++n / total | 0 - : crashed; - - // show the crash - if ('failed' == test.state) { - plane = color('plane crash', '✈'); - crashed = col; - } - - // render landing strip - stream.write('\u001b[4F\n\n'); - stream.write(runway()); - stream.write('\n '); - stream.write(color('runway', Array(col).join('⋅'))); - stream.write(plane) - stream.write(color('runway', Array(width - col).join('⋅') + '\n')); - stream.write(runway()); - stream.write('\u001b[0m'); - }); - - runner.on('end', function(){ - cursor.show(); - console.log(); - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -Landing.prototype = new F; -Landing.prototype.constructor = Landing; - -}); // module: reporters/landing.js - -require.register("reporters/list.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `List`. - */ - -exports = module.exports = List; - -/** - * Initialize a new `List` test reporter. - * - * @param {Runner} runner - * @api public - */ - -function List(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , n = 0; - - runner.on('start', function(){ - console.log(); - }); - - runner.on('test', function(test){ - process.stdout.write(color('pass', ' ' + test.fullTitle() + ': ')); - }); - - runner.on('pending', function(test){ - var fmt = color('checkmark', ' -') - + color('pending', ' %s'); - console.log(fmt, test.fullTitle()); - }); - - runner.on('pass', function(test){ - var fmt = color('checkmark', ' '+Base.symbols.dot) - + color('pass', ' %s: ') - + color(test.speed, '%dms'); - cursor.CR(); - console.log(fmt, test.fullTitle(), test.duration); - }); - - runner.on('fail', function(test, err){ - cursor.CR(); - console.log(color('fail', ' %d) %s'), ++n, test.fullTitle()); - }); - - runner.on('end', self.epilogue.bind(self)); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -List.prototype = new F; -List.prototype.constructor = List; - - -}); // module: reporters/list.js - -require.register("reporters/markdown.js", function(module, exports, require){ -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils'); - -/** - * Expose `Markdown`. - */ - -exports = module.exports = Markdown; - -/** - * Initialize a new `Markdown` reporter. - * - * @param {Runner} runner - * @api public - */ - -function Markdown(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , level = 0 - , buf = ''; - - function title(str) { - return Array(level).join('#') + ' ' + str; - } - - function indent() { - return Array(level).join(' '); - } - - function mapTOC(suite, obj) { - var ret = obj; - obj = obj[suite.title] = obj[suite.title] || { suite: suite }; - suite.suites.forEach(function(suite){ - mapTOC(suite, obj); - }); - return ret; - } - - function stringifyTOC(obj, level) { - ++level; - var buf = ''; - var link; - for (var key in obj) { - if ('suite' == key) continue; - if (key) link = ' - [' + key + '](#' + utils.slug(obj[key].suite.fullTitle()) + ')\n'; - if (key) buf += Array(level).join(' ') + link; - buf += stringifyTOC(obj[key], level); - } - --level; - return buf; - } - - function generateTOC(suite) { - var obj = mapTOC(suite, {}); - return stringifyTOC(obj, 0); - } - - generateTOC(runner.suite); - - runner.on('suite', function(suite){ - ++level; - var slug = utils.slug(suite.fullTitle()); - buf += '' + '\n'; - buf += title(suite.title) + '\n'; - }); - - runner.on('suite end', function(suite){ - --level; - }); - - runner.on('pass', function(test){ - var code = utils.clean(test.fn.toString()); - buf += test.title + '.\n'; - buf += '\n```js\n'; - buf += code + '\n'; - buf += '```\n\n'; - }); - - runner.on('end', function(){ - process.stdout.write('# TOC\n'); - process.stdout.write(generateTOC(runner.suite)); - process.stdout.write(buf); - }); -} -}); // module: reporters/markdown.js - -require.register("reporters/min.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `Min`. - */ - -exports = module.exports = Min; - -/** - * Initialize a new `Min` minimal test reporter (best used with --watch). - * - * @param {Runner} runner - * @api public - */ - -function Min(runner) { - Base.call(this, runner); - - runner.on('start', function(){ - // clear screen - process.stdout.write('\u001b[2J'); - // set cursor position - process.stdout.write('\u001b[1;3H'); - }); - - runner.on('end', this.epilogue.bind(this)); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -Min.prototype = new F; -Min.prototype.constructor = Min; - - -}); // module: reporters/min.js - -require.register("reporters/nyan.js", function(module, exports, require){ -/** - * Module dependencies. - */ - -var Base = require('./base') - , color = Base.color; - -/** - * Expose `Dot`. - */ - -exports = module.exports = NyanCat; - -/** - * Initialize a new `Dot` matrix test reporter. - * - * @param {Runner} runner - * @api public - */ - -function NyanCat(runner) { - Base.call(this, runner); - var self = this - , stats = this.stats - , width = Base.window.width * .75 | 0 - , rainbowColors = this.rainbowColors = self.generateColors() - , colorIndex = this.colorIndex = 0 - , numerOfLines = this.numberOfLines = 4 - , trajectories = this.trajectories = [[], [], [], []] - , nyanCatWidth = this.nyanCatWidth = 11 - , trajectoryWidthMax = this.trajectoryWidthMax = (width - nyanCatWidth) - , scoreboardWidth = this.scoreboardWidth = 5 - , tick = this.tick = 0 - , n = 0; - - runner.on('start', function(){ - Base.cursor.hide(); - self.draw(); - }); - - runner.on('pending', function(test){ - self.draw(); - }); - - runner.on('pass', function(test){ - self.draw(); - }); - - runner.on('fail', function(test, err){ - self.draw(); - }); - - runner.on('end', function(){ - Base.cursor.show(); - for (var i = 0; i < self.numberOfLines; i++) write('\n'); - self.epilogue(); - }); -} - -/** - * Draw the nyan cat - * - * @api private - */ - -NyanCat.prototype.draw = function(){ - this.appendRainbow(); - this.drawScoreboard(); - this.drawRainbow(); - this.drawNyanCat(); - this.tick = !this.tick; -}; - -/** - * Draw the "scoreboard" showing the number - * of passes, failures and pending tests. - * - * @api private - */ - -NyanCat.prototype.drawScoreboard = function(){ - var stats = this.stats; - var colors = Base.colors; - - function draw(color, n) { - write(' '); - write('\u001b[' + color + 'm' + n + '\u001b[0m'); - write('\n'); - } - - draw(colors.green, stats.passes); - draw(colors.fail, stats.failures); - draw(colors.pending, stats.pending); - write('\n'); - - this.cursorUp(this.numberOfLines); -}; - -/** - * Append the rainbow. - * - * @api private - */ - -NyanCat.prototype.appendRainbow = function(){ - var segment = this.tick ? '_' : '-'; - var rainbowified = this.rainbowify(segment); - - for (var index = 0; index < this.numberOfLines; index++) { - var trajectory = this.trajectories[index]; - if (trajectory.length >= this.trajectoryWidthMax) trajectory.shift(); - trajectory.push(rainbowified); - } -}; - -/** - * Draw the rainbow. - * - * @api private - */ - -NyanCat.prototype.drawRainbow = function(){ - var self = this; - - this.trajectories.forEach(function(line, index) { - write('\u001b[' + self.scoreboardWidth + 'C'); - write(line.join('')); - write('\n'); - }); - - this.cursorUp(this.numberOfLines); -}; - -/** - * Draw the nyan cat - * - * @api private - */ - -NyanCat.prototype.drawNyanCat = function() { - var self = this; - var startWidth = this.scoreboardWidth + this.trajectories[0].length; - var color = '\u001b[' + startWidth + 'C'; - var padding = ''; - - write(color); - write('_,------,'); - write('\n'); - - write(color); - padding = self.tick ? ' ' : ' '; - write('_|' + padding + '/\\_/\\ '); - write('\n'); - - write(color); - padding = self.tick ? '_' : '__'; - var tail = self.tick ? '~' : '^'; - var face; - write(tail + '|' + padding + this.face() + ' '); - write('\n'); - - write(color); - padding = self.tick ? ' ' : ' '; - write(padding + '"" "" '); - write('\n'); - - this.cursorUp(this.numberOfLines); -}; - -/** - * Draw nyan cat face. - * - * @return {String} - * @api private - */ - -NyanCat.prototype.face = function() { - var stats = this.stats; - if (stats.failures) { - return '( x .x)'; - } else if (stats.pending) { - return '( o .o)'; - } else if(stats.passes) { - return '( ^ .^)'; - } else { - return '( - .-)'; - } -} - -/** - * Move cursor up `n`. - * - * @param {Number} n - * @api private - */ - -NyanCat.prototype.cursorUp = function(n) { - write('\u001b[' + n + 'A'); -}; - -/** - * Move cursor down `n`. - * - * @param {Number} n - * @api private - */ - -NyanCat.prototype.cursorDown = function(n) { - write('\u001b[' + n + 'B'); -}; - -/** - * Generate rainbow colors. - * - * @return {Array} - * @api private - */ - -NyanCat.prototype.generateColors = function(){ - var colors = []; - - for (var i = 0; i < (6 * 7); i++) { - var pi3 = Math.floor(Math.PI / 3); - var n = (i * (1.0 / 6)); - var r = Math.floor(3 * Math.sin(n) + 3); - var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3); - var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3); - colors.push(36 * r + 6 * g + b + 16); - } - - return colors; -}; - -/** - * Apply rainbow to the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -NyanCat.prototype.rainbowify = function(str){ - var color = this.rainbowColors[this.colorIndex % this.rainbowColors.length]; - this.colorIndex += 1; - return '\u001b[38;5;' + color + 'm' + str + '\u001b[0m'; -}; - -/** - * Stdout helper. - */ - -function write(string) { - process.stdout.write(string); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -NyanCat.prototype = new F; -NyanCat.prototype.constructor = NyanCat; - - -}); // module: reporters/nyan.js - -require.register("reporters/progress.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `Progress`. - */ - -exports = module.exports = Progress; - -/** - * General progress bar color. - */ - -Base.colors.progress = 90; - -/** - * Initialize a new `Progress` bar test reporter. - * - * @param {Runner} runner - * @param {Object} options - * @api public - */ - -function Progress(runner, options) { - Base.call(this, runner); - - var self = this - , options = options || {} - , stats = this.stats - , width = Base.window.width * .50 | 0 - , total = runner.total - , complete = 0 - , max = Math.max; - - // default chars - options.open = options.open || '['; - options.complete = options.complete || '▬'; - options.incomplete = options.incomplete || Base.symbols.dot; - options.close = options.close || ']'; - options.verbose = false; - - // tests started - runner.on('start', function(){ - console.log(); - cursor.hide(); - }); - - // tests complete - runner.on('test end', function(){ - complete++; - var incomplete = total - complete - , percent = complete / total - , n = width * percent | 0 - , i = width - n; - - cursor.CR(); - process.stdout.write('\u001b[J'); - process.stdout.write(color('progress', ' ' + options.open)); - process.stdout.write(Array(n).join(options.complete)); - process.stdout.write(Array(i).join(options.incomplete)); - process.stdout.write(color('progress', options.close)); - if (options.verbose) { - process.stdout.write(color('progress', ' ' + complete + ' of ' + total)); - } - }); - - // tests are complete, output some stats - // and the failures if any - runner.on('end', function(){ - cursor.show(); - console.log(); - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -Progress.prototype = new F; -Progress.prototype.constructor = Progress; - - -}); // module: reporters/progress.js - -require.register("reporters/spec.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `Spec`. - */ - -exports = module.exports = Spec; - -/** - * Initialize a new `Spec` test reporter. - * - * @param {Runner} runner - * @api public - */ - -function Spec(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , indents = 0 - , n = 0; - - function indent() { - return Array(indents).join(' ') - } - - runner.on('start', function(){ - console.log(); - }); - - runner.on('suite', function(suite){ - ++indents; - console.log(color('suite', '%s%s'), indent(), suite.title); - }); - - runner.on('suite end', function(suite){ - --indents; - if (1 == indents) console.log(); - }); - - runner.on('pending', function(test){ - var fmt = indent() + color('pending', ' - %s'); - console.log(fmt, test.title); - }); - - runner.on('pass', function(test){ - if ('fast' == test.speed) { - var fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s '); - cursor.CR(); - console.log(fmt, test.title); - } else { - var fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s ') - + color(test.speed, '(%dms)'); - cursor.CR(); - console.log(fmt, test.title, test.duration); - } - }); - - runner.on('fail', function(test, err){ - cursor.CR(); - console.log(indent() + color('fail', ' %d) %s'), ++n, test.title); - }); - - runner.on('end', self.epilogue.bind(self)); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -Spec.prototype = new F; -Spec.prototype.constructor = Spec; - - -}); // module: reporters/spec.js - -require.register("reporters/tap.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , cursor = Base.cursor - , color = Base.color; - -/** - * Expose `TAP`. - */ - -exports = module.exports = TAP; - -/** - * Initialize a new `TAP` reporter. - * - * @param {Runner} runner - * @api public - */ - -function TAP(runner) { - Base.call(this, runner); - - var self = this - , stats = this.stats - , n = 1 - , passes = 0 - , failures = 0; - - runner.on('start', function(){ - var total = runner.grepTotal(runner.suite); - console.log('%d..%d', 1, total); - }); - - runner.on('test end', function(){ - ++n; - }); - - runner.on('pending', function(test){ - console.log('ok %d %s # SKIP -', n, title(test)); - }); - - runner.on('pass', function(test){ - passes++; - console.log('ok %d %s', n, title(test)); - }); - - runner.on('fail', function(test, err){ - failures++; - console.log('not ok %d %s', n, title(test)); - if (err.stack) console.log(err.stack.replace(/^/gm, ' ')); - }); - - runner.on('end', function(){ - console.log('# tests ' + (passes + failures)); - console.log('# pass ' + passes); - console.log('# fail ' + failures); - }); -} - -/** - * Return a TAP-safe title of `test` - * - * @param {Object} test - * @return {String} - * @api private - */ - -function title(test) { - return test.fullTitle().replace(/#/g, ''); -} - -}); // module: reporters/tap.js - -require.register("reporters/xunit.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Base = require('./base') - , utils = require('../utils') - , escape = utils.escape; - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Expose `XUnit`. - */ - -exports = module.exports = XUnit; - -/** - * Initialize a new `XUnit` reporter. - * - * @param {Runner} runner - * @api public - */ - -function XUnit(runner) { - Base.call(this, runner); - var stats = this.stats - , tests = [] - , self = this; - - runner.on('pending', function(test){ - tests.push(test); - }); - - runner.on('pass', function(test){ - tests.push(test); - }); - - runner.on('fail', function(test){ - tests.push(test); - }); - - runner.on('end', function(){ - console.log(tag('testsuite', { - name: 'Mocha Tests' - , tests: stats.tests - , failures: stats.failures - , errors: stats.failures - , skipped: stats.tests - stats.failures - stats.passes - , timestamp: (new Date).toUTCString() - , time: (stats.duration / 1000) || 0 - }, false)); - - tests.forEach(test); - console.log(''); - }); -} - -/** - * Inherit from `Base.prototype`. - */ - -function F(){}; -F.prototype = Base.prototype; -XUnit.prototype = new F; -XUnit.prototype.constructor = XUnit; - - -/** - * Output tag for the given `test.` - */ - -function test(test) { - var attrs = { - classname: test.parent.fullTitle() - , name: test.title - , time: (test.duration / 1000) || 0 - }; - - if ('failed' == test.state) { - var err = test.err; - attrs.message = escape(err.message); - console.log(tag('testcase', attrs, false, tag('failure', attrs, false, cdata(err.stack)))); - } else if (test.pending) { - console.log(tag('testcase', attrs, false, tag('skipped', {}, true))); - } else { - console.log(tag('testcase', attrs, true) ); - } -} - -/** - * HTML tag helper. - */ - -function tag(name, attrs, close, content) { - var end = close ? '/>' : '>' - , pairs = [] - , tag; - - for (var key in attrs) { - pairs.push(key + '="' + escape(attrs[key]) + '"'); - } - - tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end; - if (content) tag += content + ''; -} - -}); // module: reporters/xunit.js - -require.register("runnable.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var EventEmitter = require('browser/events').EventEmitter - , debug = require('browser/debug')('mocha:runnable') - , milliseconds = require('./ms'); - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Object#toString(). - */ - -var toString = Object.prototype.toString; - -/** - * Expose `Runnable`. - */ - -module.exports = Runnable; - -/** - * Initialize a new `Runnable` with the given `title` and callback `fn`. - * - * @param {String} title - * @param {Function} fn - * @api private - */ - -function Runnable(title, fn) { - this.title = title; - this.fn = fn; - this.async = fn && fn.length; - this.sync = ! this.async; - this._timeout = 2000; - this._slow = 75; - this.timedOut = false; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -function F(){}; -F.prototype = EventEmitter.prototype; -Runnable.prototype = new F; -Runnable.prototype.constructor = Runnable; - - -/** - * Set & get timeout `ms`. - * - * @param {Number|String} ms - * @return {Runnable|Number} ms or self - * @api private - */ - -Runnable.prototype.timeout = function(ms){ - if (0 == arguments.length) return this._timeout; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('timeout %d', ms); - this._timeout = ms; - if (this.timer) this.resetTimeout(); - return this; -}; - -/** - * Set & get slow `ms`. - * - * @param {Number|String} ms - * @return {Runnable|Number} ms or self - * @api private - */ - -Runnable.prototype.slow = function(ms){ - if (0 === arguments.length) return this._slow; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('timeout %d', ms); - this._slow = ms; - return this; -}; - -/** - * Return the full title generated by recursively - * concatenating the parent's full title. - * - * @return {String} - * @api public - */ - -Runnable.prototype.fullTitle = function(){ - return this.parent.fullTitle() + ' ' + this.title; -}; - -/** - * Clear the timeout. - * - * @api private - */ - -Runnable.prototype.clearTimeout = function(){ - clearTimeout(this.timer); -}; - -/** - * Inspect the runnable void of private properties. - * - * @return {String} - * @api private - */ - -Runnable.prototype.inspect = function(){ - return JSON.stringify(this, function(key, val){ - if ('_' == key[0]) return; - if ('parent' == key) return '#'; - if ('ctx' == key) return '#'; - return val; - }, 2); -}; - -/** - * Reset the timeout. - * - * @api private - */ - -Runnable.prototype.resetTimeout = function(){ - var self = this; - var ms = this.timeout() || 1e9; - - this.clearTimeout(); - this.timer = setTimeout(function(){ - self.callback(new Error('timeout of ' + ms + 'ms exceeded')); - self.timedOut = true; - }, ms); -}; - -/** - * Whitelist these globals for this test run - * - * @api private - */ -Runnable.prototype.globals = function(arr){ - var self = this; - this._allowedGlobals = arr; -}; - -/** - * Run the test and invoke `fn(err)`. - * - * @param {Function} fn - * @api private - */ - -Runnable.prototype.run = function(fn){ - var self = this - , ms = this.timeout() - , start = new Date - , ctx = this.ctx - , finished - , emitted; - - if (ctx) ctx.runnable(this); - - // timeout - if (this.async) { - if (ms) { - this.timer = setTimeout(function(){ - done(new Error('timeout of ' + ms + 'ms exceeded')); - self.timedOut = true; - }, ms); - } - } - - // called multiple times - function multiple(err) { - if (emitted) return; - emitted = true; - self.emit('error', err || new Error('done() called multiple times')); - } - - // finished - function done(err) { - if (self.timedOut) return; - if (finished) return multiple(err); - self.clearTimeout(); - self.duration = new Date - start; - finished = true; - fn(err); - } - - // for .resetTimeout() - this.callback = done; - - // async - if (this.async) { - try { - this.fn.call(ctx, function(err){ - if (err instanceof Error || toString.call(err) === "[object Error]") return done(err); - if (null != err) return done(new Error('done() invoked with non-Error: ' + err)); - done(); - }); - } catch (err) { - done(err); - } - return; - } - - if (this.asyncOnly) { - return done(new Error('--async-only option in use without declaring `done()`')); - } - - // sync - try { - if (!this.pending) this.fn.call(ctx); - this.duration = new Date - start; - fn(); - } catch (err) { - fn(err); - } -}; - -}); // module: runnable.js - -require.register("runner.js", function(module, exports, require){ -/** - * Module dependencies. - */ - -var EventEmitter = require('browser/events').EventEmitter - , debug = require('browser/debug')('mocha:runner') - , Test = require('./test') - , utils = require('./utils') - , filter = utils.filter - , keys = utils.keys; - -/** - * Non-enumerable globals. - */ - -var globals = [ - 'setTimeout', - 'clearTimeout', - 'setInterval', - 'clearInterval', - 'XMLHttpRequest', - 'Date' -]; - -/** - * Expose `Runner`. - */ - -module.exports = Runner; - -/** - * Initialize a `Runner` for the given `suite`. - * - * Events: - * - * - `start` execution started - * - `end` execution complete - * - `suite` (suite) test suite execution started - * - `suite end` (suite) all tests (and sub-suites) have finished - * - `test` (test) test execution started - * - `test end` (test) test completed - * - `hook` (hook) hook execution started - * - `hook end` (hook) hook complete - * - `pass` (test) test passed - * - `fail` (test, err) test failed - * - `pending` (test) test pending - * - * @api public - */ - -function Runner(suite) { - var self = this; - this._globals = []; - this._abort = false; - this.suite = suite; - this.total = suite.total(); - this.failures = 0; - this.on('test end', function(test){ self.checkGlobals(test); }); - this.on('hook end', function(hook){ self.checkGlobals(hook); }); - this.grep(/.*/); - this.globals(this.globalProps().concat(extraGlobals())); -} - -/** - * Wrapper for setImmediate, process.nextTick, or browser polyfill. - * - * @param {Function} fn - * @api private - */ - -Runner.immediately = global.setImmediate || process.nextTick; - -/** - * Inherit from `EventEmitter.prototype`. - */ - -function F(){}; -F.prototype = EventEmitter.prototype; -Runner.prototype = new F; -Runner.prototype.constructor = Runner; - - -/** - * Run tests with full titles matching `re`. Updates runner.total - * with number of tests matched. - * - * @param {RegExp} re - * @param {Boolean} invert - * @return {Runner} for chaining - * @api public - */ - -Runner.prototype.grep = function(re, invert){ - debug('grep %s', re); - this._grep = re; - this._invert = invert; - this.total = this.grepTotal(this.suite); - return this; -}; - -/** - * Returns the number of tests matching the grep search for the - * given suite. - * - * @param {Suite} suite - * @return {Number} - * @api public - */ - -Runner.prototype.grepTotal = function(suite) { - var self = this; - var total = 0; - - suite.eachTest(function(test){ - var match = self._grep.test(test.fullTitle()); - if (self._invert) match = !match; - if (match) total++; - }); - - return total; -}; - -/** - * Return a list of global properties. - * - * @return {Array} - * @api private - */ - -Runner.prototype.globalProps = function() { - var props = utils.keys(global); - - // non-enumerables - for (var i = 0; i < globals.length; ++i) { - if (~utils.indexOf(props, globals[i])) continue; - props.push(globals[i]); - } - - return props; -}; - -/** - * Allow the given `arr` of globals. - * - * @param {Array} arr - * @return {Runner} for chaining - * @api public - */ - -Runner.prototype.globals = function(arr){ - if (0 == arguments.length) return this._globals; - debug('globals %j', arr); - this._globals = this._globals.concat(arr); - return this; -}; - -/** - * Check for global variable leaks. - * - * @api private - */ - -Runner.prototype.checkGlobals = function(test){ - if (this.ignoreLeaks) return; - var ok = this._globals; - - var globals = this.globalProps(); - var isNode = process.kill; - var leaks; - - if (test) { - ok = ok.concat(test._allowedGlobals || []); - } - - if(this.prevGlobalsLength == globals.length) return; - this.prevGlobalsLength = globals.length; - - leaks = filterLeaks(ok, globals); - this._globals = this._globals.concat(leaks); - - if (leaks.length > 1) { - this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + '')); - } else if (leaks.length) { - this.fail(test, new Error('global leak detected: ' + leaks[0])); - } -}; - -/** - * Fail the given `test`. - * - * @param {Test} test - * @param {Error} err - * @api private - */ - -Runner.prototype.fail = function(test, err){ - ++this.failures; - test.state = 'failed'; - - if ('string' == typeof err) { - err = new Error('the string "' + err + '" was thrown, throw an Error :)'); - } - - this.emit('fail', test, err); -}; - -/** - * Fail the given `hook` with `err`. - * - * Hook failures work in the following pattern: - * - If bail, then exit - * - Failed `before` hook skips all tests in a suite and subsuites, - * but jumps to corresponding `after` hook - * - Failed `before each` hook skips remaining tests in a - * suite and jumps to corresponding `after each` hook, - * which is run only once - * - Failed `after` hook does not alter - * execution order - * - Failed `after each` hook skips remaining tests in a - * suite and subsuites, but executes other `after each` - * hooks - * - * @param {Hook} hook - * @param {Error} err - * @api private - */ - -Runner.prototype.failHook = function(hook, err){ - this.fail(hook, err); - if (this.suite.bail()) { - this.emit('end'); - } -}; - -/** - * Run hook `name` callbacks and then invoke `fn()`. - * - * @param {String} name - * @param {Function} function - * @api private - */ - -Runner.prototype.hook = function(name, fn){ - var suite = this.suite - , hooks = suite['_' + name] - , self = this - , timer; - - function next(i) { - var hook = hooks[i]; - if (!hook) return fn(); - if (self.failures && suite.bail()) return fn(); - self.currentRunnable = hook; - - hook.ctx.currentTest = self.test; - - self.emit('hook', hook); - - hook.on('error', function(err){ - self.failHook(hook, err); - }); - - hook.run(function(err){ - hook.removeAllListeners('error'); - var testError = hook.error(); - if (testError) self.fail(self.test, testError); - if (err) { - self.failHook(hook, err); - - // stop executing hooks, notify callee of hook err - return fn(err); - } - self.emit('hook end', hook); - delete hook.ctx.currentTest; - next(++i); - }); - } - - Runner.immediately(function(){ - next(0); - }); -}; - -/** - * Run hook `name` for the given array of `suites` - * in order, and callback `fn(err, errSuite)`. - * - * @param {String} name - * @param {Array} suites - * @param {Function} fn - * @api private - */ - -Runner.prototype.hooks = function(name, suites, fn){ - var self = this - , orig = this.suite; - - function next(suite) { - self.suite = suite; - - if (!suite) { - self.suite = orig; - return fn(); - } - - self.hook(name, function(err){ - if (err) { - var errSuite = self.suite; - self.suite = orig; - return fn(err, errSuite); - } - - next(suites.pop()); - }); - } - - next(suites.pop()); -}; - -/** - * Run hooks from the top level down. - * - * @param {String} name - * @param {Function} fn - * @api private - */ - -Runner.prototype.hookUp = function(name, fn){ - var suites = [this.suite].concat(this.parents()).reverse(); - this.hooks(name, suites, fn); -}; - -/** - * Run hooks from the bottom up. - * - * @param {String} name - * @param {Function} fn - * @api private - */ - -Runner.prototype.hookDown = function(name, fn){ - var suites = [this.suite].concat(this.parents()); - this.hooks(name, suites, fn); -}; - -/** - * Return an array of parent Suites from - * closest to furthest. - * - * @return {Array} - * @api private - */ - -Runner.prototype.parents = function(){ - var suite = this.suite - , suites = []; - while (suite = suite.parent) suites.push(suite); - return suites; -}; - -/** - * Run the current test and callback `fn(err)`. - * - * @param {Function} fn - * @api private - */ - -Runner.prototype.runTest = function(fn){ - var test = this.test - , self = this; - - if (this.asyncOnly) test.asyncOnly = true; - - try { - test.on('error', function(err){ - self.fail(test, err); - }); - test.run(fn); - } catch (err) { - fn(err); - } -}; - -/** - * Run tests in the given `suite` and invoke - * the callback `fn()` when complete. - * - * @param {Suite} suite - * @param {Function} fn - * @api private - */ - -Runner.prototype.runTests = function(suite, fn){ - var self = this - , tests = suite.tests.slice() - , test; - - - function hookErr(err, errSuite, after) { - // before/after Each hook for errSuite failed: - var orig = self.suite; - - // for failed 'after each' hook start from errSuite parent, - // otherwise start from errSuite itself - self.suite = after ? errSuite.parent : errSuite; - - if (self.suite) { - // call hookUp afterEach - self.hookUp('afterEach', function(err2, errSuite2) { - self.suite = orig; - // some hooks may fail even now - if (err2) return hookErr(err2, errSuite2, true); - // report error suite - fn(errSuite); - }); - } else { - // there is no need calling other 'after each' hooks - self.suite = orig; - fn(errSuite); - } - } - - function next(err, errSuite) { - // if we bail after first err - if (self.failures && suite._bail) return fn(); - - if (self._abort) return fn(); - - if (err) return hookErr(err, errSuite, true); - - // next test - test = tests.shift(); - - // all done - if (!test) return fn(); - - // grep - var match = self._grep.test(test.fullTitle()); - if (self._invert) match = !match; - if (!match) return next(); - - // pending - if (test.pending) { - self.emit('pending', test); - self.emit('test end', test); - return next(); - } - - // execute test and hook(s) - self.emit('test', self.test = test); - self.hookDown('beforeEach', function(err, errSuite){ - - if (err) return hookErr(err, errSuite, false); - - self.currentRunnable = self.test; - self.runTest(function(err){ - test = self.test; - - if (err) { - self.fail(test, err); - self.emit('test end', test); - return self.hookUp('afterEach', next); - } - - test.state = 'passed'; - self.emit('pass', test); - self.emit('test end', test); - self.hookUp('afterEach', next); - }); - }); - } - - this.next = next; - next(); -}; - -/** - * Run the given `suite` and invoke the - * callback `fn()` when complete. - * - * @param {Suite} suite - * @param {Function} fn - * @api private - */ - -Runner.prototype.runSuite = function(suite, fn){ - var total = this.grepTotal(suite) - , self = this - , i = 0; - - debug('run suite %s', suite.fullTitle()); - - if (!total) return fn(); - - this.emit('suite', this.suite = suite); - - function next(errSuite) { - if (errSuite) { - // current suite failed on a hook from errSuite - if (errSuite == suite) { - // if errSuite is current suite - // continue to the next sibling suite - return done(); - } else { - // errSuite is among the parents of current suite - // stop execution of errSuite and all sub-suites - return done(errSuite); - } - } - - if (self._abort) return done(); - - var curr = suite.suites[i++]; - if (!curr) return done(); - self.runSuite(curr, next); - } - - function done(errSuite) { - self.suite = suite; - self.hook('afterAll', function(){ - self.emit('suite end', suite); - fn(errSuite); - }); - } - - this.hook('beforeAll', function(err){ - if (err) return done(); - self.runTests(suite, next); - }); -}; - -/** - * Handle uncaught exceptions. - * - * @param {Error} err - * @api private - */ - -Runner.prototype.uncaught = function(err){ - debug('uncaught exception %s', err.message); - var runnable = this.currentRunnable; - if (!runnable || 'failed' == runnable.state) return; - runnable.clearTimeout(); - err.uncaught = true; - this.fail(runnable, err); - - // recover from test - if ('test' == runnable.type) { - this.emit('test end', runnable); - this.hookUp('afterEach', this.next); - return; - } - - // bail on hooks - this.emit('end'); -}; - -/** - * Run the root suite and invoke `fn(failures)` - * on completion. - * - * @param {Function} fn - * @return {Runner} for chaining - * @api public - */ - -Runner.prototype.run = function(fn){ - var self = this - , fn = fn || function(){}; - - function uncaught(err){ - self.uncaught(err); - } - - debug('start'); - - // callback - this.on('end', function(){ - debug('end'); - process.removeListener('uncaughtException', uncaught); - fn(self.failures); - }); - - // run suites - this.emit('start'); - this.runSuite(this.suite, function(){ - debug('finished running'); - self.emit('end'); - }); - - // uncaught exception - process.on('uncaughtException', uncaught); - - return this; -}; - -/** - * Cleanly abort execution - * - * @return {Runner} for chaining - * @api public - */ -Runner.prototype.abort = function(){ - debug('aborting'); - this._abort = true; -} - -/** - * Filter leaks with the given globals flagged as `ok`. - * - * @param {Array} ok - * @param {Array} globals - * @return {Array} - * @api private - */ - -function filterLeaks(ok, globals) { - return filter(globals, function(key){ - // Firefox and Chrome exposes iframes as index inside the window object - if (/^d+/.test(key)) return false; - - // in firefox - // if runner runs in an iframe, this iframe's window.getInterface method not init at first - // it is assigned in some seconds - if (global.navigator && /^getInterface/.test(key)) return false; - - // an iframe could be approached by window[iframeIndex] - // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak - if (global.navigator && /^\d+/.test(key)) return false; - - // Opera and IE expose global variables for HTML element IDs (issue #243) - if (/^mocha-/.test(key)) return false; - - var matched = filter(ok, function(ok){ - if (~ok.indexOf('*')) return 0 == key.indexOf(ok.split('*')[0]); - return key == ok; - }); - return matched.length == 0 && (!global.navigator || 'onerror' !== key); - }); -} - -/** - * Array of globals dependent on the environment. - * - * @return {Array} - * @api private - */ - - function extraGlobals() { - if (typeof(process) === 'object' && - typeof(process.version) === 'string') { - - var nodeVersion = process.version.split('.').reduce(function(a, v) { - return a << 8 | v; - }); - - // 'errno' was renamed to process._errno in v0.9.11. - - if (nodeVersion < 0x00090B) { - return ['errno']; - } - } - - return []; - } - -}); // module: runner.js - -require.register("suite.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var EventEmitter = require('browser/events').EventEmitter - , debug = require('browser/debug')('mocha:suite') - , milliseconds = require('./ms') - , utils = require('./utils') - , Hook = require('./hook'); - -/** - * Expose `Suite`. - */ - -exports = module.exports = Suite; - -/** - * Create a new `Suite` with the given `title` - * and parent `Suite`. When a suite with the - * same title is already present, that suite - * is returned to provide nicer reporter - * and more flexible meta-testing. - * - * @param {Suite} parent - * @param {String} title - * @return {Suite} - * @api public - */ - -exports.create = function(parent, title){ - var suite = new Suite(title, parent.ctx); - suite.parent = parent; - if (parent.pending) suite.pending = true; - title = suite.fullTitle(); - parent.addSuite(suite); - return suite; -}; - -/** - * Initialize a new `Suite` with the given - * `title` and `ctx`. - * - * @param {String} title - * @param {Context} ctx - * @api private - */ - -function Suite(title, ctx) { - this.title = title; - this.ctx = ctx; - this.suites = []; - this.tests = []; - this.pending = false; - this._beforeEach = []; - this._beforeAll = []; - this._afterEach = []; - this._afterAll = []; - this.root = !title; - this._timeout = 2000; - this._slow = 75; - this._bail = false; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -function F(){}; -F.prototype = EventEmitter.prototype; -Suite.prototype = new F; -Suite.prototype.constructor = Suite; - - -/** - * Return a clone of this `Suite`. - * - * @return {Suite} - * @api private - */ - -Suite.prototype.clone = function(){ - var suite = new Suite(this.title); - debug('clone'); - suite.ctx = this.ctx; - suite.timeout(this.timeout()); - suite.slow(this.slow()); - suite.bail(this.bail()); - return suite; -}; - -/** - * Set timeout `ms` or short-hand such as "2s". - * - * @param {Number|String} ms - * @return {Suite|Number} for chaining - * @api private - */ - -Suite.prototype.timeout = function(ms){ - if (0 == arguments.length) return this._timeout; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('timeout %d', ms); - this._timeout = parseInt(ms, 10); - return this; -}; - -/** - * Set slow `ms` or short-hand such as "2s". - * - * @param {Number|String} ms - * @return {Suite|Number} for chaining - * @api private - */ - -Suite.prototype.slow = function(ms){ - if (0 === arguments.length) return this._slow; - if ('string' == typeof ms) ms = milliseconds(ms); - debug('slow %d', ms); - this._slow = ms; - return this; -}; - -/** - * Sets whether to bail after first error. - * - * @parma {Boolean} bail - * @return {Suite|Number} for chaining - * @api private - */ - -Suite.prototype.bail = function(bail){ - if (0 == arguments.length) return this._bail; - debug('bail %s', bail); - this._bail = bail; - return this; -}; - -/** - * Run `fn(test[, done])` before running tests. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.beforeAll = function(fn){ - if (this.pending) return this; - var hook = new Hook('"before all" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._beforeAll.push(hook); - this.emit('beforeAll', hook); - return this; -}; - -/** - * Run `fn(test[, done])` after running tests. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.afterAll = function(fn){ - if (this.pending) return this; - var hook = new Hook('"after all" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._afterAll.push(hook); - this.emit('afterAll', hook); - return this; -}; - -/** - * Run `fn(test[, done])` before each test case. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.beforeEach = function(fn){ - if (this.pending) return this; - var hook = new Hook('"before each" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._beforeEach.push(hook); - this.emit('beforeEach', hook); - return this; -}; - -/** - * Run `fn(test[, done])` after each test case. - * - * @param {Function} fn - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.afterEach = function(fn){ - if (this.pending) return this; - var hook = new Hook('"after each" hook', fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._afterEach.push(hook); - this.emit('afterEach', hook); - return this; -}; - -/** - * Add a test `suite`. - * - * @param {Suite} suite - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.addSuite = function(suite){ - suite.parent = this; - suite.timeout(this.timeout()); - suite.slow(this.slow()); - suite.bail(this.bail()); - this.suites.push(suite); - this.emit('suite', suite); - return this; -}; - -/** - * Add a `test` to this suite. - * - * @param {Test} test - * @return {Suite} for chaining - * @api private - */ - -Suite.prototype.addTest = function(test){ - test.parent = this; - test.timeout(this.timeout()); - test.slow(this.slow()); - test.ctx = this.ctx; - this.tests.push(test); - this.emit('test', test); - return this; -}; - -/** - * Return the full title generated by recursively - * concatenating the parent's full title. - * - * @return {String} - * @api public - */ - -Suite.prototype.fullTitle = function(){ - if (this.parent) { - var full = this.parent.fullTitle(); - if (full) return full + ' ' + this.title; - } - return this.title; -}; - -/** - * Return the total number of tests. - * - * @return {Number} - * @api public - */ - -Suite.prototype.total = function(){ - return utils.reduce(this.suites, function(sum, suite){ - return sum + suite.total(); - }, 0) + this.tests.length; -}; - -/** - * Iterates through each suite recursively to find - * all tests. Applies a function in the format - * `fn(test)`. - * - * @param {Function} fn - * @return {Suite} - * @api private - */ - -Suite.prototype.eachTest = function(fn){ - utils.forEach(this.tests, fn); - utils.forEach(this.suites, function(suite){ - suite.eachTest(fn); - }); - return this; -}; - -}); // module: suite.js - -require.register("test.js", function(module, exports, require){ - -/** - * Module dependencies. - */ - -var Runnable = require('./runnable'); - -/** - * Expose `Test`. - */ - -module.exports = Test; - -/** - * Initialize a new `Test` with the given `title` and callback `fn`. - * - * @param {String} title - * @param {Function} fn - * @api private - */ - -function Test(title, fn) { - Runnable.call(this, title, fn); - this.pending = !fn; - this.type = 'test'; -} - -/** - * Inherit from `Runnable.prototype`. - */ - -function F(){}; -F.prototype = Runnable.prototype; -Test.prototype = new F; -Test.prototype.constructor = Test; - - -}); // module: test.js - -require.register("utils.js", function(module, exports, require){ -/** - * Module dependencies. - */ - -var fs = require('browser/fs') - , path = require('browser/path') - , join = path.join - , debug = require('browser/debug')('mocha:watch'); - -/** - * Ignored directories. - */ - -var ignore = ['node_modules', '.git']; - -/** - * Escape special characters in the given string of html. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function(html){ - return String(html) - .replace(/&/g, '&') - .replace(/"/g, '"') - .replace(//g, '>'); -}; - -/** - * Array#forEach (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @param {Object} scope - * @api private - */ - -exports.forEach = function(arr, fn, scope){ - for (var i = 0, l = arr.length; i < l; i++) - fn.call(scope, arr[i], i); -}; - -/** - * Array#map (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @param {Object} scope - * @api private - */ - -exports.map = function(arr, fn, scope){ - var result = []; - for (var i = 0, l = arr.length; i < l; i++) - result.push(fn.call(scope, arr[i], i)); - return result; -}; - -/** - * Array#indexOf (<=IE8) - * - * @parma {Array} arr - * @param {Object} obj to find index of - * @param {Number} start - * @api private - */ - -exports.indexOf = function(arr, obj, start){ - for (var i = start || 0, l = arr.length; i < l; i++) { - if (arr[i] === obj) - return i; - } - return -1; -}; - -/** - * Array#reduce (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @param {Object} initial value - * @api private - */ - -exports.reduce = function(arr, fn, val){ - var rval = val; - - for (var i = 0, l = arr.length; i < l; i++) { - rval = fn(rval, arr[i], i, arr); - } - - return rval; -}; - -/** - * Array#filter (<=IE8) - * - * @param {Array} array - * @param {Function} fn - * @api private - */ - -exports.filter = function(arr, fn){ - var ret = []; - - for (var i = 0, l = arr.length; i < l; i++) { - var val = arr[i]; - if (fn(val, i, arr)) ret.push(val); - } - - return ret; -}; - -/** - * Object.keys (<=IE8) - * - * @param {Object} obj - * @return {Array} keys - * @api private - */ - -exports.keys = Object.keys || function(obj) { - var keys = [] - , has = Object.prototype.hasOwnProperty // for `window` on <=IE8 - - for (var key in obj) { - if (has.call(obj, key)) { - keys.push(key); - } - } - - return keys; -}; - -/** - * Watch the given `files` for changes - * and invoke `fn(file)` on modification. - * - * @param {Array} files - * @param {Function} fn - * @api private - */ - -exports.watch = function(files, fn){ - var options = { interval: 100 }; - files.forEach(function(file){ - debug('file %s', file); - fs.watchFile(file, options, function(curr, prev){ - if (prev.mtime < curr.mtime) fn(file); - }); - }); -}; - -/** - * Ignored files. - */ - -function ignored(path){ - return !~ignore.indexOf(path); -} - -/** - * Lookup files in the given `dir`. - * - * @return {Array} - * @api private - */ - -exports.files = function(dir, ret){ - ret = ret || []; - - fs.readdirSync(dir) - .filter(ignored) - .forEach(function(path){ - path = join(dir, path); - if (fs.statSync(path).isDirectory()) { - exports.files(path, ret); - } else if (path.match(/\.(js|coffee|litcoffee|coffee.md)$/)) { - ret.push(path); - } - }); - - return ret; -}; - -/** - * Compute a slug from the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.slug = function(str){ - return str - .toLowerCase() - .replace(/ +/g, '-') - .replace(/[^-\w]/g, ''); -}; - -/** - * Strip the function definition from `str`, - * and re-indent for pre whitespace. - */ - -exports.clean = function(str) { - str = str - .replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/^\uFEFF/, '') - .replace(/^function *\(.*\) *{/, '') - .replace(/\s+\}$/, ''); - - var spaces = str.match(/^\n?( *)/)[1].length - , tabs = str.match(/^\n?(\t*)/)[1].length - , re = new RegExp('^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs ? tabs : spaces) + '}', 'gm'); - - str = str.replace(re, ''); - - return exports.trim(str); -}; - -/** - * Escape regular expression characters in `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.escapeRegexp = function(str){ - return str.replace(/[-\\^$*+?.()|[\]{}]/g, "\\$&"); -}; - -/** - * Trim the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.trim = function(str){ - return str.replace(/^\s+|\s+$/g, ''); -}; - -/** - * Parse the given `qs`. - * - * @param {String} qs - * @return {Object} - * @api private - */ - -exports.parseQuery = function(qs){ - return exports.reduce(qs.replace('?', '').split('&'), function(obj, pair){ - var i = pair.indexOf('=') - , key = pair.slice(0, i) - , val = pair.slice(++i); - - obj[key] = decodeURIComponent(val); - return obj; - }, {}); -}; - -/** - * Highlight the given string of `js`. - * - * @param {String} js - * @return {String} - * @api private - */ - -function highlight(js) { - return js - .replace(//g, '>') - .replace(/\/\/(.*)/gm, '//$1') - .replace(/('.*?')/gm, '$1') - .replace(/(\d+\.\d+)/gm, '$1') - .replace(/(\d+)/gm, '$1') - .replace(/\bnew *(\w+)/gm, 'new $1') - .replace(/\b(function|new|throw|return|var|if|else)\b/gm, '$1') -} - -/** - * Highlight the contents of tag `name`. - * - * @param {String} name - * @api private - */ - -exports.highlightTags = function(name) { - var code = document.getElementsByTagName(name); - for (var i = 0, len = code.length; i < len; ++i) { - code[i].innerHTML = highlight(code[i].innerHTML); - } -}; - -}); // module: utils.js -// The global object is "self" in Web Workers. -global = (function() { return this; })(); - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date; -var setTimeout = global.setTimeout; -var setInterval = global.setInterval; -var clearTimeout = global.clearTimeout; -var clearInterval = global.clearInterval; - -/** - * Node shims. - * - * These are meant only to allow - * mocha.js to run untouched, not - * to allow running node code in - * the browser. - */ - -var process = {}; -process.exit = function(status){}; -process.stdout = {}; - -var uncaughtExceptionHandlers = []; - -/** - * Remove uncaughtException listener. - */ - -process.removeListener = function(e, fn){ - if ('uncaughtException' == e) { - global.onerror = function() {}; - var i = Mocha.utils.indexOf(uncaughtExceptionHandlers, fn); - if (i != -1) { uncaughtExceptionHandlers.splice(i, 1); } - } -}; - -/** - * Implements uncaughtException listener. - */ - -process.on = function(e, fn){ - if ('uncaughtException' == e) { - global.onerror = function(err, url, line){ - fn(new Error(err + ' (' + url + ':' + line + ')')); - return true; - }; - uncaughtExceptionHandlers.push(fn); - } -}; - -/** - * Expose mocha. - */ - -var Mocha = global.Mocha = require('mocha'), - mocha = global.mocha = new Mocha({ reporter: 'html' }); - -// The BDD UI is registered by default, but no UI will be functional in the -// browser without an explicit call to the overridden `mocha.ui` (see below). -// Ensure that this default UI does not expose its methods to the global scope. -mocha.suite.removeAllListeners('pre-require'); - -var immediateQueue = [] - , immediateTimeout; - -function timeslice() { - var immediateStart = new Date().getTime(); - while (immediateQueue.length && (new Date().getTime() - immediateStart) < 100) { - immediateQueue.shift()(); - } - if (immediateQueue.length) { - immediateTimeout = setTimeout(timeslice, 0); - } else { - immediateTimeout = null; - } -} - -/** - * High-performance override of Runner.immediately. - */ - -Mocha.Runner.immediately = function(callback) { - immediateQueue.push(callback); - if (!immediateTimeout) { - immediateTimeout = setTimeout(timeslice, 0); - } -}; - -/** - * Function to allow assertion libraries to throw errors directly into mocha. - * This is useful when running tests in a browser because window.onerror will - * only receive the 'message' attribute of the Error. - */ -mocha.throwError = function(err) { - Mocha.utils.forEach(uncaughtExceptionHandlers, function (fn) { - fn(err); - }); - throw err; -}; - -/** - * Override ui to ensure that the ui functions are initialized. - * Normally this would happen in Mocha.prototype.loadFiles. - */ - -mocha.ui = function(ui){ - Mocha.prototype.ui.call(this, ui); - this.suite.emit('pre-require', global, null, this); - return this; -}; - -/** - * Setup mocha with the given setting options. - */ - -mocha.setup = function(opts){ - if ('string' == typeof opts) opts = { ui: opts }; - for (var opt in opts) this[opt](opts[opt]); - return this; -}; - -/** - * Run mocha, returning the Runner. - */ - -mocha.run = function(fn){ - var options = mocha.options; - mocha.globals('location'); - - var query = Mocha.utils.parseQuery(global.location.search || ''); - if (query.grep) mocha.grep(query.grep); - if (query.invert) mocha.invert(); - - return Mocha.prototype.run.call(mocha, function(){ - // The DOM Document is not available in Web Workers. - if (global.document) { - Mocha.utils.highlightTags('code'); - } - if (fn) fn(); - }); -}; - -/** - * Expose the process shim. - */ - -Mocha.process = process; -})(); \ No newline at end of file diff --git a/node_modules/mocha/node_modules/.bin/jade b/node_modules/mocha/node_modules/.bin/jade deleted file mode 120000 index 571fae73..00000000 --- a/node_modules/mocha/node_modules/.bin/jade +++ /dev/null @@ -1 +0,0 @@ -../jade/bin/jade \ No newline at end of file diff --git a/node_modules/mocha/node_modules/commander/History.md b/node_modules/mocha/node_modules/commander/History.md deleted file mode 100644 index 2e665828..00000000 --- a/node_modules/mocha/node_modules/commander/History.md +++ /dev/null @@ -1,179 +0,0 @@ - -2.0.0 / 2013-07-18 -================== - - * remove input methods (.prompt, .confirm, etc) - -1.3.2 / 2013-07-18 -================== - - * add support for sub-commands to co-exist with the original command - -1.3.1 / 2013-07-18 -================== - - * add quick .runningCommand hack so you can opt-out of other logic when running a sub command - -1.3.0 / 2013-07-09 -================== - - * add EACCES error handling - * fix sub-command --help - -1.2.0 / 2013-06-13 -================== - - * allow "-" hyphen as an option argument - * support for RegExp coercion - -1.1.1 / 2012-11-20 -================== - - * add more sub-command padding - * fix .usage() when args are present. Closes #106 - -1.1.0 / 2012-11-16 -================== - - * add git-style executable subcommand support. Closes #94 - -1.0.5 / 2012-10-09 -================== - - * fix `--name` clobbering. Closes #92 - * fix examples/help. Closes #89 - -1.0.4 / 2012-09-03 -================== - - * add `outputHelp()` method. - -1.0.3 / 2012-08-30 -================== - - * remove invalid .version() defaulting - -1.0.2 / 2012-08-24 -================== - - * add `--foo=bar` support [arv] - * fix password on node 0.8.8. Make backward compatible with 0.6 [focusaurus] - -1.0.1 / 2012-08-03 -================== - - * fix issue #56 - * fix tty.setRawMode(mode) was moved to tty.ReadStream#setRawMode() (i.e. process.stdin.setRawMode()) - -1.0.0 / 2012-07-05 -================== - - * add support for optional option descriptions - * add defaulting of `.version()` to package.json's version - -0.6.1 / 2012-06-01 -================== - - * Added: append (yes or no) on confirmation - * Added: allow node.js v0.7.x - -0.6.0 / 2012-04-10 -================== - - * Added `.prompt(obj, callback)` support. Closes #49 - * Added default support to .choose(). Closes #41 - * Fixed the choice example - -0.5.1 / 2011-12-20 -================== - - * Fixed `password()` for recent nodes. Closes #36 - -0.5.0 / 2011-12-04 -================== - - * Added sub-command option support [itay] - -0.4.3 / 2011-12-04 -================== - - * Fixed custom help ordering. Closes #32 - -0.4.2 / 2011-11-24 -================== - - * Added travis support - * Fixed: line-buffered input automatically trimmed. Closes #31 - -0.4.1 / 2011-11-18 -================== - - * Removed listening for "close" on --help - -0.4.0 / 2011-11-15 -================== - - * Added support for `--`. Closes #24 - -0.3.3 / 2011-11-14 -================== - - * Fixed: wait for close event when writing help info [Jerry Hamlet] - -0.3.2 / 2011-11-01 -================== - - * Fixed long flag definitions with values [felixge] - -0.3.1 / 2011-10-31 -================== - - * Changed `--version` short flag to `-V` from `-v` - * Changed `.version()` so it's configurable [felixge] - -0.3.0 / 2011-10-31 -================== - - * Added support for long flags only. Closes #18 - -0.2.1 / 2011-10-24 -================== - - * "node": ">= 0.4.x < 0.7.0". Closes #20 - -0.2.0 / 2011-09-26 -================== - - * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs] - -0.1.0 / 2011-08-24 -================== - - * Added support for custom `--help` output - -0.0.5 / 2011-08-18 -================== - - * Changed: when the user enters nothing prompt for password again - * Fixed issue with passwords beginning with numbers [NuckChorris] - -0.0.4 / 2011-08-15 -================== - - * Fixed `Commander#args` - -0.0.3 / 2011-08-15 -================== - - * Added default option value support - -0.0.2 / 2011-08-15 -================== - - * Added mask support to `Command#password(str[, mask], fn)` - * Added `Command#password(str, fn)` - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/mocha/node_modules/commander/Readme.md b/node_modules/mocha/node_modules/commander/Readme.md deleted file mode 100644 index d1644012..00000000 --- a/node_modules/mocha/node_modules/commander/Readme.md +++ /dev/null @@ -1,195 +0,0 @@ -# Commander.js - - The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander). - - [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js) - -## Installation - - $ npm install commander - -## Option parsing - - Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('commander'); - -program - .version('0.0.1') - .option('-p, --peppers', 'Add peppers') - .option('-P, --pineapple', 'Add pineapple') - .option('-b, --bbq', 'Add bbq sauce') - .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') - .parse(process.argv); - -console.log('you ordered a pizza with:'); -if (program.peppers) console.log(' - peppers'); -if (program.pineapple) console.log(' - pineapple'); -if (program.bbq) console.log(' - bbq'); -console.log(' - %s cheese', program.cheese); -``` - - Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. - -## Automated --help - - The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free: - -``` - $ ./examples/pizza --help - - Usage: pizza [options] - - Options: - - -V, --version output the version number - -p, --peppers Add peppers - -P, --pineapple Add pineapple - -b, --bbq Add bbq sauce - -c, --cheese Add the specified type of cheese [marble] - -h, --help output usage information - -``` - -## Coercion - -```js -function range(val) { - return val.split('..').map(Number); -} - -function list(val) { - return val.split(','); -} - -program - .version('0.0.1') - .usage('[options] ') - .option('-i, --integer ', 'An integer argument', parseInt) - .option('-f, --float ', 'A float argument', parseFloat) - .option('-r, --range ..', 'A range', range) - .option('-l, --list ', 'A list', list) - .option('-o, --optional [value]', 'An optional value') - .parse(process.argv); - -console.log(' int: %j', program.integer); -console.log(' float: %j', program.float); -console.log(' optional: %j', program.optional); -program.range = program.range || []; -console.log(' range: %j..%j', program.range[0], program.range[1]); -console.log(' list: %j', program.list); -console.log(' args: %j', program.args); -``` - -## Custom help - - You can display arbitrary `-h, --help` information - by listening for "--help". Commander will automatically - exit once you are done so that the remainder of your program - does not execute causing undesired behaviours, for example - in the following executable "stuff" will not output when - `--help` is used. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('../'); - -function list(val) { - return val.split(',').map(Number); -} - -program - .version('0.0.1') - .option('-f, --foo', 'enable some foo') - .option('-b, --bar', 'enable some bar') - .option('-B, --baz', 'enable some baz'); - -// must be before .parse() since -// node's emit() is immediate - -program.on('--help', function(){ - console.log(' Examples:'); - console.log(''); - console.log(' $ custom-help --help'); - console.log(' $ custom-help -h'); - console.log(''); -}); - -program.parse(process.argv); - -console.log('stuff'); -``` - -yielding the following help output: - -``` - -Usage: custom-help [options] - -Options: - - -h, --help output usage information - -V, --version output the version number - -f, --foo enable some foo - -b, --bar enable some bar - -B, --baz enable some baz - -Examples: - - $ custom-help --help - $ custom-help -h - -``` - -## .outputHelp() - - Output help information without exiting. - -## .help() - - Output help information and exit immediately. - -## Links - - - [API documentation](http://visionmedia.github.com/commander.js/) - - [ascii tables](https://github.com/LearnBoost/cli-table) - - [progress bars](https://github.com/visionmedia/node-progress) - - [more progress bars](https://github.com/substack/node-multimeter) - - [examples](https://github.com/visionmedia/commander.js/tree/master/examples) - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> - -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/mocha/node_modules/commander/index.js b/node_modules/mocha/node_modules/commander/index.js deleted file mode 100644 index d5778a75..00000000 --- a/node_modules/mocha/node_modules/commander/index.js +++ /dev/null @@ -1,847 +0,0 @@ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter; -var spawn = require('child_process').spawn; -var fs = require('fs'); -var exists = fs.existsSync; -var path = require('path'); -var dirname = path.dirname; -var basename = path.basename; - -/** - * Expose the root command. - */ - -exports = module.exports = new Command; - -/** - * Expose `Command`. - */ - -exports.Command = Command; - -/** - * Expose `Option`. - */ - -exports.Option = Option; - -/** - * Initialize a new `Option` with the given `flags` and `description`. - * - * @param {String} flags - * @param {String} description - * @api public - */ - -function Option(flags, description) { - this.flags = flags; - this.required = ~flags.indexOf('<'); - this.optional = ~flags.indexOf('['); - this.bool = !~flags.indexOf('-no-'); - flags = flags.split(/[ ,|]+/); - if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift(); - this.long = flags.shift(); - this.description = description || ''; -} - -/** - * Return option name. - * - * @return {String} - * @api private - */ - -Option.prototype.name = function(){ - return this.long - .replace('--', '') - .replace('no-', ''); -}; - -/** - * Check if `arg` matches the short or long flag. - * - * @param {String} arg - * @return {Boolean} - * @api private - */ - -Option.prototype.is = function(arg){ - return arg == this.short - || arg == this.long; -}; - -/** - * Initialize a new `Command`. - * - * @param {String} name - * @api public - */ - -function Command(name) { - this.commands = []; - this.options = []; - this._execs = []; - this._args = []; - this._name = name; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Command.prototype.__proto__ = EventEmitter.prototype; - -/** - * Add command `name`. - * - * The `.action()` callback is invoked when the - * command `name` is specified via __ARGV__, - * and the remaining arguments are applied to the - * function for access. - * - * When the `name` is "*" an un-matched command - * will be passed as the first arg, followed by - * the rest of __ARGV__ remaining. - * - * Examples: - * - * program - * .version('0.0.1') - * .option('-C, --chdir ', 'change the working directory') - * .option('-c, --config ', 'set config path. defaults to ./deploy.conf') - * .option('-T, --no-tests', 'ignore test hook') - * - * program - * .command('setup') - * .description('run remote setup commands') - * .action(function(){ - * console.log('setup'); - * }); - * - * program - * .command('exec ') - * .description('run the given remote command') - * .action(function(cmd){ - * console.log('exec "%s"', cmd); - * }); - * - * program - * .command('*') - * .description('deploy the given env') - * .action(function(env){ - * console.log('deploying "%s"', env); - * }); - * - * program.parse(process.argv); - * - * @param {String} name - * @param {String} [desc] - * @return {Command} the new command - * @api public - */ - -Command.prototype.command = function(name, desc){ - var args = name.split(/ +/); - var cmd = new Command(args.shift()); - if (desc) cmd.description(desc); - if (desc) this.executables = true; - if (desc) this._execs[cmd._name] = true; - this.commands.push(cmd); - cmd.parseExpectedArgs(args); - cmd.parent = this; - if (desc) return this; - return cmd; -}; - -/** - * Add an implicit `help [cmd]` subcommand - * which invokes `--help` for the given command. - * - * @api private - */ - -Command.prototype.addImplicitHelpCommand = function() { - this.command('help [cmd]', 'display help for [cmd]'); -}; - -/** - * Parse expected `args`. - * - * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. - * - * @param {Array} args - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parseExpectedArgs = function(args){ - if (!args.length) return; - var self = this; - args.forEach(function(arg){ - switch (arg[0]) { - case '<': - self._args.push({ required: true, name: arg.slice(1, -1) }); - break; - case '[': - self._args.push({ required: false, name: arg.slice(1, -1) }); - break; - } - }); - return this; -}; - -/** - * Register callback `fn` for the command. - * - * Examples: - * - * program - * .command('help') - * .description('display verbose help') - * .action(function(){ - * // output help here - * }); - * - * @param {Function} fn - * @return {Command} for chaining - * @api public - */ - -Command.prototype.action = function(fn){ - var self = this; - this.parent.on(this._name, function(args, unknown){ - // Parse any so-far unknown options - unknown = unknown || []; - var parsed = self.parseOptions(unknown); - - // Output help if necessary - outputHelpIfNecessary(self, parsed.unknown); - - // If there are still any unknown options, then we simply - // die, unless someone asked for help, in which case we give it - // to them, and then we die. - if (parsed.unknown.length > 0) { - self.unknownOption(parsed.unknown[0]); - } - - // Leftover arguments need to be pushed back. Fixes issue #56 - if (parsed.args.length) args = parsed.args.concat(args); - - self._args.forEach(function(arg, i){ - if (arg.required && null == args[i]) { - self.missingArgument(arg.name); - } - }); - - // Always append ourselves to the end of the arguments, - // to make sure we match the number of arguments the user - // expects - if (self._args.length) { - args[self._args.length] = self; - } else { - args.push(self); - } - - fn.apply(this, args); - }); - return this; -}; - -/** - * Define option with `flags`, `description` and optional - * coercion `fn`. - * - * The `flags` string should contain both the short and long flags, - * separated by comma, a pipe or space. The following are all valid - * all will output this way when `--help` is used. - * - * "-p, --pepper" - * "-p|--pepper" - * "-p --pepper" - * - * Examples: - * - * // simple boolean defaulting to false - * program.option('-p, --pepper', 'add pepper'); - * - * --pepper - * program.pepper - * // => Boolean - * - * // simple boolean defaulting to false - * program.option('-C, --no-cheese', 'remove cheese'); - * - * program.cheese - * // => true - * - * --no-cheese - * program.cheese - * // => true - * - * // required argument - * program.option('-C, --chdir ', 'change the working directory'); - * - * --chdir /tmp - * program.chdir - * // => "/tmp" - * - * // optional argument - * program.option('-c, --cheese [type]', 'add cheese [marble]'); - * - * @param {String} flags - * @param {String} description - * @param {Function|Mixed} fn or default - * @param {Mixed} defaultValue - * @return {Command} for chaining - * @api public - */ - -Command.prototype.option = function(flags, description, fn, defaultValue){ - var self = this - , option = new Option(flags, description) - , oname = option.name() - , name = camelcase(oname); - - // default as 3rd arg - if ('function' != typeof fn) defaultValue = fn, fn = null; - - // preassign default value only for --no-*, [optional], or - if (false == option.bool || option.optional || option.required) { - // when --no-* we make sure default is true - if (false == option.bool) defaultValue = true; - // preassign only if we have a default - if (undefined !== defaultValue) self[name] = defaultValue; - } - - // register the option - this.options.push(option); - - // when it's passed assign the value - // and conditionally invoke the callback - this.on(oname, function(val){ - // coercion - if (null != val && fn) val = fn(val); - - // unassigned or bool - if ('boolean' == typeof self[name] || 'undefined' == typeof self[name]) { - // if no value, bool true, and we have a default, then use it! - if (null == val) { - self[name] = option.bool - ? defaultValue || true - : false; - } else { - self[name] = val; - } - } else if (null !== val) { - // reassign - self[name] = val; - } - }); - - return this; -}; - -/** - * Parse `argv`, settings options and invoking commands when defined. - * - * @param {Array} argv - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parse = function(argv){ - // implicit help - if (this.executables) this.addImplicitHelpCommand(); - - // store raw args - this.rawArgs = argv; - - // guess name - this._name = this._name || basename(argv[1]); - - // process argv - var parsed = this.parseOptions(this.normalize(argv.slice(2))); - var args = this.args = parsed.args; - - var result = this.parseArgs(this.args, parsed.unknown); - - // executable sub-commands - var name = result.args[0]; - if (this._execs[name]) return this.executeSubCommand(argv, args, parsed.unknown); - - return result; -}; - -/** - * Execute a sub-command executable. - * - * @param {Array} argv - * @param {Array} args - * @param {Array} unknown - * @api private - */ - -Command.prototype.executeSubCommand = function(argv, args, unknown) { - args = args.concat(unknown); - - if (!args.length) this.help(); - if ('help' == args[0] && 1 == args.length) this.help(); - - // --help - if ('help' == args[0]) { - args[0] = args[1]; - args[1] = '--help'; - } - - // executable - var dir = dirname(argv[1]); - var bin = basename(argv[1]) + '-' + args[0]; - - // check for ./ first - var local = path.join(dir, bin); - - // run it - args = args.slice(1); - var proc = spawn(local, args, { stdio: 'inherit', customFds: [0, 1, 2] }); - proc.on('error', function(err){ - if (err.code == "ENOENT") { - console.error('\n %s(1) does not exist, try --help\n', bin); - } else if (err.code == "EACCES") { - console.error('\n %s(1) not executable. try chmod or run with root\n', bin); - } - }); - - this.runningCommand = proc; -}; - -/** - * Normalize `args`, splitting joined short flags. For example - * the arg "-abc" is equivalent to "-a -b -c". - * This also normalizes equal sign and splits "--abc=def" into "--abc def". - * - * @param {Array} args - * @return {Array} - * @api private - */ - -Command.prototype.normalize = function(args){ - var ret = [] - , arg - , index; - - for (var i = 0, len = args.length; i < len; ++i) { - arg = args[i]; - if (arg.length > 1 && '-' == arg[0] && '-' != arg[1]) { - arg.slice(1).split('').forEach(function(c){ - ret.push('-' + c); - }); - } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) { - ret.push(arg.slice(0, index), arg.slice(index + 1)); - } else { - ret.push(arg); - } - } - - return ret; -}; - -/** - * Parse command `args`. - * - * When listener(s) are available those - * callbacks are invoked, otherwise the "*" - * event is emitted and those actions are invoked. - * - * @param {Array} args - * @return {Command} for chaining - * @api private - */ - -Command.prototype.parseArgs = function(args, unknown){ - var cmds = this.commands - , len = cmds.length - , name; - - if (args.length) { - name = args[0]; - if (this.listeners(name).length) { - this.emit(args.shift(), args, unknown); - } else { - this.emit('*', args); - } - } else { - outputHelpIfNecessary(this, unknown); - - // If there were no args and we have unknown options, - // then they are extraneous and we need to error. - if (unknown.length > 0) { - this.unknownOption(unknown[0]); - } - } - - return this; -}; - -/** - * Return an option matching `arg` if any. - * - * @param {String} arg - * @return {Option} - * @api private - */ - -Command.prototype.optionFor = function(arg){ - for (var i = 0, len = this.options.length; i < len; ++i) { - if (this.options[i].is(arg)) { - return this.options[i]; - } - } -}; - -/** - * Parse options from `argv` returning `argv` - * void of these options. - * - * @param {Array} argv - * @return {Array} - * @api public - */ - -Command.prototype.parseOptions = function(argv){ - var args = [] - , len = argv.length - , literal - , option - , arg; - - var unknownOptions = []; - - // parse options - for (var i = 0; i < len; ++i) { - arg = argv[i]; - - // literal args after -- - if ('--' == arg) { - literal = true; - continue; - } - - if (literal) { - args.push(arg); - continue; - } - - // find matching Option - option = this.optionFor(arg); - - // option is defined - if (option) { - // requires arg - if (option.required) { - arg = argv[++i]; - if (null == arg) return this.optionMissingArgument(option); - if ('-' == arg[0] && '-' != arg) return this.optionMissingArgument(option, arg); - this.emit(option.name(), arg); - // optional arg - } else if (option.optional) { - arg = argv[i+1]; - if (null == arg || ('-' == arg[0] && '-' != arg)) { - arg = null; - } else { - ++i; - } - this.emit(option.name(), arg); - // bool - } else { - this.emit(option.name()); - } - continue; - } - - // looks like an option - if (arg.length > 1 && '-' == arg[0]) { - unknownOptions.push(arg); - - // If the next argument looks like it might be - // an argument for this option, we pass it on. - // If it isn't, then it'll simply be ignored - if (argv[i+1] && '-' != argv[i+1][0]) { - unknownOptions.push(argv[++i]); - } - continue; - } - - // arg - args.push(arg); - } - - return { args: args, unknown: unknownOptions }; -}; - -/** - * Argument `name` is missing. - * - * @param {String} name - * @api private - */ - -Command.prototype.missingArgument = function(name){ - console.error(); - console.error(" error: missing required argument `%s'", name); - console.error(); - process.exit(1); -}; - -/** - * `Option` is missing an argument, but received `flag` or nothing. - * - * @param {String} option - * @param {String} flag - * @api private - */ - -Command.prototype.optionMissingArgument = function(option, flag){ - console.error(); - if (flag) { - console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag); - } else { - console.error(" error: option `%s' argument missing", option.flags); - } - console.error(); - process.exit(1); -}; - -/** - * Unknown option `flag`. - * - * @param {String} flag - * @api private - */ - -Command.prototype.unknownOption = function(flag){ - console.error(); - console.error(" error: unknown option `%s'", flag); - console.error(); - process.exit(1); -}; - - -/** - * Set the program version to `str`. - * - * This method auto-registers the "-V, --version" flag - * which will print the version number when passed. - * - * @param {String} str - * @param {String} flags - * @return {Command} for chaining - * @api public - */ - -Command.prototype.version = function(str, flags){ - if (0 == arguments.length) return this._version; - this._version = str; - flags = flags || '-V, --version'; - this.option(flags, 'output the version number'); - this.on('version', function(){ - console.log(str); - process.exit(0); - }); - return this; -}; - -/** - * Set the description `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.description = function(str){ - if (0 == arguments.length) return this._description; - this._description = str; - return this; -}; - -/** - * Set / get the command usage `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.usage = function(str){ - var args = this._args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }); - - var usage = '[options' - + (this.commands.length ? '] [command' : '') - + ']' - + (this._args.length ? ' ' + args : ''); - - if (0 == arguments.length) return this._usage || usage; - this._usage = str; - - return this; -}; - -/** - * Return the largest option length. - * - * @return {Number} - * @api private - */ - -Command.prototype.largestOptionLength = function(){ - return this.options.reduce(function(max, option){ - return Math.max(max, option.flags.length); - }, 0); -}; - -/** - * Return help for options. - * - * @return {String} - * @api private - */ - -Command.prototype.optionHelp = function(){ - var width = this.largestOptionLength(); - - // Prepend the help information - return [pad('-h, --help', width) + ' ' + 'output usage information'] - .concat(this.options.map(function(option){ - return pad(option.flags, width) - + ' ' + option.description; - })) - .join('\n'); -}; - -/** - * Return command help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.commandHelp = function(){ - if (!this.commands.length) return ''; - return [ - '' - , ' Commands:' - , '' - , this.commands.map(function(cmd){ - var args = cmd._args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }).join(' '); - - return pad(cmd._name - + (cmd.options.length - ? ' [options]' - : '') + ' ' + args, 22) - + (cmd.description() - ? ' ' + cmd.description() - : ''); - }).join('\n').replace(/^/gm, ' ') - , '' - ].join('\n'); -}; - -/** - * Return program help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.helpInformation = function(){ - return [ - '' - , ' Usage: ' + this._name + ' ' + this.usage() - , '' + this.commandHelp() - , ' Options:' - , '' - , '' + this.optionHelp().replace(/^/gm, ' ') - , '' - , '' - ].join('\n'); -}; - -/** - * Output help information for this command - * - * @api public - */ - -Command.prototype.outputHelp = function(){ - process.stdout.write(this.helpInformation()); - this.emit('--help'); -}; - -/** - * Output help information and exit. - * - * @api public - */ - -Command.prototype.help = function(){ - this.outputHelp(); - process.exit(); -}; - -/** - * Camel-case the given `flag` - * - * @param {String} flag - * @return {String} - * @api private - */ - -function camelcase(flag) { - return flag.split('-').reduce(function(str, word){ - return str + word[0].toUpperCase() + word.slice(1); - }); -} - -/** - * Pad `str` to `width`. - * - * @param {String} str - * @param {Number} width - * @return {String} - * @api private - */ - -function pad(str, width) { - var len = Math.max(0, width - str.length); - return str + Array(len + 1).join(' '); -} - -/** - * Output help information if necessary - * - * @param {Command} command to output help for - * @param {Array} array of options to search for -h or --help - * @api private - */ - -function outputHelpIfNecessary(cmd, options) { - options = options || []; - for (var i = 0; i < options.length; i++) { - if (options[i] == '--help' || options[i] == '-h') { - cmd.outputHelp(); - process.exit(0); - } - } -} diff --git a/node_modules/mocha/node_modules/commander/package.json b/node_modules/mocha/node_modules/commander/package.json deleted file mode 100644 index e25ed273..00000000 --- a/node_modules/mocha/node_modules/commander/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "commander", - "version": "2.0.0", - "description": "the complete solution for node.js command-line programs", - "keywords": [ - "command", - "option", - "parser", - "prompt", - "stdin" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "repository": { - "type": "git", - "url": "https://github.com/visionmedia/commander.js.git" - }, - "devDependencies": { - "should": ">= 0.0.1" - }, - "scripts": { - "test": "make test" - }, - "main": "index", - "engines": { - "node": ">= 0.6.x" - }, - "readme": "# Commander.js\n\n The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander).\n\n [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js)\n\n## Installation\n\n $ npm install commander\n\n## Option parsing\n\n Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('commander');\n\nprogram\n .version('0.0.1')\n .option('-p, --peppers', 'Add peppers')\n .option('-P, --pineapple', 'Add pineapple')\n .option('-b, --bbq', 'Add bbq sauce')\n .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')\n .parse(process.argv);\n\nconsole.log('you ordered a pizza with:');\nif (program.peppers) console.log(' - peppers');\nif (program.pineapple) console.log(' - pineapple');\nif (program.bbq) console.log(' - bbq');\nconsole.log(' - %s cheese', program.cheese);\n```\n\n Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as \"--template-engine\" are camel-cased, becoming `program.templateEngine` etc.\n\n## Automated --help\n\n The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:\n\n``` \n $ ./examples/pizza --help\n\n Usage: pizza [options]\n\n Options:\n\n -V, --version output the version number\n -p, --peppers Add peppers\n -P, --pineapple Add pineapple\n -b, --bbq Add bbq sauce\n -c, --cheese Add the specified type of cheese [marble]\n -h, --help output usage information\n\n```\n\n## Coercion\n\n```js\nfunction range(val) {\n return val.split('..').map(Number);\n}\n\nfunction list(val) {\n return val.split(',');\n}\n\nprogram\n .version('0.0.1')\n .usage('[options] ')\n .option('-i, --integer ', 'An integer argument', parseInt)\n .option('-f, --float ', 'A float argument', parseFloat)\n .option('-r, --range ..', 'A range', range)\n .option('-l, --list ', 'A list', list)\n .option('-o, --optional [value]', 'An optional value')\n .parse(process.argv);\n\nconsole.log(' int: %j', program.integer);\nconsole.log(' float: %j', program.float);\nconsole.log(' optional: %j', program.optional);\nprogram.range = program.range || [];\nconsole.log(' range: %j..%j', program.range[0], program.range[1]);\nconsole.log(' list: %j', program.list);\nconsole.log(' args: %j', program.args);\n```\n\n## Custom help\n\n You can display arbitrary `-h, --help` information\n by listening for \"--help\". Commander will automatically\n exit once you are done so that the remainder of your program\n does not execute causing undesired behaviours, for example\n in the following executable \"stuff\" will not output when\n `--help` is used.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('../');\n\nfunction list(val) {\n return val.split(',').map(Number);\n}\n\nprogram\n .version('0.0.1')\n .option('-f, --foo', 'enable some foo')\n .option('-b, --bar', 'enable some bar')\n .option('-B, --baz', 'enable some baz');\n\n// must be before .parse() since\n// node's emit() is immediate\n\nprogram.on('--help', function(){\n console.log(' Examples:');\n console.log('');\n console.log(' $ custom-help --help');\n console.log(' $ custom-help -h');\n console.log('');\n});\n\nprogram.parse(process.argv);\n\nconsole.log('stuff');\n```\n\nyielding the following help output:\n\n```\n\nUsage: custom-help [options]\n\nOptions:\n\n -h, --help output usage information\n -V, --version output the version number\n -f, --foo enable some foo\n -b, --bar enable some bar\n -B, --baz enable some baz\n\nExamples:\n\n $ custom-help --help\n $ custom-help -h\n\n```\n\n## .outputHelp()\n\n Output help information without exiting.\n\n## .help()\n\n Output help information and exit immediately.\n\n## Links\n\n - [API documentation](http://visionmedia.github.com/commander.js/)\n - [ascii tables](https://github.com/LearnBoost/cli-table)\n - [progress bars](https://github.com/visionmedia/node-progress)\n - [more progress bars](https://github.com/substack/node-multimeter)\n - [examples](https://github.com/visionmedia/commander.js/tree/master/examples)\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/commander.js/issues" - }, - "homepage": "https://github.com/visionmedia/commander.js", - "_id": "commander@2.0.0", - "_from": "commander@2.0.0" -} diff --git a/node_modules/mocha/node_modules/debug/Readme.md b/node_modules/mocha/node_modules/debug/Readme.md deleted file mode 100644 index c5a34e8b..00000000 --- a/node_modules/mocha/node_modules/debug/Readme.md +++ /dev/null @@ -1,115 +0,0 @@ -# debug - - tiny node.js debugging utility modelled after node core's debugging technique. - -## Installation - -``` -$ npm install debug -``` - -## Usage - - With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility. - -Example _app.js_: - -```js -var debug = require('debug')('http') - , http = require('http') - , name = 'My App'; - -// fake app - -debug('booting %s', name); - -http.createServer(function(req, res){ - debug(req.method + ' ' + req.url); - res.end('hello\n'); -}).listen(3000, function(){ - debug('listening'); -}); - -// fake worker of some kind - -require('./worker'); -``` - -Example _worker.js_: - -```js -var debug = require('debug')('worker'); - -setInterval(function(){ - debug('doing some work'); -}, 1000); -``` - - The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples: - - ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png) - - ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png) - -## Millisecond diff - - When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. - - ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) - - When stderr is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below: - _(NOTE: Debug now uses stderr instead of stdout, so the correct shell command for this example is actually `DEBUG=* node example/worker 2> out &`)_ - - ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) - -## Conventions - - If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". - -## Wildcards - - The "*" character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect.compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. - - You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=* -connect:*` would include all debuggers except those starting with "connect:". - -## Browser support - - Debug works in the browser as well, currently persisted by `localStorage`. For example if you have `worker:a` and `worker:b` as shown below, and wish to debug both type `debug.enable('worker:*')` in the console and refresh the page, this will remain until you disable with `debug.disable()`. - -```js -a = debug('worker:a'); -b = debug('worker:b'); - -setInterval(function(){ - a('doing some work'); -}, 1000); - -setInterval(function(){ - a('doing some work'); -}, 1200); -``` - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> - -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/mocha/node_modules/debug/debug.js b/node_modules/mocha/node_modules/debug/debug.js deleted file mode 100644 index 509dc0de..00000000 --- a/node_modules/mocha/node_modules/debug/debug.js +++ /dev/null @@ -1,137 +0,0 @@ - -/** - * Expose `debug()` as the module. - */ - -module.exports = debug; - -/** - * Create a debugger with the given `name`. - * - * @param {String} name - * @return {Type} - * @api public - */ - -function debug(name) { - if (!debug.enabled(name)) return function(){}; - - return function(fmt){ - fmt = coerce(fmt); - - var curr = new Date; - var ms = curr - (debug[name] || curr); - debug[name] = curr; - - fmt = name - + ' ' - + fmt - + ' +' + debug.humanize(ms); - - // This hackery is required for IE8 - // where `console.log` doesn't have 'apply' - window.console - && console.log - && Function.prototype.apply.call(console.log, console, arguments); - } -} - -/** - * The currently active debug mode names. - */ - -debug.names = []; -debug.skips = []; - -/** - * Enables a debug mode by name. This can include modes - * separated by a colon and wildcards. - * - * @param {String} name - * @api public - */ - -debug.enable = function(name) { - try { - localStorage.debug = name; - } catch(e){} - - var split = (name || '').split(/[\s,]+/) - , len = split.length; - - for (var i = 0; i < len; i++) { - name = split[i].replace('*', '.*?'); - if (name[0] === '-') { - debug.skips.push(new RegExp('^' + name.substr(1) + '$')); - } - else { - debug.names.push(new RegExp('^' + name + '$')); - } - } -}; - -/** - * Disable debug output. - * - * @api public - */ - -debug.disable = function(){ - debug.enable(''); -}; - -/** - * Humanize the given `ms`. - * - * @param {Number} m - * @return {String} - * @api private - */ - -debug.humanize = function(ms) { - var sec = 1000 - , min = 60 * 1000 - , hour = 60 * min; - - if (ms >= hour) return (ms / hour).toFixed(1) + 'h'; - if (ms >= min) return (ms / min).toFixed(1) + 'm'; - if (ms >= sec) return (ms / sec | 0) + 's'; - return ms + 'ms'; -}; - -/** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - -debug.enabled = function(name) { - for (var i = 0, len = debug.skips.length; i < len; i++) { - if (debug.skips[i].test(name)) { - return false; - } - } - for (var i = 0, len = debug.names.length; i < len; i++) { - if (debug.names[i].test(name)) { - return true; - } - } - return false; -}; - -/** - * Coerce `val`. - */ - -function coerce(val) { - if (val instanceof Error) return val.stack || val.message; - return val; -} - -// persist - -try { - if (window.localStorage) debug.enable(localStorage.debug); -} catch(e){} diff --git a/node_modules/mocha/node_modules/debug/index.js b/node_modules/mocha/node_modules/debug/index.js deleted file mode 100644 index e02c13b7..00000000 --- a/node_modules/mocha/node_modules/debug/index.js +++ /dev/null @@ -1,5 +0,0 @@ -if ('undefined' == typeof window) { - module.exports = require('./lib/debug'); -} else { - module.exports = require('./debug'); -} diff --git a/node_modules/mocha/node_modules/debug/lib/debug.js b/node_modules/mocha/node_modules/debug/lib/debug.js deleted file mode 100644 index 3b0a9183..00000000 --- a/node_modules/mocha/node_modules/debug/lib/debug.js +++ /dev/null @@ -1,147 +0,0 @@ -/** - * Module dependencies. - */ - -var tty = require('tty'); - -/** - * Expose `debug()` as the module. - */ - -module.exports = debug; - -/** - * Enabled debuggers. - */ - -var names = [] - , skips = []; - -(process.env.DEBUG || '') - .split(/[\s,]+/) - .forEach(function(name){ - name = name.replace('*', '.*?'); - if (name[0] === '-') { - skips.push(new RegExp('^' + name.substr(1) + '$')); - } else { - names.push(new RegExp('^' + name + '$')); - } - }); - -/** - * Colors. - */ - -var colors = [6, 2, 3, 4, 5, 1]; - -/** - * Previous debug() call. - */ - -var prev = {}; - -/** - * Previously assigned color. - */ - -var prevColor = 0; - -/** - * Is stdout a TTY? Colored output is disabled when `true`. - */ - -var isatty = tty.isatty(2); - -/** - * Select a color. - * - * @return {Number} - * @api private - */ - -function color() { - return colors[prevColor++ % colors.length]; -} - -/** - * Humanize the given `ms`. - * - * @param {Number} m - * @return {String} - * @api private - */ - -function humanize(ms) { - var sec = 1000 - , min = 60 * 1000 - , hour = 60 * min; - - if (ms >= hour) return (ms / hour).toFixed(1) + 'h'; - if (ms >= min) return (ms / min).toFixed(1) + 'm'; - if (ms >= sec) return (ms / sec | 0) + 's'; - return ms + 'ms'; -} - -/** - * Create a debugger with the given `name`. - * - * @param {String} name - * @return {Type} - * @api public - */ - -function debug(name) { - function disabled(){} - disabled.enabled = false; - - var match = skips.some(function(re){ - return re.test(name); - }); - - if (match) return disabled; - - match = names.some(function(re){ - return re.test(name); - }); - - if (!match) return disabled; - var c = color(); - - function colored(fmt) { - fmt = coerce(fmt); - - var curr = new Date; - var ms = curr - (prev[name] || curr); - prev[name] = curr; - - fmt = ' \u001b[9' + c + 'm' + name + ' ' - + '\u001b[3' + c + 'm\u001b[90m' - + fmt + '\u001b[3' + c + 'm' - + ' +' + humanize(ms) + '\u001b[0m'; - - console.error.apply(this, arguments); - } - - function plain(fmt) { - fmt = coerce(fmt); - - fmt = new Date().toUTCString() - + ' ' + name + ' ' + fmt; - console.error.apply(this, arguments); - } - - colored.enabled = plain.enabled = true; - - return isatty || process.env.DEBUG_COLORS - ? colored - : plain; -} - -/** - * Coerce `val`. - */ - -function coerce(val) { - if (val instanceof Error) return val.stack || val.message; - return val; -} diff --git a/node_modules/mocha/node_modules/debug/package.json b/node_modules/mocha/node_modules/debug/package.json deleted file mode 100644 index f44874e1..00000000 --- a/node_modules/mocha/node_modules/debug/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "debug", - "version": "0.7.4", - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/debug.git" - }, - "description": "small debugging utility", - "keywords": [ - "debug", - "log", - "debugger" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "dependencies": {}, - "devDependencies": { - "mocha": "*" - }, - "main": "lib/debug.js", - "browser": "./debug.js", - "engines": { - "node": "*" - }, - "files": [ - "lib/debug.js", - "debug.js", - "index.js" - ], - "component": { - "scripts": { - "debug/index.js": "index.js", - "debug/debug.js": "debug.js" - } - }, - "readme": "# debug\n\n tiny node.js debugging utility modelled after node core's debugging technique.\n\n## Installation\n\n```\n$ npm install debug\n```\n\n## Usage\n\n With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility.\n \nExample _app.js_:\n\n```js\nvar debug = require('debug')('http')\n , http = require('http')\n , name = 'My App';\n\n// fake app\n\ndebug('booting %s', name);\n\nhttp.createServer(function(req, res){\n debug(req.method + ' ' + req.url);\n res.end('hello\\n');\n}).listen(3000, function(){\n debug('listening');\n});\n\n// fake worker of some kind\n\nrequire('./worker');\n```\n\nExample _worker.js_:\n\n```js\nvar debug = require('debug')('worker');\n\nsetInterval(function(){\n debug('doing some work');\n}, 1000);\n```\n\n The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:\n\n ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png)\n\n ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png)\n\n## Millisecond diff\n\n When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the \"+NNNms\" will show you how much time was spent between calls.\n\n ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png)\n\n When stderr is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:\n _(NOTE: Debug now uses stderr instead of stdout, so the correct shell command for this example is actually `DEBUG=* node example/worker 2> out &`)_\n \n ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png)\n \n## Conventions\n\n If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use \":\" to separate features. For example \"bodyParser\" from Connect would then be \"connect:bodyParser\". \n\n## Wildcards\n\n The \"*\" character may be used as a wildcard. Suppose for example your library has debuggers named \"connect:bodyParser\", \"connect:compress\", \"connect:session\", instead of listing all three with `DEBUG=connect:bodyParser,connect.compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.\n\n You can also exclude specific debuggers by prefixing them with a \"-\" character. For example, `DEBUG=* -connect:*` would include all debuggers except those starting with \"connect:\".\n\n## Browser support\n\n Debug works in the browser as well, currently persisted by `localStorage`. For example if you have `worker:a` and `worker:b` as shown below, and wish to debug both type `debug.enable('worker:*')` in the console and refresh the page, this will remain until you disable with `debug.disable()`. \n\n```js\na = debug('worker:a');\nb = debug('worker:b');\n\nsetInterval(function(){\n a('doing some work');\n}, 1000);\n\nsetInterval(function(){\n a('doing some work');\n}, 1200);\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/debug/issues" - }, - "homepage": "https://github.com/visionmedia/debug", - "_id": "debug@0.7.4", - "_from": "debug@*" -} diff --git a/node_modules/mocha/node_modules/diff/README.md b/node_modules/mocha/node_modules/diff/README.md deleted file mode 100644 index 95bd8da2..00000000 --- a/node_modules/mocha/node_modules/diff/README.md +++ /dev/null @@ -1,101 +0,0 @@ -# jsdiff - -[![Build Status](https://secure.travis-ci.org/kpdecker/jsdiff.png)](http://travis-ci.org/kpdecker/jsdiff) - -A javascript text differencing implementation. - -Based on the algorithm proposed in -["An O(ND) Difference Algorithm and its Variations" (Myers, 1986)](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927). - -## Installation - - npm install diff - -or - - git clone git://github.com/kpdecker/jsdiff.git - -## API - -* JsDiff.diffChars(oldStr, newStr) - Diffs two blocks of text, comparing character by character. - - Returns a list of change objects (See below). - -* JsDiff.diffWords(oldStr, newStr) - Diffs two blocks of text, comparing word by word. - - Returns a list of change objects (See below). - -* JsDiff.diffLines(oldStr, newStr) - Diffs two blocks of text, comparing line by line. - - Returns a list of change objects (See below). - -* JsDiff.diffCss(oldStr, newStr) - Diffs two blocks of text, comparing CSS tokens. - - Returns a list of change objects (See below). - -* JsDiff.createPatch(fileName, oldStr, newStr, oldHeader, newHeader) - Creates a unified diff patch. - - Parameters: - * fileName : String to be output in the filename sections of the patch - * oldStr : Original string value - * newStr : New string value - * oldHeader : Additional information to include in the old file header - * newHeader : Additional information to include in thew new file header - -* JsDiff.applyPatch(oldStr, diffStr) - Applies a unified diff patch. - - Return a string containing new version of provided data. - -* convertChangesToXML(changes) - Converts a list of changes to a serialized XML format - -### Change Objects -Many of the methods above return change objects. These objects are consist of the following fields: - -* value: Text content -* added: True if the value was inserted into the new string -* removed: True of the value was removed from the old string - -Note that some cases may omit a particular flag field. Comparison on the flag fields should always be done in a truthy or falsy manner. - -## [Example](http://kpdecker.github.com/jsdiff) - -## License - -Software License Agreement (BSD License) - -Copyright (c) 2009-2011, Kevin Decker kpdecker@gmail.com - -All rights reserved. - -Redistribution and use of this software 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 Kevin Decker 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. diff --git a/node_modules/mocha/node_modules/diff/diff.js b/node_modules/mocha/node_modules/diff/diff.js deleted file mode 100644 index a34c22a0..00000000 --- a/node_modules/mocha/node_modules/diff/diff.js +++ /dev/null @@ -1,354 +0,0 @@ -/* See LICENSE file for terms of use */ - -/* - * Text diff implementation. - * - * This library supports the following APIS: - * JsDiff.diffChars: Character by character diff - * JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace - * JsDiff.diffLines: Line based diff - * - * JsDiff.diffCss: Diff targeted at CSS content - * - * These methods are based on the implementation proposed in - * "An O(ND) Difference Algorithm and its Variations" (Myers, 1986). - * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927 - */ -var JsDiff = (function() { - /*jshint maxparams: 5*/ - function clonePath(path) { - return { newPos: path.newPos, components: path.components.slice(0) }; - } - function removeEmpty(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - if (array[i]) { - ret.push(array[i]); - } - } - return ret; - } - function escapeHTML(s) { - var n = s; - n = n.replace(/&/g, '&'); - n = n.replace(//g, '>'); - n = n.replace(/"/g, '"'); - - return n; - } - - var Diff = function(ignoreWhitespace) { - this.ignoreWhitespace = ignoreWhitespace; - }; - Diff.prototype = { - diff: function(oldString, newString) { - // Handle the identity case (this is due to unrolling editLength == 0 - if (newString === oldString) { - return [{ value: newString }]; - } - if (!newString) { - return [{ value: oldString, removed: true }]; - } - if (!oldString) { - return [{ value: newString, added: true }]; - } - - newString = this.tokenize(newString); - oldString = this.tokenize(oldString); - - var newLen = newString.length, oldLen = oldString.length; - var maxEditLength = newLen + oldLen; - var bestPath = [{ newPos: -1, components: [] }]; - - // Seed editLength = 0 - var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); - if (bestPath[0].newPos+1 >= newLen && oldPos+1 >= oldLen) { - return bestPath[0].components; - } - - for (var editLength = 1; editLength <= maxEditLength; editLength++) { - for (var diagonalPath = -1*editLength; diagonalPath <= editLength; diagonalPath+=2) { - var basePath; - var addPath = bestPath[diagonalPath-1], - removePath = bestPath[diagonalPath+1]; - oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; - if (addPath) { - // No one else is going to attempt to use this value, clear it - bestPath[diagonalPath-1] = undefined; - } - - var canAdd = addPath && addPath.newPos+1 < newLen; - var canRemove = removePath && 0 <= oldPos && oldPos < oldLen; - if (!canAdd && !canRemove) { - bestPath[diagonalPath] = undefined; - continue; - } - - // Select the diagonal that we want to branch from. We select the prior - // path whose position in the new string is the farthest from the origin - // and does not pass the bounds of the diff graph - if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) { - basePath = clonePath(removePath); - this.pushComponent(basePath.components, oldString[oldPos], undefined, true); - } else { - basePath = clonePath(addPath); - basePath.newPos++; - this.pushComponent(basePath.components, newString[basePath.newPos], true, undefined); - } - - var oldPos = this.extractCommon(basePath, newString, oldString, diagonalPath); - - if (basePath.newPos+1 >= newLen && oldPos+1 >= oldLen) { - return basePath.components; - } else { - bestPath[diagonalPath] = basePath; - } - } - } - }, - - pushComponent: function(components, value, added, removed) { - var last = components[components.length-1]; - if (last && last.added === added && last.removed === removed) { - // We need to clone here as the component clone operation is just - // as shallow array clone - components[components.length-1] = - {value: this.join(last.value, value), added: added, removed: removed }; - } else { - components.push({value: value, added: added, removed: removed }); - } - }, - extractCommon: function(basePath, newString, oldString, diagonalPath) { - var newLen = newString.length, - oldLen = oldString.length, - newPos = basePath.newPos, - oldPos = newPos - diagonalPath; - while (newPos+1 < newLen && oldPos+1 < oldLen && this.equals(newString[newPos+1], oldString[oldPos+1])) { - newPos++; - oldPos++; - - this.pushComponent(basePath.components, newString[newPos], undefined, undefined); - } - basePath.newPos = newPos; - return oldPos; - }, - - equals: function(left, right) { - var reWhitespace = /\S/; - if (this.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right)) { - return true; - } else { - return left === right; - } - }, - join: function(left, right) { - return left + right; - }, - tokenize: function(value) { - return value; - } - }; - - var CharDiff = new Diff(); - - var WordDiff = new Diff(true); - var WordWithSpaceDiff = new Diff(); - WordDiff.tokenize = WordWithSpaceDiff.tokenize = function(value) { - return removeEmpty(value.split(/(\s+|\b)/)); - }; - - var CssDiff = new Diff(true); - CssDiff.tokenize = function(value) { - return removeEmpty(value.split(/([{}:;,]|\s+)/)); - }; - - var LineDiff = new Diff(); - LineDiff.tokenize = function(value) { - return value.split(/^/m); - }; - - return { - Diff: Diff, - - diffChars: function(oldStr, newStr) { return CharDiff.diff(oldStr, newStr); }, - diffWords: function(oldStr, newStr) { return WordDiff.diff(oldStr, newStr); }, - diffWordsWithSpace: function(oldStr, newStr) { return WordWithSpaceDiff.diff(oldStr, newStr); }, - diffLines: function(oldStr, newStr) { return LineDiff.diff(oldStr, newStr); }, - - diffCss: function(oldStr, newStr) { return CssDiff.diff(oldStr, newStr); }, - - createPatch: function(fileName, oldStr, newStr, oldHeader, newHeader) { - var ret = []; - - ret.push('Index: ' + fileName); - ret.push('==================================================================='); - ret.push('--- ' + fileName + (typeof oldHeader === 'undefined' ? '' : '\t' + oldHeader)); - ret.push('+++ ' + fileName + (typeof newHeader === 'undefined' ? '' : '\t' + newHeader)); - - var diff = LineDiff.diff(oldStr, newStr); - if (!diff[diff.length-1].value) { - diff.pop(); // Remove trailing newline add - } - diff.push({value: '', lines: []}); // Append an empty value to make cleanup easier - - function contextLines(lines) { - return lines.map(function(entry) { return ' ' + entry; }); - } - function eofNL(curRange, i, current) { - var last = diff[diff.length-2], - isLast = i === diff.length-2, - isLastOfType = i === diff.length-3 && (current.added !== last.added || current.removed !== last.removed); - - // Figure out if this is the last line for the given file and missing NL - if (!/\n$/.test(current.value) && (isLast || isLastOfType)) { - curRange.push('\\ No newline at end of file'); - } - } - - var oldRangeStart = 0, newRangeStart = 0, curRange = [], - oldLine = 1, newLine = 1; - for (var i = 0; i < diff.length; i++) { - var current = diff[i], - lines = current.lines || current.value.replace(/\n$/, '').split('\n'); - current.lines = lines; - - if (current.added || current.removed) { - if (!oldRangeStart) { - var prev = diff[i-1]; - oldRangeStart = oldLine; - newRangeStart = newLine; - - if (prev) { - curRange = contextLines(prev.lines.slice(-4)); - oldRangeStart -= curRange.length; - newRangeStart -= curRange.length; - } - } - curRange.push.apply(curRange, lines.map(function(entry) { return (current.added?'+':'-') + entry; })); - eofNL(curRange, i, current); - - if (current.added) { - newLine += lines.length; - } else { - oldLine += lines.length; - } - } else { - if (oldRangeStart) { - // Close out any changes that have been output (or join overlapping) - if (lines.length <= 8 && i < diff.length-2) { - // Overlapping - curRange.push.apply(curRange, contextLines(lines)); - } else { - // end the range and output - var contextSize = Math.min(lines.length, 4); - ret.push( - '@@ -' + oldRangeStart + ',' + (oldLine-oldRangeStart+contextSize) - + ' +' + newRangeStart + ',' + (newLine-newRangeStart+contextSize) - + ' @@'); - ret.push.apply(ret, curRange); - ret.push.apply(ret, contextLines(lines.slice(0, contextSize))); - if (lines.length <= 4) { - eofNL(ret, i, current); - } - - oldRangeStart = 0; newRangeStart = 0; curRange = []; - } - } - oldLine += lines.length; - newLine += lines.length; - } - } - - return ret.join('\n') + '\n'; - }, - - applyPatch: function(oldStr, uniDiff) { - var diffstr = uniDiff.split('\n'); - var diff = []; - var remEOFNL = false, - addEOFNL = false; - - for (var i = (diffstr[0][0]==='I'?4:0); i < diffstr.length; i++) { - if(diffstr[i][0] === '@') { - var meh = diffstr[i].split(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/); - diff.unshift({ - start:meh[3], - oldlength:meh[2], - oldlines:[], - newlength:meh[4], - newlines:[] - }); - } else if(diffstr[i][0] === '+') { - diff[0].newlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === '-') { - diff[0].oldlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === ' ') { - diff[0].newlines.push(diffstr[i].substr(1)); - diff[0].oldlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === '\\') { - if (diffstr[i-1][0] === '+') { - remEOFNL = true; - } else if(diffstr[i-1][0] === '-') { - addEOFNL = true; - } - } - } - - var str = oldStr.split('\n'); - for (var i = diff.length - 1; i >= 0; i--) { - var d = diff[i]; - for (var j = 0; j < d.oldlength; j++) { - if(str[d.start-1+j] !== d.oldlines[j]) { - return false; - } - } - Array.prototype.splice.apply(str,[d.start-1,+d.oldlength].concat(d.newlines)); - } - - if (remEOFNL) { - while (!str[str.length-1]) { - str.pop(); - } - } else if (addEOFNL) { - str.push(''); - } - return str.join('\n'); - }, - - convertChangesToXML: function(changes){ - var ret = []; - for ( var i = 0; i < changes.length; i++) { - var change = changes[i]; - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - - ret.push(escapeHTML(change.value)); - - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - } - return ret.join(''); - }, - - // See: http://code.google.com/p/google-diff-match-patch/wiki/API - convertChangesToDMP: function(changes){ - var ret = [], change; - for ( var i = 0; i < changes.length; i++) { - change = changes[i]; - ret.push([(change.added ? 1 : change.removed ? -1 : 0), change.value]); - } - return ret; - } - }; -})(); - -if (typeof module !== 'undefined') { - module.exports = JsDiff; -} diff --git a/node_modules/mocha/node_modules/diff/package.json b/node_modules/mocha/node_modules/diff/package.json deleted file mode 100644 index 867fd0ce..00000000 --- a/node_modules/mocha/node_modules/diff/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "diff", - "version": "1.0.7", - "description": "A javascript text diff implementation.", - "keywords": [ - "diff", - "javascript" - ], - "maintainers": [ - { - "name": "Kevin Decker", - "email": "kpdecker@gmail.com", - "url": "http://incaseofstairs.com" - } - ], - "bugs": { - "url": "http://github.com/kpdecker/jsdiff/issues", - "email": "kpdecker@gmail.com" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/kpdecker/jsdiff/blob/master/LICENSE" - } - ], - "repository": { - "type": "git", - "url": "git://github.com/kpdecker/jsdiff.git" - }, - "engines": { - "node": ">=0.3.1" - }, - "main": "./diff", - "scripts": { - "test": "mocha test/*.js" - }, - "dependencies": {}, - "devDependencies": { - "mocha": "~1.6", - "should": "~1.2" - }, - "optionalDependencies": {}, - "files": [ - "diff.js" - ], - "readme": "# jsdiff\n\n[![Build Status](https://secure.travis-ci.org/kpdecker/jsdiff.png)](http://travis-ci.org/kpdecker/jsdiff)\n\nA javascript text differencing implementation.\n\nBased on the algorithm proposed in\n[\"An O(ND) Difference Algorithm and its Variations\" (Myers, 1986)](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927).\n\n## Installation\n\n npm install diff\n\nor\n\n git clone git://github.com/kpdecker/jsdiff.git\n\n## API\n\n* JsDiff.diffChars(oldStr, newStr)\n Diffs two blocks of text, comparing character by character.\n\n Returns a list of change objects (See below).\n\n* JsDiff.diffWords(oldStr, newStr)\n Diffs two blocks of text, comparing word by word.\n\n Returns a list of change objects (See below).\n\n* JsDiff.diffLines(oldStr, newStr)\n Diffs two blocks of text, comparing line by line.\n\n Returns a list of change objects (See below).\n\n* JsDiff.diffCss(oldStr, newStr)\n Diffs two blocks of text, comparing CSS tokens.\n\n Returns a list of change objects (See below).\n\n* JsDiff.createPatch(fileName, oldStr, newStr, oldHeader, newHeader)\n Creates a unified diff patch.\n\n Parameters:\n * fileName : String to be output in the filename sections of the patch\n * oldStr : Original string value\n * newStr : New string value\n * oldHeader : Additional information to include in the old file header\n * newHeader : Additional information to include in thew new file header\n\n* JsDiff.applyPatch(oldStr, diffStr)\n Applies a unified diff patch.\n\n Return a string containing new version of provided data.\n\n* convertChangesToXML(changes)\n Converts a list of changes to a serialized XML format\n\n### Change Objects\nMany of the methods above return change objects. These objects are consist of the following fields:\n\n* value: Text content\n* added: True if the value was inserted into the new string\n* removed: True of the value was removed from the old string\n\nNote that some cases may omit a particular flag field. Comparison on the flag fields should always be done in a truthy or falsy manner.\n\n## [Example](http://kpdecker.github.com/jsdiff)\n\n## License\n\nSoftware License Agreement (BSD License)\n\nCopyright (c) 2009-2011, Kevin Decker kpdecker@gmail.com\n\nAll rights reserved.\n\nRedistribution and use of this software in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above\n copyright notice, this list of conditions and the\n following disclaimer.\n\n* Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the\n following disclaimer in the documentation and/or other\n materials provided with the distribution.\n\n* Neither the name of Kevin Decker nor the names of its\n contributors may be used to endorse or promote products\n derived from this software without specific prior\n written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR\nIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER\nIN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\nOF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/kpdecker/jsdiff", - "_id": "diff@1.0.7", - "_from": "diff@1.0.7" -} diff --git a/node_modules/mocha/node_modules/glob/.npmignore b/node_modules/mocha/node_modules/glob/.npmignore deleted file mode 100644 index 2af4b71c..00000000 --- a/node_modules/mocha/node_modules/glob/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.*.swp -test/a/ diff --git a/node_modules/mocha/node_modules/glob/.travis.yml b/node_modules/mocha/node_modules/glob/.travis.yml deleted file mode 100644 index baa0031d..00000000 --- a/node_modules/mocha/node_modules/glob/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.8 diff --git a/node_modules/mocha/node_modules/glob/LICENSE b/node_modules/mocha/node_modules/glob/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/mocha/node_modules/glob/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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/mocha/node_modules/glob/README.md b/node_modules/mocha/node_modules/glob/README.md deleted file mode 100644 index cc691645..00000000 --- a/node_modules/mocha/node_modules/glob/README.md +++ /dev/null @@ -1,250 +0,0 @@ -# Glob - -Match files using the patterns the shell uses, like stars and stuff. - -This is a glob implementation in JavaScript. It uses the `minimatch` -library to do its matching. - -## Attention: node-glob users! - -The API has changed dramatically between 2.x and 3.x. This library is -now 100% JavaScript, and the integer flags have been replaced with an -options object. - -Also, there's an event emitter class, proper tests, and all the other -things you've come to expect from node modules. - -And best of all, no compilation! - -## Usage - -```javascript -var glob = require("glob") - -// options is optional -glob("**/*.js", options, function (er, files) { - // files is an array of filenames. - // If the `nonull` option is set, and nothing - // was found, then files is ["**/*.js"] - // er is an error object or null. -}) -``` - -## Features - -Please see the [minimatch -documentation](https://github.com/isaacs/minimatch) for more details. - -Supports these glob features: - -* Brace Expansion -* Extended glob matching -* "Globstar" `**` matching - -See: - -* `man sh` -* `man bash` -* `man 3 fnmatch` -* `man 5 gitignore` -* [minimatch documentation](https://github.com/isaacs/minimatch) - -## glob(pattern, [options], cb) - -* `pattern` {String} Pattern to be matched -* `options` {Object} -* `cb` {Function} - * `err` {Error | null} - * `matches` {Array} filenames found matching the pattern - -Perform an asynchronous glob search. - -## glob.sync(pattern, [options]) - -* `pattern` {String} Pattern to be matched -* `options` {Object} -* return: {Array} filenames found matching the pattern - -Perform a synchronous glob search. - -## Class: glob.Glob - -Create a Glob object by instanting the `glob.Glob` class. - -```javascript -var Glob = require("glob").Glob -var mg = new Glob(pattern, options, cb) -``` - -It's an EventEmitter, and starts walking the filesystem to find matches -immediately. - -### new glob.Glob(pattern, [options], [cb]) - -* `pattern` {String} pattern to search for -* `options` {Object} -* `cb` {Function} Called when an error occurs, or matches are found - * `err` {Error | null} - * `matches` {Array} filenames found matching the pattern - -Note that if the `sync` flag is set in the options, then matches will -be immediately available on the `g.found` member. - -### Properties - -* `minimatch` The minimatch object that the glob uses. -* `options` The options object passed in. -* `error` The error encountered. When an error is encountered, the - glob object is in an undefined state, and should be discarded. -* `aborted` Boolean which is set to true when calling `abort()`. There - is no way at this time to continue a glob search after aborting, but - you can re-use the statCache to avoid having to duplicate syscalls. -* `statCache` Collection of all the stat results the glob search - performed. -* `cache` Convenience object. Each field has the following possible - values: - * `false` - Path does not exist - * `true` - Path exists - * `1` - Path exists, and is not a directory - * `2` - Path exists, and is a directory - * `[file, entries, ...]` - Path exists, is a directory, and the - array value is the results of `fs.readdir` - -### Events - -* `end` When the matching is finished, this is emitted with all the - matches found. If the `nonull` option is set, and no match was found, - then the `matches` list contains the original pattern. The matches - are sorted, unless the `nosort` flag is set. -* `match` Every time a match is found, this is emitted with the matched. -* `error` Emitted when an unexpected error is encountered, or whenever - any fs error occurs if `options.strict` is set. -* `abort` When `abort()` is called, this event is raised. - -### Methods - -* `abort` Stop the search. - -### Options - -All the options that can be passed to Minimatch can also be passed to -Glob to change pattern matching behavior. Also, some have been added, -or have glob-specific ramifications. - -All options are false by default, unless otherwise noted. - -All options are added to the glob object, as well. - -* `cwd` The current working directory in which to search. Defaults - to `process.cwd()`. -* `root` The place where patterns starting with `/` will be mounted - onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix - systems, and `C:\` or some such on Windows.) -* `dot` Include `.dot` files in normal matches and `globstar` matches. - Note that an explicit dot in a portion of the pattern will always - match dot files. -* `nomount` By default, a pattern starting with a forward-slash will be - "mounted" onto the root setting, so that a valid filesystem path is - returned. Set this flag to disable that behavior. -* `mark` Add a `/` character to directory matches. Note that this - requires additional stat calls. -* `nosort` Don't sort the results. -* `stat` Set to true to stat *all* results. This reduces performance - somewhat, and is completely unnecessary, unless `readdir` is presumed - to be an untrustworthy indicator of file existence. It will cause - ELOOP to be triggered one level sooner in the case of cyclical - symbolic links. -* `silent` When an unusual error is encountered - when attempting to read a directory, a warning will be printed to - stderr. Set the `silent` option to true to suppress these warnings. -* `strict` When an unusual error is encountered - when attempting to read a directory, the process will just continue on - in search of other matches. Set the `strict` option to raise an error - in these cases. -* `cache` See `cache` property above. Pass in a previously generated - cache object to save some fs calls. -* `statCache` A cache of results of filesystem information, to prevent - unnecessary stat calls. While it should not normally be necessary to - set this, you may pass the statCache from one glob() call to the - options object of another, if you know that the filesystem will not - change between calls. (See "Race Conditions" below.) -* `sync` Perform a synchronous glob search. -* `nounique` In some cases, brace-expanded patterns can result in the - same file showing up multiple times in the result set. By default, - this implementation prevents duplicates in the result set. - Set this flag to disable that behavior. -* `nonull` Set to never return an empty set, instead returning a set - containing the pattern itself. This is the default in glob(3). -* `nocase` Perform a case-insensitive match. Note that case-insensitive - filesystems will sometimes result in glob returning results that are - case-insensitively matched anyway, since readdir and stat will not - raise an error. -* `debug` Set to enable debug logging in minimatch and glob. -* `globDebug` Set to enable debug logging in glob, but not minimatch. - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between node-glob and other -implementations, and are intentional. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. - -If an escaped pattern has no matches, and the `nonull` flag is set, -then glob returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. - -## Windows - -**Please only use forward-slashes in glob expressions.** - -Though windows uses either `/` or `\` as its path separator, only `/` -characters are used by this glob implementation. You must use -forward-slashes **only** in glob expressions. Back-slashes will always -be interpreted as escape characters, not path separators. - -Results from absolute patterns such as `/foo/*` are mounted onto the -root setting using `path.join`. On windows, this will by default result -in `/foo/*` matching `C:\foo\bar.txt`. - -## Race Conditions - -Glob searching, by its very nature, is susceptible to race conditions, -since it relies on directory walking and such. - -As a result, it is possible that a file that exists when glob looks for -it may have been deleted or modified by the time it returns the result. - -As part of its internal implementation, this program caches all stat -and readdir calls that it makes, in order to cut down on system -overhead. However, this also makes it even more susceptible to races, -especially if the cache or statCache objects are reused between glob -calls. - -Users are thus advised not to use a glob result as a guarantee of -filesystem state in the face of rapid changes. For the vast majority -of operations, this is never a problem. diff --git a/node_modules/mocha/node_modules/glob/examples/g.js b/node_modules/mocha/node_modules/glob/examples/g.js deleted file mode 100644 index be122df0..00000000 --- a/node_modules/mocha/node_modules/glob/examples/g.js +++ /dev/null @@ -1,9 +0,0 @@ -var Glob = require("../").Glob - -var pattern = "test/a/**/[cg]/../[cg]" -console.log(pattern) - -var mg = new Glob(pattern, {mark: true, sync:true}, function (er, matches) { - console.log("matches", matches) -}) -console.log("after") diff --git a/node_modules/mocha/node_modules/glob/examples/usr-local.js b/node_modules/mocha/node_modules/glob/examples/usr-local.js deleted file mode 100644 index 327a425e..00000000 --- a/node_modules/mocha/node_modules/glob/examples/usr-local.js +++ /dev/null @@ -1,9 +0,0 @@ -var Glob = require("../").Glob - -var pattern = "{./*/*,/*,/usr/local/*}" -console.log(pattern) - -var mg = new Glob(pattern, {mark: true}, function (er, matches) { - console.log("matches", matches) -}) -console.log("after") diff --git a/node_modules/mocha/node_modules/glob/glob.js b/node_modules/mocha/node_modules/glob/glob.js deleted file mode 100644 index f0118a4f..00000000 --- a/node_modules/mocha/node_modules/glob/glob.js +++ /dev/null @@ -1,675 +0,0 @@ -// Approach: -// -// 1. Get the minimatch set -// 2. For each pattern in the set, PROCESS(pattern) -// 3. Store matches per-set, then uniq them -// -// PROCESS(pattern) -// Get the first [n] items from pattern that are all strings -// Join these together. This is PREFIX. -// If there is no more remaining, then stat(PREFIX) and -// add to matches if it succeeds. END. -// readdir(PREFIX) as ENTRIES -// If fails, END -// If pattern[n] is GLOBSTAR -// // handle the case where the globstar match is empty -// // by pruning it out, and testing the resulting pattern -// PROCESS(pattern[0..n] + pattern[n+1 .. $]) -// // handle other cases. -// for ENTRY in ENTRIES (not dotfiles) -// // attach globstar + tail onto the entry -// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $]) -// -// else // not globstar -// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) -// Test ENTRY against pattern[n] -// If fails, continue -// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) -// -// Caveat: -// Cache all stats and readdirs results to minimize syscall. Since all -// we ever care about is existence and directory-ness, we can just keep -// `true` for files, and [children,...] for directories, or `false` for -// things that don't exist. - - - -module.exports = glob - -var fs = require("graceful-fs") -, minimatch = require("minimatch") -, Minimatch = minimatch.Minimatch -, inherits = require("inherits") -, EE = require("events").EventEmitter -, path = require("path") -, isDir = {} -, assert = require("assert").ok - -function glob (pattern, options, cb) { - if (typeof options === "function") cb = options, options = {} - if (!options) options = {} - - if (typeof options === "number") { - deprecated() - return - } - - var g = new Glob(pattern, options, cb) - return g.sync ? g.found : g -} - -glob.fnmatch = deprecated - -function deprecated () { - throw new Error("glob's interface has changed. Please see the docs.") -} - -glob.sync = globSync -function globSync (pattern, options) { - if (typeof options === "number") { - deprecated() - return - } - - options = options || {} - options.sync = true - return glob(pattern, options) -} - - -glob.Glob = Glob -inherits(Glob, EE) -function Glob (pattern, options, cb) { - if (!(this instanceof Glob)) { - return new Glob(pattern, options, cb) - } - - if (typeof cb === "function") { - this.on("error", cb) - this.on("end", function (matches) { - cb(null, matches) - }) - } - - options = options || {} - - this.EOF = {} - this._emitQueue = [] - - this.maxDepth = options.maxDepth || 1000 - this.maxLength = options.maxLength || Infinity - this.cache = options.cache || {} - this.statCache = options.statCache || {} - - this.changedCwd = false - var cwd = process.cwd() - if (!options.hasOwnProperty("cwd")) this.cwd = cwd - else { - this.cwd = options.cwd - this.changedCwd = path.resolve(options.cwd) !== cwd - } - - this.root = options.root || path.resolve(this.cwd, "/") - this.root = path.resolve(this.root) - if (process.platform === "win32") - this.root = this.root.replace(/\\/g, "/") - - this.nomount = !!options.nomount - - if (!pattern) { - throw new Error("must provide pattern") - } - - // base-matching: just use globstar for that. - if (options.matchBase && -1 === pattern.indexOf("/")) { - if (options.noglobstar) { - throw new Error("base matching requires globstar") - } - pattern = "**/" + pattern - } - - this.strict = options.strict !== false - this.dot = !!options.dot - this.mark = !!options.mark - this.sync = !!options.sync - this.nounique = !!options.nounique - this.nonull = !!options.nonull - this.nosort = !!options.nosort - this.nocase = !!options.nocase - this.stat = !!options.stat - - this.debug = !!options.debug || !!options.globDebug - if (this.debug) - this.log = console.error - - this.silent = !!options.silent - - var mm = this.minimatch = new Minimatch(pattern, options) - this.options = mm.options - pattern = this.pattern = mm.pattern - - this.error = null - this.aborted = false - - // list of all the patterns that ** has resolved do, so - // we can avoid visiting multiple times. - this._globstars = {} - - EE.call(this) - - // process each pattern in the minimatch set - var n = this.minimatch.set.length - - // The matches are stored as {: true,...} so that - // duplicates are automagically pruned. - // Later, we do an Object.keys() on these. - // Keep them as a list so we can fill in when nonull is set. - this.matches = new Array(n) - - this.minimatch.set.forEach(iterator.bind(this)) - function iterator (pattern, i, set) { - this._process(pattern, 0, i, function (er) { - if (er) this.emit("error", er) - if (-- n <= 0) this._finish() - }) - } -} - -Glob.prototype.log = function () {} - -Glob.prototype._finish = function () { - assert(this instanceof Glob) - - var nou = this.nounique - , all = nou ? [] : {} - - for (var i = 0, l = this.matches.length; i < l; i ++) { - var matches = this.matches[i] - this.log("matches[%d] =", i, matches) - // do like the shell, and spit out the literal glob - if (!matches) { - if (this.nonull) { - var literal = this.minimatch.globSet[i] - if (nou) all.push(literal) - else all[literal] = true - } - } else { - // had matches - var m = Object.keys(matches) - if (nou) all.push.apply(all, m) - else m.forEach(function (m) { - all[m] = true - }) - } - } - - if (!nou) all = Object.keys(all) - - if (!this.nosort) { - all = all.sort(this.nocase ? alphasorti : alphasort) - } - - if (this.mark) { - // at *some* point we statted all of these - all = all.map(function (m) { - var sc = this.cache[m] - if (!sc) - return m - var isDir = (Array.isArray(sc) || sc === 2) - if (isDir && m.slice(-1) !== "/") { - return m + "/" - } - if (!isDir && m.slice(-1) === "/") { - return m.replace(/\/+$/, "") - } - return m - }, this) - } - - this.log("emitting end", all) - - this.EOF = this.found = all - this.emitMatch(this.EOF) -} - -function alphasorti (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return alphasort(a, b) -} - -function alphasort (a, b) { - return a > b ? 1 : a < b ? -1 : 0 -} - -Glob.prototype.abort = function () { - this.aborted = true - this.emit("abort") -} - -Glob.prototype.pause = function () { - if (this.paused) return - if (this.sync) - this.emit("error", new Error("Can't pause/resume sync glob")) - this.paused = true - this.emit("pause") -} - -Glob.prototype.resume = function () { - if (!this.paused) return - if (this.sync) - this.emit("error", new Error("Can't pause/resume sync glob")) - this.paused = false - this.emit("resume") - this._processEmitQueue() - //process.nextTick(this.emit.bind(this, "resume")) -} - -Glob.prototype.emitMatch = function (m) { - if (!this.stat || this.statCache[m] || m === this.EOF) { - this._emitQueue.push(m) - this._processEmitQueue() - } else { - this._stat(m, function(exists, isDir) { - if (exists) { - this._emitQueue.push(m) - this._processEmitQueue() - } - }) - } -} - -Glob.prototype._processEmitQueue = function (m) { - while (!this._processingEmitQueue && - !this.paused) { - this._processingEmitQueue = true - var m = this._emitQueue.shift() - if (!m) { - this._processingEmitQueue = false - break - } - - this.log('emit!', m === this.EOF ? "end" : "match") - - this.emit(m === this.EOF ? "end" : "match", m) - this._processingEmitQueue = false - } -} - -Glob.prototype._process = function (pattern, depth, index, cb_) { - assert(this instanceof Glob) - - var cb = function cb (er, res) { - assert(this instanceof Glob) - if (this.paused) { - if (!this._processQueue) { - this._processQueue = [] - this.once("resume", function () { - var q = this._processQueue - this._processQueue = null - q.forEach(function (cb) { cb() }) - }) - } - this._processQueue.push(cb_.bind(this, er, res)) - } else { - cb_.call(this, er, res) - } - }.bind(this) - - if (this.aborted) return cb() - - if (depth > this.maxDepth) return cb() - - // Get the first [n] parts of pattern that are all strings. - var n = 0 - while (typeof pattern[n] === "string") { - n ++ - } - // now n is the index of the first one that is *not* a string. - - // see if there's anything else - var prefix - switch (n) { - // if not, then this is rather simple - case pattern.length: - prefix = pattern.join("/") - this._stat(prefix, function (exists, isDir) { - // either it's there, or it isn't. - // nothing more to do, either way. - if (exists) { - if (prefix && isAbsolute(prefix) && !this.nomount) { - if (prefix.charAt(0) === "/") { - prefix = path.join(this.root, prefix) - } else { - prefix = path.resolve(this.root, prefix) - } - } - - if (process.platform === "win32") - prefix = prefix.replace(/\\/g, "/") - - this.matches[index] = this.matches[index] || {} - this.matches[index][prefix] = true - this.emitMatch(prefix) - } - return cb() - }) - return - - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null - break - - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's "absolute" like /foo/bar, - // or "relative" like "../baz" - prefix = pattern.slice(0, n) - prefix = prefix.join("/") - break - } - - // get the list of entries. - var read - if (prefix === null) read = "." - else if (isAbsolute(prefix) || isAbsolute(pattern.join("/"))) { - if (!prefix || !isAbsolute(prefix)) { - prefix = path.join("/", prefix) - } - read = prefix = path.resolve(prefix) - - // if (process.platform === "win32") - // read = prefix = prefix.replace(/^[a-zA-Z]:|\\/g, "/") - - this.log('absolute: ', prefix, this.root, pattern, read) - } else { - read = prefix - } - - this.log('readdir(%j)', read, this.cwd, this.root) - - return this._readdir(read, function (er, entries) { - if (er) { - // not a directory! - // this means that, whatever else comes after this, it can never match - return cb() - } - - // globstar is special - if (pattern[n] === minimatch.GLOBSTAR) { - // test without the globstar, and with every child both below - // and replacing the globstar. - var s = [ pattern.slice(0, n).concat(pattern.slice(n + 1)) ] - entries.forEach(function (e) { - if (e.charAt(0) === "." && !this.dot) return - // instead of the globstar - s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1))) - // below the globstar - s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n))) - }, this) - - s = s.filter(function (pattern) { - var key = gsKey(pattern) - var seen = !this._globstars[key] - this._globstars[key] = true - return seen - }, this) - - if (!s.length) - return cb() - - // now asyncForEach over this - var l = s.length - , errState = null - s.forEach(function (gsPattern) { - this._process(gsPattern, depth + 1, index, function (er) { - if (errState) return - if (er) return cb(errState = er) - if (--l <= 0) return cb() - }) - }, this) - - return - } - - // not a globstar - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = pattern[n] - var rawGlob = pattern[n]._glob - , dotOk = this.dot || rawGlob.charAt(0) === "." - - entries = entries.filter(function (e) { - return (e.charAt(0) !== "." || dotOk) && - e.match(pattern[n]) - }) - - // If n === pattern.length - 1, then there's no need for the extra stat - // *unless* the user has specified "mark" or "stat" explicitly. - // We know that they exist, since the readdir returned them. - if (n === pattern.length - 1 && - !this.mark && - !this.stat) { - entries.forEach(function (e) { - if (prefix) { - if (prefix !== "/") e = prefix + "/" + e - else e = prefix + e - } - if (e.charAt(0) === "/" && !this.nomount) { - e = path.join(this.root, e) - } - - if (process.platform === "win32") - e = e.replace(/\\/g, "/") - - this.matches[index] = this.matches[index] || {} - this.matches[index][e] = true - this.emitMatch(e) - }, this) - return cb.call(this) - } - - - // now test all the remaining entries as stand-ins for that part - // of the pattern. - var l = entries.length - , errState = null - if (l === 0) return cb() // no matches possible - entries.forEach(function (e) { - var p = pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1)) - this._process(p, depth + 1, index, function (er) { - if (errState) return - if (er) return cb(errState = er) - if (--l === 0) return cb.call(this) - }) - }, this) - }) - -} - -function gsKey (pattern) { - return '**' + pattern.map(function (p) { - return (p === minimatch.GLOBSTAR) ? '**' : (''+p) - }).join('/') -} - -Glob.prototype._stat = function (f, cb) { - assert(this instanceof Glob) - var abs = f - if (f.charAt(0) === "/") { - abs = path.join(this.root, f) - } else if (this.changedCwd) { - abs = path.resolve(this.cwd, f) - } - - if (f.length > this.maxLength) { - var er = new Error("Path name too long") - er.code = "ENAMETOOLONG" - er.path = f - return this._afterStat(f, abs, cb, er) - } - - this.log('stat', [this.cwd, f, '=', abs]) - - if (!this.stat && this.cache.hasOwnProperty(f)) { - var exists = this.cache[f] - , isDir = exists && (Array.isArray(exists) || exists === 2) - if (this.sync) return cb.call(this, !!exists, isDir) - return process.nextTick(cb.bind(this, !!exists, isDir)) - } - - var stat = this.statCache[abs] - if (this.sync || stat) { - var er - try { - stat = fs.statSync(abs) - } catch (e) { - er = e - } - this._afterStat(f, abs, cb, er, stat) - } else { - fs.stat(abs, this._afterStat.bind(this, f, abs, cb)) - } -} - -Glob.prototype._afterStat = function (f, abs, cb, er, stat) { - var exists - assert(this instanceof Glob) - - if (abs.slice(-1) === "/" && stat && !stat.isDirectory()) { - this.log("should be ENOTDIR, fake it") - - er = new Error("ENOTDIR, not a directory '" + abs + "'") - er.path = abs - er.code = "ENOTDIR" - stat = null - } - - var emit = !this.statCache[abs] - this.statCache[abs] = stat - - if (er || !stat) { - exists = false - } else { - exists = stat.isDirectory() ? 2 : 1 - if (emit) - this.emit('stat', f, stat) - } - this.cache[f] = this.cache[f] || exists - cb.call(this, !!exists, exists === 2) -} - -Glob.prototype._readdir = function (f, cb) { - assert(this instanceof Glob) - var abs = f - if (f.charAt(0) === "/") { - abs = path.join(this.root, f) - } else if (isAbsolute(f)) { - abs = f - } else if (this.changedCwd) { - abs = path.resolve(this.cwd, f) - } - - if (f.length > this.maxLength) { - var er = new Error("Path name too long") - er.code = "ENAMETOOLONG" - er.path = f - return this._afterReaddir(f, abs, cb, er) - } - - this.log('readdir', [this.cwd, f, abs]) - if (this.cache.hasOwnProperty(f)) { - var c = this.cache[f] - if (Array.isArray(c)) { - if (this.sync) return cb.call(this, null, c) - return process.nextTick(cb.bind(this, null, c)) - } - - if (!c || c === 1) { - // either ENOENT or ENOTDIR - var code = c ? "ENOTDIR" : "ENOENT" - , er = new Error((c ? "Not a directory" : "Not found") + ": " + f) - er.path = f - er.code = code - this.log(f, er) - if (this.sync) return cb.call(this, er) - return process.nextTick(cb.bind(this, er)) - } - - // at this point, c === 2, meaning it's a dir, but we haven't - // had to read it yet, or c === true, meaning it's *something* - // but we don't have any idea what. Need to read it, either way. - } - - if (this.sync) { - var er, entries - try { - entries = fs.readdirSync(abs) - } catch (e) { - er = e - } - return this._afterReaddir(f, abs, cb, er, entries) - } - - fs.readdir(abs, this._afterReaddir.bind(this, f, abs, cb)) -} - -Glob.prototype._afterReaddir = function (f, abs, cb, er, entries) { - assert(this instanceof Glob) - if (entries && !er) { - this.cache[f] = entries - // if we haven't asked to stat everything for suresies, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. This also gets us one step - // further into ELOOP territory. - if (!this.mark && !this.stat) { - entries.forEach(function (e) { - if (f === "/") e = f + e - else e = f + "/" + e - this.cache[e] = true - }, this) - } - - return cb.call(this, er, entries) - } - - // now handle errors, and cache the information - if (er) switch (er.code) { - case "ENOTDIR": // totally normal. means it *does* exist. - this.cache[f] = 1 - return cb.call(this, er) - case "ENOENT": // not terribly unusual - case "ELOOP": - case "ENAMETOOLONG": - case "UNKNOWN": - this.cache[f] = false - return cb.call(this, er) - default: // some unusual error. Treat as failure. - this.cache[f] = false - if (this.strict) this.emit("error", er) - if (!this.silent) console.error("glob error", er) - return cb.call(this, er) - } -} - -var isAbsolute = process.platform === "win32" ? absWin : absUnix - -function absWin (p) { - if (absUnix(p)) return true - // pull off the device/UNC bit from a windows path. - // from node's lib/path.js - var splitDeviceRe = - /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/ - , result = splitDeviceRe.exec(p) - , device = result[1] || '' - , isUnc = device && device.charAt(1) !== ':' - , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute - - return isAbsolute -} - -function absUnix (p) { - return p.charAt(0) === "/" || p === "" -} diff --git a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/.npmignore b/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/.npmignore deleted file mode 100644 index c2658d7d..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/LICENSE b/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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/mocha/node_modules/glob/node_modules/graceful-fs/README.md b/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/README.md deleted file mode 100644 index eb1a1093..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# graceful-fs - -graceful-fs functions as a drop-in replacement for the fs module, -making various improvements. - -The improvements are meant to normalize behavior across different -platforms and environments, and to make filesystem access more -resilient to errors. - -## Improvements over fs module - -graceful-fs: - -* Queues up `open` and `readdir` calls, and retries them once - something closes if there is an EMFILE error from too many file - descriptors. -* fixes `lchmod` for Node versions prior to 0.6.2. -* implements `fs.lutimes` if possible. Otherwise it becomes a noop. -* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or - `lchown` if the user isn't root. -* makes `lchmod` and `lchown` become noops, if not available. -* retries reading a file if `read` results in EAGAIN error. - -On Windows, it retries renaming a file for up to one second if `EACCESS` -or `EPERM` error occurs, likely because antivirus software has locked -the directory. diff --git a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/graceful-fs.js b/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/graceful-fs.js deleted file mode 100644 index 1865f92c..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/graceful-fs.js +++ /dev/null @@ -1,159 +0,0 @@ -// Monkey-patching the fs module. -// It's ugly, but there is simply no other way to do this. -var fs = module.exports = require('fs') - -var assert = require('assert') - -// fix up some busted stuff, mostly on windows and old nodes -require('./polyfills.js') - -// The EMFILE enqueuing stuff - -var util = require('util') - -function noop () {} - -var debug = noop -var util = require('util') -if (util.debuglog) - debug = util.debuglog('gfs') -else if (/\bgfs\b/i.test(process.env.NODE_DEBUG || '')) - debug = function() { - var m = util.format.apply(util, arguments) - m = 'GFS: ' + m.split(/\n/).join('\nGFS: ') - console.error(m) - } - -if (/\bgfs\b/i.test(process.env.NODE_DEBUG || '')) { - process.on('exit', function() { - debug('fds', fds) - debug(queue) - assert.equal(queue.length, 0) - }) -} - - -var originalOpen = fs.open -fs.open = open - -function open(path, flags, mode, cb) { - if (typeof mode === "function") cb = mode, mode = null - if (typeof cb !== "function") cb = noop - new OpenReq(path, flags, mode, cb) -} - -function OpenReq(path, flags, mode, cb) { - this.path = path - this.flags = flags - this.mode = mode - this.cb = cb - Req.call(this) -} - -util.inherits(OpenReq, Req) - -OpenReq.prototype.process = function() { - originalOpen.call(fs, this.path, this.flags, this.mode, this.done) -} - -var fds = {} -OpenReq.prototype.done = function(er, fd) { - debug('open done', er, fd) - if (fd) - fds['fd' + fd] = this.path - Req.prototype.done.call(this, er, fd) -} - - -var originalReaddir = fs.readdir -fs.readdir = readdir - -function readdir(path, cb) { - if (typeof cb !== "function") cb = noop - new ReaddirReq(path, cb) -} - -function ReaddirReq(path, cb) { - this.path = path - this.cb = cb - Req.call(this) -} - -util.inherits(ReaddirReq, Req) - -ReaddirReq.prototype.process = function() { - originalReaddir.call(fs, this.path, this.done) -} - -ReaddirReq.prototype.done = function(er, files) { - Req.prototype.done.call(this, er, files) - onclose() -} - - -var originalClose = fs.close -fs.close = close - -function close (fd, cb) { - debug('close', fd) - if (typeof cb !== "function") cb = noop - delete fds['fd' + fd] - originalClose.call(fs, fd, function(er) { - onclose() - cb(er) - }) -} - - -var originalCloseSync = fs.closeSync -fs.closeSync = closeSync - -function closeSync (fd) { - try { - return originalCloseSync(fd) - } finally { - onclose() - } -} - - -// Req class -function Req () { - // start processing - this.done = this.done.bind(this) - this.failures = 0 - this.process() -} - -Req.prototype.done = function (er, result) { - var tryAgain = false - if (er) { - var code = er.code - var tryAgain = code === "EMFILE" - if (process.platform === "win32") - tryAgain = tryAgain || code === "OK" - } - - if (tryAgain) { - this.failures ++ - enqueue(this) - } else { - var cb = this.cb - cb(er, result) - } -} - -var queue = [] - -function enqueue(req) { - queue.push(req) - debug('enqueue %d %s', queue.length, req.constructor.name, req) -} - -function onclose() { - var req = queue.shift() - if (req) { - debug('process', req.constructor.name, req) - req.process() - } -} diff --git a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/package.json b/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/package.json deleted file mode 100644 index ea5a208a..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "graceful-fs", - "description": "A drop-in replacement for fs, making various improvements.", - "version": "2.0.1", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-graceful-fs.git" - }, - "main": "graceful-fs.js", - "engines": { - "node": ">=0.4.0" - }, - "directories": { - "test": "test" - }, - "scripts": { - "test": "tap test/*.js" - }, - "keywords": [ - "fs", - "module", - "reading", - "retry", - "retries", - "queue", - "error", - "errors", - "handling", - "EMFILE", - "EAGAIN", - "EINVAL", - "EPERM", - "EACCESS" - ], - "license": "BSD", - "readme": "# graceful-fs\n\ngraceful-fs functions as a drop-in replacement for the fs module,\nmaking various improvements.\n\nThe improvements are meant to normalize behavior across different\nplatforms and environments, and to make filesystem access more\nresilient to errors.\n\n## Improvements over fs module\n\ngraceful-fs:\n\n* Queues up `open` and `readdir` calls, and retries them once\n something closes if there is an EMFILE error from too many file\n descriptors.\n* fixes `lchmod` for Node versions prior to 0.6.2.\n* implements `fs.lutimes` if possible. Otherwise it becomes a noop.\n* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or\n `lchown` if the user isn't root.\n* makes `lchmod` and `lchown` become noops, if not available.\n* retries reading a file if `read` results in EAGAIN error.\n\nOn Windows, it retries renaming a file for up to one second if `EACCESS`\nor `EPERM` error occurs, likely because antivirus software has locked\nthe directory.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-graceful-fs/issues" - }, - "homepage": "https://github.com/isaacs/node-graceful-fs", - "_id": "graceful-fs@2.0.1", - "_from": "graceful-fs@~2.0.0" -} diff --git a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/polyfills.js b/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/polyfills.js deleted file mode 100644 index afc83b3f..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/polyfills.js +++ /dev/null @@ -1,228 +0,0 @@ -var fs = require('fs') -var constants = require('constants') - -var origCwd = process.cwd -var cwd = null -process.cwd = function() { - if (!cwd) - cwd = origCwd.call(process) - return cwd -} -var chdir = process.chdir -process.chdir = function(d) { - cwd = null - chdir.call(process, d) -} - -// (re-)implement some things that are known busted or missing. - -// lchmod, broken prior to 0.6.2 -// back-port the fix here. -if (constants.hasOwnProperty('O_SYMLINK') && - process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) { - fs.lchmod = function (path, mode, callback) { - callback = callback || noop - fs.open( path - , constants.O_WRONLY | constants.O_SYMLINK - , mode - , function (err, fd) { - if (err) { - callback(err) - return - } - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - fs.fchmod(fd, mode, function (err) { - fs.close(fd, function(err2) { - callback(err || err2) - }) - }) - }) - } - - fs.lchmodSync = function (path, mode) { - var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode) - - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - var err, err2 - try { - var ret = fs.fchmodSync(fd, mode) - } catch (er) { - err = er - } - try { - fs.closeSync(fd) - } catch (er) { - err2 = er - } - if (err || err2) throw (err || err2) - return ret - } -} - - -// lutimes implementation, or no-op -if (!fs.lutimes) { - if (constants.hasOwnProperty("O_SYMLINK")) { - fs.lutimes = function (path, at, mt, cb) { - fs.open(path, constants.O_SYMLINK, function (er, fd) { - cb = cb || noop - if (er) return cb(er) - fs.futimes(fd, at, mt, function (er) { - fs.close(fd, function (er2) { - return cb(er || er2) - }) - }) - }) - } - - fs.lutimesSync = function (path, at, mt) { - var fd = fs.openSync(path, constants.O_SYMLINK) - , err - , err2 - , ret - - try { - var ret = fs.futimesSync(fd, at, mt) - } catch (er) { - err = er - } - try { - fs.closeSync(fd) - } catch (er) { - err2 = er - } - if (err || err2) throw (err || err2) - return ret - } - - } else if (fs.utimensat && constants.hasOwnProperty("AT_SYMLINK_NOFOLLOW")) { - // maybe utimensat will be bound soonish? - fs.lutimes = function (path, at, mt, cb) { - fs.utimensat(path, at, mt, constants.AT_SYMLINK_NOFOLLOW, cb) - } - - fs.lutimesSync = function (path, at, mt) { - return fs.utimensatSync(path, at, mt, constants.AT_SYMLINK_NOFOLLOW) - } - - } else { - fs.lutimes = function (_a, _b, _c, cb) { process.nextTick(cb) } - fs.lutimesSync = function () {} - } -} - - -// https://github.com/isaacs/node-graceful-fs/issues/4 -// Chown should not fail on einval or eperm if non-root. - -fs.chown = chownFix(fs.chown) -fs.fchown = chownFix(fs.fchown) -fs.lchown = chownFix(fs.lchown) - -fs.chownSync = chownFixSync(fs.chownSync) -fs.fchownSync = chownFixSync(fs.fchownSync) -fs.lchownSync = chownFixSync(fs.lchownSync) - -function chownFix (orig) { - if (!orig) return orig - return function (target, uid, gid, cb) { - return orig.call(fs, target, uid, gid, function (er, res) { - if (chownErOk(er)) er = null - cb(er, res) - }) - } -} - -function chownFixSync (orig) { - if (!orig) return orig - return function (target, uid, gid) { - try { - return orig.call(fs, target, uid, gid) - } catch (er) { - if (!chownErOk(er)) throw er - } - } -} - -function chownErOk (er) { - // if there's no getuid, or if getuid() is something other than 0, - // and the error is EINVAL or EPERM, then just ignore it. - // This specific case is a silent failure in cp, install, tar, - // and most other unix tools that manage permissions. - // When running as root, or if other types of errors are encountered, - // then it's strict. - if (!er || (!process.getuid || process.getuid() !== 0) - && (er.code === "EINVAL" || er.code === "EPERM")) return true -} - - -// if lchmod/lchown do not exist, then make them no-ops -if (!fs.lchmod) { - fs.lchmod = function (path, mode, cb) { - process.nextTick(cb) - } - fs.lchmodSync = function () {} -} -if (!fs.lchown) { - fs.lchown = function (path, uid, gid, cb) { - process.nextTick(cb) - } - fs.lchownSync = function () {} -} - - - -// on Windows, A/V software can lock the directory, causing this -// to fail with an EACCES or EPERM if the directory contains newly -// created files. Try again on failure, for up to 1 second. -if (process.platform === "win32") { - var rename_ = fs.rename - fs.rename = function rename (from, to, cb) { - var start = Date.now() - rename_(from, to, function CB (er) { - if (er - && (er.code === "EACCES" || er.code === "EPERM") - && Date.now() - start < 1000) { - return rename_(from, to, CB) - } - cb(er) - }) - } -} - - -// if read() returns EAGAIN, then just try it again. -var read = fs.read -fs.read = function (fd, buffer, offset, length, position, callback_) { - var callback - if (callback_ && typeof callback_ === 'function') { - var eagCounter = 0 - callback = function (er, _, __) { - if (er && er.code === 'EAGAIN' && eagCounter < 10) { - eagCounter ++ - return read.call(fs, fd, buffer, offset, length, position, callback) - } - callback_.apply(this, arguments) - } - } - return read.call(fs, fd, buffer, offset, length, position, callback) -} - -var readSync = fs.readSync -fs.readSync = function (fd, buffer, offset, length, position) { - var eagCounter = 0 - while (true) { - try { - return readSync.call(fs, fd, buffer, offset, length, position) - } catch (er) { - if (er.code === 'EAGAIN' && eagCounter < 10) { - eagCounter ++ - continue - } - throw er - } - } -} - diff --git a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/test/open.js b/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/test/open.js deleted file mode 100644 index 104f36b0..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/test/open.js +++ /dev/null @@ -1,39 +0,0 @@ -var test = require('tap').test -var fs = require('../graceful-fs.js') - -test('graceful fs is monkeypatched fs', function (t) { - t.equal(fs, require('fs')) - t.end() -}) - -test('open an existing file works', function (t) { - var fd = fs.openSync(__filename, 'r') - fs.closeSync(fd) - fs.open(__filename, 'r', function (er, fd) { - if (er) throw er - fs.close(fd, function (er) { - if (er) throw er - t.pass('works') - t.end() - }) - }) -}) - -test('open a non-existing file throws', function (t) { - var er - try { - var fd = fs.openSync('this file does not exist', 'r') - } catch (x) { - er = x - } - t.ok(er, 'should throw') - t.notOk(fd, 'should not get an fd') - t.equal(er.code, 'ENOENT') - - fs.open('neither does this file', 'r', function (er, fd) { - t.ok(er, 'should throw') - t.notOk(fd, 'should not get an fd') - t.equal(er.code, 'ENOENT') - t.end() - }) -}) diff --git a/node_modules/mocha/node_modules/glob/node_modules/inherits/LICENSE b/node_modules/mocha/node_modules/glob/node_modules/inherits/LICENSE deleted file mode 100644 index dea3013d..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/inherits/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - diff --git a/node_modules/mocha/node_modules/glob/node_modules/inherits/README.md b/node_modules/mocha/node_modules/glob/node_modules/inherits/README.md deleted file mode 100644 index b1c56658..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/inherits/README.md +++ /dev/null @@ -1,42 +0,0 @@ -Browser-friendly inheritance fully compatible with standard node.js -[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). - -This package exports standard `inherits` from node.js `util` module in -node environment, but also provides alternative browser-friendly -implementation through [browser -field](https://gist.github.com/shtylman/4339901). Alternative -implementation is a literal copy of standard one located in standalone -module to avoid requiring of `util`. It also has a shim for old -browsers with no `Object.create` support. - -While keeping you sure you are using standard `inherits` -implementation in node.js environment, it allows bundlers such as -[browserify](https://github.com/substack/node-browserify) to not -include full `util` package to your client code if all you need is -just `inherits` function. It worth, because browser shim for `util` -package is large and `inherits` is often the single function you need -from it. - -It's recommended to use this package instead of -`require('util').inherits` for any code that has chances to be used -not only in node.js but in browser too. - -## usage - -```js -var inherits = require('inherits'); -// then use exactly as the standard one -``` - -## note on version ~1.0 - -Version ~1.0 had completely different motivation and is not compatible -neither with 2.0 nor with standard node.js `inherits`. - -If you are using version ~1.0 and planning to switch to ~2.0, be -careful: - -* new version uses `super_` instead of `super` for referencing - superclass -* new version overwrites current prototype while old one preserves any - existing fields on it diff --git a/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits.js b/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits.js deleted file mode 100644 index 29f5e24f..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('util').inherits diff --git a/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits_browser.js b/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits_browser.js deleted file mode 100644 index c1e78a75..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits_browser.js +++ /dev/null @@ -1,23 +0,0 @@ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} diff --git a/node_modules/mocha/node_modules/glob/node_modules/inherits/package.json b/node_modules/mocha/node_modules/glob/node_modules/inherits/package.json deleted file mode 100644 index 5bf0db56..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/inherits/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "inherits", - "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", - "version": "2.0.1", - "keywords": [ - "inheritance", - "class", - "klass", - "oop", - "object-oriented", - "inherits", - "browser", - "browserify" - ], - "main": "./inherits.js", - "browser": "./inherits_browser.js", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/inherits" - }, - "license": "ISC", - "scripts": { - "test": "node test" - }, - "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n superclass\n* new version overwrites current prototype while old one preserves any\n existing fields on it\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/inherits/issues" - }, - "homepage": "https://github.com/isaacs/inherits", - "_id": "inherits@2.0.1", - "_from": "inherits@2" -} diff --git a/node_modules/mocha/node_modules/glob/node_modules/inherits/test.js b/node_modules/mocha/node_modules/glob/node_modules/inherits/test.js deleted file mode 100644 index fc53012d..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/inherits/test.js +++ /dev/null @@ -1,25 +0,0 @@ -var inherits = require('./inherits.js') -var assert = require('assert') - -function test(c) { - assert(c.constructor === Child) - assert(c.constructor.super_ === Parent) - assert(Object.getPrototypeOf(c) === Child.prototype) - assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype) - assert(c instanceof Child) - assert(c instanceof Parent) -} - -function Child() { - Parent.call(this) - test(this) -} - -function Parent() {} - -inherits(Child, Parent) - -var c = new Child -test(c) - -console.log('ok') diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/.npmignore b/node_modules/mocha/node_modules/glob/node_modules/minimatch/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/LICENSE b/node_modules/mocha/node_modules/glob/node_modules/minimatch/LICENSE deleted file mode 100644 index 05a40109..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -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/mocha/node_modules/glob/node_modules/minimatch/README.md b/node_modules/mocha/node_modules/glob/node_modules/minimatch/README.md deleted file mode 100644 index 978268e2..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/README.md +++ /dev/null @@ -1,218 +0,0 @@ -# minimatch - -A minimal matching utility. - -[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch) - - -This is the matching library used internally by npm. - -Eventually, it will replace the C binding in node-glob. - -It works by converting glob expressions into JavaScript `RegExp` -objects. - -## Usage - -```javascript -var minimatch = require("minimatch") - -minimatch("bar.foo", "*.foo") // true! -minimatch("bar.foo", "*.bar") // false! -minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy! -``` - -## Features - -Supports these glob features: - -* Brace Expansion -* Extended glob matching -* "Globstar" `**` matching - -See: - -* `man sh` -* `man bash` -* `man 3 fnmatch` -* `man 5 gitignore` - -## Minimatch Class - -Create a minimatch object by instanting the `minimatch.Minimatch` class. - -```javascript -var Minimatch = require("minimatch").Minimatch -var mm = new Minimatch(pattern, options) -``` - -### Properties - -* `pattern` The original pattern the minimatch object represents. -* `options` The options supplied to the constructor. -* `set` A 2-dimensional array of regexp or string expressions. - Each row in the - array corresponds to a brace-expanded pattern. Each item in the row - corresponds to a single path-part. For example, the pattern - `{a,b/c}/d` would expand to a set of patterns like: - - [ [ a, d ] - , [ b, c, d ] ] - - If a portion of the pattern doesn't have any "magic" in it - (that is, it's something like `"foo"` rather than `fo*o?`), then it - will be left as a string rather than converted to a regular - expression. - -* `regexp` Created by the `makeRe` method. A single regular expression - expressing the entire pattern. This is useful in cases where you wish - to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. -* `negate` True if the pattern is negated. -* `comment` True if the pattern is a comment. -* `empty` True if the pattern is `""`. - -### Methods - -* `makeRe` Generate the `regexp` member if necessary, and return it. - Will return `false` if the pattern is invalid. -* `match(fname)` Return true if the filename matches the pattern, or - false otherwise. -* `matchOne(fileArray, patternArray, partial)` Take a `/`-split - filename, and match it against a single row in the `regExpSet`. This - method is mainly for internal use, but is exposed so that it can be - used by a glob-walker that needs to avoid excessive filesystem calls. - -All other methods are internal, and will be called as necessary. - -## Functions - -The top-level exported function has a `cache` property, which is an LRU -cache set to store 100 items. So, calling these methods repeatedly -with the same pattern and options will use the same Minimatch object, -saving the cost of parsing it multiple times. - -### minimatch(path, pattern, options) - -Main export. Tests a path against the pattern using the options. - -```javascript -var isJS = minimatch(file, "*.js", { matchBase: true }) -``` - -### minimatch.filter(pattern, options) - -Returns a function that tests its -supplied argument, suitable for use with `Array.filter`. Example: - -```javascript -var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) -``` - -### minimatch.match(list, pattern, options) - -Match against the list of -files, in the style of fnmatch or glob. If nothing is matched, and -options.nonull is set, then return a list containing the pattern itself. - -```javascript -var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) -``` - -### minimatch.makeRe(pattern, options) - -Make a regular expression object from the pattern. - -## Options - -All options are `false` by default. - -### debug - -Dump a ton of stuff to stderr. - -### nobrace - -Do not expand `{a,b}` and `{1..3}` brace sets. - -### noglobstar - -Disable `**` matching against multiple folder names. - -### dot - -Allow patterns to match filenames starting with a period, even if -the pattern does not explicitly have a period in that spot. - -Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` -is set. - -### noext - -Disable "extglob" style patterns like `+(a|b)`. - -### nocase - -Perform a case-insensitive match. - -### nonull - -When a match is not found by `minimatch.match`, return a list containing -the pattern itself. When set, an empty list is returned if there are -no matches. - -### matchBase - -If set, then patterns without slashes will be matched -against the basename of the path if it contains slashes. For example, -`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. - -### nocomment - -Suppress the behavior of treating `#` at the start of a pattern as a -comment. - -### nonegate - -Suppress the behavior of treating a leading `!` character as negation. - -### flipNegate - -Returns from negate expressions the same as if they were not negated. -(Ie, true on a hit, false on a miss.) - - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between minimatch and other -implementations, and are intentional. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. - -If an escaped pattern has no matches, and the `nonull` flag is set, -then minimatch.match returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/minimatch.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/minimatch.js deleted file mode 100644 index c633f89f..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/minimatch.js +++ /dev/null @@ -1,1055 +0,0 @@ -;(function (require, exports, module, platform) { - -if (module) module.exports = minimatch -else exports.minimatch = minimatch - -if (!require) { - require = function (id) { - switch (id) { - case "sigmund": return function sigmund (obj) { - return JSON.stringify(obj) - } - case "path": return { basename: function (f) { - f = f.split(/[\/\\]/) - var e = f.pop() - if (!e) e = f.pop() - return e - }} - case "lru-cache": return function LRUCache () { - // not quite an LRU, but still space-limited. - var cache = {} - var cnt = 0 - this.set = function (k, v) { - cnt ++ - if (cnt >= 100) cache = {} - cache[k] = v - } - this.get = function (k) { return cache[k] } - } - } - } -} - -minimatch.Minimatch = Minimatch - -var LRU = require("lru-cache") - , cache = minimatch.cache = new LRU({max: 100}) - , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} - , sigmund = require("sigmund") - -var path = require("path") - // any single thing other than / - // don't need to escape / when using new RegExp() - , qmark = "[^/]" - - // * => any number of characters - , star = qmark + "*?" - - // ** when dots are allowed. Anything goes, except .. and . - // not (^ or / followed by one or two dots followed by $ or /), - // followed by anything, any number of times. - , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?" - - // not a ^ or / followed by a dot, - // followed by anything, any number of times. - , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?" - - // characters that need to be escaped in RegExp. - , reSpecials = charSet("().*{}+?[]^$\\!") - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split("").reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - a = a || {} - b = b || {} - var t = {} - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch - - var orig = minimatch - - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch -} - - -function minimatch (p, pattern, options) { - if (typeof pattern !== "string") { - throw new TypeError("glob pattern string required") - } - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === "#") { - return false - } - - // "" only matches "" - if (pattern.trim() === "") return p === "" - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options, cache) - } - - if (typeof pattern !== "string") { - throw new TypeError("glob pattern string required") - } - - if (!options) options = {} - pattern = pattern.trim() - - // windows: need to use /, not \ - // On other platforms, \ is a valid (albeit bad) filename char. - if (platform === "win32") { - pattern = pattern.split("\\").join("/") - } - - // lru storage. - // these things aren't particularly big, but walking down the string - // and turning it into a regexp can get pretty costly. - var cacheKey = pattern + "\n" + sigmund(options) - var cached = minimatch.cache.get(cacheKey) - if (cached) return cached - minimatch.cache.set(cacheKey, this) - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.debug = function() {} - -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return - - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === "#") { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) this.debug = console.error - - this.debug(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - this.debug(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - this.debug(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return -1 === s.indexOf(false) - }) - - this.debug(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - , negate = false - , options = this.options - , negateOffset = 0 - - if (options.nonegate) return - - for ( var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === "!" - ; i ++) { - negate = !negate - negateOffset ++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return new Minimatch(pattern, options).braceExpand() -} - -Minimatch.prototype.braceExpand = braceExpand -function braceExpand (pattern, options) { - options = options || this.options - pattern = typeof pattern === "undefined" - ? this.pattern : pattern - - if (typeof pattern === "undefined") { - throw new Error("undefined pattern") - } - - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - - var escaping = false - - // examples and comments refer to this crazy pattern: - // a{b,c{d,e},{f,g}h}x{y,z} - // expected: - // abxy - // abxz - // acdxy - // acdxz - // acexy - // acexz - // afhxy - // afhxz - // aghxy - // aghxz - - // everything before the first \{ is just a prefix. - // So, we pluck that off, and work with the rest, - // and then prepend it to everything we find. - if (pattern.charAt(0) !== "{") { - this.debug(pattern) - var prefix = null - for (var i = 0, l = pattern.length; i < l; i ++) { - var c = pattern.charAt(i) - this.debug(i, c) - if (c === "\\") { - escaping = !escaping - } else if (c === "{" && !escaping) { - prefix = pattern.substr(0, i) - break - } - } - - // actually no sets, all { were escaped. - if (prefix === null) { - this.debug("no sets") - return [pattern] - } - - var tail = braceExpand.call(this, pattern.substr(i), options) - return tail.map(function (t) { - return prefix + t - }) - } - - // now we have something like: - // {b,c{d,e},{f,g}h}x{y,z} - // walk through the set, expanding each part, until - // the set ends. then, we'll expand the suffix. - // If the set only has a single member, then'll put the {} back - - // first, handle numeric sets, since they're easier - var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/) - if (numset) { - this.debug("numset", numset[1], numset[2]) - var suf = braceExpand.call(this, pattern.substr(numset[0].length), options) - , start = +numset[1] - , end = +numset[2] - , inc = start > end ? -1 : 1 - , set = [] - for (var i = start; i != (end + inc); i += inc) { - // append all the suffixes - for (var ii = 0, ll = suf.length; ii < ll; ii ++) { - set.push(i + suf[ii]) - } - } - return set - } - - // ok, walk through the set - // We hope, somewhat optimistically, that there - // will be a } at the end. - // If the closing brace isn't found, then the pattern is - // interpreted as braceExpand("\\" + pattern) so that - // the leading \{ will be interpreted literally. - var i = 1 // skip the \{ - , depth = 1 - , set = [] - , member = "" - , sawEnd = false - , escaping = false - - function addMember () { - set.push(member) - member = "" - } - - this.debug("Entering for") - FOR: for (i = 1, l = pattern.length; i < l; i ++) { - var c = pattern.charAt(i) - this.debug("", i, c) - - if (escaping) { - escaping = false - member += "\\" + c - } else { - switch (c) { - case "\\": - escaping = true - continue - - case "{": - depth ++ - member += "{" - continue - - case "}": - depth -- - // if this closes the actual set, then we're done - if (depth === 0) { - addMember() - // pluck off the close-brace - i ++ - break FOR - } else { - member += c - continue - } - - case ",": - if (depth === 1) { - addMember() - } else { - member += c - } - continue - - default: - member += c - continue - } // switch - } // else - } // for - - // now we've either finished the set, and the suffix is - // pattern.substr(i), or we have *not* closed the set, - // and need to escape the leading brace - if (depth !== 0) { - this.debug("didn't close", pattern) - return braceExpand.call(this, "\\" + pattern, options) - } - - // x{y,z} -> ["xy", "xz"] - this.debug("set", set) - this.debug("suffix", pattern.substr(i)) - var suf = braceExpand.call(this, pattern.substr(i), options) - // ["b", "c{d,e}","{f,g}h"] -> - // [["b"], ["cd", "ce"], ["fh", "gh"]] - var addBraces = set.length === 1 - this.debug("set pre-expanded", set) - set = set.map(function (p) { - return braceExpand.call(this, p, options) - }, this) - this.debug("set expanded", set) - - - // [["b"], ["cd", "ce"], ["fh", "gh"]] -> - // ["b", "cd", "ce", "fh", "gh"] - set = set.reduce(function (l, r) { - return l.concat(r) - }) - - if (addBraces) { - set = set.map(function (s) { - return "{" + s + "}" - }) - } - - // now attach the suffixes. - var ret = [] - for (var i = 0, l = set.length; i < l; i ++) { - for (var ii = 0, ll = suf.length; ii < ll; ii ++) { - ret.push(set[i] + suf[ii]) - } - } - return ret -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - var options = this.options - - // shortcuts - if (!options.noglobstar && pattern === "**") return GLOBSTAR - if (pattern === "") return "" - - var re = "" - , hasMagic = !!options.nocase - , escaping = false - // ? => one single character - , patternListStack = [] - , plType - , stateChar - , inClass = false - , reClassStart = -1 - , classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - , patternStart = pattern.charAt(0) === "." ? "" // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))" - : "(?!\\.)" - , self = this - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case "*": - re += star - hasMagic = true - break - case "?": - re += qmark - hasMagic = true - break - default: - re += "\\"+stateChar - break - } - self.debug('clearStateChar %j %j', stateChar, re) - stateChar = false - } - } - - for ( var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i ++ ) { - - this.debug("%s\t%s %s %j", pattern, i, re, c) - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += "\\" + c - escaping = false - continue - } - - SWITCH: switch (c) { - case "/": - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - - case "\\": - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case "?": - case "*": - case "+": - case "@": - case "!": - this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c) - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class') - if (c === "!" && i === classStart + 1) c = "^" - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar) - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case "(": - if (inClass) { - re += "(" - continue - } - - if (!stateChar) { - re += "\\(" - continue - } - - plType = stateChar - patternListStack.push({ type: plType - , start: i - 1 - , reStart: re.length }) - // negation is (?:(?!js)[^/]*) - re += stateChar === "!" ? "(?:(?!" : "(?:" - this.debug('plType %j %j', stateChar, re) - stateChar = false - continue - - case ")": - if (inClass || !patternListStack.length) { - re += "\\)" - continue - } - - clearStateChar() - hasMagic = true - re += ")" - plType = patternListStack.pop().type - // negation is (?:(?!js)[^/]*) - // The others are (?:) - switch (plType) { - case "!": - re += "[^/]*?)" - break - case "?": - case "+": - case "*": re += plType - case "@": break // the default anyway - } - continue - - case "|": - if (inClass || !patternListStack.length || escaping) { - re += "\\|" - escaping = false - continue - } - - clearStateChar() - re += "|" - continue - - // these are mostly the same in regexp and glob - case "[": - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += "\\" + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case "]": - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += "\\" + c - escaping = false - continue - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === "^" && inClass)) { - re += "\\" - } - - re += c - - } // switch - } // for - - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - var cs = pattern.substr(classStart + 1) - , sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + "\\[" + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - var pl - while (pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + 3) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = "\\" - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + "|" - }) - - this.debug("tail=%j\n %s", tail, tail) - var t = pl.type === "*" ? star - : pl.type === "?" ? qmark - : "\\" + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) - + t + "\\(" - + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += "\\\\" - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case ".": - case "[": - case "(": addPatternStart = true - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== "" && hasMagic) re = "(?=.)" + re - - if (addPatternStart) re = patternStart + re - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [ re, hasMagic ] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? "i" : "" - , regExp = new RegExp("^" + re + "$", flags) - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) return this.regexp = false - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - , flags = options.nocase ? "i" : "" - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === "string") ? regExpEscape(p) - : p._src - }).join("\\\/") - }).join("|") - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = "^(?:" + re + ")$" - - // can match anything, as long as it's not this. - if (this.negate) re = "^(?!" + re + ").*$" - - try { - return this.regexp = new RegExp(re, flags) - } catch (ex) { - return this.regexp = false - } -} - -minimatch.match = function (list, pattern, options) { - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = match -function match (f, partial) { - this.debug("match", f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === "" - - if (f === "/" && partial) return true - - var options = this.options - - // windows: need to use /, not \ - // On other platforms, \ is a valid (albeit bad) filename char. - if (platform === "win32") { - f = f.split("\\").join("/") - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - this.debug(this.pattern, "split", f) - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - this.debug(this.pattern, "set", set) - - var splitFile = path.basename(f.join("/")).split("/") - - for (var i = 0, l = set.length; i < l; i ++) { - var pattern = set[i], file = f - if (options.matchBase && pattern.length === 1) { - file = splitFile - } - var hit = this.matchOne(file, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - this.debug("matchOne", - { "this": this - , file: file - , pattern: pattern }) - - this.debug("matchOne", file.length, pattern.length) - - for ( var fi = 0 - , pi = 0 - , fl = file.length - , pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi ++, pi ++ ) { - - this.debug("matchOne loop") - var p = pattern[pi] - , f = file[fi] - - this.debug(pattern, p, f) - - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false - - if (p === GLOBSTAR) { - this.debug('GLOBSTAR', [pattern, p, f]) - - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - , pr = pi + 1 - if (pr === pl) { - this.debug('** at the end') - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for ( ; fi < fl; fi ++) { - if (file[fi] === "." || file[fi] === ".." || - (!options.dot && file[fi].charAt(0) === ".")) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - WHILE: while (fr < fl) { - var swallowee = file[fr] - - this.debug('\nglobstar while', - file, fr, pattern, pr, swallowee) - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee) - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === "." || swallowee === ".." || - (!options.dot && swallowee.charAt(0) === ".")) { - this.debug("dot detected!", file, fr, pattern, pr) - break WHILE - } - - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue') - fr ++ - } - } - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - this.debug("\n>>> no match, partial?", file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === "string") { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - this.debug("string match", p, f, hit) - } else { - hit = f.match(p) - this.debug("pattern match", p, f, hit) - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === "") - return emptyFileEnd - } - - // should be unreachable. - throw new Error("wtf?") -} - - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, "$1") -} - - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") -} - -})( typeof require === "function" ? require : null, - this, - typeof module === "object" ? module : null, - typeof process === "object" ? process.platform : "win32" - ) diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore deleted file mode 100644 index 07e6e472..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS deleted file mode 100644 index 4a0bc503..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS +++ /dev/null @@ -1,14 +0,0 @@ -# Authors, sorted by whether or not they are me -Isaac Z. Schlueter -Brian Cottingham -Carlos Brito Lage -Jesse Dailey -Kevin O'Hara -Marco Rogers -Mark Cavage -Marko Mikulicic -Nathan Rajlich -Satheesh Natesan -Trent Mick -ashleybrener -n4kz diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE deleted file mode 100644 index 05a40109..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -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/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md deleted file mode 100644 index 03ee0f98..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# lru cache - -A cache object that deletes the least-recently-used items. - -## Usage: - -```javascript -var LRU = require("lru-cache") - , options = { max: 500 - , length: function (n) { return n * 2 } - , dispose: function (key, n) { n.close() } - , maxAge: 1000 * 60 * 60 } - , cache = LRU(options) - , otherCache = LRU(50) // sets just the max size - -cache.set("key", "value") -cache.get("key") // "value" - -cache.reset() // empty the cache -``` - -If you put more stuff in it, then items will fall out. - -If you try to put an oversized thing in it, then it'll fall out right -away. - -## Options - -* `max` The maximum size of the cache, checked by applying the length - function to all values in the cache. Not setting this is kind of - silly, since that's the whole purpose of this lib, but it defaults - to `Infinity`. -* `maxAge` Maximum age in ms. Items are not pro-actively pruned out - as they age, but if you try to get an item that is too old, it'll - drop it and return undefined instead of giving it to you. -* `length` Function that is used to calculate the length of stored - items. If you're storing strings or buffers, then you probably want - to do something like `function(n){return n.length}`. The default is - `function(n){return 1}`, which is fine if you want to store `n` - like-sized things. -* `dispose` Function that is called on items when they are dropped - from the cache. This can be handy if you want to close file - descriptors or do other cleanup tasks when items are no longer - accessible. Called with `key, value`. It's called *before* - actually removing the item from the internal cache, so if you want - to immediately put it back in, you'll have to do that in a - `nextTick` or `setTimeout` callback or it won't do anything. -* `stale` By default, if you set a `maxAge`, it'll only actually pull - stale items out of the cache when you `get(key)`. (That is, it's - not pre-emptively doing a `setTimeout` or anything.) If you set - `stale:true`, it'll return the stale value before deleting it. If - you don't set this, then it'll return `undefined` when you try to - get a stale entry, as if it had already been deleted. - -## API - -* `set(key, value)` -* `get(key) => value` - - Both of these will update the "recently used"-ness of the key. - They do what you think. - -* `peek(key)` - - Returns the key value (or `undefined` if not found) without - updating the "recently used"-ness of the key. - - (If you find yourself using this a lot, you *might* be using the - wrong sort of data structure, but there are some use cases where - it's handy.) - -* `del(key)` - - Deletes a key out of the cache. - -* `reset()` - - Clear the cache entirely, throwing away all values. - -* `has(key)` - - Check if a key is in the cache, without updating the recent-ness - or deleting it for being stale. - -* `forEach(function(value,key,cache), [thisp])` - - Just like `Array.prototype.forEach`. Iterates over all the keys - in the cache, in order of recent-ness. (Ie, more recently used - items are iterated over first.) - -* `keys()` - - Return an array of the keys in the cache. - -* `values()` - - Return an array of the values in the cache. diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js deleted file mode 100644 index d1d13817..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js +++ /dev/null @@ -1,252 +0,0 @@ -;(function () { // closure for web browsers - -if (typeof module === 'object' && module.exports) { - module.exports = LRUCache -} else { - // just set the global for non-node platforms. - this.LRUCache = LRUCache -} - -function hOP (obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key) -} - -function naiveLength () { return 1 } - -function LRUCache (options) { - if (!(this instanceof LRUCache)) - return new LRUCache(options) - - if (typeof options === 'number') - options = { max: options } - - if (!options) - options = {} - - this._max = options.max - // Kind of weird to have a default max of Infinity, but oh well. - if (!this._max || !(typeof this._max === "number") || this._max <= 0 ) - this._max = Infinity - - this._lengthCalculator = options.length || naiveLength - if (typeof this._lengthCalculator !== "function") - this._lengthCalculator = naiveLength - - this._allowStale = options.stale || false - this._maxAge = options.maxAge || null - this._dispose = options.dispose - this.reset() -} - -// resize the cache when the max changes. -Object.defineProperty(LRUCache.prototype, "max", - { set : function (mL) { - if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity - this._max = mL - if (this._length > this._max) trim(this) - } - , get : function () { return this._max } - , enumerable : true - }) - -// resize the cache when the lengthCalculator changes. -Object.defineProperty(LRUCache.prototype, "lengthCalculator", - { set : function (lC) { - if (typeof lC !== "function") { - this._lengthCalculator = naiveLength - this._length = this._itemCount - for (var key in this._cache) { - this._cache[key].length = 1 - } - } else { - this._lengthCalculator = lC - this._length = 0 - for (var key in this._cache) { - this._cache[key].length = this._lengthCalculator(this._cache[key].value) - this._length += this._cache[key].length - } - } - - if (this._length > this._max) trim(this) - } - , get : function () { return this._lengthCalculator } - , enumerable : true - }) - -Object.defineProperty(LRUCache.prototype, "length", - { get : function () { return this._length } - , enumerable : true - }) - - -Object.defineProperty(LRUCache.prototype, "itemCount", - { get : function () { return this._itemCount } - , enumerable : true - }) - -LRUCache.prototype.forEach = function (fn, thisp) { - thisp = thisp || this - var i = 0; - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - i++ - var hit = this._lruList[k] - if (this._maxAge && (Date.now() - hit.now > this._maxAge)) { - del(this, hit) - if (!this._allowStale) hit = undefined - } - if (hit) { - fn.call(thisp, hit.value, hit.key, this) - } - } -} - -LRUCache.prototype.keys = function () { - var keys = new Array(this._itemCount) - var i = 0 - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - keys[i++] = hit.key - } - return keys -} - -LRUCache.prototype.values = function () { - var values = new Array(this._itemCount) - var i = 0 - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - values[i++] = hit.value - } - return values -} - -LRUCache.prototype.reset = function () { - if (this._dispose && this._cache) { - for (var k in this._cache) { - this._dispose(k, this._cache[k].value) - } - } - - this._cache = Object.create(null) // hash of items by key - this._lruList = Object.create(null) // list of items in order of use recency - this._mru = 0 // most recently used - this._lru = 0 // least recently used - this._length = 0 // number of items in the list - this._itemCount = 0 -} - -// Provided for debugging/dev purposes only. No promises whatsoever that -// this API stays stable. -LRUCache.prototype.dump = function () { - return this._cache -} - -LRUCache.prototype.dumpLru = function () { - return this._lruList -} - -LRUCache.prototype.set = function (key, value) { - if (hOP(this._cache, key)) { - // dispose of the old one before overwriting - if (this._dispose) this._dispose(key, this._cache[key].value) - if (this._maxAge) this._cache[key].now = Date.now() - this._cache[key].value = value - this.get(key) - return true - } - - var len = this._lengthCalculator(value) - var age = this._maxAge ? Date.now() : 0 - var hit = new Entry(key, value, this._mru++, len, age) - - // oversized objects fall out of cache automatically. - if (hit.length > this._max) { - if (this._dispose) this._dispose(key, value) - return false - } - - this._length += hit.length - this._lruList[hit.lu] = this._cache[key] = hit - this._itemCount ++ - - if (this._length > this._max) trim(this) - return true -} - -LRUCache.prototype.has = function (key) { - if (!hOP(this._cache, key)) return false - var hit = this._cache[key] - if (this._maxAge && (Date.now() - hit.now > this._maxAge)) { - return false - } - return true -} - -LRUCache.prototype.get = function (key) { - return get(this, key, true) -} - -LRUCache.prototype.peek = function (key) { - return get(this, key, false) -} - -LRUCache.prototype.pop = function () { - var hit = this._lruList[this._lru] - del(this, hit) - return hit || null -} - -LRUCache.prototype.del = function (key) { - del(this, this._cache[key]) -} - -function get (self, key, doUse) { - var hit = self._cache[key] - if (hit) { - if (self._maxAge && (Date.now() - hit.now > self._maxAge)) { - del(self, hit) - if (!self._allowStale) hit = undefined - } else { - if (doUse) use(self, hit) - } - if (hit) hit = hit.value - } - return hit -} - -function use (self, hit) { - shiftLU(self, hit) - hit.lu = self._mru ++ - self._lruList[hit.lu] = hit -} - -function trim (self) { - while (self._lru < self._mru && self._length > self._max) - del(self, self._lruList[self._lru]) -} - -function shiftLU (self, hit) { - delete self._lruList[ hit.lu ] - while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++ -} - -function del (self, hit) { - if (hit) { - if (self._dispose) self._dispose(hit.key, hit.value) - self._length -= hit.length - self._itemCount -- - delete self._cache[ hit.key ] - shiftLU(self, hit) - } -} - -// classy, since V8 prefers predictable objects. -function Entry (key, value, lu, length, now) { - this.key = key - this.value = value - this.lu = lu - this.length = length - this.now = now -} - -})() diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json deleted file mode 100644 index 4472725d..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "lru-cache", - "description": "A cache object that deletes the least-recently-used items.", - "version": "2.5.0", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "scripts": { - "test": "tap test --gc" - }, - "main": "lib/lru-cache.js", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-lru-cache.git" - }, - "devDependencies": { - "tap": "", - "weak": "" - }, - "license": { - "type": "MIT", - "url": "http://github.com/isaacs/node-lru-cache/raw/master/LICENSE" - }, - "readme": "# lru cache\n\nA cache object that deletes the least-recently-used items.\n\n## Usage:\n\n```javascript\nvar LRU = require(\"lru-cache\")\n , options = { max: 500\n , length: function (n) { return n * 2 }\n , dispose: function (key, n) { n.close() }\n , maxAge: 1000 * 60 * 60 }\n , cache = LRU(options)\n , otherCache = LRU(50) // sets just the max size\n\ncache.set(\"key\", \"value\")\ncache.get(\"key\") // \"value\"\n\ncache.reset() // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\n## Options\n\n* `max` The maximum size of the cache, checked by applying the length\n function to all values in the cache. Not setting this is kind of\n silly, since that's the whole purpose of this lib, but it defaults\n to `Infinity`.\n* `maxAge` Maximum age in ms. Items are not pro-actively pruned out\n as they age, but if you try to get an item that is too old, it'll\n drop it and return undefined instead of giving it to you.\n* `length` Function that is used to calculate the length of stored\n items. If you're storing strings or buffers, then you probably want\n to do something like `function(n){return n.length}`. The default is\n `function(n){return 1}`, which is fine if you want to store `n`\n like-sized things.\n* `dispose` Function that is called on items when they are dropped\n from the cache. This can be handy if you want to close file\n descriptors or do other cleanup tasks when items are no longer\n accessible. Called with `key, value`. It's called *before*\n actually removing the item from the internal cache, so if you want\n to immediately put it back in, you'll have to do that in a\n `nextTick` or `setTimeout` callback or it won't do anything.\n* `stale` By default, if you set a `maxAge`, it'll only actually pull\n stale items out of the cache when you `get(key)`. (That is, it's\n not pre-emptively doing a `setTimeout` or anything.) If you set\n `stale:true`, it'll return the stale value before deleting it. If\n you don't set this, then it'll return `undefined` when you try to\n get a stale entry, as if it had already been deleted.\n\n## API\n\n* `set(key, value)`\n* `get(key) => value`\n\n Both of these will update the \"recently used\"-ness of the key.\n They do what you think.\n\n* `peek(key)`\n\n Returns the key value (or `undefined` if not found) without\n updating the \"recently used\"-ness of the key.\n\n (If you find yourself using this a lot, you *might* be using the\n wrong sort of data structure, but there are some use cases where\n it's handy.)\n\n* `del(key)`\n\n Deletes a key out of the cache.\n\n* `reset()`\n\n Clear the cache entirely, throwing away all values.\n\n* `has(key)`\n\n Check if a key is in the cache, without updating the recent-ness\n or deleting it for being stale.\n\n* `forEach(function(value,key,cache), [thisp])`\n\n Just like `Array.prototype.forEach`. Iterates over all the keys\n in the cache, in order of recent-ness. (Ie, more recently used\n items are iterated over first.)\n\n* `keys()`\n\n Return an array of the keys in the cache.\n\n* `values()`\n\n Return an array of the values in the cache.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-lru-cache/issues" - }, - "homepage": "https://github.com/isaacs/node-lru-cache", - "_id": "lru-cache@2.5.0", - "_from": "lru-cache@2" -} diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js deleted file mode 100644 index f72697c4..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js +++ /dev/null @@ -1,369 +0,0 @@ -var test = require("tap").test - , LRU = require("../") - -test("basic", function (t) { - var cache = new LRU({max: 10}) - cache.set("key", "value") - t.equal(cache.get("key"), "value") - t.equal(cache.get("nada"), undefined) - t.equal(cache.length, 1) - t.equal(cache.max, 10) - t.end() -}) - -test("least recently set", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), "B") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("lru recently gotten", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - cache.get("a") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), undefined) - t.equal(cache.get("a"), "A") - t.end() -}) - -test("del", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.del("a") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("max", function (t) { - var cache = new LRU(3) - - // test changing the max, verify that the LRU items get dropped. - cache.max = 100 - for (var i = 0; i < 100; i ++) cache.set(i, i) - t.equal(cache.length, 100) - for (var i = 0; i < 100; i ++) { - t.equal(cache.get(i), i) - } - cache.max = 3 - t.equal(cache.length, 3) - for (var i = 0; i < 97; i ++) { - t.equal(cache.get(i), undefined) - } - for (var i = 98; i < 100; i ++) { - t.equal(cache.get(i), i) - } - - // now remove the max restriction, and try again. - cache.max = "hello" - for (var i = 0; i < 100; i ++) cache.set(i, i) - t.equal(cache.length, 100) - for (var i = 0; i < 100; i ++) { - t.equal(cache.get(i), i) - } - // should trigger an immediate resize - cache.max = 3 - t.equal(cache.length, 3) - for (var i = 0; i < 97; i ++) { - t.equal(cache.get(i), undefined) - } - for (var i = 98; i < 100; i ++) { - t.equal(cache.get(i), i) - } - t.end() -}) - -test("reset", function (t) { - var cache = new LRU(10) - cache.set("a", "A") - cache.set("b", "B") - cache.reset() - t.equal(cache.length, 0) - t.equal(cache.max, 10) - t.equal(cache.get("a"), undefined) - t.equal(cache.get("b"), undefined) - t.end() -}) - - -// Note: `.dump()` is a debugging tool only. No guarantees are made -// about the format/layout of the response. -test("dump", function (t) { - var cache = new LRU(10) - var d = cache.dump(); - t.equal(Object.keys(d).length, 0, "nothing in dump for empty cache") - cache.set("a", "A") - var d = cache.dump() // { a: { key: "a", value: "A", lu: 0 } } - t.ok(d.a) - t.equal(d.a.key, "a") - t.equal(d.a.value, "A") - t.equal(d.a.lu, 0) - - cache.set("b", "B") - cache.get("b") - d = cache.dump() - t.ok(d.b) - t.equal(d.b.key, "b") - t.equal(d.b.value, "B") - t.equal(d.b.lu, 2) - - t.end() -}) - - -test("basic with weighed length", function (t) { - var cache = new LRU({ - max: 100, - length: function (item) { return item.size } - }) - cache.set("key", {val: "value", size: 50}) - t.equal(cache.get("key").val, "value") - t.equal(cache.get("nada"), undefined) - t.equal(cache.lengthCalculator(cache.get("key")), 50) - t.equal(cache.length, 50) - t.equal(cache.max, 100) - t.end() -}) - - -test("weighed length item too large", function (t) { - var cache = new LRU({ - max: 10, - length: function (item) { return item.size } - }) - t.equal(cache.max, 10) - - // should fall out immediately - cache.set("key", {val: "value", size: 50}) - - t.equal(cache.length, 0) - t.equal(cache.get("key"), undefined) - t.end() -}) - -test("least recently set with weighed length", function (t) { - var cache = new LRU({ - max:8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - cache.set("d", "DDDD") - t.equal(cache.get("d"), "DDDD") - t.equal(cache.get("c"), "CCC") - t.equal(cache.get("b"), undefined) - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("lru recently gotten with weighed length", function (t) { - var cache = new LRU({ - max: 8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - cache.get("a") - cache.get("b") - cache.set("d", "DDDD") - t.equal(cache.get("c"), undefined) - t.equal(cache.get("d"), "DDDD") - t.equal(cache.get("b"), "BB") - t.equal(cache.get("a"), "A") - t.end() -}) - -test("set returns proper booleans", function(t) { - var cache = new LRU({ - max: 5, - length: function (item) { return item.length } - }) - - t.equal(cache.set("a", "A"), true) - - // should return false for max exceeded - t.equal(cache.set("b", "donuts"), false) - - t.equal(cache.set("b", "B"), true) - t.equal(cache.set("c", "CCCC"), true) - t.end() -}) - -test("drop the old items", function(t) { - var cache = new LRU({ - max: 5, - maxAge: 50 - }) - - cache.set("a", "A") - - setTimeout(function () { - cache.set("b", "b") - t.equal(cache.get("a"), "A") - }, 25) - - setTimeout(function () { - cache.set("c", "C") - // timed out - t.notOk(cache.get("a")) - }, 60) - - setTimeout(function () { - t.notOk(cache.get("b")) - t.equal(cache.get("c"), "C") - }, 90) - - setTimeout(function () { - t.notOk(cache.get("c")) - t.end() - }, 155) -}) - -test("disposal function", function(t) { - var disposed = false - var cache = new LRU({ - max: 1, - dispose: function (k, n) { - disposed = n - } - }) - - cache.set(1, 1) - cache.set(2, 2) - t.equal(disposed, 1) - cache.set(3, 3) - t.equal(disposed, 2) - cache.reset() - t.equal(disposed, 3) - t.end() -}) - -test("disposal function on too big of item", function(t) { - var disposed = false - var cache = new LRU({ - max: 1, - length: function (k) { - return k.length - }, - dispose: function (k, n) { - disposed = n - } - }) - var obj = [ 1, 2 ] - - t.equal(disposed, false) - cache.set("obj", obj) - t.equal(disposed, obj) - t.end() -}) - -test("has()", function(t) { - var cache = new LRU({ - max: 1, - maxAge: 10 - }) - - cache.set('foo', 'bar') - t.equal(cache.has('foo'), true) - cache.set('blu', 'baz') - t.equal(cache.has('foo'), false) - t.equal(cache.has('blu'), true) - setTimeout(function() { - t.equal(cache.has('blu'), false) - t.end() - }, 15) -}) - -test("stale", function(t) { - var cache = new LRU({ - maxAge: 10, - stale: true - }) - - cache.set('foo', 'bar') - t.equal(cache.get('foo'), 'bar') - t.equal(cache.has('foo'), true) - setTimeout(function() { - t.equal(cache.has('foo'), false) - t.equal(cache.get('foo'), 'bar') - t.equal(cache.get('foo'), undefined) - t.end() - }, 15) -}) - -test("lru update via set", function(t) { - var cache = LRU({ max: 2 }); - - cache.set('foo', 1); - cache.set('bar', 2); - cache.del('bar'); - cache.set('baz', 3); - cache.set('qux', 4); - - t.equal(cache.get('foo'), undefined) - t.equal(cache.get('bar'), undefined) - t.equal(cache.get('baz'), 3) - t.equal(cache.get('qux'), 4) - t.end() -}) - -test("least recently set w/ peek", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - t.equal(cache.peek("a"), "A") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), "B") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("pop the least used item", function (t) { - var cache = new LRU(3) - , last - - cache.set("a", "A") - cache.set("b", "B") - cache.set("c", "C") - - t.equal(cache.length, 3) - t.equal(cache.max, 3) - - // Ensure we pop a, c, b - cache.get("b", "B") - - last = cache.pop() - t.equal(last.key, "a") - t.equal(last.value, "A") - t.equal(cache.length, 2) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last.key, "c") - t.equal(last.value, "C") - t.equal(cache.length, 1) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last.key, "b") - t.equal(last.value, "B") - t.equal(cache.length, 0) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last, null) - t.equal(cache.length, 0) - t.equal(cache.max, 3) - - t.end() -}) diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js deleted file mode 100644 index eefb80d9..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js +++ /dev/null @@ -1,52 +0,0 @@ -var test = require('tap').test -var LRU = require('../') - -test('forEach', function (t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - var i = 9 - l.forEach(function (val, key, cache) { - t.equal(cache, l) - t.equal(key, i.toString()) - t.equal(val, i.toString(2)) - i -= 1 - }) - - // get in order of most recently used - l.get(6) - l.get(8) - - var order = [ 8, 6, 9, 7, 5 ] - var i = 0 - - l.forEach(function (val, key, cache) { - var j = order[i ++] - t.equal(cache, l) - t.equal(key, j.toString()) - t.equal(val, j.toString(2)) - }) - - t.end() -}) - -test('keys() and values()', function (t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - t.similar(l.keys(), ['9', '8', '7', '6', '5']) - t.similar(l.values(), ['1001', '1000', '111', '110', '101']) - - // get in order of most recently used - l.get(6) - l.get(8) - - t.similar(l.keys(), ['8', '6', '9', '7', '5']) - t.similar(l.values(), ['1000', '110', '1001', '111', '101']) - - t.end() -}) diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js deleted file mode 100644 index 7af45b02..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env node --expose_gc - -var weak = require('weak'); -var test = require('tap').test -var LRU = require('../') -var l = new LRU({ max: 10 }) -var refs = 0 -function X() { - refs ++ - weak(this, deref) -} - -function deref() { - refs -- -} - -test('no leaks', function (t) { - // fill up the cache - for (var i = 0; i < 100; i++) { - l.set(i, new X); - // throw some gets in there, too. - if (i % 2 === 0) - l.get(i / 2) - } - - gc() - - var start = process.memoryUsage() - - // capture the memory - var startRefs = refs - - // do it again, but more - for (var i = 0; i < 10000; i++) { - l.set(i, new X); - // throw some gets in there, too. - if (i % 2 === 0) - l.get(i / 2) - } - - gc() - - var end = process.memoryUsage() - t.equal(refs, startRefs, 'no leaky refs') - - console.error('start: %j\n' + - 'end: %j', start, end); - t.pass(); - t.end(); -}) diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE deleted file mode 100644 index 0c44ae71..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -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/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md deleted file mode 100644 index 7e365129..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# sigmund - -Quick and dirty signatures for Objects. - -This is like a much faster `deepEquals` comparison, which returns a -string key suitable for caches and the like. - -## Usage - -```javascript -function doSomething (someObj) { - var key = sigmund(someObj, maxDepth) // max depth defaults to 10 - var cached = cache.get(key) - if (cached) return cached) - - var result = expensiveCalculation(someObj) - cache.set(key, result) - return result -} -``` - -The resulting key will be as unique and reproducible as calling -`JSON.stringify` or `util.inspect` on the object, but is much faster. -In order to achieve this speed, some differences are glossed over. -For example, the object `{0:'foo'}` will be treated identically to the -array `['foo']`. - -Also, just as there is no way to summon the soul from the scribblings -of a cocain-addled psychoanalyst, there is no way to revive the object -from the signature string that sigmund gives you. In fact, it's -barely even readable. - -As with `sys.inspect` and `JSON.stringify`, larger objects will -produce larger signature strings. - -Because sigmund is a bit less strict than the more thorough -alternatives, the strings will be shorter, and also there is a -slightly higher chance for collisions. For example, these objects -have the same signature: - - var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} - var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} - -Like a good Freudian, sigmund is most effective when you already have -some understanding of what you're looking for. It can help you help -yourself, but you must be willing to do some work as well. - -Cycles are handled, and cyclical objects are silently omitted (though -the key is included in the signature output.) - -The second argument is the maximum depth, which defaults to 10, -because that is the maximum object traversal depth covered by most -insurance carriers. diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js deleted file mode 100644 index 5acfd6d9..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js +++ /dev/null @@ -1,283 +0,0 @@ -// different ways to id objects -// use a req/res pair, since it's crazy deep and cyclical - -// sparseFE10 and sigmund are usually pretty close, which is to be expected, -// since they are essentially the same algorithm, except that sigmund handles -// regular expression objects properly. - - -var http = require('http') -var util = require('util') -var sigmund = require('./sigmund.js') -var sreq, sres, creq, cres, test - -http.createServer(function (q, s) { - sreq = q - sres = s - sres.end('ok') - this.close(function () { setTimeout(function () { - start() - }, 200) }) -}).listen(1337, function () { - creq = http.get({ port: 1337 }) - creq.on('response', function (s) { cres = s }) -}) - -function start () { - test = [sreq, sres, creq, cres] - // test = sreq - // sreq.sres = sres - // sreq.creq = creq - // sreq.cres = cres - - for (var i in exports.compare) { - console.log(i) - var hash = exports.compare[i]() - console.log(hash) - console.log(hash.length) - console.log('') - } - - require('bench').runMain() -} - -function customWs (obj, md, d) { - d = d || 0 - var to = typeof obj - if (to === 'undefined' || to === 'function' || to === null) return '' - if (d > md || !obj || to !== 'object') return ('' + obj).replace(/[\n ]+/g, '') - - if (Array.isArray(obj)) { - return obj.map(function (i, _, __) { - return customWs(i, md, d + 1) - }).reduce(function (a, b) { return a + b }, '') - } - - var keys = Object.keys(obj) - return keys.map(function (k, _, __) { - return k + ':' + customWs(obj[k], md, d + 1) - }).reduce(function (a, b) { return a + b }, '') -} - -function custom (obj, md, d) { - d = d || 0 - var to = typeof obj - if (to === 'undefined' || to === 'function' || to === null) return '' - if (d > md || !obj || to !== 'object') return '' + obj - - if (Array.isArray(obj)) { - return obj.map(function (i, _, __) { - return custom(i, md, d + 1) - }).reduce(function (a, b) { return a + b }, '') - } - - var keys = Object.keys(obj) - return keys.map(function (k, _, __) { - return k + ':' + custom(obj[k], md, d + 1) - }).reduce(function (a, b) { return a + b }, '') -} - -function sparseFE2 (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - Object.keys(v).forEach(function (k, _, __) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') return - var to = typeof v[k] - if (to === 'function' || to === 'undefined') return - soFar += k + ':' - ch(v[k], depth + 1) - }) - soFar += '}' - } - ch(obj, 0) - return soFar -} - -function sparseFE (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - Object.keys(v).forEach(function (k, _, __) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') return - var to = typeof v[k] - if (to === 'function' || to === 'undefined') return - soFar += k - ch(v[k], depth + 1) - }) - } - ch(obj, 0) - return soFar -} - -function sparse (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - for (var k in v) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') continue - var to = typeof v[k] - if (to === 'function' || to === 'undefined') continue - soFar += k - ch(v[k], depth + 1) - } - } - ch(obj, 0) - return soFar -} - -function noCommas (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - for (var k in v) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') continue - var to = typeof v[k] - if (to === 'function' || to === 'undefined') continue - soFar += k + ':' - ch(v[k], depth + 1) - } - soFar += '}' - } - ch(obj, 0) - return soFar -} - - -function flatten (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - for (var k in v) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') continue - var to = typeof v[k] - if (to === 'function' || to === 'undefined') continue - soFar += k + ':' - ch(v[k], depth + 1) - soFar += ',' - } - soFar += '}' - } - ch(obj, 0) - return soFar -} - -exports.compare = -{ - // 'custom 2': function () { - // return custom(test, 2, 0) - // }, - // 'customWs 2': function () { - // return customWs(test, 2, 0) - // }, - 'JSON.stringify (guarded)': function () { - var seen = [] - return JSON.stringify(test, function (k, v) { - if (typeof v !== 'object' || !v) return v - if (seen.indexOf(v) !== -1) return undefined - seen.push(v) - return v - }) - }, - - 'flatten 10': function () { - return flatten(test, 10) - }, - - // 'flattenFE 10': function () { - // return flattenFE(test, 10) - // }, - - 'noCommas 10': function () { - return noCommas(test, 10) - }, - - 'sparse 10': function () { - return sparse(test, 10) - }, - - 'sparseFE 10': function () { - return sparseFE(test, 10) - }, - - 'sparseFE2 10': function () { - return sparseFE2(test, 10) - }, - - sigmund: function() { - return sigmund(test, 10) - }, - - - // 'util.inspect 1': function () { - // return util.inspect(test, false, 1, false) - // }, - // 'util.inspect undefined': function () { - // util.inspect(test) - // }, - // 'util.inspect 2': function () { - // util.inspect(test, false, 2, false) - // }, - // 'util.inspect 3': function () { - // util.inspect(test, false, 3, false) - // }, - // 'util.inspect 4': function () { - // util.inspect(test, false, 4, false) - // }, - // 'util.inspect Infinity': function () { - // util.inspect(test, false, Infinity, false) - // } -} - -/** results -**/ diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json deleted file mode 100644 index cb7e2bd4..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "sigmund", - "version": "1.0.0", - "description": "Quick and dirty signatures for Objects.", - "main": "sigmund.js", - "directories": { - "test": "test" - }, - "dependencies": {}, - "devDependencies": { - "tap": "~0.3.0" - }, - "scripts": { - "test": "tap test/*.js", - "bench": "node bench.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/sigmund" - }, - "keywords": [ - "object", - "signature", - "key", - "data", - "psychoanalysis" - ], - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "license": "BSD", - "readme": "# sigmund\n\nQuick and dirty signatures for Objects.\n\nThis is like a much faster `deepEquals` comparison, which returns a\nstring key suitable for caches and the like.\n\n## Usage\n\n```javascript\nfunction doSomething (someObj) {\n var key = sigmund(someObj, maxDepth) // max depth defaults to 10\n var cached = cache.get(key)\n if (cached) return cached)\n\n var result = expensiveCalculation(someObj)\n cache.set(key, result)\n return result\n}\n```\n\nThe resulting key will be as unique and reproducible as calling\n`JSON.stringify` or `util.inspect` on the object, but is much faster.\nIn order to achieve this speed, some differences are glossed over.\nFor example, the object `{0:'foo'}` will be treated identically to the\narray `['foo']`.\n\nAlso, just as there is no way to summon the soul from the scribblings\nof a cocain-addled psychoanalyst, there is no way to revive the object\nfrom the signature string that sigmund gives you. In fact, it's\nbarely even readable.\n\nAs with `sys.inspect` and `JSON.stringify`, larger objects will\nproduce larger signature strings.\n\nBecause sigmund is a bit less strict than the more thorough\nalternatives, the strings will be shorter, and also there is a\nslightly higher chance for collisions. For example, these objects\nhave the same signature:\n\n var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}\n var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}\n\nLike a good Freudian, sigmund is most effective when you already have\nsome understanding of what you're looking for. It can help you help\nyourself, but you must be willing to do some work as well.\n\nCycles are handled, and cyclical objects are silently omitted (though\nthe key is included in the signature output.)\n\nThe second argument is the maximum depth, which defaults to 10,\nbecause that is the maximum object traversal depth covered by most\ninsurance carriers.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/sigmund/issues" - }, - "homepage": "https://github.com/isaacs/sigmund", - "_id": "sigmund@1.0.0", - "_from": "sigmund@~1.0.0" -} diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js deleted file mode 100644 index 82c7ab8c..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js +++ /dev/null @@ -1,39 +0,0 @@ -module.exports = sigmund -function sigmund (subject, maxSessions) { - maxSessions = maxSessions || 10; - var notes = []; - var analysis = ''; - var RE = RegExp; - - function psychoAnalyze (subject, session) { - if (session > maxSessions) return; - - if (typeof subject === 'function' || - typeof subject === 'undefined') { - return; - } - - if (typeof subject !== 'object' || !subject || - (subject instanceof RE)) { - analysis += subject; - return; - } - - if (notes.indexOf(subject) !== -1 || session === maxSessions) return; - - notes.push(subject); - analysis += '{'; - Object.keys(subject).forEach(function (issue, _, __) { - // pseudo-private values. skip those. - if (issue.charAt(0) === '_') return; - var to = typeof subject[issue]; - if (to === 'function' || to === 'undefined') return; - analysis += issue; - psychoAnalyze(subject[issue], session + 1); - }); - } - psychoAnalyze(subject, 0); - return analysis; -} - -// vim: set softtabstop=4 shiftwidth=4: diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js deleted file mode 100644 index 50c53a13..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js +++ /dev/null @@ -1,24 +0,0 @@ -var test = require('tap').test -var sigmund = require('../sigmund.js') - - -// occasionally there are duplicates -// that's an acceptable edge-case. JSON.stringify and util.inspect -// have some collision potential as well, though less, and collision -// detection is expensive. -var hash = '{abc/def/g{0h1i2{jkl' -var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} -var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} - -var obj3 = JSON.parse(JSON.stringify(obj1)) -obj3.c = /def/ -obj3.g[2].cycle = obj3 -var cycleHash = '{abc/def/g{0h1i2{jklcycle' - -test('basic', function (t) { - t.equal(sigmund(obj1), hash) - t.equal(sigmund(obj2), hash) - t.equal(sigmund(obj3), cycleHash) - t.end() -}) - diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/package.json b/node_modules/mocha/node_modules/glob/node_modules/minimatch/package.json deleted file mode 100644 index f8f545aa..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "minimatch", - "description": "a glob matcher in javascript", - "version": "0.2.14", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "main": "minimatch.js", - "scripts": { - "test": "tap test/*.js" - }, - "engines": { - "node": "*" - }, - "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" - }, - "devDependencies": { - "tap": "" - }, - "license": { - "type": "MIT", - "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE" - }, - "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nEventually, it will replace the C binding in node-glob.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\nminimatch(\"bar.foo\", \"*.+(bar|foo)\", { debug: true }) // true, and noisy!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n Each row in the\n array corresponds to a brace-expanded pattern. Each item in the row\n corresponds to a single path-part. For example, the pattern\n `{a,b/c}/d` would expand to a set of patterns like:\n\n [ [ a, d ]\n , [ b, c, d ] ]\n\n If a portion of the pattern doesn't have any \"magic\" in it\n (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n will be left as a string rather than converted to a regular\n expression.\n\n* `regexp` Created by the `makeRe` method. A single regular expression\n expressing the entire pattern. This is useful in cases where you wish\n to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n filename, and match it against a single row in the `regExpSet`. This\n method is mainly for internal use, but is exposed so that it can be\n used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items. So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export. Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`. Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob. If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself. When set, an empty list is returned if there are\nno matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes. For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/minimatch/issues" - }, - "homepage": "https://github.com/isaacs/minimatch", - "_id": "minimatch@0.2.14", - "_from": "minimatch@~0.2.11" -} diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/basic.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/basic.js deleted file mode 100644 index ae7ac73c..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/basic.js +++ /dev/null @@ -1,399 +0,0 @@ -// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test -// -// TODO: Some of these tests do very bad things with backslashes, and will -// most likely fail badly on windows. They should probably be skipped. - -var tap = require("tap") - , globalBefore = Object.keys(global) - , mm = require("../") - , files = [ "a", "b", "c", "d", "abc" - , "abd", "abe", "bb", "bcd" - , "ca", "cb", "dd", "de" - , "bdir/", "bdir/cfile"] - , next = files.concat([ "a-b", "aXb" - , ".x", ".y" ]) - - -var patterns = - [ "http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test" - , ["a*", ["a", "abc", "abd", "abe"]] - , ["X*", ["X*"], {nonull: true}] - - // allow null glob expansion - , ["X*", []] - - // isaacs: Slightly different than bash/sh/ksh - // \\* is not un-escaped to literal "*" in a failed match, - // but it does make it get treated as a literal star - , ["\\*", ["\\*"], {nonull: true}] - , ["\\**", ["\\**"], {nonull: true}] - , ["\\*\\*", ["\\*\\*"], {nonull: true}] - - , ["b*/", ["bdir/"]] - , ["c*", ["c", "ca", "cb"]] - , ["**", files] - - , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}] - , ["s/\\..*//", ["s/\\..*//"], {nonull: true}] - - , "legendary larry crashes bashes" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}] - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}] - - , "character classes" - , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] - , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", - "bdir/", "ca", "cb", "dd", "de"]] - , ["a*[^c]", ["abd", "abe"]] - , function () { files.push("a-b", "aXb") } - , ["a[X-]b", ["a-b", "aXb"]] - , function () { files.push(".x", ".y") } - , ["[^a-c]*", ["d", "dd", "de"]] - , function () { files.push("a*b/", "a*b/ooo") } - , ["a\\*b/*", ["a*b/ooo"]] - , ["a\\*?/*", ["a*b/ooo"]] - , ["*\\\\!*", [], {null: true}, ["echo !7"]] - , ["*\\!*", ["echo !7"], null, ["echo !7"]] - , ["*.\\*", ["r.*"], null, ["r.*"]] - , ["a[b]c", ["abc"]] - , ["a[\\b]c", ["abc"]] - , ["a?c", ["abc"]] - , ["a\\*c", [], {null: true}, ["abc"]] - , ["", [""], { null: true }, [""]] - - , "http://www.opensource.apple.com/source/bash/bash-23/" + - "bash/tests/glob-test" - , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } - , ["*/man*/bash.*", ["man/man1/bash.1"]] - , ["man/man1/bash.1", ["man/man1/bash.1"]] - , ["a***c", ["abc"], null, ["abc"]] - , ["a*****?c", ["abc"], null, ["abc"]] - , ["?*****??", ["abc"], null, ["abc"]] - , ["*****??", ["abc"], null, ["abc"]] - , ["?*****?c", ["abc"], null, ["abc"]] - , ["?***?****c", ["abc"], null, ["abc"]] - , ["?***?****?", ["abc"], null, ["abc"]] - , ["?***?****", ["abc"], null, ["abc"]] - , ["*******c", ["abc"], null, ["abc"]] - , ["*******?", ["abc"], null, ["abc"]] - , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["[-abc]", ["-"], null, ["-"]] - , ["[abc-]", ["-"], null, ["-"]] - , ["\\", ["\\"], null, ["\\"]] - , ["[\\\\]", ["\\"], null, ["\\"]] - , ["[[]", ["["], null, ["["]] - , ["[", ["["], null, ["["]] - , ["[*", ["[abc"], null, ["[abc"]] - , "a right bracket shall lose its special meaning and\n" + - "represent itself in a bracket expression if it occurs\n" + - "first in the list. -- POSIX.2 2.8.3.2" - , ["[]]", ["]"], null, ["]"]] - , ["[]-]", ["]"], null, ["]"]] - , ["[a-\z]", ["p"], null, ["p"]] - , ["??**********?****?", [], { null: true }, ["abc"]] - , ["??**********?****c", [], { null: true }, ["abc"]] - , ["?************c****?****", [], { null: true }, ["abc"]] - , ["*c*?**", [], { null: true }, ["abc"]] - , ["a*****c*?**", [], { null: true }, ["abc"]] - , ["a********???*******", [], { null: true }, ["abc"]] - , ["[]", [], { null: true }, ["a"]] - , ["[abc", [], { null: true }, ["["]] - - , "nocase tests" - , ["XYZ", ["xYz"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["ab*", ["ABC"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - - // [ pattern, [matches], MM opts, files, TAP opts] - , "onestar/twostar" - , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]] - , ["{/?,*}", ["/a", "bb"], {null: true} - , ["/a", "/b/b", "/a/b/c", "bb"]] - - , "dots should not match unless requested" - , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]] - - // .. and . can only match patterns starting with ., - // even when options.dot is set. - , function () { - files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"] - } - , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}] - , ["a/*/b", ["a/c/b"], {dot:false}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}] - - - // this also tests that changing the options needs - // to change the cache key, even if the pattern is - // the same! - , ["**", ["a/b","a/.d",".a/.d"], { dot: true } - , [ ".a/.d", "a/.d", "a/b"]] - - , "paren sets cannot contain slashes" - , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]] - - // brace sets trump all else. - // - // invalid glob pattern. fails on bash4 and bsdglob. - // however, in this implementation, it's easier just - // to do the intuitive thing, and let brace-expansion - // actually come before parsing any extglob patterns, - // like the documentation seems to say. - // - // XXX: if anyone complains about this, either fix it - // or tell them to grow up and stop complaining. - // - // bash/bsdglob says this: - // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]] - // but we do this instead: - , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]] - - // test partial parsing in the presence of comment/negation chars - , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]] - , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]] - - // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped. - , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g" - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"] - , {} - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]] - - - // crazy nested {,,} and *(||) tests. - , function () { - files = [ "a", "b", "c", "d" - , "ab", "ac", "ad" - , "bc", "cb" - , "bc,d", "c,db", "c,d" - , "d)", "(b|c", "*(b|c" - , "b|c", "b|cc", "cb|c" - , "x(a|b|c)", "x(a|c)" - , "(a|b|c)", "(a|c)"] - } - , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]] - , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]] - // a - // *(b|c) - // *(b|d) - , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]] - , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]] - - - // test various flag settings. - , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"] - , { noext: true } ] - , ["a?b", ["x/y/acb", "acb/"], {matchBase: true} - , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ] - , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]] - - - // begin channelling Boole and deMorgan... - , "negation tests" - , function () { - files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"] - } - - // anything that is NOT a* matches. - , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]] - - // anything that IS !a* matches. - , ["!a*", ["!ab", "!abc"], {nonegate: true}] - - // anything that IS a* matches - , ["!!a*", ["a!b"]] - - // anything that is NOT !a* matches - , ["!\\!a*", ["a!b", "d", "e", "\\!a"]] - - // negation nestled within a pattern - , function () { - files = [ "foo.js" - , "foo.bar" - // can't match this one without negative lookbehind. - , "foo.js.js" - , "blar.js" - , "foo." - , "boo.js.boo" ] - } - , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ] - - // https://github.com/isaacs/minimatch/issues/5 - , function () { - files = [ 'a/b/.x/c' - , 'a/b/.x/c/d' - , 'a/b/.x/c/d/e' - , 'a/b/.x' - , 'a/b/.x/' - , 'a/.x/b' - , '.x' - , '.x/' - , '.x/a' - , '.x/a/b' - , 'a/.x/b/.x/c' - , '.x/.x' ] - } - , ["**/.x/**", [ '.x/' - , '.x/a' - , '.x/a/b' - , 'a/.x/b' - , 'a/b/.x/' - , 'a/b/.x/c' - , 'a/b/.x/c/d' - , 'a/b/.x/c/d/e' ] ] - - ] - -var regexps = - [ '/^(?:(?=.)a[^/]*?)$/', - '/^(?:(?=.)X[^/]*?)$/', - '/^(?:(?=.)X[^/]*?)$/', - '/^(?:\\*)$/', - '/^(?:(?=.)\\*[^/]*?)$/', - '/^(?:\\*\\*)$/', - '/^(?:(?=.)b[^/]*?\\/)$/', - '/^(?:(?=.)c[^/]*?)$/', - '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/', - '/^(?:\\.\\.\\/(?!\\.)(?=.)[^/]*?\\/)$/', - '/^(?:s\\/(?=.)\\.\\.[^/]*?\\/)$/', - '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/1\\/)$/', - '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/\u0001\\/)$/', - '/^(?:(?!\\.)(?=.)[a-c]b[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[a-y][^/]*?[^c])$/', - '/^(?:(?=.)a[^/]*?[^c])$/', - '/^(?:(?=.)a[X-]b)$/', - '/^(?:(?!\\.)(?=.)[^a-c][^/]*?)$/', - '/^(?:a\\*b\\/(?!\\.)(?=.)[^/]*?)$/', - '/^(?:(?=.)a\\*[^/]\\/(?!\\.)(?=.)[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\\\\\![^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\![^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\.\\*)$/', - '/^(?:(?=.)a[b]c)$/', - '/^(?:(?=.)a[b]c)$/', - '/^(?:(?=.)a[^/]c)$/', - '/^(?:a\\*c)$/', - 'false', - '/^(?:(?!\\.)(?=.)[^/]*?\\/(?=.)man[^/]*?\\/(?=.)bash\\.[^/]*?)$/', - '/^(?:man\\/man1\\/bash\\.1)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?c)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/', - '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c)$/', - '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', - '/^(?:(?=.)a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[-abc])$/', - '/^(?:(?!\\.)(?=.)[abc-])$/', - '/^(?:\\\\)$/', - '/^(?:(?!\\.)(?=.)[\\\\])$/', - '/^(?:(?!\\.)(?=.)[\\[])$/', - '/^(?:\\[)$/', - '/^(?:(?=.)\\[(?!\\.)(?=.)[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[\\]])$/', - '/^(?:(?!\\.)(?=.)[\\]-])$/', - '/^(?:(?!\\.)(?=.)[a-z])$/', - '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', - '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/', - '/^(?:\\[\\])$/', - '/^(?:\\[abc)$/', - '/^(?:(?=.)XYZ)$/i', - '/^(?:(?=.)ab[^/]*?)$/i', - '/^(?:(?!\\.)(?=.)[ia][^/][ck])$/i', - '/^(?:\\/(?!\\.)(?=.)[^/]*?|(?!\\.)(?=.)[^/]*?)$/', - '/^(?:\\/(?!\\.)(?=.)[^/]|(?!\\.)(?=.)[^/]*?)$/', - '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/', - '/^(?:a\\/(?!(?:^|\\/)\\.{1,2}(?:$|\\/))(?=.)[^/]*?\\/b)$/', - '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/', - '/^(?:a\\/(?!\\.)(?=.)[^/]*?\\/b)$/', - '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/', - '/^(?:(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\/b\\))$/', - '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/', - '/^(?:(?=.)\\[(?=.)\\!a[^/]*?)$/', - '/^(?:(?=.)\\[(?=.)#a[^/]*?)$/', - '/^(?:(?=.)\\+\\(a\\|[^/]*?\\|c\\\\\\\\\\|d\\\\\\\\\\|e\\\\\\\\\\\\\\\\\\|f\\\\\\\\\\\\\\\\\\|g)$/', - '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/', - '/^(?:a|(?!\\.)(?=.)[^/]*?\\(b\\|c|d\\))$/', - '/^(?:a|(?!\\.)(?=.)(?:b|c)*|(?!\\.)(?=.)(?:b|d)*)$/', - '/^(?:(?!\\.)(?=.)(?:a|b|c)*|(?!\\.)(?=.)(?:a|c)*)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\|b\\|c\\)|(?!\\.)(?=.)[^/]*?\\(a\\|c\\))$/', - '/^(?:(?=.)a[^/]b)$/', - '/^(?:(?=.)#[^/]*?)$/', - '/^(?!^(?:(?=.)a[^/]*?)$).*$/', - '/^(?:(?=.)\\!a[^/]*?)$/', - '/^(?:(?=.)a[^/]*?)$/', - '/^(?!^(?:(?=.)\\!a[^/]*?)$).*$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\.(?:(?!js)[^/]*?))$/', - '/^(?:(?:(?!(?:\\/|^)\\.).)*?\\/\\.x\\/(?:(?!(?:\\/|^)\\.).)*?)$/' ] -var re = 0; - -tap.test("basic tests", function (t) { - var start = Date.now() - - // [ pattern, [matches], MM opts, files, TAP opts] - patterns.forEach(function (c) { - if (typeof c === "function") return c() - if (typeof c === "string") return t.comment(c) - - var pattern = c[0] - , expect = c[1].sort(alpha) - , options = c[2] || {} - , f = c[3] || files - , tapOpts = c[4] || {} - - // options.debug = true - var m = new mm.Minimatch(pattern, options) - var r = m.makeRe() - var expectRe = regexps[re++] - tapOpts.re = String(r) || JSON.stringify(r) - tapOpts.files = JSON.stringify(f) - tapOpts.pattern = pattern - tapOpts.set = m.set - tapOpts.negated = m.negate - - var actual = mm.match(f, pattern, options) - actual.sort(alpha) - - t.equivalent( actual, expect - , JSON.stringify(pattern) + " " + JSON.stringify(expect) - , tapOpts ) - - t.equal(tapOpts.re, expectRe, tapOpts) - }) - - t.comment("time=" + (Date.now() - start) + "ms") - t.end() -}) - -tap.test("global leak test", function (t) { - var globalAfter = Object.keys(global) - t.equivalent(globalAfter, globalBefore, "no new globals, please") - t.end() -}) - -function alpha (a, b) { - return a > b ? 1 : -1 -} diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/brace-expand.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/brace-expand.js deleted file mode 100644 index 7ee278a2..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/brace-expand.js +++ /dev/null @@ -1,33 +0,0 @@ -var tap = require("tap") - , minimatch = require("../") - -tap.test("brace expansion", function (t) { - // [ pattern, [expanded] ] - ; [ [ "a{b,c{d,e},{f,g}h}x{y,z}" - , [ "abxy" - , "abxz" - , "acdxy" - , "acdxz" - , "acexy" - , "acexz" - , "afhxy" - , "afhxz" - , "aghxy" - , "aghxz" ] ] - , [ "a{1..5}b" - , [ "a1b" - , "a2b" - , "a3b" - , "a4b" - , "a5b" ] ] - , [ "a{b}c", ["a{b}c"] ] - ].forEach(function (tc) { - var p = tc[0] - , expect = tc[1] - t.equivalent(minimatch.braceExpand(p), expect, p) - }) - console.error("ending") - t.end() -}) - - diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/caching.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/caching.js deleted file mode 100644 index 0fec4b0f..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/caching.js +++ /dev/null @@ -1,14 +0,0 @@ -var Minimatch = require("../minimatch.js").Minimatch -var tap = require("tap") -tap.test("cache test", function (t) { - var mm1 = new Minimatch("a?b") - var mm2 = new Minimatch("a?b") - t.equal(mm1, mm2, "should get the same object") - // the lru should drop it after 100 entries - for (var i = 0; i < 100; i ++) { - new Minimatch("a"+i) - } - mm2 = new Minimatch("a?b") - t.notEqual(mm1, mm2, "cache should have dropped") - t.end() -}) diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/defaults.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/defaults.js deleted file mode 100644 index 25f1f601..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/defaults.js +++ /dev/null @@ -1,274 +0,0 @@ -// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test -// -// TODO: Some of these tests do very bad things with backslashes, and will -// most likely fail badly on windows. They should probably be skipped. - -var tap = require("tap") - , globalBefore = Object.keys(global) - , mm = require("../") - , files = [ "a", "b", "c", "d", "abc" - , "abd", "abe", "bb", "bcd" - , "ca", "cb", "dd", "de" - , "bdir/", "bdir/cfile"] - , next = files.concat([ "a-b", "aXb" - , ".x", ".y" ]) - -tap.test("basic tests", function (t) { - var start = Date.now() - - // [ pattern, [matches], MM opts, files, TAP opts] - ; [ "http://www.bashcookbook.com/bashinfo" + - "/source/bash-1.14.7/tests/glob-test" - , ["a*", ["a", "abc", "abd", "abe"]] - , ["X*", ["X*"], {nonull: true}] - - // allow null glob expansion - , ["X*", []] - - // isaacs: Slightly different than bash/sh/ksh - // \\* is not un-escaped to literal "*" in a failed match, - // but it does make it get treated as a literal star - , ["\\*", ["\\*"], {nonull: true}] - , ["\\**", ["\\**"], {nonull: true}] - , ["\\*\\*", ["\\*\\*"], {nonull: true}] - - , ["b*/", ["bdir/"]] - , ["c*", ["c", "ca", "cb"]] - , ["**", files] - - , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}] - , ["s/\\..*//", ["s/\\..*//"], {nonull: true}] - - , "legendary larry crashes bashes" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}] - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}] - - , "character classes" - , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] - , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", - "bdir/", "ca", "cb", "dd", "de"]] - , ["a*[^c]", ["abd", "abe"]] - , function () { files.push("a-b", "aXb") } - , ["a[X-]b", ["a-b", "aXb"]] - , function () { files.push(".x", ".y") } - , ["[^a-c]*", ["d", "dd", "de"]] - , function () { files.push("a*b/", "a*b/ooo") } - , ["a\\*b/*", ["a*b/ooo"]] - , ["a\\*?/*", ["a*b/ooo"]] - , ["*\\\\!*", [], {null: true}, ["echo !7"]] - , ["*\\!*", ["echo !7"], null, ["echo !7"]] - , ["*.\\*", ["r.*"], null, ["r.*"]] - , ["a[b]c", ["abc"]] - , ["a[\\b]c", ["abc"]] - , ["a?c", ["abc"]] - , ["a\\*c", [], {null: true}, ["abc"]] - , ["", [""], { null: true }, [""]] - - , "http://www.opensource.apple.com/source/bash/bash-23/" + - "bash/tests/glob-test" - , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } - , ["*/man*/bash.*", ["man/man1/bash.1"]] - , ["man/man1/bash.1", ["man/man1/bash.1"]] - , ["a***c", ["abc"], null, ["abc"]] - , ["a*****?c", ["abc"], null, ["abc"]] - , ["?*****??", ["abc"], null, ["abc"]] - , ["*****??", ["abc"], null, ["abc"]] - , ["?*****?c", ["abc"], null, ["abc"]] - , ["?***?****c", ["abc"], null, ["abc"]] - , ["?***?****?", ["abc"], null, ["abc"]] - , ["?***?****", ["abc"], null, ["abc"]] - , ["*******c", ["abc"], null, ["abc"]] - , ["*******?", ["abc"], null, ["abc"]] - , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["[-abc]", ["-"], null, ["-"]] - , ["[abc-]", ["-"], null, ["-"]] - , ["\\", ["\\"], null, ["\\"]] - , ["[\\\\]", ["\\"], null, ["\\"]] - , ["[[]", ["["], null, ["["]] - , ["[", ["["], null, ["["]] - , ["[*", ["[abc"], null, ["[abc"]] - , "a right bracket shall lose its special meaning and\n" + - "represent itself in a bracket expression if it occurs\n" + - "first in the list. -- POSIX.2 2.8.3.2" - , ["[]]", ["]"], null, ["]"]] - , ["[]-]", ["]"], null, ["]"]] - , ["[a-\z]", ["p"], null, ["p"]] - , ["??**********?****?", [], { null: true }, ["abc"]] - , ["??**********?****c", [], { null: true }, ["abc"]] - , ["?************c****?****", [], { null: true }, ["abc"]] - , ["*c*?**", [], { null: true }, ["abc"]] - , ["a*****c*?**", [], { null: true }, ["abc"]] - , ["a********???*******", [], { null: true }, ["abc"]] - , ["[]", [], { null: true }, ["a"]] - , ["[abc", [], { null: true }, ["["]] - - , "nocase tests" - , ["XYZ", ["xYz"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["ab*", ["ABC"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - - // [ pattern, [matches], MM opts, files, TAP opts] - , "onestar/twostar" - , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]] - , ["{/?,*}", ["/a", "bb"], {null: true} - , ["/a", "/b/b", "/a/b/c", "bb"]] - - , "dots should not match unless requested" - , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]] - - // .. and . can only match patterns starting with ., - // even when options.dot is set. - , function () { - files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"] - } - , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}] - , ["a/*/b", ["a/c/b"], {dot:false}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}] - - - // this also tests that changing the options needs - // to change the cache key, even if the pattern is - // the same! - , ["**", ["a/b","a/.d",".a/.d"], { dot: true } - , [ ".a/.d", "a/.d", "a/b"]] - - , "paren sets cannot contain slashes" - , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]] - - // brace sets trump all else. - // - // invalid glob pattern. fails on bash4 and bsdglob. - // however, in this implementation, it's easier just - // to do the intuitive thing, and let brace-expansion - // actually come before parsing any extglob patterns, - // like the documentation seems to say. - // - // XXX: if anyone complains about this, either fix it - // or tell them to grow up and stop complaining. - // - // bash/bsdglob says this: - // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]] - // but we do this instead: - , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]] - - // test partial parsing in the presence of comment/negation chars - , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]] - , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]] - - // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped. - , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g" - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"] - , {} - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]] - - - // crazy nested {,,} and *(||) tests. - , function () { - files = [ "a", "b", "c", "d" - , "ab", "ac", "ad" - , "bc", "cb" - , "bc,d", "c,db", "c,d" - , "d)", "(b|c", "*(b|c" - , "b|c", "b|cc", "cb|c" - , "x(a|b|c)", "x(a|c)" - , "(a|b|c)", "(a|c)"] - } - , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]] - , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]] - // a - // *(b|c) - // *(b|d) - , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]] - , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]] - - - // test various flag settings. - , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"] - , { noext: true } ] - , ["a?b", ["x/y/acb", "acb/"], {matchBase: true} - , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ] - , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]] - - - // begin channelling Boole and deMorgan... - , "negation tests" - , function () { - files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"] - } - - // anything that is NOT a* matches. - , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]] - - // anything that IS !a* matches. - , ["!a*", ["!ab", "!abc"], {nonegate: true}] - - // anything that IS a* matches - , ["!!a*", ["a!b"]] - - // anything that is NOT !a* matches - , ["!\\!a*", ["a!b", "d", "e", "\\!a"]] - - // negation nestled within a pattern - , function () { - files = [ "foo.js" - , "foo.bar" - // can't match this one without negative lookbehind. - , "foo.js.js" - , "blar.js" - , "foo." - , "boo.js.boo" ] - } - , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ] - - ].forEach(function (c) { - if (typeof c === "function") return c() - if (typeof c === "string") return t.comment(c) - - var pattern = c[0] - , expect = c[1].sort(alpha) - , options = c[2] || {} - , f = c[3] || files - , tapOpts = c[4] || {} - - // options.debug = true - var Class = mm.defaults(options).Minimatch - var m = new Class(pattern, {}) - var r = m.makeRe() - tapOpts.re = String(r) || JSON.stringify(r) - tapOpts.files = JSON.stringify(f) - tapOpts.pattern = pattern - tapOpts.set = m.set - tapOpts.negated = m.negate - - var actual = mm.match(f, pattern, options) - actual.sort(alpha) - - t.equivalent( actual, expect - , JSON.stringify(pattern) + " " + JSON.stringify(expect) - , tapOpts ) - }) - - t.comment("time=" + (Date.now() - start) + "ms") - t.end() -}) - -tap.test("global leak test", function (t) { - var globalAfter = Object.keys(global) - t.equivalent(globalAfter, globalBefore, "no new globals, please") - t.end() -}) - -function alpha (a, b) { - return a > b ? 1 : -1 -} diff --git a/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js b/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js deleted file mode 100644 index 6676e262..00000000 --- a/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js +++ /dev/null @@ -1,8 +0,0 @@ -var test = require('tap').test -var minimatch = require('../') - -test('extglob ending with statechar', function(t) { - t.notOk(minimatch('ax', 'a?(b*)')) - t.ok(minimatch('ax', '?(a*|b)')) - t.end() -}) diff --git a/node_modules/mocha/node_modules/glob/package.json b/node_modules/mocha/node_modules/glob/package.json deleted file mode 100644 index bfbbbcca..00000000 --- a/node_modules/mocha/node_modules/glob/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "glob", - "description": "a little globber", - "version": "3.2.3", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-glob.git" - }, - "main": "glob.js", - "engines": { - "node": "*" - }, - "dependencies": { - "minimatch": "~0.2.11", - "graceful-fs": "~2.0.0", - "inherits": "2" - }, - "devDependencies": { - "tap": "~0.4.0", - "mkdirp": "0", - "rimraf": "1" - }, - "scripts": { - "test": "tap test/*.js" - }, - "license": "BSD", - "readme": "# Glob\n\nMatch files using the patterns the shell uses, like stars and stuff.\n\nThis is a glob implementation in JavaScript. It uses the `minimatch`\nlibrary to do its matching.\n\n## Attention: node-glob users!\n\nThe API has changed dramatically between 2.x and 3.x. This library is\nnow 100% JavaScript, and the integer flags have been replaced with an\noptions object.\n\nAlso, there's an event emitter class, proper tests, and all the other\nthings you've come to expect from node modules.\n\nAnd best of all, no compilation!\n\n## Usage\n\n```javascript\nvar glob = require(\"glob\")\n\n// options is optional\nglob(\"**/*.js\", options, function (er, files) {\n // files is an array of filenames.\n // If the `nonull` option is set, and nothing\n // was found, then files is [\"**/*.js\"]\n // er is an error object or null.\n})\n```\n\n## Features\n\nPlease see the [minimatch\ndocumentation](https://github.com/isaacs/minimatch) for more details.\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n* [minimatch documentation](https://github.com/isaacs/minimatch)\n\n## glob(pattern, [options], cb)\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* `cb` {Function}\n * `err` {Error | null}\n * `matches` {Array} filenames found matching the pattern\n\nPerform an asynchronous glob search.\n\n## glob.sync(pattern, [options])\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* return: {Array} filenames found matching the pattern\n\nPerform a synchronous glob search.\n\n## Class: glob.Glob\n\nCreate a Glob object by instanting the `glob.Glob` class.\n\n```javascript\nvar Glob = require(\"glob\").Glob\nvar mg = new Glob(pattern, options, cb)\n```\n\nIt's an EventEmitter, and starts walking the filesystem to find matches\nimmediately.\n\n### new glob.Glob(pattern, [options], [cb])\n\n* `pattern` {String} pattern to search for\n* `options` {Object}\n* `cb` {Function} Called when an error occurs, or matches are found\n * `err` {Error | null}\n * `matches` {Array} filenames found matching the pattern\n\nNote that if the `sync` flag is set in the options, then matches will\nbe immediately available on the `g.found` member.\n\n### Properties\n\n* `minimatch` The minimatch object that the glob uses.\n* `options` The options object passed in.\n* `error` The error encountered. When an error is encountered, the\n glob object is in an undefined state, and should be discarded.\n* `aborted` Boolean which is set to true when calling `abort()`. There\n is no way at this time to continue a glob search after aborting, but\n you can re-use the statCache to avoid having to duplicate syscalls.\n* `statCache` Collection of all the stat results the glob search\n performed.\n* `cache` Convenience object. Each field has the following possible\n values:\n * `false` - Path does not exist\n * `true` - Path exists\n * `1` - Path exists, and is not a directory\n * `2` - Path exists, and is a directory\n * `[file, entries, ...]` - Path exists, is a directory, and the\n array value is the results of `fs.readdir`\n\n### Events\n\n* `end` When the matching is finished, this is emitted with all the\n matches found. If the `nonull` option is set, and no match was found,\n then the `matches` list contains the original pattern. The matches\n are sorted, unless the `nosort` flag is set.\n* `match` Every time a match is found, this is emitted with the matched.\n* `error` Emitted when an unexpected error is encountered, or whenever\n any fs error occurs if `options.strict` is set.\n* `abort` When `abort()` is called, this event is raised.\n\n### Methods\n\n* `abort` Stop the search.\n\n### Options\n\nAll the options that can be passed to Minimatch can also be passed to\nGlob to change pattern matching behavior. Also, some have been added,\nor have glob-specific ramifications.\n\nAll options are false by default, unless otherwise noted.\n\nAll options are added to the glob object, as well.\n\n* `cwd` The current working directory in which to search. Defaults\n to `process.cwd()`.\n* `root` The place where patterns starting with `/` will be mounted\n onto. Defaults to `path.resolve(options.cwd, \"/\")` (`/` on Unix\n systems, and `C:\\` or some such on Windows.)\n* `dot` Include `.dot` files in normal matches and `globstar` matches.\n Note that an explicit dot in a portion of the pattern will always\n match dot files.\n* `nomount` By default, a pattern starting with a forward-slash will be\n \"mounted\" onto the root setting, so that a valid filesystem path is\n returned. Set this flag to disable that behavior.\n* `mark` Add a `/` character to directory matches. Note that this\n requires additional stat calls.\n* `nosort` Don't sort the results.\n* `stat` Set to true to stat *all* results. This reduces performance\n somewhat, and is completely unnecessary, unless `readdir` is presumed\n to be an untrustworthy indicator of file existence. It will cause\n ELOOP to be triggered one level sooner in the case of cyclical\n symbolic links.\n* `silent` When an unusual error is encountered\n when attempting to read a directory, a warning will be printed to\n stderr. Set the `silent` option to true to suppress these warnings.\n* `strict` When an unusual error is encountered\n when attempting to read a directory, the process will just continue on\n in search of other matches. Set the `strict` option to raise an error\n in these cases.\n* `cache` See `cache` property above. Pass in a previously generated\n cache object to save some fs calls.\n* `statCache` A cache of results of filesystem information, to prevent\n unnecessary stat calls. While it should not normally be necessary to\n set this, you may pass the statCache from one glob() call to the\n options object of another, if you know that the filesystem will not\n change between calls. (See \"Race Conditions\" below.)\n* `sync` Perform a synchronous glob search.\n* `nounique` In some cases, brace-expanded patterns can result in the\n same file showing up multiple times in the result set. By default,\n this implementation prevents duplicates in the result set.\n Set this flag to disable that behavior.\n* `nonull` Set to never return an empty set, instead returning a set\n containing the pattern itself. This is the default in glob(3).\n* `nocase` Perform a case-insensitive match. Note that case-insensitive\n filesystems will sometimes result in glob returning results that are\n case-insensitively matched anyway, since readdir and stat will not\n raise an error.\n* `debug` Set to enable debug logging in minimatch and glob.\n* `globDebug` Set to enable debug logging in glob, but not minimatch.\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between node-glob and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen glob returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`glob.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n\n## Windows\n\n**Please only use forward-slashes in glob expressions.**\n\nThough windows uses either `/` or `\\` as its path separator, only `/`\ncharacters are used by this glob implementation. You must use\nforward-slashes **only** in glob expressions. Back-slashes will always\nbe interpreted as escape characters, not path separators.\n\nResults from absolute patterns such as `/foo/*` are mounted onto the\nroot setting using `path.join`. On windows, this will by default result\nin `/foo/*` matching `C:\\foo\\bar.txt`.\n\n## Race Conditions\n\nGlob searching, by its very nature, is susceptible to race conditions,\nsince it relies on directory walking and such.\n\nAs a result, it is possible that a file that exists when glob looks for\nit may have been deleted or modified by the time it returns the result.\n\nAs part of its internal implementation, this program caches all stat\nand readdir calls that it makes, in order to cut down on system\noverhead. However, this also makes it even more susceptible to races,\nespecially if the cache or statCache objects are reused between glob\ncalls.\n\nUsers are thus advised not to use a glob result as a guarantee of\nfilesystem state in the face of rapid changes. For the vast majority\nof operations, this is never a problem.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-glob/issues" - }, - "homepage": "https://github.com/isaacs/node-glob", - "_id": "glob@3.2.3", - "_from": "glob@3.2.3" -} diff --git a/node_modules/mocha/node_modules/glob/test/00-setup.js b/node_modules/mocha/node_modules/glob/test/00-setup.js deleted file mode 100644 index 245afafd..00000000 --- a/node_modules/mocha/node_modules/glob/test/00-setup.js +++ /dev/null @@ -1,176 +0,0 @@ -// just a little pre-run script to set up the fixtures. -// zz-finish cleans it up - -var mkdirp = require("mkdirp") -var path = require("path") -var i = 0 -var tap = require("tap") -var fs = require("fs") -var rimraf = require("rimraf") - -var files = -[ "a/.abcdef/x/y/z/a" -, "a/abcdef/g/h" -, "a/abcfed/g/h" -, "a/b/c/d" -, "a/bc/e/f" -, "a/c/d/c/b" -, "a/cb/e/f" -] - -var symlinkTo = path.resolve(__dirname, "a/symlink/a/b/c") -var symlinkFrom = "../.." - -files = files.map(function (f) { - return path.resolve(__dirname, f) -}) - -tap.test("remove fixtures", function (t) { - rimraf(path.resolve(__dirname, "a"), function (er) { - t.ifError(er, "remove fixtures") - t.end() - }) -}) - -files.forEach(function (f) { - tap.test(f, function (t) { - var d = path.dirname(f) - mkdirp(d, 0755, function (er) { - if (er) { - t.fail(er) - return t.bailout() - } - fs.writeFile(f, "i like tests", function (er) { - t.ifError(er, "make file") - t.end() - }) - }) - }) -}) - -if (process.platform !== "win32") { - tap.test("symlinky", function (t) { - var d = path.dirname(symlinkTo) - console.error("mkdirp", d) - mkdirp(d, 0755, function (er) { - t.ifError(er) - fs.symlink(symlinkFrom, symlinkTo, "dir", function (er) { - t.ifError(er, "make symlink") - t.end() - }) - }) - }) -} - -;["foo","bar","baz","asdf","quux","qwer","rewq"].forEach(function (w) { - w = "/tmp/glob-test/" + w - tap.test("create " + w, function (t) { - mkdirp(w, function (er) { - if (er) - throw er - t.pass(w) - t.end() - }) - }) -}) - - -// generate the bash pattern test-fixtures if possible -if (process.platform === "win32" || !process.env.TEST_REGEN) { - console.error("Windows, or TEST_REGEN unset. Using cached fixtures.") - return -} - -var spawn = require("child_process").spawn; -var globs = - // put more patterns here. - // anything that would be directly in / should be in /tmp/glob-test - ["test/a/*/+(c|g)/./d" - ,"test/a/**/[cg]/../[cg]" - ,"test/a/{b,c,d,e,f}/**/g" - ,"test/a/b/**" - ,"test/**/g" - ,"test/a/abc{fed,def}/g/h" - ,"test/a/abc{fed/g,def}/**/" - ,"test/a/abc{fed/g,def}/**///**/" - ,"test/**/a/**/" - ,"test/+(a|b|c)/a{/,bc*}/**" - ,"test/*/*/*/f" - ,"test/**/f" - ,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**" - ,"{./*/*,/tmp/glob-test/*}" - ,"{/tmp/glob-test/*,*}" // evil owl face! how you taunt me! - ,"test/a/!(symlink)/**" - ] -var bashOutput = {} -var fs = require("fs") - -globs.forEach(function (pattern) { - tap.test("generate fixture " + pattern, function (t) { - var cmd = "shopt -s globstar && " + - "shopt -s extglob && " + - "shopt -s nullglob && " + - // "shopt >&2; " + - "eval \'for i in " + pattern + "; do echo $i; done\'" - var cp = spawn("bash", ["-c", cmd], { cwd: path.dirname(__dirname) }) - var out = [] - cp.stdout.on("data", function (c) { - out.push(c) - }) - cp.stderr.pipe(process.stderr) - cp.on("close", function (code) { - out = flatten(out) - if (!out) - out = [] - else - out = cleanResults(out.split(/\r*\n/)) - - bashOutput[pattern] = out - t.notOk(code, "bash test should finish nicely") - t.end() - }) - }) -}) - -tap.test("save fixtures", function (t) { - var fname = path.resolve(__dirname, "bash-results.json") - var data = JSON.stringify(bashOutput, null, 2) + "\n" - fs.writeFile(fname, data, function (er) { - t.ifError(er) - t.end() - }) -}) - -function cleanResults (m) { - // normalize discrepancies in ordering, duplication, - // and ending slashes. - return m.map(function (m) { - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort).map(function (f) { - // de-windows - return (process.platform !== 'win32') ? f - : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/') - }) -} - -function flatten (chunks) { - var s = 0 - chunks.forEach(function (c) { s += c.length }) - var out = new Buffer(s) - s = 0 - chunks.forEach(function (c) { - c.copy(out, s) - s += c.length - }) - - return out.toString().trim() -} - -function alphasort (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return a > b ? 1 : a < b ? -1 : 0 -} diff --git a/node_modules/mocha/node_modules/glob/test/bash-comparison.js b/node_modules/mocha/node_modules/glob/test/bash-comparison.js deleted file mode 100644 index 239ed1a9..00000000 --- a/node_modules/mocha/node_modules/glob/test/bash-comparison.js +++ /dev/null @@ -1,63 +0,0 @@ -// basic test -// show that it does the same thing by default as the shell. -var tap = require("tap") -, child_process = require("child_process") -, bashResults = require("./bash-results.json") -, globs = Object.keys(bashResults) -, glob = require("../") -, path = require("path") - -// run from the root of the project -// this is usually where you're at anyway, but be sure. -process.chdir(path.resolve(__dirname, "..")) - -function alphasort (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return a > b ? 1 : a < b ? -1 : 0 -} - -globs.forEach(function (pattern) { - var expect = bashResults[pattern] - // anything regarding the symlink thing will fail on windows, so just skip it - if (process.platform === "win32" && - expect.some(function (m) { - return /\/symlink\//.test(m) - })) - return - - tap.test(pattern, function (t) { - glob(pattern, function (er, matches) { - if (er) - throw er - - // sort and unmark, just to match the shell results - matches = cleanResults(matches) - - t.deepEqual(matches, expect, pattern) - t.end() - }) - }) - - tap.test(pattern + " sync", function (t) { - var matches = cleanResults(glob.sync(pattern)) - - t.deepEqual(matches, expect, "should match shell") - t.end() - }) -}) - -function cleanResults (m) { - // normalize discrepancies in ordering, duplication, - // and ending slashes. - return m.map(function (m) { - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort).map(function (f) { - // de-windows - return (process.platform !== 'win32') ? f - : f.replace(/^[a-zA-Z]:[\/\\]+/, '/').replace(/[\\\/]+/g, '/') - }) -} diff --git a/node_modules/mocha/node_modules/glob/test/bash-results.json b/node_modules/mocha/node_modules/glob/test/bash-results.json deleted file mode 100644 index a9bc347d..00000000 --- a/node_modules/mocha/node_modules/glob/test/bash-results.json +++ /dev/null @@ -1,350 +0,0 @@ -{ - "test/a/*/+(c|g)/./d": [ - "test/a/b/c/./d" - ], - "test/a/**/[cg]/../[cg]": [ - "test/a/abcdef/g/../g", - "test/a/abcfed/g/../g", - "test/a/b/c/../c", - "test/a/c/../c", - "test/a/c/d/c/../c", - "test/a/symlink/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c" - ], - "test/a/{b,c,d,e,f}/**/g": [], - "test/a/b/**": [ - "test/a/b", - "test/a/b/c", - "test/a/b/c/d" - ], - "test/**/g": [ - "test/a/abcdef/g", - "test/a/abcfed/g" - ], - "test/a/abc{fed,def}/g/h": [ - "test/a/abcdef/g/h", - "test/a/abcfed/g/h" - ], - "test/a/abc{fed/g,def}/**/": [ - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcfed/g" - ], - "test/a/abc{fed/g,def}/**///**/": [ - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcfed/g" - ], - "test/**/a/**/": [ - "test/a", - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcfed", - "test/a/abcfed/g", - "test/a/b", - "test/a/b/c", - "test/a/bc", - "test/a/bc/e", - "test/a/c", - "test/a/c/d", - "test/a/c/d/c", - "test/a/cb", - "test/a/cb/e", - "test/a/symlink", - "test/a/symlink/a", - "test/a/symlink/a/b", - "test/a/symlink/a/b/c", - "test/a/symlink/a/b/c/a", - "test/a/symlink/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b" - ], - "test/+(a|b|c)/a{/,bc*}/**": [ - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcdef/g/h", - "test/a/abcfed", - "test/a/abcfed/g", - "test/a/abcfed/g/h" - ], - "test/*/*/*/f": [ - "test/a/bc/e/f", - "test/a/cb/e/f" - ], - "test/**/f": [ - "test/a/bc/e/f", - "test/a/cb/e/f" - ], - "test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**": [ - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c" - ], - "{./*/*,/tmp/glob-test/*}": [ - "./examples/g.js", - "./examples/usr-local.js", - "./node_modules/graceful-fs", - "./node_modules/inherits", - "./node_modules/minimatch", - "./node_modules/mkdirp", - "./node_modules/rimraf", - "./node_modules/tap", - "./test/00-setup.js", - "./test/a", - "./test/bash-comparison.js", - "./test/bash-results.json", - "./test/cwd-test.js", - "./test/globstar-match.js", - "./test/mark.js", - "./test/nocase-nomagic.js", - "./test/pause-resume.js", - "./test/root-nomount.js", - "./test/root.js", - "./test/stat.js", - "./test/zz-cleanup.js", - "/tmp/glob-test/asdf", - "/tmp/glob-test/bar", - "/tmp/glob-test/baz", - "/tmp/glob-test/foo", - "/tmp/glob-test/quux", - "/tmp/glob-test/qwer", - "/tmp/glob-test/rewq" - ], - "{/tmp/glob-test/*,*}": [ - "/tmp/glob-test/asdf", - "/tmp/glob-test/bar", - "/tmp/glob-test/baz", - "/tmp/glob-test/foo", - "/tmp/glob-test/quux", - "/tmp/glob-test/qwer", - "/tmp/glob-test/rewq", - "examples", - "glob.js", - "LICENSE", - "node_modules", - "package.json", - "README.md", - "test" - ], - "test/a/!(symlink)/**": [ - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcdef/g/h", - "test/a/abcfed", - "test/a/abcfed/g", - "test/a/abcfed/g/h", - "test/a/b", - "test/a/b/c", - "test/a/b/c/d", - "test/a/bc", - "test/a/bc/e", - "test/a/bc/e/f", - "test/a/c", - "test/a/c/d", - "test/a/c/d/c", - "test/a/c/d/c/b", - "test/a/cb", - "test/a/cb/e", - "test/a/cb/e/f" - ] -} diff --git a/node_modules/mocha/node_modules/glob/test/cwd-test.js b/node_modules/mocha/node_modules/glob/test/cwd-test.js deleted file mode 100644 index 352c27ef..00000000 --- a/node_modules/mocha/node_modules/glob/test/cwd-test.js +++ /dev/null @@ -1,55 +0,0 @@ -var tap = require("tap") - -var origCwd = process.cwd() -process.chdir(__dirname) - -tap.test("changing cwd and searching for **/d", function (t) { - var glob = require('../') - var path = require('path') - t.test('.', function (t) { - glob('**/d', function (er, matches) { - t.ifError(er) - t.like(matches, [ 'a/b/c/d', 'a/c/d' ]) - t.end() - }) - }) - - t.test('a', function (t) { - glob('**/d', {cwd:path.resolve('a')}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'b/c/d', 'c/d' ]) - t.end() - }) - }) - - t.test('a/b', function (t) { - glob('**/d', {cwd:path.resolve('a/b')}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'c/d' ]) - t.end() - }) - }) - - t.test('a/b/', function (t) { - glob('**/d', {cwd:path.resolve('a/b/')}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'c/d' ]) - t.end() - }) - }) - - t.test('.', function (t) { - glob('**/d', {cwd: process.cwd()}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'a/b/c/d', 'a/c/d' ]) - t.end() - }) - }) - - t.test('cd -', function (t) { - process.chdir(origCwd) - t.end() - }) - - t.end() -}) diff --git a/node_modules/mocha/node_modules/glob/test/globstar-match.js b/node_modules/mocha/node_modules/glob/test/globstar-match.js deleted file mode 100644 index 9b234fa2..00000000 --- a/node_modules/mocha/node_modules/glob/test/globstar-match.js +++ /dev/null @@ -1,19 +0,0 @@ -var Glob = require("../glob.js").Glob -var test = require('tap').test - -test('globstar should not have dupe matches', function(t) { - var pattern = 'a/**/[gh]' - var g = new Glob(pattern, { cwd: __dirname }) - var matches = [] - g.on('match', function(m) { - console.error('match %j', m) - matches.push(m) - }) - g.on('end', function(set) { - console.error('set', set) - matches = matches.sort() - set = set.sort() - t.same(matches, set, 'should have same set of matches') - t.end() - }) -}) diff --git a/node_modules/mocha/node_modules/glob/test/mark.js b/node_modules/mocha/node_modules/glob/test/mark.js deleted file mode 100644 index ed68a335..00000000 --- a/node_modules/mocha/node_modules/glob/test/mark.js +++ /dev/null @@ -1,74 +0,0 @@ -var test = require("tap").test -var glob = require('../') -process.chdir(__dirname) - -test("mark, no / on pattern", function (t) { - glob("a/*", {mark: true}, function (er, results) { - if (er) - throw er - var expect = [ 'a/abcdef/', - 'a/abcfed/', - 'a/b/', - 'a/bc/', - 'a/c/', - 'a/cb/' ] - - if (process.platform !== "win32") - expect.push('a/symlink/') - - t.same(results, expect) - t.end() - }) -}) - -test("mark=false, no / on pattern", function (t) { - glob("a/*", function (er, results) { - if (er) - throw er - var expect = [ 'a/abcdef', - 'a/abcfed', - 'a/b', - 'a/bc', - 'a/c', - 'a/cb' ] - - if (process.platform !== "win32") - expect.push('a/symlink') - t.same(results, expect) - t.end() - }) -}) - -test("mark=true, / on pattern", function (t) { - glob("a/*/", {mark: true}, function (er, results) { - if (er) - throw er - var expect = [ 'a/abcdef/', - 'a/abcfed/', - 'a/b/', - 'a/bc/', - 'a/c/', - 'a/cb/' ] - if (process.platform !== "win32") - expect.push('a/symlink/') - t.same(results, expect) - t.end() - }) -}) - -test("mark=false, / on pattern", function (t) { - glob("a/*/", function (er, results) { - if (er) - throw er - var expect = [ 'a/abcdef/', - 'a/abcfed/', - 'a/b/', - 'a/bc/', - 'a/c/', - 'a/cb/' ] - if (process.platform !== "win32") - expect.push('a/symlink/') - t.same(results, expect) - t.end() - }) -}) diff --git a/node_modules/mocha/node_modules/glob/test/nocase-nomagic.js b/node_modules/mocha/node_modules/glob/test/nocase-nomagic.js deleted file mode 100644 index d8629709..00000000 --- a/node_modules/mocha/node_modules/glob/test/nocase-nomagic.js +++ /dev/null @@ -1,113 +0,0 @@ -var fs = require('graceful-fs'); -var test = require('tap').test; -var glob = require('../'); - -test('mock fs', function(t) { - var stat = fs.stat - var statSync = fs.statSync - var readdir = fs.readdir - var readdirSync = fs.readdirSync - - function fakeStat(path) { - var ret - switch (path.toLowerCase()) { - case '/tmp': case '/tmp/': - ret = { isDirectory: function() { return true } } - break - case '/tmp/a': - ret = { isDirectory: function() { return false } } - break - } - return ret - } - - fs.stat = function(path, cb) { - var f = fakeStat(path); - if (f) { - process.nextTick(function() { - cb(null, f) - }) - } else { - stat.call(fs, path, cb) - } - } - - fs.statSync = function(path) { - return fakeStat(path) || statSync.call(fs, path) - } - - function fakeReaddir(path) { - var ret - switch (path.toLowerCase()) { - case '/tmp': case '/tmp/': - ret = [ 'a', 'A' ] - break - case '/': - ret = ['tmp', 'tMp', 'tMP', 'TMP'] - } - return ret - } - - fs.readdir = function(path, cb) { - var f = fakeReaddir(path) - if (f) - process.nextTick(function() { - cb(null, f) - }) - else - readdir.call(fs, path, cb) - } - - fs.readdirSync = function(path) { - return fakeReaddir(path) || readdirSync.call(fs, path) - } - - t.pass('mocked') - t.end() -}) - -test('nocase, nomagic', function(t) { - var n = 2 - var want = [ '/TMP/A', - '/TMP/a', - '/tMP/A', - '/tMP/a', - '/tMp/A', - '/tMp/a', - '/tmp/A', - '/tmp/a' ] - glob('/tmp/a', { nocase: true }, function(er, res) { - if (er) - throw er - t.same(res.sort(), want) - if (--n === 0) t.end() - }) - glob('/tmp/A', { nocase: true }, function(er, res) { - if (er) - throw er - t.same(res.sort(), want) - if (--n === 0) t.end() - }) -}) - -test('nocase, with some magic', function(t) { - t.plan(2) - var want = [ '/TMP/A', - '/TMP/a', - '/tMP/A', - '/tMP/a', - '/tMp/A', - '/tMp/a', - '/tmp/A', - '/tmp/a' ] - glob('/tmp/*', { nocase: true }, function(er, res) { - if (er) - throw er - t.same(res.sort(), want) - }) - glob('/tmp/*', { nocase: true }, function(er, res) { - if (er) - throw er - t.same(res.sort(), want) - }) -}) diff --git a/node_modules/mocha/node_modules/glob/test/pause-resume.js b/node_modules/mocha/node_modules/glob/test/pause-resume.js deleted file mode 100644 index e1ffbab1..00000000 --- a/node_modules/mocha/node_modules/glob/test/pause-resume.js +++ /dev/null @@ -1,73 +0,0 @@ -// show that no match events happen while paused. -var tap = require("tap") -, child_process = require("child_process") -// just some gnarly pattern with lots of matches -, pattern = "test/a/!(symlink)/**" -, bashResults = require("./bash-results.json") -, patterns = Object.keys(bashResults) -, glob = require("../") -, Glob = glob.Glob -, path = require("path") - -// run from the root of the project -// this is usually where you're at anyway, but be sure. -process.chdir(path.resolve(__dirname, "..")) - -function alphasort (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return a > b ? 1 : a < b ? -1 : 0 -} - -function cleanResults (m) { - // normalize discrepancies in ordering, duplication, - // and ending slashes. - return m.map(function (m) { - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort).map(function (f) { - // de-windows - return (process.platform !== 'win32') ? f - : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/') - }) -} - -var globResults = [] -tap.test("use a Glob object, and pause/resume it", function (t) { - var g = new Glob(pattern) - , paused = false - , res = [] - , expect = bashResults[pattern] - - g.on("pause", function () { - console.error("pause") - }) - - g.on("resume", function () { - console.error("resume") - }) - - g.on("match", function (m) { - t.notOk(g.paused, "must not be paused") - globResults.push(m) - g.pause() - t.ok(g.paused, "must be paused") - setTimeout(g.resume.bind(g), 10) - }) - - g.on("end", function (matches) { - t.pass("reached glob end") - globResults = cleanResults(globResults) - matches = cleanResults(matches) - t.deepEqual(matches, globResults, - "end event matches should be the same as match events") - - t.deepEqual(matches, expect, - "glob matches should be the same as bash results") - - t.end() - }) -}) - diff --git a/node_modules/mocha/node_modules/glob/test/root-nomount.js b/node_modules/mocha/node_modules/glob/test/root-nomount.js deleted file mode 100644 index 3ac5979b..00000000 --- a/node_modules/mocha/node_modules/glob/test/root-nomount.js +++ /dev/null @@ -1,39 +0,0 @@ -var tap = require("tap") - -var origCwd = process.cwd() -process.chdir(__dirname) - -tap.test("changing root and searching for /b*/**", function (t) { - var glob = require('../') - var path = require('path') - t.test('.', function (t) { - glob('/b*/**', { globDebug: true, root: '.', nomount: true }, function (er, matches) { - t.ifError(er) - t.like(matches, []) - t.end() - }) - }) - - t.test('a', function (t) { - glob('/b*/**', { globDebug: true, root: path.resolve('a'), nomount: true }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ]) - t.end() - }) - }) - - t.test('root=a, cwd=a/b', function (t) { - glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b'), nomount: true }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ]) - t.end() - }) - }) - - t.test('cd -', function (t) { - process.chdir(origCwd) - t.end() - }) - - t.end() -}) diff --git a/node_modules/mocha/node_modules/glob/test/root.js b/node_modules/mocha/node_modules/glob/test/root.js deleted file mode 100644 index 95c23f99..00000000 --- a/node_modules/mocha/node_modules/glob/test/root.js +++ /dev/null @@ -1,46 +0,0 @@ -var t = require("tap") - -var origCwd = process.cwd() -process.chdir(__dirname) - -var glob = require('../') -var path = require('path') - -t.test('.', function (t) { - glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) { - t.ifError(er) - t.like(matches, []) - t.end() - }) -}) - - -t.test('a', function (t) { - console.error("root=" + path.resolve('a')) - glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) { - t.ifError(er) - var wanted = [ - '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' - ].map(function (m) { - return path.join(path.resolve('a'), m).replace(/\\/g, '/') - }) - - t.like(matches, wanted) - t.end() - }) -}) - -t.test('root=a, cwd=a/b', function (t) { - glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) { - return path.join(path.resolve('a'), m).replace(/\\/g, '/') - })) - t.end() - }) -}) - -t.test('cd -', function (t) { - process.chdir(origCwd) - t.end() -}) diff --git a/node_modules/mocha/node_modules/glob/test/stat.js b/node_modules/mocha/node_modules/glob/test/stat.js deleted file mode 100644 index 62917114..00000000 --- a/node_modules/mocha/node_modules/glob/test/stat.js +++ /dev/null @@ -1,32 +0,0 @@ -var glob = require('../') -var test = require('tap').test -var path = require('path') - -test('stat all the things', function(t) { - var g = new glob.Glob('a/*abc*/**', { stat: true, cwd: __dirname }) - var matches = [] - g.on('match', function(m) { - matches.push(m) - }) - var stats = [] - g.on('stat', function(m) { - stats.push(m) - }) - g.on('end', function(eof) { - stats = stats.sort() - matches = matches.sort() - eof = eof.sort() - t.same(stats, matches) - t.same(eof, matches) - var cache = Object.keys(this.statCache) - t.same(cache.map(function (f) { - return path.relative(__dirname, f) - }).sort(), matches) - - cache.forEach(function(c) { - t.equal(typeof this.statCache[c], 'object') - }, this) - - t.end() - }) -}) diff --git a/node_modules/mocha/node_modules/glob/test/zz-cleanup.js b/node_modules/mocha/node_modules/glob/test/zz-cleanup.js deleted file mode 100644 index e085f0fa..00000000 --- a/node_modules/mocha/node_modules/glob/test/zz-cleanup.js +++ /dev/null @@ -1,11 +0,0 @@ -// remove the fixtures -var tap = require("tap") -, rimraf = require("rimraf") -, path = require("path") - -tap.test("cleanup fixtures", function (t) { - rimraf(path.resolve(__dirname, "a"), function (er) { - t.ifError(er, "removed") - t.end() - }) -}) diff --git a/node_modules/mocha/node_modules/growl/History.md b/node_modules/mocha/node_modules/growl/History.md deleted file mode 100644 index a4b7b49f..00000000 --- a/node_modules/mocha/node_modules/growl/History.md +++ /dev/null @@ -1,63 +0,0 @@ - -1.7.0 / 2012-12-30 -================== - - * support transient notifications in Gnome - -1.6.1 / 2012-09-25 -================== - - * restore compatibility with node < 0.8 [fgnass] - -1.6.0 / 2012-09-06 -================== - - * add notification center support [drudge] - -1.5.1 / 2012-04-08 -================== - - * Merge pull request #16 from KyleAMathews/patch-1 - * Fixes #15 - -1.5.0 / 2012-02-08 -================== - - * Added windows support [perfusorius] - -1.4.1 / 2011-12-28 -================== - - * Fixed: dont exit(). Closes #9 - -1.4.0 / 2011-12-17 -================== - - * Changed API: `growl.notify()` -> `growl()` - -1.3.0 / 2011-12-17 -================== - - * Added support for Ubuntu/Debian/Linux users [niftylettuce] - * Fixed: send notifications even if title not specified [alessioalex] - -1.2.0 / 2011-10-06 -================== - - * Add support for priority. - -1.1.0 / 2011-03-15 -================== - - * Added optional callbacks - * Added parsing of version - -1.0.1 / 2010-03-26 -================== - - * Fixed; sys.exec -> child_process.exec to support latest node - -1.0.0 / 2010-03-19 -================== - - * Initial release diff --git a/node_modules/mocha/node_modules/growl/Readme.md b/node_modules/mocha/node_modules/growl/Readme.md deleted file mode 100644 index 48d717cc..00000000 --- a/node_modules/mocha/node_modules/growl/Readme.md +++ /dev/null @@ -1,99 +0,0 @@ -# Growl for nodejs - -Growl support for Nodejs. This is essentially a port of my [Ruby Growl Library](http://github.com/visionmedia/growl). Ubuntu/Linux support added thanks to [@niftylettuce](http://github.com/niftylettuce). - -## Installation - -### Install - -### Mac OS X (Darwin): - - Install [growlnotify(1)](http://growl.info/extras.php#growlnotify). On OS X 10.8, Notification Center is supported using [terminal-notifier](https://github.com/alloy/terminal-notifier). To install: - - $ sudo gem install terminal-notifier - - Install [npm](http://npmjs.org/) and run: - - $ npm install growl - -### Ubuntu (Linux): - - Install `notify-send` through the [libnotify-bin](http://packages.ubuntu.com/libnotify-bin) package: - - $ sudo apt-get install libnotify-bin - - Install [npm](http://npmjs.org/) and run: - - $ npm install growl - -### Windows: - - Download and install [Growl for Windows](http://www.growlforwindows.com/gfw/default.aspx) - - Download [growlnotify](http://www.growlforwindows.com/gfw/help/growlnotify.aspx) - **IMPORTANT :** Unpack growlnotify to a folder that is present in your path! - - Install [npm](http://npmjs.org/) and run: - - $ npm install growl - -## Examples - -Callback functions are optional - - var growl = require('growl') - growl('You have mail!') - growl('5 new messages', { sticky: true }) - growl('5 new emails', { title: 'Email Client', image: 'Safari', sticky: true }) - growl('Message with title', { title: 'Title'}) - growl('Set priority', { priority: 2 }) - growl('Show Safari icon', { image: 'Safari' }) - growl('Show icon', { image: 'path/to/icon.icns' }) - growl('Show image', { image: 'path/to/my.image.png' }) - growl('Show png filesystem icon', { image: 'png' }) - growl('Show pdf filesystem icon', { image: 'article.pdf' }) - growl('Show pdf filesystem icon', { image: 'article.pdf' }, function(err){ - // ... notified - }) - -## Options - - - title - - notification title - - name - - application name - - priority - - priority for the notification (default is 0) - - sticky - - weither or not the notification should remainin until closed - - image - - Auto-detects the context: - - path to an icon sets --iconpath - - path to an image sets --image - - capitalized word sets --appIcon - - filename uses extname as --icon - - otherwise treated as --icon - -## License - -(The MIT License) - -Copyright (c) 2009 TJ Holowaychuk - -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/mocha/node_modules/growl/lib/growl.js b/node_modules/mocha/node_modules/growl/lib/growl.js deleted file mode 100644 index 04f4f9b4..00000000 --- a/node_modules/mocha/node_modules/growl/lib/growl.js +++ /dev/null @@ -1,234 +0,0 @@ -// Growl - Copyright TJ Holowaychuk (MIT Licensed) - -/** - * Module dependencies. - */ - -var exec = require('child_process').exec - , fs = require('fs') - , path = require('path') - , exists = fs.existsSync || path.existsSync - , os = require('os') - , quote = JSON.stringify - , cmd; - -function which(name) { - var paths = process.env.PATH.split(':'); - var loc; - - for (var i = 0, len = paths.length; i < len; ++i) { - loc = path.join(paths[i], name); - if (exists(loc)) return loc; - } -} - -switch(os.type()) { - case 'Darwin': - if (which('terminal-notifier')) { - cmd = { - type: "Darwin-NotificationCenter" - , pkg: "terminal-notifier" - , msg: '-message' - , title: '-title' - , subtitle: '-subtitle' - , priority: { - cmd: '-execute' - , range: [] - } - }; - } else { - cmd = { - type: "Darwin-Growl" - , pkg: "growlnotify" - , msg: '-m' - , sticky: '--sticky' - , priority: { - cmd: '--priority' - , range: [ - -2 - , -1 - , 0 - , 1 - , 2 - , "Very Low" - , "Moderate" - , "Normal" - , "High" - , "Emergency" - ] - } - }; - } - break; - case 'Linux': - cmd = { - type: "Linux" - , pkg: "notify-send" - , msg: '' - , sticky: '-t 0' - , icon: '-i' - , priority: { - cmd: '-u' - , range: [ - "low" - , "normal" - , "critical" - ] - } - }; - break; - case 'Windows_NT': - cmd = { - type: "Windows" - , pkg: "growlnotify" - , msg: '' - , sticky: '/s:true' - , title: '/t:' - , icon: '/i:' - , priority: { - cmd: '/p:' - , range: [ - -2 - , -1 - , 0 - , 1 - , 2 - ] - } - }; - break; -} - -/** - * Expose `growl`. - */ - -exports = module.exports = growl; - -/** - * Node-growl version. - */ - -exports.version = '1.4.1' - -/** - * Send growl notification _msg_ with _options_. - * - * Options: - * - * - title Notification title - * - sticky Make the notification stick (defaults to false) - * - priority Specify an int or named key (default is 0) - * - name Application name (defaults to growlnotify) - * - image - * - path to an icon sets --iconpath - * - path to an image sets --image - * - capitalized word sets --appIcon - * - filename uses extname as --icon - * - otherwise treated as --icon - * - * Examples: - * - * growl('New email') - * growl('5 new emails', { title: 'Thunderbird' }) - * growl('Email sent', function(){ - * // ... notification sent - * }) - * - * @param {string} msg - * @param {object} options - * @param {function} fn - * @api public - */ - -function growl(msg, options, fn) { - var image - , args - , options = options || {} - , fn = fn || function(){}; - - // noop - if (!cmd) return fn(new Error('growl not supported on this platform')); - args = [cmd.pkg]; - - // image - if (image = options.image) { - switch(cmd.type) { - case 'Darwin-Growl': - var flag, ext = path.extname(image).substr(1) - flag = flag || ext == 'icns' && 'iconpath' - flag = flag || /^[A-Z]/.test(image) && 'appIcon' - flag = flag || /^png|gif|jpe?g$/.test(ext) && 'image' - flag = flag || ext && (image = ext) && 'icon' - flag = flag || 'icon' - args.push('--' + flag, image) - break; - case 'Linux': - args.push(cmd.icon + " " + image); - // libnotify defaults to sticky, set a hint for transient notifications - if (!options.sticky) args.push('--hint=int:transient:1'); - break; - case 'Windows': - args.push(cmd.icon + quote(image)); - break; - } - } - - // sticky - if (options.sticky) args.push(cmd.sticky); - - // priority - if (options.priority) { - var priority = options.priority + ''; - var checkindexOf = cmd.priority.range.indexOf(priority); - if (~cmd.priority.range.indexOf(priority)) { - args.push(cmd.priority, options.priority); - } - } - - // name - if (options.name && cmd.type === "Darwin-Growl") { - args.push('--name', options.name); - } - - switch(cmd.type) { - case 'Darwin-Growl': - args.push(cmd.msg); - args.push(quote(msg)); - if (options.title) args.push(quote(options.title)); - break; - case 'Darwin-NotificationCenter': - args.push(cmd.msg); - args.push(quote(msg)); - if (options.title) { - args.push(cmd.title); - args.push(quote(options.title)); - } - if (options.subtitle) { - args.push(cmd.subtitle); - args.push(quote(options.title)); - } - break; - case 'Darwin-Growl': - args.push(cmd.msg); - args.push(quote(msg)); - if (options.title) args.push(quote(options.title)); - break; - case 'Linux': - if (options.title) { - args.push(quote(options.title)); - args.push(cmd.msg); - args.push(quote(msg)); - } else { - args.push(quote(msg)); - } - break; - case 'Windows': - args.push(quote(msg)); - if (options.title) args.push(cmd.title + quote(options.title)); - break; - } - - // execute - exec(args.join(' '), fn); -}; diff --git a/node_modules/mocha/node_modules/growl/package.json b/node_modules/mocha/node_modules/growl/package.json deleted file mode 100644 index 6565e46d..00000000 --- a/node_modules/mocha/node_modules/growl/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "growl", - "version": "1.7.0", - "description": "Growl unobtrusive notifications", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "main": "./lib/growl.js", - "readme": "# Growl for nodejs\n\nGrowl support for Nodejs. This is essentially a port of my [Ruby Growl Library](http://github.com/visionmedia/growl). Ubuntu/Linux support added thanks to [@niftylettuce](http://github.com/niftylettuce). \n\n## Installation\n\n### Install \n\n### Mac OS X (Darwin):\n\n Install [growlnotify(1)](http://growl.info/extras.php#growlnotify). On OS X 10.8, Notification Center is supported using [terminal-notifier](https://github.com/alloy/terminal-notifier). To install:\n \n $ sudo gem install terminal-notifier\n \n Install [npm](http://npmjs.org/) and run:\n \n $ npm install growl\n\n### Ubuntu (Linux):\n\n Install `notify-send` through the [libnotify-bin](http://packages.ubuntu.com/libnotify-bin) package:\n\n $ sudo apt-get install libnotify-bin\n\n Install [npm](http://npmjs.org/) and run:\n \n $ npm install growl\n\n### Windows:\n\n Download and install [Growl for Windows](http://www.growlforwindows.com/gfw/default.aspx)\n\n Download [growlnotify](http://www.growlforwindows.com/gfw/help/growlnotify.aspx) - **IMPORTANT :** Unpack growlnotify to a folder that is present in your path!\n\n Install [npm](http://npmjs.org/) and run:\n \n $ npm install growl\n\n## Examples\n\nCallback functions are optional\n\n var growl = require('growl')\n growl('You have mail!')\n growl('5 new messages', { sticky: true })\n growl('5 new emails', { title: 'Email Client', image: 'Safari', sticky: true })\n growl('Message with title', { title: 'Title'})\n growl('Set priority', { priority: 2 })\n growl('Show Safari icon', { image: 'Safari' })\n growl('Show icon', { image: 'path/to/icon.icns' })\n growl('Show image', { image: 'path/to/my.image.png' })\n growl('Show png filesystem icon', { image: 'png' })\n growl('Show pdf filesystem icon', { image: 'article.pdf' })\n growl('Show pdf filesystem icon', { image: 'article.pdf' }, function(err){\n // ... notified\n })\n\n## Options\n\n - title\n - notification title\n - name\n - application name\n - priority\n - priority for the notification (default is 0)\n - sticky\n - weither or not the notification should remainin until closed\n - image\n - Auto-detects the context:\n - path to an icon sets --iconpath\n - path to an image sets --image\n - capitalized word sets --appIcon\n - filename uses extname as --icon\n - otherwise treated as --icon\n \n## License \n\n(The MIT License)\n\nCopyright (c) 2009 TJ Holowaychuk \n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "_id": "growl@1.7.0", - "_from": "growl@1.7.x" -} diff --git a/node_modules/mocha/node_modules/growl/test.js b/node_modules/mocha/node_modules/growl/test.js deleted file mode 100644 index cf22d90b..00000000 --- a/node_modules/mocha/node_modules/growl/test.js +++ /dev/null @@ -1,20 +0,0 @@ - -var growl = require('./lib/growl') - -growl('You have mail!') -growl('5 new messages', { sticky: true }) -growl('5 new emails', { title: 'Email Client', image: 'Safari', sticky: true }) -growl('Message with title', { title: 'Title'}) -growl('Set priority', { priority: 2 }) -growl('Show Safari icon', { image: 'Safari' }) -growl('Show icon', { image: 'path/to/icon.icns' }) -growl('Show image', { image: 'path/to/my.image.png' }) -growl('Show png filesystem icon', { image: 'png' }) -growl('Show pdf filesystem icon', { image: 'article.pdf' }) -growl('Show pdf filesystem icon', { image: 'article.pdf' }, function(){ - console.log('callback'); -}) -growl('Show pdf filesystem icon', { title: 'Use show()', image: 'article.pdf' }) -growl('here \' are \n some \\ characters that " need escaping', {}, function(error, stdout, stderr) { - if (error !== null) throw new Error('escaping failed:\n' + stdout + stderr); -}) diff --git a/node_modules/mocha/node_modules/jade/.npmignore b/node_modules/mocha/node_modules/jade/.npmignore deleted file mode 100644 index b9af3d4b..00000000 --- a/node_modules/mocha/node_modules/jade/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -test -support -benchmarks -examples -lib-cov -coverage.html -.gitmodules -.travis.yml -History.md -Readme.md -Makefile -test/ -support/ -benchmarks/ -examples/ diff --git a/node_modules/mocha/node_modules/jade/LICENSE b/node_modules/mocha/node_modules/jade/LICENSE deleted file mode 100644 index 8ad0e0d3..00000000 --- a/node_modules/mocha/node_modules/jade/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2009-2010 TJ Holowaychuk - -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/mocha/node_modules/jade/bin/jade b/node_modules/mocha/node_modules/jade/bin/jade deleted file mode 100755 index 7e6002f9..00000000 --- a/node_modules/mocha/node_modules/jade/bin/jade +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var fs = require('fs') - , program = require('commander') - , path = require('path') - , basename = path.basename - , dirname = path.dirname - , resolve = path.resolve - , join = path.join - , mkdirp = require('mkdirp') - , jade = require('../'); - -// jade options - -var options = {}; - -// options - -program - .version(jade.version) - .usage('[options] [dir|file ...]') - .option('-o, --obj ', 'javascript options object') - .option('-O, --out ', 'output the compiled html to ') - .option('-p, --path ', 'filename used to resolve includes') - .option('-P, --pretty', 'compile pretty html output') - .option('-c, --client', 'compile for client-side runtime.js') - .option('-D, --no-debug', 'compile without debugging (smaller functions)') - -program.on('--help', function(){ - console.log(' Examples:'); - console.log(''); - console.log(' # translate jade the templates dir'); - console.log(' $ jade templates'); - console.log(''); - console.log(' # create {foo,bar}.html'); - console.log(' $ jade {foo,bar}.jade'); - console.log(''); - console.log(' # jade over stdio'); - console.log(' $ jade < my.jade > my.html'); - console.log(''); - console.log(' # jade over stdio'); - console.log(' $ echo "h1 Jade!" | jade'); - console.log(''); - console.log(' # foo, bar dirs rendering to /tmp'); - console.log(' $ jade foo bar --out /tmp '); - console.log(''); -}); - -program.parse(process.argv); - -// options given, parse them - -if (program.obj) options = eval('(' + program.obj + ')'); - -// --filename - -if (program.path) options.filename = program.path; - -// --no-debug - -options.compileDebug = program.debug; - -// --client - -options.client = program.client; - -// --pretty - -options.pretty = program.pretty; - -// left-over args are file paths - -var files = program.args; - -// compile files - -if (files.length) { - console.log(); - files.forEach(renderFile); - process.on('exit', console.log); -// stdio -} else { - stdin(); -} - -/** - * Compile from stdin. - */ - -function stdin() { - var buf = ''; - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function(chunk){ buf += chunk; }); - process.stdin.on('end', function(){ - var fn = jade.compile(buf, options); - var output = options.client - ? fn.toString() - : fn(options); - process.stdout.write(output); - }).resume(); -} - -/** - * Process the given path, compiling the jade files found. - * Always walk the subdirectories. - */ - -function renderFile(path) { - var re = /\.jade$/; - fs.lstat(path, function(err, stat) { - if (err) throw err; - // Found jade file - if (stat.isFile() && re.test(path)) { - fs.readFile(path, 'utf8', function(err, str){ - if (err) throw err; - options.filename = path; - var fn = jade.compile(str, options); - var extname = options.client ? '.js' : '.html'; - path = path.replace(re, extname); - if (program.out) path = join(program.out, basename(path)); - var dir = resolve(dirname(path)); - mkdirp(dir, 0755, function(err){ - if (err) throw err; - var output = options.client - ? fn.toString() - : fn(options); - fs.writeFile(path, output, function(err){ - if (err) throw err; - console.log(' \033[90mrendered \033[36m%s\033[0m', path); - }); - }); - }); - // Found directory - } else if (stat.isDirectory()) { - fs.readdir(path, function(err, files) { - if (err) throw err; - files.map(function(filename) { - return path + '/' + filename; - }).forEach(renderFile); - }); - } - }); -} diff --git a/node_modules/mocha/node_modules/jade/index.js b/node_modules/mocha/node_modules/jade/index.js deleted file mode 100644 index 8ad059f7..00000000 --- a/node_modules/mocha/node_modules/jade/index.js +++ /dev/null @@ -1,4 +0,0 @@ - -module.exports = process.env.JADE_COV - ? require('./lib-cov/jade') - : require('./lib/jade'); \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/jade.js b/node_modules/mocha/node_modules/jade/jade.js deleted file mode 100644 index 1983a203..00000000 --- a/node_modules/mocha/node_modules/jade/jade.js +++ /dev/null @@ -1,3586 +0,0 @@ -(function() { - -// CommonJS require() - -function require(p){ - var path = require.resolve(p) - , mod = require.modules[path]; - if (!mod) throw new Error('failed to require "' + p + '"'); - if (!mod.exports) { - mod.exports = {}; - mod.call(mod.exports, mod, mod.exports, require.relative(path)); - } - return mod.exports; - } - -require.modules = {}; - -require.resolve = function (path){ - var orig = path - , reg = path + '.js' - , index = path + '/index.js'; - return require.modules[reg] && reg - || require.modules[index] && index - || orig; - }; - -require.register = function (path, fn){ - require.modules[path] = fn; - }; - -require.relative = function (parent) { - return function(p){ - if ('.' != p.charAt(0)) return require(p); - - var path = parent.split('/') - , segs = p.split('/'); - path.pop(); - - for (var i = 0; i < segs.length; i++) { - var seg = segs[i]; - if ('..' == seg) path.pop(); - else if ('.' != seg) path.push(seg); - } - - return require(path.join('/')); - }; - }; - - -require.register("compiler.js", function(module, exports, require){ - -/*! - * Jade - Compiler - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var nodes = require('./nodes') - , filters = require('./filters') - , doctypes = require('./doctypes') - , selfClosing = require('./self-closing') - , runtime = require('./runtime') - , utils = require('./utils'); - - - if (!Object.keys) { - Object.keys = function(obj){ - var arr = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - arr.push(key); - } - } - return arr; - } - } - - if (!String.prototype.trimLeft) { - String.prototype.trimLeft = function(){ - return this.replace(/^\s+/, ''); - } - } - - - -/** - * Initialize `Compiler` with the given `node`. - * - * @param {Node} node - * @param {Object} options - * @api public - */ - -var Compiler = module.exports = function Compiler(node, options) { - this.options = options = options || {}; - this.node = node; - this.hasCompiledDoctype = false; - this.hasCompiledTag = false; - this.pp = options.pretty || false; - this.debug = false !== options.compileDebug; - this.indents = 0; - this.parentIndents = 0; - if (options.doctype) this.setDoctype(options.doctype); -}; - -/** - * Compiler prototype. - */ - -Compiler.prototype = { - - /** - * Compile parse tree to JavaScript. - * - * @api public - */ - - compile: function(){ - this.buf = ['var interp;']; - if (this.pp) this.buf.push("var __indent = [];"); - this.lastBufferedIdx = -1; - this.visit(this.node); - return this.buf.join('\n'); - }, - - /** - * Sets the default doctype `name`. Sets terse mode to `true` when - * html 5 is used, causing self-closing tags to end with ">" vs "/>", - * and boolean attributes are not mirrored. - * - * @param {string} name - * @api public - */ - - setDoctype: function(name){ - var doctype = doctypes[(name || 'default').toLowerCase()]; - doctype = doctype || ''; - this.doctype = doctype; - this.terse = '5' == name || 'html' == name; - this.xml = 0 == this.doctype.indexOf(' 1 && !escape && block.nodes[0].isText && block.nodes[1].isText) - this.prettyIndent(1, true); - - for (var i = 0; i < len; ++i) { - // Pretty print text - if (pp && i > 0 && !escape && block.nodes[i].isText && block.nodes[i-1].isText) - this.prettyIndent(1, false); - - this.visit(block.nodes[i]); - // Multiple text nodes are separated by newlines - if (block.nodes[i+1] && block.nodes[i].isText && block.nodes[i+1].isText) - this.buffer('\\n'); - } - }, - - /** - * Visit `doctype`. Sets terse mode to `true` when html 5 - * is used, causing self-closing tags to end with ">" vs "/>", - * and boolean attributes are not mirrored. - * - * @param {Doctype} doctype - * @api public - */ - - visitDoctype: function(doctype){ - if (doctype && (doctype.val || !this.doctype)) { - this.setDoctype(doctype.val || 'default'); - } - - if (this.doctype) this.buffer(this.doctype); - this.hasCompiledDoctype = true; - }, - - /** - * Visit `mixin`, generating a function that - * may be called within the template. - * - * @param {Mixin} mixin - * @api public - */ - - visitMixin: function(mixin){ - var name = mixin.name.replace(/-/g, '_') + '_mixin' - , args = mixin.args || '' - , block = mixin.block - , attrs = mixin.attrs - , pp = this.pp; - - if (mixin.call) { - if (pp) this.buf.push("__indent.push('" + Array(this.indents + 1).join(' ') + "');") - if (block || attrs.length) { - - this.buf.push(name + '.call({'); - - if (block) { - this.buf.push('block: function(){'); - - // Render block with no indents, dynamically added when rendered - this.parentIndents++; - var _indents = this.indents; - this.indents = 0; - this.visit(mixin.block); - this.indents = _indents; - this.parentIndents--; - - if (attrs.length) { - this.buf.push('},'); - } else { - this.buf.push('}'); - } - } - - if (attrs.length) { - var val = this.attrs(attrs); - if (val.inherits) { - this.buf.push('attributes: merge({' + val.buf - + '}, attributes), escaped: merge(' + val.escaped + ', escaped, true)'); - } else { - this.buf.push('attributes: {' + val.buf + '}, escaped: ' + val.escaped); - } - } - - if (args) { - this.buf.push('}, ' + args + ');'); - } else { - this.buf.push('});'); - } - - } else { - this.buf.push(name + '(' + args + ');'); - } - if (pp) this.buf.push("__indent.pop();") - } else { - this.buf.push('var ' + name + ' = function(' + args + '){'); - this.buf.push('var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {};'); - this.parentIndents++; - this.visit(block); - this.parentIndents--; - this.buf.push('};'); - } - }, - - /** - * Visit `tag` buffering tag markup, generating - * attributes, visiting the `tag`'s code and block. - * - * @param {Tag} tag - * @api public - */ - - visitTag: function(tag){ - this.indents++; - var name = tag.name - , pp = this.pp; - - if (tag.buffer) name = "' + (" + name + ") + '"; - - if (!this.hasCompiledTag) { - if (!this.hasCompiledDoctype && 'html' == name) { - this.visitDoctype(); - } - this.hasCompiledTag = true; - } - - // pretty print - if (pp && !tag.isInline()) - this.prettyIndent(0, true); - - if ((~selfClosing.indexOf(name) || tag.selfClosing) && !this.xml) { - this.buffer('<' + name); - this.visitAttributes(tag.attrs); - this.terse - ? this.buffer('>') - : this.buffer('/>'); - } else { - // Optimize attributes buffering - if (tag.attrs.length) { - this.buffer('<' + name); - if (tag.attrs.length) this.visitAttributes(tag.attrs); - this.buffer('>'); - } else { - this.buffer('<' + name + '>'); - } - if (tag.code) this.visitCode(tag.code); - this.escape = 'pre' == tag.name; - this.visit(tag.block); - - // pretty print - if (pp && !tag.isInline() && 'pre' != tag.name && !tag.canInline()) - this.prettyIndent(0, true); - - this.buffer(''); - } - this.indents--; - }, - - /** - * Visit `filter`, throwing when the filter does not exist. - * - * @param {Filter} filter - * @api public - */ - - visitFilter: function(filter){ - var fn = filters[filter.name]; - - // unknown filter - if (!fn) { - if (filter.isASTFilter) { - throw new Error('unknown ast filter "' + filter.name + ':"'); - } else { - throw new Error('unknown filter ":' + filter.name + '"'); - } - } - - if (filter.isASTFilter) { - this.buf.push(fn(filter.block, this, filter.attrs)); - } else { - var text = filter.block.nodes.map(function(node){ return node.val }).join('\n'); - filter.attrs = filter.attrs || {}; - filter.attrs.filename = this.options.filename; - this.buffer(utils.text(fn(text, filter.attrs))); - } - }, - - /** - * Visit `text` node. - * - * @param {Text} text - * @api public - */ - - visitText: function(text){ - text = utils.text(text.val.replace(/\\/g, '\\\\')); - if (this.escape) text = escape(text); - this.buffer(text); - }, - - /** - * Visit a `comment`, only buffering when the buffer flag is set. - * - * @param {Comment} comment - * @api public - */ - - visitComment: function(comment){ - if (!comment.buffer) return; - if (this.pp) this.prettyIndent(1, true); - this.buffer(''); - }, - - /** - * Visit a `BlockComment`. - * - * @param {Comment} comment - * @api public - */ - - visitBlockComment: function(comment){ - if (!comment.buffer) return; - if (0 == comment.val.trim().indexOf('if')) { - this.buffer(''); - } else { - this.buffer(''); - } - }, - - /** - * Visit `code`, respecting buffer / escape flags. - * If the code is followed by a block, wrap it in - * a self-calling function. - * - * @param {Code} code - * @api public - */ - - visitCode: function(code){ - // Wrap code blocks with {}. - // we only wrap unbuffered code blocks ATM - // since they are usually flow control - - // Buffer code - if (code.buffer) { - var val = code.val.trimLeft(); - this.buf.push('var __val__ = ' + val); - val = 'null == __val__ ? "" : __val__'; - if (code.escape) val = 'escape(' + val + ')'; - this.buf.push("buf.push(" + val + ");"); - } else { - this.buf.push(code.val); - } - - // Block support - if (code.block) { - if (!code.buffer) this.buf.push('{'); - this.visit(code.block); - if (!code.buffer) this.buf.push('}'); - } - }, - - /** - * Visit `each` block. - * - * @param {Each} each - * @api public - */ - - visitEach: function(each){ - this.buf.push('' - + '// iterate ' + each.obj + '\n' - + ';(function(){\n' - + ' if (\'number\' == typeof ' + each.obj + '.length) {\n' - + ' for (var ' + each.key + ' = 0, $$l = ' + each.obj + '.length; ' + each.key + ' < $$l; ' + each.key + '++) {\n' - + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n'); - - this.visit(each.block); - - this.buf.push('' - + ' }\n' - + ' } else {\n' - + ' for (var ' + each.key + ' in ' + each.obj + ') {\n' - + ' if (' + each.obj + '.hasOwnProperty(' + each.key + ')){' - + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n'); - - this.visit(each.block); - - this.buf.push(' }\n'); - - this.buf.push(' }\n }\n}).call(this);\n'); - }, - - /** - * Visit `attrs`. - * - * @param {Array} attrs - * @api public - */ - - visitAttributes: function(attrs){ - var val = this.attrs(attrs); - if (val.inherits) { - this.buf.push("buf.push(attrs(merge({ " + val.buf + - " }, attributes), merge(" + val.escaped + ", escaped, true)));"); - } else if (val.constant) { - eval('var buf={' + val.buf + '};'); - this.buffer(runtime.attrs(buf, JSON.parse(val.escaped)), true); - } else { - this.buf.push("buf.push(attrs({ " + val.buf + " }, " + val.escaped + "));"); - } - }, - - /** - * Compile attributes. - */ - - attrs: function(attrs){ - var buf = [] - , classes = [] - , escaped = {} - , constant = attrs.every(function(attr){ return isConstant(attr.val) }) - , inherits = false; - - if (this.terse) buf.push('terse: true'); - - attrs.forEach(function(attr){ - if (attr.name == 'attributes') return inherits = true; - escaped[attr.name] = attr.escaped; - if (attr.name == 'class') { - classes.push('(' + attr.val + ')'); - } else { - var pair = "'" + attr.name + "':(" + attr.val + ')'; - buf.push(pair); - } - }); - - if (classes.length) { - classes = classes.join(" + ' ' + "); - buf.push("class: " + classes); - } - - return { - buf: buf.join(', ').replace('class:', '"class":'), - escaped: JSON.stringify(escaped), - inherits: inherits, - constant: constant - }; - } -}; - -/** - * Check if expression can be evaluated to a constant - * - * @param {String} expression - * @return {Boolean} - * @api private - */ - -function isConstant(val){ - // Check strings/literals - if (/^ *("([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'|true|false|null|undefined) *$/i.test(val)) - return true; - - // Check numbers - if (!isNaN(Number(val))) - return true; - - // Check arrays - var matches; - if (matches = /^ *\[(.*)\] *$/.exec(val)) - return matches[1].split(',').every(isConstant); - - return false; -} - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -function escape(html){ - return String(html) - .replace(/&(?!\w+;)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -} -}); // module: compiler.js - -require.register("doctypes.js", function(module, exports, require){ - -/*! - * Jade - doctypes - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = { - '5': '' - , 'default': '' - , 'xml': '' - , 'transitional': '' - , 'strict': '' - , 'frameset': '' - , '1.1': '' - , 'basic': '' - , 'mobile': '' -}; -}); // module: doctypes.js - -require.register("filters.js", function(module, exports, require){ - -/*! - * Jade - filters - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = { - - /** - * Wrap text with CDATA block. - */ - - cdata: function(str){ - return ''; - }, - - /** - * Transform sass to css, wrapped in style tags. - */ - - sass: function(str){ - str = str.replace(/\\n/g, '\n'); - var sass = require('sass').render(str).replace(/\n/g, '\\n'); - return ''; - }, - - /** - * Transform stylus to css, wrapped in style tags. - */ - - stylus: function(str, options){ - var ret; - str = str.replace(/\\n/g, '\n'); - var stylus = require('stylus'); - stylus(str, options).render(function(err, css){ - if (err) throw err; - ret = css.replace(/\n/g, '\\n'); - }); - return ''; - }, - - /** - * Transform less to css, wrapped in style tags. - */ - - less: function(str){ - var ret; - str = str.replace(/\\n/g, '\n'); - require('less').render(str, function(err, css){ - if (err) throw err; - ret = ''; - }); - return ret; - }, - - /** - * Transform markdown to html. - */ - - markdown: function(str){ - var md; - - // support markdown / discount - try { - md = require('markdown'); - } catch (err){ - try { - md = require('discount'); - } catch (err) { - try { - md = require('markdown-js'); - } catch (err) { - try { - md = require('marked'); - } catch (err) { - throw new - Error('Cannot find markdown library, install markdown, discount, or marked.'); - } - } - } - } - - str = str.replace(/\\n/g, '\n'); - return md.parse(str).replace(/\n/g, '\\n').replace(/'/g,'''); - }, - - /** - * Transform coffeescript to javascript. - */ - - coffeescript: function(str){ - str = str.replace(/\\n/g, '\n'); - var js = require('coffee-script').compile(str).replace(/\\/g, '\\\\').replace(/\n/g, '\\n'); - return ''; - } -}; - -}); // module: filters.js - -require.register("inline-tags.js", function(module, exports, require){ - -/*! - * Jade - inline tags - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = [ - 'a' - , 'abbr' - , 'acronym' - , 'b' - , 'br' - , 'code' - , 'em' - , 'font' - , 'i' - , 'img' - , 'ins' - , 'kbd' - , 'map' - , 'samp' - , 'small' - , 'span' - , 'strong' - , 'sub' - , 'sup' -]; -}); // module: inline-tags.js - -require.register("jade.js", function(module, exports, require){ -/*! - * Jade - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Parser = require('./parser') - , Lexer = require('./lexer') - , Compiler = require('./compiler') - , runtime = require('./runtime') - -/** - * Library version. - */ - -exports.version = '0.26.1'; - -/** - * Expose self closing tags. - */ - -exports.selfClosing = require('./self-closing'); - -/** - * Default supported doctypes. - */ - -exports.doctypes = require('./doctypes'); - -/** - * Text filters. - */ - -exports.filters = require('./filters'); - -/** - * Utilities. - */ - -exports.utils = require('./utils'); - -/** - * Expose `Compiler`. - */ - -exports.Compiler = Compiler; - -/** - * Expose `Parser`. - */ - -exports.Parser = Parser; - -/** - * Expose `Lexer`. - */ - -exports.Lexer = Lexer; - -/** - * Nodes. - */ - -exports.nodes = require('./nodes'); - -/** - * Jade runtime helpers. - */ - -exports.runtime = runtime; - -/** - * Template function cache. - */ - -exports.cache = {}; - -/** - * Parse the given `str` of jade and return a function body. - * - * @param {String} str - * @param {Object} options - * @return {String} - * @api private - */ - -function parse(str, options){ - try { - // Parse - var parser = new Parser(str, options.filename, options); - - // Compile - var compiler = new (options.compiler || Compiler)(parser.parse(), options) - , js = compiler.compile(); - - // Debug compiler - if (options.debug) { - console.error('\nCompiled Function:\n\n\033[90m%s\033[0m', js.replace(/^/gm, ' ')); - } - - return '' - + 'var buf = [];\n' - + (options.self - ? 'var self = locals || {};\n' + js - : 'with (locals || {}) {\n' + js + '\n}\n') - + 'return buf.join("");'; - } catch (err) { - parser = parser.context(); - runtime.rethrow(err, parser.filename, parser.lexer.lineno); - } -} - -/** - * Compile a `Function` representation of the given jade `str`. - * - * Options: - * - * - `compileDebug` when `false` debugging code is stripped from the compiled template - * - `client` when `true` the helper functions `escape()` etc will reference `jade.escape()` - * for use with the Jade client-side runtime.js - * - * @param {String} str - * @param {Options} options - * @return {Function} - * @api public - */ - -exports.compile = function(str, options){ - var options = options || {} - , client = options.client - , filename = options.filename - ? JSON.stringify(options.filename) - : 'undefined' - , fn; - - if (options.compileDebug !== false) { - fn = [ - 'var __jade = [{ lineno: 1, filename: ' + filename + ' }];' - , 'try {' - , parse(String(str), options) - , '} catch (err) {' - , ' rethrow(err, __jade[0].filename, __jade[0].lineno);' - , '}' - ].join('\n'); - } else { - fn = parse(String(str), options); - } - - if (client) { - fn = 'attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\n' + fn; - } - - fn = new Function('locals, attrs, escape, rethrow, merge', fn); - - if (client) return fn; - - return function(locals){ - return fn(locals, runtime.attrs, runtime.escape, runtime.rethrow, runtime.merge); - }; -}; - -/** - * Render the given `str` of jade and invoke - * the callback `fn(err, str)`. - * - * Options: - * - * - `cache` enable template caching - * - `filename` filename required for `include` / `extends` and caching - * - * @param {String} str - * @param {Object|Function} options or fn - * @param {Function} fn - * @api public - */ - -exports.render = function(str, options, fn){ - // swap args - if ('function' == typeof options) { - fn = options, options = {}; - } - - // cache requires .filename - if (options.cache && !options.filename) { - return fn(new Error('the "filename" option is required for caching')); - } - - try { - var path = options.filename; - var tmpl = options.cache - ? exports.cache[path] || (exports.cache[path] = exports.compile(str, options)) - : exports.compile(str, options); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Render a Jade file at the given `path` and callback `fn(err, str)`. - * - * @param {String} path - * @param {Object|Function} options or callback - * @param {Function} fn - * @api public - */ - -exports.renderFile = function(path, options, fn){ - var key = path + ':string'; - - if ('function' == typeof options) { - fn = options, options = {}; - } - - try { - options.filename = path; - var str = options.cache - ? exports.cache[key] || (exports.cache[key] = fs.readFileSync(path, 'utf8')) - : fs.readFileSync(path, 'utf8'); - exports.render(str, options, fn); - } catch (err) { - fn(err); - } -}; - -/** - * Express support. - */ - -exports.__express = exports.renderFile; - -}); // module: jade.js - -require.register("lexer.js", function(module, exports, require){ - -/*! - * Jade - Lexer - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Initialize `Lexer` with the given `str`. - * - * Options: - * - * - `colons` allow colons for attr delimiters - * - * @param {String} str - * @param {Object} options - * @api private - */ - -var Lexer = module.exports = function Lexer(str, options) { - options = options || {}; - this.input = str.replace(/\r\n|\r/g, '\n'); - this.colons = options.colons; - this.deferredTokens = []; - this.lastIndents = 0; - this.lineno = 1; - this.stash = []; - this.indentStack = []; - this.indentRe = null; - this.pipeless = false; -}; - -/** - * Lexer prototype. - */ - -Lexer.prototype = { - - /** - * Construct a token with the given `type` and `val`. - * - * @param {String} type - * @param {String} val - * @return {Object} - * @api private - */ - - tok: function(type, val){ - return { - type: type - , line: this.lineno - , val: val - } - }, - - /** - * Consume the given `len` of input. - * - * @param {Number} len - * @api private - */ - - consume: function(len){ - this.input = this.input.substr(len); - }, - - /** - * Scan for `type` with the given `regexp`. - * - * @param {String} type - * @param {RegExp} regexp - * @return {Object} - * @api private - */ - - scan: function(regexp, type){ - var captures; - if (captures = regexp.exec(this.input)) { - this.consume(captures[0].length); - return this.tok(type, captures[1]); - } - }, - - /** - * Defer the given `tok`. - * - * @param {Object} tok - * @api private - */ - - defer: function(tok){ - this.deferredTokens.push(tok); - }, - - /** - * Lookahead `n` tokens. - * - * @param {Number} n - * @return {Object} - * @api private - */ - - lookahead: function(n){ - var fetch = n - this.stash.length; - while (fetch-- > 0) this.stash.push(this.next()); - return this.stash[--n]; - }, - - /** - * Return the indexOf `start` / `end` delimiters. - * - * @param {String} start - * @param {String} end - * @return {Number} - * @api private - */ - - indexOfDelimiters: function(start, end){ - var str = this.input - , nstart = 0 - , nend = 0 - , pos = 0; - for (var i = 0, len = str.length; i < len; ++i) { - if (start == str.charAt(i)) { - ++nstart; - } else if (end == str.charAt(i)) { - if (++nend == nstart) { - pos = i; - break; - } - } - } - return pos; - }, - - /** - * Stashed token. - */ - - stashed: function() { - return this.stash.length - && this.stash.shift(); - }, - - /** - * Deferred token. - */ - - deferred: function() { - return this.deferredTokens.length - && this.deferredTokens.shift(); - }, - - /** - * end-of-source. - */ - - eos: function() { - if (this.input.length) return; - if (this.indentStack.length) { - this.indentStack.shift(); - return this.tok('outdent'); - } else { - return this.tok('eos'); - } - }, - - /** - * Blank line. - */ - - blank: function() { - var captures; - if (captures = /^\n *\n/.exec(this.input)) { - this.consume(captures[0].length - 1); - if (this.pipeless) return this.tok('text', ''); - return this.next(); - } - }, - - /** - * Comment. - */ - - comment: function() { - var captures; - if (captures = /^ *\/\/(-)?([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('comment', captures[2]); - tok.buffer = '-' != captures[1]; - return tok; - } - }, - - /** - * Interpolated tag. - */ - - interpolation: function() { - var captures; - if (captures = /^#\{(.*?)\}/.exec(this.input)) { - this.consume(captures[0].length); - return this.tok('interpolation', captures[1]); - } - }, - - /** - * Tag. - */ - - tag: function() { - var captures; - if (captures = /^(\w[-:\w]*)(\/?)/.exec(this.input)) { - this.consume(captures[0].length); - var tok, name = captures[1]; - if (':' == name[name.length - 1]) { - name = name.slice(0, -1); - tok = this.tok('tag', name); - this.defer(this.tok(':')); - while (' ' == this.input[0]) this.input = this.input.substr(1); - } else { - tok = this.tok('tag', name); - } - tok.selfClosing = !! captures[2]; - return tok; - } - }, - - /** - * Filter. - */ - - filter: function() { - return this.scan(/^:(\w+)/, 'filter'); - }, - - /** - * Doctype. - */ - - doctype: function() { - return this.scan(/^(?:!!!|doctype) *([^\n]+)?/, 'doctype'); - }, - - /** - * Id. - */ - - id: function() { - return this.scan(/^#([\w-]+)/, 'id'); - }, - - /** - * Class. - */ - - className: function() { - return this.scan(/^\.([\w-]+)/, 'class'); - }, - - /** - * Text. - */ - - text: function() { - return this.scan(/^(?:\| ?| ?)?([^\n]+)/, 'text'); - }, - - /** - * Extends. - */ - - "extends": function() { - return this.scan(/^extends? +([^\n]+)/, 'extends'); - }, - - /** - * Block prepend. - */ - - prepend: function() { - var captures; - if (captures = /^prepend +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = 'prepend' - , name = captures[1] - , tok = this.tok('block', name); - tok.mode = mode; - return tok; - } - }, - - /** - * Block append. - */ - - append: function() { - var captures; - if (captures = /^append +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = 'append' - , name = captures[1] - , tok = this.tok('block', name); - tok.mode = mode; - return tok; - } - }, - - /** - * Block. - */ - - block: function() { - var captures; - if (captures = /^block\b *(?:(prepend|append) +)?([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = captures[1] || 'replace' - , name = captures[2] - , tok = this.tok('block', name); - - tok.mode = mode; - return tok; - } - }, - - /** - * Yield. - */ - - yield: function() { - return this.scan(/^yield */, 'yield'); - }, - - /** - * Include. - */ - - include: function() { - return this.scan(/^include +([^\n]+)/, 'include'); - }, - - /** - * Case. - */ - - "case": function() { - return this.scan(/^case +([^\n]+)/, 'case'); - }, - - /** - * When. - */ - - when: function() { - return this.scan(/^when +([^:\n]+)/, 'when'); - }, - - /** - * Default. - */ - - "default": function() { - return this.scan(/^default */, 'default'); - }, - - /** - * Assignment. - */ - - assignment: function() { - var captures; - if (captures = /^(\w+) += *([^;\n]+)( *;? *)/.exec(this.input)) { - this.consume(captures[0].length); - var name = captures[1] - , val = captures[2]; - return this.tok('code', 'var ' + name + ' = (' + val + ');'); - } - }, - - /** - * Call mixin. - */ - - call: function(){ - var captures; - if (captures = /^\+([-\w]+)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('call', captures[1]); - - // Check for args (not attributes) - if (captures = /^ *\((.*?)\)/.exec(this.input)) { - if (!/^ *[-\w]+ *=/.test(captures[1])) { - this.consume(captures[0].length); - tok.args = captures[1]; - } - } - - return tok; - } - }, - - /** - * Mixin. - */ - - mixin: function(){ - var captures; - if (captures = /^mixin +([-\w]+)(?: *\((.*)\))?/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('mixin', captures[1]); - tok.args = captures[2]; - return tok; - } - }, - - /** - * Conditional. - */ - - conditional: function() { - var captures; - if (captures = /^(if|unless|else if|else)\b([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var type = captures[1] - , js = captures[2]; - - switch (type) { - case 'if': js = 'if (' + js + ')'; break; - case 'unless': js = 'if (!(' + js + '))'; break; - case 'else if': js = 'else if (' + js + ')'; break; - case 'else': js = 'else'; break; - } - - return this.tok('code', js); - } - }, - - /** - * While. - */ - - "while": function() { - var captures; - if (captures = /^while +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - return this.tok('code', 'while (' + captures[1] + ')'); - } - }, - - /** - * Each. - */ - - each: function() { - var captures; - if (captures = /^(?:- *)?(?:each|for) +(\w+)(?: *, *(\w+))? * in *([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('each', captures[1]); - tok.key = captures[2] || '$index'; - tok.code = captures[3]; - return tok; - } - }, - - /** - * Code. - */ - - code: function() { - var captures; - if (captures = /^(!?=|-)([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var flags = captures[1]; - captures[1] = captures[2]; - var tok = this.tok('code', captures[1]); - tok.escape = flags[0] === '='; - tok.buffer = flags[0] === '=' || flags[1] === '='; - return tok; - } - }, - - /** - * Attributes. - */ - - attrs: function() { - if ('(' == this.input.charAt(0)) { - var index = this.indexOfDelimiters('(', ')') - , str = this.input.substr(1, index-1) - , tok = this.tok('attrs') - , len = str.length - , colons = this.colons - , states = ['key'] - , escapedAttr - , key = '' - , val = '' - , quote - , c - , p; - - function state(){ - return states[states.length - 1]; - } - - function interpolate(attr) { - return attr.replace(/#\{([^}]+)\}/g, function(_, expr){ - return quote + " + (" + expr + ") + " + quote; - }); - } - - this.consume(index + 1); - tok.attrs = {}; - tok.escaped = {}; - - function parse(c) { - var real = c; - // TODO: remove when people fix ":" - if (colons && ':' == c) c = '='; - switch (c) { - case ',': - case '\n': - switch (state()) { - case 'expr': - case 'array': - case 'string': - case 'object': - val += c; - break; - default: - states.push('key'); - val = val.trim(); - key = key.trim(); - if ('' == key) return; - key = key.replace(/^['"]|['"]$/g, '').replace('!', ''); - tok.escaped[key] = escapedAttr; - tok.attrs[key] = '' == val - ? true - : interpolate(val); - key = val = ''; - } - break; - case '=': - switch (state()) { - case 'key char': - key += real; - break; - case 'val': - case 'expr': - case 'array': - case 'string': - case 'object': - val += real; - break; - default: - escapedAttr = '!' != p; - states.push('val'); - } - break; - case '(': - if ('val' == state() - || 'expr' == state()) states.push('expr'); - val += c; - break; - case ')': - if ('expr' == state() - || 'val' == state()) states.pop(); - val += c; - break; - case '{': - if ('val' == state()) states.push('object'); - val += c; - break; - case '}': - if ('object' == state()) states.pop(); - val += c; - break; - case '[': - if ('val' == state()) states.push('array'); - val += c; - break; - case ']': - if ('array' == state()) states.pop(); - val += c; - break; - case '"': - case "'": - switch (state()) { - case 'key': - states.push('key char'); - break; - case 'key char': - states.pop(); - break; - case 'string': - if (c == quote) states.pop(); - val += c; - break; - default: - states.push('string'); - val += c; - quote = c; - } - break; - case '': - break; - default: - switch (state()) { - case 'key': - case 'key char': - key += c; - break; - default: - val += c; - } - } - p = c; - } - - for (var i = 0; i < len; ++i) { - parse(str.charAt(i)); - } - - parse(','); - - if ('/' == this.input.charAt(0)) { - this.consume(1); - tok.selfClosing = true; - } - - return tok; - } - }, - - /** - * Indent | Outdent | Newline. - */ - - indent: function() { - var captures, re; - - // established regexp - if (this.indentRe) { - captures = this.indentRe.exec(this.input); - // determine regexp - } else { - // tabs - re = /^\n(\t*) */; - captures = re.exec(this.input); - - // spaces - if (captures && !captures[1].length) { - re = /^\n( *)/; - captures = re.exec(this.input); - } - - // established - if (captures && captures[1].length) this.indentRe = re; - } - - if (captures) { - var tok - , indents = captures[1].length; - - ++this.lineno; - this.consume(indents + 1); - - if (' ' == this.input[0] || '\t' == this.input[0]) { - throw new Error('Invalid indentation, you can use tabs or spaces but not both'); - } - - // blank line - if ('\n' == this.input[0]) return this.tok('newline'); - - // outdent - if (this.indentStack.length && indents < this.indentStack[0]) { - while (this.indentStack.length && this.indentStack[0] > indents) { - this.stash.push(this.tok('outdent')); - this.indentStack.shift(); - } - tok = this.stash.pop(); - // indent - } else if (indents && indents != this.indentStack[0]) { - this.indentStack.unshift(indents); - tok = this.tok('indent', indents); - // newline - } else { - tok = this.tok('newline'); - } - - return tok; - } - }, - - /** - * Pipe-less text consumed only when - * pipeless is true; - */ - - pipelessText: function() { - if (this.pipeless) { - if ('\n' == this.input[0]) return; - var i = this.input.indexOf('\n'); - if (-1 == i) i = this.input.length; - var str = this.input.substr(0, i); - this.consume(str.length); - return this.tok('text', str); - } - }, - - /** - * ':' - */ - - colon: function() { - return this.scan(/^: */, ':'); - }, - - /** - * Return the next token object, or those - * previously stashed by lookahead. - * - * @return {Object} - * @api private - */ - - advance: function(){ - return this.stashed() - || this.next(); - }, - - /** - * Return the next token object. - * - * @return {Object} - * @api private - */ - - next: function() { - return this.deferred() - || this.blank() - || this.eos() - || this.pipelessText() - || this.yield() - || this.doctype() - || this.interpolation() - || this["case"]() - || this.when() - || this["default"]() - || this["extends"]() - || this.append() - || this.prepend() - || this.block() - || this.include() - || this.mixin() - || this.call() - || this.conditional() - || this.each() - || this["while"]() - || this.assignment() - || this.tag() - || this.filter() - || this.code() - || this.id() - || this.className() - || this.attrs() - || this.indent() - || this.comment() - || this.colon() - || this.text(); - } -}; - -}); // module: lexer.js - -require.register("nodes/attrs.js", function(module, exports, require){ - -/*! - * Jade - nodes - Attrs - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'), - Block = require('./block'); - -/** - * Initialize a `Attrs` node. - * - * @api public - */ - -var Attrs = module.exports = function Attrs() { - this.attrs = []; -}; - -/** - * Inherit from `Node`. - */ - -Attrs.prototype = new Node; -Attrs.prototype.constructor = Attrs; - - -/** - * Set attribute `name` to `val`, keep in mind these become - * part of a raw js object literal, so to quote a value you must - * '"quote me"', otherwise or example 'user.name' is literal JavaScript. - * - * @param {String} name - * @param {String} val - * @param {Boolean} escaped - * @return {Tag} for chaining - * @api public - */ - -Attrs.prototype.setAttribute = function(name, val, escaped){ - this.attrs.push({ name: name, val: val, escaped: escaped }); - return this; -}; - -/** - * Remove attribute `name` when present. - * - * @param {String} name - * @api public - */ - -Attrs.prototype.removeAttribute = function(name){ - for (var i = 0, len = this.attrs.length; i < len; ++i) { - if (this.attrs[i] && this.attrs[i].name == name) { - delete this.attrs[i]; - } - } -}; - -/** - * Get attribute value by `name`. - * - * @param {String} name - * @return {String} - * @api public - */ - -Attrs.prototype.getAttribute = function(name){ - for (var i = 0, len = this.attrs.length; i < len; ++i) { - if (this.attrs[i] && this.attrs[i].name == name) { - return this.attrs[i].val; - } - } -}; - -}); // module: nodes/attrs.js - -require.register("nodes/block-comment.js", function(module, exports, require){ - -/*! - * Jade - nodes - BlockComment - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `BlockComment` with the given `block`. - * - * @param {String} val - * @param {Block} block - * @param {Boolean} buffer - * @api public - */ - -var BlockComment = module.exports = function BlockComment(val, block, buffer) { - this.block = block; - this.val = val; - this.buffer = buffer; -}; - -/** - * Inherit from `Node`. - */ - -BlockComment.prototype = new Node; -BlockComment.prototype.constructor = BlockComment; - -}); // module: nodes/block-comment.js - -require.register("nodes/block.js", function(module, exports, require){ - -/*! - * Jade - nodes - Block - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a new `Block` with an optional `node`. - * - * @param {Node} node - * @api public - */ - -var Block = module.exports = function Block(node){ - this.nodes = []; - if (node) this.push(node); -}; - -/** - * Inherit from `Node`. - */ - -Block.prototype = new Node; -Block.prototype.constructor = Block; - - -/** - * Block flag. - */ - -Block.prototype.isBlock = true; - -/** - * Replace the nodes in `other` with the nodes - * in `this` block. - * - * @param {Block} other - * @api private - */ - -Block.prototype.replace = function(other){ - other.nodes = this.nodes; -}; - -/** - * Pust the given `node`. - * - * @param {Node} node - * @return {Number} - * @api public - */ - -Block.prototype.push = function(node){ - return this.nodes.push(node); -}; - -/** - * Check if this block is empty. - * - * @return {Boolean} - * @api public - */ - -Block.prototype.isEmpty = function(){ - return 0 == this.nodes.length; -}; - -/** - * Unshift the given `node`. - * - * @param {Node} node - * @return {Number} - * @api public - */ - -Block.prototype.unshift = function(node){ - return this.nodes.unshift(node); -}; - -/** - * Return the "last" block, or the first `yield` node. - * - * @return {Block} - * @api private - */ - -Block.prototype.includeBlock = function(){ - var ret = this - , node; - - for (var i = 0, len = this.nodes.length; i < len; ++i) { - node = this.nodes[i]; - if (node.yield) return node; - else if (node.textOnly) continue; - else if (node.includeBlock) ret = node.includeBlock(); - else if (node.block && !node.block.isEmpty()) ret = node.block.includeBlock(); - } - - return ret; -}; - -/** - * Return a clone of this block. - * - * @return {Block} - * @api private - */ - -Block.prototype.clone = function(){ - var clone = new Block; - for (var i = 0, len = this.nodes.length; i < len; ++i) { - clone.push(this.nodes[i].clone()); - } - return clone; -}; - - -}); // module: nodes/block.js - -require.register("nodes/case.js", function(module, exports, require){ - -/*! - * Jade - nodes - Case - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a new `Case` with `expr`. - * - * @param {String} expr - * @api public - */ - -var Case = exports = module.exports = function Case(expr, block){ - this.expr = expr; - this.block = block; -}; - -/** - * Inherit from `Node`. - */ - -Case.prototype = new Node; -Case.prototype.constructor = Case; - - -var When = exports.When = function When(expr, block){ - this.expr = expr; - this.block = block; - this.debug = false; -}; - -/** - * Inherit from `Node`. - */ - -When.prototype = new Node; -When.prototype.constructor = When; - - - -}); // module: nodes/case.js - -require.register("nodes/code.js", function(module, exports, require){ - -/*! - * Jade - nodes - Code - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Code` node with the given code `val`. - * Code may also be optionally buffered and escaped. - * - * @param {String} val - * @param {Boolean} buffer - * @param {Boolean} escape - * @api public - */ - -var Code = module.exports = function Code(val, buffer, escape) { - this.val = val; - this.buffer = buffer; - this.escape = escape; - if (val.match(/^ *else/)) this.debug = false; -}; - -/** - * Inherit from `Node`. - */ - -Code.prototype = new Node; -Code.prototype.constructor = Code; - -}); // module: nodes/code.js - -require.register("nodes/comment.js", function(module, exports, require){ - -/*! - * Jade - nodes - Comment - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Comment` with the given `val`, optionally `buffer`, - * otherwise the comment may render in the output. - * - * @param {String} val - * @param {Boolean} buffer - * @api public - */ - -var Comment = module.exports = function Comment(val, buffer) { - this.val = val; - this.buffer = buffer; -}; - -/** - * Inherit from `Node`. - */ - -Comment.prototype = new Node; -Comment.prototype.constructor = Comment; - -}); // module: nodes/comment.js - -require.register("nodes/doctype.js", function(module, exports, require){ - -/*! - * Jade - nodes - Doctype - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Doctype` with the given `val`. - * - * @param {String} val - * @api public - */ - -var Doctype = module.exports = function Doctype(val) { - this.val = val; -}; - -/** - * Inherit from `Node`. - */ - -Doctype.prototype = new Node; -Doctype.prototype.constructor = Doctype; - -}); // module: nodes/doctype.js - -require.register("nodes/each.js", function(module, exports, require){ - -/*! - * Jade - nodes - Each - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize an `Each` node, representing iteration - * - * @param {String} obj - * @param {String} val - * @param {String} key - * @param {Block} block - * @api public - */ - -var Each = module.exports = function Each(obj, val, key, block) { - this.obj = obj; - this.val = val; - this.key = key; - this.block = block; -}; - -/** - * Inherit from `Node`. - */ - -Each.prototype = new Node; -Each.prototype.constructor = Each; - -}); // module: nodes/each.js - -require.register("nodes/filter.js", function(module, exports, require){ - -/*! - * Jade - nodes - Filter - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node') - , Block = require('./block'); - -/** - * Initialize a `Filter` node with the given - * filter `name` and `block`. - * - * @param {String} name - * @param {Block|Node} block - * @api public - */ - -var Filter = module.exports = function Filter(name, block, attrs) { - this.name = name; - this.block = block; - this.attrs = attrs; - this.isASTFilter = !block.nodes.every(function(node){ return node.isText }); -}; - -/** - * Inherit from `Node`. - */ - -Filter.prototype = new Node; -Filter.prototype.constructor = Filter; - -}); // module: nodes/filter.js - -require.register("nodes/index.js", function(module, exports, require){ - -/*! - * Jade - nodes - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -exports.Node = require('./node'); -exports.Tag = require('./tag'); -exports.Code = require('./code'); -exports.Each = require('./each'); -exports.Case = require('./case'); -exports.Text = require('./text'); -exports.Block = require('./block'); -exports.Mixin = require('./mixin'); -exports.Filter = require('./filter'); -exports.Comment = require('./comment'); -exports.Literal = require('./literal'); -exports.BlockComment = require('./block-comment'); -exports.Doctype = require('./doctype'); - -}); // module: nodes/index.js - -require.register("nodes/literal.js", function(module, exports, require){ - -/*! - * Jade - nodes - Literal - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Literal` node with the given `str. - * - * @param {String} str - * @api public - */ - -var Literal = module.exports = function Literal(str) { - this.str = str - .replace(/\\/g, "\\\\") - .replace(/\n|\r\n/g, "\\n") - .replace(/'/g, "\\'"); -}; - -/** - * Inherit from `Node`. - */ - -Literal.prototype = new Node; -Literal.prototype.constructor = Literal; - - -}); // module: nodes/literal.js - -require.register("nodes/mixin.js", function(module, exports, require){ - -/*! - * Jade - nodes - Mixin - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Attrs = require('./attrs'); - -/** - * Initialize a new `Mixin` with `name` and `block`. - * - * @param {String} name - * @param {String} args - * @param {Block} block - * @api public - */ - -var Mixin = module.exports = function Mixin(name, args, block, call){ - this.name = name; - this.args = args; - this.block = block; - this.attrs = []; - this.call = call; -}; - -/** - * Inherit from `Attrs`. - */ - -Mixin.prototype = new Attrs; -Mixin.prototype.constructor = Mixin; - - - -}); // module: nodes/mixin.js - -require.register("nodes/node.js", function(module, exports, require){ - -/*! - * Jade - nodes - Node - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Initialize a `Node`. - * - * @api public - */ - -var Node = module.exports = function Node(){}; - -/** - * Clone this node (return itself) - * - * @return {Node} - * @api private - */ - -Node.prototype.clone = function(){ - return this; -}; - -}); // module: nodes/node.js - -require.register("nodes/tag.js", function(module, exports, require){ - -/*! - * Jade - nodes - Tag - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Attrs = require('./attrs'), - Block = require('./block'), - inlineTags = require('../inline-tags'); - -/** - * Initialize a `Tag` node with the given tag `name` and optional `block`. - * - * @param {String} name - * @param {Block} block - * @api public - */ - -var Tag = module.exports = function Tag(name, block) { - this.name = name; - this.attrs = []; - this.block = block || new Block; -}; - -/** - * Inherit from `Attrs`. - */ - -Tag.prototype = new Attrs; -Tag.prototype.constructor = Tag; - - -/** - * Clone this tag. - * - * @return {Tag} - * @api private - */ - -Tag.prototype.clone = function(){ - var clone = new Tag(this.name, this.block.clone()); - clone.line = this.line; - clone.attrs = this.attrs; - clone.textOnly = this.textOnly; - return clone; -}; - -/** - * Check if this tag is an inline tag. - * - * @return {Boolean} - * @api private - */ - -Tag.prototype.isInline = function(){ - return ~inlineTags.indexOf(this.name); -}; - -/** - * Check if this tag's contents can be inlined. Used for pretty printing. - * - * @return {Boolean} - * @api private - */ - -Tag.prototype.canInline = function(){ - var nodes = this.block.nodes; - - function isInline(node){ - // Recurse if the node is a block - if (node.isBlock) return node.nodes.every(isInline); - return node.isText || (node.isInline && node.isInline()); - } - - // Empty tag - if (!nodes.length) return true; - - // Text-only or inline-only tag - if (1 == nodes.length) return isInline(nodes[0]); - - // Multi-line inline-only tag - if (this.block.nodes.every(isInline)) { - for (var i = 1, len = nodes.length; i < len; ++i) { - if (nodes[i-1].isText && nodes[i].isText) - return false; - } - return true; - } - - // Mixed tag - return false; -}; -}); // module: nodes/tag.js - -require.register("nodes/text.js", function(module, exports, require){ - -/*! - * Jade - nodes - Text - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Text` node with optional `line`. - * - * @param {String} line - * @api public - */ - -var Text = module.exports = function Text(line) { - this.val = ''; - if ('string' == typeof line) this.val = line; -}; - -/** - * Inherit from `Node`. - */ - -Text.prototype = new Node; -Text.prototype.constructor = Text; - - -/** - * Flag as text. - */ - -Text.prototype.isText = true; -}); // module: nodes/text.js - -require.register("parser.js", function(module, exports, require){ - -/*! - * Jade - Parser - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Lexer = require('./lexer') - , nodes = require('./nodes'); - -/** - * Initialize `Parser` with the given input `str` and `filename`. - * - * @param {String} str - * @param {String} filename - * @param {Object} options - * @api public - */ - -var Parser = exports = module.exports = function Parser(str, filename, options){ - this.input = str; - this.lexer = new Lexer(str, options); - this.filename = filename; - this.blocks = {}; - this.mixins = {}; - this.options = options; - this.contexts = [this]; -}; - -/** - * Tags that may not contain tags. - */ - -var textOnly = exports.textOnly = ['script', 'style']; - -/** - * Parser prototype. - */ - -Parser.prototype = { - - /** - * Push `parser` onto the context stack, - * or pop and return a `Parser`. - */ - - context: function(parser){ - if (parser) { - this.contexts.push(parser); - } else { - return this.contexts.pop(); - } - }, - - /** - * Return the next token object. - * - * @return {Object} - * @api private - */ - - advance: function(){ - return this.lexer.advance(); - }, - - /** - * Skip `n` tokens. - * - * @param {Number} n - * @api private - */ - - skip: function(n){ - while (n--) this.advance(); - }, - - /** - * Single token lookahead. - * - * @return {Object} - * @api private - */ - - peek: function() { - return this.lookahead(1); - }, - - /** - * Return lexer lineno. - * - * @return {Number} - * @api private - */ - - line: function() { - return this.lexer.lineno; - }, - - /** - * `n` token lookahead. - * - * @param {Number} n - * @return {Object} - * @api private - */ - - lookahead: function(n){ - return this.lexer.lookahead(n); - }, - - /** - * Parse input returning a string of js for evaluation. - * - * @return {String} - * @api public - */ - - parse: function(){ - var block = new nodes.Block, parser; - block.line = this.line(); - - while ('eos' != this.peek().type) { - if ('newline' == this.peek().type) { - this.advance(); - } else { - block.push(this.parseExpr()); - } - } - - if (parser = this.extending) { - this.context(parser); - var ast = parser.parse(); - this.context(); - // hoist mixins - for (var name in this.mixins) - ast.unshift(this.mixins[name]); - return ast; - } - - return block; - }, - - /** - * Expect the given type, or throw an exception. - * - * @param {String} type - * @api private - */ - - expect: function(type){ - if (this.peek().type === type) { - return this.advance(); - } else { - throw new Error('expected "' + type + '", but got "' + this.peek().type + '"'); - } - }, - - /** - * Accept the given `type`. - * - * @param {String} type - * @api private - */ - - accept: function(type){ - if (this.peek().type === type) { - return this.advance(); - } - }, - - /** - * tag - * | doctype - * | mixin - * | include - * | filter - * | comment - * | text - * | each - * | code - * | yield - * | id - * | class - * | interpolation - */ - - parseExpr: function(){ - switch (this.peek().type) { - case 'tag': - return this.parseTag(); - case 'mixin': - return this.parseMixin(); - case 'block': - return this.parseBlock(); - case 'case': - return this.parseCase(); - case 'when': - return this.parseWhen(); - case 'default': - return this.parseDefault(); - case 'extends': - return this.parseExtends(); - case 'include': - return this.parseInclude(); - case 'doctype': - return this.parseDoctype(); - case 'filter': - return this.parseFilter(); - case 'comment': - return this.parseComment(); - case 'text': - return this.parseText(); - case 'each': - return this.parseEach(); - case 'code': - return this.parseCode(); - case 'call': - return this.parseCall(); - case 'interpolation': - return this.parseInterpolation(); - case 'yield': - this.advance(); - var block = new nodes.Block; - block.yield = true; - return block; - case 'id': - case 'class': - var tok = this.advance(); - this.lexer.defer(this.lexer.tok('tag', 'div')); - this.lexer.defer(tok); - return this.parseExpr(); - default: - throw new Error('unexpected token "' + this.peek().type + '"'); - } - }, - - /** - * Text - */ - - parseText: function(){ - var tok = this.expect('text') - , node = new nodes.Text(tok.val); - node.line = this.line(); - return node; - }, - - /** - * ':' expr - * | block - */ - - parseBlockExpansion: function(){ - if (':' == this.peek().type) { - this.advance(); - return new nodes.Block(this.parseExpr()); - } else { - return this.block(); - } - }, - - /** - * case - */ - - parseCase: function(){ - var val = this.expect('case').val - , node = new nodes.Case(val); - node.line = this.line(); - node.block = this.block(); - return node; - }, - - /** - * when - */ - - parseWhen: function(){ - var val = this.expect('when').val - return new nodes.Case.When(val, this.parseBlockExpansion()); - }, - - /** - * default - */ - - parseDefault: function(){ - this.expect('default'); - return new nodes.Case.When('default', this.parseBlockExpansion()); - }, - - /** - * code - */ - - parseCode: function(){ - var tok = this.expect('code') - , node = new nodes.Code(tok.val, tok.buffer, tok.escape) - , block - , i = 1; - node.line = this.line(); - while (this.lookahead(i) && 'newline' == this.lookahead(i).type) ++i; - block = 'indent' == this.lookahead(i).type; - if (block) { - this.skip(i-1); - node.block = this.block(); - } - return node; - }, - - /** - * comment - */ - - parseComment: function(){ - var tok = this.expect('comment') - , node; - - if ('indent' == this.peek().type) { - node = new nodes.BlockComment(tok.val, this.block(), tok.buffer); - } else { - node = new nodes.Comment(tok.val, tok.buffer); - } - - node.line = this.line(); - return node; - }, - - /** - * doctype - */ - - parseDoctype: function(){ - var tok = this.expect('doctype') - , node = new nodes.Doctype(tok.val); - node.line = this.line(); - return node; - }, - - /** - * filter attrs? text-block - */ - - parseFilter: function(){ - var block - , tok = this.expect('filter') - , attrs = this.accept('attrs'); - - this.lexer.pipeless = true; - block = this.parseTextBlock(); - this.lexer.pipeless = false; - - var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs); - node.line = this.line(); - return node; - }, - - /** - * tag ':' attrs? block - */ - - parseASTFilter: function(){ - var block - , tok = this.expect('tag') - , attrs = this.accept('attrs'); - - this.expect(':'); - block = this.block(); - - var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs); - node.line = this.line(); - return node; - }, - - /** - * each block - */ - - parseEach: function(){ - var tok = this.expect('each') - , node = new nodes.Each(tok.code, tok.val, tok.key); - node.line = this.line(); - node.block = this.block(); - return node; - }, - - /** - * 'extends' name - */ - - parseExtends: function(){ - var path = require('path') - , fs = require('fs') - , dirname = path.dirname - , basename = path.basename - , join = path.join; - - if (!this.filename) - throw new Error('the "filename" option is required to extend templates'); - - var path = this.expect('extends').val.trim() - , dir = dirname(this.filename); - - var path = join(dir, path + '.jade') - , str = fs.readFileSync(path, 'utf8') - , parser = new Parser(str, path, this.options); - - parser.blocks = this.blocks; - parser.contexts = this.contexts; - this.extending = parser; - - // TODO: null node - return new nodes.Literal(''); - }, - - /** - * 'block' name block - */ - - parseBlock: function(){ - var block = this.expect('block') - , mode = block.mode - , name = block.val.trim(); - - block = 'indent' == this.peek().type - ? this.block() - : new nodes.Block(new nodes.Literal('')); - - var prev = this.blocks[name]; - - if (prev) { - switch (prev.mode) { - case 'append': - block.nodes = block.nodes.concat(prev.nodes); - prev = block; - break; - case 'prepend': - block.nodes = prev.nodes.concat(block.nodes); - prev = block; - break; - } - } - - block.mode = mode; - return this.blocks[name] = prev || block; - }, - - /** - * include block? - */ - - parseInclude: function(){ - var path = require('path') - , fs = require('fs') - , dirname = path.dirname - , basename = path.basename - , join = path.join; - - var path = this.expect('include').val.trim() - , dir = dirname(this.filename); - - if (!this.filename) - throw new Error('the "filename" option is required to use includes'); - - // no extension - if (!~basename(path).indexOf('.')) { - path += '.jade'; - } - - // non-jade - if ('.jade' != path.substr(-5)) { - var path = join(dir, path) - , str = fs.readFileSync(path, 'utf8'); - return new nodes.Literal(str); - } - - var path = join(dir, path) - , str = fs.readFileSync(path, 'utf8') - , parser = new Parser(str, path, this.options); - parser.blocks = this.blocks; - parser.mixins = this.mixins; - - this.context(parser); - var ast = parser.parse(); - this.context(); - ast.filename = path; - - if ('indent' == this.peek().type) { - ast.includeBlock().push(this.block()); - } - - return ast; - }, - - /** - * call ident block - */ - - parseCall: function(){ - var tok = this.expect('call') - , name = tok.val - , args = tok.args - , mixin = new nodes.Mixin(name, args, new nodes.Block, true); - - this.tag(mixin); - if (mixin.block.isEmpty()) mixin.block = null; - return mixin; - }, - - /** - * mixin block - */ - - parseMixin: function(){ - var tok = this.expect('mixin') - , name = tok.val - , args = tok.args - , mixin; - - // definition - if ('indent' == this.peek().type) { - mixin = new nodes.Mixin(name, args, this.block(), false); - this.mixins[name] = mixin; - return mixin; - // call - } else { - return new nodes.Mixin(name, args, null, true); - } - }, - - /** - * indent (text | newline)* outdent - */ - - parseTextBlock: function(){ - var block = new nodes.Block; - block.line = this.line(); - var spaces = this.expect('indent').val; - if (null == this._spaces) this._spaces = spaces; - var indent = Array(spaces - this._spaces + 1).join(' '); - while ('outdent' != this.peek().type) { - switch (this.peek().type) { - case 'newline': - this.advance(); - break; - case 'indent': - this.parseTextBlock().nodes.forEach(function(node){ - block.push(node); - }); - break; - default: - var text = new nodes.Text(indent + this.advance().val); - text.line = this.line(); - block.push(text); - } - } - - if (spaces == this._spaces) this._spaces = null; - this.expect('outdent'); - return block; - }, - - /** - * indent expr* outdent - */ - - block: function(){ - var block = new nodes.Block; - block.line = this.line(); - this.expect('indent'); - while ('outdent' != this.peek().type) { - if ('newline' == this.peek().type) { - this.advance(); - } else { - block.push(this.parseExpr()); - } - } - this.expect('outdent'); - return block; - }, - - /** - * interpolation (attrs | class | id)* (text | code | ':')? newline* block? - */ - - parseInterpolation: function(){ - var tok = this.advance(); - var tag = new nodes.Tag(tok.val); - tag.buffer = true; - return this.tag(tag); - }, - - /** - * tag (attrs | class | id)* (text | code | ':')? newline* block? - */ - - parseTag: function(){ - // ast-filter look-ahead - var i = 2; - if ('attrs' == this.lookahead(i).type) ++i; - if (':' == this.lookahead(i).type) { - if ('indent' == this.lookahead(++i).type) { - return this.parseASTFilter(); - } - } - - var tok = this.advance() - , tag = new nodes.Tag(tok.val); - - tag.selfClosing = tok.selfClosing; - - return this.tag(tag); - }, - - /** - * Parse tag. - */ - - tag: function(tag){ - var dot; - - tag.line = this.line(); - - // (attrs | class | id)* - out: - while (true) { - switch (this.peek().type) { - case 'id': - case 'class': - var tok = this.advance(); - tag.setAttribute(tok.type, "'" + tok.val + "'"); - continue; - case 'attrs': - var tok = this.advance() - , obj = tok.attrs - , escaped = tok.escaped - , names = Object.keys(obj); - - if (tok.selfClosing) tag.selfClosing = true; - - for (var i = 0, len = names.length; i < len; ++i) { - var name = names[i] - , val = obj[name]; - tag.setAttribute(name, val, escaped[name]); - } - continue; - default: - break out; - } - } - - // check immediate '.' - if ('.' == this.peek().val) { - dot = tag.textOnly = true; - this.advance(); - } - - // (text | code | ':')? - switch (this.peek().type) { - case 'text': - tag.block.push(this.parseText()); - break; - case 'code': - tag.code = this.parseCode(); - break; - case ':': - this.advance(); - tag.block = new nodes.Block; - tag.block.push(this.parseExpr()); - break; - } - - // newline* - while ('newline' == this.peek().type) this.advance(); - - tag.textOnly = tag.textOnly || ~textOnly.indexOf(tag.name); - - // script special-case - if ('script' == tag.name) { - var type = tag.getAttribute('type'); - if (!dot && type && 'text/javascript' != type.replace(/^['"]|['"]$/g, '')) { - tag.textOnly = false; - } - } - - // block? - if ('indent' == this.peek().type) { - if (tag.textOnly) { - this.lexer.pipeless = true; - tag.block = this.parseTextBlock(); - this.lexer.pipeless = false; - } else { - var block = this.block(); - if (tag.block) { - for (var i = 0, len = block.nodes.length; i < len; ++i) { - tag.block.push(block.nodes[i]); - } - } else { - tag.block = block; - } - } - } - - return tag; - } -}; - -}); // module: parser.js - -require.register("runtime.js", function(module, exports, require){ - -/*! - * Jade - runtime - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Lame Array.isArray() polyfill for now. - */ - -if (!Array.isArray) { - Array.isArray = function(arr){ - return '[object Array]' == Object.prototype.toString.call(arr); - }; -} - -/** - * Lame Object.keys() polyfill for now. - */ - -if (!Object.keys) { - Object.keys = function(obj){ - var arr = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - arr.push(key); - } - } - return arr; - } -} - -/** - * Merge two attribute objects giving precedence - * to values in object `b`. Classes are special-cased - * allowing for arrays and merging/joining appropriately - * resulting in a string. - * - * @param {Object} a - * @param {Object} b - * @return {Object} a - * @api private - */ - -exports.merge = function merge(a, b) { - var ac = a['class']; - var bc = b['class']; - - if (ac || bc) { - ac = ac || []; - bc = bc || []; - if (!Array.isArray(ac)) ac = [ac]; - if (!Array.isArray(bc)) bc = [bc]; - ac = ac.filter(nulls); - bc = bc.filter(nulls); - a['class'] = ac.concat(bc).join(' '); - } - - for (var key in b) { - if (key != 'class') { - a[key] = b[key]; - } - } - - return a; -}; - -/** - * Filter null `val`s. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function nulls(val) { - return val != null; -} - -/** - * Render the given attributes object. - * - * @param {Object} obj - * @param {Object} escaped - * @return {String} - * @api private - */ - -exports.attrs = function attrs(obj, escaped){ - var buf = [] - , terse = obj.terse; - - delete obj.terse; - var keys = Object.keys(obj) - , len = keys.length; - - if (len) { - buf.push(''); - for (var i = 0; i < len; ++i) { - var key = keys[i] - , val = obj[key]; - - if ('boolean' == typeof val || null == val) { - if (val) { - terse - ? buf.push(key) - : buf.push(key + '="' + key + '"'); - } - } else if (0 == key.indexOf('data') && 'string' != typeof val) { - buf.push(key + "='" + JSON.stringify(val) + "'"); - } else if ('class' == key && Array.isArray(val)) { - buf.push(key + '="' + exports.escape(val.join(' ')) + '"'); - } else if (escaped && escaped[key]) { - buf.push(key + '="' + exports.escape(val) + '"'); - } else { - buf.push(key + '="' + val + '"'); - } - } - } - - return buf.join(' '); -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function escape(html){ - return String(html) - .replace(/&(?!(\w+|\#\d+);)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; - -/** - * Re-throw the given `err` in context to the - * the jade in `filename` at the given `lineno`. - * - * @param {Error} err - * @param {String} filename - * @param {String} lineno - * @api private - */ - -exports.rethrow = function rethrow(err, filename, lineno){ - if (!filename) throw err; - - var context = 3 - , str = require('fs').readFileSync(filename, 'utf8') - , lines = str.split('\n') - , start = Math.max(lineno - context, 0) - , end = Math.min(lines.length, lineno + context); - - // Error context - var context = lines.slice(start, end).map(function(line, i){ - var curr = i + start + 1; - return (curr == lineno ? ' > ' : ' ') - + curr - + '| ' - + line; - }).join('\n'); - - // Alter exception message - err.path = filename; - err.message = (filename || 'Jade') + ':' + lineno - + '\n' + context + '\n\n' + err.message; - throw err; -}; - -}); // module: runtime.js - -require.register("self-closing.js", function(module, exports, require){ - -/*! - * Jade - self closing tags - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = [ - 'meta' - , 'img' - , 'link' - , 'input' - , 'source' - , 'area' - , 'base' - , 'col' - , 'br' - , 'hr' -]; -}); // module: self-closing.js - -require.register("utils.js", function(module, exports, require){ - -/*! - * Jade - utils - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Convert interpolation in the given string to JavaScript. - * - * @param {String} str - * @return {String} - * @api private - */ - -var interpolate = exports.interpolate = function(str){ - return str.replace(/(\\)?([#!]){(.*?)}/g, function(str, escape, flag, code){ - return escape - ? str - : "' + " - + ('!' == flag ? '' : 'escape') - + "((interp = " + code.replace(/\\'/g, "'") - + ") == null ? '' : interp) + '"; - }); -}; - -/** - * Escape single quotes in `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -var escape = exports.escape = function(str) { - return str.replace(/'/g, "\\'"); -}; - -/** - * Interpolate, and escape the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.text = function(str){ - return interpolate(escape(str)); -}; -}); // module: utils.js - -window.jade = require("jade"); -})(); diff --git a/node_modules/mocha/node_modules/jade/jade.md b/node_modules/mocha/node_modules/jade/jade.md deleted file mode 100644 index 051dc031..00000000 --- a/node_modules/mocha/node_modules/jade/jade.md +++ /dev/null @@ -1,510 +0,0 @@ - -# Jade - - The jade template engine for node.js - -## Synopsis - - jade [-h|--help] [-v|--version] [-o|--obj STR] - [-O|--out DIR] [-p|--path PATH] [-P|--pretty] - [-c|--client] [-D|--no-debug] - -## Examples - - translate jade the templates dir - - $ jade templates - - create {foo,bar}.html - - $ jade {foo,bar}.jade - - jade over stdio - - $ jade < my.jade > my.html - - jade over s - - $ echo "h1 Jade!" | jade - - foo, bar dirs rendering to /tmp - - $ jade foo bar --out /tmp - - compile client-side templates without debugging - instrumentation, making the output javascript - very light-weight. This requires runtime.js - in your projects. - - $ jade --client --no-debug < my.jade - -## Tags - - Tags are simply nested via whitespace, closing - tags defined for you. These indents are called "blocks". - - ul - li - a Foo - li - a Bar - - You may have several tags in one "block": - - ul - li - a Foo - a Bar - a Baz - -## Self-closing Tags - - Some tags are flagged as self-closing by default, such - as `meta`, `link`, and so on. To explicitly self-close - a tag simply append the `/` character: - - foo/ - foo(bar='baz')/ - - Would yield: - - - - -## Attributes - - Tag attributes look similar to HTML, however - the values are regular JavaScript, here are - some examples: - - a(href='google.com') Google - a(class='button', href='google.com') Google - - As mentioned the attribute values are just JavaScript, - this means ternary operations and other JavaScript expressions - work just fine: - - body(class=user.authenticated ? 'authenticated' : 'anonymous') - a(href=user.website || 'http://google.com') - - Multiple lines work too: - - input(type='checkbox', - name='agreement', - checked) - - Multiple lines without the comma work fine: - - input(type='checkbox' - name='agreement' - checked) - - Funky whitespace? fine: - - input( - type='checkbox' - name='agreement' - checked) - -## Boolean attributes - - Boolean attributes are mirrored by Jade, and accept - bools, aka _true_ or _false_. When no value is specified - _true_ is assumed. For example: - - input(type="checkbox", checked) - // => "" - - For example if the checkbox was for an agreement, perhaps `user.agreed` - was _true_ the following would also output 'checked="checked"': - - input(type="checkbox", checked=user.agreed) - -## Class attributes - - The _class_ attribute accepts an array of classes, - this can be handy when generated from a javascript - function etc: - - classes = ['foo', 'bar', 'baz'] - a(class=classes) - // => "" - -## Class literal - - Classes may be defined using a ".CLASSNAME" syntax: - - .button - // => "
        " - - Or chained: - - .large.button - // => "
        " - - The previous defaulted to divs, however you - may also specify the tag type: - - h1.title My Title - // => "

        My Title

        " - -## Id literal - - Much like the class literal there's an id literal: - - #user-1 - // => "
        " - - Again we may specify the tag as well: - - ul#menu - li: a(href='/home') Home - li: a(href='/store') Store - li: a(href='/contact') Contact - - Finally all of these may be used in any combination, - the following are all valid tags: - - a.button#contact(style: 'color: red') Contact - a.button(style: 'color: red')#contact Contact - a(style: 'color: red').button#contact Contact - -## Block expansion - - Jade supports the concept of "block expansion", in which - using a trailing ":" after a tag will inject a block: - - ul - li: a Foo - li: a Bar - li: a Baz - -## Text - - Arbitrary text may follow tags: - - p Welcome to my site - - yields: - -

        Welcome to my site

        - -## Pipe text - - Another form of text is "pipe" text. Pipes act - as the text margin for large bodies of text. - - p - | This is a large - | body of text for - | this tag. - | - | Nothing too - | exciting. - - yields: - -

        This is a large - body of text for - this tag. - - Nothing too - exciting. -

        - - Using pipes we can also specify regular Jade tags - within the text: - - p - | Click to visit - a(href='http://google.com') Google - | if you want. - -## Text only tags - - As an alternative to pipe text you may add - a trailing "." to indicate that the block - contains nothing but plain-text, no tags: - - p. - This is a large - body of text for - this tag. - - Nothing too - exciting. - - Some tags are text-only by default, for example - _script_, _textarea_, and _style_ tags do not - contain nested HTML so Jade implies the trailing ".": - - script - if (foo) { - bar(); - } - - style - body { - padding: 50px; - font: 14px Helvetica; - } - -## Template script tags - - Sometimes it's useful to define HTML in script - tags using Jade, typically for client-side templates. - - To do this simply give the _script_ tag an arbitrary - _type_ attribute such as _text/x-template_: - - script(type='text/template') - h1 Look! - p Jade still works in here! - -## Interpolation - - Both plain-text and piped-text support interpolation, - which comes in two forms, escapes and non-escaped. The - following will output the _user.name_ in the paragraph - but HTML within it will be escaped to prevent XSS attacks: - - p Welcome #{user.name} - - The following syntax is identical however it will _not_ escape - HTML, and should only be used with strings that you trust: - - p Welcome !{user.name} - -## Inline HTML - - Sometimes constructing small inline snippets of HTML - in Jade can be annoying, luckily we can add plain - HTML as well: - - p Welcome #{user.name} - -## Code - - To buffer output with Jade simply use _=_ at the beginning - of a line or after a tag. This method escapes any HTML - present in the string. - - p= user.description - - To buffer output unescaped use the _!=_ variant, but again - be careful of XSS. - - p!= user.description - - The final way to mess with JavaScript code in Jade is the unbuffered - _-_, which can be used for conditionals, defining variables etc: - - - var user = { description: 'foo bar baz' } - #user - - if (user.description) { - h2 Description - p.description= user.description - - } - - When compiled blocks are wrapped in anonymous functions, so the - following is also valid, without braces: - - - var user = { description: 'foo bar baz' } - #user - - if (user.description) - h2 Description - p.description= user.description - - If you really want you could even use `.forEach()` and others: - - - users.forEach(function(user){ - .user - h2= user.name - p User #{user.name} is #{user.age} years old - - }) - - Taking this further Jade provides some syntax for conditionals, - iteration, switch statements etc. Let's look at those next! - -## Assignment - - Jade's first-class assignment is simple, simply use the _=_ - operator and Jade will _var_ it for you. The following are equivalent: - - - var user = { name: 'tobi' } - user = { name: 'tobi' } - -## Conditionals - - Jade's first-class conditional syntax allows for optional - parenthesis, and you may now omit the leading _-_ otherwise - it's identical, still just regular javascript: - - user = { description: 'foo bar baz' } - #user - if user.description - h2 Description - p.description= user.description - - Jade provides the negated version, _unless_ as well, the following - are equivalent: - - - if (!(user.isAnonymous)) - p You're logged in as #{user.name} - - unless user.isAnonymous - p You're logged in as #{user.name} - -## Iteration - - JavaScript's _for_ loops don't look very declarative, so Jade - also provides its own _for_ loop construct, aliased as _each_: - - for user in users - .user - h2= user.name - p user #{user.name} is #{user.age} year old - - As mentioned _each_ is identical: - - each user in users - .user - h2= user.name - - If necessary the index is available as well: - - for user, i in users - .user(class='user-#{i}') - h2= user.name - - Remember, it's just JavaScript: - - ul#letters - for letter in ['a', 'b', 'c'] - li= letter - -## Mixins - - Mixins provide a way to define jade "functions" which "mix in" - their contents when called. This is useful for abstracting - out large fragments of Jade. - - The simplest possible mixin which accepts no arguments might - look like this: - - mixin hello - p Hello - - You use a mixin by placing `+` before the name: - - +hello - - For something a little more dynamic, mixins can take - arguments, the mixin itself is converted to a javascript - function internally: - - mixin hello(user) - p Hello #{user} - - +hello('Tobi') - - Yields: - -

        Hello Tobi

        - - Mixins may optionally take blocks, when a block is passed - its contents becomes the implicit `block` argument. For - example here is a mixin passed a block, and also invoked - without passing a block: - - mixin article(title) - .article - .article-wrapper - h1= title - if block - block - else - p No content provided - - +article('Hello world') - - +article('Hello world') - p This is my - p Amazing article - - yields: - -
        -
        -

        Hello world

        -

        No content provided

        -
        -
        - -
        -
        -

        Hello world

        -

        This is my

        -

        Amazing article

        -
        -
        - - Mixins can even take attributes, just like a tag. When - attributes are passed they become the implicit `attributes` - argument. Individual attributes can be accessed just like - normal object properties: - - mixin centered - .centered(class=attributes.class) - block - - +centered.bold Hello world - - +centered.red - p This is my - p Amazing article - - yields: - -
        Hello world
        -
        -

        This is my

        -

        Amazing article

        -
        - - If you use `attributes` directly, *all* passed attributes - get used: - - mixin link - a.menu(attributes) - block - - +link.highlight(href='#top') Top - +link#sec1.plain(href='#section1') Section 1 - +link#sec2.plain(href='#section2') Section 2 - - yields: - - Top - Section 1 - Section 2 - - If you pass arguments, they must directly follow the mixin: - - mixin list(arr) - if block - .title - block - ul(attributes) - each item in arr - li= item - - +list(['foo', 'bar', 'baz'])(id='myList', class='bold') - - yields: - -
          -
        • foo
        • -
        • bar
        • -
        • baz
        • -
        diff --git a/node_modules/mocha/node_modules/jade/jade.min.js b/node_modules/mocha/node_modules/jade/jade.min.js deleted file mode 100644 index 72e4535e..00000000 --- a/node_modules/mocha/node_modules/jade/jade.min.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(){function require(p){var path=require.resolve(p),mod=require.modules[path];if(!mod)throw new Error('failed to require "'+p+'"');return mod.exports||(mod.exports={},mod.call(mod.exports,mod,mod.exports,require.relative(path))),mod.exports}require.modules={},require.resolve=function(path){var orig=path,reg=path+".js",index=path+"/index.js";return require.modules[reg]&®||require.modules[index]&&index||orig},require.register=function(path,fn){require.modules[path]=fn},require.relative=function(parent){return function(p){if("."!=p.charAt(0))return require(p);var path=parent.split("/"),segs=p.split("/");path.pop();for(var i=0;i",this.doctype=doctype,this.terse="5"==name||"html"==name,this.xml=0==this.doctype.indexOf("1&&!escape&&block.nodes[0].isText&&block.nodes[1].isText&&this.prettyIndent(1,!0);for(var i=0;i0&&!escape&&block.nodes[i].isText&&block.nodes[i-1].isText&&this.prettyIndent(1,!1),this.visit(block.nodes[i]),block.nodes[i+1]&&block.nodes[i].isText&&block.nodes[i+1].isText&&this.buffer("\\n")},visitDoctype:function(doctype){doctype&&(doctype.val||!this.doctype)&&this.setDoctype(doctype.val||"default"),this.doctype&&this.buffer(this.doctype),this.hasCompiledDoctype=!0},visitMixin:function(mixin){var name=mixin.name.replace(/-/g,"_")+"_mixin",args=mixin.args||"",block=mixin.block,attrs=mixin.attrs,pp=this.pp;if(mixin.call){pp&&this.buf.push("__indent.push('"+Array(this.indents+1).join(" ")+"');");if(block||attrs.length){this.buf.push(name+".call({");if(block){this.buf.push("block: function(){"),this.parentIndents++;var _indents=this.indents;this.indents=0,this.visit(mixin.block),this.indents=_indents,this.parentIndents--,attrs.length?this.buf.push("},"):this.buf.push("}")}if(attrs.length){var val=this.attrs(attrs);val.inherits?this.buf.push("attributes: merge({"+val.buf+"}, attributes), escaped: merge("+val.escaped+", escaped, true)"):this.buf.push("attributes: {"+val.buf+"}, escaped: "+val.escaped)}args?this.buf.push("}, "+args+");"):this.buf.push("});")}else this.buf.push(name+"("+args+");");pp&&this.buf.push("__indent.pop();")}else this.buf.push("var "+name+" = function("+args+"){"),this.buf.push("var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {};"),this.parentIndents++,this.visit(block),this.parentIndents--,this.buf.push("};")},visitTag:function(tag){this.indents++;var name=tag.name,pp=this.pp;tag.buffer&&(name="' + ("+name+") + '"),this.hasCompiledTag||(!this.hasCompiledDoctype&&"html"==name&&this.visitDoctype(),this.hasCompiledTag=!0),pp&&!tag.isInline()&&this.prettyIndent(0,!0),(~selfClosing.indexOf(name)||tag.selfClosing)&&!this.xml?(this.buffer("<"+name),this.visitAttributes(tag.attrs),this.terse?this.buffer(">"):this.buffer("/>")):(tag.attrs.length?(this.buffer("<"+name),tag.attrs.length&&this.visitAttributes(tag.attrs),this.buffer(">")):this.buffer("<"+name+">"),tag.code&&this.visitCode(tag.code),this.escape="pre"==tag.name,this.visit(tag.block),pp&&!tag.isInline()&&"pre"!=tag.name&&!tag.canInline()&&this.prettyIndent(0,!0),this.buffer("")),this.indents--},visitFilter:function(filter){var fn=filters[filter.name];if(!fn)throw filter.isASTFilter?new Error('unknown ast filter "'+filter.name+':"'):new Error('unknown filter ":'+filter.name+'"');if(filter.isASTFilter)this.buf.push(fn(filter.block,this,filter.attrs));else{var text=filter.block.nodes.map(function(node){return node.val}).join("\n");filter.attrs=filter.attrs||{},filter.attrs.filename=this.options.filename,this.buffer(utils.text(fn(text,filter.attrs)))}},visitText:function(text){text=utils.text(text.val.replace(/\\/g,"\\\\")),this.escape&&(text=escape(text)),this.buffer(text)},visitComment:function(comment){if(!comment.buffer)return;this.pp&&this.prettyIndent(1,!0),this.buffer("")},visitBlockComment:function(comment){if(!comment.buffer)return;0==comment.val.trim().indexOf("if")?(this.buffer("")):(this.buffer(""))},visitCode:function(code){if(code.buffer){var val=code.val.trimLeft();this.buf.push("var __val__ = "+val),val='null == __val__ ? "" : __val__',code.escape&&(val="escape("+val+")"),this.buf.push("buf.push("+val+");")}else this.buf.push(code.val);code.block&&(code.buffer||this.buf.push("{"),this.visit(code.block),code.buffer||this.buf.push("}"))},visitEach:function(each){this.buf.push("// iterate "+each.obj+"\n"+";(function(){\n"+" if ('number' == typeof "+each.obj+".length) {\n"+" for (var "+each.key+" = 0, $$l = "+each.obj+".length; "+each.key+" < $$l; "+each.key+"++) {\n"+" var "+each.val+" = "+each.obj+"["+each.key+"];\n"),this.visit(each.block),this.buf.push(" }\n } else {\n for (var "+each.key+" in "+each.obj+") {\n"+" if ("+each.obj+".hasOwnProperty("+each.key+")){"+" var "+each.val+" = "+each.obj+"["+each.key+"];\n"),this.visit(each.block),this.buf.push(" }\n"),this.buf.push(" }\n }\n}).call(this);\n")},visitAttributes:function(attrs){var val=this.attrs(attrs);val.inherits?this.buf.push("buf.push(attrs(merge({ "+val.buf+" }, attributes), merge("+val.escaped+", escaped, true)));"):val.constant?(eval("var buf={"+val.buf+"};"),this.buffer(runtime.attrs(buf,JSON.parse(val.escaped)),!0)):this.buf.push("buf.push(attrs({ "+val.buf+" }, "+val.escaped+"));")},attrs:function(attrs){var buf=[],classes=[],escaped={},constant=attrs.every(function(attr){return isConstant(attr.val)}),inherits=!1;return this.terse&&buf.push("terse: true"),attrs.forEach(function(attr){if(attr.name=="attributes")return inherits=!0;escaped[attr.name]=attr.escaped;if(attr.name=="class")classes.push("("+attr.val+")");else{var pair="'"+attr.name+"':("+attr.val+")";buf.push(pair)}}),classes.length&&(classes=classes.join(" + ' ' + "),buf.push("class: "+classes)),{buf:buf.join(", ").replace("class:",'"class":'),escaped:JSON.stringify(escaped),inherits:inherits,constant:constant}}};function isConstant(val){if(/^ *("([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'|true|false|null|undefined) *$/i.test(val))return!0;if(!isNaN(Number(val)))return!0;var matches;return(matches=/^ *\[(.*)\] *$/.exec(val))?matches[1].split(",").every(isConstant):!1}function escape(html){return String(html).replace(/&(?!\w+;)/g,"&").replace(//g,">").replace(/"/g,""")}}),require.register("doctypes.js",function(module,exports,require){module.exports={5:"","default":"",xml:'',transitional:'',strict:'',frameset:'',1.1:'',basic:'',mobile:''}}),require.register("filters.js",function(module,exports,require){module.exports={cdata:function(str){return""},sass:function(str){str=str.replace(/\\n/g,"\n");var sass=require("sass").render(str).replace(/\n/g,"\\n");return'"},stylus:function(str,options){var ret;str=str.replace(/\\n/g,"\n");var stylus=require("stylus");return stylus(str,options).render(function(err,css){if(err)throw err;ret=css.replace(/\n/g,"\\n")}),'"},less:function(str){var ret;return str=str.replace(/\\n/g,"\n"),require("less").render(str,function(err,css){if(err)throw err;ret='"}),ret},markdown:function(str){var md;try{md=require("markdown")}catch(err){try{md=require("discount")}catch(err){try{md=require("markdown-js")}catch(err){try{md=require("marked")}catch(err){throw new Error("Cannot find markdown library, install markdown, discount, or marked.")}}}}return str=str.replace(/\\n/g,"\n"),md.parse(str).replace(/\n/g,"\\n").replace(/'/g,"'")},coffeescript:function(str){str=str.replace(/\\n/g,"\n");var js=require("coffee-script").compile(str).replace(/\\/g,"\\\\").replace(/\n/g,"\\n");return'"}}}),require.register("inline-tags.js",function(module,exports,require){module.exports=["a","abbr","acronym","b","br","code","em","font","i","img","ins","kbd","map","samp","small","span","strong","sub","sup"]}),require.register("jade.js",function(module,exports,require){var Parser=require("./parser"),Lexer=require("./lexer"),Compiler=require("./compiler"),runtime=require("./runtime");exports.version="0.26.1",exports.selfClosing=require("./self-closing"),exports.doctypes=require("./doctypes"),exports.filters=require("./filters"),exports.utils=require("./utils"),exports.Compiler=Compiler,exports.Parser=Parser,exports.Lexer=Lexer,exports.nodes=require("./nodes"),exports.runtime=runtime,exports.cache={};function parse(str,options){try{var parser=new Parser(str,options.filename,options),compiler=new(options.compiler||Compiler)(parser.parse(),options),js=compiler.compile();return options.debug&&console.error("\nCompiled Function:\n\n%s",js.replace(/^/gm," ")),"var buf = [];\n"+(options.self?"var self = locals || {};\n"+js:"with (locals || {}) {\n"+js+"\n}\n")+'return buf.join("");'}catch(err){parser=parser.context(),runtime.rethrow(err,parser.filename,parser.lexer.lineno)}}exports.compile=function(str,options){var options=options||{},client=options.client,filename=options.filename?JSON.stringify(options.filename):"undefined",fn;return options.compileDebug!==!1?fn=["var __jade = [{ lineno: 1, filename: "+filename+" }];","try {",parse(String(str),options),"} catch (err) {"," rethrow(err, __jade[0].filename, __jade[0].lineno);","}"].join("\n"):fn=parse(String(str),options),client&&(fn="attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\n"+fn),fn=new Function("locals, attrs, escape, rethrow, merge",fn),client?fn:function(locals){return fn(locals,runtime.attrs,runtime.escape,runtime.rethrow,runtime.merge)}},exports.render=function(str,options,fn){"function"==typeof options&&(fn=options,options={});if(options.cache&&!options.filename)return fn(new Error('the "filename" option is required for caching'));try{var path=options.filename,tmpl=options.cache?exports.cache[path]||(exports.cache[path]=exports.compile(str,options)):exports.compile(str,options);fn(null,tmpl(options))}catch(err){fn(err)}},exports.renderFile=function(path,options,fn){var key=path+":string";"function"==typeof options&&(fn=options,options={});try{options.filename=path;var str=options.cache?exports.cache[key]||(exports.cache[key]=fs.readFileSync(path,"utf8")):fs.readFileSync(path,"utf8");exports.render(str,options,fn)}catch(err){fn(err)}},exports.__express=exports.renderFile}),require.register("lexer.js",function(module,exports,require){var Lexer=module.exports=function Lexer(str,options){options=options||{},this.input=str.replace(/\r\n|\r/g,"\n"),this.colons=options.colons,this.deferredTokens=[],this.lastIndents=0,this.lineno=1,this.stash=[],this.indentStack=[],this.indentRe=null,this.pipeless=!1};Lexer.prototype={tok:function(type,val){return{type:type,line:this.lineno,val:val}},consume:function(len){this.input=this.input.substr(len)},scan:function(regexp,type){var captures;if(captures=regexp.exec(this.input))return this.consume(captures[0].length),this.tok(type,captures[1])},defer:function(tok){this.deferredTokens.push(tok)},lookahead:function(n){var fetch=n-this.stash.length;while(fetch-->0)this.stash.push(this.next());return this.stash[--n]},indexOfDelimiters:function(start,end){var str=this.input,nstart=0,nend=0,pos=0;for(var i=0,len=str.length;iindents)this.stash.push(this.tok("outdent")),this.indentStack.shift();tok=this.stash.pop()}else indents&&indents!=this.indentStack[0]?(this.indentStack.unshift(indents),tok=this.tok("indent",indents)):tok=this.tok("newline");return tok}},pipelessText:function(){if(this.pipeless){if("\n"==this.input[0])return;var i=this.input.indexOf("\n");-1==i&&(i=this.input.length);var str=this.input.substr(0,i);return this.consume(str.length),this.tok("text",str)}},colon:function(){return this.scan(/^: */,":")},advance:function(){return this.stashed()||this.next()},next:function(){return this.deferred()||this.blank()||this.eos()||this.pipelessText()||this.yield()||this.doctype()||this.interpolation()||this["case"]()||this.when()||this["default"]()||this["extends"]()||this.append()||this.prepend()||this.block()||this.include()||this.mixin()||this.call()||this.conditional()||this.each()||this["while"]()||this.assignment()||this.tag()||this.filter()||this.code()||this.id()||this.className()||this.attrs()||this.indent()||this.comment()||this.colon()||this.text()}}}),require.register("nodes/attrs.js",function(module,exports,require){var Node=require("./node"),Block=require("./block"),Attrs=module.exports=function Attrs(){this.attrs=[]};Attrs.prototype=new Node,Attrs.prototype.constructor=Attrs,Attrs.prototype.setAttribute=function(name,val,escaped){return this.attrs.push({name:name,val:val,escaped:escaped}),this},Attrs.prototype.removeAttribute=function(name){for(var i=0,len=this.attrs.length;i/g,">").replace(/"/g,""")},exports.rethrow=function rethrow(err,filename,lineno){if(!filename)throw err;var context=3,str=require("fs").readFileSync(filename,"utf8"),lines=str.split("\n"),start=Math.max(lineno-context,0),end=Math.min(lines.length,lineno+context),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" > ":" ")+curr+"| "+line}).join("\n");throw err.path=filename,err.message=(filename||"Jade")+":"+lineno+"\n"+context+"\n\n"+err.message,err}}),require.register("self-closing.js",function(module,exports,require){module.exports=["meta","img","link","input","source","area","base","col","br","hr"]}),require.register("utils.js",function(module,exports,require){var interpolate=exports.interpolate=function(str){return str.replace(/(\\)?([#!]){(.*?)}/g,function(str,escape,flag,code){return escape?str:"' + "+("!"==flag?"":"escape")+"((interp = "+code.replace(/\\'/g,"'")+") == null ? '' : interp) + '"})},escape=exports.escape=function(str){return str.replace(/'/g,"\\'")};exports.text=function(str){return interpolate(escape(str))}}),window.jade=require("jade")})(); \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/compiler.js b/node_modules/mocha/node_modules/jade/lib/compiler.js deleted file mode 100644 index 516ac83d..00000000 --- a/node_modules/mocha/node_modules/jade/lib/compiler.js +++ /dev/null @@ -1,642 +0,0 @@ - -/*! - * Jade - Compiler - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var nodes = require('./nodes') - , filters = require('./filters') - , doctypes = require('./doctypes') - , selfClosing = require('./self-closing') - , runtime = require('./runtime') - , utils = require('./utils'); - -// if browser -// -// if (!Object.keys) { -// Object.keys = function(obj){ -// var arr = []; -// for (var key in obj) { -// if (obj.hasOwnProperty(key)) { -// arr.push(key); -// } -// } -// return arr; -// } -// } -// -// if (!String.prototype.trimLeft) { -// String.prototype.trimLeft = function(){ -// return this.replace(/^\s+/, ''); -// } -// } -// -// end - - -/** - * Initialize `Compiler` with the given `node`. - * - * @param {Node} node - * @param {Object} options - * @api public - */ - -var Compiler = module.exports = function Compiler(node, options) { - this.options = options = options || {}; - this.node = node; - this.hasCompiledDoctype = false; - this.hasCompiledTag = false; - this.pp = options.pretty || false; - this.debug = false !== options.compileDebug; - this.indents = 0; - this.parentIndents = 0; - if (options.doctype) this.setDoctype(options.doctype); -}; - -/** - * Compiler prototype. - */ - -Compiler.prototype = { - - /** - * Compile parse tree to JavaScript. - * - * @api public - */ - - compile: function(){ - this.buf = ['var interp;']; - if (this.pp) this.buf.push("var __indent = [];"); - this.lastBufferedIdx = -1; - this.visit(this.node); - return this.buf.join('\n'); - }, - - /** - * Sets the default doctype `name`. Sets terse mode to `true` when - * html 5 is used, causing self-closing tags to end with ">" vs "/>", - * and boolean attributes are not mirrored. - * - * @param {string} name - * @api public - */ - - setDoctype: function(name){ - var doctype = doctypes[(name || 'default').toLowerCase()]; - doctype = doctype || ''; - this.doctype = doctype; - this.terse = '5' == name || 'html' == name; - this.xml = 0 == this.doctype.indexOf(' 1 && !escape && block.nodes[0].isText && block.nodes[1].isText) - this.prettyIndent(1, true); - - for (var i = 0; i < len; ++i) { - // Pretty print text - if (pp && i > 0 && !escape && block.nodes[i].isText && block.nodes[i-1].isText) - this.prettyIndent(1, false); - - this.visit(block.nodes[i]); - // Multiple text nodes are separated by newlines - if (block.nodes[i+1] && block.nodes[i].isText && block.nodes[i+1].isText) - this.buffer('\\n'); - } - }, - - /** - * Visit `doctype`. Sets terse mode to `true` when html 5 - * is used, causing self-closing tags to end with ">" vs "/>", - * and boolean attributes are not mirrored. - * - * @param {Doctype} doctype - * @api public - */ - - visitDoctype: function(doctype){ - if (doctype && (doctype.val || !this.doctype)) { - this.setDoctype(doctype.val || 'default'); - } - - if (this.doctype) this.buffer(this.doctype); - this.hasCompiledDoctype = true; - }, - - /** - * Visit `mixin`, generating a function that - * may be called within the template. - * - * @param {Mixin} mixin - * @api public - */ - - visitMixin: function(mixin){ - var name = mixin.name.replace(/-/g, '_') + '_mixin' - , args = mixin.args || '' - , block = mixin.block - , attrs = mixin.attrs - , pp = this.pp; - - if (mixin.call) { - if (pp) this.buf.push("__indent.push('" + Array(this.indents + 1).join(' ') + "');") - if (block || attrs.length) { - - this.buf.push(name + '.call({'); - - if (block) { - this.buf.push('block: function(){'); - - // Render block with no indents, dynamically added when rendered - this.parentIndents++; - var _indents = this.indents; - this.indents = 0; - this.visit(mixin.block); - this.indents = _indents; - this.parentIndents--; - - if (attrs.length) { - this.buf.push('},'); - } else { - this.buf.push('}'); - } - } - - if (attrs.length) { - var val = this.attrs(attrs); - if (val.inherits) { - this.buf.push('attributes: merge({' + val.buf - + '}, attributes), escaped: merge(' + val.escaped + ', escaped, true)'); - } else { - this.buf.push('attributes: {' + val.buf + '}, escaped: ' + val.escaped); - } - } - - if (args) { - this.buf.push('}, ' + args + ');'); - } else { - this.buf.push('});'); - } - - } else { - this.buf.push(name + '(' + args + ');'); - } - if (pp) this.buf.push("__indent.pop();") - } else { - this.buf.push('var ' + name + ' = function(' + args + '){'); - this.buf.push('var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {};'); - this.parentIndents++; - this.visit(block); - this.parentIndents--; - this.buf.push('};'); - } - }, - - /** - * Visit `tag` buffering tag markup, generating - * attributes, visiting the `tag`'s code and block. - * - * @param {Tag} tag - * @api public - */ - - visitTag: function(tag){ - this.indents++; - var name = tag.name - , pp = this.pp; - - if (tag.buffer) name = "' + (" + name + ") + '"; - - if (!this.hasCompiledTag) { - if (!this.hasCompiledDoctype && 'html' == name) { - this.visitDoctype(); - } - this.hasCompiledTag = true; - } - - // pretty print - if (pp && !tag.isInline()) - this.prettyIndent(0, true); - - if ((~selfClosing.indexOf(name) || tag.selfClosing) && !this.xml) { - this.buffer('<' + name); - this.visitAttributes(tag.attrs); - this.terse - ? this.buffer('>') - : this.buffer('/>'); - } else { - // Optimize attributes buffering - if (tag.attrs.length) { - this.buffer('<' + name); - if (tag.attrs.length) this.visitAttributes(tag.attrs); - this.buffer('>'); - } else { - this.buffer('<' + name + '>'); - } - if (tag.code) this.visitCode(tag.code); - this.escape = 'pre' == tag.name; - this.visit(tag.block); - - // pretty print - if (pp && !tag.isInline() && 'pre' != tag.name && !tag.canInline()) - this.prettyIndent(0, true); - - this.buffer(''); - } - this.indents--; - }, - - /** - * Visit `filter`, throwing when the filter does not exist. - * - * @param {Filter} filter - * @api public - */ - - visitFilter: function(filter){ - var fn = filters[filter.name]; - - // unknown filter - if (!fn) { - if (filter.isASTFilter) { - throw new Error('unknown ast filter "' + filter.name + ':"'); - } else { - throw new Error('unknown filter ":' + filter.name + '"'); - } - } - - if (filter.isASTFilter) { - this.buf.push(fn(filter.block, this, filter.attrs)); - } else { - var text = filter.block.nodes.map(function(node){ return node.val }).join('\n'); - filter.attrs = filter.attrs || {}; - filter.attrs.filename = this.options.filename; - this.buffer(utils.text(fn(text, filter.attrs))); - } - }, - - /** - * Visit `text` node. - * - * @param {Text} text - * @api public - */ - - visitText: function(text){ - text = utils.text(text.val.replace(/\\/g, '\\\\')); - if (this.escape) text = escape(text); - this.buffer(text); - }, - - /** - * Visit a `comment`, only buffering when the buffer flag is set. - * - * @param {Comment} comment - * @api public - */ - - visitComment: function(comment){ - if (!comment.buffer) return; - if (this.pp) this.prettyIndent(1, true); - this.buffer(''); - }, - - /** - * Visit a `BlockComment`. - * - * @param {Comment} comment - * @api public - */ - - visitBlockComment: function(comment){ - if (!comment.buffer) return; - if (0 == comment.val.trim().indexOf('if')) { - this.buffer(''); - } else { - this.buffer(''); - } - }, - - /** - * Visit `code`, respecting buffer / escape flags. - * If the code is followed by a block, wrap it in - * a self-calling function. - * - * @param {Code} code - * @api public - */ - - visitCode: function(code){ - // Wrap code blocks with {}. - // we only wrap unbuffered code blocks ATM - // since they are usually flow control - - // Buffer code - if (code.buffer) { - var val = code.val.trimLeft(); - this.buf.push('var __val__ = ' + val); - val = 'null == __val__ ? "" : __val__'; - if (code.escape) val = 'escape(' + val + ')'; - this.buf.push("buf.push(" + val + ");"); - } else { - this.buf.push(code.val); - } - - // Block support - if (code.block) { - if (!code.buffer) this.buf.push('{'); - this.visit(code.block); - if (!code.buffer) this.buf.push('}'); - } - }, - - /** - * Visit `each` block. - * - * @param {Each} each - * @api public - */ - - visitEach: function(each){ - this.buf.push('' - + '// iterate ' + each.obj + '\n' - + ';(function(){\n' - + ' if (\'number\' == typeof ' + each.obj + '.length) {\n' - + ' for (var ' + each.key + ' = 0, $$l = ' + each.obj + '.length; ' + each.key + ' < $$l; ' + each.key + '++) {\n' - + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n'); - - this.visit(each.block); - - this.buf.push('' - + ' }\n' - + ' } else {\n' - + ' for (var ' + each.key + ' in ' + each.obj + ') {\n' - // if browser - // + ' if (' + each.obj + '.hasOwnProperty(' + each.key + ')){' - // end - + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n'); - - this.visit(each.block); - - // if browser - // this.buf.push(' }\n'); - // end - - this.buf.push(' }\n }\n}).call(this);\n'); - }, - - /** - * Visit `attrs`. - * - * @param {Array} attrs - * @api public - */ - - visitAttributes: function(attrs){ - var val = this.attrs(attrs); - if (val.inherits) { - this.buf.push("buf.push(attrs(merge({ " + val.buf + - " }, attributes), merge(" + val.escaped + ", escaped, true)));"); - } else if (val.constant) { - eval('var buf={' + val.buf + '};'); - this.buffer(runtime.attrs(buf, JSON.parse(val.escaped)), true); - } else { - this.buf.push("buf.push(attrs({ " + val.buf + " }, " + val.escaped + "));"); - } - }, - - /** - * Compile attributes. - */ - - attrs: function(attrs){ - var buf = [] - , classes = [] - , escaped = {} - , constant = attrs.every(function(attr){ return isConstant(attr.val) }) - , inherits = false; - - if (this.terse) buf.push('terse: true'); - - attrs.forEach(function(attr){ - if (attr.name == 'attributes') return inherits = true; - escaped[attr.name] = attr.escaped; - if (attr.name == 'class') { - classes.push('(' + attr.val + ')'); - } else { - var pair = "'" + attr.name + "':(" + attr.val + ')'; - buf.push(pair); - } - }); - - if (classes.length) { - classes = classes.join(" + ' ' + "); - buf.push("class: " + classes); - } - - return { - buf: buf.join(', ').replace('class:', '"class":'), - escaped: JSON.stringify(escaped), - inherits: inherits, - constant: constant - }; - } -}; - -/** - * Check if expression can be evaluated to a constant - * - * @param {String} expression - * @return {Boolean} - * @api private - */ - -function isConstant(val){ - // Check strings/literals - if (/^ *("([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'|true|false|null|undefined) *$/i.test(val)) - return true; - - // Check numbers - if (!isNaN(Number(val))) - return true; - - // Check arrays - var matches; - if (matches = /^ *\[(.*)\] *$/.exec(val)) - return matches[1].split(',').every(isConstant); - - return false; -} - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -function escape(html){ - return String(html) - .replace(/&(?!\w+;)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -} \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/doctypes.js b/node_modules/mocha/node_modules/jade/lib/doctypes.js deleted file mode 100644 index e87ca1e4..00000000 --- a/node_modules/mocha/node_modules/jade/lib/doctypes.js +++ /dev/null @@ -1,18 +0,0 @@ - -/*! - * Jade - doctypes - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = { - '5': '' - , 'default': '' - , 'xml': '' - , 'transitional': '' - , 'strict': '' - , 'frameset': '' - , '1.1': '' - , 'basic': '' - , 'mobile': '' -}; \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/filters.js b/node_modules/mocha/node_modules/jade/lib/filters.js deleted file mode 100644 index fdb634cb..00000000 --- a/node_modules/mocha/node_modules/jade/lib/filters.js +++ /dev/null @@ -1,97 +0,0 @@ - -/*! - * Jade - filters - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = { - - /** - * Wrap text with CDATA block. - */ - - cdata: function(str){ - return ''; - }, - - /** - * Transform sass to css, wrapped in style tags. - */ - - sass: function(str){ - str = str.replace(/\\n/g, '\n'); - var sass = require('sass').render(str).replace(/\n/g, '\\n'); - return ''; - }, - - /** - * Transform stylus to css, wrapped in style tags. - */ - - stylus: function(str, options){ - var ret; - str = str.replace(/\\n/g, '\n'); - var stylus = require('stylus'); - stylus(str, options).render(function(err, css){ - if (err) throw err; - ret = css.replace(/\n/g, '\\n'); - }); - return ''; - }, - - /** - * Transform less to css, wrapped in style tags. - */ - - less: function(str){ - var ret; - str = str.replace(/\\n/g, '\n'); - require('less').render(str, function(err, css){ - if (err) throw err; - ret = ''; - }); - return ret; - }, - - /** - * Transform markdown to html. - */ - - markdown: function(str){ - var md; - - // support markdown / discount - try { - md = require('markdown'); - } catch (err){ - try { - md = require('discount'); - } catch (err) { - try { - md = require('markdown-js'); - } catch (err) { - try { - md = require('marked'); - } catch (err) { - throw new - Error('Cannot find markdown library, install markdown, discount, or marked.'); - } - } - } - } - - str = str.replace(/\\n/g, '\n'); - return md.parse(str).replace(/\n/g, '\\n').replace(/'/g,'''); - }, - - /** - * Transform coffeescript to javascript. - */ - - coffeescript: function(str){ - str = str.replace(/\\n/g, '\n'); - var js = require('coffee-script').compile(str).replace(/\\/g, '\\\\').replace(/\n/g, '\\n'); - return ''; - } -}; diff --git a/node_modules/mocha/node_modules/jade/lib/inline-tags.js b/node_modules/mocha/node_modules/jade/lib/inline-tags.js deleted file mode 100644 index 491de0b5..00000000 --- a/node_modules/mocha/node_modules/jade/lib/inline-tags.js +++ /dev/null @@ -1,28 +0,0 @@ - -/*! - * Jade - inline tags - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = [ - 'a' - , 'abbr' - , 'acronym' - , 'b' - , 'br' - , 'code' - , 'em' - , 'font' - , 'i' - , 'img' - , 'ins' - , 'kbd' - , 'map' - , 'samp' - , 'small' - , 'span' - , 'strong' - , 'sub' - , 'sup' -]; \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/jade.js b/node_modules/mocha/node_modules/jade/lib/jade.js deleted file mode 100644 index 00f0abb1..00000000 --- a/node_modules/mocha/node_modules/jade/lib/jade.js +++ /dev/null @@ -1,237 +0,0 @@ -/*! - * Jade - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Parser = require('./parser') - , Lexer = require('./lexer') - , Compiler = require('./compiler') - , runtime = require('./runtime') -// if node - , fs = require('fs'); -// end - -/** - * Library version. - */ - -exports.version = '0.26.3'; - -/** - * Expose self closing tags. - */ - -exports.selfClosing = require('./self-closing'); - -/** - * Default supported doctypes. - */ - -exports.doctypes = require('./doctypes'); - -/** - * Text filters. - */ - -exports.filters = require('./filters'); - -/** - * Utilities. - */ - -exports.utils = require('./utils'); - -/** - * Expose `Compiler`. - */ - -exports.Compiler = Compiler; - -/** - * Expose `Parser`. - */ - -exports.Parser = Parser; - -/** - * Expose `Lexer`. - */ - -exports.Lexer = Lexer; - -/** - * Nodes. - */ - -exports.nodes = require('./nodes'); - -/** - * Jade runtime helpers. - */ - -exports.runtime = runtime; - -/** - * Template function cache. - */ - -exports.cache = {}; - -/** - * Parse the given `str` of jade and return a function body. - * - * @param {String} str - * @param {Object} options - * @return {String} - * @api private - */ - -function parse(str, options){ - try { - // Parse - var parser = new Parser(str, options.filename, options); - - // Compile - var compiler = new (options.compiler || Compiler)(parser.parse(), options) - , js = compiler.compile(); - - // Debug compiler - if (options.debug) { - console.error('\nCompiled Function:\n\n\033[90m%s\033[0m', js.replace(/^/gm, ' ')); - } - - return '' - + 'var buf = [];\n' - + (options.self - ? 'var self = locals || {};\n' + js - : 'with (locals || {}) {\n' + js + '\n}\n') - + 'return buf.join("");'; - } catch (err) { - parser = parser.context(); - runtime.rethrow(err, parser.filename, parser.lexer.lineno); - } -} - -/** - * Compile a `Function` representation of the given jade `str`. - * - * Options: - * - * - `compileDebug` when `false` debugging code is stripped from the compiled template - * - `client` when `true` the helper functions `escape()` etc will reference `jade.escape()` - * for use with the Jade client-side runtime.js - * - * @param {String} str - * @param {Options} options - * @return {Function} - * @api public - */ - -exports.compile = function(str, options){ - var options = options || {} - , client = options.client - , filename = options.filename - ? JSON.stringify(options.filename) - : 'undefined' - , fn; - - if (options.compileDebug !== false) { - fn = [ - 'var __jade = [{ lineno: 1, filename: ' + filename + ' }];' - , 'try {' - , parse(String(str), options) - , '} catch (err) {' - , ' rethrow(err, __jade[0].filename, __jade[0].lineno);' - , '}' - ].join('\n'); - } else { - fn = parse(String(str), options); - } - - if (client) { - fn = 'attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\n' + fn; - } - - fn = new Function('locals, attrs, escape, rethrow, merge', fn); - - if (client) return fn; - - return function(locals){ - return fn(locals, runtime.attrs, runtime.escape, runtime.rethrow, runtime.merge); - }; -}; - -/** - * Render the given `str` of jade and invoke - * the callback `fn(err, str)`. - * - * Options: - * - * - `cache` enable template caching - * - `filename` filename required for `include` / `extends` and caching - * - * @param {String} str - * @param {Object|Function} options or fn - * @param {Function} fn - * @api public - */ - -exports.render = function(str, options, fn){ - // swap args - if ('function' == typeof options) { - fn = options, options = {}; - } - - // cache requires .filename - if (options.cache && !options.filename) { - return fn(new Error('the "filename" option is required for caching')); - } - - try { - var path = options.filename; - var tmpl = options.cache - ? exports.cache[path] || (exports.cache[path] = exports.compile(str, options)) - : exports.compile(str, options); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Render a Jade file at the given `path` and callback `fn(err, str)`. - * - * @param {String} path - * @param {Object|Function} options or callback - * @param {Function} fn - * @api public - */ - -exports.renderFile = function(path, options, fn){ - var key = path + ':string'; - - if ('function' == typeof options) { - fn = options, options = {}; - } - - try { - options.filename = path; - var str = options.cache - ? exports.cache[key] || (exports.cache[key] = fs.readFileSync(path, 'utf8')) - : fs.readFileSync(path, 'utf8'); - exports.render(str, options, fn); - } catch (err) { - fn(err); - } -}; - -/** - * Express support. - */ - -exports.__express = exports.renderFile; diff --git a/node_modules/mocha/node_modules/jade/lib/lexer.js b/node_modules/mocha/node_modules/jade/lib/lexer.js deleted file mode 100644 index bca314a9..00000000 --- a/node_modules/mocha/node_modules/jade/lib/lexer.js +++ /dev/null @@ -1,771 +0,0 @@ - -/*! - * Jade - Lexer - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Initialize `Lexer` with the given `str`. - * - * Options: - * - * - `colons` allow colons for attr delimiters - * - * @param {String} str - * @param {Object} options - * @api private - */ - -var Lexer = module.exports = function Lexer(str, options) { - options = options || {}; - this.input = str.replace(/\r\n|\r/g, '\n'); - this.colons = options.colons; - this.deferredTokens = []; - this.lastIndents = 0; - this.lineno = 1; - this.stash = []; - this.indentStack = []; - this.indentRe = null; - this.pipeless = false; -}; - -/** - * Lexer prototype. - */ - -Lexer.prototype = { - - /** - * Construct a token with the given `type` and `val`. - * - * @param {String} type - * @param {String} val - * @return {Object} - * @api private - */ - - tok: function(type, val){ - return { - type: type - , line: this.lineno - , val: val - } - }, - - /** - * Consume the given `len` of input. - * - * @param {Number} len - * @api private - */ - - consume: function(len){ - this.input = this.input.substr(len); - }, - - /** - * Scan for `type` with the given `regexp`. - * - * @param {String} type - * @param {RegExp} regexp - * @return {Object} - * @api private - */ - - scan: function(regexp, type){ - var captures; - if (captures = regexp.exec(this.input)) { - this.consume(captures[0].length); - return this.tok(type, captures[1]); - } - }, - - /** - * Defer the given `tok`. - * - * @param {Object} tok - * @api private - */ - - defer: function(tok){ - this.deferredTokens.push(tok); - }, - - /** - * Lookahead `n` tokens. - * - * @param {Number} n - * @return {Object} - * @api private - */ - - lookahead: function(n){ - var fetch = n - this.stash.length; - while (fetch-- > 0) this.stash.push(this.next()); - return this.stash[--n]; - }, - - /** - * Return the indexOf `start` / `end` delimiters. - * - * @param {String} start - * @param {String} end - * @return {Number} - * @api private - */ - - indexOfDelimiters: function(start, end){ - var str = this.input - , nstart = 0 - , nend = 0 - , pos = 0; - for (var i = 0, len = str.length; i < len; ++i) { - if (start == str.charAt(i)) { - ++nstart; - } else if (end == str.charAt(i)) { - if (++nend == nstart) { - pos = i; - break; - } - } - } - return pos; - }, - - /** - * Stashed token. - */ - - stashed: function() { - return this.stash.length - && this.stash.shift(); - }, - - /** - * Deferred token. - */ - - deferred: function() { - return this.deferredTokens.length - && this.deferredTokens.shift(); - }, - - /** - * end-of-source. - */ - - eos: function() { - if (this.input.length) return; - if (this.indentStack.length) { - this.indentStack.shift(); - return this.tok('outdent'); - } else { - return this.tok('eos'); - } - }, - - /** - * Blank line. - */ - - blank: function() { - var captures; - if (captures = /^\n *\n/.exec(this.input)) { - this.consume(captures[0].length - 1); - if (this.pipeless) return this.tok('text', ''); - return this.next(); - } - }, - - /** - * Comment. - */ - - comment: function() { - var captures; - if (captures = /^ *\/\/(-)?([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('comment', captures[2]); - tok.buffer = '-' != captures[1]; - return tok; - } - }, - - /** - * Interpolated tag. - */ - - interpolation: function() { - var captures; - if (captures = /^#\{(.*?)\}/.exec(this.input)) { - this.consume(captures[0].length); - return this.tok('interpolation', captures[1]); - } - }, - - /** - * Tag. - */ - - tag: function() { - var captures; - if (captures = /^(\w[-:\w]*)(\/?)/.exec(this.input)) { - this.consume(captures[0].length); - var tok, name = captures[1]; - if (':' == name[name.length - 1]) { - name = name.slice(0, -1); - tok = this.tok('tag', name); - this.defer(this.tok(':')); - while (' ' == this.input[0]) this.input = this.input.substr(1); - } else { - tok = this.tok('tag', name); - } - tok.selfClosing = !! captures[2]; - return tok; - } - }, - - /** - * Filter. - */ - - filter: function() { - return this.scan(/^:(\w+)/, 'filter'); - }, - - /** - * Doctype. - */ - - doctype: function() { - return this.scan(/^(?:!!!|doctype) *([^\n]+)?/, 'doctype'); - }, - - /** - * Id. - */ - - id: function() { - return this.scan(/^#([\w-]+)/, 'id'); - }, - - /** - * Class. - */ - - className: function() { - return this.scan(/^\.([\w-]+)/, 'class'); - }, - - /** - * Text. - */ - - text: function() { - return this.scan(/^(?:\| ?| ?)?([^\n]+)/, 'text'); - }, - - /** - * Extends. - */ - - "extends": function() { - return this.scan(/^extends? +([^\n]+)/, 'extends'); - }, - - /** - * Block prepend. - */ - - prepend: function() { - var captures; - if (captures = /^prepend +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = 'prepend' - , name = captures[1] - , tok = this.tok('block', name); - tok.mode = mode; - return tok; - } - }, - - /** - * Block append. - */ - - append: function() { - var captures; - if (captures = /^append +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = 'append' - , name = captures[1] - , tok = this.tok('block', name); - tok.mode = mode; - return tok; - } - }, - - /** - * Block. - */ - - block: function() { - var captures; - if (captures = /^block\b *(?:(prepend|append) +)?([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = captures[1] || 'replace' - , name = captures[2] - , tok = this.tok('block', name); - - tok.mode = mode; - return tok; - } - }, - - /** - * Yield. - */ - - yield: function() { - return this.scan(/^yield */, 'yield'); - }, - - /** - * Include. - */ - - include: function() { - return this.scan(/^include +([^\n]+)/, 'include'); - }, - - /** - * Case. - */ - - "case": function() { - return this.scan(/^case +([^\n]+)/, 'case'); - }, - - /** - * When. - */ - - when: function() { - return this.scan(/^when +([^:\n]+)/, 'when'); - }, - - /** - * Default. - */ - - "default": function() { - return this.scan(/^default */, 'default'); - }, - - /** - * Assignment. - */ - - assignment: function() { - var captures; - if (captures = /^(\w+) += *([^;\n]+)( *;? *)/.exec(this.input)) { - this.consume(captures[0].length); - var name = captures[1] - , val = captures[2]; - return this.tok('code', 'var ' + name + ' = (' + val + ');'); - } - }, - - /** - * Call mixin. - */ - - call: function(){ - var captures; - if (captures = /^\+([-\w]+)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('call', captures[1]); - - // Check for args (not attributes) - if (captures = /^ *\((.*?)\)/.exec(this.input)) { - if (!/^ *[-\w]+ *=/.test(captures[1])) { - this.consume(captures[0].length); - tok.args = captures[1]; - } - } - - return tok; - } - }, - - /** - * Mixin. - */ - - mixin: function(){ - var captures; - if (captures = /^mixin +([-\w]+)(?: *\((.*)\))?/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('mixin', captures[1]); - tok.args = captures[2]; - return tok; - } - }, - - /** - * Conditional. - */ - - conditional: function() { - var captures; - if (captures = /^(if|unless|else if|else)\b([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var type = captures[1] - , js = captures[2]; - - switch (type) { - case 'if': js = 'if (' + js + ')'; break; - case 'unless': js = 'if (!(' + js + '))'; break; - case 'else if': js = 'else if (' + js + ')'; break; - case 'else': js = 'else'; break; - } - - return this.tok('code', js); - } - }, - - /** - * While. - */ - - "while": function() { - var captures; - if (captures = /^while +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - return this.tok('code', 'while (' + captures[1] + ')'); - } - }, - - /** - * Each. - */ - - each: function() { - var captures; - if (captures = /^(?:- *)?(?:each|for) +(\w+)(?: *, *(\w+))? * in *([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('each', captures[1]); - tok.key = captures[2] || '$index'; - tok.code = captures[3]; - return tok; - } - }, - - /** - * Code. - */ - - code: function() { - var captures; - if (captures = /^(!?=|-)([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var flags = captures[1]; - captures[1] = captures[2]; - var tok = this.tok('code', captures[1]); - tok.escape = flags[0] === '='; - tok.buffer = flags[0] === '=' || flags[1] === '='; - return tok; - } - }, - - /** - * Attributes. - */ - - attrs: function() { - if ('(' == this.input.charAt(0)) { - var index = this.indexOfDelimiters('(', ')') - , str = this.input.substr(1, index-1) - , tok = this.tok('attrs') - , len = str.length - , colons = this.colons - , states = ['key'] - , escapedAttr - , key = '' - , val = '' - , quote - , c - , p; - - function state(){ - return states[states.length - 1]; - } - - function interpolate(attr) { - return attr.replace(/#\{([^}]+)\}/g, function(_, expr){ - return quote + " + (" + expr + ") + " + quote; - }); - } - - this.consume(index + 1); - tok.attrs = {}; - tok.escaped = {}; - - function parse(c) { - var real = c; - // TODO: remove when people fix ":" - if (colons && ':' == c) c = '='; - switch (c) { - case ',': - case '\n': - switch (state()) { - case 'expr': - case 'array': - case 'string': - case 'object': - val += c; - break; - default: - states.push('key'); - val = val.trim(); - key = key.trim(); - if ('' == key) return; - key = key.replace(/^['"]|['"]$/g, '').replace('!', ''); - tok.escaped[key] = escapedAttr; - tok.attrs[key] = '' == val - ? true - : interpolate(val); - key = val = ''; - } - break; - case '=': - switch (state()) { - case 'key char': - key += real; - break; - case 'val': - case 'expr': - case 'array': - case 'string': - case 'object': - val += real; - break; - default: - escapedAttr = '!' != p; - states.push('val'); - } - break; - case '(': - if ('val' == state() - || 'expr' == state()) states.push('expr'); - val += c; - break; - case ')': - if ('expr' == state() - || 'val' == state()) states.pop(); - val += c; - break; - case '{': - if ('val' == state()) states.push('object'); - val += c; - break; - case '}': - if ('object' == state()) states.pop(); - val += c; - break; - case '[': - if ('val' == state()) states.push('array'); - val += c; - break; - case ']': - if ('array' == state()) states.pop(); - val += c; - break; - case '"': - case "'": - switch (state()) { - case 'key': - states.push('key char'); - break; - case 'key char': - states.pop(); - break; - case 'string': - if (c == quote) states.pop(); - val += c; - break; - default: - states.push('string'); - val += c; - quote = c; - } - break; - case '': - break; - default: - switch (state()) { - case 'key': - case 'key char': - key += c; - break; - default: - val += c; - } - } - p = c; - } - - for (var i = 0; i < len; ++i) { - parse(str.charAt(i)); - } - - parse(','); - - if ('/' == this.input.charAt(0)) { - this.consume(1); - tok.selfClosing = true; - } - - return tok; - } - }, - - /** - * Indent | Outdent | Newline. - */ - - indent: function() { - var captures, re; - - // established regexp - if (this.indentRe) { - captures = this.indentRe.exec(this.input); - // determine regexp - } else { - // tabs - re = /^\n(\t*) */; - captures = re.exec(this.input); - - // spaces - if (captures && !captures[1].length) { - re = /^\n( *)/; - captures = re.exec(this.input); - } - - // established - if (captures && captures[1].length) this.indentRe = re; - } - - if (captures) { - var tok - , indents = captures[1].length; - - ++this.lineno; - this.consume(indents + 1); - - if (' ' == this.input[0] || '\t' == this.input[0]) { - throw new Error('Invalid indentation, you can use tabs or spaces but not both'); - } - - // blank line - if ('\n' == this.input[0]) return this.tok('newline'); - - // outdent - if (this.indentStack.length && indents < this.indentStack[0]) { - while (this.indentStack.length && this.indentStack[0] > indents) { - this.stash.push(this.tok('outdent')); - this.indentStack.shift(); - } - tok = this.stash.pop(); - // indent - } else if (indents && indents != this.indentStack[0]) { - this.indentStack.unshift(indents); - tok = this.tok('indent', indents); - // newline - } else { - tok = this.tok('newline'); - } - - return tok; - } - }, - - /** - * Pipe-less text consumed only when - * pipeless is true; - */ - - pipelessText: function() { - if (this.pipeless) { - if ('\n' == this.input[0]) return; - var i = this.input.indexOf('\n'); - if (-1 == i) i = this.input.length; - var str = this.input.substr(0, i); - this.consume(str.length); - return this.tok('text', str); - } - }, - - /** - * ':' - */ - - colon: function() { - return this.scan(/^: */, ':'); - }, - - /** - * Return the next token object, or those - * previously stashed by lookahead. - * - * @return {Object} - * @api private - */ - - advance: function(){ - return this.stashed() - || this.next(); - }, - - /** - * Return the next token object. - * - * @return {Object} - * @api private - */ - - next: function() { - return this.deferred() - || this.blank() - || this.eos() - || this.pipelessText() - || this.yield() - || this.doctype() - || this.interpolation() - || this["case"]() - || this.when() - || this["default"]() - || this["extends"]() - || this.append() - || this.prepend() - || this.block() - || this.include() - || this.mixin() - || this.call() - || this.conditional() - || this.each() - || this["while"]() - || this.assignment() - || this.tag() - || this.filter() - || this.code() - || this.id() - || this.className() - || this.attrs() - || this.indent() - || this.comment() - || this.colon() - || this.text(); - } -}; diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/attrs.js b/node_modules/mocha/node_modules/jade/lib/nodes/attrs.js deleted file mode 100644 index 5de9b59c..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/attrs.js +++ /dev/null @@ -1,77 +0,0 @@ - -/*! - * Jade - nodes - Attrs - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'), - Block = require('./block'); - -/** - * Initialize a `Attrs` node. - * - * @api public - */ - -var Attrs = module.exports = function Attrs() { - this.attrs = []; -}; - -/** - * Inherit from `Node`. - */ - -Attrs.prototype.__proto__ = Node.prototype; - -/** - * Set attribute `name` to `val`, keep in mind these become - * part of a raw js object literal, so to quote a value you must - * '"quote me"', otherwise or example 'user.name' is literal JavaScript. - * - * @param {String} name - * @param {String} val - * @param {Boolean} escaped - * @return {Tag} for chaining - * @api public - */ - -Attrs.prototype.setAttribute = function(name, val, escaped){ - this.attrs.push({ name: name, val: val, escaped: escaped }); - return this; -}; - -/** - * Remove attribute `name` when present. - * - * @param {String} name - * @api public - */ - -Attrs.prototype.removeAttribute = function(name){ - for (var i = 0, len = this.attrs.length; i < len; ++i) { - if (this.attrs[i] && this.attrs[i].name == name) { - delete this.attrs[i]; - } - } -}; - -/** - * Get attribute value by `name`. - * - * @param {String} name - * @return {String} - * @api public - */ - -Attrs.prototype.getAttribute = function(name){ - for (var i = 0, len = this.attrs.length; i < len; ++i) { - if (this.attrs[i] && this.attrs[i].name == name) { - return this.attrs[i].val; - } - } -}; diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/block-comment.js b/node_modules/mocha/node_modules/jade/lib/nodes/block-comment.js deleted file mode 100644 index 4f41e4a5..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/block-comment.js +++ /dev/null @@ -1,33 +0,0 @@ - -/*! - * Jade - nodes - BlockComment - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `BlockComment` with the given `block`. - * - * @param {String} val - * @param {Block} block - * @param {Boolean} buffer - * @api public - */ - -var BlockComment = module.exports = function BlockComment(val, block, buffer) { - this.block = block; - this.val = val; - this.buffer = buffer; -}; - -/** - * Inherit from `Node`. - */ - -BlockComment.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/block.js b/node_modules/mocha/node_modules/jade/lib/nodes/block.js deleted file mode 100644 index bb00a1d9..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/block.js +++ /dev/null @@ -1,121 +0,0 @@ - -/*! - * Jade - nodes - Block - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a new `Block` with an optional `node`. - * - * @param {Node} node - * @api public - */ - -var Block = module.exports = function Block(node){ - this.nodes = []; - if (node) this.push(node); -}; - -/** - * Inherit from `Node`. - */ - -Block.prototype.__proto__ = Node.prototype; - -/** - * Block flag. - */ - -Block.prototype.isBlock = true; - -/** - * Replace the nodes in `other` with the nodes - * in `this` block. - * - * @param {Block} other - * @api private - */ - -Block.prototype.replace = function(other){ - other.nodes = this.nodes; -}; - -/** - * Pust the given `node`. - * - * @param {Node} node - * @return {Number} - * @api public - */ - -Block.prototype.push = function(node){ - return this.nodes.push(node); -}; - -/** - * Check if this block is empty. - * - * @return {Boolean} - * @api public - */ - -Block.prototype.isEmpty = function(){ - return 0 == this.nodes.length; -}; - -/** - * Unshift the given `node`. - * - * @param {Node} node - * @return {Number} - * @api public - */ - -Block.prototype.unshift = function(node){ - return this.nodes.unshift(node); -}; - -/** - * Return the "last" block, or the first `yield` node. - * - * @return {Block} - * @api private - */ - -Block.prototype.includeBlock = function(){ - var ret = this - , node; - - for (var i = 0, len = this.nodes.length; i < len; ++i) { - node = this.nodes[i]; - if (node.yield) return node; - else if (node.textOnly) continue; - else if (node.includeBlock) ret = node.includeBlock(); - else if (node.block && !node.block.isEmpty()) ret = node.block.includeBlock(); - } - - return ret; -}; - -/** - * Return a clone of this block. - * - * @return {Block} - * @api private - */ - -Block.prototype.clone = function(){ - var clone = new Block; - for (var i = 0, len = this.nodes.length; i < len; ++i) { - clone.push(this.nodes[i].clone()); - } - return clone; -}; - diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/case.js b/node_modules/mocha/node_modules/jade/lib/nodes/case.js deleted file mode 100644 index 08ff0337..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/case.js +++ /dev/null @@ -1,43 +0,0 @@ - -/*! - * Jade - nodes - Case - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a new `Case` with `expr`. - * - * @param {String} expr - * @api public - */ - -var Case = exports = module.exports = function Case(expr, block){ - this.expr = expr; - this.block = block; -}; - -/** - * Inherit from `Node`. - */ - -Case.prototype.__proto__ = Node.prototype; - -var When = exports.When = function When(expr, block){ - this.expr = expr; - this.block = block; - this.debug = false; -}; - -/** - * Inherit from `Node`. - */ - -When.prototype.__proto__ = Node.prototype; - diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/code.js b/node_modules/mocha/node_modules/jade/lib/nodes/code.js deleted file mode 100644 index babc6759..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/code.js +++ /dev/null @@ -1,35 +0,0 @@ - -/*! - * Jade - nodes - Code - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Code` node with the given code `val`. - * Code may also be optionally buffered and escaped. - * - * @param {String} val - * @param {Boolean} buffer - * @param {Boolean} escape - * @api public - */ - -var Code = module.exports = function Code(val, buffer, escape) { - this.val = val; - this.buffer = buffer; - this.escape = escape; - if (val.match(/^ *else/)) this.debug = false; -}; - -/** - * Inherit from `Node`. - */ - -Code.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/comment.js b/node_modules/mocha/node_modules/jade/lib/nodes/comment.js deleted file mode 100644 index 2e1469e7..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/comment.js +++ /dev/null @@ -1,32 +0,0 @@ - -/*! - * Jade - nodes - Comment - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Comment` with the given `val`, optionally `buffer`, - * otherwise the comment may render in the output. - * - * @param {String} val - * @param {Boolean} buffer - * @api public - */ - -var Comment = module.exports = function Comment(val, buffer) { - this.val = val; - this.buffer = buffer; -}; - -/** - * Inherit from `Node`. - */ - -Comment.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/doctype.js b/node_modules/mocha/node_modules/jade/lib/nodes/doctype.js deleted file mode 100644 index b8f33e56..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/doctype.js +++ /dev/null @@ -1,29 +0,0 @@ - -/*! - * Jade - nodes - Doctype - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Doctype` with the given `val`. - * - * @param {String} val - * @api public - */ - -var Doctype = module.exports = function Doctype(val) { - this.val = val; -}; - -/** - * Inherit from `Node`. - */ - -Doctype.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/each.js b/node_modules/mocha/node_modules/jade/lib/nodes/each.js deleted file mode 100644 index f54101f1..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/each.js +++ /dev/null @@ -1,35 +0,0 @@ - -/*! - * Jade - nodes - Each - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize an `Each` node, representing iteration - * - * @param {String} obj - * @param {String} val - * @param {String} key - * @param {Block} block - * @api public - */ - -var Each = module.exports = function Each(obj, val, key, block) { - this.obj = obj; - this.val = val; - this.key = key; - this.block = block; -}; - -/** - * Inherit from `Node`. - */ - -Each.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/filter.js b/node_modules/mocha/node_modules/jade/lib/nodes/filter.js deleted file mode 100644 index 851a0040..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/filter.js +++ /dev/null @@ -1,35 +0,0 @@ - -/*! - * Jade - nodes - Filter - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node') - , Block = require('./block'); - -/** - * Initialize a `Filter` node with the given - * filter `name` and `block`. - * - * @param {String} name - * @param {Block|Node} block - * @api public - */ - -var Filter = module.exports = function Filter(name, block, attrs) { - this.name = name; - this.block = block; - this.attrs = attrs; - this.isASTFilter = !block.nodes.every(function(node){ return node.isText }); -}; - -/** - * Inherit from `Node`. - */ - -Filter.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/index.js b/node_modules/mocha/node_modules/jade/lib/nodes/index.js deleted file mode 100644 index 386ad2f9..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/index.js +++ /dev/null @@ -1,20 +0,0 @@ - -/*! - * Jade - nodes - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -exports.Node = require('./node'); -exports.Tag = require('./tag'); -exports.Code = require('./code'); -exports.Each = require('./each'); -exports.Case = require('./case'); -exports.Text = require('./text'); -exports.Block = require('./block'); -exports.Mixin = require('./mixin'); -exports.Filter = require('./filter'); -exports.Comment = require('./comment'); -exports.Literal = require('./literal'); -exports.BlockComment = require('./block-comment'); -exports.Doctype = require('./doctype'); diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/literal.js b/node_modules/mocha/node_modules/jade/lib/nodes/literal.js deleted file mode 100644 index fde586be..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/literal.js +++ /dev/null @@ -1,32 +0,0 @@ - -/*! - * Jade - nodes - Literal - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Literal` node with the given `str. - * - * @param {String} str - * @api public - */ - -var Literal = module.exports = function Literal(str) { - this.str = str - .replace(/\\/g, "\\\\") - .replace(/\n|\r\n/g, "\\n") - .replace(/'/g, "\\'"); -}; - -/** - * Inherit from `Node`. - */ - -Literal.prototype.__proto__ = Node.prototype; diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/mixin.js b/node_modules/mocha/node_modules/jade/lib/nodes/mixin.js deleted file mode 100644 index 8407bc79..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/mixin.js +++ /dev/null @@ -1,36 +0,0 @@ - -/*! - * Jade - nodes - Mixin - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Attrs = require('./attrs'); - -/** - * Initialize a new `Mixin` with `name` and `block`. - * - * @param {String} name - * @param {String} args - * @param {Block} block - * @api public - */ - -var Mixin = module.exports = function Mixin(name, args, block, call){ - this.name = name; - this.args = args; - this.block = block; - this.attrs = []; - this.call = call; -}; - -/** - * Inherit from `Attrs`. - */ - -Mixin.prototype.__proto__ = Attrs.prototype; - diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/node.js b/node_modules/mocha/node_modules/jade/lib/nodes/node.js deleted file mode 100644 index e98f042c..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/node.js +++ /dev/null @@ -1,25 +0,0 @@ - -/*! - * Jade - nodes - Node - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Initialize a `Node`. - * - * @api public - */ - -var Node = module.exports = function Node(){}; - -/** - * Clone this node (return itself) - * - * @return {Node} - * @api private - */ - -Node.prototype.clone = function(){ - return this; -}; diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/tag.js b/node_modules/mocha/node_modules/jade/lib/nodes/tag.js deleted file mode 100644 index 4b6728ad..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/tag.js +++ /dev/null @@ -1,95 +0,0 @@ - -/*! - * Jade - nodes - Tag - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Attrs = require('./attrs'), - Block = require('./block'), - inlineTags = require('../inline-tags'); - -/** - * Initialize a `Tag` node with the given tag `name` and optional `block`. - * - * @param {String} name - * @param {Block} block - * @api public - */ - -var Tag = module.exports = function Tag(name, block) { - this.name = name; - this.attrs = []; - this.block = block || new Block; -}; - -/** - * Inherit from `Attrs`. - */ - -Tag.prototype.__proto__ = Attrs.prototype; - -/** - * Clone this tag. - * - * @return {Tag} - * @api private - */ - -Tag.prototype.clone = function(){ - var clone = new Tag(this.name, this.block.clone()); - clone.line = this.line; - clone.attrs = this.attrs; - clone.textOnly = this.textOnly; - return clone; -}; - -/** - * Check if this tag is an inline tag. - * - * @return {Boolean} - * @api private - */ - -Tag.prototype.isInline = function(){ - return ~inlineTags.indexOf(this.name); -}; - -/** - * Check if this tag's contents can be inlined. Used for pretty printing. - * - * @return {Boolean} - * @api private - */ - -Tag.prototype.canInline = function(){ - var nodes = this.block.nodes; - - function isInline(node){ - // Recurse if the node is a block - if (node.isBlock) return node.nodes.every(isInline); - return node.isText || (node.isInline && node.isInline()); - } - - // Empty tag - if (!nodes.length) return true; - - // Text-only or inline-only tag - if (1 == nodes.length) return isInline(nodes[0]); - - // Multi-line inline-only tag - if (this.block.nodes.every(isInline)) { - for (var i = 1, len = nodes.length; i < len; ++i) { - if (nodes[i-1].isText && nodes[i].isText) - return false; - } - return true; - } - - // Mixed tag - return false; -}; \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/nodes/text.js b/node_modules/mocha/node_modules/jade/lib/nodes/text.js deleted file mode 100644 index 3b5dd557..00000000 --- a/node_modules/mocha/node_modules/jade/lib/nodes/text.js +++ /dev/null @@ -1,36 +0,0 @@ - -/*! - * Jade - nodes - Text - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Text` node with optional `line`. - * - * @param {String} line - * @api public - */ - -var Text = module.exports = function Text(line) { - this.val = ''; - if ('string' == typeof line) this.val = line; -}; - -/** - * Inherit from `Node`. - */ - -Text.prototype.__proto__ = Node.prototype; - -/** - * Flag as text. - */ - -Text.prototype.isText = true; \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/parser.js b/node_modules/mocha/node_modules/jade/lib/parser.js deleted file mode 100644 index 92f2af0c..00000000 --- a/node_modules/mocha/node_modules/jade/lib/parser.js +++ /dev/null @@ -1,710 +0,0 @@ - -/*! - * Jade - Parser - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Lexer = require('./lexer') - , nodes = require('./nodes'); - -/** - * Initialize `Parser` with the given input `str` and `filename`. - * - * @param {String} str - * @param {String} filename - * @param {Object} options - * @api public - */ - -var Parser = exports = module.exports = function Parser(str, filename, options){ - this.input = str; - this.lexer = new Lexer(str, options); - this.filename = filename; - this.blocks = {}; - this.mixins = {}; - this.options = options; - this.contexts = [this]; -}; - -/** - * Tags that may not contain tags. - */ - -var textOnly = exports.textOnly = ['script', 'style']; - -/** - * Parser prototype. - */ - -Parser.prototype = { - - /** - * Push `parser` onto the context stack, - * or pop and return a `Parser`. - */ - - context: function(parser){ - if (parser) { - this.contexts.push(parser); - } else { - return this.contexts.pop(); - } - }, - - /** - * Return the next token object. - * - * @return {Object} - * @api private - */ - - advance: function(){ - return this.lexer.advance(); - }, - - /** - * Skip `n` tokens. - * - * @param {Number} n - * @api private - */ - - skip: function(n){ - while (n--) this.advance(); - }, - - /** - * Single token lookahead. - * - * @return {Object} - * @api private - */ - - peek: function() { - return this.lookahead(1); - }, - - /** - * Return lexer lineno. - * - * @return {Number} - * @api private - */ - - line: function() { - return this.lexer.lineno; - }, - - /** - * `n` token lookahead. - * - * @param {Number} n - * @return {Object} - * @api private - */ - - lookahead: function(n){ - return this.lexer.lookahead(n); - }, - - /** - * Parse input returning a string of js for evaluation. - * - * @return {String} - * @api public - */ - - parse: function(){ - var block = new nodes.Block, parser; - block.line = this.line(); - - while ('eos' != this.peek().type) { - if ('newline' == this.peek().type) { - this.advance(); - } else { - block.push(this.parseExpr()); - } - } - - if (parser = this.extending) { - this.context(parser); - var ast = parser.parse(); - this.context(); - // hoist mixins - for (var name in this.mixins) - ast.unshift(this.mixins[name]); - return ast; - } - - return block; - }, - - /** - * Expect the given type, or throw an exception. - * - * @param {String} type - * @api private - */ - - expect: function(type){ - if (this.peek().type === type) { - return this.advance(); - } else { - throw new Error('expected "' + type + '", but got "' + this.peek().type + '"'); - } - }, - - /** - * Accept the given `type`. - * - * @param {String} type - * @api private - */ - - accept: function(type){ - if (this.peek().type === type) { - return this.advance(); - } - }, - - /** - * tag - * | doctype - * | mixin - * | include - * | filter - * | comment - * | text - * | each - * | code - * | yield - * | id - * | class - * | interpolation - */ - - parseExpr: function(){ - switch (this.peek().type) { - case 'tag': - return this.parseTag(); - case 'mixin': - return this.parseMixin(); - case 'block': - return this.parseBlock(); - case 'case': - return this.parseCase(); - case 'when': - return this.parseWhen(); - case 'default': - return this.parseDefault(); - case 'extends': - return this.parseExtends(); - case 'include': - return this.parseInclude(); - case 'doctype': - return this.parseDoctype(); - case 'filter': - return this.parseFilter(); - case 'comment': - return this.parseComment(); - case 'text': - return this.parseText(); - case 'each': - return this.parseEach(); - case 'code': - return this.parseCode(); - case 'call': - return this.parseCall(); - case 'interpolation': - return this.parseInterpolation(); - case 'yield': - this.advance(); - var block = new nodes.Block; - block.yield = true; - return block; - case 'id': - case 'class': - var tok = this.advance(); - this.lexer.defer(this.lexer.tok('tag', 'div')); - this.lexer.defer(tok); - return this.parseExpr(); - default: - throw new Error('unexpected token "' + this.peek().type + '"'); - } - }, - - /** - * Text - */ - - parseText: function(){ - var tok = this.expect('text') - , node = new nodes.Text(tok.val); - node.line = this.line(); - return node; - }, - - /** - * ':' expr - * | block - */ - - parseBlockExpansion: function(){ - if (':' == this.peek().type) { - this.advance(); - return new nodes.Block(this.parseExpr()); - } else { - return this.block(); - } - }, - - /** - * case - */ - - parseCase: function(){ - var val = this.expect('case').val - , node = new nodes.Case(val); - node.line = this.line(); - node.block = this.block(); - return node; - }, - - /** - * when - */ - - parseWhen: function(){ - var val = this.expect('when').val - return new nodes.Case.When(val, this.parseBlockExpansion()); - }, - - /** - * default - */ - - parseDefault: function(){ - this.expect('default'); - return new nodes.Case.When('default', this.parseBlockExpansion()); - }, - - /** - * code - */ - - parseCode: function(){ - var tok = this.expect('code') - , node = new nodes.Code(tok.val, tok.buffer, tok.escape) - , block - , i = 1; - node.line = this.line(); - while (this.lookahead(i) && 'newline' == this.lookahead(i).type) ++i; - block = 'indent' == this.lookahead(i).type; - if (block) { - this.skip(i-1); - node.block = this.block(); - } - return node; - }, - - /** - * comment - */ - - parseComment: function(){ - var tok = this.expect('comment') - , node; - - if ('indent' == this.peek().type) { - node = new nodes.BlockComment(tok.val, this.block(), tok.buffer); - } else { - node = new nodes.Comment(tok.val, tok.buffer); - } - - node.line = this.line(); - return node; - }, - - /** - * doctype - */ - - parseDoctype: function(){ - var tok = this.expect('doctype') - , node = new nodes.Doctype(tok.val); - node.line = this.line(); - return node; - }, - - /** - * filter attrs? text-block - */ - - parseFilter: function(){ - var block - , tok = this.expect('filter') - , attrs = this.accept('attrs'); - - this.lexer.pipeless = true; - block = this.parseTextBlock(); - this.lexer.pipeless = false; - - var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs); - node.line = this.line(); - return node; - }, - - /** - * tag ':' attrs? block - */ - - parseASTFilter: function(){ - var block - , tok = this.expect('tag') - , attrs = this.accept('attrs'); - - this.expect(':'); - block = this.block(); - - var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs); - node.line = this.line(); - return node; - }, - - /** - * each block - */ - - parseEach: function(){ - var tok = this.expect('each') - , node = new nodes.Each(tok.code, tok.val, tok.key); - node.line = this.line(); - node.block = this.block(); - return node; - }, - - /** - * 'extends' name - */ - - parseExtends: function(){ - var path = require('path') - , fs = require('fs') - , dirname = path.dirname - , basename = path.basename - , join = path.join; - - if (!this.filename) - throw new Error('the "filename" option is required to extend templates'); - - var path = this.expect('extends').val.trim() - , dir = dirname(this.filename); - - var path = join(dir, path + '.jade') - , str = fs.readFileSync(path, 'utf8') - , parser = new Parser(str, path, this.options); - - parser.blocks = this.blocks; - parser.contexts = this.contexts; - this.extending = parser; - - // TODO: null node - return new nodes.Literal(''); - }, - - /** - * 'block' name block - */ - - parseBlock: function(){ - var block = this.expect('block') - , mode = block.mode - , name = block.val.trim(); - - block = 'indent' == this.peek().type - ? this.block() - : new nodes.Block(new nodes.Literal('')); - - var prev = this.blocks[name]; - - if (prev) { - switch (prev.mode) { - case 'append': - block.nodes = block.nodes.concat(prev.nodes); - prev = block; - break; - case 'prepend': - block.nodes = prev.nodes.concat(block.nodes); - prev = block; - break; - } - } - - block.mode = mode; - return this.blocks[name] = prev || block; - }, - - /** - * include block? - */ - - parseInclude: function(){ - var path = require('path') - , fs = require('fs') - , dirname = path.dirname - , basename = path.basename - , join = path.join; - - var path = this.expect('include').val.trim() - , dir = dirname(this.filename); - - if (!this.filename) - throw new Error('the "filename" option is required to use includes'); - - // no extension - if (!~basename(path).indexOf('.')) { - path += '.jade'; - } - - // non-jade - if ('.jade' != path.substr(-5)) { - var path = join(dir, path) - , str = fs.readFileSync(path, 'utf8'); - return new nodes.Literal(str); - } - - var path = join(dir, path) - , str = fs.readFileSync(path, 'utf8') - , parser = new Parser(str, path, this.options); - parser.blocks = this.blocks; - parser.mixins = this.mixins; - - this.context(parser); - var ast = parser.parse(); - this.context(); - ast.filename = path; - - if ('indent' == this.peek().type) { - ast.includeBlock().push(this.block()); - } - - return ast; - }, - - /** - * call ident block - */ - - parseCall: function(){ - var tok = this.expect('call') - , name = tok.val - , args = tok.args - , mixin = new nodes.Mixin(name, args, new nodes.Block, true); - - this.tag(mixin); - if (mixin.block.isEmpty()) mixin.block = null; - return mixin; - }, - - /** - * mixin block - */ - - parseMixin: function(){ - var tok = this.expect('mixin') - , name = tok.val - , args = tok.args - , mixin; - - // definition - if ('indent' == this.peek().type) { - mixin = new nodes.Mixin(name, args, this.block(), false); - this.mixins[name] = mixin; - return mixin; - // call - } else { - return new nodes.Mixin(name, args, null, true); - } - }, - - /** - * indent (text | newline)* outdent - */ - - parseTextBlock: function(){ - var block = new nodes.Block; - block.line = this.line(); - var spaces = this.expect('indent').val; - if (null == this._spaces) this._spaces = spaces; - var indent = Array(spaces - this._spaces + 1).join(' '); - while ('outdent' != this.peek().type) { - switch (this.peek().type) { - case 'newline': - this.advance(); - break; - case 'indent': - this.parseTextBlock().nodes.forEach(function(node){ - block.push(node); - }); - break; - default: - var text = new nodes.Text(indent + this.advance().val); - text.line = this.line(); - block.push(text); - } - } - - if (spaces == this._spaces) this._spaces = null; - this.expect('outdent'); - return block; - }, - - /** - * indent expr* outdent - */ - - block: function(){ - var block = new nodes.Block; - block.line = this.line(); - this.expect('indent'); - while ('outdent' != this.peek().type) { - if ('newline' == this.peek().type) { - this.advance(); - } else { - block.push(this.parseExpr()); - } - } - this.expect('outdent'); - return block; - }, - - /** - * interpolation (attrs | class | id)* (text | code | ':')? newline* block? - */ - - parseInterpolation: function(){ - var tok = this.advance(); - var tag = new nodes.Tag(tok.val); - tag.buffer = true; - return this.tag(tag); - }, - - /** - * tag (attrs | class | id)* (text | code | ':')? newline* block? - */ - - parseTag: function(){ - // ast-filter look-ahead - var i = 2; - if ('attrs' == this.lookahead(i).type) ++i; - if (':' == this.lookahead(i).type) { - if ('indent' == this.lookahead(++i).type) { - return this.parseASTFilter(); - } - } - - var tok = this.advance() - , tag = new nodes.Tag(tok.val); - - tag.selfClosing = tok.selfClosing; - - return this.tag(tag); - }, - - /** - * Parse tag. - */ - - tag: function(tag){ - var dot; - - tag.line = this.line(); - - // (attrs | class | id)* - out: - while (true) { - switch (this.peek().type) { - case 'id': - case 'class': - var tok = this.advance(); - tag.setAttribute(tok.type, "'" + tok.val + "'"); - continue; - case 'attrs': - var tok = this.advance() - , obj = tok.attrs - , escaped = tok.escaped - , names = Object.keys(obj); - - if (tok.selfClosing) tag.selfClosing = true; - - for (var i = 0, len = names.length; i < len; ++i) { - var name = names[i] - , val = obj[name]; - tag.setAttribute(name, val, escaped[name]); - } - continue; - default: - break out; - } - } - - // check immediate '.' - if ('.' == this.peek().val) { - dot = tag.textOnly = true; - this.advance(); - } - - // (text | code | ':')? - switch (this.peek().type) { - case 'text': - tag.block.push(this.parseText()); - break; - case 'code': - tag.code = this.parseCode(); - break; - case ':': - this.advance(); - tag.block = new nodes.Block; - tag.block.push(this.parseExpr()); - break; - } - - // newline* - while ('newline' == this.peek().type) this.advance(); - - tag.textOnly = tag.textOnly || ~textOnly.indexOf(tag.name); - - // script special-case - if ('script' == tag.name) { - var type = tag.getAttribute('type'); - if (!dot && type && 'text/javascript' != type.replace(/^['"]|['"]$/g, '')) { - tag.textOnly = false; - } - } - - // block? - if ('indent' == this.peek().type) { - if (tag.textOnly) { - this.lexer.pipeless = true; - tag.block = this.parseTextBlock(); - this.lexer.pipeless = false; - } else { - var block = this.block(); - if (tag.block) { - for (var i = 0, len = block.nodes.length; i < len; ++i) { - tag.block.push(block.nodes[i]); - } - } else { - tag.block = block; - } - } - } - - return tag; - } -}; diff --git a/node_modules/mocha/node_modules/jade/lib/runtime.js b/node_modules/mocha/node_modules/jade/lib/runtime.js deleted file mode 100644 index fb711f5e..00000000 --- a/node_modules/mocha/node_modules/jade/lib/runtime.js +++ /dev/null @@ -1,174 +0,0 @@ - -/*! - * Jade - runtime - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Lame Array.isArray() polyfill for now. - */ - -if (!Array.isArray) { - Array.isArray = function(arr){ - return '[object Array]' == Object.prototype.toString.call(arr); - }; -} - -/** - * Lame Object.keys() polyfill for now. - */ - -if (!Object.keys) { - Object.keys = function(obj){ - var arr = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - arr.push(key); - } - } - return arr; - } -} - -/** - * Merge two attribute objects giving precedence - * to values in object `b`. Classes are special-cased - * allowing for arrays and merging/joining appropriately - * resulting in a string. - * - * @param {Object} a - * @param {Object} b - * @return {Object} a - * @api private - */ - -exports.merge = function merge(a, b) { - var ac = a['class']; - var bc = b['class']; - - if (ac || bc) { - ac = ac || []; - bc = bc || []; - if (!Array.isArray(ac)) ac = [ac]; - if (!Array.isArray(bc)) bc = [bc]; - ac = ac.filter(nulls); - bc = bc.filter(nulls); - a['class'] = ac.concat(bc).join(' '); - } - - for (var key in b) { - if (key != 'class') { - a[key] = b[key]; - } - } - - return a; -}; - -/** - * Filter null `val`s. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function nulls(val) { - return val != null; -} - -/** - * Render the given attributes object. - * - * @param {Object} obj - * @param {Object} escaped - * @return {String} - * @api private - */ - -exports.attrs = function attrs(obj, escaped){ - var buf = [] - , terse = obj.terse; - - delete obj.terse; - var keys = Object.keys(obj) - , len = keys.length; - - if (len) { - buf.push(''); - for (var i = 0; i < len; ++i) { - var key = keys[i] - , val = obj[key]; - - if ('boolean' == typeof val || null == val) { - if (val) { - terse - ? buf.push(key) - : buf.push(key + '="' + key + '"'); - } - } else if (0 == key.indexOf('data') && 'string' != typeof val) { - buf.push(key + "='" + JSON.stringify(val) + "'"); - } else if ('class' == key && Array.isArray(val)) { - buf.push(key + '="' + exports.escape(val.join(' ')) + '"'); - } else if (escaped && escaped[key]) { - buf.push(key + '="' + exports.escape(val) + '"'); - } else { - buf.push(key + '="' + val + '"'); - } - } - } - - return buf.join(' '); -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function escape(html){ - return String(html) - .replace(/&(?!(\w+|\#\d+);)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; - -/** - * Re-throw the given `err` in context to the - * the jade in `filename` at the given `lineno`. - * - * @param {Error} err - * @param {String} filename - * @param {String} lineno - * @api private - */ - -exports.rethrow = function rethrow(err, filename, lineno){ - if (!filename) throw err; - - var context = 3 - , str = require('fs').readFileSync(filename, 'utf8') - , lines = str.split('\n') - , start = Math.max(lineno - context, 0) - , end = Math.min(lines.length, lineno + context); - - // Error context - var context = lines.slice(start, end).map(function(line, i){ - var curr = i + start + 1; - return (curr == lineno ? ' > ' : ' ') - + curr - + '| ' - + line; - }).join('\n'); - - // Alter exception message - err.path = filename; - err.message = (filename || 'Jade') + ':' + lineno - + '\n' + context + '\n\n' + err.message; - throw err; -}; diff --git a/node_modules/mocha/node_modules/jade/lib/self-closing.js b/node_modules/mocha/node_modules/jade/lib/self-closing.js deleted file mode 100644 index 05487712..00000000 --- a/node_modules/mocha/node_modules/jade/lib/self-closing.js +++ /dev/null @@ -1,19 +0,0 @@ - -/*! - * Jade - self closing tags - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = [ - 'meta' - , 'img' - , 'link' - , 'input' - , 'source' - , 'area' - , 'base' - , 'col' - , 'br' - , 'hr' -]; \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/lib/utils.js b/node_modules/mocha/node_modules/jade/lib/utils.js deleted file mode 100644 index ff46d022..00000000 --- a/node_modules/mocha/node_modules/jade/lib/utils.js +++ /dev/null @@ -1,49 +0,0 @@ - -/*! - * Jade - utils - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Convert interpolation in the given string to JavaScript. - * - * @param {String} str - * @return {String} - * @api private - */ - -var interpolate = exports.interpolate = function(str){ - return str.replace(/(\\)?([#!]){(.*?)}/g, function(str, escape, flag, code){ - return escape - ? str - : "' + " - + ('!' == flag ? '' : 'escape') - + "((interp = " + code.replace(/\\'/g, "'") - + ") == null ? '' : interp) + '"; - }); -}; - -/** - * Escape single quotes in `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -var escape = exports.escape = function(str) { - return str.replace(/'/g, "\\'"); -}; - -/** - * Interpolate, and escape the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.text = function(str){ - return interpolate(escape(str)); -}; \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/node_modules/commander/.npmignore b/node_modules/mocha/node_modules/jade/node_modules/commander/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/commander/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/mocha/node_modules/jade/node_modules/commander/.travis.yml b/node_modules/mocha/node_modules/jade/node_modules/commander/.travis.yml deleted file mode 100644 index f1d0f13c..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/commander/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.4 - - 0.6 diff --git a/node_modules/mocha/node_modules/jade/node_modules/commander/History.md b/node_modules/mocha/node_modules/jade/node_modules/commander/History.md deleted file mode 100644 index 4961d2e2..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/commander/History.md +++ /dev/null @@ -1,107 +0,0 @@ - -0.6.1 / 2012-06-01 -================== - - * Added: append (yes or no) on confirmation - * Added: allow node.js v0.7.x - -0.6.0 / 2012-04-10 -================== - - * Added `.prompt(obj, callback)` support. Closes #49 - * Added default support to .choose(). Closes #41 - * Fixed the choice example - -0.5.1 / 2011-12-20 -================== - - * Fixed `password()` for recent nodes. Closes #36 - -0.5.0 / 2011-12-04 -================== - - * Added sub-command option support [itay] - -0.4.3 / 2011-12-04 -================== - - * Fixed custom help ordering. Closes #32 - -0.4.2 / 2011-11-24 -================== - - * Added travis support - * Fixed: line-buffered input automatically trimmed. Closes #31 - -0.4.1 / 2011-11-18 -================== - - * Removed listening for "close" on --help - -0.4.0 / 2011-11-15 -================== - - * Added support for `--`. Closes #24 - -0.3.3 / 2011-11-14 -================== - - * Fixed: wait for close event when writing help info [Jerry Hamlet] - -0.3.2 / 2011-11-01 -================== - - * Fixed long flag definitions with values [felixge] - -0.3.1 / 2011-10-31 -================== - - * Changed `--version` short flag to `-V` from `-v` - * Changed `.version()` so it's configurable [felixge] - -0.3.0 / 2011-10-31 -================== - - * Added support for long flags only. Closes #18 - -0.2.1 / 2011-10-24 -================== - - * "node": ">= 0.4.x < 0.7.0". Closes #20 - -0.2.0 / 2011-09-26 -================== - - * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs] - -0.1.0 / 2011-08-24 -================== - - * Added support for custom `--help` output - -0.0.5 / 2011-08-18 -================== - - * Changed: when the user enters nothing prompt for password again - * Fixed issue with passwords beginning with numbers [NuckChorris] - -0.0.4 / 2011-08-15 -================== - - * Fixed `Commander#args` - -0.0.3 / 2011-08-15 -================== - - * Added default option value support - -0.0.2 / 2011-08-15 -================== - - * Added mask support to `Command#password(str[, mask], fn)` - * Added `Command#password(str, fn)` - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/mocha/node_modules/jade/node_modules/commander/Makefile b/node_modules/mocha/node_modules/jade/node_modules/commander/Makefile deleted file mode 100644 index 00746255..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/commander/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -TESTS = $(shell find test/test.*.js) - -test: - @./test/run $(TESTS) - -.PHONY: test \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/node_modules/commander/Readme.md b/node_modules/mocha/node_modules/jade/node_modules/commander/Readme.md deleted file mode 100644 index b8328c37..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/commander/Readme.md +++ /dev/null @@ -1,262 +0,0 @@ -# Commander.js - - The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander). - - [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js) - -## Installation - - $ npm install commander - -## Option parsing - - Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('commander'); - -program - .version('0.0.1') - .option('-p, --peppers', 'Add peppers') - .option('-P, --pineapple', 'Add pineapple') - .option('-b, --bbq', 'Add bbq sauce') - .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') - .parse(process.argv); - -console.log('you ordered a pizza with:'); -if (program.peppers) console.log(' - peppers'); -if (program.pineapple) console.log(' - pineappe'); -if (program.bbq) console.log(' - bbq'); -console.log(' - %s cheese', program.cheese); -``` - - Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. - -## Automated --help - - The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free: - -``` - $ ./examples/pizza --help - - Usage: pizza [options] - - Options: - - -V, --version output the version number - -p, --peppers Add peppers - -P, --pineapple Add pineappe - -b, --bbq Add bbq sauce - -c, --cheese Add the specified type of cheese [marble] - -h, --help output usage information - -``` - -## Coercion - -```js -function range(val) { - return val.split('..').map(Number); -} - -function list(val) { - return val.split(','); -} - -program - .version('0.0.1') - .usage('[options] ') - .option('-i, --integer ', 'An integer argument', parseInt) - .option('-f, --float ', 'A float argument', parseFloat) - .option('-r, --range ..', 'A range', range) - .option('-l, --list ', 'A list', list) - .option('-o, --optional [value]', 'An optional value') - .parse(process.argv); - -console.log(' int: %j', program.integer); -console.log(' float: %j', program.float); -console.log(' optional: %j', program.optional); -program.range = program.range || []; -console.log(' range: %j..%j', program.range[0], program.range[1]); -console.log(' list: %j', program.list); -console.log(' args: %j', program.args); -``` - -## Custom help - - You can display arbitrary `-h, --help` information - by listening for "--help". Commander will automatically - exit once you are done so that the remainder of your program - does not execute causing undesired behaviours, for example - in the following executable "stuff" will not output when - `--help` is used. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('../'); - -function list(val) { - return val.split(',').map(Number); -} - -program - .version('0.0.1') - .option('-f, --foo', 'enable some foo') - .option('-b, --bar', 'enable some bar') - .option('-B, --baz', 'enable some baz'); - -// must be before .parse() since -// node's emit() is immediate - -program.on('--help', function(){ - console.log(' Examples:'); - console.log(''); - console.log(' $ custom-help --help'); - console.log(' $ custom-help -h'); - console.log(''); -}); - -program.parse(process.argv); - -console.log('stuff'); -``` - -yielding the following help output: - -``` - -Usage: custom-help [options] - -Options: - - -h, --help output usage information - -V, --version output the version number - -f, --foo enable some foo - -b, --bar enable some bar - -B, --baz enable some baz - -Examples: - - $ custom-help --help - $ custom-help -h - -``` - -## .prompt(msg, fn) - - Single-line prompt: - -```js -program.prompt('name: ', function(name){ - console.log('hi %s', name); -}); -``` - - Multi-line prompt: - -```js -program.prompt('description:', function(name){ - console.log('hi %s', name); -}); -``` - - Coercion: - -```js -program.prompt('Age: ', Number, function(age){ - console.log('age: %j', age); -}); -``` - -```js -program.prompt('Birthdate: ', Date, function(date){ - console.log('date: %s', date); -}); -``` - -## .password(msg[, mask], fn) - -Prompt for password without echoing: - -```js -program.password('Password: ', function(pass){ - console.log('got "%s"', pass); - process.stdin.destroy(); -}); -``` - -Prompt for password with mask char "*": - -```js -program.password('Password: ', '*', function(pass){ - console.log('got "%s"', pass); - process.stdin.destroy(); -}); -``` - -## .confirm(msg, fn) - - Confirm with the given `msg`: - -```js -program.confirm('continue? ', function(ok){ - console.log(' got %j', ok); -}); -``` - -## .choose(list, fn) - - Let the user choose from a `list`: - -```js -var list = ['tobi', 'loki', 'jane', 'manny', 'luna']; - -console.log('Choose the coolest pet:'); -program.choose(list, function(i){ - console.log('you chose %d "%s"', i, list[i]); -}); -``` - -## Links - - - [API documentation](http://visionmedia.github.com/commander.js/) - - [ascii tables](https://github.com/LearnBoost/cli-table) - - [progress bars](https://github.com/visionmedia/node-progress) - - [more progress bars](https://github.com/substack/node-multimeter) - - [examples](https://github.com/visionmedia/commander.js/tree/master/examples) - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> - -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/mocha/node_modules/jade/node_modules/commander/index.js b/node_modules/mocha/node_modules/jade/node_modules/commander/index.js deleted file mode 100644 index 06ec1e4b..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/commander/index.js +++ /dev/null @@ -1,2 +0,0 @@ - -module.exports = require('./lib/commander'); \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/node_modules/commander/lib/commander.js b/node_modules/mocha/node_modules/jade/node_modules/commander/lib/commander.js deleted file mode 100644 index 5ba87ebb..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/commander/lib/commander.js +++ /dev/null @@ -1,1026 +0,0 @@ - -/*! - * commander - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , path = require('path') - , tty = require('tty') - , basename = path.basename; - -/** - * Expose the root command. - */ - -exports = module.exports = new Command; - -/** - * Expose `Command`. - */ - -exports.Command = Command; - -/** - * Expose `Option`. - */ - -exports.Option = Option; - -/** - * Initialize a new `Option` with the given `flags` and `description`. - * - * @param {String} flags - * @param {String} description - * @api public - */ - -function Option(flags, description) { - this.flags = flags; - this.required = ~flags.indexOf('<'); - this.optional = ~flags.indexOf('['); - this.bool = !~flags.indexOf('-no-'); - flags = flags.split(/[ ,|]+/); - if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift(); - this.long = flags.shift(); - this.description = description; -} - -/** - * Return option name. - * - * @return {String} - * @api private - */ - -Option.prototype.name = function(){ - return this.long - .replace('--', '') - .replace('no-', ''); -}; - -/** - * Check if `arg` matches the short or long flag. - * - * @param {String} arg - * @return {Boolean} - * @api private - */ - -Option.prototype.is = function(arg){ - return arg == this.short - || arg == this.long; -}; - -/** - * Initialize a new `Command`. - * - * @param {String} name - * @api public - */ - -function Command(name) { - this.commands = []; - this.options = []; - this.args = []; - this.name = name; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Command.prototype.__proto__ = EventEmitter.prototype; - -/** - * Add command `name`. - * - * The `.action()` callback is invoked when the - * command `name` is specified via __ARGV__, - * and the remaining arguments are applied to the - * function for access. - * - * When the `name` is "*" an un-matched command - * will be passed as the first arg, followed by - * the rest of __ARGV__ remaining. - * - * Examples: - * - * program - * .version('0.0.1') - * .option('-C, --chdir ', 'change the working directory') - * .option('-c, --config ', 'set config path. defaults to ./deploy.conf') - * .option('-T, --no-tests', 'ignore test hook') - * - * program - * .command('setup') - * .description('run remote setup commands') - * .action(function(){ - * console.log('setup'); - * }); - * - * program - * .command('exec ') - * .description('run the given remote command') - * .action(function(cmd){ - * console.log('exec "%s"', cmd); - * }); - * - * program - * .command('*') - * .description('deploy the given env') - * .action(function(env){ - * console.log('deploying "%s"', env); - * }); - * - * program.parse(process.argv); - * - * @param {String} name - * @return {Command} the new command - * @api public - */ - -Command.prototype.command = function(name){ - var args = name.split(/ +/); - var cmd = new Command(args.shift()); - this.commands.push(cmd); - cmd.parseExpectedArgs(args); - cmd.parent = this; - return cmd; -}; - -/** - * Parse expected `args`. - * - * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. - * - * @param {Array} args - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parseExpectedArgs = function(args){ - if (!args.length) return; - var self = this; - args.forEach(function(arg){ - switch (arg[0]) { - case '<': - self.args.push({ required: true, name: arg.slice(1, -1) }); - break; - case '[': - self.args.push({ required: false, name: arg.slice(1, -1) }); - break; - } - }); - return this; -}; - -/** - * Register callback `fn` for the command. - * - * Examples: - * - * program - * .command('help') - * .description('display verbose help') - * .action(function(){ - * // output help here - * }); - * - * @param {Function} fn - * @return {Command} for chaining - * @api public - */ - -Command.prototype.action = function(fn){ - var self = this; - this.parent.on(this.name, function(args, unknown){ - // Parse any so-far unknown options - unknown = unknown || []; - var parsed = self.parseOptions(unknown); - - // Output help if necessary - outputHelpIfNecessary(self, parsed.unknown); - - // If there are still any unknown options, then we simply - // die, unless someone asked for help, in which case we give it - // to them, and then we die. - if (parsed.unknown.length > 0) { - self.unknownOption(parsed.unknown[0]); - } - - self.args.forEach(function(arg, i){ - if (arg.required && null == args[i]) { - self.missingArgument(arg.name); - } - }); - - // Always append ourselves to the end of the arguments, - // to make sure we match the number of arguments the user - // expects - if (self.args.length) { - args[self.args.length] = self; - } else { - args.push(self); - } - - fn.apply(this, args); - }); - return this; -}; - -/** - * Define option with `flags`, `description` and optional - * coercion `fn`. - * - * The `flags` string should contain both the short and long flags, - * separated by comma, a pipe or space. The following are all valid - * all will output this way when `--help` is used. - * - * "-p, --pepper" - * "-p|--pepper" - * "-p --pepper" - * - * Examples: - * - * // simple boolean defaulting to false - * program.option('-p, --pepper', 'add pepper'); - * - * --pepper - * program.pepper - * // => Boolean - * - * // simple boolean defaulting to false - * program.option('-C, --no-cheese', 'remove cheese'); - * - * program.cheese - * // => true - * - * --no-cheese - * program.cheese - * // => true - * - * // required argument - * program.option('-C, --chdir ', 'change the working directory'); - * - * --chdir /tmp - * program.chdir - * // => "/tmp" - * - * // optional argument - * program.option('-c, --cheese [type]', 'add cheese [marble]'); - * - * @param {String} flags - * @param {String} description - * @param {Function|Mixed} fn or default - * @param {Mixed} defaultValue - * @return {Command} for chaining - * @api public - */ - -Command.prototype.option = function(flags, description, fn, defaultValue){ - var self = this - , option = new Option(flags, description) - , oname = option.name() - , name = camelcase(oname); - - // default as 3rd arg - if ('function' != typeof fn) defaultValue = fn, fn = null; - - // preassign default value only for --no-*, [optional], or - if (false == option.bool || option.optional || option.required) { - // when --no-* we make sure default is true - if (false == option.bool) defaultValue = true; - // preassign only if we have a default - if (undefined !== defaultValue) self[name] = defaultValue; - } - - // register the option - this.options.push(option); - - // when it's passed assign the value - // and conditionally invoke the callback - this.on(oname, function(val){ - // coercion - if (null != val && fn) val = fn(val); - - // unassigned or bool - if ('boolean' == typeof self[name] || 'undefined' == typeof self[name]) { - // if no value, bool true, and we have a default, then use it! - if (null == val) { - self[name] = option.bool - ? defaultValue || true - : false; - } else { - self[name] = val; - } - } else if (null !== val) { - // reassign - self[name] = val; - } - }); - - return this; -}; - -/** - * Parse `argv`, settings options and invoking commands when defined. - * - * @param {Array} argv - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parse = function(argv){ - // store raw args - this.rawArgs = argv; - - // guess name - if (!this.name) this.name = basename(argv[1]); - - // process argv - var parsed = this.parseOptions(this.normalize(argv.slice(2))); - this.args = parsed.args; - return this.parseArgs(this.args, parsed.unknown); -}; - -/** - * Normalize `args`, splitting joined short flags. For example - * the arg "-abc" is equivalent to "-a -b -c". - * - * @param {Array} args - * @return {Array} - * @api private - */ - -Command.prototype.normalize = function(args){ - var ret = [] - , arg; - - for (var i = 0, len = args.length; i < len; ++i) { - arg = args[i]; - if (arg.length > 1 && '-' == arg[0] && '-' != arg[1]) { - arg.slice(1).split('').forEach(function(c){ - ret.push('-' + c); - }); - } else { - ret.push(arg); - } - } - - return ret; -}; - -/** - * Parse command `args`. - * - * When listener(s) are available those - * callbacks are invoked, otherwise the "*" - * event is emitted and those actions are invoked. - * - * @param {Array} args - * @return {Command} for chaining - * @api private - */ - -Command.prototype.parseArgs = function(args, unknown){ - var cmds = this.commands - , len = cmds.length - , name; - - if (args.length) { - name = args[0]; - if (this.listeners(name).length) { - this.emit(args.shift(), args, unknown); - } else { - this.emit('*', args); - } - } else { - outputHelpIfNecessary(this, unknown); - - // If there were no args and we have unknown options, - // then they are extraneous and we need to error. - if (unknown.length > 0) { - this.unknownOption(unknown[0]); - } - } - - return this; -}; - -/** - * Return an option matching `arg` if any. - * - * @param {String} arg - * @return {Option} - * @api private - */ - -Command.prototype.optionFor = function(arg){ - for (var i = 0, len = this.options.length; i < len; ++i) { - if (this.options[i].is(arg)) { - return this.options[i]; - } - } -}; - -/** - * Parse options from `argv` returning `argv` - * void of these options. - * - * @param {Array} argv - * @return {Array} - * @api public - */ - -Command.prototype.parseOptions = function(argv){ - var args = [] - , len = argv.length - , literal - , option - , arg; - - var unknownOptions = []; - - // parse options - for (var i = 0; i < len; ++i) { - arg = argv[i]; - - // literal args after -- - if ('--' == arg) { - literal = true; - continue; - } - - if (literal) { - args.push(arg); - continue; - } - - // find matching Option - option = this.optionFor(arg); - - // option is defined - if (option) { - // requires arg - if (option.required) { - arg = argv[++i]; - if (null == arg) return this.optionMissingArgument(option); - if ('-' == arg[0]) return this.optionMissingArgument(option, arg); - this.emit(option.name(), arg); - // optional arg - } else if (option.optional) { - arg = argv[i+1]; - if (null == arg || '-' == arg[0]) { - arg = null; - } else { - ++i; - } - this.emit(option.name(), arg); - // bool - } else { - this.emit(option.name()); - } - continue; - } - - // looks like an option - if (arg.length > 1 && '-' == arg[0]) { - unknownOptions.push(arg); - - // If the next argument looks like it might be - // an argument for this option, we pass it on. - // If it isn't, then it'll simply be ignored - if (argv[i+1] && '-' != argv[i+1][0]) { - unknownOptions.push(argv[++i]); - } - continue; - } - - // arg - args.push(arg); - } - - return { args: args, unknown: unknownOptions }; -}; - -/** - * Argument `name` is missing. - * - * @param {String} name - * @api private - */ - -Command.prototype.missingArgument = function(name){ - console.error(); - console.error(" error: missing required argument `%s'", name); - console.error(); - process.exit(1); -}; - -/** - * `Option` is missing an argument, but received `flag` or nothing. - * - * @param {String} option - * @param {String} flag - * @api private - */ - -Command.prototype.optionMissingArgument = function(option, flag){ - console.error(); - if (flag) { - console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag); - } else { - console.error(" error: option `%s' argument missing", option.flags); - } - console.error(); - process.exit(1); -}; - -/** - * Unknown option `flag`. - * - * @param {String} flag - * @api private - */ - -Command.prototype.unknownOption = function(flag){ - console.error(); - console.error(" error: unknown option `%s'", flag); - console.error(); - process.exit(1); -}; - -/** - * Set the program version to `str`. - * - * This method auto-registers the "-V, --version" flag - * which will print the version number when passed. - * - * @param {String} str - * @param {String} flags - * @return {Command} for chaining - * @api public - */ - -Command.prototype.version = function(str, flags){ - if (0 == arguments.length) return this._version; - this._version = str; - flags = flags || '-V, --version'; - this.option(flags, 'output the version number'); - this.on('version', function(){ - console.log(str); - process.exit(0); - }); - return this; -}; - -/** - * Set the description `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.description = function(str){ - if (0 == arguments.length) return this._description; - this._description = str; - return this; -}; - -/** - * Set / get the command usage `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.usage = function(str){ - var args = this.args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }); - - var usage = '[options' - + (this.commands.length ? '] [command' : '') - + ']' - + (this.args.length ? ' ' + args : ''); - if (0 == arguments.length) return this._usage || usage; - this._usage = str; - - return this; -}; - -/** - * Return the largest option length. - * - * @return {Number} - * @api private - */ - -Command.prototype.largestOptionLength = function(){ - return this.options.reduce(function(max, option){ - return Math.max(max, option.flags.length); - }, 0); -}; - -/** - * Return help for options. - * - * @return {String} - * @api private - */ - -Command.prototype.optionHelp = function(){ - var width = this.largestOptionLength(); - - // Prepend the help information - return [pad('-h, --help', width) + ' ' + 'output usage information'] - .concat(this.options.map(function(option){ - return pad(option.flags, width) - + ' ' + option.description; - })) - .join('\n'); -}; - -/** - * Return command help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.commandHelp = function(){ - if (!this.commands.length) return ''; - return [ - '' - , ' Commands:' - , '' - , this.commands.map(function(cmd){ - var args = cmd.args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }).join(' '); - - return cmd.name - + (cmd.options.length - ? ' [options]' - : '') + ' ' + args - + (cmd.description() - ? '\n' + cmd.description() - : ''); - }).join('\n\n').replace(/^/gm, ' ') - , '' - ].join('\n'); -}; - -/** - * Return program help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.helpInformation = function(){ - return [ - '' - , ' Usage: ' + this.name + ' ' + this.usage() - , '' + this.commandHelp() - , ' Options:' - , '' - , '' + this.optionHelp().replace(/^/gm, ' ') - , '' - , '' - ].join('\n'); -}; - -/** - * Prompt for a `Number`. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptForNumber = function(str, fn){ - var self = this; - this.promptSingleLine(str, function parseNumber(val){ - val = Number(val); - if (isNaN(val)) return self.promptSingleLine(str + '(must be a number) ', parseNumber); - fn(val); - }); -}; - -/** - * Prompt for a `Date`. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptForDate = function(str, fn){ - var self = this; - this.promptSingleLine(str, function parseDate(val){ - val = new Date(val); - if (isNaN(val.getTime())) return self.promptSingleLine(str + '(must be a date) ', parseDate); - fn(val); - }); -}; - -/** - * Single-line prompt. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptSingleLine = function(str, fn){ - if ('function' == typeof arguments[2]) { - return this['promptFor' + (fn.name || fn)](str, arguments[2]); - } - - process.stdout.write(str); - process.stdin.setEncoding('utf8'); - process.stdin.once('data', function(val){ - fn(val.trim()); - }).resume(); -}; - -/** - * Multi-line prompt. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptMultiLine = function(str, fn){ - var buf = []; - console.log(str); - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function(val){ - if ('\n' == val || '\r\n' == val) { - process.stdin.removeAllListeners('data'); - fn(buf.join('\n')); - } else { - buf.push(val.trimRight()); - } - }).resume(); -}; - -/** - * Prompt `str` and callback `fn(val)` - * - * Commander supports single-line and multi-line prompts. - * To issue a single-line prompt simply add white-space - * to the end of `str`, something like "name: ", whereas - * for a multi-line prompt omit this "description:". - * - * - * Examples: - * - * program.prompt('Username: ', function(name){ - * console.log('hi %s', name); - * }); - * - * program.prompt('Description:', function(desc){ - * console.log('description was "%s"', desc.trim()); - * }); - * - * @param {String|Object} str - * @param {Function} fn - * @api public - */ - -Command.prototype.prompt = function(str, fn){ - var self = this; - - if ('string' == typeof str) { - if (/ $/.test(str)) return this.promptSingleLine.apply(this, arguments); - this.promptMultiLine(str, fn); - } else { - var keys = Object.keys(str) - , obj = {}; - - function next() { - var key = keys.shift() - , label = str[key]; - - if (!key) return fn(obj); - self.prompt(label, function(val){ - obj[key] = val; - next(); - }); - } - - next(); - } -}; - -/** - * Prompt for password with `str`, `mask` char and callback `fn(val)`. - * - * The mask string defaults to '', aka no output is - * written while typing, you may want to use "*" etc. - * - * Examples: - * - * program.password('Password: ', function(pass){ - * console.log('got "%s"', pass); - * process.stdin.destroy(); - * }); - * - * program.password('Password: ', '*', function(pass){ - * console.log('got "%s"', pass); - * process.stdin.destroy(); - * }); - * - * @param {String} str - * @param {String} mask - * @param {Function} fn - * @api public - */ - -Command.prototype.password = function(str, mask, fn){ - var self = this - , buf = ''; - - // default mask - if ('function' == typeof mask) { - fn = mask; - mask = ''; - } - - process.stdin.resume(); - tty.setRawMode(true); - process.stdout.write(str); - - // keypress - process.stdin.on('keypress', function(c, key){ - if (key && 'enter' == key.name) { - console.log(); - process.stdin.removeAllListeners('keypress'); - tty.setRawMode(false); - if (!buf.trim().length) return self.password(str, mask, fn); - fn(buf); - return; - } - - if (key && key.ctrl && 'c' == key.name) { - console.log('%s', buf); - process.exit(); - } - - process.stdout.write(mask); - buf += c; - }).resume(); -}; - -/** - * Confirmation prompt with `str` and callback `fn(bool)` - * - * Examples: - * - * program.confirm('continue? ', function(ok){ - * console.log(' got %j', ok); - * process.stdin.destroy(); - * }); - * - * @param {String} str - * @param {Function} fn - * @api public - */ - - -Command.prototype.confirm = function(str, fn, verbose){ - var self = this; - this.prompt(str, function(ok){ - if (!ok.trim()) { - if (!verbose) str += '(yes or no) '; - return self.confirm(str, fn, true); - } - fn(parseBool(ok)); - }); -}; - -/** - * Choice prompt with `list` of items and callback `fn(index, item)` - * - * Examples: - * - * var list = ['tobi', 'loki', 'jane', 'manny', 'luna']; - * - * console.log('Choose the coolest pet:'); - * program.choose(list, function(i){ - * console.log('you chose %d "%s"', i, list[i]); - * process.stdin.destroy(); - * }); - * - * @param {Array} list - * @param {Number|Function} index or fn - * @param {Function} fn - * @api public - */ - -Command.prototype.choose = function(list, index, fn){ - var self = this - , hasDefault = 'number' == typeof index; - - if (!hasDefault) { - fn = index; - index = null; - } - - list.forEach(function(item, i){ - if (hasDefault && i == index) { - console.log('* %d) %s', i + 1, item); - } else { - console.log(' %d) %s', i + 1, item); - } - }); - - function again() { - self.prompt(' : ', function(val){ - val = parseInt(val, 10) - 1; - if (hasDefault && isNaN(val)) val = index; - - if (null == list[val]) { - again(); - } else { - fn(val, list[val]); - } - }); - } - - again(); -}; - -/** - * Camel-case the given `flag` - * - * @param {String} flag - * @return {String} - * @api private - */ - -function camelcase(flag) { - return flag.split('-').reduce(function(str, word){ - return str + word[0].toUpperCase() + word.slice(1); - }); -} - -/** - * Parse a boolean `str`. - * - * @param {String} str - * @return {Boolean} - * @api private - */ - -function parseBool(str) { - return /^y|yes|ok|true$/i.test(str); -} - -/** - * Pad `str` to `width`. - * - * @param {String} str - * @param {Number} width - * @return {String} - * @api private - */ - -function pad(str, width) { - var len = Math.max(0, width - str.length); - return str + Array(len + 1).join(' '); -} - -/** - * Output help information if necessary - * - * @param {Command} command to output help for - * @param {Array} array of options to search for -h or --help - * @api private - */ - -function outputHelpIfNecessary(cmd, options) { - options = options || []; - for (var i = 0; i < options.length; i++) { - if (options[i] == '--help' || options[i] == '-h') { - process.stdout.write(cmd.helpInformation()); - cmd.emit('--help'); - process.exit(0); - } - } -} diff --git a/node_modules/mocha/node_modules/jade/node_modules/commander/package.json b/node_modules/mocha/node_modules/jade/node_modules/commander/package.json deleted file mode 100644 index 92f2ed79..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/commander/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "commander", - "version": "0.6.1", - "description": "the complete solution for node.js command-line programs", - "keywords": [ - "command", - "option", - "parser", - "prompt", - "stdin" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "repository": { - "type": "git", - "url": "https://github.com/visionmedia/commander.js.git" - }, - "dependencies": {}, - "devDependencies": { - "should": ">= 0.0.1" - }, - "scripts": { - "test": "make test" - }, - "main": "index", - "engines": { - "node": ">= 0.4.x" - }, - "readme": "# Commander.js\n\n The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander).\n\n [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js)\n\n## Installation\n\n $ npm install commander\n\n## Option parsing\n\n Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('commander');\n\nprogram\n .version('0.0.1')\n .option('-p, --peppers', 'Add peppers')\n .option('-P, --pineapple', 'Add pineapple')\n .option('-b, --bbq', 'Add bbq sauce')\n .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')\n .parse(process.argv);\n\nconsole.log('you ordered a pizza with:');\nif (program.peppers) console.log(' - peppers');\nif (program.pineapple) console.log(' - pineappe');\nif (program.bbq) console.log(' - bbq');\nconsole.log(' - %s cheese', program.cheese);\n```\n\n Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as \"--template-engine\" are camel-cased, becoming `program.templateEngine` etc.\n\n## Automated --help\n\n The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:\n\n``` \n $ ./examples/pizza --help\n\n Usage: pizza [options]\n\n Options:\n\n -V, --version output the version number\n -p, --peppers Add peppers\n -P, --pineapple Add pineappe\n -b, --bbq Add bbq sauce\n -c, --cheese Add the specified type of cheese [marble]\n -h, --help output usage information\n\n```\n\n## Coercion\n\n```js\nfunction range(val) {\n return val.split('..').map(Number);\n}\n\nfunction list(val) {\n return val.split(',');\n}\n\nprogram\n .version('0.0.1')\n .usage('[options] ')\n .option('-i, --integer ', 'An integer argument', parseInt)\n .option('-f, --float ', 'A float argument', parseFloat)\n .option('-r, --range ..', 'A range', range)\n .option('-l, --list ', 'A list', list)\n .option('-o, --optional [value]', 'An optional value')\n .parse(process.argv);\n\nconsole.log(' int: %j', program.integer);\nconsole.log(' float: %j', program.float);\nconsole.log(' optional: %j', program.optional);\nprogram.range = program.range || [];\nconsole.log(' range: %j..%j', program.range[0], program.range[1]);\nconsole.log(' list: %j', program.list);\nconsole.log(' args: %j', program.args);\n```\n\n## Custom help\n\n You can display arbitrary `-h, --help` information\n by listening for \"--help\". Commander will automatically\n exit once you are done so that the remainder of your program\n does not execute causing undesired behaviours, for example\n in the following executable \"stuff\" will not output when\n `--help` is used.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('../');\n\nfunction list(val) {\n return val.split(',').map(Number);\n}\n\nprogram\n .version('0.0.1')\n .option('-f, --foo', 'enable some foo')\n .option('-b, --bar', 'enable some bar')\n .option('-B, --baz', 'enable some baz');\n\n// must be before .parse() since\n// node's emit() is immediate\n\nprogram.on('--help', function(){\n console.log(' Examples:');\n console.log('');\n console.log(' $ custom-help --help');\n console.log(' $ custom-help -h');\n console.log('');\n});\n\nprogram.parse(process.argv);\n\nconsole.log('stuff');\n```\n\nyielding the following help output:\n\n```\n\nUsage: custom-help [options]\n\nOptions:\n\n -h, --help output usage information\n -V, --version output the version number\n -f, --foo enable some foo\n -b, --bar enable some bar\n -B, --baz enable some baz\n\nExamples:\n\n $ custom-help --help\n $ custom-help -h\n\n```\n\n## .prompt(msg, fn)\n\n Single-line prompt:\n\n```js\nprogram.prompt('name: ', function(name){\n console.log('hi %s', name);\n});\n```\n\n Multi-line prompt:\n\n```js\nprogram.prompt('description:', function(name){\n console.log('hi %s', name);\n});\n```\n\n Coercion:\n\n```js\nprogram.prompt('Age: ', Number, function(age){\n console.log('age: %j', age);\n});\n```\n\n```js\nprogram.prompt('Birthdate: ', Date, function(date){\n console.log('date: %s', date);\n});\n```\n\n## .password(msg[, mask], fn)\n\nPrompt for password without echoing:\n\n```js\nprogram.password('Password: ', function(pass){\n console.log('got \"%s\"', pass);\n process.stdin.destroy();\n});\n```\n\nPrompt for password with mask char \"*\":\n\n```js\nprogram.password('Password: ', '*', function(pass){\n console.log('got \"%s\"', pass);\n process.stdin.destroy();\n});\n```\n\n## .confirm(msg, fn)\n\n Confirm with the given `msg`:\n\n```js\nprogram.confirm('continue? ', function(ok){\n console.log(' got %j', ok);\n});\n```\n\n## .choose(list, fn)\n\n Let the user choose from a `list`:\n\n```js\nvar list = ['tobi', 'loki', 'jane', 'manny', 'luna'];\n\nconsole.log('Choose the coolest pet:');\nprogram.choose(list, function(i){\n console.log('you chose %d \"%s\"', i, list[i]);\n});\n```\n\n## Links\n\n - [API documentation](http://visionmedia.github.com/commander.js/)\n - [ascii tables](https://github.com/LearnBoost/cli-table)\n - [progress bars](https://github.com/visionmedia/node-progress)\n - [more progress bars](https://github.com/substack/node-multimeter)\n - [examples](https://github.com/visionmedia/commander.js/tree/master/examples)\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/commander.js/issues" - }, - "homepage": "https://github.com/visionmedia/commander.js", - "_id": "commander@0.6.1", - "_from": "commander@0.6.1" -} diff --git a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.orig b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.orig deleted file mode 100644 index 9303c347..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.orig +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.rej b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.rej deleted file mode 100644 index 69244ff8..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.gitignore.rej +++ /dev/null @@ -1,5 +0,0 @@ ---- /dev/null -+++ .gitignore -@@ -0,0 +1,2 @@ -+node_modules/ -+npm-debug.log \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.npmignore b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.npmignore deleted file mode 100644 index 9303c347..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/LICENSE b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/mocha/node_modules/jade/node_modules/mkdirp/README.markdown b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/README.markdown deleted file mode 100644 index b4dd75fd..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/README.markdown +++ /dev/null @@ -1,54 +0,0 @@ -mkdirp -====== - -Like `mkdir -p`, but in node.js! - -example -======= - -pow.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 -======= - -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())`. - -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())`. - -install -======= - -With [npm](http://npmjs.org) do: - - npm install mkdirp - -license -======= - -MIT/X11 diff --git a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e6924212..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -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/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.orig b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.orig deleted file mode 100644 index 77414622..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.orig +++ /dev/null @@ -1,6 +0,0 @@ -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', 0755, function (err) { - if (err) console.error(err) - else console.log('pow!') -}); diff --git a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.rej b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.rej deleted file mode 100644 index 81e7f431..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js.rej +++ /dev/null @@ -1,19 +0,0 @@ ---- examples/pow.js -+++ examples/pow.js -@@ -1,6 +1,15 @@ --var mkdirp = require('mkdirp').mkdirp; -+var mkdirp = require('../').mkdirp, -+ mkdirpSync = require('../').mkdirpSync; - - mkdirp('/tmp/foo/bar/baz', 0755, function (err) { - if (err) console.error(err) - else console.log('pow!') - }); -+ -+try { -+ mkdirpSync('/tmp/bar/foo/baz', 0755); -+ console.log('double pow!'); -+} -+catch (ex) { -+ console.log(ex); -+} \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/index.js b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/index.js deleted file mode 100644 index 25f43adf..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/index.js +++ /dev/null @@ -1,79 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; - -function mkdirP (p, mode, f) { - if (typeof mode === 'function' || mode === undefined) { - f = mode; - mode = 0777 & (~process.umask()); - } - - var cb = f || function () {}; - if (typeof mode === 'string') mode = parseInt(mode, 8); - p = path.resolve(p); - - fs.mkdir(p, mode, function (er) { - if (!er) return cb(); - switch (er.code) { - case 'ENOENT': - mkdirP(path.dirname(p), mode, function (er) { - if (er) cb(er); - else mkdirP(p, mode, cb); - }); - break; - - case 'EEXIST': - fs.stat(p, function (er2, stat) { - // if the stat fails, then that's super weird. - // let the original EEXIST be the failure reason. - if (er2 || !stat.isDirectory()) cb(er) - else cb(); - }); - break; - - default: - cb(er); - break; - } - }); -} - -mkdirP.sync = function sync (p, mode) { - if (mode === undefined) { - mode = 0777 & (~process.umask()); - } - - if (typeof mode === 'string') mode = parseInt(mode, 8); - p = path.resolve(p); - - try { - fs.mkdirSync(p, mode) - } - catch (err0) { - switch (err0.code) { - case 'ENOENT' : - var err1 = sync(path.dirname(p), mode) - if (err1) throw err1; - else return sync(p, mode); - break; - - case 'EEXIST' : - var stat; - try { - stat = fs.statSync(p); - } - catch (err1) { - throw err0 - } - if (!stat.isDirectory()) throw err0; - else return null; - break; - default : - throw err0 - break; - } - } - - return null; -}; diff --git a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/package.json b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/package.json deleted file mode 100644 index 78638866..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "mkdirp", - "description": "Recursively mkdir, like `mkdir -p`", - "version": "0.3.0", - "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.0.x" - }, - "license": "MIT/X11", - "engines": { - "node": "*" - }, - "readme": "mkdirp\n======\n\nLike `mkdir -p`, but in node.js!\n\nexample\n=======\n\npow.js\n------\n var mkdirp = require('mkdirp');\n \n mkdirp('/tmp/foo/bar/baz', function (err) {\n if (err) console.error(err)\n else console.log('pow!')\n });\n\nOutput\n pow!\n\nAnd now /tmp/foo/bar/baz exists, huzzah!\n\nmethods\n=======\n\nvar mkdirp = require('mkdirp');\n\nmkdirp(dir, mode, cb)\n---------------------\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\nmkdirp.sync(dir, mode)\n----------------------\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\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n npm install mkdirp\n\nlicense\n=======\n\nMIT/X11\n", - "readmeFilename": "README.markdown", - "bugs": { - "url": "https://github.com/substack/node-mkdirp/issues" - }, - "homepage": "https://github.com/substack/node-mkdirp", - "_id": "mkdirp@0.3.0", - "_from": "mkdirp@0.3.0" -} diff --git a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/chmod.js b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 520dcb8e..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,38 +0,0 @@ -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/mocha/node_modules/jade/node_modules/mkdirp/test/clobber.js b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 0eb70998..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -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/mocha/node_modules/jade/node_modules/mkdirp/test/mkdirp.js b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index b07cd70c..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -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/mocha/node_modules/jade/node_modules/mkdirp/test/perm.js b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm.js deleted file mode 100644 index 23a7abbd..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -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/mocha/node_modules/jade/node_modules/mkdirp/test/perm_sync.js b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index f685f609..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,39 +0,0 @@ -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/mocha/node_modules/jade/node_modules/mkdirp/test/race.js b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/race.js deleted file mode 100644 index 96a04476..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,41 +0,0 @@ -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/mocha/node_modules/jade/node_modules/mkdirp/test/rel.js b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 79858243..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -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/mocha/node_modules/jade/node_modules/mkdirp/test/sync.js b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/sync.js deleted file mode 100644 index e0e389de..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,27 +0,0 @@ -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('/'); - - var err = mkdirp.sync(file, 0755); - 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/mocha/node_modules/jade/node_modules/mkdirp/test/umask.js b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 64ccafe2..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -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/mocha/node_modules/jade/node_modules/mkdirp/test/umask_sync.js b/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index 83cba560..00000000 --- a/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,27 +0,0 @@ -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('/'); - - var err = mkdirp.sync(file); - 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/mocha/node_modules/jade/package.json b/node_modules/mocha/node_modules/jade/package.json deleted file mode 100644 index 689d82d7..00000000 --- a/node_modules/mocha/node_modules/jade/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "jade", - "description": "Jade template engine", - "version": "0.26.3", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/jade" - }, - "main": "./index.js", - "bin": { - "jade": "./bin/jade" - }, - "man": [ - "./jade.1" - ], - "dependencies": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "devDependencies": { - "mocha": "*", - "markdown": "*", - "stylus": "*", - "uubench": "*", - "should": "*", - "less": "*", - "uglify-js": "*" - }, - "component": { - "scripts": { - "jade": "runtime.js" - } - }, - "scripts": { - "prepublish": "npm prune" - }, - "bugs": { - "url": "https://github.com/visionmedia/jade/issues" - }, - "readme": "ERROR: No README data found!", - "homepage": "https://github.com/visionmedia/jade", - "_id": "jade@0.26.3", - "_from": "jade@0.26.3" -} diff --git a/node_modules/mocha/node_modules/jade/runtime.js b/node_modules/mocha/node_modules/jade/runtime.js deleted file mode 100644 index 0f549077..00000000 --- a/node_modules/mocha/node_modules/jade/runtime.js +++ /dev/null @@ -1,179 +0,0 @@ - -jade = (function(exports){ -/*! - * Jade - runtime - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Lame Array.isArray() polyfill for now. - */ - -if (!Array.isArray) { - Array.isArray = function(arr){ - return '[object Array]' == Object.prototype.toString.call(arr); - }; -} - -/** - * Lame Object.keys() polyfill for now. - */ - -if (!Object.keys) { - Object.keys = function(obj){ - var arr = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - arr.push(key); - } - } - return arr; - } -} - -/** - * Merge two attribute objects giving precedence - * to values in object `b`. Classes are special-cased - * allowing for arrays and merging/joining appropriately - * resulting in a string. - * - * @param {Object} a - * @param {Object} b - * @return {Object} a - * @api private - */ - -exports.merge = function merge(a, b) { - var ac = a['class']; - var bc = b['class']; - - if (ac || bc) { - ac = ac || []; - bc = bc || []; - if (!Array.isArray(ac)) ac = [ac]; - if (!Array.isArray(bc)) bc = [bc]; - ac = ac.filter(nulls); - bc = bc.filter(nulls); - a['class'] = ac.concat(bc).join(' '); - } - - for (var key in b) { - if (key != 'class') { - a[key] = b[key]; - } - } - - return a; -}; - -/** - * Filter null `val`s. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function nulls(val) { - return val != null; -} - -/** - * Render the given attributes object. - * - * @param {Object} obj - * @param {Object} escaped - * @return {String} - * @api private - */ - -exports.attrs = function attrs(obj, escaped){ - var buf = [] - , terse = obj.terse; - - delete obj.terse; - var keys = Object.keys(obj) - , len = keys.length; - - if (len) { - buf.push(''); - for (var i = 0; i < len; ++i) { - var key = keys[i] - , val = obj[key]; - - if ('boolean' == typeof val || null == val) { - if (val) { - terse - ? buf.push(key) - : buf.push(key + '="' + key + '"'); - } - } else if (0 == key.indexOf('data') && 'string' != typeof val) { - buf.push(key + "='" + JSON.stringify(val) + "'"); - } else if ('class' == key && Array.isArray(val)) { - buf.push(key + '="' + exports.escape(val.join(' ')) + '"'); - } else if (escaped && escaped[key]) { - buf.push(key + '="' + exports.escape(val) + '"'); - } else { - buf.push(key + '="' + val + '"'); - } - } - } - - return buf.join(' '); -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function escape(html){ - return String(html) - .replace(/&(?!(\w+|\#\d+);)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; - -/** - * Re-throw the given `err` in context to the - * the jade in `filename` at the given `lineno`. - * - * @param {Error} err - * @param {String} filename - * @param {String} lineno - * @api private - */ - -exports.rethrow = function rethrow(err, filename, lineno){ - if (!filename) throw err; - - var context = 3 - , str = require('fs').readFileSync(filename, 'utf8') - , lines = str.split('\n') - , start = Math.max(lineno - context, 0) - , end = Math.min(lines.length, lineno + context); - - // Error context - var context = lines.slice(start, end).map(function(line, i){ - var curr = i + start + 1; - return (curr == lineno ? ' > ' : ' ') - + curr - + '| ' - + line; - }).join('\n'); - - // Alter exception message - err.path = filename; - err.message = (filename || 'Jade') + ':' + lineno - + '\n' + context + '\n\n' + err.message; - throw err; -}; - - return exports; - -})({}); diff --git a/node_modules/mocha/node_modules/jade/runtime.min.js b/node_modules/mocha/node_modules/jade/runtime.min.js deleted file mode 100644 index 1714efb0..00000000 --- a/node_modules/mocha/node_modules/jade/runtime.min.js +++ /dev/null @@ -1 +0,0 @@ -jade=function(exports){Array.isArray||(Array.isArray=function(arr){return"[object Array]"==Object.prototype.toString.call(arr)}),Object.keys||(Object.keys=function(obj){var arr=[];for(var key in obj)obj.hasOwnProperty(key)&&arr.push(key);return arr}),exports.merge=function merge(a,b){var ac=a["class"],bc=b["class"];if(ac||bc)ac=ac||[],bc=bc||[],Array.isArray(ac)||(ac=[ac]),Array.isArray(bc)||(bc=[bc]),ac=ac.filter(nulls),bc=bc.filter(nulls),a["class"]=ac.concat(bc).join(" ");for(var key in b)key!="class"&&(a[key]=b[key]);return a};function nulls(val){return val!=null}return exports.attrs=function attrs(obj,escaped){var buf=[],terse=obj.terse;delete obj.terse;var keys=Object.keys(obj),len=keys.length;if(len){buf.push("");for(var i=0;i/g,">").replace(/"/g,""")},exports.rethrow=function rethrow(err,filename,lineno){if(!filename)throw err;var context=3,str=require("fs").readFileSync(filename,"utf8"),lines=str.split("\n"),start=Math.max(lineno-context,0),end=Math.min(lines.length,lineno+context),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" > ":" ")+curr+"| "+line}).join("\n");throw err.path=filename,err.message=(filename||"Jade")+":"+lineno+"\n"+context+"\n\n"+err.message,err},exports}({}); \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/test.jade b/node_modules/mocha/node_modules/jade/test.jade deleted file mode 100644 index b3a89889..00000000 --- a/node_modules/mocha/node_modules/jade/test.jade +++ /dev/null @@ -1,7 +0,0 @@ -p. - This is a large - body of text for - this tag. - - Nothing too - exciting. \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/testing/head.jade b/node_modules/mocha/node_modules/jade/testing/head.jade deleted file mode 100644 index 85154062..00000000 --- a/node_modules/mocha/node_modules/jade/testing/head.jade +++ /dev/null @@ -1,5 +0,0 @@ -head - script(src='/jquery.js') - yield - if false - script(src='/jquery.ui.js') diff --git a/node_modules/mocha/node_modules/jade/testing/index.jade b/node_modules/mocha/node_modules/jade/testing/index.jade deleted file mode 100644 index 1032c5fa..00000000 --- a/node_modules/mocha/node_modules/jade/testing/index.jade +++ /dev/null @@ -1,22 +0,0 @@ - -tag = 'p' -foo = 'bar' - -#{tag} value -#{tag}(foo='bar') value -#{foo ? 'a' : 'li'}(something) here - -mixin item(icon) - li - if attributes.href - a(attributes) - img.icon(src=icon) - block - else - span(attributes) - img.icon(src=icon) - block - -ul - +item('contact') Contact - +item(href='/contact') Contact diff --git a/node_modules/mocha/node_modules/jade/testing/index.js b/node_modules/mocha/node_modules/jade/testing/index.js deleted file mode 100644 index 226e8c01..00000000 --- a/node_modules/mocha/node_modules/jade/testing/index.js +++ /dev/null @@ -1,11 +0,0 @@ - -/** - * Module dependencies. - */ - -var jade = require('../'); - -jade.renderFile('testing/index.jade', { pretty: true, debug: true, compileDebug: false }, function(err, str){ - if (err) throw err; - console.log(str); -}); \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/testing/layout.jade b/node_modules/mocha/node_modules/jade/testing/layout.jade deleted file mode 100644 index 6923cf15..00000000 --- a/node_modules/mocha/node_modules/jade/testing/layout.jade +++ /dev/null @@ -1,6 +0,0 @@ -html - include head - script(src='/caustic.js') - script(src='/app.js') - body - block content \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/testing/user.jade b/node_modules/mocha/node_modules/jade/testing/user.jade deleted file mode 100644 index 3c636b7c..00000000 --- a/node_modules/mocha/node_modules/jade/testing/user.jade +++ /dev/null @@ -1,7 +0,0 @@ -h1 Tobi -p Is a ferret - -ul - li: a foo - li: a bar - li: a baz \ No newline at end of file diff --git a/node_modules/mocha/node_modules/jade/testing/user.js b/node_modules/mocha/node_modules/jade/testing/user.js deleted file mode 100644 index 2ecc45ed..00000000 --- a/node_modules/mocha/node_modules/jade/testing/user.js +++ /dev/null @@ -1,27 +0,0 @@ -function anonymous(locals, attrs, escape, rethrow) { -var attrs = jade.attrs, escape = jade.escape, rethrow = jade.rethrow; -var __jade = [{ lineno: 1, filename: "testing/user.jade" }]; -try { -var buf = []; -with (locals || {}) { -var interp; -__jade.unshift({ lineno: 1, filename: __jade[0].filename }); -__jade.unshift({ lineno: 1, filename: __jade[0].filename }); -buf.push('

        Tobi'); -__jade.unshift({ lineno: undefined, filename: __jade[0].filename }); -__jade.shift(); -buf.push('

        '); -__jade.shift(); -__jade.unshift({ lineno: 2, filename: __jade[0].filename }); -buf.push('

        Is a ferret'); -__jade.unshift({ lineno: undefined, filename: __jade[0].filename }); -__jade.shift(); -buf.push('

        '); -__jade.shift(); -__jade.shift(); -} -return buf.join(""); -} catch (err) { - rethrow(err, __jade[0].filename, __jade[0].lineno); -} -} \ No newline at end of file diff --git a/node_modules/mocha/node_modules/mkdirp/.npmignore b/node_modules/mocha/node_modules/mkdirp/.npmignore deleted file mode 100644 index 9303c347..00000000 --- a/node_modules/mocha/node_modules/mkdirp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/node_modules/mocha/node_modules/mkdirp/.travis.yml b/node_modules/mocha/node_modules/mkdirp/.travis.yml deleted file mode 100644 index 84fd7ca2..00000000 --- a/node_modules/mocha/node_modules/mkdirp/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.9 diff --git a/node_modules/mocha/node_modules/mkdirp/LICENSE b/node_modules/mocha/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb..00000000 --- a/node_modules/mocha/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/mocha/node_modules/mkdirp/examples/pow.js b/node_modules/mocha/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e6924212..00000000 --- a/node_modules/mocha/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -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/mocha/node_modules/mkdirp/index.js b/node_modules/mocha/node_modules/mkdirp/index.js deleted file mode 100644 index fda6de8a..00000000 --- a/node_modules/mocha/node_modules/mkdirp/index.js +++ /dev/null @@ -1,82 +0,0 @@ -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/mocha/node_modules/mkdirp/package.json b/node_modules/mocha/node_modules/mkdirp/package.json deleted file mode 100644 index a71d8b77..00000000 --- a/node_modules/mocha/node_modules/mkdirp/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "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.5" -} diff --git a/node_modules/mocha/node_modules/mkdirp/readme.markdown b/node_modules/mocha/node_modules/mkdirp/readme.markdown deleted file mode 100644 index 83b0216a..00000000 --- a/node_modules/mocha/node_modules/mkdirp/readme.markdown +++ /dev/null @@ -1,63 +0,0 @@ -# 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/mocha/node_modules/mkdirp/test/chmod.js b/node_modules/mocha/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 520dcb8e..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,38 +0,0 @@ -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/mocha/node_modules/mkdirp/test/clobber.js b/node_modules/mocha/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 0eb70998..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -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/mocha/node_modules/mkdirp/test/mkdirp.js b/node_modules/mocha/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index b07cd70c..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -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/mocha/node_modules/mkdirp/test/perm.js b/node_modules/mocha/node_modules/mkdirp/test/perm.js deleted file mode 100644 index 23a7abbd..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -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/mocha/node_modules/mkdirp/test/perm_sync.js b/node_modules/mocha/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index f685f609..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,39 +0,0 @@ -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/mocha/node_modules/mkdirp/test/race.js b/node_modules/mocha/node_modules/mkdirp/test/race.js deleted file mode 100644 index 96a04476..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,41 +0,0 @@ -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/mocha/node_modules/mkdirp/test/rel.js b/node_modules/mocha/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 79858243..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -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/mocha/node_modules/mkdirp/test/return.js b/node_modules/mocha/node_modules/mkdirp/test/return.js deleted file mode 100644 index bce68e56..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/return.js +++ /dev/null @@ -1,25 +0,0 @@ -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/mocha/node_modules/mkdirp/test/return_sync.js b/node_modules/mocha/node_modules/mkdirp/test/return_sync.js deleted file mode 100644 index 7c222d35..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/return_sync.js +++ /dev/null @@ -1,24 +0,0 @@ -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/mocha/node_modules/mkdirp/test/root.js b/node_modules/mocha/node_modules/mkdirp/test/root.js deleted file mode 100644 index 97ad7a2f..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/root.js +++ /dev/null @@ -1,18 +0,0 @@ -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/mocha/node_modules/mkdirp/test/sync.js b/node_modules/mocha/node_modules/mkdirp/test/sync.js deleted file mode 100644 index 7530cada..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,32 +0,0 @@ -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/mocha/node_modules/mkdirp/test/umask.js b/node_modules/mocha/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 64ccafe2..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -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/mocha/node_modules/mkdirp/test/umask_sync.js b/node_modules/mocha/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index 35bd5cbb..00000000 --- a/node_modules/mocha/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,32 +0,0 @@ -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/mocha/package.json b/node_modules/mocha/package.json deleted file mode 100644 index 8bc51678..00000000 --- a/node_modules/mocha/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "mocha", - "version": "1.17.1", - "description": "simple, flexible, fun test framework", - "keywords": [ - "mocha", - "test", - "bdd", - "tdd", - "tap" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/mocha.git" - }, - "main": "./index", - "bin": { - "mocha": "./bin/mocha", - "_mocha": "./bin/_mocha" - }, - "engines": { - "node": ">= 0.4.x" - }, - "scripts": { - "test": "make test-all" - }, - "dependencies": { - "commander": "2.0.0", - "growl": "1.7.x", - "jade": "0.26.3", - "diff": "1.0.7", - "debug": "*", - "mkdirp": "0.3.5", - "glob": "3.2.3" - }, - "devDependencies": { - "should": ">= 2.0.x", - "coffee-script": "1.2" - }, - "files": [ - "bin", - "images", - "lib", - "index.js", - "mocha.css", - "mocha.js" - ], - "readme": " [![Build Status](https://secure.travis-ci.org/visionmedia/mocha.png)](http://travis-ci.org/visionmedia/mocha)\n\n [![Mocha test framework](http://f.cl.ly/items/3l1k0n2A1U3M1I1L210p/Screen%20Shot%202012-02-24%20at%202.21.43%20PM.png)](http://visionmedia.github.io/mocha)\n\n Mocha is a simple, flexible, fun JavaScript test framework for node.js and the browser. For more information view the [documentation](http://visionmedia.github.io/mocha).\n\n## Contributors\n\n```\n\n project : mocha\n repo age : 2 years, 4 months ago\n commits : 1314\n active : 372 days\n files : 141\n authors :\n 582 TJ Holowaychuk 44.3%\n 389 Tj Holowaychuk 29.6%\n 46 Travis Jeffery 3.5%\n 31 Guillermo Rauch 2.4%\n 13 Attila Domokos 1.0%\n 10 John Firebaugh 0.8%\n 8 Jo Liss 0.6%\n 7 Nathan Rajlich 0.5%\n 6 Mike Pennisi 0.5%\n 6 James Carr 0.5%\n 6 Brendan Nee 0.5%\n 5 Aaron Heckmann 0.4%\n 5 Ryunosuke SATO 0.4%\n 4 hokaccha 0.3%\n 4 Joshua Krall 0.3%\n 4 Xavier Antoviaque 0.3%\n 3 Jesse Dailey 0.2%\n 3 Forbes Lindesay 0.2%\n 3 Sindre Sorhus 0.2%\n 3 Cory Thomas 0.2%\n 3 Fredrik Enestad 0.2%\n 3 Ben Lindsey 0.2%\n 3 Tyson Tate 0.2%\n 3 Mathieu Desvé 0.2%\n 3 Valentin Agachi 0.2%\n 3 Wil Moore III 0.2%\n 3 Merrick Christensen 0.2%\n 3 eiji.ienaga 0.2%\n 3 fool2fish 0.2%\n 3 Nathan Bowser 0.2%\n 3 Paul Miller 0.2%\n 2 Juzer Ali 0.2%\n 2 Pete Hawkins 0.2%\n 2 Jonas Westerlund 0.2%\n 2 Arian Stolwijk 0.2%\n 2 Quang Van 0.2%\n 2 Glen Mailer 0.2%\n 2 Justin DuJardin 0.2%\n 2 FARKAS Máté 0.2%\n 2 Raynos 0.2%\n 2 Michael Riley 0.2%\n 2 Michael Schoonmaker 0.2%\n 2 Domenic Denicola 0.2%\n 2 Simon Gaeremynck 0.2%\n 2 Konstantin Käfer 0.2%\n 2 domenic 0.2%\n 2 Paul Armstrong 0.2%\n 2 fcrisci 0.2%\n 2 Alexander Early 0.2%\n 2 Shawn Krisman 0.2%\n 2 Brian Beck 0.2%\n 2 Nathan Alderson 0.2%\n 2 David Henderson 0.2%\n 2 Timo Tijhof 0.2%\n 2 Ian Storm Taylor 0.2%\n 2 travis jeffery 0.2%\n 1 Matt Smith 0.1%\n 1 Matthew Shanley 0.1%\n 1 Nathan Black 0.1%\n 1 Phil Sung 0.1%\n 1 R56 0.1%\n 1 Refael Ackermann 0.1%\n 1 Richard Dingwall 0.1%\n 1 Romain Prieto 0.1%\n 1 Roman Neuhauser 0.1%\n 1 Roman Shtylman 0.1%\n 1 Russ Bradberry 0.1%\n 1 Russell Munson 0.1%\n 1 Rustem Mustafin 0.1%\n 1 Salehen Shovon Rahman 0.1%\n 1 Sasha Koss 0.1%\n 1 Seiya Konno 0.1%\n 1 Simon Goumaz 0.1%\n 1 Standa Opichal 0.1%\n 1 Stephen Mathieson 0.1%\n 1 Steve Mason 0.1%\n 1 Tapiwa Kelvin 0.1%\n 1 Teddy Zeenny 0.1%\n 1 Tim Ehat 0.1%\n 1 Vadim Nikitin 0.1%\n 1 Victor Costan 0.1%\n 1 Will Langstroth 0.1%\n 1 Yanis Wang 0.1%\n 1 Yuest Wang 0.1%\n 1 abrkn 0.1%\n 1 airportyh 0.1%\n 1 badunk 0.1%\n 1 fengmk2 0.1%\n 1 grasGendarme 0.1%\n 1 lodr 0.1%\n 1 tgautier@yahoo.com 0.1%\n 1 traleig1 0.1%\n 1 vlad 0.1%\n 1 yuitest 0.1%\n 1 Adam Crabtree 0.1%\n 1 Andreas Brekken 0.1%\n 1 Andreas Lind Petersen 0.1%\n 1 Andrew Nesbitt 0.1%\n 1 Andrey Popp 0.1%\n 1 Arnaud Brousseau 0.1%\n 1 Atsuya Takagi 0.1%\n 1 Austin Birch 0.1%\n 1 Bjørge Næss 0.1%\n 1 Brian Lalor 0.1%\n 1 Brian M. Carlson 0.1%\n 1 Brian Moore 0.1%\n 1 Bryan Donovan 0.1%\n 1 Casey Foster 0.1%\n 1 ChrisWren 0.1%\n 1 Corey Butler 0.1%\n 1 Daniel Stockman 0.1%\n 1 Dave McKenna 0.1%\n 1 Di Wu 0.1%\n 1 Dmitry Shirokov 0.1%\n 1 Fedor Indutny 0.1%\n 1 Florian Margaine 0.1%\n 1 Frederico Silva 0.1%\n 1 Fredrik Lindin 0.1%\n 1 Gareth Murphy 0.1%\n 1 Gavin Mogan 0.1%\n 1 Glen Huang 0.1%\n 1 Greg Perkins 0.1%\n 1 Harry Brundage 0.1%\n 1 Herman Junge 0.1%\n 1 Ian Young 0.1%\n 1 Ivan 0.1%\n 1 JP Bochi 0.1%\n 1 Jaakko Salonen 0.1%\n 1 Jakub Nešetřil 0.1%\n 1 James Bowes 0.1%\n 1 James Lal 0.1%\n 1 Jason Barry 0.1%\n 1 Javier Aranda 0.1%\n 1 Jeff Kunkle 0.1%\n 1 Jeremy Martin 0.1%\n 1 Jimmy Cuadra 0.1%\n 1 Jonathan Creamer 0.1%\n 1 Jussi Virtanen 0.1%\n 1 Katie Gengler 0.1%\n 1 Kazuhito Hokamura 0.1%\n 1 Kirill Korolyov 0.1%\n 1 Koen Punt 0.1%\n 1 Laszlo Bacsi 0.1%\n 1 Liam Newman 0.1%\n 1 László Bácsi 0.1%\n 1 Maciej Małecki 0.1%\n 1 Mal Graty 0.1%\n 1 Marc Kuo 0.1%\n 1 Matt Robenolt 0.1%\n```\n\n## Links\n\n - [Google Group](http://groups.google.com/group/mochajs)\n - [Wiki](https://github.com/visionmedia/mocha/wiki)\n - Mocha [Extensions and reporters](https://github.com/visionmedia/mocha/wiki)\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/mocha/issues" - }, - "homepage": "https://github.com/visionmedia/mocha", - "_id": "mocha@1.17.1", - "_from": "mocha@" -} diff --git a/node_modules/should/.idea/.name b/node_modules/should/.idea/.name deleted file mode 100644 index d1c5fd31..00000000 --- a/node_modules/should/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -should.js \ No newline at end of file diff --git a/node_modules/should/.idea/codeStyleSettings.xml b/node_modules/should/.idea/codeStyleSettings.xml deleted file mode 100644 index 771ca3ab..00000000 --- a/node_modules/should/.idea/codeStyleSettings.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - diff --git a/node_modules/should/.idea/encodings.xml b/node_modules/should/.idea/encodings.xml deleted file mode 100644 index e206d70d..00000000 --- a/node_modules/should/.idea/encodings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/node_modules/should/.idea/inspectionProfiles/Project_Default.xml b/node_modules/should/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 9cc3673b..00000000 --- a/node_modules/should/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/node_modules/should/.idea/inspectionProfiles/profiles_settings.xml b/node_modules/should/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 3b312839..00000000 --- a/node_modules/should/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/node_modules/should/.idea/jsLibraryMappings.xml b/node_modules/should/.idea/jsLibraryMappings.xml deleted file mode 100644 index 4e262aa4..00000000 --- a/node_modules/should/.idea/jsLibraryMappings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/node_modules/should/.idea/jsLinters/jshint.xml b/node_modules/should/.idea/jsLinters/jshint.xml deleted file mode 100644 index 4c0f7760..00000000 --- a/node_modules/should/.idea/jsLinters/jshint.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - diff --git a/node_modules/should/.idea/libraries/Node_js_Dependencies_for_should_js.xml b/node_modules/should/.idea/libraries/Node_js_Dependencies_for_should_js.xml deleted file mode 100644 index e639fbb8..00000000 --- a/node_modules/should/.idea/libraries/Node_js_Dependencies_for_should_js.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/node_modules/should/.idea/misc.xml b/node_modules/should/.idea/misc.xml deleted file mode 100644 index 1162f438..00000000 --- a/node_modules/should/.idea/misc.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/node_modules/should/.idea/modules.xml b/node_modules/should/.idea/modules.xml deleted file mode 100644 index 032a2af8..00000000 --- a/node_modules/should/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/node_modules/should/.idea/scopes/scope_settings.xml b/node_modules/should/.idea/scopes/scope_settings.xml deleted file mode 100644 index 922003b8..00000000 --- a/node_modules/should/.idea/scopes/scope_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/node_modules/should/.idea/should.js.iml b/node_modules/should/.idea/should.js.iml deleted file mode 100644 index 30573aa7..00000000 --- a/node_modules/should/.idea/should.js.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/node_modules/should/.idea/vcs.xml b/node_modules/should/.idea/vcs.xml deleted file mode 100644 index c80f2198..00000000 --- a/node_modules/should/.idea/vcs.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/node_modules/should/.idea/workspace.xml b/node_modules/should/.idea/workspace.xml deleted file mode 100644 index 90f3b660..00000000 --- a/node_modules/should/.idea/workspace.xml +++ /dev/null @@ -1,763 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Bash - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1378708904520 - 1378708904520 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/node_modules/should/.npmignore b/node_modules/should/.npmignore deleted file mode 100644 index 3a32276d..00000000 --- a/node_modules/should/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -examples -test \ No newline at end of file diff --git a/node_modules/should/History.md b/node_modules/should/History.md deleted file mode 100644 index b9848dbe..00000000 --- a/node_modules/should/History.md +++ /dev/null @@ -1,222 +0,0 @@ -3.1.2 / 2014-01-28 -================== - - * Fix for adding .inspect for JQuery object only in case when it is exist - -3.1.1 / 2014-01-28 -================== - - * Fix for HTMLElement in DOM less environments - -3.1.0 / 2014-01-23 -================== - - * Added jquery based broser extension - -3.0.1 / 2014-01-17 -================== - - * Fix: .lengthOf() - -3.0.0 / 2014-01-17 -================== - - * Split everything to smaller files - * Added huge extension to .match and .matchEach. Thanks @alsotang for initial code and idea. - * Added .containDeep and .containEql - * Separate build for browser and node.js - * Basic plugin system - * Breaking change: .Object now do not fail on arrays - * Breaking change: Additional messages now replaces generated and do not added - * Breaking change: .keys now check as is - no keys in args means no keys in object - * Deprecated: assert extension - * Deprecated: .include and .includeEql - * Now all assertions define only positive cases, should.js take care about negations and chains - -2.1.1 / 2013-12-05 -================== - - * Move date formatting out of should.inspect - -2.1.0 / 2013-11-11 -================== - - * Override .inspect for Date's to convert them to ISOString - -2.0.2 / 2013-10-21 -================== - - * Add '#of' as getter for chaining. - * Exclude browser script for .npmignore. - -2.0.1 / 2013-10-10 -================== - - * Fix wrong path in .npmignore. - -2.0.0 / 2013-10-10 -================== - - * breaking change: #a now getter like #an. Was replaced with #type(str) - * breaking change: #empty does not check length for objects. Now it check if object do not have own properties. - * #properties check if object have some properties - * util.inspect now exposed as should.inspect - * assertions for NaN, Infinity, Array, Object, String, Boolean, Number, Error, Function - * #equal got alias #exactly - -1.3.0 / 2013-09-13 -================== - - * fix doc for .keys. Closes #108. - * add #endWith() - * add .startWith (#119) - -1.2.2 / 2013-02-19 -================== - - * fix should.be.instanceOf() failure on Date - -1.2.1 / 2012-11-02 -================== - - * add .showDiff - * Make instanceOf and throwError be aliased like others [alFReD-NSH] - * Fix should[.not].exist not having stack trace #84 [alFReD-NSH] - -1.2.0 / 2012-09-21 -================== - - * Added #approximately(value, delta, description) for doing assertions on results of operations with numbers. [titarenko] - -1.1.1 / 2012-09-19 -================== - - * add .type for eql()s assert - -1.1.0 / 2012-07-30 -================== - - * add enclosing of failure message functions. Closes #81 - * add mocha .actual / .expected string support for all assertion values - -0.7.0 / 2012-07-17 -================== - - * add `.throw(Constructor)` support [snakamura] - -0.6.3 / 2012-04-26 -================== - - * Added object inclusion support back - -0.6.2 / 2012-04-26 -================== - - * Added homepage to package.json - * Fixed .equal() with dates. Closes #63 - -0.6.1 / 2012-04-10 -================== - - * package: add "repository" section [TooTallNate] - * use valueOf() to get the reference the object [TooTallNate] - -0.6.0 / 2012-03-01 -================== - - * Added `err.actual` and `err.expected` for .{eql,equal}() - * Added 'return this;' to 'get json' and 'get html' in order to provide chaining for should.be.json and should.be.html - -0.5.1 / 2012-01-13 -================== - - * Added better `.json` - * Added better `.html` - -0.5.0 / 2012-01-12 -================== - - * Added string matching to `.throw()` [serby] - * Added regexp matching to `.throw()` [serby] - * Added `.includeEql()` [RubenVerborgh] - * Added `.should.be.html` - * Added `.should.be.json` - * Added optional description args to most matchers [Mike Swift] - -0.4.2 / 2011-12-17 -================== - - * Fixed .header() for realzzz - -0.4.1 / 2011-12-16 -================== - - * Fixed: chain .header() to retain negation - -0.4.0 / 2011-12-16 -================== - - * Added `.should.throw()` - * Added `.include()` support for strings - * Added `.include()` support for arrays - * Removed `keys()` `.include` modifier support - * Removed `.object()` - * Removed `.string()` - * Removed `.contain()` - * Removed `.respondTo()` rubyism - * expresso -> mocha - -0.3.2 / 2011-10-24 -================== - - * Fixed tests for 0.5.x - * Fixed sys warning - -0.3.1 / 2011-08-22 -================== - - * configurable - -0.3.0 / 2011-08-20 -================== - - * Added assertion for inclusion of an object: `foo.should.include.object({ foo: 'bar' })` - -0.2.1 / 2011-05-13 -================== - - * Fixed .status(code). Closes #18 - -0.2.0 / 2011-04-17 -================== - - * Added `res.should.have.status(code)` method - * Added `res.should.have.header(field, val)` method - -0.1.0 / 2011-04-06 -================== - - * Added `should.exist(obj)` [aseemk] - * Added `should.not.exist(obj)` [aseemk] - -0.0.4 / 2010-11-24 -================== - - * Added `.ok` to assert truthfulness - * Added `.arguments` - * Fixed double required bug. [thanks dominictarr] - -0.0.3 / 2010-11-19 -================== - - * Added `true` / `false` assertions - -0.0.2 / 2010-11-19 -================== - - * Added chaining support - -0.0.1 / 2010-11-19 -================== - - * Initial release diff --git a/node_modules/should/Makefile b/node_modules/should/Makefile deleted file mode 100644 index e4295ad1..00000000 --- a/node_modules/should/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -TESTS=$(shell find test -name *.test.js) - -test: - @browserify lib/browser.js -s Should --dg false -o should.js.for-tests - @./node_modules/.bin/mocha --ui exports --recursive $(TESTS) - -browser: - @browserify lib/browser.js -s Should --dg false -o should.js - -.PHONY: test browser \ No newline at end of file diff --git a/node_modules/should/Readme.md b/node_modules/should/Readme.md deleted file mode 100644 index eb77b680..00000000 --- a/node_modules/should/Readme.md +++ /dev/null @@ -1,644 +0,0 @@ -# should.js - -_should_ is an expressive, readable, test framework agnostic, assertion library. Main goals of this library __to be expressive__ and __to be helpful__. It means test code should be clean, and error messages enough helpfull to understand error. - -It extends the `Object.prototype` with a single non-enumerable getter that allows you to express how that object should behave, also it returns itself when required with `require`. - -## Example -```javascript -var should = require('should'); - -var user = { - name: 'tj' - , pets: ['tobi', 'loki', 'jane', 'bandit'] -}; - -user.should.have.property('name', 'tj'); -user.should.have.property('pets').with.lengthOf(4); - -// if the object was created with Object.create(null) -// then it doesn't inherit `Object` and have the `should` getter -// so you can do: - -should(user).have.property('name', 'tj'); -should(true).ok; - -someAsyncTask(foo, function(err, result){ - should.not.exist(err); - should.exist(result); - result.bar.should.equal(foo); -}); -``` -## To begin - - 1. Install it: - - $ npm install should --save-dev - - 2. Require it and use: - -```javascript -var should = require('should'); - -(5).should.be.exactly(5).and.be.a.Number; -``` - -## In browser - -If you want to use _should_ in browser, use version that is in root of repository (or build it yourself). It is builded with browserify (see [Makefile](https://github.com/visionmedia/should.js/blob/master/Makefile)). To build fresh version: - -```bash -# you should have browserify -npm install -g browserify -make browser -``` - -This script exported to `window.Should`. It is the same as use `should` statically: - -```js -Should(5).be.exactly(5) -``` - -Also as for node.js case `Object.prototype` extended with `should` (that is why `window.Should` used): - -```js -window.should.be.exactly(window); -// the same -// window is host object -should.be.exactly(window); -// you should not really care about it - -(5).should.be.exactly(5); -``` - -*should.js* uses EcmaScript 5 very extensively so any browser that support ES5 is supported. (IE <=8 not supported). -See [kangax's compat table](http://kangax.github.io/es5-compat-table) to know which exactly. - -You can easy install it with again npm or bower: -``` -npm install should --save-dev -# or -bower install visionmedia/should.js -``` - -## Static should and assert module - -For some rare cases should can be used statically, without `Object.prototype`. -It can be replacement for node assert module: - -```javascript -assert.fail(actual, expected, message, operator) // just write wrong should assertion -assert(value, message), assert.ok(value, [message]) // should(value).ok -assert.equal(actual, expected, [message]) // should(actual).eql(expected, [message]) -assert.notEqual(actual, expected, [message]) // should(actual).not.eql(expected, [message]) -assert.deepEqual(actual, expected, [message]) // should(actual).eql(expected, [message]) -assert.notDeepEqual(actual, expected, [message]) // should(actual).not.eql(expected, [message]) -assert.strictEqual(actual, expected, [message]) // should(actual).equal(expected, [message]) -assert.notStrictEqual(actual, expected, [message]) // should(actual).not.equal(expected, [message]) -assert.throws(block, [error], [message]) // should(block).throw([error]) -assert.doesNotThrow(block, [message]) // should(block).not.throw([error]) -assert.ifError(value) // should(value).Error (to check if it is error) or should(value).not.ok (to check that it is falsy) -``` - -## .not - -`.not` negate current assertion. - -# Assertions -## chaining assertions - -Every assertion will return a `should.js`-wrapped Object, so assertions can be chained. -You can use this helpers to just chain: `.an`, `.of`, `.a`, `.and`, `.be`, `.have`, `.with`, `.is`, `.which`. Use them for better readability, they do nothing at all. -For example: -```js -user.should.be.an.instanceOf(Object).and.have.property('name', 'tj'); -user.pets.should.be.instanceof(Array).and.have.lengthOf(4); -``` -Almost all assertions return the same object - so you can easy chain them. But some move assertion object to property value. See feather, it will be mention if object chainged. - -## .ok - -Assert if asseted object is truthy in javascript meaning of truthy ('', null, undefined, 0 , NaN, Infinity - is falsy, so all others are truthy). - -Assert truthfulness: - -```javascript -true.should.be.ok; -'yay'.should.be.ok; -(1).should.be.ok; -({}).should.be.ok; -``` - -or negated: - -```javascript -false.should.not.be.ok; -''.should.not.be.ok; -(0).should.not.be.ok; -``` - -## .true - -Assert if asseted object === true: - -```javascript -true.should.be.true; -'1'.should.not.be.true; -``` - -## .false - -Assert if asseted object === false: - -```javascript -false.should.be.false; -(0).should.not.be.false; -``` - -## .eql(otherValue) - -Assert if asserted object is *equal* to otherValue. This means that object compared by its actual content, not just reference equality. - -```javascript -({ foo: 'bar' }).should.eql({ foo: 'bar' }); -[1,2,3].should.eql([1,2,3]); -// see next example it is correct, even if it is different types, but actual content the same -[1, 2, 3].should.eql({ '0': 1, '1': 2, '2': 3 }); -``` -## .equal(otherValue) and .exactly(otherValue) - -Assert if asserted object strictly equal to `otherValue` (using `===` - no type conversion for primitive types and reference equivalence for reference types). - -```javascript -(4).should.equal(4); -'test'.should.equal('test'); -[1,2,3].should.not.equal([1,2,3]); -(4).should.be.exactly(4); -``` - -## .startWith(str) - -Assert that string starts with `str`. - -```javascript -'foobar'.should.startWith('foo'); -'foobar'.should.not.startWith('bar'); -``` -## .endWith(str) - -Assert that string ends with `str`. - -```javascript -'foobar'.should.endWith('bar'); -'foobar'.should.not.endWith('foo'); -``` - -## .within(from, to) - -Assert inclusive numeric range (`<= to` and `>= from`): -```javascript -user.age.should.be.within(5, 50); -(5).should.be.within(5, 10).and.within(5, 5); -``` - -## .approximately(num, delta) - -Assert floating point number near `num` within `delta` margin: - -```javascript -(99.99).should.be.approximately(100, 0.1); -``` - -## .above(num) and .greaterThan(num) - -Assert numeric value above the given value (`> num`): - -```javascript -user.age.should.be.above(5); -user.age.should.not.be.above(100); -(5).should.be.above(0); -(5).should.not.be.above(5); -``` - -## .below(num) and .lessThan(num) - -Assert numeric value below the given value (`< num`): - -```javascript -user.age.should.be.below(100); -user.age.should.not.be.below(5); -(5).should.be.below(6); -(5).should.not.be.below(5); -``` - -## .NaN - -Assert numeric value is NaN: - -```javascript -(undefined + 0).should.be.NaN; -``` - -## .Infinity - -Assert numeric value is Infinity: - -```javascript -(1/0).should.be.Infinity; -``` - -## .type(str) - -Assert given value have such type (using __typeof__ operator): -```javascript -user.should.be.type('object'); -'test'.should.be.type('string'); -``` - -## .instanceof(constructor) and .instanceOf(constructor) - -Assert given value is instance of `constructor` (using __instanceof__ operator): - -```javascript -user.should.be.an.instanceof(User); -[].should.be.an.instanceOf(Array); -``` - -## .arguments - -Assert given object is an `Arguments`: - -```javascript -var args = (function(){ return arguments; })(1,2,3); -args.should.be.arguments; -[].should.not.be.arguments; -``` - -## .Object, .Number, .Array, .Boolean, .Function, .String, .Error - -Assert given object is instance of such constructor (shortcut for `.instanceof` assertion). - -```javascript -({}).should.be.an.Object; -(1).should.be.a.Number; -[].should.be.an.Array.and.an.Object; -(true).should.be.a.Boolean; -''.should.be.a.String; -``` - -## .property(name[, value]) - -Assert property exists and has optional value(compare using `.eql`): -```javascript -user.should.have.property('name'); -user.should.have.property('age', 15); -user.should.not.have.property('rawr'); -user.should.not.have.property('age', 0); -[1, 2].should.have.property('0', 1); -``` - -__NB__ `.property` change object to actual property value! - -## .properties(propName1, propName2, ...) or .properties([propName1, propName2, ...]) or .properties(obj) - -`obj` it is object that map properties to their actual values. - -Assert all given properties exists and have given values (compare using `.eql`): - -```javascript -user.should.have.properties('name', 'age'); -user.should.have.properties(['name', 'age']); -user.should.have.properties({ - name: 'denis', - age: 24 -}); -``` - -## .length(number) and .lengthOf(number) - -Assert _length_ property exists and has a value of the given number (shortcut for `.property('length', number)`): -```javascript -user.pets.should.have.length(5); -user.pets.should.have.a.lengthOf(5); -({ length: 10}).should.have.length(10); -``` - -__NB__ `.length` change object to actual property value! - -## .ownProperty(str) and .hasOwnProperty(str) - -Assert given object has own property (using `.hasOwnProperty`): -```javascript -({ foo: 'bar' }).should.have.ownProperty('foo').equal('bar'); -``` - -__NB__ `.length` change object to actual property value! - -## .empty - -Assert given value is empty. It means for strings, arrays, arguments length == 0 and for object do not have own properties. - -```javascript -[].should.be.empty; -''.should.be.empty; -({}).should.be.empty; -(function() { - arguments.should.be.empty; -})(); -``` - -## .keys([key1, key2, ...]) and .keys(key1, key2, ...) and .key(key) - -Assert own object keys, which must match _exactly_, -and will fail if you omit a key or two: - -```javascript -var obj = { foo: 'bar', baz: 'raz' }; -obj.should.have.keys('foo', 'baz'); -obj.should.have.keys(['foo', 'baz']); -({}).should.have.keys(); -({}).should.have.keys('key'); //fail AssertionError: expected {} to have key 'key'missing keys: 'key' -``` - -## .containEql(otherValue) - -Assert given value to contain something *.eql* to otherValue. See examples to understand better: - -```javascript -'hello boy'.should.containEql('boy'); -[1,2,3].should.containEql(3); -[[1],[2],[3]].should.containEql([3]); -[[1],[2],[3, 4]].should.not.containEql([3]); - -({ b: 10 }).should.containEql({ b: 10 }); -([1, 2, { a: 10 }]).should.containEql({ a: 10 }); -[1, 2, 3].should.not.containEql({ a: 1 }); - -[{a: 'a'}, {b: 'b', c: 'c'}].should.containEql({a: 'a'}); -[{a: 'a'}, {b: 'b', c: 'c'}].should.not.containEql({b: 'b'}); -``` - -## .containDeep(otherValue) - -Assert given value to contain something *.eql* to otherValue within depth. -Again see examples: - -```javascript -'hello boy'.should.containDeep('boy'); -[1,2,3].should.containDeep([3]); -[1,2,3].should.containDeep([1, 3]); -//but not -[1,2,3].should.containDeep([3, 1]); - -({ a: { b: 10 }, b: { c: 10, d: 11, a: { b: 10, c: 11} }}).should - .containDeep({ a: { b: 10 }, b: { c: 10, a: { c: 11 }}}); - -[1, 2, 3, { a: { b: { d: 12 }}}].should.containDeep([{ a: { b: {d: 12}}}]); - -[[1],[2],[3]].should.containDeep([[3]]); -[[1],[2],[3, 4]].should.containDeep([[3]]); -[{a: 'a'}, {b: 'b', c: 'c'}].should.containDeep([{a: 'a'}]); -[{a: 'a'}, {b: 'b', c: 'c'}].should.containDeep([{b: 'b'}]); -``` - -It does not search somewhere in depth it check all pattern in depth. Object checked -by properties key and value, arrays checked like sub sequences. Everyting compared using .eql. -Main difference with `.containEql` is that this assertion require full type chain - -if asserted value is an object, otherValue should be also an object (which is sub object of given). -The same true for arrays, otherValue should be an array which compared to be subsequence of given object. - -## .match(otherValue) - -Assert given object to match `otherValue`. - -Given: String, otherValue: regexp. Uses `RegExp#exec(str)`: -```javascript -username.should.match(/^\w+$/) -``` - -Given: Array, otherValue: regexp - assert each value match to regexp. -```javascript -['a', 'b', 'c'].should.match(/[a-z]/); -['a', 'b', 'c'].should.not.match(/[d-z]/); -``` - -Given: Object, otherValue: regexp - assert own property's values to match regexp. -```javascript -({ a: 'foo', c: 'barfoo' }).should.match(/foo$/); -({ a: 'a' }).should.not.match(/^http/); -``` - -Given: Anything, otherValue: function - assert if given value matched to function. - -Function can use .should inside or return 'true' or 'false', in all other cases it do nothing. If you return value that return assertion, you will receive better error messages. - -```javascript -(5).should.match(function(n) { return n > 0; }); -(5).should.not.match(function(n) { return n < 0; }); -(5).should.not.match(function(it) { it.should.be.an.Array; }); -(5).should.match(function(it) { return it.should.be.a.Number; }); -``` - -Now compare messages: -```javascript -(5).should.not.match(function(it) { it.should.be.a.Number; }); -//AssertionError: expected 5 not to match [Function] -(5).should.not.match(function(it) { return it.should.be.a.Number; }); -//AssertionError: expected 5 not to match [Function] -// expected 5 to be a number -``` - -Given: object, otherValue: another object - assert that object properties match to properties of another object in meaning that describe above cases. See examples: - -```javascript -({ a: 10, b: 'abc', c: { d: 10 }, d: 0 }).should - .match({ a: 10, b: /c$/, c: function(it) { return it.should.have.property('d', 10); }}); - -[10, 'abc', { d: 10 }, 0].should - .match({ '0': 10, '1': /c$/, '2': function(it) { return it.should.have.property('d', 10); } }); - -[10, 'abc', { d: 10 }, 0].should - .match([10, /c$/, function(it) { return it.should.have.property('d', 10); }]); -``` - -## .matchEach(otherValue) - -Assert given property keys and values each match given check object. - -If `otherValue` is RegExp, then each property value checked to match it: -```javascript -(['a', 'b', 'c']).should.matchEach(/[a-c]/); -``` - -If `otherValue` is Function, then check each property value and key matched it: -```javascript -[10, 11, 12].should.matchEach(function(it) { return it >= 10; }); -[10, 11, 12].should.matchEach(function(it) { return it >= 10; }); -``` - -In other cases it check that each property value is `.eql` to `otherValue`: -```javascript -[10, 10].should.matchEach(10); -``` -## .throw() and throwError() - -Assert an exception is thrown: - -```js -(function(){ - throw new Error('fail'); -}).should.throw(); -``` - -Assert an exception is not thrown: - -```js -(function(){ - -}).should.not.throw(); -``` -Assert exception message matches string: - -```js -(function(){ - throw new Error('fail'); -}).should.throw('fail'); -``` - -Assert exepection message matches regexp: - -```js -(function(){ - throw new Error('failed to foo'); -}).should.throw(/^fail/); -``` - -If you need to pass arguments and/or context to execute function use `Function#bind(context, arg1, ...)`: -```js -function isPositive(n) { - if(n <= 0) throw new Error('Given number is not positive') -} - -isPositive.bind(null, 10).should.not.throw(); -isPositive.bind(null, -10).should.throw(); -``` - -If you need to check something in asynchronous function it is required to do in 2 steps: - -```js -// first we need to check that function is called -var called = false; -collection.findOne({ _id: 10 }, function(err, res) { - called = true; - - //second we test what you want - res.should.be.... -}); - -called.should.be.true; -``` - -In case you are using something like `Mocha`, you should use asynchronous test and call `done()` in proper place to make sure that you asynchronous function is called before test is finished. -```js -collection.findOne({ _id: 10 }, function(err, res) { - if(err) return done(err); - //second we test what you want - res.should.be.... - - done(); -}); -``` - -In general case if you need to check that something is executed you need such thing as `spies`, good example is an [sinon](http://sinonjs.org/). - -## .status(code) - -Asserts that `.statusCode` is `code`: -```javascript -res.should.have.status(200); -``` - -Not included in browser build. - -## .header(field[, value]) - -Asserts that a `.headers` object with `field` and optional `value` are present: -```javascript -res.should.have.header('content-length'); -res.should.have.header('Content-Length', '123'); -``` - -Not included in browser build. - -## .json - -Assert that Content-Type is "application/json; charset=utf-8" - -```javascript -res.should.be.json -``` - -Not included in browser build. - -## .html - -Assert that Content-Type is "text/html; charset=utf-8" -```javascript -res.should.be.html -``` - -Not included in browser build. - -## Optional Error description - -As it can often be difficult to ascertain exactly where failed assertions are coming from in your tests, an optional description parameter can be passed to several should matchers. The description will follow the failed assertion in the error: - - (1).should.eql(0, 'some useful description') - - AssertionError: some useful description - at Object.eql (/Users/swift/code/should.js/node_modules/should/lib/should.js:280:10) - ... - -The methods that support this optional description are: `eql`, `equal`, `within`, `instanceof`, `above`, `below`, `match`, `length`, `property`, `ownProperty`. - -## Mocha example - -For example you can use should with the [Mocha test framework](http://visionmedia.github.io/mocha/) by simply including it: - -```javascript -var should = require('should'); -var mylib = require('mylib'); - - -describe('mylib', function () { - it('should have a version with the format #.#.#', function() { - lib.version.should.match(/^\d+\.\d+\.\d+$/); - } -}); -``` - -## Contributions - -[Actual list of contributors](https://github.com/visionmedia/should.js/graphs/contributors) if you want to show it your friends. - -To run the tests for _should_ simply run: - - $ make test - -Before contribute something: - -1. Your code looks like all other code - all project should look like it was written by one man, always. -2. If you want propose something - just create issue and describe your question with much description as you can. -3. Please never send issues or pull requests about code style, jshint violations etc - i do not accept it (and you will spend your time for free). -4. If you think you have some general receipt, consider create PR with it. -5. If you not sure if you receipt enough general just create your own plugin for should.js. (see should.use and Assertion.add usage). -6. If you add new code it should be covered by tests, no tests - no code. -7. If you find bug (or at least you think it is a bug), create issue with library version and test case that I can run and see what are you talking about, or at least full steps that I can reproduce it. - -## OMG IT EXTENDS OBJECT???!?!@ - -Yes, yes it does, with a single getter _should_, and no it won't break your code, because it does this **properly** with a non-enumerable property. - -## License - -MIT diff --git a/node_modules/should/index.js b/node_modules/should/index.js deleted file mode 100644 index 2bb5c331..00000000 --- a/node_modules/should/index.js +++ /dev/null @@ -1,2 +0,0 @@ - -module.exports = require('./lib/node.js'); \ No newline at end of file diff --git a/node_modules/should/lib/browser.js b/node_modules/should/lib/browser.js deleted file mode 100644 index 4fdb15e5..00000000 --- a/node_modules/should/lib/browser.js +++ /dev/null @@ -1,23 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var should = require('./should'); - -should - .use(require('./ext/assert')) - .use(require('./ext/chain')) - .use(require('./ext/bool')) - .use(require('./ext/number')) - .use(require('./ext/eql')) - .use(require('./ext/type')) - .use(require('./ext/string')) - .use(require('./ext/property')) - .use(require('./ext/error')) - .use(require('./ext/match')) - .use(require('./ext/browser/jquery')) - .use(require('./ext/deprecated')); - - module.exports = should; \ No newline at end of file diff --git a/node_modules/should/lib/eql.js b/node_modules/should/lib/eql.js deleted file mode 100644 index 17bd0fdd..00000000 --- a/node_modules/should/lib/eql.js +++ /dev/null @@ -1,102 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -// Taken from node's assert module, because it sucks -// and exposes next to nothing useful. -var util = require('./util'); - -module.exports = _deepEqual; - -var pSlice = Array.prototype.slice; - -function _deepEqual(actual, expected) { - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - - } else if (util.isBuffer(actual) && util.isBuffer(expected)) { - if (actual.length != expected.length) return false; - - for (var i = 0; i < actual.length; i++) { - if (actual[i] !== expected[i]) return false; - } - - return true; - - // 7.2. If the expected value is a Date object, the actual value is - // equivalent if it is also a Date object that refers to the same time. - } else if (util.isDate(actual) && util.isDate(expected)) { - return actual.getTime() === expected.getTime(); - - // 7.3 If the expected value is a RegExp object, the actual value is - // equivalent if it is also a RegExp object with the same source and - // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). - } else if (util.isRegExp(actual) && util.isRegExp(expected)) { - return actual.source === expected.source && - actual.global === expected.global && - actual.multiline === expected.multiline && - actual.lastIndex === expected.lastIndex && - actual.ignoreCase === expected.ignoreCase; - - // 7.4. Other pairs that do not both pass typeof value == 'object', - // equivalence is determined by ==. - } else if (!util.isObject(actual) && !util.isObject(expected)) { - return actual == expected; - - // 7.5 For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical 'prototype' property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected); - } -} - - -function objEquiv (a, b) { - if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) - return false; - // an identical 'prototype' property. - if (a.prototype !== b.prototype) return false; - //~~~I've managed to break Object.keys through screwy arguments passing. - // Converting to array solves the problem. - if (util.isArguments(a)) { - if (!util.isArguments(b)) { - return false; - } - a = pSlice.call(a); - b = pSlice.call(b); - return _deepEqual(a, b); - } - try{ - var ka = Object.keys(a), - kb = Object.keys(b), - key, i; - } catch (e) {//happens when one is a string literal and the other isn't - return false; - } - // having the same number of owned properties (keys incorporates - // hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!_deepEqual(a[key], b[key])) return false; - } - return true; -} diff --git a/node_modules/should/lib/ext/assert.js b/node_modules/should/lib/ext/assert.js deleted file mode 100644 index 9bf436f4..00000000 --- a/node_modules/should/lib/ext/assert.js +++ /dev/null @@ -1,57 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util') - , assert = require('assert') - , AssertionError = assert.AssertionError; - -module.exports = function(should) { - var i = should.format; - - /** - * Expose assert to should - * - * This allows you to do things like below - * without require()ing the assert module. - * - * should.equal(foo.bar, undefined); - * - */ - util.merge(should, assert); - - - /** - * Assert _obj_ exists, with optional message. - * - * @param {*} obj - * @param {String} [msg] - * @api public - */ - should.exist = should.exists = function(obj, msg) { - if(null == obj) { - throw new AssertionError({ - message: msg || ('expected ' + i(obj) + ' to exist'), stackStartFunction: should.exist - }); - } - }; - - /** - * Asserts _obj_ does not exist, with optional message. - * - * @param {*} obj - * @param {String} [msg] - * @api public - */ - - should.not = {}; - should.not.exist = should.not.exists = function(obj, msg) { - if(null != obj) { - throw new AssertionError({ - message: msg || ('expected ' + i(obj) + ' to not exist'), stackStartFunction: should.not.exist - }); - } - }; -}; \ No newline at end of file diff --git a/node_modules/should/lib/ext/bool.js b/node_modules/should/lib/ext/bool.js deleted file mode 100644 index 04da82b3..00000000 --- a/node_modules/should/lib/ext/bool.js +++ /dev/null @@ -1,21 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - Assertion.add('true', function() { - this.is.exactly(true) - }, true); - - Assertion.add('false', function() { - this.is.exactly(false) - }, true); - - Assertion.add('ok', function() { - this.params = { operator: 'to be truthy' }; - - this.assert(this.obj); - }, true); -}; \ No newline at end of file diff --git a/node_modules/should/lib/ext/browser/jquery.js b/node_modules/should/lib/ext/browser/jquery.js deleted file mode 100644 index cf58203e..00000000 --- a/node_modules/should/lib/ext/browser/jquery.js +++ /dev/null @@ -1,229 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -/*! - * Portions copyright (c) 2010, 2011, 2012 Wojciech Zawistowski, Travis Jeffery - * From the jasmine-jquery project under the MIT License. - */ - -var util = require('../../util'); - -module.exports = function(should, Assertion) { - var i = should.format; - var $ = this.jQuery || this.$; - - /* Otherwise, node's util.inspect loops hangs */ - if (typeof HTMLElement !== "undefined" && HTMLElement && !HTMLElement.prototype.inspect) { - HTMLElement.prototype.inspect = function () { - return this.outerHTML; - }; - } - - if (typeof jQuery !== "undefined" && jQuery && !jQuery.prototype.inspect) { - jQuery.fn.inspect = function () { - var elementList = this.toArray().map(function (e) { - return util.inspect(e); - }).join(", "); - if (this.selector) { - return "SELECTOR(" + this.selector + ") matching " + this.length + " elements" + (elementList.length ? ": " + elementList : ""); - } else { - return elementList; - } - }; - } - - function jQueryAttributeTestHelper(method, singular, plural, nameOrHash, value) { - var keys = util.isObject(nameOrHash) ? Object.keys(nameOrHash) : [nameOrHash]; - var allRelevantAttributes = keys.reduce(function (memo, key) { - var value = $(this.obj)[method](key); - if (typeof value !== 'undefined') { - memo[key] = value; - } - return memo; - }.bind(this), {}); - - if (arguments.length === 4 && util.isObject(nameOrHash)) { - this.params = { operator: 'to have ' + plural + ' ' + i(nameOrHash) }; - allRelevantAttributes.should.have.properties(nameOrHash); - } else if (arguments.length === 4) { - this.params = { operator: 'to have ' + singular + ' ' + i(nameOrHash) }; - allRelevantAttributes.should.have.property(nameOrHash); - } else { - this.params = { operator: 'to have ' + singular + ' ' + i(nameOrHash) + ' with value ' + i(value) }; - allRelevantAttributes.should.have.property(nameOrHash, value); - } - } - - var browserTagCaseIndependentHtml = function (html) { - return $('
        ').append(html).html(); - }; - - var addJqPredicateAssertion = function (predicate, nameOverride, operatorOverride) { - Assertion.add(nameOverride || predicate, function() { - this.params = { operator: 'to be ' + (operatorOverride || predicate) }; - this.assert($(this.obj).is(':' + predicate)); - }, true); - } - - Assertion.add('className', function(className) { - this.params = { operator: 'to have class ' + className }; - this.assert($(this.obj).hasClass(className)); - }); - - Assertion.add('css', function(css) { - this.params = { operator: 'to have css ' + i(css) }; - for (var prop in css) { - var value = css[prop]; - if (value === 'auto' && $(this.obj).get(0).style[prop] === 'auto') { - continue; - } - $(this.obj).css(prop).should.eql(value); - } - }); - - addJqPredicateAssertion('visible'); - addJqPredicateAssertion('hidden'); - addJqPredicateAssertion('selected'); - addJqPredicateAssertion('checked'); - addJqPredicateAssertion('disabled'); - addJqPredicateAssertion('empty', 'emptyJq'); - addJqPredicateAssertion('focus', 'focused', 'focused'); - - Assertion.add('inDOM', function() { - this.params = { operator: 'to be in the DOM' }; - this.assert($.contains(document.documentElement, $(this.obj)[0])); - }, true); - - Assertion.add('exist', function() { - this.params = { operator: 'to exist' }; - $(this.obj).should.not.have.length(0); - }, true); - - Assertion.add('attr', function() { - var args = [ - 'attr', - 'attribute', - 'attributes' - ].concat(Array.prototype.slice.call(arguments, 0)); - jQueryAttributeTestHelper.apply(this, args); - }); - - Assertion.add('prop', function() { - var args = [ - 'prop', - 'property', - 'properties' - ].concat(Array.prototype.slice.call(arguments, 0)); - jQueryAttributeTestHelper.apply(this, args); - }); - - Assertion.add('elementId', function(id) { - this.params = { operator: 'to have ID ' + i(id) }; - this.obj.should.have.attr('id', id); - }); - - Assertion.add('html', function(html) { - this.params = { operator: 'to have HTML ' + i(html) }; - $(this.obj).html().should.eql(browserTagCaseIndependentHtml(html)); - }); - - Assertion.add('containHtml', function(html) { - this.params = { operator: 'to contain HTML ' + i(html) }; - $(this.obj).html().indexOf(browserTagCaseIndependentHtml(html)).should.be.above(-1); - }); - - Assertion.add('text', function(text) { - this.params = { operator: 'to have text ' + i(text) }; - var trimmedText = $.trim($(this.obj).text()); - - if (util.isRegExp(text)) { - trimmedText.should.match(text); - } else { - trimmedText.should.eql(text); - } - }); - - Assertion.add('containText', function(text) { - this.params = { operator: 'to contain text ' + i(text) }; - var trimmedText = $.trim($(this.obj).text()); - - if (util.isRegExp(text)) { - trimmedText.should.match(text); - } else { - trimmedText.indexOf(text).should.be.above(-1); - } - }); - - Assertion.add('value', function(val) { - this.params = { operator: 'to have value ' + i(val) }; - $(this.obj).val().should.eql(val); - }); - - Assertion.add('data', function() { - var args = [ - 'data', - 'data', - 'data' - ].concat(Array.prototype.slice.call(arguments, 0)); - jQueryAttributeTestHelper.apply(this, args); - }); - - Assertion.add('containElement', function(target) { - this.params = { operator: 'to contain ' + $(target).inspect() }; - $(this.obj).find(target).should.not.have.length(0); - }); - - Assertion.add('matchedBy', function(selector) { - this.params = { operator: 'to be matched by selector ' + selector }; - $(this.obj).filter(selector).should.not.have.length(0); - }); - - Assertion.add('handle', function(event) { - this.params = { operator: 'to handle ' + event }; - - var events = $._data($(this.obj).get(0), "events"); - - if (!events || !event || typeof event !== "string") { - return this.assert(false); - } - - var namespaces = event.split("."), - eventType = namespaces.shift(), - sortedNamespaces = namespaces.slice(0).sort(), - namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)"); - - if (events[eventType] && namespaces.length) { - for (var i = 0; i < events[eventType].length; i++) { - var namespace = events[eventType][i].namespace; - - if (namespaceRegExp.test(namespace)) { - return; - } - } - } else { - events.should.have.property(eventType); - events[eventType].should.not.have.length(0); - return; - } - - this.assert(false); - }); - - Assertion.add('handleWith', function(eventName, eventHandler) { - this.params = { operator: 'to handle ' + eventName + ' with ' + eventHandler }; - - var normalizedEventName = eventName.split('.')[0], - stack = $._data($(this.obj).get(0), "events")[normalizedEventName]; - - for (var i = 0; i < stack.length; i++) { - if (stack[i].handler == eventHandler) { - return; - } - } - - this.assert(false); - }); -}; \ No newline at end of file diff --git a/node_modules/should/lib/ext/chain.js b/node_modules/should/lib/ext/chain.js deleted file mode 100644 index 301c38e1..00000000 --- a/node_modules/should/lib/ext/chain.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - - function addLink(name) { - Object.defineProperty(Assertion.prototype, name, { - get: function() { - return this; - } - }); - } - - ['an', 'of', 'a', 'and', 'be', 'have', 'with', 'is', 'which'].forEach(addLink); -}; \ No newline at end of file diff --git a/node_modules/should/lib/ext/deprecated.js b/node_modules/should/lib/ext/deprecated.js deleted file mode 100644 index 3656d077..00000000 --- a/node_modules/should/lib/ext/deprecated.js +++ /dev/null @@ -1,33 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util'), - eql = require('../eql'); - -module.exports = function(should, Assertion) { - var i = should.format; - - Assertion.add('include', function(obj, description) { - if(!Array.isArray(this.obj) && !util.isString(this.obj)) { - this.params = { operator: 'to include an object equal to ' + i(obj), message: description }; - var cmp = {}; - for(var key in obj) cmp[key] = this.obj[key]; - this.assert(eql(cmp, obj)); - } else { - this.params = { operator: 'to include ' + i(obj), message: description }; - - this.assert(~this.obj.indexOf(obj)); - } - }); - - Assertion.add('includeEql', function(obj, description) { - this.params = { operator: 'to include an object equal to ' + i(obj), message: description }; - - this.assert(this.obj.some(function(item) { - return eql(obj, item); - })); - }); -}; \ No newline at end of file diff --git a/node_modules/should/lib/ext/eql.js b/node_modules/should/lib/ext/eql.js deleted file mode 100644 index e3b03e50..00000000 --- a/node_modules/should/lib/ext/eql.js +++ /dev/null @@ -1,23 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var eql = require('../eql'); - -module.exports = function(should, Assertion) { - Assertion.add('eql', function(val, description) { - this.params = { operator: 'to equal', expected: val, showDiff: true, message: description }; - - this.assert(eql(val, this.obj)); - }); - - Assertion.add('equal', function(val, description) { - this.params = { operator: 'to be', expected: val, showDiff: true, message: description }; - - this.assert(val === this.obj); - }); - - Assertion.alias('equal', 'exactly'); -}; \ No newline at end of file diff --git a/node_modules/should/lib/ext/error.js b/node_modules/should/lib/ext/error.js deleted file mode 100644 index eac98e4c..00000000 --- a/node_modules/should/lib/ext/error.js +++ /dev/null @@ -1,51 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - var i = should.format; - - Assertion.add('throw', function(message) { - var fn = this.obj - , err = {} - , errorInfo = '' - , ok = true; - - try { - fn(); - ok = false; - } catch(e) { - err = e; - } - - if(ok) { - if('string' == typeof message) { - ok = message == err.message; - } else if(message instanceof RegExp) { - ok = message.test(err.message); - } else if('function' == typeof message) { - ok = err instanceof message; - } - - if(message && !ok) { - if('string' == typeof message) { - errorInfo = " with a message matching '" + message + "', but got '" + err.message + "'"; - } else if(message instanceof RegExp) { - errorInfo = " with a message matching " + message + ", but got '" + err.message + "'"; - } else if('function' == typeof message) { - errorInfo = " of type " + message.name + ", but got " + err.constructor.name; - } - } else { - errorInfo = " (got " + i(err) + ")"; - } - } - - this.params = { operator: 'to throw exception' + errorInfo }; - - this.assert(ok); - }); - - Assertion.alias('throw', 'throwError'); -}; \ No newline at end of file diff --git a/node_modules/should/lib/ext/http.js b/node_modules/should/lib/ext/http.js deleted file mode 100644 index f5d24fc6..00000000 --- a/node_modules/should/lib/ext/http.js +++ /dev/null @@ -1,33 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -//var statusCodes = require('http').STATUS_CODES; - -module.exports = function(should, Assertion) { - - Assertion.add('header', function(field, val) { - this - .have.property('headers') - .and.have.property(field.toLowerCase(), val); - }); - - Assertion.add('status', function(code) { - //this.params = { operator: 'to have response code ' + code + ' ' + i(statusCodes[code]) - // + ', but got ' + this.obj.statusCode + ' ' + i(statusCodes[this.obj.statusCode]) } - - this.have.property('statusCode', code); - }); - - Assertion.add('json', function() { - this.have.property('headers') - .and.have.property('content-type').include('application/json'); - }, true); - - Assertion.add('html', function() { - this.have.property('headers') - .and.have.property('content-type').include('text/html'); - }, true); -}; \ No newline at end of file diff --git a/node_modules/should/lib/ext/match.js b/node_modules/should/lib/ext/match.js deleted file mode 100644 index f0322ae8..00000000 --- a/node_modules/should/lib/ext/match.js +++ /dev/null @@ -1,112 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util'), - eql = require('../eql'); - -module.exports = function(should, Assertion) { - var i = should.format; - - Assertion.add('match', function(other, description) { - this.params = { operator: 'to match ' + i(other), message: description }; - - if(!eql(this.obj, other)) { - if(util.isRegExp(other)) { // something - regex - - if(util.isString(this.obj)) { - - this.assert(other.exec(this.obj)); - } else if(Array.isArray(this.obj)) { - - this.obj.forEach(function(item) { - this.assert(other.exec(item));// should we try to convert to String and exec? - }, this); - } else if(util.isObject(this.obj)) { - - var notMatchedProps = [], matchedProps = []; - util.forOwn(this.obj, function(value, name) { - if(other.exec(value)) matchedProps.push(i(name)); - else notMatchedProps.push(i(name)); - }, this); - - if(notMatchedProps.length) - this.params.operator += '\n\tnot matched properties: ' + notMatchedProps.join(', '); - if(matchedProps.length) - this.params.operator += '\n\tmatched properties: ' + matchedProps.join(', '); - - this.assert(notMatchedProps.length == 0); - } // should we try to convert to String and exec? - } else if(util.isFunction(other)) { - var res; - try { - res = other(this.obj); - } catch(e) { - if(e instanceof should.AssertionError) { - this.params.operator += '\n\t' + e.message; - } - throw e; - } - - if(res instanceof Assertion) { - this.params.operator += '\n\t' + res.getMessage(); - } - - //if we throw exception ok - it is used .should inside - if(util.isBoolean(res)) { - this.assert(res); // if it is just boolean function assert on it - } - } else if(util.isObject(other)) { // try to match properties (for Object and Array) - notMatchedProps = []; matchedProps = []; - - util.forOwn(other, function(value, key) { - try { - this.obj[key].should.match(value); - matchedProps.push(key); - } catch(e) { - if(e instanceof should.AssertionError) { - notMatchedProps.push(key); - } else { - throw e; - } - } - }, this); - - if(notMatchedProps.length) - this.params.operator += '\n\tnot matched properties: ' + notMatchedProps.join(', '); - if(matchedProps.length) - this.params.operator += '\n\tmatched properties: ' + matchedProps.join(', '); - - this.assert(notMatchedProps.length == 0); - } else { - this.assert(false); - } - } - }); - - Assertion.add('matchEach', function(other, description) { - this.params = { operator: 'to match each ' + i(other), message: description }; - - var f = other; - - if(util.isRegExp(other)) - f = function(it) { - return !!other.exec(it); - }; - else if(!util.isFunction(other)) - f = function(it) { - return eql(it, other); - }; - - util.forOwn(this.obj, function(value, key) { - var res = f(value, key); - - //if we throw exception ok - it is used .should inside - if(util.isBoolean(res)) { - this.assert(res); // if it is just boolean function assert on it - } - }, this); - }); -}; \ No newline at end of file diff --git a/node_modules/should/lib/ext/number.js b/node_modules/should/lib/ext/number.js deleted file mode 100644 index 3b59c879..00000000 --- a/node_modules/should/lib/ext/number.js +++ /dev/null @@ -1,50 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - Assertion.add('NaN', function() { - this.params = { operator: 'to be NaN' }; - - this.is.a.Number - .and.assert(isNaN(this.obj)); - }, true); - - Assertion.add('Infinity', function() { - this.params = { operator: 'to be Infinity' }; - - this.is.a.Number - .and.not.a.NaN - .and.assert(!isFinite(this.obj)); - }, true); - - Assertion.add('within', function(start, finish, description) { - this.params = { operator: 'to be within ' + start + '..' + finish, message: description }; - - this.assert(this.obj >= start && this.obj <= finish); - }); - - Assertion.add('approximately', function(value, delta, description) { - this.params = { operator: 'to be approximately ' + value + " ±" + delta, message: description }; - - this.assert(Math.abs(this.obj - value) <= delta); - }); - - Assertion.add('above', function(n, description) { - this.params = { operator: 'to be above ' + n, message: description }; - - this.assert(this.obj > n); - }); - - Assertion.add('below', function(n, description) { - this.params = { operator: 'to be below ' + n, message: description }; - - this.assert(this.obj < n); - }); - - Assertion.alias('above', 'greaterThan'); - Assertion.alias('below', 'lessThan'); - -}; \ No newline at end of file diff --git a/node_modules/should/lib/ext/property.js b/node_modules/should/lib/ext/property.js deleted file mode 100644 index 57ca828b..00000000 --- a/node_modules/should/lib/ext/property.js +++ /dev/null @@ -1,215 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util'), - eql = require('../eql'); - -var aSlice = Array.prototype.slice; - -module.exports = function(should, Assertion) { - var i = should.format; - - Assertion.add('property', function(name, val) { - if(arguments.length > 1) { - var p = {}; - p[name] = val; - this.have.properties(p); - } else { - this.have.properties(name); - } - this.obj = this.obj[name]; - }); - - Assertion.add('properties', function(names) { - var values = {}; - if(arguments.length > 1) { - names = aSlice.call(arguments); - } else if(!Array.isArray(names)) { - if(util.isString(names)) { - names = [names]; - } else { - values = names; - names = Object.keys(names); - } - } - - var obj = Object(this.obj), missingProperties = []; - - //just enumerate properties and check if they all present - names.forEach(function(name) { - if(!(name in obj)) missingProperties.push(i(name)); - }); - - var props = missingProperties; - if(props.length === 0) { - props = names.map(i); - } - - var operator = (props.length === 1 ? - 'to have property ' : 'to have properties ') + props.join(', '); - - this.params = { operator: operator }; - - this.assert(missingProperties.length === 0); - - // check if values in object matched expected - var valueCheckNames = Object.keys(values); - if(valueCheckNames.length) { - var wrongValues = []; - props = []; - - // now check values, as there we have all properties - valueCheckNames.forEach(function(name) { - var value = values[name]; - if(!eql(obj[name], value)) { - wrongValues.push(i(name) + ' of ' + i(value) + ' (got ' + i(obj[name]) + ')'); - } else { - props.push(i(name) + ' of ' + i(value)); - } - }); - - if(wrongValues.length > 0) { - props = wrongValues; - } - - operator = (props.length === 1 ? - 'to have property ' : 'to have properties ') + props.join(', '); - - this.params = { operator: operator }; - - this.assert(wrongValues.length === 0); - } - }); - - Assertion.add('length', function(n, description) { - this.have.property('length', n, description); - }); - - Assertion.alias('length', 'lengthOf'); - - var hasOwnProperty = Object.prototype.hasOwnProperty; - - Assertion.add('ownProperty', function(name, description) { - this.params = { operator: 'to have own property ' + i(name), message: description }; - - this.assert(hasOwnProperty.call(this.obj, name)); - - this.obj = this.obj[name]; - }); - - Assertion.alias('hasOwnProperty', 'ownProperty'); - - Assertion.add('empty', function() { - this.params = { operator: 'to be empty' }; - - if(util.isString(this.obj) || Array.isArray(this.obj) || util.isArguments(this.obj)) { - this.have.property('length', 0); - } else { - var obj = Object(this.obj); // wrap to reference for booleans and numbers - for(var prop in obj) { - this.have.not.ownProperty(prop); - } - } - }, true); - - Assertion.add('keys', function(keys) { - if(arguments.length > 1) keys = aSlice.call(arguments); - else if(arguments.length === 1 && util.isString(keys)) keys = [ keys ]; - else if(arguments.length === 0) keys = []; - - var obj = Object(this.obj); - - // first check if some keys are missing - var missingKeys = []; - keys.forEach(function(key) { - if(!hasOwnProperty.call(this.obj, key)) - missingKeys.push(i(key)); - }, this); - - // second check for extra keys - var extraKeys = []; - Object.keys(obj).forEach(function(key) { - if(keys.indexOf(key) < 0) { - extraKeys.push(i(key)); - } - }); - - var verb = keys.length === 0 ? 'to be empty' : - 'to have ' + (keys.length === 1 ? 'key ' : 'keys '); - - this.params = { operator: verb + keys.map(i).join(', ')}; - - if(missingKeys.length > 0) - this.params.operator += '\n\tmissing keys: ' + missingKeys.join(', '); - - if(extraKeys.length > 0) - this.params.operator += '\n\textra keys: ' + extraKeys.join(', '); - - this.assert(missingKeys.length === 0 && extraKeys.length === 0); - }); - - Assertion.alias("keys", "key"); - - Assertion.add('containEql', function(other) { - this.params = { operator: 'to contain ' + i(other) }; - var obj = this.obj; - if(Array.isArray(obj)) { - this.assert(obj.some(function(item) { - return eql(item, other); - })); - } else if(util.isString(obj)) { - // expect obj to be string - this.assert(obj.indexOf(String(other)) >= 0); - } else if(util.isObject(obj)) { - // object contains object case - util.forOwn(other, function(value, key) { - obj[key].should.eql(value); - }); - } else { - //other uncovered cases - this.assert(false); - } - }); - - Assertion.add('containDeep', function(other) { - this.params = { operator: 'to contain ' + i(other) }; - - var obj = this.obj; - if(Array.isArray(obj)) { - if(Array.isArray(other)) { - var otherIdx = 0; - obj.forEach(function(item) { - try { - should(item).not.be.null.and.containDeep(other[otherIdx]); - otherIdx++; - } catch(e) { - if(e instanceof should.AssertionError) { - return; - } - throw e; - } - }); - this.assert(otherIdx == other.length); - //search array contain other as sub sequence - } else { - this.assert(false); - } - } else if(util.isString(obj)) {// expect other to be string - this.assert(obj.indexOf(String(other)) >= 0); - } else if(util.isObject(obj)) {// object contains object case - if(util.isObject(other)) { - util.forOwn(other, function(value, key) { - should(obj[key]).not.be.null.and.containDeep(value); - }); - } else {//one of the properties contain value - this.assert(false); - } - } else { - this.eql(other); - } - }); - -}; \ No newline at end of file diff --git a/node_modules/should/lib/ext/string.js b/node_modules/should/lib/ext/string.js deleted file mode 100644 index c3c6fead..00000000 --- a/node_modules/should/lib/ext/string.js +++ /dev/null @@ -1,19 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - Assertion.add('startWith', function(str, description) { - this.params = { operator: 'to start with ' + should.format(str), message: description }; - - this.assert(0 === this.obj.indexOf(str)); - }); - - Assertion.add('endWith', function(str, description) { - this.params = { operator: 'to end with ' + should.format(str), message: description }; - - this.assert(this.obj.indexOf(str, this.obj.length - str.length) >= 0); - }); -}; \ No newline at end of file diff --git a/node_modules/should/lib/ext/type.js b/node_modules/should/lib/ext/type.js deleted file mode 100644 index 9ab9adfe..00000000 --- a/node_modules/should/lib/ext/type.js +++ /dev/null @@ -1,77 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util'); - -module.exports = function(should, Assertion) { - Assertion.add('Number', function() { - this.params = { operator: 'to be a number' }; - - this.assert(util.isNumber(this.obj)); - }, true); - - Assertion.add('arguments', function() { - this.params = { operator: 'to be arguments' }; - - this.assert(util.isArguments(this.obj)); - }, true); - - Assertion.add('type', function(type, description) { - this.params = { operator: 'to have type ' + type, message: description }; - - (typeof this.obj).should.be.exactly(type, description); - }); - - Assertion.add('instanceof', function(constructor, description) { - this.params = { operator: 'to be an instance of ' + constructor.name, message: description }; - - this.assert(Object(this.obj) instanceof constructor); - }); - - Assertion.add('Function', function() { - this.params = { operator: 'to be a function' }; - - this.assert(util.isFunction(this.obj)); - }, true); - - Assertion.add('Object', function() { - this.params = { operator: 'to be an object' }; - - this.assert(util.isObject(this.obj)); - }, true); - - Assertion.add('String', function() { - this.params = { operator: 'to be a string' }; - - this.assert(util.isString(this.obj)); - }, true); - - Assertion.add('Array', function() { - this.params = { operator: 'to be an array' }; - - this.assert(Array.isArray(this.obj)); - }, true); - - Assertion.add('Boolean', function() { - this.params = { operator: 'to be a boolean' }; - - this.assert(util.isBoolean(this.obj)); - }, true); - - Assertion.add('Error', function() { - this.params = { operator: 'to be an error' }; - - this.assert(util.isError(this.obj)); - }, true); - - Assertion.add('null', function() { - this.params = { operator: 'to be null' }; - - this.assert(this.obj === null); - }, true); - - Assertion.alias('instanceof', 'instanceOf'); -}; \ No newline at end of file diff --git a/node_modules/should/lib/node.js b/node_modules/should/lib/node.js deleted file mode 100644 index be2b5fba..00000000 --- a/node_modules/should/lib/node.js +++ /dev/null @@ -1,23 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var should = require('./should'); - -should - .use(require('./ext/assert')) - .use(require('./ext/chain')) - .use(require('./ext/bool')) - .use(require('./ext/number')) - .use(require('./ext/eql')) - .use(require('./ext/type')) - .use(require('./ext/string')) - .use(require('./ext/property')) - .use(require('./ext/http')) - .use(require('./ext/error')) - .use(require('./ext/match')) - .use(require('./ext/deprecated')); - - module.exports = should; \ No newline at end of file diff --git a/node_modules/should/lib/should.js b/node_modules/should/lib/should.js deleted file mode 100644 index 816c6173..00000000 --- a/node_modules/should/lib/should.js +++ /dev/null @@ -1,169 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - - -var util = require('./util') - , AssertionError = util.AssertionError - , inspect = util.inspect; - -/** - * Our function should - * @param obj - * @returns {Assertion} - */ -var should = function(obj) { - return new Assertion(util.isWrapperType(obj) ? obj.valueOf(): obj); -}; - -/** - * Initialize a new `Assertion` with the given _obj_. - * - * @param {*} obj - * @api private - */ - -var Assertion = should.Assertion = function Assertion(obj) { - this.obj = obj; -}; - - -/** - Way to extend Assertion function. It uses some logic - to define only positive assertions and itself rule with negative assertion. - - All actions happen in subcontext and this method take care about negation. - Potentially we can add some more modifiers that does not depends from state of assertion. -*/ -Assertion.add = function(name, f, isGetter) { - var prop = {}; - prop[isGetter ? 'get' : 'value'] = function() { - var context = new Assertion(this.obj); - context.copy = context.copyIfMissing; - - try { - f.apply(context, arguments); - } catch(e) { - //copy data from sub context to this - this.copy(context); - - //check for fail - if(e instanceof should.AssertionError) { - //negative fail - if(this.negate) { - this.obj = context.obj; - this.negate = false; - return this; - } - this.assert(false); - } - // throw if it is another exception - throw e; - } - //copy data from sub context to this - this.copy(context); - if(this.negate) { - this.assert(false); - } - - this.obj = context.obj; - this.negate = false; - return this; - }; - - Object.defineProperty(Assertion.prototype, name, prop); -}; - -Assertion.alias = function(from, to) { - Assertion.prototype[to] = Assertion.prototype[from] -}; - -should.AssertionError = AssertionError; -var i = should.format = function i(value) { - if(util.isDate(value) && typeof value.inspect !== 'function') return value.toISOString(); //show millis in dates - return inspect(value, { depth: null }); -}; - -should.use = function(f) { - f(this, Assertion); - return this; -}; - - -/** - * Expose should to external world. - */ -exports = module.exports = should; - - -/** - * Expose api via `Object#should`. - * - * @api public - */ - -Object.defineProperty(Object.prototype, 'should', { - set: function(){}, - get: function(){ - return should(this); - }, - configurable: true -}); - - -Assertion.prototype = { - constructor: Assertion, - - assert: function(expr) { - if(expr) return; - - var params = this.params; - - var msg = params.message, generatedMessage = false; - if(!msg) { - msg = this.getMessage(); - generatedMessage = true; - } - - var err = new AssertionError({ - message: msg - , actual: this.obj - , expected: params.expected - , stackStartFunction: this.assert - }); - - err.showDiff = params.showDiff; - err.operator = params.operator; - err.generatedMessage = generatedMessage; - - throw err; - }, - - getMessage: function() { - return 'expected ' + i(this.obj) + (this.negate ? ' not ': ' ') + - this.params.operator + ('expected' in this.params ? ' ' + i(this.params.expected) : ''); - }, - - copy: function(other) { - this.params = other.params; - }, - - copyIfMissing: function(other) { - if(!this.params) this.params = other.params; - }, - - - /** - * Negation modifier. - * - * @api public - */ - - get not() { - this.negate = !this.negate; - return this; - } -}; - diff --git a/node_modules/should/lib/util.js b/node_modules/should/lib/util.js deleted file mode 100644 index 2fdddd52..00000000 --- a/node_modules/should/lib/util.js +++ /dev/null @@ -1,119 +0,0 @@ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Check if given obj just a primitive type wrapper - * @param {Object} obj - * @returns {boolean} - * @api private - */ -exports.isWrapperType = function(obj) { - return isNumber(obj) || isString(obj) || isBoolean(obj); -}; - -/** - * Merge object b with object a. - * - * var a = { foo: 'bar' } - * , b = { bar: 'baz' }; - * - * utils.merge(a, b); - * // => { foo: 'bar', bar: 'baz' } - * - * @param {Object} a - * @param {Object} b - * @return {Object} - * @api private - */ - -exports.merge = function(a, b){ - if (a && b) { - for (var key in b) { - a[key] = b[key]; - } - } - return a; -}; - -function isNumber(arg) { - return typeof arg === 'number' || arg instanceof Number; -} - -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string' || arg instanceof String; -} - -function isBoolean(arg) { - return typeof arg === 'boolean' || arg instanceof Boolean; -} -exports.isBoolean = isBoolean; - -exports.isString = isString; - -function isBuffer(arg) { - return typeof Buffer !== 'undefined' && arg instanceof Buffer; -} - -exports.isBuffer = isBuffer; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} - -exports.isDate = isDate; - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -exports.isObject = isObject; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} - -exports.isRegExp = isRegExp; - -function isNullOrUndefined(arg) { - return arg == null; -} - -exports.isNullOrUndefined = isNullOrUndefined; - -function isArguments(object) { - return objectToString(object) === '[object Arguments]'; -} - -exports.isArguments = isArguments; - -exports.isFunction = function(arg) { - return typeof arg === 'function' || arg instanceof Function; -}; - -function isError(e) { - return isObject(e) && objectToString(e) === '[object Error]'; -} -exports.isError = isError; - -exports.inspect = require('util').inspect; - -exports.AssertionError = require('assert').AssertionError; - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -exports.forOwn = function(obj, f, context) { - for(var prop in obj) { - if(hasOwnProperty.call(obj, prop)) { - f.call(context, obj[prop], prop); - } - } -}; \ No newline at end of file diff --git a/node_modules/should/package.json b/node_modules/should/package.json deleted file mode 100644 index faca2010..00000000 --- a/node_modules/should/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "should", - "description": "test framework agnostic BDD-style assertions", - "version": "3.1.2", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/should.js.git" - }, - "homepage": "https://github.com/visionmedia/should.js", - "scripts": { - "test": "make test" - }, - "devDependencies": { - "mocha": "*", - "jsdom": "*", - "jquery": "*" - }, - "keywords": [ - "test", - "bdd", - "assert" - ], - "main": "./lib/node.js", - "engines": { - "node": ">= 0.2.0" - }, - "readme": "# should.js\n\n_should_ is an expressive, readable, test framework agnostic, assertion library. Main goals of this library __to be expressive__ and __to be helpful__. It means test code should be clean, and error messages enough helpfull to understand error.\n\nIt extends the `Object.prototype` with a single non-enumerable getter that allows you to express how that object should behave, also it returns itself when required with `require`.\n\n## Example\n```javascript\nvar should = require('should');\n\nvar user = {\n name: 'tj'\n , pets: ['tobi', 'loki', 'jane', 'bandit']\n};\n\nuser.should.have.property('name', 'tj');\nuser.should.have.property('pets').with.lengthOf(4);\n\n// if the object was created with Object.create(null)\n// then it doesn't inherit `Object` and have the `should` getter\n// so you can do:\n\nshould(user).have.property('name', 'tj');\nshould(true).ok;\n\nsomeAsyncTask(foo, function(err, result){\n should.not.exist(err);\n should.exist(result);\n result.bar.should.equal(foo);\n});\n```\n## To begin\n\n 1. Install it:\n \n $ npm install should --save-dev\n \n 2. Require it and use:\n\n```javascript\nvar should = require('should');\n\n(5).should.be.exactly(5).and.be.a.Number;\n```\n\n## In browser\n\nIf you want to use _should_ in browser, use version that is in root of repository (or build it yourself). It is builded with browserify (see [Makefile](https://github.com/visionmedia/should.js/blob/master/Makefile)). To build fresh version:\n\n```bash\n# you should have browserify\nnpm install -g browserify\nmake browser\n```\n\nThis script exported to `window.Should`. It is the same as use `should` statically:\n\n```js\nShould(5).be.exactly(5)\n```\n\nAlso as for node.js case `Object.prototype` extended with `should` (that is why `window.Should` used):\n\n```js\nwindow.should.be.exactly(window);\n// the same\n// window is host object \nshould.be.exactly(window);\n// you should not really care about it\n\n(5).should.be.exactly(5);\n```\n\n*should.js* uses EcmaScript 5 very extensively so any browser that support ES5 is supported. (IE <=8 not supported).\nSee [kangax's compat table](http://kangax.github.io/es5-compat-table) to know which exactly.\n\nYou can easy install it with again npm or bower:\n```\nnpm install should --save-dev\n# or\nbower install visionmedia/should.js\n```\n\n## Static should and assert module\n\nFor some rare cases should can be used statically, without `Object.prototype`.\nIt can be replacement for node assert module:\n\n```javascript\nassert.fail(actual, expected, message, operator) // just write wrong should assertion\nassert(value, message), assert.ok(value, [message]) // should(value).ok\nassert.equal(actual, expected, [message]) // should(actual).eql(expected, [message])\nassert.notEqual(actual, expected, [message]) // should(actual).not.eql(expected, [message])\nassert.deepEqual(actual, expected, [message]) // should(actual).eql(expected, [message])\nassert.notDeepEqual(actual, expected, [message]) // should(actual).not.eql(expected, [message])\nassert.strictEqual(actual, expected, [message]) // should(actual).equal(expected, [message])\nassert.notStrictEqual(actual, expected, [message]) // should(actual).not.equal(expected, [message])\nassert.throws(block, [error], [message]) // should(block).throw([error])\nassert.doesNotThrow(block, [message]) // should(block).not.throw([error])\nassert.ifError(value) // should(value).Error (to check if it is error) or should(value).not.ok (to check that it is falsy)\n```\n\t\n## .not\n\n`.not` negate current assertion.\n\n# Assertions\n## chaining assertions\n\nEvery assertion will return a `should.js`-wrapped Object, so assertions can be chained.\nYou can use this helpers to just chain: `.an`, `.of`, `.a`, `.and`, `.be`, `.have`, `.with`, `.is`, `.which`. Use them for better readability, they do nothing at all.\nFor example:\n```js\nuser.should.be.an.instanceOf(Object).and.have.property('name', 'tj');\nuser.pets.should.be.instanceof(Array).and.have.lengthOf(4);\n```\nAlmost all assertions return the same object - so you can easy chain them. But some move assertion object to property value. See feather, it will be mention if object chainged.\n\n## .ok\n\nAssert if asseted object is truthy in javascript meaning of truthy ('', null, undefined, 0 , NaN, Infinity - is falsy, so all others are truthy).\n\nAssert truthfulness:\n\n```javascript\ntrue.should.be.ok;\n'yay'.should.be.ok;\n(1).should.be.ok;\n({}).should.be.ok;\n```\n\nor negated:\n\n```javascript\nfalse.should.not.be.ok;\n''.should.not.be.ok;\n(0).should.not.be.ok;\n```\n\n## .true\n\nAssert if asseted object === true:\n\n```javascript\ntrue.should.be.true;\n'1'.should.not.be.true;\n```\n\n## .false\n\nAssert if asseted object === false:\n\n```javascript\nfalse.should.be.false;\n(0).should.not.be.false;\n```\n\n## .eql(otherValue)\n\nAssert if asserted object is *equal* to otherValue. This means that object compared by its actual content, not just reference equality.\n \n```javascript\n({ foo: 'bar' }).should.eql({ foo: 'bar' });\n[1,2,3].should.eql([1,2,3]);\n// see next example it is correct, even if it is different types, but actual content the same\n[1, 2, 3].should.eql({ '0': 1, '1': 2, '2': 3 });\n```\n## .equal(otherValue) and .exactly(otherValue)\n\nAssert if asserted object strictly equal to `otherValue` (using `===` - no type conversion for primitive types and reference equivalence for reference types).\n\n```javascript\n(4).should.equal(4);\n'test'.should.equal('test');\n[1,2,3].should.not.equal([1,2,3]);\n(4).should.be.exactly(4);\n```\n\n## .startWith(str)\n\nAssert that string starts with `str`.\n\n```javascript\n'foobar'.should.startWith('foo');\n'foobar'.should.not.startWith('bar');\n```\n## .endWith(str)\n\nAssert that string ends with `str`.\n\n```javascript\n'foobar'.should.endWith('bar');\n'foobar'.should.not.endWith('foo');\n```\n\n## .within(from, to)\n\nAssert inclusive numeric range (`<= to` and `>= from`):\n```javascript\nuser.age.should.be.within(5, 50);\n(5).should.be.within(5, 10).and.within(5, 5);\n```\n\n## .approximately(num, delta)\n\nAssert floating point number near `num` within `delta` margin:\n\n```javascript\n(99.99).should.be.approximately(100, 0.1);\n```\n\n## .above(num) and .greaterThan(num)\n\nAssert numeric value above the given value (`> num`):\n\n```javascript\nuser.age.should.be.above(5);\nuser.age.should.not.be.above(100);\n(5).should.be.above(0);\n(5).should.not.be.above(5);\n```\n\n## .below(num) and .lessThan(num)\n\nAssert numeric value below the given value (`< num`):\n\n```javascript\nuser.age.should.be.below(100);\nuser.age.should.not.be.below(5);\n(5).should.be.below(6);\n(5).should.not.be.below(5);\n```\n\n## .NaN\n\nAssert numeric value is NaN:\n\n```javascript\n(undefined + 0).should.be.NaN;\n```\n\n## .Infinity\n\nAssert numeric value is Infinity:\n\n```javascript\n(1/0).should.be.Infinity;\n```\n\n## .type(str)\n\nAssert given value have such type (using __typeof__ operator):\n```javascript\nuser.should.be.type('object');\n'test'.should.be.type('string');\n```\n\n## .instanceof(constructor) and .instanceOf(constructor)\n\nAssert given value is instance of `constructor` (using __instanceof__ operator):\n\n```javascript\nuser.should.be.an.instanceof(User);\n[].should.be.an.instanceOf(Array);\n```\n\n## .arguments\n\nAssert given object is an `Arguments`:\n\n```javascript\nvar args = (function(){ return arguments; })(1,2,3);\nargs.should.be.arguments;\n[].should.not.be.arguments;\n```\n\n## .Object, .Number, .Array, .Boolean, .Function, .String, .Error\n\nAssert given object is instance of such constructor (shortcut for `.instanceof` assertion).\n\n```javascript\n({}).should.be.an.Object;\n(1).should.be.a.Number;\n[].should.be.an.Array.and.an.Object;\n(true).should.be.a.Boolean;\n''.should.be.a.String;\n```\n\n## .property(name[, value])\n\nAssert property exists and has optional value(compare using `.eql`):\n```javascript\nuser.should.have.property('name');\nuser.should.have.property('age', 15);\nuser.should.not.have.property('rawr');\nuser.should.not.have.property('age', 0);\n[1, 2].should.have.property('0', 1);\n```\n\n__NB__ `.property` change object to actual property value!\n\n## .properties(propName1, propName2, ...) or .properties([propName1, propName2, ...]) or .properties(obj)\n\n`obj` it is object that map properties to their actual values.\n\nAssert all given properties exists and have given values (compare using `.eql`):\n\n```javascript\nuser.should.have.properties('name', 'age');\nuser.should.have.properties(['name', 'age']);\nuser.should.have.properties({\n name: 'denis',\n age: 24\n});\n```\n\n## .length(number) and .lengthOf(number)\n\nAssert _length_ property exists and has a value of the given number (shortcut for `.property('length', number)`):\n```javascript\nuser.pets.should.have.length(5);\nuser.pets.should.have.a.lengthOf(5);\n({ length: 10}).should.have.length(10);\n```\n\n__NB__ `.length` change object to actual property value!\n\n## .ownProperty(str) and .hasOwnProperty(str)\n\nAssert given object has own property (using `.hasOwnProperty`):\n```javascript\n({ foo: 'bar' }).should.have.ownProperty('foo').equal('bar');\n```\n\n__NB__ `.length` change object to actual property value!\n\n## .empty\n\nAssert given value is empty. It means for strings, arrays, arguments length == 0 and for object do not have own properties.\n\n```javascript\n[].should.be.empty;\n''.should.be.empty;\n({}).should.be.empty;\n(function() {\n arguments.should.be.empty;\n})();\n```\n\n## .keys([key1, key2, ...]) and .keys(key1, key2, ...) and .key(key)\n\nAssert own object keys, which must match _exactly_,\nand will fail if you omit a key or two:\n\n```javascript\nvar obj = { foo: 'bar', baz: 'raz' };\nobj.should.have.keys('foo', 'baz');\nobj.should.have.keys(['foo', 'baz']);\n({}).should.have.keys();\n({}).should.have.keys('key'); //fail AssertionError: expected {} to have key 'key'missing keys: 'key'\n```\n\n## .containEql(otherValue)\n\nAssert given value to contain something *.eql* to otherValue. See examples to understand better:\n\n```javascript\n'hello boy'.should.containEql('boy');\n[1,2,3].should.containEql(3);\n[[1],[2],[3]].should.containEql([3]);\n[[1],[2],[3, 4]].should.not.containEql([3]);\n\n({ b: 10 }).should.containEql({ b: 10 });\n([1, 2, { a: 10 }]).should.containEql({ a: 10 });\n[1, 2, 3].should.not.containEql({ a: 1 });\n\n[{a: 'a'}, {b: 'b', c: 'c'}].should.containEql({a: 'a'});\n[{a: 'a'}, {b: 'b', c: 'c'}].should.not.containEql({b: 'b'});\n```\n\n## .containDeep(otherValue)\n\nAssert given value to contain something *.eql* to otherValue within depth.\nAgain see examples:\n\n```javascript\n'hello boy'.should.containDeep('boy');\n[1,2,3].should.containDeep([3]);\n[1,2,3].should.containDeep([1, 3]);\n//but not\n[1,2,3].should.containDeep([3, 1]);\n\n({ a: { b: 10 }, b: { c: 10, d: 11, a: { b: 10, c: 11} }}).should\n .containDeep({ a: { b: 10 }, b: { c: 10, a: { c: 11 }}});\n\n[1, 2, 3, { a: { b: { d: 12 }}}].should.containDeep([{ a: { b: {d: 12}}}]);\n\n[[1],[2],[3]].should.containDeep([[3]]);\n[[1],[2],[3, 4]].should.containDeep([[3]]);\n[{a: 'a'}, {b: 'b', c: 'c'}].should.containDeep([{a: 'a'}]);\n[{a: 'a'}, {b: 'b', c: 'c'}].should.containDeep([{b: 'b'}]);\n```\n\nIt does not search somewhere in depth it check all pattern in depth. Object checked\nby properties key and value, arrays checked like sub sequences. Everyting compared using .eql.\nMain difference with `.containEql` is that this assertion require full type chain -\nif asserted value is an object, otherValue should be also an object (which is sub object of given).\nThe same true for arrays, otherValue should be an array which compared to be subsequence of given object.\n\n## .match(otherValue)\n\nAssert given object to match `otherValue`.\n\nGiven: String, otherValue: regexp. Uses `RegExp#exec(str)`:\n```javascript\nusername.should.match(/^\\w+$/)\n```\n\nGiven: Array, otherValue: regexp - assert each value match to regexp.\n```javascript\n['a', 'b', 'c'].should.match(/[a-z]/);\n['a', 'b', 'c'].should.not.match(/[d-z]/);\n```\n\nGiven: Object, otherValue: regexp - assert own property's values to match regexp.\n```javascript\n({ a: 'foo', c: 'barfoo' }).should.match(/foo$/);\n({ a: 'a' }).should.not.match(/^http/);\n```\n\nGiven: Anything, otherValue: function - assert if given value matched to function.\n\nFunction can use .should inside or return 'true' or 'false', in all other cases it do nothing. If you return value that return assertion, you will receive better error messages.\n\n```javascript\n(5).should.match(function(n) { return n > 0; });\n(5).should.not.match(function(n) { return n < 0; });\n(5).should.not.match(function(it) { it.should.be.an.Array; });\n(5).should.match(function(it) { return it.should.be.a.Number; });\n```\n\nNow compare messages:\n```javascript\n(5).should.not.match(function(it) { it.should.be.a.Number; });\n//AssertionError: expected 5 not to match [Function]\n(5).should.not.match(function(it) { return it.should.be.a.Number; });\n//AssertionError: expected 5 not to match [Function]\n//\texpected 5 to be a number\n```\n\nGiven: object, otherValue: another object - assert that object properties match to properties of another object in meaning that describe above cases. See examples:\n\n```javascript\n({ a: 10, b: 'abc', c: { d: 10 }, d: 0 }).should\n .match({ a: 10, b: /c$/, c: function(it) { return it.should.have.property('d', 10); }});\n\n[10, 'abc', { d: 10 }, 0].should\n\t.match({ '0': 10, '1': /c$/, '2': function(it) { return it.should.have.property('d', 10); } });\n\n[10, 'abc', { d: 10 }, 0].should\n .match([10, /c$/, function(it) { return it.should.have.property('d', 10); }]); \n```\n\n## .matchEach(otherValue)\n\nAssert given property keys and values each match given check object.\n\nIf `otherValue` is RegExp, then each property value checked to match it:\n```javascript\n(['a', 'b', 'c']).should.matchEach(/[a-c]/);\n```\n\nIf `otherValue` is Function, then check each property value and key matched it:\n```javascript\n[10, 11, 12].should.matchEach(function(it) { return it >= 10; });\n[10, 11, 12].should.matchEach(function(it) { return it >= 10; });\n```\n\nIn other cases it check that each property value is `.eql` to `otherValue`:\n```javascript\n[10, 10].should.matchEach(10);\n```\n## .throw() and throwError()\n\nAssert an exception is thrown:\n\n```js\n(function(){\n throw new Error('fail');\n}).should.throw();\n```\n\nAssert an exception is not thrown:\n\n```js\n(function(){\n\n}).should.not.throw();\n```\nAssert exception message matches string:\n\n```js\n(function(){\n throw new Error('fail');\n}).should.throw('fail');\n```\n\nAssert exepection message matches regexp:\n\n```js\n(function(){\n throw new Error('failed to foo');\n}).should.throw(/^fail/);\n```\n\nIf you need to pass arguments and/or context to execute function use `Function#bind(context, arg1, ...)`:\n```js\nfunction isPositive(n) {\n if(n <= 0) throw new Error('Given number is not positive')\n}\n\nisPositive.bind(null, 10).should.not.throw();\nisPositive.bind(null, -10).should.throw();\n```\n\nIf you need to check something in asynchronous function it is required to do in 2 steps:\n\n```js\n// first we need to check that function is called\nvar called = false;\ncollection.findOne({ _id: 10 }, function(err, res) {\n called = true;\n \n //second we test what you want\n res.should.be....\n});\n\ncalled.should.be.true;\n```\n\nIn case you are using something like `Mocha`, you should use asynchronous test and call `done()` in proper place to make sure that you asynchronous function is called before test is finished.\n```js\ncollection.findOne({ _id: 10 }, function(err, res) {\n if(err) return done(err);\n //second we test what you want\n res.should.be....\n \n done();\n});\n```\n\nIn general case if you need to check that something is executed you need such thing as `spies`, good example is an [sinon](http://sinonjs.org/).\n\n## .status(code)\n\nAsserts that `.statusCode` is `code`:\n```javascript\nres.should.have.status(200);\n```\n\nNot included in browser build.\n\n## .header(field[, value])\n\nAsserts that a `.headers` object with `field` and optional `value` are present:\n```javascript\nres.should.have.header('content-length');\nres.should.have.header('Content-Length', '123');\n```\n\nNot included in browser build.\n\n## .json\n\nAssert that Content-Type is \"application/json; charset=utf-8\"\n\n```javascript\nres.should.be.json\n```\n\nNot included in browser build.\n\n## .html\n\nAssert that Content-Type is \"text/html; charset=utf-8\"\n```javascript\nres.should.be.html\n```\n\nNot included in browser build.\n\n## Optional Error description\n\nAs it can often be difficult to ascertain exactly where failed assertions are coming from in your tests, an optional description parameter can be passed to several should matchers. The description will follow the failed assertion in the error:\n\n (1).should.eql(0, 'some useful description')\n\n AssertionError: some useful description\n at Object.eql (/Users/swift/code/should.js/node_modules/should/lib/should.js:280:10)\n ...\n\nThe methods that support this optional description are: `eql`, `equal`, `within`, `instanceof`, `above`, `below`, `match`, `length`, `property`, `ownProperty`.\n\n## Mocha example\n\nFor example you can use should with the [Mocha test framework](http://visionmedia.github.io/mocha/) by simply including it:\n\n```javascript\nvar should = require('should');\nvar mylib = require('mylib');\n\n\ndescribe('mylib', function () {\n it('should have a version with the format #.#.#', function() {\n lib.version.should.match(/^\\d+\\.\\d+\\.\\d+$/);\n }\n});\n```\n\n## Contributions\n\n[Actual list of contributors](https://github.com/visionmedia/should.js/graphs/contributors) if you want to show it your friends.\n\nTo run the tests for _should_ simply run:\n\n $ make test\n \nBefore contribute something:\n\n1. Your code looks like all other code - all project should look like it was written by one man, always.\n2. If you want propose something - just create issue and describe your question with much description as you can.\n3. Please never send issues or pull requests about code style, jshint violations etc - i do not accept it (and you will spend your time for free).\n4. If you think you have some general receipt, consider create PR with it.\n5. If you not sure if you receipt enough general just create your own plugin for should.js. (see should.use and Assertion.add usage).\n6. If you add new code it should be covered by tests, no tests - no code. \n7. If you find bug (or at least you think it is a bug), create issue with library version and test case that I can run and see what are you talking about, or at least full steps that I can reproduce it.\n\n## OMG IT EXTENDS OBJECT???!?!@\n\nYes, yes it does, with a single getter _should_, and no it won't break your code, because it does this **properly** with a non-enumerable property.\n\n## License\n\nMIT\n", - "readmeFilename": "Readme.md", - "bugs": { - "url": "https://github.com/visionmedia/should.js/issues" - }, - "_id": "should@3.1.2", - "_from": "should@" -} diff --git a/node_modules/should/should.js b/node_modules/should/should.js deleted file mode 100644 index 44160f8d..00000000 --- a/node_modules/should/should.js +++ /dev/null @@ -1,2321 +0,0 @@ -!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Should=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o - * MIT Licensed - */ - -var should = require('./should'); - -should - .use(require('./ext/assert')) - .use(require('./ext/chain')) - .use(require('./ext/bool')) - .use(require('./ext/number')) - .use(require('./ext/eql')) - .use(require('./ext/type')) - .use(require('./ext/string')) - .use(require('./ext/property')) - .use(require('./ext/error')) - .use(require('./ext/match')) - .use(require('./ext/browser/jquery')) - .use(require('./ext/deprecated')); - - module.exports = should; -},{"./ext/assert":3,"./ext/bool":4,"./ext/browser/jquery":5,"./ext/chain":6,"./ext/deprecated":7,"./ext/eql":8,"./ext/error":9,"./ext/match":10,"./ext/number":11,"./ext/property":12,"./ext/string":13,"./ext/type":14,"./should":15}],2:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -// Taken from node's assert module, because it sucks -// and exposes next to nothing useful. -var util = require('./util'); - -module.exports = _deepEqual; - -var pSlice = Array.prototype.slice; - -function _deepEqual(actual, expected) { - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - - } else if (util.isBuffer(actual) && util.isBuffer(expected)) { - if (actual.length != expected.length) return false; - - for (var i = 0; i < actual.length; i++) { - if (actual[i] !== expected[i]) return false; - } - - return true; - - // 7.2. If the expected value is a Date object, the actual value is - // equivalent if it is also a Date object that refers to the same time. - } else if (util.isDate(actual) && util.isDate(expected)) { - return actual.getTime() === expected.getTime(); - - // 7.3 If the expected value is a RegExp object, the actual value is - // equivalent if it is also a RegExp object with the same source and - // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). - } else if (util.isRegExp(actual) && util.isRegExp(expected)) { - return actual.source === expected.source && - actual.global === expected.global && - actual.multiline === expected.multiline && - actual.lastIndex === expected.lastIndex && - actual.ignoreCase === expected.ignoreCase; - - // 7.4. Other pairs that do not both pass typeof value == 'object', - // equivalence is determined by ==. - } else if (!util.isObject(actual) && !util.isObject(expected)) { - return actual == expected; - - // 7.5 For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical 'prototype' property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected); - } -} - - -function objEquiv (a, b) { - if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) - return false; - // an identical 'prototype' property. - if (a.prototype !== b.prototype) return false; - //~~~I've managed to break Object.keys through screwy arguments passing. - // Converting to array solves the problem. - if (util.isArguments(a)) { - if (!util.isArguments(b)) { - return false; - } - a = pSlice.call(a); - b = pSlice.call(b); - return _deepEqual(a, b); - } - try{ - var ka = Object.keys(a), - kb = Object.keys(b), - key, i; - } catch (e) {//happens when one is a string literal and the other isn't - return false; - } - // having the same number of owned properties (keys incorporates - // hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!_deepEqual(a[key], b[key])) return false; - } - return true; -} - -},{"./util":16}],3:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util') - , assert = require('assert') - , AssertionError = assert.AssertionError; - -module.exports = function(should) { - var i = should.format; - - /** - * Expose assert to should - * - * This allows you to do things like below - * without require()ing the assert module. - * - * should.equal(foo.bar, undefined); - * - */ - util.merge(should, assert); - - - /** - * Assert _obj_ exists, with optional message. - * - * @param {*} obj - * @param {String} [msg] - * @api public - */ - should.exist = should.exists = function(obj, msg) { - if(null == obj) { - throw new AssertionError({ - message: msg || ('expected ' + i(obj) + ' to exist'), stackStartFunction: should.exist - }); - } - }; - - /** - * Asserts _obj_ does not exist, with optional message. - * - * @param {*} obj - * @param {String} [msg] - * @api public - */ - - should.not = {}; - should.not.exist = should.not.exists = function(obj, msg) { - if(null != obj) { - throw new AssertionError({ - message: msg || ('expected ' + i(obj) + ' to not exist'), stackStartFunction: should.not.exist - }); - } - }; -}; -},{"../util":16,"assert":17}],4:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - Assertion.add('true', function() { - this.is.exactly(true) - }, true); - - Assertion.add('false', function() { - this.is.exactly(false) - }, true); - - Assertion.add('ok', function() { - this.params = { operator: 'to be truthy' }; - - this.assert(this.obj); - }, true); -}; -},{}],5:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -/*! - * Portions copyright (c) 2010, 2011, 2012 Wojciech Zawistowski, Travis Jeffery - * From the jasmine-jquery project under the MIT License. - */ - -var util = require('../../util'); - -module.exports = function(should, Assertion) { - var i = should.format; - var $ = this.jQuery || this.$; - - /* Otherwise, node's util.inspect loops hangs */ - if (typeof HTMLElement !== "undefined" && HTMLElement && !HTMLElement.prototype.inspect) { - HTMLElement.prototype.inspect = function () { - return this.outerHTML; - }; - } - - if (typeof jQuery !== "undefined" && jQuery && !jQuery.prototype.inspect) { - jQuery.fn.inspect = function () { - var elementList = this.toArray().map(function (e) { - return util.inspect(e); - }).join(", "); - if (this.selector) { - return "SELECTOR(" + this.selector + ") matching " + this.length + " elements" + (elementList.length ? ": " + elementList : ""); - } else { - return elementList; - } - }; - } - - function jQueryAttributeTestHelper(method, singular, plural, nameOrHash, value) { - var keys = util.isObject(nameOrHash) ? Object.keys(nameOrHash) : [nameOrHash]; - var allRelevantAttributes = keys.reduce(function (memo, key) { - var value = $(this.obj)[method](key); - if (typeof value !== 'undefined') { - memo[key] = value; - } - return memo; - }.bind(this), {}); - - if (arguments.length === 4 && util.isObject(nameOrHash)) { - this.params = { operator: 'to have ' + plural + ' ' + i(nameOrHash) }; - allRelevantAttributes.should.have.properties(nameOrHash); - } else if (arguments.length === 4) { - this.params = { operator: 'to have ' + singular + ' ' + i(nameOrHash) }; - allRelevantAttributes.should.have.property(nameOrHash); - } else { - this.params = { operator: 'to have ' + singular + ' ' + i(nameOrHash) + ' with value ' + i(value) }; - allRelevantAttributes.should.have.property(nameOrHash, value); - } - } - - var browserTagCaseIndependentHtml = function (html) { - return $('
        ').append(html).html(); - }; - - var addJqPredicateAssertion = function (predicate, nameOverride, operatorOverride) { - Assertion.add(nameOverride || predicate, function() { - this.params = { operator: 'to be ' + (operatorOverride || predicate) }; - this.assert($(this.obj).is(':' + predicate)); - }, true); - } - - Assertion.add('className', function(className) { - this.params = { operator: 'to have class ' + className }; - this.assert($(this.obj).hasClass(className)); - }); - - Assertion.add('css', function(css) { - this.params = { operator: 'to have css ' + i(css) }; - for (var prop in css) { - var value = css[prop]; - if (value === 'auto' && $(this.obj).get(0).style[prop] === 'auto') { - continue; - } - $(this.obj).css(prop).should.eql(value); - } - }); - - addJqPredicateAssertion('visible'); - addJqPredicateAssertion('hidden'); - addJqPredicateAssertion('selected'); - addJqPredicateAssertion('checked'); - addJqPredicateAssertion('disabled'); - addJqPredicateAssertion('empty', 'emptyJq'); - addJqPredicateAssertion('focus', 'focused', 'focused'); - - Assertion.add('inDOM', function() { - this.params = { operator: 'to be in the DOM' }; - this.assert($.contains(document.documentElement, $(this.obj)[0])); - }, true); - - Assertion.add('exist', function() { - this.params = { operator: 'to exist' }; - $(this.obj).should.not.have.length(0); - }, true); - - Assertion.add('attr', function() { - var args = [ - 'attr', - 'attribute', - 'attributes' - ].concat(Array.prototype.slice.call(arguments, 0)); - jQueryAttributeTestHelper.apply(this, args); - }); - - Assertion.add('prop', function() { - var args = [ - 'prop', - 'property', - 'properties' - ].concat(Array.prototype.slice.call(arguments, 0)); - jQueryAttributeTestHelper.apply(this, args); - }); - - Assertion.add('elementId', function(id) { - this.params = { operator: 'to have ID ' + i(id) }; - this.obj.should.have.attr('id', id); - }); - - Assertion.add('html', function(html) { - this.params = { operator: 'to have HTML ' + i(html) }; - $(this.obj).html().should.eql(browserTagCaseIndependentHtml(html)); - }); - - Assertion.add('containHtml', function(html) { - this.params = { operator: 'to contain HTML ' + i(html) }; - $(this.obj).html().indexOf(browserTagCaseIndependentHtml(html)).should.be.above(-1); - }); - - Assertion.add('text', function(text) { - this.params = { operator: 'to have text ' + i(text) }; - var trimmedText = $.trim($(this.obj).text()); - - if (util.isRegExp(text)) { - trimmedText.should.match(text); - } else { - trimmedText.should.eql(text); - } - }); - - Assertion.add('containText', function(text) { - this.params = { operator: 'to contain text ' + i(text) }; - var trimmedText = $.trim($(this.obj).text()); - - if (util.isRegExp(text)) { - trimmedText.should.match(text); - } else { - trimmedText.indexOf(text).should.be.above(-1); - } - }); - - Assertion.add('value', function(val) { - this.params = { operator: 'to have value ' + i(val) }; - $(this.obj).val().should.eql(val); - }); - - Assertion.add('data', function() { - var args = [ - 'data', - 'data', - 'data' - ].concat(Array.prototype.slice.call(arguments, 0)); - jQueryAttributeTestHelper.apply(this, args); - }); - - Assertion.add('containElement', function(target) { - this.params = { operator: 'to contain ' + $(target).inspect() }; - $(this.obj).find(target).should.not.have.length(0); - }); - - Assertion.add('matchedBy', function(selector) { - this.params = { operator: 'to be matched by selector ' + selector }; - $(this.obj).filter(selector).should.not.have.length(0); - }); - - Assertion.add('handle', function(event) { - this.params = { operator: 'to handle ' + event }; - - var events = $._data($(this.obj).get(0), "events"); - - if (!events || !event || typeof event !== "string") { - return this.assert(false); - } - - var namespaces = event.split("."), - eventType = namespaces.shift(), - sortedNamespaces = namespaces.slice(0).sort(), - namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)"); - - if (events[eventType] && namespaces.length) { - for (var i = 0; i < events[eventType].length; i++) { - var namespace = events[eventType][i].namespace; - - if (namespaceRegExp.test(namespace)) { - return; - } - } - } else { - events.should.have.property(eventType); - events[eventType].should.not.have.length(0); - return; - } - - this.assert(false); - }); - - Assertion.add('handleWith', function(eventName, eventHandler) { - this.params = { operator: 'to handle ' + eventName + ' with ' + eventHandler }; - - var normalizedEventName = eventName.split('.')[0], - stack = $._data($(this.obj).get(0), "events")[normalizedEventName]; - - for (var i = 0; i < stack.length; i++) { - if (stack[i].handler == eventHandler) { - return; - } - } - - this.assert(false); - }); -}; -},{"../../util":16}],6:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - - function addLink(name) { - Object.defineProperty(Assertion.prototype, name, { - get: function() { - return this; - } - }); - } - - ['an', 'of', 'a', 'and', 'be', 'have', 'with', 'is', 'which'].forEach(addLink); -}; -},{}],7:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util'), - eql = require('../eql'); - -module.exports = function(should, Assertion) { - var i = should.format; - - Assertion.add('include', function(obj, description) { - if(!Array.isArray(this.obj) && !util.isString(this.obj)) { - this.params = { operator: 'to include an object equal to ' + i(obj), message: description }; - var cmp = {}; - for(var key in obj) cmp[key] = this.obj[key]; - this.assert(eql(cmp, obj)); - } else { - this.params = { operator: 'to include ' + i(obj), message: description }; - - this.assert(~this.obj.indexOf(obj)); - } - }); - - Assertion.add('includeEql', function(obj, description) { - this.params = { operator: 'to include an object equal to ' + i(obj), message: description }; - - this.assert(this.obj.some(function(item) { - return eql(obj, item); - })); - }); -}; -},{"../eql":2,"../util":16}],8:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var eql = require('../eql'); - -module.exports = function(should, Assertion) { - Assertion.add('eql', function(val, description) { - this.params = { operator: 'to equal', expected: val, showDiff: true, message: description }; - - this.assert(eql(val, this.obj)); - }); - - Assertion.add('equal', function(val, description) { - this.params = { operator: 'to be', expected: val, showDiff: true, message: description }; - - this.assert(val === this.obj); - }); - - Assertion.alias('equal', 'exactly'); -}; -},{"../eql":2}],9:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - var i = should.format; - - Assertion.add('throw', function(message) { - var fn = this.obj - , err = {} - , errorInfo = '' - , ok = true; - - try { - fn(); - ok = false; - } catch(e) { - err = e; - } - - if(ok) { - if('string' == typeof message) { - ok = message == err.message; - } else if(message instanceof RegExp) { - ok = message.test(err.message); - } else if('function' == typeof message) { - ok = err instanceof message; - } - - if(message && !ok) { - if('string' == typeof message) { - errorInfo = " with a message matching '" + message + "', but got '" + err.message + "'"; - } else if(message instanceof RegExp) { - errorInfo = " with a message matching " + message + ", but got '" + err.message + "'"; - } else if('function' == typeof message) { - errorInfo = " of type " + message.name + ", but got " + err.constructor.name; - } - } else { - errorInfo = " (got " + i(err) + ")"; - } - } - - this.params = { operator: 'to throw exception' + errorInfo }; - - this.assert(ok); - }); - - Assertion.alias('throw', 'throwError'); -}; -},{}],10:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util'), - eql = require('../eql'); - -module.exports = function(should, Assertion) { - var i = should.format; - - Assertion.add('match', function(other, description) { - this.params = { operator: 'to match ' + i(other), message: description }; - - if(!eql(this.obj, other)) { - if(util.isRegExp(other)) { // something - regex - - if(util.isString(this.obj)) { - - this.assert(other.exec(this.obj)); - } else if(Array.isArray(this.obj)) { - - this.obj.forEach(function(item) { - this.assert(other.exec(item));// should we try to convert to String and exec? - }, this); - } else if(util.isObject(this.obj)) { - - var notMatchedProps = [], matchedProps = []; - util.forOwn(this.obj, function(value, name) { - if(other.exec(value)) matchedProps.push(i(name)); - else notMatchedProps.push(i(name)); - }, this); - - if(notMatchedProps.length) - this.params.operator += '\n\tnot matched properties: ' + notMatchedProps.join(', '); - if(matchedProps.length) - this.params.operator += '\n\tmatched properties: ' + matchedProps.join(', '); - - this.assert(notMatchedProps.length == 0); - } // should we try to convert to String and exec? - } else if(util.isFunction(other)) { - var res; - try { - res = other(this.obj); - } catch(e) { - if(e instanceof should.AssertionError) { - this.params.operator += '\n\t' + e.message; - } - throw e; - } - - if(res instanceof Assertion) { - this.params.operator += '\n\t' + res.getMessage(); - } - - //if we throw exception ok - it is used .should inside - if(util.isBoolean(res)) { - this.assert(res); // if it is just boolean function assert on it - } - } else if(util.isObject(other)) { // try to match properties (for Object and Array) - notMatchedProps = []; matchedProps = []; - - util.forOwn(other, function(value, key) { - try { - this.obj[key].should.match(value); - matchedProps.push(key); - } catch(e) { - if(e instanceof should.AssertionError) { - notMatchedProps.push(key); - } else { - throw e; - } - } - }, this); - - if(notMatchedProps.length) - this.params.operator += '\n\tnot matched properties: ' + notMatchedProps.join(', '); - if(matchedProps.length) - this.params.operator += '\n\tmatched properties: ' + matchedProps.join(', '); - - this.assert(notMatchedProps.length == 0); - } else { - this.assert(false); - } - } - }); - - Assertion.add('matchEach', function(other, description) { - this.params = { operator: 'to match each ' + i(other), message: description }; - - var f = other; - - if(util.isRegExp(other)) - f = function(it) { - return !!other.exec(it); - }; - else if(!util.isFunction(other)) - f = function(it) { - return eql(it, other); - }; - - util.forOwn(this.obj, function(value, key) { - var res = f(value, key); - - //if we throw exception ok - it is used .should inside - if(util.isBoolean(res)) { - this.assert(res); // if it is just boolean function assert on it - } - }, this); - }); -}; -},{"../eql":2,"../util":16}],11:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - Assertion.add('NaN', function() { - this.params = { operator: 'to be NaN' }; - - this.is.a.Number - .and.assert(isNaN(this.obj)); - }, true); - - Assertion.add('Infinity', function() { - this.params = { operator: 'to be Infinity' }; - - this.is.a.Number - .and.not.a.NaN - .and.assert(!isFinite(this.obj)); - }, true); - - Assertion.add('within', function(start, finish, description) { - this.params = { operator: 'to be within ' + start + '..' + finish, message: description }; - - this.assert(this.obj >= start && this.obj <= finish); - }); - - Assertion.add('approximately', function(value, delta, description) { - this.params = { operator: 'to be approximately ' + value + " ±" + delta, message: description }; - - this.assert(Math.abs(this.obj - value) <= delta); - }); - - Assertion.add('above', function(n, description) { - this.params = { operator: 'to be above ' + n, message: description }; - - this.assert(this.obj > n); - }); - - Assertion.add('below', function(n, description) { - this.params = { operator: 'to be below ' + n, message: description }; - - this.assert(this.obj < n); - }); - - Assertion.alias('above', 'greaterThan'); - Assertion.alias('below', 'lessThan'); - -}; -},{}],12:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util'), - eql = require('../eql'); - -var aSlice = Array.prototype.slice; - -module.exports = function(should, Assertion) { - var i = should.format; - - Assertion.add('property', function(name, val) { - if(arguments.length > 1) { - var p = {}; - p[name] = val; - this.have.properties(p); - } else { - this.have.properties(name); - } - this.obj = this.obj[name]; - }); - - Assertion.add('properties', function(names) { - var values = {}; - if(arguments.length > 1) { - names = aSlice.call(arguments); - } else if(!Array.isArray(names)) { - if(util.isString(names)) { - names = [names]; - } else { - values = names; - names = Object.keys(names); - } - } - - var obj = Object(this.obj), missingProperties = []; - - //just enumerate properties and check if they all present - names.forEach(function(name) { - if(!(name in obj)) missingProperties.push(i(name)); - }); - - var props = missingProperties; - if(props.length === 0) { - props = names.map(i); - } - - var operator = (props.length === 1 ? - 'to have property ' : 'to have properties ') + props.join(', '); - - this.params = { operator: operator }; - - this.assert(missingProperties.length === 0); - - // check if values in object matched expected - var valueCheckNames = Object.keys(values); - if(valueCheckNames.length) { - var wrongValues = []; - props = []; - - // now check values, as there we have all properties - valueCheckNames.forEach(function(name) { - var value = values[name]; - if(!eql(obj[name], value)) { - wrongValues.push(i(name) + ' of ' + i(value) + ' (got ' + i(obj[name]) + ')'); - } else { - props.push(i(name) + ' of ' + i(value)); - } - }); - - if(wrongValues.length > 0) { - props = wrongValues; - } - - operator = (props.length === 1 ? - 'to have property ' : 'to have properties ') + props.join(', '); - - this.params = { operator: operator }; - - this.assert(wrongValues.length === 0); - } - }); - - Assertion.add('length', function(n, description) { - this.have.property('length', n, description); - }); - - Assertion.alias('length', 'lengthOf'); - - var hasOwnProperty = Object.prototype.hasOwnProperty; - - Assertion.add('ownProperty', function(name, description) { - this.params = { operator: 'to have own property ' + i(name), message: description }; - - this.assert(hasOwnProperty.call(this.obj, name)); - - this.obj = this.obj[name]; - }); - - Assertion.alias('hasOwnProperty', 'ownProperty'); - - Assertion.add('empty', function() { - this.params = { operator: 'to be empty' }; - - if(util.isString(this.obj) || Array.isArray(this.obj) || util.isArguments(this.obj)) { - this.have.property('length', 0); - } else { - var obj = Object(this.obj); // wrap to reference for booleans and numbers - for(var prop in obj) { - this.have.not.ownProperty(prop); - } - } - }, true); - - Assertion.add('keys', function(keys) { - if(arguments.length > 1) keys = aSlice.call(arguments); - else if(arguments.length === 1 && util.isString(keys)) keys = [ keys ]; - else if(arguments.length === 0) keys = []; - - var obj = Object(this.obj); - - // first check if some keys are missing - var missingKeys = []; - keys.forEach(function(key) { - if(!hasOwnProperty.call(this.obj, key)) - missingKeys.push(i(key)); - }, this); - - // second check for extra keys - var extraKeys = []; - Object.keys(obj).forEach(function(key) { - if(keys.indexOf(key) < 0) { - extraKeys.push(i(key)); - } - }); - - var verb = keys.length === 0 ? 'to be empty' : - 'to have ' + (keys.length === 1 ? 'key ' : 'keys '); - - this.params = { operator: verb + keys.map(i).join(', ')}; - - if(missingKeys.length > 0) - this.params.operator += '\n\tmissing keys: ' + missingKeys.join(', '); - - if(extraKeys.length > 0) - this.params.operator += '\n\textra keys: ' + extraKeys.join(', '); - - this.assert(missingKeys.length === 0 && extraKeys.length === 0); - }); - - Assertion.alias("keys", "key"); - - Assertion.add('containEql', function(other) { - this.params = { operator: 'to contain ' + i(other) }; - var obj = this.obj; - if(Array.isArray(obj)) { - this.assert(obj.some(function(item) { - return eql(item, other); - })); - } else if(util.isString(obj)) { - // expect obj to be string - this.assert(obj.indexOf(String(other)) >= 0); - } else if(util.isObject(obj)) { - // object contains object case - util.forOwn(other, function(value, key) { - obj[key].should.eql(value); - }); - } else { - //other uncovered cases - this.assert(false); - } - }); - - Assertion.add('containDeep', function(other) { - this.params = { operator: 'to contain ' + i(other) }; - - var obj = this.obj; - if(Array.isArray(obj)) { - if(Array.isArray(other)) { - var otherIdx = 0; - obj.forEach(function(item) { - try { - should(item).not.be.null.and.containDeep(other[otherIdx]); - otherIdx++; - } catch(e) { - if(e instanceof should.AssertionError) { - return; - } - throw e; - } - }); - this.assert(otherIdx == other.length); - //search array contain other as sub sequence - } else { - this.assert(false); - } - } else if(util.isString(obj)) {// expect other to be string - this.assert(obj.indexOf(String(other)) >= 0); - } else if(util.isObject(obj)) {// object contains object case - if(util.isObject(other)) { - util.forOwn(other, function(value, key) { - should(obj[key]).not.be.null.and.containDeep(value); - }); - } else {//one of the properties contain value - this.assert(false); - } - } else { - this.eql(other); - } - }); - -}; -},{"../eql":2,"../util":16}],13:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - Assertion.add('startWith', function(str, description) { - this.params = { operator: 'to start with ' + should.format(str), message: description }; - - this.assert(0 === this.obj.indexOf(str)); - }); - - Assertion.add('endWith', function(str, description) { - this.params = { operator: 'to end with ' + should.format(str), message: description }; - - this.assert(this.obj.indexOf(str, this.obj.length - str.length) >= 0); - }); -}; -},{}],14:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util'); - -module.exports = function(should, Assertion) { - Assertion.add('Number', function() { - this.params = { operator: 'to be a number' }; - - this.assert(util.isNumber(this.obj)); - }, true); - - Assertion.add('arguments', function() { - this.params = { operator: 'to be arguments' }; - - this.assert(util.isArguments(this.obj)); - }, true); - - Assertion.add('type', function(type, description) { - this.params = { operator: 'to have type ' + type, message: description }; - - (typeof this.obj).should.be.exactly(type, description); - }); - - Assertion.add('instanceof', function(constructor, description) { - this.params = { operator: 'to be an instance of ' + constructor.name, message: description }; - - this.assert(Object(this.obj) instanceof constructor); - }); - - Assertion.add('Function', function() { - this.params = { operator: 'to be a function' }; - - this.assert(util.isFunction(this.obj)); - }, true); - - Assertion.add('Object', function() { - this.params = { operator: 'to be an object' }; - - this.assert(util.isObject(this.obj)); - }, true); - - Assertion.add('String', function() { - this.params = { operator: 'to be a string' }; - - this.assert(util.isString(this.obj)); - }, true); - - Assertion.add('Array', function() { - this.params = { operator: 'to be an array' }; - - this.assert(Array.isArray(this.obj)); - }, true); - - Assertion.add('Boolean', function() { - this.params = { operator: 'to be a boolean' }; - - this.assert(util.isBoolean(this.obj)); - }, true); - - Assertion.add('Error', function() { - this.params = { operator: 'to be an error' }; - - this.assert(util.isError(this.obj)); - }, true); - - Assertion.add('null', function() { - this.params = { operator: 'to be null' }; - - this.assert(this.obj === null); - }, true); - - Assertion.alias('instanceof', 'instanceOf'); -}; -},{"../util":16}],15:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - - -var util = require('./util') - , AssertionError = util.AssertionError - , inspect = util.inspect; - -/** - * Our function should - * @param obj - * @returns {Assertion} - */ -var should = function(obj) { - return new Assertion(util.isWrapperType(obj) ? obj.valueOf(): obj); -}; - -/** - * Initialize a new `Assertion` with the given _obj_. - * - * @param {*} obj - * @api private - */ - -var Assertion = should.Assertion = function Assertion(obj) { - this.obj = obj; -}; - - -/** - Way to extend Assertion function. It uses some logic - to define only positive assertions and itself rule with negative assertion. - - All actions happen in subcontext and this method take care about negation. - Potentially we can add some more modifiers that does not depends from state of assertion. -*/ -Assertion.add = function(name, f, isGetter) { - var prop = {}; - prop[isGetter ? 'get' : 'value'] = function() { - var context = new Assertion(this.obj); - context.copy = context.copyIfMissing; - - try { - f.apply(context, arguments); - } catch(e) { - //copy data from sub context to this - this.copy(context); - - //check for fail - if(e instanceof should.AssertionError) { - //negative fail - if(this.negate) { - this.obj = context.obj; - this.negate = false; - return this; - } - this.assert(false); - } - // throw if it is another exception - throw e; - } - //copy data from sub context to this - this.copy(context); - if(this.negate) { - this.assert(false); - } - - this.obj = context.obj; - this.negate = false; - return this; - }; - - Object.defineProperty(Assertion.prototype, name, prop); -}; - -Assertion.alias = function(from, to) { - Assertion.prototype[to] = Assertion.prototype[from] -}; - -should.AssertionError = AssertionError; -var i = should.format = function i(value) { - if(util.isDate(value) && typeof value.inspect !== 'function') return value.toISOString(); //show millis in dates - return inspect(value, { depth: null }); -}; - -should.use = function(f) { - f(this, Assertion); - return this; -}; - - -/** - * Expose should to external world. - */ -exports = module.exports = should; - - -/** - * Expose api via `Object#should`. - * - * @api public - */ - -Object.defineProperty(Object.prototype, 'should', { - set: function(){}, - get: function(){ - return should(this); - }, - configurable: true -}); - - -Assertion.prototype = { - constructor: Assertion, - - assert: function(expr) { - if(expr) return; - - var params = this.params; - - var msg = params.message, generatedMessage = false; - if(!msg) { - msg = this.getMessage(); - generatedMessage = true; - } - - var err = new AssertionError({ - message: msg - , actual: this.obj - , expected: params.expected - , stackStartFunction: this.assert - }); - - err.showDiff = params.showDiff; - err.operator = params.operator; - err.generatedMessage = generatedMessage; - - throw err; - }, - - getMessage: function() { - return 'expected ' + i(this.obj) + (this.negate ? ' not ': ' ') + - this.params.operator + ('expected' in this.params ? ' ' + i(this.params.expected) : ''); - }, - - copy: function(other) { - this.params = other.params; - }, - - copyIfMissing: function(other) { - if(!this.params) this.params = other.params; - }, - - - /** - * Negation modifier. - * - * @api public - */ - - get not() { - this.negate = !this.negate; - return this; - } -}; - - -},{"./util":16}],16:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Check if given obj just a primitive type wrapper - * @param {Object} obj - * @returns {boolean} - * @api private - */ -exports.isWrapperType = function(obj) { - return isNumber(obj) || isString(obj) || isBoolean(obj); -}; - -/** - * Merge object b with object a. - * - * var a = { foo: 'bar' } - * , b = { bar: 'baz' }; - * - * utils.merge(a, b); - * // => { foo: 'bar', bar: 'baz' } - * - * @param {Object} a - * @param {Object} b - * @return {Object} - * @api private - */ - -exports.merge = function(a, b){ - if (a && b) { - for (var key in b) { - a[key] = b[key]; - } - } - return a; -}; - -function isNumber(arg) { - return typeof arg === 'number' || arg instanceof Number; -} - -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string' || arg instanceof String; -} - -function isBoolean(arg) { - return typeof arg === 'boolean' || arg instanceof Boolean; -} -exports.isBoolean = isBoolean; - -exports.isString = isString; - -function isBuffer(arg) { - return typeof Buffer !== 'undefined' && arg instanceof Buffer; -} - -exports.isBuffer = isBuffer; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} - -exports.isDate = isDate; - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -exports.isObject = isObject; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} - -exports.isRegExp = isRegExp; - -function isNullOrUndefined(arg) { - return arg == null; -} - -exports.isNullOrUndefined = isNullOrUndefined; - -function isArguments(object) { - return objectToString(object) === '[object Arguments]'; -} - -exports.isArguments = isArguments; - -exports.isFunction = function(arg) { - return typeof arg === 'function' || arg instanceof Function; -}; - -function isError(e) { - return isObject(e) && objectToString(e) === '[object Error]'; -} -exports.isError = isError; - -exports.inspect = require('util').inspect; - -exports.AssertionError = require('assert').AssertionError; - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -exports.forOwn = function(obj, f, context) { - for(var prop in obj) { - if(hasOwnProperty.call(obj, prop)) { - f.call(context, obj[prop], prop); - } - } -}; -},{"assert":17,"util":20}],17:[function(require,module,exports){ -// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 -// -// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! -// -// Originally from narwhal.js (http://narwhaljs.org) -// Copyright (c) 2009 Thomas Robinson <280north.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 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. - -// when used in node, this will actually load the util module we depend on -// versus loading the builtin util module as happens otherwise -// this is a bug in node module loading as far as I am concerned -var util = require('util/'); - -var pSlice = Array.prototype.slice; -var hasOwn = Object.prototype.hasOwnProperty; - -// 1. The assert module provides functions that throw -// AssertionError's when particular conditions are not met. The -// assert module must conform to the following interface. - -var assert = module.exports = ok; - -// 2. The AssertionError is defined in assert. -// new assert.AssertionError({ message: message, -// actual: actual, -// expected: expected }) - -assert.AssertionError = function AssertionError(options) { - this.name = 'AssertionError'; - this.actual = options.actual; - this.expected = options.expected; - this.operator = options.operator; - if (options.message) { - this.message = options.message; - this.generatedMessage = false; - } else { - this.message = getMessage(this); - this.generatedMessage = true; - } - var stackStartFunction = options.stackStartFunction || fail; - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, stackStartFunction); - } - else { - // non v8 browsers so we can have a stacktrace - var err = new Error(); - if (err.stack) { - var out = err.stack; - - // try to strip useless frames - var fn_name = stackStartFunction.name; - var idx = out.indexOf('\n' + fn_name); - if (idx >= 0) { - // once we have located the function frame - // we need to strip out everything before it (and its line) - var next_line = out.indexOf('\n', idx + 1); - out = out.substring(next_line + 1); - } - - this.stack = out; - } - } -}; - -// assert.AssertionError instanceof Error -util.inherits(assert.AssertionError, Error); - -function replacer(key, value) { - if (util.isUndefined(value)) { - return '' + value; - } - if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) { - return value.toString(); - } - if (util.isFunction(value) || util.isRegExp(value)) { - return value.toString(); - } - return value; -} - -function truncate(s, n) { - if (util.isString(s)) { - return s.length < n ? s : s.slice(0, n); - } else { - return s; - } -} - -function getMessage(self) { - return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + - self.operator + ' ' + - truncate(JSON.stringify(self.expected, replacer), 128); -} - -// At present only the three keys mentioned above are used and -// understood by the spec. Implementations or sub modules can pass -// other keys to the AssertionError's constructor - they will be -// ignored. - -// 3. All of the following functions must throw an AssertionError -// when a corresponding condition is not met, with a message that -// may be undefined if not provided. All assertion methods provide -// both the actual and expected values to the assertion error for -// display purposes. - -function fail(actual, expected, message, operator, stackStartFunction) { - throw new assert.AssertionError({ - message: message, - actual: actual, - expected: expected, - operator: operator, - stackStartFunction: stackStartFunction - }); -} - -// EXTENSION! allows for well behaved errors defined elsewhere. -assert.fail = fail; - -// 4. Pure assertion tests whether a value is truthy, as determined -// by !!guard. -// assert.ok(guard, message_opt); -// This statement is equivalent to assert.equal(true, !!guard, -// message_opt);. To test strictly for the value true, use -// assert.strictEqual(true, guard, message_opt);. - -function ok(value, message) { - if (!value) fail(value, true, message, '==', assert.ok); -} -assert.ok = ok; - -// 5. The equality assertion tests shallow, coercive equality with -// ==. -// assert.equal(actual, expected, message_opt); - -assert.equal = function equal(actual, expected, message) { - if (actual != expected) fail(actual, expected, message, '==', assert.equal); -}; - -// 6. The non-equality assertion tests for whether two objects are not equal -// with != assert.notEqual(actual, expected, message_opt); - -assert.notEqual = function notEqual(actual, expected, message) { - if (actual == expected) { - fail(actual, expected, message, '!=', assert.notEqual); - } -}; - -// 7. The equivalence assertion tests a deep equality relation. -// assert.deepEqual(actual, expected, message_opt); - -assert.deepEqual = function deepEqual(actual, expected, message) { - if (!_deepEqual(actual, expected)) { - fail(actual, expected, message, 'deepEqual', assert.deepEqual); - } -}; - -function _deepEqual(actual, expected) { - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - - } else if (util.isBuffer(actual) && util.isBuffer(expected)) { - if (actual.length != expected.length) return false; - - for (var i = 0; i < actual.length; i++) { - if (actual[i] !== expected[i]) return false; - } - - return true; - - // 7.2. If the expected value is a Date object, the actual value is - // equivalent if it is also a Date object that refers to the same time. - } else if (util.isDate(actual) && util.isDate(expected)) { - return actual.getTime() === expected.getTime(); - - // 7.3 If the expected value is a RegExp object, the actual value is - // equivalent if it is also a RegExp object with the same source and - // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). - } else if (util.isRegExp(actual) && util.isRegExp(expected)) { - return actual.source === expected.source && - actual.global === expected.global && - actual.multiline === expected.multiline && - actual.lastIndex === expected.lastIndex && - actual.ignoreCase === expected.ignoreCase; - - // 7.4. Other pairs that do not both pass typeof value == 'object', - // equivalence is determined by ==. - } else if (!util.isObject(actual) && !util.isObject(expected)) { - return actual == expected; - - // 7.5 For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical 'prototype' property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected); - } -} - -function isArguments(object) { - return Object.prototype.toString.call(object) == '[object Arguments]'; -} - -function objEquiv(a, b) { - if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) - return false; - // an identical 'prototype' property. - if (a.prototype !== b.prototype) return false; - //~~~I've managed to break Object.keys through screwy arguments passing. - // Converting to array solves the problem. - if (isArguments(a)) { - if (!isArguments(b)) { - return false; - } - a = pSlice.call(a); - b = pSlice.call(b); - return _deepEqual(a, b); - } - try { - var ka = objectKeys(a), - kb = objectKeys(b), - key, i; - } catch (e) {//happens when one is a string literal and the other isn't - return false; - } - // having the same number of owned properties (keys incorporates - // hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!_deepEqual(a[key], b[key])) return false; - } - return true; -} - -// 8. The non-equivalence assertion tests for any deep inequality. -// assert.notDeepEqual(actual, expected, message_opt); - -assert.notDeepEqual = function notDeepEqual(actual, expected, message) { - if (_deepEqual(actual, expected)) { - fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); - } -}; - -// 9. The strict equality assertion tests strict equality, as determined by ===. -// assert.strictEqual(actual, expected, message_opt); - -assert.strictEqual = function strictEqual(actual, expected, message) { - if (actual !== expected) { - fail(actual, expected, message, '===', assert.strictEqual); - } -}; - -// 10. The strict non-equality assertion tests for strict inequality, as -// determined by !==. assert.notStrictEqual(actual, expected, message_opt); - -assert.notStrictEqual = function notStrictEqual(actual, expected, message) { - if (actual === expected) { - fail(actual, expected, message, '!==', assert.notStrictEqual); - } -}; - -function expectedException(actual, expected) { - if (!actual || !expected) { - return false; - } - - if (Object.prototype.toString.call(expected) == '[object RegExp]') { - return expected.test(actual); - } else if (actual instanceof expected) { - return true; - } else if (expected.call({}, actual) === true) { - return true; - } - - return false; -} - -function _throws(shouldThrow, block, expected, message) { - var actual; - - if (util.isString(expected)) { - message = expected; - expected = null; - } - - try { - block(); - } catch (e) { - actual = e; - } - - message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + - (message ? ' ' + message : '.'); - - if (shouldThrow && !actual) { - fail(actual, expected, 'Missing expected exception' + message); - } - - if (!shouldThrow && expectedException(actual, expected)) { - fail(actual, expected, 'Got unwanted exception' + message); - } - - if ((shouldThrow && actual && expected && - !expectedException(actual, expected)) || (!shouldThrow && actual)) { - throw actual; - } -} - -// 11. Expected to throw an error: -// assert.throws(block, Error_opt, message_opt); - -assert.throws = function(block, /*optional*/error, /*optional*/message) { - _throws.apply(this, [true].concat(pSlice.call(arguments))); -}; - -// EXTENSION! This is annoying to write outside this module. -assert.doesNotThrow = function(block, /*optional*/message) { - _throws.apply(this, [false].concat(pSlice.call(arguments))); -}; - -assert.ifError = function(err) { if (err) {throw err;}}; - -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - if (hasOwn.call(obj, key)) keys.push(key); - } - return keys; -}; - -},{"util/":20}],18:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} - -},{}],19:[function(require,module,exports){ -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; -} -},{}],20:[function(require,module,exports){ -// 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 formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } - - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; -}; - - -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - // Allow for deprecating things in the process of starting up. - if (isUndefined(global.process)) { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } - - if (process.noDeprecation === true) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -}; - - -var debugs = {}; -var debugEnviron; -exports.debuglog = function(set) { - if (isUndefined(debugEnviron)) - debugEnviron = process.env.NODE_DEBUG || ''; - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; - - -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); -} -exports.inspect = inspect; - - -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] -}; - -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; - - -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; - - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } -} - - -function stylizeNoColor(str, styleType) { - return str; -} - - -function arrayToHash(array) { - var hash = {}; - - array.forEach(function(val, idx) { - hash[val] = true; - }); - - return hash; -} - - -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } - - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } - - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } - - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } - } - - var base = '', array = false, braces = ['{', '}']; - - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } - - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } - - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } - - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } - - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } - - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - - ctx.seen.push(value); - - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } - - ctx.seen.pop(); - - return reduceToSingleString(output, base, braces); -} - - -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); -} - - -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} - - -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; -} - - -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } - } - - return name + ': ' + str; -} - - -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); - - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } - - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} - - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = require('./support/isBuffer'); - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - - -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} - - -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; - -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); -} - - -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; - - -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = require('inherits'); - -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; - - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; - -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - -},{"./support/isBuffer":19,"inherits":18}]},{},[1]) -(1) -}); \ No newline at end of file diff --git a/node_modules/should/should.js.for-tests b/node_modules/should/should.js.for-tests deleted file mode 100644 index 44160f8d..00000000 --- a/node_modules/should/should.js.for-tests +++ /dev/null @@ -1,2321 +0,0 @@ -!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Should=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o - * MIT Licensed - */ - -var should = require('./should'); - -should - .use(require('./ext/assert')) - .use(require('./ext/chain')) - .use(require('./ext/bool')) - .use(require('./ext/number')) - .use(require('./ext/eql')) - .use(require('./ext/type')) - .use(require('./ext/string')) - .use(require('./ext/property')) - .use(require('./ext/error')) - .use(require('./ext/match')) - .use(require('./ext/browser/jquery')) - .use(require('./ext/deprecated')); - - module.exports = should; -},{"./ext/assert":3,"./ext/bool":4,"./ext/browser/jquery":5,"./ext/chain":6,"./ext/deprecated":7,"./ext/eql":8,"./ext/error":9,"./ext/match":10,"./ext/number":11,"./ext/property":12,"./ext/string":13,"./ext/type":14,"./should":15}],2:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -// Taken from node's assert module, because it sucks -// and exposes next to nothing useful. -var util = require('./util'); - -module.exports = _deepEqual; - -var pSlice = Array.prototype.slice; - -function _deepEqual(actual, expected) { - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - - } else if (util.isBuffer(actual) && util.isBuffer(expected)) { - if (actual.length != expected.length) return false; - - for (var i = 0; i < actual.length; i++) { - if (actual[i] !== expected[i]) return false; - } - - return true; - - // 7.2. If the expected value is a Date object, the actual value is - // equivalent if it is also a Date object that refers to the same time. - } else if (util.isDate(actual) && util.isDate(expected)) { - return actual.getTime() === expected.getTime(); - - // 7.3 If the expected value is a RegExp object, the actual value is - // equivalent if it is also a RegExp object with the same source and - // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). - } else if (util.isRegExp(actual) && util.isRegExp(expected)) { - return actual.source === expected.source && - actual.global === expected.global && - actual.multiline === expected.multiline && - actual.lastIndex === expected.lastIndex && - actual.ignoreCase === expected.ignoreCase; - - // 7.4. Other pairs that do not both pass typeof value == 'object', - // equivalence is determined by ==. - } else if (!util.isObject(actual) && !util.isObject(expected)) { - return actual == expected; - - // 7.5 For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical 'prototype' property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected); - } -} - - -function objEquiv (a, b) { - if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) - return false; - // an identical 'prototype' property. - if (a.prototype !== b.prototype) return false; - //~~~I've managed to break Object.keys through screwy arguments passing. - // Converting to array solves the problem. - if (util.isArguments(a)) { - if (!util.isArguments(b)) { - return false; - } - a = pSlice.call(a); - b = pSlice.call(b); - return _deepEqual(a, b); - } - try{ - var ka = Object.keys(a), - kb = Object.keys(b), - key, i; - } catch (e) {//happens when one is a string literal and the other isn't - return false; - } - // having the same number of owned properties (keys incorporates - // hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!_deepEqual(a[key], b[key])) return false; - } - return true; -} - -},{"./util":16}],3:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util') - , assert = require('assert') - , AssertionError = assert.AssertionError; - -module.exports = function(should) { - var i = should.format; - - /** - * Expose assert to should - * - * This allows you to do things like below - * without require()ing the assert module. - * - * should.equal(foo.bar, undefined); - * - */ - util.merge(should, assert); - - - /** - * Assert _obj_ exists, with optional message. - * - * @param {*} obj - * @param {String} [msg] - * @api public - */ - should.exist = should.exists = function(obj, msg) { - if(null == obj) { - throw new AssertionError({ - message: msg || ('expected ' + i(obj) + ' to exist'), stackStartFunction: should.exist - }); - } - }; - - /** - * Asserts _obj_ does not exist, with optional message. - * - * @param {*} obj - * @param {String} [msg] - * @api public - */ - - should.not = {}; - should.not.exist = should.not.exists = function(obj, msg) { - if(null != obj) { - throw new AssertionError({ - message: msg || ('expected ' + i(obj) + ' to not exist'), stackStartFunction: should.not.exist - }); - } - }; -}; -},{"../util":16,"assert":17}],4:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - Assertion.add('true', function() { - this.is.exactly(true) - }, true); - - Assertion.add('false', function() { - this.is.exactly(false) - }, true); - - Assertion.add('ok', function() { - this.params = { operator: 'to be truthy' }; - - this.assert(this.obj); - }, true); -}; -},{}],5:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -/*! - * Portions copyright (c) 2010, 2011, 2012 Wojciech Zawistowski, Travis Jeffery - * From the jasmine-jquery project under the MIT License. - */ - -var util = require('../../util'); - -module.exports = function(should, Assertion) { - var i = should.format; - var $ = this.jQuery || this.$; - - /* Otherwise, node's util.inspect loops hangs */ - if (typeof HTMLElement !== "undefined" && HTMLElement && !HTMLElement.prototype.inspect) { - HTMLElement.prototype.inspect = function () { - return this.outerHTML; - }; - } - - if (typeof jQuery !== "undefined" && jQuery && !jQuery.prototype.inspect) { - jQuery.fn.inspect = function () { - var elementList = this.toArray().map(function (e) { - return util.inspect(e); - }).join(", "); - if (this.selector) { - return "SELECTOR(" + this.selector + ") matching " + this.length + " elements" + (elementList.length ? ": " + elementList : ""); - } else { - return elementList; - } - }; - } - - function jQueryAttributeTestHelper(method, singular, plural, nameOrHash, value) { - var keys = util.isObject(nameOrHash) ? Object.keys(nameOrHash) : [nameOrHash]; - var allRelevantAttributes = keys.reduce(function (memo, key) { - var value = $(this.obj)[method](key); - if (typeof value !== 'undefined') { - memo[key] = value; - } - return memo; - }.bind(this), {}); - - if (arguments.length === 4 && util.isObject(nameOrHash)) { - this.params = { operator: 'to have ' + plural + ' ' + i(nameOrHash) }; - allRelevantAttributes.should.have.properties(nameOrHash); - } else if (arguments.length === 4) { - this.params = { operator: 'to have ' + singular + ' ' + i(nameOrHash) }; - allRelevantAttributes.should.have.property(nameOrHash); - } else { - this.params = { operator: 'to have ' + singular + ' ' + i(nameOrHash) + ' with value ' + i(value) }; - allRelevantAttributes.should.have.property(nameOrHash, value); - } - } - - var browserTagCaseIndependentHtml = function (html) { - return $('
        ').append(html).html(); - }; - - var addJqPredicateAssertion = function (predicate, nameOverride, operatorOverride) { - Assertion.add(nameOverride || predicate, function() { - this.params = { operator: 'to be ' + (operatorOverride || predicate) }; - this.assert($(this.obj).is(':' + predicate)); - }, true); - } - - Assertion.add('className', function(className) { - this.params = { operator: 'to have class ' + className }; - this.assert($(this.obj).hasClass(className)); - }); - - Assertion.add('css', function(css) { - this.params = { operator: 'to have css ' + i(css) }; - for (var prop in css) { - var value = css[prop]; - if (value === 'auto' && $(this.obj).get(0).style[prop] === 'auto') { - continue; - } - $(this.obj).css(prop).should.eql(value); - } - }); - - addJqPredicateAssertion('visible'); - addJqPredicateAssertion('hidden'); - addJqPredicateAssertion('selected'); - addJqPredicateAssertion('checked'); - addJqPredicateAssertion('disabled'); - addJqPredicateAssertion('empty', 'emptyJq'); - addJqPredicateAssertion('focus', 'focused', 'focused'); - - Assertion.add('inDOM', function() { - this.params = { operator: 'to be in the DOM' }; - this.assert($.contains(document.documentElement, $(this.obj)[0])); - }, true); - - Assertion.add('exist', function() { - this.params = { operator: 'to exist' }; - $(this.obj).should.not.have.length(0); - }, true); - - Assertion.add('attr', function() { - var args = [ - 'attr', - 'attribute', - 'attributes' - ].concat(Array.prototype.slice.call(arguments, 0)); - jQueryAttributeTestHelper.apply(this, args); - }); - - Assertion.add('prop', function() { - var args = [ - 'prop', - 'property', - 'properties' - ].concat(Array.prototype.slice.call(arguments, 0)); - jQueryAttributeTestHelper.apply(this, args); - }); - - Assertion.add('elementId', function(id) { - this.params = { operator: 'to have ID ' + i(id) }; - this.obj.should.have.attr('id', id); - }); - - Assertion.add('html', function(html) { - this.params = { operator: 'to have HTML ' + i(html) }; - $(this.obj).html().should.eql(browserTagCaseIndependentHtml(html)); - }); - - Assertion.add('containHtml', function(html) { - this.params = { operator: 'to contain HTML ' + i(html) }; - $(this.obj).html().indexOf(browserTagCaseIndependentHtml(html)).should.be.above(-1); - }); - - Assertion.add('text', function(text) { - this.params = { operator: 'to have text ' + i(text) }; - var trimmedText = $.trim($(this.obj).text()); - - if (util.isRegExp(text)) { - trimmedText.should.match(text); - } else { - trimmedText.should.eql(text); - } - }); - - Assertion.add('containText', function(text) { - this.params = { operator: 'to contain text ' + i(text) }; - var trimmedText = $.trim($(this.obj).text()); - - if (util.isRegExp(text)) { - trimmedText.should.match(text); - } else { - trimmedText.indexOf(text).should.be.above(-1); - } - }); - - Assertion.add('value', function(val) { - this.params = { operator: 'to have value ' + i(val) }; - $(this.obj).val().should.eql(val); - }); - - Assertion.add('data', function() { - var args = [ - 'data', - 'data', - 'data' - ].concat(Array.prototype.slice.call(arguments, 0)); - jQueryAttributeTestHelper.apply(this, args); - }); - - Assertion.add('containElement', function(target) { - this.params = { operator: 'to contain ' + $(target).inspect() }; - $(this.obj).find(target).should.not.have.length(0); - }); - - Assertion.add('matchedBy', function(selector) { - this.params = { operator: 'to be matched by selector ' + selector }; - $(this.obj).filter(selector).should.not.have.length(0); - }); - - Assertion.add('handle', function(event) { - this.params = { operator: 'to handle ' + event }; - - var events = $._data($(this.obj).get(0), "events"); - - if (!events || !event || typeof event !== "string") { - return this.assert(false); - } - - var namespaces = event.split("."), - eventType = namespaces.shift(), - sortedNamespaces = namespaces.slice(0).sort(), - namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)"); - - if (events[eventType] && namespaces.length) { - for (var i = 0; i < events[eventType].length; i++) { - var namespace = events[eventType][i].namespace; - - if (namespaceRegExp.test(namespace)) { - return; - } - } - } else { - events.should.have.property(eventType); - events[eventType].should.not.have.length(0); - return; - } - - this.assert(false); - }); - - Assertion.add('handleWith', function(eventName, eventHandler) { - this.params = { operator: 'to handle ' + eventName + ' with ' + eventHandler }; - - var normalizedEventName = eventName.split('.')[0], - stack = $._data($(this.obj).get(0), "events")[normalizedEventName]; - - for (var i = 0; i < stack.length; i++) { - if (stack[i].handler == eventHandler) { - return; - } - } - - this.assert(false); - }); -}; -},{"../../util":16}],6:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - - function addLink(name) { - Object.defineProperty(Assertion.prototype, name, { - get: function() { - return this; - } - }); - } - - ['an', 'of', 'a', 'and', 'be', 'have', 'with', 'is', 'which'].forEach(addLink); -}; -},{}],7:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util'), - eql = require('../eql'); - -module.exports = function(should, Assertion) { - var i = should.format; - - Assertion.add('include', function(obj, description) { - if(!Array.isArray(this.obj) && !util.isString(this.obj)) { - this.params = { operator: 'to include an object equal to ' + i(obj), message: description }; - var cmp = {}; - for(var key in obj) cmp[key] = this.obj[key]; - this.assert(eql(cmp, obj)); - } else { - this.params = { operator: 'to include ' + i(obj), message: description }; - - this.assert(~this.obj.indexOf(obj)); - } - }); - - Assertion.add('includeEql', function(obj, description) { - this.params = { operator: 'to include an object equal to ' + i(obj), message: description }; - - this.assert(this.obj.some(function(item) { - return eql(obj, item); - })); - }); -}; -},{"../eql":2,"../util":16}],8:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var eql = require('../eql'); - -module.exports = function(should, Assertion) { - Assertion.add('eql', function(val, description) { - this.params = { operator: 'to equal', expected: val, showDiff: true, message: description }; - - this.assert(eql(val, this.obj)); - }); - - Assertion.add('equal', function(val, description) { - this.params = { operator: 'to be', expected: val, showDiff: true, message: description }; - - this.assert(val === this.obj); - }); - - Assertion.alias('equal', 'exactly'); -}; -},{"../eql":2}],9:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - var i = should.format; - - Assertion.add('throw', function(message) { - var fn = this.obj - , err = {} - , errorInfo = '' - , ok = true; - - try { - fn(); - ok = false; - } catch(e) { - err = e; - } - - if(ok) { - if('string' == typeof message) { - ok = message == err.message; - } else if(message instanceof RegExp) { - ok = message.test(err.message); - } else if('function' == typeof message) { - ok = err instanceof message; - } - - if(message && !ok) { - if('string' == typeof message) { - errorInfo = " with a message matching '" + message + "', but got '" + err.message + "'"; - } else if(message instanceof RegExp) { - errorInfo = " with a message matching " + message + ", but got '" + err.message + "'"; - } else if('function' == typeof message) { - errorInfo = " of type " + message.name + ", but got " + err.constructor.name; - } - } else { - errorInfo = " (got " + i(err) + ")"; - } - } - - this.params = { operator: 'to throw exception' + errorInfo }; - - this.assert(ok); - }); - - Assertion.alias('throw', 'throwError'); -}; -},{}],10:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util'), - eql = require('../eql'); - -module.exports = function(should, Assertion) { - var i = should.format; - - Assertion.add('match', function(other, description) { - this.params = { operator: 'to match ' + i(other), message: description }; - - if(!eql(this.obj, other)) { - if(util.isRegExp(other)) { // something - regex - - if(util.isString(this.obj)) { - - this.assert(other.exec(this.obj)); - } else if(Array.isArray(this.obj)) { - - this.obj.forEach(function(item) { - this.assert(other.exec(item));// should we try to convert to String and exec? - }, this); - } else if(util.isObject(this.obj)) { - - var notMatchedProps = [], matchedProps = []; - util.forOwn(this.obj, function(value, name) { - if(other.exec(value)) matchedProps.push(i(name)); - else notMatchedProps.push(i(name)); - }, this); - - if(notMatchedProps.length) - this.params.operator += '\n\tnot matched properties: ' + notMatchedProps.join(', '); - if(matchedProps.length) - this.params.operator += '\n\tmatched properties: ' + matchedProps.join(', '); - - this.assert(notMatchedProps.length == 0); - } // should we try to convert to String and exec? - } else if(util.isFunction(other)) { - var res; - try { - res = other(this.obj); - } catch(e) { - if(e instanceof should.AssertionError) { - this.params.operator += '\n\t' + e.message; - } - throw e; - } - - if(res instanceof Assertion) { - this.params.operator += '\n\t' + res.getMessage(); - } - - //if we throw exception ok - it is used .should inside - if(util.isBoolean(res)) { - this.assert(res); // if it is just boolean function assert on it - } - } else if(util.isObject(other)) { // try to match properties (for Object and Array) - notMatchedProps = []; matchedProps = []; - - util.forOwn(other, function(value, key) { - try { - this.obj[key].should.match(value); - matchedProps.push(key); - } catch(e) { - if(e instanceof should.AssertionError) { - notMatchedProps.push(key); - } else { - throw e; - } - } - }, this); - - if(notMatchedProps.length) - this.params.operator += '\n\tnot matched properties: ' + notMatchedProps.join(', '); - if(matchedProps.length) - this.params.operator += '\n\tmatched properties: ' + matchedProps.join(', '); - - this.assert(notMatchedProps.length == 0); - } else { - this.assert(false); - } - } - }); - - Assertion.add('matchEach', function(other, description) { - this.params = { operator: 'to match each ' + i(other), message: description }; - - var f = other; - - if(util.isRegExp(other)) - f = function(it) { - return !!other.exec(it); - }; - else if(!util.isFunction(other)) - f = function(it) { - return eql(it, other); - }; - - util.forOwn(this.obj, function(value, key) { - var res = f(value, key); - - //if we throw exception ok - it is used .should inside - if(util.isBoolean(res)) { - this.assert(res); // if it is just boolean function assert on it - } - }, this); - }); -}; -},{"../eql":2,"../util":16}],11:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - Assertion.add('NaN', function() { - this.params = { operator: 'to be NaN' }; - - this.is.a.Number - .and.assert(isNaN(this.obj)); - }, true); - - Assertion.add('Infinity', function() { - this.params = { operator: 'to be Infinity' }; - - this.is.a.Number - .and.not.a.NaN - .and.assert(!isFinite(this.obj)); - }, true); - - Assertion.add('within', function(start, finish, description) { - this.params = { operator: 'to be within ' + start + '..' + finish, message: description }; - - this.assert(this.obj >= start && this.obj <= finish); - }); - - Assertion.add('approximately', function(value, delta, description) { - this.params = { operator: 'to be approximately ' + value + " ±" + delta, message: description }; - - this.assert(Math.abs(this.obj - value) <= delta); - }); - - Assertion.add('above', function(n, description) { - this.params = { operator: 'to be above ' + n, message: description }; - - this.assert(this.obj > n); - }); - - Assertion.add('below', function(n, description) { - this.params = { operator: 'to be below ' + n, message: description }; - - this.assert(this.obj < n); - }); - - Assertion.alias('above', 'greaterThan'); - Assertion.alias('below', 'lessThan'); - -}; -},{}],12:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util'), - eql = require('../eql'); - -var aSlice = Array.prototype.slice; - -module.exports = function(should, Assertion) { - var i = should.format; - - Assertion.add('property', function(name, val) { - if(arguments.length > 1) { - var p = {}; - p[name] = val; - this.have.properties(p); - } else { - this.have.properties(name); - } - this.obj = this.obj[name]; - }); - - Assertion.add('properties', function(names) { - var values = {}; - if(arguments.length > 1) { - names = aSlice.call(arguments); - } else if(!Array.isArray(names)) { - if(util.isString(names)) { - names = [names]; - } else { - values = names; - names = Object.keys(names); - } - } - - var obj = Object(this.obj), missingProperties = []; - - //just enumerate properties and check if they all present - names.forEach(function(name) { - if(!(name in obj)) missingProperties.push(i(name)); - }); - - var props = missingProperties; - if(props.length === 0) { - props = names.map(i); - } - - var operator = (props.length === 1 ? - 'to have property ' : 'to have properties ') + props.join(', '); - - this.params = { operator: operator }; - - this.assert(missingProperties.length === 0); - - // check if values in object matched expected - var valueCheckNames = Object.keys(values); - if(valueCheckNames.length) { - var wrongValues = []; - props = []; - - // now check values, as there we have all properties - valueCheckNames.forEach(function(name) { - var value = values[name]; - if(!eql(obj[name], value)) { - wrongValues.push(i(name) + ' of ' + i(value) + ' (got ' + i(obj[name]) + ')'); - } else { - props.push(i(name) + ' of ' + i(value)); - } - }); - - if(wrongValues.length > 0) { - props = wrongValues; - } - - operator = (props.length === 1 ? - 'to have property ' : 'to have properties ') + props.join(', '); - - this.params = { operator: operator }; - - this.assert(wrongValues.length === 0); - } - }); - - Assertion.add('length', function(n, description) { - this.have.property('length', n, description); - }); - - Assertion.alias('length', 'lengthOf'); - - var hasOwnProperty = Object.prototype.hasOwnProperty; - - Assertion.add('ownProperty', function(name, description) { - this.params = { operator: 'to have own property ' + i(name), message: description }; - - this.assert(hasOwnProperty.call(this.obj, name)); - - this.obj = this.obj[name]; - }); - - Assertion.alias('hasOwnProperty', 'ownProperty'); - - Assertion.add('empty', function() { - this.params = { operator: 'to be empty' }; - - if(util.isString(this.obj) || Array.isArray(this.obj) || util.isArguments(this.obj)) { - this.have.property('length', 0); - } else { - var obj = Object(this.obj); // wrap to reference for booleans and numbers - for(var prop in obj) { - this.have.not.ownProperty(prop); - } - } - }, true); - - Assertion.add('keys', function(keys) { - if(arguments.length > 1) keys = aSlice.call(arguments); - else if(arguments.length === 1 && util.isString(keys)) keys = [ keys ]; - else if(arguments.length === 0) keys = []; - - var obj = Object(this.obj); - - // first check if some keys are missing - var missingKeys = []; - keys.forEach(function(key) { - if(!hasOwnProperty.call(this.obj, key)) - missingKeys.push(i(key)); - }, this); - - // second check for extra keys - var extraKeys = []; - Object.keys(obj).forEach(function(key) { - if(keys.indexOf(key) < 0) { - extraKeys.push(i(key)); - } - }); - - var verb = keys.length === 0 ? 'to be empty' : - 'to have ' + (keys.length === 1 ? 'key ' : 'keys '); - - this.params = { operator: verb + keys.map(i).join(', ')}; - - if(missingKeys.length > 0) - this.params.operator += '\n\tmissing keys: ' + missingKeys.join(', '); - - if(extraKeys.length > 0) - this.params.operator += '\n\textra keys: ' + extraKeys.join(', '); - - this.assert(missingKeys.length === 0 && extraKeys.length === 0); - }); - - Assertion.alias("keys", "key"); - - Assertion.add('containEql', function(other) { - this.params = { operator: 'to contain ' + i(other) }; - var obj = this.obj; - if(Array.isArray(obj)) { - this.assert(obj.some(function(item) { - return eql(item, other); - })); - } else if(util.isString(obj)) { - // expect obj to be string - this.assert(obj.indexOf(String(other)) >= 0); - } else if(util.isObject(obj)) { - // object contains object case - util.forOwn(other, function(value, key) { - obj[key].should.eql(value); - }); - } else { - //other uncovered cases - this.assert(false); - } - }); - - Assertion.add('containDeep', function(other) { - this.params = { operator: 'to contain ' + i(other) }; - - var obj = this.obj; - if(Array.isArray(obj)) { - if(Array.isArray(other)) { - var otherIdx = 0; - obj.forEach(function(item) { - try { - should(item).not.be.null.and.containDeep(other[otherIdx]); - otherIdx++; - } catch(e) { - if(e instanceof should.AssertionError) { - return; - } - throw e; - } - }); - this.assert(otherIdx == other.length); - //search array contain other as sub sequence - } else { - this.assert(false); - } - } else if(util.isString(obj)) {// expect other to be string - this.assert(obj.indexOf(String(other)) >= 0); - } else if(util.isObject(obj)) {// object contains object case - if(util.isObject(other)) { - util.forOwn(other, function(value, key) { - should(obj[key]).not.be.null.and.containDeep(value); - }); - } else {//one of the properties contain value - this.assert(false); - } - } else { - this.eql(other); - } - }); - -}; -},{"../eql":2,"../util":16}],13:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = function(should, Assertion) { - Assertion.add('startWith', function(str, description) { - this.params = { operator: 'to start with ' + should.format(str), message: description }; - - this.assert(0 === this.obj.indexOf(str)); - }); - - Assertion.add('endWith', function(str, description) { - this.params = { operator: 'to end with ' + should.format(str), message: description }; - - this.assert(this.obj.indexOf(str, this.obj.length - str.length) >= 0); - }); -}; -},{}],14:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -var util = require('../util'); - -module.exports = function(should, Assertion) { - Assertion.add('Number', function() { - this.params = { operator: 'to be a number' }; - - this.assert(util.isNumber(this.obj)); - }, true); - - Assertion.add('arguments', function() { - this.params = { operator: 'to be arguments' }; - - this.assert(util.isArguments(this.obj)); - }, true); - - Assertion.add('type', function(type, description) { - this.params = { operator: 'to have type ' + type, message: description }; - - (typeof this.obj).should.be.exactly(type, description); - }); - - Assertion.add('instanceof', function(constructor, description) { - this.params = { operator: 'to be an instance of ' + constructor.name, message: description }; - - this.assert(Object(this.obj) instanceof constructor); - }); - - Assertion.add('Function', function() { - this.params = { operator: 'to be a function' }; - - this.assert(util.isFunction(this.obj)); - }, true); - - Assertion.add('Object', function() { - this.params = { operator: 'to be an object' }; - - this.assert(util.isObject(this.obj)); - }, true); - - Assertion.add('String', function() { - this.params = { operator: 'to be a string' }; - - this.assert(util.isString(this.obj)); - }, true); - - Assertion.add('Array', function() { - this.params = { operator: 'to be an array' }; - - this.assert(Array.isArray(this.obj)); - }, true); - - Assertion.add('Boolean', function() { - this.params = { operator: 'to be a boolean' }; - - this.assert(util.isBoolean(this.obj)); - }, true); - - Assertion.add('Error', function() { - this.params = { operator: 'to be an error' }; - - this.assert(util.isError(this.obj)); - }, true); - - Assertion.add('null', function() { - this.params = { operator: 'to be null' }; - - this.assert(this.obj === null); - }, true); - - Assertion.alias('instanceof', 'instanceOf'); -}; -},{"../util":16}],15:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - - -var util = require('./util') - , AssertionError = util.AssertionError - , inspect = util.inspect; - -/** - * Our function should - * @param obj - * @returns {Assertion} - */ -var should = function(obj) { - return new Assertion(util.isWrapperType(obj) ? obj.valueOf(): obj); -}; - -/** - * Initialize a new `Assertion` with the given _obj_. - * - * @param {*} obj - * @api private - */ - -var Assertion = should.Assertion = function Assertion(obj) { - this.obj = obj; -}; - - -/** - Way to extend Assertion function. It uses some logic - to define only positive assertions and itself rule with negative assertion. - - All actions happen in subcontext and this method take care about negation. - Potentially we can add some more modifiers that does not depends from state of assertion. -*/ -Assertion.add = function(name, f, isGetter) { - var prop = {}; - prop[isGetter ? 'get' : 'value'] = function() { - var context = new Assertion(this.obj); - context.copy = context.copyIfMissing; - - try { - f.apply(context, arguments); - } catch(e) { - //copy data from sub context to this - this.copy(context); - - //check for fail - if(e instanceof should.AssertionError) { - //negative fail - if(this.negate) { - this.obj = context.obj; - this.negate = false; - return this; - } - this.assert(false); - } - // throw if it is another exception - throw e; - } - //copy data from sub context to this - this.copy(context); - if(this.negate) { - this.assert(false); - } - - this.obj = context.obj; - this.negate = false; - return this; - }; - - Object.defineProperty(Assertion.prototype, name, prop); -}; - -Assertion.alias = function(from, to) { - Assertion.prototype[to] = Assertion.prototype[from] -}; - -should.AssertionError = AssertionError; -var i = should.format = function i(value) { - if(util.isDate(value) && typeof value.inspect !== 'function') return value.toISOString(); //show millis in dates - return inspect(value, { depth: null }); -}; - -should.use = function(f) { - f(this, Assertion); - return this; -}; - - -/** - * Expose should to external world. - */ -exports = module.exports = should; - - -/** - * Expose api via `Object#should`. - * - * @api public - */ - -Object.defineProperty(Object.prototype, 'should', { - set: function(){}, - get: function(){ - return should(this); - }, - configurable: true -}); - - -Assertion.prototype = { - constructor: Assertion, - - assert: function(expr) { - if(expr) return; - - var params = this.params; - - var msg = params.message, generatedMessage = false; - if(!msg) { - msg = this.getMessage(); - generatedMessage = true; - } - - var err = new AssertionError({ - message: msg - , actual: this.obj - , expected: params.expected - , stackStartFunction: this.assert - }); - - err.showDiff = params.showDiff; - err.operator = params.operator; - err.generatedMessage = generatedMessage; - - throw err; - }, - - getMessage: function() { - return 'expected ' + i(this.obj) + (this.negate ? ' not ': ' ') + - this.params.operator + ('expected' in this.params ? ' ' + i(this.params.expected) : ''); - }, - - copy: function(other) { - this.params = other.params; - }, - - copyIfMissing: function(other) { - if(!this.params) this.params = other.params; - }, - - - /** - * Negation modifier. - * - * @api public - */ - - get not() { - this.negate = !this.negate; - return this; - } -}; - - -},{"./util":16}],16:[function(require,module,exports){ -/*! - * Should - * Copyright(c) 2010-2014 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Check if given obj just a primitive type wrapper - * @param {Object} obj - * @returns {boolean} - * @api private - */ -exports.isWrapperType = function(obj) { - return isNumber(obj) || isString(obj) || isBoolean(obj); -}; - -/** - * Merge object b with object a. - * - * var a = { foo: 'bar' } - * , b = { bar: 'baz' }; - * - * utils.merge(a, b); - * // => { foo: 'bar', bar: 'baz' } - * - * @param {Object} a - * @param {Object} b - * @return {Object} - * @api private - */ - -exports.merge = function(a, b){ - if (a && b) { - for (var key in b) { - a[key] = b[key]; - } - } - return a; -}; - -function isNumber(arg) { - return typeof arg === 'number' || arg instanceof Number; -} - -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string' || arg instanceof String; -} - -function isBoolean(arg) { - return typeof arg === 'boolean' || arg instanceof Boolean; -} -exports.isBoolean = isBoolean; - -exports.isString = isString; - -function isBuffer(arg) { - return typeof Buffer !== 'undefined' && arg instanceof Buffer; -} - -exports.isBuffer = isBuffer; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} - -exports.isDate = isDate; - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -exports.isObject = isObject; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} - -exports.isRegExp = isRegExp; - -function isNullOrUndefined(arg) { - return arg == null; -} - -exports.isNullOrUndefined = isNullOrUndefined; - -function isArguments(object) { - return objectToString(object) === '[object Arguments]'; -} - -exports.isArguments = isArguments; - -exports.isFunction = function(arg) { - return typeof arg === 'function' || arg instanceof Function; -}; - -function isError(e) { - return isObject(e) && objectToString(e) === '[object Error]'; -} -exports.isError = isError; - -exports.inspect = require('util').inspect; - -exports.AssertionError = require('assert').AssertionError; - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -exports.forOwn = function(obj, f, context) { - for(var prop in obj) { - if(hasOwnProperty.call(obj, prop)) { - f.call(context, obj[prop], prop); - } - } -}; -},{"assert":17,"util":20}],17:[function(require,module,exports){ -// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 -// -// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! -// -// Originally from narwhal.js (http://narwhaljs.org) -// Copyright (c) 2009 Thomas Robinson <280north.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 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. - -// when used in node, this will actually load the util module we depend on -// versus loading the builtin util module as happens otherwise -// this is a bug in node module loading as far as I am concerned -var util = require('util/'); - -var pSlice = Array.prototype.slice; -var hasOwn = Object.prototype.hasOwnProperty; - -// 1. The assert module provides functions that throw -// AssertionError's when particular conditions are not met. The -// assert module must conform to the following interface. - -var assert = module.exports = ok; - -// 2. The AssertionError is defined in assert. -// new assert.AssertionError({ message: message, -// actual: actual, -// expected: expected }) - -assert.AssertionError = function AssertionError(options) { - this.name = 'AssertionError'; - this.actual = options.actual; - this.expected = options.expected; - this.operator = options.operator; - if (options.message) { - this.message = options.message; - this.generatedMessage = false; - } else { - this.message = getMessage(this); - this.generatedMessage = true; - } - var stackStartFunction = options.stackStartFunction || fail; - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, stackStartFunction); - } - else { - // non v8 browsers so we can have a stacktrace - var err = new Error(); - if (err.stack) { - var out = err.stack; - - // try to strip useless frames - var fn_name = stackStartFunction.name; - var idx = out.indexOf('\n' + fn_name); - if (idx >= 0) { - // once we have located the function frame - // we need to strip out everything before it (and its line) - var next_line = out.indexOf('\n', idx + 1); - out = out.substring(next_line + 1); - } - - this.stack = out; - } - } -}; - -// assert.AssertionError instanceof Error -util.inherits(assert.AssertionError, Error); - -function replacer(key, value) { - if (util.isUndefined(value)) { - return '' + value; - } - if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) { - return value.toString(); - } - if (util.isFunction(value) || util.isRegExp(value)) { - return value.toString(); - } - return value; -} - -function truncate(s, n) { - if (util.isString(s)) { - return s.length < n ? s : s.slice(0, n); - } else { - return s; - } -} - -function getMessage(self) { - return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + - self.operator + ' ' + - truncate(JSON.stringify(self.expected, replacer), 128); -} - -// At present only the three keys mentioned above are used and -// understood by the spec. Implementations or sub modules can pass -// other keys to the AssertionError's constructor - they will be -// ignored. - -// 3. All of the following functions must throw an AssertionError -// when a corresponding condition is not met, with a message that -// may be undefined if not provided. All assertion methods provide -// both the actual and expected values to the assertion error for -// display purposes. - -function fail(actual, expected, message, operator, stackStartFunction) { - throw new assert.AssertionError({ - message: message, - actual: actual, - expected: expected, - operator: operator, - stackStartFunction: stackStartFunction - }); -} - -// EXTENSION! allows for well behaved errors defined elsewhere. -assert.fail = fail; - -// 4. Pure assertion tests whether a value is truthy, as determined -// by !!guard. -// assert.ok(guard, message_opt); -// This statement is equivalent to assert.equal(true, !!guard, -// message_opt);. To test strictly for the value true, use -// assert.strictEqual(true, guard, message_opt);. - -function ok(value, message) { - if (!value) fail(value, true, message, '==', assert.ok); -} -assert.ok = ok; - -// 5. The equality assertion tests shallow, coercive equality with -// ==. -// assert.equal(actual, expected, message_opt); - -assert.equal = function equal(actual, expected, message) { - if (actual != expected) fail(actual, expected, message, '==', assert.equal); -}; - -// 6. The non-equality assertion tests for whether two objects are not equal -// with != assert.notEqual(actual, expected, message_opt); - -assert.notEqual = function notEqual(actual, expected, message) { - if (actual == expected) { - fail(actual, expected, message, '!=', assert.notEqual); - } -}; - -// 7. The equivalence assertion tests a deep equality relation. -// assert.deepEqual(actual, expected, message_opt); - -assert.deepEqual = function deepEqual(actual, expected, message) { - if (!_deepEqual(actual, expected)) { - fail(actual, expected, message, 'deepEqual', assert.deepEqual); - } -}; - -function _deepEqual(actual, expected) { - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - - } else if (util.isBuffer(actual) && util.isBuffer(expected)) { - if (actual.length != expected.length) return false; - - for (var i = 0; i < actual.length; i++) { - if (actual[i] !== expected[i]) return false; - } - - return true; - - // 7.2. If the expected value is a Date object, the actual value is - // equivalent if it is also a Date object that refers to the same time. - } else if (util.isDate(actual) && util.isDate(expected)) { - return actual.getTime() === expected.getTime(); - - // 7.3 If the expected value is a RegExp object, the actual value is - // equivalent if it is also a RegExp object with the same source and - // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). - } else if (util.isRegExp(actual) && util.isRegExp(expected)) { - return actual.source === expected.source && - actual.global === expected.global && - actual.multiline === expected.multiline && - actual.lastIndex === expected.lastIndex && - actual.ignoreCase === expected.ignoreCase; - - // 7.4. Other pairs that do not both pass typeof value == 'object', - // equivalence is determined by ==. - } else if (!util.isObject(actual) && !util.isObject(expected)) { - return actual == expected; - - // 7.5 For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical 'prototype' property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected); - } -} - -function isArguments(object) { - return Object.prototype.toString.call(object) == '[object Arguments]'; -} - -function objEquiv(a, b) { - if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) - return false; - // an identical 'prototype' property. - if (a.prototype !== b.prototype) return false; - //~~~I've managed to break Object.keys through screwy arguments passing. - // Converting to array solves the problem. - if (isArguments(a)) { - if (!isArguments(b)) { - return false; - } - a = pSlice.call(a); - b = pSlice.call(b); - return _deepEqual(a, b); - } - try { - var ka = objectKeys(a), - kb = objectKeys(b), - key, i; - } catch (e) {//happens when one is a string literal and the other isn't - return false; - } - // having the same number of owned properties (keys incorporates - // hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!_deepEqual(a[key], b[key])) return false; - } - return true; -} - -// 8. The non-equivalence assertion tests for any deep inequality. -// assert.notDeepEqual(actual, expected, message_opt); - -assert.notDeepEqual = function notDeepEqual(actual, expected, message) { - if (_deepEqual(actual, expected)) { - fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); - } -}; - -// 9. The strict equality assertion tests strict equality, as determined by ===. -// assert.strictEqual(actual, expected, message_opt); - -assert.strictEqual = function strictEqual(actual, expected, message) { - if (actual !== expected) { - fail(actual, expected, message, '===', assert.strictEqual); - } -}; - -// 10. The strict non-equality assertion tests for strict inequality, as -// determined by !==. assert.notStrictEqual(actual, expected, message_opt); - -assert.notStrictEqual = function notStrictEqual(actual, expected, message) { - if (actual === expected) { - fail(actual, expected, message, '!==', assert.notStrictEqual); - } -}; - -function expectedException(actual, expected) { - if (!actual || !expected) { - return false; - } - - if (Object.prototype.toString.call(expected) == '[object RegExp]') { - return expected.test(actual); - } else if (actual instanceof expected) { - return true; - } else if (expected.call({}, actual) === true) { - return true; - } - - return false; -} - -function _throws(shouldThrow, block, expected, message) { - var actual; - - if (util.isString(expected)) { - message = expected; - expected = null; - } - - try { - block(); - } catch (e) { - actual = e; - } - - message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + - (message ? ' ' + message : '.'); - - if (shouldThrow && !actual) { - fail(actual, expected, 'Missing expected exception' + message); - } - - if (!shouldThrow && expectedException(actual, expected)) { - fail(actual, expected, 'Got unwanted exception' + message); - } - - if ((shouldThrow && actual && expected && - !expectedException(actual, expected)) || (!shouldThrow && actual)) { - throw actual; - } -} - -// 11. Expected to throw an error: -// assert.throws(block, Error_opt, message_opt); - -assert.throws = function(block, /*optional*/error, /*optional*/message) { - _throws.apply(this, [true].concat(pSlice.call(arguments))); -}; - -// EXTENSION! This is annoying to write outside this module. -assert.doesNotThrow = function(block, /*optional*/message) { - _throws.apply(this, [false].concat(pSlice.call(arguments))); -}; - -assert.ifError = function(err) { if (err) {throw err;}}; - -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - if (hasOwn.call(obj, key)) keys.push(key); - } - return keys; -}; - -},{"util/":20}],18:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} - -},{}],19:[function(require,module,exports){ -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; -} -},{}],20:[function(require,module,exports){ -// 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 formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } - - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; -}; - - -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - // Allow for deprecating things in the process of starting up. - if (isUndefined(global.process)) { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } - - if (process.noDeprecation === true) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -}; - - -var debugs = {}; -var debugEnviron; -exports.debuglog = function(set) { - if (isUndefined(debugEnviron)) - debugEnviron = process.env.NODE_DEBUG || ''; - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; - - -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); -} -exports.inspect = inspect; - - -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] -}; - -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; - - -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; - - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } -} - - -function stylizeNoColor(str, styleType) { - return str; -} - - -function arrayToHash(array) { - var hash = {}; - - array.forEach(function(val, idx) { - hash[val] = true; - }); - - return hash; -} - - -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } - - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } - - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } - - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } - } - - var base = '', array = false, braces = ['{', '}']; - - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } - - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } - - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } - - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } - - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } - - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - - ctx.seen.push(value); - - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } - - ctx.seen.pop(); - - return reduceToSingleString(output, base, braces); -} - - -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); -} - - -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} - - -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; -} - - -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } - } - - return name + ': ' + str; -} - - -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); - - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } - - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} - - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = require('./support/isBuffer'); - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - - -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} - - -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; - -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); -} - - -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; - - -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = require('inherits'); - -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; - - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; - -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - -},{"./support/isBuffer":19,"inherits":18}]},{},[1]) -(1) -}); \ No newline at end of file diff --git a/node_modules/should/should.min.js b/node_modules/should/should.min.js deleted file mode 100644 index 5665c29a..00000000 --- a/node_modules/should/should.min.js +++ /dev/null @@ -1,55 +0,0 @@ -!function(C){if("object"==typeof exports)module.exports=C();else if("function"==typeof define&&define.amd)define(C);else{var h;"undefined"!=typeof window?h=window:"undefined"!=typeof global?h=global:"undefined"!=typeof self&&(h=self);h.Should=C()}}(function(){return function h(k,d,g){function l(f,c){if(!d[f]){if(!k[f]){var e="function"==typeof require&&require;if(!c&&e)return e(f,!0);if(a)return a(f,!0);throw Error("Cannot find module '"+f+"'");}e=d[f]={exports:{}};k[f][0].call(e.exports,function(b){var c= -k[f][1][b];return l(c?c:b)},e,e.exports,h,k,d,g)}return d[f].exports}for(var a="function"==typeof require&&require,e=0;e").append(b).html())});a.add("containHtml",function(b){this.params= -{operator:"to contain HTML "+f(b)};c(this.obj).html().indexOf(c("
        ").append(b).html()).should.be.above(-1)});a.add("text",function(b){this.params={operator:"to have text "+f(b)};var a=c.trim(c(this.obj).text());g.isRegExp(b)?a.should.match(b):a.should.eql(b)});a.add("containText",function(b){this.params={operator:"to contain text "+f(b)};var a=c.trim(c(this.obj).text());g.isRegExp(b)?a.should.match(b):a.indexOf(b).should.be.above(-1)});a.add("value",function(b){this.params={operator:"to have value "+ -f(b)};c(this.obj).val().should.eql(b)});a.add("data",function(){var b=["data","data","data"].concat(Array.prototype.slice.call(arguments,0));e.apply(this,b)});a.add("containElement",function(b){this.params={operator:"to contain "+c(b).inspect()};c(this.obj).find(b).should.not.have.length(0)});a.add("matchedBy",function(b){this.params={operator:"to be matched by selector "+b};c(this.obj).filter(b).should.not.have.length(0)});a.add("handle",function(b){this.params={operator:"to handle "+b};var a=c._data(c(this.obj).get(0), -"events");if(!a||!b||"string"!==typeof b)return this.assert(!1);var f=b.split(".");b=f.shift();var e=f.slice(0).sort(),e=RegExp("(^|\\.)"+e.join("\\.(?:.*\\.)?")+"(\\.|$)");if(a[b]&&f.length){for(f=0;f=a&&this.obj<=e)});d.add("approximately",function(a,e,f){this.params={operator:"to be approximately "+a+" \u00b1"+e,message:f};this.assert(Math.abs(this.obj-a)<=e)});d.add("above",function(a,e){this.params={operator:"to be above "+a,message:e};this.assert(this.obj>a)});d.add("below",function(a,e){this.params={operator:"to be below "+a,message:e};this.assert(this.objb.indexOf(a)&&h.push(c(a))});this.params={operator:(0===b.length?"to be empty":"to have "+(1===b.length?"key ":"keys "))+b.map(c).join(", ")};0h)return w(g)?a.stylize(RegExp.prototype.toString.call(g), -"regexp"):a.stylize("[Object]","special");a.seen.push(g);l=z?b(a,g,h,n,l):l.map(function(b){return p(a,g,h,n,b,z)});a.seen.pop();return q(l,k,A)}function c(a,b){if(r(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}if(n(b))return a.stylize(""+b,"number");if(v(b))return a.stylize(""+b,"boolean");if(null===b)return a.stylize("null","null")}function m(a){return"["+Error.prototype.toString.call(a)+ -"]"}function b(a,b,c,d,f){for(var e=[],g=0,h=b.length;ga.seen.indexOf(b.value)?(k=null===c?f(a,b.value,null):f(a,b.value,c-1),-1a?"0"+a.toString(10):a.toString(10)}function G(){var a=new Date,b=[E(a.getHours()),E(a.getMinutes()),E(a.getSeconds())].join(":");return[a.getDate(),H[a.getMonth()],b].join(" ")}var I=/%[sdj%]/g;d.format= -function(a){if(!t(a)){for(var b=[],c=0;c=e)return a;switch(a){case "%s":return String(d[c++]);case "%d":return Number(d[c++]);case "%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),f=d[c];c

        $qB|G|~ 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%0DaE`}q4ZfL&QT9@o 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 p>bPDyy&VV?q5V58@x)gAVpZ0_t^^r_g9 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 z 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%0DA6XHo` z`Cb!BFT%?yO?lI?eDki!f!HRcHQjc1qh`9}O*z_oW7wXuPXlL@uN1zy$A5OLJs9(C zli7Erbn2I#@BXoP%Euj&;nz0$|2)k10#x|;`Dem!KO^nuJ`G&kf{Hh}?N19D8)W^h zfARSbj)cSB-Z-xQVb|$ficN)8>Kv^1_PJij*FRkP&h}_}qyP@x;edy_xCoyH9!yt$- z^q)%3!?i-k-%3shb6u!{w~o$!wz~BgTVBs(*V%vrsLg07U3^^T36XnZ&z(-6J>N@O zuH4+xyRJ$Eehbsw%S55${r^+poTU{d#f# zy_QR#gnqNm&kA+JL8Jc5P=5cv4Gd#U9ai>n(3A2Z-WsdiqHQ8VKj?w3Y=T%~V~ng^ z?u*T@wpgJwto#1iBT_)FaoVq*iGQjk;ry!!i`~N@H-&4$%OqO9A5504Xtn9fdH8e8 z;3UNrr4X-IX}j*rqGEtBpklQrw8E>{9fQkp)Rfi_QB(o>-L#Ttd(K{vz4OeeyS2bj zrl6_xL2xUtXq_~2Gv@Q=n}^n^(9M3H++O+%xAfw7LHsBNb7A*S<@JP@wY6flcC#x7 zg-fw3VNn%2ST~9Ay75it)@>matu;^-!f%EoyVn}HR;qgY-%{1GQ@)w(mM;s93Hzy8 z!j)U<#f+JCJQLheEDWe%VdNhw`k`O&_s&Gu3JZ}0%u?@f|7ruGf(|69Ybn<7sjJ(vVy9X+)oLs)ZeiyK} z0aEUL0;=mYU`6H~`vCV;m7@(5r*KcT+BSX^=AMD7nL1u5veWg{&DLjJB5q!(Ci=&Y zH)q+IHRL(2Cs?c4>Z>l;Br=$=f@LY-Wh-&XeB7bKQ&d&Ul6i4_5Fd?BWHoWytyP$O zRhHHK0$e3V*5r>(2D4y^j5PG_)+i`LF?kEICvIZps5q(g^rXs&Qre85?~sd%f_xIm zY?HxK-S;0BA{br`Jl7x1>wYC_bel80tbXI7>(ounmwKS=L{$e(eD+c(rlX{#N~`Nq ze%VChW$0KCNCwo7`zpqTnA= zESJQ^&V%#Jguo76k%|xmjO==4DdiCtZ8)DvL3Xj=;{G3i*QqtGDy4>#;=o{w0rXEL z4%8`5g(X>C{0(Lib50QwvbQQ7U%hVx2^+u7zCt(sVhhvtEHoC4oHj}ZVr%whKrcyf z6?Rxmf)rJEOBQDQrME%gllaezD2c@YF&hrYepE3P8buAX3bFT8~< zFg7Squ*~^wt~@i!Su^%Oicz0h*v?(3%#V~8)84xx&Tuc6A)0RZ~YX76W^mLO6dz27-q_GzOMr-$&gF@m$7Tklk_Mjk( zkSnkNDfaLP^89;aY|7ZZeqIP8OPFUN&otTpC&D1bg@xJEU)hYW@8;7e?~Ekzo*7Mc zS(6eOjP0|AD2PG?Ar)&?6*z0;KEiJG`i5hl8dvPdr)Oh33)oTsApwB)4j`xVH`kw2 zg(FmNZA#Uy-aB1VW{#C~#3LbwhOTOK@OiU=k}y|S*N`GWd*ZyK9CX>#qbTn*nkt&s z(jDFzG`vJBXmw{gDvJh4rPY!(J=`Q@RMXPBa8x4$;U^F{dU~kwjZ4zSn();q_k^+O zqn*WoB>^}D-L1IZfEb{aNg{Ez^h9m@)w+E*BexJ{m<4qCv$73yT1}7q`gj-YEoVFg zt*aUcYryiRskM-rpCKSR7M?>ABN1R`7>H?Ch@0CjP#}Ubi!YO*h=L^&L<$&K=w0OC zvKLHvPBuES0u2E~L>UE9*Z6(w6EGxYE*mJ?)%Md z$YdN_L3EA){IhxG$Yrp17>gz+CS*euf;^HDDY+H?=Ioqj{ z+;d6AvO8+z0?T@Nxk)Qv+hLdL7`x6bF4VC~*TK&AOuBy;)g9ADi<%LxSd7qyjO9X% zsLw3_G5_9H7~C3XS)9THj+K%RgC+TS?fg991BQ(h?K3JZu^zV<$P>;#=QuI5{D0v^ zkKfAv<_GkyK$BRFMQi~oO}6rsjwedwhXYTkQ4+`|bS@yELs)nLNsPs%AU$2NC}=yE zuC{!dBTb_yK?hI}DF0A!DA?n@C`2UzHA*pD4&1!v9E=ctf&e<%K^jMo*W436b=AnzXEYjEbt$rvG7il zqx^e!n*GcI%=$9DbG?+Q{y5ZvD7*tF6c4-Q zlFnY2mj_c~{Tc(-lxQnuq)YOH0wAR`k@b?0=5rG0@uQDB5yIC2-d6TybLb2fbms3M zFXb@&K?xebjK;AcWQ=NW%%8ZB2LUyApXtq^;7XEmf#I@tC~Ojew?`GJrsI0WV%BrW zeM?iW2EKaJ&qSrR0svpT5S4b!WHCcwJAMO@jP+kcg=9pZ4@-pT=VwR!sR^n2CqxN%(LetMjFj z5h+RcA!@&~58AG2`JLq|Eo9ry^t;`_%+Ot=Ve=rJ&pirYq@qG_}~Me@{KjBZ6^QuZg)knjGJo%g%K(s(++hw+zmu@c;D{Q zdt`6L_!lW6)`qY}I-_4^XN>aqsrkiJ+j!in9ogfZ5gJi))Wr3}NFzGFZP7d=_->dw zTKdt8)7^tsyQo8EX60qiyB?)ZoO&O&`g9tYKvmT*`MHH@x4k^afBr!D$7=m!+GhNQ zRtfWz#i?u9cTtg}XQbm$)-LhPD?s^#M+3ess8b_W19&0qv_-W0b&MJ|qQsE%_2YJ# zKc{u0F!R#aDXoUxF~bcxK7l;mnXM?eE|B$GdiSmI{M(wtotS^XTw8i#W-^7mz6Z9p zkB@yu-pu)U?#Ffcfn>Fd7AxBZfAK%MBYqBS^-Sb9rN6hB?O8S|UpYlxjz_niSxqax zA8R>qp;h&zP!PKRz+&^4+WNkmwzjr=KVgDBy*)kV;0E!)Z$#s~p65iqD#Ps=_Em|M z)L4y&lXz-1nyfYTkOV{mY!SDY=oD7}(DC|TS8_cx>JS(AhX*f5ne1g4+gB<; zR?}sUtMqP_X^lkr#n9FG09k9vWa=SLiyzS*b@@*4CCTcWZCFFjp7fn(|EgdQ1c zW@O_HD@^c$$?OUb#l8t&0?UQL^fT?ER>mxo|L~$Jb5wZx_S*od(n6uxDN&!xcHbO- z#}RdILmfgsS-q2+GClxW_F4>=xP^#d7^bR!oaR|ObyzjtBE2$Km4M5iIs=?@PP%Ct z7a=Js=#|NPyJ?1El*uu+sbrnJ=$1x~2G>e|CoVbASroQnnOORxq<*letdrn&{lxTx zo%Fu*WZ!oK<*)MWK8roE&6txm#uhlQ}ZWjYXuXfL>Cu6bGw<+FL^m6IozKd3P;6UjJvvQQY7RlIY zN~?Kcwiodz87`hXbq$#ujFrcB5}CTV44;x==l%ZI1E#nM@+S2^XzyhawsQx&=njRK zUiicOy(EzG?4nneUJ{7DZ(mCbhtF$DTjH|wgG}jImZ6)Qo41g!{LZ((G`#z^P>3rv z_lUmRh0eDG2j^AOqJyTV6@q;uVrpV)qg2dz<7#HRtoHv?7+v7{WNNtoib;V&@b95h z>>?}?B>b%KYXX8-Z;^L&LhK#!EoKfP=#+Dw;Uu^t6Z-Q_^^#XUdbK_j$|VQ9sHOdM z{(#MGdK@UUWjHIM5CeIM<9b(V^JjN<|JW>@bf<5r;nKULYn|!QyPXV=>$DOc>NJU% zRvH;RhI{I9MLz5(@6BKLoqKeFZ>HmuZu8lF(n8H>tIP9A8UJC4_z9J#lX5Tla!ucb zi^qh{I$Ptyvd?miMo!X4nm;tLv`RY$S`S4>6`Kf3x=U?NX5Lj_rOdo33N1H#efg<; zF5f0Pnr3s>KsfP5xTMT|ZTgJ4Azx?Oo<2Dcu)zs00(31JHoCD*7x(=!jw*|}x)kYe z5MA%vVS22ll_k zJo7exo2S6j-E?-QprNm)4X5&XG>gBo;%TW%o+eIcUaNUA<^$VL2XW7gn5O6HS?kw+GXzx{aQ6kY2nb!z3$r+!EQ?>y@_!#M>u%eU8`-nke(jec zb$RH4@SmOFkh3ODp09i&(blI<4|6Is+krFv-0)J#e8K?S2?XIy{)7JfTEh<3(4Sp& z2<9&L*+E_Yt={Wq_NIPE31 za)mP9?v`@7peyu5%jD7t#`wM4GnU&J9Z;_8zMV1{6xKeQ@aT#(Qf;98%@e=64Bw4K zUGC!>5eij?;Yi!gn zcy1Fa@=bix*UyEc>$ik$n151UxB3|s+8O)r-P0Jgz%xPP%L>ciLjT^$mt(6*j6@_} zG?=bfef#YCJ$H(Cr-csai_VrhXV@RWUO9dNNtO@tGY^TX+*NaDOe$U4-(%knkBIoL zJyM%KBqS1=(?{$*Fea@ohN{!CZL5FZb*W=1v&&%@^5_X8LZTuT6CrlNe6d0o2*Gbd z$3dHZh(d+5|F%yGfIsioz@K$0&R7%`l*&0ZEKxCuol_D0ZUS7Sfk4V+ch&*BHsFym<_>mRqP{W#>z zyaM+>!lkObCBQZ5nRu(jQ~+GnAsBoH8|O-?WhSPeZqCsNn2$qFx-8p8P4X60#~uCkbXHXFx6O<*-lj3?iFC_qP#9BBfQ(Bw7$vue5wQ=K$paLw2xk!Le(_Ve@! z1VTz;XCEFAvDi8+NEcXzWg#za$QJgB*zGn-&Vw;FqhOvsD2la#*JmXs}kb`F&92lfY5^x};5pJDHv0|7#-%q=O)ljsz*-D|HL)1Wm6&7(V zTsIVUCpH?DupX;`Ysy?Eh*VOLvIvoRtOnu!WiDF>1Pb1(bY+QR^z2j_2Qn|+zd0f! z$wIN_hE&%|ys!*}$Sk188&AIGAeGS1Q4j-x?iF0NR`Mv-DPXfemsUUU-57;}$?P@I zM?o}1SE|2=)=(w0Ulev_vs9Zo5y4?cwo@b%pgHixsP)x) zH44^f5ullJoWn3c;+FU7KW|Kj*mk%KJ2FKnWw?jpD~b5df~>4zG!&a+ZkP1B*BhAY zO}HGi+G9`EKrm)0Y#Ahp30Ey4GRLU|!d2$o*rWQ;q%I0Nf%o7M@W9f^$5lKH1-Zi* z*StqK@y)rvut=&gRJDhLj7MnQ&_%<>m<(+L?;$tF$z=iwe0jxpRZ>-!2{10x?12wS zCNm8~cEc)h80jd60w}ikNFZ8Th$gr=EYx3p zhai{ELV*cp>NFZQ31g^U$KtBT3)qb;=f!pl6iRKM^zlk#JcpGi_W~$qnFS)3P>31@ zboO-wbB@85MxcKG{qBJ?6dD0t0v6UJiRpbr8FPgCZ`8F#+=mst&m6|)7iPrMC^%p- z?_YzqjBz+X`Fc!1wo^nn4Cz?|U^YcB@pE0UH*R}Vz>TGlknde3P*OyN$Sx8^dL!uG zK^r+LMFeoT1wvtI3u6Fx1_jsN6A=nPZH)22dpkDQynuvMpJy^=QBoQTkstFB(0Kri z(FY-3pc?WeH>Wt%+r~SAzct**Ajj%^(-4pb)e*HheEEktLgffYq(3W&h3y z?MiXW(ISW0?9eqYa78XD^H3F+vYi8X>k>SI{g(X;ot?lI!54>s{ogdw)Ww1x13h>V z2fOx?zJ<6r_sOqC-1>)-7izAvpd2hzQ@iF6YVUfiHBf^)8IMnV&R}fSWBInD@o-<|2p?~9L75o9I;o zLfu@@KyVnc`?fcESq`b1jdLY2d%n>bAha9MRo87upOHFuU77{E3cTR{-Xd5-!8#0B z@7%xZu-<;3@c#@zSIQ2yIjO4!G?TI3Gb~~45;WUh&6VQc zCzfM{LQhQ;uy-TKqM9(qKNyV+EiWt_aPm~P& z+=3jgYaqyiYAlol{4YTg0y_kz!DRf#P;$CKH&p^B;s0qCg<=Sp@V`nd8{;1p^i!~u-)DtRSuwd&!N1Y`pv)j$gasXZqFyek61rZD>lhIiZ^!_qT zhKvVRuKn+|E)Z}13}ak90-9DC0tZNZfg3y5g4T@t}zK_?#+P&!cYs!7Aa-p`Z>bMG3ZcJ<+WIT^FF* z%;C}n{;6Qsx`}|W)Ln=L(lc$(Z7eugSNk)sNFtuF7#J(88Ve>>LXhN4a7kNc6+%n< zw3@pT)i%4`d%Cayfz<>uv{VJeI!iDAk|?tWm(UE#hONamIJPle!^vPd(ZEKP#h7BS z6;csxLa=OGjhx3~D8`c^$2n|TCIwqN=RQk7OL(ax);@QTL6S)zqd5E~VgEhSF%?h+ z!aR}GQGrC<}rCv!waM_9o zNCWsAN;1jWQ%3?Tv>+X2hGvJD23g zlO%z7wWrA;RWoM|O9u8oHSOt{YHRS^Thyyp@o8wGcZek1?6%O;oCz~gKM0*oNOxqY!auHrS;g;R-X z!&%ZVdVTJe=z1}-*QDmOs;K=UksSh}eRr)Qy4W@UtLsm1k zhsQk%sE;}dc5+dGG&{8!CT*m~YP=!f9;Ia2ns@nHc~xb0+5H)KJ?5W z78YQ)V%BREm=|9AN!+TrEKt~_!w^0XV24LV%|OKIiD?5b|E9JN1_{!Ov?xbv#>lHJ z2G9?ME6&c8I9_Nt7_(27_0D{cr>btxWBW%>FDgvO7HOQw;tilX+oTg8j4TdEwX}{m zj&Jr(Y6q1jmwoZ*d8aYQ=`Pk%ZdFwjKH$y-4KZ_$^NQ>A^|G1>O;@{3OzTVVeMVw| zZZ|b}c=fZmP;??hSCV=A>HhVH`aRC7Lf6?V-rn98mC+BmzdgIV5iMWTs*-R2yVT2w zVCe$$=Y}MDP=bmb@=yCdj5_uGTu(%zn7uFUSuW^C!30ODD92(|cCP^5WC&^22Zq*$ zu-n+9S)=Tg&6ehUCJ}FD0@ZX6H~XvI>#5nP`LpCbi>o486}D||5Mg5tGL{rHRwVWK zP`g|?U=={C&E}j)mUSs%kJoSZ%jUpxK4ci)_|2hzcMeEBW`5{qI{h(D{;Jj|ceDV@pMNTFm&lw+^n zbNi~)r`E^fhADLy$GOl6&@toFpmS6xcbv~;Q!KVtMV%&d-`-0}OAaJC*vWNq_?rfnb%=%u6e#4zA zshKUQNRN5?3sR!`H%CW>z0FsL*4U!_o@~{O%s2&I;^MQw`7+j)hiG*fg@ifY{S}_% z6+LG6`D@>3Y|Ny ztZYRCKn2EM0+Zq&pE*An8PAUL%yQ^tRVvDdsyUov_i>Hqt{_mbL8)hnZ6rYcp;rmd zL^$60y|?1QolXOO^hXv~A6UDf?YDiQ*IM>kQ_cR0)!UD~0jIRgAc8msB+38iGx!)^ zmYfgz;vl;Gfgi)mC7i(J%E_(WmN5O&KWr$c2}6OIE=f9U#6A^Fs7Y()?#Bs_9Snax z6y;q>r(o}BQ?Q|+Ip7|{TQjl$kmX0&hxh*4f3ary2Y@cq;a;+55}mD)sB|J~I&MQu z&g{*X#Q>ARkQB(C#FS}{--O-}cfRmzkQ$?ffM(LruqH^6*YCyRzW3ji$e8$!4D-Re z@t6RUuu)oz;6ttHRiQ=qr=5#dx|B4OH-Fm) zB=Lf7+#`;iwT`#6uY{+I22PpfaS7^5)CNe8j-H`s<_o$N(F$hq-a8ptj6Le+38~~s!&`jYub@5gna+Fd<)zCDUnx)om@JZ{o)I=p(xs$(M^NX$0**i&0W`>QW$^M?Kc115zLbgg(S znnMNSlJmgpk7ffGSX{C}>#nU&Gcxy@ZxwcGmU~5$0A^G2K{HMqq}f$!LUc&LuYZ%4 zo%_}~)5#WNJgn2&+8>~88btyiNu6LNyEJZarx`eo6fpuedVi&~ik|;;TWeL<--Z_c zuuMrBRXXe&b$?>tf!U=FrwkP?%Lij6ot*ktr8O|^Xo2+WG15s@&V1&@@cJR37L*NM zbLNoqAHr9b0Dl%dfeq>>D=Nx;g|MO~=ffoh;&gXTPR_N`bwXi<@Qc;vLlK8g{a6w* z(8t{&pujyYENXU*;O2(Z3a_Q%RrF>-;Mg z41gr5+5b?Hw5{fa-RjGA#=)^W=YALCG>SVd9|Uw(p&?5F!uf(dE8B=1n-tU0dLp`} z=nZUIaM@xeV?ia=>fCUBp&$12oVS=l&EEgJ3Z(J%$FnEigR#6O0Po&%rR!xB1vZ!4 zY`dY4&~dK*L^r02j~ZXTBOeC=049`dXnUs~(0y`*AYXez9&Dok8_!C?7~cfniaU`T z)?;z#=pV8?Qq;3JQ%WG{RR@Xky02bJ?giLb0_Lvd`ZR*jZ8EvY-)OYhKW7>&MdRCG z#S#~;0%3LNQphTW-F1PN_51sieLhrw0;g0P@*4I*Z<9HtL#YBk*I-vj5jYhTZm8}? z;j=9PfEvK9ZKtu(0^M#IFD7CPCeTulJchS6#nhw{vw?^H)7%CPTfFFPhec z#THn|-l<@=`)U>z`p2!28_2UUso%bMmPuk-IC^qQqmI-$jefU==!)!UxATlSPzPbI zx&)isQB-sufJ1yp9Tb_hDlz&we)o1-0|%m&VetoTy$*NE39z#WV6)o9*V^#`k*A_Y zGciuYCQOX5L-M_>Nv@1=Asgl@TvA=_a1sFLDGod8>l+f!T^W7*efL4j9XmD@An76iEkP; zk4g@X=m7iJ+%A@?AE6E}(_H^&cMbF9%#vvxBDwAB>QrlIVczaabr$rRMnX|=sxCxwTBY!JZZB(`twwKH9!lUr0PxB}$Qjx2 zcx_pZc+OAw_S=zHujRu98YJ5S#m0?+;w%3xa7ObZH8OPix3t74z^(|$jR zA|pr!B}oAq*5TCDP$GZ+{SDwp*`%CQ4+?J0uz*t$IV|a7t1``j0@Pne=w>nd!1}H? z)J`|{8>TBX`&`hGWq8M_Bjmx2Shul$H01-904%3q+Q zH);Ta0Gz>K%6~KHuc_~n=4SSQ^=x)nR*MjCWn8WH9rShJumZO-vOlk3%!+LsYDpPb z<$MVTDYdZ?CGN33Zq;)C<>H_fEFN&~Ka&Gro;Y{IxOYi=hoOfIyY&nOM`s_b%k*9H zB@p`s`q+&$KFnJ&vq%2gmyMM`Ni_?xAPEBt*#iAWYwx|C&58JnPEyaK+i%Jvn-Jq{ zvH)PM=M1Qc=^NvwS|^j;)((UQm;QKFm}d_bqQnHgFY$%@Z4D0!kvn{s}hWC_=dmt=qyH$Oli@;b`B8VmS)=sPmU&awh3;VPJ{j$H(l>n(yjjn zF^QAvOzkLh6DXsdwz{#0pcoX`A&*tA=GW4-qFq3+H{&TqrKyu7`S3z92lPDg~j zd^_Z2fR115j)mLN))FB@Jl+xvW+)^mVDFG`#Eos@)AYIoxF~*iER@6IMSE@UGa0H* zfmpkUUXADb{Y|2ve8wG$z=_B9XgtK%LbY?%fD z1&0#dezACGNT?s=wB7Ki;ooJyTR^eDnj#*(GI!t$hXU(&+Xk};brjXdep+ksbd+iX z>c+H~uRWjlV{3MmwMuqIV{I)ksn9mrhcfj*spZ${rpRx}fcvUIF~yr| zEMP_iy>?DVdd4!`faNLz6vSY$EIA9DnP><=C;+(Sp_>R!)aQbu9S`k4RKzPln_NJy z4U@fUO!PZkAH*S|1_pP_swQIcwyq&SV!Et|qMf>}-^np&Ly>(o8^c0knV`uDiYoqzdf)5^!Y@YoAJ2!g+bMSOBSAE@% zR+vj8KflZZT=?@$<>rGcKfr?5JO@h-MGoG0CCi77UgIbT;&%QSy3QMi`M(56%ms&4 zv8Hsg+`ztz+pye?QV~}>?rvY=22hkm8n=ti3y@f>8?%d5e^VWQDKtpy4Tv7s@C4fb za#`>Wr5<{@Gc1U%*_54WLdpmdbfNF%#;!W~i)@9ltNP_S^!2`KuM zB2s=9ElBtkHX!oc5gAMNJRm|geLyb`TV07u5Ra#Fw)XqaOKVDdS{pWxSA8G&#&`?P zv)Rts`Z@|alZ9s%CNf#x{e6S0k1LKIcIR<@Kudv%J|dU?kUMgSP9;PCyf<|`Lx2Qy1ttRU>(2~NCS95OFtYc; z2cH46i=QucW%Yvt&x91>j|C}4GNNSAW?!%Zhad%uB>DSwYkEuL_or{~T;syVKxWp3 z;#H@=Ok6Bx{}1H?v^1ILxS!Scbp^ZjNY5?1Lx_F>pI{R`UoKX82wT~s> z$ADMIM&!UEpm_W#`%*{G>Awn3GwHI;_H=@18P|OWu*Dqtmg*$ga89EB5Z!m>&%owzLwhzRC zxUg}6CKb~az)mQILOd<1M&Wtq;di#@A;bt2=H&rakp(q^)ibK9zN_z|J7ny7fmrlVKpy6+fngFoC8w+!^{x@P(ga1OoH9E3Mt{m*= zDPVR0B3ZWPn zYchPIjVUFz+ZdHoE2w(R(*PD>uVRwj@tIsW%i{KZPm3*m5)CrfYk&+QN$9MuzK7?wH z5ZgqE6Cbh}A+a!ZiW@w(=HFiDd%c2!7KOr;c>e&frWoe>zSbrsoL(|m>KA?ud{<&L zE!nauoPx?^N$fd6Xq8MEGbvoLb*e#iC?Wt$VB?E2hz*`HvS>Wfxpo_tQ zDZtO<$__^l%W5MtFfY_l@Vp8A-lw{USl3>G+!Sa8+ihkul7A9>eh0=EmI&`K7v^yz z$@yankO`Nr7?@v*51^OgojuSaFZ6H9m0W6evHHIf~Xuf zy$SQieL1IoOv%{*J^W%3t`&KmpkGc6DX<71E{)rWzLm|i3}{?(A8G4;rm@~PBC=YD z#febe6QfI9q>j5csq5fxC7oZ6ul_(zTa^Q%uxM-a zV;VnAdK;plroIn2kJBM1b7EDLMD)<$Wcftfo;&*Jc&ws=OH(Kfeq`3*W;QMWgCXFb zYQfV&qtiNLu<*$MD53M!|L}2}ukpu~X=odquhv3HYZJL8vfq;Btg5;~<-6=`KkM-` z0%84`suunV?y?ca2()5JyS-LL5d>f7w|QHrvC+_ZVK)@+wzcl%F3D8_9D1QtIh;ZX zQdlulO~-@QeX$0VXEr)5rM10n^6)#Uk9hT5;aUKPVwn`}jO9+zdGyrzz$UI2 z7CH==Y><5snbv_!(TJG*Qv}Jsf#s$VJ4@WGt1%&